diff --git a/.gitignore b/.gitignore index 48ea2a60..70bf5624 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,6 @@ perlite/Demo/.obsidian/core-plugins.json perlite/Demo/.obsidian/graph.json perlite/Demo/.obsidian/hotkeys.json perlite/Demo/.obsidian/workspace.json -perlite/Demo/Test Canvas.canvas perlite/logo2.svg Thumbs.db perlite-dev @@ -18,12 +17,6 @@ _Notes perlite/.scripts/vendor perlite/.scripts/release.sh perlite/.scripts/canvas.js -perlite/Link Tests/root_image.png -perlite/Link Tests/folder1/image_parentFolder.png -perlite/Link Tests/folder1/folder 2/image_sameFolder.png -perlite/Link Tests/folder1/folder 2/parent_andRoot_folder_test.md -perlite/Link Tests/folder1/folder 2/same_folder_test.md -perlite/Link Tests/folder1/folder 2/subfolder_test.md -perlite/Link Tests/folder1/folder 2/docs/image_subFolder.png -perlite/Link Tests/folder1/folder 2/docs/subfolder_document.md perlite/sec.jpg +perlite/Demo/Demo Documents/test +perlite/Demo/Demo Documents/test/* diff --git a/Changelog.md b/Changelog.md index df26bfc3..b148ec28 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,25 @@ +## 1.6.1 +- Support Zettelkasten Filenames, use with caution! - PR [#159](https://github.com/secure-77/Perlite/pull/159) thanks to @smtucker +- replaced deprecated utf8_decode() - PR [#164](https://github.com/secure-77/Perlite/pull/164) thanks to @dewillepl +- fixed theme issue [#167](https://github.com/secure-77/Perlite/issues/167) +- implemented issue (additional highlight.js support) [#173](https://github.com/secure-77/Perlite/issues/173) +- sustainable mb_strlen / strlen / utf8_decode fix +- added headline copy link button [#156](https://github.com/secure-77/Perlite/issues/156) +- show random button only when graph-data is availible [#168](https://github.com/secure-77/Perlite/issues/168) +- fixed some pop hover issues (use with 100%) and show content +- implemented hidden text feature [#160](https://github.com/secure-77/Perlite/issues/160) +- eleminated regex-based post-processing by implementing it into PerliteParsedown, this fixed issue [#177](https://github.com/secure-77/Perlite/issues/177) +- implemented support for internal Markdown Links [#170](https://github.com/secure-77/Perlite/issues/170) +- implemented support for parameter based obsidian image attribute syntax to fix issue [#142](https://github.com/secure-77/Perlite/issues/142) +- implemented support for "nice" internal links, this way always the filename only will be displayed without the path +- fixed issue [#172](https://github.com/secure-77/Perlite/issues/172) +- updated katex to 0.16.27 +- updated vis-network to 9.1.13 +- update mermaid to 11.12.2 and re-integrate the dependency directly +- update to the latest app.css + style adjustments, fixed tags display issue +- removed depedency for php yaml extension + + ## 1.6 - get rid of mb_strlen, fixed issue [#151](https://github.com/secure-77/Perlite/issues/151) thanks to @Sephral - hide X / Twitter when not set, issue [#152](https://github.com/secure-77/Perlite/issues/152), thanks to @EKNr1 diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml index 491c285a..7a1ced05 100644 --- a/docker-compose-dev.yml +++ b/docker-compose-dev.yml @@ -10,12 +10,15 @@ services: - LINE_BREAKS=true - ABSOLUTE_PATHS=false - ALLOWED_FILE_LINK_TYPES=pdf,mp4 + - HIGHLIGHTJS_LANGS=powershell - DISABLE_POP_HOVER=false + - NICE_LINKS=true - SHOW_TOC=true - SHOW_LOCAL_GRAPH=true - HOME_FILE=README - FONT_SIZE=15 - HTML_SAFE_MODE=true + - ZETTELKASTEN_FILENAMES_ENABLED=false - TEMP_PATH=/tmp - SITE_TITLE=Demo - SITE_TYPE=article diff --git a/docker-compose-build.yml b/docker-compose-test.yml similarity index 83% rename from docker-compose-build.yml rename to docker-compose-test.yml index ef89ac68..d8978f5c 100644 --- a/docker-compose-build.yml +++ b/docker-compose-test.yml @@ -1,7 +1,7 @@ services: perlite: - image: sec77/perlite:dev - container_name: perlite-build + image: sec77/perlite:test + container_name: perlite-test environment: - NOTES_PATH=Demo - HIDE_FOLDERS=docs,private,trash @@ -9,12 +9,15 @@ services: - LINE_BREAKS=true - ABSOLUTE_PATHS=false - ALLOWED_FILE_LINK_TYPES=pdf,mp4 + - HIGHLIGHTJS_LANGS=powershell - DISABLE_POP_HOVER=true + - NICE_LINKS=true - SHOW_TOC=true - SHOW_LOCAL_GRAPH=true - HOME_FILE=README - FONT_SIZE=15 - HTML_SAFE_MODE=true + - ZETTELKASTEN_FILENAMES_ENABLED=false - TEMP_PATH=/tmp - SITE_TITLE=Demo - SITE_TYPE=article @@ -32,7 +35,7 @@ services: web: image: nginx:stable - container_name: perlite_web-build + container_name: perlite_web-test ports: - 80:80 volumes: diff --git a/docker-compose.yml b/docker-compose.yml index 4a968e29..d1c9cec1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,12 +10,15 @@ services: - LINE_BREAKS=true - ABSOLUTE_PATHS=false - ALLOWED_FILE_LINK_TYPES=pdf,mp4 + - HIGHLIGHTJS_LANGS=powershell - DISABLE_POP_HOVER=false + - NICE_LINKS=true - SHOW_TOC=true - SHOW_LOCAL_GRAPH=true - HOME_FILE=README - FONT_SIZE=15 - HTML_SAFE_MODE=true + - ZETTELKASTEN_FILENAMES_ENABLED=false - TEMP_PATH=/tmp - SITE_TITLE=Demo - SITE_TYPE=article diff --git a/perlite/.js/katex.min.js b/perlite/.js/katex.min.js index f59062a9..3cd2e1a5 100644 --- a/perlite/.js/katex.min.js +++ b/perlite/.js/katex.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.katex=t():e.katex=t()}("undefined"!=typeof self?self:this,(function(){return function(){"use strict";var e={d:function(t,r){for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t={};e.d(t,{default:function(){return Wn}});class r{constructor(e,t){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;let n,o,s="KaTeX parse error: "+e;const i=t&&t.loc;if(i&&i.start<=i.end){const e=i.lexer.input;n=i.start,o=i.end,n===e.length?s+=" at end of input: ":s+=" at position "+(n+1)+": ";const t=e.slice(n,o).replace(/[^]/g,"$&\u0332");let r,a;r=n>15?"\u2026"+e.slice(n-15,n):e.slice(0,n),a=o+15":">","<":"<",'"':""","'":"'"},i=/[&><"']/g;const a=function(e){return"ordgroup"===e.type||"color"===e.type?1===e.body.length?a(e.body[0]):e:"font"===e.type?a(e.body):e};var l={contains:function(e,t){return-1!==e.indexOf(t)},deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(i,(e=>s[e]))},hyphenate:function(e){return e.replace(o,"-$1").toLowerCase()},getBaseElem:a,isCharacterBox:function(e){const t=a(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){const t=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return t?":"!==t[2]?null:/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?t[1].toLowerCase():null:"_relative"}};const h={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:e=>"#"+e},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:e=>Math.max(0,e),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:e=>Math.max(0,e),cli:"-e, --max-expand ",cliProcessor:e=>"Infinity"===e?1/0:parseInt(e)},globalGroup:{type:"boolean",cli:!1}};function c(e){if(e.default)return e.default;const t=e.type,r=Array.isArray(t)?t[0]:t;if("string"!=typeof r)return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}class m{constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{};for(const t in h)if(h.hasOwnProperty(t)){const r=h[t];this[t]=void 0!==e[t]?r.processor?r.processor(e[t]):e[t]:c(r)}}reportNonstrict(e,t,r){let o=this.strict;if("function"==typeof o&&(o=o(e,t,r)),o&&"ignore"!==o){if(!0===o||"error"===o)throw new n("LaTeX-incompatible input and strict mode is set to 'error': "+t+" ["+e+"]",r);"warn"===o?"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"):"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+o+"': "+t+" ["+e+"]")}}useStrictBehavior(e,t,r){let n=this.strict;if("function"==typeof n)try{n=n(e,t,r)}catch(e){n="error"}return!(!n||"ignore"===n)&&(!0===n||"error"===n||("warn"===n?("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"),!1):("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+n+"': "+t+" ["+e+"]"),!1)))}isTrusted(e){if(e.url&&!e.protocol){const t=l.protocolFromUrl(e.url);if(null==t)return!1;e.protocol=t}const t="function"==typeof this.trust?this.trust(e):this.trust;return Boolean(t)}}class p{constructor(e,t,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=r}sup(){return u[d[this.id]]}sub(){return u[g[this.id]]}fracNum(){return u[f[this.id]]}fracDen(){return u[b[this.id]]}cramp(){return u[y[this.id]]}text(){return u[x[this.id]]}isTight(){return this.size>=2}}const u=[new p(0,0,!1),new p(1,0,!0),new p(2,1,!1),new p(3,1,!0),new p(4,2,!1),new p(5,2,!0),new p(6,3,!1),new p(7,3,!0)],d=[4,5,4,5,6,7,6,7],g=[5,5,5,5,7,7,7,7],f=[2,3,4,5,6,7,6,7],b=[3,3,5,5,7,7,7,7],y=[1,1,3,3,5,5,7,7],x=[0,1,2,3,2,3,2,3];var w={DISPLAY:u[0],TEXT:u[2],SCRIPT:u[4],SCRIPTSCRIPT:u[6]};const v=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];const k=[];function S(e){for(let t=0;t=k[t]&&e<=k[t+1])return!0;return!1}v.forEach((e=>e.blocks.forEach((e=>k.push(...e)))));const M=80,z={doubleleftarrow:"M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",doublerightarrow:"M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",leftarrow:"M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",leftbrace:"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",leftbraceunder:"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",leftgroup:"M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",leftgroupunder:"M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",leftharpoon:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",leftharpoonplus:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",leftharpoondown:"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",leftharpoondownplus:"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",lefthook:"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",leftlinesegment:"M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",leftmapsto:"M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",leftToFrom:"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",longequal:"M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",midbrace:"M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",midbraceunder:"M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",oiintSize1:"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",oiintSize2:"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",oiiintSize1:"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",oiiintSize2:"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",rightarrow:"M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",rightbrace:"M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",rightbraceunder:"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",rightgroup:"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",rightgroupunder:"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",rightharpoon:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",rightharpoonplus:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",rightharpoondown:"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",rightharpoondownplus:"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",righthook:"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",rightlinesegment:"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",rightToFrom:"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",twoheadleftarrow:"M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",twoheadrightarrow:"M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",tilde1:"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",tilde2:"M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",tilde3:"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",tilde4:"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",vec:"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",widehat1:"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",widehat2:"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat3:"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat4:"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widecheck1:"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",widecheck2:"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck3:"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck4:"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",baraboveleftarrow:"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",rightarrowabovebar:"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",baraboveshortleftharpoon:"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",rightharpoonaboveshortbar:"M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",shortbaraboveleftharpoon:"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",shortrightharpoonabovebar:"M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"};class A{constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return l.contains(this.classes,e)}toNode(){const e=document.createDocumentFragment();for(let t=0;te.toText())).join("")}}var T={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}};const B={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},C={"\xc5":"A","\xd0":"D","\xde":"o","\xe5":"a","\xf0":"d","\xfe":"o","\u0410":"A","\u0411":"B","\u0412":"B","\u0413":"F","\u0414":"A","\u0415":"E","\u0416":"K","\u0417":"3","\u0418":"N","\u0419":"N","\u041a":"K","\u041b":"N","\u041c":"M","\u041d":"H","\u041e":"O","\u041f":"N","\u0420":"P","\u0421":"C","\u0422":"T","\u0423":"y","\u0424":"O","\u0425":"X","\u0426":"U","\u0427":"h","\u0428":"W","\u0429":"W","\u042a":"B","\u042b":"X","\u042c":"B","\u042d":"3","\u042e":"X","\u042f":"R","\u0430":"a","\u0431":"b","\u0432":"a","\u0433":"r","\u0434":"y","\u0435":"e","\u0436":"m","\u0437":"e","\u0438":"n","\u0439":"n","\u043a":"n","\u043b":"n","\u043c":"m","\u043d":"n","\u043e":"o","\u043f":"n","\u0440":"p","\u0441":"c","\u0442":"o","\u0443":"y","\u0444":"b","\u0445":"x","\u0446":"n","\u0447":"n","\u0448":"w","\u0449":"w","\u044a":"a","\u044b":"m","\u044c":"a","\u044d":"e","\u044e":"m","\u044f":"r"};function N(e,t,r){if(!T[t])throw new Error("Font metrics not found for font: "+t+".");let n=e.charCodeAt(0),o=T[t][n];if(!o&&e[0]in C&&(n=C[e[0]].charCodeAt(0),o=T[t][n]),o||"text"!==r||S(n)&&(o=T[t][77]),o)return{depth:o[0],height:o[1],italic:o[2],skew:o[3],width:o[4]}}const q={};const I=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],R=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],H=function(e,t){return t.size<2?e:I[e-1][t.size-1]};class O{constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||O.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=R[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){const t={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(const r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);return new O(t)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:H(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:R[e-1]})}havingBaseStyle(e){e=e||this.style.text();const t=H(O.BASESIZE,e);return this.size===t&&this.textSize===O.BASESIZE&&this.style===e?this:this.extend({style:e,size:t})}havingBaseSizing(){let e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==O.BASESIZE?["sizing","reset-size"+this.size,"size"+O.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=function(e){let t;if(t=e>=5?0:e>=3?1:2,!q[t]){const e=q[t]={cssEmPerMu:B.quad[t]/18};for(const r in B)B.hasOwnProperty(r)&&(e[r]=B[r][t])}return q[t]}(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}}O.BASESIZE=6;var E=O;const L={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},D={ex:!0,em:!0,mu:!0},V=function(e){return"string"!=typeof e&&(e=e.unit),e in L||e in D||"ex"===e},P=function(e,t){let r;if(e.unit in L)r=L[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if("mu"===e.unit)r=t.fontMetrics().cssEmPerMu;else{let o;if(o=t.style.isTight()?t.havingStyle(t.style.text()):t,"ex"===e.unit)r=o.fontMetrics().xHeight;else{if("em"!==e.unit)throw new n("Invalid unit: '"+e.unit+"'");r=o.fontMetrics().quad}o!==t&&(r*=o.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*r,t.maxSize)},F=function(e){return+e.toFixed(4)+"em"},G=function(e){return e.filter((e=>e)).join(" ")},U=function(e,t,r){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=r||{},t){t.style.isTight()&&this.classes.push("mtight");const e=t.getColor();e&&(this.style.color=e)}},Y=function(e){const t=document.createElement(e);t.className=G(this.classes);for(const e in this.style)this.style.hasOwnProperty(e)&&(t.style[e]=this.style[e]);for(const e in this.attributes)this.attributes.hasOwnProperty(e)&&t.setAttribute(e,this.attributes[e]);for(let e=0;e/=\x00-\x1f]/,W=function(e){let t="<"+e;this.classes.length&&(t+=' class="'+l.escape(G(this.classes))+'"');let r="";for(const e in this.style)this.style.hasOwnProperty(e)&&(r+=l.hyphenate(e)+":"+this.style[e]+";");r&&(t+=' style="'+l.escape(r)+'"');for(const e in this.attributes)if(this.attributes.hasOwnProperty(e)){if(X.test(e))throw new n("Invalid attribute name '"+e+"'");t+=" "+e+'="'+l.escape(this.attributes[e])+'"'}t+=">";for(let e=0;e",t};class _{constructor(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,U.call(this,e,r,n),this.children=t||[]}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return l.contains(this.classes,e)}toNode(){return Y.call(this,"span")}toMarkup(){return W.call(this,"span")}}class j{constructor(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,U.call(this,t,n),this.children=r||[],this.setAttribute("href",e)}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return l.contains(this.classes,e)}toNode(){return Y.call(this,"a")}toMarkup(){return W.call(this,"a")}}class ${constructor(e,t,r){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=t,this.src=e,this.classes=["mord"],this.style=r}hasClass(e){return l.contains(this.classes,e)}toNode(){const e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(const t in this.style)this.style.hasOwnProperty(t)&&(e.style[t]=this.style[t]);return e}toMarkup(){let e=''+l.escape(this.alt)+'=n[0]&&e<=n[1])return r.name}}return null}(this.text.charCodeAt(0));l&&this.classes.push(l+"_fallback"),/[\xee\xef\xed\xec]/.test(this.text)&&(this.text=Z[this.text])}hasClass(e){return l.contains(this.classes,e)}toNode(){const e=document.createTextNode(this.text);let t=null;this.italic>0&&(t=document.createElement("span"),t.style.marginRight=F(this.italic)),this.classes.length>0&&(t=t||document.createElement("span"),t.className=G(this.classes));for(const e in this.style)this.style.hasOwnProperty(e)&&(t=t||document.createElement("span"),t.style[e]=this.style[e]);return t?(t.appendChild(e),t):e}toMarkup(){let e=!1,t="0&&(r+="margin-right:"+this.italic+"em;");for(const e in this.style)this.style.hasOwnProperty(e)&&(r+=l.hyphenate(e)+":"+this.style[e]+";");r&&(e=!0,t+=' style="'+l.escape(r)+'"');const n=l.escape(this.text);return e?(t+=">",t+=n,t+="",t):n}}class J{constructor(e,t){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=t||{}}toNode(){const e=document.createElementNS("http://www.w3.org/2000/svg","svg");for(const t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);for(let t=0;t':''}}class ee{constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){const e=document.createElementNS("http://www.w3.org/2000/svg","line");for(const t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);return e}toMarkup(){let e="","\\gt",!0),ie(ae,he,xe,"\u2208","\\in",!0),ie(ae,he,xe,"\ue020","\\@not"),ie(ae,he,xe,"\u2282","\\subset",!0),ie(ae,he,xe,"\u2283","\\supset",!0),ie(ae,he,xe,"\u2286","\\subseteq",!0),ie(ae,he,xe,"\u2287","\\supseteq",!0),ie(ae,ce,xe,"\u2288","\\nsubseteq",!0),ie(ae,ce,xe,"\u2289","\\nsupseteq",!0),ie(ae,he,xe,"\u22a8","\\models"),ie(ae,he,xe,"\u2190","\\leftarrow",!0),ie(ae,he,xe,"\u2264","\\le"),ie(ae,he,xe,"\u2264","\\leq",!0),ie(ae,he,xe,"<","\\lt",!0),ie(ae,he,xe,"\u2192","\\rightarrow",!0),ie(ae,he,xe,"\u2192","\\to"),ie(ae,ce,xe,"\u2271","\\ngeq",!0),ie(ae,ce,xe,"\u2270","\\nleq",!0),ie(ae,he,we,"\xa0","\\ "),ie(ae,he,we,"\xa0","\\space"),ie(ae,he,we,"\xa0","\\nobreakspace"),ie(le,he,we,"\xa0","\\ "),ie(le,he,we,"\xa0"," "),ie(le,he,we,"\xa0","\\space"),ie(le,he,we,"\xa0","\\nobreakspace"),ie(ae,he,we,null,"\\nobreak"),ie(ae,he,we,null,"\\allowbreak"),ie(ae,he,ye,",",","),ie(ae,he,ye,";",";"),ie(ae,ce,pe,"\u22bc","\\barwedge",!0),ie(ae,ce,pe,"\u22bb","\\veebar",!0),ie(ae,he,pe,"\u2299","\\odot",!0),ie(ae,he,pe,"\u2295","\\oplus",!0),ie(ae,he,pe,"\u2297","\\otimes",!0),ie(ae,he,ve,"\u2202","\\partial",!0),ie(ae,he,pe,"\u2298","\\oslash",!0),ie(ae,ce,pe,"\u229a","\\circledcirc",!0),ie(ae,ce,pe,"\u22a1","\\boxdot",!0),ie(ae,he,pe,"\u25b3","\\bigtriangleup"),ie(ae,he,pe,"\u25bd","\\bigtriangledown"),ie(ae,he,pe,"\u2020","\\dagger"),ie(ae,he,pe,"\u22c4","\\diamond"),ie(ae,he,pe,"\u22c6","\\star"),ie(ae,he,pe,"\u25c3","\\triangleleft"),ie(ae,he,pe,"\u25b9","\\triangleright"),ie(ae,he,be,"{","\\{"),ie(le,he,ve,"{","\\{"),ie(le,he,ve,"{","\\textbraceleft"),ie(ae,he,ue,"}","\\}"),ie(le,he,ve,"}","\\}"),ie(le,he,ve,"}","\\textbraceright"),ie(ae,he,be,"{","\\lbrace"),ie(ae,he,ue,"}","\\rbrace"),ie(ae,he,be,"[","\\lbrack",!0),ie(le,he,ve,"[","\\lbrack",!0),ie(ae,he,ue,"]","\\rbrack",!0),ie(le,he,ve,"]","\\rbrack",!0),ie(ae,he,be,"(","\\lparen",!0),ie(ae,he,ue,")","\\rparen",!0),ie(le,he,ve,"<","\\textless",!0),ie(le,he,ve,">","\\textgreater",!0),ie(ae,he,be,"\u230a","\\lfloor",!0),ie(ae,he,ue,"\u230b","\\rfloor",!0),ie(ae,he,be,"\u2308","\\lceil",!0),ie(ae,he,ue,"\u2309","\\rceil",!0),ie(ae,he,ve,"\\","\\backslash"),ie(ae,he,ve,"\u2223","|"),ie(ae,he,ve,"\u2223","\\vert"),ie(le,he,ve,"|","\\textbar",!0),ie(ae,he,ve,"\u2225","\\|"),ie(ae,he,ve,"\u2225","\\Vert"),ie(le,he,ve,"\u2225","\\textbardbl"),ie(le,he,ve,"~","\\textasciitilde"),ie(le,he,ve,"\\","\\textbackslash"),ie(le,he,ve,"^","\\textasciicircum"),ie(ae,he,xe,"\u2191","\\uparrow",!0),ie(ae,he,xe,"\u21d1","\\Uparrow",!0),ie(ae,he,xe,"\u2193","\\downarrow",!0),ie(ae,he,xe,"\u21d3","\\Downarrow",!0),ie(ae,he,xe,"\u2195","\\updownarrow",!0),ie(ae,he,xe,"\u21d5","\\Updownarrow",!0),ie(ae,he,fe,"\u2210","\\coprod"),ie(ae,he,fe,"\u22c1","\\bigvee"),ie(ae,he,fe,"\u22c0","\\bigwedge"),ie(ae,he,fe,"\u2a04","\\biguplus"),ie(ae,he,fe,"\u22c2","\\bigcap"),ie(ae,he,fe,"\u22c3","\\bigcup"),ie(ae,he,fe,"\u222b","\\int"),ie(ae,he,fe,"\u222b","\\intop"),ie(ae,he,fe,"\u222c","\\iint"),ie(ae,he,fe,"\u222d","\\iiint"),ie(ae,he,fe,"\u220f","\\prod"),ie(ae,he,fe,"\u2211","\\sum"),ie(ae,he,fe,"\u2a02","\\bigotimes"),ie(ae,he,fe,"\u2a01","\\bigoplus"),ie(ae,he,fe,"\u2a00","\\bigodot"),ie(ae,he,fe,"\u222e","\\oint"),ie(ae,he,fe,"\u222f","\\oiint"),ie(ae,he,fe,"\u2230","\\oiiint"),ie(ae,he,fe,"\u2a06","\\bigsqcup"),ie(ae,he,fe,"\u222b","\\smallint"),ie(le,he,de,"\u2026","\\textellipsis"),ie(ae,he,de,"\u2026","\\mathellipsis"),ie(le,he,de,"\u2026","\\ldots",!0),ie(ae,he,de,"\u2026","\\ldots",!0),ie(ae,he,de,"\u22ef","\\@cdots",!0),ie(ae,he,de,"\u22f1","\\ddots",!0),ie(ae,he,ve,"\u22ee","\\varvdots"),ie(le,he,ve,"\u22ee","\\varvdots"),ie(ae,he,me,"\u02ca","\\acute"),ie(ae,he,me,"\u02cb","\\grave"),ie(ae,he,me,"\xa8","\\ddot"),ie(ae,he,me,"~","\\tilde"),ie(ae,he,me,"\u02c9","\\bar"),ie(ae,he,me,"\u02d8","\\breve"),ie(ae,he,me,"\u02c7","\\check"),ie(ae,he,me,"^","\\hat"),ie(ae,he,me,"\u20d7","\\vec"),ie(ae,he,me,"\u02d9","\\dot"),ie(ae,he,me,"\u02da","\\mathring"),ie(ae,he,ge,"\ue131","\\@imath"),ie(ae,he,ge,"\ue237","\\@jmath"),ie(ae,he,ve,"\u0131","\u0131"),ie(ae,he,ve,"\u0237","\u0237"),ie(le,he,ve,"\u0131","\\i",!0),ie(le,he,ve,"\u0237","\\j",!0),ie(le,he,ve,"\xdf","\\ss",!0),ie(le,he,ve,"\xe6","\\ae",!0),ie(le,he,ve,"\u0153","\\oe",!0),ie(le,he,ve,"\xf8","\\o",!0),ie(le,he,ve,"\xc6","\\AE",!0),ie(le,he,ve,"\u0152","\\OE",!0),ie(le,he,ve,"\xd8","\\O",!0),ie(le,he,me,"\u02ca","\\'"),ie(le,he,me,"\u02cb","\\`"),ie(le,he,me,"\u02c6","\\^"),ie(le,he,me,"\u02dc","\\~"),ie(le,he,me,"\u02c9","\\="),ie(le,he,me,"\u02d8","\\u"),ie(le,he,me,"\u02d9","\\."),ie(le,he,me,"\xb8","\\c"),ie(le,he,me,"\u02da","\\r"),ie(le,he,me,"\u02c7","\\v"),ie(le,he,me,"\xa8",'\\"'),ie(le,he,me,"\u02dd","\\H"),ie(le,he,me,"\u25ef","\\textcircled");const ke={"--":!0,"---":!0,"``":!0,"''":!0};ie(le,he,ve,"\u2013","--",!0),ie(le,he,ve,"\u2013","\\textendash"),ie(le,he,ve,"\u2014","---",!0),ie(le,he,ve,"\u2014","\\textemdash"),ie(le,he,ve,"\u2018","`",!0),ie(le,he,ve,"\u2018","\\textquoteleft"),ie(le,he,ve,"\u2019","'",!0),ie(le,he,ve,"\u2019","\\textquoteright"),ie(le,he,ve,"\u201c","``",!0),ie(le,he,ve,"\u201c","\\textquotedblleft"),ie(le,he,ve,"\u201d","''",!0),ie(le,he,ve,"\u201d","\\textquotedblright"),ie(ae,he,ve,"\xb0","\\degree",!0),ie(le,he,ve,"\xb0","\\degree"),ie(le,he,ve,"\xb0","\\textdegree",!0),ie(ae,he,ve,"\xa3","\\pounds"),ie(ae,he,ve,"\xa3","\\mathsterling",!0),ie(le,he,ve,"\xa3","\\pounds"),ie(le,he,ve,"\xa3","\\textsterling",!0),ie(ae,ce,ve,"\u2720","\\maltese"),ie(le,ce,ve,"\u2720","\\maltese");const Se='0123456789/@."';for(let e=0;e<14;e++){const t=Se.charAt(e);ie(ae,he,ve,t,t)}const Me='0123456789!@*()-=+";:?/.,';for(let e=0;e<25;e++){const t=Me.charAt(e);ie(le,he,ve,t,t)}const ze="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";for(let e=0;e<52;e++){const t=ze.charAt(e);ie(ae,he,ge,t,t),ie(le,he,ve,t,t)}ie(ae,ce,ve,"C","\u2102"),ie(le,ce,ve,"C","\u2102"),ie(ae,ce,ve,"H","\u210d"),ie(le,ce,ve,"H","\u210d"),ie(ae,ce,ve,"N","\u2115"),ie(le,ce,ve,"N","\u2115"),ie(ae,ce,ve,"P","\u2119"),ie(le,ce,ve,"P","\u2119"),ie(ae,ce,ve,"Q","\u211a"),ie(le,ce,ve,"Q","\u211a"),ie(ae,ce,ve,"R","\u211d"),ie(le,ce,ve,"R","\u211d"),ie(ae,ce,ve,"Z","\u2124"),ie(le,ce,ve,"Z","\u2124"),ie(ae,he,ge,"h","\u210e"),ie(le,he,ge,"h","\u210e");let Ae="";for(let e=0;e<52;e++){const t=ze.charAt(e);Ae=String.fromCharCode(55349,56320+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,56372+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,56424+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,56580+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,56684+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,56736+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,56788+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,56840+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,56944+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),e<26&&(Ae=String.fromCharCode(55349,56632+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,56476+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae))}Ae=String.fromCharCode(55349,56668),ie(ae,he,ge,"k",Ae),ie(le,he,ve,"k",Ae);for(let e=0;e<10;e++){const t=e.toString();Ae=String.fromCharCode(55349,57294+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,57314+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,57324+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,57334+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae)}const Te="\xd0\xde\xfe";for(let e=0;e<3;e++){const t=Te.charAt(e);ie(ae,he,ge,t,t),ie(le,he,ve,t,t)}const Be=[["mathbf","textbf","Main-Bold"],["mathbf","textbf","Main-Bold"],["mathnormal","textit","Math-Italic"],["mathnormal","textit","Math-Italic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["mathscr","textscr","Script-Regular"],["","",""],["","",""],["","",""],["mathfrak","textfrak","Fraktur-Regular"],["mathfrak","textfrak","Fraktur-Regular"],["mathbb","textbb","AMS-Regular"],["mathbb","textbb","AMS-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathitsf","textitsf","SansSerif-Italic"],["mathitsf","textitsf","SansSerif-Italic"],["","",""],["","",""],["mathtt","texttt","Typewriter-Regular"],["mathtt","texttt","Typewriter-Regular"]],Ce=[["mathbf","textbf","Main-Bold"],["","",""],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathtt","texttt","Typewriter-Regular"]],Ne=function(e,t,r){return se[r][e]&&se[r][e].replace&&(e=se[r][e].replace),{value:e,metrics:N(e,t,r)}},qe=function(e,t,r,n,o){const s=Ne(e,t,r),i=s.metrics;let a;if(e=s.value,i){let t=i.italic;("text"===r||n&&"mathit"===n.font)&&(t=0),a=new K(e,i.height,i.depth,t,i.skew,i.width,o)}else"undefined"!=typeof console&&console.warn("No character metrics for '"+e+"' in style '"+t+"' and mode '"+r+"'"),a=new K(e,0,0,0,0,0,o);if(n){a.maxFontSize=n.sizeMultiplier,n.style.isTight()&&a.classes.push("mtight");const e=n.getColor();e&&(a.style.color=e)}return a},Ie=(e,t)=>{if(G(e.classes)!==G(t.classes)||e.skew!==t.skew||e.maxFontSize!==t.maxFontSize)return!1;if(1===e.classes.length){const t=e.classes[0];if("mbin"===t||"mord"===t)return!1}for(const r in e.style)if(e.style.hasOwnProperty(r)&&e.style[r]!==t.style[r])return!1;for(const r in t.style)if(t.style.hasOwnProperty(r)&&e.style[r]!==t.style[r])return!1;return!0},Re=function(e){let t=0,r=0,n=0;for(let o=0;ot&&(t=s.height),s.depth>r&&(r=s.depth),s.maxFontSize>n&&(n=s.maxFontSize)}e.height=t,e.depth=r,e.maxFontSize=n},He=function(e,t,r,n){const o=new _(e,t,r,n);return Re(o),o},Oe=(e,t,r,n)=>new _(e,t,r,n),Ee=function(e){const t=new A(e);return Re(t),t},Le=function(e,t,r){let n,o="";switch(e){case"amsrm":o="AMS";break;case"textrm":o="Main";break;case"textsf":o="SansSerif";break;case"texttt":o="Typewriter";break;default:o=e}return n="textbf"===t&&"textit"===r?"BoldItalic":"textbf"===t?"Bold":"textit"===t?"Italic":"Regular",o+"-"+n},De={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathsfit:{variant:"sans-serif-italic",fontName:"SansSerif-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Ve={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]};var Pe={fontMap:De,makeSymbol:qe,mathsym:function(e,t,r,n){return void 0===n&&(n=[]),"boldsymbol"===r.font&&Ne(e,"Main-Bold",t).metrics?qe(e,"Main-Bold",t,r,n.concat(["mathbf"])):"\\"===e||"main"===se[t][e].font?qe(e,"Main-Regular",t,r,n):qe(e,"AMS-Regular",t,r,n.concat(["amsrm"]))},makeSpan:He,makeSvgSpan:Oe,makeLineSpan:function(e,t,r){const n=He([e],[],t);return n.height=Math.max(r||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),n.style.borderBottomWidth=F(n.height),n.maxFontSize=1,n},makeAnchor:function(e,t,r,n){const o=new j(e,t,r,n);return Re(o),o},makeFragment:Ee,wrapFragment:function(e,t){return e instanceof A?He([],[e],t):e},makeVList:function(e,t){const{children:r,depth:n}=function(e){if("individualShift"===e.positionType){const t=e.children,r=[t[0]],n=-t[0].shift-t[0].elem.depth;let o=n;for(let e=1;e0)return qe(s,h,o,t,i.concat(c));if(l){let e,n;if("boldsymbol"===l){const t=function(e,t,r,n,o){return"textord"!==o&&Ne(e,"Math-BoldItalic",t).metrics?{fontName:"Math-BoldItalic",fontClass:"boldsymbol"}:{fontName:"Main-Bold",fontClass:"mathbf"}}(s,o,0,0,r);e=t.fontName,n=[t.fontClass]}else a?(e=De[l].fontName,n=[l]):(e=Le(l,t.fontWeight,t.fontShape),n=[l,t.fontWeight,t.fontShape]);if(Ne(s,e,o).metrics)return qe(s,e,o,t,i.concat(n));if(ke.hasOwnProperty(s)&&"Typewriter"===e.slice(0,10)){const r=[];for(let a=0;a{const r=He(["mspace"],[],t),n=P(e,t);return r.style.marginRight=F(n),r},staticSvg:function(e,t){const[r,n,o]=Ve[e],s=new Q(r),i=new J([s],{width:F(n),height:F(o),style:"width:"+F(n),viewBox:"0 0 "+1e3*n+" "+1e3*o,preserveAspectRatio:"xMinYMin"}),a=Oe(["overlay"],[i],t);return a.height=o,a.style.height=F(o),a.style.width=F(n),a},svgData:Ve,tryCombineChars:e=>{for(let t=0;t{const r=t.classes[0],n=e.classes[0];"mbin"===r&&l.contains(tt,n)?t.classes[0]="mord":"mbin"===n&&l.contains(et,r)&&(e.classes[0]="mord")}),{node:i},a,h),st(o,((e,t)=>{const r=lt(t),n=lt(e),o=r&&n?e.hasClass("mtight")?Xe[r][n]:Ye[r][n]:null;if(o)return Pe.makeGlue(o,s)}),{node:i},a,h),o},st=function(e,t,r,n,o){n&&e.push(n);let s=0;for(;sr=>{e.splice(t+1,0,r),s++})(s)}n&&e.pop()},it=function(e){return e instanceof A||e instanceof j||e instanceof _&&e.hasClass("enclosing")?e:null},at=function(e,t){const r=it(e);if(r){const e=r.children;if(e.length){if("right"===t)return at(e[e.length-1],"right");if("left"===t)return at(e[0],"left")}}return e},lt=function(e,t){return e?(t&&(e=at(e,t)),nt[e.classes[0]]||null):null},ht=function(e,t){const r=["nulldelimiter"].concat(e.baseSizingClasses());return Qe(t.concat(r))},ct=function(e,t,r){if(!e)return Qe();if(_e[e.type]){let n=_e[e.type](e,t);if(r&&t.size!==r.size){n=Qe(t.sizingClasses(r),[n],t);const e=t.sizeMultiplier/r.sizeMultiplier;n.height*=e,n.depth*=e}return n}throw new n("Got group of unknown type: '"+e.type+"'")};function mt(e,t){const r=Qe(["base"],e,t),n=Qe(["strut"]);return n.style.height=F(r.height+r.depth),r.depth&&(n.style.verticalAlign=F(-r.depth)),r.children.unshift(n),r}function pt(e,t){let r=null;1===e.length&&"tag"===e[0].type&&(r=e[0].tag,e=e[0].body);const n=ot(e,t,"root");let o;2===n.length&&n[1].hasClass("tag")&&(o=n.pop());const s=[];let i,a=[];for(let e=0;e0&&(s.push(mt(a,t)),a=[]),s.push(n[e]));a.length>0&&s.push(mt(a,t)),r?(i=mt(ot(r,t,!0)),i.classes=["tag"],s.push(i)):o&&s.push(o);const l=Qe(["katex-html"],s);if(l.setAttribute("aria-hidden","true"),i){const e=i.children[0];e.style.height=F(l.height+l.depth),l.depth&&(e.style.verticalAlign=F(-l.depth))}return l}function ut(e){return new A(e)}class dt{constructor(e,t,r){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=t||[],this.classes=r||[]}setAttribute(e,t){this.attributes[e]=t}getAttribute(e){return this.attributes[e]}toNode(){const e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(const t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=G(this.classes));for(let t=0;t0&&(e+=' class ="'+l.escape(G(this.classes))+'"'),e+=">";for(let t=0;t",e}toText(){return this.children.map((e=>e.toText())).join("")}}class gt{constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return l.escape(this.toText())}toText(){return this.text}}var ft={MathNode:dt,TextNode:gt,SpaceNode:class{constructor(e){this.width=void 0,this.character=void 0,this.width=e,this.character=e>=.05555&&e<=.05556?"\u200a":e>=.1666&&e<=.1667?"\u2009":e>=.2222&&e<=.2223?"\u2005":e>=.2777&&e<=.2778?"\u2005\u200a":e>=-.05556&&e<=-.05555?"\u200a\u2063":e>=-.1667&&e<=-.1666?"\u2009\u2063":e>=-.2223&&e<=-.2222?"\u205f\u2063":e>=-.2778&&e<=-.2777?"\u2005\u2063":null}toNode(){if(this.character)return document.createTextNode(this.character);{const e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",F(this.width)),e}}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}},newDocumentFragment:ut};const bt=function(e,t,r){return!se[t][e]||!se[t][e].replace||55349===e.charCodeAt(0)||ke.hasOwnProperty(e)&&r&&(r.fontFamily&&"tt"===r.fontFamily.slice(4,6)||r.font&&"tt"===r.font.slice(4,6))||(e=se[t][e].replace),new ft.TextNode(e)},yt=function(e){return 1===e.length?e[0]:new ft.MathNode("mrow",e)},xt=function(e,t){if("texttt"===t.fontFamily)return"monospace";if("textsf"===t.fontFamily)return"textit"===t.fontShape&&"textbf"===t.fontWeight?"sans-serif-bold-italic":"textit"===t.fontShape?"sans-serif-italic":"textbf"===t.fontWeight?"bold-sans-serif":"sans-serif";if("textit"===t.fontShape&&"textbf"===t.fontWeight)return"bold-italic";if("textit"===t.fontShape)return"italic";if("textbf"===t.fontWeight)return"bold";const r=t.font;if(!r||"mathnormal"===r)return null;const n=e.mode;if("mathit"===r)return"italic";if("boldsymbol"===r)return"textord"===e.type?"bold":"bold-italic";if("mathbf"===r)return"bold";if("mathbb"===r)return"double-struck";if("mathsfit"===r)return"sans-serif-italic";if("mathfrak"===r)return"fraktur";if("mathscr"===r||"mathcal"===r)return"script";if("mathsf"===r)return"sans-serif";if("mathtt"===r)return"monospace";let o=e.text;if(l.contains(["\\imath","\\jmath"],o))return null;se[n][o]&&se[n][o].replace&&(o=se[n][o].replace);return N(o,Pe.fontMap[r].fontName,n)?Pe.fontMap[r].variant:null};function wt(e){if(!e)return!1;if("mi"===e.type&&1===e.children.length){const t=e.children[0];return t instanceof gt&&"."===t.text}if("mo"===e.type&&1===e.children.length&&"true"===e.getAttribute("separator")&&"0em"===e.getAttribute("lspace")&&"0em"===e.getAttribute("rspace")){const t=e.children[0];return t instanceof gt&&","===t.text}return!1}const vt=function(e,t,r){if(1===e.length){const n=St(e[0],t);return r&&n instanceof dt&&"mo"===n.type&&(n.setAttribute("lspace","0em"),n.setAttribute("rspace","0em")),[n]}const n=[];let o;for(let r=0;r=1&&("mn"===o.type||wt(o))){const e=s.children[0];e instanceof dt&&"mn"===e.type&&(e.children=[...o.children,...e.children],n.pop())}else if("mi"===o.type&&1===o.children.length){const e=o.children[0];if(e instanceof gt&&"\u0338"===e.text&&("mo"===s.type||"mi"===s.type||"mn"===s.type)){const e=s.children[0];e instanceof gt&&e.text.length>0&&(e.text=e.text.slice(0,1)+"\u0338"+e.text.slice(1),n.pop())}}}n.push(s),o=s}return n},kt=function(e,t,r){return yt(vt(e,t,r))},St=function(e,t){if(!e)return new ft.MathNode("mrow");if(je[e.type]){return je[e.type](e,t)}throw new n("Got group of unknown type: '"+e.type+"'")};function Mt(e,t,r,n,o){const s=vt(e,r);let i;i=1===s.length&&s[0]instanceof dt&&l.contains(["mrow","mtable"],s[0].type)?s[0]:new ft.MathNode("mrow",s);const a=new ft.MathNode("annotation",[new ft.TextNode(t)]);a.setAttribute("encoding","application/x-tex");const h=new ft.MathNode("semantics",[i,a]),c=new ft.MathNode("math",[h]);c.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&c.setAttribute("display","block");const m=o?"katex":"katex-mathml";return Pe.makeSpan([m],[c])}const zt=function(e){return new E({style:e.displayMode?w.DISPLAY:w.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},At=function(e,t){if(t.displayMode){const r=["katex-display"];t.leqno&&r.push("leqno"),t.fleqn&&r.push("fleqn"),e=Pe.makeSpan(r,[e])}return e},Tt=function(e,t,r){const n=zt(r);let o;if("mathml"===r.output)return Mt(e,t,n,r.displayMode,!0);if("html"===r.output){const t=pt(e,n);o=Pe.makeSpan(["katex"],[t])}else{const s=Mt(e,t,n,r.displayMode,!1),i=pt(e,n);o=Pe.makeSpan(["katex"],[s,i])}return At(o,r)};const Bt={widehat:"^",widecheck:"\u02c7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23df",overbrace:"\u23de",overgroup:"\u23e0",undergroup:"\u23e1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21d2",xRightarrow:"\u21d2",overleftharpoon:"\u21bc",xleftharpoonup:"\u21bc",overrightharpoon:"\u21c0",xrightharpoonup:"\u21c0",xLeftarrow:"\u21d0",xLeftrightarrow:"\u21d4",xhookleftarrow:"\u21a9",xhookrightarrow:"\u21aa",xmapsto:"\u21a6",xrightharpoondown:"\u21c1",xleftharpoondown:"\u21bd",xrightleftharpoons:"\u21cc",xleftrightharpoons:"\u21cb",xtwoheadleftarrow:"\u219e",xtwoheadrightarrow:"\u21a0",xlongequal:"=",xtofrom:"\u21c4",xrightleftarrows:"\u21c4",xrightequilibrium:"\u21cc",xleftequilibrium:"\u21cb","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},Ct={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]};var Nt=function(e,t,r,n,o){let s;const i=e.height+e.depth+r+n;if(/fbox|color|angl/.test(t)){if(s=Pe.makeSpan(["stretchy",t],[],o),"fbox"===t){const e=o.color&&o.getColor();e&&(s.style.borderColor=e)}}else{const e=[];/^[bx]cancel$/.test(t)&&e.push(new ee({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&e.push(new ee({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));const r=new J(e,{width:"100%",height:F(i)});s=Pe.makeSvgSpan([],[r],o)}return s.height=i,s.style.height=F(i),s},qt=function(e){const t=new ft.MathNode("mo",[new ft.TextNode(Bt[e.replace(/^\\/,"")])]);return t.setAttribute("stretchy","true"),t},It=function(e,t){const{span:r,minWidth:n,height:o}=function(){let r=4e5;const n=e.label.slice(1);if(l.contains(["widehat","widecheck","widetilde","utilde"],n)){const s="ordgroup"===(o=e.base).type?o.body.length:1;let i,a,l;if(s>5)"widehat"===n||"widecheck"===n?(i=420,r=2364,l=.42,a=n+"4"):(i=312,r=2340,l=.34,a="tilde4");else{const e=[1,1,2,2,3,3][s];"widehat"===n||"widecheck"===n?(r=[0,1062,2364,2364,2364][e],i=[0,239,300,360,420][e],l=[0,.24,.3,.3,.36,.42][e],a=n+e):(r=[0,600,1033,2339,2340][e],i=[0,260,286,306,312][e],l=[0,.26,.286,.3,.306,.34][e],a="tilde"+e)}const h=new Q(a),c=new J([h],{width:"100%",height:F(l),viewBox:"0 0 "+r+" "+i,preserveAspectRatio:"none"});return{span:Pe.makeSvgSpan([],[c],t),minWidth:0,height:l}}{const e=[],o=Ct[n],[s,i,a]=o,l=a/1e3,h=s.length;let c,m;if(1===h){c=["hide-tail"],m=[o[3]]}else if(2===h)c=["halfarrow-left","halfarrow-right"],m=["xMinYMin","xMaxYMin"];else{if(3!==h)throw new Error("Correct katexImagesData or update code here to support\n "+h+" children.");c=["brace-left","brace-center","brace-right"],m=["xMinYMin","xMidYMin","xMaxYMin"]}for(let n=0;n0&&(r.style.minWidth=F(n)),r};function Rt(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function Ht(e){const t=Ot(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function Ot(e){return e&&("atom"===e.type||ne.hasOwnProperty(e.type))?e:null}const Et=(e,t)=>{let r,n,o;e&&"supsub"===e.type?(n=Rt(e.base,"accent"),r=n.base,e.base=r,o=function(e){if(e instanceof _)return e;throw new Error("Expected span but got "+String(e)+".")}(ct(e,t)),e.base=n):(n=Rt(e,"accent"),r=n.base);const s=ct(r,t.havingCrampedStyle());let i=0;if(n.isShifty&&l.isCharacterBox(r)){const e=l.getBaseElem(r);i=te(ct(e,t.havingCrampedStyle())).skew}const a="\\c"===n.label;let h,c=a?s.height+s.depth:Math.min(s.height,t.fontMetrics().xHeight);if(n.isStretchy)h=It(n,t),h=Pe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"elem",elem:h,wrapperClasses:["svg-align"],wrapperStyle:i>0?{width:"calc(100% - "+F(2*i)+")",marginLeft:F(2*i)}:void 0}]},t);else{let e,r;"\\vec"===n.label?(e=Pe.staticSvg("vec",t),r=Pe.svgData.vec[1]):(e=Pe.makeOrd({mode:n.mode,text:n.label},t,"textord"),e=te(e),e.italic=0,r=e.width,a&&(c+=e.depth)),h=Pe.makeSpan(["accent-body"],[e]);const o="\\textcircled"===n.label;o&&(h.classes.push("accent-full"),c=s.height);let l=i;o||(l-=r/2),h.style.left=F(l),"\\textcircled"===n.label&&(h.style.top=".2em"),h=Pe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"kern",size:-c},{type:"elem",elem:h}]},t)}const m=Pe.makeSpan(["mord","accent"],[h],t);return o?(o.children[0]=m,o.height=Math.max(m.height,o.height),o.classes[0]="mord",o):m},Lt=(e,t)=>{const r=e.isStretchy?qt(e.label):new ft.MathNode("mo",[bt(e.label,e.mode)]),n=new ft.MathNode("mover",[St(e.base,t),r]);return n.setAttribute("accent","true"),n},Dt=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map((e=>"\\"+e)).join("|"));$e({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(e,t)=>{const r=Ke(t[0]),n=!Dt.test(e.funcName),o=!n||"\\widehat"===e.funcName||"\\widetilde"===e.funcName||"\\widecheck"===e.funcName;return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,isShifty:o,base:r}},htmlBuilder:Et,mathmlBuilder:Lt}),$e({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(e,t)=>{const r=t[0];let n=e.parser.mode;return"math"===n&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Et,mathmlBuilder:Lt}),$e({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:(e,t)=>{let{parser:r,funcName:n}=e;const o=t[0];return{type:"accentUnder",mode:r.mode,label:n,base:o}},htmlBuilder:(e,t)=>{const r=ct(e.base,t),n=It(e,t),o="\\utilde"===e.label?.12:0,s=Pe.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:o},{type:"elem",elem:r}]},t);return Pe.makeSpan(["mord","accentunder"],[s],t)},mathmlBuilder:(e,t)=>{const r=qt(e.label),n=new ft.MathNode("munder",[St(e.base,t),r]);return n.setAttribute("accentunder","true"),n}});const Vt=e=>{const t=new ft.MathNode("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};$e({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){let{parser:n,funcName:o}=e;return{type:"xArrow",mode:n.mode,label:o,body:t[0],below:r[0]}},htmlBuilder(e,t){const r=t.style;let n=t.havingStyle(r.sup());const o=Pe.wrapFragment(ct(e.body,n,t),t),s="\\x"===e.label.slice(0,2)?"x":"cd";let i;o.classes.push(s+"-arrow-pad"),e.below&&(n=t.havingStyle(r.sub()),i=Pe.wrapFragment(ct(e.below,n,t),t),i.classes.push(s+"-arrow-pad"));const a=It(e,t),l=-t.fontMetrics().axisHeight+.5*a.height;let h,c=-t.fontMetrics().axisHeight-.5*a.height-.111;if((o.depth>.25||"\\xleftequilibrium"===e.label)&&(c-=o.depth),i){const e=-t.fontMetrics().axisHeight+i.height+.5*a.height+.111;h=Pe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:c},{type:"elem",elem:a,shift:l},{type:"elem",elem:i,shift:e}]},t)}else h=Pe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:c},{type:"elem",elem:a,shift:l}]},t);return h.children[0].children[0].children[1].classes.push("svg-align"),Pe.makeSpan(["mrel","x-arrow"],[h],t)},mathmlBuilder(e,t){const r=qt(e.label);let n;if(r.setAttribute("minsize","x"===e.label.charAt(0)?"1.75em":"3.0em"),e.body){const o=Vt(St(e.body,t));if(e.below){const s=Vt(St(e.below,t));n=new ft.MathNode("munderover",[r,s,o])}else n=new ft.MathNode("mover",[r,o])}else if(e.below){const o=Vt(St(e.below,t));n=new ft.MathNode("munder",[r,o])}else n=Vt(),n=new ft.MathNode("mover",[r,n]);return n}});const Pt=Pe.makeSpan;function Ft(e,t){const r=ot(e.body,t,!0);return Pt([e.mclass],r,t)}function Gt(e,t){let r;const n=vt(e.body,t);return"minner"===e.mclass?r=new ft.MathNode("mpadded",n):"mord"===e.mclass?e.isCharacterBox?(r=n[0],r.type="mi"):r=new ft.MathNode("mi",n):(e.isCharacterBox?(r=n[0],r.type="mo"):r=new ft.MathNode("mo",n),"mbin"===e.mclass?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):"mpunct"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):"mopen"===e.mclass||"mclose"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0em"):"minner"===e.mclass&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}$e({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(e,t){let{parser:r,funcName:n}=e;const o=t[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:Je(o),isCharacterBox:l.isCharacterBox(o)}},htmlBuilder:Ft,mathmlBuilder:Gt});const Ut=e=>{const t="ordgroup"===e.type&&e.body.length?e.body[0]:e;return"atom"!==t.type||"bin"!==t.family&&"rel"!==t.family?"mord":"m"+t.family};$e({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(e,t){let{parser:r}=e;return{type:"mclass",mode:r.mode,mclass:Ut(t[0]),body:Je(t[1]),isCharacterBox:l.isCharacterBox(t[1])}}}),$e({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(e,t){let{parser:r,funcName:n}=e;const o=t[1],s=t[0];let i;i="\\stackrel"!==n?Ut(o):"mrel";const a={type:"op",mode:o.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:"\\stackrel"!==n,body:Je(o)},h={type:"supsub",mode:s.mode,base:a,sup:"\\underset"===n?null:s,sub:"\\underset"===n?s:null};return{type:"mclass",mode:r.mode,mclass:i,body:[h],isCharacterBox:l.isCharacterBox(h)}},htmlBuilder:Ft,mathmlBuilder:Gt}),$e({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(e,t){let{parser:r}=e;return{type:"pmb",mode:r.mode,mclass:Ut(t[0]),body:Je(t[0])}},htmlBuilder(e,t){const r=ot(e.body,t,!0),n=Pe.makeSpan([e.mclass],r,t);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder(e,t){const r=vt(e.body,t),n=new ft.MathNode("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});const Yt={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Xt=e=>"textord"===e.type&&"@"===e.text;function Wt(e,t,r){const n=Yt[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":{const e={type:"atom",text:n,mode:"math",family:"rel"},o={type:"ordgroup",mode:"math",body:[r.callFunction("\\\\cdleft",[t[0]],[]),r.callFunction("\\Big",[e],[]),r.callFunction("\\\\cdright",[t[1]],[])]};return r.callFunction("\\\\cdparent",[o],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{const e={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[e],[])}default:return{type:"textord",text:" ",mode:"math"}}}$e({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(e,t){let{parser:r,funcName:n}=e;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:t[0]}},htmlBuilder(e,t){const r=t.havingStyle(t.style.sup()),n=Pe.wrapFragment(ct(e.label,r,t),t);return n.classes.push("cd-label-"+e.side),n.style.bottom=F(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder(e,t){let r=new ft.MathNode("mrow",[St(e.label,t)]);return r=new ft.MathNode("mpadded",[r]),r.setAttribute("width","0"),"left"===e.side&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new ft.MathNode("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}}),$e({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(e,t){let{parser:r}=e;return{type:"cdlabelparent",mode:r.mode,fragment:t[0]}},htmlBuilder(e,t){const r=Pe.wrapFragment(ct(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(e,t){return new ft.MathNode("mrow",[St(e.fragment,t)])}}),$e({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(e,t){let{parser:r}=e;const o=Rt(t[0],"ordgroup").body;let s="";for(let e=0;e=1114111)throw new n("\\@char with invalid code point "+s);return a<=65535?i=String.fromCharCode(a):(a-=65536,i=String.fromCharCode(55296+(a>>10),56320+(1023&a))),{type:"textord",mode:r.mode,text:i}}});const _t=(e,t)=>{const r=ot(e.body,t.withColor(e.color),!1);return Pe.makeFragment(r)},jt=(e,t)=>{const r=vt(e.body,t.withColor(e.color)),n=new ft.MathNode("mstyle",r);return n.setAttribute("mathcolor",e.color),n};$e({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(e,t){let{parser:r}=e;const n=Rt(t[0],"color-token").color,o=t[1];return{type:"color",mode:r.mode,color:n,body:Je(o)}},htmlBuilder:_t,mathmlBuilder:jt}),$e({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(e,t){let{parser:r,breakOnTokenText:n}=e;const o=Rt(t[0],"color-token").color;r.gullet.macros.set("\\current@color",o);const s=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:o,body:s}},htmlBuilder:_t,mathmlBuilder:jt}),$e({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(e,t,r){let{parser:n}=e;const o="["===n.gullet.future().text?n.parseSizeGroup(!0):null,s=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:s,size:o&&Rt(o,"size").value}},htmlBuilder(e,t){const r=Pe.makeSpan(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=F(P(e.size,t)))),r},mathmlBuilder(e,t){const r=new ft.MathNode("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",F(P(e.size,t)))),r}});const $t={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},Zt=e=>{const t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new n("Expected a control sequence",e);return t},Kt=(e,t,r,n)=>{let o=e.gullet.macros.get(r.text);null==o&&(r.noexpand=!0,o={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,o,n)};$e({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(e){let{parser:t,funcName:r}=e;t.consumeSpaces();const o=t.fetch();if($t[o.text])return"\\global"!==r&&"\\\\globallong"!==r||(o.text=$t[o.text]),Rt(t.parseFunction(),"internal");throw new n("Invalid token after macro prefix",o)}}),$e({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){let{parser:t,funcName:r}=e,o=t.gullet.popToken();const s=o.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(s))throw new n("Expected a control sequence",o);let i,a=0;const l=[[]];for(;"{"!==t.gullet.future().text;)if(o=t.gullet.popToken(),"#"===o.text){if("{"===t.gullet.future().text){i=t.gullet.future(),l[a].push("{");break}if(o=t.gullet.popToken(),!/^[1-9]$/.test(o.text))throw new n('Invalid argument number "'+o.text+'"');if(parseInt(o.text)!==a+1)throw new n('Argument number "'+o.text+'" out of order');a++,l.push([])}else{if("EOF"===o.text)throw new n("Expected a macro definition");l[a].push(o.text)}let{tokens:h}=t.gullet.consumeArg();return i&&h.unshift(i),"\\edef"!==r&&"\\xdef"!==r||(h=t.gullet.expandTokens(h),h.reverse()),t.gullet.macros.set(s,{tokens:h,numArgs:a,delimiters:l},r===$t[r]),{type:"internal",mode:t.mode}}}),$e({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){let{parser:t,funcName:r}=e;const n=Zt(t.gullet.popToken());t.gullet.consumeSpaces();const o=(e=>{let t=e.gullet.popToken();return"="===t.text&&(t=e.gullet.popToken()," "===t.text&&(t=e.gullet.popToken())),t})(t);return Kt(t,n,o,"\\\\globallet"===r),{type:"internal",mode:t.mode}}}),$e({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){let{parser:t,funcName:r}=e;const n=Zt(t.gullet.popToken()),o=t.gullet.popToken(),s=t.gullet.popToken();return Kt(t,n,s,"\\\\globalfuture"===r),t.gullet.pushToken(s),t.gullet.pushToken(o),{type:"internal",mode:t.mode}}});const Jt=function(e,t,r){const n=N(se.math[e]&&se.math[e].replace||e,t,r);if(!n)throw new Error("Unsupported symbol "+e+" and font size "+t+".");return n},Qt=function(e,t,r,n){const o=r.havingBaseStyle(t),s=Pe.makeSpan(n.concat(o.sizingClasses(r)),[e],r),i=o.sizeMultiplier/r.sizeMultiplier;return s.height*=i,s.depth*=i,s.maxFontSize=o.sizeMultiplier,s},er=function(e,t,r){const n=t.havingBaseStyle(r),o=(1-t.sizeMultiplier/n.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=F(o),e.height-=o,e.depth+=o},tr=function(e,t,r,n,o,s){const i=function(e,t,r,n){return Pe.makeSymbol(e,"Size"+t+"-Regular",r,n)}(e,t,o,n),a=Qt(Pe.makeSpan(["delimsizing","size"+t],[i],n),w.TEXT,n,s);return r&&er(a,n,w.TEXT),a},rr=function(e,t,r){let n;n="Size1-Regular"===t?"delim-size1":"delim-size4";return{type:"elem",elem:Pe.makeSpan(["delimsizinginner",n],[Pe.makeSpan([],[Pe.makeSymbol(e,t,r)])])}},nr=function(e,t,r){const n=T["Size4-Regular"][e.charCodeAt(0)]?T["Size4-Regular"][e.charCodeAt(0)][4]:T["Size1-Regular"][e.charCodeAt(0)][4],o=new Q("inner",function(e,t){switch(e){case"\u239c":return"M291 0 H417 V"+t+" H291z M291 0 H417 V"+t+" H291z";case"\u2223":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z";case"\u2225":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145zM367 0 H410 V"+t+" H367z M367 0 H410 V"+t+" H367z";case"\u239f":return"M457 0 H583 V"+t+" H457z M457 0 H583 V"+t+" H457z";case"\u23a2":return"M319 0 H403 V"+t+" H319z M319 0 H403 V"+t+" H319z";case"\u23a5":return"M263 0 H347 V"+t+" H263z M263 0 H347 V"+t+" H263z";case"\u23aa":return"M384 0 H504 V"+t+" H384z M384 0 H504 V"+t+" H384z";case"\u23d0":return"M312 0 H355 V"+t+" H312z M312 0 H355 V"+t+" H312z";case"\u2016":return"M257 0 H300 V"+t+" H257z M257 0 H300 V"+t+" H257zM478 0 H521 V"+t+" H478z M478 0 H521 V"+t+" H478z";default:return""}}(e,Math.round(1e3*t))),s=new J([o],{width:F(n),height:F(t),style:"width:"+F(n),viewBox:"0 0 "+1e3*n+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),i=Pe.makeSvgSpan([],[s],r);return i.height=t,i.style.height=F(t),i.style.width=F(n),{type:"elem",elem:i}},or={type:"kern",size:-.008},sr=["|","\\lvert","\\rvert","\\vert"],ir=["\\|","\\lVert","\\rVert","\\Vert"],ar=function(e,t,r,n,o,s){let i,a,h,c,m="",p=0;i=h=c=e,a=null;let u="Size1-Regular";"\\uparrow"===e?h=c="\u23d0":"\\Uparrow"===e?h=c="\u2016":"\\downarrow"===e?i=h="\u23d0":"\\Downarrow"===e?i=h="\u2016":"\\updownarrow"===e?(i="\\uparrow",h="\u23d0",c="\\downarrow"):"\\Updownarrow"===e?(i="\\Uparrow",h="\u2016",c="\\Downarrow"):l.contains(sr,e)?(h="\u2223",m="vert",p=333):l.contains(ir,e)?(h="\u2225",m="doublevert",p=556):"["===e||"\\lbrack"===e?(i="\u23a1",h="\u23a2",c="\u23a3",u="Size4-Regular",m="lbrack",p=667):"]"===e||"\\rbrack"===e?(i="\u23a4",h="\u23a5",c="\u23a6",u="Size4-Regular",m="rbrack",p=667):"\\lfloor"===e||"\u230a"===e?(h=i="\u23a2",c="\u23a3",u="Size4-Regular",m="lfloor",p=667):"\\lceil"===e||"\u2308"===e?(i="\u23a1",h=c="\u23a2",u="Size4-Regular",m="lceil",p=667):"\\rfloor"===e||"\u230b"===e?(h=i="\u23a5",c="\u23a6",u="Size4-Regular",m="rfloor",p=667):"\\rceil"===e||"\u2309"===e?(i="\u23a4",h=c="\u23a5",u="Size4-Regular",m="rceil",p=667):"("===e||"\\lparen"===e?(i="\u239b",h="\u239c",c="\u239d",u="Size4-Regular",m="lparen",p=875):")"===e||"\\rparen"===e?(i="\u239e",h="\u239f",c="\u23a0",u="Size4-Regular",m="rparen",p=875):"\\{"===e||"\\lbrace"===e?(i="\u23a7",a="\u23a8",c="\u23a9",h="\u23aa",u="Size4-Regular"):"\\}"===e||"\\rbrace"===e?(i="\u23ab",a="\u23ac",c="\u23ad",h="\u23aa",u="Size4-Regular"):"\\lgroup"===e||"\u27ee"===e?(i="\u23a7",c="\u23a9",h="\u23aa",u="Size4-Regular"):"\\rgroup"===e||"\u27ef"===e?(i="\u23ab",c="\u23ad",h="\u23aa",u="Size4-Regular"):"\\lmoustache"===e||"\u23b0"===e?(i="\u23a7",c="\u23ad",h="\u23aa",u="Size4-Regular"):"\\rmoustache"!==e&&"\u23b1"!==e||(i="\u23ab",c="\u23a9",h="\u23aa",u="Size4-Regular");const d=Jt(i,u,o),g=d.height+d.depth,f=Jt(h,u,o),b=f.height+f.depth,y=Jt(c,u,o),x=y.height+y.depth;let v=0,k=1;if(null!==a){const e=Jt(a,u,o);v=e.height+e.depth,k=2}const S=g+x+v,M=S+Math.max(0,Math.ceil((t-S)/(k*b)))*k*b;let z=n.fontMetrics().axisHeight;r&&(z*=n.sizeMultiplier);const A=M/2-z,T=[];if(m.length>0){const e=M-g-x,t=Math.round(1e3*M),r=function(e,t){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+" v1759 h347 v-84\nH403z M403 1759 V0 H319 V1759 v"+t+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+" v1759 H0 v84 H347z\nM347 1759 V0 H263 V1759 v"+t+" v1759 h84z";case"vert":return"M145 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v"+t+" v585 h43z";case"doublevert":return"M145 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v"+t+" v585 h43z\nM367 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v"+t+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+t+" v1715 h263 v84 H319z\nMM319 602 V0 H403 V602 v"+t+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+t+" v1799 H0 v-84 H319z\nMM319 602 V0 H403 V602 v"+t+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+" v602 h84z\nM403 1759 V0 H319 V1759 v"+t+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+" v602 h84z\nM347 1759 V0 h-84 V1759 v"+t+" v602 h84z";case"lparen":return"M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\n-36,557 l0,"+(t+84)+"c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\nl0,-"+(t+92)+"c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z";case"rparen":return"M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,"+(t+9)+"\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\nl0,-"+(t+144)+"c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z";default:throw new Error("Unknown stretchy delimiter.")}}(m,Math.round(1e3*e)),o=new Q(m,r),s=(p/1e3).toFixed(3)+"em",i=(t/1e3).toFixed(3)+"em",a=new J([o],{width:s,height:i,viewBox:"0 0 "+p+" "+t}),l=Pe.makeSvgSpan([],[a],n);l.height=t/1e3,l.style.width=s,l.style.height=i,T.push({type:"elem",elem:l})}else{if(T.push(rr(c,u,o)),T.push(or),null===a){const e=M-g-x+.016;T.push(nr(h,e,n))}else{const e=(M-g-x-v)/2+.016;T.push(nr(h,e,n)),T.push(or),T.push(rr(a,u,o)),T.push(or),T.push(nr(h,e,n))}T.push(or),T.push(rr(i,u,o))}const B=n.havingBaseStyle(w.TEXT),C=Pe.makeVList({positionType:"bottom",positionData:A,children:T},B);return Qt(Pe.makeSpan(["delimsizing","mult"],[C],B),w.TEXT,n,s)},lr=.08,hr=function(e,t,r,n,o){const s=function(e,t,r){t*=1e3;let n="";switch(e){case"sqrtMain":n=function(e,t){return"M95,"+(622+e+t)+"\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl"+e/2.075+" -"+e+"\nc5.3,-9.3,12,-14,20,-14\nH400000v"+(40+e)+"H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM"+(834+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize1":n=function(e,t){return"M263,"+(601+e+t)+"c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl"+e/2.084+" -"+e+"\nc4.7,-7.3,11,-11,19,-11\nH40000v"+(40+e)+"H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize2":n=function(e,t){return"M983 "+(10+e+t)+"\nl"+e/3.13+" -"+e+"\nc4,-6.7,10,-10,18,-10 H400000v"+(40+e)+"\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize3":n=function(e,t){return"M424,"+(2398+e+t)+"\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl"+e/4.223+" -"+e+"c4,-6.7,10,-10,18,-10 H400000\nv"+(40+e)+"H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M"+(1001+e)+" "+t+"\nh400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize4":n=function(e,t){return"M473,"+(2713+e+t)+"\nc339.3,-1799.3,509.3,-2700,510,-2702 l"+e/5.298+" -"+e+"\nc3.3,-7.3,9.3,-11,18,-11 H400000v"+(40+e)+"H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM"+(1001+e)+" "+t+"h400000v"+(40+e)+"H1017.7z"}(t,M);break;case"sqrtTall":n=function(e,t,r){return"M702 "+(e+t)+"H400000"+(40+e)+"\nH742v"+(r-54-t-e)+"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 "+t+"H400000v"+(40+e)+"H742z"}(t,M,r)}return n}(e,n,r),i=new Q(e,s),a=new J([i],{width:"400em",height:F(t),viewBox:"0 0 400000 "+r,preserveAspectRatio:"xMinYMin slice"});return Pe.makeSvgSpan(["hide-tail"],[a],o)},cr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","\\surd"],mr=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1"],pr=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],ur=[0,1.2,1.8,2.4,3],dr=[{type:"small",style:w.SCRIPTSCRIPT},{type:"small",style:w.SCRIPT},{type:"small",style:w.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],gr=[{type:"small",style:w.SCRIPTSCRIPT},{type:"small",style:w.SCRIPT},{type:"small",style:w.TEXT},{type:"stack"}],fr=[{type:"small",style:w.SCRIPTSCRIPT},{type:"small",style:w.SCRIPT},{type:"small",style:w.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],br=function(e){if("small"===e.type)return"Main-Regular";if("large"===e.type)return"Size"+e.size+"-Regular";if("stack"===e.type)return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},yr=function(e,t,r,n){for(let o=Math.min(2,3-n.style.size);ot)return r[o]}return r[r.length-1]},xr=function(e,t,r,n,o,s){let i;"<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),i=l.contains(pr,e)?dr:l.contains(cr,e)?fr:gr;const a=yr(e,t,i,n);return"small"===a.type?function(e,t,r,n,o,s){const i=Pe.makeSymbol(e,"Main-Regular",o,n),a=Qt(i,t,n,s);return r&&er(a,n,t),a}(e,a.style,r,n,o,s):"large"===a.type?tr(e,a.size,r,n,o,s):ar(e,t,r,n,o,s)};var wr={sqrtImage:function(e,t){const r=t.havingBaseSizing(),n=yr("\\surd",e*r.sizeMultiplier,fr,r);let o=r.sizeMultiplier;const s=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness);let i,a,l=0,h=0,c=0;return"small"===n.type?(c=1e3+1e3*s+80,e<1?o=1:e<1.4&&(o=.7),l=(1+s+lr)/o,h=(1+s)/o,i=hr("sqrtMain",l,c,s,t),i.style.minWidth="0.853em",a=.833/o):"large"===n.type?(c=1080*ur[n.size],h=(ur[n.size]+s)/o,l=(ur[n.size]+s+lr)/o,i=hr("sqrtSize"+n.size,l,c,s,t),i.style.minWidth="1.02em",a=1/o):(l=e+s+lr,h=e+s,c=Math.floor(1e3*e+s)+80,i=hr("sqrtTall",l,c,s,t),i.style.minWidth="0.742em",a=1.056),i.height=h,i.style.height=F(l),{span:i,advanceWidth:a,ruleWidth:(t.fontMetrics().sqrtRuleThickness+s)*o}},sizedDelim:function(e,t,r,o,s){if("<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),l.contains(cr,e)||l.contains(pr,e))return tr(e,t,!1,r,o,s);if(l.contains(mr,e))return ar(e,ur[t],!1,r,o,s);throw new n("Illegal delimiter: '"+e+"'")},sizeToMaxHeight:ur,customSizedDelim:xr,leftRightDelim:function(e,t,r,n,o,s){const i=n.fontMetrics().axisHeight*n.sizeMultiplier,a=5/n.fontMetrics().ptPerEm,l=Math.max(t-i,r+i),h=Math.max(l/500*901,2*l-a);return xr(e,h,!0,n,o,s)}};const vr={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},kr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27e8","\\rangle","\u27e9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function Sr(e,t){const r=Ot(e);if(r&&l.contains(kr,r.text))return r;throw new n(r?"Invalid delimiter '"+r.text+"' after '"+t.funcName+"'":"Invalid delimiter type '"+e.type+"'",e)}function Mr(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}$e({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(e,t)=>{const r=Sr(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:vr[e.funcName].size,mclass:vr[e.funcName].mclass,delim:r.text}},htmlBuilder:(e,t)=>"."===e.delim?Pe.makeSpan([e.mclass]):wr.sizedDelim(e.delim,e.size,t,e.mode,[e.mclass]),mathmlBuilder:e=>{const t=[];"."!==e.delim&&t.push(bt(e.delim,e.mode));const r=new ft.MathNode("mo",t);"mopen"===e.mclass||"mclose"===e.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");const n=F(wr.sizeToMaxHeight[e.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r}}),$e({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{const r=e.parser.gullet.macros.get("\\current@color");if(r&&"string"!=typeof r)throw new n("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:Sr(t[0],e).text,color:r}}}),$e({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{const r=Sr(t[0],e),n=e.parser;++n.leftrightDepth;const o=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);const s=Rt(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:o,left:r.text,right:s.delim,rightColor:s.color}},htmlBuilder:(e,t)=>{Mr(e);const r=ot(e.body,t,!0,["mopen","mclose"]);let n,o,s=0,i=0,a=!1;for(let e=0;e{Mr(e);const r=vt(e.body,t);if("."!==e.left){const t=new ft.MathNode("mo",[bt(e.left,e.mode)]);t.setAttribute("fence","true"),r.unshift(t)}if("."!==e.right){const t=new ft.MathNode("mo",[bt(e.right,e.mode)]);t.setAttribute("fence","true"),e.rightColor&&t.setAttribute("mathcolor",e.rightColor),r.push(t)}return yt(r)}}),$e({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{const r=Sr(t[0],e);if(!e.parser.leftrightDepth)throw new n("\\middle without preceding \\left",r);return{type:"middle",mode:e.parser.mode,delim:r.text}},htmlBuilder:(e,t)=>{let r;if("."===e.delim)r=ht(t,[]);else{r=wr.sizedDelim(e.delim,1,t,e.mode,[]);const n={delim:e.delim,options:t};r.isMiddle=n}return r},mathmlBuilder:(e,t)=>{const r="\\vert"===e.delim||"|"===e.delim?bt("|","text"):bt(e.delim,e.mode),n=new ft.MathNode("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n}});const zr=(e,t)=>{const r=Pe.wrapFragment(ct(e.body,t),t),n=e.label.slice(1);let o,s=t.sizeMultiplier,i=0;const a=l.isCharacterBox(e.body);if("sout"===n)o=Pe.makeSpan(["stretchy","sout"]),o.height=t.fontMetrics().defaultRuleThickness/s,i=-.5*t.fontMetrics().xHeight;else if("phase"===n){const e=P({number:.6,unit:"pt"},t),n=P({number:.35,unit:"ex"},t);s/=t.havingBaseSizing().sizeMultiplier;const a=r.height+r.depth+e+n;r.style.paddingLeft=F(a/2+e);const l=Math.floor(1e3*a*s),c="M400000 "+(h=l)+" H0 L"+h/2+" 0 l65 45 L145 "+(h-80)+" H400000z",m=new J([new Q("phase",c)],{width:"400em",height:F(l/1e3),viewBox:"0 0 400000 "+l,preserveAspectRatio:"xMinYMin slice"});o=Pe.makeSvgSpan(["hide-tail"],[m],t),o.style.height=F(a),i=r.depth+e+n}else{/cancel/.test(n)?a||r.classes.push("cancel-pad"):"angl"===n?r.classes.push("anglpad"):r.classes.push("boxpad");let s=0,l=0,h=0;/box/.test(n)?(h=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness),s=t.fontMetrics().fboxsep+("colorbox"===n?0:h),l=s):"angl"===n?(h=Math.max(t.fontMetrics().defaultRuleThickness,t.minRuleThickness),s=4*h,l=Math.max(0,.25-r.depth)):(s=a?.2:0,l=s),o=Nt(r,n,s,l,t),/fbox|boxed|fcolorbox/.test(n)?(o.style.borderStyle="solid",o.style.borderWidth=F(h)):"angl"===n&&.049!==h&&(o.style.borderTopWidth=F(h),o.style.borderRightWidth=F(h)),i=r.depth+l,e.backgroundColor&&(o.style.backgroundColor=e.backgroundColor,e.borderColor&&(o.style.borderColor=e.borderColor))}var h;let c;if(e.backgroundColor)c=Pe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:i},{type:"elem",elem:r,shift:0}]},t);else{const e=/cancel|phase/.test(n)?["svg-align"]:[];c=Pe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:o,shift:i,wrapperClasses:e}]},t)}return/cancel/.test(n)&&(c.height=r.height,c.depth=r.depth),/cancel/.test(n)&&!a?Pe.makeSpan(["mord","cancel-lap"],[c],t):Pe.makeSpan(["mord"],[c],t)},Ar=(e,t)=>{let r=0;const n=new ft.MathNode(e.label.indexOf("colorbox")>-1?"mpadded":"menclose",[St(e.body,t)]);switch(e.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),"\\fcolorbox"===e.label){const r=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);n.setAttribute("style","border: "+r+"em solid "+String(e.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike")}return e.backgroundColor&&n.setAttribute("mathbackground",e.backgroundColor),n};$e({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(e,t,r){let{parser:n,funcName:o}=e;const s=Rt(t[0],"color-token").color,i=t[1];return{type:"enclose",mode:n.mode,label:o,backgroundColor:s,body:i}},htmlBuilder:zr,mathmlBuilder:Ar}),$e({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(e,t,r){let{parser:n,funcName:o}=e;const s=Rt(t[0],"color-token").color,i=Rt(t[1],"color-token").color,a=t[2];return{type:"enclose",mode:n.mode,label:o,backgroundColor:i,borderColor:s,body:a}},htmlBuilder:zr,mathmlBuilder:Ar}),$e({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(e,t){let{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\fbox",body:t[0]}}}),$e({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(e,t){let{parser:r,funcName:n}=e;const o=t[0];return{type:"enclose",mode:r.mode,label:n,body:o}},htmlBuilder:zr,mathmlBuilder:Ar}),$e({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(e,t){let{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\angl",body:t[0]}}});const Tr={};function Br(e){let{type:t,names:r,props:n,handler:o,htmlBuilder:s,mathmlBuilder:i}=e;const a={type:t,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:o};for(let e=0;e{if(!e.parser.settings.displayMode)throw new n("{"+e.envName+"} can be used only in display mode.")};function Or(e){if(-1===e.indexOf("ed"))return-1===e.indexOf("*")}function Er(e,t,r){let{hskipBeforeAndAfter:o,addJot:s,cols:i,arraystretch:a,colSeparationType:l,autoTag:h,singleRow:c,emptySingleRow:m,maxNumCols:p,leqno:u}=t;if(e.gullet.beginGroup(),c||e.gullet.macros.set("\\cr","\\\\\\relax"),!a){const t=e.gullet.expandMacroAsText("\\arraystretch");if(null==t)a=1;else if(a=parseFloat(t),!a||a<0)throw new n("Invalid \\arraystretch: "+t)}e.gullet.beginGroup();let d=[];const g=[d],f=[],b=[],y=null!=h?[]:void 0;function x(){h&&e.gullet.macros.set("\\@eqnsw","1",!0)}function w(){y&&(e.gullet.macros.get("\\df@tag")?(y.push(e.subparse([new Ir("\\df@tag")])),e.gullet.macros.set("\\df@tag",void 0,!0)):y.push(Boolean(h)&&"1"===e.gullet.macros.get("\\@eqnsw")))}for(x(),b.push(Rr(e));;){let t=e.parseExpression(!1,c?"\\end":"\\\\");e.gullet.endGroup(),e.gullet.beginGroup(),t={type:"ordgroup",mode:e.mode,body:t},r&&(t={type:"styling",mode:e.mode,style:r,body:[t]}),d.push(t);const o=e.fetch().text;if("&"===o){if(p&&d.length===p){if(c||l)throw new n("Too many tab characters: &",e.nextToken);e.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}e.consume()}else{if("\\end"===o){w(),1===d.length&&"styling"===t.type&&0===t.body[0].body.length&&(g.length>1||!m)&&g.pop(),b.length0&&(x+=.25),c.push({pos:x,isDashed:e[t]})}for(v(i[0]),r=0;r0&&(p+=y,le)))for(r=0;r=a)continue;(o>0||e.hskipBeforeAndAfter)&&(i=l.deflt(c.pregap,u),0!==i&&(z=Pe.makeSpan(["arraycolsep"],[]),z.style.width=F(i),M.push(z)));let d=[];for(r=0;r0){const e=Pe.makeLineSpan("hline",t,m),r=Pe.makeLineSpan("hdashline",t,m),n=[{type:"elem",elem:h,shift:0}];for(;c.length>0;){const t=c.pop(),o=t.pos-k;t.isDashed?n.push({type:"elem",elem:r,shift:o}):n.push({type:"elem",elem:e,shift:o})}h=Pe.makeVList({positionType:"individualShift",children:n},t)}if(0===T.length)return Pe.makeSpan(["mord"],[h],t);{let e=Pe.makeVList({positionType:"individualShift",children:T},t);return e=Pe.makeSpan(["tag"],[e],t),Pe.makeFragment([h,e])}},Vr={c:"center ",l:"left ",r:"right "},Pr=function(e,t){const r=[],n=new ft.MathNode("mtd",[],["mtr-glue"]),o=new ft.MathNode("mtd",[],["mml-eqn-num"]);for(let s=0;s0){const t=e.cols;let r="",n=!1,o=0,i=t.length;"separator"===t[0].type&&(a+="top ",o=1),"separator"===t[t.length-1].type&&(a+="bottom ",i-=1);for(let e=o;e0?"left ":"",a+=c[c.length-1].length>0?"right ":"";for(let e=1;e-1?"alignat":"align",s="split"===e.envName,i=Er(e.parser,{cols:r,addJot:!0,autoTag:s?void 0:Or(e.envName),emptySingleRow:!0,colSeparationType:o,maxNumCols:s?2:void 0,leqno:e.parser.settings.leqno},"display");let a,l=0;const h={type:"ordgroup",mode:e.mode,body:[]};if(t[0]&&"ordgroup"===t[0].type){let e="";for(let r=0;r0&&c&&(n=1),r[e]={type:"align",align:t,pregap:n,postgap:0}}return i.colSeparationType=c?"align":"alignat",i};Br({type:"array",names:["array","darray"],props:{numArgs:1},handler(e,t){const r=(Ot(t[0])?[t[0]]:Rt(t[0],"ordgroup").body).map((function(e){const t=Ht(e).text;if(-1!=="lcr".indexOf(t))return{type:"align",align:t};if("|"===t)return{type:"separator",separator:"|"};if(":"===t)return{type:"separator",separator:":"};throw new n("Unknown column alignment: "+t,e)})),o={cols:r,hskipBeforeAndAfter:!0,maxNumCols:r.length};return Er(e.parser,o,Lr(e.envName))},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(e){const t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")];let r="c";const o={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if("*"===e.envName.charAt(e.envName.length-1)){const t=e.parser;if(t.consumeSpaces(),"["===t.fetch().text){if(t.consume(),t.consumeSpaces(),r=t.fetch().text,-1==="lcr".indexOf(r))throw new n("Expected l or c or r",t.nextToken);t.consume(),t.consumeSpaces(),t.expect("]"),t.consume(),o.cols=[{type:"align",align:r}]}}const s=Er(e.parser,o,Lr(e.envName)),i=Math.max(0,...s.body.map((e=>e.length)));return s.cols=new Array(i).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[s],left:t[0],right:t[1],rightColor:void 0}:s},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(e){const t=Er(e.parser,{arraystretch:.5},"script");return t.colSeparationType="small",t},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["subarray"],props:{numArgs:1},handler(e,t){const r=(Ot(t[0])?[t[0]]:Rt(t[0],"ordgroup").body).map((function(e){const t=Ht(e).text;if(-1!=="lc".indexOf(t))return{type:"align",align:t};throw new n("Unknown column alignment: "+t,e)}));if(r.length>1)throw new n("{subarray} can contain only one column");let o={cols:r,hskipBeforeAndAfter:!1,arraystretch:.5};if(o=Er(e.parser,o,"script"),o.body.length>0&&o.body[0].length>1)throw new n("{subarray} can contain only one column");return o},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(e){const t=Er(e.parser,{arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},Lr(e.envName));return{type:"leftright",mode:e.mode,body:[t],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:Fr,htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(e){l.contains(["gather","gather*"],e.envName)&&Hr(e);const t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Or(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return Er(e.parser,t,"display")},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:Fr,htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(e){Hr(e);const t={autoTag:Or(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return Er(e.parser,t,"display")},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["CD"],props:{numArgs:0},handler(e){return Hr(e),function(e){const t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();const r=e.fetch().text;if("&"!==r&&"\\\\"!==r){if("\\end"===r){0===t[t.length-1].length&&t.pop();break}throw new n("Expected \\\\ or \\cr or \\end",e.nextToken)}e.consume()}let r=[];const o=[r];for(let a=0;a-1);else{if(!("<>AV".indexOf(o)>-1))throw new n('Expected one of "<>AV=|." after @',l[t]);for(let e=0;e<2;e++){let r=!0;for(let h=t+1;h{const r=e.font,n=t.withFont(r);return ct(e.body,n)},Yr=(e,t)=>{const r=e.font,n=t.withFont(r);return St(e.body,n)},Xr={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};$e({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathsfit","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:(e,t)=>{let{parser:r,funcName:n}=e;const o=Ke(t[0]);let s=n;return s in Xr&&(s=Xr[s]),{type:"font",mode:r.mode,font:s.slice(1),body:o}},htmlBuilder:Ur,mathmlBuilder:Yr}),$e({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:(e,t)=>{let{parser:r}=e;const n=t[0],o=l.isCharacterBox(n);return{type:"mclass",mode:r.mode,mclass:Ut(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:o}}}),$e({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{let{parser:r,funcName:n,breakOnTokenText:o}=e;const{mode:s}=r,i=r.parseExpression(!0,o);return{type:"font",mode:s,font:"math"+n.slice(1),body:{type:"ordgroup",mode:r.mode,body:i}}},htmlBuilder:Ur,mathmlBuilder:Yr});const Wr=(e,t)=>{let r=t;return"display"===e?r=r.id>=w.SCRIPT.id?r.text():w.DISPLAY:"text"===e&&r.size===w.DISPLAY.size?r=w.TEXT:"script"===e?r=w.SCRIPT:"scriptscript"===e&&(r=w.SCRIPTSCRIPT),r},_r=(e,t)=>{const r=Wr(e.size,t.style),n=r.fracNum(),o=r.fracDen();let s;s=t.havingStyle(n);const i=ct(e.numer,s,t);if(e.continued){const e=8.5/t.fontMetrics().ptPerEm,r=3.5/t.fontMetrics().ptPerEm;i.height=i.height0?3*c:7*c,u=t.fontMetrics().denom1):(h>0?(m=t.fontMetrics().num2,p=c):(m=t.fontMetrics().num3,p=3*c),u=t.fontMetrics().denom2),l){const e=t.fontMetrics().axisHeight;m-i.depth-(e+.5*h){let r=new ft.MathNode("mfrac",[St(e.numer,t),St(e.denom,t)]);if(e.hasBarLine){if(e.barSize){const n=P(e.barSize,t);r.setAttribute("linethickness",F(n))}}else r.setAttribute("linethickness","0px");const n=Wr(e.size,t.style);if(n.size!==t.style.size){r=new ft.MathNode("mstyle",[r]);const e=n.size===w.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",e),r.setAttribute("scriptlevel","0")}if(null!=e.leftDelim||null!=e.rightDelim){const t=[];if(null!=e.leftDelim){const r=new ft.MathNode("mo",[new ft.TextNode(e.leftDelim.replace("\\",""))]);r.setAttribute("fence","true"),t.push(r)}if(t.push(r),null!=e.rightDelim){const r=new ft.MathNode("mo",[new ft.TextNode(e.rightDelim.replace("\\",""))]);r.setAttribute("fence","true"),t.push(r)}return yt(t)}return r};$e({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:(e,t)=>{let{parser:r,funcName:n}=e;const o=t[0],s=t[1];let i,a=null,l=null,h="auto";switch(n){case"\\dfrac":case"\\frac":case"\\tfrac":i=!0;break;case"\\\\atopfrac":i=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":i=!1,a="(",l=")";break;case"\\\\bracefrac":i=!1,a="\\{",l="\\}";break;case"\\\\brackfrac":i=!1,a="[",l="]";break;default:throw new Error("Unrecognized genfrac command")}switch(n){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text"}return{type:"genfrac",mode:r.mode,continued:!1,numer:o,denom:s,hasBarLine:i,leftDelim:a,rightDelim:l,size:h,barSize:null}},htmlBuilder:_r,mathmlBuilder:jr}),$e({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:(e,t)=>{let{parser:r,funcName:n}=e;const o=t[0],s=t[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:o,denom:s,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}}}),$e({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(e){let t,{parser:r,funcName:n,token:o}=e;switch(n){case"\\over":t="\\frac";break;case"\\choose":t="\\binom";break;case"\\atop":t="\\\\atopfrac";break;case"\\brace":t="\\\\bracefrac";break;case"\\brack":t="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:r.mode,replaceWith:t,token:o}}});const $r=["display","text","script","scriptscript"],Zr=function(e){let t=null;return e.length>0&&(t=e,t="."===t?null:t),t};$e({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(e,t){let{parser:r}=e;const n=t[4],o=t[5],s=Ke(t[0]),i="atom"===s.type&&"open"===s.family?Zr(s.text):null,a=Ke(t[1]),l="atom"===a.type&&"close"===a.family?Zr(a.text):null,h=Rt(t[2],"size");let c,m=null;h.isBlank?c=!0:(m=h.value,c=m.number>0);let p="auto",u=t[3];if("ordgroup"===u.type){if(u.body.length>0){const e=Rt(u.body[0],"textord");p=$r[Number(e.text)]}}else u=Rt(u,"textord"),p=$r[Number(u.text)];return{type:"genfrac",mode:r.mode,numer:n,denom:o,continued:!1,hasBarLine:c,barSize:m,leftDelim:i,rightDelim:l,size:p}},htmlBuilder:_r,mathmlBuilder:jr}),$e({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(e,t){let{parser:r,funcName:n,token:o}=e;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Rt(t[0],"size").value,token:o}}}),$e({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:(e,t)=>{let{parser:r,funcName:n}=e;const o=t[0],s=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e}(Rt(t[1],"infix").size),i=t[2],a=s.number>0;return{type:"genfrac",mode:r.mode,numer:o,denom:i,continued:!1,hasBarLine:a,barSize:s,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:_r,mathmlBuilder:jr});const Kr=(e,t)=>{const r=t.style;let n,o;"supsub"===e.type?(n=e.sup?ct(e.sup,t.havingStyle(r.sup()),t):ct(e.sub,t.havingStyle(r.sub()),t),o=Rt(e.base,"horizBrace")):o=Rt(e,"horizBrace");const s=ct(o.base,t.havingBaseStyle(w.DISPLAY)),i=It(o,t);let a;if(o.isOver?(a=Pe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:i}]},t),a.children[0].children[0].children[1].classes.push("svg-align")):(a=Pe.makeVList({positionType:"bottom",positionData:s.depth+.1+i.height,children:[{type:"elem",elem:i},{type:"kern",size:.1},{type:"elem",elem:s}]},t),a.children[0].children[0].children[0].classes.push("svg-align")),n){const e=Pe.makeSpan(["mord",o.isOver?"mover":"munder"],[a],t);a=o.isOver?Pe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:e},{type:"kern",size:.2},{type:"elem",elem:n}]},t):Pe.makeVList({positionType:"bottom",positionData:e.depth+.2+n.height+n.depth,children:[{type:"elem",elem:n},{type:"kern",size:.2},{type:"elem",elem:e}]},t)}return Pe.makeSpan(["mord",o.isOver?"mover":"munder"],[a],t)};$e({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(e,t){let{parser:r,funcName:n}=e;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:t[0]}},htmlBuilder:Kr,mathmlBuilder:(e,t)=>{const r=qt(e.label);return new ft.MathNode(e.isOver?"mover":"munder",[St(e.base,t),r])}}),$e({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:(e,t)=>{let{parser:r}=e;const n=t[1],o=Rt(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:o})?{type:"href",mode:r.mode,href:o,body:Je(n)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:(e,t)=>{const r=ot(e.body,t,!1);return Pe.makeAnchor(e.href,[],r,t)},mathmlBuilder:(e,t)=>{let r=kt(e.body,t);return r instanceof dt||(r=new dt("mrow",[r])),r.setAttribute("href",e.href),r}}),$e({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:(e,t)=>{let{parser:r}=e;const n=Rt(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");const o=[];for(let e=0;e{let{parser:r,funcName:o,token:s}=e;const i=Rt(t[0],"raw").string,a=t[1];let l;r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");const h={};switch(o){case"\\htmlClass":h.class=i,l={command:"\\htmlClass",class:i};break;case"\\htmlId":h.id=i,l={command:"\\htmlId",id:i};break;case"\\htmlStyle":h.style=i,l={command:"\\htmlStyle",style:i};break;case"\\htmlData":{const e=i.split(",");for(let t=0;t{const r=ot(e.body,t,!1),n=["enclosing"];e.attributes.class&&n.push(...e.attributes.class.trim().split(/\s+/));const o=Pe.makeSpan(n,r,t);for(const t in e.attributes)"class"!==t&&e.attributes.hasOwnProperty(t)&&o.setAttribute(t,e.attributes[t]);return o},mathmlBuilder:(e,t)=>kt(e.body,t)}),$e({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:(e,t)=>{let{parser:r}=e;return{type:"htmlmathml",mode:r.mode,html:Je(t[0]),mathml:Je(t[1])}},htmlBuilder:(e,t)=>{const r=ot(e.html,t,!1);return Pe.makeFragment(r)},mathmlBuilder:(e,t)=>kt(e.mathml,t)});const Jr=function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};{const t=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!t)throw new n("Invalid size: '"+e+"' in \\includegraphics");const r={number:+(t[1]+t[2]),unit:t[3]};if(!V(r))throw new n("Invalid unit: '"+r.unit+"' in \\includegraphics.");return r}};$e({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:(e,t,r)=>{let{parser:o}=e,s={number:0,unit:"em"},i={number:.9,unit:"em"},a={number:0,unit:"em"},l="";if(r[0]){const e=Rt(r[0],"raw").string.split(",");for(let t=0;t{const r=P(e.height,t);let n=0;e.totalheight.number>0&&(n=P(e.totalheight,t)-r);let o=0;e.width.number>0&&(o=P(e.width,t));const s={height:F(r+n)};o>0&&(s.width=F(o)),n>0&&(s.verticalAlign=F(-n));const i=new $(e.src,e.alt,s);return i.height=r,i.depth=n,i},mathmlBuilder:(e,t)=>{const r=new ft.MathNode("mglyph",[]);r.setAttribute("alt",e.alt);const n=P(e.height,t);let o=0;if(e.totalheight.number>0&&(o=P(e.totalheight,t)-n,r.setAttribute("valign",F(-o))),r.setAttribute("height",F(n+o)),e.width.number>0){const n=P(e.width,t);r.setAttribute("width",F(n))}return r.setAttribute("src",e.src),r}}),$e({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(e,t){let{parser:r,funcName:n}=e;const o=Rt(t[0],"size");if(r.settings.strict){const e="m"===n[1],t="mu"===o.value.unit;e?(t||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, not "+o.value.unit+" units"),"math"!==r.mode&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):t&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:o.value}},htmlBuilder(e,t){return Pe.makeGlue(e.dimension,t)},mathmlBuilder(e,t){const r=P(e.dimension,t);return new ft.SpaceNode(r)}}),$e({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{let{parser:r,funcName:n}=e;const o=t[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:o}},htmlBuilder:(e,t)=>{let r;"clap"===e.alignment?(r=Pe.makeSpan([],[ct(e.body,t)]),r=Pe.makeSpan(["inner"],[r],t)):r=Pe.makeSpan(["inner"],[ct(e.body,t)]);const n=Pe.makeSpan(["fix"],[]);let o=Pe.makeSpan([e.alignment],[r,n],t);const s=Pe.makeSpan(["strut"]);return s.style.height=F(o.height+o.depth),o.depth&&(s.style.verticalAlign=F(-o.depth)),o.children.unshift(s),o=Pe.makeSpan(["thinbox"],[o],t),Pe.makeSpan(["mord","vbox"],[o],t)},mathmlBuilder:(e,t)=>{const r=new ft.MathNode("mpadded",[St(e.body,t)]);if("rlap"!==e.alignment){const t="llap"===e.alignment?"-1":"-0.5";r.setAttribute("lspace",t+"width")}return r.setAttribute("width","0px"),r}}),$e({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){let{funcName:r,parser:n}=e;const o=n.mode;n.switchMode("math");const s="\\("===r?"\\)":"$",i=n.parseExpression(!1,s);return n.expect(s),n.switchMode(o),{type:"styling",mode:n.mode,style:"text",body:i}}}),$e({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){throw new n("Mismatched "+e.funcName)}});const Qr=(e,t)=>{switch(t.style.size){case w.DISPLAY.size:return e.display;case w.TEXT.size:return e.text;case w.SCRIPT.size:return e.script;case w.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};$e({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:(e,t)=>{let{parser:r}=e;return{type:"mathchoice",mode:r.mode,display:Je(t[0]),text:Je(t[1]),script:Je(t[2]),scriptscript:Je(t[3])}},htmlBuilder:(e,t)=>{const r=Qr(e,t),n=ot(r,t,!1);return Pe.makeFragment(n)},mathmlBuilder:(e,t)=>{const r=Qr(e,t);return kt(r,t)}});const en=(e,t,r,n,o,s,i)=>{e=Pe.makeSpan([],[e]);const a=r&&l.isCharacterBox(r);let h,c,m;if(t){const e=ct(t,n.havingStyle(o.sup()),n);c={elem:e,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-e.depth)}}if(r){const e=ct(r,n.havingStyle(o.sub()),n);h={elem:e,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-e.height)}}if(c&&h){const t=n.fontMetrics().bigOpSpacing5+h.elem.height+h.elem.depth+h.kern+e.depth+i;m=Pe.makeVList({positionType:"bottom",positionData:t,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:h.elem,marginLeft:F(-s)},{type:"kern",size:h.kern},{type:"elem",elem:e},{type:"kern",size:c.kern},{type:"elem",elem:c.elem,marginLeft:F(s)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(h){const t=e.height-i;m=Pe.makeVList({positionType:"top",positionData:t,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:h.elem,marginLeft:F(-s)},{type:"kern",size:h.kern},{type:"elem",elem:e}]},n)}else{if(!c)return e;{const t=e.depth+i;m=Pe.makeVList({positionType:"bottom",positionData:t,children:[{type:"elem",elem:e},{type:"kern",size:c.kern},{type:"elem",elem:c.elem,marginLeft:F(s)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}}const p=[m];if(h&&0!==s&&!a){const e=Pe.makeSpan(["mspace"],[],n);e.style.marginRight=F(s),p.unshift(e)}return Pe.makeSpan(["mop","op-limits"],p,n)},tn=["\\smallint"],rn=(e,t)=>{let r,n,o,s=!1;"supsub"===e.type?(r=e.sup,n=e.sub,o=Rt(e.base,"op"),s=!0):o=Rt(e,"op");const i=t.style;let a,h=!1;if(i.size===w.DISPLAY.size&&o.symbol&&!l.contains(tn,o.name)&&(h=!0),o.symbol){const e=h?"Size2-Regular":"Size1-Regular";let r="";if("\\oiint"!==o.name&&"\\oiiint"!==o.name||(r=o.name.slice(1),o.name="oiint"===r?"\\iint":"\\iiint"),a=Pe.makeSymbol(o.name,e,"math",t,["mop","op-symbol",h?"large-op":"small-op"]),r.length>0){const e=a.italic,n=Pe.staticSvg(r+"Size"+(h?"2":"1"),t);a=Pe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:a,shift:0},{type:"elem",elem:n,shift:h?.08:0}]},t),o.name="\\"+r,a.classes.unshift("mop"),a.italic=e}}else if(o.body){const e=ot(o.body,t,!0);1===e.length&&e[0]instanceof K?(a=e[0],a.classes[0]="mop"):a=Pe.makeSpan(["mop"],e,t)}else{const e=[];for(let r=1;r{let r;if(e.symbol)r=new dt("mo",[bt(e.name,e.mode)]),l.contains(tn,e.name)&&r.setAttribute("largeop","false");else if(e.body)r=new dt("mo",vt(e.body,t));else{r=new dt("mi",[new gt(e.name.slice(1))]);const t=new dt("mo",[bt("\u2061","text")]);r=e.parentIsSupSub?new dt("mrow",[r,t]):ut([r,t])}return r},on={"\u220f":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22c0":"\\bigwedge","\u22c1":"\\bigvee","\u22c2":"\\bigcap","\u22c3":"\\bigcup","\u2a00":"\\bigodot","\u2a01":"\\bigoplus","\u2a02":"\\bigotimes","\u2a04":"\\biguplus","\u2a06":"\\bigsqcup"};$e({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220f","\u2210","\u2211","\u22c0","\u22c1","\u22c2","\u22c3","\u2a00","\u2a01","\u2a02","\u2a04","\u2a06"],props:{numArgs:0},handler:(e,t)=>{let{parser:r,funcName:n}=e,o=n;return 1===o.length&&(o=on[o]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:o}},htmlBuilder:rn,mathmlBuilder:nn}),$e({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{let{parser:r}=e;const n=t[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:Je(n)}},htmlBuilder:rn,mathmlBuilder:nn});const sn={"\u222b":"\\int","\u222c":"\\iint","\u222d":"\\iiint","\u222e":"\\oint","\u222f":"\\oiint","\u2230":"\\oiiint"};$e({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(e){let{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:rn,mathmlBuilder:nn}),$e({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(e){let{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:rn,mathmlBuilder:nn}),$e({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222b","\u222c","\u222d","\u222e","\u222f","\u2230"],props:{numArgs:0},handler(e){let{parser:t,funcName:r}=e,n=r;return 1===n.length&&(n=sn[n]),{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:rn,mathmlBuilder:nn});const an=(e,t)=>{let r,n,o,s,i=!1;if("supsub"===e.type?(r=e.sup,n=e.sub,o=Rt(e.base,"operatorname"),i=!0):o=Rt(e,"operatorname"),o.body.length>0){const e=o.body.map((e=>{const t=e.text;return"string"==typeof t?{type:"textord",mode:e.mode,text:t}:e})),r=ot(e,t.withFont("mathrm"),!0);for(let e=0;e{let{parser:r,funcName:n}=e;const o=t[0];return{type:"operatorname",mode:r.mode,body:Je(o),alwaysHandleSupSub:"\\operatornamewithlimits"===n,limits:!1,parentIsSupSub:!1}},htmlBuilder:an,mathmlBuilder:(e,t)=>{let r=vt(e.body,t.withFont("mathrm")),n=!0;for(let e=0;ee.toText())).join("");r=[new ft.TextNode(e)]}const o=new ft.MathNode("mi",r);o.setAttribute("mathvariant","normal");const s=new ft.MathNode("mo",[bt("\u2061","text")]);return e.parentIsSupSub?new ft.MathNode("mrow",[o,s]):ft.newDocumentFragment([o,s])}}),Nr("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@"),Ze({type:"ordgroup",htmlBuilder(e,t){return e.semisimple?Pe.makeFragment(ot(e.body,t,!1)):Pe.makeSpan(["mord"],ot(e.body,t,!0),t)},mathmlBuilder(e,t){return kt(e.body,t,!0)}}),$e({type:"overline",names:["\\overline"],props:{numArgs:1},handler(e,t){let{parser:r}=e;const n=t[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder(e,t){const r=ct(e.body,t.havingCrampedStyle()),n=Pe.makeLineSpan("overline-line",t),o=t.fontMetrics().defaultRuleThickness,s=Pe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*o},{type:"elem",elem:n},{type:"kern",size:o}]},t);return Pe.makeSpan(["mord","overline"],[s],t)},mathmlBuilder(e,t){const r=new ft.MathNode("mo",[new ft.TextNode("\u203e")]);r.setAttribute("stretchy","true");const n=new ft.MathNode("mover",[St(e.body,t),r]);return n.setAttribute("accent","true"),n}}),$e({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{let{parser:r}=e;const n=t[0];return{type:"phantom",mode:r.mode,body:Je(n)}},htmlBuilder:(e,t)=>{const r=ot(e.body,t.withPhantom(),!1);return Pe.makeFragment(r)},mathmlBuilder:(e,t)=>{const r=vt(e.body,t);return new ft.MathNode("mphantom",r)}}),$e({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{let{parser:r}=e;const n=t[0];return{type:"hphantom",mode:r.mode,body:n}},htmlBuilder:(e,t)=>{let r=Pe.makeSpan([],[ct(e.body,t.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(let e=0;e{const r=vt(Je(e.body),t),n=new ft.MathNode("mphantom",r),o=new ft.MathNode("mpadded",[n]);return o.setAttribute("height","0px"),o.setAttribute("depth","0px"),o}}),$e({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{let{parser:r}=e;const n=t[0];return{type:"vphantom",mode:r.mode,body:n}},htmlBuilder:(e,t)=>{const r=Pe.makeSpan(["inner"],[ct(e.body,t.withPhantom())]),n=Pe.makeSpan(["fix"],[]);return Pe.makeSpan(["mord","rlap"],[r,n],t)},mathmlBuilder:(e,t)=>{const r=vt(Je(e.body),t),n=new ft.MathNode("mphantom",r),o=new ft.MathNode("mpadded",[n]);return o.setAttribute("width","0px"),o}}),$e({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(e,t){let{parser:r}=e;const n=Rt(t[0],"size").value,o=t[1];return{type:"raisebox",mode:r.mode,dy:n,body:o}},htmlBuilder(e,t){const r=ct(e.body,t),n=P(e.dy,t);return Pe.makeVList({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]},t)},mathmlBuilder(e,t){const r=new ft.MathNode("mpadded",[St(e.body,t)]),n=e.dy.number+e.dy.unit;return r.setAttribute("voffset",n),r}}),$e({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0,allowedInArgument:!0},handler(e){let{parser:t}=e;return{type:"internal",mode:t.mode}}}),$e({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler(e,t,r){let{parser:n}=e;const o=r[0],s=Rt(t[0],"size"),i=Rt(t[1],"size");return{type:"rule",mode:n.mode,shift:o&&Rt(o,"size").value,width:s.value,height:i.value}},htmlBuilder(e,t){const r=Pe.makeSpan(["mord","rule"],[],t),n=P(e.width,t),o=P(e.height,t),s=e.shift?P(e.shift,t):0;return r.style.borderRightWidth=F(n),r.style.borderTopWidth=F(o),r.style.bottom=F(s),r.width=n,r.height=o+s,r.depth=-s,r.maxFontSize=1.125*o*t.sizeMultiplier,r},mathmlBuilder(e,t){const r=P(e.width,t),n=P(e.height,t),o=e.shift?P(e.shift,t):0,s=t.color&&t.getColor()||"black",i=new ft.MathNode("mspace");i.setAttribute("mathbackground",s),i.setAttribute("width",F(r)),i.setAttribute("height",F(n));const a=new ft.MathNode("mpadded",[i]);return o>=0?a.setAttribute("height",F(o)):(a.setAttribute("height",F(o)),a.setAttribute("depth",F(-o))),a.setAttribute("voffset",F(o)),a}});const hn=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];$e({type:"sizing",names:hn,props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{let{breakOnTokenText:r,funcName:n,parser:o}=e;const s=o.parseExpression(!1,r);return{type:"sizing",mode:o.mode,size:hn.indexOf(n)+1,body:s}},htmlBuilder:(e,t)=>{const r=t.havingSize(e.size);return ln(e.body,r,t)},mathmlBuilder:(e,t)=>{const r=t.havingSize(e.size),n=vt(e.body,r),o=new ft.MathNode("mstyle",n);return o.setAttribute("mathsize",F(r.sizeMultiplier)),o}}),$e({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:(e,t,r)=>{let{parser:n}=e,o=!1,s=!1;const i=r[0]&&Rt(r[0],"ordgroup");if(i){let e="";for(let t=0;t{const r=Pe.makeSpan([],[ct(e.body,t)]);if(!e.smashHeight&&!e.smashDepth)return r;if(e.smashHeight&&(r.height=0,r.children))for(let e=0;e{const r=new ft.MathNode("mpadded",[St(e.body,t)]);return e.smashHeight&&r.setAttribute("height","0px"),e.smashDepth&&r.setAttribute("depth","0px"),r}}),$e({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){let{parser:n}=e;const o=r[0],s=t[0];return{type:"sqrt",mode:n.mode,body:s,index:o}},htmlBuilder(e,t){let r=ct(e.body,t.havingCrampedStyle());0===r.height&&(r.height=t.fontMetrics().xHeight),r=Pe.wrapFragment(r,t);const n=t.fontMetrics().defaultRuleThickness;let o=n;t.style.idr.height+r.depth+s&&(s=(s+c-r.height-r.depth)/2);const m=a.height-r.height-s-l;r.style.paddingLeft=F(h);const p=Pe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+m)},{type:"elem",elem:a},{type:"kern",size:l}]},t);if(e.index){const r=t.havingStyle(w.SCRIPTSCRIPT),n=ct(e.index,r,t),o=.6*(p.height-p.depth),s=Pe.makeVList({positionType:"shift",positionData:-o,children:[{type:"elem",elem:n}]},t),i=Pe.makeSpan(["root"],[s]);return Pe.makeSpan(["mord","sqrt"],[i,p],t)}return Pe.makeSpan(["mord","sqrt"],[p],t)},mathmlBuilder(e,t){const{body:r,index:n}=e;return n?new ft.MathNode("mroot",[St(r,t),St(n,t)]):new ft.MathNode("msqrt",[St(r,t)])}});const cn={display:w.DISPLAY,text:w.TEXT,script:w.SCRIPT,scriptscript:w.SCRIPTSCRIPT};$e({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e,t){let{breakOnTokenText:r,funcName:n,parser:o}=e;const s=o.parseExpression(!0,r),i=n.slice(1,n.length-5);return{type:"styling",mode:o.mode,style:i,body:s}},htmlBuilder(e,t){const r=cn[e.style],n=t.havingStyle(r).withFont("");return ln(e.body,n,t)},mathmlBuilder(e,t){const r=cn[e.style],n=t.havingStyle(r),o=vt(e.body,n),s=new ft.MathNode("mstyle",o),i={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]}[e.style];return s.setAttribute("scriptlevel",i[0]),s.setAttribute("displaystyle",i[1]),s}});Ze({type:"supsub",htmlBuilder(e,t){const r=function(e,t){const r=e.base;if(r)return"op"===r.type?r.limits&&(t.style.size===w.DISPLAY.size||r.alwaysHandleSupSub)?rn:null:"operatorname"===r.type?r.alwaysHandleSupSub&&(t.style.size===w.DISPLAY.size||r.limits)?an:null:"accent"===r.type?l.isCharacterBox(r.base)?Et:null:"horizBrace"===r.type&&!e.sub===r.isOver?Kr:null;return null}(e,t);if(r)return r(e,t);const{base:n,sup:o,sub:s}=e,i=ct(n,t);let a,h;const c=t.fontMetrics();let m=0,p=0;const u=n&&l.isCharacterBox(n);if(o){const e=t.havingStyle(t.style.sup());a=ct(o,e,t),u||(m=i.height-e.fontMetrics().supDrop*e.sizeMultiplier/t.sizeMultiplier)}if(s){const e=t.havingStyle(t.style.sub());h=ct(s,e,t),u||(p=i.depth+e.fontMetrics().subDrop*e.sizeMultiplier/t.sizeMultiplier)}let d;d=t.style===w.DISPLAY?c.sup1:t.style.cramped?c.sup3:c.sup2;const g=t.sizeMultiplier,f=F(.5/c.ptPerEm/g);let b,y=null;if(h){const t=e.base&&"op"===e.base.type&&e.base.name&&("\\oiint"===e.base.name||"\\oiiint"===e.base.name);(i instanceof K||t)&&(y=F(-i.italic))}if(a&&h){m=Math.max(m,d,a.depth+.25*c.xHeight),p=Math.max(p,c.sub2);const e=4*c.defaultRuleThickness;if(m-a.depth-(h.height-p)0&&(m+=t,p-=t)}const r=[{type:"elem",elem:h,shift:p,marginRight:f,marginLeft:y},{type:"elem",elem:a,shift:-m,marginRight:f}];b=Pe.makeVList({positionType:"individualShift",children:r},t)}else if(h){p=Math.max(p,c.sub1,h.height-.8*c.xHeight);const e=[{type:"elem",elem:h,marginLeft:y,marginRight:f}];b=Pe.makeVList({positionType:"shift",positionData:p,children:e},t)}else{if(!a)throw new Error("supsub must have either sup or sub.");m=Math.max(m,d,a.depth+.25*c.xHeight),b=Pe.makeVList({positionType:"shift",positionData:-m,children:[{type:"elem",elem:a,marginRight:f}]},t)}const x=lt(i,"right")||"mord";return Pe.makeSpan([x],[i,Pe.makeSpan(["msupsub"],[b])],t)},mathmlBuilder(e,t){let r,n,o=!1;e.base&&"horizBrace"===e.base.type&&(n=!!e.sup,n===e.base.isOver&&(o=!0,r=e.base.isOver)),!e.base||"op"!==e.base.type&&"operatorname"!==e.base.type||(e.base.parentIsSupSub=!0);const s=[St(e.base,t)];let i;if(e.sub&&s.push(St(e.sub,t)),e.sup&&s.push(St(e.sup,t)),o)i=r?"mover":"munder";else if(e.sub)if(e.sup){const r=e.base;i=r&&"op"===r.type&&r.limits&&t.style===w.DISPLAY||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(t.style===w.DISPLAY||r.limits)?"munderover":"msubsup"}else{const r=e.base;i=r&&"op"===r.type&&r.limits&&(t.style===w.DISPLAY||r.alwaysHandleSupSub)||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(r.limits||t.style===w.DISPLAY)?"munder":"msub"}else{const r=e.base;i=r&&"op"===r.type&&r.limits&&(t.style===w.DISPLAY||r.alwaysHandleSupSub)||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(r.limits||t.style===w.DISPLAY)?"mover":"msup"}return new ft.MathNode(i,s)}}),Ze({type:"atom",htmlBuilder(e,t){return Pe.mathsym(e.text,e.mode,t,["m"+e.family])},mathmlBuilder(e,t){const r=new ft.MathNode("mo",[bt(e.text,e.mode)]);if("bin"===e.family){const n=xt(e,t);"bold-italic"===n&&r.setAttribute("mathvariant",n)}else"punct"===e.family?r.setAttribute("separator","true"):"open"!==e.family&&"close"!==e.family||r.setAttribute("stretchy","false");return r}});const mn={mi:"italic",mn:"normal",mtext:"normal"};Ze({type:"mathord",htmlBuilder(e,t){return Pe.makeOrd(e,t,"mathord")},mathmlBuilder(e,t){const r=new ft.MathNode("mi",[bt(e.text,e.mode,t)]),n=xt(e,t)||"italic";return n!==mn[r.type]&&r.setAttribute("mathvariant",n),r}}),Ze({type:"textord",htmlBuilder(e,t){return Pe.makeOrd(e,t,"textord")},mathmlBuilder(e,t){const r=bt(e.text,e.mode,t),n=xt(e,t)||"normal";let o;return o="text"===e.mode?new ft.MathNode("mtext",[r]):/[0-9]/.test(e.text)?new ft.MathNode("mn",[r]):"\\prime"===e.text?new ft.MathNode("mo",[r]):new ft.MathNode("mi",[r]),n!==mn[o.type]&&o.setAttribute("mathvariant",n),o}});const pn={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},un={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};Ze({type:"spacing",htmlBuilder(e,t){if(un.hasOwnProperty(e.text)){const r=un[e.text].className||"";if("text"===e.mode){const n=Pe.makeOrd(e,t,"textord");return n.classes.push(r),n}return Pe.makeSpan(["mspace",r],[Pe.mathsym(e.text,e.mode,t)],t)}if(pn.hasOwnProperty(e.text))return Pe.makeSpan(["mspace",pn[e.text]],[],t);throw new n('Unknown type of space "'+e.text+'"')},mathmlBuilder(e,t){let r;if(!un.hasOwnProperty(e.text)){if(pn.hasOwnProperty(e.text))return new ft.MathNode("mspace");throw new n('Unknown type of space "'+e.text+'"')}return r=new ft.MathNode("mtext",[new ft.TextNode("\xa0")]),r}});const dn=()=>{const e=new ft.MathNode("mtd",[]);return e.setAttribute("width","50%"),e};Ze({type:"tag",mathmlBuilder(e,t){const r=new ft.MathNode("mtable",[new ft.MathNode("mtr",[dn(),new ft.MathNode("mtd",[kt(e.body,t)]),dn(),new ft.MathNode("mtd",[kt(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});const gn={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},fn={"\\textbf":"textbf","\\textmd":"textmd"},bn={"\\textit":"textit","\\textup":"textup"},yn=(e,t)=>{const r=e.font;return r?gn[r]?t.withTextFontFamily(gn[r]):fn[r]?t.withTextFontWeight(fn[r]):"\\emph"===r?"textit"===t.fontShape?t.withTextFontShape("textup"):t.withTextFontShape("textit"):t.withTextFontShape(bn[r]):t};$e({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(e,t){let{parser:r,funcName:n}=e;const o=t[0];return{type:"text",mode:r.mode,body:Je(o),font:n}},htmlBuilder(e,t){const r=yn(e,t),n=ot(e.body,r,!0);return Pe.makeSpan(["mord","text"],n,r)},mathmlBuilder(e,t){const r=yn(e,t);return kt(e.body,r)}}),$e({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(e,t){let{parser:r}=e;return{type:"underline",mode:r.mode,body:t[0]}},htmlBuilder(e,t){const r=ct(e.body,t),n=Pe.makeLineSpan("underline-line",t),o=t.fontMetrics().defaultRuleThickness,s=Pe.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:o},{type:"elem",elem:n},{type:"kern",size:3*o},{type:"elem",elem:r}]},t);return Pe.makeSpan(["mord","underline"],[s],t)},mathmlBuilder(e,t){const r=new ft.MathNode("mo",[new ft.TextNode("\u203e")]);r.setAttribute("stretchy","true");const n=new ft.MathNode("munder",[St(e.body,t),r]);return n.setAttribute("accentunder","true"),n}}),$e({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(e,t){let{parser:r}=e;return{type:"vcenter",mode:r.mode,body:t[0]}},htmlBuilder(e,t){const r=ct(e.body,t),n=t.fontMetrics().axisHeight,o=.5*(r.height-n-(r.depth+n));return Pe.makeVList({positionType:"shift",positionData:o,children:[{type:"elem",elem:r}]},t)},mathmlBuilder(e,t){return new ft.MathNode("mpadded",[St(e.body,t)],["vcenter"])}}),$e({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(e,t,r){throw new n("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(e,t){const r=xn(e),n=[],o=t.havingStyle(t.style.text());for(let t=0;te.body.replace(/ /g,e.star?"\u2423":"\xa0");var wn=We;const vn="[ \r\n\t]",kn="(\\\\[a-zA-Z@]+)"+vn+"*",Sn="[\u0300-\u036f]",Mn=new RegExp(Sn+"+$"),zn="("+vn+"+)|\\\\(\n|[ \r\t]+\n?)[ \r\t]*|([!-\\[\\]-\u2027\u202a-\ud7ff\uf900-\uffff]"+Sn+"*|[\ud800-\udbff][\udc00-\udfff]"+Sn+"*|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5|"+kn+"|\\\\[^\ud800-\udfff])";class An{constructor(e,t){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=t,this.tokenRegex=new RegExp(zn,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,t){this.catcodes[e]=t}lex(){const e=this.input,t=this.tokenRegex.lastIndex;if(t===e.length)return new Ir("EOF",new qr(this,t,t));const r=this.tokenRegex.exec(e);if(null===r||r.index!==t)throw new n("Unexpected character: '"+e[t]+"'",new Ir(e[t],new qr(this,t,t+1)));const o=r[6]||r[3]||(r[2]?"\\ ":" ");if(14===this.catcodes[o]){const t=e.indexOf("\n",this.tokenRegex.lastIndex);return-1===t?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=t+1,this.lex()}return new Ir(o,new qr(this,t,this.tokenRegex.lastIndex))}}class Tn{constructor(e,t){void 0===e&&(e={}),void 0===t&&(t={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=t,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(0===this.undefStack.length)throw new n("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");const e=this.undefStack.pop();for(const t in e)e.hasOwnProperty(t)&&(null==e[t]?delete this.current[t]:this.current[t]=e[t])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,t,r){if(void 0===r&&(r=!1),r){for(let t=0;t0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{const t=this.undefStack[this.undefStack.length-1];t&&!t.hasOwnProperty(e)&&(t[e]=this.current[e])}null==t?delete this.current[e]:this.current[e]=t}}var Bn=Cr;Nr("\\noexpand",(function(e){const t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}})),Nr("\\expandafter",(function(e){const t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}})),Nr("\\@firstoftwo",(function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}})),Nr("\\@secondoftwo",(function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}})),Nr("\\@ifnextchar",(function(e){const t=e.consumeArgs(3);e.consumeSpaces();const r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}})),Nr("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),Nr("\\TextOrMath",(function(e){const t=e.consumeArgs(2);return"text"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}}));const Cn={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};Nr("\\char",(function(e){let t,r=e.popToken(),o="";if("'"===r.text)t=8,r=e.popToken();else if('"'===r.text)t=16,r=e.popToken();else if("`"===r.text)if(r=e.popToken(),"\\"===r.text[0])o=r.text.charCodeAt(1);else{if("EOF"===r.text)throw new n("\\char` missing argument");o=r.text.charCodeAt(0)}else t=10;if(t){if(o=Cn[r.text],null==o||o>=t)throw new n("Invalid base-"+t+" digit "+r.text);let s;for(;null!=(s=Cn[e.future().text])&&s{let s=e.consumeArg().tokens;if(1!==s.length)throw new n("\\newcommand's first argument must be a macro name");const i=s[0].text,a=e.isDefined(i);if(a&&!t)throw new n("\\newcommand{"+i+"} attempting to redefine "+i+"; use \\renewcommand");if(!a&&!r)throw new n("\\renewcommand{"+i+"} when command "+i+" does not yet exist; use \\newcommand");let l=0;if(s=e.consumeArg().tokens,1===s.length&&"["===s[0].text){let t="",r=e.expandNextToken();for(;"]"!==r.text&&"EOF"!==r.text;)t+=r.text,r=e.expandNextToken();if(!t.match(/^\s*[0-9]+\s*$/))throw new n("Invalid number of arguments: "+t);l=parseInt(t),s=e.consumeArg().tokens}return a&&o||e.macros.set(i,{tokens:s,numArgs:l}),""};Nr("\\newcommand",(e=>Nn(e,!1,!0,!1))),Nr("\\renewcommand",(e=>Nn(e,!0,!1,!1))),Nr("\\providecommand",(e=>Nn(e,!0,!0,!0))),Nr("\\message",(e=>{const t=e.consumeArgs(1)[0];return console.log(t.reverse().map((e=>e.text)).join("")),""})),Nr("\\errmessage",(e=>{const t=e.consumeArgs(1)[0];return console.error(t.reverse().map((e=>e.text)).join("")),""})),Nr("\\show",(e=>{const t=e.popToken(),r=t.text;return console.log(t,e.macros.get(r),wn[r],se.math[r],se.text[r]),""})),Nr("\\bgroup","{"),Nr("\\egroup","}"),Nr("~","\\nobreakspace"),Nr("\\lq","`"),Nr("\\rq","'"),Nr("\\aa","\\r a"),Nr("\\AA","\\r A"),Nr("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xa9}"),Nr("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"),Nr("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xae}"),Nr("\u212c","\\mathscr{B}"),Nr("\u2130","\\mathscr{E}"),Nr("\u2131","\\mathscr{F}"),Nr("\u210b","\\mathscr{H}"),Nr("\u2110","\\mathscr{I}"),Nr("\u2112","\\mathscr{L}"),Nr("\u2133","\\mathscr{M}"),Nr("\u211b","\\mathscr{R}"),Nr("\u212d","\\mathfrak{C}"),Nr("\u210c","\\mathfrak{H}"),Nr("\u2128","\\mathfrak{Z}"),Nr("\\Bbbk","\\Bbb{k}"),Nr("\xb7","\\cdotp"),Nr("\\llap","\\mathllap{\\textrm{#1}}"),Nr("\\rlap","\\mathrlap{\\textrm{#1}}"),Nr("\\clap","\\mathclap{\\textrm{#1}}"),Nr("\\mathstrut","\\vphantom{(}"),Nr("\\underbar","\\underline{\\text{#1}}"),Nr("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'),Nr("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}"),Nr("\\ne","\\neq"),Nr("\u2260","\\neq"),Nr("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}"),Nr("\u2209","\\notin"),Nr("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}"),Nr("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}"),Nr("\u225a","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225a}}"),Nr("\u225b","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225b}}"),Nr("\u225d","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225d}}"),Nr("\u225e","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225e}}"),Nr("\u225f","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225f}}"),Nr("\u27c2","\\perp"),Nr("\u203c","\\mathclose{!\\mkern-0.8mu!}"),Nr("\u220c","\\notni"),Nr("\u231c","\\ulcorner"),Nr("\u231d","\\urcorner"),Nr("\u231e","\\llcorner"),Nr("\u231f","\\lrcorner"),Nr("\xa9","\\copyright"),Nr("\xae","\\textregistered"),Nr("\ufe0f","\\textregistered"),Nr("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}'),Nr("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}'),Nr("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}'),Nr("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}'),Nr("\\vdots","{\\varvdots\\rule{0pt}{15pt}}"),Nr("\u22ee","\\vdots"),Nr("\\varGamma","\\mathit{\\Gamma}"),Nr("\\varDelta","\\mathit{\\Delta}"),Nr("\\varTheta","\\mathit{\\Theta}"),Nr("\\varLambda","\\mathit{\\Lambda}"),Nr("\\varXi","\\mathit{\\Xi}"),Nr("\\varPi","\\mathit{\\Pi}"),Nr("\\varSigma","\\mathit{\\Sigma}"),Nr("\\varUpsilon","\\mathit{\\Upsilon}"),Nr("\\varPhi","\\mathit{\\Phi}"),Nr("\\varPsi","\\mathit{\\Psi}"),Nr("\\varOmega","\\mathit{\\Omega}"),Nr("\\substack","\\begin{subarray}{c}#1\\end{subarray}"),Nr("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax"),Nr("\\boxed","\\fbox{$\\displaystyle{#1}$}"),Nr("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;"),Nr("\\implies","\\DOTSB\\;\\Longrightarrow\\;"),Nr("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;"),Nr("\\dddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}"),Nr("\\ddddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");const qn={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};Nr("\\dots",(function(e){let t="\\dotso";const r=e.expandAfterFuture().text;return r in qn?t=qn[r]:("\\not"===r.slice(0,4)||r in se.math&&l.contains(["bin","rel"],se.math[r].group))&&(t="\\dotsb"),t}));const In={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};Nr("\\dotso",(function(e){return e.future().text in In?"\\ldots\\,":"\\ldots"})),Nr("\\dotsc",(function(e){const t=e.future().text;return t in In&&","!==t?"\\ldots\\,":"\\ldots"})),Nr("\\cdots",(function(e){return e.future().text in In?"\\@cdots\\,":"\\@cdots"})),Nr("\\dotsb","\\cdots"),Nr("\\dotsm","\\cdots"),Nr("\\dotsi","\\!\\cdots"),Nr("\\dotsx","\\ldots\\,"),Nr("\\DOTSI","\\relax"),Nr("\\DOTSB","\\relax"),Nr("\\DOTSX","\\relax"),Nr("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),Nr("\\,","\\tmspace+{3mu}{.1667em}"),Nr("\\thinspace","\\,"),Nr("\\>","\\mskip{4mu}"),Nr("\\:","\\tmspace+{4mu}{.2222em}"),Nr("\\medspace","\\:"),Nr("\\;","\\tmspace+{5mu}{.2777em}"),Nr("\\thickspace","\\;"),Nr("\\!","\\tmspace-{3mu}{.1667em}"),Nr("\\negthinspace","\\!"),Nr("\\negmedspace","\\tmspace-{4mu}{.2222em}"),Nr("\\negthickspace","\\tmspace-{5mu}{.277em}"),Nr("\\enspace","\\kern.5em "),Nr("\\enskip","\\hskip.5em\\relax"),Nr("\\quad","\\hskip1em\\relax"),Nr("\\qquad","\\hskip2em\\relax"),Nr("\\tag","\\@ifstar\\tag@literal\\tag@paren"),Nr("\\tag@paren","\\tag@literal{({#1})}"),Nr("\\tag@literal",(e=>{if(e.macros.get("\\df@tag"))throw new n("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"})),Nr("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),Nr("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),Nr("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),Nr("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),Nr("\\newline","\\\\\\relax"),Nr("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");const Rn=F(T["Main-Regular"]["T".charCodeAt(0)][1]-.7*T["Main-Regular"]["A".charCodeAt(0)][1]);Nr("\\LaTeX","\\textrm{\\html@mathml{L\\kern-.36em\\raisebox{"+Rn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{LaTeX}}"),Nr("\\KaTeX","\\textrm{\\html@mathml{K\\kern-.17em\\raisebox{"+Rn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{KaTeX}}"),Nr("\\hspace","\\@ifstar\\@hspacer\\@hspace"),Nr("\\@hspace","\\hskip #1\\relax"),Nr("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),Nr("\\ordinarycolon",":"),Nr("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),Nr("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),Nr("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),Nr("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),Nr("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),Nr("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),Nr("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),Nr("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),Nr("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),Nr("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),Nr("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),Nr("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),Nr("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),Nr("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),Nr("\u2237","\\dblcolon"),Nr("\u2239","\\eqcolon"),Nr("\u2254","\\coloneqq"),Nr("\u2255","\\eqqcolon"),Nr("\u2a74","\\Coloneqq"),Nr("\\ratio","\\vcentcolon"),Nr("\\coloncolon","\\dblcolon"),Nr("\\colonequals","\\coloneqq"),Nr("\\coloncolonequals","\\Coloneqq"),Nr("\\equalscolon","\\eqqcolon"),Nr("\\equalscoloncolon","\\Eqqcolon"),Nr("\\colonminus","\\coloneq"),Nr("\\coloncolonminus","\\Coloneq"),Nr("\\minuscolon","\\eqcolon"),Nr("\\minuscoloncolon","\\Eqcolon"),Nr("\\coloncolonapprox","\\Colonapprox"),Nr("\\coloncolonsim","\\Colonsim"),Nr("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Nr("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Nr("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Nr("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Nr("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220c}}"),Nr("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),Nr("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),Nr("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),Nr("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),Nr("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}"),Nr("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}"),Nr("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}"),Nr("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}"),Nr("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}"),Nr("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}"),Nr("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}"),Nr("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}"),Nr("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}"),Nr("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}"),Nr("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}"),Nr("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}"),Nr("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}"),Nr("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}"),Nr("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228a}"),Nr("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2acb}"),Nr("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228b}"),Nr("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2acc}"),Nr("\\imath","\\html@mathml{\\@imath}{\u0131}"),Nr("\\jmath","\\html@mathml{\\@jmath}{\u0237}"),Nr("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27e6}}"),Nr("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27e7}}"),Nr("\u27e6","\\llbracket"),Nr("\u27e7","\\rrbracket"),Nr("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}"),Nr("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}"),Nr("\u2983","\\lBrace"),Nr("\u2984","\\rBrace"),Nr("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29b5}}"),Nr("\u29b5","\\minuso"),Nr("\\darr","\\downarrow"),Nr("\\dArr","\\Downarrow"),Nr("\\Darr","\\Downarrow"),Nr("\\lang","\\langle"),Nr("\\rang","\\rangle"),Nr("\\uarr","\\uparrow"),Nr("\\uArr","\\Uparrow"),Nr("\\Uarr","\\Uparrow"),Nr("\\N","\\mathbb{N}"),Nr("\\R","\\mathbb{R}"),Nr("\\Z","\\mathbb{Z}"),Nr("\\alef","\\aleph"),Nr("\\alefsym","\\aleph"),Nr("\\Alpha","\\mathrm{A}"),Nr("\\Beta","\\mathrm{B}"),Nr("\\bull","\\bullet"),Nr("\\Chi","\\mathrm{X}"),Nr("\\clubs","\\clubsuit"),Nr("\\cnums","\\mathbb{C}"),Nr("\\Complex","\\mathbb{C}"),Nr("\\Dagger","\\ddagger"),Nr("\\diamonds","\\diamondsuit"),Nr("\\empty","\\emptyset"),Nr("\\Epsilon","\\mathrm{E}"),Nr("\\Eta","\\mathrm{H}"),Nr("\\exist","\\exists"),Nr("\\harr","\\leftrightarrow"),Nr("\\hArr","\\Leftrightarrow"),Nr("\\Harr","\\Leftrightarrow"),Nr("\\hearts","\\heartsuit"),Nr("\\image","\\Im"),Nr("\\infin","\\infty"),Nr("\\Iota","\\mathrm{I}"),Nr("\\isin","\\in"),Nr("\\Kappa","\\mathrm{K}"),Nr("\\larr","\\leftarrow"),Nr("\\lArr","\\Leftarrow"),Nr("\\Larr","\\Leftarrow"),Nr("\\lrarr","\\leftrightarrow"),Nr("\\lrArr","\\Leftrightarrow"),Nr("\\Lrarr","\\Leftrightarrow"),Nr("\\Mu","\\mathrm{M}"),Nr("\\natnums","\\mathbb{N}"),Nr("\\Nu","\\mathrm{N}"),Nr("\\Omicron","\\mathrm{O}"),Nr("\\plusmn","\\pm"),Nr("\\rarr","\\rightarrow"),Nr("\\rArr","\\Rightarrow"),Nr("\\Rarr","\\Rightarrow"),Nr("\\real","\\Re"),Nr("\\reals","\\mathbb{R}"),Nr("\\Reals","\\mathbb{R}"),Nr("\\Rho","\\mathrm{P}"),Nr("\\sdot","\\cdot"),Nr("\\sect","\\S"),Nr("\\spades","\\spadesuit"),Nr("\\sub","\\subset"),Nr("\\sube","\\subseteq"),Nr("\\supe","\\supseteq"),Nr("\\Tau","\\mathrm{T}"),Nr("\\thetasym","\\vartheta"),Nr("\\weierp","\\wp"),Nr("\\Zeta","\\mathrm{Z}"),Nr("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),Nr("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),Nr("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),Nr("\\bra","\\mathinner{\\langle{#1}|}"),Nr("\\ket","\\mathinner{|{#1}\\rangle}"),Nr("\\braket","\\mathinner{\\langle{#1}\\rangle}"),Nr("\\Bra","\\left\\langle#1\\right|"),Nr("\\Ket","\\left|#1\\right\\rangle");const Hn=e=>t=>{const r=t.consumeArg().tokens,n=t.consumeArg().tokens,o=t.consumeArg().tokens,s=t.consumeArg().tokens,i=t.macros.get("|"),a=t.macros.get("\\|");t.macros.beginGroup();const l=t=>r=>{e&&(r.macros.set("|",i),o.length&&r.macros.set("\\|",a));let s=t;if(!t&&o.length){"|"===r.future().text&&(r.popToken(),s=!0)}return{tokens:s?o:n,numArgs:0}};t.macros.set("|",l(!1)),o.length&&t.macros.set("\\|",l(!0));const h=t.consumeArg().tokens,c=t.expandTokens([...s,...h,...r]);return t.macros.endGroup(),{tokens:c.reverse(),numArgs:0}};Nr("\\bra@ket",Hn(!1)),Nr("\\bra@set",Hn(!0)),Nr("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"),Nr("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"),Nr("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"),Nr("\\angln","{\\angl n}"),Nr("\\blue","\\textcolor{##6495ed}{#1}"),Nr("\\orange","\\textcolor{##ffa500}{#1}"),Nr("\\pink","\\textcolor{##ff00af}{#1}"),Nr("\\red","\\textcolor{##df0030}{#1}"),Nr("\\green","\\textcolor{##28ae7b}{#1}"),Nr("\\gray","\\textcolor{gray}{#1}"),Nr("\\purple","\\textcolor{##9d38bd}{#1}"),Nr("\\blueA","\\textcolor{##ccfaff}{#1}"),Nr("\\blueB","\\textcolor{##80f6ff}{#1}"),Nr("\\blueC","\\textcolor{##63d9ea}{#1}"),Nr("\\blueD","\\textcolor{##11accd}{#1}"),Nr("\\blueE","\\textcolor{##0c7f99}{#1}"),Nr("\\tealA","\\textcolor{##94fff5}{#1}"),Nr("\\tealB","\\textcolor{##26edd5}{#1}"),Nr("\\tealC","\\textcolor{##01d1c1}{#1}"),Nr("\\tealD","\\textcolor{##01a995}{#1}"),Nr("\\tealE","\\textcolor{##208170}{#1}"),Nr("\\greenA","\\textcolor{##b6ffb0}{#1}"),Nr("\\greenB","\\textcolor{##8af281}{#1}"),Nr("\\greenC","\\textcolor{##74cf70}{#1}"),Nr("\\greenD","\\textcolor{##1fab54}{#1}"),Nr("\\greenE","\\textcolor{##0d923f}{#1}"),Nr("\\goldA","\\textcolor{##ffd0a9}{#1}"),Nr("\\goldB","\\textcolor{##ffbb71}{#1}"),Nr("\\goldC","\\textcolor{##ff9c39}{#1}"),Nr("\\goldD","\\textcolor{##e07d10}{#1}"),Nr("\\goldE","\\textcolor{##a75a05}{#1}"),Nr("\\redA","\\textcolor{##fca9a9}{#1}"),Nr("\\redB","\\textcolor{##ff8482}{#1}"),Nr("\\redC","\\textcolor{##f9685d}{#1}"),Nr("\\redD","\\textcolor{##e84d39}{#1}"),Nr("\\redE","\\textcolor{##bc2612}{#1}"),Nr("\\maroonA","\\textcolor{##ffbde0}{#1}"),Nr("\\maroonB","\\textcolor{##ff92c6}{#1}"),Nr("\\maroonC","\\textcolor{##ed5fa6}{#1}"),Nr("\\maroonD","\\textcolor{##ca337c}{#1}"),Nr("\\maroonE","\\textcolor{##9e034e}{#1}"),Nr("\\purpleA","\\textcolor{##ddd7ff}{#1}"),Nr("\\purpleB","\\textcolor{##c6b9fc}{#1}"),Nr("\\purpleC","\\textcolor{##aa87ff}{#1}"),Nr("\\purpleD","\\textcolor{##7854ab}{#1}"),Nr("\\purpleE","\\textcolor{##543b78}{#1}"),Nr("\\mintA","\\textcolor{##f5f9e8}{#1}"),Nr("\\mintB","\\textcolor{##edf2df}{#1}"),Nr("\\mintC","\\textcolor{##e0e5cc}{#1}"),Nr("\\grayA","\\textcolor{##f6f7f7}{#1}"),Nr("\\grayB","\\textcolor{##f0f1f2}{#1}"),Nr("\\grayC","\\textcolor{##e3e5e6}{#1}"),Nr("\\grayD","\\textcolor{##d6d8da}{#1}"),Nr("\\grayE","\\textcolor{##babec2}{#1}"),Nr("\\grayF","\\textcolor{##888d93}{#1}"),Nr("\\grayG","\\textcolor{##626569}{#1}"),Nr("\\grayH","\\textcolor{##3b3e40}{#1}"),Nr("\\grayI","\\textcolor{##21242c}{#1}"),Nr("\\kaBlue","\\textcolor{##314453}{#1}"),Nr("\\kaGreen","\\textcolor{##71B307}{#1}");const On={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class En{constructor(e,t,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new Tn(Bn,t.macros),this.mode=r,this.stack=[]}feed(e){this.lexer=new An(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){let t,r,n;if(e){if(this.consumeSpaces(),"["!==this.future().text)return null;t=this.popToken(),({tokens:n,end:r}=this.consumeArg(["]"]))}else({tokens:n,start:t,end:r}=this.consumeArg());return this.pushToken(new Ir("EOF",r.loc)),this.pushTokens(n),t.range(r,"")}consumeSpaces(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}}consumeArg(e){const t=[],r=e&&e.length>0;r||this.consumeSpaces();const o=this.future();let s,i=0,a=0;do{if(s=this.popToken(),t.push(s),"{"===s.text)++i;else if("}"===s.text){if(--i,-1===i)throw new n("Extra }",s)}else if("EOF"===s.text)throw new n("Unexpected end of input in a macro argument, expected '"+(e&&r?e[a]:"}")+"'",s);if(e&&r)if((0===i||1===i&&"{"===e[a])&&s.text===e[a]){if(++a,a===e.length){t.splice(-a,a);break}}else a=0}while(0!==i||r);return"{"===o.text&&"}"===t[t.length-1].text&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:o,end:s}}consumeArgs(e,t){if(t){if(t.length!==e+1)throw new n("The length of delimiters doesn't match the number of args!");const r=t[0];for(let e=0;ethis.settings.maxExpand)throw new n("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){const t=this.popToken(),r=t.text,o=t.noexpand?null:this._getExpansion(r);if(null==o||e&&o.unexpandable){if(e&&null==o&&"\\"===r[0]&&!this.isDefined(r))throw new n("Undefined control sequence: "+r);return this.pushToken(t),!1}this.countExpansion(1);let s=o.tokens;const i=this.consumeArgs(o.numArgs,o.delimiters);if(o.numArgs){s=s.slice();for(let e=s.length-1;e>=0;--e){let t=s[e];if("#"===t.text){if(0===e)throw new n("Incomplete placeholder at end of macro body",t);if(t=s[--e],"#"===t.text)s.splice(e+1,1);else{if(!/^[1-9]$/.test(t.text))throw new n("Not a valid argument number",t);s.splice(e,2,...i[+t.text-1])}}}}return this.pushTokens(s),s.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(!1===this.expandOnce()){const e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new Ir(e)]):void 0}expandTokens(e){const t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;)if(!1===this.expandOnce(!0)){const e=this.stack.pop();e.treatAsRelax&&(e.noexpand=!1,e.treatAsRelax=!1),t.push(e)}return this.countExpansion(t.length),t}expandMacroAsText(e){const t=this.expandMacro(e);return t?t.map((e=>e.text)).join(""):t}_getExpansion(e){const t=this.macros.get(e);if(null==t)return t;if(1===e.length){const t=this.lexer.catcodes[e];if(null!=t&&13!==t)return}const r="function"==typeof t?t(this):t;if("string"==typeof r){let e=0;if(-1!==r.indexOf("#")){const t=r.replace(/##/g,"");for(;-1!==t.indexOf("#"+(e+1));)++e}const t=new An(r,this.settings),n=[];let o=t.lex();for(;"EOF"!==o.text;)n.push(o),o=t.lex();n.reverse();return{tokens:n,numArgs:e}}return r}isDefined(e){return this.macros.has(e)||wn.hasOwnProperty(e)||se.math.hasOwnProperty(e)||se.text.hasOwnProperty(e)||On.hasOwnProperty(e)}isExpandable(e){const t=this.macros.get(e);return null!=t?"string"==typeof t||"function"==typeof t||!t.unexpandable:wn.hasOwnProperty(e)&&!wn[e].primitive}}const Ln=/^[\u208a\u208b\u208c\u208d\u208e\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u2090\u2091\u2095\u1d62\u2c7c\u2096\u2097\u2098\u2099\u2092\u209a\u1d63\u209b\u209c\u1d64\u1d65\u2093\u1d66\u1d67\u1d68\u1d69\u1d6a]/,Dn=Object.freeze({"\u208a":"+","\u208b":"-","\u208c":"=","\u208d":"(","\u208e":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1d62":"i","\u2c7c":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209a":"p","\u1d63":"r","\u209b":"s","\u209c":"t","\u1d64":"u","\u1d65":"v","\u2093":"x","\u1d66":"\u03b2","\u1d67":"\u03b3","\u1d68":"\u03c1","\u1d69":"\u03d5","\u1d6a":"\u03c7","\u207a":"+","\u207b":"-","\u207c":"=","\u207d":"(","\u207e":")","\u2070":"0","\xb9":"1","\xb2":"2","\xb3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1d2c":"A","\u1d2e":"B","\u1d30":"D","\u1d31":"E","\u1d33":"G","\u1d34":"H","\u1d35":"I","\u1d36":"J","\u1d37":"K","\u1d38":"L","\u1d39":"M","\u1d3a":"N","\u1d3c":"O","\u1d3e":"P","\u1d3f":"R","\u1d40":"T","\u1d41":"U","\u2c7d":"V","\u1d42":"W","\u1d43":"a","\u1d47":"b","\u1d9c":"c","\u1d48":"d","\u1d49":"e","\u1da0":"f","\u1d4d":"g","\u02b0":"h","\u2071":"i","\u02b2":"j","\u1d4f":"k","\u02e1":"l","\u1d50":"m","\u207f":"n","\u1d52":"o","\u1d56":"p","\u02b3":"r","\u02e2":"s","\u1d57":"t","\u1d58":"u","\u1d5b":"v","\u02b7":"w","\u02e3":"x","\u02b8":"y","\u1dbb":"z","\u1d5d":"\u03b2","\u1d5e":"\u03b3","\u1d5f":"\u03b4","\u1d60":"\u03d5","\u1d61":"\u03c7","\u1dbf":"\u03b8"}),Vn={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030c":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030a":{text:"\\r",math:"\\mathring"},"\u030b":{text:"\\H"},"\u0327":{text:"\\c"}},Pn={"\xe1":"a\u0301","\xe0":"a\u0300","\xe4":"a\u0308","\u01df":"a\u0308\u0304","\xe3":"a\u0303","\u0101":"a\u0304","\u0103":"a\u0306","\u1eaf":"a\u0306\u0301","\u1eb1":"a\u0306\u0300","\u1eb5":"a\u0306\u0303","\u01ce":"a\u030c","\xe2":"a\u0302","\u1ea5":"a\u0302\u0301","\u1ea7":"a\u0302\u0300","\u1eab":"a\u0302\u0303","\u0227":"a\u0307","\u01e1":"a\u0307\u0304","\xe5":"a\u030a","\u01fb":"a\u030a\u0301","\u1e03":"b\u0307","\u0107":"c\u0301","\u1e09":"c\u0327\u0301","\u010d":"c\u030c","\u0109":"c\u0302","\u010b":"c\u0307","\xe7":"c\u0327","\u010f":"d\u030c","\u1e0b":"d\u0307","\u1e11":"d\u0327","\xe9":"e\u0301","\xe8":"e\u0300","\xeb":"e\u0308","\u1ebd":"e\u0303","\u0113":"e\u0304","\u1e17":"e\u0304\u0301","\u1e15":"e\u0304\u0300","\u0115":"e\u0306","\u1e1d":"e\u0327\u0306","\u011b":"e\u030c","\xea":"e\u0302","\u1ebf":"e\u0302\u0301","\u1ec1":"e\u0302\u0300","\u1ec5":"e\u0302\u0303","\u0117":"e\u0307","\u0229":"e\u0327","\u1e1f":"f\u0307","\u01f5":"g\u0301","\u1e21":"g\u0304","\u011f":"g\u0306","\u01e7":"g\u030c","\u011d":"g\u0302","\u0121":"g\u0307","\u0123":"g\u0327","\u1e27":"h\u0308","\u021f":"h\u030c","\u0125":"h\u0302","\u1e23":"h\u0307","\u1e29":"h\u0327","\xed":"i\u0301","\xec":"i\u0300","\xef":"i\u0308","\u1e2f":"i\u0308\u0301","\u0129":"i\u0303","\u012b":"i\u0304","\u012d":"i\u0306","\u01d0":"i\u030c","\xee":"i\u0302","\u01f0":"j\u030c","\u0135":"j\u0302","\u1e31":"k\u0301","\u01e9":"k\u030c","\u0137":"k\u0327","\u013a":"l\u0301","\u013e":"l\u030c","\u013c":"l\u0327","\u1e3f":"m\u0301","\u1e41":"m\u0307","\u0144":"n\u0301","\u01f9":"n\u0300","\xf1":"n\u0303","\u0148":"n\u030c","\u1e45":"n\u0307","\u0146":"n\u0327","\xf3":"o\u0301","\xf2":"o\u0300","\xf6":"o\u0308","\u022b":"o\u0308\u0304","\xf5":"o\u0303","\u1e4d":"o\u0303\u0301","\u1e4f":"o\u0303\u0308","\u022d":"o\u0303\u0304","\u014d":"o\u0304","\u1e53":"o\u0304\u0301","\u1e51":"o\u0304\u0300","\u014f":"o\u0306","\u01d2":"o\u030c","\xf4":"o\u0302","\u1ed1":"o\u0302\u0301","\u1ed3":"o\u0302\u0300","\u1ed7":"o\u0302\u0303","\u022f":"o\u0307","\u0231":"o\u0307\u0304","\u0151":"o\u030b","\u1e55":"p\u0301","\u1e57":"p\u0307","\u0155":"r\u0301","\u0159":"r\u030c","\u1e59":"r\u0307","\u0157":"r\u0327","\u015b":"s\u0301","\u1e65":"s\u0301\u0307","\u0161":"s\u030c","\u1e67":"s\u030c\u0307","\u015d":"s\u0302","\u1e61":"s\u0307","\u015f":"s\u0327","\u1e97":"t\u0308","\u0165":"t\u030c","\u1e6b":"t\u0307","\u0163":"t\u0327","\xfa":"u\u0301","\xf9":"u\u0300","\xfc":"u\u0308","\u01d8":"u\u0308\u0301","\u01dc":"u\u0308\u0300","\u01d6":"u\u0308\u0304","\u01da":"u\u0308\u030c","\u0169":"u\u0303","\u1e79":"u\u0303\u0301","\u016b":"u\u0304","\u1e7b":"u\u0304\u0308","\u016d":"u\u0306","\u01d4":"u\u030c","\xfb":"u\u0302","\u016f":"u\u030a","\u0171":"u\u030b","\u1e7d":"v\u0303","\u1e83":"w\u0301","\u1e81":"w\u0300","\u1e85":"w\u0308","\u0175":"w\u0302","\u1e87":"w\u0307","\u1e98":"w\u030a","\u1e8d":"x\u0308","\u1e8b":"x\u0307","\xfd":"y\u0301","\u1ef3":"y\u0300","\xff":"y\u0308","\u1ef9":"y\u0303","\u0233":"y\u0304","\u0177":"y\u0302","\u1e8f":"y\u0307","\u1e99":"y\u030a","\u017a":"z\u0301","\u017e":"z\u030c","\u1e91":"z\u0302","\u017c":"z\u0307","\xc1":"A\u0301","\xc0":"A\u0300","\xc4":"A\u0308","\u01de":"A\u0308\u0304","\xc3":"A\u0303","\u0100":"A\u0304","\u0102":"A\u0306","\u1eae":"A\u0306\u0301","\u1eb0":"A\u0306\u0300","\u1eb4":"A\u0306\u0303","\u01cd":"A\u030c","\xc2":"A\u0302","\u1ea4":"A\u0302\u0301","\u1ea6":"A\u0302\u0300","\u1eaa":"A\u0302\u0303","\u0226":"A\u0307","\u01e0":"A\u0307\u0304","\xc5":"A\u030a","\u01fa":"A\u030a\u0301","\u1e02":"B\u0307","\u0106":"C\u0301","\u1e08":"C\u0327\u0301","\u010c":"C\u030c","\u0108":"C\u0302","\u010a":"C\u0307","\xc7":"C\u0327","\u010e":"D\u030c","\u1e0a":"D\u0307","\u1e10":"D\u0327","\xc9":"E\u0301","\xc8":"E\u0300","\xcb":"E\u0308","\u1ebc":"E\u0303","\u0112":"E\u0304","\u1e16":"E\u0304\u0301","\u1e14":"E\u0304\u0300","\u0114":"E\u0306","\u1e1c":"E\u0327\u0306","\u011a":"E\u030c","\xca":"E\u0302","\u1ebe":"E\u0302\u0301","\u1ec0":"E\u0302\u0300","\u1ec4":"E\u0302\u0303","\u0116":"E\u0307","\u0228":"E\u0327","\u1e1e":"F\u0307","\u01f4":"G\u0301","\u1e20":"G\u0304","\u011e":"G\u0306","\u01e6":"G\u030c","\u011c":"G\u0302","\u0120":"G\u0307","\u0122":"G\u0327","\u1e26":"H\u0308","\u021e":"H\u030c","\u0124":"H\u0302","\u1e22":"H\u0307","\u1e28":"H\u0327","\xcd":"I\u0301","\xcc":"I\u0300","\xcf":"I\u0308","\u1e2e":"I\u0308\u0301","\u0128":"I\u0303","\u012a":"I\u0304","\u012c":"I\u0306","\u01cf":"I\u030c","\xce":"I\u0302","\u0130":"I\u0307","\u0134":"J\u0302","\u1e30":"K\u0301","\u01e8":"K\u030c","\u0136":"K\u0327","\u0139":"L\u0301","\u013d":"L\u030c","\u013b":"L\u0327","\u1e3e":"M\u0301","\u1e40":"M\u0307","\u0143":"N\u0301","\u01f8":"N\u0300","\xd1":"N\u0303","\u0147":"N\u030c","\u1e44":"N\u0307","\u0145":"N\u0327","\xd3":"O\u0301","\xd2":"O\u0300","\xd6":"O\u0308","\u022a":"O\u0308\u0304","\xd5":"O\u0303","\u1e4c":"O\u0303\u0301","\u1e4e":"O\u0303\u0308","\u022c":"O\u0303\u0304","\u014c":"O\u0304","\u1e52":"O\u0304\u0301","\u1e50":"O\u0304\u0300","\u014e":"O\u0306","\u01d1":"O\u030c","\xd4":"O\u0302","\u1ed0":"O\u0302\u0301","\u1ed2":"O\u0302\u0300","\u1ed6":"O\u0302\u0303","\u022e":"O\u0307","\u0230":"O\u0307\u0304","\u0150":"O\u030b","\u1e54":"P\u0301","\u1e56":"P\u0307","\u0154":"R\u0301","\u0158":"R\u030c","\u1e58":"R\u0307","\u0156":"R\u0327","\u015a":"S\u0301","\u1e64":"S\u0301\u0307","\u0160":"S\u030c","\u1e66":"S\u030c\u0307","\u015c":"S\u0302","\u1e60":"S\u0307","\u015e":"S\u0327","\u0164":"T\u030c","\u1e6a":"T\u0307","\u0162":"T\u0327","\xda":"U\u0301","\xd9":"U\u0300","\xdc":"U\u0308","\u01d7":"U\u0308\u0301","\u01db":"U\u0308\u0300","\u01d5":"U\u0308\u0304","\u01d9":"U\u0308\u030c","\u0168":"U\u0303","\u1e78":"U\u0303\u0301","\u016a":"U\u0304","\u1e7a":"U\u0304\u0308","\u016c":"U\u0306","\u01d3":"U\u030c","\xdb":"U\u0302","\u016e":"U\u030a","\u0170":"U\u030b","\u1e7c":"V\u0303","\u1e82":"W\u0301","\u1e80":"W\u0300","\u1e84":"W\u0308","\u0174":"W\u0302","\u1e86":"W\u0307","\u1e8c":"X\u0308","\u1e8a":"X\u0307","\xdd":"Y\u0301","\u1ef2":"Y\u0300","\u0178":"Y\u0308","\u1ef8":"Y\u0303","\u0232":"Y\u0304","\u0176":"Y\u0302","\u1e8e":"Y\u0307","\u0179":"Z\u0301","\u017d":"Z\u030c","\u1e90":"Z\u0302","\u017b":"Z\u0307","\u03ac":"\u03b1\u0301","\u1f70":"\u03b1\u0300","\u1fb1":"\u03b1\u0304","\u1fb0":"\u03b1\u0306","\u03ad":"\u03b5\u0301","\u1f72":"\u03b5\u0300","\u03ae":"\u03b7\u0301","\u1f74":"\u03b7\u0300","\u03af":"\u03b9\u0301","\u1f76":"\u03b9\u0300","\u03ca":"\u03b9\u0308","\u0390":"\u03b9\u0308\u0301","\u1fd2":"\u03b9\u0308\u0300","\u1fd1":"\u03b9\u0304","\u1fd0":"\u03b9\u0306","\u03cc":"\u03bf\u0301","\u1f78":"\u03bf\u0300","\u03cd":"\u03c5\u0301","\u1f7a":"\u03c5\u0300","\u03cb":"\u03c5\u0308","\u03b0":"\u03c5\u0308\u0301","\u1fe2":"\u03c5\u0308\u0300","\u1fe1":"\u03c5\u0304","\u1fe0":"\u03c5\u0306","\u03ce":"\u03c9\u0301","\u1f7c":"\u03c9\u0300","\u038e":"\u03a5\u0301","\u1fea":"\u03a5\u0300","\u03ab":"\u03a5\u0308","\u1fe9":"\u03a5\u0304","\u1fe8":"\u03a5\u0306","\u038f":"\u03a9\u0301","\u1ffa":"\u03a9\u0300"};class Fn{constructor(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new En(e,t,this.mode),this.settings=t,this.leftrightDepth=0}expect(e,t){if(void 0===t&&(t=!0),this.fetch().text!==e)throw new n("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()}consume(){this.nextToken=null}fetch(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{const e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){const t=this.nextToken;this.consume(),this.gullet.pushToken(new Ir("}")),this.gullet.pushTokens(e);const r=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,r}parseExpression(e,t){const r=[];for(;;){"math"===this.mode&&this.consumeSpaces();const n=this.fetch();if(-1!==Fn.endOfExpression.indexOf(n.text))break;if(t&&n.text===t)break;if(e&&wn[n.text]&&wn[n.text].infix)break;const o=this.parseAtom(t);if(!o)break;"internal"!==o.type&&r.push(o)}return"text"===this.mode&&this.formLigatures(r),this.handleInfixNodes(r)}handleInfixNodes(e){let t,r=-1;for(let o=0;o=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);const r=se[this.mode][t].group,n=qr.range(e);let s;if(re.hasOwnProperty(r)){const e=r;s={type:"atom",mode:this.mode,family:e,loc:n,text:t}}else s={type:r,mode:this.mode,loc:n,text:t};o=s}else{if(!(t.charCodeAt(0)>=128))return null;this.settings.strict&&(S(t.charCodeAt(0))?"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'" ('+t.charCodeAt(0)+")",e)),o={type:"textord",mode:"text",loc:qr.range(e),text:t}}if(this.consume(),r)for(let t=0;t15?"\u2026"+e.slice(n-15,n):e.slice(0,n),a=o+15":">","<":"<",'"':""","'":"'"},i=/[&><"']/g;const a=function(e){return"ordgroup"===e.type||"color"===e.type?1===e.body.length?a(e.body[0]):e:"font"===e.type?a(e.body):e};var l={deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(i,(e=>s[e]))},hyphenate:function(e){return e.replace(o,"-$1").toLowerCase()},getBaseElem:a,isCharacterBox:function(e){const t=a(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){const t=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return t?":"!==t[2]?null:/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?t[1].toLowerCase():null:"_relative"}};const h={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:e=>"#"+e},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:e=>Math.max(0,e),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:e=>Math.max(0,e),cli:"-e, --max-expand ",cliProcessor:e=>"Infinity"===e?1/0:parseInt(e)},globalGroup:{type:"boolean",cli:!1}};function c(e){if(e.default)return e.default;const t=e.type,r=Array.isArray(t)?t[0]:t;if("string"!=typeof r)return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}class m{constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{};for(const t in h)if(h.hasOwnProperty(t)){const r=h[t];this[t]=void 0!==e[t]?r.processor?r.processor(e[t]):e[t]:c(r)}}reportNonstrict(e,t,r){let o=this.strict;if("function"==typeof o&&(o=o(e,t,r)),o&&"ignore"!==o){if(!0===o||"error"===o)throw new n("LaTeX-incompatible input and strict mode is set to 'error': "+t+" ["+e+"]",r);"warn"===o?"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"):"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+o+"': "+t+" ["+e+"]")}}useStrictBehavior(e,t,r){let n=this.strict;if("function"==typeof n)try{n=n(e,t,r)}catch(e){n="error"}return!(!n||"ignore"===n)&&(!0===n||"error"===n||("warn"===n?("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"),!1):("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+n+"': "+t+" ["+e+"]"),!1)))}isTrusted(e){if(e.url&&!e.protocol){const t=l.protocolFromUrl(e.url);if(null==t)return!1;e.protocol=t}const t="function"==typeof this.trust?this.trust(e):this.trust;return Boolean(t)}}class p{constructor(e,t,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=r}sup(){return u[d[this.id]]}sub(){return u[g[this.id]]}fracNum(){return u[f[this.id]]}fracDen(){return u[b[this.id]]}cramp(){return u[y[this.id]]}text(){return u[x[this.id]]}isTight(){return this.size>=2}}const u=[new p(0,0,!1),new p(1,0,!0),new p(2,1,!1),new p(3,1,!0),new p(4,2,!1),new p(5,2,!0),new p(6,3,!1),new p(7,3,!0)],d=[4,5,4,5,6,7,6,7],g=[5,5,5,5,7,7,7,7],f=[2,3,4,5,6,7,6,7],b=[3,3,5,5,7,7,7,7],y=[1,1,3,3,5,5,7,7],x=[0,1,2,3,2,3,2,3];var w={DISPLAY:u[0],TEXT:u[2],SCRIPT:u[4],SCRIPTSCRIPT:u[6]};const v=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];const k=[];function S(e){for(let t=0;t=k[t]&&e<=k[t+1])return!0;return!1}v.forEach((e=>e.blocks.forEach((e=>k.push(...e)))));const M=80,z={doubleleftarrow:"M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",doublerightarrow:"M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",leftarrow:"M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",leftbrace:"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",leftbraceunder:"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",leftgroup:"M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",leftgroupunder:"M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",leftharpoon:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",leftharpoonplus:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",leftharpoondown:"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",leftharpoondownplus:"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",lefthook:"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",leftlinesegment:"M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",leftmapsto:"M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",leftToFrom:"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",longequal:"M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",midbrace:"M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",midbraceunder:"M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",oiintSize1:"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",oiintSize2:"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",oiiintSize1:"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",oiiintSize2:"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",rightarrow:"M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",rightbrace:"M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",rightbraceunder:"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",rightgroup:"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",rightgroupunder:"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",rightharpoon:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",rightharpoonplus:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",rightharpoondown:"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",rightharpoondownplus:"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",righthook:"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",rightlinesegment:"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",rightToFrom:"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",twoheadleftarrow:"M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",twoheadrightarrow:"M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",tilde1:"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",tilde2:"M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",tilde3:"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",tilde4:"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",vec:"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",widehat1:"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",widehat2:"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat3:"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat4:"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widecheck1:"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",widecheck2:"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck3:"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck4:"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",baraboveleftarrow:"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",rightarrowabovebar:"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",baraboveshortleftharpoon:"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",rightharpoonaboveshortbar:"M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",shortbaraboveleftharpoon:"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",shortrightharpoonabovebar:"M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"};var A={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}};const T={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},B={"\xc5":"A","\xd0":"D","\xde":"o","\xe5":"a","\xf0":"d","\xfe":"o","\u0410":"A","\u0411":"B","\u0412":"B","\u0413":"F","\u0414":"A","\u0415":"E","\u0416":"K","\u0417":"3","\u0418":"N","\u0419":"N","\u041a":"K","\u041b":"N","\u041c":"M","\u041d":"H","\u041e":"O","\u041f":"N","\u0420":"P","\u0421":"C","\u0422":"T","\u0423":"y","\u0424":"O","\u0425":"X","\u0426":"U","\u0427":"h","\u0428":"W","\u0429":"W","\u042a":"B","\u042b":"X","\u042c":"B","\u042d":"3","\u042e":"X","\u042f":"R","\u0430":"a","\u0431":"b","\u0432":"a","\u0433":"r","\u0434":"y","\u0435":"e","\u0436":"m","\u0437":"e","\u0438":"n","\u0439":"n","\u043a":"n","\u043b":"n","\u043c":"m","\u043d":"n","\u043e":"o","\u043f":"n","\u0440":"p","\u0441":"c","\u0442":"o","\u0443":"y","\u0444":"b","\u0445":"x","\u0446":"n","\u0447":"n","\u0448":"w","\u0449":"w","\u044a":"a","\u044b":"m","\u044c":"a","\u044d":"e","\u044e":"m","\u044f":"r"};function C(e,t,r){if(!A[t])throw new Error("Font metrics not found for font: "+t+".");let n=e.charCodeAt(0),o=A[t][n];if(!o&&e[0]in B&&(n=B[e[0]].charCodeAt(0),o=A[t][n]),o||"text"!==r||S(n)&&(o=A[t][77]),o)return{depth:o[0],height:o[1],italic:o[2],skew:o[3],width:o[4]}}const N={};const q=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],I=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],R=function(e,t){return t.size<2?e:q[e-1][t.size-1]};class H{constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||H.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=I[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){const t={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(const r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);return new H(t)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:R(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:I[e-1]})}havingBaseStyle(e){e=e||this.style.text();const t=R(H.BASESIZE,e);return this.size===t&&this.textSize===H.BASESIZE&&this.style===e?this:this.extend({style:e,size:t})}havingBaseSizing(){let e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==H.BASESIZE?["sizing","reset-size"+this.size,"size"+H.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=function(e){let t;if(t=e>=5?0:e>=3?1:2,!N[t]){const e=N[t]={cssEmPerMu:T.quad[t]/18};for(const r in T)T.hasOwnProperty(r)&&(e[r]=T[r][t])}return N[t]}(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}}H.BASESIZE=6;var O=H;const E={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},L={ex:!0,em:!0,mu:!0},D=function(e){return"string"!=typeof e&&(e=e.unit),e in E||e in L||"ex"===e},V=function(e,t){let r;if(e.unit in E)r=E[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if("mu"===e.unit)r=t.fontMetrics().cssEmPerMu;else{let o;if(o=t.style.isTight()?t.havingStyle(t.style.text()):t,"ex"===e.unit)r=o.fontMetrics().xHeight;else{if("em"!==e.unit)throw new n("Invalid unit: '"+e.unit+"'");r=o.fontMetrics().quad}o!==t&&(r*=o.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*r,t.maxSize)},P=function(e){return+e.toFixed(4)+"em"},F=function(e){return e.filter((e=>e)).join(" ")},G=function(e,t,r){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=r||{},t){t.style.isTight()&&this.classes.push("mtight");const e=t.getColor();e&&(this.style.color=e)}},U=function(e){const t=document.createElement(e);t.className=F(this.classes);for(const e in this.style)this.style.hasOwnProperty(e)&&(t.style[e]=this.style[e]);for(const e in this.attributes)this.attributes.hasOwnProperty(e)&&t.setAttribute(e,this.attributes[e]);for(let e=0;e/=\x00-\x1f]/,X=function(e){let t="<"+e;this.classes.length&&(t+=' class="'+l.escape(F(this.classes))+'"');let r="";for(const e in this.style)this.style.hasOwnProperty(e)&&(r+=l.hyphenate(e)+":"+this.style[e]+";");r&&(t+=' style="'+l.escape(r)+'"');for(const e in this.attributes)if(this.attributes.hasOwnProperty(e)){if(Y.test(e))throw new n("Invalid attribute name '"+e+"'");t+=" "+e+'="'+l.escape(this.attributes[e])+'"'}t+=">";for(let e=0;e",t};class W{constructor(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,G.call(this,e,r,n),this.children=t||[]}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return this.classes.includes(e)}toNode(){return U.call(this,"span")}toMarkup(){return X.call(this,"span")}}class _{constructor(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,G.call(this,t,n),this.children=r||[],this.setAttribute("href",e)}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return this.classes.includes(e)}toNode(){return U.call(this,"a")}toMarkup(){return X.call(this,"a")}}class j{constructor(e,t,r){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=t,this.src=e,this.classes=["mord"],this.style=r}hasClass(e){return this.classes.includes(e)}toNode(){const e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(const t in this.style)this.style.hasOwnProperty(t)&&(e.style[t]=this.style[t]);return e}toMarkup(){let e=''+l.escape(this.alt)+'=n[0]&&e<=n[1])return r.name}}return null}(this.text.charCodeAt(0));l&&this.classes.push(l+"_fallback"),/[\xee\xef\xed\xec]/.test(this.text)&&(this.text=$[this.text])}hasClass(e){return this.classes.includes(e)}toNode(){const e=document.createTextNode(this.text);let t=null;this.italic>0&&(t=document.createElement("span"),t.style.marginRight=P(this.italic)),this.classes.length>0&&(t=t||document.createElement("span"),t.className=F(this.classes));for(const e in this.style)this.style.hasOwnProperty(e)&&(t=t||document.createElement("span"),t.style[e]=this.style[e]);return t?(t.appendChild(e),t):e}toMarkup(){let e=!1,t="0&&(r+="margin-right:"+this.italic+"em;");for(const e in this.style)this.style.hasOwnProperty(e)&&(r+=l.hyphenate(e)+":"+this.style[e]+";");r&&(e=!0,t+=' style="'+l.escape(r)+'"');const n=l.escape(this.text);return e?(t+=">",t+=n,t+="",t):n}}class K{constructor(e,t){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=t||{}}toNode(){const e=document.createElementNS("http://www.w3.org/2000/svg","svg");for(const t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);for(let t=0;t':''}}class Q{constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){const e=document.createElementNS("http://www.w3.org/2000/svg","line");for(const t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);return e}toMarkup(){let e="","\\gt",!0),se(ie,le,ye,"\u2208","\\in",!0),se(ie,le,ye,"\ue020","\\@not"),se(ie,le,ye,"\u2282","\\subset",!0),se(ie,le,ye,"\u2283","\\supset",!0),se(ie,le,ye,"\u2286","\\subseteq",!0),se(ie,le,ye,"\u2287","\\supseteq",!0),se(ie,he,ye,"\u2288","\\nsubseteq",!0),se(ie,he,ye,"\u2289","\\nsupseteq",!0),se(ie,le,ye,"\u22a8","\\models"),se(ie,le,ye,"\u2190","\\leftarrow",!0),se(ie,le,ye,"\u2264","\\le"),se(ie,le,ye,"\u2264","\\leq",!0),se(ie,le,ye,"<","\\lt",!0),se(ie,le,ye,"\u2192","\\rightarrow",!0),se(ie,le,ye,"\u2192","\\to"),se(ie,he,ye,"\u2271","\\ngeq",!0),se(ie,he,ye,"\u2270","\\nleq",!0),se(ie,le,xe,"\xa0","\\ "),se(ie,le,xe,"\xa0","\\space"),se(ie,le,xe,"\xa0","\\nobreakspace"),se(ae,le,xe,"\xa0","\\ "),se(ae,le,xe,"\xa0"," "),se(ae,le,xe,"\xa0","\\space"),se(ae,le,xe,"\xa0","\\nobreakspace"),se(ie,le,xe,null,"\\nobreak"),se(ie,le,xe,null,"\\allowbreak"),se(ie,le,be,",",","),se(ie,le,be,";",";"),se(ie,he,me,"\u22bc","\\barwedge",!0),se(ie,he,me,"\u22bb","\\veebar",!0),se(ie,le,me,"\u2299","\\odot",!0),se(ie,le,me,"\u2295","\\oplus",!0),se(ie,le,me,"\u2297","\\otimes",!0),se(ie,le,we,"\u2202","\\partial",!0),se(ie,le,me,"\u2298","\\oslash",!0),se(ie,he,me,"\u229a","\\circledcirc",!0),se(ie,he,me,"\u22a1","\\boxdot",!0),se(ie,le,me,"\u25b3","\\bigtriangleup"),se(ie,le,me,"\u25bd","\\bigtriangledown"),se(ie,le,me,"\u2020","\\dagger"),se(ie,le,me,"\u22c4","\\diamond"),se(ie,le,me,"\u22c6","\\star"),se(ie,le,me,"\u25c3","\\triangleleft"),se(ie,le,me,"\u25b9","\\triangleright"),se(ie,le,fe,"{","\\{"),se(ae,le,we,"{","\\{"),se(ae,le,we,"{","\\textbraceleft"),se(ie,le,pe,"}","\\}"),se(ae,le,we,"}","\\}"),se(ae,le,we,"}","\\textbraceright"),se(ie,le,fe,"{","\\lbrace"),se(ie,le,pe,"}","\\rbrace"),se(ie,le,fe,"[","\\lbrack",!0),se(ae,le,we,"[","\\lbrack",!0),se(ie,le,pe,"]","\\rbrack",!0),se(ae,le,we,"]","\\rbrack",!0),se(ie,le,fe,"(","\\lparen",!0),se(ie,le,pe,")","\\rparen",!0),se(ae,le,we,"<","\\textless",!0),se(ae,le,we,">","\\textgreater",!0),se(ie,le,fe,"\u230a","\\lfloor",!0),se(ie,le,pe,"\u230b","\\rfloor",!0),se(ie,le,fe,"\u2308","\\lceil",!0),se(ie,le,pe,"\u2309","\\rceil",!0),se(ie,le,we,"\\","\\backslash"),se(ie,le,we,"\u2223","|"),se(ie,le,we,"\u2223","\\vert"),se(ae,le,we,"|","\\textbar",!0),se(ie,le,we,"\u2225","\\|"),se(ie,le,we,"\u2225","\\Vert"),se(ae,le,we,"\u2225","\\textbardbl"),se(ae,le,we,"~","\\textasciitilde"),se(ae,le,we,"\\","\\textbackslash"),se(ae,le,we,"^","\\textasciicircum"),se(ie,le,ye,"\u2191","\\uparrow",!0),se(ie,le,ye,"\u21d1","\\Uparrow",!0),se(ie,le,ye,"\u2193","\\downarrow",!0),se(ie,le,ye,"\u21d3","\\Downarrow",!0),se(ie,le,ye,"\u2195","\\updownarrow",!0),se(ie,le,ye,"\u21d5","\\Updownarrow",!0),se(ie,le,ge,"\u2210","\\coprod"),se(ie,le,ge,"\u22c1","\\bigvee"),se(ie,le,ge,"\u22c0","\\bigwedge"),se(ie,le,ge,"\u2a04","\\biguplus"),se(ie,le,ge,"\u22c2","\\bigcap"),se(ie,le,ge,"\u22c3","\\bigcup"),se(ie,le,ge,"\u222b","\\int"),se(ie,le,ge,"\u222b","\\intop"),se(ie,le,ge,"\u222c","\\iint"),se(ie,le,ge,"\u222d","\\iiint"),se(ie,le,ge,"\u220f","\\prod"),se(ie,le,ge,"\u2211","\\sum"),se(ie,le,ge,"\u2a02","\\bigotimes"),se(ie,le,ge,"\u2a01","\\bigoplus"),se(ie,le,ge,"\u2a00","\\bigodot"),se(ie,le,ge,"\u222e","\\oint"),se(ie,le,ge,"\u222f","\\oiint"),se(ie,le,ge,"\u2230","\\oiiint"),se(ie,le,ge,"\u2a06","\\bigsqcup"),se(ie,le,ge,"\u222b","\\smallint"),se(ae,le,ue,"\u2026","\\textellipsis"),se(ie,le,ue,"\u2026","\\mathellipsis"),se(ae,le,ue,"\u2026","\\ldots",!0),se(ie,le,ue,"\u2026","\\ldots",!0),se(ie,le,ue,"\u22ef","\\@cdots",!0),se(ie,le,ue,"\u22f1","\\ddots",!0),se(ie,le,we,"\u22ee","\\varvdots"),se(ae,le,we,"\u22ee","\\varvdots"),se(ie,le,ce,"\u02ca","\\acute"),se(ie,le,ce,"\u02cb","\\grave"),se(ie,le,ce,"\xa8","\\ddot"),se(ie,le,ce,"~","\\tilde"),se(ie,le,ce,"\u02c9","\\bar"),se(ie,le,ce,"\u02d8","\\breve"),se(ie,le,ce,"\u02c7","\\check"),se(ie,le,ce,"^","\\hat"),se(ie,le,ce,"\u20d7","\\vec"),se(ie,le,ce,"\u02d9","\\dot"),se(ie,le,ce,"\u02da","\\mathring"),se(ie,le,de,"\ue131","\\@imath"),se(ie,le,de,"\ue237","\\@jmath"),se(ie,le,we,"\u0131","\u0131"),se(ie,le,we,"\u0237","\u0237"),se(ae,le,we,"\u0131","\\i",!0),se(ae,le,we,"\u0237","\\j",!0),se(ae,le,we,"\xdf","\\ss",!0),se(ae,le,we,"\xe6","\\ae",!0),se(ae,le,we,"\u0153","\\oe",!0),se(ae,le,we,"\xf8","\\o",!0),se(ae,le,we,"\xc6","\\AE",!0),se(ae,le,we,"\u0152","\\OE",!0),se(ae,le,we,"\xd8","\\O",!0),se(ae,le,ce,"\u02ca","\\'"),se(ae,le,ce,"\u02cb","\\`"),se(ae,le,ce,"\u02c6","\\^"),se(ae,le,ce,"\u02dc","\\~"),se(ae,le,ce,"\u02c9","\\="),se(ae,le,ce,"\u02d8","\\u"),se(ae,le,ce,"\u02d9","\\."),se(ae,le,ce,"\xb8","\\c"),se(ae,le,ce,"\u02da","\\r"),se(ae,le,ce,"\u02c7","\\v"),se(ae,le,ce,"\xa8",'\\"'),se(ae,le,ce,"\u02dd","\\H"),se(ae,le,ce,"\u25ef","\\textcircled");const ve={"--":!0,"---":!0,"``":!0,"''":!0};se(ae,le,we,"\u2013","--",!0),se(ae,le,we,"\u2013","\\textendash"),se(ae,le,we,"\u2014","---",!0),se(ae,le,we,"\u2014","\\textemdash"),se(ae,le,we,"\u2018","`",!0),se(ae,le,we,"\u2018","\\textquoteleft"),se(ae,le,we,"\u2019","'",!0),se(ae,le,we,"\u2019","\\textquoteright"),se(ae,le,we,"\u201c","``",!0),se(ae,le,we,"\u201c","\\textquotedblleft"),se(ae,le,we,"\u201d","''",!0),se(ae,le,we,"\u201d","\\textquotedblright"),se(ie,le,we,"\xb0","\\degree",!0),se(ae,le,we,"\xb0","\\degree"),se(ae,le,we,"\xb0","\\textdegree",!0),se(ie,le,we,"\xa3","\\pounds"),se(ie,le,we,"\xa3","\\mathsterling",!0),se(ae,le,we,"\xa3","\\pounds"),se(ae,le,we,"\xa3","\\textsterling",!0),se(ie,he,we,"\u2720","\\maltese"),se(ae,he,we,"\u2720","\\maltese");const ke='0123456789/@."';for(let e=0;e<14;e++){const t=ke.charAt(e);se(ie,le,we,t,t)}const Se='0123456789!@*()-=+";:?/.,';for(let e=0;e<25;e++){const t=Se.charAt(e);se(ae,le,we,t,t)}const Me="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";for(let e=0;e<52;e++){const t=Me.charAt(e);se(ie,le,de,t,t),se(ae,le,we,t,t)}se(ie,he,we,"C","\u2102"),se(ae,he,we,"C","\u2102"),se(ie,he,we,"H","\u210d"),se(ae,he,we,"H","\u210d"),se(ie,he,we,"N","\u2115"),se(ae,he,we,"N","\u2115"),se(ie,he,we,"P","\u2119"),se(ae,he,we,"P","\u2119"),se(ie,he,we,"Q","\u211a"),se(ae,he,we,"Q","\u211a"),se(ie,he,we,"R","\u211d"),se(ae,he,we,"R","\u211d"),se(ie,he,we,"Z","\u2124"),se(ae,he,we,"Z","\u2124"),se(ie,le,de,"h","\u210e"),se(ae,le,de,"h","\u210e");let ze="";for(let e=0;e<52;e++){const t=Me.charAt(e);ze=String.fromCharCode(55349,56320+e),se(ie,le,de,t,ze),se(ae,le,we,t,ze),ze=String.fromCharCode(55349,56372+e),se(ie,le,de,t,ze),se(ae,le,we,t,ze),ze=String.fromCharCode(55349,56424+e),se(ie,le,de,t,ze),se(ae,le,we,t,ze),ze=String.fromCharCode(55349,56580+e),se(ie,le,de,t,ze),se(ae,le,we,t,ze),ze=String.fromCharCode(55349,56684+e),se(ie,le,de,t,ze),se(ae,le,we,t,ze),ze=String.fromCharCode(55349,56736+e),se(ie,le,de,t,ze),se(ae,le,we,t,ze),ze=String.fromCharCode(55349,56788+e),se(ie,le,de,t,ze),se(ae,le,we,t,ze),ze=String.fromCharCode(55349,56840+e),se(ie,le,de,t,ze),se(ae,le,we,t,ze),ze=String.fromCharCode(55349,56944+e),se(ie,le,de,t,ze),se(ae,le,we,t,ze),e<26&&(ze=String.fromCharCode(55349,56632+e),se(ie,le,de,t,ze),se(ae,le,we,t,ze),ze=String.fromCharCode(55349,56476+e),se(ie,le,de,t,ze),se(ae,le,we,t,ze))}ze=String.fromCharCode(55349,56668),se(ie,le,de,"k",ze),se(ae,le,we,"k",ze);for(let e=0;e<10;e++){const t=e.toString();ze=String.fromCharCode(55349,57294+e),se(ie,le,de,t,ze),se(ae,le,we,t,ze),ze=String.fromCharCode(55349,57314+e),se(ie,le,de,t,ze),se(ae,le,we,t,ze),ze=String.fromCharCode(55349,57324+e),se(ie,le,de,t,ze),se(ae,le,we,t,ze),ze=String.fromCharCode(55349,57334+e),se(ie,le,de,t,ze),se(ae,le,we,t,ze)}const Ae="\xd0\xde\xfe";for(let e=0;e<3;e++){const t=Ae.charAt(e);se(ie,le,de,t,t),se(ae,le,we,t,t)}const Te=[["mathbf","textbf","Main-Bold"],["mathbf","textbf","Main-Bold"],["mathnormal","textit","Math-Italic"],["mathnormal","textit","Math-Italic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["mathscr","textscr","Script-Regular"],["","",""],["","",""],["","",""],["mathfrak","textfrak","Fraktur-Regular"],["mathfrak","textfrak","Fraktur-Regular"],["mathbb","textbb","AMS-Regular"],["mathbb","textbb","AMS-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathitsf","textitsf","SansSerif-Italic"],["mathitsf","textitsf","SansSerif-Italic"],["","",""],["","",""],["mathtt","texttt","Typewriter-Regular"],["mathtt","texttt","Typewriter-Regular"]],Be=[["mathbf","textbf","Main-Bold"],["","",""],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathtt","texttt","Typewriter-Regular"]];class Ce{constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return this.classes.includes(e)}toNode(){const e=document.createDocumentFragment();for(let t=0;te.toText())).join("")}}const Ne=function(e,t,r){return oe[r][e]&&oe[r][e].replace&&(e=oe[r][e].replace),{value:e,metrics:C(e,t,r)}},qe=function(e,t,r,n,o){const s=Ne(e,t,r),i=s.metrics;let a;if(e=s.value,i){let t=i.italic;("text"===r||n&&"mathit"===n.font)&&(t=0),a=new Z(e,i.height,i.depth,t,i.skew,i.width,o)}else"undefined"!=typeof console&&console.warn("No character metrics for '"+e+"' in style '"+t+"' and mode '"+r+"'"),a=new Z(e,0,0,0,0,0,o);if(n){a.maxFontSize=n.sizeMultiplier,n.style.isTight()&&a.classes.push("mtight");const e=n.getColor();e&&(a.style.color=e)}return a},Ie=(e,t)=>{if(F(e.classes)!==F(t.classes)||e.skew!==t.skew||e.maxFontSize!==t.maxFontSize)return!1;if(1===e.classes.length){const t=e.classes[0];if("mbin"===t||"mord"===t)return!1}for(const r in e.style)if(e.style.hasOwnProperty(r)&&e.style[r]!==t.style[r])return!1;for(const r in t.style)if(t.style.hasOwnProperty(r)&&e.style[r]!==t.style[r])return!1;return!0},Re=function(e){let t=0,r=0,n=0;for(let o=0;ot&&(t=s.height),s.depth>r&&(r=s.depth),s.maxFontSize>n&&(n=s.maxFontSize)}e.height=t,e.depth=r,e.maxFontSize=n},He=function(e,t,r,n){const o=new W(e,t,r,n);return Re(o),o},Oe=(e,t,r,n)=>new W(e,t,r,n),Ee=function(e){const t=new Ce(e);return Re(t),t},Le=function(e,t,r){let n,o="";switch(e){case"amsrm":o="AMS";break;case"textrm":o="Main";break;case"textsf":o="SansSerif";break;case"texttt":o="Typewriter";break;default:o=e}return n="textbf"===t&&"textit"===r?"BoldItalic":"textbf"===t?"Bold":"textit"===t?"Italic":"Regular",o+"-"+n},De={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathsfit:{variant:"sans-serif-italic",fontName:"SansSerif-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Ve={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]};var Pe={fontMap:De,makeSymbol:qe,mathsym:function(e,t,r,n){return void 0===n&&(n=[]),"boldsymbol"===r.font&&Ne(e,"Main-Bold",t).metrics?qe(e,"Main-Bold",t,r,n.concat(["mathbf"])):"\\"===e||"main"===oe[t][e].font?qe(e,"Main-Regular",t,r,n):qe(e,"AMS-Regular",t,r,n.concat(["amsrm"]))},makeSpan:He,makeSvgSpan:Oe,makeLineSpan:function(e,t,r){const n=He([e],[],t);return n.height=Math.max(r||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),n.style.borderBottomWidth=P(n.height),n.maxFontSize=1,n},makeAnchor:function(e,t,r,n){const o=new _(e,t,r,n);return Re(o),o},makeFragment:Ee,wrapFragment:function(e,t){return e instanceof Ce?He([],[e],t):e},makeVList:function(e,t){const{children:r,depth:n}=function(e){if("individualShift"===e.positionType){const t=e.children,r=[t[0]],n=-t[0].shift-t[0].elem.depth;let o=n;for(let e=1;e0)return qe(s,h,o,t,i.concat(c));if(l){let e,n;if("boldsymbol"===l){const t=function(e,t,r,n,o){return"textord"!==o&&Ne(e,"Math-BoldItalic",t).metrics?{fontName:"Math-BoldItalic",fontClass:"boldsymbol"}:{fontName:"Main-Bold",fontClass:"mathbf"}}(s,o,0,0,r);e=t.fontName,n=[t.fontClass]}else a?(e=De[l].fontName,n=[l]):(e=Le(l,t.fontWeight,t.fontShape),n=[l,t.fontWeight,t.fontShape]);if(Ne(s,e,o).metrics)return qe(s,e,o,t,i.concat(n));if(ve.hasOwnProperty(s)&&"Typewriter"===e.slice(0,10)){const r=[];for(let a=0;a{const r=He(["mspace"],[],t),n=V(e,t);return r.style.marginRight=P(n),r},staticSvg:function(e,t){const[r,n,o]=Ve[e],s=new J(r),i=new K([s],{width:P(n),height:P(o),style:"width:"+P(n),viewBox:"0 0 "+1e3*n+" "+1e3*o,preserveAspectRatio:"xMinYMin"}),a=Oe(["overlay"],[i],t);return a.height=o,a.style.height=P(o),a.style.width=P(n),a},svgData:Ve,tryCombineChars:e=>{for(let t=0;t{const r=t.classes[0],n=e.classes[0];"mbin"===r&&tt.includes(n)?t.classes[0]="mord":"mbin"===n&&et.includes(r)&&(e.classes[0]="mord")}),{node:i},a,l),st(o,((e,t)=>{const r=lt(t),n=lt(e),o=r&&n?e.hasClass("mtight")?Xe[r][n]:Ye[r][n]:null;if(o)return Pe.makeGlue(o,s)}),{node:i},a,l),o},st=function(e,t,r,n,o){n&&e.push(n);let s=0;for(;sr=>{e.splice(t+1,0,r),s++})(s)}n&&e.pop()},it=function(e){return e instanceof Ce||e instanceof _||e instanceof W&&e.hasClass("enclosing")?e:null},at=function(e,t){const r=it(e);if(r){const e=r.children;if(e.length){if("right"===t)return at(e[e.length-1],"right");if("left"===t)return at(e[0],"left")}}return e},lt=function(e,t){return e?(t&&(e=at(e,t)),nt[e.classes[0]]||null):null},ht=function(e,t){const r=["nulldelimiter"].concat(e.baseSizingClasses());return Qe(t.concat(r))},ct=function(e,t,r){if(!e)return Qe();if(_e[e.type]){let n=_e[e.type](e,t);if(r&&t.size!==r.size){n=Qe(t.sizingClasses(r),[n],t);const e=t.sizeMultiplier/r.sizeMultiplier;n.height*=e,n.depth*=e}return n}throw new n("Got group of unknown type: '"+e.type+"'")};function mt(e,t){const r=Qe(["base"],e,t),n=Qe(["strut"]);return n.style.height=P(r.height+r.depth),r.depth&&(n.style.verticalAlign=P(-r.depth)),r.children.unshift(n),r}function pt(e,t){let r=null;1===e.length&&"tag"===e[0].type&&(r=e[0].tag,e=e[0].body);const n=ot(e,t,"root");let o;2===n.length&&n[1].hasClass("tag")&&(o=n.pop());const s=[];let i,a=[];for(let e=0;e0&&(s.push(mt(a,t)),a=[]),s.push(n[e]));a.length>0&&s.push(mt(a,t)),r?(i=mt(ot(r,t,!0)),i.classes=["tag"],s.push(i)):o&&s.push(o);const l=Qe(["katex-html"],s);if(l.setAttribute("aria-hidden","true"),i){const e=i.children[0];e.style.height=P(l.height+l.depth),l.depth&&(e.style.verticalAlign=P(-l.depth))}return l}function ut(e){return new Ce(e)}class dt{constructor(e,t,r){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=t||[],this.classes=r||[]}setAttribute(e,t){this.attributes[e]=t}getAttribute(e){return this.attributes[e]}toNode(){const e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(const t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=F(this.classes));for(let t=0;t0&&(e+=' class ="'+l.escape(F(this.classes))+'"'),e+=">";for(let t=0;t",e}toText(){return this.children.map((e=>e.toText())).join("")}}class gt{constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return l.escape(this.toText())}toText(){return this.text}}var ft={MathNode:dt,TextNode:gt,SpaceNode:class{constructor(e){this.width=void 0,this.character=void 0,this.width=e,this.character=e>=.05555&&e<=.05556?"\u200a":e>=.1666&&e<=.1667?"\u2009":e>=.2222&&e<=.2223?"\u2005":e>=.2777&&e<=.2778?"\u2005\u200a":e>=-.05556&&e<=-.05555?"\u200a\u2063":e>=-.1667&&e<=-.1666?"\u2009\u2063":e>=-.2223&&e<=-.2222?"\u205f\u2063":e>=-.2778&&e<=-.2777?"\u2005\u2063":null}toNode(){if(this.character)return document.createTextNode(this.character);{const e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",P(this.width)),e}}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}},newDocumentFragment:ut};const bt=function(e,t,r){return!oe[t][e]||!oe[t][e].replace||55349===e.charCodeAt(0)||ve.hasOwnProperty(e)&&r&&(r.fontFamily&&"tt"===r.fontFamily.slice(4,6)||r.font&&"tt"===r.font.slice(4,6))||(e=oe[t][e].replace),new ft.TextNode(e)},yt=function(e){return 1===e.length?e[0]:new ft.MathNode("mrow",e)},xt=function(e,t){if("texttt"===t.fontFamily)return"monospace";if("textsf"===t.fontFamily)return"textit"===t.fontShape&&"textbf"===t.fontWeight?"sans-serif-bold-italic":"textit"===t.fontShape?"sans-serif-italic":"textbf"===t.fontWeight?"bold-sans-serif":"sans-serif";if("textit"===t.fontShape&&"textbf"===t.fontWeight)return"bold-italic";if("textit"===t.fontShape)return"italic";if("textbf"===t.fontWeight)return"bold";const r=t.font;if(!r||"mathnormal"===r)return null;const n=e.mode;if("mathit"===r)return"italic";if("boldsymbol"===r)return"textord"===e.type?"bold":"bold-italic";if("mathbf"===r)return"bold";if("mathbb"===r)return"double-struck";if("mathsfit"===r)return"sans-serif-italic";if("mathfrak"===r)return"fraktur";if("mathscr"===r||"mathcal"===r)return"script";if("mathsf"===r)return"sans-serif";if("mathtt"===r)return"monospace";let o=e.text;if(["\\imath","\\jmath"].includes(o))return null;oe[n][o]&&oe[n][o].replace&&(o=oe[n][o].replace);return C(o,Pe.fontMap[r].fontName,n)?Pe.fontMap[r].variant:null};function wt(e){if(!e)return!1;if("mi"===e.type&&1===e.children.length){const t=e.children[0];return t instanceof gt&&"."===t.text}if("mo"===e.type&&1===e.children.length&&"true"===e.getAttribute("separator")&&"0em"===e.getAttribute("lspace")&&"0em"===e.getAttribute("rspace")){const t=e.children[0];return t instanceof gt&&","===t.text}return!1}const vt=function(e,t,r){if(1===e.length){const n=St(e[0],t);return r&&n instanceof dt&&"mo"===n.type&&(n.setAttribute("lspace","0em"),n.setAttribute("rspace","0em")),[n]}const n=[];let o;for(let r=0;r=1&&("mn"===o.type||wt(o))){const e=s.children[0];e instanceof dt&&"mn"===e.type&&(e.children=[...o.children,...e.children],n.pop())}else if("mi"===o.type&&1===o.children.length){const e=o.children[0];if(e instanceof gt&&"\u0338"===e.text&&("mo"===s.type||"mi"===s.type||"mn"===s.type)){const e=s.children[0];e instanceof gt&&e.text.length>0&&(e.text=e.text.slice(0,1)+"\u0338"+e.text.slice(1),n.pop())}}}n.push(s),o=s}return n},kt=function(e,t,r){return yt(vt(e,t,r))},St=function(e,t){if(!e)return new ft.MathNode("mrow");if(je[e.type]){return je[e.type](e,t)}throw new n("Got group of unknown type: '"+e.type+"'")};function Mt(e,t,r,n,o){const s=vt(e,r);let i;i=1===s.length&&s[0]instanceof dt&&["mrow","mtable"].includes(s[0].type)?s[0]:new ft.MathNode("mrow",s);const a=new ft.MathNode("annotation",[new ft.TextNode(t)]);a.setAttribute("encoding","application/x-tex");const l=new ft.MathNode("semantics",[i,a]),h=new ft.MathNode("math",[l]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&h.setAttribute("display","block");const c=o?"katex":"katex-mathml";return Pe.makeSpan([c],[h])}const zt=function(e){return new O({style:e.displayMode?w.DISPLAY:w.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},At=function(e,t){if(t.displayMode){const r=["katex-display"];t.leqno&&r.push("leqno"),t.fleqn&&r.push("fleqn"),e=Pe.makeSpan(r,[e])}return e},Tt=function(e,t,r){const n=zt(r);let o;if("mathml"===r.output)return Mt(e,t,n,r.displayMode,!0);if("html"===r.output){const t=pt(e,n);o=Pe.makeSpan(["katex"],[t])}else{const s=Mt(e,t,n,r.displayMode,!1),i=pt(e,n);o=Pe.makeSpan(["katex"],[s,i])}return At(o,r)};const Bt={widehat:"^",widecheck:"\u02c7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23df",overbrace:"\u23de",overgroup:"\u23e0",undergroup:"\u23e1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21d2",xRightarrow:"\u21d2",overleftharpoon:"\u21bc",xleftharpoonup:"\u21bc",overrightharpoon:"\u21c0",xrightharpoonup:"\u21c0",xLeftarrow:"\u21d0",xLeftrightarrow:"\u21d4",xhookleftarrow:"\u21a9",xhookrightarrow:"\u21aa",xmapsto:"\u21a6",xrightharpoondown:"\u21c1",xleftharpoondown:"\u21bd",xrightleftharpoons:"\u21cc",xleftrightharpoons:"\u21cb",xtwoheadleftarrow:"\u219e",xtwoheadrightarrow:"\u21a0",xlongequal:"=",xtofrom:"\u21c4",xrightleftarrows:"\u21c4",xrightequilibrium:"\u21cc",xleftequilibrium:"\u21cb","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},Ct={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]};var Nt=function(e,t,r,n,o){let s;const i=e.height+e.depth+r+n;if(/fbox|color|angl/.test(t)){if(s=Pe.makeSpan(["stretchy",t],[],o),"fbox"===t){const e=o.color&&o.getColor();e&&(s.style.borderColor=e)}}else{const e=[];/^[bx]cancel$/.test(t)&&e.push(new Q({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&e.push(new Q({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));const r=new K(e,{width:"100%",height:P(i)});s=Pe.makeSvgSpan([],[r],o)}return s.height=i,s.style.height=P(i),s},qt=function(e){const t=new ft.MathNode("mo",[new ft.TextNode(Bt[e.replace(/^\\/,"")])]);return t.setAttribute("stretchy","true"),t},It=function(e,t){const{span:r,minWidth:n,height:o}=function(){let r=4e5;const n=e.label.slice(1);if(["widehat","widecheck","widetilde","utilde"].includes(n)){const s="ordgroup"===(o=e.base).type?o.body.length:1;let i,a,l;if(s>5)"widehat"===n||"widecheck"===n?(i=420,r=2364,l=.42,a=n+"4"):(i=312,r=2340,l=.34,a="tilde4");else{const e=[1,1,2,2,3,3][s];"widehat"===n||"widecheck"===n?(r=[0,1062,2364,2364,2364][e],i=[0,239,300,360,420][e],l=[0,.24,.3,.3,.36,.42][e],a=n+e):(r=[0,600,1033,2339,2340][e],i=[0,260,286,306,312][e],l=[0,.26,.286,.3,.306,.34][e],a="tilde"+e)}const h=new J(a),c=new K([h],{width:"100%",height:P(l),viewBox:"0 0 "+r+" "+i,preserveAspectRatio:"none"});return{span:Pe.makeSvgSpan([],[c],t),minWidth:0,height:l}}{const e=[],o=Ct[n],[s,i,a]=o,l=a/1e3,h=s.length;let c,m;if(1===h){c=["hide-tail"],m=[o[3]]}else if(2===h)c=["halfarrow-left","halfarrow-right"],m=["xMinYMin","xMaxYMin"];else{if(3!==h)throw new Error("Correct katexImagesData or update code here to support\n "+h+" children.");c=["brace-left","brace-center","brace-right"],m=["xMinYMin","xMidYMin","xMaxYMin"]}for(let n=0;n0&&(r.style.minWidth=P(n)),r};function Rt(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function Ht(e){const t=Ot(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function Ot(e){return e&&("atom"===e.type||re.hasOwnProperty(e.type))?e:null}const Et=(e,t)=>{let r,n,o;e&&"supsub"===e.type?(n=Rt(e.base,"accent"),r=n.base,e.base=r,o=function(e){if(e instanceof W)return e;throw new Error("Expected span but got "+String(e)+".")}(ct(e,t)),e.base=n):(n=Rt(e,"accent"),r=n.base);const s=ct(r,t.havingCrampedStyle());let i=0;if(n.isShifty&&l.isCharacterBox(r)){const e=l.getBaseElem(r);i=ee(ct(e,t.havingCrampedStyle())).skew}const a="\\c"===n.label;let h,c=a?s.height+s.depth:Math.min(s.height,t.fontMetrics().xHeight);if(n.isStretchy)h=It(n,t),h=Pe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"elem",elem:h,wrapperClasses:["svg-align"],wrapperStyle:i>0?{width:"calc(100% - "+P(2*i)+")",marginLeft:P(2*i)}:void 0}]},t);else{let e,r;"\\vec"===n.label?(e=Pe.staticSvg("vec",t),r=Pe.svgData.vec[1]):(e=Pe.makeOrd({mode:n.mode,text:n.label},t,"textord"),e=ee(e),e.italic=0,r=e.width,a&&(c+=e.depth)),h=Pe.makeSpan(["accent-body"],[e]);const o="\\textcircled"===n.label;o&&(h.classes.push("accent-full"),c=s.height);let l=i;o||(l-=r/2),h.style.left=P(l),"\\textcircled"===n.label&&(h.style.top=".2em"),h=Pe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"kern",size:-c},{type:"elem",elem:h}]},t)}const m=Pe.makeSpan(["mord","accent"],[h],t);return o?(o.children[0]=m,o.height=Math.max(m.height,o.height),o.classes[0]="mord",o):m},Lt=(e,t)=>{const r=e.isStretchy?qt(e.label):new ft.MathNode("mo",[bt(e.label,e.mode)]),n=new ft.MathNode("mover",[St(e.base,t),r]);return n.setAttribute("accent","true"),n},Dt=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map((e=>"\\"+e)).join("|"));$e({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:(e,t)=>{const r=Ke(t[0]),n=!Dt.test(e.funcName),o=!n||"\\widehat"===e.funcName||"\\widetilde"===e.funcName||"\\widecheck"===e.funcName;return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,isShifty:o,base:r}},htmlBuilder:Et,mathmlBuilder:Lt}),$e({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(e,t)=>{const r=t[0];let n=e.parser.mode;return"math"===n&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Et,mathmlBuilder:Lt}),$e({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:(e,t)=>{let{parser:r,funcName:n}=e;const o=t[0];return{type:"accentUnder",mode:r.mode,label:n,base:o}},htmlBuilder:(e,t)=>{const r=ct(e.base,t),n=It(e,t),o="\\utilde"===e.label?.12:0,s=Pe.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:o},{type:"elem",elem:r}]},t);return Pe.makeSpan(["mord","accentunder"],[s],t)},mathmlBuilder:(e,t)=>{const r=qt(e.label),n=new ft.MathNode("munder",[St(e.base,t),r]);return n.setAttribute("accentunder","true"),n}});const Vt=e=>{const t=new ft.MathNode("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};$e({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){let{parser:n,funcName:o}=e;return{type:"xArrow",mode:n.mode,label:o,body:t[0],below:r[0]}},htmlBuilder(e,t){const r=t.style;let n=t.havingStyle(r.sup());const o=Pe.wrapFragment(ct(e.body,n,t),t),s="\\x"===e.label.slice(0,2)?"x":"cd";let i;o.classes.push(s+"-arrow-pad"),e.below&&(n=t.havingStyle(r.sub()),i=Pe.wrapFragment(ct(e.below,n,t),t),i.classes.push(s+"-arrow-pad"));const a=It(e,t),l=-t.fontMetrics().axisHeight+.5*a.height;let h,c=-t.fontMetrics().axisHeight-.5*a.height-.111;if((o.depth>.25||"\\xleftequilibrium"===e.label)&&(c-=o.depth),i){const e=-t.fontMetrics().axisHeight+i.height+.5*a.height+.111;h=Pe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:c},{type:"elem",elem:a,shift:l},{type:"elem",elem:i,shift:e}]},t)}else h=Pe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:c},{type:"elem",elem:a,shift:l}]},t);return h.children[0].children[0].children[1].classes.push("svg-align"),Pe.makeSpan(["mrel","x-arrow"],[h],t)},mathmlBuilder(e,t){const r=qt(e.label);let n;if(r.setAttribute("minsize","x"===e.label.charAt(0)?"1.75em":"3.0em"),e.body){const o=Vt(St(e.body,t));if(e.below){const s=Vt(St(e.below,t));n=new ft.MathNode("munderover",[r,s,o])}else n=new ft.MathNode("mover",[r,o])}else if(e.below){const o=Vt(St(e.below,t));n=new ft.MathNode("munder",[r,o])}else n=Vt(),n=new ft.MathNode("mover",[r,n]);return n}});const Pt=Pe.makeSpan;function Ft(e,t){const r=ot(e.body,t,!0);return Pt([e.mclass],r,t)}function Gt(e,t){let r;const n=vt(e.body,t);return"minner"===e.mclass?r=new ft.MathNode("mpadded",n):"mord"===e.mclass?e.isCharacterBox?(r=n[0],r.type="mi"):r=new ft.MathNode("mi",n):(e.isCharacterBox?(r=n[0],r.type="mo"):r=new ft.MathNode("mo",n),"mbin"===e.mclass?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):"mpunct"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):"mopen"===e.mclass||"mclose"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0em"):"minner"===e.mclass&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}$e({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(e,t){let{parser:r,funcName:n}=e;const o=t[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:Je(o),isCharacterBox:l.isCharacterBox(o)}},htmlBuilder:Ft,mathmlBuilder:Gt});const Ut=e=>{const t="ordgroup"===e.type&&e.body.length?e.body[0]:e;return"atom"!==t.type||"bin"!==t.family&&"rel"!==t.family?"mord":"m"+t.family};$e({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(e,t){let{parser:r}=e;return{type:"mclass",mode:r.mode,mclass:Ut(t[0]),body:Je(t[1]),isCharacterBox:l.isCharacterBox(t[1])}}}),$e({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(e,t){let{parser:r,funcName:n}=e;const o=t[1],s=t[0];let i;i="\\stackrel"!==n?Ut(o):"mrel";const a={type:"op",mode:o.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:"\\stackrel"!==n,body:Je(o)},h={type:"supsub",mode:s.mode,base:a,sup:"\\underset"===n?null:s,sub:"\\underset"===n?s:null};return{type:"mclass",mode:r.mode,mclass:i,body:[h],isCharacterBox:l.isCharacterBox(h)}},htmlBuilder:Ft,mathmlBuilder:Gt}),$e({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(e,t){let{parser:r}=e;return{type:"pmb",mode:r.mode,mclass:Ut(t[0]),body:Je(t[0])}},htmlBuilder(e,t){const r=ot(e.body,t,!0),n=Pe.makeSpan([e.mclass],r,t);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder(e,t){const r=vt(e.body,t),n=new ft.MathNode("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});const Yt={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Xt=e=>"textord"===e.type&&"@"===e.text;function Wt(e,t,r){const n=Yt[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":{const e={type:"atom",text:n,mode:"math",family:"rel"},o={type:"ordgroup",mode:"math",body:[r.callFunction("\\\\cdleft",[t[0]],[]),r.callFunction("\\Big",[e],[]),r.callFunction("\\\\cdright",[t[1]],[])]};return r.callFunction("\\\\cdparent",[o],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{const e={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[e],[])}default:return{type:"textord",text:" ",mode:"math"}}}$e({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(e,t){let{parser:r,funcName:n}=e;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:t[0]}},htmlBuilder(e,t){const r=t.havingStyle(t.style.sup()),n=Pe.wrapFragment(ct(e.label,r,t),t);return n.classes.push("cd-label-"+e.side),n.style.bottom=P(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder(e,t){let r=new ft.MathNode("mrow",[St(e.label,t)]);return r=new ft.MathNode("mpadded",[r]),r.setAttribute("width","0"),"left"===e.side&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new ft.MathNode("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}}),$e({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(e,t){let{parser:r}=e;return{type:"cdlabelparent",mode:r.mode,fragment:t[0]}},htmlBuilder(e,t){const r=Pe.wrapFragment(ct(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(e,t){return new ft.MathNode("mrow",[St(e.fragment,t)])}}),$e({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(e,t){let{parser:r}=e;const o=Rt(t[0],"ordgroup").body;let s="";for(let e=0;e=1114111)throw new n("\\@char with invalid code point "+s);return a<=65535?i=String.fromCharCode(a):(a-=65536,i=String.fromCharCode(55296+(a>>10),56320+(1023&a))),{type:"textord",mode:r.mode,text:i}}});const _t=(e,t)=>{const r=ot(e.body,t.withColor(e.color),!1);return Pe.makeFragment(r)},jt=(e,t)=>{const r=vt(e.body,t.withColor(e.color)),n=new ft.MathNode("mstyle",r);return n.setAttribute("mathcolor",e.color),n};$e({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(e,t){let{parser:r}=e;const n=Rt(t[0],"color-token").color,o=t[1];return{type:"color",mode:r.mode,color:n,body:Je(o)}},htmlBuilder:_t,mathmlBuilder:jt}),$e({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(e,t){let{parser:r,breakOnTokenText:n}=e;const o=Rt(t[0],"color-token").color;r.gullet.macros.set("\\current@color",o);const s=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:o,body:s}},htmlBuilder:_t,mathmlBuilder:jt}),$e({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(e,t,r){let{parser:n}=e;const o="["===n.gullet.future().text?n.parseSizeGroup(!0):null,s=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:s,size:o&&Rt(o,"size").value}},htmlBuilder(e,t){const r=Pe.makeSpan(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=P(V(e.size,t)))),r},mathmlBuilder(e,t){const r=new ft.MathNode("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",P(V(e.size,t)))),r}});const $t={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},Zt=e=>{const t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new n("Expected a control sequence",e);return t},Kt=(e,t,r,n)=>{let o=e.gullet.macros.get(r.text);null==o&&(r.noexpand=!0,o={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,o,n)};$e({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(e){let{parser:t,funcName:r}=e;t.consumeSpaces();const o=t.fetch();if($t[o.text])return"\\global"!==r&&"\\\\globallong"!==r||(o.text=$t[o.text]),Rt(t.parseFunction(),"internal");throw new n("Invalid token after macro prefix",o)}}),$e({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){let{parser:t,funcName:r}=e,o=t.gullet.popToken();const s=o.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(s))throw new n("Expected a control sequence",o);let i,a=0;const l=[[]];for(;"{"!==t.gullet.future().text;)if(o=t.gullet.popToken(),"#"===o.text){if("{"===t.gullet.future().text){i=t.gullet.future(),l[a].push("{");break}if(o=t.gullet.popToken(),!/^[1-9]$/.test(o.text))throw new n('Invalid argument number "'+o.text+'"');if(parseInt(o.text)!==a+1)throw new n('Argument number "'+o.text+'" out of order');a++,l.push([])}else{if("EOF"===o.text)throw new n("Expected a macro definition");l[a].push(o.text)}let{tokens:h}=t.gullet.consumeArg();return i&&h.unshift(i),"\\edef"!==r&&"\\xdef"!==r||(h=t.gullet.expandTokens(h),h.reverse()),t.gullet.macros.set(s,{tokens:h,numArgs:a,delimiters:l},r===$t[r]),{type:"internal",mode:t.mode}}}),$e({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){let{parser:t,funcName:r}=e;const n=Zt(t.gullet.popToken());t.gullet.consumeSpaces();const o=(e=>{let t=e.gullet.popToken();return"="===t.text&&(t=e.gullet.popToken()," "===t.text&&(t=e.gullet.popToken())),t})(t);return Kt(t,n,o,"\\\\globallet"===r),{type:"internal",mode:t.mode}}}),$e({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){let{parser:t,funcName:r}=e;const n=Zt(t.gullet.popToken()),o=t.gullet.popToken(),s=t.gullet.popToken();return Kt(t,n,s,"\\\\globalfuture"===r),t.gullet.pushToken(s),t.gullet.pushToken(o),{type:"internal",mode:t.mode}}});const Jt=function(e,t,r){const n=C(oe.math[e]&&oe.math[e].replace||e,t,r);if(!n)throw new Error("Unsupported symbol "+e+" and font size "+t+".");return n},Qt=function(e,t,r,n){const o=r.havingBaseStyle(t),s=Pe.makeSpan(n.concat(o.sizingClasses(r)),[e],r),i=o.sizeMultiplier/r.sizeMultiplier;return s.height*=i,s.depth*=i,s.maxFontSize=o.sizeMultiplier,s},er=function(e,t,r){const n=t.havingBaseStyle(r),o=(1-t.sizeMultiplier/n.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=P(o),e.height-=o,e.depth+=o},tr=function(e,t,r,n,o,s){const i=function(e,t,r,n){return Pe.makeSymbol(e,"Size"+t+"-Regular",r,n)}(e,t,o,n),a=Qt(Pe.makeSpan(["delimsizing","size"+t],[i],n),w.TEXT,n,s);return r&&er(a,n,w.TEXT),a},rr=function(e,t,r){let n;n="Size1-Regular"===t?"delim-size1":"delim-size4";return{type:"elem",elem:Pe.makeSpan(["delimsizinginner",n],[Pe.makeSpan([],[Pe.makeSymbol(e,t,r)])])}},nr=function(e,t,r){const n=A["Size4-Regular"][e.charCodeAt(0)]?A["Size4-Regular"][e.charCodeAt(0)][4]:A["Size1-Regular"][e.charCodeAt(0)][4],o=new J("inner",function(e,t){switch(e){case"\u239c":return"M291 0 H417 V"+t+" H291z M291 0 H417 V"+t+" H291z";case"\u2223":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z";case"\u2225":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145zM367 0 H410 V"+t+" H367z M367 0 H410 V"+t+" H367z";case"\u239f":return"M457 0 H583 V"+t+" H457z M457 0 H583 V"+t+" H457z";case"\u23a2":return"M319 0 H403 V"+t+" H319z M319 0 H403 V"+t+" H319z";case"\u23a5":return"M263 0 H347 V"+t+" H263z M263 0 H347 V"+t+" H263z";case"\u23aa":return"M384 0 H504 V"+t+" H384z M384 0 H504 V"+t+" H384z";case"\u23d0":return"M312 0 H355 V"+t+" H312z M312 0 H355 V"+t+" H312z";case"\u2016":return"M257 0 H300 V"+t+" H257z M257 0 H300 V"+t+" H257zM478 0 H521 V"+t+" H478z M478 0 H521 V"+t+" H478z";default:return""}}(e,Math.round(1e3*t))),s=new K([o],{width:P(n),height:P(t),style:"width:"+P(n),viewBox:"0 0 "+1e3*n+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),i=Pe.makeSvgSpan([],[s],r);return i.height=t,i.style.height=P(t),i.style.width=P(n),{type:"elem",elem:i}},or={type:"kern",size:-.008},sr=["|","\\lvert","\\rvert","\\vert"],ir=["\\|","\\lVert","\\rVert","\\Vert"],ar=function(e,t,r,n,o,s){let i,a,l,h,c="",m=0;i=l=h=e,a=null;let p="Size1-Regular";"\\uparrow"===e?l=h="\u23d0":"\\Uparrow"===e?l=h="\u2016":"\\downarrow"===e?i=l="\u23d0":"\\Downarrow"===e?i=l="\u2016":"\\updownarrow"===e?(i="\\uparrow",l="\u23d0",h="\\downarrow"):"\\Updownarrow"===e?(i="\\Uparrow",l="\u2016",h="\\Downarrow"):sr.includes(e)?(l="\u2223",c="vert",m=333):ir.includes(e)?(l="\u2225",c="doublevert",m=556):"["===e||"\\lbrack"===e?(i="\u23a1",l="\u23a2",h="\u23a3",p="Size4-Regular",c="lbrack",m=667):"]"===e||"\\rbrack"===e?(i="\u23a4",l="\u23a5",h="\u23a6",p="Size4-Regular",c="rbrack",m=667):"\\lfloor"===e||"\u230a"===e?(l=i="\u23a2",h="\u23a3",p="Size4-Regular",c="lfloor",m=667):"\\lceil"===e||"\u2308"===e?(i="\u23a1",l=h="\u23a2",p="Size4-Regular",c="lceil",m=667):"\\rfloor"===e||"\u230b"===e?(l=i="\u23a5",h="\u23a6",p="Size4-Regular",c="rfloor",m=667):"\\rceil"===e||"\u2309"===e?(i="\u23a4",l=h="\u23a5",p="Size4-Regular",c="rceil",m=667):"("===e||"\\lparen"===e?(i="\u239b",l="\u239c",h="\u239d",p="Size4-Regular",c="lparen",m=875):")"===e||"\\rparen"===e?(i="\u239e",l="\u239f",h="\u23a0",p="Size4-Regular",c="rparen",m=875):"\\{"===e||"\\lbrace"===e?(i="\u23a7",a="\u23a8",h="\u23a9",l="\u23aa",p="Size4-Regular"):"\\}"===e||"\\rbrace"===e?(i="\u23ab",a="\u23ac",h="\u23ad",l="\u23aa",p="Size4-Regular"):"\\lgroup"===e||"\u27ee"===e?(i="\u23a7",h="\u23a9",l="\u23aa",p="Size4-Regular"):"\\rgroup"===e||"\u27ef"===e?(i="\u23ab",h="\u23ad",l="\u23aa",p="Size4-Regular"):"\\lmoustache"===e||"\u23b0"===e?(i="\u23a7",h="\u23ad",l="\u23aa",p="Size4-Regular"):"\\rmoustache"!==e&&"\u23b1"!==e||(i="\u23ab",h="\u23a9",l="\u23aa",p="Size4-Regular");const u=Jt(i,p,o),d=u.height+u.depth,g=Jt(l,p,o),f=g.height+g.depth,b=Jt(h,p,o),y=b.height+b.depth;let x=0,v=1;if(null!==a){const e=Jt(a,p,o);x=e.height+e.depth,v=2}const k=d+y+x,S=k+Math.max(0,Math.ceil((t-k)/(v*f)))*v*f;let M=n.fontMetrics().axisHeight;r&&(M*=n.sizeMultiplier);const z=S/2-M,A=[];if(c.length>0){const e=S-d-y,t=Math.round(1e3*S),r=function(e,t){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+" v1759 h347 v-84\nH403z M403 1759 V0 H319 V1759 v"+t+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+" v1759 H0 v84 H347z\nM347 1759 V0 H263 V1759 v"+t+" v1759 h84z";case"vert":return"M145 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v"+t+" v585 h43z";case"doublevert":return"M145 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v"+t+" v585 h43z\nM367 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v"+t+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+t+" v1715 h263 v84 H319z\nMM319 602 V0 H403 V602 v"+t+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+t+" v1799 H0 v-84 H319z\nMM319 602 V0 H403 V602 v"+t+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+" v602 h84z\nM403 1759 V0 H319 V1759 v"+t+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+" v602 h84z\nM347 1759 V0 h-84 V1759 v"+t+" v602 h84z";case"lparen":return"M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\n-36,557 l0,"+(t+84)+"c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\nl0,-"+(t+92)+"c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z";case"rparen":return"M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,"+(t+9)+"\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\nl0,-"+(t+144)+"c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z";default:throw new Error("Unknown stretchy delimiter.")}}(c,Math.round(1e3*e)),o=new J(c,r),s=(m/1e3).toFixed(3)+"em",i=(t/1e3).toFixed(3)+"em",a=new K([o],{width:s,height:i,viewBox:"0 0 "+m+" "+t}),l=Pe.makeSvgSpan([],[a],n);l.height=t/1e3,l.style.width=s,l.style.height=i,A.push({type:"elem",elem:l})}else{if(A.push(rr(h,p,o)),A.push(or),null===a){const e=S-d-y+.016;A.push(nr(l,e,n))}else{const e=(S-d-y-x)/2+.016;A.push(nr(l,e,n)),A.push(or),A.push(rr(a,p,o)),A.push(or),A.push(nr(l,e,n))}A.push(or),A.push(rr(i,p,o))}const T=n.havingBaseStyle(w.TEXT),B=Pe.makeVList({positionType:"bottom",positionData:z,children:A},T);return Qt(Pe.makeSpan(["delimsizing","mult"],[B],T),w.TEXT,n,s)},lr=.08,hr=function(e,t,r,n,o){const s=function(e,t,r){t*=1e3;let n="";switch(e){case"sqrtMain":n=function(e,t){return"M95,"+(622+e+t)+"\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl"+e/2.075+" -"+e+"\nc5.3,-9.3,12,-14,20,-14\nH400000v"+(40+e)+"H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM"+(834+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize1":n=function(e,t){return"M263,"+(601+e+t)+"c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl"+e/2.084+" -"+e+"\nc4.7,-7.3,11,-11,19,-11\nH40000v"+(40+e)+"H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize2":n=function(e,t){return"M983 "+(10+e+t)+"\nl"+e/3.13+" -"+e+"\nc4,-6.7,10,-10,18,-10 H400000v"+(40+e)+"\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize3":n=function(e,t){return"M424,"+(2398+e+t)+"\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl"+e/4.223+" -"+e+"c4,-6.7,10,-10,18,-10 H400000\nv"+(40+e)+"H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M"+(1001+e)+" "+t+"\nh400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize4":n=function(e,t){return"M473,"+(2713+e+t)+"\nc339.3,-1799.3,509.3,-2700,510,-2702 l"+e/5.298+" -"+e+"\nc3.3,-7.3,9.3,-11,18,-11 H400000v"+(40+e)+"H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM"+(1001+e)+" "+t+"h400000v"+(40+e)+"H1017.7z"}(t,M);break;case"sqrtTall":n=function(e,t,r){return"M702 "+(e+t)+"H400000"+(40+e)+"\nH742v"+(r-54-t-e)+"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 "+t+"H400000v"+(40+e)+"H742z"}(t,M,r)}return n}(e,n,r),i=new J(e,s),a=new K([i],{width:"400em",height:P(t),viewBox:"0 0 400000 "+r,preserveAspectRatio:"xMinYMin slice"});return Pe.makeSvgSpan(["hide-tail"],[a],o)},cr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","\\surd"],mr=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1"],pr=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],ur=[0,1.2,1.8,2.4,3],dr=[{type:"small",style:w.SCRIPTSCRIPT},{type:"small",style:w.SCRIPT},{type:"small",style:w.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],gr=[{type:"small",style:w.SCRIPTSCRIPT},{type:"small",style:w.SCRIPT},{type:"small",style:w.TEXT},{type:"stack"}],fr=[{type:"small",style:w.SCRIPTSCRIPT},{type:"small",style:w.SCRIPT},{type:"small",style:w.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],br=function(e){if("small"===e.type)return"Main-Regular";if("large"===e.type)return"Size"+e.size+"-Regular";if("stack"===e.type)return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},yr=function(e,t,r,n){for(let o=Math.min(2,3-n.style.size);ot)return r[o]}return r[r.length-1]},xr=function(e,t,r,n,o,s){let i;"<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),i=pr.includes(e)?dr:cr.includes(e)?fr:gr;const a=yr(e,t,i,n);return"small"===a.type?function(e,t,r,n,o,s){const i=Pe.makeSymbol(e,"Main-Regular",o,n),a=Qt(i,t,n,s);return r&&er(a,n,t),a}(e,a.style,r,n,o,s):"large"===a.type?tr(e,a.size,r,n,o,s):ar(e,t,r,n,o,s)};var wr={sqrtImage:function(e,t){const r=t.havingBaseSizing(),n=yr("\\surd",e*r.sizeMultiplier,fr,r);let o=r.sizeMultiplier;const s=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness);let i,a,l=0,h=0,c=0;return"small"===n.type?(c=1e3+1e3*s+80,e<1?o=1:e<1.4&&(o=.7),l=(1+s+lr)/o,h=(1+s)/o,i=hr("sqrtMain",l,c,s,t),i.style.minWidth="0.853em",a=.833/o):"large"===n.type?(c=1080*ur[n.size],h=(ur[n.size]+s)/o,l=(ur[n.size]+s+lr)/o,i=hr("sqrtSize"+n.size,l,c,s,t),i.style.minWidth="1.02em",a=1/o):(l=e+s+lr,h=e+s,c=Math.floor(1e3*e+s)+80,i=hr("sqrtTall",l,c,s,t),i.style.minWidth="0.742em",a=1.056),i.height=h,i.style.height=P(l),{span:i,advanceWidth:a,ruleWidth:(t.fontMetrics().sqrtRuleThickness+s)*o}},sizedDelim:function(e,t,r,o,s){if("<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),cr.includes(e)||pr.includes(e))return tr(e,t,!1,r,o,s);if(mr.includes(e))return ar(e,ur[t],!1,r,o,s);throw new n("Illegal delimiter: '"+e+"'")},sizeToMaxHeight:ur,customSizedDelim:xr,leftRightDelim:function(e,t,r,n,o,s){const i=n.fontMetrics().axisHeight*n.sizeMultiplier,a=5/n.fontMetrics().ptPerEm,l=Math.max(t-i,r+i),h=Math.max(l/500*901,2*l-a);return xr(e,h,!0,n,o,s)}};const vr={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},kr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27e8","\\rangle","\u27e9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function Sr(e,t){const r=Ot(e);if(r&&kr.includes(r.text))return r;throw new n(r?"Invalid delimiter '"+r.text+"' after '"+t.funcName+"'":"Invalid delimiter type '"+e.type+"'",e)}function Mr(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}$e({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:(e,t)=>{const r=Sr(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:vr[e.funcName].size,mclass:vr[e.funcName].mclass,delim:r.text}},htmlBuilder:(e,t)=>"."===e.delim?Pe.makeSpan([e.mclass]):wr.sizedDelim(e.delim,e.size,t,e.mode,[e.mclass]),mathmlBuilder:e=>{const t=[];"."!==e.delim&&t.push(bt(e.delim,e.mode));const r=new ft.MathNode("mo",t);"mopen"===e.mclass||"mclose"===e.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");const n=P(wr.sizeToMaxHeight[e.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r}}),$e({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{const r=e.parser.gullet.macros.get("\\current@color");if(r&&"string"!=typeof r)throw new n("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:Sr(t[0],e).text,color:r}}}),$e({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{const r=Sr(t[0],e),n=e.parser;++n.leftrightDepth;const o=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);const s=Rt(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:o,left:r.text,right:s.delim,rightColor:s.color}},htmlBuilder:(e,t)=>{Mr(e);const r=ot(e.body,t,!0,["mopen","mclose"]);let n,o,s=0,i=0,a=!1;for(let e=0;e{Mr(e);const r=vt(e.body,t);if("."!==e.left){const t=new ft.MathNode("mo",[bt(e.left,e.mode)]);t.setAttribute("fence","true"),r.unshift(t)}if("."!==e.right){const t=new ft.MathNode("mo",[bt(e.right,e.mode)]);t.setAttribute("fence","true"),e.rightColor&&t.setAttribute("mathcolor",e.rightColor),r.push(t)}return yt(r)}}),$e({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{const r=Sr(t[0],e);if(!e.parser.leftrightDepth)throw new n("\\middle without preceding \\left",r);return{type:"middle",mode:e.parser.mode,delim:r.text}},htmlBuilder:(e,t)=>{let r;if("."===e.delim)r=ht(t,[]);else{r=wr.sizedDelim(e.delim,1,t,e.mode,[]);const n={delim:e.delim,options:t};r.isMiddle=n}return r},mathmlBuilder:(e,t)=>{const r="\\vert"===e.delim||"|"===e.delim?bt("|","text"):bt(e.delim,e.mode),n=new ft.MathNode("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n}});const zr=(e,t)=>{const r=Pe.wrapFragment(ct(e.body,t),t),n=e.label.slice(1);let o,s=t.sizeMultiplier,i=0;const a=l.isCharacterBox(e.body);if("sout"===n)o=Pe.makeSpan(["stretchy","sout"]),o.height=t.fontMetrics().defaultRuleThickness/s,i=-.5*t.fontMetrics().xHeight;else if("phase"===n){const e=V({number:.6,unit:"pt"},t),n=V({number:.35,unit:"ex"},t);s/=t.havingBaseSizing().sizeMultiplier;const a=r.height+r.depth+e+n;r.style.paddingLeft=P(a/2+e);const l=Math.floor(1e3*a*s),c="M400000 "+(h=l)+" H0 L"+h/2+" 0 l65 45 L145 "+(h-80)+" H400000z",m=new K([new J("phase",c)],{width:"400em",height:P(l/1e3),viewBox:"0 0 400000 "+l,preserveAspectRatio:"xMinYMin slice"});o=Pe.makeSvgSpan(["hide-tail"],[m],t),o.style.height=P(a),i=r.depth+e+n}else{/cancel/.test(n)?a||r.classes.push("cancel-pad"):"angl"===n?r.classes.push("anglpad"):r.classes.push("boxpad");let s=0,l=0,h=0;/box/.test(n)?(h=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness),s=t.fontMetrics().fboxsep+("colorbox"===n?0:h),l=s):"angl"===n?(h=Math.max(t.fontMetrics().defaultRuleThickness,t.minRuleThickness),s=4*h,l=Math.max(0,.25-r.depth)):(s=a?.2:0,l=s),o=Nt(r,n,s,l,t),/fbox|boxed|fcolorbox/.test(n)?(o.style.borderStyle="solid",o.style.borderWidth=P(h)):"angl"===n&&.049!==h&&(o.style.borderTopWidth=P(h),o.style.borderRightWidth=P(h)),i=r.depth+l,e.backgroundColor&&(o.style.backgroundColor=e.backgroundColor,e.borderColor&&(o.style.borderColor=e.borderColor))}var h;let c;if(e.backgroundColor)c=Pe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:i},{type:"elem",elem:r,shift:0}]},t);else{const e=/cancel|phase/.test(n)?["svg-align"]:[];c=Pe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:o,shift:i,wrapperClasses:e}]},t)}return/cancel/.test(n)&&(c.height=r.height,c.depth=r.depth),/cancel/.test(n)&&!a?Pe.makeSpan(["mord","cancel-lap"],[c],t):Pe.makeSpan(["mord"],[c],t)},Ar=(e,t)=>{let r=0;const n=new ft.MathNode(e.label.indexOf("colorbox")>-1?"mpadded":"menclose",[St(e.body,t)]);switch(e.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),"\\fcolorbox"===e.label){const r=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);n.setAttribute("style","border: "+r+"em solid "+String(e.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike")}return e.backgroundColor&&n.setAttribute("mathbackground",e.backgroundColor),n};$e({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(e,t,r){let{parser:n,funcName:o}=e;const s=Rt(t[0],"color-token").color,i=t[1];return{type:"enclose",mode:n.mode,label:o,backgroundColor:s,body:i}},htmlBuilder:zr,mathmlBuilder:Ar}),$e({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(e,t,r){let{parser:n,funcName:o}=e;const s=Rt(t[0],"color-token").color,i=Rt(t[1],"color-token").color,a=t[2];return{type:"enclose",mode:n.mode,label:o,backgroundColor:i,borderColor:s,body:a}},htmlBuilder:zr,mathmlBuilder:Ar}),$e({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(e,t){let{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\fbox",body:t[0]}}}),$e({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(e,t){let{parser:r,funcName:n}=e;const o=t[0];return{type:"enclose",mode:r.mode,label:n,body:o}},htmlBuilder:zr,mathmlBuilder:Ar}),$e({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(e,t){let{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\angl",body:t[0]}}});const Tr={};function Br(e){let{type:t,names:r,props:n,handler:o,htmlBuilder:s,mathmlBuilder:i}=e;const a={type:t,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:o};for(let e=0;e{if(!e.parser.settings.displayMode)throw new n("{"+e.envName+"} can be used only in display mode.")};function Or(e){if(-1===e.indexOf("ed"))return-1===e.indexOf("*")}function Er(e,t,r){let{hskipBeforeAndAfter:o,addJot:s,cols:i,arraystretch:a,colSeparationType:l,autoTag:h,singleRow:c,emptySingleRow:m,maxNumCols:p,leqno:u}=t;if(e.gullet.beginGroup(),c||e.gullet.macros.set("\\cr","\\\\\\relax"),!a){const t=e.gullet.expandMacroAsText("\\arraystretch");if(null==t)a=1;else if(a=parseFloat(t),!a||a<0)throw new n("Invalid \\arraystretch: "+t)}e.gullet.beginGroup();let d=[];const g=[d],f=[],b=[],y=null!=h?[]:void 0;function x(){h&&e.gullet.macros.set("\\@eqnsw","1",!0)}function w(){y&&(e.gullet.macros.get("\\df@tag")?(y.push(e.subparse([new Ir("\\df@tag")])),e.gullet.macros.set("\\df@tag",void 0,!0)):y.push(Boolean(h)&&"1"===e.gullet.macros.get("\\@eqnsw")))}for(x(),b.push(Rr(e));;){let t=e.parseExpression(!1,c?"\\end":"\\\\");e.gullet.endGroup(),e.gullet.beginGroup(),t={type:"ordgroup",mode:e.mode,body:t},r&&(t={type:"styling",mode:e.mode,style:r,body:[t]}),d.push(t);const o=e.fetch().text;if("&"===o){if(p&&d.length===p){if(c||l)throw new n("Too many tab characters: &",e.nextToken);e.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}e.consume()}else{if("\\end"===o){w(),1===d.length&&"styling"===t.type&&0===t.body[0].body.length&&(g.length>1||!m)&&g.pop(),b.length0&&(x+=.25),c.push({pos:x,isDashed:e[t]})}for(v(i[0]),r=0;r0&&(p+=y,le)))for(r=0;r=a)continue;(o>0||e.hskipBeforeAndAfter)&&(i=l.deflt(c.pregap,u),0!==i&&(z=Pe.makeSpan(["arraycolsep"],[]),z.style.width=P(i),M.push(z)));let d=[];for(r=0;r0){const e=Pe.makeLineSpan("hline",t,m),r=Pe.makeLineSpan("hdashline",t,m),n=[{type:"elem",elem:h,shift:0}];for(;c.length>0;){const t=c.pop(),o=t.pos-k;t.isDashed?n.push({type:"elem",elem:r,shift:o}):n.push({type:"elem",elem:e,shift:o})}h=Pe.makeVList({positionType:"individualShift",children:n},t)}if(0===T.length)return Pe.makeSpan(["mord"],[h],t);{let e=Pe.makeVList({positionType:"individualShift",children:T},t);return e=Pe.makeSpan(["tag"],[e],t),Pe.makeFragment([h,e])}},Vr={c:"center ",l:"left ",r:"right "},Pr=function(e,t){const r=[],n=new ft.MathNode("mtd",[],["mtr-glue"]),o=new ft.MathNode("mtd",[],["mml-eqn-num"]);for(let s=0;s0){const t=e.cols;let r="",n=!1,o=0,i=t.length;"separator"===t[0].type&&(a+="top ",o=1),"separator"===t[t.length-1].type&&(a+="bottom ",i-=1);for(let e=o;e0?"left ":"",a+=c[c.length-1].length>0?"right ":"";for(let e=1;e-1?"alignat":"align",s="split"===e.envName,i=Er(e.parser,{cols:r,addJot:!0,autoTag:s?void 0:Or(e.envName),emptySingleRow:!0,colSeparationType:o,maxNumCols:s?2:void 0,leqno:e.parser.settings.leqno},"display");let a,l=0;const h={type:"ordgroup",mode:e.mode,body:[]};if(t[0]&&"ordgroup"===t[0].type){let e="";for(let r=0;r0&&c&&(n=1),r[e]={type:"align",align:t,pregap:n,postgap:0}}return i.colSeparationType=c?"align":"alignat",i};Br({type:"array",names:["array","darray"],props:{numArgs:1},handler(e,t){const r=(Ot(t[0])?[t[0]]:Rt(t[0],"ordgroup").body).map((function(e){const t=Ht(e).text;if(-1!=="lcr".indexOf(t))return{type:"align",align:t};if("|"===t)return{type:"separator",separator:"|"};if(":"===t)return{type:"separator",separator:":"};throw new n("Unknown column alignment: "+t,e)})),o={cols:r,hskipBeforeAndAfter:!0,maxNumCols:r.length};return Er(e.parser,o,Lr(e.envName))},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(e){const t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")];let r="c";const o={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if("*"===e.envName.charAt(e.envName.length-1)){const t=e.parser;if(t.consumeSpaces(),"["===t.fetch().text){if(t.consume(),t.consumeSpaces(),r=t.fetch().text,-1==="lcr".indexOf(r))throw new n("Expected l or c or r",t.nextToken);t.consume(),t.consumeSpaces(),t.expect("]"),t.consume(),o.cols=[{type:"align",align:r}]}}const s=Er(e.parser,o,Lr(e.envName)),i=Math.max(0,...s.body.map((e=>e.length)));return s.cols=new Array(i).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[s],left:t[0],right:t[1],rightColor:void 0}:s},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(e){const t=Er(e.parser,{arraystretch:.5},"script");return t.colSeparationType="small",t},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["subarray"],props:{numArgs:1},handler(e,t){const r=(Ot(t[0])?[t[0]]:Rt(t[0],"ordgroup").body).map((function(e){const t=Ht(e).text;if(-1!=="lc".indexOf(t))return{type:"align",align:t};throw new n("Unknown column alignment: "+t,e)}));if(r.length>1)throw new n("{subarray} can contain only one column");let o={cols:r,hskipBeforeAndAfter:!1,arraystretch:.5};if(o=Er(e.parser,o,"script"),o.body.length>0&&o.body[0].length>1)throw new n("{subarray} can contain only one column");return o},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(e){const t=Er(e.parser,{arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},Lr(e.envName));return{type:"leftright",mode:e.mode,body:[t],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:Fr,htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(e){["gather","gather*"].includes(e.envName)&&Hr(e);const t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Or(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return Er(e.parser,t,"display")},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:Fr,htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(e){Hr(e);const t={autoTag:Or(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return Er(e.parser,t,"display")},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["CD"],props:{numArgs:0},handler(e){return Hr(e),function(e){const t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();const r=e.fetch().text;if("&"!==r&&"\\\\"!==r){if("\\end"===r){0===t[t.length-1].length&&t.pop();break}throw new n("Expected \\\\ or \\cr or \\end",e.nextToken)}e.consume()}let r=[];const o=[r];for(let a=0;a-1);else{if(!("<>AV".indexOf(o)>-1))throw new n('Expected one of "<>AV=|." after @',l[t]);for(let e=0;e<2;e++){let r=!0;for(let h=t+1;h{const r=e.font,n=t.withFont(r);return ct(e.body,n)},Yr=(e,t)=>{const r=e.font,n=t.withFont(r);return St(e.body,n)},Xr={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};$e({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathsfit","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:(e,t)=>{let{parser:r,funcName:n}=e;const o=Ke(t[0]);let s=n;return s in Xr&&(s=Xr[s]),{type:"font",mode:r.mode,font:s.slice(1),body:o}},htmlBuilder:Ur,mathmlBuilder:Yr}),$e({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:(e,t)=>{let{parser:r}=e;const n=t[0],o=l.isCharacterBox(n);return{type:"mclass",mode:r.mode,mclass:Ut(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:o}}}),$e({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{let{parser:r,funcName:n,breakOnTokenText:o}=e;const{mode:s}=r,i=r.parseExpression(!0,o);return{type:"font",mode:s,font:"math"+n.slice(1),body:{type:"ordgroup",mode:r.mode,body:i}}},htmlBuilder:Ur,mathmlBuilder:Yr});const Wr=(e,t)=>{let r=t;return"display"===e?r=r.id>=w.SCRIPT.id?r.text():w.DISPLAY:"text"===e&&r.size===w.DISPLAY.size?r=w.TEXT:"script"===e?r=w.SCRIPT:"scriptscript"===e&&(r=w.SCRIPTSCRIPT),r},_r=(e,t)=>{const r=Wr(e.size,t.style),n=r.fracNum(),o=r.fracDen();let s;s=t.havingStyle(n);const i=ct(e.numer,s,t);if(e.continued){const e=8.5/t.fontMetrics().ptPerEm,r=3.5/t.fontMetrics().ptPerEm;i.height=i.height0?3*c:7*c,u=t.fontMetrics().denom1):(h>0?(m=t.fontMetrics().num2,p=c):(m=t.fontMetrics().num3,p=3*c),u=t.fontMetrics().denom2),l){const e=t.fontMetrics().axisHeight;m-i.depth-(e+.5*h){let r=new ft.MathNode("mfrac",[St(e.numer,t),St(e.denom,t)]);if(e.hasBarLine){if(e.barSize){const n=V(e.barSize,t);r.setAttribute("linethickness",P(n))}}else r.setAttribute("linethickness","0px");const n=Wr(e.size,t.style);if(n.size!==t.style.size){r=new ft.MathNode("mstyle",[r]);const e=n.size===w.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",e),r.setAttribute("scriptlevel","0")}if(null!=e.leftDelim||null!=e.rightDelim){const t=[];if(null!=e.leftDelim){const r=new ft.MathNode("mo",[new ft.TextNode(e.leftDelim.replace("\\",""))]);r.setAttribute("fence","true"),t.push(r)}if(t.push(r),null!=e.rightDelim){const r=new ft.MathNode("mo",[new ft.TextNode(e.rightDelim.replace("\\",""))]);r.setAttribute("fence","true"),t.push(r)}return yt(t)}return r};$e({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:(e,t)=>{let{parser:r,funcName:n}=e;const o=t[0],s=t[1];let i,a=null,l=null,h="auto";switch(n){case"\\dfrac":case"\\frac":case"\\tfrac":i=!0;break;case"\\\\atopfrac":i=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":i=!1,a="(",l=")";break;case"\\\\bracefrac":i=!1,a="\\{",l="\\}";break;case"\\\\brackfrac":i=!1,a="[",l="]";break;default:throw new Error("Unrecognized genfrac command")}switch(n){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text"}return{type:"genfrac",mode:r.mode,continued:!1,numer:o,denom:s,hasBarLine:i,leftDelim:a,rightDelim:l,size:h,barSize:null}},htmlBuilder:_r,mathmlBuilder:jr}),$e({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:(e,t)=>{let{parser:r,funcName:n}=e;const o=t[0],s=t[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:o,denom:s,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}}}),$e({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(e){let t,{parser:r,funcName:n,token:o}=e;switch(n){case"\\over":t="\\frac";break;case"\\choose":t="\\binom";break;case"\\atop":t="\\\\atopfrac";break;case"\\brace":t="\\\\bracefrac";break;case"\\brack":t="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:r.mode,replaceWith:t,token:o}}});const $r=["display","text","script","scriptscript"],Zr=function(e){let t=null;return e.length>0&&(t=e,t="."===t?null:t),t};$e({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(e,t){let{parser:r}=e;const n=t[4],o=t[5],s=Ke(t[0]),i="atom"===s.type&&"open"===s.family?Zr(s.text):null,a=Ke(t[1]),l="atom"===a.type&&"close"===a.family?Zr(a.text):null,h=Rt(t[2],"size");let c,m=null;h.isBlank?c=!0:(m=h.value,c=m.number>0);let p="auto",u=t[3];if("ordgroup"===u.type){if(u.body.length>0){const e=Rt(u.body[0],"textord");p=$r[Number(e.text)]}}else u=Rt(u,"textord"),p=$r[Number(u.text)];return{type:"genfrac",mode:r.mode,numer:n,denom:o,continued:!1,hasBarLine:c,barSize:m,leftDelim:i,rightDelim:l,size:p}},htmlBuilder:_r,mathmlBuilder:jr}),$e({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(e,t){let{parser:r,funcName:n,token:o}=e;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Rt(t[0],"size").value,token:o}}}),$e({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:(e,t)=>{let{parser:r,funcName:n}=e;const o=t[0],s=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e}(Rt(t[1],"infix").size),i=t[2],a=s.number>0;return{type:"genfrac",mode:r.mode,numer:o,denom:i,continued:!1,hasBarLine:a,barSize:s,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:_r,mathmlBuilder:jr});const Kr=(e,t)=>{const r=t.style;let n,o;"supsub"===e.type?(n=e.sup?ct(e.sup,t.havingStyle(r.sup()),t):ct(e.sub,t.havingStyle(r.sub()),t),o=Rt(e.base,"horizBrace")):o=Rt(e,"horizBrace");const s=ct(o.base,t.havingBaseStyle(w.DISPLAY)),i=It(o,t);let a;if(o.isOver?(a=Pe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:i}]},t),a.children[0].children[0].children[1].classes.push("svg-align")):(a=Pe.makeVList({positionType:"bottom",positionData:s.depth+.1+i.height,children:[{type:"elem",elem:i},{type:"kern",size:.1},{type:"elem",elem:s}]},t),a.children[0].children[0].children[0].classes.push("svg-align")),n){const e=Pe.makeSpan(["mord",o.isOver?"mover":"munder"],[a],t);a=o.isOver?Pe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:e},{type:"kern",size:.2},{type:"elem",elem:n}]},t):Pe.makeVList({positionType:"bottom",positionData:e.depth+.2+n.height+n.depth,children:[{type:"elem",elem:n},{type:"kern",size:.2},{type:"elem",elem:e}]},t)}return Pe.makeSpan(["mord",o.isOver?"mover":"munder"],[a],t)};$e({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(e,t){let{parser:r,funcName:n}=e;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:t[0]}},htmlBuilder:Kr,mathmlBuilder:(e,t)=>{const r=qt(e.label);return new ft.MathNode(e.isOver?"mover":"munder",[St(e.base,t),r])}}),$e({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:(e,t)=>{let{parser:r}=e;const n=t[1],o=Rt(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:o})?{type:"href",mode:r.mode,href:o,body:Je(n)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:(e,t)=>{const r=ot(e.body,t,!1);return Pe.makeAnchor(e.href,[],r,t)},mathmlBuilder:(e,t)=>{let r=kt(e.body,t);return r instanceof dt||(r=new dt("mrow",[r])),r.setAttribute("href",e.href),r}}),$e({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:(e,t)=>{let{parser:r}=e;const n=Rt(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");const o=[];for(let e=0;e{let{parser:r,funcName:o,token:s}=e;const i=Rt(t[0],"raw").string,a=t[1];let l;r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");const h={};switch(o){case"\\htmlClass":h.class=i,l={command:"\\htmlClass",class:i};break;case"\\htmlId":h.id=i,l={command:"\\htmlId",id:i};break;case"\\htmlStyle":h.style=i,l={command:"\\htmlStyle",style:i};break;case"\\htmlData":{const e=i.split(",");for(let t=0;t{const r=ot(e.body,t,!1),n=["enclosing"];e.attributes.class&&n.push(...e.attributes.class.trim().split(/\s+/));const o=Pe.makeSpan(n,r,t);for(const t in e.attributes)"class"!==t&&e.attributes.hasOwnProperty(t)&&o.setAttribute(t,e.attributes[t]);return o},mathmlBuilder:(e,t)=>kt(e.body,t)}),$e({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:(e,t)=>{let{parser:r}=e;return{type:"htmlmathml",mode:r.mode,html:Je(t[0]),mathml:Je(t[1])}},htmlBuilder:(e,t)=>{const r=ot(e.html,t,!1);return Pe.makeFragment(r)},mathmlBuilder:(e,t)=>kt(e.mathml,t)});const Jr=function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};{const t=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!t)throw new n("Invalid size: '"+e+"' in \\includegraphics");const r={number:+(t[1]+t[2]),unit:t[3]};if(!D(r))throw new n("Invalid unit: '"+r.unit+"' in \\includegraphics.");return r}};$e({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:(e,t,r)=>{let{parser:o}=e,s={number:0,unit:"em"},i={number:.9,unit:"em"},a={number:0,unit:"em"},l="";if(r[0]){const e=Rt(r[0],"raw").string.split(",");for(let t=0;t{const r=V(e.height,t);let n=0;e.totalheight.number>0&&(n=V(e.totalheight,t)-r);let o=0;e.width.number>0&&(o=V(e.width,t));const s={height:P(r+n)};o>0&&(s.width=P(o)),n>0&&(s.verticalAlign=P(-n));const i=new j(e.src,e.alt,s);return i.height=r,i.depth=n,i},mathmlBuilder:(e,t)=>{const r=new ft.MathNode("mglyph",[]);r.setAttribute("alt",e.alt);const n=V(e.height,t);let o=0;if(e.totalheight.number>0&&(o=V(e.totalheight,t)-n,r.setAttribute("valign",P(-o))),r.setAttribute("height",P(n+o)),e.width.number>0){const n=V(e.width,t);r.setAttribute("width",P(n))}return r.setAttribute("src",e.src),r}}),$e({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(e,t){let{parser:r,funcName:n}=e;const o=Rt(t[0],"size");if(r.settings.strict){const e="m"===n[1],t="mu"===o.value.unit;e?(t||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, not "+o.value.unit+" units"),"math"!==r.mode&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):t&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:o.value}},htmlBuilder(e,t){return Pe.makeGlue(e.dimension,t)},mathmlBuilder(e,t){const r=V(e.dimension,t);return new ft.SpaceNode(r)}}),$e({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{let{parser:r,funcName:n}=e;const o=t[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:o}},htmlBuilder:(e,t)=>{let r;"clap"===e.alignment?(r=Pe.makeSpan([],[ct(e.body,t)]),r=Pe.makeSpan(["inner"],[r],t)):r=Pe.makeSpan(["inner"],[ct(e.body,t)]);const n=Pe.makeSpan(["fix"],[]);let o=Pe.makeSpan([e.alignment],[r,n],t);const s=Pe.makeSpan(["strut"]);return s.style.height=P(o.height+o.depth),o.depth&&(s.style.verticalAlign=P(-o.depth)),o.children.unshift(s),o=Pe.makeSpan(["thinbox"],[o],t),Pe.makeSpan(["mord","vbox"],[o],t)},mathmlBuilder:(e,t)=>{const r=new ft.MathNode("mpadded",[St(e.body,t)]);if("rlap"!==e.alignment){const t="llap"===e.alignment?"-1":"-0.5";r.setAttribute("lspace",t+"width")}return r.setAttribute("width","0px"),r}}),$e({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){let{funcName:r,parser:n}=e;const o=n.mode;n.switchMode("math");const s="\\("===r?"\\)":"$",i=n.parseExpression(!1,s);return n.expect(s),n.switchMode(o),{type:"styling",mode:n.mode,style:"text",body:i}}}),$e({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){throw new n("Mismatched "+e.funcName)}});const Qr=(e,t)=>{switch(t.style.size){case w.DISPLAY.size:return e.display;case w.TEXT.size:return e.text;case w.SCRIPT.size:return e.script;case w.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};$e({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:(e,t)=>{let{parser:r}=e;return{type:"mathchoice",mode:r.mode,display:Je(t[0]),text:Je(t[1]),script:Je(t[2]),scriptscript:Je(t[3])}},htmlBuilder:(e,t)=>{const r=Qr(e,t),n=ot(r,t,!1);return Pe.makeFragment(n)},mathmlBuilder:(e,t)=>{const r=Qr(e,t);return kt(r,t)}});const en=(e,t,r,n,o,s,i)=>{e=Pe.makeSpan([],[e]);const a=r&&l.isCharacterBox(r);let h,c,m;if(t){const e=ct(t,n.havingStyle(o.sup()),n);c={elem:e,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-e.depth)}}if(r){const e=ct(r,n.havingStyle(o.sub()),n);h={elem:e,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-e.height)}}if(c&&h){const t=n.fontMetrics().bigOpSpacing5+h.elem.height+h.elem.depth+h.kern+e.depth+i;m=Pe.makeVList({positionType:"bottom",positionData:t,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:h.elem,marginLeft:P(-s)},{type:"kern",size:h.kern},{type:"elem",elem:e},{type:"kern",size:c.kern},{type:"elem",elem:c.elem,marginLeft:P(s)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(h){const t=e.height-i;m=Pe.makeVList({positionType:"top",positionData:t,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:h.elem,marginLeft:P(-s)},{type:"kern",size:h.kern},{type:"elem",elem:e}]},n)}else{if(!c)return e;{const t=e.depth+i;m=Pe.makeVList({positionType:"bottom",positionData:t,children:[{type:"elem",elem:e},{type:"kern",size:c.kern},{type:"elem",elem:c.elem,marginLeft:P(s)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}}const p=[m];if(h&&0!==s&&!a){const e=Pe.makeSpan(["mspace"],[],n);e.style.marginRight=P(s),p.unshift(e)}return Pe.makeSpan(["mop","op-limits"],p,n)},tn=["\\smallint"],rn=(e,t)=>{let r,n,o,s=!1;"supsub"===e.type?(r=e.sup,n=e.sub,o=Rt(e.base,"op"),s=!0):o=Rt(e,"op");const i=t.style;let a,l=!1;if(i.size===w.DISPLAY.size&&o.symbol&&!tn.includes(o.name)&&(l=!0),o.symbol){const e=l?"Size2-Regular":"Size1-Regular";let r="";if("\\oiint"!==o.name&&"\\oiiint"!==o.name||(r=o.name.slice(1),o.name="oiint"===r?"\\iint":"\\iiint"),a=Pe.makeSymbol(o.name,e,"math",t,["mop","op-symbol",l?"large-op":"small-op"]),r.length>0){const e=a.italic,n=Pe.staticSvg(r+"Size"+(l?"2":"1"),t);a=Pe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:a,shift:0},{type:"elem",elem:n,shift:l?.08:0}]},t),o.name="\\"+r,a.classes.unshift("mop"),a.italic=e}}else if(o.body){const e=ot(o.body,t,!0);1===e.length&&e[0]instanceof Z?(a=e[0],a.classes[0]="mop"):a=Pe.makeSpan(["mop"],e,t)}else{const e=[];for(let r=1;r{let r;if(e.symbol)r=new dt("mo",[bt(e.name,e.mode)]),tn.includes(e.name)&&r.setAttribute("largeop","false");else if(e.body)r=new dt("mo",vt(e.body,t));else{r=new dt("mi",[new gt(e.name.slice(1))]);const t=new dt("mo",[bt("\u2061","text")]);r=e.parentIsSupSub?new dt("mrow",[r,t]):ut([r,t])}return r},on={"\u220f":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22c0":"\\bigwedge","\u22c1":"\\bigvee","\u22c2":"\\bigcap","\u22c3":"\\bigcup","\u2a00":"\\bigodot","\u2a01":"\\bigoplus","\u2a02":"\\bigotimes","\u2a04":"\\biguplus","\u2a06":"\\bigsqcup"};$e({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220f","\u2210","\u2211","\u22c0","\u22c1","\u22c2","\u22c3","\u2a00","\u2a01","\u2a02","\u2a04","\u2a06"],props:{numArgs:0},handler:(e,t)=>{let{parser:r,funcName:n}=e,o=n;return 1===o.length&&(o=on[o]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:o}},htmlBuilder:rn,mathmlBuilder:nn}),$e({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{let{parser:r}=e;const n=t[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:Je(n)}},htmlBuilder:rn,mathmlBuilder:nn});const sn={"\u222b":"\\int","\u222c":"\\iint","\u222d":"\\iiint","\u222e":"\\oint","\u222f":"\\oiint","\u2230":"\\oiiint"};$e({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(e){let{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:rn,mathmlBuilder:nn}),$e({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(e){let{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:rn,mathmlBuilder:nn}),$e({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222b","\u222c","\u222d","\u222e","\u222f","\u2230"],props:{numArgs:0,allowedInArgument:!0},handler(e){let{parser:t,funcName:r}=e,n=r;return 1===n.length&&(n=sn[n]),{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:rn,mathmlBuilder:nn});const an=(e,t)=>{let r,n,o,s,i=!1;if("supsub"===e.type?(r=e.sup,n=e.sub,o=Rt(e.base,"operatorname"),i=!0):o=Rt(e,"operatorname"),o.body.length>0){const e=o.body.map((e=>{const t=e.text;return"string"==typeof t?{type:"textord",mode:e.mode,text:t}:e})),r=ot(e,t.withFont("mathrm"),!0);for(let e=0;e{let{parser:r,funcName:n}=e;const o=t[0];return{type:"operatorname",mode:r.mode,body:Je(o),alwaysHandleSupSub:"\\operatornamewithlimits"===n,limits:!1,parentIsSupSub:!1}},htmlBuilder:an,mathmlBuilder:(e,t)=>{let r=vt(e.body,t.withFont("mathrm")),n=!0;for(let e=0;ee.toText())).join("");r=[new ft.TextNode(e)]}const o=new ft.MathNode("mi",r);o.setAttribute("mathvariant","normal");const s=new ft.MathNode("mo",[bt("\u2061","text")]);return e.parentIsSupSub?new ft.MathNode("mrow",[o,s]):ft.newDocumentFragment([o,s])}}),Nr("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@"),Ze({type:"ordgroup",htmlBuilder(e,t){return e.semisimple?Pe.makeFragment(ot(e.body,t,!1)):Pe.makeSpan(["mord"],ot(e.body,t,!0),t)},mathmlBuilder(e,t){return kt(e.body,t,!0)}}),$e({type:"overline",names:["\\overline"],props:{numArgs:1},handler(e,t){let{parser:r}=e;const n=t[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder(e,t){const r=ct(e.body,t.havingCrampedStyle()),n=Pe.makeLineSpan("overline-line",t),o=t.fontMetrics().defaultRuleThickness,s=Pe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*o},{type:"elem",elem:n},{type:"kern",size:o}]},t);return Pe.makeSpan(["mord","overline"],[s],t)},mathmlBuilder(e,t){const r=new ft.MathNode("mo",[new ft.TextNode("\u203e")]);r.setAttribute("stretchy","true");const n=new ft.MathNode("mover",[St(e.body,t),r]);return n.setAttribute("accent","true"),n}}),$e({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{let{parser:r}=e;const n=t[0];return{type:"phantom",mode:r.mode,body:Je(n)}},htmlBuilder:(e,t)=>{const r=ot(e.body,t.withPhantom(),!1);return Pe.makeFragment(r)},mathmlBuilder:(e,t)=>{const r=vt(e.body,t);return new ft.MathNode("mphantom",r)}}),$e({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{let{parser:r}=e;const n=t[0];return{type:"hphantom",mode:r.mode,body:n}},htmlBuilder:(e,t)=>{let r=Pe.makeSpan([],[ct(e.body,t.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(let e=0;e{const r=vt(Je(e.body),t),n=new ft.MathNode("mphantom",r),o=new ft.MathNode("mpadded",[n]);return o.setAttribute("height","0px"),o.setAttribute("depth","0px"),o}}),$e({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{let{parser:r}=e;const n=t[0];return{type:"vphantom",mode:r.mode,body:n}},htmlBuilder:(e,t)=>{const r=Pe.makeSpan(["inner"],[ct(e.body,t.withPhantom())]),n=Pe.makeSpan(["fix"],[]);return Pe.makeSpan(["mord","rlap"],[r,n],t)},mathmlBuilder:(e,t)=>{const r=vt(Je(e.body),t),n=new ft.MathNode("mphantom",r),o=new ft.MathNode("mpadded",[n]);return o.setAttribute("width","0px"),o}}),$e({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(e,t){let{parser:r}=e;const n=Rt(t[0],"size").value,o=t[1];return{type:"raisebox",mode:r.mode,dy:n,body:o}},htmlBuilder(e,t){const r=ct(e.body,t),n=V(e.dy,t);return Pe.makeVList({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]},t)},mathmlBuilder(e,t){const r=new ft.MathNode("mpadded",[St(e.body,t)]),n=e.dy.number+e.dy.unit;return r.setAttribute("voffset",n),r}}),$e({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0,allowedInArgument:!0},handler(e){let{parser:t}=e;return{type:"internal",mode:t.mode}}}),$e({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler(e,t,r){let{parser:n}=e;const o=r[0],s=Rt(t[0],"size"),i=Rt(t[1],"size");return{type:"rule",mode:n.mode,shift:o&&Rt(o,"size").value,width:s.value,height:i.value}},htmlBuilder(e,t){const r=Pe.makeSpan(["mord","rule"],[],t),n=V(e.width,t),o=V(e.height,t),s=e.shift?V(e.shift,t):0;return r.style.borderRightWidth=P(n),r.style.borderTopWidth=P(o),r.style.bottom=P(s),r.width=n,r.height=o+s,r.depth=-s,r.maxFontSize=1.125*o*t.sizeMultiplier,r},mathmlBuilder(e,t){const r=V(e.width,t),n=V(e.height,t),o=e.shift?V(e.shift,t):0,s=t.color&&t.getColor()||"black",i=new ft.MathNode("mspace");i.setAttribute("mathbackground",s),i.setAttribute("width",P(r)),i.setAttribute("height",P(n));const a=new ft.MathNode("mpadded",[i]);return o>=0?a.setAttribute("height",P(o)):(a.setAttribute("height",P(o)),a.setAttribute("depth",P(-o))),a.setAttribute("voffset",P(o)),a}});const hn=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];$e({type:"sizing",names:hn,props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{let{breakOnTokenText:r,funcName:n,parser:o}=e;const s=o.parseExpression(!1,r);return{type:"sizing",mode:o.mode,size:hn.indexOf(n)+1,body:s}},htmlBuilder:(e,t)=>{const r=t.havingSize(e.size);return ln(e.body,r,t)},mathmlBuilder:(e,t)=>{const r=t.havingSize(e.size),n=vt(e.body,r),o=new ft.MathNode("mstyle",n);return o.setAttribute("mathsize",P(r.sizeMultiplier)),o}}),$e({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:(e,t,r)=>{let{parser:n}=e,o=!1,s=!1;const i=r[0]&&Rt(r[0],"ordgroup");if(i){let e="";for(let t=0;t{const r=Pe.makeSpan([],[ct(e.body,t)]);if(!e.smashHeight&&!e.smashDepth)return r;if(e.smashHeight&&(r.height=0,r.children))for(let e=0;e{const r=new ft.MathNode("mpadded",[St(e.body,t)]);return e.smashHeight&&r.setAttribute("height","0px"),e.smashDepth&&r.setAttribute("depth","0px"),r}}),$e({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){let{parser:n}=e;const o=r[0],s=t[0];return{type:"sqrt",mode:n.mode,body:s,index:o}},htmlBuilder(e,t){let r=ct(e.body,t.havingCrampedStyle());0===r.height&&(r.height=t.fontMetrics().xHeight),r=Pe.wrapFragment(r,t);const n=t.fontMetrics().defaultRuleThickness;let o=n;t.style.idr.height+r.depth+s&&(s=(s+c-r.height-r.depth)/2);const m=a.height-r.height-s-l;r.style.paddingLeft=P(h);const p=Pe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+m)},{type:"elem",elem:a},{type:"kern",size:l}]},t);if(e.index){const r=t.havingStyle(w.SCRIPTSCRIPT),n=ct(e.index,r,t),o=.6*(p.height-p.depth),s=Pe.makeVList({positionType:"shift",positionData:-o,children:[{type:"elem",elem:n}]},t),i=Pe.makeSpan(["root"],[s]);return Pe.makeSpan(["mord","sqrt"],[i,p],t)}return Pe.makeSpan(["mord","sqrt"],[p],t)},mathmlBuilder(e,t){const{body:r,index:n}=e;return n?new ft.MathNode("mroot",[St(r,t),St(n,t)]):new ft.MathNode("msqrt",[St(r,t)])}});const cn={display:w.DISPLAY,text:w.TEXT,script:w.SCRIPT,scriptscript:w.SCRIPTSCRIPT};$e({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e,t){let{breakOnTokenText:r,funcName:n,parser:o}=e;const s=o.parseExpression(!0,r),i=n.slice(1,n.length-5);return{type:"styling",mode:o.mode,style:i,body:s}},htmlBuilder(e,t){const r=cn[e.style],n=t.havingStyle(r).withFont("");return ln(e.body,n,t)},mathmlBuilder(e,t){const r=cn[e.style],n=t.havingStyle(r),o=vt(e.body,n),s=new ft.MathNode("mstyle",o),i={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]}[e.style];return s.setAttribute("scriptlevel",i[0]),s.setAttribute("displaystyle",i[1]),s}});Ze({type:"supsub",htmlBuilder(e,t){const r=function(e,t){const r=e.base;if(r)return"op"===r.type?r.limits&&(t.style.size===w.DISPLAY.size||r.alwaysHandleSupSub)?rn:null:"operatorname"===r.type?r.alwaysHandleSupSub&&(t.style.size===w.DISPLAY.size||r.limits)?an:null:"accent"===r.type?l.isCharacterBox(r.base)?Et:null:"horizBrace"===r.type&&!e.sub===r.isOver?Kr:null;return null}(e,t);if(r)return r(e,t);const{base:n,sup:o,sub:s}=e,i=ct(n,t);let a,h;const c=t.fontMetrics();let m=0,p=0;const u=n&&l.isCharacterBox(n);if(o){const e=t.havingStyle(t.style.sup());a=ct(o,e,t),u||(m=i.height-e.fontMetrics().supDrop*e.sizeMultiplier/t.sizeMultiplier)}if(s){const e=t.havingStyle(t.style.sub());h=ct(s,e,t),u||(p=i.depth+e.fontMetrics().subDrop*e.sizeMultiplier/t.sizeMultiplier)}let d;d=t.style===w.DISPLAY?c.sup1:t.style.cramped?c.sup3:c.sup2;const g=t.sizeMultiplier,f=P(.5/c.ptPerEm/g);let b,y=null;if(h){const t=e.base&&"op"===e.base.type&&e.base.name&&("\\oiint"===e.base.name||"\\oiiint"===e.base.name);(i instanceof Z||t)&&(y=P(-i.italic))}if(a&&h){m=Math.max(m,d,a.depth+.25*c.xHeight),p=Math.max(p,c.sub2);const e=4*c.defaultRuleThickness;if(m-a.depth-(h.height-p)0&&(m+=t,p-=t)}const r=[{type:"elem",elem:h,shift:p,marginRight:f,marginLeft:y},{type:"elem",elem:a,shift:-m,marginRight:f}];b=Pe.makeVList({positionType:"individualShift",children:r},t)}else if(h){p=Math.max(p,c.sub1,h.height-.8*c.xHeight);const e=[{type:"elem",elem:h,marginLeft:y,marginRight:f}];b=Pe.makeVList({positionType:"shift",positionData:p,children:e},t)}else{if(!a)throw new Error("supsub must have either sup or sub.");m=Math.max(m,d,a.depth+.25*c.xHeight),b=Pe.makeVList({positionType:"shift",positionData:-m,children:[{type:"elem",elem:a,marginRight:f}]},t)}const x=lt(i,"right")||"mord";return Pe.makeSpan([x],[i,Pe.makeSpan(["msupsub"],[b])],t)},mathmlBuilder(e,t){let r,n,o=!1;e.base&&"horizBrace"===e.base.type&&(n=!!e.sup,n===e.base.isOver&&(o=!0,r=e.base.isOver)),!e.base||"op"!==e.base.type&&"operatorname"!==e.base.type||(e.base.parentIsSupSub=!0);const s=[St(e.base,t)];let i;if(e.sub&&s.push(St(e.sub,t)),e.sup&&s.push(St(e.sup,t)),o)i=r?"mover":"munder";else if(e.sub)if(e.sup){const r=e.base;i=r&&"op"===r.type&&r.limits&&t.style===w.DISPLAY||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(t.style===w.DISPLAY||r.limits)?"munderover":"msubsup"}else{const r=e.base;i=r&&"op"===r.type&&r.limits&&(t.style===w.DISPLAY||r.alwaysHandleSupSub)||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(r.limits||t.style===w.DISPLAY)?"munder":"msub"}else{const r=e.base;i=r&&"op"===r.type&&r.limits&&(t.style===w.DISPLAY||r.alwaysHandleSupSub)||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(r.limits||t.style===w.DISPLAY)?"mover":"msup"}return new ft.MathNode(i,s)}}),Ze({type:"atom",htmlBuilder(e,t){return Pe.mathsym(e.text,e.mode,t,["m"+e.family])},mathmlBuilder(e,t){const r=new ft.MathNode("mo",[bt(e.text,e.mode)]);if("bin"===e.family){const n=xt(e,t);"bold-italic"===n&&r.setAttribute("mathvariant",n)}else"punct"===e.family?r.setAttribute("separator","true"):"open"!==e.family&&"close"!==e.family||r.setAttribute("stretchy","false");return r}});const mn={mi:"italic",mn:"normal",mtext:"normal"};Ze({type:"mathord",htmlBuilder(e,t){return Pe.makeOrd(e,t,"mathord")},mathmlBuilder(e,t){const r=new ft.MathNode("mi",[bt(e.text,e.mode,t)]),n=xt(e,t)||"italic";return n!==mn[r.type]&&r.setAttribute("mathvariant",n),r}}),Ze({type:"textord",htmlBuilder(e,t){return Pe.makeOrd(e,t,"textord")},mathmlBuilder(e,t){const r=bt(e.text,e.mode,t),n=xt(e,t)||"normal";let o;return o="text"===e.mode?new ft.MathNode("mtext",[r]):/[0-9]/.test(e.text)?new ft.MathNode("mn",[r]):"\\prime"===e.text?new ft.MathNode("mo",[r]):new ft.MathNode("mi",[r]),n!==mn[o.type]&&o.setAttribute("mathvariant",n),o}});const pn={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},un={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};Ze({type:"spacing",htmlBuilder(e,t){if(un.hasOwnProperty(e.text)){const r=un[e.text].className||"";if("text"===e.mode){const n=Pe.makeOrd(e,t,"textord");return n.classes.push(r),n}return Pe.makeSpan(["mspace",r],[Pe.mathsym(e.text,e.mode,t)],t)}if(pn.hasOwnProperty(e.text))return Pe.makeSpan(["mspace",pn[e.text]],[],t);throw new n('Unknown type of space "'+e.text+'"')},mathmlBuilder(e,t){let r;if(!un.hasOwnProperty(e.text)){if(pn.hasOwnProperty(e.text))return new ft.MathNode("mspace");throw new n('Unknown type of space "'+e.text+'"')}return r=new ft.MathNode("mtext",[new ft.TextNode("\xa0")]),r}});const dn=()=>{const e=new ft.MathNode("mtd",[]);return e.setAttribute("width","50%"),e};Ze({type:"tag",mathmlBuilder(e,t){const r=new ft.MathNode("mtable",[new ft.MathNode("mtr",[dn(),new ft.MathNode("mtd",[kt(e.body,t)]),dn(),new ft.MathNode("mtd",[kt(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});const gn={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},fn={"\\textbf":"textbf","\\textmd":"textmd"},bn={"\\textit":"textit","\\textup":"textup"},yn=(e,t)=>{const r=e.font;return r?gn[r]?t.withTextFontFamily(gn[r]):fn[r]?t.withTextFontWeight(fn[r]):"\\emph"===r?"textit"===t.fontShape?t.withTextFontShape("textup"):t.withTextFontShape("textit"):t.withTextFontShape(bn[r]):t};$e({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(e,t){let{parser:r,funcName:n}=e;const o=t[0];return{type:"text",mode:r.mode,body:Je(o),font:n}},htmlBuilder(e,t){const r=yn(e,t),n=ot(e.body,r,!0);return Pe.makeSpan(["mord","text"],n,r)},mathmlBuilder(e,t){const r=yn(e,t);return kt(e.body,r)}}),$e({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(e,t){let{parser:r}=e;return{type:"underline",mode:r.mode,body:t[0]}},htmlBuilder(e,t){const r=ct(e.body,t),n=Pe.makeLineSpan("underline-line",t),o=t.fontMetrics().defaultRuleThickness,s=Pe.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:o},{type:"elem",elem:n},{type:"kern",size:3*o},{type:"elem",elem:r}]},t);return Pe.makeSpan(["mord","underline"],[s],t)},mathmlBuilder(e,t){const r=new ft.MathNode("mo",[new ft.TextNode("\u203e")]);r.setAttribute("stretchy","true");const n=new ft.MathNode("munder",[St(e.body,t),r]);return n.setAttribute("accentunder","true"),n}}),$e({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(e,t){let{parser:r}=e;return{type:"vcenter",mode:r.mode,body:t[0]}},htmlBuilder(e,t){const r=ct(e.body,t),n=t.fontMetrics().axisHeight,o=.5*(r.height-n-(r.depth+n));return Pe.makeVList({positionType:"shift",positionData:o,children:[{type:"elem",elem:r}]},t)},mathmlBuilder(e,t){return new ft.MathNode("mpadded",[St(e.body,t)],["vcenter"])}}),$e({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(e,t,r){throw new n("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(e,t){const r=xn(e),n=[],o=t.havingStyle(t.style.text());for(let t=0;te.body.replace(/ /g,e.star?"\u2423":"\xa0");var wn=We;const vn="[ \r\n\t]",kn="(\\\\[a-zA-Z@]+)"+vn+"*",Sn="[\u0300-\u036f]",Mn=new RegExp(Sn+"+$"),zn="("+vn+"+)|\\\\(\n|[ \r\t]+\n?)[ \r\t]*|([!-\\[\\]-\u2027\u202a-\ud7ff\uf900-\uffff]"+Sn+"*|[\ud800-\udbff][\udc00-\udfff]"+Sn+"*|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5|"+kn+"|\\\\[^\ud800-\udfff])";class An{constructor(e,t){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=t,this.tokenRegex=new RegExp(zn,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,t){this.catcodes[e]=t}lex(){const e=this.input,t=this.tokenRegex.lastIndex;if(t===e.length)return new Ir("EOF",new qr(this,t,t));const r=this.tokenRegex.exec(e);if(null===r||r.index!==t)throw new n("Unexpected character: '"+e[t]+"'",new Ir(e[t],new qr(this,t,t+1)));const o=r[6]||r[3]||(r[2]?"\\ ":" ");if(14===this.catcodes[o]){const t=e.indexOf("\n",this.tokenRegex.lastIndex);return-1===t?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=t+1,this.lex()}return new Ir(o,new qr(this,t,this.tokenRegex.lastIndex))}}class Tn{constructor(e,t){void 0===e&&(e={}),void 0===t&&(t={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=t,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(0===this.undefStack.length)throw new n("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");const e=this.undefStack.pop();for(const t in e)e.hasOwnProperty(t)&&(null==e[t]?delete this.current[t]:this.current[t]=e[t])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,t,r){if(void 0===r&&(r=!1),r){for(let t=0;t0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{const t=this.undefStack[this.undefStack.length-1];t&&!t.hasOwnProperty(e)&&(t[e]=this.current[e])}null==t?delete this.current[e]:this.current[e]=t}}var Bn=Cr;Nr("\\noexpand",(function(e){const t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}})),Nr("\\expandafter",(function(e){const t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}})),Nr("\\@firstoftwo",(function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}})),Nr("\\@secondoftwo",(function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}})),Nr("\\@ifnextchar",(function(e){const t=e.consumeArgs(3);e.consumeSpaces();const r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}})),Nr("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),Nr("\\TextOrMath",(function(e){const t=e.consumeArgs(2);return"text"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}}));const Cn={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};Nr("\\char",(function(e){let t,r=e.popToken(),o="";if("'"===r.text)t=8,r=e.popToken();else if('"'===r.text)t=16,r=e.popToken();else if("`"===r.text)if(r=e.popToken(),"\\"===r.text[0])o=r.text.charCodeAt(1);else{if("EOF"===r.text)throw new n("\\char` missing argument");o=r.text.charCodeAt(0)}else t=10;if(t){if(o=Cn[r.text],null==o||o>=t)throw new n("Invalid base-"+t+" digit "+r.text);let s;for(;null!=(s=Cn[e.future().text])&&s{let s=e.consumeArg().tokens;if(1!==s.length)throw new n("\\newcommand's first argument must be a macro name");const i=s[0].text,a=e.isDefined(i);if(a&&!t)throw new n("\\newcommand{"+i+"} attempting to redefine "+i+"; use \\renewcommand");if(!a&&!r)throw new n("\\renewcommand{"+i+"} when command "+i+" does not yet exist; use \\newcommand");let l=0;if(s=e.consumeArg().tokens,1===s.length&&"["===s[0].text){let t="",r=e.expandNextToken();for(;"]"!==r.text&&"EOF"!==r.text;)t+=r.text,r=e.expandNextToken();if(!t.match(/^\s*[0-9]+\s*$/))throw new n("Invalid number of arguments: "+t);l=parseInt(t),s=e.consumeArg().tokens}return a&&o||e.macros.set(i,{tokens:s,numArgs:l}),""};Nr("\\newcommand",(e=>Nn(e,!1,!0,!1))),Nr("\\renewcommand",(e=>Nn(e,!0,!1,!1))),Nr("\\providecommand",(e=>Nn(e,!0,!0,!0))),Nr("\\message",(e=>{const t=e.consumeArgs(1)[0];return console.log(t.reverse().map((e=>e.text)).join("")),""})),Nr("\\errmessage",(e=>{const t=e.consumeArgs(1)[0];return console.error(t.reverse().map((e=>e.text)).join("")),""})),Nr("\\show",(e=>{const t=e.popToken(),r=t.text;return console.log(t,e.macros.get(r),wn[r],oe.math[r],oe.text[r]),""})),Nr("\\bgroup","{"),Nr("\\egroup","}"),Nr("~","\\nobreakspace"),Nr("\\lq","`"),Nr("\\rq","'"),Nr("\\aa","\\r a"),Nr("\\AA","\\r A"),Nr("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xa9}"),Nr("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"),Nr("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xae}"),Nr("\u212c","\\mathscr{B}"),Nr("\u2130","\\mathscr{E}"),Nr("\u2131","\\mathscr{F}"),Nr("\u210b","\\mathscr{H}"),Nr("\u2110","\\mathscr{I}"),Nr("\u2112","\\mathscr{L}"),Nr("\u2133","\\mathscr{M}"),Nr("\u211b","\\mathscr{R}"),Nr("\u212d","\\mathfrak{C}"),Nr("\u210c","\\mathfrak{H}"),Nr("\u2128","\\mathfrak{Z}"),Nr("\\Bbbk","\\Bbb{k}"),Nr("\xb7","\\cdotp"),Nr("\\llap","\\mathllap{\\textrm{#1}}"),Nr("\\rlap","\\mathrlap{\\textrm{#1}}"),Nr("\\clap","\\mathclap{\\textrm{#1}}"),Nr("\\mathstrut","\\vphantom{(}"),Nr("\\underbar","\\underline{\\text{#1}}"),Nr("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'),Nr("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}"),Nr("\\ne","\\neq"),Nr("\u2260","\\neq"),Nr("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}"),Nr("\u2209","\\notin"),Nr("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}"),Nr("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}"),Nr("\u225a","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225a}}"),Nr("\u225b","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225b}}"),Nr("\u225d","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225d}}"),Nr("\u225e","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225e}}"),Nr("\u225f","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225f}}"),Nr("\u27c2","\\perp"),Nr("\u203c","\\mathclose{!\\mkern-0.8mu!}"),Nr("\u220c","\\notni"),Nr("\u231c","\\ulcorner"),Nr("\u231d","\\urcorner"),Nr("\u231e","\\llcorner"),Nr("\u231f","\\lrcorner"),Nr("\xa9","\\copyright"),Nr("\xae","\\textregistered"),Nr("\ufe0f","\\textregistered"),Nr("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}'),Nr("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}'),Nr("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}'),Nr("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}'),Nr("\\vdots","{\\varvdots\\rule{0pt}{15pt}}"),Nr("\u22ee","\\vdots"),Nr("\\varGamma","\\mathit{\\Gamma}"),Nr("\\varDelta","\\mathit{\\Delta}"),Nr("\\varTheta","\\mathit{\\Theta}"),Nr("\\varLambda","\\mathit{\\Lambda}"),Nr("\\varXi","\\mathit{\\Xi}"),Nr("\\varPi","\\mathit{\\Pi}"),Nr("\\varSigma","\\mathit{\\Sigma}"),Nr("\\varUpsilon","\\mathit{\\Upsilon}"),Nr("\\varPhi","\\mathit{\\Phi}"),Nr("\\varPsi","\\mathit{\\Psi}"),Nr("\\varOmega","\\mathit{\\Omega}"),Nr("\\substack","\\begin{subarray}{c}#1\\end{subarray}"),Nr("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax"),Nr("\\boxed","\\fbox{$\\displaystyle{#1}$}"),Nr("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;"),Nr("\\implies","\\DOTSB\\;\\Longrightarrow\\;"),Nr("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;"),Nr("\\dddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}"),Nr("\\ddddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");const qn={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};Nr("\\dots",(function(e){let t="\\dotso";const r=e.expandAfterFuture().text;return r in qn?t=qn[r]:("\\not"===r.slice(0,4)||r in oe.math&&["bin","rel"].includes(oe.math[r].group))&&(t="\\dotsb"),t}));const In={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};Nr("\\dotso",(function(e){return e.future().text in In?"\\ldots\\,":"\\ldots"})),Nr("\\dotsc",(function(e){const t=e.future().text;return t in In&&","!==t?"\\ldots\\,":"\\ldots"})),Nr("\\cdots",(function(e){return e.future().text in In?"\\@cdots\\,":"\\@cdots"})),Nr("\\dotsb","\\cdots"),Nr("\\dotsm","\\cdots"),Nr("\\dotsi","\\!\\cdots"),Nr("\\dotsx","\\ldots\\,"),Nr("\\DOTSI","\\relax"),Nr("\\DOTSB","\\relax"),Nr("\\DOTSX","\\relax"),Nr("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),Nr("\\,","\\tmspace+{3mu}{.1667em}"),Nr("\\thinspace","\\,"),Nr("\\>","\\mskip{4mu}"),Nr("\\:","\\tmspace+{4mu}{.2222em}"),Nr("\\medspace","\\:"),Nr("\\;","\\tmspace+{5mu}{.2777em}"),Nr("\\thickspace","\\;"),Nr("\\!","\\tmspace-{3mu}{.1667em}"),Nr("\\negthinspace","\\!"),Nr("\\negmedspace","\\tmspace-{4mu}{.2222em}"),Nr("\\negthickspace","\\tmspace-{5mu}{.277em}"),Nr("\\enspace","\\kern.5em "),Nr("\\enskip","\\hskip.5em\\relax"),Nr("\\quad","\\hskip1em\\relax"),Nr("\\qquad","\\hskip2em\\relax"),Nr("\\tag","\\@ifstar\\tag@literal\\tag@paren"),Nr("\\tag@paren","\\tag@literal{({#1})}"),Nr("\\tag@literal",(e=>{if(e.macros.get("\\df@tag"))throw new n("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"})),Nr("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),Nr("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),Nr("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),Nr("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),Nr("\\newline","\\\\\\relax"),Nr("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");const Rn=P(A["Main-Regular"]["T".charCodeAt(0)][1]-.7*A["Main-Regular"]["A".charCodeAt(0)][1]);Nr("\\LaTeX","\\textrm{\\html@mathml{L\\kern-.36em\\raisebox{"+Rn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{LaTeX}}"),Nr("\\KaTeX","\\textrm{\\html@mathml{K\\kern-.17em\\raisebox{"+Rn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{KaTeX}}"),Nr("\\hspace","\\@ifstar\\@hspacer\\@hspace"),Nr("\\@hspace","\\hskip #1\\relax"),Nr("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),Nr("\\ordinarycolon",":"),Nr("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),Nr("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),Nr("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),Nr("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),Nr("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),Nr("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),Nr("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),Nr("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),Nr("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),Nr("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),Nr("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),Nr("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),Nr("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),Nr("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),Nr("\u2237","\\dblcolon"),Nr("\u2239","\\eqcolon"),Nr("\u2254","\\coloneqq"),Nr("\u2255","\\eqqcolon"),Nr("\u2a74","\\Coloneqq"),Nr("\\ratio","\\vcentcolon"),Nr("\\coloncolon","\\dblcolon"),Nr("\\colonequals","\\coloneqq"),Nr("\\coloncolonequals","\\Coloneqq"),Nr("\\equalscolon","\\eqqcolon"),Nr("\\equalscoloncolon","\\Eqqcolon"),Nr("\\colonminus","\\coloneq"),Nr("\\coloncolonminus","\\Coloneq"),Nr("\\minuscolon","\\eqcolon"),Nr("\\minuscoloncolon","\\Eqcolon"),Nr("\\coloncolonapprox","\\Colonapprox"),Nr("\\coloncolonsim","\\Colonsim"),Nr("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Nr("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Nr("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Nr("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Nr("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220c}}"),Nr("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),Nr("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),Nr("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),Nr("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),Nr("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}"),Nr("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}"),Nr("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}"),Nr("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}"),Nr("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}"),Nr("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}"),Nr("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}"),Nr("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}"),Nr("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}"),Nr("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}"),Nr("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}"),Nr("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}"),Nr("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}"),Nr("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}"),Nr("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228a}"),Nr("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2acb}"),Nr("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228b}"),Nr("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2acc}"),Nr("\\imath","\\html@mathml{\\@imath}{\u0131}"),Nr("\\jmath","\\html@mathml{\\@jmath}{\u0237}"),Nr("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27e6}}"),Nr("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27e7}}"),Nr("\u27e6","\\llbracket"),Nr("\u27e7","\\rrbracket"),Nr("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}"),Nr("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}"),Nr("\u2983","\\lBrace"),Nr("\u2984","\\rBrace"),Nr("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29b5}}"),Nr("\u29b5","\\minuso"),Nr("\\darr","\\downarrow"),Nr("\\dArr","\\Downarrow"),Nr("\\Darr","\\Downarrow"),Nr("\\lang","\\langle"),Nr("\\rang","\\rangle"),Nr("\\uarr","\\uparrow"),Nr("\\uArr","\\Uparrow"),Nr("\\Uarr","\\Uparrow"),Nr("\\N","\\mathbb{N}"),Nr("\\R","\\mathbb{R}"),Nr("\\Z","\\mathbb{Z}"),Nr("\\alef","\\aleph"),Nr("\\alefsym","\\aleph"),Nr("\\Alpha","\\mathrm{A}"),Nr("\\Beta","\\mathrm{B}"),Nr("\\bull","\\bullet"),Nr("\\Chi","\\mathrm{X}"),Nr("\\clubs","\\clubsuit"),Nr("\\cnums","\\mathbb{C}"),Nr("\\Complex","\\mathbb{C}"),Nr("\\Dagger","\\ddagger"),Nr("\\diamonds","\\diamondsuit"),Nr("\\empty","\\emptyset"),Nr("\\Epsilon","\\mathrm{E}"),Nr("\\Eta","\\mathrm{H}"),Nr("\\exist","\\exists"),Nr("\\harr","\\leftrightarrow"),Nr("\\hArr","\\Leftrightarrow"),Nr("\\Harr","\\Leftrightarrow"),Nr("\\hearts","\\heartsuit"),Nr("\\image","\\Im"),Nr("\\infin","\\infty"),Nr("\\Iota","\\mathrm{I}"),Nr("\\isin","\\in"),Nr("\\Kappa","\\mathrm{K}"),Nr("\\larr","\\leftarrow"),Nr("\\lArr","\\Leftarrow"),Nr("\\Larr","\\Leftarrow"),Nr("\\lrarr","\\leftrightarrow"),Nr("\\lrArr","\\Leftrightarrow"),Nr("\\Lrarr","\\Leftrightarrow"),Nr("\\Mu","\\mathrm{M}"),Nr("\\natnums","\\mathbb{N}"),Nr("\\Nu","\\mathrm{N}"),Nr("\\Omicron","\\mathrm{O}"),Nr("\\plusmn","\\pm"),Nr("\\rarr","\\rightarrow"),Nr("\\rArr","\\Rightarrow"),Nr("\\Rarr","\\Rightarrow"),Nr("\\real","\\Re"),Nr("\\reals","\\mathbb{R}"),Nr("\\Reals","\\mathbb{R}"),Nr("\\Rho","\\mathrm{P}"),Nr("\\sdot","\\cdot"),Nr("\\sect","\\S"),Nr("\\spades","\\spadesuit"),Nr("\\sub","\\subset"),Nr("\\sube","\\subseteq"),Nr("\\supe","\\supseteq"),Nr("\\Tau","\\mathrm{T}"),Nr("\\thetasym","\\vartheta"),Nr("\\weierp","\\wp"),Nr("\\Zeta","\\mathrm{Z}"),Nr("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),Nr("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),Nr("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),Nr("\\bra","\\mathinner{\\langle{#1}|}"),Nr("\\ket","\\mathinner{|{#1}\\rangle}"),Nr("\\braket","\\mathinner{\\langle{#1}\\rangle}"),Nr("\\Bra","\\left\\langle#1\\right|"),Nr("\\Ket","\\left|#1\\right\\rangle");const Hn=e=>t=>{const r=t.consumeArg().tokens,n=t.consumeArg().tokens,o=t.consumeArg().tokens,s=t.consumeArg().tokens,i=t.macros.get("|"),a=t.macros.get("\\|");t.macros.beginGroup();const l=t=>r=>{e&&(r.macros.set("|",i),o.length&&r.macros.set("\\|",a));let s=t;if(!t&&o.length){"|"===r.future().text&&(r.popToken(),s=!0)}return{tokens:s?o:n,numArgs:0}};t.macros.set("|",l(!1)),o.length&&t.macros.set("\\|",l(!0));const h=t.consumeArg().tokens,c=t.expandTokens([...s,...h,...r]);return t.macros.endGroup(),{tokens:c.reverse(),numArgs:0}};Nr("\\bra@ket",Hn(!1)),Nr("\\bra@set",Hn(!0)),Nr("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"),Nr("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"),Nr("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"),Nr("\\angln","{\\angl n}"),Nr("\\blue","\\textcolor{##6495ed}{#1}"),Nr("\\orange","\\textcolor{##ffa500}{#1}"),Nr("\\pink","\\textcolor{##ff00af}{#1}"),Nr("\\red","\\textcolor{##df0030}{#1}"),Nr("\\green","\\textcolor{##28ae7b}{#1}"),Nr("\\gray","\\textcolor{gray}{#1}"),Nr("\\purple","\\textcolor{##9d38bd}{#1}"),Nr("\\blueA","\\textcolor{##ccfaff}{#1}"),Nr("\\blueB","\\textcolor{##80f6ff}{#1}"),Nr("\\blueC","\\textcolor{##63d9ea}{#1}"),Nr("\\blueD","\\textcolor{##11accd}{#1}"),Nr("\\blueE","\\textcolor{##0c7f99}{#1}"),Nr("\\tealA","\\textcolor{##94fff5}{#1}"),Nr("\\tealB","\\textcolor{##26edd5}{#1}"),Nr("\\tealC","\\textcolor{##01d1c1}{#1}"),Nr("\\tealD","\\textcolor{##01a995}{#1}"),Nr("\\tealE","\\textcolor{##208170}{#1}"),Nr("\\greenA","\\textcolor{##b6ffb0}{#1}"),Nr("\\greenB","\\textcolor{##8af281}{#1}"),Nr("\\greenC","\\textcolor{##74cf70}{#1}"),Nr("\\greenD","\\textcolor{##1fab54}{#1}"),Nr("\\greenE","\\textcolor{##0d923f}{#1}"),Nr("\\goldA","\\textcolor{##ffd0a9}{#1}"),Nr("\\goldB","\\textcolor{##ffbb71}{#1}"),Nr("\\goldC","\\textcolor{##ff9c39}{#1}"),Nr("\\goldD","\\textcolor{##e07d10}{#1}"),Nr("\\goldE","\\textcolor{##a75a05}{#1}"),Nr("\\redA","\\textcolor{##fca9a9}{#1}"),Nr("\\redB","\\textcolor{##ff8482}{#1}"),Nr("\\redC","\\textcolor{##f9685d}{#1}"),Nr("\\redD","\\textcolor{##e84d39}{#1}"),Nr("\\redE","\\textcolor{##bc2612}{#1}"),Nr("\\maroonA","\\textcolor{##ffbde0}{#1}"),Nr("\\maroonB","\\textcolor{##ff92c6}{#1}"),Nr("\\maroonC","\\textcolor{##ed5fa6}{#1}"),Nr("\\maroonD","\\textcolor{##ca337c}{#1}"),Nr("\\maroonE","\\textcolor{##9e034e}{#1}"),Nr("\\purpleA","\\textcolor{##ddd7ff}{#1}"),Nr("\\purpleB","\\textcolor{##c6b9fc}{#1}"),Nr("\\purpleC","\\textcolor{##aa87ff}{#1}"),Nr("\\purpleD","\\textcolor{##7854ab}{#1}"),Nr("\\purpleE","\\textcolor{##543b78}{#1}"),Nr("\\mintA","\\textcolor{##f5f9e8}{#1}"),Nr("\\mintB","\\textcolor{##edf2df}{#1}"),Nr("\\mintC","\\textcolor{##e0e5cc}{#1}"),Nr("\\grayA","\\textcolor{##f6f7f7}{#1}"),Nr("\\grayB","\\textcolor{##f0f1f2}{#1}"),Nr("\\grayC","\\textcolor{##e3e5e6}{#1}"),Nr("\\grayD","\\textcolor{##d6d8da}{#1}"),Nr("\\grayE","\\textcolor{##babec2}{#1}"),Nr("\\grayF","\\textcolor{##888d93}{#1}"),Nr("\\grayG","\\textcolor{##626569}{#1}"),Nr("\\grayH","\\textcolor{##3b3e40}{#1}"),Nr("\\grayI","\\textcolor{##21242c}{#1}"),Nr("\\kaBlue","\\textcolor{##314453}{#1}"),Nr("\\kaGreen","\\textcolor{##71B307}{#1}");const On={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class En{constructor(e,t,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new Tn(Bn,t.macros),this.mode=r,this.stack=[]}feed(e){this.lexer=new An(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){let t,r,n;if(e){if(this.consumeSpaces(),"["!==this.future().text)return null;t=this.popToken(),({tokens:n,end:r}=this.consumeArg(["]"]))}else({tokens:n,start:t,end:r}=this.consumeArg());return this.pushToken(new Ir("EOF",r.loc)),this.pushTokens(n),new Ir("",qr.range(t,r))}consumeSpaces(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}}consumeArg(e){const t=[],r=e&&e.length>0;r||this.consumeSpaces();const o=this.future();let s,i=0,a=0;do{if(s=this.popToken(),t.push(s),"{"===s.text)++i;else if("}"===s.text){if(--i,-1===i)throw new n("Extra }",s)}else if("EOF"===s.text)throw new n("Unexpected end of input in a macro argument, expected '"+(e&&r?e[a]:"}")+"'",s);if(e&&r)if((0===i||1===i&&"{"===e[a])&&s.text===e[a]){if(++a,a===e.length){t.splice(-a,a);break}}else a=0}while(0!==i||r);return"{"===o.text&&"}"===t[t.length-1].text&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:o,end:s}}consumeArgs(e,t){if(t){if(t.length!==e+1)throw new n("The length of delimiters doesn't match the number of args!");const r=t[0];for(let e=0;ethis.settings.maxExpand)throw new n("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){const t=this.popToken(),r=t.text,o=t.noexpand?null:this._getExpansion(r);if(null==o||e&&o.unexpandable){if(e&&null==o&&"\\"===r[0]&&!this.isDefined(r))throw new n("Undefined control sequence: "+r);return this.pushToken(t),!1}this.countExpansion(1);let s=o.tokens;const i=this.consumeArgs(o.numArgs,o.delimiters);if(o.numArgs){s=s.slice();for(let e=s.length-1;e>=0;--e){let t=s[e];if("#"===t.text){if(0===e)throw new n("Incomplete placeholder at end of macro body",t);if(t=s[--e],"#"===t.text)s.splice(e+1,1);else{if(!/^[1-9]$/.test(t.text))throw new n("Not a valid argument number",t);s.splice(e,2,...i[+t.text-1])}}}}return this.pushTokens(s),s.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(!1===this.expandOnce()){const e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new Ir(e)]):void 0}expandTokens(e){const t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;)if(!1===this.expandOnce(!0)){const e=this.stack.pop();e.treatAsRelax&&(e.noexpand=!1,e.treatAsRelax=!1),t.push(e)}return this.countExpansion(t.length),t}expandMacroAsText(e){const t=this.expandMacro(e);return t?t.map((e=>e.text)).join(""):t}_getExpansion(e){const t=this.macros.get(e);if(null==t)return t;if(1===e.length){const t=this.lexer.catcodes[e];if(null!=t&&13!==t)return}const r="function"==typeof t?t(this):t;if("string"==typeof r){let e=0;if(-1!==r.indexOf("#")){const t=r.replace(/##/g,"");for(;-1!==t.indexOf("#"+(e+1));)++e}const t=new An(r,this.settings),n=[];let o=t.lex();for(;"EOF"!==o.text;)n.push(o),o=t.lex();n.reverse();return{tokens:n,numArgs:e}}return r}isDefined(e){return this.macros.has(e)||wn.hasOwnProperty(e)||oe.math.hasOwnProperty(e)||oe.text.hasOwnProperty(e)||On.hasOwnProperty(e)}isExpandable(e){const t=this.macros.get(e);return null!=t?"string"==typeof t||"function"==typeof t||!t.unexpandable:wn.hasOwnProperty(e)&&!wn[e].primitive}}const Ln=/^[\u208a\u208b\u208c\u208d\u208e\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u2090\u2091\u2095\u1d62\u2c7c\u2096\u2097\u2098\u2099\u2092\u209a\u1d63\u209b\u209c\u1d64\u1d65\u2093\u1d66\u1d67\u1d68\u1d69\u1d6a]/,Dn=Object.freeze({"\u208a":"+","\u208b":"-","\u208c":"=","\u208d":"(","\u208e":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1d62":"i","\u2c7c":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209a":"p","\u1d63":"r","\u209b":"s","\u209c":"t","\u1d64":"u","\u1d65":"v","\u2093":"x","\u1d66":"\u03b2","\u1d67":"\u03b3","\u1d68":"\u03c1","\u1d69":"\u03d5","\u1d6a":"\u03c7","\u207a":"+","\u207b":"-","\u207c":"=","\u207d":"(","\u207e":")","\u2070":"0","\xb9":"1","\xb2":"2","\xb3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1d2c":"A","\u1d2e":"B","\u1d30":"D","\u1d31":"E","\u1d33":"G","\u1d34":"H","\u1d35":"I","\u1d36":"J","\u1d37":"K","\u1d38":"L","\u1d39":"M","\u1d3a":"N","\u1d3c":"O","\u1d3e":"P","\u1d3f":"R","\u1d40":"T","\u1d41":"U","\u2c7d":"V","\u1d42":"W","\u1d43":"a","\u1d47":"b","\u1d9c":"c","\u1d48":"d","\u1d49":"e","\u1da0":"f","\u1d4d":"g","\u02b0":"h","\u2071":"i","\u02b2":"j","\u1d4f":"k","\u02e1":"l","\u1d50":"m","\u207f":"n","\u1d52":"o","\u1d56":"p","\u02b3":"r","\u02e2":"s","\u1d57":"t","\u1d58":"u","\u1d5b":"v","\u02b7":"w","\u02e3":"x","\u02b8":"y","\u1dbb":"z","\u1d5d":"\u03b2","\u1d5e":"\u03b3","\u1d5f":"\u03b4","\u1d60":"\u03d5","\u1d61":"\u03c7","\u1dbf":"\u03b8"}),Vn={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030c":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030a":{text:"\\r",math:"\\mathring"},"\u030b":{text:"\\H"},"\u0327":{text:"\\c"}},Pn={"\xe1":"a\u0301","\xe0":"a\u0300","\xe4":"a\u0308","\u01df":"a\u0308\u0304","\xe3":"a\u0303","\u0101":"a\u0304","\u0103":"a\u0306","\u1eaf":"a\u0306\u0301","\u1eb1":"a\u0306\u0300","\u1eb5":"a\u0306\u0303","\u01ce":"a\u030c","\xe2":"a\u0302","\u1ea5":"a\u0302\u0301","\u1ea7":"a\u0302\u0300","\u1eab":"a\u0302\u0303","\u0227":"a\u0307","\u01e1":"a\u0307\u0304","\xe5":"a\u030a","\u01fb":"a\u030a\u0301","\u1e03":"b\u0307","\u0107":"c\u0301","\u1e09":"c\u0327\u0301","\u010d":"c\u030c","\u0109":"c\u0302","\u010b":"c\u0307","\xe7":"c\u0327","\u010f":"d\u030c","\u1e0b":"d\u0307","\u1e11":"d\u0327","\xe9":"e\u0301","\xe8":"e\u0300","\xeb":"e\u0308","\u1ebd":"e\u0303","\u0113":"e\u0304","\u1e17":"e\u0304\u0301","\u1e15":"e\u0304\u0300","\u0115":"e\u0306","\u1e1d":"e\u0327\u0306","\u011b":"e\u030c","\xea":"e\u0302","\u1ebf":"e\u0302\u0301","\u1ec1":"e\u0302\u0300","\u1ec5":"e\u0302\u0303","\u0117":"e\u0307","\u0229":"e\u0327","\u1e1f":"f\u0307","\u01f5":"g\u0301","\u1e21":"g\u0304","\u011f":"g\u0306","\u01e7":"g\u030c","\u011d":"g\u0302","\u0121":"g\u0307","\u0123":"g\u0327","\u1e27":"h\u0308","\u021f":"h\u030c","\u0125":"h\u0302","\u1e23":"h\u0307","\u1e29":"h\u0327","\xed":"i\u0301","\xec":"i\u0300","\xef":"i\u0308","\u1e2f":"i\u0308\u0301","\u0129":"i\u0303","\u012b":"i\u0304","\u012d":"i\u0306","\u01d0":"i\u030c","\xee":"i\u0302","\u01f0":"j\u030c","\u0135":"j\u0302","\u1e31":"k\u0301","\u01e9":"k\u030c","\u0137":"k\u0327","\u013a":"l\u0301","\u013e":"l\u030c","\u013c":"l\u0327","\u1e3f":"m\u0301","\u1e41":"m\u0307","\u0144":"n\u0301","\u01f9":"n\u0300","\xf1":"n\u0303","\u0148":"n\u030c","\u1e45":"n\u0307","\u0146":"n\u0327","\xf3":"o\u0301","\xf2":"o\u0300","\xf6":"o\u0308","\u022b":"o\u0308\u0304","\xf5":"o\u0303","\u1e4d":"o\u0303\u0301","\u1e4f":"o\u0303\u0308","\u022d":"o\u0303\u0304","\u014d":"o\u0304","\u1e53":"o\u0304\u0301","\u1e51":"o\u0304\u0300","\u014f":"o\u0306","\u01d2":"o\u030c","\xf4":"o\u0302","\u1ed1":"o\u0302\u0301","\u1ed3":"o\u0302\u0300","\u1ed7":"o\u0302\u0303","\u022f":"o\u0307","\u0231":"o\u0307\u0304","\u0151":"o\u030b","\u1e55":"p\u0301","\u1e57":"p\u0307","\u0155":"r\u0301","\u0159":"r\u030c","\u1e59":"r\u0307","\u0157":"r\u0327","\u015b":"s\u0301","\u1e65":"s\u0301\u0307","\u0161":"s\u030c","\u1e67":"s\u030c\u0307","\u015d":"s\u0302","\u1e61":"s\u0307","\u015f":"s\u0327","\u1e97":"t\u0308","\u0165":"t\u030c","\u1e6b":"t\u0307","\u0163":"t\u0327","\xfa":"u\u0301","\xf9":"u\u0300","\xfc":"u\u0308","\u01d8":"u\u0308\u0301","\u01dc":"u\u0308\u0300","\u01d6":"u\u0308\u0304","\u01da":"u\u0308\u030c","\u0169":"u\u0303","\u1e79":"u\u0303\u0301","\u016b":"u\u0304","\u1e7b":"u\u0304\u0308","\u016d":"u\u0306","\u01d4":"u\u030c","\xfb":"u\u0302","\u016f":"u\u030a","\u0171":"u\u030b","\u1e7d":"v\u0303","\u1e83":"w\u0301","\u1e81":"w\u0300","\u1e85":"w\u0308","\u0175":"w\u0302","\u1e87":"w\u0307","\u1e98":"w\u030a","\u1e8d":"x\u0308","\u1e8b":"x\u0307","\xfd":"y\u0301","\u1ef3":"y\u0300","\xff":"y\u0308","\u1ef9":"y\u0303","\u0233":"y\u0304","\u0177":"y\u0302","\u1e8f":"y\u0307","\u1e99":"y\u030a","\u017a":"z\u0301","\u017e":"z\u030c","\u1e91":"z\u0302","\u017c":"z\u0307","\xc1":"A\u0301","\xc0":"A\u0300","\xc4":"A\u0308","\u01de":"A\u0308\u0304","\xc3":"A\u0303","\u0100":"A\u0304","\u0102":"A\u0306","\u1eae":"A\u0306\u0301","\u1eb0":"A\u0306\u0300","\u1eb4":"A\u0306\u0303","\u01cd":"A\u030c","\xc2":"A\u0302","\u1ea4":"A\u0302\u0301","\u1ea6":"A\u0302\u0300","\u1eaa":"A\u0302\u0303","\u0226":"A\u0307","\u01e0":"A\u0307\u0304","\xc5":"A\u030a","\u01fa":"A\u030a\u0301","\u1e02":"B\u0307","\u0106":"C\u0301","\u1e08":"C\u0327\u0301","\u010c":"C\u030c","\u0108":"C\u0302","\u010a":"C\u0307","\xc7":"C\u0327","\u010e":"D\u030c","\u1e0a":"D\u0307","\u1e10":"D\u0327","\xc9":"E\u0301","\xc8":"E\u0300","\xcb":"E\u0308","\u1ebc":"E\u0303","\u0112":"E\u0304","\u1e16":"E\u0304\u0301","\u1e14":"E\u0304\u0300","\u0114":"E\u0306","\u1e1c":"E\u0327\u0306","\u011a":"E\u030c","\xca":"E\u0302","\u1ebe":"E\u0302\u0301","\u1ec0":"E\u0302\u0300","\u1ec4":"E\u0302\u0303","\u0116":"E\u0307","\u0228":"E\u0327","\u1e1e":"F\u0307","\u01f4":"G\u0301","\u1e20":"G\u0304","\u011e":"G\u0306","\u01e6":"G\u030c","\u011c":"G\u0302","\u0120":"G\u0307","\u0122":"G\u0327","\u1e26":"H\u0308","\u021e":"H\u030c","\u0124":"H\u0302","\u1e22":"H\u0307","\u1e28":"H\u0327","\xcd":"I\u0301","\xcc":"I\u0300","\xcf":"I\u0308","\u1e2e":"I\u0308\u0301","\u0128":"I\u0303","\u012a":"I\u0304","\u012c":"I\u0306","\u01cf":"I\u030c","\xce":"I\u0302","\u0130":"I\u0307","\u0134":"J\u0302","\u1e30":"K\u0301","\u01e8":"K\u030c","\u0136":"K\u0327","\u0139":"L\u0301","\u013d":"L\u030c","\u013b":"L\u0327","\u1e3e":"M\u0301","\u1e40":"M\u0307","\u0143":"N\u0301","\u01f8":"N\u0300","\xd1":"N\u0303","\u0147":"N\u030c","\u1e44":"N\u0307","\u0145":"N\u0327","\xd3":"O\u0301","\xd2":"O\u0300","\xd6":"O\u0308","\u022a":"O\u0308\u0304","\xd5":"O\u0303","\u1e4c":"O\u0303\u0301","\u1e4e":"O\u0303\u0308","\u022c":"O\u0303\u0304","\u014c":"O\u0304","\u1e52":"O\u0304\u0301","\u1e50":"O\u0304\u0300","\u014e":"O\u0306","\u01d1":"O\u030c","\xd4":"O\u0302","\u1ed0":"O\u0302\u0301","\u1ed2":"O\u0302\u0300","\u1ed6":"O\u0302\u0303","\u022e":"O\u0307","\u0230":"O\u0307\u0304","\u0150":"O\u030b","\u1e54":"P\u0301","\u1e56":"P\u0307","\u0154":"R\u0301","\u0158":"R\u030c","\u1e58":"R\u0307","\u0156":"R\u0327","\u015a":"S\u0301","\u1e64":"S\u0301\u0307","\u0160":"S\u030c","\u1e66":"S\u030c\u0307","\u015c":"S\u0302","\u1e60":"S\u0307","\u015e":"S\u0327","\u0164":"T\u030c","\u1e6a":"T\u0307","\u0162":"T\u0327","\xda":"U\u0301","\xd9":"U\u0300","\xdc":"U\u0308","\u01d7":"U\u0308\u0301","\u01db":"U\u0308\u0300","\u01d5":"U\u0308\u0304","\u01d9":"U\u0308\u030c","\u0168":"U\u0303","\u1e78":"U\u0303\u0301","\u016a":"U\u0304","\u1e7a":"U\u0304\u0308","\u016c":"U\u0306","\u01d3":"U\u030c","\xdb":"U\u0302","\u016e":"U\u030a","\u0170":"U\u030b","\u1e7c":"V\u0303","\u1e82":"W\u0301","\u1e80":"W\u0300","\u1e84":"W\u0308","\u0174":"W\u0302","\u1e86":"W\u0307","\u1e8c":"X\u0308","\u1e8a":"X\u0307","\xdd":"Y\u0301","\u1ef2":"Y\u0300","\u0178":"Y\u0308","\u1ef8":"Y\u0303","\u0232":"Y\u0304","\u0176":"Y\u0302","\u1e8e":"Y\u0307","\u0179":"Z\u0301","\u017d":"Z\u030c","\u1e90":"Z\u0302","\u017b":"Z\u0307","\u03ac":"\u03b1\u0301","\u1f70":"\u03b1\u0300","\u1fb1":"\u03b1\u0304","\u1fb0":"\u03b1\u0306","\u03ad":"\u03b5\u0301","\u1f72":"\u03b5\u0300","\u03ae":"\u03b7\u0301","\u1f74":"\u03b7\u0300","\u03af":"\u03b9\u0301","\u1f76":"\u03b9\u0300","\u03ca":"\u03b9\u0308","\u0390":"\u03b9\u0308\u0301","\u1fd2":"\u03b9\u0308\u0300","\u1fd1":"\u03b9\u0304","\u1fd0":"\u03b9\u0306","\u03cc":"\u03bf\u0301","\u1f78":"\u03bf\u0300","\u03cd":"\u03c5\u0301","\u1f7a":"\u03c5\u0300","\u03cb":"\u03c5\u0308","\u03b0":"\u03c5\u0308\u0301","\u1fe2":"\u03c5\u0308\u0300","\u1fe1":"\u03c5\u0304","\u1fe0":"\u03c5\u0306","\u03ce":"\u03c9\u0301","\u1f7c":"\u03c9\u0300","\u038e":"\u03a5\u0301","\u1fea":"\u03a5\u0300","\u03ab":"\u03a5\u0308","\u1fe9":"\u03a5\u0304","\u1fe8":"\u03a5\u0306","\u038f":"\u03a9\u0301","\u1ffa":"\u03a9\u0300"};class Fn{constructor(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new En(e,t,this.mode),this.settings=t,this.leftrightDepth=0}expect(e,t){if(void 0===t&&(t=!0),this.fetch().text!==e)throw new n("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()}consume(){this.nextToken=null}fetch(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{const e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){const t=this.nextToken;this.consume(),this.gullet.pushToken(new Ir("}")),this.gullet.pushTokens(e);const r=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,r}parseExpression(e,t){const r=[];for(;;){"math"===this.mode&&this.consumeSpaces();const n=this.fetch();if(-1!==Fn.endOfExpression.indexOf(n.text))break;if(t&&n.text===t)break;if(e&&wn[n.text]&&wn[n.text].infix)break;const o=this.parseAtom(t);if(!o)break;"internal"!==o.type&&r.push(o)}return"text"===this.mode&&this.formLigatures(r),this.handleInfixNodes(r)}handleInfixNodes(e){let t,r=-1;for(let o=0;o=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);const r=oe[this.mode][t].group,n=qr.range(e);let s;if(te.hasOwnProperty(r)){const e=r;s={type:"atom",mode:this.mode,family:e,loc:n,text:t}}else s={type:r,mode:this.mode,loc:n,text:t};o=s}else{if(!(t.charCodeAt(0)>=128))return null;this.settings.strict&&(S(t.charCodeAt(0))?"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'" ('+t.charCodeAt(0)+")",e)),o={type:"textord",mode:"text",loc:qr.range(e),text:t}}if(this.consume(),r)for(let t=0;t{var Y3e=Object.create;var Dy=Object.defineProperty;var X3e=Object.getOwnPropertyDescriptor;var j3e=Object.getOwnPropertyNames;var K3e=Object.getPrototypeOf,Q3e=Object.prototype.hasOwnProperty;var o=(t,e)=>Dy(t,"name",{value:e,configurable:!0});var M=(t,e)=>()=>(t&&(e=t(t=0)),e);var sa=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),dr=(t,e)=>{for(var r in e)Dy(t,r,{get:e[r],enumerable:!0})},W4=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of j3e(e))!Q3e.call(t,i)&&i!==r&&Dy(t,i,{get:()=>e[i],enumerable:!(n=X3e(e,i))||n.enumerable});return t},Lr=(t,e,r)=>(W4(t,e,"default"),r&&W4(r,e,"default")),La=(t,e,r)=>(r=t!=null?Y3e(K3e(t)):{},W4(e||!t||!t.__esModule?Dy(r,"default",{value:t,enumerable:!0}):r,t)),Z3e=t=>W4(Dy({},"__esModule",{value:!0}),t);var J3e,y0,t7,Wz,Y4=M(()=>{"use strict";J3e=Object.freeze({left:0,top:0,width:16,height:16}),y0=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),t7=Object.freeze({...J3e,...y0}),Wz=Object.freeze({...t7,body:"",hidden:!1})});var e5e,Yz,Xz=M(()=>{"use strict";Y4();e5e=Object.freeze({width:null,height:null}),Yz=Object.freeze({...e5e,...y0})});var r7,X4,jz=M(()=>{"use strict";r7=o((t,e,r,n="")=>{let i=t.split(":");if(t.slice(0,1)==="@"){if(i.length<2||i.length>3)return null;n=i.shift().slice(1)}if(i.length>3||!i.length)return null;if(i.length>1){let l=i.pop(),u=i.pop(),h={provider:i.length>0?i[0]:n,prefix:u,name:l};return e&&!X4(h)?null:h}let a=i[0],s=a.split("-");if(s.length>1){let l={provider:n,prefix:s.shift(),name:s.join("-")};return e&&!X4(l)?null:l}if(r&&n===""){let l={provider:n,prefix:"",name:a};return e&&!X4(l,r)?null:l}return null},"stringToIcon"),X4=o((t,e)=>t?!!((e&&t.prefix===""||t.prefix)&&t.name):!1,"validateIconName")});function Kz(t,e){let r={};!t.hFlip!=!e.hFlip&&(r.hFlip=!0),!t.vFlip!=!e.vFlip&&(r.vFlip=!0);let n=((t.rotate||0)+(e.rotate||0))%4;return n&&(r.rotate=n),r}var Qz=M(()=>{"use strict";o(Kz,"mergeIconTransformations")});function n7(t,e){let r=Kz(t,e);for(let n in Wz)n in y0?n in t&&!(n in r)&&(r[n]=y0[n]):n in e?r[n]=e[n]:n in t&&(r[n]=t[n]);return r}var Zz=M(()=>{"use strict";Y4();Qz();o(n7,"mergeIconData")});function Jz(t,e){let r=t.icons,n=t.aliases||Object.create(null),i=Object.create(null);function a(s){if(r[s])return i[s]=[];if(!(s in i)){i[s]=null;let l=n[s]&&n[s].parent,u=l&&a(l);u&&(i[s]=[l].concat(u))}return i[s]}return o(a,"resolve"),(e||Object.keys(r).concat(Object.keys(n))).forEach(a),i}var eG=M(()=>{"use strict";o(Jz,"getIconsTree")});function tG(t,e,r){let n=t.icons,i=t.aliases||Object.create(null),a={};function s(l){a=n7(n[l]||i[l],a)}return o(s,"parse"),s(e),r.forEach(s),n7(t,a)}function i7(t,e){if(t.icons[e])return tG(t,e,[]);let r=Jz(t,[e])[e];return r?tG(t,e,r):null}var rG=M(()=>{"use strict";Zz();eG();o(tG,"internalGetIconData");o(i7,"getIconData")});function a7(t,e,r){if(e===1)return t;if(r=r||100,typeof t=="number")return Math.ceil(t*e*r)/r;if(typeof t!="string")return t;let n=t.split(t5e);if(n===null||!n.length)return t;let i=[],a=n.shift(),s=r5e.test(a);for(;;){if(s){let l=parseFloat(a);isNaN(l)?i.push(a):i.push(Math.ceil(l*e*r)/r)}else i.push(a);if(a=n.shift(),a===void 0)return i.join("");s=!s}}var t5e,r5e,nG=M(()=>{"use strict";t5e=/(-?[0-9.]*[0-9]+[0-9.]*)/g,r5e=/^-?[0-9.]*[0-9]+[0-9.]*$/g;o(a7,"calculateSize")});function n5e(t,e="defs"){let r="",n=t.indexOf("<"+e);for(;n>=0;){let i=t.indexOf(">",n),a=t.indexOf("",a);if(s===-1)break;r+=t.slice(i+1,a).trim(),t=t.slice(0,n).trim()+t.slice(s+1)}return{defs:r,content:t}}function i5e(t,e){return t?""+t+""+e:e}function iG(t,e,r){let n=n5e(t);return i5e(n.defs,e+n.content+r)}var aG=M(()=>{"use strict";o(n5e,"splitSVGDefs");o(i5e,"mergeDefsAndContent");o(iG,"wrapSVGContent")});function s7(t,e){let r={...t7,...t},n={...Yz,...e},i={left:r.left,top:r.top,width:r.width,height:r.height},a=r.body;[r,n].forEach(y=>{let v=[],x=y.hFlip,b=y.vFlip,T=y.rotate;x?b?T+=2:(v.push("translate("+(i.width+i.left).toString()+" "+(0-i.top).toString()+")"),v.push("scale(-1 1)"),i.top=i.left=0):b&&(v.push("translate("+(0-i.left).toString()+" "+(i.height+i.top).toString()+")"),v.push("scale(1 -1)"),i.top=i.left=0);let S;switch(T<0&&(T-=Math.floor(T/4)*4),T=T%4,T){case 1:S=i.height/2+i.top,v.unshift("rotate(90 "+S.toString()+" "+S.toString()+")");break;case 2:v.unshift("rotate(180 "+(i.width/2+i.left).toString()+" "+(i.height/2+i.top).toString()+")");break;case 3:S=i.width/2+i.left,v.unshift("rotate(-90 "+S.toString()+" "+S.toString()+")");break}T%2===1&&(i.left!==i.top&&(S=i.left,i.left=i.top,i.top=S),i.width!==i.height&&(S=i.width,i.width=i.height,i.height=S)),v.length&&(a=iG(a,'',""))});let s=n.width,l=n.height,u=i.width,h=i.height,f,d;s===null?(d=l===null?"1em":l==="auto"?h:l,f=a7(d,u/h)):(f=s==="auto"?u:s,d=l===null?a7(f,h/u):l==="auto"?h:l);let p={},m=o((y,v)=>{a5e(v)||(p[y]=v.toString())},"setAttr");m("width",f),m("height",d);let g=[i.left,i.top,u,h];return p.viewBox=g.join(" "),{attributes:p,viewBox:g,body:a}}var a5e,sG=M(()=>{"use strict";Y4();Xz();nG();aG();a5e=o(t=>t==="unset"||t==="undefined"||t==="none","isUnsetKeyword");o(s7,"iconToSVG")});function o7(t,e=o5e){let r=[],n;for(;n=s5e.exec(t);)r.push(n[1]);if(!r.length)return t;let i="suffix"+(Math.random()*16777216|Date.now()).toString(16);return r.forEach(a=>{let s=typeof e=="function"?e(a):e+(l5e++).toString(),l=a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");t=t.replace(new RegExp('([#;"])('+l+')([")]|\\.[a-z])',"g"),"$1"+s+i+"$3")}),t=t.replace(new RegExp(i,"g"),""),t}var s5e,o5e,l5e,oG=M(()=>{"use strict";s5e=/\sid="(\S+)"/g,o5e="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16),l5e=0;o(o7,"replaceIDs")});function l7(t,e){let r=t.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(let n in e)r+=" "+n+'="'+e[n]+'"';return'"+t+""}var lG=M(()=>{"use strict";o(l7,"iconToHTML")});var cG=M(()=>{"use strict";jz();rG();sG();oG();lG()});var c7,Rn,v0=M(()=>{"use strict";c7=o((t,e,{depth:r=2,clobber:n=!1}={})=>{let i={depth:r,clobber:n};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach(a=>c7(t,a,i)),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach(a=>{t.includes(a)||t.push(a)}),t):t===void 0||r<=0?t!=null&&typeof t=="object"&&typeof e=="object"?Object.assign(t,e):e:(e!==void 0&&typeof t=="object"&&typeof e=="object"&&Object.keys(e).forEach(a=>{typeof e[a]=="object"&&(t[a]===void 0||typeof t[a]=="object")?(t[a]===void 0&&(t[a]=Array.isArray(e[a])?[]:{}),t[a]=c7(t[a],e[a],{depth:r-1,clobber:n})):(n||typeof t[a]!="object"&&typeof e[a]!="object")&&(t[a]=e[a])}),t)},"assignWithDepth"),Rn=c7});var j4=sa((u7,h7)=>{"use strict";(function(t,e){typeof u7=="object"&&typeof h7<"u"?h7.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs=e()})(u7,(function(){"use strict";var t=1e3,e=6e4,r=36e5,n="millisecond",i="second",a="minute",s="hour",l="day",u="week",h="month",f="quarter",d="year",p="date",m="Invalid Date",g=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,v={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:o(function(E){var _=["th","st","nd","rd"],D=E%100;return"["+E+(_[(D-20)%10]||_[D]||_[0])+"]"},"ordinal")},x=o(function(E,_,D){var O=String(E);return!O||O.length>=_?E:""+Array(_+1-O.length).join(D)+E},"m"),b={s:x,z:o(function(E){var _=-E.utcOffset(),D=Math.abs(_),O=Math.floor(D/60),N=D%60;return(_<=0?"+":"-")+x(O,2,"0")+":"+x(N,2,"0")},"z"),m:o(function E(_,D){if(_.date()1)return E(B[0])}else{var F=_.name;S[F]=_,N=F}return!O&&N&&(T=N),N||!O&&T},"t"),A=o(function(E,_){if(k(E))return E.clone();var D=typeof _=="object"?_:{};return D.date=E,D.args=arguments,new I(D)},"O"),L=b;L.l=C,L.i=k,L.w=function(E,_){return A(E,{locale:_.$L,utc:_.$u,x:_.$x,$offset:_.$offset})};var I=(function(){function E(D){this.$L=C(D.locale,null,!0),this.parse(D),this.$x=this.$x||D.x||{},this[w]=!0}o(E,"M");var _=E.prototype;return _.parse=function(D){this.$d=(function(O){var N=O.date,P=O.utc;if(N===null)return new Date(NaN);if(L.u(N))return new Date;if(N instanceof Date)return new Date(N);if(typeof N=="string"&&!/Z$/i.test(N)){var B=N.match(g);if(B){var F=B[2]-1||0,V=(B[7]||"0").substring(0,3);return P?new Date(Date.UTC(B[1],F,B[3]||1,B[4]||0,B[5]||0,B[6]||0,V)):new Date(B[1],F,B[3]||1,B[4]||0,B[5]||0,B[6]||0,V)}}return new Date(N)})(D),this.init()},_.init=function(){var D=this.$d;this.$y=D.getFullYear(),this.$M=D.getMonth(),this.$D=D.getDate(),this.$W=D.getDay(),this.$H=D.getHours(),this.$m=D.getMinutes(),this.$s=D.getSeconds(),this.$ms=D.getMilliseconds()},_.$utils=function(){return L},_.isValid=function(){return this.$d.toString()!==m},_.isSame=function(D,O){var N=A(D);return this.startOf(O)<=N&&N<=this.endOf(O)},_.isAfter=function(D,O){return A(D){"use strict";uG=La(j4(),1),au={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},X={trace:o((...t)=>{},"trace"),debug:o((...t)=>{},"debug"),info:o((...t)=>{},"info"),warn:o((...t)=>{},"warn"),error:o((...t)=>{},"error"),fatal:o((...t)=>{},"fatal")},Ly=o(function(t="fatal"){let e=au.fatal;typeof t=="string"?t.toLowerCase()in au&&(e=au[t]):typeof t=="number"&&(e=t),X.trace=()=>{},X.debug=()=>{},X.info=()=>{},X.warn=()=>{},X.error=()=>{},X.fatal=()=>{},e<=au.fatal&&(X.fatal=console.error?console.error.bind(console,Eo("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",Eo("FATAL"))),e<=au.error&&(X.error=console.error?console.error.bind(console,Eo("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",Eo("ERROR"))),e<=au.warn&&(X.warn=console.warn?console.warn.bind(console,Eo("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",Eo("WARN"))),e<=au.info&&(X.info=console.info?console.info.bind(console,Eo("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",Eo("INFO"))),e<=au.debug&&(X.debug=console.debug?console.debug.bind(console,Eo("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Eo("DEBUG"))),e<=au.trace&&(X.trace=console.debug?console.debug.bind(console,Eo("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Eo("TRACE")))},"setLogLevel"),Eo=o(t=>`%c${(0,uG.default)().format("ss.SSS")} : ${t} : `,"format")});var K4,hG,fG=M(()=>{"use strict";K4={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:o(t=>t>=255?255:t<0?0:t,"r"),g:o(t=>t>=255?255:t<0?0:t,"g"),b:o(t=>t>=255?255:t<0?0:t,"b"),h:o(t=>t%360,"h"),s:o(t=>t>=100?100:t<0?0:t,"s"),l:o(t=>t>=100?100:t<0?0:t,"l"),a:o(t=>t>=1?1:t<0?0:t,"a")},toLinear:o(t=>{let e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},"toLinear"),hue2rgb:o((t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<.16666666666666666?t+(e-t)*6*r:r<.5?e:r<.6666666666666666?t+(e-t)*(.6666666666666666-r)*6:t),"hue2rgb"),hsl2rgb:o(({h:t,s:e,l:r},n)=>{if(!e)return r*2.55;t/=360,e/=100,r/=100;let i=r<.5?r*(1+e):r+e-r*e,a=2*r-i;switch(n){case"r":return K4.hue2rgb(a,i,t+.3333333333333333)*255;case"g":return K4.hue2rgb(a,i,t)*255;case"b":return K4.hue2rgb(a,i,t-.3333333333333333)*255}},"hsl2rgb"),rgb2hsl:o(({r:t,g:e,b:r},n)=>{t/=255,e/=255,r/=255;let i=Math.max(t,e,r),a=Math.min(t,e,r),s=(i+a)/2;if(n==="l")return s*100;if(i===a)return 0;let l=i-a,u=s>.5?l/(2-i-a):l/(i+a);if(n==="s")return u*100;switch(i){case t:return((e-r)/l+(e{"use strict";c5e={clamp:o((t,e,r)=>e>r?Math.min(e,Math.max(r,t)):Math.min(r,Math.max(e,t)),"clamp"),round:o(t=>Math.round(t*1e10)/1e10,"round")},dG=c5e});var u5e,mG,gG=M(()=>{"use strict";u5e={dec2hex:o(t=>{let e=Math.round(t).toString(16);return e.length>1?e:`0${e}`},"dec2hex")},mG=u5e});var h5e,Kt,Xl=M(()=>{"use strict";fG();pG();gG();h5e={channel:hG,lang:dG,unit:mG},Kt=h5e});var su,Ni,Ry=M(()=>{"use strict";Xl();su={};for(let t=0;t<=255;t++)su[t]=Kt.unit.dec2hex(t);Ni={ALL:0,RGB:1,HSL:2}});var f7,yG,vG=M(()=>{"use strict";Ry();f7=class{static{o(this,"Type")}constructor(){this.type=Ni.ALL}get(){return this.type}set(e){if(this.type&&this.type!==e)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=e}reset(){this.type=Ni.ALL}is(e){return this.type===e}},yG=f7});var d7,xG,bG=M(()=>{"use strict";Xl();vG();Ry();d7=class{static{o(this,"Channels")}constructor(e,r){this.color=r,this.changed=!1,this.data=e,this.type=new yG}set(e,r){return this.color=r,this.changed=!1,this.data=e,this.type.type=Ni.ALL,this}_ensureHSL(){let e=this.data,{h:r,s:n,l:i}=e;r===void 0&&(e.h=Kt.channel.rgb2hsl(e,"h")),n===void 0&&(e.s=Kt.channel.rgb2hsl(e,"s")),i===void 0&&(e.l=Kt.channel.rgb2hsl(e,"l"))}_ensureRGB(){let e=this.data,{r,g:n,b:i}=e;r===void 0&&(e.r=Kt.channel.hsl2rgb(e,"r")),n===void 0&&(e.g=Kt.channel.hsl2rgb(e,"g")),i===void 0&&(e.b=Kt.channel.hsl2rgb(e,"b"))}get r(){let e=this.data,r=e.r;return!this.type.is(Ni.HSL)&&r!==void 0?r:(this._ensureHSL(),Kt.channel.hsl2rgb(e,"r"))}get g(){let e=this.data,r=e.g;return!this.type.is(Ni.HSL)&&r!==void 0?r:(this._ensureHSL(),Kt.channel.hsl2rgb(e,"g"))}get b(){let e=this.data,r=e.b;return!this.type.is(Ni.HSL)&&r!==void 0?r:(this._ensureHSL(),Kt.channel.hsl2rgb(e,"b"))}get h(){let e=this.data,r=e.h;return!this.type.is(Ni.RGB)&&r!==void 0?r:(this._ensureRGB(),Kt.channel.rgb2hsl(e,"h"))}get s(){let e=this.data,r=e.s;return!this.type.is(Ni.RGB)&&r!==void 0?r:(this._ensureRGB(),Kt.channel.rgb2hsl(e,"s"))}get l(){let e=this.data,r=e.l;return!this.type.is(Ni.RGB)&&r!==void 0?r:(this._ensureRGB(),Kt.channel.rgb2hsl(e,"l"))}get a(){return this.data.a}set r(e){this.type.set(Ni.RGB),this.changed=!0,this.data.r=e}set g(e){this.type.set(Ni.RGB),this.changed=!0,this.data.g=e}set b(e){this.type.set(Ni.RGB),this.changed=!0,this.data.b=e}set h(e){this.type.set(Ni.HSL),this.changed=!0,this.data.h=e}set s(e){this.type.set(Ni.HSL),this.changed=!0,this.data.s=e}set l(e){this.type.set(Ni.HSL),this.changed=!0,this.data.l=e}set a(e){this.changed=!0,this.data.a=e}},xG=d7});var f5e,fh,Ny=M(()=>{"use strict";bG();f5e=new xG({r:0,g:0,b:0,a:0},"transparent"),fh=f5e});var TG,od,p7=M(()=>{"use strict";Ny();Ry();TG={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:o(t=>{if(t.charCodeAt(0)!==35)return;let e=t.match(TG.re);if(!e)return;let r=e[1],n=parseInt(r,16),i=r.length,a=i%4===0,s=i>4,l=s?1:17,u=s?8:4,h=a?0:-1,f=s?255:15;return fh.set({r:(n>>u*(h+3)&f)*l,g:(n>>u*(h+2)&f)*l,b:(n>>u*(h+1)&f)*l,a:a?(n&f)*l/255:1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:n,a:i}=t;return i<1?`#${su[Math.round(e)]}${su[Math.round(r)]}${su[Math.round(n)]}${su[Math.round(i*255)]}`:`#${su[Math.round(e)]}${su[Math.round(r)]}${su[Math.round(n)]}`},"stringify")},od=TG});var Q4,My,wG=M(()=>{"use strict";Xl();Ny();Q4={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:o(t=>{let e=t.match(Q4.hueRe);if(e){let[,r,n]=e;switch(n){case"grad":return Kt.channel.clamp.h(parseFloat(r)*.9);case"rad":return Kt.channel.clamp.h(parseFloat(r)*180/Math.PI);case"turn":return Kt.channel.clamp.h(parseFloat(r)*360)}}return Kt.channel.clamp.h(parseFloat(t))},"_hue2deg"),parse:o(t=>{let e=t.charCodeAt(0);if(e!==104&&e!==72)return;let r=t.match(Q4.re);if(!r)return;let[,n,i,a,s,l]=r;return fh.set({h:Q4._hue2deg(n),s:Kt.channel.clamp.s(parseFloat(i)),l:Kt.channel.clamp.l(parseFloat(a)),a:s?Kt.channel.clamp.a(l?parseFloat(s)/100:parseFloat(s)):1},t)},"parse"),stringify:o(t=>{let{h:e,s:r,l:n,a:i}=t;return i<1?`hsla(${Kt.lang.round(e)}, ${Kt.lang.round(r)}%, ${Kt.lang.round(n)}%, ${i})`:`hsl(${Kt.lang.round(e)}, ${Kt.lang.round(r)}%, ${Kt.lang.round(n)}%)`},"stringify")},My=Q4});var Z4,m7,kG=M(()=>{"use strict";p7();Z4={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:o(t=>{t=t.toLowerCase();let e=Z4.colors[t];if(e)return od.parse(e)},"parse"),stringify:o(t=>{let e=od.stringify(t);for(let r in Z4.colors)if(Z4.colors[r]===e)return r},"stringify")},m7=Z4});var EG,Iy,SG=M(()=>{"use strict";Xl();Ny();EG={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:o(t=>{let e=t.charCodeAt(0);if(e!==114&&e!==82)return;let r=t.match(EG.re);if(!r)return;let[,n,i,a,s,l,u,h,f]=r;return fh.set({r:Kt.channel.clamp.r(i?parseFloat(n)*2.55:parseFloat(n)),g:Kt.channel.clamp.g(s?parseFloat(a)*2.55:parseFloat(a)),b:Kt.channel.clamp.b(u?parseFloat(l)*2.55:parseFloat(l)),a:h?Kt.channel.clamp.a(f?parseFloat(h)/100:parseFloat(h)):1},t)},"parse"),stringify:o(t=>{let{r:e,g:r,b:n,a:i}=t;return i<1?`rgba(${Kt.lang.round(e)}, ${Kt.lang.round(r)}, ${Kt.lang.round(n)}, ${Kt.lang.round(i)})`:`rgb(${Kt.lang.round(e)}, ${Kt.lang.round(r)}, ${Kt.lang.round(n)})`},"stringify")},Iy=EG});var d5e,Mi,ou=M(()=>{"use strict";p7();wG();kG();SG();Ry();d5e={format:{keyword:m7,hex:od,rgb:Iy,rgba:Iy,hsl:My,hsla:My},parse:o(t=>{if(typeof t!="string")return t;let e=od.parse(t)||Iy.parse(t)||My.parse(t)||m7.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},"parse"),stringify:o(t=>!t.changed&&t.color?t.color:t.type.is(Ni.HSL)||t.data.r===void 0?My.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?Iy.stringify(t):od.stringify(t),"stringify")},Mi=d5e});var p5e,J4,g7=M(()=>{"use strict";Xl();ou();p5e=o((t,e)=>{let r=Mi.parse(t);for(let n in e)r[n]=Kt.channel.clamp[n](e[n]);return Mi.stringify(r)},"change"),J4=p5e});var m5e,Ka,y7=M(()=>{"use strict";Xl();Ny();ou();g7();m5e=o((t,e,r=0,n=1)=>{if(typeof t!="number")return J4(t,{a:e});let i=fh.set({r:Kt.channel.clamp.r(t),g:Kt.channel.clamp.g(e),b:Kt.channel.clamp.b(r),a:Kt.channel.clamp.a(n)});return Mi.stringify(i)},"rgba"),Ka=m5e});var g5e,ld,CG=M(()=>{"use strict";Xl();ou();g5e=o((t,e)=>Kt.lang.round(Mi.parse(t)[e]),"channel"),ld=g5e});var y5e,AG,_G=M(()=>{"use strict";Xl();ou();y5e=o(t=>{let{r:e,g:r,b:n}=Mi.parse(t),i=.2126*Kt.channel.toLinear(e)+.7152*Kt.channel.toLinear(r)+.0722*Kt.channel.toLinear(n);return Kt.lang.round(i)},"luminance"),AG=y5e});var v5e,DG,LG=M(()=>{"use strict";_G();v5e=o(t=>AG(t)>=.5,"isLight"),DG=v5e});var x5e,oa,RG=M(()=>{"use strict";LG();x5e=o(t=>!DG(t),"isDark"),oa=x5e});var b5e,e3,v7=M(()=>{"use strict";Xl();ou();b5e=o((t,e,r)=>{let n=Mi.parse(t),i=n[e],a=Kt.channel.clamp[e](i+r);return i!==a&&(n[e]=a),Mi.stringify(n)},"adjustChannel"),e3=b5e});var T5e,Rt,NG=M(()=>{"use strict";v7();T5e=o((t,e)=>e3(t,"l",e),"lighten"),Rt=T5e});var w5e,Pt,MG=M(()=>{"use strict";v7();w5e=o((t,e)=>e3(t,"l",-e),"darken"),Pt=w5e});var k5e,Pe,IG=M(()=>{"use strict";ou();g7();k5e=o((t,e)=>{let r=Mi.parse(t),n={};for(let i in e)e[i]&&(n[i]=r[i]+e[i]);return J4(t,n)},"adjust"),Pe=k5e});var E5e,OG,PG=M(()=>{"use strict";ou();y7();E5e=o((t,e,r=50)=>{let{r:n,g:i,b:a,a:s}=Mi.parse(t),{r:l,g:u,b:h,a:f}=Mi.parse(e),d=r/100,p=d*2-1,m=s-f,y=((p*m===-1?p:(p+m)/(1+p*m))+1)/2,v=1-y,x=n*y+l*v,b=i*y+u*v,T=a*y+h*v,S=s*d+f*(1-d);return Ka(x,b,T,S)},"mix"),OG=E5e});var S5e,Et,BG=M(()=>{"use strict";ou();PG();S5e=o((t,e=100)=>{let r=Mi.parse(t);return r.r=255-r.r,r.g=255-r.g,r.b=255-r.b,OG(r,t,e)},"invert"),Et=S5e});var FG=M(()=>{"use strict";y7();CG();RG();NG();MG();IG();BG()});var eo=M(()=>{"use strict";FG()});var dh,ph,Oy=M(()=>{"use strict";dh="#ffffff",ph="#f2f2f2"});var wi,x0=M(()=>{"use strict";eo();wi=o((t,e)=>e?Pe(t,{s:-40,l:10}):Pe(t,{s:-40,l:-10}),"mkBorder")});var b7,$G,zG=M(()=>{"use strict";eo();Oy();x0();b7=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||Pe(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||Pe(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||wi(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||wi(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||wi(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||wi(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||Et(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Et(this.tertiaryColor),this.lineColor=this.lineColor||Et(this.background),this.arrowheadColor=this.arrowheadColor||Et(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?Pt(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||this.actorBorder,this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||Pt(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Et(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||Rt(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.vertLineColor=this.vertLineColor||"navy",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.darkMode?(this.rowOdd=this.rowOdd||Pt(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||Pt(this.mainBkg,10)):(this.rowOdd=this.rowOdd||Rt(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||Rt(this.mainBkg,5)),this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Pe(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Pe(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Pe(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Pe(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Pe(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Pe(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||Pe(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Pe(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Pe(this.primaryColor,{h:330}),this.darkMode)for(let r=0;r{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},$G=o(t=>{let e=new b7;return e.calculate(t),e},"getThemeVariables")});var T7,GG,VG=M(()=>{"use strict";eo();x0();T7=class{static{o(this,"Theme")}constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=Rt(this.primaryColor,16),this.tertiaryColor=Pe(this.primaryColor,{h:-160}),this.primaryBorderColor=Et(this.background),this.secondaryBorderColor=wi(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=wi(this.tertiaryColor,this.darkMode),this.primaryTextColor=Et(this.primaryColor),this.secondaryTextColor=Et(this.secondaryColor),this.tertiaryTextColor=Et(this.tertiaryColor),this.lineColor=Et(this.background),this.textColor=Et(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=Rt(Et("#323D47"),10),this.lineColor="calculated",this.border1="#ccc",this.border2=Ka(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=Pt("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=Pt(this.sectionBkgColor,10),this.taskBorderColor=Ka(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=Ka(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.vertLineColor="#00BFFF",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||Rt(this.mainBkg,5)||"#ffffff",this.rowEven=this.rowEven||Pt(this.mainBkg,10),this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){this.secondBkg=Rt(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=Rt(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.actorBorder,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=Rt(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.archEdgeColor=this.lineColor,this.archEdgeArrowColor=this.lineColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=Pe(this.primaryColor,{h:64}),this.fillType3=Pe(this.secondaryColor,{h:64}),this.fillType4=Pe(this.primaryColor,{h:-64}),this.fillType5=Pe(this.secondaryColor,{h:-64}),this.fillType6=Pe(this.primaryColor,{h:128}),this.fillType7=Pe(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Pe(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Pe(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Pe(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Pe(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Pe(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Pe(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Pe(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Pe(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Pe(this.primaryColor,{h:330});for(let e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},GG=o(t=>{let e=new T7;return e.calculate(t),e},"getThemeVariables")});var w7,mh,Py=M(()=>{"use strict";eo();x0();Oy();w7=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=Pe(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=Pe(this.primaryColor,{h:-160}),this.primaryBorderColor=wi(this.primaryColor,this.darkMode),this.secondaryBorderColor=wi(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=wi(this.tertiaryColor,this.darkMode),this.primaryTextColor=Et(this.primaryColor),this.secondaryTextColor=Et(this.secondaryColor),this.tertiaryTextColor=Et(this.tertiaryColor),this.lineColor=Et(this.background),this.textColor=Et(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="rgba(232,232,232, 0.8)",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.vertLineColor="calculated",this.sectionBkgColor=Ka(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.vertLineColor="navy",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd="calculated",this.rowEven="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Pe(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Pe(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Pe(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Pe(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Pe(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Pe(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Pe(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Pe(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Pe(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Pt(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Pt(this.tertiaryColor,40);for(let e=0;e{this[n]==="calculated"&&(this[n]=void 0)}),typeof e!="object"){this.updateColors();return}let r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},mh=o(t=>{let e=new w7;return e.calculate(t),e},"getThemeVariables")});var k7,UG,HG=M(()=>{"use strict";eo();Oy();x0();k7=class{static{o(this,"Theme")}constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=Rt("#cde498",10),this.primaryBorderColor=wi(this.primaryColor,this.darkMode),this.secondaryBorderColor=wi(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=wi(this.tertiaryColor,this.darkMode),this.primaryTextColor=Et(this.primaryColor),this.secondaryTextColor=Et(this.secondaryColor),this.tertiaryTextColor=Et(this.primaryColor),this.lineColor=Et(this.background),this.textColor=Et(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="calculated",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.vertLineColor="#00BFFF",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.actorBorder=Pt(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.actorLineColor=this.actorBorder,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||Pe(this.primaryColor,{h:30}),this.cScale4=this.cScale4||Pe(this.primaryColor,{h:60}),this.cScale5=this.cScale5||Pe(this.primaryColor,{h:90}),this.cScale6=this.cScale6||Pe(this.primaryColor,{h:120}),this.cScale7=this.cScale7||Pe(this.primaryColor,{h:150}),this.cScale8=this.cScale8||Pe(this.primaryColor,{h:210}),this.cScale9=this.cScale9||Pe(this.primaryColor,{h:270}),this.cScale10=this.cScale10||Pe(this.primaryColor,{h:300}),this.cScale11=this.cScale11||Pe(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||Pt(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||Pt(this.tertiaryColor,40);for(let e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},UG=o(t=>{let e=new k7;return e.calculate(t),e},"getThemeVariables")});var E7,qG,WG=M(()=>{"use strict";eo();x0();Oy();E7=class{static{o(this,"Theme")}constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=Rt(this.contrast,55),this.background="#ffffff",this.tertiaryColor=Pe(this.primaryColor,{h:-160}),this.primaryBorderColor=wi(this.primaryColor,this.darkMode),this.secondaryBorderColor=wi(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=wi(this.tertiaryColor,this.darkMode),this.primaryTextColor=Et(this.primaryColor),this.secondaryTextColor=Et(this.secondaryColor),this.tertiaryTextColor=Et(this.tertiaryColor),this.lineColor=Et(this.background),this.textColor=Et(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor=this.actorBorder,this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.vertLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.archEdgeColor="calculated",this.archEdgeArrowColor="calculated",this.archEdgeWidth="3",this.archGroupBorderColor=this.primaryBorderColor,this.archGroupBorderWidth="2px",this.rowOdd=this.rowOdd||Rt(this.mainBkg,75)||"#ffffff",this.rowEven=this.rowEven||"#f4f4f4",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.secondBkg=Rt(this.contrast,55),this.border2=this.contrast,this.actorBorder=Rt(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.actorBorder,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let e=0;e{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}},qG=o(t=>{let e=new E7;return e.calculate(t),e},"getThemeVariables")});var So,t3=M(()=>{"use strict";zG();VG();Py();HG();WG();So={base:{getThemeVariables:$G},dark:{getThemeVariables:GG},default:{getThemeVariables:mh},forest:{getThemeVariables:UG},neutral:{getThemeVariables:qG}}});var ul,YG=M(()=>{"use strict";ul={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200,inheritDir:!1},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,maxLabelWidth:360,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],titleColor:"",titleFontFamily:'"trebuchet ms", verdana, arial, sans-serif',titleFontSize:"4ex"},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1,hideEmptyMembersBox:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,nodeSpacing:140,rankSpacing:80,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showDataLabel:!1,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200,layoutAlgorithm:"cose-bilkent"},kanban:{useMaxWidth:!0,padding:8,sectionWidth:200,ticketBaseUrl:""},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},block:{useMaxWidth:!0,padding:8},packet:{useMaxWidth:!0,rowHeight:32,bitWidth:32,bitsPerRow:32,showBits:!0,paddingX:5,paddingY:5},architecture:{useMaxWidth:!0,padding:40,iconSize:80,fontSize:16},radar:{useMaxWidth:!0,width:600,height:600,marginTop:50,marginRight:50,marginBottom:50,marginLeft:50,axisScaleFactor:1,axisLabelFactor:1.05,curveTension:.17},theme:"default",look:"classic",handDrawnSeed:0,layout:"dagre",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","suppressErrorRendering","maxEdges"],legacyMathML:!1,forceLegacyMathML:!1,deterministicIds:!1,fontSize:16,markdownAutoWrap:!0,suppressErrorRendering:!1}});var XG,jG,KG,ur,Ra=M(()=>{"use strict";t3();YG();XG={...ul,deterministicIDSeed:void 0,elk:{mergeEdges:!1,nodePlacementStrategy:"BRANDES_KOEPF",forceNodeModelOrder:!1,considerModelOrder:"NODES_AND_EDGES"},themeCSS:void 0,themeVariables:So.default.getThemeVariables(),sequence:{...ul.sequence,messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont"),noteFont:o(function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},"noteFont"),actorFont:o(function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}},"actorFont")},class:{hideEmptyMembersBox:!1},gantt:{...ul.gantt,tickInterval:void 0,useWidth:void 0},c4:{...ul.c4,useWidth:void 0,personFont:o(function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},"personFont"),flowchart:{...ul.flowchart,inheritDir:!1},external_personFont:o(function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},"external_personFont"),systemFont:o(function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},"systemFont"),external_systemFont:o(function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},"external_systemFont"),system_dbFont:o(function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},"system_dbFont"),external_system_dbFont:o(function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},"external_system_dbFont"),system_queueFont:o(function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},"system_queueFont"),external_system_queueFont:o(function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},"external_system_queueFont"),containerFont:o(function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},"containerFont"),external_containerFont:o(function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},"external_containerFont"),container_dbFont:o(function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},"container_dbFont"),external_container_dbFont:o(function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},"external_container_dbFont"),container_queueFont:o(function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},"container_queueFont"),external_container_queueFont:o(function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},"external_container_queueFont"),componentFont:o(function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},"componentFont"),external_componentFont:o(function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},"external_componentFont"),component_dbFont:o(function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},"component_dbFont"),external_component_dbFont:o(function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},"external_component_dbFont"),component_queueFont:o(function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},"component_queueFont"),external_component_queueFont:o(function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},"external_component_queueFont"),boundaryFont:o(function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},"boundaryFont"),messageFont:o(function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},"messageFont")},pie:{...ul.pie,useWidth:984},xyChart:{...ul.xyChart,useWidth:void 0},requirement:{...ul.requirement,useWidth:void 0},packet:{...ul.packet},radar:{...ul.radar},treemap:{useMaxWidth:!0,padding:10,diagramPadding:8,showValues:!0,nodeWidth:100,nodeHeight:40,borderWidth:1,valueFontSize:12,labelFontSize:14,valueFormat:","}},jG=o((t,e="")=>Object.keys(t).reduce((r,n)=>Array.isArray(t[n])?r:typeof t[n]=="object"&&t[n]!==null?[...r,e+n,...jG(t[n],"")]:[...r,e+n],[]),"keyify"),KG=new Set(jG(XG,"")),ur=XG});var b0,C5e,S7=M(()=>{"use strict";Ra();pt();b0=o(t=>{if(X.debug("sanitizeDirective called with",t),!(typeof t!="object"||t==null)){if(Array.isArray(t)){t.forEach(e=>b0(e));return}for(let e of Object.keys(t)){if(X.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!KG.has(e)||t[e]==null){X.debug("sanitize deleting key: ",e),delete t[e];continue}if(typeof t[e]=="object"){X.debug("sanitizing object",e),b0(t[e]);continue}let r=["themeCSS","fontFamily","altFontFamily"];for(let n of r)e.includes(n)&&(X.debug("sanitizing css option",e),t[e]=C5e(t[e]))}if(t.themeVariables)for(let e of Object.keys(t.themeVariables)){let r=t.themeVariables[e];r?.match&&!r.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}X.debug("After sanitization",t)}},"sanitizeDirective"),C5e=o(t=>{let e=0,r=0;for(let n of t){if(e{"use strict";v0();pt();t3();Ra();S7();gh=Object.freeze(ur),Es=Rn({},gh),cd=[],By=Rn({},gh),n3=o((t,e)=>{let r=Rn({},t),n={};for(let i of e)eV(i),n=Rn(n,i);if(r=Rn(r,n),n.theme&&n.theme in So){let i=Rn({},r3),a=Rn(i.themeVariables||{},n.themeVariables);r.theme&&r.theme in So&&(r.themeVariables=So[r.theme].getThemeVariables(a))}return By=r,rV(By),By},"updateCurrentConfig"),C7=o(t=>(Es=Rn({},gh),Es=Rn(Es,t),t.theme&&So[t.theme]&&(Es.themeVariables=So[t.theme].getThemeVariables(t.themeVariables)),n3(Es,cd),Es),"setSiteConfig"),ZG=o(t=>{r3=Rn({},t)},"saveConfigFromInitialize"),JG=o(t=>(Es=Rn(Es,t),n3(Es,cd),Es),"updateSiteConfig"),A7=o(()=>Rn({},Es),"getSiteConfig"),i3=o(t=>(rV(t),Rn(By,t),Qt()),"setConfig"),Qt=o(()=>Rn({},By),"getConfig"),eV=o(t=>{t&&(["secure",...Es.secure??[]].forEach(e=>{Object.hasOwn(t,e)&&(X.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])}),Object.keys(t).forEach(e=>{e.startsWith("__")&&delete t[e]}),Object.keys(t).forEach(e=>{typeof t[e]=="string"&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],typeof t[e]=="object"&&eV(t[e])}))},"sanitize"),tV=o(t=>{b0(t),t.fontFamily&&!t.themeVariables?.fontFamily&&(t.themeVariables={...t.themeVariables,fontFamily:t.fontFamily}),cd.push(t),n3(Es,cd)},"addDirective"),Fy=o((t=Es)=>{cd=[],n3(t,cd)},"reset"),A5e={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},QG={},_5e=o(t=>{QG[t]||(X.warn(A5e[t]),QG[t]=!0)},"issueWarning"),rV=o(t=>{t&&(t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&_5e("LAZY_LOAD_DEPRECATED")},"checkConfig"),nV=o(()=>{let t={};r3&&(t=Rn(t,r3));for(let e of cd)t=Rn(t,e);return t},"getUserDefinedConfig")});function Ja(t){return function(e){e instanceof RegExp&&(e.lastIndex=0);for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i2&&arguments[2]!==void 0?arguments[2]:o3;iV&&iV(t,null);let n=e.length;for(;n--;){let i=e[n];if(typeof i=="string"){let a=r(i);a!==i&&(D5e(e)||(e[n]=a),i=a)}t[i]=!0}return t}function B5e(t){for(let e=0;e0&&arguments[0]!==void 0?arguments[0]:X5e(),e=o(Ct=>yV(Ct),"DOMPurify");if(e.version="3.2.6",e.removed=[],!t||!t.document||t.document.nodeType!==Uy.document||!t.Element)return e.isSupported=!1,e;let{document:r}=t,n=r,i=n.currentScript,{DocumentFragment:a,HTMLTemplateElement:s,Node:l,Element:u,NodeFilter:h,NamedNodeMap:f=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:d,DOMParser:p,trustedTypes:m}=t,g=u.prototype,y=Vy(g,"cloneNode"),v=Vy(g,"remove"),x=Vy(g,"nextSibling"),b=Vy(g,"childNodes"),T=Vy(g,"parentNode");if(typeof s=="function"){let Ct=r.createElement("template");Ct.content&&Ct.content.ownerDocument&&(r=Ct.content.ownerDocument)}let S,w="",{implementation:k,createNodeIterator:C,createDocumentFragment:A,getElementsByTagName:L}=r,{importNode:I}=n,R=fV();e.isSupported=typeof dV=="function"&&typeof T=="function"&&k&&k.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:E,ERB_EXPR:_,TMPLIT_EXPR:D,DATA_ATTR:O,ARIA_ATTR:N,IS_SCRIPT_OR_DATA:P,ATTR_WHITESPACE:B,CUSTOM_ELEMENT:F}=hV,{IS_ALLOWED_URI:V}=hV,$=null,U=Nr({},[...oV,...D7,...L7,...R7,...lV]),j=null,ee=Nr({},[...cV,...N7,...uV,...s3]),q=Object.seal(pV(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),oe=null,Q=null,ue=!0,te=!0,re=!1,J=!0,K=!1,ae=!0,Z=!1,de=!1,ne=!1,Te=!1,W=!1,Ve=!1,pe=!0,Be=!1,Ye="user-content-",He=!0,Le=!1,Ie={},Ne=null,Ce=Nr({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Fe=null,fe=Nr({},["audio","video","img","source","image","track"]),xe=null,Y=Nr({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),he="http://www.w3.org/1998/Math/MathML",z="http://www.w3.org/2000/svg",se="http://www.w3.org/1999/xhtml",le=se,ke=!1,ve=null,ye=Nr({},[he,z,se],_7),Re=Nr({},["mi","mo","mn","ms","mtext"]),_e=Nr({},["annotation-xml"]),ze=Nr({},["title","style","font","a","script"]),Ke=null,xt=["application/xhtml+xml","text/html"],We="text/html",Oe=null,et=null,Ue=r.createElement("form"),lt=o(function(Se){return Se instanceof RegExp||Se instanceof Function},"isRegexOrFunction"),Gt=o(function(){let Se=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(et&&et===Se)){if((!Se||typeof Se!="object")&&(Se={}),Se=lu(Se),Ke=xt.indexOf(Se.PARSER_MEDIA_TYPE)===-1?We:Se.PARSER_MEDIA_TYPE,Oe=Ke==="application/xhtml+xml"?_7:o3,$=hl(Se,"ALLOWED_TAGS")?Nr({},Se.ALLOWED_TAGS,Oe):U,j=hl(Se,"ALLOWED_ATTR")?Nr({},Se.ALLOWED_ATTR,Oe):ee,ve=hl(Se,"ALLOWED_NAMESPACES")?Nr({},Se.ALLOWED_NAMESPACES,_7):ye,xe=hl(Se,"ADD_URI_SAFE_ATTR")?Nr(lu(Y),Se.ADD_URI_SAFE_ATTR,Oe):Y,Fe=hl(Se,"ADD_DATA_URI_TAGS")?Nr(lu(fe),Se.ADD_DATA_URI_TAGS,Oe):fe,Ne=hl(Se,"FORBID_CONTENTS")?Nr({},Se.FORBID_CONTENTS,Oe):Ce,oe=hl(Se,"FORBID_TAGS")?Nr({},Se.FORBID_TAGS,Oe):lu({}),Q=hl(Se,"FORBID_ATTR")?Nr({},Se.FORBID_ATTR,Oe):lu({}),Ie=hl(Se,"USE_PROFILES")?Se.USE_PROFILES:!1,ue=Se.ALLOW_ARIA_ATTR!==!1,te=Se.ALLOW_DATA_ATTR!==!1,re=Se.ALLOW_UNKNOWN_PROTOCOLS||!1,J=Se.ALLOW_SELF_CLOSE_IN_ATTR!==!1,K=Se.SAFE_FOR_TEMPLATES||!1,ae=Se.SAFE_FOR_XML!==!1,Z=Se.WHOLE_DOCUMENT||!1,Te=Se.RETURN_DOM||!1,W=Se.RETURN_DOM_FRAGMENT||!1,Ve=Se.RETURN_TRUSTED_TYPE||!1,ne=Se.FORCE_BODY||!1,pe=Se.SANITIZE_DOM!==!1,Be=Se.SANITIZE_NAMED_PROPS||!1,He=Se.KEEP_CONTENT!==!1,Le=Se.IN_PLACE||!1,V=Se.ALLOWED_URI_REGEXP||mV,le=Se.NAMESPACE||se,Re=Se.MATHML_TEXT_INTEGRATION_POINTS||Re,_e=Se.HTML_INTEGRATION_POINTS||_e,q=Se.CUSTOM_ELEMENT_HANDLING||{},Se.CUSTOM_ELEMENT_HANDLING&<(Se.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(q.tagNameCheck=Se.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Se.CUSTOM_ELEMENT_HANDLING&<(Se.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(q.attributeNameCheck=Se.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Se.CUSTOM_ELEMENT_HANDLING&&typeof Se.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(q.allowCustomizedBuiltInElements=Se.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),K&&(te=!1),W&&(Te=!0),Ie&&($=Nr({},lV),j=[],Ie.html===!0&&(Nr($,oV),Nr(j,cV)),Ie.svg===!0&&(Nr($,D7),Nr(j,N7),Nr(j,s3)),Ie.svgFilters===!0&&(Nr($,L7),Nr(j,N7),Nr(j,s3)),Ie.mathMl===!0&&(Nr($,R7),Nr(j,uV),Nr(j,s3))),Se.ADD_TAGS&&($===U&&($=lu($)),Nr($,Se.ADD_TAGS,Oe)),Se.ADD_ATTR&&(j===ee&&(j=lu(j)),Nr(j,Se.ADD_ATTR,Oe)),Se.ADD_URI_SAFE_ATTR&&Nr(xe,Se.ADD_URI_SAFE_ATTR,Oe),Se.FORBID_CONTENTS&&(Ne===Ce&&(Ne=lu(Ne)),Nr(Ne,Se.FORBID_CONTENTS,Oe)),He&&($["#text"]=!0),Z&&Nr($,["html","head","body"]),$.table&&(Nr($,["tbody"]),delete oe.tbody),Se.TRUSTED_TYPES_POLICY){if(typeof Se.TRUSTED_TYPES_POLICY.createHTML!="function")throw Gy('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Se.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Gy('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');S=Se.TRUSTED_TYPES_POLICY,w=S.createHTML("")}else S===void 0&&(S=j5e(m,i)),S!==null&&typeof w=="string"&&(w=S.createHTML(""));Za&&Za(Se),et=Se}},"_parseConfig"),vt=Nr({},[...D7,...L7,...F5e]),Lt=Nr({},[...R7,...$5e]),dt=o(function(Se){let at=T(Se);(!at||!at.tagName)&&(at={namespaceURI:le,tagName:"template"});let Nt=o3(Se.tagName),wr=o3(at.tagName);return ve[Se.namespaceURI]?Se.namespaceURI===z?at.namespaceURI===se?Nt==="svg":at.namespaceURI===he?Nt==="svg"&&(wr==="annotation-xml"||Re[wr]):!!vt[Nt]:Se.namespaceURI===he?at.namespaceURI===se?Nt==="math":at.namespaceURI===z?Nt==="math"&&_e[wr]:!!Lt[Nt]:Se.namespaceURI===se?at.namespaceURI===z&&!_e[wr]||at.namespaceURI===he&&!Re[wr]?!1:!Lt[Nt]&&(ze[Nt]||!vt[Nt]):!!(Ke==="application/xhtml+xml"&&ve[Se.namespaceURI]):!1},"_checkValidNamespace"),nt=o(function(Se){$y(e.removed,{element:Se});try{T(Se).removeChild(Se)}catch{v(Se)}},"_forceRemove"),bt=o(function(Se,at){try{$y(e.removed,{attribute:at.getAttributeNode(Se),from:at})}catch{$y(e.removed,{attribute:null,from:at})}if(at.removeAttribute(Se),Se==="is")if(Te||W)try{nt(at)}catch{}else try{at.setAttribute(Se,"")}catch{}},"_removeAttribute"),wt=o(function(Se){let at=null,Nt=null;if(ne)Se=""+Se;else{let yn=sV(Se,/^[\r\n\t ]+/);Nt=yn&&yn[0]}Ke==="application/xhtml+xml"&&le===se&&(Se=''+Se+"");let wr=S?S.createHTML(Se):Se;if(le===se)try{at=new p().parseFromString(wr,Ke)}catch{}if(!at||!at.documentElement){at=k.createDocument(le,"template",null);try{at.documentElement.innerHTML=ke?w:wr}catch{}}let Tn=at.body||at.documentElement;return Se&&Nt&&Tn.insertBefore(r.createTextNode(Nt),Tn.childNodes[0]||null),le===se?L.call(at,Z?"html":"body")[0]:Z?at.documentElement:Tn},"_initDocument"),yt=o(function(Se){return C.call(Se.ownerDocument||Se,Se,h.SHOW_ELEMENT|h.SHOW_COMMENT|h.SHOW_TEXT|h.SHOW_PROCESSING_INSTRUCTION|h.SHOW_CDATA_SECTION,null)},"_createNodeIterator"),ft=o(function(Se){return Se instanceof d&&(typeof Se.nodeName!="string"||typeof Se.textContent!="string"||typeof Se.removeChild!="function"||!(Se.attributes instanceof f)||typeof Se.removeAttribute!="function"||typeof Se.setAttribute!="function"||typeof Se.namespaceURI!="string"||typeof Se.insertBefore!="function"||typeof Se.hasChildNodes!="function")},"_isClobbered"),Ur=o(function(Se){return typeof l=="function"&&Se instanceof l},"_isNode");function _t(Ct,Se,at){a3(Ct,Nt=>{Nt.call(e,Se,at,et)})}o(_t,"_executeHooks");let bn=o(function(Se){let at=null;if(_t(R.beforeSanitizeElements,Se,null),ft(Se))return nt(Se),!0;let Nt=Oe(Se.nodeName);if(_t(R.uponSanitizeElement,Se,{tagName:Nt,allowedTags:$}),ae&&Se.hasChildNodes()&&!Ur(Se.firstElementChild)&&Qa(/<[/\w!]/g,Se.innerHTML)&&Qa(/<[/\w!]/g,Se.textContent)||Se.nodeType===Uy.progressingInstruction||ae&&Se.nodeType===Uy.comment&&Qa(/<[/\w]/g,Se.data))return nt(Se),!0;if(!$[Nt]||oe[Nt]){if(!oe[Nt]&&cr(Nt)&&(q.tagNameCheck instanceof RegExp&&Qa(q.tagNameCheck,Nt)||q.tagNameCheck instanceof Function&&q.tagNameCheck(Nt)))return!1;if(He&&!Ne[Nt]){let wr=T(Se)||Se.parentNode,Tn=b(Se)||Se.childNodes;if(Tn&&wr){let yn=Tn.length;for(let sn=yn-1;sn>=0;--sn){let Hi=y(Tn[sn],!0);Hi.__removalCount=(Se.__removalCount||0)+1,wr.insertBefore(Hi,x(Se))}}}return nt(Se),!0}return Se instanceof u&&!dt(Se)||(Nt==="noscript"||Nt==="noembed"||Nt==="noframes")&&Qa(/<\/no(script|embed|frames)/i,Se.innerHTML)?(nt(Se),!0):(K&&Se.nodeType===Uy.text&&(at=Se.textContent,a3([E,_,D],wr=>{at=zy(at,wr," ")}),Se.textContent!==at&&($y(e.removed,{element:Se.cloneNode()}),Se.textContent=at)),_t(R.afterSanitizeElements,Se,null),!1)},"_sanitizeElements"),Br=o(function(Se,at,Nt){if(pe&&(at==="id"||at==="name")&&(Nt in r||Nt in Ue))return!1;if(!(te&&!Q[at]&&Qa(O,at))){if(!(ue&&Qa(N,at))){if(!j[at]||Q[at]){if(!(cr(Se)&&(q.tagNameCheck instanceof RegExp&&Qa(q.tagNameCheck,Se)||q.tagNameCheck instanceof Function&&q.tagNameCheck(Se))&&(q.attributeNameCheck instanceof RegExp&&Qa(q.attributeNameCheck,at)||q.attributeNameCheck instanceof Function&&q.attributeNameCheck(at))||at==="is"&&q.allowCustomizedBuiltInElements&&(q.tagNameCheck instanceof RegExp&&Qa(q.tagNameCheck,Nt)||q.tagNameCheck instanceof Function&&q.tagNameCheck(Nt))))return!1}else if(!xe[at]){if(!Qa(V,zy(Nt,B,""))){if(!((at==="src"||at==="xlink:href"||at==="href")&&Se!=="script"&&I5e(Nt,"data:")===0&&Fe[Se])){if(!(re&&!Qa(P,zy(Nt,B,"")))){if(Nt)return!1}}}}}}return!0},"_isValidAttribute"),cr=o(function(Se){return Se!=="annotation-xml"&&sV(Se,F)},"_isBasicCustomElement"),ar=o(function(Se){_t(R.beforeSanitizeAttributes,Se,null);let{attributes:at}=Se;if(!at||ft(Se))return;let Nt={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:j,forceKeepAttr:void 0},wr=at.length;for(;wr--;){let Tn=at[wr],{name:yn,namespaceURI:sn,value:Hi}=Tn,Zs=Oe(yn),Da=Hi,fr=yn==="value"?Da:O5e(Da);if(Nt.attrName=Zs,Nt.attrValue=fr,Nt.keepAttr=!0,Nt.forceKeepAttr=void 0,_t(R.uponSanitizeAttribute,Se,Nt),fr=Nt.attrValue,Be&&(Zs==="id"||Zs==="name")&&(bt(yn,Se),fr=Ye+fr),ae&&Qa(/((--!?|])>)|<\/(style|title)/i,fr)){bt(yn,Se);continue}if(Nt.forceKeepAttr)continue;if(!Nt.keepAttr){bt(yn,Se);continue}if(!J&&Qa(/\/>/i,fr)){bt(yn,Se);continue}K&&a3([E,_,D],kt=>{fr=zy(fr,kt," ")});let it=Oe(Se.nodeName);if(!Br(it,Zs,fr)){bt(yn,Se);continue}if(S&&typeof m=="object"&&typeof m.getAttributeType=="function"&&!sn)switch(m.getAttributeType(it,Zs)){case"TrustedHTML":{fr=S.createHTML(fr);break}case"TrustedScriptURL":{fr=S.createScriptURL(fr);break}}if(fr!==Da)try{sn?Se.setAttributeNS(sn,yn,fr):Se.setAttribute(yn,fr),ft(Se)?nt(Se):aV(e.removed)}catch{bt(yn,Se)}}_t(R.afterSanitizeAttributes,Se,null)},"_sanitizeAttributes"),_r=o(function Ct(Se){let at=null,Nt=yt(Se);for(_t(R.beforeSanitizeShadowDOM,Se,null);at=Nt.nextNode();)_t(R.uponSanitizeShadowNode,at,null),bn(at),ar(at),at.content instanceof a&&Ct(at.content);_t(R.afterSanitizeShadowDOM,Se,null)},"_sanitizeShadowDOM");return e.sanitize=function(Ct){let Se=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},at=null,Nt=null,wr=null,Tn=null;if(ke=!Ct,ke&&(Ct=""),typeof Ct!="string"&&!Ur(Ct))if(typeof Ct.toString=="function"){if(Ct=Ct.toString(),typeof Ct!="string")throw Gy("dirty is not a string, aborting")}else throw Gy("toString is not a function");if(!e.isSupported)return Ct;if(de||Gt(Se),e.removed=[],typeof Ct=="string"&&(Le=!1),Le){if(Ct.nodeName){let Hi=Oe(Ct.nodeName);if(!$[Hi]||oe[Hi])throw Gy("root node is forbidden and cannot be sanitized in-place")}}else if(Ct instanceof l)at=wt(""),Nt=at.ownerDocument.importNode(Ct,!0),Nt.nodeType===Uy.element&&Nt.nodeName==="BODY"||Nt.nodeName==="HTML"?at=Nt:at.appendChild(Nt);else{if(!Te&&!K&&!Z&&Ct.indexOf("<")===-1)return S&&Ve?S.createHTML(Ct):Ct;if(at=wt(Ct),!at)return Te?null:Ve?w:""}at&&ne&&nt(at.firstChild);let yn=yt(Le?Ct:at);for(;wr=yn.nextNode();)bn(wr),ar(wr),wr.content instanceof a&&_r(wr.content);if(Le)return Ct;if(Te){if(W)for(Tn=A.call(at.ownerDocument);at.firstChild;)Tn.appendChild(at.firstChild);else Tn=at;return(j.shadowroot||j.shadowrootmode)&&(Tn=I.call(n,Tn,!0)),Tn}let sn=Z?at.outerHTML:at.innerHTML;return Z&&$["!doctype"]&&at.ownerDocument&&at.ownerDocument.doctype&&at.ownerDocument.doctype.name&&Qa(gV,at.ownerDocument.doctype.name)&&(sn=" +`+sn),K&&a3([E,_,D],Hi=>{sn=zy(sn,Hi," ")}),S&&Ve?S.createHTML(sn):sn},e.setConfig=function(){let Ct=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Gt(Ct),de=!0},e.clearConfig=function(){et=null,de=!1},e.isValidAttribute=function(Ct,Se,at){et||Gt({});let Nt=Oe(Ct),wr=Oe(Se);return Br(Nt,wr,at)},e.addHook=function(Ct,Se){typeof Se=="function"&&$y(R[Ct],Se)},e.removeHook=function(Ct,Se){if(Se!==void 0){let at=N5e(R[Ct],Se);return at===-1?void 0:M5e(R[Ct],at,1)[0]}return aV(R[Ct])},e.removeHooks=function(Ct){R[Ct]=[]},e.removeAllHooks=function(){R=fV()},e}var dV,iV,D5e,L5e,R5e,Za,Co,pV,M7,I7,a3,N5e,aV,$y,M5e,o3,_7,sV,zy,I5e,O5e,hl,Qa,Gy,oV,D7,L7,F5e,R7,$5e,lV,cV,N7,uV,s3,z5e,G5e,V5e,U5e,H5e,mV,q5e,W5e,gV,Y5e,hV,Uy,X5e,j5e,fV,yh,O7=M(()=>{"use strict";({entries:dV,setPrototypeOf:iV,isFrozen:D5e,getPrototypeOf:L5e,getOwnPropertyDescriptor:R5e}=Object),{freeze:Za,seal:Co,create:pV}=Object,{apply:M7,construct:I7}=typeof Reflect<"u"&&Reflect;Za||(Za=o(function(e){return e},"freeze"));Co||(Co=o(function(e){return e},"seal"));M7||(M7=o(function(e,r,n){return e.apply(r,n)},"apply"));I7||(I7=o(function(e,r){return new e(...r)},"construct"));a3=Ja(Array.prototype.forEach),N5e=Ja(Array.prototype.lastIndexOf),aV=Ja(Array.prototype.pop),$y=Ja(Array.prototype.push),M5e=Ja(Array.prototype.splice),o3=Ja(String.prototype.toLowerCase),_7=Ja(String.prototype.toString),sV=Ja(String.prototype.match),zy=Ja(String.prototype.replace),I5e=Ja(String.prototype.indexOf),O5e=Ja(String.prototype.trim),hl=Ja(Object.prototype.hasOwnProperty),Qa=Ja(RegExp.prototype.test),Gy=P5e(TypeError);o(Ja,"unapply");o(P5e,"unconstruct");o(Nr,"addToSet");o(B5e,"cleanArray");o(lu,"clone");o(Vy,"lookupGetter");oV=Za(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),D7=Za(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),L7=Za(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),F5e=Za(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),R7=Za(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),$5e=Za(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),lV=Za(["#text"]),cV=Za(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]),N7=Za(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),uV=Za(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),s3=Za(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),z5e=Co(/\{\{[\w\W]*|[\w\W]*\}\}/gm),G5e=Co(/<%[\w\W]*|[\w\W]*%>/gm),V5e=Co(/\$\{[\w\W]*/gm),U5e=Co(/^data-[\-\w.\u00B7-\uFFFF]+$/),H5e=Co(/^aria-[\-\w]+$/),mV=Co(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),q5e=Co(/^(?:\w+script|data):/i),W5e=Co(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),gV=Co(/^html$/i),Y5e=Co(/^[a-z][.\w]*(-[.\w]+)+$/i),hV=Object.freeze({__proto__:null,ARIA_ATTR:H5e,ATTR_WHITESPACE:W5e,CUSTOM_ELEMENT:Y5e,DATA_ATTR:U5e,DOCTYPE_NAME:gV,ERB_EXPR:G5e,IS_ALLOWED_URI:mV,IS_SCRIPT_OR_DATA:q5e,MUSTACHE_EXPR:z5e,TMPLIT_EXPR:V5e}),Uy={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},X5e=o(function(){return typeof window>"u"?null:window},"getGlobal"),j5e=o(function(e,r){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let n=null,i="data-tt-policy-suffix";r&&r.hasAttribute(i)&&(n=r.getAttribute(i));let a="dompurify"+(n?"#"+n:"");try{return e.createPolicy(a,{createHTML(s){return s},createScriptURL(s){return s}})}catch{return console.warn("TrustedTypes policy "+a+" could not be created."),null}},"_createTrustedTypesPolicy"),fV=o(function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},"_createHooksMap");o(yV,"createDOMPurify");yh=yV()});var jU={};dr(jU,{ParseError:()=>gt,SETTINGS_SCHEMA:()=>Yy,__defineFunction:()=>Mt,__defineMacro:()=>ce,__defineSymbol:()=>G,__domTree:()=>XU,__parse:()=>HU,__renderToDomTree:()=>I3,__renderToHTMLTree:()=>WU,__setFontMetrics:()=>QV,default:()=>zwe,render:()=>EA,renderToString:()=>UU,version:()=>YU});function rTe(t){return String(t).replace(tTe,e=>eTe[e])}function sTe(t){if(t.default)return t.default;var e=t.type,r=Array.isArray(e)?e[0]:e;if(typeof r!="string")return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}function dTe(t){for(var e=0;e=i[0]&&t<=i[1])return r.name}return null}function KV(t){for(var e=0;e=x3[e]&&t<=x3[e+1])return!0;return!1}function QV(t,e){Ql[t]=e}function lA(t,e,r){if(!Ql[e])throw new Error("Font metrics not found for font: "+e+".");var n=t.charCodeAt(0),i=Ql[e][n];if(!i&&t[0]in xV&&(n=xV[t[0]].charCodeAt(0),i=Ql[e][n]),!i&&r==="text"&&KV(n)&&(i=Ql[e][77]),i)return{depth:i[0],height:i[1],italic:i[2],skew:i[3],width:i[4]}}function ETe(t){var e;if(t>=5?e=0:t>=3?e=1:e=2,!P7[e]){var r=P7[e]={cssEmPerMu:l3.quad[e]/18};for(var n in l3)l3.hasOwnProperty(n)&&(r[n]=l3[n][e])}return P7[e]}function wV(t){if(t instanceof Cs)return t;throw new Error("Expected symbolNode but got "+String(t)+".")}function DTe(t){if(t instanceof fd)return t;throw new Error("Expected span but got "+String(t)+".")}function G(t,e,r,n,i,a){Nn[t][i]={font:e,group:r,replace:n},a&&n&&(Nn[t][n]=Nn[t][i])}function Mt(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs,argTypes:n.argTypes,allowedInArgument:!!n.allowedInArgument,allowedInText:!!n.allowedInText,allowedInMath:n.allowedInMath===void 0?!0:n.allowedInMath,numOptionalArgs:n.numOptionalArgs||0,infix:!!n.infix,primitive:!!n.primitive,handler:i},u=0;u0&&(a.push(m3(s,e)),s=[]),a.push(n[l]));s.length>0&&a.push(m3(s,e));var h;r?(h=m3(Ii(r,e,!0)),h.classes=["tag"],a.push(h)):i&&a.push(i);var f=du(["katex-html"],a);if(f.setAttribute("aria-hidden","true"),h){var d=h.children[0];d.style.height=St(f.height+f.depth),f.depth&&(d.style.verticalAlign=St(-f.depth))}return f}function cU(t){return new hd(t)}function $7(t){if(!t)return!1;if(t.type==="mi"&&t.children.length===1){var e=t.children[0];return e instanceof _o&&e.text==="."}else if(t.type==="mo"&&t.children.length===1&&t.getAttribute("separator")==="true"&&t.getAttribute("lspace")==="0em"&&t.getAttribute("rspace")==="0em"){var r=t.children[0];return r instanceof _o&&r.text===","}else return!1}function AV(t,e,r,n,i){var a=As(t,r),s;a.length===1&&a[0]instanceof es&&er.contains(["mrow","mtable"],a[0].type)?s=a[0]:s=new mt.MathNode("mrow",a);var l=new mt.MathNode("annotation",[new mt.TextNode(e)]);l.setAttribute("encoding","application/x-tex");var u=new mt.MathNode("semantics",[s,l]),h=new mt.MathNode("math",[u]);h.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&h.setAttribute("display","block");var f=i?"katex":"katex-mathml";return $e.makeSpan([f],[h])}function Tr(t,e){if(!t||t.type!==e)throw new Error("Expected node of type "+e+", but got "+(t?"node of type "+t.type:String(t)));return t}function fA(t){var e=L3(t);if(!e)throw new Error("Expected node of symbol group type, but got "+(t?"node of type "+t.type:String(t)));return e}function L3(t){return t&&(t.type==="atom"||RTe.hasOwnProperty(t.type))?t:null}function dU(t,e){var r=Ii(t.body,e,!0);return owe([t.mclass],r,e)}function pU(t,e){var r,n=As(t.body,e);return t.mclass==="minner"?r=new mt.MathNode("mpadded",n):t.mclass==="mord"?t.isCharacterBox?(r=n[0],r.type="mi"):r=new mt.MathNode("mi",n):(t.isCharacterBox?(r=n[0],r.type="mo"):r=new mt.MathNode("mo",n),t.mclass==="mbin"?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):t.mclass==="mpunct"?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):t.mclass==="mopen"||t.mclass==="mclose"?(r.attributes.lspace="0em",r.attributes.rspace="0em"):t.mclass==="minner"&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}function uwe(t,e,r){var n=lwe[t];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[e[0]],[e[1]]);case"\\uparrow":case"\\downarrow":{var i=r.callFunction("\\\\cdleft",[e[0]],[]),a={type:"atom",text:n,mode:"math",family:"rel"},s=r.callFunction("\\Big",[a],[]),l=r.callFunction("\\\\cdright",[e[1]],[]),u={type:"ordgroup",mode:"math",body:[i,s,l]};return r.callFunction("\\\\cdparent",[u],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{var h={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[h],[])}default:return{type:"textord",text:" ",mode:"math"}}}function hwe(t){var e=[];for(t.gullet.beginGroup(),t.gullet.macros.set("\\cr","\\\\\\relax"),t.gullet.beginGroup();;){e.push(t.parseExpression(!1,"\\\\")),t.gullet.endGroup(),t.gullet.beginGroup();var r=t.fetch().text;if(r==="&"||r==="\\\\")t.consume();else if(r==="\\end"){e[e.length-1].length===0&&e.pop();break}else throw new gt("Expected \\\\ or \\cr or \\end",t.nextToken)}for(var n=[],i=[n],a=0;a-1))if("<>AV".indexOf(h)>-1)for(var d=0;d<2;d++){for(var p=!0,m=u+1;mAV=|." after @',s[u]);var g=uwe(h,f,t),y={type:"styling",body:[g],mode:"math",style:"display"};n.push(y),l=_V()}a%2===0?n.push(l):n.shift(),n=[],i.push(n)}t.gullet.endGroup(),t.gullet.endGroup();var v=new Array(i[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25});return{type:"array",mode:"math",body:i,arraystretch:1,addJot:!0,rowGaps:[null],cols:v,colSeparationType:"CD",hLinesBeforeRow:new Array(i.length+1).fill([])}}function N3(t,e){var r=L3(t);if(r&&er.contains(Ewe,r.text))return r;throw r?new gt("Invalid delimiter '"+r.text+"' after '"+e.funcName+"'",t):new gt("Invalid delimiter type '"+t.type+"'",t)}function RV(t){if(!t.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}function Jl(t){for(var{type:e,names:r,props:n,handler:i,htmlBuilder:a,mathmlBuilder:s}=t,l={type:e,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:i},u=0;u1||!f)&&y.pop(),x.length{"use strict";to=class t{static{o(this,"SourceLocation")}constructor(e,r,n){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=r,this.end=n}static range(e,r){return r?!e||!e.loc||!r.loc||e.loc.lexer!==r.loc.lexer?null:new t(e.loc.lexer,e.loc.start,r.loc.end):e&&e.loc}},Do=class t{static{o(this,"Token")}constructor(e,r){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=e,this.loc=r}range(e,r){return new t(r,to.range(this,e))}},gt=class t{static{o(this,"ParseError")}constructor(e,r){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var n="KaTeX parse error: "+e,i,a,s=r&&r.loc;if(s&&s.start<=s.end){var l=s.lexer.input;i=s.start,a=s.end,i===l.length?n+=" at end of input: ":n+=" at position "+(i+1)+": ";var u=l.slice(i,a).replace(/[^]/g,"$&\u0332"),h;i>15?h="\u2026"+l.slice(i-15,i):h=l.slice(0,i);var f;a+15":">","<":"<",'"':""","'":"'"},tTe=/[&><"']/g;o(rTe,"escape");jV=o(function t(e){return e.type==="ordgroup"||e.type==="color"?e.body.length===1?t(e.body[0]):e:e.type==="font"?t(e.body):e},"getBaseElem"),nTe=o(function(e){var r=jV(e);return r.type==="mathord"||r.type==="textord"||r.type==="atom"},"isCharacterBox"),iTe=o(function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e},"assert"),aTe=o(function(e){var r=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return r?r[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(r[1])?null:r[1].toLowerCase():"_relative"},"protocolFromUrl"),er={contains:K5e,deflt:Q5e,escape:rTe,hyphenate:J5e,getBaseElem:jV,isCharacterBox:nTe,protocolFromUrl:aTe},Yy={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format "},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color ",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:o(t=>"#"+t,"cliProcessor")},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:o((t,e)=>(e.push(t),e),"cliProcessor")},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:o(t=>Math.max(0,t),"processor"),cli:"--min-rule-thickness ",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:o(t=>Math.max(0,t),"processor"),cli:"-s, --max-size ",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:o(t=>Math.max(0,t),"processor"),cli:"-e, --max-expand ",cliProcessor:o(t=>t==="Infinity"?1/0:parseInt(t),"cliProcessor")},globalGroup:{type:"boolean",cli:!1}};o(sTe,"getDefaultValue");jy=class{static{o(this,"Settings")}constructor(e){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{};for(var r in Yy)if(Yy.hasOwnProperty(r)){var n=Yy[r];this[r]=e[r]!==void 0?n.processor?n.processor(e[r]):e[r]:sTe(n)}}reportNonstrict(e,r,n){var i=this.strict;if(typeof i=="function"&&(i=i(e,r,n)),!(!i||i==="ignore")){if(i===!0||i==="error")throw new gt("LaTeX-incompatible input and strict mode is set to 'error': "+(r+" ["+e+"]"),n);i==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]"))}}useStrictBehavior(e,r,n){var i=this.strict;if(typeof i=="function")try{i=i(e,r,n)}catch{i="error"}return!i||i==="ignore"?!1:i===!0||i==="error"?!0:i==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(r+" ["+e+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+i+"': "+r+" ["+e+"]")),!1)}isTrusted(e){if(e.url&&!e.protocol){var r=er.protocolFromUrl(e.url);if(r==null)return!1;e.protocol=r}var n=typeof this.trust=="function"?this.trust(e):this.trust;return!!n}},jl=class{static{o(this,"Style")}constructor(e,r,n){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=r,this.cramped=n}sup(){return Kl[oTe[this.id]]}sub(){return Kl[lTe[this.id]]}fracNum(){return Kl[cTe[this.id]]}fracDen(){return Kl[uTe[this.id]]}cramp(){return Kl[hTe[this.id]]}text(){return Kl[fTe[this.id]]}isTight(){return this.size>=2}},oA=0,b3=1,k0=2,hu=3,Ky=4,Ao=5,E0=6,ts=7,Kl=[new jl(oA,0,!1),new jl(b3,0,!0),new jl(k0,1,!1),new jl(hu,1,!0),new jl(Ky,2,!1),new jl(Ao,2,!0),new jl(E0,3,!1),new jl(ts,3,!0)],oTe=[Ky,Ao,Ky,Ao,E0,ts,E0,ts],lTe=[Ao,Ao,Ao,Ao,ts,ts,ts,ts],cTe=[k0,hu,Ky,Ao,E0,ts,E0,ts],uTe=[hu,hu,Ao,Ao,ts,ts,ts,ts],hTe=[b3,b3,hu,hu,Ao,Ao,ts,ts],fTe=[oA,b3,k0,hu,k0,hu,k0,hu],nr={DISPLAY:Kl[oA],TEXT:Kl[k0],SCRIPT:Kl[Ky],SCRIPTSCRIPT:Kl[E0]},j7=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];o(dTe,"scriptFromCodepoint");x3=[];j7.forEach(t=>t.blocks.forEach(e=>x3.push(...e)));o(KV,"supportedCodepoint");w0=80,pTe=o(function(e,r){return"M95,"+(622+e+r)+` +c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14 +c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54 +c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10 +s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429 +c69,-144,104.5,-217.7,106.5,-221 +l`+e/2.075+" -"+e+` +c5.3,-9.3,12,-14,20,-14 +H400000v`+(40+e)+`H845.2724 +s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7 +c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z +M`+(834+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtMain"),mTe=o(function(e,r){return"M263,"+(601+e+r)+`c0.7,0,18,39.7,52,119 +c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120 +c340,-704.7,510.7,-1060.3,512,-1067 +l`+e/2.084+" -"+e+` +c4.7,-7.3,11,-11,19,-11 +H40000v`+(40+e)+`H1012.3 +s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232 +c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1 +s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26 +c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize1"),gTe=o(function(e,r){return"M983 "+(10+e+r)+` +l`+e/3.13+" -"+e+` +c4,-6.7,10,-10,18,-10 H400000v`+(40+e)+` +H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7 +s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744 +c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30 +c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722 +c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5 +c53.7,-170.3,84.5,-266.8,92.5,-289.5z +M`+(1001+e)+" "+r+"h400000v"+(40+e)+"h-400000z"},"sqrtSize2"),yTe=o(function(e,r){return"M424,"+(2398+e+r)+` +c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514 +c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20 +s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121 +s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081 +l`+e/4.223+" -"+e+`c4,-6.7,10,-10,18,-10 H400000 +v`+(40+e)+`H1014.6 +s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185 +c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2z M`+(1001+e)+" "+r+` +h400000v`+(40+e)+"h-400000z"},"sqrtSize3"),vTe=o(function(e,r){return"M473,"+(2713+e+r)+` +c339.3,-1799.3,509.3,-2700,510,-2702 l`+e/5.298+" -"+e+` +c3.3,-7.3,9.3,-11,18,-11 H400000v`+(40+e)+`H1017.7 +s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9 +c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200 +c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26 +s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104, +606zM`+(1001+e)+" "+r+"h400000v"+(40+e)+"H1017.7z"},"sqrtSize4"),xTe=o(function(e){var r=e/2;return"M400000 "+e+" H0 L"+r+" 0 l65 45 L145 "+(e-80)+" H400000z"},"phasePath"),bTe=o(function(e,r,n){var i=n-54-r-e;return"M702 "+(e+r)+"H400000"+(40+e)+` +H742v`+i+`l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1 +h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170 +c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 +219 661 l218 661zM702 `+r+"H400000v"+(40+e)+"H742z"},"sqrtTall"),TTe=o(function(e,r,n){r=1e3*r;var i="";switch(e){case"sqrtMain":i=pTe(r,w0);break;case"sqrtSize1":i=mTe(r,w0);break;case"sqrtSize2":i=gTe(r,w0);break;case"sqrtSize3":i=yTe(r,w0);break;case"sqrtSize4":i=vTe(r,w0);break;case"sqrtTall":i=bTe(r,w0,n)}return i},"sqrtPath"),wTe=o(function(e,r){switch(e){case"\u239C":return"M291 0 H417 V"+r+" H291z M291 0 H417 V"+r+" H291z";case"\u2223":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z";case"\u2225":return"M145 0 H188 V"+r+" H145z M145 0 H188 V"+r+" H145z"+("M367 0 H410 V"+r+" H367z M367 0 H410 V"+r+" H367z");case"\u239F":return"M457 0 H583 V"+r+" H457z M457 0 H583 V"+r+" H457z";case"\u23A2":return"M319 0 H403 V"+r+" H319z M319 0 H403 V"+r+" H319z";case"\u23A5":return"M263 0 H347 V"+r+" H263z M263 0 H347 V"+r+" H263z";case"\u23AA":return"M384 0 H504 V"+r+" H384z M384 0 H504 V"+r+" H384z";case"\u23D0":return"M312 0 H355 V"+r+" H312z M312 0 H355 V"+r+" H312z";case"\u2016":return"M257 0 H300 V"+r+" H257z M257 0 H300 V"+r+" H257z"+("M478 0 H521 V"+r+" H478z M478 0 H521 V"+r+" H478z");default:return""}},"innerPath"),vV={doubleleftarrow:`M262 157 +l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 + 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 + 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 +c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 + 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 +-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 +-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z +m8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l +-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 + 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 +-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 +-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 +-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 +c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 +-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120 + 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 +-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 +c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 + 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 + 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 + l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 +-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 + 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 + 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 + 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 +-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,leftgroup:`M400000 80 +H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 + 435 0h399565z`,leftgroupunder:`M400000 262 +H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 + 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 +-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 +-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 +-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 + 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 +-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 +-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z +m0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 + 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 + 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 +-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 + 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 +-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 +v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 +-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 +-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 + 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:`M40 281 V428 H0 V94 H40 V241 H400000 v40z +M40 281 V428 H0 V94 H40 V241 H400000 v40z`,leftmapsto:`M40 281 V448H0V74H40V241H400000v40z +M40 281 V448H0V74H40V241H400000v40z`,leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 +-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 +c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 + 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:`M0 50 h400000 v40H0z m0 194h40000v40H0z +M0 50 h400000 v40H0z m0 194h40000v40H0z`,midbrace:`M200428 334 +c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 +-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 + 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 + 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214 +c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 + 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 + 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 +-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 +-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z +m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 +60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 +-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z +m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 +c0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 +-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z +m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 +85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 +-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z +m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 +c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128 +-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 + 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 + 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 +-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 + 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l +-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 +s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 +c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 + 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 +-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 + 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 + 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 +-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 +-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 + 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 +-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 + 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z +m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 + 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 +-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 +-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 + 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 + 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 +-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z +m0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 + 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 +-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 + 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:`M399960 241 V94 h40 V428 h-40 V281 H0 v-40z +M399960 241 V94 h40 V428 h-40 V281 H0 v-40z`,rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 + 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 +-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 +-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40 + 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 +-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 +-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 +-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 + 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167 +c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 + 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 + 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 +-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 + 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,tilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 +-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 + 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 + 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 +-68.267.847-113-73.952-191-73.952z`,tilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418 +-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 + 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 +c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 + 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,tilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 +-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 + 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 + 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 + -338 0-409-156.573-744-156.573z`,tilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 +-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 + 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 + 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 + -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 +3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 +10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 +-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 +-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 +H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 +c-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 +c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, +-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 +c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 +c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 +s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 +121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 +s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 +c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z +M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 +-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 +13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 +-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 +-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 +151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 +c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 +c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 +c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z +M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, +1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, +-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z +M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`},kTe=o(function(e,r){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v1759 h347 v-84 +H403z M403 1759 V0 H319 V1759 v`+r+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v1759 H0 v84 H347z +M347 1759 V0 H263 V1759 v`+r+" v1759 h84z";case"vert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+" v585 h43z";case"doublevert":return"M145 15 v585 v"+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v`+r+` v585 h43z +M367 15 v585 v`+r+` v585 c2.667,10,9.667,15,21,15 +c10,0,16.667,-5,20,-15 v-585 v`+-r+` v-585 c-2.667,-10,-9.667,-15,-21,-15 +c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v`+r+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+r+` v1715 h263 v84 H319z +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+r+` v1799 H0 v-84 H319z +MM319 602 V0 H403 V602 v`+r+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+r+` v602 h84z +M403 1759 V0 H319 V1759 v`+r+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+r+` v602 h84z +M347 1759 V0 h-84 V1759 v`+r+" v602 h84z";case"lparen":return`M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1 +c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349, +-36,557 l0,`+(r+84)+`c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210, +949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9 +c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5, +-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189 +l0,-`+(r+92)+`c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3, +-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;case"rparen":return`M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3, +63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5 +c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,`+(r+9)+` +c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664 +c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11 +c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17 +c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558 +l0,-`+(r+144)+`c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7, +-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;default:throw new Error("Unknown stretchy delimiter.")}},"tallDelim"),hd=class{static{o(this,"DocumentFragment")}constructor(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}hasClass(e){return er.contains(this.classes,e)}toNode(){for(var e=document.createDocumentFragment(),r=0;rr.toText(),"toText");return this.children.map(e).join("")}},Ql={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},l3={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},xV={\u00C5:"A",\u00D0:"D",\u00DE:"o",\u00E5:"a",\u00F0:"d",\u00FE:"o",\u0410:"A",\u0411:"B",\u0412:"B",\u0413:"F",\u0414:"A",\u0415:"E",\u0416:"K",\u0417:"3",\u0418:"N",\u0419:"N",\u041A:"K",\u041B:"N",\u041C:"M",\u041D:"H",\u041E:"O",\u041F:"N",\u0420:"P",\u0421:"C",\u0422:"T",\u0423:"y",\u0424:"O",\u0425:"X",\u0426:"U",\u0427:"h",\u0428:"W",\u0429:"W",\u042A:"B",\u042B:"X",\u042C:"B",\u042D:"3",\u042E:"X",\u042F:"R",\u0430:"a",\u0431:"b",\u0432:"a",\u0433:"r",\u0434:"y",\u0435:"e",\u0436:"m",\u0437:"e",\u0438:"n",\u0439:"n",\u043A:"n",\u043B:"n",\u043C:"m",\u043D:"n",\u043E:"o",\u043F:"n",\u0440:"p",\u0441:"c",\u0442:"o",\u0443:"y",\u0444:"b",\u0445:"x",\u0446:"n",\u0447:"n",\u0448:"w",\u0449:"w",\u044A:"a",\u044B:"m",\u044C:"a",\u044D:"e",\u044E:"m",\u044F:"r"};o(QV,"setFontMetrics");o(lA,"getCharacterMetrics");P7={};o(ETe,"getGlobalMetrics");STe=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],bV=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],TV=o(function(e,r){return r.size<2?e:STe[e-1][r.size-1]},"sizeAtStyle"),T3=class t{static{o(this,"Options")}constructor(e){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=e.style,this.color=e.color,this.size=e.size||t.BASESIZE,this.textSize=e.textSize||this.size,this.phantom=!!e.phantom,this.font=e.font||"",this.fontFamily=e.fontFamily||"",this.fontWeight=e.fontWeight||"",this.fontShape=e.fontShape||"",this.sizeMultiplier=bV[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var n in e)e.hasOwnProperty(n)&&(r[n]=e[n]);return new t(r)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:TV(this.textSize,e)})}havingCrampedStyle(){return this.havingStyle(this.style.cramp())}havingSize(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:bV[e-1]})}havingBaseStyle(e){e=e||this.style.text();var r=TV(t.BASESIZE,e);return this.size===r&&this.textSize===t.BASESIZE&&this.style===e?this:this.extend({style:e,size:r})}havingBaseSizing(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})}withColor(e){return this.extend({color:e})}withPhantom(){return this.extend({phantom:!0})}withFont(e){return this.extend({font:e})}withTextFontFamily(e){return this.extend({fontFamily:e,font:""})}withTextFontWeight(e){return this.extend({fontWeight:e,font:""})}withTextFontShape(e){return this.extend({fontShape:e,font:""})}sizingClasses(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}baseSizingClasses(){return this.size!==t.BASESIZE?["sizing","reset-size"+this.size,"size"+t.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=ETe(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}};T3.BASESIZE=6;K7={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:803/800,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:803/800},CTe={ex:!0,em:!0,mu:!0},ZV=o(function(e){return typeof e!="string"&&(e=e.unit),e in K7||e in CTe||e==="ex"},"validUnit"),ii=o(function(e,r){var n;if(e.unit in K7)n=K7[e.unit]/r.fontMetrics().ptPerEm/r.sizeMultiplier;else if(e.unit==="mu")n=r.fontMetrics().cssEmPerMu;else{var i;if(r.style.isTight()?i=r.havingStyle(r.style.text()):i=r,e.unit==="ex")n=i.fontMetrics().xHeight;else if(e.unit==="em")n=i.fontMetrics().quad;else throw new gt("Invalid unit: '"+e.unit+"'");i!==r&&(n*=i.sizeMultiplier/r.sizeMultiplier)}return Math.min(e.number*n,r.maxSize)},"calculateSize"),St=o(function(e){return+e.toFixed(4)+"em"},"makeEm"),bh=o(function(e){return e.filter(r=>r).join(" ")},"createClass"),JV=o(function(e,r,n){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=n||{},r){r.style.isTight()&&this.classes.push("mtight");var i=r.getColor();i&&(this.style.color=i)}},"initNode"),eU=o(function(e){var r=document.createElement(e);r.className=bh(this.classes);for(var n in this.style)this.style.hasOwnProperty(n)&&(r.style[n]=this.style[n]);for(var i in this.attributes)this.attributes.hasOwnProperty(i)&&r.setAttribute(i,this.attributes[i]);for(var a=0;a/=\x00-\x1f]/,tU=o(function(e){var r="<"+e;this.classes.length&&(r+=' class="'+er.escape(bh(this.classes))+'"');var n="";for(var i in this.style)this.style.hasOwnProperty(i)&&(n+=er.hyphenate(i)+":"+this.style[i]+";");n&&(r+=' style="'+er.escape(n)+'"');for(var a in this.attributes)if(this.attributes.hasOwnProperty(a)){if(ATe.test(a))throw new gt("Invalid attribute name '"+a+"'");r+=" "+a+'="'+er.escape(this.attributes[a])+'"'}r+=">";for(var s=0;s",r},"toMarkup"),fd=class{static{o(this,"Span")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,JV.call(this,e,n,i),this.children=r||[]}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return er.contains(this.classes,e)}toNode(){return eU.call(this,"span")}toMarkup(){return tU.call(this,"span")}},Qy=class{static{o(this,"Anchor")}constructor(e,r,n,i){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,JV.call(this,r,i),this.children=n||[],this.setAttribute("href",e)}setAttribute(e,r){this.attributes[e]=r}hasClass(e){return er.contains(this.classes,e)}toNode(){return eU.call(this,"a")}toMarkup(){return tU.call(this,"a")}},Q7=class{static{o(this,"Img")}constructor(e,r,n){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=r,this.src=e,this.classes=["mord"],this.style=n}hasClass(e){return er.contains(this.classes,e)}toNode(){var e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(var r in this.style)this.style.hasOwnProperty(r)&&(e.style[r]=this.style[r]);return e}toMarkup(){var e=''+er.escape(this.alt)+'0&&(r=document.createElement("span"),r.style.marginRight=St(this.italic)),this.classes.length>0&&(r=r||document.createElement("span"),r.className=bh(this.classes));for(var n in this.style)this.style.hasOwnProperty(n)&&(r=r||document.createElement("span"),r.style[n]=this.style[n]);return r?(r.appendChild(e),r):e}toMarkup(){var e=!1,r="0&&(n+="margin-right:"+this.italic+"em;");for(var i in this.style)this.style.hasOwnProperty(i)&&(n+=er.hyphenate(i)+":"+this.style[i]+";");n&&(e=!0,r+=' style="'+er.escape(n)+'"');var a=er.escape(this.text);return e?(r+=">",r+=a,r+="",r):a}},dl=class{static{o(this,"SvgNode")}constructor(e,r){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=r||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"svg");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);for(var i=0;i':''}},Zy=class{static{o(this,"LineNode")}constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){var e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"line");for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&r.setAttribute(n,this.attributes[n]);return r}toMarkup(){var e="","\\gt",!0);G(H,ie,Ee,"\u2208","\\in",!0);G(H,ie,Ee,"\uE020","\\@not");G(H,ie,Ee,"\u2282","\\subset",!0);G(H,ie,Ee,"\u2283","\\supset",!0);G(H,ie,Ee,"\u2286","\\subseteq",!0);G(H,ie,Ee,"\u2287","\\supseteq",!0);G(H,we,Ee,"\u2288","\\nsubseteq",!0);G(H,we,Ee,"\u2289","\\nsupseteq",!0);G(H,ie,Ee,"\u22A8","\\models");G(H,ie,Ee,"\u2190","\\leftarrow",!0);G(H,ie,Ee,"\u2264","\\le");G(H,ie,Ee,"\u2264","\\leq",!0);G(H,ie,Ee,"<","\\lt",!0);G(H,ie,Ee,"\u2192","\\rightarrow",!0);G(H,ie,Ee,"\u2192","\\to");G(H,we,Ee,"\u2271","\\ngeq",!0);G(H,we,Ee,"\u2270","\\nleq",!0);G(H,ie,mu,"\xA0","\\ ");G(H,ie,mu,"\xA0","\\space");G(H,ie,mu,"\xA0","\\nobreakspace");G(ct,ie,mu,"\xA0","\\ ");G(ct,ie,mu,"\xA0"," ");G(ct,ie,mu,"\xA0","\\space");G(ct,ie,mu,"\xA0","\\nobreakspace");G(H,ie,mu,null,"\\nobreak");G(H,ie,mu,null,"\\allowbreak");G(H,ie,_3,",",",");G(H,ie,_3,";",";");G(H,we,Ot,"\u22BC","\\barwedge",!0);G(H,we,Ot,"\u22BB","\\veebar",!0);G(H,ie,Ot,"\u2299","\\odot",!0);G(H,ie,Ot,"\u2295","\\oplus",!0);G(H,ie,Ot,"\u2297","\\otimes",!0);G(H,ie,De,"\u2202","\\partial",!0);G(H,ie,Ot,"\u2298","\\oslash",!0);G(H,we,Ot,"\u229A","\\circledcirc",!0);G(H,we,Ot,"\u22A1","\\boxdot",!0);G(H,ie,Ot,"\u25B3","\\bigtriangleup");G(H,ie,Ot,"\u25BD","\\bigtriangledown");G(H,ie,Ot,"\u2020","\\dagger");G(H,ie,Ot,"\u22C4","\\diamond");G(H,ie,Ot,"\u22C6","\\star");G(H,ie,Ot,"\u25C3","\\triangleleft");G(H,ie,Ot,"\u25B9","\\triangleright");G(H,ie,ro,"{","\\{");G(ct,ie,De,"{","\\{");G(ct,ie,De,"{","\\textbraceleft");G(H,ie,rs,"}","\\}");G(ct,ie,De,"}","\\}");G(ct,ie,De,"}","\\textbraceright");G(H,ie,ro,"{","\\lbrace");G(H,ie,rs,"}","\\rbrace");G(H,ie,ro,"[","\\lbrack",!0);G(ct,ie,De,"[","\\lbrack",!0);G(H,ie,rs,"]","\\rbrack",!0);G(ct,ie,De,"]","\\rbrack",!0);G(H,ie,ro,"(","\\lparen",!0);G(H,ie,rs,")","\\rparen",!0);G(ct,ie,De,"<","\\textless",!0);G(ct,ie,De,">","\\textgreater",!0);G(H,ie,ro,"\u230A","\\lfloor",!0);G(H,ie,rs,"\u230B","\\rfloor",!0);G(H,ie,ro,"\u2308","\\lceil",!0);G(H,ie,rs,"\u2309","\\rceil",!0);G(H,ie,De,"\\","\\backslash");G(H,ie,De,"\u2223","|");G(H,ie,De,"\u2223","\\vert");G(ct,ie,De,"|","\\textbar",!0);G(H,ie,De,"\u2225","\\|");G(H,ie,De,"\u2225","\\Vert");G(ct,ie,De,"\u2225","\\textbardbl");G(ct,ie,De,"~","\\textasciitilde");G(ct,ie,De,"\\","\\textbackslash");G(ct,ie,De,"^","\\textasciicircum");G(H,ie,Ee,"\u2191","\\uparrow",!0);G(H,ie,Ee,"\u21D1","\\Uparrow",!0);G(H,ie,Ee,"\u2193","\\downarrow",!0);G(H,ie,Ee,"\u21D3","\\Downarrow",!0);G(H,ie,Ee,"\u2195","\\updownarrow",!0);G(H,ie,Ee,"\u21D5","\\Updownarrow",!0);G(H,ie,ki,"\u2210","\\coprod");G(H,ie,ki,"\u22C1","\\bigvee");G(H,ie,ki,"\u22C0","\\bigwedge");G(H,ie,ki,"\u2A04","\\biguplus");G(H,ie,ki,"\u22C2","\\bigcap");G(H,ie,ki,"\u22C3","\\bigcup");G(H,ie,ki,"\u222B","\\int");G(H,ie,ki,"\u222B","\\intop");G(H,ie,ki,"\u222C","\\iint");G(H,ie,ki,"\u222D","\\iiint");G(H,ie,ki,"\u220F","\\prod");G(H,ie,ki,"\u2211","\\sum");G(H,ie,ki,"\u2A02","\\bigotimes");G(H,ie,ki,"\u2A01","\\bigoplus");G(H,ie,ki,"\u2A00","\\bigodot");G(H,ie,ki,"\u222E","\\oint");G(H,ie,ki,"\u222F","\\oiint");G(H,ie,ki,"\u2230","\\oiiint");G(H,ie,ki,"\u2A06","\\bigsqcup");G(H,ie,ki,"\u222B","\\smallint");G(ct,ie,S0,"\u2026","\\textellipsis");G(H,ie,S0,"\u2026","\\mathellipsis");G(ct,ie,S0,"\u2026","\\ldots",!0);G(H,ie,S0,"\u2026","\\ldots",!0);G(H,ie,S0,"\u22EF","\\@cdots",!0);G(H,ie,S0,"\u22F1","\\ddots",!0);G(H,ie,De,"\u22EE","\\varvdots");G(ct,ie,De,"\u22EE","\\varvdots");G(H,ie,Wn,"\u02CA","\\acute");G(H,ie,Wn,"\u02CB","\\grave");G(H,ie,Wn,"\xA8","\\ddot");G(H,ie,Wn,"~","\\tilde");G(H,ie,Wn,"\u02C9","\\bar");G(H,ie,Wn,"\u02D8","\\breve");G(H,ie,Wn,"\u02C7","\\check");G(H,ie,Wn,"^","\\hat");G(H,ie,Wn,"\u20D7","\\vec");G(H,ie,Wn,"\u02D9","\\dot");G(H,ie,Wn,"\u02DA","\\mathring");G(H,ie,rr,"\uE131","\\@imath");G(H,ie,rr,"\uE237","\\@jmath");G(H,ie,De,"\u0131","\u0131");G(H,ie,De,"\u0237","\u0237");G(ct,ie,De,"\u0131","\\i",!0);G(ct,ie,De,"\u0237","\\j",!0);G(ct,ie,De,"\xDF","\\ss",!0);G(ct,ie,De,"\xE6","\\ae",!0);G(ct,ie,De,"\u0153","\\oe",!0);G(ct,ie,De,"\xF8","\\o",!0);G(ct,ie,De,"\xC6","\\AE",!0);G(ct,ie,De,"\u0152","\\OE",!0);G(ct,ie,De,"\xD8","\\O",!0);G(ct,ie,Wn,"\u02CA","\\'");G(ct,ie,Wn,"\u02CB","\\`");G(ct,ie,Wn,"\u02C6","\\^");G(ct,ie,Wn,"\u02DC","\\~");G(ct,ie,Wn,"\u02C9","\\=");G(ct,ie,Wn,"\u02D8","\\u");G(ct,ie,Wn,"\u02D9","\\.");G(ct,ie,Wn,"\xB8","\\c");G(ct,ie,Wn,"\u02DA","\\r");G(ct,ie,Wn,"\u02C7","\\v");G(ct,ie,Wn,"\xA8",'\\"');G(ct,ie,Wn,"\u02DD","\\H");G(ct,ie,Wn,"\u25EF","\\textcircled");rU={"--":!0,"---":!0,"``":!0,"''":!0};G(ct,ie,De,"\u2013","--",!0);G(ct,ie,De,"\u2013","\\textendash");G(ct,ie,De,"\u2014","---",!0);G(ct,ie,De,"\u2014","\\textemdash");G(ct,ie,De,"\u2018","`",!0);G(ct,ie,De,"\u2018","\\textquoteleft");G(ct,ie,De,"\u2019","'",!0);G(ct,ie,De,"\u2019","\\textquoteright");G(ct,ie,De,"\u201C","``",!0);G(ct,ie,De,"\u201C","\\textquotedblleft");G(ct,ie,De,"\u201D","''",!0);G(ct,ie,De,"\u201D","\\textquotedblright");G(H,ie,De,"\xB0","\\degree",!0);G(ct,ie,De,"\xB0","\\degree");G(ct,ie,De,"\xB0","\\textdegree",!0);G(H,ie,De,"\xA3","\\pounds");G(H,ie,De,"\xA3","\\mathsterling",!0);G(ct,ie,De,"\xA3","\\pounds");G(ct,ie,De,"\xA3","\\textsterling",!0);G(H,we,De,"\u2720","\\maltese");G(ct,we,De,"\u2720","\\maltese");kV='0123456789/@."';for(c3=0;c30)return fl(a,h,i,r,s.concat(f));if(u){var d,p;if(u==="boldsymbol"){var m=ITe(a,i,r,s,n);d=m.fontName,p=[m.fontClass]}else l?(d=aU[u].fontName,p=[u]):(d=p3(u,r.fontWeight,r.fontShape),p=[u,r.fontWeight,r.fontShape]);if(D3(a,d,i).metrics)return fl(a,d,i,r,s.concat(p));if(rU.hasOwnProperty(a)&&d.slice(0,10)==="Typewriter"){for(var g=[],y=0;y{if(bh(t.classes)!==bh(e.classes)||t.skew!==e.skew||t.maxFontSize!==e.maxFontSize)return!1;if(t.classes.length===1){var r=t.classes[0];if(r==="mbin"||r==="mord")return!1}for(var n in t.style)if(t.style.hasOwnProperty(n)&&t.style[n]!==e.style[n])return!1;for(var i in e.style)if(e.style.hasOwnProperty(i)&&t.style[i]!==e.style[i])return!1;return!0},"canCombine"),BTe=o(t=>{for(var e=0;er&&(r=s.height),s.depth>n&&(n=s.depth),s.maxFontSize>i&&(i=s.maxFontSize)}e.height=r,e.depth=n,e.maxFontSize=i},"sizeElementFromChildren"),Ss=o(function(e,r,n,i){var a=new fd(e,r,n,i);return cA(a),a},"makeSpan"),nU=o((t,e,r,n)=>new fd(t,e,r,n),"makeSvgSpan"),FTe=o(function(e,r,n){var i=Ss([e],[],r);return i.height=Math.max(n||r.fontMetrics().defaultRuleThickness,r.minRuleThickness),i.style.borderBottomWidth=St(i.height),i.maxFontSize=1,i},"makeLineSpan"),$Te=o(function(e,r,n,i){var a=new Qy(e,r,n,i);return cA(a),a},"makeAnchor"),iU=o(function(e){var r=new hd(e);return cA(r),r},"makeFragment"),zTe=o(function(e,r){return e instanceof hd?Ss([],[e],r):e},"wrapFragment"),GTe=o(function(e){if(e.positionType==="individualShift"){for(var r=e.children,n=[r[0]],i=-r[0].shift-r[0].elem.depth,a=i,s=1;s{var r=Ss(["mspace"],[],e),n=ii(t,e);return r.style.marginRight=St(n),r},"makeGlue"),p3=o(function(e,r,n){var i="";switch(e){case"amsrm":i="AMS";break;case"textrm":i="Main";break;case"textsf":i="SansSerif";break;case"texttt":i="Typewriter";break;default:i=e}var a;return r==="textbf"&&n==="textit"?a="BoldItalic":r==="textbf"?a="Bold":r==="textit"?a="Italic":a="Regular",i+"-"+a},"retrieveTextFontName"),aU={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathsfit:{variant:"sans-serif-italic",fontName:"SansSerif-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},sU={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},HTe=o(function(e,r){var[n,i,a]=sU[e],s=new Zl(n),l=new dl([s],{width:St(i),height:St(a),style:"width:"+St(i),viewBox:"0 0 "+1e3*i+" "+1e3*a,preserveAspectRatio:"xMinYMin"}),u=nU(["overlay"],[l],r);return u.height=a,u.style.height=St(a),u.style.width=St(i),u},"staticSvg"),$e={fontMap:aU,makeSymbol:fl,mathsym:MTe,makeSpan:Ss,makeSvgSpan:nU,makeLineSpan:FTe,makeAnchor:$Te,makeFragment:iU,wrapFragment:zTe,makeVList:VTe,makeOrd:OTe,makeGlue:UTe,staticSvg:HTe,svgData:sU,tryCombineChars:BTe},ni={number:3,unit:"mu"},ud={number:4,unit:"mu"},uu={number:5,unit:"mu"},qTe={mord:{mop:ni,mbin:ud,mrel:uu,minner:ni},mop:{mord:ni,mop:ni,mrel:uu,minner:ni},mbin:{mord:ud,mop:ud,mopen:ud,minner:ud},mrel:{mord:uu,mop:uu,mopen:uu,minner:uu},mopen:{},mclose:{mop:ni,mbin:ud,mrel:uu,minner:ni},mpunct:{mord:ni,mop:ni,mrel:uu,mopen:ni,mclose:ni,mpunct:ni,minner:ni},minner:{mord:ni,mop:ni,mbin:ud,mrel:uu,mopen:ni,mpunct:ni,minner:ni}},WTe={mord:{mop:ni},mop:{mord:ni,mop:ni},mbin:{},mrel:{},mopen:{},mclose:{mop:ni},mpunct:{},minner:{mop:ni}},oU={},k3={},E3={};o(Mt,"defineFunction");o(dd,"defineFunctionBuilders");S3=o(function(e){return e.type==="ordgroup"&&e.body.length===1?e.body[0]:e},"normalizeArgument"),gi=o(function(e){return e.type==="ordgroup"?e.body:[e]},"ordargument"),du=$e.makeSpan,YTe=["leftmost","mbin","mopen","mrel","mop","mpunct"],XTe=["rightmost","mrel","mclose","mpunct"],jTe={display:nr.DISPLAY,text:nr.TEXT,script:nr.SCRIPT,scriptscript:nr.SCRIPTSCRIPT},KTe={mord:"mord",mop:"mop",mbin:"mbin",mrel:"mrel",mopen:"mopen",mclose:"mclose",mpunct:"mpunct",minner:"minner"},Ii=o(function(e,r,n,i){i===void 0&&(i=[null,null]);for(var a=[],s=0;s{var v=y.classes[0],x=g.classes[0];v==="mbin"&&er.contains(XTe,x)?y.classes[0]="mord":x==="mbin"&&er.contains(YTe,v)&&(g.classes[0]="mord")},{node:d},p,m),CV(a,(g,y)=>{var v=J7(y),x=J7(g),b=v&&x?g.hasClass("mtight")?WTe[v][x]:qTe[v][x]:null;if(b)return $e.makeGlue(b,h)},{node:d},p,m),a},"buildExpression"),CV=o(function t(e,r,n,i,a){i&&e.push(i);for(var s=0;sp=>{e.splice(d+1,0,p),s++})(s)}i&&e.pop()},"traverseNonSpaceNodes"),lU=o(function(e){return e instanceof hd||e instanceof Qy||e instanceof fd&&e.hasClass("enclosing")?e:null},"checkPartialGroup"),QTe=o(function t(e,r){var n=lU(e);if(n){var i=n.children;if(i.length){if(r==="right")return t(i[i.length-1],"right");if(r==="left")return t(i[0],"left")}}return e},"getOutermostNode"),J7=o(function(e,r){return e?(r&&(e=QTe(e,r)),KTe[e.classes[0]]||null):null},"getTypeOfDomTree"),Jy=o(function(e,r){var n=["nulldelimiter"].concat(e.baseSizingClasses());return du(r.concat(n))},"makeNullDelimiter"),Hr=o(function(e,r,n){if(!e)return du();if(k3[e.type]){var i=k3[e.type](e,r);if(n&&r.size!==n.size){i=du(r.sizingClasses(n),[i],r);var a=r.sizeMultiplier/n.sizeMultiplier;i.height*=a,i.depth*=a}return i}else throw new gt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(m3,"buildHTMLUnbreakable");o(eA,"buildHTML");o(cU,"newDocumentFragment");es=class{static{o(this,"MathNode")}constructor(e,r,n){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=r||[],this.classes=n||[]}setAttribute(e,r){this.attributes[e]=r}getAttribute(e){return this.attributes[e]}toNode(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var r in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,r)&&e.setAttribute(r,this.attributes[r]);this.classes.length>0&&(e.className=bh(this.classes));for(var n=0;n0&&(e+=' class ="'+er.escape(bh(this.classes))+'"'),e+=">";for(var n=0;n",e}toText(){return this.children.map(e=>e.toText()).join("")}},_o=class{static{o(this,"TextNode")}constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return er.escape(this.toText())}toText(){return this.text}},tA=class{static{o(this,"SpaceNode")}constructor(e){this.width=void 0,this.character=void 0,this.width=e,e>=.05555&&e<=.05556?this.character="\u200A":e>=.1666&&e<=.1667?this.character="\u2009":e>=.2222&&e<=.2223?this.character="\u2005":e>=.2777&&e<=.2778?this.character="\u2005\u200A":e>=-.05556&&e<=-.05555?this.character="\u200A\u2063":e>=-.1667&&e<=-.1666?this.character="\u2009\u2063":e>=-.2223&&e<=-.2222?this.character="\u205F\u2063":e>=-.2778&&e<=-.2777?this.character="\u2005\u2063":this.character=null}toNode(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",St(this.width)),e}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}},mt={MathNode:es,TextNode:_o,SpaceNode:tA,newDocumentFragment:cU},Lo=o(function(e,r,n){return Nn[r][e]&&Nn[r][e].replace&&e.charCodeAt(0)!==55349&&!(rU.hasOwnProperty(e)&&n&&(n.fontFamily&&n.fontFamily.slice(4,6)==="tt"||n.font&&n.font.slice(4,6)==="tt"))&&(e=Nn[r][e].replace),new mt.TextNode(e)},"makeText"),uA=o(function(e){return e.length===1?e[0]:new mt.MathNode("mrow",e)},"makeRow"),hA=o(function(e,r){if(r.fontFamily==="texttt")return"monospace";if(r.fontFamily==="textsf")return r.fontShape==="textit"&&r.fontWeight==="textbf"?"sans-serif-bold-italic":r.fontShape==="textit"?"sans-serif-italic":r.fontWeight==="textbf"?"bold-sans-serif":"sans-serif";if(r.fontShape==="textit"&&r.fontWeight==="textbf")return"bold-italic";if(r.fontShape==="textit")return"italic";if(r.fontWeight==="textbf")return"bold";var n=r.font;if(!n||n==="mathnormal")return null;var i=e.mode;if(n==="mathit")return"italic";if(n==="boldsymbol")return e.type==="textord"?"bold":"bold-italic";if(n==="mathbf")return"bold";if(n==="mathbb")return"double-struck";if(n==="mathsfit")return"sans-serif-italic";if(n==="mathfrak")return"fraktur";if(n==="mathscr"||n==="mathcal")return"script";if(n==="mathsf")return"sans-serif";if(n==="mathtt")return"monospace";var a=e.text;if(er.contains(["\\imath","\\jmath"],a))return null;Nn[i][a]&&Nn[i][a].replace&&(a=Nn[i][a].replace);var s=$e.fontMap[n].fontName;return lA(a,s,i)?$e.fontMap[n].variant:null},"getVariant");o($7,"isNumberPunctuation");As=o(function(e,r,n){if(e.length===1){var i=wn(e[0],r);return n&&i instanceof es&&i.type==="mo"&&(i.setAttribute("lspace","0em"),i.setAttribute("rspace","0em")),[i]}for(var a=[],s,l=0;l=1&&(s.type==="mn"||$7(s))){var h=u.children[0];h instanceof es&&h.type==="mn"&&(h.children=[...s.children,...h.children],a.pop())}else if(s.type==="mi"&&s.children.length===1){var f=s.children[0];if(f instanceof _o&&f.text==="\u0338"&&(u.type==="mo"||u.type==="mi"||u.type==="mn")){var d=u.children[0];d instanceof _o&&d.text.length>0&&(d.text=d.text.slice(0,1)+"\u0338"+d.text.slice(1),a.pop())}}}a.push(u),s=u}return a},"buildExpression"),Th=o(function(e,r,n){return uA(As(e,r,n))},"buildExpressionRow"),wn=o(function(e,r){if(!e)return new mt.MathNode("mrow");if(E3[e.type]){var n=E3[e.type](e,r);return n}else throw new gt("Got group of unknown type: '"+e.type+"'")},"buildGroup");o(AV,"buildMathML");uU=o(function(e){return new T3({style:e.displayMode?nr.DISPLAY:nr.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},"optionsFromSettings"),hU=o(function(e,r){if(r.displayMode){var n=["katex-display"];r.leqno&&n.push("leqno"),r.fleqn&&n.push("fleqn"),e=$e.makeSpan(n,[e])}return e},"displayWrap"),ZTe=o(function(e,r,n){var i=uU(n),a;if(n.output==="mathml")return AV(e,r,i,n.displayMode,!0);if(n.output==="html"){var s=eA(e,i);a=$e.makeSpan(["katex"],[s])}else{var l=AV(e,r,i,n.displayMode,!1),u=eA(e,i);a=$e.makeSpan(["katex"],[l,u])}return hU(a,n)},"buildTree"),JTe=o(function(e,r,n){var i=uU(n),a=eA(e,i),s=$e.makeSpan(["katex"],[a]);return hU(s,n)},"buildHTMLTree"),ewe={widehat:"^",widecheck:"\u02C7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23DF",overbrace:"\u23DE",overgroup:"\u23E0",undergroup:"\u23E1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21D2",xRightarrow:"\u21D2",overleftharpoon:"\u21BC",xleftharpoonup:"\u21BC",overrightharpoon:"\u21C0",xrightharpoonup:"\u21C0",xLeftarrow:"\u21D0",xLeftrightarrow:"\u21D4",xhookleftarrow:"\u21A9",xhookrightarrow:"\u21AA",xmapsto:"\u21A6",xrightharpoondown:"\u21C1",xleftharpoondown:"\u21BD",xrightleftharpoons:"\u21CC",xleftrightharpoons:"\u21CB",xtwoheadleftarrow:"\u219E",xtwoheadrightarrow:"\u21A0",xlongequal:"=",xtofrom:"\u21C4",xrightleftarrows:"\u21C4",xrightequilibrium:"\u21CC",xleftequilibrium:"\u21CB","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},twe=o(function(e){var r=new mt.MathNode("mo",[new mt.TextNode(ewe[e.replace(/^\\/,"")])]);return r.setAttribute("stretchy","true"),r},"mathMLnode"),rwe={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},nwe=o(function(e){return e.type==="ordgroup"?e.body.length:1},"groupLength"),iwe=o(function(e,r){function n(){var l=4e5,u=e.label.slice(1);if(er.contains(["widehat","widecheck","widetilde","utilde"],u)){var h=e,f=nwe(h.base),d,p,m;if(f>5)u==="widehat"||u==="widecheck"?(d=420,l=2364,m=.42,p=u+"4"):(d=312,l=2340,m=.34,p="tilde4");else{var g=[1,1,2,2,3,3][f];u==="widehat"||u==="widecheck"?(l=[0,1062,2364,2364,2364][g],d=[0,239,300,360,420][g],m=[0,.24,.3,.3,.36,.42][g],p=u+g):(l=[0,600,1033,2339,2340][g],d=[0,260,286,306,312][g],m=[0,.26,.286,.3,.306,.34][g],p="tilde"+g)}var y=new Zl(p),v=new dl([y],{width:"100%",height:St(m),viewBox:"0 0 "+l+" "+d,preserveAspectRatio:"none"});return{span:$e.makeSvgSpan([],[v],r),minWidth:0,height:m}}else{var x=[],b=rwe[u],[T,S,w]=b,k=w/1e3,C=T.length,A,L;if(C===1){var I=b[3];A=["hide-tail"],L=[I]}else if(C===2)A=["halfarrow-left","halfarrow-right"],L=["xMinYMin","xMaxYMin"];else if(C===3)A=["brace-left","brace-center","brace-right"],L=["xMinYMin","xMidYMin","xMaxYMin"];else throw new Error(`Correct katexImagesData or update code here to support + `+C+" children.");for(var R=0;R0&&(i.style.minWidth=St(a)),i},"svgSpan"),awe=o(function(e,r,n,i,a){var s,l=e.height+e.depth+n+i;if(/fbox|color|angl/.test(r)){if(s=$e.makeSpan(["stretchy",r],[],a),r==="fbox"){var u=a.color&&a.getColor();u&&(s.style.borderColor=u)}}else{var h=[];/^[bx]cancel$/.test(r)&&h.push(new Zy({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(r)&&h.push(new Zy({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var f=new dl(h,{width:"100%",height:St(l)});s=$e.makeSvgSpan([],[f],a)}return s.height=l,s.style.height=St(l),s},"encloseSpan"),pu={encloseSpan:awe,mathMLnode:twe,svgSpan:iwe};o(Tr,"assertNodeType");o(fA,"assertSymbolNodeType");o(L3,"checkSymbolNodeType");dA=o((t,e)=>{var r,n,i;t&&t.type==="supsub"?(n=Tr(t.base,"accent"),r=n.base,t.base=r,i=DTe(Hr(t,e)),t.base=n):(n=Tr(t,"accent"),r=n.base);var a=Hr(r,e.havingCrampedStyle()),s=n.isShifty&&er.isCharacterBox(r),l=0;if(s){var u=er.getBaseElem(r),h=Hr(u,e.havingCrampedStyle());l=wV(h).skew}var f=n.label==="\\c",d=f?a.height+a.depth:Math.min(a.height,e.fontMetrics().xHeight),p;if(n.isStretchy)p=pu.svgSpan(n,e),p=$e.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"elem",elem:p,wrapperClasses:["svg-align"],wrapperStyle:l>0?{width:"calc(100% - "+St(2*l)+")",marginLeft:St(2*l)}:void 0}]},e);else{var m,g;n.label==="\\vec"?(m=$e.staticSvg("vec",e),g=$e.svgData.vec[1]):(m=$e.makeOrd({mode:n.mode,text:n.label},e,"textord"),m=wV(m),m.italic=0,g=m.width,f&&(d+=m.depth)),p=$e.makeSpan(["accent-body"],[m]);var y=n.label==="\\textcircled";y&&(p.classes.push("accent-full"),d=a.height);var v=l;y||(v-=g/2),p.style.left=St(v),n.label==="\\textcircled"&&(p.style.top=".2em"),p=$e.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:-d},{type:"elem",elem:p}]},e)}var x=$e.makeSpan(["mord","accent"],[p],e);return i?(i.children[0]=x,i.height=Math.max(x.height,i.height),i.classes[0]="mord",i):x},"htmlBuilder$a"),fU=o((t,e)=>{var r=t.isStretchy?pu.mathMLnode(t.label):new mt.MathNode("mo",[Lo(t.label,t.mode)]),n=new mt.MathNode("mover",[wn(t.base,e),r]);return n.setAttribute("accent","true"),n},"mathmlBuilder$9"),swe=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map(t=>"\\"+t).join("|"));Mt({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:o((t,e)=>{var r=S3(e[0]),n=!swe.test(t.funcName),i=!n||t.funcName==="\\widehat"||t.funcName==="\\widetilde"||t.funcName==="\\widecheck";return{type:"accent",mode:t.parser.mode,label:t.funcName,isStretchy:n,isShifty:i,base:r}},"handler"),htmlBuilder:dA,mathmlBuilder:fU});Mt({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:o((t,e)=>{var r=e[0],n=t.parser.mode;return n==="math"&&(t.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+t.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:t.funcName,isStretchy:!1,isShifty:!0,base:r}},"handler"),htmlBuilder:dA,mathmlBuilder:fU});Mt({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"accentUnder",mode:r.mode,label:n,base:i}},"handler"),htmlBuilder:o((t,e)=>{var r=Hr(t.base,e),n=pu.svgSpan(t,e),i=t.label==="\\utilde"?.12:0,a=$e.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:i},{type:"elem",elem:r}]},e);return $e.makeSpan(["mord","accentunder"],[a],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=pu.mathMLnode(t.label),n=new mt.MathNode("munder",[wn(t.base,e),r]);return n.setAttribute("accentunder","true"),n},"mathmlBuilder")});g3=o(t=>{var e=new mt.MathNode("mpadded",t?[t]:[]);return e.setAttribute("width","+0.6em"),e.setAttribute("lspace","0.3em"),e},"paddedNode");Mt({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n,funcName:i}=t;return{type:"xArrow",mode:n.mode,label:i,body:e[0],below:r[0]}},htmlBuilder(t,e){var r=e.style,n=e.havingStyle(r.sup()),i=$e.wrapFragment(Hr(t.body,n,e),e),a=t.label.slice(0,2)==="\\x"?"x":"cd";i.classes.push(a+"-arrow-pad");var s;t.below&&(n=e.havingStyle(r.sub()),s=$e.wrapFragment(Hr(t.below,n,e),e),s.classes.push(a+"-arrow-pad"));var l=pu.svgSpan(t,e),u=-e.fontMetrics().axisHeight+.5*l.height,h=-e.fontMetrics().axisHeight-.5*l.height-.111;(i.depth>.25||t.label==="\\xleftequilibrium")&&(h-=i.depth);var f;if(s){var d=-e.fontMetrics().axisHeight+s.height+.5*l.height+.111;f=$e.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u},{type:"elem",elem:s,shift:d}]},e)}else f=$e.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:h},{type:"elem",elem:l,shift:u}]},e);return f.children[0].children[0].children[1].classes.push("svg-align"),$e.makeSpan(["mrel","x-arrow"],[f],e)},mathmlBuilder(t,e){var r=pu.mathMLnode(t.label);r.setAttribute("minsize",t.label.charAt(0)==="x"?"1.75em":"3.0em");var n;if(t.body){var i=g3(wn(t.body,e));if(t.below){var a=g3(wn(t.below,e));n=new mt.MathNode("munderover",[r,a,i])}else n=new mt.MathNode("mover",[r,i])}else if(t.below){var s=g3(wn(t.below,e));n=new mt.MathNode("munder",[r,s])}else n=g3(),n=new mt.MathNode("mover",[r,n]);return n}});owe=$e.makeSpan;o(dU,"htmlBuilder$9");o(pU,"mathmlBuilder$8");Mt({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:gi(i),isCharacterBox:er.isCharacterBox(i)}},htmlBuilder:dU,mathmlBuilder:pU});R3=o(t=>{var e=t.type==="ordgroup"&&t.body.length?t.body[0]:t;return e.type==="atom"&&(e.family==="bin"||e.family==="rel")?"m"+e.family:"mord"},"binrelClass");Mt({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(t,e){var{parser:r}=t;return{type:"mclass",mode:r.mode,mclass:R3(e[0]),body:gi(e[1]),isCharacterBox:er.isCharacterBox(e[1])}}});Mt({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(t,e){var{parser:r,funcName:n}=t,i=e[1],a=e[0],s;n!=="\\stackrel"?s=R3(i):s="mrel";var l={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:n!=="\\stackrel",body:gi(i)},u={type:"supsub",mode:a.mode,base:l,sup:n==="\\underset"?null:a,sub:n==="\\underset"?a:null};return{type:"mclass",mode:r.mode,mclass:s,body:[u],isCharacterBox:er.isCharacterBox(u)}},htmlBuilder:dU,mathmlBuilder:pU});Mt({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"pmb",mode:r.mode,mclass:R3(e[0]),body:gi(e[0])}},htmlBuilder(t,e){var r=Ii(t.body,e,!0),n=$e.makeSpan([t.mclass],r,e);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder(t,e){var r=As(t.body,e),n=new mt.MathNode("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});lwe={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},_V=o(()=>({type:"styling",body:[],mode:"math",style:"display"}),"newCell"),DV=o(t=>t.type==="textord"&&t.text==="@","isStartOfArrow"),cwe=o((t,e)=>(t.type==="mathord"||t.type==="atom")&&t.text===e,"isLabelEnd");o(uwe,"cdArrow");o(hwe,"parseCD");Mt({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:e[0]}},htmlBuilder(t,e){var r=e.havingStyle(e.style.sup()),n=$e.wrapFragment(Hr(t.label,r,e),e);return n.classes.push("cd-label-"+t.side),n.style.bottom=St(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder(t,e){var r=new mt.MathNode("mrow",[wn(t.label,e)]);return r=new mt.MathNode("mpadded",[r]),r.setAttribute("width","0"),t.side==="left"&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new mt.MathNode("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}});Mt({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(t,e){var{parser:r}=t;return{type:"cdlabelparent",mode:r.mode,fragment:e[0]}},htmlBuilder(t,e){var r=$e.wrapFragment(Hr(t.fragment,e),e);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(t,e){return new mt.MathNode("mrow",[wn(t.fragment,e)])}});Mt({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(t,e){for(var{parser:r}=t,n=Tr(e[0],"ordgroup"),i=n.body,a="",s=0;s=1114111)throw new gt("\\@char with invalid code point "+a);return u<=65535?h=String.fromCharCode(u):(u-=65536,h=String.fromCharCode((u>>10)+55296,(u&1023)+56320)),{type:"textord",mode:r.mode,text:h}}});mU=o((t,e)=>{var r=Ii(t.body,e.withColor(t.color),!1);return $e.makeFragment(r)},"htmlBuilder$8"),gU=o((t,e)=>{var r=As(t.body,e.withColor(t.color)),n=new mt.MathNode("mstyle",r);return n.setAttribute("mathcolor",t.color),n},"mathmlBuilder$7");Mt({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(t,e){var{parser:r}=t,n=Tr(e[0],"color-token").color,i=e[1];return{type:"color",mode:r.mode,color:n,body:gi(i)}},htmlBuilder:mU,mathmlBuilder:gU});Mt({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(t,e){var{parser:r,breakOnTokenText:n}=t,i=Tr(e[0],"color-token").color;r.gullet.macros.set("\\current@color",i);var a=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:i,body:a}},htmlBuilder:mU,mathmlBuilder:gU});Mt({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(t,e,r){var{parser:n}=t,i=n.gullet.future().text==="["?n.parseSizeGroup(!0):null,a=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:a,size:i&&Tr(i,"size").value}},htmlBuilder(t,e){var r=$e.makeSpan(["mspace"],[],e);return t.newLine&&(r.classes.push("newline"),t.size&&(r.style.marginTop=St(ii(t.size,e)))),r},mathmlBuilder(t,e){var r=new mt.MathNode("mspace");return t.newLine&&(r.setAttribute("linebreak","newline"),t.size&&r.setAttribute("height",St(ii(t.size,e)))),r}});rA={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},yU=o(t=>{var e=t.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(e))throw new gt("Expected a control sequence",t);return e},"checkControlSequence"),fwe=o(t=>{var e=t.gullet.popToken();return e.text==="="&&(e=t.gullet.popToken(),e.text===" "&&(e=t.gullet.popToken())),e},"getRHS"),vU=o((t,e,r,n)=>{var i=t.gullet.macros.get(r.text);i==null&&(r.noexpand=!0,i={tokens:[r],numArgs:0,unexpandable:!t.gullet.isExpandable(r.text)}),t.gullet.macros.set(e,i,n)},"letCommand");Mt({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(t){var{parser:e,funcName:r}=t;e.consumeSpaces();var n=e.fetch();if(rA[n.text])return(r==="\\global"||r==="\\\\globallong")&&(n.text=rA[n.text]),Tr(e.parseFunction(),"internal");throw new gt("Invalid token after macro prefix",n)}});Mt({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=e.gullet.popToken(),i=n.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new gt("Expected a control sequence",n);for(var a=0,s,l=[[]];e.gullet.future().text!=="{";)if(n=e.gullet.popToken(),n.text==="#"){if(e.gullet.future().text==="{"){s=e.gullet.future(),l[a].push("{");break}if(n=e.gullet.popToken(),!/^[1-9]$/.test(n.text))throw new gt('Invalid argument number "'+n.text+'"');if(parseInt(n.text)!==a+1)throw new gt('Argument number "'+n.text+'" out of order');a++,l.push([])}else{if(n.text==="EOF")throw new gt("Expected a macro definition");l[a].push(n.text)}var{tokens:u}=e.gullet.consumeArg();return s&&u.unshift(s),(r==="\\edef"||r==="\\xdef")&&(u=e.gullet.expandTokens(u),u.reverse()),e.gullet.macros.set(i,{tokens:u,numArgs:a,delimiters:l},r===rA[r]),{type:"internal",mode:e.mode}}});Mt({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=yU(e.gullet.popToken());e.gullet.consumeSpaces();var i=fwe(e);return vU(e,n,i,r==="\\\\globallet"),{type:"internal",mode:e.mode}}});Mt({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t){var{parser:e,funcName:r}=t,n=yU(e.gullet.popToken()),i=e.gullet.popToken(),a=e.gullet.popToken();return vU(e,n,a,r==="\\\\globalfuture"),e.gullet.pushToken(a),e.gullet.pushToken(i),{type:"internal",mode:e.mode}}});Wy=o(function(e,r,n){var i=Nn.math[e]&&Nn.math[e].replace,a=lA(i||e,r,n);if(!a)throw new Error("Unsupported symbol "+e+" and font size "+r+".");return a},"getMetrics"),pA=o(function(e,r,n,i){var a=n.havingBaseStyle(r),s=$e.makeSpan(i.concat(a.sizingClasses(n)),[e],n),l=a.sizeMultiplier/n.sizeMultiplier;return s.height*=l,s.depth*=l,s.maxFontSize=a.sizeMultiplier,s},"styleWrap"),xU=o(function(e,r,n){var i=r.havingBaseStyle(n),a=(1-r.sizeMultiplier/i.sizeMultiplier)*r.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=St(a),e.height-=a,e.depth+=a},"centerSpan"),dwe=o(function(e,r,n,i,a,s){var l=$e.makeSymbol(e,"Main-Regular",a,i),u=pA(l,r,i,s);return n&&xU(u,i,r),u},"makeSmallDelim"),pwe=o(function(e,r,n,i){return $e.makeSymbol(e,"Size"+r+"-Regular",n,i)},"mathrmSize"),bU=o(function(e,r,n,i,a,s){var l=pwe(e,r,a,i),u=pA($e.makeSpan(["delimsizing","size"+r],[l],i),nr.TEXT,i,s);return n&&xU(u,i,nr.TEXT),u},"makeLargeDelim"),z7=o(function(e,r,n){var i;r==="Size1-Regular"?i="delim-size1":i="delim-size4";var a=$e.makeSpan(["delimsizinginner",i],[$e.makeSpan([],[$e.makeSymbol(e,r,n)])]);return{type:"elem",elem:a}},"makeGlyphSpan"),G7=o(function(e,r,n){var i=Ql["Size4-Regular"][e.charCodeAt(0)]?Ql["Size4-Regular"][e.charCodeAt(0)][4]:Ql["Size1-Regular"][e.charCodeAt(0)][4],a=new Zl("inner",wTe(e,Math.round(1e3*r))),s=new dl([a],{width:St(i),height:St(r),style:"width:"+St(i),viewBox:"0 0 "+1e3*i+" "+Math.round(1e3*r),preserveAspectRatio:"xMinYMin"}),l=$e.makeSvgSpan([],[s],n);return l.height=r,l.style.height=St(r),l.style.width=St(i),{type:"elem",elem:l}},"makeInner"),nA=.008,y3={type:"kern",size:-1*nA},mwe=["|","\\lvert","\\rvert","\\vert"],gwe=["\\|","\\lVert","\\rVert","\\Vert"],TU=o(function(e,r,n,i,a,s){var l,u,h,f,d="",p=0;l=h=f=e,u=null;var m="Size1-Regular";e==="\\uparrow"?h=f="\u23D0":e==="\\Uparrow"?h=f="\u2016":e==="\\downarrow"?l=h="\u23D0":e==="\\Downarrow"?l=h="\u2016":e==="\\updownarrow"?(l="\\uparrow",h="\u23D0",f="\\downarrow"):e==="\\Updownarrow"?(l="\\Uparrow",h="\u2016",f="\\Downarrow"):er.contains(mwe,e)?(h="\u2223",d="vert",p=333):er.contains(gwe,e)?(h="\u2225",d="doublevert",p=556):e==="["||e==="\\lbrack"?(l="\u23A1",h="\u23A2",f="\u23A3",m="Size4-Regular",d="lbrack",p=667):e==="]"||e==="\\rbrack"?(l="\u23A4",h="\u23A5",f="\u23A6",m="Size4-Regular",d="rbrack",p=667):e==="\\lfloor"||e==="\u230A"?(h=l="\u23A2",f="\u23A3",m="Size4-Regular",d="lfloor",p=667):e==="\\lceil"||e==="\u2308"?(l="\u23A1",h=f="\u23A2",m="Size4-Regular",d="lceil",p=667):e==="\\rfloor"||e==="\u230B"?(h=l="\u23A5",f="\u23A6",m="Size4-Regular",d="rfloor",p=667):e==="\\rceil"||e==="\u2309"?(l="\u23A4",h=f="\u23A5",m="Size4-Regular",d="rceil",p=667):e==="("||e==="\\lparen"?(l="\u239B",h="\u239C",f="\u239D",m="Size4-Regular",d="lparen",p=875):e===")"||e==="\\rparen"?(l="\u239E",h="\u239F",f="\u23A0",m="Size4-Regular",d="rparen",p=875):e==="\\{"||e==="\\lbrace"?(l="\u23A7",u="\u23A8",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\}"||e==="\\rbrace"?(l="\u23AB",u="\u23AC",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lgroup"||e==="\u27EE"?(l="\u23A7",f="\u23A9",h="\u23AA",m="Size4-Regular"):e==="\\rgroup"||e==="\u27EF"?(l="\u23AB",f="\u23AD",h="\u23AA",m="Size4-Regular"):e==="\\lmoustache"||e==="\u23B0"?(l="\u23A7",f="\u23AD",h="\u23AA",m="Size4-Regular"):(e==="\\rmoustache"||e==="\u23B1")&&(l="\u23AB",f="\u23A9",h="\u23AA",m="Size4-Regular");var g=Wy(l,m,a),y=g.height+g.depth,v=Wy(h,m,a),x=v.height+v.depth,b=Wy(f,m,a),T=b.height+b.depth,S=0,w=1;if(u!==null){var k=Wy(u,m,a);S=k.height+k.depth,w=2}var C=y+T+S,A=Math.max(0,Math.ceil((r-C)/(w*x))),L=C+A*w*x,I=i.fontMetrics().axisHeight;n&&(I*=i.sizeMultiplier);var R=L/2-I,E=[];if(d.length>0){var _=L-y-T,D=Math.round(L*1e3),O=kTe(d,Math.round(_*1e3)),N=new Zl(d,O),P=(p/1e3).toFixed(3)+"em",B=(D/1e3).toFixed(3)+"em",F=new dl([N],{width:P,height:B,viewBox:"0 0 "+p+" "+D}),V=$e.makeSvgSpan([],[F],i);V.height=D/1e3,V.style.width=P,V.style.height=B,E.push({type:"elem",elem:V})}else{if(E.push(z7(f,m,a)),E.push(y3),u===null){var $=L-y-T+2*nA;E.push(G7(h,$,i))}else{var U=(L-y-T-S)/2+2*nA;E.push(G7(h,U,i)),E.push(y3),E.push(z7(u,m,a)),E.push(y3),E.push(G7(h,U,i))}E.push(y3),E.push(z7(l,m,a))}var j=i.havingBaseStyle(nr.TEXT),ee=$e.makeVList({positionType:"bottom",positionData:R,children:E},j);return pA($e.makeSpan(["delimsizing","mult"],[ee],j),nr.TEXT,i,s)},"makeStackedDelim"),V7=80,U7=.08,H7=o(function(e,r,n,i,a){var s=TTe(e,i,n),l=new Zl(e,s),u=new dl([l],{width:"400em",height:St(r),viewBox:"0 0 400000 "+n,preserveAspectRatio:"xMinYMin slice"});return $e.makeSvgSpan(["hide-tail"],[u],a)},"sqrtSvg"),ywe=o(function(e,r){var n=r.havingBaseSizing(),i=SU("\\surd",e*n.sizeMultiplier,EU,n),a=n.sizeMultiplier,s=Math.max(0,r.minRuleThickness-r.fontMetrics().sqrtRuleThickness),l,u=0,h=0,f=0,d;return i.type==="small"?(f=1e3+1e3*s+V7,e<1?a=1:e<1.4&&(a=.7),u=(1+s+U7)/a,h=(1+s)/a,l=H7("sqrtMain",u,f,s,r),l.style.minWidth="0.853em",d=.833/a):i.type==="large"?(f=(1e3+V7)*Xy[i.size],h=(Xy[i.size]+s)/a,u=(Xy[i.size]+s+U7)/a,l=H7("sqrtSize"+i.size,u,f,s,r),l.style.minWidth="1.02em",d=1/a):(u=e+s+U7,h=e+s,f=Math.floor(1e3*e+s)+V7,l=H7("sqrtTall",u,f,s,r),l.style.minWidth="0.742em",d=1.056),l.height=h,l.style.height=St(u),{span:l,advanceWidth:d,ruleWidth:(r.fontMetrics().sqrtRuleThickness+s)*a}},"makeSqrtImage"),wU=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","\\surd"],vwe=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1"],kU=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],Xy=[0,1.2,1.8,2.4,3],xwe=o(function(e,r,n,i,a){if(e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle"),er.contains(wU,e)||er.contains(kU,e))return bU(e,r,!1,n,i,a);if(er.contains(vwe,e))return TU(e,Xy[r],!1,n,i,a);throw new gt("Illegal delimiter: '"+e+"'")},"makeSizedDelim"),bwe=[{type:"small",style:nr.SCRIPTSCRIPT},{type:"small",style:nr.SCRIPT},{type:"small",style:nr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],Twe=[{type:"small",style:nr.SCRIPTSCRIPT},{type:"small",style:nr.SCRIPT},{type:"small",style:nr.TEXT},{type:"stack"}],EU=[{type:"small",style:nr.SCRIPTSCRIPT},{type:"small",style:nr.SCRIPT},{type:"small",style:nr.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],wwe=o(function(e){if(e.type==="small")return"Main-Regular";if(e.type==="large")return"Size"+e.size+"-Regular";if(e.type==="stack")return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},"delimTypeToFont"),SU=o(function(e,r,n,i){for(var a=Math.min(2,3-i.style.size),s=a;sr)return n[s]}return n[n.length-1]},"traverseSequence"),CU=o(function(e,r,n,i,a,s){e==="<"||e==="\\lt"||e==="\u27E8"?e="\\langle":(e===">"||e==="\\gt"||e==="\u27E9")&&(e="\\rangle");var l;er.contains(kU,e)?l=bwe:er.contains(wU,e)?l=EU:l=Twe;var u=SU(e,r,l,i);return u.type==="small"?dwe(e,u.style,n,i,a,s):u.type==="large"?bU(e,u.size,n,i,a,s):TU(e,r,n,i,a,s)},"makeCustomSizedDelim"),kwe=o(function(e,r,n,i,a,s){var l=i.fontMetrics().axisHeight*i.sizeMultiplier,u=901,h=5/i.fontMetrics().ptPerEm,f=Math.max(r-l,n+l),d=Math.max(f/500*u,2*f-h);return CU(e,d,!0,i,a,s)},"makeLeftRightDelim"),fu={sqrtImage:ywe,sizedDelim:xwe,sizeToMaxHeight:Xy,customSizedDelim:CU,leftRightDelim:kwe},LV={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},Ewe=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230A","\u230B","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27E8","\\rangle","\u27E9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27EE","\u27EF","\\lmoustache","\\rmoustache","\u23B0","\u23B1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];o(N3,"checkDelimiter");Mt({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:o((t,e)=>{var r=N3(e[0],t);return{type:"delimsizing",mode:t.parser.mode,size:LV[t.funcName].size,mclass:LV[t.funcName].mclass,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>t.delim==="."?$e.makeSpan([t.mclass]):fu.sizedDelim(t.delim,t.size,e,t.mode,[t.mclass]),"htmlBuilder"),mathmlBuilder:o(t=>{var e=[];t.delim!=="."&&e.push(Lo(t.delim,t.mode));var r=new mt.MathNode("mo",e);t.mclass==="mopen"||t.mclass==="mclose"?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=St(fu.sizeToMaxHeight[t.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r},"mathmlBuilder")});o(RV,"assertParsed");Mt({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=t.parser.gullet.macros.get("\\current@color");if(r&&typeof r!="string")throw new gt("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:t.parser.mode,delim:N3(e[0],t).text,color:r}},"handler")});Mt({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=N3(e[0],t),n=t.parser;++n.leftrightDepth;var i=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var a=Tr(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:i,left:r.text,right:a.delim,rightColor:a.color}},"handler"),htmlBuilder:o((t,e)=>{RV(t);for(var r=Ii(t.body,e,!0,["mopen","mclose"]),n=0,i=0,a=!1,s=0;s{RV(t);var r=As(t.body,e);if(t.left!=="."){var n=new mt.MathNode("mo",[Lo(t.left,t.mode)]);n.setAttribute("fence","true"),r.unshift(n)}if(t.right!=="."){var i=new mt.MathNode("mo",[Lo(t.right,t.mode)]);i.setAttribute("fence","true"),t.rightColor&&i.setAttribute("mathcolor",t.rightColor),r.push(i)}return uA(r)},"mathmlBuilder")});Mt({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var r=N3(e[0],t);if(!t.parser.leftrightDepth)throw new gt("\\middle without preceding \\left",r);return{type:"middle",mode:t.parser.mode,delim:r.text}},"handler"),htmlBuilder:o((t,e)=>{var r;if(t.delim===".")r=Jy(e,[]);else{r=fu.sizedDelim(t.delim,1,e,t.mode,[]);var n={delim:t.delim,options:e};r.isMiddle=n}return r},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=t.delim==="\\vert"||t.delim==="|"?Lo("|","text"):Lo(t.delim,t.mode),n=new mt.MathNode("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n},"mathmlBuilder")});mA=o((t,e)=>{var r=$e.wrapFragment(Hr(t.body,e),e),n=t.label.slice(1),i=e.sizeMultiplier,a,s=0,l=er.isCharacterBox(t.body);if(n==="sout")a=$e.makeSpan(["stretchy","sout"]),a.height=e.fontMetrics().defaultRuleThickness/i,s=-.5*e.fontMetrics().xHeight;else if(n==="phase"){var u=ii({number:.6,unit:"pt"},e),h=ii({number:.35,unit:"ex"},e),f=e.havingBaseSizing();i=i/f.sizeMultiplier;var d=r.height+r.depth+u+h;r.style.paddingLeft=St(d/2+u);var p=Math.floor(1e3*d*i),m=xTe(p),g=new dl([new Zl("phase",m)],{width:"400em",height:St(p/1e3),viewBox:"0 0 400000 "+p,preserveAspectRatio:"xMinYMin slice"});a=$e.makeSvgSpan(["hide-tail"],[g],e),a.style.height=St(d),s=r.depth+u+h}else{/cancel/.test(n)?l||r.classes.push("cancel-pad"):n==="angl"?r.classes.push("anglpad"):r.classes.push("boxpad");var y=0,v=0,x=0;/box/.test(n)?(x=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness),y=e.fontMetrics().fboxsep+(n==="colorbox"?0:x),v=y):n==="angl"?(x=Math.max(e.fontMetrics().defaultRuleThickness,e.minRuleThickness),y=4*x,v=Math.max(0,.25-r.depth)):(y=l?.2:0,v=y),a=pu.encloseSpan(r,n,y,v,e),/fbox|boxed|fcolorbox/.test(n)?(a.style.borderStyle="solid",a.style.borderWidth=St(x)):n==="angl"&&x!==.049&&(a.style.borderTopWidth=St(x),a.style.borderRightWidth=St(x)),s=r.depth+v,t.backgroundColor&&(a.style.backgroundColor=t.backgroundColor,t.borderColor&&(a.style.borderColor=t.borderColor))}var b;if(t.backgroundColor)b=$e.makeVList({positionType:"individualShift",children:[{type:"elem",elem:a,shift:s},{type:"elem",elem:r,shift:0}]},e);else{var T=/cancel|phase/.test(n)?["svg-align"]:[];b=$e.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:a,shift:s,wrapperClasses:T}]},e)}return/cancel/.test(n)&&(b.height=r.height,b.depth=r.depth),/cancel/.test(n)&&!l?$e.makeSpan(["mord","cancel-lap"],[b],e):$e.makeSpan(["mord"],[b],e)},"htmlBuilder$7"),gA=o((t,e)=>{var r=0,n=new mt.MathNode(t.label.indexOf("colorbox")>-1?"mpadded":"menclose",[wn(t.body,e)]);switch(t.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=e.fontMetrics().fboxsep*e.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),t.label==="\\fcolorbox"){var i=Math.max(e.fontMetrics().fboxrule,e.minRuleThickness);n.setAttribute("style","border: "+i+"em solid "+String(t.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike");break}return t.backgroundColor&&n.setAttribute("mathbackground",t.backgroundColor),n},"mathmlBuilder$6");Mt({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=Tr(e[0],"color-token").color,s=e[1];return{type:"enclose",mode:n.mode,label:i,backgroundColor:a,body:s}},htmlBuilder:mA,mathmlBuilder:gA});Mt({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(t,e,r){var{parser:n,funcName:i}=t,a=Tr(e[0],"color-token").color,s=Tr(e[1],"color-token").color,l=e[2];return{type:"enclose",mode:n.mode,label:i,backgroundColor:s,borderColor:a,body:l}},htmlBuilder:mA,mathmlBuilder:gA});Mt({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\fbox",body:e[0]}}});Mt({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"enclose",mode:r.mode,label:n,body:i}},htmlBuilder:mA,mathmlBuilder:gA});Mt({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"enclose",mode:r.mode,label:"\\angl",body:e[0]}}});AU={};o(Jl,"defineEnvironment");_U={};o(ce,"defineMacro");o(NV,"getHLines");M3=o(t=>{var e=t.parser.settings;if(!e.displayMode)throw new gt("{"+t.envName+"} can be used only in display mode.")},"validateAmsEnvironmentContext");o(yA,"getAutoTag");o(wh,"parseArray");o(vA,"dCellStyle");ec=o(function(e,r){var n,i,a=e.body.length,s=e.hLinesBeforeRow,l=0,u=new Array(a),h=[],f=Math.max(r.fontMetrics().arrayRuleWidth,r.minRuleThickness),d=1/r.fontMetrics().ptPerEm,p=5*d;if(e.colSeparationType&&e.colSeparationType==="small"){var m=r.havingStyle(nr.SCRIPT).sizeMultiplier;p=.2778*(m/r.sizeMultiplier)}var g=e.colSeparationType==="CD"?ii({number:3,unit:"ex"},r):12*d,y=3*d,v=e.arraystretch*g,x=.7*v,b=.3*v,T=0;function S(W){for(var Ve=0;Ve0&&(T+=.25),h.push({pos:T,isDashed:W[Ve]})}for(o(S,"setHLinePos"),S(s[0]),n=0;n0&&(R+=b,CW))for(n=0;n=l)){var Q=void 0;(i>0||e.hskipBeforeAndAfter)&&(Q=er.deflt(U.pregap,p),Q!==0&&(O=$e.makeSpan(["arraycolsep"],[]),O.style.width=St(Q),D.push(O)));var ue=[];for(n=0;n0){for(var K=$e.makeLineSpan("hline",r,f),ae=$e.makeLineSpan("hdashline",r,f),Z=[{type:"elem",elem:u,shift:0}];h.length>0;){var de=h.pop(),ne=de.pos-E;de.isDashed?Z.push({type:"elem",elem:ae,shift:ne}):Z.push({type:"elem",elem:K,shift:ne})}u=$e.makeVList({positionType:"individualShift",children:Z},r)}if(P.length===0)return $e.makeSpan(["mord"],[u],r);var Te=$e.makeVList({positionType:"individualShift",children:P},r);return Te=$e.makeSpan(["tag"],[Te],r),$e.makeFragment([u,Te])},"htmlBuilder"),Swe={c:"center ",l:"left ",r:"right "},tc=o(function(e,r){for(var n=[],i=new mt.MathNode("mtd",[],["mtr-glue"]),a=new mt.MathNode("mtd",[],["mml-eqn-num"]),s=0;s0){var g=e.cols,y="",v=!1,x=0,b=g.length;g[0].type==="separator"&&(p+="top ",x=1),g[g.length-1].type==="separator"&&(p+="bottom ",b-=1);for(var T=x;T0?"left ":"",p+=A[A.length-1].length>0?"right ":"";for(var L=1;L-1?"alignat":"align",a=e.envName==="split",s=wh(e.parser,{cols:n,addJot:!0,autoTag:a?void 0:yA(e.envName),emptySingleRow:!0,colSeparationType:i,maxNumCols:a?2:void 0,leqno:e.parser.settings.leqno},"display"),l,u=0,h={type:"ordgroup",mode:e.mode,body:[]};if(r[0]&&r[0].type==="ordgroup"){for(var f="",d=0;d0&&m&&(v=1),n[g]={type:"align",align:y,pregap:v,postgap:0}}return s.colSeparationType=m?"align":"alignat",s},"alignedHandler");Jl({type:"array",names:["array","darray"],props:{numArgs:1},handler(t,e){var r=L3(e[0]),n=r?[e[0]]:Tr(e[0],"ordgroup").body,i=n.map(function(s){var l=fA(s),u=l.text;if("lcr".indexOf(u)!==-1)return{type:"align",align:u};if(u==="|")return{type:"separator",separator:"|"};if(u===":")return{type:"separator",separator:":"};throw new gt("Unknown column alignment: "+u,s)}),a={cols:i,hskipBeforeAndAfter:!0,maxNumCols:i.length};return wh(t.parser,a,vA(t.envName))},htmlBuilder:ec,mathmlBuilder:tc});Jl({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(t){var e={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[t.envName.replace("*","")],r="c",n={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if(t.envName.charAt(t.envName.length-1)==="*"){var i=t.parser;if(i.consumeSpaces(),i.fetch().text==="["){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,"lcr".indexOf(r)===-1)throw new gt("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),n.cols=[{type:"align",align:r}]}}var a=wh(t.parser,n,vA(t.envName)),s=Math.max(0,...a.body.map(l=>l.length));return a.cols=new Array(s).fill({type:"align",align:r}),e?{type:"leftright",mode:t.mode,body:[a],left:e[0],right:e[1],rightColor:void 0}:a},htmlBuilder:ec,mathmlBuilder:tc});Jl({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(t){var e={arraystretch:.5},r=wh(t.parser,e,"script");return r.colSeparationType="small",r},htmlBuilder:ec,mathmlBuilder:tc});Jl({type:"array",names:["subarray"],props:{numArgs:1},handler(t,e){var r=L3(e[0]),n=r?[e[0]]:Tr(e[0],"ordgroup").body,i=n.map(function(s){var l=fA(s),u=l.text;if("lc".indexOf(u)!==-1)return{type:"align",align:u};throw new gt("Unknown column alignment: "+u,s)});if(i.length>1)throw new gt("{subarray} can contain only one column");var a={cols:i,hskipBeforeAndAfter:!1,arraystretch:.5};if(a=wh(t.parser,a,"script"),a.body.length>0&&a.body[0].length>1)throw new gt("{subarray} can contain only one column");return a},htmlBuilder:ec,mathmlBuilder:tc});Jl({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(t){var e={arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},r=wh(t.parser,e,vA(t.envName));return{type:"leftright",mode:t.mode,body:[r],left:t.envName.indexOf("r")>-1?".":"\\{",right:t.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:ec,mathmlBuilder:tc});Jl({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:DU,htmlBuilder:ec,mathmlBuilder:tc});Jl({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(t){er.contains(["gather","gather*"],t.envName)&&M3(t);var e={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:yA(t.envName),emptySingleRow:!0,leqno:t.parser.settings.leqno};return wh(t.parser,e,"display")},htmlBuilder:ec,mathmlBuilder:tc});Jl({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:DU,htmlBuilder:ec,mathmlBuilder:tc});Jl({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(t){M3(t);var e={autoTag:yA(t.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:t.parser.settings.leqno};return wh(t.parser,e,"display")},htmlBuilder:ec,mathmlBuilder:tc});Jl({type:"array",names:["CD"],props:{numArgs:0},handler(t){return M3(t),hwe(t.parser)},htmlBuilder:ec,mathmlBuilder:tc});ce("\\nonumber","\\gdef\\@eqnsw{0}");ce("\\notag","\\nonumber");Mt({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler(t,e){throw new gt(t.funcName+" valid only within array environment")}});MV=AU;Mt({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];if(i.type!=="ordgroup")throw new gt("Invalid environment name",i);for(var a="",s=0;s{var r=t.font,n=e.withFont(r);return Hr(t.body,n)},"htmlBuilder$5"),RU=o((t,e)=>{var r=t.font,n=e.withFont(r);return wn(t.body,n)},"mathmlBuilder$4"),IV={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};Mt({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathsfit","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=S3(e[0]),a=n;return a in IV&&(a=IV[a]),{type:"font",mode:r.mode,font:a.slice(1),body:i}},"handler"),htmlBuilder:LU,mathmlBuilder:RU});Mt({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r}=t,n=e[0],i=er.isCharacterBox(n);return{type:"mclass",mode:r.mode,mclass:R3(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:i}},"handler")});Mt({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n,breakOnTokenText:i}=t,{mode:a}=r,s=r.parseExpression(!0,i),l="math"+n.slice(1);return{type:"font",mode:a,font:l,body:{type:"ordgroup",mode:r.mode,body:s}}},"handler"),htmlBuilder:LU,mathmlBuilder:RU});NU=o((t,e)=>{var r=e;return t==="display"?r=r.id>=nr.SCRIPT.id?r.text():nr.DISPLAY:t==="text"&&r.size===nr.DISPLAY.size?r=nr.TEXT:t==="script"?r=nr.SCRIPT:t==="scriptscript"&&(r=nr.SCRIPTSCRIPT),r},"adjustStyle"),xA=o((t,e)=>{var r=NU(t.size,e.style),n=r.fracNum(),i=r.fracDen(),a;a=e.havingStyle(n);var s=Hr(t.numer,a,e);if(t.continued){var l=8.5/e.fontMetrics().ptPerEm,u=3.5/e.fontMetrics().ptPerEm;s.height=s.height0?g=3*p:g=7*p,y=e.fontMetrics().denom1):(d>0?(m=e.fontMetrics().num2,g=p):(m=e.fontMetrics().num3,g=3*p),y=e.fontMetrics().denom2);var v;if(f){var b=e.fontMetrics().axisHeight;m-s.depth-(b+.5*d){var r=new mt.MathNode("mfrac",[wn(t.numer,e),wn(t.denom,e)]);if(!t.hasBarLine)r.setAttribute("linethickness","0px");else if(t.barSize){var n=ii(t.barSize,e);r.setAttribute("linethickness",St(n))}var i=NU(t.size,e.style);if(i.size!==e.style.size){r=new mt.MathNode("mstyle",[r]);var a=i.size===nr.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",a),r.setAttribute("scriptlevel","0")}if(t.leftDelim!=null||t.rightDelim!=null){var s=[];if(t.leftDelim!=null){var l=new mt.MathNode("mo",[new mt.TextNode(t.leftDelim.replace("\\",""))]);l.setAttribute("fence","true"),s.push(l)}if(s.push(r),t.rightDelim!=null){var u=new mt.MathNode("mo",[new mt.TextNode(t.rightDelim.replace("\\",""))]);u.setAttribute("fence","true"),s.push(u)}return uA(s)}return r},"mathmlBuilder$3");Mt({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1],s,l=null,u=null,h="auto";switch(n){case"\\dfrac":case"\\frac":case"\\tfrac":s=!0;break;case"\\\\atopfrac":s=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":s=!1,l="(",u=")";break;case"\\\\bracefrac":s=!1,l="\\{",u="\\}";break;case"\\\\brackfrac":s=!1,l="[",u="]";break;default:throw new Error("Unrecognized genfrac command")}switch(n){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text";break}return{type:"genfrac",mode:r.mode,continued:!1,numer:i,denom:a,hasBarLine:s,leftDelim:l,rightDelim:u,size:h,barSize:null}},"handler"),htmlBuilder:xA,mathmlBuilder:bA});Mt({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=e[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:i,denom:a,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}},"handler")});Mt({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(t){var{parser:e,funcName:r,token:n}=t,i;switch(r){case"\\over":i="\\frac";break;case"\\choose":i="\\binom";break;case"\\atop":i="\\\\atopfrac";break;case"\\brace":i="\\\\bracefrac";break;case"\\brack":i="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:e.mode,replaceWith:i,token:n}}});OV=["display","text","script","scriptscript"],PV=o(function(e){var r=null;return e.length>0&&(r=e,r=r==="."?null:r),r},"delimFromValue");Mt({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(t,e){var{parser:r}=t,n=e[4],i=e[5],a=S3(e[0]),s=a.type==="atom"&&a.family==="open"?PV(a.text):null,l=S3(e[1]),u=l.type==="atom"&&l.family==="close"?PV(l.text):null,h=Tr(e[2],"size"),f,d=null;h.isBlank?f=!0:(d=h.value,f=d.number>0);var p="auto",m=e[3];if(m.type==="ordgroup"){if(m.body.length>0){var g=Tr(m.body[0],"textord");p=OV[Number(g.text)]}}else m=Tr(m,"textord"),p=OV[Number(m.text)];return{type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:f,barSize:d,leftDelim:s,rightDelim:u,size:p}},htmlBuilder:xA,mathmlBuilder:bA});Mt({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(t,e){var{parser:r,funcName:n,token:i}=t;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Tr(e[0],"size").value,token:i}}});Mt({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0],a=iTe(Tr(e[1],"infix").size),s=e[2],l=a.number>0;return{type:"genfrac",mode:r.mode,numer:i,denom:s,continued:!1,hasBarLine:l,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},"handler"),htmlBuilder:xA,mathmlBuilder:bA});MU=o((t,e)=>{var r=e.style,n,i;t.type==="supsub"?(n=t.sup?Hr(t.sup,e.havingStyle(r.sup()),e):Hr(t.sub,e.havingStyle(r.sub()),e),i=Tr(t.base,"horizBrace")):i=Tr(t,"horizBrace");var a=Hr(i.base,e.havingBaseStyle(nr.DISPLAY)),s=pu.svgSpan(i,e),l;if(i.isOver?(l=$e.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:a},{type:"kern",size:.1},{type:"elem",elem:s}]},e),l.children[0].children[0].children[1].classes.push("svg-align")):(l=$e.makeVList({positionType:"bottom",positionData:a.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:a}]},e),l.children[0].children[0].children[0].classes.push("svg-align")),n){var u=$e.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e);i.isOver?l=$e.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:u},{type:"kern",size:.2},{type:"elem",elem:n}]},e):l=$e.makeVList({positionType:"bottom",positionData:u.depth+.2+n.height+n.depth,children:[{type:"elem",elem:n},{type:"kern",size:.2},{type:"elem",elem:u}]},e)}return $e.makeSpan(["mord",i.isOver?"mover":"munder"],[l],e)},"htmlBuilder$3"),Cwe=o((t,e)=>{var r=pu.mathMLnode(t.label);return new mt.MathNode(t.isOver?"mover":"munder",[wn(t.base,e),r])},"mathmlBuilder$2");Mt({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(t,e){var{parser:r,funcName:n}=t;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:e[0]}},htmlBuilder:MU,mathmlBuilder:Cwe});Mt({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[1],i=Tr(e[0],"url").url;return r.settings.isTrusted({command:"\\href",url:i})?{type:"href",mode:r.mode,href:i,body:gi(n)}:r.formatUnsupportedCmd("\\href")},"handler"),htmlBuilder:o((t,e)=>{var r=Ii(t.body,e,!1);return $e.makeAnchor(t.href,[],r,e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=Th(t.body,e);return r instanceof es||(r=new es("mrow",[r])),r.setAttribute("href",t.href),r},"mathmlBuilder")});Mt({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=Tr(e[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var i=[],a=0;a{var{parser:r,funcName:n,token:i}=t,a=Tr(e[0],"raw").string,s=e[1];r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var l,u={};switch(n){case"\\htmlClass":u.class=a,l={command:"\\htmlClass",class:a};break;case"\\htmlId":u.id=a,l={command:"\\htmlId",id:a};break;case"\\htmlStyle":u.style=a,l={command:"\\htmlStyle",style:a};break;case"\\htmlData":{for(var h=a.split(","),f=0;f{var r=Ii(t.body,e,!1),n=["enclosing"];t.attributes.class&&n.push(...t.attributes.class.trim().split(/\s+/));var i=$e.makeSpan(n,r,e);for(var a in t.attributes)a!=="class"&&t.attributes.hasOwnProperty(a)&&i.setAttribute(a,t.attributes[a]);return i},"htmlBuilder"),mathmlBuilder:o((t,e)=>Th(t.body,e),"mathmlBuilder")});Mt({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"htmlmathml",mode:r.mode,html:gi(e[0]),mathml:gi(e[1])}},"handler"),htmlBuilder:o((t,e)=>{var r=Ii(t.html,e,!1);return $e.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>Th(t.mathml,e),"mathmlBuilder")});q7=o(function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var r=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!r)throw new gt("Invalid size: '"+e+"' in \\includegraphics");var n={number:+(r[1]+r[2]),unit:r[3]};if(!ZV(n))throw new gt("Invalid unit: '"+n.unit+"' in \\includegraphics.");return n},"sizeData");Mt({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:o((t,e,r)=>{var{parser:n}=t,i={number:0,unit:"em"},a={number:.9,unit:"em"},s={number:0,unit:"em"},l="";if(r[0])for(var u=Tr(r[0],"raw").string,h=u.split(","),f=0;f{var r=ii(t.height,e),n=0;t.totalheight.number>0&&(n=ii(t.totalheight,e)-r);var i=0;t.width.number>0&&(i=ii(t.width,e));var a={height:St(r+n)};i>0&&(a.width=St(i)),n>0&&(a.verticalAlign=St(-n));var s=new Q7(t.src,t.alt,a);return s.height=r,s.depth=n,s},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new mt.MathNode("mglyph",[]);r.setAttribute("alt",t.alt);var n=ii(t.height,e),i=0;if(t.totalheight.number>0&&(i=ii(t.totalheight,e)-n,r.setAttribute("valign",St(-i))),r.setAttribute("height",St(n+i)),t.width.number>0){var a=ii(t.width,e);r.setAttribute("width",St(a))}return r.setAttribute("src",t.src),r},"mathmlBuilder")});Mt({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=Tr(e[0],"size");if(r.settings.strict){var a=n[1]==="m",s=i.value.unit==="mu";a?(s||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, "+("not "+i.value.unit+" units")),r.mode!=="math"&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):s&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:i.value}},htmlBuilder(t,e){return $e.makeGlue(t.dimension,e)},mathmlBuilder(t,e){var r=ii(t.dimension,e);return new mt.SpaceNode(r)}});Mt({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:i}},"handler"),htmlBuilder:o((t,e)=>{var r;t.alignment==="clap"?(r=$e.makeSpan([],[Hr(t.body,e)]),r=$e.makeSpan(["inner"],[r],e)):r=$e.makeSpan(["inner"],[Hr(t.body,e)]);var n=$e.makeSpan(["fix"],[]),i=$e.makeSpan([t.alignment],[r,n],e),a=$e.makeSpan(["strut"]);return a.style.height=St(i.height+i.depth),i.depth&&(a.style.verticalAlign=St(-i.depth)),i.children.unshift(a),i=$e.makeSpan(["thinbox"],[i],e),$e.makeSpan(["mord","vbox"],[i],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=new mt.MathNode("mpadded",[wn(t.body,e)]);if(t.alignment!=="rlap"){var n=t.alignment==="llap"?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r},"mathmlBuilder")});Mt({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){var{funcName:r,parser:n}=t,i=n.mode;n.switchMode("math");var a=r==="\\("?"\\)":"$",s=n.parseExpression(!1,a);return n.expect(a),n.switchMode(i),{type:"styling",mode:n.mode,style:"text",body:s}}});Mt({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(t,e){throw new gt("Mismatched "+t.funcName)}});BV=o((t,e)=>{switch(e.style.size){case nr.DISPLAY.size:return t.display;case nr.TEXT.size:return t.text;case nr.SCRIPT.size:return t.script;case nr.SCRIPTSCRIPT.size:return t.scriptscript;default:return t.text}},"chooseMathStyle");Mt({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:o((t,e)=>{var{parser:r}=t;return{type:"mathchoice",mode:r.mode,display:gi(e[0]),text:gi(e[1]),script:gi(e[2]),scriptscript:gi(e[3])}},"handler"),htmlBuilder:o((t,e)=>{var r=BV(t,e),n=Ii(r,e,!1);return $e.makeFragment(n)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=BV(t,e);return Th(r,e)},"mathmlBuilder")});IU=o((t,e,r,n,i,a,s)=>{t=$e.makeSpan([],[t]);var l=r&&er.isCharacterBox(r),u,h;if(e){var f=Hr(e,n.havingStyle(i.sup()),n);h={elem:f,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-f.depth)}}if(r){var d=Hr(r,n.havingStyle(i.sub()),n);u={elem:d,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-d.height)}}var p;if(h&&u){var m=n.fontMetrics().bigOpSpacing5+u.elem.height+u.elem.depth+u.kern+t.depth+s;p=$e.makeVList({positionType:"bottom",positionData:m,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:St(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:St(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(u){var g=t.height-s;p=$e.makeVList({positionType:"top",positionData:g,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:u.elem,marginLeft:St(-a)},{type:"kern",size:u.kern},{type:"elem",elem:t}]},n)}else if(h){var y=t.depth+s;p=$e.makeVList({positionType:"bottom",positionData:y,children:[{type:"elem",elem:t},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:St(a)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else return t;var v=[p];if(u&&a!==0&&!l){var x=$e.makeSpan(["mspace"],[],n);x.style.marginRight=St(a),v.unshift(x)}return $e.makeSpan(["mop","op-limits"],v,n)},"assembleSupSub"),OU=["\\smallint"],C0=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=Tr(t.base,"op"),i=!0):a=Tr(t,"op");var s=e.style,l=!1;s.size===nr.DISPLAY.size&&a.symbol&&!er.contains(OU,a.name)&&(l=!0);var u;if(a.symbol){var h=l?"Size2-Regular":"Size1-Regular",f="";if((a.name==="\\oiint"||a.name==="\\oiiint")&&(f=a.name.slice(1),a.name=f==="oiint"?"\\iint":"\\iiint"),u=$e.makeSymbol(a.name,h,"math",e,["mop","op-symbol",l?"large-op":"small-op"]),f.length>0){var d=u.italic,p=$e.staticSvg(f+"Size"+(l?"2":"1"),e);u=$e.makeVList({positionType:"individualShift",children:[{type:"elem",elem:u,shift:0},{type:"elem",elem:p,shift:l?.08:0}]},e),a.name="\\"+f,u.classes.unshift("mop"),u.italic=d}}else if(a.body){var m=Ii(a.body,e,!0);m.length===1&&m[0]instanceof Cs?(u=m[0],u.classes[0]="mop"):u=$e.makeSpan(["mop"],m,e)}else{for(var g=[],y=1;y{var r;if(t.symbol)r=new es("mo",[Lo(t.name,t.mode)]),er.contains(OU,t.name)&&r.setAttribute("largeop","false");else if(t.body)r=new es("mo",As(t.body,e));else{r=new es("mi",[new _o(t.name.slice(1))]);var n=new es("mo",[Lo("\u2061","text")]);t.parentIsSupSub?r=new es("mrow",[r,n]):r=cU([r,n])}return r},"mathmlBuilder$1"),Awe={"\u220F":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22C0":"\\bigwedge","\u22C1":"\\bigvee","\u22C2":"\\bigcap","\u22C3":"\\bigcup","\u2A00":"\\bigodot","\u2A01":"\\bigoplus","\u2A02":"\\bigotimes","\u2A04":"\\biguplus","\u2A06":"\\bigsqcup"};Mt({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220F","\u2210","\u2211","\u22C0","\u22C1","\u22C2","\u22C3","\u2A00","\u2A01","\u2A02","\u2A04","\u2A06"],props:{numArgs:0},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=n;return i.length===1&&(i=Awe[i]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:i}},"handler"),htmlBuilder:C0,mathmlBuilder:ev});Mt({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:gi(n)}},"handler"),htmlBuilder:C0,mathmlBuilder:ev});_we={"\u222B":"\\int","\u222C":"\\iint","\u222D":"\\iiint","\u222E":"\\oint","\u222F":"\\oiint","\u2230":"\\oiiint"};Mt({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:C0,mathmlBuilder:ev});Mt({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t;return{type:"op",mode:e.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:C0,mathmlBuilder:ev});Mt({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222B","\u222C","\u222D","\u222E","\u222F","\u2230"],props:{numArgs:0},handler(t){var{parser:e,funcName:r}=t,n=r;return n.length===1&&(n=_we[n]),{type:"op",mode:e.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:C0,mathmlBuilder:ev});PU=o((t,e)=>{var r,n,i=!1,a;t.type==="supsub"?(r=t.sup,n=t.sub,a=Tr(t.base,"operatorname"),i=!0):a=Tr(t,"operatorname");var s;if(a.body.length>0){for(var l=a.body.map(d=>{var p=d.text;return typeof p=="string"?{type:"textord",mode:d.mode,text:p}:d}),u=Ii(l,e.withFont("mathrm"),!0),h=0;h{for(var r=As(t.body,e.withFont("mathrm")),n=!0,i=0;if.toText()).join("");r=[new mt.TextNode(l)]}var u=new mt.MathNode("mi",r);u.setAttribute("mathvariant","normal");var h=new mt.MathNode("mo",[Lo("\u2061","text")]);return t.parentIsSupSub?new mt.MathNode("mrow",[u,h]):mt.newDocumentFragment([u,h])},"mathmlBuilder");Mt({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:o((t,e)=>{var{parser:r,funcName:n}=t,i=e[0];return{type:"operatorname",mode:r.mode,body:gi(i),alwaysHandleSupSub:n==="\\operatornamewithlimits",limits:!1,parentIsSupSub:!1}},"handler"),htmlBuilder:PU,mathmlBuilder:Dwe});ce("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@");dd({type:"ordgroup",htmlBuilder(t,e){return t.semisimple?$e.makeFragment(Ii(t.body,e,!1)):$e.makeSpan(["mord"],Ii(t.body,e,!0),e)},mathmlBuilder(t,e){return Th(t.body,e,!0)}});Mt({type:"overline",names:["\\overline"],props:{numArgs:1},handler(t,e){var{parser:r}=t,n=e[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder(t,e){var r=Hr(t.body,e.havingCrampedStyle()),n=$e.makeLineSpan("overline-line",e),i=e.fontMetrics().defaultRuleThickness,a=$e.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*i},{type:"elem",elem:n},{type:"kern",size:i}]},e);return $e.makeSpan(["mord","overline"],[a],e)},mathmlBuilder(t,e){var r=new mt.MathNode("mo",[new mt.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new mt.MathNode("mover",[wn(t.body,e),r]);return n.setAttribute("accent","true"),n}});Mt({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"phantom",mode:r.mode,body:gi(n)}},"handler"),htmlBuilder:o((t,e)=>{var r=Ii(t.body,e.withPhantom(),!1);return $e.makeFragment(r)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=As(t.body,e);return new mt.MathNode("mphantom",r)},"mathmlBuilder")});Mt({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"hphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=$e.makeSpan([],[Hr(t.body,e.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var n=0;n{var r=As(gi(t.body),e),n=new mt.MathNode("mphantom",r),i=new mt.MathNode("mpadded",[n]);return i.setAttribute("height","0px"),i.setAttribute("depth","0px"),i},"mathmlBuilder")});Mt({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:o((t,e)=>{var{parser:r}=t,n=e[0];return{type:"vphantom",mode:r.mode,body:n}},"handler"),htmlBuilder:o((t,e)=>{var r=$e.makeSpan(["inner"],[Hr(t.body,e.withPhantom())]),n=$e.makeSpan(["fix"],[]);return $e.makeSpan(["mord","rlap"],[r,n],e)},"htmlBuilder"),mathmlBuilder:o((t,e)=>{var r=As(gi(t.body),e),n=new mt.MathNode("mphantom",r),i=new mt.MathNode("mpadded",[n]);return i.setAttribute("width","0px"),i},"mathmlBuilder")});Mt({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(t,e){var{parser:r}=t,n=Tr(e[0],"size").value,i=e[1];return{type:"raisebox",mode:r.mode,dy:n,body:i}},htmlBuilder(t,e){var r=Hr(t.body,e),n=ii(t.dy,e);return $e.makeVList({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){var r=new mt.MathNode("mpadded",[wn(t.body,e)]),n=t.dy.number+t.dy.unit;return r.setAttribute("voffset",n),r}});Mt({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0,allowedInArgument:!0},handler(t){var{parser:e}=t;return{type:"internal",mode:e.mode}}});Mt({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler(t,e,r){var{parser:n}=t,i=r[0],a=Tr(e[0],"size"),s=Tr(e[1],"size");return{type:"rule",mode:n.mode,shift:i&&Tr(i,"size").value,width:a.value,height:s.value}},htmlBuilder(t,e){var r=$e.makeSpan(["mord","rule"],[],e),n=ii(t.width,e),i=ii(t.height,e),a=t.shift?ii(t.shift,e):0;return r.style.borderRightWidth=St(n),r.style.borderTopWidth=St(i),r.style.bottom=St(a),r.width=n,r.height=i+a,r.depth=-a,r.maxFontSize=i*1.125*e.sizeMultiplier,r},mathmlBuilder(t,e){var r=ii(t.width,e),n=ii(t.height,e),i=t.shift?ii(t.shift,e):0,a=e.color&&e.getColor()||"black",s=new mt.MathNode("mspace");s.setAttribute("mathbackground",a),s.setAttribute("width",St(r)),s.setAttribute("height",St(n));var l=new mt.MathNode("mpadded",[s]);return i>=0?l.setAttribute("height",St(i)):(l.setAttribute("height",St(i)),l.setAttribute("depth",St(-i))),l.setAttribute("voffset",St(i)),l}});o(BU,"sizingGroup");FV=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],Lwe=o((t,e)=>{var r=e.havingSize(t.size);return BU(t.body,r,e)},"htmlBuilder");Mt({type:"sizing",names:FV,props:{numArgs:0,allowedInText:!0},handler:o((t,e)=>{var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!1,r);return{type:"sizing",mode:i.mode,size:FV.indexOf(n)+1,body:a}},"handler"),htmlBuilder:Lwe,mathmlBuilder:o((t,e)=>{var r=e.havingSize(t.size),n=As(t.body,r),i=new mt.MathNode("mstyle",n);return i.setAttribute("mathsize",St(r.sizeMultiplier)),i},"mathmlBuilder")});Mt({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:o((t,e,r)=>{var{parser:n}=t,i=!1,a=!1,s=r[0]&&Tr(r[0],"ordgroup");if(s)for(var l="",u=0;u{var r=$e.makeSpan([],[Hr(t.body,e)]);if(!t.smashHeight&&!t.smashDepth)return r;if(t.smashHeight&&(r.height=0,r.children))for(var n=0;n{var r=new mt.MathNode("mpadded",[wn(t.body,e)]);return t.smashHeight&&r.setAttribute("height","0px"),t.smashDepth&&r.setAttribute("depth","0px"),r},"mathmlBuilder")});Mt({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(t,e,r){var{parser:n}=t,i=r[0],a=e[0];return{type:"sqrt",mode:n.mode,body:a,index:i}},htmlBuilder(t,e){var r=Hr(t.body,e.havingCrampedStyle());r.height===0&&(r.height=e.fontMetrics().xHeight),r=$e.wrapFragment(r,e);var n=e.fontMetrics(),i=n.defaultRuleThickness,a=i;e.style.idr.height+r.depth+s&&(s=(s+d-r.height-r.depth)/2);var p=u.height-r.height-s-h;r.style.paddingLeft=St(f);var m=$e.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+p)},{type:"elem",elem:u},{type:"kern",size:h}]},e);if(t.index){var g=e.havingStyle(nr.SCRIPTSCRIPT),y=Hr(t.index,g,e),v=.6*(m.height-m.depth),x=$e.makeVList({positionType:"shift",positionData:-v,children:[{type:"elem",elem:y}]},e),b=$e.makeSpan(["root"],[x]);return $e.makeSpan(["mord","sqrt"],[b,m],e)}else return $e.makeSpan(["mord","sqrt"],[m],e)},mathmlBuilder(t,e){var{body:r,index:n}=t;return n?new mt.MathNode("mroot",[wn(r,e),wn(n,e)]):new mt.MathNode("msqrt",[wn(r,e)])}});$V={display:nr.DISPLAY,text:nr.TEXT,script:nr.SCRIPT,scriptscript:nr.SCRIPTSCRIPT};Mt({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(t,e){var{breakOnTokenText:r,funcName:n,parser:i}=t,a=i.parseExpression(!0,r),s=n.slice(1,n.length-5);return{type:"styling",mode:i.mode,style:s,body:a}},htmlBuilder(t,e){var r=$V[t.style],n=e.havingStyle(r).withFont("");return BU(t.body,n,e)},mathmlBuilder(t,e){var r=$V[t.style],n=e.havingStyle(r),i=As(t.body,n),a=new mt.MathNode("mstyle",i),s={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]},l=s[t.style];return a.setAttribute("scriptlevel",l[0]),a.setAttribute("displaystyle",l[1]),a}});Rwe=o(function(e,r){var n=e.base;if(n)if(n.type==="op"){var i=n.limits&&(r.style.size===nr.DISPLAY.size||n.alwaysHandleSupSub);return i?C0:null}else if(n.type==="operatorname"){var a=n.alwaysHandleSupSub&&(r.style.size===nr.DISPLAY.size||n.limits);return a?PU:null}else{if(n.type==="accent")return er.isCharacterBox(n.base)?dA:null;if(n.type==="horizBrace"){var s=!e.sub;return s===n.isOver?MU:null}else return null}else return null},"htmlBuilderDelegate");dd({type:"supsub",htmlBuilder(t,e){var r=Rwe(t,e);if(r)return r(t,e);var{base:n,sup:i,sub:a}=t,s=Hr(n,e),l,u,h=e.fontMetrics(),f=0,d=0,p=n&&er.isCharacterBox(n);if(i){var m=e.havingStyle(e.style.sup());l=Hr(i,m,e),p||(f=s.height-m.fontMetrics().supDrop*m.sizeMultiplier/e.sizeMultiplier)}if(a){var g=e.havingStyle(e.style.sub());u=Hr(a,g,e),p||(d=s.depth+g.fontMetrics().subDrop*g.sizeMultiplier/e.sizeMultiplier)}var y;e.style===nr.DISPLAY?y=h.sup1:e.style.cramped?y=h.sup3:y=h.sup2;var v=e.sizeMultiplier,x=St(.5/h.ptPerEm/v),b=null;if(u){var T=t.base&&t.base.type==="op"&&t.base.name&&(t.base.name==="\\oiint"||t.base.name==="\\oiiint");(s instanceof Cs||T)&&(b=St(-s.italic))}var S;if(l&&u){f=Math.max(f,y,l.depth+.25*h.xHeight),d=Math.max(d,h.sub2);var w=h.defaultRuleThickness,k=4*w;if(f-l.depth-(u.height-d)0&&(f+=C,d-=C)}var A=[{type:"elem",elem:u,shift:d,marginRight:x,marginLeft:b},{type:"elem",elem:l,shift:-f,marginRight:x}];S=$e.makeVList({positionType:"individualShift",children:A},e)}else if(u){d=Math.max(d,h.sub1,u.height-.8*h.xHeight);var L=[{type:"elem",elem:u,marginLeft:b,marginRight:x}];S=$e.makeVList({positionType:"shift",positionData:d,children:L},e)}else if(l)f=Math.max(f,y,l.depth+.25*h.xHeight),S=$e.makeVList({positionType:"shift",positionData:-f,children:[{type:"elem",elem:l,marginRight:x}]},e);else throw new Error("supsub must have either sup or sub.");var I=J7(s,"right")||"mord";return $e.makeSpan([I],[s,$e.makeSpan(["msupsub"],[S])],e)},mathmlBuilder(t,e){var r=!1,n,i;t.base&&t.base.type==="horizBrace"&&(i=!!t.sup,i===t.base.isOver&&(r=!0,n=t.base.isOver)),t.base&&(t.base.type==="op"||t.base.type==="operatorname")&&(t.base.parentIsSupSub=!0);var a=[wn(t.base,e)];t.sub&&a.push(wn(t.sub,e)),t.sup&&a.push(wn(t.sup,e));var s;if(r)s=n?"mover":"munder";else if(t.sub)if(t.sup){var h=t.base;h&&h.type==="op"&&h.limits&&e.style===nr.DISPLAY||h&&h.type==="operatorname"&&h.alwaysHandleSupSub&&(e.style===nr.DISPLAY||h.limits)?s="munderover":s="msubsup"}else{var u=t.base;u&&u.type==="op"&&u.limits&&(e.style===nr.DISPLAY||u.alwaysHandleSupSub)||u&&u.type==="operatorname"&&u.alwaysHandleSupSub&&(u.limits||e.style===nr.DISPLAY)?s="munder":s="msub"}else{var l=t.base;l&&l.type==="op"&&l.limits&&(e.style===nr.DISPLAY||l.alwaysHandleSupSub)||l&&l.type==="operatorname"&&l.alwaysHandleSupSub&&(l.limits||e.style===nr.DISPLAY)?s="mover":s="msup"}return new mt.MathNode(s,a)}});dd({type:"atom",htmlBuilder(t,e){return $e.mathsym(t.text,t.mode,e,["m"+t.family])},mathmlBuilder(t,e){var r=new mt.MathNode("mo",[Lo(t.text,t.mode)]);if(t.family==="bin"){var n=hA(t,e);n==="bold-italic"&&r.setAttribute("mathvariant",n)}else t.family==="punct"?r.setAttribute("separator","true"):(t.family==="open"||t.family==="close")&&r.setAttribute("stretchy","false");return r}});FU={mi:"italic",mn:"normal",mtext:"normal"};dd({type:"mathord",htmlBuilder(t,e){return $e.makeOrd(t,e,"mathord")},mathmlBuilder(t,e){var r=new mt.MathNode("mi",[Lo(t.text,t.mode,e)]),n=hA(t,e)||"italic";return n!==FU[r.type]&&r.setAttribute("mathvariant",n),r}});dd({type:"textord",htmlBuilder(t,e){return $e.makeOrd(t,e,"textord")},mathmlBuilder(t,e){var r=Lo(t.text,t.mode,e),n=hA(t,e)||"normal",i;return t.mode==="text"?i=new mt.MathNode("mtext",[r]):/[0-9]/.test(t.text)?i=new mt.MathNode("mn",[r]):t.text==="\\prime"?i=new mt.MathNode("mo",[r]):i=new mt.MathNode("mi",[r]),n!==FU[i.type]&&i.setAttribute("mathvariant",n),i}});W7={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},Y7={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};dd({type:"spacing",htmlBuilder(t,e){if(Y7.hasOwnProperty(t.text)){var r=Y7[t.text].className||"";if(t.mode==="text"){var n=$e.makeOrd(t,e,"textord");return n.classes.push(r),n}else return $e.makeSpan(["mspace",r],[$e.mathsym(t.text,t.mode,e)],e)}else{if(W7.hasOwnProperty(t.text))return $e.makeSpan(["mspace",W7[t.text]],[],e);throw new gt('Unknown type of space "'+t.text+'"')}},mathmlBuilder(t,e){var r;if(Y7.hasOwnProperty(t.text))r=new mt.MathNode("mtext",[new mt.TextNode("\xA0")]);else{if(W7.hasOwnProperty(t.text))return new mt.MathNode("mspace");throw new gt('Unknown type of space "'+t.text+'"')}return r}});zV=o(()=>{var t=new mt.MathNode("mtd",[]);return t.setAttribute("width","50%"),t},"pad");dd({type:"tag",mathmlBuilder(t,e){var r=new mt.MathNode("mtable",[new mt.MathNode("mtr",[zV(),new mt.MathNode("mtd",[Th(t.body,e)]),zV(),new mt.MathNode("mtd",[Th(t.tag,e)])])]);return r.setAttribute("width","100%"),r}});GV={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},VV={"\\textbf":"textbf","\\textmd":"textmd"},Nwe={"\\textit":"textit","\\textup":"textup"},UV=o((t,e)=>{var r=t.font;if(r){if(GV[r])return e.withTextFontFamily(GV[r]);if(VV[r])return e.withTextFontWeight(VV[r]);if(r==="\\emph")return e.fontShape==="textit"?e.withTextFontShape("textup"):e.withTextFontShape("textit")}else return e;return e.withTextFontShape(Nwe[r])},"optionsWithFont");Mt({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(t,e){var{parser:r,funcName:n}=t,i=e[0];return{type:"text",mode:r.mode,body:gi(i),font:n}},htmlBuilder(t,e){var r=UV(t,e),n=Ii(t.body,r,!0);return $e.makeSpan(["mord","text"],n,r)},mathmlBuilder(t,e){var r=UV(t,e);return Th(t.body,r)}});Mt({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(t,e){var{parser:r}=t;return{type:"underline",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=Hr(t.body,e),n=$e.makeLineSpan("underline-line",e),i=e.fontMetrics().defaultRuleThickness,a=$e.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:i},{type:"elem",elem:n},{type:"kern",size:3*i},{type:"elem",elem:r}]},e);return $e.makeSpan(["mord","underline"],[a],e)},mathmlBuilder(t,e){var r=new mt.MathNode("mo",[new mt.TextNode("\u203E")]);r.setAttribute("stretchy","true");var n=new mt.MathNode("munder",[wn(t.body,e),r]);return n.setAttribute("accentunder","true"),n}});Mt({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(t,e){var{parser:r}=t;return{type:"vcenter",mode:r.mode,body:e[0]}},htmlBuilder(t,e){var r=Hr(t.body,e),n=e.fontMetrics().axisHeight,i=.5*(r.height-n-(r.depth+n));return $e.makeVList({positionType:"shift",positionData:i,children:[{type:"elem",elem:r}]},e)},mathmlBuilder(t,e){return new mt.MathNode("mpadded",[wn(t.body,e)],["vcenter"])}});Mt({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(t,e,r){throw new gt("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(t,e){for(var r=HV(t),n=[],i=e.havingStyle(e.style.text()),a=0;at.body.replace(/ /g,t.star?"\u2423":"\xA0"),"makeVerb"),xh=oU,$U=`[ \r + ]`,Mwe="\\\\[a-zA-Z@]+",Iwe="\\\\[^\uD800-\uDFFF]",Owe="("+Mwe+")"+$U+"*",Pwe=`\\\\( +|[ \r ]+ +?)[ \r ]*`,iA="[\u0300-\u036F]",Bwe=new RegExp(iA+"+$"),Fwe="("+$U+"+)|"+(Pwe+"|")+"([!-\\[\\]-\u2027\u202A-\uD7FF\uF900-\uFFFF]"+(iA+"*")+"|[\uD800-\uDBFF][\uDC00-\uDFFF]"+(iA+"*")+"|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5"+("|"+Owe)+("|"+Iwe+")"),C3=class{static{o(this,"Lexer")}constructor(e,r){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=r,this.tokenRegex=new RegExp(Fwe,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,r){this.catcodes[e]=r}lex(){var e=this.input,r=this.tokenRegex.lastIndex;if(r===e.length)return new Do("EOF",new to(this,r,r));var n=this.tokenRegex.exec(e);if(n===null||n.index!==r)throw new gt("Unexpected character: '"+e[r]+"'",new Do(e[r],new to(this,r,r+1)));var i=n[6]||n[3]||(n[2]?"\\ ":" ");if(this.catcodes[i]===14){var a=e.indexOf(` +`,this.tokenRegex.lastIndex);return a===-1?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=a+1,this.lex()}return new Do(i,new to(this,r,this.tokenRegex.lastIndex))}},aA=class{static{o(this,"Namespace")}constructor(e,r){e===void 0&&(e={}),r===void 0&&(r={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=r,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(this.undefStack.length===0)throw new gt("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var r in e)e.hasOwnProperty(r)&&(e[r]==null?delete this.current[r]:this.current[r]=e[r])}endGroups(){for(;this.undefStack.length>0;)this.endGroup()}has(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)}get(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]}set(e,r,n){if(n===void 0&&(n=!1),n){for(var i=0;i0&&(this.undefStack[this.undefStack.length-1][e]=r)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}r==null?delete this.current[e]:this.current[e]=r}},$we=_U;ce("\\noexpand",function(t){var e=t.popToken();return t.isExpandable(e.text)&&(e.noexpand=!0,e.treatAsRelax=!0),{tokens:[e],numArgs:0}});ce("\\expandafter",function(t){var e=t.popToken();return t.expandOnce(!0),{tokens:[e],numArgs:0}});ce("\\@firstoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[0],numArgs:0}});ce("\\@secondoftwo",function(t){var e=t.consumeArgs(2);return{tokens:e[1],numArgs:0}});ce("\\@ifnextchar",function(t){var e=t.consumeArgs(3);t.consumeSpaces();var r=t.future();return e[0].length===1&&e[0][0].text===r.text?{tokens:e[1],numArgs:0}:{tokens:e[2],numArgs:0}});ce("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}");ce("\\TextOrMath",function(t){var e=t.consumeArgs(2);return t.mode==="text"?{tokens:e[0],numArgs:0}:{tokens:e[1],numArgs:0}});qV={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};ce("\\char",function(t){var e=t.popToken(),r,n="";if(e.text==="'")r=8,e=t.popToken();else if(e.text==='"')r=16,e=t.popToken();else if(e.text==="`")if(e=t.popToken(),e.text[0]==="\\")n=e.text.charCodeAt(1);else{if(e.text==="EOF")throw new gt("\\char` missing argument");n=e.text.charCodeAt(0)}else r=10;if(r){if(n=qV[e.text],n==null||n>=r)throw new gt("Invalid base-"+r+" digit "+e.text);for(var i;(i=qV[t.future().text])!=null&&i{var i=t.consumeArg().tokens;if(i.length!==1)throw new gt("\\newcommand's first argument must be a macro name");var a=i[0].text,s=t.isDefined(a);if(s&&!e)throw new gt("\\newcommand{"+a+"} attempting to redefine "+(a+"; use \\renewcommand"));if(!s&&!r)throw new gt("\\renewcommand{"+a+"} when command "+a+" does not yet exist; use \\newcommand");var l=0;if(i=t.consumeArg().tokens,i.length===1&&i[0].text==="["){for(var u="",h=t.expandNextToken();h.text!=="]"&&h.text!=="EOF";)u+=h.text,h=t.expandNextToken();if(!u.match(/^\s*[0-9]+\s*$/))throw new gt("Invalid number of arguments: "+u);l=parseInt(u),i=t.consumeArg().tokens}return s&&n||t.macros.set(a,{tokens:i,numArgs:l}),""},"newcommand");ce("\\newcommand",t=>TA(t,!1,!0,!1));ce("\\renewcommand",t=>TA(t,!0,!1,!1));ce("\\providecommand",t=>TA(t,!0,!0,!0));ce("\\message",t=>{var e=t.consumeArgs(1)[0];return console.log(e.reverse().map(r=>r.text).join("")),""});ce("\\errmessage",t=>{var e=t.consumeArgs(1)[0];return console.error(e.reverse().map(r=>r.text).join("")),""});ce("\\show",t=>{var e=t.popToken(),r=e.text;return console.log(e,t.macros.get(r),xh[r],Nn.math[r],Nn.text[r]),""});ce("\\bgroup","{");ce("\\egroup","}");ce("~","\\nobreakspace");ce("\\lq","`");ce("\\rq","'");ce("\\aa","\\r a");ce("\\AA","\\r A");ce("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xA9}");ce("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}");ce("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xAE}");ce("\u212C","\\mathscr{B}");ce("\u2130","\\mathscr{E}");ce("\u2131","\\mathscr{F}");ce("\u210B","\\mathscr{H}");ce("\u2110","\\mathscr{I}");ce("\u2112","\\mathscr{L}");ce("\u2133","\\mathscr{M}");ce("\u211B","\\mathscr{R}");ce("\u212D","\\mathfrak{C}");ce("\u210C","\\mathfrak{H}");ce("\u2128","\\mathfrak{Z}");ce("\\Bbbk","\\Bbb{k}");ce("\xB7","\\cdotp");ce("\\llap","\\mathllap{\\textrm{#1}}");ce("\\rlap","\\mathrlap{\\textrm{#1}}");ce("\\clap","\\mathclap{\\textrm{#1}}");ce("\\mathstrut","\\vphantom{(}");ce("\\underbar","\\underline{\\text{#1}}");ce("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}');ce("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}");ce("\\ne","\\neq");ce("\u2260","\\neq");ce("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}");ce("\u2209","\\notin");ce("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}");ce("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}");ce("\u225A","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225A}}");ce("\u225B","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225B}}");ce("\u225D","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225D}}");ce("\u225E","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225E}}");ce("\u225F","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225F}}");ce("\u27C2","\\perp");ce("\u203C","\\mathclose{!\\mkern-0.8mu!}");ce("\u220C","\\notni");ce("\u231C","\\ulcorner");ce("\u231D","\\urcorner");ce("\u231E","\\llcorner");ce("\u231F","\\lrcorner");ce("\xA9","\\copyright");ce("\xAE","\\textregistered");ce("\uFE0F","\\textregistered");ce("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}');ce("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}');ce("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}');ce("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}');ce("\\vdots","{\\varvdots\\rule{0pt}{15pt}}");ce("\u22EE","\\vdots");ce("\\varGamma","\\mathit{\\Gamma}");ce("\\varDelta","\\mathit{\\Delta}");ce("\\varTheta","\\mathit{\\Theta}");ce("\\varLambda","\\mathit{\\Lambda}");ce("\\varXi","\\mathit{\\Xi}");ce("\\varPi","\\mathit{\\Pi}");ce("\\varSigma","\\mathit{\\Sigma}");ce("\\varUpsilon","\\mathit{\\Upsilon}");ce("\\varPhi","\\mathit{\\Phi}");ce("\\varPsi","\\mathit{\\Psi}");ce("\\varOmega","\\mathit{\\Omega}");ce("\\substack","\\begin{subarray}{c}#1\\end{subarray}");ce("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax");ce("\\boxed","\\fbox{$\\displaystyle{#1}$}");ce("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;");ce("\\implies","\\DOTSB\\;\\Longrightarrow\\;");ce("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");ce("\\dddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}");ce("\\ddddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");WV={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};ce("\\dots",function(t){var e="\\dotso",r=t.expandAfterFuture().text;return r in WV?e=WV[r]:(r.slice(0,4)==="\\not"||r in Nn.math&&er.contains(["bin","rel"],Nn.math[r].group))&&(e="\\dotsb"),e});wA={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};ce("\\dotso",function(t){var e=t.future().text;return e in wA?"\\ldots\\,":"\\ldots"});ce("\\dotsc",function(t){var e=t.future().text;return e in wA&&e!==","?"\\ldots\\,":"\\ldots"});ce("\\cdots",function(t){var e=t.future().text;return e in wA?"\\@cdots\\,":"\\@cdots"});ce("\\dotsb","\\cdots");ce("\\dotsm","\\cdots");ce("\\dotsi","\\!\\cdots");ce("\\dotsx","\\ldots\\,");ce("\\DOTSI","\\relax");ce("\\DOTSB","\\relax");ce("\\DOTSX","\\relax");ce("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax");ce("\\,","\\tmspace+{3mu}{.1667em}");ce("\\thinspace","\\,");ce("\\>","\\mskip{4mu}");ce("\\:","\\tmspace+{4mu}{.2222em}");ce("\\medspace","\\:");ce("\\;","\\tmspace+{5mu}{.2777em}");ce("\\thickspace","\\;");ce("\\!","\\tmspace-{3mu}{.1667em}");ce("\\negthinspace","\\!");ce("\\negmedspace","\\tmspace-{4mu}{.2222em}");ce("\\negthickspace","\\tmspace-{5mu}{.277em}");ce("\\enspace","\\kern.5em ");ce("\\enskip","\\hskip.5em\\relax");ce("\\quad","\\hskip1em\\relax");ce("\\qquad","\\hskip2em\\relax");ce("\\tag","\\@ifstar\\tag@literal\\tag@paren");ce("\\tag@paren","\\tag@literal{({#1})}");ce("\\tag@literal",t=>{if(t.macros.get("\\df@tag"))throw new gt("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"});ce("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}");ce("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)");ce("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}");ce("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1");ce("\\newline","\\\\\\relax");ce("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");zU=St(Ql["Main-Regular"][84][1]-.7*Ql["Main-Regular"][65][1]);ce("\\LaTeX","\\textrm{\\html@mathml{"+("L\\kern-.36em\\raisebox{"+zU+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{LaTeX}}");ce("\\KaTeX","\\textrm{\\html@mathml{"+("K\\kern-.17em\\raisebox{"+zU+"}{\\scriptstyle A}")+"\\kern-.15em\\TeX}{KaTeX}}");ce("\\hspace","\\@ifstar\\@hspacer\\@hspace");ce("\\@hspace","\\hskip #1\\relax");ce("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax");ce("\\ordinarycolon",":");ce("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}");ce("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}');ce("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}');ce("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}');ce("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}');ce("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}');ce("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}');ce("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}');ce("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}');ce("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}');ce("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}');ce("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}');ce("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}');ce("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}');ce("\u2237","\\dblcolon");ce("\u2239","\\eqcolon");ce("\u2254","\\coloneqq");ce("\u2255","\\eqqcolon");ce("\u2A74","\\Coloneqq");ce("\\ratio","\\vcentcolon");ce("\\coloncolon","\\dblcolon");ce("\\colonequals","\\coloneqq");ce("\\coloncolonequals","\\Coloneqq");ce("\\equalscolon","\\eqqcolon");ce("\\equalscoloncolon","\\Eqqcolon");ce("\\colonminus","\\coloneq");ce("\\coloncolonminus","\\Coloneq");ce("\\minuscolon","\\eqcolon");ce("\\minuscoloncolon","\\Eqcolon");ce("\\coloncolonapprox","\\Colonapprox");ce("\\coloncolonsim","\\Colonsim");ce("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}");ce("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}");ce("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}");ce("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}");ce("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220C}}");ce("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}");ce("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}");ce("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}");ce("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}");ce("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}");ce("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}");ce("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}");ce("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}");ce("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}");ce("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}");ce("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}");ce("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}");ce("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}");ce("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}");ce("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}");ce("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}");ce("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}");ce("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}");ce("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228A}");ce("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2ACB}");ce("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228B}");ce("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2ACC}");ce("\\imath","\\html@mathml{\\@imath}{\u0131}");ce("\\jmath","\\html@mathml{\\@jmath}{\u0237}");ce("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27E6}}");ce("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27E7}}");ce("\u27E6","\\llbracket");ce("\u27E7","\\rrbracket");ce("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}");ce("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}");ce("\u2983","\\lBrace");ce("\u2984","\\rBrace");ce("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29B5}}");ce("\u29B5","\\minuso");ce("\\darr","\\downarrow");ce("\\dArr","\\Downarrow");ce("\\Darr","\\Downarrow");ce("\\lang","\\langle");ce("\\rang","\\rangle");ce("\\uarr","\\uparrow");ce("\\uArr","\\Uparrow");ce("\\Uarr","\\Uparrow");ce("\\N","\\mathbb{N}");ce("\\R","\\mathbb{R}");ce("\\Z","\\mathbb{Z}");ce("\\alef","\\aleph");ce("\\alefsym","\\aleph");ce("\\Alpha","\\mathrm{A}");ce("\\Beta","\\mathrm{B}");ce("\\bull","\\bullet");ce("\\Chi","\\mathrm{X}");ce("\\clubs","\\clubsuit");ce("\\cnums","\\mathbb{C}");ce("\\Complex","\\mathbb{C}");ce("\\Dagger","\\ddagger");ce("\\diamonds","\\diamondsuit");ce("\\empty","\\emptyset");ce("\\Epsilon","\\mathrm{E}");ce("\\Eta","\\mathrm{H}");ce("\\exist","\\exists");ce("\\harr","\\leftrightarrow");ce("\\hArr","\\Leftrightarrow");ce("\\Harr","\\Leftrightarrow");ce("\\hearts","\\heartsuit");ce("\\image","\\Im");ce("\\infin","\\infty");ce("\\Iota","\\mathrm{I}");ce("\\isin","\\in");ce("\\Kappa","\\mathrm{K}");ce("\\larr","\\leftarrow");ce("\\lArr","\\Leftarrow");ce("\\Larr","\\Leftarrow");ce("\\lrarr","\\leftrightarrow");ce("\\lrArr","\\Leftrightarrow");ce("\\Lrarr","\\Leftrightarrow");ce("\\Mu","\\mathrm{M}");ce("\\natnums","\\mathbb{N}");ce("\\Nu","\\mathrm{N}");ce("\\Omicron","\\mathrm{O}");ce("\\plusmn","\\pm");ce("\\rarr","\\rightarrow");ce("\\rArr","\\Rightarrow");ce("\\Rarr","\\Rightarrow");ce("\\real","\\Re");ce("\\reals","\\mathbb{R}");ce("\\Reals","\\mathbb{R}");ce("\\Rho","\\mathrm{P}");ce("\\sdot","\\cdot");ce("\\sect","\\S");ce("\\spades","\\spadesuit");ce("\\sub","\\subset");ce("\\sube","\\subseteq");ce("\\supe","\\supseteq");ce("\\Tau","\\mathrm{T}");ce("\\thetasym","\\vartheta");ce("\\weierp","\\wp");ce("\\Zeta","\\mathrm{Z}");ce("\\argmin","\\DOTSB\\operatorname*{arg\\,min}");ce("\\argmax","\\DOTSB\\operatorname*{arg\\,max}");ce("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits");ce("\\bra","\\mathinner{\\langle{#1}|}");ce("\\ket","\\mathinner{|{#1}\\rangle}");ce("\\braket","\\mathinner{\\langle{#1}\\rangle}");ce("\\Bra","\\left\\langle#1\\right|");ce("\\Ket","\\left|#1\\right\\rangle");GU=o(t=>e=>{var r=e.consumeArg().tokens,n=e.consumeArg().tokens,i=e.consumeArg().tokens,a=e.consumeArg().tokens,s=e.macros.get("|"),l=e.macros.get("\\|");e.macros.beginGroup();var u=o(d=>p=>{t&&(p.macros.set("|",s),i.length&&p.macros.set("\\|",l));var m=d;if(!d&&i.length){var g=p.future();g.text==="|"&&(p.popToken(),m=!0)}return{tokens:m?i:n,numArgs:0}},"midMacro");e.macros.set("|",u(!1)),i.length&&e.macros.set("\\|",u(!0));var h=e.consumeArg().tokens,f=e.expandTokens([...a,...h,...r]);return e.macros.endGroup(),{tokens:f.reverse(),numArgs:0}},"braketHelper");ce("\\bra@ket",GU(!1));ce("\\bra@set",GU(!0));ce("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}");ce("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}");ce("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}");ce("\\angln","{\\angl n}");ce("\\blue","\\textcolor{##6495ed}{#1}");ce("\\orange","\\textcolor{##ffa500}{#1}");ce("\\pink","\\textcolor{##ff00af}{#1}");ce("\\red","\\textcolor{##df0030}{#1}");ce("\\green","\\textcolor{##28ae7b}{#1}");ce("\\gray","\\textcolor{gray}{#1}");ce("\\purple","\\textcolor{##9d38bd}{#1}");ce("\\blueA","\\textcolor{##ccfaff}{#1}");ce("\\blueB","\\textcolor{##80f6ff}{#1}");ce("\\blueC","\\textcolor{##63d9ea}{#1}");ce("\\blueD","\\textcolor{##11accd}{#1}");ce("\\blueE","\\textcolor{##0c7f99}{#1}");ce("\\tealA","\\textcolor{##94fff5}{#1}");ce("\\tealB","\\textcolor{##26edd5}{#1}");ce("\\tealC","\\textcolor{##01d1c1}{#1}");ce("\\tealD","\\textcolor{##01a995}{#1}");ce("\\tealE","\\textcolor{##208170}{#1}");ce("\\greenA","\\textcolor{##b6ffb0}{#1}");ce("\\greenB","\\textcolor{##8af281}{#1}");ce("\\greenC","\\textcolor{##74cf70}{#1}");ce("\\greenD","\\textcolor{##1fab54}{#1}");ce("\\greenE","\\textcolor{##0d923f}{#1}");ce("\\goldA","\\textcolor{##ffd0a9}{#1}");ce("\\goldB","\\textcolor{##ffbb71}{#1}");ce("\\goldC","\\textcolor{##ff9c39}{#1}");ce("\\goldD","\\textcolor{##e07d10}{#1}");ce("\\goldE","\\textcolor{##a75a05}{#1}");ce("\\redA","\\textcolor{##fca9a9}{#1}");ce("\\redB","\\textcolor{##ff8482}{#1}");ce("\\redC","\\textcolor{##f9685d}{#1}");ce("\\redD","\\textcolor{##e84d39}{#1}");ce("\\redE","\\textcolor{##bc2612}{#1}");ce("\\maroonA","\\textcolor{##ffbde0}{#1}");ce("\\maroonB","\\textcolor{##ff92c6}{#1}");ce("\\maroonC","\\textcolor{##ed5fa6}{#1}");ce("\\maroonD","\\textcolor{##ca337c}{#1}");ce("\\maroonE","\\textcolor{##9e034e}{#1}");ce("\\purpleA","\\textcolor{##ddd7ff}{#1}");ce("\\purpleB","\\textcolor{##c6b9fc}{#1}");ce("\\purpleC","\\textcolor{##aa87ff}{#1}");ce("\\purpleD","\\textcolor{##7854ab}{#1}");ce("\\purpleE","\\textcolor{##543b78}{#1}");ce("\\mintA","\\textcolor{##f5f9e8}{#1}");ce("\\mintB","\\textcolor{##edf2df}{#1}");ce("\\mintC","\\textcolor{##e0e5cc}{#1}");ce("\\grayA","\\textcolor{##f6f7f7}{#1}");ce("\\grayB","\\textcolor{##f0f1f2}{#1}");ce("\\grayC","\\textcolor{##e3e5e6}{#1}");ce("\\grayD","\\textcolor{##d6d8da}{#1}");ce("\\grayE","\\textcolor{##babec2}{#1}");ce("\\grayF","\\textcolor{##888d93}{#1}");ce("\\grayG","\\textcolor{##626569}{#1}");ce("\\grayH","\\textcolor{##3b3e40}{#1}");ce("\\grayI","\\textcolor{##21242c}{#1}");ce("\\kaBlue","\\textcolor{##314453}{#1}");ce("\\kaGreen","\\textcolor{##71B307}{#1}");VU={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},sA=class{static{o(this,"MacroExpander")}constructor(e,r,n){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=r,this.expansionCount=0,this.feed(e),this.macros=new aA($we,r.macros),this.mode=n,this.stack=[]}feed(e){this.lexer=new C3(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return this.stack.length===0&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]}popToken(){return this.future(),this.stack.pop()}pushToken(e){this.stack.push(e)}pushTokens(e){this.stack.push(...e)}scanArgument(e){var r,n,i;if(e){if(this.consumeSpaces(),this.future().text!=="[")return null;r=this.popToken(),{tokens:i,end:n}=this.consumeArg(["]"])}else({tokens:i,start:r,end:n}=this.consumeArg());return this.pushToken(new Do("EOF",n.loc)),this.pushTokens(i),r.range(n,"")}consumeSpaces(){for(;;){var e=this.future();if(e.text===" ")this.stack.pop();else break}}consumeArg(e){var r=[],n=e&&e.length>0;n||this.consumeSpaces();var i=this.future(),a,s=0,l=0;do{if(a=this.popToken(),r.push(a),a.text==="{")++s;else if(a.text==="}"){if(--s,s===-1)throw new gt("Extra }",a)}else if(a.text==="EOF")throw new gt("Unexpected end of input in a macro argument, expected '"+(e&&n?e[l]:"}")+"'",a);if(e&&n)if((s===0||s===1&&e[l]==="{")&&a.text===e[l]){if(++l,l===e.length){r.splice(-l,l);break}}else l=0}while(s!==0||n);return i.text==="{"&&r[r.length-1].text==="}"&&(r.pop(),r.shift()),r.reverse(),{tokens:r,start:i,end:a}}consumeArgs(e,r){if(r){if(r.length!==e+1)throw new gt("The length of delimiters doesn't match the number of args!");for(var n=r[0],i=0;ithis.settings.maxExpand)throw new gt("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){var r=this.popToken(),n=r.text,i=r.noexpand?null:this._getExpansion(n);if(i==null||e&&i.unexpandable){if(e&&i==null&&n[0]==="\\"&&!this.isDefined(n))throw new gt("Undefined control sequence: "+n);return this.pushToken(r),!1}this.countExpansion(1);var a=i.tokens,s=this.consumeArgs(i.numArgs,i.delimiters);if(i.numArgs){a=a.slice();for(var l=a.length-1;l>=0;--l){var u=a[l];if(u.text==="#"){if(l===0)throw new gt("Incomplete placeholder at end of macro body",u);if(u=a[--l],u.text==="#")a.splice(l+1,1);else if(/^[1-9]$/.test(u.text))a.splice(l,2,...s[+u.text-1]);else throw new gt("Not a valid argument number",u)}}}return this.pushTokens(a),a.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(this.expandOnce()===!1){var e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new Do(e)]):void 0}expandTokens(e){var r=[],n=this.stack.length;for(this.pushTokens(e);this.stack.length>n;)if(this.expandOnce(!0)===!1){var i=this.stack.pop();i.treatAsRelax&&(i.noexpand=!1,i.treatAsRelax=!1),r.push(i)}return this.countExpansion(r.length),r}expandMacroAsText(e){var r=this.expandMacro(e);return r&&r.map(n=>n.text).join("")}_getExpansion(e){var r=this.macros.get(e);if(r==null)return r;if(e.length===1){var n=this.lexer.catcodes[e];if(n!=null&&n!==13)return}var i=typeof r=="function"?r(this):r;if(typeof i=="string"){var a=0;if(i.indexOf("#")!==-1)for(var s=i.replace(/##/g,"");s.indexOf("#"+(a+1))!==-1;)++a;for(var l=new C3(i,this.settings),u=[],h=l.lex();h.text!=="EOF";)u.push(h),h=l.lex();u.reverse();var f={tokens:u,numArgs:a};return f}return i}isDefined(e){return this.macros.has(e)||xh.hasOwnProperty(e)||Nn.math.hasOwnProperty(e)||Nn.text.hasOwnProperty(e)||VU.hasOwnProperty(e)}isExpandable(e){var r=this.macros.get(e);return r!=null?typeof r=="string"||typeof r=="function"||!r.unexpandable:xh.hasOwnProperty(e)&&!xh[e].primitive}},YV=/^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/,v3=Object.freeze({"\u208A":"+","\u208B":"-","\u208C":"=","\u208D":"(","\u208E":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1D62":"i","\u2C7C":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209A":"p","\u1D63":"r","\u209B":"s","\u209C":"t","\u1D64":"u","\u1D65":"v","\u2093":"x","\u1D66":"\u03B2","\u1D67":"\u03B3","\u1D68":"\u03C1","\u1D69":"\u03D5","\u1D6A":"\u03C7","\u207A":"+","\u207B":"-","\u207C":"=","\u207D":"(","\u207E":")","\u2070":"0","\xB9":"1","\xB2":"2","\xB3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1D2C":"A","\u1D2E":"B","\u1D30":"D","\u1D31":"E","\u1D33":"G","\u1D34":"H","\u1D35":"I","\u1D36":"J","\u1D37":"K","\u1D38":"L","\u1D39":"M","\u1D3A":"N","\u1D3C":"O","\u1D3E":"P","\u1D3F":"R","\u1D40":"T","\u1D41":"U","\u2C7D":"V","\u1D42":"W","\u1D43":"a","\u1D47":"b","\u1D9C":"c","\u1D48":"d","\u1D49":"e","\u1DA0":"f","\u1D4D":"g",\u02B0:"h","\u2071":"i",\u02B2:"j","\u1D4F":"k",\u02E1:"l","\u1D50":"m",\u207F:"n","\u1D52":"o","\u1D56":"p",\u02B3:"r",\u02E2:"s","\u1D57":"t","\u1D58":"u","\u1D5B":"v",\u02B7:"w",\u02E3:"x",\u02B8:"y","\u1DBB":"z","\u1D5D":"\u03B2","\u1D5E":"\u03B3","\u1D5F":"\u03B4","\u1D60":"\u03D5","\u1D61":"\u03C7","\u1DBF":"\u03B8"}),X7={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030C":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030A":{text:"\\r",math:"\\mathring"},"\u030B":{text:"\\H"},"\u0327":{text:"\\c"}},XV={\u00E1:"a\u0301",\u00E0:"a\u0300",\u00E4:"a\u0308",\u01DF:"a\u0308\u0304",\u00E3:"a\u0303",\u0101:"a\u0304",\u0103:"a\u0306",\u1EAF:"a\u0306\u0301",\u1EB1:"a\u0306\u0300",\u1EB5:"a\u0306\u0303",\u01CE:"a\u030C",\u00E2:"a\u0302",\u1EA5:"a\u0302\u0301",\u1EA7:"a\u0302\u0300",\u1EAB:"a\u0302\u0303",\u0227:"a\u0307",\u01E1:"a\u0307\u0304",\u00E5:"a\u030A",\u01FB:"a\u030A\u0301",\u1E03:"b\u0307",\u0107:"c\u0301",\u1E09:"c\u0327\u0301",\u010D:"c\u030C",\u0109:"c\u0302",\u010B:"c\u0307",\u00E7:"c\u0327",\u010F:"d\u030C",\u1E0B:"d\u0307",\u1E11:"d\u0327",\u00E9:"e\u0301",\u00E8:"e\u0300",\u00EB:"e\u0308",\u1EBD:"e\u0303",\u0113:"e\u0304",\u1E17:"e\u0304\u0301",\u1E15:"e\u0304\u0300",\u0115:"e\u0306",\u1E1D:"e\u0327\u0306",\u011B:"e\u030C",\u00EA:"e\u0302",\u1EBF:"e\u0302\u0301",\u1EC1:"e\u0302\u0300",\u1EC5:"e\u0302\u0303",\u0117:"e\u0307",\u0229:"e\u0327",\u1E1F:"f\u0307",\u01F5:"g\u0301",\u1E21:"g\u0304",\u011F:"g\u0306",\u01E7:"g\u030C",\u011D:"g\u0302",\u0121:"g\u0307",\u0123:"g\u0327",\u1E27:"h\u0308",\u021F:"h\u030C",\u0125:"h\u0302",\u1E23:"h\u0307",\u1E29:"h\u0327",\u00ED:"i\u0301",\u00EC:"i\u0300",\u00EF:"i\u0308",\u1E2F:"i\u0308\u0301",\u0129:"i\u0303",\u012B:"i\u0304",\u012D:"i\u0306",\u01D0:"i\u030C",\u00EE:"i\u0302",\u01F0:"j\u030C",\u0135:"j\u0302",\u1E31:"k\u0301",\u01E9:"k\u030C",\u0137:"k\u0327",\u013A:"l\u0301",\u013E:"l\u030C",\u013C:"l\u0327",\u1E3F:"m\u0301",\u1E41:"m\u0307",\u0144:"n\u0301",\u01F9:"n\u0300",\u00F1:"n\u0303",\u0148:"n\u030C",\u1E45:"n\u0307",\u0146:"n\u0327",\u00F3:"o\u0301",\u00F2:"o\u0300",\u00F6:"o\u0308",\u022B:"o\u0308\u0304",\u00F5:"o\u0303",\u1E4D:"o\u0303\u0301",\u1E4F:"o\u0303\u0308",\u022D:"o\u0303\u0304",\u014D:"o\u0304",\u1E53:"o\u0304\u0301",\u1E51:"o\u0304\u0300",\u014F:"o\u0306",\u01D2:"o\u030C",\u00F4:"o\u0302",\u1ED1:"o\u0302\u0301",\u1ED3:"o\u0302\u0300",\u1ED7:"o\u0302\u0303",\u022F:"o\u0307",\u0231:"o\u0307\u0304",\u0151:"o\u030B",\u1E55:"p\u0301",\u1E57:"p\u0307",\u0155:"r\u0301",\u0159:"r\u030C",\u1E59:"r\u0307",\u0157:"r\u0327",\u015B:"s\u0301",\u1E65:"s\u0301\u0307",\u0161:"s\u030C",\u1E67:"s\u030C\u0307",\u015D:"s\u0302",\u1E61:"s\u0307",\u015F:"s\u0327",\u1E97:"t\u0308",\u0165:"t\u030C",\u1E6B:"t\u0307",\u0163:"t\u0327",\u00FA:"u\u0301",\u00F9:"u\u0300",\u00FC:"u\u0308",\u01D8:"u\u0308\u0301",\u01DC:"u\u0308\u0300",\u01D6:"u\u0308\u0304",\u01DA:"u\u0308\u030C",\u0169:"u\u0303",\u1E79:"u\u0303\u0301",\u016B:"u\u0304",\u1E7B:"u\u0304\u0308",\u016D:"u\u0306",\u01D4:"u\u030C",\u00FB:"u\u0302",\u016F:"u\u030A",\u0171:"u\u030B",\u1E7D:"v\u0303",\u1E83:"w\u0301",\u1E81:"w\u0300",\u1E85:"w\u0308",\u0175:"w\u0302",\u1E87:"w\u0307",\u1E98:"w\u030A",\u1E8D:"x\u0308",\u1E8B:"x\u0307",\u00FD:"y\u0301",\u1EF3:"y\u0300",\u00FF:"y\u0308",\u1EF9:"y\u0303",\u0233:"y\u0304",\u0177:"y\u0302",\u1E8F:"y\u0307",\u1E99:"y\u030A",\u017A:"z\u0301",\u017E:"z\u030C",\u1E91:"z\u0302",\u017C:"z\u0307",\u00C1:"A\u0301",\u00C0:"A\u0300",\u00C4:"A\u0308",\u01DE:"A\u0308\u0304",\u00C3:"A\u0303",\u0100:"A\u0304",\u0102:"A\u0306",\u1EAE:"A\u0306\u0301",\u1EB0:"A\u0306\u0300",\u1EB4:"A\u0306\u0303",\u01CD:"A\u030C",\u00C2:"A\u0302",\u1EA4:"A\u0302\u0301",\u1EA6:"A\u0302\u0300",\u1EAA:"A\u0302\u0303",\u0226:"A\u0307",\u01E0:"A\u0307\u0304",\u00C5:"A\u030A",\u01FA:"A\u030A\u0301",\u1E02:"B\u0307",\u0106:"C\u0301",\u1E08:"C\u0327\u0301",\u010C:"C\u030C",\u0108:"C\u0302",\u010A:"C\u0307",\u00C7:"C\u0327",\u010E:"D\u030C",\u1E0A:"D\u0307",\u1E10:"D\u0327",\u00C9:"E\u0301",\u00C8:"E\u0300",\u00CB:"E\u0308",\u1EBC:"E\u0303",\u0112:"E\u0304",\u1E16:"E\u0304\u0301",\u1E14:"E\u0304\u0300",\u0114:"E\u0306",\u1E1C:"E\u0327\u0306",\u011A:"E\u030C",\u00CA:"E\u0302",\u1EBE:"E\u0302\u0301",\u1EC0:"E\u0302\u0300",\u1EC4:"E\u0302\u0303",\u0116:"E\u0307",\u0228:"E\u0327",\u1E1E:"F\u0307",\u01F4:"G\u0301",\u1E20:"G\u0304",\u011E:"G\u0306",\u01E6:"G\u030C",\u011C:"G\u0302",\u0120:"G\u0307",\u0122:"G\u0327",\u1E26:"H\u0308",\u021E:"H\u030C",\u0124:"H\u0302",\u1E22:"H\u0307",\u1E28:"H\u0327",\u00CD:"I\u0301",\u00CC:"I\u0300",\u00CF:"I\u0308",\u1E2E:"I\u0308\u0301",\u0128:"I\u0303",\u012A:"I\u0304",\u012C:"I\u0306",\u01CF:"I\u030C",\u00CE:"I\u0302",\u0130:"I\u0307",\u0134:"J\u0302",\u1E30:"K\u0301",\u01E8:"K\u030C",\u0136:"K\u0327",\u0139:"L\u0301",\u013D:"L\u030C",\u013B:"L\u0327",\u1E3E:"M\u0301",\u1E40:"M\u0307",\u0143:"N\u0301",\u01F8:"N\u0300",\u00D1:"N\u0303",\u0147:"N\u030C",\u1E44:"N\u0307",\u0145:"N\u0327",\u00D3:"O\u0301",\u00D2:"O\u0300",\u00D6:"O\u0308",\u022A:"O\u0308\u0304",\u00D5:"O\u0303",\u1E4C:"O\u0303\u0301",\u1E4E:"O\u0303\u0308",\u022C:"O\u0303\u0304",\u014C:"O\u0304",\u1E52:"O\u0304\u0301",\u1E50:"O\u0304\u0300",\u014E:"O\u0306",\u01D1:"O\u030C",\u00D4:"O\u0302",\u1ED0:"O\u0302\u0301",\u1ED2:"O\u0302\u0300",\u1ED6:"O\u0302\u0303",\u022E:"O\u0307",\u0230:"O\u0307\u0304",\u0150:"O\u030B",\u1E54:"P\u0301",\u1E56:"P\u0307",\u0154:"R\u0301",\u0158:"R\u030C",\u1E58:"R\u0307",\u0156:"R\u0327",\u015A:"S\u0301",\u1E64:"S\u0301\u0307",\u0160:"S\u030C",\u1E66:"S\u030C\u0307",\u015C:"S\u0302",\u1E60:"S\u0307",\u015E:"S\u0327",\u0164:"T\u030C",\u1E6A:"T\u0307",\u0162:"T\u0327",\u00DA:"U\u0301",\u00D9:"U\u0300",\u00DC:"U\u0308",\u01D7:"U\u0308\u0301",\u01DB:"U\u0308\u0300",\u01D5:"U\u0308\u0304",\u01D9:"U\u0308\u030C",\u0168:"U\u0303",\u1E78:"U\u0303\u0301",\u016A:"U\u0304",\u1E7A:"U\u0304\u0308",\u016C:"U\u0306",\u01D3:"U\u030C",\u00DB:"U\u0302",\u016E:"U\u030A",\u0170:"U\u030B",\u1E7C:"V\u0303",\u1E82:"W\u0301",\u1E80:"W\u0300",\u1E84:"W\u0308",\u0174:"W\u0302",\u1E86:"W\u0307",\u1E8C:"X\u0308",\u1E8A:"X\u0307",\u00DD:"Y\u0301",\u1EF2:"Y\u0300",\u0178:"Y\u0308",\u1EF8:"Y\u0303",\u0232:"Y\u0304",\u0176:"Y\u0302",\u1E8E:"Y\u0307",\u0179:"Z\u0301",\u017D:"Z\u030C",\u1E90:"Z\u0302",\u017B:"Z\u0307",\u03AC:"\u03B1\u0301",\u1F70:"\u03B1\u0300",\u1FB1:"\u03B1\u0304",\u1FB0:"\u03B1\u0306",\u03AD:"\u03B5\u0301",\u1F72:"\u03B5\u0300",\u03AE:"\u03B7\u0301",\u1F74:"\u03B7\u0300",\u03AF:"\u03B9\u0301",\u1F76:"\u03B9\u0300",\u03CA:"\u03B9\u0308",\u0390:"\u03B9\u0308\u0301",\u1FD2:"\u03B9\u0308\u0300",\u1FD1:"\u03B9\u0304",\u1FD0:"\u03B9\u0306",\u03CC:"\u03BF\u0301",\u1F78:"\u03BF\u0300",\u03CD:"\u03C5\u0301",\u1F7A:"\u03C5\u0300",\u03CB:"\u03C5\u0308",\u03B0:"\u03C5\u0308\u0301",\u1FE2:"\u03C5\u0308\u0300",\u1FE1:"\u03C5\u0304",\u1FE0:"\u03C5\u0306",\u03CE:"\u03C9\u0301",\u1F7C:"\u03C9\u0300",\u038E:"\u03A5\u0301",\u1FEA:"\u03A5\u0300",\u03AB:"\u03A5\u0308",\u1FE9:"\u03A5\u0304",\u1FE8:"\u03A5\u0306",\u038F:"\u03A9\u0301",\u1FFA:"\u03A9\u0300"},A3=class t{static{o(this,"Parser")}constructor(e,r){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new sA(e,r,this.mode),this.settings=r,this.leftrightDepth=0}expect(e,r){if(r===void 0&&(r=!0),this.fetch().text!==e)throw new gt("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());r&&this.consume()}consume(){this.nextToken=null}fetch(){return this.nextToken==null&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken}switchMode(e){this.mode=e,this.gullet.switchMode(e)}parse(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){var r=this.nextToken;this.consume(),this.gullet.pushToken(new Do("}")),this.gullet.pushTokens(e);var n=this.parseExpression(!1);return this.expect("}"),this.nextToken=r,n}parseExpression(e,r){for(var n=[];;){this.mode==="math"&&this.consumeSpaces();var i=this.fetch();if(t.endOfExpression.indexOf(i.text)!==-1||r&&i.text===r||e&&xh[i.text]&&xh[i.text].infix)break;var a=this.parseAtom(r);if(a){if(a.type==="internal")continue}else break;n.push(a)}return this.mode==="text"&&this.formLigatures(n),this.handleInfixNodes(n)}handleInfixNodes(e){for(var r=-1,n,i=0;i=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+r[0]+'" used in math mode',e);var l=Nn[this.mode][r].group,u=to.range(e),h;if(LTe.hasOwnProperty(l)){var f=l;h={type:"atom",mode:this.mode,family:f,loc:u,text:r}}else h={type:l,mode:this.mode,loc:u,text:r};s=h}else if(r.charCodeAt(0)>=128)this.settings.strict&&(KV(r.charCodeAt(0))?this.mode==="math"&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+r[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+r[0]+'"'+(" ("+r.charCodeAt(0)+")"),e)),s={type:"textord",mode:"text",loc:to.range(e),text:r};else return null;if(this.consume(),a)for(var d=0;d{e.tagName==="A"&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")??"")}),yh.addHook("afterSanitizeAttributes",e=>{e.tagName==="A"&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)??""),e.removeAttribute(t),e.getAttribute("target")==="_blank"&&e.setAttribute("rel","noopener"))})}var pd,Gwe,Vwe,JU,QU,sr,Hwe,qwe,Wwe,Ywe,eH,md,vr,Xwe,jwe,rc,SA,Kwe,Qwe,ZU,O3,kn,gd,Zwe,kh,tt,gr=M(()=>{"use strict";O7();pd=//gi,Gwe=o(t=>t?eH(t).replace(/\\n/g,"#br#").split("#br#"):[""],"getRows"),Vwe=(()=>{let t=!1;return()=>{t||(Uwe(),t=!0)}})();o(Uwe,"setupDompurifyHooks");JU=o(t=>(Vwe(),yh.sanitize(t)),"removeScript"),QU=o((t,e)=>{if(e.flowchart?.htmlLabels!==!1){let r=e.securityLevel;r==="antiscript"||r==="strict"?t=JU(t):r!=="loose"&&(t=eH(t),t=t.replace(//g,">"),t=t.replace(/=/g,"="),t=Ywe(t))}return t},"sanitizeMore"),sr=o((t,e)=>t&&(e.dompurifyConfig?t=yh.sanitize(QU(t,e),e.dompurifyConfig).toString():t=yh.sanitize(QU(t,e),{FORBID_TAGS:["style"]}).toString(),t),"sanitizeText"),Hwe=o((t,e)=>typeof t=="string"?sr(t,e):t.flat().map(r=>sr(r,e)),"sanitizeTextOrArray"),qwe=o(t=>pd.test(t),"hasBreaks"),Wwe=o(t=>t.split(pd),"splitBreaks"),Ywe=o(t=>t.replace(/#br#/g,"
"),"placeholderToBreak"),eH=o(t=>t.replace(pd,"#br#"),"breakToPlaceholder"),md=o(t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=CSS.escape(e)),e},"getUrl"),vr=o(t=>!(t===!1||["false","null","0"].includes(String(t).trim().toLowerCase())),"evaluate"),Xwe=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.max(...e)},"getMax"),jwe=o(function(...t){let e=t.filter(r=>!isNaN(r));return Math.min(...e)},"getMin"),rc=o(function(t){let e=t.split(/(,)/),r=[];for(let n=0;n0&&n+1Math.max(0,t.split(e).length-1),"countOccurrence"),Kwe=o((t,e)=>{let r=SA(t,"~"),n=SA(e,"~");return r===1&&n===1},"shouldCombineSets"),Qwe=o(t=>{let e=SA(t,"~"),r=!1;if(e<=1)return t;e%2!==0&&t.startsWith("~")&&(t=t.substring(1),r=!0);let n=[...t],i=n.indexOf("~"),a=n.lastIndexOf("~");for(;i!==-1&&a!==-1&&i!==a;)n[i]="<",n[a]=">",i=n.indexOf("~"),a=n.lastIndexOf("~");return r&&n.unshift("~"),n.join("")},"processSet"),ZU=o(()=>window.MathMLElement!==void 0,"isMathMLSupported"),O3=/\$\$(.*)\$\$/g,kn=o(t=>(t.match(O3)?.length??0)>0,"hasKatex"),gd=o(async(t,e)=>{let r=document.createElement("div");r.innerHTML=await kh(t,e),r.id="katex-temp",r.style.visibility="hidden",r.style.position="absolute",r.style.top="0",document.querySelector("body")?.insertAdjacentElement("beforeend",r);let i={width:r.clientWidth,height:r.clientHeight};return r.remove(),i},"calculateMathMLDimensions"),Zwe=o(async(t,e)=>{if(!kn(t))return t;if(!(ZU()||e.legacyMathML||e.forceLegacyMathML))return t.replace(O3,"MathML is unsupported in this environment.");{let{default:r}=await Promise.resolve().then(()=>(KU(),jU)),n=e.forceLegacyMathML||!ZU()&&e.legacyMathML?"htmlAndMathml":"mathml";return t.split(pd).map(i=>kn(i)?`
${i}
`:`
${i}
`).join("").replace(O3,(i,a)=>r.renderToString(a,{throwOnError:!0,displayMode:!0,output:n}).replace(/\n/g," ").replace(//g,""))}return t.replace(O3,"Katex is not supported in @mermaid-js/tiny. Please use the full mermaid library.")},"renderKatexUnsanitized"),kh=o(async(t,e)=>sr(await Zwe(t,e),e),"renderKatexSanitized"),tt={getRows:Gwe,sanitizeText:sr,sanitizeTextOrArray:Hwe,hasBreaks:qwe,splitBreaks:Wwe,lineBreakRegex:pd,removeScript:JU,getUrl:md,evaluate:vr,getMax:Xwe,getMin:jwe}});var AA,CA,tH,P3,rH,nH,_s,nc=M(()=>{"use strict";cG();qn();gr();pt();AA={body:'?',height:80,width:80},CA=new Map,tH=new Map,P3=o(t=>{for(let e of t){if(!e.name)throw new Error('Invalid icon loader. Must have a "name" property with non-empty string value.');if(X.debug("Registering icon pack:",e.name),"loader"in e)tH.set(e.name,e.loader);else if("icons"in e)CA.set(e.name,e.icons);else throw X.error("Invalid icon loader:",e),new Error('Invalid icon loader. Must have either "icons" or "loader" property.')}},"registerIconPacks"),rH=o(async(t,e)=>{let r=r7(t,!0,e!==void 0);if(!r)throw new Error(`Invalid icon name: ${t}`);let n=r.prefix||e;if(!n)throw new Error(`Icon name must contain a prefix: ${t}`);let i=CA.get(n);if(!i){let s=tH.get(n);if(!s)throw new Error(`Icon set not found: ${r.prefix}`);try{i={...await s(),prefix:n},CA.set(n,i)}catch(l){throw X.error(l),new Error(`Failed to load icon set: ${r.prefix}`)}}let a=i7(i,r.name);if(!a)throw new Error(`Icon not found: ${t}`);return a},"getRegisteredIconData"),nH=o(async t=>{try{return await rH(t),!0}catch{return!1}},"isIconAvailable"),_s=o(async(t,e,r)=>{let n;try{n=await rH(t,e?.fallbackPrefix)}catch(s){X.error(s),n=AA}let i=s7(n,e),a=l7(o7(i.body),{...i.attributes,...r});return sr(a,Qt())},"getIconSVG")});function B3(t){for(var e=[],r=1;r{"use strict";o(B3,"dedent")});var F3,yd,iH,$3=M(()=>{"use strict";F3=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,yd=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,iH=/\s*%%.*\n/gm});var A0,DA=M(()=>{"use strict";A0=class extends Error{static{o(this,"UnknownDiagramError")}constructor(e){super(e),this.name="UnknownDiagramError"}}});var gu,_0,tv,LA,aH,vd=M(()=>{"use strict";pt();$3();DA();gu={},_0=o(function(t,e){t=t.replace(F3,"").replace(yd,"").replace(iH,` +`);for(let[r,{detector:n}]of Object.entries(gu))if(n(t,e))return r;throw new A0(`No diagram type detected matching given configuration for text: ${t}`)},"detectType"),tv=o((...t)=>{for(let{id:e,detector:r,loader:n}of t)LA(e,r,n)},"registerLazyLoadedDiagrams"),LA=o((t,e,r)=>{gu[t]&&X.warn(`Detector with key ${t} already exists. Overwriting.`),gu[t]={detector:e,loader:r},X.debug(`Detector with key ${t} added${r?" with loader":""}`)},"addDetector"),aH=o(t=>gu[t].loader,"getDiagramLoader")});var rv,sH,RA=M(()=>{"use strict";rv=(function(){var t=o(function(He,Le,Ie,Ne){for(Ie=Ie||{},Ne=He.length;Ne--;Ie[He[Ne]]=Le);return Ie},"o"),e=[1,24],r=[1,25],n=[1,26],i=[1,27],a=[1,28],s=[1,63],l=[1,64],u=[1,65],h=[1,66],f=[1,67],d=[1,68],p=[1,69],m=[1,29],g=[1,30],y=[1,31],v=[1,32],x=[1,33],b=[1,34],T=[1,35],S=[1,36],w=[1,37],k=[1,38],C=[1,39],A=[1,40],L=[1,41],I=[1,42],R=[1,43],E=[1,44],_=[1,45],D=[1,46],O=[1,47],N=[1,48],P=[1,50],B=[1,51],F=[1,52],V=[1,53],$=[1,54],U=[1,55],j=[1,56],ee=[1,57],q=[1,58],oe=[1,59],Q=[1,60],ue=[14,42],te=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],re=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],J=[1,82],K=[1,83],ae=[1,84],Z=[1,85],de=[12,14,42],ne=[12,14,33,42],Te=[12,14,33,42,76,77,79,80],W=[12,33],Ve=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],pe={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:o(function(Le,Ie,Ne,Ce,Fe,fe,xe){var Y=fe.length-1;switch(Fe){case 3:Ce.setDirection("TB");break;case 4:Ce.setDirection("BT");break;case 5:Ce.setDirection("RL");break;case 6:Ce.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:Ce.setC4Type(fe[Y-3]);break;case 19:Ce.setTitle(fe[Y].substring(6)),this.$=fe[Y].substring(6);break;case 20:Ce.setAccDescription(fe[Y].substring(15)),this.$=fe[Y].substring(15);break;case 21:this.$=fe[Y].trim(),Ce.setTitle(this.$);break;case 22:case 23:this.$=fe[Y].trim(),Ce.setAccDescription(this.$);break;case 28:fe[Y].splice(2,0,"ENTERPRISE"),Ce.addPersonOrSystemBoundary(...fe[Y]),this.$=fe[Y];break;case 29:fe[Y].splice(2,0,"SYSTEM"),Ce.addPersonOrSystemBoundary(...fe[Y]),this.$=fe[Y];break;case 30:Ce.addPersonOrSystemBoundary(...fe[Y]),this.$=fe[Y];break;case 31:fe[Y].splice(2,0,"CONTAINER"),Ce.addContainerBoundary(...fe[Y]),this.$=fe[Y];break;case 32:Ce.addDeploymentNode("node",...fe[Y]),this.$=fe[Y];break;case 33:Ce.addDeploymentNode("nodeL",...fe[Y]),this.$=fe[Y];break;case 34:Ce.addDeploymentNode("nodeR",...fe[Y]),this.$=fe[Y];break;case 35:Ce.popBoundaryParseStack();break;case 39:Ce.addPersonOrSystem("person",...fe[Y]),this.$=fe[Y];break;case 40:Ce.addPersonOrSystem("external_person",...fe[Y]),this.$=fe[Y];break;case 41:Ce.addPersonOrSystem("system",...fe[Y]),this.$=fe[Y];break;case 42:Ce.addPersonOrSystem("system_db",...fe[Y]),this.$=fe[Y];break;case 43:Ce.addPersonOrSystem("system_queue",...fe[Y]),this.$=fe[Y];break;case 44:Ce.addPersonOrSystem("external_system",...fe[Y]),this.$=fe[Y];break;case 45:Ce.addPersonOrSystem("external_system_db",...fe[Y]),this.$=fe[Y];break;case 46:Ce.addPersonOrSystem("external_system_queue",...fe[Y]),this.$=fe[Y];break;case 47:Ce.addContainer("container",...fe[Y]),this.$=fe[Y];break;case 48:Ce.addContainer("container_db",...fe[Y]),this.$=fe[Y];break;case 49:Ce.addContainer("container_queue",...fe[Y]),this.$=fe[Y];break;case 50:Ce.addContainer("external_container",...fe[Y]),this.$=fe[Y];break;case 51:Ce.addContainer("external_container_db",...fe[Y]),this.$=fe[Y];break;case 52:Ce.addContainer("external_container_queue",...fe[Y]),this.$=fe[Y];break;case 53:Ce.addComponent("component",...fe[Y]),this.$=fe[Y];break;case 54:Ce.addComponent("component_db",...fe[Y]),this.$=fe[Y];break;case 55:Ce.addComponent("component_queue",...fe[Y]),this.$=fe[Y];break;case 56:Ce.addComponent("external_component",...fe[Y]),this.$=fe[Y];break;case 57:Ce.addComponent("external_component_db",...fe[Y]),this.$=fe[Y];break;case 58:Ce.addComponent("external_component_queue",...fe[Y]),this.$=fe[Y];break;case 60:Ce.addRel("rel",...fe[Y]),this.$=fe[Y];break;case 61:Ce.addRel("birel",...fe[Y]),this.$=fe[Y];break;case 62:Ce.addRel("rel_u",...fe[Y]),this.$=fe[Y];break;case 63:Ce.addRel("rel_d",...fe[Y]),this.$=fe[Y];break;case 64:Ce.addRel("rel_l",...fe[Y]),this.$=fe[Y];break;case 65:Ce.addRel("rel_r",...fe[Y]),this.$=fe[Y];break;case 66:Ce.addRel("rel_b",...fe[Y]),this.$=fe[Y];break;case 67:fe[Y].splice(0,1),Ce.addRel("rel",...fe[Y]),this.$=fe[Y];break;case 68:Ce.updateElStyle("update_el_style",...fe[Y]),this.$=fe[Y];break;case 69:Ce.updateRelStyle("update_rel_style",...fe[Y]),this.$=fe[Y];break;case 70:Ce.updateLayoutConfig("update_layout_config",...fe[Y]),this.$=fe[Y];break;case 71:this.$=[fe[Y]];break;case 72:fe[Y].unshift(fe[Y-1]),this.$=fe[Y];break;case 73:case 75:this.$=fe[Y].trim();break;case 74:let he={};he[fe[Y-1].trim()]=fe[Y].trim(),this.$=he;break;case 76:this.$="";break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:S,52:w,53:k,54:C,55:A,56:L,57:I,58:R,59:E,60:_,61:D,62:O,63:N,64:P,65:B,66:F,67:V,68:$,69:U,70:j,71:ee,72:q,73:oe,74:Q},{13:70,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:S,52:w,53:k,54:C,55:A,56:L,57:I,58:R,59:E,60:_,61:D,62:O,63:N,64:P,65:B,66:F,67:V,68:$,69:U,70:j,71:ee,72:q,73:oe,74:Q},{13:71,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:S,52:w,53:k,54:C,55:A,56:L,57:I,58:R,59:E,60:_,61:D,62:O,63:N,64:P,65:B,66:F,67:V,68:$,69:U,70:j,71:ee,72:q,73:oe,74:Q},{13:72,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:S,52:w,53:k,54:C,55:A,56:L,57:I,58:R,59:E,60:_,61:D,62:O,63:N,64:P,65:B,66:F,67:V,68:$,69:U,70:j,71:ee,72:q,73:oe,74:Q},{13:73,19:20,20:21,21:22,22:e,23:r,24:n,26:i,28:a,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:S,52:w,53:k,54:C,55:A,56:L,57:I,58:R,59:E,60:_,61:D,62:O,63:N,64:P,65:B,66:F,67:V,68:$,69:U,70:j,71:ee,72:q,73:oe,74:Q},{14:[1,74]},t(ue,[2,13],{43:23,29:49,30:61,32:62,20:75,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:S,52:w,53:k,54:C,55:A,56:L,57:I,58:R,59:E,60:_,61:D,62:O,63:N,64:P,65:B,66:F,67:V,68:$,69:U,70:j,71:ee,72:q,73:oe,74:Q}),t(ue,[2,14]),t(te,[2,16],{12:[1,76]}),t(ue,[2,36],{12:[1,77]}),t(re,[2,19]),t(re,[2,20]),{25:[1,78]},{27:[1,79]},t(re,[2,23]),{35:80,75:81,76:J,77:K,79:ae,80:Z},{35:86,75:81,76:J,77:K,79:ae,80:Z},{35:87,75:81,76:J,77:K,79:ae,80:Z},{35:88,75:81,76:J,77:K,79:ae,80:Z},{35:89,75:81,76:J,77:K,79:ae,80:Z},{35:90,75:81,76:J,77:K,79:ae,80:Z},{35:91,75:81,76:J,77:K,79:ae,80:Z},{35:92,75:81,76:J,77:K,79:ae,80:Z},{35:93,75:81,76:J,77:K,79:ae,80:Z},{35:94,75:81,76:J,77:K,79:ae,80:Z},{35:95,75:81,76:J,77:K,79:ae,80:Z},{35:96,75:81,76:J,77:K,79:ae,80:Z},{35:97,75:81,76:J,77:K,79:ae,80:Z},{35:98,75:81,76:J,77:K,79:ae,80:Z},{35:99,75:81,76:J,77:K,79:ae,80:Z},{35:100,75:81,76:J,77:K,79:ae,80:Z},{35:101,75:81,76:J,77:K,79:ae,80:Z},{35:102,75:81,76:J,77:K,79:ae,80:Z},{35:103,75:81,76:J,77:K,79:ae,80:Z},{35:104,75:81,76:J,77:K,79:ae,80:Z},t(de,[2,59]),{35:105,75:81,76:J,77:K,79:ae,80:Z},{35:106,75:81,76:J,77:K,79:ae,80:Z},{35:107,75:81,76:J,77:K,79:ae,80:Z},{35:108,75:81,76:J,77:K,79:ae,80:Z},{35:109,75:81,76:J,77:K,79:ae,80:Z},{35:110,75:81,76:J,77:K,79:ae,80:Z},{35:111,75:81,76:J,77:K,79:ae,80:Z},{35:112,75:81,76:J,77:K,79:ae,80:Z},{35:113,75:81,76:J,77:K,79:ae,80:Z},{35:114,75:81,76:J,77:K,79:ae,80:Z},{35:115,75:81,76:J,77:K,79:ae,80:Z},{20:116,29:49,30:61,32:62,34:s,36:l,37:u,38:h,39:f,40:d,41:p,43:23,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:S,52:w,53:k,54:C,55:A,56:L,57:I,58:R,59:E,60:_,61:D,62:O,63:N,64:P,65:B,66:F,67:V,68:$,69:U,70:j,71:ee,72:q,73:oe,74:Q},{12:[1,118],33:[1,117]},{35:119,75:81,76:J,77:K,79:ae,80:Z},{35:120,75:81,76:J,77:K,79:ae,80:Z},{35:121,75:81,76:J,77:K,79:ae,80:Z},{35:122,75:81,76:J,77:K,79:ae,80:Z},{35:123,75:81,76:J,77:K,79:ae,80:Z},{35:124,75:81,76:J,77:K,79:ae,80:Z},{35:125,75:81,76:J,77:K,79:ae,80:Z},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},t(ue,[2,15]),t(te,[2,17],{21:22,19:130,22:e,23:r,24:n,26:i,28:a}),t(ue,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:e,23:r,24:n,26:i,28:a,34:s,36:l,37:u,38:h,39:f,40:d,41:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T,51:S,52:w,53:k,54:C,55:A,56:L,57:I,58:R,59:E,60:_,61:D,62:O,63:N,64:P,65:B,66:F,67:V,68:$,69:U,70:j,71:ee,72:q,73:oe,74:Q}),t(re,[2,21]),t(re,[2,22]),t(de,[2,39]),t(ne,[2,71],{75:81,35:132,76:J,77:K,79:ae,80:Z}),t(Te,[2,73]),{78:[1,133]},t(Te,[2,75]),t(Te,[2,76]),t(de,[2,40]),t(de,[2,41]),t(de,[2,42]),t(de,[2,43]),t(de,[2,44]),t(de,[2,45]),t(de,[2,46]),t(de,[2,47]),t(de,[2,48]),t(de,[2,49]),t(de,[2,50]),t(de,[2,51]),t(de,[2,52]),t(de,[2,53]),t(de,[2,54]),t(de,[2,55]),t(de,[2,56]),t(de,[2,57]),t(de,[2,58]),t(de,[2,60]),t(de,[2,61]),t(de,[2,62]),t(de,[2,63]),t(de,[2,64]),t(de,[2,65]),t(de,[2,66]),t(de,[2,67]),t(de,[2,68]),t(de,[2,69]),t(de,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},t(W,[2,28]),t(W,[2,29]),t(W,[2,30]),t(W,[2,31]),t(W,[2,32]),t(W,[2,33]),t(W,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},t(te,[2,18]),t(ue,[2,38]),t(ne,[2,72]),t(Te,[2,74]),t(de,[2,24]),t(de,[2,35]),t(Ve,[2,25]),t(Ve,[2,26],{12:[1,138]}),t(Ve,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:o(function(Le,Ie){if(Ie.recoverable)this.trace(Le);else{var Ne=new Error(Le);throw Ne.hash=Ie,Ne}},"parseError"),parse:o(function(Le){var Ie=this,Ne=[0],Ce=[],Fe=[null],fe=[],xe=this.table,Y="",he=0,z=0,se=0,le=2,ke=1,ve=fe.slice.call(arguments,1),ye=Object.create(this.lexer),Re={yy:{}};for(var _e in this.yy)Object.prototype.hasOwnProperty.call(this.yy,_e)&&(Re.yy[_e]=this.yy[_e]);ye.setInput(Le,Re.yy),Re.yy.lexer=ye,Re.yy.parser=this,typeof ye.yylloc>"u"&&(ye.yylloc={});var ze=ye.yylloc;fe.push(ze);var Ke=ye.options&&ye.options.ranges;typeof Re.yy.parseError=="function"?this.parseError=Re.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function xt(ft){Ne.length=Ne.length-2*ft,Fe.length=Fe.length-ft,fe.length=fe.length-ft}o(xt,"popStack");function We(){var ft;return ft=Ce.pop()||ye.lex()||ke,typeof ft!="number"&&(ft instanceof Array&&(Ce=ft,ft=Ce.pop()),ft=Ie.symbols_[ft]||ft),ft}o(We,"lex");for(var Oe,et,Ue,lt,Gt,vt,Lt={},dt,nt,bt,wt;;){if(Ue=Ne[Ne.length-1],this.defaultActions[Ue]?lt=this.defaultActions[Ue]:((Oe===null||typeof Oe>"u")&&(Oe=We()),lt=xe[Ue]&&xe[Ue][Oe]),typeof lt>"u"||!lt.length||!lt[0]){var yt="";wt=[];for(dt in xe[Ue])this.terminals_[dt]&&dt>le&&wt.push("'"+this.terminals_[dt]+"'");ye.showPosition?yt="Parse error on line "+(he+1)+`: +`+ye.showPosition()+` +Expecting `+wt.join(", ")+", got '"+(this.terminals_[Oe]||Oe)+"'":yt="Parse error on line "+(he+1)+": Unexpected "+(Oe==ke?"end of input":"'"+(this.terminals_[Oe]||Oe)+"'"),this.parseError(yt,{text:ye.match,token:this.terminals_[Oe]||Oe,line:ye.yylineno,loc:ze,expected:wt})}if(lt[0]instanceof Array&<.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ue+", token: "+Oe);switch(lt[0]){case 1:Ne.push(Oe),Fe.push(ye.yytext),fe.push(ye.yylloc),Ne.push(lt[1]),Oe=null,et?(Oe=et,et=null):(z=ye.yyleng,Y=ye.yytext,he=ye.yylineno,ze=ye.yylloc,se>0&&se--);break;case 2:if(nt=this.productions_[lt[1]][1],Lt.$=Fe[Fe.length-nt],Lt._$={first_line:fe[fe.length-(nt||1)].first_line,last_line:fe[fe.length-1].last_line,first_column:fe[fe.length-(nt||1)].first_column,last_column:fe[fe.length-1].last_column},Ke&&(Lt._$.range=[fe[fe.length-(nt||1)].range[0],fe[fe.length-1].range[1]]),vt=this.performAction.apply(Lt,[Y,z,he,Re.yy,lt[1],Fe,fe].concat(ve)),typeof vt<"u")return vt;nt&&(Ne=Ne.slice(0,-1*nt*2),Fe=Fe.slice(0,-1*nt),fe=fe.slice(0,-1*nt)),Ne.push(this.productions_[lt[1]][0]),Fe.push(Lt.$),fe.push(Lt._$),bt=xe[Ne[Ne.length-2]][Ne[Ne.length-1]],Ne.push(bt);break;case 3:return!0}}return!0},"parse")},Be=(function(){var He={EOF:1,parseError:o(function(Ie,Ne){if(this.yy.parser)this.yy.parser.parseError(Ie,Ne);else throw new Error(Ie)},"parseError"),setInput:o(function(Le,Ie){return this.yy=Ie||this.yy||{},this._input=Le,this._more=this._backtrack=this.done=!1,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},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var Le=this._input[0];this.yytext+=Le,this.yyleng++,this.offset++,this.match+=Le,this.matched+=Le;var Ie=Le.match(/(?:\r\n?|\n).*/g);return Ie?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Le},"input"),unput:o(function(Le){var Ie=Le.length,Ne=Le.split(/(?:\r\n?|\n)/g);this._input=Le+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ie),this.offset-=Ie;var Ce=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),Ne.length-1&&(this.yylineno-=Ne.length-1);var Fe=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Ne?(Ne.length===Ce.length?this.yylloc.first_column:0)+Ce[Ce.length-Ne.length].length-Ne[0].length:this.yylloc.first_column-Ie},this.options.ranges&&(this.yylloc.range=[Fe[0],Fe[0]+this.yyleng-Ie]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(Le){this.unput(this.match.slice(Le))},"less"),pastInput:o(function(){var Le=this.matched.substr(0,this.matched.length-this.match.length);return(Le.length>20?"...":"")+Le.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var Le=this.match;return Le.length<20&&(Le+=this._input.substr(0,20-Le.length)),(Le.substr(0,20)+(Le.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var Le=this.pastInput(),Ie=new Array(Le.length+1).join("-");return Le+this.upcomingInput()+` +`+Ie+"^"},"showPosition"),test_match:o(function(Le,Ie){var Ne,Ce,Fe;if(this.options.backtrack_lexer&&(Fe={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},this.options.ranges&&(Fe.yylloc.range=this.yylloc.range.slice(0))),Ce=Le[0].match(/(?:\r\n?|\n).*/g),Ce&&(this.yylineno+=Ce.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Ce?Ce[Ce.length-1].length-Ce[Ce.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Le[0].length},this.yytext+=Le[0],this.match+=Le[0],this.matches=Le,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Le[0].length),this.matched+=Le[0],Ne=this.performAction.call(this,this.yy,this,Ie,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ne)return Ne;if(this._backtrack){for(var fe in Fe)this[fe]=Fe[fe];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Le,Ie,Ne,Ce;this._more||(this.yytext="",this.match="");for(var Fe=this._currentRules(),fe=0;feIe[0].length)){if(Ie=Ne,Ce=fe,this.options.backtrack_lexer){if(Le=this.test_match(Ne,Fe[fe]),Le!==!1)return Le;if(this._backtrack){Ie=!1;continue}else return!1}else if(!this.options.flex)break}return Ie?(Le=this.test_match(Ie,Fe[Ce]),Le!==!1?Le:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Ie=this.next();return Ie||this.lex()},"lex"),begin:o(function(Ie){this.conditionStack.push(Ie)},"begin"),popState:o(function(){var Ie=this.conditionStack.length-1;return Ie>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Ie){return Ie=this.conditionStack.length-1-Math.abs(Ie||0),Ie>=0?this.conditionStack[Ie]:"INITIAL"},"topState"),pushState:o(function(Ie){this.begin(Ie)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(Ie,Ne,Ce,Fe){var fe=Fe;switch(Ce){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),26;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:break;case 14:c;break;case 15:return 12;case 16:break;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;break;case 23:return this.begin("person"),44;break;case 24:return this.begin("system_ext_queue"),51;break;case 25:return this.begin("system_ext_db"),50;break;case 26:return this.begin("system_ext"),49;break;case 27:return this.begin("system_queue"),48;break;case 28:return this.begin("system_db"),47;break;case 29:return this.begin("system"),46;break;case 30:return this.begin("boundary"),37;break;case 31:return this.begin("enterprise_boundary"),34;break;case 32:return this.begin("system_boundary"),36;break;case 33:return this.begin("container_ext_queue"),57;break;case 34:return this.begin("container_ext_db"),56;break;case 35:return this.begin("container_ext"),55;break;case 36:return this.begin("container_queue"),54;break;case 37:return this.begin("container_db"),53;break;case 38:return this.begin("container"),52;break;case 39:return this.begin("container_boundary"),38;break;case 40:return this.begin("component_ext_queue"),63;break;case 41:return this.begin("component_ext_db"),62;break;case 42:return this.begin("component_ext"),61;break;case 43:return this.begin("component_queue"),60;break;case 44:return this.begin("component_db"),59;break;case 45:return this.begin("component"),58;break;case 46:return this.begin("node"),39;break;case 47:return this.begin("node"),39;break;case 48:return this.begin("node_l"),40;break;case 49:return this.begin("node_r"),41;break;case 50:return this.begin("rel"),64;break;case 51:return this.begin("birel"),65;break;case 52:return this.begin("rel_u"),66;break;case 53:return this.begin("rel_u"),66;break;case 54:return this.begin("rel_d"),67;break;case 55:return this.begin("rel_d"),67;break;case 56:return this.begin("rel_l"),68;break;case 57:return this.begin("rel_l"),68;break;case 58:return this.begin("rel_r"),69;break;case 59:return this.begin("rel_r"),69;break;case 60:return this.begin("rel_b"),70;break;case 61:return this.begin("rel_index"),71;break;case 62:return this.begin("update_el_style"),72;break;case 63:return this.begin("update_rel_style"),73;break;case 64:return this.begin("update_layout_config"),74;break;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";break;case 67:this.begin("attribute");break;case 68:this.popState(),this.popState();break;case 69:return 80;case 70:break;case 71:return 80;case 72:this.begin("string");break;case 73:this.popState();break;case 74:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";break;case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 79:this.popState(),this.popState();break;case 80:return"STR";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},string_kv_value:{rules:[78,79],inclusive:!1},string_kv_key:{rules:[77],inclusive:!1},string_kv:{rules:[76],inclusive:!1},string:{rules:[73,74],inclusive:!1},attribute:{rules:[68,69,70,71,72,75,80],inclusive:!1},update_layout_config:{rules:[65,66,67,68],inclusive:!1},update_rel_style:{rules:[65,66,67,68],inclusive:!1},update_el_style:{rules:[65,66,67,68],inclusive:!1},rel_b:{rules:[65,66,67,68],inclusive:!1},rel_r:{rules:[65,66,67,68],inclusive:!1},rel_l:{rules:[65,66,67,68],inclusive:!1},rel_d:{rules:[65,66,67,68],inclusive:!1},rel_u:{rules:[65,66,67,68],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[65,66,67,68],inclusive:!1},node_r:{rules:[65,66,67,68],inclusive:!1},node_l:{rules:[65,66,67,68],inclusive:!1},node:{rules:[65,66,67,68],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[65,66,67,68],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[65,66,67,68],inclusive:!1},component_ext:{rules:[65,66,67,68],inclusive:!1},component_queue:{rules:[65,66,67,68],inclusive:!1},component_db:{rules:[65,66,67,68],inclusive:!1},component:{rules:[65,66,67,68],inclusive:!1},container_boundary:{rules:[65,66,67,68],inclusive:!1},container_ext_queue:{rules:[65,66,67,68],inclusive:!1},container_ext_db:{rules:[65,66,67,68],inclusive:!1},container_ext:{rules:[65,66,67,68],inclusive:!1},container_queue:{rules:[65,66,67,68],inclusive:!1},container_db:{rules:[65,66,67,68],inclusive:!1},container:{rules:[65,66,67,68],inclusive:!1},birel:{rules:[65,66,67,68],inclusive:!1},system_boundary:{rules:[65,66,67,68],inclusive:!1},enterprise_boundary:{rules:[65,66,67,68],inclusive:!1},boundary:{rules:[65,66,67,68],inclusive:!1},system_ext_queue:{rules:[65,66,67,68],inclusive:!1},system_ext_db:{rules:[65,66,67,68],inclusive:!1},system_ext:{rules:[65,66,67,68],inclusive:!1},system_queue:{rules:[65,66,67,68],inclusive:!1},system_db:{rules:[65,66,67,68],inclusive:!1},system:{rules:[65,66,67,68],inclusive:!1},person_ext:{rules:[65,66,67,68],inclusive:!1},person:{rules:[65,66,67,68],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],inclusive:!0}}};return He})();pe.lexer=Be;function Ye(){this.yy={}}return o(Ye,"Parser"),Ye.prototype=pe,pe.Parser=Ye,new Ye})();rv.parser=rv;sH=rv});var Jwe,eke,mn,ic,Ei=M(()=>{"use strict";pt();Jwe=o(function(t,e){for(let r of e)t.attr(r[0],r[1])},"d3Attrs"),eke=o(function(t,e,r){let n=new Map;return r?(n.set("width","100%"),n.set("style",`max-width: ${e}px;`)):(n.set("height",t),n.set("width",e)),n},"calculateSvgSizeAttrs"),mn=o(function(t,e,r,n){let i=eke(e,r,n);Jwe(t,i)},"configureSvgSize"),ic=o(function(t,e,r,n){let i=e.node().getBBox(),a=i.width,s=i.height;X.info(`SVG bounds: ${a}x${s}`,i);let l=0,u=0;X.info(`Graph bounds: ${l}x${u}`,t),l=a+r*2,u=s+r*2,X.info(`Calculated bounds: ${l}x${u}`),mn(e,u,l,n);let h=`${i.x-r} ${i.y-r} ${i.width+2*r} ${i.height+2*r}`;e.attr("viewBox",h)},"setupGraphViewbox")});var z3,tke,oH,lH,NA=M(()=>{"use strict";pt();z3={},tke=o((t,e,r)=>{let n="";return t in z3&&z3[t]?n=z3[t](r):X.warn(`No theme found for ${t}`),` & { + font-family: ${r.fontFamily}; + font-size: ${r.fontSize}; + fill: ${r.textColor} + } + @keyframes edge-animation-frame { + from { + stroke-dashoffset: 0; + } + } + @keyframes dash { + to { + stroke-dashoffset: 0; + } + } + & .edge-animation-slow { + stroke-dasharray: 9,5 !important; + stroke-dashoffset: 900; + animation: dash 50s linear infinite; + stroke-linecap: round; + } + & .edge-animation-fast { + stroke-dasharray: 9,5 !important; + stroke-dashoffset: 900; + animation: dash 20s linear infinite; + stroke-linecap: round; + } + /* Classes common for multiple diagrams */ + + & .error-icon { + fill: ${r.errorBkgColor}; + } + & .error-text { + fill: ${r.errorTextColor}; + stroke: ${r.errorTextColor}; + } + + & .edge-thickness-normal { + stroke-width: 1px; + } + & .edge-thickness-thick { + stroke-width: 3.5px + } + & .edge-pattern-solid { + stroke-dasharray: 0; + } + & .edge-thickness-invisible { + stroke-width: 0; + fill: none; + } + & .edge-pattern-dashed{ + stroke-dasharray: 3; + } + .edge-pattern-dotted { + stroke-dasharray: 2; + } + + & .marker { + fill: ${r.lineColor}; + stroke: ${r.lineColor}; + } + & .marker.cross { + stroke: ${r.lineColor}; + } + + & svg { + font-family: ${r.fontFamily}; + font-size: ${r.fontSize}; + } + & p { + margin: 0 + } + + ${n} + + ${e} +`},"getStyles"),oH=o((t,e)=>{e!==void 0&&(z3[t]=e)},"addStylesForDiagram"),lH=tke});var nv={};dr(nv,{clear:()=>Sr,getAccDescription:()=>Or,getAccTitle:()=>Mr,getDiagramTitle:()=>Pr,setAccDescription:()=>Ir,setAccTitle:()=>Rr,setDiagramTitle:()=>$r});var MA,IA,OA,PA,Sr,Rr,Mr,Ir,Or,$r,Pr,ci=M(()=>{"use strict";gr();qn();MA="",IA="",OA="",PA=o(t=>sr(t,Qt()),"sanitizeText"),Sr=o(()=>{MA="",OA="",IA=""},"clear"),Rr=o(t=>{MA=PA(t).replace(/^\s+/g,"")},"setAccTitle"),Mr=o(()=>MA,"getAccTitle"),Ir=o(t=>{OA=PA(t).replace(/\n\s+/g,` +`)},"setAccDescription"),Or=o(()=>OA,"getAccDescription"),$r=o(t=>{IA=PA(t)},"setDiagramTitle"),Pr=o(()=>IA,"getDiagramTitle")});var cH,rke,ge,iv,V3,av,FA,nke,G3,xd,sv,BA,Xt=M(()=>{"use strict";vd();pt();qn();gr();Ei();NA();ci();cH=X,rke=Ly,ge=Qt,iv=i3,V3=gh,av=o(t=>sr(t,ge()),"sanitizeText"),FA=ic,nke=o(()=>nv,"getCommonDb"),G3={},xd=o((t,e,r)=>{G3[t]&&cH.warn(`Diagram with id ${t} already registered. Overwriting.`),G3[t]=e,r&&LA(t,r),oH(t,e.styles),e.injectUtils?.(cH,rke,ge,av,FA,nke(),()=>{})},"registerDiagram"),sv=o(t=>{if(t in G3)return G3[t];throw new BA(t)},"getDiagram"),BA=class extends Error{static{o(this,"DiagramNotFoundError")}constructor(e){super(`Diagram ${e} not found.`)}}});var ml,Eh,ns,pl,ac,ov,$A,zA,U3,H3,uH,ike,ake,ske,oke,lke,cke,uke,hke,fke,dke,pke,mke,gke,yke,vke,xke,bke,hH,Tke,wke,fH,kke,Eke,Ske,Cke,Sh,Ake,_ke,Dke,Lke,Rke,lv,GA=M(()=>{"use strict";Xt();gr();ci();ml=[],Eh=[""],ns="global",pl="",ac=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],ov=[],$A="",zA=!1,U3=4,H3=2,ike=o(function(){return uH},"getC4Type"),ake=o(function(t){uH=sr(t,ge())},"setC4Type"),ske=o(function(t,e,r,n,i,a,s,l,u){if(t==null||e===void 0||e===null||r===void 0||r===null||n===void 0||n===null)return;let h={},f=ov.find(d=>d.from===e&&d.to===r);if(f?h=f:ov.push(h),h.type=t,h.from=e,h.to=r,h.label={text:n},i==null)h.techn={text:""};else if(typeof i=="object"){let[d,p]=Object.entries(i)[0];h[d]={text:p}}else h.techn={text:i};if(a==null)h.descr={text:""};else if(typeof a=="object"){let[d,p]=Object.entries(a)[0];h[d]={text:p}}else h.descr={text:a};if(typeof s=="object"){let[d,p]=Object.entries(s)[0];h[d]=p}else h.sprite=s;if(typeof l=="object"){let[d,p]=Object.entries(l)[0];h[d]=p}else h.tags=l;if(typeof u=="object"){let[d,p]=Object.entries(u)[0];h[d]=p}else h.link=u;h.wrap=Sh()},"addRel"),oke=o(function(t,e,r,n,i,a,s){if(e===null||r===null)return;let l={},u=ml.find(h=>h.alias===e);if(u&&e===u.alias?l=u:(l.alias=e,ml.push(l)),r==null?l.label={text:""}:l.label={text:r},n==null)l.descr={text:""};else if(typeof n=="object"){let[h,f]=Object.entries(n)[0];l[h]={text:f}}else l.descr={text:n};if(typeof i=="object"){let[h,f]=Object.entries(i)[0];l[h]=f}else l.sprite=i;if(typeof a=="object"){let[h,f]=Object.entries(a)[0];l[h]=f}else l.tags=a;if(typeof s=="object"){let[h,f]=Object.entries(s)[0];l[h]=f}else l.link=s;l.typeC4Shape={text:t},l.parentBoundary=ns,l.wrap=Sh()},"addPersonOrSystem"),lke=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=ml.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,ml.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=Sh(),u.typeC4Shape={text:t},u.parentBoundary=ns},"addContainer"),cke=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=ml.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,ml.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.techn={text:""};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.techn={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof a=="object"){let[f,d]=Object.entries(a)[0];u[f]=d}else u.sprite=a;if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.wrap=Sh(),u.typeC4Shape={text:t},u.parentBoundary=ns},"addComponent"),uke=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=ac.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,ac.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"system"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=ns,a.wrap=Sh(),pl=ns,ns=t,Eh.push(pl)},"addPersonOrSystemBoundary"),hke=o(function(t,e,r,n,i){if(t===null||e===null)return;let a={},s=ac.find(l=>l.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,ac.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"container"};else if(typeof r=="object"){let[l,u]=Object.entries(r)[0];a[l]={text:u}}else a.type={text:r};if(typeof n=="object"){let[l,u]=Object.entries(n)[0];a[l]=u}else a.tags=n;if(typeof i=="object"){let[l,u]=Object.entries(i)[0];a[l]=u}else a.link=i;a.parentBoundary=ns,a.wrap=Sh(),pl=ns,ns=t,Eh.push(pl)},"addContainerBoundary"),fke=o(function(t,e,r,n,i,a,s,l){if(e===null||r===null)return;let u={},h=ac.find(f=>f.alias===e);if(h&&e===h.alias?u=h:(u.alias=e,ac.push(u)),r==null?u.label={text:""}:u.label={text:r},n==null)u.type={text:"node"};else if(typeof n=="object"){let[f,d]=Object.entries(n)[0];u[f]={text:d}}else u.type={text:n};if(i==null)u.descr={text:""};else if(typeof i=="object"){let[f,d]=Object.entries(i)[0];u[f]={text:d}}else u.descr={text:i};if(typeof s=="object"){let[f,d]=Object.entries(s)[0];u[f]=d}else u.tags=s;if(typeof l=="object"){let[f,d]=Object.entries(l)[0];u[f]=d}else u.link=l;u.nodeType=t,u.parentBoundary=ns,u.wrap=Sh(),pl=ns,ns=e,Eh.push(pl)},"addDeploymentNode"),dke=o(function(){ns=pl,Eh.pop(),pl=Eh.pop(),Eh.push(pl)},"popBoundaryParseStack"),pke=o(function(t,e,r,n,i,a,s,l,u,h,f){let d=ml.find(p=>p.alias===e);if(!(d===void 0&&(d=ac.find(p=>p.alias===e),d===void 0))){if(r!=null)if(typeof r=="object"){let[p,m]=Object.entries(r)[0];d[p]=m}else d.bgColor=r;if(n!=null)if(typeof n=="object"){let[p,m]=Object.entries(n)[0];d[p]=m}else d.fontColor=n;if(i!=null)if(typeof i=="object"){let[p,m]=Object.entries(i)[0];d[p]=m}else d.borderColor=i;if(a!=null)if(typeof a=="object"){let[p,m]=Object.entries(a)[0];d[p]=m}else d.shadowing=a;if(s!=null)if(typeof s=="object"){let[p,m]=Object.entries(s)[0];d[p]=m}else d.shape=s;if(l!=null)if(typeof l=="object"){let[p,m]=Object.entries(l)[0];d[p]=m}else d.sprite=l;if(u!=null)if(typeof u=="object"){let[p,m]=Object.entries(u)[0];d[p]=m}else d.techn=u;if(h!=null)if(typeof h=="object"){let[p,m]=Object.entries(h)[0];d[p]=m}else d.legendText=h;if(f!=null)if(typeof f=="object"){let[p,m]=Object.entries(f)[0];d[p]=m}else d.legendSprite=f}},"updateElStyle"),mke=o(function(t,e,r,n,i,a,s){let l=ov.find(u=>u.from===e&&u.to===r);if(l!==void 0){if(n!=null)if(typeof n=="object"){let[u,h]=Object.entries(n)[0];l[u]=h}else l.textColor=n;if(i!=null)if(typeof i=="object"){let[u,h]=Object.entries(i)[0];l[u]=h}else l.lineColor=i;if(a!=null)if(typeof a=="object"){let[u,h]=Object.entries(a)[0];l[u]=parseInt(h)}else l.offsetX=parseInt(a);if(s!=null)if(typeof s=="object"){let[u,h]=Object.entries(s)[0];l[u]=parseInt(h)}else l.offsetY=parseInt(s)}},"updateRelStyle"),gke=o(function(t,e,r){let n=U3,i=H3;if(typeof e=="object"){let a=Object.values(e)[0];n=parseInt(a)}else n=parseInt(e);if(typeof r=="object"){let a=Object.values(r)[0];i=parseInt(a)}else i=parseInt(r);n>=1&&(U3=n),i>=1&&(H3=i)},"updateLayoutConfig"),yke=o(function(){return U3},"getC4ShapeInRow"),vke=o(function(){return H3},"getC4BoundaryInRow"),xke=o(function(){return ns},"getCurrentBoundaryParse"),bke=o(function(){return pl},"getParentBoundaryParse"),hH=o(function(t){return t==null?ml:ml.filter(e=>e.parentBoundary===t)},"getC4ShapeArray"),Tke=o(function(t){return ml.find(e=>e.alias===t)},"getC4Shape"),wke=o(function(t){return Object.keys(hH(t))},"getC4ShapeKeys"),fH=o(function(t){return t==null?ac:ac.filter(e=>e.parentBoundary===t)},"getBoundaries"),kke=fH,Eke=o(function(){return ov},"getRels"),Ske=o(function(){return $A},"getTitle"),Cke=o(function(t){zA=t},"setWrap"),Sh=o(function(){return zA},"autoWrap"),Ake=o(function(){ml=[],ac=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],pl="",ns="global",Eh=[""],ov=[],Eh=[""],$A="",zA=!1,U3=4,H3=2},"clear"),_ke={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},Dke={FILLED:0,OPEN:1},Lke={LEFTOF:0,RIGHTOF:1,OVER:2},Rke=o(function(t){$A=sr(t,ge())},"setTitle"),lv={addPersonOrSystem:oke,addPersonOrSystemBoundary:uke,addContainer:lke,addContainerBoundary:hke,addComponent:cke,addDeploymentNode:fke,popBoundaryParseStack:dke,addRel:ske,updateElStyle:pke,updateRelStyle:mke,updateLayoutConfig:gke,autoWrap:Sh,setWrap:Cke,getC4ShapeArray:hH,getC4Shape:Tke,getC4ShapeKeys:wke,getBoundaries:fH,getBoundarys:kke,getCurrentBoundaryParse:xke,getParentBoundaryParse:bke,getRels:Eke,getTitle:Ske,getC4Type:ike,getC4ShapeInRow:yke,getC4BoundaryInRow:vke,setAccTitle:Rr,getAccTitle:Mr,getAccDescription:Or,setAccDescription:Ir,getConfig:o(()=>ge().c4,"getConfig"),clear:Ake,LINETYPE:_ke,ARROWTYPE:Dke,PLACEMENT:Lke,setTitle:Rke,setC4Type:ake}});function bd(t,e){return t==null||e==null?NaN:te?1:t>=e?0:NaN}var VA=M(()=>{"use strict";o(bd,"ascending")});function UA(t,e){return t==null||e==null?NaN:et?1:e>=t?0:NaN}var dH=M(()=>{"use strict";o(UA,"descending")});function Td(t){let e,r,n;t.length!==2?(e=bd,r=o((l,u)=>bd(t(l),u),"compare2"),n=o((l,u)=>t(l)-u,"delta")):(e=t===bd||t===UA?t:Nke,r=t,n=t);function i(l,u,h=0,f=l.length){if(h>>1;r(l[d],u)<0?h=d+1:f=d}while(h>>1;r(l[d],u)<=0?h=d+1:f=d}while(hh&&n(l[d-1],u)>-n(l[d],u)?d-1:d}return o(s,"center"),{left:i,center:s,right:a}}function Nke(){return 0}var HA=M(()=>{"use strict";VA();dH();o(Td,"bisector");o(Nke,"zero")});function qA(t){return t===null?NaN:+t}var pH=M(()=>{"use strict";o(qA,"number")});var mH,gH,Mke,Ike,WA,yH=M(()=>{"use strict";VA();HA();pH();mH=Td(bd),gH=mH.right,Mke=mH.left,Ike=Td(qA).center,WA=gH});function vH({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):r}function Oke({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):(t.set(n,r),r)}function Pke({_intern:t,_key:e},r){let n=e(r);return t.has(n)&&(r=t.get(n),t.delete(n)),r}function Bke(t){return t!==null&&typeof t=="object"?t.valueOf():t}var D0,xH=M(()=>{"use strict";D0=class extends Map{static{o(this,"InternMap")}constructor(e,r=Bke){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),e!=null)for(let[n,i]of e)this.set(n,i)}get(e){return super.get(vH(this,e))}has(e){return super.has(vH(this,e))}set(e,r){return super.set(Oke(this,e),r)}delete(e){return super.delete(Pke(this,e))}};o(vH,"intern_get");o(Oke,"intern_set");o(Pke,"intern_delete");o(Bke,"keyof")});function q3(t,e,r){let n=(e-t)/Math.max(0,r),i=Math.floor(Math.log10(n)),a=n/Math.pow(10,i),s=a>=Fke?10:a>=$ke?5:a>=zke?2:1,l,u,h;return i<0?(h=Math.pow(10,-i)/s,l=Math.round(t*h),u=Math.round(e*h),l/he&&--u,h=-h):(h=Math.pow(10,i)*s,l=Math.round(t/h),u=Math.round(e/h),l*he&&--u),u0))return[];if(t===e)return[t];let n=e=i))return[];let l=a-i+1,u=new Array(l);if(n)if(s<0)for(let h=0;h{"use strict";Fke=Math.sqrt(50),$ke=Math.sqrt(10),zke=Math.sqrt(2);o(q3,"tickSpec");o(W3,"ticks");o(cv,"tickIncrement");o(L0,"tickStep")});function Y3(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r=i)&&(r=i)}return r}var TH=M(()=>{"use strict";o(Y3,"max")});function X3(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var wH=M(()=>{"use strict";o(X3,"min")});function j3(t,e,r){t=+t,e=+e,r=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((e-t)/r))|0,a=new Array(i);++n{"use strict";o(j3,"range")});var Ch=M(()=>{"use strict";yH();HA();TH();wH();kH();bH();xH()});function YA(t){return t}var EH=M(()=>{"use strict";o(YA,"default")});function Gke(t){return"translate("+t+",0)"}function Vke(t){return"translate(0,"+t+")"}function Uke(t){return e=>+t(e)}function Hke(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),r=>+t(r)+e}function qke(){return!this.__axis}function CH(t,e){var r=[],n=null,i=null,a=6,s=6,l=3,u=typeof window<"u"&&window.devicePixelRatio>1?0:.5,h=t===Q3||t===K3?-1:1,f=t===K3||t===XA?"x":"y",d=t===Q3||t===jA?Gke:Vke;function p(m){var g=n??(e.ticks?e.ticks.apply(e,r):e.domain()),y=i??(e.tickFormat?e.tickFormat.apply(e,r):YA),v=Math.max(a,0)+l,x=e.range(),b=+x[0]+u,T=+x[x.length-1]+u,S=(e.bandwidth?Hke:Uke)(e.copy(),u),w=m.selection?m.selection():m,k=w.selectAll(".domain").data([null]),C=w.selectAll(".tick").data(g,e).order(),A=C.exit(),L=C.enter().append("g").attr("class","tick"),I=C.select("line"),R=C.select("text");k=k.merge(k.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),C=C.merge(L),I=I.merge(L.append("line").attr("stroke","currentColor").attr(f+"2",h*a)),R=R.merge(L.append("text").attr("fill","currentColor").attr(f,h*v).attr("dy",t===Q3?"0em":t===jA?"0.71em":"0.32em")),m!==w&&(k=k.transition(m),C=C.transition(m),I=I.transition(m),R=R.transition(m),A=A.transition(m).attr("opacity",SH).attr("transform",function(E){return isFinite(E=S(E))?d(E+u):this.getAttribute("transform")}),L.attr("opacity",SH).attr("transform",function(E){var _=this.parentNode.__axis;return d((_&&isFinite(_=_(E))?_:S(E))+u)})),A.remove(),k.attr("d",t===K3||t===XA?s?"M"+h*s+","+b+"H"+u+"V"+T+"H"+h*s:"M"+u+","+b+"V"+T:s?"M"+b+","+h*s+"V"+u+"H"+T+"V"+h*s:"M"+b+","+u+"H"+T),C.attr("opacity",1).attr("transform",function(E){return d(S(E)+u)}),I.attr(f+"2",h*a),R.attr(f,h*v).text(y),w.filter(qke).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===XA?"start":t===K3?"end":"middle"),w.each(function(){this.__axis=S})}return o(p,"axis"),p.scale=function(m){return arguments.length?(e=m,p):e},p.ticks=function(){return r=Array.from(arguments),p},p.tickArguments=function(m){return arguments.length?(r=m==null?[]:Array.from(m),p):r.slice()},p.tickValues=function(m){return arguments.length?(n=m==null?null:Array.from(m),p):n&&n.slice()},p.tickFormat=function(m){return arguments.length?(i=m,p):i},p.tickSize=function(m){return arguments.length?(a=s=+m,p):a},p.tickSizeInner=function(m){return arguments.length?(a=+m,p):a},p.tickSizeOuter=function(m){return arguments.length?(s=+m,p):s},p.tickPadding=function(m){return arguments.length?(l=+m,p):l},p.offset=function(m){return arguments.length?(u=+m,p):u},p}function KA(t){return CH(Q3,t)}function QA(t){return CH(jA,t)}var Q3,XA,jA,K3,SH,AH=M(()=>{"use strict";EH();Q3=1,XA=2,jA=3,K3=4,SH=1e-6;o(Gke,"translateX");o(Vke,"translateY");o(Uke,"number");o(Hke,"center");o(qke,"entering");o(CH,"axis");o(KA,"axisTop");o(QA,"axisBottom")});var _H=M(()=>{"use strict";AH()});function LH(){for(var t=0,e=arguments.length,r={},n;t=0&&(n=r.slice(i+1),r=r.slice(0,i)),r&&!e.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:n}})}function Xke(t,e){for(var r=0,n=t.length,i;r{"use strict";Wke={value:o(()=>{},"value")};o(LH,"dispatch");o(Z3,"Dispatch");o(Yke,"parseTypenames");Z3.prototype=LH.prototype={constructor:Z3,on:o(function(t,e){var r=this._,n=Yke(t+"",r),i,a=-1,s=n.length;if(arguments.length<2){for(;++a0)for(var r=new Array(i),n=0,i,a;n{"use strict";RH()});var J3,e8,t8=M(()=>{"use strict";J3="http://www.w3.org/1999/xhtml",e8={svg:"http://www.w3.org/2000/svg",xhtml:J3,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"}});function sc(t){var e=t+="",r=e.indexOf(":");return r>=0&&(e=t.slice(0,r))!=="xmlns"&&(t=t.slice(r+1)),e8.hasOwnProperty(e)?{space:e8[e],local:t}:t}var e5=M(()=>{"use strict";t8();o(sc,"default")});function jke(t){return function(){var e=this.ownerDocument,r=this.namespaceURI;return r===J3&&e.documentElement.namespaceURI===J3?e.createElement(t):e.createElementNS(r,t)}}function Kke(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function uv(t){var e=sc(t);return(e.local?Kke:jke)(e)}var r8=M(()=>{"use strict";e5();t8();o(jke,"creatorInherit");o(Kke,"creatorFixed");o(uv,"default")});function Qke(){}function Ah(t){return t==null?Qke:function(){return this.querySelector(t)}}var t5=M(()=>{"use strict";o(Qke,"none");o(Ah,"default")});function n8(t){typeof t!="function"&&(t=Ah(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";gl();t5();o(n8,"default")});function i8(t){return t==null?[]:Array.isArray(t)?t:Array.from(t)}var MH=M(()=>{"use strict";o(i8,"array")});function Zke(){return[]}function R0(t){return t==null?Zke:function(){return this.querySelectorAll(t)}}var a8=M(()=>{"use strict";o(Zke,"empty");o(R0,"default")});function Jke(t){return function(){return i8(t.apply(this,arguments))}}function s8(t){typeof t=="function"?t=Jke(t):t=R0(t);for(var e=this._groups,r=e.length,n=[],i=[],a=0;a{"use strict";gl();MH();a8();o(Jke,"arrayAll");o(s8,"default")});function N0(t){return function(){return this.matches(t)}}function r5(t){return function(e){return e.matches(t)}}var hv=M(()=>{"use strict";o(N0,"default");o(r5,"childMatcher")});function tEe(t){return function(){return eEe.call(this.children,t)}}function rEe(){return this.firstElementChild}function o8(t){return this.select(t==null?rEe:tEe(typeof t=="function"?t:r5(t)))}var eEe,OH=M(()=>{"use strict";hv();eEe=Array.prototype.find;o(tEe,"childFind");o(rEe,"childFirst");o(o8,"default")});function iEe(){return Array.from(this.children)}function aEe(t){return function(){return nEe.call(this.children,t)}}function l8(t){return this.selectAll(t==null?iEe:aEe(typeof t=="function"?t:r5(t)))}var nEe,PH=M(()=>{"use strict";hv();nEe=Array.prototype.filter;o(iEe,"children");o(aEe,"childrenFilter");o(l8,"default")});function c8(t){typeof t!="function"&&(t=N0(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";gl();hv();o(c8,"default")});function fv(t){return new Array(t.length)}var u8=M(()=>{"use strict";o(fv,"default")});function h8(){return new ui(this._enter||this._groups.map(fv),this._parents)}function dv(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}var f8=M(()=>{"use strict";u8();gl();o(h8,"default");o(dv,"EnterNode");dv.prototype={constructor:dv,appendChild:o(function(t){return this._parent.insertBefore(t,this._next)},"appendChild"),insertBefore:o(function(t,e){return this._parent.insertBefore(t,e)},"insertBefore"),querySelector:o(function(t){return this._parent.querySelector(t)},"querySelector"),querySelectorAll:o(function(t){return this._parent.querySelectorAll(t)},"querySelectorAll")}});function d8(t){return function(){return t}}var FH=M(()=>{"use strict";o(d8,"default")});function sEe(t,e,r,n,i,a){for(var s=0,l,u=e.length,h=a.length;s=T&&(T=b+1);!(w=v[T])&&++T{"use strict";gl();f8();FH();o(sEe,"bindIndex");o(oEe,"bindKey");o(lEe,"datum");o(p8,"default");o(cEe,"arraylike")});function m8(){return new ui(this._exit||this._groups.map(fv),this._parents)}var zH=M(()=>{"use strict";u8();gl();o(m8,"default")});function g8(t,e,r){var n=this.enter(),i=this,a=this.exit();return typeof t=="function"?(n=t(n),n&&(n=n.selection())):n=n.append(t+""),e!=null&&(i=e(i),i&&(i=i.selection())),r==null?a.remove():r(a),n&&i?n.merge(i).order():i}var GH=M(()=>{"use strict";o(g8,"default")});function y8(t){for(var e=t.selection?t.selection():t,r=this._groups,n=e._groups,i=r.length,a=n.length,s=Math.min(i,a),l=new Array(i),u=0;u{"use strict";gl();o(y8,"default")});function v8(){for(var t=this._groups,e=-1,r=t.length;++e=0;)(s=n[i])&&(a&&s.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(s,a),a=s);return this}var UH=M(()=>{"use strict";o(v8,"default")});function x8(t){t||(t=uEe);function e(d,p){return d&&p?t(d.__data__,p.__data__):!d-!p}o(e,"compareNode");for(var r=this._groups,n=r.length,i=new Array(n),a=0;ae?1:t>=e?0:NaN}var HH=M(()=>{"use strict";gl();o(x8,"default");o(uEe,"ascending")});function b8(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}var qH=M(()=>{"use strict";o(b8,"default")});function T8(){return Array.from(this)}var WH=M(()=>{"use strict";o(T8,"default")});function w8(){for(var t=this._groups,e=0,r=t.length;e{"use strict";o(w8,"default")});function k8(){let t=0;for(let e of this)++t;return t}var XH=M(()=>{"use strict";o(k8,"default")});function E8(){return!this.node()}var jH=M(()=>{"use strict";o(E8,"default")});function S8(t){for(var e=this._groups,r=0,n=e.length;r{"use strict";o(S8,"default")});function hEe(t){return function(){this.removeAttribute(t)}}function fEe(t){return function(){this.removeAttributeNS(t.space,t.local)}}function dEe(t,e){return function(){this.setAttribute(t,e)}}function pEe(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function mEe(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttribute(t):this.setAttribute(t,r)}}function gEe(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}}function C8(t,e){var r=sc(t);if(arguments.length<2){var n=this.node();return r.local?n.getAttributeNS(r.space,r.local):n.getAttribute(r)}return this.each((e==null?r.local?fEe:hEe:typeof e=="function"?r.local?gEe:mEe:r.local?pEe:dEe)(r,e))}var QH=M(()=>{"use strict";e5();o(hEe,"attrRemove");o(fEe,"attrRemoveNS");o(dEe,"attrConstant");o(pEe,"attrConstantNS");o(mEe,"attrFunction");o(gEe,"attrFunctionNS");o(C8,"default")});function pv(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}var A8=M(()=>{"use strict";o(pv,"default")});function yEe(t){return function(){this.style.removeProperty(t)}}function vEe(t,e,r){return function(){this.style.setProperty(t,e,r)}}function xEe(t,e,r){return function(){var n=e.apply(this,arguments);n==null?this.style.removeProperty(t):this.style.setProperty(t,n,r)}}function _8(t,e,r){return arguments.length>1?this.each((e==null?yEe:typeof e=="function"?xEe:vEe)(t,e,r??"")):_h(this.node(),t)}function _h(t,e){return t.style.getPropertyValue(e)||pv(t).getComputedStyle(t,null).getPropertyValue(e)}var D8=M(()=>{"use strict";A8();o(yEe,"styleRemove");o(vEe,"styleConstant");o(xEe,"styleFunction");o(_8,"default");o(_h,"styleValue")});function bEe(t){return function(){delete this[t]}}function TEe(t,e){return function(){this[t]=e}}function wEe(t,e){return function(){var r=e.apply(this,arguments);r==null?delete this[t]:this[t]=r}}function L8(t,e){return arguments.length>1?this.each((e==null?bEe:typeof e=="function"?wEe:TEe)(t,e)):this.node()[t]}var ZH=M(()=>{"use strict";o(bEe,"propertyRemove");o(TEe,"propertyConstant");o(wEe,"propertyFunction");o(L8,"default")});function JH(t){return t.trim().split(/^|\s+/)}function R8(t){return t.classList||new eq(t)}function eq(t){this._node=t,this._names=JH(t.getAttribute("class")||"")}function tq(t,e){for(var r=R8(t),n=-1,i=e.length;++n{"use strict";o(JH,"classArray");o(R8,"classList");o(eq,"ClassList");eq.prototype={add:o(function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},"add"),remove:o(function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},"remove"),contains:o(function(t){return this._names.indexOf(t)>=0},"contains")};o(tq,"classedAdd");o(rq,"classedRemove");o(kEe,"classedTrue");o(EEe,"classedFalse");o(SEe,"classedFunction");o(N8,"default")});function CEe(){this.textContent=""}function AEe(t){return function(){this.textContent=t}}function _Ee(t){return function(){var e=t.apply(this,arguments);this.textContent=e??""}}function M8(t){return arguments.length?this.each(t==null?CEe:(typeof t=="function"?_Ee:AEe)(t)):this.node().textContent}var iq=M(()=>{"use strict";o(CEe,"textRemove");o(AEe,"textConstant");o(_Ee,"textFunction");o(M8,"default")});function DEe(){this.innerHTML=""}function LEe(t){return function(){this.innerHTML=t}}function REe(t){return function(){var e=t.apply(this,arguments);this.innerHTML=e??""}}function I8(t){return arguments.length?this.each(t==null?DEe:(typeof t=="function"?REe:LEe)(t)):this.node().innerHTML}var aq=M(()=>{"use strict";o(DEe,"htmlRemove");o(LEe,"htmlConstant");o(REe,"htmlFunction");o(I8,"default")});function NEe(){this.nextSibling&&this.parentNode.appendChild(this)}function O8(){return this.each(NEe)}var sq=M(()=>{"use strict";o(NEe,"raise");o(O8,"default")});function MEe(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function P8(){return this.each(MEe)}var oq=M(()=>{"use strict";o(MEe,"lower");o(P8,"default")});function B8(t){var e=typeof t=="function"?t:uv(t);return this.select(function(){return this.appendChild(e.apply(this,arguments))})}var lq=M(()=>{"use strict";r8();o(B8,"default")});function IEe(){return null}function F8(t,e){var r=typeof t=="function"?t:uv(t),n=e==null?IEe:typeof e=="function"?e:Ah(e);return this.select(function(){return this.insertBefore(r.apply(this,arguments),n.apply(this,arguments)||null)})}var cq=M(()=>{"use strict";r8();t5();o(IEe,"constantNull");o(F8,"default")});function OEe(){var t=this.parentNode;t&&t.removeChild(this)}function $8(){return this.each(OEe)}var uq=M(()=>{"use strict";o(OEe,"remove");o($8,"default")});function PEe(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function BEe(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function z8(t){return this.select(t?BEe:PEe)}var hq=M(()=>{"use strict";o(PEe,"selection_cloneShallow");o(BEe,"selection_cloneDeep");o(z8,"default")});function G8(t){return arguments.length?this.property("__data__",t):this.node().__data__}var fq=M(()=>{"use strict";o(G8,"default")});function FEe(t){return function(e){t.call(this,e,this.__data__)}}function $Ee(t){return t.trim().split(/^|\s+/).map(function(e){var r="",n=e.indexOf(".");return n>=0&&(r=e.slice(n+1),e=e.slice(0,n)),{type:e,name:r}})}function zEe(t){return function(){var e=this.__on;if(e){for(var r=0,n=-1,i=e.length,a;r{"use strict";o(FEe,"contextListener");o($Ee,"parseTypenames");o(zEe,"onRemove");o(GEe,"onAdd");o(V8,"default")});function pq(t,e,r){var n=pv(t),i=n.CustomEvent;typeof i=="function"?i=new i(e,r):(i=n.document.createEvent("Event"),r?(i.initEvent(e,r.bubbles,r.cancelable),i.detail=r.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function VEe(t,e){return function(){return pq(this,t,e)}}function UEe(t,e){return function(){return pq(this,t,e.apply(this,arguments))}}function U8(t,e){return this.each((typeof e=="function"?UEe:VEe)(t,e))}var mq=M(()=>{"use strict";A8();o(pq,"dispatchEvent");o(VEe,"dispatchConstant");o(UEe,"dispatchFunction");o(U8,"default")});function*H8(){for(var t=this._groups,e=0,r=t.length;e{"use strict";o(H8,"default")});function ui(t,e){this._groups=t,this._parents=e}function yq(){return new ui([[document.documentElement]],q8)}function HEe(){return this}var q8,yu,gl=M(()=>{"use strict";NH();IH();OH();PH();BH();$H();f8();zH();GH();VH();UH();HH();qH();WH();YH();XH();jH();KH();QH();D8();ZH();nq();iq();aq();sq();oq();lq();cq();uq();hq();fq();dq();mq();gq();q8=[null];o(ui,"Selection");o(yq,"selection");o(HEe,"selection_selection");ui.prototype=yq.prototype={constructor:ui,select:n8,selectAll:s8,selectChild:o8,selectChildren:l8,filter:c8,data:p8,enter:h8,exit:m8,join:g8,merge:y8,selection:HEe,order:v8,sort:x8,call:b8,nodes:T8,node:w8,size:k8,empty:E8,each:S8,attr:C8,style:_8,property:L8,classed:N8,text:M8,html:I8,raise:O8,lower:P8,append:B8,insert:F8,remove:$8,clone:z8,datum:G8,on:V8,dispatch:U8,[Symbol.iterator]:H8};yu=yq});function qe(t){return typeof t=="string"?new ui([[document.querySelector(t)]],[document.documentElement]):new ui([[t]],q8)}var vq=M(()=>{"use strict";gl();o(qe,"default")});var yl=M(()=>{"use strict";hv();e5();vq();gl();t5();a8();D8()});var xq=M(()=>{"use strict"});function Dh(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function M0(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}var W8=M(()=>{"use strict";o(Dh,"default");o(M0,"extend")});function Lh(){}function Tq(){return this.rgb().formatHex()}function ZEe(){return this.rgb().formatHex8()}function JEe(){return _q(this).formatHsl()}function wq(){return this.rgb().formatRgb()}function xl(t){var e,r;return t=(t+"").trim().toLowerCase(),(e=qEe.exec(t))?(r=e[1].length,e=parseInt(e[1],16),r===6?kq(e):r===3?new la(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):r===8?n5(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):r===4?n5(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=WEe.exec(t))?new la(e[1],e[2],e[3],1):(e=YEe.exec(t))?new la(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=XEe.exec(t))?n5(e[1],e[2],e[3],e[4]):(e=jEe.exec(t))?n5(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=KEe.exec(t))?Cq(e[1],e[2]/100,e[3]/100,1):(e=QEe.exec(t))?Cq(e[1],e[2]/100,e[3]/100,e[4]):bq.hasOwnProperty(t)?kq(bq[t]):t==="transparent"?new la(NaN,NaN,NaN,0):null}function kq(t){return new la(t>>16&255,t>>8&255,t&255,1)}function n5(t,e,r,n){return n<=0&&(t=e=r=NaN),new la(t,e,r,n)}function X8(t){return t instanceof Lh||(t=xl(t)),t?(t=t.rgb(),new la(t.r,t.g,t.b,t.opacity)):new la}function O0(t,e,r,n){return arguments.length===1?X8(t):new la(t,e,r,n??1)}function la(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function Eq(){return`#${wd(this.r)}${wd(this.g)}${wd(this.b)}`}function eSe(){return`#${wd(this.r)}${wd(this.g)}${wd(this.b)}${wd((isNaN(this.opacity)?1:this.opacity)*255)}`}function Sq(){let t=s5(this.opacity);return`${t===1?"rgb(":"rgba("}${kd(this.r)}, ${kd(this.g)}, ${kd(this.b)}${t===1?")":`, ${t})`}`}function s5(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function kd(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function wd(t){return t=kd(t),(t<16?"0":"")+t.toString(16)}function Cq(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new vl(t,e,r,n)}function _q(t){if(t instanceof vl)return new vl(t.h,t.s,t.l,t.opacity);if(t instanceof Lh||(t=xl(t)),!t)return new vl;if(t instanceof vl)return t;t=t.rgb();var e=t.r/255,r=t.g/255,n=t.b/255,i=Math.min(e,r,n),a=Math.max(e,r,n),s=NaN,l=a-i,u=(a+i)/2;return l?(e===a?s=(r-n)/l+(r0&&u<1?0:s,new vl(s,l,u,t.opacity)}function Dq(t,e,r,n){return arguments.length===1?_q(t):new vl(t,e,r,n??1)}function vl(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function Aq(t){return t=(t||0)%360,t<0?t+360:t}function i5(t){return Math.max(0,Math.min(1,t||0))}function Y8(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}var mv,a5,I0,gv,oc,qEe,WEe,YEe,XEe,jEe,KEe,QEe,bq,j8=M(()=>{"use strict";W8();o(Lh,"Color");mv=.7,a5=1/mv,I0="\\s*([+-]?\\d+)\\s*",gv="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",oc="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",qEe=/^#([0-9a-f]{3,8})$/,WEe=new RegExp(`^rgb\\(${I0},${I0},${I0}\\)$`),YEe=new RegExp(`^rgb\\(${oc},${oc},${oc}\\)$`),XEe=new RegExp(`^rgba\\(${I0},${I0},${I0},${gv}\\)$`),jEe=new RegExp(`^rgba\\(${oc},${oc},${oc},${gv}\\)$`),KEe=new RegExp(`^hsl\\(${gv},${oc},${oc}\\)$`),QEe=new RegExp(`^hsla\\(${gv},${oc},${oc},${gv}\\)$`),bq={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};Dh(Lh,xl,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:Tq,formatHex:Tq,formatHex8:ZEe,formatHsl:JEe,formatRgb:wq,toString:wq});o(Tq,"color_formatHex");o(ZEe,"color_formatHex8");o(JEe,"color_formatHsl");o(wq,"color_formatRgb");o(xl,"color");o(kq,"rgbn");o(n5,"rgba");o(X8,"rgbConvert");o(O0,"rgb");o(la,"Rgb");Dh(la,O0,M0(Lh,{brighter(t){return t=t==null?a5:Math.pow(a5,t),new la(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?mv:Math.pow(mv,t),new la(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new la(kd(this.r),kd(this.g),kd(this.b),s5(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Eq,formatHex:Eq,formatHex8:eSe,formatRgb:Sq,toString:Sq}));o(Eq,"rgb_formatHex");o(eSe,"rgb_formatHex8");o(Sq,"rgb_formatRgb");o(s5,"clampa");o(kd,"clampi");o(wd,"hex");o(Cq,"hsla");o(_q,"hslConvert");o(Dq,"hsl");o(vl,"Hsl");Dh(vl,Dq,M0(Lh,{brighter(t){return t=t==null?a5:Math.pow(a5,t),new vl(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?mv:Math.pow(mv,t),new vl(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new la(Y8(t>=240?t-240:t+120,i,n),Y8(t,i,n),Y8(t<120?t+240:t-120,i,n),this.opacity)},clamp(){return new vl(Aq(this.h),i5(this.s),i5(this.l),s5(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let t=s5(this.opacity);return`${t===1?"hsl(":"hsla("}${Aq(this.h)}, ${i5(this.s)*100}%, ${i5(this.l)*100}%${t===1?")":`, ${t})`}`}}));o(Aq,"clamph");o(i5,"clampt");o(Y8,"hsl2rgb")});var Lq,Rq,Nq=M(()=>{"use strict";Lq=Math.PI/180,Rq=180/Math.PI});function Fq(t){if(t instanceof lc)return new lc(t.l,t.a,t.b,t.opacity);if(t instanceof vu)return $q(t);t instanceof la||(t=X8(t));var e=J8(t.r),r=J8(t.g),n=J8(t.b),i=K8((.2225045*e+.7168786*r+.0606169*n)/Iq),a,s;return e===r&&r===n?a=s=i:(a=K8((.4360747*e+.3850649*r+.1430804*n)/Mq),s=K8((.0139322*e+.0971045*r+.7141733*n)/Oq)),new lc(116*i-16,500*(a-i),200*(i-s),t.opacity)}function e_(t,e,r,n){return arguments.length===1?Fq(t):new lc(t,e,r,n??1)}function lc(t,e,r,n){this.l=+t,this.a=+e,this.b=+r,this.opacity=+n}function K8(t){return t>tSe?Math.pow(t,1/3):t/Bq+Pq}function Q8(t){return t>P0?t*t*t:Bq*(t-Pq)}function Z8(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function J8(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function rSe(t){if(t instanceof vu)return new vu(t.h,t.c,t.l,t.opacity);if(t instanceof lc||(t=Fq(t)),t.a===0&&t.b===0)return new vu(NaN,0{"use strict";W8();j8();Nq();o5=18,Mq=.96422,Iq=1,Oq=.82521,Pq=4/29,P0=6/29,Bq=3*P0*P0,tSe=P0*P0*P0;o(Fq,"labConvert");o(e_,"lab");o(lc,"Lab");Dh(lc,e_,M0(Lh,{brighter(t){return new lc(this.l+o5*(t??1),this.a,this.b,this.opacity)},darker(t){return new lc(this.l-o5*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return e=Mq*Q8(e),t=Iq*Q8(t),r=Oq*Q8(r),new la(Z8(3.1338561*e-1.6168667*t-.4906146*r),Z8(-.9787684*e+1.9161415*t+.033454*r),Z8(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}}));o(K8,"xyz2lab");o(Q8,"lab2xyz");o(Z8,"lrgb2rgb");o(J8,"rgb2lrgb");o(rSe,"hclConvert");o(yv,"hcl");o(vu,"Hcl");o($q,"hcl2lab");Dh(vu,yv,M0(Lh,{brighter(t){return new vu(this.h,this.c,this.l+o5*(t??1),this.opacity)},darker(t){return new vu(this.h,this.c,this.l-o5*(t??1),this.opacity)},rgb(){return $q(this).rgb()}}))});var B0=M(()=>{"use strict";j8();zq()});function t_(t,e,r,n,i){var a=t*t,s=a*t;return((1-3*t+3*a-s)*e+(4-6*a+3*s)*r+(1+3*t+3*a-3*s)*n+s*i)/6}function r_(t){var e=t.length-1;return function(r){var n=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),i=t[n],a=t[n+1],s=n>0?t[n-1]:2*i-a,l=n{"use strict";o(t_,"basis");o(r_,"default")});function i_(t){var e=t.length;return function(r){var n=Math.floor(((r%=1)<0?++r:r)*e),i=t[(n+e-1)%e],a=t[n%e],s=t[(n+1)%e],l=t[(n+2)%e];return t_((r-n/e)*e,i,a,s,l)}}var Gq=M(()=>{"use strict";n_();o(i_,"default")});var F0,a_=M(()=>{"use strict";F0=o(t=>()=>t,"default")});function Vq(t,e){return function(r){return t+r*e}}function nSe(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}function Uq(t,e){var r=e-t;return r?Vq(t,r>180||r<-180?r-360*Math.round(r/360):r):F0(isNaN(t)?e:t)}function Hq(t){return(t=+t)==1?xu:function(e,r){return r-e?nSe(e,r,t):F0(isNaN(e)?r:e)}}function xu(t,e){var r=e-t;return r?Vq(t,r):F0(isNaN(t)?e:t)}var s_=M(()=>{"use strict";a_();o(Vq,"linear");o(nSe,"exponential");o(Uq,"hue");o(Hq,"gamma");o(xu,"nogamma")});function qq(t){return function(e){var r=e.length,n=new Array(r),i=new Array(r),a=new Array(r),s,l;for(s=0;s{"use strict";B0();n_();Gq();s_();Ed=o((function t(e){var r=Hq(e);function n(i,a){var s=r((i=O0(i)).r,(a=O0(a)).r),l=r(i.g,a.g),u=r(i.b,a.b),h=xu(i.opacity,a.opacity);return function(f){return i.r=s(f),i.g=l(f),i.b=u(f),i.opacity=h(f),i+""}}return o(n,"rgb"),n.gamma=t,n}),"rgbGamma")(1);o(qq,"rgbSpline");iSe=qq(r_),aSe=qq(i_)});function l_(t,e){e||(e=[]);var r=t?Math.min(e.length,t.length):0,n=e.slice(),i;return function(a){for(i=0;i{"use strict";o(l_,"default");o(Wq,"isNumberArray")});function Xq(t,e){var r=e?e.length:0,n=t?Math.min(r,t.length):0,i=new Array(n),a=new Array(r),s;for(s=0;s{"use strict";l5();o(Xq,"genericArray")});function c_(t,e){var r=new Date;return t=+t,e=+e,function(n){return r.setTime(t*(1-n)+e*n),r}}var Kq=M(()=>{"use strict";o(c_,"default")});function Wi(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}var vv=M(()=>{"use strict";o(Wi,"default")});function u_(t,e){var r={},n={},i;(t===null||typeof t!="object")&&(t={}),(e===null||typeof e!="object")&&(e={});for(i in e)i in t?r[i]=Rh(t[i],e[i]):n[i]=e[i];return function(a){for(i in r)n[i]=r[i](a);return n}}var Qq=M(()=>{"use strict";l5();o(u_,"default")});function sSe(t){return function(){return t}}function oSe(t){return function(e){return t(e)+""}}function $0(t,e){var r=f_.lastIndex=h_.lastIndex=0,n,i,a,s=-1,l=[],u=[];for(t=t+"",e=e+"";(n=f_.exec(t))&&(i=h_.exec(e));)(a=i.index)>r&&(a=e.slice(r,a),l[s]?l[s]+=a:l[++s]=a),(n=n[0])===(i=i[0])?l[s]?l[s]+=i:l[++s]=i:(l[++s]=null,u.push({i:s,x:Wi(n,i)})),r=h_.lastIndex;return r{"use strict";vv();f_=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,h_=new RegExp(f_.source,"g");o(sSe,"zero");o(oSe,"one");o($0,"default")});function Rh(t,e){var r=typeof e,n;return e==null||r==="boolean"?F0(e):(r==="number"?Wi:r==="string"?(n=xl(e))?(e=n,Ed):$0:e instanceof xl?Ed:e instanceof Date?c_:Wq(e)?l_:Array.isArray(e)?Xq:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?u_:Wi)(t,e)}var l5=M(()=>{"use strict";B0();o_();jq();Kq();vv();Qq();d_();a_();Yq();o(Rh,"default")});function c5(t,e){return t=+t,e=+e,function(r){return Math.round(t*(1-r)+e*r)}}var Zq=M(()=>{"use strict";o(c5,"default")});function h5(t,e,r,n,i,a){var s,l,u;return(s=Math.sqrt(t*t+e*e))&&(t/=s,e/=s),(u=t*r+e*n)&&(r-=t*u,n-=e*u),(l=Math.sqrt(r*r+n*n))&&(r/=l,n/=l,u/=l),t*n{"use strict";Jq=180/Math.PI,u5={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};o(h5,"default")});function tW(t){let e=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?u5:h5(e.a,e.b,e.c,e.d,e.e,e.f)}function rW(t){return t==null?u5:(f5||(f5=document.createElementNS("http://www.w3.org/2000/svg","g")),f5.setAttribute("transform",t),(t=f5.transform.baseVal.consolidate())?(t=t.matrix,h5(t.a,t.b,t.c,t.d,t.e,t.f)):u5)}var f5,nW=M(()=>{"use strict";eW();o(tW,"parseCss");o(rW,"parseSvg")});function iW(t,e,r,n){function i(h){return h.length?h.pop()+" ":""}o(i,"pop");function a(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push("translate(",null,e,null,r);g.push({i:y-4,x:Wi(h,d)},{i:y-2,x:Wi(f,p)})}else(d||p)&&m.push("translate("+d+e+p+r)}o(a,"translate");function s(h,f,d,p){h!==f?(h-f>180?f+=360:f-h>180&&(h+=360),p.push({i:d.push(i(d)+"rotate(",null,n)-2,x:Wi(h,f)})):f&&d.push(i(d)+"rotate("+f+n)}o(s,"rotate");function l(h,f,d,p){h!==f?p.push({i:d.push(i(d)+"skewX(",null,n)-2,x:Wi(h,f)}):f&&d.push(i(d)+"skewX("+f+n)}o(l,"skewX");function u(h,f,d,p,m,g){if(h!==d||f!==p){var y=m.push(i(m)+"scale(",null,",",null,")");g.push({i:y-4,x:Wi(h,d)},{i:y-2,x:Wi(f,p)})}else(d!==1||p!==1)&&m.push(i(m)+"scale("+d+","+p+")")}return o(u,"scale"),function(h,f){var d=[],p=[];return h=t(h),f=t(f),a(h.translateX,h.translateY,f.translateX,f.translateY,d,p),s(h.rotate,f.rotate,d,p),l(h.skewX,f.skewX,d,p),u(h.scaleX,h.scaleY,f.scaleX,f.scaleY,d,p),h=f=null,function(m){for(var g=-1,y=p.length,v;++g{"use strict";vv();nW();o(iW,"interpolateTransform");p_=iW(tW,"px, ","px)","deg)"),m_=iW(rW,", ",")",")")});function sW(t){return function(e,r){var n=t((e=yv(e)).h,(r=yv(r)).h),i=xu(e.c,r.c),a=xu(e.l,r.l),s=xu(e.opacity,r.opacity);return function(l){return e.h=n(l),e.c=i(l),e.l=a(l),e.opacity=s(l),e+""}}}var g_,lSe,oW=M(()=>{"use strict";B0();s_();o(sW,"hcl");g_=sW(Uq),lSe=sW(xu)});var z0=M(()=>{"use strict";l5();vv();Zq();d_();aW();o_();oW()});function Ev(){return Sd||(uW(cSe),Sd=wv.now()+m5)}function cSe(){Sd=0}function kv(){this._call=this._time=this._next=null}function g5(t,e,r){var n=new kv;return n.restart(t,e,r),n}function hW(){Ev(),++G0;for(var t=d5,e;t;)(e=Sd-t._time)>=0&&t._call.call(void 0,e),t=t._next;--G0}function lW(){Sd=(p5=wv.now())+m5,G0=bv=0;try{hW()}finally{G0=0,hSe(),Sd=0}}function uSe(){var t=wv.now(),e=t-p5;e>cW&&(m5-=e,p5=t)}function hSe(){for(var t,e=d5,r,n=1/0;e;)e._call?(n>e._time&&(n=e._time),t=e,e=e._next):(r=e._next,e._next=null,e=t?t._next=r:d5=r);Tv=t,y_(n)}function y_(t){if(!G0){bv&&(bv=clearTimeout(bv));var e=t-Sd;e>24?(t<1/0&&(bv=setTimeout(lW,t-wv.now()-m5)),xv&&(xv=clearInterval(xv))):(xv||(p5=wv.now(),xv=setInterval(uSe,cW)),G0=1,uW(lW))}}var G0,bv,xv,cW,d5,Tv,p5,Sd,m5,wv,uW,v_=M(()=>{"use strict";G0=0,bv=0,xv=0,cW=1e3,p5=0,Sd=0,m5=0,wv=typeof performance=="object"&&performance.now?performance:Date,uW=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};o(Ev,"now");o(cSe,"clearNow");o(kv,"Timer");kv.prototype=g5.prototype={constructor:kv,restart:o(function(t,e,r){if(typeof t!="function")throw new TypeError("callback is not a function");r=(r==null?Ev():+r)+(e==null?0:+e),!this._next&&Tv!==this&&(Tv?Tv._next=this:d5=this,Tv=this),this._call=t,this._time=r,y_()},"restart"),stop:o(function(){this._call&&(this._call=null,this._time=1/0,y_())},"stop")};o(g5,"timer");o(hW,"timerFlush");o(lW,"wake");o(uSe,"poke");o(hSe,"nap");o(y_,"sleep")});function Sv(t,e,r){var n=new kv;return e=e==null?0:+e,n.restart(i=>{n.stop(),t(i+e)},e,r),n}var fW=M(()=>{"use strict";v_();o(Sv,"default")});var y5=M(()=>{"use strict";v_();fW()});function bu(t,e,r,n,i,a){var s=t.__transition;if(!s)t.__transition={};else if(r in s)return;pSe(t,r,{name:e,index:n,group:i,on:fSe,tween:dSe,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:mW})}function Av(t,e){var r=Oi(t,e);if(r.state>mW)throw new Error("too late; already scheduled");return r}function ca(t,e){var r=Oi(t,e);if(r.state>v5)throw new Error("too late; already running");return r}function Oi(t,e){var r=t.__transition;if(!r||!(r=r[e]))throw new Error("transition not found");return r}function pSe(t,e,r){var n=t.__transition,i;n[e]=r,r.timer=g5(a,0,r.time);function a(h){r.state=dW,r.timer.restart(s,r.delay,r.time),r.delay<=h&&s(h-r.delay)}o(a,"schedule");function s(h){var f,d,p,m;if(r.state!==dW)return u();for(f in n)if(m=n[f],m.name===r.name){if(m.state===v5)return Sv(s);m.state===pW?(m.state=Cv,m.timer.stop(),m.on.call("interrupt",t,t.__data__,m.index,m.group),delete n[f]):+f{"use strict";JA();y5();fSe=ZA("start","end","cancel","interrupt"),dSe=[],mW=0,dW=1,x5=2,v5=3,pW=4,b5=5,Cv=6;o(bu,"default");o(Av,"init");o(ca,"set");o(Oi,"get");o(pSe,"create")});function _v(t,e){var r=t.__transition,n,i,a=!0,s;if(r){e=e==null?null:e+"";for(s in r){if((n=r[s]).name!==e){a=!1;continue}i=n.state>x5&&n.state{"use strict";Ds();o(_v,"default")});function x_(t){return this.each(function(){_v(this,t)})}var yW=M(()=>{"use strict";gW();o(x_,"default")});function mSe(t,e){var r,n;return function(){var i=ca(this,t),a=i.tween;if(a!==r){n=r=a;for(var s=0,l=n.length;s{"use strict";Ds();o(mSe,"tweenRemove");o(gSe,"tweenFunction");o(b_,"default");o(V0,"tweenValue")});function Lv(t,e){var r;return(typeof e=="number"?Wi:e instanceof xl?Ed:(r=xl(e))?(e=r,Ed):$0)(t,e)}var T_=M(()=>{"use strict";B0();z0();o(Lv,"default")});function ySe(t){return function(){this.removeAttribute(t)}}function vSe(t){return function(){this.removeAttributeNS(t.space,t.local)}}function xSe(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttribute(t);return s===i?null:s===n?a:a=e(n=s,r)}}function bSe(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttributeNS(t.space,t.local);return s===i?null:s===n?a:a=e(n=s,r)}}function TSe(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttribute(t):(s=this.getAttribute(t),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function wSe(t,e,r){var n,i,a;return function(){var s,l=r(this),u;return l==null?void this.removeAttributeNS(t.space,t.local):(s=this.getAttributeNS(t.space,t.local),u=l+"",s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l)))}}function w_(t,e){var r=sc(t),n=r==="transform"?m_:Lv;return this.attrTween(t,typeof e=="function"?(r.local?wSe:TSe)(r,n,V0(this,"attr."+t,e)):e==null?(r.local?vSe:ySe)(r):(r.local?bSe:xSe)(r,n,e))}var vW=M(()=>{"use strict";z0();yl();Dv();T_();o(ySe,"attrRemove");o(vSe,"attrRemoveNS");o(xSe,"attrConstant");o(bSe,"attrConstantNS");o(TSe,"attrFunction");o(wSe,"attrFunctionNS");o(w_,"default")});function kSe(t,e){return function(r){this.setAttribute(t,e.call(this,r))}}function ESe(t,e){return function(r){this.setAttributeNS(t.space,t.local,e.call(this,r))}}function SSe(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&ESe(t,a)),r}return o(i,"tween"),i._value=e,i}function CSe(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&kSe(t,a)),r}return o(i,"tween"),i._value=e,i}function k_(t,e){var r="attr."+t;if(arguments.length<2)return(r=this.tween(r))&&r._value;if(e==null)return this.tween(r,null);if(typeof e!="function")throw new Error;var n=sc(t);return this.tween(r,(n.local?SSe:CSe)(n,e))}var xW=M(()=>{"use strict";yl();o(kSe,"attrInterpolate");o(ESe,"attrInterpolateNS");o(SSe,"attrTweenNS");o(CSe,"attrTween");o(k_,"default")});function ASe(t,e){return function(){Av(this,t).delay=+e.apply(this,arguments)}}function _Se(t,e){return e=+e,function(){Av(this,t).delay=e}}function E_(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?ASe:_Se)(e,t)):Oi(this.node(),e).delay}var bW=M(()=>{"use strict";Ds();o(ASe,"delayFunction");o(_Se,"delayConstant");o(E_,"default")});function DSe(t,e){return function(){ca(this,t).duration=+e.apply(this,arguments)}}function LSe(t,e){return e=+e,function(){ca(this,t).duration=e}}function S_(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?DSe:LSe)(e,t)):Oi(this.node(),e).duration}var TW=M(()=>{"use strict";Ds();o(DSe,"durationFunction");o(LSe,"durationConstant");o(S_,"default")});function RSe(t,e){if(typeof e!="function")throw new Error;return function(){ca(this,t).ease=e}}function C_(t){var e=this._id;return arguments.length?this.each(RSe(e,t)):Oi(this.node(),e).ease}var wW=M(()=>{"use strict";Ds();o(RSe,"easeConstant");o(C_,"default")});function NSe(t,e){return function(){var r=e.apply(this,arguments);if(typeof r!="function")throw new Error;ca(this,t).ease=r}}function A_(t){if(typeof t!="function")throw new Error;return this.each(NSe(this._id,t))}var kW=M(()=>{"use strict";Ds();o(NSe,"easeVarying");o(A_,"default")});function __(t){typeof t!="function"&&(t=N0(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i{"use strict";yl();Cd();o(__,"default")});function D_(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,r=t._groups,n=e.length,i=r.length,a=Math.min(n,i),s=new Array(n),l=0;l{"use strict";Cd();o(D_,"default")});function MSe(t){return(t+"").trim().split(/^|\s+/).every(function(e){var r=e.indexOf(".");return r>=0&&(e=e.slice(0,r)),!e||e==="start"})}function ISe(t,e,r){var n,i,a=MSe(e)?Av:ca;return function(){var s=a(this,t),l=s.on;l!==n&&(i=(n=l).copy()).on(e,r),s.on=i}}function L_(t,e){var r=this._id;return arguments.length<2?Oi(this.node(),r).on.on(t):this.each(ISe(r,t,e))}var CW=M(()=>{"use strict";Ds();o(MSe,"start");o(ISe,"onFunction");o(L_,"default")});function OSe(t){return function(){var e=this.parentNode;for(var r in this.__transition)if(+r!==t)return;e&&e.removeChild(this)}}function R_(){return this.on("end.remove",OSe(this._id))}var AW=M(()=>{"use strict";o(OSe,"removeFunction");o(R_,"default")});function N_(t){var e=this._name,r=this._id;typeof t!="function"&&(t=Ah(t));for(var n=this._groups,i=n.length,a=new Array(i),s=0;s{"use strict";yl();Cd();Ds();o(N_,"default")});function M_(t){var e=this._name,r=this._id;typeof t!="function"&&(t=R0(t));for(var n=this._groups,i=n.length,a=[],s=[],l=0;l{"use strict";yl();Cd();Ds();o(M_,"default")});function I_(){return new PSe(this._groups,this._parents)}var PSe,LW=M(()=>{"use strict";yl();PSe=yu.prototype.constructor;o(I_,"default")});function BSe(t,e){var r,n,i;return function(){var a=_h(this,t),s=(this.style.removeProperty(t),_h(this,t));return a===s?null:a===r&&s===n?i:i=e(r=a,n=s)}}function RW(t){return function(){this.style.removeProperty(t)}}function FSe(t,e,r){var n,i=r+"",a;return function(){var s=_h(this,t);return s===i?null:s===n?a:a=e(n=s,r)}}function $Se(t,e,r){var n,i,a;return function(){var s=_h(this,t),l=r(this),u=l+"";return l==null&&(u=l=(this.style.removeProperty(t),_h(this,t))),s===u?null:s===n&&u===i?a:(i=u,a=e(n=s,l))}}function zSe(t,e){var r,n,i,a="style."+e,s="end."+a,l;return function(){var u=ca(this,t),h=u.on,f=u.value[a]==null?l||(l=RW(e)):void 0;(h!==r||i!==f)&&(n=(r=h).copy()).on(s,i=f),u.on=n}}function O_(t,e,r){var n=(t+="")=="transform"?p_:Lv;return e==null?this.styleTween(t,BSe(t,n)).on("end.style."+t,RW(t)):typeof e=="function"?this.styleTween(t,$Se(t,n,V0(this,"style."+t,e))).each(zSe(this._id,t)):this.styleTween(t,FSe(t,n,e),r).on("end.style."+t,null)}var NW=M(()=>{"use strict";z0();yl();Ds();Dv();T_();o(BSe,"styleNull");o(RW,"styleRemove");o(FSe,"styleConstant");o($Se,"styleFunction");o(zSe,"styleMaybeRemove");o(O_,"default")});function GSe(t,e,r){return function(n){this.style.setProperty(t,e.call(this,n),r)}}function VSe(t,e,r){var n,i;function a(){var s=e.apply(this,arguments);return s!==i&&(n=(i=s)&&GSe(t,s,r)),n}return o(a,"tween"),a._value=e,a}function P_(t,e,r){var n="style."+(t+="");if(arguments.length<2)return(n=this.tween(n))&&n._value;if(e==null)return this.tween(n,null);if(typeof e!="function")throw new Error;return this.tween(n,VSe(t,e,r??""))}var MW=M(()=>{"use strict";o(GSe,"styleInterpolate");o(VSe,"styleTween");o(P_,"default")});function USe(t){return function(){this.textContent=t}}function HSe(t){return function(){var e=t(this);this.textContent=e??""}}function B_(t){return this.tween("text",typeof t=="function"?HSe(V0(this,"text",t)):USe(t==null?"":t+""))}var IW=M(()=>{"use strict";Dv();o(USe,"textConstant");o(HSe,"textFunction");o(B_,"default")});function qSe(t){return function(e){this.textContent=t.call(this,e)}}function WSe(t){var e,r;function n(){var i=t.apply(this,arguments);return i!==r&&(e=(r=i)&&qSe(i)),e}return o(n,"tween"),n._value=t,n}function F_(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(t==null)return this.tween(e,null);if(typeof t!="function")throw new Error;return this.tween(e,WSe(t))}var OW=M(()=>{"use strict";o(qSe,"textInterpolate");o(WSe,"textTween");o(F_,"default")});function $_(){for(var t=this._name,e=this._id,r=T5(),n=this._groups,i=n.length,a=0;a{"use strict";Cd();Ds();o($_,"default")});function z_(){var t,e,r=this,n=r._id,i=r.size();return new Promise(function(a,s){var l={value:s},u={value:o(function(){--i===0&&a()},"value")};r.each(function(){var h=ca(this,n),f=h.on;f!==t&&(e=(t=f).copy(),e._.cancel.push(l),e._.interrupt.push(l),e._.end.push(u)),h.on=e}),i===0&&a()})}var BW=M(()=>{"use strict";Ds();o(z_,"default")});function is(t,e,r,n){this._groups=t,this._parents=e,this._name=r,this._id=n}function FW(t){return yu().transition(t)}function T5(){return++YSe}var YSe,Tu,Cd=M(()=>{"use strict";yl();vW();xW();bW();TW();wW();kW();EW();SW();CW();AW();_W();DW();LW();NW();MW();IW();OW();PW();Dv();BW();YSe=0;o(is,"Transition");o(FW,"transition");o(T5,"newId");Tu=yu.prototype;is.prototype=FW.prototype={constructor:is,select:N_,selectAll:M_,selectChild:Tu.selectChild,selectChildren:Tu.selectChildren,filter:__,merge:D_,selection:I_,transition:$_,call:Tu.call,nodes:Tu.nodes,node:Tu.node,size:Tu.size,empty:Tu.empty,each:Tu.each,on:L_,attr:w_,attrTween:k_,style:O_,styleTween:P_,text:B_,textTween:F_,remove:R_,tween:b_,delay:E_,duration:S_,ease:C_,easeVarying:A_,end:z_,[Symbol.iterator]:Tu[Symbol.iterator]}});function w5(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}var $W=M(()=>{"use strict";o(w5,"cubicInOut")});var G_=M(()=>{"use strict";$W()});function jSe(t,e){for(var r;!(r=t.__transition)||!(r=r[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return r}function V_(t){var e,r;t instanceof is?(e=t._id,t=t._name):(e=T5(),(r=XSe).time=Ev(),t=t==null?null:t+"");for(var n=this._groups,i=n.length,a=0;a{"use strict";Cd();Ds();G_();y5();XSe={time:null,delay:0,duration:250,ease:w5};o(jSe,"inherit");o(V_,"default")});var GW=M(()=>{"use strict";yl();yW();zW();yu.prototype.interrupt=x_;yu.prototype.transition=V_});var k5=M(()=>{"use strict";GW()});var VW=M(()=>{"use strict"});var UW=M(()=>{"use strict"});var HW=M(()=>{"use strict"});function qW(t){return[+t[0],+t[1]]}function KSe(t){return[qW(t[0]),qW(t[1])]}function U_(t){return{type:t}}var p1t,m1t,g1t,y1t,v1t,x1t,WW=M(()=>{"use strict";k5();VW();UW();HW();({abs:p1t,max:m1t,min:g1t}=Math);o(qW,"number1");o(KSe,"number2");y1t={name:"x",handles:["w","e"].map(U_),input:o(function(t,e){return t==null?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},"input"),output:o(function(t){return t&&[t[0][0],t[1][0]]},"output")},v1t={name:"y",handles:["n","s"].map(U_),input:o(function(t,e){return t==null?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},"input"),output:o(function(t){return t&&[t[0][1],t[1][1]]},"output")},x1t={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(U_),input:o(function(t){return t==null?null:KSe(t)},"input"),output:o(function(t){return t},"output")};o(U_,"type")});var YW=M(()=>{"use strict";WW()});function XW(t){this._+=t[0];for(let e=1,r=t.length;e=0))throw new Error(`invalid digits: ${t}`);if(e>15)return XW;let r=10**e;return function(n){this._+=n[0];for(let i=1,a=n.length;i{"use strict";H_=Math.PI,q_=2*H_,Ad=1e-6,QSe=q_-Ad;o(XW,"append");o(ZSe,"appendRound");_d=class{static{o(this,"Path")}constructor(e){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=e==null?XW:ZSe(e)}moveTo(e,r){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(e,r){this._append`L${this._x1=+e},${this._y1=+r}`}quadraticCurveTo(e,r,n,i){this._append`Q${+e},${+r},${this._x1=+n},${this._y1=+i}`}bezierCurveTo(e,r,n,i,a,s){this._append`C${+e},${+r},${+n},${+i},${this._x1=+a},${this._y1=+s}`}arcTo(e,r,n,i,a){if(e=+e,r=+r,n=+n,i=+i,a=+a,a<0)throw new Error(`negative radius: ${a}`);let s=this._x1,l=this._y1,u=n-e,h=i-r,f=s-e,d=l-r,p=f*f+d*d;if(this._x1===null)this._append`M${this._x1=e},${this._y1=r}`;else if(p>Ad)if(!(Math.abs(d*u-h*f)>Ad)||!a)this._append`L${this._x1=e},${this._y1=r}`;else{let m=n-s,g=i-l,y=u*u+h*h,v=m*m+g*g,x=Math.sqrt(y),b=Math.sqrt(p),T=a*Math.tan((H_-Math.acos((y+p-v)/(2*x*b)))/2),S=T/b,w=T/x;Math.abs(S-1)>Ad&&this._append`L${e+S*f},${r+S*d}`,this._append`A${a},${a},0,0,${+(d*m>f*g)},${this._x1=e+w*u},${this._y1=r+w*h}`}}arc(e,r,n,i,a,s){if(e=+e,r=+r,n=+n,s=!!s,n<0)throw new Error(`negative radius: ${n}`);let l=n*Math.cos(i),u=n*Math.sin(i),h=e+l,f=r+u,d=1^s,p=s?i-a:a-i;this._x1===null?this._append`M${h},${f}`:(Math.abs(this._x1-h)>Ad||Math.abs(this._y1-f)>Ad)&&this._append`L${h},${f}`,n&&(p<0&&(p=p%q_+q_),p>QSe?this._append`A${n},${n},0,1,${d},${e-l},${r-u}A${n},${n},0,1,${d},${this._x1=h},${this._y1=f}`:p>Ad&&this._append`A${n},${n},0,${+(p>=H_)},${d},${this._x1=e+n*Math.cos(a)},${this._y1=r+n*Math.sin(a)}`)}rect(e,r,n,i){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}};o(jW,"path");jW.prototype=_d.prototype});var W_=M(()=>{"use strict";KW()});var QW=M(()=>{"use strict"});var ZW=M(()=>{"use strict"});var JW=M(()=>{"use strict"});var eY=M(()=>{"use strict"});var tY=M(()=>{"use strict"});var rY=M(()=>{"use strict"});var nY=M(()=>{"use strict"});function Y_(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function Dd(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,n=t.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+t.slice(r+1)]}var Rv=M(()=>{"use strict";o(Y_,"default");o(Dd,"formatDecimalParts")});function bl(t){return t=Dd(Math.abs(t)),t?t[1]:NaN}var Nv=M(()=>{"use strict";Rv();o(bl,"default")});function X_(t,e){return function(r,n){for(var i=r.length,a=[],s=0,l=t[0],u=0;i>0&&l>0&&(u+l+1>n&&(l=Math.max(1,n-u)),a.push(r.substring(i-=l,i+l)),!((u+=l+1)>n));)l=t[s=(s+1)%t.length];return a.reverse().join(e)}}var iY=M(()=>{"use strict";o(X_,"default")});function j_(t){return function(e){return e.replace(/[0-9]/g,function(r){return t[+r]})}}var aY=M(()=>{"use strict";o(j_,"default")});function Nh(t){if(!(e=JSe.exec(t)))throw new Error("invalid format: "+t);var e;return new E5({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function E5(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}var JSe,K_=M(()=>{"use strict";JSe=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;o(Nh,"formatSpecifier");Nh.prototype=E5.prototype;o(E5,"FormatSpecifier");E5.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type}});function Q_(t){e:for(var e=t.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?t.slice(0,n)+t.slice(i+1):t}var sY=M(()=>{"use strict";o(Q_,"default")});function J_(t,e){var r=Dd(t,e);if(!r)return t+"";var n=r[0],i=r[1],a=i-(Z_=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,s=n.length;return a===s?n:a>s?n+new Array(a-s+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+Dd(t,Math.max(0,e+a-1))[0]}var Z_,eD=M(()=>{"use strict";Rv();o(J_,"default")});function S5(t,e){var r=Dd(t,e);if(!r)return t+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}var oY=M(()=>{"use strict";Rv();o(S5,"default")});var tD,lY=M(()=>{"use strict";Rv();eD();oY();tD={"%":o((t,e)=>(t*100).toFixed(e),"%"),b:o(t=>Math.round(t).toString(2),"b"),c:o(t=>t+"","c"),d:Y_,e:o((t,e)=>t.toExponential(e),"e"),f:o((t,e)=>t.toFixed(e),"f"),g:o((t,e)=>t.toPrecision(e),"g"),o:o(t=>Math.round(t).toString(8),"o"),p:o((t,e)=>S5(t*100,e),"p"),r:S5,s:J_,X:o(t=>Math.round(t).toString(16).toUpperCase(),"X"),x:o(t=>Math.round(t).toString(16),"x")}});function C5(t){return t}var cY=M(()=>{"use strict";o(C5,"default")});function rD(t){var e=t.grouping===void 0||t.thousands===void 0?C5:X_(uY.call(t.grouping,Number),t.thousands+""),r=t.currency===void 0?"":t.currency[0]+"",n=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",a=t.numerals===void 0?C5:j_(uY.call(t.numerals,String)),s=t.percent===void 0?"%":t.percent+"",l=t.minus===void 0?"\u2212":t.minus+"",u=t.nan===void 0?"NaN":t.nan+"";function h(d){d=Nh(d);var p=d.fill,m=d.align,g=d.sign,y=d.symbol,v=d.zero,x=d.width,b=d.comma,T=d.precision,S=d.trim,w=d.type;w==="n"?(b=!0,w="g"):tD[w]||(T===void 0&&(T=12),S=!0,w="g"),(v||p==="0"&&m==="=")&&(v=!0,p="0",m="=");var k=y==="$"?r:y==="#"&&/[boxX]/.test(w)?"0"+w.toLowerCase():"",C=y==="$"?n:/[%p]/.test(w)?s:"",A=tD[w],L=/[defgprs%]/.test(w);T=T===void 0?6:/[gprs]/.test(w)?Math.max(1,Math.min(21,T)):Math.max(0,Math.min(20,T));function I(R){var E=k,_=C,D,O,N;if(w==="c")_=A(R)+_,R="";else{R=+R;var P=R<0||1/R<0;if(R=isNaN(R)?u:A(Math.abs(R),T),S&&(R=Q_(R)),P&&+R==0&&g!=="+"&&(P=!1),E=(P?g==="("?g:l:g==="-"||g==="("?"":g)+E,_=(w==="s"?hY[8+Z_/3]:"")+_+(P&&g==="("?")":""),L){for(D=-1,O=R.length;++DN||N>57){_=(N===46?i+R.slice(D+1):R.slice(D))+_,R=R.slice(0,D);break}}}b&&!v&&(R=e(R,1/0));var B=E.length+R.length+_.length,F=B>1)+E+R+_+F.slice(B);break;default:R=F+E+R+_;break}return a(R)}return o(I,"format"),I.toString=function(){return d+""},I}o(h,"newFormat");function f(d,p){var m=h((d=Nh(d),d.type="f",d)),g=Math.max(-8,Math.min(8,Math.floor(bl(p)/3)))*3,y=Math.pow(10,-g),v=hY[8+g/3];return function(x){return m(y*x)+v}}return o(f,"formatPrefix"),{format:h,formatPrefix:f}}var uY,hY,fY=M(()=>{"use strict";Nv();iY();aY();K_();sY();lY();eD();cY();uY=Array.prototype.map,hY=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];o(rD,"default")});function nD(t){return A5=rD(t),cc=A5.format,_5=A5.formatPrefix,A5}var A5,cc,_5,dY=M(()=>{"use strict";fY();nD({thousands:",",grouping:[3],currency:["$",""]});o(nD,"defaultLocale")});function D5(t){return Math.max(0,-bl(Math.abs(t)))}var pY=M(()=>{"use strict";Nv();o(D5,"default")});function L5(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(bl(e)/3)))*3-bl(Math.abs(t)))}var mY=M(()=>{"use strict";Nv();o(L5,"default")});function R5(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,bl(e)-bl(t))+1}var gY=M(()=>{"use strict";Nv();o(R5,"default")});var iD=M(()=>{"use strict";dY();K_();pY();mY();gY()});var yY=M(()=>{"use strict"});function e6e(t){var e=0,r=t.children,n=r&&r.length;if(!n)e=1;else for(;--n>=0;)e+=r[n].value;t.value=e}function aD(){return this.eachAfter(e6e)}var vY=M(()=>{"use strict";o(e6e,"count");o(aD,"default")});function sD(t,e){let r=-1;for(let n of this)t.call(e,n,++r,this);return this}var xY=M(()=>{"use strict";o(sD,"default")});function oD(t,e){for(var r=this,n=[r],i,a,s=-1;r=n.pop();)if(t.call(e,r,++s,this),i=r.children)for(a=i.length-1;a>=0;--a)n.push(i[a]);return this}var bY=M(()=>{"use strict";o(oD,"default")});function lD(t,e){for(var r=this,n=[r],i=[],a,s,l,u=-1;r=n.pop();)if(i.push(r),a=r.children)for(s=0,l=a.length;s{"use strict";o(lD,"default")});function cD(t,e){let r=-1;for(let n of this)if(t.call(e,n,++r,this))return n}var wY=M(()=>{"use strict";o(cD,"default")});function uD(t){return this.eachAfter(function(e){for(var r=+t(e.data)||0,n=e.children,i=n&&n.length;--i>=0;)r+=n[i].value;e.value=r})}var kY=M(()=>{"use strict";o(uD,"default")});function hD(t){return this.eachBefore(function(e){e.children&&e.children.sort(t)})}var EY=M(()=>{"use strict";o(hD,"default")});function fD(t){for(var e=this,r=t6e(e,t),n=[e];e!==r;)e=e.parent,n.push(e);for(var i=n.length;t!==r;)n.splice(i,0,t),t=t.parent;return n}function t6e(t,e){if(t===e)return t;var r=t.ancestors(),n=e.ancestors(),i=null;for(t=r.pop(),e=n.pop();t===e;)i=t,t=r.pop(),e=n.pop();return i}var SY=M(()=>{"use strict";o(fD,"default");o(t6e,"leastCommonAncestor")});function dD(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e}var CY=M(()=>{"use strict";o(dD,"default")});function pD(){return Array.from(this)}var AY=M(()=>{"use strict";o(pD,"default")});function mD(){var t=[];return this.eachBefore(function(e){e.children||t.push(e)}),t}var _Y=M(()=>{"use strict";o(mD,"default")});function gD(){var t=this,e=[];return t.each(function(r){r!==t&&e.push({source:r.parent,target:r})}),e}var DY=M(()=>{"use strict";o(gD,"default")});function*yD(){var t=this,e,r=[t],n,i,a;do for(e=r.reverse(),r=[];t=e.pop();)if(yield t,n=t.children)for(i=0,a=n.length;i{"use strict";o(yD,"default")});function U0(t,e){t instanceof Map?(t=[void 0,t],e===void 0&&(e=i6e)):e===void 0&&(e=n6e);for(var r=new Mv(t),n,i=[r],a,s,l,u;n=i.pop();)if((s=e(n.data))&&(u=(s=Array.from(s)).length))for(n.children=s,l=u-1;l>=0;--l)i.push(a=s[l]=new Mv(s[l])),a.parent=n,a.depth=n.depth+1;return r.eachBefore(s6e)}function r6e(){return U0(this).eachBefore(a6e)}function n6e(t){return t.children}function i6e(t){return Array.isArray(t)?t[1]:null}function a6e(t){t.data.value!==void 0&&(t.value=t.data.value),t.data=t.data.data}function s6e(t){var e=0;do t.height=e;while((t=t.parent)&&t.height<++e)}function Mv(t){this.data=t,this.depth=this.height=0,this.parent=null}var RY=M(()=>{"use strict";vY();xY();bY();TY();wY();kY();EY();SY();CY();AY();_Y();DY();LY();o(U0,"hierarchy");o(r6e,"node_copy");o(n6e,"objectChildren");o(i6e,"mapChildren");o(a6e,"copyData");o(s6e,"computeHeight");o(Mv,"Node");Mv.prototype=U0.prototype={constructor:Mv,count:aD,each:sD,eachAfter:lD,eachBefore:oD,find:cD,sum:uD,sort:hD,path:fD,ancestors:dD,descendants:pD,leaves:mD,links:gD,copy:r6e,[Symbol.iterator]:yD}});function NY(t){if(typeof t!="function")throw new Error;return t}var MY=M(()=>{"use strict";o(NY,"required")});function H0(){return 0}function Ld(t){return function(){return t}}var IY=M(()=>{"use strict";o(H0,"constantZero");o(Ld,"default")});function vD(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}var OY=M(()=>{"use strict";o(vD,"default")});function xD(t,e,r,n,i){for(var a=t.children,s,l=-1,u=a.length,h=t.value&&(n-e)/t.value;++l{"use strict";o(xD,"default")});function bD(t,e,r,n,i){for(var a=t.children,s,l=-1,u=a.length,h=t.value&&(i-r)/t.value;++l{"use strict";o(bD,"default")});function l6e(t,e,r,n,i,a){for(var s=[],l=e.children,u,h,f=0,d=0,p=l.length,m,g,y=e.value,v,x,b,T,S,w,k;fb&&(b=h),k=v*v*w,T=Math.max(b/k,k/x),T>S){v-=h;break}S=T}s.push(u={value:v,dice:m{"use strict";PY();BY();o6e=(1+Math.sqrt(5))/2;o(l6e,"squarifyRatio");FY=o((function t(e){function r(n,i,a,s,l){l6e(e,n,i,a,s,l)}return o(r,"squarify"),r.ratio=function(n){return t((n=+n)>1?n:1)},r}),"custom")(o6e)});function N5(){var t=FY,e=!1,r=1,n=1,i=[0],a=H0,s=H0,l=H0,u=H0,h=H0;function f(p){return p.x0=p.y0=0,p.x1=r,p.y1=n,p.eachBefore(d),i=[0],e&&p.eachBefore(vD),p}o(f,"treemap");function d(p){var m=i[p.depth],g=p.x0+m,y=p.y0+m,v=p.x1-m,x=p.y1-m;v{"use strict";OY();$Y();MY();IY();o(N5,"default")});var GY=M(()=>{"use strict";RY();zY()});var VY=M(()=>{"use strict"});var UY=M(()=>{"use strict"});function Mh(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}var Iv=M(()=>{"use strict";o(Mh,"initRange")});function no(){var t=new D0,e=[],r=[],n=TD;function i(a){let s=t.get(a);if(s===void 0){if(n!==TD)return n;t.set(a,s=e.push(a)-1)}return r[s%r.length]}return o(i,"scale"),i.domain=function(a){if(!arguments.length)return e.slice();e=[],t=new D0;for(let s of a)t.has(s)||t.set(s,e.push(s)-1);return i},i.range=function(a){return arguments.length?(r=Array.from(a),i):r.slice()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return no(e,r).unknown(n)},Mh.apply(i,arguments),i}var TD,wD=M(()=>{"use strict";Ch();Iv();TD=Symbol("implicit");o(no,"ordinal")});function q0(){var t=no().unknown(void 0),e=t.domain,r=t.range,n=0,i=1,a,s,l=!1,u=0,h=0,f=.5;delete t.unknown;function d(){var p=e().length,m=i{"use strict";Ch();Iv();wD();o(q0,"band")});function kD(t){return function(){return t}}var qY=M(()=>{"use strict";o(kD,"constants")});function ED(t){return+t}var WY=M(()=>{"use strict";o(ED,"number")});function W0(t){return t}function SD(t,e){return(e-=t=+t)?function(r){return(r-t)/e}:kD(isNaN(e)?NaN:.5)}function c6e(t,e){var r;return t>e&&(r=t,t=e,e=r),function(n){return Math.max(t,Math.min(e,n))}}function u6e(t,e,r){var n=t[0],i=t[1],a=e[0],s=e[1];return i2?h6e:u6e,u=h=null,d}o(f,"rescale");function d(p){return p==null||isNaN(p=+p)?a:(u||(u=l(t.map(n),e,r)))(n(s(p)))}return o(d,"scale"),d.invert=function(p){return s(i((h||(h=l(e,t.map(n),Wi)))(p)))},d.domain=function(p){return arguments.length?(t=Array.from(p,ED),f()):t.slice()},d.range=function(p){return arguments.length?(e=Array.from(p),f()):e.slice()},d.rangeRound=function(p){return e=Array.from(p),r=c5,f()},d.clamp=function(p){return arguments.length?(s=p?!0:W0,f()):s!==W0},d.interpolate=function(p){return arguments.length?(r=p,f()):r},d.unknown=function(p){return arguments.length?(a=p,d):a},function(p,m){return n=p,i=m,f()}}function Ov(){return f6e()(W0,W0)}var YY,CD=M(()=>{"use strict";Ch();z0();qY();WY();YY=[0,1];o(W0,"identity");o(SD,"normalize");o(c6e,"clamper");o(u6e,"bimap");o(h6e,"polymap");o(M5,"copy");o(f6e,"transformer");o(Ov,"continuous")});function AD(t,e,r,n){var i=L0(t,e,r),a;switch(n=Nh(n??",f"),n.type){case"s":{var s=Math.max(Math.abs(t),Math.abs(e));return n.precision==null&&!isNaN(a=L5(i,s))&&(n.precision=a),_5(n,s)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=R5(i,Math.max(Math.abs(t),Math.abs(e))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=D5(i))&&(n.precision=a-(n.type==="%")*2);break}}return cc(n)}var XY=M(()=>{"use strict";Ch();iD();o(AD,"tickFormat")});function d6e(t){var e=t.domain;return t.ticks=function(r){var n=e();return W3(n[0],n[n.length-1],r??10)},t.tickFormat=function(r,n){var i=e();return AD(i[0],i[i.length-1],r??10,n)},t.nice=function(r){r==null&&(r=10);var n=e(),i=0,a=n.length-1,s=n[i],l=n[a],u,h,f=10;for(l0;){if(h=cv(s,l,r),h===u)return n[i]=s,n[a]=l,e(n);if(h>0)s=Math.floor(s/h)*h,l=Math.ceil(l/h)*h;else if(h<0)s=Math.ceil(s*h)/h,l=Math.floor(l*h)/h;else break;u=h}return t},t}function Tl(){var t=Ov();return t.copy=function(){return M5(t,Tl())},Mh.apply(t,arguments),d6e(t)}var jY=M(()=>{"use strict";Ch();CD();Iv();XY();o(d6e,"linearish");o(Tl,"linear")});function _D(t,e){t=t.slice();var r=0,n=t.length-1,i=t[r],a=t[n],s;return a{"use strict";o(_D,"nice")});function En(t,e,r,n){function i(a){return t(a=arguments.length===0?new Date:new Date(+a)),a}return o(i,"interval"),i.floor=a=>(t(a=new Date(+a)),a),i.ceil=a=>(t(a=new Date(a-1)),e(a,1),t(a),a),i.round=a=>{let s=i(a),l=i.ceil(a);return a-s(e(a=new Date(+a),s==null?1:Math.floor(s)),a),i.range=(a,s,l)=>{let u=[];if(a=i.ceil(a),l=l==null?1:Math.floor(l),!(a0))return u;let h;do u.push(h=new Date(+a)),e(a,l),t(a);while(hEn(s=>{if(s>=s)for(;t(s),!a(s);)s.setTime(s-1)},(s,l)=>{if(s>=s)if(l<0)for(;++l<=0;)for(;e(s,-1),!a(s););else for(;--l>=0;)for(;e(s,1),!a(s););}),r&&(i.count=(a,s)=>(DD.setTime(+a),LD.setTime(+s),t(DD),t(LD),Math.floor(r(DD,LD))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?s=>n(s)%a===0:s=>i.count(0,s)%a===0):i)),i}var DD,LD,wu=M(()=>{"use strict";DD=new Date,LD=new Date;o(En,"timeInterval")});var uc,QY,RD=M(()=>{"use strict";wu();uc=En(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);uc.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?En(e=>{e.setTime(Math.floor(e/t)*t)},(e,r)=>{e.setTime(+e+r*t)},(e,r)=>(r-e)/t):uc);QY=uc.range});var io,ZY,ND=M(()=>{"use strict";wu();io=En(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*1e3)},(t,e)=>(e-t)/1e3,t=>t.getUTCSeconds()),ZY=io.range});var ku,p6e,I5,m6e,MD=M(()=>{"use strict";wu();ku=En(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getMinutes()),p6e=ku.range,I5=En(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*6e4)},(t,e)=>(e-t)/6e4,t=>t.getUTCMinutes()),m6e=I5.range});var Eu,g6e,O5,y6e,ID=M(()=>{"use strict";wu();Eu=En(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*1e3-t.getMinutes()*6e4)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getHours()),g6e=Eu.range,O5=En(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*36e5)},(t,e)=>(e-t)/36e5,t=>t.getUTCHours()),y6e=O5.range});var Ro,v6e,Bv,x6e,P5,b6e,OD=M(()=>{"use strict";wu();Ro=En(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5,t=>t.getDate()-1),v6e=Ro.range,Bv=En(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>t.getUTCDate()-1),x6e=Bv.range,P5=En(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>Math.floor(t/864e5)),b6e=P5.range});function Md(t){return En(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,r)=>{e.setDate(e.getDate()+r*7)},(e,r)=>(r-e-(r.getTimezoneOffset()-e.getTimezoneOffset())*6e4)/6048e5)}function Id(t){return En(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCDate(e.getUTCDate()+r*7)},(e,r)=>(r-e)/6048e5)}var wl,Ih,B5,F5,fc,$5,z5,eX,T6e,w6e,k6e,E6e,S6e,C6e,Od,Y0,tX,rX,Oh,nX,iX,aX,A6e,_6e,D6e,L6e,R6e,N6e,PD=M(()=>{"use strict";wu();o(Md,"timeWeekday");wl=Md(0),Ih=Md(1),B5=Md(2),F5=Md(3),fc=Md(4),$5=Md(5),z5=Md(6),eX=wl.range,T6e=Ih.range,w6e=B5.range,k6e=F5.range,E6e=fc.range,S6e=$5.range,C6e=z5.range;o(Id,"utcWeekday");Od=Id(0),Y0=Id(1),tX=Id(2),rX=Id(3),Oh=Id(4),nX=Id(5),iX=Id(6),aX=Od.range,A6e=Y0.range,_6e=tX.range,D6e=rX.range,L6e=Oh.range,R6e=nX.range,N6e=iX.range});var Su,M6e,G5,I6e,BD=M(()=>{"use strict";wu();Su=En(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth()),M6e=Su.range,G5=En(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth()),I6e=G5.range});var ao,O6e,kl,P6e,FD=M(()=>{"use strict";wu();ao=En(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());ao.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:En(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,r)=>{e.setFullYear(e.getFullYear()+r*t)});O6e=ao.range,kl=En(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());kl.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:En(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCFullYear(e.getUTCFullYear()+r*t)});P6e=kl.range});function oX(t,e,r,n,i,a){let s=[[io,1,1e3],[io,5,5*1e3],[io,15,15*1e3],[io,30,30*1e3],[a,1,6e4],[a,5,5*6e4],[a,15,15*6e4],[a,30,30*6e4],[i,1,36e5],[i,3,3*36e5],[i,6,6*36e5],[i,12,12*36e5],[n,1,864e5],[n,2,2*864e5],[r,1,6048e5],[e,1,2592e6],[e,3,3*2592e6],[t,1,31536e6]];function l(h,f,d){let p=fv).right(s,p);if(m===s.length)return t.every(L0(h/31536e6,f/31536e6,d));if(m===0)return uc.every(Math.max(L0(h,f,d),1));let[g,y]=s[p/s[m-1][2]{"use strict";Ch();RD();ND();MD();ID();OD();PD();BD();FD();o(oX,"ticker");[F6e,$6e]=oX(kl,G5,Od,P5,O5,I5),[$D,zD]=oX(ao,Su,wl,Ro,Eu,ku)});var V5=M(()=>{"use strict";RD();ND();MD();ID();OD();PD();BD();FD();lX()});function GD(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function VD(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Fv(t,e,r){return{y:t,m:e,d:r,H:0,M:0,S:0,L:0}}function UD(t){var e=t.dateTime,r=t.date,n=t.time,i=t.periods,a=t.days,s=t.shortDays,l=t.months,u=t.shortMonths,h=$v(i),f=zv(i),d=$v(a),p=zv(a),m=$v(s),g=zv(s),y=$v(l),v=zv(l),x=$v(u),b=zv(u),T={a:P,A:B,b:F,B:V,c:null,d:pX,e:pX,f:lCe,g:vCe,G:bCe,H:aCe,I:sCe,j:oCe,L:xX,m:cCe,M:uCe,p:$,q:U,Q:yX,s:vX,S:hCe,u:fCe,U:dCe,V:pCe,w:mCe,W:gCe,x:null,X:null,y:yCe,Y:xCe,Z:TCe,"%":gX},S={a:j,A:ee,b:q,B:oe,c:null,d:mX,e:mX,f:SCe,g:OCe,G:BCe,H:wCe,I:kCe,j:ECe,L:TX,m:CCe,M:ACe,p:Q,q:ue,Q:yX,s:vX,S:_Ce,u:DCe,U:LCe,V:RCe,w:NCe,W:MCe,x:null,X:null,y:ICe,Y:PCe,Z:FCe,"%":gX},w={a:I,A:R,b:E,B:_,c:D,d:fX,e:fX,f:tCe,g:hX,G:uX,H:dX,I:dX,j:Q6e,L:eCe,m:K6e,M:Z6e,p:L,q:j6e,Q:nCe,s:iCe,S:J6e,u:H6e,U:q6e,V:W6e,w:U6e,W:Y6e,x:O,X:N,y:hX,Y:uX,Z:X6e,"%":rCe};T.x=k(r,T),T.X=k(n,T),T.c=k(e,T),S.x=k(r,S),S.X=k(n,S),S.c=k(e,S);function k(te,re){return function(J){var K=[],ae=-1,Z=0,de=te.length,ne,Te,W;for(J instanceof Date||(J=new Date(+J));++ae53)return null;"w"in K||(K.w=1),"Z"in K?(Z=VD(Fv(K.y,0,1)),de=Z.getUTCDay(),Z=de>4||de===0?Y0.ceil(Z):Y0(Z),Z=Bv.offset(Z,(K.V-1)*7),K.y=Z.getUTCFullYear(),K.m=Z.getUTCMonth(),K.d=Z.getUTCDate()+(K.w+6)%7):(Z=GD(Fv(K.y,0,1)),de=Z.getDay(),Z=de>4||de===0?Ih.ceil(Z):Ih(Z),Z=Ro.offset(Z,(K.V-1)*7),K.y=Z.getFullYear(),K.m=Z.getMonth(),K.d=Z.getDate()+(K.w+6)%7)}else("W"in K||"U"in K)&&("w"in K||(K.w="u"in K?K.u%7:"W"in K?1:0),de="Z"in K?VD(Fv(K.y,0,1)).getUTCDay():GD(Fv(K.y,0,1)).getDay(),K.m=0,K.d="W"in K?(K.w+6)%7+K.W*7-(de+5)%7:K.w+K.U*7-(de+6)%7);return"Z"in K?(K.H+=K.Z/100|0,K.M+=K.Z%100,VD(K)):GD(K)}}o(C,"newParse");function A(te,re,J,K){for(var ae=0,Z=re.length,de=J.length,ne,Te;ae=de)return-1;if(ne=re.charCodeAt(ae++),ne===37){if(ne=re.charAt(ae++),Te=w[ne in cX?re.charAt(ae++):ne],!Te||(K=Te(te,J,K))<0)return-1}else if(ne!=J.charCodeAt(K++))return-1}return K}o(A,"parseSpecifier");function L(te,re,J){var K=h.exec(re.slice(J));return K?(te.p=f.get(K[0].toLowerCase()),J+K[0].length):-1}o(L,"parsePeriod");function I(te,re,J){var K=m.exec(re.slice(J));return K?(te.w=g.get(K[0].toLowerCase()),J+K[0].length):-1}o(I,"parseShortWeekday");function R(te,re,J){var K=d.exec(re.slice(J));return K?(te.w=p.get(K[0].toLowerCase()),J+K[0].length):-1}o(R,"parseWeekday");function E(te,re,J){var K=x.exec(re.slice(J));return K?(te.m=b.get(K[0].toLowerCase()),J+K[0].length):-1}o(E,"parseShortMonth");function _(te,re,J){var K=y.exec(re.slice(J));return K?(te.m=v.get(K[0].toLowerCase()),J+K[0].length):-1}o(_,"parseMonth");function D(te,re,J){return A(te,e,re,J)}o(D,"parseLocaleDateTime");function O(te,re,J){return A(te,r,re,J)}o(O,"parseLocaleDate");function N(te,re,J){return A(te,n,re,J)}o(N,"parseLocaleTime");function P(te){return s[te.getDay()]}o(P,"formatShortWeekday");function B(te){return a[te.getDay()]}o(B,"formatWeekday");function F(te){return u[te.getMonth()]}o(F,"formatShortMonth");function V(te){return l[te.getMonth()]}o(V,"formatMonth");function $(te){return i[+(te.getHours()>=12)]}o($,"formatPeriod");function U(te){return 1+~~(te.getMonth()/3)}o(U,"formatQuarter");function j(te){return s[te.getUTCDay()]}o(j,"formatUTCShortWeekday");function ee(te){return a[te.getUTCDay()]}o(ee,"formatUTCWeekday");function q(te){return u[te.getUTCMonth()]}o(q,"formatUTCShortMonth");function oe(te){return l[te.getUTCMonth()]}o(oe,"formatUTCMonth");function Q(te){return i[+(te.getUTCHours()>=12)]}o(Q,"formatUTCPeriod");function ue(te){return 1+~~(te.getUTCMonth()/3)}return o(ue,"formatUTCQuarter"),{format:o(function(te){var re=k(te+="",T);return re.toString=function(){return te},re},"format"),parse:o(function(te){var re=C(te+="",!1);return re.toString=function(){return te},re},"parse"),utcFormat:o(function(te){var re=k(te+="",S);return re.toString=function(){return te},re},"utcFormat"),utcParse:o(function(te){var re=C(te+="",!0);return re.toString=function(){return te},re},"utcParse")}}function Kr(t,e,r){var n=t<0?"-":"",i=(n?-t:t)+"",a=i.length;return n+(a[e.toLowerCase(),r]))}function U6e(t,e,r){var n=Yi.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function H6e(t,e,r){var n=Yi.exec(e.slice(r,r+1));return n?(t.u=+n[0],r+n[0].length):-1}function q6e(t,e,r){var n=Yi.exec(e.slice(r,r+2));return n?(t.U=+n[0],r+n[0].length):-1}function W6e(t,e,r){var n=Yi.exec(e.slice(r,r+2));return n?(t.V=+n[0],r+n[0].length):-1}function Y6e(t,e,r){var n=Yi.exec(e.slice(r,r+2));return n?(t.W=+n[0],r+n[0].length):-1}function uX(t,e,r){var n=Yi.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function hX(t,e,r){var n=Yi.exec(e.slice(r,r+2));return n?(t.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function X6e(t,e,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return n?(t.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function j6e(t,e,r){var n=Yi.exec(e.slice(r,r+1));return n?(t.q=n[0]*3-3,r+n[0].length):-1}function K6e(t,e,r){var n=Yi.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function fX(t,e,r){var n=Yi.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function Q6e(t,e,r){var n=Yi.exec(e.slice(r,r+3));return n?(t.m=0,t.d=+n[0],r+n[0].length):-1}function dX(t,e,r){var n=Yi.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function Z6e(t,e,r){var n=Yi.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function J6e(t,e,r){var n=Yi.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function eCe(t,e,r){var n=Yi.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function tCe(t,e,r){var n=Yi.exec(e.slice(r,r+6));return n?(t.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function rCe(t,e,r){var n=z6e.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function nCe(t,e,r){var n=Yi.exec(e.slice(r));return n?(t.Q=+n[0],r+n[0].length):-1}function iCe(t,e,r){var n=Yi.exec(e.slice(r));return n?(t.s=+n[0],r+n[0].length):-1}function pX(t,e){return Kr(t.getDate(),e,2)}function aCe(t,e){return Kr(t.getHours(),e,2)}function sCe(t,e){return Kr(t.getHours()%12||12,e,2)}function oCe(t,e){return Kr(1+Ro.count(ao(t),t),e,3)}function xX(t,e){return Kr(t.getMilliseconds(),e,3)}function lCe(t,e){return xX(t,e)+"000"}function cCe(t,e){return Kr(t.getMonth()+1,e,2)}function uCe(t,e){return Kr(t.getMinutes(),e,2)}function hCe(t,e){return Kr(t.getSeconds(),e,2)}function fCe(t){var e=t.getDay();return e===0?7:e}function dCe(t,e){return Kr(wl.count(ao(t)-1,t),e,2)}function bX(t){var e=t.getDay();return e>=4||e===0?fc(t):fc.ceil(t)}function pCe(t,e){return t=bX(t),Kr(fc.count(ao(t),t)+(ao(t).getDay()===4),e,2)}function mCe(t){return t.getDay()}function gCe(t,e){return Kr(Ih.count(ao(t)-1,t),e,2)}function yCe(t,e){return Kr(t.getFullYear()%100,e,2)}function vCe(t,e){return t=bX(t),Kr(t.getFullYear()%100,e,2)}function xCe(t,e){return Kr(t.getFullYear()%1e4,e,4)}function bCe(t,e){var r=t.getDay();return t=r>=4||r===0?fc(t):fc.ceil(t),Kr(t.getFullYear()%1e4,e,4)}function TCe(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Kr(e/60|0,"0",2)+Kr(e%60,"0",2)}function mX(t,e){return Kr(t.getUTCDate(),e,2)}function wCe(t,e){return Kr(t.getUTCHours(),e,2)}function kCe(t,e){return Kr(t.getUTCHours()%12||12,e,2)}function ECe(t,e){return Kr(1+Bv.count(kl(t),t),e,3)}function TX(t,e){return Kr(t.getUTCMilliseconds(),e,3)}function SCe(t,e){return TX(t,e)+"000"}function CCe(t,e){return Kr(t.getUTCMonth()+1,e,2)}function ACe(t,e){return Kr(t.getUTCMinutes(),e,2)}function _Ce(t,e){return Kr(t.getUTCSeconds(),e,2)}function DCe(t){var e=t.getUTCDay();return e===0?7:e}function LCe(t,e){return Kr(Od.count(kl(t)-1,t),e,2)}function wX(t){var e=t.getUTCDay();return e>=4||e===0?Oh(t):Oh.ceil(t)}function RCe(t,e){return t=wX(t),Kr(Oh.count(kl(t),t)+(kl(t).getUTCDay()===4),e,2)}function NCe(t){return t.getUTCDay()}function MCe(t,e){return Kr(Y0.count(kl(t)-1,t),e,2)}function ICe(t,e){return Kr(t.getUTCFullYear()%100,e,2)}function OCe(t,e){return t=wX(t),Kr(t.getUTCFullYear()%100,e,2)}function PCe(t,e){return Kr(t.getUTCFullYear()%1e4,e,4)}function BCe(t,e){var r=t.getUTCDay();return t=r>=4||r===0?Oh(t):Oh.ceil(t),Kr(t.getUTCFullYear()%1e4,e,4)}function FCe(){return"+0000"}function gX(){return"%"}function yX(t){return+t}function vX(t){return Math.floor(+t/1e3)}var cX,Yi,z6e,G6e,kX=M(()=>{"use strict";V5();o(GD,"localDate");o(VD,"utcDate");o(Fv,"newDate");o(UD,"formatLocale");cX={"-":"",_:" ",0:"0"},Yi=/^\s*\d+/,z6e=/^%/,G6e=/[\\^$*+?|[\]().{}]/g;o(Kr,"pad");o(V6e,"requote");o($v,"formatRe");o(zv,"formatLookup");o(U6e,"parseWeekdayNumberSunday");o(H6e,"parseWeekdayNumberMonday");o(q6e,"parseWeekNumberSunday");o(W6e,"parseWeekNumberISO");o(Y6e,"parseWeekNumberMonday");o(uX,"parseFullYear");o(hX,"parseYear");o(X6e,"parseZone");o(j6e,"parseQuarter");o(K6e,"parseMonthNumber");o(fX,"parseDayOfMonth");o(Q6e,"parseDayOfYear");o(dX,"parseHour24");o(Z6e,"parseMinutes");o(J6e,"parseSeconds");o(eCe,"parseMilliseconds");o(tCe,"parseMicroseconds");o(rCe,"parseLiteralPercent");o(nCe,"parseUnixTimestamp");o(iCe,"parseUnixTimestampSeconds");o(pX,"formatDayOfMonth");o(aCe,"formatHour24");o(sCe,"formatHour12");o(oCe,"formatDayOfYear");o(xX,"formatMilliseconds");o(lCe,"formatMicroseconds");o(cCe,"formatMonthNumber");o(uCe,"formatMinutes");o(hCe,"formatSeconds");o(fCe,"formatWeekdayNumberMonday");o(dCe,"formatWeekNumberSunday");o(bX,"dISO");o(pCe,"formatWeekNumberISO");o(mCe,"formatWeekdayNumberSunday");o(gCe,"formatWeekNumberMonday");o(yCe,"formatYear");o(vCe,"formatYearISO");o(xCe,"formatFullYear");o(bCe,"formatFullYearISO");o(TCe,"formatZone");o(mX,"formatUTCDayOfMonth");o(wCe,"formatUTCHour24");o(kCe,"formatUTCHour12");o(ECe,"formatUTCDayOfYear");o(TX,"formatUTCMilliseconds");o(SCe,"formatUTCMicroseconds");o(CCe,"formatUTCMonthNumber");o(ACe,"formatUTCMinutes");o(_Ce,"formatUTCSeconds");o(DCe,"formatUTCWeekdayNumberMonday");o(LCe,"formatUTCWeekNumberSunday");o(wX,"UTCdISO");o(RCe,"formatUTCWeekNumberISO");o(NCe,"formatUTCWeekdayNumberSunday");o(MCe,"formatUTCWeekNumberMonday");o(ICe,"formatUTCYear");o(OCe,"formatUTCYearISO");o(PCe,"formatUTCFullYear");o(BCe,"formatUTCFullYearISO");o(FCe,"formatUTCZone");o(gX,"formatLiteralPercent");o(yX,"formatUnixTimestamp");o(vX,"formatUnixTimestampSeconds")});function HD(t){return X0=UD(t),Pd=X0.format,EX=X0.parse,SX=X0.utcFormat,CX=X0.utcParse,X0}var X0,Pd,EX,SX,CX,AX=M(()=>{"use strict";kX();HD({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});o(HD,"defaultLocale")});var qD=M(()=>{"use strict";AX()});function $Ce(t){return new Date(t)}function zCe(t){return t instanceof Date?+t:+new Date(+t)}function _X(t,e,r,n,i,a,s,l,u,h){var f=Ov(),d=f.invert,p=f.domain,m=h(".%L"),g=h(":%S"),y=h("%I:%M"),v=h("%I %p"),x=h("%a %d"),b=h("%b %d"),T=h("%B"),S=h("%Y");function w(k){return(u(k){"use strict";V5();qD();CD();Iv();KY();o($Ce,"date");o(zCe,"number");o(_X,"calendar");o(U5,"time")});var LX=M(()=>{"use strict";HY();jY();wD();DX()});function WD(t){for(var e=t.length/6|0,r=new Array(e),n=0;n{"use strict";o(WD,"default")});var YD,NX=M(()=>{"use strict";RX();YD=WD("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab")});var MX=M(()=>{"use strict";NX()});function zn(t){return o(function(){return t},"constant")}var H5=M(()=>{"use strict";o(zn,"default")});function OX(t){return t>1?0:t<-1?j0:Math.acos(t)}function jD(t){return t>=1?Gv:t<=-1?-Gv:Math.asin(t)}var XD,ua,Ph,IX,q5,El,Bd,Xi,j0,Gv,K0,W5=M(()=>{"use strict";XD=Math.abs,ua=Math.atan2,Ph=Math.cos,IX=Math.max,q5=Math.min,El=Math.sin,Bd=Math.sqrt,Xi=1e-12,j0=Math.PI,Gv=j0/2,K0=2*j0;o(OX,"acos");o(jD,"asin")});function Y5(t){let e=3;return t.digits=function(r){if(!arguments.length)return e;if(r==null)e=null;else{let n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);e=n}return t},()=>new _d(e)}var KD=M(()=>{"use strict";W_();o(Y5,"withPath")});function GCe(t){return t.innerRadius}function VCe(t){return t.outerRadius}function UCe(t){return t.startAngle}function HCe(t){return t.endAngle}function qCe(t){return t&&t.padAngle}function WCe(t,e,r,n,i,a,s,l){var u=r-t,h=n-e,f=s-i,d=l-a,p=d*u-f*h;if(!(p*pD*D+O*O&&(A=I,L=R),{cx:A,cy:L,x01:-f,y01:-d,x11:A*(i/w-1),y11:L*(i/w-1)}}function Sl(){var t=GCe,e=VCe,r=zn(0),n=null,i=UCe,a=HCe,s=qCe,l=null,u=Y5(h);function h(){var f,d,p=+t.apply(this,arguments),m=+e.apply(this,arguments),g=i.apply(this,arguments)-Gv,y=a.apply(this,arguments)-Gv,v=XD(y-g),x=y>g;if(l||(l=f=u()),mXi))l.moveTo(0,0);else if(v>K0-Xi)l.moveTo(m*Ph(g),m*El(g)),l.arc(0,0,m,g,y,!x),p>Xi&&(l.moveTo(p*Ph(y),p*El(y)),l.arc(0,0,p,y,g,x));else{var b=g,T=y,S=g,w=y,k=v,C=v,A=s.apply(this,arguments)/2,L=A>Xi&&(n?+n.apply(this,arguments):Bd(p*p+m*m)),I=q5(XD(m-p)/2,+r.apply(this,arguments)),R=I,E=I,_,D;if(L>Xi){var O=jD(L/p*El(A)),N=jD(L/m*El(A));(k-=O*2)>Xi?(O*=x?1:-1,S+=O,w-=O):(k=0,S=w=(g+y)/2),(C-=N*2)>Xi?(N*=x?1:-1,b+=N,T-=N):(C=0,b=T=(g+y)/2)}var P=m*Ph(b),B=m*El(b),F=p*Ph(w),V=p*El(w);if(I>Xi){var $=m*Ph(T),U=m*El(T),j=p*Ph(S),ee=p*El(S),q;if(vXi?E>Xi?(_=X5(j,ee,P,B,m,E,x),D=X5($,U,F,V,m,E,x),l.moveTo(_.cx+_.x01,_.cy+_.y01),EXi)||!(k>Xi)?l.lineTo(F,V):R>Xi?(_=X5(F,V,$,U,p,-R,x),D=X5(P,B,j,ee,p,-R,x),l.lineTo(_.cx+_.x01,_.cy+_.y01),R{"use strict";H5();W5();KD();o(GCe,"arcInnerRadius");o(VCe,"arcOuterRadius");o(UCe,"arcStartAngle");o(HCe,"arcEndAngle");o(qCe,"arcPadAngle");o(WCe,"intersect");o(X5,"cornerTangents");o(Sl,"default")});function Vv(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}var nbt,QD=M(()=>{"use strict";nbt=Array.prototype.slice;o(Vv,"default")});function BX(t){this._context=t}function Cu(t){return new BX(t)}var ZD=M(()=>{"use strict";o(BX,"Linear");BX.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e);break}},"point")};o(Cu,"default")});function FX(t){return t[0]}function $X(t){return t[1]}var zX=M(()=>{"use strict";o(FX,"x");o($X,"y")});function Cl(t,e){var r=zn(!0),n=null,i=Cu,a=null,s=Y5(l);t=typeof t=="function"?t:t===void 0?FX:zn(t),e=typeof e=="function"?e:e===void 0?$X:zn(e);function l(u){var h,f=(u=Vv(u)).length,d,p=!1,m;for(n==null&&(a=i(m=s())),h=0;h<=f;++h)!(h{"use strict";QD();H5();ZD();KD();zX();o(Cl,"default")});function JD(t,e){return et?1:e>=t?0:NaN}var VX=M(()=>{"use strict";o(JD,"default")});function eL(t){return t}var UX=M(()=>{"use strict";o(eL,"default")});function j5(){var t=eL,e=JD,r=null,n=zn(0),i=zn(K0),a=zn(0);function s(l){var u,h=(l=Vv(l)).length,f,d,p=0,m=new Array(h),g=new Array(h),y=+n.apply(this,arguments),v=Math.min(K0,Math.max(-K0,i.apply(this,arguments)-y)),x,b=Math.min(Math.abs(v)/h,a.apply(this,arguments)),T=b*(v<0?-1:1),S;for(u=0;u0&&(p+=S);for(e!=null?m.sort(function(w,k){return e(g[w],g[k])}):r!=null&&m.sort(function(w,k){return r(l[w],l[k])}),u=0,d=p?(v-h*T)/p:0;u0?S*d:0)+T,g[f]={data:l[f],index:u,value:S,startAngle:y,endAngle:x,padAngle:b};return g}return o(s,"pie"),s.value=function(l){return arguments.length?(t=typeof l=="function"?l:zn(+l),s):t},s.sortValues=function(l){return arguments.length?(e=l,r=null,s):e},s.sort=function(l){return arguments.length?(r=l,e=null,s):r},s.startAngle=function(l){return arguments.length?(n=typeof l=="function"?l:zn(+l),s):n},s.endAngle=function(l){return arguments.length?(i=typeof l=="function"?l:zn(+l),s):i},s.padAngle=function(l){return arguments.length?(a=typeof l=="function"?l:zn(+l),s):a},s}var HX=M(()=>{"use strict";QD();H5();VX();UX();W5();o(j5,"default")});function Uv(t){return new K5(t,!0)}function Hv(t){return new K5(t,!1)}var K5,qX=M(()=>{"use strict";K5=class{static{o(this,"Bump")}constructor(e,r){this._context=e,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(e,r){switch(e=+e,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,r,e,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,e,this._y0,e,r);break}}this._x0=e,this._y0=r}};o(Uv,"bumpX");o(Hv,"bumpY")});function so(){}var qv=M(()=>{"use strict";o(so,"default")});function Q0(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function Wv(t){this._context=t}function No(t){return new Wv(t)}var Yv=M(()=>{"use strict";o(Q0,"point");o(Wv,"Basis");Wv.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 3:Q0(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Q0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(No,"default")});function WX(t){this._context=t}function Q5(t){return new WX(t)}var YX=M(()=>{"use strict";qv();Yv();o(WX,"BasisClosed");WX.prototype={areaStart:so,areaEnd:so,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:Q0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(Q5,"default")});function XX(t){this._context=t}function Z5(t){return new XX(t)}var jX=M(()=>{"use strict";Yv();o(XX,"BasisOpen");XX.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,n=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:Q0(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e},"point")};o(Z5,"default")});function KX(t,e){this._basis=new Wv(t),this._beta=e}var tL,QX=M(()=>{"use strict";Yv();o(KX,"Bundle");KX.prototype={lineStart:o(function(){this._x=[],this._y=[],this._basis.lineStart()},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var n=t[0],i=e[0],a=t[r]-n,s=e[r]-i,l=-1,u;++l<=r;)u=l/r,this._basis.point(this._beta*t[l]+(1-this._beta)*(n+u*a),this._beta*e[l]+(1-this._beta)*(i+u*s));this._x=this._y=null,this._basis.lineEnd()},"lineEnd"),point:o(function(t,e){this._x.push(+t),this._y.push(+e)},"point")};tL=o((function t(e){function r(n){return e===1?new Wv(n):new KX(n,e)}return o(r,"bundle"),r.beta=function(n){return t(+n)},r}),"custom")(.85)});function Z0(t,e,r){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-r),t._x2,t._y2)}function J5(t,e){this._context=t,this._k=(1-e)/6}var Xv,jv=M(()=>{"use strict";o(Z0,"point");o(J5,"Cardinal");J5.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Z0(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Z0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};Xv=o((function t(e){function r(n){return new J5(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r}),"custom")(0)});function eT(t,e){this._context=t,this._k=(1-e)/6}var rL,nL=M(()=>{"use strict";qv();jv();o(eT,"CardinalClosed");eT.prototype={areaStart:so,areaEnd:so,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Z0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};rL=o((function t(e){function r(n){return new eT(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r}),"custom")(0)});function tT(t,e){this._context=t,this._k=(1-e)/6}var iL,aL=M(()=>{"use strict";jv();o(tT,"CardinalOpen");tT.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Z0(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};iL=o((function t(e){function r(n){return new tT(n,e)}return o(r,"cardinal"),r.tension=function(n){return t(+n)},r}),"custom")(0)});function Kv(t,e,r){var n=t._x1,i=t._y1,a=t._x2,s=t._y2;if(t._l01_a>Xi){var l=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,u=3*t._l01_a*(t._l01_a+t._l12_a);n=(n*l-t._x0*t._l12_2a+t._x2*t._l01_2a)/u,i=(i*l-t._y0*t._l12_2a+t._y2*t._l01_2a)/u}if(t._l23_a>Xi){var h=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,f=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*h+t._x1*t._l23_2a-e*t._l12_2a)/f,s=(s*h+t._y1*t._l23_2a-r*t._l12_2a)/f}t._context.bezierCurveTo(n,i,a,s,t._x2,t._y2)}function ZX(t,e){this._context=t,this._alpha=e}var Qv,rT=M(()=>{"use strict";W5();jv();o(Kv,"point");o(ZX,"CatmullRom");ZX.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:Kv(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};Qv=o((function t(e){function r(n){return e?new ZX(n,e):new J5(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r}),"custom")(.5)});function JX(t,e){this._context=t,this._alpha=e}var sL,ej=M(()=>{"use strict";nL();qv();rT();o(JX,"CatmullRomClosed");JX.prototype={areaStart:so,areaEnd:so,lineStart:o(function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Kv(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};sL=o((function t(e){function r(n){return e?new JX(n,e):new eT(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r}),"custom")(.5)});function tj(t,e){this._context=t,this._alpha=e}var oL,rj=M(()=>{"use strict";aL();rT();o(tj,"CatmullRomOpen");tj.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},"lineStart"),lineEnd:o(function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Kv(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e},"point")};oL=o((function t(e){function r(n){return e?new tj(n,e):new tT(n,0)}return o(r,"catmullRom"),r.alpha=function(n){return t(+n)},r}),"custom")(.5)});function nj(t){this._context=t}function nT(t){return new nj(t)}var ij=M(()=>{"use strict";qv();o(nj,"LinearClosed");nj.prototype={areaStart:so,areaEnd:so,lineStart:o(function(){this._point=0},"lineStart"),lineEnd:o(function(){this._point&&this._context.closePath()},"lineEnd"),point:o(function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))},"point")};o(nT,"default")});function aj(t){return t<0?-1:1}function sj(t,e,r){var n=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(n||i<0&&-0),s=(r-t._y1)/(i||n<0&&-0),l=(a*i+s*n)/(n+i);return(aj(a)+aj(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(l))||0}function oj(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function lL(t,e,r){var n=t._x0,i=t._y0,a=t._x1,s=t._y1,l=(a-n)/3;t._context.bezierCurveTo(n+l,i+l*e,a-l,s-l*r,a,s)}function iT(t){this._context=t}function lj(t){this._context=new cj(t)}function cj(t){this._context=t}function Zv(t){return new iT(t)}function Jv(t){return new lj(t)}var uj=M(()=>{"use strict";o(aj,"sign");o(sj,"slope3");o(oj,"slope2");o(lL,"point");o(iT,"MonotoneX");iT.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},"lineStart"),lineEnd:o(function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:lL(this,this._t0,oj(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},"lineEnd"),point:o(function(t,e){var r=NaN;if(t=+t,e=+e,!(t===this._x1&&e===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,lL(this,oj(this,r=sj(this,t,e)),r);break;default:lL(this,this._t0,r=sj(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=r}},"point")};o(lj,"MonotoneY");(lj.prototype=Object.create(iT.prototype)).point=function(t,e){iT.prototype.point.call(this,e,t)};o(cj,"ReflectContext");cj.prototype={moveTo:o(function(t,e){this._context.moveTo(e,t)},"moveTo"),closePath:o(function(){this._context.closePath()},"closePath"),lineTo:o(function(t,e){this._context.lineTo(e,t)},"lineTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._context.bezierCurveTo(e,t,n,r,a,i)},"bezierCurveTo")};o(Zv,"monotoneX");o(Jv,"monotoneY")});function fj(t){this._context=t}function hj(t){var e,r=t.length-1,n,i=new Array(r),a=new Array(r),s=new Array(r);for(i[0]=0,a[0]=2,s[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(s[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e{"use strict";o(fj,"Natural");fj.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=[],this._y=[]},"lineStart"),lineEnd:o(function(){var t=this._x,e=this._y,r=t.length;if(r)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),r===2)this._context.lineTo(t[1],e[1]);else for(var n=hj(t),i=hj(e),a=0,s=1;s{"use strict";o(aT,"Step");aT.prototype={areaStart:o(function(){this._line=0},"areaStart"),areaEnd:o(function(){this._line=NaN},"areaEnd"),lineStart:o(function(){this._x=this._y=NaN,this._point=0},"lineStart"),lineEnd:o(function(){0=0&&(this._t=1-this._t,this._line=1-this._line)},"lineEnd"),point:o(function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}break}}this._x=t,this._y=e},"point")};o(em,"default");o(e2,"stepBefore");o(t2,"stepAfter")});var mj=M(()=>{"use strict";PX();GX();HX();YX();jX();Yv();qX();QX();nL();aL();jv();ej();rj();rT();ij();ZD();uj();dj();pj()});var gj=M(()=>{"use strict"});var yj=M(()=>{"use strict"});function Bh(t,e,r){this.k=t,this.x=e,this.y=r}function uL(t){for(;!t.__zoom;)if(!(t=t.parentNode))return cL;return t.__zoom}var cL,hL=M(()=>{"use strict";o(Bh,"Transform");Bh.prototype={constructor:Bh,scale:o(function(t){return t===1?this:new Bh(this.k*t,this.x,this.y)},"scale"),translate:o(function(t,e){return t===0&e===0?this:new Bh(this.k,this.x+this.k*t,this.y+this.k*e)},"translate"),apply:o(function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},"apply"),applyX:o(function(t){return t*this.k+this.x},"applyX"),applyY:o(function(t){return t*this.k+this.y},"applyY"),invert:o(function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},"invert"),invertX:o(function(t){return(t-this.x)/this.k},"invertX"),invertY:o(function(t){return(t-this.y)/this.k},"invertY"),rescaleX:o(function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},"rescaleX"),rescaleY:o(function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},"rescaleY"),toString:o(function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"},"toString")};cL=new Bh(1,0,0);uL.prototype=Bh.prototype;o(uL,"transform")});var vj=M(()=>{"use strict"});var xj=M(()=>{"use strict";k5();gj();yj();hL();vj()});var bj=M(()=>{"use strict";xj();hL()});var yr=M(()=>{"use strict";Ch();_H();YW();QW();B0();ZW();JW();JA();xq();eY();G_();tY();nY();iD();yY();GY();z0();W_();VY();rY();UY();LX();MX();yl();mj();V5();qD();y5();k5();bj()});var Tj=sa(ji=>{"use strict";Object.defineProperty(ji,"__esModule",{value:!0});ji.BLANK_URL=ji.relativeFirstCharacters=ji.whitespaceEscapeCharsRegex=ji.urlSchemeRegex=ji.ctrlCharactersRegex=ji.htmlCtrlEntityRegex=ji.htmlEntitiesRegex=ji.invalidProtocolRegex=void 0;ji.invalidProtocolRegex=/^([^\w]*)(javascript|data|vbscript)/im;ji.htmlEntitiesRegex=/&#(\w+)(^\w|;)?/g;ji.htmlCtrlEntityRegex=/&(newline|tab);/gi;ji.ctrlCharactersRegex=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;ji.urlSchemeRegex=/^.+(:|:)/gim;ji.whitespaceEscapeCharsRegex=/(\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;ji.relativeFirstCharacters=[".","/"];ji.BLANK_URL="about:blank"});var tm=sa(sT=>{"use strict";Object.defineProperty(sT,"__esModule",{value:!0});sT.sanitizeUrl=void 0;var Ma=Tj();function YCe(t){return Ma.relativeFirstCharacters.indexOf(t[0])>-1}o(YCe,"isRelativeUrlWithoutProtocol");function XCe(t){var e=t.replace(Ma.ctrlCharactersRegex,"");return e.replace(Ma.htmlEntitiesRegex,function(r,n){return String.fromCharCode(n)})}o(XCe,"decodeHtmlCharacters");function jCe(t){return URL.canParse(t)}o(jCe,"isValidUrl");function wj(t){try{return decodeURIComponent(t)}catch{return t}}o(wj,"decodeURI");function KCe(t){if(!t)return Ma.BLANK_URL;var e,r=wj(t.trim());do r=XCe(r).replace(Ma.htmlCtrlEntityRegex,"").replace(Ma.ctrlCharactersRegex,"").replace(Ma.whitespaceEscapeCharsRegex,"").trim(),r=wj(r),e=r.match(Ma.ctrlCharactersRegex)||r.match(Ma.htmlEntitiesRegex)||r.match(Ma.htmlCtrlEntityRegex)||r.match(Ma.whitespaceEscapeCharsRegex);while(e&&e.length>0);var n=r;if(!n)return Ma.BLANK_URL;if(YCe(n))return n;var i=n.trimStart(),a=i.match(Ma.urlSchemeRegex);if(!a)return n;var s=a[0].toLowerCase().trim();if(Ma.invalidProtocolRegex.test(s))return Ma.BLANK_URL;var l=i.replace(/\\/g,"/");if(s==="mailto:"||s.includes("://"))return l;if(s==="http:"||s==="https:"){if(!jCe(l))return Ma.BLANK_URL;var u=new URL(l);return u.protocol=u.protocol.toLowerCase(),u.hostname=u.hostname.toLowerCase(),u.toString()}return l}o(KCe,"sanitizeUrl");sT.sanitizeUrl=KCe});var fL,Fd,oT,kj,lT,cT,ha,r2,n2=M(()=>{"use strict";fL=La(tm(),1);gr();Fd=o((t,e)=>{let r=t.append("rect");if(r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),e.name&&r.attr("name",e.name),e.rx&&r.attr("rx",e.rx),e.ry&&r.attr("ry",e.ry),e.attrs!==void 0)for(let n in e.attrs)r.attr(n,e.attrs[n]);return e.class&&r.attr("class",e.class),r},"drawRect"),oT=o((t,e)=>{let r={x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,stroke:e.stroke,class:"rect"};Fd(t,r).lower()},"drawBackgroundRect"),kj=o((t,e)=>{let r=e.text.replace(pd," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),lT=o((t,e,r,n)=>{let i=t.append("image");i.attr("x",e),i.attr("y",r);let a=(0,fL.sanitizeUrl)(n);i.attr("xlink:href",a)},"drawImage"),cT=o((t,e,r,n)=>{let i=t.append("use");i.attr("x",e),i.attr("y",r);let a=(0,fL.sanitizeUrl)(n);i.attr("xlink:href",`#${a}`)},"drawEmbeddedImage"),ha=o(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),r2=o(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj")});var Ej,dL,Sj,QCe,ZCe,JCe,e7e,t7e,r7e,n7e,i7e,a7e,s7e,o7e,l7e,Au,Al,Cj=M(()=>{"use strict";gr();n2();Ej=La(tm(),1),dL=o(function(t,e){return Fd(t,e)},"drawRect"),Sj=o(function(t,e,r,n,i,a){let s=t.append("image");s.attr("width",e),s.attr("height",r),s.attr("x",n),s.attr("y",i);let l=a.startsWith("data:image/png;base64")?a:(0,Ej.sanitizeUrl)(a);s.attr("xlink:href",l)},"drawImage"),QCe=o((t,e,r)=>{let n=t.append("g"),i=0;for(let a of e){let s=a.textColor?a.textColor:"#444444",l=a.lineColor?a.lineColor:"#444444",u=a.offsetX?parseInt(a.offsetX):0,h=a.offsetY?parseInt(a.offsetY):0,f="";if(i===0){let p=n.append("line");p.attr("x1",a.startPoint.x),p.attr("y1",a.startPoint.y),p.attr("x2",a.endPoint.x),p.attr("y2",a.endPoint.y),p.attr("stroke-width","1"),p.attr("stroke",l),p.style("fill","none"),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)"),i=-1}else{let p=n.append("path");p.attr("fill","none").attr("stroke-width","1").attr("stroke",l).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",a.startPoint.x).replaceAll("starty",a.startPoint.y).replaceAll("controlx",a.startPoint.x+(a.endPoint.x-a.startPoint.x)/2-(a.endPoint.x-a.startPoint.x)/4).replaceAll("controly",a.startPoint.y+(a.endPoint.y-a.startPoint.y)/2).replaceAll("stopx",a.endPoint.x).replaceAll("stopy",a.endPoint.y)),a.type!=="rel_b"&&p.attr("marker-end","url("+f+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&p.attr("marker-start","url("+f+"#arrowend)")}let d=r.messageFont();Au(r)(a.label.text,n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+h,a.label.width,a.label.height,{fill:s},d),a.techn&&a.techn.text!==""&&(d=r.messageFont(),Au(r)("["+a.techn.text+"]",n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+u,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+r.messageFontSize+5+h,Math.max(a.label.width,a.techn.width),a.techn.height,{fill:s,"font-style":"italic"},d))}},"drawRels"),ZCe=o(function(t,e,r){let n=t.append("g"),i=e.bgColor?e.bgColor:"none",a=e.borderColor?e.borderColor:"#444444",s=e.fontColor?e.fontColor:"black",l={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(l={"stroke-width":1});let u={x:e.x,y:e.y,fill:i,stroke:a,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:l};dL(n,u);let h=r.boundaryFont();h.fontWeight="bold",h.fontSize=h.fontSize+2,h.fontColor=s,Au(r)(e.label.text,n,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},h),e.type&&e.type.text!==""&&(h=r.boundaryFont(),h.fontColor=s,Au(r)(e.type.text,n,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},h)),e.descr&&e.descr.text!==""&&(h=r.boundaryFont(),h.fontSize=h.fontSize-2,h.fontColor=s,Au(r)(e.descr.text,n,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},h))},"drawBoundary"),JCe=o(function(t,e,r){let n=e.bgColor?e.bgColor:r[e.typeC4Shape.text+"_bg_color"],i=e.borderColor?e.borderColor:r[e.typeC4Shape.text+"_border_color"],a=e.fontColor?e.fontColor:"#FFFFFF",s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}let l=t.append("g");l.attr("class","person-man");let u=ha();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":u.x=e.x,u.y=e.y,u.fill=n,u.width=e.width,u.height=e.height,u.stroke=i,u.rx=2.5,u.ry=2.5,u.attrs={"stroke-width":.5},dL(l,u);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":l.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),l.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2));break}let h=l7e(r,e.typeC4Shape.text);switch(l.append("text").attr("fill",a).attr("font-family",h.fontFamily).attr("font-size",h.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":Sj(l,48,48,e.x+e.width/2-24,e.y+e.image.Y,s);break}let f=r[e.typeC4Shape.text+"Font"]();return f.fontWeight="bold",f.fontSize=f.fontSize+2,f.fontColor=a,Au(r)(e.label.text,l,e.x,e.y+e.label.Y,e.width,e.height,{fill:a},f),f=r[e.typeC4Shape.text+"Font"](),f.fontColor=a,e.techn&&e.techn?.text!==""?Au(r)(e.techn.text,l,e.x,e.y+e.techn.Y,e.width,e.height,{fill:a,"font-style":"italic"},f):e.type&&e.type.text!==""&&Au(r)(e.type.text,l,e.x,e.y+e.type.Y,e.width,e.height,{fill:a,"font-style":"italic"},f),e.descr&&e.descr.text!==""&&(f=r.personFont(),f.fontColor=a,Au(r)(e.descr.text,l,e.x,e.y+e.descr.Y,e.width,e.height,{fill:a},f)),e.height},"drawC4Shape"),e7e=o(function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),t7e=o(function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),r7e=o(function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),n7e=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},"insertArrowHead"),i7e=o(function(t){t.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},"insertArrowEnd"),a7e=o(function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),s7e=o(function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertDynamicNumber"),o7e=o(function(t){let r=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);r.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),r.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},"insertArrowCrossHead"),l7e=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"getC4ShapeFont"),Au=(function(){function t(i,a,s,l,u,h,f){let d=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("text-anchor","middle").text(i);n(d,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d){let{fontSize:p,fontFamily:m,fontWeight:g}=d,y=i.split(tt.lineBreakRegex);for(let v=0;v{"use strict";c7e=typeof global=="object"&&global&&global.Object===Object&&global,hT=c7e});var u7e,h7e,hi,Mo=M(()=>{"use strict";pL();u7e=typeof self=="object"&&self&&self.Object===Object&&self,h7e=hT||u7e||Function("return this")(),hi=h7e});var f7e,Ki,$d=M(()=>{"use strict";Mo();f7e=hi.Symbol,Ki=f7e});function m7e(t){var e=d7e.call(t,i2),r=t[i2];try{t[i2]=void 0;var n=!0}catch{}var i=p7e.call(t);return n&&(e?t[i2]=r:delete t[i2]),i}var Aj,d7e,p7e,i2,_j,Dj=M(()=>{"use strict";$d();Aj=Object.prototype,d7e=Aj.hasOwnProperty,p7e=Aj.toString,i2=Ki?Ki.toStringTag:void 0;o(m7e,"getRawTag");_j=m7e});function v7e(t){return y7e.call(t)}var g7e,y7e,Lj,Rj=M(()=>{"use strict";g7e=Object.prototype,y7e=g7e.toString;o(v7e,"objectToString");Lj=v7e});function T7e(t){return t==null?t===void 0?b7e:x7e:Nj&&Nj in Object(t)?_j(t):Lj(t)}var x7e,b7e,Nj,fa,_u=M(()=>{"use strict";$d();Dj();Rj();x7e="[object Null]",b7e="[object Undefined]",Nj=Ki?Ki.toStringTag:void 0;o(T7e,"baseGetTag");fa=T7e});function w7e(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var Sn,oo=M(()=>{"use strict";o(w7e,"isObject");Sn=w7e});function A7e(t){if(!Sn(t))return!1;var e=fa(t);return e==E7e||e==S7e||e==k7e||e==C7e}var k7e,E7e,S7e,C7e,Si,a2=M(()=>{"use strict";_u();oo();k7e="[object AsyncFunction]",E7e="[object Function]",S7e="[object GeneratorFunction]",C7e="[object Proxy]";o(A7e,"isFunction");Si=A7e});var _7e,fT,Mj=M(()=>{"use strict";Mo();_7e=hi["__core-js_shared__"],fT=_7e});function D7e(t){return!!Ij&&Ij in t}var Ij,Oj,Pj=M(()=>{"use strict";Mj();Ij=(function(){var t=/[^.]+$/.exec(fT&&fT.keys&&fT.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""})();o(D7e,"isMasked");Oj=D7e});function N7e(t){if(t!=null){try{return R7e.call(t)}catch{}try{return t+""}catch{}}return""}var L7e,R7e,Du,mL=M(()=>{"use strict";L7e=Function.prototype,R7e=L7e.toString;o(N7e,"toSource");Du=N7e});function z7e(t){if(!Sn(t)||Oj(t))return!1;var e=Si(t)?$7e:I7e;return e.test(Du(t))}var M7e,I7e,O7e,P7e,B7e,F7e,$7e,Bj,Fj=M(()=>{"use strict";a2();Pj();oo();mL();M7e=/[\\^$.*+?()[\]{}|]/g,I7e=/^\[object .+?Constructor\]$/,O7e=Function.prototype,P7e=Object.prototype,B7e=O7e.toString,F7e=P7e.hasOwnProperty,$7e=RegExp("^"+B7e.call(F7e).replace(M7e,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");o(z7e,"baseIsNative");Bj=z7e});function G7e(t,e){return t?.[e]}var $j,zj=M(()=>{"use strict";o(G7e,"getValue");$j=G7e});function V7e(t,e){var r=$j(t,e);return Bj(r)?r:void 0}var Ls,Fh=M(()=>{"use strict";Fj();zj();o(V7e,"getNative");Ls=V7e});var U7e,Lu,s2=M(()=>{"use strict";Fh();U7e=Ls(Object,"create"),Lu=U7e});function H7e(){this.__data__=Lu?Lu(null):{},this.size=0}var Gj,Vj=M(()=>{"use strict";s2();o(H7e,"hashClear");Gj=H7e});function q7e(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var Uj,Hj=M(()=>{"use strict";o(q7e,"hashDelete");Uj=q7e});function j7e(t){var e=this.__data__;if(Lu){var r=e[t];return r===W7e?void 0:r}return X7e.call(e,t)?e[t]:void 0}var W7e,Y7e,X7e,qj,Wj=M(()=>{"use strict";s2();W7e="__lodash_hash_undefined__",Y7e=Object.prototype,X7e=Y7e.hasOwnProperty;o(j7e,"hashGet");qj=j7e});function Z7e(t){var e=this.__data__;return Lu?e[t]!==void 0:Q7e.call(e,t)}var K7e,Q7e,Yj,Xj=M(()=>{"use strict";s2();K7e=Object.prototype,Q7e=K7e.hasOwnProperty;o(Z7e,"hashHas");Yj=Z7e});function eAe(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Lu&&e===void 0?J7e:e,this}var J7e,jj,Kj=M(()=>{"use strict";s2();J7e="__lodash_hash_undefined__";o(eAe,"hashSet");jj=eAe});function rm(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";Vj();Hj();Wj();Xj();Kj();o(rm,"Hash");rm.prototype.clear=Gj;rm.prototype.delete=Uj;rm.prototype.get=qj;rm.prototype.has=Yj;rm.prototype.set=jj;gL=rm});function tAe(){this.__data__=[],this.size=0}var Zj,Jj=M(()=>{"use strict";o(tAe,"listCacheClear");Zj=tAe});function rAe(t,e){return t===e||t!==t&&e!==e}var Io,zd=M(()=>{"use strict";o(rAe,"eq");Io=rAe});function nAe(t,e){for(var r=t.length;r--;)if(Io(t[r][0],e))return r;return-1}var $h,o2=M(()=>{"use strict";zd();o(nAe,"assocIndexOf");$h=nAe});function sAe(t){var e=this.__data__,r=$h(e,t);if(r<0)return!1;var n=e.length-1;return r==n?e.pop():aAe.call(e,r,1),--this.size,!0}var iAe,aAe,eK,tK=M(()=>{"use strict";o2();iAe=Array.prototype,aAe=iAe.splice;o(sAe,"listCacheDelete");eK=sAe});function oAe(t){var e=this.__data__,r=$h(e,t);return r<0?void 0:e[r][1]}var rK,nK=M(()=>{"use strict";o2();o(oAe,"listCacheGet");rK=oAe});function lAe(t){return $h(this.__data__,t)>-1}var iK,aK=M(()=>{"use strict";o2();o(lAe,"listCacheHas");iK=lAe});function cAe(t,e){var r=this.__data__,n=$h(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}var sK,oK=M(()=>{"use strict";o2();o(cAe,"listCacheSet");sK=cAe});function nm(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";Jj();tK();nK();aK();oK();o(nm,"ListCache");nm.prototype.clear=Zj;nm.prototype.delete=eK;nm.prototype.get=rK;nm.prototype.has=iK;nm.prototype.set=sK;zh=nm});var uAe,Gh,dT=M(()=>{"use strict";Fh();Mo();uAe=Ls(hi,"Map"),Gh=uAe});function hAe(){this.size=0,this.__data__={hash:new gL,map:new(Gh||zh),string:new gL}}var lK,cK=M(()=>{"use strict";Qj();l2();dT();o(hAe,"mapCacheClear");lK=hAe});function fAe(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}var uK,hK=M(()=>{"use strict";o(fAe,"isKeyable");uK=fAe});function dAe(t,e){var r=t.__data__;return uK(e)?r[typeof e=="string"?"string":"hash"]:r.map}var Vh,c2=M(()=>{"use strict";hK();o(dAe,"getMapData");Vh=dAe});function pAe(t){var e=Vh(this,t).delete(t);return this.size-=e?1:0,e}var fK,dK=M(()=>{"use strict";c2();o(pAe,"mapCacheDelete");fK=pAe});function mAe(t){return Vh(this,t).get(t)}var pK,mK=M(()=>{"use strict";c2();o(mAe,"mapCacheGet");pK=mAe});function gAe(t){return Vh(this,t).has(t)}var gK,yK=M(()=>{"use strict";c2();o(gAe,"mapCacheHas");gK=gAe});function yAe(t,e){var r=Vh(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this}var vK,xK=M(()=>{"use strict";c2();o(yAe,"mapCacheSet");vK=yAe});function im(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e{"use strict";cK();dK();mK();yK();xK();o(im,"MapCache");im.prototype.clear=lK;im.prototype.delete=fK;im.prototype.get=pK;im.prototype.has=gK;im.prototype.set=vK;Gd=im});function yL(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(vAe);var r=o(function(){var n=arguments,i=e?e.apply(this,n):n[0],a=r.cache;if(a.has(i))return a.get(i);var s=t.apply(this,n);return r.cache=a.set(i,s)||a,s},"memoized");return r.cache=new(yL.Cache||Gd),r}var vAe,am,vL=M(()=>{"use strict";pT();vAe="Expected a function";o(yL,"memoize");yL.Cache=Gd;am=yL});function xAe(){this.__data__=new zh,this.size=0}var bK,TK=M(()=>{"use strict";l2();o(xAe,"stackClear");bK=xAe});function bAe(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}var wK,kK=M(()=>{"use strict";o(bAe,"stackDelete");wK=bAe});function TAe(t){return this.__data__.get(t)}var EK,SK=M(()=>{"use strict";o(TAe,"stackGet");EK=TAe});function wAe(t){return this.__data__.has(t)}var CK,AK=M(()=>{"use strict";o(wAe,"stackHas");CK=wAe});function EAe(t,e){var r=this.__data__;if(r instanceof zh){var n=r.__data__;if(!Gh||n.length{"use strict";l2();dT();pT();kAe=200;o(EAe,"stackSet");_K=EAe});function sm(t){var e=this.__data__=new zh(t);this.size=e.size}var dc,u2=M(()=>{"use strict";l2();TK();kK();SK();AK();DK();o(sm,"Stack");sm.prototype.clear=bK;sm.prototype.delete=wK;sm.prototype.get=EK;sm.prototype.has=CK;sm.prototype.set=_K;dc=sm});var SAe,om,xL=M(()=>{"use strict";Fh();SAe=(function(){try{var t=Ls(Object,"defineProperty");return t({},"",{}),t}catch{}})(),om=SAe});function CAe(t,e,r){e=="__proto__"&&om?om(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}var pc,lm=M(()=>{"use strict";xL();o(CAe,"baseAssignValue");pc=CAe});function AAe(t,e,r){(r!==void 0&&!Io(t[e],r)||r===void 0&&!(e in t))&&pc(t,e,r)}var h2,bL=M(()=>{"use strict";lm();zd();o(AAe,"assignMergeValue");h2=AAe});function _Ae(t){return function(e,r,n){for(var i=-1,a=Object(e),s=n(e),l=s.length;l--;){var u=s[t?l:++i];if(r(a[u],u,a)===!1)break}return e}}var LK,RK=M(()=>{"use strict";o(_Ae,"createBaseFor");LK=_Ae});var DAe,cm,mT=M(()=>{"use strict";RK();DAe=LK(),cm=DAe});function RAe(t,e){if(e)return t.slice();var r=t.length,n=IK?IK(r):new t.constructor(r);return t.copy(n),n}var OK,NK,LAe,MK,IK,gT,TL=M(()=>{"use strict";Mo();OK=typeof exports=="object"&&exports&&!exports.nodeType&&exports,NK=OK&&typeof module=="object"&&module&&!module.nodeType&&module,LAe=NK&&NK.exports===OK,MK=LAe?hi.Buffer:void 0,IK=MK?MK.allocUnsafe:void 0;o(RAe,"cloneBuffer");gT=RAe});var NAe,um,wL=M(()=>{"use strict";Mo();NAe=hi.Uint8Array,um=NAe});function MAe(t){var e=new t.constructor(t.byteLength);return new um(e).set(new um(t)),e}var hm,yT=M(()=>{"use strict";wL();o(MAe,"cloneArrayBuffer");hm=MAe});function IAe(t,e){var r=e?hm(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}var vT,kL=M(()=>{"use strict";yT();o(IAe,"cloneTypedArray");vT=IAe});function OAe(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r{"use strict";o(OAe,"copyArray");xT=OAe});var PK,PAe,BK,FK=M(()=>{"use strict";oo();PK=Object.create,PAe=(function(){function t(){}return o(t,"object"),function(e){if(!Sn(e))return{};if(PK)return PK(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}})(),BK=PAe});function BAe(t,e){return function(r){return t(e(r))}}var bT,SL=M(()=>{"use strict";o(BAe,"overArg");bT=BAe});var FAe,fm,TT=M(()=>{"use strict";SL();FAe=bT(Object.getPrototypeOf,Object),fm=FAe});function zAe(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||$Ae;return t===r}var $Ae,mc,dm=M(()=>{"use strict";$Ae=Object.prototype;o(zAe,"isPrototype");mc=zAe});function GAe(t){return typeof t.constructor=="function"&&!mc(t)?BK(fm(t)):{}}var wT,CL=M(()=>{"use strict";FK();TT();dm();o(GAe,"initCloneObject");wT=GAe});function VAe(t){return t!=null&&typeof t=="object"}var ai,Oo=M(()=>{"use strict";o(VAe,"isObjectLike");ai=VAe});function HAe(t){return ai(t)&&fa(t)==UAe}var UAe,AL,$K=M(()=>{"use strict";_u();Oo();UAe="[object Arguments]";o(HAe,"baseIsArguments");AL=HAe});var zK,qAe,WAe,YAe,_l,pm=M(()=>{"use strict";$K();Oo();zK=Object.prototype,qAe=zK.hasOwnProperty,WAe=zK.propertyIsEnumerable,YAe=AL((function(){return arguments})())?AL:function(t){return ai(t)&&qAe.call(t,"callee")&&!WAe.call(t,"callee")},_l=YAe});var XAe,Bt,Yn=M(()=>{"use strict";XAe=Array.isArray,Bt=XAe});function KAe(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=jAe}var jAe,mm,kT=M(()=>{"use strict";jAe=9007199254740991;o(KAe,"isLength");mm=KAe});function QAe(t){return t!=null&&mm(t.length)&&!Si(t)}var fi,Po=M(()=>{"use strict";a2();kT();o(QAe,"isArrayLike");fi=QAe});function ZAe(t){return ai(t)&&fi(t)}var Vd,ET=M(()=>{"use strict";Po();Oo();o(ZAe,"isArrayLikeObject");Vd=ZAe});function JAe(){return!1}var GK,VK=M(()=>{"use strict";o(JAe,"stubFalse");GK=JAe});var qK,UK,e8e,HK,t8e,r8e,Dl,gm=M(()=>{"use strict";Mo();VK();qK=typeof exports=="object"&&exports&&!exports.nodeType&&exports,UK=qK&&typeof module=="object"&&module&&!module.nodeType&&module,e8e=UK&&UK.exports===qK,HK=e8e?hi.Buffer:void 0,t8e=HK?HK.isBuffer:void 0,r8e=t8e||GK,Dl=r8e});function l8e(t){if(!ai(t)||fa(t)!=n8e)return!1;var e=fm(t);if(e===null)return!0;var r=s8e.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&WK.call(r)==o8e}var n8e,i8e,a8e,WK,s8e,o8e,YK,XK=M(()=>{"use strict";_u();TT();Oo();n8e="[object Object]",i8e=Function.prototype,a8e=Object.prototype,WK=i8e.toString,s8e=a8e.hasOwnProperty,o8e=WK.call(Object);o(l8e,"isPlainObject");YK=l8e});function M8e(t){return ai(t)&&mm(t.length)&&!!Gn[fa(t)]}var c8e,u8e,h8e,f8e,d8e,p8e,m8e,g8e,y8e,v8e,x8e,b8e,T8e,w8e,k8e,E8e,S8e,C8e,A8e,_8e,D8e,L8e,R8e,N8e,Gn,jK,KK=M(()=>{"use strict";_u();kT();Oo();c8e="[object Arguments]",u8e="[object Array]",h8e="[object Boolean]",f8e="[object Date]",d8e="[object Error]",p8e="[object Function]",m8e="[object Map]",g8e="[object Number]",y8e="[object Object]",v8e="[object RegExp]",x8e="[object Set]",b8e="[object String]",T8e="[object WeakMap]",w8e="[object ArrayBuffer]",k8e="[object DataView]",E8e="[object Float32Array]",S8e="[object Float64Array]",C8e="[object Int8Array]",A8e="[object Int16Array]",_8e="[object Int32Array]",D8e="[object Uint8Array]",L8e="[object Uint8ClampedArray]",R8e="[object Uint16Array]",N8e="[object Uint32Array]",Gn={};Gn[E8e]=Gn[S8e]=Gn[C8e]=Gn[A8e]=Gn[_8e]=Gn[D8e]=Gn[L8e]=Gn[R8e]=Gn[N8e]=!0;Gn[c8e]=Gn[u8e]=Gn[w8e]=Gn[h8e]=Gn[k8e]=Gn[f8e]=Gn[d8e]=Gn[p8e]=Gn[m8e]=Gn[g8e]=Gn[y8e]=Gn[v8e]=Gn[x8e]=Gn[b8e]=Gn[T8e]=!1;o(M8e,"baseIsTypedArray");jK=M8e});function I8e(t){return function(e){return t(e)}}var Bo,Ud=M(()=>{"use strict";o(I8e,"baseUnary");Bo=I8e});var QK,f2,O8e,_L,P8e,Fo,d2=M(()=>{"use strict";pL();QK=typeof exports=="object"&&exports&&!exports.nodeType&&exports,f2=QK&&typeof module=="object"&&module&&!module.nodeType&&module,O8e=f2&&f2.exports===QK,_L=O8e&&hT.process,P8e=(function(){try{var t=f2&&f2.require&&f2.require("util").types;return t||_L&&_L.binding&&_L.binding("util")}catch{}})(),Fo=P8e});var ZK,B8e,Uh,p2=M(()=>{"use strict";KK();Ud();d2();ZK=Fo&&Fo.isTypedArray,B8e=ZK?Bo(ZK):jK,Uh=B8e});function F8e(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}var m2,DL=M(()=>{"use strict";o(F8e,"safeGet");m2=F8e});function G8e(t,e,r){var n=t[e];(!(z8e.call(t,e)&&Io(n,r))||r===void 0&&!(e in t))&&pc(t,e,r)}var $8e,z8e,gc,ym=M(()=>{"use strict";lm();zd();$8e=Object.prototype,z8e=$8e.hasOwnProperty;o(G8e,"assignValue");gc=G8e});function V8e(t,e,r,n){var i=!r;r||(r={});for(var a=-1,s=e.length;++a{"use strict";ym();lm();o(V8e,"copyObject");$o=V8e});function U8e(t,e){for(var r=-1,n=Array(t);++r{"use strict";o(U8e,"baseTimes");JK=U8e});function W8e(t,e){var r=typeof t;return e=e??H8e,!!e&&(r=="number"||r!="symbol"&&q8e.test(t))&&t>-1&&t%1==0&&t{"use strict";H8e=9007199254740991,q8e=/^(?:0|[1-9]\d*)$/;o(W8e,"isIndex");Hh=W8e});function j8e(t,e){var r=Bt(t),n=!r&&_l(t),i=!r&&!n&&Dl(t),a=!r&&!n&&!i&&Uh(t),s=r||n||i||a,l=s?JK(t.length,String):[],u=l.length;for(var h in t)(e||X8e.call(t,h))&&!(s&&(h=="length"||i&&(h=="offset"||h=="parent")||a&&(h=="buffer"||h=="byteLength"||h=="byteOffset")||Hh(h,u)))&&l.push(h);return l}var Y8e,X8e,ST,LL=M(()=>{"use strict";eQ();pm();Yn();gm();g2();p2();Y8e=Object.prototype,X8e=Y8e.hasOwnProperty;o(j8e,"arrayLikeKeys");ST=j8e});function K8e(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}var tQ,rQ=M(()=>{"use strict";o(K8e,"nativeKeysIn");tQ=K8e});function J8e(t){if(!Sn(t))return tQ(t);var e=mc(t),r=[];for(var n in t)n=="constructor"&&(e||!Z8e.call(t,n))||r.push(n);return r}var Q8e,Z8e,nQ,iQ=M(()=>{"use strict";oo();dm();rQ();Q8e=Object.prototype,Z8e=Q8e.hasOwnProperty;o(J8e,"baseKeysIn");nQ=J8e});function e_e(t){return fi(t)?ST(t,!0):nQ(t)}var Rs,qh=M(()=>{"use strict";LL();iQ();Po();o(e_e,"keysIn");Rs=e_e});function t_e(t){return $o(t,Rs(t))}var aQ,sQ=M(()=>{"use strict";Hd();qh();o(t_e,"toPlainObject");aQ=t_e});function r_e(t,e,r,n,i,a,s){var l=m2(t,r),u=m2(e,r),h=s.get(u);if(h){h2(t,r,h);return}var f=a?a(l,u,r+"",t,e,s):void 0,d=f===void 0;if(d){var p=Bt(u),m=!p&&Dl(u),g=!p&&!m&&Uh(u);f=u,p||m||g?Bt(l)?f=l:Vd(l)?f=xT(l):m?(d=!1,f=gT(u,!0)):g?(d=!1,f=vT(u,!0)):f=[]:YK(u)||_l(u)?(f=l,_l(l)?f=aQ(l):(!Sn(l)||Si(l))&&(f=wT(u))):d=!1}d&&(s.set(u,f),i(f,u,n,a,s),s.delete(u)),h2(t,r,f)}var oQ,lQ=M(()=>{"use strict";bL();TL();kL();EL();CL();pm();Yn();ET();gm();a2();oo();XK();p2();DL();sQ();o(r_e,"baseMergeDeep");oQ=r_e});function cQ(t,e,r,n,i){t!==e&&cm(e,function(a,s){if(i||(i=new dc),Sn(a))oQ(t,e,s,r,cQ,n,i);else{var l=n?n(m2(t,s),a,s+"",t,e,i):void 0;l===void 0&&(l=a),h2(t,s,l)}},Rs)}var uQ,hQ=M(()=>{"use strict";u2();bL();mT();lQ();oo();qh();DL();o(cQ,"baseMerge");uQ=cQ});function n_e(t){return t}var Qi,Ru=M(()=>{"use strict";o(n_e,"identity");Qi=n_e});function i_e(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}var fQ,dQ=M(()=>{"use strict";o(i_e,"apply");fQ=i_e});function a_e(t,e,r){return e=pQ(e===void 0?t.length-1:e,0),function(){for(var n=arguments,i=-1,a=pQ(n.length-e,0),s=Array(a);++i{"use strict";dQ();pQ=Math.max;o(a_e,"overRest");CT=a_e});function s_e(t){return function(){return t}}var Ns,NL=M(()=>{"use strict";o(s_e,"constant");Ns=s_e});var o_e,mQ,gQ=M(()=>{"use strict";NL();xL();Ru();o_e=om?function(t,e){return om(t,"toString",{configurable:!0,enumerable:!1,value:Ns(e),writable:!0})}:Qi,mQ=o_e});function h_e(t){var e=0,r=0;return function(){var n=u_e(),i=c_e-(n-r);if(r=n,i>0){if(++e>=l_e)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var l_e,c_e,u_e,yQ,vQ=M(()=>{"use strict";l_e=800,c_e=16,u_e=Date.now;o(h_e,"shortOut");yQ=h_e});var f_e,AT,ML=M(()=>{"use strict";gQ();vQ();f_e=yQ(mQ),AT=f_e});function d_e(t,e){return AT(CT(t,e,Qi),t+"")}var yc,vm=M(()=>{"use strict";Ru();RL();ML();o(d_e,"baseRest");yc=d_e});function p_e(t,e,r){if(!Sn(r))return!1;var n=typeof e;return(n=="number"?fi(r)&&Hh(e,r.length):n=="string"&&e in r)?Io(r[e],t):!1}var lo,qd=M(()=>{"use strict";zd();Po();g2();oo();o(p_e,"isIterateeCall");lo=p_e});function m_e(t){return yc(function(e,r){var n=-1,i=r.length,a=i>1?r[i-1]:void 0,s=i>2?r[2]:void 0;for(a=t.length>3&&typeof a=="function"?(i--,a):void 0,s&&lo(r[0],r[1],s)&&(a=i<3?void 0:a,i=1),e=Object(e);++n{"use strict";vm();qd();o(m_e,"createAssigner");_T=m_e});var g_e,Wh,OL=M(()=>{"use strict";hQ();IL();g_e=_T(function(t,e,r){uQ(t,e,r)}),Wh=g_e});function FL(t,e){if(!t)return e;let r=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return y_e[r]??e}function T_e(t,e){let r=t.trim();if(r)return e.securityLevel!=="loose"?(0,TQ.sanitizeUrl)(r):r}function EQ(t,e){return!t||!e?0:Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function k_e(t){let e,r=0;t.forEach(i=>{r+=EQ(i,e),e=i});let n=r/2;return $L(t,n)}function E_e(t){return t.length===1?t[0]:k_e(t)}function C_e(t,e,r){let n=structuredClone(r);X.info("our points",n),e!=="start_left"&&e!=="start_right"&&n.reverse();let i=25+t,a=$L(n,i),s=10+t*.5,l=Math.atan2(n[0].y-a.y,n[0].x-a.x),u={x:0,y:0};return e==="start_left"?(u.x=Math.sin(l+Math.PI)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l+Math.PI)*s+(n[0].y+a.y)/2):e==="end_right"?(u.x=Math.sin(l-Math.PI)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l-Math.PI)*s+(n[0].y+a.y)/2-5):e==="end_left"?(u.x=Math.sin(l)*s+(n[0].x+a.x)/2-5,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2-5):(u.x=Math.sin(l)*s+(n[0].x+a.x)/2,u.y=-Math.cos(l)*s+(n[0].y+a.y)/2),u}function zL(t){let e="",r="";for(let n of t)n!==void 0&&(n.startsWith("color:")||n.startsWith("text-align:")?r=r+n+";":e=e+n+";");return{style:e,labelStyle:r}}function A_e(t){let e="",r="0123456789abcdef",n=r.length;for(let i=0;iMath.round(parseFloat(a)).toString());return i.includes(r.toString())||i.includes(n.toString())}var TQ,BL,y_e,v_e,x_e,wQ,kQ,b_e,w_e,xQ,$L,S_e,bQ,GL,VL,__e,D_e,UL,L_e,HL,PL,DT,R_e,N_e,vc,qt,SQ,Ji,xc,tr=M(()=>{"use strict";TQ=La(tm(),1);yr();gr();S7();pt();vd();v0();vL();OL();$3();BL="\u200B",y_e={curveBasis:No,curveBasisClosed:Q5,curveBasisOpen:Z5,curveBumpX:Uv,curveBumpY:Hv,curveBundle:tL,curveCardinalClosed:rL,curveCardinalOpen:iL,curveCardinal:Xv,curveCatmullRomClosed:sL,curveCatmullRomOpen:oL,curveCatmullRom:Qv,curveLinear:Cu,curveLinearClosed:nT,curveMonotoneX:Zv,curveMonotoneY:Jv,curveNatural:J0,curveStep:em,curveStepAfter:t2,curveStepBefore:e2},v_e=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,x_e=o(function(t,e){let r=wQ(t,/(?:init\b)|(?:initialize\b)/),n={};if(Array.isArray(r)){let s=r.map(l=>l.args);b0(s),n=Rn(n,[...s])}else n=r.args;if(!n)return;let i=_0(t,e),a="config";return n[a]!==void 0&&(i==="flowchart-v2"&&(i="flowchart"),n[i]=n[a],delete n[a]),n},"detectInit"),wQ=o(function(t,e=null){try{let r=new RegExp(`[%]{2}(?![{]${v_e.source})(?=[}][%]{2}).* +`,"ig");t=t.trim().replace(r,"").replace(/'/gm,'"'),X.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let n,i=[];for(;(n=yd.exec(t))!==null;)if(n.index===yd.lastIndex&&yd.lastIndex++,n&&!e||e&&n[1]?.match(e)||e&&n[2]?.match(e)){let a=n[1]?n[1]:n[2],s=n[3]?n[3].trim():n[4]?JSON.parse(n[4].trim()):null;i.push({type:a,args:s})}return i.length===0?{type:t,args:null}:i.length===1?i[0]:i}catch(r){return X.error(`ERROR: ${r.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},"detectDirective"),kQ=o(function(t){return t.replace(yd,"")},"removeDirectives"),b_e=o(function(t,e){for(let[r,n]of e.entries())if(n.match(t))return r;return-1},"isSubstringInArray");o(FL,"interpolateToCurve");o(T_e,"formatUrl");w_e=o((t,...e)=>{let r=t.split("."),n=r.length-1,i=r[n],a=window;for(let s=0;s{let r=Math.pow(10,e);return Math.round(t*r)/r},"roundNumber"),$L=o((t,e)=>{let r,n=e;for(let i of t){if(r){let a=EQ(i,r);if(a===0)return r;if(a=1)return{x:i.x,y:i.y};if(s>0&&s<1)return{x:xQ((1-s)*r.x+s*i.x,5),y:xQ((1-s)*r.y+s*i.y,5)}}}r=i}throw new Error("Could not find a suitable point for the given distance")},"calculatePoint"),S_e=o((t,e,r)=>{X.info(`our points ${JSON.stringify(e)}`),e[0]!==r&&(e=e.reverse());let i=$L(e,25),a=t?10:5,s=Math.atan2(e[0].y-i.y,e[0].x-i.x),l={x:0,y:0};return l.x=Math.sin(s)*a+(e[0].x+i.x)/2,l.y=-Math.cos(s)*a+(e[0].y+i.y)/2,l},"calcCardinalityPosition");o(C_e,"calcTerminalLabelPosition");o(zL,"getStylesFromArray");bQ=0,GL=o(()=>(bQ++,"id-"+Math.random().toString(36).substr(2,12)+"-"+bQ),"generateId");o(A_e,"makeRandomHex");VL=o(t=>A_e(t.length),"random"),__e=o(function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},"getTextObj"),D_e=o(function(t,e){let r=e.text.replace(tt.lineBreakRegex," "),[,n]=vc(e.fontSize),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.style("text-anchor",e.anchor),i.style("font-family",e.fontFamily),i.style("font-size",n),i.style("font-weight",e.fontWeight),i.attr("fill",e.fill),e.class!==void 0&&i.attr("class",e.class);let a=i.append("tspan");return a.attr("x",e.x+e.textMargin*2),a.attr("fill",e.fill),a.text(r),i},"drawSimpleText"),UL=am((t,e,r)=>{if(!t||(r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
"},r),tt.lineBreakRegex.test(t)))return t;let n=t.split(" ").filter(Boolean),i=[],a="";return n.forEach((s,l)=>{let u=Zi(`${s} `,r),h=Zi(a,r);if(u>e){let{hyphenatedStrings:p,remainingWord:m}=L_e(s,e,"-",r);i.push(a,...p),a=m}else h+u>=e?(i.push(a),a=s):a=[a,s].filter(Boolean).join(" ");l+1===n.length&&i.push(a)}),i.filter(s=>s!=="").join(r.joinWith)},(t,e,r)=>`${t}${e}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),L_e=am((t,e,r="-",n)=>{n=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},n);let i=[...t],a=[],s="";return i.forEach((l,u)=>{let h=`${s}${l}`;if(Zi(h,n)>=e){let d=u+1,p=i.length===d,m=`${h}${r}`;a.push(p?h:m),s=""}else s=h}),{hyphenatedStrings:a,remainingWord:s}},(t,e,r="-",n)=>`${t}${e}${r}${n.fontSize}${n.fontWeight}${n.fontFamily}`);o(LT,"calculateTextHeight");o(Zi,"calculateTextWidth");HL=am((t,e)=>{let{fontSize:r=12,fontFamily:n="Arial",fontWeight:i=400}=e;if(!t)return{width:0,height:0};let[,a]=vc(r),s=["sans-serif",n],l=t.split(tt.lineBreakRegex),u=[],h=qe("body");if(!h.remove)return{width:0,height:0,lineHeight:0};let f=h.append("svg");for(let p of s){let m=0,g={width:0,height:0,lineHeight:0};for(let y of l){let v=__e();v.text=y||BL;let x=D_e(f,v).style("font-size",a).style("font-weight",i).style("font-family",p),b=(x._groups||x)[0][0].getBBox();if(b.width===0&&b.height===0)throw new Error("svg element not in render tree");g.width=Math.round(Math.max(g.width,b.width)),m=Math.round(b.height),g.height+=m,g.lineHeight=Math.round(Math.max(g.lineHeight,m))}u.push(g)}f.remove();let d=isNaN(u[1].height)||isNaN(u[1].width)||isNaN(u[1].lineHeight)||u[0].height>u[1].height&&u[0].width>u[1].width&&u[0].lineHeight>u[1].lineHeight?0:1;return u[d]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`),PL=class{constructor(e=!1,r){this.count=0;this.count=r?r.length:0,this.next=e?()=>this.count++:()=>Date.now()}static{o(this,"InitIDGenerator")}},R_e=o(function(t){return DT=DT||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),DT.innerHTML=t,unescape(DT.textContent)},"entityDecode");o(qL,"isDetailedError");N_e=o((t,e,r,n)=>{if(!n)return;let i=t.node()?.getBBox();i&&t.append("text").text(n).attr("text-anchor","middle").attr("x",i.x+i.width/2).attr("y",-r).attr("class",e)},"insertTitle"),vc=o(t=>{if(typeof t=="number")return[t,t+"px"];let e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]},"parseFontSize");o(Vn,"cleanAndMerge");qt={assignWithDepth:Rn,wrapLabel:UL,calculateTextHeight:LT,calculateTextWidth:Zi,calculateTextDimensions:HL,cleanAndMerge:Vn,detectInit:x_e,detectDirective:wQ,isSubstringInArray:b_e,interpolateToCurve:FL,calcLabelPosition:E_e,calcCardinalityPosition:S_e,calcTerminalLabelPosition:C_e,formatUrl:T_e,getStylesFromArray:zL,generateId:GL,random:VL,runFunc:w_e,entityDecode:R_e,insertTitle:N_e,isLabelCoordinateInPath:M_e,parseFontSize:vc,InitIDGenerator:PL},SQ=o(function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/#\w+;/g,function(r){let n=r.substring(1,r.length-1);return/^\+?\d+$/.test(n)?"\uFB02\xB0\xB0"+n+"\xB6\xDF":"\uFB02\xB0"+n+"\xB6\xDF"}),e},"encodeEntities"),Ji=o(function(t){return t.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},"decodeEntities"),xc=o((t,e,{counter:r=0,prefix:n,suffix:i},a)=>a||`${n?`${n}_`:""}${t}_${e}_${r}${i?`_${i}`:""}`,"getEdgeId");o(Cn,"handleUndefinedAttr");o(M_e,"isLabelCoordinateInPath")});function Ll(t,e,r,n,i){if(!e[t].width)if(r)e[t].text=UL(e[t].text,i,n),e[t].textLines=e[t].text.split(tt.lineBreakRegex).length,e[t].width=i,e[t].height=LT(e[t].text,n);else{let a=e[t].text.split(tt.lineBreakRegex);e[t].textLines=a.length;let s=0;e[t].height=0,e[t].width=0;for(let l of a)e[t].width=Math.max(Zi(l,n),e[t].width),s=LT(l,n),e[t].height=e[t].height+s}}function LQ(t,e,r,n,i){let a=new IT(i);a.data.widthLimit=r.data.widthLimit/Math.min(WL,n.length);for(let[s,l]of n.entries()){let u=0;l.image={width:0,height:0,Y:0},l.sprite&&(l.image.width=48,l.image.height=48,l.image.Y=u,u=l.image.Y+l.image.height);let h=l.wrap&&Wt.wrap,f=RT(Wt);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",Ll("label",l,h,f,a.data.widthLimit),l.label.Y=u+8,u=l.label.Y+l.label.height,l.type&&l.type.text!==""){l.type.text="["+l.type.text+"]";let g=RT(Wt);Ll("type",l,h,g,a.data.widthLimit),l.type.Y=u+5,u=l.type.Y+l.type.height}if(l.descr&&l.descr.text!==""){let g=RT(Wt);g.fontSize=g.fontSize-2,Ll("descr",l,h,g,a.data.widthLimit),l.descr.Y=u+20,u=l.descr.Y+l.descr.height}if(s==0||s%WL===0){let g=r.data.startx+Wt.diagramMarginX,y=r.data.stopy+Wt.diagramMarginY+u;a.setData(g,g,y,y)}else{let g=a.data.stopx!==a.data.startx?a.data.stopx+Wt.diagramMarginX:a.data.startx,y=a.data.starty;a.setData(g,g,y,y)}a.name=l.alias;let d=i.db.getC4ShapeArray(l.alias),p=i.db.getC4ShapeKeys(l.alias);p.length>0&&DQ(a,t,d,p),e=l.alias;let m=i.db.getBoundaries(e);m.length>0&&LQ(t,e,a,m,i),l.alias!=="global"&&_Q(t,l,a),r.data.stopy=Math.max(a.data.stopy+Wt.c4ShapeMargin,r.data.stopy),r.data.stopx=Math.max(a.data.stopx+Wt.c4ShapeMargin,r.data.stopx),NT=Math.max(NT,r.data.stopx),MT=Math.max(MT,r.data.stopy)}}var NT,MT,AQ,WL,Wt,IT,YL,y2,RT,I_e,_Q,DQ,Ms,CQ,O_e,P_e,B_e,XL,RQ=M(()=>{"use strict";yr();Cj();pt();RA();gr();GA();Xt();v0();tr();Ei();NT=0,MT=0,AQ=4,WL=2;rv.yy=lv;Wt={},IT=class{static{o(this,"Bounds")}constructor(e){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,YL(e.db.getConfig())}setData(e,r,n,i){this.nextData.startx=this.data.startx=e,this.nextData.stopx=this.data.stopx=r,this.nextData.starty=this.data.starty=n,this.nextData.stopy=this.data.stopy=i}updateVal(e,r,n,i){e[r]===void 0?e[r]=n:e[r]=i(n,e[r])}insert(e){this.nextData.cnt=this.nextData.cnt+1;let r=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+e.margin:this.nextData.stopx+e.margin*2,n=r+e.width,i=this.nextData.starty+e.margin*2,a=i+e.height;(r>=this.data.widthLimit||n>=this.data.widthLimit||this.nextData.cnt>AQ)&&(r=this.nextData.startx+e.margin+Wt.nextLinePaddingX,i=this.nextData.stopy+e.margin*2,this.nextData.stopx=n=r+e.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=a=i+e.height,this.nextData.cnt=1),e.x=r,e.y=i,this.updateVal(this.data,"startx",r,Math.min),this.updateVal(this.data,"starty",i,Math.min),this.updateVal(this.data,"stopx",n,Math.max),this.updateVal(this.data,"stopy",a,Math.max),this.updateVal(this.nextData,"startx",r,Math.min),this.updateVal(this.nextData,"starty",i,Math.min),this.updateVal(this.nextData,"stopx",n,Math.max),this.updateVal(this.nextData,"stopy",a,Math.max)}init(e){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},YL(e.db.getConfig())}bumpLastMargin(e){this.data.stopx+=e,this.data.stopy+=e}},YL=o(function(t){Rn(Wt,t),t.fontFamily&&(Wt.personFontFamily=Wt.systemFontFamily=Wt.messageFontFamily=t.fontFamily),t.fontSize&&(Wt.personFontSize=Wt.systemFontSize=Wt.messageFontSize=t.fontSize),t.fontWeight&&(Wt.personFontWeight=Wt.systemFontWeight=Wt.messageFontWeight=t.fontWeight)},"setConf"),y2=o((t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),"c4ShapeFont"),RT=o(t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight}),"boundaryFont"),I_e=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont");o(Ll,"calcC4ShapeTextWH");_Q=o(function(t,e,r){e.x=r.data.startx,e.y=r.data.starty,e.width=r.data.stopx-r.data.startx,e.height=r.data.stopy-r.data.starty,e.label.y=Wt.c4ShapeMargin-35;let n=e.wrap&&Wt.wrap,i=RT(Wt);i.fontSize=i.fontSize+2,i.fontWeight="bold";let a=Zi(e.label.text,i);Ll("label",e,n,i,a),Al.drawBoundary(t,e,Wt)},"drawBoundary"),DQ=o(function(t,e,r,n){let i=0;for(let a of n){i=0;let s=r[a],l=y2(Wt,s.typeC4Shape.text);switch(l.fontSize=l.fontSize-2,s.typeC4Shape.width=Zi("\xAB"+s.typeC4Shape.text+"\xBB",l),s.typeC4Shape.height=l.fontSize+2,s.typeC4Shape.Y=Wt.c4ShapePadding,i=s.typeC4Shape.Y+s.typeC4Shape.height-4,s.image={width:0,height:0,Y:0},s.typeC4Shape.text){case"person":case"external_person":s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height;break}s.sprite&&(s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height);let u=s.wrap&&Wt.wrap,h=Wt.width-Wt.c4ShapePadding*2,f=y2(Wt,s.typeC4Shape.text);if(f.fontSize=f.fontSize+2,f.fontWeight="bold",Ll("label",s,u,f,h),s.label.Y=i+8,i=s.label.Y+s.label.height,s.type&&s.type.text!==""){s.type.text="["+s.type.text+"]";let m=y2(Wt,s.typeC4Shape.text);Ll("type",s,u,m,h),s.type.Y=i+5,i=s.type.Y+s.type.height}else if(s.techn&&s.techn.text!==""){s.techn.text="["+s.techn.text+"]";let m=y2(Wt,s.techn.text);Ll("techn",s,u,m,h),s.techn.Y=i+5,i=s.techn.Y+s.techn.height}let d=i,p=s.label.width;if(s.descr&&s.descr.text!==""){let m=y2(Wt,s.typeC4Shape.text);Ll("descr",s,u,m,h),s.descr.Y=i+20,i=s.descr.Y+s.descr.height,p=Math.max(s.label.width,s.descr.width),d=i-s.descr.textLines*5}p=p+Wt.c4ShapePadding,s.width=Math.max(s.width||Wt.width,p,Wt.width),s.height=Math.max(s.height||Wt.height,d,Wt.height),s.margin=s.margin||Wt.c4ShapeMargin,t.insert(s),Al.drawC4Shape(e,s,Wt)}t.bumpLastMargin(Wt.c4ShapeMargin)},"drawC4ShapeArray"),Ms=class{static{o(this,"Point")}constructor(e,r){this.x=e,this.y=r}},CQ=o(function(t,e){let r=t.x,n=t.y,i=e.x,a=e.y,s=r+t.width/2,l=n+t.height/2,u=Math.abs(r-i),h=Math.abs(n-a),f=h/u,d=t.height/t.width,p=null;return n==a&&ri?p=new Ms(r,l):r==i&&na&&(p=new Ms(s,n)),r>i&&n=f?p=new Ms(r,l+f*t.width/2):p=new Ms(s-u/h*t.height/2,n+t.height):r=f?p=new Ms(r+t.width,l+f*t.width/2):p=new Ms(s+u/h*t.height/2,n+t.height):ra?d>=f?p=new Ms(r+t.width,l-f*t.width/2):p=new Ms(s+t.height/2*u/h,n):r>i&&n>a&&(d>=f?p=new Ms(r,l-t.width/2*f):p=new Ms(s-t.height/2*u/h,n)),p},"getIntersectPoint"),O_e=o(function(t,e){let r={x:0,y:0};r.x=e.x+e.width/2,r.y=e.y+e.height/2;let n=CQ(t,r);r.x=t.x+t.width/2,r.y=t.y+t.height/2;let i=CQ(e,r);return{startPoint:n,endPoint:i}},"getIntersectPoints"),P_e=o(function(t,e,r,n){let i=0;for(let a of e){i=i+1;let s=a.wrap&&Wt.wrap,l=I_e(Wt);n.db.getC4Type()==="C4Dynamic"&&(a.label.text=i+": "+a.label.text);let h=Zi(a.label.text,l);Ll("label",a,s,l,h),a.techn&&a.techn.text!==""&&(h=Zi(a.techn.text,l),Ll("techn",a,s,l,h)),a.descr&&a.descr.text!==""&&(h=Zi(a.descr.text,l),Ll("descr",a,s,l,h));let f=r(a.from),d=r(a.to),p=O_e(f,d);a.startPoint=p.startPoint,a.endPoint=p.endPoint}Al.drawRels(t,e,Wt)},"drawRels");o(LQ,"drawInsideBoundary");B_e=o(function(t,e,r,n){Wt=ge().c4;let i=ge().securityLevel,a;i==="sandbox"&&(a=qe("#i"+e));let s=i==="sandbox"?qe(a.nodes()[0].contentDocument.body):qe("body"),l=n.db;n.db.setWrap(Wt.wrap),AQ=l.getC4ShapeInRow(),WL=l.getC4BoundaryInRow(),X.debug(`C:${JSON.stringify(Wt,null,2)}`);let u=i==="sandbox"?s.select(`[id="${e}"]`):qe(`[id="${e}"]`);Al.insertComputerIcon(u),Al.insertDatabaseIcon(u),Al.insertClockIcon(u);let h=new IT(n);h.setData(Wt.diagramMarginX,Wt.diagramMarginX,Wt.diagramMarginY,Wt.diagramMarginY),h.data.widthLimit=screen.availWidth,NT=Wt.diagramMarginX,MT=Wt.diagramMarginY;let f=n.db.getTitle(),d=n.db.getBoundaries("");LQ(u,"",h,d,n),Al.insertArrowHead(u),Al.insertArrowEnd(u),Al.insertArrowCrossHead(u),Al.insertArrowFilledHead(u),P_e(u,n.db.getRels(),n.db.getC4Shape,n),h.data.stopx=NT,h.data.stopy=MT;let p=h.data,g=p.stopy-p.starty+2*Wt.diagramMarginY,v=p.stopx-p.startx+2*Wt.diagramMarginX;f&&u.append("text").text(f).attr("x",(p.stopx-p.startx)/2-4*Wt.diagramMarginX).attr("y",p.starty+Wt.diagramMarginY),mn(u,g,v,Wt.useMaxWidth);let x=f?60:0;u.attr("viewBox",p.startx-Wt.diagramMarginX+" -"+(Wt.diagramMarginY+x)+" "+v+" "+(g+x)),X.debug("models:",p)},"draw"),XL={drawPersonOrSystemArray:DQ,drawBoundary:_Q,setConf:YL,draw:B_e}});var F_e,NQ,MQ=M(()=>{"use strict";F_e=o(t=>`.person { + stroke: ${t.personBorder}; + fill: ${t.personBkg}; + } +`,"getStyles"),NQ=F_e});var IQ={};dr(IQ,{diagram:()=>$_e});var $_e,OQ=M(()=>{"use strict";RA();GA();RQ();MQ();$_e={parser:sH,db:lv,renderer:XL,styles:NQ,init:o(({c4:t,wrap:e})=>{XL.setConf(t),lv.setWrap(e)},"init")}});function ZQ(t){return typeof t>"u"||t===null}function U_e(t){return typeof t=="object"&&t!==null}function H_e(t){return Array.isArray(t)?t:ZQ(t)?[]:[t]}function q_e(t,e){var r,n,i,a;if(e)for(a=Object.keys(e),r=0,n=a.length;rl&&(a=" ... ",e=n-l+a.length),r-n>l&&(s=" ...",r=n+l-s.length),{str:a+t.slice(e,r).replace(/\t/g,"\u2192")+s,pos:n-e+a.length}}function KL(t,e){return Pi.repeat(" ",e-t.length)+t}function eDe(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),typeof e.indent!="number"&&(e.indent=1),typeof e.linesBefore!="number"&&(e.linesBefore=3),typeof e.linesAfter!="number"&&(e.linesAfter=2);for(var r=/\r?\n|\r|\0/g,n=[0],i=[],a,s=-1;a=r.exec(t.buffer);)i.push(a.index),n.push(a.index+a[0].length),t.position<=a.index&&s<0&&(s=n.length-2);s<0&&(s=n.length-1);var l="",u,h,f=Math.min(t.line+e.linesAfter,i.length).toString().length,d=e.maxLength-(e.indent+f+3);for(u=1;u<=e.linesBefore&&!(s-u<0);u++)h=jL(t.buffer,n[s-u],i[s-u],t.position-(n[s]-n[s-u]),d),l=Pi.repeat(" ",e.indent)+KL((t.line-u+1).toString(),f)+" | "+h.str+` +`+l;for(h=jL(t.buffer,n[s],i[s],t.position,d),l+=Pi.repeat(" ",e.indent)+KL((t.line+1).toString(),f)+" | "+h.str+` +`,l+=Pi.repeat("-",e.indent+f+3+h.pos)+`^ +`,u=1;u<=e.linesAfter&&!(s+u>=i.length);u++)h=jL(t.buffer,n[s+u],i[s+u],t.position-(n[s]-n[s+u]),d),l+=Pi.repeat(" ",e.indent)+KL((t.line+u+1).toString(),f)+" | "+h.str+` +`;return l.replace(/\n$/,"")}function iDe(t){var e={};return t!==null&&Object.keys(t).forEach(function(r){t[r].forEach(function(n){e[String(n)]=r})}),e}function aDe(t,e){if(e=e||{},Object.keys(e).forEach(function(r){if(rDe.indexOf(r)===-1)throw new Is('Unknown option "'+r+'" is met in definition of "'+t+'" YAML type.')}),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(r){return r},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=iDe(e.styleAliases||null),nDe.indexOf(this.kind)===-1)throw new Is('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}function BQ(t,e){var r=[];return t[e].forEach(function(n){var i=r.length;r.forEach(function(a,s){a.tag===n.tag&&a.kind===n.kind&&a.multi===n.multi&&(i=s)}),r[i]=n}),r}function sDe(){var t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},e,r;function n(i){i.multi?(t.multi[i.kind].push(i),t.multi.fallback.push(i)):t[i.kind][i.tag]=t.fallback[i.tag]=i}for(o(n,"collectType"),e=0,r=arguments.length;e=0&&(e=e.slice(1)),e===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:r*parseFloat(e,10)}function RDe(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(Pi.isNegativeZero(t))return"-0.0";return r=t.toString(10),LDe.test(r)?r.replace("e",".e"):r}function NDe(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||Pi.isNegativeZero(t))}function ODe(t){return t===null?!1:tZ.exec(t)!==null||rZ.exec(t)!==null}function PDe(t){var e,r,n,i,a,s,l,u=0,h=null,f,d,p;if(e=tZ.exec(t),e===null&&(e=rZ.exec(t)),e===null)throw new Error("Date resolve error");if(r=+e[1],n=+e[2]-1,i=+e[3],!e[4])return new Date(Date.UTC(r,n,i));if(a=+e[4],s=+e[5],l=+e[6],e[7]){for(u=e[7].slice(0,3);u.length<3;)u+="0";u=+u}return e[9]&&(f=+e[10],d=+(e[11]||0),h=(f*60+d)*6e4,e[9]==="-"&&(h=-h)),p=new Date(Date.UTC(r,n,i,a,s,l,u)),h&&p.setTime(p.getTime()-h),p}function BDe(t){return t.toISOString()}function $De(t){return t==="<<"||t===null}function GDe(t){if(t===null)return!1;var e,r,n=0,i=t.length,a=n9;for(r=0;r64)){if(e<0)return!1;n+=6}return n%8===0}function VDe(t){var e,r,n=t.replace(/[\r\n=]/g,""),i=n.length,a=n9,s=0,l=[];for(e=0;e>16&255),l.push(s>>8&255),l.push(s&255)),s=s<<6|a.indexOf(n.charAt(e));return r=i%4*6,r===0?(l.push(s>>16&255),l.push(s>>8&255),l.push(s&255)):r===18?(l.push(s>>10&255),l.push(s>>2&255)):r===12&&l.push(s>>4&255),new Uint8Array(l)}function UDe(t){var e="",r=0,n,i,a=t.length,s=n9;for(n=0;n>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]),r=(r<<8)+t[n];return i=a%3,i===0?(e+=s[r>>18&63],e+=s[r>>12&63],e+=s[r>>6&63],e+=s[r&63]):i===2?(e+=s[r>>10&63],e+=s[r>>4&63],e+=s[r<<2&63],e+=s[64]):i===1&&(e+=s[r>>2&63],e+=s[r<<4&63],e+=s[64],e+=s[64]),e}function HDe(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}function XDe(t){if(t===null)return!0;var e=[],r,n,i,a,s,l=t;for(r=0,n=l.length;r>10)+55296,(t-65536&1023)+56320)}function dLe(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||nZ,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function uZ(t,e){var r={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return r.snippet=tDe(r),new Is(e,r)}function Zt(t,e){throw uZ(t,e)}function BT(t,e){t.onWarning&&t.onWarning.call(null,uZ(t,e))}function Yh(t,e,r,n){var i,a,s,l;if(e1&&(t.result+=Pi.repeat(` +`,e-1))}function pLe(t,e,r){var n,i,a,s,l,u,h,f,d=t.kind,p=t.result,m;if(m=t.input.charCodeAt(t.position),Os(m)||bm(m)||m===35||m===38||m===42||m===33||m===124||m===62||m===39||m===34||m===37||m===64||m===96||(m===63||m===45)&&(i=t.input.charCodeAt(t.position+1),Os(i)||r&&bm(i)))return!1;for(t.kind="scalar",t.result="",a=s=t.position,l=!1;m!==0;){if(m===58){if(i=t.input.charCodeAt(t.position+1),Os(i)||r&&bm(i))break}else if(m===35){if(n=t.input.charCodeAt(t.position-1),Os(n))break}else{if(t.position===t.lineStart&&zT(t)||r&&bm(m))break;if(bc(m))if(u=t.line,h=t.lineStart,f=t.lineIndent,Ci(t,!1,-1),t.lineIndent>=e){l=!0,m=t.input.charCodeAt(t.position);continue}else{t.position=s,t.line=u,t.lineStart=h,t.lineIndent=f;break}}l&&(Yh(t,a,s,!1),a9(t,t.line-u),a=s=t.position,l=!1),Yd(m)||(s=t.position+1),m=t.input.charCodeAt(++t.position)}return Yh(t,a,s,!1),t.result?!0:(t.kind=d,t.result=p,!1)}function mLe(t,e){var r,n,i;if(r=t.input.charCodeAt(t.position),r!==39)return!1;for(t.kind="scalar",t.result="",t.position++,n=i=t.position;(r=t.input.charCodeAt(t.position))!==0;)if(r===39)if(Yh(t,n,t.position,!0),r=t.input.charCodeAt(++t.position),r===39)n=t.position,t.position++,i=t.position;else return!0;else bc(r)?(Yh(t,n,i,!0),a9(t,Ci(t,!1,e)),n=i=t.position):t.position===t.lineStart&&zT(t)?Zt(t,"unexpected end of the document within a single quoted scalar"):(t.position++,i=t.position);Zt(t,"unexpected end of the stream within a single quoted scalar")}function gLe(t,e){var r,n,i,a,s,l;if(l=t.input.charCodeAt(t.position),l!==34)return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;(l=t.input.charCodeAt(t.position))!==0;){if(l===34)return Yh(t,r,t.position,!0),t.position++,!0;if(l===92){if(Yh(t,r,t.position,!0),l=t.input.charCodeAt(++t.position),bc(l))Ci(t,!1,e);else if(l<256&&lZ[l])t.result+=cZ[l],t.position++;else if((s=uLe(l))>0){for(i=s,a=0;i>0;i--)l=t.input.charCodeAt(++t.position),(s=cLe(l))>=0?a=(a<<4)+s:Zt(t,"expected hexadecimal character");t.result+=fLe(a),t.position++}else Zt(t,"unknown escape sequence");r=n=t.position}else bc(l)?(Yh(t,r,n,!0),a9(t,Ci(t,!1,e)),r=n=t.position):t.position===t.lineStart&&zT(t)?Zt(t,"unexpected end of the document within a double quoted scalar"):(t.position++,n=t.position)}Zt(t,"unexpected end of the stream within a double quoted scalar")}function yLe(t,e){var r=!0,n,i,a,s=t.tag,l,u=t.anchor,h,f,d,p,m,g=Object.create(null),y,v,x,b;if(b=t.input.charCodeAt(t.position),b===91)f=93,m=!1,l=[];else if(b===123)f=125,m=!0,l={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=l),b=t.input.charCodeAt(++t.position);b!==0;){if(Ci(t,!0,e),b=t.input.charCodeAt(t.position),b===f)return t.position++,t.tag=s,t.anchor=u,t.kind=m?"mapping":"sequence",t.result=l,!0;r?b===44&&Zt(t,"expected the node content, but found ','"):Zt(t,"missed comma between flow collection entries"),v=y=x=null,d=p=!1,b===63&&(h=t.input.charCodeAt(t.position+1),Os(h)&&(d=p=!0,t.position++,Ci(t,!0,e))),n=t.line,i=t.lineStart,a=t.position,wm(t,e,OT,!1,!0),v=t.tag,y=t.result,Ci(t,!0,e),b=t.input.charCodeAt(t.position),(p||t.line===n)&&b===58&&(d=!0,b=t.input.charCodeAt(++t.position),Ci(t,!0,e),wm(t,e,OT,!1,!0),x=t.result),m?Tm(t,l,g,v,y,x,n,i,a):d?l.push(Tm(t,null,g,v,y,x,n,i,a)):l.push(y),Ci(t,!0,e),b=t.input.charCodeAt(t.position),b===44?(r=!0,b=t.input.charCodeAt(++t.position)):r=!1}Zt(t,"unexpected end of the stream within a flow collection")}function vLe(t,e){var r,n,i=QL,a=!1,s=!1,l=e,u=0,h=!1,f,d;if(d=t.input.charCodeAt(t.position),d===124)n=!1;else if(d===62)n=!0;else return!1;for(t.kind="scalar",t.result="";d!==0;)if(d=t.input.charCodeAt(++t.position),d===43||d===45)QL===i?i=d===43?FQ:aLe:Zt(t,"repeat of a chomping mode identifier");else if((f=hLe(d))>=0)f===0?Zt(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?Zt(t,"repeat of an indentation width identifier"):(l=e+f-1,s=!0);else break;if(Yd(d)){do d=t.input.charCodeAt(++t.position);while(Yd(d));if(d===35)do d=t.input.charCodeAt(++t.position);while(!bc(d)&&d!==0)}for(;d!==0;){for(i9(t),t.lineIndent=0,d=t.input.charCodeAt(t.position);(!s||t.lineIndentl&&(l=t.lineIndent),bc(d)){u++;continue}if(t.lineIndente)&&u!==0)Zt(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(v&&(s=t.line,l=t.lineStart,u=t.position),wm(t,e,PT,!0,i)&&(v?g=t.result:y=t.result),v||(Tm(t,d,p,m,g,y,s,l,u),m=g=y=null),Ci(t,!0,-1),b=t.input.charCodeAt(t.position)),(t.line===a||t.lineIndent>e)&&b!==0)Zt(t,"bad indentation of a mapping entry");else if(t.lineIndente?u=1:t.lineIndent===e?u=0:t.lineIndente?u=1:t.lineIndent===e?u=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),d=0,p=t.implicitTypes.length;d"),t.result!==null&&g.kind!==t.kind&&Zt(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+g.kind+'", not "'+t.kind+'"'),g.resolve(t.result,t.tag)?(t.result=g.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Zt(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||f}function kLe(t){var e=t.position,r,n,i,a=!1,s;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);(s=t.input.charCodeAt(t.position))!==0&&(Ci(t,!0,-1),s=t.input.charCodeAt(t.position),!(t.lineIndent>0||s!==37));){for(a=!0,s=t.input.charCodeAt(++t.position),r=t.position;s!==0&&!Os(s);)s=t.input.charCodeAt(++t.position);for(n=t.input.slice(r,t.position),i=[],n.length<1&&Zt(t,"directive name must not be less than one character in length");s!==0;){for(;Yd(s);)s=t.input.charCodeAt(++t.position);if(s===35){do s=t.input.charCodeAt(++t.position);while(s!==0&&!bc(s));break}if(bc(s))break;for(r=t.position;s!==0&&!Os(s);)s=t.input.charCodeAt(++t.position);i.push(t.input.slice(r,t.position))}s!==0&&i9(t),Xh.call(GQ,n)?GQ[n](t,n,i):BT(t,'unknown document directive "'+n+'"')}if(Ci(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,Ci(t,!0,-1)):a&&Zt(t,"directives end mark is expected"),wm(t,t.lineIndent-1,PT,!1,!0),Ci(t,!0,-1),t.checkLineBreaks&&oLe.test(t.input.slice(e,t.position))&&BT(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&zT(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,Ci(t,!0,-1));return}if(t.position"u"&&(r=e,e=null);var n=hZ(t,r);if(typeof e!="function")return n;for(var i=0,a=n.length;i=55296&&r<=56319&&e+1=56320&&n<=57343)?(r-55296)*1024+n-56320+65536:r}function bZ(t){var e=/^\n* /;return e.test(t)}function JLe(t,e,r,n,i,a,s,l){var u,h=0,f=null,d=!1,p=!1,m=n!==-1,g=-1,y=QLe(v2(t,0))&&ZLe(v2(t,t.length-1));if(e||s)for(u=0;u=65536?u+=2:u++){if(h=v2(t,u),!w2(h))return xm;y=y&&WQ(h,f,l),f=h}else{for(u=0;u=65536?u+=2:u++){if(h=v2(t,u),h===b2)d=!0,m&&(p=p||u-g-1>n&&t[g+1]!==" ",g=u);else if(!w2(h))return xm;y=y&&WQ(h,f,l),f=h}p=p||m&&u-g-1>n&&t[g+1]!==" "}return!d&&!p?y&&!s&&!i(t)?TZ:a===T2?xm:t9:r>9&&bZ(t)?xm:s?a===T2?xm:t9:p?kZ:wZ}function e9e(t,e,r,n,i){t.dump=(function(){if(e.length===0)return t.quotingType===T2?'""':"''";if(!t.noCompatMode&&(HLe.indexOf(e)!==-1||qLe.test(e)))return t.quotingType===T2?'"'+e+'"':"'"+e+"'";var a=t.indent*Math.max(1,r),s=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),l=n||t.flowLevel>-1&&r>=t.flowLevel;function u(h){return KLe(t,h)}switch(o(u,"testAmbiguity"),JLe(e,l,t.indent,s,u,t.quotingType,t.forceQuotes&&!n,i)){case TZ:return e;case t9:return"'"+e.replace(/'/g,"''")+"'";case wZ:return"|"+YQ(e,t.indent)+XQ(HQ(e,a));case kZ:return">"+YQ(e,t.indent)+XQ(HQ(t9e(e,s),a));case xm:return'"'+r9e(e)+'"';default:throw new Is("impossible error: invalid scalar style")}})()}function YQ(t,e){var r=bZ(t)?String(e):"",n=t[t.length-1]===` +`,i=n&&(t[t.length-2]===` +`||t===` +`),a=i?"+":n?"":"-";return r+a+` +`}function XQ(t){return t[t.length-1]===` +`?t.slice(0,-1):t}function t9e(t,e){for(var r=/(\n+)([^\n]*)/g,n=(function(){var h=t.indexOf(` +`);return h=h!==-1?h:t.length,r.lastIndex=h,jQ(t.slice(0,h),e)})(),i=t[0]===` +`||t[0]===" ",a,s;s=r.exec(t);){var l=s[1],u=s[2];a=u[0]===" ",n+=l+(!i&&!a&&u!==""?` +`:"")+jQ(u,e),i=a}return n}function jQ(t,e){if(t===""||t[0]===" ")return t;for(var r=/ [^ ]/g,n,i=0,a,s=0,l=0,u="";n=r.exec(t);)l=n.index,l-i>e&&(a=s>i?s:l,u+=` +`+t.slice(i,a),i=a+1),s=l;return u+=` +`,t.length-i>e&&s>i?u+=t.slice(i,s)+` +`+t.slice(s+1):u+=t.slice(i),u.slice(1)}function r9e(t){for(var e="",r=0,n,i=0;i=65536?i+=2:i++)r=v2(t,i),n=Oa[r],!n&&w2(r)?(e+=t[i],r>=65536&&(e+=t[i+1])):e+=n||YLe(r);return e}function n9e(t,e,r){var n="",i=t.tag,a,s,l;for(a=0,s=r.length;a"u"&&Nu(t,e,null,!1,!1))&&(n!==""&&(n+=","+(t.condenseFlow?"":" ")),n+=t.dump);t.tag=i,t.dump="["+n+"]"}function KQ(t,e,r,n){var i="",a=t.tag,s,l,u;for(s=0,l=r.length;s"u"&&Nu(t,e+1,null,!0,!0,!1,!0))&&((!n||i!=="")&&(i+=e9(t,e)),t.dump&&b2===t.dump.charCodeAt(0)?i+="-":i+="- ",i+=t.dump);t.tag=a,t.dump=i||"[]"}function i9e(t,e,r){var n="",i=t.tag,a=Object.keys(r),s,l,u,h,f;for(s=0,l=a.length;s1024&&(f+="? "),f+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Nu(t,e,h,!1,!1)&&(f+=t.dump,n+=f));t.tag=i,t.dump="{"+n+"}"}function a9e(t,e,r,n){var i="",a=t.tag,s=Object.keys(r),l,u,h,f,d,p;if(t.sortKeys===!0)s.sort();else if(typeof t.sortKeys=="function")s.sort(t.sortKeys);else if(t.sortKeys)throw new Is("sortKeys must be a boolean or a function");for(l=0,u=s.length;l1024,d&&(t.dump&&b2===t.dump.charCodeAt(0)?p+="?":p+="? "),p+=t.dump,d&&(p+=e9(t,e)),Nu(t,e+1,f,!0,d)&&(t.dump&&b2===t.dump.charCodeAt(0)?p+=":":p+=": ",p+=t.dump,i+=p));t.tag=a,t.dump=i||"{}"}function QQ(t,e,r){var n,i,a,s,l,u;for(i=r?t.explicitTypes:t.implicitTypes,a=0,s=i.length;a tag resolver accepts not "'+u+'" style');t.dump=n}return!0}return!1}function Nu(t,e,r,n,i,a,s){t.tag=null,t.dump=r,QQ(t,r,!1)||QQ(t,r,!0);var l=dZ.call(t.dump),u=n,h;n&&(n=t.flowLevel<0||t.flowLevel>e);var f=l==="[object Object]"||l==="[object Array]",d,p;if(f&&(d=t.duplicates.indexOf(r),p=d!==-1),(t.tag!==null&&t.tag!=="?"||p||t.indent!==2&&e>0)&&(i=!1),p&&t.usedDuplicates[d])t.dump="*ref_"+d;else{if(f&&p&&!t.usedDuplicates[d]&&(t.usedDuplicates[d]=!0),l==="[object Object]")n&&Object.keys(t.dump).length!==0?(a9e(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(i9e(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object Array]")n&&t.dump.length!==0?(t.noArrayIndent&&!s&&e>0?KQ(t,e-1,t.dump,i):KQ(t,e,t.dump,i),p&&(t.dump="&ref_"+d+t.dump)):(n9e(t,e,t.dump),p&&(t.dump="&ref_"+d+" "+t.dump));else if(l==="[object String]")t.tag!=="?"&&e9e(t,t.dump,e,a,u);else{if(l==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new Is("unacceptable kind of an object to dump "+l)}t.tag!==null&&t.tag!=="?"&&(h=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?h="!"+h:h.slice(0,18)==="tag:yaml.org,2002:"?h="!!"+h.slice(18):h="!<"+h+">",t.dump=h+" "+t.dump)}return!0}function s9e(t,e){var r=[],n=[],i,a;for(r9(t,r,n),i=0,a=n.length;i{"use strict";o(ZQ,"isNothing");o(U_e,"isObject");o(H_e,"toArray");o(q_e,"extend");o(W_e,"repeat");o(Y_e,"isNegativeZero");X_e=ZQ,j_e=U_e,K_e=H_e,Q_e=W_e,Z_e=Y_e,J_e=q_e,Pi={isNothing:X_e,isObject:j_e,toArray:K_e,repeat:Q_e,isNegativeZero:Z_e,extend:J_e};o(JQ,"formatError");o(x2,"YAMLException$1");x2.prototype=Object.create(Error.prototype);x2.prototype.constructor=x2;x2.prototype.toString=o(function(e){return this.name+": "+JQ(this,e)},"toString");Is=x2;o(jL,"getLine");o(KL,"padStart");o(eDe,"makeSnippet");tDe=eDe,rDe=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],nDe=["scalar","sequence","mapping"];o(iDe,"compileStyleAliases");o(aDe,"Type$1");Ia=aDe;o(BQ,"compileList");o(sDe,"compileMap");o(ZL,"Schema$1");ZL.prototype.extend=o(function(e){var r=[],n=[];if(e instanceof Ia)n.push(e);else if(Array.isArray(e))n=n.concat(e);else if(e&&(Array.isArray(e.implicit)||Array.isArray(e.explicit)))e.implicit&&(r=r.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit));else throw new Is("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");r.forEach(function(a){if(!(a instanceof Ia))throw new Is("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(a.loadKind&&a.loadKind!=="scalar")throw new Is("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(a.multi)throw new Is("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),n.forEach(function(a){if(!(a instanceof Ia))throw new Is("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var i=Object.create(ZL.prototype);return i.implicit=(this.implicit||[]).concat(r),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=BQ(i,"implicit"),i.compiledExplicit=BQ(i,"explicit"),i.compiledTypeMap=sDe(i.compiledImplicit,i.compiledExplicit),i},"extend");oDe=ZL,lDe=new Ia("tag:yaml.org,2002:str",{kind:"scalar",construct:o(function(t){return t!==null?t:""},"construct")}),cDe=new Ia("tag:yaml.org,2002:seq",{kind:"sequence",construct:o(function(t){return t!==null?t:[]},"construct")}),uDe=new Ia("tag:yaml.org,2002:map",{kind:"mapping",construct:o(function(t){return t!==null?t:{}},"construct")}),hDe=new oDe({explicit:[lDe,cDe,uDe]});o(fDe,"resolveYamlNull");o(dDe,"constructYamlNull");o(pDe,"isNull");mDe=new Ia("tag:yaml.org,2002:null",{kind:"scalar",resolve:fDe,construct:dDe,predicate:pDe,represent:{canonical:o(function(){return"~"},"canonical"),lowercase:o(function(){return"null"},"lowercase"),uppercase:o(function(){return"NULL"},"uppercase"),camelcase:o(function(){return"Null"},"camelcase"),empty:o(function(){return""},"empty")},defaultStyle:"lowercase"});o(gDe,"resolveYamlBoolean");o(yDe,"constructYamlBoolean");o(vDe,"isBoolean");xDe=new Ia("tag:yaml.org,2002:bool",{kind:"scalar",resolve:gDe,construct:yDe,predicate:vDe,represent:{lowercase:o(function(t){return t?"true":"false"},"lowercase"),uppercase:o(function(t){return t?"TRUE":"FALSE"},"uppercase"),camelcase:o(function(t){return t?"True":"False"},"camelcase")},defaultStyle:"lowercase"});o(bDe,"isHexCode");o(TDe,"isOctCode");o(wDe,"isDecCode");o(kDe,"resolveYamlInteger");o(EDe,"constructYamlInteger");o(SDe,"isInteger");CDe=new Ia("tag:yaml.org,2002:int",{kind:"scalar",resolve:kDe,construct:EDe,predicate:SDe,represent:{binary:o(function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},"binary"),octal:o(function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},"octal"),decimal:o(function(t){return t.toString(10)},"decimal"),hexadecimal:o(function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)},"hexadecimal")},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),ADe=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");o(_De,"resolveYamlFloat");o(DDe,"constructYamlFloat");LDe=/^[-+]?[0-9]+e/;o(RDe,"representYamlFloat");o(NDe,"isFloat");MDe=new Ia("tag:yaml.org,2002:float",{kind:"scalar",resolve:_De,construct:DDe,predicate:NDe,represent:RDe,defaultStyle:"lowercase"}),eZ=hDe.extend({implicit:[mDe,xDe,CDe,MDe]}),IDe=eZ,tZ=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),rZ=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");o(ODe,"resolveYamlTimestamp");o(PDe,"constructYamlTimestamp");o(BDe,"representYamlTimestamp");FDe=new Ia("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:ODe,construct:PDe,instanceOf:Date,represent:BDe});o($De,"resolveYamlMerge");zDe=new Ia("tag:yaml.org,2002:merge",{kind:"scalar",resolve:$De}),n9=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;o(GDe,"resolveYamlBinary");o(VDe,"constructYamlBinary");o(UDe,"representYamlBinary");o(HDe,"isBinary");qDe=new Ia("tag:yaml.org,2002:binary",{kind:"scalar",resolve:GDe,construct:VDe,predicate:HDe,represent:UDe}),WDe=Object.prototype.hasOwnProperty,YDe=Object.prototype.toString;o(XDe,"resolveYamlOmap");o(jDe,"constructYamlOmap");KDe=new Ia("tag:yaml.org,2002:omap",{kind:"sequence",resolve:XDe,construct:jDe}),QDe=Object.prototype.toString;o(ZDe,"resolveYamlPairs");o(JDe,"constructYamlPairs");eLe=new Ia("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:ZDe,construct:JDe}),tLe=Object.prototype.hasOwnProperty;o(rLe,"resolveYamlSet");o(nLe,"constructYamlSet");iLe=new Ia("tag:yaml.org,2002:set",{kind:"mapping",resolve:rLe,construct:nLe}),nZ=IDe.extend({implicit:[FDe,zDe],explicit:[qDe,KDe,eLe,iLe]}),Xh=Object.prototype.hasOwnProperty,OT=1,iZ=2,aZ=3,PT=4,QL=1,aLe=2,FQ=3,sLe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,oLe=/[\x85\u2028\u2029]/,lLe=/[,\[\]\{\}]/,sZ=/^(?:!|!!|![a-z\-]+!)$/i,oZ=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;o($Q,"_class");o(bc,"is_EOL");o(Yd,"is_WHITE_SPACE");o(Os,"is_WS_OR_EOL");o(bm,"is_FLOW_INDICATOR");o(cLe,"fromHexCode");o(uLe,"escapedHexLen");o(hLe,"fromDecimalCode");o(zQ,"simpleEscapeSequence");o(fLe,"charFromCodepoint");lZ=new Array(256),cZ=new Array(256);for(Wd=0;Wd<256;Wd++)lZ[Wd]=zQ(Wd)?1:0,cZ[Wd]=zQ(Wd);o(dLe,"State$1");o(uZ,"generateError");o(Zt,"throwError");o(BT,"throwWarning");GQ={YAML:o(function(e,r,n){var i,a,s;e.version!==null&&Zt(e,"duplication of %YAML directive"),n.length!==1&&Zt(e,"YAML directive accepts exactly one argument"),i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]),i===null&&Zt(e,"ill-formed argument of the YAML directive"),a=parseInt(i[1],10),s=parseInt(i[2],10),a!==1&&Zt(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=s<2,s!==1&&s!==2&&BT(e,"unsupported YAML version of the document")},"handleYamlDirective"),TAG:o(function(e,r,n){var i,a;n.length!==2&&Zt(e,"TAG directive accepts exactly two arguments"),i=n[0],a=n[1],sZ.test(i)||Zt(e,"ill-formed tag handle (first argument) of the TAG directive"),Xh.call(e.tagMap,i)&&Zt(e,'there is a previously declared suffix for "'+i+'" tag handle'),oZ.test(a)||Zt(e,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch{Zt(e,"tag prefix is malformed: "+a)}e.tagMap[i]=a},"handleTagDirective")};o(Yh,"captureSegment");o(VQ,"mergeMappings");o(Tm,"storeMappingPair");o(i9,"readLineBreak");o(Ci,"skipSeparationSpace");o(zT,"testDocumentSeparator");o(a9,"writeFoldedLines");o(pLe,"readPlainScalar");o(mLe,"readSingleQuotedScalar");o(gLe,"readDoubleQuotedScalar");o(yLe,"readFlowCollection");o(vLe,"readBlockScalar");o(UQ,"readBlockSequence");o(xLe,"readBlockMapping");o(bLe,"readTagProperty");o(TLe,"readAnchorProperty");o(wLe,"readAlias");o(wm,"composeNode");o(kLe,"readDocument");o(hZ,"loadDocuments");o(ELe,"loadAll$1");o(SLe,"load$1");CLe=ELe,ALe=SLe,fZ={loadAll:CLe,load:ALe},dZ=Object.prototype.toString,pZ=Object.prototype.hasOwnProperty,s9=65279,_Le=9,b2=10,DLe=13,LLe=32,RLe=33,NLe=34,JL=35,MLe=37,ILe=38,OLe=39,PLe=42,mZ=44,BLe=45,FT=58,FLe=61,$Le=62,zLe=63,GLe=64,gZ=91,yZ=93,VLe=96,vZ=123,ULe=124,xZ=125,Oa={};Oa[0]="\\0";Oa[7]="\\a";Oa[8]="\\b";Oa[9]="\\t";Oa[10]="\\n";Oa[11]="\\v";Oa[12]="\\f";Oa[13]="\\r";Oa[27]="\\e";Oa[34]='\\"';Oa[92]="\\\\";Oa[133]="\\N";Oa[160]="\\_";Oa[8232]="\\L";Oa[8233]="\\P";HLe=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],qLe=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;o(WLe,"compileStyleMap");o(YLe,"encodeHex");XLe=1,T2=2;o(jLe,"State");o(HQ,"indentString");o(e9,"generateNextLine");o(KLe,"testImplicitResolving");o($T,"isWhitespace");o(w2,"isPrintable");o(qQ,"isNsCharOrWhitespace");o(WQ,"isPlainSafe");o(QLe,"isPlainSafeFirst");o(ZLe,"isPlainSafeLast");o(v2,"codePointAt");o(bZ,"needIndentIndicator");TZ=1,t9=2,wZ=3,kZ=4,xm=5;o(JLe,"chooseScalarStyle");o(e9e,"writeScalar");o(YQ,"blockHeader");o(XQ,"dropEndingNewline");o(t9e,"foldString");o(jQ,"foldLine");o(r9e,"escapeString");o(n9e,"writeFlowSequence");o(KQ,"writeBlockSequence");o(i9e,"writeFlowMapping");o(a9e,"writeBlockMapping");o(QQ,"detectType");o(Nu,"writeNode");o(s9e,"getDuplicateReferences");o(r9,"inspectNode");o(o9e,"dump$1");l9e=o9e,c9e={dump:l9e};o(o9,"renamed");jh=eZ,Kh=fZ.load,N6t=fZ.loadAll,M6t=c9e.dump,I6t=o9("safeLoad","load"),O6t=o9("safeLoadAll","loadAll"),P6t=o9("safeDump","dump")});function h9(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function DZ(t){jd=t}function on(t,e=""){let r=typeof t=="string"?t:t.source,n={replace:o((i,a)=>{let s=typeof a=="string"?a:a.source;return s=s.replace(as.caret,"$1"),r=r.replace(i,s),n},"replace"),getRegex:o(()=>new RegExp(r,e),"getRegex")};return n}function Tc(t,e){if(e){if(as.escapeTest.test(t))return t.replace(as.escapeReplace,SZ)}else if(as.escapeTestNoEncode.test(t))return t.replace(as.escapeReplaceNoEncode,SZ);return t}function CZ(t){try{t=encodeURI(t).replace(as.percentDecode,"%")}catch{return null}return t}function AZ(t,e){let r=t.replace(as.findPipe,(a,s,l)=>{let u=!1,h=s;for(;--h>=0&&l[h]==="\\";)u=!u;return u?"|":" |"}),n=r.split(as.splitPipe),i=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length0?-2:-1}function _Z(t,e,r,n,i){let a=e.href,s=e.title||null,l=t[1].replace(i.other.outputLinkReplace,"$1");n.state.inLink=!0;let u={type:t[0].charAt(0)==="!"?"image":"link",raw:r,href:a,title:s,text:l,tokens:n.inlineTokens(l)};return n.state.inLink=!1,u}function H9e(t,e,r){let n=t.match(r.other.indentCodeCompensation);if(n===null)return e;let i=n[1];return e.split(` +`).map(a=>{let s=a.match(r.other.beginningSpace);if(s===null)return a;let[l]=s;return l.length>=i.length?a.slice(i.length):a}).join(` +`)}function nn(t,e){return Xd.parse(t,e)}var jd,A2,as,u9e,h9e,f9e,_2,d9e,f9,LZ,RZ,p9e,d9,m9e,p9,g9e,y9e,WT,m9,v9e,NZ,x9e,g9,EZ,b9e,T9e,w9e,k9e,MZ,E9e,YT,y9,IZ,S9e,OZ,C9e,A9e,_9e,PZ,D9e,L9e,BZ,R9e,N9e,M9e,I9e,O9e,P9e,B9e,UT,F9e,FZ,$Z,$9e,v9,z9e,l9,G9e,VT,E2,V9e,SZ,HT,Mu,qT,x9,Iu,C2,q9e,Xd,F6t,$6t,z6t,G6t,V6t,U6t,H6t,zZ=M(()=>{"use strict";o(h9,"L");jd=h9();o(DZ,"G");A2={exec:o(()=>null,"exec")};o(on,"h");as={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:o(t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\n]*)?(?:\\n|$))`),"listItemRegex"),nextBulletRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),"nextBulletRegex"),hrRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),"hrRegex"),fencesBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}(?:\`\`\`|~~~)`),"fencesBeginRegex"),headingBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}#`),"headingBeginRegex"),htmlBeginRegex:o(t=>new RegExp(`^ {0,${Math.min(3,t-1)}}<(?:[a-z].*>|!--)`,"i"),"htmlBeginRegex")},u9e=/^(?:[ \t]*(?:\n|$))+/,h9e=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,f9e=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,_2=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,d9e=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,f9=/(?:[*+-]|\d{1,9}[.)])/,LZ=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,RZ=on(LZ).replace(/bull/g,f9).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),p9e=on(LZ).replace(/bull/g,f9).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),d9=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,m9e=/^[^\n]+/,p9=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,g9e=on(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",p9).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),y9e=on(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,f9).getRegex(),WT="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",m9=/|$))/,v9e=on("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",m9).replace("tag",WT).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),NZ=on(d9).replace("hr",_2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",WT).getRegex(),x9e=on(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",NZ).getRegex(),g9={blockquote:x9e,code:h9e,def:g9e,fences:f9e,heading:d9e,hr:_2,html:v9e,lheading:RZ,list:y9e,newline:u9e,paragraph:NZ,table:A2,text:m9e},EZ=on("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",_2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",WT).getRegex(),b9e={...g9,lheading:p9e,table:EZ,paragraph:on(d9).replace("hr",_2).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",EZ).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",WT).getRegex()},T9e={...g9,html:on(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",m9).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:A2,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:on(d9).replace("hr",_2).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",RZ).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},w9e=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,k9e=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,MZ=/^( {2,}|\\)\n(?!\s*$)/,E9e=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,PZ=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,D9e=on(PZ,"u").replace(/punct/g,YT).getRegex(),L9e=on(PZ,"u").replace(/punct/g,OZ).getRegex(),BZ="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",R9e=on(BZ,"gu").replace(/notPunctSpace/g,IZ).replace(/punctSpace/g,y9).replace(/punct/g,YT).getRegex(),N9e=on(BZ,"gu").replace(/notPunctSpace/g,A9e).replace(/punctSpace/g,C9e).replace(/punct/g,OZ).getRegex(),M9e=on("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,IZ).replace(/punctSpace/g,y9).replace(/punct/g,YT).getRegex(),I9e=on(/\\(punct)/,"gu").replace(/punct/g,YT).getRegex(),O9e=on(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),P9e=on(m9).replace("(?:-->|$)","-->").getRegex(),B9e=on("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",P9e).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),UT=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`[^`]*`|[^\[\]\\`])*?/,F9e=on(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",UT).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),FZ=on(/^!?\[(label)\]\[(ref)\]/).replace("label",UT).replace("ref",p9).getRegex(),$Z=on(/^!?\[(ref)\](?:\[\])?/).replace("ref",p9).getRegex(),$9e=on("reflink|nolink(?!\\()","g").replace("reflink",FZ).replace("nolink",$Z).getRegex(),v9={_backpedal:A2,anyPunctuation:I9e,autolink:O9e,blockSkip:_9e,br:MZ,code:k9e,del:A2,emStrongLDelim:D9e,emStrongRDelimAst:R9e,emStrongRDelimUnd:M9e,escape:w9e,link:F9e,nolink:$Z,punctuation:S9e,reflink:FZ,reflinkSearch:$9e,tag:B9e,text:E9e,url:A2},z9e={...v9,link:on(/^!?\[(label)\]\((.*?)\)/).replace("label",UT).getRegex(),reflink:on(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",UT).getRegex()},l9={...v9,emStrongRDelimAst:N9e,emStrongLDelim:L9e,url:on(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},SZ=o(t=>V9e[t],"ke");o(Tc,"w");o(CZ,"J");o(AZ,"V");o(S2,"z");o(U9e,"ge");o(_Z,"fe");o(H9e,"Je");HT=class{static{o(this,"y")}options;rules;lexer;constructor(t){this.options=t||jd}space(t){let e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(t){let e=this.rules.block.code.exec(t);if(e){let r=e[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:e[0],codeBlockStyle:"indented",text:this.options.pedantic?r:S2(r,` +`)}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let r=e[0],n=H9e(r,e[3]||"",this.rules);return{type:"code",raw:r,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:n}}}heading(t){let e=this.rules.block.heading.exec(t);if(e){let r=e[2].trim();if(this.rules.other.endingHash.test(r)){let n=S2(r,"#");(this.options.pedantic||!n||this.rules.other.endingSpaceChar.test(n))&&(r=n.trim())}return{type:"heading",raw:e[0],depth:e[1].length,text:r,tokens:this.lexer.inline(r)}}}hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:S2(e[0],` +`)}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let r=S2(e[0],` +`).split(` +`),n="",i="",a=[];for(;r.length>0;){let s=!1,l=[],u;for(u=0;u1,i={type:"list",raw:"",ordered:n,start:n?+r.slice(0,-1):"",loose:!1,items:[]};r=n?`\\d{1,9}\\${r.slice(-1)}`:`\\${r}`,this.options.pedantic&&(r=n?r:"[*+-]");let a=this.rules.other.listItemRegex(r),s=!1;for(;t;){let u=!1,h="",f="";if(!(e=a.exec(t))||this.rules.block.hr.test(t))break;h=e[0],t=t.substring(h.length);let d=e[2].split(` +`,1)[0].replace(this.rules.other.listReplaceTabs,x=>" ".repeat(3*x.length)),p=t.split(` +`,1)[0],m=!d.trim(),g=0;if(this.options.pedantic?(g=2,f=d.trimStart()):m?g=e[1].length+1:(g=e[2].search(this.rules.other.nonSpaceChar),g=g>4?1:g,f=d.slice(g),g+=e[1].length),m&&this.rules.other.blankLine.test(p)&&(h+=p+` +`,t=t.substring(p.length+1),u=!0),!u){let x=this.rules.other.nextBulletRegex(g),b=this.rules.other.hrRegex(g),T=this.rules.other.fencesBeginRegex(g),S=this.rules.other.headingBeginRegex(g),w=this.rules.other.htmlBeginRegex(g);for(;t;){let k=t.split(` +`,1)[0],C;if(p=k,this.options.pedantic?(p=p.replace(this.rules.other.listReplaceNesting," "),C=p):C=p.replace(this.rules.other.tabCharGlobal," "),T.test(p)||S.test(p)||w.test(p)||x.test(p)||b.test(p))break;if(C.search(this.rules.other.nonSpaceChar)>=g||!p.trim())f+=` +`+C.slice(g);else{if(m||d.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||T.test(d)||S.test(d)||b.test(d))break;f+=` +`+p}!m&&!p.trim()&&(m=!0),h+=k+` +`,t=t.substring(k.length+1),d=C.slice(g)}}i.loose||(s?i.loose=!0:this.rules.other.doubleBlankLine.test(h)&&(s=!0));let y=null,v;this.options.gfm&&(y=this.rules.other.listIsTask.exec(f),y&&(v=y[0]!=="[ ] ",f=f.replace(this.rules.other.listReplaceTask,""))),i.items.push({type:"list_item",raw:h,task:!!y,checked:v,loose:!1,text:f,tokens:[]}),i.raw+=h}let l=i.items.at(-1);if(l)l.raw=l.raw.trimEnd(),l.text=l.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let u=0;ud.type==="space"),f=h.length>0&&h.some(d=>this.rules.other.anyLine.test(d.raw));i.loose=f}if(i.loose)for(let u=0;u({text:l,tokens:this.lexer.inline(l),header:!1,align:a.align[u]})));return a}}lheading(t){let e=this.rules.block.lheading.exec(t);if(e)return{type:"heading",raw:e[0],depth:e[2].charAt(0)==="="?1:2,text:e[1],tokens:this.lexer.inline(e[1])}}paragraph(t){let e=this.rules.block.paragraph.exec(t);if(e){let r=e[1].charAt(e[1].length-1)===` +`?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:r,tokens:this.lexer.inline(r)}}}text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(t){let e=this.rules.inline.link.exec(t);if(e){let r=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(r)){if(!this.rules.other.endAngleBracket.test(r))return;let a=S2(r.slice(0,-1),"\\");if((r.length-a.length)%2===0)return}else{let a=U9e(e[2],"()");if(a===-2)return;if(a>-1){let s=(e[0].indexOf("!")===0?5:4)+e[1].length+a;e[2]=e[2].substring(0,a),e[0]=e[0].substring(0,s).trim(),e[3]=""}}let n=e[2],i="";if(this.options.pedantic){let a=this.rules.other.pedanticHrefTitle.exec(n);a&&(n=a[1],i=a[3])}else i=e[3]?e[3].slice(1,-1):"";return n=n.trim(),this.rules.other.startAngleBracket.test(n)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(r)?n=n.slice(1):n=n.slice(1,-1)),_Z(e,{href:n&&n.replace(this.rules.inline.anyPunctuation,"$1"),title:i&&i.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(t,e){let r;if((r=this.rules.inline.reflink.exec(t))||(r=this.rules.inline.nolink.exec(t))){let n=(r[2]||r[1]).replace(this.rules.other.multipleSpaceGlobal," "),i=e[n.toLowerCase()];if(!i){let a=r[0].charAt(0);return{type:"text",raw:a,text:a}}return _Z(r,i,r[0],this.lexer,this.rules)}}emStrong(t,e,r=""){let n=this.rules.inline.emStrongLDelim.exec(t);if(!(!n||n[3]&&r.match(this.rules.other.unicodeAlphaNumeric))&&(!(n[1]||n[2])||!r||this.rules.inline.punctuation.exec(r))){let i=[...n[0]].length-1,a,s,l=i,u=0,h=n[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(h.lastIndex=0,e=e.slice(-1*t.length+i);(n=h.exec(e))!=null;){if(a=n[1]||n[2]||n[3]||n[4]||n[5]||n[6],!a)continue;if(s=[...a].length,n[3]||n[4]){l+=s;continue}else if((n[5]||n[6])&&i%3&&!((i+s)%3)){u+=s;continue}if(l-=s,l>0)continue;s=Math.min(s,s+l+u);let f=[...n[0]][0].length,d=t.slice(0,i+n.index+f+s);if(Math.min(i,s)%2){let m=d.slice(1,-1);return{type:"em",raw:d,text:m,tokens:this.lexer.inlineTokens(m)}}let p=d.slice(2,-2);return{type:"strong",raw:d,text:p,tokens:this.lexer.inlineTokens(p)}}}}codespan(t){let e=this.rules.inline.code.exec(t);if(e){let r=e[2].replace(this.rules.other.newLineCharGlobal," "),n=this.rules.other.nonSpaceChar.test(r),i=this.rules.other.startingSpaceChar.test(r)&&this.rules.other.endingSpaceChar.test(r);return n&&i&&(r=r.substring(1,r.length-1)),{type:"codespan",raw:e[0],text:r}}}br(t){let e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t){let e=this.rules.inline.del.exec(t);if(e)return{type:"del",raw:e[0],text:e[2],tokens:this.lexer.inlineTokens(e[2])}}autolink(t){let e=this.rules.inline.autolink.exec(t);if(e){let r,n;return e[2]==="@"?(r=e[1],n="mailto:"+r):(r=e[1],n=r),{type:"link",raw:e[0],text:r,href:n,tokens:[{type:"text",raw:r,text:r}]}}}url(t){let e;if(e=this.rules.inline.url.exec(t)){let r,n;if(e[2]==="@")r=e[0],n="mailto:"+r;else{let i;do i=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??"";while(i!==e[0]);r=e[0],e[1]==="www."?n="http://"+e[0]:n=e[0]}return{type:"link",raw:e[0],text:r,href:n,tokens:[{type:"text",raw:r,text:r}]}}}inlineText(t){let e=this.rules.inline.text.exec(t);if(e){let r=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:e[0],escaped:r}}}},Mu=class c9{static{o(this,"l")}tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||jd,this.options.tokenizer=this.options.tokenizer||new HT,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let r={other:as,block:VT.normal,inline:E2.normal};this.options.pedantic?(r.block=VT.pedantic,r.inline=E2.pedantic):this.options.gfm&&(r.block=VT.gfm,this.options.breaks?r.inline=E2.breaks:r.inline=E2.gfm),this.tokenizer.rules=r}static get rules(){return{block:VT,inline:E2}}static lex(e,r){return new c9(r).lex(e)}static lexInline(e,r){return new c9(r).inlineTokens(e)}lex(e){e=e.replace(as.carriageReturn,` +`),this.blockTokens(e,this.tokens);for(let r=0;r(i=s.call({lexer:this},e,r))?(e=e.substring(i.raw.length),r.push(i),!0):!1))continue;if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length);let s=r.at(-1);i.raw.length===1&&s!==void 0?s.raw+=` +`:r.push(i);continue}if(i=this.tokenizer.code(e)){e=e.substring(i.raw.length);let s=r.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(` +`)?"":` +`)+i.raw,s.text+=` +`+i.text,this.inlineQueue.at(-1).src=s.text):r.push(i);continue}if(i=this.tokenizer.fences(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.heading(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.hr(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.blockquote(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.list(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.html(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.def(e)){e=e.substring(i.raw.length);let s=r.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(` +`)?"":` +`)+i.raw,s.text+=` +`+i.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title},r.push(i));continue}if(i=this.tokenizer.table(e)){e=e.substring(i.raw.length),r.push(i);continue}if(i=this.tokenizer.lheading(e)){e=e.substring(i.raw.length),r.push(i);continue}let a=e;if(this.options.extensions?.startBlock){let s=1/0,l=e.slice(1),u;this.options.extensions.startBlock.forEach(h=>{u=h.call({lexer:this},l),typeof u=="number"&&u>=0&&(s=Math.min(s,u))}),s<1/0&&s>=0&&(a=e.substring(0,s+1))}if(this.state.top&&(i=this.tokenizer.paragraph(a))){let s=r.at(-1);n&&s?.type==="paragraph"?(s.raw+=(s.raw.endsWith(` +`)?"":` +`)+i.raw,s.text+=` +`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(i),n=a.length!==e.length,e=e.substring(i.raw.length);continue}if(i=this.tokenizer.text(e)){e=e.substring(i.raw.length);let s=r.at(-1);s?.type==="text"?(s.raw+=(s.raw.endsWith(` +`)?"":` +`)+i.raw,s.text+=` +`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(i);continue}if(e){let s="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,r}inline(e,r=[]){return this.inlineQueue.push({src:e,tokens:r}),r}inlineTokens(e,r=[]){let n=e,i=null;if(this.tokens.links){let l=Object.keys(this.tokens.links);if(l.length>0)for(;(i=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)l.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(n=n.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(i=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,i.index)+"++"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(i=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)n=n.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let a=!1,s="";for(;e;){a||(s=""),a=!1;let l;if(this.options.extensions?.inline?.some(h=>(l=h.call({lexer:this},e,r))?(e=e.substring(l.raw.length),r.push(l),!0):!1))continue;if(l=this.tokenizer.escape(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.tag(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.link(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(l.raw.length);let h=r.at(-1);l.type==="text"&&h?.type==="text"?(h.raw+=l.raw,h.text+=l.text):r.push(l);continue}if(l=this.tokenizer.emStrong(e,n,s)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.codespan(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.br(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.del(e)){e=e.substring(l.raw.length),r.push(l);continue}if(l=this.tokenizer.autolink(e)){e=e.substring(l.raw.length),r.push(l);continue}if(!this.state.inLink&&(l=this.tokenizer.url(e))){e=e.substring(l.raw.length),r.push(l);continue}let u=e;if(this.options.extensions?.startInline){let h=1/0,f=e.slice(1),d;this.options.extensions.startInline.forEach(p=>{d=p.call({lexer:this},f),typeof d=="number"&&d>=0&&(h=Math.min(h,d))}),h<1/0&&h>=0&&(u=e.substring(0,h+1))}if(l=this.tokenizer.inlineText(u)){e=e.substring(l.raw.length),l.raw.slice(-1)!=="_"&&(s=l.raw.slice(-1)),a=!0;let h=r.at(-1);h?.type==="text"?(h.raw+=l.raw,h.text+=l.text):r.push(l);continue}if(e){let h="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(h);break}else throw new Error(h)}}return r}},qT=class{static{o(this,"P")}options;parser;constructor(t){this.options=t||jd}space(t){return""}code({text:t,lang:e,escaped:r}){let n=(e||"").match(as.notSpaceStart)?.[0],i=t.replace(as.endingNewline,"")+` +`;return n?'
'+(r?i:Tc(i,!0))+`
+`:"
"+(r?i:Tc(i,!0))+`
+`}blockquote({tokens:t}){return`
+${this.parser.parse(t)}
+`}html({text:t}){return t}def(t){return""}heading({tokens:t,depth:e}){return`${this.parser.parseInline(t)} +`}hr(t){return`
+`}list(t){let e=t.ordered,r=t.start,n="";for(let s=0;s +`+n+" +`}listitem(t){let e="";if(t.task){let r=this.checkbox({checked:!!t.checked});t.loose?t.tokens[0]?.type==="paragraph"?(t.tokens[0].text=r+" "+t.tokens[0].text,t.tokens[0].tokens&&t.tokens[0].tokens.length>0&&t.tokens[0].tokens[0].type==="text"&&(t.tokens[0].tokens[0].text=r+" "+Tc(t.tokens[0].tokens[0].text),t.tokens[0].tokens[0].escaped=!0)):t.tokens.unshift({type:"text",raw:r+" ",text:r+" ",escaped:!0}):e+=r+" "}return e+=this.parser.parse(t.tokens,!!t.loose),`
  • ${e}
  • +`}checkbox({checked:t}){return"'}paragraph({tokens:t}){return`

    ${this.parser.parseInline(t)}

    +`}table(t){let e="",r="";for(let i=0;i${n}`),` + +`+e+` +`+n+`
    +`}tablerow({text:t}){return` +${t} +`}tablecell(t){let e=this.parser.parseInline(t.tokens),r=t.header?"th":"td";return(t.align?`<${r} align="${t.align}">`:`<${r}>`)+e+` +`}strong({tokens:t}){return`${this.parser.parseInline(t)}`}em({tokens:t}){return`${this.parser.parseInline(t)}`}codespan({text:t}){return`${Tc(t,!0)}`}br(t){return"
    "}del({tokens:t}){return`${this.parser.parseInline(t)}`}link({href:t,title:e,tokens:r}){let n=this.parser.parseInline(r),i=CZ(t);if(i===null)return n;t=i;let a='
    ",a}image({href:t,title:e,text:r,tokens:n}){n&&(r=this.parser.parseInline(n,this.parser.textRenderer));let i=CZ(t);if(i===null)return Tc(r);t=i;let a=`${r}{let s=i[a].flat(1/0);r=r.concat(this.walkTokens(s,e))}):i.tokens&&(r=r.concat(this.walkTokens(i.tokens,e)))}}return r}use(...t){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(r=>{let n={...r};if(n.async=this.defaults.async||n.async||!1,r.extensions&&(r.extensions.forEach(i=>{if(!i.name)throw new Error("extension name required");if("renderer"in i){let a=e.renderers[i.name];a?e.renderers[i.name]=function(...s){let l=i.renderer.apply(this,s);return l===!1&&(l=a.apply(this,s)),l}:e.renderers[i.name]=i.renderer}if("tokenizer"in i){if(!i.level||i.level!=="block"&&i.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let a=e[i.level];a?a.unshift(i.tokenizer):e[i.level]=[i.tokenizer],i.start&&(i.level==="block"?e.startBlock?e.startBlock.push(i.start):e.startBlock=[i.start]:i.level==="inline"&&(e.startInline?e.startInline.push(i.start):e.startInline=[i.start]))}"childTokens"in i&&i.childTokens&&(e.childTokens[i.name]=i.childTokens)}),n.extensions=e),r.renderer){let i=this.defaults.renderer||new qT(this.defaults);for(let a in r.renderer){if(!(a in i))throw new Error(`renderer '${a}' does not exist`);if(["options","parser"].includes(a))continue;let s=a,l=r.renderer[s],u=i[s];i[s]=(...h)=>{let f=l.apply(i,h);return f===!1&&(f=u.apply(i,h)),f||""}}n.renderer=i}if(r.tokenizer){let i=this.defaults.tokenizer||new HT(this.defaults);for(let a in r.tokenizer){if(!(a in i))throw new Error(`tokenizer '${a}' does not exist`);if(["options","rules","lexer"].includes(a))continue;let s=a,l=r.tokenizer[s],u=i[s];i[s]=(...h)=>{let f=l.apply(i,h);return f===!1&&(f=u.apply(i,h)),f}}n.tokenizer=i}if(r.hooks){let i=this.defaults.hooks||new C2;for(let a in r.hooks){if(!(a in i))throw new Error(`hook '${a}' does not exist`);if(["options","block"].includes(a))continue;let s=a,l=r.hooks[s],u=i[s];C2.passThroughHooks.has(a)?i[s]=h=>{if(this.defaults.async&&C2.passThroughHooksRespectAsync.has(a))return Promise.resolve(l.call(i,h)).then(d=>u.call(i,d));let f=l.call(i,h);return u.call(i,f)}:i[s]=(...h)=>{let f=l.apply(i,h);return f===!1&&(f=u.apply(i,h)),f}}n.hooks=i}if(r.walkTokens){let i=this.defaults.walkTokens,a=r.walkTokens;n.walkTokens=function(s){let l=[];return l.push(a.call(this,s)),i&&(l=l.concat(i.call(this,s))),l}}this.defaults={...this.defaults,...n}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,e){return Mu.lex(t,e??this.defaults)}parser(t,e){return Iu.parse(t,e??this.defaults)}parseMarkdown(t){return(e,r)=>{let n={...r},i={...this.defaults,...n},a=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&n.async===!1)return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof e>"u"||e===null)return a(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));i.hooks&&(i.hooks.options=i,i.hooks.block=t);let s=i.hooks?i.hooks.provideLexer():t?Mu.lex:Mu.lexInline,l=i.hooks?i.hooks.provideParser():t?Iu.parse:Iu.parseInline;if(i.async)return Promise.resolve(i.hooks?i.hooks.preprocess(e):e).then(u=>s(u,i)).then(u=>i.hooks?i.hooks.processAllTokens(u):u).then(u=>i.walkTokens?Promise.all(this.walkTokens(u,i.walkTokens)).then(()=>u):u).then(u=>l(u,i)).then(u=>i.hooks?i.hooks.postprocess(u):u).catch(a);try{i.hooks&&(e=i.hooks.preprocess(e));let u=s(e,i);i.hooks&&(u=i.hooks.processAllTokens(u)),i.walkTokens&&this.walkTokens(u,i.walkTokens);let h=l(u,i);return i.hooks&&(h=i.hooks.postprocess(h)),h}catch(u){return a(u)}}}onError(t,e){return r=>{if(r.message+=` +Please report this to https://github.com/markedjs/marked.`,t){let n="

    An error occurred:

    "+Tc(r.message+"",!0)+"
    ";return e?Promise.resolve(n):n}if(e)return Promise.reject(r);throw r}}},Xd=new q9e;o(nn,"d");nn.options=nn.setOptions=function(t){return Xd.setOptions(t),nn.defaults=Xd.defaults,DZ(nn.defaults),nn};nn.getDefaults=h9;nn.defaults=jd;nn.use=function(...t){return Xd.use(...t),nn.defaults=Xd.defaults,DZ(nn.defaults),nn};nn.walkTokens=function(t,e){return Xd.walkTokens(t,e)};nn.parseInline=Xd.parseInline;nn.Parser=Iu;nn.parser=Iu.parse;nn.Renderer=qT;nn.TextRenderer=x9;nn.Lexer=Mu;nn.lexer=Mu.lex;nn.Tokenizer=HT;nn.Hooks=C2;nn.parse=nn;F6t=nn.options,$6t=nn.setOptions,z6t=nn.use,G6t=nn.walkTokens,V6t=nn.parseInline,U6t=Iu.parse,H6t=Mu.lex});function W9e(t,{markdownAutoWrap:e}){let n=t.replace(//g,` +`).replace(/\n{2,}/g,` +`),i=B3(n);return e===!1?i.replace(/ /g," "):i}function GZ(t,e={}){let r=W9e(t,e),n=nn.lexer(r),i=[[]],a=0;function s(l,u="normal"){l.type==="text"?l.text.split(` +`).forEach((f,d)=>{d!==0&&(a++,i.push([])),f.split(" ").forEach(p=>{p=p.replace(/'/g,"'"),p&&i[a].push({content:p,type:u})})}):l.type==="strong"||l.type==="em"?l.tokens.forEach(h=>{s(h,l.type)}):l.type==="html"&&i[a].push({content:l.text,type:"normal"})}return o(s,"processNode"),n.forEach(l=>{l.type==="paragraph"?l.tokens?.forEach(u=>{s(u)}):l.type==="html"?i[a].push({content:l.text,type:"normal"}):i[a].push({content:l.raw,type:"normal"})}),i}function VZ(t,{markdownAutoWrap:e}={}){let r=nn.lexer(t);function n(i){return i.type==="text"?e===!1?i.text.replace(/\n */g,"
    ").replace(/ /g," "):i.text.replace(/\n */g,"
    "):i.type==="strong"?`${i.tokens?.map(n).join("")}`:i.type==="em"?`${i.tokens?.map(n).join("")}`:i.type==="paragraph"?`

    ${i.tokens?.map(n).join("")}

    `:i.type==="space"?"":i.type==="html"?`${i.text}`:i.type==="escape"?i.text:(X.warn(`Unsupported markdown: ${i.type}`),i.raw)}return o(n,"output"),r.map(n).join("")}var UZ=M(()=>{"use strict";zZ();_A();pt();o(W9e,"preprocessMarkdown");o(GZ,"markdownToLines");o(VZ,"markdownToHTML")});function Y9e(t){return Intl.Segmenter?[...new Intl.Segmenter().segment(t)].map(e=>e.segment):[...t]}function X9e(t,e){let r=Y9e(e.content);return HZ(t,[],r,e.type)}function HZ(t,e,r,n){if(r.length===0)return[{content:e.join(""),type:n},{content:"",type:n}];let[i,...a]=r,s=[...e,i];return t([{content:s.join(""),type:n}])?HZ(t,s,a,n):(e.length===0&&i&&(e.push(i),r.shift()),[{content:e.join(""),type:n},{content:r.join(""),type:n}])}function qZ(t,e){if(t.some(({content:r})=>r.includes(` +`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return b9(t,e)}function b9(t,e,r=[],n=[]){if(t.length===0)return n.length>0&&r.push(n),r.length>0?r:[];let i="";t[0].content===" "&&(i=" ",t.shift());let a=t.shift()??{content:" ",type:"normal"},s=[...n];if(i!==""&&s.push({content:i,type:"normal"}),s.push(a),e(s))return b9(t,e,r,s);if(n.length>0)r.push(n),t.unshift(a);else if(a.content){let[l,u]=X9e(e,a);r.push([l]),u.content&&t.unshift(u)}return b9(t,e,r)}var WZ=M(()=>{"use strict";o(Y9e,"splitTextToChars");o(X9e,"splitWordToFitWidth");o(HZ,"splitWordToFitWidthRecursion");o(qZ,"splitLineToFitWidth");o(b9,"splitLineToFitWidthRecursion")});function YZ(t,e){e&&t.attr("style",e)}async function j9e(t,e,r,n,i=!1,a=Qt()){let s=t.append("foreignObject");s.attr("width",`${10*r}px`),s.attr("height",`${10*r}px`);let l=s.append("xhtml:div"),u=kn(e.label)?await kh(e.label.replace(tt.lineBreakRegex,` +`),a):sr(e.label,a),h=e.isNode?"nodeLabel":"edgeLabel",f=l.append("span");f.html(u),YZ(f,e.labelStyle),f.attr("class",`${h} ${n}`),YZ(l,e.labelStyle),l.style("display","table-cell"),l.style("white-space","nowrap"),l.style("line-height","1.5"),l.style("max-width",r+"px"),l.style("text-align","center"),l.attr("xmlns","http://www.w3.org/1999/xhtml"),i&&l.attr("class","labelBkg");let d=l.node().getBoundingClientRect();return d.width===r&&(l.style("display","table"),l.style("white-space","break-spaces"),l.style("width",r+"px"),d=l.node().getBoundingClientRect()),s.node()}function T9(t,e,r){return t.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",e*r-.1+"em").attr("dy",r+"em")}function K9e(t,e,r){let n=t.append("text"),i=T9(n,1,e);w9(i,r);let a=i.node().getComputedTextLength();return n.remove(),a}function XZ(t,e,r){let n=t.append("text"),i=T9(n,1,e);w9(i,[{content:r,type:"normal"}]);let a=i.node()?.getBoundingClientRect();return a&&n.remove(),a}function Q9e(t,e,r,n=!1){let a=e.append("g"),s=a.insert("rect").attr("class","background").attr("style","stroke: none"),l=a.append("text").attr("y","-10.1"),u=0;for(let h of r){let f=o(p=>K9e(a,1.1,p)<=t,"checkWidth"),d=f(h)?[h]:qZ(h,f);for(let p of d){let m=T9(l,u,1.1);w9(m,p),u++}}if(n){let h=l.node().getBBox(),f=2;return s.attr("x",h.x-f).attr("y",h.y-f).attr("width",h.width+2*f).attr("height",h.height+2*f),a.node()}else return l.node()}function w9(t,e){t.text(""),e.forEach((r,n)=>{let i=t.append("tspan").attr("font-style",r.type==="em"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",r.type==="strong"?"bold":"normal");n===0?i.text(r.content):i.text(" "+r.content)})}async function k9(t,e={}){let r=[];t.replace(/(fa[bklrs]?):fa-([\w-]+)/g,(i,a,s)=>(r.push((async()=>{let l=`${a}:${s}`;return await nH(l)?await _s(l,void 0,{class:"label-icon"}):``})()),i));let n=await Promise.all(r);return t.replace(/(fa[bklrs]?):fa-([\w-]+)/g,()=>n.shift()??"")}var di,zo=M(()=>{"use strict";yr();gr();pt();UZ();tr();nc();WZ();qn();o(YZ,"applyStyle");o(j9e,"addHtmlSpan");o(T9,"createTspan");o(K9e,"computeWidthOfText");o(XZ,"computeDimensionOfText");o(Q9e,"createFormattedText");o(w9,"updateTextContentAndStyles");o(k9,"replaceIconSubstring");di=o(async(t,e="",{style:r="",isTitle:n=!1,classes:i="",useHtmlLabels:a=!0,isNode:s=!0,width:l=200,addSvgBackground:u=!1}={},h)=>{if(X.debug("XYZ createText",e,r,n,i,a,s,"addSvgBackground: ",u),a){let f=VZ(e,h),d=await k9(Ji(f),h),p=e.replace(/\\\\/g,"\\"),m={isNode:s,label:kn(e)?p:d,labelStyle:r.replace("fill:","color:")};return await j9e(t,m,l,i,u,h)}else{let f=e.replace(//g,"
    "),d=GZ(f.replace("
    ","
    "),h),p=Q9e(l,t,d,e?u:!1);if(s){/stroke:/.exec(r)&&(r=r.replace("stroke:","lineColor:"));let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");qe(p).attr("style",m)}else{let m=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/background:/g,"fill:");qe(p).select("rect").attr("style",m.replace(/background:/g,"fill:"));let g=r.replace(/stroke:[^;]+;?/g,"").replace(/stroke-width:[^;]+;?/g,"").replace(/fill:[^;]+;?/g,"").replace(/color:/g,"fill:");qe(p).select("text").attr("style",g)}return p}},"createText")});function Vt(t){let e=t.map((r,n)=>`${n===0?"M":"L"}${r.x},${r.y}`);return e.push("Z"),e.join(" ")}function Go(t,e,r,n,i,a){let s=[],u=r-t,h=n-e,f=u/a,d=2*Math.PI/f,p=e+h/2;for(let m=0;m<=50;m++){let g=m/50,y=t+g*u,v=p+i*Math.sin(d*(y-t));s.push({x:y,y:v})}return s}function Kd(t,e,r,n,i,a){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;d{"use strict";zo();Xt();yr();Ra();gr();tr();ut=o(async(t,e,r)=>{let n,i=e.useHtmlLabels||vr(ge()?.htmlLabels);r?n=r:n="node default";let a=t.insert("g").attr("class",n).attr("id",e.domId||e.id),s=a.insert("g").attr("class","label").attr("style",Cn(e.labelStyle)),l;e.label===void 0?l="":l=typeof e.label=="string"?e.label:e.label[0];let u=await di(s,sr(Ji(l),ge()),{useHtmlLabels:i,width:e.width||ge().flowchart?.wrappingWidth,cssClasses:"markdown-node-label",style:e.labelStyle,addSvgBackground:!!e.icon||!!e.img}),h=u.getBBox(),f=(e?.padding??0)/2;if(i){let d=u.children[0],p=qe(u),m=d.getElementsByTagName("img");if(m){let g=l.replace(/]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=ge().fontSize?ge().fontSize:window.getComputedStyle(document.body).fontSize,T=5,[S=ur.fontSize]=vc(b),w=S*T+"px";y.style.minWidth=w,y.style.maxWidth=w}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}return i?s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"):s.attr("transform","translate(0, "+-h.height/2+")"),e.centerLabel&&s.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),s.insert("rect",":first-child"),{shapeSvg:a,bbox:h,halfPadding:f,label:s}},"labelHelper"),XT=o(async(t,e,r)=>{let n=r.useHtmlLabels||vr(ge()?.flowchart?.htmlLabels),i=t.insert("g").attr("class","label").attr("style",r.labelStyle||""),a=await di(i,sr(Ji(e),ge()),{useHtmlLabels:n,width:r.width||ge()?.flowchart?.wrappingWidth,style:r.labelStyle,addSvgBackground:!!r.icon||!!r.img}),s=a.getBBox(),l=r.padding/2;if(vr(ge()?.flowchart?.htmlLabels)){let u=a.children[0],h=qe(a);s=u.getBoundingClientRect(),h.attr("width",s.width),h.attr("height",s.height)}return n?i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"):i.attr("transform","translate(0, "+-s.height/2+")"),r.centerLabel&&i.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),i.insert("rect",":first-child"),{shapeSvg:t,bbox:s,halfPadding:l,label:i}},"insertLabel"),Qe=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds"),st=o((t,e)=>(t.look==="handDrawn"?"rough-node":"node")+" "+t.cssClasses+" "+(e||""),"getNodeClasses");o(Vt,"createPathFromPoints");o(Go,"generateFullSineWavePoints");o(Kd,"generateCirclePoints")});function Z9e(t,e){return t.intersect(e)}var jZ,KZ=M(()=>{"use strict";o(Z9e,"intersectNode");jZ=Z9e});function J9e(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x{"use strict";o(J9e,"intersectEllipse");jT=J9e});function eRe(t,e,r){return jT(t,e,e,r)}var QZ,ZZ=M(()=>{"use strict";E9();o(eRe,"intersectCircle");QZ=eRe});function tRe(t,e,r,n){{let i=e.y-t.y,a=t.x-e.x,s=e.x*t.y-t.x*e.y,l=i*r.x+a*r.y+s,u=i*n.x+a*n.y+s,h=1e-6;if(l!==0&&u!==0&&JZ(l,u))return;let f=n.y-r.y,d=r.x-n.x,p=n.x*r.y-r.x*n.y,m=f*t.x+d*t.y+p,g=f*e.x+d*e.y+p;if(Math.abs(m)0}var eJ,tJ=M(()=>{"use strict";o(tRe,"intersectLine");o(JZ,"sameSign");eJ=tRe});function rRe(t,e,r){let n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(f){s=Math.min(s,f.x),l=Math.min(l,f.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));let u=n-t.width/2-s,h=i-t.height/2-l;for(let f=0;f1&&a.sort(function(f,d){let p=f.x-r.x,m=f.y-r.y,g=Math.sqrt(p*p+m*m),y=d.x-r.x,v=d.y-r.y,x=Math.sqrt(y*y+v*v);return g{"use strict";tJ();o(rRe,"intersectPolygon");rJ=rRe});var nRe,Qh,S9=M(()=>{"use strict";nRe=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),Qh=nRe});var Xe,Ut=M(()=>{"use strict";KZ();ZZ();E9();nJ();S9();Xe={node:jZ,circle:QZ,ellipse:jT,polygon:rJ,rect:Qh}});var iJ,wc,iRe,D2,je,Je,aRe,$t=M(()=>{"use strict";Xt();iJ=o(t=>{let{handDrawnSeed:e}=ge();return{fill:t,hachureAngle:120,hachureGap:4,fillWeight:2,roughness:.7,stroke:t,seed:e}},"solidStateFill"),wc=o(t=>{let e=iRe([...t.cssCompiledStyles||[],...t.cssStyles||[],...t.labelStyle||[]]);return{stylesMap:e,stylesArray:[...e]}},"compileStyles"),iRe=o(t=>{let e=new Map;return t.forEach(r=>{let[n,i]=r.split(":");e.set(n.trim(),i?.trim())}),e},"styles2Map"),D2=o(t=>t==="color"||t==="font-size"||t==="font-family"||t==="font-weight"||t==="font-style"||t==="text-decoration"||t==="text-align"||t==="text-transform"||t==="line-height"||t==="letter-spacing"||t==="word-spacing"||t==="text-shadow"||t==="text-overflow"||t==="white-space"||t==="word-wrap"||t==="word-break"||t==="overflow-wrap"||t==="hyphens","isLabelStyle"),je=o(t=>{let{stylesArray:e}=wc(t),r=[],n=[],i=[],a=[];return e.forEach(s=>{let l=s[0];D2(l)?r.push(s.join(":")+" !important"):(n.push(s.join(":")+" !important"),l.includes("stroke")&&i.push(s.join(":")+" !important"),l==="fill"&&a.push(s.join(":")+" !important"))}),{labelStyles:r.join(";"),nodeStyles:n.join(";"),stylesArray:e,borderStyles:i,backgroundStyles:a}},"styles2String"),Je=o((t,e)=>{let{themeVariables:r,handDrawnSeed:n}=ge(),{nodeBorder:i,mainBkg:a}=r,{stylesMap:s}=wc(t);return Object.assign({roughness:.7,fill:s.get("fill")||a,fillStyle:"hachure",fillWeight:4,hachureGap:5.2,stroke:s.get("stroke")||i,seed:n,strokeWidth:s.get("stroke-width")?.replace("px","")||1.3,fillLineDash:[0,0],strokeLineDash:aRe(s.get("stroke-dasharray"))},e)},"userNodeOverrides"),aRe=o(t=>{if(!t)return[0,0];let e=t.trim().split(/\s+/).map(Number);if(e.length===1){let i=isNaN(e[0])?0:e[0];return[i,i]}let r=isNaN(e[0])?0:e[0],n=isNaN(e[1])?0:e[1];return[r,n]},"getStrokeDashArray")});function C9(t,e,r){if(t&&t.length){let[n,i]=e,a=Math.PI/180*r,s=Math.cos(a),l=Math.sin(a);for(let u of t){let[h,f]=u;u[0]=(h-n)*s-(f-i)*l+n,u[1]=(h-n)*l+(f-i)*s+i}}}function sRe(t,e){return t[0]===e[0]&&t[1]===e[1]}function oRe(t,e,r,n=1){let i=r,a=Math.max(e,.1),s=t[0]&&t[0][0]&&typeof t[0][0]=="number"?[t]:t,l=[0,0];if(i)for(let h of s)C9(h,l,i);let u=(function(h,f,d){let p=[];for(let b of h){let T=[...b];sRe(T[0],T[T.length-1])||T.push([T[0][0],T[0][1]]),T.length>2&&p.push(T)}let m=[];f=Math.max(f,.1);let g=[];for(let b of p)for(let T=0;Tb.yminT.ymin?1:b.xT.x?1:b.ymax===T.ymax?0:(b.ymax-T.ymax)/Math.abs(b.ymax-T.ymax))),!g.length)return m;let y=[],v=g[0].ymin,x=0;for(;y.length||g.length;){if(g.length){let b=-1;for(let T=0;Tv);T++)b=T;g.splice(0,b+1).forEach((T=>{y.push({s:v,edge:T})}))}if(y=y.filter((b=>!(b.edge.ymax<=v))),y.sort(((b,T)=>b.edge.x===T.edge.x?0:(b.edge.x-T.edge.x)/Math.abs(b.edge.x-T.edge.x))),(d!==1||x%f==0)&&y.length>1)for(let b=0;b=y.length)break;let S=y[b].edge,w=y[T].edge;m.push([[Math.round(S.x),v],[Math.round(w.x),v]])}v+=d,y.forEach((b=>{b.edge.x=b.edge.x+d*b.edge.islope})),x++}return m})(s,a,n);if(i){for(let h of s)C9(h,l,-i);(function(h,f,d){let p=[];h.forEach((m=>p.push(...m))),C9(p,f,d)})(u,l,-i)}return u}function M2(t,e){var r;let n=e.hachureAngle+90,i=e.hachureGap;i<0&&(i=4*e.strokeWidth),i=Math.round(Math.max(i,.1));let a=1;return e.roughness>=1&&(((r=e.randomizer)===null||r===void 0?void 0:r.next())||Math.random())>.7&&(a=i),oRe(t,i,n,a||1)}function iw(t){let e=t[0],r=t[1];return Math.sqrt(Math.pow(e[0]-r[0],2)+Math.pow(e[1]-r[1],2))}function _9(t,e){return t.type===e}function V9(t){let e=[],r=(function(s){let l=new Array;for(;s!=="";)if(s.match(/^([ \t\r\n,]+)/))s=s.substr(RegExp.$1.length);else if(s.match(/^([aAcChHlLmMqQsStTvVzZ])/))l[l.length]={type:lRe,text:RegExp.$1},s=s.substr(RegExp.$1.length);else{if(!s.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))return[];l[l.length]={type:A9,text:`${parseFloat(RegExp.$1)}`},s=s.substr(RegExp.$1.length)}return l[l.length]={type:aJ,text:""},l})(t),n="BOD",i=0,a=r[i];for(;!_9(a,aJ);){let s=0,l=[];if(n==="BOD"){if(a.text!=="M"&&a.text!=="m")return V9("M0,0"+t);i++,s=KT[a.text],n=a.text}else _9(a,A9)?s=KT[n]:(i++,s=KT[a.text],n=a.text);if(!(i+sf%2?h+r:h+e));a.push({key:"C",data:u}),e=u[4],r=u[5];break}case"Q":a.push({key:"Q",data:[...l]}),e=l[2],r=l[3];break;case"q":{let u=l.map(((h,f)=>f%2?h+r:h+e));a.push({key:"Q",data:u}),e=u[2],r=u[3];break}case"A":a.push({key:"A",data:[...l]}),e=l[5],r=l[6];break;case"a":e+=l[5],r+=l[6],a.push({key:"A",data:[l[0],l[1],l[2],l[3],l[4],e,r]});break;case"H":a.push({key:"H",data:[...l]}),e=l[0];break;case"h":e+=l[0],a.push({key:"H",data:[e]});break;case"V":a.push({key:"V",data:[...l]}),r=l[0];break;case"v":r+=l[0],a.push({key:"V",data:[r]});break;case"S":a.push({key:"S",data:[...l]}),e=l[2],r=l[3];break;case"s":{let u=l.map(((h,f)=>f%2?h+r:h+e));a.push({key:"S",data:u}),e=u[2],r=u[3];break}case"T":a.push({key:"T",data:[...l]}),e=l[0],r=l[1];break;case"t":e+=l[0],r+=l[1],a.push({key:"T",data:[e,r]});break;case"Z":case"z":a.push({key:"Z",data:[]}),e=n,r=i}return a}function pJ(t){let e=[],r="",n=0,i=0,a=0,s=0,l=0,u=0;for(let{key:h,data:f}of t){switch(h){case"M":e.push({key:"M",data:[...f]}),[n,i]=f,[a,s]=f;break;case"C":e.push({key:"C",data:[...f]}),n=f[4],i=f[5],l=f[2],u=f[3];break;case"L":e.push({key:"L",data:[...f]}),[n,i]=f;break;case"H":n=f[0],e.push({key:"L",data:[n,i]});break;case"V":i=f[0],e.push({key:"L",data:[n,i]});break;case"S":{let d=0,p=0;r==="C"||r==="S"?(d=n+(n-l),p=i+(i-u)):(d=n,p=i),e.push({key:"C",data:[d,p,...f]}),l=f[0],u=f[1],n=f[2],i=f[3];break}case"T":{let[d,p]=f,m=0,g=0;r==="Q"||r==="T"?(m=n+(n-l),g=i+(i-u)):(m=n,g=i);let y=n+2*(m-n)/3,v=i+2*(g-i)/3,x=d+2*(m-d)/3,b=p+2*(g-p)/3;e.push({key:"C",data:[y,v,x,b,d,p]}),l=m,u=g,n=d,i=p;break}case"Q":{let[d,p,m,g]=f,y=n+2*(d-n)/3,v=i+2*(p-i)/3,x=m+2*(d-m)/3,b=g+2*(p-g)/3;e.push({key:"C",data:[y,v,x,b,m,g]}),l=d,u=p,n=m,i=g;break}case"A":{let d=Math.abs(f[0]),p=Math.abs(f[1]),m=f[2],g=f[3],y=f[4],v=f[5],x=f[6];d===0||p===0?(e.push({key:"C",data:[n,i,v,x,v,x]}),n=v,i=x):(n!==v||i!==x)&&(mJ(n,i,v,x,d,p,m,g,y).forEach((function(b){e.push({key:"C",data:b})})),n=v,i=x);break}case"Z":e.push({key:"Z",data:[]}),n=a,i=s}r=h}return e}function L2(t,e,r){return[t*Math.cos(r)-e*Math.sin(r),t*Math.sin(r)+e*Math.cos(r)]}function mJ(t,e,r,n,i,a,s,l,u,h){let f=(d=s,Math.PI*d/180);var d;let p=[],m=0,g=0,y=0,v=0;if(h)[m,g,y,v]=h;else{[t,e]=L2(t,e,-f),[r,n]=L2(r,n,-f);let _=(t-r)/2,D=(e-n)/2,O=_*_/(i*i)+D*D/(a*a);O>1&&(O=Math.sqrt(O),i*=O,a*=O);let N=i*i,P=a*a,B=N*P-N*D*D-P*_*_,F=N*D*D+P*_*_,V=(l===u?-1:1)*Math.sqrt(Math.abs(B/F));y=V*i*D/a+(t+r)/2,v=V*-a*_/i+(e+n)/2,m=Math.asin(parseFloat(((e-v)/a).toFixed(9))),g=Math.asin(parseFloat(((n-v)/a).toFixed(9))),tg&&(m-=2*Math.PI),!u&&g>m&&(g-=2*Math.PI)}let x=g-m;if(Math.abs(x)>120*Math.PI/180){let _=g,D=r,O=n;g=u&&g>m?m+120*Math.PI/180*1:m+120*Math.PI/180*-1,p=mJ(r=y+i*Math.cos(g),n=v+a*Math.sin(g),D,O,i,a,s,0,u,[g,_,y,v])}x=g-m;let b=Math.cos(m),T=Math.sin(m),S=Math.cos(g),w=Math.sin(g),k=Math.tan(x/4),C=4/3*i*k,A=4/3*a*k,L=[t,e],I=[t+C*T,e-A*b],R=[r+C*w,n-A*S],E=[r,n];if(I[0]=2*L[0]-I[0],I[1]=2*L[1]-I[1],h)return[I,R,E].concat(p);{p=[I,R,E].concat(p);let _=[];for(let D=0;D2){let i=[];for(let a=0;a2*Math.PI&&(m=0,g=2*Math.PI);let y=2*Math.PI/u.curveStepCount,v=Math.min(y/2,(g-m)/2),x=hJ(v,h,f,d,p,m,g,1,u);if(!u.disableMultiStroke){let b=hJ(v,h,f,d,p,m,g,1.5,u);x.push(...b)}return s&&(l?x.push(...Zh(h,f,h+d*Math.cos(m),f+p*Math.sin(m),u),...Zh(h,f,h+d*Math.cos(g),f+p*Math.sin(g),u)):x.push({op:"lineTo",data:[h,f]},{op:"lineTo",data:[h+d*Math.cos(m),f+p*Math.sin(m)]})),{type:"path",ops:x}}function lJ(t,e){let r=pJ(dJ(V9(t))),n=[],i=[0,0],a=[0,0];for(let{key:s,data:l}of r)switch(s){case"M":a=[l[0],l[1]],i=[l[0],l[1]];break;case"L":n.push(...Zh(a[0],a[1],l[0],l[1],e)),a=[l[0],l[1]];break;case"C":{let[u,h,f,d,p,m]=l;n.push(...hRe(u,h,f,d,p,m,a,e)),a=[p,m];break}case"Z":n.push(...Zh(a[0],a[1],i[0],i[1],e)),a=[i[0],i[1]]}return{type:"path",ops:n}}function D9(t,e){let r=[];for(let n of t)if(n.length){let i=e.maxRandomnessOffset||0,a=n.length;if(a>2){r.push({op:"move",data:[n[0][0]+or(i,e),n[0][1]+or(i,e)]});for(let s=1;s500?.4:-.0016668*u+1.233334;let f=i.maxRandomnessOffset||0;f*f*100>l&&(f=u/10);let d=f/2,p=.2+.2*vJ(i),m=i.bowing*i.maxRandomnessOffset*(n-e)/200,g=i.bowing*i.maxRandomnessOffset*(t-r)/200;m=or(m,i,h),g=or(g,i,h);let y=[],v=o(()=>or(d,i,h),"M"),x=o(()=>or(f,i,h),"k"),b=i.preserveVertices;return a&&(s?y.push({op:"move",data:[t+(b?0:v()),e+(b?0:v())]}):y.push({op:"move",data:[t+(b?0:or(f,i,h)),e+(b?0:or(f,i,h))]})),s?y.push({op:"bcurveTo",data:[m+t+(r-t)*p+v(),g+e+(n-e)*p+v(),m+t+2*(r-t)*p+v(),g+e+2*(n-e)*p+v(),r+(b?0:v()),n+(b?0:v())]}):y.push({op:"bcurveTo",data:[m+t+(r-t)*p+x(),g+e+(n-e)*p+x(),m+t+2*(r-t)*p+x(),g+e+2*(n-e)*p+x(),r+(b?0:x()),n+(b?0:x())]}),y}function QT(t,e,r){if(!t.length)return[];let n=[];n.push([t[0][0]+or(e,r),t[0][1]+or(e,r)]),n.push([t[0][0]+or(e,r),t[0][1]+or(e,r)]);for(let i=1;i3){let a=[],s=1-r.curveTightness;i.push({op:"move",data:[t[1][0],t[1][1]]});for(let l=1;l+21&&i.push(l)):i.push(l),i.push(t[e+3])}else{let u=t[e+0],h=t[e+1],f=t[e+2],d=t[e+3],p=Qd(u,h,.5),m=Qd(h,f,.5),g=Qd(f,d,.5),y=Qd(p,m,.5),v=Qd(m,g,.5),x=Qd(y,v,.5);$9([u,p,y,x],0,r,i),$9([x,v,g,d],0,r,i)}var a,s;return i}function dRe(t,e){return nw(t,0,t.length,e)}function nw(t,e,r,n,i){let a=i||[],s=t[e],l=t[r-1],u=0,h=1;for(let f=e+1;fu&&(u=d,h=f)}return Math.sqrt(u)>n?(nw(t,e,h+1,n,a),nw(t,h,r,n,a)):(a.length||a.push(s),a.push(l)),a}function L9(t,e=.15,r){let n=[],i=(t.length-1)/3;for(let a=0;a0?nw(n,0,n.length,r):n}var N2,R9,N9,M9,I9,O9,Ps,P9,lRe,A9,aJ,KT,cRe,co,Em,z9,ZT,G9,Ze,Ht=M(()=>{"use strict";o(C9,"t");o(sRe,"e");o(oRe,"s");o(M2,"n");N2=class{static{o(this,"o")}constructor(e){this.helper=e}fillPolygons(e,r){return this._fillPolygons(e,r)}_fillPolygons(e,r){let n=M2(e,r);return{type:"fillSketch",ops:this.renderLines(n,r)}}renderLines(e,r){let n=[];for(let i of e)n.push(...this.helper.doubleLineOps(i[0][0],i[0][1],i[1][0],i[1][1],r));return n}};o(iw,"a");R9=class extends N2{static{o(this,"h")}fillPolygons(e,r){let n=r.hachureGap;n<0&&(n=4*r.strokeWidth),n=Math.max(n,.1);let i=M2(e,Object.assign({},r,{hachureGap:n})),a=Math.PI/180*r.hachureAngle,s=[],l=.5*n*Math.cos(a),u=.5*n*Math.sin(a);for(let[h,f]of i)iw([h,f])&&s.push([[h[0]-l,h[1]+u],[...f]],[[h[0]+l,h[1]-u],[...f]]);return{type:"fillSketch",ops:this.renderLines(s,r)}}},N9=class extends N2{static{o(this,"r")}fillPolygons(e,r){let n=this._fillPolygons(e,r),i=Object.assign({},r,{hachureAngle:r.hachureAngle+90}),a=this._fillPolygons(e,i);return n.ops=n.ops.concat(a.ops),n}},M9=class{static{o(this,"i")}constructor(e){this.helper=e}fillPolygons(e,r){let n=M2(e,r=Object.assign({},r,{hachureAngle:0}));return this.dotsOnLines(n,r)}dotsOnLines(e,r){let n=[],i=r.hachureGap;i<0&&(i=4*r.strokeWidth),i=Math.max(i,.1);let a=r.fillWeight;a<0&&(a=r.strokeWidth/2);let s=i/4;for(let l of e){let u=iw(l),h=u/i,f=Math.ceil(h)-1,d=u-f*i,p=(l[0][0]+l[1][0])/2-i/4,m=Math.min(l[0][1],l[1][1]);for(let g=0;g{let l=iw(s),u=Math.floor(l/(n+i)),h=(l+i-u*(n+i))/2,f=s[0],d=s[1];f[0]>d[0]&&(f=s[1],d=s[0]);let p=Math.atan((d[1]-f[1])/(d[0]-f[0]));for(let m=0;m{let s=iw(a),l=Math.round(s/(2*r)),u=a[0],h=a[1];u[0]>h[0]&&(u=a[1],h=a[0]);let f=Math.atan((h[1]-u[1])/(h[0]-u[0]));for(let d=0;d2*Math.PI&&(C=0,A=2*Math.PI);let L=(A-C)/b.curveStepCount,I=[];for(let R=C;R<=A;R+=L)I.push([T+w*Math.cos(R),S+k*Math.sin(R)]);return I.push([T+w*Math.cos(A),S+k*Math.sin(A)]),I.push([T,S]),km([I],b)})(e,r,n,i,a,s,h));return h.stroke!==co&&f.push(d),this._d("arc",f,h)}curve(e,r){let n=this._o(r),i=[],a=sJ(e,n);if(n.fill&&n.fill!==co)if(n.fillStyle==="solid"){let s=sJ(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(s.ops)})}else{let s=[],l=e;if(l.length){let u=typeof l[0][0]=="number"?[l]:l;for(let h of u)h.length<3?s.push(...h):h.length===3?s.push(...L9(fJ([h[0],h[0],h[1],h[2]]),10,(1+n.roughness)/2)):s.push(...L9(fJ(h),10,(1+n.roughness)/2))}s.length&&i.push(km([s],n))}return n.stroke!==co&&i.push(a),this._d("curve",i,n)}polygon(e,r){let n=this._o(r),i=[],a=JT(e,!0,n);return n.fill&&(n.fillStyle==="solid"?i.push(D9([e],n)):i.push(km([e],n))),n.stroke!==co&&i.push(a),this._d("polygon",i,n)}path(e,r){let n=this._o(r),i=[];if(!e)return this._d("path",i,n);e=(e||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");let a=n.fill&&n.fill!=="transparent"&&n.fill!==co,s=n.stroke!==co,l=!!(n.simplification&&n.simplification<1),u=(function(f,d,p){let m=pJ(dJ(V9(f))),g=[],y=[],v=[0,0],x=[],b=o(()=>{x.length>=4&&y.push(...L9(x,d)),x=[]},"i"),T=o(()=>{b(),y.length&&(g.push(y),y=[])},"c");for(let{key:w,data:k}of m)switch(w){case"M":T(),v=[k[0],k[1]],y.push(v);break;case"L":b(),y.push([k[0],k[1]]);break;case"C":if(!x.length){let C=y.length?y[y.length-1]:v;x.push([C[0],C[1]])}x.push([k[0],k[1]]),x.push([k[2],k[3]]),x.push([k[4],k[5]]);break;case"Z":b(),y.push([v[0],v[1]])}if(T(),!p)return g;let S=[];for(let w of g){let k=dRe(w,p);k.length&&S.push(k)}return S})(e,1,l?4-4*(n.simplification||1):(1+n.roughness)/2),h=lJ(e,n);if(a)if(n.fillStyle==="solid")if(u.length===1){let f=lJ(e,Object.assign(Object.assign({},n),{disableMultiStroke:!0,roughness:n.roughness?n.roughness+n.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(f.ops)})}else i.push(D9(u,n));else i.push(km(u,n));return s&&(l?u.forEach((f=>{i.push(JT(f,!1,n))})):i.push(h)),this._d("path",i,n)}opsToPath(e,r){let n="";for(let i of e.ops){let a=typeof r=="number"&&r>=0?i.data.map((s=>+s.toFixed(r))):i.data;switch(i.op){case"move":n+=`M${a[0]} ${a[1]} `;break;case"bcurveTo":n+=`C${a[0]} ${a[1]}, ${a[2]} ${a[3]}, ${a[4]} ${a[5]} `;break;case"lineTo":n+=`L${a[0]} ${a[1]} `}}return n.trim()}toPaths(e){let r=e.sets||[],n=e.options||this.defaultOptions,i=[];for(let a of r){let s=null;switch(a.type){case"path":s={d:this.opsToPath(a),stroke:n.stroke,strokeWidth:n.strokeWidth,fill:co};break;case"fillPath":s={d:this.opsToPath(a),stroke:co,strokeWidth:0,fill:n.fill||co};break;case"fillSketch":s=this.fillSketch(a,n)}s&&i.push(s)}return i}fillSketch(e,r){let n=r.fillWeight;return n<0&&(n=r.strokeWidth/2),{d:this.opsToPath(e),stroke:r.fill||co,strokeWidth:n,fill:co}}_mergedShape(e){return e.filter(((r,n)=>n===0||r.op!=="move"))}},z9=class{static{o(this,"st")}constructor(e,r){this.canvas=e,this.ctx=this.canvas.getContext("2d"),this.gen=new Em(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.ctx,a=e.options.fixedDecimalPlaceDigits;for(let s of r)switch(s.type){case"path":i.save(),i.strokeStyle=n.stroke==="none"?"transparent":n.stroke,i.lineWidth=n.strokeWidth,n.strokeLineDash&&i.setLineDash(n.strokeLineDash),n.strokeLineDashOffset&&(i.lineDashOffset=n.strokeLineDashOffset),this._drawToContext(i,s,a),i.restore();break;case"fillPath":{i.save(),i.fillStyle=n.fill||"";let l=e.shape==="curve"||e.shape==="polygon"||e.shape==="path"?"evenodd":"nonzero";this._drawToContext(i,s,a,l),i.restore();break}case"fillSketch":this.fillSketch(i,s,n)}}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2),e.save(),n.fillLineDash&&e.setLineDash(n.fillLineDash),n.fillLineDashOffset&&(e.lineDashOffset=n.fillLineDashOffset),e.strokeStyle=n.fill||"",e.lineWidth=i,this._drawToContext(e,r,n.fixedDecimalPlaceDigits),e.restore()}_drawToContext(e,r,n,i="nonzero"){e.beginPath();for(let a of r.ops){let s=typeof n=="number"&&n>=0?a.data.map((l=>+l.toFixed(n))):a.data;switch(a.op){case"move":e.moveTo(s[0],s[1]);break;case"bcurveTo":e.bezierCurveTo(s[0],s[1],s[2],s[3],s[4],s[5]);break;case"lineTo":e.lineTo(s[0],s[1])}}r.type==="fillPath"?e.fill(i):e.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s),s}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s),s}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s),s}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a),a}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n),n}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n),n}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h),h}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n),n}path(e,r){let n=this.gen.path(e,r);return this.draw(n),n}},ZT="http://www.w3.org/2000/svg",G9=class{static{o(this,"ot")}constructor(e,r){this.svg=e,this.gen=new Em(r)}draw(e){let r=e.sets||[],n=e.options||this.getDefaultOptions(),i=this.svg.ownerDocument||window.document,a=i.createElementNS(ZT,"g"),s=e.options.fixedDecimalPlaceDigits;for(let l of r){let u=null;switch(l.type){case"path":u=i.createElementNS(ZT,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke",n.stroke),u.setAttribute("stroke-width",n.strokeWidth+""),u.setAttribute("fill","none"),n.strokeLineDash&&u.setAttribute("stroke-dasharray",n.strokeLineDash.join(" ").trim()),n.strokeLineDashOffset&&u.setAttribute("stroke-dashoffset",`${n.strokeLineDashOffset}`);break;case"fillPath":u=i.createElementNS(ZT,"path"),u.setAttribute("d",this.opsToPath(l,s)),u.setAttribute("stroke","none"),u.setAttribute("stroke-width","0"),u.setAttribute("fill",n.fill||""),e.shape!=="curve"&&e.shape!=="polygon"||u.setAttribute("fill-rule","evenodd");break;case"fillSketch":u=this.fillSketch(i,l,n)}u&&a.appendChild(u)}return a}fillSketch(e,r,n){let i=n.fillWeight;i<0&&(i=n.strokeWidth/2);let a=e.createElementNS(ZT,"path");return a.setAttribute("d",this.opsToPath(r,n.fixedDecimalPlaceDigits)),a.setAttribute("stroke",n.fill||""),a.setAttribute("stroke-width",i+""),a.setAttribute("fill","none"),n.fillLineDash&&a.setAttribute("stroke-dasharray",n.fillLineDash.join(" ").trim()),n.fillLineDashOffset&&a.setAttribute("stroke-dashoffset",`${n.fillLineDashOffset}`),a}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(e,r){return this.gen.opsToPath(e,r)}line(e,r,n,i,a){let s=this.gen.line(e,r,n,i,a);return this.draw(s)}rectangle(e,r,n,i,a){let s=this.gen.rectangle(e,r,n,i,a);return this.draw(s)}ellipse(e,r,n,i,a){let s=this.gen.ellipse(e,r,n,i,a);return this.draw(s)}circle(e,r,n,i){let a=this.gen.circle(e,r,n,i);return this.draw(a)}linearPath(e,r){let n=this.gen.linearPath(e,r);return this.draw(n)}polygon(e,r){let n=this.gen.polygon(e,r);return this.draw(n)}arc(e,r,n,i,a,s,l=!1,u){let h=this.gen.arc(e,r,n,i,a,s,l,u);return this.draw(h)}curve(e,r){let n=this.gen.curve(e,r);return this.draw(n)}path(e,r){let n=this.gen.path(e,r);return this.draw(n)}},Ze={canvas:o((t,e)=>new z9(t,e),"canvas"),svg:o((t,e)=>new G9(t,e),"svg"),generator:o(t=>new Em(t),"generator"),newSeed:o(()=>Em.newSeed(),"newSeed")}});function xJ(t,e){let{labelStyles:r}=je(e);e.labelStyle=r;let n=st(e),i=n;n||(i="anchor");let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=1,{cssStyles:l}=e,u=Ze.svg(a),h=Je(e,{fill:"black",stroke:"none",fillStyle:"solid"});e.look!=="handDrawn"&&(h.roughness=0);let f=u.circle(0,0,s*2,h),d=a.insert(()=>f,":first-child");return d.attr("class","anchor").attr("style",Cn(l)),Qe(e,d),e.intersect=function(p){return X.info("Circle intersect",e,s,p),Xe.circle(e,s,p)},a}var bJ=M(()=>{"use strict";pt();It();Ut();$t();Ht();tr();o(xJ,"anchor")});function TJ(t,e,r,n,i,a,s){let u=(t+r)/2,h=(e+n)/2,f=Math.atan2(n-e,r-t),d=(r-t)/2,p=(n-e)/2,m=d/i,g=p/a,y=Math.sqrt(m**2+g**2);if(y>1)throw new Error("The given radii are too small to create an arc between the points.");let v=Math.sqrt(1-y**2),x=u+v*a*Math.sin(f)*(s?-1:1),b=h-v*i*Math.cos(f)*(s?-1:1),T=Math.atan2((e-b)/a,(t-x)/i),w=Math.atan2((n-b)/a,(r-x)/i)-T;s&&w<0&&(w+=2*Math.PI),!s&&w>0&&(w-=2*Math.PI);let k=[];for(let C=0;C<20;C++){let A=C/19,L=T+A*w,I=x+i*Math.cos(L),R=b+a*Math.sin(L);k.push({x:I,y:R})}return k}async function wJ(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ut(t,e,st(e)),s=a.width+e.padding+20,l=a.height+e.padding,u=l/2,h=u/(2.5+l/50),{cssStyles:f}=e,d=[{x:s/2,y:-l/2},{x:-s/2,y:-l/2},...TJ(-s/2,-l/2,-s/2,l/2,h,u,!1),{x:s/2,y:l/2},...TJ(s/2,l/2,s/2,-l/2,h,u,!0)],p=Ze.svg(i),m=Je(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=Vt(d),y=p.path(g,m),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),f&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",n),v.attr("transform",`translate(${h/2}, 0)`),Qe(e,v),e.intersect=function(x){return Xe.polygon(e,d,x)},i}var kJ=M(()=>{"use strict";It();Ut();$t();Ht();o(TJ,"generateArcPoints");o(wJ,"bowTieRect")});function Bs(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var Jh=M(()=>{"use strict";o(Bs,"insertPolygonShape")});async function EJ(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ut(t,e,st(e)),s=a.height+e.padding,l=12,u=a.width+e.padding+l,h=0,f=u,d=-s,p=0,m=[{x:h+l,y:d},{x:f,y:d},{x:f,y:p},{x:h,y:p},{x:h,y:d+l},{x:h+l,y:d}],g,{cssStyles:y}=e;if(e.look==="handDrawn"){let v=Ze.svg(i),x=Je(e,{}),b=Vt(m),T=v.path(b,x);g=i.insert(()=>T,":first-child").attr("transform",`translate(${-u/2}, ${s/2})`),y&&g.attr("style",y)}else g=Bs(i,u,s,m);return n&&g.attr("style",n),Qe(e,g),e.intersect=function(v){return Xe.polygon(e,m,v)},i}var SJ=M(()=>{"use strict";It();Ut();$t();Ht();Jh();It();o(EJ,"card")});function CJ(t,e){let{nodeStyles:r}=je(e);e.label="";let n=t.insert("g").attr("class",st(e)).attr("id",e.domId??e.id),{cssStyles:i}=e,a=Math.max(28,e.width??0),s=[{x:0,y:a/2},{x:a/2,y:0},{x:0,y:-a/2},{x:-a/2,y:0}],l=Ze.svg(n),u=Je(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=Vt(s),f=l.path(h,u),d=n.insert(()=>f,":first-child");return i&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",i),r&&e.look!=="handDrawn"&&d.selectAll("path").attr("style",r),e.width=28,e.height=28,e.intersect=function(p){return Xe.polygon(e,s,p)},n}var AJ=M(()=>{"use strict";Ut();Ht();$t();It();o(CJ,"choice")});async function aw(t,e,r){let{labelStyles:n,nodeStyles:i}=je(e);e.labelStyle=n;let{shapeSvg:a,bbox:s,halfPadding:l}=await ut(t,e,st(e)),u=r?.padding??l,h=s.width/2+u,f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Ze.svg(a),m=Je(e,{}),g=p.circle(0,0,h*2,m);f=a.insert(()=>g,":first-child"),f.attr("class","basic label-container").attr("style",Cn(d))}else f=a.insert("circle",":first-child").attr("class","basic label-container").attr("style",i).attr("r",h).attr("cx",0).attr("cy",0);return Qe(e,f),e.calcIntersect=function(p,m){let g=p.width/2;return Xe.circle(p,g,m)},e.intersect=function(p){return X.info("Circle intersect",e,h,p),Xe.circle(e,h,p)},a}var U9=M(()=>{"use strict";Ht();pt();tr();Ut();$t();It();o(aw,"circle")});function pRe(t){let e=Math.cos(Math.PI/4),r=Math.sin(Math.PI/4),n=t*2,i={x:n/2*e,y:n/2*r},a={x:-(n/2)*e,y:n/2*r},s={x:-(n/2)*e,y:-(n/2)*r},l={x:n/2*e,y:-(n/2)*r};return`M ${a.x},${a.y} L ${l.x},${l.y} + M ${i.x},${i.y} L ${s.x},${s.y}`}function _J(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r,e.label="";let i=t.insert("g").attr("class",st(e)).attr("id",e.domId??e.id),a=Math.max(30,e?.width??0),{cssStyles:s}=e,l=Ze.svg(i),u=Je(e,{});e.look!=="handDrawn"&&(u.roughness=0,u.fillStyle="solid");let h=l.circle(0,0,a*2,u),f=pRe(a),d=l.path(f,u),p=i.insert(()=>h,":first-child");return p.insert(()=>d),s&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",s),n&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",n),Qe(e,p),e.intersect=function(m){return X.info("crossedCircle intersect",e,{radius:a,point:m}),Xe.circle(e,a,m)},i}var DJ=M(()=>{"use strict";pt();It();$t();Ht();Ut();o(pRe,"createLine");o(_J,"crossedCircle")});function ef(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;dT,":first-child").attr("stroke-opacity",0),S.insert(()=>x,":first-child"),S.attr("class","text"),f&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(${h}, 0)`),s.attr("transform",`translate(${-l/2+h-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),Qe(e,S),e.intersect=function(w){return Xe.polygon(e,p,w)},i}var RJ=M(()=>{"use strict";It();Ut();$t();Ht();o(ef,"generateCirclePoints");o(LJ,"curlyBraceLeft")});function tf(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;dT,":first-child").attr("stroke-opacity",0),S.insert(()=>x,":first-child"),S.attr("class","text"),f&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(${-h}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),Qe(e,S),e.intersect=function(w){return Xe.polygon(e,p,w)},i}var MJ=M(()=>{"use strict";It();Ut();$t();Ht();o(tf,"generateCirclePoints");o(NJ,"curlyBraceRight")});function Pa(t,e,r,n=100,i=0,a=180){let s=[],l=i*Math.PI/180,f=(a*Math.PI/180-l)/(n-1);for(let d=0;dC,":first-child").attr("stroke-opacity",0),A.insert(()=>b,":first-child"),A.insert(()=>w,":first-child"),A.attr("class","text"),f&&e.look!=="handDrawn"&&A.selectAll("path").attr("style",f),n&&e.look!=="handDrawn"&&A.selectAll("path").attr("style",n),A.attr("transform",`translate(${h-h/4}, 0)`),s.attr("transform",`translate(${-l/2+(e.padding??0)/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)/2-(a.y-(a.top??0))})`),Qe(e,A),e.intersect=function(L){return Xe.polygon(e,m,L)},i}var OJ=M(()=>{"use strict";It();Ut();$t();Ht();o(Pa,"generateCirclePoints");o(IJ,"curlyBraces")});async function PJ(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ut(t,e,st(e)),s=80,l=20,u=Math.max(s,(a.width+(e.padding??0)*2)*1.25,e?.width??0),h=Math.max(l,a.height+(e.padding??0)*2,e?.height??0),f=h/2,{cssStyles:d}=e,p=Ze.svg(i),m=Je(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=u,y=h,v=g-f,x=y/4,b=[{x:v,y:0},{x,y:0},{x:0,y:y/2},{x,y},{x:v,y},...Kd(-v,-y/2,f,50,270,90)],T=Vt(b),S=p.path(T,m),w=i.insert(()=>S,":first-child");return w.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&w.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&w.selectChildren("path").attr("style",n),w.attr("transform",`translate(${-u/2}, ${-h/2})`),Qe(e,w),e.intersect=function(k){return Xe.polygon(e,b,k)},i}var BJ=M(()=>{"use strict";It();Ut();$t();Ht();o(PJ,"curvedTrapezoid")});async function FJ(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ut(t,e,st(e)),l=Math.max(a.width+e.padding,e.width??0),u=l/2,h=u/(2.5+l/50),f=Math.max(a.height+h+e.padding,e.height??0),d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=Ze.svg(i),g=gRe(0,0,l,f,u,h),y=yRe(0,h,l,f,u,h),v=m.path(g,Je(e,{})),x=m.path(y,Je(e,{fill:"none"}));d=i.insert(()=>x,":first-child"),d=i.insert(()=>v,":first-child"),d.attr("class","basic label-container"),p&&d.attr("style",p)}else{let m=mRe(0,0,l,f,u,h);d=i.insert("path",":first-child").attr("d",m).attr("class","basic label-container").attr("style",Cn(p)).attr("style",n)}return d.attr("label-offset-y",h),d.attr("transform",`translate(${-l/2}, ${-(f/2+h)})`),Qe(e,d),s.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+(e.padding??0)/1.5-(a.y-(a.top??0))})`),e.intersect=function(m){let g=Xe.rect(e,m),y=g.x-(e.x??0);if(u!=0&&(Math.abs(y)<(e.width??0)/2||Math.abs(y)==(e.width??0)/2&&Math.abs(g.y-(e.y??0))>(e.height??0)/2-h)){let v=h*h*(1-y*y/(u*u));v>0&&(v=Math.sqrt(v)),v=h-v,m.y-(e.y??0)>0&&(v=-v),g.y+=v}return g},i}var mRe,gRe,yRe,$J=M(()=>{"use strict";It();Ut();$t();Ht();tr();mRe=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createCylinderPathD"),gRe=o((t,e,r,n,i,a)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`].join(" "),"createOuterCylinderPathD"),yRe=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");o(FJ,"cylinder")});async function zJ(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ut(t,e,st(e)),l=a.width+e.padding,u=a.height+e.padding,h=u*.2,f=-l/2,d=-u/2-h/2,{cssStyles:p}=e,m=Ze.svg(i),g=Je(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:f,y:d+h},{x:-f,y:d+h},{x:-f,y:-d},{x:f,y:-d},{x:f,y:d},{x:-f,y:d},{x:-f,y:d+h}],v=m.polygon(y.map(b=>[b.x,b.y]),g),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),s.attr("transform",`translate(${f+(e.padding??0)/2-(a.x-(a.left??0))}, ${d+h+(e.padding??0)/2-(a.y-(a.top??0))})`),Qe(e,x),e.intersect=function(b){return Xe.rect(e,b)},i}var GJ=M(()=>{"use strict";It();Ut();$t();Ht();o(zJ,"dividedRectangle")});async function VJ(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s}=await ut(t,e,st(e)),u=a.width/2+s+5,h=a.width/2+s,f,{cssStyles:d}=e;if(e.look==="handDrawn"){let p=Ze.svg(i),m=Je(e,{roughness:.2,strokeWidth:2.5}),g=Je(e,{roughness:.2,strokeWidth:1.5}),y=p.circle(0,0,u*2,m),v=p.circle(0,0,h*2,g);f=i.insert("g",":first-child"),f.attr("class",Cn(e.cssClasses)).attr("style",Cn(d)),f.node()?.appendChild(y),f.node()?.appendChild(v)}else{f=i.insert("g",":first-child");let p=f.insert("circle",":first-child"),m=f.insert("circle");f.attr("class","basic label-container").attr("style",n),p.attr("class","outer-circle").attr("style",n).attr("r",u).attr("cx",0).attr("cy",0),m.attr("class","inner-circle").attr("style",n).attr("r",h).attr("cx",0).attr("cy",0)}return Qe(e,f),e.intersect=function(p){return X.info("DoubleCircle intersect",e,u,p),Xe.circle(e,u,p)},i}var UJ=M(()=>{"use strict";pt();It();Ut();$t();Ht();tr();o(VJ,"doublecircle")});function HJ(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=je(e);e.label="",e.labelStyle=n;let a=t.insert("g").attr("class",st(e)).attr("id",e.domId??e.id),s=7,{cssStyles:l}=e,u=Ze.svg(a),{nodeBorder:h}=r,f=Je(e,{fillStyle:"solid"});e.look!=="handDrawn"&&(f.roughness=0);let d=u.circle(0,0,s*2,f),p=a.insert(()=>d,":first-child");return p.selectAll("path").attr("style",`fill: ${h} !important;`),l&&l.length>0&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",l),i&&e.look!=="handDrawn"&&p.selectAll("path").attr("style",i),Qe(e,p),e.intersect=function(m){return X.info("filledCircle intersect",e,{radius:s,point:m}),Xe.circle(e,s,m)},a}var qJ=M(()=>{"use strict";Ht();pt();Ut();$t();It();o(HJ,"filledCircle")});async function WJ(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ut(t,e,st(e)),l=a.width+(e.padding??0),u=l+a.height,h=l+a.height,f=[{x:0,y:-u},{x:h,y:-u},{x:h/2,y:0}],{cssStyles:d}=e,p=Ze.svg(i),m=Je(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=Vt(f),y=p.path(g,m),v=i.insert(()=>y,":first-child").attr("transform",`translate(${-u/2}, ${u/2})`);return d&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",n),e.width=l,e.height=u,Qe(e,v),s.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${-u/2+(e.padding??0)/2+(a.y-(a.top??0))})`),e.intersect=function(x){return X.info("Triangle intersect",e,f,x),Xe.polygon(e,f,x)},i}var YJ=M(()=>{"use strict";pt();It();Ut();$t();Ht();It();o(WJ,"flippedTriangle")});function XJ(t,e,{dir:r,config:{state:n,themeVariables:i}}){let{nodeStyles:a}=je(e);e.label="";let s=t.insert("g").attr("class",st(e)).attr("id",e.domId??e.id),{cssStyles:l}=e,u=Math.max(70,e?.width??0),h=Math.max(10,e?.height??0);r==="LR"&&(u=Math.max(10,e?.width??0),h=Math.max(70,e?.height??0));let f=-1*u/2,d=-1*h/2,p=Ze.svg(s),m=Je(e,{stroke:i.lineColor,fill:i.lineColor});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=p.rectangle(f,d,u,h,m),y=s.insert(()=>g,":first-child");l&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",l),a&&e.look!=="handDrawn"&&y.selectAll("path").attr("style",a),Qe(e,y);let v=n?.padding??0;return e.width&&e.height&&(e.width+=v/2||0,e.height+=v/2||0),e.intersect=function(x){return Xe.rect(e,x)},s}var jJ=M(()=>{"use strict";Ht();Ut();$t();It();o(XJ,"forkJoin")});async function KJ(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let i=80,a=50,{shapeSvg:s,bbox:l}=await ut(t,e,st(e)),u=Math.max(i,l.width+(e.padding??0)*2,e?.width??0),h=Math.max(a,l.height+(e.padding??0)*2,e?.height??0),f=h/2,{cssStyles:d}=e,p=Ze.svg(s),m=Je(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:-u/2,y:-h/2},{x:u/2-f,y:-h/2},...Kd(-u/2+f,0,f,50,90,270),{x:u/2-f,y:h/2},{x:-u/2,y:h/2}],y=Vt(g),v=p.path(y,m),x=s.insert(()=>v,":first-child");return x.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),Qe(e,x),e.intersect=function(b){return X.info("Pill intersect",e,{radius:f,point:b}),Xe.polygon(e,g,b)},s}var QJ=M(()=>{"use strict";pt();It();Ut();$t();Ht();o(KJ,"halfRoundedRectangle")});async function ZJ(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ut(t,e,st(e)),s=a.height+(e.padding??0),l=a.width+(e.padding??0)*2.5,{cssStyles:u}=e,h=Ze.svg(i),f=Je(e,{});e.look!=="handDrawn"&&(f.roughness=0,f.fillStyle="solid");let d=l/2,p=d/6;d=d+p;let m=s/2,g=m/2,y=d-g,v=[{x:-y,y:-m},{x:0,y:-m},{x:y,y:-m},{x:d,y:0},{x:y,y:m},{x:0,y:m},{x:-y,y:m},{x:-d,y:0}],x=Vt(v),b=h.path(x,f),T=i.insert(()=>b,":first-child");return T.attr("class","basic label-container"),u&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",u),n&&e.look!=="handDrawn"&&T.selectChildren("path").attr("style",n),e.width=l,e.height=s,Qe(e,T),e.intersect=function(S){return Xe.polygon(e,v,S)},i}var JJ=M(()=>{"use strict";It();Ut();$t();Ht();o(ZJ,"hexagon")});async function eee(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.label="",e.labelStyle=r;let{shapeSvg:i}=await ut(t,e,st(e)),a=Math.max(30,e?.width??0),s=Math.max(30,e?.height??0),{cssStyles:l}=e,u=Ze.svg(i),h=Je(e,{});e.look!=="handDrawn"&&(h.roughness=0,h.fillStyle="solid");let f=[{x:0,y:0},{x:a,y:0},{x:0,y:s},{x:a,y:s}],d=Vt(f),p=u.path(d,h),m=i.insert(()=>p,":first-child");return m.attr("class","basic label-container"),l&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",l),n&&e.look!=="handDrawn"&&m.selectChildren("path").attr("style",n),m.attr("transform",`translate(${-a/2}, ${-s/2})`),Qe(e,m),e.intersect=function(g){return X.info("Pill intersect",e,{points:f}),Xe.polygon(e,f,g)},i}var tee=M(()=>{"use strict";pt();It();Ut();$t();Ht();o(eee,"hourglass")});async function ree(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=je(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await ut(t,e,"icon-shape default"),p=e.pos==="t",m=l,g=l,{nodeBorder:y}=r,{stylesMap:v}=wc(e),x=-g/2,b=-m/2,T=e.label?8:0,S=Ze.svg(h),w=Je(e,{stroke:"none",fill:"none"});e.look!=="handDrawn"&&(w.roughness=0,w.fillStyle="solid");let k=S.rectangle(x,b,g,m,w),C=Math.max(g,f.width),A=m+f.height+T,L=S.rectangle(-C/2,-A/2,C,A,{...w,fill:"transparent",stroke:"none"}),I=h.insert(()=>k,":first-child"),R=h.insert(()=>L);if(e.icon){let E=h.append("g");E.html(`${await _s(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let _=E.node().getBBox(),D=_.width,O=_.height,N=_.x,P=_.y;E.attr("transform",`translate(${-D/2-N},${p?f.height/2+T/2-O/2-P:-f.height/2-T/2-O/2-P})`),E.attr("style",`color: ${v.get("stroke")??y};`)}return d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${p?-A/2:A/2-f.height})`),I.attr("transform",`translate(0,${p?f.height/2+T/2:-f.height/2-T/2})`),Qe(e,R),e.intersect=function(E){if(X.info("iconSquare intersect",e,E),!e.label)return Xe.rect(e,E);let _=e.x??0,D=e.y??0,O=e.height??0,N=[];return p?N=[{x:_-f.width/2,y:D-O/2},{x:_+f.width/2,y:D-O/2},{x:_+f.width/2,y:D-O/2+f.height+T},{x:_+g/2,y:D-O/2+f.height+T},{x:_+g/2,y:D+O/2},{x:_-g/2,y:D+O/2},{x:_-g/2,y:D-O/2+f.height+T},{x:_-f.width/2,y:D-O/2+f.height+T}]:N=[{x:_-g/2,y:D-O/2},{x:_+g/2,y:D-O/2},{x:_+g/2,y:D-O/2+m},{x:_+f.width/2,y:D-O/2+m},{x:_+f.width/2/2,y:D+O/2},{x:_-f.width/2,y:D+O/2},{x:_-f.width/2,y:D-O/2+m},{x:_-g/2,y:D-O/2+m}],Xe.polygon(e,N,E)},h}var nee=M(()=>{"use strict";Ht();pt();nc();Ut();$t();It();o(ree,"icon")});async function iee(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=je(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,label:d}=await ut(t,e,"icon-shape default"),p=20,m=e.label?8:0,g=e.pos==="t",{nodeBorder:y,mainBkg:v}=r,{stylesMap:x}=wc(e),b=Ze.svg(h),T=Je(e,{});e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let S=x.get("fill");T.stroke=S??v;let w=h.append("g");e.icon&&w.html(`${await _s(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let k=w.node().getBBox(),C=k.width,A=k.height,L=k.x,I=k.y,R=Math.max(C,A)*Math.SQRT2+p*2,E=b.circle(0,0,R,T),_=Math.max(R,f.width),D=R+f.height+m,O=b.rectangle(-_/2,-D/2,_,D,{...T,fill:"transparent",stroke:"none"}),N=h.insert(()=>E,":first-child"),P=h.insert(()=>O);return w.attr("transform",`translate(${-C/2-L},${g?f.height/2+m/2-A/2-I:-f.height/2-m/2-A/2-I})`),w.attr("style",`color: ${x.get("stroke")??y};`),d.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${g?-D/2:D/2-f.height})`),N.attr("transform",`translate(0,${g?f.height/2+m/2:-f.height/2-m/2})`),Qe(e,P),e.intersect=function(B){return X.info("iconSquare intersect",e,B),Xe.rect(e,B)},h}var aee=M(()=>{"use strict";Ht();pt();nc();Ut();$t();It();o(iee,"iconCircle")});var Fs,Zd=M(()=>{"use strict";Fs=o((t,e,r,n,i)=>["M",t+i,e,"H",t+r-i,"A",i,i,0,0,1,t+r,e+i,"V",e+n-i,"A",i,i,0,0,1,t+r-i,e+n,"H",t+i,"A",i,i,0,0,1,t,e+n-i,"V",e+i,"A",i,i,0,0,1,t+i,e,"Z"].join(" "),"createRoundedRectPathD")});async function see(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=je(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await ut(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=wc(e),T=-y/2,S=-g/2,w=e.label?8:0,k=Ze.svg(h),C=Je(e,{});e.look!=="handDrawn"&&(C.roughness=0,C.fillStyle="solid");let A=b.get("fill");C.stroke=A??x;let L=k.path(Fs(T,S,y,g,5),C),I=Math.max(y,f.width),R=g+f.height+w,E=k.rectangle(-I/2,-R/2,I,R,{...C,fill:"transparent",stroke:"none"}),_=h.insert(()=>L,":first-child").attr("class","icon-shape2"),D=h.insert(()=>E);if(e.icon){let O=h.append("g");O.html(`${await _s(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let N=O.node().getBBox(),P=N.width,B=N.height,F=N.x,V=N.y;O.attr("transform",`translate(${-P/2-F},${m?f.height/2+w/2-B/2-V:-f.height/2-w/2-B/2-V})`),O.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-R/2:R/2-f.height})`),_.attr("transform",`translate(0,${m?f.height/2+w/2:-f.height/2-w/2})`),Qe(e,D),e.intersect=function(O){if(X.info("iconSquare intersect",e,O),!e.label)return Xe.rect(e,O);let N=e.x??0,P=e.y??0,B=e.height??0,F=[];return m?F=[{x:N-f.width/2,y:P-B/2},{x:N+f.width/2,y:P-B/2},{x:N+f.width/2,y:P-B/2+f.height+w},{x:N+y/2,y:P-B/2+f.height+w},{x:N+y/2,y:P+B/2},{x:N-y/2,y:P+B/2},{x:N-y/2,y:P-B/2+f.height+w},{x:N-f.width/2,y:P-B/2+f.height+w}]:F=[{x:N-y/2,y:P-B/2},{x:N+y/2,y:P-B/2},{x:N+y/2,y:P-B/2+g},{x:N+f.width/2,y:P-B/2+g},{x:N+f.width/2/2,y:P+B/2},{x:N-f.width/2,y:P+B/2},{x:N-f.width/2,y:P-B/2+g},{x:N-y/2,y:P-B/2+g}],Xe.polygon(e,F,O)},h}var oee=M(()=>{"use strict";Ht();pt();nc();Ut();$t();Zd();It();o(see,"iconRounded")});async function lee(t,e,{config:{themeVariables:r,flowchart:n}}){let{labelStyles:i}=je(e);e.labelStyle=i;let a=e.assetHeight??48,s=e.assetWidth??48,l=Math.max(a,s),u=n?.wrappingWidth;e.width=Math.max(l,u??0);let{shapeSvg:h,bbox:f,halfPadding:d,label:p}=await ut(t,e,"icon-shape default"),m=e.pos==="t",g=l+d*2,y=l+d*2,{nodeBorder:v,mainBkg:x}=r,{stylesMap:b}=wc(e),T=-y/2,S=-g/2,w=e.label?8:0,k=Ze.svg(h),C=Je(e,{});e.look!=="handDrawn"&&(C.roughness=0,C.fillStyle="solid");let A=b.get("fill");C.stroke=A??x;let L=k.path(Fs(T,S,y,g,.1),C),I=Math.max(y,f.width),R=g+f.height+w,E=k.rectangle(-I/2,-R/2,I,R,{...C,fill:"transparent",stroke:"none"}),_=h.insert(()=>L,":first-child"),D=h.insert(()=>E);if(e.icon){let O=h.append("g");O.html(`${await _s(e.icon,{height:l,width:l,fallbackPrefix:""})}`);let N=O.node().getBBox(),P=N.width,B=N.height,F=N.x,V=N.y;O.attr("transform",`translate(${-P/2-F},${m?f.height/2+w/2-B/2-V:-f.height/2-w/2-B/2-V})`),O.attr("style",`color: ${b.get("stroke")??v};`)}return p.attr("transform",`translate(${-f.width/2-(f.x-(f.left??0))},${m?-R/2:R/2-f.height})`),_.attr("transform",`translate(0,${m?f.height/2+w/2:-f.height/2-w/2})`),Qe(e,D),e.intersect=function(O){if(X.info("iconSquare intersect",e,O),!e.label)return Xe.rect(e,O);let N=e.x??0,P=e.y??0,B=e.height??0,F=[];return m?F=[{x:N-f.width/2,y:P-B/2},{x:N+f.width/2,y:P-B/2},{x:N+f.width/2,y:P-B/2+f.height+w},{x:N+y/2,y:P-B/2+f.height+w},{x:N+y/2,y:P+B/2},{x:N-y/2,y:P+B/2},{x:N-y/2,y:P-B/2+f.height+w},{x:N-f.width/2,y:P-B/2+f.height+w}]:F=[{x:N-y/2,y:P-B/2},{x:N+y/2,y:P-B/2},{x:N+y/2,y:P-B/2+g},{x:N+f.width/2,y:P-B/2+g},{x:N+f.width/2/2,y:P+B/2},{x:N-f.width/2,y:P+B/2},{x:N-f.width/2,y:P-B/2+g},{x:N-y/2,y:P-B/2+g}],Xe.polygon(e,F,O)},h}var cee=M(()=>{"use strict";Ht();pt();nc();Ut();Zd();$t();It();o(lee,"iconSquare")});async function uee(t,e,{config:{flowchart:r}}){let n=new Image;n.src=e?.img??"",await n.decode();let i=Number(n.naturalWidth.toString().replace("px","")),a=Number(n.naturalHeight.toString().replace("px",""));e.imageAspectRatio=i/a;let{labelStyles:s}=je(e);e.labelStyle=s;let l=r?.wrappingWidth;e.defaultWidth=r?.wrappingWidth;let u=Math.max(e.label?l??0:0,e?.assetWidth??i),h=e.constraint==="on"&&e?.assetHeight?e.assetHeight*e.imageAspectRatio:u,f=e.constraint==="on"?h/e.imageAspectRatio:e?.assetHeight??a;e.width=Math.max(h,l??0);let{shapeSvg:d,bbox:p,label:m}=await ut(t,e,"image-shape default"),g=e.pos==="t",y=-h/2,v=-f/2,x=e.label?8:0,b=Ze.svg(d),T=Je(e,{});e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let S=b.rectangle(y,v,h,f,T),w=Math.max(h,p.width),k=f+p.height+x,C=b.rectangle(-w/2,-k/2,w,k,{...T,fill:"none",stroke:"none"}),A=d.insert(()=>S,":first-child"),L=d.insert(()=>C);if(e.img){let I=d.append("image");I.attr("href",e.img),I.attr("width",h),I.attr("height",f),I.attr("preserveAspectRatio","none"),I.attr("transform",`translate(${-h/2},${g?k/2-f:-k/2})`)}return m.attr("transform",`translate(${-p.width/2-(p.x-(p.left??0))},${g?-f/2-p.height/2-x/2:f/2-p.height/2+x/2})`),A.attr("transform",`translate(0,${g?p.height/2+x/2:-p.height/2-x/2})`),Qe(e,L),e.intersect=function(I){if(X.info("iconSquare intersect",e,I),!e.label)return Xe.rect(e,I);let R=e.x??0,E=e.y??0,_=e.height??0,D=[];return g?D=[{x:R-p.width/2,y:E-_/2},{x:R+p.width/2,y:E-_/2},{x:R+p.width/2,y:E-_/2+p.height+x},{x:R+h/2,y:E-_/2+p.height+x},{x:R+h/2,y:E+_/2},{x:R-h/2,y:E+_/2},{x:R-h/2,y:E-_/2+p.height+x},{x:R-p.width/2,y:E-_/2+p.height+x}]:D=[{x:R-h/2,y:E-_/2},{x:R+h/2,y:E-_/2},{x:R+h/2,y:E-_/2+f},{x:R+p.width/2,y:E-_/2+f},{x:R+p.width/2/2,y:E+_/2},{x:R-p.width/2,y:E+_/2},{x:R-p.width/2,y:E-_/2+f},{x:R-h/2,y:E-_/2+f}],Xe.polygon(e,D,I)},d}var hee=M(()=>{"use strict";Ht();pt();Ut();$t();It();o(uee,"imageSquare")});async function fee(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ut(t,e,st(e)),s=Math.max(a.width+(e.padding??0)*2,e?.width??0),l=Math.max(a.height+(e.padding??0)*2,e?.height??0),u=[{x:0,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:-3*l/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Ze.svg(i),p=Je(e,{}),m=Vt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Bs(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,Qe(e,h),e.intersect=function(d){return Xe.polygon(e,u,d)},i}var dee=M(()=>{"use strict";It();Ut();$t();Ht();Jh();o(fee,"inv_trapezoid")});async function Jd(t,e,r){let{labelStyles:n,nodeStyles:i}=je(e);e.labelStyle=n;let{shapeSvg:a,bbox:s}=await ut(t,e,st(e)),l=Math.max(s.width+r.labelPaddingX*2,e?.width||0),u=Math.max(s.height+r.labelPaddingY*2,e?.height||0),h=-l/2,f=-u/2,d,{rx:p,ry:m}=e,{cssStyles:g}=e;if(r?.rx&&r.ry&&(p=r.rx,m=r.ry),e.look==="handDrawn"){let y=Ze.svg(a),v=Je(e,{}),x=p||m?y.path(Fs(h,f,l,u,p||0),v):y.rectangle(h,f,l,u,v);d=a.insert(()=>x,":first-child"),d.attr("class","basic label-container").attr("style",Cn(g))}else d=a.insert("rect",":first-child"),d.attr("class","basic label-container").attr("style",i).attr("rx",Cn(p)).attr("ry",Cn(m)).attr("x",h).attr("y",f).attr("width",l).attr("height",u);return Qe(e,d),e.calcIntersect=function(y,v){return Xe.rect(y,v)},e.intersect=function(y){return Xe.rect(e,y)},a}var I2=M(()=>{"use strict";It();Ut();Zd();$t();Ht();tr();o(Jd,"drawRect")});async function pee(t,e){let{shapeSvg:r,bbox:n,label:i}=await ut(t,e,"label"),a=r.insert("rect",":first-child");return a.attr("width",.1).attr("height",.1),r.attr("class","label edgeLabel"),i.attr("transform",`translate(${-(n.width/2)-(n.x-(n.left??0))}, ${-(n.height/2)-(n.y-(n.top??0))})`),Qe(e,a),e.intersect=function(u){return Xe.rect(e,u)},r}var mee=M(()=>{"use strict";I2();It();Ut();o(pee,"labelRect")});async function gee(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ut(t,e,st(e)),s=Math.max(a.width+(e.padding??0),e?.width??0),l=Math.max(a.height+(e.padding??0),e?.height??0),u=[{x:0,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:-(3*l)/6,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Ze.svg(i),p=Je(e,{}),m=Vt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Bs(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,Qe(e,h),e.intersect=function(d){return Xe.polygon(e,u,d)},i}var yee=M(()=>{"use strict";It();Ut();$t();Ht();Jh();o(gee,"lean_left")});async function vee(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ut(t,e,st(e)),s=Math.max(a.width+(e.padding??0),e?.width??0),l=Math.max(a.height+(e.padding??0),e?.height??0),u=[{x:-3*l/6,y:0},{x:s,y:0},{x:s+3*l/6,y:-l},{x:0,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Ze.svg(i),p=Je(e,{}),m=Vt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Bs(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,Qe(e,h),e.intersect=function(d){return Xe.polygon(e,u,d)},i}var xee=M(()=>{"use strict";It();Ut();$t();Ht();Jh();o(vee,"lean_right")});function bee(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.label="",e.labelStyle=r;let i=t.insert("g").attr("class",st(e)).attr("id",e.domId??e.id),{cssStyles:a}=e,s=Math.max(35,e?.width??0),l=Math.max(35,e?.height??0),u=7,h=[{x:s,y:0},{x:0,y:l+u/2},{x:s-2*u,y:l+u/2},{x:0,y:2*l},{x:s,y:l-u/2},{x:2*u,y:l-u/2}],f=Ze.svg(i),d=Je(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=Vt(h),m=f.path(p,d),g=i.insert(()=>m,":first-child");return a&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",a),n&&e.look!=="handDrawn"&&g.selectAll("path").attr("style",n),g.attr("transform",`translate(-${s/2},${-l})`),Qe(e,g),e.intersect=function(y){return X.info("lightningBolt intersect",e,y),Xe.polygon(e,h,y)},i}var Tee=M(()=>{"use strict";pt();It();$t();Ht();Ut();It();o(bee,"lightningBolt")});async function wee(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ut(t,e,st(e)),l=Math.max(a.width+(e.padding??0),e.width??0),u=l/2,h=u/(2.5+l/50),f=Math.max(a.height+h+(e.padding??0),e.height??0),d=f*.1,p,{cssStyles:m}=e;if(e.look==="handDrawn"){let g=Ze.svg(i),y=xRe(0,0,l,f,u,h,d),v=bRe(0,h,l,f,u,h),x=Je(e,{}),b=g.path(y,x),T=g.path(v,x);i.insert(()=>T,":first-child").attr("class","line"),p=i.insert(()=>b,":first-child"),p.attr("class","basic label-container"),m&&p.attr("style",m)}else{let g=vRe(0,0,l,f,u,h,d);p=i.insert("path",":first-child").attr("d",g).attr("class","basic label-container").attr("style",Cn(m)).attr("style",n)}return p.attr("label-offset-y",h),p.attr("transform",`translate(${-l/2}, ${-(f/2+h)})`),Qe(e,p),s.attr("transform",`translate(${-(a.width/2)-(a.x-(a.left??0))}, ${-(a.height/2)+h-(a.y-(a.top??0))})`),e.intersect=function(g){let y=Xe.rect(e,g),v=y.x-(e.x??0);if(u!=0&&(Math.abs(v)<(e.width??0)/2||Math.abs(v)==(e.width??0)/2&&Math.abs(y.y-(e.y??0))>(e.height??0)/2-h)){let x=h*h*(1-v*v/(u*u));x>0&&(x=Math.sqrt(x)),x=h-x,g.y-(e.y??0)>0&&(x=-x),y.y+=x}return y},i}var vRe,xRe,bRe,kee=M(()=>{"use strict";It();Ut();$t();Ht();tr();vRe=o((t,e,r,n,i,a,s)=>[`M${t},${e+a}`,`a${i},${a} 0,0,0 ${r},0`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`,`M${t},${e+a+s}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createCylinderPathD"),xRe=o((t,e,r,n,i,a,s)=>[`M${t},${e+a}`,`M${t+r},${e+a}`,`a${i},${a} 0,0,0 ${-r},0`,`l0,${n}`,`a${i},${a} 0,0,0 ${r},0`,`l0,${-n}`,`M${t},${e+a+s}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createOuterCylinderPathD"),bRe=o((t,e,r,n,i,a)=>[`M${t-r/2},${-n/2}`,`a${i},${a} 0,0,0 ${r},0`].join(" "),"createInnerCylinderPathD");o(wee,"linedCylinder")});async function Eee(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ut(t,e,st(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=u+h,{cssStyles:d}=e,p=Ze.svg(i),m=Je(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:-l/2-l/2*.1,y:-f/2},{x:-l/2-l/2*.1,y:f/2},...Go(-l/2-l/2*.1,f/2,l/2+l/2*.1,f/2,h,.8),{x:l/2+l/2*.1,y:-f/2},{x:-l/2-l/2*.1,y:-f/2},{x:-l/2,y:-f/2},{x:-l/2,y:f/2*1.1},{x:-l/2,y:-f/2}],y=p.polygon(g.map(x=>[x.x,x.y]),m),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",d),n&&e.look!=="handDrawn"&&v.selectAll("path").attr("style",n),v.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)+l/2*.1/2-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),Qe(e,v),e.intersect=function(x){return Xe.polygon(e,g,x)},i}var See=M(()=>{"use strict";It();Ut();Ht();$t();o(Eee,"linedWaveEdgedRect")});async function Cee(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ut(t,e,st(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=5,f=-l/2,d=-u/2,{cssStyles:p}=e,m=Ze.svg(i),g=Je(e,{}),y=[{x:f-h,y:d+h},{x:f-h,y:d+u+h},{x:f+l-h,y:d+u+h},{x:f+l-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d+u-h},{x:f+l+h,y:d+u-h},{x:f+l+h,y:d-h},{x:f+h,y:d-h},{x:f+h,y:d},{x:f,y:d},{x:f,y:d+h}],v=[{x:f,y:d+h},{x:f+l-h,y:d+h},{x:f+l-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d},{x:f,y:d}];e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=Vt(y),b=m.path(x,g),T=Vt(v),S=m.path(T,{...g,fill:"none"}),w=i.insert(()=>S,":first-child");return w.insert(()=>b,":first-child"),w.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&w.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&w.selectAll("path").attr("style",n),s.attr("transform",`translate(${-(a.width/2)-h-(a.x-(a.left??0))}, ${-(a.height/2)+h-(a.y-(a.top??0))})`),Qe(e,w),e.intersect=function(k){return Xe.polygon(e,y,k)},i}var Aee=M(()=>{"use strict";It();$t();Ht();Ut();o(Cee,"multiRect")});async function _ee(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ut(t,e,st(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=u+h,d=-l/2,p=-f/2,m=5,{cssStyles:g}=e,y=Go(d-m,p+f+m,d+l-m,p+f+m,h,.8),v=y?.[y.length-1],x=[{x:d-m,y:p+m},{x:d-m,y:p+f+m},...y,{x:d+l-m,y:v.y-m},{x:d+l,y:v.y-m},{x:d+l,y:v.y-2*m},{x:d+l+m,y:v.y-2*m},{x:d+l+m,y:p-m},{x:d+m,y:p-m},{x:d+m,y:p},{x:d,y:p},{x:d,y:p+m}],b=[{x:d,y:p+m},{x:d+l-m,y:p+m},{x:d+l-m,y:v.y-m},{x:d+l,y:v.y-m},{x:d+l,y:p},{x:d,y:p}],T=Ze.svg(i),S=Je(e,{});e.look!=="handDrawn"&&(S.roughness=0,S.fillStyle="solid");let w=Vt(x),k=T.path(w,S),C=Vt(b),A=T.path(C,S),L=i.insert(()=>k,":first-child");return L.insert(()=>A),L.attr("class","basic label-container"),g&&e.look!=="handDrawn"&&L.selectAll("path").attr("style",g),n&&e.look!=="handDrawn"&&L.selectAll("path").attr("style",n),L.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-(a.width/2)-m-(a.x-(a.left??0))}, ${-(a.height/2)+m-h/2-(a.y-(a.top??0))})`),Qe(e,L),e.intersect=function(I){return Xe.polygon(e,x,I)},i}var Dee=M(()=>{"use strict";It();Ut();Ht();$t();o(_ee,"multiWaveEdgedRectangle")});async function Lee(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=je(e);e.labelStyle=n,e.useHtmlLabels||Qt().flowchart?.htmlLabels!==!1||(e.centerLabel=!0);let{shapeSvg:s,bbox:l,label:u}=await ut(t,e,st(e)),h=Math.max(l.width+(e.padding??0)*2,e?.width??0),f=Math.max(l.height+(e.padding??0)*2,e?.height??0),d=-h/2,p=-f/2,{cssStyles:m}=e,g=Ze.svg(s),y=Je(e,{fill:r.noteBkgColor,stroke:r.noteBorderColor});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=g.rectangle(d,p,h,f,y),x=s.insert(()=>v,":first-child");return x.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",m),i&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",i),u.attr("transform",`translate(${-l.width/2-(l.x-(l.left??0))}, ${-(l.height/2)-(l.y-(l.top??0))})`),Qe(e,x),e.intersect=function(b){return Xe.rect(e,b)},s}var Ree=M(()=>{"use strict";Ht();Ut();$t();It();qn();o(Lee,"note")});async function Nee(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ut(t,e,st(e)),s=a.width+e.padding,l=a.height+e.padding,u=s+l,h=.5,f=[{x:u/2,y:0},{x:u,y:-u/2},{x:u/2,y:-u},{x:0,y:-u/2}],d,{cssStyles:p}=e;if(e.look==="handDrawn"){let m=Ze.svg(i),g=Je(e,{}),y=TRe(0,0,u),v=m.path(y,g);d=i.insert(()=>v,":first-child").attr("transform",`translate(${-u/2+h}, ${u/2})`),p&&d.attr("style",p)}else d=Bs(i,u,u,f),d.attr("transform",`translate(${-u/2+h}, ${u/2})`);return n&&d.attr("style",n),Qe(e,d),e.calcIntersect=function(m,g){let y=m.width,v=[{x:y/2,y:0},{x:y,y:-y/2},{x:y/2,y:-y},{x:0,y:-y/2}],x=Xe.polygon(m,v,g);return{x:x.x-.5,y:x.y-.5}},e.intersect=function(m){return this.calcIntersect(e,m)},i}var TRe,Mee=M(()=>{"use strict";It();Ut();$t();Ht();Jh();TRe=o((t,e,r)=>[`M${t+r/2},${e}`,`L${t+r},${e-r/2}`,`L${t+r/2},${e-r}`,`L${t},${e-r/2}`,"Z"].join(" "),"createDecisionBoxPathD");o(Nee,"question")});async function Iee(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ut(t,e,st(e)),l=Math.max(a.width+(e.padding??0),e?.width??0),u=Math.max(a.height+(e.padding??0),e?.height??0),h=-l/2,f=-u/2,d=f/2,p=[{x:h+d,y:f},{x:h,y:0},{x:h+d,y:-f},{x:-h,y:-f},{x:-h,y:f}],{cssStyles:m}=e,g=Ze.svg(i),y=Je(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=Vt(p),x=g.path(v,y),b=i.insert(()=>x,":first-child");return b.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",n),b.attr("transform",`translate(${-d/2},0)`),s.attr("transform",`translate(${-d/2-a.width/2-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),Qe(e,b),e.intersect=function(T){return Xe.polygon(e,p,T)},i}var Oee=M(()=>{"use strict";It();Ut();$t();Ht();o(Iee,"rect_left_inv_arrow")});function wRe(t,e){e&&t.attr("style",e)}async function kRe(t){let e=qe(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=ge(),i=t.label;t.label&&kn(t.label)&&(i=await kh(t.label.replace(tt.lineBreakRegex,` +`),n));let s='"+i+"";return r.html(sr(s,n)),wRe(r,t.labelStyle),r.style("display","inline-block"),r.style("padding-right","1px"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}var ERe,kc,sw=M(()=>{"use strict";yr();Xt();gr();pt();tr();o(wRe,"applyStyle");o(kRe,"addHtmlLabel");ERe=o(async(t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),vr(ge().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"
    "),X.info("vertexText"+i);let a={isNode:n,label:Ji(i).replace(/fa[blrs]?:fa-[\w-]+/g,l=>``),labelStyle:e&&e.replace("fill:","color:")};return await kRe(a)}else{let a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|/gi):Array.isArray(i)?s=i:s=[];for(let l of s){let u=document.createElementNS("http://www.w3.org/2000/svg","tspan");u.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),u.setAttribute("dy","1em"),u.setAttribute("x","0"),r?u.setAttribute("class","title-row"):u.setAttribute("class","row"),u.textContent=l.trim(),a.appendChild(u)}return a}},"createLabel"),kc=ERe});async function Pee(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let i;e.cssClasses?i="node "+e.cssClasses:i="node default";let a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=a.insert("g"),l=a.insert("g").attr("class","label").attr("style",n),u=e.description,h=e.label,f=l.node().appendChild(await kc(h,e.labelStyle,!0,!0)),d={width:0,height:0};if(vr(ge()?.flowchart?.htmlLabels)){let A=f.children[0],L=qe(f);d=A.getBoundingClientRect(),L.attr("width",d.width),L.attr("height",d.height)}X.info("Text 2",u);let p=u||[],m=f.getBBox(),g=l.node().appendChild(await kc(p.join?p.join("
    "):p,e.labelStyle,!0,!0)),y=g.children[0],v=qe(g);d=y.getBoundingClientRect(),v.attr("width",d.width),v.attr("height",d.height);let x=(e.padding||0)/2;qe(g).attr("transform","translate( "+(d.width>m.width?0:(m.width-d.width)/2)+", "+(m.height+x+5)+")"),qe(f).attr("transform","translate( "+(d.width(X.debug("Rough node insert CXC",I),R),":first-child"),k=a.insert(()=>(X.debug("Rough node insert CXC",I),I),":first-child")}else k=s.insert("rect",":first-child"),C=s.insert("line"),k.attr("class","outer title-state").attr("style",n).attr("x",-d.width/2-x).attr("y",-d.height/2-x).attr("width",d.width+(e.padding||0)).attr("height",d.height+(e.padding||0)),C.attr("class","divider").attr("x1",-d.width/2-x).attr("x2",d.width/2+x).attr("y1",-d.height/2-x+m.height+x).attr("y2",-d.height/2-x+m.height+x);return Qe(e,k),e.intersect=function(A){return Xe.rect(e,A)},a}var Bee=M(()=>{"use strict";yr();gr();It();sw();Ut();$t();Ht();Xt();Zd();pt();o(Pee,"rectWithTitle")});function ow(t,e,r,n,i,a,s){let u=(t+r)/2,h=(e+n)/2,f=Math.atan2(n-e,r-t),d=(r-t)/2,p=(n-e)/2,m=d/i,g=p/a,y=Math.sqrt(m**2+g**2);if(y>1)throw new Error("The given radii are too small to create an arc between the points.");let v=Math.sqrt(1-y**2),x=u+v*a*Math.sin(f)*(s?-1:1),b=h-v*i*Math.cos(f)*(s?-1:1),T=Math.atan2((e-b)/a,(t-x)/i),w=Math.atan2((n-b)/a,(r-x)/i)-T;s&&w<0&&(w+=2*Math.PI),!s&&w>0&&(w-=2*Math.PI);let k=[];for(let C=0;C<20;C++){let A=C/19,L=T+A*w,I=x+i*Math.cos(L),R=b+a*Math.sin(L);k.push({x:I,y:R})}return k}async function Fee(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ut(t,e,st(e)),s=e?.padding??0,l=e?.padding??0,u=(e?.width?e?.width:a.width)+s*2,h=(e?.height?e?.height:a.height)+l*2,f=e.radius||5,d=e.taper||5,{cssStyles:p}=e,m=Ze.svg(i),g=Je(e,{});e.stroke&&(g.stroke=e.stroke),e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:-u/2+d,y:-h/2},{x:u/2-d,y:-h/2},...ow(u/2-d,-h/2,u/2,-h/2+d,f,f,!0),{x:u/2,y:-h/2+d},{x:u/2,y:h/2-d},...ow(u/2,h/2-d,u/2-d,h/2,f,f,!0),{x:u/2-d,y:h/2},{x:-u/2+d,y:h/2},...ow(-u/2+d,h/2,-u/2,h/2-d,f,f,!0),{x:-u/2,y:h/2-d},{x:-u/2,y:-h/2+d},...ow(-u/2,-h/2+d,-u/2+d,-h/2,f,f,!0)],v=Vt(y),x=m.path(v,g),b=i.insert(()=>x,":first-child");return b.attr("class","basic label-container outer-path"),p&&e.look!=="handDrawn"&&b.selectChildren("path").attr("style",p),n&&e.look!=="handDrawn"&&b.selectChildren("path").attr("style",n),Qe(e,b),e.intersect=function(T){return Xe.polygon(e,y,T)},i}var $ee=M(()=>{"use strict";It();Ut();$t();Ht();o(ow,"generateArcPoints");o(Fee,"roundedRect")});async function zee(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ut(t,e,st(e)),l=e?.padding??0,u=Math.max(a.width+(e.padding??0)*2,e?.width??0),h=Math.max(a.height+(e.padding??0)*2,e?.height??0),f=-a.width/2-l,d=-a.height/2-l,{cssStyles:p}=e,m=Ze.svg(i),g=Je(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=[{x:f,y:d},{x:f+u+8,y:d},{x:f+u+8,y:d+h},{x:f-8,y:d+h},{x:f-8,y:d},{x:f,y:d},{x:f,y:d+h}],v=m.polygon(y.map(b=>[b.x,b.y]),g),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container").attr("style",Cn(p)),n&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),p&&e.look!=="handDrawn"&&x.selectAll("path").attr("style",n),s.attr("transform",`translate(${-u/2+4+(e.padding??0)-(a.x-(a.left??0))},${-h/2+(e.padding??0)-(a.y-(a.top??0))})`),Qe(e,x),e.intersect=function(b){return Xe.rect(e,b)},i}var Gee=M(()=>{"use strict";It();Ut();$t();Ht();tr();o(zee,"shadedProcess")});async function Vee(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ut(t,e,st(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=-l/2,f=-u/2,{cssStyles:d}=e,p=Ze.svg(i),m=Je(e,{});e.look!=="handDrawn"&&(m.roughness=0,m.fillStyle="solid");let g=[{x:h,y:f},{x:h,y:f+u},{x:h+l,y:f+u},{x:h+l,y:f-u/2}],y=Vt(g),v=p.path(y,m),x=i.insert(()=>v,":first-child");return x.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",d),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),x.attr("transform",`translate(0, ${u/4})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))}, ${-u/4+(e.padding??0)-(a.y-(a.top??0))})`),Qe(e,x),e.intersect=function(b){return Xe.polygon(e,g,b)},i}var Uee=M(()=>{"use strict";It();Ut();$t();Ht();o(Vee,"slopedRect")});async function Hee(t,e){let r={rx:0,ry:0,classes:"",labelPaddingX:e.labelPaddingX??(e?.padding||0)*2,labelPaddingY:(e?.padding||0)*1};return Jd(t,e,r)}var qee=M(()=>{"use strict";I2();o(Hee,"squareRect")});async function Wee(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ut(t,e,st(e)),s=a.height+e.padding,l=a.width+s/4+e.padding,u=s/2,{cssStyles:h}=e,f=Ze.svg(i),d=Je(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=[{x:-l/2+u,y:-s/2},{x:l/2-u,y:-s/2},...Kd(-l/2+u,0,u,50,90,270),{x:l/2-u,y:s/2},...Kd(l/2-u,0,u,50,270,450)],m=Vt(p),g=f.path(m,d),y=i.insert(()=>g,":first-child");return y.attr("class","basic label-container outer-path"),h&&e.look!=="handDrawn"&&y.selectChildren("path").attr("style",h),n&&e.look!=="handDrawn"&&y.selectChildren("path").attr("style",n),Qe(e,y),e.intersect=function(v){return Xe.polygon(e,p,v)},i}var Yee=M(()=>{"use strict";It();Ut();$t();Ht();o(Wee,"stadium")});async function Xee(t,e){return Jd(t,e,{rx:5,ry:5,classes:"flowchart-node"})}var jee=M(()=>{"use strict";I2();o(Xee,"state")});function Kee(t,e,{config:{themeVariables:r}}){let{labelStyles:n,nodeStyles:i}=je(e);e.labelStyle=n;let{cssStyles:a}=e,{lineColor:s,stateBorder:l,nodeBorder:u}=r,h=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),f=Ze.svg(h),d=Je(e,{});e.look!=="handDrawn"&&(d.roughness=0,d.fillStyle="solid");let p=f.circle(0,0,14,{...d,stroke:s,strokeWidth:2}),m=l??u,g=f.circle(0,0,5,{...d,fill:m,stroke:m,strokeWidth:2,fillStyle:"solid"}),y=h.insert(()=>p,":first-child");return y.insert(()=>g),a&&y.selectAll("path").attr("style",a),i&&y.selectAll("path").attr("style",i),Qe(e,y),e.intersect=function(v){return Xe.circle(e,7,v)},h}var Qee=M(()=>{"use strict";Ht();Ut();$t();It();o(Kee,"stateEnd")});function Zee(t,e,{config:{themeVariables:r}}){let{lineColor:n}=r,i=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),a;if(e.look==="handDrawn"){let l=Ze.svg(i).circle(0,0,14,iJ(n));a=i.insert(()=>l),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14)}else a=i.insert("circle",":first-child"),a.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14);return Qe(e,a),e.intersect=function(s){return Xe.circle(e,7,s)},i}var Jee=M(()=>{"use strict";Ht();Ut();$t();It();o(Zee,"stateStart")});async function ete(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ut(t,e,st(e)),s=(e?.padding||0)/2,l=a.width+e.padding,u=a.height+e.padding,h=-a.width/2-s,f=-a.height/2-s,d=[{x:0,y:0},{x:l,y:0},{x:l,y:-u},{x:0,y:-u},{x:0,y:0},{x:-8,y:0},{x:l+8,y:0},{x:l+8,y:-u},{x:-8,y:-u},{x:-8,y:0}];if(e.look==="handDrawn"){let p=Ze.svg(i),m=Je(e,{}),g=p.rectangle(h-8,f,l+16,u,m),y=p.line(h,f,h,f+u,m),v=p.line(h+l,f,h+l,f+u,m);i.insert(()=>y,":first-child"),i.insert(()=>v,":first-child");let x=i.insert(()=>g,":first-child"),{cssStyles:b}=e;x.attr("class","basic label-container").attr("style",Cn(b)),Qe(e,x)}else{let p=Bs(i,l,u,d);n&&p.attr("style",n),Qe(e,p)}return e.intersect=function(p){return Xe.polygon(e,d,p)},i}var tte=M(()=>{"use strict";It();Ut();$t();Ht();Jh();tr();o(ete,"subroutine")});async function rte(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ut(t,e,st(e)),s=Math.max(a.width+(e.padding??0)*2,e?.width??0),l=Math.max(a.height+(e.padding??0)*2,e?.height??0),u=-s/2,h=-l/2,f=.2*l,d=.2*l,{cssStyles:p}=e,m=Ze.svg(i),g=Je(e,{}),y=[{x:u-f/2,y:h},{x:u+s+f/2,y:h},{x:u+s+f/2,y:h+l},{x:u-f/2,y:h+l}],v=[{x:u+s-f/2,y:h+l},{x:u+s+f/2,y:h+l},{x:u+s+f/2,y:h+l-d}];e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=Vt(y),b=m.path(x,g),T=Vt(v),S=m.path(T,{...g,fillStyle:"solid"}),w=i.insert(()=>S,":first-child");return w.insert(()=>b,":first-child"),w.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&w.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&w.selectAll("path").attr("style",n),Qe(e,w),e.intersect=function(k){return Xe.polygon(e,y,k)},i}var nte=M(()=>{"use strict";It();$t();Ht();Ut();o(rte,"taggedRect")});async function ite(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ut(t,e,st(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/4,f=.2*l,d=.2*u,p=u+h,{cssStyles:m}=e,g=Ze.svg(i),y=Je(e,{});e.look!=="handDrawn"&&(y.roughness=0,y.fillStyle="solid");let v=[{x:-l/2-l/2*.1,y:p/2},...Go(-l/2-l/2*.1,p/2,l/2+l/2*.1,p/2,h,.8),{x:l/2+l/2*.1,y:-p/2},{x:-l/2-l/2*.1,y:-p/2}],x=-l/2+l/2*.1,b=-p/2-d*.4,T=[{x:x+l-f,y:(b+u)*1.4},{x:x+l,y:b+u-d},{x:x+l,y:(b+u)*.9},...Go(x+l,(b+u)*1.3,x+l-f,(b+u)*1.5,-u*.03,.5)],S=Vt(v),w=g.path(S,y),k=Vt(T),C=g.path(k,{...y,fillStyle:"solid"}),A=i.insert(()=>C,":first-child");return A.insert(()=>w,":first-child"),A.attr("class","basic label-container"),m&&e.look!=="handDrawn"&&A.selectAll("path").attr("style",m),n&&e.look!=="handDrawn"&&A.selectAll("path").attr("style",n),A.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h/2-(a.y-(a.top??0))})`),Qe(e,A),e.intersect=function(L){return Xe.polygon(e,v,L)},i}var ate=M(()=>{"use strict";It();Ut();Ht();$t();o(ite,"taggedWaveEdgedRectangle")});async function ste(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ut(t,e,st(e)),s=Math.max(a.width+e.padding,e?.width||0),l=Math.max(a.height+e.padding,e?.height||0),u=-s/2,h=-l/2,f=i.insert("rect",":first-child");return f.attr("class","text").attr("style",n).attr("rx",0).attr("ry",0).attr("x",u).attr("y",h).attr("width",s).attr("height",l),Qe(e,f),e.intersect=function(d){return Xe.rect(e,d)},i}var ote=M(()=>{"use strict";It();Ut();$t();o(ste,"text")});async function lte(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s,halfPadding:l}=await ut(t,e,st(e)),u=e.look==="neo"?l*2:l,h=a.height+u,f=h/2,d=f/(2.5+h/50),p=a.width+d+u,{cssStyles:m}=e,g;if(e.look==="handDrawn"){let y=Ze.svg(i),v=CRe(0,0,p,h,d,f),x=ARe(0,0,p,h,d,f),b=y.path(v,Je(e,{})),T=y.path(x,Je(e,{fill:"none"}));g=i.insert(()=>T,":first-child"),g=i.insert(()=>b,":first-child"),g.attr("class","basic label-container"),m&&g.attr("style",m)}else{let y=SRe(0,0,p,h,d,f);g=i.insert("path",":first-child").attr("d",y).attr("class","basic label-container").attr("style",Cn(m)).attr("style",n),g.attr("class","basic label-container"),m&&g.selectAll("path").attr("style",m),n&&g.selectAll("path").attr("style",n)}return g.attr("label-offset-x",d),g.attr("transform",`translate(${-p/2}, ${h/2} )`),s.attr("transform",`translate(${-(a.width/2)-d-(a.x-(a.left??0))}, ${-(a.height/2)-(a.y-(a.top??0))})`),Qe(e,g),e.intersect=function(y){let v=Xe.rect(e,y),x=v.y-(e.y??0);if(f!=0&&(Math.abs(x)<(e.height??0)/2||Math.abs(x)==(e.height??0)/2&&Math.abs(v.x-(e.x??0))>(e.width??0)/2-d)){let b=d*d*(1-x*x/(f*f));b!=0&&(b=Math.sqrt(Math.abs(b))),b=d-b,y.x-(e.x??0)>0&&(b=-b),v.x+=b}return v},i}var SRe,CRe,ARe,cte=M(()=>{"use strict";It();$t();Ht();Ut();tr();SRe=o((t,e,r,n,i,a)=>`M${t},${e} + a${i},${a} 0,0,1 0,${-n} + l${r},0 + a${i},${a} 0,0,1 0,${n} + M${r},${-n} + a${i},${a} 0,0,0 0,${n} + l${-r},0`,"createCylinderPathD"),CRe=o((t,e,r,n,i,a)=>[`M${t},${e}`,`M${t+r},${e}`,`a${i},${a} 0,0,0 0,${-n}`,`l${-r},0`,`a${i},${a} 0,0,0 0,${n}`,`l${r},0`].join(" "),"createOuterCylinderPathD"),ARe=o((t,e,r,n,i,a)=>[`M${t+r/2},${-n/2}`,`a${i},${a} 0,0,0 0,${n}`].join(" "),"createInnerCylinderPathD");o(lte,"tiltedCylinder")});async function ute(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ut(t,e,st(e)),s=a.width+e.padding,l=a.height+e.padding,u=[{x:-3*l/6,y:0},{x:s+3*l/6,y:0},{x:s,y:-l},{x:0,y:-l}],h,{cssStyles:f}=e;if(e.look==="handDrawn"){let d=Ze.svg(i),p=Je(e,{}),m=Vt(u),g=d.path(m,p);h=i.insert(()=>g,":first-child").attr("transform",`translate(${-s/2}, ${l/2})`),f&&h.attr("style",f)}else h=Bs(i,s,l,u);return n&&h.attr("style",n),e.width=s,e.height=l,Qe(e,h),e.intersect=function(d){return Xe.polygon(e,u,d)},i}var hte=M(()=>{"use strict";It();Ut();$t();Ht();Jh();o(ute,"trapezoid")});async function fte(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ut(t,e,st(e)),s=60,l=20,u=Math.max(s,a.width+(e.padding??0)*2,e?.width??0),h=Math.max(l,a.height+(e.padding??0)*2,e?.height??0),{cssStyles:f}=e,d=Ze.svg(i),p=Je(e,{});e.look!=="handDrawn"&&(p.roughness=0,p.fillStyle="solid");let m=[{x:-u/2*.8,y:-h/2},{x:u/2*.8,y:-h/2},{x:u/2,y:-h/2*.6},{x:u/2,y:h/2},{x:-u/2,y:h/2},{x:-u/2,y:-h/2*.6}],g=Vt(m),y=d.path(g,p),v=i.insert(()=>y,":first-child");return v.attr("class","basic label-container"),f&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",f),n&&e.look!=="handDrawn"&&v.selectChildren("path").attr("style",n),Qe(e,v),e.intersect=function(x){return Xe.polygon(e,m,x)},i}var dte=M(()=>{"use strict";It();Ut();$t();Ht();o(fte,"trapezoidalPentagon")});async function pte(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ut(t,e,st(e)),l=vr(ge().flowchart?.htmlLabels),u=a.width+(e.padding??0),h=u+a.height,f=u+a.height,d=[{x:0,y:0},{x:f,y:0},{x:f/2,y:-h}],{cssStyles:p}=e,m=Ze.svg(i),g=Je(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=Vt(d),v=m.path(y,g),x=i.insert(()=>v,":first-child").attr("transform",`translate(${-h/2}, ${h/2})`);return p&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",p),n&&e.look!=="handDrawn"&&x.selectChildren("path").attr("style",n),e.width=u,e.height=h,Qe(e,x),s.attr("transform",`translate(${-a.width/2-(a.x-(a.left??0))}, ${h/2-(a.height+(e.padding??0)/(l?2:1)-(a.y-(a.top??0)))})`),e.intersect=function(b){return X.info("Triangle intersect",e,d,b),Xe.polygon(e,d,b)},i}var mte=M(()=>{"use strict";pt();It();Ut();$t();Ht();It();gr();Xt();o(pte,"triangle")});async function gte(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ut(t,e,st(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=u/8,f=u+h,{cssStyles:d}=e,m=70-l,g=m>0?m/2:0,y=Ze.svg(i),v=Je(e,{});e.look!=="handDrawn"&&(v.roughness=0,v.fillStyle="solid");let x=[{x:-l/2-g,y:f/2},...Go(-l/2-g,f/2,l/2+g,f/2,h,.8),{x:l/2+g,y:-f/2},{x:-l/2-g,y:-f/2}],b=Vt(x),T=y.path(b,v),S=i.insert(()=>T,":first-child");return S.attr("class","basic label-container"),d&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",d),n&&e.look!=="handDrawn"&&S.selectAll("path").attr("style",n),S.attr("transform",`translate(0,${-h/2})`),s.attr("transform",`translate(${-l/2+(e.padding??0)-(a.x-(a.left??0))},${-u/2+(e.padding??0)-h-(a.y-(a.top??0))})`),Qe(e,S),e.intersect=function(w){return Xe.polygon(e,x,w)},i}var yte=M(()=>{"use strict";It();Ut();Ht();$t();o(gte,"waveEdgedRectangle")});async function vte(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a}=await ut(t,e,st(e)),s=100,l=50,u=Math.max(a.width+(e.padding??0)*2,e?.width??0),h=Math.max(a.height+(e.padding??0)*2,e?.height??0),f=u/h,d=u,p=h;d>p*f?p=d/f:d=p*f,d=Math.max(d,s),p=Math.max(p,l);let m=Math.min(p*.2,p/4),g=p+m*2,{cssStyles:y}=e,v=Ze.svg(i),x=Je(e,{});e.look!=="handDrawn"&&(x.roughness=0,x.fillStyle="solid");let b=[{x:-d/2,y:g/2},...Go(-d/2,g/2,d/2,g/2,m,1),{x:d/2,y:-g/2},...Go(d/2,-g/2,-d/2,-g/2,m,-1)],T=Vt(b),S=v.path(T,x),w=i.insert(()=>S,":first-child");return w.attr("class","basic label-container"),y&&e.look!=="handDrawn"&&w.selectAll("path").attr("style",y),n&&e.look!=="handDrawn"&&w.selectAll("path").attr("style",n),Qe(e,w),e.intersect=function(k){return Xe.polygon(e,b,k)},i}var xte=M(()=>{"use strict";It();Ut();$t();Ht();o(vte,"waveRectangle")});async function bte(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,label:s}=await ut(t,e,st(e)),l=Math.max(a.width+(e.padding??0)*2,e?.width??0),u=Math.max(a.height+(e.padding??0)*2,e?.height??0),h=5,f=-l/2,d=-u/2,{cssStyles:p}=e,m=Ze.svg(i),g=Je(e,{}),y=[{x:f-h,y:d-h},{x:f-h,y:d+u},{x:f+l,y:d+u},{x:f+l,y:d-h}],v=`M${f-h},${d-h} L${f+l},${d-h} L${f+l},${d+u} L${f-h},${d+u} L${f-h},${d-h} + M${f-h},${d} L${f+l},${d} + M${f},${d-h} L${f},${d+u}`;e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let x=m.path(v,g),b=i.insert(()=>x,":first-child");return b.attr("transform",`translate(${h/2}, ${h/2})`),b.attr("class","basic label-container"),p&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",p),n&&e.look!=="handDrawn"&&b.selectAll("path").attr("style",n),s.attr("transform",`translate(${-(a.width/2)+h/2-(a.x-(a.left??0))}, ${-(a.height/2)+h/2-(a.y-(a.top??0))})`),Qe(e,b),e.intersect=function(T){return Xe.polygon(e,y,T)},i}var Tte=M(()=>{"use strict";It();$t();Ht();Ut();o(bte,"windowPane")});async function H9(t,e){let r=e;if(r.alias&&(e.label=r.alias),e.look==="handDrawn"){let{themeVariables:U}=Qt(),{background:j}=U,ee={...e,id:e.id+"-background",look:"default",cssStyles:["stroke: none",`fill: ${j}`]};await H9(t,ee)}let n=Qt();e.useHtmlLabels=n.htmlLabels;let i=n.er?.diagramPadding??10,a=n.er?.entityPadding??6,{cssStyles:s}=e,{labelStyles:l,nodeStyles:u}=je(e);if(r.attributes.length===0&&e.label){let U={rx:0,ry:0,labelPaddingX:i,labelPaddingY:i*1.5,classes:""};Zi(e.label,n)+U.labelPaddingX*20){let U=d.width+i*2-(y+v+x+b);y+=U/w,v+=U/w,x>0&&(x+=U/w),b>0&&(b+=U/w)}let C=y+v+x+b,A=Ze.svg(f),L=Je(e,{});e.look!=="handDrawn"&&(L.roughness=0,L.fillStyle="solid");let I=0;g.length>0&&(I=g.reduce((U,j)=>U+(j?.rowHeight??0),0));let R=Math.max(k.width+i*2,e?.width||0,C),E=Math.max((I??0)+d.height,e?.height||0),_=-R/2,D=-E/2;f.selectAll("g:not(:first-child)").each((U,j,ee)=>{let q=qe(ee[j]),oe=q.attr("transform"),Q=0,ue=0;if(oe){let re=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(oe);re&&(Q=parseFloat(re[1]),ue=parseFloat(re[2]),q.attr("class").includes("attribute-name")?Q+=y:q.attr("class").includes("attribute-keys")?Q+=y+v:q.attr("class").includes("attribute-comment")&&(Q+=y+v+x))}q.attr("transform",`translate(${_+i/2+Q}, ${ue+D+d.height+a/2})`)}),f.select(".name").attr("transform","translate("+-d.width/2+", "+(D+a/2)+")");let O=A.rectangle(_,D,R,E,L),N=f.insert(()=>O,":first-child").attr("style",s.join("")),{themeVariables:P}=Qt(),{rowEven:B,rowOdd:F,nodeBorder:V}=P;m.push(0);for(let[U,j]of g.entries()){let q=(U+1)%2===0&&j.yOffset!==0,oe=A.rectangle(_,d.height+D+j?.yOffset,R,j?.rowHeight,{...L,fill:q?B:F,stroke:V});f.insert(()=>oe,"g.label").attr("style",s.join("")).attr("class",`row-rect-${q?"even":"odd"}`)}let $=A.line(_,d.height+D,R+_,d.height+D,L);f.insert(()=>$).attr("class","divider"),$=A.line(y+_,d.height+D,y+_,E+D,L),f.insert(()=>$).attr("class","divider"),T&&($=A.line(y+v+_,d.height+D,y+v+_,E+D,L),f.insert(()=>$).attr("class","divider")),S&&($=A.line(y+v+x+_,d.height+D,y+v+x+_,E+D,L),f.insert(()=>$).attr("class","divider"));for(let U of m)$=A.line(_,d.height+D+U,R+_,d.height+D+U,L),f.insert(()=>$).attr("class","divider");if(Qe(e,N),u&&e.look!=="handDrawn"){let j=u.split(";")?.filter(ee=>ee.includes("stroke"))?.map(ee=>`${ee}`).join("; ");f.selectAll("path").attr("style",j??""),f.selectAll(".row-rect-even path").attr("style",u)}return e.intersect=function(U){return Xe.rect(e,U)},f}async function O2(t,e,r,n=0,i=0,a=[],s=""){let l=t.insert("g").attr("class",`label ${a.join(" ")}`).attr("transform",`translate(${n}, ${i})`).attr("style",s);e!==rc(e)&&(e=rc(e),e=e.replaceAll("<","<").replaceAll(">",">"));let u=l.node().appendChild(await di(l,e,{width:Zi(e,r)+100,style:s,useHtmlLabels:r.htmlLabels},r));if(e.includes("<")||e.includes(">")){let f=u.children[0];for(f.textContent=f.textContent.replaceAll("<","<").replaceAll(">",">");f.childNodes[0];)f=f.childNodes[0],f.textContent=f.textContent.replaceAll("<","<").replaceAll(">",">")}let h=u.getBBox();if(vr(r.htmlLabels)){let f=u.children[0];f.style.textAlign="start";let d=qe(u);h=f.getBoundingClientRect(),d.attr("width",h.width),d.attr("height",h.height)}return h}var wte=M(()=>{"use strict";It();Ut();$t();Ht();I2();qn();zo();gr();yr();tr();o(H9,"erBox");o(O2,"addText")});async function kte(t,e,r,n,i=r.class.padding??12){let a=n?0:3,s=t.insert("g").attr("class",st(e)).attr("id",e.domId||e.id),l=null,u=null,h=null,f=null,d=0,p=0,m=0;if(l=s.insert("g").attr("class","annotation-group text"),e.annotations.length>0){let b=e.annotations[0];await lw(l,{text:`\xAB${b}\xBB`},0),d=l.node().getBBox().height}u=s.insert("g").attr("class","label-group text"),await lw(u,e,0,["font-weight: bolder"]);let g=u.node().getBBox();p=g.height,h=s.insert("g").attr("class","members-group text");let y=0;for(let b of e.members){let T=await lw(h,b,y,[b.parseClassifier()]);y+=T+a}m=h.node().getBBox().height,m<=0&&(m=i/2),f=s.insert("g").attr("class","methods-group text");let v=0;for(let b of e.methods){let T=await lw(f,b,v,[b.parseClassifier()]);v+=T+a}let x=s.node().getBBox();if(l!==null){let b=l.node().getBBox();l.attr("transform",`translate(${-b.width/2})`)}return u.attr("transform",`translate(${-g.width/2}, ${d})`),x=s.node().getBBox(),h.attr("transform",`translate(0, ${d+p+i*2})`),x=s.node().getBBox(),f.attr("transform",`translate(0, ${d+p+(m?m+i*4:i*2)})`),x=s.node().getBBox(),{shapeSvg:s,bbox:x}}async function lw(t,e,r,n=[]){let i=t.insert("g").attr("class","label").attr("style",n.join("; ")),a=Qt(),s="useHtmlLabels"in e?e.useHtmlLabels:vr(a.htmlLabels)??!0,l="";"text"in e?l=e.text:l=e.label,!s&&l.startsWith("\\")&&(l=l.substring(1)),kn(l)&&(s=!0);let u=await di(i,av(Ji(l)),{width:Zi(l,a)+50,classes:"markdown-node-label",useHtmlLabels:s},a),h,f=1;if(s){let d=u.children[0],p=qe(u);f=d.innerHTML.split("
    ").length,d.innerHTML.includes("")&&(f+=d.innerHTML.split("").length-1);let m=d.getElementsByTagName("img");if(m){let g=l.replace(/]*>/g,"").trim()==="";await Promise.all([...m].map(y=>new Promise(v=>{function x(){if(y.style.display="flex",y.style.flexDirection="column",g){let b=a.fontSize?.toString()??window.getComputedStyle(document.body).fontSize,S=parseInt(b,10)*5+"px";y.style.minWidth=S,y.style.maxWidth=S}else y.style.width="100%";v(y)}o(x,"setupImage"),setTimeout(()=>{y.complete&&x()}),y.addEventListener("error",x),y.addEventListener("load",x)})))}h=d.getBoundingClientRect(),p.attr("width",h.width),p.attr("height",h.height)}else{n.includes("font-weight: bolder")&&qe(u).selectAll("tspan").attr("font-weight",""),f=u.children.length;let d=u.children[0];(u.textContent===""||u.textContent.includes(">"))&&(d.textContent=l[0]+l.substring(1).replaceAll(">",">").replaceAll("<","<").trim(),l[1]===" "&&(d.textContent=d.textContent[0]+" "+d.textContent.substring(1))),d.textContent==="undefined"&&(d.textContent=""),h=u.getBBox()}return i.attr("transform","translate(0,"+(-h.height/(2*f)+r)+")"),h.height}var Ete=M(()=>{"use strict";yr();qn();It();tr();Xt();zo();gr();o(kte,"textHelper");o(lw,"addText")});async function Ste(t,e){let r=ge(),n=r.class.padding??12,i=n,a=e.useHtmlLabels??vr(r.htmlLabels)??!0,s=e;s.annotations=s.annotations??[],s.members=s.members??[],s.methods=s.methods??[];let{shapeSvg:l,bbox:u}=await kte(t,e,r,a,i),{labelStyles:h,nodeStyles:f}=je(e);e.labelStyle=h,e.cssStyles=s.styles||"";let d=s.styles?.join(";")||f||"";e.cssStyles||(e.cssStyles=d.replaceAll("!important","").split(";"));let p=s.members.length===0&&s.methods.length===0&&!r.class?.hideEmptyMembersBox,m=Ze.svg(l),g=Je(e,{});e.look!=="handDrawn"&&(g.roughness=0,g.fillStyle="solid");let y=u.width,v=u.height;s.members.length===0&&s.methods.length===0?v+=i:s.members.length>0&&s.methods.length===0&&(v+=i*2);let x=-y/2,b=-v/2,T=m.rectangle(x-n,b-n-(p?n:s.members.length===0&&s.methods.length===0?-n/2:0),y+2*n,v+2*n+(p?n*2:s.members.length===0&&s.methods.length===0?-n:0),g),S=l.insert(()=>T,":first-child");S.attr("class","basic label-container");let w=S.node().getBBox();l.selectAll(".text").each((L,I,R)=>{let E=qe(R[I]),_=E.attr("transform"),D=0;if(_){let B=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(_);B&&(D=parseFloat(B[2]))}let O=D+b+n-(p?n:s.members.length===0&&s.methods.length===0?-n/2:0);a||(O-=4);let N=x;(E.attr("class").includes("label-group")||E.attr("class").includes("annotation-group"))&&(N=-E.node()?.getBBox().width/2||0,l.selectAll("text").each(function(P,B,F){window.getComputedStyle(F[B]).textAnchor==="middle"&&(N=0)})),E.attr("transform",`translate(${N}, ${O})`)});let k=l.select(".annotation-group").node().getBBox().height-(p?n/2:0)||0,C=l.select(".label-group").node().getBBox().height-(p?n/2:0)||0,A=l.select(".members-group").node().getBBox().height-(p?n/2:0)||0;if(s.members.length>0||s.methods.length>0||p){let L=m.line(w.x,k+C+b+n,w.x+w.width,k+C+b+n,g);l.insert(()=>L).attr("class","divider").attr("style",d)}if(p||s.members.length>0||s.methods.length>0){let L=m.line(w.x,k+C+A+b+i*2+n,w.x+w.width,k+C+A+b+n+i*2,g);l.insert(()=>L).attr("class","divider").attr("style",d)}if(s.look!=="handDrawn"&&l.selectAll("path").attr("style",d),S.select(":nth-child(2)").attr("style",d),l.selectAll(".divider").select("path").attr("style",d),e.labelStyle?l.selectAll("span").attr("style",e.labelStyle):l.selectAll("span").attr("style",d),!a){let L=RegExp(/color\s*:\s*([^;]*)/),I=L.exec(d);if(I){let R=I[0].replace("color","fill");l.selectAll("tspan").attr("style",R)}else if(h){let R=L.exec(h);if(R){let E=R[0].replace("color","fill");l.selectAll("tspan").attr("style",E)}}}return Qe(e,S),e.intersect=function(L){return Xe.rect(e,L)},l}var Cte=M(()=>{"use strict";It();Xt();yr();Ht();$t();Ut();Ete();gr();o(Ste,"classBox")});async function Ate(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let i=e,a=e,s=20,l=20,u="verifyMethod"in e,h=st(e),f=t.insert("g").attr("class",h).attr("id",e.domId??e.id),d;u?d=await Ou(f,`<<${i.type}>>`,0,e.labelStyle):d=await Ou(f,"<<Element>>",0,e.labelStyle);let p=d,m=await Ou(f,i.name,p,e.labelStyle+"; font-weight: bold;");if(p+=m+l,u){let k=await Ou(f,`${i.requirementId?`ID: ${i.requirementId}`:""}`,p,e.labelStyle);p+=k;let C=await Ou(f,`${i.text?`Text: ${i.text}`:""}`,p,e.labelStyle);p+=C;let A=await Ou(f,`${i.risk?`Risk: ${i.risk}`:""}`,p,e.labelStyle);p+=A,await Ou(f,`${i.verifyMethod?`Verification: ${i.verifyMethod}`:""}`,p,e.labelStyle)}else{let k=await Ou(f,`${a.type?`Type: ${a.type}`:""}`,p,e.labelStyle);p+=k,await Ou(f,`${a.docRef?`Doc Ref: ${a.docRef}`:""}`,p,e.labelStyle)}let g=(f.node()?.getBBox().width??200)+s,y=(f.node()?.getBBox().height??200)+s,v=-g/2,x=-y/2,b=Ze.svg(f),T=Je(e,{});e.look!=="handDrawn"&&(T.roughness=0,T.fillStyle="solid");let S=b.rectangle(v,x,g,y,T),w=f.insert(()=>S,":first-child");if(w.attr("class","basic label-container").attr("style",n),f.selectAll(".label").each((k,C,A)=>{let L=qe(A[C]),I=L.attr("transform"),R=0,E=0;if(I){let N=RegExp(/translate\(([^,]+),([^)]+)\)/).exec(I);N&&(R=parseFloat(N[1]),E=parseFloat(N[2]))}let _=E-y/2,D=v+s/2;(C===0||C===1)&&(D=R),L.attr("transform",`translate(${D}, ${_+s})`)}),p>d+m+l){let k=b.line(v,x+d+m+l,v+g,x+d+m+l,T);f.insert(()=>k).attr("style",n)}return Qe(e,w),e.intersect=function(k){return Xe.rect(e,k)},f}async function Ou(t,e,r,n=""){if(e==="")return 0;let i=t.insert("g").attr("class","label").attr("style",n),a=ge(),s=a.htmlLabels??!0,l=await di(i,av(Ji(e)),{width:Zi(e,a)+50,classes:"markdown-node-label",useHtmlLabels:s,style:n},a),u;if(s){let h=l.children[0],f=qe(l);u=h.getBoundingClientRect(),f.attr("width",u.width),f.attr("height",u.height)}else{let h=l.children[0];for(let f of h.children)f.textContent=f.textContent.replaceAll(">",">").replaceAll("<","<"),n&&f.setAttribute("style",n);u=l.getBBox(),u.height+=6}return i.attr("transform",`translate(${-u.width/2},${-u.height/2+r})`),u.height}var _te=M(()=>{"use strict";It();Ut();$t();Ht();tr();Xt();zo();yr();o(Ate,"requirementBox");o(Ou,"addText")});async function Dte(t,e,{config:r}){let{labelStyles:n,nodeStyles:i}=je(e);e.labelStyle=n||"";let a=10,s=e.width;e.width=(e.width??200)-10;let{shapeSvg:l,bbox:u,label:h}=await ut(t,e,st(e)),f=e.padding||10,d="",p;"ticket"in e&&e.ticket&&r?.kanban?.ticketBaseUrl&&(d=r?.kanban?.ticketBaseUrl.replace("#TICKET#",e.ticket),p=l.insert("svg:a",":first-child").attr("class","kanban-ticket-link").attr("xlink:href",d).attr("target","_blank"));let m={useHtmlLabels:e.useHtmlLabels,labelStyle:e.labelStyle||"",width:e.width,img:e.img,padding:e.padding||8,centerLabel:!1},g,y;p?{label:g,bbox:y}=await XT(p,"ticket"in e&&e.ticket||"",m):{label:g,bbox:y}=await XT(l,"ticket"in e&&e.ticket||"",m);let{label:v,bbox:x}=await XT(l,"assigned"in e&&e.assigned||"",m);e.width=s;let b=10,T=e?.width||0,S=Math.max(y.height,x.height)/2,w=Math.max(u.height+b*2,e?.height||0)+S,k=-T/2,C=-w/2;h.attr("transform","translate("+(f-T/2)+", "+(-S-u.height/2)+")"),g.attr("transform","translate("+(f-T/2)+", "+(-S+u.height/2)+")"),v.attr("transform","translate("+(f+T/2-x.width-2*a)+", "+(-S+u.height/2)+")");let A,{rx:L,ry:I}=e,{cssStyles:R}=e;if(e.look==="handDrawn"){let E=Ze.svg(l),_=Je(e,{}),D=L||I?E.path(Fs(k,C,T,w,L||0),_):E.rectangle(k,C,T,w,_);A=l.insert(()=>D,":first-child"),A.attr("class","basic label-container").attr("style",R||null)}else{A=l.insert("rect",":first-child"),A.attr("class","basic label-container __APA__").attr("style",i).attr("rx",L??5).attr("ry",I??5).attr("x",k).attr("y",C).attr("width",T).attr("height",w);let E="priority"in e&&e.priority;if(E){let _=l.append("line"),D=k+2,O=C+Math.floor((L??0)/2),N=C+w-Math.floor((L??0)/2);_.attr("x1",D).attr("y1",O).attr("x2",D).attr("y2",N).attr("stroke-width","4").attr("stroke",_Re(E))}}return Qe(e,A),e.height=w,e.intersect=function(E){return Xe.rect(e,E)},l}var _Re,Lte=M(()=>{"use strict";It();Ut();Zd();$t();Ht();_Re=o(t=>{switch(t){case"Very High":return"red";case"High":return"orange";case"Medium":return null;case"Low":return"blue";case"Very Low":return"lightblue"}},"colorFromPriority");o(Dte,"kanbanItem")});async function Rte(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s,label:l}=await ut(t,e,st(e)),u=a.width+10*s,h=a.height+8*s,f=.15*u,{cssStyles:d}=e,p=a.width+20,m=a.height+20,g=Math.max(u,p),y=Math.max(h,m);l.attr("transform",`translate(${-a.width/2}, ${-a.height/2})`);let v,x=`M0 0 + a${f},${f} 1 0,0 ${g*.25},${-1*y*.1} + a${f},${f} 1 0,0 ${g*.25},0 + a${f},${f} 1 0,0 ${g*.25},0 + a${f},${f} 1 0,0 ${g*.25},${y*.1} + + a${f},${f} 1 0,0 ${g*.15},${y*.33} + a${f*.8},${f*.8} 1 0,0 0,${y*.34} + a${f},${f} 1 0,0 ${-1*g*.15},${y*.33} + + a${f},${f} 1 0,0 ${-1*g*.25},${y*.15} + a${f},${f} 1 0,0 ${-1*g*.25},0 + a${f},${f} 1 0,0 ${-1*g*.25},0 + a${f},${f} 1 0,0 ${-1*g*.25},${-1*y*.15} + + a${f},${f} 1 0,0 ${-1*g*.1},${-1*y*.33} + a${f*.8},${f*.8} 1 0,0 0,${-1*y*.34} + a${f},${f} 1 0,0 ${g*.1},${-1*y*.33} + H0 V0 Z`;if(e.look==="handDrawn"){let b=Ze.svg(i),T=Je(e,{}),S=b.path(x,T);v=i.insert(()=>S,":first-child"),v.attr("class","basic label-container").attr("style",Cn(d))}else v=i.insert("path",":first-child").attr("class","basic label-container").attr("style",n).attr("d",x);return v.attr("transform",`translate(${-g/2}, ${-y/2})`),Qe(e,v),e.calcIntersect=function(b,T){return Xe.rect(b,T)},e.intersect=function(b){return X.info("Bang intersect",e,b),Xe.rect(e,b)},i}var Nte=M(()=>{"use strict";pt();It();Ut();$t();Ht();tr();o(Rte,"bang")});async function Mte(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s,label:l}=await ut(t,e,st(e)),u=a.width+2*s,h=a.height+2*s,f=.15*u,d=.25*u,p=.35*u,m=.2*u,{cssStyles:g}=e,y,v=`M0 0 + a${f},${f} 0 0,1 ${u*.25},${-1*u*.1} + a${p},${p} 1 0,1 ${u*.4},${-1*u*.1} + a${d},${d} 1 0,1 ${u*.35},${u*.2} + + a${f},${f} 1 0,1 ${u*.15},${h*.35} + a${m},${m} 1 0,1 ${-1*u*.15},${h*.65} + + a${d},${f} 1 0,1 ${-1*u*.25},${u*.15} + a${p},${p} 1 0,1 ${-1*u*.5},0 + a${f},${f} 1 0,1 ${-1*u*.25},${-1*u*.15} + + a${f},${f} 1 0,1 ${-1*u*.1},${-1*h*.35} + a${m},${m} 1 0,1 ${u*.1},${-1*h*.65} + H0 V0 Z`;if(e.look==="handDrawn"){let x=Ze.svg(i),b=Je(e,{}),T=x.path(v,b);y=i.insert(()=>T,":first-child"),y.attr("class","basic label-container").attr("style",Cn(g))}else y=i.insert("path",":first-child").attr("class","basic label-container").attr("style",n).attr("d",v);return l.attr("transform",`translate(${-a.width/2}, ${-a.height/2})`),y.attr("transform",`translate(${-u/2}, ${-h/2})`),Qe(e,y),e.calcIntersect=function(x,b){return Xe.rect(x,b)},e.intersect=function(x){return X.info("Cloud intersect",e,x),Xe.rect(e,x)},i}var Ite=M(()=>{"use strict";Ht();pt();tr();Ut();$t();It();o(Mte,"cloud")});async function Ote(t,e){let{labelStyles:r,nodeStyles:n}=je(e);e.labelStyle=r;let{shapeSvg:i,bbox:a,halfPadding:s,label:l}=await ut(t,e,st(e)),u=a.width+8*s,h=a.height+2*s,f=5,d=` + M${-u/2} ${h/2-f} + v${-h+2*f} + q0,-${f} ${f},-${f} + h${u-2*f} + q${f},0 ${f},${f} + v${h-2*f} + q0,${f} -${f},${f} + h${-u+2*f} + q-${f},0 -${f},-${f} + Z + `,p=i.append("path").attr("id","node-"+e.id).attr("class","node-bkg node-"+e.type).attr("style",n).attr("d",d);return i.append("line").attr("class","node-line-").attr("x1",-u/2).attr("y1",h/2).attr("x2",u/2).attr("y2",h/2),l.attr("transform",`translate(${-a.width/2}, ${-a.height/2})`),i.append(()=>l.node()),Qe(e,p),e.calcIntersect=function(m,g){return Xe.rect(m,g)},e.intersect=function(m){return Xe.rect(e,m)},i}var Pte=M(()=>{"use strict";Ut();$t();It();o(Ote,"defaultMindmapNode")});async function Bte(t,e){let r={padding:e.padding??0};return aw(t,e,r)}var Fte=M(()=>{"use strict";U9();o(Bte,"mindmapCircle")});function $te(t){return t in q9}var DRe,LRe,q9,W9=M(()=>{"use strict";bJ();kJ();SJ();AJ();U9();DJ();RJ();MJ();OJ();BJ();$J();GJ();UJ();qJ();YJ();jJ();QJ();JJ();tee();nee();aee();oee();cee();hee();dee();mee();yee();xee();Tee();kee();See();Aee();Dee();Ree();Mee();Oee();Bee();$ee();Gee();Uee();qee();Yee();jee();Qee();Jee();tte();nte();ate();ote();cte();hte();dte();mte();yte();xte();Tte();wte();Cte();_te();Lte();Nte();Ite();Pte();Fte();DRe=[{semanticName:"Process",name:"Rectangle",shortName:"rect",description:"Standard process shape",aliases:["proc","process","rectangle"],internalAliases:["squareRect"],handler:Hee},{semanticName:"Event",name:"Rounded Rectangle",shortName:"rounded",description:"Represents an event",aliases:["event"],internalAliases:["roundedRect"],handler:Fee},{semanticName:"Terminal Point",name:"Stadium",shortName:"stadium",description:"Terminal point",aliases:["terminal","pill"],handler:Wee},{semanticName:"Subprocess",name:"Framed Rectangle",shortName:"fr-rect",description:"Subprocess",aliases:["subprocess","subproc","framed-rectangle","subroutine"],handler:ete},{semanticName:"Database",name:"Cylinder",shortName:"cyl",description:"Database storage",aliases:["db","database","cylinder"],handler:FJ},{semanticName:"Start",name:"Circle",shortName:"circle",description:"Starting point",aliases:["circ"],handler:aw},{semanticName:"Bang",name:"Bang",shortName:"bang",description:"Bang",aliases:["bang"],handler:Rte},{semanticName:"Cloud",name:"Cloud",shortName:"cloud",description:"cloud",aliases:["cloud"],handler:Mte},{semanticName:"Decision",name:"Diamond",shortName:"diam",description:"Decision-making step",aliases:["decision","diamond","question"],handler:Nee},{semanticName:"Prepare Conditional",name:"Hexagon",shortName:"hex",description:"Preparation or condition step",aliases:["hexagon","prepare"],handler:ZJ},{semanticName:"Data Input/Output",name:"Lean Right",shortName:"lean-r",description:"Represents input or output",aliases:["lean-right","in-out"],internalAliases:["lean_right"],handler:vee},{semanticName:"Data Input/Output",name:"Lean Left",shortName:"lean-l",description:"Represents output or input",aliases:["lean-left","out-in"],internalAliases:["lean_left"],handler:gee},{semanticName:"Priority Action",name:"Trapezoid Base Bottom",shortName:"trap-b",description:"Priority action",aliases:["priority","trapezoid-bottom","trapezoid"],handler:ute},{semanticName:"Manual Operation",name:"Trapezoid Base Top",shortName:"trap-t",description:"Represents a manual task",aliases:["manual","trapezoid-top","inv-trapezoid"],internalAliases:["inv_trapezoid"],handler:fee},{semanticName:"Stop",name:"Double Circle",shortName:"dbl-circ",description:"Represents a stop point",aliases:["double-circle"],internalAliases:["doublecircle"],handler:VJ},{semanticName:"Text Block",name:"Text Block",shortName:"text",description:"Text block",handler:ste},{semanticName:"Card",name:"Notched Rectangle",shortName:"notch-rect",description:"Represents a card",aliases:["card","notched-rectangle"],handler:EJ},{semanticName:"Lined/Shaded Process",name:"Lined Rectangle",shortName:"lin-rect",description:"Lined process shape",aliases:["lined-rectangle","lined-process","lin-proc","shaded-process"],handler:zee},{semanticName:"Start",name:"Small Circle",shortName:"sm-circ",description:"Small starting point",aliases:["start","small-circle"],internalAliases:["stateStart"],handler:Zee},{semanticName:"Stop",name:"Framed Circle",shortName:"fr-circ",description:"Stop point",aliases:["stop","framed-circle"],internalAliases:["stateEnd"],handler:Kee},{semanticName:"Fork/Join",name:"Filled Rectangle",shortName:"fork",description:"Fork or join in process flow",aliases:["join"],internalAliases:["forkJoin"],handler:XJ},{semanticName:"Collate",name:"Hourglass",shortName:"hourglass",description:"Represents a collate operation",aliases:["hourglass","collate"],handler:eee},{semanticName:"Comment",name:"Curly Brace",shortName:"brace",description:"Adds a comment",aliases:["comment","brace-l"],handler:LJ},{semanticName:"Comment Right",name:"Curly Brace",shortName:"brace-r",description:"Adds a comment",handler:NJ},{semanticName:"Comment with braces on both sides",name:"Curly Braces",shortName:"braces",description:"Adds a comment",handler:IJ},{semanticName:"Com Link",name:"Lightning Bolt",shortName:"bolt",description:"Communication link",aliases:["com-link","lightning-bolt"],handler:bee},{semanticName:"Document",name:"Document",shortName:"doc",description:"Represents a document",aliases:["doc","document"],handler:gte},{semanticName:"Delay",name:"Half-Rounded Rectangle",shortName:"delay",description:"Represents a delay",aliases:["half-rounded-rectangle"],handler:KJ},{semanticName:"Direct Access Storage",name:"Horizontal Cylinder",shortName:"h-cyl",description:"Direct access storage",aliases:["das","horizontal-cylinder"],handler:lte},{semanticName:"Disk Storage",name:"Lined Cylinder",shortName:"lin-cyl",description:"Disk storage",aliases:["disk","lined-cylinder"],handler:wee},{semanticName:"Display",name:"Curved Trapezoid",shortName:"curv-trap",description:"Represents a display",aliases:["curved-trapezoid","display"],handler:PJ},{semanticName:"Divided Process",name:"Divided Rectangle",shortName:"div-rect",description:"Divided process shape",aliases:["div-proc","divided-rectangle","divided-process"],handler:zJ},{semanticName:"Extract",name:"Triangle",shortName:"tri",description:"Extraction process",aliases:["extract","triangle"],handler:pte},{semanticName:"Internal Storage",name:"Window Pane",shortName:"win-pane",description:"Internal storage",aliases:["internal-storage","window-pane"],handler:bte},{semanticName:"Junction",name:"Filled Circle",shortName:"f-circ",description:"Junction point",aliases:["junction","filled-circle"],handler:HJ},{semanticName:"Loop Limit",name:"Trapezoidal Pentagon",shortName:"notch-pent",description:"Loop limit step",aliases:["loop-limit","notched-pentagon"],handler:fte},{semanticName:"Manual File",name:"Flipped Triangle",shortName:"flip-tri",description:"Manual file operation",aliases:["manual-file","flipped-triangle"],handler:WJ},{semanticName:"Manual Input",name:"Sloped Rectangle",shortName:"sl-rect",description:"Manual input step",aliases:["manual-input","sloped-rectangle"],handler:Vee},{semanticName:"Multi-Document",name:"Stacked Document",shortName:"docs",description:"Multiple documents",aliases:["documents","st-doc","stacked-document"],handler:_ee},{semanticName:"Multi-Process",name:"Stacked Rectangle",shortName:"st-rect",description:"Multiple processes",aliases:["procs","processes","stacked-rectangle"],handler:Cee},{semanticName:"Stored Data",name:"Bow Tie Rectangle",shortName:"bow-rect",description:"Stored data",aliases:["stored-data","bow-tie-rectangle"],handler:wJ},{semanticName:"Summary",name:"Crossed Circle",shortName:"cross-circ",description:"Summary",aliases:["summary","crossed-circle"],handler:_J},{semanticName:"Tagged Document",name:"Tagged Document",shortName:"tag-doc",description:"Tagged document",aliases:["tag-doc","tagged-document"],handler:ite},{semanticName:"Tagged Process",name:"Tagged Rectangle",shortName:"tag-rect",description:"Tagged process",aliases:["tagged-rectangle","tag-proc","tagged-process"],handler:rte},{semanticName:"Paper Tape",name:"Flag",shortName:"flag",description:"Paper tape",aliases:["paper-tape"],handler:vte},{semanticName:"Odd",name:"Odd",shortName:"odd",description:"Odd shape",internalAliases:["rect_left_inv_arrow"],handler:Iee},{semanticName:"Lined Document",name:"Lined Document",shortName:"lin-doc",description:"Lined document",aliases:["lined-document"],handler:Eee}],LRe=o(()=>{let e=[...Object.entries({state:Xee,choice:CJ,note:Lee,rectWithTitle:Pee,labelRect:pee,iconSquare:lee,iconCircle:iee,icon:ree,iconRounded:see,imageSquare:uee,anchor:xJ,kanbanItem:Dte,mindmapCircle:Bte,defaultMindmapNode:Ote,classBox:Ste,erBox:H9,requirementBox:Ate}),...DRe.flatMap(r=>[r.shortName,..."aliases"in r?r.aliases:[],..."internalAliases"in r?r.internalAliases:[]].map(i=>[i,r.handler]))];return Object.fromEntries(e)},"generateShapeMap"),q9=LRe();o($te,"isValidShape")});var RRe,cw,zte=M(()=>{"use strict";yr();k2();Xt();pt();W9();tr();gr();ci();RRe="flowchart-",cw=class{constructor(){this.vertexCounter=0;this.config=ge();this.vertices=new Map;this.edges=[];this.classes=new Map;this.subGraphs=[];this.subGraphLookup=new Map;this.tooltips=new Map;this.subCount=0;this.firstGraphFlag=!0;this.secCount=-1;this.posCrossRef=[];this.funs=[];this.setAccTitle=Rr;this.setAccDescription=Ir;this.setDiagramTitle=$r;this.getAccTitle=Mr;this.getAccDescription=Or;this.getDiagramTitle=Pr;this.funs.push(this.setupToolTips.bind(this)),this.addVertex=this.addVertex.bind(this),this.firstGraph=this.firstGraph.bind(this),this.setDirection=this.setDirection.bind(this),this.addSubGraph=this.addSubGraph.bind(this),this.addLink=this.addLink.bind(this),this.setLink=this.setLink.bind(this),this.updateLink=this.updateLink.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.destructLink=this.destructLink.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setTooltip=this.setTooltip.bind(this),this.updateLinkInterpolate=this.updateLinkInterpolate.bind(this),this.setClickFun=this.setClickFun.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.lex={firstGraph:this.firstGraph.bind(this)},this.clear(),this.setGen("gen-2")}static{o(this,"FlowDB")}sanitizeText(e){return tt.sanitizeText(e,this.config)}lookUpDomId(e){for(let r of this.vertices.values())if(r.id===e)return r.domId;return e}addVertex(e,r,n,i,a,s,l={},u){if(!e||e.trim().length===0)return;let h;if(u!==void 0){let m;u.includes(` +`)?m=u+` +`:m=`{ +`+u+` +}`,h=Kh(m,{schema:jh})}let f=this.edges.find(m=>m.id===e);if(f){let m=h;m?.animate!==void 0&&(f.animate=m.animate),m?.animation!==void 0&&(f.animation=m.animation),m?.curve!==void 0&&(f.interpolate=m.curve);return}let d,p=this.vertices.get(e);if(p===void 0&&(p={id:e,labelType:"text",domId:RRe+e+"-"+this.vertexCounter,styles:[],classes:[]},this.vertices.set(e,p)),this.vertexCounter++,r!==void 0?(this.config=ge(),d=this.sanitizeText(r.text.trim()),p.labelType=r.type,d.startsWith('"')&&d.endsWith('"')&&(d=d.substring(1,d.length-1)),p.text=d):p.text===void 0&&(p.text=e),n!==void 0&&(p.type=n),i?.forEach(m=>{p.styles.push(m)}),a?.forEach(m=>{p.classes.push(m)}),s!==void 0&&(p.dir=s),p.props===void 0?p.props=l:l!==void 0&&Object.assign(p.props,l),h!==void 0){if(h.shape){if(h.shape!==h.shape.toLowerCase()||h.shape.includes("_"))throw new Error(`No such shape: ${h.shape}. Shape names should be lowercase.`);if(!$te(h.shape))throw new Error(`No such shape: ${h.shape}.`);p.type=h?.shape}h?.label&&(p.text=h?.label),h?.icon&&(p.icon=h?.icon,!h.label?.trim()&&p.text===e&&(p.text="")),h?.form&&(p.form=h?.form),h?.pos&&(p.pos=h?.pos),h?.img&&(p.img=h?.img,!h.label?.trim()&&p.text===e&&(p.text="")),h?.constraint&&(p.constraint=h.constraint),h.w&&(p.assetWidth=Number(h.w)),h.h&&(p.assetHeight=Number(h.h))}}addSingleLink(e,r,n,i){let l={start:e,end:r,type:void 0,text:"",labelType:"text",classes:[],isUserDefinedId:!1,interpolate:this.edges.defaultInterpolate};X.info("abc78 Got edge...",l);let u=n.text;if(u!==void 0&&(l.text=this.sanitizeText(u.text.trim()),l.text.startsWith('"')&&l.text.endsWith('"')&&(l.text=l.text.substring(1,l.text.length-1)),l.labelType=u.type),n!==void 0&&(l.type=n.type,l.stroke=n.stroke,l.length=n.length>10?10:n.length),i&&!this.edges.some(h=>h.id===i))l.id=i,l.isUserDefinedId=!0;else{let h=this.edges.filter(f=>f.start===l.start&&f.end===l.end);h.length===0?l.id=xc(l.start,l.end,{counter:0,prefix:"L"}):l.id=xc(l.start,l.end,{counter:h.length+1,prefix:"L"})}if(this.edges.length<(this.config.maxEdges??500))X.info("Pushing edge..."),this.edges.push(l);else throw new Error(`Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}. + +Initialize mermaid with maxEdges set to a higher number to allow more edges. +You cannot set this config via configuration inside the diagram as it is a secure config. +You have to call mermaid.initialize.`)}isLinkData(e){return e!==null&&typeof e=="object"&&"id"in e&&typeof e.id=="string"}addLink(e,r,n){let i=this.isLinkData(n)?n.id.replace("@",""):void 0;X.info("addLink",e,r,i);for(let a of e)for(let s of r){let l=a===e[e.length-1],u=s===r[0];l&&u?this.addSingleLink(a,s,n,i):this.addSingleLink(a,s,n,void 0)}}updateLinkInterpolate(e,r){e.forEach(n=>{n==="default"?this.edges.defaultInterpolate=r:this.edges[n].interpolate=r})}updateLink(e,r){e.forEach(n=>{if(typeof n=="number"&&n>=this.edges.length)throw new Error(`The index ${n} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${this.edges.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);n==="default"?this.edges.defaultStyle=r:(this.edges[n].style=r,(this.edges[n]?.style?.length??0)>0&&!this.edges[n]?.style?.some(i=>i?.startsWith("fill"))&&this.edges[n]?.style?.push("fill:none"))})}addClass(e,r){let n=r.join().replace(/\\,/g,"\xA7\xA7\xA7").replace(/,/g,";").replace(/§§§/g,",").split(";");e.split(",").forEach(i=>{let a=this.classes.get(i);a===void 0&&(a={id:i,styles:[],textStyles:[]},this.classes.set(i,a)),n?.forEach(s=>{if(/color/.exec(s)){let l=s.replace("fill","bgFill");a.textStyles.push(l)}a.styles.push(s)})})}setDirection(e){this.direction=e.trim(),/.*/.exec(this.direction)&&(this.direction="LR"),/.*v/.exec(this.direction)&&(this.direction="TB"),this.direction==="TD"&&(this.direction="TB")}setClass(e,r){for(let n of e.split(",")){let i=this.vertices.get(n);i&&i.classes.push(r);let a=this.edges.find(l=>l.id===n);a&&a.classes.push(r);let s=this.subGraphLookup.get(n);s&&s.classes.push(r)}}setTooltip(e,r){if(r!==void 0){r=this.sanitizeText(r);for(let n of e.split(","))this.tooltips.set(this.version==="gen-1"?this.lookUpDomId(n):n,r)}}setClickFun(e,r,n){let i=this.lookUpDomId(e);if(ge().securityLevel!=="loose"||r===void 0)return;let a=[];if(typeof n=="string"){a=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let l=0;l{let l=document.querySelector(`[id="${i}"]`);l!==null&&l.addEventListener("click",()=>{qt.runFunc(r,...a)},!1)}))}setLink(e,r,n){e.split(",").forEach(i=>{let a=this.vertices.get(i);a!==void 0&&(a.link=qt.formatUrl(r,this.config),a.linkTarget=n)}),this.setClass(e,"clickable")}getTooltip(e){return this.tooltips.get(e)}setClickEvent(e,r,n){e.split(",").forEach(i=>{this.setClickFun(i,r,n)}),this.setClass(e,"clickable")}bindFunctions(e){this.funs.forEach(r=>{r(e)})}getDirection(){return this.direction?.trim()}getVertices(){return this.vertices}getEdges(){return this.edges}getClasses(){return this.classes}setupToolTips(e){let r=qe(".mermaidTooltip");(r._groups||r)[0][0]===null&&(r=qe("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),qe(e).select("svg").selectAll("g.node").on("mouseover",a=>{let s=qe(a.currentTarget);if(s.attr("title")===null)return;let u=a.currentTarget?.getBoundingClientRect();r.transition().duration(200).style("opacity",".9"),r.text(s.attr("title")).style("left",window.scrollX+u.left+(u.right-u.left)/2+"px").style("top",window.scrollY+u.bottom+"px"),r.html(r.html().replace(/<br\/>/g,"
    ")),s.classed("hover",!0)}).on("mouseout",a=>{r.transition().duration(500).style("opacity",0),qe(a.currentTarget).classed("hover",!1)})}clear(e="gen-2"){this.vertices=new Map,this.classes=new Map,this.edges=[],this.funs=[this.setupToolTips.bind(this)],this.subGraphs=[],this.subGraphLookup=new Map,this.subCount=0,this.tooltips=new Map,this.firstGraphFlag=!0,this.version=e,this.config=ge(),Sr()}setGen(e){this.version=e||"gen-2"}defaultStyle(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"}addSubGraph(e,r,n){let i=e.text.trim(),a=n.text;e===n&&/\s/.exec(n.text)&&(i=void 0);let l=o(p=>{let m={boolean:{},number:{},string:{}},g=[],y;return{nodeList:p.filter(function(x){let b=typeof x;return x.stmt&&x.stmt==="dir"?(y=x.value,!1):x.trim()===""?!1:b in m?m[b].hasOwnProperty(x)?!1:m[b][x]=!0:g.includes(x)?!1:g.push(x)}),dir:y}},"uniq")(r.flat()),u=l.nodeList,h=l.dir,f=ge().flowchart??{};if(h=h??(f.inheritDir?this.getDirection()??ge().direction??void 0:void 0),this.version==="gen-1")for(let p=0;p2e3)return{result:!1,count:0};if(this.posCrossRef[this.secCount]=r,this.subGraphs[r].id===e)return{result:!0,count:0};let i=0,a=1;for(;i=0){let l=this.indexNodes2(e,s);if(l.result)return{result:!0,count:a+l.count};a=a+l.count}i=i+1}return{result:!1,count:a}}getDepthFirstPos(e){return this.posCrossRef[e]}indexNodes(){this.secCount=-1,this.subGraphs.length>0&&this.indexNodes2("none",this.subGraphs.length-1)}getSubGraphs(){return this.subGraphs}firstGraph(){return this.firstGraphFlag?(this.firstGraphFlag=!1,!0):!1}destructStartLink(e){let r=e.trim(),n="arrow_open";switch(r[0]){case"<":n="arrow_point",r=r.slice(1);break;case"x":n="arrow_cross",r=r.slice(1);break;case"o":n="arrow_circle",r=r.slice(1);break}let i="normal";return r.includes("=")&&(i="thick"),r.includes(".")&&(i="dotted"),{type:n,stroke:i}}countChar(e,r){let n=r.length,i=0;for(let a=0;a":i="arrow_point",r.startsWith("<")&&(i="double_"+i,n=n.slice(1));break;case"o":i="arrow_circle",r.startsWith("o")&&(i="double_"+i,n=n.slice(1));break}let a="normal",s=n.length-1;n.startsWith("=")&&(a="thick"),n.startsWith("~")&&(a="invisible");let l=this.countChar(".",n);return l&&(a="dotted",s=l),{type:i,stroke:a,length:s}}destructLink(e,r){let n=this.destructEndLink(e),i;if(r){if(i=this.destructStartLink(r),i.stroke!==n.stroke)return{type:"INVALID",stroke:"INVALID"};if(i.type==="arrow_open")i.type=n.type;else{if(i.type!==n.type)return{type:"INVALID",stroke:"INVALID"};i.type="double_"+i.type}return i.type==="double_arrow"&&(i.type="double_arrow_point"),i.length=n.length,i}return n}exists(e,r){for(let n of e)if(n.nodes.includes(r))return!0;return!1}makeUniq(e,r){let n=[];return e.nodes.forEach((i,a)=>{this.exists(r,i)||n.push(e.nodes[a])}),{nodes:n}}getTypeFromVertex(e){if(e.img)return"imageSquare";if(e.icon)return e.form==="circle"?"iconCircle":e.form==="square"?"iconSquare":e.form==="rounded"?"iconRounded":"icon";switch(e.type){case"square":case void 0:return"squareRect";case"round":return"roundedRect";case"ellipse":return"ellipse";default:return e.type}}findNode(e,r){return e.find(n=>n.id===r)}destructEdgeType(e){let r="none",n="arrow_point";switch(e){case"arrow_point":case"arrow_circle":case"arrow_cross":n=e;break;case"double_arrow_point":case"double_arrow_circle":case"double_arrow_cross":r=e.replace("double_",""),n=r;break}return{arrowTypeStart:r,arrowTypeEnd:n}}addNodeFromVertex(e,r,n,i,a,s){let l=n.get(e.id),u=i.get(e.id)??!1,h=this.findNode(r,e.id);if(h)h.cssStyles=e.styles,h.cssCompiledStyles=this.getCompiledStyles(e.classes),h.cssClasses=e.classes.join(" ");else{let f={id:e.id,label:e.text,labelStyle:"",parentId:l,padding:a.flowchart?.padding||8,cssStyles:e.styles,cssCompiledStyles:this.getCompiledStyles(["default","node",...e.classes]),cssClasses:"default "+e.classes.join(" "),dir:e.dir,domId:e.domId,look:s,link:e.link,linkTarget:e.linkTarget,tooltip:this.getTooltip(e.id),icon:e.icon,pos:e.pos,img:e.img,assetWidth:e.assetWidth,assetHeight:e.assetHeight,constraint:e.constraint};u?r.push({...f,isGroup:!0,shape:"rect"}):r.push({...f,isGroup:!1,shape:this.getTypeFromVertex(e)})}}getCompiledStyles(e){let r=[];for(let n of e){let i=this.classes.get(n);i?.styles&&(r=[...r,...i.styles??[]].map(a=>a.trim())),i?.textStyles&&(r=[...r,...i.textStyles??[]].map(a=>a.trim()))}return r}getData(){let e=ge(),r=[],n=[],i=this.getSubGraphs(),a=new Map,s=new Map;for(let h=i.length-1;h>=0;h--){let f=i[h];f.nodes.length>0&&s.set(f.id,!0);for(let d of f.nodes)a.set(d,f.id)}for(let h=i.length-1;h>=0;h--){let f=i[h];r.push({id:f.id,label:f.title,labelStyle:"",parentId:a.get(f.id),padding:8,cssCompiledStyles:this.getCompiledStyles(f.classes),cssClasses:f.classes.join(" "),shape:"rect",dir:f.dir,isGroup:!0,look:e.look})}this.getVertices().forEach(h=>{this.addNodeFromVertex(h,r,a,s,e,e.look||"classic")});let u=this.getEdges();return u.forEach((h,f)=>{let{arrowTypeStart:d,arrowTypeEnd:p}=this.destructEdgeType(h.type),m=[...u.defaultStyle??[]];h.style&&m.push(...h.style);let g={id:xc(h.start,h.end,{counter:f,prefix:"L"},h.id),isUserDefinedId:h.isUserDefinedId,start:h.start,end:h.end,type:h.type??"normal",label:h.text,labelpos:"c",thickness:h.stroke,minlen:h.length,classes:h?.stroke==="invisible"?"":"edge-thickness-normal edge-pattern-solid flowchart-link",arrowTypeStart:h?.stroke==="invisible"||h?.type==="arrow_open"?"none":d,arrowTypeEnd:h?.stroke==="invisible"||h?.type==="arrow_open"?"none":p,arrowheadStyle:"fill: #333",cssCompiledStyles:this.getCompiledStyles(h.classes),labelStyle:m,style:m,pattern:h.stroke,look:e.look,animate:h.animate,animation:h.animation,curve:h.interpolate||this.edges.defaultInterpolate||e.flowchart?.curve};n.push(g)}),{nodes:r,edges:n,other:{},config:e}}defaultConfig(){return V3.flowchart}}});var Vo,ep=M(()=>{"use strict";yr();Vo=o((t,e)=>{let r;return e==="sandbox"&&(r=qe("#i"+t)),(e==="sandbox"?qe(r.nodes()[0].contentDocument.body):qe("body")).select(`[id="${t}"]`)},"getDiagramElement")});var Pu,P2=M(()=>{"use strict";Pu=o(({flowchart:t})=>{let e=t?.subGraphTitleMargin?.top??0,r=t?.subGraphTitleMargin?.bottom??0,n=e+r;return{subGraphTitleTopMargin:e,subGraphTitleBottomMargin:r,subGraphTitleTotalMargin:n}},"getSubGraphTitleMargins")});var Gte,NRe,MRe,IRe,ORe,PRe,BRe,Vte,Sm,Ute,uw=M(()=>{"use strict";Xt();gr();pt();P2();yr();Ht();zo();S9();sw();Zd();$t();Gte=o(async(t,e)=>{X.info("Creating subgraph rect for ",e.id,e);let r=ge(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=je(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=vr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await di(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0}),y=g.getBBox();if(vr(r.flowchart.htmlLabels)){let C=g.children[0],A=qe(g);y=C.getBoundingClientRect(),A.attr("width",y.width),A.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,T=e.y-x/2;X.trace("Data ",e,JSON.stringify(e));let S;if(e.look==="handDrawn"){let C=Ze.svg(d),A=Je(e,{roughness:.7,fill:a,stroke:s,fillWeight:3,seed:i}),L=C.path(Fs(b,T,v,x,0),A);S=d.insert(()=>(X.debug("Rough node insert CXC",L),L),":first-child"),S.select("path:nth-child(2)").attr("style",h.join(";")),S.select("path").attr("style",f.join(";").replace("fill","stroke"))}else S=d.insert("rect",":first-child"),S.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",T).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:w}=Pu(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+w})`),l){let C=m.select("span");C&&C.attr("style",l)}let k=S.node().getBBox();return e.offsetX=0,e.width=k.width,e.height=k.height,e.offsetY=y.height-e.padding/2,e.intersect=function(C){return Qh(e,C)},{cluster:d,labelBBox:y}},"rect"),NRe=o((t,e)=>{let r=t.insert("g").attr("class","note-cluster").attr("id",e.id),n=r.insert("rect",":first-child"),i=0*e.padding,a=i/2;n.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");let s=n.node().getBBox();return e.width=s.width,e.height=s.height,e.intersect=function(l){return Qh(e,l)},{cluster:r,labelBBox:{width:0,height:0}}},"noteGroup"),MRe=o(async(t,e)=>{let r=ge(),{themeVariables:n,handDrawnSeed:i}=r,{altBackground:a,compositeBackground:s,compositeTitleBackground:l,nodeBorder:u}=n,h=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-id",e.id).attr("data-look",e.look),f=h.insert("g",":first-child"),d=h.insert("g").attr("class","cluster-label"),p=h.append("rect"),m=d.node().appendChild(await kc(e.label,e.labelStyle,void 0,!0)),g=m.getBBox();if(vr(r.flowchart.htmlLabels)){let L=m.children[0],I=qe(m);g=L.getBoundingClientRect(),I.attr("width",g.width),I.attr("height",g.height)}let y=0*e.padding,v=y/2,x=(e.width<=g.width+e.padding?g.width+e.padding:e.width)+y;e.width<=g.width+e.padding?e.diff=(x-e.width)/2-e.padding:e.diff=-e.padding;let b=e.height+y,T=e.height+y-g.height-6,S=e.x-x/2,w=e.y-b/2;e.width=x;let k=e.y-e.height/2-v+g.height+2,C;if(e.look==="handDrawn"){let L=e.cssClasses.includes("statediagram-cluster-alt"),I=Ze.svg(h),R=e.rx||e.ry?I.path(Fs(S,w,x,b,10),{roughness:.7,fill:l,fillStyle:"solid",stroke:u,seed:i}):I.rectangle(S,w,x,b,{seed:i});C=h.insert(()=>R,":first-child");let E=I.rectangle(S,k,x,T,{fill:L?a:s,fillStyle:L?"hachure":"solid",stroke:u,seed:i});C=h.insert(()=>R,":first-child"),p=h.insert(()=>E)}else C=f.insert("rect",":first-child"),C.attr("class","outer").attr("x",S).attr("y",w).attr("width",x).attr("height",b).attr("data-look",e.look),p.attr("class","inner").attr("x",S).attr("y",k).attr("width",x).attr("height",T);d.attr("transform",`translate(${e.x-g.width/2}, ${w+1-(vr(r.flowchart.htmlLabels)?0:3)})`);let A=C.node().getBBox();return e.height=A.height,e.offsetX=0,e.offsetY=g.height-e.padding/2,e.labelBBox=g,e.intersect=function(L){return Qh(e,L)},{cluster:h,labelBBox:g}},"roundedWithTitle"),IRe=o(async(t,e)=>{X.info("Creating subgraph rect for ",e.id,e);let r=ge(),{themeVariables:n,handDrawnSeed:i}=r,{clusterBkg:a,clusterBorder:s}=n,{labelStyles:l,nodeStyles:u,borderStyles:h,backgroundStyles:f}=je(e),d=t.insert("g").attr("class","cluster "+e.cssClasses).attr("id",e.id).attr("data-look",e.look),p=vr(r.flowchart.htmlLabels),m=d.insert("g").attr("class","cluster-label "),g=await di(m,e.label,{style:e.labelStyle,useHtmlLabels:p,isNode:!0,width:e.width}),y=g.getBBox();if(vr(r.flowchart.htmlLabels)){let C=g.children[0],A=qe(g);y=C.getBoundingClientRect(),A.attr("width",y.width),A.attr("height",y.height)}let v=e.width<=y.width+e.padding?y.width+e.padding:e.width;e.width<=y.width+e.padding?e.diff=(v-e.width)/2-e.padding:e.diff=-e.padding;let x=e.height,b=e.x-v/2,T=e.y-x/2;X.trace("Data ",e,JSON.stringify(e));let S;if(e.look==="handDrawn"){let C=Ze.svg(d),A=Je(e,{roughness:.7,fill:a,stroke:s,fillWeight:4,seed:i}),L=C.path(Fs(b,T,v,x,e.rx),A);S=d.insert(()=>(X.debug("Rough node insert CXC",L),L),":first-child"),S.select("path:nth-child(2)").attr("style",h.join(";")),S.select("path").attr("style",f.join(";").replace("fill","stroke"))}else S=d.insert("rect",":first-child"),S.attr("style",u).attr("rx",e.rx).attr("ry",e.ry).attr("x",b).attr("y",T).attr("width",v).attr("height",x);let{subGraphTitleTopMargin:w}=Pu(r);if(m.attr("transform",`translate(${e.x-y.width/2}, ${e.y-e.height/2+w})`),l){let C=m.select("span");C&&C.attr("style",l)}let k=S.node().getBBox();return e.offsetX=0,e.width=k.width,e.height=k.height,e.offsetY=y.height-e.padding/2,e.intersect=function(C){return Qh(e,C)},{cluster:d,labelBBox:y}},"kanbanSection"),ORe=o((t,e)=>{let r=ge(),{themeVariables:n,handDrawnSeed:i}=r,{nodeBorder:a}=n,s=t.insert("g").attr("class",e.cssClasses).attr("id",e.id).attr("data-look",e.look),l=s.insert("g",":first-child"),u=0*e.padding,h=e.width+u;e.diff=-e.padding;let f=e.height+u,d=e.x-h/2,p=e.y-f/2;e.width=h;let m;if(e.look==="handDrawn"){let v=Ze.svg(s).rectangle(d,p,h,f,{fill:"lightgrey",roughness:.5,strokeLineDash:[5],stroke:a,seed:i});m=s.insert(()=>v,":first-child")}else m=l.insert("rect",":first-child"),m.attr("class","divider").attr("x",d).attr("y",p).attr("width",h).attr("height",f).attr("data-look",e.look);let g=m.node().getBBox();return e.height=g.height,e.offsetX=0,e.offsetY=0,e.intersect=function(y){return Qh(e,y)},{cluster:s,labelBBox:{}}},"divider"),PRe=Gte,BRe={rect:Gte,squareRect:PRe,roundedWithTitle:MRe,noteGroup:NRe,divider:ORe,kanbanSection:IRe},Vte=new Map,Sm=o(async(t,e)=>{let r=e.shape||"rect",n=await BRe[r](t,e);return Vte.set(e.id,n),n},"insertCluster"),Ute=o(()=>{Vte=new Map},"clear")});function hw(t,e){if(t===void 0||e===void 0)return{angle:0,deltaX:0,deltaY:0};t=Xn(t),e=Xn(e);let[r,n]=[t.x,t.y],[i,a]=[e.x,e.y],s=i-r,l=a-n;return{angle:Math.atan(l/s),deltaX:s,deltaY:l}}var da,Y9,Xn,fw,X9=M(()=>{"use strict";da={aggregation:17.25,extension:17.25,composition:17.25,dependency:6,lollipop:13.5,arrow_point:4},Y9={arrow_point:9,arrow_cross:12.5,arrow_circle:12.5};o(hw,"calculateDeltaAndAngle");Xn=o(t=>Array.isArray(t)?{x:t[0],y:t[1]}:t,"pointTransformer"),fw=o(t=>({x:o(function(e,r,n){let i=0,a=Xn(n[0]).x=0?1:-1)}else if(r===n.length-1&&Object.hasOwn(da,t.arrowTypeEnd)){let{angle:m,deltaX:g}=hw(n[n.length-1],n[n.length-2]);i=da[t.arrowTypeEnd]*Math.cos(m)*(g>=0?1:-1)}let s=Math.abs(Xn(e).x-Xn(n[n.length-1]).x),l=Math.abs(Xn(e).y-Xn(n[n.length-1]).y),u=Math.abs(Xn(e).x-Xn(n[0]).x),h=Math.abs(Xn(e).y-Xn(n[0]).y),f=da[t.arrowTypeStart],d=da[t.arrowTypeEnd],p=1;if(s0&&l0&&h=0?1:-1)}else if(r===n.length-1&&Object.hasOwn(da,t.arrowTypeEnd)){let{angle:m,deltaY:g}=hw(n[n.length-1],n[n.length-2]);i=da[t.arrowTypeEnd]*Math.abs(Math.sin(m))*(g>=0?1:-1)}let s=Math.abs(Xn(e).y-Xn(n[n.length-1]).y),l=Math.abs(Xn(e).x-Xn(n[n.length-1]).x),u=Math.abs(Xn(e).y-Xn(n[0]).y),h=Math.abs(Xn(e).x-Xn(n[0]).x),f=da[t.arrowTypeStart],d=da[t.arrowTypeEnd],p=1;if(s0&&l0&&h{"use strict";pt();qte=o((t,e,r,n,i,a)=>{e.arrowTypeStart&&Hte(t,"start",e.arrowTypeStart,r,n,i,a),e.arrowTypeEnd&&Hte(t,"end",e.arrowTypeEnd,r,n,i,a)},"addEdgeMarkers"),FRe={arrow_cross:{type:"cross",fill:!1},arrow_point:{type:"point",fill:!0},arrow_barb:{type:"barb",fill:!0},arrow_circle:{type:"circle",fill:!1},aggregation:{type:"aggregation",fill:!1},extension:{type:"extension",fill:!1},composition:{type:"composition",fill:!0},dependency:{type:"dependency",fill:!0},lollipop:{type:"lollipop",fill:!1},only_one:{type:"onlyOne",fill:!1},zero_or_one:{type:"zeroOrOne",fill:!1},one_or_more:{type:"oneOrMore",fill:!1},zero_or_more:{type:"zeroOrMore",fill:!1},requirement_arrow:{type:"requirement_arrow",fill:!1},requirement_contains:{type:"requirement_contains",fill:!1}},Hte=o((t,e,r,n,i,a,s)=>{let l=FRe[r];if(!l){X.warn(`Unknown arrow type: ${r}`);return}let u=l.type,f=`${i}_${a}-${u}${e==="start"?"Start":"End"}`;if(s&&s.trim()!==""){let d=s.replace(/[^\dA-Za-z]/g,"_"),p=`${f}_${d}`;if(!document.getElementById(p)){let m=document.getElementById(f);if(m){let g=m.cloneNode(!0);g.id=p,g.querySelectorAll("path, circle, line").forEach(v=>{v.setAttribute("stroke",s),l.fill&&v.setAttribute("fill",s)}),m.parentNode?.appendChild(g)}}t.attr(`marker-${e}`,`url(${n}#${p})`)}else t.attr(`marker-${e}`,`url(${n}#${f})`)},"addEdgeMarker")});function pw(t,e){ge().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}function GRe(t){let e=[],r=[];for(let n=1;n5&&Math.abs(a.y-i.y)>5||i.y===a.y&&a.x===s.x&&Math.abs(a.x-i.x)>5&&Math.abs(a.y-s.y)>5)&&(e.push(a),r.push(n))}return{cornerPoints:e,cornerPointPositions:r}}function HRe(t,e){if(t.length<2)return"";let r="",n=t.length,i=1e-5;for(let a=0;a({...i}));if(t.length>=2&&da[e.arrowTypeStart]){let i=da[e.arrowTypeStart],a=t[0],s=t[1],{angle:l}=jte(a,s),u=i*Math.cos(l),h=i*Math.sin(l);r[0].x=a.x+u,r[0].y=a.y+h}let n=t.length;if(n>=2&&da[e.arrowTypeEnd]){let i=da[e.arrowTypeEnd],a=t[n-1],s=t[n-2],{angle:l}=jte(s,a),u=i*Math.cos(l),h=i*Math.sin(l);r[n-1].x=a.x-u,r[n-1].y=a.y-h}return r}var mw,pa,Kte,dw,gw,yw,$Re,zRe,Yte,Xte,VRe,URe,vw,j9=M(()=>{"use strict";Xt();gr();pt();zo();tr();X9();P2();yr();Ht();sw();Wte();$t();mw=new Map,pa=new Map,Kte=o(()=>{mw.clear(),pa.clear()},"clear"),dw=o(t=>t?t.reduce((r,n)=>r+";"+n,""):"","getLabelStyles"),gw=o(async(t,e)=>{let r=vr(ge().flowchart.htmlLabels),{labelStyles:n}=je(e);e.labelStyle=n;let i=await di(t,e.label,{style:e.labelStyle,useHtmlLabels:r,addSvgBackground:!0,isNode:!1});X.info("abc82",e,e.labelType);let a=t.insert("g").attr("class","edgeLabel"),s=a.insert("g").attr("class","label").attr("data-id",e.id);s.node().appendChild(i);let l=i.getBBox();if(r){let h=i.children[0],f=qe(i);l=h.getBoundingClientRect(),f.attr("width",l.width),f.attr("height",l.height)}s.attr("transform","translate("+-l.width/2+", "+-l.height/2+")"),mw.set(e.id,a),e.width=l.width,e.height=l.height;let u;if(e.startLabelLeft){let h=await kc(e.startLabelLeft,dw(e.labelStyle)),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).startLeft=f,pw(u,e.startLabelLeft)}if(e.startLabelRight){let h=await kc(e.startLabelRight,dw(e.labelStyle)),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=f.node().appendChild(h),d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).startRight=f,pw(u,e.startLabelRight)}if(e.endLabelLeft){let h=await kc(e.endLabelLeft,dw(e.labelStyle)),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).endLeft=f,pw(u,e.endLabelLeft)}if(e.endLabelRight){let h=await kc(e.endLabelRight,dw(e.labelStyle)),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),pa.get(e.id)||pa.set(e.id,{}),pa.get(e.id).endRight=f,pw(u,e.endLabelRight)}return i},"insertEdgeLabel");o(pw,"setTerminalWidth");yw=o((t,e)=>{X.debug("Moving label abc88 ",t.id,t.label,mw.get(t.id),e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=ge(),{subGraphTitleTotalMargin:i}=Pu(n);if(t.label){let a=mw.get(t.id),s=t.x,l=t.y;if(r){let u=qt.calcLabelPosition(r);X.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=pa.get(t.id).startLeft,s=t.x,l=t.y;if(r){let u=qt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=pa.get(t.id).startRight,s=t.x,l=t.y;if(r){let u=qt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=pa.get(t.id).endLeft,s=t.x,l=t.y;if(r){let u=qt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=pa.get(t.id).endRight,s=t.x,l=t.y;if(r){let u=qt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),$Re=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),zRe=o((t,e,r)=>{X.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(e)} + insidePoint : ${JSON.stringify(r)} + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.xMath.abs(n-e.x)*u){let d=r.y{X.warn("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(X.info("abc88 checking point",a,e),!$Re(e,a)&&!i){let s=zRe(e,n,a);X.debug("abc88 inside",a,n,s),X.debug("abc88 intersection",s,e);let l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)?X.warn("abc88 no intersect",s,r):r.push(s),i=!0}else X.warn("abc88 outside",a,n),n=a,i||r.push(a)}),X.debug("returning points",r),r},"cutPathAtIntersect");o(GRe,"extractCornerPoints");Xte=o(function(t,e,r){let n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),s=r/a;return{x:e.x-s*n,y:e.y-s*i}},"findAdjacentPoint"),VRe=o(function(t){let{cornerPointPositions:e}=GRe(t),r=[];for(let n=0;n10&&Math.abs(a.y-i.y)>=10){X.debug("Corner point fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));let m=5;s.x===l.x?p={x:h<0?l.x-m+d:l.x+m-d,y:f<0?l.y-d:l.y+d}:p={x:h<0?l.x-d:l.x+d,y:f<0?l.y-m+d:l.y+m-d}}else X.debug("Corner point skipping fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));r.push(p,u)}else r.push(t[n]);return r},"fixCorners"),URe=o((t,e,r)=>{let n=t-e-r,i=2,a=2,s=i+a,l=Math.floor(n/s),u=Array(l).fill(`${i} ${a}`).join(" ");return`0 ${e} ${u} ${r}`},"generateDashArray"),vw=o(function(t,e,r,n,i,a,s,l=!1){let{handDrawnSeed:u}=ge(),h=e.points,f=!1,d=i;var p=a;let m=[];for(let D in e.cssCompiledStyles)D2(D)||m.push(e.cssCompiledStyles[D]);X.debug("UIO intersect check",e.points,p.x,d.x),p.intersect&&d.intersect&&!l&&(h=h.slice(1,e.points.length-1),h.unshift(d.intersect(h[0])),X.debug("Last point UIO",e.start,"-->",e.end,h[h.length-1],p,p.intersect(h[h.length-1])),h.push(p.intersect(h[h.length-1])));let g=btoa(JSON.stringify(h));e.toCluster&&(X.info("to cluster abc88",r.get(e.toCluster)),h=Yte(e.points,r.get(e.toCluster).node),f=!0),e.fromCluster&&(X.debug("from cluster abc88",r.get(e.fromCluster),JSON.stringify(h,null,2)),h=Yte(h.reverse(),r.get(e.fromCluster).node).reverse(),f=!0);let y=h.filter(D=>!Number.isNaN(D.y));y=VRe(y);let v=No;switch(v=Cu,e.curve){case"linear":v=Cu;break;case"basis":v=No;break;case"cardinal":v=Xv;break;case"bumpX":v=Uv;break;case"bumpY":v=Hv;break;case"catmullRom":v=Qv;break;case"monotoneX":v=Zv;break;case"monotoneY":v=Jv;break;case"natural":v=J0;break;case"step":v=em;break;case"stepAfter":v=t2;break;case"stepBefore":v=e2;break;default:v=No}let{x,y:b}=fw(e),T=Cl().x(x).y(b).curve(v),S;switch(e.thickness){case"normal":S="edge-thickness-normal";break;case"thick":S="edge-thickness-thick";break;case"invisible":S="edge-thickness-invisible";break;default:S="edge-thickness-normal"}switch(e.pattern){case"solid":S+=" edge-pattern-solid";break;case"dotted":S+=" edge-pattern-dotted";break;case"dashed":S+=" edge-pattern-dashed";break;default:S+=" edge-pattern-solid"}let w,k=e.curve==="rounded"?HRe(qRe(y,e),5):T(y),C=Array.isArray(e.style)?e.style:[e.style],A=C.find(D=>D?.startsWith("stroke:")),L=!1;if(e.look==="handDrawn"){let D=Ze.svg(t);Object.assign([],y);let O=D.path(k,{roughness:.3,seed:u});S+=" transition",w=qe(O).select("path").attr("id",e.id).attr("class"," "+S+(e.classes?" "+e.classes:"")).attr("style",C?C.reduce((P,B)=>P+";"+B,""):"");let N=w.attr("d");w.attr("d",N),t.node().appendChild(w.node())}else{let D=m.join(";"),O=C?C.reduce((U,j)=>U+j+";",""):"",N="";e.animate&&(N=" edge-animation-fast"),e.animation&&(N=" edge-animation-"+e.animation);let P=(D?D+";"+O+";":O)+";"+(C?C.reduce((U,j)=>U+";"+j,""):"");w=t.append("path").attr("d",k).attr("id",e.id).attr("class"," "+S+(e.classes?" "+e.classes:"")+(N??"")).attr("style",P),A=P.match(/stroke:([^;]+)/)?.[1],L=e.animate===!0||!!e.animation||D.includes("animation");let B=w.node(),F=typeof B.getTotalLength=="function"?B.getTotalLength():0,V=Y9[e.arrowTypeStart]||0,$=Y9[e.arrowTypeEnd]||0;if(e.look==="neo"&&!L){let j=`stroke-dasharray: ${e.pattern==="dotted"||e.pattern==="dashed"?URe(F,V,$):`0 ${V} ${F-V-$} ${$}`}; stroke-dashoffset: 0;`;w.attr("style",j+w.attr("style"))}}w.attr("data-edge",!0),w.attr("data-et","edge"),w.attr("data-id",e.id),w.attr("data-points",g),e.showPoints&&y.forEach(D=>{t.append("circle").style("stroke","red").style("fill","red").attr("r",1).attr("cx",D.x).attr("cy",D.y)});let I="";(ge().flowchart.arrowMarkerAbsolute||ge().state.arrowMarkerAbsolute)&&(I=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,I=I.replace(/\(/g,"\\(").replace(/\)/g,"\\)")),X.info("arrowTypeStart",e.arrowTypeStart),X.info("arrowTypeEnd",e.arrowTypeEnd),qte(w,e,I,s,n,A);let R=Math.floor(h.length/2),E=h[R];qt.isLabelCoordinateInPath(E,w.attr("d"))||(f=!0);let _={};return f&&(_.updatedPath=h),_.originalPath=e.points,_},"insertEdge");o(HRe,"generateRoundedPath");o(jte,"calculateDeltaAndAngle");o(qRe,"applyMarkerOffsetsToPoints")});var WRe,YRe,XRe,jRe,KRe,QRe,ZRe,JRe,eNe,tNe,rNe,nNe,iNe,aNe,sNe,oNe,lNe,xw,K9=M(()=>{"use strict";pt();WRe=o((t,e,r,n)=>{e.forEach(i=>{lNe[i](t,r,n)})},"insertMarkers"),YRe=o((t,e,r)=>{X.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("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),XRe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),jRe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),KRe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),QRe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),ZRe=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),JRe=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),eNe=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),tNe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),rNe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneStart").attr("class","marker onlyOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneEnd").attr("class","marker onlyOne "+e).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M3,0 L3,18 M9,0 L9,18")},"only_one"),nNe=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneStart").attr("class","marker zeroOrOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("d","M9,0 L9,18");let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneEnd").attr("class","marker zeroOrOne "+e).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),i.append("path").attr("d","M21,0 L21,18")},"zero_or_one"),iNe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreStart").attr("class","marker oneOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreEnd").attr("class","marker oneOrMore "+e).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18")},"one_or_more"),aNe=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreStart").attr("class","marker zeroOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18");let i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreEnd").attr("class","marker zeroOrMore "+e).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),i.append("path").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},"zero_or_more"),sNe=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_arrowEnd").attr("refX",20).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("path").attr("d",`M0,0 + L20,10 + M20,10 + L0,20`)},"requirement_arrow"),oNe=o((t,e,r)=>{let n=t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_containsStart").attr("refX",0).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("g");n.append("circle").attr("cx",10).attr("cy",10).attr("r",9).attr("fill","none"),n.append("line").attr("x1",1).attr("x2",19).attr("y1",10).attr("y2",10),n.append("line").attr("y1",1).attr("y2",19).attr("x1",10).attr("x2",10)},"requirement_contains"),lNe={extension:YRe,composition:XRe,aggregation:jRe,dependency:KRe,lollipop:QRe,point:ZRe,circle:JRe,cross:eNe,barb:tNe,only_one:rNe,zero_or_one:nNe,one_or_more:iNe,zero_or_more:aNe,requirement_arrow:sNe,requirement_contains:oNe},xw=WRe});async function Cm(t,e,r){let n,i;e.shape==="rect"&&(e.rx&&e.ry?e.shape="roundedRect":e.shape="squareRect");let a=e.shape?q9[e.shape]:void 0;if(!a)throw new Error(`No such shape: ${e.shape}. Please check your syntax.`);if(e.link){let s;r.config.securityLevel==="sandbox"?s="_top":e.linkTarget&&(s=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",s??null),i=await a(n,e,r)}else i=await a(t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),bw.set(e.id,n),e.haveCallback&&n.attr("class",n.attr("class")+" clickable"),n}var bw,Qte,Zte,B2,Tw=M(()=>{"use strict";pt();W9();bw=new Map;o(Cm,"insertNode");Qte=o((t,e)=>{bw.set(e.id,t)},"setNodeElem"),Zte=o(()=>{bw.clear()},"clear"),B2=o(t=>{let e=bw.get(t.id);X.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});var Jte,ere=M(()=>{"use strict";qn();gr();pt();uw();j9();K9();Tw();It();tr();Jte={common:tt,getConfig:Qt,insertCluster:Sm,insertEdge:vw,insertEdgeLabel:gw,insertMarkers:xw,insertNode:Cm,interpolateToCurve:FL,labelHelper:ut,log:X,positionEdgeLabel:yw}});function uNe(t){return typeof t=="symbol"||ai(t)&&fa(t)==cNe}var cNe,uo,tp=M(()=>{"use strict";_u();Oo();cNe="[object Symbol]";o(uNe,"isSymbol");uo=uNe});function hNe(t,e){for(var r=-1,n=t==null?0:t.length,i=Array(n);++r{"use strict";o(hNe,"arrayMap");$s=hNe});function nre(t){if(typeof t=="string")return t;if(Bt(t))return $s(t,nre)+"";if(uo(t))return rre?rre.call(t):"";var e=t+"";return e=="0"&&1/t==-fNe?"-0":e}var fNe,tre,rre,ire,are=M(()=>{"use strict";$d();rp();Yn();tp();fNe=1/0,tre=Ki?Ki.prototype:void 0,rre=tre?tre.toString:void 0;o(nre,"baseToString");ire=nre});function pNe(t){for(var e=t.length;e--&&dNe.test(t.charAt(e)););return e}var dNe,sre,ore=M(()=>{"use strict";dNe=/\s/;o(pNe,"trimmedEndIndex");sre=pNe});function gNe(t){return t&&t.slice(0,sre(t)+1).replace(mNe,"")}var mNe,lre,cre=M(()=>{"use strict";ore();mNe=/^\s+/;o(gNe,"baseTrim");lre=gNe});function TNe(t){if(typeof t=="number")return t;if(uo(t))return ure;if(Sn(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Sn(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=lre(t);var r=vNe.test(t);return r||xNe.test(t)?bNe(t.slice(2),r?2:8):yNe.test(t)?ure:+t}var ure,yNe,vNe,xNe,bNe,hre,fre=M(()=>{"use strict";cre();oo();tp();ure=NaN,yNe=/^[-+]0x[0-9a-f]+$/i,vNe=/^0b[01]+$/i,xNe=/^0o[0-7]+$/i,bNe=parseInt;o(TNe,"toNumber");hre=TNe});function kNe(t){if(!t)return t===0?t:0;if(t=hre(t),t===dre||t===-dre){var e=t<0?-1:1;return e*wNe}return t===t?t:0}var dre,wNe,Am,Q9=M(()=>{"use strict";fre();dre=1/0,wNe=17976931348623157e292;o(kNe,"toFinite");Am=kNe});function ENe(t){var e=Am(t),r=e%1;return e===e?r?e-r:e:0}var Ec,_m=M(()=>{"use strict";Q9();o(ENe,"toInteger");Ec=ENe});var SNe,ww,pre=M(()=>{"use strict";Fh();Mo();SNe=Ls(hi,"WeakMap"),ww=SNe});function CNe(){}var si,Z9=M(()=>{"use strict";o(CNe,"noop");si=CNe});function ANe(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(ANe,"arrayEach");kw=ANe});function _Ne(t,e,r,n){for(var i=t.length,a=r+(n?1:-1);n?a--:++a{"use strict";o(_Ne,"baseFindIndex");Ew=_Ne});function DNe(t){return t!==t}var mre,gre=M(()=>{"use strict";o(DNe,"baseIsNaN");mre=DNe});function LNe(t,e,r){for(var n=r-1,i=t.length;++n{"use strict";o(LNe,"strictIndexOf");yre=LNe});function RNe(t,e,r){return e===e?yre(t,e,r):Ew(t,mre,r)}var Dm,Sw=M(()=>{"use strict";eR();gre();vre();o(RNe,"baseIndexOf");Dm=RNe});function NNe(t,e){var r=t==null?0:t.length;return!!r&&Dm(t,e,0)>-1}var Cw,tR=M(()=>{"use strict";Sw();o(NNe,"arrayIncludes");Cw=NNe});var MNe,xre,bre=M(()=>{"use strict";SL();MNe=bT(Object.keys,Object),xre=MNe});function PNe(t){if(!mc(t))return xre(t);var e=[];for(var r in Object(t))ONe.call(t,r)&&r!="constructor"&&e.push(r);return e}var INe,ONe,Lm,Aw=M(()=>{"use strict";dm();bre();INe=Object.prototype,ONe=INe.hasOwnProperty;o(PNe,"baseKeys");Lm=PNe});function BNe(t){return fi(t)?ST(t):Lm(t)}var qr,Sc=M(()=>{"use strict";LL();Aw();Po();o(BNe,"keys");qr=BNe});var FNe,$Ne,zNe,ma,Tre=M(()=>{"use strict";ym();Hd();IL();Po();dm();Sc();FNe=Object.prototype,$Ne=FNe.hasOwnProperty,zNe=_T(function(t,e){if(mc(e)||fi(e)){$o(e,qr(e),t);return}for(var r in e)$Ne.call(e,r)&&gc(t,r,e[r])}),ma=zNe});function UNe(t,e){if(Bt(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||uo(t)?!0:VNe.test(t)||!GNe.test(t)||e!=null&&t in Object(e)}var GNe,VNe,Rm,_w=M(()=>{"use strict";Yn();tp();GNe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,VNe=/^\w*$/;o(UNe,"isKey");Rm=UNe});function qNe(t){var e=am(t,function(n){return r.size===HNe&&r.clear(),n}),r=e.cache;return e}var HNe,wre,kre=M(()=>{"use strict";vL();HNe=500;o(qNe,"memoizeCapped");wre=qNe});var WNe,YNe,XNe,Ere,Sre=M(()=>{"use strict";kre();WNe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,YNe=/\\(\\)?/g,XNe=wre(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace(WNe,function(r,n,i,a){e.push(i?a.replace(YNe,"$1"):n||r)}),e}),Ere=XNe});function jNe(t){return t==null?"":ire(t)}var Dw,rR=M(()=>{"use strict";are();o(jNe,"toString");Dw=jNe});function KNe(t,e){return Bt(t)?t:Rm(t,e)?[t]:Ere(Dw(t))}var rf,F2=M(()=>{"use strict";Yn();_w();Sre();rR();o(KNe,"castPath");rf=KNe});function ZNe(t){if(typeof t=="string"||uo(t))return t;var e=t+"";return e=="0"&&1/t==-QNe?"-0":e}var QNe,Cc,Nm=M(()=>{"use strict";tp();QNe=1/0;o(ZNe,"toKey");Cc=ZNe});function JNe(t,e){e=rf(e,t);for(var r=0,n=e.length;t!=null&&r{"use strict";F2();Nm();o(JNe,"baseGet");nf=JNe});function eMe(t,e,r){var n=t==null?void 0:nf(t,e);return n===void 0?r:n}var Cre,Are=M(()=>{"use strict";$2();o(eMe,"get");Cre=eMe});function tMe(t,e){for(var r=-1,n=e.length,i=t.length;++r{"use strict";o(tMe,"arrayPush");Mm=tMe});function rMe(t){return Bt(t)||_l(t)||!!(_re&&t&&t[_re])}var _re,Dre,Lre=M(()=>{"use strict";$d();pm();Yn();_re=Ki?Ki.isConcatSpreadable:void 0;o(rMe,"isFlattenable");Dre=rMe});function Rre(t,e,r,n,i){var a=-1,s=t.length;for(r||(r=Dre),i||(i=[]);++a0&&r(l)?e>1?Rre(l,e-1,r,n,i):Mm(i,l):n||(i[i.length]=l)}return i}var Ac,Im=M(()=>{"use strict";Lw();Lre();o(Rre,"baseFlatten");Ac=Rre});function nMe(t){var e=t==null?0:t.length;return e?Ac(t,1):[]}var Qr,Rw=M(()=>{"use strict";Im();o(nMe,"flatten");Qr=nMe});function iMe(t){return AT(CT(t,void 0,Qr),t+"")}var Nre,Mre=M(()=>{"use strict";Rw();RL();ML();o(iMe,"flatRest");Nre=iMe});function aMe(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),r=r>i?i:r,r<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var a=Array(i);++n{"use strict";o(aMe,"baseSlice");Nw=aMe});function pMe(t){return dMe.test(t)}var sMe,oMe,lMe,cMe,uMe,hMe,fMe,dMe,Ire,Ore=M(()=>{"use strict";sMe="\\ud800-\\udfff",oMe="\\u0300-\\u036f",lMe="\\ufe20-\\ufe2f",cMe="\\u20d0-\\u20ff",uMe=oMe+lMe+cMe,hMe="\\ufe0e\\ufe0f",fMe="\\u200d",dMe=RegExp("["+fMe+sMe+uMe+hMe+"]");o(pMe,"hasUnicode");Ire=pMe});function mMe(t,e,r,n){var i=-1,a=t==null?0:t.length;for(n&&a&&(r=t[++i]);++i{"use strict";o(mMe,"arrayReduce");Pre=mMe});function gMe(t,e){return t&&$o(e,qr(e),t)}var Fre,$re=M(()=>{"use strict";Hd();Sc();o(gMe,"baseAssign");Fre=gMe});function yMe(t,e){return t&&$o(e,Rs(e),t)}var zre,Gre=M(()=>{"use strict";Hd();qh();o(yMe,"baseAssignIn");zre=yMe});function vMe(t,e){for(var r=-1,n=t==null?0:t.length,i=0,a=[];++r{"use strict";o(vMe,"arrayFilter");Om=vMe});function xMe(){return[]}var Iw,iR=M(()=>{"use strict";o(xMe,"stubArray");Iw=xMe});var bMe,TMe,Vre,wMe,Pm,Ow=M(()=>{"use strict";Mw();iR();bMe=Object.prototype,TMe=bMe.propertyIsEnumerable,Vre=Object.getOwnPropertySymbols,wMe=Vre?function(t){return t==null?[]:(t=Object(t),Om(Vre(t),function(e){return TMe.call(t,e)}))}:Iw,Pm=wMe});function kMe(t,e){return $o(t,Pm(t),e)}var Ure,Hre=M(()=>{"use strict";Hd();Ow();o(kMe,"copySymbols");Ure=kMe});var EMe,SMe,Pw,aR=M(()=>{"use strict";Lw();TT();Ow();iR();EMe=Object.getOwnPropertySymbols,SMe=EMe?function(t){for(var e=[];t;)Mm(e,Pm(t)),t=fm(t);return e}:Iw,Pw=SMe});function CMe(t,e){return $o(t,Pw(t),e)}var qre,Wre=M(()=>{"use strict";Hd();aR();o(CMe,"copySymbolsIn");qre=CMe});function AMe(t,e,r){var n=e(t);return Bt(t)?n:Mm(n,r(t))}var Bw,sR=M(()=>{"use strict";Lw();Yn();o(AMe,"baseGetAllKeys");Bw=AMe});function _Me(t){return Bw(t,qr,Pm)}var z2,oR=M(()=>{"use strict";sR();Ow();Sc();o(_Me,"getAllKeys");z2=_Me});function DMe(t){return Bw(t,Rs,Pw)}var Fw,lR=M(()=>{"use strict";sR();aR();qh();o(DMe,"getAllKeysIn");Fw=DMe});var LMe,$w,Yre=M(()=>{"use strict";Fh();Mo();LMe=Ls(hi,"DataView"),$w=LMe});var RMe,zw,Xre=M(()=>{"use strict";Fh();Mo();RMe=Ls(hi,"Promise"),zw=RMe});var NMe,af,cR=M(()=>{"use strict";Fh();Mo();NMe=Ls(hi,"Set"),af=NMe});var jre,MMe,Kre,Qre,Zre,Jre,IMe,OMe,PMe,BMe,FMe,np,ho,ip=M(()=>{"use strict";Yre();dT();Xre();cR();pre();_u();mL();jre="[object Map]",MMe="[object Object]",Kre="[object Promise]",Qre="[object Set]",Zre="[object WeakMap]",Jre="[object DataView]",IMe=Du($w),OMe=Du(Gh),PMe=Du(zw),BMe=Du(af),FMe=Du(ww),np=fa;($w&&np(new $w(new ArrayBuffer(1)))!=Jre||Gh&&np(new Gh)!=jre||zw&&np(zw.resolve())!=Kre||af&&np(new af)!=Qre||ww&&np(new ww)!=Zre)&&(np=o(function(t){var e=fa(t),r=e==MMe?t.constructor:void 0,n=r?Du(r):"";if(n)switch(n){case IMe:return Jre;case OMe:return jre;case PMe:return Kre;case BMe:return Qre;case FMe:return Zre}return e},"getTag"));ho=np});function GMe(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&zMe.call(t,"index")&&(r.index=t.index,r.input=t.input),r}var $Me,zMe,ene,tne=M(()=>{"use strict";$Me=Object.prototype,zMe=$Me.hasOwnProperty;o(GMe,"initCloneArray");ene=GMe});function VMe(t,e){var r=e?hm(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}var rne,nne=M(()=>{"use strict";yT();o(VMe,"cloneDataView");rne=VMe});function HMe(t){var e=new t.constructor(t.source,UMe.exec(t));return e.lastIndex=t.lastIndex,e}var UMe,ine,ane=M(()=>{"use strict";UMe=/\w*$/;o(HMe,"cloneRegExp");ine=HMe});function qMe(t){return one?Object(one.call(t)):{}}var sne,one,lne,cne=M(()=>{"use strict";$d();sne=Ki?Ki.prototype:void 0,one=sne?sne.valueOf:void 0;o(qMe,"cloneSymbol");lne=qMe});function hIe(t,e,r){var n=t.constructor;switch(e){case eIe:return hm(t);case WMe:case YMe:return new n(+t);case tIe:return rne(t,r);case rIe:case nIe:case iIe:case aIe:case sIe:case oIe:case lIe:case cIe:case uIe:return vT(t,r);case XMe:return new n;case jMe:case ZMe:return new n(t);case KMe:return ine(t);case QMe:return new n;case JMe:return lne(t)}}var WMe,YMe,XMe,jMe,KMe,QMe,ZMe,JMe,eIe,tIe,rIe,nIe,iIe,aIe,sIe,oIe,lIe,cIe,uIe,une,hne=M(()=>{"use strict";yT();nne();ane();cne();kL();WMe="[object Boolean]",YMe="[object Date]",XMe="[object Map]",jMe="[object Number]",KMe="[object RegExp]",QMe="[object Set]",ZMe="[object String]",JMe="[object Symbol]",eIe="[object ArrayBuffer]",tIe="[object DataView]",rIe="[object Float32Array]",nIe="[object Float64Array]",iIe="[object Int8Array]",aIe="[object Int16Array]",sIe="[object Int32Array]",oIe="[object Uint8Array]",lIe="[object Uint8ClampedArray]",cIe="[object Uint16Array]",uIe="[object Uint32Array]";o(hIe,"initCloneByTag");une=hIe});function dIe(t){return ai(t)&&ho(t)==fIe}var fIe,fne,dne=M(()=>{"use strict";ip();Oo();fIe="[object Map]";o(dIe,"baseIsMap");fne=dIe});var pne,pIe,mne,gne=M(()=>{"use strict";dne();Ud();d2();pne=Fo&&Fo.isMap,pIe=pne?Bo(pne):fne,mne=pIe});function gIe(t){return ai(t)&&ho(t)==mIe}var mIe,yne,vne=M(()=>{"use strict";ip();Oo();mIe="[object Set]";o(gIe,"baseIsSet");yne=gIe});var xne,yIe,bne,Tne=M(()=>{"use strict";vne();Ud();d2();xne=Fo&&Fo.isSet,yIe=xne?Bo(xne):yne,bne=yIe});function Gw(t,e,r,n,i,a){var s,l=e&vIe,u=e&xIe,h=e&bIe;if(r&&(s=i?r(t,n,i,a):r(t)),s!==void 0)return s;if(!Sn(t))return t;var f=Bt(t);if(f){if(s=ene(t),!l)return xT(t,s)}else{var d=ho(t),p=d==kne||d==SIe;if(Dl(t))return gT(t,l);if(d==Ene||d==wne||p&&!i){if(s=u||p?{}:wT(t),!l)return u?qre(t,zre(s,t)):Ure(t,Fre(s,t))}else{if(!Mn[d])return i?t:{};s=une(t,d,l)}}a||(a=new dc);var m=a.get(t);if(m)return m;a.set(t,s),bne(t)?t.forEach(function(v){s.add(Gw(v,e,r,v,t,a))}):mne(t)&&t.forEach(function(v,x){s.set(x,Gw(v,e,r,x,t,a))});var g=h?u?Fw:z2:u?Rs:qr,y=f?void 0:g(t);return kw(y||t,function(v,x){y&&(x=v,v=t[x]),gc(s,x,Gw(v,e,r,x,t,a))}),s}var vIe,xIe,bIe,wne,TIe,wIe,kIe,EIe,kne,SIe,CIe,AIe,Ene,_Ie,DIe,LIe,RIe,NIe,MIe,IIe,OIe,PIe,BIe,FIe,$Ie,zIe,GIe,VIe,UIe,Mn,Vw,uR=M(()=>{"use strict";u2();J9();ym();$re();Gre();TL();EL();Hre();Wre();oR();lR();ip();tne();hne();CL();Yn();gm();gne();oo();Tne();Sc();qh();vIe=1,xIe=2,bIe=4,wne="[object Arguments]",TIe="[object Array]",wIe="[object Boolean]",kIe="[object Date]",EIe="[object Error]",kne="[object Function]",SIe="[object GeneratorFunction]",CIe="[object Map]",AIe="[object Number]",Ene="[object Object]",_Ie="[object RegExp]",DIe="[object Set]",LIe="[object String]",RIe="[object Symbol]",NIe="[object WeakMap]",MIe="[object ArrayBuffer]",IIe="[object DataView]",OIe="[object Float32Array]",PIe="[object Float64Array]",BIe="[object Int8Array]",FIe="[object Int16Array]",$Ie="[object Int32Array]",zIe="[object Uint8Array]",GIe="[object Uint8ClampedArray]",VIe="[object Uint16Array]",UIe="[object Uint32Array]",Mn={};Mn[wne]=Mn[TIe]=Mn[MIe]=Mn[IIe]=Mn[wIe]=Mn[kIe]=Mn[OIe]=Mn[PIe]=Mn[BIe]=Mn[FIe]=Mn[$Ie]=Mn[CIe]=Mn[AIe]=Mn[Ene]=Mn[_Ie]=Mn[DIe]=Mn[LIe]=Mn[RIe]=Mn[zIe]=Mn[GIe]=Mn[VIe]=Mn[UIe]=!0;Mn[EIe]=Mn[kne]=Mn[NIe]=!1;o(Gw,"baseClone");Vw=Gw});function qIe(t){return Vw(t,HIe)}var HIe,ln,hR=M(()=>{"use strict";uR();HIe=4;o(qIe,"clone");ln=qIe});function XIe(t){return Vw(t,WIe|YIe)}var WIe,YIe,fR,Sne=M(()=>{"use strict";uR();WIe=1,YIe=4;o(XIe,"cloneDeep");fR=XIe});function jIe(t){for(var e=-1,r=t==null?0:t.length,n=0,i=[];++e{"use strict";o(jIe,"compact");_c=jIe});function QIe(t){return this.__data__.set(t,KIe),this}var KIe,Ane,_ne=M(()=>{"use strict";KIe="__lodash_hash_undefined__";o(QIe,"setCacheAdd");Ane=QIe});function ZIe(t){return this.__data__.has(t)}var Dne,Lne=M(()=>{"use strict";o(ZIe,"setCacheHas");Dne=ZIe});function Uw(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new Gd;++e{"use strict";pT();_ne();Lne();o(Uw,"SetCache");Uw.prototype.add=Uw.prototype.push=Ane;Uw.prototype.has=Dne;Bm=Uw});function JIe(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(JIe,"arraySome");qw=JIe});function eOe(t,e){return t.has(e)}var Fm,Ww=M(()=>{"use strict";o(eOe,"cacheHas");Fm=eOe});function nOe(t,e,r,n,i,a){var s=r&tOe,l=t.length,u=e.length;if(l!=u&&!(s&&u>l))return!1;var h=a.get(t),f=a.get(e);if(h&&f)return h==e&&f==t;var d=-1,p=!0,m=r&rOe?new Bm:void 0;for(a.set(t,e),a.set(e,t);++d{"use strict";Hw();dR();Ww();tOe=1,rOe=2;o(nOe,"equalArrays");Yw=nOe});function iOe(t){var e=-1,r=Array(t.size);return t.forEach(function(n,i){r[++e]=[i,n]}),r}var Rne,Nne=M(()=>{"use strict";o(iOe,"mapToArray");Rne=iOe});function aOe(t){var e=-1,r=Array(t.size);return t.forEach(function(n){r[++e]=n}),r}var $m,Xw=M(()=>{"use strict";o(aOe,"setToArray");$m=aOe});function xOe(t,e,r,n,i,a,s){switch(r){case vOe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case yOe:return!(t.byteLength!=e.byteLength||!a(new um(t),new um(e)));case lOe:case cOe:case fOe:return Io(+t,+e);case uOe:return t.name==e.name&&t.message==e.message;case dOe:case mOe:return t==e+"";case hOe:var l=Rne;case pOe:var u=n&sOe;if(l||(l=$m),t.size!=e.size&&!u)return!1;var h=s.get(t);if(h)return h==e;n|=oOe,s.set(t,e);var f=Yw(l(t),l(e),n,i,a,s);return s.delete(t),f;case gOe:if(mR)return mR.call(t)==mR.call(e)}return!1}var sOe,oOe,lOe,cOe,uOe,hOe,fOe,dOe,pOe,mOe,gOe,yOe,vOe,Mne,mR,Ine,One=M(()=>{"use strict";$d();wL();zd();pR();Nne();Xw();sOe=1,oOe=2,lOe="[object Boolean]",cOe="[object Date]",uOe="[object Error]",hOe="[object Map]",fOe="[object Number]",dOe="[object RegExp]",pOe="[object Set]",mOe="[object String]",gOe="[object Symbol]",yOe="[object ArrayBuffer]",vOe="[object DataView]",Mne=Ki?Ki.prototype:void 0,mR=Mne?Mne.valueOf:void 0;o(xOe,"equalByTag");Ine=xOe});function kOe(t,e,r,n,i,a){var s=r&bOe,l=z2(t),u=l.length,h=z2(e),f=h.length;if(u!=f&&!s)return!1;for(var d=u;d--;){var p=l[d];if(!(s?p in e:wOe.call(e,p)))return!1}var m=a.get(t),g=a.get(e);if(m&&g)return m==e&&g==t;var y=!0;a.set(t,e),a.set(e,t);for(var v=s;++d{"use strict";oR();bOe=1,TOe=Object.prototype,wOe=TOe.hasOwnProperty;o(kOe,"equalObjects");Pne=kOe});function COe(t,e,r,n,i,a){var s=Bt(t),l=Bt(e),u=s?$ne:ho(t),h=l?$ne:ho(e);u=u==Fne?jw:u,h=h==Fne?jw:h;var f=u==jw,d=h==jw,p=u==h;if(p&&Dl(t)){if(!Dl(e))return!1;s=!0,f=!1}if(p&&!f)return a||(a=new dc),s||Uh(t)?Yw(t,e,r,n,i,a):Ine(t,e,u,r,n,i,a);if(!(r&EOe)){var m=f&&zne.call(t,"__wrapped__"),g=d&&zne.call(e,"__wrapped__");if(m||g){var y=m?t.value():t,v=g?e.value():e;return a||(a=new dc),i(y,v,r,n,a)}}return p?(a||(a=new dc),Pne(t,e,r,n,i,a)):!1}var EOe,Fne,$ne,jw,SOe,zne,Gne,Vne=M(()=>{"use strict";u2();pR();One();Bne();ip();Yn();gm();p2();EOe=1,Fne="[object Arguments]",$ne="[object Array]",jw="[object Object]",SOe=Object.prototype,zne=SOe.hasOwnProperty;o(COe,"baseIsEqualDeep");Gne=COe});function Une(t,e,r,n,i){return t===e?!0:t==null||e==null||!ai(t)&&!ai(e)?t!==t&&e!==e:Gne(t,e,r,n,Une,i)}var Kw,gR=M(()=>{"use strict";Vne();Oo();o(Une,"baseIsEqual");Kw=Une});function DOe(t,e,r,n){var i=r.length,a=i,s=!n;if(t==null)return!a;for(t=Object(t);i--;){var l=r[i];if(s&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++i{"use strict";u2();gR();AOe=1,_Oe=2;o(DOe,"baseIsMatch");Hne=DOe});function LOe(t){return t===t&&!Sn(t)}var Qw,yR=M(()=>{"use strict";oo();o(LOe,"isStrictComparable");Qw=LOe});function ROe(t){for(var e=qr(t),r=e.length;r--;){var n=e[r],i=t[n];e[r]=[n,i,Qw(i)]}return e}var Wne,Yne=M(()=>{"use strict";yR();Sc();o(ROe,"getMatchData");Wne=ROe});function NOe(t,e){return function(r){return r==null?!1:r[t]===e&&(e!==void 0||t in Object(r))}}var Zw,vR=M(()=>{"use strict";o(NOe,"matchesStrictComparable");Zw=NOe});function MOe(t){var e=Wne(t);return e.length==1&&e[0][2]?Zw(e[0][0],e[0][1]):function(r){return r===t||Hne(r,t,e)}}var Xne,jne=M(()=>{"use strict";qne();Yne();vR();o(MOe,"baseMatches");Xne=MOe});function IOe(t,e){return t!=null&&e in Object(t)}var Kne,Qne=M(()=>{"use strict";o(IOe,"baseHasIn");Kne=IOe});function OOe(t,e,r){e=rf(e,t);for(var n=-1,i=e.length,a=!1;++n{"use strict";F2();pm();Yn();g2();kT();Nm();o(OOe,"hasPath");Jw=OOe});function POe(t,e){return t!=null&&Jw(t,e,Kne)}var ek,bR=M(()=>{"use strict";Qne();xR();o(POe,"hasIn");ek=POe});function $Oe(t,e){return Rm(t)&&Qw(e)?Zw(Cc(t),e):function(r){var n=Cre(r,t);return n===void 0&&n===e?ek(r,t):Kw(e,n,BOe|FOe)}}var BOe,FOe,Zne,Jne=M(()=>{"use strict";gR();Are();bR();_w();yR();vR();Nm();BOe=1,FOe=2;o($Oe,"baseMatchesProperty");Zne=$Oe});function zOe(t){return function(e){return e?.[t]}}var tk,TR=M(()=>{"use strict";o(zOe,"baseProperty");tk=zOe});function GOe(t){return function(e){return nf(e,t)}}var eie,tie=M(()=>{"use strict";$2();o(GOe,"basePropertyDeep");eie=GOe});function VOe(t){return Rm(t)?tk(Cc(t)):eie(t)}var rie,nie=M(()=>{"use strict";TR();tie();_w();Nm();o(VOe,"property");rie=VOe});function UOe(t){return typeof t=="function"?t:t==null?Qi:typeof t=="object"?Bt(t)?Zne(t[0],t[1]):Xne(t):rie(t)}var vn,ss=M(()=>{"use strict";jne();Jne();Ru();Yn();nie();o(UOe,"baseIteratee");vn=UOe});function HOe(t,e,r,n){for(var i=-1,a=t==null?0:t.length;++i{"use strict";o(HOe,"arrayAggregator");iie=HOe});function qOe(t,e){return t&&cm(t,e,qr)}var zm,rk=M(()=>{"use strict";mT();Sc();o(qOe,"baseForOwn");zm=qOe});function WOe(t,e){return function(r,n){if(r==null)return r;if(!fi(r))return t(r,n);for(var i=r.length,a=e?i:-1,s=Object(r);(e?a--:++a{"use strict";Po();o(WOe,"createBaseEach");sie=WOe});var YOe,zs,sf=M(()=>{"use strict";rk();oie();YOe=sie(zm),zs=YOe});function XOe(t,e,r,n){return zs(t,function(i,a,s){e(n,i,r(i),s)}),n}var lie,cie=M(()=>{"use strict";sf();o(XOe,"baseAggregator");lie=XOe});function jOe(t,e){return function(r,n){var i=Bt(r)?iie:lie,a=e?e():{};return i(r,t,vn(n,2),a)}}var uie,hie=M(()=>{"use strict";aie();cie();ss();Yn();o(jOe,"createAggregator");uie=jOe});var KOe,nk,fie=M(()=>{"use strict";Mo();KOe=o(function(){return hi.Date.now()},"now"),nk=KOe});var die,QOe,ZOe,of,pie=M(()=>{"use strict";vm();zd();qd();qh();die=Object.prototype,QOe=die.hasOwnProperty,ZOe=yc(function(t,e){t=Object(t);var r=-1,n=e.length,i=n>2?e[2]:void 0;for(i&&lo(e[0],e[1],i)&&(n=1);++r{"use strict";o(JOe,"arrayIncludesWith");ik=JOe});function tPe(t,e,r,n){var i=-1,a=Cw,s=!0,l=t.length,u=[],h=e.length;if(!l)return u;r&&(e=$s(e,Bo(r))),n?(a=ik,s=!1):e.length>=ePe&&(a=Fm,s=!1,e=new Bm(e));e:for(;++i{"use strict";Hw();tR();wR();rp();Ud();Ww();ePe=200;o(tPe,"baseDifference");mie=tPe});var rPe,lf,yie=M(()=>{"use strict";gie();Im();vm();ET();rPe=yc(function(t,e){return Vd(t)?mie(t,Ac(e,1,Vd,!0)):[]}),lf=rPe});function nPe(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var ga,vie=M(()=>{"use strict";o(nPe,"last");ga=nPe});function iPe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:Ec(e),Nw(t,e<0?0:e,n)):[]}var yi,xie=M(()=>{"use strict";nR();_m();o(iPe,"drop");yi=iPe});function aPe(t,e,r){var n=t==null?0:t.length;return n?(e=r||e===void 0?1:Ec(e),e=n-e,Nw(t,0,e<0?0:e)):[]}var Bu,bie=M(()=>{"use strict";nR();_m();o(aPe,"dropRight");Bu=aPe});function sPe(t){return typeof t=="function"?t:Qi}var Gm,ak=M(()=>{"use strict";Ru();o(sPe,"castFunction");Gm=sPe});function oPe(t,e){var r=Bt(t)?kw:zs;return r(t,Gm(e))}var Ae,sk=M(()=>{"use strict";J9();sf();ak();Yn();o(oPe,"forEach");Ae=oPe});var Tie=M(()=>{"use strict";sk()});function lPe(t,e){for(var r=-1,n=t==null?0:t.length;++r{"use strict";o(lPe,"arrayEvery");wie=lPe});function cPe(t,e){var r=!0;return zs(t,function(n,i,a){return r=!!e(n,i,a),r}),r}var Eie,Sie=M(()=>{"use strict";sf();o(cPe,"baseEvery");Eie=cPe});function uPe(t,e,r){var n=Bt(t)?wie:Eie;return r&&lo(t,e,r)&&(e=void 0),n(t,vn(e,3))}var Ba,Cie=M(()=>{"use strict";kie();Sie();ss();Yn();qd();o(uPe,"every");Ba=uPe});function hPe(t,e){var r=[];return zs(t,function(n,i,a){e(n,i,a)&&r.push(n)}),r}var ok,kR=M(()=>{"use strict";sf();o(hPe,"baseFilter");ok=hPe});function fPe(t,e){var r=Bt(t)?Om:ok;return r(t,vn(e,3))}var Zr,ER=M(()=>{"use strict";Mw();kR();ss();Yn();o(fPe,"filter");Zr=fPe});function dPe(t){return function(e,r,n){var i=Object(e);if(!fi(e)){var a=vn(r,3);e=qr(e),r=o(function(l){return a(i[l],l,i)},"predicate")}var s=t(e,r,n);return s>-1?i[a?e[s]:s]:void 0}}var Aie,_ie=M(()=>{"use strict";ss();Po();Sc();o(dPe,"createFind");Aie=dPe});function mPe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:Ec(r);return i<0&&(i=pPe(n+i,0)),Ew(t,vn(e,3),i)}var pPe,Die,Lie=M(()=>{"use strict";eR();ss();_m();pPe=Math.max;o(mPe,"findIndex");Die=mPe});var gPe,os,Rie=M(()=>{"use strict";_ie();Lie();gPe=Aie(Die),os=gPe});function yPe(t){return t&&t.length?t[0]:void 0}var ea,Nie=M(()=>{"use strict";o(yPe,"head");ea=yPe});var Mie=M(()=>{"use strict";Nie()});function vPe(t,e){var r=-1,n=fi(t)?Array(t.length):[];return zs(t,function(i,a,s){n[++r]=e(i,a,s)}),n}var lk,SR=M(()=>{"use strict";sf();Po();o(vPe,"baseMap");lk=vPe});function xPe(t,e){var r=Bt(t)?$s:lk;return r(t,vn(e,3))}var rt,Vm=M(()=>{"use strict";rp();ss();SR();Yn();o(xPe,"map");rt=xPe});function bPe(t,e){return Ac(rt(t,e),1)}var ya,CR=M(()=>{"use strict";Im();Vm();o(bPe,"flatMap");ya=bPe});function TPe(t,e){return t==null?t:cm(t,Gm(e),Rs)}var AR,Iie=M(()=>{"use strict";mT();ak();qh();o(TPe,"forIn");AR=TPe});function wPe(t,e){return t&&zm(t,Gm(e))}var _R,Oie=M(()=>{"use strict";rk();ak();o(wPe,"forOwn");_R=wPe});var kPe,EPe,SPe,DR,Pie=M(()=>{"use strict";lm();hie();kPe=Object.prototype,EPe=kPe.hasOwnProperty,SPe=uie(function(t,e,r){EPe.call(t,r)?t[r].push(e):pc(t,r,[e])}),DR=SPe});function CPe(t,e){return t>e}var Bie,Fie=M(()=>{"use strict";o(CPe,"baseGt");Bie=CPe});function DPe(t,e){return t!=null&&_Pe.call(t,e)}var APe,_Pe,$ie,zie=M(()=>{"use strict";APe=Object.prototype,_Pe=APe.hasOwnProperty;o(DPe,"baseHas");$ie=DPe});function LPe(t,e){return t!=null&&Jw(t,e,$ie)}var Ft,Gie=M(()=>{"use strict";zie();xR();o(LPe,"has");Ft=LPe});function NPe(t){return typeof t=="string"||!Bt(t)&&ai(t)&&fa(t)==RPe}var RPe,xi,ck=M(()=>{"use strict";_u();Yn();Oo();RPe="[object String]";o(NPe,"isString");xi=NPe});function MPe(t,e){return $s(e,function(r){return t[r]})}var Vie,Uie=M(()=>{"use strict";rp();o(MPe,"baseValues");Vie=MPe});function IPe(t){return t==null?[]:Vie(t,qr(t))}var kr,LR=M(()=>{"use strict";Uie();Sc();o(IPe,"values");kr=IPe});function PPe(t,e,r,n){t=fi(t)?t:kr(t),r=r&&!n?Ec(r):0;var i=t.length;return r<0&&(r=OPe(i+r,0)),xi(t)?r<=i&&t.indexOf(e,r)>-1:!!i&&Dm(t,e,r)>-1}var OPe,jn,Hie=M(()=>{"use strict";Sw();Po();ck();_m();LR();OPe=Math.max;o(PPe,"includes");jn=PPe});function FPe(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var i=r==null?0:Ec(r);return i<0&&(i=BPe(n+i,0)),Dm(t,e,i)}var BPe,uk,qie=M(()=>{"use strict";Sw();_m();BPe=Math.max;o(FPe,"indexOf");uk=FPe});function UPe(t){if(t==null)return!0;if(fi(t)&&(Bt(t)||typeof t=="string"||typeof t.splice=="function"||Dl(t)||Uh(t)||_l(t)))return!t.length;var e=ho(t);if(e==$Pe||e==zPe)return!t.size;if(mc(t))return!Lm(t).length;for(var r in t)if(VPe.call(t,r))return!1;return!0}var $Pe,zPe,GPe,VPe,mr,hk=M(()=>{"use strict";Aw();ip();pm();Yn();Po();gm();dm();p2();$Pe="[object Map]",zPe="[object Set]",GPe=Object.prototype,VPe=GPe.hasOwnProperty;o(UPe,"isEmpty");mr=UPe});function qPe(t){return ai(t)&&fa(t)==HPe}var HPe,Wie,Yie=M(()=>{"use strict";_u();Oo();HPe="[object RegExp]";o(qPe,"baseIsRegExp");Wie=qPe});var Xie,WPe,Uo,jie=M(()=>{"use strict";Yie();Ud();d2();Xie=Fo&&Fo.isRegExp,WPe=Xie?Bo(Xie):Wie,Uo=WPe});function YPe(t){return t===void 0}var xr,Kie=M(()=>{"use strict";o(YPe,"isUndefined");xr=YPe});function XPe(t,e){return t{"use strict";o(XPe,"baseLt");fk=XPe});function jPe(t,e){var r={};return e=vn(e,3),zm(t,function(n,i,a){pc(r,i,e(n,i,a))}),r}var ap,Qie=M(()=>{"use strict";lm();rk();ss();o(jPe,"mapValues");ap=jPe});function KPe(t,e,r){for(var n=-1,i=t.length;++n{"use strict";tp();o(KPe,"baseExtremum");Um=KPe});function QPe(t){return t&&t.length?Um(t,Qi,Bie):void 0}var Gs,Zie=M(()=>{"use strict";dk();Fie();Ru();o(QPe,"max");Gs=QPe});function ZPe(t){return t&&t.length?Um(t,Qi,fk):void 0}var Rl,NR=M(()=>{"use strict";dk();RR();Ru();o(ZPe,"min");Rl=ZPe});function JPe(t,e){return t&&t.length?Um(t,vn(e,2),fk):void 0}var sp,Jie=M(()=>{"use strict";dk();ss();RR();o(JPe,"minBy");sp=JPe});function tBe(t){if(typeof t!="function")throw new TypeError(eBe);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}var eBe,eae,tae=M(()=>{"use strict";eBe="Expected a function";o(tBe,"negate");eae=tBe});function rBe(t,e,r,n){if(!Sn(t))return t;e=rf(e,t);for(var i=-1,a=e.length,s=a-1,l=t;l!=null&&++i{"use strict";ym();F2();g2();oo();Nm();o(rBe,"baseSet");rae=rBe});function nBe(t,e,r){for(var n=-1,i=e.length,a={};++n{"use strict";$2();nae();F2();o(nBe,"basePickBy");pk=nBe});function iBe(t,e){if(t==null)return{};var r=$s(Fw(t),function(n){return[n]});return e=vn(e),pk(t,r,function(n,i){return e(n,i[0])})}var Vs,iae=M(()=>{"use strict";rp();ss();MR();lR();o(iBe,"pickBy");Vs=iBe});function aBe(t,e){var r=t.length;for(t.sort(e);r--;)t[r]=t[r].value;return t}var aae,sae=M(()=>{"use strict";o(aBe,"baseSortBy");aae=aBe});function sBe(t,e){if(t!==e){var r=t!==void 0,n=t===null,i=t===t,a=uo(t),s=e!==void 0,l=e===null,u=e===e,h=uo(e);if(!l&&!h&&!a&&t>e||a&&s&&u&&!l&&!h||n&&s&&u||!r&&u||!i)return 1;if(!n&&!a&&!h&&t{"use strict";tp();o(sBe,"compareAscending");oae=sBe});function oBe(t,e,r){for(var n=-1,i=t.criteria,a=e.criteria,s=i.length,l=r.length;++n=l)return u;var h=r[n];return u*(h=="desc"?-1:1)}}return t.index-e.index}var cae,uae=M(()=>{"use strict";lae();o(oBe,"compareMultiple");cae=oBe});function lBe(t,e,r){e.length?e=$s(e,function(a){return Bt(a)?function(s){return nf(s,a.length===1?a[0]:a)}:a}):e=[Qi];var n=-1;e=$s(e,Bo(vn));var i=lk(t,function(a,s,l){var u=$s(e,function(h){return h(a)});return{criteria:u,index:++n,value:a}});return aae(i,function(a,s){return cae(a,s,r)})}var hae,fae=M(()=>{"use strict";rp();$2();ss();SR();sae();Ud();uae();Ru();Yn();o(lBe,"baseOrderBy");hae=lBe});var cBe,dae,pae=M(()=>{"use strict";TR();cBe=tk("length"),dae=cBe});function TBe(t){for(var e=mae.lastIndex=0;mae.test(t);)++e;return e}var gae,uBe,hBe,fBe,dBe,pBe,mBe,IR,OR,gBe,yae,vae,xae,yBe,bae,Tae,vBe,xBe,bBe,mae,wae,kae=M(()=>{"use strict";gae="\\ud800-\\udfff",uBe="\\u0300-\\u036f",hBe="\\ufe20-\\ufe2f",fBe="\\u20d0-\\u20ff",dBe=uBe+hBe+fBe,pBe="\\ufe0e\\ufe0f",mBe="["+gae+"]",IR="["+dBe+"]",OR="\\ud83c[\\udffb-\\udfff]",gBe="(?:"+IR+"|"+OR+")",yae="[^"+gae+"]",vae="(?:\\ud83c[\\udde6-\\uddff]){2}",xae="[\\ud800-\\udbff][\\udc00-\\udfff]",yBe="\\u200d",bae=gBe+"?",Tae="["+pBe+"]?",vBe="(?:"+yBe+"(?:"+[yae,vae,xae].join("|")+")"+Tae+bae+")*",xBe=Tae+bae+vBe,bBe="(?:"+[yae+IR+"?",IR,vae,xae,mBe].join("|")+")",mae=RegExp(OR+"(?="+OR+")|"+bBe+xBe,"g");o(TBe,"unicodeSize");wae=TBe});function wBe(t){return Ire(t)?wae(t):dae(t)}var Eae,Sae=M(()=>{"use strict";pae();Ore();kae();o(wBe,"stringSize");Eae=wBe});function kBe(t,e){return pk(t,e,function(r,n){return ek(t,n)})}var Cae,Aae=M(()=>{"use strict";MR();bR();o(kBe,"basePick");Cae=kBe});var EBe,op,_ae=M(()=>{"use strict";Aae();Mre();EBe=Nre(function(t,e){return t==null?{}:Cae(t,e)}),op=EBe});function ABe(t,e,r,n){for(var i=-1,a=CBe(SBe((e-t)/(r||1)),0),s=Array(a);a--;)s[n?a:++i]=t,t+=r;return s}var SBe,CBe,Dae,Lae=M(()=>{"use strict";SBe=Math.ceil,CBe=Math.max;o(ABe,"baseRange");Dae=ABe});function _Be(t){return function(e,r,n){return n&&typeof n!="number"&&lo(e,r,n)&&(r=n=void 0),e=Am(e),r===void 0?(r=e,e=0):r=Am(r),n=n===void 0?e{"use strict";Lae();qd();Q9();o(_Be,"createRange");Rae=_Be});var DBe,Ho,Mae=M(()=>{"use strict";Nae();DBe=Rae(),Ho=DBe});function LBe(t,e,r,n,i){return i(t,function(a,s,l){r=n?(n=!1,a):e(r,a,s,l)}),r}var Iae,Oae=M(()=>{"use strict";o(LBe,"baseReduce");Iae=LBe});function RBe(t,e,r){var n=Bt(t)?Pre:Iae,i=arguments.length<3;return n(t,vn(e,4),r,i,zs)}var Jr,PR=M(()=>{"use strict";Bre();sf();ss();Oae();Yn();o(RBe,"reduce");Jr=RBe});function NBe(t,e){var r=Bt(t)?Om:ok;return r(t,eae(vn(e,3)))}var cf,Pae=M(()=>{"use strict";Mw();kR();ss();Yn();tae();o(NBe,"reject");cf=NBe});function OBe(t){if(t==null)return 0;if(fi(t))return xi(t)?Eae(t):t.length;var e=ho(t);return e==MBe||e==IBe?t.size:Lm(t).length}var MBe,IBe,BR,Bae=M(()=>{"use strict";Aw();ip();Po();ck();Sae();MBe="[object Map]",IBe="[object Set]";o(OBe,"size");BR=OBe});function PBe(t,e){var r;return zs(t,function(n,i,a){return r=e(n,i,a),!r}),!!r}var Fae,$ae=M(()=>{"use strict";sf();o(PBe,"baseSome");Fae=PBe});function BBe(t,e,r){var n=Bt(t)?qw:Fae;return r&&lo(t,e,r)&&(e=void 0),n(t,vn(e,3))}var G2,zae=M(()=>{"use strict";dR();ss();$ae();Yn();qd();o(BBe,"some");G2=BBe});var FBe,Dc,Gae=M(()=>{"use strict";Im();fae();vm();qd();FBe=yc(function(t,e){if(t==null)return[];var r=e.length;return r>1&&lo(t,e[0],e[1])?e=[]:r>2&&lo(e[0],e[1],e[2])&&(e=[e[0]]),hae(t,Ac(e,1),[])}),Dc=FBe});var $Be,zBe,Vae,Uae=M(()=>{"use strict";cR();Z9();Xw();$Be=1/0,zBe=af&&1/$m(new af([,-0]))[1]==$Be?function(t){return new af(t)}:si,Vae=zBe});function VBe(t,e,r){var n=-1,i=Cw,a=t.length,s=!0,l=[],u=l;if(r)s=!1,i=ik;else if(a>=GBe){var h=e?null:Vae(t);if(h)return $m(h);s=!1,i=Fm,u=new Bm}else u=e?[]:l;e:for(;++n{"use strict";Hw();tR();wR();Ww();Uae();Xw();GBe=200;o(VBe,"baseUniq");Hm=VBe});var UBe,FR,Hae=M(()=>{"use strict";Im();vm();mk();ET();UBe=yc(function(t){return Hm(Ac(t,1,Vd,!0))}),FR=UBe});function HBe(t){return t&&t.length?Hm(t):[]}var qm,qae=M(()=>{"use strict";mk();o(HBe,"uniq");qm=HBe});function qBe(t,e){return t&&t.length?Hm(t,vn(e,2)):[]}var Wae,Yae=M(()=>{"use strict";ss();mk();o(qBe,"uniqBy");Wae=qBe});function YBe(t){var e=++WBe;return Dw(t)+e}var WBe,lp,Xae=M(()=>{"use strict";rR();WBe=0;o(YBe,"uniqueId");lp=YBe});function XBe(t,e,r){for(var n=-1,i=t.length,a=e.length,s={};++n{"use strict";o(XBe,"baseZipObject");jae=XBe});function jBe(t,e){return jae(t||[],e||[],gc)}var gk,Qae=M(()=>{"use strict";ym();Kae();o(jBe,"zipObject");gk=jBe});var Yt=M(()=>{"use strict";Tre();hR();Sne();Cne();NL();pie();yie();xie();bie();Tie();Cie();ER();Rie();Mie();CR();Rw();sk();Iie();Oie();Pie();Gie();Ru();Hie();qie();Yn();hk();a2();oo();jie();ck();Kie();Sc();vie();Vm();Qie();Zie();OL();NR();Jie();Z9();fie();_ae();iae();Mae();PR();Pae();Bae();zae();Gae();Hae();qae();Xae();LR();Qae();});function Jae(t,e){t[e]?t[e]++:t[e]=1}function ese(t,e){--t[e]||delete t[e]}function V2(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}return i+Zae+a+Zae+(xr(n)?KBe:n)}function QBe(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}var l={v:i,w:a};return n&&(l.name=n),l}function $R(t,e){return V2(t,e.v,e.w,e.name)}var KBe,cp,Zae,cn,yk=M(()=>{"use strict";Yt();KBe="\0",cp="\0",Zae="",cn=class{static{o(this,"Graph")}constructor(e={}){this._isDirected=Object.prototype.hasOwnProperty.call(e,"directed")?e.directed:!0,this._isMultigraph=Object.prototype.hasOwnProperty.call(e,"multigraph")?e.multigraph:!1,this._isCompound=Object.prototype.hasOwnProperty.call(e,"compound")?e.compound:!1,this._label=void 0,this._defaultNodeLabelFn=Ns(void 0),this._defaultEdgeLabelFn=Ns(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[cp]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return Si(e)||(e=Ns(e)),this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return qr(this._nodes)}sources(){var e=this;return Zr(this.nodes(),function(r){return mr(e._in[r])})}sinks(){var e=this;return Zr(this.nodes(),function(r){return mr(e._out[r])})}setNodes(e,r){var n=arguments,i=this;return Ae(e,function(a){n.length>1?i.setNode(a,r):i.setNode(a)}),this}setNode(e,r){return Object.prototype.hasOwnProperty.call(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=r),this):(this._nodes[e]=arguments.length>1?r:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=cp,this._children[e]={},this._children[cp][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return Object.prototype.hasOwnProperty.call(this._nodes,e)}removeNode(e){if(Object.prototype.hasOwnProperty.call(this._nodes,e)){var r=o(n=>this.removeEdge(this._edgeObjs[n]),"removeEdge");delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],Ae(this.children(e),n=>{this.setParent(n)}),delete this._children[e]),Ae(qr(this._in[e]),r),delete this._in[e],delete this._preds[e],Ae(qr(this._out[e]),r),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(xr(r))r=cp;else{r+="";for(var n=r;!xr(n);n=this.parent(n))if(n===e)throw new Error("Setting "+r+" as parent of "+e+" would create a cycle");this.setNode(r)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=r,this._children[r][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var r=this._parent[e];if(r!==cp)return r}}children(e){if(xr(e)&&(e=cp),this._isCompound){var r=this._children[e];if(r)return qr(r)}else{if(e===cp)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var r=this._preds[e];if(r)return qr(r)}successors(e){var r=this._sucs[e];if(r)return qr(r)}neighbors(e){var r=this.predecessors(e);if(r)return FR(r,this.successors(e))}isLeaf(e){var r;return this.isDirected()?r=this.successors(e):r=this.neighbors(e),r.length===0}filterNodes(e){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var n=this;Ae(this._nodes,function(s,l){e(l)&&r.setNode(l,s)}),Ae(this._edgeObjs,function(s){r.hasNode(s.v)&&r.hasNode(s.w)&&r.setEdge(s,n.edge(s))});var i={};function a(s){var l=n.parent(s);return l===void 0||r.hasNode(l)?(i[s]=l,l):l in i?i[l]:a(l)}return o(a,"findParent"),this._isCompound&&Ae(r.nodes(),function(s){r.setParent(s,a(s))}),r}setDefaultEdgeLabel(e){return Si(e)||(e=Ns(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return kr(this._edgeObjs)}setPath(e,r){var n=this,i=arguments;return Jr(e,function(a,s){return i.length>1?n.setEdge(a,s,r):n.setEdge(a,s),s}),this}setEdge(){var e,r,n,i,a=!1,s=arguments[0];typeof s=="object"&&s!==null&&"v"in s?(e=s.v,r=s.w,n=s.name,arguments.length===2&&(i=arguments[1],a=!0)):(e=s,r=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],a=!0)),e=""+e,r=""+r,xr(n)||(n=""+n);var l=V2(this._isDirected,e,r,n);if(Object.prototype.hasOwnProperty.call(this._edgeLabels,l))return a&&(this._edgeLabels[l]=i),this;if(!xr(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(r),this._edgeLabels[l]=a?i:this._defaultEdgeLabelFn(e,r,n);var u=QBe(this._isDirected,e,r,n);return e=u.v,r=u.w,Object.freeze(u),this._edgeObjs[l]=u,Jae(this._preds[r],e),Jae(this._sucs[e],r),this._in[r][l]=u,this._out[e][l]=u,this._edgeCount++,this}edge(e,r,n){var i=arguments.length===1?$R(this._isDirected,arguments[0]):V2(this._isDirected,e,r,n);return this._edgeLabels[i]}hasEdge(e,r,n){var i=arguments.length===1?$R(this._isDirected,arguments[0]):V2(this._isDirected,e,r,n);return Object.prototype.hasOwnProperty.call(this._edgeLabels,i)}removeEdge(e,r,n){var i=arguments.length===1?$R(this._isDirected,arguments[0]):V2(this._isDirected,e,r,n),a=this._edgeObjs[i];return a&&(e=a.v,r=a.w,delete this._edgeLabels[i],delete this._edgeObjs[i],ese(this._preds[r],e),ese(this._sucs[e],r),delete this._in[r][i],delete this._out[e][i],this._edgeCount--),this}inEdges(e,r){var n=this._in[e];if(n){var i=kr(n);return r?Zr(i,function(a){return a.v===r}):i}}outEdges(e,r){var n=this._out[e];if(n){var i=kr(n);return r?Zr(i,function(a){return a.w===r}):i}}nodeEdges(e,r){var n=this.inEdges(e,r);if(n)return n.concat(this.outEdges(e,r))}};cn.prototype._nodeCount=0;cn.prototype._edgeCount=0;o(Jae,"incrementOrInitEntry");o(ese,"decrementOrRemoveEntry");o(V2,"edgeArgsToId");o(QBe,"edgeArgsToObj");o($R,"edgeObjToId")});var qo=M(()=>{"use strict";yk()});function tse(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function ZBe(t,e){if(t!=="_next"&&t!=="_prev")return e}var xk,rse=M(()=>{"use strict";xk=class{static{o(this,"List")}constructor(){var e={};e._next=e._prev=e,this._sentinel=e}dequeue(){var e=this._sentinel,r=e._prev;if(r!==e)return tse(r),r}enqueue(e){var r=this._sentinel;e._prev&&e._next&&tse(e),e._next=r._next,r._next._prev=e,r._next=e,e._prev=r}toString(){for(var e=[],r=this._sentinel,n=r._prev;n!==r;)e.push(JSON.stringify(n,ZBe)),n=n._prev;return"["+e.join(", ")+"]"}};o(tse,"unlink");o(ZBe,"filterOutLinks")});function nse(t,e){if(t.nodeCount()<=1)return[];var r=tFe(t,e||JBe),n=eFe(r.graph,r.buckets,r.zeroIdx);return Qr(rt(n,function(i){return t.outEdges(i.v,i.w)}))}function eFe(t,e,r){for(var n=[],i=e[e.length-1],a=e[0],s;t.nodeCount();){for(;s=a.dequeue();)zR(t,e,r,s);for(;s=i.dequeue();)zR(t,e,r,s);if(t.nodeCount()){for(var l=e.length-2;l>0;--l)if(s=e[l].dequeue(),s){n=n.concat(zR(t,e,r,s,!0));break}}}return n}function zR(t,e,r,n,i){var a=i?[]:void 0;return Ae(t.inEdges(n.v),function(s){var l=t.edge(s),u=t.node(s.v);i&&a.push({v:s.v,w:s.w}),u.out-=l,GR(e,r,u)}),Ae(t.outEdges(n.v),function(s){var l=t.edge(s),u=s.w,h=t.node(u);h.in-=l,GR(e,r,h)}),t.removeNode(n.v),a}function tFe(t,e){var r=new cn,n=0,i=0;Ae(t.nodes(),function(l){r.setNode(l,{v:l,in:0,out:0})}),Ae(t.edges(),function(l){var u=r.edge(l.v,l.w)||0,h=e(l),f=u+h;r.setEdge(l.v,l.w,f),i=Math.max(i,r.node(l.v).out+=h),n=Math.max(n,r.node(l.w).in+=h)});var a=Ho(i+n+3).map(function(){return new xk}),s=n+1;return Ae(r.nodes(),function(l){GR(a,s,r.node(l))}),{graph:r,buckets:a,zeroIdx:s}}function GR(t,e,r){r.out?r.in?t[r.out-r.in+e].enqueue(r):t[t.length-1].enqueue(r):t[0].enqueue(r)}var JBe,ise=M(()=>{"use strict";Yt();qo();rse();JBe=Ns(1);o(nse,"greedyFAS");o(eFe,"doGreedyFAS");o(zR,"removeNode");o(tFe,"buildState");o(GR,"assignBucket")});function ase(t){var e=t.graph().acyclicer==="greedy"?nse(t,r(t)):rFe(t);Ae(e,function(n){var i=t.edge(n);t.removeEdge(n),i.forwardName=n.name,i.reversed=!0,t.setEdge(n.w,n.v,i,lp("rev"))});function r(n){return function(i){return n.edge(i).weight}}o(r,"weightFn")}function rFe(t){var e=[],r={},n={};function i(a){Object.prototype.hasOwnProperty.call(n,a)||(n[a]=!0,r[a]=!0,Ae(t.outEdges(a),function(s){Object.prototype.hasOwnProperty.call(r,s.w)?e.push(s):i(s.w)}),delete r[a])}return o(i,"dfs"),Ae(t.nodes(),i),e}function sse(t){Ae(t.edges(),function(e){var r=t.edge(e);if(r.reversed){t.removeEdge(e);var n=r.forwardName;delete r.reversed,delete r.forwardName,t.setEdge(e.w,e.v,r,n)}})}var VR=M(()=>{"use strict";Yt();ise();o(ase,"run");o(rFe,"dfsFAS");o(sse,"undo")});function Lc(t,e,r,n){var i;do i=lp(n);while(t.hasNode(i));return r.dummy=e,t.setNode(i,r),i}function lse(t){var e=new cn().setGraph(t.graph());return Ae(t.nodes(),function(r){e.setNode(r,t.node(r))}),Ae(t.edges(),function(r){var n=e.edge(r.v,r.w)||{weight:0,minlen:1},i=t.edge(r);e.setEdge(r.v,r.w,{weight:n.weight+i.weight,minlen:Math.max(n.minlen,i.minlen)})}),e}function bk(t){var e=new cn({multigraph:t.isMultigraph()}).setGraph(t.graph());return Ae(t.nodes(),function(r){t.children(r).length||e.setNode(r,t.node(r))}),Ae(t.edges(),function(r){e.setEdge(r,t.edge(r))}),e}function UR(t,e){var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2;if(!i&&!a)throw new Error("Not possible to find intersection inside of the rectangle");var u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=l*i/a,h=l):(i<0&&(s=-s),u=s,h=s*a/i),{x:r+u,y:n+h}}function uf(t){var e=rt(Ho(qR(t)+1),function(){return[]});return Ae(t.nodes(),function(r){var n=t.node(r),i=n.rank;xr(i)||(e[i][n.order]=r)}),e}function cse(t){var e=Rl(rt(t.nodes(),function(r){return t.node(r).rank}));Ae(t.nodes(),function(r){var n=t.node(r);Ft(n,"rank")&&(n.rank-=e)})}function use(t){var e=Rl(rt(t.nodes(),function(a){return t.node(a).rank})),r=[];Ae(t.nodes(),function(a){var s=t.node(a).rank-e;r[s]||(r[s]=[]),r[s].push(a)});var n=0,i=t.graph().nodeRankFactor;Ae(r,function(a,s){xr(a)&&s%i!==0?--n:n&&Ae(a,function(l){t.node(l).rank+=n})})}function HR(t,e,r,n){var i={width:0,height:0};return arguments.length>=4&&(i.rank=r,i.order=n),Lc(t,"border",i,e)}function qR(t){return Gs(rt(t.nodes(),function(e){var r=t.node(e).rank;if(!xr(r))return r}))}function hse(t,e){var r={lhs:[],rhs:[]};return Ae(t,function(n){e(n)?r.lhs.push(n):r.rhs.push(n)}),r}function fse(t,e){var r=nk();try{return e()}finally{console.log(t+" time: "+(nk()-r)+"ms")}}function dse(t,e){return e()}var Rc=M(()=>{"use strict";Yt();qo();o(Lc,"addDummyNode");o(lse,"simplify");o(bk,"asNonCompoundGraph");o(UR,"intersectRect");o(uf,"buildLayerMatrix");o(cse,"normalizeRanks");o(use,"removeEmptyRanks");o(HR,"addBorderNode");o(qR,"maxRank");o(hse,"partition");o(fse,"time");o(dse,"notime")});function mse(t){function e(r){var n=t.children(r),i=t.node(r);if(n.length&&Ae(n,e),Object.prototype.hasOwnProperty.call(i,"minRank")){i.borderLeft=[],i.borderRight=[];for(var a=i.minRank,s=i.maxRank+1;a{"use strict";Yt();Rc();o(mse,"addBorderSegments");o(pse,"addBorderNode")});function vse(t){var e=t.graph().rankdir.toLowerCase();(e==="lr"||e==="rl")&&bse(t)}function xse(t){var e=t.graph().rankdir.toLowerCase();(e==="bt"||e==="rl")&&nFe(t),(e==="lr"||e==="rl")&&(iFe(t),bse(t))}function bse(t){Ae(t.nodes(),function(e){yse(t.node(e))}),Ae(t.edges(),function(e){yse(t.edge(e))})}function yse(t){var e=t.width;t.width=t.height,t.height=e}function nFe(t){Ae(t.nodes(),function(e){WR(t.node(e))}),Ae(t.edges(),function(e){var r=t.edge(e);Ae(r.points,WR),Object.prototype.hasOwnProperty.call(r,"y")&&WR(r)})}function WR(t){t.y=-t.y}function iFe(t){Ae(t.nodes(),function(e){YR(t.node(e))}),Ae(t.edges(),function(e){var r=t.edge(e);Ae(r.points,YR),Object.prototype.hasOwnProperty.call(r,"x")&&YR(r)})}function YR(t){var e=t.x;t.x=t.y,t.y=e}var Tse=M(()=>{"use strict";Yt();o(vse,"adjust");o(xse,"undo");o(bse,"swapWidthHeight");o(yse,"swapWidthHeightOne");o(nFe,"reverseY");o(WR,"reverseYOne");o(iFe,"swapXY");o(YR,"swapXYOne")});function wse(t){t.graph().dummyChains=[],Ae(t.edges(),function(e){sFe(t,e)})}function sFe(t,e){var r=e.v,n=t.node(r).rank,i=e.w,a=t.node(i).rank,s=e.name,l=t.edge(e),u=l.labelRank;if(a!==n+1){t.removeEdge(e);var h=void 0,f,d;for(d=0,++n;n{"use strict";Yt();Rc();o(wse,"run");o(sFe,"normalizeEdge");o(kse,"undo")});function U2(t){var e={};function r(n){var i=t.node(n);if(Object.prototype.hasOwnProperty.call(e,n))return i.rank;e[n]=!0;var a=Rl(rt(t.outEdges(n),function(s){return r(s.w)-t.edge(s).minlen}));return(a===Number.POSITIVE_INFINITY||a===void 0||a===null)&&(a=0),i.rank=a}o(r,"dfs"),Ae(t.sources(),r)}function up(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}var Tk=M(()=>{"use strict";Yt();o(U2,"longestPath");o(up,"slack")});function wk(t){var e=new cn({directed:!1}),r=t.nodes()[0],n=t.nodeCount();e.setNode(r,{});for(var i,a;oFe(e,t){"use strict";Yt();qo();Tk();o(wk,"feasibleTree");o(oFe,"tightTree");o(lFe,"findMinSlackEdge");o(cFe,"shiftRanks")});var Sse=M(()=>{"use strict"});var KR=M(()=>{"use strict"});var pjt,QR=M(()=>{"use strict";Yt();KR();pjt=Ns(1)});var Cse=M(()=>{"use strict";QR()});var ZR=M(()=>{"use strict"});var Ase=M(()=>{"use strict";ZR()});var Sjt,_se=M(()=>{"use strict";Yt();Sjt=Ns(1)});function JR(t){var e={},r={},n=[];function i(a){if(Object.prototype.hasOwnProperty.call(r,a))throw new H2;Object.prototype.hasOwnProperty.call(e,a)||(r[a]=!0,e[a]=!0,Ae(t.predecessors(a),i),delete r[a],n.push(a))}if(o(i,"visit"),Ae(t.sinks(),i),BR(e)!==t.nodeCount())throw new H2;return n}function H2(){}var eN=M(()=>{"use strict";Yt();JR.CycleException=H2;o(JR,"topsort");o(H2,"CycleException");H2.prototype=new Error});var Dse=M(()=>{"use strict";eN()});function kk(t,e,r){Bt(e)||(e=[e]);var n=(t.isDirected()?t.successors:t.neighbors).bind(t),i=[],a={};return Ae(e,function(s){if(!t.hasNode(s))throw new Error("Graph does not have node: "+s);Lse(t,s,r==="post",a,n,i)}),i}function Lse(t,e,r,n,i,a){Object.prototype.hasOwnProperty.call(n,e)||(n[e]=!0,r||a.push(e),Ae(i(e),function(s){Lse(t,s,r,n,i,a)}),r&&a.push(e))}var tN=M(()=>{"use strict";Yt();o(kk,"dfs");o(Lse,"doDfs")});function rN(t,e){return kk(t,e,"post")}var Rse=M(()=>{"use strict";tN();o(rN,"postorder")});function nN(t,e){return kk(t,e,"pre")}var Nse=M(()=>{"use strict";tN();o(nN,"preorder")});var Mse=M(()=>{"use strict";KR();yk()});var Ise=M(()=>{"use strict";Sse();QR();Cse();Ase();_se();Dse();Rse();Nse();Mse();ZR();eN()});function ff(t){t=lse(t),U2(t);var e=wk(t);aN(e),iN(e,t);for(var r,n;r=Fse(e);)n=$se(e,t,r),zse(e,t,r,n)}function iN(t,e){var r=rN(t,t.nodes());r=r.slice(0,r.length-1),Ae(r,function(n){pFe(t,e,n)})}function pFe(t,e,r){var n=t.node(r),i=n.parent;t.edge(r,i).cutvalue=Pse(t,e,r)}function Pse(t,e,r){var n=t.node(r),i=n.parent,a=!0,s=e.edge(r,i),l=0;return s||(a=!1,s=e.edge(i,r)),l=s.weight,Ae(e.nodeEdges(r),function(u){var h=u.v===r,f=h?u.w:u.v;if(f!==i){var d=h===a,p=e.edge(u).weight;if(l+=d?p:-p,gFe(t,r,f)){var m=t.edge(r,f).cutvalue;l+=d?-m:m}}}),l}function aN(t,e){arguments.length<2&&(e=t.nodes()[0]),Bse(t,{},1,e)}function Bse(t,e,r,n,i){var a=r,s=t.node(n);return e[n]=!0,Ae(t.neighbors(n),function(l){Object.prototype.hasOwnProperty.call(e,l)||(r=Bse(t,e,r,l,n))}),s.low=a,s.lim=r++,i?s.parent=i:delete s.parent,r}function Fse(t){return os(t.edges(),function(e){return t.edge(e).cutvalue<0})}function $se(t,e,r){var n=r.v,i=r.w;e.hasEdge(n,i)||(n=r.w,i=r.v);var a=t.node(n),s=t.node(i),l=a,u=!1;a.lim>s.lim&&(l=s,u=!0);var h=Zr(e.edges(),function(f){return u===Ose(t,t.node(f.v),l)&&u!==Ose(t,t.node(f.w),l)});return sp(h,function(f){return up(e,f)})}function zse(t,e,r,n){var i=r.v,a=r.w;t.removeEdge(i,a),t.setEdge(n.v,n.w,{}),aN(t),iN(t,e),mFe(t,e)}function mFe(t,e){var r=os(t.nodes(),function(i){return!e.node(i).parent}),n=nN(t,r);n=n.slice(1),Ae(n,function(i){var a=t.node(i).parent,s=e.edge(i,a),l=!1;s||(s=e.edge(a,i),l=!0),e.node(i).rank=e.node(a).rank+(l?s.minlen:-s.minlen)})}function gFe(t,e,r){return t.hasEdge(e,r)}function Ose(t,e,r){return r.low<=e.lim&&e.lim<=r.lim}var Gse=M(()=>{"use strict";Yt();Ise();Rc();jR();Tk();ff.initLowLimValues=aN;ff.initCutValues=iN;ff.calcCutValue=Pse;ff.leaveEdge=Fse;ff.enterEdge=$se;ff.exchangeEdges=zse;o(ff,"networkSimplex");o(iN,"initCutValues");o(pFe,"assignCutValue");o(Pse,"calcCutValue");o(aN,"initLowLimValues");o(Bse,"dfsAssignLowLim");o(Fse,"leaveEdge");o($se,"enterEdge");o(zse,"exchangeEdges");o(mFe,"updateRanks");o(gFe,"isTreeEdge");o(Ose,"isDescendant")});function sN(t){switch(t.graph().ranker){case"network-simplex":Vse(t);break;case"tight-tree":vFe(t);break;case"longest-path":yFe(t);break;default:Vse(t)}}function vFe(t){U2(t),wk(t)}function Vse(t){ff(t)}var yFe,oN=M(()=>{"use strict";jR();Gse();Tk();o(sN,"rank");yFe=U2;o(vFe,"tightTreeRanker");o(Vse,"networkSimplexRanker")});function Use(t){var e=Lc(t,"root",{},"_root"),r=xFe(t),n=Gs(kr(r))-1,i=2*n+1;t.graph().nestingRoot=e,Ae(t.edges(),function(s){t.edge(s).minlen*=i});var a=bFe(t)+1;Ae(t.children(),function(s){Hse(t,e,i,a,n,r,s)}),t.graph().nodeRankFactor=i}function Hse(t,e,r,n,i,a,s){var l=t.children(s);if(!l.length){s!==e&&t.setEdge(e,s,{weight:0,minlen:r});return}var u=HR(t,"_bt"),h=HR(t,"_bb"),f=t.node(s);t.setParent(u,s),f.borderTop=u,t.setParent(h,s),f.borderBottom=h,Ae(l,function(d){Hse(t,e,r,n,i,a,d);var p=t.node(d),m=p.borderTop?p.borderTop:d,g=p.borderBottom?p.borderBottom:d,y=p.borderTop?n:2*n,v=m!==g?1:i-a[s]+1;t.setEdge(u,m,{weight:y,minlen:v,nestingEdge:!0}),t.setEdge(g,h,{weight:y,minlen:v,nestingEdge:!0})}),t.parent(s)||t.setEdge(e,u,{weight:0,minlen:i+a[s]})}function xFe(t){var e={};function r(n,i){var a=t.children(n);a&&a.length&&Ae(a,function(s){r(s,i+1)}),e[n]=i}return o(r,"dfs"),Ae(t.children(),function(n){r(n,1)}),e}function bFe(t){return Jr(t.edges(),function(e,r){return e+t.edge(r).weight},0)}function qse(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,Ae(t.edges(),function(r){var n=t.edge(r);n.nestingEdge&&t.removeEdge(r)})}var Wse=M(()=>{"use strict";Yt();Rc();o(Use,"run");o(Hse,"dfs");o(xFe,"treeDepths");o(bFe,"sumWeights");o(qse,"cleanup")});function Yse(t,e,r){var n={},i;Ae(r,function(a){for(var s=t.parent(a),l,u;s;){if(l=t.parent(s),l?(u=n[l],n[l]=s):(u=i,i=s),u&&u!==s){e.setEdge(u,s);return}s=l}})}var Xse=M(()=>{"use strict";Yt();o(Yse,"addSubgraphConstraints")});function jse(t,e,r){var n=wFe(t),i=new cn({compound:!0}).setGraph({root:n}).setDefaultNodeLabel(function(a){return t.node(a)});return Ae(t.nodes(),function(a){var s=t.node(a),l=t.parent(a);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(i.setNode(a),i.setParent(a,l||n),Ae(t[r](a),function(u){var h=u.v===a?u.w:u.v,f=i.edge(h,a),d=xr(f)?0:f.weight;i.setEdge(h,a,{weight:t.edge(u).weight+d})}),Object.prototype.hasOwnProperty.call(s,"minRank")&&i.setNode(a,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))}),i}function wFe(t){for(var e;t.hasNode(e=lp("_root")););return e}var Kse=M(()=>{"use strict";Yt();qo();o(jse,"buildLayerGraph");o(wFe,"createRootNode")});function Qse(t,e){for(var r=0,n=1;n0;)f%2&&(d+=l[f+1]),f=f-1>>1,l[f]+=h.weight;u+=h.weight*d})),u}var Zse=M(()=>{"use strict";Yt();o(Qse,"crossCount");o(kFe,"twoLayerCrossCount")});function Jse(t){var e={},r=Zr(t.nodes(),function(l){return!t.children(l).length}),n=Gs(rt(r,function(l){return t.node(l).rank})),i=rt(Ho(n+1),function(){return[]});function a(l){if(!Ft(e,l)){e[l]=!0;var u=t.node(l);i[u.rank].push(l),Ae(t.successors(l),a)}}o(a,"dfs");var s=Dc(r,function(l){return t.node(l).rank});return Ae(s,a),i}var eoe=M(()=>{"use strict";Yt();o(Jse,"initOrder")});function toe(t,e){return rt(e,function(r){var n=t.inEdges(r);if(n.length){var i=Jr(n,function(a,s){var l=t.edge(s),u=t.node(s.v);return{sum:a.sum+l.weight*u.order,weight:a.weight+l.weight}},{sum:0,weight:0});return{v:r,barycenter:i.sum/i.weight,weight:i.weight}}else return{v:r}})}var roe=M(()=>{"use strict";Yt();o(toe,"barycenter")});function noe(t,e){var r={};Ae(t,function(i,a){var s=r[i.v]={indegree:0,in:[],out:[],vs:[i.v],i:a};xr(i.barycenter)||(s.barycenter=i.barycenter,s.weight=i.weight)}),Ae(e.edges(),function(i){var a=r[i.v],s=r[i.w];!xr(a)&&!xr(s)&&(s.indegree++,a.out.push(r[i.w]))});var n=Zr(r,function(i){return!i.indegree});return EFe(n)}function EFe(t){var e=[];function r(a){return function(s){s.merged||(xr(s.barycenter)||xr(a.barycenter)||s.barycenter>=a.barycenter)&&SFe(a,s)}}o(r,"handleIn");function n(a){return function(s){s.in.push(a),--s.indegree===0&&t.push(s)}}for(o(n,"handleOut");t.length;){var i=t.pop();e.push(i),Ae(i.in.reverse(),r(i)),Ae(i.out,n(i))}return rt(Zr(e,function(a){return!a.merged}),function(a){return op(a,["vs","i","barycenter","weight"])})}function SFe(t,e){var r=0,n=0;t.weight&&(r+=t.barycenter*t.weight,n+=t.weight),e.weight&&(r+=e.barycenter*e.weight,n+=e.weight),t.vs=e.vs.concat(t.vs),t.barycenter=r/n,t.weight=n,t.i=Math.min(e.i,t.i),e.merged=!0}var ioe=M(()=>{"use strict";Yt();o(noe,"resolveConflicts");o(EFe,"doResolveConflicts");o(SFe,"mergeEntries")});function soe(t,e){var r=hse(t,function(f){return Object.prototype.hasOwnProperty.call(f,"barycenter")}),n=r.lhs,i=Dc(r.rhs,function(f){return-f.i}),a=[],s=0,l=0,u=0;n.sort(CFe(!!e)),u=aoe(a,i,u),Ae(n,function(f){u+=f.vs.length,a.push(f.vs),s+=f.barycenter*f.weight,l+=f.weight,u=aoe(a,i,u)});var h={vs:Qr(a)};return l&&(h.barycenter=s/l,h.weight=l),h}function aoe(t,e,r){for(var n;e.length&&(n=ga(e)).i<=r;)e.pop(),t.push(n.vs),r++;return r}function CFe(t){return function(e,r){return e.barycenterr.barycenter?1:t?r.i-e.i:e.i-r.i}}var ooe=M(()=>{"use strict";Yt();Rc();o(soe,"sort");o(aoe,"consumeUnsortable");o(CFe,"compareWithBias")});function lN(t,e,r,n){var i=t.children(e),a=t.node(e),s=a?a.borderLeft:void 0,l=a?a.borderRight:void 0,u={};s&&(i=Zr(i,function(g){return g!==s&&g!==l}));var h=toe(t,i);Ae(h,function(g){if(t.children(g.v).length){var y=lN(t,g.v,r,n);u[g.v]=y,Object.prototype.hasOwnProperty.call(y,"barycenter")&&_Fe(g,y)}});var f=noe(h,r);AFe(f,u);var d=soe(f,n);if(s&&(d.vs=Qr([s,d.vs,l]),t.predecessors(s).length)){var p=t.node(t.predecessors(s)[0]),m=t.node(t.predecessors(l)[0]);Object.prototype.hasOwnProperty.call(d,"barycenter")||(d.barycenter=0,d.weight=0),d.barycenter=(d.barycenter*d.weight+p.order+m.order)/(d.weight+2),d.weight+=2}return d}function AFe(t,e){Ae(t,function(r){r.vs=Qr(r.vs.map(function(n){return e[n]?e[n].vs:n}))})}function _Fe(t,e){xr(t.barycenter)?(t.barycenter=e.barycenter,t.weight=e.weight):(t.barycenter=(t.barycenter*t.weight+e.barycenter*e.weight)/(t.weight+e.weight),t.weight+=e.weight)}var loe=M(()=>{"use strict";Yt();roe();ioe();ooe();o(lN,"sortSubgraph");o(AFe,"expandSubgraphs");o(_Fe,"mergeBarycenters")});function hoe(t){var e=qR(t),r=coe(t,Ho(1,e+1),"inEdges"),n=coe(t,Ho(e-1,-1,-1),"outEdges"),i=Jse(t);uoe(t,i);for(var a=Number.POSITIVE_INFINITY,s,l=0,u=0;u<4;++l,++u){DFe(l%2?r:n,l%4>=2),i=uf(t);var h=Qse(t,i);h{"use strict";Yt();qo();Rc();Xse();Kse();Zse();eoe();loe();o(hoe,"order");o(coe,"buildLayerGraphs");o(DFe,"sweepLayerGraphs");o(uoe,"assignOrder")});function doe(t){var e=RFe(t);Ae(t.graph().dummyChains,function(r){for(var n=t.node(r),i=n.edgeObj,a=LFe(t,e,i.v,i.w),s=a.path,l=a.lca,u=0,h=s[u],f=!0;r!==i.w;){if(n=t.node(r),f){for(;(h=s[u])!==l&&t.node(h).maxRanks||l>e[u].lim));for(h=u,u=n;(u=t.parent(u))!==h;)a.push(u);return{path:i.concat(a.reverse()),lca:h}}function RFe(t){var e={},r=0;function n(i){var a=r;Ae(t.children(i),n),e[i]={low:a,lim:r++}}return o(n,"dfs"),Ae(t.children(),n),e}var poe=M(()=>{"use strict";Yt();o(doe,"parentDummyChains");o(LFe,"findPath");o(RFe,"postorder")});function NFe(t,e){var r={};function n(i,a){var s=0,l=0,u=i.length,h=ga(a);return Ae(a,function(f,d){var p=IFe(t,f),m=p?t.node(p).order:u;(p||f===h)&&(Ae(a.slice(l,d+1),function(g){Ae(t.predecessors(g),function(y){var v=t.node(y),x=v.order;(xh)&&moe(r,p,f)})})}o(n,"scan");function i(a,s){var l=-1,u,h=0;return Ae(s,function(f,d){if(t.node(f).dummy==="border"){var p=t.predecessors(f);p.length&&(u=t.node(p[0]).order,n(s,h,d,l,u),h=d,l=u)}n(s,h,s.length,u,a.length)}),s}return o(i,"visitLayer"),Jr(e,i),r}function IFe(t,e){if(t.node(e).dummy)return os(t.predecessors(e),function(r){return t.node(r).dummy})}function moe(t,e,r){if(e>r){var n=e;e=r,r=n}Object.prototype.hasOwnProperty.call(t,e)||Object.defineProperty(t,e,{enumerable:!0,configurable:!0,value:{},writable:!0});var i=t[e];Object.defineProperty(i,r,{enumerable:!0,configurable:!0,value:!0,writable:!0})}function OFe(t,e,r){if(e>r){var n=e;e=r,r=n}return!!t[e]&&Object.prototype.hasOwnProperty.call(t[e],r)}function PFe(t,e,r,n){var i={},a={},s={};return Ae(e,function(l){Ae(l,function(u,h){i[u]=u,a[u]=u,s[u]=h})}),Ae(e,function(l){var u=-1;Ae(l,function(h){var f=n(h);if(f.length){f=Dc(f,function(y){return s[y]});for(var d=(f.length-1)/2,p=Math.floor(d),m=Math.ceil(d);p<=m;++p){var g=f[p];a[h]===h&&u{"use strict";Yt();qo();Rc();o(NFe,"findType1Conflicts");o(MFe,"findType2Conflicts");o(IFe,"findOtherInnerSegmentNode");o(moe,"addConflict");o(OFe,"hasConflict");o(PFe,"verticalAlignment");o(BFe,"horizontalCompaction");o(FFe,"buildBlockGraph");o($Fe,"findSmallestWidthAlignment");o(zFe,"alignCoordinates");o(GFe,"balance");o(goe,"positionX");o(VFe,"sep");o(UFe,"width")});function voe(t){t=bk(t),HFe(t),_R(goe(t),function(e,r){t.node(r).x=e})}function HFe(t){var e=uf(t),r=t.graph().ranksep,n=0;Ae(e,function(i){var a=Gs(rt(i,function(s){return t.node(s).height}));Ae(i,function(s){t.node(s).y=n+a/2}),n+=a+r})}var xoe=M(()=>{"use strict";Yt();Rc();yoe();o(voe,"position");o(HFe,"positionY")});function q2(t,e){var r=e&&e.debugTiming?fse:dse;r("layout",()=>{var n=r(" buildLayoutGraph",()=>t$e(t));r(" runLayout",()=>qFe(n,r)),r(" updateInputGraph",()=>WFe(t,n))})}function qFe(t,e){e(" makeSpaceForEdgeLabels",()=>r$e(t)),e(" removeSelfEdges",()=>h$e(t)),e(" acyclic",()=>ase(t)),e(" nestingGraph.run",()=>Use(t)),e(" rank",()=>sN(bk(t))),e(" injectEdgeLabelProxies",()=>n$e(t)),e(" removeEmptyRanks",()=>use(t)),e(" nestingGraph.cleanup",()=>qse(t)),e(" normalizeRanks",()=>cse(t)),e(" assignRankMinMax",()=>i$e(t)),e(" removeEdgeLabelProxies",()=>a$e(t)),e(" normalize.run",()=>wse(t)),e(" parentDummyChains",()=>doe(t)),e(" addBorderSegments",()=>mse(t)),e(" order",()=>hoe(t)),e(" insertSelfEdges",()=>f$e(t)),e(" adjustCoordinateSystem",()=>vse(t)),e(" position",()=>voe(t)),e(" positionSelfEdges",()=>d$e(t)),e(" removeBorderNodes",()=>u$e(t)),e(" normalize.undo",()=>kse(t)),e(" fixupEdgeLabelCoords",()=>l$e(t)),e(" undoCoordinateSystem",()=>xse(t)),e(" translateGraph",()=>s$e(t)),e(" assignNodeIntersects",()=>o$e(t)),e(" reversePoints",()=>c$e(t)),e(" acyclic.undo",()=>sse(t))}function WFe(t,e){Ae(t.nodes(),function(r){var n=t.node(r),i=e.node(r);n&&(n.x=i.x,n.y=i.y,e.children(r).length&&(n.width=i.width,n.height=i.height))}),Ae(t.edges(),function(r){var n=t.edge(r),i=e.edge(r);n.points=i.points,Object.prototype.hasOwnProperty.call(i,"x")&&(n.x=i.x,n.y=i.y)}),t.graph().width=e.graph().width,t.graph().height=e.graph().height}function t$e(t){var e=new cn({multigraph:!0,compound:!0}),r=uN(t.graph());return e.setGraph(Wh({},XFe,cN(r,YFe),op(r,jFe))),Ae(t.nodes(),function(n){var i=uN(t.node(n));e.setNode(n,of(cN(i,KFe),QFe)),e.setParent(n,t.parent(n))}),Ae(t.edges(),function(n){var i=uN(t.edge(n));e.setEdge(n,Wh({},JFe,cN(i,ZFe),op(i,e$e)))}),e}function r$e(t){var e=t.graph();e.ranksep/=2,Ae(t.edges(),function(r){var n=t.edge(r);n.minlen*=2,n.labelpos.toLowerCase()!=="c"&&(e.rankdir==="TB"||e.rankdir==="BT"?n.width+=n.labeloffset:n.height+=n.labeloffset)})}function n$e(t){Ae(t.edges(),function(e){var r=t.edge(e);if(r.width&&r.height){var n=t.node(e.v),i=t.node(e.w),a={rank:(i.rank-n.rank)/2+n.rank,e};Lc(t,"edge-proxy",a,"_ep")}})}function i$e(t){var e=0;Ae(t.nodes(),function(r){var n=t.node(r);n.borderTop&&(n.minRank=t.node(n.borderTop).rank,n.maxRank=t.node(n.borderBottom).rank,e=Gs(e,n.maxRank))}),t.graph().maxRank=e}function a$e(t){Ae(t.nodes(),function(e){var r=t.node(e);r.dummy==="edge-proxy"&&(t.edge(r.e).labelRank=r.rank,t.removeNode(e))})}function s$e(t){var e=Number.POSITIVE_INFINITY,r=0,n=Number.POSITIVE_INFINITY,i=0,a=t.graph(),s=a.marginx||0,l=a.marginy||0;function u(h){var f=h.x,d=h.y,p=h.width,m=h.height;e=Math.min(e,f-p/2),r=Math.max(r,f+p/2),n=Math.min(n,d-m/2),i=Math.max(i,d+m/2)}o(u,"getExtremes"),Ae(t.nodes(),function(h){u(t.node(h))}),Ae(t.edges(),function(h){var f=t.edge(h);Object.prototype.hasOwnProperty.call(f,"x")&&u(f)}),e-=s,n-=l,Ae(t.nodes(),function(h){var f=t.node(h);f.x-=e,f.y-=n}),Ae(t.edges(),function(h){var f=t.edge(h);Ae(f.points,function(d){d.x-=e,d.y-=n}),Object.prototype.hasOwnProperty.call(f,"x")&&(f.x-=e),Object.prototype.hasOwnProperty.call(f,"y")&&(f.y-=n)}),a.width=r-e+s,a.height=i-n+l}function o$e(t){Ae(t.edges(),function(e){var r=t.edge(e),n=t.node(e.v),i=t.node(e.w),a,s;r.points?(a=r.points[0],s=r.points[r.points.length-1]):(r.points=[],a=i,s=n),r.points.unshift(UR(n,a)),r.points.push(UR(i,s))})}function l$e(t){Ae(t.edges(),function(e){var r=t.edge(e);if(Object.prototype.hasOwnProperty.call(r,"x"))switch((r.labelpos==="l"||r.labelpos==="r")&&(r.width-=r.labeloffset),r.labelpos){case"l":r.x-=r.width/2+r.labeloffset;break;case"r":r.x+=r.width/2+r.labeloffset;break}})}function c$e(t){Ae(t.edges(),function(e){var r=t.edge(e);r.reversed&&r.points.reverse()})}function u$e(t){Ae(t.nodes(),function(e){if(t.children(e).length){var r=t.node(e),n=t.node(r.borderTop),i=t.node(r.borderBottom),a=t.node(ga(r.borderLeft)),s=t.node(ga(r.borderRight));r.width=Math.abs(s.x-a.x),r.height=Math.abs(i.y-n.y),r.x=a.x+r.width/2,r.y=n.y+r.height/2}}),Ae(t.nodes(),function(e){t.node(e).dummy==="border"&&t.removeNode(e)})}function h$e(t){Ae(t.edges(),function(e){if(e.v===e.w){var r=t.node(e.v);r.selfEdges||(r.selfEdges=[]),r.selfEdges.push({e,label:t.edge(e)}),t.removeEdge(e)}})}function f$e(t){var e=uf(t);Ae(e,function(r){var n=0;Ae(r,function(i,a){var s=t.node(i);s.order=a+n,Ae(s.selfEdges,function(l){Lc(t,"selfedge",{width:l.label.width,height:l.label.height,rank:s.rank,order:a+ ++n,e:l.e,label:l.label},"_se")}),delete s.selfEdges})})}function d$e(t){Ae(t.nodes(),function(e){var r=t.node(e);if(r.dummy==="selfedge"){var n=t.node(r.e.v),i=n.x+n.width/2,a=n.y,s=r.x-i,l=n.height/2;t.setEdge(r.e,r.label),t.removeNode(e),r.label.points=[{x:i+2*s/3,y:a-l},{x:i+5*s/6,y:a-l},{x:i+s,y:a},{x:i+5*s/6,y:a+l},{x:i+2*s/3,y:a+l}],r.label.x=r.x,r.label.y=r.y}})}function cN(t,e){return ap(op(t,e),Number)}function uN(t){var e={};return Ae(t,function(r,n){e[n.toLowerCase()]=r}),e}var YFe,XFe,jFe,KFe,QFe,ZFe,JFe,e$e,boe=M(()=>{"use strict";Yt();qo();gse();Tse();VR();XR();oN();Wse();foe();poe();xoe();Rc();o(q2,"layout");o(qFe,"runLayout");o(WFe,"updateInputGraph");YFe=["nodesep","edgesep","ranksep","marginx","marginy"],XFe={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},jFe=["acyclicer","ranker","rankdir","align"],KFe=["width","height"],QFe={width:0,height:0},ZFe=["minlen","weight","width","height","labeloffset"],JFe={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},e$e=["labelpos"];o(t$e,"buildLayoutGraph");o(r$e,"makeSpaceForEdgeLabels");o(n$e,"injectEdgeLabelProxies");o(i$e,"assignRankMinMax");o(a$e,"removeEdgeLabelProxies");o(s$e,"translateGraph");o(o$e,"assignNodeIntersects");o(l$e,"fixupEdgeLabelCoords");o(c$e,"reversePointsForReversedEdges");o(u$e,"removeBorderNodes");o(h$e,"removeSelfEdges");o(f$e,"insertSelfEdges");o(d$e,"positionSelfEdges");o(cN,"selectNumberAttrs");o(uN,"canonicalize")});var hN=M(()=>{"use strict";VR();boe();XR();oN()});function Wo(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:p$e(t),edges:m$e(t)};return xr(t.graph())||(e.value=ln(t.graph())),e}function p$e(t){return rt(t.nodes(),function(e){var r=t.node(e),n=t.parent(e),i={v:e};return xr(r)||(i.value=r),xr(n)||(i.parent=n),i})}function m$e(t){return rt(t.edges(),function(e){var r=t.edge(e),n={v:e.v,w:e.w};return xr(e.name)||(n.name=e.name),xr(r)||(n.value=r),n})}var fN=M(()=>{"use strict";Yt();yk();o(Wo,"write");o(p$e,"writeNodes");o(m$e,"writeEdges")});var Er,hp,koe,Eoe,Ek,g$e,Soe,Coe,y$e,Wm,woe,Aoe,_oe,Doe,Loe,Roe=M(()=>{"use strict";pt();qo();fN();Er=new Map,hp=new Map,koe=new Map,Eoe=o(()=>{hp.clear(),koe.clear(),Er.clear()},"clear"),Ek=o((t,e)=>{let r=hp.get(e)||[];return X.trace("In isDescendant",e," ",t," = ",r.includes(t)),r.includes(t)},"isDescendant"),g$e=o((t,e)=>{let r=hp.get(e)||[];return X.info("Descendants of ",e," is ",r),X.info("Edge is ",t),t.v===e||t.w===e?!1:r?r.includes(t.v)||Ek(t.v,e)||Ek(t.w,e)||r.includes(t.w):(X.debug("Tilt, ",e,",not in descendants"),!1)},"edgeInCluster"),Soe=o((t,e,r,n)=>{X.warn("Copying children of ",t,"root",n,"data",e.node(t),n);let i=e.children(t)||[];t!==n&&i.push(t),X.warn("Copying (nodes) clusterId",t,"nodes",i),i.forEach(a=>{if(e.children(a).length>0)Soe(a,e,r,n);else{let s=e.node(a);X.info("cp ",a," to ",n," with parent ",t),r.setNode(a,s),n!==e.parent(a)&&(X.warn("Setting parent",a,e.parent(a)),r.setParent(a,e.parent(a))),t!==n&&a!==t?(X.debug("Setting parent",a,t),r.setParent(a,t)):(X.info("In copy ",t,"root",n,"data",e.node(t),n),X.debug("Not Setting parent for node=",a,"cluster!==rootId",t!==n,"node!==clusterId",a!==t));let l=e.edges(a);X.debug("Copying Edges",l),l.forEach(u=>{X.info("Edge",u);let h=e.edge(u.v,u.w,u.name);X.info("Edge data",h,n);try{g$e(u,n)?(X.info("Copying as ",u.v,u.w,h,u.name),r.setEdge(u.v,u.w,h,u.name),X.info("newGraph edges ",r.edges(),r.edge(r.edges()[0]))):X.info("Skipping copy of edge ",u.v,"-->",u.w," rootId: ",n," clusterId:",t)}catch(f){X.error(f)}})}X.debug("Removing node",a),e.removeNode(a)})},"copy"),Coe=o((t,e)=>{let r=e.children(t),n=[...r];for(let i of r)koe.set(i,t),n=[...n,...Coe(i,e)];return n},"extractDescendants"),y$e=o((t,e,r)=>{let n=t.edges().filter(u=>u.v===e||u.w===e),i=t.edges().filter(u=>u.v===r||u.w===r),a=n.map(u=>({v:u.v===e?r:u.v,w:u.w===e?e:u.w})),s=i.map(u=>({v:u.v,w:u.w}));return a.filter(u=>s.some(h=>u.v===h.v&&u.w===h.w))},"findCommonEdges"),Wm=o((t,e,r)=>{let n=e.children(t);if(X.trace("Searching children of id ",t,n),n.length<1)return t;let i;for(let a of n){let s=Wm(a,e,r),l=y$e(e,r,s);if(s)if(l.length>0)i=s;else return s}return i},"findNonClusterChild"),woe=o(t=>!Er.has(t)||!Er.get(t).externalConnections?t:Er.has(t)?Er.get(t).id:t,"getAnchorId"),Aoe=o((t,e)=>{if(!t||e>10){X.debug("Opting out, no graph ");return}else X.debug("Opting in, graph ");t.nodes().forEach(function(r){t.children(r).length>0&&(X.warn("Cluster identified",r," Replacement id in edges: ",Wm(r,t,r)),hp.set(r,Coe(r,t)),Er.set(r,{id:Wm(r,t,r),clusterData:t.node(r)}))}),t.nodes().forEach(function(r){let n=t.children(r),i=t.edges();n.length>0?(X.debug("Cluster identified",r,hp),i.forEach(a=>{let s=Ek(a.v,r),l=Ek(a.w,r);s^l&&(X.warn("Edge: ",a," leaves cluster ",r),X.warn("Descendants of XXX ",r,": ",hp.get(r)),Er.get(r).externalConnections=!0)})):X.debug("Not a cluster ",r,hp)});for(let r of Er.keys()){let n=Er.get(r).id,i=t.parent(n);i!==r&&Er.has(i)&&!Er.get(i).externalConnections&&(Er.get(r).id=i)}t.edges().forEach(function(r){let n=t.edge(r);X.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(r)),X.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(t.edge(r)));let i=r.v,a=r.w;if(X.warn("Fix XXX",Er,"ids:",r.v,r.w,"Translating: ",Er.get(r.v)," --- ",Er.get(r.w)),Er.get(r.v)||Er.get(r.w)){if(X.warn("Fixing and trying - removing XXX",r.v,r.w,r.name),i=woe(r.v),a=woe(r.w),t.removeEdge(r.v,r.w,r.name),i!==r.v){let s=t.parent(i);Er.get(s).externalConnections=!0,n.fromCluster=r.v}if(a!==r.w){let s=t.parent(a);Er.get(s).externalConnections=!0,n.toCluster=r.w}X.warn("Fix Replacing with XXX",i,a,r.name),t.setEdge(i,a,n,r.name)}}),X.warn("Adjusted Graph",Wo(t)),_oe(t,0),X.trace(Er)},"adjustClustersAndEdges"),_oe=o((t,e)=>{if(X.warn("extractor - ",e,Wo(t),t.children("D")),e>10){X.error("Bailing out");return}let r=t.nodes(),n=!1;for(let i of r){let a=t.children(i);n=n||a.length>0}if(!n){X.debug("Done, no node has children",t.nodes());return}X.debug("Nodes = ",r,e);for(let i of r)if(X.debug("Extracting node",i,Er,Er.has(i)&&!Er.get(i).externalConnections,!t.parent(i),t.node(i),t.children("D")," Depth ",e),!Er.has(i))X.debug("Not a cluster",i,e);else if(!Er.get(i).externalConnections&&t.children(i)&&t.children(i).length>0){X.warn("Cluster without external connections, without a parent and with children",i,e);let s=t.graph().rankdir==="TB"?"LR":"TB";Er.get(i)?.clusterData?.dir&&(s=Er.get(i).clusterData.dir,X.warn("Fixing dir",Er.get(i).clusterData.dir,s));let l=new cn({multigraph:!0,compound:!0}).setGraph({rankdir:s,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});X.warn("Old graph before copy",Wo(t)),Soe(i,t,l,i),t.setNode(i,{clusterNode:!0,id:i,clusterData:Er.get(i).clusterData,label:Er.get(i).label,graph:l}),X.warn("New graph after copy node: (",i,")",Wo(l)),X.debug("Old graph after copy",Wo(t))}else X.warn("Cluster ** ",i," **not meeting the criteria !externalConnections:",!Er.get(i).externalConnections," no parent: ",!t.parent(i)," children ",t.children(i)&&t.children(i).length>0,t.children("D"),e),X.debug(Er);r=t.nodes(),X.warn("New list of nodes",r);for(let i of r){let a=t.node(i);X.warn(" Now next level",i,a),a?.clusterNode&&_oe(a.graph,e+1)}},"extractor"),Doe=o((t,e)=>{if(e.length===0)return[];let r=Object.assign([],e);return e.forEach(n=>{let i=t.children(n),a=Doe(t,i);r=[...r,...a]}),r},"sorter"),Loe=o(t=>Doe(t,t.children()),"sortNodesByHierarchy")});var Moe={};dr(Moe,{render:()=>v$e});var Noe,v$e,Ioe=M(()=>{"use strict";hN();fN();qo();K9();It();Roe();Tw();uw();j9();pt();P2();Xt();Noe=o(async(t,e,r,n,i,a)=>{X.warn("Graph in recursive render:XAX",Wo(e),i);let s=e.graph().rankdir;X.trace("Dir in recursive render - dir:",s);let l=t.insert("g").attr("class","root");e.nodes()?X.info("Recursive render XXX",e.nodes()):X.info("No nodes found for",e),e.edges().length>0&&X.info("Recursive edges",e.edge(e.edges()[0]));let u=l.insert("g").attr("class","clusters"),h=l.insert("g").attr("class","edgePaths"),f=l.insert("g").attr("class","edgeLabels"),d=l.insert("g").attr("class","nodes");await Promise.all(e.nodes().map(async function(y){let v=e.node(y);if(i!==void 0){let x=JSON.parse(JSON.stringify(i.clusterData));X.trace(`Setting data for parent cluster XXX + Node.id = `,y,` + data=`,x.height,` +Parent cluster`,i.height),e.setNode(i.id,x),e.parent(y)||(X.trace("Setting parent",y,i.id),e.setParent(y,i.id,x))}if(X.info("(Insert) Node XXX"+y+": "+JSON.stringify(e.node(y))),v?.clusterNode){X.info("Cluster identified XBX",y,v.width,e.node(y));let{ranksep:x,nodesep:b}=e.graph();v.graph.setGraph({...v.graph.graph(),ranksep:x+25,nodesep:b});let T=await Noe(d,v.graph,r,n,e.node(y),a),S=T.elem;Qe(v,S),v.diff=T.diff||0,X.info("New compound node after recursive render XAX",y,"width",v.width,"height",v.height),Qte(S,v)}else e.children(y).length>0?(X.trace("Cluster - the non recursive path XBX",y,v.id,v,v.width,"Graph:",e),X.trace(Wm(v.id,e)),Er.set(v.id,{id:Wm(v.id,e),node:v})):(X.trace("Node - the non recursive path XAX",y,d,e.node(y),s),await Cm(d,e.node(y),{config:a,dir:s}))})),await o(async()=>{let y=e.edges().map(async function(v){let x=e.edge(v.v,v.w,v.name);X.info("Edge "+v.v+" -> "+v.w+": "+JSON.stringify(v)),X.info("Edge "+v.v+" -> "+v.w+": ",v," ",JSON.stringify(e.edge(v))),X.info("Fix",Er,"ids:",v.v,v.w,"Translating: ",Er.get(v.v),Er.get(v.w)),await gw(f,x)});await Promise.all(y)},"processEdges")(),X.info("Graph before layout:",JSON.stringify(Wo(e))),X.info("############################################# XXX"),X.info("### Layout ### XXX"),X.info("############################################# XXX"),q2(e),X.info("Graph after layout:",JSON.stringify(Wo(e)));let m=0,{subGraphTitleTotalMargin:g}=Pu(a);return await Promise.all(Loe(e).map(async function(y){let v=e.node(y);if(X.info("Position XBX => "+y+": ("+v.x,","+v.y,") width: ",v.width," height: ",v.height),v?.clusterNode)v.y+=g,X.info("A tainted cluster node XBX1",y,v.id,v.width,v.height,v.x,v.y,e.parent(y)),Er.get(v.id).node=v,B2(v);else if(e.children(y).length>0){X.info("A pure cluster node XBX1",y,v.id,v.x,v.y,v.width,v.height,e.parent(y)),v.height+=g,e.node(v.parentId);let x=v?.padding/2||0,b=v?.labelBBox?.height||0,T=b-x||0;X.debug("OffsetY",T,"labelHeight",b,"halfPadding",x),await Sm(u,v),Er.get(v.id).node=v}else{let x=e.node(v.parentId);v.y+=g/2,X.info("A regular node XBX1 - using the padding",v.id,"parent",v.parentId,v.width,v.height,v.x,v.y,"offsetY",v.offsetY,"parent",x,x?.offsetY,v),B2(v)}})),e.edges().forEach(function(y){let v=e.edge(y);X.info("Edge "+y.v+" -> "+y.w+": "+JSON.stringify(v),v),v.points.forEach(S=>S.y+=g/2);let x=e.node(y.v);var b=e.node(y.w);let T=vw(h,v,Er,r,x,b,n);yw(v,T)}),e.nodes().forEach(function(y){let v=e.node(y);X.info(y,v.type,v.diff),v.isGroup&&(m=v.diff)}),X.warn("Returning from recursive render XAX",l,m),{elem:l,diff:m}},"recursiveRender"),v$e=o(async(t,e)=>{let r=new cn({multigraph:!0,compound:!0}).setGraph({rankdir:t.direction,nodesep:t.config?.nodeSpacing||t.config?.flowchart?.nodeSpacing||t.nodeSpacing,ranksep:t.config?.rankSpacing||t.config?.flowchart?.rankSpacing||t.rankSpacing,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),n=e.select("g");xw(n,t.markers,t.type,t.diagramId),Zte(),Kte(),Ute(),Eoe(),t.nodes.forEach(a=>{r.setNode(a.id,{...a}),a.parentId&&r.setParent(a.id,a.parentId)}),X.debug("Edges:",t.edges),t.edges.forEach(a=>{if(a.start===a.end){let s=a.start,l=s+"---"+s+"---1",u=s+"---"+s+"---2",h=r.node(s);r.setNode(l,{domId:l,id:l,parentId:h.parentId,labelStyle:"",label:"",padding:0,shape:"labelRect",style:"",width:10,height:10}),r.setParent(l,h.parentId),r.setNode(u,{domId:u,id:u,parentId:h.parentId,labelStyle:"",padding:0,shape:"labelRect",label:"",style:"",width:10,height:10}),r.setParent(u,h.parentId);let f=structuredClone(a),d=structuredClone(a),p=structuredClone(a);f.label="",f.arrowTypeEnd="none",f.id=s+"-cyclic-special-1",d.arrowTypeStart="none",d.arrowTypeEnd="none",d.id=s+"-cyclic-special-mid",p.label="",h.isGroup&&(f.fromCluster=s,p.toCluster=s),p.id=s+"-cyclic-special-2",p.arrowTypeStart="none",r.setEdge(s,l,f,s+"-cyclic-special-0"),r.setEdge(l,u,d,s+"-cyclic-special-1"),r.setEdge(u,s,p,s+"-cyct.length)&&(e=t.length);for(var r=0,n=Array(e);r=t.length?{done:!0}:{done:!1,value:t[n++]}},"n"),e:o(function(u){throw u},"e"),f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,s=!0,l=!1;return{s:o(function(){r=r.call(t)},"s"),n:o(function(){var u=r.next();return s=u.done,u},"n"),e:o(function(u){l=!0,a=u},"e"),f:o(function(){try{s||r.return==null||r.return()}finally{if(l)throw a}},"f")}}function cue(t,e,r){return(e=uue(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function w$e(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function k$e(t,e){var r=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(r!=null){var n,i,a,s,l=[],u=!0,h=!1;try{if(a=(r=r.call(t)).next,e===0){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=a.call(r)).done)&&(l.push(n.value),l.length!==e);u=!0);}catch(f){h=!0,i=f}finally{try{if(!u&&r.return!=null&&(s=r.return(),Object(s)!==s))return}finally{if(h)throw i}}return l}}function E$e(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function S$e(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function _i(t,e){return x$e(t)||k$e(t,e)||cI(t,e)||E$e()}function jk(t){return b$e(t)||w$e(t)||cI(t)||S$e()}function C$e(t,e){if(typeof t!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}function uue(t){var e=C$e(t,"string");return typeof e=="symbol"?e:e+""}function $i(t){"@babel/helpers - typeof";return $i=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},$i(t)}function cI(t,e){if(t){if(typeof t=="string")return UM(t,e);var r={}.toString.call(t).slice(8,-1);return r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set"?Array.from(t):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?UM(t,e):void 0}}function yx(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function vx(){if(Boe)return dN;Boe=1;function t(e){var r=typeof e;return e!=null&&(r=="object"||r=="function")}return o(t,"isObject"),dN=t,dN}function j$e(){if(Foe)return pN;Foe=1;var t=typeof Sk=="object"&&Sk&&Sk.Object===Object&&Sk;return pN=t,pN}function uE(){if($oe)return mN;$oe=1;var t=j$e(),e=typeof self=="object"&&self&&self.Object===Object&&self,r=t||e||Function("return this")();return mN=r,mN}function K$e(){if(zoe)return gN;zoe=1;var t=uE(),e=o(function(){return t.Date.now()},"now");return gN=e,gN}function Q$e(){if(Goe)return yN;Goe=1;var t=/\s/;function e(r){for(var n=r.length;n--&&t.test(r.charAt(n)););return n}return o(e,"trimmedEndIndex"),yN=e,yN}function Z$e(){if(Voe)return vN;Voe=1;var t=Q$e(),e=/^\s+/;function r(n){return n&&n.slice(0,t(n)+1).replace(e,"")}return o(r,"baseTrim"),vN=r,vN}function fI(){if(Uoe)return xN;Uoe=1;var t=uE(),e=t.Symbol;return xN=e,xN}function J$e(){if(Hoe)return bN;Hoe=1;var t=fI(),e=Object.prototype,r=e.hasOwnProperty,n=e.toString,i=t?t.toStringTag:void 0;function a(s){var l=r.call(s,i),u=s[i];try{s[i]=void 0;var h=!0}catch{}var f=n.call(s);return h&&(l?s[i]=u:delete s[i]),f}return o(a,"getRawTag"),bN=a,bN}function eze(){if(qoe)return TN;qoe=1;var t=Object.prototype,e=t.toString;function r(n){return e.call(n)}return o(r,"objectToString"),TN=r,TN}function xue(){if(Woe)return wN;Woe=1;var t=fI(),e=J$e(),r=eze(),n="[object Null]",i="[object Undefined]",a=t?t.toStringTag:void 0;function s(l){return l==null?l===void 0?i:n:a&&a in Object(l)?e(l):r(l)}return o(s,"baseGetTag"),wN=s,wN}function tze(){if(Yoe)return kN;Yoe=1;function t(e){return e!=null&&typeof e=="object"}return o(t,"isObjectLike"),kN=t,kN}function xx(){if(Xoe)return EN;Xoe=1;var t=xue(),e=tze(),r="[object Symbol]";function n(i){return typeof i=="symbol"||e(i)&&t(i)==r}return o(n,"isSymbol"),EN=n,EN}function rze(){if(joe)return SN;joe=1;var t=Z$e(),e=vx(),r=xx(),n=NaN,i=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,s=/^0o[0-7]+$/i,l=parseInt;function u(h){if(typeof h=="number")return h;if(r(h))return n;if(e(h)){var f=typeof h.valueOf=="function"?h.valueOf():h;h=e(f)?f+"":f}if(typeof h!="string")return h===0?h:+h;h=t(h);var d=a.test(h);return d||s.test(h)?l(h.slice(2),d?2:8):i.test(h)?n:+h}return o(u,"toNumber"),SN=u,SN}function nze(){if(Koe)return CN;Koe=1;var t=vx(),e=K$e(),r=rze(),n="Expected a function",i=Math.max,a=Math.min;function s(l,u,h){var f,d,p,m,g,y,v=0,x=!1,b=!1,T=!0;if(typeof l!="function")throw new TypeError(n);u=r(u)||0,t(h)&&(x=!!h.leading,b="maxWait"in h,p=b?i(r(h.maxWait)||0,u):p,T="trailing"in h?!!h.trailing:T);function S(_){var D=f,O=d;return f=d=void 0,v=_,m=l.apply(O,D),m}o(S,"invokeFunc");function w(_){return v=_,g=setTimeout(A,u),x?S(_):m}o(w,"leadingEdge");function k(_){var D=_-y,O=_-v,N=u-D;return b?a(N,p-O):N}o(k,"remainingWait");function C(_){var D=_-y,O=_-v;return y===void 0||D>=u||D<0||b&&O>=p}o(C,"shouldInvoke");function A(){var _=e();if(C(_))return L(_);g=setTimeout(A,k(_))}o(A,"timerExpired");function L(_){return g=void 0,T&&f?S(_):(f=d=void 0,m)}o(L,"trailingEdge");function I(){g!==void 0&&clearTimeout(g),v=0,f=y=d=g=void 0}o(I,"cancel");function R(){return g===void 0?m:L(e())}o(R,"flush");function E(){var _=e(),D=C(_);if(f=arguments,d=this,y=_,D){if(g===void 0)return w(y);if(b)return clearTimeout(g),g=setTimeout(A,u),S(y)}return g===void 0&&(g=setTimeout(A,u)),m}return o(E,"debounced"),E.cancel=I,E.flush=R,E}return o(s,"debounce"),CN=s,CN}function lze(t,e,r,n,i){var a=i*Math.PI/180,s=Math.cos(a)*(t-r)-Math.sin(a)*(e-n)+r,l=Math.sin(a)*(t-r)+Math.cos(a)*(e-n)+n;return{x:s,y:l}}function uze(t,e,r){if(r===0)return t;var n=(e.x1+e.x2)/2,i=(e.y1+e.y2)/2,a=e.w/e.h,s=1/a,l=lze(t.x,t.y,n,i,r),u=cze(l.x,l.y,n,i,a,s);return{x:u.x,y:u.y}}function Tze(){return tle||(tle=1,(function(t,e){(function(){var r,n,i,a,s,l,u,h,f,d,p,m,g,y,v;i=Math.floor,d=Math.min,n=o(function(x,b){return xb?1:0},"defaultCmp"),f=o(function(x,b,T,S,w){var k;if(T==null&&(T=0),w==null&&(w=n),T<0)throw new Error("lo must be non-negative");for(S==null&&(S=x.length);TI;0<=I?L++:L--)A.push(L);return A}).apply(this).reverse(),C=[],S=0,w=k.length;SR;0<=R?++A:--A)E.push(s(x,T));return E},"nsmallest"),y=o(function(x,b,T,S){var w,k,C;for(S==null&&(S=n),w=x[T];T>b;){if(C=T-1>>1,k=x[C],S(w,k)<0){x[T]=k,T=C;continue}break}return x[T]=w},"_siftdown"),v=o(function(x,b,T){var S,w,k,C,A;for(T==null&&(T=n),w=x.length,A=b,k=x[b],S=2*b+1;S-1}return o(e,"listCacheHas"),tM=e,tM}function pVe(){if(Vle)return rM;Vle=1;var t=gE();function e(r,n){var i=this.__data__,a=t(i,r);return a<0?(++this.size,i.push([r,n])):i[a][1]=n,this}return o(e,"listCacheSet"),rM=e,rM}function mVe(){if(Ule)return nM;Ule=1;var t=uVe(),e=hVe(),r=fVe(),n=dVe(),i=pVe();function a(s){var l=-1,u=s==null?0:s.length;for(this.clear();++l-1&&n%1==0&&n0;){var f=i.shift();e(f),a.add(f.id()),l&&n(i,a,f)}return t}function Kue(t,e,r){if(r.isParent())for(var n=r._private.children,i=0;i0&&arguments[0]!==void 0?arguments[0]:SUe,e=arguments.length>1?arguments[1]:void 0,r=0;r0?E=D:R=D;while(Math.abs(_)>s&&++O=a?b(I,O):N===0?O:S(I,R,R+h)}o(w,"getTForX");var k=!1;function C(){k=!0,(t!==e||r!==n)&&T()}o(C,"precompute");var A=o(function(R){return k||C(),t===e&&r===n?R:R===0?0:R===1?1:v(w(R),e,n)},"f");A.getControlPoints=function(){return[{x:t,y:e},{x:r,y:n}]};var L="generateBezier("+[t,e,r,n]+")";return A.toString=function(){return L},A}function Nce(t,e,r,n,i){if(n===1||e===r)return r;var a=i(e,r,n);return t==null||((t.roundValue||t.color)&&(a=Math.round(a)),t.min!==void 0&&(a=Math.max(a,t.min)),t.max!==void 0&&(a=Math.min(a,t.max))),a}function Mce(t,e){return t.pfValue!=null||t.value!=null?t.pfValue!=null&&(e==null||e.type.units!=="%")?t.pfValue:t.value:t}function jm(t,e,r,n,i){var a=i!=null?i.type:null;r<0?r=0:r>1&&(r=1);var s=Mce(t,i),l=Mce(e,i);if(At(s)&&At(l))return Nce(a,s,l,r,n);if(An(s)&&An(l)){for(var u=[],h=0;h0?(m==="spring"&&g.push(s.duration),s.easingImpl=Uk[m].apply(null,g)):s.easingImpl=Uk[m]}var y=s.easingImpl,v;if(s.duration===0?v=1:v=(r-u)/s.duration,s.applying&&(v=s.progress),v<0?v=0:v>1&&(v=1),s.delay==null){var x=s.startPosition,b=s.position;if(b&&i&&!t.locked()){var T={};j2(x.x,b.x)&&(T.x=jm(x.x,b.x,v,y)),j2(x.y,b.y)&&(T.y=jm(x.y,b.y,v,y)),t.position(T)}var S=s.startPan,w=s.pan,k=a.pan,C=w!=null&&n;C&&(j2(S.x,w.x)&&(k.x=jm(S.x,w.x,v,y)),j2(S.y,w.y)&&(k.y=jm(S.y,w.y,v,y)),t.emit("pan"));var A=s.startZoom,L=s.zoom,I=L!=null&&n;I&&(j2(A,L)&&(a.zoom=lx(a.minZoom,jm(A,L,v,y),a.maxZoom)),t.emit("zoom")),(C||I)&&t.emit("viewport");var R=s.style;if(R&&R.length>0&&i){for(var E=0;E=0;C--){var A=k[C];A()}k.splice(0,k.length)},"callbacks"),b=m.length-1;b>=0;b--){var T=m[b],S=T._private;if(S.stopped){m.splice(b,1),S.hooked=!1,S.playing=!1,S.started=!1,x(S.frames);continue}!S.playing&&!S.applying||(S.playing&&S.applying&&(S.applying=!1),S.started||$Ue(f,T,t),FUe(f,T,t,d),S.applying&&(S.applying=!1),x(S.frames),S.step!=null&&S.step(t),T.completed()&&(m.splice(b,1),S.hooked=!1,S.playing=!1,S.started=!1,x(S.completes)),y=!0)}return!d&&m.length===0&&g.length===0&&n.push(f),y}o(i,"stepOne");for(var a=!1,s=0;s0?e.notify("draw",r):e.notify("draw")),r.unmerge(n),e.emit("step")}function phe(t){this.options=ir({},YUe,XUe,t)}function mhe(t){this.options=ir({},jUe,t)}function ghe(t){this.options=ir({},KUe,t)}function EE(t){this.options=ir({},QUe,t),this.options.layout=this;var e=this.options.eles.nodes(),r=this.options.eles.edges(),n=r.filter(function(i){var a=i.source().data("id"),s=i.target().data("id"),l=e.some(function(h){return h.data("id")===a}),u=e.some(function(h){return h.data("id")===s});return!l||!u});this.options.eles=this.options.eles.not(n)}function bhe(t){this.options=ir({},fHe,t)}function _I(t){this.options=ir({},dHe,t)}function The(t){this.options=ir({},pHe,t)}function whe(t){this.options=ir({},mHe,t)}function khe(t){this.options=t,this.notifications=0}function Che(t,e){e.radius===0?t.lineTo(e.cx,e.cy):t.arc(e.cx,e.cy,e.radius,e.startAngle,e.endAngle,e.counterClockwise)}function LI(t,e,r,n){var i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0;return n===0||e.radius===0?{cx:e.x,cy:e.y,radius:0,startX:e.x,startY:e.y,stopX:e.x,stopY:e.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(vHe(t,e,r,n,i),{cx:eI,cy:tI,radius:gp,startX:Ehe,startY:She,stopX:rI,stopY:nI,startAngle:Ic.ang+Math.PI/2*vp,endAngle:Yo.ang-Math.PI/2*vp,counterClockwise:Wk})}function Ahe(t){var e=[];if(t!=null){for(var r=0;r5&&arguments[5]!==void 0?arguments[5]:5,s=Math.min(a,n/2,i/2);t.beginPath(),t.moveTo(e+s,r),t.lineTo(e+n-s,r),t.quadraticCurveTo(e+n,r,e+n,r+s),t.lineTo(e+n,r+i-s),t.quadraticCurveTo(e+n,r+i,e+n-s,r+i),t.lineTo(e+s,r+i),t.quadraticCurveTo(e,r+i,e,r+i-s),t.lineTo(e,r+s),t.quadraticCurveTo(e,r,e+s,r),t.closePath()}function eue(t,e,r){var n=t.createShader(e);if(t.shaderSource(n,r),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw new Error(t.getShaderInfoLog(n));return n}function oqe(t,e,r){var n=eue(t,t.VERTEX_SHADER,e),i=eue(t,t.FRAGMENT_SHADER,r),a=t.createProgram();if(t.attachShader(a,n),t.attachShader(a,i),t.linkProgram(a),!t.getProgramParameter(a,t.LINK_STATUS))throw new Error("Could not initialize shaders");return a}function lqe(t,e,r){r===void 0&&(r=e);var n=t.makeOffscreenCanvas(e,r),i=n.context=n.getContext("2d");return n.clear=function(){return i.clearRect(0,0,n.width,n.height)},n.clear(),n}function MI(t){var e=t.pixelRatio,r=t.cy.zoom(),n=t.cy.pan();return{zoom:r*e,pan:{x:n.x*e,y:n.y*e}}}function cqe(t){var e=t.pixelRatio,r=t.cy.zoom();return r*e}function uqe(t,e,r,n,i){var a=n*r+e.x,s=i*r+e.y;return s=Math.round(t.canvasHeight-s),[a,s]}function hqe(t){return t.pstyle("background-fill").value!=="solid"||t.pstyle("background-image").strValue!=="none"?!1:t.pstyle("border-width").value===0||t.pstyle("border-opacity").value===0?!0:t.pstyle("border-style").value==="solid"}function fqe(t,e){if(t.length!==e.length)return!1;for(var r=0;r>0&255)/255,r[1]=(t>>8&255)/255,r[2]=(t>>16&255)/255,r[3]=(t>>24&255)/255,r}function dqe(t){return t[0]+(t[1]<<8)+(t[2]<<16)+(t[3]<<24)}function pqe(t,e){var r=t.createTexture();return r.buffer=function(n){t.bindTexture(t.TEXTURE_2D,r),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_NEAREST),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,n),t.generateMipmap(t.TEXTURE_2D),t.bindTexture(t.TEXTURE_2D,null)},r.deleteTexture=function(){t.deleteTexture(r)},r}function zhe(t,e){switch(e){case"float":return[1,t.FLOAT,4];case"vec2":return[2,t.FLOAT,4];case"vec3":return[3,t.FLOAT,4];case"vec4":return[4,t.FLOAT,4];case"int":return[1,t.INT,4];case"ivec2":return[2,t.INT,4]}}function Ghe(t,e,r){switch(e){case t.FLOAT:return new Float32Array(r);case t.INT:return new Int32Array(r)}}function mqe(t,e,r,n,i,a){switch(e){case t.FLOAT:return new Float32Array(r.buffer,a*n,i);case t.INT:return new Int32Array(r.buffer,a*n,i)}}function gqe(t,e,r,n){var i=zhe(t,e),a=_i(i,2),s=a[0],l=a[1],u=Ghe(t,l,n),h=t.createBuffer();return t.bindBuffer(t.ARRAY_BUFFER,h),t.bufferData(t.ARRAY_BUFFER,u,t.STATIC_DRAW),l===t.FLOAT?t.vertexAttribPointer(r,s,l,!1,0,0):l===t.INT&&t.vertexAttribIPointer(r,s,l,0,0),t.enableVertexAttribArray(r),t.bindBuffer(t.ARRAY_BUFFER,null),h}function Mc(t,e,r,n){var i=zhe(t,r),a=_i(i,3),s=a[0],l=a[1],u=a[2],h=Ghe(t,l,e*s),f=s*u,d=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,d),t.bufferData(t.ARRAY_BUFFER,e*f,t.DYNAMIC_DRAW),t.enableVertexAttribArray(n),l===t.FLOAT?t.vertexAttribPointer(n,s,l,!1,f,0):l===t.INT&&t.vertexAttribIPointer(n,s,l,f,0),t.vertexAttribDivisor(n,1),t.bindBuffer(t.ARRAY_BUFFER,null);for(var p=new Array(e),m=0;mOhe?(Mqe(t),e.call(t,a)):(Iqe(t),qhe(t,a,ix.SCREEN)))}}{var r=t.matchCanvasSize;t.matchCanvasSize=function(a){r.call(t,a),t.pickingFrameBuffer.setFramebufferAttachmentSizes(t.canvasWidth,t.canvasHeight),t.pickingFrameBuffer.needsDraw=!0}}t.findNearestElements=function(a,s,l,u){return zqe(t,a,s)};{var n=t.invalidateCachedZSortedEles;t.invalidateCachedZSortedEles=function(){n.call(t),t.pickingFrameBuffer.needsDraw=!0}}{var i=t.notify;t.notify=function(a,s){i.call(t,a,s),a==="viewport"||a==="bounds"?t.pickingFrameBuffer.needsDraw=!0:a==="background"&&t.drawing.invalidate(s,{type:"node-body"})}}}function Mqe(t){var e=t.data.contexts[t.WEBGL];e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)}function Iqe(t){var e=o(function(n){n.save(),n.setTransform(1,0,0,1,0,0),n.clearRect(0,0,t.canvasWidth,t.canvasHeight),n.restore()},"clear");e(t.data.contexts[t.NODE]),e(t.data.contexts[t.DRAG])}function Oqe(t){var e=t.canvasWidth,r=t.canvasHeight,n=MI(t),i=n.pan,a=n.zoom,s=BM();Xk(s,s,[i.x,i.y]),aI(s,s,[a,a]);var l=BM();bqe(l,e,r);var u=BM();return xqe(u,l,s),u}function Hhe(t,e){var r=t.canvasWidth,n=t.canvasHeight,i=MI(t),a=i.pan,s=i.zoom;e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,r,n),e.translate(a.x,a.y),e.scale(s,s)}function Pqe(t,e){t.drawSelectionRectangle(e,function(r){return Hhe(t,r)})}function Bqe(t){var e=t.data.contexts[t.NODE];e.save(),Hhe(t,e),e.strokeStyle="rgba(0, 0, 0, 0.3)",e.beginPath(),e.moveTo(-1e3,0),e.lineTo(1e3,0),e.stroke(),e.beginPath(),e.moveTo(0,-1e3),e.lineTo(0,1e3),e.stroke(),e.restore()}function Fqe(t){var e=o(function(i,a,s){for(var l=i.atlasManager.getAtlasCollection(a),u=t.data.contexts[t.NODE],h=l.atlases,f=0;f=0&&S.add(C)}return S}function zqe(t,e,r){var n=$qe(t,e,r),i=t.getCachedZSortedEles(),a,s,l=qs(n),u;try{for(l.s();!(u=l.n()).done;){var h=u.value,f=i[h];if(!a&&f.isNode()&&(a=f),!s&&f.isEdge()&&(s=f),a&&s)break}}catch(d){l.e(d)}finally{l.f()}return[a,s].filter(Boolean)}function VM(t,e,r){var n=t.drawing;e+=1,r.isNode()?(n.drawNode(r,e,"node-underlay"),n.drawNode(r,e,"node-body"),n.drawTexture(r,e,"label"),n.drawNode(r,e,"node-overlay")):(n.drawEdgeLine(r,e),n.drawEdgeArrow(r,e,"source"),n.drawEdgeArrow(r,e,"target"),n.drawTexture(r,e,"label"),n.drawTexture(r,e,"edge-source-label"),n.drawTexture(r,e,"edge-target-label"))}function qhe(t,e,r){var n;t.webglDebug&&(n=performance.now());var i=t.drawing,a=0;if(r.screen&&t.data.canvasNeedsRedraw[t.SELECT_BOX]&&Pqe(t,e),t.data.canvasNeedsRedraw[t.NODE]||r.picking){var s=t.data.contexts[t.WEBGL];r.screen?(s.clearColor(0,0,0,0),s.enable(s.BLEND),s.blendFunc(s.ONE,s.ONE_MINUS_SRC_ALPHA)):s.disable(s.BLEND),s.clear(s.COLOR_BUFFER_BIT|s.DEPTH_BUFFER_BIT),s.viewport(0,0,s.canvas.width,s.canvas.height);var l=Oqe(t),u=t.getCachedZSortedEles();if(a=u.length,i.startFrame(l,r),r.screen){for(var h=0;h{"use strict";o(UM,"_arrayLikeToArray");o(x$e,"_arrayWithHoles");o(b$e,"_arrayWithoutHoles");o(Af,"_classCallCheck");o(T$e,"_defineProperties");o(_f,"_createClass");o(qs,"_createForOfIteratorHelper");o(cue,"_defineProperty$1");o(w$e,"_iterableToArray");o(k$e,"_iterableToArrayLimit");o(E$e,"_nonIterableRest");o(S$e,"_nonIterableSpread");o(_i,"_slicedToArray");o(jk,"_toConsumableArray");o(C$e,"_toPrimitive");o(uue,"_toPropertyKey");o($i,"_typeof");o(cI,"_unsupportedIterableToArray");Bi=typeof window>"u"?null:window,Ooe=Bi?Bi.navigator:null;Bi&&Bi.document;A$e=$i(""),hue=$i({}),_$e=$i(function(){}),D$e=typeof HTMLElement>"u"?"undefined":$i(HTMLElement),mx=o(function(e){return e&&e.instanceString&&oi(e.instanceString)?e.instanceString():null},"instanceStr"),Jt=o(function(e){return e!=null&&$i(e)==A$e},"string"),oi=o(function(e){return e!=null&&$i(e)===_$e},"fn"),An=o(function(e){return!fo(e)&&(Array.isArray?Array.isArray(e):e!=null&&e instanceof Array)},"array"),Yr=o(function(e){return e!=null&&$i(e)===hue&&!An(e)&&e.constructor===Object},"plainObject"),L$e=o(function(e){return e!=null&&$i(e)===hue},"object"),At=o(function(e){return e!=null&&$i(e)===$i(1)&&!isNaN(e)},"number"),R$e=o(function(e){return At(e)&&Math.floor(e)===e},"integer"),Kk=o(function(e){if(D$e!=="undefined")return e!=null&&e instanceof HTMLElement},"htmlElement"),fo=o(function(e){return gx(e)||fue(e)},"elementOrCollection"),gx=o(function(e){return mx(e)==="collection"&&e._private.single},"element"),fue=o(function(e){return mx(e)==="collection"&&!e._private.single},"collection"),uI=o(function(e){return mx(e)==="core"},"core"),due=o(function(e){return mx(e)==="stylesheet"},"stylesheet"),N$e=o(function(e){return mx(e)==="event"},"event"),Tf=o(function(e){return e==null?!0:!!(e===""||e.match(/^\s+$/))},"emptyString"),M$e=o(function(e){return typeof HTMLElement>"u"?!1:e instanceof HTMLElement},"domElement"),I$e=o(function(e){return Yr(e)&&At(e.x1)&&At(e.x2)&&At(e.y1)&&At(e.y2)},"boundingBox"),O$e=o(function(e){return L$e(e)&&oi(e.then)},"promise"),P$e=o(function(){return Ooe&&Ooe.userAgent.match(/msie|trident|edge/i)},"ms"),lg=o(function(e,r){r||(r=o(function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var a=[],s=0;sr?1:0},"ascending"),U$e=o(function(e,r){return-1*mue(e,r)},"descending"),ir=Object.assign!=null?Object.assign.bind(Object):function(t){for(var e=arguments,r=1;r1&&(v-=1),v<1/6?g+(y-g)*6*v:v<1/2?y:v<2/3?g+(y-g)*(2/3-v)*6:g}o(f,"hue2rgb");var d=new RegExp("^"+$$e+"$").exec(e);if(d){if(n=parseInt(d[1]),n<0?n=(360- -1*n%360)%360:n>360&&(n=n%360),n/=360,i=parseFloat(d[2]),i<0||i>100||(i=i/100,a=parseFloat(d[3]),a<0||a>100)||(a=a/100,s=d[4],s!==void 0&&(s=parseFloat(s),s<0||s>1)))return;if(i===0)l=u=h=Math.round(a*255);else{var p=a<.5?a*(1+i):a+i-a*i,m=2*a-p;l=Math.round(255*f(m,p,n+1/3)),u=Math.round(255*f(m,p,n)),h=Math.round(255*f(m,p,n-1/3))}r=[l,u,h,s]}return r},"hsl2tuple"),W$e=o(function(e){var r,n=new RegExp("^"+B$e+"$").exec(e);if(n){r=[];for(var i=[],a=1;a<=3;a++){var s=n[a];if(s[s.length-1]==="%"&&(i[a]=!0),s=parseFloat(s),i[a]&&(s=s/100*255),s<0||s>255)return;r.push(Math.floor(s))}var l=i[1]||i[2]||i[3],u=i[1]&&i[2]&&i[3];if(l&&!u)return;var h=n[4];if(h!==void 0){if(h=parseFloat(h),h<0||h>1)return;r.push(h)}}return r},"rgb2tuple"),Y$e=o(function(e){return X$e[e.toLowerCase()]},"colorname2tuple"),gue=o(function(e){return(An(e)?e:null)||Y$e(e)||H$e(e)||W$e(e)||q$e(e)},"color2tuple"),X$e={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},yue=o(function(e){for(var r=e.map,n=e.keys,i=n.length,a=0;a1&&arguments[1]!==void 0?arguments[1]:yp,n=r,i;i=e.next(),!i.done;)n=n*Tue+i.value|0;return n},"hashIterableInts"),ax=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:yp;return r*Tue+e|0},"hashInt"),sx=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:eg;return(r<<5)+r+e|0},"hashIntAlt"),sze=o(function(e,r){return e*2097152+r},"combineHashes"),df=o(function(e){return e[0]*2097152+e[1]},"combineHashesArray"),Ck=o(function(e,r){return[ax(e[0],r[0]),sx(e[1],r[1])]},"hashArrays"),Qoe=o(function(e,r){var n={value:0,done:!1},i=0,a=e.length,s={next:o(function(){return i=0;i--)e[i]===r&&e.splice(i,1)},"removeFromArray"),mI=o(function(e){e.splice(0,e.length)},"clearArray"),gze=o(function(e,r){for(var n=0;n"u"?"undefined":$i(Set))!==vze?Set:xze,hE=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(e===void 0||r===void 0||!uI(e)){Kn("An element must have a core reference and parameters set");return}var i=r.group;if(i==null&&(r.data&&r.data.source!=null&&r.data.target!=null?i="edges":i="nodes"),i!=="nodes"&&i!=="edges"){Kn("An element must be of type `nodes` or `edges`; you specified `"+i+"`");return}this.length=1,this[0]=this;var a=this._private={cy:e,single:!0,data:r.data||{},position:r.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:i,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!r.selected,selectable:r.selectable===void 0?!0:!!r.selectable,locked:!!r.locked,grabbed:!1,grabbable:r.grabbable===void 0?!0:!!r.grabbable,pannable:r.pannable===void 0?i==="edges":!!r.pannable,active:!1,classes:new hg,animation:{current:[],queue:[]},rscratch:{},scratch:r.scratch||{},edges:[],children:[],parent:r.parent&&r.parent.isNode()?r.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(a.position.x==null&&(a.position.x=0),a.position.y==null&&(a.position.y=0),r.renderedPosition){var s=r.renderedPosition,l=e.pan(),u=e.zoom();a.position={x:(s.x-l.x)/u,y:(s.y-l.y)/u}}var h=[];An(r.classes)?h=r.classes:Jt(r.classes)&&(h=r.classes.split(/\s+/));for(var f=0,d=h.length;f0;){var k=b.pop(),C=v(k),A=k.id();if(p[A]=C,C!==1/0)for(var L=k.neighborhood().intersect(g),I=0;I0)for(B.unshift(P);d[V];){var $=d[V];B.unshift($.edge),B.unshift($.node),F=$.node,V=F.id()}return l.spawn(B)},"pathTo")}},"dijkstra")},Cze={kruskal:o(function(e){e=e||function(T){return 1};for(var r=this.byGroup(),n=r.nodes,i=r.edges,a=n.length,s=new Array(a),l=n,u=o(function(S){for(var w=0;w0;){if(w(),C++,S===f){for(var A=[],L=a,I=f,R=x[I];A.unshift(L),R!=null&&A.unshift(R),L=v[I],L!=null;)I=L.id(),R=x[I];return{found:!0,distance:d[S],path:this.spawn(A),steps:C}}m[S]=!0;for(var E=T._private.edges,_=0;_R&&(g[I]=R,b[I]=L,T[I]=w),!a){var E=L*f+A;!a&&g[E]>R&&(g[E]=R,b[E]=A,T[E]=w)}}}for(var _=0;_1&&arguments[1]!==void 0?arguments[1]:s,pe=T(W),Be=[],Ye=pe;;){if(Ye==null)return r.spawn();var He=b(Ye),Le=He.edge,Ie=He.pred;if(Be.unshift(Ye[0]),Ye.same(Ve)&&Be.length>0)break;Le!=null&&Be.unshift(Le),Ye=Ie}return u.spawn(Be)},"pathTo"),k=0;k=0;f--){var d=h[f],p=d[1],m=d[2];(r[p]===l&&r[m]===u||r[p]===u&&r[m]===l)&&h.splice(f,1)}for(var g=0;gi;){var a=Math.floor(Math.random()*r.length);r=Ize(a,e,r),n--}return r},"contractUntil"),Oze={kargerStein:o(function(){var e=this,r=this.byGroup(),n=r.nodes,i=r.edges;i.unmergeBy(function(B){return B.isLoop()});var a=n.length,s=i.length,l=Math.ceil(Math.pow(Math.log(a)/Math.LN2,2)),u=Math.floor(a/Mze);if(a<2){Kn("At least 2 nodes are required for Karger-Stein algorithm");return}for(var h=[],f=0;f1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=1/0,a=r;a1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=-1/0,a=r;a1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=0,a=0,s=r;s1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;i?e=e.slice(r,n):(n0&&e.splice(0,r));for(var l=0,u=e.length-1;u>=0;u--){var h=e[u];s?isFinite(h)||(e[u]=-1/0,l++):e.splice(u,1)}a&&e.sort(function(p,m){return p-m});var f=e.length,d=Math.floor(f/2);return f%2!==0?e[d+1+l]:(e[d-1+l]+e[d+l])/2},"median"),Gze=o(function(e){return Math.PI*e/180},"deg2rad"),Ak=o(function(e,r){return Math.atan2(r,e)-Math.PI/2},"getAngleFromDisp"),gI=Math.log2||function(t){return Math.log(t)/Math.log(2)},yI=o(function(e){return e>0?1:e<0?-1:0},"signum"),Tp=o(function(e,r){return Math.sqrt(mp(e,r))},"dist"),mp=o(function(e,r){var n=r.x-e.x,i=r.y-e.y;return n*n+i*i},"sqdist"),Vze=o(function(e){for(var r=e.length,n=0,i=0;i=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(e.w!=null&&e.h!=null&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},"makeBoundingBox"),Hze=o(function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},"copyBoundingBox"),qze=o(function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},"clearBoundingBox"),Wze=o(function(e,r){e.x1=Math.min(e.x1,r.x1),e.x2=Math.max(e.x2,r.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,r.y1),e.y2=Math.max(e.y2,r.y2),e.h=e.y2-e.y1},"updateBoundingBox"),Due=o(function(e,r,n){e.x1=Math.min(e.x1,r),e.x2=Math.max(e.x2,r),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},"expandBoundingBoxByPoint"),$k=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.x1-=r,e.x2+=r,e.y1-=r,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBox"),zk=o(function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],n,i,a,s;if(r.length===1)n=i=a=s=r[0];else if(r.length===2)n=a=r[0],s=i=r[1];else if(r.length===4){var l=_i(r,4);n=l[0],i=l[1],a=l[2],s=l[3]}return e.x1-=s,e.x2+=i,e.y1-=n,e.y2+=a,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},"expandBoundingBoxSides"),nle=o(function(e,r){e.x1=r.x1,e.y1=r.y1,e.x2=r.x2,e.y2=r.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},"assignBoundingBox"),vI=o(function(e,r){return!(e.x1>r.x2||r.x1>e.x2||e.x2r.y2||r.y1>e.y2)},"boundingBoxesIntersect"),yf=o(function(e,r,n){return e.x1<=r&&r<=e.x2&&e.y1<=n&&n<=e.y2},"inBoundingBox"),ile=o(function(e,r){return yf(e,r.x,r.y)},"pointInBoundingBox"),Lue=o(function(e,r){return yf(e,r.x1,r.y1)&&yf(e,r.x2,r.y2)},"boundingBoxInBoundingBox"),Yze=(LN=Math.hypot)!==null&&LN!==void 0?LN:function(t,e){return Math.sqrt(t*t+e*e)};o(Xze,"inflatePolygon");o(jze,"miterBox");Rue=o(function(e,r,n,i,a,s,l){var u=arguments.length>7&&arguments[7]!==void 0?arguments[7]:"auto",h=u==="auto"?kf(a,s):u,f=a/2,d=s/2;h=Math.min(h,f,d);var p=h!==f,m=h!==d,g;if(p){var y=n-f+h-l,v=i-d-l,x=n+f-h+l,b=v;if(g=vf(e,r,n,i,y,v,x,b,!1),g.length>0)return g}if(m){var T=n+f+l,S=i-d+h-l,w=T,k=i+d-h+l;if(g=vf(e,r,n,i,T,S,w,k,!1),g.length>0)return g}if(p){var C=n-f+h-l,A=i+d+l,L=n+f-h+l,I=A;if(g=vf(e,r,n,i,C,A,L,I,!1),g.length>0)return g}if(m){var R=n-f-l,E=i-d+h-l,_=R,D=i+d-h+l;if(g=vf(e,r,n,i,R,E,_,D,!1),g.length>0)return g}var O;{var N=n-f+h,P=i-d+h;if(O=J2(e,r,n,i,N,P,h+l),O.length>0&&O[0]<=N&&O[1]<=P)return[O[0],O[1]]}{var B=n+f-h,F=i-d+h;if(O=J2(e,r,n,i,B,F,h+l),O.length>0&&O[0]>=B&&O[1]<=F)return[O[0],O[1]]}{var V=n+f-h,$=i+d-h;if(O=J2(e,r,n,i,V,$,h+l),O.length>0&&O[0]>=V&&O[1]>=$)return[O[0],O[1]]}{var U=n-f+h,j=i+d-h;if(O=J2(e,r,n,i,U,j,h+l),O.length>0&&O[0]<=U&&O[1]>=j)return[O[0],O[1]]}return[]},"roundRectangleIntersectLine"),Kze=o(function(e,r,n,i,a,s,l){var u=l,h=Math.min(n,a),f=Math.max(n,a),d=Math.min(i,s),p=Math.max(i,s);return h-u<=e&&e<=f+u&&d-u<=r&&r<=p+u},"inLineVicinity"),Qze=o(function(e,r,n,i,a,s,l,u,h){var f={x1:Math.min(n,l,a)-h,x2:Math.max(n,l,a)+h,y1:Math.min(i,u,s)-h,y2:Math.max(i,u,s)+h};return!(ef.x2||rf.y2)},"inBezierVicinity"),Zze=o(function(e,r,n,i){n-=i;var a=r*r-4*e*n;if(a<0)return[];var s=Math.sqrt(a),l=2*e,u=(-r+s)/l,h=(-r-s)/l;return[u,h]},"solveQuadratic"),Jze=o(function(e,r,n,i,a){var s=1e-5;e===0&&(e=s),r/=e,n/=e,i/=e;var l,u,h,f,d,p,m,g;if(u=(3*n-r*r)/9,h=-(27*i)+r*(9*n-2*(r*r)),h/=54,l=u*u*u+h*h,a[1]=0,m=r/3,l>0){d=h+Math.sqrt(l),d=d<0?-Math.pow(-d,1/3):Math.pow(d,1/3),p=h-Math.sqrt(l),p=p<0?-Math.pow(-p,1/3):Math.pow(p,1/3),a[0]=-m+d+p,m+=(d+p)/2,a[4]=a[2]=-m,m=Math.sqrt(3)*(-p+d)/2,a[3]=m,a[5]=-m;return}if(a[5]=a[3]=0,l===0){g=h<0?-Math.pow(-h,1/3):Math.pow(h,1/3),a[0]=-m+2*g,a[4]=a[2]=-(g+m);return}u=-u,f=u*u*u,f=Math.acos(h/Math.sqrt(f)),g=2*Math.sqrt(u),a[0]=-m+g*Math.cos(f/3),a[2]=-m+g*Math.cos((f+2*Math.PI)/3),a[4]=-m+g*Math.cos((f+4*Math.PI)/3)},"solveCubic"),eGe=o(function(e,r,n,i,a,s,l,u){var h=1*n*n-4*n*a+2*n*l+4*a*a-4*a*l+l*l+i*i-4*i*s+2*i*u+4*s*s-4*s*u+u*u,f=9*n*a-3*n*n-3*n*l-6*a*a+3*a*l+9*i*s-3*i*i-3*i*u-6*s*s+3*s*u,d=3*n*n-6*n*a+n*l-n*e+2*a*a+2*a*e-l*e+3*i*i-6*i*s+i*u-i*r+2*s*s+2*s*r-u*r,p=1*n*a-n*n+n*e-a*e+i*s-i*i+i*r-s*r,m=[];Jze(h,f,d,p,m);for(var g=1e-7,y=[],v=0;v<6;v+=2)Math.abs(m[v+1])=0&&m[v]<=1&&y.push(m[v]);y.push(1),y.push(0);for(var x=-1,b,T,S,w=0;w=0?Sh?(e-a)*(e-a)+(r-s)*(r-s):f-p},"sqdistToFiniteLine"),Hs=o(function(e,r,n){for(var i,a,s,l,u,h=0,f=0;f=e&&e>=s||i<=e&&e<=s)u=(e-i)/(s-i)*(l-a)+a,u>r&&h++;else continue;return h%2!==0},"pointInsidePolygonPoints"),Vu=o(function(e,r,n,i,a,s,l,u,h){var f=new Array(n.length),d;u[0]!=null?(d=Math.atan(u[1]/u[0]),u[0]<0?d=d+Math.PI/2:d=-d-Math.PI/2):d=u;for(var p=Math.cos(-d),m=Math.sin(-d),g=0;g0){var v=eE(f,-h);y=Jk(v)}else y=f;return Hs(e,r,y)},"pointInsidePolygon"),rGe=o(function(e,r,n,i,a,s,l,u){for(var h=new Array(n.length*2),f=0;f=0&&v<=1&&b.push(v),x>=0&&x<=1&&b.push(x),b.length===0)return[];var T=b[0]*u[0]+e,S=b[0]*u[1]+r;if(b.length>1){if(b[0]==b[1])return[T,S];var w=b[1]*u[0]+e,k=b[1]*u[1]+r;return[T,S,w,k]}else return[T,S]},"intersectLineCircle"),RN=o(function(e,r,n){return r<=e&&e<=n||n<=e&&e<=r?e:e<=r&&r<=n||n<=r&&r<=e?r:n},"midOfThree"),vf=o(function(e,r,n,i,a,s,l,u,h){var f=e-a,d=n-e,p=l-a,m=r-s,g=i-r,y=u-s,v=p*m-y*f,x=d*m-g*f,b=y*d-p*g;if(b!==0){var T=v/b,S=x/b,w=.001,k=0-w,C=1+w;return k<=T&&T<=C&&k<=S&&S<=C?[e+T*d,r+T*g]:h?[e+T*d,r+T*g]:[]}else return v===0||x===0?RN(e,n,l)===l?[l,u]:RN(e,n,a)===a?[a,s]:RN(a,l,n)===n?[n,i]:[]:[]},"finiteLinesIntersect"),iGe=o(function(e,r,n,i,a){var s=[],l=i/2,u=a/2,h=r,f=n;s.push({x:h+l*e[0],y:f+u*e[1]});for(var d=1;d0){var y=eE(d,-u);m=Jk(y)}else m=d}else m=n;for(var v,x,b,T,S=0;S2){for(var g=[f[0],f[1]],y=Math.pow(g[0]-e,2)+Math.pow(g[1]-r,2),v=1;vf&&(f=S)},"set"),get:o(function(T){return h[T]},"get")},p=0;p0?O=D.edgesTo(_)[0]:O=_.edgesTo(D)[0];var N=i(O);_=_.id(),C[_]>C[R]+N&&(C[_]=C[R]+N,A.nodes.indexOf(_)<0?A.push(_):A.updateItem(_),k[_]=0,w[_]=[]),C[_]==C[R]+N&&(k[_]=k[_]+k[R],w[_].push(R))}else for(var P=0;P0;){for(var $=S.pop(),U=0;U0&&l.push(n[u]);l.length!==0&&a.push(i.collection(l))}return a},"assign"),xGe=o(function(e,r){for(var n=0;n5&&arguments[5]!==void 0?arguments[5]:wGe,l=i,u,h,f=0;f=2?W2(e,r,n,0,cle,kGe):W2(e,r,n,0,lle)},"euclidean"),squaredEuclidean:o(function(e,r,n){return W2(e,r,n,0,cle)},"squaredEuclidean"),manhattan:o(function(e,r,n){return W2(e,r,n,0,lle)},"manhattan"),max:o(function(e,r,n){return W2(e,r,n,-1/0,EGe)},"max")};cg["squared-euclidean"]=cg.squaredEuclidean;cg.squaredeuclidean=cg.squaredEuclidean;o(dE,"clusteringDistance");SGe=ba({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),bI=o(function(e){return SGe(e)},"setOptions"),tE=o(function(e,r,n,i,a){var s=a!=="kMedoids",l=s?function(d){return n[d]}:function(d){return i[d](n)},u=o(function(p){return i[p](r)},"getQ"),h=n,f=r;return dE(e,i.length,l,u,h,f)},"getDist"),MN=o(function(e,r,n){for(var i=n.length,a=new Array(i),s=new Array(i),l=new Array(r),u=null,h=0;hn)return!1}return!0},"haveMatricesConverged"),_Ge=o(function(e,r,n){for(var i=0;il&&(l=r[h][f],u=f);a[u].push(e[h])}for(var d=0;d=a.threshold||a.mode==="dendrogram"&&e.length===1)return!1;var g=r[s],y=r[i[s]],v;a.mode==="dendrogram"?v={left:g,right:y,key:g.key}:v={value:g.value.concat(y.value),key:g.key},e[g.index]=v,e.splice(y.index,1),r[g.key]=v;for(var x=0;xn[y.key][b.key]&&(u=n[y.key][b.key])):a.linkage==="max"?(u=n[g.key][b.key],n[g.key][b.key]0&&i.push(a);return i},"findExemplars"),mle=o(function(e,r,n){for(var i=[],a=0;al&&(s=h,l=r[a*e+h])}s>0&&i.push(s)}for(var f=0;fh&&(u=f,h=d)}n[a]=s[u]}return i=mle(e,r,n),i},"assign"),gle=o(function(e){for(var r=this.cy(),n=this.nodes(),i=zGe(e),a={},s=0;s=R?(E=R,R=D,_=O):D>E&&(E=D);for(var N=0;N0?1:0;C[L%i.minIterations*l+U]=j,$+=j}if($>0&&(L>=i.minIterations-1||L==i.maxIterations-1)){for(var ee=0,q=0;q1||k>1)&&(l=!0),d[T]=[],b.outgoers().forEach(function(A){A.isEdge()&&d[T].push(A.id())})}else p[T]=[void 0,b.target().id()]}):s.forEach(function(b){var T=b.id();if(b.isNode()){var S=b.degree(!0);S%2&&(u?h?l=!0:h=T:u=T),d[T]=[],b.connectedEdges().forEach(function(w){return d[T].push(w.id())})}else p[T]=[b.source().id(),b.target().id()]});var m={found:!1,trail:void 0};if(l)return m;if(h&&u)if(a){if(f&&h!=f)return m;f=h}else{if(f&&h!=f&&u!=f)return m;f||(f=h)}else f||(f=s[0].id());var g=o(function(T){for(var S=T,w=[T],k,C,A;d[S].length;)k=d[S].shift(),C=p[k][0],A=p[k][1],S!=A?(d[A]=d[A].filter(function(L){return L!=k}),S=A):!a&&S!=C&&(d[C]=d[C].filter(function(L){return L!=k}),S=C),w.unshift(k),w.unshift(S);return w},"walk"),y=[],v=[];for(v=g(f);v.length!=1;)d[v[0]].length==0?(y.unshift(s.getElementById(v.shift())),y.unshift(s.getElementById(v.shift()))):v=g(v.shift()).concat(v);y.unshift(s.getElementById(v.shift()));for(var x in d)if(d[x].length)return m;return m.found=!0,m.trail=this.spawn(y,!0),m},"hierholzer")},Dk=o(function(){var e=this,r={},n=0,i=0,a=[],s=[],l={},u=o(function(p,m){for(var g=s.length-1,y=[],v=e.spawn();s[g].x!=p||s[g].y!=m;)y.push(s.pop().edge),g--;y.push(s.pop().edge),y.forEach(function(x){var b=x.connectedNodes().intersection(e);v.merge(x),b.forEach(function(T){var S=T.id(),w=T.connectedEdges().intersection(e);v.merge(T),r[S].cutVertex?v.merge(w.filter(function(k){return k.isLoop()})):v.merge(w)})}),a.push(v)},"buildComponent"),h=o(function(p,m,g){p===g&&(i+=1),r[m]={id:n,low:n++,cutVertex:!1};var y=e.getElementById(m).connectedEdges().intersection(e);if(y.size()===0)a.push(e.spawn(e.getElementById(m)));else{var v,x,b,T;y.forEach(function(S){v=S.source().id(),x=S.target().id(),b=v===m?x:v,b!==g&&(T=S.id(),l[T]||(l[T]=!0,s.push({x:m,y:b,edge:S})),b in r?r[m].low=Math.min(r[m].low,r[b].id):(h(p,b,m),r[m].low=Math.min(r[m].low,r[b].low),r[m].id<=r[b].low&&(r[m].cutVertex=!0,u(m,b))))})}},"biconnectedSearch");e.forEach(function(d){if(d.isNode()){var p=d.id();p in r||(i=0,h(p,p),r[p].cutVertex=i>1)}});var f=Object.keys(r).filter(function(d){return r[d].cutVertex}).map(function(d){return e.getElementById(d)});return{cut:e.spawn(f),components:a}},"hopcroftTarjanBiconnected"),XGe={hopcroftTarjanBiconnected:Dk,htbc:Dk,htb:Dk,hopcroftTarjanBiconnectedComponents:Dk},Lk=o(function(){var e=this,r={},n=0,i=[],a=[],s=e.spawn(e),l=o(function(h){a.push(h),r[h]={index:n,low:n++,explored:!1};var f=e.getElementById(h).connectedEdges().intersection(e);if(f.forEach(function(y){var v=y.target().id();v!==h&&(v in r||l(v),r[v].explored||(r[h].low=Math.min(r[h].low,r[v].low)))}),r[h].index===r[h].low){for(var d=e.spawn();;){var p=a.pop();if(d.merge(e.getElementById(p)),r[p].low=r[h].index,r[p].explored=!0,p===h)break}var m=d.edgesWith(d),g=d.merge(m);i.push(g),s=s.difference(g)}},"stronglyConnectedSearch");return e.forEach(function(u){if(u.isNode()){var h=u.id();h in r||l(h)}}),{cut:s,components:i}},"tarjanStronglyConnected"),jGe={tarjanStronglyConnected:Lk,tsc:Lk,tscc:Lk,tarjanStronglyConnectedComponents:Lk},Fue={};[ox,Sze,Cze,_ze,Lze,Nze,Oze,lGe,ag,sg,WM,TGe,IGe,FGe,qGe,YGe,XGe,jGe].forEach(function(t){ir(Fue,t)});$ue=0,zue=1,Gue=2,Il=o(function(e){if(!(this instanceof Il))return new Il(e);this.id="Thenable/1.0.7",this.state=$ue,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof e=="function"&&e.call(this,this.fulfill.bind(this),this.reject.bind(this))},"api");Il.prototype={fulfill:o(function(e){return yle(this,zue,"fulfillValue",e)},"fulfill"),reject:o(function(e){return yle(this,Gue,"rejectReason",e)},"reject"),then:o(function(e,r){var n=this,i=new Il;return n.onFulfilled.push(xle(e,i,"fulfill")),n.onRejected.push(xle(r,i,"reject")),Vue(n),i.proxy},"then")};yle=o(function(e,r,n,i){return e.state===$ue&&(e.state=r,e[n]=i,Vue(e)),e},"deliver"),Vue=o(function(e){e.state===zue?vle(e,"onFulfilled",e.fulfillValue):e.state===Gue&&vle(e,"onRejected",e.rejectReason)},"execute"),vle=o(function(e,r,n){if(e[r].length!==0){var i=e[r];e[r]=[];var a=o(function(){for(var l=0;l0},"animatedImpl")},"animated"),clearQueue:o(function(){return o(function(){var r=this,n=r.length!==void 0,i=n?r:[r],a=this._private.cy||this;if(!a.styleEnabled())return this;for(var s=0;s0&&this.spawn(i).updateStyle().emit("class"),r},"classes"),addClass:o(function(e){return this.toggleClass(e,!0)},"addClass"),hasClass:o(function(e){var r=this[0];return r!=null&&r._private.classes.has(e)},"hasClass"),toggleClass:o(function(e,r){An(e)||(e=e.match(/\S+/g)||[]);for(var n=this,i=r===void 0,a=[],s=0,l=n.length;s0&&this.spawn(a).updateStyle().emit("class"),n},"toggleClass"),removeClass:o(function(e){return this.toggleClass(e,!1)},"removeClass"),flashClass:o(function(e,r){var n=this;if(r==null)r=250;else if(r===0)return n;return n.addClass(e),setTimeout(function(){n.removeClass(e)},r),n},"flashClass")};Gk.className=Gk.classNames=Gk.classes;Wr={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:`"(?:\\\\"|[^"])*"|'(?:\\\\'|[^'])*'`,number:Fi,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};Wr.variable="(?:[\\w-.]|(?:\\\\"+Wr.metaChar+"))+";Wr.className="(?:[\\w-]|(?:\\\\"+Wr.metaChar+"))+";Wr.value=Wr.string+"|"+Wr.number;Wr.id=Wr.variable;(function(){var t,e,r;for(t=Wr.comparatorOp.split("|"),r=0;r=0)&&e!=="="&&(Wr.comparatorOp+="|\\!"+e)})();xn=o(function(){return{checks:[]}},"newQuery"),zt={GROUP:0,COLLECTION:1,FILTER:2,DATA_COMPARE:3,DATA_EXIST:4,DATA_BOOL:5,META_COMPARE:6,STATE:7,ID:8,CLASS:9,UNDIRECTED_EDGE:10,DIRECTED_EDGE:11,NODE_SOURCE:12,NODE_TARGET:13,NODE_NEIGHBOR:14,CHILD:15,DESCENDANT:16,PARENT:17,ANCESTOR:18,COMPOUND_SPLIT:19,TRUE:20},KM=[{selector:":selected",matches:o(function(e){return e.selected()},"matches")},{selector:":unselected",matches:o(function(e){return!e.selected()},"matches")},{selector:":selectable",matches:o(function(e){return e.selectable()},"matches")},{selector:":unselectable",matches:o(function(e){return!e.selectable()},"matches")},{selector:":locked",matches:o(function(e){return e.locked()},"matches")},{selector:":unlocked",matches:o(function(e){return!e.locked()},"matches")},{selector:":visible",matches:o(function(e){return e.visible()},"matches")},{selector:":hidden",matches:o(function(e){return!e.visible()},"matches")},{selector:":transparent",matches:o(function(e){return e.transparent()},"matches")},{selector:":grabbed",matches:o(function(e){return e.grabbed()},"matches")},{selector:":free",matches:o(function(e){return!e.grabbed()},"matches")},{selector:":removed",matches:o(function(e){return e.removed()},"matches")},{selector:":inside",matches:o(function(e){return!e.removed()},"matches")},{selector:":grabbable",matches:o(function(e){return e.grabbable()},"matches")},{selector:":ungrabbable",matches:o(function(e){return!e.grabbable()},"matches")},{selector:":animated",matches:o(function(e){return e.animated()},"matches")},{selector:":unanimated",matches:o(function(e){return!e.animated()},"matches")},{selector:":parent",matches:o(function(e){return e.isParent()},"matches")},{selector:":childless",matches:o(function(e){return e.isChildless()},"matches")},{selector:":child",matches:o(function(e){return e.isChild()},"matches")},{selector:":orphan",matches:o(function(e){return e.isOrphan()},"matches")},{selector:":nonorphan",matches:o(function(e){return e.isChild()},"matches")},{selector:":compound",matches:o(function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()},"matches")},{selector:":loop",matches:o(function(e){return e.isLoop()},"matches")},{selector:":simple",matches:o(function(e){return e.isSimple()},"matches")},{selector:":active",matches:o(function(e){return e.active()},"matches")},{selector:":inactive",matches:o(function(e){return!e.active()},"matches")},{selector:":backgrounding",matches:o(function(e){return e.backgrounding()},"matches")},{selector:":nonbackgrounding",matches:o(function(e){return!e.backgrounding()},"matches")}].sort(function(t,e){return U$e(t.selector,e.selector)}),WVe=(function(){for(var t={},e,r=0;r0&&f.edgeCount>0)return hn("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(f.edgeCount>1)return hn("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;f.edgeCount===1&&hn("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},"parse"),ZVe=o(function(){if(this.toStringCache!=null)return this.toStringCache;for(var e=o(function(f){return f??""},"clean"),r=o(function(f){return Jt(f)?'"'+f+'"':e(f)},"cleanVal"),n=o(function(f){return" "+f+" "},"space"),i=o(function(f,d){var p=f.type,m=f.value;switch(p){case zt.GROUP:{var g=e(m);return g.substring(0,g.length-1)}case zt.DATA_COMPARE:{var y=f.field,v=f.operator;return"["+y+n(e(v))+r(m)+"]"}case zt.DATA_BOOL:{var x=f.operator,b=f.field;return"["+e(x)+b+"]"}case zt.DATA_EXIST:{var T=f.field;return"["+T+"]"}case zt.META_COMPARE:{var S=f.operator,w=f.field;return"[["+w+n(e(S))+r(m)+"]]"}case zt.STATE:return m;case zt.ID:return"#"+m;case zt.CLASS:return"."+m;case zt.PARENT:case zt.CHILD:return a(f.parent,d)+n(">")+a(f.child,d);case zt.ANCESTOR:case zt.DESCENDANT:return a(f.ancestor,d)+" "+a(f.descendant,d);case zt.COMPOUND_SPLIT:{var k=a(f.left,d),C=a(f.subject,d),A=a(f.right,d);return k+(k.length>0?" ":"")+C+A}case zt.TRUE:return""}},"checkToString"),a=o(function(f,d){return f.checks.reduce(function(p,m,g){return p+(d===f&&g===0?"$":"")+i(m,d)},"")},"queryToString"),s="",l=0;l1&&l=0&&(r=r.replace("!",""),d=!0),r.indexOf("@")>=0&&(r=r.replace("@",""),f=!0),(a||l||f)&&(u=!a&&!s?"":""+e,h=""+n),f&&(e=u=u.toLowerCase(),n=h=h.toLowerCase()),r){case"*=":i=u.indexOf(h)>=0;break;case"$=":i=u.indexOf(h,u.length-h.length)>=0;break;case"^=":i=u.indexOf(h)===0;break;case"=":i=e===n;break;case">":p=!0,i=e>n;break;case">=":p=!0,i=e>=n;break;case"<":p=!0,i=e1&&arguments[1]!==void 0?arguments[1]:!0;return EI(this,t,e,Kue)};o(Que,"addParent");ug.forEachUp=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return EI(this,t,e,Que)};o(sUe,"addParentAndChildren");ug.forEachUpAndDown=function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return EI(this,t,e,sUe)};ug.ancestors=ug.parents;ux=Zue={data:un.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:un.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:un.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:un.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:un.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:un.removeData({field:"rscratch",triggerEvent:!1}),id:o(function(){var e=this[0];if(e)return e._private.data.id},"id")};ux.attr=ux.data;ux.removeAttr=ux.removeData;oUe=Zue,vE={};o(RM,"defineDegreeFunction");ir(vE,{degree:RM(function(t,e){return e.source().same(e.target())?2:1}),indegree:RM(function(t,e){return e.target().same(t)?1:0}),outdegree:RM(function(t,e){return e.source().same(t)?1:0})});o(Xm,"defineDegreeBoundsFunction");ir(vE,{minDegree:Xm("degree",function(t,e){return te}),minIndegree:Xm("indegree",function(t,e){return te}),minOutdegree:Xm("outdegree",function(t,e){return te})});ir(vE,{totalDegree:o(function(e){for(var r=0,n=this.nodes(),i=0;i0,p=d;d&&(f=f[0]);var m=p?f.position():{x:0,y:0};r!==void 0?h.position(e,r+m[e]):a!==void 0&&h.position({x:a.x+m.x,y:a.y+m.y})}else{var g=n.position(),y=l?n.parent():null,v=y&&y.length>0,x=v;v&&(y=y[0]);var b=x?y.position():{x:0,y:0};return a={x:g.x-b.x,y:g.y-b.y},e===void 0?a:a[e]}else if(!s)return;return this},"relativePosition")};Ml.modelPosition=Ml.point=Ml.position;Ml.modelPositions=Ml.points=Ml.positions;Ml.renderedPoint=Ml.renderedPosition;Ml.relativePoint=Ml.relativePosition;lUe=Jue;og=Df={};Df.renderedBoundingBox=function(t){var e=this.boundingBox(t),r=this.cy(),n=r.zoom(),i=r.pan(),a=e.x1*n+i.x,s=e.x2*n+i.x,l=e.y1*n+i.y,u=e.y2*n+i.y;return{x1:a,x2:s,y1:l,y2:u,w:s-a,h:u-l}};Df.dirtyCompoundBoundsCache=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();return!e.styleEnabled()||!e.hasCompoundNodes()?this:(this.forEachUp(function(r){if(r.isParent()){var n=r._private;n.compoundBoundsClean=!1,n.bbCache=null,t||r.emitAndNotify("bounds")}}),this)};Df.updateCompoundBounds=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=this.cy();if(!e.styleEnabled()||!e.hasCompoundNodes())return this;if(!t&&e.batching())return this;function r(s){if(!s.isParent())return;var l=s._private,u=s.children(),h=s.pstyle("compound-sizing-wrt-labels").value==="include",f={width:{val:s.pstyle("min-width").pfValue,left:s.pstyle("min-width-bias-left"),right:s.pstyle("min-width-bias-right")},height:{val:s.pstyle("min-height").pfValue,top:s.pstyle("min-height-bias-top"),bottom:s.pstyle("min-height-bias-bottom")}},d=u.boundingBox({includeLabels:h,includeOverlays:!1,useCache:!1}),p=l.position;(d.w===0||d.h===0)&&(d={w:s.pstyle("width").pfValue,h:s.pstyle("height").pfValue},d.x1=p.x-d.w/2,d.x2=p.x+d.w/2,d.y1=p.y-d.h/2,d.y2=p.y+d.h/2);function m(L,I,R){var E=0,_=0,D=I+R;return L>0&&D>0&&(E=I/D*L,_=R/D*L),{biasDiff:E,biasComplementDiff:_}}o(m,"computeBiasValues");function g(L,I,R,E){if(R.units==="%")switch(E){case"width":return L>0?R.pfValue*L:0;case"height":return I>0?R.pfValue*I:0;case"average":return L>0&&I>0?R.pfValue*(L+I)/2:0;case"min":return L>0&&I>0?L>I?R.pfValue*I:R.pfValue*L:0;case"max":return L>0&&I>0?L>I?R.pfValue*L:R.pfValue*I:0;default:return 0}else return R.units==="px"?R.pfValue:0}o(g,"computePaddingValues");var y=f.width.left.value;f.width.left.units==="px"&&f.width.val>0&&(y=y*100/f.width.val);var v=f.width.right.value;f.width.right.units==="px"&&f.width.val>0&&(v=v*100/f.width.val);var x=f.height.top.value;f.height.top.units==="px"&&f.height.val>0&&(x=x*100/f.height.val);var b=f.height.bottom.value;f.height.bottom.units==="px"&&f.height.val>0&&(b=b*100/f.height.val);var T=m(f.width.val-d.w,y,v),S=T.biasDiff,w=T.biasComplementDiff,k=m(f.height.val-d.h,x,b),C=k.biasDiff,A=k.biasComplementDiff;l.autoPadding=g(d.w,d.h,s.pstyle("padding"),s.pstyle("padding-relative-to").value),l.autoWidth=Math.max(d.w,f.width.val),p.x=(-S+d.x1+d.x2+w)/2,l.autoHeight=Math.max(d.h,f.height.val),p.y=(-C+d.y1+d.y2+A)/2}o(r,"update");for(var n=0;ne.x2?i:e.x2,e.y1=ne.y2?a:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},"updateBounds"),mf=o(function(e,r){return r==null?e:Nl(e,r.x1,r.y1,r.x2,r.y2)},"updateBoundsFromBox"),Y2=o(function(e,r,n){return Us(e,r,n)},"prefixedProperty"),Rk=o(function(e,r,n){if(!r.cy().headless()){var i=r._private,a=i.rstyle,s=a.arrowWidth/2,l=r.pstyle(n+"-arrow-shape").value,u,h;if(l!=="none"){n==="source"?(u=a.srcX,h=a.srcY):n==="target"?(u=a.tgtX,h=a.tgtY):(u=a.midX,h=a.midY);var f=i.arrowBounds=i.arrowBounds||{},d=f[n]=f[n]||{};d.x1=u-s,d.y1=h-s,d.x2=u+s,d.y2=h+s,d.w=d.x2-d.x1,d.h=d.y2-d.y1,$k(d,1),Nl(e,d.x1,d.y1,d.x2,d.y2)}}},"updateBoundsFromArrow"),NM=o(function(e,r,n){if(!r.cy().headless()){var i;n?i=n+"-":i="";var a=r._private,s=a.rstyle,l=r.pstyle(i+"label").strValue;if(l){var u=r.pstyle("text-halign"),h=r.pstyle("text-valign"),f=Y2(s,"labelWidth",n),d=Y2(s,"labelHeight",n),p=Y2(s,"labelX",n),m=Y2(s,"labelY",n),g=r.pstyle(i+"text-margin-x").pfValue,y=r.pstyle(i+"text-margin-y").pfValue,v=r.isEdge(),x=r.pstyle(i+"text-rotation"),b=r.pstyle("text-outline-width").pfValue,T=r.pstyle("text-border-width").pfValue,S=T/2,w=r.pstyle("text-background-padding").pfValue,k=2,C=d,A=f,L=A/2,I=C/2,R,E,_,D;if(v)R=p-L,E=p+L,_=m-I,D=m+I;else{switch(u.value){case"left":R=p-A,E=p;break;case"center":R=p-L,E=p+L;break;case"right":R=p,E=p+A;break}switch(h.value){case"top":_=m-C,D=m;break;case"center":_=m-I,D=m+I;break;case"bottom":_=m,D=m+C;break}}var O=g-Math.max(b,S)-w-k,N=g+Math.max(b,S)+w+k,P=y-Math.max(b,S)-w-k,B=y+Math.max(b,S)+w+k;R+=O,E+=N,_+=P,D+=B;var F=n||"main",V=a.labelBounds,$=V[F]=V[F]||{};$.x1=R,$.y1=_,$.x2=E,$.y2=D,$.w=E-R,$.h=D-_,$.leftPad=O,$.rightPad=N,$.topPad=P,$.botPad=B;var U=v&&x.strValue==="autorotate",j=x.pfValue!=null&&x.pfValue!==0;if(U||j){var ee=U?Y2(a.rstyle,"labelAngle",n):x.pfValue,q=Math.cos(ee),oe=Math.sin(ee),Q=(R+E)/2,ue=(_+D)/2;if(!v){switch(u.value){case"left":Q=E;break;case"right":Q=R;break}switch(h.value){case"top":ue=D;break;case"bottom":ue=_;break}}var te=o(function(Te,W){return Te=Te-Q,W=W-ue,{x:Te*q-W*oe+Q,y:Te*oe+W*q+ue}},"rotate"),re=te(R,_),J=te(R,D),K=te(E,_),ae=te(E,D);R=Math.min(re.x,J.x,K.x,ae.x),E=Math.max(re.x,J.x,K.x,ae.x),_=Math.min(re.y,J.y,K.y,ae.y),D=Math.max(re.y,J.y,K.y,ae.y)}var Z=F+"Rot",de=V[Z]=V[Z]||{};de.x1=R,de.y1=_,de.x2=E,de.y2=D,de.w=E-R,de.h=D-_,Nl(e,R,_,E,D),Nl(a.labelBounds.all,R,_,E,D)}return e}},"updateBoundsFromLabel"),vce=o(function(e,r){if(!r.cy().headless()){var n=r.pstyle("outline-opacity").value,i=r.pstyle("outline-width").value,a=r.pstyle("outline-offset").value,s=i+a;the(e,r,n,s,"outside",s/2)}},"updateBoundsFromOutline"),the=o(function(e,r,n,i,a,s){if(!(n===0||i<=0||a==="inside")){var l=r.cy(),u=r.pstyle("shape").value,h=l.renderer().nodeShapes[u],f=r.position(),d=f.x,p=f.y,m=r.width(),g=r.height();if(h.hasMiterBounds){a==="center"&&(i/=2);var y=h.miterBounds(d,p,m,g,i);mf(e,y)}else s!=null&&s>0&&zk(e,[s,s,s,s])}},"updateBoundsFromMiter"),cUe=o(function(e,r){if(!r.cy().headless()){var n=r.pstyle("border-opacity").value,i=r.pstyle("border-width").pfValue,a=r.pstyle("border-position").value;the(e,r,n,i,a)}},"updateBoundsFromMiterBorder"),uUe=o(function(e,r){var n=e._private.cy,i=n.styleEnabled(),a=n.headless(),s=cs(),l=e._private,u=e.isNode(),h=e.isEdge(),f,d,p,m,g,y,v=l.rstyle,x=u&&i?e.pstyle("bounds-expansion").pfValue:[0],b=o(function(ne){return ne.pstyle("display").value!=="none"},"isDisplayed"),T=!i||b(e)&&(!h||b(e.source())&&b(e.target()));if(T){var S=0,w=0;i&&r.includeOverlays&&(S=e.pstyle("overlay-opacity").value,S!==0&&(w=e.pstyle("overlay-padding").value));var k=0,C=0;i&&r.includeUnderlays&&(k=e.pstyle("underlay-opacity").value,k!==0&&(C=e.pstyle("underlay-padding").value));var A=Math.max(w,C),L=0,I=0;if(i&&(L=e.pstyle("width").pfValue,I=L/2),u&&r.includeNodes){var R=e.position();g=R.x,y=R.y;var E=e.outerWidth(),_=E/2,D=e.outerHeight(),O=D/2;f=g-_,d=g+_,p=y-O,m=y+O,Nl(s,f,p,d,m),i&&vce(s,e),i&&r.includeOutlines&&!a&&vce(s,e),i&&cUe(s,e)}else if(h&&r.includeEdges)if(i&&!a){var N=e.pstyle("curve-style").strValue;if(f=Math.min(v.srcX,v.midX,v.tgtX),d=Math.max(v.srcX,v.midX,v.tgtX),p=Math.min(v.srcY,v.midY,v.tgtY),m=Math.max(v.srcY,v.midY,v.tgtY),f-=I,d+=I,p-=I,m+=I,Nl(s,f,p,d,m),N==="haystack"){var P=v.haystackPts;if(P&&P.length===2){if(f=P[0].x,p=P[0].y,d=P[1].x,m=P[1].y,f>d){var B=f;f=d,d=B}if(p>m){var F=p;p=m,m=F}Nl(s,f-I,p-I,d+I,m+I)}}else if(N==="bezier"||N==="unbundled-bezier"||gf(N,"segments")||gf(N,"taxi")){var V;switch(N){case"bezier":case"unbundled-bezier":V=v.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":V=v.linePts;break}if(V!=null)for(var $=0;$d){var Q=f;f=d,d=Q}if(p>m){var ue=p;p=m,m=ue}f-=I,d+=I,p-=I,m+=I,Nl(s,f,p,d,m)}if(i&&r.includeEdges&&h&&(Rk(s,e,"mid-source"),Rk(s,e,"mid-target"),Rk(s,e,"source"),Rk(s,e,"target")),i){var te=e.pstyle("ghost").value==="yes";if(te){var re=e.pstyle("ghost-offset-x").pfValue,J=e.pstyle("ghost-offset-y").pfValue;Nl(s,s.x1+re,s.y1+J,s.x2+re,s.y2+J)}}var K=l.bodyBounds=l.bodyBounds||{};nle(K,s),zk(K,x),$k(K,1),i&&(f=s.x1,d=s.x2,p=s.y1,m=s.y2,Nl(s,f-A,p-A,d+A,m+A));var ae=l.overlayBounds=l.overlayBounds||{};nle(ae,s),zk(ae,x),$k(ae,1);var Z=l.labelBounds=l.labelBounds||{};Z.all!=null?qze(Z.all):Z.all=cs(),i&&r.includeLabels&&(r.includeMainLabels&&NM(s,e,null),h&&(r.includeSourceLabels&&NM(s,e,"source"),r.includeTargetLabels&&NM(s,e,"target")))}return s.x1=Xo(s.x1),s.y1=Xo(s.y1),s.x2=Xo(s.x2),s.y2=Xo(s.y2),s.w=Xo(s.x2-s.x1),s.h=Xo(s.y2-s.y1),s.w>0&&s.h>0&&T&&(zk(s,x),$k(s,1)),s},"boundingBoxImpl"),rhe=o(function(e){var r=0,n=o(function(s){return(s?1:0)<=0;l--)s(l);return this};Cf.removeAllListeners=function(){return this.removeListener("*")};Cf.emit=Cf.trigger=function(t,e,r){var n=this.listeners,i=n.length;return this.emitting++,An(e)||(e=[e]),CUe(this,function(a,s){r!=null&&(n=[{event:s.event,type:s.type,namespace:s.namespace,callback:r}],i=n.length);for(var l=o(function(){var f=n[u];if(f.type===s.type&&(!f.namespace||f.namespace===s.namespace||f.namespace===EUe)&&a.eventMatches(a.context,f,s)){var d=[s];e!=null&&gze(d,e),a.beforeEmit(a.context,f,s),f.conf&&f.conf.one&&(a.listeners=a.listeners.filter(function(g){return g!==f}));var p=a.callbackContext(a.context,f,s),m=f.callback.apply(p,d);a.afterEmit(a.context,f,s),m===!1&&(s.stopPropagation(),s.preventDefault())}},"_loop2"),u=0;u1&&!s){var l=this.length-1,u=this[l],h=u._private.data.id;this[l]=void 0,this[e]=u,a.set(h,{ele:u,index:e})}return this.length--,this},"unmergeAt"),unmergeOne:o(function(e){e=e[0];var r=this._private,n=e._private.data.id,i=r.map,a=i.get(n);if(!a)return this;var s=a.index;return this.unmergeAt(s),this},"unmergeOne"),unmerge:o(function(e){var r=this._private.cy;if(!e)return this;if(e&&Jt(e)){var n=e;e=r.mutableElements().filter(n)}for(var i=0;i=0;r--){var n=this[r];e(n)&&this.unmergeAt(r)}return this},"unmergeBy"),map:o(function(e,r){for(var n=[],i=this,a=0;an&&(n=u,i=l)}return{value:n,ele:i}},"max"),min:o(function(e,r){for(var n=1/0,i,a=this,s=0;s=0&&a"u"?"undefined":$i(Symbol))!=e&&$i(Symbol.iterator)!=e;r&&(rE[Symbol.iterator]=function(){var n=this,i={value:void 0,done:!1},a=0,s=this.length;return cue({next:o(function(){return a1&&arguments[1]!==void 0?arguments[1]:!0,n=this[0],i=n.cy();if(i.styleEnabled()&&n){n._private.styleDirty&&(n._private.styleDirty=!1,i.style().apply(n));var a=n._private.style[e];return a??(r?i.style().getDefaultProperty(e):null)}},"parsedStyle"),numericStyle:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r){var n=r.pstyle(e);return n.pfValue!==void 0?n.pfValue:n.value}},"numericStyle"),numericStyleUnits:o(function(e){var r=this[0];if(r.cy().styleEnabled()&&r)return r.pstyle(e).units},"numericStyleUnits"),renderedStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=this[0];if(n)return r.style().getRenderedStyle(n,e)},"renderedStyle"),style:o(function(e,r){var n=this.cy();if(!n.styleEnabled())return this;var i=!1,a=n.style();if(Yr(e)){var s=e;a.applyBypass(this,s,i),this.emitAndNotify("style")}else if(Jt(e))if(r===void 0){var l=this[0];return l?a.getStylePropertyValue(l,e):void 0}else a.applyBypass(this,e,r,i),this.emitAndNotify("style");else if(e===void 0){var u=this[0];return u?a.getRawStyle(u):void 0}return this},"style"),removeStyle:o(function(e){var r=this.cy();if(!r.styleEnabled())return this;var n=!1,i=r.style(),a=this;if(e===void 0)for(var s=0;s0&&e.push(f[0]),e.push(l[0])}return this.spawn(e,!0).filter(t)},"neighborhood"),closedNeighborhood:o(function(e){return this.neighborhood().add(this).filter(e)},"closedNeighborhood"),openNeighborhood:o(function(e){return this.neighborhood(e)},"openNeighborhood")});Fa.neighbourhood=Fa.neighborhood;Fa.closedNeighbourhood=Fa.closedNeighborhood;Fa.openNeighbourhood=Fa.openNeighborhood;ir(Fa,{source:jo(o(function(e){var r=this[0],n;return r&&(n=r._private.source||r.cy().collection()),n&&e?n.filter(e):n},"sourceImpl"),"source"),target:jo(o(function(e){var r=this[0],n;return r&&(n=r._private.target||r.cy().collection()),n&&e?n.filter(e):n},"targetImpl"),"target"),sources:Dce({attr:"source"}),targets:Dce({attr:"target"})});o(Dce,"defineSourceFunction");ir(Fa,{edgesWith:jo(Lce(),"edgesWith"),edgesTo:jo(Lce({thisIsSrc:!0}),"edgesTo")});o(Lce,"defineEdgesWithFunction");ir(Fa,{connectedEdges:jo(function(t){for(var e=[],r=this,n=0;n0);return s},"components"),component:o(function(){var e=this[0];return e.cy().mutableElements().components(e)[0]},"component")});Fa.componentsOf=Fa.components;xa=o(function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(e===void 0){Kn("A collection must have a reference to the core");return}var a=new zu,s=!1;if(!r)r=[];else if(r.length>0&&Yr(r[0])&&!gx(r[0])){s=!0;for(var l=[],u=new hg,h=0,f=r.length;h0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=r.cy(),i=n._private,a=[],s=[],l,u=0,h=r.length;u0){for(var F=l.length===r.length?r:new xa(n,l),V=0;V0&&arguments[0]!==void 0?arguments[0]:!0,e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=this,n=[],i={},a=r._private.cy;function s(D){for(var O=D._private.edges,N=0;N0&&(t?R.emitAndNotify("remove"):e&&R.emit("remove"));for(var E=0;Ef&&Math.abs(g.v)>f;);return p?function(y){return u[y*(u.length-1)|0]}:h},"springRK4Factory")})(),In=o(function(e,r,n,i){var a=PUe(e,r,n,i);return function(s,l,u){return s+(l-s)*a(u)}},"cubicBezier"),Uk={linear:o(function(e,r,n){return e+(r-e)*n},"linear"),ease:In(.25,.1,.25,1),"ease-in":In(.42,0,1,1),"ease-out":In(0,0,.58,1),"ease-in-out":In(.42,0,.58,1),"ease-in-sine":In(.47,0,.745,.715),"ease-out-sine":In(.39,.575,.565,1),"ease-in-out-sine":In(.445,.05,.55,.95),"ease-in-quad":In(.55,.085,.68,.53),"ease-out-quad":In(.25,.46,.45,.94),"ease-in-out-quad":In(.455,.03,.515,.955),"ease-in-cubic":In(.55,.055,.675,.19),"ease-out-cubic":In(.215,.61,.355,1),"ease-in-out-cubic":In(.645,.045,.355,1),"ease-in-quart":In(.895,.03,.685,.22),"ease-out-quart":In(.165,.84,.44,1),"ease-in-out-quart":In(.77,0,.175,1),"ease-in-quint":In(.755,.05,.855,.06),"ease-out-quint":In(.23,1,.32,1),"ease-in-out-quint":In(.86,0,.07,1),"ease-in-expo":In(.95,.05,.795,.035),"ease-out-expo":In(.19,1,.22,1),"ease-in-out-expo":In(1,0,0,1),"ease-in-circ":In(.6,.04,.98,.335),"ease-out-circ":In(.075,.82,.165,1),"ease-in-out-circ":In(.785,.135,.15,.86),spring:o(function(e,r,n){if(n===0)return Uk.linear;var i=BUe(e,r,n);return function(a,s,l){return a+(s-a)*i(l)}},"spring"),"cubic-bezier":In};o(Nce,"getEasedValue");o(Mce,"getValue");o(jm,"ease");o(FUe,"step$1");o(j2,"valid");o($Ue,"startAnimation");o(Ice,"stepAll");zUe={animate:un.animate(),animation:un.animation(),animated:un.animated(),clearQueue:un.clearQueue(),delay:un.delay(),delayAnimation:un.delayAnimation(),stop:un.stop(),addToAnimationPool:o(function(e){var r=this;r.styleEnabled()&&r._private.aniEles.merge(e)},"addToAnimationPool"),stopAnimationLoop:o(function(){this._private.animationsRunning=!1},"stopAnimationLoop"),startAnimationLoop:o(function(){var e=this;if(e._private.animationsRunning=!0,!e.styleEnabled())return;function r(){e._private.animationsRunning&&Qk(o(function(a){Ice(a,e),r()},"animationStep"))}o(r,"headlessStep");var n=e.renderer();n&&n.beforeRender?n.beforeRender(o(function(a,s){Ice(s,e)},"rendererAnimationStep"),n.beforeRenderPriorities.animations):r()},"startAnimationLoop")},GUe={qualifierCompare:o(function(e,r){return e==null||r==null?e==null&&r==null:e.sameText(r)},"qualifierCompare"),eventMatches:o(function(e,r,n){var i=r.qualifier;return i!=null?e!==n.target&&gx(n.target)&&i.matches(n.target):!0},"eventMatches"),addEventFields:o(function(e,r){r.cy=e,r.target=e},"addEventFields"),callbackContext:o(function(e,r,n){return r.qualifier!=null?n.target:e},"callbackContext")},Ik=o(function(e){return Jt(e)?new Ef(e):e},"argSelector"),dhe={createEmitter:o(function(){var e=this._private;return e.emitter||(e.emitter=new xE(GUe,this)),this},"createEmitter"),emitter:o(function(){return this._private.emitter},"emitter"),on:o(function(e,r,n){return this.emitter().on(e,Ik(r),n),this},"on"),removeListener:o(function(e,r,n){return this.emitter().removeListener(e,Ik(r),n),this},"removeListener"),removeAllListeners:o(function(){return this.emitter().removeAllListeners(),this},"removeAllListeners"),one:o(function(e,r,n){return this.emitter().one(e,Ik(r),n),this},"one"),once:o(function(e,r,n){return this.emitter().one(e,Ik(r),n),this},"once"),emit:o(function(e,r){return this.emitter().emit(e,r),this},"emit"),emitAndNotify:o(function(e,r){return this.emit(e),this.notify(e,r),this},"emitAndNotify")};un.eventAliasesOn(dhe);ZM={png:o(function(e){var r=this._private.renderer;return e=e||{},r.png(e)},"png"),jpg:o(function(e){var r=this._private.renderer;return e=e||{},e.bg=e.bg||"#fff",r.jpg(e)},"jpg")};ZM.jpeg=ZM.jpg;Hk={layout:o(function(e){var r=this;if(e==null){Kn("Layout options must be specified to make a layout");return}if(e.name==null){Kn("A `name` must be specified to make a layout");return}var n=e.name,i=r.extension("layout",n);if(i==null){Kn("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?");return}var a;Jt(e.eles)?a=r.$(e.eles):a=e.eles!=null?e.eles:r.$();var s=new i(ir({},e,{cy:r,eles:a}));return s},"layout")};Hk.createLayout=Hk.makeLayout=Hk.layout;VUe={notify:o(function(e,r){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var i=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();r!=null&&i.merge(r);return}if(n.notificationsEnabled){var a=this.renderer();this.destroyed()||!a||a.notify(e,r)}},"notify"),notifications:o(function(e){var r=this._private;return e===void 0?r.notificationsEnabled:(r.notificationsEnabled=!!e,this)},"notifications"),noNotifications:o(function(e){this.notifications(!1),e(),this.notifications(!0)},"noNotifications"),batching:o(function(){return this._private.batchCount>0},"batching"),startBatch:o(function(){var e=this._private;return e.batchCount==null&&(e.batchCount=0),e.batchCount===0&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},"startBatch"),endBatch:o(function(){var e=this._private;if(e.batchCount===0)return this;if(e.batchCount--,e.batchCount===0){e.batchStyleEles.updateStyle();var r=this.renderer();Object.keys(e.batchNotifications).forEach(function(n){var i=e.batchNotifications[n];i.empty()?r.notify(n):r.notify(n,i)})}return this},"endBatch"),batch:o(function(e){return this.startBatch(),e(),this.endBatch(),this},"batch"),batchData:o(function(e){var r=this;return this.batch(function(){for(var n=Object.keys(e),i=0;i0;)r.removeChild(r.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach(function(n){var i=n._private;i.rscratch={},i.rstyle={},i.animation.current=[],i.animation.queue=[]})},"destroyRenderer"),onRender:o(function(e){return this.on("render",e)},"onRender"),offRender:o(function(e){return this.off("render",e)},"offRender")};JM.invalidateDimensions=JM.resize;qk={collection:o(function(e,r){return Jt(e)?this.$(e):fo(e)?e.collection():An(e)?(r||(r={}),new xa(this,e,r.unique,r.removed)):new xa(this)},"collection"),nodes:o(function(e){var r=this.$(function(n){return n.isNode()});return e?r.filter(e):r},"nodes"),edges:o(function(e){var r=this.$(function(n){return n.isEdge()});return e?r.filter(e):r},"edges"),$:o(function(e){var r=this._private.elements;return e?r.filter(e):r.spawnSelf()},"$"),mutableElements:o(function(){return this._private.elements},"mutableElements")};qk.elements=qk.filter=qk.$;na={},rx="t",HUe="f";na.apply=function(t){for(var e=this,r=e._private,n=r.cy,i=n.collection(),a=0;a0;if(p||d&&m){var g=void 0;p&&m||p?g=h.properties:m&&(g=h.mappedProperties);for(var y=0;y1&&(S=1),l.color){var k=n.valueMin[0],C=n.valueMax[0],A=n.valueMin[1],L=n.valueMax[1],I=n.valueMin[2],R=n.valueMax[2],E=n.valueMin[3]==null?1:n.valueMin[3],_=n.valueMax[3]==null?1:n.valueMax[3],D=[Math.round(k+(C-k)*S),Math.round(A+(L-A)*S),Math.round(I+(R-I)*S),Math.round(E+(_-E)*S)];a={bypass:n.bypass,name:n.name,value:D,strValue:"rgb("+D[0]+", "+D[1]+", "+D[2]+")"}}else if(l.number){var O=n.valueMin+(n.valueMax-n.valueMin)*S;a=this.parse(n.name,O,n.bypass,p)}else return!1;if(!a)return y(),!1;a.mapping=n,n=a;break}case s.data:{for(var N=n.field.split("."),P=d.data,B=0;B0&&a>0){for(var l={},u=!1,h=0;h0?t.delayAnimation(s).play().promise().then(T):T()}).then(function(){return t.animation({style:l,duration:a,easing:t.pstyle("transition-timing-function").value,queue:!1}).play().promise()}).then(function(){r.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1})}else n.transitioning&&(this.removeBypasses(t,i),t.emitAndNotify("style"),n.transitioning=!1)};na.checkTrigger=function(t,e,r,n,i,a){var s=this.properties[e],l=i(s);t.removed()||l!=null&&l(r,n,t)&&a(s)};na.checkZOrderTrigger=function(t,e,r,n){var i=this;this.checkTrigger(t,e,r,n,function(a){return a.triggersZOrder},function(){i._private.cy.notify("zorder",t)})};na.checkBoundsTrigger=function(t,e,r,n){this.checkTrigger(t,e,r,n,function(i){return i.triggersBounds},function(i){t.dirtyCompoundBoundsCache(),t.dirtyBoundingBoxCache()})};na.checkConnectedEdgesBoundsTrigger=function(t,e,r,n){this.checkTrigger(t,e,r,n,function(i){return i.triggersBoundsOfConnectedEdges},function(i){t.connectedEdges().forEach(function(a){a.dirtyBoundingBoxCache()})})};na.checkParallelEdgesBoundsTrigger=function(t,e,r,n){this.checkTrigger(t,e,r,n,function(i){return i.triggersBoundsOfParallelEdges},function(i){t.parallelEdges().forEach(function(a){a.dirtyBoundingBoxCache()})})};na.checkTriggers=function(t,e,r,n){t.dirtyStyleCache(),this.checkZOrderTrigger(t,e,r,n),this.checkBoundsTrigger(t,e,r,n),this.checkConnectedEdgesBoundsTrigger(t,e,r,n),this.checkParallelEdgesBoundsTrigger(t,e,r,n)};kx={};kx.applyBypass=function(t,e,r,n){var i=this,a=[],s=!0;if(e==="*"||e==="**"){if(r!==void 0)for(var l=0;li.length?n=n.substr(i.length):n=""}o(l,"removeSelAndBlockFromRemaining");function u(){a.length>s.length?a=a.substr(s.length):a=""}for(o(u,"removePropAndValFromRem");;){var h=n.match(/^\s*$/);if(h)break;var f=n.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!f){hn("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+n);break}i=f[0];var d=f[1];if(d!=="core"){var p=new Ef(d);if(p.invalid){hn("Skipping parsing of block: Invalid selector found in string stylesheet: "+d),l();continue}}var m=f[2],g=!1;a=m;for(var y=[];;){var v=a.match(/^\s*$/);if(v)break;var x=a.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!x){hn("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+m),g=!0;break}s=x[0];var b=x[1],T=x[2],S=e.properties[b];if(!S){hn("Skipping property: Invalid property name in: "+s),u();continue}var w=r.parse(b,T);if(!w){hn("Skipping property: Invalid property definition in: "+s),u();continue}y.push({name:b,val:T}),u()}if(g){l();break}r.selector(d);for(var k=0;k=7&&e[0]==="d"&&(f=new RegExp(l.data.regex).exec(e))){if(r)return!1;var p=l.data;return{name:t,value:f,strValue:""+e,mapped:p,field:f[1],bypass:r}}else if(e.length>=10&&e[0]==="m"&&(d=new RegExp(l.mapData.regex).exec(e))){if(r||h.multiple)return!1;var m=l.mapData;if(!(h.color||h.number))return!1;var g=this.parse(t,d[4]);if(!g||g.mapped)return!1;var y=this.parse(t,d[5]);if(!y||y.mapped)return!1;if(g.pfValue===y.pfValue||g.strValue===y.strValue)return hn("`"+t+": "+e+"` is not a valid mapper because the output range is zero; converting to `"+t+": "+g.strValue+"`"),this.parse(t,g.strValue);if(h.color){var v=g.value,x=y.value,b=v[0]===x[0]&&v[1]===x[1]&&v[2]===x[2]&&(v[3]===x[3]||(v[3]==null||v[3]===1)&&(x[3]==null||x[3]===1));if(b)return!1}return{name:t,value:d,strValue:""+e,mapped:m,field:d[1],fieldMin:parseFloat(d[2]),fieldMax:parseFloat(d[3]),valueMin:g.value,valueMax:y.value,bypass:r}}}if(h.multiple&&n!=="multiple"){var T;if(u?T=e.split(/\s+/):An(e)?T=e:T=[e],h.evenMultiple&&T.length%2!==0)return null;for(var S=[],w=[],k=[],C="",A=!1,L=0;L0?" ":"")+I.strValue}return h.validate&&!h.validate(S,w)?null:h.singleEnum&&A?S.length===1&&Jt(S[0])?{name:t,value:S[0],strValue:S[0],bypass:r}:null:{name:t,value:S,pfValue:k,strValue:C,bypass:r,units:w}}var R=o(function(){for(var te=0;teh.max||h.strictMax&&e===h.max))return null;var N={name:t,value:e,strValue:""+e+(E||""),units:E,bypass:r};return h.unitless||E!=="px"&&E!=="em"?N.pfValue=e:N.pfValue=E==="px"||!E?e:this.getEmSizeInPixels()*e,(E==="ms"||E==="s")&&(N.pfValue=E==="ms"?e:1e3*e),(E==="deg"||E==="rad")&&(N.pfValue=E==="rad"?e:Gze(e)),E==="%"&&(N.pfValue=e/100),N}else if(h.propList){var P=[],B=""+e;if(B!=="none"){for(var F=B.split(/\s*,\s*|\s+/),V=0;V0&&l>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0){u=Math.min((s-2*r)/n.w,(l-2*r)/n.h),u=u>this._private.maxZoom?this._private.maxZoom:u,u=u=n.minZoom&&(n.maxZoom=r),this},"zoomRange"),minZoom:o(function(e){return e===void 0?this._private.minZoom:this.zoomRange({min:e})},"minZoom"),maxZoom:o(function(e){return e===void 0?this._private.maxZoom:this.zoomRange({max:e})},"maxZoom"),getZoomedViewport:o(function(e){var r=this._private,n=r.pan,i=r.zoom,a,s,l=!1;if(r.zoomingEnabled||(l=!0),At(e)?s=e:Yr(e)&&(s=e.level,e.position!=null?a=fE(e.position,i,n):e.renderedPosition!=null&&(a=e.renderedPosition),a!=null&&!r.panningEnabled&&(l=!0)),s=s>r.maxZoom?r.maxZoom:s,s=sr.maxZoom||!r.zoomingEnabled?s=!0:(r.zoom=u,a.push("zoom"))}if(i&&(!s||!e.cancelOnFailedZoom)&&r.panningEnabled){var h=e.pan;At(h.x)&&(r.pan.x=h.x,l=!1),At(h.y)&&(r.pan.y=h.y,l=!1),l||a.push("pan")}return a.length>0&&(a.push("viewport"),this.emit(a.join(" ")),this.notify("viewport")),this},"viewport"),center:o(function(e){var r=this.getCenterPan(e);return r&&(this._private.pan=r,this.emit("pan viewport"),this.notify("viewport")),this},"center"),getCenterPan:o(function(e,r){if(this._private.panningEnabled){if(Jt(e)){var n=e;e=this.mutableElements().filter(n)}else fo(e)||(e=this.mutableElements());if(e.length!==0){var i=e.boundingBox(),a=this.width(),s=this.height();r=r===void 0?this._private.zoom:r;var l={x:(a-r*(i.x1+i.x2))/2,y:(s-r*(i.y1+i.y2))/2};return l}}},"getCenterPan"),reset:o(function(){return!this._private.panningEnabled||!this._private.zoomingEnabled?this:(this.viewport({pan:{x:0,y:0},zoom:1}),this)},"reset"),invalidateSize:o(function(){this._private.sizeCache=null},"invalidateSize"),size:o(function(){var e=this._private,r=e.container,n=this;return e.sizeCache=e.sizeCache||(r?(function(){var i=n.window().getComputedStyle(r),a=o(function(l){return parseFloat(i.getPropertyValue(l))},"val");return{width:r.clientWidth-a("padding-left")-a("padding-right"),height:r.clientHeight-a("padding-top")-a("padding-bottom")}})():{width:1,height:1})},"size"),width:o(function(){return this.size().width},"width"),height:o(function(){return this.size().height},"height"),extent:o(function(){var e=this._private.pan,r=this._private.zoom,n=this.renderedExtent(),i={x1:(n.x1-e.x)/r,x2:(n.x2-e.x)/r,y1:(n.y1-e.y)/r,y2:(n.y2-e.y)/r};return i.w=i.x2-i.x1,i.h=i.y2-i.y1,i},"extent"),renderedExtent:o(function(){var e=this.width(),r=this.height();return{x1:0,y1:0,x2:e,y2:r,w:e,h:r}},"renderedExtent"),multiClickDebounceTime:o(function(e){if(e)this._private.multiClickDebounceTime=e;else return this._private.multiClickDebounceTime;return this},"multiClickDebounceTime")};kp.centre=kp.center;kp.autolockNodes=kp.autolock;kp.autoungrabifyNodes=kp.autoungrabify;fx={data:un.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:un.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:un.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:un.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};fx.attr=fx.data;fx.removeAttr=fx.removeData;dx=o(function(e){var r=this;e=ir({},e);var n=e.container;n&&!Kk(n)&&Kk(n[0])&&(n=n[0]);var i=n?n._cyreg:null;i=i||{},i&&i.cy&&(i.cy.destroy(),i={});var a=i.readies=i.readies||[];n&&(n._cyreg=i),i.cy=r;var s=Bi!==void 0&&n!==void 0&&!e.headless,l=e;l.layout=ir({name:s?"grid":"null"},l.layout),l.renderer=ir({name:s?"canvas":"null"},l.renderer);var u=o(function(g,y,v){return y!==void 0?y:v!==void 0?v:g},"defVal"),h=this._private={container:n,ready:!1,options:l,elements:new xa(this),listeners:[],aniEles:new xa(this),data:l.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:u(!0,l.zoomingEnabled),userZoomingEnabled:u(!0,l.userZoomingEnabled),panningEnabled:u(!0,l.panningEnabled),userPanningEnabled:u(!0,l.userPanningEnabled),boxSelectionEnabled:u(!0,l.boxSelectionEnabled),autolock:u(!1,l.autolock,l.autolockNodes),autoungrabify:u(!1,l.autoungrabify,l.autoungrabifyNodes),autounselectify:u(!1,l.autounselectify),styleEnabled:l.styleEnabled===void 0?s:l.styleEnabled,zoom:At(l.zoom)?l.zoom:1,pan:{x:Yr(l.pan)&&At(l.pan.x)?l.pan.x:0,y:Yr(l.pan)&&At(l.pan.y)?l.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:u(250,l.multiClickDebounceTime)};this.createEmitter(),this.selectionType(l.selectionType),this.zoomRange({min:l.minZoom,max:l.maxZoom});var f=o(function(g,y){var v=g.some(O$e);if(v)return fg.all(g).then(y);y(g)},"loadExtData");h.styleEnabled&&r.setStyle([]);var d=ir({},l,l.renderer);r.initRenderer(d);var p=o(function(g,y,v){r.notifications(!1);var x=r.mutableElements();x.length>0&&x.remove(),g!=null&&(Yr(g)||An(g))&&r.add(g),r.one("layoutready",function(T){r.notifications(!0),r.emit(T),r.one("load",y),r.emitAndNotify("load")}).one("layoutstop",function(){r.one("done",v),r.emit("done")});var b=ir({},r._private.options.layout);b.eles=r.elements(),r.layout(b).run()},"setElesAndLayout");f([l.style,l.elements],function(m){var g=m[0],y=m[1];h.styleEnabled&&r.style().append(g),p(y,function(){r.startAnimationLoop(),h.ready=!0,oi(l.ready)&&r.on("ready",l.ready);for(var v=0;v0,l=!!t.boundingBox,u=cs(l?t.boundingBox:structuredClone(e.extent())),h;if(fo(t.roots))h=t.roots;else if(An(t.roots)){for(var f=[],d=0;d0;){var D=_(),O=L(D,R);if(O)D.outgoers().filter(function(Ve){return Ve.isNode()&&r.has(Ve)}).forEach(E);else if(O===null){hn("Detected double maximal shift for node `"+D.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}var N=0;if(t.avoidOverlap)for(var P=0;P0&&x[0].length<=3?Le/2:0),Ne=2*Math.PI/x[Ye].length*He;return Ye===0&&x[0].length===1&&(Ie=1),{x:K.x+Ie*Math.cos(Ne),y:K.y+Ie*Math.sin(Ne)}}else{var Ce=x[Ye].length,Fe=Math.max(Ce===1?0:l?(u.w-t.padding*2-ae.w)/((t.grid?de:Ce)-1):(u.w-t.padding*2-ae.w)/((t.grid?de:Ce)+1),N),fe={x:K.x+(He+1-(Ce+1)/2)*Fe,y:K.y+(Ye+1-(q+1)/2)*Z};return fe}},"getPositionTopBottom"),Te={downward:0,leftward:90,upward:180,rightward:-90};Object.keys(Te).indexOf(t.direction)===-1&&Kn("Invalid direction '".concat(t.direction,"' specified for breadthfirst layout. Valid values are: ").concat(Object.keys(Te).join(", ")));var W=o(function(pe){return uze(ne(pe),u,Te[t.direction])},"getPosition");return r.nodes().layoutPositions(this,t,W),this};jUe={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(mhe,"CircleLayout");mhe.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,a=n.nodes().not(":parent");e.sort&&(a=a.sort(e.sort));for(var s=cs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=e.sweep===void 0?2*Math.PI-2*Math.PI/a.length:e.sweep,h=u/Math.max(1,a.length-1),f,d=0,p=0;p1&&e.avoidOverlap){d*=1.75;var x=Math.cos(h)-Math.cos(0),b=Math.sin(h)-Math.sin(0),T=Math.sqrt(d*d/(x*x+b*b));f=Math.max(T,f)}var S=o(function(k,C){var A=e.startAngle+C*h*(i?1:-1),L=f*Math.cos(A),I=f*Math.sin(A),R={x:l.x+L,y:l.y+I};return R},"getPos");return n.nodes().layoutPositions(this,e,S),this};KUe={fit:!0,padding:30,startAngle:3/2*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:o(function(e){return e.degree()},"concentric"),levelWidth:o(function(e){return e.maxDegree()/4},"levelWidth"),animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(ghe,"ConcentricLayout");ghe.prototype.run=function(){for(var t=this.options,e=t,r=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise,n=t.cy,i=e.eles,a=i.nodes().not(":parent"),s=cs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=[],h=0,f=0;f0){var w=Math.abs(b[0].value-S.value);w>=v&&(b=[],x.push(b))}b.push(S)}var k=h+e.minNodeSpacing;if(!e.avoidOverlap){var C=x.length>0&&x[0].length>1,A=Math.min(s.w,s.h)/2-k,L=A/(x.length+C?1:0);k=Math.min(k,L)}for(var I=0,R=0;R1&&e.avoidOverlap){var O=Math.cos(D)-Math.cos(0),N=Math.sin(D)-Math.sin(0),P=Math.sqrt(k*k/(O*O+N*N));I=Math.max(P,I)}E.r=I,I+=k}if(e.equidistant){for(var B=0,F=0,V=0;V=t.numIter||(nHe(n,t),n.temperature=n.temperature*t.coolingFactor,n.temperature=t.animationThreshold&&a(),Qk(f)}},"frame");f()}else{for(;h;)h=s(u),u++;Bce(n,t),l()}return this};EE.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this};EE.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};ZUe=o(function(e,r,n){for(var i=n.eles.edges(),a=n.eles.nodes(),s=cs(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),l={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:a.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:i.size(),temperature:n.initialTemp,clientWidth:s.w,clientHeight:s.h,boundingBox:s},u=n.eles.components(),h={},f=0;f0){l.graphSet.push(A);for(var f=0;fi.count?0:i.graph},"findLCA"),yhe=o(function(e,r,n,i){var a=i.graphSet[n];if(-10)var d=i.nodeOverlap*f,p=Math.sqrt(l*l+u*u),m=d*l/p,g=d*u/p;else var y=iE(e,l,u),v=iE(r,-1*l,-1*u),x=v.x-y.x,b=v.y-y.y,T=x*x+b*b,p=Math.sqrt(T),d=(e.nodeRepulsion+r.nodeRepulsion)/T,m=d*x/p,g=d*b/p;e.isLocked||(e.offsetX-=m,e.offsetY-=g),r.isLocked||(r.offsetX+=m,r.offsetY+=g)}},"nodeRepulsion"),sHe=o(function(e,r,n,i){if(n>0)var a=e.maxX-r.minX;else var a=r.maxX-e.minX;if(i>0)var s=e.maxY-r.minY;else var s=r.maxY-e.minY;return a>=0&&s>=0?Math.sqrt(a*a+s*s):0},"nodesOverlap"),iE=o(function(e,r,n){var i=e.positionX,a=e.positionY,s=e.height||1,l=e.width||1,u=n/r,h=s/l,f={};return r===0&&0n?(f.x=i,f.y=a+s/2,f):0r&&-1*h<=u&&u<=h?(f.x=i-l/2,f.y=a-l*n/2/r,f):0=h)?(f.x=i+s*r/2/n,f.y=a+s/2,f):(0>n&&(u<=-1*h||u>=h)&&(f.x=i-s*r/2/n,f.y=a-s/2),f)},"findClippingPoint"),oHe=o(function(e,r){for(var n=0;nn){var v=r.gravity*m/y,x=r.gravity*g/y;p.offsetX+=v,p.offsetY+=x}}}}},"calculateGravityForces"),cHe=o(function(e,r){var n=[],i=0,a=-1;for(n.push.apply(n,e.graphSet[0]),a+=e.graphSet[0].length;i<=a;){var s=n[i++],l=e.idToIndex[s],u=e.layoutNodes[l],h=u.children;if(0n)var a={x:n*e/i,y:n*r/i};else var a={x:e,y:r};return a},"limitForce"),xhe=o(function(e,r){var n=e.parentId;if(n!=null){var i=r.layoutNodes[r.idToIndex[n]],a=!1;if((i.maxX==null||e.maxX+i.padRight>i.maxX)&&(i.maxX=e.maxX+i.padRight,a=!0),(i.minX==null||e.minX-i.padLefti.maxY)&&(i.maxY=e.maxY+i.padBottom,a=!0),(i.minY==null||e.minY-i.padTopx&&(g+=v+r.componentSpacing,m=0,y=0,v=0)}}},"separateComponents"),fHe={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:o(function(e){},"position"),sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:o(function(e,r){return!0},"animateFilter"),ready:void 0,stop:void 0,transform:o(function(e,r){return r},"transform")};o(bhe,"GridLayout");bhe.prototype.run=function(){var t=this.options,e=t,r=t.cy,n=e.eles,i=n.nodes().not(":parent");e.sort&&(i=i.sort(e.sort));var a=cs(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(a.h===0||a.w===0)n.nodes().layoutPositions(this,e,function(j){return{x:a.x1,y:a.y1}});else{var s=i.size(),l=Math.sqrt(s*a.h/a.w),u=Math.round(l),h=Math.round(a.w/a.h*l),f=o(function(ee){if(ee==null)return Math.min(u,h);var q=Math.min(u,h);q==u?u=ee:h=ee},"small"),d=o(function(ee){if(ee==null)return Math.max(u,h);var q=Math.max(u,h);q==u?u=ee:h=ee},"large"),p=e.rows,m=e.cols!=null?e.cols:e.columns;if(p!=null&&m!=null)u=p,h=m;else if(p!=null&&m==null)u=p,h=Math.ceil(s/u);else if(p==null&&m!=null)h=m,u=Math.ceil(s/h);else if(h*u>s){var g=f(),y=d();(g-1)*y>=s?f(g-1):(y-1)*g>=s&&d(y-1)}else for(;h*u=s?d(x+1):f(v+1)}var b=a.w/h,T=a.h/u;if(e.condense&&(b=0,T=0),e.avoidOverlap)for(var S=0;S=h&&(O=0,D++)},"moveToNextCell"),P={},B=0;B(O=tGe(t,e,N[P],N[P+1],N[P+2],N[P+3])))return v(C,O),!0}else if(L.edgeType==="bezier"||L.edgeType==="multibezier"||L.edgeType==="self"||L.edgeType==="compound"){for(var N=L.allpts,P=0;P+5(O=eGe(t,e,N[P],N[P+1],N[P+2],N[P+3],N[P+4],N[P+5])))return v(C,O),!0}for(var B=B||A.source,F=F||A.target,V=i.getArrowWidth(I,R),$=[{name:"source",x:L.arrowStartX,y:L.arrowStartY,angle:L.srcArrowAngle},{name:"target",x:L.arrowEndX,y:L.arrowEndY,angle:L.tgtArrowAngle},{name:"mid-source",x:L.midX,y:L.midY,angle:L.midsrcArrowAngle},{name:"mid-target",x:L.midX,y:L.midY,angle:L.midtgtArrowAngle}],P=0;P<$.length;P++){var U=$[P],j=a.arrowShapes[C.pstyle(U.name+"-arrow-shape").value],ee=C.pstyle("width").pfValue;if(j.roughCollide(t,e,V,U.angle,{x:U.x,y:U.y},ee,f)&&j.collide(t,e,V,U.angle,{x:U.x,y:U.y},ee,f))return v(C),!0}h&&l.length>0&&(x(B),x(F))}o(b,"checkEdge");function T(C,A,L){return Us(C,A,L)}o(T,"preprop");function S(C,A){var L=C._private,I=p,R;A?R=A+"-":R="",C.boundingBox();var E=L.labelBounds[A||"main"],_=C.pstyle(R+"label").value,D=C.pstyle("text-events").strValue==="yes";if(!(!D||!_)){var O=T(L.rscratch,"labelX",A),N=T(L.rscratch,"labelY",A),P=T(L.rscratch,"labelAngle",A),B=C.pstyle(R+"text-margin-x").pfValue,F=C.pstyle(R+"text-margin-y").pfValue,V=E.x1-I-B,$=E.x2+I-B,U=E.y1-I-F,j=E.y2+I-F;if(P){var ee=Math.cos(P),q=Math.sin(P),oe=o(function(ae,Z){return ae=ae-O,Z=Z-N,{x:ae*ee-Z*q+O,y:ae*q+Z*ee+N}},"rotate"),Q=oe(V,U),ue=oe(V,j),te=oe($,U),re=oe($,j),J=[Q.x+B,Q.y+F,te.x+B,te.y+F,re.x+B,re.y+F,ue.x+B,ue.y+F];if(Hs(t,e,J))return v(C),!0}else if(yf(E,t,e))return v(C),!0}}o(S,"checkLabel");for(var w=s.length-1;w>=0;w--){var k=s[w];k.isNode()?x(k)||S(k):b(k)||S(k)||S(k,"source")||S(k,"target")}return l};Sp.getAllInBox=function(t,e,r,n){var i=this.getCachedZSortedEles().interactive,a=this.cy.zoom(),s=2/a,l=[],u=Math.min(t,r),h=Math.max(t,r),f=Math.min(e,n),d=Math.max(e,n);t=u,r=h,e=f,n=d;var p=cs({x1:t,y1:e,x2:r,y2:n}),m=[{x:p.x1,y:p.y1},{x:p.x2,y:p.y1},{x:p.x2,y:p.y2},{x:p.x1,y:p.y2}],g=[[m[0],m[1]],[m[1],m[2]],[m[2],m[3]],[m[3],m[0]]];function y(ae,Z,de){return Us(ae,Z,de)}o(y,"preprop");function v(ae,Z){var de=ae._private,ne=s,Te="";ae.boundingBox();var W=de.labelBounds.main;if(!W)return null;var Ve=y(de.rscratch,"labelX",Z),pe=y(de.rscratch,"labelY",Z),Be=y(de.rscratch,"labelAngle",Z),Ye=ae.pstyle(Te+"text-margin-x").pfValue,He=ae.pstyle(Te+"text-margin-y").pfValue,Le=W.x1-ne-Ye,Ie=W.x2+ne-Ye,Ne=W.y1-ne-He,Ce=W.y2+ne-He;if(Be){var Fe=Math.cos(Be),fe=Math.sin(Be),xe=o(function(he,z){return he=he-Ve,z=z-pe,{x:he*Fe-z*fe+Ve,y:he*fe+z*Fe+pe}},"rotate");return[xe(Le,Ne),xe(Ie,Ne),xe(Ie,Ce),xe(Le,Ce)]}else return[{x:Le,y:Ne},{x:Ie,y:Ne},{x:Ie,y:Ce},{x:Le,y:Ce}]}o(v,"getRotatedLabelBox");function x(ae,Z,de,ne){function Te(W,Ve,pe){return(pe.y-W.y)*(Ve.x-W.x)>(Ve.y-W.y)*(pe.x-W.x)}return o(Te,"ccw"),Te(ae,de,ne)!==Te(Z,de,ne)&&Te(ae,Z,de)!==Te(ae,Z,ne)}o(x,"doLinesIntersect");for(var b=0;b0?-(Math.PI-e.ang):Math.PI+e.ang},"invertVec"),vHe=o(function(e,r,n,i,a){if(e!==Vce?Uce(r,e,Ic):yHe(Yo,Ic),Uce(r,n,Yo),zce=Ic.nx*Yo.ny-Ic.ny*Yo.nx,Gce=Ic.nx*Yo.nx-Ic.ny*-Yo.ny,Fu=Math.asin(Math.max(-1,Math.min(1,zce))),Math.abs(Fu)<1e-6){eI=r.x,tI=r.y,gp=Qm=0;return}vp=1,Wk=!1,Gce<0?Fu<0?Fu=Math.PI+Fu:(Fu=Math.PI-Fu,vp=-1,Wk=!0):Fu>0&&(vp=-1,Wk=!0),r.radius!==void 0?Qm=r.radius:Qm=i,fp=Fu/2,Ok=Math.min(Ic.len/2,Yo.len/2),a?(Nc=Math.abs(Math.cos(fp)*Qm/Math.sin(fp)),Nc>Ok?(Nc=Ok,gp=Math.abs(Nc*Math.sin(fp)/Math.cos(fp))):gp=Qm):(Nc=Math.min(Ok,Qm),gp=Math.abs(Nc*Math.sin(fp)/Math.cos(fp))),rI=r.x+Yo.nx*Nc,nI=r.y+Yo.ny*Nc,eI=rI-Yo.ny*gp*vp,tI=nI+Yo.nx*gp*vp,Ehe=r.x+Ic.nx*Nc,She=r.y+Ic.ny*Nc,Vce=r},"calcCornerArc");o(Che,"drawPreparedRoundCorner");o(LI,"getRoundCorner");px=.01,xHe=Math.sqrt(2*px),za={};za.findMidptPtsEtc=function(t,e){var r=e.posPts,n=e.intersectionPts,i=e.vectorNormInverse,a,s=t.pstyle("source-endpoint"),l=t.pstyle("target-endpoint"),u=s.units!=null&&l.units!=null,h=o(function(w,k,C,A){var L=A-k,I=C-w,R=Math.sqrt(I*I+L*L);return{x:-L/R,y:I/R}},"recalcVectorNormInverse"),f=t.pstyle("edge-distances").value;switch(f){case"node-position":a=r;break;case"intersection":a=n;break;case"endpoints":{if(u){var d=this.manualEndptToPx(t.source()[0],s),p=_i(d,2),m=p[0],g=p[1],y=this.manualEndptToPx(t.target()[0],l),v=_i(y,2),x=v[0],b=v[1],T={x1:m,y1:g,x2:x,y2:b};i=h(m,g,x,b),a=T}else hn("Edge ".concat(t.id()," has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).")),a=n;break}}return{midptPts:a,vectorNormInverse:i}};za.findHaystackPoints=function(t){for(var e=0;e0?Math.max(z-se,0):Math.min(z+se,0)},"subDWH"),_=E(I,A),D=E(R,L),O=!1;b===h?x=Math.abs(_)>Math.abs(D)?i:n:b===u||b===l?(x=n,O=!0):(b===a||b===s)&&(x=i,O=!0);var N=x===n,P=N?D:_,B=N?R:I,F=yI(B),V=!1;!(O&&(S||k))&&(b===l&&B<0||b===u&&B>0||b===a&&B>0||b===s&&B<0)&&(F*=-1,P=F*Math.abs(P),V=!0);var $;if(S){var U=w<0?1+w:w;$=U*P}else{var j=w<0?P:0;$=j+w*F}var ee=o(function(z){return Math.abs(z)=Math.abs(P)},"getIsTooClose"),q=ee($),oe=ee(Math.abs(P)-Math.abs($)),Q=q||oe;if(Q&&!V)if(N){var ue=Math.abs(B)<=p/2,te=Math.abs(I)<=m/2;if(ue){var re=(f.x1+f.x2)/2,J=f.y1,K=f.y2;r.segpts=[re,J,re,K]}else if(te){var ae=(f.y1+f.y2)/2,Z=f.x1,de=f.x2;r.segpts=[Z,ae,de,ae]}else r.segpts=[f.x1,f.y2]}else{var ne=Math.abs(B)<=d/2,Te=Math.abs(R)<=g/2;if(ne){var W=(f.y1+f.y2)/2,Ve=f.x1,pe=f.x2;r.segpts=[Ve,W,pe,W]}else if(Te){var Be=(f.x1+f.x2)/2,Ye=f.y1,He=f.y2;r.segpts=[Be,Ye,Be,He]}else r.segpts=[f.x2,f.y1]}else if(N){var Le=f.y1+$+(v?p/2*F:0),Ie=f.x1,Ne=f.x2;r.segpts=[Ie,Le,Ne,Le]}else{var Ce=f.x1+$+(v?d/2*F:0),Fe=f.y1,fe=f.y2;r.segpts=[Ce,Fe,Ce,fe]}if(r.isRound){var xe=t.pstyle("taxi-radius").value,Y=t.pstyle("radius-type").value[0]==="arc-radius";r.radii=new Array(r.segpts.length/2).fill(xe),r.isArcRadius=new Array(r.segpts.length/2).fill(Y)}};za.tryToCorrectInvalidPoints=function(t,e){var r=t._private.rscratch;if(r.edgeType==="bezier"){var n=e.srcPos,i=e.tgtPos,a=e.srcW,s=e.srcH,l=e.tgtW,u=e.tgtH,h=e.srcShape,f=e.tgtShape,d=e.srcCornerRadius,p=e.tgtCornerRadius,m=e.srcRs,g=e.tgtRs,y=!At(r.startX)||!At(r.startY),v=!At(r.arrowStartX)||!At(r.arrowStartY),x=!At(r.endX)||!At(r.endY),b=!At(r.arrowEndX)||!At(r.arrowEndY),T=3,S=this.getArrowWidth(t.pstyle("width").pfValue,t.pstyle("arrow-scale").value)*this.arrowShapeWidth,w=T*S,k=Tp({x:r.ctrlpts[0],y:r.ctrlpts[1]},{x:r.startX,y:r.startY}),C=kB.poolIndex()){var F=P;P=B,B=F}var V=_.srcPos=P.position(),$=_.tgtPos=B.position(),U=_.srcW=P.outerWidth(),j=_.srcH=P.outerHeight(),ee=_.tgtW=B.outerWidth(),q=_.tgtH=B.outerHeight(),oe=_.srcShape=r.nodeShapes[e.getNodeShape(P)],Q=_.tgtShape=r.nodeShapes[e.getNodeShape(B)],ue=_.srcCornerRadius=P.pstyle("corner-radius").value==="auto"?"auto":P.pstyle("corner-radius").pfValue,te=_.tgtCornerRadius=B.pstyle("corner-radius").value==="auto"?"auto":B.pstyle("corner-radius").pfValue,re=_.tgtRs=B._private.rscratch,J=_.srcRs=P._private.rscratch;_.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var K=0;K<_.eles.length;K++){var ae=_.eles[K],Z=ae[0]._private.rscratch,de=ae.pstyle("curve-style").value,ne=de==="unbundled-bezier"||gf(de,"segments")||gf(de,"taxi"),Te=!P.same(ae.source());if(!_.calculatedIntersection&&P!==B&&(_.hasBezier||_.hasUnbundled)){_.calculatedIntersection=!0;var W=oe.intersectLine(V.x,V.y,U,j,$.x,$.y,0,ue,J),Ve=_.srcIntn=W,pe=Q.intersectLine($.x,$.y,ee,q,V.x,V.y,0,te,re),Be=_.tgtIntn=pe,Ye=_.intersectionPts={x1:W[0],x2:pe[0],y1:W[1],y2:pe[1]},He=_.posPts={x1:V.x,x2:$.x,y1:V.y,y2:$.y},Le=pe[1]-W[1],Ie=pe[0]-W[0],Ne=Math.sqrt(Ie*Ie+Le*Le);At(Ne)&&Ne>=xHe||(Ne=Math.sqrt(Math.max(Ie*Ie,px)+Math.max(Le*Le,px)));var Ce=_.vector={x:Ie,y:Le},Fe=_.vectorNorm={x:Ce.x/Ne,y:Ce.y/Ne},fe={x:-Fe.y,y:Fe.x};_.nodesOverlap=!At(Ne)||Q.checkPoint(W[0],W[1],0,ee,q,$.x,$.y,te,re)||oe.checkPoint(pe[0],pe[1],0,U,j,V.x,V.y,ue,J),_.vectorNormInverse=fe,D={nodesOverlap:_.nodesOverlap,dirCounts:_.dirCounts,calculatedIntersection:!0,hasBezier:_.hasBezier,hasUnbundled:_.hasUnbundled,eles:_.eles,srcPos:$,srcRs:re,tgtPos:V,tgtRs:J,srcW:ee,srcH:q,tgtW:U,tgtH:j,srcIntn:Be,tgtIntn:Ve,srcShape:Q,tgtShape:oe,posPts:{x1:He.x2,y1:He.y2,x2:He.x1,y2:He.y1},intersectionPts:{x1:Ye.x2,y1:Ye.y2,x2:Ye.x1,y2:Ye.y1},vector:{x:-Ce.x,y:-Ce.y},vectorNorm:{x:-Fe.x,y:-Fe.y},vectorNormInverse:{x:-fe.x,y:-fe.y}}}var xe=Te?D:_;Z.nodesOverlap=xe.nodesOverlap,Z.srcIntn=xe.srcIntn,Z.tgtIntn=xe.tgtIntn,Z.isRound=de.startsWith("round"),i&&(P.isParent()||P.isChild()||B.isParent()||B.isChild())&&(P.parents().anySame(B)||B.parents().anySame(P)||P.same(B)&&P.isParent())?e.findCompoundLoopPoints(ae,xe,K,ne):P===B?e.findLoopPoints(ae,xe,K,ne):de.endsWith("segments")?e.findSegmentsPoints(ae,xe):de.endsWith("taxi")?e.findTaxiPoints(ae,xe):de==="straight"||!ne&&_.eles.length%2===1&&K===Math.floor(_.eles.length/2)?e.findStraightEdgePoints(ae):e.findBezierPoints(ae,xe,K,ne,Te),e.findEndpoints(ae),e.tryToCorrectInvalidPoints(ae,xe),e.checkForInvalidEdgeWarning(ae),e.storeAllpts(ae),e.storeEdgeProjections(ae),e.calculateArrowAngles(ae),e.recalculateEdgeLabelProjections(ae),e.calculateLabelAngles(ae)}},"_loop"),C=0;C0){var W=h,Ve=mp(W,tg(s)),pe=mp(W,tg(Te)),Be=Ve;if(pe2){var Ye=mp(W,{x:Te[2],y:Te[3]});Ye0){var le=f,ke=mp(le,tg(s)),ve=mp(le,tg(se)),ye=ke;if(ve2){var Re=mp(le,{x:se[2],y:se[3]});Re=g||C){v={cp:S,segment:k};break}}if(v)break}var A=v.cp,L=v.segment,I=(g-x)/L.length,R=L.t1-L.t0,E=m?L.t0+R*I:L.t1-R*I;E=lx(0,E,1),e=ig(A.p0,A.p1,A.p2,E),p=THe(A.p0,A.p1,A.p2,E);break}case"straight":case"segments":case"haystack":{for(var _=0,D,O,N,P,B=n.allpts.length,F=0;F+3=g));F+=2);var V=g-O,$=V/D;$=lx(0,$,1),e=Uze(N,P,$),p=Dhe(N,P);break}}s("labelX",d,e.x),s("labelY",d,e.y),s("labelAutoAngle",d,p)}},"calculateEndProjection");h("source"),h("target"),this.applyLabelDimensions(t)}};Bc.applyLabelDimensions=function(t){this.applyPrefixedLabelDimensions(t),t.isEdge()&&(this.applyPrefixedLabelDimensions(t,"source"),this.applyPrefixedLabelDimensions(t,"target"))};Bc.applyPrefixedLabelDimensions=function(t,e){var r=t._private,n=this.getLabelText(t,e),i=bp(n,t._private.labelDimsKey);if(Us(r.rscratch,"prefixedLabelDimsKey",e)!==i){$u(r.rscratch,"prefixedLabelDimsKey",e,i);var a=this.calculateLabelDimensions(t,n),s=t.pstyle("line-height").pfValue,l=t.pstyle("text-wrap").strValue,u=Us(r.rscratch,"labelWrapCachedLines",e)||[],h=l!=="wrap"?1:Math.max(u.length,1),f=a.height/h,d=f*s,p=a.width,m=a.height+(h-1)*(s-1)*f;$u(r.rstyle,"labelWidth",e,p),$u(r.rscratch,"labelWidth",e,p),$u(r.rstyle,"labelHeight",e,m),$u(r.rscratch,"labelHeight",e,m),$u(r.rscratch,"labelLineHeight",e,d)}};Bc.getLabelText=function(t,e){var r=t._private,n=e?e+"-":"",i=t.pstyle(n+"label").strValue,a=t.pstyle("text-transform").value,s=o(function(j,ee){return ee?($u(r.rscratch,j,e,ee),ee):Us(r.rscratch,j,e)},"rscratch");if(!i)return"";a=="none"||(a=="uppercase"?i=i.toUpperCase():a=="lowercase"&&(i=i.toLowerCase()));var l=t.pstyle("text-wrap").value;if(l==="wrap"){var u=s("labelKey");if(u!=null&&s("labelWrapKey")===u)return s("labelWrapCachedText");for(var h="\u200B",f=i.split(` +`),d=t.pstyle("text-max-width").pfValue,p=t.pstyle("text-overflow-wrap").value,m=p==="anywhere",g=[],y=/[\s\u200b]+|$/g,v=0;vd){var w=x.matchAll(y),k="",C=0,A=qs(w),L;try{for(A.s();!(L=A.n()).done;){var I=L.value,R=I[0],E=x.substring(C,I.index);C=I.index+R.length;var _=k.length===0?E:k+E+R,D=this.calculateLabelDimensions(t,_),O=D.width;O<=d?k+=E+R:(k&&g.push(k),k=E+R)}}catch(U){A.e(U)}finally{A.f()}k.match(/^[\s\u200b]+$/)||g.push(k)}else g.push(x)}s("labelWrapCachedLines",g),i=s("labelWrapCachedText",g.join(` +`)),s("labelWrapKey",u)}else if(l==="ellipsis"){var N=t.pstyle("text-max-width").pfValue,P="",B="\u2026",F=!1;if(this.calculateLabelDimensions(t,i).widthN)break;P+=i[V],V===i.length-1&&(F=!0)}return F||(P+=B),P}return i};Bc.getLabelJustification=function(t){var e=t.pstyle("text-justification").strValue,r=t.pstyle("text-halign").strValue;if(e==="auto")if(t.isNode())switch(r){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return e};Bc.calculateLabelDimensions=function(t,e){var r=this,n=r.cy.window(),i=n.document,a=0,s=t.pstyle("font-style").strValue,l=t.pstyle("font-size").pfValue,u=t.pstyle("font-family").strValue,h=t.pstyle("font-weight").strValue,f=this.labelCalcCanvas,d=this.labelCalcCanvasContext;if(!f){f=this.labelCalcCanvas=i.createElement("canvas"),d=this.labelCalcCanvasContext=f.getContext("2d");var p=f.style;p.position="absolute",p.left="-9999px",p.top="-9999px",p.zIndex="-1",p.visibility="hidden",p.pointerEvents="none"}d.font="".concat(s," ").concat(h," ").concat(l,"px ").concat(u);for(var m=0,g=0,y=e.split(` +`),v=0;v1&&arguments[1]!==void 0?arguments[1]:!0;if(e.merge(s),l)for(var u=0;u=t.desktopTapThreshold2}var bt=a(z);lt&&(t.hoverData.tapholdCancelled=!0);var wt=o(function(){var Se=t.hoverData.dragDelta=t.hoverData.dragDelta||[];Se.length===0?(Se.push(et[0]),Se.push(et[1])):(Se[0]+=et[0],Se[1]+=et[1])},"updateDragDelta");le=!0,i(xt,["mousemove","vmousemove","tapdrag"],z,{x:Re[0],y:Re[1]});var yt=o(function(Se){return{originalEvent:z,type:Se,position:{x:Re[0],y:Re[1]}}},"makeEvent"),ft=o(function(){t.data.bgActivePosistion=void 0,t.hoverData.selecting||ke.emit(yt("boxstart")),Ke[4]=1,t.hoverData.selecting=!0,t.redrawHint("select",!0),t.redraw()},"goIntoBoxMode");if(t.hoverData.which===3){if(lt){var Ur=yt("cxtdrag");Oe?Oe.emit(Ur):ke.emit(Ur),t.hoverData.cxtDragged=!0,(!t.hoverData.cxtOver||xt!==t.hoverData.cxtOver)&&(t.hoverData.cxtOver&&t.hoverData.cxtOver.emit(yt("cxtdragout")),t.hoverData.cxtOver=xt,xt&&xt.emit(yt("cxtdragover")))}}else if(t.hoverData.dragging){if(le=!0,ke.panningEnabled()&&ke.userPanningEnabled()){var _t;if(t.hoverData.justStartedPan){var bn=t.hoverData.mdownPos;_t={x:(Re[0]-bn[0])*ve,y:(Re[1]-bn[1])*ve},t.hoverData.justStartedPan=!1}else _t={x:et[0]*ve,y:et[1]*ve};ke.panBy(_t),ke.emit(yt("dragpan")),t.hoverData.dragged=!0}Re=t.projectIntoViewport(z.clientX,z.clientY)}else if(Ke[4]==1&&(Oe==null||Oe.pannable())){if(lt){if(!t.hoverData.dragging&&ke.boxSelectionEnabled()&&(bt||!ke.panningEnabled()||!ke.userPanningEnabled()))ft();else if(!t.hoverData.selecting&&ke.panningEnabled()&&ke.userPanningEnabled()){var Br=s(Oe,t.hoverData.downs);Br&&(t.hoverData.dragging=!0,t.hoverData.justStartedPan=!0,Ke[4]=0,t.data.bgActivePosistion=tg(_e),t.redrawHint("select",!0),t.redraw())}Oe&&Oe.pannable()&&Oe.active()&&Oe.unactivate()}}else{if(Oe&&Oe.pannable()&&Oe.active()&&Oe.unactivate(),(!Oe||!Oe.grabbed())&&xt!=We&&(We&&i(We,["mouseout","tapdragout"],z,{x:Re[0],y:Re[1]}),xt&&i(xt,["mouseover","tapdragover"],z,{x:Re[0],y:Re[1]}),t.hoverData.last=xt),Oe)if(lt){if(ke.boxSelectionEnabled()&&bt)Oe&&Oe.grabbed()&&(x(Ue),Oe.emit(yt("freeon")),Ue.emit(yt("free")),t.dragData.didDrag&&(Oe.emit(yt("dragfreeon")),Ue.emit(yt("dragfree")))),ft();else if(Oe&&Oe.grabbed()&&t.nodeIsDraggable(Oe)){var cr=!t.dragData.didDrag;cr&&t.redrawHint("eles",!0),t.dragData.didDrag=!0,t.hoverData.draggingEles||y(Ue,{inDragLayer:!0});var ar={x:0,y:0};if(At(et[0])&&At(et[1])&&(ar.x+=et[0],ar.y+=et[1],cr)){var _r=t.hoverData.dragDelta;_r&&At(_r[0])&&At(_r[1])&&(ar.x+=_r[0],ar.y+=_r[1])}t.hoverData.draggingEles=!0,Ue.silentShift(ar).emit(yt("position")).emit(yt("drag")),t.redrawHint("drag",!0),t.redraw()}}else wt();le=!0}if(Ke[2]=Re[0],Ke[3]=Re[1],le)return z.stopPropagation&&z.stopPropagation(),z.preventDefault&&z.preventDefault(),!1}},"mousemoveHandler"),!1);var E,_,D;t.registerBinding(e,"mouseup",o(function(z){if(!(t.hoverData.which===1&&z.which!==1&&t.hoverData.capture)){var se=t.hoverData.capture;if(se){t.hoverData.capture=!1;var le=t.cy,ke=t.projectIntoViewport(z.clientX,z.clientY),ve=t.selection,ye=t.findNearestElement(ke[0],ke[1],!0,!1),Re=t.dragData.possibleDragElements,_e=t.hoverData.down,ze=a(z);t.data.bgActivePosistion&&(t.redrawHint("select",!0),t.redraw()),t.hoverData.tapholdCancelled=!0,t.data.bgActivePosistion=void 0,_e&&_e.unactivate();var Ke=o(function(Gt){return{originalEvent:z,type:Gt,position:{x:ke[0],y:ke[1]}}},"makeEvent");if(t.hoverData.which===3){var xt=Ke("cxttapend");if(_e?_e.emit(xt):le.emit(xt),!t.hoverData.cxtDragged){var We=Ke("cxttap");_e?_e.emit(We):le.emit(We)}t.hoverData.cxtDragged=!1,t.hoverData.which=null}else if(t.hoverData.which===1){if(i(ye,["mouseup","tapend","vmouseup"],z,{x:ke[0],y:ke[1]}),!t.dragData.didDrag&&!t.hoverData.dragged&&!t.hoverData.selecting&&!t.hoverData.isOverThresholdDrag&&(i(_e,["click","tap","vclick"],z,{x:ke[0],y:ke[1]}),_=!1,z.timeStamp-D<=le.multiClickDebounceTime()?(E&&clearTimeout(E),_=!0,D=null,i(_e,["dblclick","dbltap","vdblclick"],z,{x:ke[0],y:ke[1]})):(E=setTimeout(function(){_||i(_e,["oneclick","onetap","voneclick"],z,{x:ke[0],y:ke[1]})},le.multiClickDebounceTime()),D=z.timeStamp)),_e==null&&!t.dragData.didDrag&&!t.hoverData.selecting&&!t.hoverData.dragged&&!a(z)&&(le.$(r).unselect(["tapunselect"]),Re.length>0&&t.redrawHint("eles",!0),t.dragData.possibleDragElements=Re=le.collection()),ye==_e&&!t.dragData.didDrag&&!t.hoverData.selecting&&ye!=null&&ye._private.selectable&&(t.hoverData.dragging||(le.selectionType()==="additive"||ze?ye.selected()?ye.unselect(["tapunselect"]):ye.select(["tapselect"]):ze||(le.$(r).unmerge(ye).unselect(["tapunselect"]),ye.select(["tapselect"]))),t.redrawHint("eles",!0)),t.hoverData.selecting){var Oe=le.collection(t.getAllInBox(ve[0],ve[1],ve[2],ve[3]));t.redrawHint("select",!0),Oe.length>0&&t.redrawHint("eles",!0),le.emit(Ke("boxend"));var et=o(function(Gt){return Gt.selectable()&&!Gt.selected()},"eleWouldBeSelected");le.selectionType()==="additive"||ze||le.$(r).unmerge(Oe).unselect(),Oe.emit(Ke("box")).stdFilter(et).select().emit(Ke("boxselect")),t.redraw()}if(t.hoverData.dragging&&(t.hoverData.dragging=!1,t.redrawHint("select",!0),t.redrawHint("eles",!0),t.redraw()),!ve[4]){t.redrawHint("drag",!0),t.redrawHint("eles",!0);var Ue=_e&&_e.grabbed();x(Re),Ue&&(_e.emit(Ke("freeon")),Re.emit(Ke("free")),t.dragData.didDrag&&(_e.emit(Ke("dragfreeon")),Re.emit(Ke("dragfree"))))}}ve[4]=0,t.hoverData.down=null,t.hoverData.cxtStarted=!1,t.hoverData.draggingEles=!1,t.hoverData.selecting=!1,t.hoverData.isOverThresholdDrag=!1,t.dragData.didDrag=!1,t.hoverData.dragged=!1,t.hoverData.dragDelta=[],t.hoverData.mdownPos=null,t.hoverData.mdownGPos=null,t.hoverData.which=null}}},"mouseupHandler"),!1);var O=[],N=4,P,B=1e5,F=o(function(z,se){for(var le=0;le=N){var ke=O;if(P=F(ke,5),!P){var ve=Math.abs(ke[0]);P=V(ke)&&ve>5}if(P)for(var ye=0;ye5&&(le=yI(le)*5),We=le/-250,P&&(We/=B,We*=3),We=We*t.wheelSensitivity;var Oe=z.deltaMode===1;Oe&&(We*=33);var et=Re.zoom()*Math.pow(10,We);z.type==="gesturechange"&&(et=t.gestureStartZoom*z.scale),Re.zoom({level:et,renderedPosition:{x:xt[0],y:xt[1]}}),Re.emit({type:z.type==="gesturechange"?"pinchzoom":"scrollzoom",originalEvent:z,position:{x:Ke[0],y:Ke[1]}})}}}},"wheelHandler");t.registerBinding(t.container,"wheel",$,!0),t.registerBinding(e,"scroll",o(function(z){t.scrollingPage=!0,clearTimeout(t.scrollingPageTimeout),t.scrollingPageTimeout=setTimeout(function(){t.scrollingPage=!1},250)},"scrollHandler"),!0),t.registerBinding(t.container,"gesturestart",o(function(z){t.gestureStartZoom=t.cy.zoom(),t.hasTouchStarted||z.preventDefault()},"gestureStartHandler"),!0),t.registerBinding(t.container,"gesturechange",function(he){t.hasTouchStarted||$(he)},!0),t.registerBinding(t.container,"mouseout",o(function(z){var se=t.projectIntoViewport(z.clientX,z.clientY);t.cy.emit({originalEvent:z,type:"mouseout",position:{x:se[0],y:se[1]}})},"mouseOutHandler"),!1),t.registerBinding(t.container,"mouseover",o(function(z){var se=t.projectIntoViewport(z.clientX,z.clientY);t.cy.emit({originalEvent:z,type:"mouseover",position:{x:se[0],y:se[1]}})},"mouseOverHandler"),!1);var U,j,ee,q,oe,Q,ue,te,re,J,K,ae,Z,de=o(function(z,se,le,ke){return Math.sqrt((le-z)*(le-z)+(ke-se)*(ke-se))},"distance"),ne=o(function(z,se,le,ke){return(le-z)*(le-z)+(ke-se)*(ke-se)},"distanceSq"),Te;t.registerBinding(t.container,"touchstart",Te=o(function(z){if(t.hasTouchStarted=!0,!!I(z)){T(),t.touchData.capture=!0,t.data.bgActivePosistion=void 0;var se=t.cy,le=t.touchData.now,ke=t.touchData.earlier;if(z.touches[0]){var ve=t.projectIntoViewport(z.touches[0].clientX,z.touches[0].clientY);le[0]=ve[0],le[1]=ve[1]}if(z.touches[1]){var ve=t.projectIntoViewport(z.touches[1].clientX,z.touches[1].clientY);le[2]=ve[0],le[3]=ve[1]}if(z.touches[2]){var ve=t.projectIntoViewport(z.touches[2].clientX,z.touches[2].clientY);le[4]=ve[0],le[5]=ve[1]}var ye=o(function(bt){return{originalEvent:z,type:bt,position:{x:le[0],y:le[1]}}},"makeEvent");if(z.touches[1]){t.touchData.singleTouchMoved=!0,x(t.dragData.touchDragEles);var Re=t.findContainerClientCoords();re=Re[0],J=Re[1],K=Re[2],ae=Re[3],U=z.touches[0].clientX-re,j=z.touches[0].clientY-J,ee=z.touches[1].clientX-re,q=z.touches[1].clientY-J,Z=0<=U&&U<=K&&0<=ee&&ee<=K&&0<=j&&j<=ae&&0<=q&&q<=ae;var _e=se.pan(),ze=se.zoom();oe=de(U,j,ee,q),Q=ne(U,j,ee,q),ue=[(U+ee)/2,(j+q)/2],te=[(ue[0]-_e.x)/ze,(ue[1]-_e.y)/ze];var Ke=200,xt=Ke*Ke;if(Q=1){for(var vt=t.touchData.startPosition=[null,null,null,null,null,null],Lt=0;Lt=t.touchTapThreshold2}if(se&&t.touchData.cxt){z.preventDefault();var Lt=z.touches[0].clientX-re,dt=z.touches[0].clientY-J,nt=z.touches[1].clientX-re,bt=z.touches[1].clientY-J,wt=ne(Lt,dt,nt,bt),yt=wt/Q,ft=150,Ur=ft*ft,_t=1.5,bn=_t*_t;if(yt>=bn||wt>=Ur){t.touchData.cxt=!1,t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var Br=ze("cxttapend");t.touchData.start?(t.touchData.start.unactivate().emit(Br),t.touchData.start=null):ke.emit(Br)}}if(se&&t.touchData.cxt){var Br=ze("cxtdrag");t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.touchData.start?t.touchData.start.emit(Br):ke.emit(Br),t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxtDragged=!0;var cr=t.findNearestElement(ve[0],ve[1],!0,!0);(!t.touchData.cxtOver||cr!==t.touchData.cxtOver)&&(t.touchData.cxtOver&&t.touchData.cxtOver.emit(ze("cxtdragout")),t.touchData.cxtOver=cr,cr&&cr.emit(ze("cxtdragover")))}else if(se&&z.touches[2]&&ke.boxSelectionEnabled())z.preventDefault(),t.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,t.touchData.selecting||ke.emit(ze("boxstart")),t.touchData.selecting=!0,t.touchData.didSelect=!0,le[4]=1,!le||le.length===0||le[0]===void 0?(le[0]=(ve[0]+ve[2]+ve[4])/3,le[1]=(ve[1]+ve[3]+ve[5])/3,le[2]=(ve[0]+ve[2]+ve[4])/3+1,le[3]=(ve[1]+ve[3]+ve[5])/3+1):(le[2]=(ve[0]+ve[2]+ve[4])/3,le[3]=(ve[1]+ve[3]+ve[5])/3),t.redrawHint("select",!0),t.redraw();else if(se&&z.touches[1]&&!t.touchData.didSelect&&ke.zoomingEnabled()&&ke.panningEnabled()&&ke.userZoomingEnabled()&&ke.userPanningEnabled()){z.preventDefault(),t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var ar=t.dragData.touchDragEles;if(ar){t.redrawHint("drag",!0);for(var _r=0;_r0&&!t.hoverData.draggingEles&&!t.swipePanning&&t.data.bgActivePosistion!=null&&(t.data.bgActivePosistion=void 0,t.redrawHint("select",!0),t.redraw())}},"touchmoveHandler"),!1);var Ve;t.registerBinding(e,"touchcancel",Ve=o(function(z){var se=t.touchData.start;t.touchData.capture=!1,se&&se.unactivate()},"touchcancelHandler"));var pe,Be,Ye,He;if(t.registerBinding(e,"touchend",pe=o(function(z){var se=t.touchData.start,le=t.touchData.capture;if(le)z.touches.length===0&&(t.touchData.capture=!1),z.preventDefault();else return;var ke=t.selection;t.swipePanning=!1,t.hoverData.draggingEles=!1;var ve=t.cy,ye=ve.zoom(),Re=t.touchData.now,_e=t.touchData.earlier;if(z.touches[0]){var ze=t.projectIntoViewport(z.touches[0].clientX,z.touches[0].clientY);Re[0]=ze[0],Re[1]=ze[1]}if(z.touches[1]){var ze=t.projectIntoViewport(z.touches[1].clientX,z.touches[1].clientY);Re[2]=ze[0],Re[3]=ze[1]}if(z.touches[2]){var ze=t.projectIntoViewport(z.touches[2].clientX,z.touches[2].clientY);Re[4]=ze[0],Re[5]=ze[1]}var Ke=o(function(Ur){return{originalEvent:z,type:Ur,position:{x:Re[0],y:Re[1]}}},"makeEvent");se&&se.unactivate();var xt;if(t.touchData.cxt){if(xt=Ke("cxttapend"),se?se.emit(xt):ve.emit(xt),!t.touchData.cxtDragged){var We=Ke("cxttap");se?se.emit(We):ve.emit(We)}t.touchData.start&&(t.touchData.start._private.grabbed=!1),t.touchData.cxt=!1,t.touchData.start=null,t.redraw();return}if(!z.touches[2]&&ve.boxSelectionEnabled()&&t.touchData.selecting){t.touchData.selecting=!1;var Oe=ve.collection(t.getAllInBox(ke[0],ke[1],ke[2],ke[3]));ke[0]=void 0,ke[1]=void 0,ke[2]=void 0,ke[3]=void 0,ke[4]=0,t.redrawHint("select",!0),ve.emit(Ke("boxend"));var et=o(function(Ur){return Ur.selectable()&&!Ur.selected()},"eleWouldBeSelected");Oe.emit(Ke("box")).stdFilter(et).select().emit(Ke("boxselect")),Oe.nonempty()&&t.redrawHint("eles",!0),t.redraw()}if(se?.unactivate(),z.touches[2])t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);else if(!z.touches[1]){if(!z.touches[0]){if(!z.touches[0]){t.data.bgActivePosistion=void 0,t.redrawHint("select",!0);var Ue=t.dragData.touchDragEles;if(se!=null){var lt=se._private.grabbed;x(Ue),t.redrawHint("drag",!0),t.redrawHint("eles",!0),lt&&(se.emit(Ke("freeon")),Ue.emit(Ke("free")),t.dragData.didDrag&&(se.emit(Ke("dragfreeon")),Ue.emit(Ke("dragfree")))),i(se,["touchend","tapend","vmouseup","tapdragout"],z,{x:Re[0],y:Re[1]}),se.unactivate(),t.touchData.start=null}else{var Gt=t.findNearestElement(Re[0],Re[1],!0,!0);i(Gt,["touchend","tapend","vmouseup","tapdragout"],z,{x:Re[0],y:Re[1]})}var vt=t.touchData.startPosition[0]-Re[0],Lt=vt*vt,dt=t.touchData.startPosition[1]-Re[1],nt=dt*dt,bt=Lt+nt,wt=bt*ye*ye;t.touchData.singleTouchMoved||(se||ve.$(":selected").unselect(["tapunselect"]),i(se,["tap","vclick"],z,{x:Re[0],y:Re[1]}),Be=!1,z.timeStamp-He<=ve.multiClickDebounceTime()?(Ye&&clearTimeout(Ye),Be=!0,He=null,i(se,["dbltap","vdblclick"],z,{x:Re[0],y:Re[1]})):(Ye=setTimeout(function(){Be||i(se,["onetap","voneclick"],z,{x:Re[0],y:Re[1]})},ve.multiClickDebounceTime()),He=z.timeStamp)),se!=null&&!t.dragData.didDrag&&se._private.selectable&&wt"u"){var Le=[],Ie=o(function(z){return{clientX:z.clientX,clientY:z.clientY,force:1,identifier:z.pointerId,pageX:z.pageX,pageY:z.pageY,radiusX:z.width/2,radiusY:z.height/2,screenX:z.screenX,screenY:z.screenY,target:z.target}},"makeTouch"),Ne=o(function(z){return{event:z,touch:Ie(z)}},"makePointer"),Ce=o(function(z){Le.push(Ne(z))},"addPointer"),Fe=o(function(z){for(var se=0;se0)return U[0]}return null},"getCurveT"),g=Object.keys(p),y=0;y0?m:Rue(a,s,e,r,n,i,l,u)},"intersectLine"),checkPoint:o(function(e,r,n,i,a,s,l,u){u=u==="auto"?kf(i,a):u;var h=2*u;if(Vu(e,r,this.points,s,l,i,a-h,[0,-1],n)||Vu(e,r,this.points,s,l,i-h,a,[0,-1],n))return!0;var f=i/2+2*n,d=a/2+2*n,p=[s-f,l-d,s-f,l,s+f,l,s+f,l-d];return!!(Hs(e,r,p)||xp(e,r,h,h,s+i/2-u,l+a/2-u,n)||xp(e,r,h,h,s-i/2+u,l+a/2-u,n))},"checkPoint")}};Uu.registerNodeShapes=function(){var t=this.nodeShapes={},e=this;this.generateEllipse(),this.generatePolygon("triangle",ls(3,0)),this.generateRoundPolygon("round-triangle",ls(3,0)),this.generatePolygon("rectangle",ls(4,0)),t.square=t.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();{var r=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",r),this.generateRoundPolygon("round-diamond",r)}this.generatePolygon("pentagon",ls(5,0)),this.generateRoundPolygon("round-pentagon",ls(5,0)),this.generatePolygon("hexagon",ls(6,0)),this.generateRoundPolygon("round-hexagon",ls(6,0)),this.generatePolygon("heptagon",ls(7,0)),this.generateRoundPolygon("round-heptagon",ls(7,0)),this.generatePolygon("octagon",ls(8,0)),this.generateRoundPolygon("round-octagon",ls(8,0));var n=new Array(20);{var i=HM(5,0),a=HM(5,Math.PI/5),s=.5*(3-Math.sqrt(5));s*=1.57;for(var l=0;l=e.deqFastCost*S)break}else if(h){if(b>=e.deqCost*m||b>=e.deqAvgCost*p)break}else if(T>=e.deqNoDrawCost*OM)break;var w=e.deq(n,v,y);if(w.length>0)for(var k=0;k0&&(e.onDeqd(n,g),!h&&e.shouldRedraw(n,g,v,y)&&a())},"dequeue"),l=e.priority||pI;i.beforeRender(s,l(n))}},"setupDequeueingImpl")},"setupDequeueing")},kHe=(function(){function t(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Zk;Af(this,t),this.idsByKey=new zu,this.keyForId=new zu,this.cachesByLvl=new zu,this.lvls=[],this.getKey=e,this.doesEleInvalidateKey=r}return o(t,"ElementTextureCacheLookup"),_f(t,[{key:"getIdsFor",value:o(function(r){r==null&&Kn("Can not get id list for null key");var n=this.idsByKey,i=this.idsByKey.get(r);return i||(i=new hg,n.set(r,i)),i},"getIdsFor")},{key:"addIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).add(n)},"addIdForKey")},{key:"deleteIdForKey",value:o(function(r,n){r!=null&&this.getIdsFor(r).delete(n)},"deleteIdForKey")},{key:"getNumberOfIdsForKey",value:o(function(r){return r==null?0:this.getIdsFor(r).size},"getNumberOfIdsForKey")},{key:"updateKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);this.deleteIdForKey(i,n),this.addIdForKey(a,n),this.keyForId.set(n,a)},"updateKeyMappingFor")},{key:"deleteKeyMappingFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteIdForKey(i,n),this.keyForId.delete(n)},"deleteKeyMappingFor")},{key:"keyHasChangedFor",value:o(function(r){var n=r.id(),i=this.keyForId.get(n),a=this.getKey(r);return i!==a},"keyHasChangedFor")},{key:"isInvalid",value:o(function(r){return this.keyHasChangedFor(r)||this.doesEleInvalidateKey(r)},"isInvalid")},{key:"getCachesAt",value:o(function(r){var n=this.cachesByLvl,i=this.lvls,a=n.get(r);return a||(a=new zu,n.set(r,a),i.push(r)),a},"getCachesAt")},{key:"getCache",value:o(function(r,n){return this.getCachesAt(n).get(r)},"getCache")},{key:"get",value:o(function(r,n){var i=this.getKey(r),a=this.getCache(i,n);return a!=null&&this.updateKeyMappingFor(r),a},"get")},{key:"getForCachedKey",value:o(function(r,n){var i=this.keyForId.get(r.id()),a=this.getCache(i,n);return a},"getForCachedKey")},{key:"hasCache",value:o(function(r,n){return this.getCachesAt(n).has(r)},"hasCache")},{key:"has",value:o(function(r,n){var i=this.getKey(r);return this.hasCache(i,n)},"has")},{key:"setCache",value:o(function(r,n,i){i.key=r,this.getCachesAt(n).set(r,i)},"setCache")},{key:"set",value:o(function(r,n,i){var a=this.getKey(r);this.setCache(a,n,i),this.updateKeyMappingFor(r)},"set")},{key:"deleteCache",value:o(function(r,n){this.getCachesAt(n).delete(r)},"deleteCache")},{key:"delete",value:o(function(r,n){var i=this.getKey(r);this.deleteCache(i,n)},"_delete")},{key:"invalidateKey",value:o(function(r){var n=this;this.lvls.forEach(function(i){return n.deleteCache(r,i)})},"invalidateKey")},{key:"invalidate",value:o(function(r){var n=r.id(),i=this.keyForId.get(n);this.deleteKeyMappingFor(r);var a=this.doesEleInvalidateKey(r);return a&&this.invalidateKey(i),a||this.getNumberOfIdsForKey(i)===0},"invalidate")}])})(),Yce=25,Pk=50,Yk=-4,iI=3,Ohe=7.99,EHe=8,SHe=1024,CHe=1024,AHe=1024,_He=.2,DHe=.8,LHe=10,RHe=.15,NHe=.1,MHe=.9,IHe=.9,OHe=100,PHe=1,ng={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},BHe=ba({getKey:null,doesEleInvalidateKey:Zk,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:Eue,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),tx=o(function(e,r){var n=this;n.renderer=e,n.onDequeues=[];var i=BHe(r);ir(n,i),n.lookup=new kHe(i.getKey,i.doesEleInvalidateKey),n.setupDequeueing()},"ElementTextureCache"),zi=tx.prototype;zi.reasons=ng;zi.getTextureQueue=function(t){var e=this;return e.eleImgCaches=e.eleImgCaches||{},e.eleImgCaches[t]=e.eleImgCaches[t]||[]};zi.getRetiredTextureQueue=function(t){var e=this,r=e.eleImgCaches.retired=e.eleImgCaches.retired||{},n=r[t]=r[t]||[];return n};zi.getElementQueue=function(){var t=this,e=t.eleCacheQueue=t.eleCacheQueue||new Tx(function(r,n){return n.reqs-r.reqs});return e};zi.getElementKeyToQueue=function(){var t=this,e=t.eleKeyToCacheQueue=t.eleKeyToCacheQueue||{};return e};zi.getElement=function(t,e,r,n,i){var a=this,s=this.renderer,l=s.cy.zoom(),u=this.lookup;if(!e||e.w===0||e.h===0||isNaN(e.w)||isNaN(e.h)||!t.visible()||t.removed()||!a.allowEdgeTxrCaching&&t.isEdge()||!a.allowParentTxrCaching&&t.isParent())return null;if(n==null&&(n=Math.ceil(gI(l*r))),n=Ohe||n>iI)return null;var h=Math.pow(2,n),f=e.h*h,d=e.w*h,p=s.eleTextBiggerThanMin(t,h);if(!this.isVisible(t,p))return null;var m=u.get(t,n);if(m&&m.invalidated&&(m.invalidated=!1,m.texture.invalidatedWidth-=m.width),m)return m;var g;if(f<=Yce?g=Yce:f<=Pk?g=Pk:g=Math.ceil(f/Pk)*Pk,f>AHe||d>CHe)return null;var y=a.getTextureQueue(g),v=y[y.length-2],x=o(function(){return a.recycleTexture(g,d)||a.addTexture(g,d)},"addNewTxr");v||(v=y[y.length-1]),v||(v=x()),v.width-v.usedWidthn;R--)L=a.getElement(t,e,r,R,ng.downscale);I()}else return a.queueElement(t,k.level-1),k;else{var E;if(!T&&!S&&!w)for(var _=n-1;_>=Yk;_--){var D=u.get(t,_);if(D){E=D;break}}if(b(E))return a.queueElement(t,n),E;v.context.translate(v.usedWidth,0),v.context.scale(h,h),this.drawElement(v.context,t,e,p,!1),v.context.scale(1/h,1/h),v.context.translate(-v.usedWidth,0)}return m={x:v.usedWidth,texture:v,level:n,scale:h,width:d,height:f,scaledLabelShown:p},v.usedWidth+=Math.ceil(d+EHe),v.eleCaches.push(m),u.set(t,n,m),a.checkTextureFullness(v),m};zi.invalidateElements=function(t){for(var e=0;e=_He*t.width&&this.retireTexture(t)};zi.checkTextureFullness=function(t){var e=this,r=e.getTextureQueue(t.height);t.usedWidth/t.width>DHe&&t.fullnessChecks>=LHe?wf(r,t):t.fullnessChecks++};zi.retireTexture=function(t){var e=this,r=t.height,n=e.getTextureQueue(r),i=this.lookup;wf(n,t),t.retired=!0;for(var a=t.eleCaches,s=0;s=e)return s.retired=!1,s.usedWidth=0,s.invalidatedWidth=0,s.fullnessChecks=0,mI(s.eleCaches),s.context.setTransform(1,0,0,1,0,0),s.context.clearRect(0,0,s.width,s.height),wf(i,s),n.push(s),s}};zi.queueElement=function(t,e){var r=this,n=r.getElementQueue(),i=r.getElementKeyToQueue(),a=this.getKey(t),s=i[a];if(s)s.level=Math.max(s.level,e),s.eles.merge(t),s.reqs++,n.updateItem(s);else{var l={eles:t.spawn().merge(t),level:e,reqs:1,key:a};n.push(l),i[a]=l}};zi.dequeue=function(t){for(var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=[],a=e.lookup,s=0;s0;s++){var l=r.pop(),u=l.key,h=l.eles[0],f=a.hasCache(h,l.level);if(n[u]=null,f)continue;i.push(l);var d=e.getBoundingBox(h);e.getElement(h,d,t,l.level,ng.dequeue)}return i};zi.removeFromQueue=function(t){var e=this,r=e.getElementQueue(),n=e.getElementKeyToQueue(),i=this.getKey(t),a=n[i];a!=null&&(a.eles.length===1?(a.reqs=dI,r.updateItem(a),r.pop(),n[i]=null):a.eles.unmerge(t))};zi.onDequeue=function(t){this.onDequeues.push(t)};zi.offDequeue=function(t){wf(this.onDequeues,t)};zi.setupDequeueing=Ihe.setupDequeueing({deqRedrawThreshold:OHe,deqCost:RHe,deqAvgCost:NHe,deqNoDrawCost:MHe,deqFastCost:IHe,deq:o(function(e,r,n){return e.dequeue(r,n)},"deq"),onDeqd:o(function(e,r){for(var n=0;n=$He||r>sE)return null}n.validateLayersElesOrdering(r,t);var u=n.layersByLevel,h=Math.pow(2,r),f=u[r]=u[r]||[],d,p=n.levelIsComplete(r,t),m,g=o(function(){var I=o(function(O){if(n.validateLayersElesOrdering(O,t),n.levelIsComplete(O,t))return m=u[O],!0},"canUseAsTmpLvl"),R=o(function(O){if(!m)for(var N=r+O;nx<=N&&N<=sE&&!I(N);N+=O);},"checkLvls");R(1),R(-1);for(var E=f.length-1;E>=0;E--){var _=f[E];_.invalid&&wf(f,_)}},"checkTempLevels");if(!p)g();else return f;var y=o(function(){if(!d){d=cs();for(var I=0;Ijce||_>jce)return null;var D=E*_;if(D>YHe)return null;var O=n.makeLayer(d,r);if(R!=null){var N=f.indexOf(R)+1;f.splice(N,0,O)}else(I.insert===void 0||I.insert)&&f.unshift(O);return O},"makeLayer");if(n.skipping&&!l)return null;for(var x=null,b=t.length/FHe,T=!l,S=0;S=b||!Lue(x.bb,w.boundingBox()))&&(x=v({insert:!0,after:x}),!x))return null;m||T?n.queueLayer(x,w):n.drawEleInLayer(x,w,r,e),x.eles.push(w),C[r]=x}return m||(T?null:f)};Ta.getEleLevelForLayerLevel=function(t,e){return t};Ta.drawEleInLayer=function(t,e,r,n){var i=this,a=this.renderer,s=t.context,l=e.boundingBox();l.w===0||l.h===0||!e.visible()||(r=i.getEleLevelForLayerLevel(r,n),a.setImgSmoothing(s,!1),a.drawCachedElement(s,e,null,null,r,XHe),a.setImgSmoothing(s,!0))};Ta.levelIsComplete=function(t,e){var r=this,n=r.layersByLevel[t];if(!n||n.length===0)return!1;for(var i=0,a=0;a0||s.invalid)return!1;i+=s.eles.length}return i===e.length};Ta.validateLayersElesOrdering=function(t,e){var r=this.layersByLevel[t];if(r)for(var n=0;n0){e=!0;break}}return e};Ta.invalidateElements=function(t){var e=this;t.length!==0&&(e.lastInvalidationTime=Gu(),!(t.length===0||!e.haveLayers())&&e.updateElementsInLayers(t,o(function(n,i,a){e.invalidateLayer(n)},"invalAssocLayers")))};Ta.invalidateLayer=function(t){if(this.lastInvalidationTime=Gu(),!t.invalid){var e=t.level,r=t.eles,n=this.layersByLevel[e];wf(n,t),t.elesQueue=[],t.invalid=!0,t.replacement&&(t.replacement.invalid=!0);for(var i=0;i3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l=e._private.rscratch;if(!(a&&!e.visible())&&!(l.badLine||l.allpts==null||isNaN(l.allpts[0]))){var u;r&&(u=r,t.translate(-u.x1,-u.y1));var h=a?e.pstyle("opacity").value:1,f=a?e.pstyle("line-opacity").value:1,d=e.pstyle("curve-style").value,p=e.pstyle("line-style").value,m=e.pstyle("width").pfValue,g=e.pstyle("line-cap").value,y=e.pstyle("line-outline-width").value,v=e.pstyle("line-outline-color").value,x=h*f,b=h*f,T=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;d==="straight-triangle"?(s.eleStrokeStyle(t,e,O),s.drawEdgeTrianglePath(e,t,l.allpts)):(t.lineWidth=m,t.lineCap=g,s.eleStrokeStyle(t,e,O),s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLine"),S=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:x;if(t.lineWidth=m+y,t.lineCap=g,y>0)s.colorStrokeStyle(t,v[0],v[1],v[2],O);else{t.lineCap="butt";return}d==="straight-triangle"?s.drawEdgeTrianglePath(e,t,l.allpts):(s.drawEdgePath(e,t,l.allpts,p),t.lineCap="butt")},"drawLineOutline"),w=o(function(){i&&s.drawEdgeOverlay(t,e)},"drawOverlay"),k=o(function(){i&&s.drawEdgeUnderlay(t,e)},"drawUnderlay"),C=o(function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:b;s.drawArrowheads(t,e,O)},"drawArrows"),A=o(function(){s.drawElementText(t,e,null,n)},"drawText");t.lineJoin="round";var L=e.pstyle("ghost").value==="yes";if(L){var I=e.pstyle("ghost-offset-x").pfValue,R=e.pstyle("ghost-offset-y").pfValue,E=e.pstyle("ghost-opacity").value,_=x*E;t.translate(I,R),T(_),C(_),t.translate(-I,-R)}else S();k(),T(),C(),w(),A(),r&&t.translate(u.x1,u.y1)}};Fhe=o(function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(r,n){if(n.visible()){var i=n.pstyle("".concat(e,"-opacity")).value;if(i!==0){var a=this,s=a.usePaths(),l=n._private.rscratch,u=n.pstyle("".concat(e,"-padding")).pfValue,h=2*u,f=n.pstyle("".concat(e,"-color")).value;r.lineWidth=h,l.edgeType==="self"&&!s?r.lineCap="butt":r.lineCap="round",a.colorStrokeStyle(r,f[0],f[1],f[2],i),a.drawEdgePath(n,r,l.allpts,"solid")}}}},"drawEdgeOverlayUnderlay");Hu.drawEdgeOverlay=Fhe("overlay");Hu.drawEdgeUnderlay=Fhe("underlay");Hu.drawEdgePath=function(t,e,r,n){var i=t._private.rscratch,a=e,s,l=!1,u=this.usePaths(),h=t.pstyle("line-dash-pattern").pfValue,f=t.pstyle("line-dash-offset").pfValue;if(u){var d=r.join("$"),p=i.pathCacheKey&&i.pathCacheKey===d;p?(s=e=i.pathCache,l=!0):(s=e=new Path2D,i.pathCacheKey=d,i.pathCache=s)}if(a.setLineDash)switch(n){case"dotted":a.setLineDash([1,1]);break;case"dashed":a.setLineDash(h),a.lineDashOffset=f;break;case"solid":a.setLineDash([]);break}if(!l&&!i.badLine)switch(e.beginPath&&e.beginPath(),e.moveTo(r[0],r[1]),i.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var m=2;m+35&&arguments[5]!==void 0?arguments[5]:!0,s=this;if(n==null){if(a&&!s.eleTextBiggerThanMin(e))return}else if(n===!1)return;if(e.isNode()){var l=e.pstyle("label");if(!l||!l.value)return;var u=s.getLabelJustification(e);t.textAlign=u,t.textBaseline="bottom"}else{var h=e.element()._private.rscratch.badLine,f=e.pstyle("label"),d=e.pstyle("source-label"),p=e.pstyle("target-label");if(h||(!f||!f.value)&&(!d||!d.value)&&(!p||!p.value))return;t.textAlign="center",t.textBaseline="bottom"}var m=!r,g;r&&(g=r,t.translate(-g.x1,-g.y1)),i==null?(s.drawText(t,e,null,m,a),e.isEdge()&&(s.drawText(t,e,"source",m,a),s.drawText(t,e,"target",m,a))):s.drawText(t,e,i,m,a),r&&t.translate(g.x1,g.y1)};Cp.getFontCache=function(t){var e;this.fontCaches=this.fontCaches||[];for(var r=0;r2&&arguments[2]!==void 0?arguments[2]:!0,n=e.pstyle("font-style").strValue,i=e.pstyle("font-size").pfValue+"px",a=e.pstyle("font-family").strValue,s=e.pstyle("font-weight").strValue,l=r?e.effectiveOpacity()*e.pstyle("text-opacity").value:1,u=e.pstyle("text-outline-opacity").value*l,h=e.pstyle("color").value,f=e.pstyle("text-outline-color").value;t.font=n+" "+s+" "+i+" "+a,t.lineJoin="round",this.colorFillStyle(t,h[0],h[1],h[2],l),this.colorStrokeStyle(t,f[0],f[1],f[2],u)};o(aqe,"circle");o(Jce,"roundRect");Cp.getTextAngle=function(t,e){var r,n=t._private,i=n.rscratch,a=e?e+"-":"",s=t.pstyle(a+"text-rotation");if(s.strValue==="autorotate"){var l=Us(i,"labelAngle",e);r=t.isEdge()?l:0}else s.strValue==="none"?r=0:r=s.pfValue;return r};Cp.drawText=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=e._private,s=a.rscratch,l=i?e.effectiveOpacity():1;if(!(i&&(l===0||e.pstyle("text-opacity").value===0))){r==="main"&&(r=null);var u=Us(s,"labelX",r),h=Us(s,"labelY",r),f,d,p=this.getLabelText(e,r);if(p!=null&&p!==""&&!isNaN(u)&&!isNaN(h)){this.setupTextStyle(t,e,i);var m=r?r+"-":"",g=Us(s,"labelWidth",r),y=Us(s,"labelHeight",r),v=e.pstyle(m+"text-margin-x").pfValue,x=e.pstyle(m+"text-margin-y").pfValue,b=e.isEdge(),T=e.pstyle("text-halign").value,S=e.pstyle("text-valign").value;b&&(T="center",S="center"),u+=v,h+=x;var w;switch(n?w=this.getTextAngle(e,r):w=0,w!==0&&(f=u,d=h,t.translate(f,d),t.rotate(w),u=0,h=0),S){case"top":break;case"center":h+=y/2;break;case"bottom":h+=y;break}var k=e.pstyle("text-background-opacity").value,C=e.pstyle("text-border-opacity").value,A=e.pstyle("text-border-width").pfValue,L=e.pstyle("text-background-padding").pfValue,I=e.pstyle("text-background-shape").strValue,R=I==="round-rectangle"||I==="roundrectangle",E=I==="circle",_=2;if(k>0||A>0&&C>0){var D=t.fillStyle,O=t.strokeStyle,N=t.lineWidth,P=e.pstyle("text-background-color").value,B=e.pstyle("text-border-color").value,F=e.pstyle("text-border-style").value,V=k>0,$=A>0&&C>0,U=u-L;switch(T){case"left":U-=g;break;case"center":U-=g/2;break}var j=h-y-L,ee=g+2*L,q=y+2*L;if(V&&(t.fillStyle="rgba(".concat(P[0],",").concat(P[1],",").concat(P[2],",").concat(k*l,")")),$&&(t.strokeStyle="rgba(".concat(B[0],",").concat(B[1],",").concat(B[2],",").concat(C*l,")"),t.lineWidth=A,t.setLineDash))switch(F){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"double":t.lineWidth=A/4,t.setLineDash([]);break;case"solid":default:t.setLineDash([]);break}if(R?(t.beginPath(),Jce(t,U,j,ee,q,_)):E?(t.beginPath(),aqe(t,U,j,ee,q)):(t.beginPath(),t.rect(U,j,ee,q)),V&&t.fill(),$&&t.stroke(),$&&F==="double"){var oe=A/2;t.beginPath(),R?Jce(t,U+oe,j+oe,ee-2*oe,q-2*oe,_):t.rect(U+oe,j+oe,ee-2*oe,q-2*oe),t.stroke()}t.fillStyle=D,t.strokeStyle=O,t.lineWidth=N,t.setLineDash&&t.setLineDash([])}var Q=2*e.pstyle("text-outline-width").pfValue;if(Q>0&&(t.lineWidth=Q),e.pstyle("text-wrap").value==="wrap"){var ue=Us(s,"labelWrapCachedLines",r),te=Us(s,"labelLineHeight",r),re=g/2,J=this.getLabelJustification(e);switch(J==="auto"||(T==="left"?J==="left"?u+=-g:J==="center"&&(u+=-re):T==="center"?J==="left"?u+=-re:J==="right"&&(u+=re):T==="right"&&(J==="center"?u+=re:J==="right"&&(u+=g))),S){case"top":h-=(ue.length-1)*te;break;case"center":case"bottom":h-=(ue.length-1)*te;break}for(var K=0;K0&&t.strokeText(ue[K],u,h),t.fillText(ue[K],u,h),h+=te}else Q>0&&t.strokeText(p,u,h),t.fillText(p,u,h);w!==0&&(t.rotate(-w),t.translate(-f,-d))}}};Lf={};Lf.drawNode=function(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0,s=this,l,u,h=e._private,f=h.rscratch,d=e.position();if(!(!At(d.x)||!At(d.y))&&!(a&&!e.visible())){var p=a?e.effectiveOpacity():1,m=s.usePaths(),g,y=!1,v=e.padding();l=e.width()+2*v,u=e.height()+2*v;var x;r&&(x=r,t.translate(-x.x1,-x.y1));for(var b=e.pstyle("background-image"),T=b.value,S=new Array(T.length),w=new Array(T.length),k=0,C=0;C0&&arguments[0]!==void 0?arguments[0]:_;s.eleFillStyle(t,e,Y)},"setupShapeColor"),te=o(function(){var Y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:$;s.colorStrokeStyle(t,D[0],D[1],D[2],Y)},"setupBorderColor"),re=o(function(){var Y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:q;s.colorStrokeStyle(t,j[0],j[1],j[2],Y)},"setupOutlineColor"),J=o(function(Y,he,z,se){var le=s.nodePathCache=s.nodePathCache||[],ke=kue(z==="polygon"?z+","+se.join(","):z,""+he,""+Y,""+Q),ve=le[ke],ye,Re=!1;return ve!=null?(ye=ve,Re=!0,f.pathCache=ye):(ye=new Path2D,le[ke]=f.pathCache=ye),{path:ye,cacheHit:Re}},"getPath"),K=e.pstyle("shape").strValue,ae=e.pstyle("shape-polygon-points").pfValue;if(m){t.translate(d.x,d.y);var Z=J(l,u,K,ae);g=Z.path,y=Z.cacheHit}var de=o(function(){if(!y){var Y=d;m&&(Y={x:0,y:0}),s.nodeShapes[s.getNodeShape(e)].draw(g||t,Y.x,Y.y,l,u,Q,f)}m?t.fill(g):t.fill()},"drawShape"),ne=o(function(){for(var Y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,he=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,z=h.backgrounding,se=0,le=0;le0&&arguments[0]!==void 0?arguments[0]:!1,he=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p;s.hasPie(e)&&(s.drawPie(t,e,he),Y&&(m||s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,l,u,Q,f)))},"drawPie"),W=o(function(){var Y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,he=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p;s.hasStripe(e)&&(t.save(),m?t.clip(f.pathCache):(s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,l,u,Q,f),t.clip()),s.drawStripe(t,e,he),t.restore(),Y&&(m||s.nodeShapes[s.getNodeShape(e)].draw(t,d.x,d.y,l,u,Q,f)))},"drawStripe"),Ve=o(function(){var Y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:p,he=(R>0?R:-R)*Y,z=R>0?0:255;R!==0&&(s.colorFillStyle(t,z,z,z,he),m?t.fill(g):t.fill())},"darken"),pe=o(function(){if(E>0){if(t.lineWidth=E,t.lineCap=P,t.lineJoin=N,t.setLineDash)switch(O){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash(F),t.lineDashOffset=V;break;case"solid":case"double":t.setLineDash([]);break}if(B!=="center"){if(t.save(),t.lineWidth*=2,B==="inside")m?t.clip(g):t.clip();else{var Y=new Path2D;Y.rect(-l/2-E,-u/2-E,l+2*E,u+2*E),Y.addPath(g),t.clip(Y,"evenodd")}m?t.stroke(g):t.stroke(),t.restore()}else m?t.stroke(g):t.stroke();if(O==="double"){t.lineWidth=E/3;var he=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",m?t.stroke(g):t.stroke(),t.globalCompositeOperation=he}t.setLineDash&&t.setLineDash([])}},"drawBorder"),Be=o(function(){if(U>0){if(t.lineWidth=U,t.lineCap="butt",t.setLineDash)switch(ee){case"dotted":t.setLineDash([1,1]);break;case"dashed":t.setLineDash([4,2]);break;case"solid":case"double":t.setLineDash([]);break}var Y=d;m&&(Y={x:0,y:0});var he=s.getNodeShape(e),z=E;B==="inside"&&(z=0),B==="outside"&&(z*=2);var se=(l+z+(U+oe))/l,le=(u+z+(U+oe))/u,ke=l*se,ve=u*le,ye=s.nodeShapes[he].points,Re;if(m){var _e=J(ke,ve,he,ye);Re=_e.path}if(he==="ellipse")s.drawEllipsePath(Re||t,Y.x,Y.y,ke,ve);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(he)){var ze=0,Ke=0,xt=0;he==="round-diamond"?ze=(z+oe+U)*1.4:he==="round-heptagon"?(ze=(z+oe+U)*1.075,xt=-(z/2+oe+U)/35):he==="round-hexagon"?ze=(z+oe+U)*1.12:he==="round-pentagon"?(ze=(z+oe+U)*1.13,xt=-(z/2+oe+U)/15):he==="round-tag"?(ze=(z+oe+U)*1.12,Ke=(z/2+U+oe)*.07):he==="round-triangle"&&(ze=(z+oe+U)*(Math.PI/2),xt=-(z+oe/2+U)/Math.PI),ze!==0&&(se=(l+ze)/l,ke=l*se,["round-hexagon","round-tag"].includes(he)||(le=(u+ze)/u,ve=u*le)),Q=Q==="auto"?Mue(ke,ve):Q;for(var We=ke/2,Oe=ve/2,et=Q+(z+U+oe)/2,Ue=new Array(ye.length/2),lt=new Array(ye.length/2),Gt=0;Gt0){if(i=i||n.position(),a==null||s==null){var m=n.padding();a=n.width()+2*m,s=n.height()+2*m}l.colorFillStyle(r,f[0],f[1],f[2],h),l.nodeShapes[d].draw(r,i.x,i.y,a+u*2,s+u*2,p),r.fill()}}}},"drawNodeOverlayUnderlay");Lf.drawNodeOverlay=$he("overlay");Lf.drawNodeUnderlay=$he("underlay");Lf.hasPie=function(t){return t=t[0],t._private.hasPie};Lf.hasStripe=function(t){return t=t[0],t._private.hasStripe};Lf.drawPie=function(t,e,r,n){e=e[0],n=n||e.position();var i=e.cy().style(),a=e.pstyle("pie-size"),s=e.pstyle("pie-hole"),l=e.pstyle("pie-start-angle").pfValue,u=n.x,h=n.y,f=e.width(),d=e.height(),p=Math.min(f,d)/2,m,g=0,y=this.usePaths();if(y&&(u=0,h=0),a.units==="%"?p=p*a.pfValue:a.pfValue!==void 0&&(p=a.pfValue/2),s.units==="%"?m=p*s.pfValue:s.pfValue!==void 0&&(m=s.pfValue/2),!(m>=p))for(var v=1;v<=i.pieBackgroundN;v++){var x=e.pstyle("pie-"+v+"-background-size").value,b=e.pstyle("pie-"+v+"-background-color").value,T=e.pstyle("pie-"+v+"-background-opacity").value*r,S=x/100;S+g>1&&(S=1-g);var w=1.5*Math.PI+2*Math.PI*g;w+=l;var k=2*Math.PI*S,C=w+k;x===0||g>=1||g+S>1||(m===0?(t.beginPath(),t.moveTo(u,h),t.arc(u,h,p,w,C),t.closePath()):(t.beginPath(),t.arc(u,h,p,w,C),t.arc(u,h,m,C,w,!0),t.closePath()),this.colorFillStyle(t,b[0],b[1],b[2],T),t.fill(),g+=S)}};Lf.drawStripe=function(t,e,r,n){e=e[0],n=n||e.position();var i=e.cy().style(),a=n.x,s=n.y,l=e.width(),u=e.height(),h=0,f=this.usePaths();t.save();var d=e.pstyle("stripe-direction").value,p=e.pstyle("stripe-size");switch(d){case"vertical":break;case"righward":t.rotate(-Math.PI/2);break}var m=l,g=u;p.units==="%"?(m=m*p.pfValue,g=g*p.pfValue):p.pfValue!==void 0&&(m=p.pfValue,g=p.pfValue),f&&(a=0,s=0),s-=m/2,a-=g/2;for(var y=1;y<=i.stripeBackgroundN;y++){var v=e.pstyle("stripe-"+y+"-background-size").value,x=e.pstyle("stripe-"+y+"-background-color").value,b=e.pstyle("stripe-"+y+"-background-opacity").value*r,T=v/100;T+h>1&&(T=1-h),!(v===0||h>=1||h+T>1)&&(t.beginPath(),t.rect(a,s+g*h,m,g*T),t.closePath(),this.colorFillStyle(t,x[0],x[1],x[2],b),t.fill(),h+=T)}t.restore()};us={},sqe=100;us.getPixelRatio=function(){var t=this.data.contexts[0];if(this.forcedPixelRatio!=null)return this.forcedPixelRatio;var e=this.cy.window(),r=t.backingStorePixelRatio||t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1;return(e.devicePixelRatio||1)/r};us.paintCache=function(t){for(var e=this.paintCaches=this.paintCaches||[],r=!0,n,i=0;ie.minMbLowQualFrames&&(e.motionBlurPxRatio=e.mbPxRBlurry)),e.clearingMotionBlur&&(e.motionBlurPxRatio=1),e.textureDrawLastFrame&&!d&&(f[e.NODE]=!0,f[e.SELECT_BOX]=!0);var b=r.style(),T=r.zoom(),S=s!==void 0?s:T,w=r.pan(),k={x:w.x,y:w.y},C={zoom:T,pan:{x:w.x,y:w.y}},A=e.prevViewport,L=A===void 0||C.zoom!==A.zoom||C.pan.x!==A.pan.x||C.pan.y!==A.pan.y;!L&&!(y&&!g)&&(e.motionBlurPxRatio=1),l&&(k=l),S*=u,k.x*=u,k.y*=u;var I=e.getCachedZSortedEles();function R(te,re,J,K,ae){var Z=te.globalCompositeOperation;te.globalCompositeOperation="destination-out",e.colorFillStyle(te,255,255,255,e.motionBlurTransparency),te.fillRect(re,J,K,ae),te.globalCompositeOperation=Z}o(R,"mbclear");function E(te,re){var J,K,ae,Z;!e.clearingMotionBlur&&(te===h.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]||te===h.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG])?(J={x:w.x*m,y:w.y*m},K=T*m,ae=e.canvasWidth*m,Z=e.canvasHeight*m):(J=k,K=S,ae=e.canvasWidth,Z=e.canvasHeight),te.setTransform(1,0,0,1,0,0),re==="motionBlur"?R(te,0,0,ae,Z):!n&&(re===void 0||re)&&te.clearRect(0,0,ae,Z),i||(te.translate(J.x,J.y),te.scale(K,K)),l&&te.translate(l.x,l.y),s&&te.scale(s,s)}if(o(E,"setContextTransform"),d||(e.textureDrawLastFrame=!1),d){if(e.textureDrawLastFrame=!0,!e.textureCache){e.textureCache={},e.textureCache.bb=r.mutableElements().boundingBox(),e.textureCache.texture=e.data.bufferCanvases[e.TEXTURE_BUFFER];var _=e.data.bufferContexts[e.TEXTURE_BUFFER];_.setTransform(1,0,0,1,0,0),_.clearRect(0,0,e.canvasWidth*e.textureMult,e.canvasHeight*e.textureMult),e.render({forcedContext:_,drawOnlyNodeLayer:!0,forcedPxRatio:u*e.textureMult});var C=e.textureCache.viewport={zoom:r.zoom(),pan:r.pan(),width:e.canvasWidth,height:e.canvasHeight};C.mpan={x:(0-C.pan.x)/C.zoom,y:(0-C.pan.y)/C.zoom}}f[e.DRAG]=!1,f[e.NODE]=!1;var D=h.contexts[e.NODE],O=e.textureCache.texture,C=e.textureCache.viewport;D.setTransform(1,0,0,1,0,0),p?R(D,0,0,C.width,C.height):D.clearRect(0,0,C.width,C.height);var N=b.core("outside-texture-bg-color").value,P=b.core("outside-texture-bg-opacity").value;e.colorFillStyle(D,N[0],N[1],N[2],P),D.fillRect(0,0,C.width,C.height);var T=r.zoom();E(D,!1),D.clearRect(C.mpan.x,C.mpan.y,C.width/C.zoom/u,C.height/C.zoom/u),D.drawImage(O,C.mpan.x,C.mpan.y,C.width/C.zoom/u,C.height/C.zoom/u)}else e.textureOnViewport&&!n&&(e.textureCache=null);var B=r.extent(),F=e.pinching||e.hoverData.dragging||e.swipePanning||e.data.wheelZooming||e.hoverData.draggingEles||e.cy.animated(),V=e.hideEdgesOnViewport&&F,$=[];if($[e.NODE]=!f[e.NODE]&&p&&!e.clearedForMotionBlur[e.NODE]||e.clearingMotionBlur,$[e.NODE]&&(e.clearedForMotionBlur[e.NODE]=!0),$[e.DRAG]=!f[e.DRAG]&&p&&!e.clearedForMotionBlur[e.DRAG]||e.clearingMotionBlur,$[e.DRAG]&&(e.clearedForMotionBlur[e.DRAG]=!0),f[e.NODE]||i||a||$[e.NODE]){var U=p&&!$[e.NODE]&&m!==1,D=n||(U?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_NODE]:h.contexts[e.NODE]),j=p&&!U?"motionBlur":void 0;E(D,j),V?e.drawCachedNodes(D,I.nondrag,u,B):e.drawLayeredElements(D,I.nondrag,u,B),e.debug&&e.drawDebugPoints(D,I.nondrag),!i&&!p&&(f[e.NODE]=!1)}if(!a&&(f[e.DRAG]||i||$[e.DRAG])){var U=p&&!$[e.DRAG]&&m!==1,D=n||(U?e.data.bufferContexts[e.MOTIONBLUR_BUFFER_DRAG]:h.contexts[e.DRAG]);E(D,p&&!U?"motionBlur":void 0),V?e.drawCachedNodes(D,I.drag,u,B):e.drawCachedElements(D,I.drag,u,B),e.debug&&e.drawDebugPoints(D,I.drag),!i&&!p&&(f[e.DRAG]=!1)}if(this.drawSelectionRectangle(t,E),p&&m!==1){var ee=h.contexts[e.NODE],q=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_NODE],oe=h.contexts[e.DRAG],Q=e.data.bufferCanvases[e.MOTIONBLUR_BUFFER_DRAG],ue=o(function(re,J,K){re.setTransform(1,0,0,1,0,0),K||!x?re.clearRect(0,0,e.canvasWidth,e.canvasHeight):R(re,0,0,e.canvasWidth,e.canvasHeight);var ae=m;re.drawImage(J,0,0,e.canvasWidth*ae,e.canvasHeight*ae,0,0,e.canvasWidth,e.canvasHeight)},"drawMotionBlur");(f[e.NODE]||$[e.NODE])&&(ue(ee,q,$[e.NODE]),f[e.NODE]=!1),(f[e.DRAG]||$[e.DRAG])&&(ue(oe,Q,$[e.DRAG]),f[e.DRAG]=!1)}e.prevViewport=C,e.clearingMotionBlur&&(e.clearingMotionBlur=!1,e.motionBlurCleared=!0,e.motionBlur=!0),p&&(e.motionBlurTimeout=setTimeout(function(){e.motionBlurTimeout=null,e.clearedForMotionBlur[e.NODE]=!1,e.clearedForMotionBlur[e.DRAG]=!1,e.motionBlur=!1,e.clearingMotionBlur=!d,e.mbFrames=0,f[e.NODE]=!0,f[e.DRAG]=!0,e.redraw()},sqe)),n||r.emit("render")};us.drawSelectionRectangle=function(t,e){var r=this,n=r.cy,i=r.data,a=n.style(),s=t.drawOnlyNodeLayer,l=t.drawAllLayers,u=i.canvasNeedsRedraw,h=t.forcedContext;if(r.showFps||!s&&u[r.SELECT_BOX]&&!l){var f=h||i.contexts[r.SELECT_BOX];if(e(f),r.selection[4]==1&&(r.hoverData.selecting||r.touchData.selecting)){var d=r.cy.zoom(),p=a.core("selection-box-border-width").value/d;f.lineWidth=p,f.fillStyle="rgba("+a.core("selection-box-color").value[0]+","+a.core("selection-box-color").value[1]+","+a.core("selection-box-color").value[2]+","+a.core("selection-box-opacity").value+")",f.fillRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]),p>0&&(f.strokeStyle="rgba("+a.core("selection-box-border-color").value[0]+","+a.core("selection-box-border-color").value[1]+","+a.core("selection-box-border-color").value[2]+","+a.core("selection-box-opacity").value+")",f.strokeRect(r.selection[0],r.selection[1],r.selection[2]-r.selection[0],r.selection[3]-r.selection[1]))}if(i.bgActivePosistion&&!r.hoverData.selecting){var d=r.cy.zoom(),m=i.bgActivePosistion;f.fillStyle="rgba("+a.core("active-bg-color").value[0]+","+a.core("active-bg-color").value[1]+","+a.core("active-bg-color").value[2]+","+a.core("active-bg-opacity").value+")",f.beginPath(),f.arc(m.x,m.y,a.core("active-bg-size").pfValue/d,0,2*Math.PI),f.fill()}var g=r.lastRedrawTime;if(r.showFps&&g){g=Math.round(g);var y=Math.round(1e3/g),v="1 frame = "+g+" ms = "+y+" fps";if(f.setTransform(1,0,0,1,0,0),f.fillStyle="rgba(255, 0, 0, 0.75)",f.strokeStyle="rgba(255, 0, 0, 0.75)",f.font="30px Arial",!K2){var x=f.measureText(v);K2=x.actualBoundingBoxAscent}f.fillText(v,0,K2);var b=60;f.strokeRect(0,K2+10,250,20),f.fillRect(0,K2+10,250*Math.min(y/b,1),20)}l||(u[r.SELECT_BOX]=!1)}};o(eue,"compileShader");o(oqe,"createProgram");o(lqe,"createTextureCanvas");o(MI,"getEffectivePanZoom");o(cqe,"getEffectiveZoom");o(uqe,"modelToRenderedPosition");o(hqe,"isSimpleShape");o(fqe,"arrayEqual");o(dp,"toWebGLColor");o(Zm,"indexToVec4");o(dqe,"vec4ToIndex");o(pqe,"createTexture");o(zhe,"getTypeInfo");o(Ghe,"createTypedArray");o(mqe,"createTypedArrayView");o(gqe,"createBufferStaticDraw");o(Mc,"createBufferDynamicDraw");o(yqe,"create3x3MatrixBufferDynamicDraw");o(vqe,"createPickingFrameBuffer");tue=typeof Float32Array<"u"?Float32Array:Array;Math.hypot||(Math.hypot=function(){for(var t=0,e=arguments.length;e--;)t+=arguments[e]*arguments[e];return Math.sqrt(t)});o(BM,"create");o(rue,"identity");o(xqe,"multiply");o(Xk,"translate");o(nue,"rotate");o(aI,"scale");o(bqe,"projection");Tqe=(function(){function t(e,r,n,i){Af(this,t),this.debugID=Math.floor(Math.random()*1e4),this.r=e,this.texSize=r,this.texRows=n,this.texHeight=Math.floor(r/n),this.enableWrapping=!0,this.locked=!1,this.texture=null,this.needsBuffer=!0,this.freePointer={x:0,row:0},this.keyToLocation=new Map,this.canvas=i(e,r,r),this.scratch=i(e,r,this.texHeight,"scratch")}return o(t,"Atlas"),_f(t,[{key:"lock",value:o(function(){this.locked=!0},"lock")},{key:"getKeys",value:o(function(){return new Set(this.keyToLocation.keys())},"getKeys")},{key:"getScale",value:o(function(r){var n=r.w,i=r.h,a=this.texHeight,s=this.texSize,l=a/i,u=n*l,h=i*l;return u>s&&(l=s/n,u=n*l,h=i*l),{scale:l,texW:u,texH:h}},"getScale")},{key:"draw",value:o(function(r,n,i){var a=this;if(this.locked)throw new Error("can't draw, atlas is locked");var s=this.texSize,l=this.texRows,u=this.texHeight,h=this.getScale(n),f=h.scale,d=h.texW,p=h.texH,m=o(function(T,S){if(i&&S){var w=S.context,k=T.x,C=T.row,A=k,L=u*C;w.save(),w.translate(A,L),w.scale(f,f),i(w,n),w.restore()}},"drawAt"),g=[null,null],y=o(function(){m(a.freePointer,a.canvas),g[0]={x:a.freePointer.x,y:a.freePointer.row*u,w:d,h:p},g[1]={x:a.freePointer.x+d,y:a.freePointer.row*u,w:0,h:p},a.freePointer.x+=d,a.freePointer.x==s&&(a.freePointer.x=0,a.freePointer.row++)},"drawNormal"),v=o(function(){var T=a.scratch,S=a.canvas;T.clear(),m({x:0,row:0},T);var w=s-a.freePointer.x,k=d-w,C=u;{var A=a.freePointer.x,L=a.freePointer.row*u,I=w;S.context.drawImage(T,0,0,I,C,A,L,I,C),g[0]={x:A,y:L,w:I,h:p}}{var R=w,E=(a.freePointer.row+1)*u,_=k;S&&S.context.drawImage(T,R,0,_,C,0,E,_,C),g[1]={x:0,y:E,w:_,h:p}}a.freePointer.x=k,a.freePointer.row++},"drawWrapped"),x=o(function(){a.freePointer.x=0,a.freePointer.row++},"moveToStartOfNextRow");if(this.freePointer.x+d<=s)y();else{if(this.freePointer.row>=l-1)return!1;this.freePointer.x===s?(x(),y()):this.enableWrapping?v():(x(),y())}return this.keyToLocation.set(r,g),this.needsBuffer=!0,g},"draw")},{key:"getOffsets",value:o(function(r){return this.keyToLocation.get(r)},"getOffsets")},{key:"isEmpty",value:o(function(){return this.freePointer.x===0&&this.freePointer.row===0},"isEmpty")},{key:"canFit",value:o(function(r){if(this.locked)return!1;var n=this.texSize,i=this.texRows,a=this.getScale(r),s=a.texW;return this.freePointer.x+s>n?this.freePointer.row1&&arguments[1]!==void 0?arguments[1]:{},a=i.forceRedraw,s=a===void 0?!1:a,l=i.filterEle,u=l===void 0?function(){return!0}:l,h=i.filterType,f=h===void 0?function(){return!0}:h,d=!1,p=!1,m=qs(r),g;try{for(m.s();!(g=m.n()).done;){var y=g.value;if(u(y)){var v=qs(this.renderTypes.values()),x;try{var b=o(function(){var S=x.value,w=S.type;if(f(w)){var k=n.collections.get(S.collection),C=S.getKey(y),A=Array.isArray(C)?C:[C];if(s)A.forEach(function(E){return k.markKeyForGC(E)}),p=!0;else{var L=S.getID?S.getID(y):y.id(),I=n._key(w,L),R=n.typeAndIdToKey.get(I);R!==void 0&&!fqe(A,R)&&(d=!0,n.typeAndIdToKey.delete(I),R.forEach(function(E){return k.markKeyForGC(E)}))}}},"_loop2");for(v.s();!(x=v.n()).done;)b()}catch(T){v.e(T)}finally{v.f()}}}}catch(T){m.e(T)}finally{m.f()}return p&&(this.gc(),d=!1),d},"invalidate")},{key:"gc",value:o(function(){var r=qs(this.collections.values()),n;try{for(r.s();!(n=r.n()).done;){var i=n.value;i.gc()}}catch(a){r.e(a)}finally{r.f()}},"gc")},{key:"getOrCreateAtlas",value:o(function(r,n,i,a){var s=this.renderTypes.get(n),l=this.collections.get(s.collection),u=!1,h=l.draw(a,i,function(p){s.drawClipped?(p.save(),p.beginPath(),p.rect(0,0,i.w,i.h),p.clip(),s.drawElement(p,r,i,!0,!0),p.restore()):s.drawElement(p,r,i,!0,!0),u=!0});if(u){var f=s.getID?s.getID(r):r.id(),d=this._key(n,f);this.typeAndIdToKey.has(d)?this.typeAndIdToKey.get(d).push(a):this.typeAndIdToKey.set(d,[a])}return h},"getOrCreateAtlas")},{key:"getAtlasInfo",value:o(function(r,n){var i=this,a=this.renderTypes.get(n),s=a.getKey(r),l=Array.isArray(s)?s:[s];return l.map(function(u){var h=a.getBoundingBox(r,u),f=i.getOrCreateAtlas(r,n,h,u),d=f.getOffsets(u),p=_i(d,2),m=p[0],g=p[1];return{atlas:f,tex:m,tex1:m,tex2:g,bb:h}})},"getAtlasInfo")},{key:"getDebugInfo",value:o(function(){var r=[],n=qs(this.collections),i;try{for(n.s();!(i=n.n()).done;){var a=_i(i.value,2),s=a[0],l=a[1],u=l.getCounts(),h=u.keyCount,f=u.atlasCount;r.push({type:s,keyCount:h,atlasCount:f})}}catch(d){n.e(d)}finally{n.f()}return r},"getDebugInfo")}])})(),Sqe=(function(){function t(e){Af(this,t),this.globalOptions=e,this.atlasSize=e.webglTexSize,this.maxAtlasesPerBatch=e.webglTexPerBatch,this.batchAtlases=[]}return o(t,"AtlasBatchManager"),_f(t,[{key:"getMaxAtlasesPerBatch",value:o(function(){return this.maxAtlasesPerBatch},"getMaxAtlasesPerBatch")},{key:"getAtlasSize",value:o(function(){return this.atlasSize},"getAtlasSize")},{key:"getIndexArray",value:o(function(){return Array.from({length:this.maxAtlasesPerBatch},function(r,n){return n})},"getIndexArray")},{key:"startBatch",value:o(function(){this.batchAtlases=[]},"startBatch")},{key:"getAtlasCount",value:o(function(){return this.batchAtlases.length},"getAtlasCount")},{key:"getAtlases",value:o(function(){return this.batchAtlases},"getAtlases")},{key:"canAddToCurrentBatch",value:o(function(r){return this.batchAtlases.length===this.maxAtlasesPerBatch?this.batchAtlases.includes(r):!0},"canAddToCurrentBatch")},{key:"getAtlasIndexForBatch",value:o(function(r){var n=this.batchAtlases.indexOf(r);if(n<0){if(this.batchAtlases.length===this.maxAtlasesPerBatch)throw new Error("cannot add more atlases to batch");this.batchAtlases.push(r),n=this.batchAtlases.length-1}return n},"getAtlasIndexForBatch")}])})(),Cqe=` + float circleSD(vec2 p, float r) { + return distance(vec2(0), p) - r; // signed distance + } +`,Aqe=` + float rectangleSD(vec2 p, vec2 b) { + vec2 d = abs(p)-b; + return distance(vec2(0),max(d,0.0)) + min(max(d.x,d.y),0.0); + } +`,_qe=` + float roundRectangleSD(vec2 p, vec2 b, vec4 cr) { + cr.xy = (p.x > 0.0) ? cr.xy : cr.zw; + cr.x = (p.y > 0.0) ? cr.x : cr.y; + vec2 q = abs(p) - b + cr.x; + return min(max(q.x, q.y), 0.0) + distance(vec2(0), max(q, 0.0)) - cr.x; + } +`,Dqe=` + float ellipseSD(vec2 p, vec2 ab) { + p = abs( p ); // symmetry + + // find root with Newton solver + vec2 q = ab*(p-ab); + float w = (q.x1.0) ? d : -d; + } +`,ix={SCREEN:{name:"screen",screen:!0},PICKING:{name:"picking",picking:!0}},oE={IGNORE:1,USE_BB:2},FM=0,iue=1,aue=2,$M=3,Jm=4,Bk=5,Q2=6,Z2=7,Lqe=(function(){function t(e,r,n){Af(this,t),this.r=e,this.gl=r,this.maxInstances=n.webglBatchSize,this.atlasSize=n.webglTexSize,this.bgColor=n.bgColor,this.debug=n.webglDebug,this.batchDebugInfo=[],n.enableWrapping=!0,n.createTextureCanvas=lqe,this.atlasManager=new Eqe(e,n),this.batchManager=new Sqe(n),this.simpleShapeOptions=new Map,this.program=this._createShaderProgram(ix.SCREEN),this.pickingProgram=this._createShaderProgram(ix.PICKING),this.vao=this._createVAO()}return o(t,"ElementDrawingWebGL"),_f(t,[{key:"addAtlasCollection",value:o(function(r,n){this.atlasManager.addAtlasCollection(r,n)},"addAtlasCollection")},{key:"addTextureAtlasRenderType",value:o(function(r,n){this.atlasManager.addRenderType(r,n)},"addTextureAtlasRenderType")},{key:"addSimpleShapeRenderType",value:o(function(r,n){this.simpleShapeOptions.set(r,n)},"addSimpleShapeRenderType")},{key:"invalidate",value:o(function(r){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=n.type,a=this.atlasManager;return i?a.invalidate(r,{filterType:o(function(l){return l===i},"filterType"),forceRedraw:!0}):a.invalidate(r)},"invalidate")},{key:"gc",value:o(function(){this.atlasManager.gc()},"gc")},{key:"_createShaderProgram",value:o(function(r){var n=this.gl,i=`#version 300 es + precision highp float; + + uniform mat3 uPanZoomMatrix; + uniform int uAtlasSize; + + // instanced + in vec2 aPosition; // a vertex from the unit square + + in mat3 aTransform; // used to transform verticies, eg into a bounding box + in int aVertType; // the type of thing we are rendering + + // the z-index that is output when using picking mode + in vec4 aIndex; + + // For textures + in int aAtlasId; // which shader unit/atlas to use + in vec4 aTex; // x/y/w/h of texture in atlas + + // for edges + in vec4 aPointAPointB; + in vec4 aPointCPointD; + in vec2 aLineWidth; // also used for node border width + + // simple shapes + in vec4 aCornerRadius; // for round-rectangle [top-right, bottom-right, top-left, bottom-left] + in vec4 aColor; // also used for edges + in vec4 aBorderColor; // aLineWidth is used for border width + + // output values passed to the fragment shader + out vec2 vTexCoord; + out vec4 vColor; + out vec2 vPosition; + // flat values are not interpolated + flat out int vAtlasId; + flat out int vVertType; + flat out vec2 vTopRight; + flat out vec2 vBotLeft; + flat out vec4 vCornerRadius; + flat out vec4 vBorderColor; + flat out vec2 vBorderWidth; + flat out vec4 vIndex; + + void main(void) { + int vid = gl_VertexID; + vec2 position = aPosition; // TODO make this a vec3, simplifies some code below + + if(aVertType == `.concat(FM,`) { + float texX = aTex.x; // texture coordinates + float texY = aTex.y; + float texW = aTex.z; + float texH = aTex.w; + + if(vid == 1 || vid == 2 || vid == 4) { + texX += texW; + } + if(vid == 2 || vid == 4 || vid == 5) { + texY += texH; + } + + float d = float(uAtlasSize); + vTexCoord = vec2(texX / d, texY / d); // tex coords must be between 0 and 1 + + gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0); + } + else if(aVertType == `).concat(Jm," || aVertType == ").concat(Z2,` + || aVertType == `).concat(Bk," || aVertType == ").concat(Q2,`) { // simple shapes + + // the bounding box is needed by the fragment shader + vBotLeft = (aTransform * vec3(0, 0, 1)).xy; // flat + vTopRight = (aTransform * vec3(1, 1, 1)).xy; // flat + vPosition = (aTransform * vec3(position, 1)).xy; // will be interpolated + + // calculations are done in the fragment shader, just pass these along + vColor = aColor; + vCornerRadius = aCornerRadius; + vBorderColor = aBorderColor; + vBorderWidth = aLineWidth; + + gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0); + } + else if(aVertType == `).concat(iue,`) { + vec2 source = aPointAPointB.xy; + vec2 target = aPointAPointB.zw; + + // adjust the geometry so that the line is centered on the edge + position.y = position.y - 0.5; + + // stretch the unit square into a long skinny rectangle + vec2 xBasis = target - source; + vec2 yBasis = normalize(vec2(-xBasis.y, xBasis.x)); + vec2 point = source + xBasis * position.x + yBasis * aLineWidth[0] * position.y; + + gl_Position = vec4(uPanZoomMatrix * vec3(point, 1.0), 1.0); + vColor = aColor; + } + else if(aVertType == `).concat(aue,`) { + vec2 pointA = aPointAPointB.xy; + vec2 pointB = aPointAPointB.zw; + vec2 pointC = aPointCPointD.xy; + vec2 pointD = aPointCPointD.zw; + + // adjust the geometry so that the line is centered on the edge + position.y = position.y - 0.5; + + vec2 p0, p1, p2, pos; + if(position.x == 0.0) { // The left side of the unit square + p0 = pointA; + p1 = pointB; + p2 = pointC; + pos = position; + } else { // The right side of the unit square, use same approach but flip the geometry upside down + p0 = pointD; + p1 = pointC; + p2 = pointB; + pos = vec2(0.0, -position.y); + } + + vec2 p01 = p1 - p0; + vec2 p12 = p2 - p1; + vec2 p21 = p1 - p2; + + // Find the normal vector. + vec2 tangent = normalize(normalize(p12) + normalize(p01)); + vec2 normal = vec2(-tangent.y, tangent.x); + + // Find the vector perpendicular to p0 -> p1. + vec2 p01Norm = normalize(vec2(-p01.y, p01.x)); + + // Determine the bend direction. + float sigma = sign(dot(p01 + p21, normal)); + float width = aLineWidth[0]; + + if(sign(pos.y) == -sigma) { + // This is an intersecting vertex. Adjust the position so that there's no overlap. + vec2 point = 0.5 * width * normal * -sigma / dot(normal, p01Norm); + gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0); + } else { + // This is a non-intersecting vertex. Treat it like a mitre join. + vec2 point = 0.5 * width * normal * sigma * dot(normal, p01Norm); + gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0); + } + + vColor = aColor; + } + else if(aVertType == `).concat($M,` && vid < 3) { + // massage the first triangle into an edge arrow + if(vid == 0) + position = vec2(-0.15, -0.3); + if(vid == 1) + position = vec2( 0.0, 0.0); + if(vid == 2) + position = vec2( 0.15, -0.3); + + gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0); + vColor = aColor; + } + else { + gl_Position = vec4(2.0, 0.0, 0.0, 1.0); // discard vertex by putting it outside webgl clip space + } + + vAtlasId = aAtlasId; + vVertType = aVertType; + vIndex = aIndex; + } + `),a=this.batchManager.getIndexArray(),s=`#version 300 es + precision highp float; + + // declare texture unit for each texture atlas in the batch + `.concat(a.map(function(h){return"uniform sampler2D uTexture".concat(h,";")}).join(` + `),` + + uniform vec4 uBGColor; + uniform float uZoom; + + in vec2 vTexCoord; + in vec4 vColor; + in vec2 vPosition; // model coordinates + + flat in int vAtlasId; + flat in vec4 vIndex; + flat in int vVertType; + flat in vec2 vTopRight; + flat in vec2 vBotLeft; + flat in vec4 vCornerRadius; + flat in vec4 vBorderColor; + flat in vec2 vBorderWidth; + + out vec4 outColor; + + `).concat(Cqe,` + `).concat(Aqe,` + `).concat(_qe,` + `).concat(Dqe,` + + vec4 blend(vec4 top, vec4 bot) { // blend colors with premultiplied alpha + return vec4( + top.rgb + (bot.rgb * (1.0 - top.a)), + top.a + (bot.a * (1.0 - top.a)) + ); + } + + vec4 distInterp(vec4 cA, vec4 cB, float d) { // interpolate color using Signed Distance + // scale to the zoom level so that borders don't look blurry when zoomed in + // note 1.5 is an aribitrary value chosen because it looks good + return mix(cA, cB, 1.0 - smoothstep(0.0, 1.5 / uZoom, abs(d))); + } + + void main(void) { + if(vVertType == `).concat(FM,`) { + // look up the texel from the texture unit + `).concat(a.map(function(h){return"if(vAtlasId == ".concat(h,") outColor = texture(uTexture").concat(h,", vTexCoord);")}).join(` + else `),` + } + else if(vVertType == `).concat($M,`) { + // mimics how canvas renderer uses context.globalCompositeOperation = 'destination-out'; + outColor = blend(vColor, uBGColor); + outColor.a = 1.0; // make opaque, masks out line under arrow + } + else if(vVertType == `).concat(Jm,` && vBorderWidth == vec2(0.0)) { // simple rectangle with no border + outColor = vColor; // unit square is already transformed to the rectangle, nothing else needs to be done + } + else if(vVertType == `).concat(Jm," || vVertType == ").concat(Z2,` + || vVertType == `).concat(Bk," || vVertType == ").concat(Q2,`) { // use SDF + + float outerBorder = vBorderWidth[0]; + float innerBorder = vBorderWidth[1]; + float borderPadding = outerBorder * 2.0; + float w = vTopRight.x - vBotLeft.x - borderPadding; + float h = vTopRight.y - vBotLeft.y - borderPadding; + vec2 b = vec2(w/2.0, h/2.0); // half width, half height + vec2 p = vPosition - vec2(vTopRight.x - b[0] - outerBorder, vTopRight.y - b[1] - outerBorder); // translate to center + + float d; // signed distance + if(vVertType == `).concat(Jm,`) { + d = rectangleSD(p, b); + } else if(vVertType == `).concat(Z2,` && w == h) { + d = circleSD(p, b.x); // faster than ellipse + } else if(vVertType == `).concat(Z2,`) { + d = ellipseSD(p, b); + } else { + d = roundRectangleSD(p, b, vCornerRadius.wzyx); + } + + // use the distance to interpolate a color to smooth the edges of the shape, doesn't need multisampling + // we must smooth colors inwards, because we can't change pixels outside the shape's bounding box + if(d > 0.0) { + if(d > outerBorder) { + discard; + } else { + outColor = distInterp(vBorderColor, vec4(0), d - outerBorder); + } + } else { + if(d > innerBorder) { + vec4 outerColor = outerBorder == 0.0 ? vec4(0) : vBorderColor; + vec4 innerBorderColor = blend(vBorderColor, vColor); + outColor = distInterp(innerBorderColor, outerColor, d); + } + else { + vec4 outerColor; + if(innerBorder == 0.0 && outerBorder == 0.0) { + outerColor = vec4(0); + } else if(innerBorder == 0.0) { + outerColor = vBorderColor; + } else { + outerColor = blend(vBorderColor, vColor); + } + outColor = distInterp(vColor, outerColor, d - innerBorder); + } + } + } + else { + outColor = vColor; + } + + `).concat(r.picking?`if(outColor.a == 0.0) discard; + else outColor = vIndex;`:"",` + } + `),l=oqe(n,i,s);l.aPosition=n.getAttribLocation(l,"aPosition"),l.aIndex=n.getAttribLocation(l,"aIndex"),l.aVertType=n.getAttribLocation(l,"aVertType"),l.aTransform=n.getAttribLocation(l,"aTransform"),l.aAtlasId=n.getAttribLocation(l,"aAtlasId"),l.aTex=n.getAttribLocation(l,"aTex"),l.aPointAPointB=n.getAttribLocation(l,"aPointAPointB"),l.aPointCPointD=n.getAttribLocation(l,"aPointCPointD"),l.aLineWidth=n.getAttribLocation(l,"aLineWidth"),l.aColor=n.getAttribLocation(l,"aColor"),l.aCornerRadius=n.getAttribLocation(l,"aCornerRadius"),l.aBorderColor=n.getAttribLocation(l,"aBorderColor"),l.uPanZoomMatrix=n.getUniformLocation(l,"uPanZoomMatrix"),l.uAtlasSize=n.getUniformLocation(l,"uAtlasSize"),l.uBGColor=n.getUniformLocation(l,"uBGColor"),l.uZoom=n.getUniformLocation(l,"uZoom"),l.uTextures=[];for(var u=0;u1&&arguments[1]!==void 0?arguments[1]:ix.SCREEN;this.panZoomMatrix=r,this.renderTarget=n,this.batchDebugInfo=[],this.wrappedCount=0,this.simpleCount=0,this.startBatch()},"startFrame")},{key:"startBatch",value:o(function(){this.instanceCount=0,this.batchManager.startBatch()},"startBatch")},{key:"endFrame",value:o(function(){this.endBatch()},"endFrame")},{key:"_isVisible",value:o(function(r,n){return r.visible()?n&&n.isVisible?n.isVisible(r):!0:!1},"_isVisible")},{key:"drawTexture",value:o(function(r,n,i){var a=this.atlasManager,s=this.batchManager,l=a.getRenderTypeOpts(i);if(this._isVisible(r,l)&&!(r.isEdge()&&!this._isValidEdge(r))){if(this.renderTarget.picking&&l.getTexPickingMode){var u=l.getTexPickingMode(r);if(u===oE.IGNORE)return;if(u==oE.USE_BB){this.drawPickingRectangle(r,n,i);return}}var h=a.getAtlasInfo(r,i),f=qs(h),d;try{for(f.s();!(d=f.n()).done;){var p=d.value,m=p.atlas,g=p.tex1,y=p.tex2;s.canAddToCurrentBatch(m)||this.endBatch();for(var v=s.getAtlasIndexForBatch(m),x=0,b=[[g,!0],[y,!1]];x=this.maxInstances&&this.endBatch()}}}}catch(R){f.e(R)}finally{f.f()}}},"drawTexture")},{key:"setTransformMatrix",value:o(function(r,n,i,a){var s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,l=0;if(i.shapeProps&&i.shapeProps.padding&&(l=r.pstyle(i.shapeProps.padding).pfValue),a){var u=a.bb,h=a.tex1,f=a.tex2,d=h.w/(h.w+f.w);s||(d=1-d);var p=this._getAdjustedBB(u,l,s,d);this._applyTransformMatrix(n,p,i,r)}else{var m=i.getBoundingBox(r),g=this._getAdjustedBB(m,l,!0,1);this._applyTransformMatrix(n,g,i,r)}},"setTransformMatrix")},{key:"_applyTransformMatrix",value:o(function(r,n,i,a){var s,l;rue(r);var u=i.getRotation?i.getRotation(a):0;if(u!==0){var h=i.getRotationPoint(a),f=h.x,d=h.y;Xk(r,r,[f,d]),nue(r,r,u);var p=i.getRotationOffset(a);s=p.x+(n.xOffset||0),l=p.y+(n.yOffset||0)}else s=n.x1,l=n.y1;Xk(r,r,[s,l]),aI(r,r,[n.w,n.h])},"_applyTransformMatrix")},{key:"_getAdjustedBB",value:o(function(r,n,i,a){var s=r.x1,l=r.y1,u=r.w,h=r.h,f=r.yOffset;n&&(s-=n,l-=n,u+=2*n,h+=2*n);var d=0,p=u*a;return i&&a<1?u=p:!i&&a<1&&(d=u-p,s+=d,u=p),{x1:s,y1:l,w:u,h,xOffset:d,yOffset:f}},"_getAdjustedBB")},{key:"drawPickingRectangle",value:o(function(r,n,i){var a=this.atlasManager.getRenderTypeOpts(i),s=this.instanceCount;this.vertTypeBuffer.getView(s)[0]=Jm;var l=this.indexBuffer.getView(s);Zm(n,l);var u=this.colorBuffer.getView(s);dp([0,0,0],1,u);var h=this.transformBuffer.getMatrixView(s);this.setTransformMatrix(r,h,a),this.simpleCount++,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()},"drawPickingRectangle")},{key:"drawNode",value:o(function(r,n,i){var a=this.simpleShapeOptions.get(i);if(this._isVisible(r,a)){var s=a.shapeProps,l=this._getVertTypeForShape(r,s.shape);if(l===void 0||a.isSimple&&!a.isSimple(r)){this.drawTexture(r,n,i);return}var u=this.instanceCount;if(this.vertTypeBuffer.getView(u)[0]=l,l===Bk||l===Q2){var h=a.getBoundingBox(r),f=this._getCornerRadius(r,s.radius,h),d=this.cornerRadiusBuffer.getView(u);d[0]=f,d[1]=f,d[2]=f,d[3]=f,l===Q2&&(d[0]=0,d[2]=0)}var p=this.indexBuffer.getView(u);Zm(n,p);var m=r.pstyle(s.color).value,g=r.pstyle(s.opacity).value,y=this.colorBuffer.getView(u);dp(m,g,y);var v=this.lineWidthBuffer.getView(u);if(v[0]=0,v[1]=0,s.border){var x=r.pstyle("border-width").value;if(x>0){var b=r.pstyle("border-color").value,T=r.pstyle("border-opacity").value,S=this.borderColorBuffer.getView(u);dp(b,T,S);var w=r.pstyle("border-position").value;if(w==="inside")v[0]=0,v[1]=-x;else if(w==="outside")v[0]=x,v[1]=0;else{var k=x/2;v[0]=k,v[1]=-k}}}var C=this.transformBuffer.getMatrixView(u);this.setTransformMatrix(r,C,a),this.simpleCount++,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}},"drawNode")},{key:"_getVertTypeForShape",value:o(function(r,n){var i=r.pstyle(n).value;switch(i){case"rectangle":return Jm;case"ellipse":return Z2;case"roundrectangle":case"round-rectangle":return Bk;case"bottom-round-rectangle":return Q2;default:return}},"_getVertTypeForShape")},{key:"_getCornerRadius",value:o(function(r,n,i){var a=i.w,s=i.h;if(r.pstyle(n).value==="auto")return kf(a,s);var l=r.pstyle(n).pfValue,u=a/2,h=s/2;return Math.min(l,h,u)},"_getCornerRadius")},{key:"drawEdgeArrow",value:o(function(r,n,i){if(r.visible()){var a=r._private.rscratch,s,l,u;if(i==="source"?(s=a.arrowStartX,l=a.arrowStartY,u=a.srcArrowAngle):(s=a.arrowEndX,l=a.arrowEndY,u=a.tgtArrowAngle),!(isNaN(s)||s==null||isNaN(l)||l==null||isNaN(u)||u==null)){var h=r.pstyle(i+"-arrow-shape").value;if(h!=="none"){var f=r.pstyle(i+"-arrow-color").value,d=r.pstyle("opacity").value,p=r.pstyle("line-opacity").value,m=d*p,g=r.pstyle("width").pfValue,y=r.pstyle("arrow-scale").value,v=this.r.getArrowWidth(g,y),x=this.instanceCount,b=this.transformBuffer.getMatrixView(x);rue(b),Xk(b,b,[s,l]),aI(b,b,[v,v]),nue(b,b,u),this.vertTypeBuffer.getView(x)[0]=$M;var T=this.indexBuffer.getView(x);Zm(n,T);var S=this.colorBuffer.getView(x);dp(f,m,S),this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}}},"drawEdgeArrow")},{key:"drawEdgeLine",value:o(function(r,n){if(r.visible()){var i=this._getEdgePoints(r);if(i){var a=r.pstyle("opacity").value,s=r.pstyle("line-opacity").value,l=r.pstyle("width").pfValue,u=r.pstyle("line-color").value,h=a*s;if(i.length/2+this.instanceCount>this.maxInstances&&this.endBatch(),i.length==4){var f=this.instanceCount;this.vertTypeBuffer.getView(f)[0]=iue;var d=this.indexBuffer.getView(f);Zm(n,d);var p=this.colorBuffer.getView(f);dp(u,h,p);var m=this.lineWidthBuffer.getView(f);m[0]=l;var g=this.pointAPointBBuffer.getView(f);g[0]=i[0],g[1]=i[1],g[2]=i[2],g[3]=i[3],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}else for(var y=0;y=this.maxInstances&&this.endBatch()}}}},"drawEdgeLine")},{key:"_isValidEdge",value:o(function(r){var n=r._private.rscratch;return!(n.badLine||n.allpts==null||isNaN(n.allpts[0]))},"_isValidEdge")},{key:"_getEdgePoints",value:o(function(r){var n=r._private.rscratch;if(this._isValidEdge(r)){var i=n.allpts;if(i.length==4)return i;var a=this._getNumSegments(r);return this._getCurveSegmentPoints(i,a)}},"_getEdgePoints")},{key:"_getNumSegments",value:o(function(r){var n=15;return Math.min(Math.max(n,5),this.maxInstances)},"_getNumSegments")},{key:"_getCurveSegmentPoints",value:o(function(r,n){if(r.length==4)return r;for(var i=Array((n+1)*2),a=0;a<=n;a++)if(a==0)i[0]=r[0],i[1]=r[1];else if(a==n)i[a*2]=r[r.length-2],i[a*2+1]=r[r.length-1];else{var s=a/n;this._setCurvePoint(r,s,i,a*2)}return i},"_getCurveSegmentPoints")},{key:"_setCurvePoint",value:o(function(r,n,i,a){if(r.length<=2)i[a]=r[0],i[a+1]=r[1];else{for(var s=Array(r.length-2),l=0;l0}},"isLayerVisible"),l=o(function(d){var p=d.pstyle("text-events").strValue==="yes";return p?oE.USE_BB:oE.IGNORE},"getTexPickingMode"),u=o(function(d){var p=d.position(),m=p.x,g=p.y,y=d.outerWidth(),v=d.outerHeight();return{w:y,h:v,x1:m-y/2,y1:g-v/2}},"getBBForSimpleShape");r.drawing.addAtlasCollection("node",{texRows:t.webglTexRowsNodes}),r.drawing.addAtlasCollection("label",{texRows:t.webglTexRows}),r.drawing.addTextureAtlasRenderType("node-body",{collection:"node",getKey:e.getStyleKey,getBoundingBox:e.getElementBox,drawElement:e.drawElement}),r.drawing.addSimpleShapeRenderType("node-body",{getBoundingBox:u,isSimple:hqe,shapeProps:{shape:"shape",color:"background-color",opacity:"background-opacity",radius:"corner-radius",border:!0}}),r.drawing.addSimpleShapeRenderType("node-overlay",{getBoundingBox:u,isVisible:s("overlay"),shapeProps:{shape:"overlay-shape",color:"overlay-color",opacity:"overlay-opacity",padding:"overlay-padding",radius:"overlay-corner-radius"}}),r.drawing.addSimpleShapeRenderType("node-underlay",{getBoundingBox:u,isVisible:s("underlay"),shapeProps:{shape:"underlay-shape",color:"underlay-color",opacity:"underlay-opacity",padding:"underlay-padding",radius:"underlay-corner-radius"}}),r.drawing.addTextureAtlasRenderType("label",{collection:"label",getTexPickingMode:l,getKey:zM(e.getLabelKey,null),getBoundingBox:GM(e.getLabelBox,null),drawClipped:!0,drawElement:e.drawLabel,getRotation:i(null),getRotationPoint:e.getLabelRotationPoint,getRotationOffset:e.getLabelRotationOffset,isVisible:a("label")}),r.drawing.addTextureAtlasRenderType("edge-source-label",{collection:"label",getTexPickingMode:l,getKey:zM(e.getSourceLabelKey,"source"),getBoundingBox:GM(e.getSourceLabelBox,"source"),drawClipped:!0,drawElement:e.drawSourceLabel,getRotation:i("source"),getRotationPoint:e.getSourceLabelRotationPoint,getRotationOffset:e.getSourceLabelRotationOffset,isVisible:a("source-label")}),r.drawing.addTextureAtlasRenderType("edge-target-label",{collection:"label",getTexPickingMode:l,getKey:zM(e.getTargetLabelKey,"target"),getBoundingBox:GM(e.getTargetLabelBox,"target"),drawClipped:!0,drawElement:e.drawTargetLabel,getRotation:i("target"),getRotationPoint:e.getTargetLabelRotationPoint,getRotationOffset:e.getTargetLabelRotationOffset,isVisible:a("target-label")});var h=bx(function(){console.log("garbage collect flag set"),r.data.gc=!0},1e4);r.onUpdateEleCalcs(function(f,d){var p=!1;d&&d.length>0&&(p|=r.drawing.invalidate(d)),p&&h()}),Nqe(r)};o(Rqe,"getBGColor");o(Uhe,"getLabelLines");zM=o(function(e,r){return function(n){var i=e(n),a=Uhe(n,r);return a.length>1?a.map(function(s,l){return"".concat(i,"_").concat(l)}):i}},"getStyleKeysForLabel"),GM=o(function(e,r){return function(n,i){var a=e(n);if(typeof i=="string"){var s=i.indexOf("_");if(s>0){var l=Number(i.substring(s+1)),u=Uhe(n,r),h=a.h/u.length,f=h*l,d=a.y1+f;return{x1:a.x1,w:a.w,y1:d,h,yOffset:f}}}return a}},"getBoundingBoxForLabel");o(Nqe,"overrideCanvasRendererFunctions");o(Mqe,"clearWebgl");o(Iqe,"clearCanvas");o(Oqe,"createPanZoomMatrix");o(Hhe,"setContextTransform");o(Pqe,"drawSelectionRectangle");o(Bqe,"drawAxes");o(Fqe,"drawAtlases");o($qe,"getPickingIndexes");o(zqe,"findNearestElementsWebgl");o(VM,"drawEle");o(qhe,"renderWebgl");Rf={};Rf.drawPolygonPath=function(t,e,r,n,i,a){var s=n/2,l=i/2;t.beginPath&&t.beginPath(),t.moveTo(e+s*a[0],r+l*a[1]);for(var u=1;u0&&s>0){m.clearRect(0,0,a,s),m.globalCompositeOperation="source-over";var g=this.getCachedZSortedEles();if(t.full)m.translate(-n.x1*h,-n.y1*h),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(n.x1*h,n.y1*h);else{var y=e.pan(),v={x:y.x*h,y:y.y*h};h*=e.zoom(),m.translate(v.x,v.y),m.scale(h,h),this.drawElements(m,g),m.scale(1/h,1/h),m.translate(-v.x,-v.y)}t.bg&&(m.globalCompositeOperation="destination-over",m.fillStyle=t.bg,m.rect(0,0,a,s),m.fill())}return p};o(Gqe,"b64ToBlob");o(lue,"b64UriToB64");o(Yhe,"output");Cx.png=function(t){return Yhe(t,this.bufferCanvasImage(t),"image/png")};Cx.jpg=function(t){return Yhe(t,this.bufferCanvasImage(t),"image/jpeg")};Xhe={};Xhe.nodeShapeImpl=function(t,e,r,n,i,a,s,l){switch(t){case"ellipse":return this.drawEllipsePath(e,r,n,i,a);case"polygon":return this.drawPolygonPath(e,r,n,i,a,s);case"round-polygon":return this.drawRoundPolygonPath(e,r,n,i,a,s,l);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(e,r,n,i,a,l);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(e,r,n,i,a,s,l);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(e,r,n,i,a,l);case"barrel":return this.drawBarrelPath(e,r,n,i,a)}};Vqe=jhe,Cr=jhe.prototype;Cr.CANVAS_LAYERS=3;Cr.SELECT_BOX=0;Cr.DRAG=1;Cr.NODE=2;Cr.WEBGL=3;Cr.CANVAS_TYPES=["2d","2d","2d","webgl2"];Cr.BUFFER_COUNT=3;Cr.TEXTURE_BUFFER=0;Cr.MOTIONBLUR_BUFFER_NODE=1;Cr.MOTIONBLUR_BUFFER_DRAG=2;o(jhe,"CanvasRenderer");Cr.redrawHint=function(t,e){var r=this;switch(t){case"eles":r.data.canvasNeedsRedraw[Cr.NODE]=e;break;case"drag":r.data.canvasNeedsRedraw[Cr.DRAG]=e;break;case"select":r.data.canvasNeedsRedraw[Cr.SELECT_BOX]=e;break;case"gc":r.data.gc=!0;break}};Uqe=typeof Path2D<"u";Cr.path2dEnabled=function(t){if(t===void 0)return this.pathsEnabled;this.pathsEnabled=!!t};Cr.usePaths=function(){return Uqe&&this.pathsEnabled};Cr.setImgSmoothing=function(t,e){t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled=e:(t.webkitImageSmoothingEnabled=e,t.mozImageSmoothingEnabled=e,t.msImageSmoothingEnabled=e)};Cr.getImgSmoothing=function(t){return t.imageSmoothingEnabled!=null?t.imageSmoothingEnabled:t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled};Cr.makeOffscreenCanvas=function(t,e){var r;if((typeof OffscreenCanvas>"u"?"undefined":$i(OffscreenCanvas))!=="undefined")r=new OffscreenCanvas(t,e);else{var n=this.cy.window(),i=n.document;r=i.createElement("canvas"),r.width=t,r.height=e}return r};[Bhe,Fc,Hu,NI,Cp,Lf,us,Vhe,Rf,Cx,Xhe].forEach(function(t){ir(Cr,t)});Hqe=[{name:"null",impl:khe},{name:"base",impl:Mhe},{name:"canvas",impl:Vqe}],qqe=[{type:"layout",extensions:gHe},{type:"renderer",extensions:Hqe}],Khe={},Qhe={};o(Zhe,"setExtension");o(Jhe,"getExtension");o(Wqe,"setModule");o(Yqe,"getModule");lI=o(function(){if(arguments.length===2)return Jhe.apply(null,arguments);if(arguments.length===3)return Zhe.apply(null,arguments);if(arguments.length===4)return Yqe.apply(null,arguments);if(arguments.length===5)return Wqe.apply(null,arguments);Kn("Invalid extension access syntax")},"extension");dx.prototype.extension=lI;qqe.forEach(function(t){t.extensions.forEach(function(e){Zhe(t.type,e.name,e.impl)})});lE=o(function(){if(!(this instanceof lE))return new lE;this.length=0},"Stylesheet"),Ep=lE.prototype;Ep.instanceString=function(){return"stylesheet"};Ep.selector=function(t){var e=this.length++;return this[e]={selector:t,properties:[]},this};Ep.css=function(t,e){var r=this.length-1;if(Jt(t))this[r].properties.push({name:t,value:e});else if(Yr(t))for(var n=t,i=Object.keys(n),a=0;a{"use strict";o((function(e,r){typeof Ax=="object"&&typeof OI=="object"?OI.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Ax=="object"?Ax.layoutBase=r():e.layoutBase=r()}),"webpackUniversalModuleDefinition")(Ax,function(){return(function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=26)})([(function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n}),(function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s}),(function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n}),(function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(4);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;yp&&(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)),this.labelHeight>m&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-m)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-m),this.setHeight(this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h}),(function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n}),(function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(6),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,T=0;T-1&&k>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(w,1),x.target!=x.source&&x.target.edges.splice(k,1);var S=x.source.owner.getEdges().indexOf(x);if(S==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(S,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,T=this.getNodes(),S=T.length,w=0;wv&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(T[0].getParent().paddingLeft!=null?b=T[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,T,S,w,k,C,A=this.nodes,L=A.length,I=0;IT&&(y=T),vw&&(x=w),bT&&(y=T),vw&&(x=w),b=this.nodes.length){var L=0;v.forEach(function(I){I.owner==g&&L++}),L==this.nodes.length&&(this.isConnected=!0)}},t.exports=p}),(function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(5),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]d)return l[0]=u,l[1]=m,l[2]=f,l[3]=A,!1;if(hf)return l[0]=p,l[1]=h,l[2]=k,l[3]=d,!1;if(uf?(l[0]=y,l[1]=v,E=!0):(l[0]=g,l[1]=m,E=!0):D===N&&(u>f?(l[0]=p,l[1]=m,E=!0):(l[0]=x,l[1]=v,E=!0)),-O===N?f>u?(l[2]=C,l[3]=A,_=!0):(l[2]=k,l[3]=w,_=!0):O===N&&(f>u?(l[2]=S,l[3]=w,_=!0):(l[2]=L,l[3]=A,_=!0)),E&&_)return!1;if(u>f?h>d?(P=this.getCardinalDirection(D,N,4),B=this.getCardinalDirection(O,N,2)):(P=this.getCardinalDirection(-D,N,3),B=this.getCardinalDirection(-O,N,1)):h>d?(P=this.getCardinalDirection(-D,N,1),B=this.getCardinalDirection(-O,N,3)):(P=this.getCardinalDirection(D,N,2),B=this.getCardinalDirection(O,N,4)),!E)switch(P){case 1:V=m,F=u+-T/N,l[0]=F,l[1]=V;break;case 2:F=x,V=h+b*N,l[0]=F,l[1]=V;break;case 3:V=v,F=u+T/N,l[0]=F,l[1]=V;break;case 4:F=y,V=h+-b*N,l[0]=F,l[1]=V;break}if(!_)switch(B){case 1:U=w,$=f+-R/N,l[2]=$,l[3]=U;break;case 2:$=L,U=d+I*N,l[2]=$,l[3]=U;break;case 3:U=A,$=f+R/N,l[2]=$,l[3]=U;break;case 4:$=C,U=d+-I*N,l[2]=$,l[3]=U;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,T=void 0,S=void 0,w=void 0,k=void 0,C=void 0,A=void 0,L=void 0;return T=p-f,w=h-d,C=d*f-h*p,S=v-g,k=m-y,A=y*g-m*v,L=T*k-S*w,L===0?null:(x=(w*A-k*C)/L,b=(S*C-T*A)/L,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n}),(function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n}),(function(t,e,r){"use strict";var n=(function(){function h(f,d){for(var p=0;p"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i}),(function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g0&&g;){for(T.push(w[0]);T.length>0&&g;){var k=T[0];T.splice(0,1),b.add(k);for(var C=k.getEdges(),x=0;x-1&&w.splice(R,1)}b=new Set,S=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x0){for(var v=this.edgeToDummyNodes.get(y),x=0;x=0&&g.splice(A,1);var L=S.getNeighborsList();L.forEach(function(E){if(y.indexOf(E)<0){var _=v.get(E),D=_-1;D==1&&k.push(E),v.set(E,D)}})}y=y.concat(k),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p}),(function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n}),(function(t,e,r){"use strict";var n=r(4);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i}),(function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);pa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;mT||b>T)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(T=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>T||b>T)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement=x.length||T>=x[0].length)){for(var S=0;Sh},"_defaultCompareFunction")}]),l})();t.exports=s}),(function(t,e,r){"use strict";var n=(function(){function s(l,u){for(var h=0;h2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l{"use strict";o((function(e,r){typeof _x=="object"&&typeof BI=="object"?BI.exports=r(PI()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof _x=="object"?_x.coseBase=r(PI()):e.coseBase=r(e.layoutBase)}),"webpackUniversalModuleDefinition")(_x,function(t){return(function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=7)})([(function(e,r){e.exports=t}),(function(e,r,n){"use strict";var i=n(0).FDLayoutConstants;function a(){}o(a,"CoSEConstants");for(var s in i)a[s]=i[s];a.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,a.DEFAULT_RADIAL_SEPARATION=i.DEFAULT_EDGE_LENGTH,a.DEFAULT_COMPONENT_SEPERATION=60,a.TILE=!0,a.TILING_PADDING_VERTICAL=10,a.TILING_PADDING_HORIZONTAL=10,a.TREE_REDUCTION_ON_INCREMENTAL=!1,e.exports=a}),(function(e,r,n){"use strict";var i=n(0).FDLayoutEdge;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEEdge"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a}),(function(e,r,n){"use strict";var i=n(0).LGraph;function a(l,u,h){i.call(this,l,u,h)}o(a,"CoSEGraph"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a}),(function(e,r,n){"use strict";var i=n(0).LGraphManager;function a(l){i.call(this,l)}o(a,"CoSEGraphManager"),a.prototype=Object.create(i.prototype);for(var s in i)a[s]=i[s];e.exports=a}),(function(e,r,n){"use strict";var i=n(0).FDLayoutNode,a=n(0).IMath;function s(u,h,f,d){i.call(this,u,h,f,d)}o(s,"CoSENode"),s.prototype=Object.create(i.prototype);for(var l in i)s[l]=i[l];s.prototype.move=function(){var u=this.graphManager.getLayout();this.displacementX=u.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY=u.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren,Math.abs(this.displacementX)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementX=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementX)),Math.abs(this.displacementY)>u.coolingFactor*u.maxNodeDisplacement&&(this.displacementY=u.coolingFactor*u.maxNodeDisplacement*a.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),u.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},s.prototype.propogateDisplacementToChildren=function(u,h){for(var f=this.getChild().getNodes(),d,p=0;p0)this.positionNodesRadially(w);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var k=new Set(this.getAllNodes()),C=this.nodesWithGravity.filter(function(A){return k.has(A)});this.graphManager.setAllNodesToApplyGravitation(C),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},T.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%f.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var w=new Set(this.getAllNodes()),k=this.nodesWithGravity.filter(function(L){return w.has(L)});this.graphManager.setAllNodesToApplyGravitation(k),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=f.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=f.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var C=!this.isTreeGrowing&&!this.isGrowthFinished,A=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(C,A),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},T.prototype.getPositionsData=function(){for(var w=this.graphManager.getAllNodes(),k={},C=0;C1){var E;for(E=0;EA&&(A=Math.floor(R.y)),I=Math.floor(R.x+h.DEFAULT_COMPONENT_SEPERATION)}this.transform(new m(d.WORLD_CENTER_X-R.x/2,d.WORLD_CENTER_Y-R.y/2))},T.radialLayout=function(w,k,C){var A=Math.max(this.maxDiagonalInTree(w),h.DEFAULT_RADIAL_SEPARATION);T.branchRadialLayout(k,null,0,359,0,A);var L=x.calculateBounds(w),I=new b;I.setDeviceOrgX(L.getMinX()),I.setDeviceOrgY(L.getMinY()),I.setWorldOrgX(C.x),I.setWorldOrgY(C.y);for(var R=0;R1;){var j=U[0];U.splice(0,1);var ee=P.indexOf(j);ee>=0&&P.splice(ee,1),V--,B--}k!=null?$=(P.indexOf(U[0])+1)%V:$=0;for(var q=Math.abs(A-C)/B,oe=$;F!=B;oe=++oe%V){var Q=P[oe].getOtherEnd(w);if(Q!=k){var ue=(C+F*q)%360,te=(ue+q)%360;T.branchRadialLayout(Q,w,ue,te,L+I,I),F++}}},T.maxDiagonalInTree=function(w){for(var k=y.MIN_VALUE,C=0;Ck&&(k=L)}return k},T.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},T.prototype.groupZeroDegreeMembers=function(){var w=this,k={};this.memberGroups={},this.idToDummyNode={};for(var C=[],A=this.graphManager.getAllNodes(),L=0;L"u"&&(k[E]=[]),k[E]=k[E].concat(I)}Object.keys(k).forEach(function(_){if(k[_].length>1){var D="DummyCompound_"+_;w.memberGroups[D]=k[_];var O=k[_][0].getParent(),N=new l(w.graphManager);N.id=D,N.paddingLeft=O.paddingLeft||0,N.paddingRight=O.paddingRight||0,N.paddingBottom=O.paddingBottom||0,N.paddingTop=O.paddingTop||0,w.idToDummyNode[D]=N;var P=w.getGraphManager().add(w.newGraph(),N),B=O.getChild();B.add(N);for(var F=0;F=0;w--){var k=this.compoundOrder[w],C=k.id,A=k.paddingLeft,L=k.paddingTop;this.adjustLocations(this.tiledMemberPack[C],k.rect.x,k.rect.y,A,L)}},T.prototype.repopulateZeroDegreeMembers=function(){var w=this,k=this.tiledZeroDegreePack;Object.keys(k).forEach(function(C){var A=w.idToDummyNode[C],L=A.paddingLeft,I=A.paddingTop;w.adjustLocations(k[C],A.rect.x,A.rect.y,L,I)})},T.prototype.getToBeTiled=function(w){var k=w.id;if(this.toBeTiled[k]!=null)return this.toBeTiled[k];var C=w.getChild();if(C==null)return this.toBeTiled[k]=!1,!1;for(var A=C.getNodes(),L=0;L0)return this.toBeTiled[k]=!1,!1;if(I.getChild()==null){this.toBeTiled[I.id]=!1;continue}if(!this.getToBeTiled(I))return this.toBeTiled[k]=!1,!1}return this.toBeTiled[k]=!0,!0},T.prototype.getNodeDegree=function(w){for(var k=w.id,C=w.getEdges(),A=0,L=0;L_&&(_=O.rect.height)}C+=_+w.verticalPadding}},T.prototype.tileCompoundMembers=function(w,k){var C=this;this.tiledMemberPack=[],Object.keys(w).forEach(function(A){var L=k[A];C.tiledMemberPack[A]=C.tileNodes(w[A],L.paddingLeft+L.paddingRight),L.rect.width=C.tiledMemberPack[A].width,L.rect.height=C.tiledMemberPack[A].height})},T.prototype.tileNodes=function(w,k){var C=h.TILING_PADDING_VERTICAL,A=h.TILING_PADDING_HORIZONTAL,L={rows:[],rowWidth:[],rowHeight:[],width:0,height:k,verticalPadding:C,horizontalPadding:A};w.sort(function(E,_){return E.rect.width*E.rect.height>_.rect.width*_.rect.height?-1:E.rect.width*E.rect.height<_.rect.width*_.rect.height?1:0});for(var I=0;I0&&(R+=w.horizontalPadding),w.rowWidth[C]=R,w.width0&&(E+=w.verticalPadding);var _=0;E>w.rowHeight[C]&&(_=w.rowHeight[C],w.rowHeight[C]=E,_=w.rowHeight[C]-_),w.height+=_,w.rows[C].push(k)},T.prototype.getShortestRowIndex=function(w){for(var k=-1,C=Number.MAX_VALUE,A=0;AC&&(k=A,C=w.rowWidth[A]);return k},T.prototype.canAddHorizontal=function(w,k,C){var A=this.getShortestRowIndex(w);if(A<0)return!0;var L=w.rowWidth[A];if(L+w.horizontalPadding+k<=w.width)return!0;var I=0;w.rowHeight[A]0&&(I=C+w.verticalPadding-w.rowHeight[A]);var R;w.width-L>=k+w.horizontalPadding?R=(w.height+I)/(L+k+w.horizontalPadding):R=(w.height+I)/w.width,I=C+w.verticalPadding;var E;return w.widthI&&k!=C){A.splice(-1,1),w.rows[C].push(L),w.rowWidth[k]=w.rowWidth[k]-I,w.rowWidth[C]=w.rowWidth[C]+I,w.width=w.rowWidth[instance.getLongestRowIndex(w)];for(var R=Number.MIN_VALUE,E=0;ER&&(R=A[E].height);k>0&&(R+=w.verticalPadding);var _=w.rowHeight[k]+w.rowHeight[C];w.rowHeight[k]=R,w.rowHeight[C]0)for(var B=L;B<=I;B++)P[0]+=this.grid[B][R-1].length+this.grid[B][R].length-1;if(I0)for(var B=R;B<=E;B++)P[3]+=this.grid[L-1][B].length+this.grid[L][B].length-1;for(var F=y.MAX_VALUE,V,$,U=0;U{"use strict";o((function(e,r){typeof Dx=="object"&&typeof $I=="object"?$I.exports=r(FI()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof Dx=="object"?Dx.cytoscapeCoseBilkent=r(FI()):e.cytoscapeCoseBilkent=r(e.coseBase)}),"webpackUniversalModuleDefinition")(Dx,function(t){return(function(e){var r={};function n(i){if(r[i])return r[i].exports;var a=r[i]={i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return o(n,"__webpack_require__"),n.m=e,n.c=r,n.i=function(i){return i},n.d=function(i,a,s){n.o(i,a)||Object.defineProperty(i,a,{configurable:!1,enumerable:!0,get:s})},n.n=function(i){var a=i&&i.__esModule?o(function(){return i.default},"getDefault"):o(function(){return i},"getModuleExports");return n.d(a,"a",a),a},n.o=function(i,a){return Object.prototype.hasOwnProperty.call(i,a)},n.p="",n(n.s=1)})([(function(e,r){e.exports=t}),(function(e,r,n){"use strict";var i=n(0).layoutBase.LayoutConstants,a=n(0).layoutBase.FDLayoutConstants,s=n(0).CoSEConstants,l=n(0).CoSELayout,u=n(0).CoSENode,h=n(0).layoutBase.PointD,f=n(0).layoutBase.DimensionD,d={ready:o(function(){},"ready"),stop:o(function(){},"stop"),quality:"default",nodeDimensionsIncludeLabels:!1,refresh:30,fit:!0,padding:10,randomize:!0,nodeRepulsion:4500,idealEdgeLength:50,edgeElasticity:.45,nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,animate:"end",animationDuration:500,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.5};function p(v,x){var b={};for(var T in v)b[T]=v[T];for(var T in x)b[T]=x[T];return b}o(p,"extend");function m(v){this.options=p(d,v),g(this.options)}o(m,"_CoSELayout");var g=o(function(x){x.nodeRepulsion!=null&&(s.DEFAULT_REPULSION_STRENGTH=a.DEFAULT_REPULSION_STRENGTH=x.nodeRepulsion),x.idealEdgeLength!=null&&(s.DEFAULT_EDGE_LENGTH=a.DEFAULT_EDGE_LENGTH=x.idealEdgeLength),x.edgeElasticity!=null&&(s.DEFAULT_SPRING_STRENGTH=a.DEFAULT_SPRING_STRENGTH=x.edgeElasticity),x.nestingFactor!=null&&(s.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=a.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=x.nestingFactor),x.gravity!=null&&(s.DEFAULT_GRAVITY_STRENGTH=a.DEFAULT_GRAVITY_STRENGTH=x.gravity),x.numIter!=null&&(s.MAX_ITERATIONS=a.MAX_ITERATIONS=x.numIter),x.gravityRange!=null&&(s.DEFAULT_GRAVITY_RANGE_FACTOR=a.DEFAULT_GRAVITY_RANGE_FACTOR=x.gravityRange),x.gravityCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_STRENGTH=a.DEFAULT_COMPOUND_GRAVITY_STRENGTH=x.gravityCompound),x.gravityRangeCompound!=null&&(s.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=a.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=x.gravityRangeCompound),x.initialEnergyOnIncremental!=null&&(s.DEFAULT_COOLING_FACTOR_INCREMENTAL=a.DEFAULT_COOLING_FACTOR_INCREMENTAL=x.initialEnergyOnIncremental),x.quality=="draft"?i.QUALITY=0:x.quality=="proof"?i.QUALITY=2:i.QUALITY=1,s.NODE_DIMENSIONS_INCLUDE_LABELS=a.NODE_DIMENSIONS_INCLUDE_LABELS=i.NODE_DIMENSIONS_INCLUDE_LABELS=x.nodeDimensionsIncludeLabels,s.DEFAULT_INCREMENTAL=a.DEFAULT_INCREMENTAL=i.DEFAULT_INCREMENTAL=!x.randomize,s.ANIMATE=a.ANIMATE=i.ANIMATE=x.animate,s.TILE=x.tile,s.TILING_PADDING_VERTICAL=typeof x.tilingPaddingVertical=="function"?x.tilingPaddingVertical.call():x.tilingPaddingVertical,s.TILING_PADDING_HORIZONTAL=typeof x.tilingPaddingHorizontal=="function"?x.tilingPaddingHorizontal.call():x.tilingPaddingHorizontal},"getUserOptions");m.prototype.run=function(){var v,x,b=this.options,T=this.idToLNode={},S=this.layout=new l,w=this;w.stopped=!1,this.cy=this.options.cy,this.cy.trigger({type:"layoutstart",layout:this});var k=S.newGraphManager();this.gm=k;var C=this.options.eles.nodes(),A=this.options.eles.edges();this.root=k.addRoot(),this.processChildrenList(this.root,this.getTopMostNodes(C),S);for(var L=0;L0){var E;E=b.getGraphManager().add(b.newGraph(),C),this.processChildrenList(E,k,b)}}},m.prototype.stop=function(){return this.stopped=!0,this};var y=o(function(x){x("layout","cose-bilkent",m)},"register");typeof cytoscape<"u"&&y(cytoscape),e.exports=y})])})});function jqe(t,e){t.forEach(r=>{let n={id:r.id,labelText:r.label,height:r.height,width:r.width,padding:r.padding??0};Object.keys(r).forEach(i=>{["id","label","height","width","padding","x","y"].includes(i)||(n[i]=r[i])}),e.add({group:"nodes",data:n,position:{x:r.x??0,y:r.y??0}})})}function Kqe(t,e){t.forEach(r=>{let n={id:r.id,source:r.start,target:r.end};Object.keys(r).forEach(i=>{["id","start","end"].includes(i)||(n[i]=r[i])}),e.add({group:"edges",data:n})})}function rfe(t){return new Promise(e=>{let r=qe("body").append("div").attr("id","cy").attr("style","display:none"),n=Ko({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"bezier"}}]});r.remove(),jqe(t.nodes,n),Kqe(t.edges,n),n.nodes().forEach(function(a){a.layoutDimensions=()=>{let s=a.data();return{w:s.width,h:s.height}}});let i={name:"cose-bilkent",quality:"proof",styleEnabled:!1,animate:!1};n.layout(i).run(),n.ready(a=>{X.info("Cytoscape ready",a),e(n)})})}function nfe(t){return t.nodes().map(e=>{let r=e.data(),n=e.position(),i={id:r.id,x:n.x,y:n.y};return Object.keys(r).forEach(a=>{a!=="id"&&(i[a]=r[a])}),i})}function ife(t){return t.edges().map(e=>{let r=e.data(),n=e._private.rscratch,i={id:r.id,source:r.source,target:r.target,startX:n.startX,startY:n.startY,midX:n.midX,midY:n.midY,endX:n.endX,endY:n.endY};return Object.keys(r).forEach(a=>{["id","source","target"].includes(a)||(i[a]=r[a])}),i})}var tfe,afe=M(()=>{"use strict";II();tfe=La(efe(),1);yr();pt();Ko.use(tfe.default);o(jqe,"addNodes");o(Kqe,"addEdges");o(rfe,"createCytoscapeInstance");o(nfe,"extractPositionedNodes");o(ife,"extractPositionedEdges")});async function sfe(t,e){X.debug("Starting cose-bilkent layout algorithm");try{Qqe(t);let r=await rfe(t),n=nfe(r),i=ife(r);return X.debug(`Layout completed: ${n.length} nodes, ${i.length} edges`),{nodes:n,edges:i}}catch(r){throw X.error("Error in cose-bilkent layout algorithm:",r),r}}function Qqe(t){if(!t)throw new Error("Layout data is required");if(!t.config)throw new Error("Configuration is required in layout data");if(!t.rootNode)throw new Error("Root node is required");if(!t.nodes||!Array.isArray(t.nodes))throw new Error("No nodes found in layout data");if(!Array.isArray(t.edges))throw new Error("Edges array is required in layout data");return!0}var ofe=M(()=>{"use strict";pt();afe();o(sfe,"executeCoseBilkentLayout");o(Qqe,"validateLayoutData")});var lfe,cfe=M(()=>{"use strict";ofe();lfe=o(async(t,e,{insertCluster:r,insertEdge:n,insertEdgeLabel:i,insertMarkers:a,insertNode:s,log:l,positionEdgeLabel:u},{algorithm:h})=>{let f={},d={},p=e.select("g");a(p,t.markers,t.type,t.diagramId);let m=p.insert("g").attr("class","subgraphs"),g=p.insert("g").attr("class","edgePaths"),y=p.insert("g").attr("class","edgeLabels"),v=p.insert("g").attr("class","nodes");l.debug("Inserting nodes into DOM for dimension calculation"),await Promise.all(t.nodes.map(async T=>{if(T.isGroup){let S={...T};d[T.id]=S,f[T.id]=S,await r(m,T)}else{let S={...T};f[T.id]=S;let w=await s(v,T,{config:t.config,dir:t.direction||"TB"}),k=w.node().getBBox();S.width=k.width,S.height=k.height,S.domId=w,l.debug(`Node ${T.id} dimensions: ${k.width}x${k.height}`)}})),l.debug("Running cose-bilkent layout algorithm");let x={...t,nodes:t.nodes.map(T=>{let S=f[T.id];return{...T,width:S.width,height:S.height}})},b=await sfe(x,t.config);l.debug("Positioning nodes based on layout results"),b.nodes.forEach(T=>{let S=f[T.id];S?.domId&&(S.domId.attr("transform",`translate(${T.x}, ${T.y})`),S.x=T.x,S.y=T.y,l.debug(`Positioned node ${S.id} at center (${T.x}, ${T.y})`))}),b.edges.forEach(T=>{let S=t.edges.find(w=>w.id===T.id);S&&(S.points=[{x:T.startX,y:T.startY},{x:T.midX,y:T.midY},{x:T.endX,y:T.endY}])}),l.debug("Inserting and positioning edges"),await Promise.all(t.edges.map(async T=>{let S=await i(y,T),w=f[T.start??""],k=f[T.end??""];if(w&&k){let C=b.edges.find(A=>A.id===T.id);if(C){l.debug("APA01 positionedEdge",C);let A={...T},L=n(g,A,d,t.type,w,k,t.diagramId);u(A,L)}else{let A={...T,points:[{x:w.x||0,y:w.y||0},{x:k.x||0,y:k.y||0}]},L=n(g,A,d,t.type,w,k,t.diagramId);u(A,L)}}})),l.debug("Cose-bilkent rendering completed")},"render")});var ufe={};dr(ufe,{render:()=>Zqe});var Zqe,hfe=M(()=>{"use strict";cfe();Zqe=lfe});var Lx,zI,Jqe,Qo,$c,Nf=M(()=>{"use strict";ere();pt();Lx={},zI=o(t=>{for(let e of t)Lx[e.name]=e},"registerLayoutLoaders"),Jqe=o(()=>{zI([{name:"dagre",loader:o(async()=>await Promise.resolve().then(()=>(Ioe(),Moe)),"loader")},{name:"cose-bilkent",loader:o(async()=>await Promise.resolve().then(()=>(hfe(),ufe)),"loader")}])},"registerDefaultLayoutLoaders");Jqe();Qo=o(async(t,e)=>{if(!(t.layoutAlgorithm in Lx))throw new Error(`Unknown layout algorithm: ${t.layoutAlgorithm}`);let r=Lx[t.layoutAlgorithm];return(await r.loader()).render(t,e,Jte,{algorithm:r.algorithm})},"render"),$c=o((t="",{fallback:e="dagre"}={})=>{if(t in Lx)return t;if(e in Lx)return X.warn(`Layout algorithm ${t} is not registered. Using ${e} as fallback.`),e;throw new Error(`Both layout algorithms ${t} and ${e} are not registered.`)},"getRegisteredLayoutAlgorithm")});var Ws,eWe,tWe,Mf=M(()=>{"use strict";Ei();pt();Ws=o((t,e,r,n)=>{t.attr("class",r);let{width:i,height:a,x:s,y:l}=eWe(t,e);mn(t,a,i,n);let u=tWe(s,l,i,a,e);t.attr("viewBox",u),X.debug(`viewBox configured: ${u} with padding: ${e}`)},"setupViewPortForSVG"),eWe=o((t,e)=>{let r=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:r.width+e*2,height:r.height+e*2,x:r.x,y:r.y}},"calculateDimensionsWithPadding"),tWe=o((t,e,r,n,i)=>`${t-i} ${e-i} ${r} ${n}`,"createViewBox")});var rWe,nWe,ffe,dfe=M(()=>{"use strict";yr();Xt();pt();ep();Nf();Mf();tr();rWe=o(function(t,e){return e.db.getClasses()},"getClasses"),nWe=o(async function(t,e,r,n){X.info("REF0:"),X.info("Drawing state diagram (v2)",e);let{securityLevel:i,flowchart:a,layout:s}=ge(),l;i==="sandbox"&&(l=qe("#i"+e));let u=i==="sandbox"?l.nodes()[0].contentDocument:document;X.debug("Before getData: ");let h=n.db.getData();X.debug("Data: ",h);let f=Vo(e,i),d=n.db.getDirection();h.type=n.type,h.layoutAlgorithm=$c(s),h.layoutAlgorithm==="dagre"&&s==="elk"&&X.warn("flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback."),h.direction=d,h.nodeSpacing=a?.nodeSpacing||50,h.rankSpacing=a?.rankSpacing||50,h.markers=["point","circle","cross"],h.diagramId=e,X.debug("REF1:",h),await Qo(h,f);let p=h.config.flowchart?.diagramPadding??8;qt.insertTitle(f,"flowchartTitleText",a?.titleTopMargin||0,n.db.getDiagramTitle()),Ws(f,p,"flowchart",a?.useMaxWidth||!1);for(let m of h.nodes){let g=qe(`#${e} [id="${m.id}"]`);if(!g||!m.link)continue;let y=u.createElementNS("http://www.w3.org/2000/svg","a");y.setAttributeNS("http://www.w3.org/2000/svg","class",m.cssClasses),y.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),i==="sandbox"?y.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):m.linkTarget&&y.setAttributeNS("http://www.w3.org/2000/svg","target",m.linkTarget);let v=g.insert(function(){return y},":first-child"),x=g.select(".label-container");x&&v.append(function(){return x.node()});let b=g.select(".label");b&&v.append(function(){return b.node()})}},"draw"),ffe={getClasses:rWe,draw:nWe}});var GI,VI,pfe=M(()=>{"use strict";GI=(function(){var t=o(function(fr,it,kt,jt){for(kt=kt||{},jt=fr.length;jt--;kt[fr[jt]]=it);return kt},"o"),e=[1,4],r=[1,3],n=[1,5],i=[1,8,9,10,11,27,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],a=[2,2],s=[1,13],l=[1,14],u=[1,15],h=[1,16],f=[1,23],d=[1,25],p=[1,26],m=[1,27],g=[1,49],y=[1,48],v=[1,29],x=[1,30],b=[1,31],T=[1,32],S=[1,33],w=[1,44],k=[1,46],C=[1,42],A=[1,47],L=[1,43],I=[1,50],R=[1,45],E=[1,51],_=[1,52],D=[1,34],O=[1,35],N=[1,36],P=[1,37],B=[1,57],F=[1,8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],V=[1,61],$=[1,60],U=[1,62],j=[8,9,11,75,77,78],ee=[1,78],q=[1,91],oe=[1,96],Q=[1,95],ue=[1,92],te=[1,88],re=[1,94],J=[1,90],K=[1,97],ae=[1,93],Z=[1,98],de=[1,89],ne=[8,9,10,11,40,75,77,78],Te=[8,9,10,11,40,46,75,77,78],W=[8,9,10,11,29,40,44,46,48,50,52,54,56,58,60,63,65,67,68,70,75,77,78,89,102,105,106,109,111,114,115,116],Ve=[8,9,11,44,60,75,77,78,89,102,105,106,109,111,114,115,116],pe=[44,60,89,102,105,106,109,111,114,115,116],Be=[1,121],Ye=[1,122],He=[1,124],Le=[1,123],Ie=[44,60,62,74,89,102,105,106,109,111,114,115,116],Ne=[1,133],Ce=[1,147],Fe=[1,148],fe=[1,149],xe=[1,150],Y=[1,135],he=[1,137],z=[1,141],se=[1,142],le=[1,143],ke=[1,144],ve=[1,145],ye=[1,146],Re=[1,151],_e=[1,152],ze=[1,131],Ke=[1,132],xt=[1,139],We=[1,134],Oe=[1,138],et=[1,136],Ue=[8,9,10,11,27,32,34,36,38,44,60,84,85,86,87,88,89,102,105,106,109,111,114,115,116,121,122,123,124],lt=[1,154],Gt=[1,156],vt=[8,9,11],Lt=[8,9,10,11,14,44,60,89,105,106,109,111,114,115,116],dt=[1,176],nt=[1,172],bt=[1,173],wt=[1,177],yt=[1,174],ft=[1,175],Ur=[77,116,119],_t=[8,9,10,11,12,14,27,29,32,44,60,75,84,85,86,87,88,89,90,105,109,111,114,115,116],bn=[10,106],Br=[31,49,51,53,55,57,62,64,66,67,69,71,116,117,118],cr=[1,247],ar=[1,245],_r=[1,249],Ct=[1,243],Se=[1,244],at=[1,246],Nt=[1,248],wr=[1,250],Tn=[1,268],yn=[8,9,11,106],sn=[8,9,10,11,60,84,105,106,109,110,111,112],Hi={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,shapeData:39,SHAPE_DATA:40,link:41,node:42,styledVertex:43,AMP:44,vertex:45,STYLE_SEPARATOR:46,idString:47,DOUBLECIRCLESTART:48,DOUBLECIRCLEEND:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,VERTEX_WITH_PROPS_START:58,"NODE_STRING[field]":59,COLON:60,"NODE_STRING[value]":61,PIPE:62,CYLINDERSTART:63,CYLINDEREND:64,DIAMOND_START:65,DIAMOND_STOP:66,TAGEND:67,TRAPSTART:68,TRAPEND:69,INVTRAPSTART:70,INVTRAPEND:71,linkStatement:72,arrowText:73,TESTSTR:74,START_LINK:75,edgeText:76,LINK:77,LINK_ID:78,edgeTextToken:79,STR:80,MD_STR:81,textToken:82,keywords:83,STYLE:84,LINKSTYLE:85,CLASSDEF:86,CLASS:87,CLICK:88,DOWN:89,UP:90,textNoTagsToken:91,stylesOpt:92,"idString[vertex]":93,"idString[class]":94,CALLBACKNAME:95,CALLBACKARGS:96,HREF:97,LINK_TARGET:98,"STR[link]":99,"STR[tooltip]":100,alphaNum:101,DEFAULT:102,numList:103,INTERPOLATE:104,NUM:105,COMMA:106,style:107,styleComponent:108,NODE_STRING:109,UNIT:110,BRKT:111,PCT:112,idStringToken:113,MINUS:114,MULT:115,UNICODE_TEXT:116,TEXT:117,TAGSTART:118,EDGE_TEXT:119,alphaNumToken:120,direction_tb:121,direction_bt:122,direction_rl:123,direction_lr:124,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",40:"SHAPE_DATA",44:"AMP",46:"STYLE_SEPARATOR",48:"DOUBLECIRCLESTART",49:"DOUBLECIRCLEEND",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"VERTEX_WITH_PROPS_START",59:"NODE_STRING[field]",60:"COLON",61:"NODE_STRING[value]",62:"PIPE",63:"CYLINDERSTART",64:"CYLINDEREND",65:"DIAMOND_START",66:"DIAMOND_STOP",67:"TAGEND",68:"TRAPSTART",69:"TRAPEND",70:"INVTRAPSTART",71:"INVTRAPEND",74:"TESTSTR",75:"START_LINK",77:"LINK",78:"LINK_ID",80:"STR",81:"MD_STR",84:"STYLE",85:"LINKSTYLE",86:"CLASSDEF",87:"CLASS",88:"CLICK",89:"DOWN",90:"UP",93:"idString[vertex]",94:"idString[class]",95:"CALLBACKNAME",96:"CALLBACKARGS",97:"HREF",98:"LINK_TARGET",99:"STR[link]",100:"STR[tooltip]",102:"DEFAULT",104:"INTERPOLATE",105:"NUM",106:"COMMA",109:"NODE_STRING",110:"UNIT",111:"BRKT",112:"PCT",114:"MINUS",115:"MULT",116:"UNICODE_TEXT",117:"TEXT",118:"TAGSTART",119:"EDGE_TEXT",121:"direction_tb",122:"direction_bt",123:"direction_rl",124:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[39,2],[39,1],[20,4],[20,3],[20,4],[20,2],[20,2],[20,1],[42,1],[42,6],[42,5],[43,1],[43,3],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,8],[45,4],[45,4],[45,4],[45,6],[45,4],[45,4],[45,4],[45,4],[45,4],[45,1],[41,2],[41,3],[41,3],[41,1],[41,3],[41,4],[76,1],[76,2],[76,1],[76,1],[72,1],[72,2],[73,3],[30,1],[30,2],[30,1],[30,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[103,1],[103,3],[92,1],[92,3],[107,1],[107,2],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[113,1],[82,1],[82,1],[82,1],[82,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[79,1],[79,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[47,1],[47,2],[101,1],[101,2],[33,1],[33,1],[33,1],[33,1]],performAction:o(function(it,kt,jt,ht,Dr,me,Yl){var be=me.length-1;switch(Dr){case 2:this.$=[];break;case 3:(!Array.isArray(me[be])||me[be].length>0)&&me[be-1].push(me[be]),this.$=me[be-1];break;case 4:case 183:this.$=me[be];break;case 11:ht.setDirection("TB"),this.$="TB";break;case 12:ht.setDirection(me[be-1]),this.$=me[be-1];break;case 27:this.$=me[be-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=ht.addSubGraph(me[be-6],me[be-1],me[be-4]);break;case 34:this.$=ht.addSubGraph(me[be-3],me[be-1],me[be-3]);break;case 35:this.$=ht.addSubGraph(void 0,me[be-1],void 0);break;case 37:this.$=me[be].trim(),ht.setAccTitle(this.$);break;case 38:case 39:this.$=me[be].trim(),ht.setAccDescription(this.$);break;case 43:this.$=me[be-1]+me[be];break;case 44:this.$=me[be];break;case 45:ht.addVertex(me[be-1][me[be-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,me[be]),ht.addLink(me[be-3].stmt,me[be-1],me[be-2]),this.$={stmt:me[be-1],nodes:me[be-1].concat(me[be-3].nodes)};break;case 46:ht.addLink(me[be-2].stmt,me[be],me[be-1]),this.$={stmt:me[be],nodes:me[be].concat(me[be-2].nodes)};break;case 47:ht.addLink(me[be-3].stmt,me[be-1],me[be-2]),this.$={stmt:me[be-1],nodes:me[be-1].concat(me[be-3].nodes)};break;case 48:this.$={stmt:me[be-1],nodes:me[be-1]};break;case 49:ht.addVertex(me[be-1][me[be-1].length-1],void 0,void 0,void 0,void 0,void 0,void 0,me[be]),this.$={stmt:me[be-1],nodes:me[be-1],shapeData:me[be]};break;case 50:this.$={stmt:me[be],nodes:me[be]};break;case 51:this.$=[me[be]];break;case 52:ht.addVertex(me[be-5][me[be-5].length-1],void 0,void 0,void 0,void 0,void 0,void 0,me[be-4]),this.$=me[be-5].concat(me[be]);break;case 53:this.$=me[be-4].concat(me[be]);break;case 54:this.$=me[be];break;case 55:this.$=me[be-2],ht.setClass(me[be-2],me[be]);break;case 56:this.$=me[be-3],ht.addVertex(me[be-3],me[be-1],"square");break;case 57:this.$=me[be-3],ht.addVertex(me[be-3],me[be-1],"doublecircle");break;case 58:this.$=me[be-5],ht.addVertex(me[be-5],me[be-2],"circle");break;case 59:this.$=me[be-3],ht.addVertex(me[be-3],me[be-1],"ellipse");break;case 60:this.$=me[be-3],ht.addVertex(me[be-3],me[be-1],"stadium");break;case 61:this.$=me[be-3],ht.addVertex(me[be-3],me[be-1],"subroutine");break;case 62:this.$=me[be-7],ht.addVertex(me[be-7],me[be-1],"rect",void 0,void 0,void 0,Object.fromEntries([[me[be-5],me[be-3]]]));break;case 63:this.$=me[be-3],ht.addVertex(me[be-3],me[be-1],"cylinder");break;case 64:this.$=me[be-3],ht.addVertex(me[be-3],me[be-1],"round");break;case 65:this.$=me[be-3],ht.addVertex(me[be-3],me[be-1],"diamond");break;case 66:this.$=me[be-5],ht.addVertex(me[be-5],me[be-2],"hexagon");break;case 67:this.$=me[be-3],ht.addVertex(me[be-3],me[be-1],"odd");break;case 68:this.$=me[be-3],ht.addVertex(me[be-3],me[be-1],"trapezoid");break;case 69:this.$=me[be-3],ht.addVertex(me[be-3],me[be-1],"inv_trapezoid");break;case 70:this.$=me[be-3],ht.addVertex(me[be-3],me[be-1],"lean_right");break;case 71:this.$=me[be-3],ht.addVertex(me[be-3],me[be-1],"lean_left");break;case 72:this.$=me[be],ht.addVertex(me[be]);break;case 73:me[be-1].text=me[be],this.$=me[be-1];break;case 74:case 75:me[be-2].text=me[be-1],this.$=me[be-2];break;case 76:this.$=me[be];break;case 77:var jr=ht.destructLink(me[be],me[be-2]);this.$={type:jr.type,stroke:jr.stroke,length:jr.length,text:me[be-1]};break;case 78:var jr=ht.destructLink(me[be],me[be-2]);this.$={type:jr.type,stroke:jr.stroke,length:jr.length,text:me[be-1],id:me[be-3]};break;case 79:this.$={text:me[be],type:"text"};break;case 80:this.$={text:me[be-1].text+""+me[be],type:me[be-1].type};break;case 81:this.$={text:me[be],type:"string"};break;case 82:this.$={text:me[be],type:"markdown"};break;case 83:var jr=ht.destructLink(me[be]);this.$={type:jr.type,stroke:jr.stroke,length:jr.length};break;case 84:var jr=ht.destructLink(me[be]);this.$={type:jr.type,stroke:jr.stroke,length:jr.length,id:me[be-1]};break;case 85:this.$=me[be-1];break;case 86:this.$={text:me[be],type:"text"};break;case 87:this.$={text:me[be-1].text+""+me[be],type:me[be-1].type};break;case 88:this.$={text:me[be],type:"string"};break;case 89:case 104:this.$={text:me[be],type:"markdown"};break;case 101:this.$={text:me[be],type:"text"};break;case 102:this.$={text:me[be-1].text+""+me[be],type:me[be-1].type};break;case 103:this.$={text:me[be],type:"text"};break;case 105:this.$=me[be-4],ht.addClass(me[be-2],me[be]);break;case 106:this.$=me[be-4],ht.setClass(me[be-2],me[be]);break;case 107:case 115:this.$=me[be-1],ht.setClickEvent(me[be-1],me[be]);break;case 108:case 116:this.$=me[be-3],ht.setClickEvent(me[be-3],me[be-2]),ht.setTooltip(me[be-3],me[be]);break;case 109:this.$=me[be-2],ht.setClickEvent(me[be-2],me[be-1],me[be]);break;case 110:this.$=me[be-4],ht.setClickEvent(me[be-4],me[be-3],me[be-2]),ht.setTooltip(me[be-4],me[be]);break;case 111:this.$=me[be-2],ht.setLink(me[be-2],me[be]);break;case 112:this.$=me[be-4],ht.setLink(me[be-4],me[be-2]),ht.setTooltip(me[be-4],me[be]);break;case 113:this.$=me[be-4],ht.setLink(me[be-4],me[be-2],me[be]);break;case 114:this.$=me[be-6],ht.setLink(me[be-6],me[be-4],me[be]),ht.setTooltip(me[be-6],me[be-2]);break;case 117:this.$=me[be-1],ht.setLink(me[be-1],me[be]);break;case 118:this.$=me[be-3],ht.setLink(me[be-3],me[be-2]),ht.setTooltip(me[be-3],me[be]);break;case 119:this.$=me[be-3],ht.setLink(me[be-3],me[be-2],me[be]);break;case 120:this.$=me[be-5],ht.setLink(me[be-5],me[be-4],me[be]),ht.setTooltip(me[be-5],me[be-2]);break;case 121:this.$=me[be-4],ht.addVertex(me[be-2],void 0,void 0,me[be]);break;case 122:this.$=me[be-4],ht.updateLink([me[be-2]],me[be]);break;case 123:this.$=me[be-4],ht.updateLink(me[be-2],me[be]);break;case 124:this.$=me[be-8],ht.updateLinkInterpolate([me[be-6]],me[be-2]),ht.updateLink([me[be-6]],me[be]);break;case 125:this.$=me[be-8],ht.updateLinkInterpolate(me[be-6],me[be-2]),ht.updateLink(me[be-6],me[be]);break;case 126:this.$=me[be-6],ht.updateLinkInterpolate([me[be-4]],me[be]);break;case 127:this.$=me[be-6],ht.updateLinkInterpolate(me[be-4],me[be]);break;case 128:case 130:this.$=[me[be]];break;case 129:case 131:me[be-2].push(me[be]),this.$=me[be-2];break;case 133:this.$=me[be-1]+me[be];break;case 181:this.$=me[be];break;case 182:this.$=me[be-1]+""+me[be];break;case 184:this.$=me[be-1]+""+me[be];break;case 185:this.$={stmt:"dir",value:"TB"};break;case 186:this.$={stmt:"dir",value:"BT"};break;case 187:this.$={stmt:"dir",value:"RL"};break;case 188:this.$={stmt:"dir",value:"LR"};break}},"anonymous"),table:[{3:1,4:2,9:e,10:r,12:n},{1:[3]},t(i,a,{5:6}),{4:7,9:e,10:r,12:n},{4:8,9:e,10:r,12:n},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:T,88:S,89:w,102:k,105:C,106:A,109:L,111:I,113:41,114:R,115:E,116:_,121:D,122:O,123:N,124:P},t(i,[2,9]),t(i,[2,10]),t(i,[2,11]),{8:[1,54],9:[1,55],10:B,15:53,18:56},t(F,[2,3]),t(F,[2,4]),t(F,[2,5]),t(F,[2,6]),t(F,[2,7]),t(F,[2,8]),{8:V,9:$,11:U,21:58,41:59,72:63,75:[1,64],77:[1,66],78:[1,65]},{8:V,9:$,11:U,21:67},{8:V,9:$,11:U,21:68},{8:V,9:$,11:U,21:69},{8:V,9:$,11:U,21:70},{8:V,9:$,11:U,21:71},{8:V,9:$,10:[1,72],11:U,21:73},t(F,[2,36]),{35:[1,74]},{37:[1,75]},t(F,[2,39]),t(j,[2,50],{18:76,39:77,10:B,40:ee}),{10:[1,79]},{10:[1,80]},{10:[1,81]},{10:[1,82]},{14:q,44:oe,60:Q,80:[1,86],89:ue,95:[1,83],97:[1,84],101:85,105:te,106:re,109:J,111:K,114:ae,115:Z,116:de,120:87},t(F,[2,185]),t(F,[2,186]),t(F,[2,187]),t(F,[2,188]),t(ne,[2,51]),t(ne,[2,54],{46:[1,99]}),t(Te,[2,72],{113:112,29:[1,100],44:g,48:[1,101],50:[1,102],52:[1,103],54:[1,104],56:[1,105],58:[1,106],60:y,63:[1,107],65:[1,108],67:[1,109],68:[1,110],70:[1,111],89:w,102:k,105:C,106:A,109:L,111:I,114:R,115:E,116:_}),t(W,[2,181]),t(W,[2,142]),t(W,[2,143]),t(W,[2,144]),t(W,[2,145]),t(W,[2,146]),t(W,[2,147]),t(W,[2,148]),t(W,[2,149]),t(W,[2,150]),t(W,[2,151]),t(W,[2,152]),t(i,[2,12]),t(i,[2,18]),t(i,[2,19]),{9:[1,113]},t(Ve,[2,26],{18:114,10:B}),t(F,[2,27]),{42:115,43:38,44:g,45:39,47:40,60:y,89:w,102:k,105:C,106:A,109:L,111:I,113:41,114:R,115:E,116:_},t(F,[2,40]),t(F,[2,41]),t(F,[2,42]),t(pe,[2,76],{73:116,62:[1,118],74:[1,117]}),{76:119,79:120,80:Be,81:Ye,116:He,119:Le},{75:[1,125],77:[1,126]},t(Ie,[2,83]),t(F,[2,28]),t(F,[2,29]),t(F,[2,30]),t(F,[2,31]),t(F,[2,32]),{10:Ne,12:Ce,14:Fe,27:fe,28:127,32:xe,44:Y,60:he,75:z,80:[1,129],81:[1,130],83:140,84:se,85:le,86:ke,87:ve,88:ye,89:Re,90:_e,91:128,105:ze,109:Ke,111:xt,114:We,115:Oe,116:et},t(Ue,a,{5:153}),t(F,[2,37]),t(F,[2,38]),t(j,[2,48],{44:lt}),t(j,[2,49],{18:155,10:B,40:Gt}),t(ne,[2,44]),{44:g,47:157,60:y,89:w,102:k,105:C,106:A,109:L,111:I,113:41,114:R,115:E,116:_},{102:[1,158],103:159,105:[1,160]},{44:g,47:161,60:y,89:w,102:k,105:C,106:A,109:L,111:I,113:41,114:R,115:E,116:_},{44:g,47:162,60:y,89:w,102:k,105:C,106:A,109:L,111:I,113:41,114:R,115:E,116:_},t(vt,[2,107],{10:[1,163],96:[1,164]}),{80:[1,165]},t(vt,[2,115],{120:167,10:[1,166],14:q,44:oe,60:Q,89:ue,105:te,106:re,109:J,111:K,114:ae,115:Z,116:de}),t(vt,[2,117],{10:[1,168]}),t(Lt,[2,183]),t(Lt,[2,170]),t(Lt,[2,171]),t(Lt,[2,172]),t(Lt,[2,173]),t(Lt,[2,174]),t(Lt,[2,175]),t(Lt,[2,176]),t(Lt,[2,177]),t(Lt,[2,178]),t(Lt,[2,179]),t(Lt,[2,180]),{44:g,47:169,60:y,89:w,102:k,105:C,106:A,109:L,111:I,113:41,114:R,115:E,116:_},{30:170,67:dt,80:nt,81:bt,82:171,116:wt,117:yt,118:ft},{30:178,67:dt,80:nt,81:bt,82:171,116:wt,117:yt,118:ft},{30:180,50:[1,179],67:dt,80:nt,81:bt,82:171,116:wt,117:yt,118:ft},{30:181,67:dt,80:nt,81:bt,82:171,116:wt,117:yt,118:ft},{30:182,67:dt,80:nt,81:bt,82:171,116:wt,117:yt,118:ft},{30:183,67:dt,80:nt,81:bt,82:171,116:wt,117:yt,118:ft},{109:[1,184]},{30:185,67:dt,80:nt,81:bt,82:171,116:wt,117:yt,118:ft},{30:186,65:[1,187],67:dt,80:nt,81:bt,82:171,116:wt,117:yt,118:ft},{30:188,67:dt,80:nt,81:bt,82:171,116:wt,117:yt,118:ft},{30:189,67:dt,80:nt,81:bt,82:171,116:wt,117:yt,118:ft},{30:190,67:dt,80:nt,81:bt,82:171,116:wt,117:yt,118:ft},t(W,[2,182]),t(i,[2,20]),t(Ve,[2,25]),t(j,[2,46],{39:191,18:192,10:B,40:ee}),t(pe,[2,73],{10:[1,193]}),{10:[1,194]},{30:195,67:dt,80:nt,81:bt,82:171,116:wt,117:yt,118:ft},{77:[1,196],79:197,116:He,119:Le},t(Ur,[2,79]),t(Ur,[2,81]),t(Ur,[2,82]),t(Ur,[2,168]),t(Ur,[2,169]),{76:198,79:120,80:Be,81:Ye,116:He,119:Le},t(Ie,[2,84]),{8:V,9:$,10:Ne,11:U,12:Ce,14:Fe,21:200,27:fe,29:[1,199],32:xe,44:Y,60:he,75:z,83:140,84:se,85:le,86:ke,87:ve,88:ye,89:Re,90:_e,91:201,105:ze,109:Ke,111:xt,114:We,115:Oe,116:et},t(_t,[2,101]),t(_t,[2,103]),t(_t,[2,104]),t(_t,[2,157]),t(_t,[2,158]),t(_t,[2,159]),t(_t,[2,160]),t(_t,[2,161]),t(_t,[2,162]),t(_t,[2,163]),t(_t,[2,164]),t(_t,[2,165]),t(_t,[2,166]),t(_t,[2,167]),t(_t,[2,90]),t(_t,[2,91]),t(_t,[2,92]),t(_t,[2,93]),t(_t,[2,94]),t(_t,[2,95]),t(_t,[2,96]),t(_t,[2,97]),t(_t,[2,98]),t(_t,[2,99]),t(_t,[2,100]),{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,202],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:T,88:S,89:w,102:k,105:C,106:A,109:L,111:I,113:41,114:R,115:E,116:_,121:D,122:O,123:N,124:P},{10:B,18:203},{44:[1,204]},t(ne,[2,43]),{10:[1,205],44:g,60:y,89:w,102:k,105:C,106:A,109:L,111:I,113:112,114:R,115:E,116:_},{10:[1,206]},{10:[1,207],106:[1,208]},t(bn,[2,128]),{10:[1,209],44:g,60:y,89:w,102:k,105:C,106:A,109:L,111:I,113:112,114:R,115:E,116:_},{10:[1,210],44:g,60:y,89:w,102:k,105:C,106:A,109:L,111:I,113:112,114:R,115:E,116:_},{80:[1,211]},t(vt,[2,109],{10:[1,212]}),t(vt,[2,111],{10:[1,213]}),{80:[1,214]},t(Lt,[2,184]),{80:[1,215],98:[1,216]},t(ne,[2,55],{113:112,44:g,60:y,89:w,102:k,105:C,106:A,109:L,111:I,114:R,115:E,116:_}),{31:[1,217],67:dt,82:218,116:wt,117:yt,118:ft},t(Br,[2,86]),t(Br,[2,88]),t(Br,[2,89]),t(Br,[2,153]),t(Br,[2,154]),t(Br,[2,155]),t(Br,[2,156]),{49:[1,219],67:dt,82:218,116:wt,117:yt,118:ft},{30:220,67:dt,80:nt,81:bt,82:171,116:wt,117:yt,118:ft},{51:[1,221],67:dt,82:218,116:wt,117:yt,118:ft},{53:[1,222],67:dt,82:218,116:wt,117:yt,118:ft},{55:[1,223],67:dt,82:218,116:wt,117:yt,118:ft},{57:[1,224],67:dt,82:218,116:wt,117:yt,118:ft},{60:[1,225]},{64:[1,226],67:dt,82:218,116:wt,117:yt,118:ft},{66:[1,227],67:dt,82:218,116:wt,117:yt,118:ft},{30:228,67:dt,80:nt,81:bt,82:171,116:wt,117:yt,118:ft},{31:[1,229],67:dt,82:218,116:wt,117:yt,118:ft},{67:dt,69:[1,230],71:[1,231],82:218,116:wt,117:yt,118:ft},{67:dt,69:[1,233],71:[1,232],82:218,116:wt,117:yt,118:ft},t(j,[2,45],{18:155,10:B,40:Gt}),t(j,[2,47],{44:lt}),t(pe,[2,75]),t(pe,[2,74]),{62:[1,234],67:dt,82:218,116:wt,117:yt,118:ft},t(pe,[2,77]),t(Ur,[2,80]),{77:[1,235],79:197,116:He,119:Le},{30:236,67:dt,80:nt,81:bt,82:171,116:wt,117:yt,118:ft},t(Ue,a,{5:237}),t(_t,[2,102]),t(F,[2,35]),{43:238,44:g,45:39,47:40,60:y,89:w,102:k,105:C,106:A,109:L,111:I,113:41,114:R,115:E,116:_},{10:B,18:239},{10:cr,60:ar,84:_r,92:240,105:Ct,107:241,108:242,109:Se,110:at,111:Nt,112:wr},{10:cr,60:ar,84:_r,92:251,104:[1,252],105:Ct,107:241,108:242,109:Se,110:at,111:Nt,112:wr},{10:cr,60:ar,84:_r,92:253,104:[1,254],105:Ct,107:241,108:242,109:Se,110:at,111:Nt,112:wr},{105:[1,255]},{10:cr,60:ar,84:_r,92:256,105:Ct,107:241,108:242,109:Se,110:at,111:Nt,112:wr},{44:g,47:257,60:y,89:w,102:k,105:C,106:A,109:L,111:I,113:41,114:R,115:E,116:_},t(vt,[2,108]),{80:[1,258]},{80:[1,259],98:[1,260]},t(vt,[2,116]),t(vt,[2,118],{10:[1,261]}),t(vt,[2,119]),t(Te,[2,56]),t(Br,[2,87]),t(Te,[2,57]),{51:[1,262],67:dt,82:218,116:wt,117:yt,118:ft},t(Te,[2,64]),t(Te,[2,59]),t(Te,[2,60]),t(Te,[2,61]),{109:[1,263]},t(Te,[2,63]),t(Te,[2,65]),{66:[1,264],67:dt,82:218,116:wt,117:yt,118:ft},t(Te,[2,67]),t(Te,[2,68]),t(Te,[2,70]),t(Te,[2,69]),t(Te,[2,71]),t([10,44,60,89,102,105,106,109,111,114,115,116],[2,85]),t(pe,[2,78]),{31:[1,265],67:dt,82:218,116:wt,117:yt,118:ft},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,266],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:T,88:S,89:w,102:k,105:C,106:A,109:L,111:I,113:41,114:R,115:E,116:_,121:D,122:O,123:N,124:P},t(ne,[2,53]),{43:267,44:g,45:39,47:40,60:y,89:w,102:k,105:C,106:A,109:L,111:I,113:41,114:R,115:E,116:_},t(vt,[2,121],{106:Tn}),t(yn,[2,130],{108:269,10:cr,60:ar,84:_r,105:Ct,109:Se,110:at,111:Nt,112:wr}),t(sn,[2,132]),t(sn,[2,134]),t(sn,[2,135]),t(sn,[2,136]),t(sn,[2,137]),t(sn,[2,138]),t(sn,[2,139]),t(sn,[2,140]),t(sn,[2,141]),t(vt,[2,122],{106:Tn}),{10:[1,270]},t(vt,[2,123],{106:Tn}),{10:[1,271]},t(bn,[2,129]),t(vt,[2,105],{106:Tn}),t(vt,[2,106],{113:112,44:g,60:y,89:w,102:k,105:C,106:A,109:L,111:I,114:R,115:E,116:_}),t(vt,[2,110]),t(vt,[2,112],{10:[1,272]}),t(vt,[2,113]),{98:[1,273]},{51:[1,274]},{62:[1,275]},{66:[1,276]},{8:V,9:$,11:U,21:277},t(F,[2,34]),t(ne,[2,52]),{10:cr,60:ar,84:_r,105:Ct,107:278,108:242,109:Se,110:at,111:Nt,112:wr},t(sn,[2,133]),{14:q,44:oe,60:Q,89:ue,101:279,105:te,106:re,109:J,111:K,114:ae,115:Z,116:de,120:87},{14:q,44:oe,60:Q,89:ue,101:280,105:te,106:re,109:J,111:K,114:ae,115:Z,116:de,120:87},{98:[1,281]},t(vt,[2,120]),t(Te,[2,58]),{30:282,67:dt,80:nt,81:bt,82:171,116:wt,117:yt,118:ft},t(Te,[2,66]),t(Ue,a,{5:283}),t(yn,[2,131],{108:269,10:cr,60:ar,84:_r,105:Ct,109:Se,110:at,111:Nt,112:wr}),t(vt,[2,126],{120:167,10:[1,284],14:q,44:oe,60:Q,89:ue,105:te,106:re,109:J,111:K,114:ae,115:Z,116:de}),t(vt,[2,127],{120:167,10:[1,285],14:q,44:oe,60:Q,89:ue,105:te,106:re,109:J,111:K,114:ae,115:Z,116:de}),t(vt,[2,114]),{31:[1,286],67:dt,82:218,116:wt,117:yt,118:ft},{6:11,7:12,8:s,9:l,10:u,11:h,20:17,22:18,23:19,24:20,25:21,26:22,27:f,32:[1,287],33:24,34:d,36:p,38:m,42:28,43:38,44:g,45:39,47:40,60:y,84:v,85:x,86:b,87:T,88:S,89:w,102:k,105:C,106:A,109:L,111:I,113:41,114:R,115:E,116:_,121:D,122:O,123:N,124:P},{10:cr,60:ar,84:_r,92:288,105:Ct,107:241,108:242,109:Se,110:at,111:Nt,112:wr},{10:cr,60:ar,84:_r,92:289,105:Ct,107:241,108:242,109:Se,110:at,111:Nt,112:wr},t(Te,[2,62]),t(F,[2,33]),t(vt,[2,124],{106:Tn}),t(vt,[2,125],{106:Tn})],defaultActions:{},parseError:o(function(it,kt){if(kt.recoverable)this.trace(it);else{var jt=new Error(it);throw jt.hash=kt,jt}},"parseError"),parse:o(function(it){var kt=this,jt=[0],ht=[],Dr=[null],me=[],Yl=this.table,be="",jr=0,U4=0,XC=0,jC=2,Hz=1,H3e=me.slice.call(arguments,1),qi=Object.create(this.lexer),ad={yy:{}};for(var KC in this.yy)Object.prototype.hasOwnProperty.call(this.yy,KC)&&(ad.yy[KC]=this.yy[KC]);qi.setInput(it,ad.yy),ad.yy.lexer=qi,ad.yy.parser=this,typeof qi.yylloc>"u"&&(qi.yylloc={});var QC=qi.yylloc;me.push(QC);var q3e=qi.options&&qi.options.ranges;typeof ad.yy.parseError=="function"?this.parseError=ad.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Gat(Js){jt.length=jt.length-2*Js,Dr.length=Dr.length-Js,me.length=me.length-Js}o(Gat,"popStack");function W3e(){var Js;return Js=ht.pop()||qi.lex()||Hz,typeof Js!="number"&&(Js instanceof Array&&(ht=Js,Js=ht.pop()),Js=kt.symbols_[Js]||Js),Js}o(W3e,"lex");for(var ja,ZC,sd,ko,Vat,JC,g0={},H4,iu,qz,q4;;){if(sd=jt[jt.length-1],this.defaultActions[sd]?ko=this.defaultActions[sd]:((ja===null||typeof ja>"u")&&(ja=W3e()),ko=Yl[sd]&&Yl[sd][ja]),typeof ko>"u"||!ko.length||!ko[0]){var e7="";q4=[];for(H4 in Yl[sd])this.terminals_[H4]&&H4>jC&&q4.push("'"+this.terminals_[H4]+"'");qi.showPosition?e7="Parse error on line "+(jr+1)+`: +`+qi.showPosition()+` +Expecting `+q4.join(", ")+", got '"+(this.terminals_[ja]||ja)+"'":e7="Parse error on line "+(jr+1)+": Unexpected "+(ja==Hz?"end of input":"'"+(this.terminals_[ja]||ja)+"'"),this.parseError(e7,{text:qi.match,token:this.terminals_[ja]||ja,line:qi.yylineno,loc:QC,expected:q4})}if(ko[0]instanceof Array&&ko.length>1)throw new Error("Parse Error: multiple actions possible at state: "+sd+", token: "+ja);switch(ko[0]){case 1:jt.push(ja),Dr.push(qi.yytext),me.push(qi.yylloc),jt.push(ko[1]),ja=null,ZC?(ja=ZC,ZC=null):(U4=qi.yyleng,be=qi.yytext,jr=qi.yylineno,QC=qi.yylloc,XC>0&&XC--);break;case 2:if(iu=this.productions_[ko[1]][1],g0.$=Dr[Dr.length-iu],g0._$={first_line:me[me.length-(iu||1)].first_line,last_line:me[me.length-1].last_line,first_column:me[me.length-(iu||1)].first_column,last_column:me[me.length-1].last_column},q3e&&(g0._$.range=[me[me.length-(iu||1)].range[0],me[me.length-1].range[1]]),JC=this.performAction.apply(g0,[be,U4,jr,ad.yy,ko[1],Dr,me].concat(H3e)),typeof JC<"u")return JC;iu&&(jt=jt.slice(0,-1*iu*2),Dr=Dr.slice(0,-1*iu),me=me.slice(0,-1*iu)),jt.push(this.productions_[ko[1]][0]),Dr.push(g0.$),me.push(g0._$),qz=Yl[jt[jt.length-2]][jt[jt.length-1]],jt.push(qz);break;case 3:return!0}}return!0},"parse")},Zs=(function(){var fr={EOF:1,parseError:o(function(kt,jt){if(this.yy.parser)this.yy.parser.parseError(kt,jt);else throw new Error(kt)},"parseError"),setInput:o(function(it,kt){return this.yy=kt||this.yy||{},this._input=it,this._more=this._backtrack=this.done=!1,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},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var it=this._input[0];this.yytext+=it,this.yyleng++,this.offset++,this.match+=it,this.matched+=it;var kt=it.match(/(?:\r\n?|\n).*/g);return kt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),it},"input"),unput:o(function(it){var kt=it.length,jt=it.split(/(?:\r\n?|\n)/g);this._input=it+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-kt),this.offset-=kt;var ht=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),jt.length-1&&(this.yylineno-=jt.length-1);var Dr=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:jt?(jt.length===ht.length?this.yylloc.first_column:0)+ht[ht.length-jt.length].length-jt[0].length:this.yylloc.first_column-kt},this.options.ranges&&(this.yylloc.range=[Dr[0],Dr[0]+this.yyleng-kt]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(it){this.unput(this.match.slice(it))},"less"),pastInput:o(function(){var it=this.matched.substr(0,this.matched.length-this.match.length);return(it.length>20?"...":"")+it.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var it=this.match;return it.length<20&&(it+=this._input.substr(0,20-it.length)),(it.substr(0,20)+(it.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var it=this.pastInput(),kt=new Array(it.length+1).join("-");return it+this.upcomingInput()+` +`+kt+"^"},"showPosition"),test_match:o(function(it,kt){var jt,ht,Dr;if(this.options.backtrack_lexer&&(Dr={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},this.options.ranges&&(Dr.yylloc.range=this.yylloc.range.slice(0))),ht=it[0].match(/(?:\r\n?|\n).*/g),ht&&(this.yylineno+=ht.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ht?ht[ht.length-1].length-ht[ht.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+it[0].length},this.yytext+=it[0],this.match+=it[0],this.matches=it,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(it[0].length),this.matched+=it[0],jt=this.performAction.call(this,this.yy,this,kt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),jt)return jt;if(this._backtrack){for(var me in Dr)this[me]=Dr[me];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var it,kt,jt,ht;this._more||(this.yytext="",this.match="");for(var Dr=this._currentRules(),me=0;mekt[0].length)){if(kt=jt,ht=me,this.options.backtrack_lexer){if(it=this.test_match(jt,Dr[me]),it!==!1)return it;if(this._backtrack){kt=!1;continue}else return!1}else if(!this.options.flex)break}return kt?(it=this.test_match(kt,Dr[ht]),it!==!1?it:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var kt=this.next();return kt||this.lex()},"lex"),begin:o(function(kt){this.conditionStack.push(kt)},"begin"),popState:o(function(){var kt=this.conditionStack.length-1;return kt>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(kt){return kt=this.conditionStack.length-1-Math.abs(kt||0),kt>=0?this.conditionStack[kt]:"INITIAL"},"topState"),pushState:o(function(kt){this.begin(kt)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(kt,jt,ht,Dr){var me=Dr;switch(ht){case 0:return this.begin("acc_title"),34;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),36;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.pushState("shapeData"),jt.yytext="",40;break;case 8:return this.pushState("shapeDataStr"),40;break;case 9:return this.popState(),40;break;case 10:let Yl=/\n\s*/g;return jt.yytext=jt.yytext.replace(Yl,"
    "),40;break;case 11:return 40;case 12:this.popState();break;case 13:this.begin("callbackname");break;case 14:this.popState();break;case 15:this.popState(),this.begin("callbackargs");break;case 16:return 95;case 17:this.popState();break;case 18:return 96;case 19:return"MD_STR";case 20:this.popState();break;case 21:this.begin("md_string");break;case 22:return"STR";case 23:this.popState();break;case 24:this.pushState("string");break;case 25:return 84;case 26:return 102;case 27:return 85;case 28:return 104;case 29:return 86;case 30:return 87;case 31:return 97;case 32:this.begin("click");break;case 33:this.popState();break;case 34:return 88;case 35:return kt.lex.firstGraph()&&this.begin("dir"),12;break;case 36:return kt.lex.firstGraph()&&this.begin("dir"),12;break;case 37:return kt.lex.firstGraph()&&this.begin("dir"),12;break;case 38:return 27;case 39:return 32;case 40:return 98;case 41:return 98;case 42:return 98;case 43:return 98;case 44:return this.popState(),13;break;case 45:return this.popState(),14;break;case 46:return this.popState(),14;break;case 47:return this.popState(),14;break;case 48:return this.popState(),14;break;case 49:return this.popState(),14;break;case 50:return this.popState(),14;break;case 51:return this.popState(),14;break;case 52:return this.popState(),14;break;case 53:return this.popState(),14;break;case 54:return this.popState(),14;break;case 55:return 121;case 56:return 122;case 57:return 123;case 58:return 124;case 59:return 78;case 60:return 105;case 61:return 111;case 62:return 46;case 63:return 60;case 64:return 44;case 65:return 8;case 66:return 106;case 67:return 115;case 68:return this.popState(),77;break;case 69:return this.pushState("edgeText"),75;break;case 70:return 119;case 71:return this.popState(),77;break;case 72:return this.pushState("thickEdgeText"),75;break;case 73:return 119;case 74:return this.popState(),77;break;case 75:return this.pushState("dottedEdgeText"),75;break;case 76:return 119;case 77:return 77;case 78:return this.popState(),53;break;case 79:return"TEXT";case 80:return this.pushState("ellipseText"),52;break;case 81:return this.popState(),55;break;case 82:return this.pushState("text"),54;break;case 83:return this.popState(),57;break;case 84:return this.pushState("text"),56;break;case 85:return 58;case 86:return this.pushState("text"),67;break;case 87:return this.popState(),64;break;case 88:return this.pushState("text"),63;break;case 89:return this.popState(),49;break;case 90:return this.pushState("text"),48;break;case 91:return this.popState(),69;break;case 92:return this.popState(),71;break;case 93:return 117;case 94:return this.pushState("trapText"),68;break;case 95:return this.pushState("trapText"),70;break;case 96:return 118;case 97:return 67;case 98:return 90;case 99:return"SEP";case 100:return 89;case 101:return 115;case 102:return 111;case 103:return 44;case 104:return 109;case 105:return 114;case 106:return 116;case 107:return this.popState(),62;break;case 108:return this.pushState("text"),62;break;case 109:return this.popState(),51;break;case 110:return this.pushState("text"),50;break;case 111:return this.popState(),31;break;case 112:return this.pushState("text"),29;break;case 113:return this.popState(),66;break;case 114:return this.pushState("text"),65;break;case 115:return"TEXT";case 116:return"QUOTE";case 117:return 9;case 118:return 10;case 119:return 11}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:@\{)/,/^(?:["])/,/^(?:["])/,/^(?:[^\"]+)/,/^(?:[^}^"]+)/,/^(?:\})/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[^\s\"]+@(?=[^\{\"]))/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{shapeDataEndBracket:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},shapeDataStr:{rules:[9,10,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},shapeData:{rules:[8,11,12,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},callbackargs:{rules:[17,18,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},callbackname:{rules:[14,15,16,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},href:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},click:{rules:[21,24,33,34,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},dottedEdgeText:{rules:[21,24,74,76,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},thickEdgeText:{rules:[21,24,71,73,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},edgeText:{rules:[21,24,68,70,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},trapText:{rules:[21,24,77,80,82,84,88,90,91,92,93,94,95,108,110,112,114],inclusive:!1},ellipseText:{rules:[21,24,77,78,79,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},text:{rules:[21,24,77,80,81,82,83,84,87,88,89,90,94,95,107,108,109,110,111,112,113,114,115],inclusive:!1},vertex:{rules:[21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},dir:{rules:[21,24,44,45,46,47,48,49,50,51,52,53,54,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_descr_multiline:{rules:[5,6,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_descr:{rules:[3,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},acc_title:{rules:[1,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},md_string:{rules:[19,20,21,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},string:{rules:[21,22,23,24,77,80,82,84,88,90,94,95,108,110,112,114],inclusive:!1},INITIAL:{rules:[0,2,4,7,13,21,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,43,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,71,72,74,75,77,80,82,84,85,86,88,90,94,95,96,97,98,99,100,101,102,103,104,105,106,108,110,112,114,116,117,118,119],inclusive:!0}}};return fr})();Hi.lexer=Zs;function Da(){this.yy={}}return o(Da,"Parser"),Da.prototype=Hi,Hi.Parser=Da,new Da})();GI.parser=GI;VI=GI});var mfe,gfe,yfe=M(()=>{"use strict";pfe();mfe=Object.assign({},VI);mfe.parse=t=>{let e=t.replace(/}\s*\n/g,`} +`);return VI.parse(e)};gfe=mfe});var zc,yg=M(()=>{"use strict";zc=o(()=>` + /* Font Awesome icon styling - consolidated */ + .label-icon { + display: inline-block; + height: 1em; + overflow: visible; + vertical-align: -0.125em; + } + + .node .label-icon path { + fill: currentColor; + stroke: revert; + stroke-width: revert; + } +`,"getIconStyles")});var iWe,aWe,vfe,xfe=M(()=>{"use strict";eo();yg();iWe=o((t,e)=>{let r=ld,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return Ka(n,i,a,e)},"fade"),aWe=o(t=>`.label { + font-family: ${t.fontFamily}; + color: ${t.nodeTextColor||t.textColor}; + } + .cluster-label text { + fill: ${t.titleColor}; + } + .cluster-label span { + color: ${t.titleColor}; + } + .cluster-label span p { + background-color: transparent; + } + + .label text,span { + fill: ${t.nodeTextColor||t.textColor}; + color: ${t.nodeTextColor||t.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + .rough-node .label text , .node .label text, .image-shape .label, .icon-shape .label { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .katex path { + fill: #000; + stroke: #000; + stroke-width: 1px; + } + + .rough-node .label,.node .label, .image-shape .label, .icon-shape .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + + .root .anchor path { + fill: ${t.lineColor} !important; + stroke-width: 0; + stroke: ${t.lineColor}; + } + + .arrowheadPath { + fill: ${t.arrowheadColor}; + } + + .edgePath .path { + stroke: ${t.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${t.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${t.edgeLabelBackground}; + p { + background-color: ${t.edgeLabelBackground}; + } + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${iWe(t.edgeLabelBackground,.5)}; + // background-color: + } + + .cluster rect { + fill: ${t.clusterBkg}; + stroke: ${t.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${t.titleColor}; + } + + .cluster span { + color: ${t.titleColor}; + } + /* .cluster div { + color: ${t.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${t.fontFamily}; + font-size: 12px; + background: ${t.tertiaryColor}; + border: 1px solid ${t.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; + } + + rect.text { + fill: none; + stroke-width: 0; + } + + .icon-shape, .image-shape { + background-color: ${t.edgeLabelBackground}; + p { + background-color: ${t.edgeLabelBackground}; + padding: 2px; + } + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; + } + ${zc()} +`,"getStyles"),vfe=aWe});var AE={};dr(AE,{diagram:()=>sWe});var sWe,_E=M(()=>{"use strict";Xt();zte();dfe();yfe();xfe();sWe={parser:gfe,get db(){return new cw},renderer:ffe,styles:vfe,init:o(t=>{t.flowchart||(t.flowchart={}),t.layout&&iv({layout:t.layout}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,iv({flowchart:{arrowMarkerAbsolute:t.arrowMarkerAbsolute}})},"init")}});var UI,Efe,Sfe=M(()=>{"use strict";UI=(function(){var t=o(function(K,ae,Z,de){for(Z=Z||{},de=K.length;de--;Z[K[de]]=ae);return Z},"o"),e=[6,8,10,22,24,26,28,33,34,35,36,37,40,43,44,50],r=[1,10],n=[1,11],i=[1,12],a=[1,13],s=[1,20],l=[1,21],u=[1,22],h=[1,23],f=[1,24],d=[1,19],p=[1,25],m=[1,26],g=[1,18],y=[1,33],v=[1,34],x=[1,35],b=[1,36],T=[1,37],S=[6,8,10,13,15,17,20,21,22,24,26,28,33,34,35,36,37,40,43,44,50,63,64,65,66,67],w=[1,42],k=[1,43],C=[1,52],A=[40,50,68,69],L=[1,63],I=[1,61],R=[1,58],E=[1,62],_=[1,64],D=[6,8,10,13,17,22,24,26,28,33,34,35,36,37,40,41,42,43,44,48,49,50,63,64,65,66,67],O=[63,64,65,66,67],N=[1,81],P=[1,80],B=[1,78],F=[1,79],V=[6,10,42,47],$=[6,10,13,41,42,47,48,49],U=[1,89],j=[1,88],ee=[1,87],q=[19,56],oe=[1,98],Q=[1,97],ue=[19,56,58,60],te={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,COLON:13,role:14,STYLE_SEPARATOR:15,idList:16,BLOCK_START:17,attributes:18,BLOCK_STOP:19,SQS:20,SQE:21,title:22,title_value:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,direction:29,classDefStatement:30,classStatement:31,styleStatement:32,direction_tb:33,direction_bt:34,direction_rl:35,direction_lr:36,CLASSDEF:37,stylesOpt:38,separator:39,UNICODE_TEXT:40,STYLE_TEXT:41,COMMA:42,CLASS:43,STYLE:44,style:45,styleComponent:46,SEMI:47,NUM:48,BRKT:49,ENTITY_NAME:50,attribute:51,attributeType:52,attributeName:53,attributeKeyTypeList:54,attributeComment:55,ATTRIBUTE_WORD:56,attributeKeyType:57,",":58,ATTRIBUTE_KEY:59,COMMENT:60,cardinality:61,relType:62,ZERO_OR_ONE:63,ZERO_OR_MORE:64,ONE_OR_MORE:65,ONLY_ONE:66,MD_PARENT:67,NON_IDENTIFYING:68,IDENTIFYING:69,WORD:70,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:"COLON",15:"STYLE_SEPARATOR",17:"BLOCK_START",19:"BLOCK_STOP",20:"SQS",21:"SQE",22:"title",23:"title_value",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"direction_tb",34:"direction_bt",35:"direction_rl",36:"direction_lr",37:"CLASSDEF",40:"UNICODE_TEXT",41:"STYLE_TEXT",42:"COMMA",43:"CLASS",44:"STYLE",47:"SEMI",48:"NUM",49:"BRKT",50:"ENTITY_NAME",56:"ATTRIBUTE_WORD",58:",",59:"ATTRIBUTE_KEY",60:"COMMENT",63:"ZERO_OR_ONE",64:"ZERO_OR_MORE",65:"ONE_OR_MORE",66:"ONLY_ONE",67:"MD_PARENT",68:"NON_IDENTIFYING",69:"IDENTIFYING",70:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,9],[9,7],[9,7],[9,4],[9,6],[9,3],[9,5],[9,1],[9,3],[9,7],[9,9],[9,6],[9,8],[9,4],[9,6],[9,2],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[9,1],[29,1],[29,1],[29,1],[29,1],[30,4],[16,1],[16,1],[16,3],[16,3],[31,3],[32,4],[38,1],[38,3],[45,1],[45,2],[39,1],[39,1],[39,1],[46,1],[46,1],[46,1],[46,1],[11,1],[11,1],[18,1],[18,2],[51,2],[51,3],[51,3],[51,4],[52,1],[53,1],[54,1],[54,3],[57,1],[55,1],[12,3],[61,1],[61,1],[61,1],[61,1],[61,1],[62,1],[62,1],[14,1],[14,1],[14,1]],performAction:o(function(ae,Z,de,ne,Te,W,Ve){var pe=W.length-1;switch(Te){case 1:break;case 2:this.$=[];break;case 3:W[pe-1].push(W[pe]),this.$=W[pe-1];break;case 4:case 5:this.$=W[pe];break;case 6:case 7:this.$=[];break;case 8:ne.addEntity(W[pe-4]),ne.addEntity(W[pe-2]),ne.addRelationship(W[pe-4],W[pe],W[pe-2],W[pe-3]);break;case 9:ne.addEntity(W[pe-8]),ne.addEntity(W[pe-4]),ne.addRelationship(W[pe-8],W[pe],W[pe-4],W[pe-5]),ne.setClass([W[pe-8]],W[pe-6]),ne.setClass([W[pe-4]],W[pe-2]);break;case 10:ne.addEntity(W[pe-6]),ne.addEntity(W[pe-2]),ne.addRelationship(W[pe-6],W[pe],W[pe-2],W[pe-3]),ne.setClass([W[pe-6]],W[pe-4]);break;case 11:ne.addEntity(W[pe-6]),ne.addEntity(W[pe-4]),ne.addRelationship(W[pe-6],W[pe],W[pe-4],W[pe-5]),ne.setClass([W[pe-4]],W[pe-2]);break;case 12:ne.addEntity(W[pe-3]),ne.addAttributes(W[pe-3],W[pe-1]);break;case 13:ne.addEntity(W[pe-5]),ne.addAttributes(W[pe-5],W[pe-1]),ne.setClass([W[pe-5]],W[pe-3]);break;case 14:ne.addEntity(W[pe-2]);break;case 15:ne.addEntity(W[pe-4]),ne.setClass([W[pe-4]],W[pe-2]);break;case 16:ne.addEntity(W[pe]);break;case 17:ne.addEntity(W[pe-2]),ne.setClass([W[pe-2]],W[pe]);break;case 18:ne.addEntity(W[pe-6],W[pe-4]),ne.addAttributes(W[pe-6],W[pe-1]);break;case 19:ne.addEntity(W[pe-8],W[pe-6]),ne.addAttributes(W[pe-8],W[pe-1]),ne.setClass([W[pe-8]],W[pe-3]);break;case 20:ne.addEntity(W[pe-5],W[pe-3]);break;case 21:ne.addEntity(W[pe-7],W[pe-5]),ne.setClass([W[pe-7]],W[pe-2]);break;case 22:ne.addEntity(W[pe-3],W[pe-1]);break;case 23:ne.addEntity(W[pe-5],W[pe-3]),ne.setClass([W[pe-5]],W[pe]);break;case 24:case 25:this.$=W[pe].trim(),ne.setAccTitle(this.$);break;case 26:case 27:this.$=W[pe].trim(),ne.setAccDescription(this.$);break;case 32:ne.setDirection("TB");break;case 33:ne.setDirection("BT");break;case 34:ne.setDirection("RL");break;case 35:ne.setDirection("LR");break;case 36:this.$=W[pe-3],ne.addClass(W[pe-2],W[pe-1]);break;case 37:case 38:case 56:case 64:this.$=[W[pe]];break;case 39:case 40:this.$=W[pe-2].concat([W[pe]]);break;case 41:this.$=W[pe-2],ne.setClass(W[pe-1],W[pe]);break;case 42:this.$=W[pe-3],ne.addCssStyles(W[pe-2],W[pe-1]);break;case 43:this.$=[W[pe]];break;case 44:W[pe-2].push(W[pe]),this.$=W[pe-2];break;case 46:this.$=W[pe-1]+W[pe];break;case 54:case 76:case 77:this.$=W[pe].replace(/"/g,"");break;case 55:case 78:this.$=W[pe];break;case 57:W[pe].push(W[pe-1]),this.$=W[pe];break;case 58:this.$={type:W[pe-1],name:W[pe]};break;case 59:this.$={type:W[pe-2],name:W[pe-1],keys:W[pe]};break;case 60:this.$={type:W[pe-2],name:W[pe-1],comment:W[pe]};break;case 61:this.$={type:W[pe-3],name:W[pe-2],keys:W[pe-1],comment:W[pe]};break;case 62:case 63:case 66:this.$=W[pe];break;case 65:W[pe-2].push(W[pe]),this.$=W[pe-2];break;case 67:this.$=W[pe].replace(/"/g,"");break;case 68:this.$={cardA:W[pe],relType:W[pe-1],cardB:W[pe-2]};break;case 69:this.$=ne.Cardinality.ZERO_OR_ONE;break;case 70:this.$=ne.Cardinality.ZERO_OR_MORE;break;case 71:this.$=ne.Cardinality.ONE_OR_MORE;break;case 72:this.$=ne.Cardinality.ONLY_ONE;break;case 73:this.$=ne.Cardinality.MD_PARENT;break;case 74:this.$=ne.Identification.NON_IDENTIFYING;break;case 75:this.$=ne.Identification.IDENTIFYING;break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,22:r,24:n,26:i,28:a,29:14,30:15,31:16,32:17,33:s,34:l,35:u,36:h,37:f,40:d,43:p,44:m,50:g},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:27,11:9,22:r,24:n,26:i,28:a,29:14,30:15,31:16,32:17,33:s,34:l,35:u,36:h,37:f,40:d,43:p,44:m,50:g},t(e,[2,5]),t(e,[2,6]),t(e,[2,16],{12:28,61:32,15:[1,29],17:[1,30],20:[1,31],63:y,64:v,65:x,66:b,67:T}),{23:[1,38]},{25:[1,39]},{27:[1,40]},t(e,[2,27]),t(e,[2,28]),t(e,[2,29]),t(e,[2,30]),t(e,[2,31]),t(S,[2,54]),t(S,[2,55]),t(e,[2,32]),t(e,[2,33]),t(e,[2,34]),t(e,[2,35]),{16:41,40:w,41:k},{16:44,40:w,41:k},{16:45,40:w,41:k},t(e,[2,4]),{11:46,40:d,50:g},{16:47,40:w,41:k},{18:48,19:[1,49],51:50,52:51,56:C},{11:53,40:d,50:g},{62:54,68:[1,55],69:[1,56]},t(A,[2,69]),t(A,[2,70]),t(A,[2,71]),t(A,[2,72]),t(A,[2,73]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),{13:L,38:57,41:I,42:R,45:59,46:60,48:E,49:_},t(D,[2,37]),t(D,[2,38]),{16:65,40:w,41:k,42:R},{13:L,38:66,41:I,42:R,45:59,46:60,48:E,49:_},{13:[1,67],15:[1,68]},t(e,[2,17],{61:32,12:69,17:[1,70],42:R,63:y,64:v,65:x,66:b,67:T}),{19:[1,71]},t(e,[2,14]),{18:72,19:[2,56],51:50,52:51,56:C},{53:73,56:[1,74]},{56:[2,62]},{21:[1,75]},{61:76,63:y,64:v,65:x,66:b,67:T},t(O,[2,74]),t(O,[2,75]),{6:N,10:P,39:77,42:B,47:F},{40:[1,82],41:[1,83]},t(V,[2,43],{46:84,13:L,41:I,48:E,49:_}),t($,[2,45]),t($,[2,50]),t($,[2,51]),t($,[2,52]),t($,[2,53]),t(e,[2,41],{42:R}),{6:N,10:P,39:85,42:B,47:F},{14:86,40:U,50:j,70:ee},{16:90,40:w,41:k},{11:91,40:d,50:g},{18:92,19:[1,93],51:50,52:51,56:C},t(e,[2,12]),{19:[2,57]},t(q,[2,58],{54:94,55:95,57:96,59:oe,60:Q}),t([19,56,59,60],[2,63]),t(e,[2,22],{15:[1,100],17:[1,99]}),t([40,50],[2,68]),t(e,[2,36]),{13:L,41:I,45:101,46:60,48:E,49:_},t(e,[2,47]),t(e,[2,48]),t(e,[2,49]),t(D,[2,39]),t(D,[2,40]),t($,[2,46]),t(e,[2,42]),t(e,[2,8]),t(e,[2,76]),t(e,[2,77]),t(e,[2,78]),{13:[1,102],42:R},{13:[1,104],15:[1,103]},{19:[1,105]},t(e,[2,15]),t(q,[2,59],{55:106,58:[1,107],60:Q}),t(q,[2,60]),t(ue,[2,64]),t(q,[2,67]),t(ue,[2,66]),{18:108,19:[1,109],51:50,52:51,56:C},{16:110,40:w,41:k},t(V,[2,44],{46:84,13:L,41:I,48:E,49:_}),{14:111,40:U,50:j,70:ee},{16:112,40:w,41:k},{14:113,40:U,50:j,70:ee},t(e,[2,13]),t(q,[2,61]),{57:114,59:oe},{19:[1,115]},t(e,[2,20]),t(e,[2,23],{17:[1,116],42:R}),t(e,[2,11]),{13:[1,117],42:R},t(e,[2,10]),t(ue,[2,65]),t(e,[2,18]),{18:118,19:[1,119],51:50,52:51,56:C},{14:120,40:U,50:j,70:ee},{19:[1,121]},t(e,[2,21]),t(e,[2,9]),t(e,[2,19])],defaultActions:{52:[2,62],72:[2,57]},parseError:o(function(ae,Z){if(Z.recoverable)this.trace(ae);else{var de=new Error(ae);throw de.hash=Z,de}},"parseError"),parse:o(function(ae){var Z=this,de=[0],ne=[],Te=[null],W=[],Ve=this.table,pe="",Be=0,Ye=0,He=0,Le=2,Ie=1,Ne=W.slice.call(arguments,1),Ce=Object.create(this.lexer),Fe={yy:{}};for(var fe in this.yy)Object.prototype.hasOwnProperty.call(this.yy,fe)&&(Fe.yy[fe]=this.yy[fe]);Ce.setInput(ae,Fe.yy),Fe.yy.lexer=Ce,Fe.yy.parser=this,typeof Ce.yylloc>"u"&&(Ce.yylloc={});var xe=Ce.yylloc;W.push(xe);var Y=Ce.options&&Ce.options.ranges;typeof Fe.yy.parseError=="function"?this.parseError=Fe.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function he(et){de.length=de.length-2*et,Te.length=Te.length-et,W.length=W.length-et}o(he,"popStack");function z(){var et;return et=ne.pop()||Ce.lex()||Ie,typeof et!="number"&&(et instanceof Array&&(ne=et,et=ne.pop()),et=Z.symbols_[et]||et),et}o(z,"lex");for(var se,le,ke,ve,ye,Re,_e={},ze,Ke,xt,We;;){if(ke=de[de.length-1],this.defaultActions[ke]?ve=this.defaultActions[ke]:((se===null||typeof se>"u")&&(se=z()),ve=Ve[ke]&&Ve[ke][se]),typeof ve>"u"||!ve.length||!ve[0]){var Oe="";We=[];for(ze in Ve[ke])this.terminals_[ze]&&ze>Le&&We.push("'"+this.terminals_[ze]+"'");Ce.showPosition?Oe="Parse error on line "+(Be+1)+`: +`+Ce.showPosition()+` +Expecting `+We.join(", ")+", got '"+(this.terminals_[se]||se)+"'":Oe="Parse error on line "+(Be+1)+": Unexpected "+(se==Ie?"end of input":"'"+(this.terminals_[se]||se)+"'"),this.parseError(Oe,{text:Ce.match,token:this.terminals_[se]||se,line:Ce.yylineno,loc:xe,expected:We})}if(ve[0]instanceof Array&&ve.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ke+", token: "+se);switch(ve[0]){case 1:de.push(se),Te.push(Ce.yytext),W.push(Ce.yylloc),de.push(ve[1]),se=null,le?(se=le,le=null):(Ye=Ce.yyleng,pe=Ce.yytext,Be=Ce.yylineno,xe=Ce.yylloc,He>0&&He--);break;case 2:if(Ke=this.productions_[ve[1]][1],_e.$=Te[Te.length-Ke],_e._$={first_line:W[W.length-(Ke||1)].first_line,last_line:W[W.length-1].last_line,first_column:W[W.length-(Ke||1)].first_column,last_column:W[W.length-1].last_column},Y&&(_e._$.range=[W[W.length-(Ke||1)].range[0],W[W.length-1].range[1]]),Re=this.performAction.apply(_e,[pe,Ye,Be,Fe.yy,ve[1],Te,W].concat(Ne)),typeof Re<"u")return Re;Ke&&(de=de.slice(0,-1*Ke*2),Te=Te.slice(0,-1*Ke),W=W.slice(0,-1*Ke)),de.push(this.productions_[ve[1]][0]),Te.push(_e.$),W.push(_e._$),xt=Ve[de[de.length-2]][de[de.length-1]],de.push(xt);break;case 3:return!0}}return!0},"parse")},re=(function(){var K={EOF:1,parseError:o(function(Z,de){if(this.yy.parser)this.yy.parser.parseError(Z,de);else throw new Error(Z)},"parseError"),setInput:o(function(ae,Z){return this.yy=Z||this.yy||{},this._input=ae,this._more=this._backtrack=this.done=!1,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},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var ae=this._input[0];this.yytext+=ae,this.yyleng++,this.offset++,this.match+=ae,this.matched+=ae;var Z=ae.match(/(?:\r\n?|\n).*/g);return Z?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ae},"input"),unput:o(function(ae){var Z=ae.length,de=ae.split(/(?:\r\n?|\n)/g);this._input=ae+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Z),this.offset-=Z;var ne=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),de.length-1&&(this.yylineno-=de.length-1);var Te=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:de?(de.length===ne.length?this.yylloc.first_column:0)+ne[ne.length-de.length].length-de[0].length:this.yylloc.first_column-Z},this.options.ranges&&(this.yylloc.range=[Te[0],Te[0]+this.yyleng-Z]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(ae){this.unput(this.match.slice(ae))},"less"),pastInput:o(function(){var ae=this.matched.substr(0,this.matched.length-this.match.length);return(ae.length>20?"...":"")+ae.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var ae=this.match;return ae.length<20&&(ae+=this._input.substr(0,20-ae.length)),(ae.substr(0,20)+(ae.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var ae=this.pastInput(),Z=new Array(ae.length+1).join("-");return ae+this.upcomingInput()+` +`+Z+"^"},"showPosition"),test_match:o(function(ae,Z){var de,ne,Te;if(this.options.backtrack_lexer&&(Te={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},this.options.ranges&&(Te.yylloc.range=this.yylloc.range.slice(0))),ne=ae[0].match(/(?:\r\n?|\n).*/g),ne&&(this.yylineno+=ne.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ne?ne[ne.length-1].length-ne[ne.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ae[0].length},this.yytext+=ae[0],this.match+=ae[0],this.matches=ae,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(ae[0].length),this.matched+=ae[0],de=this.performAction.call(this,this.yy,this,Z,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),de)return de;if(this._backtrack){for(var W in Te)this[W]=Te[W];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ae,Z,de,ne;this._more||(this.yytext="",this.match="");for(var Te=this._currentRules(),W=0;WZ[0].length)){if(Z=de,ne=W,this.options.backtrack_lexer){if(ae=this.test_match(de,Te[W]),ae!==!1)return ae;if(this._backtrack){Z=!1;continue}else return!1}else if(!this.options.flex)break}return Z?(ae=this.test_match(Z,Te[ne]),ae!==!1?ae:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Z=this.next();return Z||this.lex()},"lex"),begin:o(function(Z){this.conditionStack.push(Z)},"begin"),popState:o(function(){var Z=this.conditionStack.length-1;return Z>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Z){return Z=this.conditionStack.length-1-Math.abs(Z||0),Z>=0?this.conditionStack[Z]:"INITIAL"},"topState"),pushState:o(function(Z){this.begin(Z)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(Z,de,ne,Te){var W=Te;switch(ne){case 0:return this.begin("acc_title"),24;break;case 1:return this.popState(),"acc_title_value";break;case 2:return this.begin("acc_descr"),26;break;case 3:return this.popState(),"acc_descr_value";break;case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 33;case 8:return 34;case 9:return 35;case 10:return 36;case 11:return 10;case 12:break;case 13:return 8;case 14:return 50;case 15:return 70;case 16:return 4;case 17:return this.begin("block"),17;break;case 18:return 49;case 19:return 49;case 20:return 42;case 21:return 15;case 22:return 13;case 23:break;case 24:return 59;case 25:return 56;case 26:return 56;case 27:return 60;case 28:break;case 29:return this.popState(),19;break;case 30:return de.yytext[0];case 31:return 20;case 32:return 21;case 33:return this.begin("style"),44;break;case 34:return this.popState(),10;break;case 35:break;case 36:return 13;case 37:return 42;case 38:return 49;case 39:return this.begin("style"),37;break;case 40:return 43;case 41:return 63;case 42:return 65;case 43:return 65;case 44:return 65;case 45:return 63;case 46:return 63;case 47:return 64;case 48:return 64;case 49:return 64;case 50:return 64;case 51:return 64;case 52:return 65;case 53:return 64;case 54:return 65;case 55:return 66;case 56:return 66;case 57:return 66;case 58:return 66;case 59:return 63;case 60:return 64;case 61:return 65;case 62:return 67;case 63:return 68;case 64:return 69;case 65:return 69;case 66:return 68;case 67:return 68;case 68:return 68;case 69:return 41;case 70:return 47;case 71:return 40;case 72:return 48;case 73:return de.yytext[0];case 74:return 6}},"anonymous"),rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:#)/i,/^(?:#)/i,/^(?:,)/i,/^(?::::)/i,/^(?::)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:([^\s]*)[~].*[~]([^\s]*))/i,/^(?:([\*A-Za-z_\u00C0-\uFFFF][A-Za-z0-9\-\_\[\]\(\)\u00C0-\uFFFF\*]*))/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:style\b)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?::)/i,/^(?:,)/i,/^(?:#)/i,/^(?:classDef\b)/i,/^(?:class\b)/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:([^\x00-\x7F]|\w|-|\*)+)/i,/^(?:;)/i,/^(?:([^\x00-\x7F]|\w|-|\*)+)/i,/^(?:[0-9])/i,/^(?:.)/i,/^(?:$)/i],conditions:{style:{rules:[34,35,36,37,38,69,70],inclusive:!1},acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[23,24,25,26,27,28,29,30],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,31,32,33,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,71,72,73,74],inclusive:!0}}};return K})();te.lexer=re;function J(){this.yy={}}return o(J,"Parser"),J.prototype=te,te.Parser=J,new J})();UI.parser=UI;Efe=UI});var DE,Cfe=M(()=>{"use strict";pt();Xt();ci();tr();DE=class{constructor(){this.entities=new Map;this.relationships=[];this.classes=new Map;this.direction="TB";this.Cardinality={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"};this.Identification={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"};this.setAccTitle=Rr;this.getAccTitle=Mr;this.setAccDescription=Ir;this.getAccDescription=Or;this.setDiagramTitle=$r;this.getDiagramTitle=Pr;this.getConfig=o(()=>ge().er,"getConfig");this.clear(),this.addEntity=this.addEntity.bind(this),this.addAttributes=this.addAttributes.bind(this),this.addRelationship=this.addRelationship.bind(this),this.setDirection=this.setDirection.bind(this),this.addCssStyles=this.addCssStyles.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.setAccTitle=this.setAccTitle.bind(this),this.setAccDescription=this.setAccDescription.bind(this)}static{o(this,"ErDB")}addEntity(e,r=""){return this.entities.has(e)?!this.entities.get(e)?.alias&&r&&(this.entities.get(e).alias=r,X.info(`Add alias '${r}' to entity '${e}'`)):(this.entities.set(e,{id:`entity-${e}-${this.entities.size}`,label:e,attributes:[],alias:r,shape:"erBox",look:ge().look??"default",cssClasses:"default",cssStyles:[]}),X.info("Added new entity :",e)),this.entities.get(e)}getEntity(e){return this.entities.get(e)}getEntities(){return this.entities}getClasses(){return this.classes}addAttributes(e,r){let n=this.addEntity(e),i;for(i=r.length-1;i>=0;i--)r[i].keys||(r[i].keys=[]),r[i].comment||(r[i].comment=""),n.attributes.push(r[i]),X.debug("Added attribute ",r[i].name)}addRelationship(e,r,n,i){let a=this.entities.get(e),s=this.entities.get(n);if(!a||!s)return;let l={entityA:a.id,roleA:r,entityB:s.id,relSpec:i};this.relationships.push(l),X.debug("Added new relationship :",l)}getRelationships(){return this.relationships}getDirection(){return this.direction}setDirection(e){this.direction=e}getCompiledStyles(e){let r=[];for(let n of e){let i=this.classes.get(n);i?.styles&&(r=[...r,...i.styles??[]].map(a=>a.trim())),i?.textStyles&&(r=[...r,...i.textStyles??[]].map(a=>a.trim()))}return r}addCssStyles(e,r){for(let n of e){let i=this.entities.get(n);if(!r||!i)return;for(let a of r)i.cssStyles.push(a)}}addClass(e,r){e.forEach(n=>{let i=this.classes.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.classes.set(n,i)),r&&r.forEach(function(a){if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)})})}setClass(e,r){for(let n of e){let i=this.entities.get(n);if(i)for(let a of r)i.cssClasses+=" "+a}}clear(){this.entities=new Map,this.classes=new Map,this.relationships=[],Sr()}getData(){let e=[],r=[],n=ge();for(let a of this.entities.keys()){let s=this.entities.get(a);s&&(s.cssCompiledStyles=this.getCompiledStyles(s.cssClasses.split(" ")),e.push(s))}let i=0;for(let a of this.relationships){let s={id:xc(a.entityA,a.entityB,{prefix:"id",counter:i++}),type:"normal",curve:"basis",start:a.entityA,end:a.entityB,label:a.roleA,labelpos:"c",thickness:"normal",classes:"relationshipLine",arrowTypeStart:a.relSpec.cardB.toLowerCase(),arrowTypeEnd:a.relSpec.cardA.toLowerCase(),pattern:a.relSpec.relType=="IDENTIFYING"?"solid":"dashed",look:n.look};r.push(s)}return{nodes:e,edges:r,other:{},config:n,direction:"TB"}}}});var HI={};dr(HI,{draw:()=>dWe});var dWe,Afe=M(()=>{"use strict";Xt();pt();ep();Nf();Mf();tr();yr();dWe=o(async function(t,e,r,n){X.info("REF0:"),X.info("Drawing er diagram (unified)",e);let{securityLevel:i,er:a,layout:s}=ge(),l=n.db.getData(),u=Vo(e,i);l.type=n.type,l.layoutAlgorithm=$c(s),l.config.flowchart.nodeSpacing=a?.nodeSpacing||140,l.config.flowchart.rankSpacing=a?.rankSpacing||80,l.direction=n.db.getDirection(),l.markers=["only_one","zero_or_one","one_or_more","zero_or_more"],l.diagramId=e,await Qo(l,u),l.layoutAlgorithm==="elk"&&u.select(".edges").lower();let h=u.selectAll('[id*="-background"]');Array.from(h).length>0&&h.each(function(){let d=qe(this),m=d.attr("id").replace("-background",""),g=u.select(`#${CSS.escape(m)}`);if(!g.empty()){let y=g.attr("transform");d.attr("transform",y)}});let f=8;qt.insertTitle(u,"erDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Ws(u,f,"erDiagram",a?.useMaxWidth??!0)},"draw")});var pWe,mWe,_fe,Dfe=M(()=>{"use strict";eo();pWe=o((t,e)=>{let r=ld,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return Ka(n,i,a,e)},"fade"),mWe=o(t=>` + .entityBox { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + } + + .relationshipLabelBox { + fill: ${t.tertiaryColor}; + opacity: 0.7; + background-color: ${t.tertiaryColor}; + rect { + opacity: 0.5; + } + } + + .labelBkg { + background-color: ${pWe(t.tertiaryColor,.5)}; + } + + .edgeLabel .label { + fill: ${t.nodeBorder}; + font-size: 14px; + } + + .label { + font-family: ${t.fontFamily}; + color: ${t.nodeTextColor||t.textColor}; + } + + .edge-pattern-dashed { + stroke-dasharray: 8,8; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon + { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + + .relationshipLine { + stroke: ${t.lineColor}; + stroke-width: 1; + fill: none; + } + + .marker { + fill: none !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; + } +`,"getStyles"),_fe=mWe});var Lfe={};dr(Lfe,{diagram:()=>gWe});var gWe,Rfe=M(()=>{"use strict";Sfe();Cfe();Afe();Dfe();gWe={parser:Efe,get db(){return new DE},renderer:HI,styles:_fe}});function li(t){return typeof t=="object"&&t!==null&&typeof t.$type=="string"}function wa(t){return typeof t=="object"&&t!==null&&typeof t.$refText=="string"}function qI(t){return typeof t=="object"&&t!==null&&typeof t.name=="string"&&typeof t.type=="string"&&typeof t.path=="string"}function _p(t){return typeof t=="object"&&t!==null&&li(t.container)&&wa(t.reference)&&typeof t.message=="string"}function Ol(t){return typeof t=="object"&&t!==null&&Array.isArray(t.content)}function If(t){return typeof t=="object"&&t!==null&&typeof t.tokenType=="object"}function Rx(t){return Ol(t)&&typeof t.fullText=="string"}var Ap,Pl=M(()=>{"use strict";o(li,"isAstNode");o(wa,"isReference");o(qI,"isAstNodeDescription");o(_p,"isLinkingError");Ap=class{static{o(this,"AbstractAstReflection")}constructor(){this.subtypes={},this.allSubtypes={}}isInstance(e,r){return li(e)&&this.isSubtype(e.$type,r)}isSubtype(e,r){if(e===r)return!0;let n=this.subtypes[e];n||(n=this.subtypes[e]={});let i=n[r];if(i!==void 0)return i;{let a=this.computeIsSubtype(e,r);return n[r]=a,a}}getAllSubTypes(e){let r=this.allSubtypes[e];if(r)return r;{let n=this.getAllTypes(),i=[];for(let a of n)this.isSubtype(a,e)&&i.push(a);return this.allSubtypes[e]=i,i}}};o(Ol,"isCompositeCstNode");o(If,"isLeafCstNode");o(Rx,"isRootCstNode")});function bWe(t){return typeof t=="string"?t:typeof t>"u"?"undefined":typeof t.toString=="function"?t.toString():Object.prototype.toString.call(t)}function LE(t){return!!t&&typeof t[Symbol.iterator]=="function"}function an(...t){if(t.length===1){let e=t[0];if(e instanceof po)return e;if(LE(e))return new po(()=>e[Symbol.iterator](),r=>r.next());if(typeof e.length=="number")return new po(()=>({index:0}),r=>r.index1?new po(()=>({collIndex:0,arrIndex:0}),e=>{do{if(e.iterator){let r=e.iterator.next();if(!r.done)return r;e.iterator=void 0}if(e.array){if(e.arrIndex{"use strict";po=class t{static{o(this,"StreamImpl")}constructor(e,r){this.startFn=e,this.nextFn=r}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),[Symbol.iterator]:()=>e};return e}[Symbol.iterator](){return this.iterator()}isEmpty(){return!!this.iterator().next().done}count(){let e=this.iterator(),r=0,n=e.next();for(;!n.done;)r++,n=e.next();return r}toArray(){let e=[],r=this.iterator(),n;do n=r.next(),n.value!==void 0&&e.push(n.value);while(!n.done);return e}toSet(){return new Set(this)}toMap(e,r){let n=this.map(i=>[e?e(i):i,r?r(i):i]);return new Map(n)}toString(){return this.join()}concat(e){return new t(()=>({first:this.startFn(),firstDone:!1,iterator:e[Symbol.iterator]()}),r=>{let n;if(!r.firstDone){do if(n=this.nextFn(r.first),!n.done)return n;while(!n.done);r.firstDone=!0}do if(n=r.iterator.next(),!n.done)return n;while(!n.done);return Ga})}join(e=","){let r=this.iterator(),n="",i,a=!1;do i=r.next(),i.done||(a&&(n+=e),n+=bWe(i.value)),a=!0;while(!i.done);return n}indexOf(e,r=0){let n=this.iterator(),i=0,a=n.next();for(;!a.done;){if(i>=r&&a.value===e)return i;a=n.next(),i++}return-1}every(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(!e(n.value))return!1;n=r.next()}return!0}some(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return!0;n=r.next()}return!1}forEach(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;)e(i.value,n),i=r.next(),n++}map(e){return new t(this.startFn,r=>{let{done:n,value:i}=this.nextFn(r);return n?Ga:{done:!1,value:e(i)}})}filter(e){return new t(this.startFn,r=>{let n;do if(n=this.nextFn(r),!n.done&&e(n.value))return n;while(!n.done);return Ga})}nonNullable(){return this.filter(e=>e!=null)}reduce(e,r){let n=this.iterator(),i=r,a=n.next();for(;!a.done;)i===void 0?i=a.value:i=e(i,a.value),a=n.next();return i}reduceRight(e,r){return this.recursiveReduce(this.iterator(),e,r)}recursiveReduce(e,r,n){let i=e.next();if(i.done)return n;let a=this.recursiveReduce(e,r,n);return a===void 0?i.value:r(a,i.value)}find(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(e(n.value))return n.value;n=r.next()}}findIndex(e){let r=this.iterator(),n=0,i=r.next();for(;!i.done;){if(e(i.value))return n;i=r.next(),n++}return-1}includes(e){let r=this.iterator(),n=r.next();for(;!n.done;){if(n.value===e)return!0;n=r.next()}return!1}flatMap(e){return new t(()=>({this:this.startFn()}),r=>{do{if(r.iterator){let a=r.iterator.next();if(a.done)r.iterator=void 0;else return a}let{done:n,value:i}=this.nextFn(r.this);if(!n){let a=e(i);if(LE(a))r.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}}while(r.iterator);return Ga})}flat(e){if(e===void 0&&(e=1),e<=0)return this;let r=e>1?this.flat(e-1):this;return new t(()=>({this:r.startFn()}),n=>{do{if(n.iterator){let s=n.iterator.next();if(s.done)n.iterator=void 0;else return s}let{done:i,value:a}=r.nextFn(n.this);if(!i)if(LE(a))n.iterator=a[Symbol.iterator]();else return{done:!1,value:a}}while(n.iterator);return Ga})}head(){let r=this.iterator().next();if(!r.done)return r.value}tail(e=1){return new t(()=>{let r=this.startFn();for(let n=0;n({size:0,state:this.startFn()}),r=>(r.size++,r.size>e?Ga:this.nextFn(r.state)))}distinct(e){return new t(()=>({set:new Set,internalState:this.startFn()}),r=>{let n;do if(n=this.nextFn(r.internalState),!n.done){let i=e?e(n.value):n.value;if(!r.set.has(i))return r.set.add(i),n}while(!n.done);return Ga})}exclude(e,r){let n=new Set;for(let i of e){let a=r?r(i):i;n.add(a)}return this.filter(i=>{let a=r?r(i):i;return!n.has(a)})}};o(bWe,"toString");o(LE,"isIterable");Nx=new po(()=>{},()=>Ga),Ga=Object.freeze({done:!0,value:void 0});o(an,"stream");Gc=class extends po{static{o(this,"TreeStreamImpl")}constructor(e,r,n){super(()=>({iterators:n?.includeRoot?[[e][Symbol.iterator]()]:[r(e)[Symbol.iterator]()],pruned:!1}),i=>{for(i.pruned&&(i.iterators.pop(),i.pruned=!1);i.iterators.length>0;){let s=i.iterators[i.iterators.length-1].next();if(s.done)i.iterators.pop();else return i.iterators.push(r(s.value)[Symbol.iterator]()),s}return Ga})}iterator(){let e={state:this.startFn(),next:o(()=>this.nextFn(e.state),"next"),prune:o(()=>{e.state.pruned=!0},"prune"),[Symbol.iterator]:()=>e};return e}};(function(t){function e(a){return a.reduce((s,l)=>s+l,0)}o(e,"sum"),t.sum=e;function r(a){return a.reduce((s,l)=>s*l,0)}o(r,"product"),t.product=r;function n(a){return a.reduce((s,l)=>Math.min(s,l))}o(n,"min"),t.min=n;function i(a){return a.reduce((s,l)=>Math.max(s,l))}o(i,"max"),t.max=i})(vg||(vg={}))});var NE={};dr(NE,{DefaultNameRegexp:()=>RE,RangeComparison:()=>Vc,compareRange:()=>Ife,findCommentNode:()=>jI,findDeclarationNodeAtOffset:()=>wWe,findLeafNodeAtOffset:()=>KI,findLeafNodeBeforeOffset:()=>Ofe,flattenCst:()=>TWe,getInteriorNodes:()=>SWe,getNextNode:()=>kWe,getPreviousNode:()=>Bfe,getStartlineNode:()=>EWe,inRange:()=>XI,isChildNode:()=>YI,isCommentNode:()=>WI,streamCst:()=>Dp,toDocumentSegment:()=>Lp,tokenToRange:()=>xg});function Dp(t){return new Gc(t,e=>Ol(e)?e.content:[],{includeRoot:!0})}function TWe(t){return Dp(t).filter(If)}function YI(t,e){for(;t.container;)if(t=t.container,t===e)return!0;return!1}function xg(t){return{start:{character:t.startColumn-1,line:t.startLine-1},end:{character:t.endColumn,line:t.endLine-1}}}function Lp(t){if(!t)return;let{offset:e,end:r,range:n}=t;return{range:n,offset:e,end:r,length:r-e}}function Ife(t,e){if(t.end.linee.end.line||t.start.line===e.end.line&&t.start.character>=e.end.character)return Vc.After;let r=t.start.line>e.start.line||t.start.line===e.start.line&&t.start.character>=e.start.character,n=t.end.lineVc.After}function wWe(t,e,r=RE){if(t){if(e>0){let n=e-t.offset,i=t.text.charAt(n);r.test(i)||e--}return KI(t,e)}}function jI(t,e){if(t){let r=Bfe(t,!0);if(r&&WI(r,e))return r;if(Rx(t)){let n=t.content.findIndex(i=>!i.hidden);for(let i=n-1;i>=0;i--){let a=t.content[i];if(WI(a,e))return a}}}}function WI(t,e){return If(t)&&e.includes(t.tokenType.name)}function KI(t,e){if(If(t))return t;if(Ol(t)){let r=Pfe(t,e,!1);if(r)return KI(r,e)}}function Ofe(t,e){if(If(t))return t;if(Ol(t)){let r=Pfe(t,e,!0);if(r)return Ofe(r,e)}}function Pfe(t,e,r){let n=0,i=t.content.length-1,a;for(;n<=i;){let s=Math.floor((n+i)/2),l=t.content[s];if(l.offset<=e&&l.end>e)return l;l.end<=e?(a=r?l:void 0,n=s+1):i=s-1}return a}function Bfe(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t);for(;n>0;){n--;let i=r.content[n];if(e||!i.hidden)return i}t=r}}function kWe(t,e=!0){for(;t.container;){let r=t.container,n=r.content.indexOf(t),i=r.content.length-1;for(;n{"use strict";Pl();Ys();o(Dp,"streamCst");o(TWe,"flattenCst");o(YI,"isChildNode");o(xg,"tokenToRange");o(Lp,"toDocumentSegment");(function(t){t[t.Before=0]="Before",t[t.After=1]="After",t[t.OverlapFront=2]="OverlapFront",t[t.OverlapBack=3]="OverlapBack",t[t.Inside=4]="Inside",t[t.Outside=5]="Outside"})(Vc||(Vc={}));o(Ife,"compareRange");o(XI,"inRange");RE=/^[\w\p{L}]$/u;o(wWe,"findDeclarationNodeAtOffset");o(jI,"findCommentNode");o(WI,"isCommentNode");o(KI,"findLeafNodeAtOffset");o(Ofe,"findLeafNodeBeforeOffset");o(Pfe,"binarySearch");o(Bfe,"getPreviousNode");o(kWe,"getNextNode");o(EWe,"getStartlineNode");o(SWe,"getInteriorNodes");o(CWe,"getCommonParent");o(Mfe,"getParentChain")});function Uc(t){throw new Error("Error! The input value was not handled.")}var Rp,ME=M(()=>{"use strict";Rp=class extends Error{static{o(this,"ErrorWithLocation")}constructor(e,r){super(e?`${r} at ${e.range.start.line}:${e.range.start.character}`:r)}};o(Uc,"assertUnreachable")});var Gx={};dr(Gx,{AbstractElement:()=>wg,AbstractRule:()=>bg,AbstractType:()=>Tg,Action:()=>Gg,Alternatives:()=>Vg,ArrayLiteral:()=>kg,ArrayType:()=>Eg,Assignment:()=>Ug,BooleanLiteral:()=>Sg,CharacterRange:()=>Hg,Condition:()=>Mx,Conjunction:()=>Cg,CrossReference:()=>qg,Disjunction:()=>Ag,EndOfFile:()=>Wg,Grammar:()=>_g,GrammarImport:()=>Ox,Group:()=>Yg,InferredType:()=>Dg,Interface:()=>Lg,Keyword:()=>Xg,LangiumGrammarAstReflection:()=>i1,LangiumGrammarTerminals:()=>AWe,NamedArgument:()=>Px,NegatedToken:()=>jg,Negation:()=>Rg,NumberLiteral:()=>Ng,Parameter:()=>Mg,ParameterReference:()=>Ig,ParserRule:()=>Og,ReferenceType:()=>Pg,RegexToken:()=>Kg,ReturnType:()=>Bx,RuleCall:()=>Qg,SimpleType:()=>Bg,StringLiteral:()=>Fg,TerminalAlternatives:()=>Zg,TerminalGroup:()=>Jg,TerminalRule:()=>Np,TerminalRuleCall:()=>e1,Type:()=>$g,TypeAttribute:()=>Fx,TypeDefinition:()=>IE,UnionType:()=>zg,UnorderedGroup:()=>t1,UntilToken:()=>r1,ValueLiteral:()=>Ix,Wildcard:()=>n1,isAbstractElement:()=>$x,isAbstractRule:()=>_We,isAbstractType:()=>DWe,isAction:()=>qu,isAlternatives:()=>FE,isArrayLiteral:()=>IWe,isArrayType:()=>QI,isAssignment:()=>Fl,isBooleanLiteral:()=>ZI,isCharacterRange:()=>sO,isCondition:()=>LWe,isConjunction:()=>JI,isCrossReference:()=>Mp,isDisjunction:()=>eO,isEndOfFile:()=>oO,isFeatureName:()=>RWe,isGrammar:()=>OWe,isGrammarImport:()=>PWe,isGroup:()=>Of,isInferredType:()=>OE,isInterface:()=>PE,isKeyword:()=>Zo,isNamedArgument:()=>BWe,isNegatedToken:()=>lO,isNegation:()=>tO,isNumberLiteral:()=>FWe,isParameter:()=>$We,isParameterReference:()=>rO,isParserRule:()=>Va,isPrimitiveType:()=>Ffe,isReferenceType:()=>nO,isRegexToken:()=>cO,isReturnType:()=>iO,isRuleCall:()=>$l,isSimpleType:()=>BE,isStringLiteral:()=>zWe,isTerminalAlternatives:()=>uO,isTerminalGroup:()=>hO,isTerminalRule:()=>mo,isTerminalRuleCall:()=>$E,isType:()=>zx,isTypeAttribute:()=>GWe,isTypeDefinition:()=>NWe,isUnionType:()=>aO,isUnorderedGroup:()=>zE,isUntilToken:()=>fO,isValueLiteral:()=>MWe,isWildcard:()=>dO,reflection:()=>pr});function _We(t){return pr.isInstance(t,bg)}function DWe(t){return pr.isInstance(t,Tg)}function LWe(t){return pr.isInstance(t,Mx)}function RWe(t){return Ffe(t)||t==="current"||t==="entry"||t==="extends"||t==="false"||t==="fragment"||t==="grammar"||t==="hidden"||t==="import"||t==="interface"||t==="returns"||t==="terminal"||t==="true"||t==="type"||t==="infer"||t==="infers"||t==="with"||typeof t=="string"&&/\^?[_a-zA-Z][\w_]*/.test(t)}function Ffe(t){return t==="string"||t==="number"||t==="boolean"||t==="Date"||t==="bigint"}function NWe(t){return pr.isInstance(t,IE)}function MWe(t){return pr.isInstance(t,Ix)}function $x(t){return pr.isInstance(t,wg)}function IWe(t){return pr.isInstance(t,kg)}function QI(t){return pr.isInstance(t,Eg)}function ZI(t){return pr.isInstance(t,Sg)}function JI(t){return pr.isInstance(t,Cg)}function eO(t){return pr.isInstance(t,Ag)}function OWe(t){return pr.isInstance(t,_g)}function PWe(t){return pr.isInstance(t,Ox)}function OE(t){return pr.isInstance(t,Dg)}function PE(t){return pr.isInstance(t,Lg)}function BWe(t){return pr.isInstance(t,Px)}function tO(t){return pr.isInstance(t,Rg)}function FWe(t){return pr.isInstance(t,Ng)}function $We(t){return pr.isInstance(t,Mg)}function rO(t){return pr.isInstance(t,Ig)}function Va(t){return pr.isInstance(t,Og)}function nO(t){return pr.isInstance(t,Pg)}function iO(t){return pr.isInstance(t,Bx)}function BE(t){return pr.isInstance(t,Bg)}function zWe(t){return pr.isInstance(t,Fg)}function mo(t){return pr.isInstance(t,Np)}function zx(t){return pr.isInstance(t,$g)}function GWe(t){return pr.isInstance(t,Fx)}function aO(t){return pr.isInstance(t,zg)}function qu(t){return pr.isInstance(t,Gg)}function FE(t){return pr.isInstance(t,Vg)}function Fl(t){return pr.isInstance(t,Ug)}function sO(t){return pr.isInstance(t,Hg)}function Mp(t){return pr.isInstance(t,qg)}function oO(t){return pr.isInstance(t,Wg)}function Of(t){return pr.isInstance(t,Yg)}function Zo(t){return pr.isInstance(t,Xg)}function lO(t){return pr.isInstance(t,jg)}function cO(t){return pr.isInstance(t,Kg)}function $l(t){return pr.isInstance(t,Qg)}function uO(t){return pr.isInstance(t,Zg)}function hO(t){return pr.isInstance(t,Jg)}function $E(t){return pr.isInstance(t,e1)}function zE(t){return pr.isInstance(t,t1)}function fO(t){return pr.isInstance(t,r1)}function dO(t){return pr.isInstance(t,n1)}var AWe,bg,Tg,Mx,IE,Ix,wg,kg,Eg,Sg,Cg,Ag,_g,Ox,Dg,Lg,Px,Rg,Ng,Mg,Ig,Og,Pg,Bx,Bg,Fg,Np,$g,Fx,zg,Gg,Vg,Ug,Hg,qg,Wg,Yg,Xg,jg,Kg,Qg,Zg,Jg,e1,t1,r1,n1,i1,pr,Hc=M(()=>{"use strict";Pl();AWe={ID:/\^?[_a-zA-Z][\w_]*/,STRING:/"(\\.|[^"\\])*"|'(\\.|[^'\\])*'/,NUMBER:/NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity)/,RegexLiteral:/\/(?![*+?])(?:[^\r\n\[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+\/[a-z]*/,WS:/\s+/,ML_COMMENT:/\/\*[\s\S]*?\*\//,SL_COMMENT:/\/\/[^\n\r]*/},bg="AbstractRule";o(_We,"isAbstractRule");Tg="AbstractType";o(DWe,"isAbstractType");Mx="Condition";o(LWe,"isCondition");o(RWe,"isFeatureName");o(Ffe,"isPrimitiveType");IE="TypeDefinition";o(NWe,"isTypeDefinition");Ix="ValueLiteral";o(MWe,"isValueLiteral");wg="AbstractElement";o($x,"isAbstractElement");kg="ArrayLiteral";o(IWe,"isArrayLiteral");Eg="ArrayType";o(QI,"isArrayType");Sg="BooleanLiteral";o(ZI,"isBooleanLiteral");Cg="Conjunction";o(JI,"isConjunction");Ag="Disjunction";o(eO,"isDisjunction");_g="Grammar";o(OWe,"isGrammar");Ox="GrammarImport";o(PWe,"isGrammarImport");Dg="InferredType";o(OE,"isInferredType");Lg="Interface";o(PE,"isInterface");Px="NamedArgument";o(BWe,"isNamedArgument");Rg="Negation";o(tO,"isNegation");Ng="NumberLiteral";o(FWe,"isNumberLiteral");Mg="Parameter";o($We,"isParameter");Ig="ParameterReference";o(rO,"isParameterReference");Og="ParserRule";o(Va,"isParserRule");Pg="ReferenceType";o(nO,"isReferenceType");Bx="ReturnType";o(iO,"isReturnType");Bg="SimpleType";o(BE,"isSimpleType");Fg="StringLiteral";o(zWe,"isStringLiteral");Np="TerminalRule";o(mo,"isTerminalRule");$g="Type";o(zx,"isType");Fx="TypeAttribute";o(GWe,"isTypeAttribute");zg="UnionType";o(aO,"isUnionType");Gg="Action";o(qu,"isAction");Vg="Alternatives";o(FE,"isAlternatives");Ug="Assignment";o(Fl,"isAssignment");Hg="CharacterRange";o(sO,"isCharacterRange");qg="CrossReference";o(Mp,"isCrossReference");Wg="EndOfFile";o(oO,"isEndOfFile");Yg="Group";o(Of,"isGroup");Xg="Keyword";o(Zo,"isKeyword");jg="NegatedToken";o(lO,"isNegatedToken");Kg="RegexToken";o(cO,"isRegexToken");Qg="RuleCall";o($l,"isRuleCall");Zg="TerminalAlternatives";o(uO,"isTerminalAlternatives");Jg="TerminalGroup";o(hO,"isTerminalGroup");e1="TerminalRuleCall";o($E,"isTerminalRuleCall");t1="UnorderedGroup";o(zE,"isUnorderedGroup");r1="UntilToken";o(fO,"isUntilToken");n1="Wildcard";o(dO,"isWildcard");i1=class extends Ap{static{o(this,"LangiumGrammarAstReflection")}getAllTypes(){return[wg,bg,Tg,Gg,Vg,kg,Eg,Ug,Sg,Hg,Mx,Cg,qg,Ag,Wg,_g,Ox,Yg,Dg,Lg,Xg,Px,jg,Rg,Ng,Mg,Ig,Og,Pg,Kg,Bx,Qg,Bg,Fg,Zg,Jg,Np,e1,$g,Fx,IE,zg,t1,r1,Ix,n1]}computeIsSubtype(e,r){switch(e){case Gg:case Vg:case Ug:case Hg:case qg:case Wg:case Yg:case Xg:case jg:case Kg:case Qg:case Zg:case Jg:case e1:case t1:case r1:case n1:return this.isSubtype(wg,r);case kg:case Ng:case Fg:return this.isSubtype(Ix,r);case Eg:case Pg:case Bg:case zg:return this.isSubtype(IE,r);case Sg:return this.isSubtype(Mx,r)||this.isSubtype(Ix,r);case Cg:case Ag:case Rg:case Ig:return this.isSubtype(Mx,r);case Dg:case Lg:case $g:return this.isSubtype(Tg,r);case Og:return this.isSubtype(bg,r)||this.isSubtype(Tg,r);case Np:return this.isSubtype(bg,r);default:return!1}}getReferenceType(e){let r=`${e.container.$type}:${e.property}`;switch(r){case"Action:type":case"CrossReference:type":case"Interface:superTypes":case"ParserRule:returnType":case"SimpleType:typeRef":return Tg;case"Grammar:hiddenTokens":case"ParserRule:hiddenTokens":case"RuleCall:rule":return bg;case"Grammar:usedGrammars":return _g;case"NamedArgument:parameter":case"ParameterReference:parameter":return Mg;case"TerminalRuleCall:rule":return Np;default:throw new Error(`${r} is not a valid reference id.`)}}getTypeMetaData(e){switch(e){case wg:return{name:wg,properties:[{name:"cardinality"},{name:"lookahead"}]};case kg:return{name:kg,properties:[{name:"elements",defaultValue:[]}]};case Eg:return{name:Eg,properties:[{name:"elementType"}]};case Sg:return{name:Sg,properties:[{name:"true",defaultValue:!1}]};case Cg:return{name:Cg,properties:[{name:"left"},{name:"right"}]};case Ag:return{name:Ag,properties:[{name:"left"},{name:"right"}]};case _g:return{name:_g,properties:[{name:"definesHiddenTokens",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"imports",defaultValue:[]},{name:"interfaces",defaultValue:[]},{name:"isDeclared",defaultValue:!1},{name:"name"},{name:"rules",defaultValue:[]},{name:"types",defaultValue:[]},{name:"usedGrammars",defaultValue:[]}]};case Ox:return{name:Ox,properties:[{name:"path"}]};case Dg:return{name:Dg,properties:[{name:"name"}]};case Lg:return{name:Lg,properties:[{name:"attributes",defaultValue:[]},{name:"name"},{name:"superTypes",defaultValue:[]}]};case Px:return{name:Px,properties:[{name:"calledByName",defaultValue:!1},{name:"parameter"},{name:"value"}]};case Rg:return{name:Rg,properties:[{name:"value"}]};case Ng:return{name:Ng,properties:[{name:"value"}]};case Mg:return{name:Mg,properties:[{name:"name"}]};case Ig:return{name:Ig,properties:[{name:"parameter"}]};case Og:return{name:Og,properties:[{name:"dataType"},{name:"definesHiddenTokens",defaultValue:!1},{name:"definition"},{name:"entry",defaultValue:!1},{name:"fragment",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"inferredType"},{name:"name"},{name:"parameters",defaultValue:[]},{name:"returnType"},{name:"wildcard",defaultValue:!1}]};case Pg:return{name:Pg,properties:[{name:"referenceType"}]};case Bx:return{name:Bx,properties:[{name:"name"}]};case Bg:return{name:Bg,properties:[{name:"primitiveType"},{name:"stringType"},{name:"typeRef"}]};case Fg:return{name:Fg,properties:[{name:"value"}]};case Np:return{name:Np,properties:[{name:"definition"},{name:"fragment",defaultValue:!1},{name:"hidden",defaultValue:!1},{name:"name"},{name:"type"}]};case $g:return{name:$g,properties:[{name:"name"},{name:"type"}]};case Fx:return{name:Fx,properties:[{name:"defaultValue"},{name:"isOptional",defaultValue:!1},{name:"name"},{name:"type"}]};case zg:return{name:zg,properties:[{name:"types",defaultValue:[]}]};case Gg:return{name:Gg,properties:[{name:"cardinality"},{name:"feature"},{name:"inferredType"},{name:"lookahead"},{name:"operator"},{name:"type"}]};case Vg:return{name:Vg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case Ug:return{name:Ug,properties:[{name:"cardinality"},{name:"feature"},{name:"lookahead"},{name:"operator"},{name:"terminal"}]};case Hg:return{name:Hg,properties:[{name:"cardinality"},{name:"left"},{name:"lookahead"},{name:"right"}]};case qg:return{name:qg,properties:[{name:"cardinality"},{name:"deprecatedSyntax",defaultValue:!1},{name:"lookahead"},{name:"terminal"},{name:"type"}]};case Wg:return{name:Wg,properties:[{name:"cardinality"},{name:"lookahead"}]};case Yg:return{name:Yg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"guardCondition"},{name:"lookahead"}]};case Xg:return{name:Xg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"value"}]};case jg:return{name:jg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case Kg:return{name:Kg,properties:[{name:"cardinality"},{name:"lookahead"},{name:"regex"}]};case Qg:return{name:Qg,properties:[{name:"arguments",defaultValue:[]},{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case Zg:return{name:Zg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case Jg:return{name:Jg,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case e1:return{name:e1,properties:[{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case t1:return{name:t1,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case r1:return{name:r1,properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case n1:return{name:n1,properties:[{name:"cardinality"},{name:"lookahead"}]};default:return{name:e,properties:[]}}}},pr=new i1});var VE={};dr(VE,{assignMandatoryProperties:()=>gO,copyAstNode:()=>mO,findLocalReferences:()=>UWe,findRootNode:()=>Vx,getContainerOfType:()=>Ip,getDocument:()=>Ua,hasContainerOfType:()=>VWe,linkContentToContainer:()=>GE,streamAllContents:()=>qc,streamAst:()=>Jo,streamContents:()=>Ux,streamReferences:()=>a1});function GE(t){for(let[e,r]of Object.entries(t))e.startsWith("$")||(Array.isArray(r)?r.forEach((n,i)=>{li(n)&&(n.$container=t,n.$containerProperty=e,n.$containerIndex=i)}):li(r)&&(r.$container=t,r.$containerProperty=e))}function Ip(t,e){let r=t;for(;r;){if(e(r))return r;r=r.$container}}function VWe(t,e){let r=t;for(;r;){if(e(r))return!0;r=r.$container}return!1}function Ua(t){let r=Vx(t).$document;if(!r)throw new Error("AST node has no document.");return r}function Vx(t){for(;t.$container;)t=t.$container;return t}function Ux(t,e){if(!t)throw new Error("Node must be an AstNode.");let r=e?.range;return new po(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),n=>{for(;n.keyIndexUx(r,e))}function Jo(t,e){if(t){if(e?.range&&!pO(t,e.range))return new Gc(t,()=>[])}else throw new Error("Root node must be an AstNode.");return new Gc(t,r=>Ux(r,e),{includeRoot:!0})}function pO(t,e){var r;if(!e)return!0;let n=(r=t.$cstNode)===null||r===void 0?void 0:r.range;return n?XI(n,e):!1}function a1(t){return new po(()=>({keys:Object.keys(t),keyIndex:0,arrayIndex:0}),e=>{for(;e.keyIndex{a1(n).forEach(i=>{i.reference.ref===t&&r.push(i.reference)})}),an(r)}function gO(t,e){let r=t.getTypeMetaData(e.$type),n=e;for(let i of r.properties)i.defaultValue!==void 0&&n[i.name]===void 0&&(n[i.name]=$fe(i.defaultValue))}function $fe(t){return Array.isArray(t)?[...t.map($fe)]:t}function mO(t,e){let r={$type:t.$type};for(let[n,i]of Object.entries(t))if(!n.startsWith("$"))if(li(i))r[n]=mO(i,e);else if(wa(i))r[n]=e(r,n,i.$refNode,i.$refText);else if(Array.isArray(i)){let a=[];for(let s of i)li(s)?a.push(mO(s,e)):wa(s)?a.push(e(r,n,s.$refNode,s.$refText)):a.push(s);r[n]=a}else r[n]=i;return GE(r),r}var hs=M(()=>{"use strict";Pl();Ys();Bl();o(GE,"linkContentToContainer");o(Ip,"getContainerOfType");o(VWe,"hasContainerOfType");o(Ua,"getDocument");o(Vx,"findRootNode");o(Ux,"streamContents");o(qc,"streamAllContents");o(Jo,"streamAst");o(pO,"isAstNodeInRange");o(a1,"streamReferences");o(UWe,"findLocalReferences");o(gO,"assignMandatoryProperties");o($fe,"copyDefaultValue");o(mO,"copyAstNode")});function lr(t){return t.charCodeAt(0)}function UE(t,e){Array.isArray(t)?t.forEach(function(r){e.push(r)}):e.push(t)}function s1(t,e){if(t[e]===!0)throw"duplicate flag "+e;let r=t[e];t[e]=!0}function Op(t){if(t===void 0)throw Error("Internal Error - Should never get here!");return!0}function Hx(){throw Error("Internal Error - Should never get here!")}function yO(t){return t.type==="Character"}var vO=M(()=>{"use strict";o(lr,"cc");o(UE,"insertToSet");o(s1,"addFlag");o(Op,"ASSERT_EXISTS");o(Hx,"ASSERT_NEVER_REACH_HERE");o(yO,"isCharacter")});var qx,Wx,xO,zfe=M(()=>{"use strict";vO();qx=[];for(let t=lr("0");t<=lr("9");t++)qx.push(t);Wx=[lr("_")].concat(qx);for(let t=lr("a");t<=lr("z");t++)Wx.push(t);for(let t=lr("A");t<=lr("Z");t++)Wx.push(t);xO=[lr(" "),lr("\f"),lr(` +`),lr("\r"),lr(" "),lr("\v"),lr(" "),lr("\xA0"),lr("\u1680"),lr("\u2000"),lr("\u2001"),lr("\u2002"),lr("\u2003"),lr("\u2004"),lr("\u2005"),lr("\u2006"),lr("\u2007"),lr("\u2008"),lr("\u2009"),lr("\u200A"),lr("\u2028"),lr("\u2029"),lr("\u202F"),lr("\u205F"),lr("\u3000"),lr("\uFEFF")]});var HWe,HE,qWe,Pp,Gfe=M(()=>{"use strict";vO();zfe();HWe=/[0-9a-fA-F]/,HE=/[0-9]/,qWe=/[1-9]/,Pp=class{static{o(this,"RegExpParser")}constructor(){this.idx=0,this.input="",this.groupIdx=0}saveState(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}}restoreState(e){this.idx=e.idx,this.input=e.input,this.groupIdx=e.groupIdx}pattern(e){this.idx=0,this.input=e,this.groupIdx=0,this.consumeChar("/");let r=this.disjunction();this.consumeChar("/");let n={type:"Flags",loc:{begin:this.idx,end:e.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};for(;this.isRegExpFlag();)switch(this.popChar()){case"g":s1(n,"global");break;case"i":s1(n,"ignoreCase");break;case"m":s1(n,"multiLine");break;case"u":s1(n,"unicode");break;case"y":s1(n,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:n,value:r,loc:this.loc(0)}}disjunction(){let e=[],r=this.idx;for(e.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),e.push(this.alternative());return{type:"Disjunction",value:e,loc:this.loc(r)}}alternative(){let e=[],r=this.idx;for(;this.isTerm();)e.push(this.term());return{type:"Alternative",value:e,loc:this.loc(r)}}term(){return this.isAssertion()?this.assertion():this.atom()}assertion(){let e=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(e)};case"$":return{type:"EndAnchor",loc:this.loc(e)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(e)};case"B":return{type:"NonWordBoundary",loc:this.loc(e)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");let r;switch(this.popChar()){case"=":r="Lookahead";break;case"!":r="NegativeLookahead";break}Op(r);let n=this.disjunction();return this.consumeChar(")"),{type:r,value:n,loc:this.loc(e)}}return Hx()}quantifier(e=!1){let r,n=this.idx;switch(this.popChar()){case"*":r={atLeast:0,atMost:1/0};break;case"+":r={atLeast:1,atMost:1/0};break;case"?":r={atLeast:0,atMost:1};break;case"{":let i=this.integerIncludingZero();switch(this.popChar()){case"}":r={atLeast:i,atMost:i};break;case",":let a;this.isDigit()?(a=this.integerIncludingZero(),r={atLeast:i,atMost:a}):r={atLeast:i,atMost:1/0},this.consumeChar("}");break}if(e===!0&&r===void 0)return;Op(r);break}if(!(e===!0&&r===void 0)&&Op(r))return this.peekChar(0)==="?"?(this.consumeChar("?"),r.greedy=!1):r.greedy=!0,r.type="Quantifier",r.loc=this.loc(n),r}atom(){let e,r=this.idx;switch(this.peekChar()){case".":e=this.dotAll();break;case"\\":e=this.atomEscape();break;case"[":e=this.characterClass();break;case"(":e=this.group();break}return e===void 0&&this.isPatternCharacter()&&(e=this.patternCharacter()),Op(e)?(e.loc=this.loc(r),this.isQuantifier()&&(e.quantifier=this.quantifier()),e):Hx()}dotAll(){return this.consumeChar("."),{type:"Set",complement:!0,value:[lr(` +`),lr("\r"),lr("\u2028"),lr("\u2029")]}}atomEscape(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}}decimalEscapeAtom(){return{type:"GroupBackReference",value:this.positiveInteger()}}characterClassEscape(){let e,r=!1;switch(this.popChar()){case"d":e=qx;break;case"D":e=qx,r=!0;break;case"s":e=xO;break;case"S":e=xO,r=!0;break;case"w":e=Wx;break;case"W":e=Wx,r=!0;break}return Op(e)?{type:"Set",value:e,complement:r}:Hx()}controlEscapeAtom(){let e;switch(this.popChar()){case"f":e=lr("\f");break;case"n":e=lr(` +`);break;case"r":e=lr("\r");break;case"t":e=lr(" ");break;case"v":e=lr("\v");break}return Op(e)?{type:"Character",value:e}:Hx()}controlLetterEscapeAtom(){this.consumeChar("c");let e=this.popChar();if(/[a-zA-Z]/.test(e)===!1)throw Error("Invalid ");return{type:"Character",value:e.toUpperCase().charCodeAt(0)-64}}nulCharacterAtom(){return this.consumeChar("0"),{type:"Character",value:lr("\0")}}hexEscapeSequenceAtom(){return this.consumeChar("x"),this.parseHexDigits(2)}regExpUnicodeEscapeSequenceAtom(){return this.consumeChar("u"),this.parseHexDigits(4)}identityEscapeAtom(){let e=this.popChar();return{type:"Character",value:lr(e)}}classPatternCharacterAtom(){switch(this.peekChar()){case` +`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:let e=this.popChar();return{type:"Character",value:lr(e)}}}characterClass(){let e=[],r=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),r=!0);this.isClassAtom();){let n=this.classAtom(),i=n.type==="Character";if(yO(n)&&this.isRangeDash()){this.consumeChar("-");let a=this.classAtom(),s=a.type==="Character";if(yO(a)){if(a.value=this.input.length)throw Error("Unexpected end of input");this.idx++}loc(e){return{begin:e,end:this.idx}}}});var Wc,Vfe=M(()=>{"use strict";Wc=class{static{o(this,"BaseRegExpVisitor")}visitChildren(e){for(let r in e){let n=e[r];e.hasOwnProperty(r)&&(n.type!==void 0?this.visit(n):Array.isArray(n)&&n.forEach(i=>{this.visit(i)},this))}}visit(e){switch(e.type){case"Pattern":this.visitPattern(e);break;case"Flags":this.visitFlags(e);break;case"Disjunction":this.visitDisjunction(e);break;case"Alternative":this.visitAlternative(e);break;case"StartAnchor":this.visitStartAnchor(e);break;case"EndAnchor":this.visitEndAnchor(e);break;case"WordBoundary":this.visitWordBoundary(e);break;case"NonWordBoundary":this.visitNonWordBoundary(e);break;case"Lookahead":this.visitLookahead(e);break;case"NegativeLookahead":this.visitNegativeLookahead(e);break;case"Character":this.visitCharacter(e);break;case"Set":this.visitSet(e);break;case"Group":this.visitGroup(e);break;case"GroupBackReference":this.visitGroupBackReference(e);break;case"Quantifier":this.visitQuantifier(e);break}this.visitChildren(e)}visitPattern(e){}visitFlags(e){}visitDisjunction(e){}visitAlternative(e){}visitStartAnchor(e){}visitEndAnchor(e){}visitWordBoundary(e){}visitNonWordBoundary(e){}visitLookahead(e){}visitNegativeLookahead(e){}visitCharacter(e){}visitSet(e){}visitGroup(e){}visitGroupBackReference(e){}visitQuantifier(e){}}});var Yx=M(()=>{"use strict";Gfe();Vfe()});var qE={};dr(qE,{NEWLINE_REGEXP:()=>TO,escapeRegExp:()=>Fp,getCaseInsensitivePattern:()=>kO,getTerminalParts:()=>WWe,isMultilineComment:()=>wO,isWhitespace:()=>o1,partialMatches:()=>EO,partialRegExp:()=>qfe,whitespaceCharacters:()=>Hfe});function WWe(t){try{typeof t!="string"&&(t=t.source),t=`/${t}/`;let e=Ufe.pattern(t),r=[];for(let n of e.value.value)Bp.reset(t),Bp.visit(n),r.push({start:Bp.startRegexp,end:Bp.endRegex});return r}catch{return[]}}function wO(t){try{return typeof t=="string"&&(t=new RegExp(t)),t=t.toString(),Bp.reset(t),Bp.visit(Ufe.pattern(t)),Bp.multiline}catch{return!1}}function o1(t){let e=typeof t=="string"?new RegExp(t):t;return Hfe.some(r=>e.test(r))}function Fp(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function kO(t){return Array.prototype.map.call(t,e=>/\w/.test(e)?`[${e.toLowerCase()}${e.toUpperCase()}]`:Fp(e)).join("")}function EO(t,e){let r=qfe(t),n=e.match(r);return!!n&&n[0].length>0}function qfe(t){typeof t=="string"&&(t=new RegExp(t));let e=t,r=t.source,n=0;function i(){let a="",s;function l(h){a+=r.substr(n,h),n+=h}o(l,"appendRaw");function u(h){a+="(?:"+r.substr(n,h)+"|$)",n+=h}for(o(u,"appendOptional");n",n)-n+1);break;default:u(2);break}break;case"[":s=/\[(?:\\.|.)*?\]/g,s.lastIndex=n,s=s.exec(r)||[],u(s[0].length);break;case"|":case"^":case"$":case"*":case"+":case"?":l(1);break;case"{":s=/\{\d+,?\d*\}/g,s.lastIndex=n,s=s.exec(r),s?l(s[0].length):u(1);break;case"(":if(r[n+1]==="?")switch(r[n+2]){case":":a+="(?:",n+=3,a+=i()+"|$)";break;case"=":a+="(?=",n+=3,a+=i()+")";break;case"!":s=n,n+=3,i(),a+=r.substr(s,n-s);break;case"<":switch(r[n+3]){case"=":case"!":s=n,n+=4,i(),a+=r.substr(s,n-s);break;default:l(r.indexOf(">",n)-n+1),a+=i()+"|$)";break}break}else l(1),a+=i()+"|$)";break;case")":return++n,a;default:u(1);break}return a}return o(i,"process"),new RegExp(i(),t.flags)}var TO,Ufe,bO,Bp,Hfe,l1=M(()=>{"use strict";Yx();TO=/\r?\n/gm,Ufe=new Pp,bO=class extends Wc{static{o(this,"TerminalRegExpVisitor")}constructor(){super(...arguments),this.isStarting=!0,this.endRegexpStack=[],this.multiline=!1}get endRegex(){return this.endRegexpStack.join("")}reset(e){this.multiline=!1,this.regex=e,this.startRegexp="",this.isStarting=!0,this.endRegexpStack=[]}visitGroup(e){e.quantifier&&(this.isStarting=!1,this.endRegexpStack=[])}visitCharacter(e){let r=String.fromCharCode(e.value);if(!this.multiline&&r===` +`&&(this.multiline=!0),e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let n=Fp(r);this.endRegexpStack.push(n),this.isStarting&&(this.startRegexp+=n)}}visitSet(e){if(!this.multiline){let r=this.regex.substring(e.loc.begin,e.loc.end),n=new RegExp(r);this.multiline=!!` +`.match(n)}if(e.quantifier)this.isStarting=!1,this.endRegexpStack=[];else{let r=this.regex.substring(e.loc.begin,e.loc.end);this.endRegexpStack.push(r),this.isStarting&&(this.startRegexp+=r)}}visitChildren(e){e.type==="Group"&&e.quantifier||super.visitChildren(e)}},Bp=new bO;o(WWe,"getTerminalParts");o(wO,"isMultilineComment");Hfe=`\f +\r \v \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF`.split("");o(o1,"isWhitespace");o(Fp,"escapeRegExp");o(kO,"getCaseInsensitivePattern");o(EO,"partialMatches");o(qfe,"partialRegExp")});var YE={};dr(YE,{findAssignment:()=>MO,findNameAssignment:()=>WE,findNodeForKeyword:()=>RO,findNodeForProperty:()=>jx,findNodesForKeyword:()=>YWe,findNodesForKeywordInternal:()=>NO,findNodesForProperty:()=>DO,getActionAtElement:()=>Kfe,getActionType:()=>Zfe,getAllReachableRules:()=>Xx,getCrossReferenceTerminal:()=>AO,getEntryRule:()=>Wfe,getExplicitRuleType:()=>c1,getHiddenRules:()=>Yfe,getRuleType:()=>IO,getRuleTypeName:()=>ZWe,getTypeName:()=>Qx,isArrayCardinality:()=>jWe,isArrayOperator:()=>KWe,isCommentTerminal:()=>_O,isDataType:()=>QWe,isDataTypeRule:()=>Kx,isOptionalCardinality:()=>XWe,terminalRegex:()=>u1});function Wfe(t){return t.rules.find(e=>Va(e)&&e.entry)}function Yfe(t){return t.rules.filter(e=>mo(e)&&e.hidden)}function Xx(t,e){let r=new Set,n=Wfe(t);if(!n)return new Set(t.rules);let i=[n].concat(Yfe(t));for(let s of i)Xfe(s,r,e);let a=new Set;for(let s of t.rules)(r.has(s.name)||mo(s)&&s.hidden)&&a.add(s);return a}function Xfe(t,e,r){e.add(t.name),qc(t).forEach(n=>{if($l(n)||r&&$E(n)){let i=n.rule.ref;i&&!e.has(i.name)&&Xfe(i,e,r)}})}function AO(t){if(t.terminal)return t.terminal;if(t.type.ref){let e=WE(t.type.ref);return e?.terminal}}function _O(t){return t.hidden&&!o1(u1(t))}function DO(t,e){return!t||!e?[]:LO(t,e,t.astNode,!0)}function jx(t,e,r){if(!t||!e)return;let n=LO(t,e,t.astNode,!0);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function LO(t,e,r,n){if(!n){let i=Ip(t.grammarSource,Fl);if(i&&i.feature===e)return[t]}return Ol(t)&&t.astNode===r?t.content.flatMap(i=>LO(i,e,r,!1)):[]}function YWe(t,e){return t?NO(t,e,t?.astNode):[]}function RO(t,e,r){if(!t)return;let n=NO(t,e,t?.astNode);if(n.length!==0)return r!==void 0?r=Math.max(0,Math.min(r,n.length-1)):r=0,n[r]}function NO(t,e,r){if(t.astNode!==r)return[];if(Zo(t.grammarSource)&&t.grammarSource.value===e)return[t];let n=Dp(t).iterator(),i,a=[];do if(i=n.next(),!i.done){let s=i.value;s.astNode===r?Zo(s.grammarSource)&&s.grammarSource.value===e&&a.push(s):n.prune()}while(!i.done);return a}function MO(t){var e;let r=t.astNode;for(;r===((e=t.container)===null||e===void 0?void 0:e.astNode);){let n=Ip(t.grammarSource,Fl);if(n)return n;t=t.container}}function WE(t){let e=t;return OE(e)&&(qu(e.$container)?e=e.$container.$container:Va(e.$container)?e=e.$container:Uc(e.$container)),jfe(t,e,new Map)}function jfe(t,e,r){var n;function i(a,s){let l;return Ip(a,Fl)||(l=jfe(s,s,r)),r.set(t,l),l}if(o(i,"go"),r.has(t))return r.get(t);r.set(t,void 0);for(let a of qc(e)){if(Fl(a)&&a.feature.toLowerCase()==="name")return r.set(t,a),a;if($l(a)&&Va(a.rule.ref))return i(a,a.rule.ref);if(BE(a)&&(!((n=a.typeRef)===null||n===void 0)&&n.ref))return i(a,a.typeRef.ref)}}function Kfe(t){let e=t.$container;if(Of(e)){let r=e.elements,n=r.indexOf(t);for(let i=n-1;i>=0;i--){let a=r[i];if(qu(a))return a;{let s=qc(r[i]).find(qu);if(s)return s}}}if($x(e))return Kfe(e)}function XWe(t,e){return t==="?"||t==="*"||Of(e)&&!!e.guardCondition}function jWe(t){return t==="*"||t==="+"}function KWe(t){return t==="+="}function Kx(t){return Qfe(t,new Set)}function Qfe(t,e){if(e.has(t))return!0;e.add(t);for(let r of qc(t))if($l(r)){if(!r.rule.ref||Va(r.rule.ref)&&!Qfe(r.rule.ref,e))return!1}else{if(Fl(r))return!1;if(qu(r))return!1}return!!t.definition}function QWe(t){return CO(t.type,new Set)}function CO(t,e){if(e.has(t))return!0;if(e.add(t),QI(t))return!1;if(nO(t))return!1;if(aO(t))return t.types.every(r=>CO(r,e));if(BE(t)){if(t.primitiveType!==void 0)return!0;if(t.stringType!==void 0)return!0;if(t.typeRef!==void 0){let r=t.typeRef.ref;return zx(r)?CO(r.type,e):!1}else return!1}else return!1}function c1(t){if(t.inferredType)return t.inferredType.name;if(t.dataType)return t.dataType;if(t.returnType){let e=t.returnType.ref;if(e){if(Va(e))return e.name;if(PE(e)||zx(e))return e.name}}}function Qx(t){var e;if(Va(t))return Kx(t)?t.name:(e=c1(t))!==null&&e!==void 0?e:t.name;if(PE(t)||zx(t)||iO(t))return t.name;if(qu(t)){let r=Zfe(t);if(r)return r}else if(OE(t))return t.name;throw new Error("Cannot get name of Unknown Type")}function Zfe(t){var e;if(t.inferredType)return t.inferredType.name;if(!((e=t.type)===null||e===void 0)&&e.ref)return Qx(t.type.ref)}function ZWe(t){var e,r,n;return mo(t)?(r=(e=t.type)===null||e===void 0?void 0:e.name)!==null&&r!==void 0?r:"string":Kx(t)?t.name:(n=c1(t))!==null&&n!==void 0?n:t.name}function IO(t){var e,r,n;return mo(t)?(r=(e=t.type)===null||e===void 0?void 0:e.name)!==null&&r!==void 0?r:"string":(n=c1(t))!==null&&n!==void 0?n:t.name}function u1(t){let e={s:!1,i:!1,u:!1},r=h1(t.definition,e),n=Object.entries(e).filter(([,i])=>i).map(([i])=>i).join("");return new RegExp(r,n)}function h1(t,e){if(uO(t))return JWe(t);if(hO(t))return eYe(t);if(sO(t))return nYe(t);if($E(t)){let r=t.rule.ref;if(!r)throw new Error("Missing rule reference.");return Wu(h1(r.definition),{cardinality:t.cardinality,lookahead:t.lookahead})}else{if(lO(t))return rYe(t);if(fO(t))return tYe(t);if(cO(t)){let r=t.regex.lastIndexOf("/"),n=t.regex.substring(1,r),i=t.regex.substring(r+1);return e&&(e.i=i.includes("i"),e.s=i.includes("s"),e.u=i.includes("u")),Wu(n,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}else{if(dO(t))return Wu(OO,{cardinality:t.cardinality,lookahead:t.lookahead});throw new Error(`Invalid terminal element: ${t?.$type}`)}}}function JWe(t){return Wu(t.elements.map(e=>h1(e)).join("|"),{cardinality:t.cardinality,lookahead:t.lookahead})}function eYe(t){return Wu(t.elements.map(e=>h1(e)).join(""),{cardinality:t.cardinality,lookahead:t.lookahead})}function tYe(t){return Wu(`${OO}*?${h1(t.terminal)}`,{cardinality:t.cardinality,lookahead:t.lookahead})}function rYe(t){return Wu(`(?!${h1(t.terminal)})${OO}*?`,{cardinality:t.cardinality,lookahead:t.lookahead})}function nYe(t){return t.right?Wu(`[${SO(t.left)}-${SO(t.right)}]`,{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1}):Wu(SO(t.left),{cardinality:t.cardinality,lookahead:t.lookahead,wrap:!1})}function SO(t){return Fp(t.value)}function Wu(t,e){var r;return(e.wrap!==!1||e.lookahead)&&(t=`(${(r=e.lookahead)!==null&&r!==void 0?r:""}${t})`),e.cardinality?`${t}${e.cardinality}`:t}var OO,zl=M(()=>{"use strict";ME();Hc();Pl();hs();Bl();l1();o(Wfe,"getEntryRule");o(Yfe,"getHiddenRules");o(Xx,"getAllReachableRules");o(Xfe,"ruleDfs");o(AO,"getCrossReferenceTerminal");o(_O,"isCommentTerminal");o(DO,"findNodesForProperty");o(jx,"findNodeForProperty");o(LO,"findNodesForPropertyInternal");o(YWe,"findNodesForKeyword");o(RO,"findNodeForKeyword");o(NO,"findNodesForKeywordInternal");o(MO,"findAssignment");o(WE,"findNameAssignment");o(jfe,"findNameAssignmentInternal");o(Kfe,"getActionAtElement");o(XWe,"isOptionalCardinality");o(jWe,"isArrayCardinality");o(KWe,"isArrayOperator");o(Kx,"isDataTypeRule");o(Qfe,"isDataTypeRuleInternal");o(QWe,"isDataType");o(CO,"isDataTypeInternal");o(c1,"getExplicitRuleType");o(Qx,"getTypeName");o(Zfe,"getActionType");o(ZWe,"getRuleTypeName");o(IO,"getRuleType");o(u1,"terminalRegex");OO=/[\s\S]/.source;o(h1,"abstractElementToRegex");o(JWe,"terminalAlternativesToRegex");o(eYe,"terminalGroupToRegex");o(tYe,"untilTokenToRegex");o(rYe,"negateTokenToRegex");o(nYe,"characterRangeToRegex");o(SO,"keywordToRegex");o(Wu,"withCardinality")});function PO(t){let e=[],r=t.Grammar;for(let n of r.rules)mo(n)&&_O(n)&&wO(u1(n))&&e.push(n.name);return{multilineCommentRules:e,nameRegexp:RE}}var BO=M(()=>{"use strict";Bl();zl();l1();Hc();o(PO,"createGrammarConfig")});var FO=M(()=>{"use strict"});function f1(t){console&&console.error&&console.error(`Error: ${t}`)}function Zx(t){console&&console.warn&&console.warn(`Warning: ${t}`)}var Jfe=M(()=>{"use strict";o(f1,"PRINT_ERROR");o(Zx,"PRINT_WARNING")});function Jx(t){let e=new Date().getTime(),r=t();return{time:new Date().getTime()-e,value:r}}var ede=M(()=>{"use strict";o(Jx,"timer")});function eb(t){function e(){}o(e,"FakeConstructor"),e.prototype=t;let r=new e;function n(){return typeof r.bar}return o(n,"fakeAccess"),n(),n(),t;(0,eval)(t)}var tde=M(()=>{"use strict";o(eb,"toFastProperties")});var d1=M(()=>{"use strict";Jfe();ede();tde()});function iYe(t){return aYe(t)?t.LABEL:t.name}function aYe(t){return xi(t.LABEL)&&t.LABEL!==""}function XE(t){return rt(t,p1)}function p1(t){function e(r){return rt(r,p1)}if(o(e,"convertDefinition"),t instanceof fn){let r={type:"NonTerminal",name:t.nonTerminalName,idx:t.idx};return xi(t.label)&&(r.label=t.label),r}else{if(t instanceof Pn)return{type:"Alternative",definition:e(t.definition)};if(t instanceof dn)return{type:"Option",idx:t.idx,definition:e(t.definition)};if(t instanceof Bn)return{type:"RepetitionMandatory",idx:t.idx,definition:e(t.definition)};if(t instanceof Fn)return{type:"RepetitionMandatoryWithSeparator",idx:t.idx,separator:p1(new Ar({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof _n)return{type:"RepetitionWithSeparator",idx:t.idx,separator:p1(new Ar({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof zr)return{type:"Repetition",idx:t.idx,definition:e(t.definition)};if(t instanceof Dn)return{type:"Alternation",idx:t.idx,definition:e(t.definition)};if(t instanceof Ar){let r={type:"Terminal",name:t.terminalType.name,label:iYe(t.terminalType),idx:t.idx};xi(t.label)&&(r.terminalLabel=t.label);let n=t.terminalType.PATTERN;return t.terminalType.PATTERN&&(r.pattern=Uo(n)?n.source:n),r}else{if(t instanceof fs)return{type:"Rule",name:t.name,orgText:t.orgText,definition:e(t.definition)};throw Error("non exhaustive match")}}}var go,fn,fs,Pn,dn,Bn,Fn,zr,_n,Dn,Ar,jE=M(()=>{"use strict";Yt();o(iYe,"tokenLabel");o(aYe,"hasTokenLabel");go=class{static{o(this,"AbstractProduction")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){this._definition=e}accept(e){e.visit(this),Ae(this.definition,r=>{r.accept(e)})}},fn=class extends go{static{o(this,"NonTerminal")}constructor(e){super([]),this.idx=1,ma(this,Vs(e,r=>r!==void 0))}set definition(e){}get definition(){return this.referencedRule!==void 0?this.referencedRule.definition:[]}accept(e){e.visit(this)}},fs=class extends go{static{o(this,"Rule")}constructor(e){super(e.definition),this.orgText="",ma(this,Vs(e,r=>r!==void 0))}},Pn=class extends go{static{o(this,"Alternative")}constructor(e){super(e.definition),this.ignoreAmbiguities=!1,ma(this,Vs(e,r=>r!==void 0))}},dn=class extends go{static{o(this,"Option")}constructor(e){super(e.definition),this.idx=1,ma(this,Vs(e,r=>r!==void 0))}},Bn=class extends go{static{o(this,"RepetitionMandatory")}constructor(e){super(e.definition),this.idx=1,ma(this,Vs(e,r=>r!==void 0))}},Fn=class extends go{static{o(this,"RepetitionMandatoryWithSeparator")}constructor(e){super(e.definition),this.idx=1,ma(this,Vs(e,r=>r!==void 0))}},zr=class extends go{static{o(this,"Repetition")}constructor(e){super(e.definition),this.idx=1,ma(this,Vs(e,r=>r!==void 0))}},_n=class extends go{static{o(this,"RepetitionWithSeparator")}constructor(e){super(e.definition),this.idx=1,ma(this,Vs(e,r=>r!==void 0))}},Dn=class extends go{static{o(this,"Alternation")}get definition(){return this._definition}set definition(e){this._definition=e}constructor(e){super(e.definition),this.idx=1,this.ignoreAmbiguities=!1,this.hasPredicates=!1,ma(this,Vs(e,r=>r!==void 0))}},Ar=class{static{o(this,"Terminal")}constructor(e){this.idx=1,ma(this,Vs(e,r=>r!==void 0))}accept(e){e.visit(this)}};o(XE,"serializeGrammar");o(p1,"serializeProduction")});var ds,rde=M(()=>{"use strict";jE();ds=class{static{o(this,"GAstVisitor")}visit(e){let r=e;switch(r.constructor){case fn:return this.visitNonTerminal(r);case Pn:return this.visitAlternative(r);case dn:return this.visitOption(r);case Bn:return this.visitRepetitionMandatory(r);case Fn:return this.visitRepetitionMandatoryWithSeparator(r);case _n:return this.visitRepetitionWithSeparator(r);case zr:return this.visitRepetition(r);case Dn:return this.visitAlternation(r);case Ar:return this.visitTerminal(r);case fs:return this.visitRule(r);default:throw Error("non exhaustive match")}}visitNonTerminal(e){}visitAlternative(e){}visitOption(e){}visitRepetition(e){}visitRepetitionMandatory(e){}visitRepetitionMandatoryWithSeparator(e){}visitRepetitionWithSeparator(e){}visitAlternation(e){}visitTerminal(e){}visitRule(e){}}});function $O(t){return t instanceof Pn||t instanceof dn||t instanceof zr||t instanceof Bn||t instanceof Fn||t instanceof _n||t instanceof Ar||t instanceof fs}function $p(t,e=[]){return t instanceof dn||t instanceof zr||t instanceof _n?!0:t instanceof Dn?G2(t.definition,n=>$p(n,e)):t instanceof fn&&jn(e,t)?!1:t instanceof go?(t instanceof fn&&e.push(t),Ba(t.definition,n=>$p(n,e))):!1}function zO(t){return t instanceof Dn}function Xs(t){if(t instanceof fn)return"SUBRULE";if(t instanceof dn)return"OPTION";if(t instanceof Dn)return"OR";if(t instanceof Bn)return"AT_LEAST_ONE";if(t instanceof Fn)return"AT_LEAST_ONE_SEP";if(t instanceof _n)return"MANY_SEP";if(t instanceof zr)return"MANY";if(t instanceof Ar)return"CONSUME";throw Error("non exhaustive match")}var nde=M(()=>{"use strict";Yt();jE();o($O,"isSequenceProd");o($p,"isOptionalProd");o(zO,"isBranchingProd");o(Xs,"getProductionDslName")});var ps=M(()=>{"use strict";jE();rde();nde()});function ide(t,e,r){return[new dn({definition:[new Ar({terminalType:t.separator})].concat(t.definition)})].concat(e,r)}var Yu,KE=M(()=>{"use strict";Yt();ps();Yu=class{static{o(this,"RestWalker")}walk(e,r=[]){Ae(e.definition,(n,i)=>{let a=yi(e.definition,i+1);if(n instanceof fn)this.walkProdRef(n,a,r);else if(n instanceof Ar)this.walkTerminal(n,a,r);else if(n instanceof Pn)this.walkFlat(n,a,r);else if(n instanceof dn)this.walkOption(n,a,r);else if(n instanceof Bn)this.walkAtLeastOne(n,a,r);else if(n instanceof Fn)this.walkAtLeastOneSep(n,a,r);else if(n instanceof _n)this.walkManySep(n,a,r);else if(n instanceof zr)this.walkMany(n,a,r);else if(n instanceof Dn)this.walkOr(n,a,r);else throw Error("non exhaustive match")})}walkTerminal(e,r,n){}walkProdRef(e,r,n){}walkFlat(e,r,n){let i=r.concat(n);this.walk(e,i)}walkOption(e,r,n){let i=r.concat(n);this.walk(e,i)}walkAtLeastOne(e,r,n){let i=[new dn({definition:e.definition})].concat(r,n);this.walk(e,i)}walkAtLeastOneSep(e,r,n){let i=ide(e,r,n);this.walk(e,i)}walkMany(e,r,n){let i=[new dn({definition:e.definition})].concat(r,n);this.walk(e,i)}walkManySep(e,r,n){let i=ide(e,r,n);this.walk(e,i)}walkOr(e,r,n){let i=r.concat(n);Ae(e.definition,a=>{let s=new Pn({definition:[a]});this.walk(s,i)})}};o(ide,"restForRepetitionWithSeparator")});function zp(t){if(t instanceof fn)return zp(t.referencedRule);if(t instanceof Ar)return lYe(t);if($O(t))return sYe(t);if(zO(t))return oYe(t);throw Error("non exhaustive match")}function sYe(t){let e=[],r=t.definition,n=0,i=r.length>n,a,s=!0;for(;i&&s;)a=r[n],s=$p(a),e=e.concat(zp(a)),n=n+1,i=r.length>n;return qm(e)}function oYe(t){let e=rt(t.definition,r=>zp(r));return qm(Qr(e))}function lYe(t){return[t.terminalType]}var GO=M(()=>{"use strict";Yt();ps();o(zp,"first");o(sYe,"firstForSequence");o(oYe,"firstForBranching");o(lYe,"firstForTerminal")});var QE,VO=M(()=>{"use strict";QE="_~IN~_"});function ade(t){let e={};return Ae(t,r=>{let n=new UO(r).startWalking();ma(e,n)}),e}function cYe(t,e){return t.name+e+QE}var UO,sde=M(()=>{"use strict";KE();GO();Yt();VO();ps();UO=class extends Yu{static{o(this,"ResyncFollowsWalker")}constructor(e){super(),this.topProd=e,this.follows={}}startWalking(){return this.walk(this.topProd),this.follows}walkTerminal(e,r,n){}walkProdRef(e,r,n){let i=cYe(e.referencedRule,e.idx)+this.topProd.name,a=r.concat(n),s=new Pn({definition:a}),l=zp(s);this.follows[i]=l}};o(ade,"computeAllProdsFollows");o(cYe,"buildBetweenProdsFollowPrefix")});function m1(t){let e=t.toString();if(ZE.hasOwnProperty(e))return ZE[e];{let r=uYe.pattern(e);return ZE[e]=r,r}}function ode(){ZE={}}var ZE,uYe,JE=M(()=>{"use strict";Yx();ZE={},uYe=new Pp;o(m1,"getRegExpAst");o(ode,"clearRegExpParserCache")});function ude(t,e=!1){try{let r=m1(t);return HO(r.value,{},r.flags.ignoreCase)}catch(r){if(r.message===cde)e&&Zx(`${tb} Unable to optimize: < ${t.toString()} > + Complement Sets cannot be automatically optimized. + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{let n="";e&&(n=` + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),f1(`${tb} + Failed parsing: < ${t.toString()} > + Using the @chevrotain/regexp-to-ast library + Please open an issue at: https://github.com/chevrotain/chevrotain/issues`+n)}}return[]}function HO(t,e,r){switch(t.type){case"Disjunction":for(let i=0;i{if(typeof u=="number")eS(u,e,r);else{let h=u;if(r===!0)for(let f=h.from;f<=h.to;f++)eS(f,e,r);else{for(let f=h.from;f<=h.to&&f=g1){let f=h.from>=g1?h.from:g1,d=h.to,p=Yc(f),m=Yc(d);for(let g=p;g<=m;g++)e[g]=g}}}});break;case"Group":HO(s.value,e,r);break;default:throw Error("Non Exhaustive Match")}let l=s.quantifier!==void 0&&s.quantifier.atLeast===0;if(s.type==="Group"&&qO(s)===!1||s.type!=="Group"&&l===!1)break}break;default:throw Error("non exhaustive match!")}return kr(e)}function eS(t,e,r){let n=Yc(t);e[n]=n,r===!0&&hYe(t,e)}function hYe(t,e){let r=String.fromCharCode(t),n=r.toUpperCase();if(n!==r){let i=Yc(n.charCodeAt(0));e[i]=i}else{let i=r.toLowerCase();if(i!==r){let a=Yc(i.charCodeAt(0));e[a]=a}}}function lde(t,e){return os(t.value,r=>{if(typeof r=="number")return jn(e,r);{let n=r;return os(e,i=>n.from<=i&&i<=n.to)!==void 0}})}function qO(t){let e=t.quantifier;return e&&e.atLeast===0?!0:t.value?Bt(t.value)?Ba(t.value,qO):qO(t.value):!1}function tS(t,e){if(e instanceof RegExp){let r=m1(e),n=new WO(t);return n.visit(r),n.found}else return os(e,r=>jn(t,r.charCodeAt(0)))!==void 0}var cde,tb,WO,hde=M(()=>{"use strict";Yx();Yt();d1();JE();YO();cde="Complement Sets are not supported for first char optimization",tb=`Unable to use "first char" lexer optimizations: +`;o(ude,"getOptimizedStartCodesIndices");o(HO,"firstCharOptimizedIndices");o(eS,"addOptimizedIdxToResult");o(hYe,"handleIgnoreCase");o(lde,"findCode");o(qO,"isWholeOptional");WO=class extends Wc{static{o(this,"CharCodeFinder")}constructor(e){super(),this.targetCharCodes=e,this.found=!1}visitChildren(e){if(this.found!==!0){switch(e.type){case"Lookahead":this.visitLookahead(e);return;case"NegativeLookahead":this.visitNegativeLookahead(e);return}super.visitChildren(e)}}visitCharacter(e){jn(this.targetCharCodes,e.value)&&(this.found=!0)}visitSet(e){e.complement?lde(e,this.targetCharCodes)===void 0&&(this.found=!0):lde(e,this.targetCharCodes)!==void 0&&(this.found=!0)}};o(tS,"canMatchCharCode")});function pde(t,e){e=of(e,{useSticky:jO,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` +`],tracer:o((b,T)=>T(),"tracer")});let r=e.tracer;r("initCharCodeToOptimizedIndexMap",()=>{DYe()});let n;r("Reject Lexer.NA",()=>{n=cf(t,b=>b[Gp]===Zn.NA)});let i=!1,a;r("Transform Patterns",()=>{i=!1,a=rt(n,b=>{let T=b[Gp];if(Uo(T)){let S=T.source;return S.length===1&&S!=="^"&&S!=="$"&&S!=="."&&!T.ignoreCase?S:S.length===2&&S[0]==="\\"&&!jn(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],S[1])?S[1]:e.useSticky?dde(T):fde(T)}else{if(Si(T))return i=!0,{exec:T};if(typeof T=="object")return i=!0,T;if(typeof T=="string"){if(T.length===1)return T;{let S=T.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),w=new RegExp(S);return e.useSticky?dde(w):fde(w)}}else throw Error("non exhaustive match")}})});let s,l,u,h,f;r("misc mapping",()=>{s=rt(n,b=>b.tokenTypeIdx),l=rt(n,b=>{let T=b.GROUP;if(T!==Zn.SKIPPED){if(xi(T))return T;if(xr(T))return!1;throw Error("non exhaustive match")}}),u=rt(n,b=>{let T=b.LONGER_ALT;if(T)return Bt(T)?rt(T,w=>uk(n,w)):[uk(n,T)]}),h=rt(n,b=>b.PUSH_MODE),f=rt(n,b=>Ft(b,"POP_MODE"))});let d;r("Line Terminator Handling",()=>{let b=wde(e.lineTerminatorCharacters);d=rt(n,T=>!1),e.positionTracking!=="onlyOffset"&&(d=rt(n,T=>Ft(T,"LINE_BREAKS")?!!T.LINE_BREAKS:Tde(T,b)===!1&&tS(b,T.PATTERN)))});let p,m,g,y;r("Misc Mapping #2",()=>{p=rt(n,xde),m=rt(a,AYe),g=Jr(n,(b,T)=>{let S=T.GROUP;return xi(S)&&S!==Zn.SKIPPED&&(b[S]=[]),b},{}),y=rt(a,(b,T)=>({pattern:a[T],longerAlt:u[T],canLineTerminator:d[T],isCustom:p[T],short:m[T],group:l[T],push:h[T],pop:f[T],tokenTypeIdx:s[T],tokenType:n[T]}))});let v=!0,x=[];return e.safeMode||r("First Char Optimization",()=>{x=Jr(n,(b,T,S)=>{if(typeof T.PATTERN=="string"){let w=T.PATTERN.charCodeAt(0),k=Yc(w);XO(b,k,y[S])}else if(Bt(T.START_CHARS_HINT)){let w;Ae(T.START_CHARS_HINT,k=>{let C=typeof k=="string"?k.charCodeAt(0):k,A=Yc(C);w!==A&&(w=A,XO(b,A,y[S]))})}else if(Uo(T.PATTERN))if(T.PATTERN.unicode)v=!1,e.ensureOptimizations&&f1(`${tb} Unable to analyze < ${T.PATTERN.toString()} > pattern. + The regexp unicode flag is not currently supported by the regexp-to-ast library. + This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{let w=ude(T.PATTERN,e.ensureOptimizations);mr(w)&&(v=!1),Ae(w,k=>{XO(b,k,y[S])})}else e.ensureOptimizations&&f1(`${tb} TokenType: <${T.name}> is using a custom token pattern without providing parameter. + This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),v=!1;return b},[])}),{emptyGroups:g,patternIdxToConfig:y,charCodeToPatternIdxToConfig:x,hasCustom:i,canBeOptimized:v}}function mde(t,e){let r=[],n=dYe(t);r=r.concat(n.errors);let i=pYe(n.valid),a=i.valid;return r=r.concat(i.errors),r=r.concat(fYe(a)),r=r.concat(wYe(a)),r=r.concat(kYe(a,e)),r=r.concat(EYe(a)),r}function fYe(t){let e=[],r=Zr(t,n=>Uo(n[Gp]));return e=e.concat(gYe(r)),e=e.concat(xYe(r)),e=e.concat(bYe(r)),e=e.concat(TYe(r)),e=e.concat(yYe(r)),e}function dYe(t){let e=Zr(t,i=>!Ft(i,Gp)),r=rt(e,i=>({message:"Token Type: ->"+i.name+"<- missing static 'PATTERN' property",type:Qn.MISSING_PATTERN,tokenTypes:[i]})),n=lf(t,e);return{errors:r,valid:n}}function pYe(t){let e=Zr(t,i=>{let a=i[Gp];return!Uo(a)&&!Si(a)&&!Ft(a,"exec")&&!xi(a)}),r=rt(e,i=>({message:"Token Type: ->"+i.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:Qn.INVALID_PATTERN,tokenTypes:[i]})),n=lf(t,e);return{errors:r,valid:n}}function gYe(t){class e extends Wc{static{o(this,"EndAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitEndAnchor(a){this.found=!0}}let r=Zr(t,i=>{let a=i.PATTERN;try{let s=m1(a),l=new e;return l.visit(s),l.found}catch{return mYe.test(a.source)}});return rt(r,i=>({message:`Unexpected RegExp Anchor Error: + Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain end of input anchor '$' + See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:Qn.EOI_ANCHOR_FOUND,tokenTypes:[i]}))}function yYe(t){let e=Zr(t,n=>n.PATTERN.test(""));return rt(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' must not match an empty string",type:Qn.EMPTY_MATCH_PATTERN,tokenTypes:[n]}))}function xYe(t){class e extends Wc{static{o(this,"StartAnchorFinder")}constructor(){super(...arguments),this.found=!1}visitStartAnchor(a){this.found=!0}}let r=Zr(t,i=>{let a=i.PATTERN;try{let s=m1(a),l=new e;return l.visit(s),l.found}catch{return vYe.test(a.source)}});return rt(r,i=>({message:`Unexpected RegExp Anchor Error: + Token Type: ->`+i.name+`<- static 'PATTERN' cannot contain start of input anchor '^' + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:Qn.SOI_ANCHOR_FOUND,tokenTypes:[i]}))}function bYe(t){let e=Zr(t,n=>{let i=n[Gp];return i instanceof RegExp&&(i.multiline||i.global)});return rt(e,n=>({message:"Token Type: ->"+n.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:Qn.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[n]}))}function TYe(t){let e=[],r=rt(t,a=>Jr(t,(s,l)=>(a.PATTERN.source===l.PATTERN.source&&!jn(e,l)&&l.PATTERN!==Zn.NA&&(e.push(l),s.push(l)),s),[]));r=_c(r);let n=Zr(r,a=>a.length>1);return rt(n,a=>{let s=rt(a,u=>u.name);return{message:`The same RegExp pattern ->${ea(a).PATTERN}<-has been used in all of the following Token Types: ${s.join(", ")} <-`,type:Qn.DUPLICATE_PATTERNS_FOUND,tokenTypes:a}})}function wYe(t){let e=Zr(t,n=>{if(!Ft(n,"GROUP"))return!1;let i=n.GROUP;return i!==Zn.SKIPPED&&i!==Zn.NA&&!xi(i)});return rt(e,n=>({message:"Token Type: ->"+n.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:Qn.INVALID_GROUP_TYPE_FOUND,tokenTypes:[n]}))}function kYe(t,e){let r=Zr(t,i=>i.PUSH_MODE!==void 0&&!jn(e,i.PUSH_MODE));return rt(r,i=>({message:`Token Type: ->${i.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${i.PUSH_MODE}<-which does not exist`,type:Qn.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[i]}))}function EYe(t){let e=[],r=Jr(t,(n,i,a)=>{let s=i.PATTERN;return s===Zn.NA||(xi(s)?n.push({str:s,idx:a,tokenType:i}):Uo(s)&&CYe(s)&&n.push({str:s.source,idx:a,tokenType:i})),n},[]);return Ae(t,(n,i)=>{Ae(r,({str:a,idx:s,tokenType:l})=>{if(i${l.name}<- can never be matched. +Because it appears AFTER the Token Type ->${n.name}<-in the lexer's definition. +See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:u,type:Qn.UNREACHABLE_PATTERN,tokenTypes:[n,l]})}})}),e}function SYe(t,e){if(Uo(e)){let r=e.exec(t);return r!==null&&r.index===0}else{if(Si(e))return e(t,0,[],{});if(Ft(e,"exec"))return e.exec(t,0,[],{});if(typeof e=="string")return e===t;throw Error("non exhaustive match")}}function CYe(t){return os([".","\\","[","]","|","^","$","(",")","?","*","+","{"],r=>t.source.indexOf(r)!==-1)===void 0}function fde(t){let e=t.ignoreCase?"i":"";return new RegExp(`^(?:${t.source})`,e)}function dde(t){let e=t.ignoreCase?"iy":"y";return new RegExp(`${t.source}`,e)}function gde(t,e,r){let n=[];return Ft(t,y1)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+y1+`> property in its definition +`,type:Qn.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),Ft(t,rS)||n.push({message:"A MultiMode Lexer cannot be initialized without a <"+rS+`> property in its definition +`,type:Qn.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),Ft(t,rS)&&Ft(t,y1)&&!Ft(t.modes,t.defaultMode)&&n.push({message:`A MultiMode Lexer cannot be initialized with a ${y1}: <${t.defaultMode}>which does not exist +`,type:Qn.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),Ft(t,rS)&&Ae(t.modes,(i,a)=>{Ae(i,(s,l)=>{if(xr(s))n.push({message:`A Lexer cannot be initialized using an undefined Token Type. Mode:<${a}> at index: <${l}> +`,type:Qn.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED});else if(Ft(s,"LONGER_ALT")){let u=Bt(s.LONGER_ALT)?s.LONGER_ALT:[s.LONGER_ALT];Ae(u,h=>{!xr(h)&&!jn(i,h)&&n.push({message:`A MultiMode Lexer cannot be initialized with a longer_alt <${h.name}> on token <${s.name}> outside of mode <${a}> +`,type:Qn.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE})})}})}),n}function yde(t,e,r){let n=[],i=!1,a=_c(Qr(kr(t.modes))),s=cf(a,u=>u[Gp]===Zn.NA),l=wde(r);return e&&Ae(s,u=>{let h=Tde(u,l);if(h!==!1){let d={message:_Ye(u,h),type:h.issue,tokenType:u};n.push(d)}else Ft(u,"LINE_BREAKS")?u.LINE_BREAKS===!0&&(i=!0):tS(l,u.PATTERN)&&(i=!0)}),e&&!i&&n.push({message:`Warning: No LINE_BREAKS Found. + This Lexer has been defined to track line and column information, + But none of the Token Types can be identified as matching a line terminator. + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS + for details.`,type:Qn.NO_LINE_BREAKS_FLAGS}),n}function vde(t){let e={},r=qr(t);return Ae(r,n=>{let i=t[n];if(Bt(i))e[n]=[];else throw Error("non exhaustive match")}),e}function xde(t){let e=t.PATTERN;if(Uo(e))return!1;if(Si(e))return!0;if(Ft(e,"exec"))return!0;if(xi(e))return!1;throw Error("non exhaustive match")}function AYe(t){return xi(t)&&t.length===1?t.charCodeAt(0):!1}function Tde(t,e){if(Ft(t,"LINE_BREAKS"))return!1;if(Uo(t.PATTERN)){try{tS(e,t.PATTERN)}catch(r){return{issue:Qn.IDENTIFY_TERMINATOR,errMsg:r.message}}return!1}else{if(xi(t.PATTERN))return!1;if(xde(t))return{issue:Qn.CUSTOM_LINE_BREAK};throw Error("non exhaustive match")}}function _Ye(t,e){if(e.issue===Qn.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern. + The problem is in the <${t.name}> Token Type + Root cause: ${e.errMsg}. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`;if(e.issue===Qn.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the option. + The problem is in the <${t.name}> Token Type + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`;throw Error("non exhaustive match")}function wde(t){return rt(t,r=>xi(r)?r.charCodeAt(0):r)}function XO(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r)}function Yc(t){return t255?255+~~(t/255):t}}var Gp,y1,rS,jO,mYe,vYe,bde,g1,nS,YO=M(()=>{"use strict";Yx();rb();Yt();d1();hde();JE();Gp="PATTERN",y1="defaultMode",rS="modes",jO=typeof new RegExp("(?:)").sticky=="boolean";o(pde,"analyzeTokenTypes");o(mde,"validatePatterns");o(fYe,"validateRegExpPattern");o(dYe,"findMissingPatterns");o(pYe,"findInvalidPatterns");mYe=/[^\\][$]/;o(gYe,"findEndOfInputAnchor");o(yYe,"findEmptyMatchRegExps");vYe=/[^\\[][\^]|^\^/;o(xYe,"findStartOfInputAnchor");o(bYe,"findUnsupportedFlags");o(TYe,"findDuplicatePatterns");o(wYe,"findInvalidGroupType");o(kYe,"findModesThatDoNotExist");o(EYe,"findUnreachablePatterns");o(SYe,"testTokenType");o(CYe,"noMetaChar");o(fde,"addStartOfInput");o(dde,"addStickyFlag");o(gde,"performRuntimeChecks");o(yde,"performWarningRuntimeChecks");o(vde,"cloneEmptyGroups");o(xde,"isCustomPattern");o(AYe,"isShortPattern");bde={test:o(function(t){let e=t.length;for(let r=this.lastIndex;r{r.isParent=r.categoryMatches.length>0})}function LYe(t){let e=ln(t),r=t,n=!0;for(;n;){r=_c(Qr(rt(r,a=>a.CATEGORIES)));let i=lf(r,e);e=e.concat(i),mr(i)?n=!1:r=i}return e}function RYe(t){Ae(t,e=>{KO(e)||(Sde[kde]=e,e.tokenTypeIdx=kde++),Ede(e)&&!Bt(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Ede(e)||(e.CATEGORIES=[]),IYe(e)||(e.categoryMatches=[]),OYe(e)||(e.categoryMatchesMap={})})}function NYe(t){Ae(t,e=>{e.categoryMatches=[],Ae(e.categoryMatchesMap,(r,n)=>{e.categoryMatches.push(Sde[n].tokenTypeIdx)})})}function MYe(t){Ae(t,e=>{Cde([],e)})}function Cde(t,e){Ae(t,r=>{e.categoryMatchesMap[r.tokenTypeIdx]=!0}),Ae(e.CATEGORIES,r=>{let n=t.concat(e);jn(n,r)||Cde(n,r)})}function KO(t){return Ft(t,"tokenTypeIdx")}function Ede(t){return Ft(t,"CATEGORIES")}function IYe(t){return Ft(t,"categoryMatches")}function OYe(t){return Ft(t,"categoryMatchesMap")}function Ade(t){return Ft(t,"tokenTypeIdx")}var kde,Sde,Vp=M(()=>{"use strict";Yt();o(Xu,"tokenStructuredMatcher");o(v1,"tokenStructuredMatcherNoCategories");kde=1,Sde={};o(ju,"augmentTokenTypes");o(LYe,"expandCategories");o(RYe,"assignTokenDefaultProps");o(NYe,"assignCategoriesTokensProp");o(MYe,"assignCategoriesMapProp");o(Cde,"singleAssignCategoriesToksMap");o(KO,"hasShortKeyProperty");o(Ede,"hasCategoriesProperty");o(IYe,"hasExtendingTokensTypesProperty");o(OYe,"hasExtendingTokensTypesMapProperty");o(Ade,"isTokenType")});var x1,QO=M(()=>{"use strict";x1={buildUnableToPopLexerModeMessage(t){return`Unable to pop Lexer Mode after encountering Token ->${t.image}<- The Mode Stack is empty`},buildUnexpectedCharactersMessage(t,e,r,n,i){return`unexpected character: ->${t.charAt(e)}<- at offset: ${e}, skipped ${r} characters.`}}});var Qn,nb,Zn,rb=M(()=>{"use strict";YO();Yt();d1();Vp();QO();JE();(function(t){t[t.MISSING_PATTERN=0]="MISSING_PATTERN",t[t.INVALID_PATTERN=1]="INVALID_PATTERN",t[t.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",t[t.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",t[t.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",t[t.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",t[t.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",t[t.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",t[t.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",t[t.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",t[t.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",t[t.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",t[t.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",t[t.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",t[t.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",t[t.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",t[t.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK",t[t.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE=17]="MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"})(Qn||(Qn={}));nb={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` +`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:x1,traceInitPerf:!1,skipValidations:!1,recoveryEnabled:!0};Object.freeze(nb);Zn=class{static{o(this,"Lexer")}constructor(e,r=nb){if(this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},this.TRACE_INIT=(i,a)=>{if(this.traceInitPerf===!0){this.traceInitIndent++;let s=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${i}>`);let{time:l,value:u}=Jx(a),h=l>10?console.warn:console.log;return this.traceInitIndent time: ${l}ms`),this.traceInitIndent--,u}else return a()},typeof r=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. +a boolean 2nd argument is no longer supported`);this.config=ma({},nb,r);let n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n=="number"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",()=>{let i,a=!0;this.TRACE_INIT("Lexer Config handling",()=>{if(this.config.lineTerminatorsPattern===nb.lineTerminatorsPattern)this.config.lineTerminatorsPattern=bde;else if(this.config.lineTerminatorCharacters===nb.lineTerminatorCharacters)throw Error(`Error: Missing property on the Lexer config. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(r.safeMode&&r.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');this.trackStartLines=/full|onlyStart/i.test(this.config.positionTracking),this.trackEndLines=/full/i.test(this.config.positionTracking),Bt(e)?i={modes:{defaultMode:ln(e)},defaultMode:y1}:(a=!1,i=ln(e))}),this.config.skipValidations===!1&&(this.TRACE_INIT("performRuntimeChecks",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(gde(i,this.trackStartLines,this.config.lineTerminatorCharacters))}),this.TRACE_INIT("performWarningRuntimeChecks",()=>{this.lexerDefinitionWarning=this.lexerDefinitionWarning.concat(yde(i,this.trackStartLines,this.config.lineTerminatorCharacters))})),i.modes=i.modes?i.modes:{},Ae(i.modes,(l,u)=>{i.modes[u]=cf(l,h=>xr(h))});let s=qr(i.modes);if(Ae(i.modes,(l,u)=>{this.TRACE_INIT(`Mode: <${u}> processing`,()=>{if(this.modes.push(u),this.config.skipValidations===!1&&this.TRACE_INIT("validatePatterns",()=>{this.lexerDefinitionErrors=this.lexerDefinitionErrors.concat(mde(l,s))}),mr(this.lexerDefinitionErrors)){ju(l);let h;this.TRACE_INIT("analyzeTokenTypes",()=>{h=pde(l,{lineTerminatorCharacters:this.config.lineTerminatorCharacters,positionTracking:r.positionTracking,ensureOptimizations:r.ensureOptimizations,safeMode:r.safeMode,tracer:this.TRACE_INIT})}),this.patternIdxToConfig[u]=h.patternIdxToConfig,this.charCodeToPatternIdxToConfig[u]=h.charCodeToPatternIdxToConfig,this.emptyGroups=ma({},this.emptyGroups,h.emptyGroups),this.hasCustom=h.hasCustom||this.hasCustom,this.canModeBeOptimized[u]=h.canBeOptimized}})}),this.defaultMode=i.defaultMode,!mr(this.lexerDefinitionErrors)&&!this.config.deferDefinitionErrorsHandling){let u=rt(this.lexerDefinitionErrors,h=>h.message).join(`----------------------- +`);throw new Error(`Errors detected in definition of Lexer: +`+u)}Ae(this.lexerDefinitionWarning,l=>{Zx(l.message)}),this.TRACE_INIT("Choosing sub-methods implementations",()=>{if(jO?(this.chopInput=Qi,this.match=this.matchWithTest):(this.updateLastIndex=si,this.match=this.matchWithExec),a&&(this.handleModes=si),this.trackStartLines===!1&&(this.computeNewColumn=Qi),this.trackEndLines===!1&&(this.updateTokenEndLineColumnLocation=si),/full/i.test(this.config.positionTracking))this.createTokenInstance=this.createFullToken;else if(/onlyStart/i.test(this.config.positionTracking))this.createTokenInstance=this.createStartOnlyToken;else if(/onlyOffset/i.test(this.config.positionTracking))this.createTokenInstance=this.createOffsetOnlyToken;else throw Error(`Invalid config option: "${this.config.positionTracking}"`);this.hasCustom?(this.addToken=this.addTokenUsingPush,this.handlePayload=this.handlePayloadWithCustom):(this.addToken=this.addTokenUsingMemberAccess,this.handlePayload=this.handlePayloadNoCustom)}),this.TRACE_INIT("Failed Optimization Warnings",()=>{let l=Jr(this.canModeBeOptimized,(u,h,f)=>(h===!1&&u.push(f),u),[]);if(r.ensureOptimizations&&!mr(l))throw Error(`Lexer Modes: < ${l.join(", ")} > cannot be optimized. + Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. + Or inspect the console log for details on how to resolve these issues.`)}),this.TRACE_INIT("clearRegExpParserCache",()=>{ode()}),this.TRACE_INIT("toFastProperties",()=>{eb(this)})})}tokenize(e,r=this.defaultMode){if(!mr(this.lexerDefinitionErrors)){let i=rt(this.lexerDefinitionErrors,a=>a.message).join(`----------------------- +`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: +`+i)}return this.tokenizeInternal(e,r)}tokenizeInternal(e,r){let n,i,a,s,l,u,h,f,d,p,m,g,y,v,x,b,T=e,S=T.length,w=0,k=0,C=this.hasCustom?0:Math.floor(e.length/10),A=new Array(C),L=[],I=this.trackStartLines?1:void 0,R=this.trackStartLines?1:void 0,E=vde(this.emptyGroups),_=this.trackStartLines,D=this.config.lineTerminatorsPattern,O=0,N=[],P=[],B=[],F=[];Object.freeze(F);let V;function $(){return N}o($,"getPossiblePatternsSlow");function U(Q){let ue=Yc(Q),te=P[ue];return te===void 0?F:te}o(U,"getPossiblePatternsOptimized");let j=o(Q=>{if(B.length===1&&Q.tokenType.PUSH_MODE===void 0){let ue=this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(Q);L.push({offset:Q.startOffset,line:Q.startLine,column:Q.startColumn,length:Q.image.length,message:ue})}else{B.pop();let ue=ga(B);N=this.patternIdxToConfig[ue],P=this.charCodeToPatternIdxToConfig[ue],O=N.length;let te=this.canModeBeOptimized[ue]&&this.config.safeMode===!1;P&&te?V=U:V=$}},"pop_mode");function ee(Q){B.push(Q),P=this.charCodeToPatternIdxToConfig[Q],N=this.patternIdxToConfig[Q],O=N.length,O=N.length;let ue=this.canModeBeOptimized[Q]&&this.config.safeMode===!1;P&&ue?V=U:V=$}o(ee,"push_mode"),ee.call(this,r);let q,oe=this.config.recoveryEnabled;for(;wu.length){u=s,h=f,q=ae;break}}}break}}if(u!==null){if(d=u.length,p=q.group,p!==void 0&&(m=q.tokenTypeIdx,g=this.createTokenInstance(u,w,m,q.tokenType,I,R,d),this.handlePayload(g,h),p===!1?k=this.addToken(A,k,g):E[p].push(g)),e=this.chopInput(e,d),w=w+d,R=this.computeNewColumn(R,d),_===!0&&q.canLineTerminator===!0){let re=0,J,K;D.lastIndex=0;do J=D.test(u),J===!0&&(K=D.lastIndex-1,re++);while(J===!0);re!==0&&(I=I+re,R=d-K,this.updateTokenEndLineColumnLocation(g,p,K,re,I,R,d))}this.handleModes(q,j,ee,g)}else{let re=w,J=I,K=R,ae=oe===!1;for(;ae===!1&&w{"use strict";Yt();rb();Vp();o(Ku,"tokenLabel");o(ZO,"hasTokenLabel");PYe="parent",_de="categories",Dde="label",Lde="group",Rde="push_mode",Nde="pop_mode",Mde="longer_alt",Ide="line_breaks",Ode="start_chars_hint";o(Pf,"createToken");o(BYe,"createTokenInternal");yo=Pf({name:"EOF",pattern:Zn.NA});ju([yo]);o(Qu,"createTokenInstance");o(ib,"tokenMatcher")});var Zu,Pde,Gl,b1=M(()=>{"use strict";Up();Yt();ps();Zu={buildMismatchTokenMessage({expected:t,actual:e,previous:r,ruleName:n}){return`Expecting ${ZO(t)?`--> ${Ku(t)} <--`:`token of type --> ${t.name} <--`} but found --> '${e.image}' <--`},buildNotAllInputParsedMessage({firstRedundant:t,ruleName:e}){return"Redundant input, expecting EOF but found: "+t.image},buildNoViableAltMessage({expectedPathsPerAlt:t,actual:e,previous:r,customUserDescription:n,ruleName:i}){let a="Expecting: ",l=` +but found: '`+ea(e).image+"'";if(n)return a+n+l;{let u=Jr(t,(p,m)=>p.concat(m),[]),h=rt(u,p=>`[${rt(p,m=>Ku(m)).join(", ")}]`),d=`one of these possible Token sequences: +${rt(h,(p,m)=>` ${m+1}. ${p}`).join(` +`)}`;return a+d+l}},buildEarlyExitMessage({expectedIterationPaths:t,actual:e,customUserDescription:r,ruleName:n}){let i="Expecting: ",s=` +but found: '`+ea(e).image+"'";if(r)return i+r+s;{let u=`expecting at least one iteration which starts with one of these possible Token sequences:: + <${rt(t,h=>`[${rt(h,f=>Ku(f)).join(",")}]`).join(" ,")}>`;return i+u+s}}};Object.freeze(Zu);Pde={buildRuleNotFoundError(t,e){return"Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- +inside top level rule: ->`+t.name+"<-"}},Gl={buildDuplicateFoundError(t,e){function r(f){return f instanceof Ar?f.terminalType.name:f instanceof fn?f.nonTerminalName:""}o(r,"getExtraProductionArgument");let n=t.name,i=ea(e),a=i.idx,s=Xs(i),l=r(i),u=a>0,h=`->${s}${u?a:""}<- ${l?`with argument: ->${l}<-`:""} + appears more than once (${e.length} times) in the top level rule: ->${n}<-. + For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES + `;return h=h.replace(/[ \t]+/g," "),h=h.replace(/\s\s+/g,` +`),h},buildNamespaceConflictError(t){return`Namespace conflict found in grammar. +The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${t.name}>. +To resolve this make sure each Terminal and Non-Terminal names are unique +This is easy to accomplish by using the convention that Terminal names start with an uppercase letter +and Non-Terminal names start with a lower case letter.`},buildAlternationPrefixAmbiguityError(t){let e=rt(t.prefixPath,i=>Ku(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx;return`Ambiguous alternatives: <${t.ambiguityIndices.join(" ,")}> due to common lookahead prefix +in inside <${t.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX +For Further details.`},buildAlternationAmbiguityError(t){let e=rt(t.prefixPath,i=>Ku(i)).join(", "),r=t.alternation.idx===0?"":t.alternation.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(" ,")}> in inside <${t.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +`;return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES +For Further details.`,n},buildEmptyRepetitionError(t){let e=Xs(t.repetition);return t.repetition.idx!==0&&(e+=t.repetition.idx),`The repetition <${e}> within Rule <${t.topLevelRule.name}> can never consume any tokens. +This could lead to an infinite loop.`},buildTokenNameError(t){return"deprecated"},buildEmptyAlternationError(t){return`Ambiguous empty alternative: <${t.emptyChoiceIdx+1}> in inside <${t.topLevelRule.name}> Rule. +Only the last alternative may be an empty alternative.`},buildTooManyAlternativesError(t){return`An Alternation cannot have more than 256 alternatives: + inside <${t.topLevelRule.name}> Rule. + has ${t.alternation.definition.length+1} alternatives.`},buildLeftRecursionError(t){let e=t.topLevelRule.name,r=rt(t.leftRecursionPath,a=>a.name),n=`${e} --> ${r.concat([e]).join(" --> ")}`;return`Left Recursion found in grammar. +rule: <${e}> can be invoked from itself (directly or indirectly) +without consuming any Tokens. The grammar path that causes this is: + ${n} + To fix this refactor your grammar to remove the left recursion. +see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`},buildInvalidRuleNameError(t){return"deprecated"},buildDuplicateRuleNameError(t){let e;return t.topLevelRule instanceof fs?e=t.topLevelRule.name:e=t.topLevelRule,`Duplicate definition, rule: ->${e}<- is already defined in the grammar: ->${t.grammarName}<-`}}});function Bde(t,e){let r=new JO(t,e);return r.resolveRefs(),r.errors}var JO,Fde=M(()=>{"use strict";js();Yt();ps();o(Bde,"resolveGrammar");JO=class extends ds{static{o(this,"GastRefResolverVisitor")}constructor(e,r){super(),this.nameToTopRule=e,this.errMsgProvider=r,this.errors=[]}resolveRefs(){Ae(kr(this.nameToTopRule),e=>{this.currTopLevel=e,e.accept(this)})}visitNonTerminal(e){let r=this.nameToTopRule[e.nonTerminalName];if(r)e.referencedRule=r;else{let n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,e);this.errors.push({message:n,type:Gi.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:e.nonTerminalName})}}}});function oS(t,e,r=[]){r=ln(r);let n=[],i=0;function a(l){return l.concat(yi(t,i+1))}o(a,"remainingPathWith");function s(l){let u=oS(a(l),e,r);return n.concat(u)}for(o(s,"getAlternativesForProd");r.length{mr(u.definition)===!1&&(n=s(u.definition))}),n;if(l instanceof Ar)r.push(l.terminalType);else throw Error("non exhaustive match")}i++}return n.push({partialPath:r,suffixDef:yi(t,i)}),n}function lS(t,e,r,n){let i="EXIT_NONE_TERMINAL",a=[i],s="EXIT_ALTERNATIVE",l=!1,u=e.length,h=u-n-1,f=[],d=[];for(d.push({idx:-1,def:t,ruleStack:[],occurrenceStack:[]});!mr(d);){let p=d.pop();if(p===s){l&&ga(d).idx<=h&&d.pop();continue}let m=p.def,g=p.idx,y=p.ruleStack,v=p.occurrenceStack;if(mr(m))continue;let x=m[0];if(x===i){let b={idx:g,def:yi(m),ruleStack:Bu(y),occurrenceStack:Bu(v)};d.push(b)}else if(x instanceof Ar)if(g=0;b--){let T=x.definition[b],S={idx:g,def:T.definition.concat(yi(m)),ruleStack:y,occurrenceStack:v};d.push(S),d.push(s)}else if(x instanceof Pn)d.push({idx:g,def:x.definition.concat(yi(m)),ruleStack:y,occurrenceStack:v});else if(x instanceof fs)d.push(FYe(x,g,y,v));else throw Error("non exhaustive match")}return f}function FYe(t,e,r,n){let i=ln(r);i.push(t.name);let a=ln(n);return a.push(1),{idx:e,def:t.definition,ruleStack:i,occurrenceStack:a}}var eP,iS,T1,aS,ab,sS,sb,ob=M(()=>{"use strict";Yt();GO();KE();ps();eP=class extends Yu{static{o(this,"AbstractNextPossibleTokensWalker")}constructor(e,r){super(),this.topProd=e,this.path=r,this.possibleTokTypes=[],this.nextProductionName="",this.nextProductionOccurrence=0,this.found=!1,this.isAtEndOfPath=!1}startWalking(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=ln(this.path.ruleStack).reverse(),this.occurrenceStack=ln(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes}walk(e,r=[]){this.found||super.walk(e,r)}walkProdRef(e,r,n){if(e.referencedRule.name===this.nextProductionName&&e.idx===this.nextProductionOccurrence){let i=r.concat(n);this.updateExpectedNext(),this.walk(e.referencedRule,i)}}updateExpectedNext(){mr(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())}},iS=class extends eP{static{o(this,"NextAfterTokenWalker")}constructor(e,r){super(e,r),this.path=r,this.nextTerminalName="",this.nextTerminalOccurrence=0,this.nextTerminalName=this.path.lastTok.name,this.nextTerminalOccurrence=this.path.lastTokOccurrence}walkTerminal(e,r,n){if(this.isAtEndOfPath&&e.terminalType.name===this.nextTerminalName&&e.idx===this.nextTerminalOccurrence&&!this.found){let i=r.concat(n),a=new Pn({definition:i});this.possibleTokTypes=zp(a),this.found=!0}}},T1=class extends Yu{static{o(this,"AbstractNextTerminalAfterProductionWalker")}constructor(e,r){super(),this.topRule=e,this.occurrence=r,this.result={token:void 0,occurrence:void 0,isEndOfRule:void 0}}startWalking(){return this.walk(this.topRule),this.result}},aS=class extends T1{static{o(this,"NextTerminalAfterManyWalker")}walkMany(e,r,n){if(e.idx===this.occurrence){let i=ea(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof Ar&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkMany(e,r,n)}},ab=class extends T1{static{o(this,"NextTerminalAfterManySepWalker")}walkManySep(e,r,n){if(e.idx===this.occurrence){let i=ea(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof Ar&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkManySep(e,r,n)}},sS=class extends T1{static{o(this,"NextTerminalAfterAtLeastOneWalker")}walkAtLeastOne(e,r,n){if(e.idx===this.occurrence){let i=ea(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof Ar&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOne(e,r,n)}},sb=class extends T1{static{o(this,"NextTerminalAfterAtLeastOneSepWalker")}walkAtLeastOneSep(e,r,n){if(e.idx===this.occurrence){let i=ea(r.concat(n));this.result.isEndOfRule=i===void 0,i instanceof Ar&&(this.result.token=i.terminalType,this.result.occurrence=i.idx)}else super.walkAtLeastOneSep(e,r,n)}};o(oS,"possiblePathsFrom");o(lS,"nextPossibleTokensAfter");o(FYe,"expandTopLevelRule")});function lb(t){if(t instanceof dn||t==="Option")return Jn.OPTION;if(t instanceof zr||t==="Repetition")return Jn.REPETITION;if(t instanceof Bn||t==="RepetitionMandatory")return Jn.REPETITION_MANDATORY;if(t instanceof Fn||t==="RepetitionMandatoryWithSeparator")return Jn.REPETITION_MANDATORY_WITH_SEPARATOR;if(t instanceof _n||t==="RepetitionWithSeparator")return Jn.REPETITION_WITH_SEPARATOR;if(t instanceof Dn||t==="Alternation")return Jn.ALTERNATION;throw Error("non exhaustive match")}function uS(t){let{occurrence:e,rule:r,prodType:n,maxLookahead:i}=t,a=lb(n);return a===Jn.ALTERNATION?w1(e,r,i):k1(e,r,a,i)}function zde(t,e,r,n,i,a){let s=w1(t,e,r),l=Wde(s)?v1:Xu;return a(s,n,l,i)}function Gde(t,e,r,n,i,a){let s=k1(t,e,i,r),l=Wde(s)?v1:Xu;return a(s[0],l,n)}function Vde(t,e,r,n){let i=t.length,a=Ba(t,s=>Ba(s,l=>l.length===1));if(e)return function(s){let l=rt(s,u=>u.GATE);for(let u=0;uQr(u)),l=Jr(s,(u,h,f)=>(Ae(h,d=>{Ft(u,d.tokenTypeIdx)||(u[d.tokenTypeIdx]=f),Ae(d.categoryMatches,p=>{Ft(u,p)||(u[p]=f)})}),u),{});return function(){let u=this.LA(1);return l[u.tokenTypeIdx]}}else return function(){for(let s=0;sa.length===1),i=t.length;if(n&&!r){let a=Qr(t);if(a.length===1&&mr(a[0].categoryMatches)){let l=a[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===l}}else{let s=Jr(a,(l,u,h)=>(l[u.tokenTypeIdx]=!0,Ae(u.categoryMatches,f=>{l[f]=!0}),l),[]);return function(){let l=this.LA(1);return s[l.tokenTypeIdx]===!0}}}else return function(){e:for(let a=0;aoS([s],1)),n=$de(r.length),i=rt(r,s=>{let l={};return Ae(s,u=>{let h=tP(u.partialPath);Ae(h,f=>{l[f]=!0})}),l}),a=r;for(let s=1;s<=e;s++){let l=a;a=$de(l.length);for(let u=0;u{let x=tP(v.partialPath);Ae(x,b=>{i[u][b]=!0})})}}}}return n}function w1(t,e,r,n){let i=new cS(t,Jn.ALTERNATION,n);return e.accept(i),Hde(i.result,r)}function k1(t,e,r,n){let i=new cS(t,r);e.accept(i);let a=i.result,l=new rP(e,t,r).startWalking(),u=new Pn({definition:a}),h=new Pn({definition:l});return Hde([u,h],n)}function hS(t,e){e:for(let r=0;r{let i=e[n];return r===i||i.categoryMatchesMap[r.tokenTypeIdx]})}function Wde(t){return Ba(t,e=>Ba(e,r=>Ba(r,n=>mr(n.categoryMatches))))}var Jn,rP,cS,E1=M(()=>{"use strict";Yt();ob();KE();Vp();ps();(function(t){t[t.OPTION=0]="OPTION",t[t.REPETITION=1]="REPETITION",t[t.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",t[t.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",t[t.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",t[t.ALTERNATION=5]="ALTERNATION"})(Jn||(Jn={}));o(lb,"getProdType");o(uS,"getLookaheadPaths");o(zde,"buildLookaheadFuncForOr");o(Gde,"buildLookaheadFuncForOptionalProd");o(Vde,"buildAlternativesLookAheadFunc");o(Ude,"buildSingleAlternativeLookaheadFunction");rP=class extends Yu{static{o(this,"RestDefinitionFinderWalker")}constructor(e,r,n){super(),this.topProd=e,this.targetOccurrence=r,this.targetProdType=n}startWalking(){return this.walk(this.topProd),this.restDef}checkIsTarget(e,r,n,i){return e.idx===this.targetOccurrence&&this.targetProdType===r?(this.restDef=n.concat(i),!0):!1}walkOption(e,r,n){this.checkIsTarget(e,Jn.OPTION,r,n)||super.walkOption(e,r,n)}walkAtLeastOne(e,r,n){this.checkIsTarget(e,Jn.REPETITION_MANDATORY,r,n)||super.walkOption(e,r,n)}walkAtLeastOneSep(e,r,n){this.checkIsTarget(e,Jn.REPETITION_MANDATORY_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}walkMany(e,r,n){this.checkIsTarget(e,Jn.REPETITION,r,n)||super.walkOption(e,r,n)}walkManySep(e,r,n){this.checkIsTarget(e,Jn.REPETITION_WITH_SEPARATOR,r,n)||super.walkOption(e,r,n)}},cS=class extends ds{static{o(this,"InsideDefinitionFinderVisitor")}constructor(e,r,n){super(),this.targetOccurrence=e,this.targetProdType=r,this.targetRef=n,this.result=[]}checkIsTarget(e,r){e.idx===this.targetOccurrence&&this.targetProdType===r&&(this.targetRef===void 0||e===this.targetRef)&&(this.result=e.definition)}visitOption(e){this.checkIsTarget(e,Jn.OPTION)}visitRepetition(e){this.checkIsTarget(e,Jn.REPETITION)}visitRepetitionMandatory(e){this.checkIsTarget(e,Jn.REPETITION_MANDATORY)}visitRepetitionMandatoryWithSeparator(e){this.checkIsTarget(e,Jn.REPETITION_MANDATORY_WITH_SEPARATOR)}visitRepetitionWithSeparator(e){this.checkIsTarget(e,Jn.REPETITION_WITH_SEPARATOR)}visitAlternation(e){this.checkIsTarget(e,Jn.ALTERNATION)}};o($de,"initializeArrayOfArrays");o(tP,"pathToHashKeys");o($Ye,"isUniquePrefixHash");o(Hde,"lookAheadSequenceFromAlternatives");o(w1,"getLookaheadPathsForOr");o(k1,"getLookaheadPathsForOptionalProd");o(hS,"containsPath");o(qde,"isStrictPrefixOfPath");o(Wde,"areTokenCategoriesNotUsed")});function Yde(t){let e=t.lookaheadStrategy.validate({rules:t.rules,tokenTypes:t.tokenTypes,grammarName:t.grammarName});return rt(e,r=>Object.assign({type:Gi.CUSTOM_LOOKAHEAD_VALIDATION},r))}function Xde(t,e,r,n){let i=ya(t,u=>zYe(u,r)),a=WYe(t,e,r),s=ya(t,u=>UYe(u,r)),l=ya(t,u=>VYe(u,t,n,r));return i.concat(a,s,l)}function zYe(t,e){let r=new nP;t.accept(r);let n=r.allProductions,i=DR(n,GYe),a=Vs(i,l=>l.length>1);return rt(kr(a),l=>{let u=ea(l),h=e.buildDuplicateFoundError(t,l),f=Xs(u),d={message:h,type:Gi.DUPLICATE_PRODUCTIONS,ruleName:t.name,dslName:f,occurrence:u.idx},p=jde(u);return p&&(d.parameter=p),d})}function GYe(t){return`${Xs(t)}_#_${t.idx}_#_${jde(t)}`}function jde(t){return t instanceof Ar?t.terminalType.name:t instanceof fn?t.nonTerminalName:""}function VYe(t,e,r,n){let i=[];if(Jr(e,(s,l)=>l.name===t.name?s+1:s,0)>1){let s=n.buildDuplicateRuleNameError({topLevelRule:t,grammarName:r});i.push({message:s,type:Gi.DUPLICATE_RULE_NAME,ruleName:t.name})}return i}function Kde(t,e,r){let n=[],i;return jn(e,t)||(i=`Invalid rule override, rule: ->${t}<- cannot be overridden in the grammar: ->${r}<-as it is not defined in any of the super grammars `,n.push({message:i,type:Gi.INVALID_RULE_OVERRIDE,ruleName:t})),n}function aP(t,e,r,n=[]){let i=[],a=fS(e.definition);if(mr(a))return[];{let s=t.name;jn(a,t)&&i.push({message:r.buildLeftRecursionError({topLevelRule:t,leftRecursionPath:n}),type:Gi.LEFT_RECURSION,ruleName:s});let u=lf(a,n.concat([t])),h=ya(u,f=>{let d=ln(n);return d.push(f),aP(t,f,r,d)});return i.concat(h)}}function fS(t){let e=[];if(mr(t))return e;let r=ea(t);if(r instanceof fn)e.push(r.referencedRule);else if(r instanceof Pn||r instanceof dn||r instanceof Bn||r instanceof Fn||r instanceof _n||r instanceof zr)e=e.concat(fS(r.definition));else if(r instanceof Dn)e=Qr(rt(r.definition,a=>fS(a.definition)));else if(!(r instanceof Ar))throw Error("non exhaustive match");let n=$p(r),i=t.length>1;if(n&&i){let a=yi(t);return e.concat(fS(a))}else return e}function Qde(t,e){let r=new cb;t.accept(r);let n=r.alternations;return ya(n,a=>{let s=Bu(a.definition);return ya(s,(l,u)=>{let h=lS([l],[],Xu,1);return mr(h)?[{message:e.buildEmptyAlternationError({topLevelRule:t,alternation:a,emptyChoiceIdx:u}),type:Gi.NONE_LAST_EMPTY_ALT,ruleName:t.name,occurrence:a.idx,alternative:u+1}]:[]})})}function Zde(t,e,r){let n=new cb;t.accept(n);let i=n.alternations;return i=cf(i,s=>s.ignoreAmbiguities===!0),ya(i,s=>{let l=s.idx,u=s.maxLookahead||e,h=w1(l,t,u,s),f=HYe(h,s,t,r),d=qYe(h,s,t,r);return f.concat(d)})}function UYe(t,e){let r=new cb;t.accept(r);let n=r.alternations;return ya(n,a=>a.definition.length>255?[{message:e.buildTooManyAlternativesError({topLevelRule:t,alternation:a}),type:Gi.TOO_MANY_ALTS,ruleName:t.name,occurrence:a.idx}]:[])}function Jde(t,e,r){let n=[];return Ae(t,i=>{let a=new iP;i.accept(a);let s=a.allProductions;Ae(s,l=>{let u=lb(l),h=l.maxLookahead||e,f=l.idx,p=k1(f,i,u,h)[0];if(mr(Qr(p))){let m=r.buildEmptyRepetitionError({topLevelRule:i,repetition:l});n.push({message:m,type:Gi.NO_NON_EMPTY_LOOKAHEAD,ruleName:i.name})}})}),n}function HYe(t,e,r,n){let i=[],a=Jr(t,(l,u,h)=>(e.definition[h].ignoreAmbiguities===!0||Ae(u,f=>{let d=[h];Ae(t,(p,m)=>{h!==m&&hS(p,f)&&e.definition[m].ignoreAmbiguities!==!0&&d.push(m)}),d.length>1&&!hS(i,f)&&(i.push(f),l.push({alts:d,path:f}))}),l),[]);return rt(a,l=>{let u=rt(l.alts,f=>f+1);return{message:n.buildAlternationAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:u,prefixPath:l.path}),type:Gi.AMBIGUOUS_ALTS,ruleName:r.name,occurrence:e.idx,alternatives:l.alts}})}function qYe(t,e,r,n){let i=Jr(t,(s,l,u)=>{let h=rt(l,f=>({idx:u,path:f}));return s.concat(h)},[]);return _c(ya(i,s=>{if(e.definition[s.idx].ignoreAmbiguities===!0)return[];let u=s.idx,h=s.path,f=Zr(i,p=>e.definition[p.idx].ignoreAmbiguities!==!0&&p.idx{let m=[p.idx+1,u+1],g=e.idx===0?"":e.idx;return{message:n.buildAlternationPrefixAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:m,prefixPath:p.path}),type:Gi.AMBIGUOUS_PREFIX_ALTS,ruleName:r.name,occurrence:g,alternatives:m}})}))}function WYe(t,e,r){let n=[],i=rt(e,a=>a.name);return Ae(t,a=>{let s=a.name;if(jn(i,s)){let l=r.buildNamespaceConflictError(a);n.push({message:l,type:Gi.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:s})}}),n}var nP,cb,iP,ub=M(()=>{"use strict";Yt();js();ps();E1();ob();Vp();o(Yde,"validateLookahead");o(Xde,"validateGrammar");o(zYe,"validateDuplicateProductions");o(GYe,"identifyProductionForDuplicates");o(jde,"getExtraProductionArgument");nP=class extends ds{static{o(this,"OccurrenceValidationCollector")}constructor(){super(...arguments),this.allProductions=[]}visitNonTerminal(e){this.allProductions.push(e)}visitOption(e){this.allProductions.push(e)}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}visitAlternation(e){this.allProductions.push(e)}visitTerminal(e){this.allProductions.push(e)}};o(VYe,"validateRuleDoesNotAlreadyExist");o(Kde,"validateRuleIsOverridden");o(aP,"validateNoLeftRecursion");o(fS,"getFirstNoneTerminal");cb=class extends ds{static{o(this,"OrCollector")}constructor(){super(...arguments),this.alternations=[]}visitAlternation(e){this.alternations.push(e)}};o(Qde,"validateEmptyOrAlternative");o(Zde,"validateAmbiguousAlternationAlternatives");iP=class extends ds{static{o(this,"RepetitionCollector")}constructor(){super(...arguments),this.allProductions=[]}visitRepetitionWithSeparator(e){this.allProductions.push(e)}visitRepetitionMandatory(e){this.allProductions.push(e)}visitRepetitionMandatoryWithSeparator(e){this.allProductions.push(e)}visitRepetition(e){this.allProductions.push(e)}};o(UYe,"validateTooManyAlts");o(Jde,"validateSomeNonEmptyLookaheadPath");o(HYe,"checkAlternativesAmbiguities");o(qYe,"checkPrefixAlternativesAmbiguities");o(WYe,"checkTerminalAndNoneTerminalsNameSpace")});function epe(t){let e=of(t,{errMsgProvider:Pde}),r={};return Ae(t.rules,n=>{r[n.name]=n}),Bde(r,e.errMsgProvider)}function tpe(t){return t=of(t,{errMsgProvider:Gl}),Xde(t.rules,t.tokenTypes,t.errMsgProvider,t.grammarName)}var rpe=M(()=>{"use strict";Yt();Fde();ub();b1();o(epe,"resolveGrammar");o(tpe,"validateGrammar")});function Bf(t){return jn(ope,t.name)}var npe,ipe,ape,spe,ope,S1,Hp,hb,fb,db,C1=M(()=>{"use strict";Yt();npe="MismatchedTokenException",ipe="NoViableAltException",ape="EarlyExitException",spe="NotAllInputParsedException",ope=[npe,ipe,ape,spe];Object.freeze(ope);o(Bf,"isRecognitionException");S1=class extends Error{static{o(this,"RecognitionException")}constructor(e,r){super(e),this.token=r,this.resyncedTokens=[],Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}},Hp=class extends S1{static{o(this,"MismatchedTokenException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=npe}},hb=class extends S1{static{o(this,"NoViableAltException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=ipe}},fb=class extends S1{static{o(this,"NotAllInputParsedException")}constructor(e,r){super(e,r),this.name=spe}},db=class extends S1{static{o(this,"EarlyExitException")}constructor(e,r,n){super(e,r),this.previousToken=n,this.name=ape}}});function YYe(t,e,r,n,i,a,s){let l=this.getKeyForAutomaticLookahead(n,i),u=this.firstAfterRepMap[l];if(u===void 0){let p=this.getCurrRuleFullName(),m=this.getGAstProductions()[p];u=new a(m,i).startWalking(),this.firstAfterRepMap[l]=u}let h=u.token,f=u.occurrence,d=u.isEndOfRule;this.RULE_STACK.length===1&&d&&h===void 0&&(h=yo,f=1),!(h===void 0||f===void 0)&&this.shouldInRepetitionRecoveryBeTried(h,f,s)&&this.tryInRepetitionRecovery(t,e,r,h)}var sP,lP,oP,dS,cP=M(()=>{"use strict";Up();Yt();C1();VO();js();sP={},lP="InRuleRecoveryException",oP=class extends Error{static{o(this,"InRuleRecoveryException")}constructor(e){super(e),this.name=lP}},dS=class{static{o(this,"Recoverable")}initRecoverable(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=Ft(e,"recoveryEnabled")?e.recoveryEnabled:ms.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=YYe)}getTokenToInsert(e){let r=Qu(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return r.isInsertedInRecovery=!0,r}canTokenTypeBeInsertedInRecovery(e){return!0}canTokenTypeBeDeletedInRecovery(e){return!0}tryInRepetitionRecovery(e,r,n,i){let a=this.findReSyncTokenType(),s=this.exportLexerState(),l=[],u=!1,h=this.LA(1),f=this.LA(1),d=o(()=>{let p=this.LA(0),m=this.errorMessageProvider.buildMismatchTokenMessage({expected:i,actual:h,previous:p,ruleName:this.getCurrRuleFullName()}),g=new Hp(m,h,this.LA(0));g.resyncedTokens=Bu(l),this.SAVE_ERROR(g)},"generateErrorMessage");for(;!u;)if(this.tokenMatcher(f,i)){d();return}else if(n.call(this)){d(),e.apply(this,r);return}else this.tokenMatcher(f,a)?u=!0:(f=this.SKIP_TOKEN(),this.addToResyncTokens(f,l));this.importLexerState(s)}shouldInRepetitionRecoveryBeTried(e,r,n){return!(n===!1||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,r)))}getFollowsForInRuleRecovery(e,r){let n=this.getCurrentGrammarPath(e,r);return this.getNextPossibleTokenTypes(n)}tryInRuleRecovery(e,r){if(this.canRecoverWithSingleTokenInsertion(e,r))return this.getTokenToInsert(e);if(this.canRecoverWithSingleTokenDeletion(e)){let n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new oP("sad sad panda")}canPerformInRuleRecovery(e,r){return this.canRecoverWithSingleTokenInsertion(e,r)||this.canRecoverWithSingleTokenDeletion(e)}canRecoverWithSingleTokenInsertion(e,r){if(!this.canTokenTypeBeInsertedInRecovery(e)||mr(r))return!1;let n=this.LA(1);return os(r,a=>this.tokenMatcher(n,a))!==void 0}canRecoverWithSingleTokenDeletion(e){return this.canTokenTypeBeDeletedInRecovery(e)?this.tokenMatcher(this.LA(2),e):!1}isInCurrentRuleReSyncSet(e){let r=this.getCurrFollowKey(),n=this.getFollowSetFromFollowKey(r);return jn(n,e)}findReSyncTokenType(){let e=this.flattenFollowSet(),r=this.LA(1),n=2;for(;;){let i=os(e,a=>ib(r,a));if(i!==void 0)return i;r=this.LA(n),n++}}getCurrFollowKey(){if(this.RULE_STACK.length===1)return sP;let e=this.getLastExplicitRuleShortName(),r=this.getLastExplicitRuleOccurrenceIndex(),n=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:r,inRule:this.shortRuleNameToFullName(n)}}buildFullFollowKeyStack(){let e=this.RULE_STACK,r=this.RULE_OCCURRENCE_STACK;return rt(e,(n,i)=>i===0?sP:{ruleName:this.shortRuleNameToFullName(n),idxInCallingRule:r[i],inRule:this.shortRuleNameToFullName(e[i-1])})}flattenFollowSet(){let e=rt(this.buildFullFollowKeyStack(),r=>this.getFollowSetFromFollowKey(r));return Qr(e)}getFollowSetFromFollowKey(e){if(e===sP)return[yo];let r=e.ruleName+e.idxInCallingRule+QE+e.inRule;return this.resyncFollows[r]}addToResyncTokens(e,r){return this.tokenMatcher(e,yo)||r.push(e),r}reSyncTo(e){let r=[],n=this.LA(1);for(;this.tokenMatcher(n,e)===!1;)n=this.SKIP_TOKEN(),this.addToResyncTokens(n,r);return Bu(r)}attemptInRepetitionRecovery(e,r,n,i,a,s,l){}getCurrentGrammarPath(e,r){let n=this.getHumanReadableRuleStack(),i=ln(this.RULE_OCCURRENCE_STACK);return{ruleStack:n,occurrenceStack:i,lastTok:e,lastTokOccurrence:r}}getHumanReadableRuleStack(){return rt(this.RULE_STACK,e=>this.shortRuleNameToFullName(e))}};o(YYe,"attemptInRepetitionRecovery")});function pS(t,e,r){return r|e|t}var mS=M(()=>{"use strict";o(pS,"getKeyForAutomaticLookahead")});var Ju,uP=M(()=>{"use strict";Yt();b1();js();ub();E1();Ju=class{static{o(this,"LLkLookaheadStrategy")}constructor(e){var r;this.maxLookahead=(r=e?.maxLookahead)!==null&&r!==void 0?r:ms.maxLookahead}validate(e){let r=this.validateNoLeftRecursion(e.rules);if(mr(r)){let n=this.validateEmptyOrAlternatives(e.rules),i=this.validateAmbiguousAlternationAlternatives(e.rules,this.maxLookahead),a=this.validateSomeNonEmptyLookaheadPath(e.rules,this.maxLookahead);return[...r,...n,...i,...a]}return r}validateNoLeftRecursion(e){return ya(e,r=>aP(r,r,Gl))}validateEmptyOrAlternatives(e){return ya(e,r=>Qde(r,Gl))}validateAmbiguousAlternationAlternatives(e,r){return ya(e,n=>Zde(n,r,Gl))}validateSomeNonEmptyLookaheadPath(e,r){return Jde(e,r,Gl)}buildLookaheadForAlternation(e){return zde(e.prodOccurrence,e.rule,e.maxLookahead,e.hasPredicates,e.dynamicTokensEnabled,Vde)}buildLookaheadForOptional(e){return Gde(e.prodOccurrence,e.rule,e.maxLookahead,e.dynamicTokensEnabled,lb(e.prodType),Ude)}}});function XYe(t){gS.reset(),t.accept(gS);let e=gS.dslMethods;return gS.reset(),e}var yS,hP,gS,lpe=M(()=>{"use strict";Yt();js();mS();ps();uP();yS=class{static{o(this,"LooksAhead")}initLooksAhead(e){this.dynamicTokensEnabled=Ft(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:ms.dynamicTokensEnabled,this.maxLookahead=Ft(e,"maxLookahead")?e.maxLookahead:ms.maxLookahead,this.lookaheadStrategy=Ft(e,"lookaheadStrategy")?e.lookaheadStrategy:new Ju({maxLookahead:this.maxLookahead}),this.lookAheadFuncsCache=new Map}preComputeLookaheadFunctions(e){Ae(e,r=>{this.TRACE_INIT(`${r.name} Rule Lookahead`,()=>{let{alternation:n,repetition:i,option:a,repetitionMandatory:s,repetitionMandatoryWithSeparator:l,repetitionWithSeparator:u}=XYe(r);Ae(n,h=>{let f=h.idx===0?"":h.idx;this.TRACE_INIT(`${Xs(h)}${f}`,()=>{let d=this.lookaheadStrategy.buildLookaheadForAlternation({prodOccurrence:h.idx,rule:r,maxLookahead:h.maxLookahead||this.maxLookahead,hasPredicates:h.hasPredicates,dynamicTokensEnabled:this.dynamicTokensEnabled}),p=pS(this.fullRuleNameToShort[r.name],256,h.idx);this.setLaFuncCache(p,d)})}),Ae(i,h=>{this.computeLookaheadFunc(r,h.idx,768,"Repetition",h.maxLookahead,Xs(h))}),Ae(a,h=>{this.computeLookaheadFunc(r,h.idx,512,"Option",h.maxLookahead,Xs(h))}),Ae(s,h=>{this.computeLookaheadFunc(r,h.idx,1024,"RepetitionMandatory",h.maxLookahead,Xs(h))}),Ae(l,h=>{this.computeLookaheadFunc(r,h.idx,1536,"RepetitionMandatoryWithSeparator",h.maxLookahead,Xs(h))}),Ae(u,h=>{this.computeLookaheadFunc(r,h.idx,1280,"RepetitionWithSeparator",h.maxLookahead,Xs(h))})})})}computeLookaheadFunc(e,r,n,i,a,s){this.TRACE_INIT(`${s}${r===0?"":r}`,()=>{let l=this.lookaheadStrategy.buildLookaheadForOptional({prodOccurrence:r,rule:e,maxLookahead:a||this.maxLookahead,dynamicTokensEnabled:this.dynamicTokensEnabled,prodType:i}),u=pS(this.fullRuleNameToShort[e.name],n,r);this.setLaFuncCache(u,l)})}getKeyForAutomaticLookahead(e,r){let n=this.getLastExplicitRuleShortName();return pS(n,e,r)}getLaFuncFromCache(e){return this.lookAheadFuncsCache.get(e)}setLaFuncCache(e,r){this.lookAheadFuncsCache.set(e,r)}},hP=class extends ds{static{o(this,"DslMethodsCollectorVisitor")}constructor(){super(...arguments),this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}reset(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}}visitOption(e){this.dslMethods.option.push(e)}visitRepetitionWithSeparator(e){this.dslMethods.repetitionWithSeparator.push(e)}visitRepetitionMandatory(e){this.dslMethods.repetitionMandatory.push(e)}visitRepetitionMandatoryWithSeparator(e){this.dslMethods.repetitionMandatoryWithSeparator.push(e)}visitRepetition(e){this.dslMethods.repetition.push(e)}visitAlternation(e){this.dslMethods.alternation.push(e)}},gS=new hP;o(XYe,"collectMethods")});function pP(t,e){isNaN(t.startOffset)===!0?(t.startOffset=e.startOffset,t.endOffset=e.endOffset):t.endOffset{"use strict";o(pP,"setNodeLocationOnlyOffset");o(mP,"setNodeLocationFull");o(cpe,"addTerminalToCst");o(upe,"addNoneTerminalToCst")});function gP(t,e){Object.defineProperty(t,jYe,{enumerable:!1,configurable:!0,writable:!1,value:e})}var jYe,fpe=M(()=>{"use strict";jYe="name";o(gP,"defineNameProp")});function KYe(t,e){let r=qr(t),n=r.length;for(let i=0;is.msg);throw Error(`Errors Detected in CST Visitor <${this.constructor.name}>: + ${a.join(` + +`).replace(/\n/g,` + `)}`)}},"validateVisitor")};return r.prototype=n,r.prototype.constructor=r,r._RULE_NAMES=e,r}function ppe(t,e,r){let n=o(function(){},"derivedConstructor");gP(n,t+"BaseSemanticsWithDefaults");let i=Object.create(r.prototype);return Ae(e,a=>{i[a]=KYe}),n.prototype=i,n.prototype.constructor=n,n}function QYe(t,e){return ZYe(t,e)}function ZYe(t,e){let r=Zr(e,i=>Si(t[i])===!1),n=rt(r,i=>({msg:`Missing visitor method: <${i}> on ${t.constructor.name} CST Visitor.`,type:yP.MISSING_METHOD,methodName:i}));return _c(n)}var yP,mpe=M(()=>{"use strict";Yt();fpe();o(KYe,"defaultVisit");o(dpe,"createBaseSemanticVisitorConstructor");o(ppe,"createBaseVisitorConstructorWithDefaults");(function(t){t[t.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",t[t.MISSING_METHOD=1]="MISSING_METHOD"})(yP||(yP={}));o(QYe,"validateVisitor");o(ZYe,"validateMissingCstMethods")});var TS,gpe=M(()=>{"use strict";hpe();Yt();mpe();js();TS=class{static{o(this,"TreeBuilder")}initTreeBuilder(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=Ft(e,"nodeLocationTracking")?e.nodeLocationTracking:ms.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=si,this.cstFinallyStateUpdate=si,this.cstPostTerminal=si,this.cstPostNonTerminal=si,this.cstPostRule=si;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=mP,this.setNodeLocationFromNode=mP,this.cstPostRule=si,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=si,this.setNodeLocationFromNode=si,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=pP,this.setNodeLocationFromNode=pP,this.cstPostRule=si,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=si,this.setNodeLocationFromNode=si,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=si,this.setNodeLocationFromNode=si,this.cstPostRule=si,this.setInitialNodeLocation=si;else throw Error(`Invalid config option: "${e.nodeLocationTracking}"`)}setInitialNodeLocationOnlyOffsetRecovery(e){e.location={startOffset:NaN,endOffset:NaN}}setInitialNodeLocationOnlyOffsetRegular(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}}setInitialNodeLocationFullRecovery(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}}setInitialNodeLocationFullRegular(e){let r=this.LA(1);e.location={startOffset:r.startOffset,startLine:r.startLine,startColumn:r.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}}cstInvocationStateUpdate(e){let r={name:e,children:Object.create(null)};this.setInitialNodeLocation(r),this.CST_STACK.push(r)}cstFinallyStateUpdate(){this.CST_STACK.pop()}cstPostRuleFull(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?(n.endOffset=r.endOffset,n.endLine=r.endLine,n.endColumn=r.endColumn):(n.startOffset=NaN,n.startLine=NaN,n.startColumn=NaN)}cstPostRuleOnlyOffset(e){let r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?n.endOffset=r.endOffset:n.startOffset=NaN}cstPostTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];cpe(n,r,e),this.setNodeLocationFromToken(n.location,r)}cstPostNonTerminal(e,r){let n=this.CST_STACK[this.CST_STACK.length-1];upe(n,r,e),this.setNodeLocationFromNode(n.location,e.location)}getBaseCstVisitorConstructor(){if(xr(this.baseCstVisitorConstructor)){let e=dpe(this.className,qr(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor}getBaseCstVisitorConstructorWithDefaults(){if(xr(this.baseCstVisitorWithDefaultsConstructor)){let e=ppe(this.className,qr(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor}getLastExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-1]}getPreviousExplicitRuleShortName(){let e=this.RULE_STACK;return e[e.length-2]}getLastExplicitRuleOccurrenceIndex(){let e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]}}});var wS,ype=M(()=>{"use strict";js();wS=class{static{o(this,"LexerAdapter")}initLexerAdapter(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1}set input(e){if(this.selfAnalysisDone!==!0)throw Error("Missing invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length}get input(){return this.tokVector}SKIP_TOKEN(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):A1}LA(e){let r=this.currIdx+e;return r<0||this.tokVectorLength<=r?A1:this.tokVector[r]}consumeToken(){this.currIdx++}exportLexerState(){return this.currIdx}importLexerState(e){this.currIdx=e}resetLexerState(){this.currIdx=-1}moveToTerminatedState(){this.currIdx=this.tokVector.length-1}getLexerPosition(){return this.exportLexerState()}}});var kS,vpe=M(()=>{"use strict";Yt();C1();js();b1();ub();ps();kS=class{static{o(this,"RecognizerApi")}ACTION(e){return e.call(this)}consume(e,r,n){return this.consumeInternal(r,e,n)}subrule(e,r,n){return this.subruleInternal(r,e,n)}option(e,r){return this.optionInternal(r,e)}or(e,r){return this.orInternal(r,e)}many(e,r){return this.manyInternal(e,r)}atLeastOne(e,r){return this.atLeastOneInternal(e,r)}CONSUME(e,r){return this.consumeInternal(e,0,r)}CONSUME1(e,r){return this.consumeInternal(e,1,r)}CONSUME2(e,r){return this.consumeInternal(e,2,r)}CONSUME3(e,r){return this.consumeInternal(e,3,r)}CONSUME4(e,r){return this.consumeInternal(e,4,r)}CONSUME5(e,r){return this.consumeInternal(e,5,r)}CONSUME6(e,r){return this.consumeInternal(e,6,r)}CONSUME7(e,r){return this.consumeInternal(e,7,r)}CONSUME8(e,r){return this.consumeInternal(e,8,r)}CONSUME9(e,r){return this.consumeInternal(e,9,r)}SUBRULE(e,r){return this.subruleInternal(e,0,r)}SUBRULE1(e,r){return this.subruleInternal(e,1,r)}SUBRULE2(e,r){return this.subruleInternal(e,2,r)}SUBRULE3(e,r){return this.subruleInternal(e,3,r)}SUBRULE4(e,r){return this.subruleInternal(e,4,r)}SUBRULE5(e,r){return this.subruleInternal(e,5,r)}SUBRULE6(e,r){return this.subruleInternal(e,6,r)}SUBRULE7(e,r){return this.subruleInternal(e,7,r)}SUBRULE8(e,r){return this.subruleInternal(e,8,r)}SUBRULE9(e,r){return this.subruleInternal(e,9,r)}OPTION(e){return this.optionInternal(e,0)}OPTION1(e){return this.optionInternal(e,1)}OPTION2(e){return this.optionInternal(e,2)}OPTION3(e){return this.optionInternal(e,3)}OPTION4(e){return this.optionInternal(e,4)}OPTION5(e){return this.optionInternal(e,5)}OPTION6(e){return this.optionInternal(e,6)}OPTION7(e){return this.optionInternal(e,7)}OPTION8(e){return this.optionInternal(e,8)}OPTION9(e){return this.optionInternal(e,9)}OR(e){return this.orInternal(e,0)}OR1(e){return this.orInternal(e,1)}OR2(e){return this.orInternal(e,2)}OR3(e){return this.orInternal(e,3)}OR4(e){return this.orInternal(e,4)}OR5(e){return this.orInternal(e,5)}OR6(e){return this.orInternal(e,6)}OR7(e){return this.orInternal(e,7)}OR8(e){return this.orInternal(e,8)}OR9(e){return this.orInternal(e,9)}MANY(e){this.manyInternal(0,e)}MANY1(e){this.manyInternal(1,e)}MANY2(e){this.manyInternal(2,e)}MANY3(e){this.manyInternal(3,e)}MANY4(e){this.manyInternal(4,e)}MANY5(e){this.manyInternal(5,e)}MANY6(e){this.manyInternal(6,e)}MANY7(e){this.manyInternal(7,e)}MANY8(e){this.manyInternal(8,e)}MANY9(e){this.manyInternal(9,e)}MANY_SEP(e){this.manySepFirstInternal(0,e)}MANY_SEP1(e){this.manySepFirstInternal(1,e)}MANY_SEP2(e){this.manySepFirstInternal(2,e)}MANY_SEP3(e){this.manySepFirstInternal(3,e)}MANY_SEP4(e){this.manySepFirstInternal(4,e)}MANY_SEP5(e){this.manySepFirstInternal(5,e)}MANY_SEP6(e){this.manySepFirstInternal(6,e)}MANY_SEP7(e){this.manySepFirstInternal(7,e)}MANY_SEP8(e){this.manySepFirstInternal(8,e)}MANY_SEP9(e){this.manySepFirstInternal(9,e)}AT_LEAST_ONE(e){this.atLeastOneInternal(0,e)}AT_LEAST_ONE1(e){return this.atLeastOneInternal(1,e)}AT_LEAST_ONE2(e){this.atLeastOneInternal(2,e)}AT_LEAST_ONE3(e){this.atLeastOneInternal(3,e)}AT_LEAST_ONE4(e){this.atLeastOneInternal(4,e)}AT_LEAST_ONE5(e){this.atLeastOneInternal(5,e)}AT_LEAST_ONE6(e){this.atLeastOneInternal(6,e)}AT_LEAST_ONE7(e){this.atLeastOneInternal(7,e)}AT_LEAST_ONE8(e){this.atLeastOneInternal(8,e)}AT_LEAST_ONE9(e){this.atLeastOneInternal(9,e)}AT_LEAST_ONE_SEP(e){this.atLeastOneSepFirstInternal(0,e)}AT_LEAST_ONE_SEP1(e){this.atLeastOneSepFirstInternal(1,e)}AT_LEAST_ONE_SEP2(e){this.atLeastOneSepFirstInternal(2,e)}AT_LEAST_ONE_SEP3(e){this.atLeastOneSepFirstInternal(3,e)}AT_LEAST_ONE_SEP4(e){this.atLeastOneSepFirstInternal(4,e)}AT_LEAST_ONE_SEP5(e){this.atLeastOneSepFirstInternal(5,e)}AT_LEAST_ONE_SEP6(e){this.atLeastOneSepFirstInternal(6,e)}AT_LEAST_ONE_SEP7(e){this.atLeastOneSepFirstInternal(7,e)}AT_LEAST_ONE_SEP8(e){this.atLeastOneSepFirstInternal(8,e)}AT_LEAST_ONE_SEP9(e){this.atLeastOneSepFirstInternal(9,e)}RULE(e,r,n=_1){if(jn(this.definedRulesNames,e)){let s={message:Gl.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),type:Gi.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);let i=this.defineRule(e,r,n);return this[e]=i,i}OVERRIDE_RULE(e,r,n=_1){let i=Kde(e,this.definedRulesNames,this.className);this.definitionErrors=this.definitionErrors.concat(i);let a=this.defineRule(e,r,n);return this[e]=a,a}BACKTRACK(e,r){return function(){this.isBackTrackingStack.push(1);let n=this.saveRecogState();try{return e.apply(this,r),!0}catch(i){if(Bf(i))return!1;throw i}finally{this.reloadRecogState(n),this.isBackTrackingStack.pop()}}}getGAstProductions(){return this.gastProductionsCache}getSerializedGastProductions(){return XE(kr(this.gastProductionsCache))}}});var ES,xpe=M(()=>{"use strict";Yt();mS();C1();E1();ob();js();cP();Up();Vp();ES=class{static{o(this,"RecognizerEngine")}initRecognizerEngine(e,r){if(this.className=this.constructor.name,this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=v1,this.subruleIdx=0,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},Ft(r,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a property. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 + For Further details.`);if(Bt(e)){if(mr(e))throw Error(`A Token Vocabulary cannot be empty. + Note that the first argument for the parser constructor + is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 + For Further details.`)}if(Bt(e))this.tokensMap=Jr(e,(a,s)=>(a[s.name]=s,a),{});else if(Ft(e,"modes")&&Ba(Qr(kr(e.modes)),Ade)){let a=Qr(kr(e.modes)),s=qm(a);this.tokensMap=Jr(s,(l,u)=>(l[u.name]=u,l),{})}else if(Sn(e))this.tokensMap=ln(e);else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=yo;let n=Ft(e,"modes")?Qr(kr(e.modes)):kr(e),i=Ba(n,a=>mr(a.categoryMatches));this.tokenMatcher=i?v1:Xu,ju(kr(this.tokensMap))}defineRule(e,r,n){if(this.selfAnalysisDone)throw Error(`Grammar rule <${e}> may not be defined after the 'performSelfAnalysis' method has been called' +Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);let i=Ft(n,"resyncEnabled")?n.resyncEnabled:_1.resyncEnabled,a=Ft(n,"recoveryValueFunc")?n.recoveryValueFunc:_1.recoveryValueFunc,s=this.ruleShortNameIdx<<12;this.ruleShortNameIdx++,this.shortRuleNameToFull[s]=e,this.fullRuleNameToShort[e]=s;let l;return this.outputCst===!0?l=o(function(...f){try{this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f);let d=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(d),d}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTry"):l=o(function(...f){try{return this.ruleInvocationStateUpdate(s,e,this.subruleIdx),r.apply(this,f)}catch(d){return this.invokeRuleCatch(d,i,a)}finally{this.ruleFinallyStateUpdate()}},"invokeRuleWithTryCst"),Object.assign(l,{ruleName:e,originalGrammarAction:r})}invokeRuleCatch(e,r,n){let i=this.RULE_STACK.length===1,a=r&&!this.isBackTracking()&&this.recoveryEnabled;if(Bf(e)){let s=e;if(a){let l=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(l))if(s.resyncedTokens=this.reSyncTo(l),this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];return u.recoveredNode=!0,u}else return n(e);else{if(this.outputCst){let u=this.CST_STACK[this.CST_STACK.length-1];u.recoveredNode=!0,s.partialCstResult=u}throw s}}else{if(i)return this.moveToTerminatedState(),n(e);throw s}}else throw e}optionInternal(e,r){let n=this.getKeyForAutomaticLookahead(512,r);return this.optionInternalLogic(e,r,n)}optionInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof e!="function"){a=e.DEF;let s=e.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=e;if(i.call(this)===!0)return a.call(this)}atLeastOneInternal(e,r){let n=this.getKeyForAutomaticLookahead(1024,e);return this.atLeastOneInternalLogic(e,r,n)}atLeastOneInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let s=r.GATE;if(s!==void 0){let l=i;i=o(()=>s.call(this)&&l.call(this),"lookAheadFunc")}}else a=r;if(i.call(this)===!0){let s=this.doSingleRepetition(a);for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a)}else throw this.raiseEarlyExitException(e,Jn.REPETITION_MANDATORY,r.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,r],i,1024,e,sS)}atLeastOneSepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1536,e);this.atLeastOneSepFirstInternalLogic(e,r,n)}atLeastOneSepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,sb],l,1536,e,sb)}else throw this.raiseEarlyExitException(e,Jn.REPETITION_MANDATORY_WITH_SEPARATOR,r.ERR_MSG)}manyInternal(e,r){let n=this.getKeyForAutomaticLookahead(768,e);return this.manyInternalLogic(e,r,n)}manyInternalLogic(e,r,n){let i=this.getLaFuncFromCache(n),a;if(typeof r!="function"){a=r.DEF;let l=r.GATE;if(l!==void 0){let u=i;i=o(()=>l.call(this)&&u.call(this),"lookaheadFunction")}}else a=r;let s=!0;for(;i.call(this)===!0&&s===!0;)s=this.doSingleRepetition(a);this.attemptInRepetitionRecovery(this.manyInternal,[e,r],i,768,e,aS,s)}manySepFirstInternal(e,r){let n=this.getKeyForAutomaticLookahead(1280,e);this.manySepFirstInternalLogic(e,r,n)}manySepFirstInternalLogic(e,r,n){let i=r.DEF,a=r.SEP;if(this.getLaFuncFromCache(n).call(this)===!0){i.call(this);let l=o(()=>this.tokenMatcher(this.LA(1),a),"separatorLookAheadFunc");for(;this.tokenMatcher(this.LA(1),a)===!0;)this.CONSUME(a),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,a,l,i,ab],l,1280,e,ab)}}repetitionSepSecondInternal(e,r,n,i,a){for(;n();)this.CONSUME(r),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,r,n,i,a],n,1536,e,a)}doSingleRepetition(e){let r=this.getLexerPosition();return e.call(this),this.getLexerPosition()>r}orInternal(e,r){let n=this.getKeyForAutomaticLookahead(256,r),i=Bt(e)?e:e.DEF,s=this.getLaFuncFromCache(n).call(this,i);if(s!==void 0)return i[s].ALT.call(this);this.raiseNoAltException(r,e.ERR_MSG)}ruleFinallyStateUpdate(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){let e=this.LA(1),r=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new fb(r,e))}}subruleInternal(e,r,n){let i;try{let a=n!==void 0?n.ARGS:void 0;return this.subruleIdx=r,i=e.apply(this,a),this.cstPostNonTerminal(i,n!==void 0&&n.LABEL!==void 0?n.LABEL:e.ruleName),i}catch(a){throw this.subruleInternalError(a,n,e.ruleName)}}subruleInternalError(e,r,n){throw Bf(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,r!==void 0&&r.LABEL!==void 0?r.LABEL:n),delete e.partialCstResult),e}consumeInternal(e,r,n){let i;try{let a=this.LA(1);this.tokenMatcher(a,e)===!0?(this.consumeToken(),i=a):this.consumeInternalError(e,a,n)}catch(a){i=this.consumeInternalRecovery(e,r,a)}return this.cstPostTerminal(n!==void 0&&n.LABEL!==void 0?n.LABEL:e.name,i),i}consumeInternalError(e,r,n){let i,a=this.LA(0);throw n!==void 0&&n.ERR_MSG?i=n.ERR_MSG:i=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:r,previous:a,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new Hp(i,r,a))}consumeInternalRecovery(e,r,n){if(this.recoveryEnabled&&n.name==="MismatchedTokenException"&&!this.isBackTracking()){let i=this.getFollowsForInRuleRecovery(e,r);try{return this.tryInRuleRecovery(e,i)}catch(a){throw a.name===lP?n:a}}else throw n}saveRecogState(){let e=this.errors,r=ln(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:r,CST_STACK:this.CST_STACK}}reloadRecogState(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK}ruleInvocationStateUpdate(e,r,n){this.RULE_OCCURRENCE_STACK.push(n),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(r)}isBackTracking(){return this.isBackTrackingStack.length!==0}getCurrRuleFullName(){let e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]}shortRuleNameToFullName(e){return this.shortRuleNameToFull[e]}isAtEndOfInput(){return this.tokenMatcher(this.LA(1),yo)}reset(){this.resetLexerState(),this.subruleIdx=0,this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]}}});var SS,bpe=M(()=>{"use strict";C1();Yt();E1();js();SS=class{static{o(this,"ErrorHandler")}initErrorHandler(e){this._errors=[],this.errorMessageProvider=Ft(e,"errorMessageProvider")?e.errorMessageProvider:ms.errorMessageProvider}SAVE_ERROR(e){if(Bf(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:ln(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")}get errors(){return ln(this._errors)}set errors(e){this._errors=e}raiseEarlyExitException(e,r,n){let i=this.getCurrRuleFullName(),a=this.getGAstProductions()[i],l=k1(e,a,r,this.maxLookahead)[0],u=[];for(let f=1;f<=this.maxLookahead;f++)u.push(this.LA(f));let h=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:l,actual:u,previous:this.LA(0),customUserDescription:n,ruleName:i});throw this.SAVE_ERROR(new db(h,this.LA(1),this.LA(0)))}raiseNoAltException(e,r){let n=this.getCurrRuleFullName(),i=this.getGAstProductions()[n],a=w1(e,i,this.maxLookahead),s=[];for(let h=1;h<=this.maxLookahead;h++)s.push(this.LA(h));let l=this.LA(0),u=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:a,actual:s,previous:l,customUserDescription:r,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new hb(u,this.LA(1),l))}}});var CS,Tpe=M(()=>{"use strict";ob();Yt();CS=class{static{o(this,"ContentAssist")}initContentAssist(){}computeContentAssist(e,r){let n=this.gastProductionsCache[e];if(xr(n))throw Error(`Rule ->${e}<- does not exist in this grammar.`);return lS([n],r,this.tokenMatcher,this.maxLookahead)}getNextPossibleTokenTypes(e){let r=ea(e.ruleStack),i=this.getGAstProductions()[r];return new iS(i,e).startWalking()}}});function mb(t,e,r,n=!1){_S(r);let i=ga(this.recordingProdStack),a=Si(e)?e:e.DEF,s=new t({definition:[],idx:r});return n&&(s.separator=e.SEP),Ft(e,"MAX_LOOKAHEAD")&&(s.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(s),a.call(this),i.definition.push(s),this.recordingProdStack.pop(),DS}function tXe(t,e){_S(e);let r=ga(this.recordingProdStack),n=Bt(t)===!1,i=n===!1?t:t.DEF,a=new Dn({definition:[],idx:e,ignoreAmbiguities:n&&t.IGNORE_AMBIGUITIES===!0});Ft(t,"MAX_LOOKAHEAD")&&(a.maxLookahead=t.MAX_LOOKAHEAD);let s=G2(i,l=>Si(l.GATE));return a.hasPredicates=s,r.definition.push(a),Ae(i,l=>{let u=new Pn({definition:[]});a.definition.push(u),Ft(l,"IGNORE_AMBIGUITIES")?u.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:Ft(l,"GATE")&&(u.ignoreAmbiguities=!0),this.recordingProdStack.push(u),l.ALT.call(this),this.recordingProdStack.pop()}),DS}function Epe(t){return t===0?"":`${t}`}function _S(t){if(t<0||t>kpe){let e=new Error(`Invalid DSL Method idx value: <${t}> + Idx value must be a none negative value smaller than ${kpe+1}`);throw e.KNOWN_RECORDER_ERROR=!0,e}}var DS,wpe,kpe,Spe,Cpe,eXe,AS,Ape=M(()=>{"use strict";Yt();ps();rb();Vp();Up();js();mS();DS={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(DS);wpe=!0,kpe=Math.pow(2,8)-1,Spe=Pf({name:"RECORDING_PHASE_TOKEN",pattern:Zn.NA});ju([Spe]);Cpe=Qu(Spe,`This IToken indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(Cpe);eXe={name:`This CSTNode indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},AS=class{static{o(this,"GastRecorder")}initGastRecorder(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1}enableRecording(){this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",()=>{for(let e=0;e<10;e++){let r=e>0?e:"";this[`CONSUME${r}`]=function(n,i){return this.consumeInternalRecord(n,e,i)},this[`SUBRULE${r}`]=function(n,i){return this.subruleInternalRecord(n,e,i)},this[`OPTION${r}`]=function(n){return this.optionInternalRecord(n,e)},this[`OR${r}`]=function(n){return this.orInternalRecord(n,e)},this[`MANY${r}`]=function(n){this.manyInternalRecord(e,n)},this[`MANY_SEP${r}`]=function(n){this.manySepFirstInternalRecord(e,n)},this[`AT_LEAST_ONE${r}`]=function(n){this.atLeastOneInternalRecord(e,n)},this[`AT_LEAST_ONE_SEP${r}`]=function(n){this.atLeastOneSepFirstInternalRecord(e,n)}}this.consume=function(e,r,n){return this.consumeInternalRecord(r,e,n)},this.subrule=function(e,r,n){return this.subruleInternalRecord(r,e,n)},this.option=function(e,r){return this.optionInternalRecord(r,e)},this.or=function(e,r){return this.orInternalRecord(r,e)},this.many=function(e,r){this.manyInternalRecord(e,r)},this.atLeastOne=function(e,r){this.atLeastOneInternalRecord(e,r)},this.ACTION=this.ACTION_RECORD,this.BACKTRACK=this.BACKTRACK_RECORD,this.LA=this.LA_RECORD})}disableRecording(){this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",()=>{let e=this;for(let r=0;r<10;r++){let n=r>0?r:"";delete e[`CONSUME${n}`],delete e[`SUBRULE${n}`],delete e[`OPTION${n}`],delete e[`OR${n}`],delete e[`MANY${n}`],delete e[`MANY_SEP${n}`],delete e[`AT_LEAST_ONE${n}`],delete e[`AT_LEAST_ONE_SEP${n}`]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})}ACTION_RECORD(e){}BACKTRACK_RECORD(e,r){return()=>!0}LA_RECORD(e){return A1}topLevelRuleRecord(e,r){try{let n=new fs({definition:[],name:e});return n.name=e,this.recordingProdStack.push(n),r.call(this),this.recordingProdStack.pop(),n}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+` + This error was thrown during the "grammar recording phase" For more info see: + https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}}optionInternalRecord(e,r){return mb.call(this,dn,e,r)}atLeastOneInternalRecord(e,r){mb.call(this,Bn,r,e)}atLeastOneSepFirstInternalRecord(e,r){mb.call(this,Fn,r,e,wpe)}manyInternalRecord(e,r){mb.call(this,zr,r,e)}manySepFirstInternalRecord(e,r){mb.call(this,_n,r,e,wpe)}orInternalRecord(e,r){return tXe.call(this,e,r)}subruleInternalRecord(e,r,n){if(_S(r),!e||Ft(e,"ruleName")===!1){let l=new Error(` argument is invalid expecting a Parser method reference but got: <${JSON.stringify(e)}> + inside top level rule: <${this.recordingProdStack[0].name}>`);throw l.KNOWN_RECORDER_ERROR=!0,l}let i=ga(this.recordingProdStack),a=e.ruleName,s=new fn({idx:r,nonTerminalName:a,label:n?.LABEL,referencedRule:void 0});return i.definition.push(s),this.outputCst?eXe:DS}consumeInternalRecord(e,r,n){if(_S(r),!KO(e)){let s=new Error(` argument is invalid expecting a TokenType reference but got: <${JSON.stringify(e)}> + inside top level rule: <${this.recordingProdStack[0].name}>`);throw s.KNOWN_RECORDER_ERROR=!0,s}let i=ga(this.recordingProdStack),a=new Ar({idx:r,terminalType:e,label:n?.LABEL});return i.definition.push(a),Cpe}};o(mb,"recordProd");o(tXe,"recordOrProd");o(Epe,"getIdxSuffix");o(_S,"assertMethodIdxIsValid")});var LS,_pe=M(()=>{"use strict";Yt();d1();js();LS=class{static{o(this,"PerformanceTracer")}initPerformanceTracer(e){if(Ft(e,"traceInitPerf")){let r=e.traceInitPerf,n=typeof r=="number";this.traceInitMaxIdent=n?r:1/0,this.traceInitPerf=n?r>0:r}else this.traceInitMaxIdent=0,this.traceInitPerf=ms.traceInitPerf;this.traceInitIndent=-1}TRACE_INIT(e,r){if(this.traceInitPerf===!0){this.traceInitIndent++;let n=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <${e}>`);let{time:i,value:a}=Jx(r),s=i>10?console.warn:console.log;return this.traceInitIndent time: ${i}ms`),this.traceInitIndent--,a}else return r()}}});function Dpe(t,e){e.forEach(r=>{let n=r.prototype;Object.getOwnPropertyNames(n).forEach(i=>{if(i==="constructor")return;let a=Object.getOwnPropertyDescriptor(n,i);a&&(a.get||a.set)?Object.defineProperty(t.prototype,i,a):t.prototype[i]=r.prototype[i]})})}var Lpe=M(()=>{"use strict";o(Dpe,"applyMixins")});function RS(t=void 0){return function(){return t}}var A1,ms,_1,Gi,gb,yb,js=M(()=>{"use strict";Yt();d1();sde();Up();b1();rpe();cP();lpe();gpe();ype();vpe();xpe();bpe();Tpe();Ape();_pe();Lpe();ub();A1=Qu(yo,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(A1);ms=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:Zu,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1}),_1=Object.freeze({recoveryValueFunc:o(()=>{},"recoveryValueFunc"),resyncEnabled:!0});(function(t){t[t.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",t[t.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",t[t.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",t[t.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",t[t.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",t[t.LEFT_RECURSION=5]="LEFT_RECURSION",t[t.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",t[t.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",t[t.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",t[t.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",t[t.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",t[t.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",t[t.TOO_MANY_ALTS=12]="TOO_MANY_ALTS",t[t.CUSTOM_LOOKAHEAD_VALIDATION=13]="CUSTOM_LOOKAHEAD_VALIDATION"})(Gi||(Gi={}));o(RS,"EMPTY_ALT");gb=class t{static{o(this,"Parser")}static performSelfAnalysis(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")}performSelfAnalysis(){this.TRACE_INIT("performSelfAnalysis",()=>{let e;this.selfAnalysisDone=!0;let r=this.className;this.TRACE_INIT("toFastProps",()=>{eb(this)}),this.TRACE_INIT("Grammar Recording",()=>{try{this.enableRecording(),Ae(this.definedRulesNames,i=>{let s=this[i].originalGrammarAction,l;this.TRACE_INIT(`${i} Rule`,()=>{l=this.topLevelRuleRecord(i,s)}),this.gastProductionsCache[i]=l})}finally{this.disableRecording()}});let n=[];if(this.TRACE_INIT("Grammar Resolving",()=>{n=epe({rules:kr(this.gastProductionsCache)}),this.definitionErrors=this.definitionErrors.concat(n)}),this.TRACE_INIT("Grammar Validations",()=>{if(mr(n)&&this.skipValidations===!1){let i=tpe({rules:kr(this.gastProductionsCache),tokenTypes:kr(this.tokensMap),errMsgProvider:Gl,grammarName:r}),a=Yde({lookaheadStrategy:this.lookaheadStrategy,rules:kr(this.gastProductionsCache),tokenTypes:kr(this.tokensMap),grammarName:r});this.definitionErrors=this.definitionErrors.concat(i,a)}}),mr(this.definitionErrors)&&(this.recoveryEnabled&&this.TRACE_INIT("computeAllProdsFollows",()=>{let i=ade(kr(this.gastProductionsCache));this.resyncFollows=i}),this.TRACE_INIT("ComputeLookaheadFunctions",()=>{var i,a;(a=(i=this.lookaheadStrategy).initialize)===null||a===void 0||a.call(i,{rules:kr(this.gastProductionsCache)}),this.preComputeLookaheadFunctions(kr(this.gastProductionsCache))})),!t.DEFER_DEFINITION_ERRORS_HANDLING&&!mr(this.definitionErrors))throw e=rt(this.definitionErrors,i=>i.message),new Error(`Parser Definition Errors detected: + ${e.join(` +------------------------------- +`)}`)})}constructor(e,r){this.definitionErrors=[],this.selfAnalysisDone=!1;let n=this;if(n.initErrorHandler(r),n.initLexerAdapter(),n.initLooksAhead(r),n.initRecognizerEngine(e,r),n.initRecoverable(r),n.initTreeBuilder(r),n.initContentAssist(),n.initGastRecorder(r),n.initPerformanceTracer(r),Ft(r,"ignoredIssues"))throw new Error(`The IParserConfig property has been deprecated. + Please use the flag on the relevant DSL method instead. + See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES + For further details.`);this.skipValidations=Ft(r,"skipValidations")?r.skipValidations:ms.skipValidations}};gb.DEFER_DEFINITION_ERRORS_HANDLING=!1;Dpe(gb,[dS,yS,TS,wS,ES,kS,SS,CS,AS,LS]);yb=class extends gb{static{o(this,"EmbeddedActionsParser")}constructor(e,r=ms){let n=ln(r);n.outputCst=!1,super(e,n)}}});var Rpe=M(()=>{"use strict";ps()});var Npe=M(()=>{"use strict"});var Mpe=M(()=>{"use strict";Rpe();Npe()});var Ipe=M(()=>{"use strict";FO()});var Ff=M(()=>{"use strict";FO();js();rb();Up();E1();uP();b1();C1();QO();ps();ps();Mpe();Ipe()});function qp(t,e,r){return`${t.name}_${e}_${r}`}function Fpe(t){let e={decisionMap:{},decisionStates:[],ruleToStartState:new Map,ruleToStopState:new Map,states:[]};lXe(e,t);let r=t.length;for(let n=0;n$pe(t,e,s));return N1(t,e,n,r,...i)}function pXe(t,e,r){let n=ia(t,e,r,{type:$f});zf(t,n);let i=N1(t,e,n,r,Wp(t,e,r));return mXe(t,e,r,i)}function Wp(t,e,r){let n=Zr(rt(r.definition,i=>$pe(t,e,i)),i=>i!==void 0);return n.length===1?n[0]:n.length===0?void 0:yXe(t,n)}function zpe(t,e,r,n,i){let a=n.left,s=n.right,l=ia(t,e,r,{type:oXe});zf(t,l);let u=ia(t,e,r,{type:Bpe});return a.loopback=l,u.loopback=l,t.decisionMap[qp(e,i?"RepetitionMandatoryWithSeparator":"RepetitionMandatory",r.idx)]=l,Di(s,l),i===void 0?(Di(l,a),Di(l,u)):(Di(l,u),Di(l,i.left),Di(i.right,a)),{left:a,right:u}}function Gpe(t,e,r,n,i){let a=n.left,s=n.right,l=ia(t,e,r,{type:sXe});zf(t,l);let u=ia(t,e,r,{type:Bpe}),h=ia(t,e,r,{type:aXe});return l.loopback=h,u.loopback=h,Di(l,a),Di(l,u),Di(s,h),i!==void 0?(Di(h,u),Di(h,i.left),Di(i.right,a)):Di(h,l),t.decisionMap[qp(e,i?"RepetitionWithSeparator":"Repetition",r.idx)]=l,{left:l,right:u}}function mXe(t,e,r,n){let i=n.left,a=n.right;return Di(i,a),t.decisionMap[qp(e,"Option",r.idx)]=i,n}function zf(t,e){return t.decisionStates.push(e),e.decision=t.decisionStates.length-1,e.decision}function N1(t,e,r,n,...i){let a=ia(t,e,n,{type:iXe,start:r});r.end=a;for(let l of i)l!==void 0?(Di(r,l.left),Di(l.right,a)):Di(r,a);let s={left:r,right:a};return t.decisionMap[qp(e,gXe(n),n.idx)]=r,s}function gXe(t){if(t instanceof Dn)return"Alternation";if(t instanceof dn)return"Option";if(t instanceof zr)return"Repetition";if(t instanceof _n)return"RepetitionWithSeparator";if(t instanceof Bn)return"RepetitionMandatory";if(t instanceof Fn)return"RepetitionMandatoryWithSeparator";throw new Error("Invalid production type encountered")}function yXe(t,e){let r=e.length;for(let a=0;a{"use strict";Vm();ER();Ff();o(qp,"buildATNKey");$f=1,nXe=2,Ope=4,Ppe=5,R1=7,iXe=8,aXe=9,sXe=10,oXe=11,Bpe=12,vb=class{static{o(this,"AbstractTransition")}constructor(e){this.target=e}isEpsilon(){return!1}},D1=class extends vb{static{o(this,"AtomTransition")}constructor(e,r){super(e),this.tokenType=r}},xb=class extends vb{static{o(this,"EpsilonTransition")}constructor(e){super(e)}isEpsilon(){return!0}},L1=class extends vb{static{o(this,"RuleTransition")}constructor(e,r,n){super(e),this.rule=r,this.followState=n}isEpsilon(){return!0}};o(Fpe,"createATN");o(lXe,"createRuleStartAndStopATNStates");o($pe,"atom");o(cXe,"repetition");o(uXe,"repetitionSep");o(hXe,"repetitionMandatory");o(fXe,"repetitionMandatorySep");o(dXe,"alternation");o(pXe,"option");o(Wp,"block");o(zpe,"plus");o(Gpe,"star");o(mXe,"optional");o(zf,"defineDecisionState");o(N1,"makeAlts");o(gXe,"getProdType");o(yXe,"makeBlock");o(xP,"tokenRef");o(vXe,"ruleRef");o(xXe,"buildRuleHandle");o(Di,"epsilon");o(ia,"newState");o(bP,"addTransition");o(bXe,"removeState")});function TP(t,e=!0){return`${e?`a${t.alt}`:""}s${t.state.stateNumber}:${t.stack.map(r=>r.stateNumber.toString()).join("_")}`}var bb,M1,Upe=M(()=>{"use strict";Vm();bb={},M1=class{static{o(this,"ATNConfigSet")}constructor(){this.map={},this.configs=[]}get size(){return this.configs.length}finalize(){this.map={}}add(e){let r=TP(e);r in this.map||(this.map[r]=this.configs.length,this.configs.push(e))}get elements(){return this.configs}get alts(){return rt(this.configs,e=>e.alt)}get key(){let e="";for(let r in this.map)e+=r+":";return e}};o(TP,"getATNConfigKey")});function TXe(t,e){let r={};return n=>{let i=n.toString(),a=r[i];return a!==void 0||(a={atnStartState:t,decision:e,states:{}},r[i]=a),a}}function qpe(t,e=!0){let r=new Set;for(let n of t){let i=new Set;for(let a of n){if(a===void 0){if(e)break;return!1}let s=[a.tokenTypeIdx].concat(a.categoryMatches);for(let l of s)if(r.has(l)){if(!i.has(l))return!1}else r.add(l),i.add(l)}}return!0}function wXe(t){let e=t.decisionStates.length,r=Array(e);for(let n=0;nKu(i)).join(", "),r=t.production.idx===0?"":t.production.idx,n=`Ambiguous Alternatives Detected: <${t.ambiguityIndices.join(", ")}> in <${AXe(t.production)}${r}> inside <${t.topLevelRule.name}> Rule, +<${e}> may appears as a prefix path in all these alternatives. +`;return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES +For Further details.`,n}function AXe(t){if(t instanceof fn)return"SUBRULE";if(t instanceof dn)return"OPTION";if(t instanceof Dn)return"OR";if(t instanceof Bn)return"AT_LEAST_ONE";if(t instanceof Fn)return"AT_LEAST_ONE_SEP";if(t instanceof _n)return"MANY_SEP";if(t instanceof zr)return"MANY";if(t instanceof Ar)return"CONSUME";throw Error("non exhaustive match")}function _Xe(t,e,r){let n=ya(e.configs.elements,a=>a.state.transitions),i=Wae(n.filter(a=>a instanceof D1).map(a=>a.tokenType),a=>a.tokenTypeIdx);return{actualToken:r,possibleTokenTypes:i,tokenPath:t}}function DXe(t,e){return t.edges[e.tokenTypeIdx]}function LXe(t,e,r){let n=new M1,i=[];for(let s of t.elements){if(r.is(s.alt)===!1)continue;if(s.state.type===R1){i.push(s);continue}let l=s.state.transitions.length;for(let u=0;u0&&!OXe(a))for(let s of i)a.add(s);return a}function RXe(t,e){if(t instanceof D1&&ib(e,t.tokenType))return t.target}function NXe(t,e){let r;for(let n of t.elements)if(e.is(n.alt)===!0){if(r===void 0)r=n.alt;else if(r!==n.alt)return}return r}function Ype(t){return{configs:t,edges:{},isAcceptState:!1,prediction:-1}}function Wpe(t,e,r,n){return n=Xpe(t,n),e.edges[r.tokenTypeIdx]=n,n}function Xpe(t,e){if(e===bb)return e;let r=e.configs.key,n=t.states[r];return n!==void 0?n:(e.configs.finalize(),t.states[r]=e,e)}function MXe(t){let e=new M1,r=t.transitions.length;for(let n=0;n0){let i=[...t.stack],s={state:i.pop(),alt:t.alt,stack:i};MS(s,e)}else e.add(t);return}r.epsilonOnlyTransitions||e.add(t);let n=r.transitions.length;for(let i=0;i1)return!0;return!1}function zXe(t){for(let e of Array.from(t.values()))if(Object.keys(e).length===1)return!0;return!1}var NS,Hpe,Tb,jpe=M(()=>{"use strict";Ff();Vpe();Upe();NR();CR();Yae();Vm();Rw();sk();hk();PR();o(TXe,"createDFACache");NS=class{static{o(this,"PredicateSet")}constructor(){this.predicates=[]}is(e){return e>=this.predicates.length||this.predicates[e]}set(e,r){this.predicates[e]=r}toString(){let e="",r=this.predicates.length;for(let n=0;nconsole.log(n))}initialize(e){this.atn=Fpe(e.rules),this.dfas=wXe(this.atn)}validateAmbiguousAlternationAlternatives(){return[]}validateEmptyOrAlternatives(){return[]}buildLookaheadForAlternation(e){let{prodOccurrence:r,rule:n,hasPredicates:i,dynamicTokensEnabled:a}=e,s=this.dfas,l=this.logging,u=qp(n,"Alternation",r),f=this.atn.decisionMap[u].decision,d=rt(uS({maxLookahead:1,occurrence:r,prodType:"Alternation",rule:n}),p=>rt(p,m=>m[0]));if(qpe(d,!1)&&!a){let p=Jr(d,(m,g,y)=>(Ae(g,v=>{v&&(m[v.tokenTypeIdx]=y,Ae(v.categoryMatches,x=>{m[x]=y}))}),m),{});return i?function(m){var g;let y=this.LA(1),v=p[y.tokenTypeIdx];if(m!==void 0&&v!==void 0){let x=(g=m[v])===null||g===void 0?void 0:g.GATE;if(x!==void 0&&x.call(this)===!1)return}return v}:function(){let m=this.LA(1);return p[m.tokenTypeIdx]}}else return i?function(p){let m=new NS,g=p===void 0?0:p.length;for(let v=0;vrt(p,m=>m[0]));if(qpe(d)&&d[0][0]&&!a){let p=d[0],m=Qr(p);if(m.length===1&&mr(m[0].categoryMatches)){let y=m[0].tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===y}}else{let g=Jr(m,(y,v)=>(v!==void 0&&(y[v.tokenTypeIdx]=!0,Ae(v.categoryMatches,x=>{y[x]=!0})),y),{});return function(){let y=this.LA(1);return g[y.tokenTypeIdx]===!0}}}return function(){let p=wP.call(this,s,f,Hpe,l);return typeof p=="object"?!1:p===0}}};o(qpe,"isLL1Sequence");o(wXe,"initATNSimulator");o(wP,"adaptivePredict");o(kXe,"performLookahead");o(EXe,"computeLookaheadTarget");o(SXe,"reportLookaheadAmbiguity");o(CXe,"buildAmbiguityError");o(AXe,"getProductionDslName");o(_Xe,"buildAdaptivePredictError");o(DXe,"getExistingTargetState");o(LXe,"computeReachSet");o(RXe,"getReachableTarget");o(NXe,"getUniqueAlt");o(Ype,"newDFAState");o(Wpe,"addDFAEdge");o(Xpe,"addDFAState");o(MXe,"computeStartState");o(MS,"closure");o(IXe,"getEpsilonTarget");o(OXe,"hasConfigInRuleStopState");o(PXe,"allConfigsInRuleStopStates");o(BXe,"hasConflictTerminatingPrediction");o(FXe,"getConflictingAltSets");o($Xe,"hasConflictingAltSet");o(zXe,"hasStateAssociatedWithOneAlt")});var Kpe=M(()=>{"use strict";jpe()});var Qpe,kP,Zpe,IS,tn,Gr,OS,Jpe,EP,e0e,t0e,r0e,n0e,SP,i0e,a0e,s0e,PS,I1,O1,CP,P1,o0e,AP,_P,DP,LP,RP,l0e,c0e,NP,u0e,MP,wb,h0e,f0e,d0e,p0e,m0e,g0e,y0e,v0e,BS,x0e,b0e,T0e,w0e,k0e,E0e,S0e,C0e,A0e,_0e,D0e,FS,L0e,R0e,N0e,M0e,I0e,O0e,P0e,B0e,F0e,$0e,z0e,G0e,V0e,IP,OP,U0e,H0e,q0e,W0e,Y0e,X0e,j0e,K0e,Q0e,PP,Ge,BP=M(()=>{"use strict";(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(Qpe||(Qpe={}));(function(t){function e(r){return typeof r=="string"}o(e,"is"),t.is=e})(kP||(kP={}));(function(t){t.MIN_VALUE=-2147483648,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(Zpe||(Zpe={}));(function(t){t.MIN_VALUE=0,t.MAX_VALUE=2147483647;function e(r){return typeof r=="number"&&t.MIN_VALUE<=r&&r<=t.MAX_VALUE}o(e,"is"),t.is=e})(IS||(IS={}));(function(t){function e(n,i){return n===Number.MAX_VALUE&&(n=IS.MAX_VALUE),i===Number.MAX_VALUE&&(i=IS.MAX_VALUE),{line:n,character:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.objectLiteral(i)&&Ge.uinteger(i.line)&&Ge.uinteger(i.character)}o(r,"is"),t.is=r})(tn||(tn={}));(function(t){function e(n,i,a,s){if(Ge.uinteger(n)&&Ge.uinteger(i)&&Ge.uinteger(a)&&Ge.uinteger(s))return{start:tn.create(n,i),end:tn.create(a,s)};if(tn.is(n)&&tn.is(i))return{start:n,end:i};throw new Error(`Range#create called with invalid arguments[${n}, ${i}, ${a}, ${s}]`)}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.objectLiteral(i)&&tn.is(i.start)&&tn.is(i.end)}o(r,"is"),t.is=r})(Gr||(Gr={}));(function(t){function e(n,i){return{uri:n,range:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.objectLiteral(i)&&Gr.is(i.range)&&(Ge.string(i.uri)||Ge.undefined(i.uri))}o(r,"is"),t.is=r})(OS||(OS={}));(function(t){function e(n,i,a,s){return{targetUri:n,targetRange:i,targetSelectionRange:a,originSelectionRange:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.objectLiteral(i)&&Gr.is(i.targetRange)&&Ge.string(i.targetUri)&&Gr.is(i.targetSelectionRange)&&(Gr.is(i.originSelectionRange)||Ge.undefined(i.originSelectionRange))}o(r,"is"),t.is=r})(Jpe||(Jpe={}));(function(t){function e(n,i,a,s){return{red:n,green:i,blue:a,alpha:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.objectLiteral(i)&&Ge.numberRange(i.red,0,1)&&Ge.numberRange(i.green,0,1)&&Ge.numberRange(i.blue,0,1)&&Ge.numberRange(i.alpha,0,1)}o(r,"is"),t.is=r})(EP||(EP={}));(function(t){function e(n,i){return{range:n,color:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.objectLiteral(i)&&Gr.is(i.range)&&EP.is(i.color)}o(r,"is"),t.is=r})(e0e||(e0e={}));(function(t){function e(n,i,a){return{label:n,textEdit:i,additionalTextEdits:a}}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.objectLiteral(i)&&Ge.string(i.label)&&(Ge.undefined(i.textEdit)||O1.is(i))&&(Ge.undefined(i.additionalTextEdits)||Ge.typedArray(i.additionalTextEdits,O1.is))}o(r,"is"),t.is=r})(t0e||(t0e={}));(function(t){t.Comment="comment",t.Imports="imports",t.Region="region"})(r0e||(r0e={}));(function(t){function e(n,i,a,s,l,u){let h={startLine:n,endLine:i};return Ge.defined(a)&&(h.startCharacter=a),Ge.defined(s)&&(h.endCharacter=s),Ge.defined(l)&&(h.kind=l),Ge.defined(u)&&(h.collapsedText=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.objectLiteral(i)&&Ge.uinteger(i.startLine)&&Ge.uinteger(i.startLine)&&(Ge.undefined(i.startCharacter)||Ge.uinteger(i.startCharacter))&&(Ge.undefined(i.endCharacter)||Ge.uinteger(i.endCharacter))&&(Ge.undefined(i.kind)||Ge.string(i.kind))}o(r,"is"),t.is=r})(n0e||(n0e={}));(function(t){function e(n,i){return{location:n,message:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.defined(i)&&OS.is(i.location)&&Ge.string(i.message)}o(r,"is"),t.is=r})(SP||(SP={}));(function(t){t.Error=1,t.Warning=2,t.Information=3,t.Hint=4})(i0e||(i0e={}));(function(t){t.Unnecessary=1,t.Deprecated=2})(a0e||(a0e={}));(function(t){function e(r){let n=r;return Ge.objectLiteral(n)&&Ge.string(n.href)}o(e,"is"),t.is=e})(s0e||(s0e={}));(function(t){function e(n,i,a,s,l,u){let h={range:n,message:i};return Ge.defined(a)&&(h.severity=a),Ge.defined(s)&&(h.code=s),Ge.defined(l)&&(h.source=l),Ge.defined(u)&&(h.relatedInformation=u),h}o(e,"create"),t.create=e;function r(n){var i;let a=n;return Ge.defined(a)&&Gr.is(a.range)&&Ge.string(a.message)&&(Ge.number(a.severity)||Ge.undefined(a.severity))&&(Ge.integer(a.code)||Ge.string(a.code)||Ge.undefined(a.code))&&(Ge.undefined(a.codeDescription)||Ge.string((i=a.codeDescription)===null||i===void 0?void 0:i.href))&&(Ge.string(a.source)||Ge.undefined(a.source))&&(Ge.undefined(a.relatedInformation)||Ge.typedArray(a.relatedInformation,SP.is))}o(r,"is"),t.is=r})(PS||(PS={}));(function(t){function e(n,i,...a){let s={title:n,command:i};return Ge.defined(a)&&a.length>0&&(s.arguments=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.defined(i)&&Ge.string(i.title)&&Ge.string(i.command)}o(r,"is"),t.is=r})(I1||(I1={}));(function(t){function e(a,s){return{range:a,newText:s}}o(e,"replace"),t.replace=e;function r(a,s){return{range:{start:a,end:a},newText:s}}o(r,"insert"),t.insert=r;function n(a){return{range:a,newText:""}}o(n,"del"),t.del=n;function i(a){let s=a;return Ge.objectLiteral(s)&&Ge.string(s.newText)&&Gr.is(s.range)}o(i,"is"),t.is=i})(O1||(O1={}));(function(t){function e(n,i,a){let s={label:n};return i!==void 0&&(s.needsConfirmation=i),a!==void 0&&(s.description=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.objectLiteral(i)&&Ge.string(i.label)&&(Ge.boolean(i.needsConfirmation)||i.needsConfirmation===void 0)&&(Ge.string(i.description)||i.description===void 0)}o(r,"is"),t.is=r})(CP||(CP={}));(function(t){function e(r){let n=r;return Ge.string(n)}o(e,"is"),t.is=e})(P1||(P1={}));(function(t){function e(a,s,l){return{range:a,newText:s,annotationId:l}}o(e,"replace"),t.replace=e;function r(a,s,l){return{range:{start:a,end:a},newText:s,annotationId:l}}o(r,"insert"),t.insert=r;function n(a,s){return{range:a,newText:"",annotationId:s}}o(n,"del"),t.del=n;function i(a){let s=a;return O1.is(s)&&(CP.is(s.annotationId)||P1.is(s.annotationId))}o(i,"is"),t.is=i})(o0e||(o0e={}));(function(t){function e(n,i){return{textDocument:n,edits:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.defined(i)&&NP.is(i.textDocument)&&Array.isArray(i.edits)}o(r,"is"),t.is=r})(AP||(AP={}));(function(t){function e(n,i,a){let s={kind:"create",uri:n};return i!==void 0&&(i.overwrite!==void 0||i.ignoreIfExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="create"&&Ge.string(i.uri)&&(i.options===void 0||(i.options.overwrite===void 0||Ge.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||Ge.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||P1.is(i.annotationId))}o(r,"is"),t.is=r})(_P||(_P={}));(function(t){function e(n,i,a,s){let l={kind:"rename",oldUri:n,newUri:i};return a!==void 0&&(a.overwrite!==void 0||a.ignoreIfExists!==void 0)&&(l.options=a),s!==void 0&&(l.annotationId=s),l}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="rename"&&Ge.string(i.oldUri)&&Ge.string(i.newUri)&&(i.options===void 0||(i.options.overwrite===void 0||Ge.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||Ge.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||P1.is(i.annotationId))}o(r,"is"),t.is=r})(DP||(DP={}));(function(t){function e(n,i,a){let s={kind:"delete",uri:n};return i!==void 0&&(i.recursive!==void 0||i.ignoreIfNotExists!==void 0)&&(s.options=i),a!==void 0&&(s.annotationId=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&i.kind==="delete"&&Ge.string(i.uri)&&(i.options===void 0||(i.options.recursive===void 0||Ge.boolean(i.options.recursive))&&(i.options.ignoreIfNotExists===void 0||Ge.boolean(i.options.ignoreIfNotExists)))&&(i.annotationId===void 0||P1.is(i.annotationId))}o(r,"is"),t.is=r})(LP||(LP={}));(function(t){function e(r){let n=r;return n&&(n.changes!==void 0||n.documentChanges!==void 0)&&(n.documentChanges===void 0||n.documentChanges.every(i=>Ge.string(i.kind)?_P.is(i)||DP.is(i)||LP.is(i):AP.is(i)))}o(e,"is"),t.is=e})(RP||(RP={}));(function(t){function e(n){return{uri:n}}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.defined(i)&&Ge.string(i.uri)}o(r,"is"),t.is=r})(l0e||(l0e={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.defined(i)&&Ge.string(i.uri)&&Ge.integer(i.version)}o(r,"is"),t.is=r})(c0e||(c0e={}));(function(t){function e(n,i){return{uri:n,version:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.defined(i)&&Ge.string(i.uri)&&(i.version===null||Ge.integer(i.version))}o(r,"is"),t.is=r})(NP||(NP={}));(function(t){function e(n,i,a,s){return{uri:n,languageId:i,version:a,text:s}}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.defined(i)&&Ge.string(i.uri)&&Ge.string(i.languageId)&&Ge.integer(i.version)&&Ge.string(i.text)}o(r,"is"),t.is=r})(u0e||(u0e={}));(function(t){t.PlainText="plaintext",t.Markdown="markdown";function e(r){let n=r;return n===t.PlainText||n===t.Markdown}o(e,"is"),t.is=e})(MP||(MP={}));(function(t){function e(r){let n=r;return Ge.objectLiteral(r)&&MP.is(n.kind)&&Ge.string(n.value)}o(e,"is"),t.is=e})(wb||(wb={}));(function(t){t.Text=1,t.Method=2,t.Function=3,t.Constructor=4,t.Field=5,t.Variable=6,t.Class=7,t.Interface=8,t.Module=9,t.Property=10,t.Unit=11,t.Value=12,t.Enum=13,t.Keyword=14,t.Snippet=15,t.Color=16,t.File=17,t.Reference=18,t.Folder=19,t.EnumMember=20,t.Constant=21,t.Struct=22,t.Event=23,t.Operator=24,t.TypeParameter=25})(h0e||(h0e={}));(function(t){t.PlainText=1,t.Snippet=2})(f0e||(f0e={}));(function(t){t.Deprecated=1})(d0e||(d0e={}));(function(t){function e(n,i,a){return{newText:n,insert:i,replace:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Ge.string(i.newText)&&Gr.is(i.insert)&&Gr.is(i.replace)}o(r,"is"),t.is=r})(p0e||(p0e={}));(function(t){t.asIs=1,t.adjustIndentation=2})(m0e||(m0e={}));(function(t){function e(r){let n=r;return n&&(Ge.string(n.detail)||n.detail===void 0)&&(Ge.string(n.description)||n.description===void 0)}o(e,"is"),t.is=e})(g0e||(g0e={}));(function(t){function e(r){return{label:r}}o(e,"create"),t.create=e})(y0e||(y0e={}));(function(t){function e(r,n){return{items:r||[],isIncomplete:!!n}}o(e,"create"),t.create=e})(v0e||(v0e={}));(function(t){function e(n){return n.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}o(e,"fromPlainText"),t.fromPlainText=e;function r(n){let i=n;return Ge.string(i)||Ge.objectLiteral(i)&&Ge.string(i.language)&&Ge.string(i.value)}o(r,"is"),t.is=r})(BS||(BS={}));(function(t){function e(r){let n=r;return!!n&&Ge.objectLiteral(n)&&(wb.is(n.contents)||BS.is(n.contents)||Ge.typedArray(n.contents,BS.is))&&(r.range===void 0||Gr.is(r.range))}o(e,"is"),t.is=e})(x0e||(x0e={}));(function(t){function e(r,n){return n?{label:r,documentation:n}:{label:r}}o(e,"create"),t.create=e})(b0e||(b0e={}));(function(t){function e(r,n,...i){let a={label:r};return Ge.defined(n)&&(a.documentation=n),Ge.defined(i)?a.parameters=i:a.parameters=[],a}o(e,"create"),t.create=e})(T0e||(T0e={}));(function(t){t.Text=1,t.Read=2,t.Write=3})(w0e||(w0e={}));(function(t){function e(r,n){let i={range:r};return Ge.number(n)&&(i.kind=n),i}o(e,"create"),t.create=e})(k0e||(k0e={}));(function(t){t.File=1,t.Module=2,t.Namespace=3,t.Package=4,t.Class=5,t.Method=6,t.Property=7,t.Field=8,t.Constructor=9,t.Enum=10,t.Interface=11,t.Function=12,t.Variable=13,t.Constant=14,t.String=15,t.Number=16,t.Boolean=17,t.Array=18,t.Object=19,t.Key=20,t.Null=21,t.EnumMember=22,t.Struct=23,t.Event=24,t.Operator=25,t.TypeParameter=26})(E0e||(E0e={}));(function(t){t.Deprecated=1})(S0e||(S0e={}));(function(t){function e(r,n,i,a,s){let l={name:r,kind:n,location:{uri:a,range:i}};return s&&(l.containerName=s),l}o(e,"create"),t.create=e})(C0e||(C0e={}));(function(t){function e(r,n,i,a){return a!==void 0?{name:r,kind:n,location:{uri:i,range:a}}:{name:r,kind:n,location:{uri:i}}}o(e,"create"),t.create=e})(A0e||(A0e={}));(function(t){function e(n,i,a,s,l,u){let h={name:n,detail:i,kind:a,range:s,selectionRange:l};return u!==void 0&&(h.children=u),h}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Ge.string(i.name)&&Ge.number(i.kind)&&Gr.is(i.range)&&Gr.is(i.selectionRange)&&(i.detail===void 0||Ge.string(i.detail))&&(i.deprecated===void 0||Ge.boolean(i.deprecated))&&(i.children===void 0||Array.isArray(i.children))&&(i.tags===void 0||Array.isArray(i.tags))}o(r,"is"),t.is=r})(_0e||(_0e={}));(function(t){t.Empty="",t.QuickFix="quickfix",t.Refactor="refactor",t.RefactorExtract="refactor.extract",t.RefactorInline="refactor.inline",t.RefactorRewrite="refactor.rewrite",t.Source="source",t.SourceOrganizeImports="source.organizeImports",t.SourceFixAll="source.fixAll"})(D0e||(D0e={}));(function(t){t.Invoked=1,t.Automatic=2})(FS||(FS={}));(function(t){function e(n,i,a){let s={diagnostics:n};return i!=null&&(s.only=i),a!=null&&(s.triggerKind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.defined(i)&&Ge.typedArray(i.diagnostics,PS.is)&&(i.only===void 0||Ge.typedArray(i.only,Ge.string))&&(i.triggerKind===void 0||i.triggerKind===FS.Invoked||i.triggerKind===FS.Automatic)}o(r,"is"),t.is=r})(L0e||(L0e={}));(function(t){function e(n,i,a){let s={title:n},l=!0;return typeof i=="string"?(l=!1,s.kind=i):I1.is(i)?s.command=i:s.edit=i,l&&a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return i&&Ge.string(i.title)&&(i.diagnostics===void 0||Ge.typedArray(i.diagnostics,PS.is))&&(i.kind===void 0||Ge.string(i.kind))&&(i.edit!==void 0||i.command!==void 0)&&(i.command===void 0||I1.is(i.command))&&(i.isPreferred===void 0||Ge.boolean(i.isPreferred))&&(i.edit===void 0||RP.is(i.edit))}o(r,"is"),t.is=r})(R0e||(R0e={}));(function(t){function e(n,i){let a={range:n};return Ge.defined(i)&&(a.data=i),a}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.defined(i)&&Gr.is(i.range)&&(Ge.undefined(i.command)||I1.is(i.command))}o(r,"is"),t.is=r})(N0e||(N0e={}));(function(t){function e(n,i){return{tabSize:n,insertSpaces:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.defined(i)&&Ge.uinteger(i.tabSize)&&Ge.boolean(i.insertSpaces)}o(r,"is"),t.is=r})(M0e||(M0e={}));(function(t){function e(n,i,a){return{range:n,target:i,data:a}}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.defined(i)&&Gr.is(i.range)&&(Ge.undefined(i.target)||Ge.string(i.target))}o(r,"is"),t.is=r})(I0e||(I0e={}));(function(t){function e(n,i){return{range:n,parent:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.objectLiteral(i)&&Gr.is(i.range)&&(i.parent===void 0||t.is(i.parent))}o(r,"is"),t.is=r})(O0e||(O0e={}));(function(t){t.namespace="namespace",t.type="type",t.class="class",t.enum="enum",t.interface="interface",t.struct="struct",t.typeParameter="typeParameter",t.parameter="parameter",t.variable="variable",t.property="property",t.enumMember="enumMember",t.event="event",t.function="function",t.method="method",t.macro="macro",t.keyword="keyword",t.modifier="modifier",t.comment="comment",t.string="string",t.number="number",t.regexp="regexp",t.operator="operator",t.decorator="decorator"})(P0e||(P0e={}));(function(t){t.declaration="declaration",t.definition="definition",t.readonly="readonly",t.static="static",t.deprecated="deprecated",t.abstract="abstract",t.async="async",t.modification="modification",t.documentation="documentation",t.defaultLibrary="defaultLibrary"})(B0e||(B0e={}));(function(t){function e(r){let n=r;return Ge.objectLiteral(n)&&(n.resultId===void 0||typeof n.resultId=="string")&&Array.isArray(n.data)&&(n.data.length===0||typeof n.data[0]=="number")}o(e,"is"),t.is=e})(F0e||(F0e={}));(function(t){function e(n,i){return{range:n,text:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Gr.is(i.range)&&Ge.string(i.text)}o(r,"is"),t.is=r})($0e||($0e={}));(function(t){function e(n,i,a){return{range:n,variableName:i,caseSensitiveLookup:a}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Gr.is(i.range)&&Ge.boolean(i.caseSensitiveLookup)&&(Ge.string(i.variableName)||i.variableName===void 0)}o(r,"is"),t.is=r})(z0e||(z0e={}));(function(t){function e(n,i){return{range:n,expression:i}}o(e,"create"),t.create=e;function r(n){let i=n;return i!=null&&Gr.is(i.range)&&(Ge.string(i.expression)||i.expression===void 0)}o(r,"is"),t.is=r})(G0e||(G0e={}));(function(t){function e(n,i){return{frameId:n,stoppedLocation:i}}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.defined(i)&&Gr.is(n.stoppedLocation)}o(r,"is"),t.is=r})(V0e||(V0e={}));(function(t){t.Type=1,t.Parameter=2;function e(r){return r===1||r===2}o(e,"is"),t.is=e})(IP||(IP={}));(function(t){function e(n){return{value:n}}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.objectLiteral(i)&&(i.tooltip===void 0||Ge.string(i.tooltip)||wb.is(i.tooltip))&&(i.location===void 0||OS.is(i.location))&&(i.command===void 0||I1.is(i.command))}o(r,"is"),t.is=r})(OP||(OP={}));(function(t){function e(n,i,a){let s={position:n,label:i};return a!==void 0&&(s.kind=a),s}o(e,"create"),t.create=e;function r(n){let i=n;return Ge.objectLiteral(i)&&tn.is(i.position)&&(Ge.string(i.label)||Ge.typedArray(i.label,OP.is))&&(i.kind===void 0||IP.is(i.kind))&&i.textEdits===void 0||Ge.typedArray(i.textEdits,O1.is)&&(i.tooltip===void 0||Ge.string(i.tooltip)||wb.is(i.tooltip))&&(i.paddingLeft===void 0||Ge.boolean(i.paddingLeft))&&(i.paddingRight===void 0||Ge.boolean(i.paddingRight))}o(r,"is"),t.is=r})(U0e||(U0e={}));(function(t){function e(r){return{kind:"snippet",value:r}}o(e,"createSnippet"),t.createSnippet=e})(H0e||(H0e={}));(function(t){function e(r,n,i,a){return{insertText:r,filterText:n,range:i,command:a}}o(e,"create"),t.create=e})(q0e||(q0e={}));(function(t){function e(r){return{items:r}}o(e,"create"),t.create=e})(W0e||(W0e={}));(function(t){t.Invoked=0,t.Automatic=1})(Y0e||(Y0e={}));(function(t){function e(r,n){return{range:r,text:n}}o(e,"create"),t.create=e})(X0e||(X0e={}));(function(t){function e(r,n){return{triggerKind:r,selectedCompletionInfo:n}}o(e,"create"),t.create=e})(j0e||(j0e={}));(function(t){function e(r){let n=r;return Ge.objectLiteral(n)&&kP.is(n.uri)&&Ge.string(n.name)}o(e,"is"),t.is=e})(K0e||(K0e={}));(function(t){function e(a,s,l,u){return new PP(a,s,l,u)}o(e,"create"),t.create=e;function r(a){let s=a;return!!(Ge.defined(s)&&Ge.string(s.uri)&&(Ge.undefined(s.languageId)||Ge.string(s.languageId))&&Ge.uinteger(s.lineCount)&&Ge.func(s.getText)&&Ge.func(s.positionAt)&&Ge.func(s.offsetAt))}o(r,"is"),t.is=r;function n(a,s){let l=a.getText(),u=i(s,(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),h=l.length;for(let f=u.length-1;f>=0;f--){let d=u[f],p=a.offsetAt(d.range.start),m=a.offsetAt(d.range.end);if(m<=h)l=l.substring(0,p)+d.newText+l.substring(m,l.length);else throw new Error("Overlapping edit");h=p}return l}o(n,"applyEdits"),t.applyEdits=n;function i(a,s){if(a.length<=1)return a;let l=a.length/2|0,u=a.slice(0,l),h=a.slice(l);i(u,s),i(h,s);let f=0,d=0,p=0;for(;f0&&e.push(r.length),this._lineOffsets=e}return this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let r=this.getLineOffsets(),n=0,i=r.length;if(i===0)return tn.create(0,e);for(;ne?i=s:n=s+1}let a=n-1;return tn.create(a,e-r[a])}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line],i=e.line+1"u"}o(n,"undefined"),t.undefined=n;function i(m){return m===!0||m===!1}o(i,"boolean"),t.boolean=i;function a(m){return e.call(m)==="[object String]"}o(a,"string"),t.string=a;function s(m){return e.call(m)==="[object Number]"}o(s,"number"),t.number=s;function l(m,g,y){return e.call(m)==="[object Number]"&&g<=m&&m<=y}o(l,"numberRange"),t.numberRange=l;function u(m){return e.call(m)==="[object Number]"&&-2147483648<=m&&m<=2147483647}o(u,"integer"),t.integer=u;function h(m){return e.call(m)==="[object Number]"&&0<=m&&m<=2147483647}o(h,"uinteger"),t.uinteger=h;function f(m){return e.call(m)==="[object Function]"}o(f,"func"),t.func=f;function d(m){return m!==null&&typeof m=="object"}o(d,"objectLiteral"),t.objectLiteral=d;function p(m,g){return Array.isArray(m)&&m.every(g)}o(p,"typedArray"),t.typedArray=p})(Ge||(Ge={}))});var kb,Eb,Yp,Xp,FP,B1,$S=M(()=>{"use strict";BP();Bl();kb=class{static{o(this,"CstNodeBuilder")}constructor(){this.nodeStack=[]}get current(){var e;return(e=this.nodeStack[this.nodeStack.length-1])!==null&&e!==void 0?e:this.rootNode}buildRootNode(e){return this.rootNode=new B1(e),this.rootNode.root=this.rootNode,this.nodeStack=[this.rootNode],this.rootNode}buildCompositeNode(e){let r=new Xp;return r.grammarSource=e,r.root=this.rootNode,this.current.content.push(r),this.nodeStack.push(r),r}buildLeafNode(e,r){let n=new Yp(e.startOffset,e.image.length,xg(e),e.tokenType,!r);return n.grammarSource=r,n.root=this.rootNode,this.current.content.push(n),n}removeNode(e){let r=e.container;if(r){let n=r.content.indexOf(e);n>=0&&r.content.splice(n,1)}}addHiddenNodes(e){let r=[];for(let a of e){let s=new Yp(a.startOffset,a.image.length,xg(a),a.tokenType,!0);s.root=this.rootNode,r.push(s)}let n=this.current,i=!1;if(n.content.length>0){n.content.push(...r);return}for(;n.container;){let a=n.container.content.indexOf(n);if(a>0){n.container.content.splice(a,0,...r),i=!0;break}n=n.container}i||this.rootNode.content.unshift(...r)}construct(e){let r=this.current;typeof e.$type=="string"&&(this.current.astNode=e),e.$cstNode=r;let n=this.nodeStack.pop();n?.content.length===0&&this.removeNode(n)}},Eb=class{static{o(this,"AbstractCstNode")}get parent(){return this.container}get feature(){return this.grammarSource}get hidden(){return!1}get astNode(){var e,r;let n=typeof((e=this._astNode)===null||e===void 0?void 0:e.$type)=="string"?this._astNode:(r=this.container)===null||r===void 0?void 0:r.astNode;if(!n)throw new Error("This node has no associated AST element");return n}set astNode(e){this._astNode=e}get element(){return this.astNode}get text(){return this.root.fullText.substring(this.offset,this.end)}},Yp=class extends Eb{static{o(this,"LeafCstNodeImpl")}get offset(){return this._offset}get length(){return this._length}get end(){return this._offset+this._length}get hidden(){return this._hidden}get tokenType(){return this._tokenType}get range(){return this._range}constructor(e,r,n,i,a=!1){super(),this._hidden=a,this._offset=e,this._tokenType=i,this._length=r,this._range=n}},Xp=class extends Eb{static{o(this,"CompositeCstNodeImpl")}constructor(){super(...arguments),this.content=new FP(this)}get children(){return this.content}get offset(){var e,r;return(r=(e=this.firstNonHiddenNode)===null||e===void 0?void 0:e.offset)!==null&&r!==void 0?r:0}get length(){return this.end-this.offset}get end(){var e,r;return(r=(e=this.lastNonHiddenNode)===null||e===void 0?void 0:e.end)!==null&&r!==void 0?r:0}get range(){let e=this.firstNonHiddenNode,r=this.lastNonHiddenNode;if(e&&r){if(this._rangeCache===void 0){let{range:n}=e,{range:i}=r;this._rangeCache={start:n.start,end:i.end.line=0;e--){let r=this.content[e];if(!r.hidden)return r}return this.content[this.content.length-1]}},FP=class t extends Array{static{o(this,"CstNodeContainer")}constructor(e){super(),this.parent=e,Object.setPrototypeOf(this,t.prototype)}push(...e){return this.addParents(e),super.push(...e)}unshift(...e){return this.addParents(e),super.unshift(...e)}splice(e,r,...n){return this.addParents(n),super.splice(e,r,...n)}addParents(e){for(let r of e)r.container=this.parent}},B1=class extends Xp{static{o(this,"RootCstNodeImpl")}get text(){return this._text.substring(this.offset,this.end)}get fullText(){return this._text}constructor(e){super(),this._text="",this._text=e??""}}});function $P(t){return t.$type===zS}var zS,Z0e,J0e,Sb,Cb,GS,F1,Ab,GXe,zP,_b=M(()=>{"use strict";Ff();Kpe();Hc();zl();hs();$S();zS=Symbol("Datatype");o($P,"isDataTypeNode");Z0e="\u200B",J0e=o(t=>t.endsWith(Z0e)?t:t+Z0e,"withRuleSuffix"),Sb=class{static{o(this,"AbstractLangiumParser")}constructor(e){this._unorderedGroups=new Map,this.allRules=new Map,this.lexer=e.parser.Lexer;let r=this.lexer.definition,n=e.LanguageMetaData.mode==="production";this.wrapper=new zP(r,Object.assign(Object.assign({},e.parser.ParserConfig),{skipValidations:n,errorMessageProvider:e.parser.ParserErrorMessageProvider}))}alternatives(e,r){this.wrapper.wrapOr(e,r)}optional(e,r){this.wrapper.wrapOption(e,r)}many(e,r){this.wrapper.wrapMany(e,r)}atLeastOne(e,r){this.wrapper.wrapAtLeastOne(e,r)}getRule(e){return this.allRules.get(e)}isRecording(){return this.wrapper.IS_RECORDING}get unorderedGroups(){return this._unorderedGroups}getRuleStack(){return this.wrapper.RULE_STACK}finalize(){this.wrapper.wrapSelfAnalysis()}},Cb=class extends Sb{static{o(this,"LangiumParser")}get current(){return this.stack[this.stack.length-1]}constructor(e){super(e),this.nodeBuilder=new kb,this.stack=[],this.assignmentMap=new Map,this.linker=e.references.Linker,this.converter=e.parser.ValueConverter,this.astReflection=e.shared.AstReflection}rule(e,r){let n=this.computeRuleType(e),i=this.wrapper.DEFINE_RULE(J0e(e.name),this.startImplementation(n,r).bind(this));return this.allRules.set(e.name,i),e.entry&&(this.mainRule=i),i}computeRuleType(e){if(!e.fragment){if(Kx(e))return zS;{let r=c1(e);return r??e.name}}}parse(e,r={}){this.nodeBuilder.buildRootNode(e);let n=this.lexerResult=this.lexer.tokenize(e);this.wrapper.input=n.tokens;let i=r.rule?this.allRules.get(r.rule):this.mainRule;if(!i)throw new Error(r.rule?`No rule found with name '${r.rule}'`:"No main rule available.");let a=i.call(this.wrapper,{});return this.nodeBuilder.addHiddenNodes(n.hidden),this.unorderedGroups.clear(),this.lexerResult=void 0,{value:a,lexerErrors:n.errors,lexerReport:n.report,parserErrors:this.wrapper.errors}}startImplementation(e,r){return n=>{let i=!this.isRecording()&&e!==void 0;if(i){let s={$type:e};this.stack.push(s),e===zS&&(s.value="")}let a;try{a=r(n)}catch{a=void 0}return a===void 0&&i&&(a=this.construct()),a}}extractHiddenTokens(e){let r=this.lexerResult.hidden;if(!r.length)return[];let n=e.startOffset;for(let i=0;in)return r.splice(0,i);return r.splice(0,r.length)}consume(e,r,n){let i=this.wrapper.wrapConsume(e,r);if(!this.isRecording()&&this.isValidToken(i)){let a=this.extractHiddenTokens(i);this.nodeBuilder.addHiddenNodes(a);let s=this.nodeBuilder.buildLeafNode(i,n),{assignment:l,isCrossRef:u}=this.getAssignment(n),h=this.current;if(l){let f=Zo(n)?i.image:this.converter.convert(i.image,s);this.assign(l.operator,l.feature,f,s,u)}else if($P(h)){let f=i.image;Zo(n)||(f=this.converter.convert(f,s).toString()),h.value+=f}}}isValidToken(e){return!e.isInsertedInRecovery&&!isNaN(e.startOffset)&&typeof e.endOffset=="number"&&!isNaN(e.endOffset)}subrule(e,r,n,i,a){let s;!this.isRecording()&&!n&&(s=this.nodeBuilder.buildCompositeNode(i));let l=this.wrapper.wrapSubrule(e,r,a);!this.isRecording()&&s&&s.length>0&&this.performSubruleAssignment(l,i,s)}performSubruleAssignment(e,r,n){let{assignment:i,isCrossRef:a}=this.getAssignment(r);if(i)this.assign(i.operator,i.feature,e,n,a);else if(!i){let s=this.current;if($P(s))s.value+=e.toString();else if(typeof e=="object"&&e){let u=this.assignWithoutOverride(e,s);this.stack.pop(),this.stack.push(u)}}}action(e,r){if(!this.isRecording()){let n=this.current;if(r.feature&&r.operator){n=this.construct(),this.nodeBuilder.removeNode(n.$cstNode),this.nodeBuilder.buildCompositeNode(r).content.push(n.$cstNode);let a={$type:e};this.stack.push(a),this.assign(r.operator,r.feature,n,n.$cstNode,!1)}else n.$type=e}}construct(){if(this.isRecording())return;let e=this.current;return GE(e),this.nodeBuilder.construct(e),this.stack.pop(),$P(e)?this.converter.convert(e.value,e.$cstNode):(gO(this.astReflection,e),e)}getAssignment(e){if(!this.assignmentMap.has(e)){let r=Ip(e,Fl);this.assignmentMap.set(e,{assignment:r,isCrossRef:r?Mp(r.terminal):!1})}return this.assignmentMap.get(e)}assign(e,r,n,i,a){let s=this.current,l;switch(a&&typeof n=="string"?l=this.linker.buildReference(s,r,i,n):l=n,e){case"=":{s[r]=l;break}case"?=":{s[r]=!0;break}case"+=":Array.isArray(s[r])||(s[r]=[]),s[r].push(l)}}assignWithoutOverride(e,r){for(let[i,a]of Object.entries(r)){let s=e[i];s===void 0?e[i]=a:Array.isArray(s)&&Array.isArray(a)&&(a.push(...s),e[i]=a)}let n=e.$cstNode;return n&&(n.astNode=void 0,e.$cstNode=void 0),e}get definitionErrors(){return this.wrapper.definitionErrors}},GS=class{static{o(this,"AbstractParserErrorMessageProvider")}buildMismatchTokenMessage(e){return Zu.buildMismatchTokenMessage(e)}buildNotAllInputParsedMessage(e){return Zu.buildNotAllInputParsedMessage(e)}buildNoViableAltMessage(e){return Zu.buildNoViableAltMessage(e)}buildEarlyExitMessage(e){return Zu.buildEarlyExitMessage(e)}},F1=class extends GS{static{o(this,"LangiumParserErrorMessageProvider")}buildMismatchTokenMessage({expected:e,actual:r}){return`Expecting ${e.LABEL?"`"+e.LABEL+"`":e.name.endsWith(":KW")?`keyword '${e.name.substring(0,e.name.length-3)}'`:`token of type '${e.name}'`} but found \`${r.image}\`.`}buildNotAllInputParsedMessage({firstRedundant:e}){return`Expecting end of file but found \`${e.image}\`.`}},Ab=class extends Sb{static{o(this,"LangiumCompletionParser")}constructor(){super(...arguments),this.tokens=[],this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}action(){}construct(){}parse(e){this.resetState();let r=this.lexer.tokenize(e,{mode:"partial"});return this.tokens=r.tokens,this.wrapper.input=[...this.tokens],this.mainRule.call(this.wrapper,{}),this.unorderedGroups.clear(),{tokens:this.tokens,elementStack:[...this.lastElementStack],tokenIndex:this.nextTokenIndex}}rule(e,r){let n=this.wrapper.DEFINE_RULE(J0e(e.name),this.startImplementation(r).bind(this));return this.allRules.set(e.name,n),e.entry&&(this.mainRule=n),n}resetState(){this.elementStack=[],this.lastElementStack=[],this.nextTokenIndex=0,this.stackSize=0}startImplementation(e){return r=>{let n=this.keepStackSize();try{e(r)}finally{this.resetStackSize(n)}}}removeUnexpectedElements(){this.elementStack.splice(this.stackSize)}keepStackSize(){let e=this.elementStack.length;return this.stackSize=e,e}resetStackSize(e){this.removeUnexpectedElements(),this.stackSize=e}consume(e,r,n){this.wrapper.wrapConsume(e,r),this.isRecording()||(this.lastElementStack=[...this.elementStack,n],this.nextTokenIndex=this.currIdx+1)}subrule(e,r,n,i,a){this.before(i),this.wrapper.wrapSubrule(e,r,a),this.after(i)}before(e){this.isRecording()||this.elementStack.push(e)}after(e){if(!this.isRecording()){let r=this.elementStack.lastIndexOf(e);r>=0&&this.elementStack.splice(r)}}get currIdx(){return this.wrapper.currIdx}},GXe={recoveryEnabled:!0,nodeLocationTracking:"full",skipValidations:!0,errorMessageProvider:new F1},zP=class extends yb{static{o(this,"ChevrotainWrapper")}constructor(e,r){let n=r&&"maxLookahead"in r;super(e,Object.assign(Object.assign(Object.assign({},GXe),{lookaheadStrategy:n?new Ju({maxLookahead:r.maxLookahead}):new Tb({logging:r.skipValidations?()=>{}:void 0})}),r))}get IS_RECORDING(){return this.RECORDING_PHASE}DEFINE_RULE(e,r){return this.RULE(e,r)}wrapSelfAnalysis(){this.performSelfAnalysis()}wrapConsume(e,r){return this.consume(e,r)}wrapSubrule(e,r,n){return this.subrule(e,r,{ARGS:[n]})}wrapOr(e,r){this.or(e,r)}wrapOption(e,r){this.option(e,r)}wrapMany(e,r){this.many(e,r)}wrapAtLeastOne(e,r){this.atLeastOne(e,r)}}});function Db(t,e,r){return VXe({parser:e,tokens:r,ruleNames:new Map},t),e}function VXe(t,e){let r=Xx(e,!1),n=an(e.rules).filter(Va).filter(i=>r.has(i));for(let i of n){let a=Object.assign(Object.assign({},t),{consume:1,optional:1,subrule:1,many:1,or:1});t.parser.rule(i,jp(a,i.definition))}}function jp(t,e,r=!1){let n;if(Zo(e))n=jXe(t,e);else if(qu(e))n=UXe(t,e);else if(Fl(e))n=jp(t,e.terminal);else if(Mp(e))n=eme(t,e);else if($l(e))n=HXe(t,e);else if(FE(e))n=WXe(t,e);else if(zE(e))n=YXe(t,e);else if(Of(e))n=XXe(t,e);else if(oO(e)){let i=t.consume++;n=o(()=>t.parser.consume(i,yo,e),"method")}else throw new Rp(e.$cstNode,`Unexpected element type: ${e.$type}`);return tme(t,r?void 0:VS(e),n,e.cardinality)}function UXe(t,e){let r=Qx(e);return()=>t.parser.action(r,e)}function HXe(t,e){let r=e.rule.ref;if(Va(r)){let n=t.subrule++,i=r.fragment,a=e.arguments.length>0?qXe(r,e.arguments):()=>({});return s=>t.parser.subrule(n,rme(t,r),i,e,a(s))}else if(mo(r)){let n=t.consume++,i=GP(t,r.name);return()=>t.parser.consume(n,i,e)}else if(r)Uc(r);else throw new Rp(e.$cstNode,`Undefined rule: ${e.rule.$refText}`)}function qXe(t,e){let r=e.map(n=>eh(n.value));return n=>{let i={};for(let a=0;ae(n)||r(n)}else if(JI(t)){let e=eh(t.left),r=eh(t.right);return n=>e(n)&&r(n)}else if(tO(t)){let e=eh(t.value);return r=>!e(r)}else if(rO(t)){let e=t.parameter.ref.name;return r=>r!==void 0&&r[e]===!0}else if(ZI(t)){let e=!!t.true;return()=>e}Uc(t)}function WXe(t,e){if(e.elements.length===1)return jp(t,e.elements[0]);{let r=[];for(let i of e.elements){let a={ALT:jp(t,i,!0)},s=VS(i);s&&(a.GATE=eh(s)),r.push(a)}let n=t.or++;return i=>t.parser.alternatives(n,r.map(a=>{let s={ALT:o(()=>a.ALT(i),"ALT")},l=a.GATE;return l&&(s.GATE=()=>l(i)),s}))}}function YXe(t,e){if(e.elements.length===1)return jp(t,e.elements[0]);let r=[];for(let l of e.elements){let u={ALT:jp(t,l,!0)},h=VS(l);h&&(u.GATE=eh(h)),r.push(u)}let n=t.or++,i=o((l,u)=>{let h=u.getRuleStack().join("-");return`uGroup_${l}_${h}`},"idFunc"),a=o(l=>t.parser.alternatives(n,r.map((u,h)=>{let f={ALT:o(()=>!0,"ALT")},d=t.parser;f.ALT=()=>{if(u.ALT(l),!d.isRecording()){let m=i(n,d);d.unorderedGroups.get(m)||d.unorderedGroups.set(m,[]);let g=d.unorderedGroups.get(m);typeof g?.[h]>"u"&&(g[h]=!0)}};let p=u.GATE;return p?f.GATE=()=>p(l):f.GATE=()=>{let m=d.unorderedGroups.get(i(n,d));return!m?.[h]},f})),"alternatives"),s=tme(t,VS(e),a,"*");return l=>{s(l),t.parser.isRecording()||t.parser.unorderedGroups.delete(i(n,t.parser))}}function XXe(t,e){let r=e.elements.map(n=>jp(t,n));return n=>r.forEach(i=>i(n))}function VS(t){if(Of(t))return t.guardCondition}function eme(t,e,r=e.terminal){if(r)if($l(r)&&Va(r.rule.ref)){let n=r.rule.ref,i=t.subrule++;return a=>t.parser.subrule(i,rme(t,n),!1,e,a)}else if($l(r)&&mo(r.rule.ref)){let n=t.consume++,i=GP(t,r.rule.ref.name);return()=>t.parser.consume(n,i,e)}else if(Zo(r)){let n=t.consume++,i=GP(t,r.value);return()=>t.parser.consume(n,i,e)}else throw new Error("Could not build cross reference parser");else{if(!e.type.ref)throw new Error("Could not resolve reference to type: "+e.type.$refText);let n=WE(e.type.ref),i=n?.terminal;if(!i)throw new Error("Could not find name assignment for type: "+Qx(e.type.ref));return eme(t,e,i)}}function jXe(t,e){let r=t.consume++,n=t.tokens[e.value];if(!n)throw new Error("Could not find token for keyword: "+e.value);return()=>t.parser.consume(r,n,e)}function tme(t,e,r,n){let i=e&&eh(e);if(!n)if(i){let a=t.or++;return s=>t.parser.alternatives(a,[{ALT:o(()=>r(s),"ALT"),GATE:o(()=>i(s),"GATE")},{ALT:RS(),GATE:o(()=>!i(s),"GATE")}])}else return r;if(n==="*"){let a=t.many++;return s=>t.parser.many(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else if(n==="+"){let a=t.many++;if(i){let s=t.or++;return l=>t.parser.alternatives(s,[{ALT:o(()=>t.parser.atLeastOne(a,{DEF:o(()=>r(l),"DEF")}),"ALT"),GATE:o(()=>i(l),"GATE")},{ALT:RS(),GATE:o(()=>!i(l),"GATE")}])}else return s=>t.parser.atLeastOne(a,{DEF:o(()=>r(s),"DEF")})}else if(n==="?"){let a=t.optional++;return s=>t.parser.optional(a,{DEF:o(()=>r(s),"DEF"),GATE:i?()=>i(s):void 0})}else Uc(n)}function rme(t,e){let r=KXe(t,e),n=t.parser.getRule(r);if(!n)throw new Error(`Rule "${r}" not found."`);return n}function KXe(t,e){if(Va(e))return e.name;if(t.ruleNames.has(e))return t.ruleNames.get(e);{let r=e,n=r.$container,i=e.$type;for(;!Va(n);)(Of(n)||FE(n)||zE(n))&&(i=n.elements.indexOf(r).toString()+":"+i),r=n,n=n.$container;return i=n.name+":"+i,t.ruleNames.set(e,i),i}}function GP(t,e){let r=t.tokens[e];if(!r)throw new Error(`Token "${e}" not found."`);return r}var US=M(()=>{"use strict";Ff();Hc();ME();Ys();zl();o(Db,"createParser");o(VXe,"buildRules");o(jp,"buildElement");o(UXe,"buildAction");o(HXe,"buildRuleCall");o(qXe,"buildRuleCallPredicate");o(eh,"buildPredicate");o(WXe,"buildAlternatives");o(YXe,"buildUnorderedGroup");o(XXe,"buildGroup");o(VS,"getGuardCondition");o(eme,"buildCrossReference");o(jXe,"buildKeyword");o(tme,"wrap");o(rme,"getRule");o(KXe,"getRuleName");o(GP,"getToken")});function VP(t){let e=t.Grammar,r=t.parser.Lexer,n=new Ab(t);return Db(e,n,r.definition),n.finalize(),n}var UP=M(()=>{"use strict";_b();US();o(VP,"createCompletionParser")});function HP(t){let e=nme(t);return e.finalize(),e}function nme(t){let e=t.Grammar,r=t.parser.Lexer,n=new Cb(t);return Db(e,n,r.definition)}var qP=M(()=>{"use strict";_b();US();o(HP,"createLangiumParser");o(nme,"prepareLangiumParser")});var th,HS=M(()=>{"use strict";Ff();Hc();hs();zl();l1();Ys();th=class{static{o(this,"DefaultTokenBuilder")}constructor(){this.diagnostics=[]}buildTokens(e,r){let n=an(Xx(e,!1)),i=this.buildTerminalTokens(n),a=this.buildKeywordTokens(n,i,r);return i.forEach(s=>{let l=s.PATTERN;typeof l=="object"&&l&&"test"in l&&o1(l)?a.unshift(s):a.push(s)}),a}flushLexingReport(e){return{diagnostics:this.popDiagnostics()}}popDiagnostics(){let e=[...this.diagnostics];return this.diagnostics=[],e}buildTerminalTokens(e){return e.filter(mo).filter(r=>!r.fragment).map(r=>this.buildTerminalToken(r)).toArray()}buildTerminalToken(e){let r=u1(e),n=this.requiresCustomPattern(r)?this.regexPatternFunction(r):r,i={name:e.name,PATTERN:n};return typeof n=="function"&&(i.LINE_BREAKS=!0),e.hidden&&(i.GROUP=o1(r)?Zn.SKIPPED:"hidden"),i}requiresCustomPattern(e){return e.flags.includes("u")||e.flags.includes("s")?!0:!!(e.source.includes("?<=")||e.source.includes("?(r.lastIndex=i,r.exec(n))}buildKeywordTokens(e,r,n){return e.filter(Va).flatMap(i=>qc(i).filter(Zo)).distinct(i=>i.value).toArray().sort((i,a)=>a.value.length-i.value.length).map(i=>this.buildKeywordToken(i,r,!!n?.caseInsensitive))}buildKeywordToken(e,r,n){let i=this.buildKeywordPattern(e,n),a={name:e.value,PATTERN:i,LONGER_ALT:this.findLongerAlt(e,r)};return typeof i=="function"&&(a.LINE_BREAKS=!0),a}buildKeywordPattern(e,r){return r?new RegExp(kO(e.value)):e.value}findLongerAlt(e,r){return r.reduce((n,i)=>{let a=i?.PATTERN;return a?.source&&EO("^"+a.source+"$",e.value)&&n.push(i),n},[])}}});var Kp,Xc,WP=M(()=>{"use strict";Hc();zl();Kp=class{static{o(this,"DefaultValueConverter")}convert(e,r){let n=r.grammarSource;if(Mp(n)&&(n=AO(n)),$l(n)){let i=n.rule.ref;if(!i)throw new Error("This cst node was not parsed by a rule.");return this.runConverter(i,e,r)}return e}runConverter(e,r,n){var i;switch(e.name.toUpperCase()){case"INT":return Xc.convertInt(r);case"STRING":return Xc.convertString(r);case"ID":return Xc.convertID(r)}switch((i=IO(e))===null||i===void 0?void 0:i.toLowerCase()){case"number":return Xc.convertNumber(r);case"boolean":return Xc.convertBoolean(r);case"bigint":return Xc.convertBigint(r);case"date":return Xc.convertDate(r);default:return r}}};(function(t){function e(h){let f="";for(let d=1;d{"use strict";Object.defineProperty(jP,"__esModule",{value:!0});var YP;function XP(){if(YP===void 0)throw new Error("No runtime abstraction layer installed");return YP}o(XP,"RAL");(function(t){function e(r){if(r===void 0)throw new Error("No runtime abstraction layer provided");YP=r}o(e,"install"),t.install=e})(XP||(XP={}));jP.default=XP});var sme=sa(Ha=>{"use strict";Object.defineProperty(Ha,"__esModule",{value:!0});Ha.stringArray=Ha.array=Ha.func=Ha.error=Ha.number=Ha.string=Ha.boolean=void 0;function QXe(t){return t===!0||t===!1}o(QXe,"boolean");Ha.boolean=QXe;function ime(t){return typeof t=="string"||t instanceof String}o(ime,"string");Ha.string=ime;function ZXe(t){return typeof t=="number"||t instanceof Number}o(ZXe,"number");Ha.number=ZXe;function JXe(t){return t instanceof Error}o(JXe,"error");Ha.error=JXe;function eje(t){return typeof t=="function"}o(eje,"func");Ha.func=eje;function ame(t){return Array.isArray(t)}o(ame,"array");Ha.array=ame;function tje(t){return ame(t)&&t.every(e=>ime(e))}o(tje,"stringArray");Ha.stringArray=tje});var ZP=sa($1=>{"use strict";Object.defineProperty($1,"__esModule",{value:!0});$1.Emitter=$1.Event=void 0;var rje=KP(),ome;(function(t){let e={dispose(){}};t.None=function(){return e}})(ome||($1.Event=ome={}));var QP=class{static{o(this,"CallbackList")}add(e,r=null,n){this._callbacks||(this._callbacks=[],this._contexts=[]),this._callbacks.push(e),this._contexts.push(r),Array.isArray(n)&&n.push({dispose:o(()=>this.remove(e,r),"dispose")})}remove(e,r=null){if(!this._callbacks)return;let n=!1;for(let i=0,a=this._callbacks.length;i{this._callbacks||(this._callbacks=new QP),this._options&&this._options.onFirstListenerAdd&&this._callbacks.isEmpty()&&this._options.onFirstListenerAdd(this),this._callbacks.add(e,r);let i={dispose:o(()=>{this._callbacks&&(this._callbacks.remove(e,r),i.dispose=t._noop,this._options&&this._options.onLastListenerRemove&&this._callbacks.isEmpty()&&this._options.onLastListenerRemove(this))},"dispose")};return Array.isArray(n)&&n.push(i),i}),this._event}fire(e){this._callbacks&&this._callbacks.invoke.call(this._callbacks,e)}dispose(){this._callbacks&&(this._callbacks.dispose(),this._callbacks=void 0)}};$1.Emitter=qS;qS._noop=function(){}});var lme=sa(z1=>{"use strict";Object.defineProperty(z1,"__esModule",{value:!0});z1.CancellationTokenSource=z1.CancellationToken=void 0;var nje=KP(),ije=sme(),JP=ZP(),WS;(function(t){t.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:JP.Event.None}),t.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:JP.Event.None});function e(r){let n=r;return n&&(n===t.None||n===t.Cancelled||ije.boolean(n.isCancellationRequested)&&!!n.onCancellationRequested)}o(e,"is"),t.is=e})(WS||(z1.CancellationToken=WS={}));var aje=Object.freeze(function(t,e){let r=(0,nje.default)().timer.setTimeout(t.bind(e),0);return{dispose(){r.dispose()}}}),YS=class{static{o(this,"MutableToken")}constructor(){this._isCancelled=!1}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?aje:(this._emitter||(this._emitter=new JP.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=void 0)}},eB=class{static{o(this,"CancellationTokenSource")}get token(){return this._token||(this._token=new YS),this._token}cancel(){this._token?this._token.cancel():this._token=WS.Cancelled}dispose(){this._token?this._token instanceof YS&&this._token.dispose():this._token=WS.None}};z1.CancellationTokenSource=eB});var br={};var el=M(()=>{"use strict";Lr(br,La(lme(),1))});function tB(){return new Promise(t=>{typeof setImmediate>"u"?setTimeout(t,0):setImmediate(t)})}function jS(){return XS=performance.now(),new br.CancellationTokenSource}function ume(t){cme=t}function Kc(t){return t===jc}async function bi(t){if(t===br.CancellationToken.None)return;let e=performance.now();if(e-XS>=cme&&(XS=e,await tB(),XS=performance.now()),t.isCancellationRequested)throw jc}var XS,cme,jc,gs,tl=M(()=>{"use strict";el();o(tB,"delayNextTick");XS=0,cme=10;o(jS,"startCancelableOperation");o(ume,"setInterruptionPeriod");jc=Symbol("OperationCancelled");o(Kc,"isOperationCancelled");o(bi,"interruptAndCheck");gs=class{static{o(this,"Deferred")}constructor(){this.promise=new Promise((e,r)=>{this.resolve=n=>(e(n),this),this.reject=n=>(r(n),this)})}}});function rB(t,e){if(t.length<=1)return t;let r=t.length/2|0,n=t.slice(0,r),i=t.slice(r);rB(n,e),rB(i,e);let a=0,s=0,l=0;for(;ar.line||e.line===r.line&&e.character>r.character?{start:r,end:e}:t}function sje(t){let e=dme(t.range);return e!==t.range?{newText:t.newText,range:e}:t}var KS,G1,pme=M(()=>{"use strict";KS=class t{static{o(this,"FullTextDocument")}constructor(e,r,n,i){this._uri=e,this._languageId=r,this._version=n,this._content=i,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let r=this.offsetAt(e.start),n=this.offsetAt(e.end);return this._content.substring(r,n)}return this._content}update(e,r){for(let n of e)if(t.isIncremental(n)){let i=dme(n.range),a=this.offsetAt(i.start),s=this.offsetAt(i.end);this._content=this._content.substring(0,a)+n.text+this._content.substring(s,this._content.length);let l=Math.max(i.start.line,0),u=Math.max(i.end.line,0),h=this._lineOffsets,f=hme(n.text,!1,a);if(u-l===f.length)for(let p=0,m=f.length;pe?i=s:n=s+1}let a=n-1;return e=this.ensureBeforeEOL(e,r[a]),{line:a,character:e-r[a]}}offsetAt(e){let r=this.getLineOffsets();if(e.line>=r.length)return this._content.length;if(e.line<0)return 0;let n=r[e.line];if(e.character<=0)return n;let i=e.line+1r&&fme(this._content.charCodeAt(e-1));)e--;return e}get lineCount(){return this.getLineOffsets().length}static isIncremental(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range!==void 0&&(r.rangeLength===void 0||typeof r.rangeLength=="number")}static isFull(e){let r=e;return r!=null&&typeof r.text=="string"&&r.range===void 0&&r.rangeLength===void 0}};(function(t){function e(i,a,s,l){return new KS(i,a,s,l)}o(e,"create"),t.create=e;function r(i,a,s){if(i instanceof KS)return i.update(a,s),i;throw new Error("TextDocument.update: document must be created by TextDocument.create")}o(r,"update"),t.update=r;function n(i,a){let s=i.getText(),l=rB(a.map(sje),(f,d)=>{let p=f.range.start.line-d.range.start.line;return p===0?f.range.start.character-d.range.start.character:p}),u=0,h=[];for(let f of l){let d=i.offsetAt(f.range.start);if(du&&h.push(s.substring(u,d)),f.newText.length&&h.push(f.newText),u=i.offsetAt(f.range.end)}return h.push(s.substr(u)),h.join("")}o(n,"applyEdits"),t.applyEdits=n})(G1||(G1={}));o(rB,"mergeSort");o(hme,"computeLineOffsets");o(fme,"isEOL");o(dme,"getWellformedRange");o(sje,"getWellformedEdit")});var mme,ys,V1,nB=M(()=>{"use strict";(()=>{"use strict";var t={470:i=>{function a(u){if(typeof u!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(u))}o(a,"e");function s(u,h){for(var f,d="",p=0,m=-1,g=0,y=0;y<=u.length;++y){if(y2){var v=d.lastIndexOf("/");if(v!==d.length-1){v===-1?(d="",p=0):p=(d=d.slice(0,v)).length-1-d.lastIndexOf("/"),m=y,g=0;continue}}else if(d.length===2||d.length===1){d="",p=0,m=y,g=0;continue}}h&&(d.length>0?d+="/..":d="..",p=2)}else d.length>0?d+="/"+u.slice(m+1,y):d=u.slice(m+1,y),p=y-m-1;m=y,g=0}else f===46&&g!==-1?++g:g=-1}return d}o(s,"r");var l={resolve:o(function(){for(var u,h="",f=!1,d=arguments.length-1;d>=-1&&!f;d--){var p;d>=0?p=arguments[d]:(u===void 0&&(u=process.cwd()),p=u),a(p),p.length!==0&&(h=p+"/"+h,f=p.charCodeAt(0)===47)}return h=s(h,!f),f?h.length>0?"/"+h:"/":h.length>0?h:"."},"resolve"),normalize:o(function(u){if(a(u),u.length===0)return".";var h=u.charCodeAt(0)===47,f=u.charCodeAt(u.length-1)===47;return(u=s(u,!h)).length!==0||h||(u="."),u.length>0&&f&&(u+="/"),h?"/"+u:u},"normalize"),isAbsolute:o(function(u){return a(u),u.length>0&&u.charCodeAt(0)===47},"isAbsolute"),join:o(function(){if(arguments.length===0)return".";for(var u,h=0;h0&&(u===void 0?u=f:u+="/"+f)}return u===void 0?".":l.normalize(u)},"join"),relative:o(function(u,h){if(a(u),a(h),u===h||(u=l.resolve(u))===(h=l.resolve(h)))return"";for(var f=1;fy){if(h.charCodeAt(m+x)===47)return h.slice(m+x+1);if(x===0)return h.slice(m+x)}else p>y&&(u.charCodeAt(f+x)===47?v=x:x===0&&(v=0));break}var b=u.charCodeAt(f+x);if(b!==h.charCodeAt(m+x))break;b===47&&(v=x)}var T="";for(x=f+v+1;x<=d;++x)x!==d&&u.charCodeAt(x)!==47||(T.length===0?T+="..":T+="/..");return T.length>0?T+h.slice(m+v):(m+=v,h.charCodeAt(m)===47&&++m,h.slice(m))},"relative"),_makeLong:o(function(u){return u},"_makeLong"),dirname:o(function(u){if(a(u),u.length===0)return".";for(var h=u.charCodeAt(0),f=h===47,d=-1,p=!0,m=u.length-1;m>=1;--m)if((h=u.charCodeAt(m))===47){if(!p){d=m;break}}else p=!1;return d===-1?f?"/":".":f&&d===1?"//":u.slice(0,d)},"dirname"),basename:o(function(u,h){if(h!==void 0&&typeof h!="string")throw new TypeError('"ext" argument must be a string');a(u);var f,d=0,p=-1,m=!0;if(h!==void 0&&h.length>0&&h.length<=u.length){if(h.length===u.length&&h===u)return"";var g=h.length-1,y=-1;for(f=u.length-1;f>=0;--f){var v=u.charCodeAt(f);if(v===47){if(!m){d=f+1;break}}else y===-1&&(m=!1,y=f+1),g>=0&&(v===h.charCodeAt(g)?--g==-1&&(p=f):(g=-1,p=y))}return d===p?p=y:p===-1&&(p=u.length),u.slice(d,p)}for(f=u.length-1;f>=0;--f)if(u.charCodeAt(f)===47){if(!m){d=f+1;break}}else p===-1&&(m=!1,p=f+1);return p===-1?"":u.slice(d,p)},"basename"),extname:o(function(u){a(u);for(var h=-1,f=0,d=-1,p=!0,m=0,g=u.length-1;g>=0;--g){var y=u.charCodeAt(g);if(y!==47)d===-1&&(p=!1,d=g+1),y===46?h===-1?h=g:m!==1&&(m=1):h!==-1&&(m=-1);else if(!p){f=g+1;break}}return h===-1||d===-1||m===0||m===1&&h===d-1&&h===f+1?"":u.slice(h,d)},"extname"),format:o(function(u){if(u===null||typeof u!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof u);return(function(h,f){var d=f.dir||f.root,p=f.base||(f.name||"")+(f.ext||"");return d?d===f.root?d+p:d+"/"+p:p})(0,u)},"format"),parse:o(function(u){a(u);var h={root:"",dir:"",base:"",ext:"",name:""};if(u.length===0)return h;var f,d=u.charCodeAt(0),p=d===47;p?(h.root="/",f=1):f=0;for(var m=-1,g=0,y=-1,v=!0,x=u.length-1,b=0;x>=f;--x)if((d=u.charCodeAt(x))!==47)y===-1&&(v=!1,y=x+1),d===46?m===-1?m=x:b!==1&&(b=1):m!==-1&&(b=-1);else if(!v){g=x+1;break}return m===-1||y===-1||b===0||b===1&&m===y-1&&m===g+1?y!==-1&&(h.base=h.name=g===0&&p?u.slice(1,y):u.slice(g,y)):(g===0&&p?(h.name=u.slice(1,m),h.base=u.slice(1,y)):(h.name=u.slice(g,m),h.base=u.slice(g,y)),h.ext=u.slice(m,y)),g>0?h.dir=u.slice(0,g-1):p&&(h.dir="/"),h},"parse"),sep:"/",delimiter:":",win32:null,posix:null};l.posix=l,i.exports=l}},e={};function r(i){var a=e[i];if(a!==void 0)return a.exports;var s=e[i]={exports:{}};return t[i](s,s.exports,r),s.exports}o(r,"r"),r.d=(i,a)=>{for(var s in a)r.o(a,s)&&!r.o(i,s)&&Object.defineProperty(i,s,{enumerable:!0,get:a[s]})},r.o=(i,a)=>Object.prototype.hasOwnProperty.call(i,a),r.r=i=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})};var n={};(()=>{let i;r.r(n),r.d(n,{URI:o(()=>p,"URI"),Utils:o(()=>I,"Utils")}),typeof process=="object"?i=process.platform==="win32":typeof navigator=="object"&&(i=navigator.userAgent.indexOf("Windows")>=0);let a=/^\w[\w\d+.-]*$/,s=/^\//,l=/^\/\//;function u(R,E){if(!R.scheme&&E)throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${R.authority}", path: "${R.path}", query: "${R.query}", fragment: "${R.fragment}"}`);if(R.scheme&&!a.test(R.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(R.path){if(R.authority){if(!s.test(R.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(l.test(R.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}o(u,"s");let h="",f="/",d=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;class p{static{o(this,"f")}static isUri(E){return E instanceof p||!!E&&typeof E.authority=="string"&&typeof E.fragment=="string"&&typeof E.path=="string"&&typeof E.query=="string"&&typeof E.scheme=="string"&&typeof E.fsPath=="string"&&typeof E.with=="function"&&typeof E.toString=="function"}scheme;authority;path;query;fragment;constructor(E,_,D,O,N,P=!1){typeof E=="object"?(this.scheme=E.scheme||h,this.authority=E.authority||h,this.path=E.path||h,this.query=E.query||h,this.fragment=E.fragment||h):(this.scheme=(function(B,F){return B||F?B:"file"})(E,P),this.authority=_||h,this.path=(function(B,F){switch(B){case"https":case"http":case"file":F?F[0]!==f&&(F=f+F):F=f}return F})(this.scheme,D||h),this.query=O||h,this.fragment=N||h,u(this,P))}get fsPath(){return b(this,!1)}with(E){if(!E)return this;let{scheme:_,authority:D,path:O,query:N,fragment:P}=E;return _===void 0?_=this.scheme:_===null&&(_=h),D===void 0?D=this.authority:D===null&&(D=h),O===void 0?O=this.path:O===null&&(O=h),N===void 0?N=this.query:N===null&&(N=h),P===void 0?P=this.fragment:P===null&&(P=h),_===this.scheme&&D===this.authority&&O===this.path&&N===this.query&&P===this.fragment?this:new g(_,D,O,N,P)}static parse(E,_=!1){let D=d.exec(E);return D?new g(D[2]||h,k(D[4]||h),k(D[5]||h),k(D[7]||h),k(D[9]||h),_):new g(h,h,h,h,h)}static file(E){let _=h;if(i&&(E=E.replace(/\\/g,f)),E[0]===f&&E[1]===f){let D=E.indexOf(f,2);D===-1?(_=E.substring(2),E=f):(_=E.substring(2,D),E=E.substring(D)||f)}return new g("file",_,E,h,h)}static from(E){let _=new g(E.scheme,E.authority,E.path,E.query,E.fragment);return u(_,!0),_}toString(E=!1){return T(this,E)}toJSON(){return this}static revive(E){if(E){if(E instanceof p)return E;{let _=new g(E);return _._formatted=E.external,_._fsPath=E._sep===m?E.fsPath:null,_}}return E}}let m=i?1:void 0;class g extends p{static{o(this,"l")}_formatted=null;_fsPath=null;get fsPath(){return this._fsPath||(this._fsPath=b(this,!1)),this._fsPath}toString(E=!1){return E?T(this,!0):(this._formatted||(this._formatted=T(this,!1)),this._formatted)}toJSON(){let E={$mid:1};return this._fsPath&&(E.fsPath=this._fsPath,E._sep=m),this._formatted&&(E.external=this._formatted),this.path&&(E.path=this.path),this.scheme&&(E.scheme=this.scheme),this.authority&&(E.authority=this.authority),this.query&&(E.query=this.query),this.fragment&&(E.fragment=this.fragment),E}}let y={58:"%3A",47:"%2F",63:"%3F",35:"%23",91:"%5B",93:"%5D",64:"%40",33:"%21",36:"%24",38:"%26",39:"%27",40:"%28",41:"%29",42:"%2A",43:"%2B",44:"%2C",59:"%3B",61:"%3D",32:"%20"};function v(R,E,_){let D,O=-1;for(let N=0;N=97&&P<=122||P>=65&&P<=90||P>=48&&P<=57||P===45||P===46||P===95||P===126||E&&P===47||_&&P===91||_&&P===93||_&&P===58)O!==-1&&(D+=encodeURIComponent(R.substring(O,N)),O=-1),D!==void 0&&(D+=R.charAt(N));else{D===void 0&&(D=R.substr(0,N));let B=y[P];B!==void 0?(O!==-1&&(D+=encodeURIComponent(R.substring(O,N)),O=-1),D+=B):O===-1&&(O=N)}}return O!==-1&&(D+=encodeURIComponent(R.substring(O))),D!==void 0?D:R}o(v,"d");function x(R){let E;for(let _=0;_1&&R.scheme==="file"?`//${R.authority}${R.path}`:R.path.charCodeAt(0)===47&&(R.path.charCodeAt(1)>=65&&R.path.charCodeAt(1)<=90||R.path.charCodeAt(1)>=97&&R.path.charCodeAt(1)<=122)&&R.path.charCodeAt(2)===58?E?R.path.substr(1):R.path[1].toLowerCase()+R.path.substr(2):R.path,i&&(_=_.replace(/\//g,"\\")),_}o(b,"m");function T(R,E){let _=E?x:v,D="",{scheme:O,authority:N,path:P,query:B,fragment:F}=R;if(O&&(D+=O,D+=":"),(N||O==="file")&&(D+=f,D+=f),N){let V=N.indexOf("@");if(V!==-1){let $=N.substr(0,V);N=N.substr(V+1),V=$.lastIndexOf(":"),V===-1?D+=_($,!1,!1):(D+=_($.substr(0,V),!1,!1),D+=":",D+=_($.substr(V+1),!1,!0)),D+="@"}N=N.toLowerCase(),V=N.lastIndexOf(":"),V===-1?D+=_(N,!1,!0):(D+=_(N.substr(0,V),!1,!0),D+=N.substr(V))}if(P){if(P.length>=3&&P.charCodeAt(0)===47&&P.charCodeAt(2)===58){let V=P.charCodeAt(1);V>=65&&V<=90&&(P=`/${String.fromCharCode(V+32)}:${P.substr(3)}`)}else if(P.length>=2&&P.charCodeAt(1)===58){let V=P.charCodeAt(0);V>=65&&V<=90&&(P=`${String.fromCharCode(V+32)}:${P.substr(2)}`)}D+=_(P,!0,!1)}return B&&(D+="?",D+=_(B,!1,!1)),F&&(D+="#",D+=E?F:v(F,!1,!1)),D}o(T,"y");function S(R){try{return decodeURIComponent(R)}catch{return R.length>3?R.substr(0,3)+S(R.substr(3)):R}}o(S,"v");let w=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function k(R){return R.match(w)?R.replace(w,(E=>S(E))):R}o(k,"C");var C=r(470);let A=C.posix||C,L="/";var I;(function(R){R.joinPath=function(E,..._){return E.with({path:A.join(E.path,..._)})},R.resolvePath=function(E,..._){let D=E.path,O=!1;D[0]!==L&&(D=L+D,O=!0);let N=A.resolve(D,..._);return O&&N[0]===L&&!E.authority&&(N=N.substring(1)),E.with({path:N})},R.dirname=function(E){if(E.path.length===0||E.path===L)return E;let _=A.dirname(E.path);return _.length===1&&_.charCodeAt(0)===46&&(_=""),E.with({path:_})},R.basename=function(E){return A.basename(E.path)},R.extname=function(E){return A.extname(E.path)}})(I||(I={}))})(),mme=n})();({URI:ys,Utils:V1}=mme)});var vs,Qc=M(()=>{"use strict";nB();(function(t){t.basename=V1.basename,t.dirname=V1.dirname,t.extname=V1.extname,t.joinPath=V1.joinPath,t.resolvePath=V1.resolvePath;function e(i,a){return i?.toString()===a?.toString()}o(e,"equals"),t.equals=e;function r(i,a){let s=typeof i=="string"?i:i.path,l=typeof a=="string"?a:a.path,u=s.split("/").filter(m=>m.length>0),h=l.split("/").filter(m=>m.length>0),f=0;for(;f{"use strict";pme();U1();el();Ys();Qc();(function(t){t[t.Changed=0]="Changed",t[t.Parsed=1]="Parsed",t[t.IndexedContent=2]="IndexedContent",t[t.ComputedScopes=3]="ComputedScopes",t[t.Linked=4]="Linked",t[t.IndexedReferences=5]="IndexedReferences",t[t.Validated=6]="Validated"})(Ln||(Ln={}));Lb=class{static{o(this,"DefaultLangiumDocumentFactory")}constructor(e){this.serviceRegistry=e.ServiceRegistry,this.textDocuments=e.workspace.TextDocuments,this.fileSystemProvider=e.workspace.FileSystemProvider}async fromUri(e,r=br.CancellationToken.None){let n=await this.fileSystemProvider.readFile(e);return this.createAsync(e,n,r)}fromTextDocument(e,r,n){return r=r??ys.parse(e.uri),br.CancellationToken.is(n)?this.createAsync(r,e,n):this.create(r,e,n)}fromString(e,r,n){return br.CancellationToken.is(n)?this.createAsync(r,e,n):this.create(r,e,n)}fromModel(e,r){return this.create(r,{$model:e})}create(e,r,n){if(typeof r=="string"){let i=this.parse(e,r,n);return this.createLangiumDocument(i,e,void 0,r)}else if("$model"in r){let i={value:r.$model,parserErrors:[],lexerErrors:[]};return this.createLangiumDocument(i,e)}else{let i=this.parse(e,r.getText(),n);return this.createLangiumDocument(i,e,r)}}async createAsync(e,r,n){if(typeof r=="string"){let i=await this.parseAsync(e,r,n);return this.createLangiumDocument(i,e,void 0,r)}else{let i=await this.parseAsync(e,r.getText(),n);return this.createLangiumDocument(i,e,r)}}createLangiumDocument(e,r,n,i){let a;if(n)a={parseResult:e,uri:r,state:Ln.Parsed,references:[],textDocument:n};else{let s=this.createTextDocumentGetter(r,i);a={parseResult:e,uri:r,state:Ln.Parsed,references:[],get textDocument(){return s()}}}return e.value.$document=a,a}async update(e,r){var n,i;let a=(n=e.parseResult.value.$cstNode)===null||n===void 0?void 0:n.root.fullText,s=(i=this.textDocuments)===null||i===void 0?void 0:i.get(e.uri.toString()),l=s?s.getText():await this.fileSystemProvider.readFile(e.uri);if(s)Object.defineProperty(e,"textDocument",{value:s});else{let u=this.createTextDocumentGetter(e.uri,l);Object.defineProperty(e,"textDocument",{get:u})}return a!==l&&(e.parseResult=await this.parseAsync(e.uri,l,r),e.parseResult.value.$document=e),e.state=Ln.Parsed,e}parse(e,r,n){return this.serviceRegistry.getServices(e).parser.LangiumParser.parse(r,n)}parseAsync(e,r,n){return this.serviceRegistry.getServices(e).parser.AsyncParser.parse(r,n)}createTextDocumentGetter(e,r){let n=this.serviceRegistry,i;return()=>i??(i=G1.create(e.toString(),n.getServices(e).LanguageMetaData.languageId,0,r??""))}},Rb=class{static{o(this,"DefaultLangiumDocuments")}constructor(e){this.documentMap=new Map,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.serviceRegistry=e.ServiceRegistry}get all(){return an(this.documentMap.values())}addDocument(e){let r=e.uri.toString();if(this.documentMap.has(r))throw new Error(`A document with the URI '${r}' is already present.`);this.documentMap.set(r,e)}getDocument(e){let r=e.toString();return this.documentMap.get(r)}async getOrCreateDocument(e,r){let n=this.getDocument(e);return n||(n=await this.langiumDocumentFactory.fromUri(e,r),this.addDocument(n),n)}createDocument(e,r,n){if(n)return this.langiumDocumentFactory.fromString(r,e,n).then(i=>(this.addDocument(i),i));{let i=this.langiumDocumentFactory.fromString(r,e);return this.addDocument(i),i}}hasDocument(e){return this.documentMap.has(e.toString())}invalidateDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(this.serviceRegistry.getServices(e).references.Linker.unlink(n),n.state=Ln.Changed,n.precomputedScopes=void 0,n.diagnostics=void 0),n}deleteDocument(e){let r=e.toString(),n=this.documentMap.get(r);return n&&(n.state=Ln.Changed,this.documentMap.delete(r)),n}}});var iB,Nb,aB=M(()=>{"use strict";el();Pl();hs();tl();U1();iB=Symbol("ref_resolving"),Nb=class{static{o(this,"DefaultLinker")}constructor(e){this.reflection=e.shared.AstReflection,this.langiumDocuments=()=>e.shared.workspace.LangiumDocuments,this.scopeProvider=e.references.ScopeProvider,this.astNodeLocator=e.workspace.AstNodeLocator}async link(e,r=br.CancellationToken.None){for(let n of Jo(e.parseResult.value))await bi(r),a1(n).forEach(i=>this.doLink(i,e))}doLink(e,r){var n;let i=e.reference;if(i._ref===void 0){i._ref=iB;try{let a=this.getCandidate(e);if(_p(a))i._ref=a;else if(i._nodeDescription=a,this.langiumDocuments().hasDocument(a.documentUri)){let s=this.loadAstNode(a);i._ref=s??this.createLinkingError(e,a)}else i._ref=void 0}catch(a){console.error(`An error occurred while resolving reference to '${i.$refText}':`,a);let s=(n=a.message)!==null&&n!==void 0?n:String(a);i._ref=Object.assign(Object.assign({},e),{message:`An error occurred while resolving reference to '${i.$refText}': ${s}`})}r.references.push(i)}}unlink(e){for(let r of e.references)delete r._ref,delete r._nodeDescription;e.references=[]}getCandidate(e){let n=this.scopeProvider.getScope(e).getElement(e.reference.$refText);return n??this.createLinkingError(e)}buildReference(e,r,n,i){let a=this,s={$refNode:n,$refText:i,get ref(){var l;if(li(this._ref))return this._ref;if(qI(this._nodeDescription)){let u=a.loadAstNode(this._nodeDescription);this._ref=u??a.createLinkingError({reference:s,container:e,property:r},this._nodeDescription)}else if(this._ref===void 0){this._ref=iB;let u=Vx(e).$document,h=a.getLinkedNode({reference:s,container:e,property:r});if(h.error&&u&&u.state{"use strict";zl();o(gme,"isNamed");Mb=class{static{o(this,"DefaultNameProvider")}getName(e){if(gme(e))return e.name}getNameNode(e){return jx(e.$cstNode,"name")}}});var Ib,oB=M(()=>{"use strict";zl();Pl();hs();Bl();Ys();Qc();Ib=class{static{o(this,"DefaultReferences")}constructor(e){this.nameProvider=e.references.NameProvider,this.index=e.shared.workspace.IndexManager,this.nodeLocator=e.workspace.AstNodeLocator}findDeclaration(e){if(e){let r=MO(e),n=e.astNode;if(r&&n){let i=n[r.feature];if(wa(i))return i.ref;if(Array.isArray(i)){for(let a of i)if(wa(a)&&a.$refNode&&a.$refNode.offset<=e.offset&&a.$refNode.end>=e.end)return a.ref}}if(n){let i=this.nameProvider.getNameNode(n);if(i&&(i===e||YI(e,i)))return n}}}findDeclarationNode(e){let r=this.findDeclaration(e);if(r?.$cstNode){let n=this.nameProvider.getNameNode(r);return n??r.$cstNode}}findReferences(e,r){let n=[];if(r.includeDeclaration){let a=this.getReferenceToSelf(e);a&&n.push(a)}let i=this.index.findAllReferences(e,this.nodeLocator.getAstNodePath(e));return r.documentUri&&(i=i.filter(a=>vs.equals(a.sourceUri,r.documentUri))),n.push(...i),an(n)}getReferenceToSelf(e){let r=this.nameProvider.getNameNode(e);if(r){let n=Ua(e),i=this.nodeLocator.getAstNodePath(e);return{sourceUri:n.uri,sourcePath:i,targetUri:n.uri,targetPath:i,segment:Lp(r),local:!0}}}}});var Vl,Qp,H1=M(()=>{"use strict";Ys();Vl=class{static{o(this,"MultiMap")}constructor(e){if(this.map=new Map,e)for(let[r,n]of e)this.add(r,n)}get size(){return vg.sum(an(this.map.values()).map(e=>e.length))}clear(){this.map.clear()}delete(e,r){if(r===void 0)return this.map.delete(e);{let n=this.map.get(e);if(n){let i=n.indexOf(r);if(i>=0)return n.length===1?this.map.delete(e):n.splice(i,1),!0}return!1}}get(e){var r;return(r=this.map.get(e))!==null&&r!==void 0?r:[]}has(e,r){if(r===void 0)return this.map.has(e);{let n=this.map.get(e);return n?n.indexOf(r)>=0:!1}}add(e,r){return this.map.has(e)?this.map.get(e).push(r):this.map.set(e,[r]),this}addAll(e,r){return this.map.has(e)?this.map.get(e).push(...r):this.map.set(e,Array.from(r)),this}forEach(e){this.map.forEach((r,n)=>r.forEach(i=>e(i,n,this)))}[Symbol.iterator](){return this.entries().iterator()}entries(){return an(this.map.entries()).flatMap(([e,r])=>r.map(n=>[e,n]))}keys(){return an(this.map.keys())}values(){return an(this.map.values()).flat()}entriesGroupedByKey(){return an(this.map.entries())}},Qp=class{static{o(this,"BiMap")}get size(){return this.map.size}constructor(e){if(this.map=new Map,this.inverse=new Map,e)for(let[r,n]of e)this.set(r,n)}clear(){this.map.clear(),this.inverse.clear()}set(e,r){return this.map.set(e,r),this.inverse.set(r,e),this}get(e){return this.map.get(e)}getKey(e){return this.inverse.get(e)}delete(e){let r=this.map.get(e);return r!==void 0?(this.map.delete(e),this.inverse.delete(r),!0):!1}}});var Ob,lB=M(()=>{"use strict";el();hs();H1();tl();Ob=class{static{o(this,"DefaultScopeComputation")}constructor(e){this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider}async computeExports(e,r=br.CancellationToken.None){return this.computeExportsForNode(e.parseResult.value,e,void 0,r)}async computeExportsForNode(e,r,n=Ux,i=br.CancellationToken.None){let a=[];this.exportNode(e,a,r);for(let s of n(e))await bi(i),this.exportNode(s,a,r);return a}exportNode(e,r,n){let i=this.nameProvider.getName(e);i&&r.push(this.descriptions.createDescription(e,i,n))}async computeLocalScopes(e,r=br.CancellationToken.None){let n=e.parseResult.value,i=new Vl;for(let a of qc(n))await bi(r),this.processNode(a,e,i);return i}processNode(e,r,n){let i=e.$container;if(i){let a=this.nameProvider.getName(e);a&&n.add(i,this.descriptions.createDescription(e,a,r))}}}});var q1,Pb,oje,cB=M(()=>{"use strict";Ys();q1=class{static{o(this,"StreamScope")}constructor(e,r,n){var i;this.elements=e,this.outerScope=r,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1}getAllElements(){return this.outerScope?this.elements.concat(this.outerScope.getAllElements()):this.elements}getElement(e){let r=this.caseInsensitive?this.elements.find(n=>n.name.toLowerCase()===e.toLowerCase()):this.elements.find(n=>n.name===e);if(r)return r;if(this.outerScope)return this.outerScope.getElement(e)}},Pb=class{static{o(this,"MapScope")}constructor(e,r,n){var i;this.elements=new Map,this.caseInsensitive=(i=n?.caseInsensitive)!==null&&i!==void 0?i:!1;for(let a of e){let s=this.caseInsensitive?a.name.toLowerCase():a.name;this.elements.set(s,a)}this.outerScope=r}getElement(e){let r=this.caseInsensitive?e.toLowerCase():e,n=this.elements.get(r);if(n)return n;if(this.outerScope)return this.outerScope.getElement(e)}getAllElements(){let e=an(this.elements.values());return this.outerScope&&(e=e.concat(this.outerScope.getAllElements())),e}},oje={getElement(){},getAllElements(){return Nx}}});var W1,Bb,Zp,QS,Y1,ZS=M(()=>{"use strict";W1=class{static{o(this,"DisposableCache")}constructor(){this.toDispose=[],this.isDisposed=!1}onDispose(e){this.toDispose.push(e)}dispose(){this.throwIfDisposed(),this.clear(),this.isDisposed=!0,this.toDispose.forEach(e=>e.dispose())}throwIfDisposed(){if(this.isDisposed)throw new Error("This cache has already been disposed")}},Bb=class extends W1{static{o(this,"SimpleCache")}constructor(){super(...arguments),this.cache=new Map}has(e){return this.throwIfDisposed(),this.cache.has(e)}set(e,r){this.throwIfDisposed(),this.cache.set(e,r)}get(e,r){if(this.throwIfDisposed(),this.cache.has(e))return this.cache.get(e);if(r){let n=r();return this.cache.set(e,n),n}else return}delete(e){return this.throwIfDisposed(),this.cache.delete(e)}clear(){this.throwIfDisposed(),this.cache.clear()}},Zp=class extends W1{static{o(this,"ContextCache")}constructor(e){super(),this.cache=new Map,this.converter=e??(r=>r)}has(e,r){return this.throwIfDisposed(),this.cacheForContext(e).has(r)}set(e,r,n){this.throwIfDisposed(),this.cacheForContext(e).set(r,n)}get(e,r,n){this.throwIfDisposed();let i=this.cacheForContext(e);if(i.has(r))return i.get(r);if(n){let a=n();return i.set(r,a),a}else return}delete(e,r){return this.throwIfDisposed(),this.cacheForContext(e).delete(r)}clear(e){if(this.throwIfDisposed(),e){let r=this.converter(e);this.cache.delete(r)}else this.cache.clear()}cacheForContext(e){let r=this.converter(e),n=this.cache.get(r);return n||(n=new Map,this.cache.set(r,n)),n}},QS=class extends Zp{static{o(this,"DocumentCache")}constructor(e,r){super(n=>n.toString()),r?(this.toDispose.push(e.workspace.DocumentBuilder.onDocumentPhase(r,n=>{this.clear(n.uri.toString())})),this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{for(let a of i)this.clear(a)}))):this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{let a=n.concat(i);for(let s of a)this.clear(s)}))}},Y1=class extends Bb{static{o(this,"WorkspaceCache")}constructor(e,r){super(),r?(this.toDispose.push(e.workspace.DocumentBuilder.onBuildPhase(r,()=>{this.clear()})),this.toDispose.push(e.workspace.DocumentBuilder.onUpdate((n,i)=>{i.length>0&&this.clear()}))):this.toDispose.push(e.workspace.DocumentBuilder.onUpdate(()=>{this.clear()}))}}});var Fb,uB=M(()=>{"use strict";cB();hs();Ys();ZS();Fb=class{static{o(this,"DefaultScopeProvider")}constructor(e){this.reflection=e.shared.AstReflection,this.nameProvider=e.references.NameProvider,this.descriptions=e.workspace.AstNodeDescriptionProvider,this.indexManager=e.shared.workspace.IndexManager,this.globalScopeCache=new Y1(e.shared)}getScope(e){let r=[],n=this.reflection.getReferenceType(e),i=Ua(e.container).precomputedScopes;if(i){let s=e.container;do{let l=i.get(s);l.length>0&&r.push(an(l).filter(u=>this.reflection.isSubtype(u.type,n))),s=s.$container}while(s)}let a=this.getGlobalScope(n,e);for(let s=r.length-1;s>=0;s--)a=this.createScope(r[s],a);return a}createScope(e,r,n){return new q1(an(e),r,n)}createScopeForNodes(e,r,n){let i=an(e).map(a=>{let s=this.nameProvider.getName(a);if(s)return this.descriptions.createDescription(a,s)}).nonNullable();return new q1(i,r,n)}getGlobalScope(e,r){return this.globalScopeCache.get(e,()=>new Pb(this.indexManager.allElements(e)))}}});function hB(t){return typeof t.$comment=="string"}function yme(t){return typeof t=="object"&&!!t&&("$ref"in t||"$error"in t)}var $b,JS=M(()=>{"use strict";nB();Pl();hs();zl();o(hB,"isAstNodeWithComment");o(yme,"isIntermediateReference");$b=class{static{o(this,"DefaultJsonSerializer")}constructor(e){this.ignoreProperties=new Set(["$container","$containerProperty","$containerIndex","$document","$cstNode"]),this.langiumDocuments=e.shared.workspace.LangiumDocuments,this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider,this.commentProvider=e.documentation.CommentProvider}serialize(e,r){let n=r??{},i=r?.replacer,a=o((l,u)=>this.replacer(l,u,n),"defaultReplacer"),s=i?(l,u)=>i(l,u,a):a;try{return this.currentDocument=Ua(e),JSON.stringify(e,s,r?.space)}finally{this.currentDocument=void 0}}deserialize(e,r){let n=r??{},i=JSON.parse(e);return this.linkNode(i,i,n),i}replacer(e,r,{refText:n,sourceText:i,textRegions:a,comments:s,uriConverter:l}){var u,h,f,d;if(!this.ignoreProperties.has(e))if(wa(r)){let p=r.ref,m=n?r.$refText:void 0;if(p){let g=Ua(p),y="";this.currentDocument&&this.currentDocument!==g&&(l?y=l(g.uri,r):y=g.uri.toString());let v=this.astNodeLocator.getAstNodePath(p);return{$ref:`${y}#${v}`,$refText:m}}else return{$error:(h=(u=r.error)===null||u===void 0?void 0:u.message)!==null&&h!==void 0?h:"Could not resolve reference",$refText:m}}else if(li(r)){let p;if(a&&(p=this.addAstNodeRegionWithAssignmentsTo(Object.assign({},r)),(!e||r.$document)&&p?.$textRegion&&(p.$textRegion.documentURI=(f=this.currentDocument)===null||f===void 0?void 0:f.uri.toString())),i&&!e&&(p??(p=Object.assign({},r)),p.$sourceText=(d=r.$cstNode)===null||d===void 0?void 0:d.text),s){p??(p=Object.assign({},r));let m=this.commentProvider.getComment(r);m&&(p.$comment=m.replace(/\r/g,""))}return p??r}else return r}addAstNodeRegionWithAssignmentsTo(e){let r=o(n=>({offset:n.offset,end:n.end,length:n.length,range:n.range}),"createDocumentSegment");if(e.$cstNode){let n=e.$textRegion=r(e.$cstNode),i=n.assignments={};return Object.keys(e).filter(a=>!a.startsWith("$")).forEach(a=>{let s=DO(e.$cstNode,a).map(r);s.length!==0&&(i[a]=s)}),e}}linkNode(e,r,n,i,a,s){for(let[u,h]of Object.entries(e))if(Array.isArray(h))for(let f=0;f{"use strict";Qc();zb=class{static{o(this,"DefaultServiceRegistry")}get map(){return this.fileExtensionMap}constructor(e){this.languageIdMap=new Map,this.fileExtensionMap=new Map,this.textDocuments=e?.workspace.TextDocuments}register(e){let r=e.LanguageMetaData;for(let n of r.fileExtensions)this.fileExtensionMap.has(n)&&console.warn(`The file extension ${n} is used by multiple languages. It is now assigned to '${r.languageId}'.`),this.fileExtensionMap.set(n,e);this.languageIdMap.set(r.languageId,e),this.languageIdMap.size===1?this.singleton=e:this.singleton=void 0}getServices(e){var r,n;if(this.singleton!==void 0)return this.singleton;if(this.languageIdMap.size===0)throw new Error("The service registry is empty. Use `register` to register the services of a language.");let i=(n=(r=this.textDocuments)===null||r===void 0?void 0:r.get(e))===null||n===void 0?void 0:n.languageId;if(i!==void 0){let l=this.languageIdMap.get(i);if(l)return l}let a=vs.extname(e),s=this.fileExtensionMap.get(a);if(!s)throw i?new Error(`The service registry contains no services for the extension '${a}' for language '${i}'.`):new Error(`The service registry contains no services for the extension '${a}'.`);return s}hasServices(e){try{return this.getServices(e),!0}catch{return!1}}get all(){return Array.from(this.languageIdMap.values())}}});function Jp(t){return{code:t}}var X1,Gb,Vb=M(()=>{"use strict";vo();H1();tl();Ys();o(Jp,"diagnosticData");(function(t){t.all=["fast","slow","built-in"]})(X1||(X1={}));Gb=class{static{o(this,"ValidationRegistry")}constructor(e){this.entries=new Vl,this.entriesBefore=[],this.entriesAfter=[],this.reflection=e.shared.AstReflection}register(e,r=this,n="fast"){if(n==="built-in")throw new Error("The 'built-in' category is reserved for lexer, parser, and linker errors.");for(let[i,a]of Object.entries(e)){let s=a;if(Array.isArray(s))for(let l of s){let u={check:this.wrapValidationException(l,r),category:n};this.addEntry(i,u)}else if(typeof s=="function"){let l={check:this.wrapValidationException(s,r),category:n};this.addEntry(i,l)}else Uc(s)}}wrapValidationException(e,r){return async(n,i,a)=>{await this.handleException(()=>e.call(r,n,i,a),"An error occurred during validation",i,n)}}async handleException(e,r,n,i){try{await e()}catch(a){if(Kc(a))throw a;console.error(`${r}:`,a),a instanceof Error&&a.stack&&console.error(a.stack);let s=a instanceof Error?a.message:String(a);n("error",`${r}: ${s}`,{node:i})}}addEntry(e,r){if(e==="AstNode"){this.entries.add("AstNode",r);return}for(let n of this.reflection.getAllSubTypes(e))this.entries.add(n,r)}getChecks(e,r){let n=an(this.entries.get(e)).concat(this.entries.get("AstNode"));return r&&(n=n.filter(i=>r.includes(i.category))),n.map(i=>i.check)}registerBeforeDocument(e,r=this){this.entriesBefore.push(this.wrapPreparationException(e,"An error occurred during set-up of the validation",r))}registerAfterDocument(e,r=this){this.entriesAfter.push(this.wrapPreparationException(e,"An error occurred during tear-down of the validation",r))}wrapPreparationException(e,r,n){return async(i,a,s,l)=>{await this.handleException(()=>e.call(n,i,a,s,l),r,a,i)}}get checksBefore(){return this.entriesBefore}get checksAfter(){return this.entriesAfter}}});function vme(t){if(t.range)return t.range;let e;return typeof t.property=="string"?e=jx(t.node.$cstNode,t.property,t.index):typeof t.keyword=="string"&&(e=RO(t.node.$cstNode,t.keyword,t.index)),e??(e=t.node.$cstNode),e?e.range:{start:{line:0,character:0},end:{line:0,character:0}}}function e6(t){switch(t){case"error":return 1;case"warning":return 2;case"info":return 3;case"hint":return 4;default:throw new Error("Invalid diagnostic severity: "+t)}}function xme(t){switch(t){case"error":return Jp(rl.LexingError);case"warning":return Jp(rl.LexingWarning);case"info":return Jp(rl.LexingInfo);case"hint":return Jp(rl.LexingHint);default:throw new Error("Invalid diagnostic severity: "+t)}}var Ub,rl,dB=M(()=>{"use strict";el();zl();hs();Bl();tl();Vb();Ub=class{static{o(this,"DefaultDocumentValidator")}constructor(e){this.validationRegistry=e.validation.ValidationRegistry,this.metadata=e.LanguageMetaData}async validateDocument(e,r={},n=br.CancellationToken.None){let i=e.parseResult,a=[];if(await bi(n),(!r.categories||r.categories.includes("built-in"))&&(this.processLexingErrors(i,a,r),r.stopAfterLexingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===rl.LexingError})||(this.processParsingErrors(i,a,r),r.stopAfterParsingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===rl.ParsingError}))||(this.processLinkingErrors(e,a,r),r.stopAfterLinkingErrors&&a.some(s=>{var l;return((l=s.data)===null||l===void 0?void 0:l.code)===rl.LinkingError}))))return a;try{a.push(...await this.validateAst(i.value,r,n))}catch(s){if(Kc(s))throw s;console.error("An error occurred during validation:",s)}return await bi(n),a}processLexingErrors(e,r,n){var i,a,s;let l=[...e.lexerErrors,...(a=(i=e.lexerReport)===null||i===void 0?void 0:i.diagnostics)!==null&&a!==void 0?a:[]];for(let u of l){let h=(s=u.severity)!==null&&s!==void 0?s:"error",f={severity:e6(h),range:{start:{line:u.line-1,character:u.column-1},end:{line:u.line-1,character:u.column+u.length-1}},message:u.message,data:xme(h),source:this.getSource()};r.push(f)}}processParsingErrors(e,r,n){for(let i of e.parserErrors){let a;if(isNaN(i.token.startOffset)){if("previousToken"in i){let s=i.previousToken;if(isNaN(s.startOffset)){let l={line:0,character:0};a={start:l,end:l}}else{let l={line:s.endLine-1,character:s.endColumn};a={start:l,end:l}}}}else a=xg(i.token);if(a){let s={severity:e6("error"),range:a,message:i.message,data:Jp(rl.ParsingError),source:this.getSource()};r.push(s)}}}processLinkingErrors(e,r,n){for(let i of e.references){let a=i.error;if(a){let s={node:a.container,property:a.property,index:a.index,data:{code:rl.LinkingError,containerType:a.container.$type,property:a.property,refText:a.reference.$refText}};r.push(this.toDiagnostic("error",a.message,s))}}}async validateAst(e,r,n=br.CancellationToken.None){let i=[],a=o((s,l,u)=>{i.push(this.toDiagnostic(s,l,u))},"acceptor");return await this.validateAstBefore(e,r,a,n),await this.validateAstNodes(e,r,a,n),await this.validateAstAfter(e,r,a,n),i}async validateAstBefore(e,r,n,i=br.CancellationToken.None){var a;let s=this.validationRegistry.checksBefore;for(let l of s)await bi(i),await l(e,n,(a=r.categories)!==null&&a!==void 0?a:[],i)}async validateAstNodes(e,r,n,i=br.CancellationToken.None){await Promise.all(Jo(e).map(async a=>{await bi(i);let s=this.validationRegistry.getChecks(a.$type,r.categories);for(let l of s)await l(a,n,i)}))}async validateAstAfter(e,r,n,i=br.CancellationToken.None){var a;let s=this.validationRegistry.checksAfter;for(let l of s)await bi(i),await l(e,n,(a=r.categories)!==null&&a!==void 0?a:[],i)}toDiagnostic(e,r,n){return{message:r,range:vme(n),severity:e6(e),code:n.code,codeDescription:n.codeDescription,tags:n.tags,relatedInformation:n.relatedInformation,data:n.data,source:this.getSource()}}getSource(){return this.metadata.languageId}};o(vme,"getDiagnosticRange");o(e6,"toDiagnosticSeverity");o(xme,"toDiagnosticData");(function(t){t.LexingError="lexing-error",t.LexingWarning="lexing-warning",t.LexingInfo="lexing-info",t.LexingHint="lexing-hint",t.ParsingError="parsing-error",t.LinkingError="linking-error"})(rl||(rl={}))});var Hb,qb,pB=M(()=>{"use strict";el();Pl();hs();Bl();tl();Qc();Hb=class{static{o(this,"DefaultAstNodeDescriptionProvider")}constructor(e){this.astNodeLocator=e.workspace.AstNodeLocator,this.nameProvider=e.references.NameProvider}createDescription(e,r,n){let i=n??Ua(e);r??(r=this.nameProvider.getName(e));let a=this.astNodeLocator.getAstNodePath(e);if(!r)throw new Error(`Node at path ${a} has no name.`);let s,l=o(()=>{var u;return s??(s=Lp((u=this.nameProvider.getNameNode(e))!==null&&u!==void 0?u:e.$cstNode))},"nameSegmentGetter");return{node:e,name:r,get nameSegment(){return l()},selectionSegment:Lp(e.$cstNode),type:e.$type,documentUri:i.uri,path:a}}},qb=class{static{o(this,"DefaultReferenceDescriptionProvider")}constructor(e){this.nodeLocator=e.workspace.AstNodeLocator}async createDescriptions(e,r=br.CancellationToken.None){let n=[],i=e.parseResult.value;for(let a of Jo(i))await bi(r),a1(a).filter(s=>!_p(s)).forEach(s=>{let l=this.createDescription(s);l&&n.push(l)});return n}createDescription(e){let r=e.reference.$nodeDescription,n=e.reference.$refNode;if(!r||!n)return;let i=Ua(e.container).uri;return{sourceUri:i,sourcePath:this.nodeLocator.getAstNodePath(e.container),targetUri:r.documentUri,targetPath:r.path,segment:Lp(n),local:vs.equals(r.documentUri,i)}}}});var Wb,mB=M(()=>{"use strict";Wb=class{static{o(this,"DefaultAstNodeLocator")}constructor(){this.segmentSeparator="/",this.indexSeparator="@"}getAstNodePath(e){if(e.$container){let r=this.getAstNodePath(e.$container),n=this.getPathSegment(e);return r+this.segmentSeparator+n}return""}getPathSegment({$containerProperty:e,$containerIndex:r}){if(!e)throw new Error("Missing '$containerProperty' in AST node.");return r!==void 0?e+this.indexSeparator+r:e}getAstNode(e,r){return r.split(this.segmentSeparator).reduce((i,a)=>{if(!i||a.length===0)return i;let s=a.indexOf(this.indexSeparator);if(s>0){let l=a.substring(0,s),u=parseInt(a.substring(s+1)),h=i[l];return h?.[u]}return i[a]},e)}}});var ei={};var t6=M(()=>{"use strict";Lr(ei,La(ZP(),1))});var Yb,gB=M(()=>{"use strict";t6();tl();Yb=class{static{o(this,"DefaultConfigurationProvider")}constructor(e){this._ready=new gs,this.settings={},this.workspaceConfig=!1,this.onConfigurationSectionUpdateEmitter=new ei.Emitter,this.serviceRegistry=e.ServiceRegistry}get ready(){return this._ready.promise}initialize(e){var r,n;this.workspaceConfig=(n=(r=e.capabilities.workspace)===null||r===void 0?void 0:r.configuration)!==null&&n!==void 0?n:!1}async initialized(e){if(this.workspaceConfig){if(e.register){let r=this.serviceRegistry.all;e.register({section:r.map(n=>this.toSectionName(n.LanguageMetaData.languageId))})}if(e.fetchConfiguration){let r=this.serviceRegistry.all.map(i=>({section:this.toSectionName(i.LanguageMetaData.languageId)})),n=await e.fetchConfiguration(r);r.forEach((i,a)=>{this.updateSectionConfiguration(i.section,n[a])})}}this._ready.resolve()}updateConfiguration(e){e.settings&&Object.keys(e.settings).forEach(r=>{let n=e.settings[r];this.updateSectionConfiguration(r,n),this.onConfigurationSectionUpdateEmitter.fire({section:r,configuration:n})})}updateSectionConfiguration(e,r){this.settings[e]=r}async getConfiguration(e,r){await this.ready;let n=this.toSectionName(e);if(this.settings[n])return this.settings[n][r]}toSectionName(e){return`${e}`}get onConfigurationSectionUpdate(){return this.onConfigurationSectionUpdateEmitter.event}}});var Gf,yB=M(()=>{"use strict";(function(t){function e(r){return{dispose:o(async()=>await r(),"dispose")}}o(e,"create"),t.create=e})(Gf||(Gf={}))});var Xb,vB=M(()=>{"use strict";el();yB();H1();tl();Ys();Vb();U1();Xb=class{static{o(this,"DefaultDocumentBuilder")}constructor(e){this.updateBuildOptions={validation:{categories:["built-in","fast"]}},this.updateListeners=[],this.buildPhaseListeners=new Vl,this.documentPhaseListeners=new Vl,this.buildState=new Map,this.documentBuildWaiters=new Map,this.currentState=Ln.Changed,this.langiumDocuments=e.workspace.LangiumDocuments,this.langiumDocumentFactory=e.workspace.LangiumDocumentFactory,this.textDocuments=e.workspace.TextDocuments,this.indexManager=e.workspace.IndexManager,this.serviceRegistry=e.ServiceRegistry}async build(e,r={},n=br.CancellationToken.None){var i,a;for(let s of e){let l=s.uri.toString();if(s.state===Ln.Validated){if(typeof r.validation=="boolean"&&r.validation)s.state=Ln.IndexedReferences,s.diagnostics=void 0,this.buildState.delete(l);else if(typeof r.validation=="object"){let u=this.buildState.get(l),h=(i=u?.result)===null||i===void 0?void 0:i.validationChecks;if(h){let d=((a=r.validation.categories)!==null&&a!==void 0?a:X1.all).filter(p=>!h.includes(p));d.length>0&&(this.buildState.set(l,{completed:!1,options:{validation:Object.assign(Object.assign({},r.validation),{categories:d})},result:u.result}),s.state=Ln.IndexedReferences)}}}else this.buildState.delete(l)}this.currentState=Ln.Changed,await this.emitUpdate(e.map(s=>s.uri),[]),await this.buildDocuments(e,r,n)}async update(e,r,n=br.CancellationToken.None){this.currentState=Ln.Changed;for(let s of r)this.langiumDocuments.deleteDocument(s),this.buildState.delete(s.toString()),this.indexManager.remove(s);for(let s of e){if(!this.langiumDocuments.invalidateDocument(s)){let u=this.langiumDocumentFactory.fromModel({$type:"INVALID"},s);u.state=Ln.Changed,this.langiumDocuments.addDocument(u)}this.buildState.delete(s.toString())}let i=an(e).concat(r).map(s=>s.toString()).toSet();this.langiumDocuments.all.filter(s=>!i.has(s.uri.toString())&&this.shouldRelink(s,i)).forEach(s=>{this.serviceRegistry.getServices(s.uri).references.Linker.unlink(s),s.state=Math.min(s.state,Ln.ComputedScopes),s.diagnostics=void 0}),await this.emitUpdate(e,r),await bi(n);let a=this.sortDocuments(this.langiumDocuments.all.filter(s=>{var l;return s.staten(e,r)))}sortDocuments(e){let r=0,n=e.length-1;for(;r=0&&!this.hasTextDocument(e[n]);)n--;rn.error!==void 0)?!0:this.indexManager.isAffected(e,r)}onUpdate(e){return this.updateListeners.push(e),Gf.create(()=>{let r=this.updateListeners.indexOf(e);r>=0&&this.updateListeners.splice(r,1)})}async buildDocuments(e,r,n){this.prepareBuild(e,r),await this.runCancelable(e,Ln.Parsed,n,a=>this.langiumDocumentFactory.update(a,n)),await this.runCancelable(e,Ln.IndexedContent,n,a=>this.indexManager.updateContent(a,n)),await this.runCancelable(e,Ln.ComputedScopes,n,async a=>{let s=this.serviceRegistry.getServices(a.uri).references.ScopeComputation;a.precomputedScopes=await s.computeLocalScopes(a,n)}),await this.runCancelable(e,Ln.Linked,n,a=>this.serviceRegistry.getServices(a.uri).references.Linker.link(a,n)),await this.runCancelable(e,Ln.IndexedReferences,n,a=>this.indexManager.updateReferences(a,n));let i=e.filter(a=>this.shouldValidate(a));await this.runCancelable(i,Ln.Validated,n,a=>this.validate(a,n));for(let a of e){let s=this.buildState.get(a.uri.toString());s&&(s.completed=!0)}}prepareBuild(e,r){for(let n of e){let i=n.uri.toString(),a=this.buildState.get(i);(!a||a.completed)&&this.buildState.set(i,{completed:!1,options:r,result:a?.result})}}async runCancelable(e,r,n,i){let a=e.filter(l=>l.statel.state===r);await this.notifyBuildPhase(s,r,n),this.currentState=r}onBuildPhase(e,r){return this.buildPhaseListeners.add(e,r),Gf.create(()=>{this.buildPhaseListeners.delete(e,r)})}onDocumentPhase(e,r){return this.documentPhaseListeners.add(e,r),Gf.create(()=>{this.documentPhaseListeners.delete(e,r)})}waitUntil(e,r,n){let i;if(r&&"path"in r?i=r:n=r,n??(n=br.CancellationToken.None),i){let a=this.langiumDocuments.getDocument(i);if(a&&a.state>e)return Promise.resolve(i)}return this.currentState>=e?Promise.resolve(void 0):n.isCancellationRequested?Promise.reject(jc):new Promise((a,s)=>{let l=this.onBuildPhase(e,()=>{if(l.dispose(),u.dispose(),i){let h=this.langiumDocuments.getDocument(i);a(h?.uri)}else a(void 0)}),u=n.onCancellationRequested(()=>{l.dispose(),u.dispose(),s(jc)})})}async notifyDocumentPhase(e,r,n){let a=this.documentPhaseListeners.get(r).slice();for(let s of a)try{await s(e,n)}catch(l){if(!Kc(l))throw l}}async notifyBuildPhase(e,r,n){if(e.length===0)return;let a=this.buildPhaseListeners.get(r).slice();for(let s of a)await bi(n),await s(e,n)}shouldValidate(e){return!!this.getBuildOptions(e).validation}async validate(e,r){var n,i;let a=this.serviceRegistry.getServices(e.uri).validation.DocumentValidator,s=this.getBuildOptions(e).validation,l=typeof s=="object"?s:void 0,u=await a.validateDocument(e,l,r);e.diagnostics?e.diagnostics.push(...u):e.diagnostics=u;let h=this.buildState.get(e.uri.toString());if(h){(n=h.result)!==null&&n!==void 0||(h.result={});let f=(i=l?.categories)!==null&&i!==void 0?i:X1.all;h.result.validationChecks?h.result.validationChecks.push(...f):h.result.validationChecks=[...f]}}getBuildOptions(e){var r,n;return(n=(r=this.buildState.get(e.uri.toString()))===null||r===void 0?void 0:r.options)!==null&&n!==void 0?n:{}}}});var jb,xB=M(()=>{"use strict";hs();ZS();el();Ys();Qc();jb=class{static{o(this,"DefaultIndexManager")}constructor(e){this.symbolIndex=new Map,this.symbolByTypeIndex=new Zp,this.referenceIndex=new Map,this.documents=e.workspace.LangiumDocuments,this.serviceRegistry=e.ServiceRegistry,this.astReflection=e.AstReflection}findAllReferences(e,r){let n=Ua(e).uri,i=[];return this.referenceIndex.forEach(a=>{a.forEach(s=>{vs.equals(s.targetUri,n)&&s.targetPath===r&&i.push(s)})}),an(i)}allElements(e,r){let n=an(this.symbolIndex.keys());return r&&(n=n.filter(i=>!r||r.has(i))),n.map(i=>this.getFileDescriptions(i,e)).flat()}getFileDescriptions(e,r){var n;return r?this.symbolByTypeIndex.get(e,r,()=>{var a;return((a=this.symbolIndex.get(e))!==null&&a!==void 0?a:[]).filter(l=>this.astReflection.isSubtype(l.type,r))}):(n=this.symbolIndex.get(e))!==null&&n!==void 0?n:[]}remove(e){let r=e.toString();this.symbolIndex.delete(r),this.symbolByTypeIndex.clear(r),this.referenceIndex.delete(r)}async updateContent(e,r=br.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).references.ScopeComputation.computeExports(e,r),a=e.uri.toString();this.symbolIndex.set(a,i),this.symbolByTypeIndex.clear(a)}async updateReferences(e,r=br.CancellationToken.None){let i=await this.serviceRegistry.getServices(e.uri).workspace.ReferenceDescriptionProvider.createDescriptions(e,r);this.referenceIndex.set(e.uri.toString(),i)}isAffected(e,r){let n=this.referenceIndex.get(e.uri.toString());return n?n.some(i=>!i.local&&r.has(i.targetUri.toString())):!1}}});var Kb,bB=M(()=>{"use strict";el();tl();Qc();Kb=class{static{o(this,"DefaultWorkspaceManager")}constructor(e){this.initialBuildOptions={},this._ready=new gs,this.serviceRegistry=e.ServiceRegistry,this.langiumDocuments=e.workspace.LangiumDocuments,this.documentBuilder=e.workspace.DocumentBuilder,this.fileSystemProvider=e.workspace.FileSystemProvider,this.mutex=e.workspace.WorkspaceLock}get ready(){return this._ready.promise}get workspaceFolders(){return this.folders}initialize(e){var r;this.folders=(r=e.workspaceFolders)!==null&&r!==void 0?r:void 0}initialized(e){return this.mutex.write(r=>{var n;return this.initializeWorkspace((n=this.folders)!==null&&n!==void 0?n:[],r)})}async initializeWorkspace(e,r=br.CancellationToken.None){let n=await this.performStartup(e);await bi(r),await this.documentBuilder.build(n,this.initialBuildOptions,r)}async performStartup(e){let r=this.serviceRegistry.all.flatMap(a=>a.LanguageMetaData.fileExtensions),n=[],i=o(a=>{n.push(a),this.langiumDocuments.hasDocument(a.uri)||this.langiumDocuments.addDocument(a)},"collector");return await this.loadAdditionalDocuments(e,i),await Promise.all(e.map(a=>[a,this.getRootFolder(a)]).map(async a=>this.traverseFolder(...a,r,i))),this._ready.resolve(),n}loadAdditionalDocuments(e,r){return Promise.resolve()}getRootFolder(e){return ys.parse(e.uri)}async traverseFolder(e,r,n,i){let a=await this.fileSystemProvider.readDirectory(r);await Promise.all(a.map(async s=>{if(this.includeEntry(e,s,n)){if(s.isDirectory)await this.traverseFolder(e,s.uri,n,i);else if(s.isFile){let l=await this.langiumDocuments.getOrCreateDocument(s.uri);i(l)}}}))}includeEntry(e,r,n){let i=vs.basename(r.uri);if(i.startsWith("."))return!1;if(r.isDirectory)return i!=="node_modules"&&i!=="out";if(r.isFile){let a=vs.extname(r.uri);return n.includes(a)}return!1}}});function n6(t){return Array.isArray(t)&&(t.length===0||"name"in t[0])}function wB(t){return t&&"modes"in t&&"defaultMode"in t}function TB(t){return!n6(t)&&!wB(t)}var Qb,r6,e0,i6=M(()=>{"use strict";Ff();Qb=class{static{o(this,"DefaultLexerErrorMessageProvider")}buildUnexpectedCharactersMessage(e,r,n,i,a){return x1.buildUnexpectedCharactersMessage(e,r,n,i,a)}buildUnableToPopLexerModeMessage(e){return x1.buildUnableToPopLexerModeMessage(e)}},r6={mode:"full"},e0=class{static{o(this,"DefaultLexer")}constructor(e){this.errorMessageProvider=e.parser.LexerErrorMessageProvider,this.tokenBuilder=e.parser.TokenBuilder;let r=this.tokenBuilder.buildTokens(e.Grammar,{caseInsensitive:e.LanguageMetaData.caseInsensitive});this.tokenTypes=this.toTokenTypeDictionary(r);let n=TB(r)?Object.values(r):r,i=e.LanguageMetaData.mode==="production";this.chevrotainLexer=new Zn(n,{positionTracking:"full",skipValidations:i,errorMessageProvider:this.errorMessageProvider})}get definition(){return this.tokenTypes}tokenize(e,r=r6){var n,i,a;let s=this.chevrotainLexer.tokenize(e);return{tokens:s.tokens,errors:s.errors,hidden:(n=s.groups.hidden)!==null&&n!==void 0?n:[],report:(a=(i=this.tokenBuilder).flushLexingReport)===null||a===void 0?void 0:a.call(i,e)}}toTokenTypeDictionary(e){if(TB(e))return e;let r=wB(e)?Object.values(e.modes).flat():e,n={};return r.forEach(i=>n[i.name]=i),n}};o(n6,"isTokenTypeArray");o(wB,"isIMultiModeLexerDefinition");o(TB,"isTokenTypeDictionary")});function SB(t,e,r){let n,i;typeof t=="string"?(i=e,n=r):(i=t.range.start,n=e),i||(i=tn.create(0,0));let a=wme(t),s=AB(n),l=cje({lines:a,position:i,options:s});return pje({index:0,tokens:l,position:i})}function CB(t,e){let r=AB(e),n=wme(t);if(n.length===0)return!1;let i=n[0],a=n[n.length-1],s=r.start,l=r.end;return!!s?.exec(i)&&!!l?.exec(a)}function wme(t){let e="";return typeof t=="string"?e=t:e=t.text,e.split(TO)}function cje(t){var e,r,n;let i=[],a=t.position.line,s=t.position.character;for(let l=0;l=f.length){if(i.length>0){let m=tn.create(a,s);i.push({type:"break",content:"",range:Gr.create(m,m)})}}else{bme.lastIndex=d;let m=bme.exec(f);if(m){let g=m[0],y=m[1],v=tn.create(a,s+d),x=tn.create(a,s+d+g.length);i.push({type:"tag",content:y,range:Gr.create(v,x)}),d+=g.length,d=EB(f,d)}if(d0&&i[i.length-1].type==="break"?i.slice(0,-1):i}function uje(t,e,r,n){let i=[];if(t.length===0){let a=tn.create(r,n),s=tn.create(r,n+e.length);i.push({type:"text",content:e,range:Gr.create(a,s)})}else{let a=0;for(let l of t){let u=l.index,h=e.substring(a,u);h.length>0&&i.push({type:"text",content:e.substring(a,u),range:Gr.create(tn.create(r,a+n),tn.create(r,u+n))});let f=h.length+1,d=l[1];if(i.push({type:"inline-tag",content:d,range:Gr.create(tn.create(r,a+f+n),tn.create(r,a+f+d.length+n))}),f+=d.length,l.length===4){f+=l[2].length;let p=l[3];i.push({type:"text",content:p,range:Gr.create(tn.create(r,a+f+n),tn.create(r,a+f+p.length+n))})}else i.push({type:"text",content:"",range:Gr.create(tn.create(r,a+f+n),tn.create(r,a+f+n))});a=u+l[0].length}let s=e.substring(a);s.length>0&&i.push({type:"text",content:s,range:Gr.create(tn.create(r,a+n),tn.create(r,a+n+s.length))})}return i}function EB(t,e){let r=t.substring(e).match(hje);return r?e+r.index:t.length}function dje(t){let e=t.match(fje);if(e&&typeof e.index=="number")return e.index}function pje(t){var e,r,n,i;let a=tn.create(t.position.line,t.position.character);if(t.tokens.length===0)return new a6([],Gr.create(a,a));let s=[];for(;t.index0){let u=EB(e,a);s=e.substring(u),e=e.substring(0,a)}return(t==="linkcode"||t==="link"&&r.link==="code")&&(s=`\`${s}\``),(i=(n=r.renderLink)===null||n===void 0?void 0:n.call(r,e,s))!==null&&i!==void 0?i:xje(e,s)}}function xje(t,e){try{return ys.parse(t,!0),`[${e}](${t})`}catch{return t}}function Tme(t){return t.endsWith(` +`)?` +`:` + +`}var bme,lje,hje,fje,a6,Zb,Jb,s6,_B=M(()=>{"use strict";BP();l1();Qc();o(SB,"parseJSDoc");o(CB,"isJSDoc");o(wme,"getLines");bme=/\s*(@([\p{L}][\p{L}\p{N}]*)?)/uy,lje=/\{(@[\p{L}][\p{L}\p{N}]*)(\s*)([^\r\n}]+)?\}/gu;o(cje,"tokenize");o(uje,"buildInlineTokens");hje=/\S/,fje=/\s*$/;o(EB,"skipWhitespace");o(dje,"lastCharacter");o(pje,"parseJSDocComment");o(mje,"parseJSDocElement");o(gje,"appendEmptyLine");o(kme,"parseJSDocText");o(yje,"parseJSDocInline");o(Eme,"parseJSDocTag");o(Sme,"parseJSDocLine");o(AB,"normalizeOptions");o(kB,"normalizeOption");a6=class{static{o(this,"JSDocCommentImpl")}constructor(e,r){this.elements=e,this.range=r}getTag(e){return this.getAllTags().find(r=>r.name===e)}getTags(e){return this.getAllTags().filter(r=>r.name===e)}getAllTags(){return this.elements.filter(e=>"name"in e)}toString(){let e="";for(let r of this.elements)if(e.length===0)e=r.toString();else{let n=r.toString();e+=Tme(e)+n}return e.trim()}toMarkdown(e){let r="";for(let n of this.elements)if(r.length===0)r=n.toMarkdown(e);else{let i=n.toMarkdown(e);r+=Tme(r)+i}return r.trim()}},Zb=class{static{o(this,"JSDocTagImpl")}constructor(e,r,n,i){this.name=e,this.content=r,this.inline=n,this.range=i}toString(){let e=`@${this.name}`,r=this.content.toString();return this.content.inlines.length===1?e=`${e} ${r}`:this.content.inlines.length>1&&(e=`${e} +${r}`),this.inline?`{${e}}`:e}toMarkdown(e){var r,n;return(n=(r=e?.renderTag)===null||r===void 0?void 0:r.call(e,this))!==null&&n!==void 0?n:this.toMarkdownDefault(e)}toMarkdownDefault(e){let r=this.content.toMarkdown(e);if(this.inline){let a=vje(this.name,r,e??{});if(typeof a=="string")return a}let n="";e?.tag==="italic"||e?.tag===void 0?n="*":e?.tag==="bold"?n="**":e?.tag==="bold-italic"&&(n="***");let i=`${n}@${this.name}${n}`;return this.content.inlines.length===1?i=`${i} \u2014 ${r}`:this.content.inlines.length>1&&(i=`${i} +${r}`),this.inline?`{${i}}`:i}};o(vje,"renderInlineTag");o(xje,"renderLinkDefault");Jb=class{static{o(this,"JSDocTextImpl")}constructor(e,r){this.inlines=e,this.range=r}toString(){let e="";for(let r=0;rn.range.start.line&&(e+=` +`)}return e}toMarkdown(e){let r="";for(let n=0;ni.range.start.line&&(r+=` +`)}return r}},s6=class{static{o(this,"JSDocLineImpl")}constructor(e,r){this.text=e,this.range=r}toString(){return this.text}toMarkdown(){return this.text}};o(Tme,"fillNewlines")});var e4,DB=M(()=>{"use strict";hs();_B();e4=class{static{o(this,"JSDocDocumentationProvider")}constructor(e){this.indexManager=e.shared.workspace.IndexManager,this.commentProvider=e.documentation.CommentProvider}getDocumentation(e){let r=this.commentProvider.getComment(e);if(r&&CB(r))return SB(r).toMarkdown({renderLink:o((i,a)=>this.documentationLinkRenderer(e,i,a),"renderLink"),renderTag:o(i=>this.documentationTagRenderer(e,i),"renderTag")})}documentationLinkRenderer(e,r,n){var i;let a=(i=this.findNameInPrecomputedScopes(e,r))!==null&&i!==void 0?i:this.findNameInGlobalScope(e,r);if(a&&a.nameSegment){let s=a.nameSegment.range.start.line+1,l=a.nameSegment.range.start.character+1,u=a.documentUri.with({fragment:`L${s},${l}`});return`[${n}](${u.toString()})`}else return}documentationTagRenderer(e,r){}findNameInPrecomputedScopes(e,r){let i=Ua(e).precomputedScopes;if(!i)return;let a=e;do{let l=i.get(a).find(u=>u.name===r);if(l)return l;a=a.$container}while(a)}findNameInGlobalScope(e,r){return this.indexManager.allElements().find(i=>i.name===r)}}});var t4,LB=M(()=>{"use strict";JS();Bl();t4=class{static{o(this,"DefaultCommentProvider")}constructor(e){this.grammarConfig=()=>e.parser.GrammarConfig}getComment(e){var r;return hB(e)?e.$comment:(r=jI(e.$cstNode,this.grammarConfig().multilineCommentRules))===null||r===void 0?void 0:r.text}}});var r4,RB,NB,MB=M(()=>{"use strict";tl();t6();r4=class{static{o(this,"DefaultAsyncParser")}constructor(e){this.syncParser=e.parser.LangiumParser}parse(e,r){return Promise.resolve(this.syncParser.parse(e))}},RB=class{static{o(this,"AbstractThreadedAsyncParser")}constructor(e){this.threadCount=8,this.terminationDelay=200,this.workerPool=[],this.queue=[],this.hydrator=e.serializer.Hydrator}initializeWorkers(){for(;this.workerPool.length{if(this.queue.length>0){let r=this.queue.shift();r&&(e.lock(),r.resolve(e))}}),this.workerPool.push(e)}}async parse(e,r){let n=await this.acquireParserWorker(r),i=new gs,a,s=r.onCancellationRequested(()=>{a=setTimeout(()=>{this.terminateWorker(n)},this.terminationDelay)});return n.parse(e).then(l=>{let u=this.hydrator.hydrate(l);i.resolve(u)}).catch(l=>{i.reject(l)}).finally(()=>{s.dispose(),clearTimeout(a)}),i.promise}terminateWorker(e){e.terminate();let r=this.workerPool.indexOf(e);r>=0&&this.workerPool.splice(r,1)}async acquireParserWorker(e){this.initializeWorkers();for(let n of this.workerPool)if(n.ready)return n.lock(),n;let r=new gs;return e.onCancellationRequested(()=>{let n=this.queue.indexOf(r);n>=0&&this.queue.splice(n,1),r.reject(jc)}),this.queue.push(r),r.promise}},NB=class{static{o(this,"ParserWorker")}get ready(){return this._ready}get onReady(){return this.onReadyEmitter.event}constructor(e,r,n,i){this.onReadyEmitter=new ei.Emitter,this.deferred=new gs,this._ready=!0,this._parsing=!1,this.sendMessage=e,this._terminate=i,r(a=>{let s=a;this.deferred.resolve(s),this.unlock()}),n(a=>{this.deferred.reject(a),this.unlock()})}terminate(){this.deferred.reject(jc),this._terminate()}lock(){this._ready=!1}unlock(){this._parsing=!1,this._ready=!0,this.onReadyEmitter.fire()}parse(e){if(this._parsing)throw new Error("Parser worker is busy");return this._parsing=!0,this.deferred=new gs,this.sendMessage(e),this.deferred.promise}}});var n4,IB=M(()=>{"use strict";el();tl();n4=class{static{o(this,"DefaultWorkspaceLock")}constructor(){this.previousTokenSource=new br.CancellationTokenSource,this.writeQueue=[],this.readQueue=[],this.done=!0}write(e){this.cancelWrite();let r=jS();return this.previousTokenSource=r,this.enqueue(this.writeQueue,e,r.token)}read(e){return this.enqueue(this.readQueue,e)}enqueue(e,r,n=br.CancellationToken.None){let i=new gs,a={action:r,deferred:i,cancellationToken:n};return e.push(a),this.performNextOperation(),i.promise}async performNextOperation(){if(!this.done)return;let e=[];if(this.writeQueue.length>0)e.push(this.writeQueue.shift());else if(this.readQueue.length>0)e.push(...this.readQueue.splice(0,this.readQueue.length));else return;this.done=!1,await Promise.all(e.map(async({action:r,deferred:n,cancellationToken:i})=>{try{let a=await Promise.resolve().then(()=>r(i));n.resolve(a)}catch(a){Kc(a)?n.resolve(void 0):n.reject(a)}})),this.done=!0,this.performNextOperation()}cancelWrite(){this.previousTokenSource.cancel()}}});var i4,OB=M(()=>{"use strict";$S();Hc();Pl();hs();H1();Bl();i4=class{static{o(this,"DefaultHydrator")}constructor(e){this.grammarElementIdMap=new Qp,this.tokenTypeIdMap=new Qp,this.grammar=e.Grammar,this.lexer=e.parser.Lexer,this.linker=e.references.Linker}dehydrate(e){return{lexerErrors:e.lexerErrors,lexerReport:e.lexerReport?this.dehydrateLexerReport(e.lexerReport):void 0,parserErrors:e.parserErrors.map(r=>Object.assign(Object.assign({},r),{message:r.message})),value:this.dehydrateAstNode(e.value,this.createDehyrationContext(e.value))}}dehydrateLexerReport(e){return e}createDehyrationContext(e){let r=new Map,n=new Map;for(let i of Jo(e))r.set(i,{});if(e.$cstNode)for(let i of Dp(e.$cstNode))n.set(i,{});return{astNodes:r,cstNodes:n}}dehydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode!==void 0&&(n.$cstNode=this.dehydrateCstNode(e.$cstNode,r));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)li(l)?s.push(this.dehydrateAstNode(l,r)):wa(l)?s.push(this.dehydrateReference(l,r)):s.push(l)}else li(a)?n[i]=this.dehydrateAstNode(a,r):wa(a)?n[i]=this.dehydrateReference(a,r):a!==void 0&&(n[i]=a);return n}dehydrateReference(e,r){let n={};return n.$refText=e.$refText,e.$refNode&&(n.$refNode=r.cstNodes.get(e.$refNode)),n}dehydrateCstNode(e,r){let n=r.cstNodes.get(e);return Rx(e)?n.fullText=e.fullText:n.grammarSource=this.getGrammarElementId(e.grammarSource),n.hidden=e.hidden,n.astNode=r.astNodes.get(e.astNode),Ol(e)?n.content=e.content.map(i=>this.dehydrateCstNode(i,r)):If(e)&&(n.tokenType=e.tokenType.name,n.offset=e.offset,n.length=e.length,n.startLine=e.range.start.line,n.startColumn=e.range.start.character,n.endLine=e.range.end.line,n.endColumn=e.range.end.character),n}hydrate(e){let r=e.value,n=this.createHydrationContext(r);return"$cstNode"in r&&this.hydrateCstNode(r.$cstNode,n),{lexerErrors:e.lexerErrors,lexerReport:e.lexerReport,parserErrors:e.parserErrors,value:this.hydrateAstNode(r,n)}}createHydrationContext(e){let r=new Map,n=new Map;for(let a of Jo(e))r.set(a,{});let i;if(e.$cstNode)for(let a of Dp(e.$cstNode)){let s;"fullText"in a?(s=new B1(a.fullText),i=s):"content"in a?s=new Xp:"tokenType"in a&&(s=this.hydrateCstLeafNode(a)),s&&(n.set(a,s),s.root=i)}return{astNodes:r,cstNodes:n}}hydrateAstNode(e,r){let n=r.astNodes.get(e);n.$type=e.$type,n.$containerIndex=e.$containerIndex,n.$containerProperty=e.$containerProperty,e.$cstNode&&(n.$cstNode=r.cstNodes.get(e.$cstNode));for(let[i,a]of Object.entries(e))if(!i.startsWith("$"))if(Array.isArray(a)){let s=[];n[i]=s;for(let l of a)li(l)?s.push(this.setParent(this.hydrateAstNode(l,r),n)):wa(l)?s.push(this.hydrateReference(l,n,i,r)):s.push(l)}else li(a)?n[i]=this.setParent(this.hydrateAstNode(a,r),n):wa(a)?n[i]=this.hydrateReference(a,n,i,r):a!==void 0&&(n[i]=a);return n}setParent(e,r){return e.$container=r,e}hydrateReference(e,r,n,i){return this.linker.buildReference(r,n,i.cstNodes.get(e.$refNode),e.$refText)}hydrateCstNode(e,r,n=0){let i=r.cstNodes.get(e);if(typeof e.grammarSource=="number"&&(i.grammarSource=this.getGrammarElement(e.grammarSource)),i.astNode=r.astNodes.get(e.astNode),Ol(i))for(let a of e.content){let s=this.hydrateCstNode(a,r,n++);i.content.push(s)}return i}hydrateCstLeafNode(e){let r=this.getTokenType(e.tokenType),n=e.offset,i=e.length,a=e.startLine,s=e.startColumn,l=e.endLine,u=e.endColumn,h=e.hidden;return new Yp(n,i,{start:{line:a,character:s},end:{line:l,character:u}},r,h)}getTokenType(e){return this.lexer.definition[e]}getGrammarElementId(e){if(e)return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.get(e)}getGrammarElement(e){return this.grammarElementIdMap.size===0&&this.createGrammarElementIdMap(),this.grammarElementIdMap.getKey(e)}createGrammarElementIdMap(){let e=0;for(let r of Jo(this.grammar))$x(r)&&this.grammarElementIdMap.set(r,e++)}}});function ka(t){return{documentation:{CommentProvider:o(e=>new t4(e),"CommentProvider"),DocumentationProvider:o(e=>new e4(e),"DocumentationProvider")},parser:{AsyncParser:o(e=>new r4(e),"AsyncParser"),GrammarConfig:o(e=>PO(e),"GrammarConfig"),LangiumParser:o(e=>HP(e),"LangiumParser"),CompletionParser:o(e=>VP(e),"CompletionParser"),ValueConverter:o(()=>new Kp,"ValueConverter"),TokenBuilder:o(()=>new th,"TokenBuilder"),Lexer:o(e=>new e0(e),"Lexer"),ParserErrorMessageProvider:o(()=>new F1,"ParserErrorMessageProvider"),LexerErrorMessageProvider:o(()=>new Qb,"LexerErrorMessageProvider")},workspace:{AstNodeLocator:o(()=>new Wb,"AstNodeLocator"),AstNodeDescriptionProvider:o(e=>new Hb(e),"AstNodeDescriptionProvider"),ReferenceDescriptionProvider:o(e=>new qb(e),"ReferenceDescriptionProvider")},references:{Linker:o(e=>new Nb(e),"Linker"),NameProvider:o(()=>new Mb,"NameProvider"),ScopeProvider:o(e=>new Fb(e),"ScopeProvider"),ScopeComputation:o(e=>new Ob(e),"ScopeComputation"),References:o(e=>new Ib(e),"References")},serializer:{Hydrator:o(e=>new i4(e),"Hydrator"),JsonSerializer:o(e=>new $b(e),"JsonSerializer")},validation:{DocumentValidator:o(e=>new Ub(e),"DocumentValidator"),ValidationRegistry:o(e=>new Gb(e),"ValidationRegistry")},shared:o(()=>t.shared,"shared")}}function Ea(t){return{ServiceRegistry:o(e=>new zb(e),"ServiceRegistry"),workspace:{LangiumDocuments:o(e=>new Rb(e),"LangiumDocuments"),LangiumDocumentFactory:o(e=>new Lb(e),"LangiumDocumentFactory"),DocumentBuilder:o(e=>new Xb(e),"DocumentBuilder"),IndexManager:o(e=>new jb(e),"IndexManager"),WorkspaceManager:o(e=>new Kb(e),"WorkspaceManager"),FileSystemProvider:o(e=>t.fileSystemProvider(e),"FileSystemProvider"),WorkspaceLock:o(()=>new n4,"WorkspaceLock"),ConfigurationProvider:o(e=>new Yb(e),"ConfigurationProvider")}}}var PB=M(()=>{"use strict";BO();UP();qP();HS();WP();aB();sB();oB();lB();uB();JS();fB();dB();Vb();pB();mB();gB();vB();U1();xB();bB();i6();DB();LB();_b();MB();IB();OB();o(ka,"createDefaultCoreModule");o(Ea,"createDefaultSharedCoreModule")});function Hn(t,e,r,n,i,a,s,l,u){let h=[t,e,r,n,i,a,s,l,u].reduce(o6,{});return Lme(h)}function Dme(t){if(t&&t[_me])for(let e of Object.values(t))Dme(e);return t}function Lme(t,e){let r=new Proxy({},{deleteProperty:o(()=>!1,"deleteProperty"),set:o(()=>{throw new Error("Cannot set property on injected service container")},"set"),get:o((n,i)=>i===_me?!0:Ame(n,i,t,e||r),"get"),getOwnPropertyDescriptor:o((n,i)=>(Ame(n,i,t,e||r),Object.getOwnPropertyDescriptor(n,i)),"getOwnPropertyDescriptor"),has:o((n,i)=>i in t,"has"),ownKeys:o(()=>[...Object.getOwnPropertyNames(t)],"ownKeys")});return r}function Ame(t,e,r,n){if(e in t){if(t[e]instanceof Error)throw new Error("Construction failure. Please make sure that your dependencies are constructable.",{cause:t[e]});if(t[e]===Cme)throw new Error('Cycle detected. Please make "'+String(e)+'" lazy. Visit https://langium.org/docs/reference/configuration-services/#resolving-cyclic-dependencies');return t[e]}else if(e in r){let i=r[e];t[e]=Cme;try{t[e]=typeof i=="function"?i(n):Lme(i,n)}catch(a){throw t[e]=a instanceof Error?a:void 0,a}return t[e]}else return}function o6(t,e){if(e){for(let[r,n]of Object.entries(e))if(n!==void 0){let i=t[r];i!==null&&n!==null&&typeof i=="object"&&typeof n=="object"?t[r]=o6(i,n):t[r]=n}}return t}var BB,_me,Cme,FB=M(()=>{"use strict";(function(t){t.merge=(e,r)=>o6(o6({},e),r)})(BB||(BB={}));o(Hn,"inject");_me=Symbol("isProxy");o(Dme,"eagerLoad");o(Lme,"_inject");Cme=Symbol();o(Ame,"_resolve");o(o6,"_merge")});var Rme=M(()=>{"use strict"});var Nme=M(()=>{"use strict";LB();DB();_B()});var Mme=M(()=>{"use strict"});var Ime=M(()=>{"use strict";BO();Mme()});var $B,t0,l6,zB,Ome=M(()=>{"use strict";Ff();HS();i6();$B={indentTokenName:"INDENT",dedentTokenName:"DEDENT",whitespaceTokenName:"WS",ignoreIndentationDelimiters:[]};(function(t){t.REGULAR="indentation-sensitive",t.IGNORE_INDENTATION="ignore-indentation"})(t0||(t0={}));l6=class extends th{static{o(this,"IndentationAwareTokenBuilder")}constructor(e=$B){super(),this.indentationStack=[0],this.whitespaceRegExp=/[ \t]+/y,this.options=Object.assign(Object.assign({},$B),e),this.indentTokenType=Pf({name:this.options.indentTokenName,pattern:this.indentMatcher.bind(this),line_breaks:!1}),this.dedentTokenType=Pf({name:this.options.dedentTokenName,pattern:this.dedentMatcher.bind(this),line_breaks:!1})}buildTokens(e,r){let n=super.buildTokens(e,r);if(!n6(n))throw new Error("Invalid tokens built by default builder");let{indentTokenName:i,dedentTokenName:a,whitespaceTokenName:s,ignoreIndentationDelimiters:l}=this.options,u,h,f,d=[];for(let p of n){for(let[m,g]of l)p.name===m?p.PUSH_MODE=t0.IGNORE_INDENTATION:p.name===g&&(p.POP_MODE=!0);p.name===a?u=p:p.name===i?h=p:p.name===s?f=p:d.push(p)}if(!u||!h||!f)throw new Error("Some indentation/whitespace tokens not found!");return l.length>0?{modes:{[t0.REGULAR]:[u,h,...d,f],[t0.IGNORE_INDENTATION]:[...d,f]},defaultMode:t0.REGULAR}:[u,h,f,...d]}flushLexingReport(e){let r=super.flushLexingReport(e);return Object.assign(Object.assign({},r),{remainingDedents:this.flushRemainingDedents(e)})}isStartOfLine(e,r){return r===0||`\r +`.includes(e[r-1])}matchWhitespace(e,r,n,i){var a;this.whitespaceRegExp.lastIndex=r;let s=this.whitespaceRegExp.exec(e);return{currIndentLevel:(a=s?.[0].length)!==null&&a!==void 0?a:0,prevIndentLevel:this.indentationStack.at(-1),match:s}}createIndentationTokenInstance(e,r,n,i){let a=this.getLineNumber(r,i);return Qu(e,n,i,i+n.length,a,a,1,n.length)}getLineNumber(e,r){return e.substring(0,r).split(/\r\n|\r|\n/).length}indentMatcher(e,r,n,i){if(!this.isStartOfLine(e,r))return null;let{currIndentLevel:a,prevIndentLevel:s,match:l}=this.matchWhitespace(e,r,n,i);return a<=s?null:(this.indentationStack.push(a),l)}dedentMatcher(e,r,n,i){var a,s,l,u;if(!this.isStartOfLine(e,r))return null;let{currIndentLevel:h,prevIndentLevel:f,match:d}=this.matchWhitespace(e,r,n,i);if(h>=f)return null;let p=this.indentationStack.lastIndexOf(h);if(p===-1)return this.diagnostics.push({severity:"error",message:`Invalid dedent level ${h} at offset: ${r}. Current indentation stack: ${this.indentationStack}`,offset:r,length:(s=(a=d?.[0])===null||a===void 0?void 0:a.length)!==null&&s!==void 0?s:0,line:this.getLineNumber(e,r),column:1}),null;let m=this.indentationStack.length-p-1,g=(u=(l=e.substring(0,r).match(/[\r\n]+$/))===null||l===void 0?void 0:l[0].length)!==null&&u!==void 0?u:1;for(let y=0;y1;)r.push(this.createIndentationTokenInstance(this.dedentTokenType,e,"",e.length)),this.indentationStack.pop();return this.indentationStack=[0],r}},zB=class extends e0{static{o(this,"IndentationAwareLexer")}constructor(e){if(super(e),e.parser.TokenBuilder instanceof l6)this.indentationTokenBuilder=e.parser.TokenBuilder;else throw new Error("IndentationAwareLexer requires an accompanying IndentationAwareTokenBuilder")}tokenize(e,r=r6){let n=super.tokenize(e),i=n.report;r?.mode==="full"&&n.tokens.push(...i.remainingDedents),i.remainingDedents=[];let{indentTokenType:a,dedentTokenType:s}=this.indentationTokenBuilder,l=a.tokenTypeIdx,u=s.tokenTypeIdx,h=[],f=n.tokens.length-1;for(let d=0;d=0&&h.push(n.tokens[f]),n.tokens=h,n}}});var Pme=M(()=>{"use strict"});var Bme=M(()=>{"use strict";MB();UP();$S();Ome();qP();_b();i6();US();Pme();HS();WP()});var Fme=M(()=>{"use strict";aB();sB();oB();cB();lB();uB()});var $me=M(()=>{"use strict";OB();JS()});var c6,Sa,GB=M(()=>{"use strict";c6=class{static{o(this,"EmptyFileSystemProvider")}readFile(){throw new Error("No file system is available.")}async readDirectory(){return[]}},Sa={fileSystemProvider:o(()=>new c6,"fileSystemProvider")}});function wje(){let t=Hn(Ea(Sa),Tje),e=Hn(ka({shared:t}),bje);return t.ServiceRegistry.register(e),e}function Zc(t){var e;let r=wje(),n=r.serializer.JsonSerializer.deserialize(t);return r.shared.workspace.LangiumDocumentFactory.fromModel(n,ys.parse(`memory://${(e=n.name)!==null&&e!==void 0?e:"grammar"}.langium`)),n}var bje,Tje,zme=M(()=>{"use strict";PB();FB();Hc();GB();Qc();bje={Grammar:o(()=>{},"Grammar"),LanguageMetaData:o(()=>({caseInsensitive:!1,fileExtensions:[".langium"],languageId:"langium"}),"LanguageMetaData")},Tje={AstReflection:o(()=>new i1,"AstReflection")};o(wje,"createMinimalGrammarServices");o(Zc,"loadGrammarFromJson")});var Xr={};dr(Xr,{AstUtils:()=>VE,BiMap:()=>Qp,Cancellation:()=>br,ContextCache:()=>Zp,CstUtils:()=>NE,DONE_RESULT:()=>Ga,Deferred:()=>gs,Disposable:()=>Gf,DisposableCache:()=>W1,DocumentCache:()=>QS,EMPTY_STREAM:()=>Nx,ErrorWithLocation:()=>Rp,GrammarUtils:()=>YE,MultiMap:()=>Vl,OperationCancelled:()=>jc,Reduction:()=>vg,RegExpUtils:()=>qE,SimpleCache:()=>Bb,StreamImpl:()=>po,TreeStreamImpl:()=>Gc,URI:()=>ys,UriUtils:()=>vs,WorkspaceCache:()=>Y1,assertUnreachable:()=>Uc,delayNextTick:()=>tB,interruptAndCheck:()=>bi,isOperationCancelled:()=>Kc,loadGrammarFromJson:()=>Zc,setInterruptionPeriod:()=>ume,startCancelableOperation:()=>jS,stream:()=>an});var Gme=M(()=>{"use strict";ZS();t6();Lr(Xr,ei);H1();yB();ME();zme();tl();Ys();Qc();hs();el();Bl();zl();l1()});var Vme=M(()=>{"use strict";dB();Vb()});var Ume=M(()=>{"use strict";pB();mB();gB();vB();U1();GB();xB();IB();bB()});var Ca={};dr(Ca,{AbstractAstReflection:()=>Ap,AbstractCstNode:()=>Eb,AbstractLangiumParser:()=>Sb,AbstractParserErrorMessageProvider:()=>GS,AbstractThreadedAsyncParser:()=>RB,AstUtils:()=>VE,BiMap:()=>Qp,Cancellation:()=>br,CompositeCstNodeImpl:()=>Xp,ContextCache:()=>Zp,CstNodeBuilder:()=>kb,CstUtils:()=>NE,DEFAULT_TOKENIZE_OPTIONS:()=>r6,DONE_RESULT:()=>Ga,DatatypeSymbol:()=>zS,DefaultAstNodeDescriptionProvider:()=>Hb,DefaultAstNodeLocator:()=>Wb,DefaultAsyncParser:()=>r4,DefaultCommentProvider:()=>t4,DefaultConfigurationProvider:()=>Yb,DefaultDocumentBuilder:()=>Xb,DefaultDocumentValidator:()=>Ub,DefaultHydrator:()=>i4,DefaultIndexManager:()=>jb,DefaultJsonSerializer:()=>$b,DefaultLangiumDocumentFactory:()=>Lb,DefaultLangiumDocuments:()=>Rb,DefaultLexer:()=>e0,DefaultLexerErrorMessageProvider:()=>Qb,DefaultLinker:()=>Nb,DefaultNameProvider:()=>Mb,DefaultReferenceDescriptionProvider:()=>qb,DefaultReferences:()=>Ib,DefaultScopeComputation:()=>Ob,DefaultScopeProvider:()=>Fb,DefaultServiceRegistry:()=>zb,DefaultTokenBuilder:()=>th,DefaultValueConverter:()=>Kp,DefaultWorkspaceLock:()=>n4,DefaultWorkspaceManager:()=>Kb,Deferred:()=>gs,Disposable:()=>Gf,DisposableCache:()=>W1,DocumentCache:()=>QS,DocumentState:()=>Ln,DocumentValidator:()=>rl,EMPTY_SCOPE:()=>oje,EMPTY_STREAM:()=>Nx,EmptyFileSystem:()=>Sa,EmptyFileSystemProvider:()=>c6,ErrorWithLocation:()=>Rp,GrammarAST:()=>Gx,GrammarUtils:()=>YE,IndentationAwareLexer:()=>zB,IndentationAwareTokenBuilder:()=>l6,JSDocDocumentationProvider:()=>e4,LangiumCompletionParser:()=>Ab,LangiumParser:()=>Cb,LangiumParserErrorMessageProvider:()=>F1,LeafCstNodeImpl:()=>Yp,LexingMode:()=>t0,MapScope:()=>Pb,Module:()=>BB,MultiMap:()=>Vl,OperationCancelled:()=>jc,ParserWorker:()=>NB,Reduction:()=>vg,RegExpUtils:()=>qE,RootCstNodeImpl:()=>B1,SimpleCache:()=>Bb,StreamImpl:()=>po,StreamScope:()=>q1,TextDocument:()=>G1,TreeStreamImpl:()=>Gc,URI:()=>ys,UriUtils:()=>vs,ValidationCategory:()=>X1,ValidationRegistry:()=>Gb,ValueConverter:()=>Xc,WorkspaceCache:()=>Y1,assertUnreachable:()=>Uc,createCompletionParser:()=>VP,createDefaultCoreModule:()=>ka,createDefaultSharedCoreModule:()=>Ea,createGrammarConfig:()=>PO,createLangiumParser:()=>HP,createParser:()=>Db,delayNextTick:()=>tB,diagnosticData:()=>Jp,eagerLoad:()=>Dme,getDiagnosticRange:()=>vme,indentationBuilderDefaultOptions:()=>$B,inject:()=>Hn,interruptAndCheck:()=>bi,isAstNode:()=>li,isAstNodeDescription:()=>qI,isAstNodeWithComment:()=>hB,isCompositeCstNode:()=>Ol,isIMultiModeLexerDefinition:()=>wB,isJSDoc:()=>CB,isLeafCstNode:()=>If,isLinkingError:()=>_p,isNamed:()=>gme,isOperationCancelled:()=>Kc,isReference:()=>wa,isRootCstNode:()=>Rx,isTokenTypeArray:()=>n6,isTokenTypeDictionary:()=>TB,loadGrammarFromJson:()=>Zc,parseJSDoc:()=>SB,prepareLangiumParser:()=>nme,setInterruptionPeriod:()=>ume,startCancelableOperation:()=>jS,stream:()=>an,toDiagnosticData:()=>xme,toDiagnosticSeverity:()=>e6});var vo=M(()=>{"use strict";PB();FB();fB();Rme();Pl();Nme();Ime();Bme();Fme();$me();Gme();Lr(Ca,Xr);Vme();Ume();Hc()});function Qme(t){return Ul.isInstance(t,a4)}function Zme(t){return Ul.isInstance(t,j1)}function Jme(t){return Ul.isInstance(t,K1)}function ege(t){return Ul.isInstance(t,Q1)}function tge(t){return Ul.isInstance(t,s4)}function rge(t){return Ul.isInstance(t,Z1)}function nge(t){return Ul.isInstance(t,o4)}function ige(t){return Ul.isInstance(t,l4)}function age(t){return Ul.isInstance(t,c4)}function sge(t){return Ul.isInstance(t,u4)}function oge(t){return Ul.isInstance(t,h4)}var kje,Tt,QB,a4,u6,j1,h6,f6,VB,K1,UB,HB,qB,Q1,WB,s4,d6,YB,Z1,XB,o4,l4,c4,u4,y6,jB,h4,KB,p6,m6,g6,lge,Ul,Hme,Eje,qme,Sje,Wme,Cje,Yme,Aje,Xme,_je,jme,Dje,Kme,Lje,Rje,Nje,Mje,Ije,Oje,Pje,Bje,xs,ZB,JB,eF,tF,rF,nF,iF,Fje,$je,zje,Gje,Vf,rh,qa,Vje,Wa=M(()=>{"use strict";vo();vo();vo();vo();kje=Object.defineProperty,Tt=o((t,e)=>kje(t,"name",{value:e,configurable:!0}),"__name"),QB="Statement",a4="Architecture";o(Qme,"isArchitecture");Tt(Qme,"isArchitecture");u6="Axis",j1="Branch";o(Zme,"isBranch");Tt(Zme,"isBranch");h6="Checkout",f6="CherryPicking",VB="ClassDefStatement",K1="Commit";o(Jme,"isCommit");Tt(Jme,"isCommit");UB="Curve",HB="Edge",qB="Entry",Q1="GitGraph";o(ege,"isGitGraph");Tt(ege,"isGitGraph");WB="Group",s4="Info";o(tge,"isInfo");Tt(tge,"isInfo");d6="Item",YB="Junction",Z1="Merge";o(rge,"isMerge");Tt(rge,"isMerge");XB="Option",o4="Packet";o(nge,"isPacket");Tt(nge,"isPacket");l4="PacketBlock";o(ige,"isPacketBlock");Tt(ige,"isPacketBlock");c4="Pie";o(age,"isPie");Tt(age,"isPie");u4="PieSection";o(sge,"isPieSection");Tt(sge,"isPieSection");y6="Radar",jB="Service",h4="Treemap";o(oge,"isTreemap");Tt(oge,"isTreemap");KB="TreemapRow",p6="Direction",m6="Leaf",g6="Section",lge=class extends Ap{static{o(this,"MermaidAstReflection")}static{Tt(this,"MermaidAstReflection")}getAllTypes(){return[a4,u6,j1,h6,f6,VB,K1,UB,p6,HB,qB,Q1,WB,s4,d6,YB,m6,Z1,XB,o4,l4,c4,u4,y6,g6,jB,QB,h4,KB]}computeIsSubtype(t,e){switch(t){case j1:case h6:case f6:case K1:case Z1:return this.isSubtype(QB,e);case p6:return this.isSubtype(Q1,e);case m6:case g6:return this.isSubtype(d6,e);default:return!1}}getReferenceType(t){let e=`${t.container.$type}:${t.property}`;switch(e){case"Entry:axis":return u6;default:throw new Error(`${e} is not a valid reference id.`)}}getTypeMetaData(t){switch(t){case a4:return{name:a4,properties:[{name:"accDescr"},{name:"accTitle"},{name:"edges",defaultValue:[]},{name:"groups",defaultValue:[]},{name:"junctions",defaultValue:[]},{name:"services",defaultValue:[]},{name:"title"}]};case u6:return{name:u6,properties:[{name:"label"},{name:"name"}]};case j1:return{name:j1,properties:[{name:"name"},{name:"order"}]};case h6:return{name:h6,properties:[{name:"branch"}]};case f6:return{name:f6,properties:[{name:"id"},{name:"parent"},{name:"tags",defaultValue:[]}]};case VB:return{name:VB,properties:[{name:"className"},{name:"styleText"}]};case K1:return{name:K1,properties:[{name:"id"},{name:"message"},{name:"tags",defaultValue:[]},{name:"type"}]};case UB:return{name:UB,properties:[{name:"entries",defaultValue:[]},{name:"label"},{name:"name"}]};case HB:return{name:HB,properties:[{name:"lhsDir"},{name:"lhsGroup",defaultValue:!1},{name:"lhsId"},{name:"lhsInto",defaultValue:!1},{name:"rhsDir"},{name:"rhsGroup",defaultValue:!1},{name:"rhsId"},{name:"rhsInto",defaultValue:!1},{name:"title"}]};case qB:return{name:qB,properties:[{name:"axis"},{name:"value"}]};case Q1:return{name:Q1,properties:[{name:"accDescr"},{name:"accTitle"},{name:"statements",defaultValue:[]},{name:"title"}]};case WB:return{name:WB,properties:[{name:"icon"},{name:"id"},{name:"in"},{name:"title"}]};case s4:return{name:s4,properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"}]};case d6:return{name:d6,properties:[{name:"classSelector"},{name:"name"}]};case YB:return{name:YB,properties:[{name:"id"},{name:"in"}]};case Z1:return{name:Z1,properties:[{name:"branch"},{name:"id"},{name:"tags",defaultValue:[]},{name:"type"}]};case XB:return{name:XB,properties:[{name:"name"},{name:"value",defaultValue:!1}]};case o4:return{name:o4,properties:[{name:"accDescr"},{name:"accTitle"},{name:"blocks",defaultValue:[]},{name:"title"}]};case l4:return{name:l4,properties:[{name:"bits"},{name:"end"},{name:"label"},{name:"start"}]};case c4:return{name:c4,properties:[{name:"accDescr"},{name:"accTitle"},{name:"sections",defaultValue:[]},{name:"showData",defaultValue:!1},{name:"title"}]};case u4:return{name:u4,properties:[{name:"label"},{name:"value"}]};case y6:return{name:y6,properties:[{name:"accDescr"},{name:"accTitle"},{name:"axes",defaultValue:[]},{name:"curves",defaultValue:[]},{name:"options",defaultValue:[]},{name:"title"}]};case jB:return{name:jB,properties:[{name:"icon"},{name:"iconText"},{name:"id"},{name:"in"},{name:"title"}]};case h4:return{name:h4,properties:[{name:"accDescr"},{name:"accTitle"},{name:"title"},{name:"TreemapRows",defaultValue:[]}]};case KB:return{name:KB,properties:[{name:"indent"},{name:"item"}]};case p6:return{name:p6,properties:[{name:"accDescr"},{name:"accTitle"},{name:"dir"},{name:"statements",defaultValue:[]},{name:"title"}]};case m6:return{name:m6,properties:[{name:"classSelector"},{name:"name"},{name:"value"}]};case g6:return{name:g6,properties:[{name:"classSelector"},{name:"name"}]};default:return{name:t,properties:[]}}}},Ul=new lge,Eje=Tt(()=>Hme??(Hme=Zc(`{"$type":"Grammar","isDeclared":true,"name":"Info","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Info","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"info"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"},{"$type":"Group","elements":[{"$type":"Keyword","value":"showInfo"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"*"}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@7"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@8"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[],"types":[],"usedGrammars":[]}`)),"InfoGrammar"),Sje=Tt(()=>qme??(qme=Zc(`{"$type":"Grammar","isDeclared":true,"name":"Packet","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Packet","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"packet"},{"$type":"Keyword","value":"packet-beta"}]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]},{"$type":"Assignment","feature":"blocks","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PacketBlock","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"start","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"end","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}],"cardinality":"?"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"+"},{"$type":"Assignment","feature":"bits","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]}]},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@8"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@9"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[],"types":[],"usedGrammars":[]}`)),"PacketGrammar"),Cje=Tt(()=>Wme??(Wme=Zc(`{"$type":"Grammar","isDeclared":true,"name":"Pie","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Pie","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"pie"},{"$type":"Assignment","feature":"showData","operator":"?=","terminal":{"$type":"Keyword","value":"showData"},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"Assignment","feature":"sections","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PieSection","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}},{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"FLOAT_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/-?[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/-?(0|[1-9][0-9]*)(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER_PIE","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@2"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@3"}}]},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@11"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@12"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[],"types":[],"usedGrammars":[]}`)),"PieGrammar"),Aje=Tt(()=>Yme??(Yme=Zc(`{"$type":"Grammar","isDeclared":true,"name":"Architecture","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Architecture","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[],"cardinality":"*"},{"$type":"Keyword","value":"architecture-beta"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"groups","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Assignment","feature":"services","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"junctions","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Assignment","feature":"edges","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"LeftPort","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":":"},{"$type":"Assignment","feature":"lhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"RightPort","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"rhsDir","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Keyword","value":":"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Arrow","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Assignment","feature":"lhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"--"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]}},{"$type":"Keyword","value":"-"}]}]},{"$type":"Assignment","feature":"rhsInto","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Group","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Service","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"service"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"iconText","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}},{"$type":"Assignment","feature":"icon","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]}}],"cardinality":"?"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},"cardinality":"?"},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Junction","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"junction"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"in"},{"$type":"Assignment","feature":"in","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Edge","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"lhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"lhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Assignment","feature":"rhsId","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Assignment","feature":"rhsGroup","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"ARROW_DIRECTION","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"L"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"R"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"T"}}]},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"B"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_GROUP","definition":{"$type":"RegexToken","regex":"/\\\\{group\\\\}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARROW_INTO","definition":{"$type":"RegexToken","regex":"/<|>/"},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@18"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@19"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"TerminalRule","name":"ARCH_ICON","definition":{"$type":"RegexToken","regex":"/\\\\([\\\\w-:]+\\\\)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ARCH_TITLE","definition":{"$type":"RegexToken","regex":"/\\\\[[\\\\w ]+\\\\]/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[],"types":[],"usedGrammars":[]}`)),"ArchitectureGrammar"),_je=Tt(()=>Xme??(Xme=Zc(`{"$type":"Grammar","isDeclared":true,"name":"GitGraph","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"GitGraph","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"Keyword","value":":"}]},{"$type":"Keyword","value":"gitGraph:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"gitGraph"},{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},{"$type":"Keyword","value":":"}]}]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]},{"$type":"Assignment","feature":"statements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Statement","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Direction","definition":{"$type":"Assignment","feature":"dir","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"LR"},{"$type":"Keyword","value":"TB"},{"$type":"Keyword","value":"BT"}]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Commit","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"commit"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"msg:","cardinality":"?"},{"$type":"Assignment","feature":"message","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Branch","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"branch"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"order:"},{"$type":"Assignment","feature":"order","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}}],"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Merge","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"merge"},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"type:"},{"$type":"Assignment","feature":"type","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"NORMAL"},{"$type":"Keyword","value":"REVERSE"},{"$type":"Keyword","value":"HIGHLIGHT"}]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Checkout","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"checkout"},{"$type":"Keyword","value":"switch"}]},{"$type":"Assignment","feature":"branch","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CherryPicking","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"cherry-pick"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"id:"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"tag:"},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"parent:"},{"$type":"Assignment","feature":"parent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@14"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@15"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"TerminalRule","name":"REFERENCE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\\\w([-\\\\./\\\\w]*[-\\\\w])?/"},"fragment":false,"hidden":false}],"definesHiddenTokens":false,"hiddenTokens":[],"interfaces":[],"types":[],"usedGrammars":[]}`)),"GitGraphGrammar"),Dje=Tt(()=>jme??(jme=Zc(`{"$type":"Grammar","isDeclared":true,"name":"Radar","imports":[],"rules":[{"$type":"ParserRule","entry":true,"name":"Radar","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":"radar-beta:"},{"$type":"Group","elements":[{"$type":"Keyword","value":"radar-beta"},{"$type":"Keyword","value":":"}]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Keyword","value":"axis"},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"axes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"curve"},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"curves","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"options","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}}],"cardinality":"*"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Label","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"label","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]}},{"$type":"Keyword","value":"]"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Axis","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Curve","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[],"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"Entries","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"}]},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"},{"$type":"Assignment","feature":"entries","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}}],"cardinality":"*"},{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"*"}]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DetailedEntry","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"axis","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@2"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"NumberEntry","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Option","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"showLegend"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"ticks"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"max"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"min"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"graticule"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}}]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"GRATICULE","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"circle"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"polygon"}}]},"fragment":false,"hidden":false},{"$type":"ParserRule","fragment":true,"name":"EOL","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[],"cardinality":"+"},{"$type":"EndOfFile"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"FLOAT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/[0-9]+\\\\.[0-9]+(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"INT","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/0|[1-9][0-9]*(?!\\\\.)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@15"}},{"$type":"TerminalRuleCall","rule":{"$ref":"#/rules@16"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STRING","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'([^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID","type":{"$type":"ReturnType","name":"string"},"definition":{"$type":"RegexToken","regex":"/[\\\\w]([-\\\\w]*\\\\w)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NEWLINE","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WHITESPACE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"YAML","definition":{"$type":"RegexToken","regex":"/---[\\\\t ]*\\\\r?\\\\n(?:[\\\\S\\\\s]*?\\\\r?\\\\n)?---(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"DIRECTIVE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%{[\\\\S\\\\s]*?}%%(?:\\\\r?\\\\n|(?!\\\\S))/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"SINGLE_LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*%%[^\\\\n\\\\r]*/"},"fragment":false}],"interfaces":[{"$type":"Interface","name":"Entry","attributes":[{"$type":"TypeAttribute","name":"axis","isOptional":true,"type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@2"}}}},{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}],"superTypes":[]}],"definesHiddenTokens":false,"hiddenTokens":[],"types":[],"usedGrammars":[]}`)),"RadarGrammar"),Lje=Tt(()=>Kme??(Kme=Zc(`{"$type":"Grammar","isDeclared":true,"name":"Treemap","rules":[{"$type":"ParserRule","fragment":true,"name":"TitleAndAccessibilities","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"accDescr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]}},{"$type":"Assignment","feature":"accTitle","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}}],"cardinality":"+"},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"true"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"false"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_DESCR","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accDescr(?:[\\\\t ]*:([^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)|\\\\s*{([^}]*)})/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ACC_TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*accTitle[\\\\t ]*:(?:[^\\\\n\\\\r]*?(?=%%)|[^\\\\n\\\\r]*)/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"TITLE","definition":{"$type":"RegexToken","regex":"/[\\\\t ]*title(?:[\\\\t ][^\\\\n\\\\r]*?(?=%%)|[\\\\t ][^\\\\n\\\\r]*|)/"},"fragment":false,"hidden":false},{"$type":"ParserRule","entry":true,"name":"Treemap","returnType":{"$ref":"#/interfaces@4"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@0"},"arguments":[]},{"$type":"Assignment","feature":"TreemapRows","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}}],"cardinality":"*"}]},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"TREEMAP_KEYWORD","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"treemap-beta"}},{"$type":"CharacterRange","left":{"$type":"Keyword","value":"treemap"}}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"CLASS_DEF","definition":{"$type":"RegexToken","regex":"/classDef\\\\s+([a-zA-Z_][a-zA-Z0-9_]+)(?:\\\\s+([^;\\\\r\\\\n]*))?(?:;)?/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"STYLE_SEPARATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":":::"}},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"SEPARATOR","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":":"}},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"COMMA","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":","}},"fragment":false,"hidden":false},{"$type":"TerminalRule","hidden":true,"name":"WS","definition":{"$type":"RegexToken","regex":"/[ \\\\t]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"ML_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\%\\\\%[^\\\\n]*/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"NL","definition":{"$type":"RegexToken","regex":"/\\\\r?\\\\n/"},"fragment":false},{"$type":"ParserRule","name":"TreemapRow","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"indent","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"item","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]}]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ClassDef","dataType":"string","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Item","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Section","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},{"$type":"Assignment","feature":"classSelector","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Leaf","returnType":{"$ref":"#/interfaces@2"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[],"cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]},{"$type":"Assignment","feature":"classSelector","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]}}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"INDENTATION","definition":{"$type":"RegexToken","regex":"/[ \\\\t]{1,}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"ID2","definition":{"$type":"RegexToken","regex":"/[a-zA-Z_][a-zA-Z0-9_]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NUMBER2","definition":{"$type":"RegexToken","regex":"/[0-9_\\\\.\\\\,]+/"},"fragment":false,"hidden":false},{"$type":"ParserRule","name":"MyNumber","dataType":"number","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","name":"STRING2","definition":{"$type":"RegexToken","regex":"/\\"[^\\"]*\\"|'[^']*'/"},"fragment":false,"hidden":false}],"interfaces":[{"$type":"Interface","name":"Item","attributes":[{"$type":"TypeAttribute","name":"name","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false},{"$type":"TypeAttribute","name":"classSelector","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]},{"$type":"Interface","name":"Section","superTypes":[{"$ref":"#/interfaces@0"}],"attributes":[]},{"$type":"Interface","name":"Leaf","superTypes":[{"$ref":"#/interfaces@0"}],"attributes":[{"$type":"TypeAttribute","name":"value","type":{"$type":"SimpleType","primitiveType":"number"},"isOptional":false}]},{"$type":"Interface","name":"ClassDefStatement","attributes":[{"$type":"TypeAttribute","name":"className","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false},{"$type":"TypeAttribute","name":"styleText","type":{"$type":"SimpleType","primitiveType":"string"},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"Treemap","attributes":[{"$type":"TypeAttribute","name":"TreemapRows","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@14"}}},"isOptional":false},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accTitle","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"accDescr","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}],"superTypes":[]}],"definesHiddenTokens":false,"hiddenTokens":[],"imports":[],"types":[],"usedGrammars":[],"$comment":"/**\\n * Treemap grammar for Langium\\n * Converted from mindmap grammar\\n *\\n * The ML_COMMENT and NL hidden terminals handle whitespace, comments, and newlines\\n * before the treemap keyword, allowing for empty lines and comments before the\\n * treemap declaration.\\n */"}`)),"TreemapGrammar"),Rje={languageId:"info",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Nje={languageId:"packet",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Mje={languageId:"pie",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Ije={languageId:"architecture",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Oje={languageId:"gitGraph",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Pje={languageId:"radar",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},Bje={languageId:"treemap",fileExtensions:[".mmd",".mermaid"],caseInsensitive:!1,mode:"production"},xs={AstReflection:Tt(()=>new lge,"AstReflection")},ZB={Grammar:Tt(()=>Eje(),"Grammar"),LanguageMetaData:Tt(()=>Rje,"LanguageMetaData"),parser:{}},JB={Grammar:Tt(()=>Sje(),"Grammar"),LanguageMetaData:Tt(()=>Nje,"LanguageMetaData"),parser:{}},eF={Grammar:Tt(()=>Cje(),"Grammar"),LanguageMetaData:Tt(()=>Mje,"LanguageMetaData"),parser:{}},tF={Grammar:Tt(()=>Aje(),"Grammar"),LanguageMetaData:Tt(()=>Ije,"LanguageMetaData"),parser:{}},rF={Grammar:Tt(()=>_je(),"Grammar"),LanguageMetaData:Tt(()=>Oje,"LanguageMetaData"),parser:{}},nF={Grammar:Tt(()=>Dje(),"Grammar"),LanguageMetaData:Tt(()=>Pje,"LanguageMetaData"),parser:{}},iF={Grammar:Tt(()=>Lje(),"Grammar"),LanguageMetaData:Tt(()=>Bje,"LanguageMetaData"),parser:{}},Fje=/accDescr(?:[\t ]*:([^\n\r]*)|\s*{([^}]*)})/,$je=/accTitle[\t ]*:([^\n\r]*)/,zje=/title([\t ][^\n\r]*|)/,Gje={ACC_DESCR:Fje,ACC_TITLE:$je,TITLE:zje},Vf=class extends Kp{static{o(this,"AbstractMermaidValueConverter")}static{Tt(this,"AbstractMermaidValueConverter")}runConverter(t,e,r){let n=this.runCommonConverter(t,e,r);return n===void 0&&(n=this.runCustomConverter(t,e,r)),n===void 0?super.runConverter(t,e,r):n}runCommonConverter(t,e,r){let n=Gje[t.name];if(n===void 0)return;let i=n.exec(e);if(i!==null){if(i[1]!==void 0)return i[1].trim().replace(/[\t ]{2,}/gm," ");if(i[2]!==void 0)return i[2].replace(/^\s*/gm,"").replace(/\s+$/gm,"").replace(/[\t ]{2,}/gm," ").replace(/[\n\r]{2,}/gm,` +`)}}},rh=class extends Vf{static{o(this,"CommonValueConverter")}static{Tt(this,"CommonValueConverter")}runCustomConverter(t,e,r){}},qa=class extends th{static{o(this,"AbstractMermaidTokenBuilder")}static{Tt(this,"AbstractMermaidTokenBuilder")}constructor(t){super(),this.keywords=new Set(t)}buildKeywordTokens(t,e,r){let n=super.buildKeywordTokens(t,e,r);return n.forEach(i=>{this.keywords.has(i.name)&&i.PATTERN!==void 0&&(i.PATTERN=new RegExp(i.PATTERN.toString()+"(?:(?=%%)|(?!\\S))"))}),n}},Vje=class extends qa{static{o(this,"CommonTokenBuilder")}static{Tt(this,"CommonTokenBuilder")}}});function x6(t=Sa){let e=Hn(Ea(t),xs),r=Hn(ka({shared:e}),rF,v6);return e.ServiceRegistry.register(r),{shared:e,GitGraph:r}}var Uje,v6,aF=M(()=>{"use strict";Wa();vo();Uje=class extends qa{static{o(this,"GitGraphTokenBuilder")}static{Tt(this,"GitGraphTokenBuilder")}constructor(){super(["gitGraph"])}},v6={parser:{TokenBuilder:Tt(()=>new Uje,"TokenBuilder"),ValueConverter:Tt(()=>new rh,"ValueConverter")}};o(x6,"createGitGraphServices");Tt(x6,"createGitGraphServices")});function T6(t=Sa){let e=Hn(Ea(t),xs),r=Hn(ka({shared:e}),ZB,b6);return e.ServiceRegistry.register(r),{shared:e,Info:r}}var Hje,b6,sF=M(()=>{"use strict";Wa();vo();Hje=class extends qa{static{o(this,"InfoTokenBuilder")}static{Tt(this,"InfoTokenBuilder")}constructor(){super(["info","showInfo"])}},b6={parser:{TokenBuilder:Tt(()=>new Hje,"TokenBuilder"),ValueConverter:Tt(()=>new rh,"ValueConverter")}};o(T6,"createInfoServices");Tt(T6,"createInfoServices")});function k6(t=Sa){let e=Hn(Ea(t),xs),r=Hn(ka({shared:e}),JB,w6);return e.ServiceRegistry.register(r),{shared:e,Packet:r}}var qje,w6,oF=M(()=>{"use strict";Wa();vo();qje=class extends qa{static{o(this,"PacketTokenBuilder")}static{Tt(this,"PacketTokenBuilder")}constructor(){super(["packet"])}},w6={parser:{TokenBuilder:Tt(()=>new qje,"TokenBuilder"),ValueConverter:Tt(()=>new rh,"ValueConverter")}};o(k6,"createPacketServices");Tt(k6,"createPacketServices")});function S6(t=Sa){let e=Hn(Ea(t),xs),r=Hn(ka({shared:e}),eF,E6);return e.ServiceRegistry.register(r),{shared:e,Pie:r}}var Wje,Yje,E6,lF=M(()=>{"use strict";Wa();vo();Wje=class extends qa{static{o(this,"PieTokenBuilder")}static{Tt(this,"PieTokenBuilder")}constructor(){super(["pie","showData"])}},Yje=class extends Vf{static{o(this,"PieValueConverter")}static{Tt(this,"PieValueConverter")}runCustomConverter(t,e,r){if(t.name==="PIE_SECTION_LABEL")return e.replace(/"/g,"").trim()}},E6={parser:{TokenBuilder:Tt(()=>new Wje,"TokenBuilder"),ValueConverter:Tt(()=>new Yje,"ValueConverter")}};o(S6,"createPieServices");Tt(S6,"createPieServices")});function A6(t=Sa){let e=Hn(Ea(t),xs),r=Hn(ka({shared:e}),tF,C6);return e.ServiceRegistry.register(r),{shared:e,Architecture:r}}var Xje,jje,C6,cF=M(()=>{"use strict";Wa();vo();Xje=class extends qa{static{o(this,"ArchitectureTokenBuilder")}static{Tt(this,"ArchitectureTokenBuilder")}constructor(){super(["architecture"])}},jje=class extends Vf{static{o(this,"ArchitectureValueConverter")}static{Tt(this,"ArchitectureValueConverter")}runCustomConverter(t,e,r){if(t.name==="ARCH_ICON")return e.replace(/[()]/g,"").trim();if(t.name==="ARCH_TEXT_ICON")return e.replace(/["()]/g,"");if(t.name==="ARCH_TITLE")return e.replace(/[[\]]/g,"").trim()}},C6={parser:{TokenBuilder:Tt(()=>new Xje,"TokenBuilder"),ValueConverter:Tt(()=>new jje,"ValueConverter")}};o(A6,"createArchitectureServices");Tt(A6,"createArchitectureServices")});function D6(t=Sa){let e=Hn(Ea(t),xs),r=Hn(ka({shared:e}),nF,_6);return e.ServiceRegistry.register(r),{shared:e,Radar:r}}var Kje,_6,uF=M(()=>{"use strict";Wa();vo();Kje=class extends qa{static{o(this,"RadarTokenBuilder")}static{Tt(this,"RadarTokenBuilder")}constructor(){super(["radar-beta"])}},_6={parser:{TokenBuilder:Tt(()=>new Kje,"TokenBuilder"),ValueConverter:Tt(()=>new rh,"ValueConverter")}};o(D6,"createRadarServices");Tt(D6,"createRadarServices")});function cge(t){let e=t.validation.TreemapValidator,r=t.validation.ValidationRegistry;if(r){let n={Treemap:e.checkSingleRoot.bind(e)};r.register(n,e)}}function R6(t=Sa){let e=Hn(Ea(t),xs),r=Hn(ka({shared:e}),iF,L6);return e.ServiceRegistry.register(r),cge(r),{shared:e,Treemap:r}}var Qje,Zje,Jje,eKe,L6,hF=M(()=>{"use strict";Wa();vo();Qje=class extends qa{static{o(this,"TreemapTokenBuilder")}static{Tt(this,"TreemapTokenBuilder")}constructor(){super(["treemap"])}},Zje=/classDef\s+([A-Z_a-z]\w+)(?:\s+([^\n\r;]*))?;?/,Jje=class extends Vf{static{o(this,"TreemapValueConverter")}static{Tt(this,"TreemapValueConverter")}runCustomConverter(t,e,r){if(t.name==="NUMBER2")return parseFloat(e.replace(/,/g,""));if(t.name==="SEPARATOR")return e.substring(1,e.length-1);if(t.name==="STRING2")return e.substring(1,e.length-1);if(t.name==="INDENTATION")return e.length;if(t.name==="ClassDef"){if(typeof e!="string")return e;let n=Zje.exec(e);if(n)return{$type:"ClassDefStatement",className:n[1],styleText:n[2]||void 0}}}};o(cge,"registerValidationChecks");Tt(cge,"registerValidationChecks");eKe=class{static{o(this,"TreemapValidator")}static{Tt(this,"TreemapValidator")}checkSingleRoot(t,e){let r;for(let n of t.TreemapRows)n.item&&(r===void 0&&n.indent===void 0?r=0:n.indent===void 0?e("error","Multiple root nodes are not allowed in a treemap.",{node:n,property:"item"}):r!==void 0&&r>=parseInt(n.indent,10)&&e("error","Multiple root nodes are not allowed in a treemap.",{node:n,property:"item"}))}},L6={parser:{TokenBuilder:Tt(()=>new Qje,"TokenBuilder"),ValueConverter:Tt(()=>new Jje,"ValueConverter")},validation:{TreemapValidator:Tt(()=>new eKe,"TreemapValidator")}};o(R6,"createTreemapServices");Tt(R6,"createTreemapServices")});var uge={};dr(uge,{InfoModule:()=>b6,createInfoServices:()=>T6});var hge=M(()=>{"use strict";sF();Wa()});var fge={};dr(fge,{PacketModule:()=>w6,createPacketServices:()=>k6});var dge=M(()=>{"use strict";oF();Wa()});var pge={};dr(pge,{PieModule:()=>E6,createPieServices:()=>S6});var mge=M(()=>{"use strict";lF();Wa()});var gge={};dr(gge,{ArchitectureModule:()=>C6,createArchitectureServices:()=>A6});var yge=M(()=>{"use strict";cF();Wa()});var vge={};dr(vge,{GitGraphModule:()=>v6,createGitGraphServices:()=>x6});var xge=M(()=>{"use strict";aF();Wa()});var bge={};dr(bge,{RadarModule:()=>_6,createRadarServices:()=>D6});var Tge=M(()=>{"use strict";uF();Wa()});var wge={};dr(wge,{TreemapModule:()=>L6,createTreemapServices:()=>R6});var kge=M(()=>{"use strict";hF();Wa()});async function bs(t,e){let r=tKe[t];if(!r)throw new Error(`Unknown diagram type: ${t}`);nh[t]||await r();let i=nh[t].parse(e);if(i.lexerErrors.length>0||i.parserErrors.length>0)throw new rKe(i);return i.value}var nh,tKe,rKe,Uf=M(()=>{"use strict";aF();sF();oF();lF();cF();uF();hF();Wa();nh={},tKe={info:Tt(async()=>{let{createInfoServices:t}=await Promise.resolve().then(()=>(hge(),uge)),e=t().Info.parser.LangiumParser;nh.info=e},"info"),packet:Tt(async()=>{let{createPacketServices:t}=await Promise.resolve().then(()=>(dge(),fge)),e=t().Packet.parser.LangiumParser;nh.packet=e},"packet"),pie:Tt(async()=>{let{createPieServices:t}=await Promise.resolve().then(()=>(mge(),pge)),e=t().Pie.parser.LangiumParser;nh.pie=e},"pie"),architecture:Tt(async()=>{let{createArchitectureServices:t}=await Promise.resolve().then(()=>(yge(),gge)),e=t().Architecture.parser.LangiumParser;nh.architecture=e},"architecture"),gitGraph:Tt(async()=>{let{createGitGraphServices:t}=await Promise.resolve().then(()=>(xge(),vge)),e=t().GitGraph.parser.LangiumParser;nh.gitGraph=e},"gitGraph"),radar:Tt(async()=>{let{createRadarServices:t}=await Promise.resolve().then(()=>(Tge(),bge)),e=t().Radar.parser.LangiumParser;nh.radar=e},"radar"),treemap:Tt(async()=>{let{createTreemapServices:t}=await Promise.resolve().then(()=>(kge(),wge)),e=t().Treemap.parser.LangiumParser;nh.treemap=e},"treemap")};o(bs,"parse");Tt(bs,"parse");rKe=class extends Error{static{o(this,"MermaidParseError")}constructor(t){let e=t.lexerErrors.map(n=>n.message).join(` +`),r=t.parserErrors.map(n=>n.message).join(` +`);super(`Parsing failed: ${e} ${r}`),this.result=t}static{Tt(this,"MermaidParseError")}}});function nl(t,e){t.accDescr&&e.setAccDescription?.(t.accDescr),t.accTitle&&e.setAccTitle?.(t.accTitle),t.title&&e.setDiagramTitle?.(t.title)}var r0=M(()=>{"use strict";o(nl,"populateCommonDb")});var rn,N6=M(()=>{"use strict";rn={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4}});var J1,fF=M(()=>{"use strict";J1=class{constructor(e){this.init=e;this.records=this.init()}static{o(this,"ImperativeState")}reset(){this.records=this.init()}}});function dF(){return VL({length:7})}function iKe(t,e){let r=Object.create(null);return t.reduce((n,i)=>{let a=e(i);return r[a]||(r[a]=!0,n.push(i)),n},[])}function Ege(t,e,r){let n=t.indexOf(e);n===-1?t.push(r):t.splice(n,1,r)}function Cge(t){let e=t.reduce((i,a)=>i.seq>a.seq?i:a,t[0]),r="";t.forEach(function(i){i===e?r+=" *":r+=" |"});let n=[r,e.id,e.seq];for(let i in Dt.records.branches)Dt.records.branches.get(i)===e.id&&n.push(i);if(X.debug(n.join(" ")),e.parents&&e.parents.length==2&&e.parents[0]&&e.parents[1]){let i=Dt.records.commits.get(e.parents[0]);Ege(t,e,i),e.parents[1]&&t.push(Dt.records.commits.get(e.parents[1]))}else{if(e.parents.length==0)return;if(e.parents[0]){let i=Dt.records.commits.get(e.parents[0]);Ege(t,e,i)}}t=iKe(t,i=>i.id),Cge(t)}var nKe,n0,Dt,aKe,sKe,oKe,lKe,cKe,uKe,hKe,Sge,fKe,dKe,pKe,mKe,gKe,Age,yKe,vKe,xKe,M6,pF=M(()=>{"use strict";pt();tr();qn();gr();ci();N6();fF();Ra();nKe=ur.gitGraph,n0=o(()=>Vn({...nKe,...Qt().gitGraph}),"getConfig"),Dt=new J1(()=>{let t=n0(),e=t.mainBranchName,r=t.mainBranchOrder;return{mainBranchName:e,commits:new Map,head:null,branchConfig:new Map([[e,{name:e,order:r}]]),branches:new Map([[e,null]]),currBranch:e,direction:"LR",seq:0,options:{}}});o(dF,"getID");o(iKe,"uniqBy");aKe=o(function(t){Dt.records.direction=t},"setDirection"),sKe=o(function(t){X.debug("options str",t),t=t?.trim(),t=t||"{}";try{Dt.records.options=JSON.parse(t)}catch(e){X.error("error while parsing gitGraph options",e.message)}},"setOptions"),oKe=o(function(){return Dt.records.options},"getOptions"),lKe=o(function(t){let e=t.msg,r=t.id,n=t.type,i=t.tags;X.info("commit",e,r,n,i),X.debug("Entering commit:",e,r,n,i);let a=n0();r=tt.sanitizeText(r,a),e=tt.sanitizeText(e,a),i=i?.map(l=>tt.sanitizeText(l,a));let s={id:r||Dt.records.seq+"-"+dF(),message:e,seq:Dt.records.seq++,type:n??rn.NORMAL,tags:i??[],parents:Dt.records.head==null?[]:[Dt.records.head.id],branch:Dt.records.currBranch};Dt.records.head=s,X.info("main branch",a.mainBranchName),Dt.records.commits.has(s.id)&&X.warn(`Commit ID ${s.id} already exists`),Dt.records.commits.set(s.id,s),Dt.records.branches.set(Dt.records.currBranch,s.id),X.debug("in pushCommit "+s.id)},"commit"),cKe=o(function(t){let e=t.name,r=t.order;if(e=tt.sanitizeText(e,n0()),Dt.records.branches.has(e))throw new Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${e}")`);Dt.records.branches.set(e,Dt.records.head!=null?Dt.records.head.id:null),Dt.records.branchConfig.set(e,{name:e,order:r}),Sge(e),X.debug("in createBranch")},"branch"),uKe=o(t=>{let e=t.branch,r=t.id,n=t.type,i=t.tags,a=n0();e=tt.sanitizeText(e,a),r&&(r=tt.sanitizeText(r,a));let s=Dt.records.branches.get(Dt.records.currBranch),l=Dt.records.branches.get(e),u=s?Dt.records.commits.get(s):void 0,h=l?Dt.records.commits.get(l):void 0;if(u&&h&&u.branch===e)throw new Error(`Cannot merge branch '${e}' into itself.`);if(Dt.records.currBranch===e){let p=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(u===void 0||!u){let p=new Error(`Incorrect usage of "merge". Current branch (${Dt.records.currBranch})has no commits`);throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["commit"]},p}if(!Dt.records.branches.has(e)){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") does not exist");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:[`branch ${e}`]},p}if(h===void 0||!h){let p=new Error('Incorrect usage of "merge". Branch to be merged ('+e+") has no commits");throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:['"commit"']},p}if(u===h){let p=new Error('Incorrect usage of "merge". Both branches have same head');throw p.hash={text:`merge ${e}`,token:`merge ${e}`,expected:["branch abc"]},p}if(r&&Dt.records.commits.has(r)){let p=new Error('Incorrect usage of "merge". Commit with id:'+r+" already exists, use different custom id");throw p.hash={text:`merge ${e} ${r} ${n} ${i?.join(" ")}`,token:`merge ${e} ${r} ${n} ${i?.join(" ")}`,expected:[`merge ${e} ${r}_UNIQUE ${n} ${i?.join(" ")}`]},p}let f=l||"",d={id:r||`${Dt.records.seq}-${dF()}`,message:`merged branch ${e} into ${Dt.records.currBranch}`,seq:Dt.records.seq++,parents:Dt.records.head==null?[]:[Dt.records.head.id,f],branch:Dt.records.currBranch,type:rn.MERGE,customType:n,customId:!!r,tags:i??[]};Dt.records.head=d,Dt.records.commits.set(d.id,d),Dt.records.branches.set(Dt.records.currBranch,d.id),X.debug(Dt.records.branches),X.debug("in mergeBranch")},"merge"),hKe=o(function(t){let e=t.id,r=t.targetId,n=t.tags,i=t.parent;X.debug("Entering cherryPick:",e,r,n);let a=n0();if(e=tt.sanitizeText(e,a),r=tt.sanitizeText(r,a),n=n?.map(u=>tt.sanitizeText(u,a)),i=tt.sanitizeText(i,a),!e||!Dt.records.commits.has(e)){let u=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw u.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},u}let s=Dt.records.commits.get(e);if(s===void 0||!s)throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');if(i&&!(Array.isArray(s.parents)&&s.parents.includes(i)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");let l=s.branch;if(s.type===rn.MERGE&&!i)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!r||!Dt.records.commits.has(r)){if(l===Dt.records.currBranch){let d=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let u=Dt.records.branches.get(Dt.records.currBranch);if(u===void 0||!u){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${Dt.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let h=Dt.records.commits.get(u);if(h===void 0||!h){let d=new Error(`Incorrect usage of "cherry-pick". Current branch (${Dt.records.currBranch})has no commits`);throw d.hash={text:`cherryPick ${e} ${r}`,token:`cherryPick ${e} ${r}`,expected:["cherry-pick abc"]},d}let f={id:Dt.records.seq+"-"+dF(),message:`cherry-picked ${s?.message} into ${Dt.records.currBranch}`,seq:Dt.records.seq++,parents:Dt.records.head==null?[]:[Dt.records.head.id,s.id],branch:Dt.records.currBranch,type:rn.CHERRY_PICK,tags:n?n.filter(Boolean):[`cherry-pick:${s.id}${s.type===rn.MERGE?`|parent:${i}`:""}`]};Dt.records.head=f,Dt.records.commits.set(f.id,f),Dt.records.branches.set(Dt.records.currBranch,f.id),X.debug(Dt.records.branches),X.debug("in cherryPick")}},"cherryPick"),Sge=o(function(t){if(t=tt.sanitizeText(t,n0()),Dt.records.branches.has(t)){Dt.records.currBranch=t;let e=Dt.records.branches.get(Dt.records.currBranch);e===void 0||!e?Dt.records.head=null:Dt.records.head=Dt.records.commits.get(e)??null}else{let e=new Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${t}")`);throw e.hash={text:`checkout ${t}`,token:`checkout ${t}`,expected:[`branch ${t}`]},e}},"checkout");o(Ege,"upsert");o(Cge,"prettyPrintCommitHistory");fKe=o(function(){X.debug(Dt.records.commits);let t=Age()[0];Cge([t])},"prettyPrint"),dKe=o(function(){Dt.reset(),Sr()},"clear"),pKe=o(function(){return[...Dt.records.branchConfig.values()].map((e,r)=>e.order!==null&&e.order!==void 0?e:{...e,order:parseFloat(`0.${r}`)}).sort((e,r)=>(e.order??0)-(r.order??0)).map(({name:e})=>({name:e}))},"getBranchesAsObjArray"),mKe=o(function(){return Dt.records.branches},"getBranches"),gKe=o(function(){return Dt.records.commits},"getCommits"),Age=o(function(){let t=[...Dt.records.commits.values()];return t.forEach(function(e){X.debug(e.id)}),t.sort((e,r)=>e.seq-r.seq),t},"getCommitsArray"),yKe=o(function(){return Dt.records.currBranch},"getCurrentBranch"),vKe=o(function(){return Dt.records.direction},"getDirection"),xKe=o(function(){return Dt.records.head},"getHead"),M6={commitType:rn,getConfig:n0,setDirection:aKe,setOptions:sKe,getOptions:oKe,commit:lKe,branch:cKe,merge:uKe,cherryPick:hKe,checkout:Sge,prettyPrint:fKe,clear:dKe,getBranchesAsObjArray:pKe,getBranches:mKe,getCommits:gKe,getCommitsArray:Age,getCurrentBranch:yKe,getDirection:vKe,getHead:xKe,setAccTitle:Rr,getAccTitle:Mr,getAccDescription:Or,setAccDescription:Ir,setDiagramTitle:$r,getDiagramTitle:Pr}});var bKe,TKe,wKe,kKe,EKe,SKe,CKe,_ge,Dge=M(()=>{"use strict";Uf();pt();r0();pF();N6();bKe=o((t,e)=>{nl(t,e),t.dir&&e.setDirection(t.dir);for(let r of t.statements)TKe(r,e)},"populate"),TKe=o((t,e)=>{let n={Commit:o(i=>e.commit(wKe(i)),"Commit"),Branch:o(i=>e.branch(kKe(i)),"Branch"),Merge:o(i=>e.merge(EKe(i)),"Merge"),Checkout:o(i=>e.checkout(SKe(i)),"Checkout"),CherryPicking:o(i=>e.cherryPick(CKe(i)),"CherryPicking")}[t.$type];n?n(t):X.error(`Unknown statement type: ${t.$type}`)},"parseStatement"),wKe=o(t=>({id:t.id,msg:t.message??"",type:t.type!==void 0?rn[t.type]:rn.NORMAL,tags:t.tags??void 0}),"parseCommit"),kKe=o(t=>({name:t.name,order:t.order??0}),"parseBranch"),EKe=o(t=>({branch:t.branch,id:t.id??"",type:t.type!==void 0?rn[t.type]:void 0,tags:t.tags??void 0}),"parseMerge"),SKe=o(t=>t.branch,"parseCheckout"),CKe=o(t=>({id:t.id,targetId:"",tags:t.tags?.length===0?void 0:t.tags,parent:t.parent}),"parseCherryPicking"),_ge={parse:o(async t=>{let e=await bs("gitGraph",t);X.debug(e),bKe(e,M6)},"parse")}});var AKe,il,qf,Wf,Jc,ih,i0,Ks,Qs,I6,f4,O6,Hf,Vr,_Ke,Rge,Nge,DKe,LKe,RKe,NKe,MKe,IKe,OKe,PKe,BKe,FKe,$Ke,zKe,Lge,GKe,d4,VKe,UKe,HKe,qKe,WKe,Mge,Ige=M(()=>{"use strict";yr();Xt();pt();tr();N6();AKe=ge(),il=AKe?.gitGraph,qf=10,Wf=40,Jc=4,ih=2,i0=8,Ks=new Map,Qs=new Map,I6=30,f4=new Map,O6=[],Hf=0,Vr="LR",_Ke=o(()=>{Ks.clear(),Qs.clear(),f4.clear(),Hf=0,O6=[],Vr="LR"},"clear"),Rge=o(t=>{let e=document.createElementNS("http://www.w3.org/2000/svg","text");return(typeof t=="string"?t.split(/\\n|\n|/gi):t).forEach(n=>{let i=document.createElementNS("http://www.w3.org/2000/svg","tspan");i.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),i.setAttribute("dy","1em"),i.setAttribute("x","0"),i.setAttribute("class","row"),i.textContent=n.trim(),e.appendChild(i)}),e},"drawText"),Nge=o(t=>{let e,r,n;return Vr==="BT"?(r=o((i,a)=>i<=a,"comparisonFunc"),n=1/0):(r=o((i,a)=>i>=a,"comparisonFunc"),n=0),t.forEach(i=>{let a=Vr==="TB"||Vr=="BT"?Qs.get(i)?.y:Qs.get(i)?.x;a!==void 0&&r(a,n)&&(e=i,n=a)}),e},"findClosestParent"),DKe=o(t=>{let e="",r=1/0;return t.forEach(n=>{let i=Qs.get(n).y;i<=r&&(e=n,r=i)}),e||void 0},"findClosestParentBT"),LKe=o((t,e,r)=>{let n=r,i=r,a=[];t.forEach(s=>{let l=e.get(s);if(!l)throw new Error(`Commit not found for key ${s}`);l.parents.length?(n=NKe(l),i=Math.max(n,i)):a.push(l),MKe(l,n)}),n=i,a.forEach(s=>{IKe(s,n,r)}),t.forEach(s=>{let l=e.get(s);if(l?.parents.length){let u=DKe(l.parents);n=Qs.get(u).y-Wf,n<=i&&(i=n);let h=Ks.get(l.branch).pos,f=n-qf;Qs.set(l.id,{x:h,y:f})}})},"setParallelBTPos"),RKe=o(t=>{let e=Nge(t.parents.filter(n=>n!==null));if(!e)throw new Error(`Closest parent not found for commit ${t.id}`);let r=Qs.get(e)?.y;if(r===void 0)throw new Error(`Closest parent position not found for commit ${t.id}`);return r},"findClosestParentPos"),NKe=o(t=>RKe(t)+Wf,"calculateCommitPosition"),MKe=o((t,e)=>{let r=Ks.get(t.branch);if(!r)throw new Error(`Branch not found for commit ${t.id}`);let n=r.pos,i=e+qf;return Qs.set(t.id,{x:n,y:i}),{x:n,y:i}},"setCommitPosition"),IKe=o((t,e,r)=>{let n=Ks.get(t.branch);if(!n)throw new Error(`Branch not found for commit ${t.id}`);let i=e+r,a=n.pos;Qs.set(t.id,{x:a,y:i})},"setRootPosition"),OKe=o((t,e,r,n,i,a)=>{if(a===rn.HIGHLIGHT)t.append("rect").attr("x",r.x-10).attr("y",r.y-10).attr("width",20).attr("height",20).attr("class",`commit ${e.id} commit-highlight${i%i0} ${n}-outer`),t.append("rect").attr("x",r.x-6).attr("y",r.y-6).attr("width",12).attr("height",12).attr("class",`commit ${e.id} commit${i%i0} ${n}-inner`);else if(a===rn.CHERRY_PICK)t.append("circle").attr("cx",r.x).attr("cy",r.y).attr("r",10).attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x-3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("circle").attr("cx",r.x+3).attr("cy",r.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x+3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`),t.append("line").attr("x1",r.x-3).attr("y1",r.y+1).attr("x2",r.x).attr("y2",r.y-5).attr("stroke","#fff").attr("class",`commit ${e.id} ${n}`);else{let s=t.append("circle");if(s.attr("cx",r.x),s.attr("cy",r.y),s.attr("r",e.type===rn.MERGE?9:10),s.attr("class",`commit ${e.id} commit${i%i0}`),a===rn.MERGE){let l=t.append("circle");l.attr("cx",r.x),l.attr("cy",r.y),l.attr("r",6),l.attr("class",`commit ${n} ${e.id} commit${i%i0}`)}a===rn.REVERSE&&t.append("path").attr("d",`M ${r.x-5},${r.y-5}L${r.x+5},${r.y+5}M${r.x-5},${r.y+5}L${r.x+5},${r.y-5}`).attr("class",`commit ${n} ${e.id} commit${i%i0}`)}},"drawCommitBullet"),PKe=o((t,e,r,n)=>{if(e.type!==rn.CHERRY_PICK&&(e.customId&&e.type===rn.MERGE||e.type!==rn.MERGE)&&il?.showCommitLabel){let i=t.append("g"),a=i.insert("rect").attr("class","commit-label-bkg"),s=i.append("text").attr("x",n).attr("y",r.y+25).attr("class","commit-label").text(e.id),l=s.node()?.getBBox();if(l&&(a.attr("x",r.posWithOffset-l.width/2-ih).attr("y",r.y+13.5).attr("width",l.width+2*ih).attr("height",l.height+2*ih),Vr==="TB"||Vr==="BT"?(a.attr("x",r.x-(l.width+4*Jc+5)).attr("y",r.y-12),s.attr("x",r.x-(l.width+4*Jc)).attr("y",r.y+l.height-12)):s.attr("x",r.posWithOffset-l.width/2),il.rotateCommitLabel))if(Vr==="TB"||Vr==="BT")s.attr("transform","rotate(-45, "+r.x+", "+r.y+")"),a.attr("transform","rotate(-45, "+r.x+", "+r.y+")");else{let u=-7.5-(l.width+10)/25*9.5,h=10+l.width/25*8.5;i.attr("transform","translate("+u+", "+h+") rotate(-45, "+n+", "+r.y+")")}}},"drawCommitLabel"),BKe=o((t,e,r,n)=>{if(e.tags.length>0){let i=0,a=0,s=0,l=[];for(let u of e.tags.reverse()){let h=t.insert("polygon"),f=t.append("circle"),d=t.append("text").attr("y",r.y-16-i).attr("class","tag-label").text(u),p=d.node()?.getBBox();if(!p)throw new Error("Tag bbox not found");a=Math.max(a,p.width),s=Math.max(s,p.height),d.attr("x",r.posWithOffset-p.width/2),l.push({tag:d,hole:f,rect:h,yOffset:i}),i+=20}for(let{tag:u,hole:h,rect:f,yOffset:d}of l){let p=s/2,m=r.y-19.2-d;if(f.attr("class","tag-label-bkg").attr("points",` + ${n-a/2-Jc/2},${m+ih} + ${n-a/2-Jc/2},${m-ih} + ${r.posWithOffset-a/2-Jc},${m-p-ih} + ${r.posWithOffset+a/2+Jc},${m-p-ih} + ${r.posWithOffset+a/2+Jc},${m+p+ih} + ${r.posWithOffset-a/2-Jc},${m+p+ih}`),h.attr("cy",m).attr("cx",n-a/2+Jc/2).attr("r",1.5).attr("class","tag-hole"),Vr==="TB"||Vr==="BT"){let g=n+d;f.attr("class","tag-label-bkg").attr("points",` + ${r.x},${g+2} + ${r.x},${g-2} + ${r.x+qf},${g-p-2} + ${r.x+qf+a+4},${g-p-2} + ${r.x+qf+a+4},${g+p+2} + ${r.x+qf},${g+p+2}`).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),h.attr("cx",r.x+Jc/2).attr("cy",g).attr("transform","translate(12,12) rotate(45, "+r.x+","+n+")"),u.attr("x",r.x+5).attr("y",g+3).attr("transform","translate(14,14) rotate(45, "+r.x+","+n+")")}}}},"drawCommitTags"),FKe=o(t=>{switch(t.customType??t.type){case rn.NORMAL:return"commit-normal";case rn.REVERSE:return"commit-reverse";case rn.HIGHLIGHT:return"commit-highlight";case rn.MERGE:return"commit-merge";case rn.CHERRY_PICK:return"commit-cherry-pick";default:return"commit-normal"}},"getCommitClassType"),$Ke=o((t,e,r,n)=>{let i={x:0,y:0};if(t.parents.length>0){let a=Nge(t.parents);if(a){let s=n.get(a)??i;return e==="TB"?s.y+Wf:e==="BT"?(n.get(t.id)??i).y-Wf:s.x+Wf}}else return e==="TB"?I6:e==="BT"?(n.get(t.id)??i).y-Wf:0;return 0},"calculatePosition"),zKe=o((t,e,r)=>{let n=Vr==="BT"&&r?e:e+qf,i=Vr==="TB"||Vr==="BT"?n:Ks.get(t.branch)?.pos,a=Vr==="TB"||Vr==="BT"?Ks.get(t.branch)?.pos:n;if(a===void 0||i===void 0)throw new Error(`Position were undefined for commit ${t.id}`);return{x:a,y:i,posWithOffset:n}},"getCommitPosition"),Lge=o((t,e,r)=>{if(!il)throw new Error("GitGraph config not found");let n=t.append("g").attr("class","commit-bullets"),i=t.append("g").attr("class","commit-labels"),a=Vr==="TB"||Vr==="BT"?I6:0,s=[...e.keys()],l=il?.parallelCommits??!1,u=o((f,d)=>{let p=e.get(f)?.seq,m=e.get(d)?.seq;return p!==void 0&&m!==void 0?p-m:0},"sortKeys"),h=s.sort(u);Vr==="BT"&&(l&&LKe(h,e,a),h=h.reverse()),h.forEach(f=>{let d=e.get(f);if(!d)throw new Error(`Commit not found for key ${f}`);l&&(a=$Ke(d,Vr,a,Qs));let p=zKe(d,a,l);if(r){let m=FKe(d),g=d.customType??d.type,y=Ks.get(d.branch)?.index??0;OKe(n,d,p,m,y,g),PKe(i,d,p,a),BKe(i,d,p,a)}Vr==="TB"||Vr==="BT"?Qs.set(d.id,{x:p.x,y:p.posWithOffset}):Qs.set(d.id,{x:p.posWithOffset,y:p.y}),a=Vr==="BT"&&l?a+Wf:a+Wf+qf,a>Hf&&(Hf=a)})},"drawCommits"),GKe=o((t,e,r,n,i)=>{let s=(Vr==="TB"||Vr==="BT"?r.xh.branch===s,"isOnBranchToGetCurve"),u=o(h=>h.seq>t.seq&&h.sequ(h)&&l(h))},"shouldRerouteArrow"),d4=o((t,e,r=0)=>{let n=t+Math.abs(t-e)/2;if(r>5)return n;if(O6.every(s=>Math.abs(s-n)>=10))return O6.push(n),n;let a=Math.abs(t-e);return d4(t,e-a/5,r+1)},"findLane"),VKe=o((t,e,r,n)=>{let i=Qs.get(e.id),a=Qs.get(r.id);if(i===void 0||a===void 0)throw new Error(`Commit positions not found for commits ${e.id} and ${r.id}`);let s=GKe(e,r,i,a,n),l="",u="",h=0,f=0,d=Ks.get(r.branch)?.index;r.type===rn.MERGE&&e.id!==r.parents[0]&&(d=Ks.get(e.branch)?.index);let p;if(s){l="A 10 10, 0, 0, 0,",u="A 10 10, 0, 0, 1,",h=10,f=10;let m=i.ya.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===rn.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y-h} ${u} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x+h} ${i.y} ${l} ${a.x} ${i.y+f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):Vr==="BT"?(i.xa.x&&(l="A 20 20, 0, 0, 0,",u="A 20 20, 0, 0, 1,",h=20,f=20,r.type===rn.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${l} ${i.x-f} ${a.y} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`),i.x===a.x&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`)):(i.ya.y&&(r.type===rn.MERGE&&e.id!==r.parents[0]?p=`M ${i.x} ${i.y} L ${a.x-h} ${i.y} ${l} ${a.x} ${i.y-f} L ${a.x} ${a.y}`:p=`M ${i.x} ${i.y} L ${i.x} ${a.y+h} ${u} ${i.x+f} ${a.y} L ${a.x} ${a.y}`),i.y===a.y&&(p=`M ${i.x} ${i.y} L ${a.x} ${a.y}`));if(p===void 0)throw new Error("Line definition not found");t.append("path").attr("d",p).attr("class","arrow arrow"+d%i0)},"drawArrow"),UKe=o((t,e)=>{let r=t.append("g").attr("class","commit-arrows");[...e.keys()].forEach(n=>{let i=e.get(n);i.parents&&i.parents.length>0&&i.parents.forEach(a=>{VKe(r,e.get(a),i,e)})})},"drawArrows"),HKe=o((t,e)=>{let r=t.append("g");e.forEach((n,i)=>{let a=i%i0,s=Ks.get(n.name)?.pos;if(s===void 0)throw new Error(`Position not found for branch ${n.name}`);let l=r.append("line");l.attr("x1",0),l.attr("y1",s),l.attr("x2",Hf),l.attr("y2",s),l.attr("class","branch branch"+a),Vr==="TB"?(l.attr("y1",I6),l.attr("x1",s),l.attr("y2",Hf),l.attr("x2",s)):Vr==="BT"&&(l.attr("y1",Hf),l.attr("x1",s),l.attr("y2",I6),l.attr("x2",s)),O6.push(s);let u=n.name,h=Rge(u),f=r.insert("rect"),p=r.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+a);p.node().appendChild(h);let m=h.getBBox();f.attr("class","branchLabelBkg label"+a).attr("rx",4).attr("ry",4).attr("x",-m.width-4-(il?.rotateCommitLabel===!0?30:0)).attr("y",-m.height/2+8).attr("width",m.width+18).attr("height",m.height+4),p.attr("transform","translate("+(-m.width-14-(il?.rotateCommitLabel===!0?30:0))+", "+(s-m.height/2-1)+")"),Vr==="TB"?(f.attr("x",s-m.width/2-10).attr("y",0),p.attr("transform","translate("+(s-m.width/2-5)+", 0)")):Vr==="BT"?(f.attr("x",s-m.width/2-10).attr("y",Hf),p.attr("transform","translate("+(s-m.width/2-5)+", "+Hf+")")):f.attr("transform","translate(-19, "+(s-m.height/2)+")")})},"drawBranches"),qKe=o(function(t,e,r,n,i){return Ks.set(t,{pos:e,index:r}),e+=50+(i?40:0)+(Vr==="TB"||Vr==="BT"?n.width/2:0),e},"setBranchPosition"),WKe=o(function(t,e,r,n){if(_Ke(),X.debug("in gitgraph renderer",t+` +`,"id:",e,r),!il)throw new Error("GitGraph config not found");let i=il.rotateCommitLabel??!1,a=n.db;f4=a.getCommits();let s=a.getBranchesAsObjArray();Vr=a.getDirection();let l=qe(`[id="${e}"]`),u=0;s.forEach((h,f)=>{let d=Rge(h.name),p=l.append("g"),m=p.insert("g").attr("class","branchLabel"),g=m.insert("g").attr("class","label branch-label");g.node()?.appendChild(d);let y=d.getBBox();u=qKe(h.name,u,f,y,i),g.remove(),m.remove(),p.remove()}),Lge(l,f4,!1),il.showBranches&&HKe(l,s),UKe(l,f4),Lge(l,f4,!0),qt.insertTitle(l,"gitTitleText",il.titleTopMargin??0,a.getDiagramTitle()),FA(void 0,l,il.diagramPadding,il.useMaxWidth)},"draw"),Mge={draw:WKe}});var YKe,Oge,Pge=M(()=>{"use strict";YKe=o(t=>` + .commit-id, + .commit-msg, + .branch-label { + fill: lightgrey; + color: lightgrey; + font-family: 'trebuchet ms', verdana, arial, sans-serif; + font-family: var(--mermaid-font-family); + } + ${[0,1,2,3,4,5,6,7].map(e=>` + .branch-label${e} { fill: ${t["gitBranchLabel"+e]}; } + .commit${e} { stroke: ${t["git"+e]}; fill: ${t["git"+e]}; } + .commit-highlight${e} { stroke: ${t["gitInv"+e]}; fill: ${t["gitInv"+e]}; } + .label${e} { fill: ${t["git"+e]}; } + .arrow${e} { stroke: ${t["git"+e]}; } + `).join(` +`)} + + .branch { + stroke-width: 1; + stroke: ${t.lineColor}; + stroke-dasharray: 2; + } + .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelColor};} + .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelBackground}; opacity: 0.5; } + .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};} + .tag-label-bkg { fill: ${t.tagLabelBackground}; stroke: ${t.tagLabelBorder}; } + .tag-hole { fill: ${t.textColor}; } + + .commit-merge { + stroke: ${t.primaryColor}; + fill: ${t.primaryColor}; + } + .commit-reverse { + stroke: ${t.primaryColor}; + fill: ${t.primaryColor}; + stroke-width: 3; + } + .commit-highlight-outer { + } + .commit-highlight-inner { + stroke: ${t.primaryColor}; + fill: ${t.primaryColor}; + } + + .arrow { stroke-width: 8; stroke-linecap: round; fill: none} + .gitTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; + } +`,"getStyles"),Oge=YKe});var Bge={};dr(Bge,{diagram:()=>XKe});var XKe,Fge=M(()=>{"use strict";Dge();pF();Ige();Pge();XKe={parser:_ge,db:M6,renderer:Mge,styles:Oge}});var mF,Gge,Vge=M(()=>{"use strict";mF=(function(){var t=o(function(_,D,O,N){for(O=O||{},N=_.length;N--;O[_[N]]=D);return O},"o"),e=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],r=[1,26],n=[1,27],i=[1,28],a=[1,29],s=[1,30],l=[1,31],u=[1,32],h=[1,33],f=[1,34],d=[1,9],p=[1,10],m=[1,11],g=[1,12],y=[1,13],v=[1,14],x=[1,15],b=[1,16],T=[1,19],S=[1,20],w=[1,21],k=[1,22],C=[1,23],A=[1,25],L=[1,35],I={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,weekend:19,weekend_friday:20,weekend_saturday:21,dateFormat:22,inclusiveEndDates:23,topAxis:24,axisFormat:25,tickInterval:26,excludes:27,includes:28,todayMarker:29,title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,section:36,clickStatement:37,taskTxt:38,taskData:39,click:40,callbackname:41,callbackargs:42,href:43,clickStatementDebug:44,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",20:"weekend_friday",21:"weekend_saturday",22:"dateFormat",23:"inclusiveEndDates",24:"topAxis",25:"axisFormat",26:"tickInterval",27:"excludes",28:"includes",29:"todayMarker",30:"title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"section",38:"taskTxt",39:"taskData",40:"click",41:"callbackname",42:"callbackargs",43:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[19,1],[19,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],performAction:o(function(D,O,N,P,B,F,V){var $=F.length-1;switch(B){case 1:return F[$-1];case 2:this.$=[];break;case 3:F[$-1].push(F[$]),this.$=F[$-1];break;case 4:case 5:this.$=F[$];break;case 6:case 7:this.$=[];break;case 8:P.setWeekday("monday");break;case 9:P.setWeekday("tuesday");break;case 10:P.setWeekday("wednesday");break;case 11:P.setWeekday("thursday");break;case 12:P.setWeekday("friday");break;case 13:P.setWeekday("saturday");break;case 14:P.setWeekday("sunday");break;case 15:P.setWeekend("friday");break;case 16:P.setWeekend("saturday");break;case 17:P.setDateFormat(F[$].substr(11)),this.$=F[$].substr(11);break;case 18:P.enableInclusiveEndDates(),this.$=F[$].substr(18);break;case 19:P.TopAxis(),this.$=F[$].substr(8);break;case 20:P.setAxisFormat(F[$].substr(11)),this.$=F[$].substr(11);break;case 21:P.setTickInterval(F[$].substr(13)),this.$=F[$].substr(13);break;case 22:P.setExcludes(F[$].substr(9)),this.$=F[$].substr(9);break;case 23:P.setIncludes(F[$].substr(9)),this.$=F[$].substr(9);break;case 24:P.setTodayMarker(F[$].substr(12)),this.$=F[$].substr(12);break;case 27:P.setDiagramTitle(F[$].substr(6)),this.$=F[$].substr(6);break;case 28:this.$=F[$].trim(),P.setAccTitle(this.$);break;case 29:case 30:this.$=F[$].trim(),P.setAccDescription(this.$);break;case 31:P.addSection(F[$].substr(8)),this.$=F[$].substr(8);break;case 33:P.addTask(F[$-1],F[$]),this.$="task";break;case 34:this.$=F[$-1],P.setClickEvent(F[$-1],F[$],null);break;case 35:this.$=F[$-2],P.setClickEvent(F[$-2],F[$-1],F[$]);break;case 36:this.$=F[$-2],P.setClickEvent(F[$-2],F[$-1],null),P.setLink(F[$-2],F[$]);break;case 37:this.$=F[$-3],P.setClickEvent(F[$-3],F[$-2],F[$-1]),P.setLink(F[$-3],F[$]);break;case 38:this.$=F[$-2],P.setClickEvent(F[$-2],F[$],null),P.setLink(F[$-2],F[$-1]);break;case 39:this.$=F[$-3],P.setClickEvent(F[$-3],F[$-1],F[$]),P.setLink(F[$-3],F[$-2]);break;case 40:this.$=F[$-1],P.setLink(F[$-1],F[$]);break;case 41:case 47:this.$=F[$-1]+" "+F[$];break;case 42:case 43:case 45:this.$=F[$-2]+" "+F[$-1]+" "+F[$];break;case 44:case 46:this.$=F[$-3]+" "+F[$-2]+" "+F[$-1]+" "+F[$];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:T,31:S,33:w,35:k,36:C,37:24,38:A,40:L},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:36,11:17,12:r,13:n,14:i,15:a,16:s,17:l,18:u,19:18,20:h,21:f,22:d,23:p,24:m,25:g,26:y,27:v,28:x,29:b,30:T,31:S,33:w,35:k,36:C,37:24,38:A,40:L},t(e,[2,5]),t(e,[2,6]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),t(e,[2,27]),{32:[1,37]},{34:[1,38]},t(e,[2,30]),t(e,[2,31]),t(e,[2,32]),{39:[1,39]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),{41:[1,40],43:[1,41]},t(e,[2,4]),t(e,[2,28]),t(e,[2,29]),t(e,[2,33]),t(e,[2,34],{42:[1,42],43:[1,43]}),t(e,[2,40],{41:[1,44]}),t(e,[2,35],{43:[1,45]}),t(e,[2,36]),t(e,[2,38],{42:[1,46]}),t(e,[2,37]),t(e,[2,39])],defaultActions:{},parseError:o(function(D,O){if(O.recoverable)this.trace(D);else{var N=new Error(D);throw N.hash=O,N}},"parseError"),parse:o(function(D){var O=this,N=[0],P=[],B=[null],F=[],V=this.table,$="",U=0,j=0,ee=0,q=2,oe=1,Q=F.slice.call(arguments,1),ue=Object.create(this.lexer),te={yy:{}};for(var re in this.yy)Object.prototype.hasOwnProperty.call(this.yy,re)&&(te.yy[re]=this.yy[re]);ue.setInput(D,te.yy),te.yy.lexer=ue,te.yy.parser=this,typeof ue.yylloc>"u"&&(ue.yylloc={});var J=ue.yylloc;F.push(J);var K=ue.options&&ue.options.ranges;typeof te.yy.parseError=="function"?this.parseError=te.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ae(Ce){N.length=N.length-2*Ce,B.length=B.length-Ce,F.length=F.length-Ce}o(ae,"popStack");function Z(){var Ce;return Ce=P.pop()||ue.lex()||oe,typeof Ce!="number"&&(Ce instanceof Array&&(P=Ce,Ce=P.pop()),Ce=O.symbols_[Ce]||Ce),Ce}o(Z,"lex");for(var de,ne,Te,W,Ve,pe,Be={},Ye,He,Le,Ie;;){if(Te=N[N.length-1],this.defaultActions[Te]?W=this.defaultActions[Te]:((de===null||typeof de>"u")&&(de=Z()),W=V[Te]&&V[Te][de]),typeof W>"u"||!W.length||!W[0]){var Ne="";Ie=[];for(Ye in V[Te])this.terminals_[Ye]&&Ye>q&&Ie.push("'"+this.terminals_[Ye]+"'");ue.showPosition?Ne="Parse error on line "+(U+1)+`: +`+ue.showPosition()+` +Expecting `+Ie.join(", ")+", got '"+(this.terminals_[de]||de)+"'":Ne="Parse error on line "+(U+1)+": Unexpected "+(de==oe?"end of input":"'"+(this.terminals_[de]||de)+"'"),this.parseError(Ne,{text:ue.match,token:this.terminals_[de]||de,line:ue.yylineno,loc:J,expected:Ie})}if(W[0]instanceof Array&&W.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Te+", token: "+de);switch(W[0]){case 1:N.push(de),B.push(ue.yytext),F.push(ue.yylloc),N.push(W[1]),de=null,ne?(de=ne,ne=null):(j=ue.yyleng,$=ue.yytext,U=ue.yylineno,J=ue.yylloc,ee>0&&ee--);break;case 2:if(He=this.productions_[W[1]][1],Be.$=B[B.length-He],Be._$={first_line:F[F.length-(He||1)].first_line,last_line:F[F.length-1].last_line,first_column:F[F.length-(He||1)].first_column,last_column:F[F.length-1].last_column},K&&(Be._$.range=[F[F.length-(He||1)].range[0],F[F.length-1].range[1]]),pe=this.performAction.apply(Be,[$,j,U,te.yy,W[1],B,F].concat(Q)),typeof pe<"u")return pe;He&&(N=N.slice(0,-1*He*2),B=B.slice(0,-1*He),F=F.slice(0,-1*He)),N.push(this.productions_[W[1]][0]),B.push(Be.$),F.push(Be._$),Le=V[N[N.length-2]][N[N.length-1]],N.push(Le);break;case 3:return!0}}return!0},"parse")},R=(function(){var _={EOF:1,parseError:o(function(O,N){if(this.yy.parser)this.yy.parser.parseError(O,N);else throw new Error(O)},"parseError"),setInput:o(function(D,O){return this.yy=O||this.yy||{},this._input=D,this._more=this._backtrack=this.done=!1,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},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var D=this._input[0];this.yytext+=D,this.yyleng++,this.offset++,this.match+=D,this.matched+=D;var O=D.match(/(?:\r\n?|\n).*/g);return O?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),D},"input"),unput:o(function(D){var O=D.length,N=D.split(/(?:\r\n?|\n)/g);this._input=D+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-O),this.offset-=O;var P=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),N.length-1&&(this.yylineno-=N.length-1);var B=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:N?(N.length===P.length?this.yylloc.first_column:0)+P[P.length-N.length].length-N[0].length:this.yylloc.first_column-O},this.options.ranges&&(this.yylloc.range=[B[0],B[0]+this.yyleng-O]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(D){this.unput(this.match.slice(D))},"less"),pastInput:o(function(){var D=this.matched.substr(0,this.matched.length-this.match.length);return(D.length>20?"...":"")+D.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var D=this.match;return D.length<20&&(D+=this._input.substr(0,20-D.length)),(D.substr(0,20)+(D.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var D=this.pastInput(),O=new Array(D.length+1).join("-");return D+this.upcomingInput()+` +`+O+"^"},"showPosition"),test_match:o(function(D,O){var N,P,B;if(this.options.backtrack_lexer&&(B={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},this.options.ranges&&(B.yylloc.range=this.yylloc.range.slice(0))),P=D[0].match(/(?:\r\n?|\n).*/g),P&&(this.yylineno+=P.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:P?P[P.length-1].length-P[P.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+D[0].length},this.yytext+=D[0],this.match+=D[0],this.matches=D,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(D[0].length),this.matched+=D[0],N=this.performAction.call(this,this.yy,this,O,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),N)return N;if(this._backtrack){for(var F in B)this[F]=B[F];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var D,O,N,P;this._more||(this.yytext="",this.match="");for(var B=this._currentRules(),F=0;FO[0].length)){if(O=N,P=F,this.options.backtrack_lexer){if(D=this.test_match(N,B[F]),D!==!1)return D;if(this._backtrack){O=!1;continue}else return!1}else if(!this.options.flex)break}return O?(D=this.test_match(O,B[P]),D!==!1?D:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var O=this.next();return O||this.lex()},"lex"),begin:o(function(O){this.conditionStack.push(O)},"begin"),popState:o(function(){var O=this.conditionStack.length-1;return O>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(O){return O=this.conditionStack.length-1-Math.abs(O||0),O>=0?this.conditionStack[O]:"INITIAL"},"topState"),pushState:o(function(O){this.begin(O)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(O,N,P,B){var F=B;switch(P){case 0:return this.begin("open_directive"),"open_directive";break;case 1:return this.begin("acc_title"),31;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),33;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:break;case 9:break;case 10:break;case 11:return 10;case 12:break;case 13:break;case 14:this.begin("href");break;case 15:this.popState();break;case 16:return 43;case 17:this.begin("callbackname");break;case 18:this.popState();break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 41;case 21:this.popState();break;case 22:return 42;case 23:this.begin("click");break;case 24:this.popState();break;case 25:return 40;case 26:return 4;case 27:return 22;case 28:return 23;case 29:return 24;case 30:return 25;case 31:return 26;case 32:return 28;case 33:return 27;case 34:return 29;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return 20;case 43:return 21;case 44:return"date";case 45:return 30;case 46:return"accDescription";case 47:return 36;case 48:return 38;case 49:return 39;case 50:return":";case 51:return 6;case 52:return"INVALID"}},"anonymous"),rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:weekend\s+friday\b)/i,/^(?:weekend\s+saturday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^\n]+)/i,/^(?:[^:\n]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],inclusive:!0}}};return _})();I.lexer=R;function E(){this.yy={}}return o(E,"Parser"),E.prototype=I,I.Parser=E,new E})();mF.parser=mF;Gge=mF});var Uge=sa((gF,yF)=>{"use strict";(function(t,e){typeof gF=="object"&&typeof yF<"u"?yF.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_isoWeek=e()})(gF,(function(){"use strict";var t="day";return function(e,r,n){var i=o(function(l){return l.add(4-l.isoWeekday(),t)},"a"),a=r.prototype;a.isoWeekYear=function(){return i(this).year()},a.isoWeek=function(l){if(!this.$utils().u(l))return this.add(7*(l-this.isoWeek()),t);var u,h,f,d,p=i(this),m=(u=this.isoWeekYear(),h=this.$u,f=(h?n.utc:n)().year(u).startOf("year"),d=4-f.isoWeekday(),f.isoWeekday()>4&&(d+=7),f.add(d,t));return p.diff(m,"week")+1},a.isoWeekday=function(l){return this.$utils().u(l)?this.day()||7:this.day(this.day()%7?l:l-7)};var s=a.startOf;a.startOf=function(l,u){var h=this.$utils(),f=!!h.u(u)||u;return h.p(l)==="isoweek"?f?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(l,u)}}}))});var Hge=sa((vF,xF)=>{"use strict";(function(t,e){typeof vF=="object"&&typeof xF<"u"?xF.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_customParseFormat=e()})(vF,(function(){"use strict";var t={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},e=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,r=/\d/,n=/\d\d/,i=/\d\d?/,a=/\d*[^-_:/,()\s\d]+/,s={},l=o(function(g){return(g=+g)+(g>68?1900:2e3)},"a"),u=o(function(g){return function(y){this[g]=+y}},"f"),h=[/[+-]\d\d:?(\d\d)?|Z/,function(g){(this.zone||(this.zone={})).offset=(function(y){if(!y||y==="Z")return 0;var v=y.match(/([+-]|\d\d)/g),x=60*v[1]+(+v[2]||0);return x===0?0:v[0]==="+"?-x:x})(g)}],f=o(function(g){var y=s[g];return y&&(y.indexOf?y:y.s.concat(y.f))},"u"),d=o(function(g,y){var v,x=s.meridiem;if(x){for(var b=1;b<=24;b+=1)if(g.indexOf(x(b,0,y))>-1){v=b>12;break}}else v=g===(y?"pm":"PM");return v},"d"),p={A:[a,function(g){this.afternoon=d(g,!1)}],a:[a,function(g){this.afternoon=d(g,!0)}],Q:[r,function(g){this.month=3*(g-1)+1}],S:[r,function(g){this.milliseconds=100*+g}],SS:[n,function(g){this.milliseconds=10*+g}],SSS:[/\d{3}/,function(g){this.milliseconds=+g}],s:[i,u("seconds")],ss:[i,u("seconds")],m:[i,u("minutes")],mm:[i,u("minutes")],H:[i,u("hours")],h:[i,u("hours")],HH:[i,u("hours")],hh:[i,u("hours")],D:[i,u("day")],DD:[n,u("day")],Do:[a,function(g){var y=s.ordinal,v=g.match(/\d+/);if(this.day=v[0],y)for(var x=1;x<=31;x+=1)y(x).replace(/\[|\]/g,"")===g&&(this.day=x)}],w:[i,u("week")],ww:[n,u("week")],M:[i,u("month")],MM:[n,u("month")],MMM:[a,function(g){var y=f("months"),v=(f("monthsShort")||y.map((function(x){return x.slice(0,3)}))).indexOf(g)+1;if(v<1)throw new Error;this.month=v%12||v}],MMMM:[a,function(g){var y=f("months").indexOf(g)+1;if(y<1)throw new Error;this.month=y%12||y}],Y:[/[+-]?\d+/,u("year")],YY:[n,function(g){this.year=l(g)}],YYYY:[/\d{4}/,u("year")],Z:h,ZZ:h};function m(g){var y,v;y=g,v=s&&s.formats;for(var x=(g=y.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(A,L,I){var R=I&&I.toUpperCase();return L||v[I]||t[I]||v[R].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(E,_,D){return _||D.slice(1)}))}))).match(e),b=x.length,T=0;T-1)return new Date((N==="X"?1e3:1)*O);var F=m(N)(O),V=F.year,$=F.month,U=F.day,j=F.hours,ee=F.minutes,q=F.seconds,oe=F.milliseconds,Q=F.zone,ue=F.week,te=new Date,re=U||(V||$?1:te.getDate()),J=V||te.getFullYear(),K=0;V&&!$||(K=$>0?$-1:te.getMonth());var ae,Z=j||0,de=ee||0,ne=q||0,Te=oe||0;return Q?new Date(Date.UTC(J,K,re,Z,de,ne,Te+60*Q.offset*1e3)):P?new Date(Date.UTC(J,K,re,Z,de,ne,Te)):(ae=new Date(J,K,re,Z,de,ne,Te),ue&&(ae=B(ae).week(ue).toDate()),ae)}catch{return new Date("")}})(S,C,w,v),this.init(),R&&R!==!0&&(this.$L=this.locale(R).$L),I&&S!=this.format(C)&&(this.$d=new Date("")),s={}}else if(C instanceof Array)for(var E=C.length,_=1;_<=E;_+=1){k[1]=C[_-1];var D=v.apply(this,k);if(D.isValid()){this.$d=D.$d,this.$L=D.$L,this.init();break}_===E&&(this.$d=new Date(""))}else b.call(this,T)}}}))});var qge=sa((bF,TF)=>{"use strict";(function(t,e){typeof bF=="object"&&typeof TF<"u"?TF.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_advancedFormat=e()})(bF,(function(){"use strict";return function(t,e){var r=e.prototype,n=r.format;r.format=function(i){var a=this,s=this.$locale();if(!this.isValid())return n.bind(this)(i);var l=this.$utils(),u=(i||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(h){switch(h){case"Q":return Math.ceil((a.$M+1)/3);case"Do":return s.ordinal(a.$D);case"gggg":return a.weekYear();case"GGGG":return a.isoWeekYear();case"wo":return s.ordinal(a.week(),"W");case"w":case"ww":return l.s(a.week(),h==="w"?1:2,"0");case"W":case"WW":return l.s(a.isoWeek(),h==="W"?1:2,"0");case"k":case"kk":return l.s(String(a.$H===0?24:a.$H),h==="k"?1:2,"0");case"X":return Math.floor(a.$d.getTime()/1e3);case"x":return a.$d.getTime();case"z":return"["+a.offsetName()+"]";case"zzz":return"["+a.offsetName("long")+"]";default:return h}}));return n.bind(this)(u)}}}))});function o1e(t,e,r){let n=!0;for(;n;)n=!1,r.forEach(function(i){let a="^\\s*"+i+"\\s*$",s=new RegExp(a);t[0].match(s)&&(e[i]=!0,t.shift(1),n=!0)})}var Xge,xo,jge,Kge,Qge,Wge,eu,SF,CF,AF,p4,m4,_F,DF,F6,ty,LF,Zge,RF,g4,NF,MF,$6,wF,ZKe,JKe,eQe,tQe,rQe,nQe,iQe,aQe,sQe,oQe,lQe,cQe,uQe,hQe,fQe,dQe,pQe,mQe,gQe,yQe,vQe,xQe,bQe,Jge,TQe,wQe,kQe,e1e,EQe,kF,t1e,r1e,P6,ey,SQe,CQe,EF,B6,Vi,n1e,AQe,a0,_Qe,Yge,DQe,i1e,LQe,a1e,RQe,NQe,s1e,l1e=M(()=>{"use strict";Xge=La(tm(),1),xo=La(j4(),1),jge=La(Uge(),1),Kge=La(Hge(),1),Qge=La(qge(),1);pt();Xt();tr();ci();xo.default.extend(jge.default);xo.default.extend(Kge.default);xo.default.extend(Qge.default);Wge={friday:5,saturday:6},eu="",SF="",AF="",p4=[],m4=[],_F=new Map,DF=[],F6=[],ty="",LF="",Zge=["active","done","crit","milestone","vert"],RF=[],g4=!1,NF=!1,MF="sunday",$6="saturday",wF=0,ZKe=o(function(){DF=[],F6=[],ty="",RF=[],P6=0,EF=void 0,B6=void 0,Vi=[],eu="",SF="",LF="",CF=void 0,AF="",p4=[],m4=[],g4=!1,NF=!1,wF=0,_F=new Map,Sr(),MF="sunday",$6="saturday"},"clear"),JKe=o(function(t){SF=t},"setAxisFormat"),eQe=o(function(){return SF},"getAxisFormat"),tQe=o(function(t){CF=t},"setTickInterval"),rQe=o(function(){return CF},"getTickInterval"),nQe=o(function(t){AF=t},"setTodayMarker"),iQe=o(function(){return AF},"getTodayMarker"),aQe=o(function(t){eu=t},"setDateFormat"),sQe=o(function(){g4=!0},"enableInclusiveEndDates"),oQe=o(function(){return g4},"endDatesAreInclusive"),lQe=o(function(){NF=!0},"enableTopAxis"),cQe=o(function(){return NF},"topAxisEnabled"),uQe=o(function(t){LF=t},"setDisplayMode"),hQe=o(function(){return LF},"getDisplayMode"),fQe=o(function(){return eu},"getDateFormat"),dQe=o(function(t){p4=t.toLowerCase().split(/[\s,]+/)},"setIncludes"),pQe=o(function(){return p4},"getIncludes"),mQe=o(function(t){m4=t.toLowerCase().split(/[\s,]+/)},"setExcludes"),gQe=o(function(){return m4},"getExcludes"),yQe=o(function(){return _F},"getLinks"),vQe=o(function(t){ty=t,DF.push(t)},"addSection"),xQe=o(function(){return DF},"getSections"),bQe=o(function(){let t=Yge(),e=10,r=0;for(;!t&&r{let u=l.trim();return u==="x"||u==="X"},"isTimestampFormat")(e)&&/^\d+$/.test(r))return new Date(Number(r));let a=/^after\s+(?[\d\w- ]+)/.exec(r);if(a!==null){let l=null;for(let h of a.groups.ids.split(" ")){let f=a0(h);f!==void 0&&(!l||f.endTime>l.endTime)&&(l=f)}if(l)return l.endTime;let u=new Date;return u.setHours(0,0,0,0),u}let s=(0,xo.default)(r,e.trim(),!0);if(s.isValid())return s.toDate();{X.debug("Invalid date:"+r),X.debug("With date format:"+e.trim());let l=new Date(r);if(l===void 0||isNaN(l.getTime())||l.getFullYear()<-1e4||l.getFullYear()>1e4)throw new Error("Invalid date:"+r);return l}},"getStartDate"),t1e=o(function(t){let e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return e!==null?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},"parseDuration"),r1e=o(function(t,e,r,n=!1){r=r.trim();let a=/^until\s+(?[\d\w- ]+)/.exec(r);if(a!==null){let f=null;for(let p of a.groups.ids.split(" ")){let m=a0(p);m!==void 0&&(!f||m.startTime{window.open(r,"_self")}),_F.set(n,r))}),i1e(t,"clickable")},"setLink"),i1e=o(function(t,e){t.split(",").forEach(function(r){let n=a0(r);n!==void 0&&n.classes.push(e)})},"setClass"),LQe=o(function(t,e,r){if(ge().securityLevel!=="loose"||e===void 0)return;let n=[];if(typeof r=="string"){n=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let a=0;a{qt.runFunc(e,...n)})},"setClickFun"),a1e=o(function(t,e){RF.push(function(){let r=document.querySelector(`[id="${t}"]`);r!==null&&r.addEventListener("click",function(){e()})},function(){let r=document.querySelector(`[id="${t}-text"]`);r!==null&&r.addEventListener("click",function(){e()})})},"pushFun"),RQe=o(function(t,e,r){t.split(",").forEach(function(n){LQe(n,e,r)}),i1e(t,"clickable")},"setClickEvent"),NQe=o(function(t){RF.forEach(function(e){e(t)})},"bindFunctions"),s1e={getConfig:o(()=>ge().gantt,"getConfig"),clear:ZKe,setDateFormat:aQe,getDateFormat:fQe,enableInclusiveEndDates:sQe,endDatesAreInclusive:oQe,enableTopAxis:lQe,topAxisEnabled:cQe,setAxisFormat:JKe,getAxisFormat:eQe,setTickInterval:tQe,getTickInterval:rQe,setTodayMarker:nQe,getTodayMarker:iQe,setAccTitle:Rr,getAccTitle:Mr,setDiagramTitle:$r,getDiagramTitle:Pr,setDisplayMode:uQe,getDisplayMode:hQe,setAccDescription:Ir,getAccDescription:Or,addSection:vQe,getSections:xQe,getTasks:bQe,addTask:AQe,findTaskById:a0,addTaskOrg:_Qe,setIncludes:dQe,getIncludes:pQe,setExcludes:mQe,getExcludes:gQe,setClickEvent:RQe,setLink:DQe,getLinks:yQe,bindFunctions:NQe,parseDuration:t1e,isInvalidDate:Jge,setWeekday:TQe,getWeekday:wQe,setWeekend:kQe};o(o1e,"getTaskTags")});var c1e=sa((IF,OF)=>{"use strict";(function(t,e){typeof IF=="object"&&typeof OF<"u"?OF.exports=e():typeof define=="function"&&define.amd?define(e):(t=typeof globalThis<"u"?globalThis:t||self).dayjs_plugin_duration=e()})(IF,(function(){"use strict";var t,e,r=1e3,n=6e4,i=36e5,a=864e5,s=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,l=31536e6,u=2628e6,h=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,f={years:l,months:u,days:a,hours:i,minutes:n,seconds:r,milliseconds:1,weeks:6048e5},d=o(function(S){return S instanceof b},"c"),p=o(function(S,w,k){return new b(S,k,w.$l)},"f"),m=o(function(S){return e.p(S)+"s"},"m"),g=o(function(S){return S<0},"l"),y=o(function(S){return g(S)?Math.ceil(S):Math.floor(S)},"$"),v=o(function(S){return Math.abs(S)},"y"),x=o(function(S,w){return S?g(S)?{negative:!0,format:""+v(S)+w}:{negative:!1,format:""+S+w}:{negative:!1,format:""}},"v"),b=(function(){function S(k,C,A){var L=this;if(this.$d={},this.$l=A,k===void 0&&(this.$ms=0,this.parseFromMilliseconds()),C)return p(k*f[m(C)],this);if(typeof k=="number")return this.$ms=k,this.parseFromMilliseconds(),this;if(typeof k=="object")return Object.keys(k).forEach((function(E){L.$d[m(E)]=k[E]})),this.calMilliseconds(),this;if(typeof k=="string"){var I=k.match(h);if(I){var R=I.slice(2).map((function(E){return E!=null?Number(E):0}));return this.$d.years=R[0],this.$d.months=R[1],this.$d.weeks=R[2],this.$d.days=R[3],this.$d.hours=R[4],this.$d.minutes=R[5],this.$d.seconds=R[6],this.calMilliseconds(),this}}return this}o(S,"l");var w=S.prototype;return w.calMilliseconds=function(){var k=this;this.$ms=Object.keys(this.$d).reduce((function(C,A){return C+(k.$d[A]||0)*f[A]}),0)},w.parseFromMilliseconds=function(){var k=this.$ms;this.$d.years=y(k/l),k%=l,this.$d.months=y(k/u),k%=u,this.$d.days=y(k/a),k%=a,this.$d.hours=y(k/i),k%=i,this.$d.minutes=y(k/n),k%=n,this.$d.seconds=y(k/r),k%=r,this.$d.milliseconds=k},w.toISOString=function(){var k=x(this.$d.years,"Y"),C=x(this.$d.months,"M"),A=+this.$d.days||0;this.$d.weeks&&(A+=7*this.$d.weeks);var L=x(A,"D"),I=x(this.$d.hours,"H"),R=x(this.$d.minutes,"M"),E=this.$d.seconds||0;this.$d.milliseconds&&(E+=this.$d.milliseconds/1e3,E=Math.round(1e3*E)/1e3);var _=x(E,"S"),D=k.negative||C.negative||L.negative||I.negative||R.negative||_.negative,O=I.format||R.format||_.format?"T":"",N=(D?"-":"")+"P"+k.format+C.format+L.format+O+I.format+R.format+_.format;return N==="P"||N==="-P"?"P0D":N},w.toJSON=function(){return this.toISOString()},w.format=function(k){var C=k||"YYYY-MM-DDTHH:mm:ss",A={Y:this.$d.years,YY:e.s(this.$d.years,2,"0"),YYYY:e.s(this.$d.years,4,"0"),M:this.$d.months,MM:e.s(this.$d.months,2,"0"),D:this.$d.days,DD:e.s(this.$d.days,2,"0"),H:this.$d.hours,HH:e.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:e.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:e.s(this.$d.seconds,2,"0"),SSS:e.s(this.$d.milliseconds,3,"0")};return C.replace(s,(function(L,I){return I||String(A[L])}))},w.as=function(k){return this.$ms/f[m(k)]},w.get=function(k){var C=this.$ms,A=m(k);return A==="milliseconds"?C%=1e3:C=A==="weeks"?y(C/f[A]):this.$d[A],C||0},w.add=function(k,C,A){var L;return L=C?k*f[m(C)]:d(k)?k.$ms:p(k,this).$ms,p(this.$ms+L*(A?-1:1),this)},w.subtract=function(k,C){return this.add(k,C,!0)},w.locale=function(k){var C=this.clone();return C.$l=k,C},w.clone=function(){return p(this.$ms,this)},w.humanize=function(k){return t().add(this.$ms,"ms").locale(this.$l).fromNow(!k)},w.valueOf=function(){return this.asMilliseconds()},w.milliseconds=function(){return this.get("milliseconds")},w.asMilliseconds=function(){return this.as("milliseconds")},w.seconds=function(){return this.get("seconds")},w.asSeconds=function(){return this.as("seconds")},w.minutes=function(){return this.get("minutes")},w.asMinutes=function(){return this.as("minutes")},w.hours=function(){return this.get("hours")},w.asHours=function(){return this.as("hours")},w.days=function(){return this.get("days")},w.asDays=function(){return this.as("days")},w.weeks=function(){return this.get("weeks")},w.asWeeks=function(){return this.as("weeks")},w.months=function(){return this.get("months")},w.asMonths=function(){return this.as("months")},w.years=function(){return this.get("years")},w.asYears=function(){return this.as("years")},S})(),T=o(function(S,w,k){return S.add(w.years()*k,"y").add(w.months()*k,"M").add(w.days()*k,"d").add(w.hours()*k,"h").add(w.minutes()*k,"m").add(w.seconds()*k,"s").add(w.milliseconds()*k,"ms")},"p");return function(S,w,k){t=k,e=k().$utils(),k.duration=function(L,I){var R=k.locale();return p(L,{$l:R},I)},k.isDuration=d;var C=w.prototype.add,A=w.prototype.subtract;w.prototype.add=function(L,I){return d(L)?T(this,L,1):C.bind(this)(L,I)},w.prototype.subtract=function(L,I){return d(L)?T(this,L,-1):A.bind(this)(L,I)}}}))});var ry,h1e,MQe,u1e,IQe,ah,PF,OQe,f1e,d1e=M(()=>{"use strict";ry=La(j4(),1),h1e=La(c1e(),1);pt();yr();gr();Xt();Ei();ry.default.extend(h1e.default);MQe=o(function(){X.debug("Something is calling, setConf, remove the call")},"setConf"),u1e={monday:Ih,tuesday:B5,wednesday:F5,thursday:fc,friday:$5,saturday:z5,sunday:wl},IQe=o((t,e)=>{let r=[...t].map(()=>-1/0),n=[...t].sort((a,s)=>a.startTime-s.startTime||a.order-s.order),i=0;for(let a of n)for(let s=0;s=r[s]){r[s]=a.endTime,a.order=s+e,s>i&&(i=s);break}return i},"getMaxIntersections"),PF=1e4,OQe=o(function(t,e,r,n){let i=ge().gantt,a=ge().securityLevel,s;a==="sandbox"&&(s=qe("#i"+e));let l=a==="sandbox"?qe(s.nodes()[0].contentDocument.body):qe("body"),u=a==="sandbox"?s.nodes()[0].contentDocument:document,h=u.getElementById(e);ah=h.parentElement.offsetWidth,ah===void 0&&(ah=1200),i.useWidth!==void 0&&(ah=i.useWidth);let f=n.db.getTasks(),d=[];for(let L of f)d.push(L.type);d=A(d);let p={},m=2*i.topPadding;if(n.db.getDisplayMode()==="compact"||i.displayMode==="compact"){let L={};for(let R of f)L[R.section]===void 0?L[R.section]=[R]:L[R.section].push(R);let I=0;for(let R of Object.keys(L)){let E=IQe(L[R],I)+1;I+=E,m+=E*(i.barHeight+i.barGap),p[R]=E}}else{m+=f.length*(i.barHeight+i.barGap);for(let L of d)p[L]=f.filter(I=>I.type===L).length}h.setAttribute("viewBox","0 0 "+ah+" "+m);let g=l.select(`[id="${e}"]`),y=U5().domain([X3(f,function(L){return L.startTime}),Y3(f,function(L){return L.endTime})]).rangeRound([0,ah-i.leftPadding-i.rightPadding]);function v(L,I){let R=L.startTime,E=I.startTime,_=0;return R>E?_=1:R$.vert===U.vert?0:$.vert?1:-1);let P=[...new Set(L.map($=>$.order))].map($=>L.find(U=>U.order===$));g.append("g").selectAll("rect").data(P).enter().append("rect").attr("x",0).attr("y",function($,U){return U=$.order,U*I+R-2}).attr("width",function(){return O-i.rightPadding/2}).attr("height",I).attr("class",function($){for(let[U,j]of d.entries())if($.type===j)return"section section"+U%i.numberSectionStyles;return"section section0"}).enter();let B=g.append("g").selectAll("rect").data(L).enter(),F=n.db.getLinks();if(B.append("rect").attr("id",function($){return $.id}).attr("rx",3).attr("ry",3).attr("x",function($){return $.milestone?y($.startTime)+E+.5*(y($.endTime)-y($.startTime))-.5*_:y($.startTime)+E}).attr("y",function($,U){return U=$.order,$.vert?i.gridLineStartPadding:U*I+R}).attr("width",function($){return $.milestone?_:$.vert?.08*_:y($.renderEndTime||$.endTime)-y($.startTime)}).attr("height",function($){return $.vert?f.length*(i.barHeight+i.barGap)+i.barHeight*2:_}).attr("transform-origin",function($,U){return U=$.order,(y($.startTime)+E+.5*(y($.endTime)-y($.startTime))).toString()+"px "+(U*I+R+.5*_).toString()+"px"}).attr("class",function($){let U="task",j="";$.classes.length>0&&(j=$.classes.join(" "));let ee=0;for(let[oe,Q]of d.entries())$.type===Q&&(ee=oe%i.numberSectionStyles);let q="";return $.active?$.crit?q+=" activeCrit":q=" active":$.done?$.crit?q=" doneCrit":q=" done":$.crit&&(q+=" crit"),q.length===0&&(q=" task"),$.milestone&&(q=" milestone "+q),$.vert&&(q=" vert "+q),q+=ee,q+=" "+j,U+q}),B.append("text").attr("id",function($){return $.id+"-text"}).text(function($){return $.task}).attr("font-size",i.fontSize).attr("x",function($){let U=y($.startTime),j=y($.renderEndTime||$.endTime);if($.milestone&&(U+=.5*(y($.endTime)-y($.startTime))-.5*_,j=U+_),$.vert)return y($.startTime)+E;let ee=this.getBBox().width;return ee>j-U?j+ee+1.5*i.leftPadding>O?U+E-5:j+E+5:(j-U)/2+U+E}).attr("y",function($,U){return $.vert?i.gridLineStartPadding+f.length*(i.barHeight+i.barGap)+60:(U=$.order,U*I+i.barHeight/2+(i.fontSize/2-2)+R)}).attr("text-height",_).attr("class",function($){let U=y($.startTime),j=y($.endTime);$.milestone&&(j=U+_);let ee=this.getBBox().width,q="";$.classes.length>0&&(q=$.classes.join(" "));let oe=0;for(let[ue,te]of d.entries())$.type===te&&(oe=ue%i.numberSectionStyles);let Q="";return $.active&&($.crit?Q="activeCritText"+oe:Q="activeText"+oe),$.done?$.crit?Q=Q+" doneCritText"+oe:Q=Q+" doneText"+oe:$.crit&&(Q=Q+" critText"+oe),$.milestone&&(Q+=" milestoneText"),$.vert&&(Q+=" vertText"),ee>j-U?j+ee+1.5*i.leftPadding>O?q+" taskTextOutsideLeft taskTextOutside"+oe+" "+Q:q+" taskTextOutsideRight taskTextOutside"+oe+" "+Q+" width-"+ee:q+" taskText taskText"+oe+" "+Q+" width-"+ee}),ge().securityLevel==="sandbox"){let $;$=qe("#i"+e);let U=$.nodes()[0].contentDocument;B.filter(function(j){return F.has(j.id)}).each(function(j){var ee=U.querySelector("#"+j.id),q=U.querySelector("#"+j.id+"-text");let oe=ee.parentNode;var Q=U.createElement("a");Q.setAttribute("xlink:href",F.get(j.id)),Q.setAttribute("target","_top"),oe.appendChild(Q),Q.appendChild(ee),Q.appendChild(q)})}}o(b,"drawRects");function T(L,I,R,E,_,D,O,N){if(O.length===0&&N.length===0)return;let P,B;for(let{startTime:ee,endTime:q}of D)(P===void 0||eeB)&&(B=q);if(!P||!B)return;if((0,ry.default)(B).diff((0,ry.default)(P),"year")>5){X.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}let F=n.db.getDateFormat(),V=[],$=null,U=(0,ry.default)(P);for(;U.valueOf()<=B;)n.db.isInvalidDate(U,F,O,N)?$?$.end=U:$={start:U,end:U}:$&&(V.push($),$=null),U=U.add(1,"d");g.append("g").selectAll("rect").data(V).enter().append("rect").attr("id",ee=>"exclude-"+ee.start.format("YYYY-MM-DD")).attr("x",ee=>y(ee.start.startOf("day"))+R).attr("y",i.gridLineStartPadding).attr("width",ee=>y(ee.end.endOf("day"))-y(ee.start.startOf("day"))).attr("height",_-I-i.gridLineStartPadding).attr("transform-origin",function(ee,q){return(y(ee.start)+R+.5*(y(ee.end)-y(ee.start))).toString()+"px "+(q*L+.5*_).toString()+"px"}).attr("class","exclude-range")}o(T,"drawExcludeDays");function S(L,I,R,E){if(R<=0||L>I)return 1/0;let _=I-L,D=ry.default.duration({[E??"day"]:R}).asMilliseconds();return D<=0?1/0:Math.ceil(_/D)}o(S,"getEstimatedTickCount");function w(L,I,R,E){let _=n.db.getDateFormat(),D=n.db.getAxisFormat(),O;D?O=D:_==="D"?O="%d":O=i.axisFormat??"%Y-%m-%d";let N=QA(y).tickSize(-E+I+i.gridLineStartPadding).tickFormat(Pd(O)),B=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(n.db.getTickInterval()||i.tickInterval);if(B!==null){let F=parseInt(B[1],10);if(isNaN(F)||F<=0)X.warn(`Invalid tick interval value: "${B[1]}". Skipping custom tick interval.`);else{let V=B[2],$=n.db.getWeekday()||i.weekday,U=y.domain(),j=U[0],ee=U[1],q=S(j,ee,F,V);if(q>PF)X.warn(`The tick interval "${F}${V}" would generate ${q} ticks, which exceeds the maximum allowed (${PF}). This may indicate an invalid date or time range. Skipping custom tick interval.`);else switch(V){case"millisecond":N.ticks(uc.every(F));break;case"second":N.ticks(io.every(F));break;case"minute":N.ticks(ku.every(F));break;case"hour":N.ticks(Eu.every(F));break;case"day":N.ticks(Ro.every(F));break;case"week":N.ticks(u1e[$].every(F));break;case"month":N.ticks(Su.every(F));break}}}if(g.append("g").attr("class","grid").attr("transform","translate("+L+", "+(E-50)+")").call(N).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),n.db.topAxisEnabled()||i.topAxis){let F=KA(y).tickSize(-E+I+i.gridLineStartPadding).tickFormat(Pd(O));if(B!==null){let V=parseInt(B[1],10);if(isNaN(V)||V<=0)X.warn(`Invalid tick interval value: "${B[1]}". Skipping custom tick interval.`);else{let $=B[2],U=n.db.getWeekday()||i.weekday,j=y.domain(),ee=j[0],q=j[1];if(S(ee,q,V,$)<=PF)switch($){case"millisecond":F.ticks(uc.every(V));break;case"second":F.ticks(io.every(V));break;case"minute":F.ticks(ku.every(V));break;case"hour":F.ticks(Eu.every(V));break;case"day":F.ticks(Ro.every(V));break;case"week":F.ticks(u1e[U].every(V));break;case"month":F.ticks(Su.every(V));break}}}g.append("g").attr("class","grid").attr("transform","translate("+L+", "+I+")").call(F).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}o(w,"makeGrid");function k(L,I){let R=0,E=Object.keys(p).map(_=>[_,p[_]]);g.append("g").selectAll("text").data(E).enter().append(function(_){let D=_[0].split(tt.lineBreakRegex),O=-(D.length-1)/2,N=u.createElementNS("http://www.w3.org/2000/svg","text");N.setAttribute("dy",O+"em");for(let[P,B]of D.entries()){let F=u.createElementNS("http://www.w3.org/2000/svg","tspan");F.setAttribute("alignment-baseline","central"),F.setAttribute("x","10"),P>0&&F.setAttribute("dy","1em"),F.textContent=B,N.appendChild(F)}return N}).attr("x",10).attr("y",function(_,D){if(D>0)for(let O=0;O{"use strict";PQe=o(t=>` + .mermaid-main-font { + font-family: ${t.fontFamily}; + } + + .exclude-range { + fill: ${t.excludeBkgColor}; + } + + .section { + stroke: none; + opacity: 0.2; + } + + .section0 { + fill: ${t.sectionBkgColor}; + } + + .section2 { + fill: ${t.sectionBkgColor2}; + } + + .section1, + .section3 { + fill: ${t.altSectionBkgColor}; + opacity: 0.2; + } + + .sectionTitle0 { + fill: ${t.titleColor}; + } + + .sectionTitle1 { + fill: ${t.titleColor}; + } + + .sectionTitle2 { + fill: ${t.titleColor}; + } + + .sectionTitle3 { + fill: ${t.titleColor}; + } + + .sectionTitle { + text-anchor: start; + font-family: ${t.fontFamily}; + } + + + /* Grid and axis */ + + .grid .tick { + stroke: ${t.gridColor}; + opacity: 0.8; + shape-rendering: crispEdges; + } + + .grid .tick text { + font-family: ${t.fontFamily}; + fill: ${t.textColor}; + } + + .grid path { + stroke-width: 0; + } + + + /* Today line */ + + .today { + fill: none; + stroke: ${t.todayLineColor}; + stroke-width: 2px; + } + + + /* Task styling */ + + /* Default task */ + + .task { + stroke-width: 2; + } + + .taskText { + text-anchor: middle; + font-family: ${t.fontFamily}; + } + + .taskTextOutsideRight { + fill: ${t.taskTextDarkColor}; + text-anchor: start; + font-family: ${t.fontFamily}; + } + + .taskTextOutsideLeft { + fill: ${t.taskTextDarkColor}; + text-anchor: end; + } + + + /* Special case clickable */ + + .task.clickable { + cursor: pointer; + } + + .taskText.clickable { + cursor: pointer; + fill: ${t.taskTextClickableColor} !important; + font-weight: bold; + } + + .taskTextOutsideLeft.clickable { + cursor: pointer; + fill: ${t.taskTextClickableColor} !important; + font-weight: bold; + } + + .taskTextOutsideRight.clickable { + cursor: pointer; + fill: ${t.taskTextClickableColor} !important; + font-weight: bold; + } + + + /* Specific task settings for the sections*/ + + .taskText0, + .taskText1, + .taskText2, + .taskText3 { + fill: ${t.taskTextColor}; + } + + .task0, + .task1, + .task2, + .task3 { + fill: ${t.taskBkgColor}; + stroke: ${t.taskBorderColor}; + } + + .taskTextOutside0, + .taskTextOutside2 + { + fill: ${t.taskTextOutsideColor}; + } + + .taskTextOutside1, + .taskTextOutside3 { + fill: ${t.taskTextOutsideColor}; + } + + + /* Active task */ + + .active0, + .active1, + .active2, + .active3 { + fill: ${t.activeTaskBkgColor}; + stroke: ${t.activeTaskBorderColor}; + } + + .activeText0, + .activeText1, + .activeText2, + .activeText3 { + fill: ${t.taskTextDarkColor} !important; + } + + + /* Completed task */ + + .done0, + .done1, + .done2, + .done3 { + stroke: ${t.doneTaskBorderColor}; + fill: ${t.doneTaskBkgColor}; + stroke-width: 2; + } + + .doneText0, + .doneText1, + .doneText2, + .doneText3 { + fill: ${t.taskTextDarkColor} !important; + } + + + /* Tasks on the critical line */ + + .crit0, + .crit1, + .crit2, + .crit3 { + stroke: ${t.critBorderColor}; + fill: ${t.critBkgColor}; + stroke-width: 2; + } + + .activeCrit0, + .activeCrit1, + .activeCrit2, + .activeCrit3 { + stroke: ${t.critBorderColor}; + fill: ${t.activeTaskBkgColor}; + stroke-width: 2; + } + + .doneCrit0, + .doneCrit1, + .doneCrit2, + .doneCrit3 { + stroke: ${t.critBorderColor}; + fill: ${t.doneTaskBkgColor}; + stroke-width: 2; + cursor: pointer; + shape-rendering: crispEdges; + } + + .milestone { + transform: rotate(45deg) scale(0.8,0.8); + } + + .milestoneText { + font-style: italic; + } + .doneCritText0, + .doneCritText1, + .doneCritText2, + .doneCritText3 { + fill: ${t.taskTextDarkColor} !important; + } + + .vert { + stroke: ${t.vertLineColor}; + } + + .vertText { + font-size: 15px; + text-anchor: middle; + fill: ${t.vertLineColor} !important; + } + + .activeCritText0, + .activeCritText1, + .activeCritText2, + .activeCritText3 { + fill: ${t.taskTextDarkColor} !important; + } + + .titleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.titleColor||t.textColor}; + font-family: ${t.fontFamily}; + } +`,"getStyles"),p1e=PQe});var g1e={};dr(g1e,{diagram:()=>BQe});var BQe,y1e=M(()=>{"use strict";Vge();l1e();d1e();m1e();BQe={parser:Gge,db:s1e,renderer:f1e,styles:p1e}});var b1e,T1e=M(()=>{"use strict";Uf();pt();b1e={parse:o(async t=>{let e=await bs("info",t);X.debug(e)},"parse")}});var y4,BF=M(()=>{y4={name:"mermaid",version:"11.12.2",description:"Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.",type:"module",module:"./dist/mermaid.core.mjs",types:"./dist/mermaid.d.ts",exports:{".":{types:"./dist/mermaid.d.ts",import:"./dist/mermaid.core.mjs",default:"./dist/mermaid.core.mjs"},"./*":"./*"},keywords:["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph","mindmap","packet diagram","c4 diagram","er diagram","pie chart","pie diagram","quadrant chart","requirement diagram","graph"],scripts:{clean:"rimraf dist",dev:"pnpm -w dev","docs:code":"typedoc src/defaultConfig.ts src/config.ts src/mermaid.ts && prettier --write ./src/docs/config/setup","docs:build":"rimraf ../../docs && pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts","docs:verify":"pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts --verify","docs:pre:vitepress":"pnpm --filter ./src/docs prefetch && rimraf src/vitepress && pnpm docs:code && tsx scripts/docs.cli.mts --vitepress && pnpm --filter ./src/vitepress install --no-frozen-lockfile --ignore-scripts","docs:build:vitepress":"pnpm docs:pre:vitepress && (cd src/vitepress && pnpm run build) && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing","docs:dev":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:dev:docker":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev:docker" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:serve":"pnpm docs:build:vitepress && vitepress serve src/vitepress","docs:spellcheck":'cspell "src/docs/**/*.md"',"docs:release-version":"tsx scripts/update-release-version.mts","docs:verify-version":"tsx scripts/update-release-version.mts --verify","types:build-config":"tsx scripts/create-types-from-json-schema.mts","types:verify-config":"tsx scripts/create-types-from-json-schema.mts --verify",checkCircle:"npx madge --circular ./src",prepublishOnly:"pnpm docs:verify-version"},repository:{type:"git",url:"https://github.com/mermaid-js/mermaid"},author:"Knut Sveidqvist",license:"MIT",standard:{ignore:["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],globals:["page"]},dependencies:{"@braintree/sanitize-url":"^7.1.1","@iconify/utils":"^3.0.1","@mermaid-js/parser":"workspace:^","@types/d3":"^7.4.3",cytoscape:"^3.29.3","cytoscape-cose-bilkent":"^4.1.0","cytoscape-fcose":"^2.2.0",d3:"^7.9.0","d3-sankey":"^0.12.3","dagre-d3-es":"7.0.13",dayjs:"^1.11.18",dompurify:"^3.2.5",katex:"^0.16.22",khroma:"^2.1.0","lodash-es":"^4.17.21",marked:"^16.2.1",roughjs:"^4.6.6",stylis:"^4.3.6","ts-dedent":"^2.2.0",uuid:"^11.1.0"},devDependencies:{"@adobe/jsonschema2md":"^8.0.5","@iconify/types":"^2.0.0","@types/cytoscape":"^3.21.9","@types/cytoscape-fcose":"^2.2.4","@types/d3-sankey":"^0.12.4","@types/d3-scale":"^4.0.9","@types/d3-scale-chromatic":"^3.1.0","@types/d3-selection":"^3.0.11","@types/d3-shape":"^3.1.7","@types/jsdom":"^21.1.7","@types/katex":"^0.16.7","@types/lodash-es":"^4.17.12","@types/micromatch":"^4.0.9","@types/stylis":"^4.2.7","@types/uuid":"^10.0.0",ajv:"^8.17.1",canvas:"^3.1.2",chokidar:"3.6.0",concurrently:"^9.1.2","csstree-validator":"^4.0.1",globby:"^14.1.0",jison:"^0.4.18","js-base64":"^3.7.8",jsdom:"^26.1.0","json-schema-to-typescript":"^15.0.4",micromatch:"^4.0.8","path-browserify":"^1.0.1",prettier:"^3.5.3",remark:"^15.0.1","remark-frontmatter":"^5.0.0","remark-gfm":"^4.0.1",rimraf:"^6.0.1","start-server-and-test":"^2.0.13","type-fest":"^4.35.0",typedoc:"^0.28.12","typedoc-plugin-markdown":"^4.8.1",typescript:"~5.7.3","unist-util-flatmap":"^1.0.0","unist-util-visit":"^5.0.0",vitepress:"^1.6.4","vitepress-plugin-search":"1.0.4-alpha.22"},files:["dist/","README.md"],publishConfig:{access:"public"}}});var VQe,UQe,w1e,k1e=M(()=>{"use strict";BF();VQe={version:y4.version+""},UQe=o(()=>VQe.version,"getVersion"),w1e={getVersion:UQe}});var aa,tu=M(()=>{"use strict";yr();Xt();aa=o(t=>{let{securityLevel:e}=ge(),r=qe("body");if(e==="sandbox"){let a=qe(`#i${t}`).node()?.contentDocument??document;r=qe(a.body)}return r.select(`#${t}`)},"selectSvgElement")});var HQe,E1e,S1e=M(()=>{"use strict";pt();tu();Ei();HQe=o((t,e,r)=>{X.debug(`rendering info diagram +`+t);let n=aa(e);mn(n,100,400,!0),n.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${r}`)},"draw"),E1e={draw:HQe}});var C1e={};dr(C1e,{diagram:()=>qQe});var qQe,A1e=M(()=>{"use strict";T1e();k1e();S1e();qQe={parser:b1e,db:w1e,renderer:E1e}});var L1e,FF,z6,$F,XQe,jQe,KQe,QQe,ZQe,JQe,eZe,G6,zF=M(()=>{"use strict";pt();ci();Ra();L1e=ur.pie,FF={sections:new Map,showData:!1,config:L1e},z6=FF.sections,$F=FF.showData,XQe=structuredClone(L1e),jQe=o(()=>structuredClone(XQe),"getConfig"),KQe=o(()=>{z6=new Map,$F=FF.showData,Sr()},"clear"),QQe=o(({label:t,value:e})=>{if(e<0)throw new Error(`"${t}" has invalid value: ${e}. Negative values are not allowed in pie charts. All slice values must be >= 0.`);z6.has(t)||(z6.set(t,e),X.debug(`added new section: ${t}, with value: ${e}`))},"addSection"),ZQe=o(()=>z6,"getSections"),JQe=o(t=>{$F=t},"setShowData"),eZe=o(()=>$F,"getShowData"),G6={getConfig:jQe,clear:KQe,setDiagramTitle:$r,getDiagramTitle:Pr,setAccTitle:Rr,getAccTitle:Mr,setAccDescription:Ir,getAccDescription:Or,addSection:QQe,getSections:ZQe,setShowData:JQe,getShowData:eZe}});var tZe,R1e,N1e=M(()=>{"use strict";Uf();pt();r0();zF();tZe=o((t,e)=>{nl(t,e),e.setShowData(t.showData),t.sections.map(e.addSection)},"populateDb"),R1e={parse:o(async t=>{let e=await bs("pie",t);X.debug(e),tZe(e,G6)},"parse")}});var rZe,M1e,I1e=M(()=>{"use strict";rZe=o(t=>` + .pieCircle{ + stroke: ${t.pieStrokeColor}; + stroke-width : ${t.pieStrokeWidth}; + opacity : ${t.pieOpacity}; + } + .pieOuterCircle{ + stroke: ${t.pieOuterStrokeColor}; + stroke-width: ${t.pieOuterStrokeWidth}; + fill: none; + } + .pieTitleText { + text-anchor: middle; + font-size: ${t.pieTitleTextSize}; + fill: ${t.pieTitleTextColor}; + font-family: ${t.fontFamily}; + } + .slice { + font-family: ${t.fontFamily}; + fill: ${t.pieSectionTextColor}; + font-size:${t.pieSectionTextSize}; + // fill: white; + } + .legend text { + fill: ${t.pieLegendTextColor}; + font-family: ${t.fontFamily}; + font-size: ${t.pieLegendTextSize}; + } +`,"getStyles"),M1e=rZe});var nZe,iZe,O1e,P1e=M(()=>{"use strict";yr();Xt();pt();tu();Ei();tr();nZe=o(t=>{let e=[...t.values()].reduce((i,a)=>i+a,0),r=[...t.entries()].map(([i,a])=>({label:i,value:a})).filter(i=>i.value/e*100>=1).sort((i,a)=>a.value-i.value);return j5().value(i=>i.value)(r)},"createPieArcs"),iZe=o((t,e,r,n)=>{X.debug(`rendering pie chart +`+t);let i=n.db,a=ge(),s=Vn(i.getConfig(),a.pie),l=40,u=18,h=4,f=450,d=f,p=aa(e),m=p.append("g");m.attr("transform","translate("+d/2+","+f/2+")");let{themeVariables:g}=a,[y]=vc(g.pieOuterStrokeWidth);y??=2;let v=s.textPosition,x=Math.min(d,f)/2-l,b=Sl().innerRadius(0).outerRadius(x),T=Sl().innerRadius(x*v).outerRadius(x*v);m.append("circle").attr("cx",0).attr("cy",0).attr("r",x+y/2).attr("class","pieOuterCircle");let S=i.getSections(),w=nZe(S),k=[g.pie1,g.pie2,g.pie3,g.pie4,g.pie5,g.pie6,g.pie7,g.pie8,g.pie9,g.pie10,g.pie11,g.pie12],C=0;S.forEach(D=>{C+=D});let A=w.filter(D=>(D.data.value/C*100).toFixed(0)!=="0"),L=no(k);m.selectAll("mySlices").data(A).enter().append("path").attr("d",b).attr("fill",D=>L(D.data.label)).attr("class","pieCircle"),m.selectAll("mySlices").data(A).enter().append("text").text(D=>(D.data.value/C*100).toFixed(0)+"%").attr("transform",D=>"translate("+T.centroid(D)+")").style("text-anchor","middle").attr("class","slice"),m.append("text").text(i.getDiagramTitle()).attr("x",0).attr("y",-(f-50)/2).attr("class","pieTitleText");let I=[...S.entries()].map(([D,O])=>({label:D,value:O})),R=m.selectAll(".legend").data(I).enter().append("g").attr("class","legend").attr("transform",(D,O)=>{let N=u+h,P=N*I.length/2,B=12*u,F=O*N-P;return"translate("+B+","+F+")"});R.append("rect").attr("width",u).attr("height",u).style("fill",D=>L(D.label)).style("stroke",D=>L(D.label)),R.append("text").attr("x",u+h).attr("y",u-h).text(D=>i.getShowData()?`${D.label} [${D.value}]`:D.label);let E=Math.max(...R.selectAll("text").nodes().map(D=>D?.getBoundingClientRect().width??0)),_=d+l+u+h+E;p.attr("viewBox",`0 0 ${_} ${f}`),mn(p,f,_,s.useMaxWidth)},"draw"),O1e={draw:iZe}});var B1e={};dr(B1e,{diagram:()=>aZe});var aZe,F1e=M(()=>{"use strict";N1e();zF();I1e();P1e();aZe={parser:R1e,db:G6,renderer:O1e,styles:M1e}});var GF,z1e,G1e=M(()=>{"use strict";GF=(function(){var t=o(function(he,z,se,le){for(se=se||{},le=he.length;le--;se[he[le]]=z);return se},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[1,7],s=[1,4,5,10,12,13,14,18,25,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],l=[1,4,5,10,12,13,14,18,25,28,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],u=[55,56,57],h=[2,36],f=[1,37],d=[1,36],p=[1,38],m=[1,35],g=[1,43],y=[1,41],v=[1,14],x=[1,23],b=[1,18],T=[1,19],S=[1,20],w=[1,21],k=[1,22],C=[1,24],A=[1,25],L=[1,26],I=[1,27],R=[1,28],E=[1,29],_=[1,32],D=[1,33],O=[1,34],N=[1,39],P=[1,40],B=[1,42],F=[1,44],V=[1,62],$=[1,61],U=[4,5,8,10,12,13,14,18,44,47,49,55,56,57,63,64,65,66,67],j=[1,65],ee=[1,66],q=[1,67],oe=[1,68],Q=[1,69],ue=[1,70],te=[1,71],re=[1,72],J=[1,73],K=[1,74],ae=[1,75],Z=[1,76],de=[4,5,6,7,8,9,10,11,12,13,14,15,18],ne=[1,90],Te=[1,91],W=[1,92],Ve=[1,99],pe=[1,93],Be=[1,96],Ye=[1,94],He=[1,95],Le=[1,97],Ie=[1,98],Ne=[1,102],Ce=[10,55,56,57],Fe=[4,5,6,8,10,11,13,17,18,19,20,55,56,57],fe={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,idStringToken:3,ALPHA:4,NUM:5,NODE_STRING:6,DOWN:7,MINUS:8,DEFAULT:9,COMMA:10,COLON:11,AMP:12,BRKT:13,MULT:14,UNICODE_TEXT:15,styleComponent:16,UNIT:17,SPACE:18,STYLE:19,PCT:20,idString:21,style:22,stylesOpt:23,classDefStatement:24,CLASSDEF:25,start:26,eol:27,QUADRANT:28,document:29,line:30,statement:31,axisDetails:32,quadrantDetails:33,points:34,title:35,title_value:36,acc_title:37,acc_title_value:38,acc_descr:39,acc_descr_value:40,acc_descr_multiline_value:41,section:42,text:43,point_start:44,point_x:45,point_y:46,class_name:47,"X-AXIS":48,"AXIS-TEXT-DELIMITER":49,"Y-AXIS":50,QUADRANT_1:51,QUADRANT_2:52,QUADRANT_3:53,QUADRANT_4:54,NEWLINE:55,SEMI:56,EOF:57,alphaNumToken:58,textNoTagsToken:59,STR:60,MD_STR:61,alphaNum:62,PUNCTUATION:63,PLUS:64,EQUALS:65,DOT:66,UNDERSCORE:67,$accept:0,$end:1},terminals_:{2:"error",4:"ALPHA",5:"NUM",6:"NODE_STRING",7:"DOWN",8:"MINUS",9:"DEFAULT",10:"COMMA",11:"COLON",12:"AMP",13:"BRKT",14:"MULT",15:"UNICODE_TEXT",17:"UNIT",18:"SPACE",19:"STYLE",20:"PCT",25:"CLASSDEF",28:"QUADRANT",35:"title",36:"title_value",37:"acc_title",38:"acc_title_value",39:"acc_descr",40:"acc_descr_value",41:"acc_descr_multiline_value",42:"section",44:"point_start",45:"point_x",46:"point_y",47:"class_name",48:"X-AXIS",49:"AXIS-TEXT-DELIMITER",50:"Y-AXIS",51:"QUADRANT_1",52:"QUADRANT_2",53:"QUADRANT_3",54:"QUADRANT_4",55:"NEWLINE",56:"SEMI",57:"EOF",60:"STR",61:"MD_STR",63:"PUNCTUATION",64:"PLUS",65:"EQUALS",66:"DOT",67:"UNDERSCORE"},productions_:[0,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[21,1],[21,2],[22,1],[22,2],[23,1],[23,3],[24,5],[26,2],[26,2],[26,2],[29,0],[29,2],[30,2],[31,0],[31,1],[31,2],[31,1],[31,1],[31,1],[31,2],[31,2],[31,2],[31,1],[31,1],[34,4],[34,5],[34,5],[34,6],[32,4],[32,3],[32,2],[32,4],[32,3],[32,2],[33,2],[33,2],[33,2],[33,2],[27,1],[27,1],[27,1],[43,1],[43,2],[43,1],[43,1],[62,1],[62,2],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[59,1]],performAction:o(function(z,se,le,ke,ve,ye,Re){var _e=ye.length-1;switch(ve){case 23:this.$=ye[_e];break;case 24:this.$=ye[_e-1]+""+ye[_e];break;case 26:this.$=ye[_e-1]+ye[_e];break;case 27:this.$=[ye[_e].trim()];break;case 28:ye[_e-2].push(ye[_e].trim()),this.$=ye[_e-2];break;case 29:this.$=ye[_e-4],ke.addClass(ye[_e-2],ye[_e]);break;case 37:this.$=[];break;case 42:this.$=ye[_e].trim(),ke.setDiagramTitle(this.$);break;case 43:this.$=ye[_e].trim(),ke.setAccTitle(this.$);break;case 44:case 45:this.$=ye[_e].trim(),ke.setAccDescription(this.$);break;case 46:ke.addSection(ye[_e].substr(8)),this.$=ye[_e].substr(8);break;case 47:ke.addPoint(ye[_e-3],"",ye[_e-1],ye[_e],[]);break;case 48:ke.addPoint(ye[_e-4],ye[_e-3],ye[_e-1],ye[_e],[]);break;case 49:ke.addPoint(ye[_e-4],"",ye[_e-2],ye[_e-1],ye[_e]);break;case 50:ke.addPoint(ye[_e-5],ye[_e-4],ye[_e-2],ye[_e-1],ye[_e]);break;case 51:ke.setXAxisLeftText(ye[_e-2]),ke.setXAxisRightText(ye[_e]);break;case 52:ye[_e-1].text+=" \u27F6 ",ke.setXAxisLeftText(ye[_e-1]);break;case 53:ke.setXAxisLeftText(ye[_e]);break;case 54:ke.setYAxisBottomText(ye[_e-2]),ke.setYAxisTopText(ye[_e]);break;case 55:ye[_e-1].text+=" \u27F6 ",ke.setYAxisBottomText(ye[_e-1]);break;case 56:ke.setYAxisBottomText(ye[_e]);break;case 57:ke.setQuadrant1Text(ye[_e]);break;case 58:ke.setQuadrant2Text(ye[_e]);break;case 59:ke.setQuadrant3Text(ye[_e]);break;case 60:ke.setQuadrant4Text(ye[_e]);break;case 64:this.$={text:ye[_e],type:"text"};break;case 65:this.$={text:ye[_e-1].text+""+ye[_e],type:ye[_e-1].type};break;case 66:this.$={text:ye[_e],type:"text"};break;case 67:this.$={text:ye[_e],type:"markdown"};break;case 68:this.$=ye[_e];break;case 69:this.$=ye[_e-1]+""+ye[_e];break}},"anonymous"),table:[{18:e,26:1,27:2,28:r,55:n,56:i,57:a},{1:[3]},{18:e,26:8,27:2,28:r,55:n,56:i,57:a},{18:e,26:9,27:2,28:r,55:n,56:i,57:a},t(s,[2,33],{29:10}),t(l,[2,61]),t(l,[2,62]),t(l,[2,63]),{1:[2,30]},{1:[2,31]},t(u,h,{30:11,31:12,24:13,32:15,33:16,34:17,43:30,58:31,1:[2,32],4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:T,39:S,41:w,42:k,48:C,50:A,51:L,52:I,53:R,54:E,60:_,61:D,63:O,64:N,65:P,66:B,67:F}),t(s,[2,34]),{27:45,55:n,56:i,57:a},t(u,[2,37]),t(u,h,{24:13,32:15,33:16,34:17,43:30,58:31,31:46,4:f,5:d,10:p,12:m,13:g,14:y,18:v,25:x,35:b,37:T,39:S,41:w,42:k,48:C,50:A,51:L,52:I,53:R,54:E,60:_,61:D,63:O,64:N,65:P,66:B,67:F}),t(u,[2,39]),t(u,[2,40]),t(u,[2,41]),{36:[1,47]},{38:[1,48]},{40:[1,49]},t(u,[2,45]),t(u,[2,46]),{18:[1,50]},{4:f,5:d,10:p,12:m,13:g,14:y,43:51,58:31,60:_,61:D,63:O,64:N,65:P,66:B,67:F},{4:f,5:d,10:p,12:m,13:g,14:y,43:52,58:31,60:_,61:D,63:O,64:N,65:P,66:B,67:F},{4:f,5:d,10:p,12:m,13:g,14:y,43:53,58:31,60:_,61:D,63:O,64:N,65:P,66:B,67:F},{4:f,5:d,10:p,12:m,13:g,14:y,43:54,58:31,60:_,61:D,63:O,64:N,65:P,66:B,67:F},{4:f,5:d,10:p,12:m,13:g,14:y,43:55,58:31,60:_,61:D,63:O,64:N,65:P,66:B,67:F},{4:f,5:d,10:p,12:m,13:g,14:y,43:56,58:31,60:_,61:D,63:O,64:N,65:P,66:B,67:F},{4:f,5:d,8:V,10:p,12:m,13:g,14:y,18:$,44:[1,57],47:[1,58],58:60,59:59,63:O,64:N,65:P,66:B,67:F},t(U,[2,64]),t(U,[2,66]),t(U,[2,67]),t(U,[2,70]),t(U,[2,71]),t(U,[2,72]),t(U,[2,73]),t(U,[2,74]),t(U,[2,75]),t(U,[2,76]),t(U,[2,77]),t(U,[2,78]),t(U,[2,79]),t(U,[2,80]),t(s,[2,35]),t(u,[2,38]),t(u,[2,42]),t(u,[2,43]),t(u,[2,44]),{3:64,4:j,5:ee,6:q,7:oe,8:Q,9:ue,10:te,11:re,12:J,13:K,14:ae,15:Z,21:63},t(u,[2,53],{59:59,58:60,4:f,5:d,8:V,10:p,12:m,13:g,14:y,18:$,49:[1,77],63:O,64:N,65:P,66:B,67:F}),t(u,[2,56],{59:59,58:60,4:f,5:d,8:V,10:p,12:m,13:g,14:y,18:$,49:[1,78],63:O,64:N,65:P,66:B,67:F}),t(u,[2,57],{59:59,58:60,4:f,5:d,8:V,10:p,12:m,13:g,14:y,18:$,63:O,64:N,65:P,66:B,67:F}),t(u,[2,58],{59:59,58:60,4:f,5:d,8:V,10:p,12:m,13:g,14:y,18:$,63:O,64:N,65:P,66:B,67:F}),t(u,[2,59],{59:59,58:60,4:f,5:d,8:V,10:p,12:m,13:g,14:y,18:$,63:O,64:N,65:P,66:B,67:F}),t(u,[2,60],{59:59,58:60,4:f,5:d,8:V,10:p,12:m,13:g,14:y,18:$,63:O,64:N,65:P,66:B,67:F}),{45:[1,79]},{44:[1,80]},t(U,[2,65]),t(U,[2,81]),t(U,[2,82]),t(U,[2,83]),{3:82,4:j,5:ee,6:q,7:oe,8:Q,9:ue,10:te,11:re,12:J,13:K,14:ae,15:Z,18:[1,81]},t(de,[2,23]),t(de,[2,1]),t(de,[2,2]),t(de,[2,3]),t(de,[2,4]),t(de,[2,5]),t(de,[2,6]),t(de,[2,7]),t(de,[2,8]),t(de,[2,9]),t(de,[2,10]),t(de,[2,11]),t(de,[2,12]),t(u,[2,52],{58:31,43:83,4:f,5:d,10:p,12:m,13:g,14:y,60:_,61:D,63:O,64:N,65:P,66:B,67:F}),t(u,[2,55],{58:31,43:84,4:f,5:d,10:p,12:m,13:g,14:y,60:_,61:D,63:O,64:N,65:P,66:B,67:F}),{46:[1,85]},{45:[1,86]},{4:ne,5:Te,6:W,8:Ve,11:pe,13:Be,16:89,17:Ye,18:He,19:Le,20:Ie,22:88,23:87},t(de,[2,24]),t(u,[2,51],{59:59,58:60,4:f,5:d,8:V,10:p,12:m,13:g,14:y,18:$,63:O,64:N,65:P,66:B,67:F}),t(u,[2,54],{59:59,58:60,4:f,5:d,8:V,10:p,12:m,13:g,14:y,18:$,63:O,64:N,65:P,66:B,67:F}),t(u,[2,47],{22:88,16:89,23:100,4:ne,5:Te,6:W,8:Ve,11:pe,13:Be,17:Ye,18:He,19:Le,20:Ie}),{46:[1,101]},t(u,[2,29],{10:Ne}),t(Ce,[2,27],{16:103,4:ne,5:Te,6:W,8:Ve,11:pe,13:Be,17:Ye,18:He,19:Le,20:Ie}),t(Fe,[2,25]),t(Fe,[2,13]),t(Fe,[2,14]),t(Fe,[2,15]),t(Fe,[2,16]),t(Fe,[2,17]),t(Fe,[2,18]),t(Fe,[2,19]),t(Fe,[2,20]),t(Fe,[2,21]),t(Fe,[2,22]),t(u,[2,49],{10:Ne}),t(u,[2,48],{22:88,16:89,23:104,4:ne,5:Te,6:W,8:Ve,11:pe,13:Be,17:Ye,18:He,19:Le,20:Ie}),{4:ne,5:Te,6:W,8:Ve,11:pe,13:Be,16:89,17:Ye,18:He,19:Le,20:Ie,22:105},t(Fe,[2,26]),t(u,[2,50],{10:Ne}),t(Ce,[2,28],{16:103,4:ne,5:Te,6:W,8:Ve,11:pe,13:Be,17:Ye,18:He,19:Le,20:Ie})],defaultActions:{8:[2,30],9:[2,31]},parseError:o(function(z,se){if(se.recoverable)this.trace(z);else{var le=new Error(z);throw le.hash=se,le}},"parseError"),parse:o(function(z){var se=this,le=[0],ke=[],ve=[null],ye=[],Re=this.table,_e="",ze=0,Ke=0,xt=0,We=2,Oe=1,et=ye.slice.call(arguments,1),Ue=Object.create(this.lexer),lt={yy:{}};for(var Gt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Gt)&&(lt.yy[Gt]=this.yy[Gt]);Ue.setInput(z,lt.yy),lt.yy.lexer=Ue,lt.yy.parser=this,typeof Ue.yylloc>"u"&&(Ue.yylloc={});var vt=Ue.yylloc;ye.push(vt);var Lt=Ue.options&&Ue.options.ranges;typeof lt.yy.parseError=="function"?this.parseError=lt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function dt(Se){le.length=le.length-2*Se,ve.length=ve.length-Se,ye.length=ye.length-Se}o(dt,"popStack");function nt(){var Se;return Se=ke.pop()||Ue.lex()||Oe,typeof Se!="number"&&(Se instanceof Array&&(ke=Se,Se=ke.pop()),Se=se.symbols_[Se]||Se),Se}o(nt,"lex");for(var bt,wt,yt,ft,Ur,_t,bn={},Br,cr,ar,_r;;){if(yt=le[le.length-1],this.defaultActions[yt]?ft=this.defaultActions[yt]:((bt===null||typeof bt>"u")&&(bt=nt()),ft=Re[yt]&&Re[yt][bt]),typeof ft>"u"||!ft.length||!ft[0]){var Ct="";_r=[];for(Br in Re[yt])this.terminals_[Br]&&Br>We&&_r.push("'"+this.terminals_[Br]+"'");Ue.showPosition?Ct="Parse error on line "+(ze+1)+`: +`+Ue.showPosition()+` +Expecting `+_r.join(", ")+", got '"+(this.terminals_[bt]||bt)+"'":Ct="Parse error on line "+(ze+1)+": Unexpected "+(bt==Oe?"end of input":"'"+(this.terminals_[bt]||bt)+"'"),this.parseError(Ct,{text:Ue.match,token:this.terminals_[bt]||bt,line:Ue.yylineno,loc:vt,expected:_r})}if(ft[0]instanceof Array&&ft.length>1)throw new Error("Parse Error: multiple actions possible at state: "+yt+", token: "+bt);switch(ft[0]){case 1:le.push(bt),ve.push(Ue.yytext),ye.push(Ue.yylloc),le.push(ft[1]),bt=null,wt?(bt=wt,wt=null):(Ke=Ue.yyleng,_e=Ue.yytext,ze=Ue.yylineno,vt=Ue.yylloc,xt>0&&xt--);break;case 2:if(cr=this.productions_[ft[1]][1],bn.$=ve[ve.length-cr],bn._$={first_line:ye[ye.length-(cr||1)].first_line,last_line:ye[ye.length-1].last_line,first_column:ye[ye.length-(cr||1)].first_column,last_column:ye[ye.length-1].last_column},Lt&&(bn._$.range=[ye[ye.length-(cr||1)].range[0],ye[ye.length-1].range[1]]),_t=this.performAction.apply(bn,[_e,Ke,ze,lt.yy,ft[1],ve,ye].concat(et)),typeof _t<"u")return _t;cr&&(le=le.slice(0,-1*cr*2),ve=ve.slice(0,-1*cr),ye=ye.slice(0,-1*cr)),le.push(this.productions_[ft[1]][0]),ve.push(bn.$),ye.push(bn._$),ar=Re[le[le.length-2]][le[le.length-1]],le.push(ar);break;case 3:return!0}}return!0},"parse")},xe=(function(){var he={EOF:1,parseError:o(function(se,le){if(this.yy.parser)this.yy.parser.parseError(se,le);else throw new Error(se)},"parseError"),setInput:o(function(z,se){return this.yy=se||this.yy||{},this._input=z,this._more=this._backtrack=this.done=!1,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},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var z=this._input[0];this.yytext+=z,this.yyleng++,this.offset++,this.match+=z,this.matched+=z;var se=z.match(/(?:\r\n?|\n).*/g);return se?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),z},"input"),unput:o(function(z){var se=z.length,le=z.split(/(?:\r\n?|\n)/g);this._input=z+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-se),this.offset-=se;var ke=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),le.length-1&&(this.yylineno-=le.length-1);var ve=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:le?(le.length===ke.length?this.yylloc.first_column:0)+ke[ke.length-le.length].length-le[0].length:this.yylloc.first_column-se},this.options.ranges&&(this.yylloc.range=[ve[0],ve[0]+this.yyleng-se]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(z){this.unput(this.match.slice(z))},"less"),pastInput:o(function(){var z=this.matched.substr(0,this.matched.length-this.match.length);return(z.length>20?"...":"")+z.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var z=this.match;return z.length<20&&(z+=this._input.substr(0,20-z.length)),(z.substr(0,20)+(z.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var z=this.pastInput(),se=new Array(z.length+1).join("-");return z+this.upcomingInput()+` +`+se+"^"},"showPosition"),test_match:o(function(z,se){var le,ke,ve;if(this.options.backtrack_lexer&&(ve={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},this.options.ranges&&(ve.yylloc.range=this.yylloc.range.slice(0))),ke=z[0].match(/(?:\r\n?|\n).*/g),ke&&(this.yylineno+=ke.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ke?ke[ke.length-1].length-ke[ke.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+z[0].length},this.yytext+=z[0],this.match+=z[0],this.matches=z,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(z[0].length),this.matched+=z[0],le=this.performAction.call(this,this.yy,this,se,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),le)return le;if(this._backtrack){for(var ye in ve)this[ye]=ve[ye];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var z,se,le,ke;this._more||(this.yytext="",this.match="");for(var ve=this._currentRules(),ye=0;yese[0].length)){if(se=le,ke=ye,this.options.backtrack_lexer){if(z=this.test_match(le,ve[ye]),z!==!1)return z;if(this._backtrack){se=!1;continue}else return!1}else if(!this.options.flex)break}return se?(z=this.test_match(se,ve[ke]),z!==!1?z:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var se=this.next();return se||this.lex()},"lex"),begin:o(function(se){this.conditionStack.push(se)},"begin"),popState:o(function(){var se=this.conditionStack.length-1;return se>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(se){return se=this.conditionStack.length-1-Math.abs(se||0),se>=0?this.conditionStack[se]:"INITIAL"},"topState"),pushState:o(function(se){this.begin(se)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(se,le,ke,ve){var ye=ve;switch(ke){case 0:break;case 1:break;case 2:return 55;case 3:break;case 4:return this.begin("title"),35;break;case 5:return this.popState(),"title_value";break;case 6:return this.begin("acc_title"),37;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),39;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 48;case 14:return 50;case 15:return 49;case 16:return 51;case 17:return 52;case 18:return 53;case 19:return 54;case 20:return 25;case 21:this.begin("md_string");break;case 22:return"MD_STR";case 23:this.popState();break;case 24:this.begin("string");break;case 25:this.popState();break;case 26:return"STR";case 27:this.begin("class_name");break;case 28:return this.popState(),47;break;case 29:return this.begin("point_start"),44;break;case 30:return this.begin("point_x"),45;break;case 31:this.popState();break;case 32:this.popState(),this.begin("point_y");break;case 33:return this.popState(),46;break;case 34:return 28;case 35:return 4;case 36:return 11;case 37:return 64;case 38:return 10;case 39:return 65;case 40:return 65;case 41:return 14;case 42:return 13;case 43:return 67;case 44:return 66;case 45:return 12;case 46:return 8;case 47:return 5;case 48:return 18;case 49:return 56;case 50:return 63;case 51:return 57}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:classDef\b)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?::::)/i,/^(?:^\w+)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{class_name:{rules:[28],inclusive:!1},point_y:{rules:[33],inclusive:!1},point_x:{rules:[32],inclusive:!1},point_start:{rules:[30,31],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[22,23],inclusive:!1},string:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,21,24,27,29,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],inclusive:!0}}};return he})();fe.lexer=xe;function Y(){this.yy={}}return o(Y,"Parser"),Y.prototype=fe,fe.Parser=Y,new Y})();GF.parser=GF;z1e=GF});var Ts,V6,V1e=M(()=>{"use strict";yr();Ra();pt();Py();Ts=mh(),V6=class{constructor(){this.classes=new Map;this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}static{o(this,"QuadrantBuilder")}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:ur.quadrantChart?.chartWidth||500,chartWidth:ur.quadrantChart?.chartHeight||500,titlePadding:ur.quadrantChart?.titlePadding||10,titleFontSize:ur.quadrantChart?.titleFontSize||20,quadrantPadding:ur.quadrantChart?.quadrantPadding||5,xAxisLabelPadding:ur.quadrantChart?.xAxisLabelPadding||5,yAxisLabelPadding:ur.quadrantChart?.yAxisLabelPadding||5,xAxisLabelFontSize:ur.quadrantChart?.xAxisLabelFontSize||16,yAxisLabelFontSize:ur.quadrantChart?.yAxisLabelFontSize||16,quadrantLabelFontSize:ur.quadrantChart?.quadrantLabelFontSize||16,quadrantTextTopPadding:ur.quadrantChart?.quadrantTextTopPadding||5,pointTextPadding:ur.quadrantChart?.pointTextPadding||5,pointLabelFontSize:ur.quadrantChart?.pointLabelFontSize||12,pointRadius:ur.quadrantChart?.pointRadius||5,xAxisPosition:ur.quadrantChart?.xAxisPosition||"top",yAxisPosition:ur.quadrantChart?.yAxisPosition||"left",quadrantInternalBorderStrokeWidth:ur.quadrantChart?.quadrantInternalBorderStrokeWidth||1,quadrantExternalBorderStrokeWidth:ur.quadrantChart?.quadrantExternalBorderStrokeWidth||2}}getDefaultThemeConfig(){return{quadrant1Fill:Ts.quadrant1Fill,quadrant2Fill:Ts.quadrant2Fill,quadrant3Fill:Ts.quadrant3Fill,quadrant4Fill:Ts.quadrant4Fill,quadrant1TextFill:Ts.quadrant1TextFill,quadrant2TextFill:Ts.quadrant2TextFill,quadrant3TextFill:Ts.quadrant3TextFill,quadrant4TextFill:Ts.quadrant4TextFill,quadrantPointFill:Ts.quadrantPointFill,quadrantPointTextFill:Ts.quadrantPointTextFill,quadrantXAxisTextFill:Ts.quadrantXAxisTextFill,quadrantYAxisTextFill:Ts.quadrantYAxisTextFill,quadrantTitleFill:Ts.quadrantTitleFill,quadrantInternalBorderStrokeFill:Ts.quadrantInternalBorderStrokeFill,quadrantExternalBorderStrokeFill:Ts.quadrantExternalBorderStrokeFill}}clear(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData(),this.classes=new Map,X.info("clear called")}setData(e){this.data={...this.data,...e}}addPoints(e){this.data.points=[...e,...this.data.points]}addClass(e,r){this.classes.set(e,r)}setConfig(e){X.trace("setConfig called with: ",e),this.config={...this.config,...e}}setThemeConfig(e){X.trace("setThemeConfig called with: ",e),this.themeConfig={...this.themeConfig,...e}}calculateSpace(e,r,n,i){let a=this.config.xAxisLabelPadding*2+this.config.xAxisLabelFontSize,s={top:e==="top"&&r?a:0,bottom:e==="bottom"&&r?a:0},l=this.config.yAxisLabelPadding*2+this.config.yAxisLabelFontSize,u={left:this.config.yAxisPosition==="left"&&n?l:0,right:this.config.yAxisPosition==="right"&&n?l:0},h=this.config.titleFontSize+this.config.titlePadding*2,f={top:i?h:0},d=this.config.quadrantPadding+u.left,p=this.config.quadrantPadding+s.top+f.top,m=this.config.chartWidth-this.config.quadrantPadding*2-u.left-u.right,g=this.config.chartHeight-this.config.quadrantPadding*2-s.top-s.bottom-f.top,y=m/2,v=g/2;return{xAxisSpace:s,yAxisSpace:u,titleSpace:f,quadrantSpace:{quadrantLeft:d,quadrantTop:p,quadrantWidth:m,quadrantHalfWidth:y,quadrantHeight:g,quadrantHalfHeight:v}}}getAxisLabels(e,r,n,i){let{quadrantSpace:a,titleSpace:s}=i,{quadrantHalfHeight:l,quadrantHeight:u,quadrantLeft:h,quadrantHalfWidth:f,quadrantTop:d,quadrantWidth:p}=a,m=!!this.data.xAxisRightText,g=!!this.data.yAxisTopText,y=[];return this.data.xAxisLeftText&&r&&y.push({text:this.data.xAxisLeftText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.xAxisRightText&&r&&y.push({text:this.data.xAxisRightText,fill:this.themeConfig.quadrantXAxisTextFill,x:h+f+(m?f/2:0),y:e==="top"?this.config.xAxisLabelPadding+s.top:this.config.xAxisLabelPadding+d+u+this.config.quadrantPadding,fontSize:this.config.xAxisLabelFontSize,verticalPos:m?"center":"left",horizontalPos:"top",rotation:0}),this.data.yAxisBottomText&&n&&y.push({text:this.data.yAxisBottomText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+u-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),this.data.yAxisTopText&&n&&y.push({text:this.data.yAxisTopText,fill:this.themeConfig.quadrantYAxisTextFill,x:this.config.yAxisPosition==="left"?this.config.yAxisLabelPadding:this.config.yAxisLabelPadding+h+p+this.config.quadrantPadding,y:d+l-(g?l/2:0),fontSize:this.config.yAxisLabelFontSize,verticalPos:g?"center":"left",horizontalPos:"top",rotation:-90}),y}getQuadrants(e){let{quadrantSpace:r}=e,{quadrantHalfHeight:n,quadrantLeft:i,quadrantHalfWidth:a,quadrantTop:s}=r,l=[{text:{text:this.data.quadrant1Text,fill:this.themeConfig.quadrant1TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i+a,y:s,width:a,height:n,fill:this.themeConfig.quadrant1Fill},{text:{text:this.data.quadrant2Text,fill:this.themeConfig.quadrant2TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i,y:s,width:a,height:n,fill:this.themeConfig.quadrant2Fill},{text:{text:this.data.quadrant3Text,fill:this.themeConfig.quadrant3TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i,y:s+n,width:a,height:n,fill:this.themeConfig.quadrant3Fill},{text:{text:this.data.quadrant4Text,fill:this.themeConfig.quadrant4TextFill,x:0,y:0,fontSize:this.config.quadrantLabelFontSize,verticalPos:"center",horizontalPos:"middle",rotation:0},x:i+a,y:s+n,width:a,height:n,fill:this.themeConfig.quadrant4Fill}];for(let u of l)u.text.x=u.x+u.width/2,this.data.points.length===0?(u.text.y=u.y+u.height/2,u.text.horizontalPos="middle"):(u.text.y=u.y+this.config.quadrantTextTopPadding,u.text.horizontalPos="top");return l}getQuadrantPoints(e){let{quadrantSpace:r}=e,{quadrantHeight:n,quadrantLeft:i,quadrantTop:a,quadrantWidth:s}=r,l=Tl().domain([0,1]).range([i,s+i]),u=Tl().domain([0,1]).range([n+a,a]);return this.data.points.map(f=>{let d=this.classes.get(f.className);return d&&(f={...d,...f}),{x:l(f.x),y:u(f.y),fill:f.color??this.themeConfig.quadrantPointFill,radius:f.radius??this.config.pointRadius,text:{text:f.text,fill:this.themeConfig.quadrantPointTextFill,x:l(f.x),y:u(f.y)+this.config.pointTextPadding,verticalPos:"center",horizontalPos:"top",fontSize:this.config.pointLabelFontSize,rotation:0},strokeColor:f.strokeColor??this.themeConfig.quadrantPointFill,strokeWidth:f.strokeWidth??"0px"}})}getBorders(e){let r=this.config.quadrantExternalBorderStrokeWidth/2,{quadrantSpace:n}=e,{quadrantHalfHeight:i,quadrantHeight:a,quadrantLeft:s,quadrantHalfWidth:l,quadrantTop:u,quadrantWidth:h}=n;return[{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u,x2:s+h+r,y2:u},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s+h,y1:u+r,x2:s+h,y2:u+a-r},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s-r,y1:u+a,x2:s+h+r,y2:u+a},{strokeFill:this.themeConfig.quadrantExternalBorderStrokeFill,strokeWidth:this.config.quadrantExternalBorderStrokeWidth,x1:s,y1:u+r,x2:s,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+l,y1:u+r,x2:s+l,y2:u+a-r},{strokeFill:this.themeConfig.quadrantInternalBorderStrokeFill,strokeWidth:this.config.quadrantInternalBorderStrokeWidth,x1:s+r,y1:u+i,x2:s+h-r,y2:u+i}]}getTitle(e){if(e)return{text:this.data.titleText,fill:this.themeConfig.quadrantTitleFill,fontSize:this.config.titleFontSize,horizontalPos:"top",verticalPos:"center",rotation:0,y:this.config.titlePadding,x:this.config.chartWidth/2}}build(){let e=this.config.showXAxis&&!!(this.data.xAxisLeftText||this.data.xAxisRightText),r=this.config.showYAxis&&!!(this.data.yAxisTopText||this.data.yAxisBottomText),n=this.config.showTitle&&!!this.data.titleText,i=this.data.points.length>0?"bottom":this.config.xAxisPosition,a=this.calculateSpace(i,e,r,n);return{points:this.getQuadrantPoints(a),quadrants:this.getQuadrants(a),axisLabels:this.getAxisLabels(i,e,r,a),borderLines:this.getBorders(a),title:this.getTitle(n)}}}});function VF(t){return!/^#?([\dA-Fa-f]{6}|[\dA-Fa-f]{3})$/.test(t)}function U1e(t){return!/^\d+$/.test(t)}function H1e(t){return!/^\d+px$/.test(t)}var s0,q1e=M(()=>{"use strict";s0=class extends Error{static{o(this,"InvalidStyleError")}constructor(e,r,n){super(`value for ${e} ${r} is invalid, please use a valid ${n}`),this.name="InvalidStyleError"}};o(VF,"validateHexCode");o(U1e,"validateNumber");o(H1e,"validateSizeInPixels")});function sh(t){return sr(t.trim(),lZe)}function cZe(t){Aa.setData({quadrant1Text:sh(t.text)})}function uZe(t){Aa.setData({quadrant2Text:sh(t.text)})}function hZe(t){Aa.setData({quadrant3Text:sh(t.text)})}function fZe(t){Aa.setData({quadrant4Text:sh(t.text)})}function dZe(t){Aa.setData({xAxisLeftText:sh(t.text)})}function pZe(t){Aa.setData({xAxisRightText:sh(t.text)})}function mZe(t){Aa.setData({yAxisTopText:sh(t.text)})}function gZe(t){Aa.setData({yAxisBottomText:sh(t.text)})}function UF(t){let e={};for(let r of t){let[n,i]=r.trim().split(/\s*:\s*/);if(n==="radius"){if(U1e(i))throw new s0(n,i,"number");e.radius=parseInt(i)}else if(n==="color"){if(VF(i))throw new s0(n,i,"hex code");e.color=i}else if(n==="stroke-color"){if(VF(i))throw new s0(n,i,"hex code");e.strokeColor=i}else if(n==="stroke-width"){if(H1e(i))throw new s0(n,i,"number of pixels (eg. 10px)");e.strokeWidth=i}else throw new Error(`style named ${n} is not supported.`)}return e}function yZe(t,e,r,n,i){let a=UF(i);Aa.addPoints([{x:r,y:n,text:sh(t.text),className:e,...a}])}function vZe(t,e){Aa.addClass(t,UF(e))}function xZe(t){Aa.setConfig({chartWidth:t})}function bZe(t){Aa.setConfig({chartHeight:t})}function TZe(){let t=ge(),{themeVariables:e,quadrantChart:r}=t;return r&&Aa.setConfig(r),Aa.setThemeConfig({quadrant1Fill:e.quadrant1Fill,quadrant2Fill:e.quadrant2Fill,quadrant3Fill:e.quadrant3Fill,quadrant4Fill:e.quadrant4Fill,quadrant1TextFill:e.quadrant1TextFill,quadrant2TextFill:e.quadrant2TextFill,quadrant3TextFill:e.quadrant3TextFill,quadrant4TextFill:e.quadrant4TextFill,quadrantPointFill:e.quadrantPointFill,quadrantPointTextFill:e.quadrantPointTextFill,quadrantXAxisTextFill:e.quadrantXAxisTextFill,quadrantYAxisTextFill:e.quadrantYAxisTextFill,quadrantExternalBorderStrokeFill:e.quadrantExternalBorderStrokeFill,quadrantInternalBorderStrokeFill:e.quadrantInternalBorderStrokeFill,quadrantTitleFill:e.quadrantTitleFill}),Aa.setData({titleText:Pr()}),Aa.build()}var lZe,Aa,wZe,W1e,Y1e=M(()=>{"use strict";Xt();gr();ci();V1e();q1e();lZe=ge();o(sh,"textSanitizer");Aa=new V6;o(cZe,"setQuadrant1Text");o(uZe,"setQuadrant2Text");o(hZe,"setQuadrant3Text");o(fZe,"setQuadrant4Text");o(dZe,"setXAxisLeftText");o(pZe,"setXAxisRightText");o(mZe,"setYAxisTopText");o(gZe,"setYAxisBottomText");o(UF,"parseStyles");o(yZe,"addPoint");o(vZe,"addClass");o(xZe,"setWidth");o(bZe,"setHeight");o(TZe,"getQuadrantData");wZe=o(function(){Aa.clear(),Sr()},"clear"),W1e={setWidth:xZe,setHeight:bZe,setQuadrant1Text:cZe,setQuadrant2Text:uZe,setQuadrant3Text:hZe,setQuadrant4Text:fZe,setXAxisLeftText:dZe,setXAxisRightText:pZe,setYAxisTopText:mZe,setYAxisBottomText:gZe,parseStyles:UF,addPoint:yZe,addClass:vZe,getQuadrantData:TZe,clear:wZe,setAccTitle:Rr,getAccTitle:Mr,setDiagramTitle:$r,getDiagramTitle:Pr,getAccDescription:Or,setAccDescription:Ir}});var kZe,X1e,j1e=M(()=>{"use strict";yr();Xt();pt();Ei();kZe=o((t,e,r,n)=>{function i(A){return A==="top"?"hanging":"middle"}o(i,"getDominantBaseLine");function a(A){return A==="left"?"start":"middle"}o(a,"getTextAnchor");function s(A){return`translate(${A.x}, ${A.y}) rotate(${A.rotation||0})`}o(s,"getTransformation");let l=ge();X.debug(`Rendering quadrant chart +`+t);let u=l.securityLevel,h;u==="sandbox"&&(h=qe("#i"+e));let d=(u==="sandbox"?qe(h.nodes()[0].contentDocument.body):qe("body")).select(`[id="${e}"]`),p=d.append("g").attr("class","main"),m=l.quadrantChart?.chartWidth??500,g=l.quadrantChart?.chartHeight??500;mn(d,g,m,l.quadrantChart?.useMaxWidth??!0),d.attr("viewBox","0 0 "+m+" "+g),n.db.setHeight(g),n.db.setWidth(m);let y=n.db.getQuadrantData(),v=p.append("g").attr("class","quadrants"),x=p.append("g").attr("class","border"),b=p.append("g").attr("class","data-points"),T=p.append("g").attr("class","labels"),S=p.append("g").attr("class","title");y.title&&S.append("text").attr("x",0).attr("y",0).attr("fill",y.title.fill).attr("font-size",y.title.fontSize).attr("dominant-baseline",i(y.title.horizontalPos)).attr("text-anchor",a(y.title.verticalPos)).attr("transform",s(y.title)).text(y.title.text),y.borderLines&&x.selectAll("line").data(y.borderLines).enter().append("line").attr("x1",A=>A.x1).attr("y1",A=>A.y1).attr("x2",A=>A.x2).attr("y2",A=>A.y2).style("stroke",A=>A.strokeFill).style("stroke-width",A=>A.strokeWidth);let w=v.selectAll("g.quadrant").data(y.quadrants).enter().append("g").attr("class","quadrant");w.append("rect").attr("x",A=>A.x).attr("y",A=>A.y).attr("width",A=>A.width).attr("height",A=>A.height).attr("fill",A=>A.fill),w.append("text").attr("x",0).attr("y",0).attr("fill",A=>A.text.fill).attr("font-size",A=>A.text.fontSize).attr("dominant-baseline",A=>i(A.text.horizontalPos)).attr("text-anchor",A=>a(A.text.verticalPos)).attr("transform",A=>s(A.text)).text(A=>A.text.text),T.selectAll("g.label").data(y.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(A=>A.text).attr("fill",A=>A.fill).attr("font-size",A=>A.fontSize).attr("dominant-baseline",A=>i(A.horizontalPos)).attr("text-anchor",A=>a(A.verticalPos)).attr("transform",A=>s(A));let C=b.selectAll("g.data-point").data(y.points).enter().append("g").attr("class","data-point");C.append("circle").attr("cx",A=>A.x).attr("cy",A=>A.y).attr("r",A=>A.radius).attr("fill",A=>A.fill).attr("stroke",A=>A.strokeColor).attr("stroke-width",A=>A.strokeWidth),C.append("text").attr("x",0).attr("y",0).text(A=>A.text.text).attr("fill",A=>A.text.fill).attr("font-size",A=>A.text.fontSize).attr("dominant-baseline",A=>i(A.text.horizontalPos)).attr("text-anchor",A=>a(A.text.verticalPos)).attr("transform",A=>s(A.text))},"draw"),X1e={draw:kZe}});var K1e={};dr(K1e,{diagram:()=>EZe});var EZe,Q1e=M(()=>{"use strict";G1e();Y1e();j1e();EZe={parser:z1e,db:W1e,renderer:X1e,styles:o(()=>"","styles")}});var HF,eye,tye=M(()=>{"use strict";HF=(function(){var t=o(function(O,N,P,B){for(P=P||{},B=O.length;B--;P[O[B]]=N);return P},"o"),e=[1,10,12,14,16,18,19,21,23],r=[2,6],n=[1,3],i=[1,5],a=[1,6],s=[1,7],l=[1,5,10,12,14,16,18,19,21,23,34,35,36],u=[1,25],h=[1,26],f=[1,28],d=[1,29],p=[1,30],m=[1,31],g=[1,32],y=[1,33],v=[1,34],x=[1,35],b=[1,36],T=[1,37],S=[1,43],w=[1,42],k=[1,47],C=[1,50],A=[1,10,12,14,16,18,19,21,23,34,35,36],L=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],I=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],R=[1,64],E={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:o(function(N,P,B,F,V,$,U){var j=$.length-1;switch(V){case 5:F.setOrientation($[j]);break;case 9:F.setDiagramTitle($[j].text.trim());break;case 12:F.setLineData({text:"",type:"text"},$[j]);break;case 13:F.setLineData($[j-1],$[j]);break;case 14:F.setBarData({text:"",type:"text"},$[j]);break;case 15:F.setBarData($[j-1],$[j]);break;case 16:this.$=$[j].trim(),F.setAccTitle(this.$);break;case 17:case 18:this.$=$[j].trim(),F.setAccDescription(this.$);break;case 19:this.$=$[j-1];break;case 20:this.$=[Number($[j-2]),...$[j]];break;case 21:this.$=[Number($[j])];break;case 22:F.setXAxisTitle($[j]);break;case 23:F.setXAxisTitle($[j-1]);break;case 24:F.setXAxisTitle({type:"text",text:""});break;case 25:F.setXAxisBand($[j]);break;case 26:F.setXAxisRangeData(Number($[j-2]),Number($[j]));break;case 27:this.$=$[j-1];break;case 28:this.$=[$[j-2],...$[j]];break;case 29:this.$=[$[j]];break;case 30:F.setYAxisTitle($[j]);break;case 31:F.setYAxisTitle($[j-1]);break;case 32:F.setYAxisTitle({type:"text",text:""});break;case 33:F.setYAxisRangeData(Number($[j-2]),Number($[j]));break;case 37:this.$={text:$[j],type:"text"};break;case 38:this.$={text:$[j],type:"text"};break;case 39:this.$={text:$[j],type:"markdown"};break;case 40:this.$=$[j];break;case 41:this.$=$[j-1]+""+$[j];break}},"anonymous"),table:[t(e,r,{3:1,4:2,7:4,5:n,34:i,35:a,36:s}),{1:[3]},t(e,r,{4:2,7:4,3:8,5:n,34:i,35:a,36:s}),t(e,r,{4:2,7:4,6:9,3:10,5:n,8:[1,11],34:i,35:a,36:s}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},t(l,[2,34]),t(l,[2,35]),t(l,[2,36]),{1:[2,1]},t(e,r,{4:2,7:4,3:21,5:n,34:i,35:a,36:s}),{1:[2,3]},t(l,[2,5]),t(e,[2,7],{4:22,34:i,35:a,36:s}),{11:23,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{11:39,13:38,24:S,27:w,29:40,30:41,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{11:45,15:44,27:k,33:46,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{11:49,17:48,24:C,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{11:52,17:51,24:C,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},{20:[1,53]},{22:[1,54]},t(A,[2,18]),{1:[2,2]},t(A,[2,8]),t(A,[2,9]),t(L,[2,37],{40:55,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T}),t(L,[2,38]),t(L,[2,39]),t(I,[2,40]),t(I,[2,42]),t(I,[2,43]),t(I,[2,44]),t(I,[2,45]),t(I,[2,46]),t(I,[2,47]),t(I,[2,48]),t(I,[2,49]),t(I,[2,50]),t(I,[2,51]),t(A,[2,10]),t(A,[2,22],{30:41,29:56,24:S,27:w}),t(A,[2,24]),t(A,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},t(A,[2,11]),t(A,[2,30],{33:60,27:k}),t(A,[2,32]),{31:[1,61]},t(A,[2,12]),{17:62,24:C},{25:63,27:R},t(A,[2,14]),{17:65,24:C},t(A,[2,16]),t(A,[2,17]),t(I,[2,41]),t(A,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},t(A,[2,31]),{27:[1,69]},t(A,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},t(A,[2,15]),t(A,[2,26]),t(A,[2,27]),{11:59,32:72,37:24,38:u,39:h,40:27,41:f,42:d,43:p,44:m,45:g,46:y,47:v,48:x,49:b,50:T},t(A,[2,33]),t(A,[2,19]),{25:73,27:R},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:o(function(N,P){if(P.recoverable)this.trace(N);else{var B=new Error(N);throw B.hash=P,B}},"parseError"),parse:o(function(N){var P=this,B=[0],F=[],V=[null],$=[],U=this.table,j="",ee=0,q=0,oe=0,Q=2,ue=1,te=$.slice.call(arguments,1),re=Object.create(this.lexer),J={yy:{}};for(var K in this.yy)Object.prototype.hasOwnProperty.call(this.yy,K)&&(J.yy[K]=this.yy[K]);re.setInput(N,J.yy),J.yy.lexer=re,J.yy.parser=this,typeof re.yylloc>"u"&&(re.yylloc={});var ae=re.yylloc;$.push(ae);var Z=re.options&&re.options.ranges;typeof J.yy.parseError=="function"?this.parseError=J.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function de(fe){B.length=B.length-2*fe,V.length=V.length-fe,$.length=$.length-fe}o(de,"popStack");function ne(){var fe;return fe=F.pop()||re.lex()||ue,typeof fe!="number"&&(fe instanceof Array&&(F=fe,fe=F.pop()),fe=P.symbols_[fe]||fe),fe}o(ne,"lex");for(var Te,W,Ve,pe,Be,Ye,He={},Le,Ie,Ne,Ce;;){if(Ve=B[B.length-1],this.defaultActions[Ve]?pe=this.defaultActions[Ve]:((Te===null||typeof Te>"u")&&(Te=ne()),pe=U[Ve]&&U[Ve][Te]),typeof pe>"u"||!pe.length||!pe[0]){var Fe="";Ce=[];for(Le in U[Ve])this.terminals_[Le]&&Le>Q&&Ce.push("'"+this.terminals_[Le]+"'");re.showPosition?Fe="Parse error on line "+(ee+1)+`: +`+re.showPosition()+` +Expecting `+Ce.join(", ")+", got '"+(this.terminals_[Te]||Te)+"'":Fe="Parse error on line "+(ee+1)+": Unexpected "+(Te==ue?"end of input":"'"+(this.terminals_[Te]||Te)+"'"),this.parseError(Fe,{text:re.match,token:this.terminals_[Te]||Te,line:re.yylineno,loc:ae,expected:Ce})}if(pe[0]instanceof Array&&pe.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ve+", token: "+Te);switch(pe[0]){case 1:B.push(Te),V.push(re.yytext),$.push(re.yylloc),B.push(pe[1]),Te=null,W?(Te=W,W=null):(q=re.yyleng,j=re.yytext,ee=re.yylineno,ae=re.yylloc,oe>0&&oe--);break;case 2:if(Ie=this.productions_[pe[1]][1],He.$=V[V.length-Ie],He._$={first_line:$[$.length-(Ie||1)].first_line,last_line:$[$.length-1].last_line,first_column:$[$.length-(Ie||1)].first_column,last_column:$[$.length-1].last_column},Z&&(He._$.range=[$[$.length-(Ie||1)].range[0],$[$.length-1].range[1]]),Ye=this.performAction.apply(He,[j,q,ee,J.yy,pe[1],V,$].concat(te)),typeof Ye<"u")return Ye;Ie&&(B=B.slice(0,-1*Ie*2),V=V.slice(0,-1*Ie),$=$.slice(0,-1*Ie)),B.push(this.productions_[pe[1]][0]),V.push(He.$),$.push(He._$),Ne=U[B[B.length-2]][B[B.length-1]],B.push(Ne);break;case 3:return!0}}return!0},"parse")},_=(function(){var O={EOF:1,parseError:o(function(P,B){if(this.yy.parser)this.yy.parser.parseError(P,B);else throw new Error(P)},"parseError"),setInput:o(function(N,P){return this.yy=P||this.yy||{},this._input=N,this._more=this._backtrack=this.done=!1,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},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var N=this._input[0];this.yytext+=N,this.yyleng++,this.offset++,this.match+=N,this.matched+=N;var P=N.match(/(?:\r\n?|\n).*/g);return P?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),N},"input"),unput:o(function(N){var P=N.length,B=N.split(/(?:\r\n?|\n)/g);this._input=N+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-P),this.offset-=P;var F=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),B.length-1&&(this.yylineno-=B.length-1);var V=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:B?(B.length===F.length?this.yylloc.first_column:0)+F[F.length-B.length].length-B[0].length:this.yylloc.first_column-P},this.options.ranges&&(this.yylloc.range=[V[0],V[0]+this.yyleng-P]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(N){this.unput(this.match.slice(N))},"less"),pastInput:o(function(){var N=this.matched.substr(0,this.matched.length-this.match.length);return(N.length>20?"...":"")+N.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var N=this.match;return N.length<20&&(N+=this._input.substr(0,20-N.length)),(N.substr(0,20)+(N.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var N=this.pastInput(),P=new Array(N.length+1).join("-");return N+this.upcomingInput()+` +`+P+"^"},"showPosition"),test_match:o(function(N,P){var B,F,V;if(this.options.backtrack_lexer&&(V={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},this.options.ranges&&(V.yylloc.range=this.yylloc.range.slice(0))),F=N[0].match(/(?:\r\n?|\n).*/g),F&&(this.yylineno+=F.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:F?F[F.length-1].length-F[F.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+N[0].length},this.yytext+=N[0],this.match+=N[0],this.matches=N,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(N[0].length),this.matched+=N[0],B=this.performAction.call(this,this.yy,this,P,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),B)return B;if(this._backtrack){for(var $ in V)this[$]=V[$];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var N,P,B,F;this._more||(this.yytext="",this.match="");for(var V=this._currentRules(),$=0;$P[0].length)){if(P=B,F=$,this.options.backtrack_lexer){if(N=this.test_match(B,V[$]),N!==!1)return N;if(this._backtrack){P=!1;continue}else return!1}else if(!this.options.flex)break}return P?(N=this.test_match(P,V[F]),N!==!1?N:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var P=this.next();return P||this.lex()},"lex"),begin:o(function(P){this.conditionStack.push(P)},"begin"),popState:o(function(){var P=this.conditionStack.length-1;return P>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(P){return P=this.conditionStack.length-1-Math.abs(P||0),P>=0?this.conditionStack[P]:"INITIAL"},"topState"),pushState:o(function(P){this.begin(P)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(P,B,F,V){var $=V;switch(F){case 0:break;case 1:break;case 2:return this.popState(),34;break;case 3:return this.popState(),34;break;case 4:return 34;case 5:break;case 6:return 10;case 7:return this.pushState("acc_title"),19;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.pushState("acc_descr"),21;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.pushState("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 5;case 15:return 5;case 16:return 8;case 17:return this.pushState("axis_data"),"X_AXIS";break;case 18:return this.pushState("axis_data"),"Y_AXIS";break;case 19:return this.pushState("axis_band_data"),24;break;case 20:return 31;case 21:return this.pushState("data"),16;break;case 22:return this.pushState("data"),18;break;case 23:return this.pushState("data_inner"),24;break;case 24:return 27;case 25:return this.popState(),26;break;case 26:this.popState();break;case 27:this.pushState("string");break;case 28:this.popState();break;case 29:return"STR";case 30:return 24;case 31:return 26;case 32:return 43;case 33:return"COLON";case 34:return 44;case 35:return 28;case 36:return 45;case 37:return 46;case 38:return 48;case 39:return 50;case 40:return 47;case 41:return 41;case 42:return 49;case 43:return 42;case 44:break;case 45:return 35;case 46:return 36}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:(\r?\n))/i,/^(?:(\r?\n))/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:title\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:\{)/i,/^(?:[^\}]*)/i,/^(?:xychart-beta\b)/i,/^(?:xychart\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\b)/i,/^(?:y-axis\b)/i,/^(?:\[)/i,/^(?:-->)/i,/^(?:line\b)/i,/^(?:bar\b)/i,/^(?:\[)/i,/^(?:[+-]?(?:\d+(?:\.\d+)?|\.\d+))/i,/^(?:\])/i,/^(?:(?:`\) \{ this\.pushState\(md_string\); \}\n\(\?:\(\?!`"\)\.\)\+ \{ return MD_STR; \}\n\(\?:`))/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s+)/i,/^(?:;)/i,/^(?:$)/i],conditions:{data_inner:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,18,21,22,24,25,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0},data:{rules:[0,1,3,4,5,6,7,9,11,14,15,16,17,18,21,22,23,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0},axis_band_data:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,18,21,22,25,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0},axis_data:{rules:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,22,24,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[],inclusive:!1},md_string:{rules:[],inclusive:!1},string:{rules:[28,29],inclusive:!1},INITIAL:{rules:[0,1,4,5,6,7,9,11,14,15,16,17,18,21,22,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0}}};return O})();E.lexer=_;function D(){this.yy={}}return o(D,"Parser"),D.prototype=E,E.Parser=D,new D})();HF.parser=HF;eye=HF});function qF(t){return t.type==="bar"}function U6(t){return t.type==="band"}function ny(t){return t.type==="linear"}var H6=M(()=>{"use strict";o(qF,"isBarPlot");o(U6,"isBandAxisData");o(ny,"isLinearAxisData")});var iy,WF=M(()=>{"use strict";zo();iy=class{constructor(e){this.parentGroup=e}static{o(this,"TextDimensionCalculatorWithFont")}getMaxDimension(e,r){if(!this.parentGroup)return{width:e.reduce((a,s)=>Math.max(s.length,a),0)*r,height:r};let n={width:0,height:0},i=this.parentGroup.append("g").attr("visibility","hidden").attr("font-size",r);for(let a of e){let s=XZ(i,1,a),l=s?s.width:a.length*r,u=s?s.height:r;n.width=Math.max(n.width,l),n.height=Math.max(n.height,u)}return i.remove(),n}}});var ay,YF=M(()=>{"use strict";ay=class{constructor(e,r,n,i){this.axisConfig=e;this.title=r;this.textDimensionCalculator=n;this.axisThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0};this.axisPosition="left";this.showTitle=!1;this.showLabel=!1;this.showTick=!1;this.showAxisLine=!1;this.outerPadding=0;this.titleTextHeight=0;this.labelTextHeight=0;this.range=[0,10],this.boundingRect={x:0,y:0,width:0,height:0},this.axisPosition="left"}static{o(this,"BaseAxis")}setRange(e){this.range=e,this.axisPosition==="left"||this.axisPosition==="right"?this.boundingRect.height=e[1]-e[0]:this.boundingRect.width=e[1]-e[0],this.recalculateScale()}getRange(){return[this.range[0]+this.outerPadding,this.range[1]-this.outerPadding]}setAxisPosition(e){this.axisPosition=e,this.setRange(this.range)}getTickDistance(){let e=this.getRange();return Math.abs(e[0]-e[1])/this.getTickValues().length}getAxisOuterPadding(){return this.outerPadding}getLabelDimension(){return this.textDimensionCalculator.getMaxDimension(this.getTickValues().map(e=>e.toString()),this.axisConfig.labelFontSize)}recalculateOuterPaddingToDrawBar(){.7*this.getTickDistance()>this.outerPadding*2&&(this.outerPadding=Math.floor(.7*this.getTickDistance()/2)),this.recalculateScale()}calculateSpaceIfDrawnHorizontally(e){let r=e.height;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.width;this.outerPadding=Math.min(n.width/2,i);let a=n.height+this.axisConfig.labelPadding*2;this.labelTextHeight=n.height,a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width,this.boundingRect.height=e.height-r}calculateSpaceIfDrawnVertical(e){let r=e.width;if(this.axisConfig.showAxisLine&&r>this.axisConfig.axisLineWidth&&(r-=this.axisConfig.axisLineWidth,this.showAxisLine=!0),this.axisConfig.showLabel){let n=this.getLabelDimension(),i=.2*e.height;this.outerPadding=Math.min(n.height/2,i);let a=n.width+this.axisConfig.labelPadding*2;a<=r&&(r-=a,this.showLabel=!0)}if(this.axisConfig.showTick&&r>=this.axisConfig.tickLength&&(this.showTick=!0,r-=this.axisConfig.tickLength),this.axisConfig.showTitle&&this.title){let n=this.textDimensionCalculator.getMaxDimension([this.title],this.axisConfig.titleFontSize),i=n.height+this.axisConfig.titlePadding*2;this.titleTextHeight=n.height,i<=r&&(r-=i,this.showTitle=!0)}this.boundingRect.width=e.width-r,this.boundingRect.height=e.height}calculateSpace(e){return this.axisPosition==="left"||this.axisPosition==="right"?this.calculateSpaceIfDrawnVertical(e):this.calculateSpaceIfDrawnHorizontally(e),this.recalculateScale(),{width:this.boundingRect.width,height:this.boundingRect.height}}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}getDrawableElementsForLeftAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.x+this.boundingRect.width-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["left-axis","axisl-line"],data:[{path:`M ${r},${this.boundingRect.y} L ${r},${this.boundingRect.y+this.boundingRect.height} `,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["left-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.boundingRect.x+this.boundingRect.width-(this.showLabel?this.axisConfig.labelPadding:0)-(this.showTick?this.axisConfig.tickLength:0)-(this.showAxisLine?this.axisConfig.axisLineWidth:0),y:this.getScaleValue(r),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"middle",horizontalPos:"right"}))}),this.showTick){let r=this.boundingRect.x+this.boundingRect.width-(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["left-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${r},${this.getScaleValue(n)} L ${r-this.axisConfig.tickLength},${this.getScaleValue(n)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["left-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.axisConfig.titlePadding,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:270,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForBottomAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["bottom-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["bottom-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+this.axisConfig.labelPadding+(this.showTick?this.axisConfig.tickLength:0)+(this.showAxisLine?this.axisConfig.axisLineWidth:0),fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y+(this.showAxisLine?this.axisConfig.axisLineWidth:0);e.push({type:"path",groupTexts:["bottom-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r} L ${this.getScaleValue(n)},${r+this.axisConfig.tickLength}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["bottom-axis","title"],data:[{text:this.title,x:this.range[0]+(this.range[1]-this.range[0])/2,y:this.boundingRect.y+this.boundingRect.height-this.axisConfig.titlePadding-this.titleTextHeight,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElementsForTopAxis(){let e=[];if(this.showAxisLine){let r=this.boundingRect.y+this.boundingRect.height-this.axisConfig.axisLineWidth/2;e.push({type:"path",groupTexts:["top-axis","axis-line"],data:[{path:`M ${this.boundingRect.x},${r} L ${this.boundingRect.x+this.boundingRect.width},${r}`,strokeFill:this.axisThemeConfig.axisLineColor,strokeWidth:this.axisConfig.axisLineWidth}]})}if(this.showLabel&&e.push({type:"text",groupTexts:["top-axis","label"],data:this.getTickValues().map(r=>({text:r.toString(),x:this.getScaleValue(r),y:this.boundingRect.y+(this.showTitle?this.titleTextHeight+this.axisConfig.titlePadding*2:0)+this.axisConfig.labelPadding,fill:this.axisThemeConfig.labelColor,fontSize:this.axisConfig.labelFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}))}),this.showTick){let r=this.boundingRect.y;e.push({type:"path",groupTexts:["top-axis","ticks"],data:this.getTickValues().map(n=>({path:`M ${this.getScaleValue(n)},${r+this.boundingRect.height-(this.showAxisLine?this.axisConfig.axisLineWidth:0)} L ${this.getScaleValue(n)},${r+this.boundingRect.height-this.axisConfig.tickLength-(this.showAxisLine?this.axisConfig.axisLineWidth:0)}`,strokeFill:this.axisThemeConfig.tickColor,strokeWidth:this.axisConfig.tickWidth}))})}return this.showTitle&&e.push({type:"text",groupTexts:["top-axis","title"],data:[{text:this.title,x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.axisConfig.titlePadding,fill:this.axisThemeConfig.titleColor,fontSize:this.axisConfig.titleFontSize,rotation:0,verticalPos:"top",horizontalPos:"center"}]}),e}getDrawableElements(){if(this.axisPosition==="left")return this.getDrawableElementsForLeftAxis();if(this.axisPosition==="right")throw Error("Drawing of right axis is not implemented");return this.axisPosition==="bottom"?this.getDrawableElementsForBottomAxis():this.axisPosition==="top"?this.getDrawableElementsForTopAxis():[]}}});var q6,rye=M(()=>{"use strict";yr();pt();YF();q6=class extends ay{static{o(this,"BandAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.categories=n,this.scale=q0().domain(this.categories).range(this.getRange())}setRange(e){super.setRange(e)}recalculateScale(){this.scale=q0().domain(this.categories).range(this.getRange()).paddingInner(1).paddingOuter(0).align(.5),X.trace("BandAxis axis final categories, range: ",this.categories,this.getRange())}getTickValues(){return this.categories}getScaleValue(e){return this.scale(e)??this.getRange()[0]}}});var W6,nye=M(()=>{"use strict";yr();YF();W6=class extends ay{static{o(this,"LinearAxis")}constructor(e,r,n,i,a){super(e,i,a,r),this.domain=n,this.scale=Tl().domain(this.domain).range(this.getRange())}getTickValues(){return this.scale.ticks()}recalculateScale(){let e=[...this.domain];this.axisPosition==="left"&&e.reverse(),this.scale=Tl().domain(e).range(this.getRange())}getScaleValue(e){return this.scale(e)}}});function XF(t,e,r,n){let i=new iy(n);return U6(t)?new q6(e,r,t.categories,t.title,i):new W6(e,r,[t.min,t.max],t.title,i)}var iye=M(()=>{"use strict";H6();WF();rye();nye();o(XF,"getAxis")});function aye(t,e,r,n){let i=new iy(n);return new jF(i,t,e,r)}var jF,sye=M(()=>{"use strict";WF();jF=class{constructor(e,r,n,i){this.textDimensionCalculator=e;this.chartConfig=r;this.chartData=n;this.chartThemeConfig=i;this.boundingRect={x:0,y:0,width:0,height:0},this.showChartTitle=!1}static{o(this,"ChartTitle")}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){let r=this.textDimensionCalculator.getMaxDimension([this.chartData.title],this.chartConfig.titleFontSize),n=Math.max(r.width,e.width),i=r.height+2*this.chartConfig.titlePadding;return r.width<=n&&r.height<=i&&this.chartConfig.showTitle&&this.chartData.title&&(this.boundingRect.width=n,this.boundingRect.height=i,this.showChartTitle=!0),{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){let e=[];return this.showChartTitle&&e.push({groupTexts:["chart-title"],type:"text",data:[{fontSize:this.chartConfig.titleFontSize,text:this.chartData.title,verticalPos:"middle",horizontalPos:"center",x:this.boundingRect.x+this.boundingRect.width/2,y:this.boundingRect.y+this.boundingRect.height/2,fill:this.chartThemeConfig.titleColor,rotation:0}]}),e}};o(aye,"getChartTitleComponent")});var Y6,oye=M(()=>{"use strict";yr();Y6=class{constructor(e,r,n,i,a){this.plotData=e;this.xAxis=r;this.yAxis=n;this.orientation=i;this.plotIndex=a}static{o(this,"LinePlot")}getDrawableElement(){let e=this.plotData.data.map(n=>[this.xAxis.getScaleValue(n[0]),this.yAxis.getScaleValue(n[1])]),r;return this.orientation==="horizontal"?r=Cl().y(n=>n[0]).x(n=>n[1])(e):r=Cl().x(n=>n[0]).y(n=>n[1])(e),r?[{groupTexts:["plot",`line-plot-${this.plotIndex}`],type:"path",data:[{path:r,strokeFill:this.plotData.strokeFill,strokeWidth:this.plotData.strokeWidth}]}]:[]}}});var X6,lye=M(()=>{"use strict";X6=class{constructor(e,r,n,i,a,s){this.barData=e;this.boundingRect=r;this.xAxis=n;this.yAxis=i;this.orientation=a;this.plotIndex=s}static{o(this,"BarPlot")}getDrawableElement(){let e=this.barData.data.map(a=>[this.xAxis.getScaleValue(a[0]),this.yAxis.getScaleValue(a[1])]),n=Math.min(this.xAxis.getAxisOuterPadding()*2,this.xAxis.getTickDistance())*(1-.05),i=n/2;return this.orientation==="horizontal"?[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:this.boundingRect.x,y:a[0]-i,height:n,width:a[1]-this.boundingRect.x,fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]:[{groupTexts:["plot",`bar-plot-${this.plotIndex}`],type:"rect",data:e.map(a=>({x:a[0]-i,y:a[1],width:n,height:this.boundingRect.y+this.boundingRect.height-a[1],fill:this.barData.fill,strokeWidth:0,strokeFill:this.barData.fill}))}]}}});function cye(t,e,r){return new KF(t,e,r)}var KF,uye=M(()=>{"use strict";oye();lye();KF=class{constructor(e,r,n){this.chartConfig=e;this.chartData=r;this.chartThemeConfig=n;this.boundingRect={x:0,y:0,width:0,height:0}}static{o(this,"BasePlot")}setAxes(e,r){this.xAxis=e,this.yAxis=r}setBoundingBoxXY(e){this.boundingRect.x=e.x,this.boundingRect.y=e.y}calculateSpace(e){return this.boundingRect.width=e.width,this.boundingRect.height=e.height,{width:this.boundingRect.width,height:this.boundingRect.height}}getDrawableElements(){if(!(this.xAxis&&this.yAxis))throw Error("Axes must be passed to render Plots");let e=[];for(let[r,n]of this.chartData.plots.entries())switch(n.type){case"line":{let i=new Y6(n,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break;case"bar":{let i=new X6(n,this.boundingRect,this.xAxis,this.yAxis,this.chartConfig.chartOrientation,r);e.push(...i.getDrawableElement())}break}return e}};o(cye,"getPlotComponent")});var j6,hye=M(()=>{"use strict";iye();sye();uye();H6();j6=class{constructor(e,r,n,i){this.chartConfig=e;this.chartData=r;this.componentStore={title:aye(e,r,n,i),plot:cye(e,r,n),xAxis:XF(r.xAxis,e.xAxis,{titleColor:n.xAxisTitleColor,labelColor:n.xAxisLabelColor,tickColor:n.xAxisTickColor,axisLineColor:n.xAxisLineColor},i),yAxis:XF(r.yAxis,e.yAxis,{titleColor:n.yAxisTitleColor,labelColor:n.yAxisLabelColor,tickColor:n.yAxisTickColor,axisLineColor:n.yAxisLineColor},i)}}static{o(this,"Orchestrator")}calculateVerticalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),s=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),l=this.componentStore.plot.calculateSpace({width:a,height:s});e-=l.width,r-=l.height,l=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),i=l.height,r-=l.height,this.componentStore.xAxis.setAxisPosition("bottom"),l=this.componentStore.xAxis.calculateSpace({width:e,height:r}),r-=l.height,this.componentStore.yAxis.setAxisPosition("left"),l=this.componentStore.yAxis.calculateSpace({width:e,height:r}),n=l.width,e-=l.width,e>0&&(a+=e,e=0),r>0&&(s+=r,r=0),this.componentStore.plot.calculateSpace({width:a,height:s}),this.componentStore.plot.setBoundingBoxXY({x:n,y:i}),this.componentStore.xAxis.setRange([n,n+a]),this.componentStore.xAxis.setBoundingBoxXY({x:n,y:i+s}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:0,y:i}),this.chartData.plots.some(u=>qF(u))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateHorizontalSpace(){let e=this.chartConfig.width,r=this.chartConfig.height,n=0,i=0,a=0,s=Math.floor(e*this.chartConfig.plotReservedSpacePercent/100),l=Math.floor(r*this.chartConfig.plotReservedSpacePercent/100),u=this.componentStore.plot.calculateSpace({width:s,height:l});e-=u.width,r-=u.height,u=this.componentStore.title.calculateSpace({width:this.chartConfig.width,height:r}),n=u.height,r-=u.height,this.componentStore.xAxis.setAxisPosition("left"),u=this.componentStore.xAxis.calculateSpace({width:e,height:r}),e-=u.width,i=u.width,this.componentStore.yAxis.setAxisPosition("top"),u=this.componentStore.yAxis.calculateSpace({width:e,height:r}),r-=u.height,a=n+u.height,e>0&&(s+=e,e=0),r>0&&(l+=r,r=0),this.componentStore.plot.calculateSpace({width:s,height:l}),this.componentStore.plot.setBoundingBoxXY({x:i,y:a}),this.componentStore.yAxis.setRange([i,i+s]),this.componentStore.yAxis.setBoundingBoxXY({x:i,y:n}),this.componentStore.xAxis.setRange([a,a+l]),this.componentStore.xAxis.setBoundingBoxXY({x:0,y:a}),this.chartData.plots.some(h=>qF(h))&&this.componentStore.xAxis.recalculateOuterPaddingToDrawBar()}calculateSpace(){this.chartConfig.chartOrientation==="horizontal"?this.calculateHorizontalSpace():this.calculateVerticalSpace()}getDrawableElement(){this.calculateSpace();let e=[];this.componentStore.plot.setAxes(this.componentStore.xAxis,this.componentStore.yAxis);for(let r of Object.values(this.componentStore))e.push(...r.getDrawableElements());return e}}});var K6,fye=M(()=>{"use strict";hye();K6=class{static{o(this,"XYChartBuilder")}static build(e,r,n,i){return new j6(e,r,n,i).getDrawableElement()}}});function pye(){let t=mh(),e=Qt();return Vn(t.xyChart,e.themeVariables.xyChart)}function mye(){let t=Qt();return Vn(ur.xyChart,t.xyChart)}function gye(){return{yAxis:{type:"linear",title:"",min:1/0,max:-1/0},xAxis:{type:"band",title:"",categories:[]},title:"",plots:[]}}function JF(t){let e=Qt();return sr(t.trim(),e)}function _Ze(t){dye=t}function DZe(t){t==="horizontal"?x4.chartOrientation="horizontal":x4.chartOrientation="vertical"}function LZe(t){pn.xAxis.title=JF(t.text)}function yye(t,e){pn.xAxis={type:"linear",title:pn.xAxis.title,min:t,max:e},Q6=!0}function RZe(t){pn.xAxis={type:"band",title:pn.xAxis.title,categories:t.map(e=>JF(e.text))},Q6=!0}function NZe(t){pn.yAxis.title=JF(t.text)}function MZe(t,e){pn.yAxis={type:"linear",title:pn.yAxis.title,min:t,max:e},ZF=!0}function IZe(t){let e=Math.min(...t),r=Math.max(...t),n=ny(pn.yAxis)?pn.yAxis.min:1/0,i=ny(pn.yAxis)?pn.yAxis.max:-1/0;pn.yAxis={type:"linear",title:pn.yAxis.title,min:Math.min(n,e),max:Math.max(i,r)}}function vye(t){let e=[];if(t.length===0)return e;if(!Q6){let r=ny(pn.xAxis)?pn.xAxis.min:1/0,n=ny(pn.xAxis)?pn.xAxis.max:-1/0;yye(Math.min(r,1),Math.max(n,t.length))}if(ZF||IZe(t),U6(pn.xAxis)&&(e=pn.xAxis.categories.map((r,n)=>[r,t[n]])),ny(pn.xAxis)){let r=pn.xAxis.min,n=pn.xAxis.max,i=(n-r)/(t.length-1),a=[];for(let s=r;s<=n;s+=i)a.push(`${s}`);e=a.map((s,l)=>[s,t[l]])}return e}function xye(t){return QF[t===0?0:t%QF.length]}function OZe(t,e){let r=vye(e);pn.plots.push({type:"line",strokeFill:xye(v4),strokeWidth:2,data:r}),v4++}function PZe(t,e){let r=vye(e);pn.plots.push({type:"bar",fill:xye(v4),data:r}),v4++}function BZe(){if(pn.plots.length===0)throw Error("No Plot to render, please provide a plot with some data");return pn.title=Pr(),K6.build(x4,pn,b4,dye)}function FZe(){return b4}function $Ze(){return x4}function zZe(){return pn}var v4,dye,x4,b4,pn,QF,Q6,ZF,GZe,bye,Tye=M(()=>{"use strict";qn();Ra();Py();tr();gr();ci();fye();H6();v4=0,x4=mye(),b4=pye(),pn=gye(),QF=b4.plotColorPalette.split(",").map(t=>t.trim()),Q6=!1,ZF=!1;o(pye,"getChartDefaultThemeConfig");o(mye,"getChartDefaultConfig");o(gye,"getChartDefaultData");o(JF,"textSanitizer");o(_Ze,"setTmpSVGG");o(DZe,"setOrientation");o(LZe,"setXAxisTitle");o(yye,"setXAxisRangeData");o(RZe,"setXAxisBand");o(NZe,"setYAxisTitle");o(MZe,"setYAxisRangeData");o(IZe,"setYAxisRangeFromPlotData");o(vye,"transformDataWithoutCategory");o(xye,"getPlotColorFromPalette");o(OZe,"setLineData");o(PZe,"setBarData");o(BZe,"getDrawableElem");o(FZe,"getChartThemeConfig");o($Ze,"getChartConfig");o(zZe,"getXYChartData");GZe=o(function(){Sr(),v4=0,x4=mye(),pn=gye(),b4=pye(),QF=b4.plotColorPalette.split(",").map(t=>t.trim()),Q6=!1,ZF=!1},"clear"),bye={getDrawableElem:BZe,clear:GZe,setAccTitle:Rr,getAccTitle:Mr,setDiagramTitle:$r,getDiagramTitle:Pr,getAccDescription:Or,setAccDescription:Ir,setOrientation:DZe,setXAxisTitle:LZe,setXAxisRangeData:yye,setXAxisBand:RZe,setYAxisTitle:NZe,setYAxisRangeData:MZe,setLineData:OZe,setBarData:PZe,setTmpSVGG:_Ze,getChartThemeConfig:FZe,getChartConfig:$Ze,getXYChartData:zZe}});var VZe,wye,kye=M(()=>{"use strict";pt();tu();Ei();VZe=o((t,e,r,n)=>{let i=n.db,a=i.getChartThemeConfig(),s=i.getChartConfig(),l=i.getXYChartData().plots[0].data.map(T=>T[1]);function u(T){return T==="top"?"text-before-edge":"middle"}o(u,"getDominantBaseLine");function h(T){return T==="left"?"start":T==="right"?"end":"middle"}o(h,"getTextAnchor");function f(T){return`translate(${T.x}, ${T.y}) rotate(${T.rotation||0})`}o(f,"getTextTransformation"),X.debug(`Rendering xychart chart +`+t);let d=aa(e),p=d.append("g").attr("class","main"),m=p.append("rect").attr("width",s.width).attr("height",s.height).attr("class","background");mn(d,s.height,s.width,!0),d.attr("viewBox",`0 0 ${s.width} ${s.height}`),m.attr("fill",a.backgroundColor),i.setTmpSVGG(d.append("g").attr("class","mermaid-tmp-group"));let g=i.getDrawableElem(),y={};function v(T){let S=p,w="";for(let[k]of T.entries()){let C=p;k>0&&y[w]&&(C=y[w]),w+=T[k],S=y[w],S||(S=y[w]=C.append("g").attr("class",T[k]))}return S}o(v,"getGroup");for(let T of g){if(T.data.length===0)continue;let S=v(T.groupTexts);switch(T.type){case"rect":if(S.selectAll("rect").data(T.data).enter().append("rect").attr("x",w=>w.x).attr("y",w=>w.y).attr("width",w=>w.width).attr("height",w=>w.height).attr("fill",w=>w.fill).attr("stroke",w=>w.strokeFill).attr("stroke-width",w=>w.strokeWidth),s.showDataLabel)if(s.chartOrientation==="horizontal"){let C=function(I,R){let{data:E,label:_}=I;return R*_.length*.7<=E.width-10};var x=C;o(C,"fitsHorizontally");let w=.7,k=T.data.map((I,R)=>({data:I,label:l[R].toString()})).filter(I=>I.data.width>0&&I.data.height>0),A=k.map(I=>{let{data:R}=I,E=R.height*.7;for(;!C(I,E)&&E>0;)E-=1;return E}),L=Math.floor(Math.min(...A));S.selectAll("text").data(k).enter().append("text").attr("x",I=>I.data.x+I.data.width-10).attr("y",I=>I.data.y+I.data.height/2).attr("text-anchor","end").attr("dominant-baseline","middle").attr("fill","black").attr("font-size",`${L}px`).text(I=>I.label)}else{let C=function(I,R,E){let{data:_,label:D}=I,N=R*D.length*.7,P=_.x+_.width/2,B=P-N/2,F=P+N/2,V=B>=_.x&&F<=_.x+_.width,$=_.y+E+R<=_.y+_.height;return V&&$};var b=C;o(C,"fitsInBar");let w=10,k=T.data.map((I,R)=>({data:I,label:l[R].toString()})).filter(I=>I.data.width>0&&I.data.height>0),A=k.map(I=>{let{data:R,label:E}=I,_=R.width/(E.length*.7);for(;!C(I,_,10)&&_>0;)_-=1;return _}),L=Math.floor(Math.min(...A));S.selectAll("text").data(k).enter().append("text").attr("x",I=>I.data.x+I.data.width/2).attr("y",I=>I.data.y+10).attr("text-anchor","middle").attr("dominant-baseline","hanging").attr("fill","black").attr("font-size",`${L}px`).text(I=>I.label)}break;case"text":S.selectAll("text").data(T.data).enter().append("text").attr("x",0).attr("y",0).attr("fill",w=>w.fill).attr("font-size",w=>w.fontSize).attr("dominant-baseline",w=>u(w.verticalPos)).attr("text-anchor",w=>h(w.horizontalPos)).attr("transform",w=>f(w)).text(w=>w.text);break;case"path":S.selectAll("path").data(T.data).enter().append("path").attr("d",w=>w.path).attr("fill",w=>w.fill?w.fill:"none").attr("stroke",w=>w.strokeFill).attr("stroke-width",w=>w.strokeWidth);break}}},"draw"),wye={draw:VZe}});var Eye={};dr(Eye,{diagram:()=>UZe});var UZe,Sye=M(()=>{"use strict";tye();Tye();kye();UZe={parser:eye,db:bye,renderer:wye}});var e$,_ye,Dye=M(()=>{"use strict";e$=(function(){var t=o(function(fe,xe,Y,he){for(Y=Y||{},he=fe.length;he--;Y[fe[he]]=xe);return Y},"o"),e=[1,3],r=[1,4],n=[1,5],i=[1,6],a=[5,6,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],s=[1,22],l=[2,7],u=[1,26],h=[1,27],f=[1,28],d=[1,29],p=[1,33],m=[1,34],g=[1,35],y=[1,36],v=[1,37],x=[1,38],b=[1,24],T=[1,31],S=[1,32],w=[1,30],k=[1,39],C=[1,40],A=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],L=[1,61],I=[89,90],R=[5,8,9,11,13,21,22,23,24,27,29,41,42,43,44,45,46,54,61,63,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],E=[27,29],_=[1,70],D=[1,71],O=[1,72],N=[1,73],P=[1,74],B=[1,75],F=[1,76],V=[1,83],$=[1,80],U=[1,84],j=[1,85],ee=[1,86],q=[1,87],oe=[1,88],Q=[1,89],ue=[1,90],te=[1,91],re=[1,92],J=[5,8,9,11,13,21,22,23,24,27,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],K=[63,64],ae=[1,101],Z=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,76,77,89,90],de=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],ne=[1,110],Te=[1,106],W=[1,107],Ve=[1,108],pe=[1,109],Be=[1,111],Ye=[1,116],He=[1,117],Le=[1,114],Ie=[1,115],Ne={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,direction:17,styleStatement:18,classDefStatement:19,classStatement:20,direction_tb:21,direction_bt:22,direction_rl:23,direction_lr:24,requirementType:25,requirementName:26,STRUCT_START:27,requirementBody:28,STYLE_SEPARATOR:29,idList:30,ID:31,COLONSEP:32,id:33,TEXT:34,text:35,RISK:36,riskLevel:37,VERIFYMTHD:38,verifyType:39,STRUCT_STOP:40,REQUIREMENT:41,FUNCTIONAL_REQUIREMENT:42,INTERFACE_REQUIREMENT:43,PERFORMANCE_REQUIREMENT:44,PHYSICAL_REQUIREMENT:45,DESIGN_CONSTRAINT:46,LOW_RISK:47,MED_RISK:48,HIGH_RISK:49,VERIFY_ANALYSIS:50,VERIFY_DEMONSTRATION:51,VERIFY_INSPECTION:52,VERIFY_TEST:53,ELEMENT:54,elementName:55,elementBody:56,TYPE:57,type:58,DOCREF:59,ref:60,END_ARROW_L:61,relationship:62,LINE:63,END_ARROW_R:64,CONTAINS:65,COPIES:66,DERIVES:67,SATISFIES:68,VERIFIES:69,REFINES:70,TRACES:71,CLASSDEF:72,stylesOpt:73,CLASS:74,ALPHA:75,COMMA:76,STYLE:77,style:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,MINUS:86,LABEL:87,SEMICOLON:88,unqString:89,qString:90,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",21:"direction_tb",22:"direction_bt",23:"direction_rl",24:"direction_lr",27:"STRUCT_START",29:"STYLE_SEPARATOR",31:"ID",32:"COLONSEP",34:"TEXT",36:"RISK",38:"VERIFYMTHD",40:"STRUCT_STOP",41:"REQUIREMENT",42:"FUNCTIONAL_REQUIREMENT",43:"INTERFACE_REQUIREMENT",44:"PERFORMANCE_REQUIREMENT",45:"PHYSICAL_REQUIREMENT",46:"DESIGN_CONSTRAINT",47:"LOW_RISK",48:"MED_RISK",49:"HIGH_RISK",50:"VERIFY_ANALYSIS",51:"VERIFY_DEMONSTRATION",52:"VERIFY_INSPECTION",53:"VERIFY_TEST",54:"ELEMENT",57:"TYPE",59:"DOCREF",61:"END_ARROW_L",63:"LINE",64:"END_ARROW_R",65:"CONTAINS",66:"COPIES",67:"DERIVES",68:"SATISFIES",69:"VERIFIES",70:"REFINES",71:"TRACES",72:"CLASSDEF",74:"CLASS",75:"ALPHA",76:"COMMA",77:"STYLE",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",86:"MINUS",87:"LABEL",88:"SEMICOLON",89:"unqString",90:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[17,1],[17,1],[17,1],[17,1],[14,5],[14,7],[28,5],[28,5],[28,5],[28,5],[28,2],[28,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[37,1],[37,1],[37,1],[39,1],[39,1],[39,1],[39,1],[15,5],[15,7],[56,5],[56,5],[56,2],[56,1],[16,5],[16,5],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[19,3],[20,3],[20,3],[30,1],[30,3],[30,1],[30,3],[18,3],[73,1],[73,3],[78,1],[78,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[26,1],[26,1],[33,1],[33,1],[35,1],[35,1],[55,1],[55,1],[58,1],[58,1],[60,1],[60,1]],performAction:o(function(xe,Y,he,z,se,le,ke){var ve=le.length-1;switch(se){case 4:this.$=le[ve].trim(),z.setAccTitle(this.$);break;case 5:case 6:this.$=le[ve].trim(),z.setAccDescription(this.$);break;case 7:this.$=[];break;case 17:z.setDirection("TB");break;case 18:z.setDirection("BT");break;case 19:z.setDirection("RL");break;case 20:z.setDirection("LR");break;case 21:z.addRequirement(le[ve-3],le[ve-4]);break;case 22:z.addRequirement(le[ve-5],le[ve-6]),z.setClass([le[ve-5]],le[ve-3]);break;case 23:z.setNewReqId(le[ve-2]);break;case 24:z.setNewReqText(le[ve-2]);break;case 25:z.setNewReqRisk(le[ve-2]);break;case 26:z.setNewReqVerifyMethod(le[ve-2]);break;case 29:this.$=z.RequirementType.REQUIREMENT;break;case 30:this.$=z.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 31:this.$=z.RequirementType.INTERFACE_REQUIREMENT;break;case 32:this.$=z.RequirementType.PERFORMANCE_REQUIREMENT;break;case 33:this.$=z.RequirementType.PHYSICAL_REQUIREMENT;break;case 34:this.$=z.RequirementType.DESIGN_CONSTRAINT;break;case 35:this.$=z.RiskLevel.LOW_RISK;break;case 36:this.$=z.RiskLevel.MED_RISK;break;case 37:this.$=z.RiskLevel.HIGH_RISK;break;case 38:this.$=z.VerifyType.VERIFY_ANALYSIS;break;case 39:this.$=z.VerifyType.VERIFY_DEMONSTRATION;break;case 40:this.$=z.VerifyType.VERIFY_INSPECTION;break;case 41:this.$=z.VerifyType.VERIFY_TEST;break;case 42:z.addElement(le[ve-3]);break;case 43:z.addElement(le[ve-5]),z.setClass([le[ve-5]],le[ve-3]);break;case 44:z.setNewElementType(le[ve-2]);break;case 45:z.setNewElementDocRef(le[ve-2]);break;case 48:z.addRelationship(le[ve-2],le[ve],le[ve-4]);break;case 49:z.addRelationship(le[ve-2],le[ve-4],le[ve]);break;case 50:this.$=z.Relationships.CONTAINS;break;case 51:this.$=z.Relationships.COPIES;break;case 52:this.$=z.Relationships.DERIVES;break;case 53:this.$=z.Relationships.SATISFIES;break;case 54:this.$=z.Relationships.VERIFIES;break;case 55:this.$=z.Relationships.REFINES;break;case 56:this.$=z.Relationships.TRACES;break;case 57:this.$=le[ve-2],z.defineClass(le[ve-1],le[ve]);break;case 58:z.setClass(le[ve-1],le[ve]);break;case 59:z.setClass([le[ve-2]],le[ve]);break;case 60:case 62:this.$=[le[ve]];break;case 61:case 63:this.$=le[ve-2].concat([le[ve]]);break;case 64:this.$=le[ve-2],z.setCssStyle(le[ve-1],le[ve]);break;case 65:this.$=[le[ve]];break;case 66:le[ve-2].push(le[ve]),this.$=le[ve-2];break;case 68:this.$=le[ve-1]+le[ve];break}},"anonymous"),table:[{3:1,4:2,6:e,9:r,11:n,13:i},{1:[3]},{3:8,4:2,5:[1,7],6:e,9:r,11:n,13:i},{5:[1,9]},{10:[1,10]},{12:[1,11]},t(a,[2,6]),{3:12,4:2,6:e,9:r,11:n,13:i},{1:[2,2]},{4:17,5:s,7:13,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:S,77:w,89:k,90:C},t(a,[2,4]),t(a,[2,5]),{1:[2,1]},{8:[1,41]},{4:17,5:s,7:42,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:S,77:w,89:k,90:C},{4:17,5:s,7:43,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:S,77:w,89:k,90:C},{4:17,5:s,7:44,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:S,77:w,89:k,90:C},{4:17,5:s,7:45,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:S,77:w,89:k,90:C},{4:17,5:s,7:46,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:S,77:w,89:k,90:C},{4:17,5:s,7:47,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:S,77:w,89:k,90:C},{4:17,5:s,7:48,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:S,77:w,89:k,90:C},{4:17,5:s,7:49,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:S,77:w,89:k,90:C},{4:17,5:s,7:50,8:l,9:r,11:n,13:i,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:u,22:h,23:f,24:d,25:23,33:25,41:p,42:m,43:g,44:y,45:v,46:x,54:b,72:T,74:S,77:w,89:k,90:C},{26:51,89:[1,52],90:[1,53]},{55:54,89:[1,55],90:[1,56]},{29:[1,59],61:[1,57],63:[1,58]},t(A,[2,17]),t(A,[2,18]),t(A,[2,19]),t(A,[2,20]),{30:60,33:62,75:L,89:k,90:C},{30:63,33:62,75:L,89:k,90:C},{30:64,33:62,75:L,89:k,90:C},t(I,[2,29]),t(I,[2,30]),t(I,[2,31]),t(I,[2,32]),t(I,[2,33]),t(I,[2,34]),t(R,[2,81]),t(R,[2,82]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{8:[2,13]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{27:[1,65],29:[1,66]},t(E,[2,79]),t(E,[2,80]),{27:[1,67],29:[1,68]},t(E,[2,85]),t(E,[2,86]),{62:69,65:_,66:D,67:O,68:N,69:P,70:B,71:F},{62:77,65:_,66:D,67:O,68:N,69:P,70:B,71:F},{30:78,33:62,75:L,89:k,90:C},{73:79,75:V,76:$,78:81,79:82,80:U,81:j,82:ee,83:q,84:oe,85:Q,86:ue,87:te,88:re},t(J,[2,60]),t(J,[2,62]),{73:93,75:V,76:$,78:81,79:82,80:U,81:j,82:ee,83:q,84:oe,85:Q,86:ue,87:te,88:re},{30:94,33:62,75:L,76:$,89:k,90:C},{5:[1,95]},{30:96,33:62,75:L,89:k,90:C},{5:[1,97]},{30:98,33:62,75:L,89:k,90:C},{63:[1,99]},t(K,[2,50]),t(K,[2,51]),t(K,[2,52]),t(K,[2,53]),t(K,[2,54]),t(K,[2,55]),t(K,[2,56]),{64:[1,100]},t(A,[2,59],{76:$}),t(A,[2,64],{76:ae}),{33:103,75:[1,102],89:k,90:C},t(Z,[2,65],{79:104,75:V,80:U,81:j,82:ee,83:q,84:oe,85:Q,86:ue,87:te,88:re}),t(de,[2,67]),t(de,[2,69]),t(de,[2,70]),t(de,[2,71]),t(de,[2,72]),t(de,[2,73]),t(de,[2,74]),t(de,[2,75]),t(de,[2,76]),t(de,[2,77]),t(de,[2,78]),t(A,[2,57],{76:ae}),t(A,[2,58],{76:$}),{5:ne,28:105,31:Te,34:W,36:Ve,38:pe,40:Be},{27:[1,112],76:$},{5:Ye,40:He,56:113,57:Le,59:Ie},{27:[1,118],76:$},{33:119,89:k,90:C},{33:120,89:k,90:C},{75:V,78:121,79:82,80:U,81:j,82:ee,83:q,84:oe,85:Q,86:ue,87:te,88:re},t(J,[2,61]),t(J,[2,63]),t(de,[2,68]),t(A,[2,21]),{32:[1,122]},{32:[1,123]},{32:[1,124]},{32:[1,125]},{5:ne,28:126,31:Te,34:W,36:Ve,38:pe,40:Be},t(A,[2,28]),{5:[1,127]},t(A,[2,42]),{32:[1,128]},{32:[1,129]},{5:Ye,40:He,56:130,57:Le,59:Ie},t(A,[2,47]),{5:[1,131]},t(A,[2,48]),t(A,[2,49]),t(Z,[2,66],{79:104,75:V,80:U,81:j,82:ee,83:q,84:oe,85:Q,86:ue,87:te,88:re}),{33:132,89:k,90:C},{35:133,89:[1,134],90:[1,135]},{37:136,47:[1,137],48:[1,138],49:[1,139]},{39:140,50:[1,141],51:[1,142],52:[1,143],53:[1,144]},t(A,[2,27]),{5:ne,28:145,31:Te,34:W,36:Ve,38:pe,40:Be},{58:146,89:[1,147],90:[1,148]},{60:149,89:[1,150],90:[1,151]},t(A,[2,46]),{5:Ye,40:He,56:152,57:Le,59:Ie},{5:[1,153]},{5:[1,154]},{5:[2,83]},{5:[2,84]},{5:[1,155]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[1,156]},{5:[2,38]},{5:[2,39]},{5:[2,40]},{5:[2,41]},t(A,[2,22]),{5:[1,157]},{5:[2,87]},{5:[2,88]},{5:[1,158]},{5:[2,89]},{5:[2,90]},t(A,[2,43]),{5:ne,28:159,31:Te,34:W,36:Ve,38:pe,40:Be},{5:ne,28:160,31:Te,34:W,36:Ve,38:pe,40:Be},{5:ne,28:161,31:Te,34:W,36:Ve,38:pe,40:Be},{5:ne,28:162,31:Te,34:W,36:Ve,38:pe,40:Be},{5:Ye,40:He,56:163,57:Le,59:Ie},{5:Ye,40:He,56:164,57:Le,59:Ie},t(A,[2,23]),t(A,[2,24]),t(A,[2,25]),t(A,[2,26]),t(A,[2,44]),t(A,[2,45])],defaultActions:{8:[2,2],12:[2,1],41:[2,3],42:[2,8],43:[2,9],44:[2,10],45:[2,11],46:[2,12],47:[2,13],48:[2,14],49:[2,15],50:[2,16],134:[2,83],135:[2,84],137:[2,35],138:[2,36],139:[2,37],141:[2,38],142:[2,39],143:[2,40],144:[2,41],147:[2,87],148:[2,88],150:[2,89],151:[2,90]},parseError:o(function(xe,Y){if(Y.recoverable)this.trace(xe);else{var he=new Error(xe);throw he.hash=Y,he}},"parseError"),parse:o(function(xe){var Y=this,he=[0],z=[],se=[null],le=[],ke=this.table,ve="",ye=0,Re=0,_e=0,ze=2,Ke=1,xt=le.slice.call(arguments,1),We=Object.create(this.lexer),Oe={yy:{}};for(var et in this.yy)Object.prototype.hasOwnProperty.call(this.yy,et)&&(Oe.yy[et]=this.yy[et]);We.setInput(xe,Oe.yy),Oe.yy.lexer=We,Oe.yy.parser=this,typeof We.yylloc>"u"&&(We.yylloc={});var Ue=We.yylloc;le.push(Ue);var lt=We.options&&We.options.ranges;typeof Oe.yy.parseError=="function"?this.parseError=Oe.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Gt(ar){he.length=he.length-2*ar,se.length=se.length-ar,le.length=le.length-ar}o(Gt,"popStack");function vt(){var ar;return ar=z.pop()||We.lex()||Ke,typeof ar!="number"&&(ar instanceof Array&&(z=ar,ar=z.pop()),ar=Y.symbols_[ar]||ar),ar}o(vt,"lex");for(var Lt,dt,nt,bt,wt,yt,ft={},Ur,_t,bn,Br;;){if(nt=he[he.length-1],this.defaultActions[nt]?bt=this.defaultActions[nt]:((Lt===null||typeof Lt>"u")&&(Lt=vt()),bt=ke[nt]&&ke[nt][Lt]),typeof bt>"u"||!bt.length||!bt[0]){var cr="";Br=[];for(Ur in ke[nt])this.terminals_[Ur]&&Ur>ze&&Br.push("'"+this.terminals_[Ur]+"'");We.showPosition?cr="Parse error on line "+(ye+1)+`: +`+We.showPosition()+` +Expecting `+Br.join(", ")+", got '"+(this.terminals_[Lt]||Lt)+"'":cr="Parse error on line "+(ye+1)+": Unexpected "+(Lt==Ke?"end of input":"'"+(this.terminals_[Lt]||Lt)+"'"),this.parseError(cr,{text:We.match,token:this.terminals_[Lt]||Lt,line:We.yylineno,loc:Ue,expected:Br})}if(bt[0]instanceof Array&&bt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+nt+", token: "+Lt);switch(bt[0]){case 1:he.push(Lt),se.push(We.yytext),le.push(We.yylloc),he.push(bt[1]),Lt=null,dt?(Lt=dt,dt=null):(Re=We.yyleng,ve=We.yytext,ye=We.yylineno,Ue=We.yylloc,_e>0&&_e--);break;case 2:if(_t=this.productions_[bt[1]][1],ft.$=se[se.length-_t],ft._$={first_line:le[le.length-(_t||1)].first_line,last_line:le[le.length-1].last_line,first_column:le[le.length-(_t||1)].first_column,last_column:le[le.length-1].last_column},lt&&(ft._$.range=[le[le.length-(_t||1)].range[0],le[le.length-1].range[1]]),yt=this.performAction.apply(ft,[ve,Re,ye,Oe.yy,bt[1],se,le].concat(xt)),typeof yt<"u")return yt;_t&&(he=he.slice(0,-1*_t*2),se=se.slice(0,-1*_t),le=le.slice(0,-1*_t)),he.push(this.productions_[bt[1]][0]),se.push(ft.$),le.push(ft._$),bn=ke[he[he.length-2]][he[he.length-1]],he.push(bn);break;case 3:return!0}}return!0},"parse")},Ce=(function(){var fe={EOF:1,parseError:o(function(Y,he){if(this.yy.parser)this.yy.parser.parseError(Y,he);else throw new Error(Y)},"parseError"),setInput:o(function(xe,Y){return this.yy=Y||this.yy||{},this._input=xe,this._more=this._backtrack=this.done=!1,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},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var xe=this._input[0];this.yytext+=xe,this.yyleng++,this.offset++,this.match+=xe,this.matched+=xe;var Y=xe.match(/(?:\r\n?|\n).*/g);return Y?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),xe},"input"),unput:o(function(xe){var Y=xe.length,he=xe.split(/(?:\r\n?|\n)/g);this._input=xe+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Y),this.offset-=Y;var z=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),he.length-1&&(this.yylineno-=he.length-1);var se=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:he?(he.length===z.length?this.yylloc.first_column:0)+z[z.length-he.length].length-he[0].length:this.yylloc.first_column-Y},this.options.ranges&&(this.yylloc.range=[se[0],se[0]+this.yyleng-Y]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(xe){this.unput(this.match.slice(xe))},"less"),pastInput:o(function(){var xe=this.matched.substr(0,this.matched.length-this.match.length);return(xe.length>20?"...":"")+xe.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var xe=this.match;return xe.length<20&&(xe+=this._input.substr(0,20-xe.length)),(xe.substr(0,20)+(xe.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var xe=this.pastInput(),Y=new Array(xe.length+1).join("-");return xe+this.upcomingInput()+` +`+Y+"^"},"showPosition"),test_match:o(function(xe,Y){var he,z,se;if(this.options.backtrack_lexer&&(se={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},this.options.ranges&&(se.yylloc.range=this.yylloc.range.slice(0))),z=xe[0].match(/(?:\r\n?|\n).*/g),z&&(this.yylineno+=z.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:z?z[z.length-1].length-z[z.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+xe[0].length},this.yytext+=xe[0],this.match+=xe[0],this.matches=xe,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(xe[0].length),this.matched+=xe[0],he=this.performAction.call(this,this.yy,this,Y,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),he)return he;if(this._backtrack){for(var le in se)this[le]=se[le];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var xe,Y,he,z;this._more||(this.yytext="",this.match="");for(var se=this._currentRules(),le=0;leY[0].length)){if(Y=he,z=le,this.options.backtrack_lexer){if(xe=this.test_match(he,se[le]),xe!==!1)return xe;if(this._backtrack){Y=!1;continue}else return!1}else if(!this.options.flex)break}return Y?(xe=this.test_match(Y,se[z]),xe!==!1?xe:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Y=this.next();return Y||this.lex()},"lex"),begin:o(function(Y){this.conditionStack.push(Y)},"begin"),popState:o(function(){var Y=this.conditionStack.length-1;return Y>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Y){return Y=this.conditionStack.length-1-Math.abs(Y||0),Y>=0?this.conditionStack[Y]:"INITIAL"},"topState"),pushState:o(function(Y){this.begin(Y)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(Y,he,z,se){var le=se;switch(z){case 0:return"title";case 1:return this.begin("acc_title"),9;break;case 2:return this.popState(),"acc_title_value";break;case 3:return this.begin("acc_descr"),11;break;case 4:return this.popState(),"acc_descr_value";break;case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:return 21;case 9:return 22;case 10:return 23;case 11:return 24;case 12:return 5;case 13:break;case 14:break;case 15:break;case 16:return 8;case 17:return 6;case 18:return 27;case 19:return 40;case 20:return 29;case 21:return 32;case 22:return 31;case 23:return 34;case 24:return 36;case 25:return 38;case 26:return 41;case 27:return 42;case 28:return 43;case 29:return 44;case 30:return 45;case 31:return 46;case 32:return 47;case 33:return 48;case 34:return 49;case 35:return 50;case 36:return 51;case 37:return 52;case 38:return 53;case 39:return 54;case 40:return 65;case 41:return 66;case 42:return 67;case 43:return 68;case 44:return 69;case 45:return 70;case 46:return 71;case 47:return 57;case 48:return 59;case 49:return this.begin("style"),77;break;case 50:return 75;case 51:return 81;case 52:return 88;case 53:return"PERCENT";case 54:return 86;case 55:return 84;case 56:break;case 57:this.begin("string");break;case 58:this.popState();break;case 59:return this.begin("style"),72;break;case 60:return this.begin("style"),74;break;case 61:return 61;case 62:return 64;case 63:return 63;case 64:this.begin("string");break;case 65:this.popState();break;case 66:return"qString";case 67:return he.yytext=he.yytext.trim(),89;break;case 68:return 75;case 69:return 80;case 70:return 76}},"anonymous"),rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::{3})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:style\b)/i,/^(?:\w+)/i,/^(?::)/i,/^(?:;)/i,/^(?:%)/i,/^(?:-)/i,/^(?:#)/i,/^(?: )/i,/^(?:["])/i,/^(?:\n)/i,/^(?:classDef\b)/i,/^(?:class\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^:,\r\n\{\<\>\-\=]*)/i,/^(?:\w+)/i,/^(?:[0-9]+)/i,/^(?:,)/i],conditions:{acc_descr_multiline:{rules:[6,7,68,69,70],inclusive:!1},acc_descr:{rules:[4,68,69,70],inclusive:!1},acc_title:{rules:[2,68,69,70],inclusive:!1},style:{rules:[50,51,52,53,54,55,56,57,58,68,69,70],inclusive:!1},unqString:{rules:[68,69,70],inclusive:!1},token:{rules:[68,69,70],inclusive:!1},string:{rules:[65,66,68,69,70],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,59,60,61,62,63,64,67,68,69,70],inclusive:!0}}};return fe})();Ne.lexer=Ce;function Fe(){this.yy={}}return o(Fe,"Parser"),Fe.prototype=Ne,Ne.Parser=Fe,new Fe})();e$.parser=e$;_ye=e$});var Z6,Lye=M(()=>{"use strict";Xt();pt();ci();Z6=class{constructor(){this.relations=[];this.latestRequirement=this.getInitialRequirement();this.requirements=new Map;this.latestElement=this.getInitialElement();this.elements=new Map;this.classes=new Map;this.direction="TB";this.RequirementType={REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"};this.RiskLevel={LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"};this.VerifyType={VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"};this.Relationships={CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"};this.setAccTitle=Rr;this.getAccTitle=Mr;this.setAccDescription=Ir;this.getAccDescription=Or;this.setDiagramTitle=$r;this.getDiagramTitle=Pr;this.getConfig=o(()=>ge().requirement,"getConfig");this.clear(),this.setDirection=this.setDirection.bind(this),this.addRequirement=this.addRequirement.bind(this),this.setNewReqId=this.setNewReqId.bind(this),this.setNewReqRisk=this.setNewReqRisk.bind(this),this.setNewReqText=this.setNewReqText.bind(this),this.setNewReqVerifyMethod=this.setNewReqVerifyMethod.bind(this),this.addElement=this.addElement.bind(this),this.setNewElementType=this.setNewElementType.bind(this),this.setNewElementDocRef=this.setNewElementDocRef.bind(this),this.addRelationship=this.addRelationship.bind(this),this.setCssStyle=this.setCssStyle.bind(this),this.setClass=this.setClass.bind(this),this.defineClass=this.defineClass.bind(this),this.setAccTitle=this.setAccTitle.bind(this),this.setAccDescription=this.setAccDescription.bind(this)}static{o(this,"RequirementDB")}getDirection(){return this.direction}setDirection(e){this.direction=e}resetLatestRequirement(){this.latestRequirement=this.getInitialRequirement()}resetLatestElement(){this.latestElement=this.getInitialElement()}getInitialRequirement(){return{requirementId:"",text:"",risk:"",verifyMethod:"",name:"",type:"",cssStyles:[],classes:["default"]}}getInitialElement(){return{name:"",type:"",docRef:"",cssStyles:[],classes:["default"]}}addRequirement(e,r){return this.requirements.has(e)||this.requirements.set(e,{name:e,type:r,requirementId:this.latestRequirement.requirementId,text:this.latestRequirement.text,risk:this.latestRequirement.risk,verifyMethod:this.latestRequirement.verifyMethod,cssStyles:[],classes:["default"]}),this.resetLatestRequirement(),this.requirements.get(e)}getRequirements(){return this.requirements}setNewReqId(e){this.latestRequirement!==void 0&&(this.latestRequirement.requirementId=e)}setNewReqText(e){this.latestRequirement!==void 0&&(this.latestRequirement.text=e)}setNewReqRisk(e){this.latestRequirement!==void 0&&(this.latestRequirement.risk=e)}setNewReqVerifyMethod(e){this.latestRequirement!==void 0&&(this.latestRequirement.verifyMethod=e)}addElement(e){return this.elements.has(e)||(this.elements.set(e,{name:e,type:this.latestElement.type,docRef:this.latestElement.docRef,cssStyles:[],classes:["default"]}),X.info("Added new element: ",e)),this.resetLatestElement(),this.elements.get(e)}getElements(){return this.elements}setNewElementType(e){this.latestElement!==void 0&&(this.latestElement.type=e)}setNewElementDocRef(e){this.latestElement!==void 0&&(this.latestElement.docRef=e)}addRelationship(e,r,n){this.relations.push({type:e,src:r,dst:n})}getRelationships(){return this.relations}clear(){this.relations=[],this.resetLatestRequirement(),this.requirements=new Map,this.resetLatestElement(),this.elements=new Map,this.classes=new Map,Sr()}setCssStyle(e,r){for(let n of e){let i=this.requirements.get(n)??this.elements.get(n);if(!r||!i)return;for(let a of r)a.includes(",")?i.cssStyles.push(...a.split(",")):i.cssStyles.push(a)}}setClass(e,r){for(let n of e){let i=this.requirements.get(n)??this.elements.get(n);if(i)for(let a of r){i.classes.push(a);let s=this.classes.get(a)?.styles;s&&i.cssStyles.push(...s)}}}defineClass(e,r){for(let n of e){let i=this.classes.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.classes.set(n,i)),r&&r.forEach(function(a){if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)}),this.requirements.forEach(a=>{a.classes.includes(n)&&a.cssStyles.push(...r.flatMap(s=>s.split(",")))}),this.elements.forEach(a=>{a.classes.includes(n)&&a.cssStyles.push(...r.flatMap(s=>s.split(",")))})}}getClasses(){return this.classes}getData(){let e=ge(),r=[],n=[];for(let i of this.requirements.values()){let a=i;a.id=i.name,a.cssStyles=i.cssStyles,a.cssClasses=i.classes.join(" "),a.shape="requirementBox",a.look=e.look,r.push(a)}for(let i of this.elements.values()){let a=i;a.shape="requirementBox",a.look=e.look,a.id=i.name,a.cssStyles=i.cssStyles,a.cssClasses=i.classes.join(" "),r.push(a)}for(let i of this.relations){let a=0,s=i.type===this.Relationships.CONTAINS,l={id:`${i.src}-${i.dst}-${a}`,start:this.requirements.get(i.src)?.name??this.elements.get(i.src)?.name,end:this.requirements.get(i.dst)?.name??this.elements.get(i.dst)?.name,label:`<<${i.type}>>`,classes:"relationshipLine",style:["fill:none",s?"":"stroke-dasharray: 10,7"],labelpos:"c",thickness:"normal",type:"normal",pattern:s?"normal":"dashed",arrowTypeStart:s?"requirement_contains":"",arrowTypeEnd:s?"":"requirement_arrow",look:e.look};n.push(l),a++}return{nodes:r,edges:n,other:{},config:e,direction:this.getDirection()}}}});var YZe,Rye,Nye=M(()=>{"use strict";YZe=o(t=>` + + marker { + fill: ${t.relationColor}; + stroke: ${t.relationColor}; + } + + marker.cross { + stroke: ${t.lineColor}; + } + + svg { + font-family: ${t.fontFamily}; + font-size: ${t.fontSize}; + } + + .reqBox { + fill: ${t.requirementBackground}; + fill-opacity: 1.0; + stroke: ${t.requirementBorderColor}; + stroke-width: ${t.requirementBorderSize}; + } + + .reqTitle, .reqLabel{ + fill: ${t.requirementTextColor}; + } + .reqLabelBox { + fill: ${t.relationLabelBackground}; + fill-opacity: 1.0; + } + + .req-title-line { + stroke: ${t.requirementBorderColor}; + stroke-width: ${t.requirementBorderSize}; + } + .relationshipLine { + stroke: ${t.relationColor}; + stroke-width: 1; + } + .relationshipLabel { + fill: ${t.relationLabelColor}; + } + .divider { + stroke: ${t.nodeBorder}; + stroke-width: 1; + } + .label { + font-family: ${t.fontFamily}; + color: ${t.nodeTextColor||t.textColor}; + } + .label text,span { + fill: ${t.nodeTextColor||t.textColor}; + color: ${t.nodeTextColor||t.textColor}; + } + .labelBkg { + background-color: ${t.edgeLabelBackground}; + } + +`,"getStyles"),Rye=YZe});var t$={};dr(t$,{draw:()=>XZe});var XZe,Mye=M(()=>{"use strict";Xt();pt();ep();Nf();Mf();tr();XZe=o(async function(t,e,r,n){X.info("REF0:"),X.info("Drawing requirement diagram (unified)",e);let{securityLevel:i,state:a,layout:s}=ge(),l=n.db.getData(),u=Vo(e,i);l.type=n.type,l.layoutAlgorithm=$c(s),l.nodeSpacing=a?.nodeSpacing??50,l.rankSpacing=a?.rankSpacing??50,l.markers=["requirement_contains","requirement_arrow"],l.diagramId=e,await Qo(l,u);let h=8;qt.insertTitle(u,"requirementDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Ws(u,h,"requirementDiagram",a?.useMaxWidth??!0)},"draw")});var Iye={};dr(Iye,{diagram:()=>jZe});var jZe,Oye=M(()=>{"use strict";Dye();Lye();Nye();Mye();jZe={parser:_ye,get db(){return new Z6},renderer:t$,styles:Rye}});var r$,Fye,$ye=M(()=>{"use strict";r$=(function(){var t=o(function(re,J,K,ae){for(K=K||{},ae=re.length;ae--;K[re[ae]]=J);return K},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,13],u=[1,14],h=[1,16],f=[1,17],d=[1,18],p=[1,24],m=[1,25],g=[1,26],y=[1,27],v=[1,28],x=[1,29],b=[1,30],T=[1,31],S=[1,32],w=[1,33],k=[1,34],C=[1,35],A=[1,36],L=[1,37],I=[1,38],R=[1,39],E=[1,41],_=[1,42],D=[1,43],O=[1,44],N=[1,45],P=[1,46],B=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,55,60,61,62,63,71],F=[2,71],V=[4,5,16,50,52,53],$=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,55,60,61,62,63,71],U=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,55,60,61,62,63,71],j=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,55,60,61,62,63,71],ee=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,55,60,61,62,63,71],q=[69,70,71],oe=[1,127],Q={trace:o(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,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,actor_with_config:54,note:55,placement:56,text2:57,over:58,actor_pair:59,links:60,link:61,properties:62,details:63,spaceList:64,",":65,left_of:66,right_of:67,signaltype:68,"+":69,"-":70,ACTOR:71,config_object:72,CONFIG_START:73,CONFIG_CONTENT:74,CONFIG_END:75,SOLID_OPEN_ARROW:76,DOTTED_OPEN_ARROW:77,SOLID_ARROW:78,BIDIRECTIONAL_SOLID_ARROW:79,DOTTED_ARROW:80,BIDIRECTIONAL_DOTTED_ARROW:81,SOLID_CROSS:82,DOTTED_CROSS:83,SOLID_POINT:84,DOTTED_POINT:85,TXT:86,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",55:"note",58:"over",60:"links",61:"link",62:"properties",63:"details",65:",",66:"left_of",67:"right_of",69:"+",70:"-",71:"ACTOR",73:"CONFIG_START",74:"CONFIG_CONTENT",75:"CONFIG_END",76:"SOLID_OPEN_ARROW",77:"DOTTED_OPEN_ARROW",78:"SOLID_ARROW",79:"BIDIRECTIONAL_SOLID_ARROW",80:"DOTTED_ARROW",81:"BIDIRECTIONAL_DOTTED_ARROW",82:"SOLID_CROSS",83:"DOTTED_CROSS",84:"SOLID_POINT",85:"DOTTED_POINT",86:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[64,2],[64,1],[59,3],[59,1],[56,1],[56,1],[17,5],[17,5],[17,4],[54,2],[72,3],[22,1],[68,1],[68,1],[68,1],[68,1],[68,1],[68,1],[68,1],[68,1],[68,1],[68,1],[57,1]],performAction:o(function(J,K,ae,Z,de,ne,Te){var W=ne.length-1;switch(de){case 3:return Z.apply(ne[W]),ne[W];break;case 4:case 9:this.$=[];break;case 5:case 10:ne[W-1].push(ne[W]),this.$=ne[W-1];break;case 6:case 7:case 11:case 12:this.$=ne[W];break;case 8:case 13:this.$=[];break;case 15:ne[W].type="createParticipant",this.$=ne[W];break;case 16:ne[W-1].unshift({type:"boxStart",boxData:Z.parseBoxData(ne[W-2])}),ne[W-1].push({type:"boxEnd",boxText:ne[W-2]}),this.$=ne[W-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(ne[W-2]),sequenceIndexStep:Number(ne[W-1]),sequenceVisible:!0,signalType:Z.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(ne[W-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:Z.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:Z.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:Z.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:Z.LINETYPE.ACTIVE_START,actor:ne[W-1].actor};break;case 23:this.$={type:"activeEnd",signalType:Z.LINETYPE.ACTIVE_END,actor:ne[W-1].actor};break;case 29:Z.setDiagramTitle(ne[W].substring(6)),this.$=ne[W].substring(6);break;case 30:Z.setDiagramTitle(ne[W].substring(7)),this.$=ne[W].substring(7);break;case 31:this.$=ne[W].trim(),Z.setAccTitle(this.$);break;case 32:case 33:this.$=ne[W].trim(),Z.setAccDescription(this.$);break;case 34:ne[W-1].unshift({type:"loopStart",loopText:Z.parseMessage(ne[W-2]),signalType:Z.LINETYPE.LOOP_START}),ne[W-1].push({type:"loopEnd",loopText:ne[W-2],signalType:Z.LINETYPE.LOOP_END}),this.$=ne[W-1];break;case 35:ne[W-1].unshift({type:"rectStart",color:Z.parseMessage(ne[W-2]),signalType:Z.LINETYPE.RECT_START}),ne[W-1].push({type:"rectEnd",color:Z.parseMessage(ne[W-2]),signalType:Z.LINETYPE.RECT_END}),this.$=ne[W-1];break;case 36:ne[W-1].unshift({type:"optStart",optText:Z.parseMessage(ne[W-2]),signalType:Z.LINETYPE.OPT_START}),ne[W-1].push({type:"optEnd",optText:Z.parseMessage(ne[W-2]),signalType:Z.LINETYPE.OPT_END}),this.$=ne[W-1];break;case 37:ne[W-1].unshift({type:"altStart",altText:Z.parseMessage(ne[W-2]),signalType:Z.LINETYPE.ALT_START}),ne[W-1].push({type:"altEnd",signalType:Z.LINETYPE.ALT_END}),this.$=ne[W-1];break;case 38:ne[W-1].unshift({type:"parStart",parText:Z.parseMessage(ne[W-2]),signalType:Z.LINETYPE.PAR_START}),ne[W-1].push({type:"parEnd",signalType:Z.LINETYPE.PAR_END}),this.$=ne[W-1];break;case 39:ne[W-1].unshift({type:"parStart",parText:Z.parseMessage(ne[W-2]),signalType:Z.LINETYPE.PAR_OVER_START}),ne[W-1].push({type:"parEnd",signalType:Z.LINETYPE.PAR_END}),this.$=ne[W-1];break;case 40:ne[W-1].unshift({type:"criticalStart",criticalText:Z.parseMessage(ne[W-2]),signalType:Z.LINETYPE.CRITICAL_START}),ne[W-1].push({type:"criticalEnd",signalType:Z.LINETYPE.CRITICAL_END}),this.$=ne[W-1];break;case 41:ne[W-1].unshift({type:"breakStart",breakText:Z.parseMessage(ne[W-2]),signalType:Z.LINETYPE.BREAK_START}),ne[W-1].push({type:"breakEnd",optText:Z.parseMessage(ne[W-2]),signalType:Z.LINETYPE.BREAK_END}),this.$=ne[W-1];break;case 43:this.$=ne[W-3].concat([{type:"option",optionText:Z.parseMessage(ne[W-1]),signalType:Z.LINETYPE.CRITICAL_OPTION},ne[W]]);break;case 45:this.$=ne[W-3].concat([{type:"and",parText:Z.parseMessage(ne[W-1]),signalType:Z.LINETYPE.PAR_AND},ne[W]]);break;case 47:this.$=ne[W-3].concat([{type:"else",altText:Z.parseMessage(ne[W-1]),signalType:Z.LINETYPE.ALT_ELSE},ne[W]]);break;case 48:ne[W-3].draw="participant",ne[W-3].type="addParticipant",ne[W-3].description=Z.parseMessage(ne[W-1]),this.$=ne[W-3];break;case 49:ne[W-1].draw="participant",ne[W-1].type="addParticipant",this.$=ne[W-1];break;case 50:ne[W-3].draw="actor",ne[W-3].type="addParticipant",ne[W-3].description=Z.parseMessage(ne[W-1]),this.$=ne[W-3];break;case 51:ne[W-1].draw="actor",ne[W-1].type="addParticipant",this.$=ne[W-1];break;case 52:ne[W-1].type="destroyParticipant",this.$=ne[W-1];break;case 53:ne[W-1].draw="participant",ne[W-1].type="addParticipant",this.$=ne[W-1];break;case 54:this.$=[ne[W-1],{type:"addNote",placement:ne[W-2],actor:ne[W-1].actor,text:ne[W]}];break;case 55:ne[W-2]=[].concat(ne[W-1],ne[W-1]).slice(0,2),ne[W-2][0]=ne[W-2][0].actor,ne[W-2][1]=ne[W-2][1].actor,this.$=[ne[W-1],{type:"addNote",placement:Z.PLACEMENT.OVER,actor:ne[W-2].slice(0,2),text:ne[W]}];break;case 56:this.$=[ne[W-1],{type:"addLinks",actor:ne[W-1].actor,text:ne[W]}];break;case 57:this.$=[ne[W-1],{type:"addALink",actor:ne[W-1].actor,text:ne[W]}];break;case 58:this.$=[ne[W-1],{type:"addProperties",actor:ne[W-1].actor,text:ne[W]}];break;case 59:this.$=[ne[W-1],{type:"addDetails",actor:ne[W-1].actor,text:ne[W]}];break;case 62:this.$=[ne[W-2],ne[W]];break;case 63:this.$=ne[W];break;case 64:this.$=Z.PLACEMENT.LEFTOF;break;case 65:this.$=Z.PLACEMENT.RIGHTOF;break;case 66:this.$=[ne[W-4],ne[W-1],{type:"addMessage",from:ne[W-4].actor,to:ne[W-1].actor,signalType:ne[W-3],msg:ne[W],activate:!0},{type:"activeStart",signalType:Z.LINETYPE.ACTIVE_START,actor:ne[W-1].actor}];break;case 67:this.$=[ne[W-4],ne[W-1],{type:"addMessage",from:ne[W-4].actor,to:ne[W-1].actor,signalType:ne[W-3],msg:ne[W]},{type:"activeEnd",signalType:Z.LINETYPE.ACTIVE_END,actor:ne[W-4].actor}];break;case 68:this.$=[ne[W-3],ne[W-1],{type:"addMessage",from:ne[W-3].actor,to:ne[W-1].actor,signalType:ne[W-2],msg:ne[W]}];break;case 69:this.$={type:"addParticipant",actor:ne[W-1],config:ne[W]};break;case 70:this.$=ne[W-1].trim();break;case 71:this.$={type:"addParticipant",actor:ne[W]};break;case 72:this.$=Z.LINETYPE.SOLID_OPEN;break;case 73:this.$=Z.LINETYPE.DOTTED_OPEN;break;case 74:this.$=Z.LINETYPE.SOLID;break;case 75:this.$=Z.LINETYPE.BIDIRECTIONAL_SOLID;break;case 76:this.$=Z.LINETYPE.DOTTED;break;case 77:this.$=Z.LINETYPE.BIDIRECTIONAL_DOTTED;break;case 78:this.$=Z.LINETYPE.SOLID_CROSS;break;case 79:this.$=Z.LINETYPE.DOTTED_CROSS;break;case 80:this.$=Z.LINETYPE.SOLID_POINT;break;case 81:this.$=Z.LINETYPE.DOTTED_POINT;break;case 82:this.$=Z.parseMessage(ne[W].trim().substring(1));break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,55,60,61,62,63,71],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:T,39:S,41:w,43:k,44:C,46:A,50:L,52:I,53:R,55:E,60:_,61:D,62:O,63:N,71:P},t(B,[2,5]),{9:47,12:12,13:l,14:u,17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:T,39:S,41:w,43:k,44:C,46:A,50:L,52:I,53:R,55:E,60:_,61:D,62:O,63:N,71:P},t(B,[2,7]),t(B,[2,8]),t(B,[2,14]),{12:48,50:L,52:I,53:R},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,71:P},{22:55,71:P},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(B,[2,29]),t(B,[2,30]),{32:[1,61]},{34:[1,62]},t(B,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,54:72,71:[1,73]},{22:74,71:P},{22:75,71:P},{68:76,76:[1,77],77:[1,78],78:[1,79],79:[1,80],80:[1,81],81:[1,82],82:[1,83],83:[1,84],84:[1,85],85:[1,86]},{56:87,58:[1,88],66:[1,89],67:[1,90]},{22:91,71:P},{22:92,71:P},{22:93,71:P},{22:94,71:P},t([5,51,65,76,77,78,79,80,81,82,83,84,85,86],F),t(B,[2,6]),t(B,[2,15]),t(V,[2,9],{10:95}),t(B,[2,17]),{5:[1,97],19:[1,96]},{5:[1,98]},t(B,[2,21]),{5:[1,99]},{5:[1,100]},t(B,[2,24]),t(B,[2,25]),t(B,[2,26]),t(B,[2,27]),t(B,[2,28]),t(B,[2,31]),t(B,[2,32]),t($,i,{7:101}),t($,i,{7:102}),t($,i,{7:103}),t(U,i,{40:104,7:105}),t(j,i,{42:106,7:107}),t(j,i,{7:107,42:108}),t(ee,i,{45:109,7:110}),t($,i,{7:111}),{5:[1,113],51:[1,112]},{5:[1,114]},t([5,51],F,{72:115,73:[1,116]}),{5:[1,118],51:[1,117]},{5:[1,119]},{22:122,69:[1,120],70:[1,121],71:P},t(q,[2,72]),t(q,[2,73]),t(q,[2,74]),t(q,[2,75]),t(q,[2,76]),t(q,[2,77]),t(q,[2,78]),t(q,[2,79]),t(q,[2,80]),t(q,[2,81]),{22:123,71:P},{22:125,59:124,71:P},{71:[2,64]},{71:[2,65]},{57:126,86:oe},{57:128,86:oe},{57:129,86:oe},{57:130,86:oe},{4:[1,133],5:[1,135],11:132,12:134,16:[1,131],50:L,52:I,53:R},{5:[1,136]},t(B,[2,19]),t(B,[2,20]),t(B,[2,22]),t(B,[2,23]),{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,137],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:T,39:S,41:w,43:k,44:C,46:A,50:L,52:I,53:R,55:E,60:_,61:D,62:O,63:N,71:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,138],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:T,39:S,41:w,43:k,44:C,46:A,50:L,52:I,53:R,55:E,60:_,61:D,62:O,63:N,71:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,139],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:T,39:S,41:w,43:k,44:C,46:A,50:L,52:I,53:R,55:E,60:_,61:D,62:O,63:N,71:P},{16:[1,140]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,46],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:T,39:S,41:w,43:k,44:C,46:A,49:[1,141],50:L,52:I,53:R,55:E,60:_,61:D,62:O,63:N,71:P},{16:[1,142]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,44],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:T,39:S,41:w,43:k,44:C,46:A,48:[1,143],50:L,52:I,53:R,55:E,60:_,61:D,62:O,63:N,71:P},{16:[1,144]},{16:[1,145]},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[2,42],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:T,39:S,41:w,43:k,44:C,46:A,47:[1,146],50:L,52:I,53:R,55:E,60:_,61:D,62:O,63:N,71:P},{4:a,5:s,8:8,9:10,12:12,13:l,14:u,16:[1,147],17:15,18:h,21:f,22:40,23:d,24:19,25:20,26:21,27:22,28:23,29:p,30:m,31:g,33:y,35:v,36:x,37:b,38:T,39:S,41:w,43:k,44:C,46:A,50:L,52:I,53:R,55:E,60:_,61:D,62:O,63:N,71:P},{15:[1,148]},t(B,[2,49]),t(B,[2,53]),{5:[2,69]},{74:[1,149]},{15:[1,150]},t(B,[2,51]),t(B,[2,52]),{22:151,71:P},{22:152,71:P},{57:153,86:oe},{57:154,86:oe},{57:155,86:oe},{65:[1,156],86:[2,63]},{5:[2,56]},{5:[2,82]},{5:[2,57]},{5:[2,58]},{5:[2,59]},t(B,[2,16]),t(V,[2,10]),{12:157,50:L,52:I,53:R},t(V,[2,12]),t(V,[2,13]),t(B,[2,18]),t(B,[2,34]),t(B,[2,35]),t(B,[2,36]),t(B,[2,37]),{15:[1,158]},t(B,[2,38]),{15:[1,159]},t(B,[2,39]),t(B,[2,40]),{15:[1,160]},t(B,[2,41]),{5:[1,161]},{75:[1,162]},{5:[1,163]},{57:164,86:oe},{57:165,86:oe},{5:[2,68]},{5:[2,54]},{5:[2,55]},{22:166,71:P},t(V,[2,11]),t(U,i,{7:105,40:167}),t(j,i,{7:107,42:168}),t(ee,i,{7:110,45:169}),t(B,[2,48]),{5:[2,70]},t(B,[2,50]),{5:[2,66]},{5:[2,67]},{86:[2,62]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],89:[2,64],90:[2,65],115:[2,69],126:[2,56],127:[2,82],128:[2,57],129:[2,58],130:[2,59],153:[2,68],154:[2,54],155:[2,55],162:[2,70],164:[2,66],165:[2,67],166:[2,62],167:[2,47],168:[2,45],169:[2,43]},parseError:o(function(J,K){if(K.recoverable)this.trace(J);else{var ae=new Error(J);throw ae.hash=K,ae}},"parseError"),parse:o(function(J){var K=this,ae=[0],Z=[],de=[null],ne=[],Te=this.table,W="",Ve=0,pe=0,Be=0,Ye=2,He=1,Le=ne.slice.call(arguments,1),Ie=Object.create(this.lexer),Ne={yy:{}};for(var Ce in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ce)&&(Ne.yy[Ce]=this.yy[Ce]);Ie.setInput(J,Ne.yy),Ne.yy.lexer=Ie,Ne.yy.parser=this,typeof Ie.yylloc>"u"&&(Ie.yylloc={});var Fe=Ie.yylloc;ne.push(Fe);var fe=Ie.options&&Ie.options.ranges;typeof Ne.yy.parseError=="function"?this.parseError=Ne.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function xe(We){ae.length=ae.length-2*We,de.length=de.length-We,ne.length=ne.length-We}o(xe,"popStack");function Y(){var We;return We=Z.pop()||Ie.lex()||He,typeof We!="number"&&(We instanceof Array&&(Z=We,We=Z.pop()),We=K.symbols_[We]||We),We}o(Y,"lex");for(var he,z,se,le,ke,ve,ye={},Re,_e,ze,Ke;;){if(se=ae[ae.length-1],this.defaultActions[se]?le=this.defaultActions[se]:((he===null||typeof he>"u")&&(he=Y()),le=Te[se]&&Te[se][he]),typeof le>"u"||!le.length||!le[0]){var xt="";Ke=[];for(Re in Te[se])this.terminals_[Re]&&Re>Ye&&Ke.push("'"+this.terminals_[Re]+"'");Ie.showPosition?xt="Parse error on line "+(Ve+1)+`: +`+Ie.showPosition()+` +Expecting `+Ke.join(", ")+", got '"+(this.terminals_[he]||he)+"'":xt="Parse error on line "+(Ve+1)+": Unexpected "+(he==He?"end of input":"'"+(this.terminals_[he]||he)+"'"),this.parseError(xt,{text:Ie.match,token:this.terminals_[he]||he,line:Ie.yylineno,loc:Fe,expected:Ke})}if(le[0]instanceof Array&&le.length>1)throw new Error("Parse Error: multiple actions possible at state: "+se+", token: "+he);switch(le[0]){case 1:ae.push(he),de.push(Ie.yytext),ne.push(Ie.yylloc),ae.push(le[1]),he=null,z?(he=z,z=null):(pe=Ie.yyleng,W=Ie.yytext,Ve=Ie.yylineno,Fe=Ie.yylloc,Be>0&&Be--);break;case 2:if(_e=this.productions_[le[1]][1],ye.$=de[de.length-_e],ye._$={first_line:ne[ne.length-(_e||1)].first_line,last_line:ne[ne.length-1].last_line,first_column:ne[ne.length-(_e||1)].first_column,last_column:ne[ne.length-1].last_column},fe&&(ye._$.range=[ne[ne.length-(_e||1)].range[0],ne[ne.length-1].range[1]]),ve=this.performAction.apply(ye,[W,pe,Ve,Ne.yy,le[1],de,ne].concat(Le)),typeof ve<"u")return ve;_e&&(ae=ae.slice(0,-1*_e*2),de=de.slice(0,-1*_e),ne=ne.slice(0,-1*_e)),ae.push(this.productions_[le[1]][0]),de.push(ye.$),ne.push(ye._$),ze=Te[ae[ae.length-2]][ae[ae.length-1]],ae.push(ze);break;case 3:return!0}}return!0},"parse")},ue=(function(){var re={EOF:1,parseError:o(function(K,ae){if(this.yy.parser)this.yy.parser.parseError(K,ae);else throw new Error(K)},"parseError"),setInput:o(function(J,K){return this.yy=K||this.yy||{},this._input=J,this._more=this._backtrack=this.done=!1,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},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var J=this._input[0];this.yytext+=J,this.yyleng++,this.offset++,this.match+=J,this.matched+=J;var K=J.match(/(?:\r\n?|\n).*/g);return K?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),J},"input"),unput:o(function(J){var K=J.length,ae=J.split(/(?:\r\n?|\n)/g);this._input=J+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-K),this.offset-=K;var Z=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),ae.length-1&&(this.yylineno-=ae.length-1);var de=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ae?(ae.length===Z.length?this.yylloc.first_column:0)+Z[Z.length-ae.length].length-ae[0].length:this.yylloc.first_column-K},this.options.ranges&&(this.yylloc.range=[de[0],de[0]+this.yyleng-K]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(J){this.unput(this.match.slice(J))},"less"),pastInput:o(function(){var J=this.matched.substr(0,this.matched.length-this.match.length);return(J.length>20?"...":"")+J.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var J=this.match;return J.length<20&&(J+=this._input.substr(0,20-J.length)),(J.substr(0,20)+(J.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var J=this.pastInput(),K=new Array(J.length+1).join("-");return J+this.upcomingInput()+` +`+K+"^"},"showPosition"),test_match:o(function(J,K){var ae,Z,de;if(this.options.backtrack_lexer&&(de={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},this.options.ranges&&(de.yylloc.range=this.yylloc.range.slice(0))),Z=J[0].match(/(?:\r\n?|\n).*/g),Z&&(this.yylineno+=Z.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Z?Z[Z.length-1].length-Z[Z.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+J[0].length},this.yytext+=J[0],this.match+=J[0],this.matches=J,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(J[0].length),this.matched+=J[0],ae=this.performAction.call(this,this.yy,this,K,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ae)return ae;if(this._backtrack){for(var ne in de)this[ne]=de[ne];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var J,K,ae,Z;this._more||(this.yytext="",this.match="");for(var de=this._currentRules(),ne=0;neK[0].length)){if(K=ae,Z=ne,this.options.backtrack_lexer){if(J=this.test_match(ae,de[ne]),J!==!1)return J;if(this._backtrack){K=!1;continue}else return!1}else if(!this.options.flex)break}return K?(J=this.test_match(K,de[Z]),J!==!1?J:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var K=this.next();return K||this.lex()},"lex"),begin:o(function(K){this.conditionStack.push(K)},"begin"),popState:o(function(){var K=this.conditionStack.length-1;return K>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(K){return K=this.conditionStack.length-1-Math.abs(K||0),K>=0?this.conditionStack[K]:"INITIAL"},"topState"),pushState:o(function(K){this.begin(K)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(K,ae,Z,de){var ne=de;switch(Z){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:return this.begin("CONFIG"),73;break;case 8:return 74;case 9:return this.popState(),this.popState(),75;break;case 10:return ae.yytext=ae.yytext.trim(),71;break;case 11:return ae.yytext=ae.yytext.trim(),this.begin("ALIAS"),71;break;case 12:return this.begin("LINE"),14;break;case 13:return this.begin("ID"),50;break;case 14:return this.begin("ID"),52;break;case 15:return 13;case 16:return this.begin("ID"),53;break;case 17:return ae.yytext=ae.yytext.trim(),this.begin("ALIAS"),71;break;case 18:return this.popState(),this.popState(),this.begin("LINE"),51;break;case 19:return this.popState(),this.popState(),5;break;case 20:return this.begin("LINE"),36;break;case 21:return this.begin("LINE"),37;break;case 22:return this.begin("LINE"),38;break;case 23:return this.begin("LINE"),39;break;case 24:return this.begin("LINE"),49;break;case 25:return this.begin("LINE"),41;break;case 26:return this.begin("LINE"),43;break;case 27:return this.begin("LINE"),48;break;case 28:return this.begin("LINE"),44;break;case 29:return this.begin("LINE"),47;break;case 30:return this.begin("LINE"),46;break;case 31:return this.popState(),15;break;case 32:return 16;case 33:return 66;case 34:return 67;case 35:return 60;case 36:return 61;case 37:return 62;case 38:return 63;case 39:return 58;case 40:return 55;case 41:return this.begin("ID"),21;break;case 42:return this.begin("ID"),23;break;case 43:return 29;case 44:return 30;case 45:return this.begin("acc_title"),31;break;case 46:return this.popState(),"acc_title_value";break;case 47:return this.begin("acc_descr"),33;break;case 48:return this.popState(),"acc_descr_value";break;case 49:this.begin("acc_descr_multiline");break;case 50:this.popState();break;case 51:return"acc_descr_multiline_value";case 52:return 6;case 53:return 18;case 54:return 20;case 55:return 65;case 56:return 5;case 57:return ae.yytext=ae.yytext.trim(),71;break;case 58:return 78;case 59:return 79;case 60:return 80;case 61:return 81;case 62:return 76;case 63:return 77;case 64:return 82;case 65:return 83;case 66:return 84;case 67:return 85;case 68:return 86;case 69:return 86;case 70:return 69;case 71:return 70;case 72:return 5;case 73:return"INVALID"}},"anonymous"),rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:@\{)/i,/^(?:[^\}]+)/i,/^(?:\})/i,/^(?:[^\<->\->:\n,;@\s]+(?=@\{))/i,/^(?:[^\<->\->:\n,;@]+?([\-]*[^\<->\->:\n,;@]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:[^<\->\->:\n,;]+?([\-]*[^<\->\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^+<\->\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+<\->\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:<<->>)/i,/^(?:-->>)/i,/^(?:<<-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]*)/i,/^(?::)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[50,51],inclusive:!1},acc_descr:{rules:[48],inclusive:!1},acc_title:{rules:[46],inclusive:!1},ID:{rules:[2,3,7,10,11,17],inclusive:!1},ALIAS:{rules:[2,3,18,19],inclusive:!1},LINE:{rules:[2,3,31],inclusive:!1},CONFIG:{rules:[8,9],inclusive:!1},CONFIG_DATA:{rules:[],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,6,12,13,14,15,16,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,38,39,40,41,42,43,44,45,47,49,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73],inclusive:!0}}};return re})();Q.lexer=ue;function te(){this.yy={}}return o(te,"Parser"),te.prototype=Q,Q.Parser=te,new te})();r$.parser=r$;Fye=r$});var JZe,eJe,tJe,T4,J6,n$=M(()=>{"use strict";Xt();k2();pt();fF();gr();ci();JZe={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31,PAR_OVER_START:32,BIDIRECTIONAL_SOLID:33,BIDIRECTIONAL_DOTTED:34},eJe={FILLED:0,OPEN:1},tJe={LEFTOF:0,RIGHTOF:1,OVER:2},T4={ACTOR:"actor",BOUNDARY:"boundary",COLLECTIONS:"collections",CONTROL:"control",DATABASE:"database",ENTITY:"entity",PARTICIPANT:"participant",QUEUE:"queue"},J6=class{constructor(){this.state=new J1(()=>({prevActor:void 0,actors:new Map,createdActors:new Map,destroyedActors:new Map,boxes:[],messages:[],notes:[],sequenceNumbersEnabled:!1,wrapEnabled:void 0,currentBox:void 0,lastCreated:void 0,lastDestroyed:void 0}));this.setAccTitle=Rr;this.setAccDescription=Ir;this.setDiagramTitle=$r;this.getAccTitle=Mr;this.getAccDescription=Or;this.getDiagramTitle=Pr;this.apply=this.apply.bind(this),this.parseBoxData=this.parseBoxData.bind(this),this.parseMessage=this.parseMessage.bind(this),this.clear(),this.setWrap(ge().wrap),this.LINETYPE=JZe,this.ARROWTYPE=eJe,this.PLACEMENT=tJe}static{o(this,"SequenceDB")}addBox(e){this.state.records.boxes.push({name:e.text,wrap:e.wrap??this.autoWrap(),fill:e.color,actorKeys:[]}),this.state.records.currentBox=this.state.records.boxes.slice(-1)[0]}addActor(e,r,n,i,a){let s=this.state.records.currentBox,l;if(a!==void 0){let h;a.includes(` +`)?h=a+` +`:h=`{ +`+a+` +}`,l=Kh(h,{schema:jh})}i=l?.type??i;let u=this.state.records.actors.get(e);if(u){if(this.state.records.currentBox&&u.box&&this.state.records.currentBox!==u.box)throw new Error(`A same participant should only be defined in one Box: ${u.name} can't be in '${u.box.name}' and in '${this.state.records.currentBox.name}' at the same time.`);if(s=u.box?u.box:this.state.records.currentBox,u.box=s,u&&r===u.name&&n==null)return}if(n?.text==null&&(n={text:r,type:i}),(i==null||n.text==null)&&(n={text:r,type:i}),this.state.records.actors.set(e,{box:s,name:r,description:n.text,wrap:n.wrap??this.autoWrap(),prevActor:this.state.records.prevActor,links:{},properties:{},actorCnt:null,rectData:null,type:i??"participant"}),this.state.records.prevActor){let h=this.state.records.actors.get(this.state.records.prevActor);h&&(h.nextActor=e)}this.state.records.currentBox&&this.state.records.currentBox.actorKeys.push(e),this.state.records.prevActor=e}activationCount(e){let r,n=0;if(!e)return 0;for(r=0;r>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},l}return this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:e,to:r,message:n?.text??"",wrap:n?.wrap??this.autoWrap(),type:i,activate:a}),!0}hasAtLeastOneBox(){return this.state.records.boxes.length>0}hasAtLeastOneBoxWithTitle(){return this.state.records.boxes.some(e=>e.name)}getMessages(){return this.state.records.messages}getBoxes(){return this.state.records.boxes}getActors(){return this.state.records.actors}getCreatedActors(){return this.state.records.createdActors}getDestroyedActors(){return this.state.records.destroyedActors}getActor(e){return this.state.records.actors.get(e)}getActorKeys(){return[...this.state.records.actors.keys()]}enableSequenceNumbers(){this.state.records.sequenceNumbersEnabled=!0}disableSequenceNumbers(){this.state.records.sequenceNumbersEnabled=!1}showSequenceNumbers(){return this.state.records.sequenceNumbersEnabled}setWrap(e){this.state.records.wrapEnabled=e}extractWrap(e){if(e===void 0)return{};e=e.trim();let r=/^:?wrap:/.exec(e)!==null?!0:/^:?nowrap:/.exec(e)!==null?!1:void 0;return{cleanedText:(r===void 0?e:e.replace(/^:?(?:no)?wrap:/,"")).trim(),wrap:r}}autoWrap(){return this.state.records.wrapEnabled!==void 0?this.state.records.wrapEnabled:ge().sequence?.wrap??!1}clear(){this.state.reset(),Sr()}parseMessage(e){let r=e.trim(),{wrap:n,cleanedText:i}=this.extractWrap(r),a={text:i,wrap:n};return X.debug(`parseMessage: ${JSON.stringify(a)}`),a}parseBoxData(e){let r=/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/.exec(e),n=r?.[1]?r[1].trim():"transparent",i=r?.[2]?r[2].trim():void 0;if(window?.CSS)window.CSS.supports("color",n)||(n="transparent",i=e.trim());else{let l=new Option().style;l.color=n,l.color!==n&&(n="transparent",i=e.trim())}let{wrap:a,cleanedText:s}=this.extractWrap(i);return{text:s?sr(s,ge()):void 0,color:n,wrap:a}}addNote(e,r,n){let i={actor:e,placement:r,message:n.text,wrap:n.wrap??this.autoWrap()},a=[].concat(e,e);this.state.records.notes.push(i),this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:a[0],to:a[1],message:n.text,wrap:n.wrap??this.autoWrap(),type:this.LINETYPE.NOTE,placement:r})}addLinks(e,r){let n=this.getActor(e);try{let i=sr(r.text,ge());i=i.replace(/=/g,"="),i=i.replace(/&/g,"&");let a=JSON.parse(i);this.insertLinks(n,a)}catch(i){X.error("error while parsing actor link text",i)}}addALink(e,r){let n=this.getActor(e);try{let i={},a=sr(r.text,ge()),s=a.indexOf("@");a=a.replace(/=/g,"="),a=a.replace(/&/g,"&");let l=a.slice(0,s-1).trim(),u=a.slice(s+1).trim();i[l]=u,this.insertLinks(n,i)}catch(i){X.error("error while parsing actor link text",i)}}insertLinks(e,r){if(e.links==null)e.links=r;else for(let n in r)e.links[n]=r[n]}addProperties(e,r){let n=this.getActor(e);try{let i=sr(r.text,ge()),a=JSON.parse(i);this.insertProperties(n,a)}catch(i){X.error("error while parsing actor properties text",i)}}insertProperties(e,r){if(e.properties==null)e.properties=r;else for(let n in r)e.properties[n]=r[n]}boxEnd(){this.state.records.currentBox=void 0}addDetails(e,r){let n=this.getActor(e),i=document.getElementById(r.text);try{let a=i.innerHTML,s=JSON.parse(a);s.properties&&this.insertProperties(n,s.properties),s.links&&this.insertLinks(n,s.links)}catch(a){X.error("error while parsing actor details text",a)}}getActorProperty(e,r){if(e?.properties!==void 0)return e.properties[r]}apply(e){if(Array.isArray(e))e.forEach(r=>{this.apply(r)});else switch(e.type){case"sequenceIndex":this.state.records.messages.push({id:this.state.records.messages.length.toString(),from:void 0,to:void 0,message:{start:e.sequenceIndex,step:e.sequenceIndexStep,visible:e.sequenceVisible},wrap:!1,type:e.signalType});break;case"addParticipant":this.addActor(e.actor,e.actor,e.description,e.draw,e.config);break;case"createParticipant":if(this.state.records.actors.has(e.actor))throw new Error("It is not possible to have actors with the same id, even if one is destroyed before the next is created. Use 'AS' aliases to simulate the behavior");this.state.records.lastCreated=e.actor,this.addActor(e.actor,e.actor,e.description,e.draw,e.config),this.state.records.createdActors.set(e.actor,this.state.records.messages.length);break;case"destroyParticipant":this.state.records.lastDestroyed=e.actor,this.state.records.destroyedActors.set(e.actor,this.state.records.messages.length);break;case"activeStart":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"activeEnd":this.addSignal(e.actor,void 0,void 0,e.signalType);break;case"addNote":this.addNote(e.actor,e.placement,e.text);break;case"addLinks":this.addLinks(e.actor,e.text);break;case"addALink":this.addALink(e.actor,e.text);break;case"addProperties":this.addProperties(e.actor,e.text);break;case"addDetails":this.addDetails(e.actor,e.text);break;case"addMessage":if(this.state.records.lastCreated){if(e.to!==this.state.records.lastCreated)throw new Error("The created participant "+this.state.records.lastCreated.name+" does not have an associated creating message after its declaration. Please check the sequence diagram.");this.state.records.lastCreated=void 0}else if(this.state.records.lastDestroyed){if(e.to!==this.state.records.lastDestroyed&&e.from!==this.state.records.lastDestroyed)throw new Error("The destroyed participant "+this.state.records.lastDestroyed.name+" does not have an associated destroying message after its declaration. Please check the sequence diagram.");this.state.records.lastDestroyed=void 0}this.addSignal(e.from,e.to,e.msg,e.signalType,e.activate);break;case"boxStart":this.addBox(e.boxData);break;case"boxEnd":this.boxEnd();break;case"loopStart":this.addSignal(void 0,void 0,e.loopText,e.signalType);break;case"loopEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"rectStart":this.addSignal(void 0,void 0,e.color,e.signalType);break;case"rectEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"optStart":this.addSignal(void 0,void 0,e.optText,e.signalType);break;case"optEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"altStart":this.addSignal(void 0,void 0,e.altText,e.signalType);break;case"else":this.addSignal(void 0,void 0,e.altText,e.signalType);break;case"altEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"setAccTitle":Rr(e.text);break;case"parStart":this.addSignal(void 0,void 0,e.parText,e.signalType);break;case"and":this.addSignal(void 0,void 0,e.parText,e.signalType);break;case"parEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"criticalStart":this.addSignal(void 0,void 0,e.criticalText,e.signalType);break;case"option":this.addSignal(void 0,void 0,e.optionText,e.signalType);break;case"criticalEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break;case"breakStart":this.addSignal(void 0,void 0,e.breakText,e.signalType);break;case"breakEnd":this.addSignal(void 0,void 0,void 0,e.signalType);break}}getConfig(){return ge().sequence}}});var rJe,zye,Gye=M(()=>{"use strict";rJe=o(t=>`.actor { + stroke: ${t.actorBorder}; + fill: ${t.actorBkg}; + } + + text.actor > tspan { + fill: ${t.actorTextColor}; + stroke: none; + } + + .actor-line { + stroke: ${t.actorLineColor}; + } + + .innerArc { + stroke-width: 1.5; + stroke-dasharray: none; + } + + .messageLine0 { + stroke-width: 1.5; + stroke-dasharray: none; + stroke: ${t.signalColor}; + } + + .messageLine1 { + stroke-width: 1.5; + stroke-dasharray: 2, 2; + stroke: ${t.signalColor}; + } + + #arrowhead path { + fill: ${t.signalColor}; + stroke: ${t.signalColor}; + } + + .sequenceNumber { + fill: ${t.sequenceNumberColor}; + } + + #sequencenumber { + fill: ${t.signalColor}; + } + + #crosshead path { + fill: ${t.signalColor}; + stroke: ${t.signalColor}; + } + + .messageText { + fill: ${t.signalTextColor}; + stroke: none; + } + + .labelBox { + stroke: ${t.labelBoxBorderColor}; + fill: ${t.labelBoxBkgColor}; + } + + .labelText, .labelText > tspan { + fill: ${t.labelTextColor}; + stroke: none; + } + + .loopText, .loopText > tspan { + fill: ${t.loopTextColor}; + stroke: none; + } + + .loopLine { + stroke-width: 2px; + stroke-dasharray: 2, 2; + stroke: ${t.labelBoxBorderColor}; + fill: ${t.labelBoxBorderColor}; + } + + .note { + //stroke: #decc93; + stroke: ${t.noteBorderColor}; + fill: ${t.noteBkgColor}; + } + + .noteText, .noteText > tspan { + fill: ${t.noteTextColor}; + stroke: none; + } + + .activation0 { + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; + } + + .activation1 { + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; + } + + .activation2 { + fill: ${t.activationBkgColor}; + stroke: ${t.activationBorderColor}; + } + + .actorPopupMenu { + position: absolute; + } + + .actorPopupMenuPanel { + position: absolute; + fill: ${t.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: ${t.actorBorder}; + fill: ${t.actorBkg}; + } + .actor-man circle, line { + stroke: ${t.actorBorder}; + fill: ${t.actorBkg}; + stroke-width: 2px; + } + +`,"getStyles"),zye=rJe});var i$,Yf,jf,Kf,eC,Xf,w4,nJe,tC,k4,o0,Vye,Fr,a$,iJe,aJe,sJe,oJe,lJe,cJe,uJe,hJe,fJe,dJe,pJe,mJe,gJe,Uye,yJe,vJe,xJe,bJe,TJe,wJe,kJe,Hye,EJe,oh,SJe,mi,qye=M(()=>{"use strict";i$=La(tm(),1);qn();tr();gr();n2();Yf=36,jf="actor-top",Kf="actor-bottom",eC="actor-box",Xf="actor-man",w4=o(function(t,e){return Fd(t,e)},"drawRect"),nJe=o(function(t,e,r,n,i){if(e.links===void 0||e.links===null||Object.keys(e.links).length===0)return{height:0,width:0};let a=e.links,s=e.actorCnt,l=e.rectData;var u="none";i&&(u="block !important");let h=t.append("g");h.attr("id","actor"+s+"_popup"),h.attr("class","actorPopupMenu"),h.attr("display",u);var f="";l.class!==void 0&&(f=" "+l.class);let d=l.width>r?l.width:r,p=h.append("rect");if(p.attr("class","actorPopupMenuPanel"+f),p.attr("x",l.x),p.attr("y",l.height),p.attr("fill",l.fill),p.attr("stroke",l.stroke),p.attr("width",d),p.attr("height",l.height),p.attr("rx",l.rx),p.attr("ry",l.ry),a!=null){var m=20;for(let v in a){var g=h.append("a"),y=(0,i$.sanitizeUrl)(a[v]);g.attr("xlink:href",y),g.attr("target","_blank"),SJe(n)(v,g,l.x+10,l.height+m,d,20,{class:"actor"},n),m+=30}}return p.attr("height",m),{height:l.height+m,width:d}},"drawPopup"),tC=o(function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }"},"popupMenuToggle"),k4=o(async function(t,e,r=null){let n=t.append("foreignObject"),i=await kh(e.text,Qt()),s=n.append("xhtml:div").attr("style","width: fit-content;").attr("xmlns","http://www.w3.org/1999/xhtml").html(i).node().getBoundingClientRect();if(n.attr("height",Math.round(s.height)).attr("width",Math.round(s.width)),e.class==="noteText"){let l=t.node().firstChild;l.setAttribute("height",s.height+2*e.textMargin);let u=l.getBBox();n.attr("x",Math.round(u.x+u.width/2-s.width/2)).attr("y",Math.round(u.y+u.height/2-s.height/2))}else if(r){let{startx:l,stopx:u,starty:h}=r;if(l>u){let f=l;l=u,u=f}n.attr("x",Math.round(l+Math.abs(l-u)/2-s.width/2)),e.class==="loopText"?n.attr("y",Math.round(h)):n.attr("y",Math.round(h-s.height))}return[n]},"drawKatex"),o0=o(function(t,e){let r=0,n=0,i=e.text.split(tt.lineBreakRegex),[a,s]=vc(e.fontSize),l=[],u=0,h=o(()=>e.y,"yfunc");if(e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0)switch(e.valign){case"top":case"start":h=o(()=>Math.round(e.y+e.textMargin),"yfunc");break;case"middle":case"center":h=o(()=>Math.round(e.y+(r+n+e.textMargin)/2),"yfunc");break;case"bottom":case"end":h=o(()=>Math.round(e.y+(r+n+2*e.textMargin)-e.textMargin),"yfunc");break}if(e.anchor!==void 0&&e.textMargin!==void 0&&e.width!==void 0)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle";break}for(let[f,d]of i.entries()){e.textMargin!==void 0&&e.textMargin===0&&a!==void 0&&(u=f*a);let p=t.append("text");p.attr("x",e.x),p.attr("y",h()),e.anchor!==void 0&&p.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),e.fontFamily!==void 0&&p.style("font-family",e.fontFamily),s!==void 0&&p.style("font-size",s),e.fontWeight!==void 0&&p.style("font-weight",e.fontWeight),e.fill!==void 0&&p.attr("fill",e.fill),e.class!==void 0&&p.attr("class",e.class),e.dy!==void 0?p.attr("dy",e.dy):u!==0&&p.attr("dy",u);let m=d||BL;if(e.tspan){let g=p.append("tspan");g.attr("x",e.x),e.fill!==void 0&&g.attr("fill",e.fill),g.text(m)}else p.text(m);e.valign!==void 0&&e.textMargin!==void 0&&e.textMargin>0&&(n+=(p._groups||p)[0][0].getBBox().height,r=n),l.push(p)}return l},"drawText"),Vye=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");return n.attr("points",r(e.x,e.y,e.width,e.height,7)),n.attr("class","labelBox"),e.y=e.y+e.height/2,o0(t,e),n},"drawLabel"),Fr=-1,a$=o((t,e,r,n)=>{t.select&&r.forEach(i=>{let a=e.get(i),s=t.select("#actor"+a.actorCnt);!n.mirrorActors&&a.stopy?s.attr("y2",a.stopy+a.height/2):n.mirrorActors&&s.attr("y2",a.stopy)})},"fixLifeLineHeights"),iJe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+e.height,l=t.append("g").lower();var u=l;n||(Fr++,Object.keys(e.links||{}).length&&!r.forceMenus&&u.attr("onclick",tC(`actor${Fr}_popup`)).attr("cursor","pointer"),u.append("line").attr("id","actor"+Fr).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),u=l.append("g"),e.actorCnt=Fr,e.links!=null&&u.attr("id","root-"+Fr));let h=ha();var f="actor";e.properties?.class?f=e.properties.class:h.fill="#eaeaea",n?f+=` ${Kf}`:f+=` ${jf}`,h.x=e.x,h.y=i,h.width=e.width,h.height=e.height,h.class=f,h.rx=3,h.ry=3,h.name=e.name;let d=w4(u,h);if(e.rectData=h,e.properties?.icon){let m=e.properties.icon.trim();m.charAt(0)==="@"?cT(u,h.x+h.width-20,h.y+10,m.substr(1)):lT(u,h.x+h.width-20,h.y+10,m)}oh(r,kn(e.description))(e.description,u,h.x,h.y,h.width,h.height,{class:`actor ${eC}`},r);let p=e.height;if(d.node){let m=d.node().getBBox();e.height=m.height,p=m.height}return p},"drawActorTypeParticipant"),aJe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+e.height,l=t.append("g").lower();var u=l;n||(Fr++,Object.keys(e.links||{}).length&&!r.forceMenus&&u.attr("onclick",tC(`actor${Fr}_popup`)).attr("cursor","pointer"),u.append("line").attr("id","actor"+Fr).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),u=l.append("g"),e.actorCnt=Fr,e.links!=null&&u.attr("id","root-"+Fr));let h=ha();var f="actor";e.properties?.class?f=e.properties.class:h.fill="#eaeaea",n?f+=` ${Kf}`:f+=` ${jf}`,h.x=e.x,h.y=i,h.width=e.width,h.height=e.height,h.class=f,h.name=e.name;let d=6,p={...h,x:h.x+-d,y:h.y+ +d,class:"actor"},m=w4(u,h);if(w4(u,p),e.rectData=h,e.properties?.icon){let y=e.properties.icon.trim();y.charAt(0)==="@"?cT(u,h.x+h.width-20,h.y+10,y.substr(1)):lT(u,h.x+h.width-20,h.y+10,y)}oh(r,kn(e.description))(e.description,u,h.x-d,h.y+d,h.width,h.height,{class:`actor ${eC}`},r);let g=e.height;if(m.node){let y=m.node().getBBox();e.height=y.height,g=y.height}return g},"drawActorTypeCollections"),sJe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+e.height,l=t.append("g").lower(),u=l;n||(Fr++,Object.keys(e.links||{}).length&&!r.forceMenus&&u.attr("onclick",tC(`actor${Fr}_popup`)).attr("cursor","pointer"),u.append("line").attr("id","actor"+Fr).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),u=l.append("g"),e.actorCnt=Fr,e.links!=null&&u.attr("id","root-"+Fr));let h=ha(),f="actor";e.properties?.class?f=e.properties.class:h.fill="#eaeaea",n?f+=` ${Kf}`:f+=` ${jf}`,h.x=e.x,h.y=i,h.width=e.width,h.height=e.height,h.class=f,h.name=e.name;let d=h.height/2,p=d/(2.5+h.height/50),m=u.append("g"),g=u.append("g");if(m.append("path").attr("d",`M ${h.x},${h.y+d} + a ${p},${d} 0 0 0 0,${h.height} + h ${h.width-2*p} + a ${p},${d} 0 0 0 0,-${h.height} + Z + `).attr("class",f),g.append("path").attr("d",`M ${h.x},${h.y+d} + a ${p},${d} 0 0 0 0,${h.height}`).attr("stroke","#666").attr("stroke-width","1px").attr("class",f),m.attr("transform",`translate(${p}, ${-(h.height/2)})`),g.attr("transform",`translate(${h.width-p}, ${-h.height/2})`),e.rectData=h,e.properties?.icon){let x=e.properties.icon.trim(),b=h.x+h.width-20,T=h.y+10;x.charAt(0)==="@"?cT(u,b,T,x.substr(1)):lT(u,b,T,x)}oh(r,kn(e.description))(e.description,u,h.x,h.y,h.width,h.height,{class:`actor ${eC}`},r);let y=e.height,v=m.select("path:last-child");if(v.node()){let x=v.node().getBBox();e.height=x.height,y=x.height}return y},"drawActorTypeQueue"),oJe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+75,l=t.append("g").lower();n||(Fr++,l.append("line").attr("id","actor"+Fr).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),e.actorCnt=Fr);let u=t.append("g"),h=Xf;n?h+=` ${Kf}`:h+=` ${jf}`,u.attr("class",h),u.attr("name",e.name);let f=ha();f.x=e.x,f.y=i,f.fill="#eaeaea",f.width=e.width,f.height=e.height,f.class="actor";let d=e.x+e.width/2,p=i+30,m=18;u.append("defs").append("marker").attr("id","filled-head-control").attr("refX",11).attr("refY",5.8).attr("markerWidth",20).attr("markerHeight",28).attr("orient","172.5").append("path").attr("d","M 14.4 5.6 L 7.2 10.4 L 8.8 5.6 L 7.2 0.8 Z"),u.append("circle").attr("cx",d).attr("cy",p).attr("r",m).attr("fill","#eaeaf7").attr("stroke","#666").attr("stroke-width",1.2),u.append("line").attr("marker-end","url(#filled-head-control)").attr("transform",`translate(${d}, ${p-m})`);let g=u.node().getBBox();return e.height=g.height+2*(r?.sequence?.labelBoxHeight??0),oh(r,kn(e.description))(e.description,u,f.x,f.y+m+(n?5:10),f.width,f.height,{class:`actor ${Xf}`},r),e.height},"drawActorTypeControl"),lJe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+75,l=t.append("g").lower(),u=t.append("g"),h=Xf;n?h+=` ${Kf}`:h+=` ${jf}`,u.attr("class",h),u.attr("name",e.name);let f=ha();f.x=e.x,f.y=i,f.fill="#eaeaea",f.width=e.width,f.height=e.height,f.class="actor";let d=e.x+e.width/2,p=i+(n?10:25),m=18;u.append("circle").attr("cx",d).attr("cy",p).attr("r",m).attr("width",e.width).attr("height",e.height),u.append("line").attr("x1",d-m).attr("x2",d+m).attr("y1",p+m).attr("y2",p+m).attr("stroke","#333").attr("stroke-width",2);let g=u.node().getBBox();return e.height=g.height+(r?.sequence?.labelBoxHeight??0),n||(Fr++,l.append("line").attr("id","actor"+Fr).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),e.actorCnt=Fr),oh(r,kn(e.description))(e.description,u,f.x,f.y+(n?(p-i+m-5)/2:(p+m-i)/2),f.width,f.height,{class:`actor ${Xf}`},r),n?u.attr("transform",`translate(0, ${m/2})`):u.attr("transform",`translate(0, ${m/2})`),e.height},"drawActorTypeEntity"),cJe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+e.height+2*r.boxTextMargin,l=t.append("g").lower(),u=l;n||(Fr++,Object.keys(e.links||{}).length&&!r.forceMenus&&u.attr("onclick",tC(`actor${Fr}_popup`)).attr("cursor","pointer"),u.append("line").attr("id","actor"+Fr).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),u=l.append("g"),e.actorCnt=Fr,e.links!=null&&u.attr("id","root-"+Fr));let h=ha(),f="actor";e.properties?.class?f=e.properties.class:h.fill="#eaeaea",n?f+=` ${Kf}`:f+=` ${jf}`,h.x=e.x,h.y=i,h.width=e.width,h.height=e.height,h.class=f,h.name=e.name,h.x=e.x,h.y=i;let d=h.width/4,p=h.width/4,m=d/2,g=m/(2.5+d/50),y=u.append("g"),v=` + M ${h.x},${h.y+g} + a ${m},${g} 0 0 0 ${d},0 + a ${m},${g} 0 0 0 -${d},0 + l 0,${p-2*g} + a ${m},${g} 0 0 0 ${d},0 + l 0,-${p-2*g} +`;y.append("path").attr("d",v).attr("fill","#eaeaea").attr("stroke","#000").attr("stroke-width",1).attr("class",f),n?y.attr("transform",`translate(${d*1.5}, ${h.height/4-2*g})`):y.attr("transform",`translate(${d*1.5}, ${(h.height+g)/4})`),e.rectData=h,oh(r,kn(e.description))(e.description,u,h.x,h.y+(n?(h.height+p)/4:(h.height+g)/2),h.width,h.height,{class:`actor ${eC}`},r);let x=y.select("path:last-child");if(x.node()){let b=x.node().getBBox();e.height=b.height+(r.sequence.labelBoxHeight??0)}return e.height},"drawActorTypeDatabase"),uJe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+80,l=30,u=t.append("g").lower();n||(Fr++,u.append("line").attr("id","actor"+Fr).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),e.actorCnt=Fr);let h=t.append("g"),f=Xf;n?f+=` ${Kf}`:f+=` ${jf}`,h.attr("class",f),h.attr("name",e.name);let d=ha();d.x=e.x,d.y=i,d.fill="#eaeaea",d.width=e.width,d.height=e.height,d.class="actor",h.append("line").attr("id","actor-man-torso"+Fr).attr("x1",e.x+e.width/2-l*2.5).attr("y1",i+10).attr("x2",e.x+e.width/2-15).attr("y2",i+10),h.append("line").attr("id","actor-man-arms"+Fr).attr("x1",e.x+e.width/2-l*2.5).attr("y1",i+0).attr("x2",e.x+e.width/2-l*2.5).attr("y2",i+20),h.append("circle").attr("cx",e.x+e.width/2).attr("cy",i+10).attr("r",l);let p=h.node().getBBox();return e.height=p.height+(r.sequence.labelBoxHeight??0),oh(r,kn(e.description))(e.description,h,d.x,d.y+(n?l/2-4:l/2+3),d.width,d.height,{class:`actor ${Xf}`},r),n?h.attr("transform",`translate(0,${l/2+7})`):h.attr("transform",`translate(0,${l/2+7})`),e.height},"drawActorTypeBoundary"),hJe=o(function(t,e,r,n){let i=n?e.stopy:e.starty,a=e.x+e.width/2,s=i+80,l=t.append("g").lower();n||(Fr++,l.append("line").attr("id","actor"+Fr).attr("x1",a).attr("y1",s).attr("x2",a).attr("y2",2e3).attr("class","actor-line 200").attr("stroke-width","0.5px").attr("stroke","#999").attr("name",e.name),e.actorCnt=Fr);let u=t.append("g"),h=Xf;n?h+=` ${Kf}`:h+=` ${jf}`,u.attr("class",h),u.attr("name",e.name);let f=ha();f.x=e.x,f.y=i,f.fill="#eaeaea",f.width=e.width,f.height=e.height,f.class="actor",f.rx=3,f.ry=3,u.append("line").attr("id","actor-man-torso"+Fr).attr("x1",a).attr("y1",i+25).attr("x2",a).attr("y2",i+45),u.append("line").attr("id","actor-man-arms"+Fr).attr("x1",a-Yf/2).attr("y1",i+33).attr("x2",a+Yf/2).attr("y2",i+33),u.append("line").attr("x1",a-Yf/2).attr("y1",i+60).attr("x2",a).attr("y2",i+45),u.append("line").attr("x1",a).attr("y1",i+45).attr("x2",a+Yf/2-2).attr("y2",i+60);let d=u.append("circle");d.attr("cx",e.x+e.width/2),d.attr("cy",i+10),d.attr("r",15),d.attr("width",e.width),d.attr("height",e.height);let p=u.node().getBBox();return e.height=p.height,oh(r,kn(e.description))(e.description,u,f.x,f.y+35,f.width,f.height,{class:`actor ${Xf}`},r),e.height},"drawActorTypeActor"),fJe=o(async function(t,e,r,n){switch(e.type){case"actor":return await hJe(t,e,r,n);case"participant":return await iJe(t,e,r,n);case"boundary":return await uJe(t,e,r,n);case"control":return await oJe(t,e,r,n);case"entity":return await lJe(t,e,r,n);case"database":return await cJe(t,e,r,n);case"collections":return await aJe(t,e,r,n);case"queue":return await sJe(t,e,r,n)}},"drawActor"),dJe=o(function(t,e,r){let i=t.append("g");Uye(i,e),e.name&&oh(r)(e.name,i,e.x,e.y+r.boxTextMargin+(e.textMaxHeight||0)/2,e.width,0,{class:"text"},r),i.lower()},"drawBox"),pJe=o(function(t){return t.append("g")},"anchorElement"),mJe=o(function(t,e,r,n,i){let a=ha(),s=e.anchored;a.x=e.startx,a.y=e.starty,a.class="activation"+i%3,a.width=e.stopx-e.startx,a.height=r-e.starty,w4(s,a)},"drawActivation"),gJe=o(async function(t,e,r,n){let{boxMargin:i,boxTextMargin:a,labelBoxHeight:s,labelBoxWidth:l,messageFontFamily:u,messageFontSize:h,messageFontWeight:f}=n,d=t.append("g"),p=o(function(y,v,x,b){return d.append("line").attr("x1",y).attr("y1",v).attr("x2",x).attr("y2",b).attr("class","loopLine")},"drawLoopLine");p(e.startx,e.starty,e.stopx,e.starty),p(e.stopx,e.starty,e.stopx,e.stopy),p(e.startx,e.stopy,e.stopx,e.stopy),p(e.startx,e.starty,e.startx,e.stopy),e.sections!==void 0&&e.sections.forEach(function(y){p(e.startx,y.y,e.stopx,y.y).style("stroke-dasharray","3, 3")});let m=r2();m.text=r,m.x=e.startx,m.y=e.starty,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.anchor="middle",m.valign="middle",m.tspan=!1,m.width=l||50,m.height=s||20,m.textMargin=a,m.class="labelText",Vye(d,m),m=Hye(),m.text=e.title,m.x=e.startx+l/2+(e.stopx-e.startx)/2,m.y=e.starty+i+a,m.anchor="middle",m.valign="middle",m.textMargin=a,m.class="loopText",m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=!0;let g=kn(m.text)?await k4(d,m,e):o0(d,m);if(e.sectionTitles!==void 0){for(let[y,v]of Object.entries(e.sectionTitles))if(v.message){m.text=v.message,m.x=e.startx+(e.stopx-e.startx)/2,m.y=e.sections[y].y+i+a,m.class="loopText",m.anchor="middle",m.valign="middle",m.tspan=!1,m.fontFamily=u,m.fontSize=h,m.fontWeight=f,m.wrap=e.wrap,kn(m.text)?(e.starty=e.sections[y].y,await k4(d,m,e)):o0(d,m);let x=Math.round(g.map(b=>(b._groups||b)[0][0].getBBox().height).reduce((b,T)=>b+T));e.sections[y].height+=x-(i+a)}}return e.height=Math.round(e.stopy-e.starty),d},"drawLoop"),Uye=o(function(t,e){oT(t,e)},"drawBackgroundRect"),yJe=o(function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},"insertDatabaseIcon"),vJe=o(function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},"insertComputerIcon"),xJe=o(function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},"insertClockIcon"),bJe=o(function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",7.9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto-start-reverse").append("path").attr("d","M -1 0 L 10 5 L 0 10 z")},"insertArrowHead"),TJe=o(function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",15.5).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"insertArrowFilledHead"),wJe=o(function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},"insertSequenceNumber"),kJe=o(function(t){t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",4).attr("refY",4.5).append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1pt").attr("d","M 1,2 L 6,7 M 6,2 L 1,7")},"insertArrowCrossHead"),Hye=o(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:!0,valign:void 0}},"getTextObj"),EJe=o(function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),oh=(function(){function t(a,s,l,u,h,f,d){let p=s.append("text").attr("x",l+h/2).attr("y",u+f/2+5).style("text-anchor","middle").text(a);i(p,d)}o(t,"byText");function e(a,s,l,u,h,f,d,p){let{actorFontSize:m,actorFontFamily:g,actorFontWeight:y}=p,[v,x]=vc(m),b=a.split(tt.lineBreakRegex);for(let T=0;T{let s=l0(Me),l=a.actorKeys.reduce((d,p)=>d+=t.get(p).width+(t.get(p).margin||0),0),u=Me.boxMargin*8;l+=u,l-=2*Me.boxTextMargin,a.wrap&&(a.name=qt.wrapLabel(a.name,l-2*Me.wrapPadding,s));let h=qt.calculateTextDimensions(a.name,s);i=tt.getMax(h.height,i);let f=tt.getMax(l,h.width+2*Me.wrapPadding);if(a.margin=Me.boxTextMargin,la.textMaxHeight=i),tt.getMax(n,Me.height)}var Me,ot,CJe,l0,sy,s$,_Je,DJe,o$,Yye,Xye,rC,Wye,RJe,MJe,OJe,PJe,BJe,jye,Kye=M(()=>{"use strict";yr();qye();pt();gr();gr();n2();Xt();v0();tr();Ei();n$();Me={},ot={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:o(function(){return Math.max.apply(null,this.actors.length===0?[0]:this.actors.map(t=>t.height||0))+(this.loops.length===0?0:this.loops.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.messages.length===0?0:this.messages.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.notes.length===0?0:this.notes.map(t=>t.height||0).reduce((t,e)=>t+e))},"getHeight"),clear:o(function(){this.actors=[],this.boxes=[],this.loops=[],this.messages=[],this.notes=[]},"clear"),addBox:o(function(t){this.boxes.push(t)},"addBox"),addActor:o(function(t){this.actors.push(t)},"addActor"),addLoop:o(function(t){this.loops.push(t)},"addLoop"),addMessage:o(function(t){this.messages.push(t)},"addMessage"),addNote:o(function(t){this.notes.push(t)},"addNote"),lastActor:o(function(){return this.actors[this.actors.length-1]},"lastActor"),lastLoop:o(function(){return this.loops[this.loops.length-1]},"lastLoop"),lastMessage:o(function(){return this.messages[this.messages.length-1]},"lastMessage"),lastNote:o(function(){return this.notes[this.notes.length-1]},"lastNote"),actors:[],boxes:[],loops:[],messages:[],notes:[]},init:o(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,Xye(ge())},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=this,a=0;function s(l){return o(function(h){a++;let f=i.sequenceItems.length-a+1;i.updateVal(h,"starty",e-f*Me.boxMargin,Math.min),i.updateVal(h,"stopy",n+f*Me.boxMargin,Math.max),i.updateVal(ot.data,"startx",t-f*Me.boxMargin,Math.min),i.updateVal(ot.data,"stopx",r+f*Me.boxMargin,Math.max),l!=="activation"&&(i.updateVal(h,"startx",t-f*Me.boxMargin,Math.min),i.updateVal(h,"stopx",r+f*Me.boxMargin,Math.max),i.updateVal(ot.data,"starty",e-f*Me.boxMargin,Math.min),i.updateVal(ot.data,"stopy",n+f*Me.boxMargin,Math.max))},"updateItemBounds")}o(s,"updateFn"),this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},"updateBounds"),insert:o(function(t,e,r,n){let i=tt.getMin(t,r),a=tt.getMax(t,r),s=tt.getMin(e,n),l=tt.getMax(e,n);this.updateVal(ot.data,"startx",i,Math.min),this.updateVal(ot.data,"starty",s,Math.min),this.updateVal(ot.data,"stopx",a,Math.max),this.updateVal(ot.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),newActivation:o(function(t,e,r){let n=r.get(t.from),i=rC(t.from).length||0,a=n.x+n.width/2+(i-1)*Me.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+Me.activationWidth,stopy:void 0,actor:t.from,anchored:mi.anchorElement(e)})},"newActivation"),endActivation:o(function(t){let e=this.activations.map(function(r){return r.actor}).lastIndexOf(t.from);return this.activations.splice(e,1)[0]},"endActivation"),createLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},"createLoop"),newLoop:o(function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},"newLoop"),endLoop:o(function(){return this.sequenceItems.pop()},"endLoop"),isLoopOverlap:o(function(){return this.sequenceItems.length?this.sequenceItems[this.sequenceItems.length-1].overlap:!1},"isLoopOverlap"),addSectionToLoop:o(function(t){let e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:ot.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},"addSectionToLoop"),saveVerticalPos:o(function(){this.isLoopOverlap()&&(this.savedVerticalPos=this.verticalPos)},"saveVerticalPos"),resetVerticalPos:o(function(){this.isLoopOverlap()&&(this.verticalPos=this.savedVerticalPos)},"resetVerticalPos"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=tt.getMax(this.data.stopy,this.verticalPos)},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return{bounds:this.data,models:this.models}},"getBounds")},CJe=o(async function(t,e){ot.bumpVerticalPos(Me.boxMargin),e.height=Me.boxMargin,e.starty=ot.getVerticalPos();let r=ha();r.x=e.startx,r.y=e.starty,r.width=e.width||Me.width,r.class="note";let n=t.append("g"),i=mi.drawRect(n,r),a=r2();a.x=e.startx,a.y=e.starty,a.width=r.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=Me.noteFontFamily,a.fontSize=Me.noteFontSize,a.fontWeight=Me.noteFontWeight,a.anchor=Me.noteAlign,a.textMargin=Me.noteMargin,a.valign="center";let s=kn(a.text)?await k4(n,a):o0(n,a),l=Math.round(s.map(u=>(u._groups||u)[0][0].getBBox().height).reduce((u,h)=>u+h));i.attr("height",l+2*Me.noteMargin),e.height+=l+2*Me.noteMargin,ot.bumpVerticalPos(l+2*Me.noteMargin),e.stopy=e.starty+l+2*Me.noteMargin,e.stopx=e.startx+r.width,ot.insert(e.startx,e.starty,e.stopx,e.stopy),ot.models.addNote(e)},"drawNote"),l0=o(t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),"messageFont"),sy=o(t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),"noteFont"),s$=o(t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}),"actorFont");o(AJe,"boundMessage");_Je=o(async function(t,e,r,n){let{startx:i,stopx:a,starty:s,message:l,type:u,sequenceIndex:h,sequenceVisible:f}=e,d=qt.calculateTextDimensions(l,l0(Me)),p=r2();p.x=i,p.y=s+10,p.width=a-i,p.class="messageText",p.dy="1em",p.text=l,p.fontFamily=Me.messageFontFamily,p.fontSize=Me.messageFontSize,p.fontWeight=Me.messageFontWeight,p.anchor=Me.messageAlign,p.valign="center",p.textMargin=Me.wrapPadding,p.tspan=!1,kn(p.text)?await k4(t,p,{startx:i,stopx:a,starty:r}):o0(t,p);let m=d.width,g;i===a?Me.rightAngles?g=t.append("path").attr("d",`M ${i},${r} H ${i+tt.getMax(Me.width/2,m/2)} V ${r+25} H ${i}`):g=t.append("path").attr("d","M "+i+","+r+" C "+(i+60)+","+(r-10)+" "+(i+60)+","+(r+30)+" "+i+","+(r+20)):(g=t.append("line"),g.attr("x1",i),g.attr("y1",r),g.attr("x2",a),g.attr("y2",r)),u===n.db.LINETYPE.DOTTED||u===n.db.LINETYPE.DOTTED_CROSS||u===n.db.LINETYPE.DOTTED_POINT||u===n.db.LINETYPE.DOTTED_OPEN||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED?(g.style("stroke-dasharray","3, 3"),g.attr("class","messageLine1")):g.attr("class","messageLine0");let y="";Me.arrowMarkerAbsolute&&(y=md(!0)),g.attr("stroke-width",2),g.attr("stroke","none"),g.style("fill","none"),(u===n.db.LINETYPE.SOLID||u===n.db.LINETYPE.DOTTED)&&g.attr("marker-end","url("+y+"#arrowhead)"),(u===n.db.LINETYPE.BIDIRECTIONAL_SOLID||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED)&&(g.attr("marker-start","url("+y+"#arrowhead)"),g.attr("marker-end","url("+y+"#arrowhead)")),(u===n.db.LINETYPE.SOLID_POINT||u===n.db.LINETYPE.DOTTED_POINT)&&g.attr("marker-end","url("+y+"#filled-head)"),(u===n.db.LINETYPE.SOLID_CROSS||u===n.db.LINETYPE.DOTTED_CROSS)&&g.attr("marker-end","url("+y+"#crosshead)"),(f||Me.showSequenceNumbers)&&((u===n.db.LINETYPE.BIDIRECTIONAL_SOLID||u===n.db.LINETYPE.BIDIRECTIONAL_DOTTED)&&(ii&&(i=h.height),h.width+l.x>a&&(a=h.width+l.x)}return{maxHeight:i,maxWidth:a}},"drawActorsPopup"),Xye=o(function(t){Rn(Me,t),t.fontFamily&&(Me.actorFontFamily=Me.noteFontFamily=Me.messageFontFamily=t.fontFamily),t.fontSize&&(Me.actorFontSize=Me.noteFontSize=Me.messageFontSize=t.fontSize),t.fontWeight&&(Me.actorFontWeight=Me.noteFontWeight=Me.messageFontWeight=t.fontWeight)},"setConf"),rC=o(function(t){return ot.activations.filter(function(e){return e.actor===t})},"actorActivations"),Wye=o(function(t,e){let r=e.get(t),n=rC(t),i=n.reduce(function(s,l){return tt.getMin(s,l.startx)},r.x+r.width/2-1),a=n.reduce(function(s,l){return tt.getMax(s,l.stopx)},r.x+r.width/2+1);return[i,a]},"activationBounds");o(ru,"adjustLoopHeightForWrap");o(LJe,"adjustCreatedDestroyedData");RJe=o(async function(t,e,r,n){let{securityLevel:i,sequence:a}=ge();Me=a;let s;i==="sandbox"&&(s=qe("#i"+e));let l=i==="sandbox"?qe(s.nodes()[0].contentDocument.body):qe("body"),u=i==="sandbox"?s.nodes()[0].contentDocument:document;ot.init(),X.debug(n.db);let h=i==="sandbox"?l.select(`[id="${e}"]`):qe(`[id="${e}"]`),f=n.db.getActors(),d=n.db.getCreatedActors(),p=n.db.getDestroyedActors(),m=n.db.getBoxes(),g=n.db.getActorKeys(),y=n.db.getMessages(),v=n.db.getDiagramTitle(),x=n.db.hasAtLeastOneBox(),b=n.db.hasAtLeastOneBoxWithTitle(),T=await NJe(f,y,n);if(Me.height=await IJe(f,T,m),mi.insertComputerIcon(h),mi.insertDatabaseIcon(h),mi.insertClockIcon(h),x&&(ot.bumpVerticalPos(Me.boxMargin),b&&ot.bumpVerticalPos(m[0].textMaxHeight)),Me.hideUnusedParticipants===!0){let B=new Set;y.forEach(F=>{B.add(F.from),B.add(F.to)}),g=g.filter(F=>B.has(F))}DJe(h,f,d,g,0,y,!1);let S=await BJe(y,f,T,n);mi.insertArrowHead(h),mi.insertArrowCrossHead(h),mi.insertArrowFilledHead(h),mi.insertSequenceNumber(h);function w(B,F){let V=ot.endActivation(B);V.starty+18>F&&(V.starty=F-6,F+=12),mi.drawActivation(h,V,F,Me,rC(B.from).length),ot.insert(V.startx,F-10,V.stopx,F)}o(w,"activeEnd");let k=1,C=1,A=[],L=[],I=0;for(let B of y){let F,V,$;switch(B.type){case n.db.LINETYPE.NOTE:ot.resetVerticalPos(),V=B.noteModel,await CJe(h,V);break;case n.db.LINETYPE.ACTIVE_START:ot.newActivation(B,h,f);break;case n.db.LINETYPE.ACTIVE_END:w(B,ot.getVerticalPos());break;case n.db.LINETYPE.LOOP_START:ru(S,B,Me.boxMargin,Me.boxMargin+Me.boxTextMargin,U=>ot.newLoop(U));break;case n.db.LINETYPE.LOOP_END:F=ot.endLoop(),await mi.drawLoop(h,F,"loop",Me),ot.bumpVerticalPos(F.stopy-ot.getVerticalPos()),ot.models.addLoop(F);break;case n.db.LINETYPE.RECT_START:ru(S,B,Me.boxMargin,Me.boxMargin,U=>ot.newLoop(void 0,U.message));break;case n.db.LINETYPE.RECT_END:F=ot.endLoop(),L.push(F),ot.models.addLoop(F),ot.bumpVerticalPos(F.stopy-ot.getVerticalPos());break;case n.db.LINETYPE.OPT_START:ru(S,B,Me.boxMargin,Me.boxMargin+Me.boxTextMargin,U=>ot.newLoop(U));break;case n.db.LINETYPE.OPT_END:F=ot.endLoop(),await mi.drawLoop(h,F,"opt",Me),ot.bumpVerticalPos(F.stopy-ot.getVerticalPos()),ot.models.addLoop(F);break;case n.db.LINETYPE.ALT_START:ru(S,B,Me.boxMargin,Me.boxMargin+Me.boxTextMargin,U=>ot.newLoop(U));break;case n.db.LINETYPE.ALT_ELSE:ru(S,B,Me.boxMargin+Me.boxTextMargin,Me.boxMargin,U=>ot.addSectionToLoop(U));break;case n.db.LINETYPE.ALT_END:F=ot.endLoop(),await mi.drawLoop(h,F,"alt",Me),ot.bumpVerticalPos(F.stopy-ot.getVerticalPos()),ot.models.addLoop(F);break;case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:ru(S,B,Me.boxMargin,Me.boxMargin+Me.boxTextMargin,U=>ot.newLoop(U)),ot.saveVerticalPos();break;case n.db.LINETYPE.PAR_AND:ru(S,B,Me.boxMargin+Me.boxTextMargin,Me.boxMargin,U=>ot.addSectionToLoop(U));break;case n.db.LINETYPE.PAR_END:F=ot.endLoop(),await mi.drawLoop(h,F,"par",Me),ot.bumpVerticalPos(F.stopy-ot.getVerticalPos()),ot.models.addLoop(F);break;case n.db.LINETYPE.AUTONUMBER:k=B.message.start||k,C=B.message.step||C,B.message.visible?n.db.enableSequenceNumbers():n.db.disableSequenceNumbers();break;case n.db.LINETYPE.CRITICAL_START:ru(S,B,Me.boxMargin,Me.boxMargin+Me.boxTextMargin,U=>ot.newLoop(U));break;case n.db.LINETYPE.CRITICAL_OPTION:ru(S,B,Me.boxMargin+Me.boxTextMargin,Me.boxMargin,U=>ot.addSectionToLoop(U));break;case n.db.LINETYPE.CRITICAL_END:F=ot.endLoop(),await mi.drawLoop(h,F,"critical",Me),ot.bumpVerticalPos(F.stopy-ot.getVerticalPos()),ot.models.addLoop(F);break;case n.db.LINETYPE.BREAK_START:ru(S,B,Me.boxMargin,Me.boxMargin+Me.boxTextMargin,U=>ot.newLoop(U));break;case n.db.LINETYPE.BREAK_END:F=ot.endLoop(),await mi.drawLoop(h,F,"break",Me),ot.bumpVerticalPos(F.stopy-ot.getVerticalPos()),ot.models.addLoop(F);break;default:try{$=B.msgModel,$.starty=ot.getVerticalPos(),$.sequenceIndex=k,$.sequenceVisible=n.db.showSequenceNumbers();let U=await AJe(h,$);LJe(B,$,U,I,f,d,p),A.push({messageModel:$,lineStartY:U}),ot.models.addMessage($)}catch(U){X.error("error while drawing message",U)}}[n.db.LINETYPE.SOLID_OPEN,n.db.LINETYPE.DOTTED_OPEN,n.db.LINETYPE.SOLID,n.db.LINETYPE.DOTTED,n.db.LINETYPE.SOLID_CROSS,n.db.LINETYPE.DOTTED_CROSS,n.db.LINETYPE.SOLID_POINT,n.db.LINETYPE.DOTTED_POINT,n.db.LINETYPE.BIDIRECTIONAL_SOLID,n.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(B.type)&&(k=k+C),I++}X.debug("createdActors",d),X.debug("destroyedActors",p),await o$(h,f,g,!1);for(let B of A)await _Je(h,B.messageModel,B.lineStartY,n);Me.mirrorActors&&await o$(h,f,g,!0),L.forEach(B=>mi.drawBackgroundRect(h,B)),a$(h,f,g,Me);for(let B of ot.models.boxes){B.height=ot.getVerticalPos()-B.y,ot.insert(B.x,B.y,B.x+B.width,B.height);let F=Me.boxMargin*2;B.startx=B.x-F,B.starty=B.y-F*.25,B.stopx=B.startx+B.width+2*F,B.stopy=B.starty+B.height+F*.75,B.stroke="rgb(0,0,0, 0.5)",mi.drawBox(h,B,Me)}x&&ot.bumpVerticalPos(Me.boxMargin);let R=Yye(h,f,g,u),{bounds:E}=ot.getBounds();E.startx===void 0&&(E.startx=0),E.starty===void 0&&(E.starty=0),E.stopx===void 0&&(E.stopx=0),E.stopy===void 0&&(E.stopy=0);let _=E.stopy-E.starty;_2,d=o(y=>l?-y:y,"adjustValue");t.from===t.to?h=u:(t.activate&&!f&&(h+=d(Me.activationWidth/2-1)),[r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN].includes(t.type)||(h+=d(3)),[r.db.LINETYPE.BIDIRECTIONAL_SOLID,r.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(t.type)&&(u-=d(3)));let p=[n,i,a,s],m=Math.abs(u-h);t.wrap&&t.message&&(t.message=qt.wrapLabel(t.message,tt.getMax(m+2*Me.wrapPadding,Me.width),l0(Me)));let g=qt.calculateTextDimensions(t.message,l0(Me));return{width:tt.getMax(t.wrap?0:g.width+2*Me.wrapPadding,m+2*Me.wrapPadding,Me.width),height:0,startx:u,stopx:h,starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,p),toBounds:Math.max.apply(null,p)}},"buildMessageModel"),BJe=o(async function(t,e,r,n){let i={},a=[],s,l,u;for(let h of t){switch(h.type){case n.db.LINETYPE.LOOP_START:case n.db.LINETYPE.ALT_START:case n.db.LINETYPE.OPT_START:case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.PAR_OVER_START:case n.db.LINETYPE.CRITICAL_START:case n.db.LINETYPE.BREAK_START:a.push({id:h.id,msg:h.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case n.db.LINETYPE.ALT_ELSE:case n.db.LINETYPE.PAR_AND:case n.db.LINETYPE.CRITICAL_OPTION:h.message&&(s=a.pop(),i[s.id]=s,i[h.id]=s,a.push(s));break;case n.db.LINETYPE.LOOP_END:case n.db.LINETYPE.ALT_END:case n.db.LINETYPE.OPT_END:case n.db.LINETYPE.PAR_END:case n.db.LINETYPE.CRITICAL_END:case n.db.LINETYPE.BREAK_END:s=a.pop(),i[s.id]=s;break;case n.db.LINETYPE.ACTIVE_START:{let d=e.get(h.from?h.from:h.to.actor),p=rC(h.from?h.from:h.to.actor).length,m=d.x+d.width/2+(p-1)*Me.activationWidth/2,g={startx:m,stopx:m+Me.activationWidth,actor:h.from,enabled:!0};ot.activations.push(g)}break;case n.db.LINETYPE.ACTIVE_END:{let d=ot.activations.map(p=>p.actor).lastIndexOf(h.from);ot.activations.splice(d,1).splice(0,1)}break}h.placement!==void 0?(l=await OJe(h,e,n),h.noteModel=l,a.forEach(d=>{s=d,s.from=tt.getMin(s.from,l.startx),s.to=tt.getMax(s.to,l.startx+l.width),s.width=tt.getMax(s.width,Math.abs(s.from-s.to))-Me.labelBoxWidth})):(u=PJe(h,e,n),h.msgModel=u,u.startx&&u.stopx&&a.length>0&&a.forEach(d=>{if(s=d,u.startx===u.stopx){let p=e.get(h.from),m=e.get(h.to);s.from=tt.getMin(p.x-u.width/2,p.x-p.width/2,s.from),s.to=tt.getMax(m.x+u.width/2,m.x+p.width/2,s.to),s.width=tt.getMax(s.width,Math.abs(s.to-s.from))-Me.labelBoxWidth}else s.from=tt.getMin(u.startx,s.from),s.to=tt.getMax(u.stopx,s.to),s.width=tt.getMax(s.width,u.width)-Me.labelBoxWidth}))}return ot.activations=[],X.debug("Loop type widths:",i),i},"calculateLoopBounds"),jye={bounds:ot,drawActors:o$,drawActorsPopup:Yye,setConf:Xye,draw:RJe}});var Qye={};dr(Qye,{diagram:()=>FJe});var FJe,Zye=M(()=>{"use strict";$ye();n$();Gye();Xt();Kye();FJe={parser:Fye,get db(){return new J6},renderer:jye,styles:zye,init:o(t=>{t.sequence||(t.sequence={}),t.wrap&&(t.sequence.wrap=t.wrap,iv({sequence:{wrap:t.wrap}}))},"init")}});var l$,nC,c$=M(()=>{"use strict";l$=(function(){var t=o(function(Ie,Ne,Ce,Fe){for(Ce=Ce||{},Fe=Ie.length;Fe--;Ce[Ie[Fe]]=Ne);return Ce},"o"),e=[1,18],r=[1,19],n=[1,20],i=[1,41],a=[1,42],s=[1,26],l=[1,24],u=[1,25],h=[1,32],f=[1,33],d=[1,34],p=[1,45],m=[1,35],g=[1,36],y=[1,37],v=[1,38],x=[1,27],b=[1,28],T=[1,29],S=[1,30],w=[1,31],k=[1,44],C=[1,46],A=[1,43],L=[1,47],I=[1,9],R=[1,8,9],E=[1,58],_=[1,59],D=[1,60],O=[1,61],N=[1,62],P=[1,63],B=[1,64],F=[1,8,9,41],V=[1,76],$=[1,8,9,12,13,22,39,41,44,68,69,70,71,72,73,74,79,81],U=[1,8,9,12,13,18,20,22,39,41,44,50,60,68,69,70,71,72,73,74,79,81,86,100,102,103],j=[13,60,86,100,102,103],ee=[13,60,73,74,86,100,102,103],q=[13,60,68,69,70,71,72,86,100,102,103],oe=[1,100],Q=[1,117],ue=[1,113],te=[1,109],re=[1,115],J=[1,110],K=[1,111],ae=[1,112],Z=[1,114],de=[1,116],ne=[22,48,60,61,82,86,87,88,89,90],Te=[1,8,9,39,41,44],W=[1,8,9,22],Ve=[1,145],pe=[1,8,9,61],Be=[1,8,9,22,48,60,61,82,86,87,88,89,90],Ye={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,classLiteralName:17,DOT:18,className:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,CLASS:46,emptyBody:47,SPACE:48,ANNOTATION_START:49,ANNOTATION_END:50,MEMBER:51,SEPARATOR:52,relation:53,NOTE_FOR:54,noteText:55,NOTE:56,CLASSDEF:57,classList:58,stylesOpt:59,ALPHA:60,COMMA:61,direction_tb:62,direction_bt:63,direction_rl:64,direction_lr:65,relationType:66,lineType:67,AGGREGATION:68,EXTENSION:69,COMPOSITION:70,DEPENDENCY:71,LOLLIPOP:72,LINE:73,DOTTED_LINE:74,CALLBACK:75,LINK:76,LINK_TARGET:77,CLICK:78,CALLBACK_NAME:79,CALLBACK_ARGS:80,HREF:81,STYLE:82,CSSCLASS:83,style:84,styleComponent:85,NUM:86,COLON:87,UNIT:88,BRKT:89,PCT:90,commentToken:91,textToken:92,graphCodeTokens:93,textNoTagsToken:94,TAGSTART:95,TAGEND:96,"==":97,"--":98,DEFAULT:99,MINUS:100,keywords:101,UNICODE_TEXT:102,BQUOTE_STR:103,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",18:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"CLASS",48:"SPACE",49:"ANNOTATION_START",50:"ANNOTATION_END",51:"MEMBER",52:"SEPARATOR",54:"NOTE_FOR",56:"NOTE",57:"CLASSDEF",60:"ALPHA",61:"COMMA",62:"direction_tb",63:"direction_bt",64:"direction_rl",65:"direction_lr",68:"AGGREGATION",69:"EXTENSION",70:"COMPOSITION",71:"DEPENDENCY",72:"LOLLIPOP",73:"LINE",74:"DOTTED_LINE",75:"CALLBACK",76:"LINK",77:"LINK_TARGET",78:"CLICK",79:"CALLBACK_NAME",80:"CALLBACK_ARGS",81:"HREF",82:"STYLE",83:"CSSCLASS",86:"NUM",87:"COLON",88:"UNIT",89:"BRKT",90:"PCT",93:"graphCodeTokens",95:"TAGSTART",96:"TAGEND",97:"==",98:"--",99:"DEFAULT",100:"MINUS",101:"keywords",102:"UNICODE_TEXT",103:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,1],[15,3],[15,2],[19,1],[19,3],[19,1],[19,2],[19,2],[19,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,3],[24,6],[43,2],[43,3],[47,0],[47,2],[47,2],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[58,1],[58,3],[32,1],[32,1],[32,1],[32,1],[53,3],[53,2],[53,2],[53,1],[66,1],[66,1],[66,1],[66,1],[66,1],[67,1],[67,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[59,1],[59,3],[84,1],[84,2],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[91,1],[91,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[94,1],[94,1],[94,1],[94,1],[16,1],[16,1],[16,1],[16,1],[17,1],[55,1]],performAction:o(function(Ne,Ce,Fe,fe,xe,Y,he){var z=Y.length-1;switch(xe){case 8:this.$=Y[z-1];break;case 9:case 10:case 13:case 15:this.$=Y[z];break;case 11:case 14:this.$=Y[z-2]+"."+Y[z];break;case 12:case 16:this.$=Y[z-1]+Y[z];break;case 17:case 18:this.$=Y[z-1]+"~"+Y[z]+"~";break;case 19:fe.addRelation(Y[z]);break;case 20:Y[z-1].title=fe.cleanupLabel(Y[z]),fe.addRelation(Y[z-1]);break;case 31:this.$=Y[z].trim(),fe.setAccTitle(this.$);break;case 32:case 33:this.$=Y[z].trim(),fe.setAccDescription(this.$);break;case 34:fe.addClassesToNamespace(Y[z-3],Y[z-1]);break;case 35:fe.addClassesToNamespace(Y[z-4],Y[z-1]);break;case 36:this.$=Y[z],fe.addNamespace(Y[z]);break;case 37:this.$=[Y[z]];break;case 38:this.$=[Y[z-1]];break;case 39:Y[z].unshift(Y[z-2]),this.$=Y[z];break;case 41:fe.setCssClass(Y[z-2],Y[z]);break;case 42:fe.addMembers(Y[z-3],Y[z-1]);break;case 44:fe.setCssClass(Y[z-5],Y[z-3]),fe.addMembers(Y[z-5],Y[z-1]);break;case 45:this.$=Y[z],fe.addClass(Y[z]);break;case 46:this.$=Y[z-1],fe.addClass(Y[z-1]),fe.setClassLabel(Y[z-1],Y[z]);break;case 50:fe.addAnnotation(Y[z],Y[z-2]);break;case 51:case 64:this.$=[Y[z]];break;case 52:Y[z].push(Y[z-1]),this.$=Y[z];break;case 53:break;case 54:fe.addMember(Y[z-1],fe.cleanupLabel(Y[z]));break;case 55:break;case 56:break;case 57:this.$={id1:Y[z-2],id2:Y[z],relation:Y[z-1],relationTitle1:"none",relationTitle2:"none"};break;case 58:this.$={id1:Y[z-3],id2:Y[z],relation:Y[z-1],relationTitle1:Y[z-2],relationTitle2:"none"};break;case 59:this.$={id1:Y[z-3],id2:Y[z],relation:Y[z-2],relationTitle1:"none",relationTitle2:Y[z-1]};break;case 60:this.$={id1:Y[z-4],id2:Y[z],relation:Y[z-2],relationTitle1:Y[z-3],relationTitle2:Y[z-1]};break;case 61:fe.addNote(Y[z],Y[z-1]);break;case 62:fe.addNote(Y[z]);break;case 63:this.$=Y[z-2],fe.defineClass(Y[z-1],Y[z]);break;case 65:this.$=Y[z-2].concat([Y[z]]);break;case 66:fe.setDirection("TB");break;case 67:fe.setDirection("BT");break;case 68:fe.setDirection("RL");break;case 69:fe.setDirection("LR");break;case 70:this.$={type1:Y[z-2],type2:Y[z],lineType:Y[z-1]};break;case 71:this.$={type1:"none",type2:Y[z],lineType:Y[z-1]};break;case 72:this.$={type1:Y[z-1],type2:"none",lineType:Y[z]};break;case 73:this.$={type1:"none",type2:"none",lineType:Y[z]};break;case 74:this.$=fe.relationType.AGGREGATION;break;case 75:this.$=fe.relationType.EXTENSION;break;case 76:this.$=fe.relationType.COMPOSITION;break;case 77:this.$=fe.relationType.DEPENDENCY;break;case 78:this.$=fe.relationType.LOLLIPOP;break;case 79:this.$=fe.lineType.LINE;break;case 80:this.$=fe.lineType.DOTTED_LINE;break;case 81:case 87:this.$=Y[z-2],fe.setClickEvent(Y[z-1],Y[z]);break;case 82:case 88:this.$=Y[z-3],fe.setClickEvent(Y[z-2],Y[z-1]),fe.setTooltip(Y[z-2],Y[z]);break;case 83:this.$=Y[z-2],fe.setLink(Y[z-1],Y[z]);break;case 84:this.$=Y[z-3],fe.setLink(Y[z-2],Y[z-1],Y[z]);break;case 85:this.$=Y[z-3],fe.setLink(Y[z-2],Y[z-1]),fe.setTooltip(Y[z-2],Y[z]);break;case 86:this.$=Y[z-4],fe.setLink(Y[z-3],Y[z-2],Y[z]),fe.setTooltip(Y[z-3],Y[z-1]);break;case 89:this.$=Y[z-3],fe.setClickEvent(Y[z-2],Y[z-1],Y[z]);break;case 90:this.$=Y[z-4],fe.setClickEvent(Y[z-3],Y[z-2],Y[z-1]),fe.setTooltip(Y[z-3],Y[z]);break;case 91:this.$=Y[z-3],fe.setLink(Y[z-2],Y[z]);break;case 92:this.$=Y[z-4],fe.setLink(Y[z-3],Y[z-1],Y[z]);break;case 93:this.$=Y[z-4],fe.setLink(Y[z-3],Y[z-1]),fe.setTooltip(Y[z-3],Y[z]);break;case 94:this.$=Y[z-5],fe.setLink(Y[z-4],Y[z-2],Y[z]),fe.setTooltip(Y[z-4],Y[z-1]);break;case 95:this.$=Y[z-2],fe.setCssStyle(Y[z-1],Y[z]);break;case 96:fe.setCssClass(Y[z-1],Y[z]);break;case 97:this.$=[Y[z]];break;case 98:Y[z-2].push(Y[z]),this.$=Y[z-2];break;case 100:this.$=Y[z-1]+Y[z];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,17:40,19:21,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:n,38:22,42:i,43:23,46:a,49:s,51:l,52:u,54:h,56:f,57:d,60:p,62:m,63:g,64:y,65:v,75:x,76:b,78:T,82:S,83:w,86:k,100:C,102:A,103:L},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(I,[2,5],{8:[1,48]}),{8:[1,49]},t(R,[2,19],{22:[1,50]}),t(R,[2,21]),t(R,[2,22]),t(R,[2,23]),t(R,[2,24]),t(R,[2,25]),t(R,[2,26]),t(R,[2,27]),t(R,[2,28]),t(R,[2,29]),t(R,[2,30]),{34:[1,51]},{36:[1,52]},t(R,[2,33]),t(R,[2,53],{53:53,66:56,67:57,13:[1,54],22:[1,55],68:E,69:_,70:D,71:O,72:N,73:P,74:B}),{39:[1,65]},t(F,[2,40],{39:[1,67],44:[1,66]}),t(R,[2,55]),t(R,[2,56]),{16:68,60:p,86:k,100:C,102:A},{16:39,17:40,19:69,60:p,86:k,100:C,102:A,103:L},{16:39,17:40,19:70,60:p,86:k,100:C,102:A,103:L},{16:39,17:40,19:71,60:p,86:k,100:C,102:A,103:L},{60:[1,72]},{13:[1,73]},{16:39,17:40,19:74,60:p,86:k,100:C,102:A,103:L},{13:V,55:75},{58:77,60:[1,78]},t(R,[2,66]),t(R,[2,67]),t(R,[2,68]),t(R,[2,69]),t($,[2,13],{16:39,17:40,19:80,18:[1,79],20:[1,81],60:p,86:k,100:C,102:A,103:L}),t($,[2,15],{20:[1,82]}),{15:83,16:84,17:85,60:p,86:k,100:C,102:A,103:L},{16:39,17:40,19:86,60:p,86:k,100:C,102:A,103:L},t(U,[2,123]),t(U,[2,124]),t(U,[2,125]),t(U,[2,126]),t([1,8,9,12,13,20,22,39,41,44,68,69,70,71,72,73,74,79,81],[2,127]),t(I,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,19:21,38:22,43:23,16:39,17:40,5:87,33:e,35:r,37:n,42:i,46:a,49:s,51:l,52:u,54:h,56:f,57:d,60:p,62:m,63:g,64:y,65:v,75:x,76:b,78:T,82:S,83:w,86:k,100:C,102:A,103:L}),{5:88,10:5,16:39,17:40,19:21,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:e,35:r,37:n,38:22,42:i,43:23,46:a,49:s,51:l,52:u,54:h,56:f,57:d,60:p,62:m,63:g,64:y,65:v,75:x,76:b,78:T,82:S,83:w,86:k,100:C,102:A,103:L},t(R,[2,20]),t(R,[2,31]),t(R,[2,32]),{13:[1,90],16:39,17:40,19:89,60:p,86:k,100:C,102:A,103:L},{53:91,66:56,67:57,68:E,69:_,70:D,71:O,72:N,73:P,74:B},t(R,[2,54]),{67:92,73:P,74:B},t(j,[2,73],{66:93,68:E,69:_,70:D,71:O,72:N}),t(ee,[2,74]),t(ee,[2,75]),t(ee,[2,76]),t(ee,[2,77]),t(ee,[2,78]),t(q,[2,79]),t(q,[2,80]),{8:[1,95],24:96,40:94,43:23,46:a},{16:97,60:p,86:k,100:C,102:A},{41:[1,99],45:98,51:oe},{50:[1,101]},{13:[1,102]},{13:[1,103]},{79:[1,104],81:[1,105]},{22:Q,48:ue,59:106,60:te,82:re,84:107,85:108,86:J,87:K,88:ae,89:Z,90:de},{60:[1,118]},{13:V,55:119},t(R,[2,62]),t(R,[2,128]),{22:Q,48:ue,59:120,60:te,61:[1,121],82:re,84:107,85:108,86:J,87:K,88:ae,89:Z,90:de},t(ne,[2,64]),{16:39,17:40,19:122,60:p,86:k,100:C,102:A,103:L},t($,[2,16]),t($,[2,17]),t($,[2,18]),{39:[2,36]},{15:124,16:84,17:85,18:[1,123],39:[2,9],60:p,86:k,100:C,102:A,103:L},{39:[2,10]},t(Te,[2,45],{11:125,12:[1,126]}),t(I,[2,7]),{9:[1,127]},t(W,[2,57]),{16:39,17:40,19:128,60:p,86:k,100:C,102:A,103:L},{13:[1,130],16:39,17:40,19:129,60:p,86:k,100:C,102:A,103:L},t(j,[2,72],{66:131,68:E,69:_,70:D,71:O,72:N}),t(j,[2,71]),{41:[1,132]},{24:96,40:133,43:23,46:a},{8:[1,134],41:[2,37]},t(F,[2,41],{39:[1,135]}),{41:[1,136]},t(F,[2,43]),{41:[2,51],45:137,51:oe},{16:39,17:40,19:138,60:p,86:k,100:C,102:A,103:L},t(R,[2,81],{13:[1,139]}),t(R,[2,83],{13:[1,141],77:[1,140]}),t(R,[2,87],{13:[1,142],80:[1,143]}),{13:[1,144]},t(R,[2,95],{61:Ve}),t(pe,[2,97],{85:146,22:Q,48:ue,60:te,82:re,86:J,87:K,88:ae,89:Z,90:de}),t(Be,[2,99]),t(Be,[2,101]),t(Be,[2,102]),t(Be,[2,103]),t(Be,[2,104]),t(Be,[2,105]),t(Be,[2,106]),t(Be,[2,107]),t(Be,[2,108]),t(Be,[2,109]),t(R,[2,96]),t(R,[2,61]),t(R,[2,63],{61:Ve}),{60:[1,147]},t($,[2,14]),{15:148,16:84,17:85,60:p,86:k,100:C,102:A,103:L},{39:[2,12]},t(Te,[2,46]),{13:[1,149]},{1:[2,4]},t(W,[2,59]),t(W,[2,58]),{16:39,17:40,19:150,60:p,86:k,100:C,102:A,103:L},t(j,[2,70]),t(R,[2,34]),{41:[1,151]},{24:96,40:152,41:[2,38],43:23,46:a},{45:153,51:oe},t(F,[2,42]),{41:[2,52]},t(R,[2,50]),t(R,[2,82]),t(R,[2,84]),t(R,[2,85],{77:[1,154]}),t(R,[2,88]),t(R,[2,89],{13:[1,155]}),t(R,[2,91],{13:[1,157],77:[1,156]}),{22:Q,48:ue,60:te,82:re,84:158,85:108,86:J,87:K,88:ae,89:Z,90:de},t(Be,[2,100]),t(ne,[2,65]),{39:[2,11]},{14:[1,159]},t(W,[2,60]),t(R,[2,35]),{41:[2,39]},{41:[1,160]},t(R,[2,86]),t(R,[2,90]),t(R,[2,92]),t(R,[2,93],{77:[1,161]}),t(pe,[2,98],{85:146,22:Q,48:ue,60:te,82:re,86:J,87:K,88:ae,89:Z,90:de}),t(Te,[2,8]),t(F,[2,44]),t(R,[2,94])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],83:[2,36],85:[2,10],124:[2,12],127:[2,4],137:[2,52],148:[2,11],152:[2,39]},parseError:o(function(Ne,Ce){if(Ce.recoverable)this.trace(Ne);else{var Fe=new Error(Ne);throw Fe.hash=Ce,Fe}},"parseError"),parse:o(function(Ne){var Ce=this,Fe=[0],fe=[],xe=[null],Y=[],he=this.table,z="",se=0,le=0,ke=0,ve=2,ye=1,Re=Y.slice.call(arguments,1),_e=Object.create(this.lexer),ze={yy:{}};for(var Ke in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ke)&&(ze.yy[Ke]=this.yy[Ke]);_e.setInput(Ne,ze.yy),ze.yy.lexer=_e,ze.yy.parser=this,typeof _e.yylloc>"u"&&(_e.yylloc={});var xt=_e.yylloc;Y.push(xt);var We=_e.options&&_e.options.ranges;typeof ze.yy.parseError=="function"?this.parseError=ze.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Oe(_t){Fe.length=Fe.length-2*_t,xe.length=xe.length-_t,Y.length=Y.length-_t}o(Oe,"popStack");function et(){var _t;return _t=fe.pop()||_e.lex()||ye,typeof _t!="number"&&(_t instanceof Array&&(fe=_t,_t=fe.pop()),_t=Ce.symbols_[_t]||_t),_t}o(et,"lex");for(var Ue,lt,Gt,vt,Lt,dt,nt={},bt,wt,yt,ft;;){if(Gt=Fe[Fe.length-1],this.defaultActions[Gt]?vt=this.defaultActions[Gt]:((Ue===null||typeof Ue>"u")&&(Ue=et()),vt=he[Gt]&&he[Gt][Ue]),typeof vt>"u"||!vt.length||!vt[0]){var Ur="";ft=[];for(bt in he[Gt])this.terminals_[bt]&&bt>ve&&ft.push("'"+this.terminals_[bt]+"'");_e.showPosition?Ur="Parse error on line "+(se+1)+`: +`+_e.showPosition()+` +Expecting `+ft.join(", ")+", got '"+(this.terminals_[Ue]||Ue)+"'":Ur="Parse error on line "+(se+1)+": Unexpected "+(Ue==ye?"end of input":"'"+(this.terminals_[Ue]||Ue)+"'"),this.parseError(Ur,{text:_e.match,token:this.terminals_[Ue]||Ue,line:_e.yylineno,loc:xt,expected:ft})}if(vt[0]instanceof Array&&vt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Gt+", token: "+Ue);switch(vt[0]){case 1:Fe.push(Ue),xe.push(_e.yytext),Y.push(_e.yylloc),Fe.push(vt[1]),Ue=null,lt?(Ue=lt,lt=null):(le=_e.yyleng,z=_e.yytext,se=_e.yylineno,xt=_e.yylloc,ke>0&&ke--);break;case 2:if(wt=this.productions_[vt[1]][1],nt.$=xe[xe.length-wt],nt._$={first_line:Y[Y.length-(wt||1)].first_line,last_line:Y[Y.length-1].last_line,first_column:Y[Y.length-(wt||1)].first_column,last_column:Y[Y.length-1].last_column},We&&(nt._$.range=[Y[Y.length-(wt||1)].range[0],Y[Y.length-1].range[1]]),dt=this.performAction.apply(nt,[z,le,se,ze.yy,vt[1],xe,Y].concat(Re)),typeof dt<"u")return dt;wt&&(Fe=Fe.slice(0,-1*wt*2),xe=xe.slice(0,-1*wt),Y=Y.slice(0,-1*wt)),Fe.push(this.productions_[vt[1]][0]),xe.push(nt.$),Y.push(nt._$),yt=he[Fe[Fe.length-2]][Fe[Fe.length-1]],Fe.push(yt);break;case 3:return!0}}return!0},"parse")},He=(function(){var Ie={EOF:1,parseError:o(function(Ce,Fe){if(this.yy.parser)this.yy.parser.parseError(Ce,Fe);else throw new Error(Ce)},"parseError"),setInput:o(function(Ne,Ce){return this.yy=Ce||this.yy||{},this._input=Ne,this._more=this._backtrack=this.done=!1,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},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var Ne=this._input[0];this.yytext+=Ne,this.yyleng++,this.offset++,this.match+=Ne,this.matched+=Ne;var Ce=Ne.match(/(?:\r\n?|\n).*/g);return Ce?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Ne},"input"),unput:o(function(Ne){var Ce=Ne.length,Fe=Ne.split(/(?:\r\n?|\n)/g);this._input=Ne+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ce),this.offset-=Ce;var fe=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),Fe.length-1&&(this.yylineno-=Fe.length-1);var xe=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Fe?(Fe.length===fe.length?this.yylloc.first_column:0)+fe[fe.length-Fe.length].length-Fe[0].length:this.yylloc.first_column-Ce},this.options.ranges&&(this.yylloc.range=[xe[0],xe[0]+this.yyleng-Ce]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(Ne){this.unput(this.match.slice(Ne))},"less"),pastInput:o(function(){var Ne=this.matched.substr(0,this.matched.length-this.match.length);return(Ne.length>20?"...":"")+Ne.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var Ne=this.match;return Ne.length<20&&(Ne+=this._input.substr(0,20-Ne.length)),(Ne.substr(0,20)+(Ne.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var Ne=this.pastInput(),Ce=new Array(Ne.length+1).join("-");return Ne+this.upcomingInput()+` +`+Ce+"^"},"showPosition"),test_match:o(function(Ne,Ce){var Fe,fe,xe;if(this.options.backtrack_lexer&&(xe={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},this.options.ranges&&(xe.yylloc.range=this.yylloc.range.slice(0))),fe=Ne[0].match(/(?:\r\n?|\n).*/g),fe&&(this.yylineno+=fe.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:fe?fe[fe.length-1].length-fe[fe.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Ne[0].length},this.yytext+=Ne[0],this.match+=Ne[0],this.matches=Ne,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Ne[0].length),this.matched+=Ne[0],Fe=this.performAction.call(this,this.yy,this,Ce,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Fe)return Fe;if(this._backtrack){for(var Y in xe)this[Y]=xe[Y];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Ne,Ce,Fe,fe;this._more||(this.yytext="",this.match="");for(var xe=this._currentRules(),Y=0;YCe[0].length)){if(Ce=Fe,fe=Y,this.options.backtrack_lexer){if(Ne=this.test_match(Fe,xe[Y]),Ne!==!1)return Ne;if(this._backtrack){Ce=!1;continue}else return!1}else if(!this.options.flex)break}return Ce?(Ne=this.test_match(Ce,xe[fe]),Ne!==!1?Ne:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var Ce=this.next();return Ce||this.lex()},"lex"),begin:o(function(Ce){this.conditionStack.push(Ce)},"begin"),popState:o(function(){var Ce=this.conditionStack.length-1;return Ce>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(Ce){return Ce=this.conditionStack.length-1-Math.abs(Ce||0),Ce>=0?this.conditionStack[Ce]:"INITIAL"},"topState"),pushState:o(function(Ce){this.begin(Ce)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(Ce,Fe,fe,xe){var Y=xe;switch(fe){case 0:return 62;case 1:return 63;case 2:return 64;case 3:return 65;case 4:break;case 5:break;case 6:return this.begin("acc_title"),33;break;case 7:return this.popState(),"acc_title_value";break;case 8:return this.begin("acc_descr"),35;break;case 9:return this.popState(),"acc_descr_value";break;case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 8;case 14:break;case 15:return 7;case 16:return 7;case 17:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 79;case 22:this.popState();break;case 23:return 80;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return 82;case 28:return 57;case 29:return this.begin("namespace"),42;break;case 30:return this.popState(),8;break;case 31:break;case 32:return this.begin("namespace-body"),39;break;case 33:return this.popState(),41;break;case 34:return"EOF_IN_STRUCT";case 35:return 8;case 36:break;case 37:return"EDGE_STATE";case 38:return this.begin("class"),46;break;case 39:return this.popState(),8;break;case 40:break;case 41:return this.popState(),this.popState(),41;break;case 42:return this.begin("class-body"),39;break;case 43:return this.popState(),41;break;case 44:return"EOF_IN_STRUCT";case 45:return"EDGE_STATE";case 46:return"OPEN_IN_STRUCT";case 47:break;case 48:return"MEMBER";case 49:return 83;case 50:return 75;case 51:return 76;case 52:return 78;case 53:return 54;case 54:return 56;case 55:return 49;case 56:return 50;case 57:return 81;case 58:this.popState();break;case 59:return"GENERICTYPE";case 60:this.begin("generic");break;case 61:this.popState();break;case 62:return"BQUOTE_STR";case 63:this.begin("bqstring");break;case 64:return 77;case 65:return 77;case 66:return 77;case 67:return 77;case 68:return 69;case 69:return 69;case 70:return 71;case 71:return 71;case 72:return 70;case 73:return 68;case 74:return 72;case 75:return 73;case 76:return 74;case 77:return 22;case 78:return 44;case 79:return 100;case 80:return 18;case 81:return"PLUS";case 82:return 87;case 83:return 61;case 84:return 89;case 85:return 89;case 86:return 90;case 87:return"EQUALS";case 88:return"EQUALS";case 89:return 60;case 90:return 12;case 91:return 14;case 92:return"PUNCTUATION";case 93:return 86;case 94:return 102;case 95:return 48;case 96:return 48;case 97:return 9}},"anonymous"),rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:style\b)/,/^(?:classDef\b)/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:\[)/,/^(?:\])/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:\s)/,/^(?:$)/],conditions:{"namespace-body":{rules:[26,33,34,35,36,37,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},namespace:{rules:[26,29,30,31,32,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},"class-body":{rules:[26,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},class:{rules:[26,39,40,41,42,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr_multiline:{rules:[11,12,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_descr:{rules:[9,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},acc_title:{rules:[7,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_args:{rules:[22,23,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},callback_name:{rules:[19,20,21,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},href:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},struct:{rules:[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},generic:{rules:[26,49,50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},bqstring:{rules:[26,49,50,51,52,53,54,55,56,57,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},string:{rules:[24,25,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,29,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97],inclusive:!0}}};return Ie})();Ye.lexer=He;function Le(){this.yy={}}return o(Le,"Parser"),Le.prototype=Ye,Ye.Parser=Le,new Le})();l$.parser=l$;nC=l$});var tve,E4,rve=M(()=>{"use strict";Xt();gr();tve=["#","+","~","-",""],E4=class{static{o(this,"ClassMember")}constructor(e,r){this.memberType=r,this.visibility="",this.classifier="",this.text="";let n=sr(e,ge());this.parseMember(n)}getDisplayDetails(){let e=this.visibility+rc(this.id);this.memberType==="method"&&(e+=`(${rc(this.parameters.trim())})`,this.returnType&&(e+=" : "+rc(this.returnType))),e=e.trim();let r=this.parseClassifier();return{displayText:e,cssStyle:r}}parseMember(e){let r="";if(this.memberType==="method"){let a=/([#+~-])?(.+)\((.*)\)([\s$*])?(.*)([$*])?/.exec(e);if(a){let s=a[1]?a[1].trim():"";if(tve.includes(s)&&(this.visibility=s),this.id=a[2],this.parameters=a[3]?a[3].trim():"",r=a[4]?a[4].trim():"",this.returnType=a[5]?a[5].trim():"",r===""){let l=this.returnType.substring(this.returnType.length-1);/[$*]/.exec(l)&&(r=l,this.returnType=this.returnType.substring(0,this.returnType.length-1))}}}else{let i=e.length,a=e.substring(0,1),s=e.substring(i-1);tve.includes(a)&&(this.visibility=a),/[$*]/.exec(s)&&(r=s),this.id=e.substring(this.visibility===""?0:1,r===""?i:i-1)}this.classifier=r,this.id=this.id.startsWith(" ")?" "+this.id.trim():this.id.trim();let n=`${this.visibility?"\\"+this.visibility:""}${rc(this.id)}${this.memberType==="method"?`(${rc(this.parameters)})${this.returnType?" : "+rc(this.returnType):""}`:""}`;this.text=n.replaceAll("<","<").replaceAll(">",">"),this.text.startsWith("\\<")&&(this.text=this.text.replace("\\<","~"))}parseClassifier(){switch(this.classifier){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}}}});var iC,nve,c0,oy,u$=M(()=>{"use strict";yr();pt();Xt();gr();tr();ci();rve();iC="classId-",nve=0,c0=o(t=>tt.sanitizeText(t,ge()),"sanitizeText"),oy=class{constructor(){this.relations=[];this.classes=new Map;this.styleClasses=new Map;this.notes=[];this.interfaces=[];this.namespaces=new Map;this.namespaceCounter=0;this.functions=[];this.lineType={LINE:0,DOTTED_LINE:1};this.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4};this.setupToolTips=o(e=>{let r=qe(".mermaidTooltip");(r._groups||r)[0][0]===null&&(r=qe("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),qe(e).select("svg").selectAll("g.node").on("mouseover",a=>{let s=qe(a.currentTarget);if(s.attr("title")===null)return;let u=this.getBoundingClientRect();r.transition().duration(200).style("opacity",".9"),r.text(s.attr("title")).style("left",window.scrollX+u.left+(u.right-u.left)/2+"px").style("top",window.scrollY+u.top-14+document.body.scrollTop+"px"),r.html(r.html().replace(/<br\/>/g,"
    ")),s.classed("hover",!0)}).on("mouseout",a=>{r.transition().duration(500).style("opacity",0),qe(a.currentTarget).classed("hover",!1)})},"setupToolTips");this.direction="TB";this.setAccTitle=Rr;this.getAccTitle=Mr;this.setAccDescription=Ir;this.getAccDescription=Or;this.setDiagramTitle=$r;this.getDiagramTitle=Pr;this.getConfig=o(()=>ge().class,"getConfig");this.functions.push(this.setupToolTips.bind(this)),this.clear(),this.addRelation=this.addRelation.bind(this),this.addClassesToNamespace=this.addClassesToNamespace.bind(this),this.addNamespace=this.addNamespace.bind(this),this.setCssClass=this.setCssClass.bind(this),this.addMembers=this.addMembers.bind(this),this.addClass=this.addClass.bind(this),this.setClassLabel=this.setClassLabel.bind(this),this.addAnnotation=this.addAnnotation.bind(this),this.addMember=this.addMember.bind(this),this.cleanupLabel=this.cleanupLabel.bind(this),this.addNote=this.addNote.bind(this),this.defineClass=this.defineClass.bind(this),this.setDirection=this.setDirection.bind(this),this.setLink=this.setLink.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.clear=this.clear.bind(this),this.setTooltip=this.setTooltip.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setCssStyle=this.setCssStyle.bind(this)}static{o(this,"ClassDB")}splitClassNameAndType(e){let r=tt.sanitizeText(e,ge()),n="",i=r;if(r.indexOf("~")>0){let a=r.split("~");i=c0(a[0]),n=c0(a[1])}return{className:i,type:n}}setClassLabel(e,r){let n=tt.sanitizeText(e,ge());r&&(r=c0(r));let{className:i}=this.splitClassNameAndType(n);this.classes.get(i).label=r,this.classes.get(i).text=`${r}${this.classes.get(i).type?`<${this.classes.get(i).type}>`:""}`}addClass(e){let r=tt.sanitizeText(e,ge()),{className:n,type:i}=this.splitClassNameAndType(r);if(this.classes.has(n))return;let a=tt.sanitizeText(n,ge());this.classes.set(a,{id:a,type:i,label:a,text:`${a}${i?`<${i}>`:""}`,shape:"classBox",cssClasses:"default",methods:[],members:[],annotations:[],styles:[],domId:iC+a+"-"+nve}),nve++}addInterface(e,r){let n={id:`interface${this.interfaces.length}`,label:e,classId:r};this.interfaces.push(n)}lookUpDomId(e){let r=tt.sanitizeText(e,ge());if(this.classes.has(r))return this.classes.get(r).domId;throw new Error("Class not found: "+r)}clear(){this.relations=[],this.classes=new Map,this.notes=[],this.interfaces=[],this.functions=[],this.functions.push(this.setupToolTips.bind(this)),this.namespaces=new Map,this.namespaceCounter=0,this.direction="TB",Sr()}getClass(e){return this.classes.get(e)}getClasses(){return this.classes}getRelations(){return this.relations}getNotes(){return this.notes}addRelation(e){X.debug("Adding relation: "+JSON.stringify(e));let r=[this.relationType.LOLLIPOP,this.relationType.AGGREGATION,this.relationType.COMPOSITION,this.relationType.DEPENDENCY,this.relationType.EXTENSION];e.relation.type1===this.relationType.LOLLIPOP&&!r.includes(e.relation.type2)?(this.addClass(e.id2),this.addInterface(e.id1,e.id2),e.id1=`interface${this.interfaces.length-1}`):e.relation.type2===this.relationType.LOLLIPOP&&!r.includes(e.relation.type1)?(this.addClass(e.id1),this.addInterface(e.id2,e.id1),e.id2=`interface${this.interfaces.length-1}`):(this.addClass(e.id1),this.addClass(e.id2)),e.id1=this.splitClassNameAndType(e.id1).className,e.id2=this.splitClassNameAndType(e.id2).className,e.relationTitle1=tt.sanitizeText(e.relationTitle1.trim(),ge()),e.relationTitle2=tt.sanitizeText(e.relationTitle2.trim(),ge()),this.relations.push(e)}addAnnotation(e,r){let n=this.splitClassNameAndType(e).className;this.classes.get(n).annotations.push(r)}addMember(e,r){this.addClass(e);let n=this.splitClassNameAndType(e).className,i=this.classes.get(n);if(typeof r=="string"){let a=r.trim();a.startsWith("<<")&&a.endsWith(">>")?i.annotations.push(c0(a.substring(2,a.length-2))):a.indexOf(")")>0?i.methods.push(new E4(a,"method")):a&&i.members.push(new E4(a,"attribute"))}}addMembers(e,r){Array.isArray(r)&&(r.reverse(),r.forEach(n=>this.addMember(e,n)))}addNote(e,r){let n={id:`note${this.notes.length}`,class:r,text:e};this.notes.push(n)}cleanupLabel(e){return e.startsWith(":")&&(e=e.substring(1)),c0(e.trim())}setCssClass(e,r){e.split(",").forEach(n=>{let i=n;/\d/.exec(n[0])&&(i=iC+i);let a=this.classes.get(i);a&&(a.cssClasses+=" "+r)})}defineClass(e,r){for(let n of e){let i=this.styleClasses.get(n);i===void 0&&(i={id:n,styles:[],textStyles:[]},this.styleClasses.set(n,i)),r&&r.forEach(a=>{if(/color/.exec(a)){let s=a.replace("fill","bgFill");i.textStyles.push(s)}i.styles.push(a)}),this.classes.forEach(a=>{a.cssClasses.includes(n)&&a.styles.push(...r.flatMap(s=>s.split(",")))})}}setTooltip(e,r){e.split(",").forEach(n=>{r!==void 0&&(this.classes.get(n).tooltip=c0(r))})}getTooltip(e,r){return r&&this.namespaces.has(r)?this.namespaces.get(r).classes.get(e).tooltip:this.classes.get(e).tooltip}setLink(e,r,n){let i=ge();e.split(",").forEach(a=>{let s=a;/\d/.exec(a[0])&&(s=iC+s);let l=this.classes.get(s);l&&(l.link=qt.formatUrl(r,i),i.securityLevel==="sandbox"?l.linkTarget="_top":typeof n=="string"?l.linkTarget=c0(n):l.linkTarget="_blank")}),this.setCssClass(e,"clickable")}setClickEvent(e,r,n){e.split(",").forEach(i=>{this.setClickFunc(i,r,n),this.classes.get(i).haveCallback=!0}),this.setCssClass(e,"clickable")}setClickFunc(e,r,n){let i=tt.sanitizeText(e,ge());if(ge().securityLevel!=="loose"||r===void 0)return;let s=i;if(this.classes.has(s)){let l=this.lookUpDomId(s),u=[];if(typeof n=="string"){u=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let h=0;h{let h=document.querySelector(`[id="${l}"]`);h!==null&&h.addEventListener("click",()=>{qt.runFunc(r,...u)},!1)})}}bindFunctions(e){this.functions.forEach(r=>{r(e)})}getDirection(){return this.direction}setDirection(e){this.direction=e}addNamespace(e){this.namespaces.has(e)||(this.namespaces.set(e,{id:e,classes:new Map,children:{},domId:iC+e+"-"+this.namespaceCounter}),this.namespaceCounter++)}getNamespace(e){return this.namespaces.get(e)}getNamespaces(){return this.namespaces}addClassesToNamespace(e,r){if(this.namespaces.has(e))for(let n of r){let{className:i}=this.splitClassNameAndType(n);this.classes.get(i).parent=e,this.namespaces.get(e).classes.set(i,this.classes.get(i))}}setCssStyle(e,r){let n=this.classes.get(e);if(!(!r||!n))for(let i of r)i.includes(",")?n.styles.push(...i.split(",")):n.styles.push(i)}getArrowMarker(e){let r;switch(e){case 0:r="aggregation";break;case 1:r="extension";break;case 2:r="composition";break;case 3:r="dependency";break;case 4:r="lollipop";break;default:r="none"}return r}getData(){let e=[],r=[],n=ge();for(let a of this.namespaces.keys()){let s=this.namespaces.get(a);if(s){let l={id:s.id,label:s.id,isGroup:!0,padding:n.class.padding??16,shape:"rect",cssStyles:["fill: none","stroke: black"],look:n.look};e.push(l)}}for(let a of this.classes.keys()){let s=this.classes.get(a);if(s){let l=s;l.parentId=s.parent,l.look=n.look,e.push(l)}}let i=0;for(let a of this.notes){i++;let s={id:a.id,label:a.text,isGroup:!1,shape:"note",padding:n.class.padding??6,cssStyles:["text-align: left","white-space: nowrap",`fill: ${n.themeVariables.noteBkgColor}`,`stroke: ${n.themeVariables.noteBorderColor}`],look:n.look};e.push(s);let l=this.classes.get(a.class)?.id??"";if(l){let u={id:`edgeNote${i}`,start:a.id,end:l,type:"normal",thickness:"normal",classes:"relation",arrowTypeStart:"none",arrowTypeEnd:"none",arrowheadStyle:"",labelStyle:[""],style:["fill: none"],pattern:"dotted",look:n.look};r.push(u)}}for(let a of this.interfaces){let s={id:a.id,label:a.label,isGroup:!1,shape:"rect",cssStyles:["opacity: 0;"],look:n.look};e.push(s)}i=0;for(let a of this.relations){i++;let s={id:xc(a.id1,a.id2,{prefix:"id",counter:i}),start:a.id1,end:a.id2,type:"normal",label:a.title,labelpos:"c",thickness:"normal",classes:"relation",arrowTypeStart:this.getArrowMarker(a.relation.type1),arrowTypeEnd:this.getArrowMarker(a.relation.type2),startLabelRight:a.relationTitle1==="none"?"":a.relationTitle1,endLabelLeft:a.relationTitle2==="none"?"":a.relationTitle2,arrowheadStyle:"",labelStyle:["display: inline-block"],style:a.style||"",pattern:a.relation.lineType==1?"dashed":"solid",look:n.look};r.push(s)}return{nodes:e,edges:r,other:{},config:n,direction:this.getDirection()}}}});var VJe,aC,h$=M(()=>{"use strict";yg();VJe=o(t=>`g.classGroup text { + fill: ${t.nodeBorder||t.classText}; + stroke: none; + font-family: ${t.fontFamily}; + font-size: 10px; + + .title { + font-weight: bolder; + } + +} + +.nodeLabel, .edgeLabel { + color: ${t.classText}; +} +.edgeLabel .label rect { + fill: ${t.mainBkg}; +} +.label text { + fill: ${t.classText}; +} + +.labelBkg { + background: ${t.mainBkg}; +} +.edgeLabel .label span { + background: ${t.mainBkg}; +} + +.classTitle { + font-weight: bolder; +} +.node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + + +.divider { + stroke: ${t.nodeBorder}; + stroke-width: 1; +} + +g.clickable { + cursor: pointer; +} + +g.classGroup rect { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; +} + +g.classGroup line { + stroke: ${t.nodeBorder}; + stroke-width: 1; +} + +.classLabel .box { + stroke: none; + stroke-width: 0; + fill: ${t.mainBkg}; + opacity: 0.5; +} + +.classLabel .label { + fill: ${t.nodeBorder}; + font-size: 10px; +} + +.relation { + stroke: ${t.lineColor}; + stroke-width: 1; + fill: none; +} + +.dashed-line{ + stroke-dasharray: 3; +} + +.dotted-line{ + stroke-dasharray: 1 2; +} + +#compositionStart, .composition { + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#compositionEnd, .composition { + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#dependencyStart, .dependency { + fill: ${t.lineColor} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#extensionStart, .extension { + fill: transparent !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#extensionEnd, .extension { + fill: transparent !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#aggregationStart, .aggregation { + fill: transparent !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#aggregationEnd, .aggregation { + fill: transparent !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#lollipopStart, .lollipop { + fill: ${t.mainBkg} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +#lollipopEnd, .lollipop { + fill: ${t.mainBkg} !important; + stroke: ${t.lineColor} !important; + stroke-width: 1; +} + +.edgeTerminals { + font-size: 11px; + line-height: initial; +} + +.classTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; +} + ${zc()} +`,"getStyles"),aC=VJe});var UJe,HJe,qJe,sC,f$=M(()=>{"use strict";Xt();pt();ep();Nf();Mf();tr();UJe=o((t,e="TB")=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),HJe=o(function(t,e){return e.db.getClasses()},"getClasses"),qJe=o(async function(t,e,r,n){X.info("REF0:"),X.info("Drawing class diagram (v3)",e);let{securityLevel:i,state:a,layout:s}=ge(),l=n.db.getData(),u=Vo(e,i);l.type=n.type,l.layoutAlgorithm=$c(s),l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["aggregation","extension","composition","dependency","lollipop"],l.diagramId=e,await Qo(l,u);let h=8;qt.insertTitle(u,"classDiagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Ws(u,h,"classDiagram",a?.useMaxWidth??!0)},"draw"),sC={getClasses:HJe,draw:qJe,getDir:UJe}});var ive={};dr(ive,{diagram:()=>WJe});var WJe,ave=M(()=>{"use strict";c$();u$();h$();f$();WJe={parser:nC,get db(){return new oy},renderer:sC,styles:aC,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var lve={};dr(lve,{diagram:()=>KJe});var KJe,cve=M(()=>{"use strict";c$();u$();h$();f$();KJe={parser:nC,get db(){return new oy},renderer:sC,styles:aC,init:o(t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var d$,oC,p$=M(()=>{"use strict";d$=(function(){var t=o(function(F,V,$,U){for($=$||{},U=F.length;U--;$[F[U]]=V);return $},"o"),e=[1,2],r=[1,3],n=[1,4],i=[2,4],a=[1,9],s=[1,11],l=[1,16],u=[1,17],h=[1,18],f=[1,19],d=[1,33],p=[1,20],m=[1,21],g=[1,22],y=[1,23],v=[1,24],x=[1,26],b=[1,27],T=[1,28],S=[1,29],w=[1,30],k=[1,31],C=[1,32],A=[1,35],L=[1,36],I=[1,37],R=[1,38],E=[1,34],_=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],D=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,39,40,41,45,48,51,52,53,54,57],O=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],N={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,styleStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"-->":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,CLICK:38,STRING:39,HREF:40,classDef:41,CLASSDEF_ID:42,CLASSDEF_STYLEOPTS:43,DEFAULT:44,style:45,STYLE_IDS:46,STYLEDEF_STYLEOPTS:47,class:48,CLASSENTITY_IDS:49,STYLECLASS:50,direction_tb:51,direction_bt:52,direction_rl:53,direction_lr:54,eol:55,";":56,EDGE_STATE:57,STYLE_SEPARATOR:58,left_of:59,right_of:60,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",14:"DESCR",15:"-->",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"CLICK",39:"STRING",40:"HREF",41:"classDef",42:"CLASSDEF_ID",43:"CLASSDEF_STYLEOPTS",44:"DEFAULT",45:"style",46:"STYLE_IDS",47:"STYLEDEF_STYLEOPTS",48:"class",49:"CLASSENTITY_IDS",50:"STYLECLASS",51:"direction_tb",52:"direction_bt",53:"direction_rl",54:"direction_lr",56:";",57:"EDGE_STATE",58:"STYLE_SEPARATOR",59:"left_of",60:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[9,5],[9,5],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[55,1],[55,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],performAction:o(function(V,$,U,j,ee,q,oe){var Q=q.length-1;switch(ee){case 3:return j.setRootDoc(q[Q]),q[Q];break;case 4:this.$=[];break;case 5:q[Q]!="nl"&&(q[Q-1].push(q[Q]),this.$=q[Q-1]);break;case 6:case 7:this.$=q[Q];break;case 8:this.$="nl";break;case 12:this.$=q[Q];break;case 13:let J=q[Q-1];J.description=j.trimColon(q[Q]),this.$=J;break;case 14:this.$={stmt:"relation",state1:q[Q-2],state2:q[Q]};break;case 15:let K=j.trimColon(q[Q]);this.$={stmt:"relation",state1:q[Q-3],state2:q[Q-1],description:K};break;case 19:this.$={stmt:"state",id:q[Q-3],type:"default",description:"",doc:q[Q-1]};break;case 20:var ue=q[Q],te=q[Q-2].trim();if(q[Q].match(":")){var re=q[Q].split(":");ue=re[0],te=[te,re[1]]}this.$={stmt:"state",id:ue,type:"default",description:te};break;case 21:this.$={stmt:"state",id:q[Q-3],type:"default",description:q[Q-5],doc:q[Q-1]};break;case 22:this.$={stmt:"state",id:q[Q],type:"fork"};break;case 23:this.$={stmt:"state",id:q[Q],type:"join"};break;case 24:this.$={stmt:"state",id:q[Q],type:"choice"};break;case 25:this.$={stmt:"state",id:j.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:q[Q-1].trim(),note:{position:q[Q-2].trim(),text:q[Q].trim()}};break;case 29:this.$=q[Q].trim(),j.setAccTitle(this.$);break;case 30:case 31:this.$=q[Q].trim(),j.setAccDescription(this.$);break;case 32:this.$={stmt:"click",id:q[Q-3],url:q[Q-2],tooltip:q[Q-1]};break;case 33:this.$={stmt:"click",id:q[Q-3],url:q[Q-1],tooltip:""};break;case 34:case 35:this.$={stmt:"classDef",id:q[Q-1].trim(),classes:q[Q].trim()};break;case 36:this.$={stmt:"style",id:q[Q-1].trim(),styleClass:q[Q].trim()};break;case 37:this.$={stmt:"applyClass",id:q[Q-1].trim(),styleClass:q[Q].trim()};break;case 38:j.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 39:j.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 40:j.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 41:j.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 44:case 45:this.$={stmt:"state",id:q[Q].trim(),type:"default",description:""};break;case 46:this.$={stmt:"state",id:q[Q-2].trim(),classes:[q[Q].trim()],type:"default",description:""};break;case 47:this.$={stmt:"state",id:q[Q-2].trim(),classes:[q[Q].trim()],type:"default",description:""};break}},"anonymous"),table:[{3:1,4:e,5:r,6:n},{1:[3]},{3:5,4:e,5:r,6:n},{3:6,4:e,5:r,6:n},t([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:T,38:S,41:w,45:k,48:C,51:A,52:L,53:I,54:R,57:E},t(_,[2,5]),{9:39,10:12,11:13,12:14,13:15,16:l,17:u,19:h,22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:T,38:S,41:w,45:k,48:C,51:A,52:L,53:I,54:R,57:E},t(_,[2,7]),t(_,[2,8]),t(_,[2,9]),t(_,[2,10]),t(_,[2,11]),t(_,[2,12],{14:[1,40],15:[1,41]}),t(_,[2,16]),{18:[1,42]},t(_,[2,18],{20:[1,43]}),{23:[1,44]},t(_,[2,22]),t(_,[2,23]),t(_,[2,24]),t(_,[2,25]),{30:45,31:[1,46],59:[1,47],60:[1,48]},t(_,[2,28]),{34:[1,49]},{36:[1,50]},t(_,[2,31]),{13:51,24:d,57:E},{42:[1,52],44:[1,53]},{46:[1,54]},{49:[1,55]},t(D,[2,44],{58:[1,56]}),t(D,[2,45],{58:[1,57]}),t(_,[2,38]),t(_,[2,39]),t(_,[2,40]),t(_,[2,41]),t(_,[2,6]),t(_,[2,13]),{13:58,24:d,57:E},t(_,[2,17]),t(O,i,{7:59}),{24:[1,60]},{24:[1,61]},{23:[1,62]},{24:[2,48]},{24:[2,49]},t(_,[2,29]),t(_,[2,30]),{39:[1,63],40:[1,64]},{43:[1,65]},{43:[1,66]},{47:[1,67]},{50:[1,68]},{24:[1,69]},{24:[1,70]},t(_,[2,14],{14:[1,71]}),{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,72],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:T,38:S,41:w,45:k,48:C,51:A,52:L,53:I,54:R,57:E},t(_,[2,20],{20:[1,73]}),{31:[1,74]},{24:[1,75]},{39:[1,76]},{39:[1,77]},t(_,[2,34]),t(_,[2,35]),t(_,[2,36]),t(_,[2,37]),t(D,[2,46]),t(D,[2,47]),t(_,[2,15]),t(_,[2,19]),t(O,i,{7:78}),t(_,[2,26]),t(_,[2,27]),{5:[1,79]},{5:[1,80]},{4:a,5:s,8:8,9:10,10:12,11:13,12:14,13:15,16:l,17:u,19:h,21:[1,81],22:f,24:d,25:p,26:m,27:g,28:y,29:v,32:25,33:x,35:b,37:T,38:S,41:w,45:k,48:C,51:A,52:L,53:I,54:R,57:E},t(_,[2,32]),t(_,[2,33]),t(_,[2,21])],defaultActions:{5:[2,1],6:[2,2],47:[2,48],48:[2,49]},parseError:o(function(V,$){if($.recoverable)this.trace(V);else{var U=new Error(V);throw U.hash=$,U}},"parseError"),parse:o(function(V){var $=this,U=[0],j=[],ee=[null],q=[],oe=this.table,Q="",ue=0,te=0,re=0,J=2,K=1,ae=q.slice.call(arguments,1),Z=Object.create(this.lexer),de={yy:{}};for(var ne in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ne)&&(de.yy[ne]=this.yy[ne]);Z.setInput(V,de.yy),de.yy.lexer=Z,de.yy.parser=this,typeof Z.yylloc>"u"&&(Z.yylloc={});var Te=Z.yylloc;q.push(Te);var W=Z.options&&Z.options.ranges;typeof de.yy.parseError=="function"?this.parseError=de.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ve(z){U.length=U.length-2*z,ee.length=ee.length-z,q.length=q.length-z}o(Ve,"popStack");function pe(){var z;return z=j.pop()||Z.lex()||K,typeof z!="number"&&(z instanceof Array&&(j=z,z=j.pop()),z=$.symbols_[z]||z),z}o(pe,"lex");for(var Be,Ye,He,Le,Ie,Ne,Ce={},Fe,fe,xe,Y;;){if(He=U[U.length-1],this.defaultActions[He]?Le=this.defaultActions[He]:((Be===null||typeof Be>"u")&&(Be=pe()),Le=oe[He]&&oe[He][Be]),typeof Le>"u"||!Le.length||!Le[0]){var he="";Y=[];for(Fe in oe[He])this.terminals_[Fe]&&Fe>J&&Y.push("'"+this.terminals_[Fe]+"'");Z.showPosition?he="Parse error on line "+(ue+1)+`: +`+Z.showPosition()+` +Expecting `+Y.join(", ")+", got '"+(this.terminals_[Be]||Be)+"'":he="Parse error on line "+(ue+1)+": Unexpected "+(Be==K?"end of input":"'"+(this.terminals_[Be]||Be)+"'"),this.parseError(he,{text:Z.match,token:this.terminals_[Be]||Be,line:Z.yylineno,loc:Te,expected:Y})}if(Le[0]instanceof Array&&Le.length>1)throw new Error("Parse Error: multiple actions possible at state: "+He+", token: "+Be);switch(Le[0]){case 1:U.push(Be),ee.push(Z.yytext),q.push(Z.yylloc),U.push(Le[1]),Be=null,Ye?(Be=Ye,Ye=null):(te=Z.yyleng,Q=Z.yytext,ue=Z.yylineno,Te=Z.yylloc,re>0&&re--);break;case 2:if(fe=this.productions_[Le[1]][1],Ce.$=ee[ee.length-fe],Ce._$={first_line:q[q.length-(fe||1)].first_line,last_line:q[q.length-1].last_line,first_column:q[q.length-(fe||1)].first_column,last_column:q[q.length-1].last_column},W&&(Ce._$.range=[q[q.length-(fe||1)].range[0],q[q.length-1].range[1]]),Ne=this.performAction.apply(Ce,[Q,te,ue,de.yy,Le[1],ee,q].concat(ae)),typeof Ne<"u")return Ne;fe&&(U=U.slice(0,-1*fe*2),ee=ee.slice(0,-1*fe),q=q.slice(0,-1*fe)),U.push(this.productions_[Le[1]][0]),ee.push(Ce.$),q.push(Ce._$),xe=oe[U[U.length-2]][U[U.length-1]],U.push(xe);break;case 3:return!0}}return!0},"parse")},P=(function(){var F={EOF:1,parseError:o(function($,U){if(this.yy.parser)this.yy.parser.parseError($,U);else throw new Error($)},"parseError"),setInput:o(function(V,$){return this.yy=$||this.yy||{},this._input=V,this._more=this._backtrack=this.done=!1,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},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var V=this._input[0];this.yytext+=V,this.yyleng++,this.offset++,this.match+=V,this.matched+=V;var $=V.match(/(?:\r\n?|\n).*/g);return $?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),V},"input"),unput:o(function(V){var $=V.length,U=V.split(/(?:\r\n?|\n)/g);this._input=V+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-$),this.offset-=$;var j=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),U.length-1&&(this.yylineno-=U.length-1);var ee=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:U?(U.length===j.length?this.yylloc.first_column:0)+j[j.length-U.length].length-U[0].length:this.yylloc.first_column-$},this.options.ranges&&(this.yylloc.range=[ee[0],ee[0]+this.yyleng-$]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(V){this.unput(this.match.slice(V))},"less"),pastInput:o(function(){var V=this.matched.substr(0,this.matched.length-this.match.length);return(V.length>20?"...":"")+V.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var V=this.match;return V.length<20&&(V+=this._input.substr(0,20-V.length)),(V.substr(0,20)+(V.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var V=this.pastInput(),$=new Array(V.length+1).join("-");return V+this.upcomingInput()+` +`+$+"^"},"showPosition"),test_match:o(function(V,$){var U,j,ee;if(this.options.backtrack_lexer&&(ee={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},this.options.ranges&&(ee.yylloc.range=this.yylloc.range.slice(0))),j=V[0].match(/(?:\r\n?|\n).*/g),j&&(this.yylineno+=j.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:j?j[j.length-1].length-j[j.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+V[0].length},this.yytext+=V[0],this.match+=V[0],this.matches=V,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(V[0].length),this.matched+=V[0],U=this.performAction.call(this,this.yy,this,$,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),U)return U;if(this._backtrack){for(var q in ee)this[q]=ee[q];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var V,$,U,j;this._more||(this.yytext="",this.match="");for(var ee=this._currentRules(),q=0;q$[0].length)){if($=U,j=q,this.options.backtrack_lexer){if(V=this.test_match(U,ee[q]),V!==!1)return V;if(this._backtrack){$=!1;continue}else return!1}else if(!this.options.flex)break}return $?(V=this.test_match($,ee[j]),V!==!1?V:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var $=this.next();return $||this.lex()},"lex"),begin:o(function($){this.conditionStack.push($)},"begin"),popState:o(function(){var $=this.conditionStack.length-1;return $>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function($){return $=this.conditionStack.length-1-Math.abs($||0),$>=0?this.conditionStack[$]:"INITIAL"},"topState"),pushState:o(function($){this.begin($)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function($,U,j,ee){var q=ee;switch(j){case 0:return 38;case 1:return 40;case 2:return 39;case 3:return 44;case 4:return 51;case 5:return 52;case 6:return 53;case 7:return 54;case 8:break;case 9:break;case 10:return 5;case 11:break;case 12:break;case 13:break;case 14:break;case 15:return this.pushState("SCALE"),17;break;case 16:return 18;case 17:this.popState();break;case 18:return this.begin("acc_title"),33;break;case 19:return this.popState(),"acc_title_value";break;case 20:return this.begin("acc_descr"),35;break;case 21:return this.popState(),"acc_descr_value";break;case 22:this.begin("acc_descr_multiline");break;case 23:this.popState();break;case 24:return"acc_descr_multiline_value";case 25:return this.pushState("CLASSDEF"),41;break;case 26:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 27:return this.popState(),this.pushState("CLASSDEFID"),42;break;case 28:return this.popState(),43;break;case 29:return this.pushState("CLASS"),48;break;case 30:return this.popState(),this.pushState("CLASS_STYLE"),49;break;case 31:return this.popState(),50;break;case 32:return this.pushState("STYLE"),45;break;case 33:return this.popState(),this.pushState("STYLEDEF_STYLES"),46;break;case 34:return this.popState(),47;break;case 35:return this.pushState("SCALE"),17;break;case 36:return 18;case 37:this.popState();break;case 38:this.pushState("STATE");break;case 39:return this.popState(),U.yytext=U.yytext.slice(0,-8).trim(),25;break;case 40:return this.popState(),U.yytext=U.yytext.slice(0,-8).trim(),26;break;case 41:return this.popState(),U.yytext=U.yytext.slice(0,-10).trim(),27;break;case 42:return this.popState(),U.yytext=U.yytext.slice(0,-8).trim(),25;break;case 43:return this.popState(),U.yytext=U.yytext.slice(0,-8).trim(),26;break;case 44:return this.popState(),U.yytext=U.yytext.slice(0,-10).trim(),27;break;case 45:return 51;case 46:return 52;case 47:return 53;case 48:return 54;case 49:this.pushState("STATE_STRING");break;case 50:return this.pushState("STATE_ID"),"AS";break;case 51:return this.popState(),"ID";break;case 52:this.popState();break;case 53:return"STATE_DESCR";case 54:return 19;case 55:this.popState();break;case 56:return this.popState(),this.pushState("struct"),20;break;case 57:break;case 58:return this.popState(),21;break;case 59:break;case 60:return this.begin("NOTE"),29;break;case 61:return this.popState(),this.pushState("NOTE_ID"),59;break;case 62:return this.popState(),this.pushState("NOTE_ID"),60;break;case 63:this.popState(),this.pushState("FLOATING_NOTE");break;case 64:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";break;case 65:break;case 66:return"NOTE_TEXT";case 67:return this.popState(),"ID";break;case 68:return this.popState(),this.pushState("NOTE_TEXT"),24;break;case 69:return this.popState(),U.yytext=U.yytext.substr(2).trim(),31;break;case 70:return this.popState(),U.yytext=U.yytext.slice(0,-8).trim(),31;break;case 71:return 6;case 72:return 6;case 73:return 16;case 74:return 57;case 75:return 24;case 76:return U.yytext=U.yytext.trim(),14;break;case 77:return 15;case 78:return 28;case 79:return 58;case 80:return 5;case 81:return"INVALID"}},"anonymous"),rules:[/^(?:click\b)/i,/^(?:href\b)/i,/^(?:"[^"]*")/i,/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:style\s+)/i,/^(?:[\w,]+\s+)/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[12,13],inclusive:!1},struct:{rules:[12,13,25,29,32,38,45,46,47,48,57,58,59,60,74,75,76,77,78],inclusive:!1},FLOATING_NOTE_ID:{rules:[67],inclusive:!1},FLOATING_NOTE:{rules:[64,65,66],inclusive:!1},NOTE_TEXT:{rules:[69,70],inclusive:!1},NOTE_ID:{rules:[68],inclusive:!1},NOTE:{rules:[61,62,63],inclusive:!1},STYLEDEF_STYLEOPTS:{rules:[],inclusive:!1},STYLEDEF_STYLES:{rules:[34],inclusive:!1},STYLE_IDS:{rules:[],inclusive:!1},STYLE:{rules:[33],inclusive:!1},CLASS_STYLE:{rules:[31],inclusive:!1},CLASS:{rules:[30],inclusive:!1},CLASSDEFID:{rules:[28],inclusive:!1},CLASSDEF:{rules:[26,27],inclusive:!1},acc_descr_multiline:{rules:[23,24],inclusive:!1},acc_descr:{rules:[21],inclusive:!1},acc_title:{rules:[19],inclusive:!1},SCALE:{rules:[16,17,36,37],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[51],inclusive:!1},STATE_STRING:{rules:[52,53],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[12,13,39,40,41,42,43,44,49,50,54,55,56],inclusive:!1},ID:{rules:[12,13],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,18,20,22,25,29,32,35,38,56,60,71,72,73,74,75,76,77,79,80,81],inclusive:!0}}};return F})();N.lexer=P;function B(){this.yy={}}return o(B,"Parser"),B.prototype=N,N.Parser=B,new B})();d$.parser=d$;oC=d$});var Qf,u0,S4,fve,dve,pve,h0,lC,m$,g$,y$,v$,cC,uC,mve,gve,x$,b$,yve,vve,ly,eet,xve,T$,tet,ret,bve,Tve,net,wve,iet,kve,w$,k$,Eve,hC,Sve,E$,fC=M(()=>{"use strict";Qf="state",u0="root",S4="relation",fve="classDef",dve="style",pve="applyClass",h0="default",lC="divider",m$="fill:none",g$="fill: #333",y$="text",v$="normal",cC="rect",uC="rectWithTitle",mve="stateStart",gve="stateEnd",x$="divider",b$="roundedWithTitle",yve="note",vve="noteGroup",ly="statediagram",eet="state",xve=`${ly}-${eet}`,T$="transition",tet="note",ret="note-edge",bve=`${T$} ${ret}`,Tve=`${ly}-${tet}`,net="cluster",wve=`${ly}-${net}`,iet="cluster-alt",kve=`${ly}-${iet}`,w$="parent",k$="note",Eve="state",hC="----",Sve=`${hC}${k$}`,E$=`${hC}${w$}`});function S$(t="",e=0,r="",n=hC){let i=r!==null&&r.length>0?`${n}${r}`:"";return`${Eve}-${t}${i}-${e}`}function dC(t,e,r){if(!e.id||e.id===""||e.id==="")return;e.cssClasses&&(Array.isArray(e.cssCompiledStyles)||(e.cssCompiledStyles=[]),e.cssClasses.split(" ").forEach(i=>{let a=r.get(i);a&&(e.cssCompiledStyles=[...e.cssCompiledStyles??[],...a.styles])}));let n=t.find(i=>i.id===e.id);n?Object.assign(n,e):t.push(e)}function set(t){return t?.classes?.join(" ")??""}function oet(t){return t?.styles??[]}var pC,Zf,aet,Cve,cy,_ve,Dve=M(()=>{"use strict";Xt();pt();gr();fC();pC=new Map,Zf=0;o(S$,"stateDomId");aet=o((t,e,r,n,i,a,s,l)=>{X.trace("items",e),e.forEach(u=>{switch(u.stmt){case Qf:cy(t,u,r,n,i,a,s,l);break;case h0:cy(t,u,r,n,i,a,s,l);break;case S4:{cy(t,u.state1,r,n,i,a,s,l),cy(t,u.state2,r,n,i,a,s,l);let h={id:"edge"+Zf,start:u.state1.id,end:u.state2.id,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:m$,labelStyle:"",label:tt.sanitizeText(u.description??"",ge()),arrowheadStyle:g$,labelpos:"c",labelType:y$,thickness:v$,classes:T$,look:s};i.push(h),Zf++}break}})},"setupDoc"),Cve=o((t,e="TB")=>{let r=e;if(t.doc)for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir");o(dC,"insertOrUpdateNode");o(set,"getClassesFromDbInfo");o(oet,"getStylesFromDbInfo");cy=o((t,e,r,n,i,a,s,l)=>{let u=e.id,h=r.get(u),f=set(h),d=oet(h),p=ge();if(X.info("dataFetcher parsedItem",e,h,d),u!=="root"){let m=cC;e.start===!0?m=mve:e.start===!1&&(m=gve),e.type!==h0&&(m=e.type),pC.get(u)||pC.set(u,{id:u,shape:m,description:tt.sanitizeText(u,p),cssClasses:`${f} ${xve}`,cssStyles:d});let g=pC.get(u);e.description&&(Array.isArray(g.description)?(g.shape=uC,g.description.push(e.description)):g.description?.length&&g.description.length>0?(g.shape=uC,g.description===u?g.description=[e.description]:g.description=[g.description,e.description]):(g.shape=cC,g.description=e.description),g.description=tt.sanitizeTextOrArray(g.description,p)),g.description?.length===1&&g.shape===uC&&(g.type==="group"?g.shape=b$:g.shape=cC),!g.type&&e.doc&&(X.info("Setting cluster for XCX",u,Cve(e)),g.type="group",g.isGroup=!0,g.dir=Cve(e),g.shape=e.type===lC?x$:b$,g.cssClasses=`${g.cssClasses} ${wve} ${a?kve:""}`);let y={labelStyle:"",shape:g.shape,label:g.description,cssClasses:g.cssClasses,cssCompiledStyles:[],cssStyles:g.cssStyles,id:u,dir:g.dir,domId:S$(u,Zf),type:g.type,isGroup:g.type==="group",padding:8,rx:10,ry:10,look:s};if(y.shape===x$&&(y.label=""),t&&t.id!=="root"&&(X.trace("Setting node ",u," to be child of its parent ",t.id),y.parentId=t.id),y.centerLabel=!0,e.note){let v={labelStyle:"",shape:yve,label:e.note.text,cssClasses:Tve,cssStyles:[],cssCompiledStyles:[],id:u+Sve+"-"+Zf,domId:S$(u,Zf,k$),type:g.type,isGroup:g.type==="group",padding:p.flowchart?.padding,look:s,position:e.note.position},x=u+E$,b={labelStyle:"",shape:vve,label:e.note.text,cssClasses:g.cssClasses,cssStyles:[],id:u+E$,domId:S$(u,Zf,w$),type:"group",isGroup:!0,padding:16,look:s,position:e.note.position};Zf++,b.id=x,v.parentId=x,dC(n,b,l),dC(n,v,l),dC(n,y,l);let T=u,S=v.id;e.note.position==="left of"&&(T=v.id,S=u),i.push({id:T+"-"+S,start:T,end:S,arrowhead:"none",arrowTypeEnd:"",style:m$,labelStyle:"",classes:bve,arrowheadStyle:g$,labelpos:"c",labelType:y$,thickness:v$,look:s})}else dC(n,y,l)}e.doc&&(X.trace("Adding nodes children "),aet(e,e.doc,r,n,i,!a,s,l))},"dataFetcher"),_ve=o(()=>{pC.clear(),Zf=0},"reset")});var A$,cet,uet,Lve,_$=M(()=>{"use strict";Xt();pt();ep();Nf();Mf();tr();fC();A$=o((t,e="TB")=>{if(!t.doc)return e;let r=e;for(let n of t.doc)n.stmt==="dir"&&(r=n.value);return r},"getDir"),cet=o(function(t,e){return e.db.getClasses()},"getClasses"),uet=o(async function(t,e,r,n){X.info("REF0:"),X.info("Drawing state diagram (v2)",e);let{securityLevel:i,state:a,layout:s}=ge();n.db.extract(n.db.getRootDocV2());let l=n.db.getData(),u=Vo(e,i);l.type=n.type,l.layoutAlgorithm=s,l.nodeSpacing=a?.nodeSpacing||50,l.rankSpacing=a?.rankSpacing||50,l.markers=["barb"],l.diagramId=e,await Qo(l,u);let h=8;try{(typeof n.db.getLinks=="function"?n.db.getLinks():new Map).forEach((d,p)=>{let m=typeof p=="string"?p:typeof p?.id=="string"?p.id:"";if(!m){X.warn("\u26A0\uFE0F Invalid or missing stateId from key:",JSON.stringify(p));return}let g=u.node()?.querySelectorAll("g"),y;if(g?.forEach(T=>{T.textContent?.trim()===m&&(y=T)}),!y){X.warn("\u26A0\uFE0F Could not find node matching text:",m);return}let v=y.parentNode;if(!v){X.warn("\u26A0\uFE0F Node has no parent, cannot wrap:",m);return}let x=document.createElementNS("http://www.w3.org/2000/svg","a"),b=d.url.replace(/^"+|"+$/g,"");if(x.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",b),x.setAttribute("target","_blank"),d.tooltip){let T=d.tooltip.replace(/^"+|"+$/g,"");x.setAttribute("title",T)}v.replaceChild(x,y),x.appendChild(y),X.info("\u{1F517} Wrapped node in
    tag for:",m,d.url)})}catch(f){X.error("\u274C Error injecting clickable links:",f)}qt.insertTitle(u,"statediagramTitleText",a?.titleTopMargin??25,n.db.getDiagramTitle()),Ws(u,h,ly,a?.useMaxWidth??!0)},"draw"),Lve={getClasses:cet,draw:uet,getDir:A$}});var ws,Nve,Mve,mC,al,gC=M(()=>{"use strict";Xt();pt();tr();gr();ci();Dve();_$();fC();ws={START_NODE:"[*]",START_TYPE:"start",END_NODE:"[*]",END_TYPE:"end",COLOR_KEYWORD:"color",FILL_KEYWORD:"fill",BG_FILL:"bgFill",STYLECLASS_SEP:","},Nve=o(()=>new Map,"newClassesList"),Mve=o(()=>({relations:[],states:new Map,documents:{}}),"newDoc"),mC=o(t=>JSON.parse(JSON.stringify(t)),"clone"),al=class{constructor(e){this.version=e;this.nodes=[];this.edges=[];this.rootDoc=[];this.classes=Nve();this.documents={root:Mve()};this.currentDocument=this.documents.root;this.startEndCount=0;this.dividerCnt=0;this.links=new Map;this.getAccTitle=Mr;this.setAccTitle=Rr;this.getAccDescription=Or;this.setAccDescription=Ir;this.setDiagramTitle=$r;this.getDiagramTitle=Pr;this.clear(),this.setRootDoc=this.setRootDoc.bind(this),this.getDividerId=this.getDividerId.bind(this),this.setDirection=this.setDirection.bind(this),this.trimColon=this.trimColon.bind(this)}static{o(this,"StateDB")}static{this.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3}}extract(e){this.clear(!0);for(let i of Array.isArray(e)?e:e.doc)switch(i.stmt){case Qf:this.addState(i.id.trim(),i.type,i.doc,i.description,i.note);break;case S4:this.addRelation(i.state1,i.state2,i.description);break;case fve:this.addStyleClass(i.id.trim(),i.classes);break;case dve:this.handleStyleDef(i);break;case pve:this.setCssClass(i.id.trim(),i.styleClass);break;case"click":this.addLink(i.id,i.url,i.tooltip);break}let r=this.getStates(),n=ge();_ve(),cy(void 0,this.getRootDocV2(),r,this.nodes,this.edges,!0,n.look,this.classes);for(let i of this.nodes)if(Array.isArray(i.label)){if(i.description=i.label.slice(1),i.isGroup&&i.description.length>0)throw new Error(`Group nodes can only have label. Remove the additional description for node [${i.id}]`);i.label=i.label[0]}}handleStyleDef(e){let r=e.id.trim().split(","),n=e.styleClass.split(",");for(let i of r){let a=this.getState(i);if(!a){let s=i.trim();this.addState(s),a=this.getState(s)}a&&(a.styles=n.map(s=>s.replace(/;/g,"")?.trim()))}}setRootDoc(e){X.info("Setting root doc",e),this.rootDoc=e,this.version===1?this.extract(e):this.extract(this.getRootDocV2())}docTranslator(e,r,n){if(r.stmt===S4){this.docTranslator(e,r.state1,!0),this.docTranslator(e,r.state2,!1);return}if(r.stmt===Qf&&(r.id===ws.START_NODE?(r.id=e.id+(n?"_start":"_end"),r.start=n):r.id=r.id.trim()),r.stmt!==u0&&r.stmt!==Qf||!r.doc)return;let i=[],a=[];for(let s of r.doc)if(s.type===lC){let l=mC(s);l.doc=mC(a),i.push(l),a=[]}else a.push(s);if(i.length>0&&a.length>0){let s={stmt:Qf,id:GL(),type:"divider",doc:mC(a)};i.push(mC(s)),r.doc=i}r.doc.forEach(s=>this.docTranslator(r,s,!0))}getRootDocV2(){return this.docTranslator({id:u0,stmt:u0},{id:u0,stmt:u0,doc:this.rootDoc},!0),{id:u0,doc:this.rootDoc}}addState(e,r=h0,n=void 0,i=void 0,a=void 0,s=void 0,l=void 0,u=void 0){let h=e?.trim();if(!this.currentDocument.states.has(h))X.info("Adding state ",h,i),this.currentDocument.states.set(h,{stmt:Qf,id:h,descriptions:[],type:r,doc:n,note:a,classes:[],styles:[],textStyles:[]});else{let f=this.currentDocument.states.get(h);if(!f)throw new Error(`State not found: ${h}`);f.doc||(f.doc=n),f.type||(f.type=r)}if(i&&(X.info("Setting state description",h,i),(Array.isArray(i)?i:[i]).forEach(d=>this.addDescription(h,d.trim()))),a){let f=this.currentDocument.states.get(h);if(!f)throw new Error(`State not found: ${h}`);f.note=a,f.note.text=tt.sanitizeText(f.note.text,ge())}s&&(X.info("Setting state classes",h,s),(Array.isArray(s)?s:[s]).forEach(d=>this.setCssClass(h,d.trim()))),l&&(X.info("Setting state styles",h,l),(Array.isArray(l)?l:[l]).forEach(d=>this.setStyle(h,d.trim()))),u&&(X.info("Setting state styles",h,l),(Array.isArray(u)?u:[u]).forEach(d=>this.setTextStyle(h,d.trim())))}clear(e){this.nodes=[],this.edges=[],this.documents={root:Mve()},this.currentDocument=this.documents.root,this.startEndCount=0,this.classes=Nve(),e||(this.links=new Map,Sr())}getState(e){return this.currentDocument.states.get(e)}getStates(){return this.currentDocument.states}logDocuments(){X.info("Documents = ",this.documents)}getRelations(){return this.currentDocument.relations}addLink(e,r,n){this.links.set(e,{url:r,tooltip:n}),X.warn("Adding link",e,r,n)}getLinks(){return this.links}startIdIfNeeded(e=""){return e===ws.START_NODE?(this.startEndCount++,`${ws.START_TYPE}${this.startEndCount}`):e}startTypeIfNeeded(e="",r=h0){return e===ws.START_NODE?ws.START_TYPE:r}endIdIfNeeded(e=""){return e===ws.END_NODE?(this.startEndCount++,`${ws.END_TYPE}${this.startEndCount}`):e}endTypeIfNeeded(e="",r=h0){return e===ws.END_NODE?ws.END_TYPE:r}addRelationObjs(e,r,n=""){let i=this.startIdIfNeeded(e.id.trim()),a=this.startTypeIfNeeded(e.id.trim(),e.type),s=this.startIdIfNeeded(r.id.trim()),l=this.startTypeIfNeeded(r.id.trim(),r.type);this.addState(i,a,e.doc,e.description,e.note,e.classes,e.styles,e.textStyles),this.addState(s,l,r.doc,r.description,r.note,r.classes,r.styles,r.textStyles),this.currentDocument.relations.push({id1:i,id2:s,relationTitle:tt.sanitizeText(n,ge())})}addRelation(e,r,n){if(typeof e=="object"&&typeof r=="object")this.addRelationObjs(e,r,n);else if(typeof e=="string"&&typeof r=="string"){let i=this.startIdIfNeeded(e.trim()),a=this.startTypeIfNeeded(e),s=this.endIdIfNeeded(r.trim()),l=this.endTypeIfNeeded(r);this.addState(i,a),this.addState(s,l),this.currentDocument.relations.push({id1:i,id2:s,relationTitle:n?tt.sanitizeText(n,ge()):void 0})}}addDescription(e,r){let n=this.currentDocument.states.get(e),i=r.startsWith(":")?r.replace(":","").trim():r;n?.descriptions?.push(tt.sanitizeText(i,ge()))}cleanupLabel(e){return e.startsWith(":")?e.slice(2).trim():e.trim()}getDividerId(){return this.dividerCnt++,`divider-id-${this.dividerCnt}`}addStyleClass(e,r=""){this.classes.has(e)||this.classes.set(e,{id:e,styles:[],textStyles:[]});let n=this.classes.get(e);r&&n&&r.split(ws.STYLECLASS_SEP).forEach(i=>{let a=i.replace(/([^;]*);/,"$1").trim();if(RegExp(ws.COLOR_KEYWORD).exec(i)){let l=a.replace(ws.FILL_KEYWORD,ws.BG_FILL).replace(ws.COLOR_KEYWORD,ws.FILL_KEYWORD);n.textStyles.push(l)}n.styles.push(a)})}getClasses(){return this.classes}setCssClass(e,r){e.split(",").forEach(n=>{let i=this.getState(n);if(!i){let a=n.trim();this.addState(a),i=this.getState(a)}i?.classes?.push(r)})}setStyle(e,r){this.getState(e)?.styles?.push(r)}setTextStyle(e,r){this.getState(e)?.textStyles?.push(r)}getDirectionStatement(){return this.rootDoc.find(e=>e.stmt==="dir")}getDirection(){return this.getDirectionStatement()?.value??"TB"}setDirection(e){let r=this.getDirectionStatement();r?r.value=e:this.rootDoc.unshift({stmt:"dir",value:e})}trimColon(e){return e.startsWith(":")?e.slice(1).trim():e.trim()}getData(){let e=ge();return{nodes:this.nodes,edges:this.edges,other:{},config:e,direction:A$(this.getRootDocV2())}}getConfig(){return ge().state}}});var fet,yC,D$=M(()=>{"use strict";fet=o(t=>` +defs #statediagram-barbEnd { + fill: ${t.transitionColor}; + stroke: ${t.transitionColor}; + } +g.stateGroup text { + fill: ${t.nodeBorder}; + stroke: none; + font-size: 10px; +} +g.stateGroup text { + fill: ${t.textColor}; + stroke: none; + font-size: 10px; + +} +g.stateGroup .state-title { + font-weight: bolder; + fill: ${t.stateLabelColor}; +} + +g.stateGroup rect { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; +} + +g.stateGroup line { + stroke: ${t.lineColor}; + stroke-width: 1; +} + +.transition { + stroke: ${t.transitionColor}; + stroke-width: 1; + fill: none; +} + +.stateGroup .composit { + fill: ${t.background}; + border-bottom: 1px +} + +.stateGroup .alt-composit { + fill: #e0e0e0; + border-bottom: 1px +} + +.state-note { + stroke: ${t.noteBorderColor}; + fill: ${t.noteBkgColor}; + + text { + fill: ${t.noteTextColor}; + stroke: none; + font-size: 10px; + } +} + +.stateLabel .box { + stroke: none; + stroke-width: 0; + fill: ${t.mainBkg}; + opacity: 0.5; +} + +.edgeLabel .label rect { + fill: ${t.labelBackgroundColor}; + opacity: 0.5; +} +.edgeLabel { + background-color: ${t.edgeLabelBackground}; + p { + background-color: ${t.edgeLabelBackground}; + } + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; +} +.edgeLabel .label text { + fill: ${t.transitionLabelColor||t.tertiaryTextColor}; +} +.label div .edgeLabel { + color: ${t.transitionLabelColor||t.tertiaryTextColor}; +} + +.stateLabel text { + fill: ${t.stateLabelColor}; + font-size: 10px; + font-weight: bold; +} + +.node circle.state-start { + fill: ${t.specialStateColor}; + stroke: ${t.specialStateColor}; +} + +.node .fork-join { + fill: ${t.specialStateColor}; + stroke: ${t.specialStateColor}; +} + +.node circle.state-end { + fill: ${t.innerEndBackground}; + stroke: ${t.background}; + stroke-width: 1.5 +} +.end-state-inner { + fill: ${t.compositeBackground||t.background}; + // stroke: ${t.background}; + stroke-width: 1.5 +} + +.node rect { + fill: ${t.stateBkg||t.mainBkg}; + stroke: ${t.stateBorder||t.nodeBorder}; + stroke-width: 1px; +} +.node polygon { + fill: ${t.mainBkg}; + stroke: ${t.stateBorder||t.nodeBorder};; + stroke-width: 1px; +} +#statediagram-barbEnd { + fill: ${t.lineColor}; +} + +.statediagram-cluster rect { + fill: ${t.compositeTitleBackground}; + stroke: ${t.stateBorder||t.nodeBorder}; + stroke-width: 1px; +} + +.cluster-label, .nodeLabel { + color: ${t.stateLabelColor}; + // line-height: 1; +} + +.statediagram-cluster rect.outer { + rx: 5px; + ry: 5px; +} +.statediagram-state .divider { + stroke: ${t.stateBorder||t.nodeBorder}; +} + +.statediagram-state .title-state { + rx: 5px; + ry: 5px; +} +.statediagram-cluster.statediagram-cluster .inner { + fill: ${t.compositeBackground||t.background}; +} +.statediagram-cluster.statediagram-cluster-alt .inner { + fill: ${t.altBackground?t.altBackground:"#efefef"}; +} + +.statediagram-cluster .inner { + rx:0; + ry:0; +} + +.statediagram-state rect.basic { + rx: 5px; + ry: 5px; +} +.statediagram-state rect.divider { + stroke-dasharray: 10,10; + fill: ${t.altBackground?t.altBackground:"#efefef"}; +} + +.note-edge { + stroke-dasharray: 5; +} + +.statediagram-note rect { + fill: ${t.noteBkgColor}; + stroke: ${t.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} +.statediagram-note rect { + fill: ${t.noteBkgColor}; + stroke: ${t.noteBorderColor}; + stroke-width: 1px; + rx: 0; + ry: 0; +} + +.statediagram-note text { + fill: ${t.noteTextColor}; +} + +.statediagram-note .nodeLabel { + color: ${t.noteTextColor}; +} +.statediagram .edgeLabel { + color: red; // ${t.noteTextColor}; +} + +#dependencyStart, #dependencyEnd { + fill: ${t.lineColor}; + stroke: ${t.lineColor}; + stroke-width: 1; +} + +.statediagramTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; +} +`,"getStyles"),yC=fet});var det,pet,met,get,Ove,yet,vet,xet,bet,L$,Ive,Pve,Bve=M(()=>{"use strict";yr();gC();tr();gr();Xt();pt();det=o(t=>t.append("circle").attr("class","start-state").attr("r",ge().state.sizeUnit).attr("cx",ge().state.padding+ge().state.sizeUnit).attr("cy",ge().state.padding+ge().state.sizeUnit),"drawStartState"),pet=o(t=>t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",ge().state.textHeight).attr("class","divider").attr("x2",ge().state.textHeight*2).attr("y1",0).attr("y2",0),"drawDivider"),met=o((t,e)=>{let r=t.append("text").attr("x",2*ge().state.padding).attr("y",ge().state.textHeight+2*ge().state.padding).attr("font-size",ge().state.fontSize).attr("class","state-title").text(e.id),n=r.node().getBBox();return t.insert("rect",":first-child").attr("x",ge().state.padding).attr("y",ge().state.padding).attr("width",n.width+2*ge().state.padding).attr("height",n.height+2*ge().state.padding).attr("rx",ge().state.radius),r},"drawSimpleState"),get=o((t,e)=>{let r=o(function(p,m,g){let y=p.append("tspan").attr("x",2*ge().state.padding).text(m);g||y.attr("dy",ge().state.textHeight)},"addTspan"),i=t.append("text").attr("x",2*ge().state.padding).attr("y",ge().state.textHeight+1.3*ge().state.padding).attr("font-size",ge().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),a=i.height,s=t.append("text").attr("x",ge().state.padding).attr("y",a+ge().state.padding*.4+ge().state.dividerMargin+ge().state.textHeight).attr("class","state-description"),l=!0,u=!0;e.descriptions.forEach(function(p){l||(r(s,p,u),u=!1),l=!1});let h=t.append("line").attr("x1",ge().state.padding).attr("y1",ge().state.padding+a+ge().state.dividerMargin/2).attr("y2",ge().state.padding+a+ge().state.dividerMargin/2).attr("class","descr-divider"),f=s.node().getBBox(),d=Math.max(f.width,i.width);return h.attr("x2",d+3*ge().state.padding),t.insert("rect",":first-child").attr("x",ge().state.padding).attr("y",ge().state.padding).attr("width",d+2*ge().state.padding).attr("height",f.height+a+2*ge().state.padding).attr("rx",ge().state.radius),t},"drawDescrState"),Ove=o((t,e,r)=>{let n=ge().state.padding,i=2*ge().state.padding,a=t.node().getBBox(),s=a.width,l=a.x,u=t.append("text").attr("x",0).attr("y",ge().state.titleShift).attr("font-size",ge().state.fontSize).attr("class","state-title").text(e.id),f=u.node().getBBox().width+i,d=Math.max(f,s);d===s&&(d=d+i);let p,m=t.node().getBBox();e.doc,p=l-n,f>s&&(p=(s-d)/2+n),Math.abs(l-m.x)s&&(p=l-(f-s)/2);let g=1-ge().state.textHeight;return t.insert("rect",":first-child").attr("x",p).attr("y",g).attr("class",r?"alt-composit":"composit").attr("width",d).attr("height",m.height+ge().state.textHeight+ge().state.titleShift+1).attr("rx","0"),u.attr("x",p+n),f<=s&&u.attr("x",l+(d-i)/2-f/2+n),t.insert("rect",":first-child").attr("x",p).attr("y",ge().state.titleShift-ge().state.textHeight-ge().state.padding).attr("width",d).attr("height",ge().state.textHeight*3).attr("rx",ge().state.radius),t.insert("rect",":first-child").attr("x",p).attr("y",ge().state.titleShift-ge().state.textHeight-ge().state.padding).attr("width",d).attr("height",m.height+3+2*ge().state.textHeight).attr("rx",ge().state.radius),t},"addTitleAndBox"),yet=o(t=>(t.append("circle").attr("class","end-state-outer").attr("r",ge().state.sizeUnit+ge().state.miniPadding).attr("cx",ge().state.padding+ge().state.sizeUnit+ge().state.miniPadding).attr("cy",ge().state.padding+ge().state.sizeUnit+ge().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",ge().state.sizeUnit).attr("cx",ge().state.padding+ge().state.sizeUnit+2).attr("cy",ge().state.padding+ge().state.sizeUnit+2)),"drawEndState"),vet=o((t,e)=>{let r=ge().state.forkWidth,n=ge().state.forkHeight;if(e.parentId){let i=r;r=n,n=i}return t.append("rect").style("stroke","black").style("fill","black").attr("width",r).attr("height",n).attr("x",ge().state.padding).attr("y",ge().state.padding)},"drawForkJoinState"),xet=o((t,e,r,n)=>{let i=0,a=n.append("text");a.style("text-anchor","start"),a.attr("class","noteText");let s=t.replace(/\r\n/g,"
    ");s=s.replace(/\n/g,"
    ");let l=s.split(tt.lineBreakRegex),u=1.25*ge().state.noteMargin;for(let h of l){let f=h.trim();if(f.length>0){let d=a.append("tspan");if(d.text(f),u===0){let p=d.node().getBBox();u+=p.height}i+=u,d.attr("x",e+ge().state.noteMargin),d.attr("y",r+i+1.25*ge().state.noteMargin)}}return{textWidth:a.node().getBBox().width,textHeight:i}},"_drawLongText"),bet=o((t,e)=>{e.attr("class","state-note");let r=e.append("rect").attr("x",0).attr("y",ge().state.padding),n=e.append("g"),{textWidth:i,textHeight:a}=xet(t,0,0,n);return r.attr("height",a+2*ge().state.noteMargin),r.attr("width",i+ge().state.noteMargin*2),r},"drawNote"),L$=o(function(t,e){let r=e.id,n={id:r,label:e.id,width:0,height:0},i=t.append("g").attr("id",r).attr("class","stateGroup");e.type==="start"&&det(i),e.type==="end"&&yet(i),(e.type==="fork"||e.type==="join")&&vet(i,e),e.type==="note"&&bet(e.note.text,i),e.type==="divider"&&pet(i),e.type==="default"&&e.descriptions.length===0&&met(i,e),e.type==="default"&&e.descriptions.length>0&&get(i,e);let a=i.node().getBBox();return n.width=a.width+2*ge().state.padding,n.height=a.height+2*ge().state.padding,n},"drawState"),Ive=0,Pve=o(function(t,e,r){let n=o(function(u){switch(u){case al.relationType.AGGREGATION:return"aggregation";case al.relationType.EXTENSION:return"extension";case al.relationType.COMPOSITION:return"composition";case al.relationType.DEPENDENCY:return"dependency"}},"getRelationType");e.points=e.points.filter(u=>!Number.isNaN(u.y));let i=e.points,a=Cl().x(function(u){return u.x}).y(function(u){return u.y}).curve(No),s=t.append("path").attr("d",a(i)).attr("id","edge"+Ive).attr("class","transition"),l="";if(ge().state.arrowMarkerAbsolute&&(l=md(!0)),s.attr("marker-end","url("+l+"#"+n(al.relationType.DEPENDENCY)+"End)"),r.title!==void 0){let u=t.append("g").attr("class","stateLabel"),{x:h,y:f}=qt.calcLabelPosition(e.points),d=tt.getRows(r.title),p=0,m=[],g=0,y=0;for(let b=0;b<=d.length;b++){let T=u.append("text").attr("text-anchor","middle").text(d[b]).attr("x",h).attr("y",f+p),S=T.node().getBBox();g=Math.max(g,S.width),y=Math.min(y,S.x),X.info(S.x,h,f+p),p===0&&(p=T.node().getBBox().height,X.info("Title height",p,f)),m.push(T)}let v=p*d.length;if(d.length>1){let b=(d.length-1)*p*.5;m.forEach((T,S)=>T.attr("y",f+S*p-b)),v=p*d.length}let x=u.node().getBBox();u.insert("rect",":first-child").attr("class","box").attr("x",h-g/2-ge().state.padding/2).attr("y",f-v/2-ge().state.padding/2-3.5).attr("width",g+ge().state.padding).attr("height",v+ge().state.padding),X.info(x)}Ive++},"drawEdge")});var bo,R$,Tet,wet,ket,Eet,Fve,$ve,zve=M(()=>{"use strict";yr();hN();qo();pt();gr();Bve();Xt();Ei();R$={},Tet=o(function(){},"setConf"),wet=o(function(t){t.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"insertMarkers"),ket=o(function(t,e,r,n){bo=ge().state;let i=ge().securityLevel,a;i==="sandbox"&&(a=qe("#i"+e));let s=i==="sandbox"?qe(a.nodes()[0].contentDocument.body):qe("body"),l=i==="sandbox"?a.nodes()[0].contentDocument:document;X.debug("Rendering diagram "+t);let u=s.select(`[id='${e}']`);wet(u);let h=n.db.getRootDoc();Fve(h,u,void 0,!1,s,l,n);let f=bo.padding,d=u.node().getBBox(),p=d.width+f*2,m=d.height+f*2,g=p*1.75;mn(u,m,g,bo.useMaxWidth),u.attr("viewBox",`${d.x-bo.padding} ${d.y-bo.padding} `+p+" "+m)},"draw"),Eet=o(t=>t?t.length*bo.fontSizeFactor:1,"getLabelWidth"),Fve=o((t,e,r,n,i,a,s)=>{let l=new cn({compound:!0,multigraph:!0}),u,h=!0;for(u=0;u{let w=S.parentElement,k=0,C=0;w&&(w.parentElement&&(k=w.parentElement.getBBox().width),C=parseInt(w.getAttribute("data-x-shift"),10),Number.isNaN(C)&&(C=0)),S.setAttribute("x1",0-C+8),S.setAttribute("x2",k-C-8)})):X.debug("No Node "+b+": "+JSON.stringify(l.node(b)))});let v=y.getBBox();l.edges().forEach(function(b){b!==void 0&&l.edge(b)!==void 0&&(X.debug("Edge "+b.v+" -> "+b.w+": "+JSON.stringify(l.edge(b))),Pve(e,l.edge(b),l.edge(b).relation))}),v=y.getBBox();let x={id:r||"root",label:r||"root",width:0,height:0};return x.width=v.width+2*bo.padding,x.height=v.height+2*bo.padding,X.debug("Doc rendered",x,l),x},"renderDoc"),$ve={setConf:Tet,draw:ket}});var Gve={};dr(Gve,{diagram:()=>Cet});var Cet,Vve=M(()=>{"use strict";p$();gC();D$();zve();Cet={parser:oC,get db(){return new al(1)},renderer:$ve,styles:yC,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var qve={};dr(qve,{diagram:()=>Let});var Let,Wve=M(()=>{"use strict";p$();gC();D$();_$();Let={parser:oC,get db(){return new al(2)},renderer:Lve,styles:yC,init:o(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")}});var N$,jve,Kve=M(()=>{"use strict";N$=(function(){var t=o(function(d,p,m,g){for(m=m||{},g=d.length;g--;m[d[g]]=p);return m},"o"),e=[6,8,10,11,12,14,16,17,18],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,14],u={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:o(function(p,m,g,y,v,x,b){var T=x.length-1;switch(v){case 1:return x[T-1];case 2:this.$=[];break;case 3:x[T-1].push(x[T]),this.$=x[T-1];break;case 4:case 5:this.$=x[T];break;case 6:case 7:this.$=[];break;case 8:y.setDiagramTitle(x[T].substr(6)),this.$=x[T].substr(6);break;case 9:this.$=x[T].trim(),y.setAccTitle(this.$);break;case 10:case 11:this.$=x[T].trim(),y.setAccDescription(this.$);break;case 12:y.addSection(x[T].substr(8)),this.$=x[T].substr(8);break;case 13:y.addTask(x[T-1],x[T]),this.$="task";break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:r,12:n,14:i,16:a,17:s,18:l},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:o(function(p,m){if(m.recoverable)this.trace(p);else{var g=new Error(p);throw g.hash=m,g}},"parseError"),parse:o(function(p){var m=this,g=[0],y=[],v=[null],x=[],b=this.table,T="",S=0,w=0,k=0,C=2,A=1,L=x.slice.call(arguments,1),I=Object.create(this.lexer),R={yy:{}};for(var E in this.yy)Object.prototype.hasOwnProperty.call(this.yy,E)&&(R.yy[E]=this.yy[E]);I.setInput(p,R.yy),R.yy.lexer=I,R.yy.parser=this,typeof I.yylloc>"u"&&(I.yylloc={});var _=I.yylloc;x.push(_);var D=I.options&&I.options.ranges;typeof R.yy.parseError=="function"?this.parseError=R.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function O(te){g.length=g.length-2*te,v.length=v.length-te,x.length=x.length-te}o(O,"popStack");function N(){var te;return te=y.pop()||I.lex()||A,typeof te!="number"&&(te instanceof Array&&(y=te,te=y.pop()),te=m.symbols_[te]||te),te}o(N,"lex");for(var P,B,F,V,$,U,j={},ee,q,oe,Q;;){if(F=g[g.length-1],this.defaultActions[F]?V=this.defaultActions[F]:((P===null||typeof P>"u")&&(P=N()),V=b[F]&&b[F][P]),typeof V>"u"||!V.length||!V[0]){var ue="";Q=[];for(ee in b[F])this.terminals_[ee]&&ee>C&&Q.push("'"+this.terminals_[ee]+"'");I.showPosition?ue="Parse error on line "+(S+1)+`: +`+I.showPosition()+` +Expecting `+Q.join(", ")+", got '"+(this.terminals_[P]||P)+"'":ue="Parse error on line "+(S+1)+": Unexpected "+(P==A?"end of input":"'"+(this.terminals_[P]||P)+"'"),this.parseError(ue,{text:I.match,token:this.terminals_[P]||P,line:I.yylineno,loc:_,expected:Q})}if(V[0]instanceof Array&&V.length>1)throw new Error("Parse Error: multiple actions possible at state: "+F+", token: "+P);switch(V[0]){case 1:g.push(P),v.push(I.yytext),x.push(I.yylloc),g.push(V[1]),P=null,B?(P=B,B=null):(w=I.yyleng,T=I.yytext,S=I.yylineno,_=I.yylloc,k>0&&k--);break;case 2:if(q=this.productions_[V[1]][1],j.$=v[v.length-q],j._$={first_line:x[x.length-(q||1)].first_line,last_line:x[x.length-1].last_line,first_column:x[x.length-(q||1)].first_column,last_column:x[x.length-1].last_column},D&&(j._$.range=[x[x.length-(q||1)].range[0],x[x.length-1].range[1]]),U=this.performAction.apply(j,[T,w,S,R.yy,V[1],v,x].concat(L)),typeof U<"u")return U;q&&(g=g.slice(0,-1*q*2),v=v.slice(0,-1*q),x=x.slice(0,-1*q)),g.push(this.productions_[V[1]][0]),v.push(j.$),x.push(j._$),oe=b[g[g.length-2]][g[g.length-1]],g.push(oe);break;case 3:return!0}}return!0},"parse")},h=(function(){var d={EOF:1,parseError:o(function(m,g){if(this.yy.parser)this.yy.parser.parseError(m,g);else throw new Error(m)},"parseError"),setInput:o(function(p,m){return this.yy=m||this.yy||{},this._input=p,this._more=this._backtrack=this.done=!1,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},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var p=this._input[0];this.yytext+=p,this.yyleng++,this.offset++,this.match+=p,this.matched+=p;var m=p.match(/(?:\r\n?|\n).*/g);return m?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),p},"input"),unput:o(function(p){var m=p.length,g=p.split(/(?:\r\n?|\n)/g);this._input=p+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-m),this.offset-=m;var y=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),g.length-1&&(this.yylineno-=g.length-1);var v=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===y.length?this.yylloc.first_column:0)+y[y.length-g.length].length-g[0].length:this.yylloc.first_column-m},this.options.ranges&&(this.yylloc.range=[v[0],v[0]+this.yyleng-m]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(p){this.unput(this.match.slice(p))},"less"),pastInput:o(function(){var p=this.matched.substr(0,this.matched.length-this.match.length);return(p.length>20?"...":"")+p.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var p=this.match;return p.length<20&&(p+=this._input.substr(0,20-p.length)),(p.substr(0,20)+(p.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var p=this.pastInput(),m=new Array(p.length+1).join("-");return p+this.upcomingInput()+` +`+m+"^"},"showPosition"),test_match:o(function(p,m){var g,y,v;if(this.options.backtrack_lexer&&(v={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},this.options.ranges&&(v.yylloc.range=this.yylloc.range.slice(0))),y=p[0].match(/(?:\r\n?|\n).*/g),y&&(this.yylineno+=y.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:y?y[y.length-1].length-y[y.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+p[0].length},this.yytext+=p[0],this.match+=p[0],this.matches=p,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(p[0].length),this.matched+=p[0],g=this.performAction.call(this,this.yy,this,m,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),g)return g;if(this._backtrack){for(var x in v)this[x]=v[x];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var p,m,g,y;this._more||(this.yytext="",this.match="");for(var v=this._currentRules(),x=0;xm[0].length)){if(m=g,y=x,this.options.backtrack_lexer){if(p=this.test_match(g,v[x]),p!==!1)return p;if(this._backtrack){m=!1;continue}else return!1}else if(!this.options.flex)break}return m?(p=this.test_match(m,v[y]),p!==!1?p:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var m=this.next();return m||this.lex()},"lex"),begin:o(function(m){this.conditionStack.push(m)},"begin"),popState:o(function(){var m=this.conditionStack.length-1;return m>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(m){return m=this.conditionStack.length-1-Math.abs(m||0),m>=0?this.conditionStack[m]:"INITIAL"},"topState"),pushState:o(function(m){this.begin(m)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(m,g,y,v){var x=v;switch(y){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};return d})();u.lexer=h;function f(){this.yy={}}return o(f,"Parser"),f.prototype=u,u.Parser=f,new f})();N$.parser=N$;jve=N$});var uy,M$,C4,A4,Iet,Oet,Pet,Bet,Fet,$et,zet,Qve,Get,I$,Zve=M(()=>{"use strict";Xt();ci();uy="",M$=[],C4=[],A4=[],Iet=o(function(){M$.length=0,C4.length=0,uy="",A4.length=0,Sr()},"clear"),Oet=o(function(t){uy=t,M$.push(t)},"addSection"),Pet=o(function(){return M$},"getSections"),Bet=o(function(){let t=Qve(),e=100,r=0;for(;!t&&r{r.people&&t.push(...r.people)}),[...new Set(t)].sort()},"updateActors"),$et=o(function(t,e){let r=e.substr(1).split(":"),n=0,i=[];r.length===1?(n=Number(r[0]),i=[]):(n=Number(r[0]),i=r[1].split(","));let a=i.map(l=>l.trim()),s={section:uy,type:uy,people:a,task:t,score:n};A4.push(s)},"addTask"),zet=o(function(t){let e={section:uy,type:uy,description:t,task:t,classes:[]};C4.push(e)},"addTaskOrg"),Qve=o(function(){let t=o(function(r){return A4[r].processed},"compileTask"),e=!0;for(let[r,n]of A4.entries())t(r),e=e&&n.processed;return e},"compileTasks"),Get=o(function(){return Fet()},"getActors"),I$={getConfig:o(()=>ge().journey,"getConfig"),clear:Iet,setDiagramTitle:$r,getDiagramTitle:Pr,setAccTitle:Rr,getAccTitle:Mr,setAccDescription:Ir,getAccDescription:Or,addSection:Oet,getSections:Pet,getTasks:Bet,addTask:$et,addTaskOrg:zet,getActors:Get}});var Vet,Jve,e2e=M(()=>{"use strict";yg();Vet=o(t=>`.label { + font-family: ${t.fontFamily}; + color: ${t.textColor}; + } + .mouth { + stroke: #666; + } + + line { + stroke: ${t.textColor} + } + + .legend { + fill: ${t.textColor}; + font-family: ${t.fontFamily}; + } + + .label text { + fill: #333; + } + .label { + color: ${t.textColor} + } + + .face { + ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"}; + stroke: #999; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${t.arrowheadColor}; + } + + .edgePath .path { + stroke: ${t.lineColor}; + stroke-width: 1.5px; + } + + .flowchart-link { + stroke: ${t.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${t.edgeLabelBackground}; + rect { + opacity: 0.5; + } + text-align: center; + } + + .cluster rect { + } + + .cluster text { + fill: ${t.titleColor}; + } + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${t.fontFamily}; + font-size: 12px; + background: ${t.tertiaryColor}; + border: 1px solid ${t.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .task-type-0, .section-type-0 { + ${t.fillType0?`fill: ${t.fillType0}`:""}; + } + .task-type-1, .section-type-1 { + ${t.fillType0?`fill: ${t.fillType1}`:""}; + } + .task-type-2, .section-type-2 { + ${t.fillType0?`fill: ${t.fillType2}`:""}; + } + .task-type-3, .section-type-3 { + ${t.fillType0?`fill: ${t.fillType3}`:""}; + } + .task-type-4, .section-type-4 { + ${t.fillType0?`fill: ${t.fillType4}`:""}; + } + .task-type-5, .section-type-5 { + ${t.fillType0?`fill: ${t.fillType5}`:""}; + } + .task-type-6, .section-type-6 { + ${t.fillType0?`fill: ${t.fillType6}`:""}; + } + .task-type-7, .section-type-7 { + ${t.fillType0?`fill: ${t.fillType7}`:""}; + } + + .actor-0 { + ${t.actor0?`fill: ${t.actor0}`:""}; + } + .actor-1 { + ${t.actor1?`fill: ${t.actor1}`:""}; + } + .actor-2 { + ${t.actor2?`fill: ${t.actor2}`:""}; + } + .actor-3 { + ${t.actor3?`fill: ${t.actor3}`:""}; + } + .actor-4 { + ${t.actor4?`fill: ${t.actor4}`:""}; + } + .actor-5 { + ${t.actor5?`fill: ${t.actor5}`:""}; + } + ${zc()} +`,"getStyles"),Jve=Vet});var O$,Uet,r2e,n2e,Het,qet,t2e,Wet,Yet,i2e,Xet,hy,a2e=M(()=>{"use strict";yr();n2();O$=o(function(t,e){return Fd(t,e)},"drawRect"),Uet=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=Sl().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=Sl().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),r2e=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),n2e=o(function(t,e){return kj(t,e)},"drawText"),Het=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,n2e(t,e)},"drawLabel"),qet=o(function(t,e,r){let n=t.append("g"),i=ha();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width*e.taskCount+r.diagramMarginX*(e.taskCount-1),i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,O$(n,i),i2e(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),t2e=-1,Wet=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");t2e++,i.append("line").attr("id","task"+t2e).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),Uet(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=ha();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,O$(i,s);let l=e.x+14;e.people.forEach(u=>{let h=e.actors[u].color,f={cx:l,cy:e.y,r:7,fill:h,stroke:"#000",title:u,pos:e.actors[u].position};r2e(i,f),l+=10}),i2e(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),Yet=o(function(t,e){oT(t,e)},"drawBackgroundRect"),i2e=(function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(//gi);for(let v=0;v{let a=lh[i].color,s={cx:20,cy:n,r:7,fill:a,stroke:"#000",pos:lh[i].position};hy.drawCircle(t,s);let l=t.append("text").attr("visibility","hidden").text(i),u=l.node().getBoundingClientRect().width;l.remove();let h=[];if(u<=r)h=[i];else{let f=i.split(" "),d="";l=t.append("text").attr("visibility","hidden"),f.forEach(p=>{let m=d?`${d} ${p}`:p;if(l.text(m),l.node().getBoundingClientRect().width>r){if(d&&h.push(d),d=p,l.text(p),l.node().getBoundingClientRect().width>r){let y="";for(let v of p)y+=v,l.text(y+"-"),l.node().getBoundingClientRect().width>r&&(h.push(y.slice(0,-1)+"-"),y=v);d=y}}else d=m}),d&&h.push(d),l.remove()}h.forEach((f,d)=>{let p={x:40,y:n+7+d*20,fill:"#666",text:f,textMargin:e.boxTextMargin??5},g=hy.drawText(t,p).node().getBoundingClientRect().width;g>vC&&g>e.leftMargin-g&&(vC=g)}),n+=Math.max(20,h.length*20)})}var jet,lh,vC,Hl,Jf,Qet,sl,P$,s2e,Zet,B$,o2e=M(()=>{"use strict";yr();a2e();Xt();Ei();jet=o(function(t){Object.keys(t).forEach(function(r){Hl[r]=t[r]})},"setConf"),lh={},vC=0;o(Ket,"drawActorLegend");Hl=ge().journey,Jf=0,Qet=o(function(t,e,r,n){let i=ge(),a=i.journey.titleColor,s=i.journey.titleFontSize,l=i.journey.titleFontFamily,u=i.securityLevel,h;u==="sandbox"&&(h=qe("#i"+e));let f=u==="sandbox"?qe(h.nodes()[0].contentDocument.body):qe("body");sl.init();let d=f.select("#"+e);hy.initGraphics(d);let p=n.db.getTasks(),m=n.db.getDiagramTitle(),g=n.db.getActors();for(let S in lh)delete lh[S];let y=0;g.forEach(S=>{lh[S]={color:Hl.actorColours[y%Hl.actorColours.length],position:y},y++}),Ket(d),Jf=Hl.leftMargin+vC,sl.insert(0,0,Jf,Object.keys(lh).length*50),Zet(d,p,0);let v=sl.getBounds();m&&d.append("text").text(m).attr("x",Jf).attr("font-size",s).attr("font-weight","bold").attr("y",25).attr("fill",a).attr("font-family",l);let x=v.stopy-v.starty+2*Hl.diagramMarginY,b=Jf+v.stopx+2*Hl.diagramMarginX;mn(d,x,b,Hl.useMaxWidth),d.append("line").attr("x1",Jf).attr("y1",Hl.height*4).attr("x2",b-Jf-4).attr("y2",Hl.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");let T=m?70:0;d.attr("viewBox",`${v.startx} -25 ${b} ${x+T}`),d.attr("preserveAspectRatio","xMinYMin meet"),d.attr("height",x+T+25)},"draw"),sl={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:o(function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},"init"),updateVal:o(function(t,e,r,n){t[e]===void 0?t[e]=r:t[e]=n(r,t[e])},"updateVal"),updateBounds:o(function(t,e,r,n){let i=ge().journey,a=this,s=0;function l(u){return o(function(f){s++;let d=a.sequenceItems.length-s+1;a.updateVal(f,"starty",e-d*i.boxMargin,Math.min),a.updateVal(f,"stopy",n+d*i.boxMargin,Math.max),a.updateVal(sl.data,"startx",t-d*i.boxMargin,Math.min),a.updateVal(sl.data,"stopx",r+d*i.boxMargin,Math.max),u!=="activation"&&(a.updateVal(f,"startx",t-d*i.boxMargin,Math.min),a.updateVal(f,"stopx",r+d*i.boxMargin,Math.max),a.updateVal(sl.data,"starty",e-d*i.boxMargin,Math.min),a.updateVal(sl.data,"stopy",n+d*i.boxMargin,Math.max))},"updateItemBounds")}o(l,"updateFn"),this.sequenceItems.forEach(l())},"updateBounds"),insert:o(function(t,e,r,n){let i=Math.min(t,r),a=Math.max(t,r),s=Math.min(e,n),l=Math.max(e,n);this.updateVal(sl.data,"startx",i,Math.min),this.updateVal(sl.data,"starty",s,Math.min),this.updateVal(sl.data,"stopx",a,Math.max),this.updateVal(sl.data,"stopy",l,Math.max),this.updateBounds(i,s,a,l)},"insert"),bumpVerticalPos:o(function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},"bumpVerticalPos"),getVerticalPos:o(function(){return this.verticalPos},"getVerticalPos"),getBounds:o(function(){return this.data},"getBounds")},P$=Hl.sectionFills,s2e=Hl.sectionColours,Zet=o(function(t,e,r){let n=ge().journey,i="",a=n.height*2+n.diagramMarginY,s=r+a,l=0,u="#CCC",h="black",f=0;for(let[d,p]of e.entries()){if(i!==p.section){u=P$[l%P$.length],f=l%P$.length,h=s2e[l%s2e.length];let g=0,y=p.section;for(let x=d;x(lh[y]&&(g[y]=lh[y]),g),{});p.x=d*n.taskMargin+d*n.width+Jf,p.y=s,p.width=n.diagramMarginX,p.height=n.diagramMarginY,p.colour=h,p.fill=u,p.num=f,p.actors=m,hy.drawTask(t,p,n),sl.insert(p.x,p.y,p.x+p.width+n.taskMargin,450)}},"drawTasks"),B$={setConf:jet,draw:Qet}});var l2e={};dr(l2e,{diagram:()=>Jet});var Jet,c2e=M(()=>{"use strict";Kve();Zve();e2e();o2e();Jet={parser:jve,db:I$,renderer:B$,styles:Jve,init:o(t=>{B$.setConf(t.journey),I$.clear()},"init")}});var $$,g2e,y2e=M(()=>{"use strict";$$=(function(){var t=o(function(p,m,g,y){for(g=g||{},y=p.length;y--;g[p[y]]=m);return g},"o"),e=[6,8,10,11,12,14,16,17,20,21],r=[1,9],n=[1,10],i=[1,11],a=[1,12],s=[1,13],l=[1,16],u=[1,17],h={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:o(function(m,g,y,v,x,b,T){var S=b.length-1;switch(x){case 1:return b[S-1];case 2:this.$=[];break;case 3:b[S-1].push(b[S]),this.$=b[S-1];break;case 4:case 5:this.$=b[S];break;case 6:case 7:this.$=[];break;case 8:v.getCommonDb().setDiagramTitle(b[S].substr(6)),this.$=b[S].substr(6);break;case 9:this.$=b[S].trim(),v.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=b[S].trim(),v.getCommonDb().setAccDescription(this.$);break;case 12:v.addSection(b[S].substr(8)),this.$=b[S].substr(8);break;case 15:v.addTask(b[S],0,""),this.$=b[S];break;case 16:v.addEvent(b[S].substr(2)),this.$=b[S];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:18,11:r,12:n,14:i,16:a,17:s,18:14,19:15,20:l,21:u},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,19]},{15:[1,20]},t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),t(e,[2,4]),t(e,[2,9]),t(e,[2,10])],defaultActions:{},parseError:o(function(m,g){if(g.recoverable)this.trace(m);else{var y=new Error(m);throw y.hash=g,y}},"parseError"),parse:o(function(m){var g=this,y=[0],v=[],x=[null],b=[],T=this.table,S="",w=0,k=0,C=0,A=2,L=1,I=b.slice.call(arguments,1),R=Object.create(this.lexer),E={yy:{}};for(var _ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,_)&&(E.yy[_]=this.yy[_]);R.setInput(m,E.yy),E.yy.lexer=R,E.yy.parser=this,typeof R.yylloc>"u"&&(R.yylloc={});var D=R.yylloc;b.push(D);var O=R.options&&R.options.ranges;typeof E.yy.parseError=="function"?this.parseError=E.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function N(re){y.length=y.length-2*re,x.length=x.length-re,b.length=b.length-re}o(N,"popStack");function P(){var re;return re=v.pop()||R.lex()||L,typeof re!="number"&&(re instanceof Array&&(v=re,re=v.pop()),re=g.symbols_[re]||re),re}o(P,"lex");for(var B,F,V,$,U,j,ee={},q,oe,Q,ue;;){if(V=y[y.length-1],this.defaultActions[V]?$=this.defaultActions[V]:((B===null||typeof B>"u")&&(B=P()),$=T[V]&&T[V][B]),typeof $>"u"||!$.length||!$[0]){var te="";ue=[];for(q in T[V])this.terminals_[q]&&q>A&&ue.push("'"+this.terminals_[q]+"'");R.showPosition?te="Parse error on line "+(w+1)+`: +`+R.showPosition()+` +Expecting `+ue.join(", ")+", got '"+(this.terminals_[B]||B)+"'":te="Parse error on line "+(w+1)+": Unexpected "+(B==L?"end of input":"'"+(this.terminals_[B]||B)+"'"),this.parseError(te,{text:R.match,token:this.terminals_[B]||B,line:R.yylineno,loc:D,expected:ue})}if($[0]instanceof Array&&$.length>1)throw new Error("Parse Error: multiple actions possible at state: "+V+", token: "+B);switch($[0]){case 1:y.push(B),x.push(R.yytext),b.push(R.yylloc),y.push($[1]),B=null,F?(B=F,F=null):(k=R.yyleng,S=R.yytext,w=R.yylineno,D=R.yylloc,C>0&&C--);break;case 2:if(oe=this.productions_[$[1]][1],ee.$=x[x.length-oe],ee._$={first_line:b[b.length-(oe||1)].first_line,last_line:b[b.length-1].last_line,first_column:b[b.length-(oe||1)].first_column,last_column:b[b.length-1].last_column},O&&(ee._$.range=[b[b.length-(oe||1)].range[0],b[b.length-1].range[1]]),j=this.performAction.apply(ee,[S,k,w,E.yy,$[1],x,b].concat(I)),typeof j<"u")return j;oe&&(y=y.slice(0,-1*oe*2),x=x.slice(0,-1*oe),b=b.slice(0,-1*oe)),y.push(this.productions_[$[1]][0]),x.push(ee.$),b.push(ee._$),Q=T[y[y.length-2]][y[y.length-1]],y.push(Q);break;case 3:return!0}}return!0},"parse")},f=(function(){var p={EOF:1,parseError:o(function(g,y){if(this.yy.parser)this.yy.parser.parseError(g,y);else throw new Error(g)},"parseError"),setInput:o(function(m,g){return this.yy=g||this.yy||{},this._input=m,this._more=this._backtrack=this.done=!1,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},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var m=this._input[0];this.yytext+=m,this.yyleng++,this.offset++,this.match+=m,this.matched+=m;var g=m.match(/(?:\r\n?|\n).*/g);return g?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),m},"input"),unput:o(function(m){var g=m.length,y=m.split(/(?:\r\n?|\n)/g);this._input=m+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-g),this.offset-=g;var v=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),y.length-1&&(this.yylineno-=y.length-1);var x=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:y?(y.length===v.length?this.yylloc.first_column:0)+v[v.length-y.length].length-y[0].length:this.yylloc.first_column-g},this.options.ranges&&(this.yylloc.range=[x[0],x[0]+this.yyleng-g]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(m){this.unput(this.match.slice(m))},"less"),pastInput:o(function(){var m=this.matched.substr(0,this.matched.length-this.match.length);return(m.length>20?"...":"")+m.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var m=this.match;return m.length<20&&(m+=this._input.substr(0,20-m.length)),(m.substr(0,20)+(m.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var m=this.pastInput(),g=new Array(m.length+1).join("-");return m+this.upcomingInput()+` +`+g+"^"},"showPosition"),test_match:o(function(m,g){var y,v,x;if(this.options.backtrack_lexer&&(x={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},this.options.ranges&&(x.yylloc.range=this.yylloc.range.slice(0))),v=m[0].match(/(?:\r\n?|\n).*/g),v&&(this.yylineno+=v.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:v?v[v.length-1].length-v[v.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+m[0].length},this.yytext+=m[0],this.match+=m[0],this.matches=m,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(m[0].length),this.matched+=m[0],y=this.performAction.call(this,this.yy,this,g,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),y)return y;if(this._backtrack){for(var b in x)this[b]=x[b];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var m,g,y,v;this._more||(this.yytext="",this.match="");for(var x=this._currentRules(),b=0;bg[0].length)){if(g=y,v=b,this.options.backtrack_lexer){if(m=this.test_match(y,x[b]),m!==!1)return m;if(this._backtrack){g=!1;continue}else return!1}else if(!this.options.flex)break}return g?(m=this.test_match(g,x[v]),m!==!1?m:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var g=this.next();return g||this.lex()},"lex"),begin:o(function(g){this.conditionStack.push(g)},"begin"),popState:o(function(){var g=this.conditionStack.length-1;return g>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(g){return g=this.conditionStack.length-1-Math.abs(g||0),g>=0?this.conditionStack[g]:"INITIAL"},"topState"),pushState:o(function(g){this.begin(g)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(g,y,v,x){var b=x;switch(v){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;break;case 8:return this.popState(),"acc_title_value";break;case 9:return this.begin("acc_descr"),14;break;case 10:return this.popState(),"acc_descr_value";break;case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},"anonymous"),rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^:\n]+)/i,/^(?::\s(?:[^:\n]|:(?!\s))+)/i,/^(?:[^#:\n]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],inclusive:!0}}};return p})();h.lexer=f;function d(){this.yy={}}return o(d,"Parser"),d.prototype=h,h.Parser=d,new d})();$$.parser=$$;g2e=$$});var G$={};dr(G$,{addEvent:()=>C2e,addSection:()=>w2e,addTask:()=>S2e,addTaskOrg:()=>A2e,clear:()=>T2e,default:()=>ltt,getCommonDb:()=>b2e,getSections:()=>k2e,getTasks:()=>E2e});var fy,x2e,z$,xC,dy,b2e,T2e,w2e,k2e,E2e,S2e,C2e,A2e,v2e,ltt,_2e=M(()=>{"use strict";ci();fy="",x2e=0,z$=[],xC=[],dy=[],b2e=o(()=>nv,"getCommonDb"),T2e=o(function(){z$.length=0,xC.length=0,fy="",dy.length=0,Sr()},"clear"),w2e=o(function(t){fy=t,z$.push(t)},"addSection"),k2e=o(function(){return z$},"getSections"),E2e=o(function(){let t=v2e(),e=100,r=0;for(;!t&&rr.id===x2e-1).events.push(t)},"addEvent"),A2e=o(function(t){let e={section:fy,type:fy,description:t,task:t,classes:[]};xC.push(e)},"addTaskOrg"),v2e=o(function(){let t=o(function(r){return dy[r].processed},"compileTask"),e=!0;for(let[r,n]of dy.entries())t(r),e=e&&n.processed;return e},"compileTasks"),ltt={clear:T2e,getCommonDb:b2e,addSection:w2e,getSections:k2e,getTasks:E2e,addTask:S2e,addTaskOrg:A2e,addEvent:C2e}});function N2e(t,e){t.each(function(){var r=qe(this),n=r.text().split(/(\s+|
    )/).reverse(),i,a=[],s=1.1,l=r.attr("y"),u=parseFloat(r.attr("dy")),h=r.text(null).append("tspan").attr("x",0).attr("y",l).attr("dy",u+"em");for(let f=0;fe||i==="
    ")&&(a.pop(),h.text(a.join(" ").trim()),i==="
    "?a=[""]:a=[i],h=r.append("tspan").attr("x",0).attr("y",l).attr("dy",s+"em").text(i))})}var ctt,bC,utt,htt,L2e,ftt,dtt,D2e,ptt,mtt,gtt,V$,R2e,ytt,vtt,xtt,btt,ed,M2e=M(()=>{"use strict";yr();ctt=12,bC=o(function(t,e){let r=t.append("rect");return r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),r.attr("rx",e.rx),r.attr("ry",e.ry),e.class!==void 0&&r.attr("class",e.class),r},"drawRect"),utt=o(function(t,e){let n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(u){let h=Sl().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}o(a,"smile");function s(u){let h=Sl().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);u.append("path").attr("class","mouth").attr("d",h).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}o(s,"sad");function l(u){u.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return o(l,"ambivalent"),e.score>3?a(i):e.score<3?s(i):l(i),n},"drawFace"),htt=o(function(t,e){let r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),r.class!==void 0&&r.attr("class",r.class),e.title!==void 0&&r.append("title").text(e.title),r},"drawCircle"),L2e=o(function(t,e){let r=e.text.replace(//gi," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),e.class!==void 0&&n.attr("class",e.class);let i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},"drawText"),ftt=o(function(t,e){function r(i,a,s,l,u){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+l-u)+" "+(i+s-u*1.2)+","+(a+l)+" "+i+","+(a+l)}o(r,"genPoints");let n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,L2e(t,e)},"drawLabel"),dtt=o(function(t,e,r){let n=t.append("g"),i=V$();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width,i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,bC(n,i),R2e(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)},"drawSection"),D2e=-1,ptt=o(function(t,e,r){let n=e.x+r.width/2,i=t.append("g");D2e++,i.append("line").attr("id","task"+D2e).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),utt(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});let s=V$();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,bC(i,s),R2e(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},"drawTask"),mtt=o(function(t,e){bC(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,class:"rect"}).lower()},"drawBackgroundRect"),gtt=o(function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},"getTextObj"),V$=o(function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},"getNoteRect"),R2e=(function(){function t(i,a,s,l,u,h,f,d){let p=a.append("text").attr("x",s+u/2).attr("y",l+h/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(p,f)}o(t,"byText");function e(i,a,s,l,u,h,f,d,p){let{taskFontSize:m,taskFontFamily:g}=d,y=i.split(//gi);for(let v=0;v{"use strict";yr();M2e();pt();Xt();Ei();Ttt=o(function(t,e,r,n){let i=ge(),a=i.timeline?.leftMargin??50;X.debug("timeline",n.db);let s=i.securityLevel,l;s==="sandbox"&&(l=qe("#i"+e));let h=(s==="sandbox"?qe(l.nodes()[0].contentDocument.body):qe("body")).select("#"+e);h.append("g");let f=n.db.getTasks(),d=n.db.getCommonDb().getDiagramTitle();X.debug("task",f),ed.initGraphics(h);let p=n.db.getSections();X.debug("sections",p);let m=0,g=0,y=0,v=0,x=50+a,b=50;v=50;let T=0,S=!0;p.forEach(function(L){let I={number:T,descr:L,section:T,width:150,padding:20,maxHeight:m},R=ed.getVirtualNodeHeight(h,I,i);X.debug("sectionHeight before draw",R),m=Math.max(m,R+20)});let w=0,k=0;X.debug("tasks.length",f.length);for(let[L,I]of f.entries()){let R={number:L,descr:I,section:I.section,width:150,padding:20,maxHeight:g},E=ed.getVirtualNodeHeight(h,R,i);X.debug("taskHeight before draw",E),g=Math.max(g,E+20),w=Math.max(w,I.events.length);let _=0;for(let D of I.events){let O={descr:D,section:I.section,number:I.section,width:150,padding:20,maxHeight:50};_+=ed.getVirtualNodeHeight(h,O,i)}I.events.length>0&&(_+=(I.events.length-1)*10),k=Math.max(k,_)}X.debug("maxSectionHeight before draw",m),X.debug("maxTaskHeight before draw",g),p&&p.length>0?p.forEach(L=>{let I=f.filter(D=>D.section===L),R={number:T,descr:L,section:T,width:200*Math.max(I.length,1)-50,padding:20,maxHeight:m};X.debug("sectionNode",R);let E=h.append("g"),_=ed.drawNode(E,R,T,i);X.debug("sectionNode output",_),E.attr("transform",`translate(${x}, ${v})`),b+=m+50,I.length>0&&I2e(h,I,T,x,b,g,i,w,k,m,!1),x+=200*Math.max(I.length,1),b=v,T++}):(S=!1,I2e(h,f,T,x,b,g,i,w,k,m,!0));let C=h.node().getBBox();X.debug("bounds",C),d&&h.append("text").text(d).attr("x",C.width/2-a).attr("font-size","4ex").attr("font-weight","bold").attr("y",20),y=S?m+g+150:g+100,h.append("g").attr("class","lineWrapper").append("line").attr("x1",a).attr("y1",y).attr("x2",C.width+3*a).attr("y2",y).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)"),ic(void 0,h,i.timeline?.padding??50,i.timeline?.useMaxWidth??!1)},"draw"),I2e=o(function(t,e,r,n,i,a,s,l,u,h,f){for(let d of e){let p={descr:d.task,section:r,number:r,width:150,padding:20,maxHeight:a};X.debug("taskNode",p);let m=t.append("g").attr("class","taskWrapper"),y=ed.drawNode(m,p,r,s).height;if(X.debug("taskHeight after draw",y),m.attr("transform",`translate(${n}, ${i})`),a=Math.max(a,y),d.events){let v=t.append("g").attr("class","lineWrapper"),x=a;i+=100,x=x+wtt(t,d.events,r,n,i,s),i-=100,v.append("line").attr("x1",n+190/2).attr("y1",i+a).attr("x2",n+190/2).attr("y2",i+a+100+u+100).attr("stroke-width",2).attr("stroke","black").attr("marker-end","url(#arrowhead)").attr("stroke-dasharray","5,5")}n=n+200,f&&!s.timeline?.disableMulticolor&&r++}i=i-10},"drawTasks"),wtt=o(function(t,e,r,n,i,a){let s=0,l=i;i=i+100;for(let u of e){let h={descr:u,section:r,number:r,width:150,padding:20,maxHeight:50};X.debug("eventNode",h);let f=t.append("g").attr("class","eventWrapper"),p=ed.drawNode(f,h,r,a).height;s=s+p,f.attr("transform",`translate(${n}, ${i})`),i=i+10+p}return i=l,s},"drawEvents"),O2e={setConf:o(()=>{},"setConf"),draw:Ttt}});var ktt,Ett,B2e,F2e=M(()=>{"use strict";eo();ktt=o(t=>{let e="";for(let r=0;r` + .edge { + stroke-width: 3; + } + ${ktt(t)} + .section-root rect, .section-root path, .section-root circle { + fill: ${t.git0}; + } + .section-root text { + fill: ${t.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .eventWrapper { + filter: brightness(120%); + } +`,"getStyles"),B2e=Ett});var $2e={};dr($2e,{diagram:()=>Stt});var Stt,z2e=M(()=>{"use strict";y2e();_2e();P2e();F2e();Stt={db:G$,renderer:O2e,parser:g2e,styles:B2e}});var U$,U2e,H2e=M(()=>{"use strict";U$=(function(){var t=o(function(S,w,k,C){for(k=k||{},C=S.length;C--;k[S[C]]=w);return k},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,6,13,15,16,19,22],g=[1,33],y=[1,34],v=[1,6,7,11,13,15,16,19,22],x={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:o(function(w,k,C,A,L,I,R){var E=I.length-1;switch(L){case 6:case 7:return A;case 8:A.getLogger().trace("Stop NL ");break;case 9:A.getLogger().trace("Stop EOF ");break;case 11:A.getLogger().trace("Stop NL2 ");break;case 12:A.getLogger().trace("Stop EOF2 ");break;case 15:A.getLogger().info("Node: ",I[E].id),A.addNode(I[E-1].length,I[E].id,I[E].descr,I[E].type);break;case 16:A.getLogger().trace("Icon: ",I[E]),A.decorateNode({icon:I[E]});break;case 17:case 21:A.decorateNode({class:I[E]});break;case 18:A.getLogger().trace("SPACELIST");break;case 19:A.getLogger().trace("Node: ",I[E].id),A.addNode(0,I[E].id,I[E].descr,I[E].type);break;case 20:A.decorateNode({icon:I[E]});break;case 25:A.getLogger().trace("node found ..",I[E-2]),this.$={id:I[E-1],descr:I[E-1],type:A.getType(I[E-2],I[E])};break;case 26:this.$={id:I[E],descr:I[E],type:A.nodeType.DEFAULT};break;case 27:A.getLogger().trace("node found ..",I[E-3]),this.$={id:I[E-3],descr:I[E-1],type:A.getType(I[E-2],I[E])};break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:r,9:22,12:11,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},{6:h,7:f,10:23,11:d},t(p,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:s,22:l}),t(p,[2,18]),t(p,[2,19]),t(p,[2,20]),t(p,[2,21]),t(p,[2,23]),t(p,[2,24]),t(p,[2,26],{19:[1,30]}),{20:[1,31]},{6:h,7:f,10:32,11:d},{1:[2,7],6:r,12:21,13:n,14:14,15:i,16:a,17:17,18:18,19:s,22:l},t(m,[2,14],{7:g,11:y}),t(v,[2,8]),t(v,[2,9]),t(v,[2,10]),t(p,[2,15]),t(p,[2,16]),t(p,[2,17]),{20:[1,35]},{21:[1,36]},t(m,[2,13],{7:g,11:y}),t(v,[2,11]),t(v,[2,12]),{21:[1,37]},t(p,[2,25]),t(p,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(w,k){if(k.recoverable)this.trace(w);else{var C=new Error(w);throw C.hash=k,C}},"parseError"),parse:o(function(w){var k=this,C=[0],A=[],L=[null],I=[],R=this.table,E="",_=0,D=0,O=0,N=2,P=1,B=I.slice.call(arguments,1),F=Object.create(this.lexer),V={yy:{}};for(var $ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,$)&&(V.yy[$]=this.yy[$]);F.setInput(w,V.yy),V.yy.lexer=F,V.yy.parser=this,typeof F.yylloc>"u"&&(F.yylloc={});var U=F.yylloc;I.push(U);var j=F.options&&F.options.ranges;typeof V.yy.parseError=="function"?this.parseError=V.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ee(W){C.length=C.length-2*W,L.length=L.length-W,I.length=I.length-W}o(ee,"popStack");function q(){var W;return W=A.pop()||F.lex()||P,typeof W!="number"&&(W instanceof Array&&(A=W,W=A.pop()),W=k.symbols_[W]||W),W}o(q,"lex");for(var oe,Q,ue,te,re,J,K={},ae,Z,de,ne;;){if(ue=C[C.length-1],this.defaultActions[ue]?te=this.defaultActions[ue]:((oe===null||typeof oe>"u")&&(oe=q()),te=R[ue]&&R[ue][oe]),typeof te>"u"||!te.length||!te[0]){var Te="";ne=[];for(ae in R[ue])this.terminals_[ae]&&ae>N&&ne.push("'"+this.terminals_[ae]+"'");F.showPosition?Te="Parse error on line "+(_+1)+`: +`+F.showPosition()+` +Expecting `+ne.join(", ")+", got '"+(this.terminals_[oe]||oe)+"'":Te="Parse error on line "+(_+1)+": Unexpected "+(oe==P?"end of input":"'"+(this.terminals_[oe]||oe)+"'"),this.parseError(Te,{text:F.match,token:this.terminals_[oe]||oe,line:F.yylineno,loc:U,expected:ne})}if(te[0]instanceof Array&&te.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ue+", token: "+oe);switch(te[0]){case 1:C.push(oe),L.push(F.yytext),I.push(F.yylloc),C.push(te[1]),oe=null,Q?(oe=Q,Q=null):(D=F.yyleng,E=F.yytext,_=F.yylineno,U=F.yylloc,O>0&&O--);break;case 2:if(Z=this.productions_[te[1]][1],K.$=L[L.length-Z],K._$={first_line:I[I.length-(Z||1)].first_line,last_line:I[I.length-1].last_line,first_column:I[I.length-(Z||1)].first_column,last_column:I[I.length-1].last_column},j&&(K._$.range=[I[I.length-(Z||1)].range[0],I[I.length-1].range[1]]),J=this.performAction.apply(K,[E,D,_,V.yy,te[1],L,I].concat(B)),typeof J<"u")return J;Z&&(C=C.slice(0,-1*Z*2),L=L.slice(0,-1*Z),I=I.slice(0,-1*Z)),C.push(this.productions_[te[1]][0]),L.push(K.$),I.push(K._$),de=R[C[C.length-2]][C[C.length-1]],C.push(de);break;case 3:return!0}}return!0},"parse")},b=(function(){var S={EOF:1,parseError:o(function(k,C){if(this.yy.parser)this.yy.parser.parseError(k,C);else throw new Error(k)},"parseError"),setInput:o(function(w,k){return this.yy=k||this.yy||{},this._input=w,this._more=this._backtrack=this.done=!1,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},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var w=this._input[0];this.yytext+=w,this.yyleng++,this.offset++,this.match+=w,this.matched+=w;var k=w.match(/(?:\r\n?|\n).*/g);return k?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),w},"input"),unput:o(function(w){var k=w.length,C=w.split(/(?:\r\n?|\n)/g);this._input=w+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-k),this.offset-=k;var A=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),C.length-1&&(this.yylineno-=C.length-1);var L=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:C?(C.length===A.length?this.yylloc.first_column:0)+A[A.length-C.length].length-C[0].length:this.yylloc.first_column-k},this.options.ranges&&(this.yylloc.range=[L[0],L[0]+this.yyleng-k]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(w){this.unput(this.match.slice(w))},"less"),pastInput:o(function(){var w=this.matched.substr(0,this.matched.length-this.match.length);return(w.length>20?"...":"")+w.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var w=this.match;return w.length<20&&(w+=this._input.substr(0,20-w.length)),(w.substr(0,20)+(w.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var w=this.pastInput(),k=new Array(w.length+1).join("-");return w+this.upcomingInput()+` +`+k+"^"},"showPosition"),test_match:o(function(w,k){var C,A,L;if(this.options.backtrack_lexer&&(L={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},this.options.ranges&&(L.yylloc.range=this.yylloc.range.slice(0))),A=w[0].match(/(?:\r\n?|\n).*/g),A&&(this.yylineno+=A.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:A?A[A.length-1].length-A[A.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+w[0].length},this.yytext+=w[0],this.match+=w[0],this.matches=w,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(w[0].length),this.matched+=w[0],C=this.performAction.call(this,this.yy,this,k,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),C)return C;if(this._backtrack){for(var I in L)this[I]=L[I];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var w,k,C,A;this._more||(this.yytext="",this.match="");for(var L=this._currentRules(),I=0;Ik[0].length)){if(k=C,A=I,this.options.backtrack_lexer){if(w=this.test_match(C,L[I]),w!==!1)return w;if(this._backtrack){k=!1;continue}else return!1}else if(!this.options.flex)break}return k?(w=this.test_match(k,L[A]),w!==!1?w:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var k=this.next();return k||this.lex()},"lex"),begin:o(function(k){this.conditionStack.push(k)},"begin"),popState:o(function(){var k=this.conditionStack.length-1;return k>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(k){return k=this.conditionStack.length-1-Math.abs(k||0),k>=0?this.conditionStack[k]:"INITIAL"},"topState"),pushState:o(function(k){this.begin(k)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(k,C,A,L){var I=L;switch(A){case 0:return k.getLogger().trace("Found comment",C.yytext),6;break;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;break;case 4:this.popState();break;case 5:k.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return k.getLogger().trace("SPACELINE"),6;break;case 7:return 7;case 8:return 15;case 9:k.getLogger().trace("end icon"),this.popState();break;case 10:return k.getLogger().trace("Exploding node"),this.begin("NODE"),19;break;case 11:return k.getLogger().trace("Cloud"),this.begin("NODE"),19;break;case 12:return k.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;break;case 13:return k.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;break;case 14:return this.begin("NODE"),19;break;case 15:return this.begin("NODE"),19;break;case 16:return this.begin("NODE"),19;break;case 17:return this.begin("NODE"),19;break;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 23:this.popState();break;case 24:k.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return k.getLogger().trace("description:",C.yytext),"NODE_DESCR";break;case 26:this.popState();break;case 27:return this.popState(),k.getLogger().trace("node end ))"),"NODE_DEND";break;case 28:return this.popState(),k.getLogger().trace("node end )"),"NODE_DEND";break;case 29:return this.popState(),k.getLogger().trace("node end ...",C.yytext),"NODE_DEND";break;case 30:return this.popState(),k.getLogger().trace("node end (("),"NODE_DEND";break;case 31:return this.popState(),k.getLogger().trace("node end (-"),"NODE_DEND";break;case 32:return this.popState(),k.getLogger().trace("node end (-"),"NODE_DEND";break;case 33:return this.popState(),k.getLogger().trace("node end (("),"NODE_DEND";break;case 34:return this.popState(),k.getLogger().trace("node end (("),"NODE_DEND";break;case 35:return k.getLogger().trace("Long description:",C.yytext),20;break;case 36:return k.getLogger().trace("Long description:",C.yytext),20;break}},"anonymous"),rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};return S})();x.lexer=b;function T(){this.yy={}}return o(T,"Parser"),T.prototype=x,x.Parser=T,new T})();U$.parser=U$;U2e=U$});function q2e(t,e=0){return(_a[t[e+0]]+_a[t[e+1]]+_a[t[e+2]]+_a[t[e+3]]+"-"+_a[t[e+4]]+_a[t[e+5]]+"-"+_a[t[e+6]]+_a[t[e+7]]+"-"+_a[t[e+8]]+_a[t[e+9]]+"-"+_a[t[e+10]]+_a[t[e+11]]+_a[t[e+12]]+_a[t[e+13]]+_a[t[e+14]]+_a[t[e+15]]).toLowerCase()}var _a,W2e=M(()=>{"use strict";_a=[];for(let t=0;t<256;++t)_a.push((t+256).toString(16).slice(1));o(q2e,"unsafeStringify")});function q$(){if(!H$){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");H$=crypto.getRandomValues.bind(crypto)}return H$(Dtt)}var H$,Dtt,Y2e=M(()=>{"use strict";Dtt=new Uint8Array(16);o(q$,"rng")});var Ltt,W$,X2e=M(()=>{"use strict";Ltt=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),W$={randomUUID:Ltt}});function Rtt(t,e,r){if(W$.randomUUID&&!e&&!t)return W$.randomUUID();t=t||{};let n=t.random??t.rng?.()??q$();if(n.length<16)throw new Error("Random bytes length must be >= 16");if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,e){if(r=r||0,r<0||r+16>e.length)throw new RangeError(`UUID byte range ${r}:${r+15} is out of buffer bounds`);for(let i=0;i<16;++i)e[r+i]=n[i];return e}return q2e(n)}var Y$,j2e=M(()=>{"use strict";X2e();Y2e();W2e();o(Rtt,"v4");Y$=Rtt});var K2e=M(()=>{"use strict";j2e()});var ch,TC,Q2e=M(()=>{"use strict";Xt();K2e();gr();pt();Ra();qn();ch={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},TC=class{constructor(){this.nodes=[];this.count=0;this.elements={};this.getLogger=this.getLogger.bind(this),this.nodeType=ch,this.clear(),this.getType=this.getType.bind(this),this.getElementById=this.getElementById.bind(this),this.getParent=this.getParent.bind(this),this.getMindmap=this.getMindmap.bind(this),this.addNode=this.addNode.bind(this),this.decorateNode=this.decorateNode.bind(this)}static{o(this,"MindmapDB")}clear(){this.nodes=[],this.count=0,this.elements={},this.baseLevel=void 0}getParent(e){for(let r=this.nodes.length-1;r>=0;r--)if(this.nodes[r].level0?this.nodes[0]:null}addNode(e,r,n,i){X.info("addNode",e,r,n,i);let a=!1;this.nodes.length===0?(this.baseLevel=e,e=0,a=!0):this.baseLevel!==void 0&&(e=e-this.baseLevel,a=!1);let s=ge(),l=s.mindmap?.padding??ur.mindmap.padding;switch(i){case this.nodeType.ROUNDED_RECT:case this.nodeType.RECT:case this.nodeType.HEXAGON:l*=2;break}let u={id:this.count++,nodeId:sr(r,s),level:e,descr:sr(n,s),type:i,children:[],width:s.mindmap?.maxNodeWidth??ur.mindmap.maxNodeWidth,padding:l,isRoot:a},h=this.getParent(e);if(h)h.children.push(u),this.nodes.push(u);else if(a)this.nodes.push(u);else throw new Error(`There can be only one root. No parent could be found for ("${u.descr}")`)}getType(e,r){switch(X.debug("In get type",e,r),e){case"[":return this.nodeType.RECT;case"(":return r===")"?this.nodeType.ROUNDED_RECT:this.nodeType.CLOUD;case"((":return this.nodeType.CIRCLE;case")":return this.nodeType.CLOUD;case"))":return this.nodeType.BANG;case"{{":return this.nodeType.HEXAGON;default:return this.nodeType.DEFAULT}}setElementForId(e,r){this.elements[e]=r}getElementById(e){return this.elements[e]}decorateNode(e){if(!e)return;let r=ge(),n=this.nodes[this.nodes.length-1];e.icon&&(n.icon=sr(e.icon,r)),e.class&&(n.class=sr(e.class,r))}type2Str(e){switch(e){case this.nodeType.DEFAULT:return"no-border";case this.nodeType.RECT:return"rect";case this.nodeType.ROUNDED_RECT:return"rounded-rect";case this.nodeType.CIRCLE:return"circle";case this.nodeType.CLOUD:return"cloud";case this.nodeType.BANG:return"bang";case this.nodeType.HEXAGON:return"hexgon";default:return"no-border"}}assignSections(e,r){if(e.level===0?e.section=void 0:e.section=r,e.children)for(let[n,i]of e.children.entries()){let a=e.level===0?n:r;this.assignSections(i,a)}}flattenNodes(e,r){let n=["mindmap-node"];e.isRoot===!0?n.push("section-root","section--1"):e.section!==void 0&&n.push(`section-${e.section}`),e.class&&n.push(e.class);let i=n.join(" "),a=o(l=>{switch(l){case ch.CIRCLE:return"mindmapCircle";case ch.RECT:return"rect";case ch.ROUNDED_RECT:return"rounded";case ch.CLOUD:return"cloud";case ch.BANG:return"bang";case ch.HEXAGON:return"hexagon";case ch.DEFAULT:return"defaultMindmapNode";case ch.NO_BORDER:default:return"rect"}},"getShapeFromType"),s={id:e.id.toString(),domId:"node_"+e.id.toString(),label:e.descr,isGroup:!1,shape:a(e.type),width:e.width,height:e.height??0,padding:e.padding,cssClasses:i,cssStyles:[],look:"default",icon:e.icon,x:e.x,y:e.y,level:e.level,nodeId:e.nodeId,type:e.type,section:e.section};if(r.push(s),e.children)for(let l of e.children)this.flattenNodes(l,r)}generateEdges(e,r){if(e.children)for(let n of e.children){let i="edge";n.section!==void 0&&(i+=` section-edge-${n.section}`);let a=e.level+1;i+=` edge-depth-${a}`;let s={id:`edge_${e.id}_${n.id}`,start:e.id.toString(),end:n.id.toString(),type:"normal",curve:"basis",thickness:"normal",look:"default",classes:i,depth:e.level,section:n.section};r.push(s),this.generateEdges(n,r)}}getData(){let e=this.getMindmap(),r=ge(),i=nV().layout!==void 0,a=r;if(i||(a.layout="cose-bilkent"),!e)return{nodes:[],edges:[],config:a};X.debug("getData: mindmapRoot",e,r),this.assignSections(e);let s=[],l=[];this.flattenNodes(e,s),this.generateEdges(e,l),X.debug(`getData: processed ${s.length} nodes and ${l.length} edges`);let u=new Map;for(let h of s)u.set(h.id,{shape:h.shape,width:h.width,height:h.height,padding:h.padding});return{nodes:s,edges:l,config:a,rootNode:e,markers:["point"],direction:"TB",nodeSpacing:50,rankSpacing:50,shapes:Object.fromEntries(u),type:"mindmap",diagramId:"mindmap-"+Y$()}}getLogger(){return X}}});var Ntt,Z2e,J2e=M(()=>{"use strict";pt();ep();Nf();Mf();Ra();Ntt=o(async(t,e,r,n)=>{X.debug(`Rendering mindmap diagram +`+t);let i=n.db,a=i.getData(),s=Vo(e,a.config.securityLevel);a.type=n.type,a.layoutAlgorithm=$c(a.config.layout,{fallback:"cose-bilkent"}),a.diagramId=e,i.getMindmap()&&(a.nodes.forEach(u=>{u.shape==="rounded"?(u.radius=15,u.taper=15,u.stroke="none",u.width=0,u.padding=15):u.shape==="circle"?u.padding=10:u.shape==="rect"&&(u.width=0,u.padding=10)}),await Qo(a,s),Ws(s,a.config.mindmap?.padding??ur.mindmap.padding,"mindmapDiagram",a.config.mindmap?.useMaxWidth??ur.mindmap.useMaxWidth))},"draw"),Z2e={draw:Ntt}});var Mtt,Itt,exe,txe=M(()=>{"use strict";eo();Mtt=o(t=>{let e="";for(let r=0;r` + .edge { + stroke-width: 3; + } + ${Mtt(t)} + .section-root rect, .section-root path, .section-root circle, .section-root polygon { + fill: ${t.git0}; + } + .section-root text { + fill: ${t.gitBranchLabel0}; + } + .section-root span { + color: ${t.gitBranchLabel0}; + } + .section-2 span { + color: ${t.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .mindmap-node-label { + dy: 1em; + alignment-baseline: middle; + text-anchor: middle; + dominant-baseline: middle; + text-align: center; + } +`,"getStyles"),exe=Itt});var rxe={};dr(rxe,{diagram:()=>Ott});var Ott,nxe=M(()=>{"use strict";H2e();Q2e();J2e();txe();Ott={get db(){return new TC},renderer:Z2e,parser:U2e,styles:exe}});var X$,sxe,oxe=M(()=>{"use strict";X$=(function(){var t=o(function(C,A,L,I){for(L=L||{},I=C.length;I--;L[C[I]]=A);return L},"o"),e=[1,4],r=[1,13],n=[1,12],i=[1,15],a=[1,16],s=[1,20],l=[1,19],u=[6,7,8],h=[1,26],f=[1,24],d=[1,25],p=[6,7,11],m=[1,31],g=[6,7,11,24],y=[1,6,13,16,17,20,23],v=[1,35],x=[1,36],b=[1,6,7,11,13,16,17,20,23],T=[1,38],S={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,KANBAN:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,shapeData:15,ICON:16,CLASS:17,nodeWithId:18,nodeWithoutId:19,NODE_DSTART:20,NODE_DESCR:21,NODE_DEND:22,NODE_ID:23,SHAPE_DATA:24,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"KANBAN",11:"EOF",13:"SPACELIST",16:"ICON",17:"CLASS",20:"NODE_DSTART",21:"NODE_DESCR",22:"NODE_DEND",23:"NODE_ID",24:"SHAPE_DATA"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,3],[12,2],[12,2],[12,2],[12,1],[12,2],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[19,3],[18,1],[18,4],[15,2],[15,1]],performAction:o(function(A,L,I,R,E,_,D){var O=_.length-1;switch(E){case 6:case 7:return R;case 8:R.getLogger().trace("Stop NL ");break;case 9:R.getLogger().trace("Stop EOF ");break;case 11:R.getLogger().trace("Stop NL2 ");break;case 12:R.getLogger().trace("Stop EOF2 ");break;case 15:R.getLogger().info("Node: ",_[O-1].id),R.addNode(_[O-2].length,_[O-1].id,_[O-1].descr,_[O-1].type,_[O]);break;case 16:R.getLogger().info("Node: ",_[O].id),R.addNode(_[O-1].length,_[O].id,_[O].descr,_[O].type);break;case 17:R.getLogger().trace("Icon: ",_[O]),R.decorateNode({icon:_[O]});break;case 18:case 23:R.decorateNode({class:_[O]});break;case 19:R.getLogger().trace("SPACELIST");break;case 20:R.getLogger().trace("Node: ",_[O-1].id),R.addNode(0,_[O-1].id,_[O-1].descr,_[O-1].type,_[O]);break;case 21:R.getLogger().trace("Node: ",_[O].id),R.addNode(0,_[O].id,_[O].descr,_[O].type);break;case 22:R.decorateNode({icon:_[O]});break;case 27:R.getLogger().trace("node found ..",_[O-2]),this.$={id:_[O-1],descr:_[O-1],type:R.getType(_[O-2],_[O])};break;case 28:this.$={id:_[O],descr:_[O],type:0};break;case 29:R.getLogger().trace("node found ..",_[O-3]),this.$={id:_[O-3],descr:_[O-1],type:R.getType(_[O-2],_[O])};break;case 30:this.$=_[O-1]+_[O];break;case 31:this.$=_[O];break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:e},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:e},{6:r,7:[1,10],9:9,12:11,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},t(u,[2,3]),{1:[2,2]},t(u,[2,4]),t(u,[2,5]),{1:[2,6],6:r,12:21,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},{6:r,9:22,12:11,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},{6:h,7:f,10:23,11:d},t(p,[2,24],{18:17,19:18,14:27,16:[1,28],17:[1,29],20:s,23:l}),t(p,[2,19]),t(p,[2,21],{15:30,24:m}),t(p,[2,22]),t(p,[2,23]),t(g,[2,25]),t(g,[2,26]),t(g,[2,28],{20:[1,32]}),{21:[1,33]},{6:h,7:f,10:34,11:d},{1:[2,7],6:r,12:21,13:n,14:14,16:i,17:a,18:17,19:18,20:s,23:l},t(y,[2,14],{7:v,11:x}),t(b,[2,8]),t(b,[2,9]),t(b,[2,10]),t(p,[2,16],{15:37,24:m}),t(p,[2,17]),t(p,[2,18]),t(p,[2,20],{24:T}),t(g,[2,31]),{21:[1,39]},{22:[1,40]},t(y,[2,13],{7:v,11:x}),t(b,[2,11]),t(b,[2,12]),t(p,[2,15],{24:T}),t(g,[2,30]),{22:[1,41]},t(g,[2,27]),t(g,[2,29])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(A,L){if(L.recoverable)this.trace(A);else{var I=new Error(A);throw I.hash=L,I}},"parseError"),parse:o(function(A){var L=this,I=[0],R=[],E=[null],_=[],D=this.table,O="",N=0,P=0,B=0,F=2,V=1,$=_.slice.call(arguments,1),U=Object.create(this.lexer),j={yy:{}};for(var ee in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ee)&&(j.yy[ee]=this.yy[ee]);U.setInput(A,j.yy),j.yy.lexer=U,j.yy.parser=this,typeof U.yylloc>"u"&&(U.yylloc={});var q=U.yylloc;_.push(q);var oe=U.options&&U.options.ranges;typeof j.yy.parseError=="function"?this.parseError=j.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Q(Be){I.length=I.length-2*Be,E.length=E.length-Be,_.length=_.length-Be}o(Q,"popStack");function ue(){var Be;return Be=R.pop()||U.lex()||V,typeof Be!="number"&&(Be instanceof Array&&(R=Be,Be=R.pop()),Be=L.symbols_[Be]||Be),Be}o(ue,"lex");for(var te,re,J,K,ae,Z,de={},ne,Te,W,Ve;;){if(J=I[I.length-1],this.defaultActions[J]?K=this.defaultActions[J]:((te===null||typeof te>"u")&&(te=ue()),K=D[J]&&D[J][te]),typeof K>"u"||!K.length||!K[0]){var pe="";Ve=[];for(ne in D[J])this.terminals_[ne]&&ne>F&&Ve.push("'"+this.terminals_[ne]+"'");U.showPosition?pe="Parse error on line "+(N+1)+`: +`+U.showPosition()+` +Expecting `+Ve.join(", ")+", got '"+(this.terminals_[te]||te)+"'":pe="Parse error on line "+(N+1)+": Unexpected "+(te==V?"end of input":"'"+(this.terminals_[te]||te)+"'"),this.parseError(pe,{text:U.match,token:this.terminals_[te]||te,line:U.yylineno,loc:q,expected:Ve})}if(K[0]instanceof Array&&K.length>1)throw new Error("Parse Error: multiple actions possible at state: "+J+", token: "+te);switch(K[0]){case 1:I.push(te),E.push(U.yytext),_.push(U.yylloc),I.push(K[1]),te=null,re?(te=re,re=null):(P=U.yyleng,O=U.yytext,N=U.yylineno,q=U.yylloc,B>0&&B--);break;case 2:if(Te=this.productions_[K[1]][1],de.$=E[E.length-Te],de._$={first_line:_[_.length-(Te||1)].first_line,last_line:_[_.length-1].last_line,first_column:_[_.length-(Te||1)].first_column,last_column:_[_.length-1].last_column},oe&&(de._$.range=[_[_.length-(Te||1)].range[0],_[_.length-1].range[1]]),Z=this.performAction.apply(de,[O,P,N,j.yy,K[1],E,_].concat($)),typeof Z<"u")return Z;Te&&(I=I.slice(0,-1*Te*2),E=E.slice(0,-1*Te),_=_.slice(0,-1*Te)),I.push(this.productions_[K[1]][0]),E.push(de.$),_.push(de._$),W=D[I[I.length-2]][I[I.length-1]],I.push(W);break;case 3:return!0}}return!0},"parse")},w=(function(){var C={EOF:1,parseError:o(function(L,I){if(this.yy.parser)this.yy.parser.parseError(L,I);else throw new Error(L)},"parseError"),setInput:o(function(A,L){return this.yy=L||this.yy||{},this._input=A,this._more=this._backtrack=this.done=!1,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},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var A=this._input[0];this.yytext+=A,this.yyleng++,this.offset++,this.match+=A,this.matched+=A;var L=A.match(/(?:\r\n?|\n).*/g);return L?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),A},"input"),unput:o(function(A){var L=A.length,I=A.split(/(?:\r\n?|\n)/g);this._input=A+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-L),this.offset-=L;var R=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),I.length-1&&(this.yylineno-=I.length-1);var E=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:I?(I.length===R.length?this.yylloc.first_column:0)+R[R.length-I.length].length-I[0].length:this.yylloc.first_column-L},this.options.ranges&&(this.yylloc.range=[E[0],E[0]+this.yyleng-L]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(A){this.unput(this.match.slice(A))},"less"),pastInput:o(function(){var A=this.matched.substr(0,this.matched.length-this.match.length);return(A.length>20?"...":"")+A.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var A=this.match;return A.length<20&&(A+=this._input.substr(0,20-A.length)),(A.substr(0,20)+(A.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var A=this.pastInput(),L=new Array(A.length+1).join("-");return A+this.upcomingInput()+` +`+L+"^"},"showPosition"),test_match:o(function(A,L){var I,R,E;if(this.options.backtrack_lexer&&(E={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},this.options.ranges&&(E.yylloc.range=this.yylloc.range.slice(0))),R=A[0].match(/(?:\r\n?|\n).*/g),R&&(this.yylineno+=R.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:R?R[R.length-1].length-R[R.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+A[0].length},this.yytext+=A[0],this.match+=A[0],this.matches=A,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(A[0].length),this.matched+=A[0],I=this.performAction.call(this,this.yy,this,L,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),I)return I;if(this._backtrack){for(var _ in E)this[_]=E[_];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var A,L,I,R;this._more||(this.yytext="",this.match="");for(var E=this._currentRules(),_=0;_L[0].length)){if(L=I,R=_,this.options.backtrack_lexer){if(A=this.test_match(I,E[_]),A!==!1)return A;if(this._backtrack){L=!1;continue}else return!1}else if(!this.options.flex)break}return L?(A=this.test_match(L,E[R]),A!==!1?A:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var L=this.next();return L||this.lex()},"lex"),begin:o(function(L){this.conditionStack.push(L)},"begin"),popState:o(function(){var L=this.conditionStack.length-1;return L>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(L){return L=this.conditionStack.length-1-Math.abs(L||0),L>=0?this.conditionStack[L]:"INITIAL"},"topState"),pushState:o(function(L){this.begin(L)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(L,I,R,E){var _=E;switch(R){case 0:return this.pushState("shapeData"),I.yytext="",24;break;case 1:return this.pushState("shapeDataStr"),24;break;case 2:return this.popState(),24;break;case 3:let D=/\n\s*/g;return I.yytext=I.yytext.replace(D,"
    "),24;break;case 4:return 24;case 5:this.popState();break;case 6:return L.getLogger().trace("Found comment",I.yytext),6;break;case 7:return 8;case 8:this.begin("CLASS");break;case 9:return this.popState(),17;break;case 10:this.popState();break;case 11:L.getLogger().trace("Begin icon"),this.begin("ICON");break;case 12:return L.getLogger().trace("SPACELINE"),6;break;case 13:return 7;case 14:return 16;case 15:L.getLogger().trace("end icon"),this.popState();break;case 16:return L.getLogger().trace("Exploding node"),this.begin("NODE"),20;break;case 17:return L.getLogger().trace("Cloud"),this.begin("NODE"),20;break;case 18:return L.getLogger().trace("Explosion Bang"),this.begin("NODE"),20;break;case 19:return L.getLogger().trace("Cloud Bang"),this.begin("NODE"),20;break;case 20:return this.begin("NODE"),20;break;case 21:return this.begin("NODE"),20;break;case 22:return this.begin("NODE"),20;break;case 23:return this.begin("NODE"),20;break;case 24:return 13;case 25:return 23;case 26:return 11;case 27:this.begin("NSTR2");break;case 28:return"NODE_DESCR";case 29:this.popState();break;case 30:L.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 31:return L.getLogger().trace("description:",I.yytext),"NODE_DESCR";break;case 32:this.popState();break;case 33:return this.popState(),L.getLogger().trace("node end ))"),"NODE_DEND";break;case 34:return this.popState(),L.getLogger().trace("node end )"),"NODE_DEND";break;case 35:return this.popState(),L.getLogger().trace("node end ...",I.yytext),"NODE_DEND";break;case 36:return this.popState(),L.getLogger().trace("node end (("),"NODE_DEND";break;case 37:return this.popState(),L.getLogger().trace("node end (-"),"NODE_DEND";break;case 38:return this.popState(),L.getLogger().trace("node end (-"),"NODE_DEND";break;case 39:return this.popState(),L.getLogger().trace("node end (("),"NODE_DEND";break;case 40:return this.popState(),L.getLogger().trace("node end (("),"NODE_DEND";break;case 41:return L.getLogger().trace("Long description:",I.yytext),21;break;case 42:return L.getLogger().trace("Long description:",I.yytext),21;break}},"anonymous"),rules:[/^(?:@\{)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^\"]+)/i,/^(?:[^}^"]+)/i,/^(?:\})/i,/^(?:\s*%%.*)/i,/^(?:kanban\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}@]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{shapeDataEndBracket:{rules:[],inclusive:!1},shapeDataStr:{rules:[2,3],inclusive:!1},shapeData:{rules:[1,4,5],inclusive:!1},CLASS:{rules:[9,10],inclusive:!1},ICON:{rules:[14,15],inclusive:!1},NSTR2:{rules:[28,29],inclusive:!1},NSTR:{rules:[31,32],inclusive:!1},NODE:{rules:[27,30,33,34,35,36,37,38,39,40,41,42],inclusive:!1},INITIAL:{rules:[0,6,7,8,11,12,13,16,17,18,19,20,21,22,23,24,25,26],inclusive:!0}}};return C})();S.lexer=w;function k(){this.yy={}}return o(k,"Parser"),k.prototype=S,S.Parser=k,new k})();X$.parser=X$;sxe=X$});var ol,K$,j$,Q$,$tt,ztt,lxe,Gtt,Vtt,Ui,Utt,Htt,qtt,Wtt,Ytt,Xtt,jtt,cxe,uxe=M(()=>{"use strict";Xt();gr();pt();Ra();k2();ol=[],K$=[],j$=0,Q$={},$tt=o(()=>{ol=[],K$=[],j$=0,Q$={}},"clear"),ztt=o(t=>{if(ol.length===0)return null;let e=ol[0].level,r=null;for(let n=ol.length-1;n>=0;n--)if(ol[n].level===e&&!r&&(r=ol[n]),ol[n].levell.parentId===i.id);for(let l of s){let u={id:l.id,parentId:i.id,label:sr(l.label??"",n),isGroup:!1,ticket:l?.ticket,priority:l?.priority,assigned:l?.assigned,icon:l?.icon,shape:"kanbanItem",level:l.level,rx:5,ry:5,cssStyles:["text-align: left"]};e.push(u)}}return{nodes:e,edges:t,other:{},config:ge()}},"getData"),Vtt=o((t,e,r,n,i)=>{let a=ge(),s=a.mindmap?.padding??ur.mindmap.padding;switch(n){case Ui.ROUNDED_RECT:case Ui.RECT:case Ui.HEXAGON:s*=2}let l={id:sr(e,a)||"kbn"+j$++,level:t,label:sr(r,a),width:a.mindmap?.maxNodeWidth??ur.mindmap.maxNodeWidth,padding:s,isGroup:!1};if(i!==void 0){let h;i.includes(` +`)?h=i+` +`:h=`{ +`+i+` +}`;let f=Kh(h,{schema:jh});if(f.shape&&(f.shape!==f.shape.toLowerCase()||f.shape.includes("_")))throw new Error(`No such shape: ${f.shape}. Shape names should be lowercase.`);f?.shape&&f.shape==="kanbanItem"&&(l.shape=f?.shape),f?.label&&(l.label=f?.label),f?.icon&&(l.icon=f?.icon.toString()),f?.assigned&&(l.assigned=f?.assigned.toString()),f?.ticket&&(l.ticket=f?.ticket.toString()),f?.priority&&(l.priority=f?.priority)}let u=ztt(t);u?l.parentId=u.id||"kbn"+j$++:K$.push(l),ol.push(l)},"addNode"),Ui={DEFAULT:0,NO_BORDER:0,ROUNDED_RECT:1,RECT:2,CIRCLE:3,CLOUD:4,BANG:5,HEXAGON:6},Utt=o((t,e)=>{switch(X.debug("In get type",t,e),t){case"[":return Ui.RECT;case"(":return e===")"?Ui.ROUNDED_RECT:Ui.CLOUD;case"((":return Ui.CIRCLE;case")":return Ui.CLOUD;case"))":return Ui.BANG;case"{{":return Ui.HEXAGON;default:return Ui.DEFAULT}},"getType"),Htt=o((t,e)=>{Q$[t]=e},"setElementForId"),qtt=o(t=>{if(!t)return;let e=ge(),r=ol[ol.length-1];t.icon&&(r.icon=sr(t.icon,e)),t.class&&(r.cssClasses=sr(t.class,e))},"decorateNode"),Wtt=o(t=>{switch(t){case Ui.DEFAULT:return"no-border";case Ui.RECT:return"rect";case Ui.ROUNDED_RECT:return"rounded-rect";case Ui.CIRCLE:return"circle";case Ui.CLOUD:return"cloud";case Ui.BANG:return"bang";case Ui.HEXAGON:return"hexgon";default:return"no-border"}},"type2Str"),Ytt=o(()=>X,"getLogger"),Xtt=o(t=>Q$[t],"getElementById"),jtt={clear:$tt,addNode:Vtt,getSections:lxe,getData:Gtt,nodeType:Ui,getType:Utt,setElementForId:Htt,decorateNode:qtt,type2Str:Wtt,getLogger:Ytt,getElementById:Xtt},cxe=jtt});var Ktt,hxe,fxe=M(()=>{"use strict";Xt();pt();tu();Ei();Ra();uw();Tw();Ktt=o(async(t,e,r,n)=>{X.debug(`Rendering kanban diagram +`+t);let a=n.db.getData(),s=ge();s.htmlLabels=!1;let l=aa(e),u=l.append("g");u.attr("class","sections");let h=l.append("g");h.attr("class","items");let f=a.nodes.filter(v=>v.isGroup),d=0,p=10,m=[],g=25;for(let v of f){let x=s?.kanban?.sectionWidth||200;d=d+1,v.x=x*d+(d-1)*p/2,v.width=x,v.y=0,v.height=x*3,v.rx=5,v.ry=5,v.cssClasses=v.cssClasses+" section-"+d;let b=await Sm(u,v);g=Math.max(g,b?.labelBBox?.height),m.push(b)}let y=0;for(let v of f){let x=m[y];y=y+1;let b=s?.kanban?.sectionWidth||200,T=-b*3/2+g,S=T,w=a.nodes.filter(A=>A.parentId===v.id);for(let A of w){if(A.isGroup)throw new Error("Groups within groups are not allowed in Kanban diagrams");A.x=v.x,A.width=b-1.5*p;let I=(await Cm(h,A,{config:s})).node().getBBox();A.y=S+I.height/2,await B2(A),S=A.y+I.height/2+p/2}let k=x.cluster.select("rect"),C=Math.max(S-T+3*p,50)+(g-25);k.attr("height",C)}ic(void 0,l,s.mindmap?.padding??ur.kanban.padding,s.mindmap?.useMaxWidth??ur.kanban.useMaxWidth)},"draw"),hxe={draw:Ktt}});var Qtt,Ztt,dxe,pxe=M(()=>{"use strict";eo();yg();Qtt=o(t=>{let e="";for(let n=0;nt.darkMode?Pt(n,i):Rt(n,i),"adjuster");for(let n=0;n` + .edge { + stroke-width: 3; + } + ${Qtt(t)} + .section-root rect, .section-root path, .section-root circle, .section-root polygon { + fill: ${t.git0}; + } + .section-root text { + fill: ${t.gitBranchLabel0}; + } + .icon-container { + height:100%; + display: flex; + justify-content: center; + align-items: center; + } + .edge { + fill: none; + } + .cluster-label, .label { + color: ${t.textColor}; + fill: ${t.textColor}; + } + .kanban-label { + dy: 1em; + alignment-baseline: middle; + text-anchor: middle; + dominant-baseline: middle; + text-align: center; + } + ${zc()} +`,"getStyles"),dxe=Ztt});var mxe={};dr(mxe,{diagram:()=>Jtt});var Jtt,gxe=M(()=>{"use strict";oxe();uxe();fxe();pxe();Jtt={db:cxe,renderer:hxe,parser:sxe,styles:dxe}});var Z$,_4,xxe=M(()=>{"use strict";Z$=(function(){var t=o(function(l,u,h,f){for(h=h||{},f=l.length;f--;h[l[f]]=u);return h},"o"),e=[1,9],r=[1,10],n=[1,5,10,12],i={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:o(function(u,h,f,d,p,m,g){var y=m.length-1;switch(p){case 7:let v=d.findOrCreateNode(m[y-4].trim().replaceAll('""','"')),x=d.findOrCreateNode(m[y-2].trim().replaceAll('""','"')),b=parseFloat(m[y].trim());d.addLink(v,x,b);break;case 8:case 9:case 11:this.$=m[y];break;case 10:this.$=m[y-1];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:e,20:r},{1:[2,6],7:11,10:[1,12]},t(r,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(n,[2,8]),t(n,[2,9]),{19:[1,16]},t(n,[2,11]),{1:[2,1]},{1:[2,5]},t(r,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:e,20:r},{15:18,16:7,17:8,18:e,20:r},{18:[1,19]},t(r,[2,3]),{12:[1,20]},t(n,[2,10]),{15:21,16:7,17:8,18:e,20:r},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:o(function(u,h){if(h.recoverable)this.trace(u);else{var f=new Error(u);throw f.hash=h,f}},"parseError"),parse:o(function(u){var h=this,f=[0],d=[],p=[null],m=[],g=this.table,y="",v=0,x=0,b=0,T=2,S=1,w=m.slice.call(arguments,1),k=Object.create(this.lexer),C={yy:{}};for(var A in this.yy)Object.prototype.hasOwnProperty.call(this.yy,A)&&(C.yy[A]=this.yy[A]);k.setInput(u,C.yy),C.yy.lexer=k,C.yy.parser=this,typeof k.yylloc>"u"&&(k.yylloc={});var L=k.yylloc;m.push(L);var I=k.options&&k.options.ranges;typeof C.yy.parseError=="function"?this.parseError=C.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function R(q){f.length=f.length-2*q,p.length=p.length-q,m.length=m.length-q}o(R,"popStack");function E(){var q;return q=d.pop()||k.lex()||S,typeof q!="number"&&(q instanceof Array&&(d=q,q=d.pop()),q=h.symbols_[q]||q),q}o(E,"lex");for(var _,D,O,N,P,B,F={},V,$,U,j;;){if(O=f[f.length-1],this.defaultActions[O]?N=this.defaultActions[O]:((_===null||typeof _>"u")&&(_=E()),N=g[O]&&g[O][_]),typeof N>"u"||!N.length||!N[0]){var ee="";j=[];for(V in g[O])this.terminals_[V]&&V>T&&j.push("'"+this.terminals_[V]+"'");k.showPosition?ee="Parse error on line "+(v+1)+`: +`+k.showPosition()+` +Expecting `+j.join(", ")+", got '"+(this.terminals_[_]||_)+"'":ee="Parse error on line "+(v+1)+": Unexpected "+(_==S?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(ee,{text:k.match,token:this.terminals_[_]||_,line:k.yylineno,loc:L,expected:j})}if(N[0]instanceof Array&&N.length>1)throw new Error("Parse Error: multiple actions possible at state: "+O+", token: "+_);switch(N[0]){case 1:f.push(_),p.push(k.yytext),m.push(k.yylloc),f.push(N[1]),_=null,D?(_=D,D=null):(x=k.yyleng,y=k.yytext,v=k.yylineno,L=k.yylloc,b>0&&b--);break;case 2:if($=this.productions_[N[1]][1],F.$=p[p.length-$],F._$={first_line:m[m.length-($||1)].first_line,last_line:m[m.length-1].last_line,first_column:m[m.length-($||1)].first_column,last_column:m[m.length-1].last_column},I&&(F._$.range=[m[m.length-($||1)].range[0],m[m.length-1].range[1]]),B=this.performAction.apply(F,[y,x,v,C.yy,N[1],p,m].concat(w)),typeof B<"u")return B;$&&(f=f.slice(0,-1*$*2),p=p.slice(0,-1*$),m=m.slice(0,-1*$)),f.push(this.productions_[N[1]][0]),p.push(F.$),m.push(F._$),U=g[f[f.length-2]][f[f.length-1]],f.push(U);break;case 3:return!0}}return!0},"parse")},a=(function(){var l={EOF:1,parseError:o(function(h,f){if(this.yy.parser)this.yy.parser.parseError(h,f);else throw new Error(h)},"parseError"),setInput:o(function(u,h){return this.yy=h||this.yy||{},this._input=u,this._more=this._backtrack=this.done=!1,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},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var u=this._input[0];this.yytext+=u,this.yyleng++,this.offset++,this.match+=u,this.matched+=u;var h=u.match(/(?:\r\n?|\n).*/g);return h?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),u},"input"),unput:o(function(u){var h=u.length,f=u.split(/(?:\r\n?|\n)/g);this._input=u+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-h),this.offset-=h;var d=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),f.length-1&&(this.yylineno-=f.length-1);var p=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:f?(f.length===d.length?this.yylloc.first_column:0)+d[d.length-f.length].length-f[0].length:this.yylloc.first_column-h},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-h]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(u){this.unput(this.match.slice(u))},"less"),pastInput:o(function(){var u=this.matched.substr(0,this.matched.length-this.match.length);return(u.length>20?"...":"")+u.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var u=this.match;return u.length<20&&(u+=this._input.substr(0,20-u.length)),(u.substr(0,20)+(u.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var u=this.pastInput(),h=new Array(u.length+1).join("-");return u+this.upcomingInput()+` +`+h+"^"},"showPosition"),test_match:o(function(u,h){var f,d,p;if(this.options.backtrack_lexer&&(p={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},this.options.ranges&&(p.yylloc.range=this.yylloc.range.slice(0))),d=u[0].match(/(?:\r\n?|\n).*/g),d&&(this.yylineno+=d.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:d?d[d.length-1].length-d[d.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+u[0].length},this.yytext+=u[0],this.match+=u[0],this.matches=u,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(u[0].length),this.matched+=u[0],f=this.performAction.call(this,this.yy,this,h,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),f)return f;if(this._backtrack){for(var m in p)this[m]=p[m];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var u,h,f,d;this._more||(this.yytext="",this.match="");for(var p=this._currentRules(),m=0;mh[0].length)){if(h=f,d=m,this.options.backtrack_lexer){if(u=this.test_match(f,p[m]),u!==!1)return u;if(this._backtrack){h=!1;continue}else return!1}else if(!this.options.flex)break}return h?(u=this.test_match(h,p[d]),u!==!1?u:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var h=this.next();return h||this.lex()},"lex"),begin:o(function(h){this.conditionStack.push(h)},"begin"),popState:o(function(){var h=this.conditionStack.length-1;return h>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(h){return h=this.conditionStack.length-1-Math.abs(h||0),h>=0?this.conditionStack[h]:"INITIAL"},"topState"),pushState:o(function(h){this.begin(h)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:o(function(h,f,d,p){var m=p;switch(d){case 0:return this.pushState("csv"),4;break;case 1:return this.pushState("csv"),4;break;case 2:return 10;case 3:return 5;case 4:return 12;case 5:return this.pushState("escaped_text"),18;break;case 6:return 20;case 7:return this.popState("escaped_text"),18;break;case 8:return 19}},"anonymous"),rules:[/^(?:sankey-beta\b)/i,/^(?:sankey\b)/i,/^(?:$)/i,/^(?:((\u000D\u000A)|(\u000A)))/i,/^(?:(\u002C))/i,/^(?:(\u0022))/i,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/i,/^(?:(\u0022)(?!(\u0022)))/i,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/i],conditions:{csv:{rules:[2,3,4,5,6,7,8],inclusive:!1},escaped_text:{rules:[7,8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8],inclusive:!0}}};return l})();i.lexer=a;function s(){this.yy={}}return o(s,"Parser"),s.prototype=i,i.Parser=s,new s})();Z$.parser=Z$;_4=Z$});var kC,EC,wC,nrt,J$,irt,ez,art,srt,ort,lrt,bxe,Txe=M(()=>{"use strict";Xt();gr();ci();kC=[],EC=[],wC=new Map,nrt=o(()=>{kC=[],EC=[],wC=new Map,Sr()},"clear"),J$=class{constructor(e,r,n=0){this.source=e;this.target=r;this.value=n}static{o(this,"SankeyLink")}},irt=o((t,e,r)=>{kC.push(new J$(t,e,r))},"addLink"),ez=class{constructor(e){this.ID=e}static{o(this,"SankeyNode")}},art=o(t=>{t=tt.sanitizeText(t,ge());let e=wC.get(t);return e===void 0&&(e=new ez(t),wC.set(t,e),EC.push(e)),e},"findOrCreateNode"),srt=o(()=>EC,"getNodes"),ort=o(()=>kC,"getLinks"),lrt=o(()=>({nodes:EC.map(t=>({id:t.ID})),links:kC.map(t=>({source:t.source.ID,target:t.target.ID,value:t.value}))}),"getGraph"),bxe={nodesMap:wC,getConfig:o(()=>ge().sankey,"getConfig"),getNodes:srt,getLinks:ort,getGraph:lrt,addLink:irt,findOrCreateNode:art,getAccTitle:Mr,setAccTitle:Rr,getAccDescription:Or,setAccDescription:Ir,getDiagramTitle:Pr,setDiagramTitle:$r,clear:nrt}});function D4(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r=i)&&(r=i)}return r}var wxe=M(()=>{"use strict";o(D4,"max")});function py(t,e){let r;if(e===void 0)for(let n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}var kxe=M(()=>{"use strict";o(py,"min")});function my(t,e){let r=0;if(e===void 0)for(let n of t)(n=+n)&&(r+=n);else{let n=-1;for(let i of t)(i=+e(i,++n,t))&&(r+=i)}return r}var Exe=M(()=>{"use strict";o(my,"sum")});var tz=M(()=>{"use strict";wxe();kxe();Exe()});function crt(t){return t.target.depth}function rz(t){return t.depth}function nz(t,e){return e-1-t.height}function L4(t,e){return t.sourceLinks.length?t.depth:e-1}function iz(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?py(t.sourceLinks,crt)-1:0}var az=M(()=>{"use strict";tz();o(crt,"targetDepth");o(rz,"left");o(nz,"right");o(L4,"justify");o(iz,"center")});function gy(t){return function(){return t}}var Sxe=M(()=>{"use strict";o(gy,"constant")});function Cxe(t,e){return SC(t.source,e.source)||t.index-e.index}function Axe(t,e){return SC(t.target,e.target)||t.index-e.index}function SC(t,e){return t.y0-e.y0}function sz(t){return t.value}function urt(t){return t.index}function hrt(t){return t.nodes}function frt(t){return t.links}function _xe(t,e){let r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function Dxe({nodes:t}){for(let e of t){let r=e.y0,n=r;for(let i of e.sourceLinks)i.y0=r+i.width/2,r+=i.width;for(let i of e.targetLinks)i.y1=n+i.width/2,n+=i.width}}function CC(){let t=0,e=0,r=1,n=1,i=24,a=8,s,l=urt,u=L4,h,f,d=hrt,p=frt,m=6;function g(){let O={nodes:d.apply(null,arguments),links:p.apply(null,arguments)};return y(O),v(O),x(O),b(O),w(O),Dxe(O),O}o(g,"sankey"),g.update=function(O){return Dxe(O),O},g.nodeId=function(O){return arguments.length?(l=typeof O=="function"?O:gy(O),g):l},g.nodeAlign=function(O){return arguments.length?(u=typeof O=="function"?O:gy(O),g):u},g.nodeSort=function(O){return arguments.length?(h=O,g):h},g.nodeWidth=function(O){return arguments.length?(i=+O,g):i},g.nodePadding=function(O){return arguments.length?(a=s=+O,g):a},g.nodes=function(O){return arguments.length?(d=typeof O=="function"?O:gy(O),g):d},g.links=function(O){return arguments.length?(p=typeof O=="function"?O:gy(O),g):p},g.linkSort=function(O){return arguments.length?(f=O,g):f},g.size=function(O){return arguments.length?(t=e=0,r=+O[0],n=+O[1],g):[r-t,n-e]},g.extent=function(O){return arguments.length?(t=+O[0][0],r=+O[1][0],e=+O[0][1],n=+O[1][1],g):[[t,e],[r,n]]},g.iterations=function(O){return arguments.length?(m=+O,g):m};function y({nodes:O,links:N}){for(let[B,F]of O.entries())F.index=B,F.sourceLinks=[],F.targetLinks=[];let P=new Map(O.map((B,F)=>[l(B,F,O),B]));for(let[B,F]of N.entries()){F.index=B;let{source:V,target:$}=F;typeof V!="object"&&(V=F.source=_xe(P,V)),typeof $!="object"&&($=F.target=_xe(P,$)),V.sourceLinks.push(F),$.targetLinks.push(F)}if(f!=null)for(let{sourceLinks:B,targetLinks:F}of O)B.sort(f),F.sort(f)}o(y,"computeNodeLinks");function v({nodes:O}){for(let N of O)N.value=N.fixedValue===void 0?Math.max(my(N.sourceLinks,sz),my(N.targetLinks,sz)):N.fixedValue}o(v,"computeNodeValues");function x({nodes:O}){let N=O.length,P=new Set(O),B=new Set,F=0;for(;P.size;){for(let V of P){V.depth=F;for(let{target:$}of V.sourceLinks)B.add($)}if(++F>N)throw new Error("circular link");P=B,B=new Set}}o(x,"computeNodeDepths");function b({nodes:O}){let N=O.length,P=new Set(O),B=new Set,F=0;for(;P.size;){for(let V of P){V.height=F;for(let{source:$}of V.targetLinks)B.add($)}if(++F>N)throw new Error("circular link");P=B,B=new Set}}o(b,"computeNodeHeights");function T({nodes:O}){let N=D4(O,F=>F.depth)+1,P=(r-t-i)/(N-1),B=new Array(N);for(let F of O){let V=Math.max(0,Math.min(N-1,Math.floor(u.call(null,F,N))));F.layer=V,F.x0=t+V*P,F.x1=F.x0+i,B[V]?B[V].push(F):B[V]=[F]}if(h)for(let F of B)F.sort(h);return B}o(T,"computeNodeLayers");function S(O){let N=py(O,P=>(n-e-(P.length-1)*s)/my(P,sz));for(let P of O){let B=e;for(let F of P){F.y0=B,F.y1=B+F.value*N,B=F.y1+s;for(let V of F.sourceLinks)V.width=V.value*N}B=(n-B+s)/(P.length+1);for(let F=0;FP.length)-1)),S(N);for(let P=0;P0))continue;let ee=(U/j-$.y0)*N;$.y0+=ee,$.y1+=ee,R($)}h===void 0&&V.sort(SC),A(V,P)}}o(k,"relaxLeftToRight");function C(O,N,P){for(let B=O.length,F=B-2;F>=0;--F){let V=O[F];for(let $ of V){let U=0,j=0;for(let{target:q,value:oe}of $.sourceLinks){let Q=oe*(q.layer-$.layer);U+=D($,q)*Q,j+=Q}if(!(j>0))continue;let ee=(U/j-$.y0)*N;$.y0+=ee,$.y1+=ee,R($)}h===void 0&&V.sort(SC),A(V,P)}}o(C,"relaxRightToLeft");function A(O,N){let P=O.length>>1,B=O[P];I(O,B.y0-s,P-1,N),L(O,B.y1+s,P+1,N),I(O,n,O.length-1,N),L(O,e,0,N)}o(A,"resolveCollisions");function L(O,N,P,B){for(;P1e-6&&(F.y0+=V,F.y1+=V),N=F.y1+s}}o(L,"resolveCollisionsTopToBottom");function I(O,N,P,B){for(;P>=0;--P){let F=O[P],V=(F.y1-N)*B;V>1e-6&&(F.y0-=V,F.y1-=V),N=F.y0-s}}o(I,"resolveCollisionsBottomToTop");function R({sourceLinks:O,targetLinks:N}){if(f===void 0){for(let{source:{sourceLinks:P}}of N)P.sort(Axe);for(let{target:{targetLinks:P}}of O)P.sort(Cxe)}}o(R,"reorderNodeLinks");function E(O){if(f===void 0)for(let{sourceLinks:N,targetLinks:P}of O)N.sort(Axe),P.sort(Cxe)}o(E,"reorderLinks");function _(O,N){let P=O.y0-(O.sourceLinks.length-1)*s/2;for(let{target:B,width:F}of O.sourceLinks){if(B===N)break;P+=F+s}for(let{source:B,width:F}of N.targetLinks){if(B===O)break;P-=F}return P}o(_,"targetTop");function D(O,N){let P=N.y0-(N.targetLinks.length-1)*s/2;for(let{source:B,width:F}of N.targetLinks){if(B===O)break;P+=F+s}for(let{target:B,width:F}of O.sourceLinks){if(B===N)break;P-=F}return P}return o(D,"sourceTop"),g}var Lxe=M(()=>{"use strict";tz();az();Sxe();o(Cxe,"ascendingSourceBreadth");o(Axe,"ascendingTargetBreadth");o(SC,"ascendingBreadth");o(sz,"value");o(urt,"defaultId");o(hrt,"defaultNodes");o(frt,"defaultLinks");o(_xe,"find");o(Dxe,"computeLinkBreadths");o(CC,"Sankey")});function cz(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function Rxe(){return new cz}var oz,lz,f0,drt,uz,Nxe=M(()=>{"use strict";oz=Math.PI,lz=2*oz,f0=1e-6,drt=lz-f0;o(cz,"Path");o(Rxe,"path");cz.prototype=Rxe.prototype={constructor:cz,moveTo:o(function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},"moveTo"),closePath:o(function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},"closePath"),lineTo:o(function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},"lineTo"),quadraticCurveTo:o(function(t,e,r,n){this._+="Q"+ +t+","+ +e+","+(this._x1=+r)+","+(this._y1=+n)},"quadraticCurveTo"),bezierCurveTo:o(function(t,e,r,n,i,a){this._+="C"+ +t+","+ +e+","+ +r+","+ +n+","+(this._x1=+i)+","+(this._y1=+a)},"bezierCurveTo"),arcTo:o(function(t,e,r,n,i){t=+t,e=+e,r=+r,n=+n,i=+i;var a=this._x1,s=this._y1,l=r-t,u=n-e,h=a-t,f=s-e,d=h*h+f*f;if(i<0)throw new Error("negative radius: "+i);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(d>f0)if(!(Math.abs(f*l-u*h)>f0)||!i)this._+="L"+(this._x1=t)+","+(this._y1=e);else{var p=r-a,m=n-s,g=l*l+u*u,y=p*p+m*m,v=Math.sqrt(g),x=Math.sqrt(d),b=i*Math.tan((oz-Math.acos((g+d-y)/(2*v*x)))/2),T=b/x,S=b/v;Math.abs(T-1)>f0&&(this._+="L"+(t+T*h)+","+(e+T*f)),this._+="A"+i+","+i+",0,0,"+ +(f*p>h*m)+","+(this._x1=t+S*l)+","+(this._y1=e+S*u)}},"arcTo"),arc:o(function(t,e,r,n,i,a){t=+t,e=+e,r=+r,a=!!a;var s=r*Math.cos(n),l=r*Math.sin(n),u=t+s,h=e+l,f=1^a,d=a?n-i:i-n;if(r<0)throw new Error("negative radius: "+r);this._x1===null?this._+="M"+u+","+h:(Math.abs(this._x1-u)>f0||Math.abs(this._y1-h)>f0)&&(this._+="L"+u+","+h),r&&(d<0&&(d=d%lz+lz),d>drt?this._+="A"+r+","+r+",0,1,"+f+","+(t-s)+","+(e-l)+"A"+r+","+r+",0,1,"+f+","+(this._x1=u)+","+(this._y1=h):d>f0&&(this._+="A"+r+","+r+",0,"+ +(d>=oz)+","+f+","+(this._x1=t+r*Math.cos(i))+","+(this._y1=e+r*Math.sin(i))))},"arc"),rect:o(function(t,e,r,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +r+"v"+ +n+"h"+-r+"Z"},"rect"),toString:o(function(){return this._},"toString")};uz=Rxe});var Mxe=M(()=>{"use strict";Nxe()});function AC(t){return o(function(){return t},"constant")}var Ixe=M(()=>{"use strict";o(AC,"default")});function Oxe(t){return t[0]}function Pxe(t){return t[1]}var Bxe=M(()=>{"use strict";o(Oxe,"x");o(Pxe,"y")});var Fxe,$xe=M(()=>{"use strict";Fxe=Array.prototype.slice});function prt(t){return t.source}function mrt(t){return t.target}function grt(t){var e=prt,r=mrt,n=Oxe,i=Pxe,a=null;function s(){var l,u=Fxe.call(arguments),h=e.apply(this,u),f=r.apply(this,u);if(a||(a=l=uz()),t(a,+n.apply(this,(u[0]=h,u)),+i.apply(this,u),+n.apply(this,(u[0]=f,u)),+i.apply(this,u)),l)return a=null,l+""||null}return o(s,"link"),s.source=function(l){return arguments.length?(e=l,s):e},s.target=function(l){return arguments.length?(r=l,s):r},s.x=function(l){return arguments.length?(n=typeof l=="function"?l:AC(+l),s):n},s.y=function(l){return arguments.length?(i=typeof l=="function"?l:AC(+l),s):i},s.context=function(l){return arguments.length?(a=l??null,s):a},s}function yrt(t,e,r,n,i){t.moveTo(e,r),t.bezierCurveTo(e=(e+n)/2,r,e,i,n,i)}function hz(){return grt(yrt)}var zxe=M(()=>{"use strict";Mxe();$xe();Ixe();Bxe();o(prt,"linkSource");o(mrt,"linkTarget");o(grt,"link");o(yrt,"curveHorizontal");o(hz,"linkHorizontal")});var Gxe=M(()=>{"use strict";zxe()});function vrt(t){return[t.source.x1,t.y0]}function xrt(t){return[t.target.x0,t.y1]}function _C(){return hz().source(vrt).target(xrt)}var Vxe=M(()=>{"use strict";Gxe();o(vrt,"horizontalSource");o(xrt,"horizontalTarget");o(_C,"default")});var Uxe=M(()=>{"use strict";Lxe();az();Vxe()});var R4,Hxe=M(()=>{"use strict";R4=class t{static{o(this,"Uid")}static{this.count=0}static next(e){return new t(e+ ++t.count)}constructor(e){this.id=e,this.href=`#${e}`}toString(){return"url("+this.href+")"}}});var brt,Trt,qxe,Wxe=M(()=>{"use strict";Xt();yr();Uxe();Ei();Hxe();brt={left:rz,right:nz,center:iz,justify:L4},Trt=o(function(t,e,r,n){let{securityLevel:i,sankey:a}=ge(),s=V3.sankey,l;i==="sandbox"&&(l=qe("#i"+e));let u=i==="sandbox"?qe(l.nodes()[0].contentDocument.body):qe("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):qe(`[id="${e}"]`),f=a?.width??s.width,d=a?.height??s.width,p=a?.useMaxWidth??s.useMaxWidth,m=a?.nodeAlignment??s.nodeAlignment,g=a?.prefix??s.prefix,y=a?.suffix??s.suffix,v=a?.showValues??s.showValues,x=n.db.getGraph(),b=brt[m];CC().nodeId(I=>I.id).nodeWidth(10).nodePadding(10+(v?15:0)).nodeAlign(b).extent([[0,0],[f,d]])(x);let w=no(YD);h.append("g").attr("class","nodes").selectAll(".node").data(x.nodes).join("g").attr("class","node").attr("id",I=>(I.uid=R4.next("node-")).id).attr("transform",function(I){return"translate("+I.x0+","+I.y0+")"}).attr("x",I=>I.x0).attr("y",I=>I.y0).append("rect").attr("height",I=>I.y1-I.y0).attr("width",I=>I.x1-I.x0).attr("fill",I=>w(I.id));let k=o(({id:I,value:R})=>v?`${I} +${g}${Math.round(R*100)/100}${y}`:I,"getText");h.append("g").attr("class","node-labels").attr("font-size",14).selectAll("text").data(x.nodes).join("text").attr("x",I=>I.x0(I.y1+I.y0)/2).attr("dy",`${v?"0":"0.35"}em`).attr("text-anchor",I=>I.x0(R.uid=R4.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",R=>R.source.x1).attr("x2",R=>R.target.x0);I.append("stop").attr("offset","0%").attr("stop-color",R=>w(R.source.id)),I.append("stop").attr("offset","100%").attr("stop-color",R=>w(R.target.id))}let L;switch(A){case"gradient":L=o(I=>I.uid,"coloring");break;case"source":L=o(I=>w(I.source.id),"coloring");break;case"target":L=o(I=>w(I.target.id),"coloring");break;default:L=A}C.append("path").attr("d",_C()).attr("stroke",L).attr("stroke-width",I=>Math.max(1,I.width)),ic(void 0,h,0,p)},"draw"),qxe={draw:Trt}});var Yxe,Xxe=M(()=>{"use strict";Yxe=o(t=>t.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,` +`).trim(),"prepareTextForParsing")});var wrt,jxe,Kxe=M(()=>{"use strict";wrt=o(t=>`.label { + font-family: ${t.fontFamily}; + }`,"getStyles"),jxe=wrt});var Qxe={};dr(Qxe,{diagram:()=>Ert});var krt,Ert,Zxe=M(()=>{"use strict";xxe();Txe();Wxe();Xxe();Kxe();krt=_4.parse.bind(_4);_4.parse=t=>krt(Yxe(t));Ert={styles:jxe,parser:_4,db:bxe,renderer:qxe}});var _rt,yy,fz=M(()=>{"use strict";qn();Ra();tr();ci();_rt=ur.packet,yy=class{constructor(){this.packet=[];this.setAccTitle=Rr;this.getAccTitle=Mr;this.setDiagramTitle=$r;this.getDiagramTitle=Pr;this.getAccDescription=Or;this.setAccDescription=Ir}static{o(this,"PacketDB")}getConfig(){let e=Vn({..._rt,...Qt().packet});return e.showBits&&(e.paddingY+=10),e}getPacket(){return this.packet}pushWord(e){e.length>0&&this.packet.push(e)}clear(){Sr(),this.packet=[]}}});var Drt,Lrt,Rrt,dz,tbe=M(()=>{"use strict";Uf();pt();r0();fz();Drt=1e4,Lrt=o((t,e)=>{nl(t,e);let r=-1,n=[],i=1,{bitsPerRow:a}=e.getConfig();for(let{start:s,end:l,bits:u,label:h}of t.blocks){if(s!==void 0&&l!==void 0&&l{if(t.start===void 0)throw new Error("start should have been set during first phase");if(t.end===void 0)throw new Error("end should have been set during first phase");if(t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);if(t.end+1<=e*r)return[t,void 0];let n=e*r-1,i=e*r;return[{start:t.start,end:n,label:t.label,bits:n-t.start},{start:i,end:t.end,label:t.label,bits:t.end-i}]},"getNextFittingBlock"),dz={parser:{yy:void 0},parse:o(async t=>{let e=await bs("packet",t),r=dz.parser?.yy;if(!(r instanceof yy))throw new Error("parser.parser?.yy was not a PacketDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");X.debug(e),Lrt(e,r)},"parse")}});var Nrt,Mrt,rbe,nbe=M(()=>{"use strict";tu();Ei();Nrt=o((t,e,r,n)=>{let i=n.db,a=i.getConfig(),{rowHeight:s,paddingY:l,bitWidth:u,bitsPerRow:h}=a,f=i.getPacket(),d=i.getDiagramTitle(),p=s+l,m=p*(f.length+1)-(d?0:s),g=u*h+2,y=aa(e);y.attr("viewbox",`0 0 ${g} ${m}`),mn(y,m,g,a.useMaxWidth);for(let[v,x]of f.entries())Mrt(y,x,v,a);y.append("text").text(d).attr("x",g/2).attr("y",m-p/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),Mrt=o((t,e,r,{rowHeight:n,paddingX:i,paddingY:a,bitWidth:s,bitsPerRow:l,showBits:u})=>{let h=t.append("g"),f=r*(n+a)+a;for(let d of e){let p=d.start%l*s+1,m=(d.end-d.start+1)*s-i;if(h.append("rect").attr("x",p).attr("y",f).attr("width",m).attr("height",n).attr("class","packetBlock"),h.append("text").attr("x",p+m/2).attr("y",f+n/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(d.label),!u)continue;let g=d.end===d.start,y=f-2;h.append("text").attr("x",p+(g?m/2:0)).attr("y",y).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",g?"middle":"start").text(d.start),g||h.append("text").attr("x",p+m).attr("y",y).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(d.end)}},"drawWord"),rbe={draw:Nrt}});var Irt,ibe,abe=M(()=>{"use strict";tr();Irt={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},ibe=o(({packet:t}={})=>{let e=Vn(Irt,t);return` + .packetByte { + font-size: ${e.byteFontSize}; + } + .packetByte.start { + fill: ${e.startByteColor}; + } + .packetByte.end { + fill: ${e.endByteColor}; + } + .packetLabel { + fill: ${e.labelColor}; + font-size: ${e.labelFontSize}; + } + .packetTitle { + fill: ${e.titleColor}; + font-size: ${e.titleFontSize}; + } + .packetBlock { + stroke: ${e.blockStrokeColor}; + stroke-width: ${e.blockStrokeWidth}; + fill: ${e.blockFillColor}; + } + `},"styles")});var sbe={};dr(sbe,{diagram:()=>Ort});var Ort,obe=M(()=>{"use strict";fz();tbe();nbe();abe();Ort={parser:dz,get db(){return new yy},renderer:rbe,styles:ibe}});var vy,ube,d0,Frt,$rt,hbe,zrt,Grt,Vrt,Urt,Hrt,qrt,Wrt,p0,pz=M(()=>{"use strict";qn();Ra();tr();ci();vy={showLegend:!0,ticks:5,max:null,min:0,graticule:"circle"},ube={axes:[],curves:[],options:vy},d0=structuredClone(ube),Frt=ur.radar,$rt=o(()=>Vn({...Frt,...Qt().radar}),"getConfig"),hbe=o(()=>d0.axes,"getAxes"),zrt=o(()=>d0.curves,"getCurves"),Grt=o(()=>d0.options,"getOptions"),Vrt=o(t=>{d0.axes=t.map(e=>({name:e.name,label:e.label??e.name}))},"setAxes"),Urt=o(t=>{d0.curves=t.map(e=>({name:e.name,label:e.label??e.name,entries:Hrt(e.entries)}))},"setCurves"),Hrt=o(t=>{if(t[0].axis==null)return t.map(r=>r.value);let e=hbe();if(e.length===0)throw new Error("Axes must be populated before curves for reference entries");return e.map(r=>{let n=t.find(i=>i.axis?.$refText===r.name);if(n===void 0)throw new Error("Missing entry for axis "+r.label);return n.value})},"computeCurveEntries"),qrt=o(t=>{let e=t.reduce((r,n)=>(r[n.name]=n,r),{});d0.options={showLegend:e.showLegend?.value??vy.showLegend,ticks:e.ticks?.value??vy.ticks,max:e.max?.value??vy.max,min:e.min?.value??vy.min,graticule:e.graticule?.value??vy.graticule}},"setOptions"),Wrt=o(()=>{Sr(),d0=structuredClone(ube)},"clear"),p0={getAxes:hbe,getCurves:zrt,getOptions:Grt,setAxes:Vrt,setCurves:Urt,setOptions:qrt,getConfig:$rt,clear:Wrt,setAccTitle:Rr,getAccTitle:Mr,setDiagramTitle:$r,getDiagramTitle:Pr,getAccDescription:Or,setAccDescription:Ir}});var Yrt,fbe,dbe=M(()=>{"use strict";Uf();pt();r0();pz();Yrt=o(t=>{nl(t,p0);let{axes:e,curves:r,options:n}=t;p0.setAxes(e),p0.setCurves(r),p0.setOptions(n)},"populate"),fbe={parse:o(async t=>{let e=await bs("radar",t);X.debug(e),Yrt(e)},"parse")}});function Zrt(t,e,r,n,i,a,s){let l=e.length,u=Math.min(s.width,s.height)/2;r.forEach((h,f)=>{if(h.entries.length!==l)return;let d=h.entries.map((p,m)=>{let g=2*Math.PI*m/l-Math.PI/2,y=Jrt(p,n,i,u),v=y*Math.cos(g),x=y*Math.sin(g);return{x:v,y:x}});a==="circle"?t.append("path").attr("d",ent(d,s.curveTension)).attr("class",`radarCurve-${f}`):a==="polygon"&&t.append("polygon").attr("points",d.map(p=>`${p.x},${p.y}`).join(" ")).attr("class",`radarCurve-${f}`)})}function Jrt(t,e,r,n){let i=Math.min(Math.max(t,e),r);return n*(i-e)/(r-e)}function ent(t,e){let r=t.length,n=`M${t[0].x},${t[0].y}`;for(let i=0;i{let h=t.append("g").attr("transform",`translate(${i}, ${a+u*s})`);h.append("rect").attr("width",12).attr("height",12).attr("class",`radarLegendBox-${u}`),h.append("text").attr("x",16).attr("y",0).attr("class","radarLegendText").text(l.label)})}var Xrt,jrt,Krt,Qrt,pbe,mbe=M(()=>{"use strict";tu();Xrt=o((t,e,r,n)=>{let i=n.db,a=i.getAxes(),s=i.getCurves(),l=i.getOptions(),u=i.getConfig(),h=i.getDiagramTitle(),f=aa(e),d=jrt(f,u),p=l.max??Math.max(...s.map(y=>Math.max(...y.entries))),m=l.min,g=Math.min(u.width,u.height)/2;Krt(d,a,g,l.ticks,l.graticule),Qrt(d,a,g,u),Zrt(d,a,s,m,p,l.graticule,u),tnt(d,s,l.showLegend,u),d.append("text").attr("class","radarTitle").text(h).attr("x",0).attr("y",-u.height/2-u.marginTop)},"draw"),jrt=o((t,e)=>{let r=e.width+e.marginLeft+e.marginRight,n=e.height+e.marginTop+e.marginBottom,i={x:e.marginLeft+e.width/2,y:e.marginTop+e.height/2};return t.attr("viewbox",`0 0 ${r} ${n}`).attr("width",r).attr("height",n),t.append("g").attr("transform",`translate(${i.x}, ${i.y})`)},"drawFrame"),Krt=o((t,e,r,n,i)=>{if(i==="circle")for(let a=0;a{let d=2*f*Math.PI/a-Math.PI/2,p=l*Math.cos(d),m=l*Math.sin(d);return`${p},${m}`}).join(" ");t.append("polygon").attr("points",u).attr("class","radarGraticule")}}},"drawGraticule"),Qrt=o((t,e,r,n)=>{let i=e.length;for(let a=0;a{"use strict";tr();Py();qn();rnt=o((t,e)=>{let r="";for(let n=0;n{let e=mh(),r=Qt(),n=Vn(e,r.themeVariables),i=Vn(n.radar,t);return{themeVariables:n,radarOptions:i}},"buildRadarStyleOptions"),gbe=o(({radar:t}={})=>{let{themeVariables:e,radarOptions:r}=nnt(t);return` + .radarTitle { + font-size: ${e.fontSize}; + color: ${e.titleColor}; + dominant-baseline: hanging; + text-anchor: middle; + } + .radarAxisLine { + stroke: ${r.axisColor}; + stroke-width: ${r.axisStrokeWidth}; + } + .radarAxisLabel { + dominant-baseline: middle; + text-anchor: middle; + font-size: ${r.axisLabelFontSize}px; + color: ${r.axisColor}; + } + .radarGraticule { + fill: ${r.graticuleColor}; + fill-opacity: ${r.graticuleOpacity}; + stroke: ${r.graticuleColor}; + stroke-width: ${r.graticuleStrokeWidth}; + } + .radarLegendText { + text-anchor: start; + font-size: ${r.legendFontSize}px; + dominant-baseline: hanging; + } + ${rnt(e,r)} + `},"styles")});var vbe={};dr(vbe,{diagram:()=>int});var int,xbe=M(()=>{"use strict";pz();dbe();mbe();ybe();int={parser:fbe,db:p0,renderer:pbe,styles:gbe}});var mz,wbe,kbe=M(()=>{"use strict";mz=(function(){var t=o(function(T,S,w,k){for(w=w||{},k=T.length;k--;w[T[k]]=S);return w},"o"),e=[1,15],r=[1,7],n=[1,13],i=[1,14],a=[1,19],s=[1,16],l=[1,17],u=[1,18],h=[8,30],f=[8,10,21,28,29,30,31,39,43,46],d=[1,23],p=[1,24],m=[8,10,15,16,21,28,29,30,31,39,43,46],g=[8,10,15,16,21,27,28,29,30,31,39,43,46],y=[1,49],v={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,NODE_ID:31,nodeShapeNLabel:32,dirList:33,DIR:34,NODE_DSTART:35,NODE_DEND:36,BLOCK_ARROW_START:37,BLOCK_ARROW_END:38,classDef:39,CLASSDEF_ID:40,CLASSDEF_STYLEOPTS:41,DEFAULT:42,class:43,CLASSENTITY_IDS:44,STYLECLASS:45,style:46,STYLE_ENTITY_IDS:47,STYLE_DEFINITION_DATA:48,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"NODE_ID",34:"DIR",35:"NODE_DSTART",36:"NODE_DEND",37:"BLOCK_ARROW_START",38:"BLOCK_ARROW_END",39:"classDef",40:"CLASSDEF_ID",41:"CLASSDEF_STYLEOPTS",42:"DEFAULT",43:"class",44:"CLASSENTITY_IDS",45:"STYLECLASS",46:"style",47:"STYLE_ENTITY_IDS",48:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[33,1],[33,2],[32,3],[32,4],[23,3],[23,3],[24,3],[25,3]],performAction:o(function(S,w,k,C,A,L,I){var R=L.length-1;switch(A){case 4:C.getLogger().debug("Rule: separator (NL) ");break;case 5:C.getLogger().debug("Rule: separator (Space) ");break;case 6:C.getLogger().debug("Rule: separator (EOF) ");break;case 7:C.getLogger().debug("Rule: hierarchy: ",L[R-1]),C.setHierarchy(L[R-1]);break;case 8:C.getLogger().debug("Stop NL ");break;case 9:C.getLogger().debug("Stop EOF ");break;case 10:C.getLogger().debug("Stop NL2 ");break;case 11:C.getLogger().debug("Stop EOF2 ");break;case 12:C.getLogger().debug("Rule: statement: ",L[R]),typeof L[R].length=="number"?this.$=L[R]:this.$=[L[R]];break;case 13:C.getLogger().debug("Rule: statement #2: ",L[R-1]),this.$=[L[R-1]].concat(L[R]);break;case 14:C.getLogger().debug("Rule: link: ",L[R],S),this.$={edgeTypeStr:L[R],label:""};break;case 15:C.getLogger().debug("Rule: LABEL link: ",L[R-3],L[R-1],L[R]),this.$={edgeTypeStr:L[R],label:L[R-1]};break;case 18:let E=parseInt(L[R]),_=C.generateId();this.$={id:_,type:"space",label:"",width:E,children:[]};break;case 23:C.getLogger().debug("Rule: (nodeStatement link node) ",L[R-2],L[R-1],L[R]," typestr: ",L[R-1].edgeTypeStr);let D=C.edgeStrToEdgeData(L[R-1].edgeTypeStr);this.$=[{id:L[R-2].id,label:L[R-2].label,type:L[R-2].type,directions:L[R-2].directions},{id:L[R-2].id+"-"+L[R].id,start:L[R-2].id,end:L[R].id,label:L[R-1].label,type:"edge",directions:L[R].directions,arrowTypeEnd:D,arrowTypeStart:"arrow_open"},{id:L[R].id,label:L[R].label,type:C.typeStr2Type(L[R].typeStr),directions:L[R].directions}];break;case 24:C.getLogger().debug("Rule: nodeStatement (abc88 node size) ",L[R-1],L[R]),this.$={id:L[R-1].id,label:L[R-1].label,type:C.typeStr2Type(L[R-1].typeStr),directions:L[R-1].directions,widthInColumns:parseInt(L[R],10)};break;case 25:C.getLogger().debug("Rule: nodeStatement (node) ",L[R]),this.$={id:L[R].id,label:L[R].label,type:C.typeStr2Type(L[R].typeStr),directions:L[R].directions,widthInColumns:1};break;case 26:C.getLogger().debug("APA123",this?this:"na"),C.getLogger().debug("COLUMNS: ",L[R]),this.$={type:"column-setting",columns:L[R]==="auto"?-1:parseInt(L[R])};break;case 27:C.getLogger().debug("Rule: id-block statement : ",L[R-2],L[R-1]);let O=C.generateId();this.$={...L[R-2],type:"composite",children:L[R-1]};break;case 28:C.getLogger().debug("Rule: blockStatement : ",L[R-2],L[R-1],L[R]);let N=C.generateId();this.$={id:N,type:"composite",label:"",children:L[R-1]};break;case 29:C.getLogger().debug("Rule: node (NODE_ID separator): ",L[R]),this.$={id:L[R]};break;case 30:C.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",L[R-1],L[R]),this.$={id:L[R-1],label:L[R].label,typeStr:L[R].typeStr,directions:L[R].directions};break;case 31:C.getLogger().debug("Rule: dirList: ",L[R]),this.$=[L[R]];break;case 32:C.getLogger().debug("Rule: dirList: ",L[R-1],L[R]),this.$=[L[R-1]].concat(L[R]);break;case 33:C.getLogger().debug("Rule: nodeShapeNLabel: ",L[R-2],L[R-1],L[R]),this.$={typeStr:L[R-2]+L[R],label:L[R-1]};break;case 34:C.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",L[R-3],L[R-2]," #3:",L[R-1],L[R]),this.$={typeStr:L[R-3]+L[R],label:L[R-2],directions:L[R-1]};break;case 35:case 36:this.$={type:"classDef",id:L[R-1].trim(),css:L[R].trim()};break;case 37:this.$={type:"applyClass",id:L[R-1].trim(),styleClass:L[R].trim()};break;case 38:this.$={type:"applyStyles",id:L[R-1].trim(),stylesStr:L[R].trim()};break}},"anonymous"),table:[{9:1,10:[1,2]},{1:[3]},{10:e,11:3,13:4,19:5,20:6,21:r,22:8,23:9,24:10,25:11,26:12,28:n,29:i,31:a,39:s,43:l,46:u},{8:[1,20]},t(h,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,10:e,21:r,28:n,29:i,31:a,39:s,43:l,46:u}),t(f,[2,16],{14:22,15:d,16:p}),t(f,[2,17]),t(f,[2,18]),t(f,[2,19]),t(f,[2,20]),t(f,[2,21]),t(f,[2,22]),t(m,[2,25],{27:[1,25]}),t(f,[2,26]),{19:26,26:12,31:a},{10:e,11:27,13:4,19:5,20:6,21:r,22:8,23:9,24:10,25:11,26:12,28:n,29:i,31:a,39:s,43:l,46:u},{40:[1,28],42:[1,29]},{44:[1,30]},{47:[1,31]},t(g,[2,29],{32:32,35:[1,33],37:[1,34]}),{1:[2,7]},t(h,[2,13]),{26:35,31:a},{31:[2,14]},{17:[1,36]},t(m,[2,24]),{10:e,11:37,13:4,14:22,15:d,16:p,19:5,20:6,21:r,22:8,23:9,24:10,25:11,26:12,28:n,29:i,31:a,39:s,43:l,46:u},{30:[1,38]},{41:[1,39]},{41:[1,40]},{45:[1,41]},{48:[1,42]},t(g,[2,30]),{18:[1,43]},{18:[1,44]},t(m,[2,23]),{18:[1,45]},{30:[1,46]},t(f,[2,28]),t(f,[2,35]),t(f,[2,36]),t(f,[2,37]),t(f,[2,38]),{36:[1,47]},{33:48,34:y},{15:[1,50]},t(f,[2,27]),t(g,[2,33]),{38:[1,51]},{33:52,34:y,38:[2,31]},{31:[2,15]},t(g,[2,34]),{38:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:o(function(S,w){if(w.recoverable)this.trace(S);else{var k=new Error(S);throw k.hash=w,k}},"parseError"),parse:o(function(S){var w=this,k=[0],C=[],A=[null],L=[],I=this.table,R="",E=0,_=0,D=0,O=2,N=1,P=L.slice.call(arguments,1),B=Object.create(this.lexer),F={yy:{}};for(var V in this.yy)Object.prototype.hasOwnProperty.call(this.yy,V)&&(F.yy[V]=this.yy[V]);B.setInput(S,F.yy),F.yy.lexer=B,F.yy.parser=this,typeof B.yylloc>"u"&&(B.yylloc={});var $=B.yylloc;L.push($);var U=B.options&&B.options.ranges;typeof F.yy.parseError=="function"?this.parseError=F.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function j(Te){k.length=k.length-2*Te,A.length=A.length-Te,L.length=L.length-Te}o(j,"popStack");function ee(){var Te;return Te=C.pop()||B.lex()||N,typeof Te!="number"&&(Te instanceof Array&&(C=Te,Te=C.pop()),Te=w.symbols_[Te]||Te),Te}o(ee,"lex");for(var q,oe,Q,ue,te,re,J={},K,ae,Z,de;;){if(Q=k[k.length-1],this.defaultActions[Q]?ue=this.defaultActions[Q]:((q===null||typeof q>"u")&&(q=ee()),ue=I[Q]&&I[Q][q]),typeof ue>"u"||!ue.length||!ue[0]){var ne="";de=[];for(K in I[Q])this.terminals_[K]&&K>O&&de.push("'"+this.terminals_[K]+"'");B.showPosition?ne="Parse error on line "+(E+1)+`: +`+B.showPosition()+` +Expecting `+de.join(", ")+", got '"+(this.terminals_[q]||q)+"'":ne="Parse error on line "+(E+1)+": Unexpected "+(q==N?"end of input":"'"+(this.terminals_[q]||q)+"'"),this.parseError(ne,{text:B.match,token:this.terminals_[q]||q,line:B.yylineno,loc:$,expected:de})}if(ue[0]instanceof Array&&ue.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Q+", token: "+q);switch(ue[0]){case 1:k.push(q),A.push(B.yytext),L.push(B.yylloc),k.push(ue[1]),q=null,oe?(q=oe,oe=null):(_=B.yyleng,R=B.yytext,E=B.yylineno,$=B.yylloc,D>0&&D--);break;case 2:if(ae=this.productions_[ue[1]][1],J.$=A[A.length-ae],J._$={first_line:L[L.length-(ae||1)].first_line,last_line:L[L.length-1].last_line,first_column:L[L.length-(ae||1)].first_column,last_column:L[L.length-1].last_column},U&&(J._$.range=[L[L.length-(ae||1)].range[0],L[L.length-1].range[1]]),re=this.performAction.apply(J,[R,_,E,F.yy,ue[1],A,L].concat(P)),typeof re<"u")return re;ae&&(k=k.slice(0,-1*ae*2),A=A.slice(0,-1*ae),L=L.slice(0,-1*ae)),k.push(this.productions_[ue[1]][0]),A.push(J.$),L.push(J._$),Z=I[k[k.length-2]][k[k.length-1]],k.push(Z);break;case 3:return!0}}return!0},"parse")},x=(function(){var T={EOF:1,parseError:o(function(w,k){if(this.yy.parser)this.yy.parser.parseError(w,k);else throw new Error(w)},"parseError"),setInput:o(function(S,w){return this.yy=w||this.yy||{},this._input=S,this._more=this._backtrack=this.done=!1,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},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var S=this._input[0];this.yytext+=S,this.yyleng++,this.offset++,this.match+=S,this.matched+=S;var w=S.match(/(?:\r\n?|\n).*/g);return w?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),S},"input"),unput:o(function(S){var w=S.length,k=S.split(/(?:\r\n?|\n)/g);this._input=S+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-w),this.offset-=w;var C=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),k.length-1&&(this.yylineno-=k.length-1);var A=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:k?(k.length===C.length?this.yylloc.first_column:0)+C[C.length-k.length].length-k[0].length:this.yylloc.first_column-w},this.options.ranges&&(this.yylloc.range=[A[0],A[0]+this.yyleng-w]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;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). +`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(S){this.unput(this.match.slice(S))},"less"),pastInput:o(function(){var S=this.matched.substr(0,this.matched.length-this.match.length);return(S.length>20?"...":"")+S.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var S=this.match;return S.length<20&&(S+=this._input.substr(0,20-S.length)),(S.substr(0,20)+(S.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var S=this.pastInput(),w=new Array(S.length+1).join("-");return S+this.upcomingInput()+` +`+w+"^"},"showPosition"),test_match:o(function(S,w){var k,C,A;if(this.options.backtrack_lexer&&(A={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},this.options.ranges&&(A.yylloc.range=this.yylloc.range.slice(0))),C=S[0].match(/(?:\r\n?|\n).*/g),C&&(this.yylineno+=C.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:C?C[C.length-1].length-C[C.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+S[0].length},this.yytext+=S[0],this.match+=S[0],this.matches=S,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(S[0].length),this.matched+=S[0],k=this.performAction.call(this,this.yy,this,w,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),k)return k;if(this._backtrack){for(var L in A)this[L]=A[L];return!1}return!1},"test_match"),next:o(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var S,w,k,C;this._more||(this.yytext="",this.match="");for(var A=this._currentRules(),L=0;Lw[0].length)){if(w=k,C=L,this.options.backtrack_lexer){if(S=this.test_match(k,A[L]),S!==!1)return S;if(this._backtrack){w=!1;continue}else return!1}else if(!this.options.flex)break}return w?(S=this.test_match(w,A[C]),S!==!1?S:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:o(function(){var w=this.next();return w||this.lex()},"lex"),begin:o(function(w){this.conditionStack.push(w)},"begin"),popState:o(function(){var w=this.conditionStack.length-1;return w>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:o(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:o(function(w){return w=this.conditionStack.length-1-Math.abs(w||0),w>=0?this.conditionStack[w]:"INITIAL"},"topState"),pushState:o(function(w){this.begin(w)},"pushState"),stateStackSize:o(function(){return this.conditionStack.length},"stateStackSize"),options:{},performAction:o(function(w,k,C,A){var L=A;switch(C){case 0:return w.getLogger().debug("Found block-beta"),10;break;case 1:return w.getLogger().debug("Found id-block"),29;break;case 2:return w.getLogger().debug("Found block"),10;break;case 3:w.getLogger().debug(".",k.yytext);break;case 4:w.getLogger().debug("_",k.yytext);break;case 5:return 5;case 6:return k.yytext=-1,28;break;case 7:return k.yytext=k.yytext.replace(/columns\s+/,""),w.getLogger().debug("COLUMNS (LEX)",k.yytext),28;break;case 8:this.pushState("md_string");break;case 9:return"MD_STR";case 10:this.popState();break;case 11:this.pushState("string");break;case 12:w.getLogger().debug("LEX: POPPING STR:",k.yytext),this.popState();break;case 13:return w.getLogger().debug("LEX: STR end:",k.yytext),"STR";break;case 14:return k.yytext=k.yytext.replace(/space\:/,""),w.getLogger().debug("SPACE NUM (LEX)",k.yytext),21;break;case 15:return k.yytext="1",w.getLogger().debug("COLUMNS (LEX)",k.yytext),21;break;case 16:return 42;case 17:return"LINKSTYLE";case 18:return"INTERPOLATE";case 19:return this.pushState("CLASSDEF"),39;break;case 20:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";break;case 21:return this.popState(),this.pushState("CLASSDEFID"),40;break;case 22:return this.popState(),41;break;case 23:return this.pushState("CLASS"),43;break;case 24:return this.popState(),this.pushState("CLASS_STYLE"),44;break;case 25:return this.popState(),45;break;case 26:return this.pushState("STYLE_STMNT"),46;break;case 27:return this.popState(),this.pushState("STYLE_DEFINITION"),47;break;case 28:return this.popState(),48;break;case 29:return this.pushState("acc_title"),"acc_title";break;case 30:return this.popState(),"acc_title_value";break;case 31:return this.pushState("acc_descr"),"acc_descr";break;case 32:return this.popState(),"acc_descr_value";break;case 33:this.pushState("acc_descr_multiline");break;case 34:this.popState();break;case 35:return"acc_descr_multiline_value";case 36:return 30;case 37:return this.popState(),w.getLogger().debug("Lex: (("),"NODE_DEND";break;case 38:return this.popState(),w.getLogger().debug("Lex: (("),"NODE_DEND";break;case 39:return this.popState(),w.getLogger().debug("Lex: ))"),"NODE_DEND";break;case 40:return this.popState(),w.getLogger().debug("Lex: (("),"NODE_DEND";break;case 41:return this.popState(),w.getLogger().debug("Lex: (("),"NODE_DEND";break;case 42:return this.popState(),w.getLogger().debug("Lex: (-"),"NODE_DEND";break;case 43:return this.popState(),w.getLogger().debug("Lex: -)"),"NODE_DEND";break;case 44:return this.popState(),w.getLogger().debug("Lex: (("),"NODE_DEND";break;case 45:return this.popState(),w.getLogger().debug("Lex: ]]"),"NODE_DEND";break;case 46:return this.popState(),w.getLogger().debug("Lex: ("),"NODE_DEND";break;case 47:return this.popState(),w.getLogger().debug("Lex: ])"),"NODE_DEND";break;case 48:return this.popState(),w.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 49:return this.popState(),w.getLogger().debug("Lex: /]"),"NODE_DEND";break;case 50:return this.popState(),w.getLogger().debug("Lex: )]"),"NODE_DEND";break;case 51:return this.popState(),w.getLogger().debug("Lex: )"),"NODE_DEND";break;case 52:return this.popState(),w.getLogger().debug("Lex: ]>"),"NODE_DEND";break;case 53:return this.popState(),w.getLogger().debug("Lex: ]"),"NODE_DEND";break;case 54:return w.getLogger().debug("Lexa: -)"),this.pushState("NODE"),35;break;case 55:return w.getLogger().debug("Lexa: (-"),this.pushState("NODE"),35;break;case 56:return w.getLogger().debug("Lexa: ))"),this.pushState("NODE"),35;break;case 57:return w.getLogger().debug("Lexa: )"),this.pushState("NODE"),35;break;case 58:return w.getLogger().debug("Lex: ((("),this.pushState("NODE"),35;break;case 59:return w.getLogger().debug("Lexa: )"),this.pushState("NODE"),35;break;case 60:return w.getLogger().debug("Lexa: )"),this.pushState("NODE"),35;break;case 61:return w.getLogger().debug("Lexa: )"),this.pushState("NODE"),35;break;case 62:return w.getLogger().debug("Lexc: >"),this.pushState("NODE"),35;break;case 63:return w.getLogger().debug("Lexa: (["),this.pushState("NODE"),35;break;case 64:return w.getLogger().debug("Lexa: )"),this.pushState("NODE"),35;break;case 65:return this.pushState("NODE"),35;break;case 66:return this.pushState("NODE"),35;break;case 67:return this.pushState("NODE"),35;break;case 68:return this.pushState("NODE"),35;break;case 69:return this.pushState("NODE"),35;break;case 70:return this.pushState("NODE"),35;break;case 71:return this.pushState("NODE"),35;break;case 72:return w.getLogger().debug("Lexa: ["),this.pushState("NODE"),35;break;case 73:return this.pushState("BLOCK_ARROW"),w.getLogger().debug("LEX ARR START"),37;break;case 74:return w.getLogger().debug("Lex: NODE_ID",k.yytext),31;break;case 75:return w.getLogger().debug("Lex: EOF",k.yytext),8;break;case 76:this.pushState("md_string");break;case 77:this.pushState("md_string");break;case 78:return"NODE_DESCR";case 79:this.popState();break;case 80:w.getLogger().debug("Lex: Starting string"),this.pushState("string");break;case 81:w.getLogger().debug("LEX ARR: Starting string"),this.pushState("string");break;case 82:return w.getLogger().debug("LEX: NODE_DESCR:",k.yytext),"NODE_DESCR";break;case 83:w.getLogger().debug("LEX POPPING"),this.popState();break;case 84:w.getLogger().debug("Lex: =>BAE"),this.pushState("ARROW_DIR");break;case 85:return k.yytext=k.yytext.replace(/^,\s*/,""),w.getLogger().debug("Lex (right): dir:",k.yytext),"DIR";break;case 86:return k.yytext=k.yytext.replace(/^,\s*/,""),w.getLogger().debug("Lex (left):",k.yytext),"DIR";break;case 87:return k.yytext=k.yytext.replace(/^,\s*/,""),w.getLogger().debug("Lex (x):",k.yytext),"DIR";break;case 88:return k.yytext=k.yytext.replace(/^,\s*/,""),w.getLogger().debug("Lex (y):",k.yytext),"DIR";break;case 89:return k.yytext=k.yytext.replace(/^,\s*/,""),w.getLogger().debug("Lex (up):",k.yytext),"DIR";break;case 90:return k.yytext=k.yytext.replace(/^,\s*/,""),w.getLogger().debug("Lex (down):",k.yytext),"DIR";break;case 91:return k.yytext="]>",w.getLogger().debug("Lex (ARROW_DIR end):",k.yytext),this.popState(),this.popState(),"BLOCK_ARROW_END";break;case 92:return w.getLogger().debug("Lex: LINK","#"+k.yytext+"#"),15;break;case 93:return w.getLogger().debug("Lex: LINK",k.yytext),15;break;case 94:return w.getLogger().debug("Lex: LINK",k.yytext),15;break;case 95:return w.getLogger().debug("Lex: LINK",k.yytext),15;break;case 96:return w.getLogger().debug("Lex: START_LINK",k.yytext),this.pushState("LLABEL"),16;break;case 97:return w.getLogger().debug("Lex: START_LINK",k.yytext),this.pushState("LLABEL"),16;break;case 98:return w.getLogger().debug("Lex: START_LINK",k.yytext),this.pushState("LLABEL"),16;break;case 99:this.pushState("md_string");break;case 100:return w.getLogger().debug("Lex: Starting string"),this.pushState("string"),"LINK_LABEL";break;case 101:return this.popState(),w.getLogger().debug("Lex: LINK","#"+k.yytext+"#"),15;break;case 102:return this.popState(),w.getLogger().debug("Lex: LINK",k.yytext),15;break;case 103:return this.popState(),w.getLogger().debug("Lex: LINK",k.yytext),15;break;case 104:return w.getLogger().debug("Lex: COLON",k.yytext),k.yytext=k.yytext.slice(1),27;break}},"anonymous"),rules:[/^(?:block-beta\b)/,/^(?:block:)/,/^(?:block\b)/,/^(?:[\s]+)/,/^(?:[\n]+)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:columns\s+auto\b)/,/^(?:columns\s+[\d]+)/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:space[:]\d+)/,/^(?:space\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\s+)/,/^(?:DEFAULT\s+)/,/^(?:\w+\s+)/,/^(?:[^\n]*)/,/^(?:class\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:style\s+)/,/^(?:(\w+)+((,\s*\w+)*))/,/^(?:[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:end\b\s*)/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:[\)]\))/,/^(?:\}\})/,/^(?:\})/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\()/,/^(?:\]\])/,/^(?:\()/,/^(?:\]\))/,/^(?:\\\])/,/^(?:\/\])/,/^(?:\)\])/,/^(?:[\)])/,/^(?:\]>)/,/^(?:[\]])/,/^(?:-\))/,/^(?:\(-)/,/^(?:\)\))/,/^(?:\))/,/^(?:\(\(\()/,/^(?:\(\()/,/^(?:\{\{)/,/^(?:\{)/,/^(?:>)/,/^(?:\(\[)/,/^(?:\()/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\[\\)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:\[)/,/^(?:<\[)/,/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,/^(?:$)/,/^(?:["][`])/,/^(?:["][`])/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["])/,/^(?:["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:\]>\s*\()/,/^(?:,?\s*right\s*)/,/^(?:,?\s*left\s*)/,/^(?:,?\s*x\s*)/,/^(?:,?\s*y\s*)/,/^(?:,?\s*up\s*)/,/^(?:,?\s*down\s*)/,/^(?:\)\s*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:["][`])/,/^(?:["])/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?::\d+)/],conditions:{STYLE_DEFINITION:{rules:[28],inclusive:!1},STYLE_STMNT:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[22],inclusive:!1},CLASSDEF:{rules:[20,21],inclusive:!1},CLASS_STYLE:{rules:[25],inclusive:!1},CLASS:{rules:[24],inclusive:!1},LLABEL:{rules:[99,100,101,102,103],inclusive:!1},ARROW_DIR:{rules:[85,86,87,88,89,90,91],inclusive:!1},BLOCK_ARROW:{rules:[76,81,84],inclusive:!1},NODE:{rules:[37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,77,80],inclusive:!1},md_string:{rules:[9,10,78,79],inclusive:!1},space:{rules:[],inclusive:!1},string:{rules:[12,13,82,83],inclusive:!1},acc_descr_multiline:{rules:[34,35],inclusive:!1},acc_descr:{rules:[32],inclusive:!1},acc_title:{rules:[30],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,11,14,15,16,17,18,19,23,26,29,31,33,36,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,92,93,94,95,96,97,98,104],inclusive:!0}}};return T})();v.lexer=x;function b(){this.yy={}}return o(b,"Parser"),b.prototype=v,v.Parser=b,new b})();mz.parser=mz;wbe=mz});function pnt(t){switch(X.debug("typeStr2Type",t),t){case"[]":return"square";case"()":return X.debug("we have a round"),"round";case"(())":return"circle";case">]":return"rect_left_inv_arrow";case"{}":return"diamond";case"{{}}":return"hexagon";case"([])":return"stadium";case"[[]]":return"subroutine";case"[()]":return"cylinder";case"((()))":return"doublecircle";case"[//]":return"lean_right";case"[\\\\]":return"lean_left";case"[/\\]":return"trapezoid";case"[\\/]":return"inv_trapezoid";case"<[]>":return"block_arrow";default:return"na"}}function mnt(t){switch(X.debug("typeStr2Type",t),t){case"==":return"thick";default:return"normal"}}function gnt(t){switch(t.replace(/^[\s-]+|[\s-]+$/g,"")){case"x":return"arrow_cross";case"o":return"arrow_circle";case">":return"arrow_point";default:return""}}var ql,yz,gz,Ebe,Sbe,ont,Abe,lnt,DC,cnt,unt,hnt,fnt,_be,vz,N4,dnt,Cbe,ynt,vnt,xnt,bnt,Tnt,wnt,knt,Ent,Snt,Cnt,Ant,Dbe,Lbe=M(()=>{"use strict";hR();qn();Xt();pt();gr();ci();ql=new Map,yz=[],gz=new Map,Ebe="color",Sbe="fill",ont="bgFill",Abe=",",lnt=ge(),DC=new Map,cnt=o(t=>tt.sanitizeText(t,lnt),"sanitizeText"),unt=o(function(t,e=""){let r=DC.get(t);r||(r={id:t,styles:[],textStyles:[]},DC.set(t,r)),e?.split(Abe).forEach(n=>{let i=n.replace(/([^;]*);/,"$1").trim();if(RegExp(Ebe).exec(n)){let s=i.replace(Sbe,ont).replace(Ebe,Sbe);r.textStyles.push(s)}r.styles.push(i)})},"addStyleClass"),hnt=o(function(t,e=""){let r=ql.get(t);e!=null&&(r.styles=e.split(Abe))},"addStyle2Node"),fnt=o(function(t,e){t.split(",").forEach(function(r){let n=ql.get(r);if(n===void 0){let i=r.trim();n={id:i,type:"na",children:[]},ql.set(i,n)}n.classes||(n.classes=[]),n.classes.push(e)})},"setCssClass"),_be=o((t,e)=>{let r=t.flat(),n=[],a=r.find(s=>s?.type==="column-setting")?.columns??-1;for(let s of r){if(typeof a=="number"&&a>0&&s.type!=="column-setting"&&typeof s.widthInColumns=="number"&&s.widthInColumns>a&&X.warn(`Block ${s.id} width ${s.widthInColumns} exceeds configured column width ${a}`),s.label&&(s.label=cnt(s.label)),s.type==="classDef"){unt(s.id,s.css);continue}if(s.type==="applyClass"){fnt(s.id,s?.styleClass??"");continue}if(s.type==="applyStyles"){s?.stylesStr&&hnt(s.id,s?.stylesStr);continue}if(s.type==="column-setting")e.columns=s.columns??-1;else if(s.type==="edge"){let l=(gz.get(s.id)??0)+1;gz.set(s.id,l),s.id=l+"-"+s.id,yz.push(s)}else{s.label||(s.type==="composite"?s.label="":s.label=s.id);let l=ql.get(s.id);if(l===void 0?ql.set(s.id,s):(s.type!=="na"&&(l.type=s.type),s.label!==s.id&&(l.label=s.label)),s.children&&_be(s.children,s),s.type==="space"){let u=s.width??1;for(let h=0;h{X.debug("Clear called"),Sr(),N4={id:"root",type:"composite",children:[],columns:-1},ql=new Map([["root",N4]]),vz=[],DC=new Map,yz=[],gz=new Map},"clear");o(pnt,"typeStr2Type");o(mnt,"edgeTypeStr2Type");o(gnt,"edgeStrToEdgeData");Cbe=0,ynt=o(()=>(Cbe++,"id-"+Math.random().toString(36).substr(2,12)+"-"+Cbe),"generateId"),vnt=o(t=>{N4.children=t,_be(t,N4),vz=N4.children},"setHierarchy"),xnt=o(t=>{let e=ql.get(t);return e?e.columns?e.columns:e.children?e.children.length:-1:-1},"getColumns"),bnt=o(()=>[...ql.values()],"getBlocksFlat"),Tnt=o(()=>vz||[],"getBlocks"),wnt=o(()=>yz,"getEdges"),knt=o(t=>ql.get(t),"getBlock"),Ent=o(t=>{ql.set(t.id,t)},"setBlock"),Snt=o(()=>X,"getLogger"),Cnt=o(function(){return DC},"getClasses"),Ant={getConfig:o(()=>Qt().block,"getConfig"),typeStr2Type:pnt,edgeTypeStr2Type:mnt,edgeStrToEdgeData:gnt,getLogger:Snt,getBlocksFlat:bnt,getBlocks:Tnt,getEdges:wnt,setHierarchy:vnt,getBlock:knt,setBlock:Ent,getColumns:xnt,getClasses:Cnt,clear:dnt,generateId:ynt},Dbe=Ant});var LC,_nt,Rbe,Nbe=M(()=>{"use strict";eo();yg();LC=o((t,e)=>{let r=ld,n=r(t,"r"),i=r(t,"g"),a=r(t,"b");return Ka(n,i,a,e)},"fade"),_nt=o(t=>`.label { + font-family: ${t.fontFamily}; + color: ${t.nodeTextColor||t.textColor}; + } + .cluster-label text { + fill: ${t.titleColor}; + } + .cluster-label span,p { + color: ${t.titleColor}; + } + + + + .label text,span,p { + fill: ${t.nodeTextColor||t.textColor}; + color: ${t.nodeTextColor||t.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${t.mainBkg}; + stroke: ${t.nodeBorder}; + stroke-width: 1px; + } + .flowchart-label text { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${t.arrowheadColor}; + } + + .edgePath .path { + stroke: ${t.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${t.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${t.edgeLabelBackground}; + rect { + opacity: 0.5; + background-color: ${t.edgeLabelBackground}; + fill: ${t.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${LC(t.edgeLabelBackground,.5)}; + // background-color: + } + + .node .cluster { + // fill: ${LC(t.mainBkg,.5)}; + fill: ${LC(t.clusterBkg,.5)}; + stroke: ${LC(t.clusterBorder,.2)}; + box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px; + stroke-width: 1px; + } + + .cluster text { + fill: ${t.titleColor}; + } + + .cluster span,p { + color: ${t.titleColor}; + } + /* .cluster div { + color: ${t.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${t.fontFamily}; + font-size: 12px; + background: ${t.tertiaryColor}; + border: 1px solid ${t.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${t.textColor}; + } + ${zc()} +`,"getStyles"),Rbe=_nt});var Dnt,Lnt,Rnt,Nnt,Mnt,Int,Ont,Pnt,Bnt,Fnt,$nt,Mbe,Ibe=M(()=>{"use strict";pt();Dnt=o((t,e,r,n)=>{e.forEach(i=>{$nt[i](t,r,n)})},"insertMarkers"),Lnt=o((t,e,r)=>{X.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("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),Rnt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),Nnt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),Mnt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),Int=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),Ont=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),Pnt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),Bnt=o((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),Fnt=o((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),$nt={extension:Lnt,composition:Rnt,aggregation:Nnt,dependency:Mnt,lollipop:Int,point:Ont,circle:Pnt,cross:Bnt,barb:Fnt},Mbe=Dnt});function znt(t,e){if(t===0||!Number.isInteger(t))throw new Error("Columns must be an integer !== 0.");if(e<0||!Number.isInteger(e))throw new Error("Position must be a non-negative integer."+e);if(t<0)return{px:e,py:0};if(t===1)return{px:0,py:e};let r=e%t,n=Math.floor(e/t);return{px:r,py:n}}function xz(t,e,r=0,n=0){X.debug("setBlockSizes abc95 (start)",t.id,t?.size?.x,"block width =",t?.size,"siblingWidth",r),t?.size?.width||(t.size={width:r,height:n,x:0,y:0});let i=0,a=0;if(t.children?.length>0){for(let m of t.children)xz(m,e);let s=Gnt(t);i=s.width,a=s.height,X.debug("setBlockSizes abc95 maxWidth of",t.id,":s children is ",i,a);for(let m of t.children)m.size&&(X.debug(`abc95 Setting size of children of ${t.id} id=${m.id} ${i} ${a} ${JSON.stringify(m.size)}`),m.size.width=i*(m.widthInColumns??1)+Ti*((m.widthInColumns??1)-1),m.size.height=a,m.size.x=0,m.size.y=0,X.debug(`abc95 updating size of ${t.id} children child:${m.id} maxWidth:${i} maxHeight:${a}`));for(let m of t.children)xz(m,e,i,a);let l=t.columns??-1,u=0;for(let m of t.children)u+=m.widthInColumns??1;let h=t.children.length;l>0&&l0?Math.min(t.children.length,l):t.children.length;if(m>0){let g=(d-m*Ti-Ti)/m;X.debug("abc95 (growing to fit) width",t.id,d,t.size?.width,g);for(let y of t.children)y.size&&(y.size.width=g)}}t.size={width:d,height:p,x:0,y:0}}X.debug("setBlockSizes abc94 (done)",t.id,t?.size?.x,t?.size?.width,t?.size?.y,t?.size?.height)}function Obe(t,e){X.debug(`abc85 layout blocks (=>layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`);let r=t.columns??-1;if(X.debug("layoutBlocks columns abc95",t.id,"=>",r,t),t.children&&t.children.length>0){let n=t?.children[0]?.size?.width??0,i=t.children.length*n+(t.children.length-1)*Ti;X.debug("widthOfChildren 88",i,"posX");let a=0;X.debug("abc91 block?.size?.x",t.id,t?.size?.x);let s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-Ti,l=0;for(let u of t.children){let h=t;if(!u.size)continue;let{width:f,height:d}=u.size,{px:p,py:m}=znt(r,a);if(m!=l&&(l=m,s=t?.size?.x?t?.size?.x+(-t?.size?.width/2||0):-Ti,X.debug("New row in layout for block",t.id," and child ",u.id,l)),X.debug(`abc89 layout blocks (child) id: ${u.id} Pos: ${a} (px, py) ${p},${m} (${h?.size?.x},${h?.size?.y}) parent: ${h.id} width: ${f}${Ti}`),h.size){let y=f/2;u.size.x=s+Ti+y,X.debug(`abc91 layout blocks (calc) px, pyid:${u.id} startingPos=X${s} new startingPosX${u.size.x} ${y} padding=${Ti} width=${f} halfWidth=${y} => x:${u.size.x} y:${u.size.y} ${u.widthInColumns} (width * (child?.w || 1)) / 2 ${f*(u?.widthInColumns??1)/2}`),s=u.size.x+y,u.size.y=h.size.y-h.size.height/2+m*(d+Ti)+d/2+Ti,X.debug(`abc88 layout blocks (calc) px, pyid:${u.id}startingPosX${s}${Ti}${y}=>x:${u.size.x}y:${u.size.y}${u.widthInColumns}(width * (child?.w || 1)) / 2${f*(u?.widthInColumns??1)/2}`)}u.children&&Obe(u,e);let g=u?.widthInColumns??1;r>0&&(g=Math.min(g,r-a%r)),a+=g,X.debug("abc88 columnsPos",u,a)}}X.debug(`layout blocks (<==layoutBlocks) ${t.id} x: ${t?.size?.x} y: ${t?.size?.y} width: ${t?.size?.width}`)}function Pbe(t,{minX:e,minY:r,maxX:n,maxY:i}={minX:0,minY:0,maxX:0,maxY:0}){if(t.size&&t.id!=="root"){let{x:a,y:s,width:l,height:u}=t.size;a-l/2n&&(n=a+l/2),s+u/2>i&&(i=s+u/2)}if(t.children)for(let a of t.children)({minX:e,minY:r,maxX:n,maxY:i}=Pbe(a,{minX:e,minY:r,maxX:n,maxY:i}));return{minX:e,minY:r,maxX:n,maxY:i}}function Bbe(t){let e=t.getBlock("root");if(!e)return;xz(e,t,0,0),Obe(e,t),X.debug("getBlocks",JSON.stringify(e,null,2));let{minX:r,minY:n,maxX:i,maxY:a}=Pbe(e),s=a-n,l=i-r;return{x:r,y:n,width:l,height:s}}var Ti,Gnt,Fbe=M(()=>{"use strict";pt();Xt();Ti=ge()?.block?.padding??8;o(znt,"calculateBlockPosition");Gnt=o(t=>{let e=0,r=0;for(let n of t.children){let{width:i,height:a,x:s,y:l}=n.size??{width:0,height:0,x:0,y:0};X.debug("getMaxChildSize abc95 child:",n.id,"width:",i,"height:",a,"x:",s,"y:",l,n.type),n.type!=="space"&&(i>e&&(e=i/(t.widthInColumns??1)),a>r&&(r=a))}return{width:e,height:r}},"getMaxChildSize");o(xz,"setBlockSizes");o(Obe,"layoutBlocks");o(Pbe,"findBounds");o(Bbe,"layout")});function $be(t,e){e&&t.attr("style",e)}function Vnt(t,e){let r=qe(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),n=r.append("xhtml:div"),i=t.label,a=t.isNode?"nodeLabel":"edgeLabel",s=n.append("span");return s.html(sr(i,e)),$be(s,t.labelStyle),s.attr("class",a),$be(n,t.labelStyle),n.style("display","inline-block"),n.style("white-space","nowrap"),n.attr("xmlns","http://www.w3.org/1999/xhtml"),r.node()}var Unt,ks,RC=M(()=>{"use strict";yr();Xt();gr();pt();zo();tr();o($be,"applyStyle");o(Vnt,"addHtmlLabel");Unt=o(async(t,e,r,n)=>{let i=t||"";typeof i=="object"&&(i=i[0]);let a=ge();if(vr(a.flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"
    "),X.debug("vertexText"+i);let s=await k9(Ji(i)),l={isNode:n,label:s,labelStyle:e.replace("fill:","color:")};return Vnt(l,a)}else{let s=document.createElementNS("http://www.w3.org/2000/svg","text");s.setAttribute("style",e.replace("color:","fill:"));let l=[];typeof i=="string"?l=i.split(/\\n|\n|/gi):Array.isArray(i)?l=i:l=[];for(let u of l){let h=document.createElementNS("http://www.w3.org/2000/svg","tspan");h.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),h.setAttribute("dy","1em"),h.setAttribute("x","0"),r?h.setAttribute("class","title-row"):h.setAttribute("class","row"),h.textContent=u.trim(),s.appendChild(h)}return s}},"createLabel"),ks=Unt});var Gbe,Hnt,zbe,Vbe=M(()=>{"use strict";pt();Gbe=o((t,e,r,n,i)=>{e.arrowTypeStart&&zbe(t,"start",e.arrowTypeStart,r,n,i),e.arrowTypeEnd&&zbe(t,"end",e.arrowTypeEnd,r,n,i)},"addEdgeMarkers"),Hnt={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},zbe=o((t,e,r,n,i,a)=>{let s=Hnt[r];if(!s){X.warn(`Unknown arrow type: ${r}`);return}let l=e==="start"?"Start":"End";t.attr(`marker-${e}`,`url(${n}#${i}_${a}-${s}${l})`)},"addEdgeMarker")});function NC(t,e){ge().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}var bz,Ya,Hbe,qbe,qnt,Wnt,Ube,Wbe,Ybe=M(()=>{"use strict";pt();RC();zo();yr();Xt();tr();gr();X9();P2();Vbe();bz={},Ya={},Hbe=o(async(t,e)=>{let r=ge(),n=vr(r.flowchart.htmlLabels),i=e.labelType==="markdown"?di(t,e.label,{style:e.labelStyle,useHtmlLabels:n,addSvgBackground:!0},r):await ks(e.label,e.labelStyle),a=t.insert("g").attr("class","edgeLabel"),s=a.insert("g").attr("class","label");s.node().appendChild(i);let l=i.getBBox();if(n){let h=i.children[0],f=qe(i);l=h.getBoundingClientRect(),f.attr("width",l.width),f.attr("height",l.height)}s.attr("transform","translate("+-l.width/2+", "+-l.height/2+")"),bz[e.id]=a,e.width=l.width,e.height=l.height;let u;if(e.startLabelLeft){let h=await ks(e.startLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),Ya[e.id]||(Ya[e.id]={}),Ya[e.id].startLeft=f,NC(u,e.startLabelLeft)}if(e.startLabelRight){let h=await ks(e.startLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=f.node().appendChild(h),d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),Ya[e.id]||(Ya[e.id]={}),Ya[e.id].startRight=f,NC(u,e.startLabelRight)}if(e.endLabelLeft){let h=await ks(e.endLabelLeft,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),Ya[e.id]||(Ya[e.id]={}),Ya[e.id].endLeft=f,NC(u,e.endLabelLeft)}if(e.endLabelRight){let h=await ks(e.endLabelRight,e.labelStyle),f=t.insert("g").attr("class","edgeTerminals"),d=f.insert("g").attr("class","inner");u=d.node().appendChild(h);let p=h.getBBox();d.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),f.node().appendChild(h),Ya[e.id]||(Ya[e.id]={}),Ya[e.id].endRight=f,NC(u,e.endLabelRight)}return i},"insertEdgeLabel");o(NC,"setTerminalWidth");qbe=o((t,e)=>{X.debug("Moving label abc88 ",t.id,t.label,bz[t.id],e);let r=e.updatedPath?e.updatedPath:e.originalPath,n=ge(),{subGraphTitleTotalMargin:i}=Pu(n);if(t.label){let a=bz[t.id],s=t.x,l=t.y;if(r){let u=qt.calcLabelPosition(r);X.debug("Moving label "+t.label+" from (",s,",",l,") to (",u.x,",",u.y,") abc88"),e.updatedPath&&(s=u.x,l=u.y)}a.attr("transform",`translate(${s}, ${l+i/2})`)}if(t.startLabelLeft){let a=Ya[t.id].startLeft,s=t.x,l=t.y;if(r){let u=qt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.startLabelRight){let a=Ya[t.id].startRight,s=t.x,l=t.y;if(r){let u=qt.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelLeft){let a=Ya[t.id].endLeft,s=t.x,l=t.y;if(r){let u=qt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}if(t.endLabelRight){let a=Ya[t.id].endRight,s=t.x,l=t.y;if(r){let u=qt.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);s=u.x,l=u.y}a.attr("transform",`translate(${s}, ${l})`)}},"positionEdgeLabel"),qnt=o((t,e)=>{let r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,l=t.height/2;return i>=s||a>=l},"outsideNode"),Wnt=o((t,e,r)=>{X.debug(`intersection calc abc89: + outsidePoint: ${JSON.stringify(e)} + insidePoint : ${JSON.stringify(r)} + node : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);let n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2,l=r.xMath.abs(n-e.x)*u){let d=r.y{X.debug("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(!qnt(e,a)&&!i){let s=Wnt(e,n,a),l=!1;r.forEach(u=>{l=l||u.x===s.x&&u.y===s.y}),r.some(u=>u.x===s.x&&u.y===s.y)||r.push(s),i=!0}else n=a,i||r.push(a)}),r},"cutPathAtIntersect"),Wbe=o(function(t,e,r,n,i,a,s){let l=r.points;X.debug("abc88 InsertEdge: edge=",r,"e=",e);let u=!1,h=a.node(e.v);var f=a.node(e.w);f?.intersect&&h?.intersect&&(l=l.slice(1,r.points.length-1),l.unshift(h.intersect(l[0])),l.push(f.intersect(l[l.length-1]))),r.toCluster&&(X.debug("to cluster abc88",n[r.toCluster]),l=Ube(r.points,n[r.toCluster].node),u=!0),r.fromCluster&&(X.debug("from cluster abc88",n[r.fromCluster]),l=Ube(l.reverse(),n[r.fromCluster].node).reverse(),u=!0);let d=l.filter(S=>!Number.isNaN(S.y)),p=No;r.curve&&(i==="graph"||i==="flowchart")&&(p=r.curve);let{x:m,y:g}=fw(r),y=Cl().x(m).y(g).curve(p),v;switch(r.thickness){case"normal":v="edge-thickness-normal";break;case"thick":v="edge-thickness-thick";break;case"invisible":v="edge-thickness-thick";break;default:v=""}switch(r.pattern){case"solid":v+=" edge-pattern-solid";break;case"dotted":v+=" edge-pattern-dotted";break;case"dashed":v+=" edge-pattern-dashed";break}let x=t.append("path").attr("d",y(d)).attr("id",r.id).attr("class"," "+v+(r.classes?" "+r.classes:"")).attr("style",r.style),b="";(ge().flowchart.arrowMarkerAbsolute||ge().state.arrowMarkerAbsolute)&&(b=md(!0)),Gbe(x,r,b,s,i);let T={};return u&&(T.updatedPath=l),T.originalPath=r.points,T},"insertEdge")});var Ynt,Xbe,jbe=M(()=>{"use strict";Ynt=o(t=>{let e=new Set;for(let r of t)switch(r){case"x":e.add("right"),e.add("left");break;case"y":e.add("up"),e.add("down");break;default:e.add(r);break}return e},"expandAndDeduplicateDirections"),Xbe=o((t,e,r)=>{let n=Ynt(t),i=2,a=e.height+2*r.padding,s=a/i,l=e.width+2*s+r.padding,u=r.padding/2;return n.has("right")&&n.has("left")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:s,y:0},{x:l/2,y:2*u},{x:l-s,y:0},{x:l,y:0},{x:l,y:-a/3},{x:l+2*u,y:-a/2},{x:l,y:-2*a/3},{x:l,y:-a},{x:l-s,y:-a},{x:l/2,y:-a-2*u},{x:s,y:-a},{x:0,y:-a},{x:0,y:-2*a/3},{x:-2*u,y:-a/2},{x:0,y:-a/3}]:n.has("right")&&n.has("left")&&n.has("up")?[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}]:n.has("right")&&n.has("left")&&n.has("down")?[{x:0,y:0},{x:s,y:-a},{x:l-s,y:-a},{x:l,y:0}]:n.has("right")&&n.has("up")&&n.has("down")?[{x:0,y:0},{x:l,y:-s},{x:l,y:-a+s},{x:0,y:-a}]:n.has("left")&&n.has("up")&&n.has("down")?[{x:l,y:0},{x:0,y:-s},{x:0,y:-a+s},{x:l,y:-a}]:n.has("right")&&n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")&&n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:n.has("right")&&n.has("up")?[{x:0,y:0},{x:l,y:-s},{x:0,y:-a}]:n.has("right")&&n.has("down")?[{x:0,y:0},{x:l,y:0},{x:0,y:-a}]:n.has("left")&&n.has("up")?[{x:l,y:0},{x:0,y:-s},{x:l,y:-a}]:n.has("left")&&n.has("down")?[{x:l,y:0},{x:0,y:0},{x:l,y:-a}]:n.has("right")?[{x:s,y:-u},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a+u}]:n.has("left")?[{x:s,y:0},{x:s,y:-u},{x:l-s,y:-u},{x:l-s,y:-a+u},{x:s,y:-a+u},{x:s,y:-a},{x:0,y:-a/2}]:n.has("up")?[{x:s,y:-u},{x:s,y:-a+u},{x:0,y:-a+u},{x:l/2,y:-a},{x:l,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u}]:n.has("down")?[{x:l/2,y:0},{x:0,y:-u},{x:s,y:-u},{x:s,y:-a+u},{x:l-s,y:-a+u},{x:l-s,y:-u},{x:l,y:-u}]:[{x:0,y:0}]},"getArrowPoints")});function Xnt(t,e){return t.intersect(e)}var Kbe,Qbe=M(()=>{"use strict";o(Xnt,"intersectNode");Kbe=Xnt});function jnt(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,l=a-n.y,u=Math.sqrt(e*e*l*l+r*r*s*s),h=Math.abs(e*r*s/u);n.x{"use strict";o(jnt,"intersectEllipse");MC=jnt});function Knt(t,e,r){return MC(t,e,e,r)}var Zbe,Jbe=M(()=>{"use strict";Tz();o(Knt,"intersectCircle");Zbe=Knt});function Qnt(t,e,r,n){var i,a,s,l,u,h,f,d,p,m,g,y,v,x,b;if(i=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,p=i*r.x+s*r.y+u,m=i*n.x+s*n.y+u,!(p!==0&&m!==0&&e4e(p,m))&&(a=n.y-r.y,l=r.x-n.x,h=n.x*r.y-r.x*n.y,f=a*t.x+l*t.y+h,d=a*e.x+l*e.y+h,!(f!==0&&d!==0&&e4e(f,d))&&(g=i*l-a*s,g!==0)))return y=Math.abs(g/2),v=s*h-l*u,x=v<0?(v-y)/g:(v+y)/g,v=a*u-i*h,b=v<0?(v-y)/g:(v+y)/g,{x,y:b}}function e4e(t,e){return t*e>0}var t4e,r4e=M(()=>{"use strict";o(Qnt,"intersectLine");o(e4e,"sameSign");t4e=Qnt});function Znt(t,e,r){var n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,l=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(g){s=Math.min(s,g.x),l=Math.min(l,g.y)}):(s=Math.min(s,e.x),l=Math.min(l,e.y));for(var u=n-t.width/2-s,h=i-t.height/2-l,f=0;f1&&a.sort(function(g,y){var v=g.x-r.x,x=g.y-r.y,b=Math.sqrt(v*v+x*x),T=y.x-r.x,S=y.y-r.y,w=Math.sqrt(T*T+S*S);return b{"use strict";r4e();n4e=Znt;o(Znt,"intersectPolygon")});var Jnt,a4e,s4e=M(()=>{"use strict";Jnt=o((t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,l=t.height/2,u,h;return Math.abs(a)*s>Math.abs(i)*l?(a<0&&(l=-l),u=a===0?0:l*i/a,h=l):(i<0&&(s=-s),u=s,h=i===0?0:s*a/i),{x:r+u,y:n+h}},"intersectRect"),a4e=Jnt});var $n,wz=M(()=>{"use strict";Qbe();Jbe();Tz();i4e();s4e();$n={node:Kbe,circle:Zbe,ellipse:MC,polygon:n4e,rect:a4e}});function Wl(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}var Li,ti,kz=M(()=>{"use strict";RC();zo();Xt();yr();gr();tr();Li=o(async(t,e,r,n)=>{let i=ge(),a,s=e.useHtmlLabels||vr(i.flowchart.htmlLabels);r?a=r:a="node default";let l=t.insert("g").attr("class",a).attr("id",e.domId||e.id),u=l.insert("g").attr("class","label").attr("style",e.labelStyle),h;e.labelText===void 0?h="":h=typeof e.labelText=="string"?e.labelText:e.labelText[0];let f=u.node(),d;e.labelType==="markdown"?d=di(u,sr(Ji(h),i),{useHtmlLabels:s,width:e.width||i.flowchart.wrappingWidth,classes:"markdown-node-label"},i):d=f.appendChild(await ks(sr(Ji(h),i),e.labelStyle,!1,n));let p=d.getBBox(),m=e.padding/2;if(vr(i.flowchart.htmlLabels)){let g=d.children[0],y=qe(d),v=g.getElementsByTagName("img");if(v){let x=h.replace(/]*>/g,"").trim()==="";await Promise.all([...v].map(b=>new Promise(T=>{function S(){if(b.style.display="flex",b.style.flexDirection="column",x){let w=i.fontSize?i.fontSize:window.getComputedStyle(document.body).fontSize,C=parseInt(w,10)*5+"px";b.style.minWidth=C,b.style.maxWidth=C}else b.style.width="100%";T(b)}o(S,"setupImage"),setTimeout(()=>{b.complete&&S()}),b.addEventListener("error",S),b.addEventListener("load",S)})))}p=g.getBoundingClientRect(),y.attr("width",p.width),y.attr("height",p.height)}return s?u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"):u.attr("transform","translate(0, "+-p.height/2+")"),e.centerLabel&&u.attr("transform","translate("+-p.width/2+", "+-p.height/2+")"),u.insert("rect",":first-child"),{shapeSvg:l,bbox:p,halfPadding:m,label:u}},"labelHelper"),ti=o((t,e)=>{let r=e.node().getBBox();t.width=r.width,t.height=r.height},"updateNodeBounds");o(Wl,"insertPolygonShape")});var eit,o4e,l4e=M(()=>{"use strict";kz();pt();Xt();wz();eit=o(async(t,e)=>{e.useHtmlLabels||ge().flowchart.htmlLabels||(e.centerLabel=!0);let{shapeSvg:n,bbox:i,halfPadding:a}=await Li(t,e,"node "+e.classes,!0);X.info("Classes = ",e.classes);let s=n.insert("rect",":first-child");return s.attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),ti(e,s),e.intersect=function(l){return $n.rect(e,l)},n},"note"),o4e=eit});function Ez(t,e,r,n){let i=[],a=o(l=>{i.push(l,0)},"addBorder"),s=o(l=>{i.push(0,l)},"skipBorder");e.includes("t")?(X.debug("add top border"),a(r)):s(r),e.includes("r")?(X.debug("add right border"),a(n)):s(n),e.includes("b")?(X.debug("add bottom border"),a(r)):s(r),e.includes("l")?(X.debug("add left border"),a(n)):s(n),t.attr("stroke-dasharray",i.join(" "))}var c4e,To,u4e,tit,rit,nit,iit,ait,sit,oit,lit,cit,uit,hit,fit,dit,pit,mit,git,yit,vit,xit,h4e,bit,Tit,f4e,IC,Sz,d4e,p4e=M(()=>{"use strict";yr();Xt();gr();pt();jbe();RC();wz();l4e();kz();c4e=o(t=>t?" "+t:"","formatClass"),To=o((t,e)=>`${e||"node default"}${c4e(t.classes)} ${c4e(t.class)}`,"getClassesFromNode"),u4e=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,To(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=i+a,l=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];X.info("Question main (Circle)");let u=Wl(r,s,s,l);return u.attr("style",e.style),ti(e,u),e.intersect=function(h){return X.warn("Intersect called"),$n.polygon(e,l,h)},r},"question"),tit=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=28,i=[{x:0,y:n/2},{x:n/2,y:0},{x:0,y:-n/2},{x:-n/2,y:0}];return r.insert("polygon",":first-child").attr("points",i.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(s){return $n.circle(e,14,s)},r},"choice"),rit=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,To(e,void 0),!0),i=4,a=n.height+e.padding,s=a/i,l=n.width+2*s+e.padding,u=[{x:s,y:0},{x:l-s,y:0},{x:l,y:-a/2},{x:l-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}],h=Wl(r,l,a,u);return h.attr("style",e.style),ti(e,h),e.intersect=function(f){return $n.polygon(e,u,f)},r},"hexagon"),nit=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,void 0,!0),i=2,a=n.height+2*e.padding,s=a/i,l=n.width+2*s+e.padding,u=Xbe(e.directions,n,e),h=Wl(r,l,a,u);return h.attr("style",e.style),ti(e,h),e.intersect=function(f){return $n.polygon(e,u,f)},r},"block_arrow"),iit=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,To(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-a/2,y:0},{x:i,y:0},{x:i,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}];return Wl(r,i,a,s).attr("style",e.style),e.width=i+a,e.height=a,e.intersect=function(u){return $n.polygon(e,s,u)},r},"rect_left_inv_arrow"),ait=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,To(e),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:a/6,y:-a}],l=Wl(r,i,a,s);return l.attr("style",e.style),ti(e,l),e.intersect=function(u){return $n.polygon(e,s,u)},r},"lean_right"),sit=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,To(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:2*a/6,y:0},{x:i+a/6,y:0},{x:i-2*a/6,y:-a},{x:-a/6,y:-a}],l=Wl(r,i,a,s);return l.attr("style",e.style),ti(e,l),e.intersect=function(u){return $n.polygon(e,s,u)},r},"lean_left"),oit=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,To(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i+2*a/6,y:0},{x:i-a/6,y:-a},{x:a/6,y:-a}],l=Wl(r,i,a,s);return l.attr("style",e.style),ti(e,l),e.intersect=function(u){return $n.polygon(e,s,u)},r},"trapezoid"),lit=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,To(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:-2*a/6,y:-a}],l=Wl(r,i,a,s);return l.attr("style",e.style),ti(e,l),e.intersect=function(u){return $n.polygon(e,s,u)},r},"inv_trapezoid"),cit=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,To(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i+a/2,y:0},{x:i,y:-a/2},{x:i+a/2,y:-a},{x:0,y:-a}],l=Wl(r,i,a,s);return l.attr("style",e.style),ti(e,l),e.intersect=function(u){return $n.polygon(e,s,u)},r},"rect_right_inv_arrow"),uit=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,To(e,void 0),!0),i=n.width+e.padding,a=i/2,s=a/(2.5+i/50),l=n.height+s+e.padding,u="M 0,"+s+" a "+a+","+s+" 0,0,0 "+i+" 0 a "+a+","+s+" 0,0,0 "+-i+" 0 l 0,"+l+" a "+a+","+s+" 0,0,0 "+i+" 0 l 0,"+-l,h=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",u).attr("transform","translate("+-i/2+","+-(l/2+s)+")");return ti(e,h),e.intersect=function(f){let d=$n.rect(e,f),p=d.x-e.x;if(a!=0&&(Math.abs(p)e.height/2-s)){let m=s*s*(1-p*p/(a*a));m!=0&&(m=Math.sqrt(m)),m=s-m,f.y-e.y>0&&(m=-m),d.y+=m}return d},r},"cylinder"),hit=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Li(t,e,"node "+e.classes+" "+e.class,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(Ez(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{X.warn(`Unknown node property ${d}`)})}return ti(e,a),e.intersect=function(f){return $n.rect(e,f)},r},"rect"),fit=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Li(t,e,"node "+e.classes,!0),a=r.insert("rect",":first-child"),s=e.positioned?e.width:n.width+e.padding,l=e.positioned?e.height:n.height+e.padding,u=e.positioned?-s/2:-n.width/2-i,h=e.positioned?-l/2:-n.height/2-i;if(a.attr("class","basic cluster composite label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",u).attr("y",h).attr("width",s).attr("height",l),e.props){let f=new Set(Object.keys(e.props));e.props.borders&&(Ez(a,e.props.borders,s,l),f.delete("borders")),f.forEach(d=>{X.warn(`Unknown node property ${d}`)})}return ti(e,a),e.intersect=function(f){return $n.rect(e,f)},r},"composite"),dit=o(async(t,e)=>{let{shapeSvg:r}=await Li(t,e,"label",!0);X.trace("Classes = ",e.class);let n=r.insert("rect",":first-child"),i=0,a=0;if(n.attr("width",i).attr("height",a),r.attr("class","label edgeLabel"),e.props){let s=new Set(Object.keys(e.props));e.props.borders&&(Ez(n,e.props.borders,i,a),s.delete("borders")),s.forEach(l=>{X.warn(`Unknown node property ${l}`)})}return ti(e,n),e.intersect=function(s){return $n.rect(e,s)},r},"labelRect");o(Ez,"applyNodePropertyBorders");pit=o(async(t,e)=>{let r;e.classes?r="node "+e.classes:r="node default";let n=t.insert("g").attr("class",r).attr("id",e.domId||e.id),i=n.insert("rect",":first-child"),a=n.insert("line"),s=n.insert("g").attr("class","label"),l=e.labelText.flat?e.labelText.flat():e.labelText,u="";typeof l=="object"?u=l[0]:u=l,X.info("Label text abc79",u,l,typeof l=="object");let h=s.node().appendChild(await ks(u,e.labelStyle,!0,!0)),f={width:0,height:0};if(vr(ge().flowchart.htmlLabels)){let y=h.children[0],v=qe(h);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}X.info("Text 2",l);let d=l.slice(1,l.length),p=h.getBBox(),m=s.node().appendChild(await ks(d.join?d.join("
    "):d,e.labelStyle,!0,!0));if(vr(ge().flowchart.htmlLabels)){let y=m.children[0],v=qe(m);f=y.getBoundingClientRect(),v.attr("width",f.width),v.attr("height",f.height)}let g=e.padding/2;return qe(m).attr("transform","translate( "+(f.width>p.width?0:(p.width-f.width)/2)+", "+(p.height+g+5)+")"),qe(h).attr("transform","translate( "+(f.width{let{shapeSvg:r,bbox:n}=await Li(t,e,To(e,void 0),!0),i=n.height+e.padding,a=n.width+i/4+e.padding,s=r.insert("rect",":first-child").attr("style",e.style).attr("rx",i/2).attr("ry",i/2).attr("x",-a/2).attr("y",-i/2).attr("width",a).attr("height",i);return ti(e,s),e.intersect=function(l){return $n.rect(e,l)},r},"stadium"),git=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Li(t,e,To(e,void 0),!0),a=r.insert("circle",":first-child");return a.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),X.info("Circle main"),ti(e,a),e.intersect=function(s){return X.info("Circle intersect",e,n.width/2+i,s),$n.circle(e,n.width/2+i,s)},r},"circle"),yit=o(async(t,e)=>{let{shapeSvg:r,bbox:n,halfPadding:i}=await Li(t,e,To(e,void 0),!0),a=5,s=r.insert("g",":first-child"),l=s.insert("circle"),u=s.insert("circle");return s.attr("class",e.class),l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i+a).attr("width",n.width+e.padding+a*2).attr("height",n.height+e.padding+a*2),u.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),X.info("DoubleCircle main"),ti(e,l),e.intersect=function(h){return X.info("DoubleCircle intersect",e,n.width/2+i+a,h),$n.circle(e,n.width/2+i+a,h)},r},"doublecircle"),vit=o(async(t,e)=>{let{shapeSvg:r,bbox:n}=await Li(t,e,To(e,void 0),!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i,y:0},{x:i,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:i+8,y:0},{x:i+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],l=Wl(r,i,a,s);return l.attr("style",e.style),ti(e,l),e.intersect=function(u){return $n.polygon(e,s,u)},r},"subroutine"),xit=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),ti(e,n),e.intersect=function(i){return $n.circle(e,7,i)},r},"start"),h4e=o((t,e,r)=>{let n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=70,a=10;r==="LR"&&(i=10,a=70);let s=n.append("rect").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return ti(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(l){return $n.rect(e,l)},n},"forkJoin"),bit=o((t,e)=>{let r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child"),i=r.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),n.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),ti(e,i),e.intersect=function(a){return $n.circle(e,7,a)},r},"end"),Tit=o(async(t,e)=>{let r=e.padding/2,n=4,i=8,a;e.classes?a="node "+e.classes:a="node default";let s=t.insert("g").attr("class",a).attr("id",e.domId||e.id),l=s.insert("rect",":first-child"),u=s.insert("line"),h=s.insert("line"),f=0,d=n,p=s.insert("g").attr("class","label"),m=0,g=e.classData.annotations?.[0],y=e.classData.annotations[0]?"\xAB"+e.classData.annotations[0]+"\xBB":"",v=p.node().appendChild(await ks(y,e.labelStyle,!0,!0)),x=v.getBBox();if(vr(ge().flowchart.htmlLabels)){let A=v.children[0],L=qe(v);x=A.getBoundingClientRect(),L.attr("width",x.width),L.attr("height",x.height)}e.classData.annotations[0]&&(d+=x.height+n,f+=x.width);let b=e.classData.label;e.classData.type!==void 0&&e.classData.type!==""&&(ge().flowchart.htmlLabels?b+="<"+e.classData.type+">":b+="<"+e.classData.type+">");let T=p.node().appendChild(await ks(b,e.labelStyle,!0,!0));qe(T).attr("class","classTitle");let S=T.getBBox();if(vr(ge().flowchart.htmlLabels)){let A=T.children[0],L=qe(T);S=A.getBoundingClientRect(),L.attr("width",S.width),L.attr("height",S.height)}d+=S.height+n,S.width>f&&(f=S.width);let w=[];e.classData.members.forEach(async A=>{let L=A.getDisplayDetails(),I=L.displayText;ge().flowchart.htmlLabels&&(I=I.replace(//g,">"));let R=p.node().appendChild(await ks(I,L.cssStyle?L.cssStyle:e.labelStyle,!0,!0)),E=R.getBBox();if(vr(ge().flowchart.htmlLabels)){let _=R.children[0],D=qe(R);E=_.getBoundingClientRect(),D.attr("width",E.width),D.attr("height",E.height)}E.width>f&&(f=E.width),d+=E.height+n,w.push(R)}),d+=i;let k=[];if(e.classData.methods.forEach(async A=>{let L=A.getDisplayDetails(),I=L.displayText;ge().flowchart.htmlLabels&&(I=I.replace(//g,">"));let R=p.node().appendChild(await ks(I,L.cssStyle?L.cssStyle:e.labelStyle,!0,!0)),E=R.getBBox();if(vr(ge().flowchart.htmlLabels)){let _=R.children[0],D=qe(R);E=_.getBoundingClientRect(),D.attr("width",E.width),D.attr("height",E.height)}E.width>f&&(f=E.width),d+=E.height+n,k.push(R)}),d+=i,g){let A=(f-x.width)/2;qe(v).attr("transform","translate( "+(-1*f/2+A)+", "+-1*d/2+")"),m=x.height+n}let C=(f-S.width)/2;return qe(T).attr("transform","translate( "+(-1*f/2+C)+", "+(-1*d/2+m)+")"),m+=S.height+n,u.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,w.forEach(A=>{qe(A).attr("transform","translate( "+-f/2+", "+(-1*d/2+m+i/2)+")");let L=A?.getBBox();m+=(L?.height??0)+n}),m+=i,h.attr("class","divider").attr("x1",-f/2-r).attr("x2",f/2+r).attr("y1",-d/2-r+i+m).attr("y2",-d/2-r+i+m),m+=i,k.forEach(A=>{qe(A).attr("transform","translate( "+-f/2+", "+(-1*d/2+m)+")");let L=A?.getBBox();m+=(L?.height??0)+n}),l.attr("style",e.style).attr("class","outer title-state").attr("x",-f/2-r).attr("y",-(d/2)-r).attr("width",f+e.padding).attr("height",d+e.padding),ti(e,l),e.intersect=function(A){return $n.rect(e,A)},s},"class_box"),f4e={rhombus:u4e,composite:fit,question:u4e,rect:hit,labelRect:dit,rectWithTitle:pit,choice:tit,circle:git,doublecircle:yit,stadium:mit,hexagon:rit,block_arrow:nit,rect_left_inv_arrow:iit,lean_right:ait,lean_left:sit,trapezoid:oit,inv_trapezoid:lit,rect_right_inv_arrow:cit,cylinder:uit,start:xit,end:bit,note:o4e,subroutine:vit,fork:h4e,join:h4e,class_box:Tit},IC={},Sz=o(async(t,e,r)=>{let n,i;if(e.link){let a;ge().securityLevel==="sandbox"?a="_top":e.linkTarget&&(a=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",a),i=await f4e[e.shape](n,e,r)}else i=await f4e[e.shape](t,e,r),n=i;return e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),IC[e.id]=n,e.haveCallback&&IC[e.id].attr("class",IC[e.id].attr("class")+" clickable"),n},"insertNode"),d4e=o(t=>{let e=IC[t.id];X.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");let r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},"positionNode")});function m4e(t,e,r=!1){let n=t,i="default";(n?.classes?.length||0)>0&&(i=(n?.classes??[]).join(" ")),i=i+" flowchart-label";let a=0,s="",l;switch(n.type){case"round":a=5,s="rect";break;case"composite":a=0,s="composite",l=0;break;case"square":s="rect";break;case"diamond":s="question";break;case"hexagon":s="hexagon";break;case"block_arrow":s="block_arrow";break;case"odd":s="rect_left_inv_arrow";break;case"lean_right":s="lean_right";break;case"lean_left":s="lean_left";break;case"trapezoid":s="trapezoid";break;case"inv_trapezoid":s="inv_trapezoid";break;case"rect_left_inv_arrow":s="rect_left_inv_arrow";break;case"circle":s="circle";break;case"ellipse":s="ellipse";break;case"stadium":s="stadium";break;case"subroutine":s="subroutine";break;case"cylinder":s="cylinder";break;case"group":s="rect";break;case"doublecircle":s="doublecircle";break;default:s="rect"}let u=zL(n?.styles??[]),h=n.label,f=n.size??{width:0,height:0,x:0,y:0};return{labelStyle:u.labelStyle,shape:s,labelText:h,rx:a,ry:a,class:i,style:u.style,id:n.id,directions:n.directions,width:f.width,height:f.height,x:f.x,y:f.y,positioned:r,intersect:void 0,type:n.type,padding:l??Qt()?.block?.padding??0}}async function wit(t,e,r){let n=m4e(e,r,!1);if(n.type==="group")return;let i=Qt(),a=await Sz(t,n,{config:i}),s=a.node().getBBox(),l=r.getBlock(n.id);l.size={width:s.width,height:s.height,x:0,y:0,node:a},r.setBlock(l),a.remove()}async function kit(t,e,r){let n=m4e(e,r,!0);if(r.getBlock(n.id).type!=="space"){let a=Qt();await Sz(t,n,{config:a}),e.intersect=n?.intersect,d4e(n)}}async function Cz(t,e,r,n){for(let i of e)await n(t,i,r),i.children&&await Cz(t,i.children,r,n)}async function g4e(t,e,r){await Cz(t,e,r,wit)}async function y4e(t,e,r){await Cz(t,e,r,kit)}async function v4e(t,e,r,n,i){let a=new cn({multigraph:!0,compound:!0});a.setGraph({rankdir:"TB",nodesep:10,ranksep:10,marginx:8,marginy:8});for(let s of r)s.size&&a.setNode(s.id,{width:s.size.width,height:s.size.height,intersect:s.intersect});for(let s of e)if(s.start&&s.end){let l=n.getBlock(s.start),u=n.getBlock(s.end);if(l?.size&&u?.size){let h=l.size,f=u.size,d=[{x:h.x,y:h.y},{x:h.x+(f.x-h.x)/2,y:h.y+(f.y-h.y)/2},{x:f.x,y:f.y}];Wbe(t,{v:s.start,w:s.end,name:s.id},{...s,arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"},void 0,"block",a,i),s.label&&(await Hbe(t,{...s,label:s.label,labelStyle:"stroke: #333; stroke-width: 1.5px;fill:none;",arrowTypeEnd:s.arrowTypeEnd,arrowTypeStart:s.arrowTypeStart,points:d,classes:"edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"}),qbe({...s,x:d[1].x,y:d[1].y},{originalPath:d}))}}}var x4e=M(()=>{"use strict";qo();qn();Ybe();p4e();tr();o(m4e,"getNodeFromBlock");o(wit,"calculateBlockSize");o(kit,"insertBlockPositioned");o(Cz,"performOperations");o(g4e,"calculateBlockSizes");o(y4e,"insertBlocks");o(v4e,"insertEdges")});var Eit,Sit,b4e,T4e=M(()=>{"use strict";yr();qn();Ibe();pt();Ei();Fbe();x4e();Eit=o(function(t,e){return e.db.getClasses()},"getClasses"),Sit=o(async function(t,e,r,n){let{securityLevel:i,block:a}=Qt(),s=n.db,l;i==="sandbox"&&(l=qe("#i"+e));let u=i==="sandbox"?qe(l.nodes()[0].contentDocument.body):qe("body"),h=i==="sandbox"?u.select(`[id="${e}"]`):qe(`[id="${e}"]`);Mbe(h,["point","circle","cross"],n.type,e);let d=s.getBlocks(),p=s.getBlocksFlat(),m=s.getEdges(),g=h.insert("g").attr("class","block");await g4e(g,d,s);let y=Bbe(s);if(await y4e(g,d,s),await v4e(g,m,p,s,e),y){let v=y,x=Math.max(1,Math.round(.125*(v.width/v.height))),b=v.height+x+10,T=v.width+10,{useMaxWidth:S}=a;mn(h,b,T,!!S),X.debug("Here Bounds",y,v),h.attr("viewBox",`${v.x-5} ${v.y-5} ${v.width+10} ${v.height+10}`)}},"draw"),b4e={draw:Sit,getClasses:Eit}});var w4e={};dr(w4e,{diagram:()=>Cit});var Cit,k4e=M(()=>{"use strict";kbe();Lbe();Nbe();T4e();Cit={parser:wbe,db:Dbe,renderer:b4e,styles:Rbe}});var Az,_z,M4,C4e,Dz,Xa,nu,I4,A4e,Lit,O4,_4e,D4e,L4e,R4e,N4e,OC,td,PC=M(()=>{"use strict";Az={L:"left",R:"right",T:"top",B:"bottom"},_z={L:o(t=>`${t},${t/2} 0,${t} 0,0`,"L"),R:o(t=>`0,${t/2} ${t},0 ${t},${t}`,"R"),T:o(t=>`0,0 ${t},0 ${t/2},${t}`,"T"),B:o(t=>`${t/2},0 ${t},${t} 0,${t}`,"B")},M4={L:o((t,e)=>t-e+2,"L"),R:o((t,e)=>t-2,"R"),T:o((t,e)=>t-e+2,"T"),B:o((t,e)=>t-2,"B")},C4e=o(function(t){return Xa(t)?t==="L"?"R":"L":t==="T"?"B":"T"},"getOppositeArchitectureDirection"),Dz=o(function(t){let e=t;return e==="L"||e==="R"||e==="T"||e==="B"},"isArchitectureDirection"),Xa=o(function(t){let e=t;return e==="L"||e==="R"},"isArchitectureDirectionX"),nu=o(function(t){let e=t;return e==="T"||e==="B"},"isArchitectureDirectionY"),I4=o(function(t,e){let r=Xa(t)&&nu(e),n=nu(t)&&Xa(e);return r||n},"isArchitectureDirectionXY"),A4e=o(function(t){let e=t[0],r=t[1],n=Xa(e)&&nu(r),i=nu(e)&&Xa(r);return n||i},"isArchitecturePairXY"),Lit=o(function(t){return t!=="LL"&&t!=="RR"&&t!=="TT"&&t!=="BB"},"isValidArchitectureDirectionPair"),O4=o(function(t,e){let r=`${t}${e}`;return Lit(r)?r:void 0},"getArchitectureDirectionPair"),_4e=o(function([t,e],r){let n=r[0],i=r[1];return Xa(n)?nu(i)?[t+(n==="L"?-1:1),e+(i==="T"?1:-1)]:[t+(n==="L"?-1:1),e]:Xa(i)?[t+(i==="L"?1:-1),e+(n==="T"?1:-1)]:[t,e+(n==="T"?1:-1)]},"shiftPositionByArchitectureDirectionPair"),D4e=o(function(t){return t==="LT"||t==="TL"?[1,1]:t==="BL"||t==="LB"?[1,-1]:t==="BR"||t==="RB"?[-1,-1]:[-1,1]},"getArchitectureDirectionXYFactors"),L4e=o(function(t,e){return I4(t,e)?"bend":Xa(t)?"horizontal":"vertical"},"getArchitectureDirectionAlignment"),R4e=o(function(t){return t.type==="service"},"isArchitectureService"),N4e=o(function(t){return t.type==="junction"},"isArchitectureJunction"),OC=o(t=>t.data(),"edgeData"),td=o(t=>t.data(),"nodeData")});var Rit,xy,Lz=M(()=>{"use strict";qn();Ra();tr();ci();PC();Rit=ur.architecture,xy=class{constructor(){this.nodes={};this.groups={};this.edges=[];this.registeredIds={};this.elements={};this.setAccTitle=Rr;this.getAccTitle=Mr;this.setDiagramTitle=$r;this.getDiagramTitle=Pr;this.getAccDescription=Or;this.setAccDescription=Ir;this.clear()}static{o(this,"ArchitectureDB")}clear(){this.nodes={},this.groups={},this.edges=[],this.registeredIds={},this.dataStructures=void 0,this.elements={},Sr()}addService({id:e,icon:r,in:n,title:i,iconText:a}){if(this.registeredIds[e]!==void 0)throw new Error(`The service id [${e}] is already in use by another ${this.registeredIds[e]}`);if(n!==void 0){if(e===n)throw new Error(`The service [${e}] cannot be placed within itself`);if(this.registeredIds[n]===void 0)throw new Error(`The service [${e}]'s parent does not exist. Please make sure the parent is created before this service`);if(this.registeredIds[n]==="node")throw new Error(`The service [${e}]'s parent is not a group`)}this.registeredIds[e]="node",this.nodes[e]={id:e,type:"service",icon:r,iconText:a,title:i,edges:[],in:n}}getServices(){return Object.values(this.nodes).filter(R4e)}addJunction({id:e,in:r}){this.registeredIds[e]="node",this.nodes[e]={id:e,type:"junction",edges:[],in:r}}getJunctions(){return Object.values(this.nodes).filter(N4e)}getNodes(){return Object.values(this.nodes)}getNode(e){return this.nodes[e]??null}addGroup({id:e,icon:r,in:n,title:i}){if(this.registeredIds?.[e]!==void 0)throw new Error(`The group id [${e}] is already in use by another ${this.registeredIds[e]}`);if(n!==void 0){if(e===n)throw new Error(`The group [${e}] cannot be placed within itself`);if(this.registeredIds?.[n]===void 0)throw new Error(`The group [${e}]'s parent does not exist. Please make sure the parent is created before this group`);if(this.registeredIds?.[n]==="node")throw new Error(`The group [${e}]'s parent is not a group`)}this.registeredIds[e]="group",this.groups[e]={id:e,icon:r,title:i,in:n}}getGroups(){return Object.values(this.groups)}addEdge({lhsId:e,rhsId:r,lhsDir:n,rhsDir:i,lhsInto:a,rhsInto:s,lhsGroup:l,rhsGroup:u,title:h}){if(!Dz(n))throw new Error(`Invalid direction given for left hand side of edge ${e}--${r}. Expected (L,R,T,B) got ${String(n)}`);if(!Dz(i))throw new Error(`Invalid direction given for right hand side of edge ${e}--${r}. Expected (L,R,T,B) got ${String(i)}`);if(this.nodes[e]===void 0&&this.groups[e]===void 0)throw new Error(`The left-hand id [${e}] does not yet exist. Please create the service/group before declaring an edge to it.`);if(this.nodes[r]===void 0&&this.groups[r]===void 0)throw new Error(`The right-hand id [${r}] does not yet exist. Please create the service/group before declaring an edge to it.`);let f=this.nodes[e].in,d=this.nodes[r].in;if(l&&f&&d&&f==d)throw new Error(`The left-hand id [${e}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);if(u&&f&&d&&f==d)throw new Error(`The right-hand id [${r}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);let p={lhsId:e,lhsDir:n,lhsInto:a,lhsGroup:l,rhsId:r,rhsDir:i,rhsInto:s,rhsGroup:u,title:h};this.edges.push(p),this.nodes[e]&&this.nodes[r]&&(this.nodes[e].edges.push(this.edges[this.edges.length-1]),this.nodes[r].edges.push(this.edges[this.edges.length-1]))}getEdges(){return this.edges}getDataStructures(){if(this.dataStructures===void 0){let e={},r=Object.entries(this.nodes).reduce((u,[h,f])=>(u[h]=f.edges.reduce((d,p)=>{let m=this.getNode(p.lhsId)?.in,g=this.getNode(p.rhsId)?.in;if(m&&g&&m!==g){let y=L4e(p.lhsDir,p.rhsDir);y!=="bend"&&(e[m]??={},e[m][g]=y,e[g]??={},e[g][m]=y)}if(p.lhsId===h){let y=O4(p.lhsDir,p.rhsDir);y&&(d[y]=p.rhsId)}else{let y=O4(p.rhsDir,p.lhsDir);y&&(d[y]=p.lhsId)}return d},{}),u),{}),n=Object.keys(r)[0],i={[n]:1},a=Object.keys(r).reduce((u,h)=>h===n?u:{...u,[h]:1},{}),s=o(u=>{let h={[u]:[0,0]},f=[u];for(;f.length>0;){let d=f.shift();if(d){i[d]=1,delete a[d];let p=r[d],[m,g]=h[d];Object.entries(p).forEach(([y,v])=>{i[v]||(h[v]=_4e([m,g],y),f.push(v))})}}return h},"BFS"),l=[s(n)];for(;Object.keys(a).length>0;)l.push(s(Object.keys(a)[0]));this.dataStructures={adjList:r,spatialMaps:l,groupAlignments:e}}return this.dataStructures}setElementForId(e,r){this.elements[e]=r}getElementById(e){return this.elements[e]}getConfig(){return Vn({...Rit,...Qt().architecture})}getConfigField(e){return this.getConfig()[e]}}});var Nit,Rz,M4e=M(()=>{"use strict";Uf();pt();r0();Lz();Nit=o((t,e)=>{nl(t,e),t.groups.map(r=>e.addGroup(r)),t.services.map(r=>e.addService({...r,type:"service"})),t.junctions.map(r=>e.addJunction({...r,type:"junction"})),t.edges.map(r=>e.addEdge(r))},"populateDb"),Rz={parser:{yy:void 0},parse:o(async t=>{let e=await bs("architecture",t);X.debug(e);let r=Rz.parser?.yy;if(!(r instanceof xy))throw new Error("parser.parser?.yy was not a ArchitectureDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");Nit(e,r)},"parse")}});var Mit,I4e,O4e=M(()=>{"use strict";Mit=o(t=>` + .edge { + stroke-width: ${t.archEdgeWidth}; + stroke: ${t.archEdgeColor}; + fill: none; + } + + .arrow { + fill: ${t.archEdgeArrowColor}; + } + + .node-bkg { + fill: none; + stroke: ${t.archGroupBorderColor}; + stroke-width: ${t.archGroupBorderWidth}; + stroke-dasharray: 8; + } + .node-icon-text { + display: flex; + align-items: center; + } + + .node-icon-text > div { + color: #fff; + margin: 1px; + height: fit-content; + text-align: center; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + } +`,"getStyles"),I4e=Mit});var Mz=sa((P4,Nz)=>{"use strict";o((function(e,r){typeof P4=="object"&&typeof Nz=="object"?Nz.exports=r():typeof define=="function"&&define.amd?define([],r):typeof P4=="object"?P4.layoutBase=r():e.layoutBase=r()}),"webpackUniversalModuleDefinition")(P4,function(){return(function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return o(r,"__webpack_require__"),r.m=t,r.c=e,r.i=function(n){return n},r.d=function(n,i,a){r.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},r.n=function(n){var i=n&&n.__esModule?o(function(){return n.default},"getDefault"):o(function(){return n},"getModuleExports");return r.d(i,"a",i),i},r.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},r.p="",r(r.s=28)})([(function(t,e,r){"use strict";function n(){}o(n,"LayoutConstants"),n.QUALITY=1,n.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,n.DEFAULT_INCREMENTAL=!1,n.DEFAULT_ANIMATION_ON_LAYOUT=!0,n.DEFAULT_ANIMATION_DURING_LAYOUT=!1,n.DEFAULT_ANIMATION_PERIOD=50,n.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,n.DEFAULT_GRAPH_MARGIN=15,n.NODE_DIMENSIONS_INCLUDE_LABELS=!1,n.SIMPLE_NODE_SIZE=40,n.SIMPLE_NODE_HALF_SIZE=n.SIMPLE_NODE_SIZE/2,n.EMPTY_COMPOUND_NODE_SIZE=40,n.MIN_EDGE_LENGTH=1,n.WORLD_BOUNDARY=1e6,n.INITIAL_WORLD_BOUNDARY=n.WORLD_BOUNDARY/1e3,n.WORLD_CENTER_X=1200,n.WORLD_CENTER_Y=900,t.exports=n}),(function(t,e,r){"use strict";var n=r(2),i=r(8),a=r(9);function s(u,h,f){n.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=u,this.target=h}o(s,"LEdge"),s.prototype=Object.create(n.prototype);for(var l in n)s[l]=n[l];s.prototype.getSource=function(){return this.source},s.prototype.getTarget=function(){return this.target},s.prototype.isInterGraph=function(){return this.isInterGraph},s.prototype.getLength=function(){return this.length},s.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},s.prototype.getBendpoints=function(){return this.bendpoints},s.prototype.getLca=function(){return this.lca},s.prototype.getSourceInLca=function(){return this.sourceInLca},s.prototype.getTargetInLca=function(){return this.targetInLca},s.prototype.getOtherEnd=function(u){if(this.source===u)return this.target;if(this.target===u)return this.source;throw"Node is not incident with this edge"},s.prototype.getOtherEndInGraph=function(u,h){for(var f=this.getOtherEnd(u),d=h.getGraphManager().getRoot();;){if(f.getOwner()==h)return f;if(f.getOwner()==d)break;f=f.getOwner().getParent()}return null},s.prototype.updateLength=function(){var u=new Array(4);this.isOverlapingSourceAndTarget=i.getIntersection(this.target.getRect(),this.source.getRect(),u),this.isOverlapingSourceAndTarget||(this.lengthX=u[0]-u[2],this.lengthY=u[1]-u[3],Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},s.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=a.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=a.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},t.exports=s}),(function(t,e,r){"use strict";function n(i){this.vGraphObject=i}o(n,"LGraphObject"),t.exports=n}),(function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(13),s=r(0),l=r(16),u=r(5);function h(d,p,m,g){m==null&&g==null&&(g=p),n.call(this,g),d.graphManager!=null&&(d=d.graphManager),this.estimatedSize=i.MIN_VALUE,this.inclusionTreeDepth=i.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=d,m!=null&&p!=null?this.rect=new a(p.x,p.y,m.width,m.height):this.rect=new a}o(h,"LNode"),h.prototype=Object.create(n.prototype);for(var f in n)h[f]=n[f];h.prototype.getEdges=function(){return this.edges},h.prototype.getChild=function(){return this.child},h.prototype.getOwner=function(){return this.owner},h.prototype.getWidth=function(){return this.rect.width},h.prototype.setWidth=function(d){this.rect.width=d},h.prototype.getHeight=function(){return this.rect.height},h.prototype.setHeight=function(d){this.rect.height=d},h.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},h.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},h.prototype.getCenter=function(){return new u(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},h.prototype.getLocation=function(){return new u(this.rect.x,this.rect.y)},h.prototype.getRect=function(){return this.rect},h.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},h.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},h.prototype.setRect=function(d,p){this.rect.x=d.x,this.rect.y=d.y,this.rect.width=p.width,this.rect.height=p.height},h.prototype.setCenter=function(d,p){this.rect.x=d-this.rect.width/2,this.rect.y=p-this.rect.height/2},h.prototype.setLocation=function(d,p){this.rect.x=d,this.rect.y=p},h.prototype.moveBy=function(d,p){this.rect.x+=d,this.rect.y+=p},h.prototype.getEdgeListToNode=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(y.target==d){if(y.source!=g)throw"Incorrect edge source!";p.push(y)}}),p},h.prototype.getEdgesBetween=function(d){var p=[],m,g=this;return g.edges.forEach(function(y){if(!(y.source==g||y.target==g))throw"Incorrect edge source and/or target";(y.target==d||y.source==d)&&p.push(y)}),p},h.prototype.getNeighborsList=function(){var d=new Set,p=this;return p.edges.forEach(function(m){if(m.source==p)d.add(m.target);else{if(m.target!=p)throw"Incorrect incidency!";d.add(m.source)}}),d},h.prototype.withChildren=function(){var d=new Set,p,m;if(d.add(this),this.child!=null)for(var g=this.child.getNodes(),y=0;yp?(this.rect.x-=(this.labelWidth-p)/2,this.setWidth(this.labelWidth)):this.labelPosHorizontal=="right"&&this.setWidth(p+this.labelWidth)),this.labelHeight&&(this.labelPosVertical=="top"?(this.rect.y-=this.labelHeight,this.setHeight(m+this.labelHeight)):this.labelPosVertical=="center"&&this.labelHeight>m?(this.rect.y-=(this.labelHeight-m)/2,this.setHeight(this.labelHeight)):this.labelPosVertical=="bottom"&&this.setHeight(m+this.labelHeight))}}},h.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==i.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},h.prototype.transform=function(d){var p=this.rect.x;p>s.WORLD_BOUNDARY?p=s.WORLD_BOUNDARY:p<-s.WORLD_BOUNDARY&&(p=-s.WORLD_BOUNDARY);var m=this.rect.y;m>s.WORLD_BOUNDARY?m=s.WORLD_BOUNDARY:m<-s.WORLD_BOUNDARY&&(m=-s.WORLD_BOUNDARY);var g=new u(p,m),y=d.inverseTransformPoint(g);this.setLocation(y.x,y.y)},h.prototype.getLeft=function(){return this.rect.x},h.prototype.getRight=function(){return this.rect.x+this.rect.width},h.prototype.getTop=function(){return this.rect.y},h.prototype.getBottom=function(){return this.rect.y+this.rect.height},h.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},t.exports=h}),(function(t,e,r){"use strict";var n=r(0);function i(){}o(i,"FDLayoutConstants");for(var a in n)i[a]=n[a];i.MAX_ITERATIONS=2500,i.DEFAULT_EDGE_LENGTH=50,i.DEFAULT_SPRING_STRENGTH=.45,i.DEFAULT_REPULSION_STRENGTH=4500,i.DEFAULT_GRAVITY_STRENGTH=.4,i.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,i.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,i.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,i.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,i.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,i.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,i.COOLING_ADAPTATION_FACTOR=.33,i.ADAPTATION_LOWER_NODE_LIMIT=1e3,i.ADAPTATION_UPPER_NODE_LIMIT=5e3,i.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,i.MAX_NODE_DISPLACEMENT=i.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,i.MIN_REPULSION_DIST=i.DEFAULT_EDGE_LENGTH/10,i.CONVERGENCE_CHECK_PERIOD=100,i.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,i.MIN_EDGE_LENGTH=1,i.GRID_CALCULATION_CHECK_PERIOD=10,t.exports=i}),(function(t,e,r){"use strict";function n(i,a){i==null&&a==null?(this.x=0,this.y=0):(this.x=i,this.y=a)}o(n,"PointD"),n.prototype.getX=function(){return this.x},n.prototype.getY=function(){return this.y},n.prototype.setX=function(i){this.x=i},n.prototype.setY=function(i){this.y=i},n.prototype.getDifference=function(i){return new DimensionD(this.x-i.x,this.y-i.y)},n.prototype.getCopy=function(){return new n(this.x,this.y)},n.prototype.translate=function(i){return this.x+=i.width,this.y+=i.height,this},t.exports=n}),(function(t,e,r){"use strict";var n=r(2),i=r(10),a=r(0),s=r(7),l=r(3),u=r(1),h=r(13),f=r(12),d=r(11);function p(g,y,v){n.call(this,v),this.estimatedSize=i.MIN_VALUE,this.margin=a.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,y!=null&&y instanceof s?this.graphManager=y:y!=null&&y instanceof Layout&&(this.graphManager=y.graphManager)}o(p,"LGraph"),p.prototype=Object.create(n.prototype);for(var m in n)p[m]=n[m];p.prototype.getNodes=function(){return this.nodes},p.prototype.getEdges=function(){return this.edges},p.prototype.getGraphManager=function(){return this.graphManager},p.prototype.getParent=function(){return this.parent},p.prototype.getLeft=function(){return this.left},p.prototype.getRight=function(){return this.right},p.prototype.getTop=function(){return this.top},p.prototype.getBottom=function(){return this.bottom},p.prototype.isConnected=function(){return this.isConnected},p.prototype.add=function(g,y,v){if(y==null&&v==null){var x=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(x)>-1)throw"Node already in graph!";return x.owner=this,this.getNodes().push(x),x}else{var b=g;if(!(this.getNodes().indexOf(y)>-1&&this.getNodes().indexOf(v)>-1))throw"Source or target not in graph!";if(!(y.owner==v.owner&&y.owner==this))throw"Both owners must be this graph!";return y.owner!=v.owner?null:(b.source=y,b.target=v,b.isInterGraph=!1,this.getEdges().push(b),y.edges.push(b),v!=y&&v.edges.push(b),b)}},p.prototype.remove=function(g){var y=g;if(g instanceof l){if(y==null)throw"Node is null!";if(!(y.owner!=null&&y.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var v=y.edges.slice(),x,b=v.length,T=0;T-1&&k>-1))throw"Source and/or target doesn't know this edge!";x.source.edges.splice(w,1),x.target!=x.source&&x.target.edges.splice(k,1);var S=x.source.owner.getEdges().indexOf(x);if(S==-1)throw"Not in owner's edge list!";x.source.owner.getEdges().splice(S,1)}},p.prototype.updateLeftTop=function(){for(var g=i.MAX_VALUE,y=i.MAX_VALUE,v,x,b,T=this.getNodes(),S=T.length,w=0;wv&&(g=v),y>x&&(y=x)}return g==i.MAX_VALUE?null:(T[0].getParent().paddingLeft!=null?b=T[0].getParent().paddingLeft:b=this.margin,this.left=y-b,this.top=g-b,new f(this.left,this.top))},p.prototype.updateBounds=function(g){for(var y=i.MAX_VALUE,v=-i.MAX_VALUE,x=i.MAX_VALUE,b=-i.MAX_VALUE,T,S,w,k,C,A=this.nodes,L=A.length,I=0;IT&&(y=T),vw&&(x=w),bT&&(y=T),vw&&(x=w),b=this.nodes.length){var L=0;v.forEach(function(I){I.owner==g&&L++}),L==this.nodes.length&&(this.isConnected=!0)}},t.exports=p}),(function(t,e,r){"use strict";var n,i=r(1);function a(s){n=r(6),this.layout=s,this.graphs=[],this.edges=[]}o(a,"LGraphManager"),a.prototype.addRoot=function(){var s=this.layout.newGraph(),l=this.layout.newNode(null),u=this.add(s,l);return this.setRootGraph(u),this.rootGraph},a.prototype.add=function(s,l,u,h,f){if(u==null&&h==null&&f==null){if(s==null)throw"Graph is null!";if(l==null)throw"Parent node is null!";if(this.graphs.indexOf(s)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(s),s.parent!=null)throw"Already has a parent!";if(l.child!=null)throw"Already has a child!";return s.parent=l,l.child=s,s}else{f=u,h=l,u=s;var d=h.getOwner(),p=f.getOwner();if(!(d!=null&&d.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(p!=null&&p.getGraphManager()==this))throw"Target not in this graph mgr!";if(d==p)return u.isInterGraph=!1,d.add(u,h,f);if(u.isInterGraph=!0,u.source=h,u.target=f,this.edges.indexOf(u)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(u),!(u.source!=null&&u.target!=null))throw"Edge source and/or target is null!";if(!(u.source.edges.indexOf(u)==-1&&u.target.edges.indexOf(u)==-1))throw"Edge already in source and/or target incidency list!";return u.source.edges.push(u),u.target.edges.push(u),u}},a.prototype.remove=function(s){if(s instanceof n){var l=s;if(l.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(l==this.rootGraph||l.parent!=null&&l.parent.graphManager==this))throw"Invalid parent node!";var u=[];u=u.concat(l.getEdges());for(var h,f=u.length,d=0;d=s.getRight()?l[0]+=Math.min(s.getX()-a.getX(),a.getRight()-s.getRight()):s.getX()<=a.getX()&&s.getRight()>=a.getRight()&&(l[0]+=Math.min(a.getX()-s.getX(),s.getRight()-a.getRight())),a.getY()<=s.getY()&&a.getBottom()>=s.getBottom()?l[1]+=Math.min(s.getY()-a.getY(),a.getBottom()-s.getBottom()):s.getY()<=a.getY()&&s.getBottom()>=a.getBottom()&&(l[1]+=Math.min(a.getY()-s.getY(),s.getBottom()-a.getBottom()));var f=Math.abs((s.getCenterY()-a.getCenterY())/(s.getCenterX()-a.getCenterX()));s.getCenterY()===a.getCenterY()&&s.getCenterX()===a.getCenterX()&&(f=1);var d=f*l[0],p=l[1]/f;l[0]d)return l[0]=u,l[1]=m,l[2]=f,l[3]=A,!1;if(hf)return l[0]=p,l[1]=h,l[2]=k,l[3]=d,!1;if(uf?(l[0]=y,l[1]=v,E=!0):(l[0]=g,l[1]=m,E=!0):D===N&&(u>f?(l[0]=p,l[1]=m,E=!0):(l[0]=x,l[1]=v,E=!0)),-O===N?f>u?(l[2]=C,l[3]=A,_=!0):(l[2]=k,l[3]=w,_=!0):O===N&&(f>u?(l[2]=S,l[3]=w,_=!0):(l[2]=L,l[3]=A,_=!0)),E&&_)return!1;if(u>f?h>d?(P=this.getCardinalDirection(D,N,4),B=this.getCardinalDirection(O,N,2)):(P=this.getCardinalDirection(-D,N,3),B=this.getCardinalDirection(-O,N,1)):h>d?(P=this.getCardinalDirection(-D,N,1),B=this.getCardinalDirection(-O,N,3)):(P=this.getCardinalDirection(D,N,2),B=this.getCardinalDirection(O,N,4)),!E)switch(P){case 1:V=m,F=u+-T/N,l[0]=F,l[1]=V;break;case 2:F=x,V=h+b*N,l[0]=F,l[1]=V;break;case 3:V=v,F=u+T/N,l[0]=F,l[1]=V;break;case 4:F=y,V=h+-b*N,l[0]=F,l[1]=V;break}if(!_)switch(B){case 1:U=w,$=f+-R/N,l[2]=$,l[3]=U;break;case 2:$=L,U=d+I*N,l[2]=$,l[3]=U;break;case 3:U=A,$=f+R/N,l[2]=$,l[3]=U;break;case 4:$=C,U=d+-I*N,l[2]=$,l[3]=U;break}}return!1},i.getCardinalDirection=function(a,s,l){return a>s?l:1+l%4},i.getIntersection=function(a,s,l,u){if(u==null)return this.getIntersection2(a,s,l);var h=a.x,f=a.y,d=s.x,p=s.y,m=l.x,g=l.y,y=u.x,v=u.y,x=void 0,b=void 0,T=void 0,S=void 0,w=void 0,k=void 0,C=void 0,A=void 0,L=void 0;return T=p-f,w=h-d,C=d*f-h*p,S=v-g,k=m-y,A=y*g-m*v,L=T*k-S*w,L===0?null:(x=(w*A-k*C)/L,b=(S*C-T*A)/L,new n(x,b))},i.angleOfVector=function(a,s,l,u){var h=void 0;return a!==l?(h=Math.atan((u-s)/(l-a)),l=0){var v=(-m+Math.sqrt(m*m-4*p*g))/(2*p),x=(-m-Math.sqrt(m*m-4*p*g))/(2*p),b=null;return v>=0&&v<=1?[v]:x>=0&&x<=1?[x]:b}else return null},i.HALF_PI=.5*Math.PI,i.ONE_AND_HALF_PI=1.5*Math.PI,i.TWO_PI=2*Math.PI,i.THREE_PI=3*Math.PI,t.exports=i}),(function(t,e,r){"use strict";function n(){}o(n,"IMath"),n.sign=function(i){return i>0?1:i<0?-1:0},n.floor=function(i){return i<0?Math.ceil(i):Math.floor(i)},n.ceil=function(i){return i<0?Math.floor(i):Math.ceil(i)},t.exports=n}),(function(t,e,r){"use strict";function n(){}o(n,"Integer"),n.MAX_VALUE=2147483647,n.MIN_VALUE=-2147483648,t.exports=n}),(function(t,e,r){"use strict";var n=(function(){function h(f,d){for(var p=0;p"u"?"undefined":n(a);return a==null||s!="object"&&s!="function"},t.exports=i}),(function(t,e,r){"use strict";function n(m){if(Array.isArray(m)){for(var g=0,y=Array(m.length);g0&&g;){for(T.push(w[0]);T.length>0&&g;){var k=T[0];T.splice(0,1),b.add(k);for(var C=k.getEdges(),x=0;x-1&&w.splice(R,1)}b=new Set,S=new Map}}return m},p.prototype.createDummyNodesForBendpoints=function(m){for(var g=[],y=m.source,v=this.graphManager.calcLowestCommonAncestor(m.source,m.target),x=0;x0){for(var v=this.edgeToDummyNodes.get(y),x=0;x=0&&g.splice(A,1);var L=S.getNeighborsList();L.forEach(function(E){if(y.indexOf(E)<0){var _=v.get(E),D=_-1;D==1&&k.push(E),v.set(E,D)}})}y=y.concat(k),(g.length==1||g.length==2)&&(x=!0,b=g[0])}return b},p.prototype.setGraphManager=function(m){this.graphManager=m},t.exports=p}),(function(t,e,r){"use strict";function n(){}o(n,"RandomSeed"),n.seed=1,n.x=0,n.nextDouble=function(){return n.x=Math.sin(n.seed++)*1e4,n.x-Math.floor(n.x)},t.exports=n}),(function(t,e,r){"use strict";var n=r(5);function i(a,s){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}o(i,"Transform"),i.prototype.getWorldOrgX=function(){return this.lworldOrgX},i.prototype.setWorldOrgX=function(a){this.lworldOrgX=a},i.prototype.getWorldOrgY=function(){return this.lworldOrgY},i.prototype.setWorldOrgY=function(a){this.lworldOrgY=a},i.prototype.getWorldExtX=function(){return this.lworldExtX},i.prototype.setWorldExtX=function(a){this.lworldExtX=a},i.prototype.getWorldExtY=function(){return this.lworldExtY},i.prototype.setWorldExtY=function(a){this.lworldExtY=a},i.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},i.prototype.setDeviceOrgX=function(a){this.ldeviceOrgX=a},i.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},i.prototype.setDeviceOrgY=function(a){this.ldeviceOrgY=a},i.prototype.getDeviceExtX=function(){return this.ldeviceExtX},i.prototype.setDeviceExtX=function(a){this.ldeviceExtX=a},i.prototype.getDeviceExtY=function(){return this.ldeviceExtY},i.prototype.setDeviceExtY=function(a){this.ldeviceExtY=a},i.prototype.transformX=function(a){var s=0,l=this.lworldExtX;return l!=0&&(s=this.ldeviceOrgX+(a-this.lworldOrgX)*this.ldeviceExtX/l),s},i.prototype.transformY=function(a){var s=0,l=this.lworldExtY;return l!=0&&(s=this.ldeviceOrgY+(a-this.lworldOrgY)*this.ldeviceExtY/l),s},i.prototype.inverseTransformX=function(a){var s=0,l=this.ldeviceExtX;return l!=0&&(s=this.lworldOrgX+(a-this.ldeviceOrgX)*this.lworldExtX/l),s},i.prototype.inverseTransformY=function(a){var s=0,l=this.ldeviceExtY;return l!=0&&(s=this.lworldOrgY+(a-this.ldeviceOrgY)*this.lworldExtY/l),s},i.prototype.inverseTransformPoint=function(a){var s=new n(this.inverseTransformX(a.x),this.inverseTransformY(a.y));return s},t.exports=i}),(function(t,e,r){"use strict";function n(d){if(Array.isArray(d)){for(var p=0,m=Array(d.length);pa.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*a.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-a.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT_INCREMENTAL):(d>a.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(a.COOLING_ADAPTATION_FACTOR,1-(d-a.ADAPTATION_LOWER_NODE_LIMIT)/(a.ADAPTATION_UPPER_NODE_LIMIT-a.ADAPTATION_LOWER_NODE_LIMIT)*(1-a.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=a.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.displacementThresholdPerNode=3*a.DEFAULT_EDGE_LENGTH/100,this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},h.prototype.calcSpringForces=function(){for(var d=this.getAllEdges(),p,m=0;m0&&arguments[0]!==void 0?arguments[0]:!0,p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,m,g,y,v,x=this.getAllNodes(),b;if(this.useFRGridVariant)for(this.totalIterations%a.GRID_CALCULATION_CHECK_PERIOD==1&&d&&this.updateGrid(),b=new Set,m=0;mT||b>T)&&(d.gravitationForceX=-this.gravityConstant*y,d.gravitationForceY=-this.gravityConstant*v)):(T=p.getEstimatedSize()*this.compoundGravityRangeFactor,(x>T||b>T)&&(d.gravitationForceX=-this.gravityConstant*y*this.compoundGravityConstant,d.gravitationForceY=-this.gravityConstant*v*this.compoundGravityConstant))},h.prototype.isConverged=function(){var d,p=!1;return this.totalIterations>this.maxIterations/3&&(p=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),d=this.totalDisplacement=x.length||T>=x[0].length)){for(var S=0;Sh},"_defaultCompareFunction")}]),l})();t.exports=s}),(function(t,e,r){"use strict";function n(){}o(n,"SVD"),n.svd=function(i){this.U=null,this.V=null,this.s=null,this.m=0,this.n=0,this.m=i.length,this.n=i[0].length;var a=Math.min(this.m,this.n);this.s=(function(dt){for(var nt=[];dt-- >0;)nt.push(0);return nt})(Math.min(this.m+1,this.n)),this.U=(function(dt){var nt=o(function bt(wt){if(wt.length==0)return 0;for(var yt=[],ft=0;ft0;)nt.push(0);return nt})(this.n),l=(function(dt){for(var nt=[];dt-- >0;)nt.push(0);return nt})(this.m),u=!0,h=!0,f=Math.min(this.m-1,this.n),d=Math.max(0,Math.min(this.n-2,this.m)),p=0;p=0;N--)if(this.s[N]!==0){for(var P=N+1;P=0;ee--){if((function(dt,nt){return dt&&nt})(ee0;){var Z=void 0,de=void 0;for(Z=_-2;Z>=-1&&Z!==-1;Z--)if(Math.abs(s[Z])<=ae+K*(Math.abs(this.s[Z])+Math.abs(this.s[Z+1]))){s[Z]=0;break}if(Z===_-2)de=4;else{var ne=void 0;for(ne=_-1;ne>=Z&&ne!==Z;ne--){var Te=(ne!==_?Math.abs(s[ne]):0)+(ne!==Z+1?Math.abs(s[ne-1]):0);if(Math.abs(this.s[ne])<=ae+K*Te){this.s[ne]=0;break}}ne===Z?de=3:ne===_-1?de=1:(de=2,Z=ne)}switch(Z++,de){case 1:{var W=s[_-2];s[_-2]=0;for(var Ve=_-2;Ve>=Z;Ve--){var pe=n.hypot(this.s[Ve],W),Be=this.s[Ve]/pe,Ye=W/pe;if(this.s[Ve]=pe,Ve!==Z&&(W=-Ye*s[Ve-1],s[Ve-1]=Be*s[Ve-1]),h)for(var He=0;He=this.s[Z+1]);){var lt=this.s[Z];if(this.s[Z]=this.s[Z+1],this.s[Z+1]=lt,h&&ZMath.abs(a)?(s=a/i,s=Math.abs(i)*Math.sqrt(1+s*s)):a!=0?(s=i/a,s=Math.abs(a)*Math.sqrt(1+s*s)):s=0,s},t.exports=n}),(function(t,e,r){"use strict";var n=(function(){function s(l,u){for(var h=0;h2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,d=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;i(this,s),this.sequence1=l,this.sequence2=u,this.match_score=h,this.mismatch_penalty=f,this.gap_penalty=d,this.iMax=l.length+1,this.jMax=u.length+1,this.grid=new Array(this.iMax);for(var p=0;p=0;l--){var u=this.listeners[l];u.event===a&&u.callback===s&&this.listeners.splice(l,1)}},i.emit=function(a,s){for(var l=0;l{"use strict";o((function(e,r){typeof B4=="object"&&typeof Iz=="object"?Iz.exports=r(Mz()):typeof define=="function"&&define.amd?define(["layout-base"],r):typeof B4=="object"?B4.coseBase=r(Mz()):e.coseBase=r(e.layoutBase)}),"webpackUniversalModuleDefinition")(B4,function(t){return(()=>{"use strict";var e={45:((a,s,l)=>{var u={};u.layoutBase=l(551),u.CoSEConstants=l(806),u.CoSEEdge=l(767),u.CoSEGraph=l(880),u.CoSEGraphManager=l(578),u.CoSELayout=l(765),u.CoSENode=l(991),u.ConstraintHandler=l(902),a.exports=u}),806:((a,s,l)=>{var u=l(551).FDLayoutConstants;function h(){}o(h,"CoSEConstants");for(var f in u)h[f]=u[f];h.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,h.DEFAULT_RADIAL_SEPARATION=u.DEFAULT_EDGE_LENGTH,h.DEFAULT_COMPONENT_SEPERATION=60,h.TILE=!0,h.TILING_PADDING_VERTICAL=10,h.TILING_PADDING_HORIZONTAL=10,h.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,h.ENFORCE_CONSTRAINTS=!0,h.APPLY_LAYOUT=!0,h.RELAX_MOVEMENT_ON_CONSTRAINTS=!0,h.TREE_REDUCTION_ON_INCREMENTAL=!0,h.PURE_INCREMENTAL=h.DEFAULT_INCREMENTAL,a.exports=h}),767:((a,s,l)=>{var u=l(551).FDLayoutEdge;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEEdge"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h}),880:((a,s,l)=>{var u=l(551).LGraph;function h(d,p,m){u.call(this,d,p,m)}o(h,"CoSEGraph"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h}),578:((a,s,l)=>{var u=l(551).LGraphManager;function h(d){u.call(this,d)}o(h,"CoSEGraphManager"),h.prototype=Object.create(u.prototype);for(var f in u)h[f]=u[f];a.exports=h}),765:((a,s,l)=>{var u=l(551).FDLayout,h=l(578),f=l(880),d=l(991),p=l(767),m=l(806),g=l(902),y=l(551).FDLayoutConstants,v=l(551).LayoutConstants,x=l(551).Point,b=l(551).PointD,T=l(551).DimensionD,S=l(551).Layout,w=l(551).Integer,k=l(551).IGeometry,C=l(551).LGraph,A=l(551).Transform,L=l(551).LinkedList;function I(){u.call(this),this.toBeTiled={},this.constraints={}}o(I,"CoSELayout"),I.prototype=Object.create(u.prototype);for(var R in u)I[R]=u[R];I.prototype.newGraphManager=function(){var E=new h(this);return this.graphManager=E,E},I.prototype.newGraph=function(E){return new f(null,this.graphManager,E)},I.prototype.newNode=function(E){return new d(this.graphManager,E)},I.prototype.newEdge=function(E){return new p(null,null,E)},I.prototype.initParameters=function(){u.prototype.initParameters.call(this,arguments),this.isSubLayout||(m.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=m.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=m.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=y.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=y.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=y.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1)},I.prototype.initSpringEmbedder=function(){u.prototype.initSpringEmbedder.call(this),this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/y.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=.04,this.coolingAdjuster=1},I.prototype.layout=function(){var E=v.DEFAULT_CREATE_BENDS_AS_NEEDED;return E&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},I.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(m.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var _=new Set(this.getAllNodes()),D=this.nodesWithGravity.filter(function(P){return _.has(P)});this.graphManager.setAllNodesToApplyGravitation(D)}}else{var E=this.getFlatForest();if(E.length>0)this.positionNodesRadially(E);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var _=new Set(this.getAllNodes()),D=this.nodesWithGravity.filter(function(O){return _.has(O)});this.graphManager.setAllNodesToApplyGravitation(D),this.positionNodesRandomly()}}return Object.keys(this.constraints).length>0&&(g.handleConstraints(this),this.initConstraintVariables()),this.initSpringEmbedder(),m.APPLY_LAYOUT&&this.runSpringEmbedder(),!0},I.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%y.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var E=new Set(this.getAllNodes()),_=this.nodesWithGravity.filter(function(N){return E.has(N)});this.graphManager.setAllNodesToApplyGravitation(_),this.graphManager.updateBounds(),this.updateGrid(),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2:this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),m.PURE_INCREMENTAL?this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL/2*((100-this.afterGrowthIterations)/100):this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var D=!this.isTreeGrowing&&!this.isGrowthFinished,O=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(D,O),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},I.prototype.getPositionsData=function(){for(var E=this.graphManager.getAllNodes(),_={},D=0;D0&&this.updateDisplacements();for(var D=0;D0&&(O.fixedNodeWeight=P)}}if(this.constraints.relativePlacementConstraint){var B=new Map,F=new Map;if(this.dummyToNodeForVerticalAlignment=new Map,this.dummyToNodeForHorizontalAlignment=new Map,this.fixedNodesOnHorizontal=new Set,this.fixedNodesOnVertical=new Set,this.fixedNodeSet.forEach(function(Q){E.fixedNodesOnHorizontal.add(Q),E.fixedNodesOnVertical.add(Q)}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var V=this.constraints.alignmentConstraint.vertical,D=0;D=2*Q.length/3;re--)ue=Math.floor(Math.random()*(re+1)),te=Q[re],Q[re]=Q[ue],Q[ue]=te;return Q},this.nodesInRelativeHorizontal=[],this.nodesInRelativeVertical=[],this.nodeToRelativeConstraintMapHorizontal=new Map,this.nodeToRelativeConstraintMapVertical=new Map,this.nodeToTempPositionMapHorizontal=new Map,this.nodeToTempPositionMapVertical=new Map,this.constraints.relativePlacementConstraint.forEach(function(Q){if(Q.left){var ue=B.has(Q.left)?B.get(Q.left):Q.left,te=B.has(Q.right)?B.get(Q.right):Q.right;E.nodesInRelativeHorizontal.includes(ue)||(E.nodesInRelativeHorizontal.push(ue),E.nodeToRelativeConstraintMapHorizontal.set(ue,[]),E.dummyToNodeForVerticalAlignment.has(ue)?E.nodeToTempPositionMapHorizontal.set(ue,E.idToNodeMap.get(E.dummyToNodeForVerticalAlignment.get(ue)[0]).getCenterX()):E.nodeToTempPositionMapHorizontal.set(ue,E.idToNodeMap.get(ue).getCenterX())),E.nodesInRelativeHorizontal.includes(te)||(E.nodesInRelativeHorizontal.push(te),E.nodeToRelativeConstraintMapHorizontal.set(te,[]),E.dummyToNodeForVerticalAlignment.has(te)?E.nodeToTempPositionMapHorizontal.set(te,E.idToNodeMap.get(E.dummyToNodeForVerticalAlignment.get(te)[0]).getCenterX()):E.nodeToTempPositionMapHorizontal.set(te,E.idToNodeMap.get(te).getCenterX())),E.nodeToRelativeConstraintMapHorizontal.get(ue).push({right:te,gap:Q.gap}),E.nodeToRelativeConstraintMapHorizontal.get(te).push({left:ue,gap:Q.gap})}else{var re=F.has(Q.top)?F.get(Q.top):Q.top,J=F.has(Q.bottom)?F.get(Q.bottom):Q.bottom;E.nodesInRelativeVertical.includes(re)||(E.nodesInRelativeVertical.push(re),E.nodeToRelativeConstraintMapVertical.set(re,[]),E.dummyToNodeForHorizontalAlignment.has(re)?E.nodeToTempPositionMapVertical.set(re,E.idToNodeMap.get(E.dummyToNodeForHorizontalAlignment.get(re)[0]).getCenterY()):E.nodeToTempPositionMapVertical.set(re,E.idToNodeMap.get(re).getCenterY())),E.nodesInRelativeVertical.includes(J)||(E.nodesInRelativeVertical.push(J),E.nodeToRelativeConstraintMapVertical.set(J,[]),E.dummyToNodeForHorizontalAlignment.has(J)?E.nodeToTempPositionMapVertical.set(J,E.idToNodeMap.get(E.dummyToNodeForHorizontalAlignment.get(J)[0]).getCenterY()):E.nodeToTempPositionMapVertical.set(J,E.idToNodeMap.get(J).getCenterY())),E.nodeToRelativeConstraintMapVertical.get(re).push({bottom:J,gap:Q.gap}),E.nodeToRelativeConstraintMapVertical.get(J).push({top:re,gap:Q.gap})}});else{var U=new Map,j=new Map;this.constraints.relativePlacementConstraint.forEach(function(Q){if(Q.left){var ue=B.has(Q.left)?B.get(Q.left):Q.left,te=B.has(Q.right)?B.get(Q.right):Q.right;U.has(ue)?U.get(ue).push(te):U.set(ue,[te]),U.has(te)?U.get(te).push(ue):U.set(te,[ue])}else{var re=F.has(Q.top)?F.get(Q.top):Q.top,J=F.has(Q.bottom)?F.get(Q.bottom):Q.bottom;j.has(re)?j.get(re).push(J):j.set(re,[J]),j.has(J)?j.get(J).push(re):j.set(J,[re])}});var ee=o(function(ue,te){var re=[],J=[],K=new L,ae=new Set,Z=0;return ue.forEach(function(de,ne){if(!ae.has(ne)){re[Z]=[],J[Z]=!1;var Te=ne;for(K.push(Te),ae.add(Te),re[Z].push(Te);K.length!=0;){Te=K.shift(),te.has(Te)&&(J[Z]=!0);var W=ue.get(Te);W.forEach(function(Ve){ae.has(Ve)||(K.push(Ve),ae.add(Ve),re[Z].push(Ve))})}Z++}}),{components:re,isFixed:J}},"constructComponents"),q=ee(U,E.fixedNodesOnHorizontal);this.componentsOnHorizontal=q.components,this.fixedComponentsOnHorizontal=q.isFixed;var oe=ee(j,E.fixedNodesOnVertical);this.componentsOnVertical=oe.components,this.fixedComponentsOnVertical=oe.isFixed}}},I.prototype.updateDisplacements=function(){var E=this;if(this.constraints.fixedNodeConstraint&&this.constraints.fixedNodeConstraint.forEach(function(oe){var Q=E.idToNodeMap.get(oe.nodeId);Q.displacementX=0,Q.displacementY=0}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var _=this.constraints.alignmentConstraint.vertical,D=0;D<_.length;D++){for(var O=0,N=0;N<_[D].length;N++){if(this.fixedNodeSet.has(_[D][N])){O=0;break}O+=this.idToNodeMap.get(_[D][N]).displacementX}for(var P=O/_[D].length,N=0;N<_[D].length;N++)this.idToNodeMap.get(_[D][N]).displacementX=P}if(this.constraints.alignmentConstraint.horizontal)for(var B=this.constraints.alignmentConstraint.horizontal,D=0;D1){var F;for(F=0;FO&&(O=Math.floor(B.y)),P=Math.floor(B.x+m.DEFAULT_COMPONENT_SEPERATION)}this.transform(new b(v.WORLD_CENTER_X-B.x/2,v.WORLD_CENTER_Y-B.y/2))},I.radialLayout=function(E,_,D){var O=Math.max(this.maxDiagonalInTree(E),m.DEFAULT_RADIAL_SEPARATION);I.branchRadialLayout(_,null,0,359,0,O);var N=C.calculateBounds(E),P=new A;P.setDeviceOrgX(N.getMinX()),P.setDeviceOrgY(N.getMinY()),P.setWorldOrgX(D.x),P.setWorldOrgY(D.y);for(var B=0;B1;){var re=te[0];te.splice(0,1);var J=ee.indexOf(re);J>=0&&ee.splice(J,1),Q--,q--}_!=null?ue=(ee.indexOf(te[0])+1)%Q:ue=0;for(var K=Math.abs(O-D)/q,ae=ue;oe!=q;ae=++ae%Q){var Z=ee[ae].getOtherEnd(E);if(Z!=_){var de=(D+oe*K)%360,ne=(de+K)%360;I.branchRadialLayout(Z,E,de,ne,N+P,P),oe++}}},I.maxDiagonalInTree=function(E){for(var _=w.MIN_VALUE,D=0;D_&&(_=N)}return _},I.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},I.prototype.groupZeroDegreeMembers=function(){var E=this,_={};this.memberGroups={},this.idToDummyNode={};for(var D=[],O=this.graphManager.getAllNodes(),N=0;N"u"&&(_[F]=[]),_[F]=_[F].concat(P)}Object.keys(_).forEach(function(V){if(_[V].length>1){var $="DummyCompound_"+V;E.memberGroups[$]=_[V];var U=_[V][0].getParent(),j=new d(E.graphManager);j.id=$,j.paddingLeft=U.paddingLeft||0,j.paddingRight=U.paddingRight||0,j.paddingBottom=U.paddingBottom||0,j.paddingTop=U.paddingTop||0,E.idToDummyNode[$]=j;var ee=E.getGraphManager().add(E.newGraph(),j),q=U.getChild();q.add(j);for(var oe=0;oe<_[V].length;oe++){var Q=_[V][oe];q.remove(Q),ee.add(Q)}}})},I.prototype.clearCompounds=function(){var E={},_={};this.performDFSOnCompounds();for(var D=0;DN?(O.rect.x-=(O.labelWidth-N)/2,O.setWidth(O.labelWidth),O.labelMarginLeft=(O.labelWidth-N)/2):O.labelPosHorizontal=="right"&&O.setWidth(N+O.labelWidth)),O.labelHeight&&(O.labelPosVertical=="top"?(O.rect.y-=O.labelHeight,O.setHeight(P+O.labelHeight),O.labelMarginTop=O.labelHeight):O.labelPosVertical=="center"&&O.labelHeight>P?(O.rect.y-=(O.labelHeight-P)/2,O.setHeight(O.labelHeight),O.labelMarginTop=(O.labelHeight-P)/2):O.labelPosVertical=="bottom"&&O.setHeight(P+O.labelHeight))}})},I.prototype.repopulateCompounds=function(){for(var E=this.compoundOrder.length-1;E>=0;E--){var _=this.compoundOrder[E],D=_.id,O=_.paddingLeft,N=_.paddingTop,P=_.labelMarginLeft,B=_.labelMarginTop;this.adjustLocations(this.tiledMemberPack[D],_.rect.x,_.rect.y,O,N,P,B)}},I.prototype.repopulateZeroDegreeMembers=function(){var E=this,_=this.tiledZeroDegreePack;Object.keys(_).forEach(function(D){var O=E.idToDummyNode[D],N=O.paddingLeft,P=O.paddingTop,B=O.labelMarginLeft,F=O.labelMarginTop;E.adjustLocations(_[D],O.rect.x,O.rect.y,N,P,B,F)})},I.prototype.getToBeTiled=function(E){var _=E.id;if(this.toBeTiled[_]!=null)return this.toBeTiled[_];var D=E.getChild();if(D==null)return this.toBeTiled[_]=!1,!1;for(var O=D.getNodes(),N=0;N0)return this.toBeTiled[_]=!1,!1;if(P.getChild()==null){this.toBeTiled[P.id]=!1;continue}if(!this.getToBeTiled(P))return this.toBeTiled[_]=!1,!1}return this.toBeTiled[_]=!0,!0},I.prototype.getNodeDegree=function(E){for(var _=E.id,D=E.getEdges(),O=0,N=0;NU&&(U=ee.rect.height)}D+=U+E.verticalPadding}},I.prototype.tileCompoundMembers=function(E,_){var D=this;this.tiledMemberPack=[],Object.keys(E).forEach(function(O){var N=_[O];if(D.tiledMemberPack[O]=D.tileNodes(E[O],N.paddingLeft+N.paddingRight),N.rect.width=D.tiledMemberPack[O].width,N.rect.height=D.tiledMemberPack[O].height,N.setCenter(D.tiledMemberPack[O].centerX,D.tiledMemberPack[O].centerY),N.labelMarginLeft=0,N.labelMarginTop=0,m.NODE_DIMENSIONS_INCLUDE_LABELS){var P=N.rect.width,B=N.rect.height;N.labelWidth&&(N.labelPosHorizontal=="left"?(N.rect.x-=N.labelWidth,N.setWidth(P+N.labelWidth),N.labelMarginLeft=N.labelWidth):N.labelPosHorizontal=="center"&&N.labelWidth>P?(N.rect.x-=(N.labelWidth-P)/2,N.setWidth(N.labelWidth),N.labelMarginLeft=(N.labelWidth-P)/2):N.labelPosHorizontal=="right"&&N.setWidth(P+N.labelWidth)),N.labelHeight&&(N.labelPosVertical=="top"?(N.rect.y-=N.labelHeight,N.setHeight(B+N.labelHeight),N.labelMarginTop=N.labelHeight):N.labelPosVertical=="center"&&N.labelHeight>B?(N.rect.y-=(N.labelHeight-B)/2,N.setHeight(N.labelHeight),N.labelMarginTop=(N.labelHeight-B)/2):N.labelPosVertical=="bottom"&&N.setHeight(B+N.labelHeight))}})},I.prototype.tileNodes=function(E,_){var D=this.tileNodesByFavoringDim(E,_,!0),O=this.tileNodesByFavoringDim(E,_,!1),N=this.getOrgRatio(D),P=this.getOrgRatio(O),B;return PF&&(F=oe.getWidth())});var V=P/N,$=B/N,U=Math.pow(D-O,2)+4*(V+O)*($+D)*N,j=(O-D+Math.sqrt(U))/(2*(V+O)),ee;_?(ee=Math.ceil(j),ee==j&&ee++):ee=Math.floor(j);var q=ee*(V+O)-O;return F>q&&(q=F),q+=O*2,q},I.prototype.tileNodesByFavoringDim=function(E,_,D){var O=m.TILING_PADDING_VERTICAL,N=m.TILING_PADDING_HORIZONTAL,P=m.TILING_COMPARE_BY,B={rows:[],rowWidth:[],rowHeight:[],width:0,height:_,verticalPadding:O,horizontalPadding:N,centerX:0,centerY:0};P&&(B.idealRowWidth=this.calcIdealRowWidth(E,D));var F=o(function(Q){return Q.rect.width*Q.rect.height},"getNodeArea"),V=o(function(Q,ue){return F(ue)-F(Q)},"areaCompareFcn");E.sort(function(oe,Q){var ue=V;return B.idealRowWidth?(ue=P,ue(oe.id,Q.id)):ue(oe,Q)});for(var $=0,U=0,j=0;j0&&(B+=E.horizontalPadding),E.rowWidth[D]=B,E.width0&&(F+=E.verticalPadding);var V=0;F>E.rowHeight[D]&&(V=E.rowHeight[D],E.rowHeight[D]=F,V=E.rowHeight[D]-V),E.height+=V,E.rows[D].push(_)},I.prototype.getShortestRowIndex=function(E){for(var _=-1,D=Number.MAX_VALUE,O=0;OD&&(_=O,D=E.rowWidth[O]);return _},I.prototype.canAddHorizontal=function(E,_,D){if(E.idealRowWidth){var O=E.rows.length-1,N=E.rowWidth[O];return N+_+E.horizontalPadding<=E.idealRowWidth}var P=this.getShortestRowIndex(E);if(P<0)return!0;var B=E.rowWidth[P];if(B+E.horizontalPadding+_<=E.width)return!0;var F=0;E.rowHeight[P]0&&(F=D+E.verticalPadding-E.rowHeight[P]);var V;E.width-B>=_+E.horizontalPadding?V=(E.height+F)/(B+_+E.horizontalPadding):V=(E.height+F)/E.width,F=D+E.verticalPadding;var $;return E.width<_?$=(E.height+F)/_:$=(E.height+F)/E.width,$<1&&($=1/$),V<1&&(V=1/V),V<$},I.prototype.shiftToLastRow=function(E){var _=this.getLongestRowIndex(E),D=E.rowWidth.length-1,O=E.rows[_],N=O[O.length-1],P=N.width+E.horizontalPadding;if(E.width-E.rowWidth[D]>P&&_!=D){O.splice(-1,1),E.rows[D].push(N),E.rowWidth[_]=E.rowWidth[_]-P,E.rowWidth[D]=E.rowWidth[D]+P,E.width=E.rowWidth[instance.getLongestRowIndex(E)];for(var B=Number.MIN_VALUE,F=0;FB&&(B=O[F].height);_>0&&(B+=E.verticalPadding);var V=E.rowHeight[_]+E.rowHeight[D];E.rowHeight[_]=B,E.rowHeight[D]0)for(var q=N;q<=P;q++)ee[0]+=this.grid[q][B-1].length+this.grid[q][B].length-1;if(P0)for(var q=B;q<=F;q++)ee[3]+=this.grid[N-1][q].length+this.grid[N][q].length-1;for(var oe=w.MAX_VALUE,Q,ue,te=0;te{var u=l(551).FDLayoutNode,h=l(551).IMath;function f(p,m,g,y){u.call(this,p,m,g,y)}o(f,"CoSENode"),f.prototype=Object.create(u.prototype);for(var d in u)f[d]=u[d];f.prototype.calculateDisplacement=function(){var p=this.graphManager.getLayout();this.getChild()!=null&&this.fixedNodeWeight?(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.fixedNodeWeight,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.fixedNodeWeight):(this.displacementX+=p.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY+=p.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren),Math.abs(this.displacementX)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementX=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementX)),Math.abs(this.displacementY)>p.coolingFactor*p.maxNodeDisplacement&&(this.displacementY=p.coolingFactor*p.maxNodeDisplacement*h.sign(this.displacementY)),this.child&&this.child.getNodes().length>0&&this.propogateDisplacementToChildren(this.displacementX,this.displacementY)},f.prototype.propogateDisplacementToChildren=function(p,m){for(var g=this.getChild().getNodes(),y,v=0;v{function u(g){if(Array.isArray(g)){for(var y=0,v=Array(g.length);y0){var et=0;Oe.forEach(function(lt){he=="horizontal"?(ye.set(lt,x.has(lt)?b[x.get(lt)]:se.get(lt)),et+=ye.get(lt)):(ye.set(lt,x.has(lt)?T[x.get(lt)]:se.get(lt)),et+=ye.get(lt))}),et=et/Oe.length,We.forEach(function(lt){z.has(lt)||ye.set(lt,et)})}else{var Ue=0;We.forEach(function(lt){he=="horizontal"?Ue+=x.has(lt)?b[x.get(lt)]:se.get(lt):Ue+=x.has(lt)?T[x.get(lt)]:se.get(lt)}),Ue=Ue/We.length,We.forEach(function(lt){ye.set(lt,Ue)})}});for(var ze=o(function(){var Oe=_e.shift(),et=Y.get(Oe);et.forEach(function(Ue){if(ye.get(Ue.id)lt&&(lt=yt),ftGt&&(Gt=ft)}}catch(Ct){Lt=!0,dt=Ct}finally{try{!vt&&nt.return&&nt.return()}finally{if(Lt)throw dt}}var Ur=(et+lt)/2-(Ue+Gt)/2,_t=!0,bn=!1,Br=void 0;try{for(var cr=We[Symbol.iterator](),ar;!(_t=(ar=cr.next()).done);_t=!0){var _r=ar.value;ye.set(_r,ye.get(_r)+Ur)}}catch(Ct){bn=!0,Br=Ct}finally{try{!_t&&cr.return&&cr.return()}finally{if(bn)throw Br}}})}return ye},"findAppropriatePositionForRelativePlacement"),R=o(function(Y){var he=0,z=0,se=0,le=0;if(Y.forEach(function(Re){Re.left?b[x.get(Re.left)]-b[x.get(Re.right)]>=0?he++:z++:T[x.get(Re.top)]-T[x.get(Re.bottom)]>=0?se++:le++}),he>z&&se>le)for(var ke=0;kez)for(var ve=0;vele)for(var ye=0;ye1)y.fixedNodeConstraint.forEach(function(xe,Y){O[Y]=[xe.position.x,xe.position.y],N[Y]=[b[x.get(xe.nodeId)],T[x.get(xe.nodeId)]]}),P=!0;else if(y.alignmentConstraint)(function(){var xe=0;if(y.alignmentConstraint.vertical){for(var Y=y.alignmentConstraint.vertical,he=o(function(ye){var Re=new Set;Y[ye].forEach(function(Ke){Re.add(Ke)});var _e=new Set([].concat(u(Re)).filter(function(Ke){return F.has(Ke)})),ze=void 0;_e.size>0?ze=b[x.get(_e.values().next().value)]:ze=L(Re).x,Y[ye].forEach(function(Ke){O[xe]=[ze,T[x.get(Ke)]],N[xe]=[b[x.get(Ke)],T[x.get(Ke)]],xe++})},"_loop2"),z=0;z0?ze=b[x.get(_e.values().next().value)]:ze=L(Re).y,se[ye].forEach(function(Ke){O[xe]=[b[x.get(Ke)],ze],N[xe]=[b[x.get(Ke)],T[x.get(Ke)]],xe++})},"_loop3"),ke=0;kej&&(j=U[q].length,ee=q);if(j<$.size/2)R(y.relativePlacementConstraint),P=!1,B=!1;else{var oe=new Map,Q=new Map,ue=[];U[ee].forEach(function(xe){V.get(xe).forEach(function(Y){Y.direction=="horizontal"?(oe.has(xe)?oe.get(xe).push(Y):oe.set(xe,[Y]),oe.has(Y.id)||oe.set(Y.id,[]),ue.push({left:xe,right:Y.id})):(Q.has(xe)?Q.get(xe).push(Y):Q.set(xe,[Y]),Q.has(Y.id)||Q.set(Y.id,[]),ue.push({top:xe,bottom:Y.id}))})}),R(ue),B=!1;var te=I(oe,"horizontal"),re=I(Q,"vertical");U[ee].forEach(function(xe,Y){N[Y]=[b[x.get(xe)],T[x.get(xe)]],O[Y]=[],te.has(xe)?O[Y][0]=te.get(xe):O[Y][0]=b[x.get(xe)],re.has(xe)?O[Y][1]=re.get(xe):O[Y][1]=T[x.get(xe)]}),P=!0}}if(P){for(var J=void 0,K=d.transpose(O),ae=d.transpose(N),Z=0;Z0){var Be={x:0,y:0};y.fixedNodeConstraint.forEach(function(xe,Y){var he={x:b[x.get(xe.nodeId)],y:T[x.get(xe.nodeId)]},z=xe.position,se=A(z,he);Be.x+=se.x,Be.y+=se.y}),Be.x/=y.fixedNodeConstraint.length,Be.y/=y.fixedNodeConstraint.length,b.forEach(function(xe,Y){b[Y]+=Be.x}),T.forEach(function(xe,Y){T[Y]+=Be.y}),y.fixedNodeConstraint.forEach(function(xe){b[x.get(xe.nodeId)]=xe.position.x,T[x.get(xe.nodeId)]=xe.position.y})}if(y.alignmentConstraint){if(y.alignmentConstraint.vertical)for(var Ye=y.alignmentConstraint.vertical,He=o(function(Y){var he=new Set;Ye[Y].forEach(function(le){he.add(le)});var z=new Set([].concat(u(he)).filter(function(le){return F.has(le)})),se=void 0;z.size>0?se=b[x.get(z.values().next().value)]:se=L(he).x,he.forEach(function(le){F.has(le)||(b[x.get(le)]=se)})},"_loop4"),Le=0;Le0?se=T[x.get(z.values().next().value)]:se=L(he).y,he.forEach(function(le){F.has(le)||(T[x.get(le)]=se)})},"_loop5"),Ce=0;Ce{a.exports=t})},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(45);return i})()})});var P4e=sa((F4,Pz)=>{"use strict";o((function(e,r){typeof F4=="object"&&typeof Pz=="object"?Pz.exports=r(Oz()):typeof define=="function"&&define.amd?define(["cose-base"],r):typeof F4=="object"?F4.cytoscapeFcose=r(Oz()):e.cytoscapeFcose=r(e.coseBase)}),"webpackUniversalModuleDefinition")(F4,function(t){return(()=>{"use strict";var e={658:(a=>{a.exports=Object.assign!=null?Object.assign.bind(Object):function(s){for(var l=arguments.length,u=Array(l>1?l-1:0),h=1;h{var u=(function(){function d(p,m){var g=[],y=!0,v=!1,x=void 0;try{for(var b=p[Symbol.iterator](),T;!(y=(T=b.next()).done)&&(g.push(T.value),!(m&&g.length===m));y=!0);}catch(S){v=!0,x=S}finally{try{!y&&b.return&&b.return()}finally{if(v)throw x}}return g}return o(d,"sliceIterator"),function(p,m){if(Array.isArray(p))return p;if(Symbol.iterator in Object(p))return d(p,m);throw new TypeError("Invalid attempt to destructure non-iterable instance")}})(),h=l(140).layoutBase.LinkedList,f={};f.getTopMostNodes=function(d){for(var p={},m=0;m0&&P.merge($)});for(var B=0;B1){T=x[0],S=T.connectedEdges().length,x.forEach(function(N){N.connectedEdges().length0&&g.set("dummy"+(g.size+1),C),A},f.relocateComponent=function(d,p,m){if(!m.fixedNodeConstraint){var g=Number.POSITIVE_INFINITY,y=Number.NEGATIVE_INFINITY,v=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY;if(m.quality=="draft"){var b=!0,T=!1,S=void 0;try{for(var w=p.nodeIndexes[Symbol.iterator](),k;!(b=(k=w.next()).done);b=!0){var C=k.value,A=u(C,2),L=A[0],I=A[1],R=m.cy.getElementById(L);if(R){var E=R.boundingBox(),_=p.xCoords[I]-E.w/2,D=p.xCoords[I]+E.w/2,O=p.yCoords[I]-E.h/2,N=p.yCoords[I]+E.h/2;_y&&(y=D),Ox&&(x=N)}}}catch($){T=!0,S=$}finally{try{!b&&w.return&&w.return()}finally{if(T)throw S}}var P=d.x-(y+g)/2,B=d.y-(x+v)/2;p.xCoords=p.xCoords.map(function($){return $+P}),p.yCoords=p.yCoords.map(function($){return $+B})}else{Object.keys(p).forEach(function($){var U=p[$],j=U.getRect().x,ee=U.getRect().x+U.getRect().width,q=U.getRect().y,oe=U.getRect().y+U.getRect().height;jy&&(y=ee),qx&&(x=oe)});var F=d.x-(y+g)/2,V=d.y-(x+v)/2;Object.keys(p).forEach(function($){var U=p[$];U.setCenter(U.getCenterX()+F,U.getCenterY()+V)})}}},f.calcBoundingBox=function(d,p,m,g){for(var y=Number.MAX_SAFE_INTEGER,v=Number.MIN_SAFE_INTEGER,x=Number.MAX_SAFE_INTEGER,b=Number.MIN_SAFE_INTEGER,T=void 0,S=void 0,w=void 0,k=void 0,C=d.descendants().not(":parent"),A=C.length,L=0;LT&&(y=T),vw&&(x=w),b{var u=l(548),h=l(140).CoSELayout,f=l(140).CoSENode,d=l(140).layoutBase.PointD,p=l(140).layoutBase.DimensionD,m=l(140).layoutBase.LayoutConstants,g=l(140).layoutBase.FDLayoutConstants,y=l(140).CoSEConstants,v=o(function(b,T){var S=b.cy,w=b.eles,k=w.nodes(),C=w.edges(),A=void 0,L=void 0,I=void 0,R={};b.randomize&&(A=T.nodeIndexes,L=T.xCoords,I=T.yCoords);var E=o(function($){return typeof $=="function"},"isFn"),_=o(function($,U){return E($)?$(U):$},"optFn"),D=u.calcParentsWithoutChildren(S,w),O=o(function V($,U,j,ee){for(var q=U.length,oe=0;oe0){var K=void 0;K=j.getGraphManager().add(j.newGraph(),te),V(K,ue,j,ee)}}},"processChildrenList"),N=o(function($,U,j){for(var ee=0,q=0,oe=0;oe0?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=ee/q:E(b.idealEdgeLength)?y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=50:y.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=b.idealEdgeLength,y.MIN_REPULSION_DIST=g.MIN_REPULSION_DIST=g.DEFAULT_EDGE_LENGTH/10,y.DEFAULT_RADIAL_SEPARATION=g.DEFAULT_EDGE_LENGTH)},"processEdges"),P=o(function($,U){U.fixedNodeConstraint&&($.constraints.fixedNodeConstraint=U.fixedNodeConstraint),U.alignmentConstraint&&($.constraints.alignmentConstraint=U.alignmentConstraint),U.relativePlacementConstraint&&($.constraints.relativePlacementConstraint=U.relativePlacementConstraint)},"processConstraints");b.nestingFactor!=null&&(y.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=g.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=b.nestingFactor),b.gravity!=null&&(y.DEFAULT_GRAVITY_STRENGTH=g.DEFAULT_GRAVITY_STRENGTH=b.gravity),b.numIter!=null&&(y.MAX_ITERATIONS=g.MAX_ITERATIONS=b.numIter),b.gravityRange!=null&&(y.DEFAULT_GRAVITY_RANGE_FACTOR=g.DEFAULT_GRAVITY_RANGE_FACTOR=b.gravityRange),b.gravityCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_STRENGTH=g.DEFAULT_COMPOUND_GRAVITY_STRENGTH=b.gravityCompound),b.gravityRangeCompound!=null&&(y.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=g.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=b.gravityRangeCompound),b.initialEnergyOnIncremental!=null&&(y.DEFAULT_COOLING_FACTOR_INCREMENTAL=g.DEFAULT_COOLING_FACTOR_INCREMENTAL=b.initialEnergyOnIncremental),b.tilingCompareBy!=null&&(y.TILING_COMPARE_BY=b.tilingCompareBy),b.quality=="proof"?m.QUALITY=2:m.QUALITY=0,y.NODE_DIMENSIONS_INCLUDE_LABELS=g.NODE_DIMENSIONS_INCLUDE_LABELS=m.NODE_DIMENSIONS_INCLUDE_LABELS=b.nodeDimensionsIncludeLabels,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!b.randomize,y.ANIMATE=g.ANIMATE=m.ANIMATE=b.animate,y.TILE=b.tile,y.TILING_PADDING_VERTICAL=typeof b.tilingPaddingVertical=="function"?b.tilingPaddingVertical.call():b.tilingPaddingVertical,y.TILING_PADDING_HORIZONTAL=typeof b.tilingPaddingHorizontal=="function"?b.tilingPaddingHorizontal.call():b.tilingPaddingHorizontal,y.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=m.DEFAULT_INCREMENTAL=!0,y.PURE_INCREMENTAL=!b.randomize,m.DEFAULT_UNIFORM_LEAF_NODE_SIZES=b.uniformNodeDimensions,b.step=="transformed"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!1),b.step=="enforced"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!1),b.step=="cose"&&(y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!1,y.APPLY_LAYOUT=!0),b.step=="all"&&(b.randomize?y.TRANSFORM_ON_CONSTRAINT_HANDLING=!0:y.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,y.ENFORCE_CONSTRAINTS=!0,y.APPLY_LAYOUT=!0),b.fixedNodeConstraint||b.alignmentConstraint||b.relativePlacementConstraint?y.TREE_REDUCTION_ON_INCREMENTAL=!1:y.TREE_REDUCTION_ON_INCREMENTAL=!0;var B=new h,F=B.newGraphManager();return O(F.addRoot(),u.getTopMostNodes(k),B,b),N(B,F,C),P(B,b),B.runLayout(),R},"coseLayout");a.exports={coseLayout:v}}),212:((a,s,l)=>{var u=(function(){function b(T,S){for(var w=0;w0)if(N){var F=d.getTopMostNodes(w.eles.nodes());if(E=d.connectComponents(k,w.eles,F),E.forEach(function(Te){var W=Te.boundingBox();_.push({x:W.x1+W.w/2,y:W.y1+W.h/2})}),w.randomize&&E.forEach(function(Te){w.eles=Te,A.push(m(w))}),w.quality=="default"||w.quality=="proof"){var V=k.collection();if(w.tile){var $=new Map,U=[],j=[],ee=0,q={nodeIndexes:$,xCoords:U,yCoords:j},oe=[];if(E.forEach(function(Te,W){Te.edges().length==0&&(Te.nodes().forEach(function(Ve,pe){V.merge(Te.nodes()[pe]),Ve.isParent()||(q.nodeIndexes.set(Te.nodes()[pe].id(),ee++),q.xCoords.push(Te.nodes()[0].position().x),q.yCoords.push(Te.nodes()[0].position().y))}),oe.push(W))}),V.length>1){var Q=V.boundingBox();_.push({x:Q.x1+Q.w/2,y:Q.y1+Q.h/2}),E.push(V),A.push(q);for(var ue=oe.length-1;ue>=0;ue--)E.splice(oe[ue],1),A.splice(oe[ue],1),_.splice(oe[ue],1)}}E.forEach(function(Te,W){w.eles=Te,R.push(y(w,A[W])),d.relocateComponent(_[W],R[W],w)})}else E.forEach(function(Te,W){d.relocateComponent(_[W],A[W],w)});var te=new Set;if(E.length>1){var re=[],J=C.filter(function(Te){return Te.css("display")=="none"});E.forEach(function(Te,W){var Ve=void 0;if(w.quality=="draft"&&(Ve=A[W].nodeIndexes),Te.nodes().not(J).length>0){var pe={};pe.edges=[],pe.nodes=[];var Be=void 0;Te.nodes().not(J).forEach(function(Ye){if(w.quality=="draft")if(!Ye.isParent())Be=Ve.get(Ye.id()),pe.nodes.push({x:A[W].xCoords[Be]-Ye.boundingbox().w/2,y:A[W].yCoords[Be]-Ye.boundingbox().h/2,width:Ye.boundingbox().w,height:Ye.boundingbox().h});else{var He=d.calcBoundingBox(Ye,A[W].xCoords,A[W].yCoords,Ve);pe.nodes.push({x:He.topLeftX,y:He.topLeftY,width:He.width,height:He.height})}else R[W][Ye.id()]&&pe.nodes.push({x:R[W][Ye.id()].getLeft(),y:R[W][Ye.id()].getTop(),width:R[W][Ye.id()].getWidth(),height:R[W][Ye.id()].getHeight()})}),Te.edges().forEach(function(Ye){var He=Ye.source(),Le=Ye.target();if(He.css("display")!="none"&&Le.css("display")!="none")if(w.quality=="draft"){var Ie=Ve.get(He.id()),Ne=Ve.get(Le.id()),Ce=[],Fe=[];if(He.isParent()){var fe=d.calcBoundingBox(He,A[W].xCoords,A[W].yCoords,Ve);Ce.push(fe.topLeftX+fe.width/2),Ce.push(fe.topLeftY+fe.height/2)}else Ce.push(A[W].xCoords[Ie]),Ce.push(A[W].yCoords[Ie]);if(Le.isParent()){var xe=d.calcBoundingBox(Le,A[W].xCoords,A[W].yCoords,Ve);Fe.push(xe.topLeftX+xe.width/2),Fe.push(xe.topLeftY+xe.height/2)}else Fe.push(A[W].xCoords[Ne]),Fe.push(A[W].yCoords[Ne]);pe.edges.push({startX:Ce[0],startY:Ce[1],endX:Fe[0],endY:Fe[1]})}else R[W][He.id()]&&R[W][Le.id()]&&pe.edges.push({startX:R[W][He.id()].getCenterX(),startY:R[W][He.id()].getCenterY(),endX:R[W][Le.id()].getCenterX(),endY:R[W][Le.id()].getCenterY()})}),pe.nodes.length>0&&(re.push(pe),te.add(W))}});var K=O.packComponents(re,w.randomize).shifts;if(w.quality=="draft")A.forEach(function(Te,W){var Ve=Te.xCoords.map(function(Be){return Be+K[W].dx}),pe=Te.yCoords.map(function(Be){return Be+K[W].dy});Te.xCoords=Ve,Te.yCoords=pe});else{var ae=0;te.forEach(function(Te){Object.keys(R[Te]).forEach(function(W){var Ve=R[Te][W];Ve.setCenter(Ve.getCenterX()+K[ae].dx,Ve.getCenterY()+K[ae].dy)}),ae++})}}}else{var P=w.eles.boundingBox();if(_.push({x:P.x1+P.w/2,y:P.y1+P.h/2}),w.randomize){var B=m(w);A.push(B)}w.quality=="default"||w.quality=="proof"?(R.push(y(w,A[0])),d.relocateComponent(_[0],R[0],w)):d.relocateComponent(_[0],A[0],w)}var Z=o(function(W,Ve){if(w.quality=="default"||w.quality=="proof"){typeof W=="number"&&(W=Ve);var pe=void 0,Be=void 0,Ye=W.data("id");return R.forEach(function(Le){Ye in Le&&(pe={x:Le[Ye].getRect().getCenterX(),y:Le[Ye].getRect().getCenterY()},Be=Le[Ye])}),w.nodeDimensionsIncludeLabels&&(Be.labelWidth&&(Be.labelPosHorizontal=="left"?pe.x+=Be.labelWidth/2:Be.labelPosHorizontal=="right"&&(pe.x-=Be.labelWidth/2)),Be.labelHeight&&(Be.labelPosVertical=="top"?pe.y+=Be.labelHeight/2:Be.labelPosVertical=="bottom"&&(pe.y-=Be.labelHeight/2))),pe==null&&(pe={x:W.position("x"),y:W.position("y")}),{x:pe.x,y:pe.y}}else{var He=void 0;return A.forEach(function(Le){var Ie=Le.nodeIndexes.get(W.id());Ie!=null&&(He={x:Le.xCoords[Ie],y:Le.yCoords[Ie]})}),He==null&&(He={x:W.position("x"),y:W.position("y")}),{x:He.x,y:He.y}}},"getPositions");if(w.quality=="default"||w.quality=="proof"||w.randomize){var de=d.calcParentsWithoutChildren(k,C),ne=C.filter(function(Te){return Te.css("display")=="none"});w.eles=C.not(ne),C.nodes().not(":parent").not(ne).layoutPositions(S,w,Z),de.length>0&&de.forEach(function(Te){Te.position(Z(Te))})}else console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'.")},"run")}]),b})();a.exports=x}),657:((a,s,l)=>{var u=l(548),h=l(140).layoutBase.Matrix,f=l(140).layoutBase.SVD,d=o(function(m){var g=m.cy,y=m.eles,v=y.nodes(),x=y.nodes(":parent"),b=new Map,T=new Map,S=new Map,w=[],k=[],C=[],A=[],L=[],I=[],R=[],E=[],_=void 0,D=void 0,O=1e8,N=1e-9,P=m.piTol,B=m.samplingType,F=m.nodeSeparation,V=void 0,$=o(function(){for(var he=0,z=0,se=!1;z=ke;){ye=le[ke++];for(var We=w[ye],Oe=0;Oeze&&(ze=L[Ue],Ke=Ue)}return Ke},"BFS"),j=o(function(he){var z=void 0;if(he){z=Math.floor(Math.random()*D),_=z;for(var le=0;le=1)break;ze=_e}for(var We=0;We=1)break;ze=_e}for(var et=0;et0&&(z.isParent()?w[he].push(S.get(z.id())):w[he].push(z.id()))})});var de=o(function(he){var z=T.get(he),se=void 0;b.get(he).forEach(function(le){g.getElementById(le).isParent()?se=S.get(le):se=le,w[z].push(se),w[T.get(se)].push(he)})},"_loop"),ne=!0,Te=!1,W=void 0;try{for(var Ve=b.keys()[Symbol.iterator](),pe;!(ne=(pe=Ve.next()).done);ne=!0){var Be=pe.value;de(Be)}}catch(Y){Te=!0,W=Y}finally{try{!ne&&Ve.return&&Ve.return()}finally{if(Te)throw W}}D=T.size;var Ye=void 0;if(D>2){V=D{var u=l(212),h=o(function(d){d&&d("layout","fcose",u)},"register");typeof cytoscape<"u"&&h(cytoscape),a.exports=h}),140:(a=>{a.exports=t})},r={};function n(a){var s=r[a];if(s!==void 0)return s.exports;var l=r[a]={exports:{}};return e[a](l,l.exports,n),l.exports}o(n,"__webpack_require__");var i=n(579);return i})()})});var by,m0,Bz=M(()=>{"use strict";nc();by=o(t=>`${t}`,"wrapIcon"),m0={prefix:"mermaid-architecture",height:80,width:80,icons:{database:{body:by('')},server:{body:by('')},disk:{body:by('')},internet:{body:by('')},cloud:{body:by('')},unknown:AA,blank:{body:by("")}}}});var B4e,F4e,$4e,z4e,G4e=M(()=>{"use strict";Xt();zo();nc();gr();Bz();PC();tr();B4e=o(async function(t,e,r){let n=r.getConfigField("padding"),i=r.getConfigField("iconSize"),a=i/2,s=i/6,l=s/2;await Promise.all(e.edges().map(async u=>{let{source:h,sourceDir:f,sourceArrow:d,sourceGroup:p,target:m,targetDir:g,targetArrow:y,targetGroup:v,label:x}=OC(u),{x:b,y:T}=u[0].sourceEndpoint(),{x:S,y:w}=u[0].midpoint(),{x:k,y:C}=u[0].targetEndpoint(),A=n+4;if(p&&(Xa(f)?b+=f==="L"?-A:A:T+=f==="T"?-A:A+18),v&&(Xa(g)?k+=g==="L"?-A:A:C+=g==="T"?-A:A+18),!p&&r.getNode(h)?.type==="junction"&&(Xa(f)?b+=f==="L"?a:-a:T+=f==="T"?a:-a),!v&&r.getNode(m)?.type==="junction"&&(Xa(g)?k+=g==="L"?a:-a:C+=g==="T"?a:-a),u[0]._private.rscratch){let L=t.insert("g");if(L.insert("path").attr("d",`M ${b},${T} L ${S},${w} L${k},${C} `).attr("class","edge").attr("id",xc(h,m,{prefix:"L"})),d){let I=Xa(f)?M4[f](b,s):b-l,R=nu(f)?M4[f](T,s):T-l;L.insert("polygon").attr("points",_z[f](s)).attr("transform",`translate(${I},${R})`).attr("class","arrow")}if(y){let I=Xa(g)?M4[g](k,s):k-l,R=nu(g)?M4[g](C,s):C-l;L.insert("polygon").attr("points",_z[g](s)).attr("transform",`translate(${I},${R})`).attr("class","arrow")}if(x){let I=I4(f,g)?"XY":Xa(f)?"X":"Y",R=0;I==="X"?R=Math.abs(b-k):I==="Y"?R=Math.abs(T-C)/1.5:R=Math.abs(b-k)/2;let E=L.append("g");if(await di(E,x,{useHtmlLabels:!1,width:R,classes:"architecture-service-label"},ge()),E.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),I==="X")E.attr("transform","translate("+S+", "+w+")");else if(I==="Y")E.attr("transform","translate("+S+", "+w+") rotate(-90)");else if(I==="XY"){let _=O4(f,g);if(_&&A4e(_)){let D=E.node().getBoundingClientRect(),[O,N]=D4e(_);E.attr("dominant-baseline","auto").attr("transform",`rotate(${-1*O*N*45})`);let P=E.node().getBoundingClientRect();E.attr("transform",` + translate(${S}, ${w-D.height/2}) + translate(${O*P.width/2}, ${N*P.height/2}) + rotate(${-1*O*N*45}, 0, ${D.height/2}) + `)}}}}}))},"drawEdges"),F4e=o(async function(t,e,r){let i=r.getConfigField("padding")*.75,a=r.getConfigField("fontSize"),l=r.getConfigField("iconSize")/2;await Promise.all(e.nodes().map(async u=>{let h=td(u);if(h.type==="group"){let{h:f,w:d,x1:p,y1:m}=u.boundingBox(),g=t.append("rect");g.attr("id",`group-${h.id}`).attr("x",p+l).attr("y",m+l).attr("width",d).attr("height",f).attr("class","node-bkg");let y=t.append("g"),v=p,x=m;if(h.icon){let b=y.append("g");b.html(`${await _s(h.icon,{height:i,width:i,fallbackPrefix:m0.prefix})}`),b.attr("transform","translate("+(v+l+1)+", "+(x+l+1)+")"),v+=i,x+=a/2-1-2}if(h.label){let b=y.append("g");await di(b,h.label,{useHtmlLabels:!1,width:d,classes:"architecture-service-label"},ge()),b.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","start").attr("text-anchor","start"),b.attr("transform","translate("+(v+l+4)+", "+(x+l+2)+")")}r.setElementForId(h.id,g)}}))},"drawGroups"),$4e=o(async function(t,e,r){let n=ge();for(let i of r){let a=e.append("g"),s=t.getConfigField("iconSize");if(i.title){let f=a.append("g");await di(f,i.title,{useHtmlLabels:!1,width:s*1.5,classes:"architecture-service-label"},n),f.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle"),f.attr("transform","translate("+s/2+", "+s+")")}let l=a.append("g");if(i.icon)l.html(`${await _s(i.icon,{height:s,width:s,fallbackPrefix:m0.prefix})}`);else if(i.iconText){l.html(`${await _s("blank",{height:s,width:s,fallbackPrefix:m0.prefix})}`);let p=l.append("g").append("foreignObject").attr("width",s).attr("height",s).append("div").attr("class","node-icon-text").attr("style",`height: ${s}px;`).append("div").html(sr(i.iconText,n)),m=parseInt(window.getComputedStyle(p.node(),null).getPropertyValue("font-size").replace(/\D/g,""))??16;p.attr("style",`-webkit-line-clamp: ${Math.floor((s-2)/m)};`)}else l.append("path").attr("class","node-bkg").attr("id","node-"+i.id).attr("d",`M0 ${s} v${-s} q0,-5 5,-5 h${s} q5,0 5,5 v${s} H0 Z`);a.attr("id",`service-${i.id}`).attr("class","architecture-service");let{width:u,height:h}=a.node().getBBox();i.width=u,i.height=h,t.setElementForId(i.id,a)}return 0},"drawServices"),z4e=o(function(t,e,r){r.forEach(n=>{let i=e.append("g"),a=t.getConfigField("iconSize");i.append("g").append("rect").attr("id","node-"+n.id).attr("fill-opacity","0").attr("width",a).attr("height",a),i.attr("class","architecture-junction");let{width:l,height:u}=i._groups[0][0].getBBox();i.width=l,i.height=u,t.setElementForId(n.id,i)})},"drawJunctions")});function Iit(t,e,r){t.forEach(n=>{e.add({group:"nodes",data:{type:"service",id:n.id,icon:n.icon,label:n.title,parent:n.in,width:r.getConfigField("iconSize"),height:r.getConfigField("iconSize")},classes:"node-service"})})}function Oit(t,e,r){t.forEach(n=>{e.add({group:"nodes",data:{type:"junction",id:n.id,parent:n.in,width:r.getConfigField("iconSize"),height:r.getConfigField("iconSize")},classes:"node-junction"})})}function Pit(t,e){e.nodes().map(r=>{let n=td(r);if(n.type==="group")return;n.x=r.position().x,n.y=r.position().y,t.getElementById(n.id).attr("transform","translate("+(n.x||0)+","+(n.y||0)+")")})}function Bit(t,e){t.forEach(r=>{e.add({group:"nodes",data:{type:"group",id:r.id,icon:r.icon,label:r.title,parent:r.in},classes:"node-group"})})}function Fit(t,e){t.forEach(r=>{let{lhsId:n,rhsId:i,lhsInto:a,lhsGroup:s,rhsInto:l,lhsDir:u,rhsDir:h,rhsGroup:f,title:d}=r,p=I4(r.lhsDir,r.rhsDir)?"segments":"straight",m={id:`${n}-${i}`,label:d,source:n,sourceDir:u,sourceArrow:a,sourceGroup:s,sourceEndpoint:u==="L"?"0 50%":u==="R"?"100% 50%":u==="T"?"50% 0":"50% 100%",target:i,targetDir:h,targetArrow:l,targetGroup:f,targetEndpoint:h==="L"?"0 50%":h==="R"?"100% 50%":h==="T"?"50% 0":"50% 100%"};e.add({group:"edges",data:m,classes:p})})}function $it(t,e,r){let n=o((l,u)=>Object.entries(l).reduce((h,[f,d])=>{let p=0,m=Object.entries(d);if(m.length===1)return h[f]=m[0][1],h;for(let g=0;g{let u={},h={};return Object.entries(l).forEach(([f,[d,p]])=>{let m=t.getNode(f)?.in??"default";u[p]??={},u[p][m]??=[],u[p][m].push(f),h[d]??={},h[d][m]??=[],h[d][m].push(f)}),{horiz:Object.values(n(u,"horizontal")).filter(f=>f.length>1),vert:Object.values(n(h,"vertical")).filter(f=>f.length>1)}}),[a,s]=i.reduce(([l,u],{horiz:h,vert:f})=>[[...l,...h],[...u,...f]],[[],[]]);return{horizontal:a,vertical:s}}function zit(t,e){let r=[],n=o(a=>`${a[0]},${a[1]}`,"posToStr"),i=o(a=>a.split(",").map(s=>parseInt(s)),"strToPos");return t.forEach(a=>{let s=Object.fromEntries(Object.entries(a).map(([f,d])=>[n(d),f])),l=[n([0,0])],u={},h={L:[-1,0],R:[1,0],T:[0,1],B:[0,-1]};for(;l.length>0;){let f=l.shift();if(f){u[f]=1;let d=s[f];if(d){let p=i(f);Object.entries(h).forEach(([m,g])=>{let y=n([p[0]+g[0],p[1]+g[1]]),v=s[y];v&&!u[y]&&(l.push(y),r.push({[Az[m]]:v,[Az[C4e(m)]]:d,gap:1.5*e.getConfigField("iconSize")}))})}}}}),r}function Git(t,e,r,n,i,{spatialMaps:a,groupAlignments:s}){return new Promise(l=>{let u=qe("body").append("div").attr("id","cy").attr("style","display:none"),h=Ko({container:document.getElementById("cy"),style:[{selector:"edge",style:{"curve-style":"straight",label:"data(label)","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"edge.segments",style:{"curve-style":"segments","segment-weights":"0","segment-distances":[.5],"edge-distances":"endpoints","source-endpoint":"data(sourceEndpoint)","target-endpoint":"data(targetEndpoint)"}},{selector:"node",style:{"compound-sizing-wrt-labels":"include"}},{selector:"node[label]",style:{"text-valign":"bottom","text-halign":"center","font-size":`${i.getConfigField("fontSize")}px`}},{selector:".node-service",style:{label:"data(label)",width:"data(width)",height:"data(height)"}},{selector:".node-junction",style:{width:"data(width)",height:"data(height)"}},{selector:".node-group",style:{padding:`${i.getConfigField("padding")}px`}}],layout:{name:"grid",boundingBox:{x1:0,x2:100,y1:0,y2:100}}});u.remove(),Bit(r,h),Iit(t,h,i),Oit(e,h,i),Fit(n,h);let f=$it(i,a,s),d=zit(a,i),p=h.layout({name:"fcose",quality:"proof",styleEnabled:!1,animate:!1,nodeDimensionsIncludeLabels:!1,idealEdgeLength(m){let[g,y]=m.connectedNodes(),{parent:v}=td(g),{parent:x}=td(y);return v===x?1.5*i.getConfigField("iconSize"):.5*i.getConfigField("iconSize")},edgeElasticity(m){let[g,y]=m.connectedNodes(),{parent:v}=td(g),{parent:x}=td(y);return v===x?.45:.001},alignmentConstraint:f,relativePlacementConstraint:d});p.one("layoutstop",()=>{function m(g,y,v,x){let b,T,{x:S,y:w}=g,{x:k,y:C}=y;T=(x-w+(S-v)*(w-C)/(S-k))/Math.sqrt(1+Math.pow((w-C)/(S-k),2)),b=Math.sqrt(Math.pow(x-w,2)+Math.pow(v-S,2)-Math.pow(T,2));let A=Math.sqrt(Math.pow(k-S,2)+Math.pow(C-w,2));b=b/A;let L=(k-S)*(x-w)-(C-w)*(v-S);switch(!0){case L>=0:L=1;break;case L<0:L=-1;break}let I=(k-S)*(v-S)+(C-w)*(x-w);switch(!0){case I>=0:I=1;break;case I<0:I=-1;break}return T=Math.abs(T)*L,b=b*I,{distances:T,weights:b}}o(m,"getSegmentWeights"),h.startBatch();for(let g of Object.values(h.edges()))if(g.data?.()){let{x:y,y:v}=g.source().position(),{x,y:b}=g.target().position();if(y!==x&&v!==b){let T=g.sourceEndpoint(),S=g.targetEndpoint(),{sourceDir:w}=OC(g),[k,C]=nu(w)?[T.x,S.y]:[S.x,T.y],{weights:A,distances:L}=m(T,S,k,C);g.style("segment-distances",L),g.style("segment-weights",A)}}h.endBatch(),p.run()}),p.run(),h.ready(m=>{X.info("Ready",m),l(h)})})}var V4e,Vit,U4e,H4e=M(()=>{"use strict";II();V4e=La(P4e(),1);yr();pt();nc();tu();Ei();Bz();PC();G4e();P3([{name:m0.prefix,icons:m0}]);Ko.use(V4e.default);o(Iit,"addServices");o(Oit,"addJunctions");o(Pit,"positionNodes");o(Bit,"addGroups");o(Fit,"addEdges");o($it,"getAlignments");o(zit,"getRelativeConstraints");o(Git,"layoutArchitecture");Vit=o(async(t,e,r,n)=>{let i=n.db,a=i.getServices(),s=i.getJunctions(),l=i.getGroups(),u=i.getEdges(),h=i.getDataStructures(),f=aa(e),d=f.append("g");d.attr("class","architecture-edges");let p=f.append("g");p.attr("class","architecture-services");let m=f.append("g");m.attr("class","architecture-groups"),await $4e(i,p,a),z4e(i,p,s);let g=await Git(a,s,l,u,i,h);await B4e(d,g,i),await F4e(m,g,i),Pit(i,g),ic(void 0,f,i.getConfigField("padding"),i.getConfigField("useMaxWidth"))},"draw"),U4e={draw:Vit}});var q4e={};dr(q4e,{diagram:()=>Uit});var Uit,W4e=M(()=>{"use strict";M4e();Lz();O4e();H4e();Uit={parser:Rz,get db(){return new xy},renderer:U4e,styles:I4e}});var Ty,Fz=M(()=>{"use strict";Ra();qn();tr();$t();ci();Ty=class{constructor(){this.nodes=[];this.levels=new Map;this.outerNodes=[];this.classes=new Map;this.setAccTitle=Rr;this.getAccTitle=Mr;this.setDiagramTitle=$r;this.getDiagramTitle=Pr;this.getAccDescription=Or;this.setAccDescription=Ir}static{o(this,"TreeMapDB")}getNodes(){return this.nodes}getConfig(){let e=ur,r=Qt();return Vn({...e.treemap,...r.treemap??{}})}addNode(e,r){this.nodes.push(e),this.levels.set(e,r),r===0&&(this.outerNodes.push(e),this.root??=e)}getRoot(){return{name:"",children:this.outerNodes}}addClass(e,r){let n=this.classes.get(e)??{id:e,styles:[],textStyles:[]},i=r.replace(/\\,/g,"\xA7\xA7\xA7").replace(/,/g,";").replace(/§§§/g,",").split(";");i&&i.forEach(a=>{D2(a)&&(n?.textStyles?n.textStyles.push(a):n.textStyles=[a]),n?.styles?n.styles.push(a):n.styles=[a]}),this.classes.set(e,n)}getClasses(){return this.classes}getStylesForClass(e){return this.classes.get(e)?.styles??[]}clear(){Sr(),this.nodes=[],this.levels=new Map,this.outerNodes=[],this.classes=new Map,this.root=void 0}}});function j4e(t){if(!t.length)return[];let e=[],r=[];return t.forEach(n=>{let i={name:n.name,children:n.type==="Leaf"?void 0:[]};for(i.classSelector=n?.classSelector,n?.cssCompiledStyles&&(i.cssCompiledStyles=[n.cssCompiledStyles]),n.type==="Leaf"&&n.value!==void 0&&(i.value=n.value);r.length>0&&r[r.length-1].level>=n.level;)r.pop();if(r.length===0)e.push(i);else{let a=r[r.length-1].node;a.children?a.children.push(i):a.children=[i]}n.type!=="Leaf"&&r.push({node:i,level:n.level})}),e}var K4e=M(()=>{"use strict";o(j4e,"buildHierarchy")});var Yit,Xit,$z,Q4e=M(()=>{"use strict";Uf();pt();r0();K4e();Fz();Yit=o((t,e)=>{nl(t,e);let r=[];for(let a of t.TreemapRows??[])a.$type==="ClassDefStatement"&&e.addClass(a.className??"",a.styleText??"");for(let a of t.TreemapRows??[]){let s=a.item;if(!s)continue;let l=a.indent?parseInt(a.indent):0,u=Xit(s),h=s.classSelector?e.getStylesForClass(s.classSelector):[],f=h.length>0?h.join(";"):void 0,d={level:l,name:u,type:s.$type,value:s.value,classSelector:s.classSelector,cssCompiledStyles:f};r.push(d)}let n=j4e(r),i=o((a,s)=>{for(let l of a)e.addNode(l,s),l.children&&l.children.length>0&&i(l.children,s+1)},"addNodesRecursively");i(n,0)},"populate"),Xit=o(t=>t.name?String(t.name):"","getItemName"),$z={parser:{yy:void 0},parse:o(async t=>{try{let r=await bs("treemap",t);X.debug("Treemap AST:",r);let n=$z.parser?.yy;if(!(n instanceof Ty))throw new Error("parser.parser?.yy was not a TreemapDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");Yit(r,n)}catch(e){throw X.error("Error parsing treemap:",e),e}},"parse")}});var jit,wy,$4,Kit,Qit,Z4e,J4e=M(()=>{"use strict";tu();Mf();Ei();yr();$t();qn();pt();jit=10,wy=10,$4=25,Kit=o((t,e,r,n)=>{let i=n.db,a=i.getConfig(),s=a.padding??jit,l=i.getDiagramTitle(),u=i.getRoot(),{themeVariables:h}=Qt();if(!u)return;let f=l?30:0,d=aa(e),p=a.nodeWidth?a.nodeWidth*wy:960,m=a.nodeHeight?a.nodeHeight*wy:500,g=p,y=m+f;d.attr("viewBox",`0 0 ${g} ${y}`),mn(d,y,g,a.useMaxWidth);let v;try{let D=a.valueFormat||",";if(D==="$0,0")v=o(O=>"$"+cc(",")(O),"valueFormat");else if(D.startsWith("$")&&D.includes(",")){let O=/\.\d+/.exec(D),N=O?O[0]:"";v=o(P=>"$"+cc(","+N)(P),"valueFormat")}else if(D.startsWith("$")){let O=D.substring(1);v=o(N=>"$"+cc(O||"")(N),"valueFormat")}else v=cc(D)}catch(D){X.error("Error creating format function:",D),v=cc(",")}let x=no().range(["transparent",h.cScale0,h.cScale1,h.cScale2,h.cScale3,h.cScale4,h.cScale5,h.cScale6,h.cScale7,h.cScale8,h.cScale9,h.cScale10,h.cScale11]),b=no().range(["transparent",h.cScalePeer0,h.cScalePeer1,h.cScalePeer2,h.cScalePeer3,h.cScalePeer4,h.cScalePeer5,h.cScalePeer6,h.cScalePeer7,h.cScalePeer8,h.cScalePeer9,h.cScalePeer10,h.cScalePeer11]),T=no().range([h.cScaleLabel0,h.cScaleLabel1,h.cScaleLabel2,h.cScaleLabel3,h.cScaleLabel4,h.cScaleLabel5,h.cScaleLabel6,h.cScaleLabel7,h.cScaleLabel8,h.cScaleLabel9,h.cScaleLabel10,h.cScaleLabel11]);l&&d.append("text").attr("x",g/2).attr("y",f/2).attr("class","treemapTitle").attr("text-anchor","middle").attr("dominant-baseline","middle").text(l);let S=d.append("g").attr("transform",`translate(0, ${f})`).attr("class","treemapContainer"),w=U0(u).sum(D=>D.value??0).sort((D,O)=>(O.value??0)-(D.value??0)),C=N5().size([p,m]).paddingTop(D=>D.children&&D.children.length>0?$4+wy:0).paddingInner(s).paddingLeft(D=>D.children&&D.children.length>0?wy:0).paddingRight(D=>D.children&&D.children.length>0?wy:0).paddingBottom(D=>D.children&&D.children.length>0?wy:0).round(!0)(w),A=C.descendants().filter(D=>D.children&&D.children.length>0),L=S.selectAll(".treemapSection").data(A).enter().append("g").attr("class","treemapSection").attr("transform",D=>`translate(${D.x0},${D.y0})`);L.append("rect").attr("width",D=>D.x1-D.x0).attr("height",$4).attr("class","treemapSectionHeader").attr("fill","none").attr("fill-opacity",.6).attr("stroke-width",.6).attr("style",D=>D.depth===0?"display: none;":""),L.append("clipPath").attr("id",(D,O)=>`clip-section-${e}-${O}`).append("rect").attr("width",D=>Math.max(0,D.x1-D.x0-12)).attr("height",$4),L.append("rect").attr("width",D=>D.x1-D.x0).attr("height",D=>D.y1-D.y0).attr("class",(D,O)=>`treemapSection section${O}`).attr("fill",D=>x(D.data.name)).attr("fill-opacity",.6).attr("stroke",D=>b(D.data.name)).attr("stroke-width",2).attr("stroke-opacity",.4).attr("style",D=>{if(D.depth===0)return"display: none;";let O=je({cssCompiledStyles:D.data.cssCompiledStyles});return O.nodeStyles+";"+O.borderStyles.join(";")}),L.append("text").attr("class","treemapSectionLabel").attr("x",6).attr("y",$4/2).attr("dominant-baseline","middle").text(D=>D.depth===0?"":D.data.name).attr("font-weight","bold").attr("style",D=>{if(D.depth===0)return"display: none;";let O="dominant-baseline: middle; font-size: 12px; fill:"+T(D.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",N=je({cssCompiledStyles:D.data.cssCompiledStyles});return O+N.labelStyles.replace("color:","fill:")}).each(function(D){if(D.depth===0)return;let O=qe(this),N=D.data.name;O.text(N);let P=D.x1-D.x0,B=6,F;a.showValues!==!1&&D.value?F=P-10-30-10-B:F=P-B-6;let $=Math.max(15,F),U=O.node();if(U.getComputedTextLength()>$){let q=N;for(;q.length>0;){if(q=N.substring(0,q.length-1),q.length===0){O.text("..."),U.getComputedTextLength()>$&&O.text("");break}if(O.text(q+"..."),U.getComputedTextLength()<=$)break}}}),a.showValues!==!1&&L.append("text").attr("class","treemapSectionValue").attr("x",D=>D.x1-D.x0-10).attr("y",$4/2).attr("text-anchor","end").attr("dominant-baseline","middle").text(D=>D.value?v(D.value):"").attr("font-style","italic").attr("style",D=>{if(D.depth===0)return"display: none;";let O="text-anchor: end; dominant-baseline: middle; font-size: 10px; fill:"+T(D.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",N=je({cssCompiledStyles:D.data.cssCompiledStyles});return O+N.labelStyles.replace("color:","fill:")});let I=C.leaves(),R=S.selectAll(".treemapLeafGroup").data(I).enter().append("g").attr("class",(D,O)=>`treemapNode treemapLeafGroup leaf${O}${D.data.classSelector?` ${D.data.classSelector}`:""}x`).attr("transform",D=>`translate(${D.x0},${D.y0})`);R.append("rect").attr("width",D=>D.x1-D.x0).attr("height",D=>D.y1-D.y0).attr("class","treemapLeaf").attr("fill",D=>D.parent?x(D.parent.data.name):x(D.data.name)).attr("style",D=>je({cssCompiledStyles:D.data.cssCompiledStyles}).nodeStyles).attr("fill-opacity",.3).attr("stroke",D=>D.parent?x(D.parent.data.name):x(D.data.name)).attr("stroke-width",3),R.append("clipPath").attr("id",(D,O)=>`clip-${e}-${O}`).append("rect").attr("width",D=>Math.max(0,D.x1-D.x0-4)).attr("height",D=>Math.max(0,D.y1-D.y0-4)),R.append("text").attr("class","treemapLabel").attr("x",D=>(D.x1-D.x0)/2).attr("y",D=>(D.y1-D.y0)/2).attr("style",D=>{let O="text-anchor: middle; dominant-baseline: middle; font-size: 38px;fill:"+T(D.data.name)+";",N=je({cssCompiledStyles:D.data.cssCompiledStyles});return O+N.labelStyles.replace("color:","fill:")}).attr("clip-path",(D,O)=>`url(#clip-${e}-${O})`).text(D=>D.data.name).each(function(D){let O=qe(this),N=D.x1-D.x0,P=D.y1-D.y0,B=O.node(),F=4,V=N-2*F,$=P-2*F;if(V<10||$<10){O.style("display","none");return}let U=parseInt(O.style("font-size"),10),j=8,ee=28,q=.6,oe=6,Q=2;for(;B.getComputedTextLength()>V&&U>j;)U--,O.style("font-size",`${U}px`);let ue=Math.max(oe,Math.min(ee,Math.round(U*q))),te=U+Q+ue;for(;te>$&&U>j&&(U--,ue=Math.max(oe,Math.min(ee,Math.round(U*q))),!(ue$;O.style("font-size",`${U}px`),(B.getComputedTextLength()>V||U(O.x1-O.x0)/2).attr("y",function(O){return(O.y1-O.y0)/2}).attr("style",O=>{let N="text-anchor: middle; dominant-baseline: hanging; font-size: 28px;fill:"+T(O.data.name)+";",P=je({cssCompiledStyles:O.data.cssCompiledStyles});return N+P.labelStyles.replace("color:","fill:")}).attr("clip-path",(O,N)=>`url(#clip-${e}-${N})`).text(O=>O.value?v(O.value):"").each(function(O){let N=qe(this),P=this.parentNode;if(!P){N.style("display","none");return}let B=qe(P).select(".treemapLabel");if(B.empty()||B.style("display")==="none"){N.style("display","none");return}let F=parseFloat(B.style("font-size")),V=28,$=.6,U=6,j=2,ee=Math.max(U,Math.min(V,Math.round(F*$)));N.style("font-size",`${ee}px`);let oe=(O.y1-O.y0)/2+F/2+j;N.attr("y",oe);let Q=O.x1-O.x0,re=O.y1-O.y0-4,J=Q-8;N.node().getComputedTextLength()>J||oe+ee>re||ee{"use strict";tr();Zit={sectionStrokeColor:"black",sectionStrokeWidth:"1",sectionFillColor:"#efefef",leafStrokeColor:"black",leafStrokeWidth:"1",leafFillColor:"#efefef",labelColor:"black",labelFontSize:"12px",valueFontSize:"10px",valueColor:"black",titleColor:"black",titleFontSize:"14px"},Jit=o(({treemap:t}={})=>{let e=Vn(Zit,t);return` + .treemapNode.section { + stroke: ${e.sectionStrokeColor}; + stroke-width: ${e.sectionStrokeWidth}; + fill: ${e.sectionFillColor}; + } + .treemapNode.leaf { + stroke: ${e.leafStrokeColor}; + stroke-width: ${e.leafStrokeWidth}; + fill: ${e.leafFillColor}; + } + .treemapLabel { + fill: ${e.labelColor}; + font-size: ${e.labelFontSize}; + } + .treemapValue { + fill: ${e.valueColor}; + font-size: ${e.valueFontSize}; + } + .treemapTitle { + fill: ${e.titleColor}; + font-size: ${e.titleFontSize}; + } + `},"getStyles"),e3e=Jit});var r3e={};dr(r3e,{diagram:()=>eat});var eat,n3e=M(()=>{"use strict";Fz();Q4e();J4e();t3e();eat={parser:$z,get db(){return new Ty},renderer:Z4e,styles:e3e}});var zat={};dr(zat,{default:()=>$at});nc();_A();vd();var z_e=o(t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),"detector"),G_e=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(OQ(),IQ));return{id:"c4",diagram:t}},"loader"),V_e={id:"c4",detector:z_e,loader:G_e},PQ=V_e;var bfe="flowchart",oWe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-wrapper"||e?.flowchart?.defaultRenderer==="elk"?!1:/^\s*graph/.test(t),"detector"),lWe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(_E(),AE));return{id:bfe,diagram:t}},"loader"),cWe={id:bfe,detector:oWe,loader:lWe},Tfe=cWe;var wfe="flowchart-v2",uWe=o((t,e)=>e?.flowchart?.defaultRenderer==="dagre-d3"?!1:(e?.flowchart?.defaultRenderer==="elk"&&(e.layout="elk"),/^\s*graph/.test(t)&&e?.flowchart?.defaultRenderer==="dagre-wrapper"?!0:/^\s*flowchart/.test(t)),"detector"),hWe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(_E(),AE));return{id:wfe,diagram:t}},"loader"),fWe={id:wfe,detector:uWe,loader:hWe},kfe=fWe;var yWe=o(t=>/^\s*erDiagram/.test(t),"detector"),vWe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Rfe(),Lfe));return{id:"er",diagram:t}},"loader"),xWe={id:"er",detector:yWe,loader:vWe},Nfe=xWe;var $ge="gitGraph",jKe=o(t=>/^\s*gitGraph/.test(t),"detector"),KKe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Fge(),Bge));return{id:$ge,diagram:t}},"loader"),QKe={id:$ge,detector:jKe,loader:KKe},zge=QKe;var v1e="gantt",FQe=o(t=>/^\s*gantt/.test(t),"detector"),$Qe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(y1e(),g1e));return{id:v1e,diagram:t}},"loader"),zQe={id:v1e,detector:FQe,loader:$Qe},x1e=zQe;var _1e="info",WQe=o(t=>/^\s*info/.test(t),"detector"),YQe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(A1e(),C1e));return{id:_1e,diagram:t}},"loader"),D1e={id:_1e,detector:WQe,loader:YQe};var sZe=o(t=>/^\s*pie/.test(t),"detector"),oZe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(F1e(),B1e));return{id:"pie",diagram:t}},"loader"),$1e={id:"pie",detector:sZe,loader:oZe};var Z1e="quadrantChart",SZe=o(t=>/^\s*quadrantChart/.test(t),"detector"),CZe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Q1e(),K1e));return{id:Z1e,diagram:t}},"loader"),AZe={id:Z1e,detector:SZe,loader:CZe},J1e=AZe;var Cye="xychart",HZe=o(t=>/^\s*xychart(-beta)?/.test(t),"detector"),qZe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Sye(),Eye));return{id:Cye,diagram:t}},"loader"),WZe={id:Cye,detector:HZe,loader:qZe},Aye=WZe;var Pye="requirement",KZe=o(t=>/^\s*requirement(Diagram)?/.test(t),"detector"),QZe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Oye(),Iye));return{id:Pye,diagram:t}},"loader"),ZZe={id:Pye,detector:KZe,loader:QZe},Bye=ZZe;var Jye="sequence",$Je=o(t=>/^\s*sequenceDiagram/.test(t),"detector"),zJe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Zye(),Qye));return{id:Jye,diagram:t}},"loader"),GJe={id:Jye,detector:$Je,loader:zJe},eve=GJe;var sve="class",YJe=o((t,e)=>e?.class?.defaultRenderer==="dagre-wrapper"?!1:/^\s*classDiagram/.test(t),"detector"),XJe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(ave(),ive));return{id:sve,diagram:t}},"loader"),jJe={id:sve,detector:YJe,loader:XJe},ove=jJe;var uve="classDiagram",QJe=o((t,e)=>/^\s*classDiagram/.test(t)&&e?.class?.defaultRenderer==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(t),"detector"),ZJe=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(cve(),lve));return{id:uve,diagram:t}},"loader"),JJe={id:uve,detector:QJe,loader:ZJe},hve=JJe;var Uve="state",Aet=o((t,e)=>e?.state?.defaultRenderer==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(t),"detector"),_et=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Vve(),Gve));return{id:Uve,diagram:t}},"loader"),Det={id:Uve,detector:Aet,loader:_et},Hve=Det;var Yve="stateDiagram",Ret=o((t,e)=>!!(/^\s*stateDiagram-v2/.test(t)||/^\s*stateDiagram/.test(t)&&e?.state?.defaultRenderer==="dagre-wrapper"),"detector"),Net=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Wve(),qve));return{id:Yve,diagram:t}},"loader"),Met={id:Yve,detector:Ret,loader:Net},Xve=Met;var u2e="journey",ett=o(t=>/^\s*journey/.test(t),"detector"),ttt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(c2e(),l2e));return{id:u2e,diagram:t}},"loader"),rtt={id:u2e,detector:ett,loader:ttt},h2e=rtt;pt();tu();Ei();var ntt=o((t,e,r)=>{X.debug(`rendering svg for syntax error +`);let n=aa(e),i=n.append("g");n.attr("viewBox","0 0 2412 512"),mn(n,100,512,!0),i.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),i.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),i.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),i.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),i.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),i.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),i.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),i.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw"),F$={draw:ntt},f2e=F$;var itt={db:{},renderer:F$,parser:{parse:o(()=>{},"parse")}},d2e=itt;var p2e="flowchart-elk",att=o((t,e={})=>/^\s*flowchart-elk/.test(t)||/^\s*(flowchart|graph)/.test(t)&&e?.flowchart?.defaultRenderer==="elk"?(e.layout="elk",!0):!1,"detector"),stt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(_E(),AE));return{id:p2e,diagram:t}},"loader"),ott={id:p2e,detector:att,loader:stt},m2e=ott;var G2e="timeline",Ctt=o(t=>/^\s*timeline/.test(t),"detector"),Att=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(z2e(),$2e));return{id:G2e,diagram:t}},"loader"),_tt={id:G2e,detector:Ctt,loader:Att},V2e=_tt;var ixe="mindmap",Ptt=o(t=>/^\s*mindmap/.test(t),"detector"),Btt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(nxe(),rxe));return{id:ixe,diagram:t}},"loader"),Ftt={id:ixe,detector:Ptt,loader:Btt},axe=Ftt;var yxe="kanban",ert=o(t=>/^\s*kanban/.test(t),"detector"),trt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(gxe(),mxe));return{id:yxe,diagram:t}},"loader"),rrt={id:yxe,detector:ert,loader:trt},vxe=rrt;var Jxe="sankey",Srt=o(t=>/^\s*sankey(-beta)?/.test(t),"detector"),Crt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(Zxe(),Qxe));return{id:Jxe,diagram:t}},"loader"),Art={id:Jxe,detector:Srt,loader:Crt},ebe=Art;var lbe="packet",Prt=o(t=>/^\s*packet(-beta)?/.test(t),"detector"),Brt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(obe(),sbe));return{id:lbe,diagram:t}},"loader"),cbe={id:lbe,detector:Prt,loader:Brt};var bbe="radar",ant=o(t=>/^\s*radar-beta/.test(t),"detector"),snt=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(xbe(),vbe));return{id:bbe,diagram:t}},"loader"),Tbe={id:bbe,detector:ant,loader:snt};var E4e="block",Ait=o(t=>/^\s*block(-beta)?/.test(t),"detector"),_it=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(k4e(),w4e));return{id:E4e,diagram:t}},"loader"),Dit={id:E4e,detector:Ait,loader:_it},S4e=Dit;var Y4e="architecture",Hit=o(t=>/^\s*architecture/.test(t),"detector"),qit=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(W4e(),q4e));return{id:Y4e,diagram:t}},"loader"),Wit={id:Y4e,detector:Hit,loader:qit},X4e=Wit;vd();Xt();var i3e="treemap",tat=o(t=>/^\s*treemap/.test(t),"detector"),rat=o(async()=>{let{diagram:t}=await Promise.resolve().then(()=>(n3e(),r3e));return{id:i3e,diagram:t}},"loader"),a3e={id:i3e,detector:tat,loader:rat};var s3e=!1,ky=o(()=>{s3e||(s3e=!0,xd("error",d2e,t=>t.toLowerCase().trim()==="error"),xd("---",{db:{clear:o(()=>{},"clear")},styles:{},renderer:{draw:o(()=>{},"draw")},parser:{parse:o(()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")},"parse")},init:o(()=>null,"init")},t=>t.toLowerCase().trimStart().startsWith("---")),tv(m2e,axe,X4e),tv(PQ,vxe,hve,ove,Nfe,x1e,D1e,$1e,Bye,eve,kfe,Tfe,V2e,zge,Xve,Hve,h2e,J1e,ebe,cbe,Aye,S4e,Tbe,a3e))},"addDiagrams");pt();vd();Xt();var o3e=o(async()=>{X.debug("Loading registered diagrams");let e=(await Promise.allSettled(Object.entries(gu).map(async([r,{detector:n,loader:i}])=>{if(i)try{sv(r)}catch{try{let{diagram:a,id:s}=await i();xd(s,a,n)}catch(a){throw X.error(`Failed to load external diagram with key ${r}. Removing from detectors.`),delete gu[r],a}}}))).filter(r=>r.status==="rejected");if(e.length>0){X.error(`Failed to load ${e.length} external diagrams`);for(let r of e)X.error(r);throw new Error(`Failed to load ${e.length} external diagrams`)}},"loadRegisteredDiagrams");pt();yr();var BC="comm",FC="rule",$C="decl";var l3e="@import";var c3e="@namespace",u3e="@keyframes";var h3e="@layer";var zz=Math.abs,z4=String.fromCharCode;function zC(t){return t.trim()}o(zC,"trim");function G4(t,e,r){return t.replace(e,r)}o(G4,"replace");function f3e(t,e,r){return t.indexOf(e,r)}o(f3e,"indexof");function rd(t,e){return t.charCodeAt(e)|0}o(rd,"charat");function nd(t,e,r){return t.slice(e,r)}o(nd,"substr");function wo(t){return t.length}o(wo,"strlen");function d3e(t){return t.length}o(d3e,"sizeof");function Ey(t,e){return e.push(t),t}o(Ey,"append");var GC=1,Sy=1,p3e=0,ll=0,Ri=0,Ay="";function VC(t,e,r,n,i,a,s,l){return{value:t,root:e,parent:r,type:n,props:i,children:a,line:GC,column:Sy,length:s,return:"",siblings:l}}o(VC,"node");function m3e(){return Ri}o(m3e,"char");function g3e(){return Ri=ll>0?rd(Ay,--ll):0,Sy--,Ri===10&&(Sy=1,GC--),Ri}o(g3e,"prev");function cl(){return Ri=ll2||Cy(Ri)>3?"":" "}o(x3e,"whitespace");function b3e(t,e){for(;--e&&cl()&&!(Ri<48||Ri>102||Ri>57&&Ri<65||Ri>70&&Ri<97););return UC(t,V4()+(e<6&&uh()==32&&cl()==32))}o(b3e,"escaping");function Gz(t){for(;cl();)switch(Ri){case t:return ll;case 34:case 39:t!==34&&t!==39&&Gz(Ri);break;case 40:t===41&&Gz(t);break;case 92:cl();break}return ll}o(Gz,"delimiter");function T3e(t,e){for(;cl()&&t+Ri!==57;)if(t+Ri===84&&uh()===47)break;return"/*"+UC(e,ll-1)+"*"+z4(t===47?t:cl())}o(T3e,"commenter");function w3e(t){for(;!Cy(uh());)cl();return UC(t,ll)}o(w3e,"identifier");function S3e(t){return v3e(qC("",null,null,null,[""],t=y3e(t),0,[0],t))}o(S3e,"compile");function qC(t,e,r,n,i,a,s,l,u){for(var h=0,f=0,d=s,p=0,m=0,g=0,y=1,v=1,x=1,b=0,T="",S=i,w=a,k=n,C=T;v;)switch(g=b,b=cl()){case 40:if(g!=108&&rd(C,d-1)==58){f3e(C+=G4(HC(b),"&","&\f"),"&\f",zz(h?l[h-1]:0))!=-1&&(x=-1);break}case 34:case 39:case 91:C+=HC(b);break;case 9:case 10:case 13:case 32:C+=x3e(g);break;case 92:C+=b3e(V4()-1,7);continue;case 47:switch(uh()){case 42:case 47:Ey(nat(T3e(cl(),V4()),e,r,u),u),(Cy(g||1)==5||Cy(uh()||1)==5)&&wo(C)&&nd(C,-1,void 0)!==" "&&(C+=" ");break;default:C+="/"}break;case 123*y:l[h++]=wo(C)*x;case 125*y:case 59:case 0:switch(b){case 0:case 125:v=0;case 59+f:x==-1&&(C=G4(C,/\f/g,"")),m>0&&(wo(C)-d||y===0&&g===47)&&Ey(m>32?E3e(C+";",n,r,d-1,u):E3e(G4(C," ","")+";",n,r,d-2,u),u);break;case 59:C+=";";default:if(Ey(k=k3e(C,e,r,h,f,i,l,T,S=[],w=[],d,a),a),b===123)if(f===0)qC(C,e,k,k,S,a,d,l,w);else{switch(p){case 99:if(rd(C,3)===110)break;case 108:if(rd(C,2)===97)break;default:f=0;case 100:case 109:case 115:}f?qC(t,k,k,n&&Ey(k3e(t,k,k,0,0,i,l,T,i,S=[],d,w),w),i,w,d,l,n?S:w):qC(C,k,k,k,[""],w,0,l,w)}}h=f=m=0,y=x=1,T=C="",d=s;break;case 58:d=1+wo(C),m=g;default:if(y<1){if(b==123)--y;else if(b==125&&y++==0&&g3e()==125)continue}switch(C+=z4(b),b*y){case 38:x=f>0?1:(C+="\f",-1);break;case 44:l[h++]=(wo(C)-1)*x,x=1;break;case 64:uh()===45&&(C+=HC(cl())),p=uh(),f=d=wo(T=C+=w3e(V4())),b++;break;case 45:g===45&&wo(C)==2&&(y=0)}}return a}o(qC,"parse");function k3e(t,e,r,n,i,a,s,l,u,h,f,d){for(var p=i-1,m=i===0?a:[""],g=d3e(m),y=0,v=0,x=0;y0?m[b]+" "+T:G4(T,/&\f/g,m[b])))&&(u[x++]=S);return VC(t,e,r,i===0?FC:l,u,h,f,d)}o(k3e,"ruleset");function nat(t,e,r,n){return VC(t,e,r,BC,z4(m3e()),nd(t,2,-2),0,n)}o(nat,"comment");function E3e(t,e,r,n,i){return VC(t,e,r,$C,nd(t,0,n),nd(t,n+1,-1),n,i)}o(E3e,"declaration");function WC(t,e){for(var r="",n=0;n{D3e.forEach(t=>{t()}),D3e=[]},"attachFunctions");pt();var R3e=o(t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart(),"cleanupComments");$3();k2();function N3e(t){let e=t.match(F3);if(!e)return{text:t,metadata:{}};let r=Kh(e[1],{schema:jh})??{};r=typeof r=="object"&&!Array.isArray(r)?r:{};let n={};return r.displayMode&&(n.displayMode=r.displayMode.toString()),r.title&&(n.title=r.title.toString()),r.config&&(n.config=r.config),{text:t.slice(e[0].length),metadata:n}}o(N3e,"extractFrontMatter");tr();var aat=o(t=>t.replace(/\r\n?/g,` +`).replace(/<(\w+)([^>]*)>/g,(e,r,n)=>"<"+r+n.replace(/="([^"]*)"/g,"='$1'")+">"),"cleanupText"),sat=o(t=>{let{text:e,metadata:r}=N3e(t),{displayMode:n,title:i,config:a={}}=r;return n&&(a.gantt||(a.gantt={}),a.gantt.displayMode=n),{title:i,config:a,text:e}},"processFrontmatter"),oat=o(t=>{let e=qt.detectInit(t)??{},r=qt.detectDirective(t,"wrap");return Array.isArray(r)?e.wrap=r.some(({type:n})=>n==="wrap"):r?.type==="wrap"&&(e.wrap=!0),{text:kQ(t),directive:e}},"processDirectives");function Vz(t){let e=aat(t),r=sat(e),n=oat(r.text),i=Vn(r.config,n.directive);return t=R3e(n.text),{code:t,title:r.title,config:i}}o(Vz,"preprocessDiagram");NA();t3();tr();function M3e(t){let e=new TextEncoder().encode(t),r=Array.from(e,n=>String.fromCodePoint(n)).join("");return btoa(r)}o(M3e,"toBase64");var lat=5e4,cat="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",uat="sandbox",hat="loose",fat="http://www.w3.org/2000/svg",dat="http://www.w3.org/1999/xlink",pat="http://www.w3.org/1999/xhtml",mat="100%",gat="100%",yat="border:0;margin:0;",vat="margin:0",xat="allow-top-navigation-by-user-activation allow-popups",bat='The "iframe" tag is not supported by your browser.',Tat=["foreignobject"],wat=["dominant-baseline"];function B3e(t){let e=Vz(t);return Fy(),tV(e.config??{}),e}o(B3e,"processAndSetConfigs");async function kat(t,e){ky();try{let{code:r,config:n}=B3e(t);return{diagramType:(await F3e(r)).type,config:n}}catch(r){if(e?.suppressErrors)return!1;throw r}}o(kat,"parse");var I3e=o((t,e,r=[])=>` +.${t} ${e} { ${r.join(" !important; ")} !important; }`,"cssImportantStyles"),Eat=o((t,e=new Map)=>{let r="";if(t.themeCSS!==void 0&&(r+=` +${t.themeCSS}`),t.fontFamily!==void 0&&(r+=` +:root { --mermaid-font-family: ${t.fontFamily}}`),t.altFontFamily!==void 0&&(r+=` +:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),e instanceof Map){let s=t.htmlLabels??t.flowchart?.htmlLabels?["> *","span"]:["rect","polygon","ellipse","circle","path"];e.forEach(l=>{mr(l.styles)||s.forEach(u=>{r+=I3e(l.id,u,l.styles)}),mr(l.textStyles)||(r+=I3e(l.id,"tspan",(l?.textStyles||[]).map(u=>u.replace("color","fill"))))})}return r},"createCssStyles"),Sat=o((t,e,r,n)=>{let i=Eat(t,r),a=lH(e,i,t.themeVariables);return WC(S3e(`${n}{${a}}`),C3e)},"createUserStyles"),Cat=o((t="",e,r)=>{let n=t;return!r&&!e&&(n=n.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),n=Ji(n),n=n.replace(/
    /g,"
    "),n},"cleanUpSvgCode"),Aat=o((t="",e)=>{let r=e?.viewBox?.baseVal?.height?e.viewBox.baseVal.height+"px":gat,n=M3e(`${t}`);return``},"putIntoIFrame"),O3e=o((t,e,r,n,i)=>{let a=t.append("div");a.attr("id",r),n&&a.attr("style",n);let s=a.append("svg").attr("id",e).attr("width","100%").attr("xmlns",fat);return i&&s.attr("xmlns:xlink",i),s.append("g"),t},"appendDivSvgG");function P3e(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}o(P3e,"sandboxedIframe");var _at=o((t,e,r,n)=>{t.getElementById(e)?.remove(),t.getElementById(r)?.remove(),t.getElementById(n)?.remove()},"removeExistingElements"),Dat=o(async function(t,e,r){ky();let n=B3e(e);e=n.code;let i=Qt();X.debug(i),e.length>(i?.maxTextSize??lat)&&(e=cat);let a="#"+t,s="i"+t,l="#"+s,u="d"+t,h="#"+u,f=o(()=>{let _=qe(p?l:h).node();_&&"remove"in _&&_.remove()},"removeTempElements"),d=qe("body"),p=i.securityLevel===uat,m=i.securityLevel===hat,g=i.fontFamily;if(r!==void 0){if(r&&(r.innerHTML=""),p){let E=P3e(qe(r),s);d=qe(E.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=qe(r);O3e(d,t,u,`font-family: ${g}`,dat)}else{if(_at(document,t,u,s),p){let E=P3e(qe("body"),s);d=qe(E.nodes()[0].contentDocument.body),d.node().style.margin=0}else d=qe("body");O3e(d,t,u)}let y,v;try{y=await _y.fromText(e,{title:n.title})}catch(E){if(i.suppressErrorRendering)throw f(),E;y=await _y.fromText("error"),v=E}let x=d.select(h).node(),b=y.type,T=x.firstChild,S=T.firstChild,w=y.renderer.getClasses?.(e,y),k=Sat(i,b,w,a),C=document.createElement("style");C.innerHTML=k,T.insertBefore(C,S);try{await y.renderer.draw(e,t,y4.version,y)}catch(E){throw i.suppressErrorRendering?f():f2e.draw(e,t,y4.version),E}let A=d.select(`${h} svg`),L=y.db.getAccTitle?.(),I=y.db.getAccDescription?.();Rat(b,A,L,I),d.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",pat);let R=d.select(h).node().innerHTML;if(X.debug("config.arrowMarkerAbsolute",i.arrowMarkerAbsolute),R=Cat(R,p,vr(i.arrowMarkerAbsolute)),p){let E=d.select(h+" svg").node();R=Aat(R,E)}else m||(R=yh.sanitize(R,{ADD_TAGS:Tat,ADD_ATTR:wat,HTML_INTEGRATION_POINTS:{foreignobject:!0}}));if(L3e(),v)throw v;return f(),{diagramType:b,svg:R,bindFunctions:y.db.bindFunctions}},"render");function Lat(t={}){let e=Rn({},t);e?.fontFamily&&!e.themeVariables?.fontFamily&&(e.themeVariables||(e.themeVariables={}),e.themeVariables.fontFamily=e.fontFamily),ZG(e),e?.theme&&e.theme in So?e.themeVariables=So[e.theme].getThemeVariables(e.themeVariables):e&&(e.themeVariables=So.default.getThemeVariables(e.themeVariables));let r=typeof e=="object"?C7(e):A7();Ly(r.logLevel),ky()}o(Lat,"initialize");var F3e=o((t,e={})=>{let{code:r}=Vz(t);return _y.fromText(r,e)},"getDiagramFromText");function Rat(t,e,r,n){A3e(e,t),_3e(e,r,n,e.attr("id"))}o(Rat,"addA11yInfo");var id=Object.freeze({render:Dat,parse:kat,getDiagramFromText:F3e,initialize:Lat,getConfig:Qt,setConfig:i3,getSiteConfig:A7,updateSiteConfig:JG,reset:o(()=>{Fy()},"reset"),globalReset:o(()=>{Fy(gh)},"globalReset"),defaultConfig:gh});Ly(Qt().logLevel);Fy(Qt());Nf();tr();var Nat=o((t,e,r)=>{X.warn(t),qL(t)?(r&&r(t.str,t.hash),e.push({...t,message:t.str,error:t})):(r&&r(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},"handleError"),$3e=o(async function(t={querySelector:".mermaid"}){try{await Mat(t)}catch(e){if(qL(e)&&X.error(e.str),hh.parseError&&hh.parseError(e),!t.suppressErrors)throw X.error("Use the suppressErrors option to suppress these errors"),e}},"run"),Mat=o(async function({postRenderCallback:t,querySelector:e,nodes:r}={querySelector:".mermaid"}){let n=id.getConfig();X.debug(`${t?"":"No "}Callback function found`);let i;if(r)i=r;else if(e)i=document.querySelectorAll(e);else throw new Error("Nodes and querySelector are both undefined");X.debug(`Found ${i.length} diagrams`),n?.startOnLoad!==void 0&&(X.debug("Start On Load: "+n?.startOnLoad),id.updateSiteConfig({startOnLoad:n?.startOnLoad}));let a=new qt.InitIDGenerator(n.deterministicIds,n.deterministicIDSeed),s,l=[];for(let u of Array.from(i)){X.info("Rendering diagram: "+u.id);if(u.getAttribute("data-processed"))continue;u.setAttribute("data-processed","true");let h=`mermaid-${a.next()}`;s=u.innerHTML,s=B3(qt.entityDecode(s)).trim().replace(//gi,"
    ");let f=qt.detectInit(s);f&&X.debug("Detected early reinit: ",f);try{let{svg:d,bindFunctions:p}=await U3e(h,s,u);u.innerHTML=d,t&&await t(h),p&&p(u)}catch(d){Nat(d,l,hh.parseError)}}if(l.length>0)throw l[0]},"runThrowsErrors"),z3e=o(function(t){id.initialize(t)},"initialize"),Iat=o(async function(t,e,r){X.warn("mermaid.init is deprecated. Please use run instead."),t&&z3e(t);let n={postRenderCallback:r,querySelector:".mermaid"};typeof e=="string"?n.querySelector=e:e&&(e instanceof HTMLElement?n.nodes=[e]:n.nodes=e),await $3e(n)},"init"),Oat=o(async(t,{lazyLoad:e=!0}={})=>{ky(),tv(...t),e===!1&&await o3e()},"registerExternalDiagrams"),G3e=o(function(){if(hh.startOnLoad){let{startOnLoad:t}=id.getConfig();t&&hh.run().catch(e=>X.error("Mermaid failed to initialize",e))}},"contentLoaded");if(typeof document<"u"){window.addEventListener("load",G3e,!1)}var Pat=o(function(t){hh.parseError=t},"setParseErrorHandler"),YC=[],Uz=!1,V3e=o(async()=>{if(!Uz){for(Uz=!0;YC.length>0;){let t=YC.shift();if(t)try{await t()}catch(e){X.error("Error executing queue",e)}}Uz=!1}},"executeQueue"),Bat=o(async(t,e)=>new Promise((r,n)=>{let i=o(()=>new Promise((a,s)=>{id.parse(t,e).then(l=>{a(l),r(l)},l=>{X.error("Error parsing",l),hh.parseError?.(l),s(l),n(l)})}),"performCall");YC.push(i),V3e().catch(n)}),"parse"),U3e=o((t,e,r)=>new Promise((n,i)=>{let a=o(()=>new Promise((s,l)=>{id.render(t,e,r).then(u=>{s(u),n(u)},u=>{X.error("Error parsing",u),hh.parseError?.(u),l(u),i(u)})}),"performCall");YC.push(a),V3e().catch(i)}),"render"),Fat=o(()=>Object.keys(gu).map(t=>({id:t})),"getRegisteredDiagramsMetadata"),hh={startOnLoad:!0,mermaidAPI:id,parse:Bat,render:U3e,init:Iat,run:$3e,registerExternalDiagrams:Oat,registerLayoutLoaders:zI,initialize:z3e,parseError:void 0,contentLoaded:G3e,setParseErrorHandler:Pat,detectType:_0,registerIconPacks:P3,getRegisteredDiagramsMetadata:Fat},$at=hh;return Z3e(zat);})(); +/*! Check if previously processed */ +/*! + * Wait for document loaded before starting the execution + */ +/*! Bundled license information: + +dompurify/dist/purify.es.mjs: + (*! @license DOMPurify 3.2.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.2.6/LICENSE *) + +js-yaml/dist/js-yaml.mjs: + (*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT *) + +lodash-es/lodash.js: + (** + * @license + * Lodash (Custom Build) + * Build: `lodash modularize exports="es" -o ./` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + *) + +cytoscape/dist/cytoscape.esm.mjs: + (*! + Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable + Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) + Licensed under The MIT License (http://opensource.org/licenses/MIT) + *) + (*! + Event object based on jQuery events, MIT license + + https://jquery.org/license/ + https://tldrlegal.com/license/mit-license + https://github.com/jquery/jquery/blob/master/src/event.js + *) + (*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License *) + (*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License *) +*/ +globalThis["mermaid"] = globalThis.__esbuild_esm_mermaid_nm["mermaid"].default; diff --git a/perlite/.js/mermaid.min.js.map b/perlite/.js/mermaid.min.js.map new file mode 100644 index 00000000..53c81434 --- /dev/null +++ b/perlite/.js/mermaid.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/icon/defaults.js", "../../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/customisations/defaults.js", "../../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/icon/name.js", "../../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/icon/transformations.js", "../../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/icon/merge.js", "../../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/icon-set/tree.js", "../../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/icon-set/get-icon.js", "../../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/svg/size.js", "../../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/svg/defs.js", "../../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/svg/build.js", "../../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/svg/id.js", "../../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/svg/html.js", "../../../node_modules/.pnpm/@iconify+utils@3.0.2/node_modules/@iconify/utils/lib/index.js", "../src/assignWithDepth.ts", "../../../node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/dayjs.min.js", "../src/logger.ts", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/utils/channel.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/utils/lang.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/utils/unit.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/utils/index.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/constants.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/channels/type.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/channels/index.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/channels/reusable.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/color/hex.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/color/hsl.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/color/keyword.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/color/rgb.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/color/index.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/change.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/rgba.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/channel.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/luminance.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/is_light.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/is_dark.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/adjust_channel.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/lighten.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/darken.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/adjust.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/mix.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/invert.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/methods/index.js", "../../../node_modules/.pnpm/khroma@2.1.0/node_modules/khroma/dist/index.js", "../src/themes/erDiagram-oldHardcodedValues.ts", "../src/themes/theme-helpers.js", "../src/themes/theme-base.js", "../src/themes/theme-dark.js", "../src/themes/theme-default.js", "../src/themes/theme-forest.js", "../src/themes/theme-neutral.js", "../src/themes/index.js", "../src/schemas/config.schema.yaml", "../src/defaultConfig.ts", "../src/utils/sanitizeDirective.ts", "../src/config.ts", "../../../node_modules/.pnpm/dompurify@3.2.6/node_modules/dompurify/src/utils.ts", "../../../node_modules/.pnpm/dompurify@3.2.6/node_modules/dompurify/src/tags.ts", "../../../node_modules/.pnpm/dompurify@3.2.6/node_modules/dompurify/src/attrs.ts", "../../../node_modules/.pnpm/dompurify@3.2.6/node_modules/dompurify/src/regexp.ts", "../../../node_modules/.pnpm/dompurify@3.2.6/node_modules/dompurify/src/purify.ts", "../../../node_modules/.pnpm/katex@0.16.22/node_modules/katex/dist/katex.mjs", "../src/diagrams/common/common.ts", "../src/rendering-util/icons.ts", "../../../node_modules/.pnpm/ts-dedent@2.2.0/node_modules/ts-dedent/src/index.ts", "../src/diagram-api/regexes.ts", "../src/errors.ts", "../src/diagram-api/detectType.ts", "../src/diagrams/c4/parser/c4Diagram.jison", "../src/setupGraphViewbox.js", "../src/styles.ts", "../src/diagrams/common/commonDb.ts", "../src/diagram-api/diagramAPI.ts", "../src/diagrams/c4/c4Db.js", "../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/ascending.js", "../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/descending.js", "../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/bisector.js", "../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/number.js", "../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/bisect.js", "../../../node_modules/.pnpm/internmap@2.0.3/node_modules/internmap/src/index.js", "../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/ticks.js", "../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/max.js", "../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/min.js", "../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/range.js", "../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/index.js", "../../../node_modules/.pnpm/d3-axis@3.0.0/node_modules/d3-axis/src/identity.js", "../../../node_modules/.pnpm/d3-axis@3.0.0/node_modules/d3-axis/src/axis.js", "../../../node_modules/.pnpm/d3-axis@3.0.0/node_modules/d3-axis/src/index.js", "../../../node_modules/.pnpm/d3-dispatch@3.0.1/node_modules/d3-dispatch/src/dispatch.js", "../../../node_modules/.pnpm/d3-dispatch@3.0.1/node_modules/d3-dispatch/src/index.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/namespaces.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/namespace.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/creator.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selector.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/select.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/array.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selectorAll.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/selectAll.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/matcher.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/selectChild.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/selectChildren.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/filter.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/sparse.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/enter.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/constant.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/data.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/exit.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/join.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/merge.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/order.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/sort.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/call.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/nodes.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/node.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/size.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/empty.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/each.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/attr.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/window.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/style.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/property.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/classed.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/text.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/html.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/raise.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/lower.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/append.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/insert.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/remove.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/clone.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/datum.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/on.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/dispatch.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/iterator.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/index.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/select.js", "../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/index.js", "../../../node_modules/.pnpm/d3-drag@3.0.0/node_modules/d3-drag/src/index.js", "../../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/define.js", "../../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/color.js", "../../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/math.js", "../../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/lab.js", "../../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/index.js", "../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/basis.js", "../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/basisClosed.js", "../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/constant.js", "../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/color.js", "../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/rgb.js", "../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/numberArray.js", "../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/array.js", "../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/date.js", "../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/number.js", "../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/object.js", "../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/string.js", "../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/value.js", "../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/round.js", "../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/decompose.js", "../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/parse.js", "../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/index.js", "../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/hcl.js", "../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/index.js", "../../../node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timer.js", "../../../node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timeout.js", "../../../node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/index.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/schedule.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/interrupt.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/interrupt.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/tween.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/interpolate.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/attr.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/attrTween.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/delay.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/duration.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/ease.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/easeVarying.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/filter.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/merge.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/on.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/remove.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/select.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/selectAll.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/selection.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/style.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/styleTween.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/text.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/textTween.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/transition.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/end.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/index.js", "../../../node_modules/.pnpm/d3-ease@3.0.1/node_modules/d3-ease/src/cubic.js", "../../../node_modules/.pnpm/d3-ease@3.0.1/node_modules/d3-ease/src/index.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/transition.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/index.js", "../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/index.js", "../../../node_modules/.pnpm/d3-brush@3.0.0/node_modules/d3-brush/src/constant.js", "../../../node_modules/.pnpm/d3-brush@3.0.0/node_modules/d3-brush/src/event.js", "../../../node_modules/.pnpm/d3-brush@3.0.0/node_modules/d3-brush/src/noevent.js", "../../../node_modules/.pnpm/d3-brush@3.0.0/node_modules/d3-brush/src/brush.js", "../../../node_modules/.pnpm/d3-brush@3.0.0/node_modules/d3-brush/src/index.js", "../../../node_modules/.pnpm/d3-path@3.1.0/node_modules/d3-path/src/path.js", "../../../node_modules/.pnpm/d3-path@3.1.0/node_modules/d3-path/src/index.js", "../../../node_modules/.pnpm/d3-chord@3.0.1/node_modules/d3-chord/src/index.js", "../../../node_modules/.pnpm/d3-contour@4.0.2/node_modules/d3-contour/src/index.js", "../../../node_modules/.pnpm/d3-delaunay@6.0.4/node_modules/d3-delaunay/src/index.js", "../../../node_modules/.pnpm/d3-dsv@3.0.1/node_modules/d3-dsv/src/index.js", "../../../node_modules/.pnpm/d3-fetch@3.0.1/node_modules/d3-fetch/src/index.js", "../../../node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/index.js", "../../../node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/index.js", "../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatDecimal.js", "../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/exponent.js", "../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatGroup.js", "../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatNumerals.js", "../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatSpecifier.js", "../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatTrim.js", "../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatPrefixAuto.js", "../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatRounded.js", "../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatTypes.js", "../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/identity.js", "../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/locale.js", "../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/defaultLocale.js", "../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionFixed.js", "../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionPrefix.js", "../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionRound.js", "../../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/index.js", "../../../node_modules/.pnpm/d3-geo@3.1.1/node_modules/d3-geo/src/index.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/count.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/each.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/eachBefore.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/eachAfter.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/find.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/sum.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/sort.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/path.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/ancestors.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/descendants.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/leaves.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/links.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/iterator.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/hierarchy/index.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/accessors.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/constant.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/treemap/round.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/treemap/dice.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/treemap/slice.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/treemap/squarify.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/treemap/index.js", "../../../node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/index.js", "../../../node_modules/.pnpm/d3-polygon@3.0.1/node_modules/d3-polygon/src/index.js", "../../../node_modules/.pnpm/d3-random@3.0.1/node_modules/d3-random/src/index.js", "../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/init.js", "../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/ordinal.js", "../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/band.js", "../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/constant.js", "../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/number.js", "../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/continuous.js", "../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/tickFormat.js", "../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/linear.js", "../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/nice.js", "../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/interval.js", "../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/millisecond.js", "../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/second.js", "../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/minute.js", "../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/hour.js", "../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/day.js", "../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/week.js", "../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/month.js", "../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/year.js", "../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/ticks.js", "../../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/index.js", "../../../node_modules/.pnpm/d3-time-format@4.1.0/node_modules/d3-time-format/src/locale.js", "../../../node_modules/.pnpm/d3-time-format@4.1.0/node_modules/d3-time-format/src/defaultLocale.js", "../../../node_modules/.pnpm/d3-time-format@4.1.0/node_modules/d3-time-format/src/index.js", "../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/time.js", "../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/index.js", "../../../node_modules/.pnpm/d3-scale-chromatic@3.1.0/node_modules/d3-scale-chromatic/src/colors.js", "../../../node_modules/.pnpm/d3-scale-chromatic@3.1.0/node_modules/d3-scale-chromatic/src/categorical/Tableau10.js", "../../../node_modules/.pnpm/d3-scale-chromatic@3.1.0/node_modules/d3-scale-chromatic/src/index.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/constant.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/math.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/path.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/arc.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/array.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/linear.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/point.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/line.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/descending.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/identity.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/pie.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/bump.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/noop.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/basis.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/basisClosed.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/basisOpen.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/bundle.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/cardinal.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/cardinalClosed.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/cardinalOpen.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/catmullRom.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/catmullRomClosed.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/catmullRomOpen.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/linearClosed.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/monotone.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/natural.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/step.js", "../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/index.js", "../../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/constant.js", "../../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/event.js", "../../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/transform.js", "../../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/noevent.js", "../../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/zoom.js", "../../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/index.js", "../../../node_modules/.pnpm/d3@7.9.0/node_modules/d3/src/index.js", "../../../node_modules/.pnpm/@braintree+sanitize-url@7.1.1/node_modules/@braintree/sanitize-url/dist/constants.js", "../../../node_modules/.pnpm/@braintree+sanitize-url@7.1.1/node_modules/@braintree/sanitize-url/dist/index.js", "../src/diagrams/common/svgDrawCommon.ts", "../src/diagrams/c4/svgDraw.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_freeGlobal.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_root.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Symbol.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getRawTag.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_objectToString.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetTag.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObject.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isFunction.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_coreJsData.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isMasked.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_toSource.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsNative.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getValue.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getNative.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeCreate.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashClear.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashDelete.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashGet.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashHas.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hashSet.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Hash.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheClear.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/eq.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assocIndexOf.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheDelete.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheGet.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheHas.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_listCacheSet.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_ListCache.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Map.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheClear.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isKeyable.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getMapData.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheDelete.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheGet.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheHas.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapCacheSet.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_MapCache.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/memoize.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackClear.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackDelete.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackGet.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackHas.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackSet.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Stack.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_defineProperty.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssignValue.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assignMergeValue.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createBaseFor.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFor.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneBuffer.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Uint8Array.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneArrayBuffer.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneTypedArray.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copyArray.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseCreate.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_overArg.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getPrototype.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isPrototype.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneObject.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObjectLike.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsArguments.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArguments.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArray.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isLength.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArrayLike.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArrayLikeObject.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubFalse.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isBuffer.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isPlainObject.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsTypedArray.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUnary.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nodeUtil.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isTypedArray.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_safeGet.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assignValue.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copyObject.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseTimes.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isIndex.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayLikeKeys.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeKeysIn.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeysIn.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keysIn.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toPlainObject.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMergeDeep.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMerge.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/identity.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_apply.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_overRest.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/constant.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSetToString.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_shortOut.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setToString.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseRest.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isIterateeCall.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createAssigner.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/merge.js", "../src/utils.ts", "../src/diagrams/c4/c4Renderer.js", "../src/diagrams/c4/styles.js", "../src/diagrams/c4/c4Diagram.ts", "../../../node_modules/.pnpm/js-yaml@4.1.0/node_modules/js-yaml/dist/js-yaml.mjs", "../../../node_modules/.pnpm/marked@16.3.0/node_modules/marked/src/defaults.ts", "../../../node_modules/.pnpm/marked@16.3.0/node_modules/marked/src/rules.ts", "../../../node_modules/.pnpm/marked@16.3.0/node_modules/marked/src/helpers.ts", "../../../node_modules/.pnpm/marked@16.3.0/node_modules/marked/src/Tokenizer.ts", "../../../node_modules/.pnpm/marked@16.3.0/node_modules/marked/src/Lexer.ts", "../../../node_modules/.pnpm/marked@16.3.0/node_modules/marked/src/Renderer.ts", "../../../node_modules/.pnpm/marked@16.3.0/node_modules/marked/src/TextRenderer.ts", "../../../node_modules/.pnpm/marked@16.3.0/node_modules/marked/src/Parser.ts", "../../../node_modules/.pnpm/marked@16.3.0/node_modules/marked/src/Hooks.ts", "../../../node_modules/.pnpm/marked@16.3.0/node_modules/marked/src/Instance.ts", "../../../node_modules/.pnpm/marked@16.3.0/node_modules/marked/src/marked.ts", "../src/rendering-util/handle-markdown-text.ts", "../src/rendering-util/splitText.ts", "../src/rendering-util/createText.ts", "../src/rendering-util/rendering-elements/shapes/util.ts", "../src/rendering-util/rendering-elements/intersect/intersect-node.js", "../src/rendering-util/rendering-elements/intersect/intersect-ellipse.js", "../src/rendering-util/rendering-elements/intersect/intersect-circle.js", "../src/rendering-util/rendering-elements/intersect/intersect-line.js", "../src/rendering-util/rendering-elements/intersect/intersect-polygon.js", "../src/rendering-util/rendering-elements/intersect/intersect-rect.js", "../src/rendering-util/rendering-elements/intersect/index.js", "../src/rendering-util/rendering-elements/shapes/handDrawnShapeStyles.ts", "../../../node_modules/.pnpm/roughjs@4.6.6_patch_hash=3543d47108cb41b68ec6a671c0e1f9d0cfe2ce524fea5b0992511ae84c3c6b64/node_modules/roughjs/bundled/rough.esm.js", "../src/rendering-util/rendering-elements/shapes/anchor.ts", "../src/rendering-util/rendering-elements/shapes/bowTieRect.ts", "../src/rendering-util/rendering-elements/shapes/insertPolygonShape.ts", "../src/rendering-util/rendering-elements/shapes/card.ts", "../src/rendering-util/rendering-elements/shapes/choice.ts", "../src/rendering-util/rendering-elements/shapes/circle.ts", "../src/rendering-util/rendering-elements/shapes/crossedCircle.ts", "../src/rendering-util/rendering-elements/shapes/curlyBraceLeft.ts", "../src/rendering-util/rendering-elements/shapes/curlyBraceRight.ts", "../src/rendering-util/rendering-elements/shapes/curlyBraces.ts", "../src/rendering-util/rendering-elements/shapes/curvedTrapezoid.ts", "../src/rendering-util/rendering-elements/shapes/cylinder.ts", "../src/rendering-util/rendering-elements/shapes/dividedRect.ts", "../src/rendering-util/rendering-elements/shapes/doubleCircle.ts", "../src/rendering-util/rendering-elements/shapes/filledCircle.ts", "../src/rendering-util/rendering-elements/shapes/flippedTriangle.ts", "../src/rendering-util/rendering-elements/shapes/forkJoin.ts", "../src/rendering-util/rendering-elements/shapes/halfRoundedRectangle.ts", "../src/rendering-util/rendering-elements/shapes/hexagon.ts", "../src/rendering-util/rendering-elements/shapes/hourglass.ts", "../src/rendering-util/rendering-elements/shapes/icon.ts", "../src/rendering-util/rendering-elements/shapes/iconCircle.ts", "../src/rendering-util/rendering-elements/shapes/roundedRectPath.ts", "../src/rendering-util/rendering-elements/shapes/iconRounded.ts", "../src/rendering-util/rendering-elements/shapes/iconSquare.ts", "../src/rendering-util/rendering-elements/shapes/imageSquare.ts", "../src/rendering-util/rendering-elements/shapes/invertedTrapezoid.ts", "../src/rendering-util/rendering-elements/shapes/drawRect.ts", "../src/rendering-util/rendering-elements/shapes/labelRect.ts", "../src/rendering-util/rendering-elements/shapes/leanLeft.ts", "../src/rendering-util/rendering-elements/shapes/leanRight.ts", "../src/rendering-util/rendering-elements/shapes/lightningBolt.ts", "../src/rendering-util/rendering-elements/shapes/linedCylinder.ts", "../src/rendering-util/rendering-elements/shapes/linedWaveEdgedRect.ts", "../src/rendering-util/rendering-elements/shapes/multiRect.ts", "../src/rendering-util/rendering-elements/shapes/multiWaveEdgedRectangle.ts", "../src/rendering-util/rendering-elements/shapes/note.ts", "../src/rendering-util/rendering-elements/shapes/question.ts", "../src/rendering-util/rendering-elements/shapes/rectLeftInvArrow.ts", "../src/rendering-util/rendering-elements/createLabel.js", "../src/rendering-util/rendering-elements/shapes/rectWithTitle.ts", "../src/rendering-util/rendering-elements/shapes/roundedRect.ts", "../src/rendering-util/rendering-elements/shapes/shadedProcess.ts", "../src/rendering-util/rendering-elements/shapes/slopedRect.ts", "../src/rendering-util/rendering-elements/shapes/squareRect.ts", "../src/rendering-util/rendering-elements/shapes/stadium.ts", "../src/rendering-util/rendering-elements/shapes/state.ts", "../src/rendering-util/rendering-elements/shapes/stateEnd.ts", "../src/rendering-util/rendering-elements/shapes/stateStart.ts", "../src/rendering-util/rendering-elements/shapes/subroutine.ts", "../src/rendering-util/rendering-elements/shapes/taggedRect.ts", "../src/rendering-util/rendering-elements/shapes/taggedWaveEdgedRectangle.ts", "../src/rendering-util/rendering-elements/shapes/text.ts", "../src/rendering-util/rendering-elements/shapes/tiltedCylinder.ts", "../src/rendering-util/rendering-elements/shapes/trapezoid.ts", "../src/rendering-util/rendering-elements/shapes/trapezoidalPentagon.ts", "../src/rendering-util/rendering-elements/shapes/triangle.ts", "../src/rendering-util/rendering-elements/shapes/waveEdgedRectangle.ts", "../src/rendering-util/rendering-elements/shapes/waveRectangle.ts", "../src/rendering-util/rendering-elements/shapes/windowPane.ts", "../src/rendering-util/rendering-elements/shapes/erBox.ts", "../src/diagrams/class/shapeUtil.ts", "../src/rendering-util/rendering-elements/shapes/classBox.ts", "../src/rendering-util/rendering-elements/shapes/requirementBox.ts", "../src/rendering-util/rendering-elements/shapes/kanbanItem.ts", "../src/rendering-util/rendering-elements/shapes/bang.ts", "../src/rendering-util/rendering-elements/shapes/cloud.ts", "../src/rendering-util/rendering-elements/shapes/defaultMindmapNode.ts", "../src/rendering-util/rendering-elements/shapes/mindmapCircle.ts", "../src/rendering-util/rendering-elements/shapes.ts", "../src/diagrams/flowchart/flowDb.ts", "../src/rendering-util/insertElementsForSize.js", "../src/utils/subGraphTitleMargins.ts", "../src/rendering-util/rendering-elements/clusters.js", "../src/utils/lineWithOffset.ts", "../src/rendering-util/rendering-elements/edgeMarker.ts", "../src/rendering-util/rendering-elements/edges.js", "../src/rendering-util/rendering-elements/markers.js", "../src/rendering-util/rendering-elements/nodes.ts", "../src/internals.ts", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSymbol.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayMap.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseToString.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_trimmedEndIndex.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseTrim.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toNumber.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toFinite.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toInteger.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_WeakMap.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/noop.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayEach.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFindIndex.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsNaN.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_strictIndexOf.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIndexOf.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayIncludes.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeKeys.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeys.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keys.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/assign.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isKey.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_memoizeCapped.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stringToPath.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toString.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_castPath.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_toKey.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGet.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/get.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayPush.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isFlattenable.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFlatten.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/flatten.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_flatRest.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSlice.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hasUnicode.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayReduce.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssign.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssignIn.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayFilter.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubArray.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getSymbols.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copySymbols.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getSymbolsIn.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copySymbolsIn.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetAllKeys.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeys.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeysIn.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_DataView.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Promise.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Set.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getTag.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneArray.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneDataView.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneRegExp.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneSymbol.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneByTag.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsMap.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isMap.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsSet.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSet.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseClone.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/clone.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/cloneDeep.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/compact.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setCacheAdd.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setCacheHas.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_SetCache.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arraySome.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cacheHas.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalArrays.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapToArray.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setToArray.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalByTag.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalObjects.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsEqualDeep.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsEqual.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsMatch.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isStrictComparable.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getMatchData.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_matchesStrictComparable.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMatches.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseHasIn.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hasPath.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/hasIn.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMatchesProperty.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseProperty.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_basePropertyDeep.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/property.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIteratee.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayAggregator.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseForOwn.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createBaseEach.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseEach.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAggregator.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createAggregator.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/now.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/defaults.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayIncludesWith.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseDifference.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/difference.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/last.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/drop.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/dropRight.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_castFunction.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/forEach.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/each.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayEvery.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseEvery.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/every.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFilter.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/filter.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createFind.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/findIndex.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/find.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/head.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/first.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMap.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/map.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/flatMap.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/forIn.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/forOwn.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/groupBy.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGt.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseHas.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/has.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isString.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseValues.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/values.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/includes.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/indexOf.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isEmpty.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsRegExp.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isRegExp.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isUndefined.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseLt.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/mapValues.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseExtremum.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/max.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/min.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/minBy.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/negate.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSet.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_basePickBy.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/pickBy.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSortBy.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_compareAscending.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_compareMultiple.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseOrderBy.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_asciiSize.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_unicodeSize.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stringSize.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_basePick.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/pick.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseRange.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createRange.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/range.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseReduce.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/reduce.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/reject.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/size.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSome.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/some.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/sortBy.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createSet.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUniq.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/union.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/uniq.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/uniqBy.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/uniqueId.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseZipObject.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/zipObject.js", "../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/lodash.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/graphlib/graph.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/graphlib/index.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/data/list.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/greedy-fas.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/acyclic.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/util.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/add-border-segments.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/coordinate-system.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/normalize.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/rank/util.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/graphlib/alg/components.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/graphlib/data/priority-queue.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/graphlib/alg/tarjan.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/graphlib/alg/find-cycles.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/graphlib/alg/topsort.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/graphlib/alg/dfs.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/graphlib/alg/postorder.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/graphlib/alg/preorder.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/graphlib/alg/prim.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/graphlib/alg/index.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/rank/index.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/nesting-graph.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/order/cross-count.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/order/init-order.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/order/barycenter.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/order/sort.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/order/index.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/position/bk.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/position/index.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/layout.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/dagre/index.js", "../../../node_modules/.pnpm/dagre-d3-es@7.0.13/node_modules/dagre-d3-es/src/graphlib/json.js", "../src/rendering-util/layout-algorithms/dagre/mermaid-graphlib.js", "../src/rendering-util/layout-algorithms/dagre/index.js", "../../../node_modules/.pnpm/cytoscape@3.33.1/node_modules/cytoscape/dist/cytoscape.esm.mjs", "../../../node_modules/.pnpm/layout-base@1.0.2/node_modules/layout-base/layout-base.js", "../../../node_modules/.pnpm/cose-base@1.0.3/node_modules/cose-base/cose-base.js", "../../../node_modules/.pnpm/cytoscape-cose-bilkent@4.1.0_cytoscape@3.33.1/node_modules/cytoscape-cose-bilkent/cytoscape-cose-bilkent.js", "../src/rendering-util/layout-algorithms/cose-bilkent/cytoscape-setup.ts", "../src/rendering-util/layout-algorithms/cose-bilkent/layout.ts", "../src/rendering-util/layout-algorithms/cose-bilkent/render.ts", "../src/rendering-util/layout-algorithms/cose-bilkent/index.ts", "../src/rendering-util/render.ts", "../src/rendering-util/setupViewPortForSVG.ts", "../src/diagrams/flowchart/flowRenderer-v3-unified.ts", "../src/diagrams/flowchart/parser/flow.jison", "../src/diagrams/flowchart/parser/flowParser.ts", "../src/diagrams/globalStyles.ts", "../src/diagrams/flowchart/styles.ts", "../src/diagrams/flowchart/flowDiagram.ts", "../src/diagrams/er/parser/erDiagram.jison", "../src/diagrams/er/erDb.ts", "../src/diagrams/er/erRenderer-unified.ts", "../src/diagrams/er/styles.ts", "../src/diagrams/er/erDiagram.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/syntax-tree.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/utils/stream.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/utils/cst-utils.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/utils/errors.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/languages/generated/ast.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/utils/ast-utils.ts", "../../../node_modules/.pnpm/@chevrotain+regexp-to-ast@11.0.3/node_modules/@chevrotain/regexp-to-ast/src/utils.ts", "../../../node_modules/.pnpm/@chevrotain+regexp-to-ast@11.0.3/node_modules/@chevrotain/regexp-to-ast/src/character-classes.ts", "../../../node_modules/.pnpm/@chevrotain+regexp-to-ast@11.0.3/node_modules/@chevrotain/regexp-to-ast/src/regexp-parser.ts", "../../../node_modules/.pnpm/@chevrotain+regexp-to-ast@11.0.3/node_modules/@chevrotain/regexp-to-ast/src/base-regexp-visitor.ts", "../../../node_modules/.pnpm/@chevrotain+regexp-to-ast@11.0.3/node_modules/@chevrotain/regexp-to-ast/src/api.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/utils/regexp-utils.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/utils/grammar-utils.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/languages/grammar-config.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/version.ts", "../../../node_modules/.pnpm/@chevrotain+utils@11.0.3/node_modules/@chevrotain/utils/src/print.ts", "../../../node_modules/.pnpm/@chevrotain+utils@11.0.3/node_modules/@chevrotain/utils/src/timer.ts", "../../../node_modules/.pnpm/@chevrotain+utils@11.0.3/node_modules/@chevrotain/utils/src/to-fast-properties.ts", "../../../node_modules/.pnpm/@chevrotain+utils@11.0.3/node_modules/@chevrotain/utils/src/api.ts", "../../../node_modules/.pnpm/@chevrotain+gast@11.0.3/node_modules/@chevrotain/gast/src/model.ts", "../../../node_modules/.pnpm/@chevrotain+gast@11.0.3/node_modules/@chevrotain/gast/src/visitor.ts", "../../../node_modules/.pnpm/@chevrotain+gast@11.0.3/node_modules/@chevrotain/gast/src/helpers.ts", "../../../node_modules/.pnpm/@chevrotain+gast@11.0.3/node_modules/@chevrotain/gast/src/api.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/grammar/rest.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/grammar/first.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/constants.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/grammar/follow.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/scan/reg_exp_parser.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/scan/reg_exp.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/scan/lexer.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/scan/tokens.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/scan/lexer_errors_public.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/scan/lexer_public.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/scan/tokens_public.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/errors_public.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/grammar/resolver.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/grammar/interpreter.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/grammar/lookahead.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/grammar/checks.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/grammar/gast/gast_resolver_public.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/exceptions_public.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/traits/recoverable.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/grammar/keys.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/grammar/llk_lookahead.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/traits/looksahead.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/cst/cst.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/lang/lang_extensions.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/cst/cst_visitor.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/traits/tree_builder.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/traits/lexer_adapter.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/traits/recognizer_api.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/traits/recognizer_engine.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/traits/error_handler.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/traits/context_assist.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/traits/gast_recorder.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/traits/perf_tracer.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/utils/apply_mixins.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/parse/parser/parser.ts", "../../../node_modules/.pnpm/@chevrotain+cst-dts-gen@11.0.3/node_modules/@chevrotain/cst-dts-gen/src/model.ts", "../../../node_modules/.pnpm/@chevrotain+cst-dts-gen@11.0.3/node_modules/@chevrotain/cst-dts-gen/src/generate.ts", "../../../node_modules/.pnpm/@chevrotain+cst-dts-gen@11.0.3/node_modules/@chevrotain/cst-dts-gen/src/api.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/diagrams/render_public.ts", "../../../node_modules/.pnpm/chevrotain@11.0.3/node_modules/chevrotain/src/api.ts", "../../../node_modules/.pnpm/chevrotain-allstar@0.3.1_chevrotain@11.0.3/node_modules/chevrotain-allstar/src/atn.ts", "../../../node_modules/.pnpm/chevrotain-allstar@0.3.1_chevrotain@11.0.3/node_modules/chevrotain-allstar/src/dfa.ts", "../../../node_modules/.pnpm/chevrotain-allstar@0.3.1_chevrotain@11.0.3/node_modules/chevrotain-allstar/src/all-star-lookahead.ts", "../../../node_modules/.pnpm/chevrotain-allstar@0.3.1_chevrotain@11.0.3/node_modules/chevrotain-allstar/src/index.ts", "../../../node_modules/.pnpm/vscode-languageserver-types@3.17.5/node_modules/vscode-languageserver-types/lib/esm/main.js", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/parser/cst-node-builder.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/parser/langium-parser.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/parser/parser-builder-base.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/parser/completion-parser-builder.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/parser/langium-parser-builder.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/parser/token-builder.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/parser/value-converter.ts", "../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/ral.js", "../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/is.js", "../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/events.js", "../../../node_modules/.pnpm/vscode-jsonrpc@8.2.0/node_modules/vscode-jsonrpc/lib/common/cancellation.js", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/utils/cancellation.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/utils/promise-utils.ts", "../../../node_modules/.pnpm/vscode-languageserver-textdocument@1.0.12/node_modules/vscode-languageserver-textdocument/lib/esm/main.js", "webpack://LIB/node_modules/path-browserify/index.js", "webpack://LIB/webpack/bootstrap", "webpack://LIB/webpack/runtime/define%20property%20getters", "webpack://LIB/webpack/runtime/hasOwnProperty%20shorthand", "webpack://LIB/webpack/runtime/make%20namespace%20object", "webpack://LIB/src/platform.ts", "webpack://LIB/src/uri.ts", "webpack://LIB/src/utils.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/utils/uri-utils.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/workspace/documents.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/references/linker.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/references/name-provider.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/references/references.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/utils/collections.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/references/scope-computation.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/references/scope.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/utils/caching.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/references/scope-provider.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/serializer/json-serializer.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/service-registry.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/validation/validation-registry.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/validation/document-validator.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/workspace/ast-descriptions.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/workspace/ast-node-locator.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/utils/event.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/workspace/configuration.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/utils/disposable.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/workspace/document-builder.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/workspace/index-manager.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/workspace/workspace-manager.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/parser/lexer.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/documentation/jsdoc.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/documentation/documentation-provider.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/documentation/comment-provider.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/parser/async-parser.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/workspace/workspace-lock.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/serializer/hydrator.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/default-module.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/dependency-injection.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/services.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/documentation/index.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/languages/language-meta-data.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/languages/index.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/parser/indentation-aware.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/parser/parser-config.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/parser/index.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/references/index.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/serializer/index.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/workspace/file-system-provider.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/utils/grammar-loader.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/utils/index.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/validation/index.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/workspace/index.ts", "../../../node_modules/.pnpm/langium@3.3.1/node_modules/langium/src/index.ts", "../../parser/dist/chunks/mermaid-parser.core/chunk-FPAJGGOC.mjs", "../../parser/dist/chunks/mermaid-parser.core/chunk-S6J4BHB3.mjs", "../../parser/dist/chunks/mermaid-parser.core/chunk-LBM3YZW2.mjs", "../../parser/dist/chunks/mermaid-parser.core/chunk-76Q3JFCE.mjs", "../../parser/dist/chunks/mermaid-parser.core/chunk-T53DSG4Q.mjs", "../../parser/dist/chunks/mermaid-parser.core/chunk-O7ZBX7Z2.mjs", "../../parser/dist/chunks/mermaid-parser.core/chunk-LHMN2FUI.mjs", "../../parser/dist/chunks/mermaid-parser.core/chunk-FWNWRKHM.mjs", "../../parser/dist/chunks/mermaid-parser.core/info-NVLQJR56.mjs", "../../parser/dist/chunks/mermaid-parser.core/packet-BFZMPI3H.mjs", "../../parser/dist/chunks/mermaid-parser.core/pie-7BOR55EZ.mjs", "../../parser/dist/chunks/mermaid-parser.core/architecture-U656AL7Q.mjs", "../../parser/dist/chunks/mermaid-parser.core/gitGraph-F6HP7TQM.mjs", "../../parser/dist/chunks/mermaid-parser.core/radar-NHE76QYJ.mjs", "../../parser/dist/chunks/mermaid-parser.core/treemap-KMMF4GRG.mjs", "../../parser/dist/mermaid-parser.core.mjs", "../src/diagrams/common/populateCommonDb.ts", "../src/diagrams/git/gitGraphTypes.ts", "../src/utils/imperativeState.ts", "../src/diagrams/git/gitGraphAst.ts", "../src/diagrams/git/gitGraphParser.ts", "../src/diagrams/git/gitGraphRenderer.ts", "../src/diagrams/git/styles.js", "../src/diagrams/git/gitGraphDiagram.ts", "../src/diagrams/gantt/parser/gantt.jison", "../../../node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/plugin/isoWeek.js", "../../../node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/plugin/customParseFormat.js", "../../../node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/plugin/advancedFormat.js", "../src/diagrams/gantt/ganttDb.js", "../../../node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/plugin/duration.js", "../src/diagrams/gantt/ganttRenderer.js", "../src/diagrams/gantt/styles.js", "../src/diagrams/gantt/ganttDiagram.ts", "../src/diagrams/info/infoParser.ts", "../package.json", "../src/diagrams/info/infoDb.ts", "../src/rendering-util/selectSvgElement.ts", "../src/diagrams/info/infoRenderer.ts", "../src/diagrams/info/infoDiagram.ts", "../src/diagrams/pie/pieDb.ts", "../src/diagrams/pie/pieParser.ts", "../src/diagrams/pie/pieStyles.ts", "../src/diagrams/pie/pieRenderer.ts", "../src/diagrams/pie/pieDiagram.ts", "../src/diagrams/quadrant-chart/parser/quadrant.jison", "../src/diagrams/quadrant-chart/quadrantBuilder.ts", "../src/diagrams/quadrant-chart/utils.ts", "../src/diagrams/quadrant-chart/quadrantDb.ts", "../src/diagrams/quadrant-chart/quadrantRenderer.ts", "../src/diagrams/quadrant-chart/quadrantDiagram.ts", "../src/diagrams/xychart/parser/xychart.jison", "../src/diagrams/xychart/chartBuilder/interfaces.ts", "../src/diagrams/xychart/chartBuilder/textDimensionCalculator.ts", "../src/diagrams/xychart/chartBuilder/components/axis/baseAxis.ts", "../src/diagrams/xychart/chartBuilder/components/axis/bandAxis.ts", "../src/diagrams/xychart/chartBuilder/components/axis/linearAxis.ts", "../src/diagrams/xychart/chartBuilder/components/axis/index.ts", "../src/diagrams/xychart/chartBuilder/components/chartTitle.ts", "../src/diagrams/xychart/chartBuilder/components/plot/linePlot.ts", "../src/diagrams/xychart/chartBuilder/components/plot/barPlot.ts", "../src/diagrams/xychart/chartBuilder/components/plot/index.ts", "../src/diagrams/xychart/chartBuilder/orchestrator.ts", "../src/diagrams/xychart/chartBuilder/index.ts", "../src/diagrams/xychart/xychartDb.ts", "../src/diagrams/xychart/xychartRenderer.ts", "../src/diagrams/xychart/xychartDiagram.ts", "../src/diagrams/requirement/parser/requirementDiagram.jison", "../src/diagrams/requirement/requirementDb.ts", "../src/diagrams/requirement/styles.js", "../src/diagrams/requirement/requirementRenderer.ts", "../src/diagrams/requirement/requirementDiagram.ts", "../src/diagrams/sequence/parser/sequenceDiagram.jison", "../src/diagrams/sequence/sequenceDb.ts", "../src/diagrams/sequence/styles.js", "../src/diagrams/sequence/svgDraw.js", "../src/diagrams/sequence/sequenceRenderer.ts", "../src/diagrams/sequence/sequenceDiagram.ts", "../src/diagrams/class/parser/classDiagram.jison", "../src/diagrams/class/classTypes.ts", "../src/diagrams/class/classDb.ts", "../src/diagrams/class/styles.js", "../src/diagrams/class/classRenderer-v3-unified.ts", "../src/diagrams/class/classDiagram.ts", "../src/diagrams/class/classDiagram-v2.ts", "../src/diagrams/state/parser/stateDiagram.jison", "../src/diagrams/state/stateCommon.ts", "../src/diagrams/state/dataFetcher.ts", "../src/diagrams/state/stateRenderer-v3-unified.ts", "../src/diagrams/state/stateDb.ts", "../src/diagrams/state/styles.js", "../src/diagrams/state/shapes.js", "../src/diagrams/state/stateRenderer.js", "../src/diagrams/state/stateDiagram.ts", "../src/diagrams/state/stateDiagram-v2.ts", "../src/diagrams/user-journey/parser/journey.jison", "../src/diagrams/user-journey/journeyDb.js", "../src/diagrams/user-journey/styles.js", "../src/diagrams/user-journey/svgDraw.js", "../src/diagrams/user-journey/journeyRenderer.ts", "../src/diagrams/user-journey/journeyDiagram.ts", "../src/diagrams/timeline/parser/timeline.jison", "../src/diagrams/timeline/timelineDb.js", "../src/diagrams/timeline/svgDraw.js", "../src/diagrams/timeline/timelineRenderer.ts", "../src/diagrams/timeline/styles.js", "../src/diagrams/timeline/timeline-definition.ts", "../src/diagrams/mindmap/parser/mindmap.jison", "../../../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/stringify.js", "../../../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/rng.js", "../../../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/native.js", "../../../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v4.js", "../../../node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/index.js", "../src/diagrams/mindmap/mindmapDb.ts", "../src/diagrams/mindmap/mindmapRenderer.ts", "../src/diagrams/mindmap/styles.ts", "../src/diagrams/mindmap/mindmap-definition.ts", "../src/diagrams/kanban/parser/kanban.jison", "../src/diagrams/kanban/kanbanDb.ts", "../src/diagrams/kanban/kanbanRenderer.ts", "../src/diagrams/kanban/styles.ts", "../src/diagrams/kanban/kanban-definition.ts", "../src/diagrams/sankey/parser/sankey.jison", "../src/diagrams/sankey/sankeyDB.ts", "../../../node_modules/.pnpm/d3-array@2.12.1/node_modules/d3-array/src/max.js", "../../../node_modules/.pnpm/d3-array@2.12.1/node_modules/d3-array/src/min.js", "../../../node_modules/.pnpm/d3-array@2.12.1/node_modules/d3-array/src/sum.js", "../../../node_modules/.pnpm/d3-array@2.12.1/node_modules/d3-array/src/index.js", "../../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/align.js", "../../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/constant.js", "../../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/sankey.js", "../../../node_modules/.pnpm/d3-path@1.0.9/node_modules/d3-path/src/path.js", "../../../node_modules/.pnpm/d3-path@1.0.9/node_modules/d3-path/src/index.js", "../../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/constant.js", "../../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/point.js", "../../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/array.js", "../../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/link/index.js", "../../../node_modules/.pnpm/d3-shape@1.3.7/node_modules/d3-shape/src/index.js", "../../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/sankeyLinkHorizontal.js", "../../../node_modules/.pnpm/d3-sankey@0.12.3/node_modules/d3-sankey/src/index.js", "../src/rendering-util/uid.ts", "../src/diagrams/sankey/sankeyRenderer.ts", "../src/diagrams/sankey/sankeyUtils.ts", "../src/diagrams/sankey/styles.js", "../src/diagrams/sankey/sankeyDiagram.ts", "../src/diagrams/packet/db.ts", "../src/diagrams/packet/parser.ts", "../src/diagrams/packet/renderer.ts", "../src/diagrams/packet/styles.ts", "../src/diagrams/packet/diagram.ts", "../src/diagrams/radar/db.ts", "../src/diagrams/radar/parser.ts", "../src/diagrams/radar/renderer.ts", "../src/diagrams/radar/styles.ts", "../src/diagrams/radar/diagram.ts", "../src/diagrams/block/parser/block.jison", "../src/diagrams/block/blockDB.ts", "../src/diagrams/block/styles.ts", "../src/dagre-wrapper/markers.js", "../src/diagrams/block/layout.ts", "../src/dagre-wrapper/createLabel.js", "../src/dagre-wrapper/edgeMarker.ts", "../src/dagre-wrapper/edges.js", "../src/dagre-wrapper/blockArrowHelper.ts", "../src/dagre-wrapper/intersect/intersect-node.js", "../src/dagre-wrapper/intersect/intersect-ellipse.js", "../src/dagre-wrapper/intersect/intersect-circle.js", "../src/dagre-wrapper/intersect/intersect-line.js", "../src/dagre-wrapper/intersect/intersect-polygon.js", "../src/dagre-wrapper/intersect/intersect-rect.js", "../src/dagre-wrapper/intersect/index.js", "../src/dagre-wrapper/shapes/util.js", "../src/dagre-wrapper/shapes/note.js", "../src/dagre-wrapper/nodes.js", "../src/diagrams/block/renderHelpers.ts", "../src/diagrams/block/blockRenderer.ts", "../src/diagrams/block/blockDiagram.ts", "../src/diagrams/architecture/architectureTypes.ts", "../src/diagrams/architecture/architectureDb.ts", "../src/diagrams/architecture/architectureParser.ts", "../src/diagrams/architecture/architectureStyles.ts", "../../../node_modules/.pnpm/layout-base@2.0.1/node_modules/layout-base/layout-base.js", "../../../node_modules/.pnpm/cose-base@2.2.0/node_modules/cose-base/cose-base.js", "../../../node_modules/.pnpm/cytoscape-fcose@2.2.0_cytoscape@3.33.1/node_modules/cytoscape-fcose/cytoscape-fcose.js", "../src/diagrams/architecture/architectureIcons.ts", "../src/diagrams/architecture/svgDraw.ts", "../src/diagrams/architecture/architectureRenderer.ts", "../src/diagrams/architecture/architectureDiagram.ts", "../src/diagrams/treemap/db.ts", "../src/diagrams/treemap/utils.ts", "../src/diagrams/treemap/parser.ts", "../src/diagrams/treemap/renderer.ts", "../src/diagrams/treemap/styles.ts", "../src/diagrams/treemap/diagram.ts", "../src/mermaid.ts", "../src/diagrams/c4/c4Detector.ts", "../src/diagrams/flowchart/flowDetector.ts", "../src/diagrams/flowchart/flowDetector-v2.ts", "../src/diagrams/er/erDetector.ts", "../src/diagrams/git/gitGraphDetector.ts", "../src/diagrams/gantt/ganttDetector.ts", "../src/diagrams/info/infoDetector.ts", "../src/diagrams/pie/pieDetector.ts", "../src/diagrams/quadrant-chart/quadrantDetector.ts", "../src/diagrams/xychart/xychartDetector.ts", "../src/diagrams/requirement/requirementDetector.ts", "../src/diagrams/sequence/sequenceDetector.ts", "../src/diagrams/class/classDetector.ts", "../src/diagrams/class/classDetector-V2.ts", "../src/diagrams/state/stateDetector.ts", "../src/diagrams/state/stateDetector-V2.ts", "../src/diagrams/user-journey/journeyDetector.ts", "../src/diagrams/error/errorRenderer.ts", "../src/diagrams/error/errorDiagram.ts", "../src/diagrams/flowchart/elk/detector.ts", "../src/diagrams/timeline/detector.ts", "../src/diagrams/mindmap/detector.ts", "../src/diagrams/kanban/detector.ts", "../src/diagrams/sankey/sankeyDetector.ts", "../src/diagrams/packet/detector.ts", "../src/diagrams/radar/detector.ts", "../src/diagrams/block/blockDetector.ts", "../src/diagrams/architecture/architectureDetector.ts", "../src/diagram-api/diagram-orchestration.ts", "../src/diagrams/treemap/detector.ts", "../src/diagram-api/loadDiagram.ts", "../src/mermaidAPI.ts", "../../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Enum.js", "../../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Utility.js", "../../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Tokenizer.js", "../../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Parser.js", "../../../node_modules/.pnpm/stylis@4.3.6/node_modules/stylis/src/Serializer.js", "../src/accessibility.ts", "../src/Diagram.ts", "../src/interactionDb.ts", "../src/diagram-api/comments.ts", "../src/diagram-api/frontmatter.ts", "../src/preprocess.ts", "../src/utils/base64.ts"], + "sourcesContent": ["/**\n* Default values for dimensions\n*/\nconst defaultIconDimensions = Object.freeze({\n\tleft: 0,\n\ttop: 0,\n\twidth: 16,\n\theight: 16\n});\n/**\n* Default values for transformations\n*/\nconst defaultIconTransformations = Object.freeze({\n\trotate: 0,\n\tvFlip: false,\n\thFlip: false\n});\n/**\n* Default values for all optional IconifyIcon properties\n*/\nconst defaultIconProps = Object.freeze({\n\t...defaultIconDimensions,\n\t...defaultIconTransformations\n});\n/**\n* Default values for all properties used in ExtendedIconifyIcon\n*/\nconst defaultExtendedIconProps = Object.freeze({\n\t...defaultIconProps,\n\tbody: \"\",\n\thidden: false\n});\n\nexport { defaultExtendedIconProps, defaultIconDimensions, defaultIconProps, defaultIconTransformations };", "import { defaultIconTransformations } from \"../icon/defaults.js\";\n\n/**\n* Default icon customisations values\n*/\nconst defaultIconSizeCustomisations = Object.freeze({\n\twidth: null,\n\theight: null\n});\nconst defaultIconCustomisations = Object.freeze({\n\t...defaultIconSizeCustomisations,\n\t...defaultIconTransformations\n});\n\nexport { defaultIconCustomisations, defaultIconSizeCustomisations };", "/**\n* Expression to test part of icon name.\n*\n* Used when loading icons from Iconify API due to project naming convension.\n* Ignored when using custom icon sets - convension does not apply.\n*/\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n/**\n* Convert string icon name to IconifyIconName object.\n*/\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n\tconst colonSeparated = value.split(\":\");\n\tif (value.slice(0, 1) === \"@\") {\n\t\tif (colonSeparated.length < 2 || colonSeparated.length > 3) return null;\n\t\tprovider = colonSeparated.shift().slice(1);\n\t}\n\tif (colonSeparated.length > 3 || !colonSeparated.length) return null;\n\tif (colonSeparated.length > 1) {\n\t\tconst name$1 = colonSeparated.pop();\n\t\tconst prefix = colonSeparated.pop();\n\t\tconst result = {\n\t\t\tprovider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n\t\t\tprefix,\n\t\t\tname: name$1\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tconst name = colonSeparated[0];\n\tconst dashSeparated = name.split(\"-\");\n\tif (dashSeparated.length > 1) {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: dashSeparated.shift(),\n\t\t\tname: dashSeparated.join(\"-\")\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tif (allowSimpleName && provider === \"\") {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: \"\",\n\t\t\tname\n\t\t};\n\t\treturn validate && !validateIconName(result, allowSimpleName) ? null : result;\n\t}\n\treturn null;\n};\n/**\n* Check if icon is valid.\n*\n* This function is not part of stringToIcon because validation is not needed for most code.\n*/\nconst validateIconName = (icon, allowSimpleName) => {\n\tif (!icon) return false;\n\treturn !!((allowSimpleName && icon.prefix === \"\" || !!icon.prefix) && !!icon.name);\n};\n\nexport { matchIconName, stringToIcon, validateIconName };", "/**\n* Merge transformations\n*/\nfunction mergeIconTransformations(obj1, obj2) {\n\tconst result = {};\n\tif (!obj1.hFlip !== !obj2.hFlip) result.hFlip = true;\n\tif (!obj1.vFlip !== !obj2.vFlip) result.vFlip = true;\n\tconst rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n\tif (rotate) result.rotate = rotate;\n\treturn result;\n}\n\nexport { mergeIconTransformations };", "import { defaultExtendedIconProps, defaultIconTransformations } from \"./defaults.js\";\nimport { mergeIconTransformations } from \"./transformations.js\";\n\n/**\n* Merge icon and alias\n*\n* Can also be used to merge default values and icon\n*/\nfunction mergeIconData(parent, child) {\n\tconst result = mergeIconTransformations(parent, child);\n\tfor (const key in defaultExtendedIconProps) if (key in defaultIconTransformations) {\n\t\tif (key in parent && !(key in result)) result[key] = defaultIconTransformations[key];\n\t} else if (key in child) result[key] = child[key];\n\telse if (key in parent) result[key] = parent[key];\n\treturn result;\n}\n\nexport { mergeIconData };", "/**\n* Resolve icon set icons\n*\n* Returns parent icon for each icon\n*/\nfunction getIconsTree(data, names) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tconst resolved = Object.create(null);\n\tfunction resolve(name) {\n\t\tif (icons[name]) return resolved[name] = [];\n\t\tif (!(name in resolved)) {\n\t\t\tresolved[name] = null;\n\t\t\tconst parent = aliases[name] && aliases[name].parent;\n\t\t\tconst value = parent && resolve(parent);\n\t\t\tif (value) resolved[name] = [parent].concat(value);\n\t\t}\n\t\treturn resolved[name];\n\t}\n\t(names || Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n\treturn resolved;\n}\n\nexport { getIconsTree };", "import { mergeIconData } from \"../icon/merge.js\";\nimport { getIconsTree } from \"./tree.js\";\n\n/**\n* Get icon data, using prepared aliases tree\n*/\nfunction internalGetIconData(data, name, tree) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tlet currentProps = {};\n\tfunction parse(name$1) {\n\t\tcurrentProps = mergeIconData(icons[name$1] || aliases[name$1], currentProps);\n\t}\n\tparse(name);\n\ttree.forEach(parse);\n\treturn mergeIconData(data, currentProps);\n}\n/**\n* Get data for icon\n*/\nfunction getIconData(data, name) {\n\tif (data.icons[name]) return internalGetIconData(data, name, []);\n\tconst tree = getIconsTree(data, [name])[name];\n\treturn tree ? internalGetIconData(data, name, tree) : null;\n}\n\nexport { getIconData, internalGetIconData };", "/**\n* Regular expressions for calculating dimensions\n*/\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n\tif (ratio === 1) return size;\n\tprecision = precision || 100;\n\tif (typeof size === \"number\") return Math.ceil(size * ratio * precision) / precision;\n\tif (typeof size !== \"string\") return size;\n\tconst oldParts = size.split(unitsSplit);\n\tif (oldParts === null || !oldParts.length) return size;\n\tconst newParts = [];\n\tlet code = oldParts.shift();\n\tlet isNumber = unitsTest.test(code);\n\twhile (true) {\n\t\tif (isNumber) {\n\t\t\tconst num = parseFloat(code);\n\t\t\tif (isNaN(num)) newParts.push(code);\n\t\t\telse newParts.push(Math.ceil(num * ratio * precision) / precision);\n\t\t} else newParts.push(code);\n\t\tcode = oldParts.shift();\n\t\tif (code === void 0) return newParts.join(\"\");\n\t\tisNumber = !isNumber;\n\t}\n}\n\nexport { calculateSize };", "function splitSVGDefs(content, tag = \"defs\") {\n\tlet defs = \"\";\n\tconst index = content.indexOf(\"<\" + tag);\n\twhile (index >= 0) {\n\t\tconst start = content.indexOf(\">\", index);\n\t\tconst end = content.indexOf(\"\", end);\n\t\tif (endEnd === -1) break;\n\t\tdefs += content.slice(start + 1, end).trim();\n\t\tcontent = content.slice(0, index).trim() + content.slice(endEnd + 1);\n\t}\n\treturn {\n\t\tdefs,\n\t\tcontent\n\t};\n}\n/**\n* Merge defs and content\n*/\nfunction mergeDefsAndContent(defs, content) {\n\treturn defs ? \"\" + defs + \"\" + content : content;\n}\n/**\n* Wrap SVG content, without wrapping definitions\n*/\nfunction wrapSVGContent(body, start, end) {\n\tconst split = splitSVGDefs(body);\n\treturn mergeDefsAndContent(split.defs, start + split.content + end);\n}\n\nexport { mergeDefsAndContent, splitSVGDefs, wrapSVGContent };", "import { defaultIconProps } from \"../icon/defaults.js\";\nimport { defaultIconCustomisations } from \"../customisations/defaults.js\";\nimport { calculateSize } from \"./size.js\";\nimport { wrapSVGContent } from \"./defs.js\";\n\n/**\n* Check if value should be unset. Allows multiple keywords\n*/\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\n/**\n* Get SVG attributes and content from icon + customisations\n*\n* Does not generate style to make it compatible with frameworks that use objects for style, such as React.\n* Instead, it generates 'inline' value. If true, rendering engine should add verticalAlign: -0.125em to icon.\n*\n* Customisations should be normalised by platform specific parser.\n* Result should be converted to by platform specific parser.\n* Use replaceIDs to generate unique IDs for body.\n*/\nfunction iconToSVG(icon, customisations) {\n\tconst fullIcon = {\n\t\t...defaultIconProps,\n\t\t...icon\n\t};\n\tconst fullCustomisations = {\n\t\t...defaultIconCustomisations,\n\t\t...customisations\n\t};\n\tconst box = {\n\t\tleft: fullIcon.left,\n\t\ttop: fullIcon.top,\n\t\twidth: fullIcon.width,\n\t\theight: fullIcon.height\n\t};\n\tlet body = fullIcon.body;\n\t[fullIcon, fullCustomisations].forEach((props) => {\n\t\tconst transformations = [];\n\t\tconst hFlip = props.hFlip;\n\t\tconst vFlip = props.vFlip;\n\t\tlet rotation = props.rotate;\n\t\tif (hFlip) if (vFlip) rotation += 2;\n\t\telse {\n\t\t\ttransformations.push(\"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(-1 1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\telse if (vFlip) {\n\t\t\ttransformations.push(\"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(1 -1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\tlet tempValue;\n\t\tif (rotation < 0) rotation -= Math.floor(rotation / 4) * 4;\n\t\trotation = rotation % 4;\n\t\tswitch (rotation) {\n\t\t\tcase 1:\n\t\t\t\ttempValue = box.height / 2 + box.top;\n\t\t\t\ttransformations.unshift(\"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\ttransformations.unshift(\"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\ttempValue = box.width / 2 + box.left;\n\t\t\t\ttransformations.unshift(\"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t}\n\t\tif (rotation % 2 === 1) {\n\t\t\tif (box.left !== box.top) {\n\t\t\t\ttempValue = box.left;\n\t\t\t\tbox.left = box.top;\n\t\t\t\tbox.top = tempValue;\n\t\t\t}\n\t\t\tif (box.width !== box.height) {\n\t\t\t\ttempValue = box.width;\n\t\t\t\tbox.width = box.height;\n\t\t\t\tbox.height = tempValue;\n\t\t\t}\n\t\t}\n\t\tif (transformations.length) body = wrapSVGContent(body, \"\", \"\");\n\t});\n\tconst customisationsWidth = fullCustomisations.width;\n\tconst customisationsHeight = fullCustomisations.height;\n\tconst boxWidth = box.width;\n\tconst boxHeight = box.height;\n\tlet width;\n\tlet height;\n\tif (customisationsWidth === null) {\n\t\theight = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t\twidth = calculateSize(height, boxWidth / boxHeight);\n\t} else {\n\t\twidth = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n\t\theight = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t}\n\tconst attributes = {};\n\tconst setAttr = (prop, value) => {\n\t\tif (!isUnsetKeyword(value)) attributes[prop] = value.toString();\n\t};\n\tsetAttr(\"width\", width);\n\tsetAttr(\"height\", height);\n\tconst viewBox = [\n\t\tbox.left,\n\t\tbox.top,\n\t\tboxWidth,\n\t\tboxHeight\n\t];\n\tattributes.viewBox = viewBox.join(\" \");\n\treturn {\n\t\tattributes,\n\t\tviewBox,\n\t\tbody\n\t};\n}\n\nexport { iconToSVG, isUnsetKeyword };", "/**\n* IDs usage:\n*\n* id=\"{id}\"\n* xlink:href=\"#{id}\"\n* url(#{id})\n*\n* From SVG animations:\n*\n* begin=\"0;{id}.end\"\n* begin=\"{id}.end\"\n* begin=\"{id}.click\"\n*/\n/**\n* Regular expression for finding ids\n*/\nconst regex = /\\sid=\"(\\S+)\"/g;\n/**\n* New random-ish prefix for ids\n*\n* Do not use dash, it cannot be used in SVG 2 animations\n*/\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\n/**\n* Counter for ids, increasing with every replacement\n*/\nlet counter = 0;\n/**\n* Replace IDs in SVG output with unique IDs\n*/\nfunction replaceIDs(body, prefix = randomPrefix) {\n\tconst ids = [];\n\tlet match;\n\twhile (match = regex.exec(body)) ids.push(match[1]);\n\tif (!ids.length) return body;\n\tconst suffix = \"suffix\" + (Math.random() * 16777216 | Date.now()).toString(16);\n\tids.forEach((id) => {\n\t\tconst newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n\t\tconst escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\t\tbody = body.replace(new RegExp(\"([#;\\\"])(\" + escapedID + \")([\\\")]|\\\\.[a-z])\", \"g\"), \"$1\" + newID + suffix + \"$3\");\n\t});\n\tbody = body.replace(new RegExp(suffix, \"g\"), \"\");\n\treturn body;\n}\n\nexport { replaceIDs };", "/**\n* Generate \n*/\nfunction iconToHTML(body, attributes) {\n\tlet renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : \" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\";\n\tfor (const attr in attributes) renderAttribsHTML += \" \" + attr + \"=\\\"\" + attributes[attr] + \"\\\"\";\n\treturn \"\" + body + \"\";\n}\n\nexport { iconToHTML };", "import { defaultExtendedIconProps, defaultIconDimensions, defaultIconProps, defaultIconTransformations } from \"./icon/defaults.js\";\nimport { defaultIconCustomisations, defaultIconSizeCustomisations } from \"./customisations/defaults.js\";\nimport { mergeCustomisations } from \"./customisations/merge.js\";\nimport { toBoolean } from \"./customisations/bool.js\";\nimport { flipFromString } from \"./customisations/flip.js\";\nimport { rotateFromString } from \"./customisations/rotate.js\";\nimport { matchIconName, stringToIcon, validateIconName } from \"./icon/name.js\";\nimport { mergeIconTransformations } from \"./icon/transformations.js\";\nimport { mergeIconData } from \"./icon/merge.js\";\nimport { makeIconSquare } from \"./icon/square.js\";\nimport { getIconsTree } from \"./icon-set/tree.js\";\nimport { getIconData } from \"./icon-set/get-icon.js\";\nimport { parseIconSet, parseIconSetAsync } from \"./icon-set/parse.js\";\nimport { validateIconSet } from \"./icon-set/validate.js\";\nimport { quicklyValidateIconSet } from \"./icon-set/validate-basic.js\";\nimport { expandIconSet } from \"./icon-set/expand.js\";\nimport { minifyIconSet } from \"./icon-set/minify.js\";\nimport { getIcons } from \"./icon-set/get-icons.js\";\nimport { convertIconSetInfo } from \"./icon-set/convert-info.js\";\nimport { calculateSize } from \"./svg/size.js\";\nimport { mergeDefsAndContent, splitSVGDefs, wrapSVGContent } from \"./svg/defs.js\";\nimport { iconToSVG } from \"./svg/build.js\";\nimport { replaceIDs } from \"./svg/id.js\";\nimport { svgToData, svgToURL } from \"./svg/url.js\";\nimport { encodeSvgForCss } from \"./svg/encode-svg-for-css.js\";\nimport { trimSVG } from \"./svg/trim.js\";\nimport { prettifySVG } from \"./svg/pretty.js\";\nimport { iconToHTML } from \"./svg/html.js\";\nimport { cleanUpInnerHTML } from \"./svg/inner-html.js\";\nimport { getSVGViewBox } from \"./svg/viewbox.js\";\nimport { buildParsedSVG, convertParsedSVG, parseSVGContent } from \"./svg/parse.js\";\nimport { colorKeywords } from \"./colors/keywords.js\";\nimport { colorToString, compareColors, stringToColor } from \"./colors/index.js\";\nimport { getIconCSS, getIconContentCSS } from \"./css/icon.js\";\nimport { getIconsCSS, getIconsContentCSS } from \"./css/icons.js\";\nimport { mergeIconProps } from \"./loader/utils.js\";\nimport { getCustomIcon } from \"./loader/custom.js\";\nimport { searchForIcon } from \"./loader/modern.js\";\nimport { loadIcon } from \"./loader/loader.js\";\nimport { convertEmojiSequenceToUTF16, convertEmojiSequenceToUTF32, getEmojiCodePoint, getEmojiUnicode, isUTF32SplitNumber, mergeUTF32Numbers, splitUTF32Number } from \"./emoji/convert.js\";\nimport { getEmojiSequenceFromString, getUnqualifiedEmojiSequence } from \"./emoji/cleanup.js\";\nimport { getEmojiSequenceKeyword, getEmojiSequenceString, getEmojiUnicodeString } from \"./emoji/format.js\";\nimport { parseEmojiTestFile } from \"./emoji/test/parse.js\";\nimport { getQualifiedEmojiVariations } from \"./emoji/test/variations.js\";\nimport { findMissingEmojis } from \"./emoji/test/missing.js\";\nimport { createOptimisedRegex, createOptimisedRegexForEmojiSequences } from \"./emoji/regex/create.js\";\nimport { prepareEmojiForIconSet, prepareEmojiForIconsList } from \"./emoji/parse.js\";\nimport { findAndReplaceEmojisInText } from \"./emoji/replace/replace.js\";\nimport { camelToKebab, camelize, pascalize, snakelize } from \"./misc/strings.js\";\nimport { commonObjectProps, compareObjects, unmergeObjects } from \"./misc/objects.js\";\nimport { sanitiseTitleAttribute } from \"./misc/title.js\";\n\nexport { buildParsedSVG, calculateSize, camelToKebab, camelize, cleanUpInnerHTML, colorKeywords, colorToString, commonObjectProps, compareColors, compareObjects, convertEmojiSequenceToUTF16, convertEmojiSequenceToUTF32, convertIconSetInfo, convertParsedSVG, createOptimisedRegex, createOptimisedRegexForEmojiSequences, defaultExtendedIconProps, defaultIconCustomisations, defaultIconDimensions, defaultIconProps, defaultIconSizeCustomisations, defaultIconTransformations, encodeSvgForCss, expandIconSet, findAndReplaceEmojisInText, findMissingEmojis, flipFromString, getCustomIcon, getEmojiCodePoint, getEmojiSequenceFromString, getEmojiSequenceKeyword, getEmojiSequenceString, getEmojiUnicode, getEmojiUnicodeString, getIconCSS, getIconContentCSS, getIconData, getIcons, getIconsCSS, getIconsContentCSS, getIconsTree, getQualifiedEmojiVariations, getSVGViewBox, getUnqualifiedEmojiSequence, iconToHTML, iconToSVG, isUTF32SplitNumber, loadIcon, makeIconSquare, matchIconName, mergeCustomisations, mergeDefsAndContent, mergeIconData, mergeIconProps, mergeIconTransformations, mergeUTF32Numbers, minifyIconSet, parseEmojiTestFile, parseIconSet, parseIconSetAsync, parseSVGContent, pascalize, prepareEmojiForIconSet, prepareEmojiForIconsList, prettifySVG, quicklyValidateIconSet, replaceIDs, rotateFromString, sanitiseTitleAttribute, searchForIcon, snakelize, splitSVGDefs, splitUTF32Number, stringToColor, stringToIcon, svgToData, svgToURL, toBoolean, trimSVG, unmergeObjects, validateIconName, validateIconSet, wrapSVGContent };", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * assignWithDepth Extends the functionality of {@link Object.assign} with the\n * ability to merge arbitrary-depth objects For each key in src with path `k` (recursively)\n * performs an Object.assign(dst[`k`], src[`k`]) with a slight change from the typical handling of\n * undefined for dst[`k`]: instead of raising an error, dst[`k`] is auto-initialized to `{}` and\n * effectively merged with src[`k`]

    Additionally, dissimilar types will not clobber unless the\n * config.clobber parameter === true. Example:\n *\n * ```\n * const config_0 = { foo: { bar: 'bar' }, bar: 'foo' };\n * const config_1 = { foo: 'foo', bar: 'bar' };\n * const result = assignWithDepth(config_0, config_1);\n * console.log(result);\n * //-> result: { foo: { bar: 'bar' }, bar: 'bar' }\n * ```\n *\n * Traditional Object.assign would have clobbered foo in config_0 with foo in config_1. If src is a\n * destructured array of objects and dst is not an array, assignWithDepth will apply each element\n * of src to dst in order.\n * @param dst - The destination of the merge\n * @param src - The source object(s) to merge into destination\n * @param config -\n * * depth: depth to traverse within src and dst for merging\n * * clobber: should dissimilar types clobber\n */\nconst assignWithDepth = (\n dst: any,\n src: any,\n { depth = 2, clobber = false }: { depth?: number; clobber?: boolean } = {}\n): any => {\n const config: { depth: number; clobber: boolean } = { depth, clobber };\n if (Array.isArray(src) && !Array.isArray(dst)) {\n src.forEach((s) => assignWithDepth(dst, s, config));\n return dst;\n } else if (Array.isArray(src) && Array.isArray(dst)) {\n src.forEach((s) => {\n if (!dst.includes(s)) {\n dst.push(s);\n }\n });\n return dst;\n }\n if (dst === undefined || depth <= 0) {\n if (dst !== undefined && dst !== null && typeof dst === 'object' && typeof src === 'object') {\n return Object.assign(dst, src);\n } else {\n return src;\n }\n }\n if (src !== undefined && typeof dst === 'object' && typeof src === 'object') {\n Object.keys(src).forEach((key) => {\n if (\n typeof src[key] === 'object' &&\n (dst[key] === undefined || typeof dst[key] === 'object')\n ) {\n if (dst[key] === undefined) {\n dst[key] = Array.isArray(src[key]) ? [] : {};\n }\n dst[key] = assignWithDepth(dst[key], src[key], { depth: depth - 1, clobber });\n } else if (clobber || (typeof dst[key] !== 'object' && typeof src[key] !== 'object')) {\n dst[key] = src[key];\n }\n });\n }\n return dst;\n};\n\nexport default assignWithDepth;\n", "!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t) = {\n trace: 0,\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n fatal: 5,\n};\n\nexport const log: Record = {\n trace: (..._args: any[]) => {},\n debug: (..._args: any[]) => {},\n info: (..._args: any[]) => {},\n warn: (..._args: any[]) => {},\n error: (..._args: any[]) => {},\n fatal: (..._args: any[]) => {},\n};\n\n/**\n * Sets a log level\n *\n * @param level - The level to set the logging to. Default is `\"fatal\"`\n */\nexport const setLogLevel = function (level: keyof typeof LEVELS | number = 'fatal') {\n let numericLevel: number = LEVELS.fatal;\n if (typeof level === 'string') {\n if (level.toLowerCase() in LEVELS) {\n numericLevel = LEVELS[level];\n }\n } else if (typeof level === 'number') {\n numericLevel = level;\n }\n log.trace = () => {};\n log.debug = () => {};\n log.info = () => {};\n log.warn = () => {};\n log.error = () => {};\n log.fatal = () => {};\n\n if (numericLevel <= LEVELS.fatal) {\n log.fatal = console.error\n ? console.error.bind(console, format('FATAL'), 'color: orange')\n : console.log.bind(console, '\\x1b[35m', format('FATAL'));\n }\n if (numericLevel <= LEVELS.error) {\n log.error = console.error\n ? console.error.bind(console, format('ERROR'), 'color: orange')\n : console.log.bind(console, '\\x1b[31m', format('ERROR'));\n }\n if (numericLevel <= LEVELS.warn) {\n log.warn = console.warn\n ? console.warn.bind(console, format('WARN'), 'color: orange')\n : console.log.bind(console, `\\x1b[33m`, format('WARN'));\n }\n if (numericLevel <= LEVELS.info) {\n log.info = console.info\n ? console.info.bind(console, format('INFO'), 'color: lightblue')\n : console.log.bind(console, '\\x1b[34m', format('INFO'));\n }\n if (numericLevel <= LEVELS.debug) {\n log.debug = console.debug\n ? console.debug.bind(console, format('DEBUG'), 'color: lightgreen')\n : console.log.bind(console, '\\x1b[32m', format('DEBUG'));\n }\n if (numericLevel <= LEVELS.trace) {\n log.trace = console.debug\n ? console.debug.bind(console, format('TRACE'), 'color: lightgreen')\n : console.log.bind(console, '\\x1b[32m', format('TRACE'));\n }\n};\n\n/**\n * Returns a format with the timestamp and the log level\n *\n * @param level - The level for the log format\n * @returns The format with the timestamp and log level\n */\nconst format = (level: Uppercase): string => {\n const time = dayjs().format('ss.SSS');\n return `%c${time} : ${level} : `;\n};\n", "/* IMPORT */\n/* MAIN */\nconst Channel = {\n /* CLAMP */\n min: {\n r: 0,\n g: 0,\n b: 0,\n s: 0,\n l: 0,\n a: 0\n },\n max: {\n r: 255,\n g: 255,\n b: 255,\n h: 360,\n s: 100,\n l: 100,\n a: 1\n },\n clamp: {\n r: (r) => r >= 255 ? 255 : (r < 0 ? 0 : r),\n g: (g) => g >= 255 ? 255 : (g < 0 ? 0 : g),\n b: (b) => b >= 255 ? 255 : (b < 0 ? 0 : b),\n h: (h) => h % 360,\n s: (s) => s >= 100 ? 100 : (s < 0 ? 0 : s),\n l: (l) => l >= 100 ? 100 : (l < 0 ? 0 : l),\n a: (a) => a >= 1 ? 1 : (a < 0 ? 0 : a)\n },\n /* CONVERSION */\n //SOURCE: https://planetcalc.com/7779\n toLinear: (c) => {\n const n = c / 255;\n return c > .03928 ? Math.pow(((n + .055) / 1.055), 2.4) : n / 12.92;\n },\n //SOURCE: https://gist.github.com/mjackson/5311256\n hue2rgb: (p, q, t) => {\n if (t < 0)\n t += 1;\n if (t > 1)\n t -= 1;\n if (t < 1 / 6)\n return p + (q - p) * 6 * t;\n if (t < 1 / 2)\n return q;\n if (t < 2 / 3)\n return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n },\n hsl2rgb: ({ h, s, l }, channel) => {\n if (!s)\n return l * 2.55; // Achromatic\n h /= 360;\n s /= 100;\n l /= 100;\n const q = (l < .5) ? l * (1 + s) : (l + s) - (l * s);\n const p = 2 * l - q;\n switch (channel) {\n case 'r': return Channel.hue2rgb(p, q, h + 1 / 3) * 255;\n case 'g': return Channel.hue2rgb(p, q, h) * 255;\n case 'b': return Channel.hue2rgb(p, q, h - 1 / 3) * 255;\n }\n },\n rgb2hsl: ({ r, g, b }, channel) => {\n r /= 255;\n g /= 255;\n b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n if (channel === 'l')\n return l * 100;\n if (max === min)\n return 0; // Achromatic\n const d = max - min;\n const s = (l > .5) ? d / (2 - max - min) : d / (max + min);\n if (channel === 's')\n return s * 100;\n switch (max) {\n case r: return ((g - b) / d + (g < b ? 6 : 0)) * 60;\n case g: return ((b - r) / d + 2) * 60;\n case b: return ((r - g) / d + 4) * 60;\n default: return -1; //TSC: TypeScript is stupid and complains if there isn't this useless default statement\n }\n }\n};\n/* EXPORT */\nexport default Channel;\n", "/* MAIN */\nconst Lang = {\n /* API */\n clamp: (number, lower, upper) => {\n if (lower > upper)\n return Math.min(lower, Math.max(upper, number));\n return Math.min(upper, Math.max(lower, number));\n },\n round: (number) => {\n return Math.round(number * 10000000000) / 10000000000;\n }\n};\n/* EXPORT */\nexport default Lang;\n", "/* MAIN */\nconst Unit = {\n /* API */\n dec2hex: (dec) => {\n const hex = Math.round(dec).toString(16);\n return hex.length > 1 ? hex : `0${hex}`;\n }\n};\n/* EXPORT */\nexport default Unit;\n", "/* IMPORT */\nimport channel from './channel.js';\nimport lang from './lang.js';\nimport unit from './unit.js';\n/* MAIN */\nconst Utils = {\n channel,\n lang,\n unit\n};\n/* EXPORT */\nexport default Utils;\n", "/* IMPORT */\nimport _ from './utils/index.js';\n/* MAIN */\nconst DEC2HEX = {};\nfor (let i = 0; i <= 255; i++)\n DEC2HEX[i] = _.unit.dec2hex(i); // Populating dynamically, striking a balance between code size and performance\nconst TYPE = {\n ALL: 0,\n RGB: 1,\n HSL: 2\n};\n/* EXPORT */\nexport { DEC2HEX, TYPE };\n", "/* IMPORT */\nimport { TYPE } from '../constants.js';\n/* MAIN */\nclass Type {\n constructor() {\n /* VARIABLES */\n this.type = TYPE.ALL;\n }\n /* API */\n get() {\n return this.type;\n }\n set(type) {\n if (this.type && this.type !== type)\n throw new Error('Cannot change both RGB and HSL channels at the same time');\n this.type = type;\n }\n reset() {\n this.type = TYPE.ALL;\n }\n is(type) {\n return this.type === type;\n }\n}\n/* EXPORT */\nexport default Type;\n", "/* IMPORT */\nimport _ from '../utils/index.js';\nimport Type from './type.js';\nimport { TYPE } from '../constants.js';\n/* MAIN */\nclass Channels {\n /* CONSTRUCTOR */\n constructor(data, color) {\n this.color = color;\n this.changed = false;\n this.data = data; //TSC\n this.type = new Type();\n }\n /* API */\n set(data, color) {\n this.color = color;\n this.changed = false;\n this.data = data; //TSC\n this.type.type = TYPE.ALL;\n return this;\n }\n /* HELPERS */\n _ensureHSL() {\n const data = this.data;\n const { h, s, l } = data;\n if (h === undefined)\n data.h = _.channel.rgb2hsl(data, 'h');\n if (s === undefined)\n data.s = _.channel.rgb2hsl(data, 's');\n if (l === undefined)\n data.l = _.channel.rgb2hsl(data, 'l');\n }\n _ensureRGB() {\n const data = this.data;\n const { r, g, b } = data;\n if (r === undefined)\n data.r = _.channel.hsl2rgb(data, 'r');\n if (g === undefined)\n data.g = _.channel.hsl2rgb(data, 'g');\n if (b === undefined)\n data.b = _.channel.hsl2rgb(data, 'b');\n }\n /* GETTERS */\n get r() {\n const data = this.data;\n const r = data.r;\n if (!this.type.is(TYPE.HSL) && r !== undefined)\n return r;\n this._ensureHSL();\n return _.channel.hsl2rgb(data, 'r');\n }\n get g() {\n const data = this.data;\n const g = data.g;\n if (!this.type.is(TYPE.HSL) && g !== undefined)\n return g;\n this._ensureHSL();\n return _.channel.hsl2rgb(data, 'g');\n }\n get b() {\n const data = this.data;\n const b = data.b;\n if (!this.type.is(TYPE.HSL) && b !== undefined)\n return b;\n this._ensureHSL();\n return _.channel.hsl2rgb(data, 'b');\n }\n get h() {\n const data = this.data;\n const h = data.h;\n if (!this.type.is(TYPE.RGB) && h !== undefined)\n return h;\n this._ensureRGB();\n return _.channel.rgb2hsl(data, 'h');\n }\n get s() {\n const data = this.data;\n const s = data.s;\n if (!this.type.is(TYPE.RGB) && s !== undefined)\n return s;\n this._ensureRGB();\n return _.channel.rgb2hsl(data, 's');\n }\n get l() {\n const data = this.data;\n const l = data.l;\n if (!this.type.is(TYPE.RGB) && l !== undefined)\n return l;\n this._ensureRGB();\n return _.channel.rgb2hsl(data, 'l');\n }\n get a() {\n return this.data.a;\n }\n /* SETTERS */\n set r(r) {\n this.type.set(TYPE.RGB);\n this.changed = true;\n this.data.r = r;\n }\n set g(g) {\n this.type.set(TYPE.RGB);\n this.changed = true;\n this.data.g = g;\n }\n set b(b) {\n this.type.set(TYPE.RGB);\n this.changed = true;\n this.data.b = b;\n }\n set h(h) {\n this.type.set(TYPE.HSL);\n this.changed = true;\n this.data.h = h;\n }\n set s(s) {\n this.type.set(TYPE.HSL);\n this.changed = true;\n this.data.s = s;\n }\n set l(l) {\n this.type.set(TYPE.HSL);\n this.changed = true;\n this.data.l = l;\n }\n set a(a) {\n this.changed = true;\n this.data.a = a;\n }\n}\n/* EXPORT */\nexport default Channels;\n", "/* IMPORT */\nimport Channels from './/index.js';\n/* MAIN */\nconst channels = new Channels({ r: 0, g: 0, b: 0, a: 0 }, 'transparent');\n/* EXPORT */\nexport default channels;\n", "/* IMPORT */\nimport _ from '../utils/index.js';\nimport ChannelsReusable from '../channels/reusable.js';\nimport { DEC2HEX } from '../constants.js';\n/* MAIN */\nconst Hex = {\n /* VARIABLES */\n re: /^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,\n /* API */\n parse: (color) => {\n if (color.charCodeAt(0) !== 35)\n return; // '#'\n const match = color.match(Hex.re);\n if (!match)\n return;\n const hex = match[1];\n const dec = parseInt(hex, 16);\n const length = hex.length;\n const hasAlpha = length % 4 === 0;\n const isFullLength = length > 4;\n const multiplier = isFullLength ? 1 : 17;\n const bits = isFullLength ? 8 : 4;\n const bitsOffset = hasAlpha ? 0 : -1;\n const mask = isFullLength ? 255 : 15;\n return ChannelsReusable.set({\n r: ((dec >> (bits * (bitsOffset + 3))) & mask) * multiplier,\n g: ((dec >> (bits * (bitsOffset + 2))) & mask) * multiplier,\n b: ((dec >> (bits * (bitsOffset + 1))) & mask) * multiplier,\n a: hasAlpha ? (dec & mask) * multiplier / 255 : 1\n }, color);\n },\n stringify: (channels) => {\n const { r, g, b, a } = channels;\n if (a < 1) { // #RRGGBBAA\n return `#${DEC2HEX[Math.round(r)]}${DEC2HEX[Math.round(g)]}${DEC2HEX[Math.round(b)]}${DEC2HEX[Math.round(a * 255)]}`;\n }\n else { // #RRGGBB\n return `#${DEC2HEX[Math.round(r)]}${DEC2HEX[Math.round(g)]}${DEC2HEX[Math.round(b)]}`;\n }\n }\n};\n/* EXPORT */\nexport default Hex;\n", "/* IMPORT */\nimport _ from '../utils/index.js';\nimport ChannelsReusable from '../channels/reusable.js';\n/* MAIN */\nconst HSL = {\n /* VARIABLES */\n re: /^hsla?\\(\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e-?\\d+)?(?:deg|grad|rad|turn)?)\\s*?(?:,|\\s)\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e-?\\d+)?%)\\s*?(?:,|\\s)\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e-?\\d+)?%)(?:\\s*?(?:,|\\/)\\s*?\\+?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e-?\\d+)?(%)?))?\\s*?\\)$/i,\n hueRe: /^(.+?)(deg|grad|rad|turn)$/i,\n /* HELPERS */\n _hue2deg: (hue) => {\n const match = hue.match(HSL.hueRe);\n if (match) {\n const [, number, unit] = match;\n switch (unit) {\n case 'grad': return _.channel.clamp.h(parseFloat(number) * .9);\n case 'rad': return _.channel.clamp.h(parseFloat(number) * 180 / Math.PI);\n case 'turn': return _.channel.clamp.h(parseFloat(number) * 360);\n }\n }\n return _.channel.clamp.h(parseFloat(hue));\n },\n /* API */\n parse: (color) => {\n const charCode = color.charCodeAt(0);\n if (charCode !== 104 && charCode !== 72)\n return; // 'h'/'H'\n const match = color.match(HSL.re);\n if (!match)\n return;\n const [, h, s, l, a, isAlphaPercentage] = match;\n return ChannelsReusable.set({\n h: HSL._hue2deg(h),\n s: _.channel.clamp.s(parseFloat(s)),\n l: _.channel.clamp.l(parseFloat(l)),\n a: a ? _.channel.clamp.a(isAlphaPercentage ? parseFloat(a) / 100 : parseFloat(a)) : 1\n }, color);\n },\n stringify: (channels) => {\n const { h, s, l, a } = channels;\n if (a < 1) { // HSLA\n return `hsla(${_.lang.round(h)}, ${_.lang.round(s)}%, ${_.lang.round(l)}%, ${a})`;\n }\n else { // HSL\n return `hsl(${_.lang.round(h)}, ${_.lang.round(s)}%, ${_.lang.round(l)}%)`;\n }\n }\n};\n/* EXPORT */\nexport default HSL;\n", "/* IMPORT */\nimport Hex from './hex.js';\n/* MAIN */\nconst Keyword = {\n /* VARIABLES */\n colors: {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyanaqua: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n transparent: '#00000000',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32'\n },\n /* API */\n parse: (color) => {\n color = color.toLowerCase();\n const hex = Keyword.colors[color];\n if (!hex)\n return;\n return Hex.parse(hex);\n },\n stringify: (channels) => {\n const hex = Hex.stringify(channels);\n for (const name in Keyword.colors) {\n if (Keyword.colors[name] === hex)\n return name;\n }\n return;\n }\n};\n/* EXPORT */\nexport default Keyword;\n", "/* IMPORT */\nimport _ from '../utils/index.js';\nimport ChannelsReusable from '../channels/reusable.js';\n/* MAIN */\nconst RGB = {\n /* VARIABLES */\n re: /^rgba?\\(\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e\\d+)?(%?))\\s*?(?:,|\\s)\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e\\d+)?(%?))\\s*?(?:,|\\s)\\s*?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e\\d+)?(%?))(?:\\s*?(?:,|\\/)\\s*?\\+?(-?(?:\\d+(?:\\.\\d+)?|(?:\\.\\d+))(?:e\\d+)?(%?)))?\\s*?\\)$/i,\n /* API */\n parse: (color) => {\n const charCode = color.charCodeAt(0);\n if (charCode !== 114 && charCode !== 82)\n return; // 'r'/'R'\n const match = color.match(RGB.re);\n if (!match)\n return;\n const [, r, isRedPercentage, g, isGreenPercentage, b, isBluePercentage, a, isAlphaPercentage] = match;\n return ChannelsReusable.set({\n r: _.channel.clamp.r(isRedPercentage ? parseFloat(r) * 2.55 : parseFloat(r)),\n g: _.channel.clamp.g(isGreenPercentage ? parseFloat(g) * 2.55 : parseFloat(g)),\n b: _.channel.clamp.b(isBluePercentage ? parseFloat(b) * 2.55 : parseFloat(b)),\n a: a ? _.channel.clamp.a(isAlphaPercentage ? parseFloat(a) / 100 : parseFloat(a)) : 1\n }, color);\n },\n stringify: (channels) => {\n const { r, g, b, a } = channels;\n if (a < 1) { // RGBA\n return `rgba(${_.lang.round(r)}, ${_.lang.round(g)}, ${_.lang.round(b)}, ${_.lang.round(a)})`;\n }\n else { // RGB\n return `rgb(${_.lang.round(r)}, ${_.lang.round(g)}, ${_.lang.round(b)})`;\n }\n }\n};\n/* EXPORT */\nexport default RGB;\n", "/* IMPORT */\nimport _ from '../utils/index.js';\nimport Hex from './hex.js';\nimport HSL from './hsl.js';\nimport Keyword from './keyword.js';\nimport RGB from './rgb.js';\nimport { TYPE } from '../constants.js';\n/* MAIN */\nconst Color = {\n /* VARIABLES */\n format: {\n keyword: Keyword,\n hex: Hex,\n rgb: RGB,\n rgba: RGB,\n hsl: HSL,\n hsla: HSL\n },\n /* API */\n parse: (color) => {\n if (typeof color !== 'string')\n return color;\n const channels = Hex.parse(color) || RGB.parse(color) || HSL.parse(color) || Keyword.parse(color); // Color providers ordered with performance in mind\n if (channels)\n return channels;\n throw new Error(`Unsupported color format: \"${color}\"`);\n },\n stringify: (channels) => {\n // SASS returns a keyword if possible, but we avoid doing that as it's slower and doesn't really add any value\n if (!channels.changed && channels.color)\n return channels.color;\n if (channels.type.is(TYPE.HSL) || channels.data.r === undefined) {\n return HSL.stringify(channels);\n }\n else if (channels.a < 1 || !Number.isInteger(channels.r) || !Number.isInteger(channels.g) || !Number.isInteger(channels.b)) {\n return RGB.stringify(channels);\n }\n else {\n return Hex.stringify(channels);\n }\n }\n};\n/* EXPORT */\nexport default Color;\n", "/* IMPORT */\nimport _ from '../utils/index.js';\nimport Color from '../color/index.js';\n/* MAIN */\nconst change = (color, channels) => {\n const ch = Color.parse(color);\n for (const c in channels) {\n ch[c] = _.channel.clamp[c](channels[c]);\n }\n return Color.stringify(ch);\n};\n/* EXPORT */\nexport default change;\n", "/* IMPORT */\nimport _ from '../utils/index.js';\nimport ChannelsReusable from '../channels/reusable.js';\nimport Color from '../color/index.js';\nimport change from './change.js';\n/* MAIN */\nconst rgba = (r, g, b = 0, a = 1) => {\n if (typeof r !== 'number')\n return change(r, { a: g });\n const channels = ChannelsReusable.set({\n r: _.channel.clamp.r(r),\n g: _.channel.clamp.g(g),\n b: _.channel.clamp.b(b),\n a: _.channel.clamp.a(a)\n });\n return Color.stringify(channels);\n};\n/* EXPORT */\nexport default rgba;\n", "/* IMPORT */\nimport _ from '../utils/index.js';\nimport Color from '../color/index.js';\n/* MAIN */\nconst channel = (color, channel) => {\n return _.lang.round(Color.parse(color)[channel]);\n};\n/* EXPORT */\nexport default channel;\n", "/* IMPORT */\nimport _ from '../utils/index.js';\nimport Color from '../color/index.js';\n/* MAIN */\n//SOURCE: https://planetcalc.com/7779\nconst luminance = (color) => {\n const { r, g, b } = Color.parse(color);\n const luminance = .2126 * _.channel.toLinear(r) + .7152 * _.channel.toLinear(g) + .0722 * _.channel.toLinear(b);\n return _.lang.round(luminance);\n};\n/* EXPORT */\nexport default luminance;\n", "/* IMPORT */\nimport luminance from './luminance.js';\n/* MAIN */\nconst isLight = (color) => {\n return luminance(color) >= .5;\n};\n/* EXPORT */\nexport default isLight;\n", "/* IMPORT */\nimport isLight from './is_light.js';\n/* MAIN */\nconst isDark = (color) => {\n return !isLight(color);\n};\n/* EXPORT */\nexport default isDark;\n", "/* IMPORT */\nimport _ from '../utils/index.js';\nimport Color from '../color/index.js';\n/* MAIN */\nconst adjustChannel = (color, channel, amount) => {\n const channels = Color.parse(color);\n const amountCurrent = channels[channel];\n const amountNext = _.channel.clamp[channel](amountCurrent + amount);\n if (amountCurrent !== amountNext)\n channels[channel] = amountNext;\n return Color.stringify(channels);\n};\n/* EXPORT */\nexport default adjustChannel;\n", "/* IMPORT */\nimport adjustChannel from './adjust_channel.js';\n/* MAIN */\nconst lighten = (color, amount) => {\n return adjustChannel(color, 'l', amount);\n};\n/* EXPORT */\nexport default lighten;\n", "/* IMPORT */\nimport adjustChannel from './adjust_channel.js';\n/* MAIN */\nconst darken = (color, amount) => {\n return adjustChannel(color, 'l', -amount);\n};\n/* EXPORT */\nexport default darken;\n", "/* IMPORT */\nimport Color from '../color/index.js';\nimport change from './change.js';\n/* MAIN */\nconst adjust = (color, channels) => {\n const ch = Color.parse(color);\n const changes = {};\n for (const c in channels) {\n if (!channels[c])\n continue;\n changes[c] = ch[c] + channels[c];\n }\n return change(color, changes);\n};\n/* EXPORT */\nexport default adjust;\n", "/* IMPORT */\nimport Color from '../color/index.js';\nimport rgba from './rgba.js';\n/* MAIN */\n//SOURCE: https://github.com/sass/dart-sass/blob/7457d2e9e7e623d9844ffd037a070cf32d39c348/lib/src/functions/color.dart#L718-L756\nconst mix = (color1, color2, weight = 50) => {\n const { r: r1, g: g1, b: b1, a: a1 } = Color.parse(color1);\n const { r: r2, g: g2, b: b2, a: a2 } = Color.parse(color2);\n const weightScale = weight / 100;\n const weightNormalized = (weightScale * 2) - 1;\n const alphaDelta = a1 - a2;\n const weight1combined = ((weightNormalized * alphaDelta) === -1) ? weightNormalized : (weightNormalized + alphaDelta) / (1 + weightNormalized * alphaDelta);\n const weight1 = (weight1combined + 1) / 2;\n const weight2 = 1 - weight1;\n const r = (r1 * weight1) + (r2 * weight2);\n const g = (g1 * weight1) + (g2 * weight2);\n const b = (b1 * weight1) + (b2 * weight2);\n const a = (a1 * weightScale) + (a2 * (1 - weightScale));\n return rgba(r, g, b, a);\n};\n/* EXPORT */\nexport default mix;\n", "/* IMPORT */\nimport Color from '../color/index.js';\nimport mix from './mix.js';\n/* MAIN */\nconst invert = (color, weight = 100) => {\n const inverse = Color.parse(color);\n inverse.r = 255 - inverse.r;\n inverse.g = 255 - inverse.g;\n inverse.b = 255 - inverse.b;\n return mix(inverse, color, weight);\n};\n/* EXPORT */\nexport default invert;\n", "/* IMPORT */\nimport hex from './rgba.js'; // Alias\nimport rgb from './rgba.js'; // Alias\nimport rgba from './rgba.js';\nimport hsl from './hsla.js'; // Alias\nimport hsla from './hsla.js';\nimport toKeyword from './to_keyword.js';\nimport toHex from './to_hex.js';\nimport toRgba from './to_rgba.js';\nimport toHsla from './to_hsla.js';\nimport channel from './channel.js';\nimport red from './red.js';\nimport green from './green.js';\nimport blue from './blue.js';\nimport hue from './hue.js';\nimport saturation from './saturation.js';\nimport lightness from './lightness.js';\nimport alpha from './alpha.js';\nimport opacity from './alpha.js'; // Alias\nimport contrast from './contrast.js';\nimport luminance from './luminance.js';\nimport isDark from './is_dark.js';\nimport isLight from './is_light.js';\nimport isTransparent from './is_transparent.js';\nimport isValid from './is_valid.js';\nimport saturate from './saturate.js';\nimport desaturate from './desaturate.js';\nimport lighten from './lighten.js';\nimport darken from './darken.js';\nimport opacify from './opacify.js';\nimport fadeIn from './opacify.js'; // Alias\nimport transparentize from './transparentize.js';\nimport fadeOut from './transparentize.js'; // Alias\nimport complement from './complement.js';\nimport grayscale from './grayscale.js';\nimport adjust from './adjust.js';\nimport change from './change.js';\nimport invert from './invert.js';\nimport mix from './mix.js';\nimport scale from './scale.js';\n/* EXPORT */\nexport { \n/* CREATE */\nhex, rgb, rgba, hsl, hsla, \n/* CONVERT */\ntoKeyword, toHex, toRgba, toHsla, \n/* GET - CHANNEL */\nchannel, red, green, blue, hue, saturation, lightness, alpha, opacity, \n/* GET - MORE */\ncontrast, luminance, isDark, isLight, isTransparent, isValid, \n/* EDIT - CHANNEL */\nsaturate, desaturate, lighten, darken, opacify, fadeIn, transparentize, fadeOut, complement, grayscale, \n/* EDIT - MORE */\nadjust, change, invert, mix, scale };\n", "/* EXPORT */\nexport * from './methods/index.js';\n", "/**\n * Values that have been hardcoded in src/diagrams/er/styles.js. These can be used by\n * theme-_._ files to maintain display styles until themes, styles, renderers are revised. --\n * 2022-09-22\n */\nexport const oldAttributeBackgroundColorOdd = '#ffffff';\nexport const oldAttributeBackgroundColorEven = '#f2f2f2';\n", "import { adjust } from 'khroma';\n\nexport const mkBorder = (col, darkMode) =>\n darkMode ? adjust(col, { s: -40, l: 10 }) : adjust(col, { s: -40, l: -10 });\n", "import { adjust, darken, invert, isDark, lighten } from 'khroma';\nimport {\n oldAttributeBackgroundColorEven,\n oldAttributeBackgroundColorOdd,\n} from './erDiagram-oldHardcodedValues.js';\nimport { mkBorder } from './theme-helpers.js';\n\nclass Theme {\n constructor() {\n /** # Base variables */\n /**\n * - Background - used to know what the background color is of the diagram. This is used for\n * deducing colors for instance line color. Default value is #f4f4f4.\n */\n this.background = '#f4f4f4';\n\n this.primaryColor = '#fff4dd';\n\n this.noteBkgColor = '#fff5ad';\n this.noteTextColor = '#333';\n\n this.THEME_COLOR_LIMIT = 12;\n\n // dark\n\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = '16px';\n }\n updateColors() {\n // The || is to make sure that if the variable has been defined by a user override that value is to be used\n\n /* Main */\n this.primaryTextColor = this.primaryTextColor || (this.darkMode ? '#eee' : '#333'); // invert(this.primaryColor);\n this.secondaryColor = this.secondaryColor || adjust(this.primaryColor, { h: -120 });\n this.tertiaryColor = this.tertiaryColor || adjust(this.primaryColor, { h: 180, l: 5 });\n\n this.primaryBorderColor = this.primaryBorderColor || mkBorder(this.primaryColor, this.darkMode);\n this.secondaryBorderColor =\n this.secondaryBorderColor || mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor =\n this.tertiaryBorderColor || mkBorder(this.tertiaryColor, this.darkMode);\n this.noteBorderColor = this.noteBorderColor || mkBorder(this.noteBkgColor, this.darkMode);\n this.noteBkgColor = this.noteBkgColor || '#fff5ad';\n this.noteTextColor = this.noteTextColor || '#333';\n\n this.secondaryTextColor = this.secondaryTextColor || invert(this.secondaryColor);\n this.tertiaryTextColor = this.tertiaryTextColor || invert(this.tertiaryColor);\n this.lineColor = this.lineColor || invert(this.background);\n this.arrowheadColor = this.arrowheadColor || invert(this.background);\n this.textColor = this.textColor || this.primaryTextColor;\n\n // TODO: should this instead default to secondaryBorderColor?\n this.border2 = this.border2 || this.tertiaryBorderColor;\n\n /* Flowchart variables */\n this.nodeBkg = this.nodeBkg || this.primaryColor;\n this.mainBkg = this.mainBkg || this.primaryColor;\n this.nodeBorder = this.nodeBorder || this.primaryBorderColor;\n this.clusterBkg = this.clusterBkg || this.tertiaryColor;\n this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor;\n this.defaultLinkColor = this.defaultLinkColor || this.lineColor;\n this.titleColor = this.titleColor || this.tertiaryTextColor;\n this.edgeLabelBackground =\n this.edgeLabelBackground ||\n (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor);\n this.nodeTextColor = this.nodeTextColor || this.primaryTextColor;\n /* Sequence Diagram variables */\n\n // this.actorBorder = lighten(this.border1, 0.5);\n this.actorBorder = this.actorBorder || this.primaryBorderColor;\n this.actorBkg = this.actorBkg || this.mainBkg;\n this.actorTextColor = this.actorTextColor || this.primaryTextColor;\n this.actorLineColor = this.actorLineColor || this.actorBorder;\n this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg;\n this.signalColor = this.signalColor || this.textColor;\n this.signalTextColor = this.signalTextColor || this.textColor;\n this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder;\n this.labelTextColor = this.labelTextColor || this.actorTextColor;\n this.loopTextColor = this.loopTextColor || this.actorTextColor;\n this.activationBorderColor = this.activationBorderColor || darken(this.secondaryColor, 10);\n this.activationBkgColor = this.activationBkgColor || this.secondaryColor;\n this.sequenceNumberColor = this.sequenceNumberColor || invert(this.lineColor);\n\n /* Gantt chart variables */\n\n this.sectionBkgColor = this.sectionBkgColor || this.tertiaryColor;\n this.altSectionBkgColor = this.altSectionBkgColor || 'white';\n this.sectionBkgColor = this.sectionBkgColor || this.secondaryColor;\n this.sectionBkgColor2 = this.sectionBkgColor2 || this.primaryColor;\n this.excludeBkgColor = this.excludeBkgColor || '#eeeeee';\n this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor;\n this.taskBkgColor = this.taskBkgColor || this.primaryColor;\n this.activeTaskBorderColor = this.activeTaskBorderColor || this.primaryColor;\n this.activeTaskBkgColor = this.activeTaskBkgColor || lighten(this.primaryColor, 23);\n this.gridColor = this.gridColor || 'lightgrey';\n this.doneTaskBkgColor = this.doneTaskBkgColor || 'lightgrey';\n this.doneTaskBorderColor = this.doneTaskBorderColor || 'grey';\n this.critBorderColor = this.critBorderColor || '#ff8888';\n this.critBkgColor = this.critBkgColor || 'red';\n this.todayLineColor = this.todayLineColor || 'red';\n this.vertLineColor = this.vertLineColor || 'navy';\n this.taskTextColor = this.taskTextColor || this.textColor;\n this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor;\n this.taskTextLightColor = this.taskTextLightColor || this.textColor;\n this.taskTextColor = this.taskTextColor || this.primaryTextColor;\n this.taskTextDarkColor = this.taskTextDarkColor || this.textColor;\n this.taskTextClickableColor = this.taskTextClickableColor || '#003163';\n\n /* Sequence Diagram variables */\n\n this.personBorder = this.personBorder || this.primaryBorderColor;\n this.personBkg = this.personBkg || this.mainBkg;\n\n /* ER diagram */\n\n if (this.darkMode) {\n this.rowOdd = this.rowOdd || darken(this.mainBkg, 5) || '#ffffff';\n this.rowEven = this.rowEven || darken(this.mainBkg, 10);\n } else {\n this.rowOdd = this.rowOdd || lighten(this.mainBkg, 75) || '#ffffff';\n this.rowEven = this.rowEven || lighten(this.mainBkg, 5);\n }\n\n /* state colors */\n this.transitionColor = this.transitionColor || this.lineColor;\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n /* The color of the text tables of the states*/\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || this.tertiaryColor;\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.compositeBorder = this.compositeBorder || this.nodeBorder;\n this.innerEndBackground = this.nodeBorder;\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n this.specialStateColor = this.lineColor;\n\n /* Color Scale */\n /* Each color-set will have a background, a foreground and a border color */\n this.cScale0 = this.cScale0 || this.primaryColor;\n this.cScale1 = this.cScale1 || this.secondaryColor;\n this.cScale2 = this.cScale2 || this.tertiaryColor;\n this.cScale3 = this.cScale3 || adjust(this.primaryColor, { h: 30 });\n this.cScale4 = this.cScale4 || adjust(this.primaryColor, { h: 60 });\n this.cScale5 = this.cScale5 || adjust(this.primaryColor, { h: 90 });\n this.cScale6 = this.cScale6 || adjust(this.primaryColor, { h: 120 });\n this.cScale7 = this.cScale7 || adjust(this.primaryColor, { h: 150 });\n this.cScale8 = this.cScale8 || adjust(this.primaryColor, { h: 210, l: 150 });\n this.cScale9 = this.cScale9 || adjust(this.primaryColor, { h: 270 });\n this.cScale10 = this.cScale10 || adjust(this.primaryColor, { h: 300 });\n this.cScale11 = this.cScale11 || adjust(this.primaryColor, { h: 330 });\n if (this.darkMode) {\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this['cScale' + i] = darken(this['cScale' + i], 75);\n }\n } else {\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this['cScale' + i] = darken(this['cScale' + i], 25);\n }\n }\n\n // Setup the inverted color for the set\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this['cScaleInv' + i] = this['cScaleInv' + i] || invert(this['cScale' + i]);\n }\n // Setup the peer color for the set, useful for borders\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n if (this.darkMode) {\n this['cScalePeer' + i] = this['cScalePeer' + i] || lighten(this['cScale' + i], 10);\n } else {\n this['cScalePeer' + i] = this['cScalePeer' + i] || darken(this['cScale' + i], 10);\n }\n }\n\n // Setup the label color for the set\n this.scaleLabelColor = this.scaleLabelColor || this.labelTextColor;\n\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this['cScaleLabel' + i] = this['cScaleLabel' + i] || this.scaleLabelColor;\n }\n\n const multiplier = this.darkMode ? -4 : -1;\n for (let i = 0; i < 5; i++) {\n this['surface' + i] =\n this['surface' + i] ||\n adjust(this.mainBkg, { h: 180, s: -15, l: multiplier * (5 + i * 3) });\n this['surfacePeer' + i] =\n this['surfacePeer' + i] ||\n adjust(this.mainBkg, { h: 180, s: -15, l: multiplier * (8 + i * 3) });\n }\n\n /* class */\n this.classText = this.classText || this.textColor;\n\n /* user-journey */\n this.fillType0 = this.fillType0 || this.primaryColor;\n this.fillType1 = this.fillType1 || this.secondaryColor;\n this.fillType2 = this.fillType2 || adjust(this.primaryColor, { h: 64 });\n this.fillType3 = this.fillType3 || adjust(this.secondaryColor, { h: 64 });\n this.fillType4 = this.fillType4 || adjust(this.primaryColor, { h: -64 });\n this.fillType5 = this.fillType5 || adjust(this.secondaryColor, { h: -64 });\n this.fillType6 = this.fillType6 || adjust(this.primaryColor, { h: 128 });\n this.fillType7 = this.fillType7 || adjust(this.secondaryColor, { h: 128 });\n\n /* pie */\n this.pie1 = this.pie1 || this.primaryColor;\n this.pie2 = this.pie2 || this.secondaryColor;\n this.pie3 = this.pie3 || this.tertiaryColor;\n this.pie4 = this.pie4 || adjust(this.primaryColor, { l: -10 });\n this.pie5 = this.pie5 || adjust(this.secondaryColor, { l: -10 });\n this.pie6 = this.pie6 || adjust(this.tertiaryColor, { l: -10 });\n this.pie7 = this.pie7 || adjust(this.primaryColor, { h: +60, l: -10 });\n this.pie8 = this.pie8 || adjust(this.primaryColor, { h: -60, l: -10 });\n this.pie9 = this.pie9 || adjust(this.primaryColor, { h: 120, l: 0 });\n this.pie10 = this.pie10 || adjust(this.primaryColor, { h: +60, l: -20 });\n this.pie11 = this.pie11 || adjust(this.primaryColor, { h: -60, l: -20 });\n this.pie12 = this.pie12 || adjust(this.primaryColor, { h: 120, l: -10 });\n this.pieTitleTextSize = this.pieTitleTextSize || '25px';\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || '17px';\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || '17px';\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || 'black';\n this.pieStrokeWidth = this.pieStrokeWidth || '2px';\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || '2px';\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || 'black';\n this.pieOpacity = this.pieOpacity || '0.7';\n\n /* radar */\n this.radar = {\n axisColor: this.radar?.axisColor || this.lineColor,\n axisStrokeWidth: this.radar?.axisStrokeWidth || 2,\n axisLabelFontSize: this.radar?.axisLabelFontSize || 12,\n curveOpacity: this.radar?.curveOpacity || 0.5,\n curveStrokeWidth: this.radar?.curveStrokeWidth || 2,\n graticuleColor: this.radar?.graticuleColor || '#DEDEDE',\n graticuleStrokeWidth: this.radar?.graticuleStrokeWidth || 1,\n graticuleOpacity: this.radar?.graticuleOpacity || 0.3,\n legendBoxSize: this.radar?.legendBoxSize || 12,\n legendFontSize: this.radar?.legendFontSize || 12,\n };\n\n /* architecture */\n this.archEdgeColor = this.archEdgeColor || '#777';\n this.archEdgeArrowColor = this.archEdgeArrowColor || '#777';\n this.archEdgeWidth = this.archEdgeWidth || '3';\n this.archGroupBorderColor = this.archGroupBorderColor || '#000';\n this.archGroupBorderWidth = this.archGroupBorderWidth || '2px';\n\n /* quadrant-graph */\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || adjust(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || adjust(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || adjust(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill =\n this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill =\n this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill =\n this.quadrant4TextFill || adjust(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill =\n this.quadrantPointFill || isDark(this.quadrant1Fill)\n ? lighten(this.quadrant1Fill)\n : darken(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill =\n this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill =\n this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n\n /* xychart */\n this.xyChart = {\n backgroundColor: this.xyChart?.backgroundColor || this.background,\n titleColor: this.xyChart?.titleColor || this.primaryTextColor,\n xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,\n xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,\n xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,\n xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,\n yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,\n yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,\n yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,\n yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,\n plotColorPalette:\n this.xyChart?.plotColorPalette ||\n '#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0',\n };\n\n /* requirement-diagram */\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || '1';\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground =\n this.relationLabelBackground ||\n (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor);\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n\n /* git */\n this.git0 = this.git0 || this.primaryColor;\n this.git1 = this.git1 || this.secondaryColor;\n this.git2 = this.git2 || this.tertiaryColor;\n this.git3 = this.git3 || adjust(this.primaryColor, { h: -30 });\n this.git4 = this.git4 || adjust(this.primaryColor, { h: -60 });\n this.git5 = this.git5 || adjust(this.primaryColor, { h: -90 });\n this.git6 = this.git6 || adjust(this.primaryColor, { h: +60 });\n this.git7 = this.git7 || adjust(this.primaryColor, { h: +120 });\n if (this.darkMode) {\n this.git0 = lighten(this.git0, 25);\n this.git1 = lighten(this.git1, 25);\n this.git2 = lighten(this.git2, 25);\n this.git3 = lighten(this.git3, 25);\n this.git4 = lighten(this.git4, 25);\n this.git5 = lighten(this.git5, 25);\n this.git6 = lighten(this.git6, 25);\n this.git7 = lighten(this.git7, 25);\n } else {\n this.git0 = darken(this.git0, 25);\n this.git1 = darken(this.git1, 25);\n this.git2 = darken(this.git2, 25);\n this.git3 = darken(this.git3, 25);\n this.git4 = darken(this.git4, 25);\n this.git5 = darken(this.git5, 25);\n this.git6 = darken(this.git6, 25);\n this.git7 = darken(this.git7, 25);\n }\n this.gitInv0 = this.gitInv0 || invert(this.git0);\n this.gitInv1 = this.gitInv1 || invert(this.git1);\n this.gitInv2 = this.gitInv2 || invert(this.git2);\n this.gitInv3 = this.gitInv3 || invert(this.git3);\n this.gitInv4 = this.gitInv4 || invert(this.git4);\n this.gitInv5 = this.gitInv5 || invert(this.git5);\n this.gitInv6 = this.gitInv6 || invert(this.git6);\n this.gitInv7 = this.gitInv7 || invert(this.git7);\n this.branchLabelColor =\n this.branchLabelColor || (this.darkMode ? 'black' : this.labelTextColor);\n this.gitBranchLabel0 = this.gitBranchLabel0 || this.branchLabelColor;\n this.gitBranchLabel1 = this.gitBranchLabel1 || this.branchLabelColor;\n this.gitBranchLabel2 = this.gitBranchLabel2 || this.branchLabelColor;\n this.gitBranchLabel3 = this.gitBranchLabel3 || this.branchLabelColor;\n this.gitBranchLabel4 = this.gitBranchLabel4 || this.branchLabelColor;\n this.gitBranchLabel5 = this.gitBranchLabel5 || this.branchLabelColor;\n this.gitBranchLabel6 = this.gitBranchLabel6 || this.branchLabelColor;\n this.gitBranchLabel7 = this.gitBranchLabel7 || this.branchLabelColor;\n\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || '10px';\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || '10px';\n\n /* -------------------------------------------------- */\n /* EntityRelationship diagrams */\n\n this.attributeBackgroundColorOdd =\n this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;\n this.attributeBackgroundColorEven =\n this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;\n /* -------------------------------------------------- */\n }\n calculate(overrides) {\n if (typeof overrides !== 'object') {\n // Calculate colors form base colors\n this.updateColors();\n return;\n }\n\n const keys = Object.keys(overrides);\n\n // Copy values from overrides, this is mainly for base colors\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n\n // Calculate colors form base colors\n this.updateColors();\n // Copy values from overrides again in case of an override of derived value\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n}\n\nexport const getThemeVariables = (userOverrides) => {\n const theme = new Theme();\n theme.calculate(userOverrides);\n return theme;\n};\n", "import { adjust, darken, invert, isDark, lighten, rgba } from 'khroma';\nimport { mkBorder } from './theme-helpers.js';\n\nclass Theme {\n constructor() {\n this.background = '#333';\n this.primaryColor = '#1f2020';\n this.secondaryColor = lighten(this.primaryColor, 16);\n this.tertiaryColor = adjust(this.primaryColor, { h: -160 });\n this.primaryBorderColor = invert(this.background);\n this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n this.primaryTextColor = invert(this.primaryColor);\n this.secondaryTextColor = invert(this.secondaryColor);\n this.tertiaryTextColor = invert(this.tertiaryColor);\n this.lineColor = invert(this.background);\n this.textColor = invert(this.background);\n\n this.mainBkg = '#1f2020';\n this.secondBkg = 'calculated';\n this.mainContrastColor = 'lightgrey';\n this.darkTextColor = lighten(invert('#323D47'), 10);\n this.lineColor = 'calculated';\n this.border1 = '#ccc';\n this.border2 = rgba(255, 255, 255, 0.25);\n this.arrowheadColor = 'calculated';\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = '16px';\n this.labelBackground = '#181818';\n this.textColor = '#ccc';\n this.THEME_COLOR_LIMIT = 12;\n\n /* Flowchart variables */\n this.nodeBkg = 'calculated';\n this.nodeBorder = 'calculated';\n this.clusterBkg = 'calculated';\n this.clusterBorder = 'calculated';\n this.defaultLinkColor = 'calculated';\n this.titleColor = '#F9FFFE';\n this.edgeLabelBackground = 'calculated';\n\n /* Sequence Diagram variables */\n\n this.actorBorder = 'calculated';\n this.actorBkg = 'calculated';\n this.actorTextColor = 'calculated';\n this.actorLineColor = 'calculated';\n this.signalColor = 'calculated';\n this.signalTextColor = 'calculated';\n this.labelBoxBkgColor = 'calculated';\n this.labelBoxBorderColor = 'calculated';\n this.labelTextColor = 'calculated';\n this.loopTextColor = 'calculated';\n this.noteBorderColor = 'calculated';\n this.noteBkgColor = '#fff5ad';\n this.noteTextColor = 'calculated';\n this.activationBorderColor = 'calculated';\n this.activationBkgColor = 'calculated';\n this.sequenceNumberColor = 'black';\n\n /* Gantt chart variables */\n\n this.sectionBkgColor = darken('#EAE8D9', 30);\n this.altSectionBkgColor = 'calculated';\n this.sectionBkgColor2 = '#EAE8D9';\n this.excludeBkgColor = darken(this.sectionBkgColor, 10);\n this.taskBorderColor = rgba(255, 255, 255, 70);\n this.taskBkgColor = 'calculated';\n this.taskTextColor = 'calculated';\n this.taskTextLightColor = 'calculated';\n this.taskTextOutsideColor = 'calculated';\n this.taskTextClickableColor = '#003163';\n this.activeTaskBorderColor = rgba(255, 255, 255, 50);\n this.activeTaskBkgColor = '#81B1DB';\n this.gridColor = 'calculated';\n this.doneTaskBkgColor = 'calculated';\n this.doneTaskBorderColor = 'grey';\n this.critBorderColor = '#E83737';\n this.critBkgColor = '#E83737';\n this.taskTextDarkColor = 'calculated';\n this.todayLineColor = '#DB5757';\n this.vertLineColor = '#00BFFF';\n\n /* C4 Context Diagram variables */\n this.personBorder = this.primaryBorderColor;\n this.personBkg = this.mainBkg;\n\n /* Architecture Diagram variables */\n this.archEdgeColor = 'calculated';\n this.archEdgeArrowColor = 'calculated';\n this.archEdgeWidth = '3';\n this.archGroupBorderColor = this.primaryBorderColor;\n this.archGroupBorderWidth = '2px';\n\n /* Entity Relationship variables */\n this.rowOdd = this.rowOdd || lighten(this.mainBkg, 5) || '#ffffff';\n this.rowEven = this.rowEven || darken(this.mainBkg, 10);\n\n /* state colors */\n this.labelColor = 'calculated';\n\n this.errorBkgColor = '#a44141';\n this.errorTextColor = '#ddd';\n }\n updateColors() {\n this.secondBkg = lighten(this.mainBkg, 16);\n this.lineColor = this.mainContrastColor;\n this.arrowheadColor = this.mainContrastColor;\n /* Flowchart variables */\n\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.edgeLabelBackground = lighten(this.labelBackground, 25);\n\n /* Sequence Diagram variables */\n\n this.actorBorder = this.border1;\n this.actorBkg = this.mainBkg;\n this.actorTextColor = this.mainContrastColor;\n this.actorLineColor = this.actorBorder;\n this.signalColor = this.mainContrastColor;\n this.signalTextColor = this.mainContrastColor;\n this.labelBoxBkgColor = this.actorBkg;\n this.labelBoxBorderColor = this.actorBorder;\n this.labelTextColor = this.mainContrastColor;\n this.loopTextColor = this.mainContrastColor;\n this.noteBorderColor = this.secondaryBorderColor;\n this.noteBkgColor = this.secondBkg;\n this.noteTextColor = this.secondaryTextColor;\n this.activationBorderColor = this.border1;\n this.activationBkgColor = this.secondBkg;\n\n /* Gantt chart variables */\n\n this.altSectionBkgColor = this.background;\n this.taskBkgColor = lighten(this.mainBkg, 23);\n this.taskTextColor = this.darkTextColor;\n this.taskTextLightColor = this.mainContrastColor;\n this.taskTextOutsideColor = this.taskTextLightColor;\n this.gridColor = this.mainContrastColor;\n this.doneTaskBkgColor = this.mainContrastColor;\n this.taskTextDarkColor = this.darkTextColor;\n\n /* Architecture Diagram variables */\n this.archEdgeColor = this.lineColor;\n this.archEdgeArrowColor = this.lineColor;\n\n /* state colors */\n this.transitionColor = this.transitionColor || this.lineColor;\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || '#555';\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.compositeBorder = this.compositeBorder || this.nodeBorder;\n this.innerEndBackground = this.primaryBorderColor;\n this.specialStateColor = '#f4f4f4'; // this.lineColor;\n\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = adjust(this.primaryColor, { h: 64 });\n this.fillType3 = adjust(this.secondaryColor, { h: 64 });\n this.fillType4 = adjust(this.primaryColor, { h: -64 });\n this.fillType5 = adjust(this.secondaryColor, { h: -64 });\n this.fillType6 = adjust(this.primaryColor, { h: 128 });\n this.fillType7 = adjust(this.secondaryColor, { h: 128 });\n\n /* cScale */\n this.cScale1 = this.cScale1 || '#0b0000';\n this.cScale2 = this.cScale2 || '#4d1037';\n this.cScale3 = this.cScale3 || '#3f5258';\n this.cScale4 = this.cScale4 || '#4f2f1b';\n this.cScale5 = this.cScale5 || '#6e0a0a';\n this.cScale6 = this.cScale6 || '#3b0048';\n this.cScale7 = this.cScale7 || '#995a01';\n this.cScale8 = this.cScale8 || '#154706';\n this.cScale9 = this.cScale9 || '#161722';\n this.cScale10 = this.cScale10 || '#00296f';\n this.cScale11 = this.cScale11 || '#01629c';\n this.cScale12 = this.cScale12 || '#010029';\n\n /* Color Scale */\n /* Each color-set will have a background, a foreground and a border color */\n this.cScale0 = this.cScale0 || this.primaryColor;\n this.cScale1 = this.cScale1 || this.secondaryColor;\n this.cScale2 = this.cScale2 || this.tertiaryColor;\n this.cScale3 = this.cScale3 || adjust(this.primaryColor, { h: 30 });\n this.cScale4 = this.cScale4 || adjust(this.primaryColor, { h: 60 });\n this.cScale5 = this.cScale5 || adjust(this.primaryColor, { h: 90 });\n this.cScale6 = this.cScale6 || adjust(this.primaryColor, { h: 120 });\n this.cScale7 = this.cScale7 || adjust(this.primaryColor, { h: 150 });\n this.cScale8 = this.cScale8 || adjust(this.primaryColor, { h: 210 });\n this.cScale9 = this.cScale9 || adjust(this.primaryColor, { h: 270 });\n this.cScale10 = this.cScale10 || adjust(this.primaryColor, { h: 300 });\n this.cScale11 = this.cScale11 || adjust(this.primaryColor, { h: 330 });\n\n // Setup the inverted color for the set\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this['cScaleInv' + i] = this['cScaleInv' + i] || invert(this['cScale' + i]);\n }\n // Setup the peer color for the set, useful for borders\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this['cScalePeer' + i] = this['cScalePeer' + i] || lighten(this['cScale' + i], 10);\n }\n\n for (let i = 0; i < 5; i++) {\n this['surface' + i] =\n this['surface' + i] || adjust(this.mainBkg, { h: 30, s: -30, l: -(-10 + i * 4) });\n this['surfacePeer' + i] =\n this['surfacePeer' + i] || adjust(this.mainBkg, { h: 30, s: -30, l: -(-7 + i * 4) });\n }\n\n // Setup the label color for the set\n this.scaleLabelColor = this.scaleLabelColor || (this.darkMode ? 'black' : this.labelTextColor);\n\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this['cScaleLabel' + i] = this['cScaleLabel' + i] || this.scaleLabelColor;\n }\n\n /* Pie diagram */\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this['pie' + i] = this['cScale' + i];\n }\n this.pieTitleTextSize = this.pieTitleTextSize || '25px';\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || '17px';\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || '17px';\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || 'black';\n this.pieStrokeWidth = this.pieStrokeWidth || '2px';\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || '2px';\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || 'black';\n this.pieOpacity = this.pieOpacity || '0.7';\n\n /* quadrant-graph */\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || adjust(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || adjust(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || adjust(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill =\n this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill =\n this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill =\n this.quadrant4TextFill || adjust(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill =\n this.quadrantPointFill || isDark(this.quadrant1Fill)\n ? lighten(this.quadrant1Fill)\n : darken(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill =\n this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill =\n this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n\n /* xychart */\n this.xyChart = {\n backgroundColor: this.xyChart?.backgroundColor || this.background,\n titleColor: this.xyChart?.titleColor || this.primaryTextColor,\n xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,\n xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,\n xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,\n xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,\n yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,\n yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,\n yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,\n yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,\n plotColorPalette:\n this.xyChart?.plotColorPalette ||\n '#3498db,#2ecc71,#e74c3c,#f1c40f,#bdc3c7,#ffffff,#34495e,#9b59b6,#1abc9c,#e67e22',\n };\n\n this.packet = {\n startByteColor: this.primaryTextColor,\n endByteColor: this.primaryTextColor,\n labelColor: this.primaryTextColor,\n titleColor: this.primaryTextColor,\n blockStrokeColor: this.primaryTextColor,\n blockFillColor: this.background,\n };\n\n /* radar */\n this.radar = {\n axisColor: this.radar?.axisColor || this.lineColor,\n axisStrokeWidth: this.radar?.axisStrokeWidth || 2,\n axisLabelFontSize: this.radar?.axisLabelFontSize || 12,\n curveOpacity: this.radar?.curveOpacity || 0.5,\n curveStrokeWidth: this.radar?.curveStrokeWidth || 2,\n graticuleColor: this.radar?.graticuleColor || '#DEDEDE',\n graticuleStrokeWidth: this.radar?.graticuleStrokeWidth || 1,\n graticuleOpacity: this.radar?.graticuleOpacity || 0.3,\n legendBoxSize: this.radar?.legendBoxSize || 12,\n legendFontSize: this.radar?.legendFontSize || 12,\n };\n\n /* class */\n this.classText = this.primaryTextColor;\n\n /* requirement-diagram */\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || '1';\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground =\n this.relationLabelBackground ||\n (this.darkMode ? darken(this.secondaryColor, 30) : this.secondaryColor);\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n\n /* git */\n this.git0 = lighten(this.secondaryColor, 20);\n this.git1 = lighten(this.pie2 || this.secondaryColor, 20);\n this.git2 = lighten(this.pie3 || this.tertiaryColor, 20);\n this.git3 = lighten(this.pie4 || adjust(this.primaryColor, { h: -30 }), 20);\n this.git4 = lighten(this.pie5 || adjust(this.primaryColor, { h: -60 }), 20);\n this.git5 = lighten(this.pie6 || adjust(this.primaryColor, { h: -90 }), 10);\n this.git6 = lighten(this.pie7 || adjust(this.primaryColor, { h: +60 }), 10);\n this.git7 = lighten(this.pie8 || adjust(this.primaryColor, { h: +120 }), 20);\n this.gitInv0 = this.gitInv0 || invert(this.git0);\n this.gitInv1 = this.gitInv1 || invert(this.git1);\n this.gitInv2 = this.gitInv2 || invert(this.git2);\n this.gitInv3 = this.gitInv3 || invert(this.git3);\n this.gitInv4 = this.gitInv4 || invert(this.git4);\n this.gitInv5 = this.gitInv5 || invert(this.git5);\n this.gitInv6 = this.gitInv6 || invert(this.git6);\n this.gitInv7 = this.gitInv7 || invert(this.git7);\n this.gitBranchLabel0 = this.gitBranchLabel0 || invert(this.labelTextColor);\n this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor;\n this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor;\n this.gitBranchLabel3 = this.gitBranchLabel3 || invert(this.labelTextColor);\n this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor;\n this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor;\n this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor;\n this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor;\n\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || '10px';\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || '10px';\n\n /* -------------------------------------------------- */\n /* EntityRelationship diagrams */\n\n this.attributeBackgroundColorOdd =\n this.attributeBackgroundColorOdd || lighten(this.background, 12);\n this.attributeBackgroundColorEven =\n this.attributeBackgroundColorEven || lighten(this.background, 2);\n /* -------------------------------------------------- */\n\n this.nodeBorder = this.nodeBorder || '#999';\n }\n calculate(overrides) {\n if (typeof overrides !== 'object') {\n // Calculate colors form base colors\n this.updateColors();\n return;\n }\n\n const keys = Object.keys(overrides);\n\n // Copy values from overrides, this is mainly for base colors\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n\n // Calculate colors form base colors\n this.updateColors();\n // Copy values from overrides again in case of an override of derived value\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n}\n\nexport const getThemeVariables = (userOverrides) => {\n const theme = new Theme();\n theme.calculate(userOverrides);\n return theme;\n};\n", "import { invert, lighten, rgba, adjust, darken, isDark } from 'khroma';\nimport { mkBorder } from './theme-helpers.js';\nimport {\n oldAttributeBackgroundColorEven,\n oldAttributeBackgroundColorOdd,\n} from './erDiagram-oldHardcodedValues.js';\n\nclass Theme {\n constructor() {\n /* Base variables */\n this.background = '#f4f4f4';\n this.primaryColor = '#ECECFF';\n\n this.secondaryColor = adjust(this.primaryColor, { h: 120 });\n this.secondaryColor = '#ffffde';\n this.tertiaryColor = adjust(this.primaryColor, { h: -160 });\n this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n // this.noteBorderColor = mkBorder(this.noteBkgColor, this.darkMode);\n\n this.primaryTextColor = invert(this.primaryColor);\n this.secondaryTextColor = invert(this.secondaryColor);\n this.tertiaryTextColor = invert(this.tertiaryColor);\n this.lineColor = invert(this.background);\n this.textColor = invert(this.background);\n\n this.background = 'white';\n this.mainBkg = '#ECECFF';\n this.secondBkg = '#ffffde';\n this.lineColor = '#333333';\n this.border1 = '#9370DB';\n this.border2 = '#aaaa33';\n this.arrowheadColor = '#333333';\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = '16px';\n this.labelBackground = 'rgba(232,232,232, 0.8)';\n this.textColor = '#333';\n this.THEME_COLOR_LIMIT = 12;\n\n /* Flowchart variables */\n\n this.nodeBkg = 'calculated';\n this.nodeBorder = 'calculated';\n this.clusterBkg = 'calculated';\n this.clusterBorder = 'calculated';\n this.defaultLinkColor = 'calculated';\n this.titleColor = 'calculated';\n this.edgeLabelBackground = 'calculated';\n\n /* Sequence Diagram variables */\n\n this.actorBorder = 'calculated';\n this.actorBkg = 'calculated';\n this.actorTextColor = 'black';\n this.actorLineColor = 'calculated';\n this.signalColor = 'calculated';\n this.signalTextColor = 'calculated';\n this.labelBoxBkgColor = 'calculated';\n this.labelBoxBorderColor = 'calculated';\n this.labelTextColor = 'calculated';\n this.loopTextColor = 'calculated';\n this.noteBorderColor = 'calculated';\n this.noteBkgColor = '#fff5ad';\n this.noteTextColor = 'calculated';\n this.activationBorderColor = '#666';\n this.activationBkgColor = '#f4f4f4';\n this.sequenceNumberColor = 'white';\n\n /* Gantt chart variables */\n\n this.sectionBkgColor = 'calculated';\n this.altSectionBkgColor = 'calculated';\n this.sectionBkgColor2 = 'calculated';\n this.excludeBkgColor = '#eeeeee';\n this.taskBorderColor = 'calculated';\n this.taskBkgColor = 'calculated';\n this.taskTextLightColor = 'calculated';\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextDarkColor = 'calculated';\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.taskTextClickableColor = 'calculated';\n this.activeTaskBorderColor = 'calculated';\n this.activeTaskBkgColor = 'calculated';\n this.gridColor = 'calculated';\n this.doneTaskBkgColor = 'calculated';\n this.doneTaskBorderColor = 'calculated';\n this.critBorderColor = 'calculated';\n this.critBkgColor = 'calculated';\n this.todayLineColor = 'calculated';\n this.vertLineColor = 'calculated';\n\n this.sectionBkgColor = rgba(102, 102, 255, 0.49);\n this.altSectionBkgColor = 'white';\n this.sectionBkgColor2 = '#fff400';\n this.taskBorderColor = '#534fbc';\n this.taskBkgColor = '#8a90dd';\n this.taskTextLightColor = 'white';\n this.taskTextColor = 'calculated';\n this.taskTextDarkColor = 'black';\n this.taskTextOutsideColor = 'calculated';\n this.taskTextClickableColor = '#003163';\n this.activeTaskBorderColor = '#534fbc';\n this.activeTaskBkgColor = '#bfc7ff';\n this.gridColor = 'lightgrey';\n this.doneTaskBkgColor = 'lightgrey';\n this.doneTaskBorderColor = 'grey';\n this.critBorderColor = '#ff8888';\n this.critBkgColor = 'red';\n this.todayLineColor = 'red';\n this.vertLineColor = 'navy';\n\n /* C4 Context Diagram variables */\n this.personBorder = this.primaryBorderColor;\n this.personBkg = this.mainBkg;\n\n /* Architecture Diagram variables */\n this.archEdgeColor = 'calculated';\n this.archEdgeArrowColor = 'calculated';\n this.archEdgeWidth = '3';\n this.archGroupBorderColor = this.primaryBorderColor;\n this.archGroupBorderWidth = '2px';\n\n /* Entity Relationship variables */\n this.rowOdd = 'calculated';\n this.rowEven = 'calculated';\n\n /* state colors */\n this.labelColor = 'black';\n this.errorBkgColor = '#552222';\n this.errorTextColor = '#552222';\n this.updateColors();\n }\n updateColors() {\n /* Color Scale */\n /* Each color-set will have a background, a foreground and a border color */\n\n this.cScale0 = this.cScale0 || this.primaryColor;\n this.cScale1 = this.cScale1 || this.secondaryColor;\n this.cScale2 = this.cScale2 || this.tertiaryColor;\n this.cScale3 = this.cScale3 || adjust(this.primaryColor, { h: 30 });\n this.cScale4 = this.cScale4 || adjust(this.primaryColor, { h: 60 });\n this.cScale5 = this.cScale5 || adjust(this.primaryColor, { h: 90 });\n this.cScale6 = this.cScale6 || adjust(this.primaryColor, { h: 120 });\n this.cScale7 = this.cScale7 || adjust(this.primaryColor, { h: 150 });\n this.cScale8 = this.cScale8 || adjust(this.primaryColor, { h: 210 });\n this.cScale9 = this.cScale9 || adjust(this.primaryColor, { h: 270 });\n this.cScale10 = this.cScale10 || adjust(this.primaryColor, { h: 300 });\n this.cScale11 = this.cScale11 || adjust(this.primaryColor, { h: 330 });\n this['cScalePeer' + 1] = this['cScalePeer' + 1] || darken(this.secondaryColor, 45);\n this['cScalePeer' + 2] = this['cScalePeer' + 2] || darken(this.tertiaryColor, 40);\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n // Setup the peer color for the set, useful for borders\n this['cScale' + i] = darken(this['cScale' + i], 10);\n this['cScalePeer' + i] = this['cScalePeer' + i] || darken(this['cScale' + i], 25);\n }\n // Setup the inverted color for the set\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this['cScaleInv' + i] = this['cScaleInv' + i] || adjust(this['cScale' + i], { h: 180 });\n }\n\n for (let i = 0; i < 5; i++) {\n this['surface' + i] = this['surface' + i] || adjust(this.mainBkg, { h: 30, l: -(5 + i * 5) });\n this['surfacePeer' + i] =\n this['surfacePeer' + i] || adjust(this.mainBkg, { h: 30, l: -(7 + i * 5) });\n }\n // Setup the label color for the set\n this.scaleLabelColor =\n this.scaleLabelColor !== 'calculated' && this.scaleLabelColor\n ? this.scaleLabelColor\n : this.labelTextColor;\n\n if (this.labelTextColor !== 'calculated') {\n this.cScaleLabel0 = this.cScaleLabel0 || invert(this.labelTextColor);\n this.cScaleLabel3 = this.cScaleLabel3 || invert(this.labelTextColor);\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this['cScaleLabel' + i] = this['cScaleLabel' + i] || this.labelTextColor;\n }\n }\n\n /* Flowchart variables */\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1; // border 1\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.titleColor = this.textColor;\n this.edgeLabelBackground = this.labelBackground;\n\n /* Sequence Diagram variables */\n\n // this.actorBorder = lighten(this.border1, 0.5);\n this.actorBorder = lighten(this.border1, 23);\n this.actorBkg = this.mainBkg;\n this.labelBoxBkgColor = this.actorBkg;\n this.signalColor = this.textColor;\n this.signalTextColor = this.textColor;\n this.labelBoxBorderColor = this.actorBorder;\n this.labelTextColor = this.actorTextColor;\n this.loopTextColor = this.actorTextColor;\n this.noteBorderColor = this.border2;\n this.noteTextColor = this.actorTextColor;\n this.actorLineColor = this.actorBorder;\n\n /* Gantt chart variables */\n\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextOutsideColor = this.taskTextDarkColor;\n\n /* Architecture Diagram variables */\n this.archEdgeColor = this.lineColor;\n this.archEdgeArrowColor = this.lineColor;\n\n /* Entity Relationship variables */\n this.rowOdd = this.rowOdd || lighten(this.primaryColor, 75) || '#ffffff';\n this.rowEven = this.rowEven || lighten(this.primaryColor, 1);\n /* state colors */\n this.transitionColor = this.transitionColor || this.lineColor;\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || '#f0f0f0';\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.compositeBorder = this.compositeBorder || this.nodeBorder;\n this.innerEndBackground = this.nodeBorder;\n this.specialStateColor = this.lineColor;\n\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n /* class */\n this.classText = this.primaryTextColor;\n /* journey */\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = adjust(this.primaryColor, { h: 64 });\n this.fillType3 = adjust(this.secondaryColor, { h: 64 });\n this.fillType4 = adjust(this.primaryColor, { h: -64 });\n this.fillType5 = adjust(this.secondaryColor, { h: -64 });\n this.fillType6 = adjust(this.primaryColor, { h: 128 });\n this.fillType7 = adjust(this.secondaryColor, { h: 128 });\n\n /* pie */\n this.pie1 = this.pie1 || this.primaryColor;\n this.pie2 = this.pie2 || this.secondaryColor;\n this.pie3 = this.pie3 || adjust(this.tertiaryColor, { l: -40 });\n this.pie4 = this.pie4 || adjust(this.primaryColor, { l: -10 });\n this.pie5 = this.pie5 || adjust(this.secondaryColor, { l: -30 });\n this.pie6 = this.pie6 || adjust(this.tertiaryColor, { l: -20 });\n this.pie7 = this.pie7 || adjust(this.primaryColor, { h: +60, l: -20 });\n this.pie8 = this.pie8 || adjust(this.primaryColor, { h: -60, l: -40 });\n this.pie9 = this.pie9 || adjust(this.primaryColor, { h: 120, l: -40 });\n this.pie10 = this.pie10 || adjust(this.primaryColor, { h: +60, l: -40 });\n this.pie11 = this.pie11 || adjust(this.primaryColor, { h: -90, l: -40 });\n this.pie12 = this.pie12 || adjust(this.primaryColor, { h: 120, l: -30 });\n this.pieTitleTextSize = this.pieTitleTextSize || '25px';\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || '17px';\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || '17px';\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || 'black';\n this.pieStrokeWidth = this.pieStrokeWidth || '2px';\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || '2px';\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || 'black';\n this.pieOpacity = this.pieOpacity || '0.7';\n\n /* quadrant-graph */\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || adjust(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || adjust(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || adjust(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill =\n this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill =\n this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill =\n this.quadrant4TextFill || adjust(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill =\n this.quadrantPointFill || isDark(this.quadrant1Fill)\n ? lighten(this.quadrant1Fill)\n : darken(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill =\n this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill =\n this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n\n /* radar */\n this.radar = {\n axisColor: this.radar?.axisColor || this.lineColor,\n axisStrokeWidth: this.radar?.axisStrokeWidth || 2,\n axisLabelFontSize: this.radar?.axisLabelFontSize || 12,\n curveOpacity: this.radar?.curveOpacity || 0.5,\n curveStrokeWidth: this.radar?.curveStrokeWidth || 2,\n graticuleColor: this.radar?.graticuleColor || '#DEDEDE',\n graticuleStrokeWidth: this.radar?.graticuleStrokeWidth || 1,\n graticuleOpacity: this.radar?.graticuleOpacity || 0.3,\n legendBoxSize: this.radar?.legendBoxSize || 12,\n legendFontSize: this.radar?.legendFontSize || 12,\n };\n\n /* xychart */\n this.xyChart = {\n backgroundColor: this.xyChart?.backgroundColor || this.background,\n titleColor: this.xyChart?.titleColor || this.primaryTextColor,\n xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,\n xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,\n xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,\n xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,\n yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,\n yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,\n yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,\n yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,\n plotColorPalette:\n this.xyChart?.plotColorPalette ||\n '#ECECFF,#8493A6,#FFC3A0,#DCDDE1,#B8E994,#D1A36F,#C3CDE6,#FFB6C1,#496078,#F8F3E3',\n };\n\n /* requirement-diagram */\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || '1';\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || this.labelBackground;\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n\n /* git */\n this.git0 = this.git0 || this.primaryColor;\n this.git1 = this.git1 || this.secondaryColor;\n this.git2 = this.git2 || this.tertiaryColor;\n this.git3 = this.git3 || adjust(this.primaryColor, { h: -30 });\n this.git4 = this.git4 || adjust(this.primaryColor, { h: -60 });\n this.git5 = this.git5 || adjust(this.primaryColor, { h: -90 });\n this.git6 = this.git6 || adjust(this.primaryColor, { h: +60 });\n this.git7 = this.git7 || adjust(this.primaryColor, { h: +120 });\n if (this.darkMode) {\n this.git0 = lighten(this.git0, 25);\n this.git1 = lighten(this.git1, 25);\n this.git2 = lighten(this.git2, 25);\n this.git3 = lighten(this.git3, 25);\n this.git4 = lighten(this.git4, 25);\n this.git5 = lighten(this.git5, 25);\n this.git6 = lighten(this.git6, 25);\n this.git7 = lighten(this.git7, 25);\n } else {\n this.git0 = darken(this.git0, 25);\n this.git1 = darken(this.git1, 25);\n this.git2 = darken(this.git2, 25);\n this.git3 = darken(this.git3, 25);\n this.git4 = darken(this.git4, 25);\n this.git5 = darken(this.git5, 25);\n this.git6 = darken(this.git6, 25);\n this.git7 = darken(this.git7, 25);\n }\n this.gitInv0 = this.gitInv0 || darken(invert(this.git0), 25);\n this.gitInv1 = this.gitInv1 || invert(this.git1);\n this.gitInv2 = this.gitInv2 || invert(this.git2);\n this.gitInv3 = this.gitInv3 || invert(this.git3);\n this.gitInv4 = this.gitInv4 || invert(this.git4);\n this.gitInv5 = this.gitInv5 || invert(this.git5);\n this.gitInv6 = this.gitInv6 || invert(this.git6);\n this.gitInv7 = this.gitInv7 || invert(this.git7);\n this.gitBranchLabel0 = this.gitBranchLabel0 || invert(this.labelTextColor);\n this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor;\n this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor;\n this.gitBranchLabel3 = this.gitBranchLabel3 || invert(this.labelTextColor);\n this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor;\n this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor;\n this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor;\n this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor;\n\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || '10px';\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || '10px';\n\n /* -------------------------------------------------- */\n /* EntityRelationship diagrams */\n\n this.attributeBackgroundColorOdd =\n this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;\n this.attributeBackgroundColorEven =\n this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;\n /* -------------------------------------------------- */\n }\n calculate(overrides) {\n // for all keys in this object, if it is 'calculated' then set it to undefined\n Object.keys(this).forEach((k) => {\n if (this[k] === 'calculated') {\n this[k] = undefined;\n }\n });\n\n if (typeof overrides !== 'object') {\n // Calculate colors form base colors\n this.updateColors();\n return;\n }\n\n const keys = Object.keys(overrides);\n\n // Copy values from overrides, this is mainly for base colors\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n\n // Calculate colors form base colors\n this.updateColors();\n // Copy values from overrides again in case of an override of derived value\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n}\n\nexport const getThemeVariables = (userOverrides) => {\n const theme = new Theme();\n theme.calculate(userOverrides);\n return theme;\n};\n", "import { adjust, darken, invert, isDark, lighten } from 'khroma';\nimport {\n oldAttributeBackgroundColorEven,\n oldAttributeBackgroundColorOdd,\n} from './erDiagram-oldHardcodedValues.js';\nimport { mkBorder } from './theme-helpers.js';\n\nclass Theme {\n constructor() {\n /* Base vales */\n this.background = '#f4f4f4';\n this.primaryColor = '#cde498';\n this.secondaryColor = '#cdffb2';\n this.background = 'white';\n this.mainBkg = '#cde498';\n this.secondBkg = '#cdffb2';\n this.lineColor = 'green';\n this.border1 = '#13540c';\n this.border2 = '#6eaa49';\n this.arrowheadColor = 'green';\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = '16px';\n\n this.tertiaryColor = lighten('#cde498', 10);\n this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n this.primaryTextColor = invert(this.primaryColor);\n this.secondaryTextColor = invert(this.secondaryColor);\n this.tertiaryTextColor = invert(this.primaryColor);\n this.lineColor = invert(this.background);\n this.textColor = invert(this.background);\n this.THEME_COLOR_LIMIT = 12;\n\n /* Flowchart variables */\n this.nodeBkg = 'calculated';\n this.nodeBorder = 'calculated';\n this.clusterBkg = 'calculated';\n this.clusterBorder = 'calculated';\n this.defaultLinkColor = 'calculated';\n this.titleColor = '#333';\n this.edgeLabelBackground = '#e8e8e8';\n\n /* Sequence Diagram variables */\n\n this.actorBorder = 'calculated';\n this.actorBkg = 'calculated';\n this.actorTextColor = 'black';\n this.actorLineColor = 'calculated';\n this.signalColor = '#333';\n this.signalTextColor = '#333';\n this.labelBoxBkgColor = 'calculated';\n this.labelBoxBorderColor = '#326932';\n this.labelTextColor = 'calculated';\n this.loopTextColor = 'calculated';\n this.noteBorderColor = 'calculated';\n this.noteBkgColor = '#fff5ad';\n this.noteTextColor = 'calculated';\n this.activationBorderColor = '#666';\n this.activationBkgColor = '#f4f4f4';\n this.sequenceNumberColor = 'white';\n\n /* Gantt chart variables */\n\n this.sectionBkgColor = '#6eaa49';\n this.altSectionBkgColor = 'white';\n this.sectionBkgColor2 = '#6eaa49';\n this.excludeBkgColor = '#eeeeee';\n this.taskBorderColor = 'calculated';\n this.taskBkgColor = '#487e3a';\n this.taskTextLightColor = 'white';\n this.taskTextColor = 'calculated';\n this.taskTextDarkColor = 'black';\n this.taskTextOutsideColor = 'calculated';\n this.taskTextClickableColor = '#003163';\n this.activeTaskBorderColor = 'calculated';\n this.activeTaskBkgColor = 'calculated';\n this.gridColor = 'lightgrey';\n this.doneTaskBkgColor = 'lightgrey';\n this.doneTaskBorderColor = 'grey';\n this.critBorderColor = '#ff8888';\n this.critBkgColor = 'red';\n this.todayLineColor = 'red';\n this.vertLineColor = '#00BFFF';\n\n /* C4 Context Diagram variables */\n this.personBorder = this.primaryBorderColor;\n this.personBkg = this.mainBkg;\n\n /* Architecture Diagram variables */\n this.archEdgeColor = 'calculated';\n this.archEdgeArrowColor = 'calculated';\n this.archEdgeWidth = '3';\n this.archGroupBorderColor = this.primaryBorderColor;\n this.archGroupBorderWidth = '2px';\n\n /* state colors */\n this.labelColor = 'black';\n\n this.errorBkgColor = '#552222';\n this.errorTextColor = '#552222';\n }\n updateColors() {\n /* Sequence Diagram variables */\n this.actorBorder = darken(this.mainBkg, 20);\n this.actorBkg = this.mainBkg;\n this.labelBoxBkgColor = this.actorBkg;\n this.labelTextColor = this.actorTextColor;\n this.loopTextColor = this.actorTextColor;\n this.noteBorderColor = this.border2;\n this.noteTextColor = this.actorTextColor;\n this.actorLineColor = this.actorBorder;\n\n /* Each color-set will have a background, a foreground and a border color */\n this.cScale0 = this.cScale0 || this.primaryColor;\n this.cScale1 = this.cScale1 || this.secondaryColor;\n this.cScale2 = this.cScale2 || this.tertiaryColor;\n this.cScale3 = this.cScale3 || adjust(this.primaryColor, { h: 30 });\n this.cScale4 = this.cScale4 || adjust(this.primaryColor, { h: 60 });\n this.cScale5 = this.cScale5 || adjust(this.primaryColor, { h: 90 });\n this.cScale6 = this.cScale6 || adjust(this.primaryColor, { h: 120 });\n this.cScale7 = this.cScale7 || adjust(this.primaryColor, { h: 150 });\n this.cScale8 = this.cScale8 || adjust(this.primaryColor, { h: 210 });\n this.cScale9 = this.cScale9 || adjust(this.primaryColor, { h: 270 });\n this.cScale10 = this.cScale10 || adjust(this.primaryColor, { h: 300 });\n this.cScale11 = this.cScale11 || adjust(this.primaryColor, { h: 330 });\n this['cScalePeer' + 1] = this['cScalePeer' + 1] || darken(this.secondaryColor, 45);\n this['cScalePeer' + 2] = this['cScalePeer' + 2] || darken(this.tertiaryColor, 40);\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n // Setup the peer color for the set, useful for borders\n this['cScale' + i] = darken(this['cScale' + i], 10);\n this['cScalePeer' + i] = this['cScalePeer' + i] || darken(this['cScale' + i], 25);\n }\n\n // Setup the inverted color for the set\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this['cScaleInv' + i] = this['cScaleInv' + i] || adjust(this['cScale' + i], { h: 180 });\n }\n\n // Setup the label color for the set\n this.scaleLabelColor =\n this.scaleLabelColor !== 'calculated' && this.scaleLabelColor\n ? this.scaleLabelColor\n : this.labelTextColor;\n\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this['cScaleLabel' + i] = this['cScaleLabel' + i] || this.scaleLabelColor;\n }\n\n for (let i = 0; i < 5; i++) {\n this['surface' + i] =\n this['surface' + i] || adjust(this.mainBkg, { h: 30, s: -30, l: -(5 + i * 5) });\n this['surfacePeer' + i] =\n this['surfacePeer' + i] || adjust(this.mainBkg, { h: 30, s: -30, l: -(8 + i * 5) });\n }\n\n /* Flowchart variables */\n\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n\n /* Gantt chart variables */\n\n this.taskBorderColor = this.border1;\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.activeTaskBorderColor = this.taskBorderColor;\n this.activeTaskBkgColor = this.mainBkg;\n\n /* Architecture Diagram variables */\n this.archEdgeColor = this.lineColor;\n this.archEdgeArrowColor = this.lineColor;\n\n /* ER diagram */\n this.rowOdd = this.rowOdd || lighten(this.mainBkg, 75) || '#ffffff';\n this.rowEven = this.rowEven || lighten(this.mainBkg, 20);\n\n /* state colors */\n this.transitionColor = this.transitionColor || this.lineColor;\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || '#f0f0f0';\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.compositeBorder = this.compositeBorder || this.nodeBorder;\n this.innerEndBackground = this.primaryBorderColor;\n this.specialStateColor = this.lineColor;\n\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n this.transitionColor = this.transitionColor || this.lineColor;\n /* class */\n this.classText = this.primaryTextColor;\n /* journey */\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = adjust(this.primaryColor, { h: 64 });\n this.fillType3 = adjust(this.secondaryColor, { h: 64 });\n this.fillType4 = adjust(this.primaryColor, { h: -64 });\n this.fillType5 = adjust(this.secondaryColor, { h: -64 });\n this.fillType6 = adjust(this.primaryColor, { h: 128 });\n this.fillType7 = adjust(this.secondaryColor, { h: 128 });\n\n /* pie */\n this.pie1 = this.pie1 || this.primaryColor;\n this.pie2 = this.pie2 || this.secondaryColor;\n this.pie3 = this.pie3 || this.tertiaryColor;\n this.pie4 = this.pie4 || adjust(this.primaryColor, { l: -30 });\n this.pie5 = this.pie5 || adjust(this.secondaryColor, { l: -30 });\n this.pie6 = this.pie6 || adjust(this.tertiaryColor, { h: +40, l: -40 });\n this.pie7 = this.pie7 || adjust(this.primaryColor, { h: +60, l: -10 });\n this.pie8 = this.pie8 || adjust(this.primaryColor, { h: -60, l: -10 });\n this.pie9 = this.pie9 || adjust(this.primaryColor, { h: 120, l: 0 });\n this.pie10 = this.pie10 || adjust(this.primaryColor, { h: +60, l: -50 });\n this.pie11 = this.pie11 || adjust(this.primaryColor, { h: -60, l: -50 });\n this.pie12 = this.pie12 || adjust(this.primaryColor, { h: 120, l: -50 });\n this.pieTitleTextSize = this.pieTitleTextSize || '25px';\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || '17px';\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || '17px';\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || 'black';\n this.pieStrokeWidth = this.pieStrokeWidth || '2px';\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || '2px';\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || 'black';\n this.pieOpacity = this.pieOpacity || '0.7';\n\n /* quadrant-graph */\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || adjust(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || adjust(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || adjust(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill =\n this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill =\n this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill =\n this.quadrant4TextFill || adjust(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill =\n this.quadrantPointFill || isDark(this.quadrant1Fill)\n ? lighten(this.quadrant1Fill)\n : darken(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill =\n this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill =\n this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n\n this.packet = {\n startByteColor: this.primaryTextColor,\n endByteColor: this.primaryTextColor,\n labelColor: this.primaryTextColor,\n titleColor: this.primaryTextColor,\n blockStrokeColor: this.primaryTextColor,\n blockFillColor: this.mainBkg,\n };\n\n /* radar */\n this.radar = {\n axisColor: this.radar?.axisColor || this.lineColor,\n axisStrokeWidth: this.radar?.axisStrokeWidth || 2,\n axisLabelFontSize: this.radar?.axisLabelFontSize || 12,\n curveOpacity: this.radar?.curveOpacity || 0.5,\n curveStrokeWidth: this.radar?.curveStrokeWidth || 2,\n graticuleColor: this.radar?.graticuleColor || '#DEDEDE',\n graticuleStrokeWidth: this.radar?.graticuleStrokeWidth || 1,\n graticuleOpacity: this.radar?.graticuleOpacity || 0.3,\n legendBoxSize: this.radar?.legendBoxSize || 12,\n legendFontSize: this.radar?.legendFontSize || 12,\n };\n\n /* xychart */\n this.xyChart = {\n backgroundColor: this.xyChart?.backgroundColor || this.background,\n titleColor: this.xyChart?.titleColor || this.primaryTextColor,\n xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,\n xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,\n xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,\n xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,\n yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,\n yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,\n yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,\n yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,\n plotColorPalette:\n this.xyChart?.plotColorPalette ||\n '#CDE498,#FF6B6B,#A0D2DB,#D7BDE2,#F0F0F0,#FFC3A0,#7FD8BE,#FF9A8B,#FAF3E0,#FFF176',\n };\n\n /* requirement-diagram */\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || '1';\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || this.edgeLabelBackground;\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n\n /* git */\n this.git0 = this.git0 || this.primaryColor;\n this.git1 = this.git1 || this.secondaryColor;\n this.git2 = this.git2 || this.tertiaryColor;\n this.git3 = this.git3 || adjust(this.primaryColor, { h: -30 });\n this.git4 = this.git4 || adjust(this.primaryColor, { h: -60 });\n this.git5 = this.git5 || adjust(this.primaryColor, { h: -90 });\n this.git6 = this.git6 || adjust(this.primaryColor, { h: +60 });\n this.git7 = this.git7 || adjust(this.primaryColor, { h: +120 });\n if (this.darkMode) {\n this.git0 = lighten(this.git0, 25);\n this.git1 = lighten(this.git1, 25);\n this.git2 = lighten(this.git2, 25);\n this.git3 = lighten(this.git3, 25);\n this.git4 = lighten(this.git4, 25);\n this.git5 = lighten(this.git5, 25);\n this.git6 = lighten(this.git6, 25);\n this.git7 = lighten(this.git7, 25);\n } else {\n this.git0 = darken(this.git0, 25);\n this.git1 = darken(this.git1, 25);\n this.git2 = darken(this.git2, 25);\n this.git3 = darken(this.git3, 25);\n this.git4 = darken(this.git4, 25);\n this.git5 = darken(this.git5, 25);\n this.git6 = darken(this.git6, 25);\n this.git7 = darken(this.git7, 25);\n }\n this.gitInv0 = this.gitInv0 || invert(this.git0);\n this.gitInv1 = this.gitInv1 || invert(this.git1);\n this.gitInv2 = this.gitInv2 || invert(this.git2);\n this.gitInv3 = this.gitInv3 || invert(this.git3);\n this.gitInv4 = this.gitInv4 || invert(this.git4);\n this.gitInv5 = this.gitInv5 || invert(this.git5);\n this.gitInv6 = this.gitInv6 || invert(this.git6);\n this.gitInv7 = this.gitInv7 || invert(this.git7);\n this.gitBranchLabel0 = this.gitBranchLabel0 || invert(this.labelTextColor);\n this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor;\n this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor;\n this.gitBranchLabel3 = this.gitBranchLabel3 || invert(this.labelTextColor);\n this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor;\n this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor;\n this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor;\n this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor;\n\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || '10px';\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || '10px';\n\n /* -------------------------------------------------- */\n /* EntityRelationship diagrams */\n\n this.attributeBackgroundColorOdd =\n this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;\n this.attributeBackgroundColorEven =\n this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;\n /* -------------------------------------------------- */\n }\n calculate(overrides) {\n if (typeof overrides !== 'object') {\n // Calculate colors form base colors\n this.updateColors();\n return;\n }\n\n const keys = Object.keys(overrides);\n\n // Copy values from overrides, this is mainly for base colors\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n\n // Calculate colors form base colors\n this.updateColors();\n // Copy values from overrides again in case of an override of derived value\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n}\n\nexport const getThemeVariables = (userOverrides) => {\n const theme = new Theme();\n theme.calculate(userOverrides);\n return theme;\n};\n", "import { invert, darken, lighten, adjust, isDark } from 'khroma';\nimport { mkBorder } from './theme-helpers.js';\nimport {\n oldAttributeBackgroundColorEven,\n oldAttributeBackgroundColorOdd,\n} from './erDiagram-oldHardcodedValues.js';\n\n// const Color = require ( 'khroma/dist/color' ).default\n// Color.format.hex.stringify(Color.parse('hsl(210, 66.6666666667%, 95%)')); // => \"#EAF2FB\"\n\nclass Theme {\n constructor() {\n this.primaryColor = '#eee';\n this.contrast = '#707070';\n this.secondaryColor = lighten(this.contrast, 55);\n this.background = '#ffffff';\n\n // this.secondaryColor = adjust(this.primaryColor, { h: 120 });\n this.tertiaryColor = adjust(this.primaryColor, { h: -160 });\n this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);\n this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);\n this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);\n // this.noteBorderColor = mkBorder(this.noteBkgColor, this.darkMode);\n\n this.primaryTextColor = invert(this.primaryColor);\n this.secondaryTextColor = invert(this.secondaryColor);\n this.tertiaryTextColor = invert(this.tertiaryColor);\n this.lineColor = invert(this.background);\n this.textColor = invert(this.background);\n\n // this.altBackground = lighten(this.contrast, 55);\n this.mainBkg = '#eee';\n this.secondBkg = 'calculated';\n this.lineColor = '#666';\n this.border1 = '#999';\n this.border2 = 'calculated';\n this.note = '#ffa';\n this.text = '#333';\n this.critical = '#d42';\n this.done = '#bbb';\n this.arrowheadColor = '#333333';\n this.fontFamily = '\"trebuchet ms\", verdana, arial, sans-serif';\n this.fontSize = '16px';\n this.THEME_COLOR_LIMIT = 12;\n\n /* Flowchart variables */\n\n this.nodeBkg = 'calculated';\n this.nodeBorder = 'calculated';\n this.clusterBkg = 'calculated';\n this.clusterBorder = 'calculated';\n this.defaultLinkColor = 'calculated';\n this.titleColor = 'calculated';\n this.edgeLabelBackground = 'white';\n\n /* Sequence Diagram variables */\n\n this.actorBorder = 'calculated';\n this.actorBkg = 'calculated';\n this.actorTextColor = 'calculated';\n this.actorLineColor = this.actorBorder;\n this.signalColor = 'calculated';\n this.signalTextColor = 'calculated';\n this.labelBoxBkgColor = 'calculated';\n this.labelBoxBorderColor = 'calculated';\n this.labelTextColor = 'calculated';\n this.loopTextColor = 'calculated';\n this.noteBorderColor = 'calculated';\n this.noteBkgColor = 'calculated';\n this.noteTextColor = 'calculated';\n this.activationBorderColor = '#666';\n this.activationBkgColor = '#f4f4f4';\n this.sequenceNumberColor = 'white';\n\n /* Gantt chart variables */\n\n this.sectionBkgColor = 'calculated';\n this.altSectionBkgColor = 'white';\n this.sectionBkgColor2 = 'calculated';\n this.excludeBkgColor = '#eeeeee';\n this.taskBorderColor = 'calculated';\n this.taskBkgColor = 'calculated';\n this.taskTextLightColor = 'white';\n this.taskTextColor = 'calculated';\n this.taskTextDarkColor = 'calculated';\n this.taskTextOutsideColor = 'calculated';\n this.taskTextClickableColor = '#003163';\n this.activeTaskBorderColor = 'calculated';\n this.activeTaskBkgColor = 'calculated';\n this.gridColor = 'calculated';\n this.doneTaskBkgColor = 'calculated';\n this.doneTaskBorderColor = 'calculated';\n this.critBkgColor = 'calculated';\n this.critBorderColor = 'calculated';\n this.todayLineColor = 'calculated';\n this.vertLineColor = 'calculated';\n\n /* C4 Context Diagram variables */\n this.personBorder = this.primaryBorderColor;\n this.personBkg = this.mainBkg;\n\n /* Architecture Diagram variables */\n this.archEdgeColor = 'calculated';\n this.archEdgeArrowColor = 'calculated';\n this.archEdgeWidth = '3';\n this.archGroupBorderColor = this.primaryBorderColor;\n this.archGroupBorderWidth = '2px';\n\n /* ER diagram */\n this.rowOdd = this.rowOdd || lighten(this.mainBkg, 75) || '#ffffff';\n this.rowEven = this.rowEven || '#f4f4f4';\n\n /* state colors */\n this.labelColor = 'black';\n\n this.errorBkgColor = '#552222';\n this.errorTextColor = '#552222';\n }\n updateColors() {\n this.secondBkg = lighten(this.contrast, 55);\n this.border2 = this.contrast;\n\n /* Sequence Diagram variables */\n\n this.actorBorder = lighten(this.border1, 23);\n this.actorBkg = this.mainBkg;\n this.actorTextColor = this.text;\n this.actorLineColor = this.actorBorder;\n this.signalColor = this.text;\n this.signalTextColor = this.text;\n this.labelBoxBkgColor = this.actorBkg;\n this.labelBoxBorderColor = this.actorBorder;\n this.labelTextColor = this.text;\n this.loopTextColor = this.text;\n this.noteBorderColor = '#999';\n this.noteBkgColor = '#666';\n this.noteTextColor = '#fff';\n\n /* Color Scale */\n /* Each color-set will have a background, a foreground and a border color */\n\n this.cScale0 = this.cScale0 || '#555';\n this.cScale1 = this.cScale1 || '#F4F4F4';\n this.cScale2 = this.cScale2 || '#555';\n this.cScale3 = this.cScale3 || '#BBB';\n this.cScale4 = this.cScale4 || '#777';\n this.cScale5 = this.cScale5 || '#999';\n this.cScale6 = this.cScale6 || '#DDD';\n this.cScale7 = this.cScale7 || '#FFF';\n this.cScale8 = this.cScale8 || '#DDD';\n this.cScale9 = this.cScale9 || '#BBB';\n this.cScale10 = this.cScale10 || '#999';\n this.cScale11 = this.cScale11 || '#777';\n\n // Setup the inverted color for the set\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this['cScaleInv' + i] = this['cScaleInv' + i] || invert(this['cScale' + i]);\n }\n // Setup the peer color for the set, useful for borders\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n if (this.darkMode) {\n this['cScalePeer' + i] = this['cScalePeer' + i] || lighten(this['cScale' + i], 10);\n } else {\n this['cScalePeer' + i] = this['cScalePeer' + i] || darken(this['cScale' + i], 10);\n }\n }\n\n // Setup the label color for the set\n this.scaleLabelColor = this.scaleLabelColor || (this.darkMode ? 'black' : this.labelTextColor);\n\n this.cScaleLabel0 = this.cScaleLabel0 || this.cScale1;\n this.cScaleLabel2 = this.cScaleLabel2 || this.cScale1;\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this['cScaleLabel' + i] = this['cScaleLabel' + i] || this.scaleLabelColor;\n }\n\n for (let i = 0; i < 5; i++) {\n this['surface' + i] = this['surface' + i] || adjust(this.mainBkg, { l: -(5 + i * 5) });\n this['surfacePeer' + i] =\n this['surfacePeer' + i] || adjust(this.mainBkg, { l: -(8 + i * 5) });\n }\n\n /* Flowchart variables */\n\n this.nodeBkg = this.mainBkg;\n this.nodeBorder = this.border1;\n this.clusterBkg = this.secondBkg;\n this.clusterBorder = this.border2;\n this.defaultLinkColor = this.lineColor;\n this.titleColor = this.text;\n\n /* Gantt chart variables */\n\n this.sectionBkgColor = lighten(this.contrast, 30);\n this.sectionBkgColor2 = lighten(this.contrast, 30);\n\n this.taskBorderColor = darken(this.contrast, 10);\n\n this.taskBkgColor = this.contrast;\n this.taskTextColor = this.taskTextLightColor;\n this.taskTextDarkColor = this.text;\n this.taskTextOutsideColor = this.taskTextDarkColor;\n this.activeTaskBorderColor = this.taskBorderColor;\n this.activeTaskBkgColor = this.mainBkg;\n this.gridColor = lighten(this.border1, 30);\n\n this.doneTaskBkgColor = this.done;\n this.doneTaskBorderColor = this.lineColor;\n this.critBkgColor = this.critical;\n this.critBorderColor = darken(this.critBkgColor, 10);\n\n this.todayLineColor = this.critBkgColor;\n this.vertLineColor = this.critBkgColor;\n\n /* Architecture Diagram variables */\n this.archEdgeColor = this.lineColor;\n this.archEdgeArrowColor = this.lineColor;\n\n /* state colors */\n this.transitionColor = this.transitionColor || '#000';\n this.transitionLabelColor = this.transitionLabelColor || this.textColor;\n this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;\n\n this.stateBkg = this.stateBkg || this.mainBkg;\n this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;\n this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;\n this.altBackground = this.altBackground || '#f4f4f4';\n this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;\n this.stateBorder = this.stateBorder || '#000';\n this.innerEndBackground = this.primaryBorderColor;\n this.specialStateColor = '#222';\n\n this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;\n this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;\n\n /* class */\n this.classText = this.primaryTextColor;\n /* journey */\n this.fillType0 = this.primaryColor;\n this.fillType1 = this.secondaryColor;\n this.fillType2 = adjust(this.primaryColor, { h: 64 });\n this.fillType3 = adjust(this.secondaryColor, { h: 64 });\n this.fillType4 = adjust(this.primaryColor, { h: -64 });\n this.fillType5 = adjust(this.secondaryColor, { h: -64 });\n this.fillType6 = adjust(this.primaryColor, { h: 128 });\n this.fillType7 = adjust(this.secondaryColor, { h: 128 });\n\n // /* pie */\n /* Pie diagram */\n for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {\n this['pie' + i] = this['cScale' + i];\n }\n this.pie12 = this.pie0;\n this.pieTitleTextSize = this.pieTitleTextSize || '25px';\n this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;\n this.pieSectionTextSize = this.pieSectionTextSize || '17px';\n this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;\n this.pieLegendTextSize = this.pieLegendTextSize || '17px';\n this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;\n this.pieStrokeColor = this.pieStrokeColor || 'black';\n this.pieStrokeWidth = this.pieStrokeWidth || '2px';\n this.pieOuterStrokeWidth = this.pieOuterStrokeWidth || '2px';\n this.pieOuterStrokeColor = this.pieOuterStrokeColor || 'black';\n this.pieOpacity = this.pieOpacity || '0.7';\n\n /* quadrant-graph */\n this.quadrant1Fill = this.quadrant1Fill || this.primaryColor;\n this.quadrant2Fill = this.quadrant2Fill || adjust(this.primaryColor, { r: 5, g: 5, b: 5 });\n this.quadrant3Fill = this.quadrant3Fill || adjust(this.primaryColor, { r: 10, g: 10, b: 10 });\n this.quadrant4Fill = this.quadrant4Fill || adjust(this.primaryColor, { r: 15, g: 15, b: 15 });\n this.quadrant1TextFill = this.quadrant1TextFill || this.primaryTextColor;\n this.quadrant2TextFill =\n this.quadrant2TextFill || adjust(this.primaryTextColor, { r: -5, g: -5, b: -5 });\n this.quadrant3TextFill =\n this.quadrant3TextFill || adjust(this.primaryTextColor, { r: -10, g: -10, b: -10 });\n this.quadrant4TextFill =\n this.quadrant4TextFill || adjust(this.primaryTextColor, { r: -15, g: -15, b: -15 });\n this.quadrantPointFill =\n this.quadrantPointFill || isDark(this.quadrant1Fill)\n ? lighten(this.quadrant1Fill)\n : darken(this.quadrant1Fill);\n this.quadrantPointTextFill = this.quadrantPointTextFill || this.primaryTextColor;\n this.quadrantXAxisTextFill = this.quadrantXAxisTextFill || this.primaryTextColor;\n this.quadrantYAxisTextFill = this.quadrantYAxisTextFill || this.primaryTextColor;\n this.quadrantInternalBorderStrokeFill =\n this.quadrantInternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantExternalBorderStrokeFill =\n this.quadrantExternalBorderStrokeFill || this.primaryBorderColor;\n this.quadrantTitleFill = this.quadrantTitleFill || this.primaryTextColor;\n\n /* xychart */\n this.xyChart = {\n backgroundColor: this.xyChart?.backgroundColor || this.background,\n titleColor: this.xyChart?.titleColor || this.primaryTextColor,\n xAxisTitleColor: this.xyChart?.xAxisTitleColor || this.primaryTextColor,\n xAxisLabelColor: this.xyChart?.xAxisLabelColor || this.primaryTextColor,\n xAxisTickColor: this.xyChart?.xAxisTickColor || this.primaryTextColor,\n xAxisLineColor: this.xyChart?.xAxisLineColor || this.primaryTextColor,\n yAxisTitleColor: this.xyChart?.yAxisTitleColor || this.primaryTextColor,\n yAxisLabelColor: this.xyChart?.yAxisLabelColor || this.primaryTextColor,\n yAxisTickColor: this.xyChart?.yAxisTickColor || this.primaryTextColor,\n yAxisLineColor: this.xyChart?.yAxisLineColor || this.primaryTextColor,\n plotColorPalette:\n this.xyChart?.plotColorPalette ||\n '#EEE,#6BB8E4,#8ACB88,#C7ACD6,#E8DCC2,#FFB2A8,#FFF380,#7E8D91,#FFD8B1,#FAF3E0',\n };\n\n /* radar */\n this.radar = {\n axisColor: this.radar?.axisColor || this.lineColor,\n axisStrokeWidth: this.radar?.axisStrokeWidth || 2,\n axisLabelFontSize: this.radar?.axisLabelFontSize || 12,\n curveOpacity: this.radar?.curveOpacity || 0.5,\n curveStrokeWidth: this.radar?.curveStrokeWidth || 2,\n graticuleColor: this.radar?.graticuleColor || '#DEDEDE',\n graticuleStrokeWidth: this.radar?.graticuleStrokeWidth || 1,\n graticuleOpacity: this.radar?.graticuleOpacity || 0.3,\n legendBoxSize: this.radar?.legendBoxSize || 12,\n legendFontSize: this.radar?.legendFontSize || 12,\n };\n\n /* requirement-diagram */\n this.requirementBackground = this.requirementBackground || this.primaryColor;\n this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;\n this.requirementBorderSize = this.requirementBorderSize || '1';\n this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;\n this.relationColor = this.relationColor || this.lineColor;\n this.relationLabelBackground = this.relationLabelBackground || this.edgeLabelBackground;\n this.relationLabelColor = this.relationLabelColor || this.actorTextColor;\n\n /* git */\n this.git0 = darken(this.pie1, 25) || this.primaryColor;\n this.git1 = this.pie2 || this.secondaryColor;\n this.git2 = this.pie3 || this.tertiaryColor;\n this.git3 = this.pie4 || adjust(this.primaryColor, { h: -30 });\n this.git4 = this.pie5 || adjust(this.primaryColor, { h: -60 });\n this.git5 = this.pie6 || adjust(this.primaryColor, { h: -90 });\n this.git6 = this.pie7 || adjust(this.primaryColor, { h: +60 });\n this.git7 = this.pie8 || adjust(this.primaryColor, { h: +120 });\n\n this.gitInv0 = this.gitInv0 || invert(this.git0);\n this.gitInv1 = this.gitInv1 || invert(this.git1);\n this.gitInv2 = this.gitInv2 || invert(this.git2);\n this.gitInv3 = this.gitInv3 || invert(this.git3);\n this.gitInv4 = this.gitInv4 || invert(this.git4);\n this.gitInv5 = this.gitInv5 || invert(this.git5);\n this.gitInv6 = this.gitInv6 || invert(this.git6);\n this.gitInv7 = this.gitInv7 || invert(this.git7);\n\n this.branchLabelColor = this.branchLabelColor || this.labelTextColor;\n this.gitBranchLabel0 = this.branchLabelColor;\n this.gitBranchLabel1 = 'white';\n this.gitBranchLabel2 = this.branchLabelColor;\n this.gitBranchLabel3 = 'white';\n this.gitBranchLabel4 = this.branchLabelColor;\n this.gitBranchLabel5 = this.branchLabelColor;\n this.gitBranchLabel6 = this.branchLabelColor;\n this.gitBranchLabel7 = this.branchLabelColor;\n\n this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;\n this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;\n this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;\n this.tagLabelFontSize = this.tagLabelFontSize || '10px';\n this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;\n this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;\n this.commitLabelFontSize = this.commitLabelFontSize || '10px';\n\n /* -------------------------------------------------- */\n /* EntityRelationship diagrams */\n\n this.attributeBackgroundColorOdd =\n this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;\n this.attributeBackgroundColorEven =\n this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;\n /* -------------------------------------------------- */\n }\n calculate(overrides) {\n if (typeof overrides !== 'object') {\n // Calculate colors form base colors\n this.updateColors();\n return;\n }\n\n const keys = Object.keys(overrides);\n\n // Copy values from overrides, this is mainly for base colors\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n\n // Calculate colors form base colors\n this.updateColors();\n // Copy values from overrides again in case of an override of derived value\n keys.forEach((k) => {\n this[k] = overrides[k];\n });\n }\n}\n\nexport const getThemeVariables = (userOverrides) => {\n const theme = new Theme();\n theme.calculate(userOverrides);\n return theme;\n};\n", "import { getThemeVariables as baseThemeVariables } from './theme-base.js';\nimport { getThemeVariables as darkThemeVariables } from './theme-dark.js';\nimport { getThemeVariables as defaultThemeVariables } from './theme-default.js';\nimport { getThemeVariables as forestThemeVariables } from './theme-forest.js';\nimport { getThemeVariables as neutralThemeVariables } from './theme-neutral.js';\n\nexport default {\n base: {\n getThemeVariables: baseThemeVariables,\n },\n dark: {\n getThemeVariables: darkThemeVariables,\n },\n default: {\n getThemeVariables: defaultThemeVariables,\n },\n forest: {\n getThemeVariables: forestThemeVariables,\n },\n neutral: {\n getThemeVariables: neutralThemeVariables,\n },\n};\n", "export default {\n \"flowchart\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"subGraphTitleMargin\": {\n \"top\": 0,\n \"bottom\": 0\n },\n \"diagramPadding\": 8,\n \"htmlLabels\": true,\n \"nodeSpacing\": 50,\n \"rankSpacing\": 50,\n \"curve\": \"basis\",\n \"padding\": 15,\n \"defaultRenderer\": \"dagre-wrapper\",\n \"wrappingWidth\": 200,\n \"inheritDir\": false\n },\n \"sequence\": {\n \"useMaxWidth\": true,\n \"hideUnusedParticipants\": false,\n \"activationWidth\": 10,\n \"diagramMarginX\": 50,\n \"diagramMarginY\": 10,\n \"actorMargin\": 50,\n \"width\": 150,\n \"height\": 65,\n \"boxMargin\": 10,\n \"boxTextMargin\": 5,\n \"noteMargin\": 10,\n \"messageMargin\": 35,\n \"messageAlign\": \"center\",\n \"mirrorActors\": true,\n \"forceMenus\": false,\n \"bottomMarginAdj\": 1,\n \"rightAngles\": false,\n \"showSequenceNumbers\": false,\n \"actorFontSize\": 14,\n \"actorFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"actorFontWeight\": 400,\n \"noteFontSize\": 14,\n \"noteFontFamily\": \"\\\"trebuchet ms\\\", verdana, arial, sans-serif\",\n \"noteFontWeight\": 400,\n \"noteAlign\": \"center\",\n \"messageFontSize\": 16,\n \"messageFontFamily\": \"\\\"trebuchet ms\\\", verdana, arial, sans-serif\",\n \"messageFontWeight\": 400,\n \"wrap\": false,\n \"wrapPadding\": 10,\n \"labelBoxWidth\": 50,\n \"labelBoxHeight\": 20\n },\n \"gantt\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"barHeight\": 20,\n \"barGap\": 4,\n \"topPadding\": 50,\n \"rightPadding\": 75,\n \"leftPadding\": 75,\n \"gridLineStartPadding\": 35,\n \"fontSize\": 11,\n \"sectionFontSize\": 11,\n \"numberSectionStyles\": 4,\n \"axisFormat\": \"%Y-%m-%d\",\n \"topAxis\": false,\n \"displayMode\": \"\",\n \"weekday\": \"sunday\"\n },\n \"journey\": {\n \"useMaxWidth\": true,\n \"diagramMarginX\": 50,\n \"diagramMarginY\": 10,\n \"leftMargin\": 150,\n \"maxLabelWidth\": 360,\n \"width\": 150,\n \"height\": 50,\n \"boxMargin\": 10,\n \"boxTextMargin\": 5,\n \"noteMargin\": 10,\n \"messageMargin\": 35,\n \"messageAlign\": \"center\",\n \"bottomMarginAdj\": 1,\n \"rightAngles\": false,\n \"taskFontSize\": 14,\n \"taskFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"taskMargin\": 50,\n \"activationWidth\": 10,\n \"textPlacement\": \"fo\",\n \"actorColours\": [\n \"#8FBC8F\",\n \"#7CFC00\",\n \"#00FFFF\",\n \"#20B2AA\",\n \"#B0E0E6\",\n \"#FFFFE0\"\n ],\n \"sectionFills\": [\n \"#191970\",\n \"#8B008B\",\n \"#4B0082\",\n \"#2F4F4F\",\n \"#800000\",\n \"#8B4513\",\n \"#00008B\"\n ],\n \"sectionColours\": [\n \"#fff\"\n ],\n \"titleColor\": \"\",\n \"titleFontFamily\": \"\\\"trebuchet ms\\\", verdana, arial, sans-serif\",\n \"titleFontSize\": \"4ex\"\n },\n \"class\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"arrowMarkerAbsolute\": false,\n \"dividerMargin\": 10,\n \"padding\": 5,\n \"textHeight\": 10,\n \"defaultRenderer\": \"dagre-wrapper\",\n \"htmlLabels\": false,\n \"hideEmptyMembersBox\": false\n },\n \"state\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"dividerMargin\": 10,\n \"sizeUnit\": 5,\n \"padding\": 8,\n \"textHeight\": 10,\n \"titleShift\": -15,\n \"noteMargin\": 10,\n \"forkWidth\": 70,\n \"forkHeight\": 7,\n \"miniPadding\": 2,\n \"fontSizeFactor\": 5.02,\n \"fontSize\": 24,\n \"labelHeight\": 16,\n \"edgeLengthFactor\": \"20\",\n \"compositTitleSize\": 35,\n \"radius\": 5,\n \"defaultRenderer\": \"dagre-wrapper\"\n },\n \"er\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"diagramPadding\": 20,\n \"layoutDirection\": \"TB\",\n \"minEntityWidth\": 100,\n \"minEntityHeight\": 75,\n \"entityPadding\": 15,\n \"nodeSpacing\": 140,\n \"rankSpacing\": 80,\n \"stroke\": \"gray\",\n \"fill\": \"honeydew\",\n \"fontSize\": 12\n },\n \"pie\": {\n \"useMaxWidth\": true,\n \"textPosition\": 0.75\n },\n \"quadrantChart\": {\n \"useMaxWidth\": true,\n \"chartWidth\": 500,\n \"chartHeight\": 500,\n \"titleFontSize\": 20,\n \"titlePadding\": 10,\n \"quadrantPadding\": 5,\n \"xAxisLabelPadding\": 5,\n \"yAxisLabelPadding\": 5,\n \"xAxisLabelFontSize\": 16,\n \"yAxisLabelFontSize\": 16,\n \"quadrantLabelFontSize\": 16,\n \"quadrantTextTopPadding\": 5,\n \"pointTextPadding\": 5,\n \"pointLabelFontSize\": 12,\n \"pointRadius\": 5,\n \"xAxisPosition\": \"top\",\n \"yAxisPosition\": \"left\",\n \"quadrantInternalBorderStrokeWidth\": 1,\n \"quadrantExternalBorderStrokeWidth\": 2\n },\n \"xyChart\": {\n \"useMaxWidth\": true,\n \"width\": 700,\n \"height\": 500,\n \"titleFontSize\": 20,\n \"titlePadding\": 10,\n \"showDataLabel\": false,\n \"showTitle\": true,\n \"xAxis\": {\n \"$ref\": \"#/$defs/XYChartAxisConfig\",\n \"showLabel\": true,\n \"labelFontSize\": 14,\n \"labelPadding\": 5,\n \"showTitle\": true,\n \"titleFontSize\": 16,\n \"titlePadding\": 5,\n \"showTick\": true,\n \"tickLength\": 5,\n \"tickWidth\": 2,\n \"showAxisLine\": true,\n \"axisLineWidth\": 2\n },\n \"yAxis\": {\n \"$ref\": \"#/$defs/XYChartAxisConfig\",\n \"showLabel\": true,\n \"labelFontSize\": 14,\n \"labelPadding\": 5,\n \"showTitle\": true,\n \"titleFontSize\": 16,\n \"titlePadding\": 5,\n \"showTick\": true,\n \"tickLength\": 5,\n \"tickWidth\": 2,\n \"showAxisLine\": true,\n \"axisLineWidth\": 2\n },\n \"chartOrientation\": \"vertical\",\n \"plotReservedSpacePercent\": 50\n },\n \"requirement\": {\n \"useMaxWidth\": true,\n \"rect_fill\": \"#f9f9f9\",\n \"text_color\": \"#333\",\n \"rect_border_size\": \"0.5px\",\n \"rect_border_color\": \"#bbb\",\n \"rect_min_width\": 200,\n \"rect_min_height\": 200,\n \"fontSize\": 14,\n \"rect_padding\": 10,\n \"line_height\": 20\n },\n \"mindmap\": {\n \"useMaxWidth\": true,\n \"padding\": 10,\n \"maxNodeWidth\": 200,\n \"layoutAlgorithm\": \"cose-bilkent\"\n },\n \"kanban\": {\n \"useMaxWidth\": true,\n \"padding\": 8,\n \"sectionWidth\": 200,\n \"ticketBaseUrl\": \"\"\n },\n \"timeline\": {\n \"useMaxWidth\": true,\n \"diagramMarginX\": 50,\n \"diagramMarginY\": 10,\n \"leftMargin\": 150,\n \"width\": 150,\n \"height\": 50,\n \"boxMargin\": 10,\n \"boxTextMargin\": 5,\n \"noteMargin\": 10,\n \"messageMargin\": 35,\n \"messageAlign\": \"center\",\n \"bottomMarginAdj\": 1,\n \"rightAngles\": false,\n \"taskFontSize\": 14,\n \"taskFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"taskMargin\": 50,\n \"activationWidth\": 10,\n \"textPlacement\": \"fo\",\n \"actorColours\": [\n \"#8FBC8F\",\n \"#7CFC00\",\n \"#00FFFF\",\n \"#20B2AA\",\n \"#B0E0E6\",\n \"#FFFFE0\"\n ],\n \"sectionFills\": [\n \"#191970\",\n \"#8B008B\",\n \"#4B0082\",\n \"#2F4F4F\",\n \"#800000\",\n \"#8B4513\",\n \"#00008B\"\n ],\n \"sectionColours\": [\n \"#fff\"\n ],\n \"disableMulticolor\": false\n },\n \"gitGraph\": {\n \"useMaxWidth\": true,\n \"titleTopMargin\": 25,\n \"diagramPadding\": 8,\n \"nodeLabel\": {\n \"width\": 75,\n \"height\": 100,\n \"x\": -25,\n \"y\": 0\n },\n \"mainBranchName\": \"main\",\n \"mainBranchOrder\": 0,\n \"showCommitLabel\": true,\n \"showBranches\": true,\n \"rotateCommitLabel\": true,\n \"parallelCommits\": false,\n \"arrowMarkerAbsolute\": false\n },\n \"c4\": {\n \"useMaxWidth\": true,\n \"diagramMarginX\": 50,\n \"diagramMarginY\": 10,\n \"c4ShapeMargin\": 50,\n \"c4ShapePadding\": 20,\n \"width\": 216,\n \"height\": 60,\n \"boxMargin\": 10,\n \"c4ShapeInRow\": 4,\n \"nextLinePaddingX\": 0,\n \"c4BoundaryInRow\": 2,\n \"personFontSize\": 14,\n \"personFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"personFontWeight\": \"normal\",\n \"external_personFontSize\": 14,\n \"external_personFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"external_personFontWeight\": \"normal\",\n \"systemFontSize\": 14,\n \"systemFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"systemFontWeight\": \"normal\",\n \"external_systemFontSize\": 14,\n \"external_systemFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"external_systemFontWeight\": \"normal\",\n \"system_dbFontSize\": 14,\n \"system_dbFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"system_dbFontWeight\": \"normal\",\n \"external_system_dbFontSize\": 14,\n \"external_system_dbFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"external_system_dbFontWeight\": \"normal\",\n \"system_queueFontSize\": 14,\n \"system_queueFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"system_queueFontWeight\": \"normal\",\n \"external_system_queueFontSize\": 14,\n \"external_system_queueFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"external_system_queueFontWeight\": \"normal\",\n \"boundaryFontSize\": 14,\n \"boundaryFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"boundaryFontWeight\": \"normal\",\n \"messageFontSize\": 12,\n \"messageFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"messageFontWeight\": \"normal\",\n \"containerFontSize\": 14,\n \"containerFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"containerFontWeight\": \"normal\",\n \"external_containerFontSize\": 14,\n \"external_containerFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"external_containerFontWeight\": \"normal\",\n \"container_dbFontSize\": 14,\n \"container_dbFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"container_dbFontWeight\": \"normal\",\n \"external_container_dbFontSize\": 14,\n \"external_container_dbFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"external_container_dbFontWeight\": \"normal\",\n \"container_queueFontSize\": 14,\n \"container_queueFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"container_queueFontWeight\": \"normal\",\n \"external_container_queueFontSize\": 14,\n \"external_container_queueFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"external_container_queueFontWeight\": \"normal\",\n \"componentFontSize\": 14,\n \"componentFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"componentFontWeight\": \"normal\",\n \"external_componentFontSize\": 14,\n \"external_componentFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"external_componentFontWeight\": \"normal\",\n \"component_dbFontSize\": 14,\n \"component_dbFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"component_dbFontWeight\": \"normal\",\n \"external_component_dbFontSize\": 14,\n \"external_component_dbFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"external_component_dbFontWeight\": \"normal\",\n \"component_queueFontSize\": 14,\n \"component_queueFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"component_queueFontWeight\": \"normal\",\n \"external_component_queueFontSize\": 14,\n \"external_component_queueFontFamily\": \"\\\"Open Sans\\\", sans-serif\",\n \"external_component_queueFontWeight\": \"normal\",\n \"wrap\": true,\n \"wrapPadding\": 10,\n \"person_bg_color\": \"#08427B\",\n \"person_border_color\": \"#073B6F\",\n \"external_person_bg_color\": \"#686868\",\n \"external_person_border_color\": \"#8A8A8A\",\n \"system_bg_color\": \"#1168BD\",\n \"system_border_color\": \"#3C7FC0\",\n \"system_db_bg_color\": \"#1168BD\",\n \"system_db_border_color\": \"#3C7FC0\",\n \"system_queue_bg_color\": \"#1168BD\",\n \"system_queue_border_color\": \"#3C7FC0\",\n \"external_system_bg_color\": \"#999999\",\n \"external_system_border_color\": \"#8A8A8A\",\n \"external_system_db_bg_color\": \"#999999\",\n \"external_system_db_border_color\": \"#8A8A8A\",\n \"external_system_queue_bg_color\": \"#999999\",\n \"external_system_queue_border_color\": \"#8A8A8A\",\n \"container_bg_color\": \"#438DD5\",\n \"container_border_color\": \"#3C7FC0\",\n \"container_db_bg_color\": \"#438DD5\",\n \"container_db_border_color\": \"#3C7FC0\",\n \"container_queue_bg_color\": \"#438DD5\",\n \"container_queue_border_color\": \"#3C7FC0\",\n \"external_container_bg_color\": \"#B3B3B3\",\n \"external_container_border_color\": \"#A6A6A6\",\n \"external_container_db_bg_color\": \"#B3B3B3\",\n \"external_container_db_border_color\": \"#A6A6A6\",\n \"external_container_queue_bg_color\": \"#B3B3B3\",\n \"external_container_queue_border_color\": \"#A6A6A6\",\n \"component_bg_color\": \"#85BBF0\",\n \"component_border_color\": \"#78A8D8\",\n \"component_db_bg_color\": \"#85BBF0\",\n \"component_db_border_color\": \"#78A8D8\",\n \"component_queue_bg_color\": \"#85BBF0\",\n \"component_queue_border_color\": \"#78A8D8\",\n \"external_component_bg_color\": \"#CCCCCC\",\n \"external_component_border_color\": \"#BFBFBF\",\n \"external_component_db_bg_color\": \"#CCCCCC\",\n \"external_component_db_border_color\": \"#BFBFBF\",\n \"external_component_queue_bg_color\": \"#CCCCCC\",\n \"external_component_queue_border_color\": \"#BFBFBF\"\n },\n \"sankey\": {\n \"useMaxWidth\": true,\n \"width\": 600,\n \"height\": 400,\n \"linkColor\": \"gradient\",\n \"nodeAlignment\": \"justify\",\n \"showValues\": true,\n \"prefix\": \"\",\n \"suffix\": \"\"\n },\n \"block\": {\n \"useMaxWidth\": true,\n \"padding\": 8\n },\n \"packet\": {\n \"useMaxWidth\": true,\n \"rowHeight\": 32,\n \"bitWidth\": 32,\n \"bitsPerRow\": 32,\n \"showBits\": true,\n \"paddingX\": 5,\n \"paddingY\": 5\n },\n \"architecture\": {\n \"useMaxWidth\": true,\n \"padding\": 40,\n \"iconSize\": 80,\n \"fontSize\": 16\n },\n \"radar\": {\n \"useMaxWidth\": true,\n \"width\": 600,\n \"height\": 600,\n \"marginTop\": 50,\n \"marginRight\": 50,\n \"marginBottom\": 50,\n \"marginLeft\": 50,\n \"axisScaleFactor\": 1,\n \"axisLabelFactor\": 1.05,\n \"curveTension\": 0.17\n },\n \"theme\": \"default\",\n \"look\": \"classic\",\n \"handDrawnSeed\": 0,\n \"layout\": \"dagre\",\n \"maxTextSize\": 50000,\n \"maxEdges\": 500,\n \"darkMode\": false,\n \"fontFamily\": \"\\\"trebuchet ms\\\", verdana, arial, sans-serif;\",\n \"logLevel\": 5,\n \"securityLevel\": \"strict\",\n \"startOnLoad\": true,\n \"arrowMarkerAbsolute\": false,\n \"secure\": [\n \"secure\",\n \"securityLevel\",\n \"startOnLoad\",\n \"maxTextSize\",\n \"suppressErrorRendering\",\n \"maxEdges\"\n ],\n \"legacyMathML\": false,\n \"forceLegacyMathML\": false,\n \"deterministicIds\": false,\n \"fontSize\": 16,\n \"markdownAutoWrap\": true,\n \"suppressErrorRendering\": false\n};", "import type { RequiredDeep } from 'type-fest';\n\nimport theme from './themes/index.js';\nimport type { MermaidConfig } from './config.type.js';\n\n// Uses our custom Vite jsonSchemaPlugin to load only the default values from\n// our JSON Schema\n// @ts-expect-error This file is automatically generated via a custom Vite plugin\nimport defaultConfigJson from './schemas/config.schema.yaml?only-defaults=true';\n\n/**\n * Default mermaid configuration options.\n *\n * Please see the Mermaid config JSON Schema for the default JSON values.\n * Non-JSON JS default values are listed in this file, e.g. functions, or\n * `undefined` (explicitly set so that `configKeys` finds them).\n */\nconst config: RequiredDeep = {\n ...defaultConfigJson,\n // Set, even though they're `undefined` so that `configKeys` finds these keys\n // TODO: Should we replace these with `null` so that they can go in the JSON Schema?\n deterministicIDSeed: undefined,\n elk: {\n // mergeEdges is needed here to be considered\n mergeEdges: false,\n nodePlacementStrategy: 'BRANDES_KOEPF',\n forceNodeModelOrder: false,\n considerModelOrder: 'NODES_AND_EDGES',\n },\n themeCSS: undefined,\n\n // add non-JSON default config values\n themeVariables: theme.default.getThemeVariables(),\n sequence: {\n ...defaultConfigJson.sequence,\n messageFont: function () {\n return {\n fontFamily: this.messageFontFamily,\n fontSize: this.messageFontSize,\n fontWeight: this.messageFontWeight,\n };\n },\n noteFont: function () {\n return {\n fontFamily: this.noteFontFamily,\n fontSize: this.noteFontSize,\n fontWeight: this.noteFontWeight,\n };\n },\n actorFont: function () {\n return {\n fontFamily: this.actorFontFamily,\n fontSize: this.actorFontSize,\n fontWeight: this.actorFontWeight,\n };\n },\n },\n class: {\n hideEmptyMembersBox: false,\n },\n gantt: {\n ...defaultConfigJson.gantt,\n tickInterval: undefined,\n useWidth: undefined, // can probably be removed since `configKeys` already includes this\n },\n c4: {\n ...defaultConfigJson.c4,\n useWidth: undefined,\n personFont: function () {\n return {\n fontFamily: this.personFontFamily,\n fontSize: this.personFontSize,\n fontWeight: this.personFontWeight,\n };\n },\n flowchart: {\n ...defaultConfigJson.flowchart,\n inheritDir: false, // default to legacy behavior\n },\n\n external_personFont: function () {\n return {\n fontFamily: this.external_personFontFamily,\n fontSize: this.external_personFontSize,\n fontWeight: this.external_personFontWeight,\n };\n },\n\n systemFont: function () {\n return {\n fontFamily: this.systemFontFamily,\n fontSize: this.systemFontSize,\n fontWeight: this.systemFontWeight,\n };\n },\n\n external_systemFont: function () {\n return {\n fontFamily: this.external_systemFontFamily,\n fontSize: this.external_systemFontSize,\n fontWeight: this.external_systemFontWeight,\n };\n },\n\n system_dbFont: function () {\n return {\n fontFamily: this.system_dbFontFamily,\n fontSize: this.system_dbFontSize,\n fontWeight: this.system_dbFontWeight,\n };\n },\n\n external_system_dbFont: function () {\n return {\n fontFamily: this.external_system_dbFontFamily,\n fontSize: this.external_system_dbFontSize,\n fontWeight: this.external_system_dbFontWeight,\n };\n },\n\n system_queueFont: function () {\n return {\n fontFamily: this.system_queueFontFamily,\n fontSize: this.system_queueFontSize,\n fontWeight: this.system_queueFontWeight,\n };\n },\n\n external_system_queueFont: function () {\n return {\n fontFamily: this.external_system_queueFontFamily,\n fontSize: this.external_system_queueFontSize,\n fontWeight: this.external_system_queueFontWeight,\n };\n },\n\n containerFont: function () {\n return {\n fontFamily: this.containerFontFamily,\n fontSize: this.containerFontSize,\n fontWeight: this.containerFontWeight,\n };\n },\n\n external_containerFont: function () {\n return {\n fontFamily: this.external_containerFontFamily,\n fontSize: this.external_containerFontSize,\n fontWeight: this.external_containerFontWeight,\n };\n },\n\n container_dbFont: function () {\n return {\n fontFamily: this.container_dbFontFamily,\n fontSize: this.container_dbFontSize,\n fontWeight: this.container_dbFontWeight,\n };\n },\n\n external_container_dbFont: function () {\n return {\n fontFamily: this.external_container_dbFontFamily,\n fontSize: this.external_container_dbFontSize,\n fontWeight: this.external_container_dbFontWeight,\n };\n },\n\n container_queueFont: function () {\n return {\n fontFamily: this.container_queueFontFamily,\n fontSize: this.container_queueFontSize,\n fontWeight: this.container_queueFontWeight,\n };\n },\n\n external_container_queueFont: function () {\n return {\n fontFamily: this.external_container_queueFontFamily,\n fontSize: this.external_container_queueFontSize,\n fontWeight: this.external_container_queueFontWeight,\n };\n },\n\n componentFont: function () {\n return {\n fontFamily: this.componentFontFamily,\n fontSize: this.componentFontSize,\n fontWeight: this.componentFontWeight,\n };\n },\n\n external_componentFont: function () {\n return {\n fontFamily: this.external_componentFontFamily,\n fontSize: this.external_componentFontSize,\n fontWeight: this.external_componentFontWeight,\n };\n },\n\n component_dbFont: function () {\n return {\n fontFamily: this.component_dbFontFamily,\n fontSize: this.component_dbFontSize,\n fontWeight: this.component_dbFontWeight,\n };\n },\n\n external_component_dbFont: function () {\n return {\n fontFamily: this.external_component_dbFontFamily,\n fontSize: this.external_component_dbFontSize,\n fontWeight: this.external_component_dbFontWeight,\n };\n },\n\n component_queueFont: function () {\n return {\n fontFamily: this.component_queueFontFamily,\n fontSize: this.component_queueFontSize,\n fontWeight: this.component_queueFontWeight,\n };\n },\n\n external_component_queueFont: function () {\n return {\n fontFamily: this.external_component_queueFontFamily,\n fontSize: this.external_component_queueFontSize,\n fontWeight: this.external_component_queueFontWeight,\n };\n },\n\n boundaryFont: function () {\n return {\n fontFamily: this.boundaryFontFamily,\n fontSize: this.boundaryFontSize,\n fontWeight: this.boundaryFontWeight,\n };\n },\n\n messageFont: function () {\n return {\n fontFamily: this.messageFontFamily,\n fontSize: this.messageFontSize,\n fontWeight: this.messageFontWeight,\n };\n },\n },\n pie: {\n ...defaultConfigJson.pie,\n useWidth: 984,\n },\n xyChart: {\n ...defaultConfigJson.xyChart,\n useWidth: undefined,\n },\n requirement: {\n ...defaultConfigJson.requirement,\n useWidth: undefined,\n },\n packet: {\n ...defaultConfigJson.packet,\n },\n radar: {\n ...defaultConfigJson.radar,\n },\n treemap: {\n useMaxWidth: true,\n padding: 10,\n diagramPadding: 8,\n showValues: true,\n nodeWidth: 100,\n nodeHeight: 40,\n borderWidth: 1,\n valueFontSize: 12,\n labelFontSize: 14,\n valueFormat: ',',\n },\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst keyify = (obj: any, prefix = ''): string[] =>\n Object.keys(obj).reduce((res: string[], el): string[] => {\n if (Array.isArray(obj[el])) {\n return res;\n } else if (typeof obj[el] === 'object' && obj[el] !== null) {\n return [...res, prefix + el, ...keyify(obj[el], '')];\n }\n return [...res, prefix + el];\n }, []);\n\nexport const configKeys = new Set(keyify(config, ''));\nexport default config;\n", "import { configKeys } from '../defaultConfig.js';\nimport { log } from '../logger.js';\n\n/**\n * Sanitizes directive objects\n *\n * @param args - Directive's JSON\n */\nexport const sanitizeDirective = (args: any): void => {\n log.debug('sanitizeDirective called with', args);\n\n // Return if not an object\n if (typeof args !== 'object' || args == null) {\n return;\n }\n\n // Sanitize each element if an array\n if (Array.isArray(args)) {\n args.forEach((arg) => sanitizeDirective(arg));\n return;\n }\n\n // Sanitize each key if an object\n for (const key of Object.keys(args)) {\n log.debug('Checking key', key);\n if (\n key.startsWith('__') ||\n key.includes('proto') ||\n key.includes('constr') ||\n !configKeys.has(key) ||\n args[key] == null\n ) {\n log.debug('sanitize deleting key: ', key);\n delete args[key];\n continue;\n }\n\n // Recurse if an object\n if (typeof args[key] === 'object') {\n log.debug('sanitizing object', key);\n sanitizeDirective(args[key]);\n continue;\n }\n\n const cssMatchers = ['themeCSS', 'fontFamily', 'altFontFamily'];\n for (const cssKey of cssMatchers) {\n if (key.includes(cssKey)) {\n log.debug('sanitizing css option', key);\n args[key] = sanitizeCss(args[key]);\n }\n }\n }\n\n if (args.themeVariables) {\n for (const k of Object.keys(args.themeVariables)) {\n const val = args.themeVariables[k];\n if (val?.match && !val.match(/^[\\d \"#%(),.;A-Za-z]+$/)) {\n args.themeVariables[k] = '';\n }\n }\n }\n log.debug('After sanitization', args);\n};\n\nexport const sanitizeCss = (str: string): string => {\n let startCnt = 0;\n let endCnt = 0;\n\n for (const element of str) {\n if (startCnt < endCnt) {\n return '{ /* ERROR: Unbalanced CSS */ }';\n }\n if (element === '{') {\n startCnt++;\n } else if (element === '}') {\n endCnt++;\n }\n }\n if (startCnt !== endCnt) {\n return '{ /* ERROR: Unbalanced CSS */ }';\n }\n // Todo add more checks here\n return str;\n};\n", "import assignWithDepth from './assignWithDepth.js';\nimport { log } from './logger.js';\nimport theme from './themes/index.js';\nimport config from './defaultConfig.js';\nimport type { MermaidConfig } from './config.type.js';\nimport { sanitizeDirective } from './utils/sanitizeDirective.js';\n\nexport const defaultConfig: MermaidConfig = Object.freeze(config);\n\nlet siteConfig: MermaidConfig = assignWithDepth({}, defaultConfig);\nlet configFromInitialize: MermaidConfig;\nlet directives: MermaidConfig[] = [];\nlet currentConfig: MermaidConfig = assignWithDepth({}, defaultConfig);\n\nexport const updateCurrentConfig = (siteCfg: MermaidConfig, _directives: MermaidConfig[]) => {\n // start with config being the siteConfig\n let cfg: MermaidConfig = assignWithDepth({}, siteCfg);\n // let sCfg = assignWithDepth(defaultConfig, siteConfigDelta);\n\n // Join directives\n let sumOfDirectives: MermaidConfig = {};\n for (const d of _directives) {\n sanitize(d);\n // Apply the data from the directive where the overrides the themeVariables\n sumOfDirectives = assignWithDepth(sumOfDirectives, d);\n }\n\n cfg = assignWithDepth(cfg, sumOfDirectives);\n\n if (sumOfDirectives.theme && sumOfDirectives.theme in theme) {\n const tmpConfigFromInitialize = assignWithDepth({}, configFromInitialize);\n const themeVariables = assignWithDepth(\n tmpConfigFromInitialize.themeVariables || {},\n sumOfDirectives.themeVariables\n );\n if (cfg.theme && cfg.theme in theme) {\n cfg.themeVariables = theme[cfg.theme as keyof typeof theme].getThemeVariables(themeVariables);\n }\n }\n\n currentConfig = cfg;\n checkConfig(currentConfig);\n return currentConfig;\n};\n\n/**\n * ## setSiteConfig\n *\n * | Function | Description | Type | Values |\n * | ------------- | ------------------------------------- | ----------- | --------------------------------------- |\n * | setSiteConfig | Sets the siteConfig to desired values | Put Request | Any Values, except ones in secure array |\n *\n * **Notes:** Sets the siteConfig. The siteConfig is a protected configuration for repeat use. Calls\n * to reset() will reset the currentConfig to siteConfig. Calls to reset(configApi.defaultConfig)\n * will reset siteConfig and currentConfig to the defaultConfig Note: currentConfig is set in this\n * function _Default value: At default, will mirror Global Config_\n *\n * @param conf - The base currentConfig to use as siteConfig\n * @returns The new siteConfig\n */\nexport const setSiteConfig = (conf: MermaidConfig): MermaidConfig => {\n siteConfig = assignWithDepth({}, defaultConfig);\n siteConfig = assignWithDepth(siteConfig, conf);\n\n // @ts-ignore: TODO Fix ts errors\n if (conf.theme && theme[conf.theme]) {\n // @ts-ignore: TODO Fix ts errors\n siteConfig.themeVariables = theme[conf.theme].getThemeVariables(conf.themeVariables);\n }\n\n updateCurrentConfig(siteConfig, directives);\n return siteConfig;\n};\n\nexport const saveConfigFromInitialize = (conf: MermaidConfig): void => {\n configFromInitialize = assignWithDepth({}, conf);\n};\n\nexport const updateSiteConfig = (conf: MermaidConfig): MermaidConfig => {\n siteConfig = assignWithDepth(siteConfig, conf);\n updateCurrentConfig(siteConfig, directives);\n\n return siteConfig;\n};\n/**\n * ## getSiteConfig\n *\n * | Function | Description | Type | Values |\n * | ------------- | ------------------------------------------------- | ----------- | -------------------------------- |\n * | setSiteConfig | Returns the current siteConfig base configuration | Get Request | Returns Any Values in siteConfig |\n *\n * **Notes**: Returns **any** values in siteConfig.\n *\n * @returns The siteConfig\n */\nexport const getSiteConfig = (): MermaidConfig => {\n return assignWithDepth({}, siteConfig);\n};\n/**\n * ## setConfig\n *\n * | Function | Description | Type | Values |\n * | ------------- | ------------------------------------- | ----------- | --------------------------------------- |\n * | setSiteConfig | Sets the siteConfig to desired values | Put Request | Any Values, except ones in secure array |\n *\n * **Notes**: Sets the currentConfig. The parameter conf is sanitized based on the siteConfig.secure\n * keys. Any values found in conf with key found in siteConfig.secure will be replaced with the\n * corresponding siteConfig value.\n *\n * @param conf - The potential currentConfig\n * @returns The currentConfig merged with the sanitized conf\n */\nexport const setConfig = (conf: MermaidConfig): MermaidConfig => {\n checkConfig(conf);\n assignWithDepth(currentConfig, conf);\n\n return getConfig();\n};\n\n/**\n * ## getConfig\n *\n * | Function | Description | Type | Return Values |\n * | --------- | ------------------------- | ----------- | ------------------------------ |\n * | getConfig | Obtains the currentConfig | Get Request | Any Values from current Config |\n *\n * **Notes**: Avoid calling this function repeatedly. Instead, store the result in a variable and use it, and pass it down to function calls.\n *\n * @returns The currentConfig\n */\nexport const getConfig = (): MermaidConfig => {\n return assignWithDepth({}, currentConfig);\n};\n/**\n * ## sanitize\n *\n * | Function | Description | Type | Values |\n * | -------- | -------------------------------------- | ----------- | ------ |\n * | sanitize | Sets the siteConfig to desired values. | Put Request | None |\n *\n * Ensures options parameter does not attempt to override siteConfig secure keys **Notes**: modifies\n * options in-place\n *\n * @param options - The potential setConfig parameter\n */\nexport const sanitize = (options: any) => {\n if (!options) {\n return;\n }\n // Checking that options are not in the list of excluded options\n ['secure', ...(siteConfig.secure ?? [])].forEach((key) => {\n if (Object.hasOwn(options, key)) {\n // DO NOT attempt to print options[key] within `${}` as a malicious script\n // can exploit the logger's attempt to stringify the value and execute arbitrary code\n log.debug(`Denied attempt to modify a secure key ${key}`, options[key]);\n delete options[key];\n }\n });\n\n // Check that there no attempts of prototype pollution\n Object.keys(options).forEach((key) => {\n if (key.startsWith('__')) {\n delete options[key];\n }\n });\n // Check that there no attempts of xss, there should be no tags at all in the directive\n // blocking data urls as base64 urls can contain svg's with inline script tags\n Object.keys(options).forEach((key) => {\n if (\n typeof options[key] === 'string' &&\n (options[key].includes('<') ||\n options[key].includes('>') ||\n options[key].includes('url(data:'))\n ) {\n delete options[key];\n }\n if (typeof options[key] === 'object') {\n sanitize(options[key]);\n }\n });\n};\n\n/**\n * Pushes in a directive to the configuration\n *\n * @param directive - The directive to push in\n */\nexport const addDirective = (directive: MermaidConfig) => {\n sanitizeDirective(directive);\n\n // If the directive has a fontFamily, but no themeVariables, add the fontFamily to the themeVariables\n if (directive.fontFamily && !directive.themeVariables?.fontFamily) {\n directive.themeVariables = {\n ...directive.themeVariables,\n fontFamily: directive.fontFamily,\n };\n }\n\n directives.push(directive);\n updateCurrentConfig(siteConfig, directives);\n};\n\n/**\n * ## reset\n *\n * | Function | Description | Type | Required | Values |\n * | -------- | ---------------------------- | ----------- | -------- | ------ |\n * | reset | Resets currentConfig to conf | Put Request | Required | None |\n *\n * ## conf\n *\n * | Parameter | Description | Type | Required | Values |\n * | --------- | -------------------------------------------------------------- | ---------- | -------- | -------------------------------------------- |\n * | conf | base set of values, which currentConfig could be **reset** to. | Dictionary | Required | Any Values, with respect to the secure Array |\n *\n * **Notes**: (default: current siteConfig ) (optional, default `getSiteConfig()`)\n *\n * @param config - base set of values, which currentConfig could be **reset** to.\n * Defaults to the current siteConfig (e.g returned by {@link getSiteConfig}).\n */\nexport const reset = (config = siteConfig): void => {\n // Replace current config with siteConfig\n directives = [];\n updateCurrentConfig(config, directives);\n};\n\nconst ConfigWarning = {\n LAZY_LOAD_DEPRECATED:\n 'The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead.',\n} as const;\n\ntype ConfigWarningStrings = keyof typeof ConfigWarning;\nconst issuedWarnings: Partial> = {};\nconst issueWarning = (warning: ConfigWarningStrings) => {\n if (issuedWarnings[warning]) {\n return;\n }\n log.warn(ConfigWarning[warning]);\n issuedWarnings[warning] = true;\n};\n\nconst checkConfig = (config: MermaidConfig) => {\n if (!config) {\n return;\n }\n // @ts-expect-error Properties were removed in v10. Warning should exist.\n if (config.lazyLoadedDiagrams || config.loadExternalDiagramsAtStartup) {\n issueWarning('LAZY_LOAD_DEPRECATED');\n }\n};\n\nexport const getUserDefinedConfig = (): MermaidConfig => {\n let userConfig: MermaidConfig = {};\n\n if (configFromInitialize) {\n userConfig = assignWithDepth(userConfig, configFromInitialize);\n }\n\n for (const d of directives) {\n userConfig = assignWithDepth(userConfig, d);\n }\n\n return userConfig;\n};\n", "const {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n} = Object;\n\nlet { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\nlet { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n\nif (!freeze) {\n freeze = function (x) {\n return x;\n };\n}\n\nif (!seal) {\n seal = function (x) {\n return x;\n };\n}\n\nif (!apply) {\n apply = function (fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n}\n\nif (!construct) {\n construct = function (Func, args) {\n return new Func(...args);\n };\n}\n\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayIndexOf = unapply(Array.prototype.indexOf);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySlice = unapply(Array.prototype.slice);\nconst arraySplice = unapply(Array.prototype.splice);\n\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\n\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\n\nconst regExpTest = unapply(RegExp.prototype.test);\n\nconst typeErrorCreate = unconstruct(TypeError);\n\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(\n func: (thisArg: any, ...args: any[]) => T\n): (thisArg: any, ...args: any[]) => T {\n return (thisArg: any, ...args: any[]): T => {\n if (thisArg instanceof RegExp) {\n thisArg.lastIndex = 0;\n }\n\n return apply(func, thisArg, args);\n };\n}\n\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(func: (...args: any[]) => T): (...args: any[]) => T {\n return (...args: any[]): T => construct(func, args);\n}\n\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(\n set: Record,\n array: readonly any[],\n transformCaseFunc: ReturnType> = stringToLowerCase\n): Record {\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n (array as any[])[l] = lcElement;\n }\n\n element = lcElement;\n }\n }\n\n set[element] = true;\n }\n\n return set;\n}\n\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array: T[]): Array {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n\n return array;\n}\n\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone>(object: T): T {\n const newObject = create(null);\n\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (\n value &&\n typeof value === 'object' &&\n value.constructor === Object\n ) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n\n return newObject;\n}\n\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter>(\n object: T,\n prop: string\n): ReturnType> | (() => null) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n\n object = getPrototypeOf(object);\n }\n\n function fallbackValue(): null {\n return null;\n }\n\n return fallbackValue;\n}\n\nexport {\n // Array\n arrayForEach,\n arrayIndexOf,\n arrayLastIndexOf,\n arrayPop,\n arrayPush,\n arraySlice,\n arraySplice,\n // Object\n entries,\n freeze,\n getPrototypeOf,\n getOwnPropertyDescriptor,\n isFrozen,\n setPrototypeOf,\n seal,\n clone,\n create,\n objectHasOwnProperty,\n // RegExp\n regExpTest,\n // String\n stringIndexOf,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringTrim,\n // Errors\n typeErrorCreate,\n // Other\n lookupGetter,\n addToSet,\n // Reflect\n unapply,\n unconstruct,\n};\n", "import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'a',\n 'abbr',\n 'acronym',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'bdi',\n 'bdo',\n 'big',\n 'blink',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'content',\n 'data',\n 'datalist',\n 'dd',\n 'decorator',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'element',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'map',\n 'mark',\n 'marquee',\n 'menu',\n 'menuitem',\n 'meter',\n 'nav',\n 'nobr',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'section',\n 'select',\n 'shadow',\n 'small',\n 'source',\n 'spacer',\n 'span',\n 'strike',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'track',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr',\n] as const);\n\nexport const svg = freeze([\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern',\n] as const);\n\nexport const svgFilters = freeze([\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n] as const);\n\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nexport const svgDisallowed = freeze([\n 'animate',\n 'color-profile',\n 'cursor',\n 'discard',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignobject',\n 'hatch',\n 'hatchpath',\n 'mesh',\n 'meshgradient',\n 'meshpatch',\n 'meshrow',\n 'missing-glyph',\n 'script',\n 'set',\n 'solidcolor',\n 'unknown',\n 'use',\n] as const);\n\nexport const mathMl = freeze([\n 'math',\n 'menclose',\n 'merror',\n 'mfenced',\n 'mfrac',\n 'mglyph',\n 'mi',\n 'mlabeledtr',\n 'mmultiscripts',\n 'mn',\n 'mo',\n 'mover',\n 'mpadded',\n 'mphantom',\n 'mroot',\n 'mrow',\n 'ms',\n 'mspace',\n 'msqrt',\n 'mstyle',\n 'msub',\n 'msup',\n 'msubsup',\n 'mtable',\n 'mtd',\n 'mtext',\n 'mtr',\n 'munder',\n 'munderover',\n 'mprescripts',\n] as const);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nexport const mathMlDisallowed = freeze([\n 'maction',\n 'maligngroup',\n 'malignmark',\n 'mlongdiv',\n 'mscarries',\n 'mscarry',\n 'msgroup',\n 'mstack',\n 'msline',\n 'msrow',\n 'semantics',\n 'annotation',\n 'annotation-xml',\n 'mprescripts',\n 'none',\n] as const);\n\nexport const text = freeze(['#text'] as const);\n", "import { freeze } from './utils.js';\n\nexport const html = freeze([\n 'accept',\n 'action',\n 'align',\n 'alt',\n 'autocapitalize',\n 'autocomplete',\n 'autopictureinpicture',\n 'autoplay',\n 'background',\n 'bgcolor',\n 'border',\n 'capture',\n 'cellpadding',\n 'cellspacing',\n 'checked',\n 'cite',\n 'class',\n 'clear',\n 'color',\n 'cols',\n 'colspan',\n 'controls',\n 'controlslist',\n 'coords',\n 'crossorigin',\n 'datetime',\n 'decoding',\n 'default',\n 'dir',\n 'disabled',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'download',\n 'draggable',\n 'enctype',\n 'enterkeyhint',\n 'face',\n 'for',\n 'headers',\n 'height',\n 'hidden',\n 'high',\n 'href',\n 'hreflang',\n 'id',\n 'inputmode',\n 'integrity',\n 'ismap',\n 'kind',\n 'label',\n 'lang',\n 'list',\n 'loading',\n 'loop',\n 'low',\n 'max',\n 'maxlength',\n 'media',\n 'method',\n 'min',\n 'minlength',\n 'multiple',\n 'muted',\n 'name',\n 'nonce',\n 'noshade',\n 'novalidate',\n 'nowrap',\n 'open',\n 'optimum',\n 'pattern',\n 'placeholder',\n 'playsinline',\n 'popover',\n 'popovertarget',\n 'popovertargetaction',\n 'poster',\n 'preload',\n 'pubdate',\n 'radiogroup',\n 'readonly',\n 'rel',\n 'required',\n 'rev',\n 'reversed',\n 'role',\n 'rows',\n 'rowspan',\n 'spellcheck',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'sizes',\n 'span',\n 'srclang',\n 'start',\n 'src',\n 'srcset',\n 'step',\n 'style',\n 'summary',\n 'tabindex',\n 'title',\n 'translate',\n 'type',\n 'usemap',\n 'valign',\n 'value',\n 'width',\n 'wrap',\n 'xmlns',\n 'slot',\n] as const);\n\nexport const svg = freeze([\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'amplitude',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'exponent',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'intercept',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'slope',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'tablevalues',\n 'targetx',\n 'targety',\n 'transform',\n 'transform-origin',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan',\n] as const);\n\nexport const mathMl = freeze([\n 'accent',\n 'accentunder',\n 'align',\n 'bevelled',\n 'close',\n 'columnsalign',\n 'columnlines',\n 'columnspan',\n 'denomalign',\n 'depth',\n 'dir',\n 'display',\n 'displaystyle',\n 'encoding',\n 'fence',\n 'frame',\n 'height',\n 'href',\n 'id',\n 'largeop',\n 'length',\n 'linethickness',\n 'lspace',\n 'lquote',\n 'mathbackground',\n 'mathcolor',\n 'mathsize',\n 'mathvariant',\n 'maxsize',\n 'minsize',\n 'movablelimits',\n 'notation',\n 'numalign',\n 'open',\n 'rowalign',\n 'rowlines',\n 'rowspacing',\n 'rowspan',\n 'rspace',\n 'rquote',\n 'scriptlevel',\n 'scriptminsize',\n 'scriptsizemultiplier',\n 'selection',\n 'separator',\n 'separators',\n 'stretchy',\n 'subscriptshift',\n 'supscriptshift',\n 'symmetric',\n 'voffset',\n 'width',\n 'xmlns',\n]);\n\nexport const xml = freeze([\n 'xlink:href',\n 'xml:id',\n 'xlink:title',\n 'xml:space',\n 'xmlns:xlink',\n] as const);\n", "import { seal } from './utils.js';\n\n// eslint-disable-next-line unicorn/better-regex\nexport const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nexport const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nexport const TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nexport const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nexport const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nexport const IS_ALLOWED_URI = seal(\n /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nexport const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nexport const ATTR_WHITESPACE = seal(\n /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nexport const DOCTYPE_NAME = seal(/^html$/i);\nexport const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n", "/* eslint-disable @typescript-eslint/indent */\n\nimport type { TrustedHTML, TrustedTypesWindow } from 'trusted-types/lib';\nimport type { Config, UseProfilesConfig } from './config';\nimport * as TAGS from './tags.js';\nimport * as ATTRS from './attrs.js';\nimport * as EXPRESSIONS from './regexp.js';\nimport {\n addToSet,\n clone,\n entries,\n freeze,\n arrayForEach,\n arrayLastIndexOf,\n arrayPop,\n arrayPush,\n arraySplice,\n stringMatch,\n stringReplace,\n stringToLowerCase,\n stringToString,\n stringIndexOf,\n stringTrim,\n regExpTest,\n typeErrorCreate,\n lookupGetter,\n create,\n objectHasOwnProperty,\n} from './utils.js';\n\nexport type { Config } from './config';\n\ndeclare const VERSION: string;\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5, // Deprecated\n entityNode: 6, // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12, // Deprecated\n};\n\nconst getGlobal = function (): WindowLike {\n return typeof window === 'undefined' ? null : window;\n};\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function (\n trustedTypes: TrustedTypePolicyFactory,\n purifyHostElement: HTMLScriptElement\n) {\n if (\n typeof trustedTypes !== 'object' ||\n typeof trustedTypes.createPolicy !== 'function'\n ) {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n },\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn(\n 'TrustedTypes policy ' + policyName + ' could not be created.'\n );\n return null;\n }\n};\n\nconst _createHooksMap = function (): HooksMap {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: [],\n };\n};\n\nfunction createDOMPurify(window: WindowLike = getGlobal()): DOMPurify {\n const DOMPurify: DOMPurify = (root: WindowLike) => createDOMPurify(root);\n\n DOMPurify.version = VERSION;\n\n DOMPurify.removed = [];\n\n if (\n !window ||\n !window.document ||\n window.document.nodeType !== NODE_TYPE.document ||\n !window.Element\n ) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n\n return DOMPurify;\n }\n\n let { document } = window;\n\n const originalDocument = document;\n const currentScript: HTMLScriptElement =\n originalDocument.currentScript as HTMLScriptElement;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || (window as any).MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes,\n } = window;\n\n const ElementPrototype = Element.prototype;\n\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n\n let trustedTypesPolicy;\n let emptyHTML = '';\n\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName,\n } = document;\n const { importNode } = originalDocument;\n\n let hooks = _createHooksMap();\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported =\n typeof entries === 'function' &&\n typeof getParentNode === 'function' &&\n implementation &&\n implementation.createHTMLDocument !== undefined;\n\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT,\n } = EXPRESSIONS;\n\n let { IS_ALLOWED_URI } = EXPRESSIONS;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n ...TAGS.html,\n ...TAGS.svg,\n ...TAGS.svgFilters,\n ...TAGS.mathMl,\n ...TAGS.text,\n ]);\n\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n ...ATTRS.html,\n ...ATTRS.svg,\n ...ATTRS.mathMl,\n ...ATTRS.xml,\n ]);\n\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(\n create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null,\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false,\n },\n })\n );\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES: UseProfilesConfig | false = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, [\n 'annotation-xml',\n 'audio',\n 'colgroup',\n 'desc',\n 'foreignobject',\n 'head',\n 'iframe',\n 'math',\n 'mi',\n 'mn',\n 'mo',\n 'ms',\n 'mtext',\n 'noembed',\n 'noframes',\n 'noscript',\n 'plaintext',\n 'script',\n 'style',\n 'svg',\n 'template',\n 'thead',\n 'title',\n 'video',\n 'xmp',\n ]);\n\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, [\n 'audio',\n 'video',\n 'img',\n 'source',\n 'image',\n 'track',\n ]);\n\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n 'alt',\n 'class',\n 'for',\n 'id',\n 'label',\n 'name',\n 'pattern',\n 'placeholder',\n 'role',\n 'summary',\n 'title',\n 'value',\n 'style',\n 'xmlns',\n ]);\n\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet(\n {},\n [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE],\n stringToString\n );\n\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n 'mi',\n 'mo',\n 'mn',\n 'ms',\n 'mtext',\n ]);\n\n let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n 'title',\n 'style',\n 'font',\n 'a',\n 'script',\n ]);\n\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE: null | DOMParserSupportedType = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc: null | Parameters[2] = null;\n\n /* Keep a reference to config to pass to hooks */\n let CONFIG: Config | null = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n const formElement = document.createElement('form');\n\n const isRegexOrFunction = function (\n testValue: unknown\n ): testValue is Function | RegExp {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function (cfg: Config = {}): void {\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1\n ? DEFAULT_PARSER_MEDIA_TYPE\n : cfg.PARSER_MEDIA_TYPE;\n\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc =\n PARSER_MEDIA_TYPE === 'application/xhtml+xml'\n ? stringToString\n : stringToLowerCase;\n\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS')\n ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc)\n : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR')\n ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc)\n : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES')\n ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString)\n : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR')\n ? addToSet(\n clone(DEFAULT_URI_SAFE_ATTRIBUTES),\n cfg.ADD_URI_SAFE_ATTR,\n transformCaseFunc\n )\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS')\n ? addToSet(\n clone(DEFAULT_DATA_URI_TAGS),\n cfg.ADD_DATA_URI_TAGS,\n transformCaseFunc\n )\n : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS')\n ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc)\n : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS')\n ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc)\n : clone({});\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR')\n ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc)\n : clone({});\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES')\n ? cfg.USE_PROFILES\n : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI = cfg.ALLOWED_URI_REGEXP || EXPRESSIONS.IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n MATHML_TEXT_INTEGRATION_POINTS =\n cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n HTML_INTEGRATION_POINTS =\n cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)\n ) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck =\n cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)\n ) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck =\n cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n\n if (\n cfg.CUSTOM_ELEMENT_HANDLING &&\n typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements ===\n 'boolean'\n ) {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements =\n cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, TAGS.text);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, TAGS.html);\n addToSet(ALLOWED_ATTR, ATTRS.html);\n }\n\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, TAGS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, TAGS.svgFilters);\n addToSet(ALLOWED_ATTR, ATTRS.svg);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, TAGS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.mathMl);\n addToSet(ALLOWED_ATTR, ATTRS.xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate(\n 'TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.'\n );\n }\n\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate(\n 'TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.'\n );\n }\n\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(\n trustedTypes,\n currentScript\n );\n }\n\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n\n CONFIG = cfg;\n };\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [\n ...TAGS.svg,\n ...TAGS.svgFilters,\n ...TAGS.svgDisallowed,\n ]);\n const ALL_MATHML_TAGS = addToSet({}, [\n ...TAGS.mathMl,\n ...TAGS.mathMlDisallowed,\n ]);\n\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function (element: Element): boolean {\n let parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template',\n };\n }\n\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return (\n tagName === 'svg' &&\n (parentTagName === 'annotation-xml' ||\n MATHML_TEXT_INTEGRATION_POINTS[parentTagName])\n );\n }\n\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n\n // The only way to switch from SVG to MathML is via\n // and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (\n parent.namespaceURI === SVG_NAMESPACE &&\n !HTML_INTEGRATION_POINTS[parentTagName]\n ) {\n return false;\n }\n\n if (\n parent.namespaceURI === MATHML_NAMESPACE &&\n !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]\n ) {\n return false;\n }\n\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return (\n !ALL_MATHML_TAGS[tagName] &&\n (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName])\n );\n }\n\n // For XHTML and XML documents that support custom namespaces\n if (\n PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n ALLOWED_NAMESPACES[element.namespaceURI]\n ) {\n return true;\n }\n\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function (node: Node): void {\n arrayPush(DOMPurify.removed, { element: node });\n\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param name an Attribute name\n * @param element a DOM node\n */\n const _removeAttribute = function (name: string, element: Element): void {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: element.getAttributeNode(name),\n from: element,\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: element,\n });\n }\n\n element.removeAttribute(name);\n\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function (dirty: string): Document {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n\n if (\n PARSER_MEDIA_TYPE === 'application/xhtml+xml' &&\n NAMESPACE === HTML_NAMESPACE\n ) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty =\n '' +\n dirty +\n '';\n }\n\n const dirtyPayload = trustedTypesPolicy\n ? trustedTypesPolicy.createHTML(dirty)\n : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT\n ? emptyHTML\n : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n\n const body = doc.body || doc.documentElement;\n\n if (dirty && leadingWhitespace) {\n body.insertBefore(\n document.createTextNode(leadingWhitespace),\n body.childNodes[0] || null\n );\n }\n\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(\n doc,\n WHOLE_DOCUMENT ? 'html' : 'body'\n )[0];\n }\n\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function (root: Node): NodeIterator {\n return createNodeIterator.call(\n root.ownerDocument || root,\n root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT |\n NodeFilter.SHOW_COMMENT |\n NodeFilter.SHOW_TEXT |\n NodeFilter.SHOW_PROCESSING_INSTRUCTION |\n NodeFilter.SHOW_CDATA_SECTION,\n null\n );\n };\n\n /**\n * _isClobbered\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function (element: Element): boolean {\n return (\n element instanceof HTMLFormElement &&\n (typeof element.nodeName !== 'string' ||\n typeof element.textContent !== 'string' ||\n typeof element.removeChild !== 'function' ||\n !(element.attributes instanceof NamedNodeMap) ||\n typeof element.removeAttribute !== 'function' ||\n typeof element.setAttribute !== 'function' ||\n typeof element.namespaceURI !== 'string' ||\n typeof element.insertBefore !== 'function' ||\n typeof element.hasChildNodes !== 'function')\n );\n };\n\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param value object to check whether it's a DOM node\n * @return true is object is a DOM node\n */\n const _isNode = function (value: unknown): value is Node {\n return typeof Node === 'function' && value instanceof Node;\n };\n\n function _executeHooks<\n T extends\n | NodeHook\n | ElementHook\n | DocumentFragmentHook\n | UponSanitizeElementHook\n | UponSanitizeAttributeHook\n >(hooks: T[], currentNode: Parameters[0], data: Parameters[1]): void {\n arrayForEach(hooks, (hook) => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function (currentNode: any): boolean {\n let content = null;\n\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS,\n });\n\n /* Detect mXSS attempts abusing namespace confusion */\n if (\n SAFE_FOR_XML &&\n currentNode.hasChildNodes() &&\n !_isNode(currentNode.firstElementChild) &&\n regExpTest(/<[/\\w!]/g, currentNode.innerHTML) &&\n regExpTest(/<[/\\w!]/g, currentNode.textContent)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any kind of possibly harmful comments */\n if (\n SAFE_FOR_XML &&\n currentNode.nodeType === NODE_TYPE.comment &&\n regExpTest(/<[/\\w]/g, currentNode.data)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (\n CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)\n ) {\n return false;\n }\n\n if (\n CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)\n ) {\n return false;\n }\n }\n\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if (\n (tagName === 'noscript' ||\n tagName === 'noembed' ||\n tagName === 'noframes') &&\n regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)\n ) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr) => {\n content = stringReplace(content, expr, ' ');\n });\n\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });\n currentNode.textContent = content;\n }\n }\n\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function (\n lcTag: string,\n lcName: string,\n value: string\n ): boolean {\n /* Make sure attribute cannot clobber */\n if (\n SANITIZE_DOM &&\n (lcName === 'id' || lcName === 'name') &&\n (value in document || value in formElement)\n ) {\n return false;\n }\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (\n ALLOW_DATA_ATTR &&\n !FORBID_ATTR[lcName] &&\n regExpTest(DATA_ATTR, lcName)\n ) {\n // This attribute is safe\n } else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) {\n // This attribute is safe\n /* Otherwise, check the name is permitted */\n } else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n (_isBasicCustomElement(lcTag) &&\n ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag)) ||\n (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag))) &&\n ((CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName)) ||\n (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)))) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n (lcName === 'is' &&\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements &&\n ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp &&\n regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value)) ||\n (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function &&\n CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))))\n ) {\n // If user has supplied a regexp or function in CUSTOM_ELEMENT_HANDLING.tagNameCheck, we need to also allow derived custom elements using the same tagName test.\n // Additionally, we need to allow attributes passing the CUSTOM_ELEMENT_HANDLING.attributeNameCheck user has configured, as custom elements can define these at their own discretion.\n } else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) {\n // This attribute is safe\n /* Check no script, data or unknown possibly unsafe URI\n unless we know URI values are safe for that attribute */\n } else if (\n regExpTest(IS_ALLOWED_URI, stringReplace(value, ATTR_WHITESPACE, ''))\n ) {\n // This attribute is safe\n /* Keep image data URIs alive if src/xlink:href is allowed */\n /* Further prevent gadget XSS for dynamically built script tags */\n } else if (\n (lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') &&\n lcTag !== 'script' &&\n stringIndexOf(value, 'data:') === 0 &&\n DATA_URI_TAGS[lcTag]\n ) {\n // This attribute is safe\n /* Allow unknown protocols: This provides support for links that\n are handled by protocol handlers which may be unknown ahead of\n time, e.g. fb:, spotify: */\n } else if (\n ALLOW_UNKNOWN_PROTOCOLS &&\n !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))\n ) {\n // This attribute is safe\n /* Check for binary attributes */\n } else if (value) {\n return false;\n } else {\n // Binary attributes are safe at this point\n /* Anything else, presume unsafe, do not add it back */\n }\n\n return true;\n };\n\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function (tagName: string): RegExpMatchArray {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function (currentNode: Element): void {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n\n const { attributes } = currentNode;\n\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined,\n };\n let l = attributes.length;\n\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const { name, namespaceURI, value: attrValue } = attr;\n const lcName = transformCaseFunc(name);\n\n const initValue = attrValue;\n let value = name === 'value' ? initValue : stringTrim(initValue);\n\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr) => {\n value = stringReplace(value, expr, ' ');\n });\n }\n\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Handle attributes that require Trusted Types */\n if (\n trustedTypesPolicy &&\n typeof trustedTypes === 'object' &&\n typeof trustedTypes.getAttributeType === 'function'\n ) {\n if (namespaceURI) {\n /* Namespaces are not yet supported, see https://bugs.chromium.org/p/chromium/issues/detail?id=1305293 */\n } else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML': {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n\n case 'TrustedScriptURL': {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n\n default: {\n break;\n }\n }\n }\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {\n _removeAttribute(name, currentNode);\n }\n }\n }\n\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function (fragment: DocumentFragment): void {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n\n while ((shadowNode = shadowIterator.nextNode())) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode);\n\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n }\n\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty, cfg = {}) {\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if ((dirty as Node).nodeName) {\n const tagName = transformCaseFunc((dirty as Node).nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate(\n 'root node is forbidden and cannot be sanitized in-place'\n );\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (\n importedNode.nodeType === NODE_TYPE.element &&\n importedNode.nodeName === 'BODY'\n ) {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (\n !RETURN_DOM &&\n !SAFE_FOR_TEMPLATES &&\n !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1\n ) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n ? trustedTypesPolicy.createHTML(dirty)\n : dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while ((currentNode = nodeIterator.nextNode())) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode);\n\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n }\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n\n return returnNode;\n }\n\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n /* Serialize doctype if allowed */\n if (\n WHOLE_DOCUMENT &&\n ALLOWED_TAGS['!doctype'] &&\n body.ownerDocument &&\n body.ownerDocument.doctype &&\n body.ownerDocument.doctype.name &&\n regExpTest(EXPRESSIONS.DOCTYPE_NAME, body.ownerDocument.doctype.name)\n ) {\n serializedHTML =\n '\\n' + serializedHTML;\n }\n\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr) => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE\n ? trustedTypesPolicy.createHTML(serializedHTML)\n : serializedHTML;\n };\n\n DOMPurify.setConfig = function (cfg = {}) {\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n\n arrayPush(hooks[entryPoint], hookFunction);\n };\n\n DOMPurify.removeHook = function (entryPoint, hookFunction) {\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n\n return index === -1\n ? undefined\n : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n\n return arrayPop(hooks[entryPoint]);\n };\n\n DOMPurify.removeHooks = function (entryPoint) {\n hooks[entryPoint] = [];\n };\n\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n\n return DOMPurify;\n}\n\nexport default createDOMPurify();\n\nexport interface DOMPurify {\n /**\n * Creates a DOMPurify instance using the given window-like object. Defaults to `window`.\n */\n (root?: WindowLike): DOMPurify;\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n version: string;\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n removed: Array;\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n isSupported: boolean;\n\n /**\n * Set the configuration once.\n *\n * @param cfg configuration object\n */\n setConfig(cfg?: Config): void;\n\n /**\n * Removes the configuration.\n */\n clearConfig(): void;\n\n /**\n * Provides core sanitation functionality.\n *\n * @param dirty string or DOM node\n * @param cfg object\n * @returns Sanitized TrustedHTML.\n */\n sanitize(\n dirty: string | Node,\n cfg: Config & { RETURN_TRUSTED_TYPE: true }\n ): TrustedHTML;\n\n /**\n * Provides core sanitation functionality.\n *\n * @param dirty DOM node\n * @param cfg object\n * @returns Sanitized DOM node.\n */\n sanitize(dirty: Node, cfg: Config & { IN_PLACE: true }): Node;\n\n /**\n * Provides core sanitation functionality.\n *\n * @param dirty string or DOM node\n * @param cfg object\n * @returns Sanitized DOM node.\n */\n sanitize(dirty: string | Node, cfg: Config & { RETURN_DOM: true }): Node;\n\n /**\n * Provides core sanitation functionality.\n *\n * @param dirty string or DOM node\n * @param cfg object\n * @returns Sanitized document fragment.\n */\n sanitize(\n dirty: string | Node,\n cfg: Config & { RETURN_DOM_FRAGMENT: true }\n ): DocumentFragment;\n\n /**\n * Provides core sanitation functionality.\n *\n * @param dirty string or DOM node\n * @param cfg object\n * @returns Sanitized string.\n */\n sanitize(dirty: string | Node, cfg?: Config): string;\n\n /**\n * Checks if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n *\n * @param tag Tag name of containing element.\n * @param attr Attribute name.\n * @param value Attribute value.\n * @returns Returns true if `value` is valid. Otherwise, returns false.\n */\n isValidAttribute(tag: string, attr: string, value: string): boolean;\n\n /**\n * Adds a DOMPurify hook.\n *\n * @param entryPoint entry point for the hook to add\n * @param hookFunction function to execute\n */\n addHook(entryPoint: BasicHookName, hookFunction: NodeHook): void;\n\n /**\n * Adds a DOMPurify hook.\n *\n * @param entryPoint entry point for the hook to add\n * @param hookFunction function to execute\n */\n addHook(entryPoint: ElementHookName, hookFunction: ElementHook): void;\n\n /**\n * Adds a DOMPurify hook.\n *\n * @param entryPoint entry point for the hook to add\n * @param hookFunction function to execute\n */\n addHook(\n entryPoint: DocumentFragmentHookName,\n hookFunction: DocumentFragmentHook\n ): void;\n\n /**\n * Adds a DOMPurify hook.\n *\n * @param entryPoint entry point for the hook to add\n * @param hookFunction function to execute\n */\n addHook(\n entryPoint: 'uponSanitizeElement',\n hookFunction: UponSanitizeElementHook\n ): void;\n\n /**\n * Adds a DOMPurify hook.\n *\n * @param entryPoint entry point for the hook to add\n * @param hookFunction function to execute\n */\n addHook(\n entryPoint: 'uponSanitizeAttribute',\n hookFunction: UponSanitizeAttributeHook\n ): void;\n\n /**\n * Remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if hook not specified)\n *\n * @param entryPoint entry point for the hook to remove\n * @param hookFunction optional specific hook to remove\n * @returns removed hook\n */\n removeHook(\n entryPoint: BasicHookName,\n hookFunction?: NodeHook\n ): NodeHook | undefined;\n\n /**\n * Remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if hook not specified)\n *\n * @param entryPoint entry point for the hook to remove\n * @param hookFunction optional specific hook to remove\n * @returns removed hook\n */\n removeHook(\n entryPoint: ElementHookName,\n hookFunction?: ElementHook\n ): ElementHook | undefined;\n\n /**\n * Remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if hook not specified)\n *\n * @param entryPoint entry point for the hook to remove\n * @param hookFunction optional specific hook to remove\n * @returns removed hook\n */\n removeHook(\n entryPoint: DocumentFragmentHookName,\n hookFunction?: DocumentFragmentHook\n ): DocumentFragmentHook | undefined;\n\n /**\n * Remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if hook not specified)\n *\n * @param entryPoint entry point for the hook to remove\n * @param hookFunction optional specific hook to remove\n * @returns removed hook\n */\n removeHook(\n entryPoint: 'uponSanitizeElement',\n hookFunction?: UponSanitizeElementHook\n ): UponSanitizeElementHook | undefined;\n\n /**\n * Remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if hook not specified)\n *\n * @param entryPoint entry point for the hook to remove\n * @param hookFunction optional specific hook to remove\n * @returns removed hook\n */\n removeHook(\n entryPoint: 'uponSanitizeAttribute',\n hookFunction?: UponSanitizeAttributeHook\n ): UponSanitizeAttributeHook | undefined;\n\n /**\n * Removes all DOMPurify hooks at a given entryPoint\n *\n * @param entryPoint entry point for the hooks to remove\n */\n removeHooks(entryPoint: HookName): void;\n\n /**\n * Removes all DOMPurify hooks.\n */\n removeAllHooks(): void;\n}\n\n/**\n * An element removed by DOMPurify.\n */\nexport interface RemovedElement {\n /**\n * The element that was removed.\n */\n element: Node;\n}\n\n/**\n * An element removed by DOMPurify.\n */\nexport interface RemovedAttribute {\n /**\n * The attribute that was removed.\n */\n attribute: Attr | null;\n\n /**\n * The element that the attribute was removed.\n */\n from: Node;\n}\n\ntype BasicHookName =\n | 'beforeSanitizeElements'\n | 'afterSanitizeElements'\n | 'uponSanitizeShadowNode';\ntype ElementHookName = 'beforeSanitizeAttributes' | 'afterSanitizeAttributes';\ntype DocumentFragmentHookName =\n | 'beforeSanitizeShadowDOM'\n | 'afterSanitizeShadowDOM';\ntype UponSanitizeElementHookName = 'uponSanitizeElement';\ntype UponSanitizeAttributeHookName = 'uponSanitizeAttribute';\n\ninterface HooksMap {\n beforeSanitizeElements: NodeHook[];\n afterSanitizeElements: NodeHook[];\n beforeSanitizeShadowDOM: DocumentFragmentHook[];\n uponSanitizeShadowNode: NodeHook[];\n afterSanitizeShadowDOM: DocumentFragmentHook[];\n beforeSanitizeAttributes: ElementHook[];\n afterSanitizeAttributes: ElementHook[];\n uponSanitizeElement: UponSanitizeElementHook[];\n uponSanitizeAttribute: UponSanitizeAttributeHook[];\n}\n\nexport type HookName =\n | BasicHookName\n | ElementHookName\n | DocumentFragmentHookName\n | UponSanitizeElementHookName\n | UponSanitizeAttributeHookName;\n\nexport type NodeHook = (\n this: DOMPurify,\n currentNode: Node,\n hookEvent: null,\n config: Config\n) => void;\n\nexport type ElementHook = (\n this: DOMPurify,\n currentNode: Element,\n hookEvent: null,\n config: Config\n) => void;\n\nexport type DocumentFragmentHook = (\n this: DOMPurify,\n currentNode: DocumentFragment,\n hookEvent: null,\n config: Config\n) => void;\n\nexport type UponSanitizeElementHook = (\n this: DOMPurify,\n currentNode: Node,\n hookEvent: UponSanitizeElementHookEvent,\n config: Config\n) => void;\n\nexport type UponSanitizeAttributeHook = (\n this: DOMPurify,\n currentNode: Element,\n hookEvent: UponSanitizeAttributeHookEvent,\n config: Config\n) => void;\n\nexport interface UponSanitizeElementHookEvent {\n tagName: string;\n allowedTags: Record;\n}\n\nexport interface UponSanitizeAttributeHookEvent {\n attrName: string;\n attrValue: string;\n keepAttr: boolean;\n allowedAttributes: Record;\n forceKeepAttr: boolean | undefined;\n}\n\n/**\n * A `Window`-like object containing the properties and types that DOMPurify requires.\n */\nexport type WindowLike = Pick<\n typeof globalThis,\n | 'DocumentFragment'\n | 'HTMLTemplateElement'\n | 'Node'\n | 'Element'\n | 'NodeFilter'\n | 'NamedNodeMap'\n | 'HTMLFormElement'\n | 'DOMParser'\n> & {\n document?: Document;\n MozNamedAttrMap?: typeof window.NamedNodeMap;\n} & Pick;\n", "/**\n * Lexing or parsing positional information for error reporting.\n * This object is immutable.\n */\nclass SourceLocation {\n // The + prefix indicates that these fields aren't writeable\n // Lexer holding the input string.\n // Start offset, zero-based inclusive.\n // End offset, zero-based exclusive.\n constructor(lexer, start, end) {\n this.lexer = void 0;\n this.start = void 0;\n this.end = void 0;\n this.lexer = lexer;\n this.start = start;\n this.end = end;\n }\n /**\n * Merges two `SourceLocation`s from location providers, given they are\n * provided in order of appearance.\n * - Returns the first one's location if only the first is provided.\n * - Returns a merged range of the first and the last if both are provided\n * and their lexers match.\n * - Otherwise, returns null.\n */\n\n\n static range(first, second) {\n if (!second) {\n return first && first.loc;\n } else if (!first || !first.loc || !second.loc || first.loc.lexer !== second.loc.lexer) {\n return null;\n } else {\n return new SourceLocation(first.loc.lexer, first.loc.start, second.loc.end);\n }\n }\n\n}\n\n/**\n * Interface required to break circular dependency between Token, Lexer, and\n * ParseError.\n */\n\n/**\n * The resulting token returned from `lex`.\n *\n * It consists of the token text plus some position information.\n * The position information is essentially a range in an input string,\n * but instead of referencing the bare input string, we refer to the lexer.\n * That way it is possible to attach extra metadata to the input string,\n * like for example a file name or similar.\n *\n * The position information is optional, so it is OK to construct synthetic\n * tokens if appropriate. Not providing available position information may\n * lead to degraded error reporting, though.\n */\nclass Token {\n // don't expand the token\n // used in \\noexpand\n constructor(text, // the text of this token\n loc) {\n this.text = void 0;\n this.loc = void 0;\n this.noexpand = void 0;\n this.treatAsRelax = void 0;\n this.text = text;\n this.loc = loc;\n }\n /**\n * Given a pair of tokens (this and endToken), compute a `Token` encompassing\n * the whole input range enclosed by these two.\n */\n\n\n range(endToken, // last token of the range, inclusive\n text // the text of the newly constructed token\n ) {\n return new Token(text, SourceLocation.range(this, endToken));\n }\n\n}\n\n/**\n * This is the ParseError class, which is the main error thrown by KaTeX\n * functions when something has gone wrong. This is used to distinguish internal\n * errors from errors in the expression that the user provided.\n *\n * If possible, a caller should provide a Token or ParseNode with information\n * about where in the source string the problem occurred.\n */\nclass ParseError {\n // Error start position based on passed-in Token or ParseNode.\n // Length of affected text based on passed-in Token or ParseNode.\n // The underlying error message without any context added.\n constructor(message, // The error message\n token // An object providing position information\n ) {\n this.name = void 0;\n this.position = void 0;\n this.length = void 0;\n this.rawMessage = void 0;\n var error = \"KaTeX parse error: \" + message;\n var start;\n var end;\n var loc = token && token.loc;\n\n if (loc && loc.start <= loc.end) {\n // If we have the input and a position, make the error a bit fancier\n // Get the input\n var input = loc.lexer.input; // Prepend some information\n\n start = loc.start;\n end = loc.end;\n\n if (start === input.length) {\n error += \" at end of input: \";\n } else {\n error += \" at position \" + (start + 1) + \": \";\n } // Underline token in question using combining underscores\n\n\n var underlined = input.slice(start, end).replace(/[^]/g, \"$&\\u0332\"); // Extract some context from the input and add it to the error\n\n var left;\n\n if (start > 15) {\n left = \"\u2026\" + input.slice(start - 15, start);\n } else {\n left = input.slice(0, start);\n }\n\n var right;\n\n if (end + 15 < input.length) {\n right = input.slice(end, end + 15) + \"\u2026\";\n } else {\n right = input.slice(end);\n }\n\n error += left + underlined + right;\n } // Some hackery to make ParseError a prototype of Error\n // See http://stackoverflow.com/a/8460753\n // $FlowFixMe\n\n\n var self = new Error(error);\n self.name = \"ParseError\"; // $FlowFixMe\n\n self.__proto__ = ParseError.prototype;\n self.position = start;\n\n if (start != null && end != null) {\n self.length = end - start;\n }\n\n self.rawMessage = message;\n return self;\n }\n\n} // $FlowFixMe More hackery\n\n\nParseError.prototype.__proto__ = Error.prototype;\n\n/**\n * This file contains a list of utility functions which are useful in other\n * files.\n */\n\n/**\n * Return whether an element is contained in a list\n */\nvar contains = function contains(list, elem) {\n return list.indexOf(elem) !== -1;\n};\n/**\n * Provide a default value if a setting is undefined\n * NOTE: Couldn't use `T` as the output type due to facebook/flow#5022.\n */\n\n\nvar deflt = function deflt(setting, defaultIfUndefined) {\n return setting === undefined ? defaultIfUndefined : setting;\n}; // hyphenate and escape adapted from Facebook's React under Apache 2 license\n\n\nvar uppercase = /([A-Z])/g;\n\nvar hyphenate = function hyphenate(str) {\n return str.replace(uppercase, \"-$1\").toLowerCase();\n};\n\nvar ESCAPE_LOOKUP = {\n \"&\": \"&\",\n \">\": \">\",\n \"<\": \"<\",\n \"\\\"\": \""\",\n \"'\": \"'\"\n};\nvar ESCAPE_REGEX = /[&><\"']/g;\n/**\n * Escapes text to prevent scripting attacks.\n */\n\nfunction escape(text) {\n return String(text).replace(ESCAPE_REGEX, match => ESCAPE_LOOKUP[match]);\n}\n/**\n * Sometimes we want to pull out the innermost element of a group. In most\n * cases, this will just be the group itself, but when ordgroups and colors have\n * a single element, we want to pull that out.\n */\n\n\nvar getBaseElem = function getBaseElem(group) {\n if (group.type === \"ordgroup\") {\n if (group.body.length === 1) {\n return getBaseElem(group.body[0]);\n } else {\n return group;\n }\n } else if (group.type === \"color\") {\n if (group.body.length === 1) {\n return getBaseElem(group.body[0]);\n } else {\n return group;\n }\n } else if (group.type === \"font\") {\n return getBaseElem(group.body);\n } else {\n return group;\n }\n};\n/**\n * TeXbook algorithms often reference \"character boxes\", which are simply groups\n * with a single character in them. To decide if something is a character box,\n * we find its innermost group, and see if it is a single character.\n */\n\n\nvar isCharacterBox = function isCharacterBox(group) {\n var baseElem = getBaseElem(group); // These are all they types of groups which hold single characters\n\n return baseElem.type === \"mathord\" || baseElem.type === \"textord\" || baseElem.type === \"atom\";\n};\n\nvar assert = function assert(value) {\n if (!value) {\n throw new Error('Expected non-null, but got ' + String(value));\n }\n\n return value;\n};\n/**\n * Return the protocol of a URL, or \"_relative\" if the URL does not specify a\n * protocol (and thus is relative), or `null` if URL has invalid protocol\n * (so should be outright rejected).\n */\n\nvar protocolFromUrl = function protocolFromUrl(url) {\n // Check for possible leading protocol.\n // https://url.spec.whatwg.org/#url-parsing strips leading whitespace\n // (U+20) or C0 control (U+00-U+1F) characters.\n // eslint-disable-next-line no-control-regex\n var protocol = /^[\\x00-\\x20]*([^\\\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(url);\n\n if (!protocol) {\n return \"_relative\";\n } // Reject weird colons\n\n\n if (protocol[2] !== \":\") {\n return null;\n } // Reject invalid characters in scheme according to\n // https://datatracker.ietf.org/doc/html/rfc3986#section-3.1\n\n\n if (!/^[a-zA-Z][a-zA-Z0-9+\\-.]*$/.test(protocol[1])) {\n return null;\n } // Lowercase the protocol\n\n\n return protocol[1].toLowerCase();\n};\nvar utils = {\n contains,\n deflt,\n escape,\n hyphenate,\n getBaseElem,\n isCharacterBox,\n protocolFromUrl\n};\n\n/* eslint no-console:0 */\n// TODO: automatically generate documentation\n// TODO: check all properties on Settings exist\n// TODO: check the type of a property on Settings matches\nvar SETTINGS_SCHEMA = {\n displayMode: {\n type: \"boolean\",\n description: \"Render math in display mode, which puts the math in \" + \"display style (so \\\\int and \\\\sum are large, for example), and \" + \"centers the math on the page on its own line.\",\n cli: \"-d, --display-mode\"\n },\n output: {\n type: {\n enum: [\"htmlAndMathml\", \"html\", \"mathml\"]\n },\n description: \"Determines the markup language of the output.\",\n cli: \"-F, --format \"\n },\n leqno: {\n type: \"boolean\",\n description: \"Render display math in leqno style (left-justified tags).\"\n },\n fleqn: {\n type: \"boolean\",\n description: \"Render display math flush left.\"\n },\n throwOnError: {\n type: \"boolean\",\n default: true,\n cli: \"-t, --no-throw-on-error\",\n cliDescription: \"Render errors (in the color given by --error-color) ins\" + \"tead of throwing a ParseError exception when encountering an error.\"\n },\n errorColor: {\n type: \"string\",\n default: \"#cc0000\",\n cli: \"-c, --error-color \",\n cliDescription: \"A color string given in the format 'rgb' or 'rrggbb' \" + \"(no #). This option determines the color of errors rendered by the \" + \"-t option.\",\n cliProcessor: color => \"#\" + color\n },\n macros: {\n type: \"object\",\n cli: \"-m, --macro \",\n cliDescription: \"Define custom macro of the form '\\\\foo:expansion' (use \" + \"multiple -m arguments for multiple macros).\",\n cliDefault: [],\n cliProcessor: (def, defs) => {\n defs.push(def);\n return defs;\n }\n },\n minRuleThickness: {\n type: \"number\",\n description: \"Specifies a minimum thickness, in ems, for fraction lines,\" + \" `\\\\sqrt` top lines, `{array}` vertical lines, `\\\\hline`, \" + \"`\\\\hdashline`, `\\\\underline`, `\\\\overline`, and the borders of \" + \"`\\\\fbox`, `\\\\boxed`, and `\\\\fcolorbox`.\",\n processor: t => Math.max(0, t),\n cli: \"--min-rule-thickness \",\n cliProcessor: parseFloat\n },\n colorIsTextColor: {\n type: \"boolean\",\n description: \"Makes \\\\color behave like LaTeX's 2-argument \\\\textcolor, \" + \"instead of LaTeX's one-argument \\\\color mode change.\",\n cli: \"-b, --color-is-text-color\"\n },\n strict: {\n type: [{\n enum: [\"warn\", \"ignore\", \"error\"]\n }, \"boolean\", \"function\"],\n description: \"Turn on strict / LaTeX faithfulness mode, which throws an \" + \"error if the input uses features that are not supported by LaTeX.\",\n cli: \"-S, --strict\",\n cliDefault: false\n },\n trust: {\n type: [\"boolean\", \"function\"],\n description: \"Trust the input, enabling all HTML features such as \\\\url.\",\n cli: \"-T, --trust\"\n },\n maxSize: {\n type: \"number\",\n default: Infinity,\n description: \"If non-zero, all user-specified sizes, e.g. in \" + \"\\\\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, \" + \"elements and spaces can be arbitrarily large\",\n processor: s => Math.max(0, s),\n cli: \"-s, --max-size \",\n cliProcessor: parseInt\n },\n maxExpand: {\n type: \"number\",\n default: 1000,\n description: \"Limit the number of macro expansions to the specified \" + \"number, to prevent e.g. infinite macro loops. If set to Infinity, \" + \"the macro expander will try to fully expand as in LaTeX.\",\n processor: n => Math.max(0, n),\n cli: \"-e, --max-expand \",\n cliProcessor: n => n === \"Infinity\" ? Infinity : parseInt(n)\n },\n globalGroup: {\n type: \"boolean\",\n cli: false\n }\n};\n\nfunction getDefaultValue(schema) {\n if (schema.default) {\n return schema.default;\n }\n\n var type = schema.type;\n var defaultType = Array.isArray(type) ? type[0] : type;\n\n if (typeof defaultType !== 'string') {\n return defaultType.enum[0];\n }\n\n switch (defaultType) {\n case 'boolean':\n return false;\n\n case 'string':\n return '';\n\n case 'number':\n return 0;\n\n case 'object':\n return {};\n }\n}\n/**\n * The main Settings object\n *\n * The current options stored are:\n * - displayMode: Whether the expression should be typeset as inline math\n * (false, the default), meaning that the math starts in\n * \\textstyle and is placed in an inline-block); or as display\n * math (true), meaning that the math starts in \\displaystyle\n * and is placed in a block with vertical margin.\n */\n\n\nclass Settings {\n constructor(options) {\n this.displayMode = void 0;\n this.output = void 0;\n this.leqno = void 0;\n this.fleqn = void 0;\n this.throwOnError = void 0;\n this.errorColor = void 0;\n this.macros = void 0;\n this.minRuleThickness = void 0;\n this.colorIsTextColor = void 0;\n this.strict = void 0;\n this.trust = void 0;\n this.maxSize = void 0;\n this.maxExpand = void 0;\n this.globalGroup = void 0;\n // allow null options\n options = options || {};\n\n for (var prop in SETTINGS_SCHEMA) {\n if (SETTINGS_SCHEMA.hasOwnProperty(prop)) {\n // $FlowFixMe\n var schema = SETTINGS_SCHEMA[prop]; // TODO: validate options\n // $FlowFixMe\n\n this[prop] = options[prop] !== undefined ? schema.processor ? schema.processor(options[prop]) : options[prop] : getDefaultValue(schema);\n }\n }\n }\n /**\n * Report nonstrict (non-LaTeX-compatible) input.\n * Can safely not be called if `this.strict` is false in JavaScript.\n */\n\n\n reportNonstrict(errorCode, errorMsg, token) {\n var strict = this.strict;\n\n if (typeof strict === \"function\") {\n // Allow return value of strict function to be boolean or string\n // (or null/undefined, meaning no further processing).\n strict = strict(errorCode, errorMsg, token);\n }\n\n if (!strict || strict === \"ignore\") {\n return;\n } else if (strict === true || strict === \"error\") {\n throw new ParseError(\"LaTeX-incompatible input and strict mode is set to 'error': \" + (errorMsg + \" [\" + errorCode + \"]\"), token);\n } else if (strict === \"warn\") {\n typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to 'warn': \" + (errorMsg + \" [\" + errorCode + \"]\"));\n } else {\n // won't happen in type-safe code\n typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to \" + (\"unrecognized '\" + strict + \"': \" + errorMsg + \" [\" + errorCode + \"]\"));\n }\n }\n /**\n * Check whether to apply strict (LaTeX-adhering) behavior for unusual\n * input (like `\\\\`). Unlike `nonstrict`, will not throw an error;\n * instead, \"error\" translates to a return value of `true`, while \"ignore\"\n * translates to a return value of `false`. May still print a warning:\n * \"warn\" prints a warning and returns `false`.\n * This is for the second category of `errorCode`s listed in the README.\n */\n\n\n useStrictBehavior(errorCode, errorMsg, token) {\n var strict = this.strict;\n\n if (typeof strict === \"function\") {\n // Allow return value of strict function to be boolean or string\n // (or null/undefined, meaning no further processing).\n // But catch any exceptions thrown by function, treating them\n // like \"error\".\n try {\n strict = strict(errorCode, errorMsg, token);\n } catch (error) {\n strict = \"error\";\n }\n }\n\n if (!strict || strict === \"ignore\") {\n return false;\n } else if (strict === true || strict === \"error\") {\n return true;\n } else if (strict === \"warn\") {\n typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to 'warn': \" + (errorMsg + \" [\" + errorCode + \"]\"));\n return false;\n } else {\n // won't happen in type-safe code\n typeof console !== \"undefined\" && console.warn(\"LaTeX-incompatible input and strict mode is set to \" + (\"unrecognized '\" + strict + \"': \" + errorMsg + \" [\" + errorCode + \"]\"));\n return false;\n }\n }\n /**\n * Check whether to test potentially dangerous input, and return\n * `true` (trusted) or `false` (untrusted). The sole argument `context`\n * should be an object with `command` field specifying the relevant LaTeX\n * command (as a string starting with `\\`), and any other arguments, etc.\n * If `context` has a `url` field, a `protocol` field will automatically\n * get added by this function (changing the specified object).\n */\n\n\n isTrusted(context) {\n if (context.url && !context.protocol) {\n var protocol = utils.protocolFromUrl(context.url);\n\n if (protocol == null) {\n return false;\n }\n\n context.protocol = protocol;\n }\n\n var trust = typeof this.trust === \"function\" ? this.trust(context) : this.trust;\n return Boolean(trust);\n }\n\n}\n\n/**\n * This file contains information and classes for the various kinds of styles\n * used in TeX. It provides a generic `Style` class, which holds information\n * about a specific style. It then provides instances of all the different kinds\n * of styles possible, and provides functions to move between them and get\n * information about them.\n */\n\n/**\n * The main style class. Contains a unique id for the style, a size (which is\n * the same for cramped and uncramped version of a style), and a cramped flag.\n */\nclass Style {\n constructor(id, size, cramped) {\n this.id = void 0;\n this.size = void 0;\n this.cramped = void 0;\n this.id = id;\n this.size = size;\n this.cramped = cramped;\n }\n /**\n * Get the style of a superscript given a base in the current style.\n */\n\n\n sup() {\n return styles[sup[this.id]];\n }\n /**\n * Get the style of a subscript given a base in the current style.\n */\n\n\n sub() {\n return styles[sub[this.id]];\n }\n /**\n * Get the style of a fraction numerator given the fraction in the current\n * style.\n */\n\n\n fracNum() {\n return styles[fracNum[this.id]];\n }\n /**\n * Get the style of a fraction denominator given the fraction in the current\n * style.\n */\n\n\n fracDen() {\n return styles[fracDen[this.id]];\n }\n /**\n * Get the cramped version of a style (in particular, cramping a cramped style\n * doesn't change the style).\n */\n\n\n cramp() {\n return styles[cramp[this.id]];\n }\n /**\n * Get a text or display version of this style.\n */\n\n\n text() {\n return styles[text$1[this.id]];\n }\n /**\n * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle)\n */\n\n\n isTight() {\n return this.size >= 2;\n }\n\n} // Export an interface for type checking, but don't expose the implementation.\n// This way, no more styles can be generated.\n\n\n// IDs of the different styles\nvar D = 0;\nvar Dc = 1;\nvar T = 2;\nvar Tc = 3;\nvar S = 4;\nvar Sc = 5;\nvar SS = 6;\nvar SSc = 7; // Instances of the different styles\n\nvar styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; // Lookup tables for switching from one style to another\n\nvar sup = [S, Sc, S, Sc, SS, SSc, SS, SSc];\nvar sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc];\nvar fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc];\nvar fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc];\nvar cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc];\nvar text$1 = [D, Dc, T, Tc, T, Tc, T, Tc]; // We only export some of the styles.\n\nvar Style$1 = {\n DISPLAY: styles[D],\n TEXT: styles[T],\n SCRIPT: styles[S],\n SCRIPTSCRIPT: styles[SS]\n};\n\n/*\n * This file defines the Unicode scripts and script families that we\n * support. To add new scripts or families, just add a new entry to the\n * scriptData array below. Adding scripts to the scriptData array allows\n * characters from that script to appear in \\text{} environments.\n */\n\n/**\n * Each script or script family has a name and an array of blocks.\n * Each block is an array of two numbers which specify the start and\n * end points (inclusive) of a block of Unicode codepoints.\n */\n\n/**\n * Unicode block data for the families of scripts we support in \\text{}.\n * Scripts only need to appear here if they do not have font metrics.\n */\nvar scriptData = [{\n // Latin characters beyond the Latin-1 characters we have metrics for.\n // Needed for Czech, Hungarian and Turkish text, for example.\n name: 'latin',\n blocks: [[0x0100, 0x024f], // Latin Extended-A and Latin Extended-B\n [0x0300, 0x036f] // Combining Diacritical marks\n ]\n}, {\n // The Cyrillic script used by Russian and related languages.\n // A Cyrillic subset used to be supported as explicitly defined\n // symbols in symbols.js\n name: 'cyrillic',\n blocks: [[0x0400, 0x04ff]]\n}, {\n // Armenian\n name: 'armenian',\n blocks: [[0x0530, 0x058F]]\n}, {\n // The Brahmic scripts of South and Southeast Asia\n // Devanagari (0900\u2013097F)\n // Bengali (0980\u201309FF)\n // Gurmukhi (0A00\u20130A7F)\n // Gujarati (0A80\u20130AFF)\n // Oriya (0B00\u20130B7F)\n // Tamil (0B80\u20130BFF)\n // Telugu (0C00\u20130C7F)\n // Kannada (0C80\u20130CFF)\n // Malayalam (0D00\u20130D7F)\n // Sinhala (0D80\u20130DFF)\n // Thai (0E00\u20130E7F)\n // Lao (0E80\u20130EFF)\n // Tibetan (0F00\u20130FFF)\n // Myanmar (1000\u2013109F)\n name: 'brahmic',\n blocks: [[0x0900, 0x109F]]\n}, {\n name: 'georgian',\n blocks: [[0x10A0, 0x10ff]]\n}, {\n // Chinese and Japanese.\n // The \"k\" in cjk is for Korean, but we've separated Korean out\n name: \"cjk\",\n blocks: [[0x3000, 0x30FF], // CJK symbols and punctuation, Hiragana, Katakana\n [0x4E00, 0x9FAF], // CJK ideograms\n [0xFF00, 0xFF60] // Fullwidth punctuation\n // TODO: add halfwidth Katakana and Romanji glyphs\n ]\n}, {\n // Korean\n name: 'hangul',\n blocks: [[0xAC00, 0xD7AF]]\n}];\n/**\n * Given a codepoint, return the name of the script or script family\n * it is from, or null if it is not part of a known block\n */\n\nfunction scriptFromCodepoint(codepoint) {\n for (var i = 0; i < scriptData.length; i++) {\n var script = scriptData[i];\n\n for (var _i = 0; _i < script.blocks.length; _i++) {\n var block = script.blocks[_i];\n\n if (codepoint >= block[0] && codepoint <= block[1]) {\n return script.name;\n }\n }\n }\n\n return null;\n}\n/**\n * A flattened version of all the supported blocks in a single array.\n * This is an optimization to make supportedCodepoint() fast.\n */\n\nvar allBlocks = [];\nscriptData.forEach(s => s.blocks.forEach(b => allBlocks.push(...b)));\n/**\n * Given a codepoint, return true if it falls within one of the\n * scripts or script families defined above and false otherwise.\n *\n * Micro benchmarks shows that this is faster than\n * /[\\u3000-\\u30FF\\u4E00-\\u9FAF\\uFF00-\\uFF60\\uAC00-\\uD7AF\\u0900-\\u109F]/.test()\n * in Firefox, Chrome and Node.\n */\n\nfunction supportedCodepoint(codepoint) {\n for (var i = 0; i < allBlocks.length; i += 2) {\n if (codepoint >= allBlocks[i] && codepoint <= allBlocks[i + 1]) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * This file provides support to domTree.js and delimiter.js.\n * It's a storehouse of path geometry for SVG images.\n */\n// In all paths below, the viewBox-to-em scale is 1000:1.\nvar hLinePad = 80; // padding above a sqrt vinculum. Prevents image cropping.\n// The vinculum of a \\sqrt can be made thicker by a KaTeX rendering option.\n// Think of variable extraVinculum as two detours in the SVG path.\n// The detour begins at the lower left of the area labeled extraVinculum below.\n// The detour proceeds one extraVinculum distance up and slightly to the right,\n// displacing the radiused corner between surd and vinculum. The radius is\n// traversed as usual, then the detour resumes. It goes right, to the end of\n// the very long vinculum, then down one extraVinculum distance,\n// after which it resumes regular path geometry for the radical.\n\n/* vinculum\n /\n /\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2190extraVinculum\n / \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u21900.04em (40 unit) std vinculum thickness\n / /\n / /\n / /\\\n / / surd\n*/\n\nvar sqrtMain = function sqrtMain(extraVinculum, hLinePad) {\n // sqrtMain path geometry is from glyph U221A in the font KaTeX Main\n return \"M95,\" + (622 + extraVinculum + hLinePad) + \"\\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\\nc69,-144,104.5,-217.7,106.5,-221\\nl\" + extraVinculum / 2.075 + \" -\" + extraVinculum + \"\\nc5.3,-9.3,12,-14,20,-14\\nH400000v\" + (40 + extraVinculum) + \"H845.2724\\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\\nM\" + (834 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\n\nvar sqrtSize1 = function sqrtSize1(extraVinculum, hLinePad) {\n // size1 is from glyph U221A in the font KaTeX_Size1-Regular\n return \"M263,\" + (601 + extraVinculum + hLinePad) + \"c0.7,0,18,39.7,52,119\\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\\nc340,-704.7,510.7,-1060.3,512,-1067\\nl\" + extraVinculum / 2.084 + \" -\" + extraVinculum + \"\\nc4.7,-7.3,11,-11,19,-11\\nH40000v\" + (40 + extraVinculum) + \"H1012.3\\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\\nM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\n\nvar sqrtSize2 = function sqrtSize2(extraVinculum, hLinePad) {\n // size2 is from glyph U221A in the font KaTeX_Size2-Regular\n return \"M983 \" + (10 + extraVinculum + hLinePad) + \"\\nl\" + extraVinculum / 3.13 + \" -\" + extraVinculum + \"\\nc4,-6.7,10,-10,18,-10 H400000v\" + (40 + extraVinculum) + \"\\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\\nM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\n\nvar sqrtSize3 = function sqrtSize3(extraVinculum, hLinePad) {\n // size3 is from glyph U221A in the font KaTeX_Size3-Regular\n return \"M424,\" + (2398 + extraVinculum + hLinePad) + \"\\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\\nl\" + extraVinculum / 4.223 + \" -\" + extraVinculum + \"c4,-6.7,10,-10,18,-10 H400000\\nv\" + (40 + extraVinculum) + \"H1014.6\\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\\nc-2,6,-10,9,-24,9\\nc-8,0,-12,-0.7,-12,-2z M\" + (1001 + extraVinculum) + \" \" + hLinePad + \"\\nh400000v\" + (40 + extraVinculum) + \"h-400000z\";\n};\n\nvar sqrtSize4 = function sqrtSize4(extraVinculum, hLinePad) {\n // size4 is from glyph U221A in the font KaTeX_Size4-Regular\n return \"M473,\" + (2713 + extraVinculum + hLinePad) + \"\\nc339.3,-1799.3,509.3,-2700,510,-2702 l\" + extraVinculum / 5.298 + \" -\" + extraVinculum + \"\\nc3.3,-7.3,9.3,-11,18,-11 H400000v\" + (40 + extraVinculum) + \"H1017.7\\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\\n606zM\" + (1001 + extraVinculum) + \" \" + hLinePad + \"h400000v\" + (40 + extraVinculum) + \"H1017.7z\";\n};\n\nvar phasePath = function phasePath(y) {\n var x = y / 2; // x coordinate at top of angle\n\n return \"M400000 \" + y + \" H0 L\" + x + \" 0 l65 45 L145 \" + (y - 80) + \" H400000z\";\n};\n\nvar sqrtTall = function sqrtTall(extraVinculum, hLinePad, viewBoxHeight) {\n // sqrtTall is from glyph U23B7 in the font KaTeX_Size4-Regular\n // One path edge has a variable length. It runs vertically from the vinculum\n // to a point near (14 units) the bottom of the surd. The vinculum\n // is normally 40 units thick. So the length of the line in question is:\n var vertSegment = viewBoxHeight - 54 - hLinePad - extraVinculum;\n return \"M702 \" + (extraVinculum + hLinePad) + \"H400000\" + (40 + extraVinculum) + \"\\nH742v\" + vertSegment + \"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\\n219 661 l218 661zM702 \" + hLinePad + \"H400000v\" + (40 + extraVinculum) + \"H742z\";\n};\n\nvar sqrtPath = function sqrtPath(size, extraVinculum, viewBoxHeight) {\n extraVinculum = 1000 * extraVinculum; // Convert from document ems to viewBox.\n\n var path = \"\";\n\n switch (size) {\n case \"sqrtMain\":\n path = sqrtMain(extraVinculum, hLinePad);\n break;\n\n case \"sqrtSize1\":\n path = sqrtSize1(extraVinculum, hLinePad);\n break;\n\n case \"sqrtSize2\":\n path = sqrtSize2(extraVinculum, hLinePad);\n break;\n\n case \"sqrtSize3\":\n path = sqrtSize3(extraVinculum, hLinePad);\n break;\n\n case \"sqrtSize4\":\n path = sqrtSize4(extraVinculum, hLinePad);\n break;\n\n case \"sqrtTall\":\n path = sqrtTall(extraVinculum, hLinePad, viewBoxHeight);\n }\n\n return path;\n};\nvar innerPath = function innerPath(name, height) {\n // The inner part of stretchy tall delimiters\n switch (name) {\n case \"\\u239c\":\n return \"M291 0 H417 V\" + height + \" H291z M291 0 H417 V\" + height + \" H291z\";\n\n case \"\\u2223\":\n return \"M145 0 H188 V\" + height + \" H145z M145 0 H188 V\" + height + \" H145z\";\n\n case \"\\u2225\":\n return \"M145 0 H188 V\" + height + \" H145z M145 0 H188 V\" + height + \" H145z\" + (\"M367 0 H410 V\" + height + \" H367z M367 0 H410 V\" + height + \" H367z\");\n\n case \"\\u239f\":\n return \"M457 0 H583 V\" + height + \" H457z M457 0 H583 V\" + height + \" H457z\";\n\n case \"\\u23a2\":\n return \"M319 0 H403 V\" + height + \" H319z M319 0 H403 V\" + height + \" H319z\";\n\n case \"\\u23a5\":\n return \"M263 0 H347 V\" + height + \" H263z M263 0 H347 V\" + height + \" H263z\";\n\n case \"\\u23aa\":\n return \"M384 0 H504 V\" + height + \" H384z M384 0 H504 V\" + height + \" H384z\";\n\n case \"\\u23d0\":\n return \"M312 0 H355 V\" + height + \" H312z M312 0 H355 V\" + height + \" H312z\";\n\n case \"\\u2016\":\n return \"M257 0 H300 V\" + height + \" H257z M257 0 H300 V\" + height + \" H257z\" + (\"M478 0 H521 V\" + height + \" H478z M478 0 H521 V\" + height + \" H478z\");\n\n default:\n return \"\";\n }\n};\nvar path = {\n // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main\n doubleleftarrow: \"M262 157\\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\\nm8 0v40h399730v-40zm0 194v40h399730v-40z\",\n // doublerightarrow is from glyph U+21D2 in font KaTeX Main\n doublerightarrow: \"M399738 392l\\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z\",\n // leftarrow is from glyph U+2190 in font KaTeX Main\n leftarrow: \"M400000 241H110l3-3c68.7-52.7 113.7-120\\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\\n l-3-3h399890zM100 241v40h399900v-40z\",\n // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular\n leftbrace: \"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z\",\n leftbraceunder: \"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z\",\n // overgroup is from the MnSymbol package (public domain)\n leftgroup: \"M400000 80\\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\\n 435 0h399565z\",\n leftgroupunder: \"M400000 262\\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\\n 435 219h399565z\",\n // Harpoons are from glyph U+21BD in font KaTeX Main\n leftharpoon: \"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z\",\n leftharpoonplus: \"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\\nm0 0v40h400000v-40z\",\n leftharpoondown: \"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z\",\n leftharpoondownplus: \"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z\",\n // hook is from glyph U+21A9 in font KaTeX Main\n lefthook: \"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\\n 71.5 23h399859zM103 281v-40h399897v40z\",\n leftlinesegment: \"M40 281 V428 H0 V94 H40 V241 H400000 v40z\\nM40 281 V428 H0 V94 H40 V241 H400000 v40z\",\n leftmapsto: \"M40 281 V448H0V74H40V241H400000v40z\\nM40 281 V448H0V74H40V241H400000v40z\",\n // tofrom is from glyph U+21C4 in font KaTeX AMS Regular\n leftToFrom: \"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z\",\n longequal: \"M0 50 h400000 v40H0z m0 194h40000v40H0z\\nM0 50 h400000 v40H0z m0 194h40000v40H0z\",\n midbrace: \"M200428 334\\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z\",\n midbraceunder: \"M199572 214\\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z\",\n oiintSize1: \"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z\",\n oiintSize2: \"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\\nc0 110 84 276 504 276s502.4-166 502.4-276z\",\n oiiintSize1: \"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z\",\n oiiintSize2: \"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z\",\n rightarrow: \"M0 241v40h399891c-47.3 35.3-84 78-110 128\\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\n 151.7 139 205zm0 0v40h399900v-40z\",\n rightbrace: \"M400000 542l\\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z\",\n rightbraceunder: \"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z\",\n rightgroup: \"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\\n 3-1 3-3v-38c-76-158-257-219-435-219H0z\",\n rightgroupunder: \"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z\",\n rightharpoon: \"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\\n 69.2 92 94.5zm0 0v40h399900v-40z\",\n rightharpoonplus: \"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z\",\n rightharpoondown: \"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z\",\n rightharpoondownplus: \"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\\nm0-194v40h400000v-40zm0 0v40h400000v-40z\",\n righthook: \"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z\",\n rightlinesegment: \"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z\",\n rightToFrom: \"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z\",\n // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular\n twoheadleftarrow: \"M0 167c68 40\\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z\",\n twoheadrightarrow: \"M400000 167\\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z\",\n // tilde1 is a modified version of a glyph from the MnSymbol package\n tilde1: \"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\\n-68.267.847-113-73.952-191-73.952z\",\n // ditto tilde2, tilde3, & tilde4\n tilde2: \"M344 55.266c-142 0-300.638 81.316-311.5 86.418\\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z\",\n tilde3: \"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\\n -338 0-409-156.573-744-156.573z\",\n tilde4: \"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\\n -175.236-744-175.236z\",\n // vec is from glyph U+20D7 in font KaTeX Main\n vec: \"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\\nc-16-25.333-24-45-24-59z\",\n // widehat1 is a modified version of a glyph from the MnSymbol package\n widehat1: \"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z\",\n // ditto widehat2, widehat3, & widehat4\n widehat2: \"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n widehat3: \"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n widehat4: \"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z\",\n // widecheck paths are all inverted versions of widehat\n widecheck1: \"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z\",\n widecheck2: \"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n widecheck3: \"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n widecheck4: \"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z\",\n // The next ten paths support reaction arrows from the mhchem package.\n // Arrows for \\ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX\n // baraboveleftarrow is mostly from glyph U+2190 in font KaTeX Main\n baraboveleftarrow: \"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z\",\n // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main\n rightarrowabovebar: \"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z\",\n // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end.\n // Ref from mhchem.sty: \\rlap{\\raisebox{-.22ex}{$\\kern0.5em\n baraboveshortleftharpoon: \"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z\",\n rightharpoonaboveshortbar: \"M0,241 l0,40c399126,0,399993,0,399993,0\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z\",\n shortbaraboveleftharpoon: \"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z\",\n shortrightharpoonabovebar: \"M53,241l0,40c398570,0,399437,0,399437,0\\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z\"\n};\nvar tallDelim = function tallDelim(label, midHeight) {\n switch (label) {\n case \"lbrack\":\n return \"M403 1759 V84 H666 V0 H319 V1759 v\" + midHeight + \" v1759 h347 v-84\\nH403z M403 1759 V0 H319 V1759 v\" + midHeight + \" v1759 h84z\";\n\n case \"rbrack\":\n return \"M347 1759 V0 H0 V84 H263 V1759 v\" + midHeight + \" v1759 H0 v84 H347z\\nM347 1759 V0 H263 V1759 v\" + midHeight + \" v1759 h84z\";\n\n case \"vert\":\n return \"M145 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v\" + midHeight + \" v585 h43z\";\n\n case \"doublevert\":\n return \"M145 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v\" + midHeight + \" v585 h43z\\nM367 15 v585 v\" + midHeight + \" v585 c2.667,10,9.667,15,21,15\\nc10,0,16.667,-5,20,-15 v-585 v\" + -midHeight + \" v-585 c-2.667,-10,-9.667,-15,-21,-15\\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v\" + midHeight + \" v585 h43z\";\n\n case \"lfloor\":\n return \"M319 602 V0 H403 V602 v\" + midHeight + \" v1715 h263 v84 H319z\\nMM319 602 V0 H403 V602 v\" + midHeight + \" v1715 H319z\";\n\n case \"rfloor\":\n return \"M319 602 V0 H403 V602 v\" + midHeight + \" v1799 H0 v-84 H319z\\nMM319 602 V0 H403 V602 v\" + midHeight + \" v1715 H319z\";\n\n case \"lceil\":\n return \"M403 1759 V84 H666 V0 H319 V1759 v\" + midHeight + \" v602 h84z\\nM403 1759 V0 H319 V1759 v\" + midHeight + \" v602 h84z\";\n\n case \"rceil\":\n return \"M347 1759 V0 H0 V84 H263 V1759 v\" + midHeight + \" v602 h84z\\nM347 1759 V0 h-84 V1759 v\" + midHeight + \" v602 h84z\";\n\n case \"lparen\":\n return \"M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\\n-36,557 l0,\" + (midHeight + 84) + \"c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\\nl0,-\" + (midHeight + 92) + \"c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z\";\n\n case \"rparen\":\n return \"M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,\" + (midHeight + 9) + \"\\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\\nl0,-\" + (midHeight + 144) + \"c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z\";\n\n default:\n // We should not ever get here.\n throw new Error(\"Unknown stretchy delimiter.\");\n }\n};\n\n/**\n * This node represents a document fragment, which contains elements, but when\n * placed into the DOM doesn't have any representation itself. It only contains\n * children and doesn't have any DOM node properties.\n */\nclass DocumentFragment {\n // HtmlDomNode\n // Never used; needed for satisfying interface.\n constructor(children) {\n this.children = void 0;\n this.classes = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.maxFontSize = void 0;\n this.style = void 0;\n this.children = children;\n this.classes = [];\n this.height = 0;\n this.depth = 0;\n this.maxFontSize = 0;\n this.style = {};\n }\n\n hasClass(className) {\n return utils.contains(this.classes, className);\n }\n /** Convert the fragment into a node. */\n\n\n toNode() {\n var frag = document.createDocumentFragment();\n\n for (var i = 0; i < this.children.length; i++) {\n frag.appendChild(this.children[i].toNode());\n }\n\n return frag;\n }\n /** Convert the fragment into HTML markup. */\n\n\n toMarkup() {\n var markup = \"\"; // Simply concatenate the markup for the children together.\n\n for (var i = 0; i < this.children.length; i++) {\n markup += this.children[i].toMarkup();\n }\n\n return markup;\n }\n /**\n * Converts the math node into a string, similar to innerText. Applies to\n * MathDomNode's only.\n */\n\n\n toText() {\n // To avoid this, we would subclass documentFragment separately for\n // MathML, but polyfills for subclassing is expensive per PR 1469.\n // $FlowFixMe: Only works for ChildType = MathDomNode.\n var toText = child => child.toText();\n\n return this.children.map(toText).join(\"\");\n }\n\n}\n\n// This file is GENERATED by buildMetrics.sh. DO NOT MODIFY.\nvar fontMetricsData = {\n \"AMS-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"65\": [0, 0.68889, 0, 0, 0.72222],\n \"66\": [0, 0.68889, 0, 0, 0.66667],\n \"67\": [0, 0.68889, 0, 0, 0.72222],\n \"68\": [0, 0.68889, 0, 0, 0.72222],\n \"69\": [0, 0.68889, 0, 0, 0.66667],\n \"70\": [0, 0.68889, 0, 0, 0.61111],\n \"71\": [0, 0.68889, 0, 0, 0.77778],\n \"72\": [0, 0.68889, 0, 0, 0.77778],\n \"73\": [0, 0.68889, 0, 0, 0.38889],\n \"74\": [0.16667, 0.68889, 0, 0, 0.5],\n \"75\": [0, 0.68889, 0, 0, 0.77778],\n \"76\": [0, 0.68889, 0, 0, 0.66667],\n \"77\": [0, 0.68889, 0, 0, 0.94445],\n \"78\": [0, 0.68889, 0, 0, 0.72222],\n \"79\": [0.16667, 0.68889, 0, 0, 0.77778],\n \"80\": [0, 0.68889, 0, 0, 0.61111],\n \"81\": [0.16667, 0.68889, 0, 0, 0.77778],\n \"82\": [0, 0.68889, 0, 0, 0.72222],\n \"83\": [0, 0.68889, 0, 0, 0.55556],\n \"84\": [0, 0.68889, 0, 0, 0.66667],\n \"85\": [0, 0.68889, 0, 0, 0.72222],\n \"86\": [0, 0.68889, 0, 0, 0.72222],\n \"87\": [0, 0.68889, 0, 0, 1.0],\n \"88\": [0, 0.68889, 0, 0, 0.72222],\n \"89\": [0, 0.68889, 0, 0, 0.72222],\n \"90\": [0, 0.68889, 0, 0, 0.66667],\n \"107\": [0, 0.68889, 0, 0, 0.55556],\n \"160\": [0, 0, 0, 0, 0.25],\n \"165\": [0, 0.675, 0.025, 0, 0.75],\n \"174\": [0.15559, 0.69224, 0, 0, 0.94666],\n \"240\": [0, 0.68889, 0, 0, 0.55556],\n \"295\": [0, 0.68889, 0, 0, 0.54028],\n \"710\": [0, 0.825, 0, 0, 2.33334],\n \"732\": [0, 0.9, 0, 0, 2.33334],\n \"770\": [0, 0.825, 0, 0, 2.33334],\n \"771\": [0, 0.9, 0, 0, 2.33334],\n \"989\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"1008\": [0, 0.43056, 0.04028, 0, 0.66667],\n \"8245\": [0, 0.54986, 0, 0, 0.275],\n \"8463\": [0, 0.68889, 0, 0, 0.54028],\n \"8487\": [0, 0.68889, 0, 0, 0.72222],\n \"8498\": [0, 0.68889, 0, 0, 0.55556],\n \"8502\": [0, 0.68889, 0, 0, 0.66667],\n \"8503\": [0, 0.68889, 0, 0, 0.44445],\n \"8504\": [0, 0.68889, 0, 0, 0.66667],\n \"8513\": [0, 0.68889, 0, 0, 0.63889],\n \"8592\": [-0.03598, 0.46402, 0, 0, 0.5],\n \"8594\": [-0.03598, 0.46402, 0, 0, 0.5],\n \"8602\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8603\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8606\": [0.01354, 0.52239, 0, 0, 1.0],\n \"8608\": [0.01354, 0.52239, 0, 0, 1.0],\n \"8610\": [0.01354, 0.52239, 0, 0, 1.11111],\n \"8611\": [0.01354, 0.52239, 0, 0, 1.11111],\n \"8619\": [0, 0.54986, 0, 0, 1.0],\n \"8620\": [0, 0.54986, 0, 0, 1.0],\n \"8621\": [-0.13313, 0.37788, 0, 0, 1.38889],\n \"8622\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8624\": [0, 0.69224, 0, 0, 0.5],\n \"8625\": [0, 0.69224, 0, 0, 0.5],\n \"8630\": [0, 0.43056, 0, 0, 1.0],\n \"8631\": [0, 0.43056, 0, 0, 1.0],\n \"8634\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8635\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8638\": [0.19444, 0.69224, 0, 0, 0.41667],\n \"8639\": [0.19444, 0.69224, 0, 0, 0.41667],\n \"8642\": [0.19444, 0.69224, 0, 0, 0.41667],\n \"8643\": [0.19444, 0.69224, 0, 0, 0.41667],\n \"8644\": [0.1808, 0.675, 0, 0, 1.0],\n \"8646\": [0.1808, 0.675, 0, 0, 1.0],\n \"8647\": [0.1808, 0.675, 0, 0, 1.0],\n \"8648\": [0.19444, 0.69224, 0, 0, 0.83334],\n \"8649\": [0.1808, 0.675, 0, 0, 1.0],\n \"8650\": [0.19444, 0.69224, 0, 0, 0.83334],\n \"8651\": [0.01354, 0.52239, 0, 0, 1.0],\n \"8652\": [0.01354, 0.52239, 0, 0, 1.0],\n \"8653\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8654\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8655\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8666\": [0.13667, 0.63667, 0, 0, 1.0],\n \"8667\": [0.13667, 0.63667, 0, 0, 1.0],\n \"8669\": [-0.13313, 0.37788, 0, 0, 1.0],\n \"8672\": [-0.064, 0.437, 0, 0, 1.334],\n \"8674\": [-0.064, 0.437, 0, 0, 1.334],\n \"8705\": [0, 0.825, 0, 0, 0.5],\n \"8708\": [0, 0.68889, 0, 0, 0.55556],\n \"8709\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"8717\": [0, 0.43056, 0, 0, 0.42917],\n \"8722\": [-0.03598, 0.46402, 0, 0, 0.5],\n \"8724\": [0.08198, 0.69224, 0, 0, 0.77778],\n \"8726\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"8733\": [0, 0.69224, 0, 0, 0.77778],\n \"8736\": [0, 0.69224, 0, 0, 0.72222],\n \"8737\": [0, 0.69224, 0, 0, 0.72222],\n \"8738\": [0.03517, 0.52239, 0, 0, 0.72222],\n \"8739\": [0.08167, 0.58167, 0, 0, 0.22222],\n \"8740\": [0.25142, 0.74111, 0, 0, 0.27778],\n \"8741\": [0.08167, 0.58167, 0, 0, 0.38889],\n \"8742\": [0.25142, 0.74111, 0, 0, 0.5],\n \"8756\": [0, 0.69224, 0, 0, 0.66667],\n \"8757\": [0, 0.69224, 0, 0, 0.66667],\n \"8764\": [-0.13313, 0.36687, 0, 0, 0.77778],\n \"8765\": [-0.13313, 0.37788, 0, 0, 0.77778],\n \"8769\": [-0.13313, 0.36687, 0, 0, 0.77778],\n \"8770\": [-0.03625, 0.46375, 0, 0, 0.77778],\n \"8774\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8776\": [-0.01688, 0.48312, 0, 0, 0.77778],\n \"8778\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"8782\": [0.06062, 0.54986, 0, 0, 0.77778],\n \"8783\": [0.06062, 0.54986, 0, 0, 0.77778],\n \"8785\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8786\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8787\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8790\": [0, 0.69224, 0, 0, 0.77778],\n \"8791\": [0.22958, 0.72958, 0, 0, 0.77778],\n \"8796\": [0.08198, 0.91667, 0, 0, 0.77778],\n \"8806\": [0.25583, 0.75583, 0, 0, 0.77778],\n \"8807\": [0.25583, 0.75583, 0, 0, 0.77778],\n \"8808\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"8809\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"8812\": [0.25583, 0.75583, 0, 0, 0.5],\n \"8814\": [0.20576, 0.70576, 0, 0, 0.77778],\n \"8815\": [0.20576, 0.70576, 0, 0, 0.77778],\n \"8816\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8817\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8818\": [0.22958, 0.72958, 0, 0, 0.77778],\n \"8819\": [0.22958, 0.72958, 0, 0, 0.77778],\n \"8822\": [0.1808, 0.675, 0, 0, 0.77778],\n \"8823\": [0.1808, 0.675, 0, 0, 0.77778],\n \"8828\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"8829\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"8830\": [0.22958, 0.72958, 0, 0, 0.77778],\n \"8831\": [0.22958, 0.72958, 0, 0, 0.77778],\n \"8832\": [0.20576, 0.70576, 0, 0, 0.77778],\n \"8833\": [0.20576, 0.70576, 0, 0, 0.77778],\n \"8840\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8841\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8842\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8843\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8847\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"8848\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"8858\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8859\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8861\": [0.08198, 0.58198, 0, 0, 0.77778],\n \"8862\": [0, 0.675, 0, 0, 0.77778],\n \"8863\": [0, 0.675, 0, 0, 0.77778],\n \"8864\": [0, 0.675, 0, 0, 0.77778],\n \"8865\": [0, 0.675, 0, 0, 0.77778],\n \"8872\": [0, 0.69224, 0, 0, 0.61111],\n \"8873\": [0, 0.69224, 0, 0, 0.72222],\n \"8874\": [0, 0.69224, 0, 0, 0.88889],\n \"8876\": [0, 0.68889, 0, 0, 0.61111],\n \"8877\": [0, 0.68889, 0, 0, 0.61111],\n \"8878\": [0, 0.68889, 0, 0, 0.72222],\n \"8879\": [0, 0.68889, 0, 0, 0.72222],\n \"8882\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"8883\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"8884\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"8885\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"8888\": [0, 0.54986, 0, 0, 1.11111],\n \"8890\": [0.19444, 0.43056, 0, 0, 0.55556],\n \"8891\": [0.19444, 0.69224, 0, 0, 0.61111],\n \"8892\": [0.19444, 0.69224, 0, 0, 0.61111],\n \"8901\": [0, 0.54986, 0, 0, 0.27778],\n \"8903\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"8905\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"8906\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"8907\": [0, 0.69224, 0, 0, 0.77778],\n \"8908\": [0, 0.69224, 0, 0, 0.77778],\n \"8909\": [-0.03598, 0.46402, 0, 0, 0.77778],\n \"8910\": [0, 0.54986, 0, 0, 0.76042],\n \"8911\": [0, 0.54986, 0, 0, 0.76042],\n \"8912\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"8913\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"8914\": [0, 0.54986, 0, 0, 0.66667],\n \"8915\": [0, 0.54986, 0, 0, 0.66667],\n \"8916\": [0, 0.69224, 0, 0, 0.66667],\n \"8918\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"8919\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"8920\": [0.03517, 0.54986, 0, 0, 1.33334],\n \"8921\": [0.03517, 0.54986, 0, 0, 1.33334],\n \"8922\": [0.38569, 0.88569, 0, 0, 0.77778],\n \"8923\": [0.38569, 0.88569, 0, 0, 0.77778],\n \"8926\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"8927\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"8928\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8929\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8934\": [0.23222, 0.74111, 0, 0, 0.77778],\n \"8935\": [0.23222, 0.74111, 0, 0, 0.77778],\n \"8936\": [0.23222, 0.74111, 0, 0, 0.77778],\n \"8937\": [0.23222, 0.74111, 0, 0, 0.77778],\n \"8938\": [0.20576, 0.70576, 0, 0, 0.77778],\n \"8939\": [0.20576, 0.70576, 0, 0, 0.77778],\n \"8940\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8941\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"8994\": [0.19444, 0.69224, 0, 0, 0.77778],\n \"8995\": [0.19444, 0.69224, 0, 0, 0.77778],\n \"9416\": [0.15559, 0.69224, 0, 0, 0.90222],\n \"9484\": [0, 0.69224, 0, 0, 0.5],\n \"9488\": [0, 0.69224, 0, 0, 0.5],\n \"9492\": [0, 0.37788, 0, 0, 0.5],\n \"9496\": [0, 0.37788, 0, 0, 0.5],\n \"9585\": [0.19444, 0.68889, 0, 0, 0.88889],\n \"9586\": [0.19444, 0.74111, 0, 0, 0.88889],\n \"9632\": [0, 0.675, 0, 0, 0.77778],\n \"9633\": [0, 0.675, 0, 0, 0.77778],\n \"9650\": [0, 0.54986, 0, 0, 0.72222],\n \"9651\": [0, 0.54986, 0, 0, 0.72222],\n \"9654\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"9660\": [0, 0.54986, 0, 0, 0.72222],\n \"9661\": [0, 0.54986, 0, 0, 0.72222],\n \"9664\": [0.03517, 0.54986, 0, 0, 0.77778],\n \"9674\": [0.11111, 0.69224, 0, 0, 0.66667],\n \"9733\": [0.19444, 0.69224, 0, 0, 0.94445],\n \"10003\": [0, 0.69224, 0, 0, 0.83334],\n \"10016\": [0, 0.69224, 0, 0, 0.83334],\n \"10731\": [0.11111, 0.69224, 0, 0, 0.66667],\n \"10846\": [0.19444, 0.75583, 0, 0, 0.61111],\n \"10877\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"10878\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"10885\": [0.25583, 0.75583, 0, 0, 0.77778],\n \"10886\": [0.25583, 0.75583, 0, 0, 0.77778],\n \"10887\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"10888\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"10889\": [0.26167, 0.75726, 0, 0, 0.77778],\n \"10890\": [0.26167, 0.75726, 0, 0, 0.77778],\n \"10891\": [0.48256, 0.98256, 0, 0, 0.77778],\n \"10892\": [0.48256, 0.98256, 0, 0, 0.77778],\n \"10901\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"10902\": [0.13667, 0.63667, 0, 0, 0.77778],\n \"10933\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"10934\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"10935\": [0.26167, 0.75726, 0, 0, 0.77778],\n \"10936\": [0.26167, 0.75726, 0, 0, 0.77778],\n \"10937\": [0.26167, 0.75726, 0, 0, 0.77778],\n \"10938\": [0.26167, 0.75726, 0, 0, 0.77778],\n \"10949\": [0.25583, 0.75583, 0, 0, 0.77778],\n \"10950\": [0.25583, 0.75583, 0, 0, 0.77778],\n \"10955\": [0.28481, 0.79383, 0, 0, 0.77778],\n \"10956\": [0.28481, 0.79383, 0, 0, 0.77778],\n \"57350\": [0.08167, 0.58167, 0, 0, 0.22222],\n \"57351\": [0.08167, 0.58167, 0, 0, 0.38889],\n \"57352\": [0.08167, 0.58167, 0, 0, 0.77778],\n \"57353\": [0, 0.43056, 0.04028, 0, 0.66667],\n \"57356\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"57357\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"57358\": [0.41951, 0.91951, 0, 0, 0.77778],\n \"57359\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"57360\": [0.30274, 0.79383, 0, 0, 0.77778],\n \"57361\": [0.41951, 0.91951, 0, 0, 0.77778],\n \"57366\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"57367\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"57368\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"57369\": [0.25142, 0.75726, 0, 0, 0.77778],\n \"57370\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"57371\": [0.13597, 0.63597, 0, 0, 0.77778]\n },\n \"Caligraphic-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"65\": [0, 0.68333, 0, 0.19445, 0.79847],\n \"66\": [0, 0.68333, 0.03041, 0.13889, 0.65681],\n \"67\": [0, 0.68333, 0.05834, 0.13889, 0.52653],\n \"68\": [0, 0.68333, 0.02778, 0.08334, 0.77139],\n \"69\": [0, 0.68333, 0.08944, 0.11111, 0.52778],\n \"70\": [0, 0.68333, 0.09931, 0.11111, 0.71875],\n \"71\": [0.09722, 0.68333, 0.0593, 0.11111, 0.59487],\n \"72\": [0, 0.68333, 0.00965, 0.11111, 0.84452],\n \"73\": [0, 0.68333, 0.07382, 0, 0.54452],\n \"74\": [0.09722, 0.68333, 0.18472, 0.16667, 0.67778],\n \"75\": [0, 0.68333, 0.01445, 0.05556, 0.76195],\n \"76\": [0, 0.68333, 0, 0.13889, 0.68972],\n \"77\": [0, 0.68333, 0, 0.13889, 1.2009],\n \"78\": [0, 0.68333, 0.14736, 0.08334, 0.82049],\n \"79\": [0, 0.68333, 0.02778, 0.11111, 0.79611],\n \"80\": [0, 0.68333, 0.08222, 0.08334, 0.69556],\n \"81\": [0.09722, 0.68333, 0, 0.11111, 0.81667],\n \"82\": [0, 0.68333, 0, 0.08334, 0.8475],\n \"83\": [0, 0.68333, 0.075, 0.13889, 0.60556],\n \"84\": [0, 0.68333, 0.25417, 0, 0.54464],\n \"85\": [0, 0.68333, 0.09931, 0.08334, 0.62583],\n \"86\": [0, 0.68333, 0.08222, 0, 0.61278],\n \"87\": [0, 0.68333, 0.08222, 0.08334, 0.98778],\n \"88\": [0, 0.68333, 0.14643, 0.13889, 0.7133],\n \"89\": [0.09722, 0.68333, 0.08222, 0.08334, 0.66834],\n \"90\": [0, 0.68333, 0.07944, 0.13889, 0.72473],\n \"160\": [0, 0, 0, 0, 0.25]\n },\n \"Fraktur-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69141, 0, 0, 0.29574],\n \"34\": [0, 0.69141, 0, 0, 0.21471],\n \"38\": [0, 0.69141, 0, 0, 0.73786],\n \"39\": [0, 0.69141, 0, 0, 0.21201],\n \"40\": [0.24982, 0.74947, 0, 0, 0.38865],\n \"41\": [0.24982, 0.74947, 0, 0, 0.38865],\n \"42\": [0, 0.62119, 0, 0, 0.27764],\n \"43\": [0.08319, 0.58283, 0, 0, 0.75623],\n \"44\": [0, 0.10803, 0, 0, 0.27764],\n \"45\": [0.08319, 0.58283, 0, 0, 0.75623],\n \"46\": [0, 0.10803, 0, 0, 0.27764],\n \"47\": [0.24982, 0.74947, 0, 0, 0.50181],\n \"48\": [0, 0.47534, 0, 0, 0.50181],\n \"49\": [0, 0.47534, 0, 0, 0.50181],\n \"50\": [0, 0.47534, 0, 0, 0.50181],\n \"51\": [0.18906, 0.47534, 0, 0, 0.50181],\n \"52\": [0.18906, 0.47534, 0, 0, 0.50181],\n \"53\": [0.18906, 0.47534, 0, 0, 0.50181],\n \"54\": [0, 0.69141, 0, 0, 0.50181],\n \"55\": [0.18906, 0.47534, 0, 0, 0.50181],\n \"56\": [0, 0.69141, 0, 0, 0.50181],\n \"57\": [0.18906, 0.47534, 0, 0, 0.50181],\n \"58\": [0, 0.47534, 0, 0, 0.21606],\n \"59\": [0.12604, 0.47534, 0, 0, 0.21606],\n \"61\": [-0.13099, 0.36866, 0, 0, 0.75623],\n \"63\": [0, 0.69141, 0, 0, 0.36245],\n \"65\": [0, 0.69141, 0, 0, 0.7176],\n \"66\": [0, 0.69141, 0, 0, 0.88397],\n \"67\": [0, 0.69141, 0, 0, 0.61254],\n \"68\": [0, 0.69141, 0, 0, 0.83158],\n \"69\": [0, 0.69141, 0, 0, 0.66278],\n \"70\": [0.12604, 0.69141, 0, 0, 0.61119],\n \"71\": [0, 0.69141, 0, 0, 0.78539],\n \"72\": [0.06302, 0.69141, 0, 0, 0.7203],\n \"73\": [0, 0.69141, 0, 0, 0.55448],\n \"74\": [0.12604, 0.69141, 0, 0, 0.55231],\n \"75\": [0, 0.69141, 0, 0, 0.66845],\n \"76\": [0, 0.69141, 0, 0, 0.66602],\n \"77\": [0, 0.69141, 0, 0, 1.04953],\n \"78\": [0, 0.69141, 0, 0, 0.83212],\n \"79\": [0, 0.69141, 0, 0, 0.82699],\n \"80\": [0.18906, 0.69141, 0, 0, 0.82753],\n \"81\": [0.03781, 0.69141, 0, 0, 0.82699],\n \"82\": [0, 0.69141, 0, 0, 0.82807],\n \"83\": [0, 0.69141, 0, 0, 0.82861],\n \"84\": [0, 0.69141, 0, 0, 0.66899],\n \"85\": [0, 0.69141, 0, 0, 0.64576],\n \"86\": [0, 0.69141, 0, 0, 0.83131],\n \"87\": [0, 0.69141, 0, 0, 1.04602],\n \"88\": [0, 0.69141, 0, 0, 0.71922],\n \"89\": [0.18906, 0.69141, 0, 0, 0.83293],\n \"90\": [0.12604, 0.69141, 0, 0, 0.60201],\n \"91\": [0.24982, 0.74947, 0, 0, 0.27764],\n \"93\": [0.24982, 0.74947, 0, 0, 0.27764],\n \"94\": [0, 0.69141, 0, 0, 0.49965],\n \"97\": [0, 0.47534, 0, 0, 0.50046],\n \"98\": [0, 0.69141, 0, 0, 0.51315],\n \"99\": [0, 0.47534, 0, 0, 0.38946],\n \"100\": [0, 0.62119, 0, 0, 0.49857],\n \"101\": [0, 0.47534, 0, 0, 0.40053],\n \"102\": [0.18906, 0.69141, 0, 0, 0.32626],\n \"103\": [0.18906, 0.47534, 0, 0, 0.5037],\n \"104\": [0.18906, 0.69141, 0, 0, 0.52126],\n \"105\": [0, 0.69141, 0, 0, 0.27899],\n \"106\": [0, 0.69141, 0, 0, 0.28088],\n \"107\": [0, 0.69141, 0, 0, 0.38946],\n \"108\": [0, 0.69141, 0, 0, 0.27953],\n \"109\": [0, 0.47534, 0, 0, 0.76676],\n \"110\": [0, 0.47534, 0, 0, 0.52666],\n \"111\": [0, 0.47534, 0, 0, 0.48885],\n \"112\": [0.18906, 0.52396, 0, 0, 0.50046],\n \"113\": [0.18906, 0.47534, 0, 0, 0.48912],\n \"114\": [0, 0.47534, 0, 0, 0.38919],\n \"115\": [0, 0.47534, 0, 0, 0.44266],\n \"116\": [0, 0.62119, 0, 0, 0.33301],\n \"117\": [0, 0.47534, 0, 0, 0.5172],\n \"118\": [0, 0.52396, 0, 0, 0.5118],\n \"119\": [0, 0.52396, 0, 0, 0.77351],\n \"120\": [0.18906, 0.47534, 0, 0, 0.38865],\n \"121\": [0.18906, 0.47534, 0, 0, 0.49884],\n \"122\": [0.18906, 0.47534, 0, 0, 0.39054],\n \"160\": [0, 0, 0, 0, 0.25],\n \"8216\": [0, 0.69141, 0, 0, 0.21471],\n \"8217\": [0, 0.69141, 0, 0, 0.21471],\n \"58112\": [0, 0.62119, 0, 0, 0.49749],\n \"58113\": [0, 0.62119, 0, 0, 0.4983],\n \"58114\": [0.18906, 0.69141, 0, 0, 0.33328],\n \"58115\": [0.18906, 0.69141, 0, 0, 0.32923],\n \"58116\": [0.18906, 0.47534, 0, 0, 0.50343],\n \"58117\": [0, 0.69141, 0, 0, 0.33301],\n \"58118\": [0, 0.62119, 0, 0, 0.33409],\n \"58119\": [0, 0.47534, 0, 0, 0.50073]\n },\n \"Main-Bold\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0, 0, 0.35],\n \"34\": [0, 0.69444, 0, 0, 0.60278],\n \"35\": [0.19444, 0.69444, 0, 0, 0.95833],\n \"36\": [0.05556, 0.75, 0, 0, 0.575],\n \"37\": [0.05556, 0.75, 0, 0, 0.95833],\n \"38\": [0, 0.69444, 0, 0, 0.89444],\n \"39\": [0, 0.69444, 0, 0, 0.31944],\n \"40\": [0.25, 0.75, 0, 0, 0.44722],\n \"41\": [0.25, 0.75, 0, 0, 0.44722],\n \"42\": [0, 0.75, 0, 0, 0.575],\n \"43\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"44\": [0.19444, 0.15556, 0, 0, 0.31944],\n \"45\": [0, 0.44444, 0, 0, 0.38333],\n \"46\": [0, 0.15556, 0, 0, 0.31944],\n \"47\": [0.25, 0.75, 0, 0, 0.575],\n \"48\": [0, 0.64444, 0, 0, 0.575],\n \"49\": [0, 0.64444, 0, 0, 0.575],\n \"50\": [0, 0.64444, 0, 0, 0.575],\n \"51\": [0, 0.64444, 0, 0, 0.575],\n \"52\": [0, 0.64444, 0, 0, 0.575],\n \"53\": [0, 0.64444, 0, 0, 0.575],\n \"54\": [0, 0.64444, 0, 0, 0.575],\n \"55\": [0, 0.64444, 0, 0, 0.575],\n \"56\": [0, 0.64444, 0, 0, 0.575],\n \"57\": [0, 0.64444, 0, 0, 0.575],\n \"58\": [0, 0.44444, 0, 0, 0.31944],\n \"59\": [0.19444, 0.44444, 0, 0, 0.31944],\n \"60\": [0.08556, 0.58556, 0, 0, 0.89444],\n \"61\": [-0.10889, 0.39111, 0, 0, 0.89444],\n \"62\": [0.08556, 0.58556, 0, 0, 0.89444],\n \"63\": [0, 0.69444, 0, 0, 0.54305],\n \"64\": [0, 0.69444, 0, 0, 0.89444],\n \"65\": [0, 0.68611, 0, 0, 0.86944],\n \"66\": [0, 0.68611, 0, 0, 0.81805],\n \"67\": [0, 0.68611, 0, 0, 0.83055],\n \"68\": [0, 0.68611, 0, 0, 0.88194],\n \"69\": [0, 0.68611, 0, 0, 0.75555],\n \"70\": [0, 0.68611, 0, 0, 0.72361],\n \"71\": [0, 0.68611, 0, 0, 0.90416],\n \"72\": [0, 0.68611, 0, 0, 0.9],\n \"73\": [0, 0.68611, 0, 0, 0.43611],\n \"74\": [0, 0.68611, 0, 0, 0.59444],\n \"75\": [0, 0.68611, 0, 0, 0.90138],\n \"76\": [0, 0.68611, 0, 0, 0.69166],\n \"77\": [0, 0.68611, 0, 0, 1.09166],\n \"78\": [0, 0.68611, 0, 0, 0.9],\n \"79\": [0, 0.68611, 0, 0, 0.86388],\n \"80\": [0, 0.68611, 0, 0, 0.78611],\n \"81\": [0.19444, 0.68611, 0, 0, 0.86388],\n \"82\": [0, 0.68611, 0, 0, 0.8625],\n \"83\": [0, 0.68611, 0, 0, 0.63889],\n \"84\": [0, 0.68611, 0, 0, 0.8],\n \"85\": [0, 0.68611, 0, 0, 0.88472],\n \"86\": [0, 0.68611, 0.01597, 0, 0.86944],\n \"87\": [0, 0.68611, 0.01597, 0, 1.18888],\n \"88\": [0, 0.68611, 0, 0, 0.86944],\n \"89\": [0, 0.68611, 0.02875, 0, 0.86944],\n \"90\": [0, 0.68611, 0, 0, 0.70277],\n \"91\": [0.25, 0.75, 0, 0, 0.31944],\n \"92\": [0.25, 0.75, 0, 0, 0.575],\n \"93\": [0.25, 0.75, 0, 0, 0.31944],\n \"94\": [0, 0.69444, 0, 0, 0.575],\n \"95\": [0.31, 0.13444, 0.03194, 0, 0.575],\n \"97\": [0, 0.44444, 0, 0, 0.55902],\n \"98\": [0, 0.69444, 0, 0, 0.63889],\n \"99\": [0, 0.44444, 0, 0, 0.51111],\n \"100\": [0, 0.69444, 0, 0, 0.63889],\n \"101\": [0, 0.44444, 0, 0, 0.52708],\n \"102\": [0, 0.69444, 0.10903, 0, 0.35139],\n \"103\": [0.19444, 0.44444, 0.01597, 0, 0.575],\n \"104\": [0, 0.69444, 0, 0, 0.63889],\n \"105\": [0, 0.69444, 0, 0, 0.31944],\n \"106\": [0.19444, 0.69444, 0, 0, 0.35139],\n \"107\": [0, 0.69444, 0, 0, 0.60694],\n \"108\": [0, 0.69444, 0, 0, 0.31944],\n \"109\": [0, 0.44444, 0, 0, 0.95833],\n \"110\": [0, 0.44444, 0, 0, 0.63889],\n \"111\": [0, 0.44444, 0, 0, 0.575],\n \"112\": [0.19444, 0.44444, 0, 0, 0.63889],\n \"113\": [0.19444, 0.44444, 0, 0, 0.60694],\n \"114\": [0, 0.44444, 0, 0, 0.47361],\n \"115\": [0, 0.44444, 0, 0, 0.45361],\n \"116\": [0, 0.63492, 0, 0, 0.44722],\n \"117\": [0, 0.44444, 0, 0, 0.63889],\n \"118\": [0, 0.44444, 0.01597, 0, 0.60694],\n \"119\": [0, 0.44444, 0.01597, 0, 0.83055],\n \"120\": [0, 0.44444, 0, 0, 0.60694],\n \"121\": [0.19444, 0.44444, 0.01597, 0, 0.60694],\n \"122\": [0, 0.44444, 0, 0, 0.51111],\n \"123\": [0.25, 0.75, 0, 0, 0.575],\n \"124\": [0.25, 0.75, 0, 0, 0.31944],\n \"125\": [0.25, 0.75, 0, 0, 0.575],\n \"126\": [0.35, 0.34444, 0, 0, 0.575],\n \"160\": [0, 0, 0, 0, 0.25],\n \"163\": [0, 0.69444, 0, 0, 0.86853],\n \"168\": [0, 0.69444, 0, 0, 0.575],\n \"172\": [0, 0.44444, 0, 0, 0.76666],\n \"176\": [0, 0.69444, 0, 0, 0.86944],\n \"177\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"184\": [0.17014, 0, 0, 0, 0.51111],\n \"198\": [0, 0.68611, 0, 0, 1.04166],\n \"215\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"216\": [0.04861, 0.73472, 0, 0, 0.89444],\n \"223\": [0, 0.69444, 0, 0, 0.59722],\n \"230\": [0, 0.44444, 0, 0, 0.83055],\n \"247\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"248\": [0.09722, 0.54167, 0, 0, 0.575],\n \"305\": [0, 0.44444, 0, 0, 0.31944],\n \"338\": [0, 0.68611, 0, 0, 1.16944],\n \"339\": [0, 0.44444, 0, 0, 0.89444],\n \"567\": [0.19444, 0.44444, 0, 0, 0.35139],\n \"710\": [0, 0.69444, 0, 0, 0.575],\n \"711\": [0, 0.63194, 0, 0, 0.575],\n \"713\": [0, 0.59611, 0, 0, 0.575],\n \"714\": [0, 0.69444, 0, 0, 0.575],\n \"715\": [0, 0.69444, 0, 0, 0.575],\n \"728\": [0, 0.69444, 0, 0, 0.575],\n \"729\": [0, 0.69444, 0, 0, 0.31944],\n \"730\": [0, 0.69444, 0, 0, 0.86944],\n \"732\": [0, 0.69444, 0, 0, 0.575],\n \"733\": [0, 0.69444, 0, 0, 0.575],\n \"915\": [0, 0.68611, 0, 0, 0.69166],\n \"916\": [0, 0.68611, 0, 0, 0.95833],\n \"920\": [0, 0.68611, 0, 0, 0.89444],\n \"923\": [0, 0.68611, 0, 0, 0.80555],\n \"926\": [0, 0.68611, 0, 0, 0.76666],\n \"928\": [0, 0.68611, 0, 0, 0.9],\n \"931\": [0, 0.68611, 0, 0, 0.83055],\n \"933\": [0, 0.68611, 0, 0, 0.89444],\n \"934\": [0, 0.68611, 0, 0, 0.83055],\n \"936\": [0, 0.68611, 0, 0, 0.89444],\n \"937\": [0, 0.68611, 0, 0, 0.83055],\n \"8211\": [0, 0.44444, 0.03194, 0, 0.575],\n \"8212\": [0, 0.44444, 0.03194, 0, 1.14999],\n \"8216\": [0, 0.69444, 0, 0, 0.31944],\n \"8217\": [0, 0.69444, 0, 0, 0.31944],\n \"8220\": [0, 0.69444, 0, 0, 0.60278],\n \"8221\": [0, 0.69444, 0, 0, 0.60278],\n \"8224\": [0.19444, 0.69444, 0, 0, 0.51111],\n \"8225\": [0.19444, 0.69444, 0, 0, 0.51111],\n \"8242\": [0, 0.55556, 0, 0, 0.34444],\n \"8407\": [0, 0.72444, 0.15486, 0, 0.575],\n \"8463\": [0, 0.69444, 0, 0, 0.66759],\n \"8465\": [0, 0.69444, 0, 0, 0.83055],\n \"8467\": [0, 0.69444, 0, 0, 0.47361],\n \"8472\": [0.19444, 0.44444, 0, 0, 0.74027],\n \"8476\": [0, 0.69444, 0, 0, 0.83055],\n \"8501\": [0, 0.69444, 0, 0, 0.70277],\n \"8592\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8593\": [0.19444, 0.69444, 0, 0, 0.575],\n \"8594\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8595\": [0.19444, 0.69444, 0, 0, 0.575],\n \"8596\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8597\": [0.25, 0.75, 0, 0, 0.575],\n \"8598\": [0.19444, 0.69444, 0, 0, 1.14999],\n \"8599\": [0.19444, 0.69444, 0, 0, 1.14999],\n \"8600\": [0.19444, 0.69444, 0, 0, 1.14999],\n \"8601\": [0.19444, 0.69444, 0, 0, 1.14999],\n \"8636\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8637\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8640\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8641\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8656\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8657\": [0.19444, 0.69444, 0, 0, 0.70277],\n \"8658\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8659\": [0.19444, 0.69444, 0, 0, 0.70277],\n \"8660\": [-0.10889, 0.39111, 0, 0, 1.14999],\n \"8661\": [0.25, 0.75, 0, 0, 0.70277],\n \"8704\": [0, 0.69444, 0, 0, 0.63889],\n \"8706\": [0, 0.69444, 0.06389, 0, 0.62847],\n \"8707\": [0, 0.69444, 0, 0, 0.63889],\n \"8709\": [0.05556, 0.75, 0, 0, 0.575],\n \"8711\": [0, 0.68611, 0, 0, 0.95833],\n \"8712\": [0.08556, 0.58556, 0, 0, 0.76666],\n \"8715\": [0.08556, 0.58556, 0, 0, 0.76666],\n \"8722\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8723\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8725\": [0.25, 0.75, 0, 0, 0.575],\n \"8726\": [0.25, 0.75, 0, 0, 0.575],\n \"8727\": [-0.02778, 0.47222, 0, 0, 0.575],\n \"8728\": [-0.02639, 0.47361, 0, 0, 0.575],\n \"8729\": [-0.02639, 0.47361, 0, 0, 0.575],\n \"8730\": [0.18, 0.82, 0, 0, 0.95833],\n \"8733\": [0, 0.44444, 0, 0, 0.89444],\n \"8734\": [0, 0.44444, 0, 0, 1.14999],\n \"8736\": [0, 0.69224, 0, 0, 0.72222],\n \"8739\": [0.25, 0.75, 0, 0, 0.31944],\n \"8741\": [0.25, 0.75, 0, 0, 0.575],\n \"8743\": [0, 0.55556, 0, 0, 0.76666],\n \"8744\": [0, 0.55556, 0, 0, 0.76666],\n \"8745\": [0, 0.55556, 0, 0, 0.76666],\n \"8746\": [0, 0.55556, 0, 0, 0.76666],\n \"8747\": [0.19444, 0.69444, 0.12778, 0, 0.56875],\n \"8764\": [-0.10889, 0.39111, 0, 0, 0.89444],\n \"8768\": [0.19444, 0.69444, 0, 0, 0.31944],\n \"8771\": [0.00222, 0.50222, 0, 0, 0.89444],\n \"8773\": [0.027, 0.638, 0, 0, 0.894],\n \"8776\": [0.02444, 0.52444, 0, 0, 0.89444],\n \"8781\": [0.00222, 0.50222, 0, 0, 0.89444],\n \"8801\": [0.00222, 0.50222, 0, 0, 0.89444],\n \"8804\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"8805\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"8810\": [0.08556, 0.58556, 0, 0, 1.14999],\n \"8811\": [0.08556, 0.58556, 0, 0, 1.14999],\n \"8826\": [0.08556, 0.58556, 0, 0, 0.89444],\n \"8827\": [0.08556, 0.58556, 0, 0, 0.89444],\n \"8834\": [0.08556, 0.58556, 0, 0, 0.89444],\n \"8835\": [0.08556, 0.58556, 0, 0, 0.89444],\n \"8838\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"8839\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"8846\": [0, 0.55556, 0, 0, 0.76666],\n \"8849\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"8850\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"8851\": [0, 0.55556, 0, 0, 0.76666],\n \"8852\": [0, 0.55556, 0, 0, 0.76666],\n \"8853\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8854\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8855\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8856\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8857\": [0.13333, 0.63333, 0, 0, 0.89444],\n \"8866\": [0, 0.69444, 0, 0, 0.70277],\n \"8867\": [0, 0.69444, 0, 0, 0.70277],\n \"8868\": [0, 0.69444, 0, 0, 0.89444],\n \"8869\": [0, 0.69444, 0, 0, 0.89444],\n \"8900\": [-0.02639, 0.47361, 0, 0, 0.575],\n \"8901\": [-0.02639, 0.47361, 0, 0, 0.31944],\n \"8902\": [-0.02778, 0.47222, 0, 0, 0.575],\n \"8968\": [0.25, 0.75, 0, 0, 0.51111],\n \"8969\": [0.25, 0.75, 0, 0, 0.51111],\n \"8970\": [0.25, 0.75, 0, 0, 0.51111],\n \"8971\": [0.25, 0.75, 0, 0, 0.51111],\n \"8994\": [-0.13889, 0.36111, 0, 0, 1.14999],\n \"8995\": [-0.13889, 0.36111, 0, 0, 1.14999],\n \"9651\": [0.19444, 0.69444, 0, 0, 1.02222],\n \"9657\": [-0.02778, 0.47222, 0, 0, 0.575],\n \"9661\": [0.19444, 0.69444, 0, 0, 1.02222],\n \"9667\": [-0.02778, 0.47222, 0, 0, 0.575],\n \"9711\": [0.19444, 0.69444, 0, 0, 1.14999],\n \"9824\": [0.12963, 0.69444, 0, 0, 0.89444],\n \"9825\": [0.12963, 0.69444, 0, 0, 0.89444],\n \"9826\": [0.12963, 0.69444, 0, 0, 0.89444],\n \"9827\": [0.12963, 0.69444, 0, 0, 0.89444],\n \"9837\": [0, 0.75, 0, 0, 0.44722],\n \"9838\": [0.19444, 0.69444, 0, 0, 0.44722],\n \"9839\": [0.19444, 0.69444, 0, 0, 0.44722],\n \"10216\": [0.25, 0.75, 0, 0, 0.44722],\n \"10217\": [0.25, 0.75, 0, 0, 0.44722],\n \"10815\": [0, 0.68611, 0, 0, 0.9],\n \"10927\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"10928\": [0.19667, 0.69667, 0, 0, 0.89444],\n \"57376\": [0.19444, 0.69444, 0, 0, 0]\n },\n \"Main-BoldItalic\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0.11417, 0, 0.38611],\n \"34\": [0, 0.69444, 0.07939, 0, 0.62055],\n \"35\": [0.19444, 0.69444, 0.06833, 0, 0.94444],\n \"37\": [0.05556, 0.75, 0.12861, 0, 0.94444],\n \"38\": [0, 0.69444, 0.08528, 0, 0.88555],\n \"39\": [0, 0.69444, 0.12945, 0, 0.35555],\n \"40\": [0.25, 0.75, 0.15806, 0, 0.47333],\n \"41\": [0.25, 0.75, 0.03306, 0, 0.47333],\n \"42\": [0, 0.75, 0.14333, 0, 0.59111],\n \"43\": [0.10333, 0.60333, 0.03306, 0, 0.88555],\n \"44\": [0.19444, 0.14722, 0, 0, 0.35555],\n \"45\": [0, 0.44444, 0.02611, 0, 0.41444],\n \"46\": [0, 0.14722, 0, 0, 0.35555],\n \"47\": [0.25, 0.75, 0.15806, 0, 0.59111],\n \"48\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"49\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"50\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"51\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"52\": [0.19444, 0.64444, 0.13167, 0, 0.59111],\n \"53\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"54\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"55\": [0.19444, 0.64444, 0.13167, 0, 0.59111],\n \"56\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"57\": [0, 0.64444, 0.13167, 0, 0.59111],\n \"58\": [0, 0.44444, 0.06695, 0, 0.35555],\n \"59\": [0.19444, 0.44444, 0.06695, 0, 0.35555],\n \"61\": [-0.10889, 0.39111, 0.06833, 0, 0.88555],\n \"63\": [0, 0.69444, 0.11472, 0, 0.59111],\n \"64\": [0, 0.69444, 0.09208, 0, 0.88555],\n \"65\": [0, 0.68611, 0, 0, 0.86555],\n \"66\": [0, 0.68611, 0.0992, 0, 0.81666],\n \"67\": [0, 0.68611, 0.14208, 0, 0.82666],\n \"68\": [0, 0.68611, 0.09062, 0, 0.87555],\n \"69\": [0, 0.68611, 0.11431, 0, 0.75666],\n \"70\": [0, 0.68611, 0.12903, 0, 0.72722],\n \"71\": [0, 0.68611, 0.07347, 0, 0.89527],\n \"72\": [0, 0.68611, 0.17208, 0, 0.8961],\n \"73\": [0, 0.68611, 0.15681, 0, 0.47166],\n \"74\": [0, 0.68611, 0.145, 0, 0.61055],\n \"75\": [0, 0.68611, 0.14208, 0, 0.89499],\n \"76\": [0, 0.68611, 0, 0, 0.69777],\n \"77\": [0, 0.68611, 0.17208, 0, 1.07277],\n \"78\": [0, 0.68611, 0.17208, 0, 0.8961],\n \"79\": [0, 0.68611, 0.09062, 0, 0.85499],\n \"80\": [0, 0.68611, 0.0992, 0, 0.78721],\n \"81\": [0.19444, 0.68611, 0.09062, 0, 0.85499],\n \"82\": [0, 0.68611, 0.02559, 0, 0.85944],\n \"83\": [0, 0.68611, 0.11264, 0, 0.64999],\n \"84\": [0, 0.68611, 0.12903, 0, 0.7961],\n \"85\": [0, 0.68611, 0.17208, 0, 0.88083],\n \"86\": [0, 0.68611, 0.18625, 0, 0.86555],\n \"87\": [0, 0.68611, 0.18625, 0, 1.15999],\n \"88\": [0, 0.68611, 0.15681, 0, 0.86555],\n \"89\": [0, 0.68611, 0.19803, 0, 0.86555],\n \"90\": [0, 0.68611, 0.14208, 0, 0.70888],\n \"91\": [0.25, 0.75, 0.1875, 0, 0.35611],\n \"93\": [0.25, 0.75, 0.09972, 0, 0.35611],\n \"94\": [0, 0.69444, 0.06709, 0, 0.59111],\n \"95\": [0.31, 0.13444, 0.09811, 0, 0.59111],\n \"97\": [0, 0.44444, 0.09426, 0, 0.59111],\n \"98\": [0, 0.69444, 0.07861, 0, 0.53222],\n \"99\": [0, 0.44444, 0.05222, 0, 0.53222],\n \"100\": [0, 0.69444, 0.10861, 0, 0.59111],\n \"101\": [0, 0.44444, 0.085, 0, 0.53222],\n \"102\": [0.19444, 0.69444, 0.21778, 0, 0.4],\n \"103\": [0.19444, 0.44444, 0.105, 0, 0.53222],\n \"104\": [0, 0.69444, 0.09426, 0, 0.59111],\n \"105\": [0, 0.69326, 0.11387, 0, 0.35555],\n \"106\": [0.19444, 0.69326, 0.1672, 0, 0.35555],\n \"107\": [0, 0.69444, 0.11111, 0, 0.53222],\n \"108\": [0, 0.69444, 0.10861, 0, 0.29666],\n \"109\": [0, 0.44444, 0.09426, 0, 0.94444],\n \"110\": [0, 0.44444, 0.09426, 0, 0.64999],\n \"111\": [0, 0.44444, 0.07861, 0, 0.59111],\n \"112\": [0.19444, 0.44444, 0.07861, 0, 0.59111],\n \"113\": [0.19444, 0.44444, 0.105, 0, 0.53222],\n \"114\": [0, 0.44444, 0.11111, 0, 0.50167],\n \"115\": [0, 0.44444, 0.08167, 0, 0.48694],\n \"116\": [0, 0.63492, 0.09639, 0, 0.385],\n \"117\": [0, 0.44444, 0.09426, 0, 0.62055],\n \"118\": [0, 0.44444, 0.11111, 0, 0.53222],\n \"119\": [0, 0.44444, 0.11111, 0, 0.76777],\n \"120\": [0, 0.44444, 0.12583, 0, 0.56055],\n \"121\": [0.19444, 0.44444, 0.105, 0, 0.56166],\n \"122\": [0, 0.44444, 0.13889, 0, 0.49055],\n \"126\": [0.35, 0.34444, 0.11472, 0, 0.59111],\n \"160\": [0, 0, 0, 0, 0.25],\n \"168\": [0, 0.69444, 0.11473, 0, 0.59111],\n \"176\": [0, 0.69444, 0, 0, 0.94888],\n \"184\": [0.17014, 0, 0, 0, 0.53222],\n \"198\": [0, 0.68611, 0.11431, 0, 1.02277],\n \"216\": [0.04861, 0.73472, 0.09062, 0, 0.88555],\n \"223\": [0.19444, 0.69444, 0.09736, 0, 0.665],\n \"230\": [0, 0.44444, 0.085, 0, 0.82666],\n \"248\": [0.09722, 0.54167, 0.09458, 0, 0.59111],\n \"305\": [0, 0.44444, 0.09426, 0, 0.35555],\n \"338\": [0, 0.68611, 0.11431, 0, 1.14054],\n \"339\": [0, 0.44444, 0.085, 0, 0.82666],\n \"567\": [0.19444, 0.44444, 0.04611, 0, 0.385],\n \"710\": [0, 0.69444, 0.06709, 0, 0.59111],\n \"711\": [0, 0.63194, 0.08271, 0, 0.59111],\n \"713\": [0, 0.59444, 0.10444, 0, 0.59111],\n \"714\": [0, 0.69444, 0.08528, 0, 0.59111],\n \"715\": [0, 0.69444, 0, 0, 0.59111],\n \"728\": [0, 0.69444, 0.10333, 0, 0.59111],\n \"729\": [0, 0.69444, 0.12945, 0, 0.35555],\n \"730\": [0, 0.69444, 0, 0, 0.94888],\n \"732\": [0, 0.69444, 0.11472, 0, 0.59111],\n \"733\": [0, 0.69444, 0.11472, 0, 0.59111],\n \"915\": [0, 0.68611, 0.12903, 0, 0.69777],\n \"916\": [0, 0.68611, 0, 0, 0.94444],\n \"920\": [0, 0.68611, 0.09062, 0, 0.88555],\n \"923\": [0, 0.68611, 0, 0, 0.80666],\n \"926\": [0, 0.68611, 0.15092, 0, 0.76777],\n \"928\": [0, 0.68611, 0.17208, 0, 0.8961],\n \"931\": [0, 0.68611, 0.11431, 0, 0.82666],\n \"933\": [0, 0.68611, 0.10778, 0, 0.88555],\n \"934\": [0, 0.68611, 0.05632, 0, 0.82666],\n \"936\": [0, 0.68611, 0.10778, 0, 0.88555],\n \"937\": [0, 0.68611, 0.0992, 0, 0.82666],\n \"8211\": [0, 0.44444, 0.09811, 0, 0.59111],\n \"8212\": [0, 0.44444, 0.09811, 0, 1.18221],\n \"8216\": [0, 0.69444, 0.12945, 0, 0.35555],\n \"8217\": [0, 0.69444, 0.12945, 0, 0.35555],\n \"8220\": [0, 0.69444, 0.16772, 0, 0.62055],\n \"8221\": [0, 0.69444, 0.07939, 0, 0.62055]\n },\n \"Main-Italic\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0.12417, 0, 0.30667],\n \"34\": [0, 0.69444, 0.06961, 0, 0.51444],\n \"35\": [0.19444, 0.69444, 0.06616, 0, 0.81777],\n \"37\": [0.05556, 0.75, 0.13639, 0, 0.81777],\n \"38\": [0, 0.69444, 0.09694, 0, 0.76666],\n \"39\": [0, 0.69444, 0.12417, 0, 0.30667],\n \"40\": [0.25, 0.75, 0.16194, 0, 0.40889],\n \"41\": [0.25, 0.75, 0.03694, 0, 0.40889],\n \"42\": [0, 0.75, 0.14917, 0, 0.51111],\n \"43\": [0.05667, 0.56167, 0.03694, 0, 0.76666],\n \"44\": [0.19444, 0.10556, 0, 0, 0.30667],\n \"45\": [0, 0.43056, 0.02826, 0, 0.35778],\n \"46\": [0, 0.10556, 0, 0, 0.30667],\n \"47\": [0.25, 0.75, 0.16194, 0, 0.51111],\n \"48\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"49\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"50\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"51\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"52\": [0.19444, 0.64444, 0.13556, 0, 0.51111],\n \"53\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"54\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"55\": [0.19444, 0.64444, 0.13556, 0, 0.51111],\n \"56\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"57\": [0, 0.64444, 0.13556, 0, 0.51111],\n \"58\": [0, 0.43056, 0.0582, 0, 0.30667],\n \"59\": [0.19444, 0.43056, 0.0582, 0, 0.30667],\n \"61\": [-0.13313, 0.36687, 0.06616, 0, 0.76666],\n \"63\": [0, 0.69444, 0.1225, 0, 0.51111],\n \"64\": [0, 0.69444, 0.09597, 0, 0.76666],\n \"65\": [0, 0.68333, 0, 0, 0.74333],\n \"66\": [0, 0.68333, 0.10257, 0, 0.70389],\n \"67\": [0, 0.68333, 0.14528, 0, 0.71555],\n \"68\": [0, 0.68333, 0.09403, 0, 0.755],\n \"69\": [0, 0.68333, 0.12028, 0, 0.67833],\n \"70\": [0, 0.68333, 0.13305, 0, 0.65277],\n \"71\": [0, 0.68333, 0.08722, 0, 0.77361],\n \"72\": [0, 0.68333, 0.16389, 0, 0.74333],\n \"73\": [0, 0.68333, 0.15806, 0, 0.38555],\n \"74\": [0, 0.68333, 0.14028, 0, 0.525],\n \"75\": [0, 0.68333, 0.14528, 0, 0.76888],\n \"76\": [0, 0.68333, 0, 0, 0.62722],\n \"77\": [0, 0.68333, 0.16389, 0, 0.89666],\n \"78\": [0, 0.68333, 0.16389, 0, 0.74333],\n \"79\": [0, 0.68333, 0.09403, 0, 0.76666],\n \"80\": [0, 0.68333, 0.10257, 0, 0.67833],\n \"81\": [0.19444, 0.68333, 0.09403, 0, 0.76666],\n \"82\": [0, 0.68333, 0.03868, 0, 0.72944],\n \"83\": [0, 0.68333, 0.11972, 0, 0.56222],\n \"84\": [0, 0.68333, 0.13305, 0, 0.71555],\n \"85\": [0, 0.68333, 0.16389, 0, 0.74333],\n \"86\": [0, 0.68333, 0.18361, 0, 0.74333],\n \"87\": [0, 0.68333, 0.18361, 0, 0.99888],\n \"88\": [0, 0.68333, 0.15806, 0, 0.74333],\n \"89\": [0, 0.68333, 0.19383, 0, 0.74333],\n \"90\": [0, 0.68333, 0.14528, 0, 0.61333],\n \"91\": [0.25, 0.75, 0.1875, 0, 0.30667],\n \"93\": [0.25, 0.75, 0.10528, 0, 0.30667],\n \"94\": [0, 0.69444, 0.06646, 0, 0.51111],\n \"95\": [0.31, 0.12056, 0.09208, 0, 0.51111],\n \"97\": [0, 0.43056, 0.07671, 0, 0.51111],\n \"98\": [0, 0.69444, 0.06312, 0, 0.46],\n \"99\": [0, 0.43056, 0.05653, 0, 0.46],\n \"100\": [0, 0.69444, 0.10333, 0, 0.51111],\n \"101\": [0, 0.43056, 0.07514, 0, 0.46],\n \"102\": [0.19444, 0.69444, 0.21194, 0, 0.30667],\n \"103\": [0.19444, 0.43056, 0.08847, 0, 0.46],\n \"104\": [0, 0.69444, 0.07671, 0, 0.51111],\n \"105\": [0, 0.65536, 0.1019, 0, 0.30667],\n \"106\": [0.19444, 0.65536, 0.14467, 0, 0.30667],\n \"107\": [0, 0.69444, 0.10764, 0, 0.46],\n \"108\": [0, 0.69444, 0.10333, 0, 0.25555],\n \"109\": [0, 0.43056, 0.07671, 0, 0.81777],\n \"110\": [0, 0.43056, 0.07671, 0, 0.56222],\n \"111\": [0, 0.43056, 0.06312, 0, 0.51111],\n \"112\": [0.19444, 0.43056, 0.06312, 0, 0.51111],\n \"113\": [0.19444, 0.43056, 0.08847, 0, 0.46],\n \"114\": [0, 0.43056, 0.10764, 0, 0.42166],\n \"115\": [0, 0.43056, 0.08208, 0, 0.40889],\n \"116\": [0, 0.61508, 0.09486, 0, 0.33222],\n \"117\": [0, 0.43056, 0.07671, 0, 0.53666],\n \"118\": [0, 0.43056, 0.10764, 0, 0.46],\n \"119\": [0, 0.43056, 0.10764, 0, 0.66444],\n \"120\": [0, 0.43056, 0.12042, 0, 0.46389],\n \"121\": [0.19444, 0.43056, 0.08847, 0, 0.48555],\n \"122\": [0, 0.43056, 0.12292, 0, 0.40889],\n \"126\": [0.35, 0.31786, 0.11585, 0, 0.51111],\n \"160\": [0, 0, 0, 0, 0.25],\n \"168\": [0, 0.66786, 0.10474, 0, 0.51111],\n \"176\": [0, 0.69444, 0, 0, 0.83129],\n \"184\": [0.17014, 0, 0, 0, 0.46],\n \"198\": [0, 0.68333, 0.12028, 0, 0.88277],\n \"216\": [0.04861, 0.73194, 0.09403, 0, 0.76666],\n \"223\": [0.19444, 0.69444, 0.10514, 0, 0.53666],\n \"230\": [0, 0.43056, 0.07514, 0, 0.71555],\n \"248\": [0.09722, 0.52778, 0.09194, 0, 0.51111],\n \"338\": [0, 0.68333, 0.12028, 0, 0.98499],\n \"339\": [0, 0.43056, 0.07514, 0, 0.71555],\n \"710\": [0, 0.69444, 0.06646, 0, 0.51111],\n \"711\": [0, 0.62847, 0.08295, 0, 0.51111],\n \"713\": [0, 0.56167, 0.10333, 0, 0.51111],\n \"714\": [0, 0.69444, 0.09694, 0, 0.51111],\n \"715\": [0, 0.69444, 0, 0, 0.51111],\n \"728\": [0, 0.69444, 0.10806, 0, 0.51111],\n \"729\": [0, 0.66786, 0.11752, 0, 0.30667],\n \"730\": [0, 0.69444, 0, 0, 0.83129],\n \"732\": [0, 0.66786, 0.11585, 0, 0.51111],\n \"733\": [0, 0.69444, 0.1225, 0, 0.51111],\n \"915\": [0, 0.68333, 0.13305, 0, 0.62722],\n \"916\": [0, 0.68333, 0, 0, 0.81777],\n \"920\": [0, 0.68333, 0.09403, 0, 0.76666],\n \"923\": [0, 0.68333, 0, 0, 0.69222],\n \"926\": [0, 0.68333, 0.15294, 0, 0.66444],\n \"928\": [0, 0.68333, 0.16389, 0, 0.74333],\n \"931\": [0, 0.68333, 0.12028, 0, 0.71555],\n \"933\": [0, 0.68333, 0.11111, 0, 0.76666],\n \"934\": [0, 0.68333, 0.05986, 0, 0.71555],\n \"936\": [0, 0.68333, 0.11111, 0, 0.76666],\n \"937\": [0, 0.68333, 0.10257, 0, 0.71555],\n \"8211\": [0, 0.43056, 0.09208, 0, 0.51111],\n \"8212\": [0, 0.43056, 0.09208, 0, 1.02222],\n \"8216\": [0, 0.69444, 0.12417, 0, 0.30667],\n \"8217\": [0, 0.69444, 0.12417, 0, 0.30667],\n \"8220\": [0, 0.69444, 0.1685, 0, 0.51444],\n \"8221\": [0, 0.69444, 0.06961, 0, 0.51444],\n \"8463\": [0, 0.68889, 0, 0, 0.54028]\n },\n \"Main-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0, 0, 0.27778],\n \"34\": [0, 0.69444, 0, 0, 0.5],\n \"35\": [0.19444, 0.69444, 0, 0, 0.83334],\n \"36\": [0.05556, 0.75, 0, 0, 0.5],\n \"37\": [0.05556, 0.75, 0, 0, 0.83334],\n \"38\": [0, 0.69444, 0, 0, 0.77778],\n \"39\": [0, 0.69444, 0, 0, 0.27778],\n \"40\": [0.25, 0.75, 0, 0, 0.38889],\n \"41\": [0.25, 0.75, 0, 0, 0.38889],\n \"42\": [0, 0.75, 0, 0, 0.5],\n \"43\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"44\": [0.19444, 0.10556, 0, 0, 0.27778],\n \"45\": [0, 0.43056, 0, 0, 0.33333],\n \"46\": [0, 0.10556, 0, 0, 0.27778],\n \"47\": [0.25, 0.75, 0, 0, 0.5],\n \"48\": [0, 0.64444, 0, 0, 0.5],\n \"49\": [0, 0.64444, 0, 0, 0.5],\n \"50\": [0, 0.64444, 0, 0, 0.5],\n \"51\": [0, 0.64444, 0, 0, 0.5],\n \"52\": [0, 0.64444, 0, 0, 0.5],\n \"53\": [0, 0.64444, 0, 0, 0.5],\n \"54\": [0, 0.64444, 0, 0, 0.5],\n \"55\": [0, 0.64444, 0, 0, 0.5],\n \"56\": [0, 0.64444, 0, 0, 0.5],\n \"57\": [0, 0.64444, 0, 0, 0.5],\n \"58\": [0, 0.43056, 0, 0, 0.27778],\n \"59\": [0.19444, 0.43056, 0, 0, 0.27778],\n \"60\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"61\": [-0.13313, 0.36687, 0, 0, 0.77778],\n \"62\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"63\": [0, 0.69444, 0, 0, 0.47222],\n \"64\": [0, 0.69444, 0, 0, 0.77778],\n \"65\": [0, 0.68333, 0, 0, 0.75],\n \"66\": [0, 0.68333, 0, 0, 0.70834],\n \"67\": [0, 0.68333, 0, 0, 0.72222],\n \"68\": [0, 0.68333, 0, 0, 0.76389],\n \"69\": [0, 0.68333, 0, 0, 0.68056],\n \"70\": [0, 0.68333, 0, 0, 0.65278],\n \"71\": [0, 0.68333, 0, 0, 0.78472],\n \"72\": [0, 0.68333, 0, 0, 0.75],\n \"73\": [0, 0.68333, 0, 0, 0.36111],\n \"74\": [0, 0.68333, 0, 0, 0.51389],\n \"75\": [0, 0.68333, 0, 0, 0.77778],\n \"76\": [0, 0.68333, 0, 0, 0.625],\n \"77\": [0, 0.68333, 0, 0, 0.91667],\n \"78\": [0, 0.68333, 0, 0, 0.75],\n \"79\": [0, 0.68333, 0, 0, 0.77778],\n \"80\": [0, 0.68333, 0, 0, 0.68056],\n \"81\": [0.19444, 0.68333, 0, 0, 0.77778],\n \"82\": [0, 0.68333, 0, 0, 0.73611],\n \"83\": [0, 0.68333, 0, 0, 0.55556],\n \"84\": [0, 0.68333, 0, 0, 0.72222],\n \"85\": [0, 0.68333, 0, 0, 0.75],\n \"86\": [0, 0.68333, 0.01389, 0, 0.75],\n \"87\": [0, 0.68333, 0.01389, 0, 1.02778],\n \"88\": [0, 0.68333, 0, 0, 0.75],\n \"89\": [0, 0.68333, 0.025, 0, 0.75],\n \"90\": [0, 0.68333, 0, 0, 0.61111],\n \"91\": [0.25, 0.75, 0, 0, 0.27778],\n \"92\": [0.25, 0.75, 0, 0, 0.5],\n \"93\": [0.25, 0.75, 0, 0, 0.27778],\n \"94\": [0, 0.69444, 0, 0, 0.5],\n \"95\": [0.31, 0.12056, 0.02778, 0, 0.5],\n \"97\": [0, 0.43056, 0, 0, 0.5],\n \"98\": [0, 0.69444, 0, 0, 0.55556],\n \"99\": [0, 0.43056, 0, 0, 0.44445],\n \"100\": [0, 0.69444, 0, 0, 0.55556],\n \"101\": [0, 0.43056, 0, 0, 0.44445],\n \"102\": [0, 0.69444, 0.07778, 0, 0.30556],\n \"103\": [0.19444, 0.43056, 0.01389, 0, 0.5],\n \"104\": [0, 0.69444, 0, 0, 0.55556],\n \"105\": [0, 0.66786, 0, 0, 0.27778],\n \"106\": [0.19444, 0.66786, 0, 0, 0.30556],\n \"107\": [0, 0.69444, 0, 0, 0.52778],\n \"108\": [0, 0.69444, 0, 0, 0.27778],\n \"109\": [0, 0.43056, 0, 0, 0.83334],\n \"110\": [0, 0.43056, 0, 0, 0.55556],\n \"111\": [0, 0.43056, 0, 0, 0.5],\n \"112\": [0.19444, 0.43056, 0, 0, 0.55556],\n \"113\": [0.19444, 0.43056, 0, 0, 0.52778],\n \"114\": [0, 0.43056, 0, 0, 0.39167],\n \"115\": [0, 0.43056, 0, 0, 0.39445],\n \"116\": [0, 0.61508, 0, 0, 0.38889],\n \"117\": [0, 0.43056, 0, 0, 0.55556],\n \"118\": [0, 0.43056, 0.01389, 0, 0.52778],\n \"119\": [0, 0.43056, 0.01389, 0, 0.72222],\n \"120\": [0, 0.43056, 0, 0, 0.52778],\n \"121\": [0.19444, 0.43056, 0.01389, 0, 0.52778],\n \"122\": [0, 0.43056, 0, 0, 0.44445],\n \"123\": [0.25, 0.75, 0, 0, 0.5],\n \"124\": [0.25, 0.75, 0, 0, 0.27778],\n \"125\": [0.25, 0.75, 0, 0, 0.5],\n \"126\": [0.35, 0.31786, 0, 0, 0.5],\n \"160\": [0, 0, 0, 0, 0.25],\n \"163\": [0, 0.69444, 0, 0, 0.76909],\n \"167\": [0.19444, 0.69444, 0, 0, 0.44445],\n \"168\": [0, 0.66786, 0, 0, 0.5],\n \"172\": [0, 0.43056, 0, 0, 0.66667],\n \"176\": [0, 0.69444, 0, 0, 0.75],\n \"177\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"182\": [0.19444, 0.69444, 0, 0, 0.61111],\n \"184\": [0.17014, 0, 0, 0, 0.44445],\n \"198\": [0, 0.68333, 0, 0, 0.90278],\n \"215\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"216\": [0.04861, 0.73194, 0, 0, 0.77778],\n \"223\": [0, 0.69444, 0, 0, 0.5],\n \"230\": [0, 0.43056, 0, 0, 0.72222],\n \"247\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"248\": [0.09722, 0.52778, 0, 0, 0.5],\n \"305\": [0, 0.43056, 0, 0, 0.27778],\n \"338\": [0, 0.68333, 0, 0, 1.01389],\n \"339\": [0, 0.43056, 0, 0, 0.77778],\n \"567\": [0.19444, 0.43056, 0, 0, 0.30556],\n \"710\": [0, 0.69444, 0, 0, 0.5],\n \"711\": [0, 0.62847, 0, 0, 0.5],\n \"713\": [0, 0.56778, 0, 0, 0.5],\n \"714\": [0, 0.69444, 0, 0, 0.5],\n \"715\": [0, 0.69444, 0, 0, 0.5],\n \"728\": [0, 0.69444, 0, 0, 0.5],\n \"729\": [0, 0.66786, 0, 0, 0.27778],\n \"730\": [0, 0.69444, 0, 0, 0.75],\n \"732\": [0, 0.66786, 0, 0, 0.5],\n \"733\": [0, 0.69444, 0, 0, 0.5],\n \"915\": [0, 0.68333, 0, 0, 0.625],\n \"916\": [0, 0.68333, 0, 0, 0.83334],\n \"920\": [0, 0.68333, 0, 0, 0.77778],\n \"923\": [0, 0.68333, 0, 0, 0.69445],\n \"926\": [0, 0.68333, 0, 0, 0.66667],\n \"928\": [0, 0.68333, 0, 0, 0.75],\n \"931\": [0, 0.68333, 0, 0, 0.72222],\n \"933\": [0, 0.68333, 0, 0, 0.77778],\n \"934\": [0, 0.68333, 0, 0, 0.72222],\n \"936\": [0, 0.68333, 0, 0, 0.77778],\n \"937\": [0, 0.68333, 0, 0, 0.72222],\n \"8211\": [0, 0.43056, 0.02778, 0, 0.5],\n \"8212\": [0, 0.43056, 0.02778, 0, 1.0],\n \"8216\": [0, 0.69444, 0, 0, 0.27778],\n \"8217\": [0, 0.69444, 0, 0, 0.27778],\n \"8220\": [0, 0.69444, 0, 0, 0.5],\n \"8221\": [0, 0.69444, 0, 0, 0.5],\n \"8224\": [0.19444, 0.69444, 0, 0, 0.44445],\n \"8225\": [0.19444, 0.69444, 0, 0, 0.44445],\n \"8230\": [0, 0.123, 0, 0, 1.172],\n \"8242\": [0, 0.55556, 0, 0, 0.275],\n \"8407\": [0, 0.71444, 0.15382, 0, 0.5],\n \"8463\": [0, 0.68889, 0, 0, 0.54028],\n \"8465\": [0, 0.69444, 0, 0, 0.72222],\n \"8467\": [0, 0.69444, 0, 0.11111, 0.41667],\n \"8472\": [0.19444, 0.43056, 0, 0.11111, 0.63646],\n \"8476\": [0, 0.69444, 0, 0, 0.72222],\n \"8501\": [0, 0.69444, 0, 0, 0.61111],\n \"8592\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8593\": [0.19444, 0.69444, 0, 0, 0.5],\n \"8594\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8595\": [0.19444, 0.69444, 0, 0, 0.5],\n \"8596\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8597\": [0.25, 0.75, 0, 0, 0.5],\n \"8598\": [0.19444, 0.69444, 0, 0, 1.0],\n \"8599\": [0.19444, 0.69444, 0, 0, 1.0],\n \"8600\": [0.19444, 0.69444, 0, 0, 1.0],\n \"8601\": [0.19444, 0.69444, 0, 0, 1.0],\n \"8614\": [0.011, 0.511, 0, 0, 1.0],\n \"8617\": [0.011, 0.511, 0, 0, 1.126],\n \"8618\": [0.011, 0.511, 0, 0, 1.126],\n \"8636\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8637\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8640\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8641\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8652\": [0.011, 0.671, 0, 0, 1.0],\n \"8656\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8657\": [0.19444, 0.69444, 0, 0, 0.61111],\n \"8658\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8659\": [0.19444, 0.69444, 0, 0, 0.61111],\n \"8660\": [-0.13313, 0.36687, 0, 0, 1.0],\n \"8661\": [0.25, 0.75, 0, 0, 0.61111],\n \"8704\": [0, 0.69444, 0, 0, 0.55556],\n \"8706\": [0, 0.69444, 0.05556, 0.08334, 0.5309],\n \"8707\": [0, 0.69444, 0, 0, 0.55556],\n \"8709\": [0.05556, 0.75, 0, 0, 0.5],\n \"8711\": [0, 0.68333, 0, 0, 0.83334],\n \"8712\": [0.0391, 0.5391, 0, 0, 0.66667],\n \"8715\": [0.0391, 0.5391, 0, 0, 0.66667],\n \"8722\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8723\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8725\": [0.25, 0.75, 0, 0, 0.5],\n \"8726\": [0.25, 0.75, 0, 0, 0.5],\n \"8727\": [-0.03472, 0.46528, 0, 0, 0.5],\n \"8728\": [-0.05555, 0.44445, 0, 0, 0.5],\n \"8729\": [-0.05555, 0.44445, 0, 0, 0.5],\n \"8730\": [0.2, 0.8, 0, 0, 0.83334],\n \"8733\": [0, 0.43056, 0, 0, 0.77778],\n \"8734\": [0, 0.43056, 0, 0, 1.0],\n \"8736\": [0, 0.69224, 0, 0, 0.72222],\n \"8739\": [0.25, 0.75, 0, 0, 0.27778],\n \"8741\": [0.25, 0.75, 0, 0, 0.5],\n \"8743\": [0, 0.55556, 0, 0, 0.66667],\n \"8744\": [0, 0.55556, 0, 0, 0.66667],\n \"8745\": [0, 0.55556, 0, 0, 0.66667],\n \"8746\": [0, 0.55556, 0, 0, 0.66667],\n \"8747\": [0.19444, 0.69444, 0.11111, 0, 0.41667],\n \"8764\": [-0.13313, 0.36687, 0, 0, 0.77778],\n \"8768\": [0.19444, 0.69444, 0, 0, 0.27778],\n \"8771\": [-0.03625, 0.46375, 0, 0, 0.77778],\n \"8773\": [-0.022, 0.589, 0, 0, 0.778],\n \"8776\": [-0.01688, 0.48312, 0, 0, 0.77778],\n \"8781\": [-0.03625, 0.46375, 0, 0, 0.77778],\n \"8784\": [-0.133, 0.673, 0, 0, 0.778],\n \"8801\": [-0.03625, 0.46375, 0, 0, 0.77778],\n \"8804\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8805\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8810\": [0.0391, 0.5391, 0, 0, 1.0],\n \"8811\": [0.0391, 0.5391, 0, 0, 1.0],\n \"8826\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"8827\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"8834\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"8835\": [0.0391, 0.5391, 0, 0, 0.77778],\n \"8838\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8839\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8846\": [0, 0.55556, 0, 0, 0.66667],\n \"8849\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8850\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"8851\": [0, 0.55556, 0, 0, 0.66667],\n \"8852\": [0, 0.55556, 0, 0, 0.66667],\n \"8853\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8854\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8855\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8856\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8857\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"8866\": [0, 0.69444, 0, 0, 0.61111],\n \"8867\": [0, 0.69444, 0, 0, 0.61111],\n \"8868\": [0, 0.69444, 0, 0, 0.77778],\n \"8869\": [0, 0.69444, 0, 0, 0.77778],\n \"8872\": [0.249, 0.75, 0, 0, 0.867],\n \"8900\": [-0.05555, 0.44445, 0, 0, 0.5],\n \"8901\": [-0.05555, 0.44445, 0, 0, 0.27778],\n \"8902\": [-0.03472, 0.46528, 0, 0, 0.5],\n \"8904\": [0.005, 0.505, 0, 0, 0.9],\n \"8942\": [0.03, 0.903, 0, 0, 0.278],\n \"8943\": [-0.19, 0.313, 0, 0, 1.172],\n \"8945\": [-0.1, 0.823, 0, 0, 1.282],\n \"8968\": [0.25, 0.75, 0, 0, 0.44445],\n \"8969\": [0.25, 0.75, 0, 0, 0.44445],\n \"8970\": [0.25, 0.75, 0, 0, 0.44445],\n \"8971\": [0.25, 0.75, 0, 0, 0.44445],\n \"8994\": [-0.14236, 0.35764, 0, 0, 1.0],\n \"8995\": [-0.14236, 0.35764, 0, 0, 1.0],\n \"9136\": [0.244, 0.744, 0, 0, 0.412],\n \"9137\": [0.244, 0.745, 0, 0, 0.412],\n \"9651\": [0.19444, 0.69444, 0, 0, 0.88889],\n \"9657\": [-0.03472, 0.46528, 0, 0, 0.5],\n \"9661\": [0.19444, 0.69444, 0, 0, 0.88889],\n \"9667\": [-0.03472, 0.46528, 0, 0, 0.5],\n \"9711\": [0.19444, 0.69444, 0, 0, 1.0],\n \"9824\": [0.12963, 0.69444, 0, 0, 0.77778],\n \"9825\": [0.12963, 0.69444, 0, 0, 0.77778],\n \"9826\": [0.12963, 0.69444, 0, 0, 0.77778],\n \"9827\": [0.12963, 0.69444, 0, 0, 0.77778],\n \"9837\": [0, 0.75, 0, 0, 0.38889],\n \"9838\": [0.19444, 0.69444, 0, 0, 0.38889],\n \"9839\": [0.19444, 0.69444, 0, 0, 0.38889],\n \"10216\": [0.25, 0.75, 0, 0, 0.38889],\n \"10217\": [0.25, 0.75, 0, 0, 0.38889],\n \"10222\": [0.244, 0.744, 0, 0, 0.412],\n \"10223\": [0.244, 0.745, 0, 0, 0.412],\n \"10229\": [0.011, 0.511, 0, 0, 1.609],\n \"10230\": [0.011, 0.511, 0, 0, 1.638],\n \"10231\": [0.011, 0.511, 0, 0, 1.859],\n \"10232\": [0.024, 0.525, 0, 0, 1.609],\n \"10233\": [0.024, 0.525, 0, 0, 1.638],\n \"10234\": [0.024, 0.525, 0, 0, 1.858],\n \"10236\": [0.011, 0.511, 0, 0, 1.638],\n \"10815\": [0, 0.68333, 0, 0, 0.75],\n \"10927\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"10928\": [0.13597, 0.63597, 0, 0, 0.77778],\n \"57376\": [0.19444, 0.69444, 0, 0, 0]\n },\n \"Math-BoldItalic\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"48\": [0, 0.44444, 0, 0, 0.575],\n \"49\": [0, 0.44444, 0, 0, 0.575],\n \"50\": [0, 0.44444, 0, 0, 0.575],\n \"51\": [0.19444, 0.44444, 0, 0, 0.575],\n \"52\": [0.19444, 0.44444, 0, 0, 0.575],\n \"53\": [0.19444, 0.44444, 0, 0, 0.575],\n \"54\": [0, 0.64444, 0, 0, 0.575],\n \"55\": [0.19444, 0.44444, 0, 0, 0.575],\n \"56\": [0, 0.64444, 0, 0, 0.575],\n \"57\": [0.19444, 0.44444, 0, 0, 0.575],\n \"65\": [0, 0.68611, 0, 0, 0.86944],\n \"66\": [0, 0.68611, 0.04835, 0, 0.8664],\n \"67\": [0, 0.68611, 0.06979, 0, 0.81694],\n \"68\": [0, 0.68611, 0.03194, 0, 0.93812],\n \"69\": [0, 0.68611, 0.05451, 0, 0.81007],\n \"70\": [0, 0.68611, 0.15972, 0, 0.68889],\n \"71\": [0, 0.68611, 0, 0, 0.88673],\n \"72\": [0, 0.68611, 0.08229, 0, 0.98229],\n \"73\": [0, 0.68611, 0.07778, 0, 0.51111],\n \"74\": [0, 0.68611, 0.10069, 0, 0.63125],\n \"75\": [0, 0.68611, 0.06979, 0, 0.97118],\n \"76\": [0, 0.68611, 0, 0, 0.75555],\n \"77\": [0, 0.68611, 0.11424, 0, 1.14201],\n \"78\": [0, 0.68611, 0.11424, 0, 0.95034],\n \"79\": [0, 0.68611, 0.03194, 0, 0.83666],\n \"80\": [0, 0.68611, 0.15972, 0, 0.72309],\n \"81\": [0.19444, 0.68611, 0, 0, 0.86861],\n \"82\": [0, 0.68611, 0.00421, 0, 0.87235],\n \"83\": [0, 0.68611, 0.05382, 0, 0.69271],\n \"84\": [0, 0.68611, 0.15972, 0, 0.63663],\n \"85\": [0, 0.68611, 0.11424, 0, 0.80027],\n \"86\": [0, 0.68611, 0.25555, 0, 0.67778],\n \"87\": [0, 0.68611, 0.15972, 0, 1.09305],\n \"88\": [0, 0.68611, 0.07778, 0, 0.94722],\n \"89\": [0, 0.68611, 0.25555, 0, 0.67458],\n \"90\": [0, 0.68611, 0.06979, 0, 0.77257],\n \"97\": [0, 0.44444, 0, 0, 0.63287],\n \"98\": [0, 0.69444, 0, 0, 0.52083],\n \"99\": [0, 0.44444, 0, 0, 0.51342],\n \"100\": [0, 0.69444, 0, 0, 0.60972],\n \"101\": [0, 0.44444, 0, 0, 0.55361],\n \"102\": [0.19444, 0.69444, 0.11042, 0, 0.56806],\n \"103\": [0.19444, 0.44444, 0.03704, 0, 0.5449],\n \"104\": [0, 0.69444, 0, 0, 0.66759],\n \"105\": [0, 0.69326, 0, 0, 0.4048],\n \"106\": [0.19444, 0.69326, 0.0622, 0, 0.47083],\n \"107\": [0, 0.69444, 0.01852, 0, 0.6037],\n \"108\": [0, 0.69444, 0.0088, 0, 0.34815],\n \"109\": [0, 0.44444, 0, 0, 1.0324],\n \"110\": [0, 0.44444, 0, 0, 0.71296],\n \"111\": [0, 0.44444, 0, 0, 0.58472],\n \"112\": [0.19444, 0.44444, 0, 0, 0.60092],\n \"113\": [0.19444, 0.44444, 0.03704, 0, 0.54213],\n \"114\": [0, 0.44444, 0.03194, 0, 0.5287],\n \"115\": [0, 0.44444, 0, 0, 0.53125],\n \"116\": [0, 0.63492, 0, 0, 0.41528],\n \"117\": [0, 0.44444, 0, 0, 0.68102],\n \"118\": [0, 0.44444, 0.03704, 0, 0.56666],\n \"119\": [0, 0.44444, 0.02778, 0, 0.83148],\n \"120\": [0, 0.44444, 0, 0, 0.65903],\n \"121\": [0.19444, 0.44444, 0.03704, 0, 0.59028],\n \"122\": [0, 0.44444, 0.04213, 0, 0.55509],\n \"160\": [0, 0, 0, 0, 0.25],\n \"915\": [0, 0.68611, 0.15972, 0, 0.65694],\n \"916\": [0, 0.68611, 0, 0, 0.95833],\n \"920\": [0, 0.68611, 0.03194, 0, 0.86722],\n \"923\": [0, 0.68611, 0, 0, 0.80555],\n \"926\": [0, 0.68611, 0.07458, 0, 0.84125],\n \"928\": [0, 0.68611, 0.08229, 0, 0.98229],\n \"931\": [0, 0.68611, 0.05451, 0, 0.88507],\n \"933\": [0, 0.68611, 0.15972, 0, 0.67083],\n \"934\": [0, 0.68611, 0, 0, 0.76666],\n \"936\": [0, 0.68611, 0.11653, 0, 0.71402],\n \"937\": [0, 0.68611, 0.04835, 0, 0.8789],\n \"945\": [0, 0.44444, 0, 0, 0.76064],\n \"946\": [0.19444, 0.69444, 0.03403, 0, 0.65972],\n \"947\": [0.19444, 0.44444, 0.06389, 0, 0.59003],\n \"948\": [0, 0.69444, 0.03819, 0, 0.52222],\n \"949\": [0, 0.44444, 0, 0, 0.52882],\n \"950\": [0.19444, 0.69444, 0.06215, 0, 0.50833],\n \"951\": [0.19444, 0.44444, 0.03704, 0, 0.6],\n \"952\": [0, 0.69444, 0.03194, 0, 0.5618],\n \"953\": [0, 0.44444, 0, 0, 0.41204],\n \"954\": [0, 0.44444, 0, 0, 0.66759],\n \"955\": [0, 0.69444, 0, 0, 0.67083],\n \"956\": [0.19444, 0.44444, 0, 0, 0.70787],\n \"957\": [0, 0.44444, 0.06898, 0, 0.57685],\n \"958\": [0.19444, 0.69444, 0.03021, 0, 0.50833],\n \"959\": [0, 0.44444, 0, 0, 0.58472],\n \"960\": [0, 0.44444, 0.03704, 0, 0.68241],\n \"961\": [0.19444, 0.44444, 0, 0, 0.6118],\n \"962\": [0.09722, 0.44444, 0.07917, 0, 0.42361],\n \"963\": [0, 0.44444, 0.03704, 0, 0.68588],\n \"964\": [0, 0.44444, 0.13472, 0, 0.52083],\n \"965\": [0, 0.44444, 0.03704, 0, 0.63055],\n \"966\": [0.19444, 0.44444, 0, 0, 0.74722],\n \"967\": [0.19444, 0.44444, 0, 0, 0.71805],\n \"968\": [0.19444, 0.69444, 0.03704, 0, 0.75833],\n \"969\": [0, 0.44444, 0.03704, 0, 0.71782],\n \"977\": [0, 0.69444, 0, 0, 0.69155],\n \"981\": [0.19444, 0.69444, 0, 0, 0.7125],\n \"982\": [0, 0.44444, 0.03194, 0, 0.975],\n \"1009\": [0.19444, 0.44444, 0, 0, 0.6118],\n \"1013\": [0, 0.44444, 0, 0, 0.48333],\n \"57649\": [0, 0.44444, 0, 0, 0.39352],\n \"57911\": [0.19444, 0.44444, 0, 0, 0.43889]\n },\n \"Math-Italic\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"48\": [0, 0.43056, 0, 0, 0.5],\n \"49\": [0, 0.43056, 0, 0, 0.5],\n \"50\": [0, 0.43056, 0, 0, 0.5],\n \"51\": [0.19444, 0.43056, 0, 0, 0.5],\n \"52\": [0.19444, 0.43056, 0, 0, 0.5],\n \"53\": [0.19444, 0.43056, 0, 0, 0.5],\n \"54\": [0, 0.64444, 0, 0, 0.5],\n \"55\": [0.19444, 0.43056, 0, 0, 0.5],\n \"56\": [0, 0.64444, 0, 0, 0.5],\n \"57\": [0.19444, 0.43056, 0, 0, 0.5],\n \"65\": [0, 0.68333, 0, 0.13889, 0.75],\n \"66\": [0, 0.68333, 0.05017, 0.08334, 0.75851],\n \"67\": [0, 0.68333, 0.07153, 0.08334, 0.71472],\n \"68\": [0, 0.68333, 0.02778, 0.05556, 0.82792],\n \"69\": [0, 0.68333, 0.05764, 0.08334, 0.7382],\n \"70\": [0, 0.68333, 0.13889, 0.08334, 0.64306],\n \"71\": [0, 0.68333, 0, 0.08334, 0.78625],\n \"72\": [0, 0.68333, 0.08125, 0.05556, 0.83125],\n \"73\": [0, 0.68333, 0.07847, 0.11111, 0.43958],\n \"74\": [0, 0.68333, 0.09618, 0.16667, 0.55451],\n \"75\": [0, 0.68333, 0.07153, 0.05556, 0.84931],\n \"76\": [0, 0.68333, 0, 0.02778, 0.68056],\n \"77\": [0, 0.68333, 0.10903, 0.08334, 0.97014],\n \"78\": [0, 0.68333, 0.10903, 0.08334, 0.80347],\n \"79\": [0, 0.68333, 0.02778, 0.08334, 0.76278],\n \"80\": [0, 0.68333, 0.13889, 0.08334, 0.64201],\n \"81\": [0.19444, 0.68333, 0, 0.08334, 0.79056],\n \"82\": [0, 0.68333, 0.00773, 0.08334, 0.75929],\n \"83\": [0, 0.68333, 0.05764, 0.08334, 0.6132],\n \"84\": [0, 0.68333, 0.13889, 0.08334, 0.58438],\n \"85\": [0, 0.68333, 0.10903, 0.02778, 0.68278],\n \"86\": [0, 0.68333, 0.22222, 0, 0.58333],\n \"87\": [0, 0.68333, 0.13889, 0, 0.94445],\n \"88\": [0, 0.68333, 0.07847, 0.08334, 0.82847],\n \"89\": [0, 0.68333, 0.22222, 0, 0.58056],\n \"90\": [0, 0.68333, 0.07153, 0.08334, 0.68264],\n \"97\": [0, 0.43056, 0, 0, 0.52859],\n \"98\": [0, 0.69444, 0, 0, 0.42917],\n \"99\": [0, 0.43056, 0, 0.05556, 0.43276],\n \"100\": [0, 0.69444, 0, 0.16667, 0.52049],\n \"101\": [0, 0.43056, 0, 0.05556, 0.46563],\n \"102\": [0.19444, 0.69444, 0.10764, 0.16667, 0.48959],\n \"103\": [0.19444, 0.43056, 0.03588, 0.02778, 0.47697],\n \"104\": [0, 0.69444, 0, 0, 0.57616],\n \"105\": [0, 0.65952, 0, 0, 0.34451],\n \"106\": [0.19444, 0.65952, 0.05724, 0, 0.41181],\n \"107\": [0, 0.69444, 0.03148, 0, 0.5206],\n \"108\": [0, 0.69444, 0.01968, 0.08334, 0.29838],\n \"109\": [0, 0.43056, 0, 0, 0.87801],\n \"110\": [0, 0.43056, 0, 0, 0.60023],\n \"111\": [0, 0.43056, 0, 0.05556, 0.48472],\n \"112\": [0.19444, 0.43056, 0, 0.08334, 0.50313],\n \"113\": [0.19444, 0.43056, 0.03588, 0.08334, 0.44641],\n \"114\": [0, 0.43056, 0.02778, 0.05556, 0.45116],\n \"115\": [0, 0.43056, 0, 0.05556, 0.46875],\n \"116\": [0, 0.61508, 0, 0.08334, 0.36111],\n \"117\": [0, 0.43056, 0, 0.02778, 0.57246],\n \"118\": [0, 0.43056, 0.03588, 0.02778, 0.48472],\n \"119\": [0, 0.43056, 0.02691, 0.08334, 0.71592],\n \"120\": [0, 0.43056, 0, 0.02778, 0.57153],\n \"121\": [0.19444, 0.43056, 0.03588, 0.05556, 0.49028],\n \"122\": [0, 0.43056, 0.04398, 0.05556, 0.46505],\n \"160\": [0, 0, 0, 0, 0.25],\n \"915\": [0, 0.68333, 0.13889, 0.08334, 0.61528],\n \"916\": [0, 0.68333, 0, 0.16667, 0.83334],\n \"920\": [0, 0.68333, 0.02778, 0.08334, 0.76278],\n \"923\": [0, 0.68333, 0, 0.16667, 0.69445],\n \"926\": [0, 0.68333, 0.07569, 0.08334, 0.74236],\n \"928\": [0, 0.68333, 0.08125, 0.05556, 0.83125],\n \"931\": [0, 0.68333, 0.05764, 0.08334, 0.77986],\n \"933\": [0, 0.68333, 0.13889, 0.05556, 0.58333],\n \"934\": [0, 0.68333, 0, 0.08334, 0.66667],\n \"936\": [0, 0.68333, 0.11, 0.05556, 0.61222],\n \"937\": [0, 0.68333, 0.05017, 0.08334, 0.7724],\n \"945\": [0, 0.43056, 0.0037, 0.02778, 0.6397],\n \"946\": [0.19444, 0.69444, 0.05278, 0.08334, 0.56563],\n \"947\": [0.19444, 0.43056, 0.05556, 0, 0.51773],\n \"948\": [0, 0.69444, 0.03785, 0.05556, 0.44444],\n \"949\": [0, 0.43056, 0, 0.08334, 0.46632],\n \"950\": [0.19444, 0.69444, 0.07378, 0.08334, 0.4375],\n \"951\": [0.19444, 0.43056, 0.03588, 0.05556, 0.49653],\n \"952\": [0, 0.69444, 0.02778, 0.08334, 0.46944],\n \"953\": [0, 0.43056, 0, 0.05556, 0.35394],\n \"954\": [0, 0.43056, 0, 0, 0.57616],\n \"955\": [0, 0.69444, 0, 0, 0.58334],\n \"956\": [0.19444, 0.43056, 0, 0.02778, 0.60255],\n \"957\": [0, 0.43056, 0.06366, 0.02778, 0.49398],\n \"958\": [0.19444, 0.69444, 0.04601, 0.11111, 0.4375],\n \"959\": [0, 0.43056, 0, 0.05556, 0.48472],\n \"960\": [0, 0.43056, 0.03588, 0, 0.57003],\n \"961\": [0.19444, 0.43056, 0, 0.08334, 0.51702],\n \"962\": [0.09722, 0.43056, 0.07986, 0.08334, 0.36285],\n \"963\": [0, 0.43056, 0.03588, 0, 0.57141],\n \"964\": [0, 0.43056, 0.1132, 0.02778, 0.43715],\n \"965\": [0, 0.43056, 0.03588, 0.02778, 0.54028],\n \"966\": [0.19444, 0.43056, 0, 0.08334, 0.65417],\n \"967\": [0.19444, 0.43056, 0, 0.05556, 0.62569],\n \"968\": [0.19444, 0.69444, 0.03588, 0.11111, 0.65139],\n \"969\": [0, 0.43056, 0.03588, 0, 0.62245],\n \"977\": [0, 0.69444, 0, 0.08334, 0.59144],\n \"981\": [0.19444, 0.69444, 0, 0.08334, 0.59583],\n \"982\": [0, 0.43056, 0.02778, 0, 0.82813],\n \"1009\": [0.19444, 0.43056, 0, 0.08334, 0.51702],\n \"1013\": [0, 0.43056, 0, 0.05556, 0.4059],\n \"57649\": [0, 0.43056, 0, 0.02778, 0.32246],\n \"57911\": [0.19444, 0.43056, 0, 0.08334, 0.38403]\n },\n \"SansSerif-Bold\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0, 0, 0.36667],\n \"34\": [0, 0.69444, 0, 0, 0.55834],\n \"35\": [0.19444, 0.69444, 0, 0, 0.91667],\n \"36\": [0.05556, 0.75, 0, 0, 0.55],\n \"37\": [0.05556, 0.75, 0, 0, 1.02912],\n \"38\": [0, 0.69444, 0, 0, 0.83056],\n \"39\": [0, 0.69444, 0, 0, 0.30556],\n \"40\": [0.25, 0.75, 0, 0, 0.42778],\n \"41\": [0.25, 0.75, 0, 0, 0.42778],\n \"42\": [0, 0.75, 0, 0, 0.55],\n \"43\": [0.11667, 0.61667, 0, 0, 0.85556],\n \"44\": [0.10556, 0.13056, 0, 0, 0.30556],\n \"45\": [0, 0.45833, 0, 0, 0.36667],\n \"46\": [0, 0.13056, 0, 0, 0.30556],\n \"47\": [0.25, 0.75, 0, 0, 0.55],\n \"48\": [0, 0.69444, 0, 0, 0.55],\n \"49\": [0, 0.69444, 0, 0, 0.55],\n \"50\": [0, 0.69444, 0, 0, 0.55],\n \"51\": [0, 0.69444, 0, 0, 0.55],\n \"52\": [0, 0.69444, 0, 0, 0.55],\n \"53\": [0, 0.69444, 0, 0, 0.55],\n \"54\": [0, 0.69444, 0, 0, 0.55],\n \"55\": [0, 0.69444, 0, 0, 0.55],\n \"56\": [0, 0.69444, 0, 0, 0.55],\n \"57\": [0, 0.69444, 0, 0, 0.55],\n \"58\": [0, 0.45833, 0, 0, 0.30556],\n \"59\": [0.10556, 0.45833, 0, 0, 0.30556],\n \"61\": [-0.09375, 0.40625, 0, 0, 0.85556],\n \"63\": [0, 0.69444, 0, 0, 0.51945],\n \"64\": [0, 0.69444, 0, 0, 0.73334],\n \"65\": [0, 0.69444, 0, 0, 0.73334],\n \"66\": [0, 0.69444, 0, 0, 0.73334],\n \"67\": [0, 0.69444, 0, 0, 0.70278],\n \"68\": [0, 0.69444, 0, 0, 0.79445],\n \"69\": [0, 0.69444, 0, 0, 0.64167],\n \"70\": [0, 0.69444, 0, 0, 0.61111],\n \"71\": [0, 0.69444, 0, 0, 0.73334],\n \"72\": [0, 0.69444, 0, 0, 0.79445],\n \"73\": [0, 0.69444, 0, 0, 0.33056],\n \"74\": [0, 0.69444, 0, 0, 0.51945],\n \"75\": [0, 0.69444, 0, 0, 0.76389],\n \"76\": [0, 0.69444, 0, 0, 0.58056],\n \"77\": [0, 0.69444, 0, 0, 0.97778],\n \"78\": [0, 0.69444, 0, 0, 0.79445],\n \"79\": [0, 0.69444, 0, 0, 0.79445],\n \"80\": [0, 0.69444, 0, 0, 0.70278],\n \"81\": [0.10556, 0.69444, 0, 0, 0.79445],\n \"82\": [0, 0.69444, 0, 0, 0.70278],\n \"83\": [0, 0.69444, 0, 0, 0.61111],\n \"84\": [0, 0.69444, 0, 0, 0.73334],\n \"85\": [0, 0.69444, 0, 0, 0.76389],\n \"86\": [0, 0.69444, 0.01528, 0, 0.73334],\n \"87\": [0, 0.69444, 0.01528, 0, 1.03889],\n \"88\": [0, 0.69444, 0, 0, 0.73334],\n \"89\": [0, 0.69444, 0.0275, 0, 0.73334],\n \"90\": [0, 0.69444, 0, 0, 0.67223],\n \"91\": [0.25, 0.75, 0, 0, 0.34306],\n \"93\": [0.25, 0.75, 0, 0, 0.34306],\n \"94\": [0, 0.69444, 0, 0, 0.55],\n \"95\": [0.35, 0.10833, 0.03056, 0, 0.55],\n \"97\": [0, 0.45833, 0, 0, 0.525],\n \"98\": [0, 0.69444, 0, 0, 0.56111],\n \"99\": [0, 0.45833, 0, 0, 0.48889],\n \"100\": [0, 0.69444, 0, 0, 0.56111],\n \"101\": [0, 0.45833, 0, 0, 0.51111],\n \"102\": [0, 0.69444, 0.07639, 0, 0.33611],\n \"103\": [0.19444, 0.45833, 0.01528, 0, 0.55],\n \"104\": [0, 0.69444, 0, 0, 0.56111],\n \"105\": [0, 0.69444, 0, 0, 0.25556],\n \"106\": [0.19444, 0.69444, 0, 0, 0.28611],\n \"107\": [0, 0.69444, 0, 0, 0.53056],\n \"108\": [0, 0.69444, 0, 0, 0.25556],\n \"109\": [0, 0.45833, 0, 0, 0.86667],\n \"110\": [0, 0.45833, 0, 0, 0.56111],\n \"111\": [0, 0.45833, 0, 0, 0.55],\n \"112\": [0.19444, 0.45833, 0, 0, 0.56111],\n \"113\": [0.19444, 0.45833, 0, 0, 0.56111],\n \"114\": [0, 0.45833, 0.01528, 0, 0.37222],\n \"115\": [0, 0.45833, 0, 0, 0.42167],\n \"116\": [0, 0.58929, 0, 0, 0.40417],\n \"117\": [0, 0.45833, 0, 0, 0.56111],\n \"118\": [0, 0.45833, 0.01528, 0, 0.5],\n \"119\": [0, 0.45833, 0.01528, 0, 0.74445],\n \"120\": [0, 0.45833, 0, 0, 0.5],\n \"121\": [0.19444, 0.45833, 0.01528, 0, 0.5],\n \"122\": [0, 0.45833, 0, 0, 0.47639],\n \"126\": [0.35, 0.34444, 0, 0, 0.55],\n \"160\": [0, 0, 0, 0, 0.25],\n \"168\": [0, 0.69444, 0, 0, 0.55],\n \"176\": [0, 0.69444, 0, 0, 0.73334],\n \"180\": [0, 0.69444, 0, 0, 0.55],\n \"184\": [0.17014, 0, 0, 0, 0.48889],\n \"305\": [0, 0.45833, 0, 0, 0.25556],\n \"567\": [0.19444, 0.45833, 0, 0, 0.28611],\n \"710\": [0, 0.69444, 0, 0, 0.55],\n \"711\": [0, 0.63542, 0, 0, 0.55],\n \"713\": [0, 0.63778, 0, 0, 0.55],\n \"728\": [0, 0.69444, 0, 0, 0.55],\n \"729\": [0, 0.69444, 0, 0, 0.30556],\n \"730\": [0, 0.69444, 0, 0, 0.73334],\n \"732\": [0, 0.69444, 0, 0, 0.55],\n \"733\": [0, 0.69444, 0, 0, 0.55],\n \"915\": [0, 0.69444, 0, 0, 0.58056],\n \"916\": [0, 0.69444, 0, 0, 0.91667],\n \"920\": [0, 0.69444, 0, 0, 0.85556],\n \"923\": [0, 0.69444, 0, 0, 0.67223],\n \"926\": [0, 0.69444, 0, 0, 0.73334],\n \"928\": [0, 0.69444, 0, 0, 0.79445],\n \"931\": [0, 0.69444, 0, 0, 0.79445],\n \"933\": [0, 0.69444, 0, 0, 0.85556],\n \"934\": [0, 0.69444, 0, 0, 0.79445],\n \"936\": [0, 0.69444, 0, 0, 0.85556],\n \"937\": [0, 0.69444, 0, 0, 0.79445],\n \"8211\": [0, 0.45833, 0.03056, 0, 0.55],\n \"8212\": [0, 0.45833, 0.03056, 0, 1.10001],\n \"8216\": [0, 0.69444, 0, 0, 0.30556],\n \"8217\": [0, 0.69444, 0, 0, 0.30556],\n \"8220\": [0, 0.69444, 0, 0, 0.55834],\n \"8221\": [0, 0.69444, 0, 0, 0.55834]\n },\n \"SansSerif-Italic\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0.05733, 0, 0.31945],\n \"34\": [0, 0.69444, 0.00316, 0, 0.5],\n \"35\": [0.19444, 0.69444, 0.05087, 0, 0.83334],\n \"36\": [0.05556, 0.75, 0.11156, 0, 0.5],\n \"37\": [0.05556, 0.75, 0.03126, 0, 0.83334],\n \"38\": [0, 0.69444, 0.03058, 0, 0.75834],\n \"39\": [0, 0.69444, 0.07816, 0, 0.27778],\n \"40\": [0.25, 0.75, 0.13164, 0, 0.38889],\n \"41\": [0.25, 0.75, 0.02536, 0, 0.38889],\n \"42\": [0, 0.75, 0.11775, 0, 0.5],\n \"43\": [0.08333, 0.58333, 0.02536, 0, 0.77778],\n \"44\": [0.125, 0.08333, 0, 0, 0.27778],\n \"45\": [0, 0.44444, 0.01946, 0, 0.33333],\n \"46\": [0, 0.08333, 0, 0, 0.27778],\n \"47\": [0.25, 0.75, 0.13164, 0, 0.5],\n \"48\": [0, 0.65556, 0.11156, 0, 0.5],\n \"49\": [0, 0.65556, 0.11156, 0, 0.5],\n \"50\": [0, 0.65556, 0.11156, 0, 0.5],\n \"51\": [0, 0.65556, 0.11156, 0, 0.5],\n \"52\": [0, 0.65556, 0.11156, 0, 0.5],\n \"53\": [0, 0.65556, 0.11156, 0, 0.5],\n \"54\": [0, 0.65556, 0.11156, 0, 0.5],\n \"55\": [0, 0.65556, 0.11156, 0, 0.5],\n \"56\": [0, 0.65556, 0.11156, 0, 0.5],\n \"57\": [0, 0.65556, 0.11156, 0, 0.5],\n \"58\": [0, 0.44444, 0.02502, 0, 0.27778],\n \"59\": [0.125, 0.44444, 0.02502, 0, 0.27778],\n \"61\": [-0.13, 0.37, 0.05087, 0, 0.77778],\n \"63\": [0, 0.69444, 0.11809, 0, 0.47222],\n \"64\": [0, 0.69444, 0.07555, 0, 0.66667],\n \"65\": [0, 0.69444, 0, 0, 0.66667],\n \"66\": [0, 0.69444, 0.08293, 0, 0.66667],\n \"67\": [0, 0.69444, 0.11983, 0, 0.63889],\n \"68\": [0, 0.69444, 0.07555, 0, 0.72223],\n \"69\": [0, 0.69444, 0.11983, 0, 0.59722],\n \"70\": [0, 0.69444, 0.13372, 0, 0.56945],\n \"71\": [0, 0.69444, 0.11983, 0, 0.66667],\n \"72\": [0, 0.69444, 0.08094, 0, 0.70834],\n \"73\": [0, 0.69444, 0.13372, 0, 0.27778],\n \"74\": [0, 0.69444, 0.08094, 0, 0.47222],\n \"75\": [0, 0.69444, 0.11983, 0, 0.69445],\n \"76\": [0, 0.69444, 0, 0, 0.54167],\n \"77\": [0, 0.69444, 0.08094, 0, 0.875],\n \"78\": [0, 0.69444, 0.08094, 0, 0.70834],\n \"79\": [0, 0.69444, 0.07555, 0, 0.73611],\n \"80\": [0, 0.69444, 0.08293, 0, 0.63889],\n \"81\": [0.125, 0.69444, 0.07555, 0, 0.73611],\n \"82\": [0, 0.69444, 0.08293, 0, 0.64584],\n \"83\": [0, 0.69444, 0.09205, 0, 0.55556],\n \"84\": [0, 0.69444, 0.13372, 0, 0.68056],\n \"85\": [0, 0.69444, 0.08094, 0, 0.6875],\n \"86\": [0, 0.69444, 0.1615, 0, 0.66667],\n \"87\": [0, 0.69444, 0.1615, 0, 0.94445],\n \"88\": [0, 0.69444, 0.13372, 0, 0.66667],\n \"89\": [0, 0.69444, 0.17261, 0, 0.66667],\n \"90\": [0, 0.69444, 0.11983, 0, 0.61111],\n \"91\": [0.25, 0.75, 0.15942, 0, 0.28889],\n \"93\": [0.25, 0.75, 0.08719, 0, 0.28889],\n \"94\": [0, 0.69444, 0.0799, 0, 0.5],\n \"95\": [0.35, 0.09444, 0.08616, 0, 0.5],\n \"97\": [0, 0.44444, 0.00981, 0, 0.48056],\n \"98\": [0, 0.69444, 0.03057, 0, 0.51667],\n \"99\": [0, 0.44444, 0.08336, 0, 0.44445],\n \"100\": [0, 0.69444, 0.09483, 0, 0.51667],\n \"101\": [0, 0.44444, 0.06778, 0, 0.44445],\n \"102\": [0, 0.69444, 0.21705, 0, 0.30556],\n \"103\": [0.19444, 0.44444, 0.10836, 0, 0.5],\n \"104\": [0, 0.69444, 0.01778, 0, 0.51667],\n \"105\": [0, 0.67937, 0.09718, 0, 0.23889],\n \"106\": [0.19444, 0.67937, 0.09162, 0, 0.26667],\n \"107\": [0, 0.69444, 0.08336, 0, 0.48889],\n \"108\": [0, 0.69444, 0.09483, 0, 0.23889],\n \"109\": [0, 0.44444, 0.01778, 0, 0.79445],\n \"110\": [0, 0.44444, 0.01778, 0, 0.51667],\n \"111\": [0, 0.44444, 0.06613, 0, 0.5],\n \"112\": [0.19444, 0.44444, 0.0389, 0, 0.51667],\n \"113\": [0.19444, 0.44444, 0.04169, 0, 0.51667],\n \"114\": [0, 0.44444, 0.10836, 0, 0.34167],\n \"115\": [0, 0.44444, 0.0778, 0, 0.38333],\n \"116\": [0, 0.57143, 0.07225, 0, 0.36111],\n \"117\": [0, 0.44444, 0.04169, 0, 0.51667],\n \"118\": [0, 0.44444, 0.10836, 0, 0.46111],\n \"119\": [0, 0.44444, 0.10836, 0, 0.68334],\n \"120\": [0, 0.44444, 0.09169, 0, 0.46111],\n \"121\": [0.19444, 0.44444, 0.10836, 0, 0.46111],\n \"122\": [0, 0.44444, 0.08752, 0, 0.43472],\n \"126\": [0.35, 0.32659, 0.08826, 0, 0.5],\n \"160\": [0, 0, 0, 0, 0.25],\n \"168\": [0, 0.67937, 0.06385, 0, 0.5],\n \"176\": [0, 0.69444, 0, 0, 0.73752],\n \"184\": [0.17014, 0, 0, 0, 0.44445],\n \"305\": [0, 0.44444, 0.04169, 0, 0.23889],\n \"567\": [0.19444, 0.44444, 0.04169, 0, 0.26667],\n \"710\": [0, 0.69444, 0.0799, 0, 0.5],\n \"711\": [0, 0.63194, 0.08432, 0, 0.5],\n \"713\": [0, 0.60889, 0.08776, 0, 0.5],\n \"714\": [0, 0.69444, 0.09205, 0, 0.5],\n \"715\": [0, 0.69444, 0, 0, 0.5],\n \"728\": [0, 0.69444, 0.09483, 0, 0.5],\n \"729\": [0, 0.67937, 0.07774, 0, 0.27778],\n \"730\": [0, 0.69444, 0, 0, 0.73752],\n \"732\": [0, 0.67659, 0.08826, 0, 0.5],\n \"733\": [0, 0.69444, 0.09205, 0, 0.5],\n \"915\": [0, 0.69444, 0.13372, 0, 0.54167],\n \"916\": [0, 0.69444, 0, 0, 0.83334],\n \"920\": [0, 0.69444, 0.07555, 0, 0.77778],\n \"923\": [0, 0.69444, 0, 0, 0.61111],\n \"926\": [0, 0.69444, 0.12816, 0, 0.66667],\n \"928\": [0, 0.69444, 0.08094, 0, 0.70834],\n \"931\": [0, 0.69444, 0.11983, 0, 0.72222],\n \"933\": [0, 0.69444, 0.09031, 0, 0.77778],\n \"934\": [0, 0.69444, 0.04603, 0, 0.72222],\n \"936\": [0, 0.69444, 0.09031, 0, 0.77778],\n \"937\": [0, 0.69444, 0.08293, 0, 0.72222],\n \"8211\": [0, 0.44444, 0.08616, 0, 0.5],\n \"8212\": [0, 0.44444, 0.08616, 0, 1.0],\n \"8216\": [0, 0.69444, 0.07816, 0, 0.27778],\n \"8217\": [0, 0.69444, 0.07816, 0, 0.27778],\n \"8220\": [0, 0.69444, 0.14205, 0, 0.5],\n \"8221\": [0, 0.69444, 0.00316, 0, 0.5]\n },\n \"SansSerif-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"33\": [0, 0.69444, 0, 0, 0.31945],\n \"34\": [0, 0.69444, 0, 0, 0.5],\n \"35\": [0.19444, 0.69444, 0, 0, 0.83334],\n \"36\": [0.05556, 0.75, 0, 0, 0.5],\n \"37\": [0.05556, 0.75, 0, 0, 0.83334],\n \"38\": [0, 0.69444, 0, 0, 0.75834],\n \"39\": [0, 0.69444, 0, 0, 0.27778],\n \"40\": [0.25, 0.75, 0, 0, 0.38889],\n \"41\": [0.25, 0.75, 0, 0, 0.38889],\n \"42\": [0, 0.75, 0, 0, 0.5],\n \"43\": [0.08333, 0.58333, 0, 0, 0.77778],\n \"44\": [0.125, 0.08333, 0, 0, 0.27778],\n \"45\": [0, 0.44444, 0, 0, 0.33333],\n \"46\": [0, 0.08333, 0, 0, 0.27778],\n \"47\": [0.25, 0.75, 0, 0, 0.5],\n \"48\": [0, 0.65556, 0, 0, 0.5],\n \"49\": [0, 0.65556, 0, 0, 0.5],\n \"50\": [0, 0.65556, 0, 0, 0.5],\n \"51\": [0, 0.65556, 0, 0, 0.5],\n \"52\": [0, 0.65556, 0, 0, 0.5],\n \"53\": [0, 0.65556, 0, 0, 0.5],\n \"54\": [0, 0.65556, 0, 0, 0.5],\n \"55\": [0, 0.65556, 0, 0, 0.5],\n \"56\": [0, 0.65556, 0, 0, 0.5],\n \"57\": [0, 0.65556, 0, 0, 0.5],\n \"58\": [0, 0.44444, 0, 0, 0.27778],\n \"59\": [0.125, 0.44444, 0, 0, 0.27778],\n \"61\": [-0.13, 0.37, 0, 0, 0.77778],\n \"63\": [0, 0.69444, 0, 0, 0.47222],\n \"64\": [0, 0.69444, 0, 0, 0.66667],\n \"65\": [0, 0.69444, 0, 0, 0.66667],\n \"66\": [0, 0.69444, 0, 0, 0.66667],\n \"67\": [0, 0.69444, 0, 0, 0.63889],\n \"68\": [0, 0.69444, 0, 0, 0.72223],\n \"69\": [0, 0.69444, 0, 0, 0.59722],\n \"70\": [0, 0.69444, 0, 0, 0.56945],\n \"71\": [0, 0.69444, 0, 0, 0.66667],\n \"72\": [0, 0.69444, 0, 0, 0.70834],\n \"73\": [0, 0.69444, 0, 0, 0.27778],\n \"74\": [0, 0.69444, 0, 0, 0.47222],\n \"75\": [0, 0.69444, 0, 0, 0.69445],\n \"76\": [0, 0.69444, 0, 0, 0.54167],\n \"77\": [0, 0.69444, 0, 0, 0.875],\n \"78\": [0, 0.69444, 0, 0, 0.70834],\n \"79\": [0, 0.69444, 0, 0, 0.73611],\n \"80\": [0, 0.69444, 0, 0, 0.63889],\n \"81\": [0.125, 0.69444, 0, 0, 0.73611],\n \"82\": [0, 0.69444, 0, 0, 0.64584],\n \"83\": [0, 0.69444, 0, 0, 0.55556],\n \"84\": [0, 0.69444, 0, 0, 0.68056],\n \"85\": [0, 0.69444, 0, 0, 0.6875],\n \"86\": [0, 0.69444, 0.01389, 0, 0.66667],\n \"87\": [0, 0.69444, 0.01389, 0, 0.94445],\n \"88\": [0, 0.69444, 0, 0, 0.66667],\n \"89\": [0, 0.69444, 0.025, 0, 0.66667],\n \"90\": [0, 0.69444, 0, 0, 0.61111],\n \"91\": [0.25, 0.75, 0, 0, 0.28889],\n \"93\": [0.25, 0.75, 0, 0, 0.28889],\n \"94\": [0, 0.69444, 0, 0, 0.5],\n \"95\": [0.35, 0.09444, 0.02778, 0, 0.5],\n \"97\": [0, 0.44444, 0, 0, 0.48056],\n \"98\": [0, 0.69444, 0, 0, 0.51667],\n \"99\": [0, 0.44444, 0, 0, 0.44445],\n \"100\": [0, 0.69444, 0, 0, 0.51667],\n \"101\": [0, 0.44444, 0, 0, 0.44445],\n \"102\": [0, 0.69444, 0.06944, 0, 0.30556],\n \"103\": [0.19444, 0.44444, 0.01389, 0, 0.5],\n \"104\": [0, 0.69444, 0, 0, 0.51667],\n \"105\": [0, 0.67937, 0, 0, 0.23889],\n \"106\": [0.19444, 0.67937, 0, 0, 0.26667],\n \"107\": [0, 0.69444, 0, 0, 0.48889],\n \"108\": [0, 0.69444, 0, 0, 0.23889],\n \"109\": [0, 0.44444, 0, 0, 0.79445],\n \"110\": [0, 0.44444, 0, 0, 0.51667],\n \"111\": [0, 0.44444, 0, 0, 0.5],\n \"112\": [0.19444, 0.44444, 0, 0, 0.51667],\n \"113\": [0.19444, 0.44444, 0, 0, 0.51667],\n \"114\": [0, 0.44444, 0.01389, 0, 0.34167],\n \"115\": [0, 0.44444, 0, 0, 0.38333],\n \"116\": [0, 0.57143, 0, 0, 0.36111],\n \"117\": [0, 0.44444, 0, 0, 0.51667],\n \"118\": [0, 0.44444, 0.01389, 0, 0.46111],\n \"119\": [0, 0.44444, 0.01389, 0, 0.68334],\n \"120\": [0, 0.44444, 0, 0, 0.46111],\n \"121\": [0.19444, 0.44444, 0.01389, 0, 0.46111],\n \"122\": [0, 0.44444, 0, 0, 0.43472],\n \"126\": [0.35, 0.32659, 0, 0, 0.5],\n \"160\": [0, 0, 0, 0, 0.25],\n \"168\": [0, 0.67937, 0, 0, 0.5],\n \"176\": [0, 0.69444, 0, 0, 0.66667],\n \"184\": [0.17014, 0, 0, 0, 0.44445],\n \"305\": [0, 0.44444, 0, 0, 0.23889],\n \"567\": [0.19444, 0.44444, 0, 0, 0.26667],\n \"710\": [0, 0.69444, 0, 0, 0.5],\n \"711\": [0, 0.63194, 0, 0, 0.5],\n \"713\": [0, 0.60889, 0, 0, 0.5],\n \"714\": [0, 0.69444, 0, 0, 0.5],\n \"715\": [0, 0.69444, 0, 0, 0.5],\n \"728\": [0, 0.69444, 0, 0, 0.5],\n \"729\": [0, 0.67937, 0, 0, 0.27778],\n \"730\": [0, 0.69444, 0, 0, 0.66667],\n \"732\": [0, 0.67659, 0, 0, 0.5],\n \"733\": [0, 0.69444, 0, 0, 0.5],\n \"915\": [0, 0.69444, 0, 0, 0.54167],\n \"916\": [0, 0.69444, 0, 0, 0.83334],\n \"920\": [0, 0.69444, 0, 0, 0.77778],\n \"923\": [0, 0.69444, 0, 0, 0.61111],\n \"926\": [0, 0.69444, 0, 0, 0.66667],\n \"928\": [0, 0.69444, 0, 0, 0.70834],\n \"931\": [0, 0.69444, 0, 0, 0.72222],\n \"933\": [0, 0.69444, 0, 0, 0.77778],\n \"934\": [0, 0.69444, 0, 0, 0.72222],\n \"936\": [0, 0.69444, 0, 0, 0.77778],\n \"937\": [0, 0.69444, 0, 0, 0.72222],\n \"8211\": [0, 0.44444, 0.02778, 0, 0.5],\n \"8212\": [0, 0.44444, 0.02778, 0, 1.0],\n \"8216\": [0, 0.69444, 0, 0, 0.27778],\n \"8217\": [0, 0.69444, 0, 0, 0.27778],\n \"8220\": [0, 0.69444, 0, 0, 0.5],\n \"8221\": [0, 0.69444, 0, 0, 0.5]\n },\n \"Script-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"65\": [0, 0.7, 0.22925, 0, 0.80253],\n \"66\": [0, 0.7, 0.04087, 0, 0.90757],\n \"67\": [0, 0.7, 0.1689, 0, 0.66619],\n \"68\": [0, 0.7, 0.09371, 0, 0.77443],\n \"69\": [0, 0.7, 0.18583, 0, 0.56162],\n \"70\": [0, 0.7, 0.13634, 0, 0.89544],\n \"71\": [0, 0.7, 0.17322, 0, 0.60961],\n \"72\": [0, 0.7, 0.29694, 0, 0.96919],\n \"73\": [0, 0.7, 0.19189, 0, 0.80907],\n \"74\": [0.27778, 0.7, 0.19189, 0, 1.05159],\n \"75\": [0, 0.7, 0.31259, 0, 0.91364],\n \"76\": [0, 0.7, 0.19189, 0, 0.87373],\n \"77\": [0, 0.7, 0.15981, 0, 1.08031],\n \"78\": [0, 0.7, 0.3525, 0, 0.9015],\n \"79\": [0, 0.7, 0.08078, 0, 0.73787],\n \"80\": [0, 0.7, 0.08078, 0, 1.01262],\n \"81\": [0, 0.7, 0.03305, 0, 0.88282],\n \"82\": [0, 0.7, 0.06259, 0, 0.85],\n \"83\": [0, 0.7, 0.19189, 0, 0.86767],\n \"84\": [0, 0.7, 0.29087, 0, 0.74697],\n \"85\": [0, 0.7, 0.25815, 0, 0.79996],\n \"86\": [0, 0.7, 0.27523, 0, 0.62204],\n \"87\": [0, 0.7, 0.27523, 0, 0.80532],\n \"88\": [0, 0.7, 0.26006, 0, 0.94445],\n \"89\": [0, 0.7, 0.2939, 0, 0.70961],\n \"90\": [0, 0.7, 0.24037, 0, 0.8212],\n \"160\": [0, 0, 0, 0, 0.25]\n },\n \"Size1-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"40\": [0.35001, 0.85, 0, 0, 0.45834],\n \"41\": [0.35001, 0.85, 0, 0, 0.45834],\n \"47\": [0.35001, 0.85, 0, 0, 0.57778],\n \"91\": [0.35001, 0.85, 0, 0, 0.41667],\n \"92\": [0.35001, 0.85, 0, 0, 0.57778],\n \"93\": [0.35001, 0.85, 0, 0, 0.41667],\n \"123\": [0.35001, 0.85, 0, 0, 0.58334],\n \"125\": [0.35001, 0.85, 0, 0, 0.58334],\n \"160\": [0, 0, 0, 0, 0.25],\n \"710\": [0, 0.72222, 0, 0, 0.55556],\n \"732\": [0, 0.72222, 0, 0, 0.55556],\n \"770\": [0, 0.72222, 0, 0, 0.55556],\n \"771\": [0, 0.72222, 0, 0, 0.55556],\n \"8214\": [-0.00099, 0.601, 0, 0, 0.77778],\n \"8593\": [1e-05, 0.6, 0, 0, 0.66667],\n \"8595\": [1e-05, 0.6, 0, 0, 0.66667],\n \"8657\": [1e-05, 0.6, 0, 0, 0.77778],\n \"8659\": [1e-05, 0.6, 0, 0, 0.77778],\n \"8719\": [0.25001, 0.75, 0, 0, 0.94445],\n \"8720\": [0.25001, 0.75, 0, 0, 0.94445],\n \"8721\": [0.25001, 0.75, 0, 0, 1.05556],\n \"8730\": [0.35001, 0.85, 0, 0, 1.0],\n \"8739\": [-0.00599, 0.606, 0, 0, 0.33333],\n \"8741\": [-0.00599, 0.606, 0, 0, 0.55556],\n \"8747\": [0.30612, 0.805, 0.19445, 0, 0.47222],\n \"8748\": [0.306, 0.805, 0.19445, 0, 0.47222],\n \"8749\": [0.306, 0.805, 0.19445, 0, 0.47222],\n \"8750\": [0.30612, 0.805, 0.19445, 0, 0.47222],\n \"8896\": [0.25001, 0.75, 0, 0, 0.83334],\n \"8897\": [0.25001, 0.75, 0, 0, 0.83334],\n \"8898\": [0.25001, 0.75, 0, 0, 0.83334],\n \"8899\": [0.25001, 0.75, 0, 0, 0.83334],\n \"8968\": [0.35001, 0.85, 0, 0, 0.47222],\n \"8969\": [0.35001, 0.85, 0, 0, 0.47222],\n \"8970\": [0.35001, 0.85, 0, 0, 0.47222],\n \"8971\": [0.35001, 0.85, 0, 0, 0.47222],\n \"9168\": [-0.00099, 0.601, 0, 0, 0.66667],\n \"10216\": [0.35001, 0.85, 0, 0, 0.47222],\n \"10217\": [0.35001, 0.85, 0, 0, 0.47222],\n \"10752\": [0.25001, 0.75, 0, 0, 1.11111],\n \"10753\": [0.25001, 0.75, 0, 0, 1.11111],\n \"10754\": [0.25001, 0.75, 0, 0, 1.11111],\n \"10756\": [0.25001, 0.75, 0, 0, 0.83334],\n \"10758\": [0.25001, 0.75, 0, 0, 0.83334]\n },\n \"Size2-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"40\": [0.65002, 1.15, 0, 0, 0.59722],\n \"41\": [0.65002, 1.15, 0, 0, 0.59722],\n \"47\": [0.65002, 1.15, 0, 0, 0.81111],\n \"91\": [0.65002, 1.15, 0, 0, 0.47222],\n \"92\": [0.65002, 1.15, 0, 0, 0.81111],\n \"93\": [0.65002, 1.15, 0, 0, 0.47222],\n \"123\": [0.65002, 1.15, 0, 0, 0.66667],\n \"125\": [0.65002, 1.15, 0, 0, 0.66667],\n \"160\": [0, 0, 0, 0, 0.25],\n \"710\": [0, 0.75, 0, 0, 1.0],\n \"732\": [0, 0.75, 0, 0, 1.0],\n \"770\": [0, 0.75, 0, 0, 1.0],\n \"771\": [0, 0.75, 0, 0, 1.0],\n \"8719\": [0.55001, 1.05, 0, 0, 1.27778],\n \"8720\": [0.55001, 1.05, 0, 0, 1.27778],\n \"8721\": [0.55001, 1.05, 0, 0, 1.44445],\n \"8730\": [0.65002, 1.15, 0, 0, 1.0],\n \"8747\": [0.86225, 1.36, 0.44445, 0, 0.55556],\n \"8748\": [0.862, 1.36, 0.44445, 0, 0.55556],\n \"8749\": [0.862, 1.36, 0.44445, 0, 0.55556],\n \"8750\": [0.86225, 1.36, 0.44445, 0, 0.55556],\n \"8896\": [0.55001, 1.05, 0, 0, 1.11111],\n \"8897\": [0.55001, 1.05, 0, 0, 1.11111],\n \"8898\": [0.55001, 1.05, 0, 0, 1.11111],\n \"8899\": [0.55001, 1.05, 0, 0, 1.11111],\n \"8968\": [0.65002, 1.15, 0, 0, 0.52778],\n \"8969\": [0.65002, 1.15, 0, 0, 0.52778],\n \"8970\": [0.65002, 1.15, 0, 0, 0.52778],\n \"8971\": [0.65002, 1.15, 0, 0, 0.52778],\n \"10216\": [0.65002, 1.15, 0, 0, 0.61111],\n \"10217\": [0.65002, 1.15, 0, 0, 0.61111],\n \"10752\": [0.55001, 1.05, 0, 0, 1.51112],\n \"10753\": [0.55001, 1.05, 0, 0, 1.51112],\n \"10754\": [0.55001, 1.05, 0, 0, 1.51112],\n \"10756\": [0.55001, 1.05, 0, 0, 1.11111],\n \"10758\": [0.55001, 1.05, 0, 0, 1.11111]\n },\n \"Size3-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"40\": [0.95003, 1.45, 0, 0, 0.73611],\n \"41\": [0.95003, 1.45, 0, 0, 0.73611],\n \"47\": [0.95003, 1.45, 0, 0, 1.04445],\n \"91\": [0.95003, 1.45, 0, 0, 0.52778],\n \"92\": [0.95003, 1.45, 0, 0, 1.04445],\n \"93\": [0.95003, 1.45, 0, 0, 0.52778],\n \"123\": [0.95003, 1.45, 0, 0, 0.75],\n \"125\": [0.95003, 1.45, 0, 0, 0.75],\n \"160\": [0, 0, 0, 0, 0.25],\n \"710\": [0, 0.75, 0, 0, 1.44445],\n \"732\": [0, 0.75, 0, 0, 1.44445],\n \"770\": [0, 0.75, 0, 0, 1.44445],\n \"771\": [0, 0.75, 0, 0, 1.44445],\n \"8730\": [0.95003, 1.45, 0, 0, 1.0],\n \"8968\": [0.95003, 1.45, 0, 0, 0.58334],\n \"8969\": [0.95003, 1.45, 0, 0, 0.58334],\n \"8970\": [0.95003, 1.45, 0, 0, 0.58334],\n \"8971\": [0.95003, 1.45, 0, 0, 0.58334],\n \"10216\": [0.95003, 1.45, 0, 0, 0.75],\n \"10217\": [0.95003, 1.45, 0, 0, 0.75]\n },\n \"Size4-Regular\": {\n \"32\": [0, 0, 0, 0, 0.25],\n \"40\": [1.25003, 1.75, 0, 0, 0.79167],\n \"41\": [1.25003, 1.75, 0, 0, 0.79167],\n \"47\": [1.25003, 1.75, 0, 0, 1.27778],\n \"91\": [1.25003, 1.75, 0, 0, 0.58334],\n \"92\": [1.25003, 1.75, 0, 0, 1.27778],\n \"93\": [1.25003, 1.75, 0, 0, 0.58334],\n \"123\": [1.25003, 1.75, 0, 0, 0.80556],\n \"125\": [1.25003, 1.75, 0, 0, 0.80556],\n \"160\": [0, 0, 0, 0, 0.25],\n \"710\": [0, 0.825, 0, 0, 1.8889],\n \"732\": [0, 0.825, 0, 0, 1.8889],\n \"770\": [0, 0.825, 0, 0, 1.8889],\n \"771\": [0, 0.825, 0, 0, 1.8889],\n \"8730\": [1.25003, 1.75, 0, 0, 1.0],\n \"8968\": [1.25003, 1.75, 0, 0, 0.63889],\n \"8969\": [1.25003, 1.75, 0, 0, 0.63889],\n \"8970\": [1.25003, 1.75, 0, 0, 0.63889],\n \"8971\": [1.25003, 1.75, 0, 0, 0.63889],\n \"9115\": [0.64502, 1.155, 0, 0, 0.875],\n \"9116\": [1e-05, 0.6, 0, 0, 0.875],\n \"9117\": [0.64502, 1.155, 0, 0, 0.875],\n \"9118\": [0.64502, 1.155, 0, 0, 0.875],\n \"9119\": [1e-05, 0.6, 0, 0, 0.875],\n \"9120\": [0.64502, 1.155, 0, 0, 0.875],\n \"9121\": [0.64502, 1.155, 0, 0, 0.66667],\n \"9122\": [-0.00099, 0.601, 0, 0, 0.66667],\n \"9123\": [0.64502, 1.155, 0, 0, 0.66667],\n \"9124\": [0.64502, 1.155, 0, 0, 0.66667],\n \"9125\": [-0.00099, 0.601, 0, 0, 0.66667],\n \"9126\": [0.64502, 1.155, 0, 0, 0.66667],\n \"9127\": [1e-05, 0.9, 0, 0, 0.88889],\n \"9128\": [0.65002, 1.15, 0, 0, 0.88889],\n \"9129\": [0.90001, 0, 0, 0, 0.88889],\n \"9130\": [0, 0.3, 0, 0, 0.88889],\n \"9131\": [1e-05, 0.9, 0, 0, 0.88889],\n \"9132\": [0.65002, 1.15, 0, 0, 0.88889],\n \"9133\": [0.90001, 0, 0, 0, 0.88889],\n \"9143\": [0.88502, 0.915, 0, 0, 1.05556],\n \"10216\": [1.25003, 1.75, 0, 0, 0.80556],\n \"10217\": [1.25003, 1.75, 0, 0, 0.80556],\n \"57344\": [-0.00499, 0.605, 0, 0, 1.05556],\n \"57345\": [-0.00499, 0.605, 0, 0, 1.05556],\n \"57680\": [0, 0.12, 0, 0, 0.45],\n \"57681\": [0, 0.12, 0, 0, 0.45],\n \"57682\": [0, 0.12, 0, 0, 0.45],\n \"57683\": [0, 0.12, 0, 0, 0.45]\n },\n \"Typewriter-Regular\": {\n \"32\": [0, 0, 0, 0, 0.525],\n \"33\": [0, 0.61111, 0, 0, 0.525],\n \"34\": [0, 0.61111, 0, 0, 0.525],\n \"35\": [0, 0.61111, 0, 0, 0.525],\n \"36\": [0.08333, 0.69444, 0, 0, 0.525],\n \"37\": [0.08333, 0.69444, 0, 0, 0.525],\n \"38\": [0, 0.61111, 0, 0, 0.525],\n \"39\": [0, 0.61111, 0, 0, 0.525],\n \"40\": [0.08333, 0.69444, 0, 0, 0.525],\n \"41\": [0.08333, 0.69444, 0, 0, 0.525],\n \"42\": [0, 0.52083, 0, 0, 0.525],\n \"43\": [-0.08056, 0.53055, 0, 0, 0.525],\n \"44\": [0.13889, 0.125, 0, 0, 0.525],\n \"45\": [-0.08056, 0.53055, 0, 0, 0.525],\n \"46\": [0, 0.125, 0, 0, 0.525],\n \"47\": [0.08333, 0.69444, 0, 0, 0.525],\n \"48\": [0, 0.61111, 0, 0, 0.525],\n \"49\": [0, 0.61111, 0, 0, 0.525],\n \"50\": [0, 0.61111, 0, 0, 0.525],\n \"51\": [0, 0.61111, 0, 0, 0.525],\n \"52\": [0, 0.61111, 0, 0, 0.525],\n \"53\": [0, 0.61111, 0, 0, 0.525],\n \"54\": [0, 0.61111, 0, 0, 0.525],\n \"55\": [0, 0.61111, 0, 0, 0.525],\n \"56\": [0, 0.61111, 0, 0, 0.525],\n \"57\": [0, 0.61111, 0, 0, 0.525],\n \"58\": [0, 0.43056, 0, 0, 0.525],\n \"59\": [0.13889, 0.43056, 0, 0, 0.525],\n \"60\": [-0.05556, 0.55556, 0, 0, 0.525],\n \"61\": [-0.19549, 0.41562, 0, 0, 0.525],\n \"62\": [-0.05556, 0.55556, 0, 0, 0.525],\n \"63\": [0, 0.61111, 0, 0, 0.525],\n \"64\": [0, 0.61111, 0, 0, 0.525],\n \"65\": [0, 0.61111, 0, 0, 0.525],\n \"66\": [0, 0.61111, 0, 0, 0.525],\n \"67\": [0, 0.61111, 0, 0, 0.525],\n \"68\": [0, 0.61111, 0, 0, 0.525],\n \"69\": [0, 0.61111, 0, 0, 0.525],\n \"70\": [0, 0.61111, 0, 0, 0.525],\n \"71\": [0, 0.61111, 0, 0, 0.525],\n \"72\": [0, 0.61111, 0, 0, 0.525],\n \"73\": [0, 0.61111, 0, 0, 0.525],\n \"74\": [0, 0.61111, 0, 0, 0.525],\n \"75\": [0, 0.61111, 0, 0, 0.525],\n \"76\": [0, 0.61111, 0, 0, 0.525],\n \"77\": [0, 0.61111, 0, 0, 0.525],\n \"78\": [0, 0.61111, 0, 0, 0.525],\n \"79\": [0, 0.61111, 0, 0, 0.525],\n \"80\": [0, 0.61111, 0, 0, 0.525],\n \"81\": [0.13889, 0.61111, 0, 0, 0.525],\n \"82\": [0, 0.61111, 0, 0, 0.525],\n \"83\": [0, 0.61111, 0, 0, 0.525],\n \"84\": [0, 0.61111, 0, 0, 0.525],\n \"85\": [0, 0.61111, 0, 0, 0.525],\n \"86\": [0, 0.61111, 0, 0, 0.525],\n \"87\": [0, 0.61111, 0, 0, 0.525],\n \"88\": [0, 0.61111, 0, 0, 0.525],\n \"89\": [0, 0.61111, 0, 0, 0.525],\n \"90\": [0, 0.61111, 0, 0, 0.525],\n \"91\": [0.08333, 0.69444, 0, 0, 0.525],\n \"92\": [0.08333, 0.69444, 0, 0, 0.525],\n \"93\": [0.08333, 0.69444, 0, 0, 0.525],\n \"94\": [0, 0.61111, 0, 0, 0.525],\n \"95\": [0.09514, 0, 0, 0, 0.525],\n \"96\": [0, 0.61111, 0, 0, 0.525],\n \"97\": [0, 0.43056, 0, 0, 0.525],\n \"98\": [0, 0.61111, 0, 0, 0.525],\n \"99\": [0, 0.43056, 0, 0, 0.525],\n \"100\": [0, 0.61111, 0, 0, 0.525],\n \"101\": [0, 0.43056, 0, 0, 0.525],\n \"102\": [0, 0.61111, 0, 0, 0.525],\n \"103\": [0.22222, 0.43056, 0, 0, 0.525],\n \"104\": [0, 0.61111, 0, 0, 0.525],\n \"105\": [0, 0.61111, 0, 0, 0.525],\n \"106\": [0.22222, 0.61111, 0, 0, 0.525],\n \"107\": [0, 0.61111, 0, 0, 0.525],\n \"108\": [0, 0.61111, 0, 0, 0.525],\n \"109\": [0, 0.43056, 0, 0, 0.525],\n \"110\": [0, 0.43056, 0, 0, 0.525],\n \"111\": [0, 0.43056, 0, 0, 0.525],\n \"112\": [0.22222, 0.43056, 0, 0, 0.525],\n \"113\": [0.22222, 0.43056, 0, 0, 0.525],\n \"114\": [0, 0.43056, 0, 0, 0.525],\n \"115\": [0, 0.43056, 0, 0, 0.525],\n \"116\": [0, 0.55358, 0, 0, 0.525],\n \"117\": [0, 0.43056, 0, 0, 0.525],\n \"118\": [0, 0.43056, 0, 0, 0.525],\n \"119\": [0, 0.43056, 0, 0, 0.525],\n \"120\": [0, 0.43056, 0, 0, 0.525],\n \"121\": [0.22222, 0.43056, 0, 0, 0.525],\n \"122\": [0, 0.43056, 0, 0, 0.525],\n \"123\": [0.08333, 0.69444, 0, 0, 0.525],\n \"124\": [0.08333, 0.69444, 0, 0, 0.525],\n \"125\": [0.08333, 0.69444, 0, 0, 0.525],\n \"126\": [0, 0.61111, 0, 0, 0.525],\n \"127\": [0, 0.61111, 0, 0, 0.525],\n \"160\": [0, 0, 0, 0, 0.525],\n \"176\": [0, 0.61111, 0, 0, 0.525],\n \"184\": [0.19445, 0, 0, 0, 0.525],\n \"305\": [0, 0.43056, 0, 0, 0.525],\n \"567\": [0.22222, 0.43056, 0, 0, 0.525],\n \"711\": [0, 0.56597, 0, 0, 0.525],\n \"713\": [0, 0.56555, 0, 0, 0.525],\n \"714\": [0, 0.61111, 0, 0, 0.525],\n \"715\": [0, 0.61111, 0, 0, 0.525],\n \"728\": [0, 0.61111, 0, 0, 0.525],\n \"730\": [0, 0.61111, 0, 0, 0.525],\n \"770\": [0, 0.61111, 0, 0, 0.525],\n \"771\": [0, 0.61111, 0, 0, 0.525],\n \"776\": [0, 0.61111, 0, 0, 0.525],\n \"915\": [0, 0.61111, 0, 0, 0.525],\n \"916\": [0, 0.61111, 0, 0, 0.525],\n \"920\": [0, 0.61111, 0, 0, 0.525],\n \"923\": [0, 0.61111, 0, 0, 0.525],\n \"926\": [0, 0.61111, 0, 0, 0.525],\n \"928\": [0, 0.61111, 0, 0, 0.525],\n \"931\": [0, 0.61111, 0, 0, 0.525],\n \"933\": [0, 0.61111, 0, 0, 0.525],\n \"934\": [0, 0.61111, 0, 0, 0.525],\n \"936\": [0, 0.61111, 0, 0, 0.525],\n \"937\": [0, 0.61111, 0, 0, 0.525],\n \"8216\": [0, 0.61111, 0, 0, 0.525],\n \"8217\": [0, 0.61111, 0, 0, 0.525],\n \"8242\": [0, 0.61111, 0, 0, 0.525],\n \"9251\": [0.11111, 0.21944, 0, 0, 0.525]\n }\n};\n\n/**\n * This file contains metrics regarding fonts and individual symbols. The sigma\n * and xi variables, as well as the metricMap map contain data extracted from\n * TeX, TeX font metrics, and the TTF files. These data are then exposed via the\n * `metrics` variable and the getCharacterMetrics function.\n */\n// In TeX, there are actually three sets of dimensions, one for each of\n// textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4:\n// 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt). These are\n// provided in the arrays below, in that order.\n//\n// The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respectively.\n// This was determined by running the following script:\n//\n// latex -interaction=nonstopmode \\\n// '\\documentclass{article}\\usepackage{amsmath}\\begin{document}' \\\n// '$a$ \\expandafter\\show\\the\\textfont2' \\\n// '\\expandafter\\show\\the\\scriptfont2' \\\n// '\\expandafter\\show\\the\\scriptscriptfont2' \\\n// '\\stop'\n//\n// The metrics themselves were retrieved using the following commands:\n//\n// tftopl cmsy10\n// tftopl cmsy7\n// tftopl cmsy5\n//\n// The output of each of these commands is quite lengthy. The only part we\n// care about is the FONTDIMEN section. Each value is measured in EMs.\nvar sigmasAndXis = {\n slant: [0.250, 0.250, 0.250],\n // sigma1\n space: [0.000, 0.000, 0.000],\n // sigma2\n stretch: [0.000, 0.000, 0.000],\n // sigma3\n shrink: [0.000, 0.000, 0.000],\n // sigma4\n xHeight: [0.431, 0.431, 0.431],\n // sigma5\n quad: [1.000, 1.171, 1.472],\n // sigma6\n extraSpace: [0.000, 0.000, 0.000],\n // sigma7\n num1: [0.677, 0.732, 0.925],\n // sigma8\n num2: [0.394, 0.384, 0.387],\n // sigma9\n num3: [0.444, 0.471, 0.504],\n // sigma10\n denom1: [0.686, 0.752, 1.025],\n // sigma11\n denom2: [0.345, 0.344, 0.532],\n // sigma12\n sup1: [0.413, 0.503, 0.504],\n // sigma13\n sup2: [0.363, 0.431, 0.404],\n // sigma14\n sup3: [0.289, 0.286, 0.294],\n // sigma15\n sub1: [0.150, 0.143, 0.200],\n // sigma16\n sub2: [0.247, 0.286, 0.400],\n // sigma17\n supDrop: [0.386, 0.353, 0.494],\n // sigma18\n subDrop: [0.050, 0.071, 0.100],\n // sigma19\n delim1: [2.390, 1.700, 1.980],\n // sigma20\n delim2: [1.010, 1.157, 1.420],\n // sigma21\n axisHeight: [0.250, 0.250, 0.250],\n // sigma22\n // These font metrics are extracted from TeX by using tftopl on cmex10.tfm;\n // they correspond to the font parameters of the extension fonts (family 3).\n // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to\n // match cmex7, we'd use cmex7.tfm values for script and scriptscript\n // values.\n defaultRuleThickness: [0.04, 0.049, 0.049],\n // xi8; cmex7: 0.049\n bigOpSpacing1: [0.111, 0.111, 0.111],\n // xi9\n bigOpSpacing2: [0.166, 0.166, 0.166],\n // xi10\n bigOpSpacing3: [0.2, 0.2, 0.2],\n // xi11\n bigOpSpacing4: [0.6, 0.611, 0.611],\n // xi12; cmex7: 0.611\n bigOpSpacing5: [0.1, 0.143, 0.143],\n // xi13; cmex7: 0.143\n // The \\sqrt rule width is taken from the height of the surd character.\n // Since we use the same font at all sizes, this thickness doesn't scale.\n sqrtRuleThickness: [0.04, 0.04, 0.04],\n // This value determines how large a pt is, for metrics which are defined\n // in terms of pts.\n // This value is also used in katex.scss; if you change it make sure the\n // values match.\n ptPerEm: [10.0, 10.0, 10.0],\n // The space between adjacent `|` columns in an array definition. From\n // `\\showthe\\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm.\n doubleRuleSep: [0.2, 0.2, 0.2],\n // The width of separator lines in {array} environments. From\n // `\\showthe\\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm.\n arrayRuleWidth: [0.04, 0.04, 0.04],\n // Two values from LaTeX source2e:\n fboxsep: [0.3, 0.3, 0.3],\n // 3 pt / ptPerEm\n fboxrule: [0.04, 0.04, 0.04] // 0.4 pt / ptPerEm\n\n}; // This map contains a mapping from font name and character code to character\n// should have Latin-1 and Cyrillic characters, but may not depending on the\n// operating system. The metrics do not account for extra height from the\n// accents. In the case of Cyrillic characters which have both ascenders and\n// descenders we prefer approximations with ascenders, primarily to prevent\n// the fraction bar or root line from intersecting the glyph.\n// TODO(kevinb) allow union of multiple glyph metrics for better accuracy.\n\nvar extraCharacterMap = {\n // Latin-1\n '\u00C5': 'A',\n '\u00D0': 'D',\n '\u00DE': 'o',\n '\u00E5': 'a',\n '\u00F0': 'd',\n '\u00FE': 'o',\n // Cyrillic\n '\u0410': 'A',\n '\u0411': 'B',\n '\u0412': 'B',\n '\u0413': 'F',\n '\u0414': 'A',\n '\u0415': 'E',\n '\u0416': 'K',\n '\u0417': '3',\n '\u0418': 'N',\n '\u0419': 'N',\n '\u041A': 'K',\n '\u041B': 'N',\n '\u041C': 'M',\n '\u041D': 'H',\n '\u041E': 'O',\n '\u041F': 'N',\n '\u0420': 'P',\n '\u0421': 'C',\n '\u0422': 'T',\n '\u0423': 'y',\n '\u0424': 'O',\n '\u0425': 'X',\n '\u0426': 'U',\n '\u0427': 'h',\n '\u0428': 'W',\n '\u0429': 'W',\n '\u042A': 'B',\n '\u042B': 'X',\n '\u042C': 'B',\n '\u042D': '3',\n '\u042E': 'X',\n '\u042F': 'R',\n '\u0430': 'a',\n '\u0431': 'b',\n '\u0432': 'a',\n '\u0433': 'r',\n '\u0434': 'y',\n '\u0435': 'e',\n '\u0436': 'm',\n '\u0437': 'e',\n '\u0438': 'n',\n '\u0439': 'n',\n '\u043A': 'n',\n '\u043B': 'n',\n '\u043C': 'm',\n '\u043D': 'n',\n '\u043E': 'o',\n '\u043F': 'n',\n '\u0440': 'p',\n '\u0441': 'c',\n '\u0442': 'o',\n '\u0443': 'y',\n '\u0444': 'b',\n '\u0445': 'x',\n '\u0446': 'n',\n '\u0447': 'n',\n '\u0448': 'w',\n '\u0449': 'w',\n '\u044A': 'a',\n '\u044B': 'm',\n '\u044C': 'a',\n '\u044D': 'e',\n '\u044E': 'm',\n '\u044F': 'r'\n};\n\n/**\n * This function adds new font metrics to default metricMap\n * It can also override existing metrics\n */\nfunction setFontMetrics(fontName, metrics) {\n fontMetricsData[fontName] = metrics;\n}\n/**\n * This function is a convenience function for looking up information in the\n * metricMap table. It takes a character as a string, and a font.\n *\n * Note: the `width` property may be undefined if fontMetricsData.js wasn't\n * built using `Make extended_metrics`.\n */\n\nfunction getCharacterMetrics(character, font, mode) {\n if (!fontMetricsData[font]) {\n throw new Error(\"Font metrics not found for font: \" + font + \".\");\n }\n\n var ch = character.charCodeAt(0);\n var metrics = fontMetricsData[font][ch];\n\n if (!metrics && character[0] in extraCharacterMap) {\n ch = extraCharacterMap[character[0]].charCodeAt(0);\n metrics = fontMetricsData[font][ch];\n }\n\n if (!metrics && mode === 'text') {\n // We don't typically have font metrics for Asian scripts.\n // But since we support them in text mode, we need to return\n // some sort of metrics.\n // So if the character is in a script we support but we\n // don't have metrics for it, just use the metrics for\n // the Latin capital letter M. This is close enough because\n // we (currently) only care about the height of the glyph\n // not its width.\n if (supportedCodepoint(ch)) {\n metrics = fontMetricsData[font][77]; // 77 is the charcode for 'M'\n }\n }\n\n if (metrics) {\n return {\n depth: metrics[0],\n height: metrics[1],\n italic: metrics[2],\n skew: metrics[3],\n width: metrics[4]\n };\n }\n}\nvar fontMetricsBySizeIndex = {};\n/**\n * Get the font metrics for a given size.\n */\n\nfunction getGlobalMetrics(size) {\n var sizeIndex;\n\n if (size >= 5) {\n sizeIndex = 0;\n } else if (size >= 3) {\n sizeIndex = 1;\n } else {\n sizeIndex = 2;\n }\n\n if (!fontMetricsBySizeIndex[sizeIndex]) {\n var metrics = fontMetricsBySizeIndex[sizeIndex] = {\n cssEmPerMu: sigmasAndXis.quad[sizeIndex] / 18\n };\n\n for (var key in sigmasAndXis) {\n if (sigmasAndXis.hasOwnProperty(key)) {\n metrics[key] = sigmasAndXis[key][sizeIndex];\n }\n }\n }\n\n return fontMetricsBySizeIndex[sizeIndex];\n}\n\n/**\n * This file contains information about the options that the Parser carries\n * around with it while parsing. Data is held in an `Options` object, and when\n * recursing, a new `Options` object can be created with the `.with*` and\n * `.reset` functions.\n */\nvar sizeStyleMap = [// Each element contains [textsize, scriptsize, scriptscriptsize].\n// The size mappings are taken from TeX with \\normalsize=10pt.\n[1, 1, 1], // size1: [5, 5, 5] \\tiny\n[2, 1, 1], // size2: [6, 5, 5]\n[3, 1, 1], // size3: [7, 5, 5] \\scriptsize\n[4, 2, 1], // size4: [8, 6, 5] \\footnotesize\n[5, 2, 1], // size5: [9, 6, 5] \\small\n[6, 3, 1], // size6: [10, 7, 5] \\normalsize\n[7, 4, 2], // size7: [12, 8, 6] \\large\n[8, 6, 3], // size8: [14.4, 10, 7] \\Large\n[9, 7, 6], // size9: [17.28, 12, 10] \\LARGE\n[10, 8, 7], // size10: [20.74, 14.4, 12] \\huge\n[11, 10, 9] // size11: [24.88, 20.74, 17.28] \\HUGE\n];\nvar sizeMultipliers = [// fontMetrics.js:getGlobalMetrics also uses size indexes, so if\n// you change size indexes, change that function.\n0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488];\n\nvar sizeAtStyle = function sizeAtStyle(size, style) {\n return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1];\n}; // In these types, \"\" (empty string) means \"no change\".\n\n\n/**\n * This is the main options class. It contains the current style, size, color,\n * and font.\n *\n * Options objects should not be modified. To create a new Options with\n * different properties, call a `.having*` method.\n */\nclass Options {\n // A font family applies to a group of fonts (i.e. SansSerif), while a font\n // represents a specific font (i.e. SansSerif Bold).\n // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm\n\n /**\n * The base size index.\n */\n constructor(data) {\n this.style = void 0;\n this.color = void 0;\n this.size = void 0;\n this.textSize = void 0;\n this.phantom = void 0;\n this.font = void 0;\n this.fontFamily = void 0;\n this.fontWeight = void 0;\n this.fontShape = void 0;\n this.sizeMultiplier = void 0;\n this.maxSize = void 0;\n this.minRuleThickness = void 0;\n this._fontMetrics = void 0;\n this.style = data.style;\n this.color = data.color;\n this.size = data.size || Options.BASESIZE;\n this.textSize = data.textSize || this.size;\n this.phantom = !!data.phantom;\n this.font = data.font || \"\";\n this.fontFamily = data.fontFamily || \"\";\n this.fontWeight = data.fontWeight || '';\n this.fontShape = data.fontShape || '';\n this.sizeMultiplier = sizeMultipliers[this.size - 1];\n this.maxSize = data.maxSize;\n this.minRuleThickness = data.minRuleThickness;\n this._fontMetrics = undefined;\n }\n /**\n * Returns a new options object with the same properties as \"this\". Properties\n * from \"extension\" will be copied to the new options object.\n */\n\n\n extend(extension) {\n var data = {\n style: this.style,\n size: this.size,\n textSize: this.textSize,\n color: this.color,\n phantom: this.phantom,\n font: this.font,\n fontFamily: this.fontFamily,\n fontWeight: this.fontWeight,\n fontShape: this.fontShape,\n maxSize: this.maxSize,\n minRuleThickness: this.minRuleThickness\n };\n\n for (var key in extension) {\n if (extension.hasOwnProperty(key)) {\n data[key] = extension[key];\n }\n }\n\n return new Options(data);\n }\n /**\n * Return an options object with the given style. If `this.style === style`,\n * returns `this`.\n */\n\n\n havingStyle(style) {\n if (this.style === style) {\n return this;\n } else {\n return this.extend({\n style: style,\n size: sizeAtStyle(this.textSize, style)\n });\n }\n }\n /**\n * Return an options object with a cramped version of the current style. If\n * the current style is cramped, returns `this`.\n */\n\n\n havingCrampedStyle() {\n return this.havingStyle(this.style.cramp());\n }\n /**\n * Return an options object with the given size and in at least `\\textstyle`.\n * Returns `this` if appropriate.\n */\n\n\n havingSize(size) {\n if (this.size === size && this.textSize === size) {\n return this;\n } else {\n return this.extend({\n style: this.style.text(),\n size: size,\n textSize: size,\n sizeMultiplier: sizeMultipliers[size - 1]\n });\n }\n }\n /**\n * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted,\n * changes to at least `\\textstyle`.\n */\n\n\n havingBaseStyle(style) {\n style = style || this.style.text();\n var wantSize = sizeAtStyle(Options.BASESIZE, style);\n\n if (this.size === wantSize && this.textSize === Options.BASESIZE && this.style === style) {\n return this;\n } else {\n return this.extend({\n style: style,\n size: wantSize\n });\n }\n }\n /**\n * Remove the effect of sizing changes such as \\Huge.\n * Keep the effect of the current style, such as \\scriptstyle.\n */\n\n\n havingBaseSizing() {\n var size;\n\n switch (this.style.id) {\n case 4:\n case 5:\n size = 3; // normalsize in scriptstyle\n\n break;\n\n case 6:\n case 7:\n size = 1; // normalsize in scriptscriptstyle\n\n break;\n\n default:\n size = 6;\n // normalsize in textstyle or displaystyle\n }\n\n return this.extend({\n style: this.style.text(),\n size: size\n });\n }\n /**\n * Create a new options object with the given color.\n */\n\n\n withColor(color) {\n return this.extend({\n color: color\n });\n }\n /**\n * Create a new options object with \"phantom\" set to true.\n */\n\n\n withPhantom() {\n return this.extend({\n phantom: true\n });\n }\n /**\n * Creates a new options object with the given math font or old text font.\n * @type {[type]}\n */\n\n\n withFont(font) {\n return this.extend({\n font\n });\n }\n /**\n * Create a new options objects with the given fontFamily.\n */\n\n\n withTextFontFamily(fontFamily) {\n return this.extend({\n fontFamily,\n font: \"\"\n });\n }\n /**\n * Creates a new options object with the given font weight\n */\n\n\n withTextFontWeight(fontWeight) {\n return this.extend({\n fontWeight,\n font: \"\"\n });\n }\n /**\n * Creates a new options object with the given font weight\n */\n\n\n withTextFontShape(fontShape) {\n return this.extend({\n fontShape,\n font: \"\"\n });\n }\n /**\n * Return the CSS sizing classes required to switch from enclosing options\n * `oldOptions` to `this`. Returns an array of classes.\n */\n\n\n sizingClasses(oldOptions) {\n if (oldOptions.size !== this.size) {\n return [\"sizing\", \"reset-size\" + oldOptions.size, \"size\" + this.size];\n } else {\n return [];\n }\n }\n /**\n * Return the CSS sizing classes required to switch to the base size. Like\n * `this.havingSize(BASESIZE).sizingClasses(this)`.\n */\n\n\n baseSizingClasses() {\n if (this.size !== Options.BASESIZE) {\n return [\"sizing\", \"reset-size\" + this.size, \"size\" + Options.BASESIZE];\n } else {\n return [];\n }\n }\n /**\n * Return the font metrics for this size.\n */\n\n\n fontMetrics() {\n if (!this._fontMetrics) {\n this._fontMetrics = getGlobalMetrics(this.size);\n }\n\n return this._fontMetrics;\n }\n /**\n * Gets the CSS color of the current options object\n */\n\n\n getColor() {\n if (this.phantom) {\n return \"transparent\";\n } else {\n return this.color;\n }\n }\n\n}\n\nOptions.BASESIZE = 6;\n\n/**\n * This file does conversion between units. In particular, it provides\n * calculateSize to convert other units into ems.\n */\n// Thus, multiplying a length by this number converts the length from units\n// into pts. Dividing the result by ptPerEm gives the number of ems\n// *assuming* a font size of ptPerEm (normal size, normal style).\n\nvar ptPerUnit = {\n // https://en.wikibooks.org/wiki/LaTeX/Lengths and\n // https://tex.stackexchange.com/a/8263\n \"pt\": 1,\n // TeX point\n \"mm\": 7227 / 2540,\n // millimeter\n \"cm\": 7227 / 254,\n // centimeter\n \"in\": 72.27,\n // inch\n \"bp\": 803 / 800,\n // big (PostScript) points\n \"pc\": 12,\n // pica\n \"dd\": 1238 / 1157,\n // didot\n \"cc\": 14856 / 1157,\n // cicero (12 didot)\n \"nd\": 685 / 642,\n // new didot\n \"nc\": 1370 / 107,\n // new cicero (12 new didot)\n \"sp\": 1 / 65536,\n // scaled point (TeX's internal smallest unit)\n // https://tex.stackexchange.com/a/41371\n \"px\": 803 / 800 // \\pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX\n\n}; // Dictionary of relative units, for fast validity testing.\n\nvar relativeUnit = {\n \"ex\": true,\n \"em\": true,\n \"mu\": true\n};\n\n/**\n * Determine whether the specified unit (either a string defining the unit\n * or a \"size\" parse node containing a unit field) is valid.\n */\nvar validUnit = function validUnit(unit) {\n if (typeof unit !== \"string\") {\n unit = unit.unit;\n }\n\n return unit in ptPerUnit || unit in relativeUnit || unit === \"ex\";\n};\n/*\n * Convert a \"size\" parse node (with numeric \"number\" and string \"unit\" fields,\n * as parsed by functions.js argType \"size\") into a CSS em value for the\n * current style/scale. `options` gives the current options.\n */\n\nvar calculateSize = function calculateSize(sizeValue, options) {\n var scale;\n\n if (sizeValue.unit in ptPerUnit) {\n // Absolute units\n scale = ptPerUnit[sizeValue.unit] // Convert unit to pt\n / options.fontMetrics().ptPerEm // Convert pt to CSS em\n / options.sizeMultiplier; // Unscale to make absolute units\n } else if (sizeValue.unit === \"mu\") {\n // `mu` units scale with scriptstyle/scriptscriptstyle.\n scale = options.fontMetrics().cssEmPerMu;\n } else {\n // Other relative units always refer to the *textstyle* font\n // in the current size.\n var unitOptions;\n\n if (options.style.isTight()) {\n // isTight() means current style is script/scriptscript.\n unitOptions = options.havingStyle(options.style.text());\n } else {\n unitOptions = options;\n } // TODO: In TeX these units are relative to the quad of the current\n // *text* font, e.g. cmr10. KaTeX instead uses values from the\n // comparably-sized *Computer Modern symbol* font. At 10pt, these\n // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641;\n // cmr5=1.361133, cmsy5=1.472241. Consider $\\scriptsize a\\kern1emb$.\n // TeX \\showlists shows a kern of 1.13889 * fontsize;\n // KaTeX shows a kern of 1.171 * fontsize.\n\n\n if (sizeValue.unit === \"ex\") {\n scale = unitOptions.fontMetrics().xHeight;\n } else if (sizeValue.unit === \"em\") {\n scale = unitOptions.fontMetrics().quad;\n } else {\n throw new ParseError(\"Invalid unit: '\" + sizeValue.unit + \"'\");\n }\n\n if (unitOptions !== options) {\n scale *= unitOptions.sizeMultiplier / options.sizeMultiplier;\n }\n }\n\n return Math.min(sizeValue.number * scale, options.maxSize);\n};\n/**\n * Round `n` to 4 decimal places, or to the nearest 1/10,000th em. See\n * https://github.com/KaTeX/KaTeX/pull/2460.\n */\n\nvar makeEm = function makeEm(n) {\n return +n.toFixed(4) + \"em\";\n};\n\n/**\n * These objects store the data about the DOM nodes we create, as well as some\n * extra data. They can then be transformed into real DOM nodes with the\n * `toNode` function or HTML markup using `toMarkup`. They are useful for both\n * storing extra properties on the nodes, as well as providing a way to easily\n * work with the DOM.\n *\n * Similar functions for working with MathML nodes exist in mathMLTree.js.\n *\n * TODO: refactor `span` and `anchor` into common superclass when\n * target environments support class inheritance\n */\n\n/**\n * Create an HTML className based on a list of classes. In addition to joining\n * with spaces, we also remove empty classes.\n */\nvar createClass = function createClass(classes) {\n return classes.filter(cls => cls).join(\" \");\n};\n\nvar initNode = function initNode(classes, options, style) {\n this.classes = classes || [];\n this.attributes = {};\n this.height = 0;\n this.depth = 0;\n this.maxFontSize = 0;\n this.style = style || {};\n\n if (options) {\n if (options.style.isTight()) {\n this.classes.push(\"mtight\");\n }\n\n var color = options.getColor();\n\n if (color) {\n this.style.color = color;\n }\n }\n};\n/**\n * Convert into an HTML node\n */\n\n\nvar toNode = function toNode(tagName) {\n var node = document.createElement(tagName); // Apply the class\n\n node.className = createClass(this.classes); // Apply inline styles\n\n for (var style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n // $FlowFixMe Flow doesn't seem to understand span.style's type.\n node.style[style] = this.style[style];\n }\n } // Apply attributes\n\n\n for (var attr in this.attributes) {\n if (this.attributes.hasOwnProperty(attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n } // Append the children, also as HTML nodes\n\n\n for (var i = 0; i < this.children.length; i++) {\n node.appendChild(this.children[i].toNode());\n }\n\n return node;\n};\n/**\n * https://w3c.github.io/html-reference/syntax.html#syntax-attributes\n *\n * > Attribute Names must consist of one or more characters\n * other than the space characters, U+0000 NULL,\n * '\"', \"'\", \">\", \"/\", \"=\", the control characters,\n * and any characters that are not defined by Unicode.\n */\n\n\nvar invalidAttributeNameRegex = /[\\s\"'>/=\\x00-\\x1f]/;\n/**\n * Convert into an HTML markup string\n */\n\nvar toMarkup = function toMarkup(tagName) {\n var markup = \"<\" + tagName; // Add the class\n\n if (this.classes.length) {\n markup += \" class=\\\"\" + utils.escape(createClass(this.classes)) + \"\\\"\";\n }\n\n var styles = \"\"; // Add the styles, after hyphenation\n\n for (var style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n }\n }\n\n if (styles) {\n markup += \" style=\\\"\" + utils.escape(styles) + \"\\\"\";\n } // Add the attributes\n\n\n for (var attr in this.attributes) {\n if (this.attributes.hasOwnProperty(attr)) {\n if (invalidAttributeNameRegex.test(attr)) {\n throw new ParseError(\"Invalid attribute name '\" + attr + \"'\");\n }\n\n markup += \" \" + attr + \"=\\\"\" + utils.escape(this.attributes[attr]) + \"\\\"\";\n }\n }\n\n markup += \">\"; // Add the markup of the children, also as markup\n\n for (var i = 0; i < this.children.length; i++) {\n markup += this.children[i].toMarkup();\n }\n\n markup += \"\";\n return markup;\n}; // Making the type below exact with all optional fields doesn't work due to\n// - https://github.com/facebook/flow/issues/4582\n// - https://github.com/facebook/flow/issues/5688\n// However, since *all* fields are optional, $Shape<> works as suggested in 5688\n// above.\n// This type does not include all CSS properties. Additional properties should\n// be added as needed.\n\n\n/**\n * This node represents a span node, with a className, a list of children, and\n * an inline style. It also contains information about its height, depth, and\n * maxFontSize.\n *\n * Represents two types with different uses: SvgSpan to wrap an SVG and DomSpan\n * otherwise. This typesafety is important when HTML builders access a span's\n * children.\n */\nclass Span {\n constructor(classes, children, options, style) {\n this.children = void 0;\n this.attributes = void 0;\n this.classes = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.width = void 0;\n this.maxFontSize = void 0;\n this.style = void 0;\n initNode.call(this, classes, options, style);\n this.children = children || [];\n }\n /**\n * Sets an arbitrary attribute on the span. Warning: use this wisely. Not\n * all browsers support attributes the same, and having too many custom\n * attributes is probably bad.\n */\n\n\n setAttribute(attribute, value) {\n this.attributes[attribute] = value;\n }\n\n hasClass(className) {\n return utils.contains(this.classes, className);\n }\n\n toNode() {\n return toNode.call(this, \"span\");\n }\n\n toMarkup() {\n return toMarkup.call(this, \"span\");\n }\n\n}\n/**\n * This node represents an anchor () element with a hyperlink. See `span`\n * for further details.\n */\n\nclass Anchor {\n constructor(href, classes, children, options) {\n this.children = void 0;\n this.attributes = void 0;\n this.classes = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.maxFontSize = void 0;\n this.style = void 0;\n initNode.call(this, classes, options);\n this.children = children || [];\n this.setAttribute('href', href);\n }\n\n setAttribute(attribute, value) {\n this.attributes[attribute] = value;\n }\n\n hasClass(className) {\n return utils.contains(this.classes, className);\n }\n\n toNode() {\n return toNode.call(this, \"a\");\n }\n\n toMarkup() {\n return toMarkup.call(this, \"a\");\n }\n\n}\n/**\n * This node represents an image embed () element.\n */\n\nclass Img {\n constructor(src, alt, style) {\n this.src = void 0;\n this.alt = void 0;\n this.classes = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.maxFontSize = void 0;\n this.style = void 0;\n this.alt = alt;\n this.src = src;\n this.classes = [\"mord\"];\n this.style = style;\n }\n\n hasClass(className) {\n return utils.contains(this.classes, className);\n }\n\n toNode() {\n var node = document.createElement(\"img\");\n node.src = this.src;\n node.alt = this.alt;\n node.className = \"mord\"; // Apply inline styles\n\n for (var style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n // $FlowFixMe\n node.style[style] = this.style[style];\n }\n }\n\n return node;\n }\n\n toMarkup() {\n var markup = \"\\\"\"\";\n return markup;\n }\n\n}\nvar iCombinations = {\n '\u00EE': '\\u0131\\u0302',\n '\u00EF': '\\u0131\\u0308',\n '\u00ED': '\\u0131\\u0301',\n // '\u012B': '\\u0131\\u0304', // enable when we add Extended Latin\n '\u00EC': '\\u0131\\u0300'\n};\n/**\n * A symbol node contains information about a single symbol. It either renders\n * to a single text node, or a span with a single text node in it, depending on\n * whether it has CSS classes, styles, or needs italic correction.\n */\n\nclass SymbolNode {\n constructor(text, height, depth, italic, skew, width, classes, style) {\n this.text = void 0;\n this.height = void 0;\n this.depth = void 0;\n this.italic = void 0;\n this.skew = void 0;\n this.width = void 0;\n this.maxFontSize = void 0;\n this.classes = void 0;\n this.style = void 0;\n this.text = text;\n this.height = height || 0;\n this.depth = depth || 0;\n this.italic = italic || 0;\n this.skew = skew || 0;\n this.width = width || 0;\n this.classes = classes || [];\n this.style = style || {};\n this.maxFontSize = 0; // Mark text from non-Latin scripts with specific classes so that we\n // can specify which fonts to use. This allows us to render these\n // characters with a serif font in situations where the browser would\n // either default to a sans serif or render a placeholder character.\n // We use CSS class names like cjk_fallback, hangul_fallback and\n // brahmic_fallback. See ./unicodeScripts.js for the set of possible\n // script names\n\n var script = scriptFromCodepoint(this.text.charCodeAt(0));\n\n if (script) {\n this.classes.push(script + \"_fallback\");\n }\n\n if (/[\u00EE\u00EF\u00ED\u00EC]/.test(this.text)) {\n // add \u012B when we add Extended Latin\n this.text = iCombinations[this.text];\n }\n }\n\n hasClass(className) {\n return utils.contains(this.classes, className);\n }\n /**\n * Creates a text node or span from a symbol node. Note that a span is only\n * created if it is needed.\n */\n\n\n toNode() {\n var node = document.createTextNode(this.text);\n var span = null;\n\n if (this.italic > 0) {\n span = document.createElement(\"span\");\n span.style.marginRight = makeEm(this.italic);\n }\n\n if (this.classes.length > 0) {\n span = span || document.createElement(\"span\");\n span.className = createClass(this.classes);\n }\n\n for (var style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n span = span || document.createElement(\"span\"); // $FlowFixMe Flow doesn't seem to understand span.style's type.\n\n span.style[style] = this.style[style];\n }\n }\n\n if (span) {\n span.appendChild(node);\n return span;\n } else {\n return node;\n }\n }\n /**\n * Creates markup for a symbol node.\n */\n\n\n toMarkup() {\n // TODO(alpert): More duplication than I'd like from\n // span.prototype.toMarkup and symbolNode.prototype.toNode...\n var needsSpan = false;\n var markup = \" 0) {\n styles += \"margin-right:\" + this.italic + \"em;\";\n }\n\n for (var style in this.style) {\n if (this.style.hasOwnProperty(style)) {\n styles += utils.hyphenate(style) + \":\" + this.style[style] + \";\";\n }\n }\n\n if (styles) {\n needsSpan = true;\n markup += \" style=\\\"\" + utils.escape(styles) + \"\\\"\";\n }\n\n var escaped = utils.escape(this.text);\n\n if (needsSpan) {\n markup += \">\";\n markup += escaped;\n markup += \"\";\n return markup;\n } else {\n return escaped;\n }\n }\n\n}\n/**\n * SVG nodes are used to render stretchy wide elements.\n */\n\nclass SvgNode {\n constructor(children, attributes) {\n this.children = void 0;\n this.attributes = void 0;\n this.children = children || [];\n this.attributes = attributes || {};\n }\n\n toNode() {\n var svgNS = \"http://www.w3.org/2000/svg\";\n var node = document.createElementNS(svgNS, \"svg\"); // Apply attributes\n\n for (var attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n }\n\n for (var i = 0; i < this.children.length; i++) {\n node.appendChild(this.children[i].toNode());\n }\n\n return node;\n }\n\n toMarkup() {\n var markup = \"\";\n\n for (var i = 0; i < this.children.length; i++) {\n markup += this.children[i].toMarkup();\n }\n\n markup += \"\";\n return markup;\n }\n\n}\nclass PathNode {\n constructor(pathName, alternate) {\n this.pathName = void 0;\n this.alternate = void 0;\n this.pathName = pathName;\n this.alternate = alternate; // Used only for \\sqrt, \\phase, & tall delims\n }\n\n toNode() {\n var svgNS = \"http://www.w3.org/2000/svg\";\n var node = document.createElementNS(svgNS, \"path\");\n\n if (this.alternate) {\n node.setAttribute(\"d\", this.alternate);\n } else {\n node.setAttribute(\"d\", path[this.pathName]);\n }\n\n return node;\n }\n\n toMarkup() {\n if (this.alternate) {\n return \"\";\n } else {\n return \"\";\n }\n }\n\n}\nclass LineNode {\n constructor(attributes) {\n this.attributes = void 0;\n this.attributes = attributes || {};\n }\n\n toNode() {\n var svgNS = \"http://www.w3.org/2000/svg\";\n var node = document.createElementNS(svgNS, \"line\"); // Apply attributes\n\n for (var attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n }\n\n return node;\n }\n\n toMarkup() {\n var markup = \"\";\n return markup;\n }\n\n}\nfunction assertSymbolDomNode(group) {\n if (group instanceof SymbolNode) {\n return group;\n } else {\n throw new Error(\"Expected symbolNode but got \" + String(group) + \".\");\n }\n}\nfunction assertSpan(group) {\n if (group instanceof Span) {\n return group;\n } else {\n throw new Error(\"Expected span but got \" + String(group) + \".\");\n }\n}\n\n/**\n * This file holds a list of all no-argument functions and single-character\n * symbols (like 'a' or ';').\n *\n * For each of the symbols, there are three properties they can have:\n * - font (required): the font to be used for this symbol. Either \"main\" (the\n normal font), or \"ams\" (the ams fonts).\n * - group (required): the ParseNode group type the symbol should have (i.e.\n \"textord\", \"mathord\", etc).\n See https://github.com/KaTeX/KaTeX/wiki/Examining-TeX#group-types\n * - replace: the character that this symbol or function should be\n * replaced with (i.e. \"\\phi\" has a replace value of \"\\u03d5\", the phi\n * character in the main font).\n *\n * The outermost map in the table indicates what mode the symbols should be\n * accepted in (e.g. \"math\" or \"text\").\n */\n// Some of these have a \"-token\" suffix since these are also used as `ParseNode`\n// types for raw text tokens, and we want to avoid conflicts with higher-level\n// `ParseNode` types. These `ParseNode`s are constructed within `Parser` by\n// looking up the `symbols` map.\nvar ATOMS = {\n \"bin\": 1,\n \"close\": 1,\n \"inner\": 1,\n \"open\": 1,\n \"punct\": 1,\n \"rel\": 1\n};\nvar NON_ATOMS = {\n \"accent-token\": 1,\n \"mathord\": 1,\n \"op-token\": 1,\n \"spacing\": 1,\n \"textord\": 1\n};\nvar symbols = {\n \"math\": {},\n \"text\": {}\n};\n/** `acceptUnicodeChar = true` is only applicable if `replace` is set. */\n\nfunction defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) {\n symbols[mode][name] = {\n font,\n group,\n replace\n };\n\n if (acceptUnicodeChar && replace) {\n symbols[mode][replace] = symbols[mode][name];\n }\n} // Some abbreviations for commonly used strings.\n// This helps minify the code, and also spotting typos using jshint.\n// modes:\n\nvar math = \"math\";\nvar text = \"text\"; // fonts:\n\nvar main = \"main\";\nvar ams = \"ams\"; // groups:\n\nvar accent = \"accent-token\";\nvar bin = \"bin\";\nvar close = \"close\";\nvar inner = \"inner\";\nvar mathord = \"mathord\";\nvar op = \"op-token\";\nvar open = \"open\";\nvar punct = \"punct\";\nvar rel = \"rel\";\nvar spacing = \"spacing\";\nvar textord = \"textord\"; // Now comes the symbol table\n// Relation Symbols\n\ndefineSymbol(math, main, rel, \"\\u2261\", \"\\\\equiv\", true);\ndefineSymbol(math, main, rel, \"\\u227a\", \"\\\\prec\", true);\ndefineSymbol(math, main, rel, \"\\u227b\", \"\\\\succ\", true);\ndefineSymbol(math, main, rel, \"\\u223c\", \"\\\\sim\", true);\ndefineSymbol(math, main, rel, \"\\u22a5\", \"\\\\perp\");\ndefineSymbol(math, main, rel, \"\\u2aaf\", \"\\\\preceq\", true);\ndefineSymbol(math, main, rel, \"\\u2ab0\", \"\\\\succeq\", true);\ndefineSymbol(math, main, rel, \"\\u2243\", \"\\\\simeq\", true);\ndefineSymbol(math, main, rel, \"\\u2223\", \"\\\\mid\", true);\ndefineSymbol(math, main, rel, \"\\u226a\", \"\\\\ll\", true);\ndefineSymbol(math, main, rel, \"\\u226b\", \"\\\\gg\", true);\ndefineSymbol(math, main, rel, \"\\u224d\", \"\\\\asymp\", true);\ndefineSymbol(math, main, rel, \"\\u2225\", \"\\\\parallel\");\ndefineSymbol(math, main, rel, \"\\u22c8\", \"\\\\bowtie\", true);\ndefineSymbol(math, main, rel, \"\\u2323\", \"\\\\smile\", true);\ndefineSymbol(math, main, rel, \"\\u2291\", \"\\\\sqsubseteq\", true);\ndefineSymbol(math, main, rel, \"\\u2292\", \"\\\\sqsupseteq\", true);\ndefineSymbol(math, main, rel, \"\\u2250\", \"\\\\doteq\", true);\ndefineSymbol(math, main, rel, \"\\u2322\", \"\\\\frown\", true);\ndefineSymbol(math, main, rel, \"\\u220b\", \"\\\\ni\", true);\ndefineSymbol(math, main, rel, \"\\u221d\", \"\\\\propto\", true);\ndefineSymbol(math, main, rel, \"\\u22a2\", \"\\\\vdash\", true);\ndefineSymbol(math, main, rel, \"\\u22a3\", \"\\\\dashv\", true);\ndefineSymbol(math, main, rel, \"\\u220b\", \"\\\\owns\"); // Punctuation\n\ndefineSymbol(math, main, punct, \"\\u002e\", \"\\\\ldotp\");\ndefineSymbol(math, main, punct, \"\\u22c5\", \"\\\\cdotp\"); // Misc Symbols\n\ndefineSymbol(math, main, textord, \"\\u0023\", \"\\\\#\");\ndefineSymbol(text, main, textord, \"\\u0023\", \"\\\\#\");\ndefineSymbol(math, main, textord, \"\\u0026\", \"\\\\&\");\ndefineSymbol(text, main, textord, \"\\u0026\", \"\\\\&\");\ndefineSymbol(math, main, textord, \"\\u2135\", \"\\\\aleph\", true);\ndefineSymbol(math, main, textord, \"\\u2200\", \"\\\\forall\", true);\ndefineSymbol(math, main, textord, \"\\u210f\", \"\\\\hbar\", true);\ndefineSymbol(math, main, textord, \"\\u2203\", \"\\\\exists\", true);\ndefineSymbol(math, main, textord, \"\\u2207\", \"\\\\nabla\", true);\ndefineSymbol(math, main, textord, \"\\u266d\", \"\\\\flat\", true);\ndefineSymbol(math, main, textord, \"\\u2113\", \"\\\\ell\", true);\ndefineSymbol(math, main, textord, \"\\u266e\", \"\\\\natural\", true);\ndefineSymbol(math, main, textord, \"\\u2663\", \"\\\\clubsuit\", true);\ndefineSymbol(math, main, textord, \"\\u2118\", \"\\\\wp\", true);\ndefineSymbol(math, main, textord, \"\\u266f\", \"\\\\sharp\", true);\ndefineSymbol(math, main, textord, \"\\u2662\", \"\\\\diamondsuit\", true);\ndefineSymbol(math, main, textord, \"\\u211c\", \"\\\\Re\", true);\ndefineSymbol(math, main, textord, \"\\u2661\", \"\\\\heartsuit\", true);\ndefineSymbol(math, main, textord, \"\\u2111\", \"\\\\Im\", true);\ndefineSymbol(math, main, textord, \"\\u2660\", \"\\\\spadesuit\", true);\ndefineSymbol(math, main, textord, \"\\u00a7\", \"\\\\S\", true);\ndefineSymbol(text, main, textord, \"\\u00a7\", \"\\\\S\");\ndefineSymbol(math, main, textord, \"\\u00b6\", \"\\\\P\", true);\ndefineSymbol(text, main, textord, \"\\u00b6\", \"\\\\P\"); // Math and Text\n\ndefineSymbol(math, main, textord, \"\\u2020\", \"\\\\dag\");\ndefineSymbol(text, main, textord, \"\\u2020\", \"\\\\dag\");\ndefineSymbol(text, main, textord, \"\\u2020\", \"\\\\textdagger\");\ndefineSymbol(math, main, textord, \"\\u2021\", \"\\\\ddag\");\ndefineSymbol(text, main, textord, \"\\u2021\", \"\\\\ddag\");\ndefineSymbol(text, main, textord, \"\\u2021\", \"\\\\textdaggerdbl\"); // Large Delimiters\n\ndefineSymbol(math, main, close, \"\\u23b1\", \"\\\\rmoustache\", true);\ndefineSymbol(math, main, open, \"\\u23b0\", \"\\\\lmoustache\", true);\ndefineSymbol(math, main, close, \"\\u27ef\", \"\\\\rgroup\", true);\ndefineSymbol(math, main, open, \"\\u27ee\", \"\\\\lgroup\", true); // Binary Operators\n\ndefineSymbol(math, main, bin, \"\\u2213\", \"\\\\mp\", true);\ndefineSymbol(math, main, bin, \"\\u2296\", \"\\\\ominus\", true);\ndefineSymbol(math, main, bin, \"\\u228e\", \"\\\\uplus\", true);\ndefineSymbol(math, main, bin, \"\\u2293\", \"\\\\sqcap\", true);\ndefineSymbol(math, main, bin, \"\\u2217\", \"\\\\ast\");\ndefineSymbol(math, main, bin, \"\\u2294\", \"\\\\sqcup\", true);\ndefineSymbol(math, main, bin, \"\\u25ef\", \"\\\\bigcirc\", true);\ndefineSymbol(math, main, bin, \"\\u2219\", \"\\\\bullet\", true);\ndefineSymbol(math, main, bin, \"\\u2021\", \"\\\\ddagger\");\ndefineSymbol(math, main, bin, \"\\u2240\", \"\\\\wr\", true);\ndefineSymbol(math, main, bin, \"\\u2a3f\", \"\\\\amalg\");\ndefineSymbol(math, main, bin, \"\\u0026\", \"\\\\And\"); // from amsmath\n// Arrow Symbols\n\ndefineSymbol(math, main, rel, \"\\u27f5\", \"\\\\longleftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d0\", \"\\\\Leftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f8\", \"\\\\Longleftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f6\", \"\\\\longrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d2\", \"\\\\Rightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f9\", \"\\\\Longrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2194\", \"\\\\leftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27f7\", \"\\\\longleftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d4\", \"\\\\Leftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u27fa\", \"\\\\Longleftrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21a6\", \"\\\\mapsto\", true);\ndefineSymbol(math, main, rel, \"\\u27fc\", \"\\\\longmapsto\", true);\ndefineSymbol(math, main, rel, \"\\u2197\", \"\\\\nearrow\", true);\ndefineSymbol(math, main, rel, \"\\u21a9\", \"\\\\hookleftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21aa\", \"\\\\hookrightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2198\", \"\\\\searrow\", true);\ndefineSymbol(math, main, rel, \"\\u21bc\", \"\\\\leftharpoonup\", true);\ndefineSymbol(math, main, rel, \"\\u21c0\", \"\\\\rightharpoonup\", true);\ndefineSymbol(math, main, rel, \"\\u2199\", \"\\\\swarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21bd\", \"\\\\leftharpoondown\", true);\ndefineSymbol(math, main, rel, \"\\u21c1\", \"\\\\rightharpoondown\", true);\ndefineSymbol(math, main, rel, \"\\u2196\", \"\\\\nwarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21cc\", \"\\\\rightleftharpoons\", true); // AMS Negated Binary Relations\n\ndefineSymbol(math, ams, rel, \"\\u226e\", \"\\\\nless\", true); // Symbol names preceded by \"@\" each have a corresponding macro.\n\ndefineSymbol(math, ams, rel, \"\\ue010\", \"\\\\@nleqslant\");\ndefineSymbol(math, ams, rel, \"\\ue011\", \"\\\\@nleqq\");\ndefineSymbol(math, ams, rel, \"\\u2a87\", \"\\\\lneq\", true);\ndefineSymbol(math, ams, rel, \"\\u2268\", \"\\\\lneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue00c\", \"\\\\@lvertneqq\");\ndefineSymbol(math, ams, rel, \"\\u22e6\", \"\\\\lnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a89\", \"\\\\lnapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u2280\", \"\\\\nprec\", true); // unicode-math maps \\u22e0 to \\npreccurlyeq. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u22e0\", \"\\\\npreceq\", true);\ndefineSymbol(math, ams, rel, \"\\u22e8\", \"\\\\precnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab9\", \"\\\\precnapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u2241\", \"\\\\nsim\", true);\ndefineSymbol(math, ams, rel, \"\\ue006\", \"\\\\@nshortmid\");\ndefineSymbol(math, ams, rel, \"\\u2224\", \"\\\\nmid\", true);\ndefineSymbol(math, ams, rel, \"\\u22ac\", \"\\\\nvdash\", true);\ndefineSymbol(math, ams, rel, \"\\u22ad\", \"\\\\nvDash\", true);\ndefineSymbol(math, ams, rel, \"\\u22ea\", \"\\\\ntriangleleft\");\ndefineSymbol(math, ams, rel, \"\\u22ec\", \"\\\\ntrianglelefteq\", true);\ndefineSymbol(math, ams, rel, \"\\u228a\", \"\\\\subsetneq\", true);\ndefineSymbol(math, ams, rel, \"\\ue01a\", \"\\\\@varsubsetneq\");\ndefineSymbol(math, ams, rel, \"\\u2acb\", \"\\\\subsetneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue017\", \"\\\\@varsubsetneqq\");\ndefineSymbol(math, ams, rel, \"\\u226f\", \"\\\\ngtr\", true);\ndefineSymbol(math, ams, rel, \"\\ue00f\", \"\\\\@ngeqslant\");\ndefineSymbol(math, ams, rel, \"\\ue00e\", \"\\\\@ngeqq\");\ndefineSymbol(math, ams, rel, \"\\u2a88\", \"\\\\gneq\", true);\ndefineSymbol(math, ams, rel, \"\\u2269\", \"\\\\gneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue00d\", \"\\\\@gvertneqq\");\ndefineSymbol(math, ams, rel, \"\\u22e7\", \"\\\\gnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a8a\", \"\\\\gnapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u2281\", \"\\\\nsucc\", true); // unicode-math maps \\u22e1 to \\nsucccurlyeq. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u22e1\", \"\\\\nsucceq\", true);\ndefineSymbol(math, ams, rel, \"\\u22e9\", \"\\\\succnsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2aba\", \"\\\\succnapprox\", true); // unicode-math maps \\u2246 to \\simneqq. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u2246\", \"\\\\ncong\", true);\ndefineSymbol(math, ams, rel, \"\\ue007\", \"\\\\@nshortparallel\");\ndefineSymbol(math, ams, rel, \"\\u2226\", \"\\\\nparallel\", true);\ndefineSymbol(math, ams, rel, \"\\u22af\", \"\\\\nVDash\", true);\ndefineSymbol(math, ams, rel, \"\\u22eb\", \"\\\\ntriangleright\");\ndefineSymbol(math, ams, rel, \"\\u22ed\", \"\\\\ntrianglerighteq\", true);\ndefineSymbol(math, ams, rel, \"\\ue018\", \"\\\\@nsupseteqq\");\ndefineSymbol(math, ams, rel, \"\\u228b\", \"\\\\supsetneq\", true);\ndefineSymbol(math, ams, rel, \"\\ue01b\", \"\\\\@varsupsetneq\");\ndefineSymbol(math, ams, rel, \"\\u2acc\", \"\\\\supsetneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue019\", \"\\\\@varsupsetneqq\");\ndefineSymbol(math, ams, rel, \"\\u22ae\", \"\\\\nVdash\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab5\", \"\\\\precneqq\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab6\", \"\\\\succneqq\", true);\ndefineSymbol(math, ams, rel, \"\\ue016\", \"\\\\@nsubseteqq\");\ndefineSymbol(math, ams, bin, \"\\u22b4\", \"\\\\unlhd\");\ndefineSymbol(math, ams, bin, \"\\u22b5\", \"\\\\unrhd\"); // AMS Negated Arrows\n\ndefineSymbol(math, ams, rel, \"\\u219a\", \"\\\\nleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u219b\", \"\\\\nrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21cd\", \"\\\\nLeftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21cf\", \"\\\\nRightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21ae\", \"\\\\nleftrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21ce\", \"\\\\nLeftrightarrow\", true); // AMS Misc\n\ndefineSymbol(math, ams, rel, \"\\u25b3\", \"\\\\vartriangle\");\ndefineSymbol(math, ams, textord, \"\\u210f\", \"\\\\hslash\");\ndefineSymbol(math, ams, textord, \"\\u25bd\", \"\\\\triangledown\");\ndefineSymbol(math, ams, textord, \"\\u25ca\", \"\\\\lozenge\");\ndefineSymbol(math, ams, textord, \"\\u24c8\", \"\\\\circledS\");\ndefineSymbol(math, ams, textord, \"\\u00ae\", \"\\\\circledR\");\ndefineSymbol(text, ams, textord, \"\\u00ae\", \"\\\\circledR\");\ndefineSymbol(math, ams, textord, \"\\u2221\", \"\\\\measuredangle\", true);\ndefineSymbol(math, ams, textord, \"\\u2204\", \"\\\\nexists\");\ndefineSymbol(math, ams, textord, \"\\u2127\", \"\\\\mho\");\ndefineSymbol(math, ams, textord, \"\\u2132\", \"\\\\Finv\", true);\ndefineSymbol(math, ams, textord, \"\\u2141\", \"\\\\Game\", true);\ndefineSymbol(math, ams, textord, \"\\u2035\", \"\\\\backprime\");\ndefineSymbol(math, ams, textord, \"\\u25b2\", \"\\\\blacktriangle\");\ndefineSymbol(math, ams, textord, \"\\u25bc\", \"\\\\blacktriangledown\");\ndefineSymbol(math, ams, textord, \"\\u25a0\", \"\\\\blacksquare\");\ndefineSymbol(math, ams, textord, \"\\u29eb\", \"\\\\blacklozenge\");\ndefineSymbol(math, ams, textord, \"\\u2605\", \"\\\\bigstar\");\ndefineSymbol(math, ams, textord, \"\\u2222\", \"\\\\sphericalangle\", true);\ndefineSymbol(math, ams, textord, \"\\u2201\", \"\\\\complement\", true); // unicode-math maps U+F0 to \\matheth. We map to AMS function \\eth\n\ndefineSymbol(math, ams, textord, \"\\u00f0\", \"\\\\eth\", true);\ndefineSymbol(text, main, textord, \"\\u00f0\", \"\\u00f0\");\ndefineSymbol(math, ams, textord, \"\\u2571\", \"\\\\diagup\");\ndefineSymbol(math, ams, textord, \"\\u2572\", \"\\\\diagdown\");\ndefineSymbol(math, ams, textord, \"\\u25a1\", \"\\\\square\");\ndefineSymbol(math, ams, textord, \"\\u25a1\", \"\\\\Box\");\ndefineSymbol(math, ams, textord, \"\\u25ca\", \"\\\\Diamond\"); // unicode-math maps U+A5 to \\mathyen. We map to AMS function \\yen\n\ndefineSymbol(math, ams, textord, \"\\u00a5\", \"\\\\yen\", true);\ndefineSymbol(text, ams, textord, \"\\u00a5\", \"\\\\yen\", true);\ndefineSymbol(math, ams, textord, \"\\u2713\", \"\\\\checkmark\", true);\ndefineSymbol(text, ams, textord, \"\\u2713\", \"\\\\checkmark\"); // AMS Hebrew\n\ndefineSymbol(math, ams, textord, \"\\u2136\", \"\\\\beth\", true);\ndefineSymbol(math, ams, textord, \"\\u2138\", \"\\\\daleth\", true);\ndefineSymbol(math, ams, textord, \"\\u2137\", \"\\\\gimel\", true); // AMS Greek\n\ndefineSymbol(math, ams, textord, \"\\u03dd\", \"\\\\digamma\", true);\ndefineSymbol(math, ams, textord, \"\\u03f0\", \"\\\\varkappa\"); // AMS Delimiters\n\ndefineSymbol(math, ams, open, \"\\u250c\", \"\\\\@ulcorner\", true);\ndefineSymbol(math, ams, close, \"\\u2510\", \"\\\\@urcorner\", true);\ndefineSymbol(math, ams, open, \"\\u2514\", \"\\\\@llcorner\", true);\ndefineSymbol(math, ams, close, \"\\u2518\", \"\\\\@lrcorner\", true); // AMS Binary Relations\n\ndefineSymbol(math, ams, rel, \"\\u2266\", \"\\\\leqq\", true);\ndefineSymbol(math, ams, rel, \"\\u2a7d\", \"\\\\leqslant\", true);\ndefineSymbol(math, ams, rel, \"\\u2a95\", \"\\\\eqslantless\", true);\ndefineSymbol(math, ams, rel, \"\\u2272\", \"\\\\lesssim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a85\", \"\\\\lessapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u224a\", \"\\\\approxeq\", true);\ndefineSymbol(math, ams, bin, \"\\u22d6\", \"\\\\lessdot\");\ndefineSymbol(math, ams, rel, \"\\u22d8\", \"\\\\lll\", true);\ndefineSymbol(math, ams, rel, \"\\u2276\", \"\\\\lessgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u22da\", \"\\\\lesseqgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u2a8b\", \"\\\\lesseqqgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u2251\", \"\\\\doteqdot\");\ndefineSymbol(math, ams, rel, \"\\u2253\", \"\\\\risingdotseq\", true);\ndefineSymbol(math, ams, rel, \"\\u2252\", \"\\\\fallingdotseq\", true);\ndefineSymbol(math, ams, rel, \"\\u223d\", \"\\\\backsim\", true);\ndefineSymbol(math, ams, rel, \"\\u22cd\", \"\\\\backsimeq\", true);\ndefineSymbol(math, ams, rel, \"\\u2ac5\", \"\\\\subseteqq\", true);\ndefineSymbol(math, ams, rel, \"\\u22d0\", \"\\\\Subset\", true);\ndefineSymbol(math, ams, rel, \"\\u228f\", \"\\\\sqsubset\", true);\ndefineSymbol(math, ams, rel, \"\\u227c\", \"\\\\preccurlyeq\", true);\ndefineSymbol(math, ams, rel, \"\\u22de\", \"\\\\curlyeqprec\", true);\ndefineSymbol(math, ams, rel, \"\\u227e\", \"\\\\precsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab7\", \"\\\\precapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u22b2\", \"\\\\vartriangleleft\");\ndefineSymbol(math, ams, rel, \"\\u22b4\", \"\\\\trianglelefteq\");\ndefineSymbol(math, ams, rel, \"\\u22a8\", \"\\\\vDash\", true);\ndefineSymbol(math, ams, rel, \"\\u22aa\", \"\\\\Vvdash\", true);\ndefineSymbol(math, ams, rel, \"\\u2323\", \"\\\\smallsmile\");\ndefineSymbol(math, ams, rel, \"\\u2322\", \"\\\\smallfrown\");\ndefineSymbol(math, ams, rel, \"\\u224f\", \"\\\\bumpeq\", true);\ndefineSymbol(math, ams, rel, \"\\u224e\", \"\\\\Bumpeq\", true);\ndefineSymbol(math, ams, rel, \"\\u2267\", \"\\\\geqq\", true);\ndefineSymbol(math, ams, rel, \"\\u2a7e\", \"\\\\geqslant\", true);\ndefineSymbol(math, ams, rel, \"\\u2a96\", \"\\\\eqslantgtr\", true);\ndefineSymbol(math, ams, rel, \"\\u2273\", \"\\\\gtrsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2a86\", \"\\\\gtrapprox\", true);\ndefineSymbol(math, ams, bin, \"\\u22d7\", \"\\\\gtrdot\");\ndefineSymbol(math, ams, rel, \"\\u22d9\", \"\\\\ggg\", true);\ndefineSymbol(math, ams, rel, \"\\u2277\", \"\\\\gtrless\", true);\ndefineSymbol(math, ams, rel, \"\\u22db\", \"\\\\gtreqless\", true);\ndefineSymbol(math, ams, rel, \"\\u2a8c\", \"\\\\gtreqqless\", true);\ndefineSymbol(math, ams, rel, \"\\u2256\", \"\\\\eqcirc\", true);\ndefineSymbol(math, ams, rel, \"\\u2257\", \"\\\\circeq\", true);\ndefineSymbol(math, ams, rel, \"\\u225c\", \"\\\\triangleq\", true);\ndefineSymbol(math, ams, rel, \"\\u223c\", \"\\\\thicksim\");\ndefineSymbol(math, ams, rel, \"\\u2248\", \"\\\\thickapprox\");\ndefineSymbol(math, ams, rel, \"\\u2ac6\", \"\\\\supseteqq\", true);\ndefineSymbol(math, ams, rel, \"\\u22d1\", \"\\\\Supset\", true);\ndefineSymbol(math, ams, rel, \"\\u2290\", \"\\\\sqsupset\", true);\ndefineSymbol(math, ams, rel, \"\\u227d\", \"\\\\succcurlyeq\", true);\ndefineSymbol(math, ams, rel, \"\\u22df\", \"\\\\curlyeqsucc\", true);\ndefineSymbol(math, ams, rel, \"\\u227f\", \"\\\\succsim\", true);\ndefineSymbol(math, ams, rel, \"\\u2ab8\", \"\\\\succapprox\", true);\ndefineSymbol(math, ams, rel, \"\\u22b3\", \"\\\\vartriangleright\");\ndefineSymbol(math, ams, rel, \"\\u22b5\", \"\\\\trianglerighteq\");\ndefineSymbol(math, ams, rel, \"\\u22a9\", \"\\\\Vdash\", true);\ndefineSymbol(math, ams, rel, \"\\u2223\", \"\\\\shortmid\");\ndefineSymbol(math, ams, rel, \"\\u2225\", \"\\\\shortparallel\");\ndefineSymbol(math, ams, rel, \"\\u226c\", \"\\\\between\", true);\ndefineSymbol(math, ams, rel, \"\\u22d4\", \"\\\\pitchfork\", true);\ndefineSymbol(math, ams, rel, \"\\u221d\", \"\\\\varpropto\");\ndefineSymbol(math, ams, rel, \"\\u25c0\", \"\\\\blacktriangleleft\"); // unicode-math says that \\therefore is a mathord atom.\n// We kept the amssymb atom type, which is rel.\n\ndefineSymbol(math, ams, rel, \"\\u2234\", \"\\\\therefore\", true);\ndefineSymbol(math, ams, rel, \"\\u220d\", \"\\\\backepsilon\");\ndefineSymbol(math, ams, rel, \"\\u25b6\", \"\\\\blacktriangleright\"); // unicode-math says that \\because is a mathord atom.\n// We kept the amssymb atom type, which is rel.\n\ndefineSymbol(math, ams, rel, \"\\u2235\", \"\\\\because\", true);\ndefineSymbol(math, ams, rel, \"\\u22d8\", \"\\\\llless\");\ndefineSymbol(math, ams, rel, \"\\u22d9\", \"\\\\gggtr\");\ndefineSymbol(math, ams, bin, \"\\u22b2\", \"\\\\lhd\");\ndefineSymbol(math, ams, bin, \"\\u22b3\", \"\\\\rhd\");\ndefineSymbol(math, ams, rel, \"\\u2242\", \"\\\\eqsim\", true);\ndefineSymbol(math, main, rel, \"\\u22c8\", \"\\\\Join\");\ndefineSymbol(math, ams, rel, \"\\u2251\", \"\\\\Doteq\", true); // AMS Binary Operators\n\ndefineSymbol(math, ams, bin, \"\\u2214\", \"\\\\dotplus\", true);\ndefineSymbol(math, ams, bin, \"\\u2216\", \"\\\\smallsetminus\");\ndefineSymbol(math, ams, bin, \"\\u22d2\", \"\\\\Cap\", true);\ndefineSymbol(math, ams, bin, \"\\u22d3\", \"\\\\Cup\", true);\ndefineSymbol(math, ams, bin, \"\\u2a5e\", \"\\\\doublebarwedge\", true);\ndefineSymbol(math, ams, bin, \"\\u229f\", \"\\\\boxminus\", true);\ndefineSymbol(math, ams, bin, \"\\u229e\", \"\\\\boxplus\", true);\ndefineSymbol(math, ams, bin, \"\\u22c7\", \"\\\\divideontimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22c9\", \"\\\\ltimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22ca\", \"\\\\rtimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22cb\", \"\\\\leftthreetimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22cc\", \"\\\\rightthreetimes\", true);\ndefineSymbol(math, ams, bin, \"\\u22cf\", \"\\\\curlywedge\", true);\ndefineSymbol(math, ams, bin, \"\\u22ce\", \"\\\\curlyvee\", true);\ndefineSymbol(math, ams, bin, \"\\u229d\", \"\\\\circleddash\", true);\ndefineSymbol(math, ams, bin, \"\\u229b\", \"\\\\circledast\", true);\ndefineSymbol(math, ams, bin, \"\\u22c5\", \"\\\\centerdot\");\ndefineSymbol(math, ams, bin, \"\\u22ba\", \"\\\\intercal\", true);\ndefineSymbol(math, ams, bin, \"\\u22d2\", \"\\\\doublecap\");\ndefineSymbol(math, ams, bin, \"\\u22d3\", \"\\\\doublecup\");\ndefineSymbol(math, ams, bin, \"\\u22a0\", \"\\\\boxtimes\", true); // AMS Arrows\n// Note: unicode-math maps \\u21e2 to their own function \\rightdasharrow.\n// We'll map it to AMS function \\dashrightarrow. It produces the same atom.\n\ndefineSymbol(math, ams, rel, \"\\u21e2\", \"\\\\dashrightarrow\", true); // unicode-math maps \\u21e0 to \\leftdasharrow. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u21e0\", \"\\\\dashleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21c7\", \"\\\\leftleftarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21c6\", \"\\\\leftrightarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21da\", \"\\\\Lleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u219e\", \"\\\\twoheadleftarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21a2\", \"\\\\leftarrowtail\", true);\ndefineSymbol(math, ams, rel, \"\\u21ab\", \"\\\\looparrowleft\", true);\ndefineSymbol(math, ams, rel, \"\\u21cb\", \"\\\\leftrightharpoons\", true);\ndefineSymbol(math, ams, rel, \"\\u21b6\", \"\\\\curvearrowleft\", true); // unicode-math maps \\u21ba to \\acwopencirclearrow. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u21ba\", \"\\\\circlearrowleft\", true);\ndefineSymbol(math, ams, rel, \"\\u21b0\", \"\\\\Lsh\", true);\ndefineSymbol(math, ams, rel, \"\\u21c8\", \"\\\\upuparrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21bf\", \"\\\\upharpoonleft\", true);\ndefineSymbol(math, ams, rel, \"\\u21c3\", \"\\\\downharpoonleft\", true);\ndefineSymbol(math, main, rel, \"\\u22b6\", \"\\\\origof\", true); // not in font\n\ndefineSymbol(math, main, rel, \"\\u22b7\", \"\\\\imageof\", true); // not in font\n\ndefineSymbol(math, ams, rel, \"\\u22b8\", \"\\\\multimap\", true);\ndefineSymbol(math, ams, rel, \"\\u21ad\", \"\\\\leftrightsquigarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21c9\", \"\\\\rightrightarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21c4\", \"\\\\rightleftarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21a0\", \"\\\\twoheadrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21a3\", \"\\\\rightarrowtail\", true);\ndefineSymbol(math, ams, rel, \"\\u21ac\", \"\\\\looparrowright\", true);\ndefineSymbol(math, ams, rel, \"\\u21b7\", \"\\\\curvearrowright\", true); // unicode-math maps \\u21bb to \\cwopencirclearrow. We'll use the AMS synonym.\n\ndefineSymbol(math, ams, rel, \"\\u21bb\", \"\\\\circlearrowright\", true);\ndefineSymbol(math, ams, rel, \"\\u21b1\", \"\\\\Rsh\", true);\ndefineSymbol(math, ams, rel, \"\\u21ca\", \"\\\\downdownarrows\", true);\ndefineSymbol(math, ams, rel, \"\\u21be\", \"\\\\upharpoonright\", true);\ndefineSymbol(math, ams, rel, \"\\u21c2\", \"\\\\downharpoonright\", true);\ndefineSymbol(math, ams, rel, \"\\u21dd\", \"\\\\rightsquigarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21dd\", \"\\\\leadsto\");\ndefineSymbol(math, ams, rel, \"\\u21db\", \"\\\\Rrightarrow\", true);\ndefineSymbol(math, ams, rel, \"\\u21be\", \"\\\\restriction\");\ndefineSymbol(math, main, textord, \"\\u2018\", \"`\");\ndefineSymbol(math, main, textord, \"$\", \"\\\\$\");\ndefineSymbol(text, main, textord, \"$\", \"\\\\$\");\ndefineSymbol(text, main, textord, \"$\", \"\\\\textdollar\");\ndefineSymbol(math, main, textord, \"%\", \"\\\\%\");\ndefineSymbol(text, main, textord, \"%\", \"\\\\%\");\ndefineSymbol(math, main, textord, \"_\", \"\\\\_\");\ndefineSymbol(text, main, textord, \"_\", \"\\\\_\");\ndefineSymbol(text, main, textord, \"_\", \"\\\\textunderscore\");\ndefineSymbol(math, main, textord, \"\\u2220\", \"\\\\angle\", true);\ndefineSymbol(math, main, textord, \"\\u221e\", \"\\\\infty\", true);\ndefineSymbol(math, main, textord, \"\\u2032\", \"\\\\prime\");\ndefineSymbol(math, main, textord, \"\\u25b3\", \"\\\\triangle\");\ndefineSymbol(math, main, textord, \"\\u0393\", \"\\\\Gamma\", true);\ndefineSymbol(math, main, textord, \"\\u0394\", \"\\\\Delta\", true);\ndefineSymbol(math, main, textord, \"\\u0398\", \"\\\\Theta\", true);\ndefineSymbol(math, main, textord, \"\\u039b\", \"\\\\Lambda\", true);\ndefineSymbol(math, main, textord, \"\\u039e\", \"\\\\Xi\", true);\ndefineSymbol(math, main, textord, \"\\u03a0\", \"\\\\Pi\", true);\ndefineSymbol(math, main, textord, \"\\u03a3\", \"\\\\Sigma\", true);\ndefineSymbol(math, main, textord, \"\\u03a5\", \"\\\\Upsilon\", true);\ndefineSymbol(math, main, textord, \"\\u03a6\", \"\\\\Phi\", true);\ndefineSymbol(math, main, textord, \"\\u03a8\", \"\\\\Psi\", true);\ndefineSymbol(math, main, textord, \"\\u03a9\", \"\\\\Omega\", true);\ndefineSymbol(math, main, textord, \"A\", \"\\u0391\");\ndefineSymbol(math, main, textord, \"B\", \"\\u0392\");\ndefineSymbol(math, main, textord, \"E\", \"\\u0395\");\ndefineSymbol(math, main, textord, \"Z\", \"\\u0396\");\ndefineSymbol(math, main, textord, \"H\", \"\\u0397\");\ndefineSymbol(math, main, textord, \"I\", \"\\u0399\");\ndefineSymbol(math, main, textord, \"K\", \"\\u039A\");\ndefineSymbol(math, main, textord, \"M\", \"\\u039C\");\ndefineSymbol(math, main, textord, \"N\", \"\\u039D\");\ndefineSymbol(math, main, textord, \"O\", \"\\u039F\");\ndefineSymbol(math, main, textord, \"P\", \"\\u03A1\");\ndefineSymbol(math, main, textord, \"T\", \"\\u03A4\");\ndefineSymbol(math, main, textord, \"X\", \"\\u03A7\");\ndefineSymbol(math, main, textord, \"\\u00ac\", \"\\\\neg\", true);\ndefineSymbol(math, main, textord, \"\\u00ac\", \"\\\\lnot\");\ndefineSymbol(math, main, textord, \"\\u22a4\", \"\\\\top\");\ndefineSymbol(math, main, textord, \"\\u22a5\", \"\\\\bot\");\ndefineSymbol(math, main, textord, \"\\u2205\", \"\\\\emptyset\");\ndefineSymbol(math, ams, textord, \"\\u2205\", \"\\\\varnothing\");\ndefineSymbol(math, main, mathord, \"\\u03b1\", \"\\\\alpha\", true);\ndefineSymbol(math, main, mathord, \"\\u03b2\", \"\\\\beta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b3\", \"\\\\gamma\", true);\ndefineSymbol(math, main, mathord, \"\\u03b4\", \"\\\\delta\", true);\ndefineSymbol(math, main, mathord, \"\\u03f5\", \"\\\\epsilon\", true);\ndefineSymbol(math, main, mathord, \"\\u03b6\", \"\\\\zeta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b7\", \"\\\\eta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b8\", \"\\\\theta\", true);\ndefineSymbol(math, main, mathord, \"\\u03b9\", \"\\\\iota\", true);\ndefineSymbol(math, main, mathord, \"\\u03ba\", \"\\\\kappa\", true);\ndefineSymbol(math, main, mathord, \"\\u03bb\", \"\\\\lambda\", true);\ndefineSymbol(math, main, mathord, \"\\u03bc\", \"\\\\mu\", true);\ndefineSymbol(math, main, mathord, \"\\u03bd\", \"\\\\nu\", true);\ndefineSymbol(math, main, mathord, \"\\u03be\", \"\\\\xi\", true);\ndefineSymbol(math, main, mathord, \"\\u03bf\", \"\\\\omicron\", true);\ndefineSymbol(math, main, mathord, \"\\u03c0\", \"\\\\pi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c1\", \"\\\\rho\", true);\ndefineSymbol(math, main, mathord, \"\\u03c3\", \"\\\\sigma\", true);\ndefineSymbol(math, main, mathord, \"\\u03c4\", \"\\\\tau\", true);\ndefineSymbol(math, main, mathord, \"\\u03c5\", \"\\\\upsilon\", true);\ndefineSymbol(math, main, mathord, \"\\u03d5\", \"\\\\phi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c7\", \"\\\\chi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c8\", \"\\\\psi\", true);\ndefineSymbol(math, main, mathord, \"\\u03c9\", \"\\\\omega\", true);\ndefineSymbol(math, main, mathord, \"\\u03b5\", \"\\\\varepsilon\", true);\ndefineSymbol(math, main, mathord, \"\\u03d1\", \"\\\\vartheta\", true);\ndefineSymbol(math, main, mathord, \"\\u03d6\", \"\\\\varpi\", true);\ndefineSymbol(math, main, mathord, \"\\u03f1\", \"\\\\varrho\", true);\ndefineSymbol(math, main, mathord, \"\\u03c2\", \"\\\\varsigma\", true);\ndefineSymbol(math, main, mathord, \"\\u03c6\", \"\\\\varphi\", true);\ndefineSymbol(math, main, bin, \"\\u2217\", \"*\", true);\ndefineSymbol(math, main, bin, \"+\", \"+\");\ndefineSymbol(math, main, bin, \"\\u2212\", \"-\", true);\ndefineSymbol(math, main, bin, \"\\u22c5\", \"\\\\cdot\", true);\ndefineSymbol(math, main, bin, \"\\u2218\", \"\\\\circ\", true);\ndefineSymbol(math, main, bin, \"\\u00f7\", \"\\\\div\", true);\ndefineSymbol(math, main, bin, \"\\u00b1\", \"\\\\pm\", true);\ndefineSymbol(math, main, bin, \"\\u00d7\", \"\\\\times\", true);\ndefineSymbol(math, main, bin, \"\\u2229\", \"\\\\cap\", true);\ndefineSymbol(math, main, bin, \"\\u222a\", \"\\\\cup\", true);\ndefineSymbol(math, main, bin, \"\\u2216\", \"\\\\setminus\", true);\ndefineSymbol(math, main, bin, \"\\u2227\", \"\\\\land\");\ndefineSymbol(math, main, bin, \"\\u2228\", \"\\\\lor\");\ndefineSymbol(math, main, bin, \"\\u2227\", \"\\\\wedge\", true);\ndefineSymbol(math, main, bin, \"\\u2228\", \"\\\\vee\", true);\ndefineSymbol(math, main, textord, \"\\u221a\", \"\\\\surd\");\ndefineSymbol(math, main, open, \"\\u27e8\", \"\\\\langle\", true);\ndefineSymbol(math, main, open, \"\\u2223\", \"\\\\lvert\");\ndefineSymbol(math, main, open, \"\\u2225\", \"\\\\lVert\");\ndefineSymbol(math, main, close, \"?\", \"?\");\ndefineSymbol(math, main, close, \"!\", \"!\");\ndefineSymbol(math, main, close, \"\\u27e9\", \"\\\\rangle\", true);\ndefineSymbol(math, main, close, \"\\u2223\", \"\\\\rvert\");\ndefineSymbol(math, main, close, \"\\u2225\", \"\\\\rVert\");\ndefineSymbol(math, main, rel, \"=\", \"=\");\ndefineSymbol(math, main, rel, \":\", \":\");\ndefineSymbol(math, main, rel, \"\\u2248\", \"\\\\approx\", true);\ndefineSymbol(math, main, rel, \"\\u2245\", \"\\\\cong\", true);\ndefineSymbol(math, main, rel, \"\\u2265\", \"\\\\ge\");\ndefineSymbol(math, main, rel, \"\\u2265\", \"\\\\geq\", true);\ndefineSymbol(math, main, rel, \"\\u2190\", \"\\\\gets\");\ndefineSymbol(math, main, rel, \">\", \"\\\\gt\", true);\ndefineSymbol(math, main, rel, \"\\u2208\", \"\\\\in\", true);\ndefineSymbol(math, main, rel, \"\\ue020\", \"\\\\@not\");\ndefineSymbol(math, main, rel, \"\\u2282\", \"\\\\subset\", true);\ndefineSymbol(math, main, rel, \"\\u2283\", \"\\\\supset\", true);\ndefineSymbol(math, main, rel, \"\\u2286\", \"\\\\subseteq\", true);\ndefineSymbol(math, main, rel, \"\\u2287\", \"\\\\supseteq\", true);\ndefineSymbol(math, ams, rel, \"\\u2288\", \"\\\\nsubseteq\", true);\ndefineSymbol(math, ams, rel, \"\\u2289\", \"\\\\nsupseteq\", true);\ndefineSymbol(math, main, rel, \"\\u22a8\", \"\\\\models\");\ndefineSymbol(math, main, rel, \"\\u2190\", \"\\\\leftarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2264\", \"\\\\le\");\ndefineSymbol(math, main, rel, \"\\u2264\", \"\\\\leq\", true);\ndefineSymbol(math, main, rel, \"<\", \"\\\\lt\", true);\ndefineSymbol(math, main, rel, \"\\u2192\", \"\\\\rightarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2192\", \"\\\\to\");\ndefineSymbol(math, ams, rel, \"\\u2271\", \"\\\\ngeq\", true);\ndefineSymbol(math, ams, rel, \"\\u2270\", \"\\\\nleq\", true);\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"\\\\ \");\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"\\\\space\"); // Ref: LaTeX Source 2e: \\DeclareRobustCommand{\\nobreakspace}{%\n\ndefineSymbol(math, main, spacing, \"\\u00a0\", \"\\\\nobreakspace\");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \"\\\\ \");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \" \");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \"\\\\space\");\ndefineSymbol(text, main, spacing, \"\\u00a0\", \"\\\\nobreakspace\");\ndefineSymbol(math, main, spacing, null, \"\\\\nobreak\");\ndefineSymbol(math, main, spacing, null, \"\\\\allowbreak\");\ndefineSymbol(math, main, punct, \",\", \",\");\ndefineSymbol(math, main, punct, \";\", \";\");\ndefineSymbol(math, ams, bin, \"\\u22bc\", \"\\\\barwedge\", true);\ndefineSymbol(math, ams, bin, \"\\u22bb\", \"\\\\veebar\", true);\ndefineSymbol(math, main, bin, \"\\u2299\", \"\\\\odot\", true);\ndefineSymbol(math, main, bin, \"\\u2295\", \"\\\\oplus\", true);\ndefineSymbol(math, main, bin, \"\\u2297\", \"\\\\otimes\", true);\ndefineSymbol(math, main, textord, \"\\u2202\", \"\\\\partial\", true);\ndefineSymbol(math, main, bin, \"\\u2298\", \"\\\\oslash\", true);\ndefineSymbol(math, ams, bin, \"\\u229a\", \"\\\\circledcirc\", true);\ndefineSymbol(math, ams, bin, \"\\u22a1\", \"\\\\boxdot\", true);\ndefineSymbol(math, main, bin, \"\\u25b3\", \"\\\\bigtriangleup\");\ndefineSymbol(math, main, bin, \"\\u25bd\", \"\\\\bigtriangledown\");\ndefineSymbol(math, main, bin, \"\\u2020\", \"\\\\dagger\");\ndefineSymbol(math, main, bin, \"\\u22c4\", \"\\\\diamond\");\ndefineSymbol(math, main, bin, \"\\u22c6\", \"\\\\star\");\ndefineSymbol(math, main, bin, \"\\u25c3\", \"\\\\triangleleft\");\ndefineSymbol(math, main, bin, \"\\u25b9\", \"\\\\triangleright\");\ndefineSymbol(math, main, open, \"{\", \"\\\\{\");\ndefineSymbol(text, main, textord, \"{\", \"\\\\{\");\ndefineSymbol(text, main, textord, \"{\", \"\\\\textbraceleft\");\ndefineSymbol(math, main, close, \"}\", \"\\\\}\");\ndefineSymbol(text, main, textord, \"}\", \"\\\\}\");\ndefineSymbol(text, main, textord, \"}\", \"\\\\textbraceright\");\ndefineSymbol(math, main, open, \"{\", \"\\\\lbrace\");\ndefineSymbol(math, main, close, \"}\", \"\\\\rbrace\");\ndefineSymbol(math, main, open, \"[\", \"\\\\lbrack\", true);\ndefineSymbol(text, main, textord, \"[\", \"\\\\lbrack\", true);\ndefineSymbol(math, main, close, \"]\", \"\\\\rbrack\", true);\ndefineSymbol(text, main, textord, \"]\", \"\\\\rbrack\", true);\ndefineSymbol(math, main, open, \"(\", \"\\\\lparen\", true);\ndefineSymbol(math, main, close, \")\", \"\\\\rparen\", true);\ndefineSymbol(text, main, textord, \"<\", \"\\\\textless\", true); // in T1 fontenc\n\ndefineSymbol(text, main, textord, \">\", \"\\\\textgreater\", true); // in T1 fontenc\n\ndefineSymbol(math, main, open, \"\\u230a\", \"\\\\lfloor\", true);\ndefineSymbol(math, main, close, \"\\u230b\", \"\\\\rfloor\", true);\ndefineSymbol(math, main, open, \"\\u2308\", \"\\\\lceil\", true);\ndefineSymbol(math, main, close, \"\\u2309\", \"\\\\rceil\", true);\ndefineSymbol(math, main, textord, \"\\\\\", \"\\\\backslash\");\ndefineSymbol(math, main, textord, \"\\u2223\", \"|\");\ndefineSymbol(math, main, textord, \"\\u2223\", \"\\\\vert\");\ndefineSymbol(text, main, textord, \"|\", \"\\\\textbar\", true); // in T1 fontenc\n\ndefineSymbol(math, main, textord, \"\\u2225\", \"\\\\|\");\ndefineSymbol(math, main, textord, \"\\u2225\", \"\\\\Vert\");\ndefineSymbol(text, main, textord, \"\\u2225\", \"\\\\textbardbl\");\ndefineSymbol(text, main, textord, \"~\", \"\\\\textasciitilde\");\ndefineSymbol(text, main, textord, \"\\\\\", \"\\\\textbackslash\");\ndefineSymbol(text, main, textord, \"^\", \"\\\\textasciicircum\");\ndefineSymbol(math, main, rel, \"\\u2191\", \"\\\\uparrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d1\", \"\\\\Uparrow\", true);\ndefineSymbol(math, main, rel, \"\\u2193\", \"\\\\downarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d3\", \"\\\\Downarrow\", true);\ndefineSymbol(math, main, rel, \"\\u2195\", \"\\\\updownarrow\", true);\ndefineSymbol(math, main, rel, \"\\u21d5\", \"\\\\Updownarrow\", true);\ndefineSymbol(math, main, op, \"\\u2210\", \"\\\\coprod\");\ndefineSymbol(math, main, op, \"\\u22c1\", \"\\\\bigvee\");\ndefineSymbol(math, main, op, \"\\u22c0\", \"\\\\bigwedge\");\ndefineSymbol(math, main, op, \"\\u2a04\", \"\\\\biguplus\");\ndefineSymbol(math, main, op, \"\\u22c2\", \"\\\\bigcap\");\ndefineSymbol(math, main, op, \"\\u22c3\", \"\\\\bigcup\");\ndefineSymbol(math, main, op, \"\\u222b\", \"\\\\int\");\ndefineSymbol(math, main, op, \"\\u222b\", \"\\\\intop\");\ndefineSymbol(math, main, op, \"\\u222c\", \"\\\\iint\");\ndefineSymbol(math, main, op, \"\\u222d\", \"\\\\iiint\");\ndefineSymbol(math, main, op, \"\\u220f\", \"\\\\prod\");\ndefineSymbol(math, main, op, \"\\u2211\", \"\\\\sum\");\ndefineSymbol(math, main, op, \"\\u2a02\", \"\\\\bigotimes\");\ndefineSymbol(math, main, op, \"\\u2a01\", \"\\\\bigoplus\");\ndefineSymbol(math, main, op, \"\\u2a00\", \"\\\\bigodot\");\ndefineSymbol(math, main, op, \"\\u222e\", \"\\\\oint\");\ndefineSymbol(math, main, op, \"\\u222f\", \"\\\\oiint\");\ndefineSymbol(math, main, op, \"\\u2230\", \"\\\\oiiint\");\ndefineSymbol(math, main, op, \"\\u2a06\", \"\\\\bigsqcup\");\ndefineSymbol(math, main, op, \"\\u222b\", \"\\\\smallint\");\ndefineSymbol(text, main, inner, \"\\u2026\", \"\\\\textellipsis\");\ndefineSymbol(math, main, inner, \"\\u2026\", \"\\\\mathellipsis\");\ndefineSymbol(text, main, inner, \"\\u2026\", \"\\\\ldots\", true);\ndefineSymbol(math, main, inner, \"\\u2026\", \"\\\\ldots\", true);\ndefineSymbol(math, main, inner, \"\\u22ef\", \"\\\\@cdots\", true);\ndefineSymbol(math, main, inner, \"\\u22f1\", \"\\\\ddots\", true); // \\vdots is a macro that uses one of these two symbols (with made-up names):\n\ndefineSymbol(math, main, textord, \"\\u22ee\", \"\\\\varvdots\");\ndefineSymbol(text, main, textord, \"\\u22ee\", \"\\\\varvdots\");\ndefineSymbol(math, main, accent, \"\\u02ca\", \"\\\\acute\");\ndefineSymbol(math, main, accent, \"\\u02cb\", \"\\\\grave\");\ndefineSymbol(math, main, accent, \"\\u00a8\", \"\\\\ddot\");\ndefineSymbol(math, main, accent, \"\\u007e\", \"\\\\tilde\");\ndefineSymbol(math, main, accent, \"\\u02c9\", \"\\\\bar\");\ndefineSymbol(math, main, accent, \"\\u02d8\", \"\\\\breve\");\ndefineSymbol(math, main, accent, \"\\u02c7\", \"\\\\check\");\ndefineSymbol(math, main, accent, \"\\u005e\", \"\\\\hat\");\ndefineSymbol(math, main, accent, \"\\u20d7\", \"\\\\vec\");\ndefineSymbol(math, main, accent, \"\\u02d9\", \"\\\\dot\");\ndefineSymbol(math, main, accent, \"\\u02da\", \"\\\\mathring\"); // \\imath and \\jmath should be invariant to \\mathrm, \\mathbf, etc., so use PUA\n\ndefineSymbol(math, main, mathord, \"\\ue131\", \"\\\\@imath\");\ndefineSymbol(math, main, mathord, \"\\ue237\", \"\\\\@jmath\");\ndefineSymbol(math, main, textord, \"\\u0131\", \"\\u0131\");\ndefineSymbol(math, main, textord, \"\\u0237\", \"\\u0237\");\ndefineSymbol(text, main, textord, \"\\u0131\", \"\\\\i\", true);\ndefineSymbol(text, main, textord, \"\\u0237\", \"\\\\j\", true);\ndefineSymbol(text, main, textord, \"\\u00df\", \"\\\\ss\", true);\ndefineSymbol(text, main, textord, \"\\u00e6\", \"\\\\ae\", true);\ndefineSymbol(text, main, textord, \"\\u0153\", \"\\\\oe\", true);\ndefineSymbol(text, main, textord, \"\\u00f8\", \"\\\\o\", true);\ndefineSymbol(text, main, textord, \"\\u00c6\", \"\\\\AE\", true);\ndefineSymbol(text, main, textord, \"\\u0152\", \"\\\\OE\", true);\ndefineSymbol(text, main, textord, \"\\u00d8\", \"\\\\O\", true);\ndefineSymbol(text, main, accent, \"\\u02ca\", \"\\\\'\"); // acute\n\ndefineSymbol(text, main, accent, \"\\u02cb\", \"\\\\`\"); // grave\n\ndefineSymbol(text, main, accent, \"\\u02c6\", \"\\\\^\"); // circumflex\n\ndefineSymbol(text, main, accent, \"\\u02dc\", \"\\\\~\"); // tilde\n\ndefineSymbol(text, main, accent, \"\\u02c9\", \"\\\\=\"); // macron\n\ndefineSymbol(text, main, accent, \"\\u02d8\", \"\\\\u\"); // breve\n\ndefineSymbol(text, main, accent, \"\\u02d9\", \"\\\\.\"); // dot above\n\ndefineSymbol(text, main, accent, \"\\u00b8\", \"\\\\c\"); // cedilla\n\ndefineSymbol(text, main, accent, \"\\u02da\", \"\\\\r\"); // ring above\n\ndefineSymbol(text, main, accent, \"\\u02c7\", \"\\\\v\"); // caron\n\ndefineSymbol(text, main, accent, \"\\u00a8\", '\\\\\"'); // diaeresis\n\ndefineSymbol(text, main, accent, \"\\u02dd\", \"\\\\H\"); // double acute\n\ndefineSymbol(text, main, accent, \"\\u25ef\", \"\\\\textcircled\"); // \\bigcirc glyph\n// These ligatures are detected and created in Parser.js's `formLigatures`.\n\nvar ligatures = {\n \"--\": true,\n \"---\": true,\n \"``\": true,\n \"''\": true\n};\ndefineSymbol(text, main, textord, \"\\u2013\", \"--\", true);\ndefineSymbol(text, main, textord, \"\\u2013\", \"\\\\textendash\");\ndefineSymbol(text, main, textord, \"\\u2014\", \"---\", true);\ndefineSymbol(text, main, textord, \"\\u2014\", \"\\\\textemdash\");\ndefineSymbol(text, main, textord, \"\\u2018\", \"`\", true);\ndefineSymbol(text, main, textord, \"\\u2018\", \"\\\\textquoteleft\");\ndefineSymbol(text, main, textord, \"\\u2019\", \"'\", true);\ndefineSymbol(text, main, textord, \"\\u2019\", \"\\\\textquoteright\");\ndefineSymbol(text, main, textord, \"\\u201c\", \"``\", true);\ndefineSymbol(text, main, textord, \"\\u201c\", \"\\\\textquotedblleft\");\ndefineSymbol(text, main, textord, \"\\u201d\", \"''\", true);\ndefineSymbol(text, main, textord, \"\\u201d\", \"\\\\textquotedblright\"); // \\degree from gensymb package\n\ndefineSymbol(math, main, textord, \"\\u00b0\", \"\\\\degree\", true);\ndefineSymbol(text, main, textord, \"\\u00b0\", \"\\\\degree\"); // \\textdegree from inputenc package\n\ndefineSymbol(text, main, textord, \"\\u00b0\", \"\\\\textdegree\", true); // TODO: In LaTeX, \\pounds can generate a different character in text and math\n// mode, but among our fonts, only Main-Regular defines this character \"163\".\n\ndefineSymbol(math, main, textord, \"\\u00a3\", \"\\\\pounds\");\ndefineSymbol(math, main, textord, \"\\u00a3\", \"\\\\mathsterling\", true);\ndefineSymbol(text, main, textord, \"\\u00a3\", \"\\\\pounds\");\ndefineSymbol(text, main, textord, \"\\u00a3\", \"\\\\textsterling\", true);\ndefineSymbol(math, ams, textord, \"\\u2720\", \"\\\\maltese\");\ndefineSymbol(text, ams, textord, \"\\u2720\", \"\\\\maltese\"); // There are lots of symbols which are the same, so we add them in afterwards.\n// All of these are textords in math mode\n\nvar mathTextSymbols = \"0123456789/@.\\\"\";\n\nfor (var i = 0; i < mathTextSymbols.length; i++) {\n var ch = mathTextSymbols.charAt(i);\n defineSymbol(math, main, textord, ch, ch);\n} // All of these are textords in text mode\n\n\nvar textSymbols = \"0123456789!@*()-=+\\\";:?/.,\";\n\nfor (var _i = 0; _i < textSymbols.length; _i++) {\n var _ch = textSymbols.charAt(_i);\n\n defineSymbol(text, main, textord, _ch, _ch);\n} // All of these are textords in text mode, and mathords in math mode\n\n\nvar letters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n\nfor (var _i2 = 0; _i2 < letters.length; _i2++) {\n var _ch2 = letters.charAt(_i2);\n\n defineSymbol(math, main, mathord, _ch2, _ch2);\n defineSymbol(text, main, textord, _ch2, _ch2);\n} // Blackboard bold and script letters in Unicode range\n\n\ndefineSymbol(math, ams, textord, \"C\", \"\\u2102\"); // blackboard bold\n\ndefineSymbol(text, ams, textord, \"C\", \"\\u2102\");\ndefineSymbol(math, ams, textord, \"H\", \"\\u210D\");\ndefineSymbol(text, ams, textord, \"H\", \"\\u210D\");\ndefineSymbol(math, ams, textord, \"N\", \"\\u2115\");\ndefineSymbol(text, ams, textord, \"N\", \"\\u2115\");\ndefineSymbol(math, ams, textord, \"P\", \"\\u2119\");\ndefineSymbol(text, ams, textord, \"P\", \"\\u2119\");\ndefineSymbol(math, ams, textord, \"Q\", \"\\u211A\");\ndefineSymbol(text, ams, textord, \"Q\", \"\\u211A\");\ndefineSymbol(math, ams, textord, \"R\", \"\\u211D\");\ndefineSymbol(text, ams, textord, \"R\", \"\\u211D\");\ndefineSymbol(math, ams, textord, \"Z\", \"\\u2124\");\ndefineSymbol(text, ams, textord, \"Z\", \"\\u2124\");\ndefineSymbol(math, main, mathord, \"h\", \"\\u210E\"); // italic h, Planck constant\n\ndefineSymbol(text, main, mathord, \"h\", \"\\u210E\"); // The next loop loads wide (surrogate pair) characters.\n// We support some letters in the Unicode range U+1D400 to U+1D7FF,\n// Mathematical Alphanumeric Symbols.\n// Some editors do not deal well with wide characters. So don't write the\n// string into this file. Instead, create the string from the surrogate pair.\n\nvar wideChar = \"\";\n\nfor (var _i3 = 0; _i3 < letters.length; _i3++) {\n var _ch3 = letters.charAt(_i3); // The hex numbers in the next line are a surrogate pair.\n // 0xD835 is the high surrogate for all letters in the range we support.\n // 0xDC00 is the low surrogate for bold A.\n\n\n wideChar = String.fromCharCode(0xD835, 0xDC00 + _i3); // A-Z a-z bold\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDC34 + _i3); // A-Z a-z italic\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDC68 + _i3); // A-Z a-z bold italic\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDD04 + _i3); // A-Z a-z Fraktur\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDD6C + _i3); // A-Z a-z bold Fraktur\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDDA0 + _i3); // A-Z a-z sans-serif\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDDD4 + _i3); // A-Z a-z sans bold\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDE08 + _i3); // A-Z a-z sans italic\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDE70 + _i3); // A-Z a-z monospace\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n\n if (_i3 < 26) {\n // KaTeX fonts have only capital letters for blackboard bold and script.\n // See exception for k below.\n wideChar = String.fromCharCode(0xD835, 0xDD38 + _i3); // A-Z double struck\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDC9C + _i3); // A-Z script\n\n defineSymbol(math, main, mathord, _ch3, wideChar);\n defineSymbol(text, main, textord, _ch3, wideChar);\n } // TODO: Add bold script when it is supported by a KaTeX font.\n\n} // \"k\" is the only double struck lower case letter in the KaTeX fonts.\n\n\nwideChar = String.fromCharCode(0xD835, 0xDD5C); // k double struck\n\ndefineSymbol(math, main, mathord, \"k\", wideChar);\ndefineSymbol(text, main, textord, \"k\", wideChar); // Next, some wide character numerals\n\nfor (var _i4 = 0; _i4 < 10; _i4++) {\n var _ch4 = _i4.toString();\n\n wideChar = String.fromCharCode(0xD835, 0xDFCE + _i4); // 0-9 bold\n\n defineSymbol(math, main, mathord, _ch4, wideChar);\n defineSymbol(text, main, textord, _ch4, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDFE2 + _i4); // 0-9 sans serif\n\n defineSymbol(math, main, mathord, _ch4, wideChar);\n defineSymbol(text, main, textord, _ch4, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDFEC + _i4); // 0-9 bold sans\n\n defineSymbol(math, main, mathord, _ch4, wideChar);\n defineSymbol(text, main, textord, _ch4, wideChar);\n wideChar = String.fromCharCode(0xD835, 0xDFF6 + _i4); // 0-9 monospace\n\n defineSymbol(math, main, mathord, _ch4, wideChar);\n defineSymbol(text, main, textord, _ch4, wideChar);\n} // We add these Latin-1 letters as symbols for backwards-compatibility,\n// but they are not actually in the font, nor are they supported by the\n// Unicode accent mechanism, so they fall back to Times font and look ugly.\n// TODO(edemaine): Fix this.\n\n\nvar extraLatin = \"\\u00d0\\u00de\\u00fe\";\n\nfor (var _i5 = 0; _i5 < extraLatin.length; _i5++) {\n var _ch5 = extraLatin.charAt(_i5);\n\n defineSymbol(math, main, mathord, _ch5, _ch5);\n defineSymbol(text, main, textord, _ch5, _ch5);\n}\n\n/**\n * This file provides support for Unicode range U+1D400 to U+1D7FF,\n * Mathematical Alphanumeric Symbols.\n *\n * Function wideCharacterFont takes a wide character as input and returns\n * the font information necessary to render it properly.\n */\n/**\n * Data below is from https://www.unicode.org/charts/PDF/U1D400.pdf\n * That document sorts characters into groups by font type, say bold or italic.\n *\n * In the arrays below, each subarray consists three elements:\n * * The CSS class of that group when in math mode.\n * * The CSS class of that group when in text mode.\n * * The font name, so that KaTeX can get font metrics.\n */\n\nvar wideLatinLetterData = [[\"mathbf\", \"textbf\", \"Main-Bold\"], // A-Z bold upright\n[\"mathbf\", \"textbf\", \"Main-Bold\"], // a-z bold upright\n[\"mathnormal\", \"textit\", \"Math-Italic\"], // A-Z italic\n[\"mathnormal\", \"textit\", \"Math-Italic\"], // a-z italic\n[\"boldsymbol\", \"boldsymbol\", \"Main-BoldItalic\"], // A-Z bold italic\n[\"boldsymbol\", \"boldsymbol\", \"Main-BoldItalic\"], // a-z bold italic\n// Map fancy A-Z letters to script, not calligraphic.\n// This aligns with unicode-math and math fonts (except Cambria Math).\n[\"mathscr\", \"textscr\", \"Script-Regular\"], // A-Z script\n[\"\", \"\", \"\"], // a-z script. No font\n[\"\", \"\", \"\"], // A-Z bold script. No font\n[\"\", \"\", \"\"], // a-z bold script. No font\n[\"mathfrak\", \"textfrak\", \"Fraktur-Regular\"], // A-Z Fraktur\n[\"mathfrak\", \"textfrak\", \"Fraktur-Regular\"], // a-z Fraktur\n[\"mathbb\", \"textbb\", \"AMS-Regular\"], // A-Z double-struck\n[\"mathbb\", \"textbb\", \"AMS-Regular\"], // k double-struck\n// Note that we are using a bold font, but font metrics for regular Fraktur.\n[\"mathboldfrak\", \"textboldfrak\", \"Fraktur-Regular\"], // A-Z bold Fraktur\n[\"mathboldfrak\", \"textboldfrak\", \"Fraktur-Regular\"], // a-z bold Fraktur\n[\"mathsf\", \"textsf\", \"SansSerif-Regular\"], // A-Z sans-serif\n[\"mathsf\", \"textsf\", \"SansSerif-Regular\"], // a-z sans-serif\n[\"mathboldsf\", \"textboldsf\", \"SansSerif-Bold\"], // A-Z bold sans-serif\n[\"mathboldsf\", \"textboldsf\", \"SansSerif-Bold\"], // a-z bold sans-serif\n[\"mathitsf\", \"textitsf\", \"SansSerif-Italic\"], // A-Z italic sans-serif\n[\"mathitsf\", \"textitsf\", \"SansSerif-Italic\"], // a-z italic sans-serif\n[\"\", \"\", \"\"], // A-Z bold italic sans. No font\n[\"\", \"\", \"\"], // a-z bold italic sans. No font\n[\"mathtt\", \"texttt\", \"Typewriter-Regular\"], // A-Z monospace\n[\"mathtt\", \"texttt\", \"Typewriter-Regular\"] // a-z monospace\n];\nvar wideNumeralData = [[\"mathbf\", \"textbf\", \"Main-Bold\"], // 0-9 bold\n[\"\", \"\", \"\"], // 0-9 double-struck. No KaTeX font.\n[\"mathsf\", \"textsf\", \"SansSerif-Regular\"], // 0-9 sans-serif\n[\"mathboldsf\", \"textboldsf\", \"SansSerif-Bold\"], // 0-9 bold sans-serif\n[\"mathtt\", \"texttt\", \"Typewriter-Regular\"] // 0-9 monospace\n];\nvar wideCharacterFont = function wideCharacterFont(wideChar, mode) {\n // IE doesn't support codePointAt(). So work with the surrogate pair.\n var H = wideChar.charCodeAt(0); // high surrogate\n\n var L = wideChar.charCodeAt(1); // low surrogate\n\n var codePoint = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000;\n var j = mode === \"math\" ? 0 : 1; // column index for CSS class.\n\n if (0x1D400 <= codePoint && codePoint < 0x1D6A4) {\n // wideLatinLetterData contains exactly 26 chars on each row.\n // So we can calculate the relevant row. No traverse necessary.\n var i = Math.floor((codePoint - 0x1D400) / 26);\n return [wideLatinLetterData[i][2], wideLatinLetterData[i][j]];\n } else if (0x1D7CE <= codePoint && codePoint <= 0x1D7FF) {\n // Numerals, ten per row.\n var _i = Math.floor((codePoint - 0x1D7CE) / 10);\n\n return [wideNumeralData[_i][2], wideNumeralData[_i][j]];\n } else if (codePoint === 0x1D6A5 || codePoint === 0x1D6A6) {\n // dotless i or j\n return [wideLatinLetterData[0][2], wideLatinLetterData[0][j]];\n } else if (0x1D6A6 < codePoint && codePoint < 0x1D7CE) {\n // Greek letters. Not supported, yet.\n return [\"\", \"\"];\n } else {\n // We don't support any wide characters outside 1D400\u20131D7FF.\n throw new ParseError(\"Unsupported character: \" + wideChar);\n }\n};\n\n/* eslint no-console:0 */\n\n/**\n * Looks up the given symbol in fontMetrics, after applying any symbol\n * replacements defined in symbol.js\n */\nvar lookupSymbol = function lookupSymbol(value, // TODO(#963): Use a union type for this.\nfontName, mode) {\n // Replace the value with its replaced value from symbol.js\n if (symbols[mode][value] && symbols[mode][value].replace) {\n value = symbols[mode][value].replace;\n }\n\n return {\n value: value,\n metrics: getCharacterMetrics(value, fontName, mode)\n };\n};\n/**\n * Makes a symbolNode after translation via the list of symbols in symbols.js.\n * Correctly pulls out metrics for the character, and optionally takes a list of\n * classes to be attached to the node.\n *\n * TODO: make argument order closer to makeSpan\n * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which\n * should if present come first in `classes`.\n * TODO(#953): Make `options` mandatory and always pass it in.\n */\n\n\nvar makeSymbol = function makeSymbol(value, fontName, mode, options, classes) {\n var lookup = lookupSymbol(value, fontName, mode);\n var metrics = lookup.metrics;\n value = lookup.value;\n var symbolNode;\n\n if (metrics) {\n var italic = metrics.italic;\n\n if (mode === \"text\" || options && options.font === \"mathit\") {\n italic = 0;\n }\n\n symbolNode = new SymbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, metrics.width, classes);\n } else {\n // TODO(emily): Figure out a good way to only print this in development\n typeof console !== \"undefined\" && console.warn(\"No character metrics \" + (\"for '\" + value + \"' in style '\" + fontName + \"' and mode '\" + mode + \"'\"));\n symbolNode = new SymbolNode(value, 0, 0, 0, 0, 0, classes);\n }\n\n if (options) {\n symbolNode.maxFontSize = options.sizeMultiplier;\n\n if (options.style.isTight()) {\n symbolNode.classes.push(\"mtight\");\n }\n\n var color = options.getColor();\n\n if (color) {\n symbolNode.style.color = color;\n }\n }\n\n return symbolNode;\n};\n/**\n * Makes a symbol in Main-Regular or AMS-Regular.\n * Used for rel, bin, open, close, inner, and punct.\n */\n\n\nvar mathsym = function mathsym(value, mode, options, classes) {\n if (classes === void 0) {\n classes = [];\n }\n\n // Decide what font to render the symbol in by its entry in the symbols\n // table.\n // Have a special case for when the value = \\ because the \\ is used as a\n // textord in unsupported command errors but cannot be parsed as a regular\n // text ordinal and is therefore not present as a symbol in the symbols\n // table for text, as well as a special case for boldsymbol because it\n // can be used for bold + and -\n if (options.font === \"boldsymbol\" && lookupSymbol(value, \"Main-Bold\", mode).metrics) {\n return makeSymbol(value, \"Main-Bold\", mode, options, classes.concat([\"mathbf\"]));\n } else if (value === \"\\\\\" || symbols[mode][value].font === \"main\") {\n return makeSymbol(value, \"Main-Regular\", mode, options, classes);\n } else {\n return makeSymbol(value, \"AMS-Regular\", mode, options, classes.concat([\"amsrm\"]));\n }\n};\n/**\n * Determines which of the two font names (Main-Bold and Math-BoldItalic) and\n * corresponding style tags (mathbf or boldsymbol) to use for font \"boldsymbol\",\n * depending on the symbol. Use this function instead of fontMap for font\n * \"boldsymbol\".\n */\n\n\nvar boldsymbol = function boldsymbol(value, mode, options, classes, type) {\n if (type !== \"textord\" && lookupSymbol(value, \"Math-BoldItalic\", mode).metrics) {\n return {\n fontName: \"Math-BoldItalic\",\n fontClass: \"boldsymbol\"\n };\n } else {\n // Some glyphs do not exist in Math-BoldItalic so we need to use\n // Main-Bold instead.\n return {\n fontName: \"Main-Bold\",\n fontClass: \"mathbf\"\n };\n }\n};\n/**\n * Makes either a mathord or textord in the correct font and color.\n */\n\n\nvar makeOrd = function makeOrd(group, options, type) {\n var mode = group.mode;\n var text = group.text;\n var classes = [\"mord\"]; // Math mode or Old font (i.e. \\rm)\n\n var isFont = mode === \"math\" || mode === \"text\" && options.font;\n var fontOrFamily = isFont ? options.font : options.fontFamily;\n var wideFontName = \"\";\n var wideFontClass = \"\";\n\n if (text.charCodeAt(0) === 0xD835) {\n [wideFontName, wideFontClass] = wideCharacterFont(text, mode);\n }\n\n if (wideFontName.length > 0) {\n // surrogate pairs get special treatment\n return makeSymbol(text, wideFontName, mode, options, classes.concat(wideFontClass));\n } else if (fontOrFamily) {\n var fontName;\n var fontClasses;\n\n if (fontOrFamily === \"boldsymbol\") {\n var fontData = boldsymbol(text, mode, options, classes, type);\n fontName = fontData.fontName;\n fontClasses = [fontData.fontClass];\n } else if (isFont) {\n fontName = fontMap[fontOrFamily].fontName;\n fontClasses = [fontOrFamily];\n } else {\n fontName = retrieveTextFontName(fontOrFamily, options.fontWeight, options.fontShape);\n fontClasses = [fontOrFamily, options.fontWeight, options.fontShape];\n }\n\n if (lookupSymbol(text, fontName, mode).metrics) {\n return makeSymbol(text, fontName, mode, options, classes.concat(fontClasses));\n } else if (ligatures.hasOwnProperty(text) && fontName.slice(0, 10) === \"Typewriter\") {\n // Deconstruct ligatures in monospace fonts (\\texttt, \\tt).\n var parts = [];\n\n for (var i = 0; i < text.length; i++) {\n parts.push(makeSymbol(text[i], fontName, mode, options, classes.concat(fontClasses)));\n }\n\n return makeFragment(parts);\n }\n } // Makes a symbol in the default font for mathords and textords.\n\n\n if (type === \"mathord\") {\n return makeSymbol(text, \"Math-Italic\", mode, options, classes.concat([\"mathnormal\"]));\n } else if (type === \"textord\") {\n var font = symbols[mode][text] && symbols[mode][text].font;\n\n if (font === \"ams\") {\n var _fontName = retrieveTextFontName(\"amsrm\", options.fontWeight, options.fontShape);\n\n return makeSymbol(text, _fontName, mode, options, classes.concat(\"amsrm\", options.fontWeight, options.fontShape));\n } else if (font === \"main\" || !font) {\n var _fontName2 = retrieveTextFontName(\"textrm\", options.fontWeight, options.fontShape);\n\n return makeSymbol(text, _fontName2, mode, options, classes.concat(options.fontWeight, options.fontShape));\n } else {\n // fonts added by plugins\n var _fontName3 = retrieveTextFontName(font, options.fontWeight, options.fontShape); // We add font name as a css class\n\n\n return makeSymbol(text, _fontName3, mode, options, classes.concat(_fontName3, options.fontWeight, options.fontShape));\n }\n } else {\n throw new Error(\"unexpected type: \" + type + \" in makeOrd\");\n }\n};\n/**\n * Returns true if subsequent symbolNodes have the same classes, skew, maxFont,\n * and styles.\n */\n\n\nvar canCombine = (prev, next) => {\n if (createClass(prev.classes) !== createClass(next.classes) || prev.skew !== next.skew || prev.maxFontSize !== next.maxFontSize) {\n return false;\n } // If prev and next both are just \"mbin\"s or \"mord\"s we don't combine them\n // so that the proper spacing can be preserved.\n\n\n if (prev.classes.length === 1) {\n var cls = prev.classes[0];\n\n if (cls === \"mbin\" || cls === \"mord\") {\n return false;\n }\n }\n\n for (var style in prev.style) {\n if (prev.style.hasOwnProperty(style) && prev.style[style] !== next.style[style]) {\n return false;\n }\n }\n\n for (var _style in next.style) {\n if (next.style.hasOwnProperty(_style) && prev.style[_style] !== next.style[_style]) {\n return false;\n }\n }\n\n return true;\n};\n/**\n * Combine consecutive domTree.symbolNodes into a single symbolNode.\n * Note: this function mutates the argument.\n */\n\n\nvar tryCombineChars = chars => {\n for (var i = 0; i < chars.length - 1; i++) {\n var prev = chars[i];\n var next = chars[i + 1];\n\n if (prev instanceof SymbolNode && next instanceof SymbolNode && canCombine(prev, next)) {\n prev.text += next.text;\n prev.height = Math.max(prev.height, next.height);\n prev.depth = Math.max(prev.depth, next.depth); // Use the last character's italic correction since we use\n // it to add padding to the right of the span created from\n // the combined characters.\n\n prev.italic = next.italic;\n chars.splice(i + 1, 1);\n i--;\n }\n }\n\n return chars;\n};\n/**\n * Calculate the height, depth, and maxFontSize of an element based on its\n * children.\n */\n\n\nvar sizeElementFromChildren = function sizeElementFromChildren(elem) {\n var height = 0;\n var depth = 0;\n var maxFontSize = 0;\n\n for (var i = 0; i < elem.children.length; i++) {\n var child = elem.children[i];\n\n if (child.height > height) {\n height = child.height;\n }\n\n if (child.depth > depth) {\n depth = child.depth;\n }\n\n if (child.maxFontSize > maxFontSize) {\n maxFontSize = child.maxFontSize;\n }\n }\n\n elem.height = height;\n elem.depth = depth;\n elem.maxFontSize = maxFontSize;\n};\n/**\n * Makes a span with the given list of classes, list of children, and options.\n *\n * TODO(#953): Ensure that `options` is always provided (currently some call\n * sites don't pass it) and make the type below mandatory.\n * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which\n * should if present come first in `classes`.\n */\n\n\nvar makeSpan$2 = function makeSpan(classes, children, options, style) {\n var span = new Span(classes, children, options, style);\n sizeElementFromChildren(span);\n return span;\n}; // SVG one is simpler -- doesn't require height, depth, max-font setting.\n// This is also a separate method for typesafety.\n\n\nvar makeSvgSpan = (classes, children, options, style) => new Span(classes, children, options, style);\n\nvar makeLineSpan = function makeLineSpan(className, options, thickness) {\n var line = makeSpan$2([className], [], options);\n line.height = Math.max(thickness || options.fontMetrics().defaultRuleThickness, options.minRuleThickness);\n line.style.borderBottomWidth = makeEm(line.height);\n line.maxFontSize = 1.0;\n return line;\n};\n/**\n * Makes an anchor with the given href, list of classes, list of children,\n * and options.\n */\n\n\nvar makeAnchor = function makeAnchor(href, classes, children, options) {\n var anchor = new Anchor(href, classes, children, options);\n sizeElementFromChildren(anchor);\n return anchor;\n};\n/**\n * Makes a document fragment with the given list of children.\n */\n\n\nvar makeFragment = function makeFragment(children) {\n var fragment = new DocumentFragment(children);\n sizeElementFromChildren(fragment);\n return fragment;\n};\n/**\n * Wraps group in a span if it's a document fragment, allowing to apply classes\n * and styles\n */\n\n\nvar wrapFragment = function wrapFragment(group, options) {\n if (group instanceof DocumentFragment) {\n return makeSpan$2([], [group], options);\n }\n\n return group;\n}; // These are exact object types to catch typos in the names of the optional fields.\n\n\n// Computes the updated `children` list and the overall depth.\n//\n// This helper function for makeVList makes it easier to enforce type safety by\n// allowing early exits (returns) in the logic.\nvar getVListChildrenAndDepth = function getVListChildrenAndDepth(params) {\n if (params.positionType === \"individualShift\") {\n var oldChildren = params.children;\n var children = [oldChildren[0]]; // Add in kerns to the list of params.children to get each element to be\n // shifted to the correct specified shift\n\n var _depth = -oldChildren[0].shift - oldChildren[0].elem.depth;\n\n var currPos = _depth;\n\n for (var i = 1; i < oldChildren.length; i++) {\n var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth;\n var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth);\n currPos = currPos + diff;\n children.push({\n type: \"kern\",\n size\n });\n children.push(oldChildren[i]);\n }\n\n return {\n children,\n depth: _depth\n };\n }\n\n var depth;\n\n if (params.positionType === \"top\") {\n // We always start at the bottom, so calculate the bottom by adding up\n // all the sizes\n var bottom = params.positionData;\n\n for (var _i = 0; _i < params.children.length; _i++) {\n var child = params.children[_i];\n bottom -= child.type === \"kern\" ? child.size : child.elem.height + child.elem.depth;\n }\n\n depth = bottom;\n } else if (params.positionType === \"bottom\") {\n depth = -params.positionData;\n } else {\n var firstChild = params.children[0];\n\n if (firstChild.type !== \"elem\") {\n throw new Error('First child must have type \"elem\".');\n }\n\n if (params.positionType === \"shift\") {\n depth = -firstChild.elem.depth - params.positionData;\n } else if (params.positionType === \"firstBaseline\") {\n depth = -firstChild.elem.depth;\n } else {\n throw new Error(\"Invalid positionType \" + params.positionType + \".\");\n }\n }\n\n return {\n children: params.children,\n depth\n };\n};\n/**\n * Makes a vertical list by stacking elements and kerns on top of each other.\n * Allows for many different ways of specifying the positioning method.\n *\n * See VListParam documentation above.\n */\n\n\nvar makeVList = function makeVList(params, options) {\n var {\n children,\n depth\n } = getVListChildrenAndDepth(params); // Create a strut that is taller than any list item. The strut is added to\n // each item, where it will determine the item's baseline. Since it has\n // `overflow:hidden`, the strut's top edge will sit on the item's line box's\n // top edge and the strut's bottom edge will sit on the item's baseline,\n // with no additional line-height spacing. This allows the item baseline to\n // be positioned precisely without worrying about font ascent and\n // line-height.\n\n var pstrutSize = 0;\n\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n\n if (child.type === \"elem\") {\n var elem = child.elem;\n pstrutSize = Math.max(pstrutSize, elem.maxFontSize, elem.height);\n }\n }\n\n pstrutSize += 2;\n var pstrut = makeSpan$2([\"pstrut\"], []);\n pstrut.style.height = makeEm(pstrutSize); // Create a new list of actual children at the correct offsets\n\n var realChildren = [];\n var minPos = depth;\n var maxPos = depth;\n var currPos = depth;\n\n for (var _i2 = 0; _i2 < children.length; _i2++) {\n var _child = children[_i2];\n\n if (_child.type === \"kern\") {\n currPos += _child.size;\n } else {\n var _elem = _child.elem;\n var classes = _child.wrapperClasses || [];\n var style = _child.wrapperStyle || {};\n var childWrap = makeSpan$2(classes, [pstrut, _elem], undefined, style);\n childWrap.style.top = makeEm(-pstrutSize - currPos - _elem.depth);\n\n if (_child.marginLeft) {\n childWrap.style.marginLeft = _child.marginLeft;\n }\n\n if (_child.marginRight) {\n childWrap.style.marginRight = _child.marginRight;\n }\n\n realChildren.push(childWrap);\n currPos += _elem.height + _elem.depth;\n }\n\n minPos = Math.min(minPos, currPos);\n maxPos = Math.max(maxPos, currPos);\n } // The vlist contents go in a table-cell with `vertical-align:bottom`.\n // This cell's bottom edge will determine the containing table's baseline\n // without overly expanding the containing line-box.\n\n\n var vlist = makeSpan$2([\"vlist\"], realChildren);\n vlist.style.height = makeEm(maxPos); // A second row is used if necessary to represent the vlist's depth.\n\n var rows;\n\n if (minPos < 0) {\n // We will define depth in an empty span with display: table-cell.\n // It should render with the height that we define. But Chrome, in\n // contenteditable mode only, treats that span as if it contains some\n // text content. And that min-height over-rides our desired height.\n // So we put another empty span inside the depth strut span.\n var emptySpan = makeSpan$2([], []);\n var depthStrut = makeSpan$2([\"vlist\"], [emptySpan]);\n depthStrut.style.height = makeEm(-minPos); // Safari wants the first row to have inline content; otherwise it\n // puts the bottom of the *second* row on the baseline.\n\n var topStrut = makeSpan$2([\"vlist-s\"], [new SymbolNode(\"\\u200b\")]);\n rows = [makeSpan$2([\"vlist-r\"], [vlist, topStrut]), makeSpan$2([\"vlist-r\"], [depthStrut])];\n } else {\n rows = [makeSpan$2([\"vlist-r\"], [vlist])];\n }\n\n var vtable = makeSpan$2([\"vlist-t\"], rows);\n\n if (rows.length === 2) {\n vtable.classes.push(\"vlist-t2\");\n }\n\n vtable.height = maxPos;\n vtable.depth = -minPos;\n return vtable;\n}; // Glue is a concept from TeX which is a flexible space between elements in\n// either a vertical or horizontal list. In KaTeX, at least for now, it's\n// static space between elements in a horizontal layout.\n\n\nvar makeGlue = (measurement, options) => {\n // Make an empty span for the space\n var rule = makeSpan$2([\"mspace\"], [], options);\n var size = calculateSize(measurement, options);\n rule.style.marginRight = makeEm(size);\n return rule;\n}; // Takes font options, and returns the appropriate fontLookup name\n\n\nvar retrieveTextFontName = function retrieveTextFontName(fontFamily, fontWeight, fontShape) {\n var baseFontName = \"\";\n\n switch (fontFamily) {\n case \"amsrm\":\n baseFontName = \"AMS\";\n break;\n\n case \"textrm\":\n baseFontName = \"Main\";\n break;\n\n case \"textsf\":\n baseFontName = \"SansSerif\";\n break;\n\n case \"texttt\":\n baseFontName = \"Typewriter\";\n break;\n\n default:\n baseFontName = fontFamily;\n // use fonts added by a plugin\n }\n\n var fontStylesName;\n\n if (fontWeight === \"textbf\" && fontShape === \"textit\") {\n fontStylesName = \"BoldItalic\";\n } else if (fontWeight === \"textbf\") {\n fontStylesName = \"Bold\";\n } else if (fontWeight === \"textit\") {\n fontStylesName = \"Italic\";\n } else {\n fontStylesName = \"Regular\";\n }\n\n return baseFontName + \"-\" + fontStylesName;\n};\n/**\n * Maps TeX font commands to objects containing:\n * - variant: string used for \"mathvariant\" attribute in buildMathML.js\n * - fontName: the \"style\" parameter to fontMetrics.getCharacterMetrics\n */\n// A map between tex font commands an MathML mathvariant attribute values\n\n\nvar fontMap = {\n // styles\n \"mathbf\": {\n variant: \"bold\",\n fontName: \"Main-Bold\"\n },\n \"mathrm\": {\n variant: \"normal\",\n fontName: \"Main-Regular\"\n },\n \"textit\": {\n variant: \"italic\",\n fontName: \"Main-Italic\"\n },\n \"mathit\": {\n variant: \"italic\",\n fontName: \"Main-Italic\"\n },\n \"mathnormal\": {\n variant: \"italic\",\n fontName: \"Math-Italic\"\n },\n \"mathsfit\": {\n variant: \"sans-serif-italic\",\n fontName: \"SansSerif-Italic\"\n },\n // \"boldsymbol\" is missing because they require the use of multiple fonts:\n // Math-BoldItalic and Main-Bold. This is handled by a special case in\n // makeOrd which ends up calling boldsymbol.\n // families\n \"mathbb\": {\n variant: \"double-struck\",\n fontName: \"AMS-Regular\"\n },\n \"mathcal\": {\n variant: \"script\",\n fontName: \"Caligraphic-Regular\"\n },\n \"mathfrak\": {\n variant: \"fraktur\",\n fontName: \"Fraktur-Regular\"\n },\n \"mathscr\": {\n variant: \"script\",\n fontName: \"Script-Regular\"\n },\n \"mathsf\": {\n variant: \"sans-serif\",\n fontName: \"SansSerif-Regular\"\n },\n \"mathtt\": {\n variant: \"monospace\",\n fontName: \"Typewriter-Regular\"\n }\n};\nvar svgData = {\n // path, width, height\n vec: [\"vec\", 0.471, 0.714],\n // values from the font glyph\n oiintSize1: [\"oiintSize1\", 0.957, 0.499],\n // oval to overlay the integrand\n oiintSize2: [\"oiintSize2\", 1.472, 0.659],\n oiiintSize1: [\"oiiintSize1\", 1.304, 0.499],\n oiiintSize2: [\"oiiintSize2\", 1.98, 0.659]\n};\n\nvar staticSvg = function staticSvg(value, options) {\n // Create a span with inline SVG for the element.\n var [pathName, width, height] = svgData[value];\n var path = new PathNode(pathName);\n var svgNode = new SvgNode([path], {\n \"width\": makeEm(width),\n \"height\": makeEm(height),\n // Override CSS rule `.katex svg { width: 100% }`\n \"style\": \"width:\" + makeEm(width),\n \"viewBox\": \"0 0 \" + 1000 * width + \" \" + 1000 * height,\n \"preserveAspectRatio\": \"xMinYMin\"\n });\n var span = makeSvgSpan([\"overlay\"], [svgNode], options);\n span.height = height;\n span.style.height = makeEm(height);\n span.style.width = makeEm(width);\n return span;\n};\n\nvar buildCommon = {\n fontMap,\n makeSymbol,\n mathsym,\n makeSpan: makeSpan$2,\n makeSvgSpan,\n makeLineSpan,\n makeAnchor,\n makeFragment,\n wrapFragment,\n makeVList,\n makeOrd,\n makeGlue,\n staticSvg,\n svgData,\n tryCombineChars\n};\n\n/**\n * Describes spaces between different classes of atoms.\n */\nvar thinspace = {\n number: 3,\n unit: \"mu\"\n};\nvar mediumspace = {\n number: 4,\n unit: \"mu\"\n};\nvar thickspace = {\n number: 5,\n unit: \"mu\"\n}; // Making the type below exact with all optional fields doesn't work due to\n// - https://github.com/facebook/flow/issues/4582\n// - https://github.com/facebook/flow/issues/5688\n// However, since *all* fields are optional, $Shape<> works as suggested in 5688\n// above.\n\n// Spacing relationships for display and text styles\nvar spacings = {\n mord: {\n mop: thinspace,\n mbin: mediumspace,\n mrel: thickspace,\n minner: thinspace\n },\n mop: {\n mord: thinspace,\n mop: thinspace,\n mrel: thickspace,\n minner: thinspace\n },\n mbin: {\n mord: mediumspace,\n mop: mediumspace,\n mopen: mediumspace,\n minner: mediumspace\n },\n mrel: {\n mord: thickspace,\n mop: thickspace,\n mopen: thickspace,\n minner: thickspace\n },\n mopen: {},\n mclose: {\n mop: thinspace,\n mbin: mediumspace,\n mrel: thickspace,\n minner: thinspace\n },\n mpunct: {\n mord: thinspace,\n mop: thinspace,\n mrel: thickspace,\n mopen: thinspace,\n mclose: thinspace,\n mpunct: thinspace,\n minner: thinspace\n },\n minner: {\n mord: thinspace,\n mop: thinspace,\n mbin: mediumspace,\n mrel: thickspace,\n mopen: thinspace,\n mpunct: thinspace,\n minner: thinspace\n }\n}; // Spacing relationships for script and scriptscript styles\n\nvar tightSpacings = {\n mord: {\n mop: thinspace\n },\n mop: {\n mord: thinspace,\n mop: thinspace\n },\n mbin: {},\n mrel: {},\n mopen: {},\n mclose: {\n mop: thinspace\n },\n mpunct: {},\n minner: {\n mop: thinspace\n }\n};\n\n/** Context provided to function handlers for error messages. */\n// Note: reverse the order of the return type union will cause a flow error.\n// See https://github.com/facebook/flow/issues/3663.\n// More general version of `HtmlBuilder` for nodes (e.g. \\sum, accent types)\n// whose presence impacts super/subscripting. In this case, ParseNode<\"supsub\">\n// delegates its HTML building to the HtmlBuilder corresponding to these nodes.\n\n/**\n * Final function spec for use at parse time.\n * This is almost identical to `FunctionPropSpec`, except it\n * 1. includes the function handler, and\n * 2. requires all arguments except argTypes.\n * It is generated by `defineFunction()` below.\n */\n\n/**\n * All registered functions.\n * `functions.js` just exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary.\n */\nvar _functions = {};\n/**\n * All HTML builders. Should be only used in the `define*` and the `build*ML`\n * functions.\n */\n\nvar _htmlGroupBuilders = {};\n/**\n * All MathML builders. Should be only used in the `define*` and the `build*ML`\n * functions.\n */\n\nvar _mathmlGroupBuilders = {};\nfunction defineFunction(_ref) {\n var {\n type,\n names,\n props,\n handler,\n htmlBuilder,\n mathmlBuilder\n } = _ref;\n // Set default values of functions\n var data = {\n type,\n numArgs: props.numArgs,\n argTypes: props.argTypes,\n allowedInArgument: !!props.allowedInArgument,\n allowedInText: !!props.allowedInText,\n allowedInMath: props.allowedInMath === undefined ? true : props.allowedInMath,\n numOptionalArgs: props.numOptionalArgs || 0,\n infix: !!props.infix,\n primitive: !!props.primitive,\n handler: handler\n };\n\n for (var i = 0; i < names.length; ++i) {\n _functions[names[i]] = data;\n }\n\n if (type) {\n if (htmlBuilder) {\n _htmlGroupBuilders[type] = htmlBuilder;\n }\n\n if (mathmlBuilder) {\n _mathmlGroupBuilders[type] = mathmlBuilder;\n }\n }\n}\n/**\n * Use this to register only the HTML and MathML builders for a function (e.g.\n * if the function's ParseNode is generated in Parser.js rather than via a\n * stand-alone handler provided to `defineFunction`).\n */\n\nfunction defineFunctionBuilders(_ref2) {\n var {\n type,\n htmlBuilder,\n mathmlBuilder\n } = _ref2;\n defineFunction({\n type,\n names: [],\n props: {\n numArgs: 0\n },\n\n handler() {\n throw new Error('Should never be called.');\n },\n\n htmlBuilder,\n mathmlBuilder\n });\n}\nvar normalizeArgument = function normalizeArgument(arg) {\n return arg.type === \"ordgroup\" && arg.body.length === 1 ? arg.body[0] : arg;\n}; // Since the corresponding buildHTML/buildMathML function expects a\n// list of elements, we normalize for different kinds of arguments\n\nvar ordargument = function ordargument(arg) {\n return arg.type === \"ordgroup\" ? arg.body : [arg];\n};\n\n/**\n * This file does the main work of building a domTree structure from a parse\n * tree. The entry point is the `buildHTML` function, which takes a parse tree.\n * Then, the buildExpression, buildGroup, and various groupBuilders functions\n * are called, to produce a final HTML tree.\n */\nvar makeSpan$1 = buildCommon.makeSpan; // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`)\n// depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6,\n// and the text before Rule 19.\n\nvar binLeftCanceller = [\"leftmost\", \"mbin\", \"mopen\", \"mrel\", \"mop\", \"mpunct\"];\nvar binRightCanceller = [\"rightmost\", \"mrel\", \"mclose\", \"mpunct\"];\nvar styleMap$1 = {\n \"display\": Style$1.DISPLAY,\n \"text\": Style$1.TEXT,\n \"script\": Style$1.SCRIPT,\n \"scriptscript\": Style$1.SCRIPTSCRIPT\n};\nvar DomEnum = {\n mord: \"mord\",\n mop: \"mop\",\n mbin: \"mbin\",\n mrel: \"mrel\",\n mopen: \"mopen\",\n mclose: \"mclose\",\n mpunct: \"mpunct\",\n minner: \"minner\"\n};\n\n/**\n * Take a list of nodes, build them in order, and return a list of the built\n * nodes. documentFragments are flattened into their contents, so the\n * returned list contains no fragments. `isRealGroup` is true if `expression`\n * is a real group (no atoms will be added on either side), as opposed to\n * a partial group (e.g. one created by \\color). `surrounding` is an array\n * consisting type of nodes that will be added to the left and right.\n */\nvar buildExpression$1 = function buildExpression(expression, options, isRealGroup, surrounding) {\n if (surrounding === void 0) {\n surrounding = [null, null];\n }\n\n // Parse expressions into `groups`.\n var groups = [];\n\n for (var i = 0; i < expression.length; i++) {\n var output = buildGroup$1(expression[i], options);\n\n if (output instanceof DocumentFragment) {\n var children = output.children;\n groups.push(...children);\n } else {\n groups.push(output);\n }\n } // Combine consecutive domTree.symbolNodes into a single symbolNode.\n\n\n buildCommon.tryCombineChars(groups); // If `expression` is a partial group, let the parent handle spacings\n // to avoid processing groups multiple times.\n\n if (!isRealGroup) {\n return groups;\n }\n\n var glueOptions = options;\n\n if (expression.length === 1) {\n var node = expression[0];\n\n if (node.type === \"sizing\") {\n glueOptions = options.havingSize(node.size);\n } else if (node.type === \"styling\") {\n glueOptions = options.havingStyle(styleMap$1[node.style]);\n }\n } // Dummy spans for determining spacings between surrounding atoms.\n // If `expression` has no atoms on the left or right, class \"leftmost\"\n // or \"rightmost\", respectively, is used to indicate it.\n\n\n var dummyPrev = makeSpan$1([surrounding[0] || \"leftmost\"], [], options);\n var dummyNext = makeSpan$1([surrounding[1] || \"rightmost\"], [], options); // TODO: These code assumes that a node's math class is the first element\n // of its `classes` array. A later cleanup should ensure this, for\n // instance by changing the signature of `makeSpan`.\n // Before determining what spaces to insert, perform bin cancellation.\n // Binary operators change to ordinary symbols in some contexts.\n\n var isRoot = isRealGroup === \"root\";\n traverseNonSpaceNodes(groups, (node, prev) => {\n var prevType = prev.classes[0];\n var type = node.classes[0];\n\n if (prevType === \"mbin\" && utils.contains(binRightCanceller, type)) {\n prev.classes[0] = \"mord\";\n } else if (type === \"mbin\" && utils.contains(binLeftCanceller, prevType)) {\n node.classes[0] = \"mord\";\n }\n }, {\n node: dummyPrev\n }, dummyNext, isRoot);\n traverseNonSpaceNodes(groups, (node, prev) => {\n var prevType = getTypeOfDomTree(prev);\n var type = getTypeOfDomTree(node); // 'mtight' indicates that the node is script or scriptscript style.\n\n var space = prevType && type ? node.hasClass(\"mtight\") ? tightSpacings[prevType][type] : spacings[prevType][type] : null;\n\n if (space) {\n // Insert glue (spacing) after the `prev`.\n return buildCommon.makeGlue(space, glueOptions);\n }\n }, {\n node: dummyPrev\n }, dummyNext, isRoot);\n return groups;\n}; // Depth-first traverse non-space `nodes`, calling `callback` with the current and\n// previous node as arguments, optionally returning a node to insert after the\n// previous node. `prev` is an object with the previous node and `insertAfter`\n// function to insert after it. `next` is a node that will be added to the right.\n// Used for bin cancellation and inserting spacings.\n\nvar traverseNonSpaceNodes = function traverseNonSpaceNodes(nodes, callback, prev, next, isRoot) {\n if (next) {\n // temporarily append the right node, if exists\n nodes.push(next);\n }\n\n var i = 0;\n\n for (; i < nodes.length; i++) {\n var node = nodes[i];\n var partialGroup = checkPartialGroup(node);\n\n if (partialGroup) {\n // Recursive DFS\n // $FlowFixMe: make nodes a $ReadOnlyArray by returning a new array\n traverseNonSpaceNodes(partialGroup.children, callback, prev, null, isRoot);\n continue;\n } // Ignore explicit spaces (e.g., \\;, \\,) when determining what implicit\n // spacing should go between atoms of different classes\n\n\n var nonspace = !node.hasClass(\"mspace\");\n\n if (nonspace) {\n var result = callback(node, prev.node);\n\n if (result) {\n if (prev.insertAfter) {\n prev.insertAfter(result);\n } else {\n // insert at front\n nodes.unshift(result);\n i++;\n }\n }\n }\n\n if (nonspace) {\n prev.node = node;\n } else if (isRoot && node.hasClass(\"newline\")) {\n prev.node = makeSpan$1([\"leftmost\"]); // treat like beginning of line\n }\n\n prev.insertAfter = (index => n => {\n nodes.splice(index + 1, 0, n);\n i++;\n })(i);\n }\n\n if (next) {\n nodes.pop();\n }\n}; // Check if given node is a partial group, i.e., does not affect spacing around.\n\n\nvar checkPartialGroup = function checkPartialGroup(node) {\n if (node instanceof DocumentFragment || node instanceof Anchor || node instanceof Span && node.hasClass(\"enclosing\")) {\n return node;\n }\n\n return null;\n}; // Return the outermost node of a domTree.\n\n\nvar getOutermostNode = function getOutermostNode(node, side) {\n var partialGroup = checkPartialGroup(node);\n\n if (partialGroup) {\n var children = partialGroup.children;\n\n if (children.length) {\n if (side === \"right\") {\n return getOutermostNode(children[children.length - 1], \"right\");\n } else if (side === \"left\") {\n return getOutermostNode(children[0], \"left\");\n }\n }\n }\n\n return node;\n}; // Return math atom class (mclass) of a domTree.\n// If `side` is given, it will get the type of the outermost node at given side.\n\n\nvar getTypeOfDomTree = function getTypeOfDomTree(node, side) {\n if (!node) {\n return null;\n }\n\n if (side) {\n node = getOutermostNode(node, side);\n } // This makes a lot of assumptions as to where the type of atom\n // appears. We should do a better job of enforcing this.\n\n\n return DomEnum[node.classes[0]] || null;\n};\nvar makeNullDelimiter = function makeNullDelimiter(options, classes) {\n var moreClasses = [\"nulldelimiter\"].concat(options.baseSizingClasses());\n return makeSpan$1(classes.concat(moreClasses));\n};\n/**\n * buildGroup is the function that takes a group and calls the correct groupType\n * function for it. It also handles the interaction of size and style changes\n * between parents and children.\n */\n\nvar buildGroup$1 = function buildGroup(group, options, baseOptions) {\n if (!group) {\n return makeSpan$1();\n }\n\n if (_htmlGroupBuilders[group.type]) {\n // Call the groupBuilders function\n // $FlowFixMe\n var groupNode = _htmlGroupBuilders[group.type](group, options); // If the size changed between the parent and the current group, account\n // for that size difference.\n\n if (baseOptions && options.size !== baseOptions.size) {\n groupNode = makeSpan$1(options.sizingClasses(baseOptions), [groupNode], options);\n var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier;\n groupNode.height *= multiplier;\n groupNode.depth *= multiplier;\n }\n\n return groupNode;\n } else {\n throw new ParseError(\"Got group of unknown type: '\" + group.type + \"'\");\n }\n};\n/**\n * Combine an array of HTML DOM nodes (e.g., the output of `buildExpression`)\n * into an unbreakable HTML node of class .base, with proper struts to\n * guarantee correct vertical extent. `buildHTML` calls this repeatedly to\n * make up the entire expression as a sequence of unbreakable units.\n */\n\nfunction buildHTMLUnbreakable(children, options) {\n // Compute height and depth of this chunk.\n var body = makeSpan$1([\"base\"], children, options); // Add strut, which ensures that the top of the HTML element falls at\n // the height of the expression, and the bottom of the HTML element\n // falls at the depth of the expression.\n\n var strut = makeSpan$1([\"strut\"]);\n strut.style.height = makeEm(body.height + body.depth);\n\n if (body.depth) {\n strut.style.verticalAlign = makeEm(-body.depth);\n }\n\n body.children.unshift(strut);\n return body;\n}\n/**\n * Take an entire parse tree, and build it into an appropriate set of HTML\n * nodes.\n */\n\n\nfunction buildHTML(tree, options) {\n // Strip off outer tag wrapper for processing below.\n var tag = null;\n\n if (tree.length === 1 && tree[0].type === \"tag\") {\n tag = tree[0].tag;\n tree = tree[0].body;\n } // Build the expression contained in the tree\n\n\n var expression = buildExpression$1(tree, options, \"root\");\n var eqnNum;\n\n if (expression.length === 2 && expression[1].hasClass(\"tag\")) {\n // An environment with automatic equation numbers, e.g. {gather}.\n eqnNum = expression.pop();\n }\n\n var children = []; // Create one base node for each chunk between potential line breaks.\n // The TeXBook [p.173] says \"A formula will be broken only after a\n // relation symbol like $=$ or $<$ or $\\rightarrow$, or after a binary\n // operation symbol like $+$ or $-$ or $\\times$, where the relation or\n // binary operation is on the ``outer level'' of the formula (i.e., not\n // enclosed in {...} and not part of an \\over construction).\"\n\n var parts = [];\n\n for (var i = 0; i < expression.length; i++) {\n parts.push(expression[i]);\n\n if (expression[i].hasClass(\"mbin\") || expression[i].hasClass(\"mrel\") || expression[i].hasClass(\"allowbreak\")) {\n // Put any post-operator glue on same line as operator.\n // Watch for \\nobreak along the way, and stop at \\newline.\n var nobreak = false;\n\n while (i < expression.length - 1 && expression[i + 1].hasClass(\"mspace\") && !expression[i + 1].hasClass(\"newline\")) {\n i++;\n parts.push(expression[i]);\n\n if (expression[i].hasClass(\"nobreak\")) {\n nobreak = true;\n }\n } // Don't allow break if \\nobreak among the post-operator glue.\n\n\n if (!nobreak) {\n children.push(buildHTMLUnbreakable(parts, options));\n parts = [];\n }\n } else if (expression[i].hasClass(\"newline\")) {\n // Write the line except the newline\n parts.pop();\n\n if (parts.length > 0) {\n children.push(buildHTMLUnbreakable(parts, options));\n parts = [];\n } // Put the newline at the top level\n\n\n children.push(expression[i]);\n }\n }\n\n if (parts.length > 0) {\n children.push(buildHTMLUnbreakable(parts, options));\n } // Now, if there was a tag, build it too and append it as a final child.\n\n\n var tagChild;\n\n if (tag) {\n tagChild = buildHTMLUnbreakable(buildExpression$1(tag, options, true));\n tagChild.classes = [\"tag\"];\n children.push(tagChild);\n } else if (eqnNum) {\n children.push(eqnNum);\n }\n\n var htmlNode = makeSpan$1([\"katex-html\"], children);\n htmlNode.setAttribute(\"aria-hidden\", \"true\"); // Adjust the strut of the tag to be the maximum height of all children\n // (the height of the enclosing htmlNode) for proper vertical alignment.\n\n if (tagChild) {\n var strut = tagChild.children[0];\n strut.style.height = makeEm(htmlNode.height + htmlNode.depth);\n\n if (htmlNode.depth) {\n strut.style.verticalAlign = makeEm(-htmlNode.depth);\n }\n }\n\n return htmlNode;\n}\n\n/**\n * These objects store data about MathML nodes. This is the MathML equivalent\n * of the types in domTree.js. Since MathML handles its own rendering, and\n * since we're mainly using MathML to improve accessibility, we don't manage\n * any of the styling state that the plain DOM nodes do.\n *\n * The `toNode` and `toMarkup` functions work similarly to how they do in\n * domTree.js, creating namespaced DOM nodes and HTML text markup respectively.\n */\nfunction newDocumentFragment(children) {\n return new DocumentFragment(children);\n}\n/**\n * This node represents a general purpose MathML node of any type. The\n * constructor requires the type of node to create (for example, `\"mo\"` or\n * `\"mspace\"`, corresponding to `` and `` tags).\n */\n\nclass MathNode {\n constructor(type, children, classes) {\n this.type = void 0;\n this.attributes = void 0;\n this.children = void 0;\n this.classes = void 0;\n this.type = type;\n this.attributes = {};\n this.children = children || [];\n this.classes = classes || [];\n }\n /**\n * Sets an attribute on a MathML node. MathML depends on attributes to convey a\n * semantic content, so this is used heavily.\n */\n\n\n setAttribute(name, value) {\n this.attributes[name] = value;\n }\n /**\n * Gets an attribute on a MathML node.\n */\n\n\n getAttribute(name) {\n return this.attributes[name];\n }\n /**\n * Converts the math node into a MathML-namespaced DOM element.\n */\n\n\n toNode() {\n var node = document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", this.type);\n\n for (var attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n node.setAttribute(attr, this.attributes[attr]);\n }\n }\n\n if (this.classes.length > 0) {\n node.className = createClass(this.classes);\n }\n\n for (var i = 0; i < this.children.length; i++) {\n // Combine multiple TextNodes into one TextNode, to prevent\n // screen readers from reading each as a separate word [#3995]\n if (this.children[i] instanceof TextNode && this.children[i + 1] instanceof TextNode) {\n var text = this.children[i].toText() + this.children[++i].toText();\n\n while (this.children[i + 1] instanceof TextNode) {\n text += this.children[++i].toText();\n }\n\n node.appendChild(new TextNode(text).toNode());\n } else {\n node.appendChild(this.children[i].toNode());\n }\n }\n\n return node;\n }\n /**\n * Converts the math node into an HTML markup string.\n */\n\n\n toMarkup() {\n var markup = \"<\" + this.type; // Add the attributes\n\n for (var attr in this.attributes) {\n if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) {\n markup += \" \" + attr + \"=\\\"\";\n markup += utils.escape(this.attributes[attr]);\n markup += \"\\\"\";\n }\n }\n\n if (this.classes.length > 0) {\n markup += \" class =\\\"\" + utils.escape(createClass(this.classes)) + \"\\\"\";\n }\n\n markup += \">\";\n\n for (var i = 0; i < this.children.length; i++) {\n markup += this.children[i].toMarkup();\n }\n\n markup += \"\";\n return markup;\n }\n /**\n * Converts the math node into a string, similar to innerText, but escaped.\n */\n\n\n toText() {\n return this.children.map(child => child.toText()).join(\"\");\n }\n\n}\n/**\n * This node represents a piece of text.\n */\n\nclass TextNode {\n constructor(text) {\n this.text = void 0;\n this.text = text;\n }\n /**\n * Converts the text node into a DOM text node.\n */\n\n\n toNode() {\n return document.createTextNode(this.text);\n }\n /**\n * Converts the text node into escaped HTML markup\n * (representing the text itself).\n */\n\n\n toMarkup() {\n return utils.escape(this.toText());\n }\n /**\n * Converts the text node into a string\n * (representing the text itself).\n */\n\n\n toText() {\n return this.text;\n }\n\n}\n/**\n * This node represents a space, but may render as or as text,\n * depending on the width.\n */\n\nclass SpaceNode {\n /**\n * Create a Space node with width given in CSS ems.\n */\n constructor(width) {\n this.width = void 0;\n this.character = void 0;\n this.width = width; // See https://www.w3.org/TR/2000/WD-MathML2-20000328/chapter6.html\n // for a table of space-like characters. We use Unicode\n // representations instead of &LongNames; as it's not clear how to\n // make the latter via document.createTextNode.\n\n if (width >= 0.05555 && width <= 0.05556) {\n this.character = \"\\u200a\"; //  \n } else if (width >= 0.1666 && width <= 0.1667) {\n this.character = \"\\u2009\"; //  \n } else if (width >= 0.2222 && width <= 0.2223) {\n this.character = \"\\u2005\"; //  \n } else if (width >= 0.2777 && width <= 0.2778) {\n this.character = \"\\u2005\\u200a\"; //   \n } else if (width >= -0.05556 && width <= -0.05555) {\n this.character = \"\\u200a\\u2063\"; // ​\n } else if (width >= -0.1667 && width <= -0.1666) {\n this.character = \"\\u2009\\u2063\"; // ​\n } else if (width >= -0.2223 && width <= -0.2222) {\n this.character = \"\\u205f\\u2063\"; // ​\n } else if (width >= -0.2778 && width <= -0.2777) {\n this.character = \"\\u2005\\u2063\"; // ​\n } else {\n this.character = null;\n }\n }\n /**\n * Converts the math node into a MathML-namespaced DOM element.\n */\n\n\n toNode() {\n if (this.character) {\n return document.createTextNode(this.character);\n } else {\n var node = document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"mspace\");\n node.setAttribute(\"width\", makeEm(this.width));\n return node;\n }\n }\n /**\n * Converts the math node into an HTML markup string.\n */\n\n\n toMarkup() {\n if (this.character) {\n return \"\" + this.character + \"\";\n } else {\n return \"\";\n }\n }\n /**\n * Converts the math node into a string, similar to innerText.\n */\n\n\n toText() {\n if (this.character) {\n return this.character;\n } else {\n return \" \";\n }\n }\n\n}\n\nvar mathMLTree = {\n MathNode,\n TextNode,\n SpaceNode,\n newDocumentFragment\n};\n\n/**\n * This file converts a parse tree into a corresponding MathML tree. The main\n * entry point is the `buildMathML` function, which takes a parse tree from the\n * parser.\n */\n\n/**\n * Takes a symbol and converts it into a MathML text node after performing\n * optional replacement from symbols.js.\n */\nvar makeText = function makeText(text, mode, options) {\n if (symbols[mode][text] && symbols[mode][text].replace && text.charCodeAt(0) !== 0xD835 && !(ligatures.hasOwnProperty(text) && options && (options.fontFamily && options.fontFamily.slice(4, 6) === \"tt\" || options.font && options.font.slice(4, 6) === \"tt\"))) {\n text = symbols[mode][text].replace;\n }\n\n return new mathMLTree.TextNode(text);\n};\n/**\n * Wrap the given array of nodes in an node if needed, i.e.,\n * unless the array has length 1. Always returns a single node.\n */\n\nvar makeRow = function makeRow(body) {\n if (body.length === 1) {\n return body[0];\n } else {\n return new mathMLTree.MathNode(\"mrow\", body);\n }\n};\n/**\n * Returns the math variant as a string or null if none is required.\n */\n\nvar getVariant = function getVariant(group, options) {\n // Handle \\text... font specifiers as best we can.\n // MathML has a limited list of allowable mathvariant specifiers; see\n // https://www.w3.org/TR/MathML3/chapter3.html#presm.commatt\n if (options.fontFamily === \"texttt\") {\n return \"monospace\";\n } else if (options.fontFamily === \"textsf\") {\n if (options.fontShape === \"textit\" && options.fontWeight === \"textbf\") {\n return \"sans-serif-bold-italic\";\n } else if (options.fontShape === \"textit\") {\n return \"sans-serif-italic\";\n } else if (options.fontWeight === \"textbf\") {\n return \"bold-sans-serif\";\n } else {\n return \"sans-serif\";\n }\n } else if (options.fontShape === \"textit\" && options.fontWeight === \"textbf\") {\n return \"bold-italic\";\n } else if (options.fontShape === \"textit\") {\n return \"italic\";\n } else if (options.fontWeight === \"textbf\") {\n return \"bold\";\n }\n\n var font = options.font;\n\n if (!font || font === \"mathnormal\") {\n return null;\n }\n\n var mode = group.mode;\n\n if (font === \"mathit\") {\n return \"italic\";\n } else if (font === \"boldsymbol\") {\n return group.type === \"textord\" ? \"bold\" : \"bold-italic\";\n } else if (font === \"mathbf\") {\n return \"bold\";\n } else if (font === \"mathbb\") {\n return \"double-struck\";\n } else if (font === \"mathsfit\") {\n return \"sans-serif-italic\";\n } else if (font === \"mathfrak\") {\n return \"fraktur\";\n } else if (font === \"mathscr\" || font === \"mathcal\") {\n // MathML makes no distinction between script and calligraphic\n return \"script\";\n } else if (font === \"mathsf\") {\n return \"sans-serif\";\n } else if (font === \"mathtt\") {\n return \"monospace\";\n }\n\n var text = group.text;\n\n if (utils.contains([\"\\\\imath\", \"\\\\jmath\"], text)) {\n return null;\n }\n\n if (symbols[mode][text] && symbols[mode][text].replace) {\n text = symbols[mode][text].replace;\n }\n\n var fontName = buildCommon.fontMap[font].fontName;\n\n if (getCharacterMetrics(text, fontName, mode)) {\n return buildCommon.fontMap[font].variant;\n }\n\n return null;\n};\n/**\n * Check for . which is how a dot renders in MathML,\n * or ,\n * which is how a braced comma {,} renders in MathML\n */\n\nfunction isNumberPunctuation(group) {\n if (!group) {\n return false;\n }\n\n if (group.type === 'mi' && group.children.length === 1) {\n var child = group.children[0];\n return child instanceof TextNode && child.text === '.';\n } else if (group.type === 'mo' && group.children.length === 1 && group.getAttribute('separator') === 'true' && group.getAttribute('lspace') === '0em' && group.getAttribute('rspace') === '0em') {\n var _child = group.children[0];\n return _child instanceof TextNode && _child.text === ',';\n } else {\n return false;\n }\n}\n/**\n * Takes a list of nodes, builds them, and returns a list of the generated\n * MathML nodes. Also combine consecutive outputs into a single\n * tag.\n */\n\n\nvar buildExpression = function buildExpression(expression, options, isOrdgroup) {\n if (expression.length === 1) {\n var group = buildGroup(expression[0], options);\n\n if (isOrdgroup && group instanceof MathNode && group.type === \"mo\") {\n // When TeX writers want to suppress spacing on an operator,\n // they often put the operator by itself inside braces.\n group.setAttribute(\"lspace\", \"0em\");\n group.setAttribute(\"rspace\", \"0em\");\n }\n\n return [group];\n }\n\n var groups = [];\n var lastGroup;\n\n for (var i = 0; i < expression.length; i++) {\n var _group = buildGroup(expression[i], options);\n\n if (_group instanceof MathNode && lastGroup instanceof MathNode) {\n // Concatenate adjacent s\n if (_group.type === 'mtext' && lastGroup.type === 'mtext' && _group.getAttribute('mathvariant') === lastGroup.getAttribute('mathvariant')) {\n lastGroup.children.push(..._group.children);\n continue; // Concatenate adjacent s\n } else if (_group.type === 'mn' && lastGroup.type === 'mn') {\n lastGroup.children.push(..._group.children);\n continue; // Concatenate ... followed by .\n } else if (isNumberPunctuation(_group) && lastGroup.type === 'mn') {\n lastGroup.children.push(..._group.children);\n continue; // Concatenate . followed by ...\n } else if (_group.type === 'mn' && isNumberPunctuation(lastGroup)) {\n _group.children = [...lastGroup.children, ..._group.children];\n groups.pop(); // Put preceding ... or . inside base of\n // ...base......exponent... (or )\n } else if ((_group.type === 'msup' || _group.type === 'msub') && _group.children.length >= 1 && (lastGroup.type === 'mn' || isNumberPunctuation(lastGroup))) {\n var base = _group.children[0];\n\n if (base instanceof MathNode && base.type === 'mn') {\n base.children = [...lastGroup.children, ...base.children];\n groups.pop();\n } // \\not\n\n } else if (lastGroup.type === 'mi' && lastGroup.children.length === 1) {\n var lastChild = lastGroup.children[0];\n\n if (lastChild instanceof TextNode && lastChild.text === '\\u0338' && (_group.type === 'mo' || _group.type === 'mi' || _group.type === 'mn')) {\n var child = _group.children[0];\n\n if (child instanceof TextNode && child.text.length > 0) {\n // Overlay with combining character long solidus\n child.text = child.text.slice(0, 1) + \"\\u0338\" + child.text.slice(1);\n groups.pop();\n }\n }\n }\n }\n\n groups.push(_group);\n lastGroup = _group;\n }\n\n return groups;\n};\n/**\n * Equivalent to buildExpression, but wraps the elements in an \n * if there's more than one. Returns a single node instead of an array.\n */\n\nvar buildExpressionRow = function buildExpressionRow(expression, options, isOrdgroup) {\n return makeRow(buildExpression(expression, options, isOrdgroup));\n};\n/**\n * Takes a group from the parser and calls the appropriate groupBuilders function\n * on it to produce a MathML node.\n */\n\nvar buildGroup = function buildGroup(group, options) {\n if (!group) {\n return new mathMLTree.MathNode(\"mrow\");\n }\n\n if (_mathmlGroupBuilders[group.type]) {\n // Call the groupBuilders function\n // $FlowFixMe\n var result = _mathmlGroupBuilders[group.type](group, options); // $FlowFixMe\n\n return result;\n } else {\n throw new ParseError(\"Got group of unknown type: '\" + group.type + \"'\");\n }\n};\n/**\n * Takes a full parse tree and settings and builds a MathML representation of\n * it. In particular, we put the elements from building the parse tree into a\n * tag so we can also include that TeX source as an annotation.\n *\n * Note that we actually return a domTree element with a `` inside it so\n * we can do appropriate styling.\n */\n\nfunction buildMathML(tree, texExpression, options, isDisplayMode, forMathmlOnly) {\n var expression = buildExpression(tree, options); // TODO: Make a pass thru the MathML similar to buildHTML.traverseNonSpaceNodes\n // and add spacing nodes. This is necessary only adjacent to math operators\n // like \\sin or \\lim or to subsup elements that contain math operators.\n // MathML takes care of the other spacing issues.\n // Wrap up the expression in an mrow so it is presented in the semantics\n // tag correctly, unless it's a single or .\n\n var wrapper;\n\n if (expression.length === 1 && expression[0] instanceof MathNode && utils.contains([\"mrow\", \"mtable\"], expression[0].type)) {\n wrapper = expression[0];\n } else {\n wrapper = new mathMLTree.MathNode(\"mrow\", expression);\n } // Build a TeX annotation of the source\n\n\n var annotation = new mathMLTree.MathNode(\"annotation\", [new mathMLTree.TextNode(texExpression)]);\n annotation.setAttribute(\"encoding\", \"application/x-tex\");\n var semantics = new mathMLTree.MathNode(\"semantics\", [wrapper, annotation]);\n var math = new mathMLTree.MathNode(\"math\", [semantics]);\n math.setAttribute(\"xmlns\", \"http://www.w3.org/1998/Math/MathML\");\n\n if (isDisplayMode) {\n math.setAttribute(\"display\", \"block\");\n } // You can't style nodes, so we wrap the node in a span.\n // NOTE: The span class is not typed to have nodes as children, and\n // we don't want to make the children type more generic since the children\n // of span are expected to have more fields in `buildHtml` contexts.\n\n\n var wrapperClass = forMathmlOnly ? \"katex\" : \"katex-mathml\"; // $FlowFixMe\n\n return buildCommon.makeSpan([wrapperClass], [math]);\n}\n\nvar optionsFromSettings = function optionsFromSettings(settings) {\n return new Options({\n style: settings.displayMode ? Style$1.DISPLAY : Style$1.TEXT,\n maxSize: settings.maxSize,\n minRuleThickness: settings.minRuleThickness\n });\n};\n\nvar displayWrap = function displayWrap(node, settings) {\n if (settings.displayMode) {\n var classes = [\"katex-display\"];\n\n if (settings.leqno) {\n classes.push(\"leqno\");\n }\n\n if (settings.fleqn) {\n classes.push(\"fleqn\");\n }\n\n node = buildCommon.makeSpan(classes, [node]);\n }\n\n return node;\n};\n\nvar buildTree = function buildTree(tree, expression, settings) {\n var options = optionsFromSettings(settings);\n var katexNode;\n\n if (settings.output === \"mathml\") {\n return buildMathML(tree, expression, options, settings.displayMode, true);\n } else if (settings.output === \"html\") {\n var htmlNode = buildHTML(tree, options);\n katexNode = buildCommon.makeSpan([\"katex\"], [htmlNode]);\n } else {\n var mathMLNode = buildMathML(tree, expression, options, settings.displayMode, false);\n\n var _htmlNode = buildHTML(tree, options);\n\n katexNode = buildCommon.makeSpan([\"katex\"], [mathMLNode, _htmlNode]);\n }\n\n return displayWrap(katexNode, settings);\n};\nvar buildHTMLTree = function buildHTMLTree(tree, expression, settings) {\n var options = optionsFromSettings(settings);\n var htmlNode = buildHTML(tree, options);\n var katexNode = buildCommon.makeSpan([\"katex\"], [htmlNode]);\n return displayWrap(katexNode, settings);\n};\n\n/**\n * This file provides support to buildMathML.js and buildHTML.js\n * for stretchy wide elements rendered from SVG files\n * and other CSS trickery.\n */\nvar stretchyCodePoint = {\n widehat: \"^\",\n widecheck: \"\u02C7\",\n widetilde: \"~\",\n utilde: \"~\",\n overleftarrow: \"\\u2190\",\n underleftarrow: \"\\u2190\",\n xleftarrow: \"\\u2190\",\n overrightarrow: \"\\u2192\",\n underrightarrow: \"\\u2192\",\n xrightarrow: \"\\u2192\",\n underbrace: \"\\u23df\",\n overbrace: \"\\u23de\",\n overgroup: \"\\u23e0\",\n undergroup: \"\\u23e1\",\n overleftrightarrow: \"\\u2194\",\n underleftrightarrow: \"\\u2194\",\n xleftrightarrow: \"\\u2194\",\n Overrightarrow: \"\\u21d2\",\n xRightarrow: \"\\u21d2\",\n overleftharpoon: \"\\u21bc\",\n xleftharpoonup: \"\\u21bc\",\n overrightharpoon: \"\\u21c0\",\n xrightharpoonup: \"\\u21c0\",\n xLeftarrow: \"\\u21d0\",\n xLeftrightarrow: \"\\u21d4\",\n xhookleftarrow: \"\\u21a9\",\n xhookrightarrow: \"\\u21aa\",\n xmapsto: \"\\u21a6\",\n xrightharpoondown: \"\\u21c1\",\n xleftharpoondown: \"\\u21bd\",\n xrightleftharpoons: \"\\u21cc\",\n xleftrightharpoons: \"\\u21cb\",\n xtwoheadleftarrow: \"\\u219e\",\n xtwoheadrightarrow: \"\\u21a0\",\n xlongequal: \"=\",\n xtofrom: \"\\u21c4\",\n xrightleftarrows: \"\\u21c4\",\n xrightequilibrium: \"\\u21cc\",\n // Not a perfect match.\n xleftequilibrium: \"\\u21cb\",\n // None better available.\n \"\\\\cdrightarrow\": \"\\u2192\",\n \"\\\\cdleftarrow\": \"\\u2190\",\n \"\\\\cdlongequal\": \"=\"\n};\n\nvar mathMLnode = function mathMLnode(label) {\n var node = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(stretchyCodePoint[label.replace(/^\\\\/, '')])]);\n node.setAttribute(\"stretchy\", \"true\");\n return node;\n}; // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts.\n// Copyright (c) 2009-2010, Design Science, Inc. ()\n// Copyright (c) 2014-2017 Khan Academy ()\n// Licensed under the SIL Open Font License, Version 1.1.\n// See \\nhttp://scripts.sil.org/OFL\n// Very Long SVGs\n// Many of the KaTeX stretchy wide elements use a long SVG image and an\n// overflow: hidden tactic to achieve a stretchy image while avoiding\n// distortion of arrowheads or brace corners.\n// The SVG typically contains a very long (400 em) arrow.\n// The SVG is in a container span that has overflow: hidden, so the span\n// acts like a window that exposes only part of the SVG.\n// The SVG always has a longer, thinner aspect ratio than the container span.\n// After the SVG fills 100% of the height of the container span,\n// there is a long arrow shaft left over. That left-over shaft is not shown.\n// Instead, it is sliced off because the span's CSS has overflow: hidden.\n// Thus, the reader sees an arrow that matches the subject matter width\n// without distortion.\n// Some functions, such as \\cancel, need to vary their aspect ratio. These\n// functions do not get the overflow SVG treatment.\n// Second Brush Stroke\n// Low resolution monitors struggle to display images in fine detail.\n// So browsers apply anti-aliasing. A long straight arrow shaft therefore\n// will sometimes appear as if it has a blurred edge.\n// To mitigate this, these SVG files contain a second \"brush-stroke\" on the\n// arrow shafts. That is, a second long thin rectangular SVG path has been\n// written directly on top of each arrow shaft. This reinforcement causes\n// some of the screen pixels to display as black instead of the anti-aliased\n// gray pixel that a single path would generate. So we get arrow shafts\n// whose edges appear to be sharper.\n// In the katexImagesData object just below, the dimensions all\n// correspond to path geometry inside the relevant SVG.\n// For example, \\overrightarrow uses the same arrowhead as glyph U+2192\n// from the KaTeX Main font. The scaling factor is 1000.\n// That is, inside the font, that arrowhead is 522 units tall, which\n// corresponds to 0.522 em inside the document.\n\n\nvar katexImagesData = {\n // path(s), minWidth, height, align\n overrightarrow: [[\"rightarrow\"], 0.888, 522, \"xMaxYMin\"],\n overleftarrow: [[\"leftarrow\"], 0.888, 522, \"xMinYMin\"],\n underrightarrow: [[\"rightarrow\"], 0.888, 522, \"xMaxYMin\"],\n underleftarrow: [[\"leftarrow\"], 0.888, 522, \"xMinYMin\"],\n xrightarrow: [[\"rightarrow\"], 1.469, 522, \"xMaxYMin\"],\n \"\\\\cdrightarrow\": [[\"rightarrow\"], 3.0, 522, \"xMaxYMin\"],\n // CD minwwidth2.5pc\n xleftarrow: [[\"leftarrow\"], 1.469, 522, \"xMinYMin\"],\n \"\\\\cdleftarrow\": [[\"leftarrow\"], 3.0, 522, \"xMinYMin\"],\n Overrightarrow: [[\"doublerightarrow\"], 0.888, 560, \"xMaxYMin\"],\n xRightarrow: [[\"doublerightarrow\"], 1.526, 560, \"xMaxYMin\"],\n xLeftarrow: [[\"doubleleftarrow\"], 1.526, 560, \"xMinYMin\"],\n overleftharpoon: [[\"leftharpoon\"], 0.888, 522, \"xMinYMin\"],\n xleftharpoonup: [[\"leftharpoon\"], 0.888, 522, \"xMinYMin\"],\n xleftharpoondown: [[\"leftharpoondown\"], 0.888, 522, \"xMinYMin\"],\n overrightharpoon: [[\"rightharpoon\"], 0.888, 522, \"xMaxYMin\"],\n xrightharpoonup: [[\"rightharpoon\"], 0.888, 522, \"xMaxYMin\"],\n xrightharpoondown: [[\"rightharpoondown\"], 0.888, 522, \"xMaxYMin\"],\n xlongequal: [[\"longequal\"], 0.888, 334, \"xMinYMin\"],\n \"\\\\cdlongequal\": [[\"longequal\"], 3.0, 334, \"xMinYMin\"],\n xtwoheadleftarrow: [[\"twoheadleftarrow\"], 0.888, 334, \"xMinYMin\"],\n xtwoheadrightarrow: [[\"twoheadrightarrow\"], 0.888, 334, \"xMaxYMin\"],\n overleftrightarrow: [[\"leftarrow\", \"rightarrow\"], 0.888, 522],\n overbrace: [[\"leftbrace\", \"midbrace\", \"rightbrace\"], 1.6, 548],\n underbrace: [[\"leftbraceunder\", \"midbraceunder\", \"rightbraceunder\"], 1.6, 548],\n underleftrightarrow: [[\"leftarrow\", \"rightarrow\"], 0.888, 522],\n xleftrightarrow: [[\"leftarrow\", \"rightarrow\"], 1.75, 522],\n xLeftrightarrow: [[\"doubleleftarrow\", \"doublerightarrow\"], 1.75, 560],\n xrightleftharpoons: [[\"leftharpoondownplus\", \"rightharpoonplus\"], 1.75, 716],\n xleftrightharpoons: [[\"leftharpoonplus\", \"rightharpoondownplus\"], 1.75, 716],\n xhookleftarrow: [[\"leftarrow\", \"righthook\"], 1.08, 522],\n xhookrightarrow: [[\"lefthook\", \"rightarrow\"], 1.08, 522],\n overlinesegment: [[\"leftlinesegment\", \"rightlinesegment\"], 0.888, 522],\n underlinesegment: [[\"leftlinesegment\", \"rightlinesegment\"], 0.888, 522],\n overgroup: [[\"leftgroup\", \"rightgroup\"], 0.888, 342],\n undergroup: [[\"leftgroupunder\", \"rightgroupunder\"], 0.888, 342],\n xmapsto: [[\"leftmapsto\", \"rightarrow\"], 1.5, 522],\n xtofrom: [[\"leftToFrom\", \"rightToFrom\"], 1.75, 528],\n // The next three arrows are from the mhchem package.\n // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the\n // document as \\xrightarrow or \\xrightleftharpoons. Those have\n // min-length = 1.75em, so we set min-length on these next three to match.\n xrightleftarrows: [[\"baraboveleftarrow\", \"rightarrowabovebar\"], 1.75, 901],\n xrightequilibrium: [[\"baraboveshortleftharpoon\", \"rightharpoonaboveshortbar\"], 1.75, 716],\n xleftequilibrium: [[\"shortbaraboveleftharpoon\", \"shortrightharpoonabovebar\"], 1.75, 716]\n};\n\nvar groupLength = function groupLength(arg) {\n if (arg.type === \"ordgroup\") {\n return arg.body.length;\n } else {\n return 1;\n }\n};\n\nvar svgSpan = function svgSpan(group, options) {\n // Create a span with inline SVG for the element.\n function buildSvgSpan_() {\n var viewBoxWidth = 400000; // default\n\n var label = group.label.slice(1);\n\n if (utils.contains([\"widehat\", \"widecheck\", \"widetilde\", \"utilde\"], label)) {\n // Each type in the `if` statement corresponds to one of the ParseNode\n // types below. This narrowing is required to access `grp.base`.\n // $FlowFixMe\n var grp = group; // There are four SVG images available for each function.\n // Choose a taller image when there are more characters.\n\n var numChars = groupLength(grp.base);\n var viewBoxHeight;\n var pathName;\n\n var _height;\n\n if (numChars > 5) {\n if (label === \"widehat\" || label === \"widecheck\") {\n viewBoxHeight = 420;\n viewBoxWidth = 2364;\n _height = 0.42;\n pathName = label + \"4\";\n } else {\n viewBoxHeight = 312;\n viewBoxWidth = 2340;\n _height = 0.34;\n pathName = \"tilde4\";\n }\n } else {\n var imgIndex = [1, 1, 2, 2, 3, 3][numChars];\n\n if (label === \"widehat\" || label === \"widecheck\") {\n viewBoxWidth = [0, 1062, 2364, 2364, 2364][imgIndex];\n viewBoxHeight = [0, 239, 300, 360, 420][imgIndex];\n _height = [0, 0.24, 0.3, 0.3, 0.36, 0.42][imgIndex];\n pathName = label + imgIndex;\n } else {\n viewBoxWidth = [0, 600, 1033, 2339, 2340][imgIndex];\n viewBoxHeight = [0, 260, 286, 306, 312][imgIndex];\n _height = [0, 0.26, 0.286, 0.3, 0.306, 0.34][imgIndex];\n pathName = \"tilde\" + imgIndex;\n }\n }\n\n var path = new PathNode(pathName);\n var svgNode = new SvgNode([path], {\n \"width\": \"100%\",\n \"height\": makeEm(_height),\n \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + viewBoxHeight,\n \"preserveAspectRatio\": \"none\"\n });\n return {\n span: buildCommon.makeSvgSpan([], [svgNode], options),\n minWidth: 0,\n height: _height\n };\n } else {\n var spans = [];\n var data = katexImagesData[label];\n var [paths, _minWidth, _viewBoxHeight] = data;\n\n var _height2 = _viewBoxHeight / 1000;\n\n var numSvgChildren = paths.length;\n var widthClasses;\n var aligns;\n\n if (numSvgChildren === 1) {\n // $FlowFixMe: All these cases must be of the 4-tuple type.\n var align1 = data[3];\n widthClasses = [\"hide-tail\"];\n aligns = [align1];\n } else if (numSvgChildren === 2) {\n widthClasses = [\"halfarrow-left\", \"halfarrow-right\"];\n aligns = [\"xMinYMin\", \"xMaxYMin\"];\n } else if (numSvgChildren === 3) {\n widthClasses = [\"brace-left\", \"brace-center\", \"brace-right\"];\n aligns = [\"xMinYMin\", \"xMidYMin\", \"xMaxYMin\"];\n } else {\n throw new Error(\"Correct katexImagesData or update code here to support\\n \" + numSvgChildren + \" children.\");\n }\n\n for (var i = 0; i < numSvgChildren; i++) {\n var _path = new PathNode(paths[i]);\n\n var _svgNode = new SvgNode([_path], {\n \"width\": \"400em\",\n \"height\": makeEm(_height2),\n \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + _viewBoxHeight,\n \"preserveAspectRatio\": aligns[i] + \" slice\"\n });\n\n var _span = buildCommon.makeSvgSpan([widthClasses[i]], [_svgNode], options);\n\n if (numSvgChildren === 1) {\n return {\n span: _span,\n minWidth: _minWidth,\n height: _height2\n };\n } else {\n _span.style.height = makeEm(_height2);\n spans.push(_span);\n }\n }\n\n return {\n span: buildCommon.makeSpan([\"stretchy\"], spans, options),\n minWidth: _minWidth,\n height: _height2\n };\n }\n } // buildSvgSpan_()\n\n\n var {\n span,\n minWidth,\n height\n } = buildSvgSpan_(); // Note that we are returning span.depth = 0.\n // Any adjustments relative to the baseline must be done in buildHTML.\n\n span.height = height;\n span.style.height = makeEm(height);\n\n if (minWidth > 0) {\n span.style.minWidth = makeEm(minWidth);\n }\n\n return span;\n};\n\nvar encloseSpan = function encloseSpan(inner, label, topPad, bottomPad, options) {\n // Return an image span for \\cancel, \\bcancel, \\xcancel, \\fbox, or \\angl\n var img;\n var totalHeight = inner.height + inner.depth + topPad + bottomPad;\n\n if (/fbox|color|angl/.test(label)) {\n img = buildCommon.makeSpan([\"stretchy\", label], [], options);\n\n if (label === \"fbox\") {\n var color = options.color && options.getColor();\n\n if (color) {\n img.style.borderColor = color;\n }\n }\n } else {\n // \\cancel, \\bcancel, or \\xcancel\n // Since \\cancel's SVG is inline and it omits the viewBox attribute,\n // its stroke-width will not vary with span area.\n var lines = [];\n\n if (/^[bx]cancel$/.test(label)) {\n lines.push(new LineNode({\n \"x1\": \"0\",\n \"y1\": \"0\",\n \"x2\": \"100%\",\n \"y2\": \"100%\",\n \"stroke-width\": \"0.046em\"\n }));\n }\n\n if (/^x?cancel$/.test(label)) {\n lines.push(new LineNode({\n \"x1\": \"0\",\n \"y1\": \"100%\",\n \"x2\": \"100%\",\n \"y2\": \"0\",\n \"stroke-width\": \"0.046em\"\n }));\n }\n\n var svgNode = new SvgNode(lines, {\n \"width\": \"100%\",\n \"height\": makeEm(totalHeight)\n });\n img = buildCommon.makeSvgSpan([], [svgNode], options);\n }\n\n img.height = totalHeight;\n img.style.height = makeEm(totalHeight);\n return img;\n};\n\nvar stretchy = {\n encloseSpan,\n mathMLnode,\n svgSpan\n};\n\n/**\n * Asserts that the node is of the given type and returns it with stricter\n * typing. Throws if the node's type does not match.\n */\nfunction assertNodeType(node, type) {\n if (!node || node.type !== type) {\n throw new Error(\"Expected node of type \" + type + \", but got \" + (node ? \"node of type \" + node.type : String(node)));\n } // $FlowFixMe, >=0.125\n\n\n return node;\n}\n/**\n * Returns the node more strictly typed iff it is of the given type. Otherwise,\n * returns null.\n */\n\nfunction assertSymbolNodeType(node) {\n var typedNode = checkSymbolNodeType(node);\n\n if (!typedNode) {\n throw new Error(\"Expected node of symbol group type, but got \" + (node ? \"node of type \" + node.type : String(node)));\n }\n\n return typedNode;\n}\n/**\n * Returns the node more strictly typed iff it is of the given type. Otherwise,\n * returns null.\n */\n\nfunction checkSymbolNodeType(node) {\n if (node && (node.type === \"atom\" || NON_ATOMS.hasOwnProperty(node.type))) {\n // $FlowFixMe\n return node;\n }\n\n return null;\n}\n\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only \"accent\", but\n// also \"supsub\" since an accent can affect super/subscripting.\nvar htmlBuilder$a = (grp, options) => {\n // Accents are handled in the TeXbook pg. 443, rule 12.\n var base;\n var group;\n var supSubGroup;\n\n if (grp && grp.type === \"supsub\") {\n // If our base is a character box, and we have superscripts and\n // subscripts, the supsub will defer to us. In particular, we want\n // to attach the superscripts and subscripts to the inner body (so\n // that the position of the superscripts and subscripts won't be\n // affected by the height of the accent). We accomplish this by\n // sticking the base of the accent into the base of the supsub, and\n // rendering that, while keeping track of where the accent is.\n // The real accent group is the base of the supsub group\n group = assertNodeType(grp.base, \"accent\"); // The character box is the base of the accent group\n\n base = group.base; // Stick the character box into the base of the supsub group\n\n grp.base = base; // Rerender the supsub group with its new base, and store that\n // result.\n\n supSubGroup = assertSpan(buildGroup$1(grp, options)); // reset original base\n\n grp.base = group;\n } else {\n group = assertNodeType(grp, \"accent\");\n base = group.base;\n } // Build the base group\n\n\n var body = buildGroup$1(base, options.havingCrampedStyle()); // Does the accent need to shift for the skew of a character?\n\n var mustShift = group.isShifty && utils.isCharacterBox(base); // Calculate the skew of the accent. This is based on the line \"If the\n // nucleus is not a single character, let s = 0; otherwise set s to the\n // kern amount for the nucleus followed by the \\skewchar of its font.\"\n // Note that our skew metrics are just the kern between each character\n // and the skewchar.\n\n var skew = 0;\n\n if (mustShift) {\n // If the base is a character box, then we want the skew of the\n // innermost character. To do that, we find the innermost character:\n var baseChar = utils.getBaseElem(base); // Then, we render its group to get the symbol inside it\n\n var baseGroup = buildGroup$1(baseChar, options.havingCrampedStyle()); // Finally, we pull the skew off of the symbol.\n\n skew = assertSymbolDomNode(baseGroup).skew; // Note that we now throw away baseGroup, because the layers we\n // removed with getBaseElem might contain things like \\color which\n // we can't get rid of.\n // TODO(emily): Find a better way to get the skew\n }\n\n var accentBelow = group.label === \"\\\\c\"; // calculate the amount of space between the body and the accent\n\n var clearance = accentBelow ? body.height + body.depth : Math.min(body.height, options.fontMetrics().xHeight); // Build the accent\n\n var accentBody;\n\n if (!group.isStretchy) {\n var accent;\n var width;\n\n if (group.label === \"\\\\vec\") {\n // Before version 0.9, \\vec used the combining font glyph U+20D7.\n // But browsers, especially Safari, are not consistent in how they\n // render combining characters when not preceded by a character.\n // So now we use an SVG.\n // If Safari reforms, we should consider reverting to the glyph.\n accent = buildCommon.staticSvg(\"vec\", options);\n width = buildCommon.svgData.vec[1];\n } else {\n accent = buildCommon.makeOrd({\n mode: group.mode,\n text: group.label\n }, options, \"textord\");\n accent = assertSymbolDomNode(accent); // Remove the italic correction of the accent, because it only serves to\n // shift the accent over to a place we don't want.\n\n accent.italic = 0;\n width = accent.width;\n\n if (accentBelow) {\n clearance += accent.depth;\n }\n }\n\n accentBody = buildCommon.makeSpan([\"accent-body\"], [accent]); // \"Full\" accents expand the width of the resulting symbol to be\n // at least the width of the accent, and overlap directly onto the\n // character without any vertical offset.\n\n var accentFull = group.label === \"\\\\textcircled\";\n\n if (accentFull) {\n accentBody.classes.push('accent-full');\n clearance = body.height;\n } // Shift the accent over by the skew.\n\n\n var left = skew; // CSS defines `.katex .accent .accent-body:not(.accent-full) { width: 0 }`\n // so that the accent doesn't contribute to the bounding box.\n // We need to shift the character by its width (effectively half\n // its width) to compensate.\n\n if (!accentFull) {\n left -= width / 2;\n }\n\n accentBody.style.left = makeEm(left); // \\textcircled uses the \\bigcirc glyph, so it needs some\n // vertical adjustment to match LaTeX.\n\n if (group.label === \"\\\\textcircled\") {\n accentBody.style.top = \".2em\";\n }\n\n accentBody = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: body\n }, {\n type: \"kern\",\n size: -clearance\n }, {\n type: \"elem\",\n elem: accentBody\n }]\n }, options);\n } else {\n accentBody = stretchy.svgSpan(group, options);\n accentBody = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: body\n }, {\n type: \"elem\",\n elem: accentBody,\n wrapperClasses: [\"svg-align\"],\n wrapperStyle: skew > 0 ? {\n width: \"calc(100% - \" + makeEm(2 * skew) + \")\",\n marginLeft: makeEm(2 * skew)\n } : undefined\n }]\n }, options);\n }\n\n var accentWrap = buildCommon.makeSpan([\"mord\", \"accent\"], [accentBody], options);\n\n if (supSubGroup) {\n // Here, we replace the \"base\" child of the supsub with our newly\n // generated accent.\n supSubGroup.children[0] = accentWrap; // Since we don't rerun the height calculation after replacing the\n // accent, we manually recalculate height.\n\n supSubGroup.height = Math.max(accentWrap.height, supSubGroup.height); // Accents should always be ords, even when their innards are not.\n\n supSubGroup.classes[0] = \"mord\";\n return supSubGroup;\n } else {\n return accentWrap;\n }\n};\n\nvar mathmlBuilder$9 = (group, options) => {\n var accentNode = group.isStretchy ? stretchy.mathMLnode(group.label) : new mathMLTree.MathNode(\"mo\", [makeText(group.label, group.mode)]);\n var node = new mathMLTree.MathNode(\"mover\", [buildGroup(group.base, options), accentNode]);\n node.setAttribute(\"accent\", \"true\");\n return node;\n};\n\nvar NON_STRETCHY_ACCENT_REGEX = new RegExp([\"\\\\acute\", \"\\\\grave\", \"\\\\ddot\", \"\\\\tilde\", \"\\\\bar\", \"\\\\breve\", \"\\\\check\", \"\\\\hat\", \"\\\\vec\", \"\\\\dot\", \"\\\\mathring\"].map(accent => \"\\\\\" + accent).join(\"|\")); // Accents\n\ndefineFunction({\n type: \"accent\",\n names: [\"\\\\acute\", \"\\\\grave\", \"\\\\ddot\", \"\\\\tilde\", \"\\\\bar\", \"\\\\breve\", \"\\\\check\", \"\\\\hat\", \"\\\\vec\", \"\\\\dot\", \"\\\\mathring\", \"\\\\widecheck\", \"\\\\widehat\", \"\\\\widetilde\", \"\\\\overrightarrow\", \"\\\\overleftarrow\", \"\\\\Overrightarrow\", \"\\\\overleftrightarrow\", \"\\\\overgroup\", \"\\\\overlinesegment\", \"\\\\overleftharpoon\", \"\\\\overrightharpoon\"],\n props: {\n numArgs: 1\n },\n handler: (context, args) => {\n var base = normalizeArgument(args[0]);\n var isStretchy = !NON_STRETCHY_ACCENT_REGEX.test(context.funcName);\n var isShifty = !isStretchy || context.funcName === \"\\\\widehat\" || context.funcName === \"\\\\widetilde\" || context.funcName === \"\\\\widecheck\";\n return {\n type: \"accent\",\n mode: context.parser.mode,\n label: context.funcName,\n isStretchy: isStretchy,\n isShifty: isShifty,\n base: base\n };\n },\n htmlBuilder: htmlBuilder$a,\n mathmlBuilder: mathmlBuilder$9\n}); // Text-mode accents\n\ndefineFunction({\n type: \"accent\",\n names: [\"\\\\'\", \"\\\\`\", \"\\\\^\", \"\\\\~\", \"\\\\=\", \"\\\\u\", \"\\\\.\", '\\\\\"', \"\\\\c\", \"\\\\r\", \"\\\\H\", \"\\\\v\", \"\\\\textcircled\"],\n props: {\n numArgs: 1,\n allowedInText: true,\n allowedInMath: true,\n // unless in strict mode\n argTypes: [\"primitive\"]\n },\n handler: (context, args) => {\n var base = args[0];\n var mode = context.parser.mode;\n\n if (mode === \"math\") {\n context.parser.settings.reportNonstrict(\"mathVsTextAccents\", \"LaTeX's accent \" + context.funcName + \" works only in text mode\");\n mode = \"text\";\n }\n\n return {\n type: \"accent\",\n mode: mode,\n label: context.funcName,\n isStretchy: false,\n isShifty: true,\n base: base\n };\n },\n htmlBuilder: htmlBuilder$a,\n mathmlBuilder: mathmlBuilder$9\n});\n\n// Horizontal overlap functions\ndefineFunction({\n type: \"accentUnder\",\n names: [\"\\\\underleftarrow\", \"\\\\underrightarrow\", \"\\\\underleftrightarrow\", \"\\\\undergroup\", \"\\\\underlinesegment\", \"\\\\utilde\"],\n props: {\n numArgs: 1\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName\n } = _ref;\n var base = args[0];\n return {\n type: \"accentUnder\",\n mode: parser.mode,\n label: funcName,\n base: base\n };\n },\n htmlBuilder: (group, options) => {\n // Treat under accents much like underlines.\n var innerGroup = buildGroup$1(group.base, options);\n var accentBody = stretchy.svgSpan(group, options);\n var kern = group.label === \"\\\\utilde\" ? 0.12 : 0; // Generate the vlist, with the appropriate kerns\n\n var vlist = buildCommon.makeVList({\n positionType: \"top\",\n positionData: innerGroup.height,\n children: [{\n type: \"elem\",\n elem: accentBody,\n wrapperClasses: [\"svg-align\"]\n }, {\n type: \"kern\",\n size: kern\n }, {\n type: \"elem\",\n elem: innerGroup\n }]\n }, options);\n return buildCommon.makeSpan([\"mord\", \"accentunder\"], [vlist], options);\n },\n mathmlBuilder: (group, options) => {\n var accentNode = stretchy.mathMLnode(group.label);\n var node = new mathMLTree.MathNode(\"munder\", [buildGroup(group.base, options), accentNode]);\n node.setAttribute(\"accentunder\", \"true\");\n return node;\n }\n});\n\n// Helper function\nvar paddedNode = group => {\n var node = new mathMLTree.MathNode(\"mpadded\", group ? [group] : []);\n node.setAttribute(\"width\", \"+0.6em\");\n node.setAttribute(\"lspace\", \"0.3em\");\n return node;\n}; // Stretchy arrows with an optional argument\n\n\ndefineFunction({\n type: \"xArrow\",\n names: [\"\\\\xleftarrow\", \"\\\\xrightarrow\", \"\\\\xLeftarrow\", \"\\\\xRightarrow\", \"\\\\xleftrightarrow\", \"\\\\xLeftrightarrow\", \"\\\\xhookleftarrow\", \"\\\\xhookrightarrow\", \"\\\\xmapsto\", \"\\\\xrightharpoondown\", \"\\\\xrightharpoonup\", \"\\\\xleftharpoondown\", \"\\\\xleftharpoonup\", \"\\\\xrightleftharpoons\", \"\\\\xleftrightharpoons\", \"\\\\xlongequal\", \"\\\\xtwoheadrightarrow\", \"\\\\xtwoheadleftarrow\", \"\\\\xtofrom\", // The next 3 functions are here to support the mhchem extension.\n // Direct use of these functions is discouraged and may break someday.\n \"\\\\xrightleftarrows\", \"\\\\xrightequilibrium\", \"\\\\xleftequilibrium\", // The next 3 functions are here only to support the {CD} environment.\n \"\\\\\\\\cdrightarrow\", \"\\\\\\\\cdleftarrow\", \"\\\\\\\\cdlongequal\"],\n props: {\n numArgs: 1,\n numOptionalArgs: 1\n },\n\n handler(_ref, args, optArgs) {\n var {\n parser,\n funcName\n } = _ref;\n return {\n type: \"xArrow\",\n mode: parser.mode,\n label: funcName,\n body: args[0],\n below: optArgs[0]\n };\n },\n\n // Flow is unable to correctly infer the type of `group`, even though it's\n // unambiguously determined from the passed-in `type` above.\n htmlBuilder(group, options) {\n var style = options.style; // Build the argument groups in the appropriate style.\n // Ref: amsmath.dtx: \\hbox{$\\scriptstyle\\mkern#3mu{#6}\\mkern#4mu$}%\n // Some groups can return document fragments. Handle those by wrapping\n // them in a span.\n\n var newOptions = options.havingStyle(style.sup());\n var upperGroup = buildCommon.wrapFragment(buildGroup$1(group.body, newOptions, options), options);\n var arrowPrefix = group.label.slice(0, 2) === \"\\\\x\" ? \"x\" : \"cd\";\n upperGroup.classes.push(arrowPrefix + \"-arrow-pad\");\n var lowerGroup;\n\n if (group.below) {\n // Build the lower group\n newOptions = options.havingStyle(style.sub());\n lowerGroup = buildCommon.wrapFragment(buildGroup$1(group.below, newOptions, options), options);\n lowerGroup.classes.push(arrowPrefix + \"-arrow-pad\");\n }\n\n var arrowBody = stretchy.svgSpan(group, options); // Re shift: Note that stretchy.svgSpan returned arrowBody.depth = 0.\n // The point we want on the math axis is at 0.5 * arrowBody.height.\n\n var arrowShift = -options.fontMetrics().axisHeight + 0.5 * arrowBody.height; // 2 mu kern. Ref: amsmath.dtx: #7\\if0#2\\else\\mkern#2mu\\fi\n\n var upperShift = -options.fontMetrics().axisHeight - 0.5 * arrowBody.height - 0.111; // 0.111 em = 2 mu\n\n if (upperGroup.depth > 0.25 || group.label === \"\\\\xleftequilibrium\") {\n upperShift -= upperGroup.depth; // shift up if depth encroaches\n } // Generate the vlist\n\n\n var vlist;\n\n if (lowerGroup) {\n var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + 0.5 * arrowBody.height + 0.111;\n vlist = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [{\n type: \"elem\",\n elem: upperGroup,\n shift: upperShift\n }, {\n type: \"elem\",\n elem: arrowBody,\n shift: arrowShift\n }, {\n type: \"elem\",\n elem: lowerGroup,\n shift: lowerShift\n }]\n }, options);\n } else {\n vlist = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [{\n type: \"elem\",\n elem: upperGroup,\n shift: upperShift\n }, {\n type: \"elem\",\n elem: arrowBody,\n shift: arrowShift\n }]\n }, options);\n } // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n\n\n vlist.children[0].children[0].children[1].classes.push(\"svg-align\");\n return buildCommon.makeSpan([\"mrel\", \"x-arrow\"], [vlist], options);\n },\n\n mathmlBuilder(group, options) {\n var arrowNode = stretchy.mathMLnode(group.label);\n arrowNode.setAttribute(\"minsize\", group.label.charAt(0) === \"x\" ? \"1.75em\" : \"3.0em\");\n var node;\n\n if (group.body) {\n var upperNode = paddedNode(buildGroup(group.body, options));\n\n if (group.below) {\n var lowerNode = paddedNode(buildGroup(group.below, options));\n node = new mathMLTree.MathNode(\"munderover\", [arrowNode, lowerNode, upperNode]);\n } else {\n node = new mathMLTree.MathNode(\"mover\", [arrowNode, upperNode]);\n }\n } else if (group.below) {\n var _lowerNode = paddedNode(buildGroup(group.below, options));\n\n node = new mathMLTree.MathNode(\"munder\", [arrowNode, _lowerNode]);\n } else {\n // This should never happen.\n // Parser.js throws an error if there is no argument.\n node = paddedNode();\n node = new mathMLTree.MathNode(\"mover\", [arrowNode, node]);\n }\n\n return node;\n }\n\n});\n\nvar makeSpan = buildCommon.makeSpan;\n\nfunction htmlBuilder$9(group, options) {\n var elements = buildExpression$1(group.body, options, true);\n return makeSpan([group.mclass], elements, options);\n}\n\nfunction mathmlBuilder$8(group, options) {\n var node;\n var inner = buildExpression(group.body, options);\n\n if (group.mclass === \"minner\") {\n node = new mathMLTree.MathNode(\"mpadded\", inner);\n } else if (group.mclass === \"mord\") {\n if (group.isCharacterBox) {\n node = inner[0];\n node.type = \"mi\";\n } else {\n node = new mathMLTree.MathNode(\"mi\", inner);\n }\n } else {\n if (group.isCharacterBox) {\n node = inner[0];\n node.type = \"mo\";\n } else {\n node = new mathMLTree.MathNode(\"mo\", inner);\n } // Set spacing based on what is the most likely adjacent atom type.\n // See TeXbook p170.\n\n\n if (group.mclass === \"mbin\") {\n node.attributes.lspace = \"0.22em\"; // medium space\n\n node.attributes.rspace = \"0.22em\";\n } else if (group.mclass === \"mpunct\") {\n node.attributes.lspace = \"0em\";\n node.attributes.rspace = \"0.17em\"; // thinspace\n } else if (group.mclass === \"mopen\" || group.mclass === \"mclose\") {\n node.attributes.lspace = \"0em\";\n node.attributes.rspace = \"0em\";\n } else if (group.mclass === \"minner\") {\n node.attributes.lspace = \"0.0556em\"; // 1 mu is the most likely option\n\n node.attributes.width = \"+0.1111em\";\n } // MathML default space is 5/18 em, so needs no action.\n // Ref: https://developer.mozilla.org/en-US/docs/Web/MathML/Element/mo\n\n }\n\n return node;\n} // Math class commands except \\mathop\n\n\ndefineFunction({\n type: \"mclass\",\n names: [\"\\\\mathord\", \"\\\\mathbin\", \"\\\\mathrel\", \"\\\\mathopen\", \"\\\\mathclose\", \"\\\\mathpunct\", \"\\\\mathinner\"],\n props: {\n numArgs: 1,\n primitive: true\n },\n\n handler(_ref, args) {\n var {\n parser,\n funcName\n } = _ref;\n var body = args[0];\n return {\n type: \"mclass\",\n mode: parser.mode,\n mclass: \"m\" + funcName.slice(5),\n // TODO(kevinb): don't prefix with 'm'\n body: ordargument(body),\n isCharacterBox: utils.isCharacterBox(body)\n };\n },\n\n htmlBuilder: htmlBuilder$9,\n mathmlBuilder: mathmlBuilder$8\n});\nvar binrelClass = arg => {\n // \\binrel@ spacing varies with (bin|rel|ord) of the atom in the argument.\n // (by rendering separately and with {}s before and after, and measuring\n // the change in spacing). We'll do roughly the same by detecting the\n // atom type directly.\n var atom = arg.type === \"ordgroup\" && arg.body.length ? arg.body[0] : arg;\n\n if (atom.type === \"atom\" && (atom.family === \"bin\" || atom.family === \"rel\")) {\n return \"m\" + atom.family;\n } else {\n return \"mord\";\n }\n}; // \\@binrel{x}{y} renders like y but as mbin/mrel/mord if x is mbin/mrel/mord.\n// This is equivalent to \\binrel@{x}\\binrel@@{y} in AMSTeX.\n\ndefineFunction({\n type: \"mclass\",\n names: [\"\\\\@binrel\"],\n props: {\n numArgs: 2\n },\n\n handler(_ref2, args) {\n var {\n parser\n } = _ref2;\n return {\n type: \"mclass\",\n mode: parser.mode,\n mclass: binrelClass(args[0]),\n body: ordargument(args[1]),\n isCharacterBox: utils.isCharacterBox(args[1])\n };\n }\n\n}); // Build a relation or stacked op by placing one symbol on top of another\n\ndefineFunction({\n type: \"mclass\",\n names: [\"\\\\stackrel\", \"\\\\overset\", \"\\\\underset\"],\n props: {\n numArgs: 2\n },\n\n handler(_ref3, args) {\n var {\n parser,\n funcName\n } = _ref3;\n var baseArg = args[1];\n var shiftedArg = args[0];\n var mclass;\n\n if (funcName !== \"\\\\stackrel\") {\n // LaTeX applies \\binrel spacing to \\overset and \\underset.\n mclass = binrelClass(baseArg);\n } else {\n mclass = \"mrel\"; // for \\stackrel\n }\n\n var baseOp = {\n type: \"op\",\n mode: baseArg.mode,\n limits: true,\n alwaysHandleSupSub: true,\n parentIsSupSub: false,\n symbol: false,\n suppressBaseShift: funcName !== \"\\\\stackrel\",\n body: ordargument(baseArg)\n };\n var supsub = {\n type: \"supsub\",\n mode: shiftedArg.mode,\n base: baseOp,\n sup: funcName === \"\\\\underset\" ? null : shiftedArg,\n sub: funcName === \"\\\\underset\" ? shiftedArg : null\n };\n return {\n type: \"mclass\",\n mode: parser.mode,\n mclass,\n body: [supsub],\n isCharacterBox: utils.isCharacterBox(supsub)\n };\n },\n\n htmlBuilder: htmlBuilder$9,\n mathmlBuilder: mathmlBuilder$8\n});\n\n// \\pmb is a simulation of bold font.\n// The version of \\pmb in ambsy.sty works by typesetting three copies\n// with small offsets. We use CSS text-shadow.\n// It's a hack. Not as good as a real bold font. Better than nothing.\ndefineFunction({\n type: \"pmb\",\n names: [\"\\\\pmb\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n return {\n type: \"pmb\",\n mode: parser.mode,\n mclass: binrelClass(args[0]),\n body: ordargument(args[0])\n };\n },\n\n htmlBuilder(group, options) {\n var elements = buildExpression$1(group.body, options, true);\n var node = buildCommon.makeSpan([group.mclass], elements, options);\n node.style.textShadow = \"0.02em 0.01em 0.04px\";\n return node;\n },\n\n mathmlBuilder(group, style) {\n var inner = buildExpression(group.body, style); // Wrap with an element.\n\n var node = new mathMLTree.MathNode(\"mstyle\", inner);\n node.setAttribute(\"style\", \"text-shadow: 0.02em 0.01em 0.04px\");\n return node;\n }\n\n});\n\nvar cdArrowFunctionName = {\n \">\": \"\\\\\\\\cdrightarrow\",\n \"<\": \"\\\\\\\\cdleftarrow\",\n \"=\": \"\\\\\\\\cdlongequal\",\n \"A\": \"\\\\uparrow\",\n \"V\": \"\\\\downarrow\",\n \"|\": \"\\\\Vert\",\n \".\": \"no arrow\"\n};\n\nvar newCell = () => {\n // Create an empty cell, to be filled below with parse nodes.\n // The parseTree from this module must be constructed like the\n // one created by parseArray(), so an empty CD cell must\n // be a ParseNode<\"styling\">. And CD is always displaystyle.\n // So these values are fixed and flow can do implicit typing.\n return {\n type: \"styling\",\n body: [],\n mode: \"math\",\n style: \"display\"\n };\n};\n\nvar isStartOfArrow = node => {\n return node.type === \"textord\" && node.text === \"@\";\n};\n\nvar isLabelEnd = (node, endChar) => {\n return (node.type === \"mathord\" || node.type === \"atom\") && node.text === endChar;\n};\n\nfunction cdArrow(arrowChar, labels, parser) {\n // Return a parse tree of an arrow and its labels.\n // This acts in a way similar to a macro expansion.\n var funcName = cdArrowFunctionName[arrowChar];\n\n switch (funcName) {\n case \"\\\\\\\\cdrightarrow\":\n case \"\\\\\\\\cdleftarrow\":\n return parser.callFunction(funcName, [labels[0]], [labels[1]]);\n\n case \"\\\\uparrow\":\n case \"\\\\downarrow\":\n {\n var leftLabel = parser.callFunction(\"\\\\\\\\cdleft\", [labels[0]], []);\n var bareArrow = {\n type: \"atom\",\n text: funcName,\n mode: \"math\",\n family: \"rel\"\n };\n var sizedArrow = parser.callFunction(\"\\\\Big\", [bareArrow], []);\n var rightLabel = parser.callFunction(\"\\\\\\\\cdright\", [labels[1]], []);\n var arrowGroup = {\n type: \"ordgroup\",\n mode: \"math\",\n body: [leftLabel, sizedArrow, rightLabel]\n };\n return parser.callFunction(\"\\\\\\\\cdparent\", [arrowGroup], []);\n }\n\n case \"\\\\\\\\cdlongequal\":\n return parser.callFunction(\"\\\\\\\\cdlongequal\", [], []);\n\n case \"\\\\Vert\":\n {\n var arrow = {\n type: \"textord\",\n text: \"\\\\Vert\",\n mode: \"math\"\n };\n return parser.callFunction(\"\\\\Big\", [arrow], []);\n }\n\n default:\n return {\n type: \"textord\",\n text: \" \",\n mode: \"math\"\n };\n }\n}\n\nfunction parseCD(parser) {\n // Get the array's parse nodes with \\\\ temporarily mapped to \\cr.\n var parsedRows = [];\n parser.gullet.beginGroup();\n parser.gullet.macros.set(\"\\\\cr\", \"\\\\\\\\\\\\relax\");\n parser.gullet.beginGroup();\n\n while (true) {\n // eslint-disable-line no-constant-condition\n // Get the parse nodes for the next row.\n parsedRows.push(parser.parseExpression(false, \"\\\\\\\\\"));\n parser.gullet.endGroup();\n parser.gullet.beginGroup();\n var next = parser.fetch().text;\n\n if (next === \"&\" || next === \"\\\\\\\\\") {\n parser.consume();\n } else if (next === \"\\\\end\") {\n if (parsedRows[parsedRows.length - 1].length === 0) {\n parsedRows.pop(); // final row ended in \\\\\n }\n\n break;\n } else {\n throw new ParseError(\"Expected \\\\\\\\ or \\\\cr or \\\\end\", parser.nextToken);\n }\n }\n\n var row = [];\n var body = [row]; // Loop thru the parse nodes. Collect them into cells and arrows.\n\n for (var i = 0; i < parsedRows.length; i++) {\n // Start a new row.\n var rowNodes = parsedRows[i]; // Create the first cell.\n\n var cell = newCell();\n\n for (var j = 0; j < rowNodes.length; j++) {\n if (!isStartOfArrow(rowNodes[j])) {\n // If a parseNode is not an arrow, it goes into a cell.\n cell.body.push(rowNodes[j]);\n } else {\n // Parse node j is an \"@\", the start of an arrow.\n // Before starting on the arrow, push the cell into `row`.\n row.push(cell); // Now collect parseNodes into an arrow.\n // The character after \"@\" defines the arrow type.\n\n j += 1;\n var arrowChar = assertSymbolNodeType(rowNodes[j]).text; // Create two empty label nodes. We may or may not use them.\n\n var labels = new Array(2);\n labels[0] = {\n type: \"ordgroup\",\n mode: \"math\",\n body: []\n };\n labels[1] = {\n type: \"ordgroup\",\n mode: \"math\",\n body: []\n }; // Process the arrow.\n\n if (\"=|.\".indexOf(arrowChar) > -1) ; else if (\"<>AV\".indexOf(arrowChar) > -1) {\n // Four arrows, `@>>>`, `@<<<`, `@AAA`, and `@VVV`, each take\n // two optional labels. E.g. the right-point arrow syntax is\n // really: @>{optional label}>{optional label}>\n // Collect parseNodes into labels.\n for (var labelNum = 0; labelNum < 2; labelNum++) {\n var inLabel = true;\n\n for (var k = j + 1; k < rowNodes.length; k++) {\n if (isLabelEnd(rowNodes[k], arrowChar)) {\n inLabel = false;\n j = k;\n break;\n }\n\n if (isStartOfArrow(rowNodes[k])) {\n throw new ParseError(\"Missing a \" + arrowChar + \" character to complete a CD arrow.\", rowNodes[k]);\n }\n\n labels[labelNum].body.push(rowNodes[k]);\n }\n\n if (inLabel) {\n // isLabelEnd never returned a true.\n throw new ParseError(\"Missing a \" + arrowChar + \" character to complete a CD arrow.\", rowNodes[j]);\n }\n }\n } else {\n throw new ParseError(\"Expected one of \\\"<>AV=|.\\\" after @\", rowNodes[j]);\n } // Now join the arrow to its labels.\n\n\n var arrow = cdArrow(arrowChar, labels, parser); // Wrap the arrow in ParseNode<\"styling\">.\n // This is done to match parseArray() behavior.\n\n var wrappedArrow = {\n type: \"styling\",\n body: [arrow],\n mode: \"math\",\n style: \"display\" // CD is always displaystyle.\n\n };\n row.push(wrappedArrow); // In CD's syntax, cells are implicit. That is, everything that\n // is not an arrow gets collected into a cell. So create an empty\n // cell now. It will collect upcoming parseNodes.\n\n cell = newCell();\n }\n }\n\n if (i % 2 === 0) {\n // Even-numbered rows consist of: cell, arrow, cell, arrow, ... cell\n // The last cell is not yet pushed into `row`, so:\n row.push(cell);\n } else {\n // Odd-numbered rows consist of: vert arrow, empty cell, ... vert arrow\n // Remove the empty cell that was placed at the beginning of `row`.\n row.shift();\n }\n\n row = [];\n body.push(row);\n } // End row group\n\n\n parser.gullet.endGroup(); // End array group defining \\\\\n\n parser.gullet.endGroup(); // define column separation.\n\n var cols = new Array(body[0].length).fill({\n type: \"align\",\n align: \"c\",\n pregap: 0.25,\n // CD package sets \\enskip between columns.\n postgap: 0.25 // So pre and post each get half an \\enskip, i.e. 0.25em.\n\n });\n return {\n type: \"array\",\n mode: \"math\",\n body,\n arraystretch: 1,\n addJot: true,\n rowGaps: [null],\n cols,\n colSeparationType: \"CD\",\n hLinesBeforeRow: new Array(body.length + 1).fill([])\n };\n} // The functions below are not available for general use.\n// They are here only for internal use by the {CD} environment in placing labels\n// next to vertical arrows.\n// We don't need any such functions for horizontal arrows because we can reuse\n// the functionality that already exists for extensible arrows.\n\ndefineFunction({\n type: \"cdlabel\",\n names: [\"\\\\\\\\cdleft\", \"\\\\\\\\cdright\"],\n props: {\n numArgs: 1\n },\n\n handler(_ref, args) {\n var {\n parser,\n funcName\n } = _ref;\n return {\n type: \"cdlabel\",\n mode: parser.mode,\n side: funcName.slice(4),\n label: args[0]\n };\n },\n\n htmlBuilder(group, options) {\n var newOptions = options.havingStyle(options.style.sup());\n var label = buildCommon.wrapFragment(buildGroup$1(group.label, newOptions, options), options);\n label.classes.push(\"cd-label-\" + group.side);\n label.style.bottom = makeEm(0.8 - label.depth); // Zero out label height & depth, so vertical align of arrow is set\n // by the arrow height, not by the label.\n\n label.height = 0;\n label.depth = 0;\n return label;\n },\n\n mathmlBuilder(group, options) {\n var label = new mathMLTree.MathNode(\"mrow\", [buildGroup(group.label, options)]);\n label = new mathMLTree.MathNode(\"mpadded\", [label]);\n label.setAttribute(\"width\", \"0\");\n\n if (group.side === \"left\") {\n label.setAttribute(\"lspace\", \"-1width\");\n } // We have to guess at vertical alignment. We know the arrow is 1.8em tall,\n // But we don't know the height or depth of the label.\n\n\n label.setAttribute(\"voffset\", \"0.7em\");\n label = new mathMLTree.MathNode(\"mstyle\", [label]);\n label.setAttribute(\"displaystyle\", \"false\");\n label.setAttribute(\"scriptlevel\", \"1\");\n return label;\n }\n\n});\ndefineFunction({\n type: \"cdlabelparent\",\n names: [\"\\\\\\\\cdparent\"],\n props: {\n numArgs: 1\n },\n\n handler(_ref2, args) {\n var {\n parser\n } = _ref2;\n return {\n type: \"cdlabelparent\",\n mode: parser.mode,\n fragment: args[0]\n };\n },\n\n htmlBuilder(group, options) {\n // Wrap the vertical arrow and its labels.\n // The parent gets position: relative. The child gets position: absolute.\n // So CSS can locate the label correctly.\n var parent = buildCommon.wrapFragment(buildGroup$1(group.fragment, options), options);\n parent.classes.push(\"cd-vert-arrow\");\n return parent;\n },\n\n mathmlBuilder(group, options) {\n return new mathMLTree.MathNode(\"mrow\", [buildGroup(group.fragment, options)]);\n }\n\n});\n\n// {123} and converts into symbol with code 123. It is used by the *macro*\n// \\char defined in macros.js.\n\ndefineFunction({\n type: \"textord\",\n names: [\"\\\\@char\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n var arg = assertNodeType(args[0], \"ordgroup\");\n var group = arg.body;\n var number = \"\";\n\n for (var i = 0; i < group.length; i++) {\n var node = assertNodeType(group[i], \"textord\");\n number += node.text;\n }\n\n var code = parseInt(number);\n var text;\n\n if (isNaN(code)) {\n throw new ParseError(\"\\\\@char has non-numeric argument \" + number); // If we drop IE support, the following code could be replaced with\n // text = String.fromCodePoint(code)\n } else if (code < 0 || code >= 0x10ffff) {\n throw new ParseError(\"\\\\@char with invalid code point \" + number);\n } else if (code <= 0xffff) {\n text = String.fromCharCode(code);\n } else {\n // Astral code point; split into surrogate halves\n code -= 0x10000;\n text = String.fromCharCode((code >> 10) + 0xd800, (code & 0x3ff) + 0xdc00);\n }\n\n return {\n type: \"textord\",\n mode: parser.mode,\n text: text\n };\n }\n\n});\n\nvar htmlBuilder$8 = (group, options) => {\n var elements = buildExpression$1(group.body, options.withColor(group.color), false); // \\color isn't supposed to affect the type of the elements it contains.\n // To accomplish this, we wrap the results in a fragment, so the inner\n // elements will be able to directly interact with their neighbors. For\n // example, `\\color{red}{2 +} 3` has the same spacing as `2 + 3`\n\n return buildCommon.makeFragment(elements);\n};\n\nvar mathmlBuilder$7 = (group, options) => {\n var inner = buildExpression(group.body, options.withColor(group.color));\n var node = new mathMLTree.MathNode(\"mstyle\", inner);\n node.setAttribute(\"mathcolor\", group.color);\n return node;\n};\n\ndefineFunction({\n type: \"color\",\n names: [\"\\\\textcolor\"],\n props: {\n numArgs: 2,\n allowedInText: true,\n argTypes: [\"color\", \"original\"]\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n var color = assertNodeType(args[0], \"color-token\").color;\n var body = args[1];\n return {\n type: \"color\",\n mode: parser.mode,\n color,\n body: ordargument(body)\n };\n },\n\n htmlBuilder: htmlBuilder$8,\n mathmlBuilder: mathmlBuilder$7\n});\ndefineFunction({\n type: \"color\",\n names: [\"\\\\color\"],\n props: {\n numArgs: 1,\n allowedInText: true,\n argTypes: [\"color\"]\n },\n\n handler(_ref2, args) {\n var {\n parser,\n breakOnTokenText\n } = _ref2;\n var color = assertNodeType(args[0], \"color-token\").color; // Set macro \\current@color in current namespace to store the current\n // color, mimicking the behavior of color.sty.\n // This is currently used just to correctly color a \\right\n // that follows a \\color command.\n\n parser.gullet.macros.set(\"\\\\current@color\", color); // Parse out the implicit body that should be colored.\n\n var body = parser.parseExpression(true, breakOnTokenText);\n return {\n type: \"color\",\n mode: parser.mode,\n color,\n body\n };\n },\n\n htmlBuilder: htmlBuilder$8,\n mathmlBuilder: mathmlBuilder$7\n});\n\n// Row breaks within tabular environments, and line breaks at top level\n\ndefineFunction({\n type: \"cr\",\n names: [\"\\\\\\\\\"],\n props: {\n numArgs: 0,\n numOptionalArgs: 0,\n allowedInText: true\n },\n\n handler(_ref, args, optArgs) {\n var {\n parser\n } = _ref;\n var size = parser.gullet.future().text === \"[\" ? parser.parseSizeGroup(true) : null;\n var newLine = !parser.settings.displayMode || !parser.settings.useStrictBehavior(\"newLineInDisplayMode\", \"In LaTeX, \\\\\\\\ or \\\\newline \" + \"does nothing in display mode\");\n return {\n type: \"cr\",\n mode: parser.mode,\n newLine,\n size: size && assertNodeType(size, \"size\").value\n };\n },\n\n // The following builders are called only at the top level,\n // not within tabular/array environments.\n htmlBuilder(group, options) {\n var span = buildCommon.makeSpan([\"mspace\"], [], options);\n\n if (group.newLine) {\n span.classes.push(\"newline\");\n\n if (group.size) {\n span.style.marginTop = makeEm(calculateSize(group.size, options));\n }\n }\n\n return span;\n },\n\n mathmlBuilder(group, options) {\n var node = new mathMLTree.MathNode(\"mspace\");\n\n if (group.newLine) {\n node.setAttribute(\"linebreak\", \"newline\");\n\n if (group.size) {\n node.setAttribute(\"height\", makeEm(calculateSize(group.size, options)));\n }\n }\n\n return node;\n }\n\n});\n\nvar globalMap = {\n \"\\\\global\": \"\\\\global\",\n \"\\\\long\": \"\\\\\\\\globallong\",\n \"\\\\\\\\globallong\": \"\\\\\\\\globallong\",\n \"\\\\def\": \"\\\\gdef\",\n \"\\\\gdef\": \"\\\\gdef\",\n \"\\\\edef\": \"\\\\xdef\",\n \"\\\\xdef\": \"\\\\xdef\",\n \"\\\\let\": \"\\\\\\\\globallet\",\n \"\\\\futurelet\": \"\\\\\\\\globalfuture\"\n};\n\nvar checkControlSequence = tok => {\n var name = tok.text;\n\n if (/^(?:[\\\\{}$&#^_]|EOF)$/.test(name)) {\n throw new ParseError(\"Expected a control sequence\", tok);\n }\n\n return name;\n};\n\nvar getRHS = parser => {\n var tok = parser.gullet.popToken();\n\n if (tok.text === \"=\") {\n // consume optional equals\n tok = parser.gullet.popToken();\n\n if (tok.text === \" \") {\n // consume one optional space\n tok = parser.gullet.popToken();\n }\n }\n\n return tok;\n};\n\nvar letCommand = (parser, name, tok, global) => {\n var macro = parser.gullet.macros.get(tok.text);\n\n if (macro == null) {\n // don't expand it later even if a macro with the same name is defined\n // e.g., \\let\\foo=\\frac \\def\\frac{\\relax} \\frac12\n tok.noexpand = true;\n macro = {\n tokens: [tok],\n numArgs: 0,\n // reproduce the same behavior in expansion\n unexpandable: !parser.gullet.isExpandable(tok.text)\n };\n }\n\n parser.gullet.macros.set(name, macro, global);\n}; // -> |\n// -> |\\global\n// -> |\n// -> \\global|\\long|\\outer\n\n\ndefineFunction({\n type: \"internal\",\n names: [\"\\\\global\", \"\\\\long\", \"\\\\\\\\globallong\" // can\u2019t be entered directly\n ],\n props: {\n numArgs: 0,\n allowedInText: true\n },\n\n handler(_ref) {\n var {\n parser,\n funcName\n } = _ref;\n parser.consumeSpaces();\n var token = parser.fetch();\n\n if (globalMap[token.text]) {\n // KaTeX doesn't have \\par, so ignore \\long\n if (funcName === \"\\\\global\" || funcName === \"\\\\\\\\globallong\") {\n token.text = globalMap[token.text];\n }\n\n return assertNodeType(parser.parseFunction(), \"internal\");\n }\n\n throw new ParseError(\"Invalid token after macro prefix\", token);\n }\n\n}); // Basic support for macro definitions: \\def, \\gdef, \\edef, \\xdef\n// -> \n// -> \\def|\\gdef|\\edef|\\xdef\n// -> \n\ndefineFunction({\n type: \"internal\",\n names: [\"\\\\def\", \"\\\\gdef\", \"\\\\edef\", \"\\\\xdef\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n\n handler(_ref2) {\n var {\n parser,\n funcName\n } = _ref2;\n var tok = parser.gullet.popToken();\n var name = tok.text;\n\n if (/^(?:[\\\\{}$&#^_]|EOF)$/.test(name)) {\n throw new ParseError(\"Expected a control sequence\", tok);\n }\n\n var numArgs = 0;\n var insert;\n var delimiters = [[]]; // contains no braces\n\n while (parser.gullet.future().text !== \"{\") {\n tok = parser.gullet.popToken();\n\n if (tok.text === \"#\") {\n // If the very last character of the is #, so that\n // this # is immediately followed by {, TeX will behave as if the {\n // had been inserted at the right end of both the parameter text\n // and the replacement text.\n if (parser.gullet.future().text === \"{\") {\n insert = parser.gullet.future();\n delimiters[numArgs].push(\"{\");\n break;\n } // A parameter, the first appearance of # must be followed by 1,\n // the next by 2, and so on; up to nine #\u2019s are allowed\n\n\n tok = parser.gullet.popToken();\n\n if (!/^[1-9]$/.test(tok.text)) {\n throw new ParseError(\"Invalid argument number \\\"\" + tok.text + \"\\\"\");\n }\n\n if (parseInt(tok.text) !== numArgs + 1) {\n throw new ParseError(\"Argument number \\\"\" + tok.text + \"\\\" out of order\");\n }\n\n numArgs++;\n delimiters.push([]);\n } else if (tok.text === \"EOF\") {\n throw new ParseError(\"Expected a macro definition\");\n } else {\n delimiters[numArgs].push(tok.text);\n }\n } // replacement text, enclosed in '{' and '}' and properly nested\n\n\n var {\n tokens\n } = parser.gullet.consumeArg();\n\n if (insert) {\n tokens.unshift(insert);\n }\n\n if (funcName === \"\\\\edef\" || funcName === \"\\\\xdef\") {\n tokens = parser.gullet.expandTokens(tokens);\n tokens.reverse(); // to fit in with stack order\n } // Final arg is the expansion of the macro\n\n\n parser.gullet.macros.set(name, {\n tokens,\n numArgs,\n delimiters\n }, funcName === globalMap[funcName]);\n return {\n type: \"internal\",\n mode: parser.mode\n };\n }\n\n}); // -> \n// -> \\futurelet\n// | \\let\n// -> |=\n\ndefineFunction({\n type: \"internal\",\n names: [\"\\\\let\", \"\\\\\\\\globallet\" // can\u2019t be entered directly\n ],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n\n handler(_ref3) {\n var {\n parser,\n funcName\n } = _ref3;\n var name = checkControlSequence(parser.gullet.popToken());\n parser.gullet.consumeSpaces();\n var tok = getRHS(parser);\n letCommand(parser, name, tok, funcName === \"\\\\\\\\globallet\");\n return {\n type: \"internal\",\n mode: parser.mode\n };\n }\n\n}); // ref: https://www.tug.org/TUGboat/tb09-3/tb22bechtolsheim.pdf\n\ndefineFunction({\n type: \"internal\",\n names: [\"\\\\futurelet\", \"\\\\\\\\globalfuture\" // can\u2019t be entered directly\n ],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n\n handler(_ref4) {\n var {\n parser,\n funcName\n } = _ref4;\n var name = checkControlSequence(parser.gullet.popToken());\n var middle = parser.gullet.popToken();\n var tok = parser.gullet.popToken();\n letCommand(parser, name, tok, funcName === \"\\\\\\\\globalfuture\");\n parser.gullet.pushToken(tok);\n parser.gullet.pushToken(middle);\n return {\n type: \"internal\",\n mode: parser.mode\n };\n }\n\n});\n\n/**\n * This file deals with creating delimiters of various sizes. The TeXbook\n * discusses these routines on page 441-442, in the \"Another subroutine sets box\n * x to a specified variable delimiter\" paragraph.\n *\n * There are three main routines here. `makeSmallDelim` makes a delimiter in the\n * normal font, but in either text, script, or scriptscript style.\n * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1,\n * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of\n * smaller pieces that are stacked on top of one another.\n *\n * The functions take a parameter `center`, which determines if the delimiter\n * should be centered around the axis.\n *\n * Then, there are three exposed functions. `sizedDelim` makes a delimiter in\n * one of the given sizes. This is used for things like `\\bigl`.\n * `customSizedDelim` makes a delimiter with a given total height+depth. It is\n * called in places like `\\sqrt`. `leftRightDelim` makes an appropriate\n * delimiter which surrounds an expression of a given height an depth. It is\n * used in `\\left` and `\\right`.\n */\n\n/**\n * Get the metrics for a given symbol and font, after transformation (i.e.\n * after following replacement from symbols.js)\n */\nvar getMetrics = function getMetrics(symbol, font, mode) {\n var replace = symbols.math[symbol] && symbols.math[symbol].replace;\n var metrics = getCharacterMetrics(replace || symbol, font, mode);\n\n if (!metrics) {\n throw new Error(\"Unsupported symbol \" + symbol + \" and font size \" + font + \".\");\n }\n\n return metrics;\n};\n/**\n * Puts a delimiter span in a given style, and adds appropriate height, depth,\n * and maxFontSizes.\n */\n\n\nvar styleWrap = function styleWrap(delim, toStyle, options, classes) {\n var newOptions = options.havingBaseStyle(toStyle);\n var span = buildCommon.makeSpan(classes.concat(newOptions.sizingClasses(options)), [delim], options);\n var delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier;\n span.height *= delimSizeMultiplier;\n span.depth *= delimSizeMultiplier;\n span.maxFontSize = newOptions.sizeMultiplier;\n return span;\n};\n\nvar centerSpan = function centerSpan(span, options, style) {\n var newOptions = options.havingBaseStyle(style);\n var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight;\n span.classes.push(\"delimcenter\");\n span.style.top = makeEm(shift);\n span.height -= shift;\n span.depth += shift;\n};\n/**\n * Makes a small delimiter. This is a delimiter that comes in the Main-Regular\n * font, but is restyled to either be in textstyle, scriptstyle, or\n * scriptscriptstyle.\n */\n\n\nvar makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) {\n var text = buildCommon.makeSymbol(delim, \"Main-Regular\", mode, options);\n var span = styleWrap(text, style, options, classes);\n\n if (center) {\n centerSpan(span, options, style);\n }\n\n return span;\n};\n/**\n * Builds a symbol in the given font size (note size is an integer)\n */\n\n\nvar mathrmSize = function mathrmSize(value, size, mode, options) {\n return buildCommon.makeSymbol(value, \"Size\" + size + \"-Regular\", mode, options);\n};\n/**\n * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2,\n * Size3, or Size4 fonts. It is always rendered in textstyle.\n */\n\n\nvar makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) {\n var inner = mathrmSize(delim, size, mode, options);\n var span = styleWrap(buildCommon.makeSpan([\"delimsizing\", \"size\" + size], [inner], options), Style$1.TEXT, options, classes);\n\n if (center) {\n centerSpan(span, options, Style$1.TEXT);\n }\n\n return span;\n};\n/**\n * Make a span from a font glyph with the given offset and in the given font.\n * This is used in makeStackedDelim to make the stacking pieces for the delimiter.\n */\n\n\nvar makeGlyphSpan = function makeGlyphSpan(symbol, font, mode) {\n var sizeClass; // Apply the correct CSS class to choose the right font.\n\n if (font === \"Size1-Regular\") {\n sizeClass = \"delim-size1\";\n } else\n /* if (font === \"Size4-Regular\") */\n {\n sizeClass = \"delim-size4\";\n }\n\n var corner = buildCommon.makeSpan([\"delimsizinginner\", sizeClass], [buildCommon.makeSpan([], [buildCommon.makeSymbol(symbol, font, mode)])]); // Since this will be passed into `makeVList` in the end, wrap the element\n // in the appropriate tag that VList uses.\n\n return {\n type: \"elem\",\n elem: corner\n };\n};\n\nvar makeInner = function makeInner(ch, height, options) {\n // Create a span with inline SVG for the inner part of a tall stacked delimiter.\n var width = fontMetricsData['Size4-Regular'][ch.charCodeAt(0)] ? fontMetricsData['Size4-Regular'][ch.charCodeAt(0)][4] : fontMetricsData['Size1-Regular'][ch.charCodeAt(0)][4];\n var path = new PathNode(\"inner\", innerPath(ch, Math.round(1000 * height)));\n var svgNode = new SvgNode([path], {\n \"width\": makeEm(width),\n \"height\": makeEm(height),\n // Override CSS rule `.katex svg { width: 100% }`\n \"style\": \"width:\" + makeEm(width),\n \"viewBox\": \"0 0 \" + 1000 * width + \" \" + Math.round(1000 * height),\n \"preserveAspectRatio\": \"xMinYMin\"\n });\n var span = buildCommon.makeSvgSpan([], [svgNode], options);\n span.height = height;\n span.style.height = makeEm(height);\n span.style.width = makeEm(width);\n return {\n type: \"elem\",\n elem: span\n };\n}; // Helpers for makeStackedDelim\n\n\nvar lapInEms = 0.008;\nvar lap = {\n type: \"kern\",\n size: -1 * lapInEms\n};\nvar verts = [\"|\", \"\\\\lvert\", \"\\\\rvert\", \"\\\\vert\"];\nvar doubleVerts = [\"\\\\|\", \"\\\\lVert\", \"\\\\rVert\", \"\\\\Vert\"];\n/**\n * Make a stacked delimiter out of a given delimiter, with the total height at\n * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook.\n */\n\nvar makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) {\n // There are four parts, the top, an optional middle, a repeated part, and a\n // bottom.\n var top;\n var middle;\n var repeat;\n var bottom;\n var svgLabel = \"\";\n var viewBoxWidth = 0;\n top = repeat = bottom = delim;\n middle = null; // Also keep track of what font the delimiters are in\n\n var font = \"Size1-Regular\"; // We set the parts and font based on the symbol. Note that we use\n // '\\u23d0' instead of '|' and '\\u2016' instead of '\\\\|' for the\n // repeats of the arrows\n\n if (delim === \"\\\\uparrow\") {\n repeat = bottom = \"\\u23d0\";\n } else if (delim === \"\\\\Uparrow\") {\n repeat = bottom = \"\\u2016\";\n } else if (delim === \"\\\\downarrow\") {\n top = repeat = \"\\u23d0\";\n } else if (delim === \"\\\\Downarrow\") {\n top = repeat = \"\\u2016\";\n } else if (delim === \"\\\\updownarrow\") {\n top = \"\\\\uparrow\";\n repeat = \"\\u23d0\";\n bottom = \"\\\\downarrow\";\n } else if (delim === \"\\\\Updownarrow\") {\n top = \"\\\\Uparrow\";\n repeat = \"\\u2016\";\n bottom = \"\\\\Downarrow\";\n } else if (utils.contains(verts, delim)) {\n repeat = \"\\u2223\";\n svgLabel = \"vert\";\n viewBoxWidth = 333;\n } else if (utils.contains(doubleVerts, delim)) {\n repeat = \"\\u2225\";\n svgLabel = \"doublevert\";\n viewBoxWidth = 556;\n } else if (delim === \"[\" || delim === \"\\\\lbrack\") {\n top = \"\\u23a1\";\n repeat = \"\\u23a2\";\n bottom = \"\\u23a3\";\n font = \"Size4-Regular\";\n svgLabel = \"lbrack\";\n viewBoxWidth = 667;\n } else if (delim === \"]\" || delim === \"\\\\rbrack\") {\n top = \"\\u23a4\";\n repeat = \"\\u23a5\";\n bottom = \"\\u23a6\";\n font = \"Size4-Regular\";\n svgLabel = \"rbrack\";\n viewBoxWidth = 667;\n } else if (delim === \"\\\\lfloor\" || delim === \"\\u230a\") {\n repeat = top = \"\\u23a2\";\n bottom = \"\\u23a3\";\n font = \"Size4-Regular\";\n svgLabel = \"lfloor\";\n viewBoxWidth = 667;\n } else if (delim === \"\\\\lceil\" || delim === \"\\u2308\") {\n top = \"\\u23a1\";\n repeat = bottom = \"\\u23a2\";\n font = \"Size4-Regular\";\n svgLabel = \"lceil\";\n viewBoxWidth = 667;\n } else if (delim === \"\\\\rfloor\" || delim === \"\\u230b\") {\n repeat = top = \"\\u23a5\";\n bottom = \"\\u23a6\";\n font = \"Size4-Regular\";\n svgLabel = \"rfloor\";\n viewBoxWidth = 667;\n } else if (delim === \"\\\\rceil\" || delim === \"\\u2309\") {\n top = \"\\u23a4\";\n repeat = bottom = \"\\u23a5\";\n font = \"Size4-Regular\";\n svgLabel = \"rceil\";\n viewBoxWidth = 667;\n } else if (delim === \"(\" || delim === \"\\\\lparen\") {\n top = \"\\u239b\";\n repeat = \"\\u239c\";\n bottom = \"\\u239d\";\n font = \"Size4-Regular\";\n svgLabel = \"lparen\";\n viewBoxWidth = 875;\n } else if (delim === \")\" || delim === \"\\\\rparen\") {\n top = \"\\u239e\";\n repeat = \"\\u239f\";\n bottom = \"\\u23a0\";\n font = \"Size4-Regular\";\n svgLabel = \"rparen\";\n viewBoxWidth = 875;\n } else if (delim === \"\\\\{\" || delim === \"\\\\lbrace\") {\n top = \"\\u23a7\";\n middle = \"\\u23a8\";\n bottom = \"\\u23a9\";\n repeat = \"\\u23aa\";\n font = \"Size4-Regular\";\n } else if (delim === \"\\\\}\" || delim === \"\\\\rbrace\") {\n top = \"\\u23ab\";\n middle = \"\\u23ac\";\n bottom = \"\\u23ad\";\n repeat = \"\\u23aa\";\n font = \"Size4-Regular\";\n } else if (delim === \"\\\\lgroup\" || delim === \"\\u27ee\") {\n top = \"\\u23a7\";\n bottom = \"\\u23a9\";\n repeat = \"\\u23aa\";\n font = \"Size4-Regular\";\n } else if (delim === \"\\\\rgroup\" || delim === \"\\u27ef\") {\n top = \"\\u23ab\";\n bottom = \"\\u23ad\";\n repeat = \"\\u23aa\";\n font = \"Size4-Regular\";\n } else if (delim === \"\\\\lmoustache\" || delim === \"\\u23b0\") {\n top = \"\\u23a7\";\n bottom = \"\\u23ad\";\n repeat = \"\\u23aa\";\n font = \"Size4-Regular\";\n } else if (delim === \"\\\\rmoustache\" || delim === \"\\u23b1\") {\n top = \"\\u23ab\";\n bottom = \"\\u23a9\";\n repeat = \"\\u23aa\";\n font = \"Size4-Regular\";\n } // Get the metrics of the four sections\n\n\n var topMetrics = getMetrics(top, font, mode);\n var topHeightTotal = topMetrics.height + topMetrics.depth;\n var repeatMetrics = getMetrics(repeat, font, mode);\n var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth;\n var bottomMetrics = getMetrics(bottom, font, mode);\n var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth;\n var middleHeightTotal = 0;\n var middleFactor = 1;\n\n if (middle !== null) {\n var middleMetrics = getMetrics(middle, font, mode);\n middleHeightTotal = middleMetrics.height + middleMetrics.depth;\n middleFactor = 2; // repeat symmetrically above and below middle\n } // Calculate the minimal height that the delimiter can have.\n // It is at least the size of the top, bottom, and optional middle combined.\n\n\n var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; // Compute the number of copies of the repeat symbol we will need\n\n var repeatCount = Math.max(0, Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal))); // Compute the total height of the delimiter including all the symbols\n\n var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; // The center of the delimiter is placed at the center of the axis. Note\n // that in this context, \"center\" means that the delimiter should be\n // centered around the axis in the current style, while normally it is\n // centered around the axis in textstyle.\n\n var axisHeight = options.fontMetrics().axisHeight;\n\n if (center) {\n axisHeight *= options.sizeMultiplier;\n } // Calculate the depth\n\n\n var depth = realHeightTotal / 2 - axisHeight; // Now, we start building the pieces that will go into the vlist\n // Keep a list of the pieces of the stacked delimiter\n\n var stack = [];\n\n if (svgLabel.length > 0) {\n // Instead of stacking glyphs, create a single SVG.\n // This evades browser problems with imprecise positioning of spans.\n var midHeight = realHeightTotal - topHeightTotal - bottomHeightTotal;\n var viewBoxHeight = Math.round(realHeightTotal * 1000);\n var pathStr = tallDelim(svgLabel, Math.round(midHeight * 1000));\n var path = new PathNode(svgLabel, pathStr);\n var width = (viewBoxWidth / 1000).toFixed(3) + \"em\";\n var height = (viewBoxHeight / 1000).toFixed(3) + \"em\";\n var svg = new SvgNode([path], {\n \"width\": width,\n \"height\": height,\n \"viewBox\": \"0 0 \" + viewBoxWidth + \" \" + viewBoxHeight\n });\n var wrapper = buildCommon.makeSvgSpan([], [svg], options);\n wrapper.height = viewBoxHeight / 1000;\n wrapper.style.width = width;\n wrapper.style.height = height;\n stack.push({\n type: \"elem\",\n elem: wrapper\n });\n } else {\n // Stack glyphs\n // Start by adding the bottom symbol\n stack.push(makeGlyphSpan(bottom, font, mode));\n stack.push(lap); // overlap\n\n if (middle === null) {\n // The middle section will be an SVG. Make it an extra 0.016em tall.\n // We'll overlap by 0.008em at top and bottom.\n var innerHeight = realHeightTotal - topHeightTotal - bottomHeightTotal + 2 * lapInEms;\n stack.push(makeInner(repeat, innerHeight, options));\n } else {\n // When there is a middle bit, we need the middle part and two repeated\n // sections\n var _innerHeight = (realHeightTotal - topHeightTotal - bottomHeightTotal - middleHeightTotal) / 2 + 2 * lapInEms;\n\n stack.push(makeInner(repeat, _innerHeight, options)); // Now insert the middle of the brace.\n\n stack.push(lap);\n stack.push(makeGlyphSpan(middle, font, mode));\n stack.push(lap);\n stack.push(makeInner(repeat, _innerHeight, options));\n } // Add the top symbol\n\n\n stack.push(lap);\n stack.push(makeGlyphSpan(top, font, mode));\n } // Finally, build the vlist\n\n\n var newOptions = options.havingBaseStyle(Style$1.TEXT);\n var inner = buildCommon.makeVList({\n positionType: \"bottom\",\n positionData: depth,\n children: stack\n }, newOptions);\n return styleWrap(buildCommon.makeSpan([\"delimsizing\", \"mult\"], [inner], newOptions), Style$1.TEXT, options, classes);\n}; // All surds have 0.08em padding above the vinculum inside the SVG.\n// That keeps browser span height rounding error from pinching the line.\n\n\nvar vbPad = 80; // padding above the surd, measured inside the viewBox.\n\nvar emPad = 0.08; // padding, in ems, measured in the document.\n\nvar sqrtSvg = function sqrtSvg(sqrtName, height, viewBoxHeight, extraVinculum, options) {\n var path = sqrtPath(sqrtName, extraVinculum, viewBoxHeight);\n var pathNode = new PathNode(sqrtName, path);\n var svg = new SvgNode([pathNode], {\n // Note: 1000:1 ratio of viewBox to document em width.\n \"width\": \"400em\",\n \"height\": makeEm(height),\n \"viewBox\": \"0 0 400000 \" + viewBoxHeight,\n \"preserveAspectRatio\": \"xMinYMin slice\"\n });\n return buildCommon.makeSvgSpan([\"hide-tail\"], [svg], options);\n};\n/**\n * Make a sqrt image of the given height,\n */\n\n\nvar makeSqrtImage = function makeSqrtImage(height, options) {\n // Define a newOptions that removes the effect of size changes such as \\Huge.\n // We don't pick different a height surd for \\Huge. For it, we scale up.\n var newOptions = options.havingBaseSizing(); // Pick the desired surd glyph from a sequence of surds.\n\n var delim = traverseSequence(\"\\\\surd\", height * newOptions.sizeMultiplier, stackLargeDelimiterSequence, newOptions);\n var sizeMultiplier = newOptions.sizeMultiplier; // default\n // The standard sqrt SVGs each have a 0.04em thick vinculum.\n // If Settings.minRuleThickness is larger than that, we add extraVinculum.\n\n var extraVinculum = Math.max(0, options.minRuleThickness - options.fontMetrics().sqrtRuleThickness); // Create a span containing an SVG image of a sqrt symbol.\n\n var span;\n var spanHeight = 0;\n var texHeight = 0;\n var viewBoxHeight = 0;\n var advanceWidth; // We create viewBoxes with 80 units of \"padding\" above each surd.\n // Then browser rounding error on the parent span height will not\n // encroach on the ink of the vinculum. But that padding is not\n // included in the TeX-like `height` used for calculation of\n // vertical alignment. So texHeight = span.height < span.style.height.\n\n if (delim.type === \"small\") {\n // Get an SVG that is derived from glyph U+221A in font KaTeX-Main.\n // 1000 unit normal glyph height.\n viewBoxHeight = 1000 + 1000 * extraVinculum + vbPad;\n\n if (height < 1.0) {\n sizeMultiplier = 1.0; // mimic a \\textfont radical\n } else if (height < 1.4) {\n sizeMultiplier = 0.7; // mimic a \\scriptfont radical\n }\n\n spanHeight = (1.0 + extraVinculum + emPad) / sizeMultiplier;\n texHeight = (1.00 + extraVinculum) / sizeMultiplier;\n span = sqrtSvg(\"sqrtMain\", spanHeight, viewBoxHeight, extraVinculum, options);\n span.style.minWidth = \"0.853em\";\n advanceWidth = 0.833 / sizeMultiplier; // from the font.\n } else if (delim.type === \"large\") {\n // These SVGs come from fonts: KaTeX_Size1, _Size2, etc.\n viewBoxHeight = (1000 + vbPad) * sizeToMaxHeight[delim.size];\n texHeight = (sizeToMaxHeight[delim.size] + extraVinculum) / sizeMultiplier;\n spanHeight = (sizeToMaxHeight[delim.size] + extraVinculum + emPad) / sizeMultiplier;\n span = sqrtSvg(\"sqrtSize\" + delim.size, spanHeight, viewBoxHeight, extraVinculum, options);\n span.style.minWidth = \"1.02em\";\n advanceWidth = 1.0 / sizeMultiplier; // 1.0 from the font.\n } else {\n // Tall sqrt. In TeX, this would be stacked using multiple glyphs.\n // We'll use a single SVG to accomplish the same thing.\n spanHeight = height + extraVinculum + emPad;\n texHeight = height + extraVinculum;\n viewBoxHeight = Math.floor(1000 * height + extraVinculum) + vbPad;\n span = sqrtSvg(\"sqrtTall\", spanHeight, viewBoxHeight, extraVinculum, options);\n span.style.minWidth = \"0.742em\";\n advanceWidth = 1.056;\n }\n\n span.height = texHeight;\n span.style.height = makeEm(spanHeight);\n return {\n span,\n advanceWidth,\n // Calculate the actual line width.\n // This actually should depend on the chosen font -- e.g. \\boldmath\n // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and\n // have thicker rules.\n ruleWidth: (options.fontMetrics().sqrtRuleThickness + extraVinculum) * sizeMultiplier\n };\n}; // There are three kinds of delimiters, delimiters that stack when they become\n// too large\n\n\nvar stackLargeDelimiters = [\"(\", \"\\\\lparen\", \")\", \"\\\\rparen\", \"[\", \"\\\\lbrack\", \"]\", \"\\\\rbrack\", \"\\\\{\", \"\\\\lbrace\", \"\\\\}\", \"\\\\rbrace\", \"\\\\lfloor\", \"\\\\rfloor\", \"\\u230a\", \"\\u230b\", \"\\\\lceil\", \"\\\\rceil\", \"\\u2308\", \"\\u2309\", \"\\\\surd\"]; // delimiters that always stack\n\nvar stackAlwaysDelimiters = [\"\\\\uparrow\", \"\\\\downarrow\", \"\\\\updownarrow\", \"\\\\Uparrow\", \"\\\\Downarrow\", \"\\\\Updownarrow\", \"|\", \"\\\\|\", \"\\\\vert\", \"\\\\Vert\", \"\\\\lvert\", \"\\\\rvert\", \"\\\\lVert\", \"\\\\rVert\", \"\\\\lgroup\", \"\\\\rgroup\", \"\\u27ee\", \"\\u27ef\", \"\\\\lmoustache\", \"\\\\rmoustache\", \"\\u23b0\", \"\\u23b1\"]; // and delimiters that never stack\n\nvar stackNeverDelimiters = [\"<\", \">\", \"\\\\langle\", \"\\\\rangle\", \"/\", \"\\\\backslash\", \"\\\\lt\", \"\\\\gt\"]; // Metrics of the different sizes. Found by looking at TeX's output of\n// $\\bigl| // \\Bigl| \\biggl| \\Biggl| \\showlists$\n// Used to create stacked delimiters of appropriate sizes in makeSizedDelim.\n\nvar sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0];\n/**\n * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4.\n */\n\nvar makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) {\n // < and > turn into \\langle and \\rangle in delimiters\n if (delim === \"<\" || delim === \"\\\\lt\" || delim === \"\\u27e8\") {\n delim = \"\\\\langle\";\n } else if (delim === \">\" || delim === \"\\\\gt\" || delim === \"\\u27e9\") {\n delim = \"\\\\rangle\";\n } // Sized delimiters are never centered.\n\n\n if (utils.contains(stackLargeDelimiters, delim) || utils.contains(stackNeverDelimiters, delim)) {\n return makeLargeDelim(delim, size, false, options, mode, classes);\n } else if (utils.contains(stackAlwaysDelimiters, delim)) {\n return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes);\n } else {\n throw new ParseError(\"Illegal delimiter: '\" + delim + \"'\");\n }\n};\n/**\n * There are three different sequences of delimiter sizes that the delimiters\n * follow depending on the kind of delimiter. This is used when creating custom\n * sized delimiters to decide whether to create a small, large, or stacked\n * delimiter.\n *\n * In real TeX, these sequences aren't explicitly defined, but are instead\n * defined inside the font metrics. Since there are only three sequences that\n * are possible for the delimiters that TeX defines, it is easier to just encode\n * them explicitly here.\n */\n\n\n// Delimiters that never stack try small delimiters and large delimiters only\nvar stackNeverDelimiterSequence = [{\n type: \"small\",\n style: Style$1.SCRIPTSCRIPT\n}, {\n type: \"small\",\n style: Style$1.SCRIPT\n}, {\n type: \"small\",\n style: Style$1.TEXT\n}, {\n type: \"large\",\n size: 1\n}, {\n type: \"large\",\n size: 2\n}, {\n type: \"large\",\n size: 3\n}, {\n type: \"large\",\n size: 4\n}]; // Delimiters that always stack try the small delimiters first, then stack\n\nvar stackAlwaysDelimiterSequence = [{\n type: \"small\",\n style: Style$1.SCRIPTSCRIPT\n}, {\n type: \"small\",\n style: Style$1.SCRIPT\n}, {\n type: \"small\",\n style: Style$1.TEXT\n}, {\n type: \"stack\"\n}]; // Delimiters that stack when large try the small and then large delimiters, and\n// stack afterwards\n\nvar stackLargeDelimiterSequence = [{\n type: \"small\",\n style: Style$1.SCRIPTSCRIPT\n}, {\n type: \"small\",\n style: Style$1.SCRIPT\n}, {\n type: \"small\",\n style: Style$1.TEXT\n}, {\n type: \"large\",\n size: 1\n}, {\n type: \"large\",\n size: 2\n}, {\n type: \"large\",\n size: 3\n}, {\n type: \"large\",\n size: 4\n}, {\n type: \"stack\"\n}];\n/**\n * Get the font used in a delimiter based on what kind of delimiter it is.\n * TODO(#963) Use more specific font family return type once that is introduced.\n */\n\nvar delimTypeToFont = function delimTypeToFont(type) {\n if (type.type === \"small\") {\n return \"Main-Regular\";\n } else if (type.type === \"large\") {\n return \"Size\" + type.size + \"-Regular\";\n } else if (type.type === \"stack\") {\n return \"Size4-Regular\";\n } else {\n throw new Error(\"Add support for delim type '\" + type.type + \"' here.\");\n }\n};\n/**\n * Traverse a sequence of types of delimiters to decide what kind of delimiter\n * should be used to create a delimiter of the given height+depth.\n */\n\n\nvar traverseSequence = function traverseSequence(delim, height, sequence, options) {\n // Here, we choose the index we should start at in the sequences. In smaller\n // sizes (which correspond to larger numbers in style.size) we start earlier\n // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts\n // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2\n var start = Math.min(2, 3 - options.style.size);\n\n for (var i = start; i < sequence.length; i++) {\n if (sequence[i].type === \"stack\") {\n // This is always the last delimiter, so we just break the loop now.\n break;\n }\n\n var metrics = getMetrics(delim, delimTypeToFont(sequence[i]), \"math\");\n var heightDepth = metrics.height + metrics.depth; // Small delimiters are scaled down versions of the same font, so we\n // account for the style change size.\n\n if (sequence[i].type === \"small\") {\n var newOptions = options.havingBaseStyle(sequence[i].style);\n heightDepth *= newOptions.sizeMultiplier;\n } // Check if the delimiter at this size works for the given height.\n\n\n if (heightDepth > height) {\n return sequence[i];\n }\n } // If we reached the end of the sequence, return the last sequence element.\n\n\n return sequence[sequence.length - 1];\n};\n/**\n * Make a delimiter of a given height+depth, with optional centering. Here, we\n * traverse the sequences, and create a delimiter that the sequence tells us to.\n */\n\n\nvar makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) {\n if (delim === \"<\" || delim === \"\\\\lt\" || delim === \"\\u27e8\") {\n delim = \"\\\\langle\";\n } else if (delim === \">\" || delim === \"\\\\gt\" || delim === \"\\u27e9\") {\n delim = \"\\\\rangle\";\n } // Decide what sequence to use\n\n\n var sequence;\n\n if (utils.contains(stackNeverDelimiters, delim)) {\n sequence = stackNeverDelimiterSequence;\n } else if (utils.contains(stackLargeDelimiters, delim)) {\n sequence = stackLargeDelimiterSequence;\n } else {\n sequence = stackAlwaysDelimiterSequence;\n } // Look through the sequence\n\n\n var delimType = traverseSequence(delim, height, sequence, options); // Get the delimiter from font glyphs.\n // Depending on the sequence element we decided on, call the\n // appropriate function.\n\n if (delimType.type === \"small\") {\n return makeSmallDelim(delim, delimType.style, center, options, mode, classes);\n } else if (delimType.type === \"large\") {\n return makeLargeDelim(delim, delimType.size, center, options, mode, classes);\n } else\n /* if (delimType.type === \"stack\") */\n {\n return makeStackedDelim(delim, height, center, options, mode, classes);\n }\n};\n/**\n * Make a delimiter for use with `\\left` and `\\right`, given a height and depth\n * of an expression that the delimiters surround.\n */\n\n\nvar makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) {\n // We always center \\left/\\right delimiters, so the axis is always shifted\n var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; // Taken from TeX source, tex.web, function make_left_right\n\n var delimiterFactor = 901;\n var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm;\n var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight);\n var totalHeight = Math.max( // In real TeX, calculations are done using integral values which are\n // 65536 per pt, or 655360 per em. So, the division here truncates in\n // TeX but doesn't here, producing different results. If we wanted to\n // exactly match TeX's calculation, we could do\n // Math.floor(655360 * maxDistFromAxis / 500) *\n // delimiterFactor / 655360\n // (To see the difference, compare\n // x^{x^{\\left(\\rule{0.1em}{0.68em}\\right)}}\n // in TeX and KaTeX)\n maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); // Finally, we defer to `makeCustomSizedDelim` with our calculated total\n // height\n\n return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes);\n};\n\nvar delimiter = {\n sqrtImage: makeSqrtImage,\n sizedDelim: makeSizedDelim,\n sizeToMaxHeight: sizeToMaxHeight,\n customSizedDelim: makeCustomSizedDelim,\n leftRightDelim: makeLeftRightDelim\n};\n\n// Extra data needed for the delimiter handler down below\nvar delimiterSizes = {\n \"\\\\bigl\": {\n mclass: \"mopen\",\n size: 1\n },\n \"\\\\Bigl\": {\n mclass: \"mopen\",\n size: 2\n },\n \"\\\\biggl\": {\n mclass: \"mopen\",\n size: 3\n },\n \"\\\\Biggl\": {\n mclass: \"mopen\",\n size: 4\n },\n \"\\\\bigr\": {\n mclass: \"mclose\",\n size: 1\n },\n \"\\\\Bigr\": {\n mclass: \"mclose\",\n size: 2\n },\n \"\\\\biggr\": {\n mclass: \"mclose\",\n size: 3\n },\n \"\\\\Biggr\": {\n mclass: \"mclose\",\n size: 4\n },\n \"\\\\bigm\": {\n mclass: \"mrel\",\n size: 1\n },\n \"\\\\Bigm\": {\n mclass: \"mrel\",\n size: 2\n },\n \"\\\\biggm\": {\n mclass: \"mrel\",\n size: 3\n },\n \"\\\\Biggm\": {\n mclass: \"mrel\",\n size: 4\n },\n \"\\\\big\": {\n mclass: \"mord\",\n size: 1\n },\n \"\\\\Big\": {\n mclass: \"mord\",\n size: 2\n },\n \"\\\\bigg\": {\n mclass: \"mord\",\n size: 3\n },\n \"\\\\Bigg\": {\n mclass: \"mord\",\n size: 4\n }\n};\nvar delimiters = [\"(\", \"\\\\lparen\", \")\", \"\\\\rparen\", \"[\", \"\\\\lbrack\", \"]\", \"\\\\rbrack\", \"\\\\{\", \"\\\\lbrace\", \"\\\\}\", \"\\\\rbrace\", \"\\\\lfloor\", \"\\\\rfloor\", \"\\u230a\", \"\\u230b\", \"\\\\lceil\", \"\\\\rceil\", \"\\u2308\", \"\\u2309\", \"<\", \">\", \"\\\\langle\", \"\\u27e8\", \"\\\\rangle\", \"\\u27e9\", \"\\\\lt\", \"\\\\gt\", \"\\\\lvert\", \"\\\\rvert\", \"\\\\lVert\", \"\\\\rVert\", \"\\\\lgroup\", \"\\\\rgroup\", \"\\u27ee\", \"\\u27ef\", \"\\\\lmoustache\", \"\\\\rmoustache\", \"\\u23b0\", \"\\u23b1\", \"/\", \"\\\\backslash\", \"|\", \"\\\\vert\", \"\\\\|\", \"\\\\Vert\", \"\\\\uparrow\", \"\\\\Uparrow\", \"\\\\downarrow\", \"\\\\Downarrow\", \"\\\\updownarrow\", \"\\\\Updownarrow\", \".\"];\n\n// Delimiter functions\nfunction checkDelimiter(delim, context) {\n var symDelim = checkSymbolNodeType(delim);\n\n if (symDelim && utils.contains(delimiters, symDelim.text)) {\n return symDelim;\n } else if (symDelim) {\n throw new ParseError(\"Invalid delimiter '\" + symDelim.text + \"' after '\" + context.funcName + \"'\", delim);\n } else {\n throw new ParseError(\"Invalid delimiter type '\" + delim.type + \"'\", delim);\n }\n}\n\ndefineFunction({\n type: \"delimsizing\",\n names: [\"\\\\bigl\", \"\\\\Bigl\", \"\\\\biggl\", \"\\\\Biggl\", \"\\\\bigr\", \"\\\\Bigr\", \"\\\\biggr\", \"\\\\Biggr\", \"\\\\bigm\", \"\\\\Bigm\", \"\\\\biggm\", \"\\\\Biggm\", \"\\\\big\", \"\\\\Big\", \"\\\\bigg\", \"\\\\Bigg\"],\n props: {\n numArgs: 1,\n argTypes: [\"primitive\"]\n },\n handler: (context, args) => {\n var delim = checkDelimiter(args[0], context);\n return {\n type: \"delimsizing\",\n mode: context.parser.mode,\n size: delimiterSizes[context.funcName].size,\n mclass: delimiterSizes[context.funcName].mclass,\n delim: delim.text\n };\n },\n htmlBuilder: (group, options) => {\n if (group.delim === \".\") {\n // Empty delimiters still count as elements, even though they don't\n // show anything.\n return buildCommon.makeSpan([group.mclass]);\n } // Use delimiter.sizedDelim to generate the delimiter.\n\n\n return delimiter.sizedDelim(group.delim, group.size, options, group.mode, [group.mclass]);\n },\n mathmlBuilder: group => {\n var children = [];\n\n if (group.delim !== \".\") {\n children.push(makeText(group.delim, group.mode));\n }\n\n var node = new mathMLTree.MathNode(\"mo\", children);\n\n if (group.mclass === \"mopen\" || group.mclass === \"mclose\") {\n // Only some of the delimsizing functions act as fences, and they\n // return \"mopen\" or \"mclose\" mclass.\n node.setAttribute(\"fence\", \"true\");\n } else {\n // Explicitly disable fencing if it's not a fence, to override the\n // defaults.\n node.setAttribute(\"fence\", \"false\");\n }\n\n node.setAttribute(\"stretchy\", \"true\");\n var size = makeEm(delimiter.sizeToMaxHeight[group.size]);\n node.setAttribute(\"minsize\", size);\n node.setAttribute(\"maxsize\", size);\n return node;\n }\n});\n\nfunction assertParsed(group) {\n if (!group.body) {\n throw new Error(\"Bug: The leftright ParseNode wasn't fully parsed.\");\n }\n}\n\ndefineFunction({\n type: \"leftright-right\",\n names: [\"\\\\right\"],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: (context, args) => {\n // \\left case below triggers parsing of \\right in\n // `const right = parser.parseFunction();`\n // uses this return value.\n var color = context.parser.gullet.macros.get(\"\\\\current@color\");\n\n if (color && typeof color !== \"string\") {\n throw new ParseError(\"\\\\current@color set to non-string in \\\\right\");\n }\n\n return {\n type: \"leftright-right\",\n mode: context.parser.mode,\n delim: checkDelimiter(args[0], context).text,\n color // undefined if not set via \\color\n\n };\n }\n});\ndefineFunction({\n type: \"leftright\",\n names: [\"\\\\left\"],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: (context, args) => {\n var delim = checkDelimiter(args[0], context);\n var parser = context.parser; // Parse out the implicit body\n\n ++parser.leftrightDepth; // parseExpression stops before '\\\\right'\n\n var body = parser.parseExpression(false);\n --parser.leftrightDepth; // Check the next token\n\n parser.expect(\"\\\\right\", false);\n var right = assertNodeType(parser.parseFunction(), \"leftright-right\");\n return {\n type: \"leftright\",\n mode: parser.mode,\n body,\n left: delim.text,\n right: right.delim,\n rightColor: right.color\n };\n },\n htmlBuilder: (group, options) => {\n assertParsed(group); // Build the inner expression\n\n var inner = buildExpression$1(group.body, options, true, [\"mopen\", \"mclose\"]);\n var innerHeight = 0;\n var innerDepth = 0;\n var hadMiddle = false; // Calculate its height and depth\n\n for (var i = 0; i < inner.length; i++) {\n // Property `isMiddle` not defined on `span`. See comment in\n // \"middle\"'s htmlBuilder.\n // $FlowFixMe\n if (inner[i].isMiddle) {\n hadMiddle = true;\n } else {\n innerHeight = Math.max(inner[i].height, innerHeight);\n innerDepth = Math.max(inner[i].depth, innerDepth);\n }\n } // The size of delimiters is the same, regardless of what style we are\n // in. Thus, to correctly calculate the size of delimiter we need around\n // a group, we scale down the inner size based on the size.\n\n\n innerHeight *= options.sizeMultiplier;\n innerDepth *= options.sizeMultiplier;\n var leftDelim;\n\n if (group.left === \".\") {\n // Empty delimiters in \\left and \\right make null delimiter spaces.\n leftDelim = makeNullDelimiter(options, [\"mopen\"]);\n } else {\n // Otherwise, use leftRightDelim to generate the correct sized\n // delimiter.\n leftDelim = delimiter.leftRightDelim(group.left, innerHeight, innerDepth, options, group.mode, [\"mopen\"]);\n } // Add it to the beginning of the expression\n\n\n inner.unshift(leftDelim); // Handle middle delimiters\n\n if (hadMiddle) {\n for (var _i = 1; _i < inner.length; _i++) {\n var middleDelim = inner[_i]; // Property `isMiddle` not defined on `span`. See comment in\n // \"middle\"'s htmlBuilder.\n // $FlowFixMe\n\n var isMiddle = middleDelim.isMiddle;\n\n if (isMiddle) {\n // Apply the options that were active when \\middle was called\n inner[_i] = delimiter.leftRightDelim(isMiddle.delim, innerHeight, innerDepth, isMiddle.options, group.mode, []);\n }\n }\n }\n\n var rightDelim; // Same for the right delimiter, but using color specified by \\color\n\n if (group.right === \".\") {\n rightDelim = makeNullDelimiter(options, [\"mclose\"]);\n } else {\n var colorOptions = group.rightColor ? options.withColor(group.rightColor) : options;\n rightDelim = delimiter.leftRightDelim(group.right, innerHeight, innerDepth, colorOptions, group.mode, [\"mclose\"]);\n } // Add it to the end of the expression.\n\n\n inner.push(rightDelim);\n return buildCommon.makeSpan([\"minner\"], inner, options);\n },\n mathmlBuilder: (group, options) => {\n assertParsed(group);\n var inner = buildExpression(group.body, options);\n\n if (group.left !== \".\") {\n var leftNode = new mathMLTree.MathNode(\"mo\", [makeText(group.left, group.mode)]);\n leftNode.setAttribute(\"fence\", \"true\");\n inner.unshift(leftNode);\n }\n\n if (group.right !== \".\") {\n var rightNode = new mathMLTree.MathNode(\"mo\", [makeText(group.right, group.mode)]);\n rightNode.setAttribute(\"fence\", \"true\");\n\n if (group.rightColor) {\n rightNode.setAttribute(\"mathcolor\", group.rightColor);\n }\n\n inner.push(rightNode);\n }\n\n return makeRow(inner);\n }\n});\ndefineFunction({\n type: \"middle\",\n names: [\"\\\\middle\"],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: (context, args) => {\n var delim = checkDelimiter(args[0], context);\n\n if (!context.parser.leftrightDepth) {\n throw new ParseError(\"\\\\middle without preceding \\\\left\", delim);\n }\n\n return {\n type: \"middle\",\n mode: context.parser.mode,\n delim: delim.text\n };\n },\n htmlBuilder: (group, options) => {\n var middleDelim;\n\n if (group.delim === \".\") {\n middleDelim = makeNullDelimiter(options, []);\n } else {\n middleDelim = delimiter.sizedDelim(group.delim, 1, options, group.mode, []);\n var isMiddle = {\n delim: group.delim,\n options\n }; // Property `isMiddle` not defined on `span`. It is only used in\n // this file above.\n // TODO: Fix this violation of the `span` type and possibly rename\n // things since `isMiddle` sounds like a boolean, but is a struct.\n // $FlowFixMe\n\n middleDelim.isMiddle = isMiddle;\n }\n\n return middleDelim;\n },\n mathmlBuilder: (group, options) => {\n // A Firefox \\middle will stretch a character vertically only if it\n // is in the fence part of the operator dictionary at:\n // https://www.w3.org/TR/MathML3/appendixc.html.\n // So we need to avoid U+2223 and use plain \"|\" instead.\n var textNode = group.delim === \"\\\\vert\" || group.delim === \"|\" ? makeText(\"|\", \"text\") : makeText(group.delim, group.mode);\n var middleNode = new mathMLTree.MathNode(\"mo\", [textNode]);\n middleNode.setAttribute(\"fence\", \"true\"); // MathML gives 5/18em spacing to each element.\n // \\middle should get delimiter spacing instead.\n\n middleNode.setAttribute(\"lspace\", \"0.05em\");\n middleNode.setAttribute(\"rspace\", \"0.05em\");\n return middleNode;\n }\n});\n\nvar htmlBuilder$7 = (group, options) => {\n // \\cancel, \\bcancel, \\xcancel, \\sout, \\fbox, \\colorbox, \\fcolorbox, \\phase\n // Some groups can return document fragments. Handle those by wrapping\n // them in a span.\n var inner = buildCommon.wrapFragment(buildGroup$1(group.body, options), options);\n var label = group.label.slice(1);\n var scale = options.sizeMultiplier;\n var img;\n var imgShift = 0; // In the LaTeX cancel package, line geometry is slightly different\n // depending on whether the subject is wider than it is tall, or vice versa.\n // We don't know the width of a group, so as a proxy, we test if\n // the subject is a single character. This captures most of the\n // subjects that should get the \"tall\" treatment.\n\n var isSingleChar = utils.isCharacterBox(group.body);\n\n if (label === \"sout\") {\n img = buildCommon.makeSpan([\"stretchy\", \"sout\"]);\n img.height = options.fontMetrics().defaultRuleThickness / scale;\n imgShift = -0.5 * options.fontMetrics().xHeight;\n } else if (label === \"phase\") {\n // Set a couple of dimensions from the steinmetz package.\n var lineWeight = calculateSize({\n number: 0.6,\n unit: \"pt\"\n }, options);\n var clearance = calculateSize({\n number: 0.35,\n unit: \"ex\"\n }, options); // Prevent size changes like \\Huge from affecting line thickness\n\n var newOptions = options.havingBaseSizing();\n scale = scale / newOptions.sizeMultiplier;\n var angleHeight = inner.height + inner.depth + lineWeight + clearance; // Reserve a left pad for the angle.\n\n inner.style.paddingLeft = makeEm(angleHeight / 2 + lineWeight); // Create an SVG\n\n var viewBoxHeight = Math.floor(1000 * angleHeight * scale);\n var path = phasePath(viewBoxHeight);\n var svgNode = new SvgNode([new PathNode(\"phase\", path)], {\n \"width\": \"400em\",\n \"height\": makeEm(viewBoxHeight / 1000),\n \"viewBox\": \"0 0 400000 \" + viewBoxHeight,\n \"preserveAspectRatio\": \"xMinYMin slice\"\n }); // Wrap it in a span with overflow: hidden.\n\n img = buildCommon.makeSvgSpan([\"hide-tail\"], [svgNode], options);\n img.style.height = makeEm(angleHeight);\n imgShift = inner.depth + lineWeight + clearance;\n } else {\n // Add horizontal padding\n if (/cancel/.test(label)) {\n if (!isSingleChar) {\n inner.classes.push(\"cancel-pad\");\n }\n } else if (label === \"angl\") {\n inner.classes.push(\"anglpad\");\n } else {\n inner.classes.push(\"boxpad\");\n } // Add vertical padding\n\n\n var topPad = 0;\n var bottomPad = 0;\n var ruleThickness = 0; // ref: cancel package: \\advance\\totalheight2\\p@ % \"+2\"\n\n if (/box/.test(label)) {\n ruleThickness = Math.max(options.fontMetrics().fboxrule, // default\n options.minRuleThickness // User override.\n );\n topPad = options.fontMetrics().fboxsep + (label === \"colorbox\" ? 0 : ruleThickness);\n bottomPad = topPad;\n } else if (label === \"angl\") {\n ruleThickness = Math.max(options.fontMetrics().defaultRuleThickness, options.minRuleThickness);\n topPad = 4 * ruleThickness; // gap = 3 \u00D7 line, plus the line itself.\n\n bottomPad = Math.max(0, 0.25 - inner.depth);\n } else {\n topPad = isSingleChar ? 0.2 : 0;\n bottomPad = topPad;\n }\n\n img = stretchy.encloseSpan(inner, label, topPad, bottomPad, options);\n\n if (/fbox|boxed|fcolorbox/.test(label)) {\n img.style.borderStyle = \"solid\";\n img.style.borderWidth = makeEm(ruleThickness);\n } else if (label === \"angl\" && ruleThickness !== 0.049) {\n img.style.borderTopWidth = makeEm(ruleThickness);\n img.style.borderRightWidth = makeEm(ruleThickness);\n }\n\n imgShift = inner.depth + bottomPad;\n\n if (group.backgroundColor) {\n img.style.backgroundColor = group.backgroundColor;\n\n if (group.borderColor) {\n img.style.borderColor = group.borderColor;\n }\n }\n }\n\n var vlist;\n\n if (group.backgroundColor) {\n vlist = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [// Put the color background behind inner;\n {\n type: \"elem\",\n elem: img,\n shift: imgShift\n }, {\n type: \"elem\",\n elem: inner,\n shift: 0\n }]\n }, options);\n } else {\n var classes = /cancel|phase/.test(label) ? [\"svg-align\"] : [];\n vlist = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [// Write the \\cancel stroke on top of inner.\n {\n type: \"elem\",\n elem: inner,\n shift: 0\n }, {\n type: \"elem\",\n elem: img,\n shift: imgShift,\n wrapperClasses: classes\n }]\n }, options);\n }\n\n if (/cancel/.test(label)) {\n // The cancel package documentation says that cancel lines add their height\n // to the expression, but tests show that isn't how it actually works.\n vlist.height = inner.height;\n vlist.depth = inner.depth;\n }\n\n if (/cancel/.test(label) && !isSingleChar) {\n // cancel does not create horiz space for its line extension.\n return buildCommon.makeSpan([\"mord\", \"cancel-lap\"], [vlist], options);\n } else {\n return buildCommon.makeSpan([\"mord\"], [vlist], options);\n }\n};\n\nvar mathmlBuilder$6 = (group, options) => {\n var fboxsep = 0;\n var node = new mathMLTree.MathNode(group.label.indexOf(\"colorbox\") > -1 ? \"mpadded\" : \"menclose\", [buildGroup(group.body, options)]);\n\n switch (group.label) {\n case \"\\\\cancel\":\n node.setAttribute(\"notation\", \"updiagonalstrike\");\n break;\n\n case \"\\\\bcancel\":\n node.setAttribute(\"notation\", \"downdiagonalstrike\");\n break;\n\n case \"\\\\phase\":\n node.setAttribute(\"notation\", \"phasorangle\");\n break;\n\n case \"\\\\sout\":\n node.setAttribute(\"notation\", \"horizontalstrike\");\n break;\n\n case \"\\\\fbox\":\n node.setAttribute(\"notation\", \"box\");\n break;\n\n case \"\\\\angl\":\n node.setAttribute(\"notation\", \"actuarial\");\n break;\n\n case \"\\\\fcolorbox\":\n case \"\\\\colorbox\":\n // doesn't have a good notation option. So use \n // instead. Set some attributes that come included with .\n fboxsep = options.fontMetrics().fboxsep * options.fontMetrics().ptPerEm;\n node.setAttribute(\"width\", \"+\" + 2 * fboxsep + \"pt\");\n node.setAttribute(\"height\", \"+\" + 2 * fboxsep + \"pt\");\n node.setAttribute(\"lspace\", fboxsep + \"pt\"); //\n\n node.setAttribute(\"voffset\", fboxsep + \"pt\");\n\n if (group.label === \"\\\\fcolorbox\") {\n var thk = Math.max(options.fontMetrics().fboxrule, // default\n options.minRuleThickness // user override\n );\n node.setAttribute(\"style\", \"border: \" + thk + \"em solid \" + String(group.borderColor));\n }\n\n break;\n\n case \"\\\\xcancel\":\n node.setAttribute(\"notation\", \"updiagonalstrike downdiagonalstrike\");\n break;\n }\n\n if (group.backgroundColor) {\n node.setAttribute(\"mathbackground\", group.backgroundColor);\n }\n\n return node;\n};\n\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\colorbox\"],\n props: {\n numArgs: 2,\n allowedInText: true,\n argTypes: [\"color\", \"text\"]\n },\n\n handler(_ref, args, optArgs) {\n var {\n parser,\n funcName\n } = _ref;\n var color = assertNodeType(args[0], \"color-token\").color;\n var body = args[1];\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: funcName,\n backgroundColor: color,\n body\n };\n },\n\n htmlBuilder: htmlBuilder$7,\n mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\fcolorbox\"],\n props: {\n numArgs: 3,\n allowedInText: true,\n argTypes: [\"color\", \"color\", \"text\"]\n },\n\n handler(_ref2, args, optArgs) {\n var {\n parser,\n funcName\n } = _ref2;\n var borderColor = assertNodeType(args[0], \"color-token\").color;\n var backgroundColor = assertNodeType(args[1], \"color-token\").color;\n var body = args[2];\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: funcName,\n backgroundColor,\n borderColor,\n body\n };\n },\n\n htmlBuilder: htmlBuilder$7,\n mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\fbox\"],\n props: {\n numArgs: 1,\n argTypes: [\"hbox\"],\n allowedInText: true\n },\n\n handler(_ref3, args) {\n var {\n parser\n } = _ref3;\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: \"\\\\fbox\",\n body: args[0]\n };\n }\n\n});\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\cancel\", \"\\\\bcancel\", \"\\\\xcancel\", \"\\\\sout\", \"\\\\phase\"],\n props: {\n numArgs: 1\n },\n\n handler(_ref4, args) {\n var {\n parser,\n funcName\n } = _ref4;\n var body = args[0];\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: funcName,\n body\n };\n },\n\n htmlBuilder: htmlBuilder$7,\n mathmlBuilder: mathmlBuilder$6\n});\ndefineFunction({\n type: \"enclose\",\n names: [\"\\\\angl\"],\n props: {\n numArgs: 1,\n argTypes: [\"hbox\"],\n allowedInText: false\n },\n\n handler(_ref5, args) {\n var {\n parser\n } = _ref5;\n return {\n type: \"enclose\",\n mode: parser.mode,\n label: \"\\\\angl\",\n body: args[0]\n };\n }\n\n});\n\n/**\n * All registered environments.\n * `environments.js` exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary via `environments.js`.\n */\nvar _environments = {};\nfunction defineEnvironment(_ref) {\n var {\n type,\n names,\n props,\n handler,\n htmlBuilder,\n mathmlBuilder\n } = _ref;\n // Set default values of environments.\n var data = {\n type,\n numArgs: props.numArgs || 0,\n allowedInText: false,\n numOptionalArgs: 0,\n handler\n };\n\n for (var i = 0; i < names.length; ++i) {\n // TODO: The value type of _environments should be a type union of all\n // possible `EnvSpec<>` possibilities instead of `EnvSpec<*>`, which is\n // an existential type.\n _environments[names[i]] = data;\n }\n\n if (htmlBuilder) {\n _htmlGroupBuilders[type] = htmlBuilder;\n }\n\n if (mathmlBuilder) {\n _mathmlGroupBuilders[type] = mathmlBuilder;\n }\n}\n\n/**\n * All registered global/built-in macros.\n * `macros.js` exports this same dictionary again and makes it public.\n * `Parser.js` requires this dictionary via `macros.js`.\n */\nvar _macros = {}; // This function might one day accept an additional argument and do more things.\n\nfunction defineMacro(name, body) {\n _macros[name] = body;\n}\n\n// Helper functions\nfunction getHLines(parser) {\n // Return an array. The array length = number of hlines.\n // Each element in the array tells if the line is dashed.\n var hlineInfo = [];\n parser.consumeSpaces();\n var nxt = parser.fetch().text;\n\n if (nxt === \"\\\\relax\") {\n // \\relax is an artifact of the \\cr macro below\n parser.consume();\n parser.consumeSpaces();\n nxt = parser.fetch().text;\n }\n\n while (nxt === \"\\\\hline\" || nxt === \"\\\\hdashline\") {\n parser.consume();\n hlineInfo.push(nxt === \"\\\\hdashline\");\n parser.consumeSpaces();\n nxt = parser.fetch().text;\n }\n\n return hlineInfo;\n}\n\nvar validateAmsEnvironmentContext = context => {\n var settings = context.parser.settings;\n\n if (!settings.displayMode) {\n throw new ParseError(\"{\" + context.envName + \"} can be used only in\" + \" display mode.\");\n }\n}; // autoTag (an argument to parseArray) can be one of three values:\n// * undefined: Regular (not-top-level) array; no tags on each row\n// * true: Automatic equation numbering, overridable by \\tag\n// * false: Tags allowed on each row, but no automatic numbering\n// This function *doesn't* work with the \"split\" environment name.\n\n\nfunction getAutoTag(name) {\n if (name.indexOf(\"ed\") === -1) {\n return name.indexOf(\"*\") === -1;\n } // return undefined;\n\n}\n/**\n * Parse the body of the environment, with rows delimited by \\\\ and\n * columns delimited by &, and create a nested list in row-major order\n * with one group per cell. If given an optional argument style\n * (\"text\", \"display\", etc.), then each cell is cast into that style.\n */\n\n\nfunction parseArray(parser, _ref, style) {\n var {\n hskipBeforeAndAfter,\n addJot,\n cols,\n arraystretch,\n colSeparationType,\n autoTag,\n singleRow,\n emptySingleRow,\n maxNumCols,\n leqno\n } = _ref;\n parser.gullet.beginGroup();\n\n if (!singleRow) {\n // \\cr is equivalent to \\\\ without the optional size argument (see below)\n // TODO: provide helpful error when \\cr is used outside array environment\n parser.gullet.macros.set(\"\\\\cr\", \"\\\\\\\\\\\\relax\");\n } // Get current arraystretch if it's not set by the environment\n\n\n if (!arraystretch) {\n var stretch = parser.gullet.expandMacroAsText(\"\\\\arraystretch\");\n\n if (stretch == null) {\n // Default \\arraystretch from lttab.dtx\n arraystretch = 1;\n } else {\n arraystretch = parseFloat(stretch);\n\n if (!arraystretch || arraystretch < 0) {\n throw new ParseError(\"Invalid \\\\arraystretch: \" + stretch);\n }\n }\n } // Start group for first cell\n\n\n parser.gullet.beginGroup();\n var row = [];\n var body = [row];\n var rowGaps = [];\n var hLinesBeforeRow = [];\n var tags = autoTag != null ? [] : undefined; // amsmath uses \\global\\@eqnswtrue and \\global\\@eqnswfalse to represent\n // whether this row should have an equation number. Simulate this with\n // a \\@eqnsw macro set to 1 or 0.\n\n function beginRow() {\n if (autoTag) {\n parser.gullet.macros.set(\"\\\\@eqnsw\", \"1\", true);\n }\n }\n\n function endRow() {\n if (tags) {\n if (parser.gullet.macros.get(\"\\\\df@tag\")) {\n tags.push(parser.subparse([new Token(\"\\\\df@tag\")]));\n parser.gullet.macros.set(\"\\\\df@tag\", undefined, true);\n } else {\n tags.push(Boolean(autoTag) && parser.gullet.macros.get(\"\\\\@eqnsw\") === \"1\");\n }\n }\n }\n\n beginRow(); // Test for \\hline at the top of the array.\n\n hLinesBeforeRow.push(getHLines(parser));\n\n while (true) {\n // eslint-disable-line no-constant-condition\n // Parse each cell in its own group (namespace)\n var cell = parser.parseExpression(false, singleRow ? \"\\\\end\" : \"\\\\\\\\\");\n parser.gullet.endGroup();\n parser.gullet.beginGroup();\n cell = {\n type: \"ordgroup\",\n mode: parser.mode,\n body: cell\n };\n\n if (style) {\n cell = {\n type: \"styling\",\n mode: parser.mode,\n style,\n body: [cell]\n };\n }\n\n row.push(cell);\n var next = parser.fetch().text;\n\n if (next === \"&\") {\n if (maxNumCols && row.length === maxNumCols) {\n if (singleRow || colSeparationType) {\n // {equation} or {split}\n throw new ParseError(\"Too many tab characters: &\", parser.nextToken);\n } else {\n // {array} environment\n parser.settings.reportNonstrict(\"textEnv\", \"Too few columns \" + \"specified in the {array} column argument.\");\n }\n }\n\n parser.consume();\n } else if (next === \"\\\\end\") {\n endRow(); // Arrays terminate newlines with `\\crcr` which consumes a `\\cr` if\n // the last line is empty. However, AMS environments keep the\n // empty row if it's the only one.\n // NOTE: Currently, `cell` is the last item added into `row`.\n\n if (row.length === 1 && cell.type === \"styling\" && cell.body[0].body.length === 0 && (body.length > 1 || !emptySingleRow)) {\n body.pop();\n }\n\n if (hLinesBeforeRow.length < body.length + 1) {\n hLinesBeforeRow.push([]);\n }\n\n break;\n } else if (next === \"\\\\\\\\\") {\n parser.consume();\n var size = void 0; // \\def\\Let@{\\let\\\\\\math@cr}\n // \\def\\math@cr{...\\math@cr@}\n // \\def\\math@cr@{\\new@ifnextchar[\\math@cr@@{\\math@cr@@[\\z@]}}\n // \\def\\math@cr@@[#1]{...\\math@cr@@@...}\n // \\def\\math@cr@@@{\\cr}\n\n if (parser.gullet.future().text !== \" \") {\n size = parser.parseSizeGroup(true);\n }\n\n rowGaps.push(size ? size.value : null);\n endRow(); // check for \\hline(s) following the row separator\n\n hLinesBeforeRow.push(getHLines(parser));\n row = [];\n body.push(row);\n beginRow();\n } else {\n throw new ParseError(\"Expected & or \\\\\\\\ or \\\\cr or \\\\end\", parser.nextToken);\n }\n } // End cell group\n\n\n parser.gullet.endGroup(); // End array group defining \\cr\n\n parser.gullet.endGroup();\n return {\n type: \"array\",\n mode: parser.mode,\n addJot,\n arraystretch,\n body,\n cols,\n rowGaps,\n hskipBeforeAndAfter,\n hLinesBeforeRow,\n colSeparationType,\n tags,\n leqno\n };\n} // Decides on a style for cells in an array according to whether the given\n// environment name starts with the letter 'd'.\n\n\nfunction dCellStyle(envName) {\n if (envName.slice(0, 1) === \"d\") {\n return \"display\";\n } else {\n return \"text\";\n }\n}\n\nvar htmlBuilder$6 = function htmlBuilder(group, options) {\n var r;\n var c;\n var nr = group.body.length;\n var hLinesBeforeRow = group.hLinesBeforeRow;\n var nc = 0;\n var body = new Array(nr);\n var hlines = [];\n var ruleThickness = Math.max( // From LaTeX \\showthe\\arrayrulewidth. Equals 0.04 em.\n options.fontMetrics().arrayRuleWidth, options.minRuleThickness // User override.\n ); // Horizontal spacing\n\n var pt = 1 / options.fontMetrics().ptPerEm;\n var arraycolsep = 5 * pt; // default value, i.e. \\arraycolsep in article.cls\n\n if (group.colSeparationType && group.colSeparationType === \"small\") {\n // We're in a {smallmatrix}. Default column space is \\thickspace,\n // i.e. 5/18em = 0.2778em, per amsmath.dtx for {smallmatrix}.\n // But that needs adjustment because LaTeX applies \\scriptstyle to the\n // entire array, including the colspace, but this function applies\n // \\scriptstyle only inside each element.\n var localMultiplier = options.havingStyle(Style$1.SCRIPT).sizeMultiplier;\n arraycolsep = 0.2778 * (localMultiplier / options.sizeMultiplier);\n } // Vertical spacing\n\n\n var baselineskip = group.colSeparationType === \"CD\" ? calculateSize({\n number: 3,\n unit: \"ex\"\n }, options) : 12 * pt; // see size10.clo\n // Default \\jot from ltmath.dtx\n // TODO(edemaine): allow overriding \\jot via \\setlength (#687)\n\n var jot = 3 * pt;\n var arrayskip = group.arraystretch * baselineskip;\n var arstrutHeight = 0.7 * arrayskip; // \\strutbox in ltfsstrc.dtx and\n\n var arstrutDepth = 0.3 * arrayskip; // \\@arstrutbox in lttab.dtx\n\n var totalHeight = 0; // Set a position for \\hline(s) at the top of the array, if any.\n\n function setHLinePos(hlinesInGap) {\n for (var i = 0; i < hlinesInGap.length; ++i) {\n if (i > 0) {\n totalHeight += 0.25;\n }\n\n hlines.push({\n pos: totalHeight,\n isDashed: hlinesInGap[i]\n });\n }\n }\n\n setHLinePos(hLinesBeforeRow[0]);\n\n for (r = 0; r < group.body.length; ++r) {\n var inrow = group.body[r];\n var height = arstrutHeight; // \\@array adds an \\@arstrut\n\n var depth = arstrutDepth; // to each tow (via the template)\n\n if (nc < inrow.length) {\n nc = inrow.length;\n }\n\n var outrow = new Array(inrow.length);\n\n for (c = 0; c < inrow.length; ++c) {\n var elt = buildGroup$1(inrow[c], options);\n\n if (depth < elt.depth) {\n depth = elt.depth;\n }\n\n if (height < elt.height) {\n height = elt.height;\n }\n\n outrow[c] = elt;\n }\n\n var rowGap = group.rowGaps[r];\n var gap = 0;\n\n if (rowGap) {\n gap = calculateSize(rowGap, options);\n\n if (gap > 0) {\n // \\@argarraycr\n gap += arstrutDepth;\n\n if (depth < gap) {\n depth = gap; // \\@xargarraycr\n }\n\n gap = 0;\n }\n } // In AMS multiline environments such as aligned and gathered, rows\n // correspond to lines that have additional \\jot added to the\n // \\baselineskip via \\openup.\n\n\n if (group.addJot) {\n depth += jot;\n }\n\n outrow.height = height;\n outrow.depth = depth;\n totalHeight += height;\n outrow.pos = totalHeight;\n totalHeight += depth + gap; // \\@yargarraycr\n\n body[r] = outrow; // Set a position for \\hline(s), if any.\n\n setHLinePos(hLinesBeforeRow[r + 1]);\n }\n\n var offset = totalHeight / 2 + options.fontMetrics().axisHeight;\n var colDescriptions = group.cols || [];\n var cols = [];\n var colSep;\n var colDescrNum;\n var tagSpans = [];\n\n if (group.tags && group.tags.some(tag => tag)) {\n // An environment with manual tags and/or automatic equation numbers.\n // Create node(s), the latter of which trigger CSS counter increment.\n for (r = 0; r < nr; ++r) {\n var rw = body[r];\n var shift = rw.pos - offset;\n var tag = group.tags[r];\n var tagSpan = void 0;\n\n if (tag === true) {\n // automatic numbering\n tagSpan = buildCommon.makeSpan([\"eqn-num\"], [], options);\n } else if (tag === false) {\n // \\nonumber/\\notag or starred environment\n tagSpan = buildCommon.makeSpan([], [], options);\n } else {\n // manual \\tag\n tagSpan = buildCommon.makeSpan([], buildExpression$1(tag, options, true), options);\n }\n\n tagSpan.depth = rw.depth;\n tagSpan.height = rw.height;\n tagSpans.push({\n type: \"elem\",\n elem: tagSpan,\n shift\n });\n }\n }\n\n for (c = 0, colDescrNum = 0; // Continue while either there are more columns or more column\n // descriptions, so trailing separators don't get lost.\n c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) {\n var colDescr = colDescriptions[colDescrNum] || {};\n var firstSeparator = true;\n\n while (colDescr.type === \"separator\") {\n // If there is more than one separator in a row, add a space\n // between them.\n if (!firstSeparator) {\n colSep = buildCommon.makeSpan([\"arraycolsep\"], []);\n colSep.style.width = makeEm(options.fontMetrics().doubleRuleSep);\n cols.push(colSep);\n }\n\n if (colDescr.separator === \"|\" || colDescr.separator === \":\") {\n var lineType = colDescr.separator === \"|\" ? \"solid\" : \"dashed\";\n var separator = buildCommon.makeSpan([\"vertical-separator\"], [], options);\n separator.style.height = makeEm(totalHeight);\n separator.style.borderRightWidth = makeEm(ruleThickness);\n separator.style.borderRightStyle = lineType;\n separator.style.margin = \"0 \" + makeEm(-ruleThickness / 2);\n\n var _shift = totalHeight - offset;\n\n if (_shift) {\n separator.style.verticalAlign = makeEm(-_shift);\n }\n\n cols.push(separator);\n } else {\n throw new ParseError(\"Invalid separator type: \" + colDescr.separator);\n }\n\n colDescrNum++;\n colDescr = colDescriptions[colDescrNum] || {};\n firstSeparator = false;\n }\n\n if (c >= nc) {\n continue;\n }\n\n var sepwidth = void 0;\n\n if (c > 0 || group.hskipBeforeAndAfter) {\n sepwidth = utils.deflt(colDescr.pregap, arraycolsep);\n\n if (sepwidth !== 0) {\n colSep = buildCommon.makeSpan([\"arraycolsep\"], []);\n colSep.style.width = makeEm(sepwidth);\n cols.push(colSep);\n }\n }\n\n var col = [];\n\n for (r = 0; r < nr; ++r) {\n var row = body[r];\n var elem = row[c];\n\n if (!elem) {\n continue;\n }\n\n var _shift2 = row.pos - offset;\n\n elem.depth = row.depth;\n elem.height = row.height;\n col.push({\n type: \"elem\",\n elem: elem,\n shift: _shift2\n });\n }\n\n col = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: col\n }, options);\n col = buildCommon.makeSpan([\"col-align-\" + (colDescr.align || \"c\")], [col]);\n cols.push(col);\n\n if (c < nc - 1 || group.hskipBeforeAndAfter) {\n sepwidth = utils.deflt(colDescr.postgap, arraycolsep);\n\n if (sepwidth !== 0) {\n colSep = buildCommon.makeSpan([\"arraycolsep\"], []);\n colSep.style.width = makeEm(sepwidth);\n cols.push(colSep);\n }\n }\n }\n\n body = buildCommon.makeSpan([\"mtable\"], cols); // Add \\hline(s), if any.\n\n if (hlines.length > 0) {\n var line = buildCommon.makeLineSpan(\"hline\", options, ruleThickness);\n var dashes = buildCommon.makeLineSpan(\"hdashline\", options, ruleThickness);\n var vListElems = [{\n type: \"elem\",\n elem: body,\n shift: 0\n }];\n\n while (hlines.length > 0) {\n var hline = hlines.pop();\n var lineShift = hline.pos - offset;\n\n if (hline.isDashed) {\n vListElems.push({\n type: \"elem\",\n elem: dashes,\n shift: lineShift\n });\n } else {\n vListElems.push({\n type: \"elem\",\n elem: line,\n shift: lineShift\n });\n }\n }\n\n body = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: vListElems\n }, options);\n }\n\n if (tagSpans.length === 0) {\n return buildCommon.makeSpan([\"mord\"], [body], options);\n } else {\n var eqnNumCol = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: tagSpans\n }, options);\n eqnNumCol = buildCommon.makeSpan([\"tag\"], [eqnNumCol], options);\n return buildCommon.makeFragment([body, eqnNumCol]);\n }\n};\n\nvar alignMap = {\n c: \"center \",\n l: \"left \",\n r: \"right \"\n};\n\nvar mathmlBuilder$5 = function mathmlBuilder(group, options) {\n var tbl = [];\n var glue = new mathMLTree.MathNode(\"mtd\", [], [\"mtr-glue\"]);\n var tag = new mathMLTree.MathNode(\"mtd\", [], [\"mml-eqn-num\"]);\n\n for (var i = 0; i < group.body.length; i++) {\n var rw = group.body[i];\n var row = [];\n\n for (var j = 0; j < rw.length; j++) {\n row.push(new mathMLTree.MathNode(\"mtd\", [buildGroup(rw[j], options)]));\n }\n\n if (group.tags && group.tags[i]) {\n row.unshift(glue);\n row.push(glue);\n\n if (group.leqno) {\n row.unshift(tag);\n } else {\n row.push(tag);\n }\n }\n\n tbl.push(new mathMLTree.MathNode(\"mtr\", row));\n }\n\n var table = new mathMLTree.MathNode(\"mtable\", tbl); // Set column alignment, row spacing, column spacing, and\n // array lines by setting attributes on the table element.\n // Set the row spacing. In MathML, we specify a gap distance.\n // We do not use rowGap[] because MathML automatically increases\n // cell height with the height/depth of the element content.\n // LaTeX \\arraystretch multiplies the row baseline-to-baseline distance.\n // We simulate this by adding (arraystretch - 1)em to the gap. This\n // does a reasonable job of adjusting arrays containing 1 em tall content.\n // The 0.16 and 0.09 values are found empirically. They produce an array\n // similar to LaTeX and in which content does not interfere with \\hlines.\n\n var gap = group.arraystretch === 0.5 ? 0.1 // {smallmatrix}, {subarray}\n : 0.16 + group.arraystretch - 1 + (group.addJot ? 0.09 : 0);\n table.setAttribute(\"rowspacing\", makeEm(gap)); // MathML table lines go only between cells.\n // To place a line on an edge we'll use , if necessary.\n\n var menclose = \"\";\n var align = \"\";\n\n if (group.cols && group.cols.length > 0) {\n // Find column alignment, column spacing, and vertical lines.\n var cols = group.cols;\n var columnLines = \"\";\n var prevTypeWasAlign = false;\n var iStart = 0;\n var iEnd = cols.length;\n\n if (cols[0].type === \"separator\") {\n menclose += \"top \";\n iStart = 1;\n }\n\n if (cols[cols.length - 1].type === \"separator\") {\n menclose += \"bottom \";\n iEnd -= 1;\n }\n\n for (var _i = iStart; _i < iEnd; _i++) {\n if (cols[_i].type === \"align\") {\n align += alignMap[cols[_i].align];\n\n if (prevTypeWasAlign) {\n columnLines += \"none \";\n }\n\n prevTypeWasAlign = true;\n } else if (cols[_i].type === \"separator\") {\n // MathML accepts only single lines between cells.\n // So we read only the first of consecutive separators.\n if (prevTypeWasAlign) {\n columnLines += cols[_i].separator === \"|\" ? \"solid \" : \"dashed \";\n prevTypeWasAlign = false;\n }\n }\n }\n\n table.setAttribute(\"columnalign\", align.trim());\n\n if (/[sd]/.test(columnLines)) {\n table.setAttribute(\"columnlines\", columnLines.trim());\n }\n } // Set column spacing.\n\n\n if (group.colSeparationType === \"align\") {\n var _cols = group.cols || [];\n\n var spacing = \"\";\n\n for (var _i2 = 1; _i2 < _cols.length; _i2++) {\n spacing += _i2 % 2 ? \"0em \" : \"1em \";\n }\n\n table.setAttribute(\"columnspacing\", spacing.trim());\n } else if (group.colSeparationType === \"alignat\" || group.colSeparationType === \"gather\") {\n table.setAttribute(\"columnspacing\", \"0em\");\n } else if (group.colSeparationType === \"small\") {\n table.setAttribute(\"columnspacing\", \"0.2778em\");\n } else if (group.colSeparationType === \"CD\") {\n table.setAttribute(\"columnspacing\", \"0.5em\");\n } else {\n table.setAttribute(\"columnspacing\", \"1em\");\n } // Address \\hline and \\hdashline\n\n\n var rowLines = \"\";\n var hlines = group.hLinesBeforeRow;\n menclose += hlines[0].length > 0 ? \"left \" : \"\";\n menclose += hlines[hlines.length - 1].length > 0 ? \"right \" : \"\";\n\n for (var _i3 = 1; _i3 < hlines.length - 1; _i3++) {\n rowLines += hlines[_i3].length === 0 ? \"none \" // MathML accepts only a single line between rows. Read one element.\n : hlines[_i3][0] ? \"dashed \" : \"solid \";\n }\n\n if (/[sd]/.test(rowLines)) {\n table.setAttribute(\"rowlines\", rowLines.trim());\n }\n\n if (menclose !== \"\") {\n table = new mathMLTree.MathNode(\"menclose\", [table]);\n table.setAttribute(\"notation\", menclose.trim());\n }\n\n if (group.arraystretch && group.arraystretch < 1) {\n // A small array. Wrap in scriptstyle so row gap is not too large.\n table = new mathMLTree.MathNode(\"mstyle\", [table]);\n table.setAttribute(\"scriptlevel\", \"1\");\n }\n\n return table;\n}; // Convenience function for align, align*, aligned, alignat, alignat*, alignedat.\n\n\nvar alignedHandler = function alignedHandler(context, args) {\n if (context.envName.indexOf(\"ed\") === -1) {\n validateAmsEnvironmentContext(context);\n }\n\n var cols = [];\n var separationType = context.envName.indexOf(\"at\") > -1 ? \"alignat\" : \"align\";\n var isSplit = context.envName === \"split\";\n var res = parseArray(context.parser, {\n cols,\n addJot: true,\n autoTag: isSplit ? undefined : getAutoTag(context.envName),\n emptySingleRow: true,\n colSeparationType: separationType,\n maxNumCols: isSplit ? 2 : undefined,\n leqno: context.parser.settings.leqno\n }, \"display\"); // Determining number of columns.\n // 1. If the first argument is given, we use it as a number of columns,\n // and makes sure that each row doesn't exceed that number.\n // 2. Otherwise, just count number of columns = maximum number\n // of cells in each row (\"aligned\" mode -- isAligned will be true).\n //\n // At the same time, prepend empty group {} at beginning of every second\n // cell in each row (starting with second cell) so that operators become\n // binary. This behavior is implemented in amsmath's \\start@aligned.\n\n var numMaths;\n var numCols = 0;\n var emptyGroup = {\n type: \"ordgroup\",\n mode: context.mode,\n body: []\n };\n\n if (args[0] && args[0].type === \"ordgroup\") {\n var arg0 = \"\";\n\n for (var i = 0; i < args[0].body.length; i++) {\n var textord = assertNodeType(args[0].body[i], \"textord\");\n arg0 += textord.text;\n }\n\n numMaths = Number(arg0);\n numCols = numMaths * 2;\n }\n\n var isAligned = !numCols;\n res.body.forEach(function (row) {\n for (var _i4 = 1; _i4 < row.length; _i4 += 2) {\n // Modify ordgroup node within styling node\n var styling = assertNodeType(row[_i4], \"styling\");\n var ordgroup = assertNodeType(styling.body[0], \"ordgroup\");\n ordgroup.body.unshift(emptyGroup);\n }\n\n if (!isAligned) {\n // Case 1\n var curMaths = row.length / 2;\n\n if (numMaths < curMaths) {\n throw new ParseError(\"Too many math in a row: \" + (\"expected \" + numMaths + \", but got \" + curMaths), row[0]);\n }\n } else if (numCols < row.length) {\n // Case 2\n numCols = row.length;\n }\n }); // Adjusting alignment.\n // In aligned mode, we add one \\qquad between columns;\n // otherwise we add nothing.\n\n for (var _i5 = 0; _i5 < numCols; ++_i5) {\n var align = \"r\";\n var pregap = 0;\n\n if (_i5 % 2 === 1) {\n align = \"l\";\n } else if (_i5 > 0 && isAligned) {\n // \"aligned\" mode.\n pregap = 1; // add one \\quad\n }\n\n cols[_i5] = {\n type: \"align\",\n align: align,\n pregap: pregap,\n postgap: 0\n };\n }\n\n res.colSeparationType = isAligned ? \"align\" : \"alignat\";\n return res;\n}; // Arrays are part of LaTeX, defined in lttab.dtx so its documentation\n// is part of the source2e.pdf file of LaTeX2e source documentation.\n// {darray} is an {array} environment where cells are set in \\displaystyle,\n// as defined in nccmath.sty.\n\n\ndefineEnvironment({\n type: \"array\",\n names: [\"array\", \"darray\"],\n props: {\n numArgs: 1\n },\n\n handler(context, args) {\n // Since no types are specified above, the two possibilities are\n // - The argument is wrapped in {} or [], in which case Parser's\n // parseGroup() returns an \"ordgroup\" wrapping some symbol node.\n // - The argument is a bare symbol node.\n var symNode = checkSymbolNodeType(args[0]);\n var colalign = symNode ? [args[0]] : assertNodeType(args[0], \"ordgroup\").body;\n var cols = colalign.map(function (nde) {\n var node = assertSymbolNodeType(nde);\n var ca = node.text;\n\n if (\"lcr\".indexOf(ca) !== -1) {\n return {\n type: \"align\",\n align: ca\n };\n } else if (ca === \"|\") {\n return {\n type: \"separator\",\n separator: \"|\"\n };\n } else if (ca === \":\") {\n return {\n type: \"separator\",\n separator: \":\"\n };\n }\n\n throw new ParseError(\"Unknown column alignment: \" + ca, nde);\n });\n var res = {\n cols,\n hskipBeforeAndAfter: true,\n // \\@preamble in lttab.dtx\n maxNumCols: cols.length\n };\n return parseArray(context.parser, res, dCellStyle(context.envName));\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n}); // The matrix environments of amsmath builds on the array environment\n// of LaTeX, which is discussed above.\n// The mathtools package adds starred versions of the same environments.\n// These have an optional argument to choose left|center|right justification.\n\ndefineEnvironment({\n type: \"array\",\n names: [\"matrix\", \"pmatrix\", \"bmatrix\", \"Bmatrix\", \"vmatrix\", \"Vmatrix\", \"matrix*\", \"pmatrix*\", \"bmatrix*\", \"Bmatrix*\", \"vmatrix*\", \"Vmatrix*\"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n var delimiters = {\n \"matrix\": null,\n \"pmatrix\": [\"(\", \")\"],\n \"bmatrix\": [\"[\", \"]\"],\n \"Bmatrix\": [\"\\\\{\", \"\\\\}\"],\n \"vmatrix\": [\"|\", \"|\"],\n \"Vmatrix\": [\"\\\\Vert\", \"\\\\Vert\"]\n }[context.envName.replace(\"*\", \"\")]; // \\hskip -\\arraycolsep in amsmath\n\n var colAlign = \"c\";\n var payload = {\n hskipBeforeAndAfter: false,\n cols: [{\n type: \"align\",\n align: colAlign\n }]\n };\n\n if (context.envName.charAt(context.envName.length - 1) === \"*\") {\n // It's one of the mathtools starred functions.\n // Parse the optional alignment argument.\n var parser = context.parser;\n parser.consumeSpaces();\n\n if (parser.fetch().text === \"[\") {\n parser.consume();\n parser.consumeSpaces();\n colAlign = parser.fetch().text;\n\n if (\"lcr\".indexOf(colAlign) === -1) {\n throw new ParseError(\"Expected l or c or r\", parser.nextToken);\n }\n\n parser.consume();\n parser.consumeSpaces();\n parser.expect(\"]\");\n parser.consume();\n payload.cols = [{\n type: \"align\",\n align: colAlign\n }];\n }\n }\n\n var res = parseArray(context.parser, payload, dCellStyle(context.envName)); // Populate cols with the correct number of column alignment specs.\n\n var numCols = Math.max(0, ...res.body.map(row => row.length));\n res.cols = new Array(numCols).fill({\n type: \"align\",\n align: colAlign\n });\n return delimiters ? {\n type: \"leftright\",\n mode: context.mode,\n body: [res],\n left: delimiters[0],\n right: delimiters[1],\n rightColor: undefined // \\right uninfluenced by \\color in array\n\n } : res;\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n type: \"array\",\n names: [\"smallmatrix\"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n var payload = {\n arraystretch: 0.5\n };\n var res = parseArray(context.parser, payload, \"script\");\n res.colSeparationType = \"small\";\n return res;\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n type: \"array\",\n names: [\"subarray\"],\n props: {\n numArgs: 1\n },\n\n handler(context, args) {\n // Parsing of {subarray} is similar to {array}\n var symNode = checkSymbolNodeType(args[0]);\n var colalign = symNode ? [args[0]] : assertNodeType(args[0], \"ordgroup\").body;\n var cols = colalign.map(function (nde) {\n var node = assertSymbolNodeType(nde);\n var ca = node.text; // {subarray} only recognizes \"l\" & \"c\"\n\n if (\"lc\".indexOf(ca) !== -1) {\n return {\n type: \"align\",\n align: ca\n };\n }\n\n throw new ParseError(\"Unknown column alignment: \" + ca, nde);\n });\n\n if (cols.length > 1) {\n throw new ParseError(\"{subarray} can contain only one column\");\n }\n\n var res = {\n cols,\n hskipBeforeAndAfter: false,\n arraystretch: 0.5\n };\n res = parseArray(context.parser, res, \"script\");\n\n if (res.body.length > 0 && res.body[0].length > 1) {\n throw new ParseError(\"{subarray} can contain only one column\");\n }\n\n return res;\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n}); // A cases environment (in amsmath.sty) is almost equivalent to\n// \\def\\arraystretch{1.2}%\n// \\left\\{\\begin{array}{@{}l@{\\quad}l@{}} \u2026 \\end{array}\\right.\n// {dcases} is a {cases} environment where cells are set in \\displaystyle,\n// as defined in mathtools.sty.\n// {rcases} is another mathtools environment. It's brace is on the right side.\n\ndefineEnvironment({\n type: \"array\",\n names: [\"cases\", \"dcases\", \"rcases\", \"drcases\"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n var payload = {\n arraystretch: 1.2,\n cols: [{\n type: \"align\",\n align: \"l\",\n pregap: 0,\n // TODO(kevinb) get the current style.\n // For now we use the metrics for TEXT style which is what we were\n // doing before. Before attempting to get the current style we\n // should look at TeX's behavior especially for \\over and matrices.\n postgap: 1.0\n /* 1em quad */\n\n }, {\n type: \"align\",\n align: \"l\",\n pregap: 0,\n postgap: 0\n }]\n };\n var res = parseArray(context.parser, payload, dCellStyle(context.envName));\n return {\n type: \"leftright\",\n mode: context.mode,\n body: [res],\n left: context.envName.indexOf(\"r\") > -1 ? \".\" : \"\\\\{\",\n right: context.envName.indexOf(\"r\") > -1 ? \"\\\\}\" : \".\",\n rightColor: undefined\n };\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n}); // In the align environment, one uses ampersands, &, to specify number of\n// columns in each row, and to locate spacing between each column.\n// align gets automatic numbering. align* and aligned do not.\n// The alignedat environment can be used in math mode.\n// Note that we assume \\nomallineskiplimit to be zero,\n// so that \\strut@ is the same as \\strut.\n\ndefineEnvironment({\n type: \"array\",\n names: [\"align\", \"align*\", \"aligned\", \"split\"],\n props: {\n numArgs: 0\n },\n handler: alignedHandler,\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n}); // A gathered environment is like an array environment with one centered\n// column, but where rows are considered lines so get \\jot line spacing\n// and contents are set in \\displaystyle.\n\ndefineEnvironment({\n type: \"array\",\n names: [\"gathered\", \"gather\", \"gather*\"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n if (utils.contains([\"gather\", \"gather*\"], context.envName)) {\n validateAmsEnvironmentContext(context);\n }\n\n var res = {\n cols: [{\n type: \"align\",\n align: \"c\"\n }],\n addJot: true,\n colSeparationType: \"gather\",\n autoTag: getAutoTag(context.envName),\n emptySingleRow: true,\n leqno: context.parser.settings.leqno\n };\n return parseArray(context.parser, res, \"display\");\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n}); // alignat environment is like an align environment, but one must explicitly\n// specify maximum number of columns in each row, and can adjust spacing between\n// each columns.\n\ndefineEnvironment({\n type: \"array\",\n names: [\"alignat\", \"alignat*\", \"alignedat\"],\n props: {\n numArgs: 1\n },\n handler: alignedHandler,\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n type: \"array\",\n names: [\"equation\", \"equation*\"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n validateAmsEnvironmentContext(context);\n var res = {\n autoTag: getAutoTag(context.envName),\n emptySingleRow: true,\n singleRow: true,\n maxNumCols: 1,\n leqno: context.parser.settings.leqno\n };\n return parseArray(context.parser, res, \"display\");\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n});\ndefineEnvironment({\n type: \"array\",\n names: [\"CD\"],\n props: {\n numArgs: 0\n },\n\n handler(context) {\n validateAmsEnvironmentContext(context);\n return parseCD(context.parser);\n },\n\n htmlBuilder: htmlBuilder$6,\n mathmlBuilder: mathmlBuilder$5\n});\ndefineMacro(\"\\\\nonumber\", \"\\\\gdef\\\\@eqnsw{0}\");\ndefineMacro(\"\\\\notag\", \"\\\\nonumber\"); // Catch \\hline outside array environment\n\ndefineFunction({\n type: \"text\",\n // Doesn't matter what this is.\n names: [\"\\\\hline\", \"\\\\hdashline\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInMath: true\n },\n\n handler(context, args) {\n throw new ParseError(context.funcName + \" valid only within array environment\");\n }\n\n});\n\nvar environments = _environments;\n\n// defineEnvironment definitions.\n\ndefineFunction({\n type: \"environment\",\n names: [\"\\\\begin\", \"\\\\end\"],\n props: {\n numArgs: 1,\n argTypes: [\"text\"]\n },\n\n handler(_ref, args) {\n var {\n parser,\n funcName\n } = _ref;\n var nameGroup = args[0];\n\n if (nameGroup.type !== \"ordgroup\") {\n throw new ParseError(\"Invalid environment name\", nameGroup);\n }\n\n var envName = \"\";\n\n for (var i = 0; i < nameGroup.body.length; ++i) {\n envName += assertNodeType(nameGroup.body[i], \"textord\").text;\n }\n\n if (funcName === \"\\\\begin\") {\n // begin...end is similar to left...right\n if (!environments.hasOwnProperty(envName)) {\n throw new ParseError(\"No such environment: \" + envName, nameGroup);\n } // Build the environment object. Arguments and other information will\n // be made available to the begin and end methods using properties.\n\n\n var env = environments[envName];\n var {\n args: _args,\n optArgs\n } = parser.parseArguments(\"\\\\begin{\" + envName + \"}\", env);\n var context = {\n mode: parser.mode,\n envName,\n parser\n };\n var result = env.handler(context, _args, optArgs);\n parser.expect(\"\\\\end\", false);\n var endNameToken = parser.nextToken;\n var end = assertNodeType(parser.parseFunction(), \"environment\");\n\n if (end.name !== envName) {\n throw new ParseError(\"Mismatch: \\\\begin{\" + envName + \"} matched by \\\\end{\" + end.name + \"}\", endNameToken);\n } // $FlowFixMe, \"environment\" handler returns an environment ParseNode\n\n\n return result;\n }\n\n return {\n type: \"environment\",\n mode: parser.mode,\n name: envName,\n nameGroup\n };\n }\n\n});\n\n// TODO(kevinb): implement \\\\sl and \\\\sc\n\nvar htmlBuilder$5 = (group, options) => {\n var font = group.font;\n var newOptions = options.withFont(font);\n return buildGroup$1(group.body, newOptions);\n};\n\nvar mathmlBuilder$4 = (group, options) => {\n var font = group.font;\n var newOptions = options.withFont(font);\n return buildGroup(group.body, newOptions);\n};\n\nvar fontAliases = {\n \"\\\\Bbb\": \"\\\\mathbb\",\n \"\\\\bold\": \"\\\\mathbf\",\n \"\\\\frak\": \"\\\\mathfrak\",\n \"\\\\bm\": \"\\\\boldsymbol\"\n};\ndefineFunction({\n type: \"font\",\n names: [// styles, except \\boldsymbol defined below\n \"\\\\mathrm\", \"\\\\mathit\", \"\\\\mathbf\", \"\\\\mathnormal\", \"\\\\mathsfit\", // families\n \"\\\\mathbb\", \"\\\\mathcal\", \"\\\\mathfrak\", \"\\\\mathscr\", \"\\\\mathsf\", \"\\\\mathtt\", // aliases, except \\bm defined below\n \"\\\\Bbb\", \"\\\\bold\", \"\\\\frak\"],\n props: {\n numArgs: 1,\n allowedInArgument: true\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName\n } = _ref;\n var body = normalizeArgument(args[0]);\n var func = funcName;\n\n if (func in fontAliases) {\n func = fontAliases[func];\n }\n\n return {\n type: \"font\",\n mode: parser.mode,\n font: func.slice(1),\n body\n };\n },\n htmlBuilder: htmlBuilder$5,\n mathmlBuilder: mathmlBuilder$4\n});\ndefineFunction({\n type: \"mclass\",\n names: [\"\\\\boldsymbol\", \"\\\\bm\"],\n props: {\n numArgs: 1\n },\n handler: (_ref2, args) => {\n var {\n parser\n } = _ref2;\n var body = args[0];\n var isCharacterBox = utils.isCharacterBox(body); // amsbsy.sty's \\boldsymbol uses \\binrel spacing to inherit the\n // argument's bin|rel|ord status\n\n return {\n type: \"mclass\",\n mode: parser.mode,\n mclass: binrelClass(body),\n body: [{\n type: \"font\",\n mode: parser.mode,\n font: \"boldsymbol\",\n body\n }],\n isCharacterBox: isCharacterBox\n };\n }\n}); // Old font changing functions\n\ndefineFunction({\n type: \"font\",\n names: [\"\\\\rm\", \"\\\\sf\", \"\\\\tt\", \"\\\\bf\", \"\\\\it\", \"\\\\cal\"],\n props: {\n numArgs: 0,\n allowedInText: true\n },\n handler: (_ref3, args) => {\n var {\n parser,\n funcName,\n breakOnTokenText\n } = _ref3;\n var {\n mode\n } = parser;\n var body = parser.parseExpression(true, breakOnTokenText);\n var style = \"math\" + funcName.slice(1);\n return {\n type: \"font\",\n mode: mode,\n font: style,\n body: {\n type: \"ordgroup\",\n mode: parser.mode,\n body\n }\n };\n },\n htmlBuilder: htmlBuilder$5,\n mathmlBuilder: mathmlBuilder$4\n});\n\nvar adjustStyle = (size, originalStyle) => {\n // Figure out what style this fraction should be in based on the\n // function used\n var style = originalStyle;\n\n if (size === \"display\") {\n // Get display style as a default.\n // If incoming style is sub/sup, use style.text() to get correct size.\n style = style.id >= Style$1.SCRIPT.id ? style.text() : Style$1.DISPLAY;\n } else if (size === \"text\" && style.size === Style$1.DISPLAY.size) {\n // We're in a \\tfrac but incoming style is displaystyle, so:\n style = Style$1.TEXT;\n } else if (size === \"script\") {\n style = Style$1.SCRIPT;\n } else if (size === \"scriptscript\") {\n style = Style$1.SCRIPTSCRIPT;\n }\n\n return style;\n};\n\nvar htmlBuilder$4 = (group, options) => {\n // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e).\n var style = adjustStyle(group.size, options.style);\n var nstyle = style.fracNum();\n var dstyle = style.fracDen();\n var newOptions;\n newOptions = options.havingStyle(nstyle);\n var numerm = buildGroup$1(group.numer, newOptions, options);\n\n if (group.continued) {\n // \\cfrac inserts a \\strut into the numerator.\n // Get \\strut dimensions from TeXbook page 353.\n var hStrut = 8.5 / options.fontMetrics().ptPerEm;\n var dStrut = 3.5 / options.fontMetrics().ptPerEm;\n numerm.height = numerm.height < hStrut ? hStrut : numerm.height;\n numerm.depth = numerm.depth < dStrut ? dStrut : numerm.depth;\n }\n\n newOptions = options.havingStyle(dstyle);\n var denomm = buildGroup$1(group.denom, newOptions, options);\n var rule;\n var ruleWidth;\n var ruleSpacing;\n\n if (group.hasBarLine) {\n if (group.barSize) {\n ruleWidth = calculateSize(group.barSize, options);\n rule = buildCommon.makeLineSpan(\"frac-line\", options, ruleWidth);\n } else {\n rule = buildCommon.makeLineSpan(\"frac-line\", options);\n }\n\n ruleWidth = rule.height;\n ruleSpacing = rule.height;\n } else {\n rule = null;\n ruleWidth = 0;\n ruleSpacing = options.fontMetrics().defaultRuleThickness;\n } // Rule 15b\n\n\n var numShift;\n var clearance;\n var denomShift;\n\n if (style.size === Style$1.DISPLAY.size || group.size === \"display\") {\n numShift = options.fontMetrics().num1;\n\n if (ruleWidth > 0) {\n clearance = 3 * ruleSpacing;\n } else {\n clearance = 7 * ruleSpacing;\n }\n\n denomShift = options.fontMetrics().denom1;\n } else {\n if (ruleWidth > 0) {\n numShift = options.fontMetrics().num2;\n clearance = ruleSpacing;\n } else {\n numShift = options.fontMetrics().num3;\n clearance = 3 * ruleSpacing;\n }\n\n denomShift = options.fontMetrics().denom2;\n }\n\n var frac;\n\n if (!rule) {\n // Rule 15c\n var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift);\n\n if (candidateClearance < clearance) {\n numShift += 0.5 * (clearance - candidateClearance);\n denomShift += 0.5 * (clearance - candidateClearance);\n }\n\n frac = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [{\n type: \"elem\",\n elem: denomm,\n shift: denomShift\n }, {\n type: \"elem\",\n elem: numerm,\n shift: -numShift\n }]\n }, options);\n } else {\n // Rule 15d\n var axisHeight = options.fontMetrics().axisHeight;\n\n if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) {\n numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth));\n }\n\n if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) {\n denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift));\n }\n\n var midShift = -(axisHeight - 0.5 * ruleWidth);\n frac = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [{\n type: \"elem\",\n elem: denomm,\n shift: denomShift\n }, {\n type: \"elem\",\n elem: rule,\n shift: midShift\n }, {\n type: \"elem\",\n elem: numerm,\n shift: -numShift\n }]\n }, options);\n } // Since we manually change the style sometimes (with \\dfrac or \\tfrac),\n // account for the possible size change here.\n\n\n newOptions = options.havingStyle(style);\n frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier;\n frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; // Rule 15e\n\n var delimSize;\n\n if (style.size === Style$1.DISPLAY.size) {\n delimSize = options.fontMetrics().delim1;\n } else if (style.size === Style$1.SCRIPTSCRIPT.size) {\n delimSize = options.havingStyle(Style$1.SCRIPT).fontMetrics().delim2;\n } else {\n delimSize = options.fontMetrics().delim2;\n }\n\n var leftDelim;\n var rightDelim;\n\n if (group.leftDelim == null) {\n leftDelim = makeNullDelimiter(options, [\"mopen\"]);\n } else {\n leftDelim = delimiter.customSizedDelim(group.leftDelim, delimSize, true, options.havingStyle(style), group.mode, [\"mopen\"]);\n }\n\n if (group.continued) {\n rightDelim = buildCommon.makeSpan([]); // zero width for \\cfrac\n } else if (group.rightDelim == null) {\n rightDelim = makeNullDelimiter(options, [\"mclose\"]);\n } else {\n rightDelim = delimiter.customSizedDelim(group.rightDelim, delimSize, true, options.havingStyle(style), group.mode, [\"mclose\"]);\n }\n\n return buildCommon.makeSpan([\"mord\"].concat(newOptions.sizingClasses(options)), [leftDelim, buildCommon.makeSpan([\"mfrac\"], [frac]), rightDelim], options);\n};\n\nvar mathmlBuilder$3 = (group, options) => {\n var node = new mathMLTree.MathNode(\"mfrac\", [buildGroup(group.numer, options), buildGroup(group.denom, options)]);\n\n if (!group.hasBarLine) {\n node.setAttribute(\"linethickness\", \"0px\");\n } else if (group.barSize) {\n var ruleWidth = calculateSize(group.barSize, options);\n node.setAttribute(\"linethickness\", makeEm(ruleWidth));\n }\n\n var style = adjustStyle(group.size, options.style);\n\n if (style.size !== options.style.size) {\n node = new mathMLTree.MathNode(\"mstyle\", [node]);\n var isDisplay = style.size === Style$1.DISPLAY.size ? \"true\" : \"false\";\n node.setAttribute(\"displaystyle\", isDisplay);\n node.setAttribute(\"scriptlevel\", \"0\");\n }\n\n if (group.leftDelim != null || group.rightDelim != null) {\n var withDelims = [];\n\n if (group.leftDelim != null) {\n var leftOp = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(group.leftDelim.replace(\"\\\\\", \"\"))]);\n leftOp.setAttribute(\"fence\", \"true\");\n withDelims.push(leftOp);\n }\n\n withDelims.push(node);\n\n if (group.rightDelim != null) {\n var rightOp = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(group.rightDelim.replace(\"\\\\\", \"\"))]);\n rightOp.setAttribute(\"fence\", \"true\");\n withDelims.push(rightOp);\n }\n\n return makeRow(withDelims);\n }\n\n return node;\n};\n\ndefineFunction({\n type: \"genfrac\",\n names: [\"\\\\dfrac\", \"\\\\frac\", \"\\\\tfrac\", \"\\\\dbinom\", \"\\\\binom\", \"\\\\tbinom\", \"\\\\\\\\atopfrac\", // can\u2019t be entered directly\n \"\\\\\\\\bracefrac\", \"\\\\\\\\brackfrac\" // ditto\n ],\n props: {\n numArgs: 2,\n allowedInArgument: true\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName\n } = _ref;\n var numer = args[0];\n var denom = args[1];\n var hasBarLine;\n var leftDelim = null;\n var rightDelim = null;\n var size = \"auto\";\n\n switch (funcName) {\n case \"\\\\dfrac\":\n case \"\\\\frac\":\n case \"\\\\tfrac\":\n hasBarLine = true;\n break;\n\n case \"\\\\\\\\atopfrac\":\n hasBarLine = false;\n break;\n\n case \"\\\\dbinom\":\n case \"\\\\binom\":\n case \"\\\\tbinom\":\n hasBarLine = false;\n leftDelim = \"(\";\n rightDelim = \")\";\n break;\n\n case \"\\\\\\\\bracefrac\":\n hasBarLine = false;\n leftDelim = \"\\\\{\";\n rightDelim = \"\\\\}\";\n break;\n\n case \"\\\\\\\\brackfrac\":\n hasBarLine = false;\n leftDelim = \"[\";\n rightDelim = \"]\";\n break;\n\n default:\n throw new Error(\"Unrecognized genfrac command\");\n }\n\n switch (funcName) {\n case \"\\\\dfrac\":\n case \"\\\\dbinom\":\n size = \"display\";\n break;\n\n case \"\\\\tfrac\":\n case \"\\\\tbinom\":\n size = \"text\";\n break;\n }\n\n return {\n type: \"genfrac\",\n mode: parser.mode,\n continued: false,\n numer,\n denom,\n hasBarLine,\n leftDelim,\n rightDelim,\n size,\n barSize: null\n };\n },\n htmlBuilder: htmlBuilder$4,\n mathmlBuilder: mathmlBuilder$3\n});\ndefineFunction({\n type: \"genfrac\",\n names: [\"\\\\cfrac\"],\n props: {\n numArgs: 2\n },\n handler: (_ref2, args) => {\n var {\n parser,\n funcName\n } = _ref2;\n var numer = args[0];\n var denom = args[1];\n return {\n type: \"genfrac\",\n mode: parser.mode,\n continued: true,\n numer,\n denom,\n hasBarLine: true,\n leftDelim: null,\n rightDelim: null,\n size: \"display\",\n barSize: null\n };\n }\n}); // Infix generalized fractions -- these are not rendered directly, but replaced\n// immediately by one of the variants above.\n\ndefineFunction({\n type: \"infix\",\n names: [\"\\\\over\", \"\\\\choose\", \"\\\\atop\", \"\\\\brace\", \"\\\\brack\"],\n props: {\n numArgs: 0,\n infix: true\n },\n\n handler(_ref3) {\n var {\n parser,\n funcName,\n token\n } = _ref3;\n var replaceWith;\n\n switch (funcName) {\n case \"\\\\over\":\n replaceWith = \"\\\\frac\";\n break;\n\n case \"\\\\choose\":\n replaceWith = \"\\\\binom\";\n break;\n\n case \"\\\\atop\":\n replaceWith = \"\\\\\\\\atopfrac\";\n break;\n\n case \"\\\\brace\":\n replaceWith = \"\\\\\\\\bracefrac\";\n break;\n\n case \"\\\\brack\":\n replaceWith = \"\\\\\\\\brackfrac\";\n break;\n\n default:\n throw new Error(\"Unrecognized infix genfrac command\");\n }\n\n return {\n type: \"infix\",\n mode: parser.mode,\n replaceWith,\n token\n };\n }\n\n});\nvar stylArray = [\"display\", \"text\", \"script\", \"scriptscript\"];\n\nvar delimFromValue = function delimFromValue(delimString) {\n var delim = null;\n\n if (delimString.length > 0) {\n delim = delimString;\n delim = delim === \".\" ? null : delim;\n }\n\n return delim;\n};\n\ndefineFunction({\n type: \"genfrac\",\n names: [\"\\\\genfrac\"],\n props: {\n numArgs: 6,\n allowedInArgument: true,\n argTypes: [\"math\", \"math\", \"size\", \"text\", \"math\", \"math\"]\n },\n\n handler(_ref4, args) {\n var {\n parser\n } = _ref4;\n var numer = args[4];\n var denom = args[5]; // Look into the parse nodes to get the desired delimiters.\n\n var leftNode = normalizeArgument(args[0]);\n var leftDelim = leftNode.type === \"atom\" && leftNode.family === \"open\" ? delimFromValue(leftNode.text) : null;\n var rightNode = normalizeArgument(args[1]);\n var rightDelim = rightNode.type === \"atom\" && rightNode.family === \"close\" ? delimFromValue(rightNode.text) : null;\n var barNode = assertNodeType(args[2], \"size\");\n var hasBarLine;\n var barSize = null;\n\n if (barNode.isBlank) {\n // \\genfrac acts differently than \\above.\n // \\genfrac treats an empty size group as a signal to use a\n // standard bar size. \\above would see size = 0 and omit the bar.\n hasBarLine = true;\n } else {\n barSize = barNode.value;\n hasBarLine = barSize.number > 0;\n } // Find out if we want displaystyle, textstyle, etc.\n\n\n var size = \"auto\";\n var styl = args[3];\n\n if (styl.type === \"ordgroup\") {\n if (styl.body.length > 0) {\n var textOrd = assertNodeType(styl.body[0], \"textord\");\n size = stylArray[Number(textOrd.text)];\n }\n } else {\n styl = assertNodeType(styl, \"textord\");\n size = stylArray[Number(styl.text)];\n }\n\n return {\n type: \"genfrac\",\n mode: parser.mode,\n numer,\n denom,\n continued: false,\n hasBarLine,\n barSize,\n leftDelim,\n rightDelim,\n size\n };\n },\n\n htmlBuilder: htmlBuilder$4,\n mathmlBuilder: mathmlBuilder$3\n}); // \\above is an infix fraction that also defines a fraction bar size.\n\ndefineFunction({\n type: \"infix\",\n names: [\"\\\\above\"],\n props: {\n numArgs: 1,\n argTypes: [\"size\"],\n infix: true\n },\n\n handler(_ref5, args) {\n var {\n parser,\n funcName,\n token\n } = _ref5;\n return {\n type: \"infix\",\n mode: parser.mode,\n replaceWith: \"\\\\\\\\abovefrac\",\n size: assertNodeType(args[0], \"size\").value,\n token\n };\n }\n\n});\ndefineFunction({\n type: \"genfrac\",\n names: [\"\\\\\\\\abovefrac\"],\n props: {\n numArgs: 3,\n argTypes: [\"math\", \"size\", \"math\"]\n },\n handler: (_ref6, args) => {\n var {\n parser,\n funcName\n } = _ref6;\n var numer = args[0];\n var barSize = assert(assertNodeType(args[1], \"infix\").size);\n var denom = args[2];\n var hasBarLine = barSize.number > 0;\n return {\n type: \"genfrac\",\n mode: parser.mode,\n numer,\n denom,\n continued: false,\n hasBarLine,\n barSize,\n leftDelim: null,\n rightDelim: null,\n size: \"auto\"\n };\n },\n htmlBuilder: htmlBuilder$4,\n mathmlBuilder: mathmlBuilder$3\n});\n\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only \"horizBrace\", but\n// also \"supsub\" since an over/underbrace can affect super/subscripting.\nvar htmlBuilder$3 = (grp, options) => {\n var style = options.style; // Pull out the `ParseNode<\"horizBrace\">` if `grp` is a \"supsub\" node.\n\n var supSubGroup;\n var group;\n\n if (grp.type === \"supsub\") {\n // Ref: LaTeX source2e: }}}}\\limits}\n // i.e. LaTeX treats the brace similar to an op and passes it\n // with \\limits, so we need to assign supsub style.\n supSubGroup = grp.sup ? buildGroup$1(grp.sup, options.havingStyle(style.sup()), options) : buildGroup$1(grp.sub, options.havingStyle(style.sub()), options);\n group = assertNodeType(grp.base, \"horizBrace\");\n } else {\n group = assertNodeType(grp, \"horizBrace\");\n } // Build the base group\n\n\n var body = buildGroup$1(group.base, options.havingBaseStyle(Style$1.DISPLAY)); // Create the stretchy element\n\n var braceBody = stretchy.svgSpan(group, options); // Generate the vlist, with the appropriate kerns \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n // This first vlist contains the content and the brace: equation\n\n var vlist;\n\n if (group.isOver) {\n vlist = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: body\n }, {\n type: \"kern\",\n size: 0.1\n }, {\n type: \"elem\",\n elem: braceBody\n }]\n }, options); // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n\n vlist.children[0].children[0].children[1].classes.push(\"svg-align\");\n } else {\n vlist = buildCommon.makeVList({\n positionType: \"bottom\",\n positionData: body.depth + 0.1 + braceBody.height,\n children: [{\n type: \"elem\",\n elem: braceBody\n }, {\n type: \"kern\",\n size: 0.1\n }, {\n type: \"elem\",\n elem: body\n }]\n }, options); // $FlowFixMe: Replace this with passing \"svg-align\" into makeVList.\n\n vlist.children[0].children[0].children[0].classes.push(\"svg-align\");\n }\n\n if (supSubGroup) {\n // To write the supsub, wrap the first vlist in another vlist:\n // They can't all go in the same vlist, because the note might be\n // wider than the equation. We want the equation to control the\n // brace width.\n // note long note long note\n // \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513 or \u250F\u2501\u2501\u2501\u2513 not \u250F\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n // equation eqn eqn\n var vSpan = buildCommon.makeSpan([\"mord\", group.isOver ? \"mover\" : \"munder\"], [vlist], options);\n\n if (group.isOver) {\n vlist = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: vSpan\n }, {\n type: \"kern\",\n size: 0.2\n }, {\n type: \"elem\",\n elem: supSubGroup\n }]\n }, options);\n } else {\n vlist = buildCommon.makeVList({\n positionType: \"bottom\",\n positionData: vSpan.depth + 0.2 + supSubGroup.height + supSubGroup.depth,\n children: [{\n type: \"elem\",\n elem: supSubGroup\n }, {\n type: \"kern\",\n size: 0.2\n }, {\n type: \"elem\",\n elem: vSpan\n }]\n }, options);\n }\n }\n\n return buildCommon.makeSpan([\"mord\", group.isOver ? \"mover\" : \"munder\"], [vlist], options);\n};\n\nvar mathmlBuilder$2 = (group, options) => {\n var accentNode = stretchy.mathMLnode(group.label);\n return new mathMLTree.MathNode(group.isOver ? \"mover\" : \"munder\", [buildGroup(group.base, options), accentNode]);\n}; // Horizontal stretchy braces\n\n\ndefineFunction({\n type: \"horizBrace\",\n names: [\"\\\\overbrace\", \"\\\\underbrace\"],\n props: {\n numArgs: 1\n },\n\n handler(_ref, args) {\n var {\n parser,\n funcName\n } = _ref;\n return {\n type: \"horizBrace\",\n mode: parser.mode,\n label: funcName,\n isOver: /^\\\\over/.test(funcName),\n base: args[0]\n };\n },\n\n htmlBuilder: htmlBuilder$3,\n mathmlBuilder: mathmlBuilder$2\n});\n\ndefineFunction({\n type: \"href\",\n names: [\"\\\\href\"],\n props: {\n numArgs: 2,\n argTypes: [\"url\", \"original\"],\n allowedInText: true\n },\n handler: (_ref, args) => {\n var {\n parser\n } = _ref;\n var body = args[1];\n var href = assertNodeType(args[0], \"url\").url;\n\n if (!parser.settings.isTrusted({\n command: \"\\\\href\",\n url: href\n })) {\n return parser.formatUnsupportedCmd(\"\\\\href\");\n }\n\n return {\n type: \"href\",\n mode: parser.mode,\n href,\n body: ordargument(body)\n };\n },\n htmlBuilder: (group, options) => {\n var elements = buildExpression$1(group.body, options, false);\n return buildCommon.makeAnchor(group.href, [], elements, options);\n },\n mathmlBuilder: (group, options) => {\n var math = buildExpressionRow(group.body, options);\n\n if (!(math instanceof MathNode)) {\n math = new MathNode(\"mrow\", [math]);\n }\n\n math.setAttribute(\"href\", group.href);\n return math;\n }\n});\ndefineFunction({\n type: \"href\",\n names: [\"\\\\url\"],\n props: {\n numArgs: 1,\n argTypes: [\"url\"],\n allowedInText: true\n },\n handler: (_ref2, args) => {\n var {\n parser\n } = _ref2;\n var href = assertNodeType(args[0], \"url\").url;\n\n if (!parser.settings.isTrusted({\n command: \"\\\\url\",\n url: href\n })) {\n return parser.formatUnsupportedCmd(\"\\\\url\");\n }\n\n var chars = [];\n\n for (var i = 0; i < href.length; i++) {\n var c = href[i];\n\n if (c === \"~\") {\n c = \"\\\\textasciitilde\";\n }\n\n chars.push({\n type: \"textord\",\n mode: \"text\",\n text: c\n });\n }\n\n var body = {\n type: \"text\",\n mode: parser.mode,\n font: \"\\\\texttt\",\n body: chars\n };\n return {\n type: \"href\",\n mode: parser.mode,\n href,\n body: ordargument(body)\n };\n }\n});\n\n// In LaTeX, \\vcenter can act only on a box, as in\n// \\vcenter{\\hbox{$\\frac{a+b}{\\dfrac{c}{d}}$}}\n// This function by itself doesn't do anything but prevent a soft line break.\n\ndefineFunction({\n type: \"hbox\",\n names: [\"\\\\hbox\"],\n props: {\n numArgs: 1,\n argTypes: [\"text\"],\n allowedInText: true,\n primitive: true\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n return {\n type: \"hbox\",\n mode: parser.mode,\n body: ordargument(args[0])\n };\n },\n\n htmlBuilder(group, options) {\n var elements = buildExpression$1(group.body, options, false);\n return buildCommon.makeFragment(elements);\n },\n\n mathmlBuilder(group, options) {\n return new mathMLTree.MathNode(\"mrow\", buildExpression(group.body, options));\n }\n\n});\n\ndefineFunction({\n type: \"html\",\n names: [\"\\\\htmlClass\", \"\\\\htmlId\", \"\\\\htmlStyle\", \"\\\\htmlData\"],\n props: {\n numArgs: 2,\n argTypes: [\"raw\", \"original\"],\n allowedInText: true\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName,\n token\n } = _ref;\n var value = assertNodeType(args[0], \"raw\").string;\n var body = args[1];\n\n if (parser.settings.strict) {\n parser.settings.reportNonstrict(\"htmlExtension\", \"HTML extension is disabled on strict mode\");\n }\n\n var trustContext;\n var attributes = {};\n\n switch (funcName) {\n case \"\\\\htmlClass\":\n attributes.class = value;\n trustContext = {\n command: \"\\\\htmlClass\",\n class: value\n };\n break;\n\n case \"\\\\htmlId\":\n attributes.id = value;\n trustContext = {\n command: \"\\\\htmlId\",\n id: value\n };\n break;\n\n case \"\\\\htmlStyle\":\n attributes.style = value;\n trustContext = {\n command: \"\\\\htmlStyle\",\n style: value\n };\n break;\n\n case \"\\\\htmlData\":\n {\n var data = value.split(\",\");\n\n for (var i = 0; i < data.length; i++) {\n var keyVal = data[i].split(\"=\");\n\n if (keyVal.length !== 2) {\n throw new ParseError(\"Error parsing key-value for \\\\htmlData\");\n }\n\n attributes[\"data-\" + keyVal[0].trim()] = keyVal[1].trim();\n }\n\n trustContext = {\n command: \"\\\\htmlData\",\n attributes\n };\n break;\n }\n\n default:\n throw new Error(\"Unrecognized html command\");\n }\n\n if (!parser.settings.isTrusted(trustContext)) {\n return parser.formatUnsupportedCmd(funcName);\n }\n\n return {\n type: \"html\",\n mode: parser.mode,\n attributes,\n body: ordargument(body)\n };\n },\n htmlBuilder: (group, options) => {\n var elements = buildExpression$1(group.body, options, false);\n var classes = [\"enclosing\"];\n\n if (group.attributes.class) {\n classes.push(...group.attributes.class.trim().split(/\\s+/));\n }\n\n var span = buildCommon.makeSpan(classes, elements, options);\n\n for (var attr in group.attributes) {\n if (attr !== \"class\" && group.attributes.hasOwnProperty(attr)) {\n span.setAttribute(attr, group.attributes[attr]);\n }\n }\n\n return span;\n },\n mathmlBuilder: (group, options) => {\n return buildExpressionRow(group.body, options);\n }\n});\n\ndefineFunction({\n type: \"htmlmathml\",\n names: [\"\\\\html@mathml\"],\n props: {\n numArgs: 2,\n allowedInText: true\n },\n handler: (_ref, args) => {\n var {\n parser\n } = _ref;\n return {\n type: \"htmlmathml\",\n mode: parser.mode,\n html: ordargument(args[0]),\n mathml: ordargument(args[1])\n };\n },\n htmlBuilder: (group, options) => {\n var elements = buildExpression$1(group.html, options, false);\n return buildCommon.makeFragment(elements);\n },\n mathmlBuilder: (group, options) => {\n return buildExpressionRow(group.mathml, options);\n }\n});\n\nvar sizeData = function sizeData(str) {\n if (/^[-+]? *(\\d+(\\.\\d*)?|\\.\\d+)$/.test(str)) {\n // str is a number with no unit specified.\n // default unit is bp, per graphix package.\n return {\n number: +str,\n unit: \"bp\"\n };\n } else {\n var match = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/.exec(str);\n\n if (!match) {\n throw new ParseError(\"Invalid size: '\" + str + \"' in \\\\includegraphics\");\n }\n\n var data = {\n number: +(match[1] + match[2]),\n // sign + magnitude, cast to number\n unit: match[3]\n };\n\n if (!validUnit(data)) {\n throw new ParseError(\"Invalid unit: '\" + data.unit + \"' in \\\\includegraphics.\");\n }\n\n return data;\n }\n};\n\ndefineFunction({\n type: \"includegraphics\",\n names: [\"\\\\includegraphics\"],\n props: {\n numArgs: 1,\n numOptionalArgs: 1,\n argTypes: [\"raw\", \"url\"],\n allowedInText: false\n },\n handler: (_ref, args, optArgs) => {\n var {\n parser\n } = _ref;\n var width = {\n number: 0,\n unit: \"em\"\n };\n var height = {\n number: 0.9,\n unit: \"em\"\n }; // sorta character sized.\n\n var totalheight = {\n number: 0,\n unit: \"em\"\n };\n var alt = \"\";\n\n if (optArgs[0]) {\n var attributeStr = assertNodeType(optArgs[0], \"raw\").string; // Parser.js does not parse key/value pairs. We get a string.\n\n var attributes = attributeStr.split(\",\");\n\n for (var i = 0; i < attributes.length; i++) {\n var keyVal = attributes[i].split(\"=\");\n\n if (keyVal.length === 2) {\n var str = keyVal[1].trim();\n\n switch (keyVal[0].trim()) {\n case \"alt\":\n alt = str;\n break;\n\n case \"width\":\n width = sizeData(str);\n break;\n\n case \"height\":\n height = sizeData(str);\n break;\n\n case \"totalheight\":\n totalheight = sizeData(str);\n break;\n\n default:\n throw new ParseError(\"Invalid key: '\" + keyVal[0] + \"' in \\\\includegraphics.\");\n }\n }\n }\n }\n\n var src = assertNodeType(args[0], \"url\").url;\n\n if (alt === \"\") {\n // No alt given. Use the file name. Strip away the path.\n alt = src;\n alt = alt.replace(/^.*[\\\\/]/, '');\n alt = alt.substring(0, alt.lastIndexOf('.'));\n }\n\n if (!parser.settings.isTrusted({\n command: \"\\\\includegraphics\",\n url: src\n })) {\n return parser.formatUnsupportedCmd(\"\\\\includegraphics\");\n }\n\n return {\n type: \"includegraphics\",\n mode: parser.mode,\n alt: alt,\n width: width,\n height: height,\n totalheight: totalheight,\n src: src\n };\n },\n htmlBuilder: (group, options) => {\n var height = calculateSize(group.height, options);\n var depth = 0;\n\n if (group.totalheight.number > 0) {\n depth = calculateSize(group.totalheight, options) - height;\n }\n\n var width = 0;\n\n if (group.width.number > 0) {\n width = calculateSize(group.width, options);\n }\n\n var style = {\n height: makeEm(height + depth)\n };\n\n if (width > 0) {\n style.width = makeEm(width);\n }\n\n if (depth > 0) {\n style.verticalAlign = makeEm(-depth);\n }\n\n var node = new Img(group.src, group.alt, style);\n node.height = height;\n node.depth = depth;\n return node;\n },\n mathmlBuilder: (group, options) => {\n var node = new mathMLTree.MathNode(\"mglyph\", []);\n node.setAttribute(\"alt\", group.alt);\n var height = calculateSize(group.height, options);\n var depth = 0;\n\n if (group.totalheight.number > 0) {\n depth = calculateSize(group.totalheight, options) - height;\n node.setAttribute(\"valign\", makeEm(-depth));\n }\n\n node.setAttribute(\"height\", makeEm(height + depth));\n\n if (group.width.number > 0) {\n var width = calculateSize(group.width, options);\n node.setAttribute(\"width\", makeEm(width));\n }\n\n node.setAttribute(\"src\", group.src);\n return node;\n }\n});\n\n// Horizontal spacing commands\n\ndefineFunction({\n type: \"kern\",\n names: [\"\\\\kern\", \"\\\\mkern\", \"\\\\hskip\", \"\\\\mskip\"],\n props: {\n numArgs: 1,\n argTypes: [\"size\"],\n primitive: true,\n allowedInText: true\n },\n\n handler(_ref, args) {\n var {\n parser,\n funcName\n } = _ref;\n var size = assertNodeType(args[0], \"size\");\n\n if (parser.settings.strict) {\n var mathFunction = funcName[1] === 'm'; // \\mkern, \\mskip\n\n var muUnit = size.value.unit === 'mu';\n\n if (mathFunction) {\n if (!muUnit) {\n parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" supports only mu units, \" + (\"not \" + size.value.unit + \" units\"));\n }\n\n if (parser.mode !== \"math\") {\n parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" works only in math mode\");\n }\n } else {\n // !mathFunction\n if (muUnit) {\n parser.settings.reportNonstrict(\"mathVsTextUnits\", \"LaTeX's \" + funcName + \" doesn't support mu units\");\n }\n }\n }\n\n return {\n type: \"kern\",\n mode: parser.mode,\n dimension: size.value\n };\n },\n\n htmlBuilder(group, options) {\n return buildCommon.makeGlue(group.dimension, options);\n },\n\n mathmlBuilder(group, options) {\n var dimension = calculateSize(group.dimension, options);\n return new mathMLTree.SpaceNode(dimension);\n }\n\n});\n\n// Horizontal overlap functions\ndefineFunction({\n type: \"lap\",\n names: [\"\\\\mathllap\", \"\\\\mathrlap\", \"\\\\mathclap\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName\n } = _ref;\n var body = args[0];\n return {\n type: \"lap\",\n mode: parser.mode,\n alignment: funcName.slice(5),\n body\n };\n },\n htmlBuilder: (group, options) => {\n // mathllap, mathrlap, mathclap\n var inner;\n\n if (group.alignment === \"clap\") {\n // ref: https://www.math.lsu.edu/~aperlis/publications/mathclap/\n inner = buildCommon.makeSpan([], [buildGroup$1(group.body, options)]); // wrap, since CSS will center a .clap > .inner > span\n\n inner = buildCommon.makeSpan([\"inner\"], [inner], options);\n } else {\n inner = buildCommon.makeSpan([\"inner\"], [buildGroup$1(group.body, options)]);\n }\n\n var fix = buildCommon.makeSpan([\"fix\"], []);\n var node = buildCommon.makeSpan([group.alignment], [inner, fix], options); // At this point, we have correctly set horizontal alignment of the\n // two items involved in the lap.\n // Next, use a strut to set the height of the HTML bounding box.\n // Otherwise, a tall argument may be misplaced.\n // This code resolved issue #1153\n\n var strut = buildCommon.makeSpan([\"strut\"]);\n strut.style.height = makeEm(node.height + node.depth);\n\n if (node.depth) {\n strut.style.verticalAlign = makeEm(-node.depth);\n }\n\n node.children.unshift(strut); // Next, prevent vertical misplacement when next to something tall.\n // This code resolves issue #1234\n\n node = buildCommon.makeSpan([\"thinbox\"], [node], options);\n return buildCommon.makeSpan([\"mord\", \"vbox\"], [node], options);\n },\n mathmlBuilder: (group, options) => {\n // mathllap, mathrlap, mathclap\n var node = new mathMLTree.MathNode(\"mpadded\", [buildGroup(group.body, options)]);\n\n if (group.alignment !== \"rlap\") {\n var offset = group.alignment === \"llap\" ? \"-1\" : \"-0.5\";\n node.setAttribute(\"lspace\", offset + \"width\");\n }\n\n node.setAttribute(\"width\", \"0px\");\n return node;\n }\n});\n\ndefineFunction({\n type: \"styling\",\n names: [\"\\\\(\", \"$\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInMath: false\n },\n\n handler(_ref, args) {\n var {\n funcName,\n parser\n } = _ref;\n var outerMode = parser.mode;\n parser.switchMode(\"math\");\n var close = funcName === \"\\\\(\" ? \"\\\\)\" : \"$\";\n var body = parser.parseExpression(false, close);\n parser.expect(close);\n parser.switchMode(outerMode);\n return {\n type: \"styling\",\n mode: parser.mode,\n style: \"text\",\n body\n };\n }\n\n}); // Check for extra closing math delimiters\n\ndefineFunction({\n type: \"text\",\n // Doesn't matter what this is.\n names: [\"\\\\)\", \"\\\\]\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInMath: false\n },\n\n handler(context, args) {\n throw new ParseError(\"Mismatched \" + context.funcName);\n }\n\n});\n\nvar chooseMathStyle = (group, options) => {\n switch (options.style.size) {\n case Style$1.DISPLAY.size:\n return group.display;\n\n case Style$1.TEXT.size:\n return group.text;\n\n case Style$1.SCRIPT.size:\n return group.script;\n\n case Style$1.SCRIPTSCRIPT.size:\n return group.scriptscript;\n\n default:\n return group.text;\n }\n};\n\ndefineFunction({\n type: \"mathchoice\",\n names: [\"\\\\mathchoice\"],\n props: {\n numArgs: 4,\n primitive: true\n },\n handler: (_ref, args) => {\n var {\n parser\n } = _ref;\n return {\n type: \"mathchoice\",\n mode: parser.mode,\n display: ordargument(args[0]),\n text: ordargument(args[1]),\n script: ordargument(args[2]),\n scriptscript: ordargument(args[3])\n };\n },\n htmlBuilder: (group, options) => {\n var body = chooseMathStyle(group, options);\n var elements = buildExpression$1(body, options, false);\n return buildCommon.makeFragment(elements);\n },\n mathmlBuilder: (group, options) => {\n var body = chooseMathStyle(group, options);\n return buildExpressionRow(body, options);\n }\n});\n\nvar assembleSupSub = (base, supGroup, subGroup, options, style, slant, baseShift) => {\n base = buildCommon.makeSpan([], [base]);\n var subIsSingleCharacter = subGroup && utils.isCharacterBox(subGroup);\n var sub;\n var sup; // We manually have to handle the superscripts and subscripts. This,\n // aside from the kern calculations, is copied from supsub.\n\n if (supGroup) {\n var elem = buildGroup$1(supGroup, options.havingStyle(style.sup()), options);\n sup = {\n elem,\n kern: Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - elem.depth)\n };\n }\n\n if (subGroup) {\n var _elem = buildGroup$1(subGroup, options.havingStyle(style.sub()), options);\n\n sub = {\n elem: _elem,\n kern: Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - _elem.height)\n };\n } // Build the final group as a vlist of the possible subscript, base,\n // and possible superscript.\n\n\n var finalGroup;\n\n if (sup && sub) {\n var bottom = options.fontMetrics().bigOpSpacing5 + sub.elem.height + sub.elem.depth + sub.kern + base.depth + baseShift;\n finalGroup = buildCommon.makeVList({\n positionType: \"bottom\",\n positionData: bottom,\n children: [{\n type: \"kern\",\n size: options.fontMetrics().bigOpSpacing5\n }, {\n type: \"elem\",\n elem: sub.elem,\n marginLeft: makeEm(-slant)\n }, {\n type: \"kern\",\n size: sub.kern\n }, {\n type: \"elem\",\n elem: base\n }, {\n type: \"kern\",\n size: sup.kern\n }, {\n type: \"elem\",\n elem: sup.elem,\n marginLeft: makeEm(slant)\n }, {\n type: \"kern\",\n size: options.fontMetrics().bigOpSpacing5\n }]\n }, options);\n } else if (sub) {\n var top = base.height - baseShift; // Shift the limits by the slant of the symbol. Note\n // that we are supposed to shift the limits by 1/2 of the slant,\n // but since we are centering the limits adding a full slant of\n // margin will shift by 1/2 that.\n\n finalGroup = buildCommon.makeVList({\n positionType: \"top\",\n positionData: top,\n children: [{\n type: \"kern\",\n size: options.fontMetrics().bigOpSpacing5\n }, {\n type: \"elem\",\n elem: sub.elem,\n marginLeft: makeEm(-slant)\n }, {\n type: \"kern\",\n size: sub.kern\n }, {\n type: \"elem\",\n elem: base\n }]\n }, options);\n } else if (sup) {\n var _bottom = base.depth + baseShift;\n\n finalGroup = buildCommon.makeVList({\n positionType: \"bottom\",\n positionData: _bottom,\n children: [{\n type: \"elem\",\n elem: base\n }, {\n type: \"kern\",\n size: sup.kern\n }, {\n type: \"elem\",\n elem: sup.elem,\n marginLeft: makeEm(slant)\n }, {\n type: \"kern\",\n size: options.fontMetrics().bigOpSpacing5\n }]\n }, options);\n } else {\n // This case probably shouldn't occur (this would mean the\n // supsub was sending us a group with no superscript or\n // subscript) but be safe.\n return base;\n }\n\n var parts = [finalGroup];\n\n if (sub && slant !== 0 && !subIsSingleCharacter) {\n // A negative margin-left was applied to the lower limit.\n // Avoid an overlap by placing a spacer on the left on the group.\n var spacer = buildCommon.makeSpan([\"mspace\"], [], options);\n spacer.style.marginRight = makeEm(slant);\n parts.unshift(spacer);\n }\n\n return buildCommon.makeSpan([\"mop\", \"op-limits\"], parts, options);\n};\n\n// Limits, symbols\n// Most operators have a large successor symbol, but these don't.\nvar noSuccessor = [\"\\\\smallint\"]; // NOTE: Unlike most `htmlBuilder`s, this one handles not only \"op\", but also\n// \"supsub\" since some of them (like \\int) can affect super/subscripting.\n\nvar htmlBuilder$2 = (grp, options) => {\n // Operators are handled in the TeXbook pg. 443-444, rule 13(a).\n var supGroup;\n var subGroup;\n var hasLimits = false;\n var group;\n\n if (grp.type === \"supsub\") {\n // If we have limits, supsub will pass us its group to handle. Pull\n // out the superscript and subscript and set the group to the op in\n // its base.\n supGroup = grp.sup;\n subGroup = grp.sub;\n group = assertNodeType(grp.base, \"op\");\n hasLimits = true;\n } else {\n group = assertNodeType(grp, \"op\");\n }\n\n var style = options.style;\n var large = false;\n\n if (style.size === Style$1.DISPLAY.size && group.symbol && !utils.contains(noSuccessor, group.name)) {\n // Most symbol operators get larger in displaystyle (rule 13)\n large = true;\n }\n\n var base;\n\n if (group.symbol) {\n // If this is a symbol, create the symbol.\n var fontName = large ? \"Size2-Regular\" : \"Size1-Regular\";\n var stash = \"\";\n\n if (group.name === \"\\\\oiint\" || group.name === \"\\\\oiiint\") {\n // No font glyphs yet, so use a glyph w/o the oval.\n // TODO: When font glyphs are available, delete this code.\n stash = group.name.slice(1);\n group.name = stash === \"oiint\" ? \"\\\\iint\" : \"\\\\iiint\";\n }\n\n base = buildCommon.makeSymbol(group.name, fontName, \"math\", options, [\"mop\", \"op-symbol\", large ? \"large-op\" : \"small-op\"]);\n\n if (stash.length > 0) {\n // We're in \\oiint or \\oiiint. Overlay the oval.\n // TODO: When font glyphs are available, delete this code.\n var italic = base.italic;\n var oval = buildCommon.staticSvg(stash + \"Size\" + (large ? \"2\" : \"1\"), options);\n base = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: [{\n type: \"elem\",\n elem: base,\n shift: 0\n }, {\n type: \"elem\",\n elem: oval,\n shift: large ? 0.08 : 0\n }]\n }, options);\n group.name = \"\\\\\" + stash;\n base.classes.unshift(\"mop\"); // $FlowFixMe\n\n base.italic = italic;\n }\n } else if (group.body) {\n // If this is a list, compose that list.\n var inner = buildExpression$1(group.body, options, true);\n\n if (inner.length === 1 && inner[0] instanceof SymbolNode) {\n base = inner[0];\n base.classes[0] = \"mop\"; // replace old mclass\n } else {\n base = buildCommon.makeSpan([\"mop\"], inner, options);\n }\n } else {\n // Otherwise, this is a text operator. Build the text from the\n // operator's name.\n var output = [];\n\n for (var i = 1; i < group.name.length; i++) {\n output.push(buildCommon.mathsym(group.name[i], group.mode, options));\n }\n\n base = buildCommon.makeSpan([\"mop\"], output, options);\n } // If content of op is a single symbol, shift it vertically.\n\n\n var baseShift = 0;\n var slant = 0;\n\n if ((base instanceof SymbolNode || group.name === \"\\\\oiint\" || group.name === \"\\\\oiiint\") && !group.suppressBaseShift) {\n // We suppress the shift of the base of \\overset and \\underset. Otherwise,\n // shift the symbol so its center lies on the axis (rule 13). It\n // appears that our fonts have the centers of the symbols already\n // almost on the axis, so these numbers are very small. Note we\n // don't actually apply this here, but instead it is used either in\n // the vlist creation or separately when there are no limits.\n baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; // The slant of the symbol is just its italic correction.\n // $FlowFixMe\n\n slant = base.italic;\n }\n\n if (hasLimits) {\n return assembleSupSub(base, supGroup, subGroup, options, style, slant, baseShift);\n } else {\n if (baseShift) {\n base.style.position = \"relative\";\n base.style.top = makeEm(baseShift);\n }\n\n return base;\n }\n};\n\nvar mathmlBuilder$1 = (group, options) => {\n var node;\n\n if (group.symbol) {\n // This is a symbol. Just add the symbol.\n node = new MathNode(\"mo\", [makeText(group.name, group.mode)]);\n\n if (utils.contains(noSuccessor, group.name)) {\n node.setAttribute(\"largeop\", \"false\");\n }\n } else if (group.body) {\n // This is an operator with children. Add them.\n node = new MathNode(\"mo\", buildExpression(group.body, options));\n } else {\n // This is a text operator. Add all of the characters from the\n // operator's name.\n node = new MathNode(\"mi\", [new TextNode(group.name.slice(1))]); // Append an .\n // ref: https://www.w3.org/TR/REC-MathML/chap3_2.html#sec3.2.4\n\n var operator = new MathNode(\"mo\", [makeText(\"\\u2061\", \"text\")]);\n\n if (group.parentIsSupSub) {\n node = new MathNode(\"mrow\", [node, operator]);\n } else {\n node = newDocumentFragment([node, operator]);\n }\n }\n\n return node;\n};\n\nvar singleCharBigOps = {\n \"\\u220F\": \"\\\\prod\",\n \"\\u2210\": \"\\\\coprod\",\n \"\\u2211\": \"\\\\sum\",\n \"\\u22c0\": \"\\\\bigwedge\",\n \"\\u22c1\": \"\\\\bigvee\",\n \"\\u22c2\": \"\\\\bigcap\",\n \"\\u22c3\": \"\\\\bigcup\",\n \"\\u2a00\": \"\\\\bigodot\",\n \"\\u2a01\": \"\\\\bigoplus\",\n \"\\u2a02\": \"\\\\bigotimes\",\n \"\\u2a04\": \"\\\\biguplus\",\n \"\\u2a06\": \"\\\\bigsqcup\"\n};\ndefineFunction({\n type: \"op\",\n names: [\"\\\\coprod\", \"\\\\bigvee\", \"\\\\bigwedge\", \"\\\\biguplus\", \"\\\\bigcap\", \"\\\\bigcup\", \"\\\\intop\", \"\\\\prod\", \"\\\\sum\", \"\\\\bigotimes\", \"\\\\bigoplus\", \"\\\\bigodot\", \"\\\\bigsqcup\", \"\\\\smallint\", \"\\u220F\", \"\\u2210\", \"\\u2211\", \"\\u22c0\", \"\\u22c1\", \"\\u22c2\", \"\\u22c3\", \"\\u2a00\", \"\\u2a01\", \"\\u2a02\", \"\\u2a04\", \"\\u2a06\"],\n props: {\n numArgs: 0\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName\n } = _ref;\n var fName = funcName;\n\n if (fName.length === 1) {\n fName = singleCharBigOps[fName];\n }\n\n return {\n type: \"op\",\n mode: parser.mode,\n limits: true,\n parentIsSupSub: false,\n symbol: true,\n name: fName\n };\n },\n htmlBuilder: htmlBuilder$2,\n mathmlBuilder: mathmlBuilder$1\n}); // Note: calling defineFunction with a type that's already been defined only\n// works because the same htmlBuilder and mathmlBuilder are being used.\n\ndefineFunction({\n type: \"op\",\n names: [\"\\\\mathop\"],\n props: {\n numArgs: 1,\n primitive: true\n },\n handler: (_ref2, args) => {\n var {\n parser\n } = _ref2;\n var body = args[0];\n return {\n type: \"op\",\n mode: parser.mode,\n limits: false,\n parentIsSupSub: false,\n symbol: false,\n body: ordargument(body)\n };\n },\n htmlBuilder: htmlBuilder$2,\n mathmlBuilder: mathmlBuilder$1\n}); // There are 2 flags for operators; whether they produce limits in\n// displaystyle, and whether they are symbols and should grow in\n// displaystyle. These four groups cover the four possible choices.\n\nvar singleCharIntegrals = {\n \"\\u222b\": \"\\\\int\",\n \"\\u222c\": \"\\\\iint\",\n \"\\u222d\": \"\\\\iiint\",\n \"\\u222e\": \"\\\\oint\",\n \"\\u222f\": \"\\\\oiint\",\n \"\\u2230\": \"\\\\oiiint\"\n}; // No limits, not symbols\n\ndefineFunction({\n type: \"op\",\n names: [\"\\\\arcsin\", \"\\\\arccos\", \"\\\\arctan\", \"\\\\arctg\", \"\\\\arcctg\", \"\\\\arg\", \"\\\\ch\", \"\\\\cos\", \"\\\\cosec\", \"\\\\cosh\", \"\\\\cot\", \"\\\\cotg\", \"\\\\coth\", \"\\\\csc\", \"\\\\ctg\", \"\\\\cth\", \"\\\\deg\", \"\\\\dim\", \"\\\\exp\", \"\\\\hom\", \"\\\\ker\", \"\\\\lg\", \"\\\\ln\", \"\\\\log\", \"\\\\sec\", \"\\\\sin\", \"\\\\sinh\", \"\\\\sh\", \"\\\\tan\", \"\\\\tanh\", \"\\\\tg\", \"\\\\th\"],\n props: {\n numArgs: 0\n },\n\n handler(_ref3) {\n var {\n parser,\n funcName\n } = _ref3;\n return {\n type: \"op\",\n mode: parser.mode,\n limits: false,\n parentIsSupSub: false,\n symbol: false,\n name: funcName\n };\n },\n\n htmlBuilder: htmlBuilder$2,\n mathmlBuilder: mathmlBuilder$1\n}); // Limits, not symbols\n\ndefineFunction({\n type: \"op\",\n names: [\"\\\\det\", \"\\\\gcd\", \"\\\\inf\", \"\\\\lim\", \"\\\\max\", \"\\\\min\", \"\\\\Pr\", \"\\\\sup\"],\n props: {\n numArgs: 0\n },\n\n handler(_ref4) {\n var {\n parser,\n funcName\n } = _ref4;\n return {\n type: \"op\",\n mode: parser.mode,\n limits: true,\n parentIsSupSub: false,\n symbol: false,\n name: funcName\n };\n },\n\n htmlBuilder: htmlBuilder$2,\n mathmlBuilder: mathmlBuilder$1\n}); // No limits, symbols\n\ndefineFunction({\n type: \"op\",\n names: [\"\\\\int\", \"\\\\iint\", \"\\\\iiint\", \"\\\\oint\", \"\\\\oiint\", \"\\\\oiiint\", \"\\u222b\", \"\\u222c\", \"\\u222d\", \"\\u222e\", \"\\u222f\", \"\\u2230\"],\n props: {\n numArgs: 0\n },\n\n handler(_ref5) {\n var {\n parser,\n funcName\n } = _ref5;\n var fName = funcName;\n\n if (fName.length === 1) {\n fName = singleCharIntegrals[fName];\n }\n\n return {\n type: \"op\",\n mode: parser.mode,\n limits: false,\n parentIsSupSub: false,\n symbol: true,\n name: fName\n };\n },\n\n htmlBuilder: htmlBuilder$2,\n mathmlBuilder: mathmlBuilder$1\n});\n\n// NOTE: Unlike most `htmlBuilder`s, this one handles not only\n// \"operatorname\", but also \"supsub\" since \\operatorname* can\n// affect super/subscripting.\nvar htmlBuilder$1 = (grp, options) => {\n // Operators are handled in the TeXbook pg. 443-444, rule 13(a).\n var supGroup;\n var subGroup;\n var hasLimits = false;\n var group;\n\n if (grp.type === \"supsub\") {\n // If we have limits, supsub will pass us its group to handle. Pull\n // out the superscript and subscript and set the group to the op in\n // its base.\n supGroup = grp.sup;\n subGroup = grp.sub;\n group = assertNodeType(grp.base, \"operatorname\");\n hasLimits = true;\n } else {\n group = assertNodeType(grp, \"operatorname\");\n }\n\n var base;\n\n if (group.body.length > 0) {\n var body = group.body.map(child => {\n // $FlowFixMe: Check if the node has a string `text` property.\n var childText = child.text;\n\n if (typeof childText === \"string\") {\n return {\n type: \"textord\",\n mode: child.mode,\n text: childText\n };\n } else {\n return child;\n }\n }); // Consolidate function names into symbol characters.\n\n var expression = buildExpression$1(body, options.withFont(\"mathrm\"), true);\n\n for (var i = 0; i < expression.length; i++) {\n var child = expression[i];\n\n if (child instanceof SymbolNode) {\n // Per amsopn package,\n // change minus to hyphen and \\ast to asterisk\n child.text = child.text.replace(/\\u2212/, \"-\").replace(/\\u2217/, \"*\");\n }\n }\n\n base = buildCommon.makeSpan([\"mop\"], expression, options);\n } else {\n base = buildCommon.makeSpan([\"mop\"], [], options);\n }\n\n if (hasLimits) {\n return assembleSupSub(base, supGroup, subGroup, options, options.style, 0, 0);\n } else {\n return base;\n }\n};\n\nvar mathmlBuilder = (group, options) => {\n // The steps taken here are similar to the html version.\n var expression = buildExpression(group.body, options.withFont(\"mathrm\")); // Is expression a string or has it something like a fraction?\n\n var isAllString = true; // default\n\n for (var i = 0; i < expression.length; i++) {\n var node = expression[i];\n\n if (node instanceof mathMLTree.SpaceNode) ; else if (node instanceof mathMLTree.MathNode) {\n switch (node.type) {\n case \"mi\":\n case \"mn\":\n case \"ms\":\n case \"mspace\":\n case \"mtext\":\n break;\n // Do nothing yet.\n\n case \"mo\":\n {\n var child = node.children[0];\n\n if (node.children.length === 1 && child instanceof mathMLTree.TextNode) {\n child.text = child.text.replace(/\\u2212/, \"-\").replace(/\\u2217/, \"*\");\n } else {\n isAllString = false;\n }\n\n break;\n }\n\n default:\n isAllString = false;\n }\n } else {\n isAllString = false;\n }\n }\n\n if (isAllString) {\n // Write a single TextNode instead of multiple nested tags.\n var word = expression.map(node => node.toText()).join(\"\");\n expression = [new mathMLTree.TextNode(word)];\n }\n\n var identifier = new mathMLTree.MathNode(\"mi\", expression);\n identifier.setAttribute(\"mathvariant\", \"normal\"); // \\u2061 is the same as ⁡\n // ref: https://www.w3schools.com/charsets/ref_html_entities_a.asp\n\n var operator = new mathMLTree.MathNode(\"mo\", [makeText(\"\\u2061\", \"text\")]);\n\n if (group.parentIsSupSub) {\n return new mathMLTree.MathNode(\"mrow\", [identifier, operator]);\n } else {\n return mathMLTree.newDocumentFragment([identifier, operator]);\n }\n}; // \\operatorname\n// amsopn.dtx: \\mathop{#1\\kern\\z@\\operator@font#3}\\newmcodes@\n\n\ndefineFunction({\n type: \"operatorname\",\n names: [\"\\\\operatorname@\", \"\\\\operatornamewithlimits\"],\n props: {\n numArgs: 1\n },\n handler: (_ref, args) => {\n var {\n parser,\n funcName\n } = _ref;\n var body = args[0];\n return {\n type: \"operatorname\",\n mode: parser.mode,\n body: ordargument(body),\n alwaysHandleSupSub: funcName === \"\\\\operatornamewithlimits\",\n limits: false,\n parentIsSupSub: false\n };\n },\n htmlBuilder: htmlBuilder$1,\n mathmlBuilder\n});\ndefineMacro(\"\\\\operatorname\", \"\\\\@ifstar\\\\operatornamewithlimits\\\\operatorname@\");\n\ndefineFunctionBuilders({\n type: \"ordgroup\",\n\n htmlBuilder(group, options) {\n if (group.semisimple) {\n return buildCommon.makeFragment(buildExpression$1(group.body, options, false));\n }\n\n return buildCommon.makeSpan([\"mord\"], buildExpression$1(group.body, options, true), options);\n },\n\n mathmlBuilder(group, options) {\n return buildExpressionRow(group.body, options, true);\n }\n\n});\n\ndefineFunction({\n type: \"overline\",\n names: [\"\\\\overline\"],\n props: {\n numArgs: 1\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n var body = args[0];\n return {\n type: \"overline\",\n mode: parser.mode,\n body\n };\n },\n\n htmlBuilder(group, options) {\n // Overlines are handled in the TeXbook pg 443, Rule 9.\n // Build the inner group in the cramped style.\n var innerGroup = buildGroup$1(group.body, options.havingCrampedStyle()); // Create the line above the body\n\n var line = buildCommon.makeLineSpan(\"overline-line\", options); // Generate the vlist, with the appropriate kerns\n\n var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;\n var vlist = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: innerGroup\n }, {\n type: \"kern\",\n size: 3 * defaultRuleThickness\n }, {\n type: \"elem\",\n elem: line\n }, {\n type: \"kern\",\n size: defaultRuleThickness\n }]\n }, options);\n return buildCommon.makeSpan([\"mord\", \"overline\"], [vlist], options);\n },\n\n mathmlBuilder(group, options) {\n var operator = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(\"\\u203e\")]);\n operator.setAttribute(\"stretchy\", \"true\");\n var node = new mathMLTree.MathNode(\"mover\", [buildGroup(group.body, options), operator]);\n node.setAttribute(\"accent\", \"true\");\n return node;\n }\n\n});\n\ndefineFunction({\n type: \"phantom\",\n names: [\"\\\\phantom\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: (_ref, args) => {\n var {\n parser\n } = _ref;\n var body = args[0];\n return {\n type: \"phantom\",\n mode: parser.mode,\n body: ordargument(body)\n };\n },\n htmlBuilder: (group, options) => {\n var elements = buildExpression$1(group.body, options.withPhantom(), false); // \\phantom isn't supposed to affect the elements it contains.\n // See \"color\" for more details.\n\n return buildCommon.makeFragment(elements);\n },\n mathmlBuilder: (group, options) => {\n var inner = buildExpression(group.body, options);\n return new mathMLTree.MathNode(\"mphantom\", inner);\n }\n});\ndefineFunction({\n type: \"hphantom\",\n names: [\"\\\\hphantom\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: (_ref2, args) => {\n var {\n parser\n } = _ref2;\n var body = args[0];\n return {\n type: \"hphantom\",\n mode: parser.mode,\n body\n };\n },\n htmlBuilder: (group, options) => {\n var node = buildCommon.makeSpan([], [buildGroup$1(group.body, options.withPhantom())]);\n node.height = 0;\n node.depth = 0;\n\n if (node.children) {\n for (var i = 0; i < node.children.length; i++) {\n node.children[i].height = 0;\n node.children[i].depth = 0;\n }\n } // See smash for comment re: use of makeVList\n\n\n node = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: node\n }]\n }, options); // For spacing, TeX treats \\smash as a math group (same spacing as ord).\n\n return buildCommon.makeSpan([\"mord\"], [node], options);\n },\n mathmlBuilder: (group, options) => {\n var inner = buildExpression(ordargument(group.body), options);\n var phantom = new mathMLTree.MathNode(\"mphantom\", inner);\n var node = new mathMLTree.MathNode(\"mpadded\", [phantom]);\n node.setAttribute(\"height\", \"0px\");\n node.setAttribute(\"depth\", \"0px\");\n return node;\n }\n});\ndefineFunction({\n type: \"vphantom\",\n names: [\"\\\\vphantom\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n handler: (_ref3, args) => {\n var {\n parser\n } = _ref3;\n var body = args[0];\n return {\n type: \"vphantom\",\n mode: parser.mode,\n body\n };\n },\n htmlBuilder: (group, options) => {\n var inner = buildCommon.makeSpan([\"inner\"], [buildGroup$1(group.body, options.withPhantom())]);\n var fix = buildCommon.makeSpan([\"fix\"], []);\n return buildCommon.makeSpan([\"mord\", \"rlap\"], [inner, fix], options);\n },\n mathmlBuilder: (group, options) => {\n var inner = buildExpression(ordargument(group.body), options);\n var phantom = new mathMLTree.MathNode(\"mphantom\", inner);\n var node = new mathMLTree.MathNode(\"mpadded\", [phantom]);\n node.setAttribute(\"width\", \"0px\");\n return node;\n }\n});\n\ndefineFunction({\n type: \"raisebox\",\n names: [\"\\\\raisebox\"],\n props: {\n numArgs: 2,\n argTypes: [\"size\", \"hbox\"],\n allowedInText: true\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n var amount = assertNodeType(args[0], \"size\").value;\n var body = args[1];\n return {\n type: \"raisebox\",\n mode: parser.mode,\n dy: amount,\n body\n };\n },\n\n htmlBuilder(group, options) {\n var body = buildGroup$1(group.body, options);\n var dy = calculateSize(group.dy, options);\n return buildCommon.makeVList({\n positionType: \"shift\",\n positionData: -dy,\n children: [{\n type: \"elem\",\n elem: body\n }]\n }, options);\n },\n\n mathmlBuilder(group, options) {\n var node = new mathMLTree.MathNode(\"mpadded\", [buildGroup(group.body, options)]);\n var dy = group.dy.number + group.dy.unit;\n node.setAttribute(\"voffset\", dy);\n return node;\n }\n\n});\n\ndefineFunction({\n type: \"internal\",\n names: [\"\\\\relax\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n allowedInArgument: true\n },\n\n handler(_ref) {\n var {\n parser\n } = _ref;\n return {\n type: \"internal\",\n mode: parser.mode\n };\n }\n\n});\n\ndefineFunction({\n type: \"rule\",\n names: [\"\\\\rule\"],\n props: {\n numArgs: 2,\n numOptionalArgs: 1,\n allowedInText: true,\n allowedInMath: true,\n argTypes: [\"size\", \"size\", \"size\"]\n },\n\n handler(_ref, args, optArgs) {\n var {\n parser\n } = _ref;\n var shift = optArgs[0];\n var width = assertNodeType(args[0], \"size\");\n var height = assertNodeType(args[1], \"size\");\n return {\n type: \"rule\",\n mode: parser.mode,\n shift: shift && assertNodeType(shift, \"size\").value,\n width: width.value,\n height: height.value\n };\n },\n\n htmlBuilder(group, options) {\n // Make an empty span for the rule\n var rule = buildCommon.makeSpan([\"mord\", \"rule\"], [], options); // Calculate the shift, width, and height of the rule, and account for units\n\n var width = calculateSize(group.width, options);\n var height = calculateSize(group.height, options);\n var shift = group.shift ? calculateSize(group.shift, options) : 0; // Style the rule to the right size\n\n rule.style.borderRightWidth = makeEm(width);\n rule.style.borderTopWidth = makeEm(height);\n rule.style.bottom = makeEm(shift); // Record the height and width\n\n rule.width = width;\n rule.height = height + shift;\n rule.depth = -shift; // Font size is the number large enough that the browser will\n // reserve at least `absHeight` space above the baseline.\n // The 1.125 factor was empirically determined\n\n rule.maxFontSize = height * 1.125 * options.sizeMultiplier;\n return rule;\n },\n\n mathmlBuilder(group, options) {\n var width = calculateSize(group.width, options);\n var height = calculateSize(group.height, options);\n var shift = group.shift ? calculateSize(group.shift, options) : 0;\n var color = options.color && options.getColor() || \"black\";\n var rule = new mathMLTree.MathNode(\"mspace\");\n rule.setAttribute(\"mathbackground\", color);\n rule.setAttribute(\"width\", makeEm(width));\n rule.setAttribute(\"height\", makeEm(height));\n var wrapper = new mathMLTree.MathNode(\"mpadded\", [rule]);\n\n if (shift >= 0) {\n wrapper.setAttribute(\"height\", makeEm(shift));\n } else {\n wrapper.setAttribute(\"height\", makeEm(shift));\n wrapper.setAttribute(\"depth\", makeEm(-shift));\n }\n\n wrapper.setAttribute(\"voffset\", makeEm(shift));\n return wrapper;\n }\n\n});\n\nfunction sizingGroup(value, options, baseOptions) {\n var inner = buildExpression$1(value, options, false);\n var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; // Add size-resetting classes to the inner list and set maxFontSize\n // manually. Handle nested size changes.\n\n for (var i = 0; i < inner.length; i++) {\n var pos = inner[i].classes.indexOf(\"sizing\");\n\n if (pos < 0) {\n Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions));\n } else if (inner[i].classes[pos + 1] === \"reset-size\" + options.size) {\n // This is a nested size change: e.g., inner[i] is the \"b\" in\n // `\\Huge a \\small b`. Override the old size (the `reset-` class)\n // but not the new size.\n inner[i].classes[pos + 1] = \"reset-size\" + baseOptions.size;\n }\n\n inner[i].height *= multiplier;\n inner[i].depth *= multiplier;\n }\n\n return buildCommon.makeFragment(inner);\n}\nvar sizeFuncs = [\"\\\\tiny\", \"\\\\sixptsize\", \"\\\\scriptsize\", \"\\\\footnotesize\", \"\\\\small\", \"\\\\normalsize\", \"\\\\large\", \"\\\\Large\", \"\\\\LARGE\", \"\\\\huge\", \"\\\\Huge\"];\nvar htmlBuilder = (group, options) => {\n // Handle sizing operators like \\Huge. Real TeX doesn't actually allow\n // these functions inside of math expressions, so we do some special\n // handling.\n var newOptions = options.havingSize(group.size);\n return sizingGroup(group.body, newOptions, options);\n};\ndefineFunction({\n type: \"sizing\",\n names: sizeFuncs,\n props: {\n numArgs: 0,\n allowedInText: true\n },\n handler: (_ref, args) => {\n var {\n breakOnTokenText,\n funcName,\n parser\n } = _ref;\n var body = parser.parseExpression(false, breakOnTokenText);\n return {\n type: \"sizing\",\n mode: parser.mode,\n // Figure out what size to use based on the list of functions above\n size: sizeFuncs.indexOf(funcName) + 1,\n body\n };\n },\n htmlBuilder,\n mathmlBuilder: (group, options) => {\n var newOptions = options.havingSize(group.size);\n var inner = buildExpression(group.body, newOptions);\n var node = new mathMLTree.MathNode(\"mstyle\", inner); // TODO(emily): This doesn't produce the correct size for nested size\n // changes, because we don't keep state of what style we're currently\n // in, so we can't reset the size to normal before changing it. Now\n // that we're passing an options parameter we should be able to fix\n // this.\n\n node.setAttribute(\"mathsize\", makeEm(newOptions.sizeMultiplier));\n return node;\n }\n});\n\n// smash, with optional [tb], as in AMS\ndefineFunction({\n type: \"smash\",\n names: [\"\\\\smash\"],\n props: {\n numArgs: 1,\n numOptionalArgs: 1,\n allowedInText: true\n },\n handler: (_ref, args, optArgs) => {\n var {\n parser\n } = _ref;\n var smashHeight = false;\n var smashDepth = false;\n var tbArg = optArgs[0] && assertNodeType(optArgs[0], \"ordgroup\");\n\n if (tbArg) {\n // Optional [tb] argument is engaged.\n // ref: amsmath: \\renewcommand{\\smash}[1][tb]{%\n // def\\mb@t{\\ht}\\def\\mb@b{\\dp}\\def\\mb@tb{\\ht\\z@\\z@\\dp}%\n var letter = \"\";\n\n for (var i = 0; i < tbArg.body.length; ++i) {\n var node = tbArg.body[i]; // $FlowFixMe: Not every node type has a `text` property.\n\n letter = node.text;\n\n if (letter === \"t\") {\n smashHeight = true;\n } else if (letter === \"b\") {\n smashDepth = true;\n } else {\n smashHeight = false;\n smashDepth = false;\n break;\n }\n }\n } else {\n smashHeight = true;\n smashDepth = true;\n }\n\n var body = args[0];\n return {\n type: \"smash\",\n mode: parser.mode,\n body,\n smashHeight,\n smashDepth\n };\n },\n htmlBuilder: (group, options) => {\n var node = buildCommon.makeSpan([], [buildGroup$1(group.body, options)]);\n\n if (!group.smashHeight && !group.smashDepth) {\n return node;\n }\n\n if (group.smashHeight) {\n node.height = 0; // In order to influence makeVList, we have to reset the children.\n\n if (node.children) {\n for (var i = 0; i < node.children.length; i++) {\n node.children[i].height = 0;\n }\n }\n }\n\n if (group.smashDepth) {\n node.depth = 0;\n\n if (node.children) {\n for (var _i = 0; _i < node.children.length; _i++) {\n node.children[_i].depth = 0;\n }\n }\n } // At this point, we've reset the TeX-like height and depth values.\n // But the span still has an HTML line height.\n // makeVList applies \"display: table-cell\", which prevents the browser\n // from acting on that line height. So we'll call makeVList now.\n\n\n var smashedNode = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: node\n }]\n }, options); // For spacing, TeX treats \\hphantom as a math group (same spacing as ord).\n\n return buildCommon.makeSpan([\"mord\"], [smashedNode], options);\n },\n mathmlBuilder: (group, options) => {\n var node = new mathMLTree.MathNode(\"mpadded\", [buildGroup(group.body, options)]);\n\n if (group.smashHeight) {\n node.setAttribute(\"height\", \"0px\");\n }\n\n if (group.smashDepth) {\n node.setAttribute(\"depth\", \"0px\");\n }\n\n return node;\n }\n});\n\ndefineFunction({\n type: \"sqrt\",\n names: [\"\\\\sqrt\"],\n props: {\n numArgs: 1,\n numOptionalArgs: 1\n },\n\n handler(_ref, args, optArgs) {\n var {\n parser\n } = _ref;\n var index = optArgs[0];\n var body = args[0];\n return {\n type: \"sqrt\",\n mode: parser.mode,\n body,\n index\n };\n },\n\n htmlBuilder(group, options) {\n // Square roots are handled in the TeXbook pg. 443, Rule 11.\n // First, we do the same steps as in overline to build the inner group\n // and line\n var inner = buildGroup$1(group.body, options.havingCrampedStyle());\n\n if (inner.height === 0) {\n // Render a small surd.\n inner.height = options.fontMetrics().xHeight;\n } // Some groups can return document fragments. Handle those by wrapping\n // them in a span.\n\n\n inner = buildCommon.wrapFragment(inner, options); // Calculate the minimum size for the \\surd delimiter\n\n var metrics = options.fontMetrics();\n var theta = metrics.defaultRuleThickness;\n var phi = theta;\n\n if (options.style.id < Style$1.TEXT.id) {\n phi = options.fontMetrics().xHeight;\n } // Calculate the clearance between the body and line\n\n\n var lineClearance = theta + phi / 4;\n var minDelimiterHeight = inner.height + inner.depth + lineClearance + theta; // Create a sqrt SVG of the required minimum size\n\n var {\n span: img,\n ruleWidth,\n advanceWidth\n } = delimiter.sqrtImage(minDelimiterHeight, options);\n var delimDepth = img.height - ruleWidth; // Adjust the clearance based on the delimiter size\n\n if (delimDepth > inner.height + inner.depth + lineClearance) {\n lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2;\n } // Shift the sqrt image\n\n\n var imgShift = img.height - inner.height - lineClearance - ruleWidth;\n inner.style.paddingLeft = makeEm(advanceWidth); // Overlay the image and the argument.\n\n var body = buildCommon.makeVList({\n positionType: \"firstBaseline\",\n children: [{\n type: \"elem\",\n elem: inner,\n wrapperClasses: [\"svg-align\"]\n }, {\n type: \"kern\",\n size: -(inner.height + imgShift)\n }, {\n type: \"elem\",\n elem: img\n }, {\n type: \"kern\",\n size: ruleWidth\n }]\n }, options);\n\n if (!group.index) {\n return buildCommon.makeSpan([\"mord\", \"sqrt\"], [body], options);\n } else {\n // Handle the optional root index\n // The index is always in scriptscript style\n var newOptions = options.havingStyle(Style$1.SCRIPTSCRIPT);\n var rootm = buildGroup$1(group.index, newOptions, options); // The amount the index is shifted by. This is taken from the TeX\n // source, in the definition of `\\r@@t`.\n\n var toShift = 0.6 * (body.height - body.depth); // Build a VList with the superscript shifted up correctly\n\n var rootVList = buildCommon.makeVList({\n positionType: \"shift\",\n positionData: -toShift,\n children: [{\n type: \"elem\",\n elem: rootm\n }]\n }, options); // Add a class surrounding it so we can add on the appropriate\n // kerning\n\n var rootVListWrap = buildCommon.makeSpan([\"root\"], [rootVList]);\n return buildCommon.makeSpan([\"mord\", \"sqrt\"], [rootVListWrap, body], options);\n }\n },\n\n mathmlBuilder(group, options) {\n var {\n body,\n index\n } = group;\n return index ? new mathMLTree.MathNode(\"mroot\", [buildGroup(body, options), buildGroup(index, options)]) : new mathMLTree.MathNode(\"msqrt\", [buildGroup(body, options)]);\n }\n\n});\n\nvar styleMap = {\n \"display\": Style$1.DISPLAY,\n \"text\": Style$1.TEXT,\n \"script\": Style$1.SCRIPT,\n \"scriptscript\": Style$1.SCRIPTSCRIPT\n};\ndefineFunction({\n type: \"styling\",\n names: [\"\\\\displaystyle\", \"\\\\textstyle\", \"\\\\scriptstyle\", \"\\\\scriptscriptstyle\"],\n props: {\n numArgs: 0,\n allowedInText: true,\n primitive: true\n },\n\n handler(_ref, args) {\n var {\n breakOnTokenText,\n funcName,\n parser\n } = _ref;\n // parse out the implicit body\n var body = parser.parseExpression(true, breakOnTokenText); // TODO: Refactor to avoid duplicating styleMap in multiple places (e.g.\n // here and in buildHTML and de-dupe the enumeration of all the styles).\n // $FlowFixMe: The names above exactly match the styles.\n\n var style = funcName.slice(1, funcName.length - 5);\n return {\n type: \"styling\",\n mode: parser.mode,\n // Figure out what style to use by pulling out the style from\n // the function name\n style,\n body\n };\n },\n\n htmlBuilder(group, options) {\n // Style changes are handled in the TeXbook on pg. 442, Rule 3.\n var newStyle = styleMap[group.style];\n var newOptions = options.havingStyle(newStyle).withFont('');\n return sizingGroup(group.body, newOptions, options);\n },\n\n mathmlBuilder(group, options) {\n // Figure out what style we're changing to.\n var newStyle = styleMap[group.style];\n var newOptions = options.havingStyle(newStyle);\n var inner = buildExpression(group.body, newOptions);\n var node = new mathMLTree.MathNode(\"mstyle\", inner);\n var styleAttributes = {\n \"display\": [\"0\", \"true\"],\n \"text\": [\"0\", \"false\"],\n \"script\": [\"1\", \"false\"],\n \"scriptscript\": [\"2\", \"false\"]\n };\n var attr = styleAttributes[group.style];\n node.setAttribute(\"scriptlevel\", attr[0]);\n node.setAttribute(\"displaystyle\", attr[1]);\n return node;\n }\n\n});\n\n/**\n * Sometimes, groups perform special rules when they have superscripts or\n * subscripts attached to them. This function lets the `supsub` group know that\n * Sometimes, groups perform special rules when they have superscripts or\n * its inner element should handle the superscripts and subscripts instead of\n * handling them itself.\n */\nvar htmlBuilderDelegate = function htmlBuilderDelegate(group, options) {\n var base = group.base;\n\n if (!base) {\n return null;\n } else if (base.type === \"op\") {\n // Operators handle supsubs differently when they have limits\n // (e.g. `\\displaystyle\\sum_2^3`)\n var delegate = base.limits && (options.style.size === Style$1.DISPLAY.size || base.alwaysHandleSupSub);\n return delegate ? htmlBuilder$2 : null;\n } else if (base.type === \"operatorname\") {\n var _delegate = base.alwaysHandleSupSub && (options.style.size === Style$1.DISPLAY.size || base.limits);\n\n return _delegate ? htmlBuilder$1 : null;\n } else if (base.type === \"accent\") {\n return utils.isCharacterBox(base.base) ? htmlBuilder$a : null;\n } else if (base.type === \"horizBrace\") {\n var isSup = !group.sub;\n return isSup === base.isOver ? htmlBuilder$3 : null;\n } else {\n return null;\n }\n}; // Super scripts and subscripts, whose precise placement can depend on other\n// functions that precede them.\n\n\ndefineFunctionBuilders({\n type: \"supsub\",\n\n htmlBuilder(group, options) {\n // Superscript and subscripts are handled in the TeXbook on page\n // 445-446, rules 18(a-f).\n // Here is where we defer to the inner group if it should handle\n // superscripts and subscripts itself.\n var builderDelegate = htmlBuilderDelegate(group, options);\n\n if (builderDelegate) {\n return builderDelegate(group, options);\n }\n\n var {\n base: valueBase,\n sup: valueSup,\n sub: valueSub\n } = group;\n var base = buildGroup$1(valueBase, options);\n var supm;\n var subm;\n var metrics = options.fontMetrics(); // Rule 18a\n\n var supShift = 0;\n var subShift = 0;\n var isCharacterBox = valueBase && utils.isCharacterBox(valueBase);\n\n if (valueSup) {\n var newOptions = options.havingStyle(options.style.sup());\n supm = buildGroup$1(valueSup, newOptions, options);\n\n if (!isCharacterBox) {\n supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier;\n }\n }\n\n if (valueSub) {\n var _newOptions = options.havingStyle(options.style.sub());\n\n subm = buildGroup$1(valueSub, _newOptions, options);\n\n if (!isCharacterBox) {\n subShift = base.depth + _newOptions.fontMetrics().subDrop * _newOptions.sizeMultiplier / options.sizeMultiplier;\n }\n } // Rule 18c\n\n\n var minSupShift;\n\n if (options.style === Style$1.DISPLAY) {\n minSupShift = metrics.sup1;\n } else if (options.style.cramped) {\n minSupShift = metrics.sup3;\n } else {\n minSupShift = metrics.sup2;\n } // scriptspace is a font-size-independent size, so scale it\n // appropriately for use as the marginRight.\n\n\n var multiplier = options.sizeMultiplier;\n var marginRight = makeEm(0.5 / metrics.ptPerEm / multiplier);\n var marginLeft = null;\n\n if (subm) {\n // Subscripts shouldn't be shifted by the base's italic correction.\n // Account for that by shifting the subscript back the appropriate\n // amount. Note we only do this when the base is a single symbol.\n var isOiint = group.base && group.base.type === \"op\" && group.base.name && (group.base.name === \"\\\\oiint\" || group.base.name === \"\\\\oiiint\");\n\n if (base instanceof SymbolNode || isOiint) {\n // $FlowFixMe\n marginLeft = makeEm(-base.italic);\n }\n }\n\n var supsub;\n\n if (supm && subm) {\n supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);\n subShift = Math.max(subShift, metrics.sub2);\n var ruleWidth = metrics.defaultRuleThickness; // Rule 18e\n\n var maxWidth = 4 * ruleWidth;\n\n if (supShift - supm.depth - (subm.height - subShift) < maxWidth) {\n subShift = maxWidth - (supShift - supm.depth) + subm.height;\n var psi = 0.8 * metrics.xHeight - (supShift - supm.depth);\n\n if (psi > 0) {\n supShift += psi;\n subShift -= psi;\n }\n }\n\n var vlistElem = [{\n type: \"elem\",\n elem: subm,\n shift: subShift,\n marginRight,\n marginLeft\n }, {\n type: \"elem\",\n elem: supm,\n shift: -supShift,\n marginRight\n }];\n supsub = buildCommon.makeVList({\n positionType: \"individualShift\",\n children: vlistElem\n }, options);\n } else if (subm) {\n // Rule 18b\n subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight);\n var _vlistElem = [{\n type: \"elem\",\n elem: subm,\n marginLeft,\n marginRight\n }];\n supsub = buildCommon.makeVList({\n positionType: \"shift\",\n positionData: subShift,\n children: _vlistElem\n }, options);\n } else if (supm) {\n // Rule 18c, d\n supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight);\n supsub = buildCommon.makeVList({\n positionType: \"shift\",\n positionData: -supShift,\n children: [{\n type: \"elem\",\n elem: supm,\n marginRight\n }]\n }, options);\n } else {\n throw new Error(\"supsub must have either sup or sub.\");\n } // Wrap the supsub vlist in a span.msupsub to reset text-align.\n\n\n var mclass = getTypeOfDomTree(base, \"right\") || \"mord\";\n return buildCommon.makeSpan([mclass], [base, buildCommon.makeSpan([\"msupsub\"], [supsub])], options);\n },\n\n mathmlBuilder(group, options) {\n // Is the inner group a relevant horizontal brace?\n var isBrace = false;\n var isOver;\n var isSup;\n\n if (group.base && group.base.type === \"horizBrace\") {\n isSup = !!group.sup;\n\n if (isSup === group.base.isOver) {\n isBrace = true;\n isOver = group.base.isOver;\n }\n }\n\n if (group.base && (group.base.type === \"op\" || group.base.type === \"operatorname\")) {\n group.base.parentIsSupSub = true;\n }\n\n var children = [buildGroup(group.base, options)];\n\n if (group.sub) {\n children.push(buildGroup(group.sub, options));\n }\n\n if (group.sup) {\n children.push(buildGroup(group.sup, options));\n }\n\n var nodeType;\n\n if (isBrace) {\n nodeType = isOver ? \"mover\" : \"munder\";\n } else if (!group.sub) {\n var base = group.base;\n\n if (base && base.type === \"op\" && base.limits && (options.style === Style$1.DISPLAY || base.alwaysHandleSupSub)) {\n nodeType = \"mover\";\n } else if (base && base.type === \"operatorname\" && base.alwaysHandleSupSub && (base.limits || options.style === Style$1.DISPLAY)) {\n nodeType = \"mover\";\n } else {\n nodeType = \"msup\";\n }\n } else if (!group.sup) {\n var _base = group.base;\n\n if (_base && _base.type === \"op\" && _base.limits && (options.style === Style$1.DISPLAY || _base.alwaysHandleSupSub)) {\n nodeType = \"munder\";\n } else if (_base && _base.type === \"operatorname\" && _base.alwaysHandleSupSub && (_base.limits || options.style === Style$1.DISPLAY)) {\n nodeType = \"munder\";\n } else {\n nodeType = \"msub\";\n }\n } else {\n var _base2 = group.base;\n\n if (_base2 && _base2.type === \"op\" && _base2.limits && options.style === Style$1.DISPLAY) {\n nodeType = \"munderover\";\n } else if (_base2 && _base2.type === \"operatorname\" && _base2.alwaysHandleSupSub && (options.style === Style$1.DISPLAY || _base2.limits)) {\n nodeType = \"munderover\";\n } else {\n nodeType = \"msubsup\";\n }\n }\n\n return new mathMLTree.MathNode(nodeType, children);\n }\n\n});\n\ndefineFunctionBuilders({\n type: \"atom\",\n\n htmlBuilder(group, options) {\n return buildCommon.mathsym(group.text, group.mode, options, [\"m\" + group.family]);\n },\n\n mathmlBuilder(group, options) {\n var node = new mathMLTree.MathNode(\"mo\", [makeText(group.text, group.mode)]);\n\n if (group.family === \"bin\") {\n var variant = getVariant(group, options);\n\n if (variant === \"bold-italic\") {\n node.setAttribute(\"mathvariant\", variant);\n }\n } else if (group.family === \"punct\") {\n node.setAttribute(\"separator\", \"true\");\n } else if (group.family === \"open\" || group.family === \"close\") {\n // Delims built here should not stretch vertically.\n // See delimsizing.js for stretchy delims.\n node.setAttribute(\"stretchy\", \"false\");\n }\n\n return node;\n }\n\n});\n\n// \"mathord\" and \"textord\" ParseNodes created in Parser.js from symbol Groups in\n// src/symbols.js.\nvar defaultVariant = {\n \"mi\": \"italic\",\n \"mn\": \"normal\",\n \"mtext\": \"normal\"\n};\ndefineFunctionBuilders({\n type: \"mathord\",\n\n htmlBuilder(group, options) {\n return buildCommon.makeOrd(group, options, \"mathord\");\n },\n\n mathmlBuilder(group, options) {\n var node = new mathMLTree.MathNode(\"mi\", [makeText(group.text, group.mode, options)]);\n var variant = getVariant(group, options) || \"italic\";\n\n if (variant !== defaultVariant[node.type]) {\n node.setAttribute(\"mathvariant\", variant);\n }\n\n return node;\n }\n\n});\ndefineFunctionBuilders({\n type: \"textord\",\n\n htmlBuilder(group, options) {\n return buildCommon.makeOrd(group, options, \"textord\");\n },\n\n mathmlBuilder(group, options) {\n var text = makeText(group.text, group.mode, options);\n var variant = getVariant(group, options) || \"normal\";\n var node;\n\n if (group.mode === 'text') {\n node = new mathMLTree.MathNode(\"mtext\", [text]);\n } else if (/[0-9]/.test(group.text)) {\n node = new mathMLTree.MathNode(\"mn\", [text]);\n } else if (group.text === \"\\\\prime\") {\n node = new mathMLTree.MathNode(\"mo\", [text]);\n } else {\n node = new mathMLTree.MathNode(\"mi\", [text]);\n }\n\n if (variant !== defaultVariant[node.type]) {\n node.setAttribute(\"mathvariant\", variant);\n }\n\n return node;\n }\n\n});\n\nvar cssSpace = {\n \"\\\\nobreak\": \"nobreak\",\n \"\\\\allowbreak\": \"allowbreak\"\n}; // A lookup table to determine whether a spacing function/symbol should be\n// treated like a regular space character. If a symbol or command is a key\n// in this table, then it should be a regular space character. Furthermore,\n// the associated value may have a `className` specifying an extra CSS class\n// to add to the created `span`.\n\nvar regularSpace = {\n \" \": {},\n \"\\\\ \": {},\n \"~\": {\n className: \"nobreak\"\n },\n \"\\\\space\": {},\n \"\\\\nobreakspace\": {\n className: \"nobreak\"\n }\n}; // ParseNode<\"spacing\"> created in Parser.js from the \"spacing\" symbol Groups in\n// src/symbols.js.\n\ndefineFunctionBuilders({\n type: \"spacing\",\n\n htmlBuilder(group, options) {\n if (regularSpace.hasOwnProperty(group.text)) {\n var className = regularSpace[group.text].className || \"\"; // Spaces are generated by adding an actual space. Each of these\n // things has an entry in the symbols table, so these will be turned\n // into appropriate outputs.\n\n if (group.mode === \"text\") {\n var ord = buildCommon.makeOrd(group, options, \"textord\");\n ord.classes.push(className);\n return ord;\n } else {\n return buildCommon.makeSpan([\"mspace\", className], [buildCommon.mathsym(group.text, group.mode, options)], options);\n }\n } else if (cssSpace.hasOwnProperty(group.text)) {\n // Spaces based on just a CSS class.\n return buildCommon.makeSpan([\"mspace\", cssSpace[group.text]], [], options);\n } else {\n throw new ParseError(\"Unknown type of space \\\"\" + group.text + \"\\\"\");\n }\n },\n\n mathmlBuilder(group, options) {\n var node;\n\n if (regularSpace.hasOwnProperty(group.text)) {\n node = new mathMLTree.MathNode(\"mtext\", [new mathMLTree.TextNode(\"\\u00a0\")]);\n } else if (cssSpace.hasOwnProperty(group.text)) {\n // CSS-based MathML spaces (\\nobreak, \\allowbreak) are ignored\n return new mathMLTree.MathNode(\"mspace\");\n } else {\n throw new ParseError(\"Unknown type of space \\\"\" + group.text + \"\\\"\");\n }\n\n return node;\n }\n\n});\n\nvar pad = () => {\n var padNode = new mathMLTree.MathNode(\"mtd\", []);\n padNode.setAttribute(\"width\", \"50%\");\n return padNode;\n};\n\ndefineFunctionBuilders({\n type: \"tag\",\n\n mathmlBuilder(group, options) {\n var table = new mathMLTree.MathNode(\"mtable\", [new mathMLTree.MathNode(\"mtr\", [pad(), new mathMLTree.MathNode(\"mtd\", [buildExpressionRow(group.body, options)]), pad(), new mathMLTree.MathNode(\"mtd\", [buildExpressionRow(group.tag, options)])])]);\n table.setAttribute(\"width\", \"100%\");\n return table; // TODO: Left-aligned tags.\n // Currently, the group and options passed here do not contain\n // enough info to set tag alignment. `leqno` is in Settings but it is\n // not passed to Options. On the HTML side, leqno is\n // set by a CSS class applied in buildTree.js. That would have worked\n // in MathML if browsers supported . Since they don't, we\n // need to rewrite the way this function is called.\n }\n\n});\n\nvar textFontFamilies = {\n \"\\\\text\": undefined,\n \"\\\\textrm\": \"textrm\",\n \"\\\\textsf\": \"textsf\",\n \"\\\\texttt\": \"texttt\",\n \"\\\\textnormal\": \"textrm\"\n};\nvar textFontWeights = {\n \"\\\\textbf\": \"textbf\",\n \"\\\\textmd\": \"textmd\"\n};\nvar textFontShapes = {\n \"\\\\textit\": \"textit\",\n \"\\\\textup\": \"textup\"\n};\n\nvar optionsWithFont = (group, options) => {\n var font = group.font; // Checks if the argument is a font family or a font style.\n\n if (!font) {\n return options;\n } else if (textFontFamilies[font]) {\n return options.withTextFontFamily(textFontFamilies[font]);\n } else if (textFontWeights[font]) {\n return options.withTextFontWeight(textFontWeights[font]);\n } else if (font === \"\\\\emph\") {\n return options.fontShape === \"textit\" ? options.withTextFontShape(\"textup\") : options.withTextFontShape(\"textit\");\n }\n\n return options.withTextFontShape(textFontShapes[font]);\n};\n\ndefineFunction({\n type: \"text\",\n names: [// Font families\n \"\\\\text\", \"\\\\textrm\", \"\\\\textsf\", \"\\\\texttt\", \"\\\\textnormal\", // Font weights\n \"\\\\textbf\", \"\\\\textmd\", // Font Shapes\n \"\\\\textit\", \"\\\\textup\", \"\\\\emph\"],\n props: {\n numArgs: 1,\n argTypes: [\"text\"],\n allowedInArgument: true,\n allowedInText: true\n },\n\n handler(_ref, args) {\n var {\n parser,\n funcName\n } = _ref;\n var body = args[0];\n return {\n type: \"text\",\n mode: parser.mode,\n body: ordargument(body),\n font: funcName\n };\n },\n\n htmlBuilder(group, options) {\n var newOptions = optionsWithFont(group, options);\n var inner = buildExpression$1(group.body, newOptions, true);\n return buildCommon.makeSpan([\"mord\", \"text\"], inner, newOptions);\n },\n\n mathmlBuilder(group, options) {\n var newOptions = optionsWithFont(group, options);\n return buildExpressionRow(group.body, newOptions);\n }\n\n});\n\ndefineFunction({\n type: \"underline\",\n names: [\"\\\\underline\"],\n props: {\n numArgs: 1,\n allowedInText: true\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n return {\n type: \"underline\",\n mode: parser.mode,\n body: args[0]\n };\n },\n\n htmlBuilder(group, options) {\n // Underlines are handled in the TeXbook pg 443, Rule 10.\n // Build the inner group.\n var innerGroup = buildGroup$1(group.body, options); // Create the line to go below the body\n\n var line = buildCommon.makeLineSpan(\"underline-line\", options); // Generate the vlist, with the appropriate kerns\n\n var defaultRuleThickness = options.fontMetrics().defaultRuleThickness;\n var vlist = buildCommon.makeVList({\n positionType: \"top\",\n positionData: innerGroup.height,\n children: [{\n type: \"kern\",\n size: defaultRuleThickness\n }, {\n type: \"elem\",\n elem: line\n }, {\n type: \"kern\",\n size: 3 * defaultRuleThickness\n }, {\n type: \"elem\",\n elem: innerGroup\n }]\n }, options);\n return buildCommon.makeSpan([\"mord\", \"underline\"], [vlist], options);\n },\n\n mathmlBuilder(group, options) {\n var operator = new mathMLTree.MathNode(\"mo\", [new mathMLTree.TextNode(\"\\u203e\")]);\n operator.setAttribute(\"stretchy\", \"true\");\n var node = new mathMLTree.MathNode(\"munder\", [buildGroup(group.body, options), operator]);\n node.setAttribute(\"accentunder\", \"true\");\n return node;\n }\n\n});\n\ndefineFunction({\n type: \"vcenter\",\n names: [\"\\\\vcenter\"],\n props: {\n numArgs: 1,\n argTypes: [\"original\"],\n // In LaTeX, \\vcenter can act only on a box.\n allowedInText: false\n },\n\n handler(_ref, args) {\n var {\n parser\n } = _ref;\n return {\n type: \"vcenter\",\n mode: parser.mode,\n body: args[0]\n };\n },\n\n htmlBuilder(group, options) {\n var body = buildGroup$1(group.body, options);\n var axisHeight = options.fontMetrics().axisHeight;\n var dy = 0.5 * (body.height - axisHeight - (body.depth + axisHeight));\n return buildCommon.makeVList({\n positionType: \"shift\",\n positionData: dy,\n children: [{\n type: \"elem\",\n elem: body\n }]\n }, options);\n },\n\n mathmlBuilder(group, options) {\n // There is no way to do this in MathML.\n // Write a class as a breadcrumb in case some post-processor wants\n // to perform a vcenter adjustment.\n return new mathMLTree.MathNode(\"mpadded\", [buildGroup(group.body, options)], [\"vcenter\"]);\n }\n\n});\n\ndefineFunction({\n type: \"verb\",\n names: [\"\\\\verb\"],\n props: {\n numArgs: 0,\n allowedInText: true\n },\n\n handler(context, args, optArgs) {\n // \\verb and \\verb* are dealt with directly in Parser.js.\n // If we end up here, it's because of a failure to match the two delimiters\n // in the regex in Lexer.js. LaTeX raises the following error when \\verb is\n // terminated by end of line (or file).\n throw new ParseError(\"\\\\verb ended by end of line instead of matching delimiter\");\n },\n\n htmlBuilder(group, options) {\n var text = makeVerb(group);\n var body = []; // \\verb enters text mode and therefore is sized like \\textstyle\n\n var newOptions = options.havingStyle(options.style.text());\n\n for (var i = 0; i < text.length; i++) {\n var c = text[i];\n\n if (c === '~') {\n c = '\\\\textasciitilde';\n }\n\n body.push(buildCommon.makeSymbol(c, \"Typewriter-Regular\", group.mode, newOptions, [\"mord\", \"texttt\"]));\n }\n\n return buildCommon.makeSpan([\"mord\", \"text\"].concat(newOptions.sizingClasses(options)), buildCommon.tryCombineChars(body), newOptions);\n },\n\n mathmlBuilder(group, options) {\n var text = new mathMLTree.TextNode(makeVerb(group));\n var node = new mathMLTree.MathNode(\"mtext\", [text]);\n node.setAttribute(\"mathvariant\", \"monospace\");\n return node;\n }\n\n});\n/**\n * Converts verb group into body string.\n *\n * \\verb* replaces each space with an open box \\u2423\n * \\verb replaces each space with a no-break space \\xA0\n */\n\nvar makeVerb = group => group.body.replace(/ /g, group.star ? '\\u2423' : '\\xA0');\n\n/** Include this to ensure that all functions are defined. */\nvar functions = _functions;\n\n/**\n * The Lexer class handles tokenizing the input in various ways. Since our\n * parser expects us to be able to backtrack, the lexer allows lexing from any\n * given starting point.\n *\n * Its main exposed function is the `lex` function, which takes a position to\n * lex from and a type of token to lex. It defers to the appropriate `_innerLex`\n * function.\n *\n * The various `_innerLex` functions perform the actual lexing of different\n * kinds.\n */\n\n/* The following tokenRegex\n * - matches typical whitespace (but not NBSP etc.) using its first group\n * - does not match any control character \\x00-\\x1f except whitespace\n * - does not match a bare backslash\n * - matches any ASCII character except those just mentioned\n * - does not match the BMP private use area \\uE000-\\uF8FF\n * - does not match bare surrogate code units\n * - matches any BMP character except for those just described\n * - matches any valid Unicode surrogate pair\n * - matches a backslash followed by one or more whitespace characters\n * - matches a backslash followed by one or more letters then whitespace\n * - matches a backslash followed by any BMP character\n * Capturing groups:\n * [1] regular whitespace\n * [2] backslash followed by whitespace\n * [3] anything else, which may include:\n * [4] left character of \\verb*\n * [5] left character of \\verb\n * [6] backslash followed by word, excluding any trailing whitespace\n * Just because the Lexer matches something doesn't mean it's valid input:\n * If there is no matching function or symbol definition, the Parser will\n * still reject the input.\n */\nvar spaceRegexString = \"[ \\r\\n\\t]\";\nvar controlWordRegexString = \"\\\\\\\\[a-zA-Z@]+\";\nvar controlSymbolRegexString = \"\\\\\\\\[^\\uD800-\\uDFFF]\";\nvar controlWordWhitespaceRegexString = \"(\" + controlWordRegexString + \")\" + spaceRegexString + \"*\";\nvar controlSpaceRegexString = \"\\\\\\\\(\\n|[ \\r\\t]+\\n?)[ \\r\\t]*\";\nvar combiningDiacriticalMarkString = \"[\\u0300-\\u036f]\";\nvar combiningDiacriticalMarksEndRegex = new RegExp(combiningDiacriticalMarkString + \"+$\");\nvar tokenRegexString = \"(\" + spaceRegexString + \"+)|\" + ( // whitespace\ncontrolSpaceRegexString + \"|\") + // \\whitespace\n\"([!-\\\\[\\\\]-\\u2027\\u202A-\\uD7FF\\uF900-\\uFFFF]\" + ( // single codepoint\ncombiningDiacriticalMarkString + \"*\") + // ...plus accents\n\"|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]\" + ( // surrogate pair\ncombiningDiacriticalMarkString + \"*\") + // ...plus accents\n\"|\\\\\\\\verb\\\\*([^]).*?\\\\4\" + // \\verb*\n\"|\\\\\\\\verb([^*a-zA-Z]).*?\\\\5\" + ( // \\verb unstarred\n\"|\" + controlWordWhitespaceRegexString) + ( // \\macroName + spaces\n\"|\" + controlSymbolRegexString + \")\"); // \\\\, \\', etc.\n\n/** Main Lexer class */\n\nclass Lexer {\n // Category codes. The lexer only supports comment characters (14) for now.\n // MacroExpander additionally distinguishes active (13).\n constructor(input, settings) {\n this.input = void 0;\n this.settings = void 0;\n this.tokenRegex = void 0;\n this.catcodes = void 0;\n // Separate accents from characters\n this.input = input;\n this.settings = settings;\n this.tokenRegex = new RegExp(tokenRegexString, 'g');\n this.catcodes = {\n \"%\": 14,\n // comment character\n \"~\": 13 // active character\n\n };\n }\n\n setCatcode(char, code) {\n this.catcodes[char] = code;\n }\n /**\n * This function lexes a single token.\n */\n\n\n lex() {\n var input = this.input;\n var pos = this.tokenRegex.lastIndex;\n\n if (pos === input.length) {\n return new Token(\"EOF\", new SourceLocation(this, pos, pos));\n }\n\n var match = this.tokenRegex.exec(input);\n\n if (match === null || match.index !== pos) {\n throw new ParseError(\"Unexpected character: '\" + input[pos] + \"'\", new Token(input[pos], new SourceLocation(this, pos, pos + 1)));\n }\n\n var text = match[6] || match[3] || (match[2] ? \"\\\\ \" : \" \");\n\n if (this.catcodes[text] === 14) {\n // comment character\n var nlIndex = input.indexOf('\\n', this.tokenRegex.lastIndex);\n\n if (nlIndex === -1) {\n this.tokenRegex.lastIndex = input.length; // EOF\n\n this.settings.reportNonstrict(\"commentAtEnd\", \"% comment has no terminating newline; LaTeX would \" + \"fail because of commenting the end of math mode (e.g. $)\");\n } else {\n this.tokenRegex.lastIndex = nlIndex + 1;\n }\n\n return this.lex();\n }\n\n return new Token(text, new SourceLocation(this, pos, this.tokenRegex.lastIndex));\n }\n\n}\n\n/**\n * A `Namespace` refers to a space of nameable things like macros or lengths,\n * which can be `set` either globally or local to a nested group, using an\n * undo stack similar to how TeX implements this functionality.\n * Performance-wise, `get` and local `set` take constant time, while global\n * `set` takes time proportional to the depth of group nesting.\n */\nclass Namespace {\n /**\n * Both arguments are optional. The first argument is an object of\n * built-in mappings which never change. The second argument is an object\n * of initial (global-level) mappings, which will constantly change\n * according to any global/top-level `set`s done.\n */\n constructor(builtins, globalMacros) {\n if (builtins === void 0) {\n builtins = {};\n }\n\n if (globalMacros === void 0) {\n globalMacros = {};\n }\n\n this.current = void 0;\n this.builtins = void 0;\n this.undefStack = void 0;\n this.current = globalMacros;\n this.builtins = builtins;\n this.undefStack = [];\n }\n /**\n * Start a new nested group, affecting future local `set`s.\n */\n\n\n beginGroup() {\n this.undefStack.push({});\n }\n /**\n * End current nested group, restoring values before the group began.\n */\n\n\n endGroup() {\n if (this.undefStack.length === 0) {\n throw new ParseError(\"Unbalanced namespace destruction: attempt \" + \"to pop global namespace; please report this as a bug\");\n }\n\n var undefs = this.undefStack.pop();\n\n for (var undef in undefs) {\n if (undefs.hasOwnProperty(undef)) {\n if (undefs[undef] == null) {\n delete this.current[undef];\n } else {\n this.current[undef] = undefs[undef];\n }\n }\n }\n }\n /**\n * Ends all currently nested groups (if any), restoring values before the\n * groups began. Useful in case of an error in the middle of parsing.\n */\n\n\n endGroups() {\n while (this.undefStack.length > 0) {\n this.endGroup();\n }\n }\n /**\n * Detect whether `name` has a definition. Equivalent to\n * `get(name) != null`.\n */\n\n\n has(name) {\n return this.current.hasOwnProperty(name) || this.builtins.hasOwnProperty(name);\n }\n /**\n * Get the current value of a name, or `undefined` if there is no value.\n *\n * Note: Do not use `if (namespace.get(...))` to detect whether a macro\n * is defined, as the definition may be the empty string which evaluates\n * to `false` in JavaScript. Use `if (namespace.get(...) != null)` or\n * `if (namespace.has(...))`.\n */\n\n\n get(name) {\n if (this.current.hasOwnProperty(name)) {\n return this.current[name];\n } else {\n return this.builtins[name];\n }\n }\n /**\n * Set the current value of a name, and optionally set it globally too.\n * Local set() sets the current value and (when appropriate) adds an undo\n * operation to the undo stack. Global set() may change the undo\n * operation at every level, so takes time linear in their number.\n * A value of undefined means to delete existing definitions.\n */\n\n\n set(name, value, global) {\n if (global === void 0) {\n global = false;\n }\n\n if (global) {\n // Global set is equivalent to setting in all groups. Simulate this\n // by destroying any undos currently scheduled for this name,\n // and adding an undo with the *new* value (in case it later gets\n // locally reset within this environment).\n for (var i = 0; i < this.undefStack.length; i++) {\n delete this.undefStack[i][name];\n }\n\n if (this.undefStack.length > 0) {\n this.undefStack[this.undefStack.length - 1][name] = value;\n }\n } else {\n // Undo this set at end of this group (possibly to `undefined`),\n // unless an undo is already in place, in which case that older\n // value is the correct one.\n var top = this.undefStack[this.undefStack.length - 1];\n\n if (top && !top.hasOwnProperty(name)) {\n top[name] = this.current[name];\n }\n }\n\n if (value == null) {\n delete this.current[name];\n } else {\n this.current[name] = value;\n }\n }\n\n}\n\n/**\n * Predefined macros for KaTeX.\n * This can be used to define some commands in terms of others.\n */\nvar macros = _macros;\n// macro tools\n\ndefineMacro(\"\\\\noexpand\", function (context) {\n // The expansion is the token itself; but that token is interpreted\n // as if its meaning were \u2018\\relax\u2019 if it is a control sequence that\n // would ordinarily be expanded by TeX\u2019s expansion rules.\n var t = context.popToken();\n\n if (context.isExpandable(t.text)) {\n t.noexpand = true;\n t.treatAsRelax = true;\n }\n\n return {\n tokens: [t],\n numArgs: 0\n };\n});\ndefineMacro(\"\\\\expandafter\", function (context) {\n // TeX first reads the token that comes immediately after \\expandafter,\n // without expanding it; let\u2019s call this token t. Then TeX reads the\n // token that comes after t (and possibly more tokens, if that token\n // has an argument), replacing it by its expansion. Finally TeX puts\n // t back in front of that expansion.\n var t = context.popToken();\n context.expandOnce(true); // expand only an expandable token\n\n return {\n tokens: [t],\n numArgs: 0\n };\n}); // LaTeX's \\@firstoftwo{#1}{#2} expands to #1, skipping #2\n// TeX source: \\long\\def\\@firstoftwo#1#2{#1}\n\ndefineMacro(\"\\\\@firstoftwo\", function (context) {\n var args = context.consumeArgs(2);\n return {\n tokens: args[0],\n numArgs: 0\n };\n}); // LaTeX's \\@secondoftwo{#1}{#2} expands to #2, skipping #1\n// TeX source: \\long\\def\\@secondoftwo#1#2{#2}\n\ndefineMacro(\"\\\\@secondoftwo\", function (context) {\n var args = context.consumeArgs(2);\n return {\n tokens: args[1],\n numArgs: 0\n };\n}); // LaTeX's \\@ifnextchar{#1}{#2}{#3} looks ahead to the next (unexpanded)\n// symbol that isn't a space, consuming any spaces but not consuming the\n// first nonspace character. If that nonspace character matches #1, then\n// the macro expands to #2; otherwise, it expands to #3.\n\ndefineMacro(\"\\\\@ifnextchar\", function (context) {\n var args = context.consumeArgs(3); // symbol, if, else\n\n context.consumeSpaces();\n var nextToken = context.future();\n\n if (args[0].length === 1 && args[0][0].text === nextToken.text) {\n return {\n tokens: args[1],\n numArgs: 0\n };\n } else {\n return {\n tokens: args[2],\n numArgs: 0\n };\n }\n}); // LaTeX's \\@ifstar{#1}{#2} looks ahead to the next (unexpanded) symbol.\n// If it is `*`, then it consumes the symbol, and the macro expands to #1;\n// otherwise, the macro expands to #2 (without consuming the symbol).\n// TeX source: \\def\\@ifstar#1{\\@ifnextchar *{\\@firstoftwo{#1}}}\n\ndefineMacro(\"\\\\@ifstar\", \"\\\\@ifnextchar *{\\\\@firstoftwo{#1}}\"); // LaTeX's \\TextOrMath{#1}{#2} expands to #1 in text mode, #2 in math mode\n\ndefineMacro(\"\\\\TextOrMath\", function (context) {\n var args = context.consumeArgs(2);\n\n if (context.mode === 'text') {\n return {\n tokens: args[0],\n numArgs: 0\n };\n } else {\n return {\n tokens: args[1],\n numArgs: 0\n };\n }\n}); // Lookup table for parsing numbers in base 8 through 16\n\nvar digitToNumber = {\n \"0\": 0,\n \"1\": 1,\n \"2\": 2,\n \"3\": 3,\n \"4\": 4,\n \"5\": 5,\n \"6\": 6,\n \"7\": 7,\n \"8\": 8,\n \"9\": 9,\n \"a\": 10,\n \"A\": 10,\n \"b\": 11,\n \"B\": 11,\n \"c\": 12,\n \"C\": 12,\n \"d\": 13,\n \"D\": 13,\n \"e\": 14,\n \"E\": 14,\n \"f\": 15,\n \"F\": 15\n}; // TeX \\char makes a literal character (catcode 12) using the following forms:\n// (see The TeXBook, p. 43)\n// \\char123 -- decimal\n// \\char'123 -- octal\n// \\char\"123 -- hex\n// \\char`x -- character that can be written (i.e. isn't active)\n// \\char`\\x -- character that cannot be written (e.g. %)\n// These all refer to characters from the font, so we turn them into special\n// calls to a function \\@char dealt with in the Parser.\n\ndefineMacro(\"\\\\char\", function (context) {\n var token = context.popToken();\n var base;\n var number = '';\n\n if (token.text === \"'\") {\n base = 8;\n token = context.popToken();\n } else if (token.text === '\"') {\n base = 16;\n token = context.popToken();\n } else if (token.text === \"`\") {\n token = context.popToken();\n\n if (token.text[0] === \"\\\\\") {\n number = token.text.charCodeAt(1);\n } else if (token.text === \"EOF\") {\n throw new ParseError(\"\\\\char` missing argument\");\n } else {\n number = token.text.charCodeAt(0);\n }\n } else {\n base = 10;\n }\n\n if (base) {\n // Parse a number in the given base, starting with first `token`.\n number = digitToNumber[token.text];\n\n if (number == null || number >= base) {\n throw new ParseError(\"Invalid base-\" + base + \" digit \" + token.text);\n }\n\n var digit;\n\n while ((digit = digitToNumber[context.future().text]) != null && digit < base) {\n number *= base;\n number += digit;\n context.popToken();\n }\n }\n\n return \"\\\\@char{\" + number + \"}\";\n}); // \\newcommand{\\macro}[args]{definition}\n// \\renewcommand{\\macro}[args]{definition}\n// TODO: Optional arguments: \\newcommand{\\macro}[args][default]{definition}\n\nvar newcommand = (context, existsOK, nonexistsOK, skipIfExists) => {\n var arg = context.consumeArg().tokens;\n\n if (arg.length !== 1) {\n throw new ParseError(\"\\\\newcommand's first argument must be a macro name\");\n }\n\n var name = arg[0].text;\n var exists = context.isDefined(name);\n\n if (exists && !existsOK) {\n throw new ParseError(\"\\\\newcommand{\" + name + \"} attempting to redefine \" + (name + \"; use \\\\renewcommand\"));\n }\n\n if (!exists && !nonexistsOK) {\n throw new ParseError(\"\\\\renewcommand{\" + name + \"} when command \" + name + \" \" + \"does not yet exist; use \\\\newcommand\");\n }\n\n var numArgs = 0;\n arg = context.consumeArg().tokens;\n\n if (arg.length === 1 && arg[0].text === \"[\") {\n var argText = '';\n var token = context.expandNextToken();\n\n while (token.text !== \"]\" && token.text !== \"EOF\") {\n // TODO: Should properly expand arg, e.g., ignore {}s\n argText += token.text;\n token = context.expandNextToken();\n }\n\n if (!argText.match(/^\\s*[0-9]+\\s*$/)) {\n throw new ParseError(\"Invalid number of arguments: \" + argText);\n }\n\n numArgs = parseInt(argText);\n arg = context.consumeArg().tokens;\n }\n\n if (!(exists && skipIfExists)) {\n // Final arg is the expansion of the macro\n context.macros.set(name, {\n tokens: arg,\n numArgs\n });\n }\n\n return '';\n};\n\ndefineMacro(\"\\\\newcommand\", context => newcommand(context, false, true, false));\ndefineMacro(\"\\\\renewcommand\", context => newcommand(context, true, false, false));\ndefineMacro(\"\\\\providecommand\", context => newcommand(context, true, true, true)); // terminal (console) tools\n\ndefineMacro(\"\\\\message\", context => {\n var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console\n\n console.log(arg.reverse().map(token => token.text).join(\"\"));\n return '';\n});\ndefineMacro(\"\\\\errmessage\", context => {\n var arg = context.consumeArgs(1)[0]; // eslint-disable-next-line no-console\n\n console.error(arg.reverse().map(token => token.text).join(\"\"));\n return '';\n});\ndefineMacro(\"\\\\show\", context => {\n var tok = context.popToken();\n var name = tok.text; // eslint-disable-next-line no-console\n\n console.log(tok, context.macros.get(name), functions[name], symbols.math[name], symbols.text[name]);\n return '';\n}); //////////////////////////////////////////////////////////////////////\n// Grouping\n// \\let\\bgroup={ \\let\\egroup=}\n\ndefineMacro(\"\\\\bgroup\", \"{\");\ndefineMacro(\"\\\\egroup\", \"}\"); // Symbols from latex.ltx:\n// \\def~{\\nobreakspace{}}\n// \\def\\lq{`}\n// \\def\\rq{'}\n// \\def \\aa {\\r a}\n// \\def \\AA {\\r A}\n\ndefineMacro(\"~\", \"\\\\nobreakspace\");\ndefineMacro(\"\\\\lq\", \"`\");\ndefineMacro(\"\\\\rq\", \"'\");\ndefineMacro(\"\\\\aa\", \"\\\\r a\");\ndefineMacro(\"\\\\AA\", \"\\\\r A\"); // Copyright (C) and registered (R) symbols. Use raw symbol in MathML.\n// \\DeclareTextCommandDefault{\\textcopyright}{\\textcircled{c}}\n// \\DeclareTextCommandDefault{\\textregistered}{\\textcircled{%\n// \\check@mathfonts\\fontsize\\sf@size\\z@\\math@fontsfalse\\selectfont R}}\n// \\DeclareRobustCommand{\\copyright}{%\n// \\ifmmode{\\nfss@text{\\textcopyright}}\\else\\textcopyright\\fi}\n\ndefineMacro(\"\\\\textcopyright\", \"\\\\html@mathml{\\\\textcircled{c}}{\\\\char`\u00A9}\");\ndefineMacro(\"\\\\copyright\", \"\\\\TextOrMath{\\\\textcopyright}{\\\\text{\\\\textcopyright}}\");\ndefineMacro(\"\\\\textregistered\", \"\\\\html@mathml{\\\\textcircled{\\\\scriptsize R}}{\\\\char`\u00AE}\"); // Characters omitted from Unicode range 1D400\u20131D7FF\n\ndefineMacro(\"\\u212C\", \"\\\\mathscr{B}\"); // script\n\ndefineMacro(\"\\u2130\", \"\\\\mathscr{E}\");\ndefineMacro(\"\\u2131\", \"\\\\mathscr{F}\");\ndefineMacro(\"\\u210B\", \"\\\\mathscr{H}\");\ndefineMacro(\"\\u2110\", \"\\\\mathscr{I}\");\ndefineMacro(\"\\u2112\", \"\\\\mathscr{L}\");\ndefineMacro(\"\\u2133\", \"\\\\mathscr{M}\");\ndefineMacro(\"\\u211B\", \"\\\\mathscr{R}\");\ndefineMacro(\"\\u212D\", \"\\\\mathfrak{C}\"); // Fraktur\n\ndefineMacro(\"\\u210C\", \"\\\\mathfrak{H}\");\ndefineMacro(\"\\u2128\", \"\\\\mathfrak{Z}\"); // Define \\Bbbk with a macro that works in both HTML and MathML.\n\ndefineMacro(\"\\\\Bbbk\", \"\\\\Bbb{k}\"); // Unicode middle dot\n// The KaTeX fonts do not contain U+00B7. Instead, \\cdotp displays\n// the dot at U+22C5 and gives it punct spacing.\n\ndefineMacro(\"\\u00b7\", \"\\\\cdotp\"); // \\llap and \\rlap render their contents in text mode\n\ndefineMacro(\"\\\\llap\", \"\\\\mathllap{\\\\textrm{#1}}\");\ndefineMacro(\"\\\\rlap\", \"\\\\mathrlap{\\\\textrm{#1}}\");\ndefineMacro(\"\\\\clap\", \"\\\\mathclap{\\\\textrm{#1}}\"); // \\mathstrut from the TeXbook, p 360\n\ndefineMacro(\"\\\\mathstrut\", \"\\\\vphantom{(}\"); // \\underbar from TeXbook p 353\n\ndefineMacro(\"\\\\underbar\", \"\\\\underline{\\\\text{#1}}\"); // \\not is defined by base/fontmath.ltx via\n// \\DeclareMathSymbol{\\not}{\\mathrel}{symbols}{\"36}\n// It's thus treated like a \\mathrel, but defined by a symbol that has zero\n// width but extends to the right. We use \\rlap to get that spacing.\n// For MathML we write U+0338 here. buildMathML.js will then do the overlay.\n\ndefineMacro(\"\\\\not\", '\\\\html@mathml{\\\\mathrel{\\\\mathrlap\\\\@not}}{\\\\char\"338}'); // Negated symbols from base/fontmath.ltx:\n// \\def\\neq{\\not=} \\let\\ne=\\neq\n// \\DeclareRobustCommand\n// \\notin{\\mathrel{\\m@th\\mathpalette\\c@ncel\\in}}\n// \\def\\c@ncel#1#2{\\m@th\\ooalign{$\\hfil#1\\mkern1mu/\\hfil$\\crcr$#1#2$}}\n\ndefineMacro(\"\\\\neq\", \"\\\\html@mathml{\\\\mathrel{\\\\not=}}{\\\\mathrel{\\\\char`\u2260}}\");\ndefineMacro(\"\\\\ne\", \"\\\\neq\");\ndefineMacro(\"\\u2260\", \"\\\\neq\");\ndefineMacro(\"\\\\notin\", \"\\\\html@mathml{\\\\mathrel{{\\\\in}\\\\mathllap{/\\\\mskip1mu}}}\" + \"{\\\\mathrel{\\\\char`\u2209}}\");\ndefineMacro(\"\\u2209\", \"\\\\notin\"); // Unicode stacked relations\n\ndefineMacro(\"\\u2258\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\kern{-1em}\\\\raisebox{0.4em}{$\\\\scriptsize\\\\frown$}}\" + \"}{\\\\mathrel{\\\\char`\\u2258}}\");\ndefineMacro(\"\\u2259\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\wedge}{=}}{\\\\mathrel{\\\\char`\\u2258}}\");\ndefineMacro(\"\\u225A\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\vee}{=}}{\\\\mathrel{\\\\char`\\u225A}}\");\ndefineMacro(\"\\u225B\", \"\\\\html@mathml{\\\\stackrel{\\\\scriptsize\\\\star}{=}}\" + \"{\\\\mathrel{\\\\char`\\u225B}}\");\ndefineMacro(\"\\u225D\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\mathrm{def}}{=}}\" + \"{\\\\mathrel{\\\\char`\\u225D}}\");\ndefineMacro(\"\\u225E\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny\\\\mathrm{m}}{=}}\" + \"{\\\\mathrel{\\\\char`\\u225E}}\");\ndefineMacro(\"\\u225F\", \"\\\\html@mathml{\\\\stackrel{\\\\tiny?}{=}}{\\\\mathrel{\\\\char`\\u225F}}\"); // Misc Unicode\n\ndefineMacro(\"\\u27C2\", \"\\\\perp\");\ndefineMacro(\"\\u203C\", \"\\\\mathclose{!\\\\mkern-0.8mu!}\");\ndefineMacro(\"\\u220C\", \"\\\\notni\");\ndefineMacro(\"\\u231C\", \"\\\\ulcorner\");\ndefineMacro(\"\\u231D\", \"\\\\urcorner\");\ndefineMacro(\"\\u231E\", \"\\\\llcorner\");\ndefineMacro(\"\\u231F\", \"\\\\lrcorner\");\ndefineMacro(\"\\u00A9\", \"\\\\copyright\");\ndefineMacro(\"\\u00AE\", \"\\\\textregistered\");\ndefineMacro(\"\\uFE0F\", \"\\\\textregistered\"); // The KaTeX fonts have corners at codepoints that don't match Unicode.\n// For MathML purposes, use the Unicode code point.\n\ndefineMacro(\"\\\\ulcorner\", \"\\\\html@mathml{\\\\@ulcorner}{\\\\mathop{\\\\char\\\"231c}}\");\ndefineMacro(\"\\\\urcorner\", \"\\\\html@mathml{\\\\@urcorner}{\\\\mathop{\\\\char\\\"231d}}\");\ndefineMacro(\"\\\\llcorner\", \"\\\\html@mathml{\\\\@llcorner}{\\\\mathop{\\\\char\\\"231e}}\");\ndefineMacro(\"\\\\lrcorner\", \"\\\\html@mathml{\\\\@lrcorner}{\\\\mathop{\\\\char\\\"231f}}\"); //////////////////////////////////////////////////////////////////////\n// LaTeX_2\u03B5\n// \\vdots{\\vbox{\\baselineskip4\\p@ \\lineskiplimit\\z@\n// \\kern6\\p@\\hbox{.}\\hbox{.}\\hbox{.}}}\n// We'll call \\varvdots, which gets a glyph from symbols.js.\n// The zero-width rule gets us an equivalent to the vertical 6pt kern.\n\ndefineMacro(\"\\\\vdots\", \"{\\\\varvdots\\\\rule{0pt}{15pt}}\");\ndefineMacro(\"\\u22ee\", \"\\\\vdots\"); //////////////////////////////////////////////////////////////////////\n// amsmath.sty\n// http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf\n// Italic Greek capital letters. AMS defines these with \\DeclareMathSymbol,\n// but they are equivalent to \\mathit{\\Letter}.\n\ndefineMacro(\"\\\\varGamma\", \"\\\\mathit{\\\\Gamma}\");\ndefineMacro(\"\\\\varDelta\", \"\\\\mathit{\\\\Delta}\");\ndefineMacro(\"\\\\varTheta\", \"\\\\mathit{\\\\Theta}\");\ndefineMacro(\"\\\\varLambda\", \"\\\\mathit{\\\\Lambda}\");\ndefineMacro(\"\\\\varXi\", \"\\\\mathit{\\\\Xi}\");\ndefineMacro(\"\\\\varPi\", \"\\\\mathit{\\\\Pi}\");\ndefineMacro(\"\\\\varSigma\", \"\\\\mathit{\\\\Sigma}\");\ndefineMacro(\"\\\\varUpsilon\", \"\\\\mathit{\\\\Upsilon}\");\ndefineMacro(\"\\\\varPhi\", \"\\\\mathit{\\\\Phi}\");\ndefineMacro(\"\\\\varPsi\", \"\\\\mathit{\\\\Psi}\");\ndefineMacro(\"\\\\varOmega\", \"\\\\mathit{\\\\Omega}\"); //\\newcommand{\\substack}[1]{\\subarray{c}#1\\endsubarray}\n\ndefineMacro(\"\\\\substack\", \"\\\\begin{subarray}{c}#1\\\\end{subarray}\"); // \\renewcommand{\\colon}{\\nobreak\\mskip2mu\\mathpunct{}\\nonscript\n// \\mkern-\\thinmuskip{:}\\mskip6muplus1mu\\relax}\n\ndefineMacro(\"\\\\colon\", \"\\\\nobreak\\\\mskip2mu\\\\mathpunct{}\" + \"\\\\mathchoice{\\\\mkern-3mu}{\\\\mkern-3mu}{}{}{:}\\\\mskip6mu\\\\relax\"); // \\newcommand{\\boxed}[1]{\\fbox{\\m@th$\\displaystyle#1$}}\n\ndefineMacro(\"\\\\boxed\", \"\\\\fbox{$\\\\displaystyle{#1}$}\"); // \\def\\iff{\\DOTSB\\;\\Longleftrightarrow\\;}\n// \\def\\implies{\\DOTSB\\;\\Longrightarrow\\;}\n// \\def\\impliedby{\\DOTSB\\;\\Longleftarrow\\;}\n\ndefineMacro(\"\\\\iff\", \"\\\\DOTSB\\\\;\\\\Longleftrightarrow\\\\;\");\ndefineMacro(\"\\\\implies\", \"\\\\DOTSB\\\\;\\\\Longrightarrow\\\\;\");\ndefineMacro(\"\\\\impliedby\", \"\\\\DOTSB\\\\;\\\\Longleftarrow\\\\;\"); // \\def\\dddot#1{{\\mathop{#1}\\limits^{\\vbox to-1.4\\ex@{\\kern-\\tw@\\ex@\n// \\hbox{\\normalfont ...}\\vss}}}}\n// We use \\overset which avoids the vertical shift of \\mathop.\n\ndefineMacro(\"\\\\dddot\", \"{\\\\overset{\\\\raisebox{-0.1ex}{\\\\normalsize ...}}{#1}}\");\ndefineMacro(\"\\\\ddddot\", \"{\\\\overset{\\\\raisebox{-0.1ex}{\\\\normalsize ....}}{#1}}\"); // AMSMath's automatic \\dots, based on \\mdots@@ macro.\n\nvar dotsByToken = {\n ',': '\\\\dotsc',\n '\\\\not': '\\\\dotsb',\n // \\keybin@ checks for the following:\n '+': '\\\\dotsb',\n '=': '\\\\dotsb',\n '<': '\\\\dotsb',\n '>': '\\\\dotsb',\n '-': '\\\\dotsb',\n '*': '\\\\dotsb',\n ':': '\\\\dotsb',\n // Symbols whose definition starts with \\DOTSB:\n '\\\\DOTSB': '\\\\dotsb',\n '\\\\coprod': '\\\\dotsb',\n '\\\\bigvee': '\\\\dotsb',\n '\\\\bigwedge': '\\\\dotsb',\n '\\\\biguplus': '\\\\dotsb',\n '\\\\bigcap': '\\\\dotsb',\n '\\\\bigcup': '\\\\dotsb',\n '\\\\prod': '\\\\dotsb',\n '\\\\sum': '\\\\dotsb',\n '\\\\bigotimes': '\\\\dotsb',\n '\\\\bigoplus': '\\\\dotsb',\n '\\\\bigodot': '\\\\dotsb',\n '\\\\bigsqcup': '\\\\dotsb',\n '\\\\And': '\\\\dotsb',\n '\\\\longrightarrow': '\\\\dotsb',\n '\\\\Longrightarrow': '\\\\dotsb',\n '\\\\longleftarrow': '\\\\dotsb',\n '\\\\Longleftarrow': '\\\\dotsb',\n '\\\\longleftrightarrow': '\\\\dotsb',\n '\\\\Longleftrightarrow': '\\\\dotsb',\n '\\\\mapsto': '\\\\dotsb',\n '\\\\longmapsto': '\\\\dotsb',\n '\\\\hookrightarrow': '\\\\dotsb',\n '\\\\doteq': '\\\\dotsb',\n // Symbols whose definition starts with \\mathbin:\n '\\\\mathbin': '\\\\dotsb',\n // Symbols whose definition starts with \\mathrel:\n '\\\\mathrel': '\\\\dotsb',\n '\\\\relbar': '\\\\dotsb',\n '\\\\Relbar': '\\\\dotsb',\n '\\\\xrightarrow': '\\\\dotsb',\n '\\\\xleftarrow': '\\\\dotsb',\n // Symbols whose definition starts with \\DOTSI:\n '\\\\DOTSI': '\\\\dotsi',\n '\\\\int': '\\\\dotsi',\n '\\\\oint': '\\\\dotsi',\n '\\\\iint': '\\\\dotsi',\n '\\\\iiint': '\\\\dotsi',\n '\\\\iiiint': '\\\\dotsi',\n '\\\\idotsint': '\\\\dotsi',\n // Symbols whose definition starts with \\DOTSX:\n '\\\\DOTSX': '\\\\dotsx'\n};\ndefineMacro(\"\\\\dots\", function (context) {\n // TODO: If used in text mode, should expand to \\textellipsis.\n // However, in KaTeX, \\textellipsis and \\ldots behave the same\n // (in text mode), and it's unlikely we'd see any of the math commands\n // that affect the behavior of \\dots when in text mode. So fine for now\n // (until we support \\ifmmode ... \\else ... \\fi).\n var thedots = '\\\\dotso';\n var next = context.expandAfterFuture().text;\n\n if (next in dotsByToken) {\n thedots = dotsByToken[next];\n } else if (next.slice(0, 4) === '\\\\not') {\n thedots = '\\\\dotsb';\n } else if (next in symbols.math) {\n if (utils.contains(['bin', 'rel'], symbols.math[next].group)) {\n thedots = '\\\\dotsb';\n }\n }\n\n return thedots;\n});\nvar spaceAfterDots = {\n // \\rightdelim@ checks for the following:\n ')': true,\n ']': true,\n '\\\\rbrack': true,\n '\\\\}': true,\n '\\\\rbrace': true,\n '\\\\rangle': true,\n '\\\\rceil': true,\n '\\\\rfloor': true,\n '\\\\rgroup': true,\n '\\\\rmoustache': true,\n '\\\\right': true,\n '\\\\bigr': true,\n '\\\\biggr': true,\n '\\\\Bigr': true,\n '\\\\Biggr': true,\n // \\extra@ also tests for the following:\n '$': true,\n // \\extrap@ checks for the following:\n ';': true,\n '.': true,\n ',': true\n};\ndefineMacro(\"\\\\dotso\", function (context) {\n var next = context.future().text;\n\n if (next in spaceAfterDots) {\n return \"\\\\ldots\\\\,\";\n } else {\n return \"\\\\ldots\";\n }\n});\ndefineMacro(\"\\\\dotsc\", function (context) {\n var next = context.future().text; // \\dotsc uses \\extra@ but not \\extrap@, instead specially checking for\n // ';' and '.', but doesn't check for ','.\n\n if (next in spaceAfterDots && next !== ',') {\n return \"\\\\ldots\\\\,\";\n } else {\n return \"\\\\ldots\";\n }\n});\ndefineMacro(\"\\\\cdots\", function (context) {\n var next = context.future().text;\n\n if (next in spaceAfterDots) {\n return \"\\\\@cdots\\\\,\";\n } else {\n return \"\\\\@cdots\";\n }\n});\ndefineMacro(\"\\\\dotsb\", \"\\\\cdots\");\ndefineMacro(\"\\\\dotsm\", \"\\\\cdots\");\ndefineMacro(\"\\\\dotsi\", \"\\\\!\\\\cdots\"); // amsmath doesn't actually define \\dotsx, but \\dots followed by a macro\n// starting with \\DOTSX implies \\dotso, and then \\extra@ detects this case\n// and forces the added `\\,`.\n\ndefineMacro(\"\\\\dotsx\", \"\\\\ldots\\\\,\"); // \\let\\DOTSI\\relax\n// \\let\\DOTSB\\relax\n// \\let\\DOTSX\\relax\n\ndefineMacro(\"\\\\DOTSI\", \"\\\\relax\");\ndefineMacro(\"\\\\DOTSB\", \"\\\\relax\");\ndefineMacro(\"\\\\DOTSX\", \"\\\\relax\"); // Spacing, based on amsmath.sty's override of LaTeX defaults\n// \\DeclareRobustCommand{\\tmspace}[3]{%\n// \\ifmmode\\mskip#1#2\\else\\kern#1#3\\fi\\relax}\n\ndefineMacro(\"\\\\tmspace\", \"\\\\TextOrMath{\\\\kern#1#3}{\\\\mskip#1#2}\\\\relax\"); // \\renewcommand{\\,}{\\tmspace+\\thinmuskip{.1667em}}\n// TODO: math mode should use \\thinmuskip\n\ndefineMacro(\"\\\\,\", \"\\\\tmspace+{3mu}{.1667em}\"); // \\let\\thinspace\\,\n\ndefineMacro(\"\\\\thinspace\", \"\\\\,\"); // \\def\\>{\\mskip\\medmuskip}\n// \\renewcommand{\\:}{\\tmspace+\\medmuskip{.2222em}}\n// TODO: \\> and math mode of \\: should use \\medmuskip = 4mu plus 2mu minus 4mu\n\ndefineMacro(\"\\\\>\", \"\\\\mskip{4mu}\");\ndefineMacro(\"\\\\:\", \"\\\\tmspace+{4mu}{.2222em}\"); // \\let\\medspace\\:\n\ndefineMacro(\"\\\\medspace\", \"\\\\:\"); // \\renewcommand{\\;}{\\tmspace+\\thickmuskip{.2777em}}\n// TODO: math mode should use \\thickmuskip = 5mu plus 5mu\n\ndefineMacro(\"\\\\;\", \"\\\\tmspace+{5mu}{.2777em}\"); // \\let\\thickspace\\;\n\ndefineMacro(\"\\\\thickspace\", \"\\\\;\"); // \\renewcommand{\\!}{\\tmspace-\\thinmuskip{.1667em}}\n// TODO: math mode should use \\thinmuskip\n\ndefineMacro(\"\\\\!\", \"\\\\tmspace-{3mu}{.1667em}\"); // \\let\\negthinspace\\!\n\ndefineMacro(\"\\\\negthinspace\", \"\\\\!\"); // \\newcommand{\\negmedspace}{\\tmspace-\\medmuskip{.2222em}}\n// TODO: math mode should use \\medmuskip\n\ndefineMacro(\"\\\\negmedspace\", \"\\\\tmspace-{4mu}{.2222em}\"); // \\newcommand{\\negthickspace}{\\tmspace-\\thickmuskip{.2777em}}\n// TODO: math mode should use \\thickmuskip\n\ndefineMacro(\"\\\\negthickspace\", \"\\\\tmspace-{5mu}{.277em}\"); // \\def\\enspace{\\kern.5em }\n\ndefineMacro(\"\\\\enspace\", \"\\\\kern.5em \"); // \\def\\enskip{\\hskip.5em\\relax}\n\ndefineMacro(\"\\\\enskip\", \"\\\\hskip.5em\\\\relax\"); // \\def\\quad{\\hskip1em\\relax}\n\ndefineMacro(\"\\\\quad\", \"\\\\hskip1em\\\\relax\"); // \\def\\qquad{\\hskip2em\\relax}\n\ndefineMacro(\"\\\\qquad\", \"\\\\hskip2em\\\\relax\"); // \\tag@in@display form of \\tag\n\ndefineMacro(\"\\\\tag\", \"\\\\@ifstar\\\\tag@literal\\\\tag@paren\");\ndefineMacro(\"\\\\tag@paren\", \"\\\\tag@literal{({#1})}\");\ndefineMacro(\"\\\\tag@literal\", context => {\n if (context.macros.get(\"\\\\df@tag\")) {\n throw new ParseError(\"Multiple \\\\tag\");\n }\n\n return \"\\\\gdef\\\\df@tag{\\\\text{#1}}\";\n}); // \\renewcommand{\\bmod}{\\nonscript\\mskip-\\medmuskip\\mkern5mu\\mathbin\n// {\\operator@font mod}\\penalty900\n// \\mkern5mu\\nonscript\\mskip-\\medmuskip}\n// \\newcommand{\\pod}[1]{\\allowbreak\n// \\if@display\\mkern18mu\\else\\mkern8mu\\fi(#1)}\n// \\renewcommand{\\pmod}[1]{\\pod{{\\operator@font mod}\\mkern6mu#1}}\n// \\newcommand{\\mod}[1]{\\allowbreak\\if@display\\mkern18mu\n// \\else\\mkern12mu\\fi{\\operator@font mod}\\,\\,#1}\n// TODO: math mode should use \\medmuskip = 4mu plus 2mu minus 4mu\n\ndefineMacro(\"\\\\bmod\", \"\\\\mathchoice{\\\\mskip1mu}{\\\\mskip1mu}{\\\\mskip5mu}{\\\\mskip5mu}\" + \"\\\\mathbin{\\\\rm mod}\" + \"\\\\mathchoice{\\\\mskip1mu}{\\\\mskip1mu}{\\\\mskip5mu}{\\\\mskip5mu}\");\ndefineMacro(\"\\\\pod\", \"\\\\allowbreak\" + \"\\\\mathchoice{\\\\mkern18mu}{\\\\mkern8mu}{\\\\mkern8mu}{\\\\mkern8mu}(#1)\");\ndefineMacro(\"\\\\pmod\", \"\\\\pod{{\\\\rm mod}\\\\mkern6mu#1}\");\ndefineMacro(\"\\\\mod\", \"\\\\allowbreak\" + \"\\\\mathchoice{\\\\mkern18mu}{\\\\mkern12mu}{\\\\mkern12mu}{\\\\mkern12mu}\" + \"{\\\\rm mod}\\\\,\\\\,#1\"); //////////////////////////////////////////////////////////////////////\n// LaTeX source2e\n// \\expandafter\\let\\expandafter\\@normalcr\n// \\csname\\expandafter\\@gobble\\string\\\\ \\endcsname\n// \\DeclareRobustCommand\\newline{\\@normalcr\\relax}\n\ndefineMacro(\"\\\\newline\", \"\\\\\\\\\\\\relax\"); // \\def\\TeX{T\\kern-.1667em\\lower.5ex\\hbox{E}\\kern-.125emX\\@}\n// TODO: Doesn't normally work in math mode because \\@ fails. KaTeX doesn't\n// support \\@ yet, so that's omitted, and we add \\text so that the result\n// doesn't look funny in math mode.\n\ndefineMacro(\"\\\\TeX\", \"\\\\textrm{\\\\html@mathml{\" + \"T\\\\kern-.1667em\\\\raisebox{-.5ex}{E}\\\\kern-.125emX\" + \"}{TeX}}\"); // \\DeclareRobustCommand{\\LaTeX}{L\\kern-.36em%\n// {\\sbox\\z@ T%\n// \\vbox to\\ht\\z@{\\hbox{\\check@mathfonts\n// \\fontsize\\sf@size\\z@\n// \\math@fontsfalse\\selectfont\n// A}%\n// \\vss}%\n// }%\n// \\kern-.15em%\n// \\TeX}\n// This code aligns the top of the A with the T (from the perspective of TeX's\n// boxes, though visually the A appears to extend above slightly).\n// We compute the corresponding \\raisebox when A is rendered in \\normalsize\n// \\scriptstyle, which has a scale factor of 0.7 (see Options.js).\n\nvar latexRaiseA = makeEm(fontMetricsData['Main-Regular'][\"T\".charCodeAt(0)][1] - 0.7 * fontMetricsData['Main-Regular'][\"A\".charCodeAt(0)][1]);\ndefineMacro(\"\\\\LaTeX\", \"\\\\textrm{\\\\html@mathml{\" + (\"L\\\\kern-.36em\\\\raisebox{\" + latexRaiseA + \"}{\\\\scriptstyle A}\") + \"\\\\kern-.15em\\\\TeX}{LaTeX}}\"); // New KaTeX logo based on tweaking LaTeX logo\n\ndefineMacro(\"\\\\KaTeX\", \"\\\\textrm{\\\\html@mathml{\" + (\"K\\\\kern-.17em\\\\raisebox{\" + latexRaiseA + \"}{\\\\scriptstyle A}\") + \"\\\\kern-.15em\\\\TeX}{KaTeX}}\"); // \\DeclareRobustCommand\\hspace{\\@ifstar\\@hspacer\\@hspace}\n// \\def\\@hspace#1{\\hskip #1\\relax}\n// \\def\\@hspacer#1{\\vrule \\@width\\z@\\nobreak\n// \\hskip #1\\hskip \\z@skip}\n\ndefineMacro(\"\\\\hspace\", \"\\\\@ifstar\\\\@hspacer\\\\@hspace\");\ndefineMacro(\"\\\\@hspace\", \"\\\\hskip #1\\\\relax\");\ndefineMacro(\"\\\\@hspacer\", \"\\\\rule{0pt}{0pt}\\\\hskip #1\\\\relax\"); //////////////////////////////////////////////////////////////////////\n// mathtools.sty\n//\\providecommand\\ordinarycolon{:}\n\ndefineMacro(\"\\\\ordinarycolon\", \":\"); //\\def\\vcentcolon{\\mathrel{\\mathop\\ordinarycolon}}\n//TODO(edemaine): Not yet centered. Fix via \\raisebox or #726\n\ndefineMacro(\"\\\\vcentcolon\", \"\\\\mathrel{\\\\mathop\\\\ordinarycolon}\"); // \\providecommand*\\dblcolon{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}\n\ndefineMacro(\"\\\\dblcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-.9mu}\\\\vcentcolon}}\" + \"{\\\\mathop{\\\\char\\\"2237}}\"); // \\providecommand*\\coloneqq{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}\n\ndefineMacro(\"\\\\coloneqq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}=}}\" + \"{\\\\mathop{\\\\char\\\"2254}}\"); // \u2254\n// \\providecommand*\\Coloneqq{\\dblcolon\\mathrel{\\mkern-1.2mu}=}\n\ndefineMacro(\"\\\\Coloneqq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}=}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"3d}}\"); // \\providecommand*\\coloneq{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}\n\ndefineMacro(\"\\\\coloneq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}}}\" + \"{\\\\mathop{\\\\char\\\"3a\\\\char\\\"2212}}\"); // \\providecommand*\\Coloneq{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}\n\ndefineMacro(\"\\\\Coloneq\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\mathrel{-}}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"2212}}\"); // \\providecommand*\\eqqcolon{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}\n\ndefineMacro(\"\\\\eqqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}}\" + \"{\\\\mathop{\\\\char\\\"2255}}\"); // \u2255\n// \\providecommand*\\Eqqcolon{=\\mathrel{\\mkern-1.2mu}\\dblcolon}\n\ndefineMacro(\"\\\\Eqqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{=\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}}\" + \"{\\\\mathop{\\\\char\\\"3d\\\\char\\\"2237}}\"); // \\providecommand*\\eqcolon{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}\n\ndefineMacro(\"\\\\eqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}}\" + \"{\\\\mathop{\\\\char\\\"2239}}\"); // \\providecommand*\\Eqcolon{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}\n\ndefineMacro(\"\\\\Eqcolon\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\mathrel{-}\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}}\" + \"{\\\\mathop{\\\\char\\\"2212\\\\char\\\"2237}}\"); // \\providecommand*\\colonapprox{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}\n\ndefineMacro(\"\\\\colonapprox\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\approx}}\" + \"{\\\\mathop{\\\\char\\\"3a\\\\char\\\"2248}}\"); // \\providecommand*\\Colonapprox{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}\n\ndefineMacro(\"\\\\Colonapprox\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\approx}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"2248}}\"); // \\providecommand*\\colonsim{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}\n\ndefineMacro(\"\\\\colonsim\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\vcentcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\sim}}\" + \"{\\\\mathop{\\\\char\\\"3a\\\\char\\\"223c}}\"); // \\providecommand*\\Colonsim{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}\n\ndefineMacro(\"\\\\Colonsim\", \"\\\\html@mathml{\" + \"\\\\mathrel{\\\\dblcolon\\\\mathrel{\\\\mkern-1.2mu}\\\\sim}}\" + \"{\\\\mathop{\\\\char\\\"2237\\\\char\\\"223c}}\"); // Some Unicode characters are implemented with macros to mathtools functions.\n\ndefineMacro(\"\\u2237\", \"\\\\dblcolon\"); // ::\n\ndefineMacro(\"\\u2239\", \"\\\\eqcolon\"); // -:\n\ndefineMacro(\"\\u2254\", \"\\\\coloneqq\"); // :=\n\ndefineMacro(\"\\u2255\", \"\\\\eqqcolon\"); // =:\n\ndefineMacro(\"\\u2A74\", \"\\\\Coloneqq\"); // ::=\n//////////////////////////////////////////////////////////////////////\n// colonequals.sty\n// Alternate names for mathtools's macros:\n\ndefineMacro(\"\\\\ratio\", \"\\\\vcentcolon\");\ndefineMacro(\"\\\\coloncolon\", \"\\\\dblcolon\");\ndefineMacro(\"\\\\colonequals\", \"\\\\coloneqq\");\ndefineMacro(\"\\\\coloncolonequals\", \"\\\\Coloneqq\");\ndefineMacro(\"\\\\equalscolon\", \"\\\\eqqcolon\");\ndefineMacro(\"\\\\equalscoloncolon\", \"\\\\Eqqcolon\");\ndefineMacro(\"\\\\colonminus\", \"\\\\coloneq\");\ndefineMacro(\"\\\\coloncolonminus\", \"\\\\Coloneq\");\ndefineMacro(\"\\\\minuscolon\", \"\\\\eqcolon\");\ndefineMacro(\"\\\\minuscoloncolon\", \"\\\\Eqcolon\"); // \\colonapprox name is same in mathtools and colonequals.\n\ndefineMacro(\"\\\\coloncolonapprox\", \"\\\\Colonapprox\"); // \\colonsim name is same in mathtools and colonequals.\n\ndefineMacro(\"\\\\coloncolonsim\", \"\\\\Colonsim\"); // Additional macros, implemented by analogy with mathtools definitions:\n\ndefineMacro(\"\\\\simcolon\", \"\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}\");\ndefineMacro(\"\\\\simcoloncolon\", \"\\\\mathrel{\\\\sim\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\");\ndefineMacro(\"\\\\approxcolon\", \"\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\vcentcolon}\");\ndefineMacro(\"\\\\approxcoloncolon\", \"\\\\mathrel{\\\\approx\\\\mathrel{\\\\mkern-1.2mu}\\\\dblcolon}\"); // Present in newtxmath, pxfonts and txfonts\n\ndefineMacro(\"\\\\notni\", \"\\\\html@mathml{\\\\not\\\\ni}{\\\\mathrel{\\\\char`\\u220C}}\");\ndefineMacro(\"\\\\limsup\", \"\\\\DOTSB\\\\operatorname*{lim\\\\,sup}\");\ndefineMacro(\"\\\\liminf\", \"\\\\DOTSB\\\\operatorname*{lim\\\\,inf}\"); //////////////////////////////////////////////////////////////////////\n// From amsopn.sty\n\ndefineMacro(\"\\\\injlim\", \"\\\\DOTSB\\\\operatorname*{inj\\\\,lim}\");\ndefineMacro(\"\\\\projlim\", \"\\\\DOTSB\\\\operatorname*{proj\\\\,lim}\");\ndefineMacro(\"\\\\varlimsup\", \"\\\\DOTSB\\\\operatorname*{\\\\overline{lim}}\");\ndefineMacro(\"\\\\varliminf\", \"\\\\DOTSB\\\\operatorname*{\\\\underline{lim}}\");\ndefineMacro(\"\\\\varinjlim\", \"\\\\DOTSB\\\\operatorname*{\\\\underrightarrow{lim}}\");\ndefineMacro(\"\\\\varprojlim\", \"\\\\DOTSB\\\\operatorname*{\\\\underleftarrow{lim}}\"); //////////////////////////////////////////////////////////////////////\n// MathML alternates for KaTeX glyphs in the Unicode private area\n\ndefineMacro(\"\\\\gvertneqq\", \"\\\\html@mathml{\\\\@gvertneqq}{\\u2269}\");\ndefineMacro(\"\\\\lvertneqq\", \"\\\\html@mathml{\\\\@lvertneqq}{\\u2268}\");\ndefineMacro(\"\\\\ngeqq\", \"\\\\html@mathml{\\\\@ngeqq}{\\u2271}\");\ndefineMacro(\"\\\\ngeqslant\", \"\\\\html@mathml{\\\\@ngeqslant}{\\u2271}\");\ndefineMacro(\"\\\\nleqq\", \"\\\\html@mathml{\\\\@nleqq}{\\u2270}\");\ndefineMacro(\"\\\\nleqslant\", \"\\\\html@mathml{\\\\@nleqslant}{\\u2270}\");\ndefineMacro(\"\\\\nshortmid\", \"\\\\html@mathml{\\\\@nshortmid}{\u2224}\");\ndefineMacro(\"\\\\nshortparallel\", \"\\\\html@mathml{\\\\@nshortparallel}{\u2226}\");\ndefineMacro(\"\\\\nsubseteqq\", \"\\\\html@mathml{\\\\@nsubseteqq}{\\u2288}\");\ndefineMacro(\"\\\\nsupseteqq\", \"\\\\html@mathml{\\\\@nsupseteqq}{\\u2289}\");\ndefineMacro(\"\\\\varsubsetneq\", \"\\\\html@mathml{\\\\@varsubsetneq}{\u228A}\");\ndefineMacro(\"\\\\varsubsetneqq\", \"\\\\html@mathml{\\\\@varsubsetneqq}{\u2ACB}\");\ndefineMacro(\"\\\\varsupsetneq\", \"\\\\html@mathml{\\\\@varsupsetneq}{\u228B}\");\ndefineMacro(\"\\\\varsupsetneqq\", \"\\\\html@mathml{\\\\@varsupsetneqq}{\u2ACC}\");\ndefineMacro(\"\\\\imath\", \"\\\\html@mathml{\\\\@imath}{\\u0131}\");\ndefineMacro(\"\\\\jmath\", \"\\\\html@mathml{\\\\@jmath}{\\u0237}\"); //////////////////////////////////////////////////////////////////////\n// stmaryrd and semantic\n// The stmaryrd and semantic packages render the next four items by calling a\n// glyph. Those glyphs do not exist in the KaTeX fonts. Hence the macros.\n\ndefineMacro(\"\\\\llbracket\", \"\\\\html@mathml{\" + \"\\\\mathopen{[\\\\mkern-3.2mu[}}\" + \"{\\\\mathopen{\\\\char`\\u27e6}}\");\ndefineMacro(\"\\\\rrbracket\", \"\\\\html@mathml{\" + \"\\\\mathclose{]\\\\mkern-3.2mu]}}\" + \"{\\\\mathclose{\\\\char`\\u27e7}}\");\ndefineMacro(\"\\u27e6\", \"\\\\llbracket\"); // blackboard bold [\n\ndefineMacro(\"\\u27e7\", \"\\\\rrbracket\"); // blackboard bold ]\n\ndefineMacro(\"\\\\lBrace\", \"\\\\html@mathml{\" + \"\\\\mathopen{\\\\{\\\\mkern-3.2mu[}}\" + \"{\\\\mathopen{\\\\char`\\u2983}}\");\ndefineMacro(\"\\\\rBrace\", \"\\\\html@mathml{\" + \"\\\\mathclose{]\\\\mkern-3.2mu\\\\}}}\" + \"{\\\\mathclose{\\\\char`\\u2984}}\");\ndefineMacro(\"\\u2983\", \"\\\\lBrace\"); // blackboard bold {\n\ndefineMacro(\"\\u2984\", \"\\\\rBrace\"); // blackboard bold }\n// TODO: Create variable sized versions of the last two items. I believe that\n// will require new font glyphs.\n// The stmaryrd function `\\minuso` provides a \"Plimsoll\" symbol that\n// superimposes the characters \\circ and \\mathminus. Used in chemistry.\n\ndefineMacro(\"\\\\minuso\", \"\\\\mathbin{\\\\html@mathml{\" + \"{\\\\mathrlap{\\\\mathchoice{\\\\kern{0.145em}}{\\\\kern{0.145em}}\" + \"{\\\\kern{0.1015em}}{\\\\kern{0.0725em}}\\\\circ}{-}}}\" + \"{\\\\char`\u29B5}}\");\ndefineMacro(\"\u29B5\", \"\\\\minuso\"); //////////////////////////////////////////////////////////////////////\n// texvc.sty\n// The texvc package contains macros available in mediawiki pages.\n// We omit the functions deprecated at\n// https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax\n// We also omit texvc's \\O, which conflicts with \\text{\\O}\n\ndefineMacro(\"\\\\darr\", \"\\\\downarrow\");\ndefineMacro(\"\\\\dArr\", \"\\\\Downarrow\");\ndefineMacro(\"\\\\Darr\", \"\\\\Downarrow\");\ndefineMacro(\"\\\\lang\", \"\\\\langle\");\ndefineMacro(\"\\\\rang\", \"\\\\rangle\");\ndefineMacro(\"\\\\uarr\", \"\\\\uparrow\");\ndefineMacro(\"\\\\uArr\", \"\\\\Uparrow\");\ndefineMacro(\"\\\\Uarr\", \"\\\\Uparrow\");\ndefineMacro(\"\\\\N\", \"\\\\mathbb{N}\");\ndefineMacro(\"\\\\R\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Z\", \"\\\\mathbb{Z}\");\ndefineMacro(\"\\\\alef\", \"\\\\aleph\");\ndefineMacro(\"\\\\alefsym\", \"\\\\aleph\");\ndefineMacro(\"\\\\Alpha\", \"\\\\mathrm{A}\");\ndefineMacro(\"\\\\Beta\", \"\\\\mathrm{B}\");\ndefineMacro(\"\\\\bull\", \"\\\\bullet\");\ndefineMacro(\"\\\\Chi\", \"\\\\mathrm{X}\");\ndefineMacro(\"\\\\clubs\", \"\\\\clubsuit\");\ndefineMacro(\"\\\\cnums\", \"\\\\mathbb{C}\");\ndefineMacro(\"\\\\Complex\", \"\\\\mathbb{C}\");\ndefineMacro(\"\\\\Dagger\", \"\\\\ddagger\");\ndefineMacro(\"\\\\diamonds\", \"\\\\diamondsuit\");\ndefineMacro(\"\\\\empty\", \"\\\\emptyset\");\ndefineMacro(\"\\\\Epsilon\", \"\\\\mathrm{E}\");\ndefineMacro(\"\\\\Eta\", \"\\\\mathrm{H}\");\ndefineMacro(\"\\\\exist\", \"\\\\exists\");\ndefineMacro(\"\\\\harr\", \"\\\\leftrightarrow\");\ndefineMacro(\"\\\\hArr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Harr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\hearts\", \"\\\\heartsuit\");\ndefineMacro(\"\\\\image\", \"\\\\Im\");\ndefineMacro(\"\\\\infin\", \"\\\\infty\");\ndefineMacro(\"\\\\Iota\", \"\\\\mathrm{I}\");\ndefineMacro(\"\\\\isin\", \"\\\\in\");\ndefineMacro(\"\\\\Kappa\", \"\\\\mathrm{K}\");\ndefineMacro(\"\\\\larr\", \"\\\\leftarrow\");\ndefineMacro(\"\\\\lArr\", \"\\\\Leftarrow\");\ndefineMacro(\"\\\\Larr\", \"\\\\Leftarrow\");\ndefineMacro(\"\\\\lrarr\", \"\\\\leftrightarrow\");\ndefineMacro(\"\\\\lrArr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Lrarr\", \"\\\\Leftrightarrow\");\ndefineMacro(\"\\\\Mu\", \"\\\\mathrm{M}\");\ndefineMacro(\"\\\\natnums\", \"\\\\mathbb{N}\");\ndefineMacro(\"\\\\Nu\", \"\\\\mathrm{N}\");\ndefineMacro(\"\\\\Omicron\", \"\\\\mathrm{O}\");\ndefineMacro(\"\\\\plusmn\", \"\\\\pm\");\ndefineMacro(\"\\\\rarr\", \"\\\\rightarrow\");\ndefineMacro(\"\\\\rArr\", \"\\\\Rightarrow\");\ndefineMacro(\"\\\\Rarr\", \"\\\\Rightarrow\");\ndefineMacro(\"\\\\real\", \"\\\\Re\");\ndefineMacro(\"\\\\reals\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Reals\", \"\\\\mathbb{R}\");\ndefineMacro(\"\\\\Rho\", \"\\\\mathrm{P}\");\ndefineMacro(\"\\\\sdot\", \"\\\\cdot\");\ndefineMacro(\"\\\\sect\", \"\\\\S\");\ndefineMacro(\"\\\\spades\", \"\\\\spadesuit\");\ndefineMacro(\"\\\\sub\", \"\\\\subset\");\ndefineMacro(\"\\\\sube\", \"\\\\subseteq\");\ndefineMacro(\"\\\\supe\", \"\\\\supseteq\");\ndefineMacro(\"\\\\Tau\", \"\\\\mathrm{T}\");\ndefineMacro(\"\\\\thetasym\", \"\\\\vartheta\"); // TODO: defineMacro(\"\\\\varcoppa\", \"\\\\\\mbox{\\\\coppa}\");\n\ndefineMacro(\"\\\\weierp\", \"\\\\wp\");\ndefineMacro(\"\\\\Zeta\", \"\\\\mathrm{Z}\"); //////////////////////////////////////////////////////////////////////\n// statmath.sty\n// https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf\n\ndefineMacro(\"\\\\argmin\", \"\\\\DOTSB\\\\operatorname*{arg\\\\,min}\");\ndefineMacro(\"\\\\argmax\", \"\\\\DOTSB\\\\operatorname*{arg\\\\,max}\");\ndefineMacro(\"\\\\plim\", \"\\\\DOTSB\\\\mathop{\\\\operatorname{plim}}\\\\limits\"); //////////////////////////////////////////////////////////////////////\n// braket.sty\n// http://ctan.math.washington.edu/tex-archive/macros/latex/contrib/braket/braket.pdf\n\ndefineMacro(\"\\\\bra\", \"\\\\mathinner{\\\\langle{#1}|}\");\ndefineMacro(\"\\\\ket\", \"\\\\mathinner{|{#1}\\\\rangle}\");\ndefineMacro(\"\\\\braket\", \"\\\\mathinner{\\\\langle{#1}\\\\rangle}\");\ndefineMacro(\"\\\\Bra\", \"\\\\left\\\\langle#1\\\\right|\");\ndefineMacro(\"\\\\Ket\", \"\\\\left|#1\\\\right\\\\rangle\");\n\nvar braketHelper = one => context => {\n var left = context.consumeArg().tokens;\n var middle = context.consumeArg().tokens;\n var middleDouble = context.consumeArg().tokens;\n var right = context.consumeArg().tokens;\n var oldMiddle = context.macros.get(\"|\");\n var oldMiddleDouble = context.macros.get(\"\\\\|\");\n context.macros.beginGroup();\n\n var midMacro = double => context => {\n if (one) {\n // Only modify the first instance of | or \\|\n context.macros.set(\"|\", oldMiddle);\n\n if (middleDouble.length) {\n context.macros.set(\"\\\\|\", oldMiddleDouble);\n }\n }\n\n var doubled = double;\n\n if (!double && middleDouble.length) {\n // Mimic \\@ifnextchar\n var nextToken = context.future();\n\n if (nextToken.text === \"|\") {\n context.popToken();\n doubled = true;\n }\n }\n\n return {\n tokens: doubled ? middleDouble : middle,\n numArgs: 0\n };\n };\n\n context.macros.set(\"|\", midMacro(false));\n\n if (middleDouble.length) {\n context.macros.set(\"\\\\|\", midMacro(true));\n }\n\n var arg = context.consumeArg().tokens;\n var expanded = context.expandTokens([...right, ...arg, ...left // reversed\n ]);\n context.macros.endGroup();\n return {\n tokens: expanded.reverse(),\n numArgs: 0\n };\n};\n\ndefineMacro(\"\\\\bra@ket\", braketHelper(false));\ndefineMacro(\"\\\\bra@set\", braketHelper(true));\ndefineMacro(\"\\\\Braket\", \"\\\\bra@ket{\\\\left\\\\langle}\" + \"{\\\\,\\\\middle\\\\vert\\\\,}{\\\\,\\\\middle\\\\vert\\\\,}{\\\\right\\\\rangle}\");\ndefineMacro(\"\\\\Set\", \"\\\\bra@set{\\\\left\\\\{\\\\:}\" + \"{\\\\;\\\\middle\\\\vert\\\\;}{\\\\;\\\\middle\\\\Vert\\\\;}{\\\\:\\\\right\\\\}}\");\ndefineMacro(\"\\\\set\", \"\\\\bra@set{\\\\{\\\\,}{\\\\mid}{}{\\\\,\\\\}}\"); // has no support for special || or \\|\n//////////////////////////////////////////////////////////////////////\n// actuarialangle.dtx\n\ndefineMacro(\"\\\\angln\", \"{\\\\angl n}\"); // Custom Khan Academy colors, should be moved to an optional package\n\ndefineMacro(\"\\\\blue\", \"\\\\textcolor{##6495ed}{#1}\");\ndefineMacro(\"\\\\orange\", \"\\\\textcolor{##ffa500}{#1}\");\ndefineMacro(\"\\\\pink\", \"\\\\textcolor{##ff00af}{#1}\");\ndefineMacro(\"\\\\red\", \"\\\\textcolor{##df0030}{#1}\");\ndefineMacro(\"\\\\green\", \"\\\\textcolor{##28ae7b}{#1}\");\ndefineMacro(\"\\\\gray\", \"\\\\textcolor{gray}{#1}\");\ndefineMacro(\"\\\\purple\", \"\\\\textcolor{##9d38bd}{#1}\");\ndefineMacro(\"\\\\blueA\", \"\\\\textcolor{##ccfaff}{#1}\");\ndefineMacro(\"\\\\blueB\", \"\\\\textcolor{##80f6ff}{#1}\");\ndefineMacro(\"\\\\blueC\", \"\\\\textcolor{##63d9ea}{#1}\");\ndefineMacro(\"\\\\blueD\", \"\\\\textcolor{##11accd}{#1}\");\ndefineMacro(\"\\\\blueE\", \"\\\\textcolor{##0c7f99}{#1}\");\ndefineMacro(\"\\\\tealA\", \"\\\\textcolor{##94fff5}{#1}\");\ndefineMacro(\"\\\\tealB\", \"\\\\textcolor{##26edd5}{#1}\");\ndefineMacro(\"\\\\tealC\", \"\\\\textcolor{##01d1c1}{#1}\");\ndefineMacro(\"\\\\tealD\", \"\\\\textcolor{##01a995}{#1}\");\ndefineMacro(\"\\\\tealE\", \"\\\\textcolor{##208170}{#1}\");\ndefineMacro(\"\\\\greenA\", \"\\\\textcolor{##b6ffb0}{#1}\");\ndefineMacro(\"\\\\greenB\", \"\\\\textcolor{##8af281}{#1}\");\ndefineMacro(\"\\\\greenC\", \"\\\\textcolor{##74cf70}{#1}\");\ndefineMacro(\"\\\\greenD\", \"\\\\textcolor{##1fab54}{#1}\");\ndefineMacro(\"\\\\greenE\", \"\\\\textcolor{##0d923f}{#1}\");\ndefineMacro(\"\\\\goldA\", \"\\\\textcolor{##ffd0a9}{#1}\");\ndefineMacro(\"\\\\goldB\", \"\\\\textcolor{##ffbb71}{#1}\");\ndefineMacro(\"\\\\goldC\", \"\\\\textcolor{##ff9c39}{#1}\");\ndefineMacro(\"\\\\goldD\", \"\\\\textcolor{##e07d10}{#1}\");\ndefineMacro(\"\\\\goldE\", \"\\\\textcolor{##a75a05}{#1}\");\ndefineMacro(\"\\\\redA\", \"\\\\textcolor{##fca9a9}{#1}\");\ndefineMacro(\"\\\\redB\", \"\\\\textcolor{##ff8482}{#1}\");\ndefineMacro(\"\\\\redC\", \"\\\\textcolor{##f9685d}{#1}\");\ndefineMacro(\"\\\\redD\", \"\\\\textcolor{##e84d39}{#1}\");\ndefineMacro(\"\\\\redE\", \"\\\\textcolor{##bc2612}{#1}\");\ndefineMacro(\"\\\\maroonA\", \"\\\\textcolor{##ffbde0}{#1}\");\ndefineMacro(\"\\\\maroonB\", \"\\\\textcolor{##ff92c6}{#1}\");\ndefineMacro(\"\\\\maroonC\", \"\\\\textcolor{##ed5fa6}{#1}\");\ndefineMacro(\"\\\\maroonD\", \"\\\\textcolor{##ca337c}{#1}\");\ndefineMacro(\"\\\\maroonE\", \"\\\\textcolor{##9e034e}{#1}\");\ndefineMacro(\"\\\\purpleA\", \"\\\\textcolor{##ddd7ff}{#1}\");\ndefineMacro(\"\\\\purpleB\", \"\\\\textcolor{##c6b9fc}{#1}\");\ndefineMacro(\"\\\\purpleC\", \"\\\\textcolor{##aa87ff}{#1}\");\ndefineMacro(\"\\\\purpleD\", \"\\\\textcolor{##7854ab}{#1}\");\ndefineMacro(\"\\\\purpleE\", \"\\\\textcolor{##543b78}{#1}\");\ndefineMacro(\"\\\\mintA\", \"\\\\textcolor{##f5f9e8}{#1}\");\ndefineMacro(\"\\\\mintB\", \"\\\\textcolor{##edf2df}{#1}\");\ndefineMacro(\"\\\\mintC\", \"\\\\textcolor{##e0e5cc}{#1}\");\ndefineMacro(\"\\\\grayA\", \"\\\\textcolor{##f6f7f7}{#1}\");\ndefineMacro(\"\\\\grayB\", \"\\\\textcolor{##f0f1f2}{#1}\");\ndefineMacro(\"\\\\grayC\", \"\\\\textcolor{##e3e5e6}{#1}\");\ndefineMacro(\"\\\\grayD\", \"\\\\textcolor{##d6d8da}{#1}\");\ndefineMacro(\"\\\\grayE\", \"\\\\textcolor{##babec2}{#1}\");\ndefineMacro(\"\\\\grayF\", \"\\\\textcolor{##888d93}{#1}\");\ndefineMacro(\"\\\\grayG\", \"\\\\textcolor{##626569}{#1}\");\ndefineMacro(\"\\\\grayH\", \"\\\\textcolor{##3b3e40}{#1}\");\ndefineMacro(\"\\\\grayI\", \"\\\\textcolor{##21242c}{#1}\");\ndefineMacro(\"\\\\kaBlue\", \"\\\\textcolor{##314453}{#1}\");\ndefineMacro(\"\\\\kaGreen\", \"\\\\textcolor{##71B307}{#1}\");\n\n/**\n * This file contains the \u201Cgullet\u201D where macros are expanded\n * until only non-macro tokens remain.\n */\n// List of commands that act like macros but aren't defined as a macro,\n// function, or symbol. Used in `isDefined`.\nvar implicitCommands = {\n \"^\": true,\n // Parser.js\n \"_\": true,\n // Parser.js\n \"\\\\limits\": true,\n // Parser.js\n \"\\\\nolimits\": true // Parser.js\n\n};\nclass MacroExpander {\n constructor(input, settings, mode) {\n this.settings = void 0;\n this.expansionCount = void 0;\n this.lexer = void 0;\n this.macros = void 0;\n this.stack = void 0;\n this.mode = void 0;\n this.settings = settings;\n this.expansionCount = 0;\n this.feed(input); // Make new global namespace\n\n this.macros = new Namespace(macros, settings.macros);\n this.mode = mode;\n this.stack = []; // contains tokens in REVERSE order\n }\n /**\n * Feed a new input string to the same MacroExpander\n * (with existing macros etc.).\n */\n\n\n feed(input) {\n this.lexer = new Lexer(input, this.settings);\n }\n /**\n * Switches between \"text\" and \"math\" modes.\n */\n\n\n switchMode(newMode) {\n this.mode = newMode;\n }\n /**\n * Start a new group nesting within all namespaces.\n */\n\n\n beginGroup() {\n this.macros.beginGroup();\n }\n /**\n * End current group nesting within all namespaces.\n */\n\n\n endGroup() {\n this.macros.endGroup();\n }\n /**\n * Ends all currently nested groups (if any), restoring values before the\n * groups began. Useful in case of an error in the middle of parsing.\n */\n\n\n endGroups() {\n this.macros.endGroups();\n }\n /**\n * Returns the topmost token on the stack, without expanding it.\n * Similar in behavior to TeX's `\\futurelet`.\n */\n\n\n future() {\n if (this.stack.length === 0) {\n this.pushToken(this.lexer.lex());\n }\n\n return this.stack[this.stack.length - 1];\n }\n /**\n * Remove and return the next unexpanded token.\n */\n\n\n popToken() {\n this.future(); // ensure non-empty stack\n\n return this.stack.pop();\n }\n /**\n * Add a given token to the token stack. In particular, this get be used\n * to put back a token returned from one of the other methods.\n */\n\n\n pushToken(token) {\n this.stack.push(token);\n }\n /**\n * Append an array of tokens to the token stack.\n */\n\n\n pushTokens(tokens) {\n this.stack.push(...tokens);\n }\n /**\n * Find an macro argument without expanding tokens and append the array of\n * tokens to the token stack. Uses Token as a container for the result.\n */\n\n\n scanArgument(isOptional) {\n var start;\n var end;\n var tokens;\n\n if (isOptional) {\n this.consumeSpaces(); // \\@ifnextchar gobbles any space following it\n\n if (this.future().text !== \"[\") {\n return null;\n }\n\n start = this.popToken(); // don't include [ in tokens\n\n ({\n tokens,\n end\n } = this.consumeArg([\"]\"]));\n } else {\n ({\n tokens,\n start,\n end\n } = this.consumeArg());\n } // indicate the end of an argument\n\n\n this.pushToken(new Token(\"EOF\", end.loc));\n this.pushTokens(tokens);\n return start.range(end, \"\");\n }\n /**\n * Consume all following space tokens, without expansion.\n */\n\n\n consumeSpaces() {\n for (;;) {\n var token = this.future();\n\n if (token.text === \" \") {\n this.stack.pop();\n } else {\n break;\n }\n }\n }\n /**\n * Consume an argument from the token stream, and return the resulting array\n * of tokens and start/end token.\n */\n\n\n consumeArg(delims) {\n // The argument for a delimited parameter is the shortest (possibly\n // empty) sequence of tokens with properly nested {...} groups that is\n // followed ... by this particular list of non-parameter tokens.\n // The argument for an undelimited parameter is the next nonblank\n // token, unless that token is \u2018{\u2019, when the argument will be the\n // entire {...} group that follows.\n var tokens = [];\n var isDelimited = delims && delims.length > 0;\n\n if (!isDelimited) {\n // Ignore spaces between arguments. As the TeXbook says:\n // \"After you have said \u2018\\def\\row#1#2{...}\u2019, you are allowed to\n // put spaces between the arguments (e.g., \u2018\\row x n\u2019), because\n // TeX doesn\u2019t use single spaces as undelimited arguments.\"\n this.consumeSpaces();\n }\n\n var start = this.future();\n var tok;\n var depth = 0;\n var match = 0;\n\n do {\n tok = this.popToken();\n tokens.push(tok);\n\n if (tok.text === \"{\") {\n ++depth;\n } else if (tok.text === \"}\") {\n --depth;\n\n if (depth === -1) {\n throw new ParseError(\"Extra }\", tok);\n }\n } else if (tok.text === \"EOF\") {\n throw new ParseError(\"Unexpected end of input in a macro argument\" + \", expected '\" + (delims && isDelimited ? delims[match] : \"}\") + \"'\", tok);\n }\n\n if (delims && isDelimited) {\n if ((depth === 0 || depth === 1 && delims[match] === \"{\") && tok.text === delims[match]) {\n ++match;\n\n if (match === delims.length) {\n // don't include delims in tokens\n tokens.splice(-match, match);\n break;\n }\n } else {\n match = 0;\n }\n }\n } while (depth !== 0 || isDelimited); // If the argument found ... has the form \u2018{}\u2019,\n // ... the outermost braces enclosing the argument are removed\n\n\n if (start.text === \"{\" && tokens[tokens.length - 1].text === \"}\") {\n tokens.pop();\n tokens.shift();\n }\n\n tokens.reverse(); // to fit in with stack order\n\n return {\n tokens,\n start,\n end: tok\n };\n }\n /**\n * Consume the specified number of (delimited) arguments from the token\n * stream and return the resulting array of arguments.\n */\n\n\n consumeArgs(numArgs, delimiters) {\n if (delimiters) {\n if (delimiters.length !== numArgs + 1) {\n throw new ParseError(\"The length of delimiters doesn't match the number of args!\");\n }\n\n var delims = delimiters[0];\n\n for (var i = 0; i < delims.length; i++) {\n var tok = this.popToken();\n\n if (delims[i] !== tok.text) {\n throw new ParseError(\"Use of the macro doesn't match its definition\", tok);\n }\n }\n }\n\n var args = [];\n\n for (var _i = 0; _i < numArgs; _i++) {\n args.push(this.consumeArg(delimiters && delimiters[_i + 1]).tokens);\n }\n\n return args;\n }\n /**\n * Increment `expansionCount` by the specified amount.\n * Throw an error if it exceeds `maxExpand`.\n */\n\n\n countExpansion(amount) {\n this.expansionCount += amount;\n\n if (this.expansionCount > this.settings.maxExpand) {\n throw new ParseError(\"Too many expansions: infinite loop or \" + \"need to increase maxExpand setting\");\n }\n }\n /**\n * Expand the next token only once if possible.\n *\n * If the token is expanded, the resulting tokens will be pushed onto\n * the stack in reverse order, and the number of such tokens will be\n * returned. This number might be zero or positive.\n *\n * If not, the return value is `false`, and the next token remains at the\n * top of the stack.\n *\n * In either case, the next token will be on the top of the stack,\n * or the stack will be empty (in case of empty expansion\n * and no other tokens).\n *\n * Used to implement `expandAfterFuture` and `expandNextToken`.\n *\n * If expandableOnly, only expandable tokens are expanded and\n * an undefined control sequence results in an error.\n */\n\n\n expandOnce(expandableOnly) {\n var topToken = this.popToken();\n var name = topToken.text;\n var expansion = !topToken.noexpand ? this._getExpansion(name) : null;\n\n if (expansion == null || expandableOnly && expansion.unexpandable) {\n if (expandableOnly && expansion == null && name[0] === \"\\\\\" && !this.isDefined(name)) {\n throw new ParseError(\"Undefined control sequence: \" + name);\n }\n\n this.pushToken(topToken);\n return false;\n }\n\n this.countExpansion(1);\n var tokens = expansion.tokens;\n var args = this.consumeArgs(expansion.numArgs, expansion.delimiters);\n\n if (expansion.numArgs) {\n // paste arguments in place of the placeholders\n tokens = tokens.slice(); // make a shallow copy\n\n for (var i = tokens.length - 1; i >= 0; --i) {\n var tok = tokens[i];\n\n if (tok.text === \"#\") {\n if (i === 0) {\n throw new ParseError(\"Incomplete placeholder at end of macro body\", tok);\n }\n\n tok = tokens[--i]; // next token on stack\n\n if (tok.text === \"#\") {\n // ## \u2192 #\n tokens.splice(i + 1, 1); // drop first #\n } else if (/^[1-9]$/.test(tok.text)) {\n // replace the placeholder with the indicated argument\n tokens.splice(i, 2, ...args[+tok.text - 1]);\n } else {\n throw new ParseError(\"Not a valid argument number\", tok);\n }\n }\n }\n } // Concatenate expansion onto top of stack.\n\n\n this.pushTokens(tokens);\n return tokens.length;\n }\n /**\n * Expand the next token only once (if possible), and return the resulting\n * top token on the stack (without removing anything from the stack).\n * Similar in behavior to TeX's `\\expandafter\\futurelet`.\n * Equivalent to expandOnce() followed by future().\n */\n\n\n expandAfterFuture() {\n this.expandOnce();\n return this.future();\n }\n /**\n * Recursively expand first token, then return first non-expandable token.\n */\n\n\n expandNextToken() {\n for (;;) {\n if (this.expandOnce() === false) {\n // fully expanded\n var token = this.stack.pop(); // the token after \\noexpand is interpreted as if its meaning\n // were \u2018\\relax\u2019\n\n if (token.treatAsRelax) {\n token.text = \"\\\\relax\";\n }\n\n return token;\n }\n } // Flow unable to figure out that this pathway is impossible.\n // https://github.com/facebook/flow/issues/4808\n\n\n throw new Error(); // eslint-disable-line no-unreachable\n }\n /**\n * Fully expand the given macro name and return the resulting list of\n * tokens, or return `undefined` if no such macro is defined.\n */\n\n\n expandMacro(name) {\n return this.macros.has(name) ? this.expandTokens([new Token(name)]) : undefined;\n }\n /**\n * Fully expand the given token stream and return the resulting list of\n * tokens. Note that the input tokens are in reverse order, but the\n * output tokens are in forward order.\n */\n\n\n expandTokens(tokens) {\n var output = [];\n var oldStackLength = this.stack.length;\n this.pushTokens(tokens);\n\n while (this.stack.length > oldStackLength) {\n // Expand only expandable tokens\n if (this.expandOnce(true) === false) {\n // fully expanded\n var token = this.stack.pop();\n\n if (token.treatAsRelax) {\n // the expansion of \\noexpand is the token itself\n token.noexpand = false;\n token.treatAsRelax = false;\n }\n\n output.push(token);\n }\n } // Count all of these tokens as additional expansions, to prevent\n // exponential blowup from linearly many \\edef's.\n\n\n this.countExpansion(output.length);\n return output;\n }\n /**\n * Fully expand the given macro name and return the result as a string,\n * or return `undefined` if no such macro is defined.\n */\n\n\n expandMacroAsText(name) {\n var tokens = this.expandMacro(name);\n\n if (tokens) {\n return tokens.map(token => token.text).join(\"\");\n } else {\n return tokens;\n }\n }\n /**\n * Returns the expanded macro as a reversed array of tokens and a macro\n * argument count. Or returns `null` if no such macro.\n */\n\n\n _getExpansion(name) {\n var definition = this.macros.get(name);\n\n if (definition == null) {\n // mainly checking for undefined here\n return definition;\n } // If a single character has an associated catcode other than 13\n // (active character), then don't expand it.\n\n\n if (name.length === 1) {\n var catcode = this.lexer.catcodes[name];\n\n if (catcode != null && catcode !== 13) {\n return;\n }\n }\n\n var expansion = typeof definition === \"function\" ? definition(this) : definition;\n\n if (typeof expansion === \"string\") {\n var numArgs = 0;\n\n if (expansion.indexOf(\"#\") !== -1) {\n var stripped = expansion.replace(/##/g, \"\");\n\n while (stripped.indexOf(\"#\" + (numArgs + 1)) !== -1) {\n ++numArgs;\n }\n }\n\n var bodyLexer = new Lexer(expansion, this.settings);\n var tokens = [];\n var tok = bodyLexer.lex();\n\n while (tok.text !== \"EOF\") {\n tokens.push(tok);\n tok = bodyLexer.lex();\n }\n\n tokens.reverse(); // to fit in with stack using push and pop\n\n var expanded = {\n tokens,\n numArgs\n };\n return expanded;\n }\n\n return expansion;\n }\n /**\n * Determine whether a command is currently \"defined\" (has some\n * functionality), meaning that it's a macro (in the current group),\n * a function, a symbol, or one of the special commands listed in\n * `implicitCommands`.\n */\n\n\n isDefined(name) {\n return this.macros.has(name) || functions.hasOwnProperty(name) || symbols.math.hasOwnProperty(name) || symbols.text.hasOwnProperty(name) || implicitCommands.hasOwnProperty(name);\n }\n /**\n * Determine whether a command is expandable.\n */\n\n\n isExpandable(name) {\n var macro = this.macros.get(name);\n return macro != null ? typeof macro === \"string\" || typeof macro === \"function\" || !macro.unexpandable : functions.hasOwnProperty(name) && !functions[name].primitive;\n }\n\n}\n\n// Helpers for Parser.js handling of Unicode (sub|super)script characters.\nvar unicodeSubRegEx = /^[\u208A\u208B\u208C\u208D\u208E\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u2090\u2091\u2095\u1D62\u2C7C\u2096\u2097\u2098\u2099\u2092\u209A\u1D63\u209B\u209C\u1D64\u1D65\u2093\u1D66\u1D67\u1D68\u1D69\u1D6A]/;\nvar uSubsAndSups = Object.freeze({\n '\u208A': '+',\n '\u208B': '-',\n '\u208C': '=',\n '\u208D': '(',\n '\u208E': ')',\n '\u2080': '0',\n '\u2081': '1',\n '\u2082': '2',\n '\u2083': '3',\n '\u2084': '4',\n '\u2085': '5',\n '\u2086': '6',\n '\u2087': '7',\n '\u2088': '8',\n '\u2089': '9',\n '\\u2090': 'a',\n '\\u2091': 'e',\n '\\u2095': 'h',\n '\\u1D62': 'i',\n '\\u2C7C': 'j',\n '\\u2096': 'k',\n '\\u2097': 'l',\n '\\u2098': 'm',\n '\\u2099': 'n',\n '\\u2092': 'o',\n '\\u209A': 'p',\n '\\u1D63': 'r',\n '\\u209B': 's',\n '\\u209C': 't',\n '\\u1D64': 'u',\n '\\u1D65': 'v',\n '\\u2093': 'x',\n '\\u1D66': '\u03B2',\n '\\u1D67': '\u03B3',\n '\\u1D68': '\u03C1',\n '\\u1D69': '\\u03d5',\n '\\u1D6A': '\u03C7',\n '\u207A': '+',\n '\u207B': '-',\n '\u207C': '=',\n '\u207D': '(',\n '\u207E': ')',\n '\u2070': '0',\n '\u00B9': '1',\n '\u00B2': '2',\n '\u00B3': '3',\n '\u2074': '4',\n '\u2075': '5',\n '\u2076': '6',\n '\u2077': '7',\n '\u2078': '8',\n '\u2079': '9',\n '\\u1D2C': 'A',\n '\\u1D2E': 'B',\n '\\u1D30': 'D',\n '\\u1D31': 'E',\n '\\u1D33': 'G',\n '\\u1D34': 'H',\n '\\u1D35': 'I',\n '\\u1D36': 'J',\n '\\u1D37': 'K',\n '\\u1D38': 'L',\n '\\u1D39': 'M',\n '\\u1D3A': 'N',\n '\\u1D3C': 'O',\n '\\u1D3E': 'P',\n '\\u1D3F': 'R',\n '\\u1D40': 'T',\n '\\u1D41': 'U',\n '\\u2C7D': 'V',\n '\\u1D42': 'W',\n '\\u1D43': 'a',\n '\\u1D47': 'b',\n '\\u1D9C': 'c',\n '\\u1D48': 'd',\n '\\u1D49': 'e',\n '\\u1DA0': 'f',\n '\\u1D4D': 'g',\n '\\u02B0': 'h',\n '\\u2071': 'i',\n '\\u02B2': 'j',\n '\\u1D4F': 'k',\n '\\u02E1': 'l',\n '\\u1D50': 'm',\n '\\u207F': 'n',\n '\\u1D52': 'o',\n '\\u1D56': 'p',\n '\\u02B3': 'r',\n '\\u02E2': 's',\n '\\u1D57': 't',\n '\\u1D58': 'u',\n '\\u1D5B': 'v',\n '\\u02B7': 'w',\n '\\u02E3': 'x',\n '\\u02B8': 'y',\n '\\u1DBB': 'z',\n '\\u1D5D': '\u03B2',\n '\\u1D5E': '\u03B3',\n '\\u1D5F': '\u03B4',\n '\\u1D60': '\\u03d5',\n '\\u1D61': '\u03C7',\n '\\u1DBF': '\u03B8'\n});\n\n/* eslint no-constant-condition:0 */\n\nvar unicodeAccents = {\n \"\u0301\": {\n \"text\": \"\\\\'\",\n \"math\": \"\\\\acute\"\n },\n \"\u0300\": {\n \"text\": \"\\\\`\",\n \"math\": \"\\\\grave\"\n },\n \"\u0308\": {\n \"text\": \"\\\\\\\"\",\n \"math\": \"\\\\ddot\"\n },\n \"\u0303\": {\n \"text\": \"\\\\~\",\n \"math\": \"\\\\tilde\"\n },\n \"\u0304\": {\n \"text\": \"\\\\=\",\n \"math\": \"\\\\bar\"\n },\n \"\u0306\": {\n \"text\": \"\\\\u\",\n \"math\": \"\\\\breve\"\n },\n \"\u030C\": {\n \"text\": \"\\\\v\",\n \"math\": \"\\\\check\"\n },\n \"\u0302\": {\n \"text\": \"\\\\^\",\n \"math\": \"\\\\hat\"\n },\n \"\u0307\": {\n \"text\": \"\\\\.\",\n \"math\": \"\\\\dot\"\n },\n \"\u030A\": {\n \"text\": \"\\\\r\",\n \"math\": \"\\\\mathring\"\n },\n \"\u030B\": {\n \"text\": \"\\\\H\"\n },\n \"\u0327\": {\n \"text\": \"\\\\c\"\n }\n};\nvar unicodeSymbols = {\n \"\u00E1\": \"a\u0301\",\n \"\u00E0\": \"a\u0300\",\n \"\u00E4\": \"a\u0308\",\n \"\u01DF\": \"a\u0308\u0304\",\n \"\u00E3\": \"a\u0303\",\n \"\u0101\": \"a\u0304\",\n \"\u0103\": \"a\u0306\",\n \"\u1EAF\": \"a\u0306\u0301\",\n \"\u1EB1\": \"a\u0306\u0300\",\n \"\u1EB5\": \"a\u0306\u0303\",\n \"\u01CE\": \"a\u030C\",\n \"\u00E2\": \"a\u0302\",\n \"\u1EA5\": \"a\u0302\u0301\",\n \"\u1EA7\": \"a\u0302\u0300\",\n \"\u1EAB\": \"a\u0302\u0303\",\n \"\u0227\": \"a\u0307\",\n \"\u01E1\": \"a\u0307\u0304\",\n \"\u00E5\": \"a\u030A\",\n \"\u01FB\": \"a\u030A\u0301\",\n \"\u1E03\": \"b\u0307\",\n \"\u0107\": \"c\u0301\",\n \"\u1E09\": \"c\u0327\u0301\",\n \"\u010D\": \"c\u030C\",\n \"\u0109\": \"c\u0302\",\n \"\u010B\": \"c\u0307\",\n \"\u00E7\": \"c\u0327\",\n \"\u010F\": \"d\u030C\",\n \"\u1E0B\": \"d\u0307\",\n \"\u1E11\": \"d\u0327\",\n \"\u00E9\": \"e\u0301\",\n \"\u00E8\": \"e\u0300\",\n \"\u00EB\": \"e\u0308\",\n \"\u1EBD\": \"e\u0303\",\n \"\u0113\": \"e\u0304\",\n \"\u1E17\": \"e\u0304\u0301\",\n \"\u1E15\": \"e\u0304\u0300\",\n \"\u0115\": \"e\u0306\",\n \"\u1E1D\": \"e\u0327\u0306\",\n \"\u011B\": \"e\u030C\",\n \"\u00EA\": \"e\u0302\",\n \"\u1EBF\": \"e\u0302\u0301\",\n \"\u1EC1\": \"e\u0302\u0300\",\n \"\u1EC5\": \"e\u0302\u0303\",\n \"\u0117\": \"e\u0307\",\n \"\u0229\": \"e\u0327\",\n \"\u1E1F\": \"f\u0307\",\n \"\u01F5\": \"g\u0301\",\n \"\u1E21\": \"g\u0304\",\n \"\u011F\": \"g\u0306\",\n \"\u01E7\": \"g\u030C\",\n \"\u011D\": \"g\u0302\",\n \"\u0121\": \"g\u0307\",\n \"\u0123\": \"g\u0327\",\n \"\u1E27\": \"h\u0308\",\n \"\u021F\": \"h\u030C\",\n \"\u0125\": \"h\u0302\",\n \"\u1E23\": \"h\u0307\",\n \"\u1E29\": \"h\u0327\",\n \"\u00ED\": \"i\u0301\",\n \"\u00EC\": \"i\u0300\",\n \"\u00EF\": \"i\u0308\",\n \"\u1E2F\": \"i\u0308\u0301\",\n \"\u0129\": \"i\u0303\",\n \"\u012B\": \"i\u0304\",\n \"\u012D\": \"i\u0306\",\n \"\u01D0\": \"i\u030C\",\n \"\u00EE\": \"i\u0302\",\n \"\u01F0\": \"j\u030C\",\n \"\u0135\": \"j\u0302\",\n \"\u1E31\": \"k\u0301\",\n \"\u01E9\": \"k\u030C\",\n \"\u0137\": \"k\u0327\",\n \"\u013A\": \"l\u0301\",\n \"\u013E\": \"l\u030C\",\n \"\u013C\": \"l\u0327\",\n \"\u1E3F\": \"m\u0301\",\n \"\u1E41\": \"m\u0307\",\n \"\u0144\": \"n\u0301\",\n \"\u01F9\": \"n\u0300\",\n \"\u00F1\": \"n\u0303\",\n \"\u0148\": \"n\u030C\",\n \"\u1E45\": \"n\u0307\",\n \"\u0146\": \"n\u0327\",\n \"\u00F3\": \"o\u0301\",\n \"\u00F2\": \"o\u0300\",\n \"\u00F6\": \"o\u0308\",\n \"\u022B\": \"o\u0308\u0304\",\n \"\u00F5\": \"o\u0303\",\n \"\u1E4D\": \"o\u0303\u0301\",\n \"\u1E4F\": \"o\u0303\u0308\",\n \"\u022D\": \"o\u0303\u0304\",\n \"\u014D\": \"o\u0304\",\n \"\u1E53\": \"o\u0304\u0301\",\n \"\u1E51\": \"o\u0304\u0300\",\n \"\u014F\": \"o\u0306\",\n \"\u01D2\": \"o\u030C\",\n \"\u00F4\": \"o\u0302\",\n \"\u1ED1\": \"o\u0302\u0301\",\n \"\u1ED3\": \"o\u0302\u0300\",\n \"\u1ED7\": \"o\u0302\u0303\",\n \"\u022F\": \"o\u0307\",\n \"\u0231\": \"o\u0307\u0304\",\n \"\u0151\": \"o\u030B\",\n \"\u1E55\": \"p\u0301\",\n \"\u1E57\": \"p\u0307\",\n \"\u0155\": \"r\u0301\",\n \"\u0159\": \"r\u030C\",\n \"\u1E59\": \"r\u0307\",\n \"\u0157\": \"r\u0327\",\n \"\u015B\": \"s\u0301\",\n \"\u1E65\": \"s\u0301\u0307\",\n \"\u0161\": \"s\u030C\",\n \"\u1E67\": \"s\u030C\u0307\",\n \"\u015D\": \"s\u0302\",\n \"\u1E61\": \"s\u0307\",\n \"\u015F\": \"s\u0327\",\n \"\u1E97\": \"t\u0308\",\n \"\u0165\": \"t\u030C\",\n \"\u1E6B\": \"t\u0307\",\n \"\u0163\": \"t\u0327\",\n \"\u00FA\": \"u\u0301\",\n \"\u00F9\": \"u\u0300\",\n \"\u00FC\": \"u\u0308\",\n \"\u01D8\": \"u\u0308\u0301\",\n \"\u01DC\": \"u\u0308\u0300\",\n \"\u01D6\": \"u\u0308\u0304\",\n \"\u01DA\": \"u\u0308\u030C\",\n \"\u0169\": \"u\u0303\",\n \"\u1E79\": \"u\u0303\u0301\",\n \"\u016B\": \"u\u0304\",\n \"\u1E7B\": \"u\u0304\u0308\",\n \"\u016D\": \"u\u0306\",\n \"\u01D4\": \"u\u030C\",\n \"\u00FB\": \"u\u0302\",\n \"\u016F\": \"u\u030A\",\n \"\u0171\": \"u\u030B\",\n \"\u1E7D\": \"v\u0303\",\n \"\u1E83\": \"w\u0301\",\n \"\u1E81\": \"w\u0300\",\n \"\u1E85\": \"w\u0308\",\n \"\u0175\": \"w\u0302\",\n \"\u1E87\": \"w\u0307\",\n \"\u1E98\": \"w\u030A\",\n \"\u1E8D\": \"x\u0308\",\n \"\u1E8B\": \"x\u0307\",\n \"\u00FD\": \"y\u0301\",\n \"\u1EF3\": \"y\u0300\",\n \"\u00FF\": \"y\u0308\",\n \"\u1EF9\": \"y\u0303\",\n \"\u0233\": \"y\u0304\",\n \"\u0177\": \"y\u0302\",\n \"\u1E8F\": \"y\u0307\",\n \"\u1E99\": \"y\u030A\",\n \"\u017A\": \"z\u0301\",\n \"\u017E\": \"z\u030C\",\n \"\u1E91\": \"z\u0302\",\n \"\u017C\": \"z\u0307\",\n \"\u00C1\": \"A\u0301\",\n \"\u00C0\": \"A\u0300\",\n \"\u00C4\": \"A\u0308\",\n \"\u01DE\": \"A\u0308\u0304\",\n \"\u00C3\": \"A\u0303\",\n \"\u0100\": \"A\u0304\",\n \"\u0102\": \"A\u0306\",\n \"\u1EAE\": \"A\u0306\u0301\",\n \"\u1EB0\": \"A\u0306\u0300\",\n \"\u1EB4\": \"A\u0306\u0303\",\n \"\u01CD\": \"A\u030C\",\n \"\u00C2\": \"A\u0302\",\n \"\u1EA4\": \"A\u0302\u0301\",\n \"\u1EA6\": \"A\u0302\u0300\",\n \"\u1EAA\": \"A\u0302\u0303\",\n \"\u0226\": \"A\u0307\",\n \"\u01E0\": \"A\u0307\u0304\",\n \"\u00C5\": \"A\u030A\",\n \"\u01FA\": \"A\u030A\u0301\",\n \"\u1E02\": \"B\u0307\",\n \"\u0106\": \"C\u0301\",\n \"\u1E08\": \"C\u0327\u0301\",\n \"\u010C\": \"C\u030C\",\n \"\u0108\": \"C\u0302\",\n \"\u010A\": \"C\u0307\",\n \"\u00C7\": \"C\u0327\",\n \"\u010E\": \"D\u030C\",\n \"\u1E0A\": \"D\u0307\",\n \"\u1E10\": \"D\u0327\",\n \"\u00C9\": \"E\u0301\",\n \"\u00C8\": \"E\u0300\",\n \"\u00CB\": \"E\u0308\",\n \"\u1EBC\": \"E\u0303\",\n \"\u0112\": \"E\u0304\",\n \"\u1E16\": \"E\u0304\u0301\",\n \"\u1E14\": \"E\u0304\u0300\",\n \"\u0114\": \"E\u0306\",\n \"\u1E1C\": \"E\u0327\u0306\",\n \"\u011A\": \"E\u030C\",\n \"\u00CA\": \"E\u0302\",\n \"\u1EBE\": \"E\u0302\u0301\",\n \"\u1EC0\": \"E\u0302\u0300\",\n \"\u1EC4\": \"E\u0302\u0303\",\n \"\u0116\": \"E\u0307\",\n \"\u0228\": \"E\u0327\",\n \"\u1E1E\": \"F\u0307\",\n \"\u01F4\": \"G\u0301\",\n \"\u1E20\": \"G\u0304\",\n \"\u011E\": \"G\u0306\",\n \"\u01E6\": \"G\u030C\",\n \"\u011C\": \"G\u0302\",\n \"\u0120\": \"G\u0307\",\n \"\u0122\": \"G\u0327\",\n \"\u1E26\": \"H\u0308\",\n \"\u021E\": \"H\u030C\",\n \"\u0124\": \"H\u0302\",\n \"\u1E22\": \"H\u0307\",\n \"\u1E28\": \"H\u0327\",\n \"\u00CD\": \"I\u0301\",\n \"\u00CC\": \"I\u0300\",\n \"\u00CF\": \"I\u0308\",\n \"\u1E2E\": \"I\u0308\u0301\",\n \"\u0128\": \"I\u0303\",\n \"\u012A\": \"I\u0304\",\n \"\u012C\": \"I\u0306\",\n \"\u01CF\": \"I\u030C\",\n \"\u00CE\": \"I\u0302\",\n \"\u0130\": \"I\u0307\",\n \"\u0134\": \"J\u0302\",\n \"\u1E30\": \"K\u0301\",\n \"\u01E8\": \"K\u030C\",\n \"\u0136\": \"K\u0327\",\n \"\u0139\": \"L\u0301\",\n \"\u013D\": \"L\u030C\",\n \"\u013B\": \"L\u0327\",\n \"\u1E3E\": \"M\u0301\",\n \"\u1E40\": \"M\u0307\",\n \"\u0143\": \"N\u0301\",\n \"\u01F8\": \"N\u0300\",\n \"\u00D1\": \"N\u0303\",\n \"\u0147\": \"N\u030C\",\n \"\u1E44\": \"N\u0307\",\n \"\u0145\": \"N\u0327\",\n \"\u00D3\": \"O\u0301\",\n \"\u00D2\": \"O\u0300\",\n \"\u00D6\": \"O\u0308\",\n \"\u022A\": \"O\u0308\u0304\",\n \"\u00D5\": \"O\u0303\",\n \"\u1E4C\": \"O\u0303\u0301\",\n \"\u1E4E\": \"O\u0303\u0308\",\n \"\u022C\": \"O\u0303\u0304\",\n \"\u014C\": \"O\u0304\",\n \"\u1E52\": \"O\u0304\u0301\",\n \"\u1E50\": \"O\u0304\u0300\",\n \"\u014E\": \"O\u0306\",\n \"\u01D1\": \"O\u030C\",\n \"\u00D4\": \"O\u0302\",\n \"\u1ED0\": \"O\u0302\u0301\",\n \"\u1ED2\": \"O\u0302\u0300\",\n \"\u1ED6\": \"O\u0302\u0303\",\n \"\u022E\": \"O\u0307\",\n \"\u0230\": \"O\u0307\u0304\",\n \"\u0150\": \"O\u030B\",\n \"\u1E54\": \"P\u0301\",\n \"\u1E56\": \"P\u0307\",\n \"\u0154\": \"R\u0301\",\n \"\u0158\": \"R\u030C\",\n \"\u1E58\": \"R\u0307\",\n \"\u0156\": \"R\u0327\",\n \"\u015A\": \"S\u0301\",\n \"\u1E64\": \"S\u0301\u0307\",\n \"\u0160\": \"S\u030C\",\n \"\u1E66\": \"S\u030C\u0307\",\n \"\u015C\": \"S\u0302\",\n \"\u1E60\": \"S\u0307\",\n \"\u015E\": \"S\u0327\",\n \"\u0164\": \"T\u030C\",\n \"\u1E6A\": \"T\u0307\",\n \"\u0162\": \"T\u0327\",\n \"\u00DA\": \"U\u0301\",\n \"\u00D9\": \"U\u0300\",\n \"\u00DC\": \"U\u0308\",\n \"\u01D7\": \"U\u0308\u0301\",\n \"\u01DB\": \"U\u0308\u0300\",\n \"\u01D5\": \"U\u0308\u0304\",\n \"\u01D9\": \"U\u0308\u030C\",\n \"\u0168\": \"U\u0303\",\n \"\u1E78\": \"U\u0303\u0301\",\n \"\u016A\": \"U\u0304\",\n \"\u1E7A\": \"U\u0304\u0308\",\n \"\u016C\": \"U\u0306\",\n \"\u01D3\": \"U\u030C\",\n \"\u00DB\": \"U\u0302\",\n \"\u016E\": \"U\u030A\",\n \"\u0170\": \"U\u030B\",\n \"\u1E7C\": \"V\u0303\",\n \"\u1E82\": \"W\u0301\",\n \"\u1E80\": \"W\u0300\",\n \"\u1E84\": \"W\u0308\",\n \"\u0174\": \"W\u0302\",\n \"\u1E86\": \"W\u0307\",\n \"\u1E8C\": \"X\u0308\",\n \"\u1E8A\": \"X\u0307\",\n \"\u00DD\": \"Y\u0301\",\n \"\u1EF2\": \"Y\u0300\",\n \"\u0178\": \"Y\u0308\",\n \"\u1EF8\": \"Y\u0303\",\n \"\u0232\": \"Y\u0304\",\n \"\u0176\": \"Y\u0302\",\n \"\u1E8E\": \"Y\u0307\",\n \"\u0179\": \"Z\u0301\",\n \"\u017D\": \"Z\u030C\",\n \"\u1E90\": \"Z\u0302\",\n \"\u017B\": \"Z\u0307\",\n \"\u03AC\": \"\u03B1\u0301\",\n \"\u1F70\": \"\u03B1\u0300\",\n \"\u1FB1\": \"\u03B1\u0304\",\n \"\u1FB0\": \"\u03B1\u0306\",\n \"\u03AD\": \"\u03B5\u0301\",\n \"\u1F72\": \"\u03B5\u0300\",\n \"\u03AE\": \"\u03B7\u0301\",\n \"\u1F74\": \"\u03B7\u0300\",\n \"\u03AF\": \"\u03B9\u0301\",\n \"\u1F76\": \"\u03B9\u0300\",\n \"\u03CA\": \"\u03B9\u0308\",\n \"\u0390\": \"\u03B9\u0308\u0301\",\n \"\u1FD2\": \"\u03B9\u0308\u0300\",\n \"\u1FD1\": \"\u03B9\u0304\",\n \"\u1FD0\": \"\u03B9\u0306\",\n \"\u03CC\": \"\u03BF\u0301\",\n \"\u1F78\": \"\u03BF\u0300\",\n \"\u03CD\": \"\u03C5\u0301\",\n \"\u1F7A\": \"\u03C5\u0300\",\n \"\u03CB\": \"\u03C5\u0308\",\n \"\u03B0\": \"\u03C5\u0308\u0301\",\n \"\u1FE2\": \"\u03C5\u0308\u0300\",\n \"\u1FE1\": \"\u03C5\u0304\",\n \"\u1FE0\": \"\u03C5\u0306\",\n \"\u03CE\": \"\u03C9\u0301\",\n \"\u1F7C\": \"\u03C9\u0300\",\n \"\u038E\": \"\u03A5\u0301\",\n \"\u1FEA\": \"\u03A5\u0300\",\n \"\u03AB\": \"\u03A5\u0308\",\n \"\u1FE9\": \"\u03A5\u0304\",\n \"\u1FE8\": \"\u03A5\u0306\",\n \"\u038F\": \"\u03A9\u0301\",\n \"\u1FFA\": \"\u03A9\u0300\"\n};\n\n/**\n * This file contains the parser used to parse out a TeX expression from the\n * input. Since TeX isn't context-free, standard parsers don't work particularly\n * well.\n *\n * The strategy of this parser is as such:\n *\n * The main functions (the `.parse...` ones) take a position in the current\n * parse string to parse tokens from. The lexer (found in Lexer.js, stored at\n * this.gullet.lexer) also supports pulling out tokens at arbitrary places. When\n * individual tokens are needed at a position, the lexer is called to pull out a\n * token, which is then used.\n *\n * The parser has a property called \"mode\" indicating the mode that\n * the parser is currently in. Currently it has to be one of \"math\" or\n * \"text\", which denotes whether the current environment is a math-y\n * one or a text-y one (e.g. inside \\text). Currently, this serves to\n * limit the functions which can be used in text mode.\n *\n * The main functions then return an object which contains the useful data that\n * was parsed at its given point, and a new position at the end of the parsed\n * data. The main functions can call each other and continue the parsing by\n * using the returned position as a new starting point.\n *\n * There are also extra `.handle...` functions, which pull out some reused\n * functionality into self-contained functions.\n *\n * The functions return ParseNodes.\n */\nclass Parser {\n constructor(input, settings) {\n this.mode = void 0;\n this.gullet = void 0;\n this.settings = void 0;\n this.leftrightDepth = void 0;\n this.nextToken = void 0;\n // Start in math mode\n this.mode = \"math\"; // Create a new macro expander (gullet) and (indirectly via that) also a\n // new lexer (mouth) for this parser (stomach, in the language of TeX)\n\n this.gullet = new MacroExpander(input, settings, this.mode); // Store the settings for use in parsing\n\n this.settings = settings; // Count leftright depth (for \\middle errors)\n\n this.leftrightDepth = 0;\n }\n /**\n * Checks a result to make sure it has the right type, and throws an\n * appropriate error otherwise.\n */\n\n\n expect(text, consume) {\n if (consume === void 0) {\n consume = true;\n }\n\n if (this.fetch().text !== text) {\n throw new ParseError(\"Expected '\" + text + \"', got '\" + this.fetch().text + \"'\", this.fetch());\n }\n\n if (consume) {\n this.consume();\n }\n }\n /**\n * Discards the current lookahead token, considering it consumed.\n */\n\n\n consume() {\n this.nextToken = null;\n }\n /**\n * Return the current lookahead token, or if there isn't one (at the\n * beginning, or if the previous lookahead token was consume()d),\n * fetch the next token as the new lookahead token and return it.\n */\n\n\n fetch() {\n if (this.nextToken == null) {\n this.nextToken = this.gullet.expandNextToken();\n }\n\n return this.nextToken;\n }\n /**\n * Switches between \"text\" and \"math\" modes.\n */\n\n\n switchMode(newMode) {\n this.mode = newMode;\n this.gullet.switchMode(newMode);\n }\n /**\n * Main parsing function, which parses an entire input.\n */\n\n\n parse() {\n if (!this.settings.globalGroup) {\n // Create a group namespace for the math expression.\n // (LaTeX creates a new group for every $...$, $$...$$, \\[...\\].)\n this.gullet.beginGroup();\n } // Use old \\color behavior (same as LaTeX's \\textcolor) if requested.\n // We do this within the group for the math expression, so it doesn't\n // pollute settings.macros.\n\n\n if (this.settings.colorIsTextColor) {\n this.gullet.macros.set(\"\\\\color\", \"\\\\textcolor\");\n }\n\n try {\n // Try to parse the input\n var parse = this.parseExpression(false); // If we succeeded, make sure there's an EOF at the end\n\n this.expect(\"EOF\"); // End the group namespace for the expression\n\n if (!this.settings.globalGroup) {\n this.gullet.endGroup();\n }\n\n return parse; // Close any leftover groups in case of a parse error.\n } finally {\n this.gullet.endGroups();\n }\n }\n /**\n * Fully parse a separate sequence of tokens as a separate job.\n * Tokens should be specified in reverse order, as in a MacroDefinition.\n */\n\n\n subparse(tokens) {\n // Save the next token from the current job.\n var oldToken = this.nextToken;\n this.consume(); // Run the new job, terminating it with an excess '}'\n\n this.gullet.pushToken(new Token(\"}\"));\n this.gullet.pushTokens(tokens);\n var parse = this.parseExpression(false);\n this.expect(\"}\"); // Restore the next token from the current job.\n\n this.nextToken = oldToken;\n return parse;\n }\n\n /**\n * Parses an \"expression\", which is a list of atoms.\n *\n * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This\n * happens when functions have higher precedence han infix\n * nodes in implicit parses.\n *\n * `breakOnTokenText`: The text of the token that the expression should end\n * with, or `null` if something else should end the\n * expression.\n */\n parseExpression(breakOnInfix, breakOnTokenText) {\n var body = []; // Keep adding atoms to the body until we can't parse any more atoms (either\n // we reached the end, a }, or a \\right)\n\n while (true) {\n // Ignore spaces in math mode\n if (this.mode === \"math\") {\n this.consumeSpaces();\n }\n\n var lex = this.fetch();\n\n if (Parser.endOfExpression.indexOf(lex.text) !== -1) {\n break;\n }\n\n if (breakOnTokenText && lex.text === breakOnTokenText) {\n break;\n }\n\n if (breakOnInfix && functions[lex.text] && functions[lex.text].infix) {\n break;\n }\n\n var atom = this.parseAtom(breakOnTokenText);\n\n if (!atom) {\n break;\n } else if (atom.type === \"internal\") {\n // Internal nodes do not appear in parse tree\n continue;\n }\n\n body.push(atom);\n }\n\n if (this.mode === \"text\") {\n this.formLigatures(body);\n }\n\n return this.handleInfixNodes(body);\n }\n /**\n * Rewrites infix operators such as \\over with corresponding commands such\n * as \\frac.\n *\n * There can only be one infix operator per group. If there's more than one\n * then the expression is ambiguous. This can be resolved by adding {}.\n */\n\n\n handleInfixNodes(body) {\n var overIndex = -1;\n var funcName;\n\n for (var i = 0; i < body.length; i++) {\n if (body[i].type === \"infix\") {\n if (overIndex !== -1) {\n throw new ParseError(\"only one infix operator per group\", body[i].token);\n }\n\n overIndex = i;\n funcName = body[i].replaceWith;\n }\n }\n\n if (overIndex !== -1 && funcName) {\n var numerNode;\n var denomNode;\n var numerBody = body.slice(0, overIndex);\n var denomBody = body.slice(overIndex + 1);\n\n if (numerBody.length === 1 && numerBody[0].type === \"ordgroup\") {\n numerNode = numerBody[0];\n } else {\n numerNode = {\n type: \"ordgroup\",\n mode: this.mode,\n body: numerBody\n };\n }\n\n if (denomBody.length === 1 && denomBody[0].type === \"ordgroup\") {\n denomNode = denomBody[0];\n } else {\n denomNode = {\n type: \"ordgroup\",\n mode: this.mode,\n body: denomBody\n };\n }\n\n var node;\n\n if (funcName === \"\\\\\\\\abovefrac\") {\n node = this.callFunction(funcName, [numerNode, body[overIndex], denomNode], []);\n } else {\n node = this.callFunction(funcName, [numerNode, denomNode], []);\n }\n\n return [node];\n } else {\n return body;\n }\n }\n /**\n * Handle a subscript or superscript with nice errors.\n */\n\n\n handleSupSubscript(name // For error reporting.\n ) {\n var symbolToken = this.fetch();\n var symbol = symbolToken.text;\n this.consume();\n this.consumeSpaces(); // ignore spaces before sup/subscript argument\n // Skip over allowed internal nodes such as \\relax\n\n var group;\n\n do {\n var _group;\n\n group = this.parseGroup(name);\n } while (((_group = group) == null ? void 0 : _group.type) === \"internal\");\n\n if (!group) {\n throw new ParseError(\"Expected group after '\" + symbol + \"'\", symbolToken);\n }\n\n return group;\n }\n /**\n * Converts the textual input of an unsupported command into a text node\n * contained within a color node whose color is determined by errorColor\n */\n\n\n formatUnsupportedCmd(text) {\n var textordArray = [];\n\n for (var i = 0; i < text.length; i++) {\n textordArray.push({\n type: \"textord\",\n mode: \"text\",\n text: text[i]\n });\n }\n\n var textNode = {\n type: \"text\",\n mode: this.mode,\n body: textordArray\n };\n var colorNode = {\n type: \"color\",\n mode: this.mode,\n color: this.settings.errorColor,\n body: [textNode]\n };\n return colorNode;\n }\n /**\n * Parses a group with optional super/subscripts.\n */\n\n\n parseAtom(breakOnTokenText) {\n // The body of an atom is an implicit group, so that things like\n // \\left(x\\right)^2 work correctly.\n var base = this.parseGroup(\"atom\", breakOnTokenText); // Internal nodes (e.g. \\relax) cannot support super/subscripts.\n // Instead we will pick up super/subscripts with blank base next round.\n\n if ((base == null ? void 0 : base.type) === \"internal\") {\n return base;\n } // In text mode, we don't have superscripts or subscripts\n\n\n if (this.mode === \"text\") {\n return base;\n } // Note that base may be empty (i.e. null) at this point.\n\n\n var superscript;\n var subscript;\n\n while (true) {\n // Guaranteed in math mode, so eat any spaces first.\n this.consumeSpaces(); // Lex the first token\n\n var lex = this.fetch();\n\n if (lex.text === \"\\\\limits\" || lex.text === \"\\\\nolimits\") {\n // We got a limit control\n if (base && base.type === \"op\") {\n var limits = lex.text === \"\\\\limits\";\n base.limits = limits;\n base.alwaysHandleSupSub = true;\n } else if (base && base.type === \"operatorname\") {\n if (base.alwaysHandleSupSub) {\n base.limits = lex.text === \"\\\\limits\";\n }\n } else {\n throw new ParseError(\"Limit controls must follow a math operator\", lex);\n }\n\n this.consume();\n } else if (lex.text === \"^\") {\n // We got a superscript start\n if (superscript) {\n throw new ParseError(\"Double superscript\", lex);\n }\n\n superscript = this.handleSupSubscript(\"superscript\");\n } else if (lex.text === \"_\") {\n // We got a subscript start\n if (subscript) {\n throw new ParseError(\"Double subscript\", lex);\n }\n\n subscript = this.handleSupSubscript(\"subscript\");\n } else if (lex.text === \"'\") {\n // We got a prime\n if (superscript) {\n throw new ParseError(\"Double superscript\", lex);\n }\n\n var prime = {\n type: \"textord\",\n mode: this.mode,\n text: \"\\\\prime\"\n }; // Many primes can be grouped together, so we handle this here\n\n var primes = [prime];\n this.consume(); // Keep lexing tokens until we get something that's not a prime\n\n while (this.fetch().text === \"'\") {\n // For each one, add another prime to the list\n primes.push(prime);\n this.consume();\n } // If there's a superscript following the primes, combine that\n // superscript in with the primes.\n\n\n if (this.fetch().text === \"^\") {\n primes.push(this.handleSupSubscript(\"superscript\"));\n } // Put everything into an ordgroup as the superscript\n\n\n superscript = {\n type: \"ordgroup\",\n mode: this.mode,\n body: primes\n };\n } else if (uSubsAndSups[lex.text]) {\n // A Unicode subscript or superscript character.\n // We treat these similarly to the unicode-math package.\n // So we render a string of Unicode (sub|super)scripts the\n // same as a (sub|super)script of regular characters.\n var isSub = unicodeSubRegEx.test(lex.text);\n var subsupTokens = [];\n subsupTokens.push(new Token(uSubsAndSups[lex.text]));\n this.consume(); // Continue fetching tokens to fill out the string.\n\n while (true) {\n var token = this.fetch().text;\n\n if (!uSubsAndSups[token]) {\n break;\n }\n\n if (unicodeSubRegEx.test(token) !== isSub) {\n break;\n }\n\n subsupTokens.unshift(new Token(uSubsAndSups[token]));\n this.consume();\n } // Now create a (sub|super)script.\n\n\n var body = this.subparse(subsupTokens);\n\n if (isSub) {\n subscript = {\n type: \"ordgroup\",\n mode: \"math\",\n body\n };\n } else {\n superscript = {\n type: \"ordgroup\",\n mode: \"math\",\n body\n };\n }\n } else {\n // If it wasn't ^, _, or ', stop parsing super/subscripts\n break;\n }\n } // Base must be set if superscript or subscript are set per logic above,\n // but need to check here for type check to pass.\n\n\n if (superscript || subscript) {\n // If we got either a superscript or subscript, create a supsub\n return {\n type: \"supsub\",\n mode: this.mode,\n base: base,\n sup: superscript,\n sub: subscript\n };\n } else {\n // Otherwise return the original body\n return base;\n }\n }\n /**\n * Parses an entire function, including its base and all of its arguments.\n */\n\n\n parseFunction(breakOnTokenText, name // For determining its context\n ) {\n var token = this.fetch();\n var func = token.text;\n var funcData = functions[func];\n\n if (!funcData) {\n return null;\n }\n\n this.consume(); // consume command token\n\n if (name && name !== \"atom\" && !funcData.allowedInArgument) {\n throw new ParseError(\"Got function '\" + func + \"' with no arguments\" + (name ? \" as \" + name : \"\"), token);\n } else if (this.mode === \"text\" && !funcData.allowedInText) {\n throw new ParseError(\"Can't use function '\" + func + \"' in text mode\", token);\n } else if (this.mode === \"math\" && funcData.allowedInMath === false) {\n throw new ParseError(\"Can't use function '\" + func + \"' in math mode\", token);\n }\n\n var {\n args,\n optArgs\n } = this.parseArguments(func, funcData);\n return this.callFunction(func, args, optArgs, token, breakOnTokenText);\n }\n /**\n * Call a function handler with a suitable context and arguments.\n */\n\n\n callFunction(name, args, optArgs, token, breakOnTokenText) {\n var context = {\n funcName: name,\n parser: this,\n token,\n breakOnTokenText\n };\n var func = functions[name];\n\n if (func && func.handler) {\n return func.handler(context, args, optArgs);\n } else {\n throw new ParseError(\"No function handler for \" + name);\n }\n }\n /**\n * Parses the arguments of a function or environment\n */\n\n\n parseArguments(func, // Should look like \"\\name\" or \"\\begin{name}\".\n funcData) {\n var totalArgs = funcData.numArgs + funcData.numOptionalArgs;\n\n if (totalArgs === 0) {\n return {\n args: [],\n optArgs: []\n };\n }\n\n var args = [];\n var optArgs = [];\n\n for (var i = 0; i < totalArgs; i++) {\n var argType = funcData.argTypes && funcData.argTypes[i];\n var isOptional = i < funcData.numOptionalArgs;\n\n if (funcData.primitive && argType == null || // \\sqrt expands into primitive if optional argument doesn't exist\n funcData.type === \"sqrt\" && i === 1 && optArgs[0] == null) {\n argType = \"primitive\";\n }\n\n var arg = this.parseGroupOfType(\"argument to '\" + func + \"'\", argType, isOptional);\n\n if (isOptional) {\n optArgs.push(arg);\n } else if (arg != null) {\n args.push(arg);\n } else {\n // should be unreachable\n throw new ParseError(\"Null argument, please report this as a bug\");\n }\n }\n\n return {\n args,\n optArgs\n };\n }\n /**\n * Parses a group when the mode is changing.\n */\n\n\n parseGroupOfType(name, type, optional) {\n switch (type) {\n case \"color\":\n return this.parseColorGroup(optional);\n\n case \"size\":\n return this.parseSizeGroup(optional);\n\n case \"url\":\n return this.parseUrlGroup(optional);\n\n case \"math\":\n case \"text\":\n return this.parseArgumentGroup(optional, type);\n\n case \"hbox\":\n {\n // hbox argument type wraps the argument in the equivalent of\n // \\hbox, which is like \\text but switching to \\textstyle size.\n var group = this.parseArgumentGroup(optional, \"text\");\n return group != null ? {\n type: \"styling\",\n mode: group.mode,\n body: [group],\n style: \"text\" // simulate \\textstyle\n\n } : null;\n }\n\n case \"raw\":\n {\n var token = this.parseStringGroup(\"raw\", optional);\n return token != null ? {\n type: \"raw\",\n mode: \"text\",\n string: token.text\n } : null;\n }\n\n case \"primitive\":\n {\n if (optional) {\n throw new ParseError(\"A primitive argument cannot be optional\");\n }\n\n var _group2 = this.parseGroup(name);\n\n if (_group2 == null) {\n throw new ParseError(\"Expected group as \" + name, this.fetch());\n }\n\n return _group2;\n }\n\n case \"original\":\n case null:\n case undefined:\n return this.parseArgumentGroup(optional);\n\n default:\n throw new ParseError(\"Unknown group type as \" + name, this.fetch());\n }\n }\n /**\n * Discard any space tokens, fetching the next non-space token.\n */\n\n\n consumeSpaces() {\n while (this.fetch().text === \" \") {\n this.consume();\n }\n }\n /**\n * Parses a group, essentially returning the string formed by the\n * brace-enclosed tokens plus some position information.\n */\n\n\n parseStringGroup(modeName, // Used to describe the mode in error messages.\n optional) {\n var argToken = this.gullet.scanArgument(optional);\n\n if (argToken == null) {\n return null;\n }\n\n var str = \"\";\n var nextToken;\n\n while ((nextToken = this.fetch()).text !== \"EOF\") {\n str += nextToken.text;\n this.consume();\n }\n\n this.consume(); // consume the end of the argument\n\n argToken.text = str;\n return argToken;\n }\n /**\n * Parses a regex-delimited group: the largest sequence of tokens\n * whose concatenated strings match `regex`. Returns the string\n * formed by the tokens plus some position information.\n */\n\n\n parseRegexGroup(regex, modeName // Used to describe the mode in error messages.\n ) {\n var firstToken = this.fetch();\n var lastToken = firstToken;\n var str = \"\";\n var nextToken;\n\n while ((nextToken = this.fetch()).text !== \"EOF\" && regex.test(str + nextToken.text)) {\n lastToken = nextToken;\n str += lastToken.text;\n this.consume();\n }\n\n if (str === \"\") {\n throw new ParseError(\"Invalid \" + modeName + \": '\" + firstToken.text + \"'\", firstToken);\n }\n\n return firstToken.range(lastToken, str);\n }\n /**\n * Parses a color description.\n */\n\n\n parseColorGroup(optional) {\n var res = this.parseStringGroup(\"color\", optional);\n\n if (res == null) {\n return null;\n }\n\n var match = /^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(res.text);\n\n if (!match) {\n throw new ParseError(\"Invalid color: '\" + res.text + \"'\", res);\n }\n\n var color = match[0];\n\n if (/^[0-9a-f]{6}$/i.test(color)) {\n // We allow a 6-digit HTML color spec without a leading \"#\".\n // This follows the xcolor package's HTML color model.\n // Predefined color names are all missed by this RegEx pattern.\n color = \"#\" + color;\n }\n\n return {\n type: \"color-token\",\n mode: this.mode,\n color\n };\n }\n /**\n * Parses a size specification, consisting of magnitude and unit.\n */\n\n\n parseSizeGroup(optional) {\n var res;\n var isBlank = false; // don't expand before parseStringGroup\n\n this.gullet.consumeSpaces();\n\n if (!optional && this.gullet.future().text !== \"{\") {\n res = this.parseRegexGroup(/^[-+]? *(?:$|\\d+|\\d+\\.\\d*|\\.\\d*) *[a-z]{0,2} *$/, \"size\");\n } else {\n res = this.parseStringGroup(\"size\", optional);\n }\n\n if (!res) {\n return null;\n }\n\n if (!optional && res.text.length === 0) {\n // Because we've tested for what is !optional, this block won't\n // affect \\kern, \\hspace, etc. It will capture the mandatory arguments\n // to \\genfrac and \\above.\n res.text = \"0pt\"; // Enable \\above{}\n\n isBlank = true; // This is here specifically for \\genfrac\n }\n\n var match = /([-+]?) *(\\d+(?:\\.\\d*)?|\\.\\d+) *([a-z]{2})/.exec(res.text);\n\n if (!match) {\n throw new ParseError(\"Invalid size: '\" + res.text + \"'\", res);\n }\n\n var data = {\n number: +(match[1] + match[2]),\n // sign + magnitude, cast to number\n unit: match[3]\n };\n\n if (!validUnit(data)) {\n throw new ParseError(\"Invalid unit: '\" + data.unit + \"'\", res);\n }\n\n return {\n type: \"size\",\n mode: this.mode,\n value: data,\n isBlank\n };\n }\n /**\n * Parses an URL, checking escaped letters and allowed protocols,\n * and setting the catcode of % as an active character (as in \\hyperref).\n */\n\n\n parseUrlGroup(optional) {\n this.gullet.lexer.setCatcode(\"%\", 13); // active character\n\n this.gullet.lexer.setCatcode(\"~\", 12); // other character\n\n var res = this.parseStringGroup(\"url\", optional);\n this.gullet.lexer.setCatcode(\"%\", 14); // comment character\n\n this.gullet.lexer.setCatcode(\"~\", 13); // active character\n\n if (res == null) {\n return null;\n } // hyperref package allows backslashes alone in href, but doesn't\n // generate valid links in such cases; we interpret this as\n // \"undefined\" behaviour, and keep them as-is. Some browser will\n // replace backslashes with forward slashes.\n\n\n var url = res.text.replace(/\\\\([#$%&~_^{}])/g, '$1');\n return {\n type: \"url\",\n mode: this.mode,\n url\n };\n }\n /**\n * Parses an argument with the mode specified.\n */\n\n\n parseArgumentGroup(optional, mode) {\n var argToken = this.gullet.scanArgument(optional);\n\n if (argToken == null) {\n return null;\n }\n\n var outerMode = this.mode;\n\n if (mode) {\n // Switch to specified mode\n this.switchMode(mode);\n }\n\n this.gullet.beginGroup();\n var expression = this.parseExpression(false, \"EOF\"); // TODO: find an alternative way to denote the end\n\n this.expect(\"EOF\"); // expect the end of the argument\n\n this.gullet.endGroup();\n var result = {\n type: \"ordgroup\",\n mode: this.mode,\n loc: argToken.loc,\n body: expression\n };\n\n if (mode) {\n // Switch mode back\n this.switchMode(outerMode);\n }\n\n return result;\n }\n /**\n * Parses an ordinary group, which is either a single nucleus (like \"x\")\n * or an expression in braces (like \"{x+y}\") or an implicit group, a group\n * that starts at the current position, and ends right before a higher explicit\n * group ends, or at EOF.\n */\n\n\n parseGroup(name, // For error reporting.\n breakOnTokenText) {\n var firstToken = this.fetch();\n var text = firstToken.text;\n var result; // Try to parse an open brace or \\begingroup\n\n if (text === \"{\" || text === \"\\\\begingroup\") {\n this.consume();\n var groupEnd = text === \"{\" ? \"}\" : \"\\\\endgroup\";\n this.gullet.beginGroup(); // If we get a brace, parse an expression\n\n var expression = this.parseExpression(false, groupEnd);\n var lastToken = this.fetch();\n this.expect(groupEnd); // Check that we got a matching closing brace\n\n this.gullet.endGroup();\n result = {\n type: \"ordgroup\",\n mode: this.mode,\n loc: SourceLocation.range(firstToken, lastToken),\n body: expression,\n // A group formed by \\begingroup...\\endgroup is a semi-simple group\n // which doesn't affect spacing in math mode, i.e., is transparent.\n // https://tex.stackexchange.com/questions/1930/when-should-one-\n // use-begingroup-instead-of-bgroup\n semisimple: text === \"\\\\begingroup\" || undefined\n };\n } else {\n // If there exists a function with this name, parse the function.\n // Otherwise, just return a nucleus\n result = this.parseFunction(breakOnTokenText, name) || this.parseSymbol();\n\n if (result == null && text[0] === \"\\\\\" && !implicitCommands.hasOwnProperty(text)) {\n if (this.settings.throwOnError) {\n throw new ParseError(\"Undefined control sequence: \" + text, firstToken);\n }\n\n result = this.formatUnsupportedCmd(text);\n this.consume();\n }\n }\n\n return result;\n }\n /**\n * Form ligature-like combinations of characters for text mode.\n * This includes inputs like \"--\", \"---\", \"``\" and \"''\".\n * The result will simply replace multiple textord nodes with a single\n * character in each value by a single textord node having multiple\n * characters in its value. The representation is still ASCII source.\n * The group will be modified in place.\n */\n\n\n formLigatures(group) {\n var n = group.length - 1;\n\n for (var i = 0; i < n; ++i) {\n var a = group[i]; // $FlowFixMe: Not every node type has a `text` property.\n\n var v = a.text;\n\n if (v === \"-\" && group[i + 1].text === \"-\") {\n if (i + 1 < n && group[i + 2].text === \"-\") {\n group.splice(i, 3, {\n type: \"textord\",\n mode: \"text\",\n loc: SourceLocation.range(a, group[i + 2]),\n text: \"---\"\n });\n n -= 2;\n } else {\n group.splice(i, 2, {\n type: \"textord\",\n mode: \"text\",\n loc: SourceLocation.range(a, group[i + 1]),\n text: \"--\"\n });\n n -= 1;\n }\n }\n\n if ((v === \"'\" || v === \"`\") && group[i + 1].text === v) {\n group.splice(i, 2, {\n type: \"textord\",\n mode: \"text\",\n loc: SourceLocation.range(a, group[i + 1]),\n text: v + v\n });\n n -= 1;\n }\n }\n }\n /**\n * Parse a single symbol out of the string. Here, we handle single character\n * symbols and special functions like \\verb.\n */\n\n\n parseSymbol() {\n var nucleus = this.fetch();\n var text = nucleus.text;\n\n if (/^\\\\verb[^a-zA-Z]/.test(text)) {\n this.consume();\n var arg = text.slice(5);\n var star = arg.charAt(0) === \"*\";\n\n if (star) {\n arg = arg.slice(1);\n } // Lexer's tokenRegex is constructed to always have matching\n // first/last characters.\n\n\n if (arg.length < 2 || arg.charAt(0) !== arg.slice(-1)) {\n throw new ParseError(\"\\\\verb assertion failed --\\n please report what input caused this bug\");\n }\n\n arg = arg.slice(1, -1); // remove first and last char\n\n return {\n type: \"verb\",\n mode: \"text\",\n body: arg,\n star\n };\n } // At this point, we should have a symbol, possibly with accents.\n // First expand any accented base symbol according to unicodeSymbols.\n\n\n if (unicodeSymbols.hasOwnProperty(text[0]) && !symbols[this.mode][text[0]]) {\n // This behavior is not strict (XeTeX-compatible) in math mode.\n if (this.settings.strict && this.mode === \"math\") {\n this.settings.reportNonstrict(\"unicodeTextInMathMode\", \"Accented Unicode text character \\\"\" + text[0] + \"\\\" used in \" + \"math mode\", nucleus);\n }\n\n text = unicodeSymbols[text[0]] + text.slice(1);\n } // Strip off any combining characters\n\n\n var match = combiningDiacriticalMarksEndRegex.exec(text);\n\n if (match) {\n text = text.substring(0, match.index);\n\n if (text === 'i') {\n text = '\\u0131'; // dotless i, in math and text mode\n } else if (text === 'j') {\n text = '\\u0237'; // dotless j, in math and text mode\n }\n } // Recognize base symbol\n\n\n var symbol;\n\n if (symbols[this.mode][text]) {\n if (this.settings.strict && this.mode === 'math' && extraLatin.indexOf(text) >= 0) {\n this.settings.reportNonstrict(\"unicodeTextInMathMode\", \"Latin-1/Unicode text character \\\"\" + text[0] + \"\\\" used in \" + \"math mode\", nucleus);\n }\n\n var group = symbols[this.mode][text].group;\n var loc = SourceLocation.range(nucleus);\n var s;\n\n if (ATOMS.hasOwnProperty(group)) {\n // $FlowFixMe\n var family = group;\n s = {\n type: \"atom\",\n mode: this.mode,\n family,\n loc,\n text\n };\n } else {\n // $FlowFixMe\n s = {\n type: group,\n mode: this.mode,\n loc,\n text\n };\n } // $FlowFixMe\n\n\n symbol = s;\n } else if (text.charCodeAt(0) >= 0x80) {\n // no symbol for e.g. ^\n if (this.settings.strict) {\n if (!supportedCodepoint(text.charCodeAt(0))) {\n this.settings.reportNonstrict(\"unknownSymbol\", \"Unrecognized Unicode character \\\"\" + text[0] + \"\\\"\" + (\" (\" + text.charCodeAt(0) + \")\"), nucleus);\n } else if (this.mode === \"math\") {\n this.settings.reportNonstrict(\"unicodeTextInMathMode\", \"Unicode text character \\\"\" + text[0] + \"\\\" used in math mode\", nucleus);\n }\n } // All nonmathematical Unicode characters are rendered as if they\n // are in text mode (wrapped in \\text) because that's what it\n // takes to render them in LaTeX. Setting `mode: this.mode` is\n // another natural choice (the user requested math mode), but\n // this makes it more difficult for getCharacterMetrics() to\n // distinguish Unicode characters without metrics and those for\n // which we want to simulate the letter M.\n\n\n symbol = {\n type: \"textord\",\n mode: \"text\",\n loc: SourceLocation.range(nucleus),\n text\n };\n } else {\n return null; // EOF, ^, _, {, }, etc.\n }\n\n this.consume(); // Transform combining characters into accents\n\n if (match) {\n for (var i = 0; i < match[0].length; i++) {\n var accent = match[0][i];\n\n if (!unicodeAccents[accent]) {\n throw new ParseError(\"Unknown accent ' \" + accent + \"'\", nucleus);\n }\n\n var command = unicodeAccents[accent][this.mode] || unicodeAccents[accent].text;\n\n if (!command) {\n throw new ParseError(\"Accent \" + accent + \" unsupported in \" + this.mode + \" mode\", nucleus);\n }\n\n symbol = {\n type: \"accent\",\n mode: this.mode,\n loc: SourceLocation.range(nucleus),\n label: command,\n isStretchy: false,\n isShifty: true,\n // $FlowFixMe\n base: symbol\n };\n }\n } // $FlowFixMe\n\n\n return symbol;\n }\n\n}\nParser.endOfExpression = [\"}\", \"\\\\endgroup\", \"\\\\end\", \"\\\\right\", \"&\"];\n\n/**\n * Provides a single function for parsing an expression using a Parser\n * TODO(emily): Remove this\n */\n\n/**\n * Parses an expression using a Parser, then returns the parsed result.\n */\nvar parseTree = function parseTree(toParse, settings) {\n if (!(typeof toParse === 'string' || toParse instanceof String)) {\n throw new TypeError('KaTeX can only parse string typed expression');\n }\n\n var parser = new Parser(toParse, settings); // Blank out any \\df@tag to avoid spurious \"Duplicate \\tag\" errors\n\n delete parser.gullet.macros.current[\"\\\\df@tag\"];\n var tree = parser.parse(); // Prevent a color definition from persisting between calls to katex.render().\n\n delete parser.gullet.macros.current[\"\\\\current@color\"];\n delete parser.gullet.macros.current[\"\\\\color\"]; // If the input used \\tag, it will set the \\df@tag macro to the tag.\n // In this case, we separately parse the tag and wrap the tree.\n\n if (parser.gullet.macros.get(\"\\\\df@tag\")) {\n if (!settings.displayMode) {\n throw new ParseError(\"\\\\tag works only in display equations\");\n }\n\n tree = [{\n type: \"tag\",\n mode: \"text\",\n body: tree,\n tag: parser.subparse([new Token(\"\\\\df@tag\")])\n }];\n }\n\n return tree;\n};\n\n/* eslint no-console:0 */\n\n/**\n * Parse and build an expression, and place that expression in the DOM node\n * given.\n */\nvar render = function render(expression, baseNode, options) {\n baseNode.textContent = \"\";\n var node = renderToDomTree(expression, options).toNode();\n baseNode.appendChild(node);\n}; // KaTeX's styles don't work properly in quirks mode. Print out an error, and\n// disable rendering.\n\n\nif (typeof document !== \"undefined\") {\n if (document.compatMode !== \"CSS1Compat\") {\n typeof console !== \"undefined\" && console.warn(\"Warning: KaTeX doesn't work in quirks mode. Make sure your \" + \"website has a suitable doctype.\");\n\n render = function render() {\n throw new ParseError(\"KaTeX doesn't work in quirks mode.\");\n };\n }\n}\n/**\n * Parse and build an expression, and return the markup for that.\n */\n\n\nvar renderToString = function renderToString(expression, options) {\n var markup = renderToDomTree(expression, options).toMarkup();\n return markup;\n};\n/**\n * Parse an expression and return the parse tree.\n */\n\n\nvar generateParseTree = function generateParseTree(expression, options) {\n var settings = new Settings(options);\n return parseTree(expression, settings);\n};\n/**\n * If the given error is a KaTeX ParseError and options.throwOnError is false,\n * renders the invalid LaTeX as a span with hover title giving the KaTeX\n * error message. Otherwise, simply throws the error.\n */\n\n\nvar renderError = function renderError(error, expression, options) {\n if (options.throwOnError || !(error instanceof ParseError)) {\n throw error;\n }\n\n var node = buildCommon.makeSpan([\"katex-error\"], [new SymbolNode(expression)]);\n node.setAttribute(\"title\", error.toString());\n node.setAttribute(\"style\", \"color:\" + options.errorColor);\n return node;\n};\n/**\n * Generates and returns the katex build tree. This is used for advanced\n * use cases (like rendering to custom output).\n */\n\n\nvar renderToDomTree = function renderToDomTree(expression, options) {\n var settings = new Settings(options);\n\n try {\n var tree = parseTree(expression, settings);\n return buildTree(tree, expression, settings);\n } catch (error) {\n return renderError(error, expression, settings);\n }\n};\n/**\n * Generates and returns the katex build tree, with just HTML (no MathML).\n * This is used for advanced use cases (like rendering to custom output).\n */\n\n\nvar renderToHTMLTree = function renderToHTMLTree(expression, options) {\n var settings = new Settings(options);\n\n try {\n var tree = parseTree(expression, settings);\n return buildHTMLTree(tree, expression, settings);\n } catch (error) {\n return renderError(error, expression, settings);\n }\n};\n\nvar version = \"0.16.22\";\nvar __domTree = {\n Span,\n Anchor,\n SymbolNode,\n SvgNode,\n PathNode,\n LineNode\n}; // ESM exports\n\nvar katex = {\n /**\n * Current KaTeX version\n */\n version,\n\n /**\n * Renders the given LaTeX into an HTML+MathML combination, and adds\n * it as a child to the specified DOM node.\n */\n render,\n\n /**\n * Renders the given LaTeX into an HTML+MathML combination string,\n * for sending to the client.\n */\n renderToString,\n\n /**\n * KaTeX error, usually during parsing.\n */\n ParseError,\n\n /**\n * The schema of Settings\n */\n SETTINGS_SCHEMA,\n\n /**\n * Parses the given LaTeX into KaTeX's internal parse tree structure,\n * without rendering to HTML or MathML.\n *\n * NOTE: This method is not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */\n __parse: generateParseTree,\n\n /**\n * Renders the given LaTeX into an HTML+MathML internal DOM tree\n * representation, without flattening that representation to a string.\n *\n * NOTE: This method is not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */\n __renderToDomTree: renderToDomTree,\n\n /**\n * Renders the given LaTeX into an HTML internal DOM tree representation,\n * without MathML and without flattening that representation to a string.\n *\n * NOTE: This method is not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */\n __renderToHTMLTree: renderToHTMLTree,\n\n /**\n * extends internal font metrics object with a new object\n * each key in the new object represents a font name\n */\n __setFontMetrics: setFontMetrics,\n\n /**\n * adds a new symbol to builtin symbols table\n */\n __defineSymbol: defineSymbol,\n\n /**\n * adds a new function to builtin function list,\n * which directly produce parse tree elements\n * and have their own html/mathml builders\n */\n __defineFunction: defineFunction,\n\n /**\n * adds a new macro to builtin macro list\n */\n __defineMacro: defineMacro,\n\n /**\n * Expose the dom tree node types, which can be useful for type checking nodes.\n *\n * NOTE: These methods are not currently recommended for public use.\n * The internal tree representation is unstable and is very likely\n * to change. Use at your own risk.\n */\n __domTree\n};\n\nexport { ParseError, SETTINGS_SCHEMA, defineFunction as __defineFunction, defineMacro as __defineMacro, defineSymbol as __defineSymbol, __domTree, generateParseTree as __parse, renderToDomTree as __renderToDomTree, renderToHTMLTree as __renderToHTMLTree, setFontMetrics as __setFontMetrics, katex as default, render, renderToString, version };\n", "import DOMPurify from 'dompurify';\nimport type { MermaidConfig } from '../../config.type.js';\n\n// Remove and ignore br:s\nexport const lineBreakRegex = //gi;\n\n/**\n * Gets the rows of lines in a string\n *\n * @param s - The string to check the lines for\n * @returns The rows in that string\n */\nexport const getRows = (s?: string): string[] => {\n if (!s) {\n return [''];\n }\n const str = breakToPlaceholder(s).replace(/\\\\n/g, '#br#');\n return str.split('#br#');\n};\n\nconst setupDompurifyHooksIfNotSetup = (() => {\n let setup = false;\n\n return () => {\n if (!setup) {\n setupDompurifyHooks();\n setup = true;\n }\n };\n})();\n\nfunction setupDompurifyHooks() {\n const TEMPORARY_ATTRIBUTE = 'data-temp-href-target';\n\n DOMPurify.addHook('beforeSanitizeAttributes', (node) => {\n if (node.tagName === 'A' && node.hasAttribute('target')) {\n node.setAttribute(TEMPORARY_ATTRIBUTE, node.getAttribute('target') ?? '');\n }\n });\n\n DOMPurify.addHook('afterSanitizeAttributes', (node) => {\n if (node.tagName === 'A' && node.hasAttribute(TEMPORARY_ATTRIBUTE)) {\n node.setAttribute('target', node.getAttribute(TEMPORARY_ATTRIBUTE) ?? '');\n node.removeAttribute(TEMPORARY_ATTRIBUTE);\n if (node.getAttribute('target') === '_blank') {\n node.setAttribute('rel', 'noopener');\n }\n }\n });\n}\n\n/**\n * Removes script tags from a text\n *\n * @param txt - The text to sanitize\n * @returns The safer text\n */\nexport const removeScript = (txt: string): string => {\n setupDompurifyHooksIfNotSetup();\n\n const sanitizedText = DOMPurify.sanitize(txt);\n\n return sanitizedText;\n};\n\nconst sanitizeMore = (text: string, config: MermaidConfig) => {\n if (config.flowchart?.htmlLabels !== false) {\n const level = config.securityLevel;\n if (level === 'antiscript' || level === 'strict') {\n text = removeScript(text);\n } else if (level !== 'loose') {\n text = breakToPlaceholder(text);\n text = text.replace(//g, '>');\n text = text.replace(/=/g, '=');\n text = placeholderToBreak(text);\n }\n }\n return text;\n};\n\nexport const sanitizeText = (text: string, config: MermaidConfig): string => {\n if (!text) {\n return text;\n }\n if (config.dompurifyConfig) {\n text = DOMPurify.sanitize(sanitizeMore(text, config), config.dompurifyConfig).toString();\n } else {\n text = DOMPurify.sanitize(sanitizeMore(text, config), {\n FORBID_TAGS: ['style'],\n }).toString();\n }\n return text;\n};\n\nexport const sanitizeTextOrArray = (\n a: string | string[] | string[][],\n config: MermaidConfig\n): string | string[] => {\n if (typeof a === 'string') {\n return sanitizeText(a, config);\n }\n // TODO: Refactor to avoid flat.\n return a.flat().map((x: string) => sanitizeText(x, config));\n};\n\n/**\n * Whether or not a text has any line breaks\n *\n * @param text - The text to test\n * @returns Whether or not the text has breaks\n */\nexport const hasBreaks = (text: string): boolean => {\n return lineBreakRegex.test(text);\n};\n\n/**\n * Splits on
    tags\n *\n * @param text - Text to split\n * @returns List of lines as strings\n */\nexport const splitBreaks = (text: string): string[] => {\n return text.split(lineBreakRegex);\n};\n\n/**\n * Converts placeholders to line breaks in HTML\n *\n * @param s - HTML with placeholders\n * @returns HTML with breaks instead of placeholders\n */\nconst placeholderToBreak = (s: string): string => {\n return s.replace(/#br#/g, '
    ');\n};\n\n/**\n * Opposite of `placeholderToBreak`, converts breaks to placeholders\n *\n * @param s - HTML string\n * @returns String with placeholders\n */\nconst breakToPlaceholder = (s: string): string => {\n return s.replace(lineBreakRegex, '#br#');\n};\n\n/**\n * Gets the current URL\n *\n * @param useAbsolute - Whether to return the absolute URL or not\n * @returns The current URL\n */\nexport const getUrl = (useAbsolute: boolean): string => {\n let url = '';\n if (useAbsolute) {\n url =\n window.location.protocol +\n '//' +\n window.location.host +\n window.location.pathname +\n window.location.search;\n\n url = CSS.escape(url);\n }\n\n return url;\n};\n\n/**\n * Converts a string/boolean into a boolean\n *\n * @param val - String or boolean to convert\n * @returns The result from the input\n */\nexport const evaluate = (val?: string | boolean): boolean =>\n val === false || ['false', 'null', '0'].includes(String(val).trim().toLowerCase()) ? false : true;\n\n/**\n * Wrapper around Math.max which removes non-numeric values\n * Returns the larger of a set of supplied numeric expressions.\n * @param values - Numeric expressions to be evaluated\n * @returns The smaller value\n */\nexport const getMax = function (...values: number[]): number {\n const newValues: number[] = values.filter((value) => {\n return !isNaN(value);\n });\n return Math.max(...newValues);\n};\n\n/**\n * Wrapper around Math.min which removes non-numeric values\n * Returns the smaller of a set of supplied numeric expressions.\n * @param values - Numeric expressions to be evaluated\n * @returns The smaller value\n */\nexport const getMin = function (...values: number[]): number {\n const newValues: number[] = values.filter((value) => {\n return !isNaN(value);\n });\n return Math.min(...newValues);\n};\n\n/**\n * Makes generics in typescript syntax\n *\n * @example\n * Array of array of strings in typescript syntax\n *\n * ```js\n * // returns \"Array>\"\n * parseGenericTypes('Array~Array~string~~');\n * ```\n * @param text - The text to convert\n * @returns The converted string\n */\nexport const parseGenericTypes = function (input: string): string {\n const inputSets = input.split(/(,)/);\n const output = [];\n\n for (let i = 0; i < inputSets.length; i++) {\n let thisSet = inputSets[i];\n\n // if the original input included a value such as \"~K, V~\"\", these will be split into\n // an array of [\"~K\",\",\",\" V~\"].\n // This means that on each call of processSet, there will only be 1 ~ present\n // To account for this, if we encounter a \",\", we are checking the previous and next sets in the array\n // to see if they contain matching ~'s\n // in which case we are assuming that they should be rejoined and sent to be processed\n if (thisSet === ',' && i > 0 && i + 1 < inputSets.length) {\n const previousSet = inputSets[i - 1];\n const nextSet = inputSets[i + 1];\n\n if (shouldCombineSets(previousSet, nextSet)) {\n thisSet = previousSet + ',' + nextSet;\n i++; // Move the index forward to skip the next iteration since we're combining sets\n output.pop();\n }\n }\n\n output.push(processSet(thisSet));\n }\n\n return output.join('');\n};\n\nexport const countOccurrence = (string: string, substring: string): number => {\n return Math.max(0, string.split(substring).length - 1);\n};\n\nconst shouldCombineSets = (previousSet: string, nextSet: string): boolean => {\n const prevCount = countOccurrence(previousSet, '~');\n const nextCount = countOccurrence(nextSet, '~');\n\n return prevCount === 1 && nextCount === 1;\n};\n\nconst processSet = (input: string): string => {\n const tildeCount = countOccurrence(input, '~');\n let hasStartingTilde = false;\n\n if (tildeCount <= 1) {\n return input;\n }\n\n // If there is an odd number of tildes, and the input starts with a tilde, we need to remove it and add it back in later\n if (tildeCount % 2 !== 0 && input.startsWith('~')) {\n input = input.substring(1);\n hasStartingTilde = true;\n }\n\n const chars = [...input];\n\n let first = chars.indexOf('~');\n let last = chars.lastIndexOf('~');\n\n while (first !== -1 && last !== -1 && first !== last) {\n chars[first] = '<';\n chars[last] = '>';\n\n first = chars.indexOf('~');\n last = chars.lastIndexOf('~');\n }\n\n // Add the starting tilde back in if we removed it\n if (hasStartingTilde) {\n chars.unshift('~');\n }\n\n return chars.join('');\n};\n\n// TODO: find a better method for detecting support. This interface was added in the MathML 4 spec.\n// Firefox versions between [4,71] (0.47%) and Safari versions between [5,13.4] (0.17%) don't have this interface implemented but MathML is supported\nexport const isMathMLSupported = () => window.MathMLElement !== undefined;\n\nexport const katexRegex = /\\$\\$(.*)\\$\\$/g;\n\n/**\n * Whether or not a text has KaTeX delimiters\n *\n * @param text - The text to test\n * @returns Whether or not the text has KaTeX delimiters\n */\nexport const hasKatex = (text: string): boolean => (text.match(katexRegex)?.length ?? 0) > 0;\n\n/**\n * Computes the minimum dimensions needed to display a div containing MathML\n *\n * @param text - The text to test\n * @param config - Configuration for Mermaid\n * @returns Object containing \\{width, height\\}\n */\nexport const calculateMathMLDimensions = async (text: string, config: MermaidConfig) => {\n const divElem = document.createElement('div');\n divElem.innerHTML = await renderKatexSanitized(text, config);\n divElem.id = 'katex-temp';\n divElem.style.visibility = 'hidden';\n divElem.style.position = 'absolute';\n divElem.style.top = '0';\n const body = document.querySelector('body');\n body?.insertAdjacentElement('beforeend', divElem);\n const dim = { width: divElem.clientWidth, height: divElem.clientHeight };\n divElem.remove();\n return dim;\n};\n\nconst renderKatexUnsanitized = async (text: string, config: MermaidConfig): Promise => {\n if (!hasKatex(text)) {\n return text;\n }\n\n if (!(isMathMLSupported() || config.legacyMathML || config.forceLegacyMathML)) {\n return text.replace(katexRegex, 'MathML is unsupported in this environment.');\n }\n\n if (includeLargeFeatures) {\n const { default: katex } = await import('katex');\n const outputMode =\n config.forceLegacyMathML || (!isMathMLSupported() && config.legacyMathML)\n ? 'htmlAndMathml'\n : 'mathml';\n return text\n .split(lineBreakRegex)\n .map((line) =>\n hasKatex(line)\n ? `
    ${line}
    `\n : `
    ${line}
    `\n )\n .join('')\n .replace(katexRegex, (_, c) =>\n katex\n .renderToString(c, {\n throwOnError: true,\n displayMode: true,\n output: outputMode,\n })\n .replace(/\\n/g, ' ')\n .replace(//g, '')\n );\n }\n\n return text.replace(\n katexRegex,\n 'Katex is not supported in @mermaid-js/tiny. Please use the full mermaid library.'\n );\n};\n\n/**\n * Attempts to render and return the KaTeX portion of a string with MathML\n *\n * @param text - The text to test\n * @param config - Configuration for Mermaid\n * @returns String containing MathML if KaTeX is supported, or an error message if it is not and stylesheets aren't present\n */\nexport const renderKatexSanitized = async (\n text: string,\n config: MermaidConfig\n): Promise => {\n return sanitizeText(await renderKatexUnsanitized(text, config), config);\n};\n\nexport default {\n getRows,\n sanitizeText,\n sanitizeTextOrArray,\n hasBreaks,\n splitBreaks,\n lineBreakRegex,\n removeScript,\n getUrl,\n evaluate,\n getMax,\n getMin,\n};\n", "import type { ExtendedIconifyIcon, IconifyIcon, IconifyJSON } from '@iconify/types';\nimport type { IconifyIconCustomisations } from '@iconify/utils';\nimport { getIconData, iconToHTML, iconToSVG, replaceIDs, stringToIcon } from '@iconify/utils';\nimport { getConfig } from '../config.js';\nimport { sanitizeText } from '../diagrams/common/common.js';\nimport { log } from '../logger.js';\n\ninterface AsyncIconLoader {\n name: string;\n loader: () => Promise;\n}\n\ninterface SyncIconLoader {\n name: string;\n icons: IconifyJSON;\n}\n\nexport type IconLoader = AsyncIconLoader | SyncIconLoader;\n\nexport const unknownIcon: IconifyIcon = {\n body: '?',\n height: 80,\n width: 80,\n};\n\nconst iconsStore = new Map();\nconst loaderStore = new Map();\n\nexport const registerIconPacks = (iconLoaders: IconLoader[]) => {\n for (const iconLoader of iconLoaders) {\n if (!iconLoader.name) {\n throw new Error(\n 'Invalid icon loader. Must have a \"name\" property with non-empty string value.'\n );\n }\n log.debug('Registering icon pack:', iconLoader.name);\n if ('loader' in iconLoader) {\n loaderStore.set(iconLoader.name, iconLoader.loader);\n } else if ('icons' in iconLoader) {\n iconsStore.set(iconLoader.name, iconLoader.icons);\n } else {\n log.error('Invalid icon loader:', iconLoader);\n throw new Error('Invalid icon loader. Must have either \"icons\" or \"loader\" property.');\n }\n }\n};\n\nconst getRegisteredIconData = async (iconName: string, fallbackPrefix?: string) => {\n const data = stringToIcon(iconName, true, fallbackPrefix !== undefined);\n if (!data) {\n throw new Error(`Invalid icon name: ${iconName}`);\n }\n const prefix = data.prefix || fallbackPrefix;\n if (!prefix) {\n throw new Error(`Icon name must contain a prefix: ${iconName}`);\n }\n let icons = iconsStore.get(prefix);\n if (!icons) {\n const loader = loaderStore.get(prefix);\n if (!loader) {\n throw new Error(`Icon set not found: ${data.prefix}`);\n }\n try {\n const loaded = await loader();\n icons = { ...loaded, prefix };\n iconsStore.set(prefix, icons);\n } catch (e) {\n log.error(e);\n throw new Error(`Failed to load icon set: ${data.prefix}`);\n }\n }\n const iconData = getIconData(icons, data.name);\n if (!iconData) {\n throw new Error(`Icon not found: ${iconName}`);\n }\n return iconData;\n};\n\nexport const isIconAvailable = async (iconName: string) => {\n try {\n await getRegisteredIconData(iconName);\n return true;\n } catch {\n return false;\n }\n};\n\nexport const getIconSVG = async (\n iconName: string,\n customisations?: IconifyIconCustomisations & { fallbackPrefix?: string },\n extraAttributes?: Record\n) => {\n let iconData: ExtendedIconifyIcon;\n try {\n iconData = await getRegisteredIconData(iconName, customisations?.fallbackPrefix);\n } catch (e) {\n log.error(e);\n iconData = unknownIcon;\n }\n const renderData = iconToSVG(iconData, customisations);\n const svg = iconToHTML(replaceIDs(renderData.body), {\n ...renderData.attributes,\n ...extraAttributes,\n });\n return sanitizeText(svg, getConfig());\n};\n", "export function dedent(\n templ: TemplateStringsArray | string,\n ...values: unknown[]\n): string {\n let strings = Array.from(typeof templ === 'string' ? [templ] : templ);\n\n // 1. Remove trailing whitespace.\n strings[strings.length - 1] = strings[strings.length - 1].replace(\n /\\r?\\n([\\t ]*)$/,\n '',\n );\n\n // 2. Find all line breaks to determine the highest common indentation level.\n const indentLengths = strings.reduce((arr, str) => {\n const matches = str.match(/\\n([\\t ]+|(?!\\s).)/g);\n if (matches) {\n return arr.concat(\n matches.map((match) => match.match(/[\\t ]/g)?.length ?? 0),\n );\n }\n return arr;\n }, []);\n\n // 3. Remove the common indentation from all strings.\n if (indentLengths.length) {\n const pattern = new RegExp(`\\n[\\t ]{${Math.min(...indentLengths)}}`, 'g');\n\n strings = strings.map((str) => str.replace(pattern, '\\n'));\n }\n\n // 4. Remove leading whitespace.\n strings[0] = strings[0].replace(/^\\r?\\n/, '');\n\n // 5. Perform interpolation.\n let string = strings[0];\n\n values.forEach((value, i) => {\n // 5.1 Read current indentation level\n const endentations = string.match(/(?:^|\\n)( *)$/)\n const endentation = endentations ? endentations[1] : ''\n let indentedValue = value\n // 5.2 Add indentation to values with multiline strings\n if (typeof value === 'string' && value.includes('\\n')) {\n indentedValue = String(value)\n .split('\\n')\n .map((str, i) => {\n return i === 0 ? str : `${endentation}${str}`\n })\n .join('\\n');\n }\n\n string += indentedValue + strings[i + 1];\n });\n\n return string;\n}\n\nexport default dedent;\n", "// Match Jekyll-style front matter blocks (https://jekyllrb.com/docs/front-matter/).\n// Based on regex used by Jekyll: https://github.com/jekyll/jekyll/blob/6dd3cc21c40b98054851846425af06c64f9fb466/lib/jekyll/document.rb#L10\n// Note that JS doesn't support the \"\\A\" anchor, which means we can't use\n// multiline mode.\n// Relevant YAML spec: https://yaml.org/spec/1.2.2/#914-explicit-documents\nexport const frontMatterRegex = /^-{3}\\s*[\\n\\r](.*?)[\\n\\r]-{3}\\s*[\\n\\r]+/s;\n\nexport const directiveRegex =\n /%{2}{\\s*(?:(\\w+)\\s*:|(\\w+))\\s*(?:(\\w+)|((?:(?!}%{2}).|\\r?\\n)*))?\\s*(?:}%{2})?/gi;\n\nexport const anyCommentRegex = /\\s*%%.*\\n/gm;\n", "export class UnknownDiagramError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'UnknownDiagramError';\n }\n}\n", "import type { MermaidConfig } from '../config.type.js';\nimport { log } from '../logger.js';\nimport type {\n DetectorRecord,\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from './types.js';\nimport { anyCommentRegex, directiveRegex, frontMatterRegex } from './regexes.js';\nimport { UnknownDiagramError } from '../errors.js';\n\nexport const detectors: Record = {};\n\n/**\n * Detects the type of the graph text.\n *\n * Takes into consideration the possible existence of an `%%init` directive\n *\n * @param text - The text defining the graph. For example:\n *\n * ```mermaid\n * %%{initialize: {\"startOnLoad\": true, logLevel: \"fatal\" }}%%\n * graph LR\n * a-->b\n * b-->c\n * c-->d\n * d-->e\n * e-->f\n * f-->g\n * g-->h\n * ```\n *\n * @param config - The mermaid config.\n * @returns A graph definition key\n */\nexport const detectType = function (text: string, config?: MermaidConfig): string {\n text = text\n .replace(frontMatterRegex, '')\n .replace(directiveRegex, '')\n .replace(anyCommentRegex, '\\n');\n for (const [key, { detector }] of Object.entries(detectors)) {\n const diagram = detector(text, config);\n if (diagram) {\n return key;\n }\n }\n\n throw new UnknownDiagramError(\n `No diagram type detected matching given configuration for text: ${text}`\n );\n};\n\n/**\n * Registers lazy-loaded diagrams to Mermaid.\n *\n * The diagram function is loaded asynchronously, so that diagrams are only loaded\n * if the diagram is detected.\n *\n * @remarks\n * Please note that the order of diagram detectors is important.\n * The first detector to return `true` is the diagram that will be loaded\n * and used, so put more specific detectors at the beginning!\n *\n * @param diagrams - Diagrams to lazy load, and their detectors, in order of importance.\n */\nexport const registerLazyLoadedDiagrams = (...diagrams: ExternalDiagramDefinition[]) => {\n for (const { id, detector, loader } of diagrams) {\n addDetector(id, detector, loader);\n }\n};\n\nexport const addDetector = (key: string, detector: DiagramDetector, loader?: DiagramLoader) => {\n if (detectors[key]) {\n log.warn(`Detector with key ${key} already exists. Overwriting.`);\n }\n detectors[key] = { detector, loader };\n log.debug(`Detector with key ${key} added${loader ? ' with loader' : ''}`);\n};\n\nexport const getDiagramLoader = (key: string) => {\n return detectors[key].loader;\n};\n", "/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,24],$V1=[1,25],$V2=[1,26],$V3=[1,27],$V4=[1,28],$V5=[1,63],$V6=[1,64],$V7=[1,65],$V8=[1,66],$V9=[1,67],$Va=[1,68],$Vb=[1,69],$Vc=[1,29],$Vd=[1,30],$Ve=[1,31],$Vf=[1,32],$Vg=[1,33],$Vh=[1,34],$Vi=[1,35],$Vj=[1,36],$Vk=[1,37],$Vl=[1,38],$Vm=[1,39],$Vn=[1,40],$Vo=[1,41],$Vp=[1,42],$Vq=[1,43],$Vr=[1,44],$Vs=[1,45],$Vt=[1,46],$Vu=[1,47],$Vv=[1,48],$Vw=[1,50],$Vx=[1,51],$Vy=[1,52],$Vz=[1,53],$VA=[1,54],$VB=[1,55],$VC=[1,56],$VD=[1,57],$VE=[1,58],$VF=[1,59],$VG=[1,60],$VH=[14,42],$VI=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],$VJ=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],$VK=[1,82],$VL=[1,83],$VM=[1,84],$VN=[1,85],$VO=[12,14,42],$VP=[12,14,33,42],$VQ=[12,14,33,42,76,77,79,80],$VR=[12,33],$VS=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"mermaidDoc\":4,\"direction\":5,\"direction_tb\":6,\"direction_bt\":7,\"direction_rl\":8,\"direction_lr\":9,\"graphConfig\":10,\"C4_CONTEXT\":11,\"NEWLINE\":12,\"statements\":13,\"EOF\":14,\"C4_CONTAINER\":15,\"C4_COMPONENT\":16,\"C4_DYNAMIC\":17,\"C4_DEPLOYMENT\":18,\"otherStatements\":19,\"diagramStatements\":20,\"otherStatement\":21,\"title\":22,\"accDescription\":23,\"acc_title\":24,\"acc_title_value\":25,\"acc_descr\":26,\"acc_descr_value\":27,\"acc_descr_multiline_value\":28,\"boundaryStatement\":29,\"boundaryStartStatement\":30,\"boundaryStopStatement\":31,\"boundaryStart\":32,\"LBRACE\":33,\"ENTERPRISE_BOUNDARY\":34,\"attributes\":35,\"SYSTEM_BOUNDARY\":36,\"BOUNDARY\":37,\"CONTAINER_BOUNDARY\":38,\"NODE\":39,\"NODE_L\":40,\"NODE_R\":41,\"RBRACE\":42,\"diagramStatement\":43,\"PERSON\":44,\"PERSON_EXT\":45,\"SYSTEM\":46,\"SYSTEM_DB\":47,\"SYSTEM_QUEUE\":48,\"SYSTEM_EXT\":49,\"SYSTEM_EXT_DB\":50,\"SYSTEM_EXT_QUEUE\":51,\"CONTAINER\":52,\"CONTAINER_DB\":53,\"CONTAINER_QUEUE\":54,\"CONTAINER_EXT\":55,\"CONTAINER_EXT_DB\":56,\"CONTAINER_EXT_QUEUE\":57,\"COMPONENT\":58,\"COMPONENT_DB\":59,\"COMPONENT_QUEUE\":60,\"COMPONENT_EXT\":61,\"COMPONENT_EXT_DB\":62,\"COMPONENT_EXT_QUEUE\":63,\"REL\":64,\"BIREL\":65,\"REL_U\":66,\"REL_D\":67,\"REL_L\":68,\"REL_R\":69,\"REL_B\":70,\"REL_INDEX\":71,\"UPDATE_EL_STYLE\":72,\"UPDATE_REL_STYLE\":73,\"UPDATE_LAYOUT_CONFIG\":74,\"attribute\":75,\"STR\":76,\"STR_KEY\":77,\"STR_VALUE\":78,\"ATTRIBUTE\":79,\"ATTRIBUTE_EMPTY\":80,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",6:\"direction_tb\",7:\"direction_bt\",8:\"direction_rl\",9:\"direction_lr\",11:\"C4_CONTEXT\",12:\"NEWLINE\",14:\"EOF\",15:\"C4_CONTAINER\",16:\"C4_COMPONENT\",17:\"C4_DYNAMIC\",18:\"C4_DEPLOYMENT\",22:\"title\",23:\"accDescription\",24:\"acc_title\",25:\"acc_title_value\",26:\"acc_descr\",27:\"acc_descr_value\",28:\"acc_descr_multiline_value\",33:\"LBRACE\",34:\"ENTERPRISE_BOUNDARY\",36:\"SYSTEM_BOUNDARY\",37:\"BOUNDARY\",38:\"CONTAINER_BOUNDARY\",39:\"NODE\",40:\"NODE_L\",41:\"NODE_R\",42:\"RBRACE\",44:\"PERSON\",45:\"PERSON_EXT\",46:\"SYSTEM\",47:\"SYSTEM_DB\",48:\"SYSTEM_QUEUE\",49:\"SYSTEM_EXT\",50:\"SYSTEM_EXT_DB\",51:\"SYSTEM_EXT_QUEUE\",52:\"CONTAINER\",53:\"CONTAINER_DB\",54:\"CONTAINER_QUEUE\",55:\"CONTAINER_EXT\",56:\"CONTAINER_EXT_DB\",57:\"CONTAINER_EXT_QUEUE\",58:\"COMPONENT\",59:\"COMPONENT_DB\",60:\"COMPONENT_QUEUE\",61:\"COMPONENT_EXT\",62:\"COMPONENT_EXT_DB\",63:\"COMPONENT_EXT_QUEUE\",64:\"REL\",65:\"BIREL\",66:\"REL_U\",67:\"REL_D\",68:\"REL_L\",69:\"REL_R\",70:\"REL_B\",71:\"REL_INDEX\",72:\"UPDATE_EL_STYLE\",73:\"UPDATE_REL_STYLE\",74:\"UPDATE_LAYOUT_CONFIG\",76:\"STR\",77:\"STR_KEY\",78:\"STR_VALUE\",79:\"ATTRIBUTE\",80:\"ATTRIBUTE_EMPTY\"},\nproductions_: [0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 3:\n yy.setDirection('TB');\nbreak;\ncase 4:\n yy.setDirection('BT');\nbreak;\ncase 5:\n yy.setDirection('RL');\nbreak;\ncase 6:\n yy.setDirection('LR');\nbreak;\ncase 8: case 9: case 10: case 11: case 12:\nyy.setC4Type($$[$0-3])\nbreak;\ncase 19:\nyy.setTitle($$[$0].substring(6));this.$=$$[$0].substring(6);\nbreak;\ncase 20:\nyy.setAccDescription($$[$0].substring(15));this.$=$$[$0].substring(15);\nbreak;\ncase 21:\n this.$=$$[$0].trim();yy.setTitle(this.$); \nbreak;\ncase 22: case 23:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 28:\n$$[$0].splice(2, 0, 'ENTERPRISE'); yy.addPersonOrSystemBoundary(...$$[$0]); this.$=$$[$0];\nbreak;\ncase 29:\n$$[$0].splice(2, 0, 'SYSTEM'); yy.addPersonOrSystemBoundary(...$$[$0]); this.$=$$[$0];\nbreak;\ncase 30:\nyy.addPersonOrSystemBoundary(...$$[$0]); this.$=$$[$0];\nbreak;\ncase 31:\n$$[$0].splice(2, 0, 'CONTAINER'); yy.addContainerBoundary(...$$[$0]); this.$=$$[$0];\nbreak;\ncase 32:\nyy.addDeploymentNode('node', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 33:\nyy.addDeploymentNode('nodeL', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 34:\nyy.addDeploymentNode('nodeR', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 35:\n yy.popBoundaryParseStack() \nbreak;\ncase 39:\nyy.addPersonOrSystem('person', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 40:\nyy.addPersonOrSystem('external_person', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 41:\nyy.addPersonOrSystem('system', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 42:\nyy.addPersonOrSystem('system_db', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 43:\nyy.addPersonOrSystem('system_queue', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 44:\nyy.addPersonOrSystem('external_system', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 45:\nyy.addPersonOrSystem('external_system_db', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 46:\nyy.addPersonOrSystem('external_system_queue', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 47:\nyy.addContainer('container', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 48:\nyy.addContainer('container_db', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 49:\nyy.addContainer('container_queue', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 50:\nyy.addContainer('external_container', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 51:\nyy.addContainer('external_container_db', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 52:\nyy.addContainer('external_container_queue', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 53:\nyy.addComponent('component', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 54:\nyy.addComponent('component_db', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 55:\nyy.addComponent('component_queue', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 56:\nyy.addComponent('external_component', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 57:\nyy.addComponent('external_component_db', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 58:\nyy.addComponent('external_component_queue', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 60:\nyy.addRel('rel', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 61:\nyy.addRel('birel', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 62:\nyy.addRel('rel_u', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 63:\nyy.addRel('rel_d', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 64:\nyy.addRel('rel_l', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 65:\nyy.addRel('rel_r', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 66:\nyy.addRel('rel_b', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 67:\n$$[$0].splice(0, 1); yy.addRel('rel', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 68:\nyy.updateElStyle('update_el_style', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 69:\nyy.updateRelStyle('update_rel_style', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 70:\nyy.updateLayoutConfig('update_layout_config', ...$$[$0]); this.$=$$[$0];\nbreak;\ncase 71:\n this.$ = [$$[$0]]; \nbreak;\ncase 72:\n $$[$0].unshift($$[$0-1]); this.$=$$[$0];\nbreak;\ncase 73: case 75:\n this.$ = $$[$0].trim(); \nbreak;\ncase 74:\n let kv={}; kv[$$[$0-1].trim()]=$$[$0].trim(); this.$=kv; \nbreak;\ncase 76:\n this.$ = \"\"; \nbreak;\n}\n},\ntable: [{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:$V0,23:$V1,24:$V2,26:$V3,28:$V4,29:49,30:61,32:62,34:$V5,36:$V6,37:$V7,38:$V8,39:$V9,40:$Va,41:$Vb,43:23,44:$Vc,45:$Vd,46:$Ve,47:$Vf,48:$Vg,49:$Vh,50:$Vi,51:$Vj,52:$Vk,53:$Vl,54:$Vm,55:$Vn,56:$Vo,57:$Vp,58:$Vq,59:$Vr,60:$Vs,61:$Vt,62:$Vu,63:$Vv,64:$Vw,65:$Vx,66:$Vy,67:$Vz,68:$VA,69:$VB,70:$VC,71:$VD,72:$VE,73:$VF,74:$VG},{13:70,19:20,20:21,21:22,22:$V0,23:$V1,24:$V2,26:$V3,28:$V4,29:49,30:61,32:62,34:$V5,36:$V6,37:$V7,38:$V8,39:$V9,40:$Va,41:$Vb,43:23,44:$Vc,45:$Vd,46:$Ve,47:$Vf,48:$Vg,49:$Vh,50:$Vi,51:$Vj,52:$Vk,53:$Vl,54:$Vm,55:$Vn,56:$Vo,57:$Vp,58:$Vq,59:$Vr,60:$Vs,61:$Vt,62:$Vu,63:$Vv,64:$Vw,65:$Vx,66:$Vy,67:$Vz,68:$VA,69:$VB,70:$VC,71:$VD,72:$VE,73:$VF,74:$VG},{13:71,19:20,20:21,21:22,22:$V0,23:$V1,24:$V2,26:$V3,28:$V4,29:49,30:61,32:62,34:$V5,36:$V6,37:$V7,38:$V8,39:$V9,40:$Va,41:$Vb,43:23,44:$Vc,45:$Vd,46:$Ve,47:$Vf,48:$Vg,49:$Vh,50:$Vi,51:$Vj,52:$Vk,53:$Vl,54:$Vm,55:$Vn,56:$Vo,57:$Vp,58:$Vq,59:$Vr,60:$Vs,61:$Vt,62:$Vu,63:$Vv,64:$Vw,65:$Vx,66:$Vy,67:$Vz,68:$VA,69:$VB,70:$VC,71:$VD,72:$VE,73:$VF,74:$VG},{13:72,19:20,20:21,21:22,22:$V0,23:$V1,24:$V2,26:$V3,28:$V4,29:49,30:61,32:62,34:$V5,36:$V6,37:$V7,38:$V8,39:$V9,40:$Va,41:$Vb,43:23,44:$Vc,45:$Vd,46:$Ve,47:$Vf,48:$Vg,49:$Vh,50:$Vi,51:$Vj,52:$Vk,53:$Vl,54:$Vm,55:$Vn,56:$Vo,57:$Vp,58:$Vq,59:$Vr,60:$Vs,61:$Vt,62:$Vu,63:$Vv,64:$Vw,65:$Vx,66:$Vy,67:$Vz,68:$VA,69:$VB,70:$VC,71:$VD,72:$VE,73:$VF,74:$VG},{13:73,19:20,20:21,21:22,22:$V0,23:$V1,24:$V2,26:$V3,28:$V4,29:49,30:61,32:62,34:$V5,36:$V6,37:$V7,38:$V8,39:$V9,40:$Va,41:$Vb,43:23,44:$Vc,45:$Vd,46:$Ve,47:$Vf,48:$Vg,49:$Vh,50:$Vi,51:$Vj,52:$Vk,53:$Vl,54:$Vm,55:$Vn,56:$Vo,57:$Vp,58:$Vq,59:$Vr,60:$Vs,61:$Vt,62:$Vu,63:$Vv,64:$Vw,65:$Vx,66:$Vy,67:$Vz,68:$VA,69:$VB,70:$VC,71:$VD,72:$VE,73:$VF,74:$VG},{14:[1,74]},o($VH,[2,13],{43:23,29:49,30:61,32:62,20:75,34:$V5,36:$V6,37:$V7,38:$V8,39:$V9,40:$Va,41:$Vb,44:$Vc,45:$Vd,46:$Ve,47:$Vf,48:$Vg,49:$Vh,50:$Vi,51:$Vj,52:$Vk,53:$Vl,54:$Vm,55:$Vn,56:$Vo,57:$Vp,58:$Vq,59:$Vr,60:$Vs,61:$Vt,62:$Vu,63:$Vv,64:$Vw,65:$Vx,66:$Vy,67:$Vz,68:$VA,69:$VB,70:$VC,71:$VD,72:$VE,73:$VF,74:$VG}),o($VH,[2,14]),o($VI,[2,16],{12:[1,76]}),o($VH,[2,36],{12:[1,77]}),o($VJ,[2,19]),o($VJ,[2,20]),{25:[1,78]},{27:[1,79]},o($VJ,[2,23]),{35:80,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:86,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:87,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:88,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:89,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:90,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:91,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:92,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:93,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:94,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:95,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:96,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:97,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:98,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:99,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:100,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:101,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:102,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:103,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:104,75:81,76:$VK,77:$VL,79:$VM,80:$VN},o($VO,[2,59]),{35:105,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:106,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:107,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:108,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:109,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:110,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:111,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:112,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:113,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:114,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:115,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{20:116,29:49,30:61,32:62,34:$V5,36:$V6,37:$V7,38:$V8,39:$V9,40:$Va,41:$Vb,43:23,44:$Vc,45:$Vd,46:$Ve,47:$Vf,48:$Vg,49:$Vh,50:$Vi,51:$Vj,52:$Vk,53:$Vl,54:$Vm,55:$Vn,56:$Vo,57:$Vp,58:$Vq,59:$Vr,60:$Vs,61:$Vt,62:$Vu,63:$Vv,64:$Vw,65:$Vx,66:$Vy,67:$Vz,68:$VA,69:$VB,70:$VC,71:$VD,72:$VE,73:$VF,74:$VG},{12:[1,118],33:[1,117]},{35:119,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:120,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:121,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:122,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:123,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:124,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{35:125,75:81,76:$VK,77:$VL,79:$VM,80:$VN},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},o($VH,[2,15]),o($VI,[2,17],{21:22,19:130,22:$V0,23:$V1,24:$V2,26:$V3,28:$V4}),o($VH,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:$V0,23:$V1,24:$V2,26:$V3,28:$V4,34:$V5,36:$V6,37:$V7,38:$V8,39:$V9,40:$Va,41:$Vb,44:$Vc,45:$Vd,46:$Ve,47:$Vf,48:$Vg,49:$Vh,50:$Vi,51:$Vj,52:$Vk,53:$Vl,54:$Vm,55:$Vn,56:$Vo,57:$Vp,58:$Vq,59:$Vr,60:$Vs,61:$Vt,62:$Vu,63:$Vv,64:$Vw,65:$Vx,66:$Vy,67:$Vz,68:$VA,69:$VB,70:$VC,71:$VD,72:$VE,73:$VF,74:$VG}),o($VJ,[2,21]),o($VJ,[2,22]),o($VO,[2,39]),o($VP,[2,71],{75:81,35:132,76:$VK,77:$VL,79:$VM,80:$VN}),o($VQ,[2,73]),{78:[1,133]},o($VQ,[2,75]),o($VQ,[2,76]),o($VO,[2,40]),o($VO,[2,41]),o($VO,[2,42]),o($VO,[2,43]),o($VO,[2,44]),o($VO,[2,45]),o($VO,[2,46]),o($VO,[2,47]),o($VO,[2,48]),o($VO,[2,49]),o($VO,[2,50]),o($VO,[2,51]),o($VO,[2,52]),o($VO,[2,53]),o($VO,[2,54]),o($VO,[2,55]),o($VO,[2,56]),o($VO,[2,57]),o($VO,[2,58]),o($VO,[2,60]),o($VO,[2,61]),o($VO,[2,62]),o($VO,[2,63]),o($VO,[2,64]),o($VO,[2,65]),o($VO,[2,66]),o($VO,[2,67]),o($VO,[2,68]),o($VO,[2,69]),o($VO,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},o($VR,[2,28]),o($VR,[2,29]),o($VR,[2,30]),o($VR,[2,31]),o($VR,[2,32]),o($VR,[2,33]),o($VR,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},o($VI,[2,18]),o($VH,[2,38]),o($VP,[2,72]),o($VQ,[2,74]),o($VO,[2,24]),o($VO,[2,35]),o($VS,[2,25]),o($VS,[2,26],{12:[1,138]}),o($VS,[2,27])],\ndefaultActions: {2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// 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.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n 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(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 6;\nbreak;\ncase 1:return 7;\nbreak;\ncase 2:return 8;\nbreak;\ncase 3:return 9;\nbreak;\ncase 4:return 22;\nbreak;\ncase 5:return 23;\nbreak;\ncase 6: this.begin(\"acc_title\");return 24; \nbreak;\ncase 7: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 8: this.begin(\"acc_descr\");return 26; \nbreak;\ncase 9: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 10: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 11: this.popState(); \nbreak;\ncase 12:return \"acc_descr_multiline_value\";\nbreak;\ncase 13:/* skip comments */\nbreak;\ncase 14:c /* skip comments */\nbreak;\ncase 15:return 12;\nbreak;\ncase 16:/* skip whitespace */\nbreak;\ncase 17:return 11;\nbreak;\ncase 18:return 15;\nbreak;\ncase 19:return 16;\nbreak;\ncase 20:return 17;\nbreak;\ncase 21:return 18;\nbreak;\ncase 22: this.begin(\"person_ext\"); return 45;\nbreak;\ncase 23: this.begin(\"person\"); return 44;\nbreak;\ncase 24: this.begin(\"system_ext_queue\"); return 51;\nbreak;\ncase 25: this.begin(\"system_ext_db\"); return 50;\nbreak;\ncase 26: this.begin(\"system_ext\"); return 49;\nbreak;\ncase 27: this.begin(\"system_queue\"); return 48;\nbreak;\ncase 28: this.begin(\"system_db\"); return 47;\nbreak;\ncase 29: this.begin(\"system\"); return 46;\nbreak;\ncase 30: this.begin(\"boundary\"); return 37;\nbreak;\ncase 31: this.begin(\"enterprise_boundary\"); return 34;\nbreak;\ncase 32: this.begin(\"system_boundary\"); return 36;\nbreak;\ncase 33: this.begin(\"container_ext_queue\"); return 57;\nbreak;\ncase 34: this.begin(\"container_ext_db\"); return 56;\nbreak;\ncase 35: this.begin(\"container_ext\"); return 55;\nbreak;\ncase 36: this.begin(\"container_queue\"); return 54;\nbreak;\ncase 37: this.begin(\"container_db\"); return 53;\nbreak;\ncase 38: this.begin(\"container\"); return 52;\nbreak;\ncase 39: this.begin(\"container_boundary\"); return 38;\nbreak;\ncase 40: this.begin(\"component_ext_queue\"); return 63;\nbreak;\ncase 41: this.begin(\"component_ext_db\"); return 62;\nbreak;\ncase 42: this.begin(\"component_ext\"); return 61;\nbreak;\ncase 43: this.begin(\"component_queue\"); return 60;\nbreak;\ncase 44: this.begin(\"component_db\"); return 59;\nbreak;\ncase 45: this.begin(\"component\"); return 58;\nbreak;\ncase 46: this.begin(\"node\"); return 39;\nbreak;\ncase 47: this.begin(\"node\"); return 39;\nbreak;\ncase 48: this.begin(\"node_l\"); return 40;\nbreak;\ncase 49: this.begin(\"node_r\"); return 41;\nbreak;\ncase 50: this.begin(\"rel\"); return 64;\nbreak;\ncase 51: this.begin(\"birel\"); return 65;\nbreak;\ncase 52: this.begin(\"rel_u\"); return 66;\nbreak;\ncase 53: this.begin(\"rel_u\"); return 66;\nbreak;\ncase 54: this.begin(\"rel_d\"); return 67;\nbreak;\ncase 55: this.begin(\"rel_d\"); return 67;\nbreak;\ncase 56: this.begin(\"rel_l\"); return 68;\nbreak;\ncase 57: this.begin(\"rel_l\"); return 68;\nbreak;\ncase 58: this.begin(\"rel_r\"); return 69;\nbreak;\ncase 59: this.begin(\"rel_r\"); return 69;\nbreak;\ncase 60: this.begin(\"rel_b\"); return 70;\nbreak;\ncase 61: this.begin(\"rel_index\"); return 71;\nbreak;\ncase 62: this.begin(\"update_el_style\"); return 72;\nbreak;\ncase 63: this.begin(\"update_rel_style\"); return 73;\nbreak;\ncase 64: this.begin(\"update_layout_config\"); return 74;\nbreak;\ncase 65:return \"EOF_IN_STRUCT\";\nbreak;\ncase 66: this.begin(\"attribute\"); return \"ATTRIBUTE_EMPTY\";\nbreak;\ncase 67: this.begin(\"attribute\"); \nbreak;\ncase 68: this.popState();this.popState();\nbreak;\ncase 69: return 80;\nbreak;\ncase 70: \nbreak;\ncase 71: return 80;\nbreak;\ncase 72: this.begin(\"string\");\nbreak;\ncase 73: this.popState(); \nbreak;\ncase 74: return \"STR\";\nbreak;\ncase 75: this.begin(\"string_kv\");\nbreak;\ncase 76: this.begin(\"string_kv_key\"); return \"STR_KEY\";\nbreak;\ncase 77: this.popState(); this.begin(\"string_kv_value\"); \nbreak;\ncase 78: return \"STR_VALUE\";\nbreak;\ncase 79: this.popState(); this.popState(); \nbreak;\ncase 80: return \"STR\";\nbreak;\ncase 81: /* this.begin(\"lbrace\"); */ return \"LBRACE\";\nbreak;\ncase 82: /* this.popState(); */ return \"RBRACE\";\nbreak;\ncase 83:return 'SPACE';\nbreak;\ncase 84:return 'EOL';\nbreak;\ncase 85:return 14;\nbreak;\n}\n},\nrules: [/^(?:.*direction\\s+TB[^\\n]*)/,/^(?:.*direction\\s+BT[^\\n]*)/,/^(?:.*direction\\s+RL[^\\n]*)/,/^(?:.*direction\\s+LR[^\\n]*)/,/^(?:title\\s[^#\\n;]+)/,/^(?:accDescription\\s[^#\\n;]+)/,/^(?:accTitle\\s*:\\s*)/,/^(?:(?!\\n||)*[^\\n]*)/,/^(?:accDescr\\s*:\\s*)/,/^(?:(?!\\n||)*[^\\n]*)/,/^(?:accDescr\\s*\\{\\s*)/,/^(?:[\\}])/,/^(?:[^\\}]*)/,/^(?:%%(?!\\{)*[^\\n]*(\\r?\\n?)+)/,/^(?:%%[^\\n]*(\\r?\\n)*)/,/^(?:\\s*(\\r?\\n)+)/,/^(?:\\s+)/,/^(?:C4Context\\b)/,/^(?:C4Container\\b)/,/^(?:C4Component\\b)/,/^(?:C4Dynamic\\b)/,/^(?:C4Deployment\\b)/,/^(?:Person_Ext\\b)/,/^(?:Person\\b)/,/^(?:SystemQueue_Ext\\b)/,/^(?:SystemDb_Ext\\b)/,/^(?:System_Ext\\b)/,/^(?:SystemQueue\\b)/,/^(?:SystemDb\\b)/,/^(?:System\\b)/,/^(?:Boundary\\b)/,/^(?:Enterprise_Boundary\\b)/,/^(?:System_Boundary\\b)/,/^(?:ContainerQueue_Ext\\b)/,/^(?:ContainerDb_Ext\\b)/,/^(?:Container_Ext\\b)/,/^(?:ContainerQueue\\b)/,/^(?:ContainerDb\\b)/,/^(?:Container\\b)/,/^(?:Container_Boundary\\b)/,/^(?:ComponentQueue_Ext\\b)/,/^(?:ComponentDb_Ext\\b)/,/^(?:Component_Ext\\b)/,/^(?:ComponentQueue\\b)/,/^(?:ComponentDb\\b)/,/^(?:Component\\b)/,/^(?:Deployment_Node\\b)/,/^(?:Node\\b)/,/^(?:Node_L\\b)/,/^(?:Node_R\\b)/,/^(?:Rel\\b)/,/^(?:BiRel\\b)/,/^(?:Rel_Up\\b)/,/^(?:Rel_U\\b)/,/^(?:Rel_Down\\b)/,/^(?:Rel_D\\b)/,/^(?:Rel_Left\\b)/,/^(?:Rel_L\\b)/,/^(?:Rel_Right\\b)/,/^(?:Rel_R\\b)/,/^(?:Rel_Back\\b)/,/^(?:RelIndex\\b)/,/^(?:UpdateElementStyle\\b)/,/^(?:UpdateRelStyle\\b)/,/^(?:UpdateLayoutConfig\\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*[\"][\"])/,/^(?:[ ]*[\"])/,/^(?:[\"])/,/^(?:[^\"]*)/,/^(?:[ ]*[\\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*[\"])/,/^(?:[^\"]+)/,/^(?:[\"])/,/^(?:[^,]+)/,/^(?:\\{)/,/^(?:\\})/,/^(?:[\\s]+)/,/^(?:[\\n\\r]+)/,/^(?:$)/],\nconditions: {\"acc_descr_multiline\":{\"rules\":[11,12],\"inclusive\":false},\"acc_descr\":{\"rules\":[9],\"inclusive\":false},\"acc_title\":{\"rules\":[7],\"inclusive\":false},\"string_kv_value\":{\"rules\":[78,79],\"inclusive\":false},\"string_kv_key\":{\"rules\":[77],\"inclusive\":false},\"string_kv\":{\"rules\":[76],\"inclusive\":false},\"string\":{\"rules\":[73,74],\"inclusive\":false},\"attribute\":{\"rules\":[68,69,70,71,72,75,80],\"inclusive\":false},\"update_layout_config\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"update_rel_style\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"update_el_style\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"rel_b\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"rel_r\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"rel_l\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"rel_d\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"rel_u\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"rel_bi\":{\"rules\":[],\"inclusive\":false},\"rel\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"node_r\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"node_l\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"node\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"index\":{\"rules\":[],\"inclusive\":false},\"rel_index\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"component_ext_queue\":{\"rules\":[],\"inclusive\":false},\"component_ext_db\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"component_ext\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"component_queue\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"component_db\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"component\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"container_boundary\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"container_ext_queue\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"container_ext_db\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"container_ext\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"container_queue\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"container_db\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"container\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"birel\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"system_boundary\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"enterprise_boundary\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"boundary\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"system_ext_queue\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"system_ext_db\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"system_ext\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"system_queue\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"system_db\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"system\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"person_ext\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"person\":{\"rules\":[65,66,67,68],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,82,83,84,85],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})(); \n\tparser.parser = parser;\n\texport { parser };\n\texport default parser;\n\t", "import { log } from './logger.js';\n\n/**\n * Applies d3 attributes\n *\n * @param {any} d3Elem D3 Element to apply the attributes onto\n * @param {[string, string][]} attrs Object.keys equivalent format of key to value mapping of attributes\n */\nconst d3Attrs = function (d3Elem, attrs) {\n for (let attr of attrs) {\n d3Elem.attr(attr[0], attr[1]);\n }\n};\n\n/**\n * Gives attributes for an SVG's size given arguments\n *\n * @param {number} height The height of the SVG\n * @param {number} width The width of the SVG\n * @param {boolean} useMaxWidth Whether or not to use max-width and set width to 100%\n * @returns {Map<'height' | 'width' | 'style', string>} Attributes for the SVG\n */\nexport const calculateSvgSizeAttrs = function (height, width, useMaxWidth) {\n let attrs = new Map();\n if (useMaxWidth) {\n attrs.set('width', '100%');\n attrs.set('style', `max-width: ${width}px;`);\n } else {\n attrs.set('height', height);\n attrs.set('width', width);\n }\n return attrs;\n};\n\n/**\n * Applies attributes from `calculateSvgSizeAttrs`\n *\n * @param {import('./diagram-api/types.js').SVG} svgElem The SVG Element to configure\n * @param {number} height The height of the SVG\n * @param {number} width The width of the SVG\n * @param {boolean} useMaxWidth Whether or not to use max-width and set width to 100%\n */\nexport const configureSvgSize = function (svgElem, height, width, useMaxWidth) {\n const attrs = calculateSvgSizeAttrs(height, width, useMaxWidth);\n d3Attrs(svgElem, attrs);\n};\n\n// TODO v11: Remove the graph parameter. It is not used.\nexport const setupGraphViewbox = function (graph, svgElem, padding, useMaxWidth) {\n const svgBounds = svgElem.node().getBBox();\n const sWidth = svgBounds.width;\n const sHeight = svgBounds.height;\n\n log.info(`SVG bounds: ${sWidth}x${sHeight}`, svgBounds);\n\n let width = 0;\n let height = 0;\n log.info(`Graph bounds: ${width}x${height}`, graph);\n\n width = sWidth + padding * 2;\n height = sHeight + padding * 2;\n\n log.info(`Calculated bounds: ${width}x${height}`);\n configureSvgSize(svgElem, height, width, useMaxWidth);\n\n // Ensure the viewBox includes the whole svgBounds area with extra space for padding\n const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${\n svgBounds.width + 2 * padding\n } ${svgBounds.height + 2 * padding}`;\n\n svgElem.attr('viewBox', vBox);\n};\n", "import type { FlowChartStyleOptions } from './diagrams/flowchart/styles.js';\nimport { log } from './logger.js';\nimport type { DiagramStylesProvider } from './diagram-api/types.js';\n\nconst themes: Record = {};\n\nconst getStyles = (\n type: string,\n userStyles: string,\n options: {\n fontFamily: string;\n fontSize: string;\n textColor: string;\n errorBkgColor: string;\n errorTextColor: string;\n lineColor: string;\n } & FlowChartStyleOptions\n) => {\n let diagramStyles = '';\n if (type in themes && themes[type]) {\n diagramStyles = themes[type](options);\n } else {\n log.warn(`No theme found for ${type}`);\n }\n return ` & {\n font-family: ${options.fontFamily};\n font-size: ${options.fontSize};\n fill: ${options.textColor}\n }\n @keyframes edge-animation-frame {\n from {\n stroke-dashoffset: 0;\n }\n }\n @keyframes dash {\n to {\n stroke-dashoffset: 0;\n }\n }\n & .edge-animation-slow {\n stroke-dasharray: 9,5 !important;\n stroke-dashoffset: 900;\n animation: dash 50s linear infinite;\n stroke-linecap: round;\n }\n & .edge-animation-fast {\n stroke-dasharray: 9,5 !important;\n stroke-dashoffset: 900;\n animation: dash 20s linear infinite;\n stroke-linecap: round;\n }\n /* Classes common for multiple diagrams */\n\n & .error-icon {\n fill: ${options.errorBkgColor};\n }\n & .error-text {\n fill: ${options.errorTextColor};\n stroke: ${options.errorTextColor};\n }\n\n & .edge-thickness-normal {\n stroke-width: 1px;\n }\n & .edge-thickness-thick {\n stroke-width: 3.5px\n }\n & .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n & .edge-thickness-invisible {\n stroke-width: 0;\n fill: none;\n }\n & .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n & .marker {\n fill: ${options.lineColor};\n stroke: ${options.lineColor};\n }\n & .marker.cross {\n stroke: ${options.lineColor};\n }\n\n & svg {\n font-family: ${options.fontFamily};\n font-size: ${options.fontSize};\n }\n & p {\n margin: 0\n }\n\n ${diagramStyles}\n\n ${userStyles}\n`;\n};\n\nexport const addStylesForDiagram = (type: string, diagramTheme?: DiagramStylesProvider): void => {\n if (diagramTheme !== undefined) {\n themes[type] = diagramTheme;\n }\n};\n\nexport default getStyles;\n", "import { sanitizeText as _sanitizeText } from './common.js';\nimport { getConfig } from '../../config.js';\n\nlet accTitle = '';\nlet diagramTitle = '';\nlet accDescription = '';\n\nconst sanitizeText = (txt: string): string => _sanitizeText(txt, getConfig());\n\nexport const clear = (): void => {\n accTitle = '';\n accDescription = '';\n diagramTitle = '';\n};\n\nexport const setAccTitle = (txt: string): void => {\n accTitle = sanitizeText(txt).replace(/^\\s+/g, '');\n};\n\nexport const getAccTitle = (): string => accTitle;\n\nexport const setAccDescription = (txt: string): void => {\n accDescription = sanitizeText(txt).replace(/\\n\\s+/g, '\\n');\n};\n\nexport const getAccDescription = (): string => accDescription;\n\nexport const setDiagramTitle = (txt: string): void => {\n diagramTitle = sanitizeText(txt);\n};\n\nexport const getDiagramTitle = (): string => diagramTitle;\n", "import { addDetector } from './detectType.js';\nimport { log as _log, setLogLevel as _setLogLevel } from '../logger.js';\nimport {\n getConfig as _getConfig,\n setConfig as _setConfig,\n defaultConfig as _defaultConfig,\n setSiteConfig as _setSiteConfig,\n} from '../config.js';\nimport { sanitizeText as _sanitizeText } from '../diagrams/common/common.js';\nimport { setupGraphViewbox as _setupGraphViewbox } from '../setupGraphViewbox.js';\nimport { addStylesForDiagram } from '../styles.js';\nimport type { DiagramDefinition, DiagramDetector } from './types.js';\nimport * as _commonDb from '../diagrams/common/commonDb.js';\n\n/*\n Packaging and exposing resources for external diagrams so that they can import\n diagramAPI and have access to select parts of mermaid common code required to\n create diagrams working like the internal diagrams.\n*/\nexport const log = _log;\nexport const setLogLevel = _setLogLevel;\nexport const getConfig = _getConfig;\nexport const setConfig = _setConfig;\nexport const defaultConfig = _defaultConfig;\nexport const setSiteConfig = _setSiteConfig;\nexport const sanitizeText = (text: string) => _sanitizeText(text, getConfig());\nexport const setupGraphViewbox = _setupGraphViewbox;\nexport const getCommonDb = () => {\n return _commonDb;\n};\n\nconst diagrams: Record = {};\nexport type Detectors = Record;\n\n/**\n * Registers the given diagram with Mermaid.\n *\n * Can be used for third-party custom diagrams.\n *\n * @param id - A unique ID for the given diagram.\n * @param diagram - The diagram definition.\n * @param detector - Function that returns `true` if a given mermaid text is this diagram definition.\n */\nexport const registerDiagram = (\n id: string,\n diagram: DiagramDefinition,\n detector?: DiagramDetector\n) => {\n if (diagrams[id]) {\n log.warn(`Diagram with id ${id} already registered. Overwriting.`);\n }\n diagrams[id] = diagram;\n if (detector) {\n addDetector(id, detector);\n }\n addStylesForDiagram(id, diagram.styles);\n\n diagram.injectUtils?.(\n log,\n setLogLevel,\n getConfig,\n sanitizeText,\n setupGraphViewbox,\n getCommonDb(),\n () => {\n // parseDirective is removed in https://github.com/mermaid-js/mermaid/pull/4759.\n // This is a no-op for legacy support.\n }\n );\n};\n\nexport const getDiagram = (name: string): DiagramDefinition => {\n if (name in diagrams) {\n return diagrams[name];\n }\n throw new DiagramNotFoundError(name);\n};\n\nexport class DiagramNotFoundError extends Error {\n constructor(name: string) {\n super(`Diagram ${name} not found.`);\n }\n}\n", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { sanitizeText } from '../common/common.js';\nimport {\n setAccTitle,\n getAccTitle,\n getAccDescription,\n setAccDescription,\n} from '../common/commonDb.js';\n\nlet c4ShapeArray = [];\nlet boundaryParseStack = [''];\nlet currentBoundaryParse = 'global';\nlet parentBoundaryParse = '';\nlet boundaries = [\n {\n alias: 'global',\n label: { text: 'global' },\n type: { text: 'global' },\n tags: null,\n link: null,\n parentBoundary: '',\n },\n];\nlet rels = [];\nlet title = '';\nlet wrapEnabled = false;\nlet c4ShapeInRow = 4;\nlet c4BoundaryInRow = 2;\nvar c4Type;\n\nexport const getC4Type = function () {\n return c4Type;\n};\n\nexport const setC4Type = function (c4TypeParam) {\n let sanitizedText = sanitizeText(c4TypeParam, getConfig());\n c4Type = sanitizedText;\n};\n\n//type, from, to, label, ?techn, ?descr, ?sprite, ?tags, $link\nexport const addRel = function (type, from, to, label, techn, descr, sprite, tags, link) {\n // Don't allow label nulling\n if (\n type === undefined ||\n type === null ||\n from === undefined ||\n from === null ||\n to === undefined ||\n to === null ||\n label === undefined ||\n label === null\n ) {\n return;\n }\n\n let rel = {};\n const old = rels.find((rel) => rel.from === from && rel.to === to);\n if (old) {\n rel = old;\n } else {\n rels.push(rel);\n }\n\n rel.type = type;\n rel.from = from;\n rel.to = to;\n rel.label = { text: label };\n\n if (techn === undefined || techn === null) {\n rel.techn = { text: '' };\n } else {\n if (typeof techn === 'object') {\n let [key, value] = Object.entries(techn)[0];\n rel[key] = { text: value };\n } else {\n rel.techn = { text: techn };\n }\n }\n\n if (descr === undefined || descr === null) {\n rel.descr = { text: '' };\n } else {\n if (typeof descr === 'object') {\n let [key, value] = Object.entries(descr)[0];\n rel[key] = { text: value };\n } else {\n rel.descr = { text: descr };\n }\n }\n\n if (typeof sprite === 'object') {\n let [key, value] = Object.entries(sprite)[0];\n rel[key] = value;\n } else {\n rel.sprite = sprite;\n }\n if (typeof tags === 'object') {\n let [key, value] = Object.entries(tags)[0];\n rel[key] = value;\n } else {\n rel.tags = tags;\n }\n if (typeof link === 'object') {\n let [key, value] = Object.entries(link)[0];\n rel[key] = value;\n } else {\n rel.link = link;\n }\n rel.wrap = autoWrap();\n};\n\n//type, alias, label, ?descr, ?sprite, ?tags, $link\nexport const addPersonOrSystem = function (typeC4Shape, alias, label, descr, sprite, tags, link) {\n // Don't allow label nulling\n if (alias === null || label === null) {\n return;\n }\n\n let personOrSystem = {};\n const old = c4ShapeArray.find((personOrSystem) => personOrSystem.alias === alias);\n if (old && alias === old.alias) {\n personOrSystem = old;\n } else {\n personOrSystem.alias = alias;\n c4ShapeArray.push(personOrSystem);\n }\n\n // Don't allow null labels, either\n if (label === undefined || label === null) {\n personOrSystem.label = { text: '' };\n } else {\n personOrSystem.label = { text: label };\n }\n\n if (descr === undefined || descr === null) {\n personOrSystem.descr = { text: '' };\n } else {\n if (typeof descr === 'object') {\n let [key, value] = Object.entries(descr)[0];\n personOrSystem[key] = { text: value };\n } else {\n personOrSystem.descr = { text: descr };\n }\n }\n\n if (typeof sprite === 'object') {\n let [key, value] = Object.entries(sprite)[0];\n personOrSystem[key] = value;\n } else {\n personOrSystem.sprite = sprite;\n }\n if (typeof tags === 'object') {\n let [key, value] = Object.entries(tags)[0];\n personOrSystem[key] = value;\n } else {\n personOrSystem.tags = tags;\n }\n if (typeof link === 'object') {\n let [key, value] = Object.entries(link)[0];\n personOrSystem[key] = value;\n } else {\n personOrSystem.link = link;\n }\n personOrSystem.typeC4Shape = { text: typeC4Shape };\n personOrSystem.parentBoundary = currentBoundaryParse;\n personOrSystem.wrap = autoWrap();\n};\n\n//type, alias, label, ?techn, ?descr ?sprite, ?tags, $link\nexport const addContainer = function (typeC4Shape, alias, label, techn, descr, sprite, tags, link) {\n // Don't allow label nulling\n if (alias === null || label === null) {\n return;\n }\n\n let container = {};\n const old = c4ShapeArray.find((container) => container.alias === alias);\n if (old && alias === old.alias) {\n container = old;\n } else {\n container.alias = alias;\n c4ShapeArray.push(container);\n }\n\n // Don't allow null labels, either\n if (label === undefined || label === null) {\n container.label = { text: '' };\n } else {\n container.label = { text: label };\n }\n\n if (techn === undefined || techn === null) {\n container.techn = { text: '' };\n } else {\n if (typeof techn === 'object') {\n let [key, value] = Object.entries(techn)[0];\n container[key] = { text: value };\n } else {\n container.techn = { text: techn };\n }\n }\n\n if (descr === undefined || descr === null) {\n container.descr = { text: '' };\n } else {\n if (typeof descr === 'object') {\n let [key, value] = Object.entries(descr)[0];\n container[key] = { text: value };\n } else {\n container.descr = { text: descr };\n }\n }\n\n if (typeof sprite === 'object') {\n let [key, value] = Object.entries(sprite)[0];\n container[key] = value;\n } else {\n container.sprite = sprite;\n }\n if (typeof tags === 'object') {\n let [key, value] = Object.entries(tags)[0];\n container[key] = value;\n } else {\n container.tags = tags;\n }\n if (typeof link === 'object') {\n let [key, value] = Object.entries(link)[0];\n container[key] = value;\n } else {\n container.link = link;\n }\n container.wrap = autoWrap();\n container.typeC4Shape = { text: typeC4Shape };\n container.parentBoundary = currentBoundaryParse;\n};\n\n//type, alias, label, ?techn, ?descr ?sprite, ?tags, $link\nexport const addComponent = function (typeC4Shape, alias, label, techn, descr, sprite, tags, link) {\n // Don't allow label nulling\n if (alias === null || label === null) {\n return;\n }\n\n let component = {};\n const old = c4ShapeArray.find((component) => component.alias === alias);\n if (old && alias === old.alias) {\n component = old;\n } else {\n component.alias = alias;\n c4ShapeArray.push(component);\n }\n\n // Don't allow null labels, either\n if (label === undefined || label === null) {\n component.label = { text: '' };\n } else {\n component.label = { text: label };\n }\n\n if (techn === undefined || techn === null) {\n component.techn = { text: '' };\n } else {\n if (typeof techn === 'object') {\n let [key, value] = Object.entries(techn)[0];\n component[key] = { text: value };\n } else {\n component.techn = { text: techn };\n }\n }\n\n if (descr === undefined || descr === null) {\n component.descr = { text: '' };\n } else {\n if (typeof descr === 'object') {\n let [key, value] = Object.entries(descr)[0];\n component[key] = { text: value };\n } else {\n component.descr = { text: descr };\n }\n }\n\n if (typeof sprite === 'object') {\n let [key, value] = Object.entries(sprite)[0];\n component[key] = value;\n } else {\n component.sprite = sprite;\n }\n if (typeof tags === 'object') {\n let [key, value] = Object.entries(tags)[0];\n component[key] = value;\n } else {\n component.tags = tags;\n }\n if (typeof link === 'object') {\n let [key, value] = Object.entries(link)[0];\n component[key] = value;\n } else {\n component.link = link;\n }\n component.wrap = autoWrap();\n component.typeC4Shape = { text: typeC4Shape };\n component.parentBoundary = currentBoundaryParse;\n};\n\n//alias, label, ?type, ?tags, $link\nexport const addPersonOrSystemBoundary = function (alias, label, type, tags, link) {\n // if (parentBoundary === null) return;\n\n // Don't allow label nulling\n if (alias === null || label === null) {\n return;\n }\n\n let boundary = {};\n const old = boundaries.find((boundary) => boundary.alias === alias);\n if (old && alias === old.alias) {\n boundary = old;\n } else {\n boundary.alias = alias;\n boundaries.push(boundary);\n }\n\n // Don't allow null labels, either\n if (label === undefined || label === null) {\n boundary.label = { text: '' };\n } else {\n boundary.label = { text: label };\n }\n\n if (type === undefined || type === null) {\n boundary.type = { text: 'system' };\n } else {\n if (typeof type === 'object') {\n let [key, value] = Object.entries(type)[0];\n boundary[key] = { text: value };\n } else {\n boundary.type = { text: type };\n }\n }\n\n if (typeof tags === 'object') {\n let [key, value] = Object.entries(tags)[0];\n boundary[key] = value;\n } else {\n boundary.tags = tags;\n }\n if (typeof link === 'object') {\n let [key, value] = Object.entries(link)[0];\n boundary[key] = value;\n } else {\n boundary.link = link;\n }\n boundary.parentBoundary = currentBoundaryParse;\n boundary.wrap = autoWrap();\n\n parentBoundaryParse = currentBoundaryParse;\n currentBoundaryParse = alias;\n boundaryParseStack.push(parentBoundaryParse);\n};\n\n//alias, label, ?type, ?tags, $link\nexport const addContainerBoundary = function (alias, label, type, tags, link) {\n // if (parentBoundary === null) return;\n\n // Don't allow label nulling\n if (alias === null || label === null) {\n return;\n }\n\n let boundary = {};\n const old = boundaries.find((boundary) => boundary.alias === alias);\n if (old && alias === old.alias) {\n boundary = old;\n } else {\n boundary.alias = alias;\n boundaries.push(boundary);\n }\n\n // Don't allow null labels, either\n if (label === undefined || label === null) {\n boundary.label = { text: '' };\n } else {\n boundary.label = { text: label };\n }\n\n if (type === undefined || type === null) {\n boundary.type = { text: 'container' };\n } else {\n if (typeof type === 'object') {\n let [key, value] = Object.entries(type)[0];\n boundary[key] = { text: value };\n } else {\n boundary.type = { text: type };\n }\n }\n\n if (typeof tags === 'object') {\n let [key, value] = Object.entries(tags)[0];\n boundary[key] = value;\n } else {\n boundary.tags = tags;\n }\n if (typeof link === 'object') {\n let [key, value] = Object.entries(link)[0];\n boundary[key] = value;\n } else {\n boundary.link = link;\n }\n boundary.parentBoundary = currentBoundaryParse;\n boundary.wrap = autoWrap();\n\n parentBoundaryParse = currentBoundaryParse;\n currentBoundaryParse = alias;\n boundaryParseStack.push(parentBoundaryParse);\n};\n\n//alias, label, ?type, ?descr, ?sprite, ?tags, $link\nexport const addDeploymentNode = function (\n nodeType,\n alias,\n label,\n type,\n descr,\n sprite,\n tags,\n link\n) {\n // if (parentBoundary === null) return;\n\n // Don't allow label nulling\n if (alias === null || label === null) {\n return;\n }\n\n let boundary = {};\n const old = boundaries.find((boundary) => boundary.alias === alias);\n if (old && alias === old.alias) {\n boundary = old;\n } else {\n boundary.alias = alias;\n boundaries.push(boundary);\n }\n\n // Don't allow null labels, either\n if (label === undefined || label === null) {\n boundary.label = { text: '' };\n } else {\n boundary.label = { text: label };\n }\n\n if (type === undefined || type === null) {\n boundary.type = { text: 'node' };\n } else {\n if (typeof type === 'object') {\n let [key, value] = Object.entries(type)[0];\n boundary[key] = { text: value };\n } else {\n boundary.type = { text: type };\n }\n }\n\n if (descr === undefined || descr === null) {\n boundary.descr = { text: '' };\n } else {\n if (typeof descr === 'object') {\n let [key, value] = Object.entries(descr)[0];\n boundary[key] = { text: value };\n } else {\n boundary.descr = { text: descr };\n }\n }\n\n if (typeof tags === 'object') {\n let [key, value] = Object.entries(tags)[0];\n boundary[key] = value;\n } else {\n boundary.tags = tags;\n }\n if (typeof link === 'object') {\n let [key, value] = Object.entries(link)[0];\n boundary[key] = value;\n } else {\n boundary.link = link;\n }\n boundary.nodeType = nodeType;\n boundary.parentBoundary = currentBoundaryParse;\n boundary.wrap = autoWrap();\n\n parentBoundaryParse = currentBoundaryParse;\n currentBoundaryParse = alias;\n boundaryParseStack.push(parentBoundaryParse);\n};\n\nexport const popBoundaryParseStack = function () {\n currentBoundaryParse = parentBoundaryParse;\n boundaryParseStack.pop();\n parentBoundaryParse = boundaryParseStack.pop();\n boundaryParseStack.push(parentBoundaryParse);\n};\n\n//elementName, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?sprite, ?techn, ?legendText, ?legendSprite\nexport const updateElStyle = function (\n typeC4Shape,\n elementName,\n bgColor,\n fontColor,\n borderColor,\n shadowing,\n shape,\n sprite,\n techn,\n legendText,\n legendSprite\n) {\n let old = c4ShapeArray.find((element) => element.alias === elementName);\n if (old === undefined) {\n old = boundaries.find((element) => element.alias === elementName);\n if (old === undefined) {\n return;\n }\n }\n if (bgColor !== undefined && bgColor !== null) {\n if (typeof bgColor === 'object') {\n let [key, value] = Object.entries(bgColor)[0];\n old[key] = value;\n } else {\n old.bgColor = bgColor;\n }\n }\n if (fontColor !== undefined && fontColor !== null) {\n if (typeof fontColor === 'object') {\n let [key, value] = Object.entries(fontColor)[0];\n old[key] = value;\n } else {\n old.fontColor = fontColor;\n }\n }\n if (borderColor !== undefined && borderColor !== null) {\n if (typeof borderColor === 'object') {\n let [key, value] = Object.entries(borderColor)[0];\n old[key] = value;\n } else {\n old.borderColor = borderColor;\n }\n }\n if (shadowing !== undefined && shadowing !== null) {\n if (typeof shadowing === 'object') {\n let [key, value] = Object.entries(shadowing)[0];\n old[key] = value;\n } else {\n old.shadowing = shadowing;\n }\n }\n if (shape !== undefined && shape !== null) {\n if (typeof shape === 'object') {\n let [key, value] = Object.entries(shape)[0];\n old[key] = value;\n } else {\n old.shape = shape;\n }\n }\n if (sprite !== undefined && sprite !== null) {\n if (typeof sprite === 'object') {\n let [key, value] = Object.entries(sprite)[0];\n old[key] = value;\n } else {\n old.sprite = sprite;\n }\n }\n if (techn !== undefined && techn !== null) {\n if (typeof techn === 'object') {\n let [key, value] = Object.entries(techn)[0];\n old[key] = value;\n } else {\n old.techn = techn;\n }\n }\n if (legendText !== undefined && legendText !== null) {\n if (typeof legendText === 'object') {\n let [key, value] = Object.entries(legendText)[0];\n old[key] = value;\n } else {\n old.legendText = legendText;\n }\n }\n if (legendSprite !== undefined && legendSprite !== null) {\n if (typeof legendSprite === 'object') {\n let [key, value] = Object.entries(legendSprite)[0];\n old[key] = value;\n } else {\n old.legendSprite = legendSprite;\n }\n }\n};\n\n//textColor, lineColor, ?offsetX, ?offsetY\nexport const updateRelStyle = function (\n typeC4Shape,\n from,\n to,\n textColor,\n lineColor,\n offsetX,\n offsetY\n) {\n const old = rels.find((rel) => rel.from === from && rel.to === to);\n if (old === undefined) {\n return;\n }\n if (textColor !== undefined && textColor !== null) {\n if (typeof textColor === 'object') {\n let [key, value] = Object.entries(textColor)[0];\n old[key] = value;\n } else {\n old.textColor = textColor;\n }\n }\n if (lineColor !== undefined && lineColor !== null) {\n if (typeof lineColor === 'object') {\n let [key, value] = Object.entries(lineColor)[0];\n old[key] = value;\n } else {\n old.lineColor = lineColor;\n }\n }\n if (offsetX !== undefined && offsetX !== null) {\n if (typeof offsetX === 'object') {\n let [key, value] = Object.entries(offsetX)[0];\n old[key] = parseInt(value);\n } else {\n old.offsetX = parseInt(offsetX);\n }\n }\n if (offsetY !== undefined && offsetY !== null) {\n if (typeof offsetY === 'object') {\n let [key, value] = Object.entries(offsetY)[0];\n old[key] = parseInt(value);\n } else {\n old.offsetY = parseInt(offsetY);\n }\n }\n};\n\n//?c4ShapeInRow, ?c4BoundaryInRow\nexport const updateLayoutConfig = function (typeC4Shape, c4ShapeInRowParam, c4BoundaryInRowParam) {\n let c4ShapeInRowValue = c4ShapeInRow;\n let c4BoundaryInRowValue = c4BoundaryInRow;\n\n if (typeof c4ShapeInRowParam === 'object') {\n const value = Object.values(c4ShapeInRowParam)[0];\n c4ShapeInRowValue = parseInt(value);\n } else {\n c4ShapeInRowValue = parseInt(c4ShapeInRowParam);\n }\n if (typeof c4BoundaryInRowParam === 'object') {\n const value = Object.values(c4BoundaryInRowParam)[0];\n c4BoundaryInRowValue = parseInt(value);\n } else {\n c4BoundaryInRowValue = parseInt(c4BoundaryInRowParam);\n }\n\n if (c4ShapeInRowValue >= 1) {\n c4ShapeInRow = c4ShapeInRowValue;\n }\n if (c4BoundaryInRowValue >= 1) {\n c4BoundaryInRow = c4BoundaryInRowValue;\n }\n};\n\nexport const getC4ShapeInRow = function () {\n return c4ShapeInRow;\n};\nexport const getC4BoundaryInRow = function () {\n return c4BoundaryInRow;\n};\nexport const getCurrentBoundaryParse = function () {\n return currentBoundaryParse;\n};\n\nexport const getParentBoundaryParse = function () {\n return parentBoundaryParse;\n};\n\nexport const getC4ShapeArray = function (parentBoundary) {\n if (parentBoundary === undefined || parentBoundary === null) {\n return c4ShapeArray;\n } else {\n return c4ShapeArray.filter((personOrSystem) => {\n return personOrSystem.parentBoundary === parentBoundary;\n });\n }\n};\nexport const getC4Shape = function (alias) {\n return c4ShapeArray.find((personOrSystem) => personOrSystem.alias === alias);\n};\nexport const getC4ShapeKeys = function (parentBoundary) {\n return Object.keys(getC4ShapeArray(parentBoundary));\n};\n\nexport const getBoundaries = function (parentBoundary) {\n if (parentBoundary === undefined || parentBoundary === null) {\n return boundaries;\n } else {\n return boundaries.filter((boundary) => boundary.parentBoundary === parentBoundary);\n }\n};\n\n// cspell:ignore getBoundarys\n/**\n * @deprecated Use {@link getBoundaries} instead\n */\nexport const getBoundarys = getBoundaries;\n\nexport const getRels = function () {\n return rels;\n};\n\nexport const getTitle = function () {\n return title;\n};\n\nexport const setWrap = function (wrapSetting) {\n wrapEnabled = wrapSetting;\n};\n\nexport const autoWrap = function () {\n return wrapEnabled;\n};\n\nexport const clear = function () {\n c4ShapeArray = [];\n boundaries = [\n {\n alias: 'global',\n label: { text: 'global' },\n type: { text: 'global' },\n tags: null,\n link: null,\n parentBoundary: '',\n },\n ];\n parentBoundaryParse = '';\n currentBoundaryParse = 'global';\n boundaryParseStack = [''];\n rels = [];\n\n boundaryParseStack = [''];\n title = '';\n wrapEnabled = false;\n c4ShapeInRow = 4;\n c4BoundaryInRow = 2;\n};\n\nexport const LINETYPE = {\n SOLID: 0,\n DOTTED: 1,\n NOTE: 2,\n SOLID_CROSS: 3,\n DOTTED_CROSS: 4,\n SOLID_OPEN: 5,\n DOTTED_OPEN: 6,\n LOOP_START: 10,\n LOOP_END: 11,\n ALT_START: 12,\n ALT_ELSE: 13,\n ALT_END: 14,\n OPT_START: 15,\n OPT_END: 16,\n ACTIVE_START: 17,\n ACTIVE_END: 18,\n PAR_START: 19,\n PAR_AND: 20,\n PAR_END: 21,\n RECT_START: 22,\n RECT_END: 23,\n SOLID_POINT: 24,\n DOTTED_POINT: 25,\n};\n\nexport const ARROWTYPE = {\n FILLED: 0,\n OPEN: 1,\n};\n\nexport const PLACEMENT = {\n LEFTOF: 0,\n RIGHTOF: 1,\n OVER: 2,\n};\n\nexport const setTitle = function (txt) {\n let sanitizedText = sanitizeText(txt, getConfig());\n title = sanitizedText;\n};\n\nexport default {\n addPersonOrSystem,\n addPersonOrSystemBoundary,\n addContainer,\n addContainerBoundary,\n addComponent,\n addDeploymentNode,\n popBoundaryParseStack,\n addRel,\n updateElStyle,\n updateRelStyle,\n updateLayoutConfig,\n autoWrap,\n setWrap,\n getC4ShapeArray,\n getC4Shape,\n getC4ShapeKeys,\n getBoundaries,\n getBoundarys,\n getCurrentBoundaryParse,\n getParentBoundaryParse,\n getRels,\n getTitle,\n getC4Type,\n getC4ShapeInRow,\n getC4BoundaryInRow,\n setAccTitle,\n getAccTitle,\n getAccDescription,\n setAccDescription,\n getConfig: () => getConfig().c4,\n clear,\n LINETYPE,\n ARROWTYPE,\n PLACEMENT,\n setTitle,\n setC4Type,\n // apply,\n};\n", "export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n", "export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n", "import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can\u2019t do this\n // for a comparator (except for specific, known comparators) because we can\u2019t\n // tell if the comparator is symmetric, and an asymmetric comparator can\u2019t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n", "export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n", "import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n", "export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n", "const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n", "export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n", "export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n", "export default function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n", "export {default as bisect, bisectRight, bisectLeft, bisectCenter} from \"./bisect.js\";\nexport {default as ascending} from \"./ascending.js\";\nexport {default as bisector} from \"./bisector.js\";\nexport {blur, blur2, blurImage} from \"./blur.js\";\nexport {default as count} from \"./count.js\";\nexport {default as cross} from \"./cross.js\";\nexport {default as cumsum} from \"./cumsum.js\";\nexport {default as descending} from \"./descending.js\";\nexport {default as deviation} from \"./deviation.js\";\nexport {default as extent} from \"./extent.js\";\nexport {Adder, fsum, fcumsum} from \"./fsum.js\";\nexport {default as group, flatGroup, flatRollup, groups, index, indexes, rollup, rollups} from \"./group.js\";\nexport {default as groupSort} from \"./groupSort.js\";\nexport {default as bin, default as histogram} from \"./bin.js\"; // Deprecated; use bin.\nexport {default as thresholdFreedmanDiaconis} from \"./threshold/freedmanDiaconis.js\";\nexport {default as thresholdScott} from \"./threshold/scott.js\";\nexport {default as thresholdSturges} from \"./threshold/sturges.js\";\nexport {default as max} from \"./max.js\";\nexport {default as maxIndex} from \"./maxIndex.js\";\nexport {default as mean} from \"./mean.js\";\nexport {default as median, medianIndex} from \"./median.js\";\nexport {default as merge} from \"./merge.js\";\nexport {default as min} from \"./min.js\";\nexport {default as minIndex} from \"./minIndex.js\";\nexport {default as mode} from \"./mode.js\";\nexport {default as nice} from \"./nice.js\";\nexport {default as pairs} from \"./pairs.js\";\nexport {default as permute} from \"./permute.js\";\nexport {default as quantile, quantileIndex, quantileSorted} from \"./quantile.js\";\nexport {default as quickselect} from \"./quickselect.js\";\nexport {default as range} from \"./range.js\";\nexport {default as rank} from \"./rank.js\";\nexport {default as least} from \"./least.js\";\nexport {default as leastIndex} from \"./leastIndex.js\";\nexport {default as greatest} from \"./greatest.js\";\nexport {default as greatestIndex} from \"./greatestIndex.js\";\nexport {default as scan} from \"./scan.js\"; // Deprecated; use leastIndex.\nexport {default as shuffle, shuffler} from \"./shuffle.js\";\nexport {default as sum} from \"./sum.js\";\nexport {default as ticks, tickIncrement, tickStep} from \"./ticks.js\";\nexport {default as transpose} from \"./transpose.js\";\nexport {default as variance} from \"./variance.js\";\nexport {default as zip} from \"./zip.js\";\nexport {default as every} from \"./every.js\";\nexport {default as some} from \"./some.js\";\nexport {default as filter} from \"./filter.js\";\nexport {default as map} from \"./map.js\";\nexport {default as reduce} from \"./reduce.js\";\nexport {default as reverse} from \"./reverse.js\";\nexport {default as sort} from \"./sort.js\";\nexport {default as difference} from \"./difference.js\";\nexport {default as disjoint} from \"./disjoint.js\";\nexport {default as intersection} from \"./intersection.js\";\nexport {default as subset} from \"./subset.js\";\nexport {default as superset} from \"./superset.js\";\nexport {default as union} from \"./union.js\";\nexport {InternMap, InternSet} from \"internmap\";\n", "export default function(x) {\n return x;\n}\n", "import identity from \"./identity.js\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n if (scale.round()) offset = Math.round(offset);\n return d => +scale(d) + offset;\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + offset,\n range1 = +range[range.length - 1] + offset,\n position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient === right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = Array.from(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n axis.offset = function(_) {\n return arguments.length ? (offset = +_, axis) : offset;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n", "export {\n axisTop,\n axisRight,\n axisBottom,\n axisLeft\n} from \"./axis.js\";\n", "var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n", "export {default as dispatch} from \"./dispatch.js\";\n", "export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n", "import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n", "import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n", "function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n", "import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n", "// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don\u2019t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n", "function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n", "import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n", "export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n", "import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n", "import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n", "import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n", "export default function(update) {\n return new Array(update.length);\n}\n", "import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n", "export default function(x) {\n return function() {\n return x;\n };\n}\n", "import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don\u2019t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn\u2019t worried about \u201Clive\u201D collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don\u2019t; we\u2019d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n", "import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n", "export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n", "import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n", "export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n", "import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n", "export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n", "export default function() {\n return Array.from(this);\n}\n", "export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n", "export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n", "export default function() {\n return !this.node();\n}\n", "export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n", "import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n", "export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n", "import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n", "function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n", "function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n", "function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n", "function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n", "function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n", "function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n", "import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n", "import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n", "function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n", "function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n", "export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n", "function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n", "import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n", "export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n", "import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n", "import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n", "export {default as create} from \"./create.js\";\nexport {default as creator} from \"./creator.js\";\nexport {default as local} from \"./local.js\";\nexport {default as matcher} from \"./matcher.js\";\nexport {default as namespace} from \"./namespace.js\";\nexport {default as namespaces} from \"./namespaces.js\";\nexport {default as pointer} from \"./pointer.js\";\nexport {default as pointers} from \"./pointers.js\";\nexport {default as select} from \"./select.js\";\nexport {default as selectAll} from \"./selectAll.js\";\nexport {default as selection} from \"./selection/index.js\";\nexport {default as selector} from \"./selector.js\";\nexport {default as selectorAll} from \"./selectorAll.js\";\nexport {styleValue as style} from \"./selection/style.js\";\nexport {default as window} from \"./window.js\";\n", "export {default as drag} from \"./drag.js\";\nexport {default as dragDisable, yesdrag as dragEnable} from \"./nodrag.js\";\n", "export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n", "import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n", "export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n", "import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * degrees;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * radians;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb() {\n return hcl2lab(this).rgb();\n }\n}));\n", "export {default as color, rgb, hsl} from \"./color.js\";\nexport {default as lab, hcl, lch, gray} from \"./lab.js\";\nexport {default as cubehelix} from \"./cubehelix.js\";\n", "export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n", "import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n", "export default x => () => x;\n", "import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n", "import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n", "export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n", "import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n", "export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n", "export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n", "import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n", "import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n", "import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n", "export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n", "var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n", "import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n", "import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n", "import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n", "export {default as interpolate} from \"./value.js\";\nexport {default as interpolateArray} from \"./array.js\";\nexport {default as interpolateBasis} from \"./basis.js\";\nexport {default as interpolateBasisClosed} from \"./basisClosed.js\";\nexport {default as interpolateDate} from \"./date.js\";\nexport {default as interpolateDiscrete} from \"./discrete.js\";\nexport {default as interpolateHue} from \"./hue.js\";\nexport {default as interpolateNumber} from \"./number.js\";\nexport {default as interpolateNumberArray} from \"./numberArray.js\";\nexport {default as interpolateObject} from \"./object.js\";\nexport {default as interpolateRound} from \"./round.js\";\nexport {default as interpolateString} from \"./string.js\";\nexport {interpolateTransformCss, interpolateTransformSvg} from \"./transform/index.js\";\nexport {default as interpolateZoom} from \"./zoom.js\";\nexport {default as interpolateRgb, rgbBasis as interpolateRgbBasis, rgbBasisClosed as interpolateRgbBasisClosed} from \"./rgb.js\";\nexport {default as interpolateHsl, hslLong as interpolateHslLong} from \"./hsl.js\";\nexport {default as interpolateLab} from \"./lab.js\";\nexport {default as interpolateHcl, hclLong as interpolateHclLong} from \"./hcl.js\";\nexport {default as interpolateCubehelix, cubehelixLong as interpolateCubehelixLong} from \"./cubehelix.js\";\nexport {default as piecewise} from \"./piecewise.js\";\nexport {default as quantize} from \"./quantize.js\";\n", "var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we\u2019ve set an alarm, if we haven\u2019t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n", "import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n", "export {\n now,\n timer,\n timerFlush\n} from \"./timer.js\";\n\nexport {\n default as timeout\n} from \"./timeout.js\";\n\nexport {\n default as interval\n} from \"./interval.js\";\n", "import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n", "import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n", "import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we\u2019re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we\u2019re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n", "import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n", "import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n", "import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n", "import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n", "import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n", "import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n", "import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n", "import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we\u2019re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n", "function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n", "import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n", "import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n", "import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n", "import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we\u2019re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n", "function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n", "import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n", "function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n", "import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n", "import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we\u2019re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n", "import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n", "export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n", "export {\n linear as easeLinear\n} from \"./linear.js\";\n\nexport {\n quadInOut as easeQuad,\n quadIn as easeQuadIn,\n quadOut as easeQuadOut,\n quadInOut as easeQuadInOut\n} from \"./quad.js\";\n\nexport {\n cubicInOut as easeCubic,\n cubicIn as easeCubicIn,\n cubicOut as easeCubicOut,\n cubicInOut as easeCubicInOut\n} from \"./cubic.js\";\n\nexport {\n polyInOut as easePoly,\n polyIn as easePolyIn,\n polyOut as easePolyOut,\n polyInOut as easePolyInOut\n} from \"./poly.js\";\n\nexport {\n sinInOut as easeSin,\n sinIn as easeSinIn,\n sinOut as easeSinOut,\n sinInOut as easeSinInOut\n} from \"./sin.js\";\n\nexport {\n expInOut as easeExp,\n expIn as easeExpIn,\n expOut as easeExpOut,\n expInOut as easeExpInOut\n} from \"./exp.js\";\n\nexport {\n circleInOut as easeCircle,\n circleIn as easeCircleIn,\n circleOut as easeCircleOut,\n circleInOut as easeCircleInOut\n} from \"./circle.js\";\n\nexport {\n bounceOut as easeBounce,\n bounceIn as easeBounceIn,\n bounceOut as easeBounceOut,\n bounceInOut as easeBounceInOut\n} from \"./bounce.js\";\n\nexport {\n backInOut as easeBack,\n backIn as easeBackIn,\n backOut as easeBackOut,\n backInOut as easeBackInOut\n} from \"./back.js\";\n\nexport {\n elasticOut as easeElastic,\n elasticIn as easeElasticIn,\n elasticOut as easeElasticOut,\n elasticInOut as easeElasticInOut\n} from \"./elastic.js\";\n", "import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n", "import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n", "import \"./selection/index.js\";\nexport {default as transition} from \"./transition/index.js\";\nexport {default as active} from \"./active.js\";\nexport {default as interrupt} from \"./interrupt.js\";\n", "export default x => () => x;\n", "export default function BrushEvent(type, {\n sourceEvent,\n target,\n selection,\n mode,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n selection: {value: selection, enumerable: true, configurable: true},\n mode: {value: mode, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n", "export function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n", "import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {pointer, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport BrushEvent from \"./event.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\nvar MODE_DRAG = {name: \"drag\"},\n MODE_SPACE = {name: \"space\"},\n MODE_HANDLE = {name: \"handle\"},\n MODE_CENTER = {name: \"center\"};\n\nconst {abs, max, min} = Math;\n\nfunction number1(e) {\n return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n return [number1(e[0]), number1(e[1])];\n}\n\nvar X = {\n name: \"x\",\n handles: [\"w\", \"e\"].map(type),\n input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n name: \"y\",\n handles: [\"n\", \"s\"].map(type),\n input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n name: \"xy\",\n handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n input: function(xy) { return xy == null ? null : number2(xy); },\n output: function(xy) { return xy; }\n};\n\nvar cursors = {\n overlay: \"crosshair\",\n selection: \"move\",\n n: \"ns-resize\",\n e: \"ew-resize\",\n s: \"ns-resize\",\n w: \"ew-resize\",\n nw: \"nwse-resize\",\n ne: \"nesw-resize\",\n se: \"nwse-resize\",\n sw: \"nesw-resize\"\n};\n\nvar flipX = {\n e: \"w\",\n w: \"e\",\n nw: \"ne\",\n ne: \"nw\",\n se: \"sw\",\n sw: \"se\"\n};\n\nvar flipY = {\n n: \"s\",\n s: \"n\",\n nw: \"sw\",\n ne: \"se\",\n se: \"ne\",\n sw: \"nw\"\n};\n\nvar signsX = {\n overlay: +1,\n selection: +1,\n n: null,\n e: +1,\n s: null,\n w: -1,\n nw: -1,\n ne: +1,\n se: +1,\n sw: -1\n};\n\nvar signsY = {\n overlay: +1,\n selection: +1,\n n: -1,\n e: null,\n s: +1,\n w: null,\n nw: -1,\n ne: -1,\n se: +1,\n sw: +1\n};\n\nfunction type(t) {\n return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n var svg = this.ownerSVGElement || this;\n if (svg.hasAttribute(\"viewBox\")) {\n svg = svg.viewBox.baseVal;\n return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n }\n return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name \u201C__brush\u201D rather than auto-generated.\nfunction local(node) {\n while (!node.__brush) if (!(node = node.parentNode)) return;\n return node.__brush;\n}\n\nfunction empty(extent) {\n return extent[0][0] === extent[1][0]\n || extent[0][1] === extent[1][1];\n}\n\nexport function brushSelection(node) {\n var state = node.__brush;\n return state ? state.dim.output(state.selection) : null;\n}\n\nexport function brushX() {\n return brush(X);\n}\n\nexport function brushY() {\n return brush(Y);\n}\n\nexport default function() {\n return brush(XY);\n}\n\nfunction brush(dim) {\n var extent = defaultExtent,\n filter = defaultFilter,\n touchable = defaultTouchable,\n keys = true,\n listeners = dispatch(\"start\", \"brush\", \"end\"),\n handleSize = 6,\n touchending;\n\n function brush(group) {\n var overlay = group\n .property(\"__brush\", initialize)\n .selectAll(\".overlay\")\n .data([type(\"overlay\")]);\n\n overlay.enter().append(\"rect\")\n .attr(\"class\", \"overlay\")\n .attr(\"pointer-events\", \"all\")\n .attr(\"cursor\", cursors.overlay)\n .merge(overlay)\n .each(function() {\n var extent = local(this).extent;\n select(this)\n .attr(\"x\", extent[0][0])\n .attr(\"y\", extent[0][1])\n .attr(\"width\", extent[1][0] - extent[0][0])\n .attr(\"height\", extent[1][1] - extent[0][1]);\n });\n\n group.selectAll(\".selection\")\n .data([type(\"selection\")])\n .enter().append(\"rect\")\n .attr(\"class\", \"selection\")\n .attr(\"cursor\", cursors.selection)\n .attr(\"fill\", \"#777\")\n .attr(\"fill-opacity\", 0.3)\n .attr(\"stroke\", \"#fff\")\n .attr(\"shape-rendering\", \"crispEdges\");\n\n var handle = group.selectAll(\".handle\")\n .data(dim.handles, function(d) { return d.type; });\n\n handle.exit().remove();\n\n handle.enter().append(\"rect\")\n .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n group\n .each(redraw)\n .attr(\"fill\", \"none\")\n .attr(\"pointer-events\", \"all\")\n .on(\"mousedown.brush\", started)\n .filter(touchable)\n .on(\"touchstart.brush\", started)\n .on(\"touchmove.brush\", touchmoved)\n .on(\"touchend.brush touchcancel.brush\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n brush.move = function(group, selection, event) {\n if (group.tween) {\n group\n .on(\"start.brush\", function(event) { emitter(this, arguments).beforestart().start(event); })\n .on(\"interrupt.brush end.brush\", function(event) { emitter(this, arguments).end(event); })\n .tween(\"brush\", function() {\n var that = this,\n state = that.__brush,\n emit = emitter(that, arguments),\n selection0 = state.selection,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n i = interpolate(selection0, selection1);\n\n function tween(t) {\n state.selection = t === 1 && selection1 === null ? null : i(t);\n redraw.call(that);\n emit.brush();\n }\n\n return selection0 !== null && selection1 !== null ? tween : tween(1);\n });\n } else {\n group\n .each(function() {\n var that = this,\n args = arguments,\n state = that.__brush,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n emit = emitter(that, args).beforestart();\n\n interrupt(that);\n state.selection = selection1 === null ? null : selection1;\n redraw.call(that);\n emit.start(event).brush(event).end(event);\n });\n }\n };\n\n brush.clear = function(group, event) {\n brush.move(group, null, event);\n };\n\n function redraw() {\n var group = select(this),\n selection = local(this).selection;\n\n if (selection) {\n group.selectAll(\".selection\")\n .style(\"display\", null)\n .attr(\"x\", selection[0][0])\n .attr(\"y\", selection[0][1])\n .attr(\"width\", selection[1][0] - selection[0][0])\n .attr(\"height\", selection[1][1] - selection[0][1]);\n\n group.selectAll(\".handle\")\n .style(\"display\", null)\n .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n }\n\n else {\n group.selectAll(\".selection,.handle\")\n .style(\"display\", \"none\")\n .attr(\"x\", null)\n .attr(\"y\", null)\n .attr(\"width\", null)\n .attr(\"height\", null);\n }\n }\n\n function emitter(that, args, clean) {\n var emit = that.__brush.emitter;\n return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n }\n\n function Emitter(that, args, clean) {\n this.that = that;\n this.args = args;\n this.state = that.__brush;\n this.active = 0;\n this.clean = clean;\n }\n\n Emitter.prototype = {\n beforestart: function() {\n if (++this.active === 1) this.state.emitter = this, this.starting = true;\n return this;\n },\n start: function(event, mode) {\n if (this.starting) this.starting = false, this.emit(\"start\", event, mode);\n else this.emit(\"brush\", event);\n return this;\n },\n brush: function(event, mode) {\n this.emit(\"brush\", event, mode);\n return this;\n },\n end: function(event, mode) {\n if (--this.active === 0) delete this.state.emitter, this.emit(\"end\", event, mode);\n return this;\n },\n emit: function(type, event, mode) {\n var d = select(this.that).datum();\n listeners.call(\n type,\n this.that,\n new BrushEvent(type, {\n sourceEvent: event,\n target: brush,\n selection: dim.output(this.state.selection),\n mode,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function started(event) {\n if (touchending && !event.touches) return;\n if (!filter.apply(this, arguments)) return;\n\n var that = this,\n type = event.target.__data__.type,\n mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\n signX = dim === Y ? null : signsX[type],\n signY = dim === X ? null : signsY[type],\n state = local(that),\n extent = state.extent,\n selection = state.selection,\n W = extent[0][0], w0, w1,\n N = extent[0][1], n0, n1,\n E = extent[1][0], e0, e1,\n S = extent[1][1], s0, s1,\n dx = 0,\n dy = 0,\n moving,\n shifting = signX && signY && keys && event.shiftKey,\n lockX,\n lockY,\n points = Array.from(event.touches || [event], t => {\n const i = t.identifier;\n t = pointer(t, that);\n t.point0 = t.slice();\n t.identifier = i;\n return t;\n });\n\n interrupt(that);\n var emit = emitter(that, arguments, true).beforestart();\n\n if (type === \"overlay\") {\n if (selection) moving = true;\n const pts = [points[0], points[1] || points[0]];\n state.selection = selection = [[\n w0 = dim === Y ? W : min(pts[0][0], pts[1][0]),\n n0 = dim === X ? N : min(pts[0][1], pts[1][1])\n ], [\n e0 = dim === Y ? E : max(pts[0][0], pts[1][0]),\n s0 = dim === X ? S : max(pts[0][1], pts[1][1])\n ]];\n if (points.length > 1) move(event);\n } else {\n w0 = selection[0][0];\n n0 = selection[0][1];\n e0 = selection[1][0];\n s0 = selection[1][1];\n }\n\n w1 = w0;\n n1 = n0;\n e1 = e0;\n s1 = s0;\n\n var group = select(that)\n .attr(\"pointer-events\", \"none\");\n\n var overlay = group.selectAll(\".overlay\")\n .attr(\"cursor\", cursors[type]);\n\n if (event.touches) {\n emit.moved = moved;\n emit.ended = ended;\n } else {\n var view = select(event.view)\n .on(\"mousemove.brush\", moved, true)\n .on(\"mouseup.brush\", ended, true);\n if (keys) view\n .on(\"keydown.brush\", keydowned, true)\n .on(\"keyup.brush\", keyupped, true)\n\n dragDisable(event.view);\n }\n\n redraw.call(that);\n emit.start(event, mode.name);\n\n function moved(event) {\n for (const p of event.changedTouches || [event]) {\n for (const d of points)\n if (d.identifier === p.identifier) d.cur = pointer(p, that);\n }\n if (shifting && !lockX && !lockY && points.length === 1) {\n const point = points[0];\n if (abs(point.cur[0] - point[0]) > abs(point.cur[1] - point[1]))\n lockY = true;\n else\n lockX = true;\n }\n for (const point of points)\n if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1];\n moving = true;\n noevent(event);\n move(event);\n }\n\n function move(event) {\n const point = points[0], point0 = point.point0;\n var t;\n\n dx = point[0] - point0[0];\n dy = point[1] - point0[1];\n\n switch (mode) {\n case MODE_SPACE:\n case MODE_DRAG: {\n if (signX) dx = max(W - w0, min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n if (signY) dy = max(N - n0, min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n break;\n }\n case MODE_HANDLE: {\n if (points[1]) {\n if (signX) w1 = max(W, min(E, points[0][0])), e1 = max(W, min(E, points[1][0])), signX = 1;\n if (signY) n1 = max(N, min(S, points[0][1])), s1 = max(N, min(S, points[1][1])), signY = 1;\n } else {\n if (signX < 0) dx = max(W - w0, min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n else if (signX > 0) dx = max(W - e0, min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n if (signY < 0) dy = max(N - n0, min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n else if (signY > 0) dy = max(N - s0, min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n }\n break;\n }\n case MODE_CENTER: {\n if (signX) w1 = max(W, min(E, w0 - dx * signX)), e1 = max(W, min(E, e0 + dx * signX));\n if (signY) n1 = max(N, min(S, n0 - dy * signY)), s1 = max(N, min(S, s0 + dy * signY));\n break;\n }\n }\n\n if (e1 < w1) {\n signX *= -1;\n t = w0, w0 = e0, e0 = t;\n t = w1, w1 = e1, e1 = t;\n if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n }\n\n if (s1 < n1) {\n signY *= -1;\n t = n0, n0 = s0, s0 = t;\n t = n1, n1 = s1, s1 = t;\n if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n }\n\n if (state.selection) selection = state.selection; // May be set by brush.move!\n if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n if (selection[0][0] !== w1\n || selection[0][1] !== n1\n || selection[1][0] !== e1\n || selection[1][1] !== s1) {\n state.selection = [[w1, n1], [e1, s1]];\n redraw.call(that);\n emit.brush(event, mode.name);\n }\n }\n\n function ended(event) {\n nopropagation(event);\n if (event.touches) {\n if (event.touches.length) return;\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n } else {\n dragEnable(event.view, moving);\n view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n }\n group.attr(\"pointer-events\", \"all\");\n overlay.attr(\"cursor\", cursors.overlay);\n if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n if (empty(selection)) state.selection = null, redraw.call(that);\n emit.end(event, mode.name);\n }\n\n function keydowned(event) {\n switch (event.keyCode) {\n case 16: { // SHIFT\n shifting = signX && signY;\n break;\n }\n case 18: { // ALT\n if (mode === MODE_HANDLE) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n move(event);\n }\n break;\n }\n case 32: { // SPACE; takes priority over ALT\n if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n mode = MODE_SPACE;\n overlay.attr(\"cursor\", cursors.selection);\n move(event);\n }\n break;\n }\n default: return;\n }\n noevent(event);\n }\n\n function keyupped(event) {\n switch (event.keyCode) {\n case 16: { // SHIFT\n if (shifting) {\n lockX = lockY = shifting = false;\n move(event);\n }\n break;\n }\n case 18: { // ALT\n if (mode === MODE_CENTER) {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n move(event);\n }\n break;\n }\n case 32: { // SPACE\n if (mode === MODE_SPACE) {\n if (event.altKey) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n } else {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n }\n overlay.attr(\"cursor\", cursors[type]);\n move(event);\n }\n break;\n }\n default: return;\n }\n noevent(event);\n }\n }\n\n function touchmoved(event) {\n emitter(this, arguments).moved(event);\n }\n\n function touchended(event) {\n emitter(this, arguments).ended(event);\n }\n\n function initialize() {\n var state = this.__brush || {selection: null};\n state.extent = number2(extent.apply(this, arguments));\n state.dim = dim;\n return state;\n }\n\n brush.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant(number2(_)), brush) : extent;\n };\n\n brush.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n };\n\n brush.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), brush) : touchable;\n };\n\n brush.handleSize = function(_) {\n return arguments.length ? (handleSize = +_, brush) : handleSize;\n };\n\n brush.keyModifiers = function(_) {\n return arguments.length ? (keys = !!_, brush) : keys;\n };\n\n brush.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? brush : value;\n };\n\n return brush;\n}\n", "export {\n default as brush,\n brushX,\n brushY,\n brushSelection\n} from \"./brush.js\";\n", "const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We\u2019re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n", "export {Path, path, pathRound} from \"./path.js\";\n", "export {default as chord, chordTranspose, chordDirected} from \"./chord.js\";\nexport {default as ribbon, ribbonArrow} from \"./ribbon.js\";\n", "export {default as contours} from \"./contours.js\";\nexport {default as contourDensity} from \"./density.js\";\n", "export {default as Delaunay} from \"./delaunay.js\";\nexport {default as Voronoi} from \"./voronoi.js\";\n", "export {default as dsvFormat} from \"./dsv.js\";\nexport {csvParse, csvParseRows, csvFormat, csvFormatBody, csvFormatRows, csvFormatRow, csvFormatValue} from \"./csv.js\";\nexport {tsvParse, tsvParseRows, tsvFormat, tsvFormatBody, tsvFormatRows, tsvFormatRow, tsvFormatValue} from \"./tsv.js\";\nexport {default as autoType} from \"./autoType.js\";\n", "export {default as blob} from \"./blob.js\";\nexport {default as buffer} from \"./buffer.js\";\nexport {default as dsv, csv, tsv} from \"./dsv.js\";\nexport {default as image} from \"./image.js\";\nexport {default as json} from \"./json.js\";\nexport {default as text} from \"./text.js\";\nexport {default as xml, html, svg} from \"./xml.js\";\n", "export {default as quadtree} from \"./quadtree.js\";\n", "export {default as forceCenter} from \"./center.js\";\nexport {default as forceCollide} from \"./collide.js\";\nexport {default as forceLink} from \"./link.js\";\nexport {default as forceManyBody} from \"./manyBody.js\";\nexport {default as forceRadial} from \"./radial.js\";\nexport {default as forceSimulation} from \"./simulation.js\";\nexport {default as forceX} from \"./x.js\";\nexport {default as forceY} from \"./y.js\";\n", "export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, \u00B1Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n", "export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n", "export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n", "// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n", "// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n", "import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n", "export default function(x) {\n return x;\n}\n", "import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"\u00B5\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"\u2212\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer \u201Cvalue\u201D part that can be\n // grouped, and fractional or exponential \u201Csuffix\u201D part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n", "import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n", "export {default as formatDefaultLocale, format, formatPrefix} from \"./defaultLocale.js\";\nexport {default as formatLocale} from \"./locale.js\";\nexport {default as formatSpecifier, FormatSpecifier} from \"./formatSpecifier.js\";\nexport {default as precisionFixed} from \"./precisionFixed.js\";\nexport {default as precisionPrefix} from \"./precisionPrefix.js\";\nexport {default as precisionRound} from \"./precisionRound.js\";\n", "export {default as geoArea} from \"./area.js\";\nexport {default as geoBounds} from \"./bounds.js\";\nexport {default as geoCentroid} from \"./centroid.js\";\nexport {default as geoCircle} from \"./circle.js\";\nexport {default as geoClipAntimeridian} from \"./clip/antimeridian.js\";\nexport {default as geoClipCircle} from \"./clip/circle.js\";\nexport {default as geoClipExtent} from \"./clip/extent.js\"; // DEPRECATED! Use d3.geoIdentity().clipExtent(\u2026).\nexport {default as geoClipRectangle} from \"./clip/rectangle.js\";\nexport {default as geoContains} from \"./contains.js\";\nexport {default as geoDistance} from \"./distance.js\";\nexport {default as geoGraticule, graticule10 as geoGraticule10} from \"./graticule.js\";\nexport {default as geoInterpolate} from \"./interpolate.js\";\nexport {default as geoLength} from \"./length.js\";\nexport {default as geoPath} from \"./path/index.js\";\nexport {default as geoAlbers} from \"./projection/albers.js\";\nexport {default as geoAlbersUsa} from \"./projection/albersUsa.js\";\nexport {default as geoAzimuthalEqualArea, azimuthalEqualAreaRaw as geoAzimuthalEqualAreaRaw} from \"./projection/azimuthalEqualArea.js\";\nexport {default as geoAzimuthalEquidistant, azimuthalEquidistantRaw as geoAzimuthalEquidistantRaw} from \"./projection/azimuthalEquidistant.js\";\nexport {default as geoConicConformal, conicConformalRaw as geoConicConformalRaw} from \"./projection/conicConformal.js\";\nexport {default as geoConicEqualArea, conicEqualAreaRaw as geoConicEqualAreaRaw} from \"./projection/conicEqualArea.js\";\nexport {default as geoConicEquidistant, conicEquidistantRaw as geoConicEquidistantRaw} from \"./projection/conicEquidistant.js\";\nexport {default as geoEqualEarth, equalEarthRaw as geoEqualEarthRaw} from \"./projection/equalEarth.js\";\nexport {default as geoEquirectangular, equirectangularRaw as geoEquirectangularRaw} from \"./projection/equirectangular.js\";\nexport {default as geoGnomonic, gnomonicRaw as geoGnomonicRaw} from \"./projection/gnomonic.js\";\nexport {default as geoIdentity} from \"./projection/identity.js\";\nexport {default as geoProjection, projectionMutator as geoProjectionMutator} from \"./projection/index.js\";\nexport {default as geoMercator, mercatorRaw as geoMercatorRaw} from \"./projection/mercator.js\";\nexport {default as geoNaturalEarth1, naturalEarth1Raw as geoNaturalEarth1Raw} from \"./projection/naturalEarth1.js\";\nexport {default as geoOrthographic, orthographicRaw as geoOrthographicRaw} from \"./projection/orthographic.js\";\nexport {default as geoStereographic, stereographicRaw as geoStereographicRaw} from \"./projection/stereographic.js\";\nexport {default as geoTransverseMercator, transverseMercatorRaw as geoTransverseMercatorRaw} from \"./projection/transverseMercator.js\";\nexport {default as geoRotation} from \"./rotation.js\";\nexport {default as geoStream} from \"./stream.js\";\nexport {default as geoTransform} from \"./transform.js\";\n", "function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n", "export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n", "export default function(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n", "export default function(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n", "export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n", "export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n", "export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n", "export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n", "export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n", "export default function() {\n return Array.from(this);\n}\n", "export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n", "export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don\u2019t include the root\u2019s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n", "export default function*() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n", "import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n", "export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n", "export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n", "export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n", "export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n", "export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n", "import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n", "import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n", "export {default as cluster} from \"./cluster.js\";\nexport {default as hierarchy, Node} from \"./hierarchy/index.js\";\nexport {default as pack} from \"./pack/index.js\";\nexport {default as packSiblings} from \"./pack/siblings.js\";\nexport {default as packEnclose} from \"./pack/enclose.js\";\nexport {default as partition} from \"./partition.js\";\nexport {default as stratify} from \"./stratify.js\";\nexport {default as tree} from \"./tree.js\";\nexport {default as treemap} from \"./treemap/index.js\";\nexport {default as treemapBinary} from \"./treemap/binary.js\";\nexport {default as treemapDice} from \"./treemap/dice.js\";\nexport {default as treemapSlice} from \"./treemap/slice.js\";\nexport {default as treemapSliceDice} from \"./treemap/sliceDice.js\";\nexport {default as treemapSquarify} from \"./treemap/squarify.js\";\nexport {default as treemapResquarify} from \"./treemap/resquarify.js\";\n", "export {default as polygonArea} from \"./area.js\";\nexport {default as polygonCentroid} from \"./centroid.js\";\nexport {default as polygonHull} from \"./hull.js\";\nexport {default as polygonContains} from \"./contains.js\";\nexport {default as polygonLength} from \"./length.js\";\n", "export {default as randomUniform} from \"./uniform.js\";\nexport {default as randomInt} from \"./int.js\";\nexport {default as randomNormal} from \"./normal.js\";\nexport {default as randomLogNormal} from \"./logNormal.js\";\nexport {default as randomBates} from \"./bates.js\";\nexport {default as randomIrwinHall} from \"./irwinHall.js\";\nexport {default as randomExponential} from \"./exponential.js\";\nexport {default as randomPareto} from \"./pareto.js\";\nexport {default as randomBernoulli} from \"./bernoulli.js\";\nexport {default as randomGeometric} from \"./geometric.js\";\nexport {default as randomBinomial} from \"./binomial.js\";\nexport {default as randomGamma} from \"./gamma.js\";\nexport {default as randomBeta} from \"./beta.js\";\nexport {default as randomWeibull} from \"./weibull.js\";\nexport {default as randomCauchy} from \"./cauchy.js\";\nexport {default as randomLogistic} from \"./logistic.js\";\nexport {default as randomPoisson} from \"./poisson.js\";\nexport {default as randomLcg} from \"./lcg.js\";\n", "export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n", "import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n", "import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n r0 = 0,\n r1 = 1,\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = r1 < r0,\n start = reverse ? r1 : r0,\n stop = reverse ? r0 : r1;\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n };\n\n scale.rangeRound = function(_) {\n return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band(domain(), [r0, r1])\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band.apply(null, arguments).paddingInner(1));\n}\n", "export default function constants(x) {\n return function() {\n return x;\n };\n}\n", "export default function number(x) {\n return +x;\n}\n", "import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n", "import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n", "import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n", "export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n", "const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n", "import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return timeInterval((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nexport const milliseconds = millisecond.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n return (end - start) / durationSecond;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n return timeInterval((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return timeInterval((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / durationWeek;\n });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n", "import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n", "import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport const utcYears = utcYear.range;\n", "import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = bisector(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n", "export {\n timeInterval\n} from \"./interval.js\";\n\nexport {\n millisecond as utcMillisecond,\n milliseconds as utcMilliseconds,\n millisecond as timeMillisecond,\n milliseconds as timeMilliseconds\n} from \"./millisecond.js\";\n\nexport {\n second as utcSecond,\n seconds as utcSeconds,\n second as timeSecond,\n seconds as timeSeconds\n} from \"./second.js\";\n\nexport {\n timeMinute,\n timeMinutes,\n utcMinute,\n utcMinutes\n} from \"./minute.js\";\n\nexport {\n timeHour,\n timeHours,\n utcHour,\n utcHours\n} from \"./hour.js\";\n\nexport {\n timeDay,\n timeDays,\n utcDay,\n utcDays,\n unixDay,\n unixDays\n} from \"./day.js\";\n\nexport {\n timeSunday as timeWeek,\n timeSundays as timeWeeks,\n timeSunday,\n timeSundays,\n timeMonday,\n timeMondays,\n timeTuesday,\n timeTuesdays,\n timeWednesday,\n timeWednesdays,\n timeThursday,\n timeThursdays,\n timeFriday,\n timeFridays,\n timeSaturday,\n timeSaturdays,\n utcSunday as utcWeek,\n utcSundays as utcWeeks,\n utcSunday,\n utcSundays,\n utcMonday,\n utcMondays,\n utcTuesday,\n utcTuesdays,\n utcWednesday,\n utcWednesdays,\n utcThursday,\n utcThursdays,\n utcFriday,\n utcFridays,\n utcSaturday,\n utcSaturdays\n} from \"./week.js\";\n\nexport {\n timeMonth,\n timeMonths,\n utcMonth,\n utcMonths\n} from \"./month.js\";\n\nexport {\n timeYear,\n timeYears,\n utcYear,\n utcYears\n} from \"./year.js\";\n\nexport {\n utcTicks,\n utcTickInterval,\n timeTicks,\n timeTickInterval\n} from \"./ticks.js\";\n", "import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n", "import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n", "export {default as timeFormatDefaultLocale, timeFormat, timeParse, utcFormat, utcParse} from \"./defaultLocale.js\";\nexport {default as timeFormatLocale} from \"./locale.js\";\nexport {default as isoFormat} from \"./isoFormat.js\";\nexport {default as isoParse} from \"./isoParse.js\";\n", "import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n", "export {\n default as scaleBand,\n point as scalePoint\n} from \"./band.js\";\n\nexport {\n default as scaleIdentity\n} from \"./identity.js\";\n\nexport {\n default as scaleLinear\n} from \"./linear.js\";\n\nexport {\n default as scaleLog\n} from \"./log.js\";\n\nexport {\n default as scaleSymlog\n} from \"./symlog.js\";\n\nexport {\n default as scaleOrdinal,\n implicit as scaleImplicit\n} from \"./ordinal.js\";\n\nexport {\n default as scalePow,\n sqrt as scaleSqrt\n} from \"./pow.js\";\n\nexport {\n default as scaleRadial\n} from \"./radial.js\";\n\nexport {\n default as scaleQuantile\n} from \"./quantile.js\";\n\nexport {\n default as scaleQuantize\n} from \"./quantize.js\";\n\nexport {\n default as scaleThreshold\n} from \"./threshold.js\";\n\nexport {\n default as scaleTime\n} from \"./time.js\";\n\nexport {\n default as scaleUtc\n} from \"./utcTime.js\";\n\nexport {\n default as scaleSequential,\n sequentialLog as scaleSequentialLog,\n sequentialPow as scaleSequentialPow,\n sequentialSqrt as scaleSequentialSqrt,\n sequentialSymlog as scaleSequentialSymlog\n} from \"./sequential.js\";\n\nexport {\n default as scaleSequentialQuantile\n} from \"./sequentialQuantile.js\";\n\nexport {\n default as scaleDiverging,\n divergingLog as scaleDivergingLog,\n divergingPow as scaleDivergingPow,\n divergingSqrt as scaleDivergingSqrt,\n divergingSymlog as scaleDivergingSymlog\n} from \"./diverging.js\";\n\nexport {\n default as tickFormat\n} from \"./tickFormat.js\";\n", "export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n", "import colors from \"../colors.js\";\n\nexport default colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\n", "export {default as schemeCategory10} from \"./categorical/category10.js\";\nexport {default as schemeAccent} from \"./categorical/Accent.js\";\nexport {default as schemeDark2} from \"./categorical/Dark2.js\";\nexport {default as schemeObservable10} from \"./categorical/observable10.js\";\nexport {default as schemePaired} from \"./categorical/Paired.js\";\nexport {default as schemePastel1} from \"./categorical/Pastel1.js\";\nexport {default as schemePastel2} from \"./categorical/Pastel2.js\";\nexport {default as schemeSet1} from \"./categorical/Set1.js\";\nexport {default as schemeSet2} from \"./categorical/Set2.js\";\nexport {default as schemeSet3} from \"./categorical/Set3.js\";\nexport {default as schemeTableau10} from \"./categorical/Tableau10.js\";\nexport {default as interpolateBrBG, scheme as schemeBrBG} from \"./diverging/BrBG.js\";\nexport {default as interpolatePRGn, scheme as schemePRGn} from \"./diverging/PRGn.js\";\nexport {default as interpolatePiYG, scheme as schemePiYG} from \"./diverging/PiYG.js\";\nexport {default as interpolatePuOr, scheme as schemePuOr} from \"./diverging/PuOr.js\";\nexport {default as interpolateRdBu, scheme as schemeRdBu} from \"./diverging/RdBu.js\";\nexport {default as interpolateRdGy, scheme as schemeRdGy} from \"./diverging/RdGy.js\";\nexport {default as interpolateRdYlBu, scheme as schemeRdYlBu} from \"./diverging/RdYlBu.js\";\nexport {default as interpolateRdYlGn, scheme as schemeRdYlGn} from \"./diverging/RdYlGn.js\";\nexport {default as interpolateSpectral, scheme as schemeSpectral} from \"./diverging/Spectral.js\";\nexport {default as interpolateBuGn, scheme as schemeBuGn} from \"./sequential-multi/BuGn.js\";\nexport {default as interpolateBuPu, scheme as schemeBuPu} from \"./sequential-multi/BuPu.js\";\nexport {default as interpolateGnBu, scheme as schemeGnBu} from \"./sequential-multi/GnBu.js\";\nexport {default as interpolateOrRd, scheme as schemeOrRd} from \"./sequential-multi/OrRd.js\";\nexport {default as interpolatePuBuGn, scheme as schemePuBuGn} from \"./sequential-multi/PuBuGn.js\";\nexport {default as interpolatePuBu, scheme as schemePuBu} from \"./sequential-multi/PuBu.js\";\nexport {default as interpolatePuRd, scheme as schemePuRd} from \"./sequential-multi/PuRd.js\";\nexport {default as interpolateRdPu, scheme as schemeRdPu} from \"./sequential-multi/RdPu.js\";\nexport {default as interpolateYlGnBu, scheme as schemeYlGnBu} from \"./sequential-multi/YlGnBu.js\";\nexport {default as interpolateYlGn, scheme as schemeYlGn} from \"./sequential-multi/YlGn.js\";\nexport {default as interpolateYlOrBr, scheme as schemeYlOrBr} from \"./sequential-multi/YlOrBr.js\";\nexport {default as interpolateYlOrRd, scheme as schemeYlOrRd} from \"./sequential-multi/YlOrRd.js\";\nexport {default as interpolateBlues, scheme as schemeBlues} from \"./sequential-single/Blues.js\";\nexport {default as interpolateGreens, scheme as schemeGreens} from \"./sequential-single/Greens.js\";\nexport {default as interpolateGreys, scheme as schemeGreys} from \"./sequential-single/Greys.js\";\nexport {default as interpolatePurples, scheme as schemePurples} from \"./sequential-single/Purples.js\";\nexport {default as interpolateReds, scheme as schemeReds} from \"./sequential-single/Reds.js\";\nexport {default as interpolateOranges, scheme as schemeOranges} from \"./sequential-single/Oranges.js\";\nexport {default as interpolateCividis} from \"./sequential-multi/cividis.js\";\nexport {default as interpolateCubehelixDefault} from \"./sequential-multi/cubehelix.js\";\nexport {default as interpolateRainbow, warm as interpolateWarm, cool as interpolateCool} from \"./sequential-multi/rainbow.js\";\nexport {default as interpolateSinebow} from \"./sequential-multi/sinebow.js\";\nexport {default as interpolateTurbo} from \"./sequential-multi/turbo.js\";\nexport {default as interpolateViridis, magma as interpolateMagma, inferno as interpolateInferno, plasma as interpolatePlasma} from \"./sequential-multi/viridis.js\";\n", "export default function(x) {\n return function constant() {\n return x;\n };\n}\n", "export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n", "import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n", "import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 \u2265 r0, da1 \u2265 da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it\u2019s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector\u2019s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it\u2019s a circular sector?\n // Or perhaps it\u2019s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector\u2019s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n", "export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n", "function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n", "export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n", "import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n", "export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n", "export default function(d) {\n return d;\n}\n", "import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = (data = array(data)).length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n", "import pointRadial from \"../pointRadial.js\";\n\nclass Bump {\n constructor(context, x) {\n this._context = context;\n this._x = x;\n }\n areaStart() {\n this._line = 0;\n }\n areaEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n }\n point(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: {\n this._point = 1;\n if (this._line) this._context.lineTo(x, y);\n else this._context.moveTo(x, y);\n break;\n }\n case 1: this._point = 2; // falls through\n default: {\n if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y);\n else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y);\n break;\n }\n }\n this._x0 = x, this._y0 = y;\n }\n}\n\nclass BumpRadial {\n constructor(context) {\n this._context = context;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {}\n point(x, y) {\n x = +x, y = +y;\n if (this._point === 0) {\n this._point = 1;\n } else {\n const p0 = pointRadial(this._x0, this._y0);\n const p1 = pointRadial(this._x0, this._y0 = (this._y0 + y) / 2);\n const p2 = pointRadial(x, this._y0);\n const p3 = pointRadial(x, y);\n this._context.moveTo(...p0);\n this._context.bezierCurveTo(...p1, ...p2, ...p3);\n }\n this._x0 = x, this._y0 = y;\n }\n}\n\nexport function bumpX(context) {\n return new Bump(context, true);\n}\n\nexport function bumpY(context) {\n return new Bump(context, false);\n}\n\nexport function bumpRadial(context) {\n return new BumpRadial(context);\n}\n", "export default function() {}\n", "export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // falls through\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n", "import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n", "import {point} from \"./basis.js\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n", "import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n", "export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n", "import noop from \"../noop.js\";\nimport {point} from \"./cardinal.js\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n", "import {point} from \"./cardinal.js\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n", "import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // falls through\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n", "import {CardinalClosed} from \"./cardinalClosed.js\";\nimport noop from \"../noop.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n", "import {CardinalOpen} from \"./cardinalOpen.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // falls through\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n", "import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n", "function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic B\u00E9zier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n", "function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n", "function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n", "export {default as arc} from \"./arc.js\";\nexport {default as area} from \"./area.js\";\nexport {default as line} from \"./line.js\";\nexport {default as pie} from \"./pie.js\";\nexport {default as areaRadial, default as radialArea} from \"./areaRadial.js\"; // Note: radialArea is deprecated!\nexport {default as lineRadial, default as radialLine} from \"./lineRadial.js\"; // Note: radialLine is deprecated!\nexport {default as pointRadial} from \"./pointRadial.js\";\nexport {link, linkHorizontal, linkVertical, linkRadial} from \"./link.js\";\n\nexport {default as symbol, symbolsStroke, symbolsFill, symbolsFill as symbols} from \"./symbol.js\";\nexport {default as symbolAsterisk} from \"./symbol/asterisk.js\";\nexport {default as symbolCircle} from \"./symbol/circle.js\";\nexport {default as symbolCross} from \"./symbol/cross.js\";\nexport {default as symbolDiamond} from \"./symbol/diamond.js\";\nexport {default as symbolDiamond2} from \"./symbol/diamond2.js\";\nexport {default as symbolPlus} from \"./symbol/plus.js\";\nexport {default as symbolSquare} from \"./symbol/square.js\";\nexport {default as symbolSquare2} from \"./symbol/square2.js\";\nexport {default as symbolStar} from \"./symbol/star.js\";\nexport {default as symbolTriangle} from \"./symbol/triangle.js\";\nexport {default as symbolTriangle2} from \"./symbol/triangle2.js\";\nexport {default as symbolWye} from \"./symbol/wye.js\";\nexport {default as symbolTimes, default as symbolX} from \"./symbol/times.js\";\n\nexport {default as curveBasisClosed} from \"./curve/basisClosed.js\";\nexport {default as curveBasisOpen} from \"./curve/basisOpen.js\";\nexport {default as curveBasis} from \"./curve/basis.js\";\nexport {bumpX as curveBumpX, bumpY as curveBumpY} from \"./curve/bump.js\";\nexport {default as curveBundle} from \"./curve/bundle.js\";\nexport {default as curveCardinalClosed} from \"./curve/cardinalClosed.js\";\nexport {default as curveCardinalOpen} from \"./curve/cardinalOpen.js\";\nexport {default as curveCardinal} from \"./curve/cardinal.js\";\nexport {default as curveCatmullRomClosed} from \"./curve/catmullRomClosed.js\";\nexport {default as curveCatmullRomOpen} from \"./curve/catmullRomOpen.js\";\nexport {default as curveCatmullRom} from \"./curve/catmullRom.js\";\nexport {default as curveLinearClosed} from \"./curve/linearClosed.js\";\nexport {default as curveLinear} from \"./curve/linear.js\";\nexport {monotoneX as curveMonotoneX, monotoneY as curveMonotoneY} from \"./curve/monotone.js\";\nexport {default as curveNatural} from \"./curve/natural.js\";\nexport {default as curveStep, stepAfter as curveStepAfter, stepBefore as curveStepBefore} from \"./curve/step.js\";\n\nexport {default as stack} from \"./stack.js\";\nexport {default as stackOffsetExpand} from \"./offset/expand.js\";\nexport {default as stackOffsetDiverging} from \"./offset/diverging.js\";\nexport {default as stackOffsetNone} from \"./offset/none.js\";\nexport {default as stackOffsetSilhouette} from \"./offset/silhouette.js\";\nexport {default as stackOffsetWiggle} from \"./offset/wiggle.js\";\nexport {default as stackOrderAppearance} from \"./order/appearance.js\";\nexport {default as stackOrderAscending} from \"./order/ascending.js\";\nexport {default as stackOrderDescending} from \"./order/descending.js\";\nexport {default as stackOrderInsideOut} from \"./order/insideOut.js\";\nexport {default as stackOrderNone} from \"./order/none.js\";\nexport {default as stackOrderReverse} from \"./order/reverse.js\";\n", "export default x => () => x;\n", "export default function ZoomEvent(type, {\n sourceEvent,\n target,\n transform,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n transform: {value: transform, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n", "export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n", "export function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n", "import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n var e = this;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n if (e.hasAttribute(\"viewBox\")) {\n e = e.viewBox.baseVal;\n return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n }\n return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n }\n return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\nexport default function() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = interpolateZoom,\n listeners = dispatch(\"start\", \"zoom\", \"end\"),\n touchstarting,\n touchfirst,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0,\n tapDistance = 10;\n\n function zoom(selection) {\n selection\n .property(\"__zoom\", defaultTransform)\n .on(\"wheel.zoom\", wheeled, {passive: false})\n .on(\"mousedown.zoom\", mousedowned)\n .on(\"dblclick.zoom\", dblclicked)\n .filter(touchable)\n .on(\"touchstart.zoom\", touchstarted)\n .on(\"touchmove.zoom\", touchmoved)\n .on(\"touchend.zoom touchcancel.zoom\", touchended)\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n zoom.transform = function(collection, transform, point, event) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property(\"__zoom\", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform, point, event);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .event(event)\n .start()\n .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k, p, event) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return k0 * k1;\n }, p, event);\n };\n\n zoom.scaleTo = function(selection, k, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n p1 = t0.invert(p0),\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n }, p, event);\n };\n\n zoom.translateBy = function(selection, x, y, event) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === \"function\" ? x.apply(this, arguments) : x,\n typeof y === \"function\" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n }, null, event);\n };\n\n zoom.translateTo = function(selection, x, y, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n typeof y === \"function\" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n }, p, event);\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, point, event) {\n transition\n .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n .tween(\"zoom\", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args).event(event),\n e = extent.apply(that, args),\n p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args, clean) {\n return (!clean && that.__zooming) || new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.active = 0;\n this.sourceEvent = null;\n this.extent = extent.apply(that, args);\n this.taps = 0;\n }\n\n Gesture.prototype = {\n event: function(event) {\n if (event) this.sourceEvent = event;\n return this;\n },\n start: function() {\n if (++this.active === 1) {\n this.that.__zooming = this;\n this.emit(\"start\");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit(\"zoom\");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n delete this.that.__zooming;\n this.emit(\"end\");\n }\n return this;\n },\n emit: function(type) {\n var d = select(this.that).datum();\n listeners.call(\n type,\n this.that,\n new ZoomEvent(type, {\n sourceEvent: this.sourceEvent,\n target: zoom,\n type,\n transform: this.that.__zoom,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function wheeled(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, args).event(event),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = pointer(event);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event won\u2019t trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n interrupt(this);\n g.start();\n }\n\n noevent(event);\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned(event, ...args) {\n if (touchending || !filter.apply(this, arguments)) return;\n var currentTarget = event.currentTarget,\n g = gesture(this, args, true).event(event),\n v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n p = pointer(event, currentTarget),\n x0 = event.clientX,\n y0 = event.clientY;\n\n dragDisable(event.view);\n nopropagation(event);\n g.mouse = [p, this.__zoom.invert(p)];\n interrupt(this);\n g.start();\n\n function mousemoved(event) {\n noevent(event);\n if (!g.moved) {\n var dx = event.clientX - x0, dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.event(event)\n .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped(event) {\n v.on(\"mousemove.zoom mouseup.zoom\", null);\n dragEnable(event.view, g.moved);\n noevent(event);\n g.event(event).end();\n }\n }\n\n function dblclicked(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n noevent(event);\n if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n else select(this).call(zoom.transform, t1, p0, event);\n }\n\n function touchstarted(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var touches = event.touches,\n n = touches.length,\n g = gesture(this, args, event.changedTouches.length === n).event(event),\n started, i, t, p;\n\n nopropagation(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n }\n\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n if (started) {\n if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n interrupt(this);\n g.start();\n }\n }\n\n function touchmoved(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t, p, l;\n\n noevent(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n\n g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t;\n\n nopropagation(event);\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else {\n g.end();\n // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (g.taps === 2) {\n t = pointer(t, this);\n if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n var p = select(this).on(\"dblclick.zoom\");\n if (p) p.apply(this, arguments);\n }\n }\n }\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n zoom.tapDistance = function(_) {\n return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n };\n\n return zoom;\n}\n", "export {default as zoom} from \"./zoom.js\";\nexport {default as zoomTransform, identity as zoomIdentity, Transform as ZoomTransform} from \"./transform.js\";\n", "export * from \"d3-array\";\nexport * from \"d3-axis\";\nexport * from \"d3-brush\";\nexport * from \"d3-chord\";\nexport * from \"d3-color\";\nexport * from \"d3-contour\";\nexport * from \"d3-delaunay\";\nexport * from \"d3-dispatch\";\nexport * from \"d3-drag\";\nexport * from \"d3-dsv\";\nexport * from \"d3-ease\";\nexport * from \"d3-fetch\";\nexport * from \"d3-force\";\nexport * from \"d3-format\";\nexport * from \"d3-geo\";\nexport * from \"d3-hierarchy\";\nexport * from \"d3-interpolate\";\nexport * from \"d3-path\";\nexport * from \"d3-polygon\";\nexport * from \"d3-quadtree\";\nexport * from \"d3-random\";\nexport * from \"d3-scale\";\nexport * from \"d3-scale-chromatic\";\nexport * from \"d3-selection\";\nexport * from \"d3-shape\";\nexport * from \"d3-time\";\nexport * from \"d3-time-format\";\nexport * from \"d3-timer\";\nexport * from \"d3-transition\";\nexport * from \"d3-zoom\";\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BLANK_URL = exports.relativeFirstCharacters = exports.whitespaceEscapeCharsRegex = exports.urlSchemeRegex = exports.ctrlCharactersRegex = exports.htmlCtrlEntityRegex = exports.htmlEntitiesRegex = exports.invalidProtocolRegex = void 0;\nexports.invalidProtocolRegex = /^([^\\w]*)(javascript|data|vbscript)/im;\nexports.htmlEntitiesRegex = /&#(\\w+)(^\\w|;)?/g;\nexports.htmlCtrlEntityRegex = /&(newline|tab);/gi;\nexports.ctrlCharactersRegex = /[\\u0000-\\u001F\\u007F-\\u009F\\u2000-\\u200D\\uFEFF]/gim;\nexports.urlSchemeRegex = /^.+(:|:)/gim;\nexports.whitespaceEscapeCharsRegex = /(\\\\|%5[cC])((%(6[eE]|72|74))|[nrt])/g;\nexports.relativeFirstCharacters = [\".\", \"/\"];\nexports.BLANK_URL = \"about:blank\";\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sanitizeUrl = void 0;\nvar constants_1 = require(\"./constants\");\nfunction isRelativeUrlWithoutProtocol(url) {\n return constants_1.relativeFirstCharacters.indexOf(url[0]) > -1;\n}\nfunction decodeHtmlCharacters(str) {\n var removedNullByte = str.replace(constants_1.ctrlCharactersRegex, \"\");\n return removedNullByte.replace(constants_1.htmlEntitiesRegex, function (match, dec) {\n return String.fromCharCode(dec);\n });\n}\nfunction isValidUrl(url) {\n return URL.canParse(url);\n}\nfunction decodeURI(uri) {\n try {\n return decodeURIComponent(uri);\n }\n catch (e) {\n // Ignoring error\n // It is possible that the URI contains a `%` not associated\n // with URI/URL-encoding.\n return uri;\n }\n}\nfunction sanitizeUrl(url) {\n if (!url) {\n return constants_1.BLANK_URL;\n }\n var charsToDecode;\n var decodedUrl = decodeURI(url.trim());\n do {\n decodedUrl = decodeHtmlCharacters(decodedUrl)\n .replace(constants_1.htmlCtrlEntityRegex, \"\")\n .replace(constants_1.ctrlCharactersRegex, \"\")\n .replace(constants_1.whitespaceEscapeCharsRegex, \"\")\n .trim();\n decodedUrl = decodeURI(decodedUrl);\n charsToDecode =\n decodedUrl.match(constants_1.ctrlCharactersRegex) ||\n decodedUrl.match(constants_1.htmlEntitiesRegex) ||\n decodedUrl.match(constants_1.htmlCtrlEntityRegex) ||\n decodedUrl.match(constants_1.whitespaceEscapeCharsRegex);\n } while (charsToDecode && charsToDecode.length > 0);\n var sanitizedUrl = decodedUrl;\n if (!sanitizedUrl) {\n return constants_1.BLANK_URL;\n }\n if (isRelativeUrlWithoutProtocol(sanitizedUrl)) {\n return sanitizedUrl;\n }\n // Remove any leading whitespace before checking the URL scheme\n var trimmedUrl = sanitizedUrl.trimStart();\n var urlSchemeParseResults = trimmedUrl.match(constants_1.urlSchemeRegex);\n if (!urlSchemeParseResults) {\n return sanitizedUrl;\n }\n var urlScheme = urlSchemeParseResults[0].toLowerCase().trim();\n if (constants_1.invalidProtocolRegex.test(urlScheme)) {\n return constants_1.BLANK_URL;\n }\n var backSanitized = trimmedUrl.replace(/\\\\/g, \"/\");\n // Handle special cases for mailto: and custom deep-link protocols\n if (urlScheme === \"mailto:\" || urlScheme.includes(\"://\")) {\n return backSanitized;\n }\n // For http and https URLs, perform additional validation\n if (urlScheme === \"http:\" || urlScheme === \"https:\") {\n if (!isValidUrl(backSanitized)) {\n return constants_1.BLANK_URL;\n }\n var url_1 = new URL(backSanitized);\n url_1.protocol = url_1.protocol.toLowerCase();\n url_1.hostname = url_1.hostname.toLowerCase();\n return url_1.toString();\n }\n return backSanitized;\n}\nexports.sanitizeUrl = sanitizeUrl;\n", "import { sanitizeUrl } from '@braintree/sanitize-url';\nimport type { SVG, SVGGroup } from '../../diagram-api/types.js';\nimport { lineBreakRegex } from './common.js';\nimport type {\n Bound,\n D3ImageElement,\n D3RectElement,\n D3TSpanElement,\n D3TextElement,\n D3UseElement,\n RectData,\n TextData,\n TextObject,\n} from './commonTypes.js';\n\nexport const drawRect = (element: SVG | SVGGroup, rectData: RectData): D3RectElement => {\n const rectElement: D3RectElement = element.append('rect');\n rectElement.attr('x', rectData.x);\n rectElement.attr('y', rectData.y);\n rectElement.attr('fill', rectData.fill);\n rectElement.attr('stroke', rectData.stroke);\n rectElement.attr('width', rectData.width);\n rectElement.attr('height', rectData.height);\n if (rectData.name) {\n rectElement.attr('name', rectData.name);\n }\n if (rectData.rx) {\n rectElement.attr('rx', rectData.rx);\n }\n if (rectData.ry) {\n rectElement.attr('ry', rectData.ry);\n }\n\n if (rectData.attrs !== undefined) {\n for (const attrKey in rectData.attrs) {\n rectElement.attr(attrKey, rectData.attrs[attrKey]);\n }\n }\n\n if (rectData.class) {\n rectElement.attr('class', rectData.class);\n }\n\n return rectElement;\n};\n\n/**\n * Draws a background rectangle\n *\n * @param element - Diagram (reference for bounds)\n * @param bounds - Shape of the rectangle\n */\nexport const drawBackgroundRect = (element: SVG | SVGGroup, bounds: Bound): void => {\n const rectData: RectData = {\n x: bounds.startx,\n y: bounds.starty,\n width: bounds.stopx - bounds.startx,\n height: bounds.stopy - bounds.starty,\n fill: bounds.fill,\n stroke: bounds.stroke,\n class: 'rect',\n };\n const rectElement: D3RectElement = drawRect(element, rectData);\n rectElement.lower();\n};\n\nexport const drawText = (element: SVG | SVGGroup, textData: TextData): D3TextElement => {\n const nText: string = textData.text.replace(lineBreakRegex, ' ');\n\n const textElem: D3TextElement = element.append('text');\n textElem.attr('x', textData.x);\n textElem.attr('y', textData.y);\n textElem.attr('class', 'legend');\n\n textElem.style('text-anchor', textData.anchor);\n if (textData.class) {\n textElem.attr('class', textData.class);\n }\n\n const tspan: D3TSpanElement = textElem.append('tspan');\n tspan.attr('x', textData.x + textData.textMargin * 2);\n tspan.text(nText);\n\n return textElem;\n};\n\nexport const drawImage = (elem: SVG | SVGGroup, x: number, y: number, link: string): void => {\n const imageElement: D3ImageElement = elem.append('image');\n imageElement.attr('x', x);\n imageElement.attr('y', y);\n const sanitizedLink: string = sanitizeUrl(link);\n imageElement.attr('xlink:href', sanitizedLink);\n};\n\nexport const drawEmbeddedImage = (\n element: SVG | SVGGroup,\n x: number,\n y: number,\n link: string\n): void => {\n const imageElement: D3UseElement = element.append('use');\n imageElement.attr('x', x);\n imageElement.attr('y', y);\n const sanitizedLink: string = sanitizeUrl(link);\n imageElement.attr('xlink:href', `#${sanitizedLink}`);\n};\n\nexport const getNoteRect = (): RectData => {\n const noteRectData: RectData = {\n x: 0,\n y: 0,\n width: 100,\n height: 100,\n fill: '#EDF2AE',\n stroke: '#666',\n anchor: 'start',\n rx: 0,\n ry: 0,\n };\n return noteRectData;\n};\n\nexport const getTextObj = (): TextObject => {\n const testObject: TextObject = {\n x: 0,\n y: 0,\n width: 100,\n height: 100,\n 'text-anchor': 'start',\n style: '#666',\n textMargin: 0,\n rx: 0,\n ry: 0,\n tspan: true,\n };\n return testObject;\n};\n", "import common from '../common/common.js';\nimport * as svgDrawCommon from '../common/svgDrawCommon.js';\nimport { sanitizeUrl } from '@braintree/sanitize-url';\n\nexport const drawRect = function (elem, rectData) {\n return svgDrawCommon.drawRect(elem, rectData);\n};\n\nexport const drawImage = function (elem, width, height, x, y, link) {\n const imageElem = elem.append('image');\n imageElem.attr('width', width);\n imageElem.attr('height', height);\n imageElem.attr('x', x);\n imageElem.attr('y', y);\n let sanitizedLink = link.startsWith('data:image/png;base64') ? link : sanitizeUrl(link);\n imageElem.attr('xlink:href', sanitizedLink);\n};\n\nexport const drawRels = (elem, rels, conf) => {\n const relsElem = elem.append('g');\n let i = 0;\n for (let rel of rels) {\n let textColor = rel.textColor ? rel.textColor : '#444444';\n let strokeColor = rel.lineColor ? rel.lineColor : '#444444';\n let offsetX = rel.offsetX ? parseInt(rel.offsetX) : 0;\n let offsetY = rel.offsetY ? parseInt(rel.offsetY) : 0;\n\n let url = '';\n if (i === 0) {\n let line = relsElem.append('line');\n line.attr('x1', rel.startPoint.x);\n line.attr('y1', rel.startPoint.y);\n line.attr('x2', rel.endPoint.x);\n line.attr('y2', rel.endPoint.y);\n\n line.attr('stroke-width', '1');\n line.attr('stroke', strokeColor);\n line.style('fill', 'none');\n if (rel.type !== 'rel_b') {\n line.attr('marker-end', 'url(' + url + '#arrowhead)');\n }\n if (rel.type === 'birel' || rel.type === 'rel_b') {\n line.attr('marker-start', 'url(' + url + '#arrowend)');\n }\n i = -1;\n } else {\n let line = relsElem.append('path');\n line\n .attr('fill', 'none')\n .attr('stroke-width', '1')\n .attr('stroke', strokeColor)\n .attr(\n 'd',\n 'Mstartx,starty Qcontrolx,controly stopx,stopy '\n .replaceAll('startx', rel.startPoint.x)\n .replaceAll('starty', rel.startPoint.y)\n .replaceAll(\n 'controlx',\n rel.startPoint.x +\n (rel.endPoint.x - rel.startPoint.x) / 2 -\n (rel.endPoint.x - rel.startPoint.x) / 4\n )\n .replaceAll('controly', rel.startPoint.y + (rel.endPoint.y - rel.startPoint.y) / 2)\n .replaceAll('stopx', rel.endPoint.x)\n .replaceAll('stopy', rel.endPoint.y)\n );\n if (rel.type !== 'rel_b') {\n line.attr('marker-end', 'url(' + url + '#arrowhead)');\n }\n if (rel.type === 'birel' || rel.type === 'rel_b') {\n line.attr('marker-start', 'url(' + url + '#arrowend)');\n }\n }\n\n let messageConf = conf.messageFont();\n _drawTextCandidateFunc(conf)(\n rel.label.text,\n relsElem,\n Math.min(rel.startPoint.x, rel.endPoint.x) +\n Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 +\n offsetX,\n Math.min(rel.startPoint.y, rel.endPoint.y) +\n Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 +\n offsetY,\n rel.label.width,\n rel.label.height,\n { fill: textColor },\n messageConf\n );\n\n if (rel.techn && rel.techn.text !== '') {\n messageConf = conf.messageFont();\n _drawTextCandidateFunc(conf)(\n '[' + rel.techn.text + ']',\n relsElem,\n Math.min(rel.startPoint.x, rel.endPoint.x) +\n Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 +\n offsetX,\n Math.min(rel.startPoint.y, rel.endPoint.y) +\n Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 +\n conf.messageFontSize +\n 5 +\n offsetY,\n Math.max(rel.label.width, rel.techn.width),\n rel.techn.height,\n { fill: textColor, 'font-style': 'italic' },\n messageConf\n );\n }\n }\n};\n\n/**\n * Draws a boundary in the diagram\n *\n * @param {any} elem - The diagram we'll draw to.\n * @param {any} boundary - The boundary to draw.\n * @param {any} conf - DrawText implementation discriminator object\n */\nconst drawBoundary = function (elem, boundary, conf) {\n const boundaryElem = elem.append('g');\n\n let fillColor = boundary.bgColor ? boundary.bgColor : 'none';\n let strokeColor = boundary.borderColor ? boundary.borderColor : '#444444';\n let fontColor = boundary.fontColor ? boundary.fontColor : 'black';\n\n let attrsValue = { 'stroke-width': 1.0, 'stroke-dasharray': '7.0,7.0' };\n if (boundary.nodeType) {\n attrsValue = { 'stroke-width': 1.0 };\n }\n let rectData = {\n x: boundary.x,\n y: boundary.y,\n fill: fillColor,\n stroke: strokeColor,\n width: boundary.width,\n height: boundary.height,\n rx: 2.5,\n ry: 2.5,\n attrs: attrsValue,\n };\n\n drawRect(boundaryElem, rectData);\n\n // draw label\n let boundaryConf = conf.boundaryFont();\n boundaryConf.fontWeight = 'bold';\n boundaryConf.fontSize = boundaryConf.fontSize + 2;\n boundaryConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf)(\n boundary.label.text,\n boundaryElem,\n boundary.x,\n boundary.y + boundary.label.Y,\n boundary.width,\n boundary.height,\n { fill: '#444444' },\n boundaryConf\n );\n\n // draw type\n if (boundary.type && boundary.type.text !== '') {\n boundaryConf = conf.boundaryFont();\n boundaryConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf)(\n boundary.type.text,\n boundaryElem,\n boundary.x,\n boundary.y + boundary.type.Y,\n boundary.width,\n boundary.height,\n { fill: '#444444' },\n boundaryConf\n );\n }\n\n // draw descr\n if (boundary.descr && boundary.descr.text !== '') {\n boundaryConf = conf.boundaryFont();\n boundaryConf.fontSize = boundaryConf.fontSize - 2;\n boundaryConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf)(\n boundary.descr.text,\n boundaryElem,\n boundary.x,\n boundary.y + boundary.descr.Y,\n boundary.width,\n boundary.height,\n { fill: '#444444' },\n boundaryConf\n );\n }\n};\n\nexport const drawC4Shape = function (elem, c4Shape, conf) {\n let fillColor = c4Shape.bgColor ? c4Shape.bgColor : conf[c4Shape.typeC4Shape.text + '_bg_color'];\n let strokeColor = c4Shape.borderColor\n ? c4Shape.borderColor\n : conf[c4Shape.typeC4Shape.text + '_border_color'];\n let fontColor = c4Shape.fontColor ? c4Shape.fontColor : '#FFFFFF';\n\n let personImg =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=';\n switch (c4Shape.typeC4Shape.text) {\n case 'person':\n personImg =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=';\n break;\n case 'external_person':\n personImg =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=';\n break;\n }\n\n const c4ShapeElem = elem.append('g');\n c4ShapeElem.attr('class', 'person-man');\n\n // \n // draw rect of c4Shape\n const rect = svgDrawCommon.getNoteRect();\n\n switch (c4Shape.typeC4Shape.text) {\n case 'person':\n case 'external_person':\n case 'system':\n case 'external_system':\n case 'container':\n case 'external_container':\n case 'component':\n case 'external_component':\n rect.x = c4Shape.x;\n rect.y = c4Shape.y;\n rect.fill = fillColor;\n rect.width = c4Shape.width;\n rect.height = c4Shape.height;\n rect.stroke = strokeColor;\n rect.rx = 2.5;\n rect.ry = 2.5;\n rect.attrs = { 'stroke-width': 0.5 };\n drawRect(c4ShapeElem, rect);\n break;\n case 'system_db':\n case 'external_system_db':\n case 'container_db':\n case 'external_container_db':\n case 'component_db':\n case 'external_component_db':\n c4ShapeElem\n .append('path')\n .attr('fill', fillColor)\n .attr('stroke-width', '0.5')\n .attr('stroke', strokeColor)\n .attr(\n 'd',\n 'Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height'\n .replaceAll('startx', c4Shape.x)\n .replaceAll('starty', c4Shape.y)\n .replaceAll('half', c4Shape.width / 2)\n .replaceAll('height', c4Shape.height)\n );\n c4ShapeElem\n .append('path')\n .attr('fill', 'none')\n .attr('stroke-width', '0.5')\n .attr('stroke', strokeColor)\n .attr(\n 'd',\n 'Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10'\n .replaceAll('startx', c4Shape.x)\n .replaceAll('starty', c4Shape.y)\n .replaceAll('half', c4Shape.width / 2)\n );\n break;\n case 'system_queue':\n case 'external_system_queue':\n case 'container_queue':\n case 'external_container_queue':\n case 'component_queue':\n case 'external_component_queue':\n c4ShapeElem\n .append('path')\n .attr('fill', fillColor)\n .attr('stroke-width', '0.5')\n .attr('stroke', strokeColor)\n .attr(\n 'd',\n 'Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half'\n .replaceAll('startx', c4Shape.x)\n .replaceAll('starty', c4Shape.y)\n .replaceAll('width', c4Shape.width)\n .replaceAll('half', c4Shape.height / 2)\n );\n c4ShapeElem\n .append('path')\n .attr('fill', 'none')\n .attr('stroke-width', '0.5')\n .attr('stroke', strokeColor)\n .attr(\n 'd',\n 'Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half'\n .replaceAll('startx', c4Shape.x + c4Shape.width)\n .replaceAll('starty', c4Shape.y)\n .replaceAll('half', c4Shape.height / 2)\n );\n break;\n }\n\n // draw type of c4Shape\n let c4ShapeFontConf = getC4ShapeFont(conf, c4Shape.typeC4Shape.text);\n c4ShapeElem\n .append('text')\n .attr('fill', fontColor)\n .attr('font-family', c4ShapeFontConf.fontFamily)\n .attr('font-size', c4ShapeFontConf.fontSize - 2)\n .attr('font-style', 'italic')\n .attr('lengthAdjust', 'spacing')\n .attr('textLength', c4Shape.typeC4Shape.width)\n .attr('x', c4Shape.x + c4Shape.width / 2 - c4Shape.typeC4Shape.width / 2)\n .attr('y', c4Shape.y + c4Shape.typeC4Shape.Y)\n .text('<<' + c4Shape.typeC4Shape.text + '>>');\n\n // draw image/sprite\n switch (c4Shape.typeC4Shape.text) {\n case 'person':\n case 'external_person':\n drawImage(\n c4ShapeElem,\n 48,\n 48,\n c4Shape.x + c4Shape.width / 2 - 24,\n c4Shape.y + c4Shape.image.Y,\n personImg\n );\n break;\n }\n\n // draw label\n let textFontConf = conf[c4Shape.typeC4Shape.text + 'Font']();\n textFontConf.fontWeight = 'bold';\n textFontConf.fontSize = textFontConf.fontSize + 2;\n textFontConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf)(\n c4Shape.label.text,\n c4ShapeElem,\n c4Shape.x,\n c4Shape.y + c4Shape.label.Y,\n c4Shape.width,\n c4Shape.height,\n { fill: fontColor },\n textFontConf\n );\n\n // draw techn/type\n textFontConf = conf[c4Shape.typeC4Shape.text + 'Font']();\n textFontConf.fontColor = fontColor;\n\n if (c4Shape.techn && c4Shape.techn?.text !== '') {\n _drawTextCandidateFunc(conf)(\n c4Shape.techn.text,\n c4ShapeElem,\n c4Shape.x,\n c4Shape.y + c4Shape.techn.Y,\n c4Shape.width,\n c4Shape.height,\n { fill: fontColor, 'font-style': 'italic' },\n textFontConf\n );\n } else if (c4Shape.type && c4Shape.type.text !== '') {\n _drawTextCandidateFunc(conf)(\n c4Shape.type.text,\n c4ShapeElem,\n c4Shape.x,\n c4Shape.y + c4Shape.type.Y,\n c4Shape.width,\n c4Shape.height,\n { fill: fontColor, 'font-style': 'italic' },\n textFontConf\n );\n }\n\n // draw descr\n if (c4Shape.descr && c4Shape.descr.text !== '') {\n textFontConf = conf.personFont();\n textFontConf.fontColor = fontColor;\n _drawTextCandidateFunc(conf)(\n c4Shape.descr.text,\n c4ShapeElem,\n c4Shape.x,\n c4Shape.y + c4Shape.descr.Y,\n c4Shape.width,\n c4Shape.height,\n { fill: fontColor },\n textFontConf\n );\n }\n\n return c4Shape.height;\n};\n\nexport const insertDatabaseIcon = function (elem) {\n elem\n .append('defs')\n .append('symbol')\n .attr('id', 'database')\n .attr('fill-rule', 'evenodd')\n .attr('clip-rule', 'evenodd')\n .append('path')\n .attr('transform', 'scale(.5)')\n .attr(\n 'd',\n 'M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z'\n );\n};\n\nexport const insertComputerIcon = function (elem) {\n elem\n .append('defs')\n .append('symbol')\n .attr('id', 'computer')\n .attr('width', '24')\n .attr('height', '24')\n .append('path')\n .attr('transform', 'scale(.5)')\n .attr(\n 'd',\n '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'\n );\n};\n\nexport const insertClockIcon = function (elem) {\n elem\n .append('defs')\n .append('symbol')\n .attr('id', 'clock')\n .attr('width', '24')\n .attr('height', '24')\n .append('path')\n .attr('transform', 'scale(.5)')\n .attr(\n 'd',\n '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'\n );\n};\n\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n *\n * @param elem\n */\nexport const insertArrowHead = function (elem) {\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'arrowhead')\n .attr('refX', 9)\n .attr('refY', 5)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 12)\n .attr('markerHeight', 12)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 0 0 L 10 5 L 0 10 z'); // this is actual shape for arrowhead\n};\n\nexport const insertArrowEnd = function (elem) {\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'arrowend')\n .attr('refX', 1)\n .attr('refY', 5)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 12)\n .attr('markerHeight', 12)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 10 0 L 0 5 L 10 10 z'); // this is actual shape for arrowhead\n};\n\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n *\n * @param {any} elem\n */\nexport const insertArrowFilledHead = function (elem) {\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'filled-head')\n .attr('refX', 18)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L14,7 L9,1 Z');\n};\n\n/**\n * Setup node number. The result is appended to the svg.\n *\n * @param {any} elem\n */\nexport const insertDynamicNumber = function (elem) {\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'sequencenumber')\n .attr('refX', 15)\n .attr('refY', 15)\n .attr('markerWidth', 60)\n .attr('markerHeight', 40)\n .attr('orient', 'auto')\n .append('circle')\n .attr('cx', 15)\n .attr('cy', 15)\n .attr('r', 6);\n // .style(\"fill\", '#f00');\n};\n\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n *\n * @param {any} elem\n */\nexport const insertArrowCrossHead = function (elem) {\n const defs = elem.append('defs');\n const marker = defs\n .append('marker')\n .attr('id', 'crosshead')\n .attr('markerWidth', 15)\n .attr('markerHeight', 8)\n .attr('orient', 'auto')\n .attr('refX', 16)\n .attr('refY', 4);\n\n // The arrow\n marker\n .append('path')\n .attr('fill', 'black')\n .attr('stroke', '#000000')\n .style('stroke-dasharray', '0, 0')\n .attr('stroke-width', '1px')\n .attr('d', 'M 9,2 V 6 L16,4 Z');\n\n // The cross\n marker\n .append('path')\n .attr('fill', 'none')\n .attr('stroke', '#000000')\n .style('stroke-dasharray', '0, 0')\n .attr('stroke-width', '1px')\n .attr('d', 'M 0,1 L 6,7 M 6,1 L 0,7');\n // this is actual shape for arrowhead\n};\n\nconst getC4ShapeFont = (cnf, typeC4Shape) => {\n return {\n fontFamily: cnf[typeC4Shape + 'FontFamily'],\n fontSize: cnf[typeC4Shape + 'FontSize'],\n fontWeight: cnf[typeC4Shape + 'FontWeight'],\n };\n};\n\nconst _drawTextCandidateFunc = (function () {\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n */\n function byText(content, g, x, y, width, height, textAttrs) {\n const text = g\n .append('text')\n .attr('x', x + width / 2)\n .attr('y', y + height / 2 + 5)\n .style('text-anchor', 'middle')\n .text(content);\n _setTextAttrs(text, textAttrs);\n }\n\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n * @param {any} conf\n */\n function byTspan(content, g, x, y, width, height, textAttrs, conf) {\n const { fontSize, fontFamily, fontWeight } = conf;\n\n const lines = content.split(common.lineBreakRegex);\n for (let i = 0; i < lines.length; i++) {\n const dy = i * fontSize - (fontSize * (lines.length - 1)) / 2;\n const text = g\n .append('text')\n .attr('x', x + width / 2)\n .attr('y', y)\n .style('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .style('font-size', fontSize)\n .style('font-weight', fontWeight)\n .style('font-family', fontFamily);\n text\n .append('tspan')\n // .attr('x', x + width / 2)\n .attr('dy', dy)\n .text(lines[i])\n // .attr('y', y + height / 2)\n .attr('alignment-baseline', 'mathematical');\n\n _setTextAttrs(text, textAttrs);\n }\n }\n\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n * @param {any} conf\n */\n function byFo(content, g, x, y, width, height, textAttrs, conf) {\n const s = g.append('switch');\n const f = s\n .append('foreignObject')\n .attr('x', x)\n .attr('y', y)\n .attr('width', width)\n .attr('height', height);\n\n const text = f\n .append('xhtml:div')\n .style('display', 'table')\n .style('height', '100%')\n .style('width', '100%');\n\n text\n .append('div')\n .style('display', 'table-cell')\n .style('text-align', 'center')\n .style('vertical-align', 'middle')\n .text(content);\n\n byTspan(content, s, x, y, width, height, textAttrs, conf);\n _setTextAttrs(text, textAttrs);\n }\n\n /**\n * @param {any} toText\n * @param {any} fromTextAttrsDict\n */\n function _setTextAttrs(toText, fromTextAttrsDict) {\n for (const key in fromTextAttrsDict) {\n if (fromTextAttrsDict.hasOwnProperty(key)) {\n toText.attr(key, fromTextAttrsDict[key]);\n }\n }\n }\n\n return function (conf) {\n return conf.textPlacement === 'fo' ? byFo : conf.textPlacement === 'old' ? byText : byTspan;\n };\n})();\n\nexport default {\n drawRect,\n drawBoundary,\n drawC4Shape,\n drawRels,\n drawImage,\n insertArrowHead,\n insertArrowEnd,\n insertArrowFilledHead,\n insertDynamicNumber,\n insertArrowCrossHead,\n insertDatabaseIcon,\n insertComputerIcon,\n insertClockIcon,\n};\n\n// cspell:ignoreRegExp /'Mstartx.*/g\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n", "import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n", "import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n", "import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n", "import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n", "/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n", "import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n", "import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n", "import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n", "/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n", "import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n", "/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n", "import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n", "import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n", "import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n", "/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n", "import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n", "import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n", "import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n", "import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n", "/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n", "/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n", "import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n", "import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n", "import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n", "/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n", "import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n", "import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n", "import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n", "import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n", "import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n", "import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n", "import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n", "import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n", "/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n", "/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n", "/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n", "import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n", "import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n", "import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n", "import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n", "import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignMergeValue;\n", "/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n", "import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n", "import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n", "import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n", "import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n", "import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n", "/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nexport default copyArray;\n", "import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n", "/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n", "import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n", "import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n", "import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n", "import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n", "/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n", "import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n", "import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n", "/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n", "import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n", "import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n", "import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n", "/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n", "import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n", "import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n", "/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nexport default safeGet;\n", "import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n", "import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n", "/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n", "import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n", "/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n", "import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n", "import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n", "import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n", "import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n", "import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nexport default baseMerge;\n", "/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n", "/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n", "import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n", "/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n", "import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n", "/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n", "import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n", "import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n", "import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n", "import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nexport default createAssigner;\n", "import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n", "import { sanitizeUrl } from '@braintree/sanitize-url';\nimport type { BaseType, CurveFactory } from 'd3';\nimport {\n curveBasis,\n curveBasisClosed,\n curveBasisOpen,\n curveBumpX,\n curveBumpY,\n curveBundle,\n curveCardinalClosed,\n curveCardinalOpen,\n curveCardinal,\n curveCatmullRomClosed,\n curveCatmullRomOpen,\n curveCatmullRom,\n curveLinear,\n curveLinearClosed,\n curveMonotoneX,\n curveMonotoneY,\n curveNatural,\n curveStep,\n curveStepAfter,\n curveStepBefore,\n select,\n} from 'd3';\nimport common from './diagrams/common/common.js';\nimport { sanitizeDirective } from './utils/sanitizeDirective.js';\nimport { log } from './logger.js';\nimport { detectType } from './diagram-api/detectType.js';\nimport assignWithDepth from './assignWithDepth.js';\nimport type { MermaidConfig } from './config.type.js';\nimport memoize from 'lodash-es/memoize.js';\nimport merge from 'lodash-es/merge.js';\nimport { directiveRegex } from './diagram-api/regexes.js';\nimport type { D3Element, Point, TextDimensionConfig, TextDimensions } from './types.js';\n\nexport const ZERO_WIDTH_SPACE = '\\u200b';\n\n// Effectively an enum of the supported curve types, accessible by name\nconst d3CurveTypes = {\n curveBasis: curveBasis,\n curveBasisClosed: curveBasisClosed,\n curveBasisOpen: curveBasisOpen,\n curveBumpX: curveBumpX,\n curveBumpY: curveBumpY,\n curveBundle: curveBundle,\n curveCardinalClosed: curveCardinalClosed,\n curveCardinalOpen: curveCardinalOpen,\n curveCardinal: curveCardinal,\n curveCatmullRomClosed: curveCatmullRomClosed,\n curveCatmullRomOpen: curveCatmullRomOpen,\n curveCatmullRom: curveCatmullRom,\n curveLinear: curveLinear,\n curveLinearClosed: curveLinearClosed,\n curveMonotoneX: curveMonotoneX,\n curveMonotoneY: curveMonotoneY,\n curveNatural: curveNatural,\n curveStep: curveStep,\n curveStepAfter: curveStepAfter,\n curveStepBefore: curveStepBefore,\n} as const;\n\nconst directiveWithoutOpen =\n /\\s*(?:(\\w+)(?=:):|(\\w+))\\s*(?:(\\w+)|((?:(?!}%{2}).|\\r?\\n)*))?\\s*(?:}%{2})?/gi;\n/**\n * Detects the init config object from the text\n *\n * @param text - The text defining the graph. For example:\n *\n * ```mermaid\n * %%{init: {\"theme\": \"debug\", \"logLevel\": 1 }}%%\n * graph LR\n * a-->b\n * b-->c\n * c-->d\n * d-->e\n * e-->f\n * f-->g\n * g-->h\n * ```\n *\n * Or\n *\n * ```mermaid\n * %%{initialize: {\"theme\": \"dark\", logLevel: \"debug\" }}%%\n * graph LR\n * a-->b\n * b-->c\n * c-->d\n * d-->e\n * e-->f\n * f-->g\n * g-->h\n * ```\n *\n * @param config - Optional mermaid configuration object.\n * @returns The json object representing the init passed to mermaid.initialize()\n */\nexport const detectInit = function (\n text: string,\n config?: MermaidConfig\n): MermaidConfig | undefined {\n const inits = detectDirective(text, /(?:init\\b)|(?:initialize\\b)/);\n let results: MermaidConfig & { config?: unknown } = {};\n\n if (Array.isArray(inits)) {\n const args = inits.map((init) => init.args);\n sanitizeDirective(args);\n results = assignWithDepth(results, [...args]);\n } else {\n results = inits.args as MermaidConfig;\n }\n\n if (!results) {\n return;\n }\n\n let type = detectType(text, config);\n\n // Move the `config` value to appropriate diagram type value\n const prop = 'config';\n if (results[prop] !== undefined) {\n if (type === 'flowchart-v2') {\n type = 'flowchart';\n }\n results[type as keyof MermaidConfig] = results[prop];\n delete results[prop];\n }\n\n return results;\n};\n\ninterface Directive {\n type?: string;\n args?: unknown;\n}\n/**\n * Detects the directive from the text.\n *\n * Text can be single line or multiline. If type is null or omitted,\n * the first directive encountered in text will be returned\n *\n * ```mermaid\n * graph LR\n * %%{someDirective}%%\n * a-->b\n * b-->c\n * c-->d\n * d-->e\n * e-->f\n * f-->g\n * g-->h\n * ```\n *\n * @param text - The text defining the graph\n * @param type - The directive to return (default: `null`)\n * @returns An object or Array representing the directive(s) matched by the input type.\n * If a single directive was found, that directive object will be returned.\n */\nexport const detectDirective = function (\n text: string,\n type: string | RegExp | null = null\n): Directive | Directive[] {\n try {\n const commentWithoutDirectives = new RegExp(\n `[%]{2}(?![{]${directiveWithoutOpen.source})(?=[}][%]{2}).*\\n`,\n 'ig'\n );\n text = text.trim().replace(commentWithoutDirectives, '').replace(/'/gm, '\"');\n log.debug(\n `Detecting diagram directive${type !== null ? ' type:' + type : ''} based on the text:${text}`\n );\n let match: RegExpExecArray | null;\n const result: Directive[] = [];\n while ((match = directiveRegex.exec(text)) !== null) {\n // This is necessary to avoid infinite loops with zero-width matches\n if (match.index === directiveRegex.lastIndex) {\n directiveRegex.lastIndex++;\n }\n if ((match && !type) || (type && match[1]?.match(type)) || (type && match[2]?.match(type))) {\n const type = match[1] ? match[1] : match[2];\n const args = match[3] ? match[3].trim() : match[4] ? JSON.parse(match[4].trim()) : null;\n result.push({ type, args });\n }\n }\n if (result.length === 0) {\n return { type: text, args: null };\n }\n\n return result.length === 1 ? result[0] : result;\n } catch (error) {\n log.error(\n `ERROR: ${\n (error as Error).message\n } - Unable to parse directive type: '${type}' based on the text: '${text}'`\n );\n return { type: undefined, args: null };\n }\n};\n\nexport const removeDirectives = function (text: string): string {\n return text.replace(directiveRegex, '');\n};\n\n/**\n * Detects whether a substring in present in a given array\n *\n * @param str - The substring to detect\n * @param arr - The array to search\n * @returns The array index containing the substring or -1 if not present\n */\nexport const isSubstringInArray = function (str: string, arr: string[]): number {\n for (const [i, element] of arr.entries()) {\n if (element.match(str)) {\n return i;\n }\n }\n return -1;\n};\n\n/**\n * Returns a d3 curve given a curve name\n *\n * @param interpolate - The interpolation name\n * @param defaultCurve - The default curve to return\n * @returns The curve factory to use\n */\nexport function interpolateToCurve(\n interpolate: string | undefined,\n defaultCurve: CurveFactory\n): CurveFactory {\n if (!interpolate) {\n return defaultCurve;\n }\n const curveName = `curve${interpolate.charAt(0).toUpperCase() + interpolate.slice(1)}`;\n\n // @ts-ignore TODO: Fix issue with curve type\n return d3CurveTypes[curveName as keyof typeof d3CurveTypes] ?? defaultCurve;\n}\n\n/**\n * Formats a URL string\n *\n * @param linkStr - String of the URL\n * @param config - Configuration passed to MermaidJS\n * @returns The formatted URL or `undefined`.\n */\nexport function formatUrl(linkStr: string, config: MermaidConfig): string | undefined {\n const url = linkStr.trim();\n\n if (!url) {\n return undefined;\n }\n\n if (config.securityLevel !== 'loose') {\n return sanitizeUrl(url);\n }\n\n return url;\n}\n\n/**\n * Runs a function\n *\n * @param functionName - A dot separated path to the function relative to the `window`\n * @param params - Parameters to pass to the function\n */\nexport const runFunc = (functionName: string, ...params: unknown[]) => {\n const arrPaths = functionName.split('.');\n\n const len = arrPaths.length - 1;\n const fnName = arrPaths[len];\n\n let obj = window;\n for (let i = 0; i < len; i++) {\n obj = obj[arrPaths[i] as keyof typeof obj];\n if (!obj) {\n log.error(`Function name: ${functionName} not found in window`);\n return;\n }\n }\n\n obj[fnName as keyof typeof obj](...params);\n};\n\n/**\n * Finds the distance between two points using the Distance Formula\n *\n * @param p1 - The first point\n * @param p2 - The second point\n * @returns The distance between the two points.\n */\nfunction distance(p1?: Point, p2?: Point): number {\n if (!p1 || !p2) {\n return 0;\n }\n return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));\n}\n\n/**\n * TODO: Give this a description\n *\n * @param points - List of points\n */\nfunction traverseEdge(points: Point[]): Point {\n let prevPoint: Point | undefined;\n let totalDistance = 0;\n\n points.forEach((point) => {\n totalDistance += distance(point, prevPoint);\n prevPoint = point;\n });\n\n // Traverse half of total distance along points\n const remainingDistance = totalDistance / 2;\n return calculatePoint(points, remainingDistance);\n}\n\n/**\n * {@inheritdoc traverseEdge}\n */\nfunction calcLabelPosition(points: Point[]): Point {\n if (points.length === 1) {\n return points[0];\n }\n return traverseEdge(points);\n}\n\nexport const roundNumber = (num: number, precision = 2) => {\n const factor = Math.pow(10, precision);\n return Math.round(num * factor) / factor;\n};\n\nexport const calculatePoint = (points: Point[], distanceToTraverse: number): Point => {\n let prevPoint: Point | undefined = undefined;\n let remainingDistance = distanceToTraverse;\n for (const point of points) {\n if (prevPoint) {\n const vectorDistance = distance(point, prevPoint);\n if (vectorDistance === 0) {\n return prevPoint;\n }\n if (vectorDistance < remainingDistance) {\n remainingDistance -= vectorDistance;\n } else {\n // The point is remainingDistance from prevPoint in the vector between prevPoint and point\n // Calculate the coordinates\n const distanceRatio = remainingDistance / vectorDistance;\n if (distanceRatio <= 0) {\n return prevPoint;\n }\n if (distanceRatio >= 1) {\n return { x: point.x, y: point.y };\n }\n if (distanceRatio > 0 && distanceRatio < 1) {\n return {\n x: roundNumber((1 - distanceRatio) * prevPoint.x + distanceRatio * point.x, 5),\n y: roundNumber((1 - distanceRatio) * prevPoint.y + distanceRatio * point.y, 5),\n };\n }\n }\n }\n prevPoint = point;\n }\n throw new Error('Could not find a suitable point for the given distance');\n};\n\nconst calcCardinalityPosition = (\n isRelationTypePresent: boolean,\n points: Point[],\n initialPosition: Point\n) => {\n log.info(`our points ${JSON.stringify(points)}`);\n if (points[0] !== initialPosition) {\n points = points.reverse();\n }\n // Traverse only 25 total distance along points to find cardinality point\n const distanceToCardinalityPoint = 25;\n const center = calculatePoint(points, distanceToCardinalityPoint);\n // if relation is present (Arrows will be added), change cardinality point off-set distance (d)\n const d = isRelationTypePresent ? 10 : 5;\n //Calculate Angle for x and y axis\n const angle = Math.atan2(points[0].y - center.y, points[0].x - center.x);\n const cardinalityPosition = { x: 0, y: 0 };\n //Calculation cardinality position using angle, center point on the line/curve but perpendicular and with offset-distance\n cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2;\n cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2;\n return cardinalityPosition;\n};\n\n/**\n * Calculates the terminal label position.\n *\n * @param terminalMarkerSize - Terminal marker size.\n * @param position - Position of label relative to points.\n * @param _points - Array of points.\n * @returns - The `cardinalityPosition`.\n */\nfunction calcTerminalLabelPosition(\n terminalMarkerSize: number,\n position: 'start_left' | 'start_right' | 'end_left' | 'end_right',\n _points: Point[]\n): Point {\n const points = structuredClone(_points);\n log.info('our points', points);\n if (position !== 'start_left' && position !== 'start_right') {\n points.reverse();\n }\n\n // Traverse only 25 total distance along points to find cardinality point\n const distanceToCardinalityPoint = 25 + terminalMarkerSize;\n const center = calculatePoint(points, distanceToCardinalityPoint);\n\n // if relation is present (Arrows will be added), change cardinality point off-set distance (d)\n const d = 10 + terminalMarkerSize * 0.5;\n //Calculate Angle for x and y axis\n const angle = Math.atan2(points[0].y - center.y, points[0].x - center.x);\n\n const cardinalityPosition: Point = { x: 0, y: 0 };\n //Calculation cardinality position using angle, center point on the line/curve but perpendicular and with offset-distance\n\n if (position === 'start_left') {\n cardinalityPosition.x = Math.sin(angle + Math.PI) * d + (points[0].x + center.x) / 2;\n cardinalityPosition.y = -Math.cos(angle + Math.PI) * d + (points[0].y + center.y) / 2;\n } else if (position === 'end_right') {\n cardinalityPosition.x = Math.sin(angle - Math.PI) * d + (points[0].x + center.x) / 2 - 5;\n cardinalityPosition.y = -Math.cos(angle - Math.PI) * d + (points[0].y + center.y) / 2 - 5;\n } else if (position === 'end_left') {\n cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2 - 5;\n cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2 - 5;\n } else {\n cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2;\n cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2;\n }\n return cardinalityPosition;\n}\n\n/**\n * Gets styles from an array of declarations\n *\n * @param arr - Declarations\n * @returns The styles grouped as strings\n */\nexport function getStylesFromArray(arr: string[]): { style: string; labelStyle: string } {\n let style = '';\n let labelStyle = '';\n\n for (const element of arr) {\n if (element !== undefined) {\n // add text properties to label style definition\n if (element.startsWith('color:') || element.startsWith('text-align:')) {\n labelStyle = labelStyle + element + ';';\n } else {\n style = style + element + ';';\n }\n }\n }\n\n return { style, labelStyle };\n}\n\nlet cnt = 0;\nexport const generateId = () => {\n cnt++;\n return 'id-' + Math.random().toString(36).substr(2, 12) + '-' + cnt;\n};\n\n/**\n * Generates a random hexadecimal id of the given length.\n *\n * @param length - Length of string.\n * @returns The generated string.\n */\nfunction makeRandomHex(length: number): string {\n let result = '';\n const characters = '0123456789abcdef';\n const charactersLength = characters.length;\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n}\n\nexport const random = (options: { length: number }) => {\n return makeRandomHex(options.length);\n};\n\nexport const getTextObj = function () {\n return {\n x: 0,\n y: 0,\n fill: undefined,\n anchor: 'start',\n style: '#666',\n width: 100,\n height: 100,\n textMargin: 0,\n rx: 0,\n ry: 0,\n valign: undefined,\n text: '',\n };\n};\n\n/**\n * Adds text to an element\n *\n * @param elem - SVG Element to add text to\n * @param textData - Text options.\n * @returns Text element with given styling and content\n */\nexport const drawSimpleText = function (\n elem: SVGElement,\n textData: {\n text: string;\n x: number;\n y: number;\n anchor: 'start' | 'middle' | 'end';\n fontFamily: string;\n fontSize: string | number;\n fontWeight: string | number;\n fill: string;\n class: string | undefined;\n textMargin: number;\n }\n): SVGTextElement {\n // Remove and ignore br:s\n const nText = textData.text.replace(common.lineBreakRegex, ' ');\n\n const [, _fontSizePx] = parseFontSize(textData.fontSize);\n\n const textElem = elem.append('text') as any;\n textElem.attr('x', textData.x);\n textElem.attr('y', textData.y);\n textElem.style('text-anchor', textData.anchor);\n textElem.style('font-family', textData.fontFamily);\n textElem.style('font-size', _fontSizePx);\n textElem.style('font-weight', textData.fontWeight);\n textElem.attr('fill', textData.fill);\n\n if (textData.class !== undefined) {\n textElem.attr('class', textData.class);\n }\n\n const span = textElem.append('tspan');\n span.attr('x', textData.x + textData.textMargin * 2);\n span.attr('fill', textData.fill);\n span.text(nText);\n\n return textElem;\n};\n\ninterface WrapLabelConfig {\n fontSize: number;\n fontFamily: string;\n fontWeight: number;\n joinWith: string;\n}\n\nexport const wrapLabel: (label: string, maxWidth: number, config: WrapLabelConfig) => string =\n memoize(\n (label: string, maxWidth: number, config: WrapLabelConfig): string => {\n if (!label) {\n return label;\n }\n config = Object.assign(\n { fontSize: 12, fontWeight: 400, fontFamily: 'Arial', joinWith: '
    ' },\n config\n );\n if (common.lineBreakRegex.test(label)) {\n return label;\n }\n const words = label.split(' ').filter(Boolean);\n const completedLines: string[] = [];\n let nextLine = '';\n words.forEach((word, index) => {\n const wordLength = calculateTextWidth(`${word} `, config);\n const nextLineLength = calculateTextWidth(nextLine, config);\n if (wordLength > maxWidth) {\n const { hyphenatedStrings, remainingWord } = breakString(word, maxWidth, '-', config);\n completedLines.push(nextLine, ...hyphenatedStrings);\n nextLine = remainingWord;\n } else if (nextLineLength + wordLength >= maxWidth) {\n completedLines.push(nextLine);\n nextLine = word;\n } else {\n nextLine = [nextLine, word].filter(Boolean).join(' ');\n }\n const currentWord = index + 1;\n const isLastWord = currentWord === words.length;\n if (isLastWord) {\n completedLines.push(nextLine);\n }\n });\n return completedLines.filter((line) => line !== '').join(config.joinWith);\n },\n (label, maxWidth, config) =>\n `${label}${maxWidth}${config.fontSize}${config.fontWeight}${config.fontFamily}${config.joinWith}`\n );\n\ninterface BreakStringOutput {\n hyphenatedStrings: string[];\n remainingWord: string;\n}\n\nconst breakString: (\n word: string,\n maxWidth: number,\n hyphenCharacter: string,\n config: WrapLabelConfig\n) => BreakStringOutput = memoize(\n (\n word: string,\n maxWidth: number,\n hyphenCharacter = '-',\n config: WrapLabelConfig\n ): BreakStringOutput => {\n config = Object.assign(\n { fontSize: 12, fontWeight: 400, fontFamily: 'Arial', margin: 0 },\n config\n );\n const characters = [...word];\n const lines: string[] = [];\n let currentLine = '';\n characters.forEach((character, index) => {\n const nextLine = `${currentLine}${character}`;\n const lineWidth = calculateTextWidth(nextLine, config);\n if (lineWidth >= maxWidth) {\n const currentCharacter = index + 1;\n const isLastLine = characters.length === currentCharacter;\n const hyphenatedNextLine = `${nextLine}${hyphenCharacter}`;\n lines.push(isLastLine ? nextLine : hyphenatedNextLine);\n currentLine = '';\n } else {\n currentLine = nextLine;\n }\n });\n return { hyphenatedStrings: lines, remainingWord: currentLine };\n },\n (word, maxWidth, hyphenCharacter = '-', config) =>\n `${word}${maxWidth}${hyphenCharacter}${config.fontSize}${config.fontWeight}${config.fontFamily}`\n);\n\n/**\n * This calculates the text's height, taking into account the wrap breaks and both the statically\n * configured height, width, and the length of the text (in pixels).\n *\n * If the wrapped text has greater height, we extend the height, so it's value won't overflow.\n *\n * @param text - The text to measure\n * @param config - The config for fontSize, fontFamily, and fontWeight all impacting the\n * resulting size\n * @returns The height for the given text\n */\nexport function calculateTextHeight(\n text: Parameters[0],\n config: Parameters[1]\n): ReturnType['height'] {\n return calculateTextDimensions(text, config).height;\n}\n\n/**\n * This calculates the width of the given text, font size and family.\n *\n * @param text - The text to calculate the width of\n * @param config - The config for fontSize, fontFamily, and fontWeight all impacting the\n * resulting size\n * @returns The width for the given text\n */\nexport function calculateTextWidth(\n text: Parameters[0],\n config: Parameters[1]\n): ReturnType['width'] {\n return calculateTextDimensions(text, config).width;\n}\n\n/**\n * This calculates the dimensions of the given text, font size, font family, font weight, and\n * margins.\n *\n * @param text - The text to calculate the width of\n * @param config - The config for fontSize, fontFamily, fontWeight, and margin all impacting\n * the resulting size\n * @returns The dimensions for the given text\n */\nexport const calculateTextDimensions: (\n text: string,\n config: TextDimensionConfig\n) => TextDimensions = memoize(\n (text: string, config: TextDimensionConfig): TextDimensions => {\n const { fontSize = 12, fontFamily = 'Arial', fontWeight = 400 } = config;\n if (!text) {\n return { width: 0, height: 0 };\n }\n\n const [, _fontSizePx] = parseFontSize(fontSize);\n\n // We can't really know if the user supplied font family will render on the user agent;\n // thus, we'll take the max width between the user supplied font family, and a default\n // of sans-serif.\n const fontFamilies = ['sans-serif', fontFamily];\n const lines = text.split(common.lineBreakRegex);\n const dims = [];\n\n const body = select('body');\n // We don't want to leak DOM elements - if a removal operation isn't available\n // for any reason, do not continue.\n if (!body.remove) {\n return { width: 0, height: 0, lineHeight: 0 };\n }\n\n const g = body.append('svg');\n\n for (const fontFamily of fontFamilies) {\n let cHeight = 0;\n const dim = { width: 0, height: 0, lineHeight: 0 };\n for (const line of lines) {\n const textObj = getTextObj();\n textObj.text = line || ZERO_WIDTH_SPACE;\n // @ts-ignore TODO: Fix D3 types\n const textElem = drawSimpleText(g, textObj)\n // @ts-ignore TODO: Fix D3 types\n .style('font-size', _fontSizePx)\n .style('font-weight', fontWeight)\n .style('font-family', fontFamily);\n\n const bBox = (textElem._groups || textElem)[0][0].getBBox();\n if (bBox.width === 0 && bBox.height === 0) {\n throw new Error('svg element not in render tree');\n }\n dim.width = Math.round(Math.max(dim.width, bBox.width));\n cHeight = Math.round(bBox.height);\n dim.height += cHeight;\n dim.lineHeight = Math.round(Math.max(dim.lineHeight, cHeight));\n }\n dims.push(dim);\n }\n\n g.remove();\n\n const index =\n isNaN(dims[1].height) ||\n isNaN(dims[1].width) ||\n isNaN(dims[1].lineHeight) ||\n (dims[0].height > dims[1].height &&\n dims[0].width > dims[1].width &&\n dims[0].lineHeight > dims[1].lineHeight)\n ? 0\n : 1;\n return dims[index];\n },\n (text, config) => `${text}${config.fontSize}${config.fontWeight}${config.fontFamily}`\n);\n\nexport class InitIDGenerator {\n private count = 0;\n public next: () => number;\n constructor(deterministic = false, seed?: string) {\n // TODO: Seed is only used for length?\n // v11: Use the actual value of seed string to generate an initial value for count.\n this.count = seed ? seed.length : 0;\n this.next = deterministic ? () => this.count++ : () => Date.now();\n }\n}\n\nlet decoder: HTMLDivElement;\n\n/**\n * Decodes HTML, source: {@link https://github.com/shrpne/entity-decode/blob/v2.0.1/browser.js}\n *\n * @param html - HTML as a string\n * @returns Unescaped HTML\n */\nexport const entityDecode = function (html: string): string {\n decoder = decoder || document.createElement('div');\n // Escape HTML before decoding for HTML Entities\n html = escape(html).replace(/%26/g, '&').replace(/%23/g, '#').replace(/%3B/g, ';');\n decoder.innerHTML = html;\n\n return unescape(decoder.textContent!);\n};\n\nexport interface DetailedError {\n str: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n hash: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n error?: any;\n message?: string;\n}\n\n/** @param error - The error to check */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isDetailedError(error: any): error is DetailedError {\n return 'str' in error;\n}\n\n/** @param error - The error to convert to an error message */\nexport function getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n}\n\n/**\n * Appends element with the given title and css class.\n *\n * @param parent - d3 svg object to append title to\n * @param cssClass - CSS class for the element containing the title\n * @param titleTopMargin - Margin in pixels between title and rest of the graph\n * @param title - The title. If empty, returns immediately.\n */\nexport const insertTitle = (\n parent: D3Element,\n cssClass: string,\n titleTopMargin: number,\n title?: string\n): void => {\n if (!title) {\n return;\n }\n const bounds = parent.node()?.getBBox();\n if (!bounds) {\n return;\n }\n parent\n .append('text')\n .text(title)\n .attr('text-anchor', 'middle')\n .attr('x', bounds.x + bounds.width / 2)\n .attr('y', -titleTopMargin)\n .attr('class', cssClass);\n};\n\n/**\n * Parses a raw fontSize configuration value into a number and string value.\n *\n * @param fontSize - a string or number font size configuration value\n *\n * @returns parsed number and string style font size values, or nulls if a number value can't\n * be parsed from an input string.\n */\nexport const parseFontSize = (fontSize: string | number | undefined): [number?, string?] => {\n // if the font size is a number, assume a px string representation\n if (typeof fontSize === 'number') {\n return [fontSize, fontSize + 'px'];\n }\n\n const fontSizeNumber = parseInt(fontSize ?? '', 10);\n if (Number.isNaN(fontSizeNumber)) {\n // if a number value can't be parsed, return null for both values\n return [undefined, undefined];\n } else if (fontSize === String(fontSizeNumber)) {\n // if a string input doesn't contain any units, assume px units\n return [fontSizeNumber, fontSize + 'px'];\n } else {\n return [fontSizeNumber, fontSize];\n }\n};\n\nexport function cleanAndMerge(defaultData: T, data?: Partial): T {\n return merge({}, defaultData, data);\n}\n\nexport default {\n assignWithDepth,\n wrapLabel,\n calculateTextHeight,\n calculateTextWidth,\n calculateTextDimensions,\n cleanAndMerge,\n detectInit,\n detectDirective,\n isSubstringInArray,\n interpolateToCurve,\n calcLabelPosition,\n calcCardinalityPosition,\n calcTerminalLabelPosition,\n formatUrl,\n getStylesFromArray,\n generateId,\n random,\n runFunc,\n entityDecode,\n insertTitle,\n isLabelCoordinateInPath,\n parseFontSize,\n InitIDGenerator,\n};\n\n/**\n * @param text - text to be encoded\n * @returns\n */\nexport const encodeEntities = function (text: string): string {\n let txt = text;\n\n txt = txt.replace(/style.*:\\S*#.*;/g, function (s): string {\n return s.substring(0, s.length - 1);\n });\n txt = txt.replace(/classDef.*:\\S*#.*;/g, function (s): string {\n return s.substring(0, s.length - 1);\n });\n\n txt = txt.replace(/#\\w+;/g, function (s) {\n const innerTxt = s.substring(1, s.length - 1);\n\n const isInt = /^\\+?\\d+$/.test(innerTxt);\n if (isInt) {\n return '\uFB02\u00B0\u00B0' + innerTxt + '\u00B6\u00DF';\n } else {\n return '\uFB02\u00B0' + innerTxt + '\u00B6\u00DF';\n }\n });\n\n return txt;\n};\n\n/**\n *\n * @param text - text to be decoded\n * @returns\n */\nexport const decodeEntities = function (text: string): string {\n return text.replace(/\uFB02\u00B0\u00B0/g, '&#').replace(/\uFB02\u00B0/g, '&').replace(/\u00B6\u00DF/g, ';');\n};\n\nexport const isString = (value: unknown): value is string => {\n return typeof value === 'string';\n};\n\nexport const getEdgeId = (\n from: string,\n to: string,\n {\n counter = 0,\n prefix,\n suffix,\n }: {\n counter?: number;\n prefix?: string;\n suffix?: string;\n },\n id?: string\n) => {\n if (id) {\n return id;\n }\n return `${prefix ? `${prefix}_` : ''}${from}_${to}_${counter}${suffix ? `_${suffix}` : ''}`;\n};\n\n/**\n * D3's `selection.attr` method doesn't officially support `undefined`.\n *\n * However, it seems if you do pass `undefined`, it seems to be treated as `null`\n * (e.g. it removes the attribute).\n */\nexport function handleUndefinedAttr(\n attrValue: Parameters['attr']>[1] | undefined\n) {\n return attrValue ?? null;\n}\n\n/**\n * Checks if the x or y coordinate of the edge label\n * appears in the given SVG path data string.\n *\n * @param point - The Point object with x and y properties to check.\n * @param dAttr - SVG path data string (the 'd' attribute of an SVG path element).\n * @returns - True if the rounded x or y coordinate of the edge label is found\n * in the sanitized path data string; otherwise, false.\n */\nexport function isLabelCoordinateInPath(point: Point, dAttr: string) {\n const roundedX = Math.round(point.x);\n const roundedY = Math.round(point.y);\n\n const sanitizedD = dAttr.replace(/(\\d+\\.\\d+)/g, (match) =>\n Math.round(parseFloat(match)).toString()\n );\n\n return sanitizedD.includes(roundedX.toString()) || sanitizedD.includes(roundedY.toString());\n}\n", "import { select } from 'd3';\nimport svgDraw from './svgDraw.js';\nimport { log } from '../../logger.js';\nimport { parser } from './parser/c4Diagram.jison';\nimport common from '../common/common.js';\nimport c4Db from './c4Db.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport assignWithDepth from '../../assignWithDepth.js';\nimport { wrapLabel, calculateTextWidth, calculateTextHeight } from '../../utils.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\n\nlet globalBoundaryMaxX = 0,\n globalBoundaryMaxY = 0;\n\nlet c4ShapeInRow = 4;\nlet c4BoundaryInRow = 2;\n\nparser.yy = c4Db;\n\nlet conf = {};\n\nclass Bounds {\n constructor(diagObj) {\n this.name = '';\n this.data = {};\n this.data.startx = undefined;\n this.data.stopx = undefined;\n this.data.starty = undefined;\n this.data.stopy = undefined;\n this.data.widthLimit = undefined;\n\n this.nextData = {};\n this.nextData.startx = undefined;\n this.nextData.stopx = undefined;\n this.nextData.starty = undefined;\n this.nextData.stopy = undefined;\n this.nextData.cnt = 0;\n\n setConf(diagObj.db.getConfig());\n }\n\n setData(startx, stopx, starty, stopy) {\n this.nextData.startx = this.data.startx = startx;\n this.nextData.stopx = this.data.stopx = stopx;\n this.nextData.starty = this.data.starty = starty;\n this.nextData.stopy = this.data.stopy = stopy;\n }\n\n updateVal(obj, key, val, fun) {\n if (obj[key] === undefined) {\n obj[key] = val;\n } else {\n obj[key] = fun(val, obj[key]);\n }\n }\n\n insert(c4Shape) {\n this.nextData.cnt = this.nextData.cnt + 1;\n let _startx =\n this.nextData.startx === this.nextData.stopx\n ? this.nextData.stopx + c4Shape.margin\n : this.nextData.stopx + c4Shape.margin * 2;\n let _stopx = _startx + c4Shape.width;\n let _starty = this.nextData.starty + c4Shape.margin * 2;\n let _stopy = _starty + c4Shape.height;\n if (\n _startx >= this.data.widthLimit ||\n _stopx >= this.data.widthLimit ||\n this.nextData.cnt > c4ShapeInRow\n ) {\n _startx = this.nextData.startx + c4Shape.margin + conf.nextLinePaddingX;\n _starty = this.nextData.stopy + c4Shape.margin * 2;\n\n this.nextData.stopx = _stopx = _startx + c4Shape.width;\n this.nextData.starty = this.nextData.stopy;\n this.nextData.stopy = _stopy = _starty + c4Shape.height;\n this.nextData.cnt = 1;\n }\n\n c4Shape.x = _startx;\n c4Shape.y = _starty;\n\n this.updateVal(this.data, 'startx', _startx, Math.min);\n this.updateVal(this.data, 'starty', _starty, Math.min);\n this.updateVal(this.data, 'stopx', _stopx, Math.max);\n this.updateVal(this.data, 'stopy', _stopy, Math.max);\n\n this.updateVal(this.nextData, 'startx', _startx, Math.min);\n this.updateVal(this.nextData, 'starty', _starty, Math.min);\n this.updateVal(this.nextData, 'stopx', _stopx, Math.max);\n this.updateVal(this.nextData, 'stopy', _stopy, Math.max);\n }\n\n init(diagObj) {\n this.name = '';\n this.data = {\n startx: undefined,\n stopx: undefined,\n starty: undefined,\n stopy: undefined,\n widthLimit: undefined,\n };\n this.nextData = {\n startx: undefined,\n stopx: undefined,\n starty: undefined,\n stopy: undefined,\n cnt: 0,\n };\n setConf(diagObj.db.getConfig());\n }\n\n bumpLastMargin(margin) {\n this.data.stopx += margin;\n this.data.stopy += margin;\n }\n}\n\nexport const setConf = function (cnf) {\n assignWithDepth(conf, cnf);\n\n if (cnf.fontFamily) {\n conf.personFontFamily = conf.systemFontFamily = conf.messageFontFamily = cnf.fontFamily;\n }\n if (cnf.fontSize) {\n conf.personFontSize = conf.systemFontSize = conf.messageFontSize = cnf.fontSize;\n }\n if (cnf.fontWeight) {\n conf.personFontWeight = conf.systemFontWeight = conf.messageFontWeight = cnf.fontWeight;\n }\n};\n\nconst c4ShapeFont = (cnf, typeC4Shape) => {\n return {\n fontFamily: cnf[typeC4Shape + 'FontFamily'],\n fontSize: cnf[typeC4Shape + 'FontSize'],\n fontWeight: cnf[typeC4Shape + 'FontWeight'],\n };\n};\n\nconst boundaryFont = (cnf) => {\n return {\n fontFamily: cnf.boundaryFontFamily,\n fontSize: cnf.boundaryFontSize,\n fontWeight: cnf.boundaryFontWeight,\n };\n};\n\nconst messageFont = (cnf) => {\n return {\n fontFamily: cnf.messageFontFamily,\n fontSize: cnf.messageFontSize,\n fontWeight: cnf.messageFontWeight,\n };\n};\n\n/**\n * @param textType\n * @param c4Shape\n * @param c4ShapeTextWrap\n * @param textConf\n * @param textLimitWidth\n */\nfunction calcC4ShapeTextWH(textType, c4Shape, c4ShapeTextWrap, textConf, textLimitWidth) {\n if (!c4Shape[textType].width) {\n if (c4ShapeTextWrap) {\n c4Shape[textType].text = wrapLabel(c4Shape[textType].text, textLimitWidth, textConf);\n c4Shape[textType].textLines = c4Shape[textType].text.split(common.lineBreakRegex).length;\n // c4Shape[textType].width = calculateTextWidth(c4Shape[textType].text, textConf);\n c4Shape[textType].width = textLimitWidth;\n // c4Shape[textType].height = c4Shape[textType].textLines * textConf.fontSize;\n c4Shape[textType].height = calculateTextHeight(c4Shape[textType].text, textConf);\n } else {\n let lines = c4Shape[textType].text.split(common.lineBreakRegex);\n c4Shape[textType].textLines = lines.length;\n let lineHeight = 0;\n c4Shape[textType].height = 0;\n c4Shape[textType].width = 0;\n for (const line of lines) {\n c4Shape[textType].width = Math.max(\n calculateTextWidth(line, textConf),\n c4Shape[textType].width\n );\n lineHeight = calculateTextHeight(line, textConf);\n c4Shape[textType].height = c4Shape[textType].height + lineHeight;\n }\n // c4Shapes[textType].height = c4Shapes[textType].textLines * textConf.fontSize;\n }\n }\n}\n\nexport const drawBoundary = function (diagram, boundary, bounds) {\n boundary.x = bounds.data.startx;\n boundary.y = bounds.data.starty;\n boundary.width = bounds.data.stopx - bounds.data.startx;\n boundary.height = bounds.data.stopy - bounds.data.starty;\n\n boundary.label.y = conf.c4ShapeMargin - 35;\n\n let boundaryTextWrap = boundary.wrap && conf.wrap;\n let boundaryLabelConf = boundaryFont(conf);\n boundaryLabelConf.fontSize = boundaryLabelConf.fontSize + 2;\n boundaryLabelConf.fontWeight = 'bold';\n let textLimitWidth = calculateTextWidth(boundary.label.text, boundaryLabelConf);\n calcC4ShapeTextWH('label', boundary, boundaryTextWrap, boundaryLabelConf, textLimitWidth);\n\n svgDraw.drawBoundary(diagram, boundary, conf);\n};\n\nexport const drawC4ShapeArray = function (currentBounds, diagram, c4ShapeArray, c4ShapeKeys) {\n // Upper Y is relative point\n let Y = 0;\n // Draw the c4ShapeArray\n for (const c4ShapeKey of c4ShapeKeys) {\n Y = 0;\n const c4Shape = c4ShapeArray[c4ShapeKey];\n\n // calc c4 shape type width and height\n\n let c4ShapeTypeConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n c4ShapeTypeConf.fontSize = c4ShapeTypeConf.fontSize - 2;\n c4Shape.typeC4Shape.width = calculateTextWidth(\n '\u00AB' + c4Shape.typeC4Shape.text + '\u00BB',\n c4ShapeTypeConf\n );\n c4Shape.typeC4Shape.height = c4ShapeTypeConf.fontSize + 2;\n c4Shape.typeC4Shape.Y = conf.c4ShapePadding;\n Y = c4Shape.typeC4Shape.Y + c4Shape.typeC4Shape.height - 4;\n\n // set image width and height c4Shape.x + c4Shape.width / 2 - 24, c4Shape.y + 28\n // let imageWidth = 0,\n // imageHeight = 0,\n // imageY = 0;\n //\n c4Shape.image = { width: 0, height: 0, Y: 0 };\n switch (c4Shape.typeC4Shape.text) {\n case 'person':\n case 'external_person':\n c4Shape.image.width = 48;\n c4Shape.image.height = 48;\n c4Shape.image.Y = Y;\n Y = c4Shape.image.Y + c4Shape.image.height;\n break;\n }\n if (c4Shape.sprite) {\n c4Shape.image.width = 48;\n c4Shape.image.height = 48;\n c4Shape.image.Y = Y;\n Y = c4Shape.image.Y + c4Shape.image.height;\n }\n\n // Y = conf.c4ShapePadding + c4Shape.image.height;\n\n let c4ShapeTextWrap = c4Shape.wrap && conf.wrap;\n let textLimitWidth = conf.width - conf.c4ShapePadding * 2;\n\n let c4ShapeLabelConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n c4ShapeLabelConf.fontSize = c4ShapeLabelConf.fontSize + 2;\n c4ShapeLabelConf.fontWeight = 'bold';\n calcC4ShapeTextWH('label', c4Shape, c4ShapeTextWrap, c4ShapeLabelConf, textLimitWidth);\n c4Shape.label.Y = Y + 8;\n Y = c4Shape.label.Y + c4Shape.label.height;\n\n if (c4Shape.type && c4Shape.type.text !== '') {\n c4Shape.type.text = '[' + c4Shape.type.text + ']';\n let c4ShapeTypeConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n calcC4ShapeTextWH('type', c4Shape, c4ShapeTextWrap, c4ShapeTypeConf, textLimitWidth);\n c4Shape.type.Y = Y + 5;\n Y = c4Shape.type.Y + c4Shape.type.height;\n } else if (c4Shape.techn && c4Shape.techn.text !== '') {\n c4Shape.techn.text = '[' + c4Shape.techn.text + ']';\n let c4ShapeTechnConf = c4ShapeFont(conf, c4Shape.techn.text);\n calcC4ShapeTextWH('techn', c4Shape, c4ShapeTextWrap, c4ShapeTechnConf, textLimitWidth);\n c4Shape.techn.Y = Y + 5;\n Y = c4Shape.techn.Y + c4Shape.techn.height;\n }\n\n let rectHeight = Y;\n let rectWidth = c4Shape.label.width;\n\n if (c4Shape.descr && c4Shape.descr.text !== '') {\n let c4ShapeDescrConf = c4ShapeFont(conf, c4Shape.typeC4Shape.text);\n calcC4ShapeTextWH('descr', c4Shape, c4ShapeTextWrap, c4ShapeDescrConf, textLimitWidth);\n c4Shape.descr.Y = Y + 20;\n Y = c4Shape.descr.Y + c4Shape.descr.height;\n\n rectWidth = Math.max(c4Shape.label.width, c4Shape.descr.width);\n rectHeight = Y - c4Shape.descr.textLines * 5;\n }\n\n rectWidth = rectWidth + conf.c4ShapePadding;\n // let rectHeight =\n\n c4Shape.width = Math.max(c4Shape.width || conf.width, rectWidth, conf.width);\n c4Shape.height = Math.max(c4Shape.height || conf.height, rectHeight, conf.height);\n c4Shape.margin = c4Shape.margin || conf.c4ShapeMargin;\n\n currentBounds.insert(c4Shape);\n\n svgDraw.drawC4Shape(diagram, c4Shape, conf);\n }\n\n currentBounds.bumpLastMargin(conf.c4ShapeMargin);\n};\n\nclass Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n}\n\n/* * *\n * Get the intersection of the line between the center point of a rectangle and a point outside the rectangle.\n * Algorithm idea.\n * Using a point outside the rectangle as the coordinate origin, the graph is divided into four quadrants, and each quadrant is divided into two cases, with separate treatment on the coordinate axes\n * 1. The case of coordinate axes.\n * 1. The case of the negative x-axis\n * 2. The case of the positive x-axis\n * 3. The case of the positive y-axis\n * 4. The negative y-axis case\n * 2. Quadrant cases.\n * 2.1. first quadrant: the case where the line intersects the left side of the rectangle; the case where it intersects the lower side of the rectangle\n * 2.2. second quadrant: the case where the line intersects the right side of the rectangle; the case where it intersects the lower edge of the rectangle\n * 2.3. third quadrant: the case where the line intersects the right side of the rectangle; the case where it intersects the upper edge of the rectangle\n * 2.4. fourth quadrant: the case where the line intersects the left side of the rectangle; the case where it intersects the upper side of the rectangle\n *\n */\nlet getIntersectPoint = function (fromNode, endPoint) {\n let x1 = fromNode.x;\n\n let y1 = fromNode.y;\n\n let x2 = endPoint.x;\n\n let y2 = endPoint.y;\n\n let fromCenterX = x1 + fromNode.width / 2;\n\n let fromCenterY = y1 + fromNode.height / 2;\n\n let dx = Math.abs(x1 - x2);\n\n let dy = Math.abs(y1 - y2);\n\n let tanDYX = dy / dx;\n\n let fromDYX = fromNode.height / fromNode.width;\n\n let returnPoint = null;\n\n if (y1 == y2 && x1 < x2) {\n returnPoint = new Point(x1 + fromNode.width, fromCenterY);\n } else if (y1 == y2 && x1 > x2) {\n returnPoint = new Point(x1, fromCenterY);\n } else if (x1 == x2 && y1 < y2) {\n returnPoint = new Point(fromCenterX, y1 + fromNode.height);\n } else if (x1 == x2 && y1 > y2) {\n returnPoint = new Point(fromCenterX, y1);\n }\n\n if (x1 > x2 && y1 < y2) {\n if (fromDYX >= tanDYX) {\n returnPoint = new Point(x1, fromCenterY + (tanDYX * fromNode.width) / 2);\n } else {\n returnPoint = new Point(\n fromCenterX - ((dx / dy) * fromNode.height) / 2,\n y1 + fromNode.height\n );\n }\n } else if (x1 < x2 && y1 < y2) {\n //\n if (fromDYX >= tanDYX) {\n returnPoint = new Point(x1 + fromNode.width, fromCenterY + (tanDYX * fromNode.width) / 2);\n } else {\n returnPoint = new Point(\n fromCenterX + ((dx / dy) * fromNode.height) / 2,\n y1 + fromNode.height\n );\n }\n } else if (x1 < x2 && y1 > y2) {\n if (fromDYX >= tanDYX) {\n returnPoint = new Point(x1 + fromNode.width, fromCenterY - (tanDYX * fromNode.width) / 2);\n } else {\n returnPoint = new Point(fromCenterX + ((fromNode.height / 2) * dx) / dy, y1);\n }\n } else if (x1 > x2 && y1 > y2) {\n if (fromDYX >= tanDYX) {\n returnPoint = new Point(x1, fromCenterY - (fromNode.width / 2) * tanDYX);\n } else {\n returnPoint = new Point(fromCenterX - ((fromNode.height / 2) * dx) / dy, y1);\n }\n }\n return returnPoint;\n};\n\nlet getIntersectPoints = function (fromNode, endNode) {\n let endIntersectPoint = { x: 0, y: 0 };\n endIntersectPoint.x = endNode.x + endNode.width / 2;\n endIntersectPoint.y = endNode.y + endNode.height / 2;\n let startPoint = getIntersectPoint(fromNode, endIntersectPoint);\n\n endIntersectPoint.x = fromNode.x + fromNode.width / 2;\n endIntersectPoint.y = fromNode.y + fromNode.height / 2;\n let endPoint = getIntersectPoint(endNode, endIntersectPoint);\n return { startPoint: startPoint, endPoint: endPoint };\n};\n\nexport const drawRels = function (diagram, rels, getC4ShapeObj, diagObj) {\n let i = 0;\n for (let rel of rels) {\n i = i + 1;\n let relTextWrap = rel.wrap && conf.wrap;\n let relConf = messageFont(conf);\n let diagramType = diagObj.db.getC4Type();\n if (diagramType === 'C4Dynamic') {\n rel.label.text = i + ': ' + rel.label.text;\n }\n let textLimitWidth = calculateTextWidth(rel.label.text, relConf);\n calcC4ShapeTextWH('label', rel, relTextWrap, relConf, textLimitWidth);\n\n if (rel.techn && rel.techn.text !== '') {\n textLimitWidth = calculateTextWidth(rel.techn.text, relConf);\n calcC4ShapeTextWH('techn', rel, relTextWrap, relConf, textLimitWidth);\n }\n\n if (rel.descr && rel.descr.text !== '') {\n textLimitWidth = calculateTextWidth(rel.descr.text, relConf);\n calcC4ShapeTextWH('descr', rel, relTextWrap, relConf, textLimitWidth);\n }\n\n let fromNode = getC4ShapeObj(rel.from);\n let endNode = getC4ShapeObj(rel.to);\n let points = getIntersectPoints(fromNode, endNode);\n rel.startPoint = points.startPoint;\n rel.endPoint = points.endPoint;\n }\n svgDraw.drawRels(diagram, rels, conf);\n};\n\n/**\n * @param diagram\n * @param parentBoundaryAlias\n * @param parentBounds\n * @param currentBoundaries\n * @param diagObj\n */\nfunction drawInsideBoundary(\n diagram,\n parentBoundaryAlias,\n parentBounds,\n currentBoundaries,\n diagObj\n) {\n let currentBounds = new Bounds(diagObj);\n // Calculate the width limit of the boundary. label/type \u7684\u957F\u5EA6\uFF0C\n currentBounds.data.widthLimit =\n parentBounds.data.widthLimit / Math.min(c4BoundaryInRow, currentBoundaries.length);\n // Math.min(\n // conf.width * conf.c4ShapeInRow + conf.c4ShapeMargin * conf.c4ShapeInRow * 2,\n // parentBounds.data.widthLimit / Math.min(conf.c4BoundaryInRow, currentBoundaries.length)\n // );\n for (let [i, currentBoundary] of currentBoundaries.entries()) {\n let Y = 0;\n currentBoundary.image = { width: 0, height: 0, Y: 0 };\n if (currentBoundary.sprite) {\n currentBoundary.image.width = 48;\n currentBoundary.image.height = 48;\n currentBoundary.image.Y = Y;\n Y = currentBoundary.image.Y + currentBoundary.image.height;\n }\n\n let currentBoundaryTextWrap = currentBoundary.wrap && conf.wrap;\n\n let currentBoundaryLabelConf = boundaryFont(conf);\n currentBoundaryLabelConf.fontSize = currentBoundaryLabelConf.fontSize + 2;\n currentBoundaryLabelConf.fontWeight = 'bold';\n calcC4ShapeTextWH(\n 'label',\n currentBoundary,\n currentBoundaryTextWrap,\n currentBoundaryLabelConf,\n currentBounds.data.widthLimit\n );\n currentBoundary.label.Y = Y + 8;\n Y = currentBoundary.label.Y + currentBoundary.label.height;\n\n if (currentBoundary.type && currentBoundary.type.text !== '') {\n currentBoundary.type.text = '[' + currentBoundary.type.text + ']';\n let currentBoundaryTypeConf = boundaryFont(conf);\n calcC4ShapeTextWH(\n 'type',\n currentBoundary,\n currentBoundaryTextWrap,\n currentBoundaryTypeConf,\n currentBounds.data.widthLimit\n );\n currentBoundary.type.Y = Y + 5;\n Y = currentBoundary.type.Y + currentBoundary.type.height;\n }\n\n if (currentBoundary.descr && currentBoundary.descr.text !== '') {\n let currentBoundaryDescrConf = boundaryFont(conf);\n currentBoundaryDescrConf.fontSize = currentBoundaryDescrConf.fontSize - 2;\n calcC4ShapeTextWH(\n 'descr',\n currentBoundary,\n currentBoundaryTextWrap,\n currentBoundaryDescrConf,\n currentBounds.data.widthLimit\n );\n currentBoundary.descr.Y = Y + 20;\n Y = currentBoundary.descr.Y + currentBoundary.descr.height;\n }\n\n if (i == 0 || i % c4BoundaryInRow === 0) {\n // Calculate the drawing start point of the currentBoundaries.\n let _x = parentBounds.data.startx + conf.diagramMarginX;\n let _y = parentBounds.data.stopy + conf.diagramMarginY + Y;\n\n currentBounds.setData(_x, _x, _y, _y);\n } else {\n // Calculate the drawing start point of the currentBoundaries.\n let _x =\n currentBounds.data.stopx !== currentBounds.data.startx\n ? currentBounds.data.stopx + conf.diagramMarginX\n : currentBounds.data.startx;\n let _y = currentBounds.data.starty;\n\n currentBounds.setData(_x, _x, _y, _y);\n }\n currentBounds.name = currentBoundary.alias;\n let currentPersonOrSystemArray = diagObj.db.getC4ShapeArray(currentBoundary.alias);\n let currentPersonOrSystemKeys = diagObj.db.getC4ShapeKeys(currentBoundary.alias);\n\n if (currentPersonOrSystemKeys.length > 0) {\n drawC4ShapeArray(\n currentBounds,\n diagram,\n currentPersonOrSystemArray,\n currentPersonOrSystemKeys\n );\n }\n parentBoundaryAlias = currentBoundary.alias;\n let nextCurrentBoundaries = diagObj.db.getBoundaries(parentBoundaryAlias);\n\n if (nextCurrentBoundaries.length > 0) {\n // draw boundary inside currentBoundary\n drawInsideBoundary(\n diagram,\n parentBoundaryAlias,\n currentBounds,\n nextCurrentBoundaries,\n diagObj\n );\n }\n // draw boundary\n if (currentBoundary.alias !== 'global') {\n drawBoundary(diagram, currentBoundary, currentBounds);\n }\n parentBounds.data.stopy = Math.max(\n currentBounds.data.stopy + conf.c4ShapeMargin,\n parentBounds.data.stopy\n );\n parentBounds.data.stopx = Math.max(\n currentBounds.data.stopx + conf.c4ShapeMargin,\n parentBounds.data.stopx\n );\n globalBoundaryMaxX = Math.max(globalBoundaryMaxX, parentBounds.data.stopx);\n globalBoundaryMaxY = Math.max(globalBoundaryMaxY, parentBounds.data.stopy);\n }\n}\n\n/**\n * Draws a sequenceDiagram in the tag with id: id based on the graph definition in text.\n *\n * @param {any} _text\n * @param {any} id\n * @param {any} _version\n * @param diagObj\n */\nexport const draw = function (_text, id, _version, diagObj) {\n conf = getConfig().c4;\n const securityLevel = getConfig().securityLevel;\n // Handle root and Document for when rendering in sandbox mode\n let sandboxElement;\n if (securityLevel === 'sandbox') {\n sandboxElement = select('#i' + id);\n }\n const root =\n securityLevel === 'sandbox'\n ? select(sandboxElement.nodes()[0].contentDocument.body)\n : select('body');\n\n let db = diagObj.db;\n\n diagObj.db.setWrap(conf.wrap);\n\n c4ShapeInRow = db.getC4ShapeInRow();\n c4BoundaryInRow = db.getC4BoundaryInRow();\n\n log.debug(`C:${JSON.stringify(conf, null, 2)}`);\n\n const diagram =\n securityLevel === 'sandbox' ? root.select(`[id=\"${id}\"]`) : select(`[id=\"${id}\"]`);\n\n svgDraw.insertComputerIcon(diagram);\n svgDraw.insertDatabaseIcon(diagram);\n svgDraw.insertClockIcon(diagram);\n\n let screenBounds = new Bounds(diagObj);\n\n screenBounds.setData(\n conf.diagramMarginX,\n conf.diagramMarginX,\n conf.diagramMarginY,\n conf.diagramMarginY\n );\n\n screenBounds.data.widthLimit = screen.availWidth;\n globalBoundaryMaxX = conf.diagramMarginX;\n globalBoundaryMaxY = conf.diagramMarginY;\n\n const title = diagObj.db.getTitle();\n let currentBoundaries = diagObj.db.getBoundaries('');\n // switch (c4type) {\n // case 'C4Context':\n drawInsideBoundary(diagram, '', screenBounds, currentBoundaries, diagObj);\n // break;\n // }\n\n // The arrow head definition is attached to the svg once\n svgDraw.insertArrowHead(diagram);\n svgDraw.insertArrowEnd(diagram);\n svgDraw.insertArrowCrossHead(diagram);\n svgDraw.insertArrowFilledHead(diagram);\n\n drawRels(diagram, diagObj.db.getRels(), diagObj.db.getC4Shape, diagObj);\n\n screenBounds.data.stopx = globalBoundaryMaxX;\n screenBounds.data.stopy = globalBoundaryMaxY;\n\n const box = screenBounds.data;\n\n // Make sure the height of the diagram supports long menus.\n let boxHeight = box.stopy - box.starty;\n\n let height = boxHeight + 2 * conf.diagramMarginY;\n\n // Make sure the width of the diagram supports wide menus.\n let boxWidth = box.stopx - box.startx;\n const width = boxWidth + 2 * conf.diagramMarginX;\n\n if (title) {\n diagram\n .append('text')\n .text(title)\n .attr('x', (box.stopx - box.startx) / 2 - 4 * conf.diagramMarginX)\n .attr('y', box.starty + conf.diagramMarginY);\n }\n\n configureSvgSize(diagram, height, width, conf.useMaxWidth);\n\n const extraVertForTitle = title ? 60 : 0;\n diagram.attr(\n 'viewBox',\n box.startx -\n conf.diagramMarginX +\n ' -' +\n (conf.diagramMarginY + extraVertForTitle) +\n ' ' +\n width +\n ' ' +\n (height + extraVertForTitle)\n );\n\n log.debug(`models:`, box);\n};\n\nexport default {\n drawPersonOrSystemArray: drawC4ShapeArray,\n drawBoundary,\n setConf,\n draw,\n};\n", "const getStyles = (options) =>\n `.person {\n stroke: ${options.personBorder};\n fill: ${options.personBkg};\n }\n`;\n\nexport default getStyles;\n", "// @ts-ignore: JISON doesn't support types\nimport parser from './parser/c4Diagram.jison';\nimport db from './c4Db.js';\nimport renderer from './c4Renderer.js';\nimport styles from './styles.js';\nimport type { MermaidConfig } from '../../config.type.js';\nimport type { DiagramDefinition } from '../../diagram-api/types.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n db,\n renderer,\n styles,\n init: ({ c4, wrap }: MermaidConfig) => {\n renderer.setConf(c4);\n db.setWrap(wrap);\n },\n};\n", "\n/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */\nfunction isNothing(subject) {\n return (typeof subject === 'undefined') || (subject === null);\n}\n\n\nfunction isObject(subject) {\n return (typeof subject === 'object') && (subject !== null);\n}\n\n\nfunction toArray(sequence) {\n if (Array.isArray(sequence)) return sequence;\n else if (isNothing(sequence)) return [];\n\n return [ sequence ];\n}\n\n\nfunction extend(target, source) {\n var index, length, key, sourceKeys;\n\n if (source) {\n sourceKeys = Object.keys(source);\n\n for (index = 0, length = sourceKeys.length; index < length; index += 1) {\n key = sourceKeys[index];\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n\nfunction repeat(string, count) {\n var result = '', cycle;\n\n for (cycle = 0; cycle < count; cycle += 1) {\n result += string;\n }\n\n return result;\n}\n\n\nfunction isNegativeZero(number) {\n return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number);\n}\n\n\nvar isNothing_1 = isNothing;\nvar isObject_1 = isObject;\nvar toArray_1 = toArray;\nvar repeat_1 = repeat;\nvar isNegativeZero_1 = isNegativeZero;\nvar extend_1 = extend;\n\nvar common = {\n\tisNothing: isNothing_1,\n\tisObject: isObject_1,\n\ttoArray: toArray_1,\n\trepeat: repeat_1,\n\tisNegativeZero: isNegativeZero_1,\n\textend: extend_1\n};\n\n// YAML error class. http://stackoverflow.com/questions/8458984\n\n\nfunction formatError(exception, compact) {\n var where = '', message = exception.reason || '(unknown reason)';\n\n if (!exception.mark) return message;\n\n if (exception.mark.name) {\n where += 'in \"' + exception.mark.name + '\" ';\n }\n\n where += '(' + (exception.mark.line + 1) + ':' + (exception.mark.column + 1) + ')';\n\n if (!compact && exception.mark.snippet) {\n where += '\\n\\n' + exception.mark.snippet;\n }\n\n return message + ' ' + where;\n}\n\n\nfunction YAMLException$1(reason, mark) {\n // Super constructor\n Error.call(this);\n\n this.name = 'YAMLException';\n this.reason = reason;\n this.mark = mark;\n this.message = formatError(this, false);\n\n // Include stack trace in error object\n if (Error.captureStackTrace) {\n // Chrome and NodeJS\n Error.captureStackTrace(this, this.constructor);\n } else {\n // FF, IE 10+ and Safari 6+. Fallback for others\n this.stack = (new Error()).stack || '';\n }\n}\n\n\n// Inherit from Error\nYAMLException$1.prototype = Object.create(Error.prototype);\nYAMLException$1.prototype.constructor = YAMLException$1;\n\n\nYAMLException$1.prototype.toString = function toString(compact) {\n return this.name + ': ' + formatError(this, compact);\n};\n\n\nvar exception = YAMLException$1;\n\n// get snippet for a single line, respecting maxLength\nfunction getLine(buffer, lineStart, lineEnd, position, maxLineLength) {\n var head = '';\n var tail = '';\n var maxHalfLength = Math.floor(maxLineLength / 2) - 1;\n\n if (position - lineStart > maxHalfLength) {\n head = ' ... ';\n lineStart = position - maxHalfLength + head.length;\n }\n\n if (lineEnd - position > maxHalfLength) {\n tail = ' ...';\n lineEnd = position + maxHalfLength - tail.length;\n }\n\n return {\n str: head + buffer.slice(lineStart, lineEnd).replace(/\\t/g, '\u2192') + tail,\n pos: position - lineStart + head.length // relative position\n };\n}\n\n\nfunction padStart(string, max) {\n return common.repeat(' ', max - string.length) + string;\n}\n\n\nfunction makeSnippet(mark, options) {\n options = Object.create(options || null);\n\n if (!mark.buffer) return null;\n\n if (!options.maxLength) options.maxLength = 79;\n if (typeof options.indent !== 'number') options.indent = 1;\n if (typeof options.linesBefore !== 'number') options.linesBefore = 3;\n if (typeof options.linesAfter !== 'number') options.linesAfter = 2;\n\n var re = /\\r?\\n|\\r|\\0/g;\n var lineStarts = [ 0 ];\n var lineEnds = [];\n var match;\n var foundLineNo = -1;\n\n while ((match = re.exec(mark.buffer))) {\n lineEnds.push(match.index);\n lineStarts.push(match.index + match[0].length);\n\n if (mark.position <= match.index && foundLineNo < 0) {\n foundLineNo = lineStarts.length - 2;\n }\n }\n\n if (foundLineNo < 0) foundLineNo = lineStarts.length - 1;\n\n var result = '', i, line;\n var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length;\n var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3);\n\n for (i = 1; i <= options.linesBefore; i++) {\n if (foundLineNo - i < 0) break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo - i],\n lineEnds[foundLineNo - i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]),\n maxLineLength\n );\n result = common.repeat(' ', options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n' + result;\n }\n\n line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength);\n result += common.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n';\n result += common.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\\n';\n\n for (i = 1; i <= options.linesAfter; i++) {\n if (foundLineNo + i >= lineEnds.length) break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo + i],\n lineEnds[foundLineNo + i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]),\n maxLineLength\n );\n result += common.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n';\n }\n\n return result.replace(/\\n$/, '');\n}\n\n\nvar snippet = makeSnippet;\n\nvar TYPE_CONSTRUCTOR_OPTIONS = [\n 'kind',\n 'multi',\n 'resolve',\n 'construct',\n 'instanceOf',\n 'predicate',\n 'represent',\n 'representName',\n 'defaultStyle',\n 'styleAliases'\n];\n\nvar YAML_NODE_KINDS = [\n 'scalar',\n 'sequence',\n 'mapping'\n];\n\nfunction compileStyleAliases(map) {\n var result = {};\n\n if (map !== null) {\n Object.keys(map).forEach(function (style) {\n map[style].forEach(function (alias) {\n result[String(alias)] = style;\n });\n });\n }\n\n return result;\n}\n\nfunction Type$1(tag, options) {\n options = options || {};\n\n Object.keys(options).forEach(function (name) {\n if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {\n throw new exception('Unknown option \"' + name + '\" is met in definition of \"' + tag + '\" YAML type.');\n }\n });\n\n // TODO: Add tag format check.\n this.options = options; // keep original options in case user wants to extend this type later\n this.tag = tag;\n this.kind = options['kind'] || null;\n this.resolve = options['resolve'] || function () { return true; };\n this.construct = options['construct'] || function (data) { return data; };\n this.instanceOf = options['instanceOf'] || null;\n this.predicate = options['predicate'] || null;\n this.represent = options['represent'] || null;\n this.representName = options['representName'] || null;\n this.defaultStyle = options['defaultStyle'] || null;\n this.multi = options['multi'] || false;\n this.styleAliases = compileStyleAliases(options['styleAliases'] || null);\n\n if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {\n throw new exception('Unknown kind \"' + this.kind + '\" is specified for \"' + tag + '\" YAML type.');\n }\n}\n\nvar type = Type$1;\n\n/*eslint-disable max-len*/\n\n\n\n\n\nfunction compileList(schema, name) {\n var result = [];\n\n schema[name].forEach(function (currentType) {\n var newIndex = result.length;\n\n result.forEach(function (previousType, previousIndex) {\n if (previousType.tag === currentType.tag &&\n previousType.kind === currentType.kind &&\n previousType.multi === currentType.multi) {\n\n newIndex = previousIndex;\n }\n });\n\n result[newIndex] = currentType;\n });\n\n return result;\n}\n\n\nfunction compileMap(/* lists... */) {\n var result = {\n scalar: {},\n sequence: {},\n mapping: {},\n fallback: {},\n multi: {\n scalar: [],\n sequence: [],\n mapping: [],\n fallback: []\n }\n }, index, length;\n\n function collectType(type) {\n if (type.multi) {\n result.multi[type.kind].push(type);\n result.multi['fallback'].push(type);\n } else {\n result[type.kind][type.tag] = result['fallback'][type.tag] = type;\n }\n }\n\n for (index = 0, length = arguments.length; index < length; index += 1) {\n arguments[index].forEach(collectType);\n }\n return result;\n}\n\n\nfunction Schema$1(definition) {\n return this.extend(definition);\n}\n\n\nSchema$1.prototype.extend = function extend(definition) {\n var implicit = [];\n var explicit = [];\n\n if (definition instanceof type) {\n // Schema.extend(type)\n explicit.push(definition);\n\n } else if (Array.isArray(definition)) {\n // Schema.extend([ type1, type2, ... ])\n explicit = explicit.concat(definition);\n\n } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) {\n // Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] })\n if (definition.implicit) implicit = implicit.concat(definition.implicit);\n if (definition.explicit) explicit = explicit.concat(definition.explicit);\n\n } else {\n throw new exception('Schema.extend argument should be a Type, [ Type ], ' +\n 'or a schema definition ({ implicit: [...], explicit: [...] })');\n }\n\n implicit.forEach(function (type$1) {\n if (!(type$1 instanceof type)) {\n throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.');\n }\n\n if (type$1.loadKind && type$1.loadKind !== 'scalar') {\n throw new exception('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.');\n }\n\n if (type$1.multi) {\n throw new exception('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.');\n }\n });\n\n explicit.forEach(function (type$1) {\n if (!(type$1 instanceof type)) {\n throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.');\n }\n });\n\n var result = Object.create(Schema$1.prototype);\n\n result.implicit = (this.implicit || []).concat(implicit);\n result.explicit = (this.explicit || []).concat(explicit);\n\n result.compiledImplicit = compileList(result, 'implicit');\n result.compiledExplicit = compileList(result, 'explicit');\n result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);\n\n return result;\n};\n\n\nvar schema = Schema$1;\n\nvar str = new type('tag:yaml.org,2002:str', {\n kind: 'scalar',\n construct: function (data) { return data !== null ? data : ''; }\n});\n\nvar seq = new type('tag:yaml.org,2002:seq', {\n kind: 'sequence',\n construct: function (data) { return data !== null ? data : []; }\n});\n\nvar map = new type('tag:yaml.org,2002:map', {\n kind: 'mapping',\n construct: function (data) { return data !== null ? data : {}; }\n});\n\nvar failsafe = new schema({\n explicit: [\n str,\n seq,\n map\n ]\n});\n\nfunction resolveYamlNull(data) {\n if (data === null) return true;\n\n var max = data.length;\n\n return (max === 1 && data === '~') ||\n (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL'));\n}\n\nfunction constructYamlNull() {\n return null;\n}\n\nfunction isNull(object) {\n return object === null;\n}\n\nvar _null = new type('tag:yaml.org,2002:null', {\n kind: 'scalar',\n resolve: resolveYamlNull,\n construct: constructYamlNull,\n predicate: isNull,\n represent: {\n canonical: function () { return '~'; },\n lowercase: function () { return 'null'; },\n uppercase: function () { return 'NULL'; },\n camelcase: function () { return 'Null'; },\n empty: function () { return ''; }\n },\n defaultStyle: 'lowercase'\n});\n\nfunction resolveYamlBoolean(data) {\n if (data === null) return false;\n\n var max = data.length;\n\n return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) ||\n (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE'));\n}\n\nfunction constructYamlBoolean(data) {\n return data === 'true' ||\n data === 'True' ||\n data === 'TRUE';\n}\n\nfunction isBoolean(object) {\n return Object.prototype.toString.call(object) === '[object Boolean]';\n}\n\nvar bool = new type('tag:yaml.org,2002:bool', {\n kind: 'scalar',\n resolve: resolveYamlBoolean,\n construct: constructYamlBoolean,\n predicate: isBoolean,\n represent: {\n lowercase: function (object) { return object ? 'true' : 'false'; },\n uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; },\n camelcase: function (object) { return object ? 'True' : 'False'; }\n },\n defaultStyle: 'lowercase'\n});\n\nfunction isHexCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) ||\n ((0x41/* A */ <= c) && (c <= 0x46/* F */)) ||\n ((0x61/* a */ <= c) && (c <= 0x66/* f */));\n}\n\nfunction isOctCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */));\n}\n\nfunction isDecCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */));\n}\n\nfunction resolveYamlInteger(data) {\n if (data === null) return false;\n\n var max = data.length,\n index = 0,\n hasDigits = false,\n ch;\n\n if (!max) return false;\n\n ch = data[index];\n\n // sign\n if (ch === '-' || ch === '+') {\n ch = data[++index];\n }\n\n if (ch === '0') {\n // 0\n if (index + 1 === max) return true;\n ch = data[++index];\n\n // base 2, base 8, base 16\n\n if (ch === 'b') {\n // base 2\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (ch !== '0' && ch !== '1') return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n\n if (ch === 'x') {\n // base 16\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isHexCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n\n if (ch === 'o') {\n // base 8\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isOctCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n }\n\n // base 10 (except 0)\n\n // value should not start with `_`;\n if (ch === '_') return false;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isDecCode(data.charCodeAt(index))) {\n return false;\n }\n hasDigits = true;\n }\n\n // Should have digits and should not end with `_`\n if (!hasDigits || ch === '_') return false;\n\n return true;\n}\n\nfunction constructYamlInteger(data) {\n var value = data, sign = 1, ch;\n\n if (value.indexOf('_') !== -1) {\n value = value.replace(/_/g, '');\n }\n\n ch = value[0];\n\n if (ch === '-' || ch === '+') {\n if (ch === '-') sign = -1;\n value = value.slice(1);\n ch = value[0];\n }\n\n if (value === '0') return 0;\n\n if (ch === '0') {\n if (value[1] === 'b') return sign * parseInt(value.slice(2), 2);\n if (value[1] === 'x') return sign * parseInt(value.slice(2), 16);\n if (value[1] === 'o') return sign * parseInt(value.slice(2), 8);\n }\n\n return sign * parseInt(value, 10);\n}\n\nfunction isInteger(object) {\n return (Object.prototype.toString.call(object)) === '[object Number]' &&\n (object % 1 === 0 && !common.isNegativeZero(object));\n}\n\nvar int = new type('tag:yaml.org,2002:int', {\n kind: 'scalar',\n resolve: resolveYamlInteger,\n construct: constructYamlInteger,\n predicate: isInteger,\n represent: {\n binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); },\n octal: function (obj) { return obj >= 0 ? '0o' + obj.toString(8) : '-0o' + obj.toString(8).slice(1); },\n decimal: function (obj) { return obj.toString(10); },\n /* eslint-disable max-len */\n hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); }\n },\n defaultStyle: 'decimal',\n styleAliases: {\n binary: [ 2, 'bin' ],\n octal: [ 8, 'oct' ],\n decimal: [ 10, 'dec' ],\n hexadecimal: [ 16, 'hex' ]\n }\n});\n\nvar YAML_FLOAT_PATTERN = new RegExp(\n // 2.5e4, 2.5 and integers\n '^(?:[-+]?(?:[0-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' +\n // .2e4, .2\n // special case, seems not from spec\n '|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' +\n // .inf\n '|[-+]?\\\\.(?:inf|Inf|INF)' +\n // .nan\n '|\\\\.(?:nan|NaN|NAN))$');\n\nfunction resolveYamlFloat(data) {\n if (data === null) return false;\n\n if (!YAML_FLOAT_PATTERN.test(data) ||\n // Quick hack to not allow integers end with `_`\n // Probably should update regexp & check speed\n data[data.length - 1] === '_') {\n return false;\n }\n\n return true;\n}\n\nfunction constructYamlFloat(data) {\n var value, sign;\n\n value = data.replace(/_/g, '').toLowerCase();\n sign = value[0] === '-' ? -1 : 1;\n\n if ('+-'.indexOf(value[0]) >= 0) {\n value = value.slice(1);\n }\n\n if (value === '.inf') {\n return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;\n\n } else if (value === '.nan') {\n return NaN;\n }\n return sign * parseFloat(value, 10);\n}\n\n\nvar SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;\n\nfunction representYamlFloat(object, style) {\n var res;\n\n if (isNaN(object)) {\n switch (style) {\n case 'lowercase': return '.nan';\n case 'uppercase': return '.NAN';\n case 'camelcase': return '.NaN';\n }\n } else if (Number.POSITIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '.inf';\n case 'uppercase': return '.INF';\n case 'camelcase': return '.Inf';\n }\n } else if (Number.NEGATIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '-.inf';\n case 'uppercase': return '-.INF';\n case 'camelcase': return '-.Inf';\n }\n } else if (common.isNegativeZero(object)) {\n return '-0.0';\n }\n\n res = object.toString(10);\n\n // JS stringifier can build scientific format without dots: 5e-100,\n // while YAML requres dot: 5.e-100. Fix it with simple hack\n\n return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res;\n}\n\nfunction isFloat(object) {\n return (Object.prototype.toString.call(object) === '[object Number]') &&\n (object % 1 !== 0 || common.isNegativeZero(object));\n}\n\nvar float = new type('tag:yaml.org,2002:float', {\n kind: 'scalar',\n resolve: resolveYamlFloat,\n construct: constructYamlFloat,\n predicate: isFloat,\n represent: representYamlFloat,\n defaultStyle: 'lowercase'\n});\n\nvar json = failsafe.extend({\n implicit: [\n _null,\n bool,\n int,\n float\n ]\n});\n\nvar core = json;\n\nvar YAML_DATE_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' + // [1] year\n '-([0-9][0-9])' + // [2] month\n '-([0-9][0-9])$'); // [3] day\n\nvar YAML_TIMESTAMP_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' + // [1] year\n '-([0-9][0-9]?)' + // [2] month\n '-([0-9][0-9]?)' + // [3] day\n '(?:[Tt]|[ \\\\t]+)' + // ...\n '([0-9][0-9]?)' + // [4] hour\n ':([0-9][0-9])' + // [5] minute\n ':([0-9][0-9])' + // [6] second\n '(?:\\\\.([0-9]*))?' + // [7] fraction\n '(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour\n '(?::([0-9][0-9]))?))?$'); // [11] tz_minute\n\nfunction resolveYamlTimestamp(data) {\n if (data === null) return false;\n if (YAML_DATE_REGEXP.exec(data) !== null) return true;\n if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;\n return false;\n}\n\nfunction constructYamlTimestamp(data) {\n var match, year, month, day, hour, minute, second, fraction = 0,\n delta = null, tz_hour, tz_minute, date;\n\n match = YAML_DATE_REGEXP.exec(data);\n if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);\n\n if (match === null) throw new Error('Date resolve error');\n\n // match: [1] year [2] month [3] day\n\n year = +(match[1]);\n month = +(match[2]) - 1; // JS month starts with 0\n day = +(match[3]);\n\n if (!match[4]) { // no hour\n return new Date(Date.UTC(year, month, day));\n }\n\n // match: [4] hour [5] minute [6] second [7] fraction\n\n hour = +(match[4]);\n minute = +(match[5]);\n second = +(match[6]);\n\n if (match[7]) {\n fraction = match[7].slice(0, 3);\n while (fraction.length < 3) { // milli-seconds\n fraction += '0';\n }\n fraction = +fraction;\n }\n\n // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute\n\n if (match[9]) {\n tz_hour = +(match[10]);\n tz_minute = +(match[11] || 0);\n delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds\n if (match[9] === '-') delta = -delta;\n }\n\n date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));\n\n if (delta) date.setTime(date.getTime() - delta);\n\n return date;\n}\n\nfunction representYamlTimestamp(object /*, style*/) {\n return object.toISOString();\n}\n\nvar timestamp = new type('tag:yaml.org,2002:timestamp', {\n kind: 'scalar',\n resolve: resolveYamlTimestamp,\n construct: constructYamlTimestamp,\n instanceOf: Date,\n represent: representYamlTimestamp\n});\n\nfunction resolveYamlMerge(data) {\n return data === '<<' || data === null;\n}\n\nvar merge = new type('tag:yaml.org,2002:merge', {\n kind: 'scalar',\n resolve: resolveYamlMerge\n});\n\n/*eslint-disable no-bitwise*/\n\n\n\n\n\n// [ 64, 65, 66 ] -> [ padding, CR, LF ]\nvar BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r';\n\n\nfunction resolveYamlBinary(data) {\n if (data === null) return false;\n\n var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP;\n\n // Convert one by one.\n for (idx = 0; idx < max; idx++) {\n code = map.indexOf(data.charAt(idx));\n\n // Skip CR/LF\n if (code > 64) continue;\n\n // Fail on illegal characters\n if (code < 0) return false;\n\n bitlen += 6;\n }\n\n // If there are any bits left, source was corrupted\n return (bitlen % 8) === 0;\n}\n\nfunction constructYamlBinary(data) {\n var idx, tailbits,\n input = data.replace(/[\\r\\n=]/g, ''), // remove CR/LF & padding to simplify scan\n max = input.length,\n map = BASE64_MAP,\n bits = 0,\n result = [];\n\n // Collect by 6*4 bits (3 bytes)\n\n for (idx = 0; idx < max; idx++) {\n if ((idx % 4 === 0) && idx) {\n result.push((bits >> 16) & 0xFF);\n result.push((bits >> 8) & 0xFF);\n result.push(bits & 0xFF);\n }\n\n bits = (bits << 6) | map.indexOf(input.charAt(idx));\n }\n\n // Dump tail\n\n tailbits = (max % 4) * 6;\n\n if (tailbits === 0) {\n result.push((bits >> 16) & 0xFF);\n result.push((bits >> 8) & 0xFF);\n result.push(bits & 0xFF);\n } else if (tailbits === 18) {\n result.push((bits >> 10) & 0xFF);\n result.push((bits >> 2) & 0xFF);\n } else if (tailbits === 12) {\n result.push((bits >> 4) & 0xFF);\n }\n\n return new Uint8Array(result);\n}\n\nfunction representYamlBinary(object /*, style*/) {\n var result = '', bits = 0, idx, tail,\n max = object.length,\n map = BASE64_MAP;\n\n // Convert every three bytes to 4 ASCII characters.\n\n for (idx = 0; idx < max; idx++) {\n if ((idx % 3 === 0) && idx) {\n result += map[(bits >> 18) & 0x3F];\n result += map[(bits >> 12) & 0x3F];\n result += map[(bits >> 6) & 0x3F];\n result += map[bits & 0x3F];\n }\n\n bits = (bits << 8) + object[idx];\n }\n\n // Dump tail\n\n tail = max % 3;\n\n if (tail === 0) {\n result += map[(bits >> 18) & 0x3F];\n result += map[(bits >> 12) & 0x3F];\n result += map[(bits >> 6) & 0x3F];\n result += map[bits & 0x3F];\n } else if (tail === 2) {\n result += map[(bits >> 10) & 0x3F];\n result += map[(bits >> 4) & 0x3F];\n result += map[(bits << 2) & 0x3F];\n result += map[64];\n } else if (tail === 1) {\n result += map[(bits >> 2) & 0x3F];\n result += map[(bits << 4) & 0x3F];\n result += map[64];\n result += map[64];\n }\n\n return result;\n}\n\nfunction isBinary(obj) {\n return Object.prototype.toString.call(obj) === '[object Uint8Array]';\n}\n\nvar binary = new type('tag:yaml.org,2002:binary', {\n kind: 'scalar',\n resolve: resolveYamlBinary,\n construct: constructYamlBinary,\n predicate: isBinary,\n represent: representYamlBinary\n});\n\nvar _hasOwnProperty$3 = Object.prototype.hasOwnProperty;\nvar _toString$2 = Object.prototype.toString;\n\nfunction resolveYamlOmap(data) {\n if (data === null) return true;\n\n var objectKeys = [], index, length, pair, pairKey, pairHasKey,\n object = data;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n pairHasKey = false;\n\n if (_toString$2.call(pair) !== '[object Object]') return false;\n\n for (pairKey in pair) {\n if (_hasOwnProperty$3.call(pair, pairKey)) {\n if (!pairHasKey) pairHasKey = true;\n else return false;\n }\n }\n\n if (!pairHasKey) return false;\n\n if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);\n else return false;\n }\n\n return true;\n}\n\nfunction constructYamlOmap(data) {\n return data !== null ? data : [];\n}\n\nvar omap = new type('tag:yaml.org,2002:omap', {\n kind: 'sequence',\n resolve: resolveYamlOmap,\n construct: constructYamlOmap\n});\n\nvar _toString$1 = Object.prototype.toString;\n\nfunction resolveYamlPairs(data) {\n if (data === null) return true;\n\n var index, length, pair, keys, result,\n object = data;\n\n result = new Array(object.length);\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n\n if (_toString$1.call(pair) !== '[object Object]') return false;\n\n keys = Object.keys(pair);\n\n if (keys.length !== 1) return false;\n\n result[index] = [ keys[0], pair[keys[0]] ];\n }\n\n return true;\n}\n\nfunction constructYamlPairs(data) {\n if (data === null) return [];\n\n var index, length, pair, keys, result,\n object = data;\n\n result = new Array(object.length);\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n\n keys = Object.keys(pair);\n\n result[index] = [ keys[0], pair[keys[0]] ];\n }\n\n return result;\n}\n\nvar pairs = new type('tag:yaml.org,2002:pairs', {\n kind: 'sequence',\n resolve: resolveYamlPairs,\n construct: constructYamlPairs\n});\n\nvar _hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n\nfunction resolveYamlSet(data) {\n if (data === null) return true;\n\n var key, object = data;\n\n for (key in object) {\n if (_hasOwnProperty$2.call(object, key)) {\n if (object[key] !== null) return false;\n }\n }\n\n return true;\n}\n\nfunction constructYamlSet(data) {\n return data !== null ? data : {};\n}\n\nvar set = new type('tag:yaml.org,2002:set', {\n kind: 'mapping',\n resolve: resolveYamlSet,\n construct: constructYamlSet\n});\n\nvar _default = core.extend({\n implicit: [\n timestamp,\n merge\n ],\n explicit: [\n binary,\n omap,\n pairs,\n set\n ]\n});\n\n/*eslint-disable max-len,no-use-before-define*/\n\n\n\n\n\n\n\nvar _hasOwnProperty$1 = Object.prototype.hasOwnProperty;\n\n\nvar CONTEXT_FLOW_IN = 1;\nvar CONTEXT_FLOW_OUT = 2;\nvar CONTEXT_BLOCK_IN = 3;\nvar CONTEXT_BLOCK_OUT = 4;\n\n\nvar CHOMPING_CLIP = 1;\nvar CHOMPING_STRIP = 2;\nvar CHOMPING_KEEP = 3;\n\n\nvar PATTERN_NON_PRINTABLE = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nvar PATTERN_NON_ASCII_LINE_BREAKS = /[\\x85\\u2028\\u2029]/;\nvar PATTERN_FLOW_INDICATORS = /[,\\[\\]\\{\\}]/;\nvar PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\\-]+!)$/i;\nvar PATTERN_TAG_URI = /^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction is_EOL(c) {\n return (c === 0x0A/* LF */) || (c === 0x0D/* CR */);\n}\n\nfunction is_WHITE_SPACE(c) {\n return (c === 0x09/* Tab */) || (c === 0x20/* Space */);\n}\n\nfunction is_WS_OR_EOL(c) {\n return (c === 0x09/* Tab */) ||\n (c === 0x20/* Space */) ||\n (c === 0x0A/* LF */) ||\n (c === 0x0D/* CR */);\n}\n\nfunction is_FLOW_INDICATOR(c) {\n return c === 0x2C/* , */ ||\n c === 0x5B/* [ */ ||\n c === 0x5D/* ] */ ||\n c === 0x7B/* { */ ||\n c === 0x7D/* } */;\n}\n\nfunction fromHexCode(c) {\n var lc;\n\n if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n return c - 0x30;\n }\n\n /*eslint-disable no-bitwise*/\n lc = c | 0x20;\n\n if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) {\n return lc - 0x61 + 10;\n }\n\n return -1;\n}\n\nfunction escapedHexLen(c) {\n if (c === 0x78/* x */) { return 2; }\n if (c === 0x75/* u */) { return 4; }\n if (c === 0x55/* U */) { return 8; }\n return 0;\n}\n\nfunction fromDecimalCode(c) {\n if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n return c - 0x30;\n }\n\n return -1;\n}\n\nfunction simpleEscapeSequence(c) {\n /* eslint-disable indent */\n return (c === 0x30/* 0 */) ? '\\x00' :\n (c === 0x61/* a */) ? '\\x07' :\n (c === 0x62/* b */) ? '\\x08' :\n (c === 0x74/* t */) ? '\\x09' :\n (c === 0x09/* Tab */) ? '\\x09' :\n (c === 0x6E/* n */) ? '\\x0A' :\n (c === 0x76/* v */) ? '\\x0B' :\n (c === 0x66/* f */) ? '\\x0C' :\n (c === 0x72/* r */) ? '\\x0D' :\n (c === 0x65/* e */) ? '\\x1B' :\n (c === 0x20/* Space */) ? ' ' :\n (c === 0x22/* \" */) ? '\\x22' :\n (c === 0x2F/* / */) ? '/' :\n (c === 0x5C/* \\ */) ? '\\x5C' :\n (c === 0x4E/* N */) ? '\\x85' :\n (c === 0x5F/* _ */) ? '\\xA0' :\n (c === 0x4C/* L */) ? '\\u2028' :\n (c === 0x50/* P */) ? '\\u2029' : '';\n}\n\nfunction charFromCodepoint(c) {\n if (c <= 0xFFFF) {\n return String.fromCharCode(c);\n }\n // Encode UTF-16 surrogate pair\n // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF\n return String.fromCharCode(\n ((c - 0x010000) >> 10) + 0xD800,\n ((c - 0x010000) & 0x03FF) + 0xDC00\n );\n}\n\nvar simpleEscapeCheck = new Array(256); // integer, for fast access\nvar simpleEscapeMap = new Array(256);\nfor (var i = 0; i < 256; i++) {\n simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;\n simpleEscapeMap[i] = simpleEscapeSequence(i);\n}\n\n\nfunction State$1(input, options) {\n this.input = input;\n\n this.filename = options['filename'] || null;\n this.schema = options['schema'] || _default;\n this.onWarning = options['onWarning'] || null;\n // (Hidden) Remove? makes the loader to expect YAML 1.1 documents\n // if such documents have no explicit %YAML directive\n this.legacy = options['legacy'] || false;\n\n this.json = options['json'] || false;\n this.listener = options['listener'] || null;\n\n this.implicitTypes = this.schema.compiledImplicit;\n this.typeMap = this.schema.compiledTypeMap;\n\n this.length = input.length;\n this.position = 0;\n this.line = 0;\n this.lineStart = 0;\n this.lineIndent = 0;\n\n // position of first leading tab in the current line,\n // used to make sure there are no tabs in the indentation\n this.firstTabInLine = -1;\n\n this.documents = [];\n\n /*\n this.version;\n this.checkLineBreaks;\n this.tagMap;\n this.anchorMap;\n this.tag;\n this.anchor;\n this.kind;\n this.result;*/\n\n}\n\n\nfunction generateError(state, message) {\n var mark = {\n name: state.filename,\n buffer: state.input.slice(0, -1), // omit trailing \\0\n position: state.position,\n line: state.line,\n column: state.position - state.lineStart\n };\n\n mark.snippet = snippet(mark);\n\n return new exception(message, mark);\n}\n\nfunction throwError(state, message) {\n throw generateError(state, message);\n}\n\nfunction throwWarning(state, message) {\n if (state.onWarning) {\n state.onWarning.call(null, generateError(state, message));\n }\n}\n\n\nvar directiveHandlers = {\n\n YAML: function handleYamlDirective(state, name, args) {\n\n var match, major, minor;\n\n if (state.version !== null) {\n throwError(state, 'duplication of %YAML directive');\n }\n\n if (args.length !== 1) {\n throwError(state, 'YAML directive accepts exactly one argument');\n }\n\n match = /^([0-9]+)\\.([0-9]+)$/.exec(args[0]);\n\n if (match === null) {\n throwError(state, 'ill-formed argument of the YAML directive');\n }\n\n major = parseInt(match[1], 10);\n minor = parseInt(match[2], 10);\n\n if (major !== 1) {\n throwError(state, 'unacceptable YAML version of the document');\n }\n\n state.version = args[0];\n state.checkLineBreaks = (minor < 2);\n\n if (minor !== 1 && minor !== 2) {\n throwWarning(state, 'unsupported YAML version of the document');\n }\n },\n\n TAG: function handleTagDirective(state, name, args) {\n\n var handle, prefix;\n\n if (args.length !== 2) {\n throwError(state, 'TAG directive accepts exactly two arguments');\n }\n\n handle = args[0];\n prefix = args[1];\n\n if (!PATTERN_TAG_HANDLE.test(handle)) {\n throwError(state, 'ill-formed tag handle (first argument) of the TAG directive');\n }\n\n if (_hasOwnProperty$1.call(state.tagMap, handle)) {\n throwError(state, 'there is a previously declared suffix for \"' + handle + '\" tag handle');\n }\n\n if (!PATTERN_TAG_URI.test(prefix)) {\n throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive');\n }\n\n try {\n prefix = decodeURIComponent(prefix);\n } catch (err) {\n throwError(state, 'tag prefix is malformed: ' + prefix);\n }\n\n state.tagMap[handle] = prefix;\n }\n};\n\n\nfunction captureSegment(state, start, end, checkJson) {\n var _position, _length, _character, _result;\n\n if (start < end) {\n _result = state.input.slice(start, end);\n\n if (checkJson) {\n for (_position = 0, _length = _result.length; _position < _length; _position += 1) {\n _character = _result.charCodeAt(_position);\n if (!(_character === 0x09 ||\n (0x20 <= _character && _character <= 0x10FFFF))) {\n throwError(state, 'expected valid JSON character');\n }\n }\n } else if (PATTERN_NON_PRINTABLE.test(_result)) {\n throwError(state, 'the stream contains non-printable characters');\n }\n\n state.result += _result;\n }\n}\n\nfunction mergeMappings(state, destination, source, overridableKeys) {\n var sourceKeys, key, index, quantity;\n\n if (!common.isObject(source)) {\n throwError(state, 'cannot merge mappings; the provided source object is unacceptable');\n }\n\n sourceKeys = Object.keys(source);\n\n for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {\n key = sourceKeys[index];\n\n if (!_hasOwnProperty$1.call(destination, key)) {\n destination[key] = source[key];\n overridableKeys[key] = true;\n }\n }\n}\n\nfunction storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode,\n startLine, startLineStart, startPos) {\n\n var index, quantity;\n\n // The output is a plain object here, so keys can only be strings.\n // We need to convert keyNode to a string, but doing so can hang the process\n // (deeply nested arrays that explode exponentially using aliases).\n if (Array.isArray(keyNode)) {\n keyNode = Array.prototype.slice.call(keyNode);\n\n for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {\n if (Array.isArray(keyNode[index])) {\n throwError(state, 'nested arrays are not supported inside keys');\n }\n\n if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') {\n keyNode[index] = '[object Object]';\n }\n }\n }\n\n // Avoid code execution in load() via toString property\n // (still use its own toString for arrays, timestamps,\n // and whatever user schema extensions happen to have @@toStringTag)\n if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') {\n keyNode = '[object Object]';\n }\n\n\n keyNode = String(keyNode);\n\n if (_result === null) {\n _result = {};\n }\n\n if (keyTag === 'tag:yaml.org,2002:merge') {\n if (Array.isArray(valueNode)) {\n for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {\n mergeMappings(state, _result, valueNode[index], overridableKeys);\n }\n } else {\n mergeMappings(state, _result, valueNode, overridableKeys);\n }\n } else {\n if (!state.json &&\n !_hasOwnProperty$1.call(overridableKeys, keyNode) &&\n _hasOwnProperty$1.call(_result, keyNode)) {\n state.line = startLine || state.line;\n state.lineStart = startLineStart || state.lineStart;\n state.position = startPos || state.position;\n throwError(state, 'duplicated mapping key');\n }\n\n // used for this specific key only because Object.defineProperty is slow\n if (keyNode === '__proto__') {\n Object.defineProperty(_result, keyNode, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: valueNode\n });\n } else {\n _result[keyNode] = valueNode;\n }\n delete overridableKeys[keyNode];\n }\n\n return _result;\n}\n\nfunction readLineBreak(state) {\n var ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x0A/* LF */) {\n state.position++;\n } else if (ch === 0x0D/* CR */) {\n state.position++;\n if (state.input.charCodeAt(state.position) === 0x0A/* LF */) {\n state.position++;\n }\n } else {\n throwError(state, 'a line break is expected');\n }\n\n state.line += 1;\n state.lineStart = state.position;\n state.firstTabInLine = -1;\n}\n\nfunction skipSeparationSpace(state, allowComments, checkIndent) {\n var lineBreaks = 0,\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) {\n state.firstTabInLine = state.position;\n }\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (allowComments && ch === 0x23/* # */) {\n do {\n ch = state.input.charCodeAt(++state.position);\n } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0);\n }\n\n if (is_EOL(ch)) {\n readLineBreak(state);\n\n ch = state.input.charCodeAt(state.position);\n lineBreaks++;\n state.lineIndent = 0;\n\n while (ch === 0x20/* Space */) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n } else {\n break;\n }\n }\n\n if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {\n throwWarning(state, 'deficient indentation');\n }\n\n return lineBreaks;\n}\n\nfunction testDocumentSeparator(state) {\n var _position = state.position,\n ch;\n\n ch = state.input.charCodeAt(_position);\n\n // Condition state.position === state.lineStart is tested\n // in parent on each call, for efficiency. No needs to test here again.\n if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) &&\n ch === state.input.charCodeAt(_position + 1) &&\n ch === state.input.charCodeAt(_position + 2)) {\n\n _position += 3;\n\n ch = state.input.charCodeAt(_position);\n\n if (ch === 0 || is_WS_OR_EOL(ch)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction writeFoldedLines(state, count) {\n if (count === 1) {\n state.result += ' ';\n } else if (count > 1) {\n state.result += common.repeat('\\n', count - 1);\n }\n}\n\n\nfunction readPlainScalar(state, nodeIndent, withinFlowCollection) {\n var preceding,\n following,\n captureStart,\n captureEnd,\n hasPendingContent,\n _line,\n _lineStart,\n _lineIndent,\n _kind = state.kind,\n _result = state.result,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (is_WS_OR_EOL(ch) ||\n is_FLOW_INDICATOR(ch) ||\n ch === 0x23/* # */ ||\n ch === 0x26/* & */ ||\n ch === 0x2A/* * */ ||\n ch === 0x21/* ! */ ||\n ch === 0x7C/* | */ ||\n ch === 0x3E/* > */ ||\n ch === 0x27/* ' */ ||\n ch === 0x22/* \" */ ||\n ch === 0x25/* % */ ||\n ch === 0x40/* @ */ ||\n ch === 0x60/* ` */) {\n return false;\n }\n\n if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following) ||\n withinFlowCollection && is_FLOW_INDICATOR(following)) {\n return false;\n }\n }\n\n state.kind = 'scalar';\n state.result = '';\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n\n while (ch !== 0) {\n if (ch === 0x3A/* : */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following) ||\n withinFlowCollection && is_FLOW_INDICATOR(following)) {\n break;\n }\n\n } else if (ch === 0x23/* # */) {\n preceding = state.input.charCodeAt(state.position - 1);\n\n if (is_WS_OR_EOL(preceding)) {\n break;\n }\n\n } else if ((state.position === state.lineStart && testDocumentSeparator(state)) ||\n withinFlowCollection && is_FLOW_INDICATOR(ch)) {\n break;\n\n } else if (is_EOL(ch)) {\n _line = state.line;\n _lineStart = state.lineStart;\n _lineIndent = state.lineIndent;\n skipSeparationSpace(state, false, -1);\n\n if (state.lineIndent >= nodeIndent) {\n hasPendingContent = true;\n ch = state.input.charCodeAt(state.position);\n continue;\n } else {\n state.position = captureEnd;\n state.line = _line;\n state.lineStart = _lineStart;\n state.lineIndent = _lineIndent;\n break;\n }\n }\n\n if (hasPendingContent) {\n captureSegment(state, captureStart, captureEnd, false);\n writeFoldedLines(state, state.line - _line);\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n }\n\n if (!is_WHITE_SPACE(ch)) {\n captureEnd = state.position + 1;\n }\n\n ch = state.input.charCodeAt(++state.position);\n }\n\n captureSegment(state, captureStart, captureEnd, false);\n\n if (state.result) {\n return true;\n }\n\n state.kind = _kind;\n state.result = _result;\n return false;\n}\n\nfunction readSingleQuotedScalar(state, nodeIndent) {\n var ch,\n captureStart, captureEnd;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x27/* ' */) {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n state.position++;\n captureStart = captureEnd = state.position;\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 0x27/* ' */) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x27/* ' */) {\n captureStart = state.position;\n state.position++;\n captureEnd = state.position;\n } else {\n return true;\n }\n\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a single quoted scalar');\n\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a single quoted scalar');\n}\n\nfunction readDoubleQuotedScalar(state, nodeIndent) {\n var captureStart,\n captureEnd,\n hexLength,\n hexResult,\n tmp,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x22/* \" */) {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n state.position++;\n captureStart = captureEnd = state.position;\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 0x22/* \" */) {\n captureSegment(state, captureStart, state.position, true);\n state.position++;\n return true;\n\n } else if (ch === 0x5C/* \\ */) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n\n if (is_EOL(ch)) {\n skipSeparationSpace(state, false, nodeIndent);\n\n // TODO: rework to inline fn with no type cast?\n } else if (ch < 256 && simpleEscapeCheck[ch]) {\n state.result += simpleEscapeMap[ch];\n state.position++;\n\n } else if ((tmp = escapedHexLen(ch)) > 0) {\n hexLength = tmp;\n hexResult = 0;\n\n for (; hexLength > 0; hexLength--) {\n ch = state.input.charCodeAt(++state.position);\n\n if ((tmp = fromHexCode(ch)) >= 0) {\n hexResult = (hexResult << 4) + tmp;\n\n } else {\n throwError(state, 'expected hexadecimal character');\n }\n }\n\n state.result += charFromCodepoint(hexResult);\n\n state.position++;\n\n } else {\n throwError(state, 'unknown escape sequence');\n }\n\n captureStart = captureEnd = state.position;\n\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a double quoted scalar');\n\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a double quoted scalar');\n}\n\nfunction readFlowCollection(state, nodeIndent) {\n var readNext = true,\n _line,\n _lineStart,\n _pos,\n _tag = state.tag,\n _result,\n _anchor = state.anchor,\n following,\n terminator,\n isPair,\n isExplicitPair,\n isMapping,\n overridableKeys = Object.create(null),\n keyNode,\n keyTag,\n valueNode,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x5B/* [ */) {\n terminator = 0x5D;/* ] */\n isMapping = false;\n _result = [];\n } else if (ch === 0x7B/* { */) {\n terminator = 0x7D;/* } */\n isMapping = true;\n _result = {};\n } else {\n return false;\n }\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(++state.position);\n\n while (ch !== 0) {\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === terminator) {\n state.position++;\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = isMapping ? 'mapping' : 'sequence';\n state.result = _result;\n return true;\n } else if (!readNext) {\n throwError(state, 'missed comma between flow collection entries');\n } else if (ch === 0x2C/* , */) {\n // \"flow collection entries can never be completely empty\", as per YAML 1.2, section 7.4\n throwError(state, \"expected the node content, but found ','\");\n }\n\n keyTag = keyNode = valueNode = null;\n isPair = isExplicitPair = false;\n\n if (ch === 0x3F/* ? */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following)) {\n isPair = isExplicitPair = true;\n state.position++;\n skipSeparationSpace(state, true, nodeIndent);\n }\n }\n\n _line = state.line; // Save the current line.\n _lineStart = state.lineStart;\n _pos = state.position;\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n keyTag = state.tag;\n keyNode = state.result;\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) {\n isPair = true;\n ch = state.input.charCodeAt(++state.position);\n skipSeparationSpace(state, true, nodeIndent);\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n valueNode = state.result;\n }\n\n if (isMapping) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos);\n } else if (isPair) {\n _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos));\n } else {\n _result.push(keyNode);\n }\n\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x2C/* , */) {\n readNext = true;\n ch = state.input.charCodeAt(++state.position);\n } else {\n readNext = false;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a flow collection');\n}\n\nfunction readBlockScalar(state, nodeIndent) {\n var captureStart,\n folding,\n chomping = CHOMPING_CLIP,\n didReadContent = false,\n detectedIndent = false,\n textIndent = nodeIndent,\n emptyLines = 0,\n atMoreIndented = false,\n tmp,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x7C/* | */) {\n folding = false;\n } else if (ch === 0x3E/* > */) {\n folding = true;\n } else {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n\n while (ch !== 0) {\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n if (CHOMPING_CLIP === chomping) {\n chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP;\n } else {\n throwError(state, 'repeat of a chomping mode identifier');\n }\n\n } else if ((tmp = fromDecimalCode(ch)) >= 0) {\n if (tmp === 0) {\n throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one');\n } else if (!detectedIndent) {\n textIndent = nodeIndent + tmp - 1;\n detectedIndent = true;\n } else {\n throwError(state, 'repeat of an indentation width identifier');\n }\n\n } else {\n break;\n }\n }\n\n if (is_WHITE_SPACE(ch)) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (is_WHITE_SPACE(ch));\n\n if (ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (!is_EOL(ch) && (ch !== 0));\n }\n }\n\n while (ch !== 0) {\n readLineBreak(state);\n state.lineIndent = 0;\n\n ch = state.input.charCodeAt(state.position);\n\n while ((!detectedIndent || state.lineIndent < textIndent) &&\n (ch === 0x20/* Space */)) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (!detectedIndent && state.lineIndent > textIndent) {\n textIndent = state.lineIndent;\n }\n\n if (is_EOL(ch)) {\n emptyLines++;\n continue;\n }\n\n // End of the scalar.\n if (state.lineIndent < textIndent) {\n\n // Perform the chomping.\n if (chomping === CHOMPING_KEEP) {\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n } else if (chomping === CHOMPING_CLIP) {\n if (didReadContent) { // i.e. only if the scalar is not empty.\n state.result += '\\n';\n }\n }\n\n // Break this `while` cycle and go to the funciton's epilogue.\n break;\n }\n\n // Folded style: use fancy rules to handle line breaks.\n if (folding) {\n\n // Lines starting with white space characters (more-indented lines) are not folded.\n if (is_WHITE_SPACE(ch)) {\n atMoreIndented = true;\n // except for the first content line (cf. Example 8.1)\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n\n // End of more-indented block.\n } else if (atMoreIndented) {\n atMoreIndented = false;\n state.result += common.repeat('\\n', emptyLines + 1);\n\n // Just one line break - perceive as the same line.\n } else if (emptyLines === 0) {\n if (didReadContent) { // i.e. only if we have already read some scalar content.\n state.result += ' ';\n }\n\n // Several line breaks - perceive as different lines.\n } else {\n state.result += common.repeat('\\n', emptyLines);\n }\n\n // Literal style: just add exact number of line breaks between content lines.\n } else {\n // Keep all line breaks except the header line break.\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n }\n\n didReadContent = true;\n detectedIndent = true;\n emptyLines = 0;\n captureStart = state.position;\n\n while (!is_EOL(ch) && (ch !== 0)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n captureSegment(state, captureStart, state.position, false);\n }\n\n return true;\n}\n\nfunction readBlockSequence(state, nodeIndent) {\n var _line,\n _tag = state.tag,\n _anchor = state.anchor,\n _result = [],\n following,\n detected = false,\n ch;\n\n // there is a leading tab before this token, so it can't be a block sequence/mapping;\n // it can still be flow sequence/mapping or a scalar\n if (state.firstTabInLine !== -1) return false;\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n if (state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine;\n throwError(state, 'tab characters must not be used in indentation');\n }\n\n if (ch !== 0x2D/* - */) {\n break;\n }\n\n following = state.input.charCodeAt(state.position + 1);\n\n if (!is_WS_OR_EOL(following)) {\n break;\n }\n\n detected = true;\n state.position++;\n\n if (skipSeparationSpace(state, true, -1)) {\n if (state.lineIndent <= nodeIndent) {\n _result.push(null);\n ch = state.input.charCodeAt(state.position);\n continue;\n }\n }\n\n _line = state.line;\n composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);\n _result.push(state.result);\n skipSeparationSpace(state, true, -1);\n\n ch = state.input.charCodeAt(state.position);\n\n if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {\n throwError(state, 'bad indentation of a sequence entry');\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = 'sequence';\n state.result = _result;\n return true;\n }\n return false;\n}\n\nfunction readBlockMapping(state, nodeIndent, flowIndent) {\n var following,\n allowCompact,\n _line,\n _keyLine,\n _keyLineStart,\n _keyPos,\n _tag = state.tag,\n _anchor = state.anchor,\n _result = {},\n overridableKeys = Object.create(null),\n keyTag = null,\n keyNode = null,\n valueNode = null,\n atExplicitKey = false,\n detected = false,\n ch;\n\n // there is a leading tab before this token, so it can't be a block sequence/mapping;\n // it can still be flow sequence/mapping or a scalar\n if (state.firstTabInLine !== -1) return false;\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n if (!atExplicitKey && state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine;\n throwError(state, 'tab characters must not be used in indentation');\n }\n\n following = state.input.charCodeAt(state.position + 1);\n _line = state.line; // Save the current line.\n\n //\n // Explicit notation case. There are two separate blocks:\n // first for the key (denoted by \"?\") and second for the value (denoted by \":\")\n //\n if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) {\n\n if (ch === 0x3F/* ? */) {\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n detected = true;\n atExplicitKey = true;\n allowCompact = true;\n\n } else if (atExplicitKey) {\n // i.e. 0x3A/* : */ === character after the explicit key.\n atExplicitKey = false;\n allowCompact = true;\n\n } else {\n throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line');\n }\n\n state.position += 1;\n ch = following;\n\n //\n // Implicit notation case. Flow-style node as the key first, then \":\", and the value.\n //\n } else {\n _keyLine = state.line;\n _keyLineStart = state.lineStart;\n _keyPos = state.position;\n\n if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {\n // Neither implicit nor explicit notation.\n // Reading is done. Go to the epilogue.\n break;\n }\n\n if (state.line === _line) {\n ch = state.input.charCodeAt(state.position);\n\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (ch === 0x3A/* : */) {\n ch = state.input.charCodeAt(++state.position);\n\n if (!is_WS_OR_EOL(ch)) {\n throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping');\n }\n\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n detected = true;\n atExplicitKey = false;\n allowCompact = false;\n keyTag = state.tag;\n keyNode = state.result;\n\n } else if (detected) {\n throwError(state, 'can not read an implicit mapping pair; a colon is missed');\n\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true; // Keep the result of `composeNode`.\n }\n\n } else if (detected) {\n throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key');\n\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true; // Keep the result of `composeNode`.\n }\n }\n\n //\n // Common reading code for both explicit and implicit notations.\n //\n if (state.line === _line || state.lineIndent > nodeIndent) {\n if (atExplicitKey) {\n _keyLine = state.line;\n _keyLineStart = state.lineStart;\n _keyPos = state.position;\n }\n\n if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {\n if (atExplicitKey) {\n keyNode = state.result;\n } else {\n valueNode = state.result;\n }\n }\n\n if (!atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n skipSeparationSpace(state, true, -1);\n ch = state.input.charCodeAt(state.position);\n }\n\n if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {\n throwError(state, 'bad indentation of a mapping entry');\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n\n //\n // Epilogue.\n //\n\n // Special case: last mapping's node contains only the key in explicit notation.\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n }\n\n // Expose the resulting mapping.\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = 'mapping';\n state.result = _result;\n }\n\n return detected;\n}\n\nfunction readTagProperty(state) {\n var _position,\n isVerbatim = false,\n isNamed = false,\n tagHandle,\n tagName,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x21/* ! */) return false;\n\n if (state.tag !== null) {\n throwError(state, 'duplication of a tag property');\n }\n\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x3C/* < */) {\n isVerbatim = true;\n ch = state.input.charCodeAt(++state.position);\n\n } else if (ch === 0x21/* ! */) {\n isNamed = true;\n tagHandle = '!!';\n ch = state.input.charCodeAt(++state.position);\n\n } else {\n tagHandle = '!';\n }\n\n _position = state.position;\n\n if (isVerbatim) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (ch !== 0 && ch !== 0x3E/* > */);\n\n if (state.position < state.length) {\n tagName = state.input.slice(_position, state.position);\n ch = state.input.charCodeAt(++state.position);\n } else {\n throwError(state, 'unexpected end of the stream within a verbatim tag');\n }\n } else {\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n\n if (ch === 0x21/* ! */) {\n if (!isNamed) {\n tagHandle = state.input.slice(_position - 1, state.position + 1);\n\n if (!PATTERN_TAG_HANDLE.test(tagHandle)) {\n throwError(state, 'named tag handle cannot contain such characters');\n }\n\n isNamed = true;\n _position = state.position + 1;\n } else {\n throwError(state, 'tag suffix cannot contain exclamation marks');\n }\n }\n\n ch = state.input.charCodeAt(++state.position);\n }\n\n tagName = state.input.slice(_position, state.position);\n\n if (PATTERN_FLOW_INDICATORS.test(tagName)) {\n throwError(state, 'tag suffix cannot contain flow indicator characters');\n }\n }\n\n if (tagName && !PATTERN_TAG_URI.test(tagName)) {\n throwError(state, 'tag name cannot contain such characters: ' + tagName);\n }\n\n try {\n tagName = decodeURIComponent(tagName);\n } catch (err) {\n throwError(state, 'tag name is malformed: ' + tagName);\n }\n\n if (isVerbatim) {\n state.tag = tagName;\n\n } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) {\n state.tag = state.tagMap[tagHandle] + tagName;\n\n } else if (tagHandle === '!') {\n state.tag = '!' + tagName;\n\n } else if (tagHandle === '!!') {\n state.tag = 'tag:yaml.org,2002:' + tagName;\n\n } else {\n throwError(state, 'undeclared tag handle \"' + tagHandle + '\"');\n }\n\n return true;\n}\n\nfunction readAnchorProperty(state) {\n var _position,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x26/* & */) return false;\n\n if (state.anchor !== null) {\n throwError(state, 'duplication of an anchor property');\n }\n\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (state.position === _position) {\n throwError(state, 'name of an anchor node must contain at least one character');\n }\n\n state.anchor = state.input.slice(_position, state.position);\n return true;\n}\n\nfunction readAlias(state) {\n var _position, alias,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x2A/* * */) return false;\n\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (state.position === _position) {\n throwError(state, 'name of an alias node must contain at least one character');\n }\n\n alias = state.input.slice(_position, state.position);\n\n if (!_hasOwnProperty$1.call(state.anchorMap, alias)) {\n throwError(state, 'unidentified alias \"' + alias + '\"');\n }\n\n state.result = state.anchorMap[alias];\n skipSeparationSpace(state, true, -1);\n return true;\n}\n\nfunction composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {\n var allowBlockStyles,\n allowBlockScalars,\n allowBlockCollections,\n indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n }\n }\n\n if (indentStatus === 1) {\n while (readTagProperty(state) || readAnchorProperty(state)) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n allowBlockCollections = allowBlockStyles;\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n } else {\n allowBlockCollections = false;\n }\n }\n }\n\n if (allowBlockCollections) {\n allowBlockCollections = atNewLine || allowCompact;\n }\n\n if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {\n if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {\n flowIndent = parentIndent;\n } else {\n flowIndent = parentIndent + 1;\n }\n\n blockIndent = state.position - state.lineStart;\n\n if (indentStatus === 1) {\n if (allowBlockCollections &&\n (readBlockSequence(state, blockIndent) ||\n readBlockMapping(state, blockIndent, flowIndent)) ||\n readFlowCollection(state, flowIndent)) {\n hasContent = true;\n } else {\n if ((allowBlockScalars && readBlockScalar(state, flowIndent)) ||\n readSingleQuotedScalar(state, flowIndent) ||\n readDoubleQuotedScalar(state, flowIndent)) {\n hasContent = true;\n\n } else if (readAlias(state)) {\n hasContent = true;\n\n if (state.tag !== null || state.anchor !== null) {\n throwError(state, 'alias node should not have any properties');\n }\n\n } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {\n hasContent = true;\n\n if (state.tag === null) {\n state.tag = '?';\n }\n }\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n } else if (indentStatus === 0) {\n // Special case: block sequences are allowed to have same indentation level as the parent.\n // http://www.yaml.org/spec/1.2/spec.html#id2799784\n hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);\n }\n }\n\n if (state.tag === null) {\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n\n } else if (state.tag === '?') {\n // Implicit resolving is not allowed for non-scalar types, and '?'\n // non-specific tag is only automatically assigned to plain scalars.\n //\n // We only need to check kind conformity in case user explicitly assigns '?'\n // tag, for example like this: \"! [0]\"\n //\n if (state.result !== null && state.kind !== 'scalar') {\n throwError(state, 'unacceptable node kind for ! tag; it should be \"scalar\", not \"' + state.kind + '\"');\n }\n\n for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {\n type = state.implicitTypes[typeIndex];\n\n if (type.resolve(state.result)) { // `state.result` updated in resolver if matched\n state.result = type.construct(state.result);\n state.tag = type.tag;\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n break;\n }\n }\n } else if (state.tag !== '!') {\n if (_hasOwnProperty$1.call(state.typeMap[state.kind || 'fallback'], state.tag)) {\n type = state.typeMap[state.kind || 'fallback'][state.tag];\n } else {\n // looking for multi type\n type = null;\n typeList = state.typeMap.multi[state.kind || 'fallback'];\n\n for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) {\n if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {\n type = typeList[typeIndex];\n break;\n }\n }\n }\n\n if (!type) {\n throwError(state, 'unknown tag !<' + state.tag + '>');\n }\n\n if (state.result !== null && type.kind !== state.kind) {\n throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be \"' + type.kind + '\", not \"' + state.kind + '\"');\n }\n\n if (!type.resolve(state.result, state.tag)) { // `state.result` updated in resolver if matched\n throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag');\n } else {\n state.result = type.construct(state.result, state.tag);\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n }\n\n if (state.listener !== null) {\n state.listener('close', state);\n }\n return state.tag !== null || state.anchor !== null || hasContent;\n}\n\nfunction readDocument(state) {\n var documentStart = state.position,\n _position,\n directiveName,\n directiveArgs,\n hasDirectives = false,\n ch;\n\n state.version = null;\n state.checkLineBreaks = state.legacy;\n state.tagMap = Object.create(null);\n state.anchorMap = Object.create(null);\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n skipSeparationSpace(state, true, -1);\n\n ch = state.input.charCodeAt(state.position);\n\n if (state.lineIndent > 0 || ch !== 0x25/* % */) {\n break;\n }\n\n hasDirectives = true;\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n directiveName = state.input.slice(_position, state.position);\n directiveArgs = [];\n\n if (directiveName.length < 1) {\n throwError(state, 'directive name must not be less than one character in length');\n }\n\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (ch !== 0 && !is_EOL(ch));\n break;\n }\n\n if (is_EOL(ch)) break;\n\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n directiveArgs.push(state.input.slice(_position, state.position));\n }\n\n if (ch !== 0) readLineBreak(state);\n\n if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) {\n directiveHandlers[directiveName](state, directiveName, directiveArgs);\n } else {\n throwWarning(state, 'unknown document directive \"' + directiveName + '\"');\n }\n }\n\n skipSeparationSpace(state, true, -1);\n\n if (state.lineIndent === 0 &&\n state.input.charCodeAt(state.position) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 1) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 2) === 0x2D/* - */) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n\n } else if (hasDirectives) {\n throwError(state, 'directives end mark is expected');\n }\n\n composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);\n skipSeparationSpace(state, true, -1);\n\n if (state.checkLineBreaks &&\n PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {\n throwWarning(state, 'non-ASCII line breaks are interpreted as content');\n }\n\n state.documents.push(state.result);\n\n if (state.position === state.lineStart && testDocumentSeparator(state)) {\n\n if (state.input.charCodeAt(state.position) === 0x2E/* . */) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n }\n return;\n }\n\n if (state.position < (state.length - 1)) {\n throwError(state, 'end of the stream or a document separator is expected');\n } else {\n return;\n }\n}\n\n\nfunction loadDocuments(input, options) {\n input = String(input);\n options = options || {};\n\n if (input.length !== 0) {\n\n // Add tailing `\\n` if not exists\n if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ &&\n input.charCodeAt(input.length - 1) !== 0x0D/* CR */) {\n input += '\\n';\n }\n\n // Strip BOM\n if (input.charCodeAt(0) === 0xFEFF) {\n input = input.slice(1);\n }\n }\n\n var state = new State$1(input, options);\n\n var nullpos = input.indexOf('\\0');\n\n if (nullpos !== -1) {\n state.position = nullpos;\n throwError(state, 'null byte is not allowed in input');\n }\n\n // Use 0 as string terminator. That significantly simplifies bounds check.\n state.input += '\\0';\n\n while (state.input.charCodeAt(state.position) === 0x20/* Space */) {\n state.lineIndent += 1;\n state.position += 1;\n }\n\n while (state.position < (state.length - 1)) {\n readDocument(state);\n }\n\n return state.documents;\n}\n\n\nfunction loadAll$1(input, iterator, options) {\n if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') {\n options = iterator;\n iterator = null;\n }\n\n var documents = loadDocuments(input, options);\n\n if (typeof iterator !== 'function') {\n return documents;\n }\n\n for (var index = 0, length = documents.length; index < length; index += 1) {\n iterator(documents[index]);\n }\n}\n\n\nfunction load$1(input, options) {\n var documents = loadDocuments(input, options);\n\n if (documents.length === 0) {\n /*eslint-disable no-undefined*/\n return undefined;\n } else if (documents.length === 1) {\n return documents[0];\n }\n throw new exception('expected a single document in the stream, but found more');\n}\n\n\nvar loadAll_1 = loadAll$1;\nvar load_1 = load$1;\n\nvar loader = {\n\tloadAll: loadAll_1,\n\tload: load_1\n};\n\n/*eslint-disable no-use-before-define*/\n\n\n\n\n\nvar _toString = Object.prototype.toString;\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar CHAR_BOM = 0xFEFF;\nvar CHAR_TAB = 0x09; /* Tab */\nvar CHAR_LINE_FEED = 0x0A; /* LF */\nvar CHAR_CARRIAGE_RETURN = 0x0D; /* CR */\nvar CHAR_SPACE = 0x20; /* Space */\nvar CHAR_EXCLAMATION = 0x21; /* ! */\nvar CHAR_DOUBLE_QUOTE = 0x22; /* \" */\nvar CHAR_SHARP = 0x23; /* # */\nvar CHAR_PERCENT = 0x25; /* % */\nvar CHAR_AMPERSAND = 0x26; /* & */\nvar CHAR_SINGLE_QUOTE = 0x27; /* ' */\nvar CHAR_ASTERISK = 0x2A; /* * */\nvar CHAR_COMMA = 0x2C; /* , */\nvar CHAR_MINUS = 0x2D; /* - */\nvar CHAR_COLON = 0x3A; /* : */\nvar CHAR_EQUALS = 0x3D; /* = */\nvar CHAR_GREATER_THAN = 0x3E; /* > */\nvar CHAR_QUESTION = 0x3F; /* ? */\nvar CHAR_COMMERCIAL_AT = 0x40; /* @ */\nvar CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */\nvar CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */\nvar CHAR_GRAVE_ACCENT = 0x60; /* ` */\nvar CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */\nvar CHAR_VERTICAL_LINE = 0x7C; /* | */\nvar CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */\n\nvar ESCAPE_SEQUENCES = {};\n\nESCAPE_SEQUENCES[0x00] = '\\\\0';\nESCAPE_SEQUENCES[0x07] = '\\\\a';\nESCAPE_SEQUENCES[0x08] = '\\\\b';\nESCAPE_SEQUENCES[0x09] = '\\\\t';\nESCAPE_SEQUENCES[0x0A] = '\\\\n';\nESCAPE_SEQUENCES[0x0B] = '\\\\v';\nESCAPE_SEQUENCES[0x0C] = '\\\\f';\nESCAPE_SEQUENCES[0x0D] = '\\\\r';\nESCAPE_SEQUENCES[0x1B] = '\\\\e';\nESCAPE_SEQUENCES[0x22] = '\\\\\"';\nESCAPE_SEQUENCES[0x5C] = '\\\\\\\\';\nESCAPE_SEQUENCES[0x85] = '\\\\N';\nESCAPE_SEQUENCES[0xA0] = '\\\\_';\nESCAPE_SEQUENCES[0x2028] = '\\\\L';\nESCAPE_SEQUENCES[0x2029] = '\\\\P';\n\nvar DEPRECATED_BOOLEANS_SYNTAX = [\n 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON',\n 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF'\n];\n\nvar DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\\.[0-9_]*)?$/;\n\nfunction compileStyleMap(schema, map) {\n var result, keys, index, length, tag, style, type;\n\n if (map === null) return {};\n\n result = {};\n keys = Object.keys(map);\n\n for (index = 0, length = keys.length; index < length; index += 1) {\n tag = keys[index];\n style = String(map[tag]);\n\n if (tag.slice(0, 2) === '!!') {\n tag = 'tag:yaml.org,2002:' + tag.slice(2);\n }\n type = schema.compiledTypeMap['fallback'][tag];\n\n if (type && _hasOwnProperty.call(type.styleAliases, style)) {\n style = type.styleAliases[style];\n }\n\n result[tag] = style;\n }\n\n return result;\n}\n\nfunction encodeHex(character) {\n var string, handle, length;\n\n string = character.toString(16).toUpperCase();\n\n if (character <= 0xFF) {\n handle = 'x';\n length = 2;\n } else if (character <= 0xFFFF) {\n handle = 'u';\n length = 4;\n } else if (character <= 0xFFFFFFFF) {\n handle = 'U';\n length = 8;\n } else {\n throw new exception('code point within a string may not be greater than 0xFFFFFFFF');\n }\n\n return '\\\\' + handle + common.repeat('0', length - string.length) + string;\n}\n\n\nvar QUOTING_TYPE_SINGLE = 1,\n QUOTING_TYPE_DOUBLE = 2;\n\nfunction State(options) {\n this.schema = options['schema'] || _default;\n this.indent = Math.max(1, (options['indent'] || 2));\n this.noArrayIndent = options['noArrayIndent'] || false;\n this.skipInvalid = options['skipInvalid'] || false;\n this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']);\n this.styleMap = compileStyleMap(this.schema, options['styles'] || null);\n this.sortKeys = options['sortKeys'] || false;\n this.lineWidth = options['lineWidth'] || 80;\n this.noRefs = options['noRefs'] || false;\n this.noCompatMode = options['noCompatMode'] || false;\n this.condenseFlow = options['condenseFlow'] || false;\n this.quotingType = options['quotingType'] === '\"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE;\n this.forceQuotes = options['forceQuotes'] || false;\n this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null;\n\n this.implicitTypes = this.schema.compiledImplicit;\n this.explicitTypes = this.schema.compiledExplicit;\n\n this.tag = null;\n this.result = '';\n\n this.duplicates = [];\n this.usedDuplicates = null;\n}\n\n// Indents every line in a string. Empty lines (\\n only) are not indented.\nfunction indentString(string, spaces) {\n var ind = common.repeat(' ', spaces),\n position = 0,\n next = -1,\n result = '',\n line,\n length = string.length;\n\n while (position < length) {\n next = string.indexOf('\\n', position);\n if (next === -1) {\n line = string.slice(position);\n position = length;\n } else {\n line = string.slice(position, next + 1);\n position = next + 1;\n }\n\n if (line.length && line !== '\\n') result += ind;\n\n result += line;\n }\n\n return result;\n}\n\nfunction generateNextLine(state, level) {\n return '\\n' + common.repeat(' ', state.indent * level);\n}\n\nfunction testImplicitResolving(state, str) {\n var index, length, type;\n\n for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {\n type = state.implicitTypes[index];\n\n if (type.resolve(str)) {\n return true;\n }\n }\n\n return false;\n}\n\n// [33] s-white ::= s-space | s-tab\nfunction isWhitespace(c) {\n return c === CHAR_SPACE || c === CHAR_TAB;\n}\n\n// Returns true if the character can be printed without escaping.\n// From YAML 1.2: \"any allowed characters known to be non-printable\n// should also be escaped. [However,] This isn\u2019t mandatory\"\n// Derived from nb-char - \\t - #x85 - #xA0 - #x2028 - #x2029.\nfunction isPrintable(c) {\n return (0x00020 <= c && c <= 0x00007E)\n || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029)\n || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM)\n || (0x10000 <= c && c <= 0x10FFFF);\n}\n\n// [34] ns-char ::= nb-char - s-white\n// [27] nb-char ::= c-printable - b-char - c-byte-order-mark\n// [26] b-char ::= b-line-feed | b-carriage-return\n// Including s-white (for some reason, examples doesn't match specs in this aspect)\n// ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark\nfunction isNsCharOrWhitespace(c) {\n return isPrintable(c)\n && c !== CHAR_BOM\n // - b-char\n && c !== CHAR_CARRIAGE_RETURN\n && c !== CHAR_LINE_FEED;\n}\n\n// [127] ns-plain-safe(c) ::= c = flow-out \u21D2 ns-plain-safe-out\n// c = flow-in \u21D2 ns-plain-safe-in\n// c = block-key \u21D2 ns-plain-safe-out\n// c = flow-key \u21D2 ns-plain-safe-in\n// [128] ns-plain-safe-out ::= ns-char\n// [129] ns-plain-safe-in ::= ns-char - c-flow-indicator\n// [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - \u201C:\u201D - \u201C#\u201D )\n// | ( /* An ns-char preceding */ \u201C#\u201D )\n// | ( \u201C:\u201D /* Followed by an ns-plain-safe(c) */ )\nfunction isPlainSafe(c, prev, inblock) {\n var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c);\n var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c);\n return (\n // ns-plain-safe\n inblock ? // c = flow-in\n cIsNsCharOrWhitespace\n : cIsNsCharOrWhitespace\n // - c-flow-indicator\n && c !== CHAR_COMMA\n && c !== CHAR_LEFT_SQUARE_BRACKET\n && c !== CHAR_RIGHT_SQUARE_BRACKET\n && c !== CHAR_LEFT_CURLY_BRACKET\n && c !== CHAR_RIGHT_CURLY_BRACKET\n )\n // ns-plain-char\n && c !== CHAR_SHARP // false on '#'\n && !(prev === CHAR_COLON && !cIsNsChar) // false on ': '\n || (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) // change to true on '[^ ]#'\n || (prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]'\n}\n\n// Simplified test for values allowed as the first character in plain style.\nfunction isPlainSafeFirst(c) {\n // Uses a subset of ns-char - c-indicator\n // where ns-char = nb-char - s-white.\n // No support of ( ( \u201C?\u201D | \u201C:\u201D | \u201C-\u201D ) /* Followed by an ns-plain-safe(c)) */ ) part\n return isPrintable(c) && c !== CHAR_BOM\n && !isWhitespace(c) // - s-white\n // - (c-indicator ::=\n // \u201C-\u201D | \u201C?\u201D | \u201C:\u201D | \u201C,\u201D | \u201C[\u201D | \u201C]\u201D | \u201C{\u201D | \u201C}\u201D\n && c !== CHAR_MINUS\n && c !== CHAR_QUESTION\n && c !== CHAR_COLON\n && c !== CHAR_COMMA\n && c !== CHAR_LEFT_SQUARE_BRACKET\n && c !== CHAR_RIGHT_SQUARE_BRACKET\n && c !== CHAR_LEFT_CURLY_BRACKET\n && c !== CHAR_RIGHT_CURLY_BRACKET\n // | \u201C#\u201D | \u201C&\u201D | \u201C*\u201D | \u201C!\u201D | \u201C|\u201D | \u201C=\u201D | \u201C>\u201D | \u201C'\u201D | \u201C\"\u201D\n && c !== CHAR_SHARP\n && c !== CHAR_AMPERSAND\n && c !== CHAR_ASTERISK\n && c !== CHAR_EXCLAMATION\n && c !== CHAR_VERTICAL_LINE\n && c !== CHAR_EQUALS\n && c !== CHAR_GREATER_THAN\n && c !== CHAR_SINGLE_QUOTE\n && c !== CHAR_DOUBLE_QUOTE\n // | \u201C%\u201D | \u201C@\u201D | \u201C`\u201D)\n && c !== CHAR_PERCENT\n && c !== CHAR_COMMERCIAL_AT\n && c !== CHAR_GRAVE_ACCENT;\n}\n\n// Simplified test for values allowed as the last character in plain style.\nfunction isPlainSafeLast(c) {\n // just not whitespace or colon, it will be checked to be plain character later\n return !isWhitespace(c) && c !== CHAR_COLON;\n}\n\n// Same as 'string'.codePointAt(pos), but works in older browsers.\nfunction codePointAt(string, pos) {\n var first = string.charCodeAt(pos), second;\n if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) {\n second = string.charCodeAt(pos + 1);\n if (second >= 0xDC00 && second <= 0xDFFF) {\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n return first;\n}\n\n// Determines whether block indentation indicator is required.\nfunction needIndentIndicator(string) {\n var leadingSpaceRe = /^\\n* /;\n return leadingSpaceRe.test(string);\n}\n\nvar STYLE_PLAIN = 1,\n STYLE_SINGLE = 2,\n STYLE_LITERAL = 3,\n STYLE_FOLDED = 4,\n STYLE_DOUBLE = 5;\n\n// Determines which scalar styles are possible and returns the preferred style.\n// lineWidth = -1 => no limit.\n// Pre-conditions: str.length > 0.\n// Post-conditions:\n// STYLE_PLAIN or STYLE_SINGLE => no \\n are in the string.\n// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1).\n// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1).\nfunction chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth,\n testAmbiguousType, quotingType, forceQuotes, inblock) {\n\n var i;\n var char = 0;\n var prevChar = null;\n var hasLineBreak = false;\n var hasFoldableLine = false; // only checked if shouldTrackWidth\n var shouldTrackWidth = lineWidth !== -1;\n var previousLineBreak = -1; // count the first line correctly\n var plain = isPlainSafeFirst(codePointAt(string, 0))\n && isPlainSafeLast(codePointAt(string, string.length - 1));\n\n if (singleLineOnly || forceQuotes) {\n // Case: no block styles.\n // Check for disallowed characters to rule out plain and single.\n for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char, prevChar, inblock);\n prevChar = char;\n }\n } else {\n // Case: block styles permitted.\n for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n if (char === CHAR_LINE_FEED) {\n hasLineBreak = true;\n // Check if any line can be folded.\n if (shouldTrackWidth) {\n hasFoldableLine = hasFoldableLine ||\n // Foldable line = too long, and not more-indented.\n (i - previousLineBreak - 1 > lineWidth &&\n string[previousLineBreak + 1] !== ' ');\n previousLineBreak = i;\n }\n } else if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char, prevChar, inblock);\n prevChar = char;\n }\n // in case the end is missing a \\n\n hasFoldableLine = hasFoldableLine || (shouldTrackWidth &&\n (i - previousLineBreak - 1 > lineWidth &&\n string[previousLineBreak + 1] !== ' '));\n }\n // Although every style can represent \\n without escaping, prefer block styles\n // for multiline, since they're more readable and they don't add empty lines.\n // Also prefer folding a super-long line.\n if (!hasLineBreak && !hasFoldableLine) {\n // Strings interpretable as another type have to be quoted;\n // e.g. the string 'true' vs. the boolean true.\n if (plain && !forceQuotes && !testAmbiguousType(string)) {\n return STYLE_PLAIN;\n }\n return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n }\n // Edge case: block indentation indicator can only have one digit.\n if (indentPerLevel > 9 && needIndentIndicator(string)) {\n return STYLE_DOUBLE;\n }\n // At this point we know block styles are valid.\n // Prefer literal style unless we want to fold.\n if (!forceQuotes) {\n return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;\n }\n return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n}\n\n// Note: line breaking/folding is implemented for only the folded style.\n// NB. We drop the last trailing newline (if any) of a returned block scalar\n// since the dumper adds its own newline. This always works:\n// \u2022 No ending newline => unaffected; already using strip \"-\" chomping.\n// \u2022 Ending newline => removed then restored.\n// Importantly, this keeps the \"+\" chomp indicator from gaining an extra line.\nfunction writeScalar(state, string, level, iskey, inblock) {\n state.dump = (function () {\n if (string.length === 0) {\n return state.quotingType === QUOTING_TYPE_DOUBLE ? '\"\"' : \"''\";\n }\n if (!state.noCompatMode) {\n if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) {\n return state.quotingType === QUOTING_TYPE_DOUBLE ? ('\"' + string + '\"') : (\"'\" + string + \"'\");\n }\n }\n\n var indent = state.indent * Math.max(1, level); // no 0-indent scalars\n // As indentation gets deeper, let the width decrease monotonically\n // to the lower bound min(state.lineWidth, 40).\n // Note that this implies\n // state.lineWidth \u2264 40 + state.indent: width is fixed at the lower bound.\n // state.lineWidth > 40 + state.indent: width decreases until the lower bound.\n // This behaves better than a constant minimum width which disallows narrower options,\n // or an indent threshold which causes the width to suddenly increase.\n var lineWidth = state.lineWidth === -1\n ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);\n\n // Without knowing if keys are implicit/explicit, assume implicit for safety.\n var singleLineOnly = iskey\n // No block styles in flow mode.\n || (state.flowLevel > -1 && level >= state.flowLevel);\n function testAmbiguity(string) {\n return testImplicitResolving(state, string);\n }\n\n switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth,\n testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) {\n\n case STYLE_PLAIN:\n return string;\n case STYLE_SINGLE:\n return \"'\" + string.replace(/'/g, \"''\") + \"'\";\n case STYLE_LITERAL:\n return '|' + blockHeader(string, state.indent)\n + dropEndingNewline(indentString(string, indent));\n case STYLE_FOLDED:\n return '>' + blockHeader(string, state.indent)\n + dropEndingNewline(indentString(foldString(string, lineWidth), indent));\n case STYLE_DOUBLE:\n return '\"' + escapeString(string) + '\"';\n default:\n throw new exception('impossible error: invalid scalar style');\n }\n }());\n}\n\n// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.\nfunction blockHeader(string, indentPerLevel) {\n var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : '';\n\n // note the special case: the string '\\n' counts as a \"trailing\" empty line.\n var clip = string[string.length - 1] === '\\n';\n var keep = clip && (string[string.length - 2] === '\\n' || string === '\\n');\n var chomp = keep ? '+' : (clip ? '' : '-');\n\n return indentIndicator + chomp + '\\n';\n}\n\n// (See the note for writeScalar.)\nfunction dropEndingNewline(string) {\n return string[string.length - 1] === '\\n' ? string.slice(0, -1) : string;\n}\n\n// Note: a long line without a suitable break point will exceed the width limit.\n// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0.\nfunction foldString(string, width) {\n // In folded style, $k$ consecutive newlines output as $k+1$ newlines\u2014\n // unless they're before or after a more-indented line, or at the very\n // beginning or end, in which case $k$ maps to $k$.\n // Therefore, parse each chunk as newline(s) followed by a content line.\n var lineRe = /(\\n+)([^\\n]*)/g;\n\n // first line (possibly an empty line)\n var result = (function () {\n var nextLF = string.indexOf('\\n');\n nextLF = nextLF !== -1 ? nextLF : string.length;\n lineRe.lastIndex = nextLF;\n return foldLine(string.slice(0, nextLF), width);\n }());\n // If we haven't reached the first content line yet, don't add an extra \\n.\n var prevMoreIndented = string[0] === '\\n' || string[0] === ' ';\n var moreIndented;\n\n // rest of the lines\n var match;\n while ((match = lineRe.exec(string))) {\n var prefix = match[1], line = match[2];\n moreIndented = (line[0] === ' ');\n result += prefix\n + (!prevMoreIndented && !moreIndented && line !== ''\n ? '\\n' : '')\n + foldLine(line, width);\n prevMoreIndented = moreIndented;\n }\n\n return result;\n}\n\n// Greedy line breaking.\n// Picks the longest line under the limit each time,\n// otherwise settles for the shortest line over the limit.\n// NB. More-indented lines *cannot* be folded, as that would add an extra \\n.\nfunction foldLine(line, width) {\n if (line === '' || line[0] === ' ') return line;\n\n // Since a more-indented line adds a \\n, breaks can't be followed by a space.\n var breakRe = / [^ ]/g; // note: the match index will always be <= length-2.\n var match;\n // start is an inclusive index. end, curr, and next are exclusive.\n var start = 0, end, curr = 0, next = 0;\n var result = '';\n\n // Invariants: 0 <= start <= length-1.\n // 0 <= curr <= next <= max(0, length-2). curr - start <= width.\n // Inside the loop:\n // A match implies length >= 2, so curr and next are <= length-2.\n while ((match = breakRe.exec(line))) {\n next = match.index;\n // maintain invariant: curr - start <= width\n if (next - start > width) {\n end = (curr > start) ? curr : next; // derive end <= length-2\n result += '\\n' + line.slice(start, end);\n // skip the space that was output as \\n\n start = end + 1; // derive start <= length-1\n }\n curr = next;\n }\n\n // By the invariants, start <= length-1, so there is something left over.\n // It is either the whole string or a part starting from non-whitespace.\n result += '\\n';\n // Insert a break if the remainder is too long and there is a break available.\n if (line.length - start > width && curr > start) {\n result += line.slice(start, curr) + '\\n' + line.slice(curr + 1);\n } else {\n result += line.slice(start);\n }\n\n return result.slice(1); // drop extra \\n joiner\n}\n\n// Escapes a double-quoted string.\nfunction escapeString(string) {\n var result = '';\n var char = 0;\n var escapeSeq;\n\n for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n escapeSeq = ESCAPE_SEQUENCES[char];\n\n if (!escapeSeq && isPrintable(char)) {\n result += string[i];\n if (char >= 0x10000) result += string[i + 1];\n } else {\n result += escapeSeq || encodeHex(char);\n }\n }\n\n return result;\n}\n\nfunction writeFlowSequence(state, level, object) {\n var _result = '',\n _tag = state.tag,\n index,\n length,\n value;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n value = object[index];\n\n if (state.replacer) {\n value = state.replacer.call(object, String(index), value);\n }\n\n // Write only valid elements, put null instead of invalid elements.\n if (writeNode(state, level, value, false, false) ||\n (typeof value === 'undefined' &&\n writeNode(state, level, null, false, false))) {\n\n if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : '');\n _result += state.dump;\n }\n }\n\n state.tag = _tag;\n state.dump = '[' + _result + ']';\n}\n\nfunction writeBlockSequence(state, level, object, compact) {\n var _result = '',\n _tag = state.tag,\n index,\n length,\n value;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n value = object[index];\n\n if (state.replacer) {\n value = state.replacer.call(object, String(index), value);\n }\n\n // Write only valid elements, put null instead of invalid elements.\n if (writeNode(state, level + 1, value, true, true, false, true) ||\n (typeof value === 'undefined' &&\n writeNode(state, level + 1, null, true, true, false, true))) {\n\n if (!compact || _result !== '') {\n _result += generateNextLine(state, level);\n }\n\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n _result += '-';\n } else {\n _result += '- ';\n }\n\n _result += state.dump;\n }\n }\n\n state.tag = _tag;\n state.dump = _result || '[]'; // Empty sequence if no valid values.\n}\n\nfunction writeFlowMapping(state, level, object) {\n var _result = '',\n _tag = state.tag,\n objectKeyList = Object.keys(object),\n index,\n length,\n objectKey,\n objectValue,\n pairBuffer;\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n\n pairBuffer = '';\n if (_result !== '') pairBuffer += ', ';\n\n if (state.condenseFlow) pairBuffer += '\"';\n\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n\n if (state.replacer) {\n objectValue = state.replacer.call(object, objectKey, objectValue);\n }\n\n if (!writeNode(state, level, objectKey, false, false)) {\n continue; // Skip this pair because of invalid key;\n }\n\n if (state.dump.length > 1024) pairBuffer += '? ';\n\n pairBuffer += state.dump + (state.condenseFlow ? '\"' : '') + ':' + (state.condenseFlow ? '' : ' ');\n\n if (!writeNode(state, level, objectValue, false, false)) {\n continue; // Skip this pair because of invalid value.\n }\n\n pairBuffer += state.dump;\n\n // Both key and value are valid.\n _result += pairBuffer;\n }\n\n state.tag = _tag;\n state.dump = '{' + _result + '}';\n}\n\nfunction writeBlockMapping(state, level, object, compact) {\n var _result = '',\n _tag = state.tag,\n objectKeyList = Object.keys(object),\n index,\n length,\n objectKey,\n objectValue,\n explicitPair,\n pairBuffer;\n\n // Allow sorting keys so that the output file is deterministic\n if (state.sortKeys === true) {\n // Default sorting\n objectKeyList.sort();\n } else if (typeof state.sortKeys === 'function') {\n // Custom sort function\n objectKeyList.sort(state.sortKeys);\n } else if (state.sortKeys) {\n // Something is wrong\n throw new exception('sortKeys must be a boolean or a function');\n }\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n pairBuffer = '';\n\n if (!compact || _result !== '') {\n pairBuffer += generateNextLine(state, level);\n }\n\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n\n if (state.replacer) {\n objectValue = state.replacer.call(object, objectKey, objectValue);\n }\n\n if (!writeNode(state, level + 1, objectKey, true, true, true)) {\n continue; // Skip this pair because of invalid key.\n }\n\n explicitPair = (state.tag !== null && state.tag !== '?') ||\n (state.dump && state.dump.length > 1024);\n\n if (explicitPair) {\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += '?';\n } else {\n pairBuffer += '? ';\n }\n }\n\n pairBuffer += state.dump;\n\n if (explicitPair) {\n pairBuffer += generateNextLine(state, level);\n }\n\n if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {\n continue; // Skip this pair because of invalid value.\n }\n\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += ':';\n } else {\n pairBuffer += ': ';\n }\n\n pairBuffer += state.dump;\n\n // Both key and value are valid.\n _result += pairBuffer;\n }\n\n state.tag = _tag;\n state.dump = _result || '{}'; // Empty mapping if no valid pairs.\n}\n\nfunction detectType(state, object, explicit) {\n var _result, typeList, index, length, type, style;\n\n typeList = explicit ? state.explicitTypes : state.implicitTypes;\n\n for (index = 0, length = typeList.length; index < length; index += 1) {\n type = typeList[index];\n\n if ((type.instanceOf || type.predicate) &&\n (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) &&\n (!type.predicate || type.predicate(object))) {\n\n if (explicit) {\n if (type.multi && type.representName) {\n state.tag = type.representName(object);\n } else {\n state.tag = type.tag;\n }\n } else {\n state.tag = '?';\n }\n\n if (type.represent) {\n style = state.styleMap[type.tag] || type.defaultStyle;\n\n if (_toString.call(type.represent) === '[object Function]') {\n _result = type.represent(object, style);\n } else if (_hasOwnProperty.call(type.represent, style)) {\n _result = type.represent[style](object, style);\n } else {\n throw new exception('!<' + type.tag + '> tag resolver accepts not \"' + style + '\" style');\n }\n\n state.dump = _result;\n }\n\n return true;\n }\n }\n\n return false;\n}\n\n// Serializes `object` and writes it to global `result`.\n// Returns true on success, or false on invalid object.\n//\nfunction writeNode(state, level, object, block, compact, iskey, isblockseq) {\n state.tag = null;\n state.dump = object;\n\n if (!detectType(state, object, false)) {\n detectType(state, object, true);\n }\n\n var type = _toString.call(state.dump);\n var inblock = block;\n var tagStr;\n\n if (block) {\n block = (state.flowLevel < 0 || state.flowLevel > level);\n }\n\n var objectOrArray = type === '[object Object]' || type === '[object Array]',\n duplicateIndex,\n duplicate;\n\n if (objectOrArray) {\n duplicateIndex = state.duplicates.indexOf(object);\n duplicate = duplicateIndex !== -1;\n }\n\n if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) {\n compact = false;\n }\n\n if (duplicate && state.usedDuplicates[duplicateIndex]) {\n state.dump = '*ref_' + duplicateIndex;\n } else {\n if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {\n state.usedDuplicates[duplicateIndex] = true;\n }\n if (type === '[object Object]') {\n if (block && (Object.keys(state.dump).length !== 0)) {\n writeBlockMapping(state, level, state.dump, compact);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + state.dump;\n }\n } else {\n writeFlowMapping(state, level, state.dump);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n }\n }\n } else if (type === '[object Array]') {\n if (block && (state.dump.length !== 0)) {\n if (state.noArrayIndent && !isblockseq && level > 0) {\n writeBlockSequence(state, level - 1, state.dump, compact);\n } else {\n writeBlockSequence(state, level, state.dump, compact);\n }\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + state.dump;\n }\n } else {\n writeFlowSequence(state, level, state.dump);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n }\n }\n } else if (type === '[object String]') {\n if (state.tag !== '?') {\n writeScalar(state, state.dump, level, iskey, inblock);\n }\n } else if (type === '[object Undefined]') {\n return false;\n } else {\n if (state.skipInvalid) return false;\n throw new exception('unacceptable kind of an object to dump ' + type);\n }\n\n if (state.tag !== null && state.tag !== '?') {\n // Need to encode all characters except those allowed by the spec:\n //\n // [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */\n // [36] ns-hex-digit ::= ns-dec-digit\n // | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */\n // [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */\n // [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | \u201C-\u201D\n // [39] ns-uri-char ::= \u201C%\u201D ns-hex-digit ns-hex-digit | ns-word-char | \u201C#\u201D\n // | \u201C;\u201D | \u201C/\u201D | \u201C?\u201D | \u201C:\u201D | \u201C@\u201D | \u201C&\u201D | \u201C=\u201D | \u201C+\u201D | \u201C$\u201D | \u201C,\u201D\n // | \u201C_\u201D | \u201C.\u201D | \u201C!\u201D | \u201C~\u201D | \u201C*\u201D | \u201C'\u201D | \u201C(\u201D | \u201C)\u201D | \u201C[\u201D | \u201C]\u201D\n //\n // Also need to encode '!' because it has special meaning (end of tag prefix).\n //\n tagStr = encodeURI(\n state.tag[0] === '!' ? state.tag.slice(1) : state.tag\n ).replace(/!/g, '%21');\n\n if (state.tag[0] === '!') {\n tagStr = '!' + tagStr;\n } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') {\n tagStr = '!!' + tagStr.slice(18);\n } else {\n tagStr = '!<' + tagStr + '>';\n }\n\n state.dump = tagStr + ' ' + state.dump;\n }\n }\n\n return true;\n}\n\nfunction getDuplicateReferences(object, state) {\n var objects = [],\n duplicatesIndexes = [],\n index,\n length;\n\n inspectNode(object, objects, duplicatesIndexes);\n\n for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) {\n state.duplicates.push(objects[duplicatesIndexes[index]]);\n }\n state.usedDuplicates = new Array(length);\n}\n\nfunction inspectNode(object, objects, duplicatesIndexes) {\n var objectKeyList,\n index,\n length;\n\n if (object !== null && typeof object === 'object') {\n index = objects.indexOf(object);\n if (index !== -1) {\n if (duplicatesIndexes.indexOf(index) === -1) {\n duplicatesIndexes.push(index);\n }\n } else {\n objects.push(object);\n\n if (Array.isArray(object)) {\n for (index = 0, length = object.length; index < length; index += 1) {\n inspectNode(object[index], objects, duplicatesIndexes);\n }\n } else {\n objectKeyList = Object.keys(object);\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);\n }\n }\n }\n }\n}\n\nfunction dump$1(input, options) {\n options = options || {};\n\n var state = new State(options);\n\n if (!state.noRefs) getDuplicateReferences(input, state);\n\n var value = input;\n\n if (state.replacer) {\n value = state.replacer.call({ '': value }, '', value);\n }\n\n if (writeNode(state, 0, value, true, true)) return state.dump + '\\n';\n\n return '';\n}\n\nvar dump_1 = dump$1;\n\nvar dumper = {\n\tdump: dump_1\n};\n\nfunction renamed(from, to) {\n return function () {\n throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' +\n 'Use yaml.' + to + ' instead, which is now safe by default.');\n };\n}\n\n\nvar Type = type;\nvar Schema = schema;\nvar FAILSAFE_SCHEMA = failsafe;\nvar JSON_SCHEMA = json;\nvar CORE_SCHEMA = core;\nvar DEFAULT_SCHEMA = _default;\nvar load = loader.load;\nvar loadAll = loader.loadAll;\nvar dump = dumper.dump;\nvar YAMLException = exception;\n\n// Re-export all types in case user wants to create custom schema\nvar types = {\n binary: binary,\n float: float,\n map: map,\n null: _null,\n pairs: pairs,\n set: set,\n timestamp: timestamp,\n bool: bool,\n int: int,\n merge: merge,\n omap: omap,\n seq: seq,\n str: str\n};\n\n// Removed functions from JS-YAML 3.0.x\nvar safeLoad = renamed('safeLoad', 'load');\nvar safeLoadAll = renamed('safeLoadAll', 'loadAll');\nvar safeDump = renamed('safeDump', 'dump');\n\nvar jsYaml = {\n\tType: Type,\n\tSchema: Schema,\n\tFAILSAFE_SCHEMA: FAILSAFE_SCHEMA,\n\tJSON_SCHEMA: JSON_SCHEMA,\n\tCORE_SCHEMA: CORE_SCHEMA,\n\tDEFAULT_SCHEMA: DEFAULT_SCHEMA,\n\tload: load,\n\tloadAll: loadAll,\n\tdump: dump,\n\tYAMLException: YAMLException,\n\ttypes: types,\n\tsafeLoad: safeLoad,\n\tsafeLoadAll: safeLoadAll,\n\tsafeDump: safeDump\n};\n\nexport default jsYaml;\nexport { CORE_SCHEMA, DEFAULT_SCHEMA, FAILSAFE_SCHEMA, JSON_SCHEMA, Schema, Type, YAMLException, dump, load, loadAll, safeDump, safeLoad, safeLoadAll, types };\n", "import type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Gets the original marked default options.\n */\nexport function _getDefaults(): MarkedOptions {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null,\n };\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport let _defaults: MarkedOptions = _getDefaults();\n\nexport function changeDefaults(newDefaults: MarkedOptions) {\n _defaults = newDefaults;\n}\n", "const noopTest = { exec: () => null } as unknown as RegExp;\n\nfunction edit(regex: string | RegExp, opt = '') {\n let source = typeof regex === 'string' ? regex : regex.source;\n const obj = {\n replace: (name: string | RegExp, val: string | RegExp) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(other.caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n },\n };\n return obj;\n}\n\nexport const other = {\n codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n outputLinkReplace: /\\\\([\\[\\]])/g,\n indentCodeCompensation: /^(\\s+)(?:```)/,\n beginningSpace: /^\\s+/,\n endingHash: /#$/,\n startingSpaceChar: /^ /,\n endingSpaceChar: / $/,\n nonSpaceChar: /[^ ]/,\n newLineCharGlobal: /\\n/g,\n tabCharGlobal: /\\t/g,\n multipleSpaceGlobal: /\\s+/g,\n blankLine: /^[ \\t]*$/,\n doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n blockquoteStart: /^ {0,3}>/,\n blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n listReplaceTabs: /^\\t+/,\n listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n listIsTask: /^\\[[ xX]\\] /,\n listReplaceTask: /^\\[[ xX]\\] +/,\n anyLine: /\\n.*\\n/,\n hrefBrackets: /^<(.*)>$/,\n tableDelimiter: /[:|]/,\n tableAlignChars: /^\\||\\| *$/g,\n tableRowBlankLine: /\\n[ \\t]*$/,\n tableAlignRight: /^ *-+: *$/,\n tableAlignCenter: /^ *:-+: *$/,\n tableAlignLeft: /^ *:-+ *$/,\n startATag: /^/i,\n startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n startAngleBracket: /^$/,\n pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n escapeTest: /[&<>\"']/,\n escapeReplace: /[&<>\"']/g,\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n unescapeTest: /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,\n caret: /(^|[^\\[])\\^/g,\n percentDecode: /%25/g,\n findPipe: /\\|/g,\n splitPipe: / \\|/,\n slashPipe: /\\\\\\|/g,\n carriageReturn: /\\r\\n|\\r/g,\n spaceLine: /^ +$/gm,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n listItemRegex: (bull: string) => new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`),\n nextBulletRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`),\n hrRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),\n fencesBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`),\n headingBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`),\n htmlBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, 'i'),\n};\n\n/**\n * Block-Level Grammar\n */\n\nconst newline = /^(?:[ \\t]*(?:\\n|$))+/;\nconst blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nconst lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nconst lheading = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/\\|table/g, '') // table not in commonmark\n .getRegex();\nconst lheadingGfm = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/) // table can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\n\nconst list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\n\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /|$))/;\nconst html = edit(\n '^ {0,3}(?:' // optional indentation\n+ '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:[^\\\\n]*\\\\n+|$)' // (1)\n+ '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n+ '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n+ '|\\\\n*|$)' // (4)\n+ '|\\\\n*|$)' // (5)\n+ '|)[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (6)\n+ '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) open tag\n+ '|(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) closing tag\n+ ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText,\n};\n\ntype BlockKeys = keyof typeof blockNormal;\n\n/**\n * GFM Block Grammar\n */\n\nconst gfmTable = edit(\n '^ *([^\\\\n ].*)\\\\n' // Header\n+ ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n+ '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', '(?: {4}| {0,3}\\t)[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockGfm: Record = {\n ...blockNormal,\n lheading: lheadingGfm,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex(),\n};\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nconst blockPedantic: Record = {\n ...blockNormal,\n html: edit(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+? *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex(),\n};\n\n/**\n * Inline-Level Grammar\n */\n\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\\nconst blockSkip = /\\[[^\\[\\]]*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)|`[^`]*?`|<(?! )[^<>]*?>/g;\n\nconst emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/;\n\nconst emStrongLDelim = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongLDelimGfm = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\nconst emStrongRDelimAstCore =\n '^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n+ '|[^*]+(?=[^*])' // Consume to delim\n+ '|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)' // (2) a***#, a*** can only be a Right Delimiter\n+ '|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)' // (3) #***a, ***a can only be Left Delimiter\n+ '|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)' // (4) ***# can only be Left Delimiter\n+ '|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)' // (5) #***# can be either Left or Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?=notPunctSpace)'; // (6) a***a can be either Left or Right Delimiter\n\nconst emStrongRDelimAst = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm)\n .replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm)\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit(\n '^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n+ '|[^_]+(?=[^_])' // Consume to delim\n+ '|(?!_)punct(_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n+ '|notPunctSpace(_+)(?!_)(?=punctSpace|$)' // (2) a___#, a___ can only be a Right Delimiter\n+ '|(?!_)punctSpace(_+)(?=notPunctSpace)' // (3) #___a, ___a can only be Left Delimiter\n+ '|[\\\\s](_+)(?!_)(?=punct)' // (4) ___# can only be Left Delimiter\n+ '|(?!_)punct(_+)(?!_)(?=punct)', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst anyPunctuation = edit(/\\\\(punct)/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\n\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit(\n '^comment'\n + '|^' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. \n + '|^' // declaration, e.g. \n + '|^') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst _inlineLabel = /(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`[^`]*`|[^\\[\\]\\\\`])*?/;\n\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\n\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest,\n};\n\ntype InlineKeys = keyof typeof inlineNormal;\n\n/**\n * Pedantic Inline Grammar\n */\n\nconst inlinePedantic: Record = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex(),\n};\n\n/**\n * GFM Inline Grammar\n */\n\nconst inlineGfm: Record = {\n ...inlineNormal,\n emStrongRDelimAst: emStrongRDelimAstGfm,\n emStrongLDelim: emStrongLDelimGfm,\n url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, 'i')\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\ = {\n ...inlineGfm,\n br: edit(br).replace('{2,}', '*').getRegex(),\n text: edit(inlineGfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex(),\n};\n\n/**\n * exports\n */\n\nexport const block = {\n normal: blockNormal,\n gfm: blockGfm,\n pedantic: blockPedantic,\n};\n\nexport const inline = {\n normal: inlineNormal,\n gfm: inlineGfm,\n breaks: inlineBreaks,\n pedantic: inlinePedantic,\n};\n\nexport interface Rules {\n other: typeof other\n block: Record\n inline: Record\n}\n", "import { other } from './rules.ts';\n\n/**\n * Helpers\n */\nconst escapeReplacements: { [index: string]: string } = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n};\nconst getEscapeReplacement = (ch: string) => escapeReplacements[ch];\n\nexport function escape(html: string, encode?: boolean) {\n if (encode) {\n if (other.escapeTest.test(html)) {\n return html.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html)) {\n return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nexport function unescape(html: string) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(other.unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nexport function cleanUrl(href: string) {\n try {\n href = encodeURI(href).replace(other.percentDecode, '%');\n } catch {\n return null;\n }\n return href;\n}\n\nexport function splitCells(tableRow: string, count?: number) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(other.splitPipe);\n let i = 0;\n\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells.at(-1)?.trim()) {\n cells.pop();\n }\n\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(other.slashPipe, '|');\n }\n return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str: string, c: string, invert?: boolean) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.slice(0, l - suffLen);\n}\n\nexport function findClosingBracket(str: string, b: string) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n if (level > 0) {\n return -2;\n }\n\n return -1;\n}\n", "import { _defaults } from './defaults.ts';\nimport {\n rtrim,\n splitCells,\n findClosingBracket,\n} from './helpers.ts';\nimport type { Rules } from './rules.ts';\nimport type { _Lexer } from './Lexer.ts';\nimport type { Links, Tokens, Token } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\nfunction outputLink(cap: string[], link: Pick, raw: string, lexer: _Lexer, rules: Rules): Tokens.Link | Tokens.Image {\n const href = link.href;\n const title = link.title || null;\n const text = cap[1].replace(rules.other.outputLinkReplace, '$1');\n\n lexer.state.inLink = true;\n const token: Tokens.Link | Tokens.Image = {\n type: cap[0].charAt(0) === '!' ? 'image' : 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text),\n };\n lexer.state.inLink = false;\n return token;\n}\n\nfunction indentCodeCompensation(raw: string, text: string, rules: Rules) {\n const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(rules.other.beginningSpace);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nexport class _Tokenizer {\n options: MarkedOptions;\n rules!: Rules; // set by the lexer\n lexer!: _Lexer; // set by the lexer\n\n constructor(options?: MarkedOptions) {\n this.options = options || _defaults;\n }\n\n space(src: string): Tokens.Space | undefined {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0],\n };\n }\n }\n\n code(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(this.rules.other.codeRemoveIndent, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text,\n };\n }\n }\n\n fences(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '', this.rules);\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text,\n };\n }\n }\n\n heading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (this.rules.other.endingHash.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n hr(src: string): Tokens.Hr | undefined {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: rtrim(cap[0], '\\n'),\n };\n }\n }\n\n blockquote(src: string): Tokens.Blockquote | undefined {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], '\\n').split('\\n');\n let raw = '';\n let text = '';\n const tokens: Token[] = [];\n\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n\n let i;\n for (i = 0; i < lines.length; i++) {\n // get lines up to a continuation\n if (this.rules.other.blockquoteStart.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n } else if (!inBlockquote) {\n currentLines.push(lines[i]);\n } else {\n break;\n }\n }\n lines = lines.slice(i);\n\n const currentRaw = currentLines.join('\\n');\n const currentText = currentRaw\n // precede setext continuation with 4 spaces so it isn't a setext\n .replace(this.rules.other.blockquoteSetextReplace, '\\n $1')\n .replace(this.rules.other.blockquoteSetextReplace2, '');\n raw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n text = text ? `${text}\\n${currentText}` : currentText;\n\n // parse blockquote lines as top level tokens\n // merge paragraphs if this is a continuation\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n\n // if there is no continuation then we are done\n if (lines.length === 0) {\n break;\n }\n\n const lastToken = tokens.at(-1);\n\n if (lastToken?.type === 'code') {\n // blockquote continuation cannot be preceded by a code block\n break;\n } else if (lastToken?.type === 'blockquote') {\n // include continuation in nested blockquote\n const oldToken = lastToken as Tokens.Blockquote;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.blockquote(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n } else if (lastToken?.type === 'list') {\n // include continuation in nested list\n const oldToken = lastToken as Tokens.List;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.list(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens.at(-1)!.raw.length).split('\\n');\n continue;\n }\n }\n\n return {\n type: 'blockquote',\n raw,\n tokens,\n text,\n };\n }\n }\n\n list(src: string): Tokens.List | undefined {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n\n const list: Tokens.List = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: [],\n };\n\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n\n // Get next list item\n const itemRegex = this.rules.other.listItemRegex(bull);\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n let raw = '';\n let itemContents = '';\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n\n raw = cap[0];\n src = src.substring(raw.length);\n\n let line = cap[2].split('\\n', 1)[0].replace(this.rules.other.listReplaceTabs, (t: string) => ' '.repeat(3 * t.length));\n let nextLine = src.split('\\n', 1)[0];\n let blankLine = !line.trim();\n\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n } else if (blankLine) {\n indent = cap[1].length + 1;\n } else {\n indent = cap[2].search(this.rules.other.nonSpaceChar); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n\n if (blankLine && this.rules.other.blankLine.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n\n if (!endEarly) {\n const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n const hrRegex = this.rules.other.hrRegex(indent);\n const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(this.rules.other.listReplaceNesting, ' ');\n nextLineWithoutTabs = nextLine;\n } else {\n nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, ' ');\n }\n\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of html block\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n\n // Horizontal rule found\n if (hrRegex.test(nextLine)) {\n break;\n }\n\n if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLineWithoutTabs.slice(indent);\n } else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n\n // paragraph continuation unless last line was a different block level element\n if (line.replace(this.rules.other.tabCharGlobal, ' ').search(this.rules.other.nonSpaceChar) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n\n itemContents += '\\n' + nextLine;\n }\n\n if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n blankLine = true;\n }\n\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n } else if (this.rules.other.doubleBlankLine.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n\n let istask: RegExpExecArray | null = null;\n let ischecked: boolean | undefined;\n // Check for task list items\n if (this.options.gfm) {\n istask = this.rules.other.listIsTask.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== '[ ] ';\n itemContents = itemContents.replace(this.rules.other.listReplaceTask, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents,\n tokens: [],\n });\n\n list.raw += raw;\n }\n\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n const lastItem = list.items.at(-1);\n if (lastItem) {\n lastItem.raw = lastItem.raw.trimEnd();\n lastItem.text = lastItem.text.trimEnd();\n } else {\n // not a list since there were no items\n return;\n }\n list.raw = list.raw.trimEnd();\n\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (let i = 0; i < list.items.length; i++) {\n this.lexer.state.top = false;\n list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n\n if (!list.loose) {\n // Check if list should be loose\n const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => this.rules.other.anyLine.test(t.raw));\n\n list.loose = hasMultipleLineBreaks;\n }\n }\n\n // Set all items to loose if list is loose\n if (list.loose) {\n for (let i = 0; i < list.items.length; i++) {\n list.items[i].loose = true;\n }\n }\n\n return list;\n }\n }\n\n html(src: string): Tokens.HTML | undefined {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token: Tokens.HTML = {\n type: 'html',\n block: true,\n raw: cap[0],\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: cap[0],\n };\n return token;\n }\n }\n\n def(src: string): Tokens.Def | undefined {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, ' ');\n const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title,\n };\n }\n }\n\n table(src: string): Tokens.Table | undefined {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n\n if (!this.rules.other.tableDelimiter.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(this.rules.other.tableAlignChars, '').split('|');\n const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, '').split('\\n') : [];\n\n const item: Tokens.Table = {\n type: 'table',\n raw: cap[0],\n header: [],\n align: [],\n rows: [],\n };\n\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n\n for (const align of aligns) {\n if (this.rules.other.tableAlignRight.test(align)) {\n item.align.push('right');\n } else if (this.rules.other.tableAlignCenter.test(align)) {\n item.align.push('center');\n } else if (this.rules.other.tableAlignLeft.test(align)) {\n item.align.push('left');\n } else {\n item.align.push(null);\n }\n }\n\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i],\n });\n }\n\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i],\n };\n }));\n }\n\n return item;\n }\n\n lheading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1]),\n };\n }\n }\n\n paragraph(src: string): Tokens.Paragraph | undefined {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n text(src: string): Tokens.Text | undefined {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0]),\n };\n }\n }\n\n escape(src: string): Tokens.Escape | undefined {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: cap[1],\n };\n }\n }\n\n tag(src: string): Tokens.Tag | undefined {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n this.lexer.state.inLink = true;\n } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0],\n };\n }\n }\n\n link(src: string): Tokens.Link | Tokens.Image | undefined {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex === -2) {\n // more open parens than closed\n return;\n }\n\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = this.rules.other.pedanticHrefTitle.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (this.rules.other.startAngleBracket.test(href)) {\n if (this.options.pedantic && !(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title,\n }, cap[0], this.lexer, this.rules);\n }\n }\n\n reflink(src: string, links: Links): Tokens.Link | Tokens.Image | Tokens.Text | undefined {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text,\n };\n }\n return outputLink(cap, link, cap[0], this.lexer, this.rules);\n }\n }\n\n emStrong(src: string, maskedSrc: string, prevChar = ''): Tokens.Em | Tokens.Strong | undefined {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match) return;\n\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // skip single * in __abc*abc__\n\n rLength = [...rDelim].length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n\n codespan(src: string): Tokens.Codespan | undefined {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(this.rules.other.newLineCharGlobal, ' ');\n const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n return {\n type: 'codespan',\n raw: cap[0],\n text,\n };\n }\n }\n\n br(src: string): Tokens.Br | undefined {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0],\n };\n }\n }\n\n del(src: string): Tokens.Del | undefined {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2]),\n };\n }\n }\n\n autolink(src: string): Tokens.Link | undefined {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[1];\n href = 'mailto:' + text;\n } else {\n text = cap[1];\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n url(src: string): Tokens.Link | undefined {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[0];\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = cap[0];\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n inlineText(src: string): Tokens.Text | undefined {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n const escaped = this.lexer.state.inRawBlock;\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n escaped,\n };\n }\n }\n}\n", "import { _Tokenizer } from './Tokenizer.ts';\nimport { _defaults } from './defaults.ts';\nimport { other, block, inline } from './rules.ts';\nimport type { Token, TokensList, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Block Lexer\n */\nexport class _Lexer {\n tokens: TokensList;\n options: MarkedOptions;\n state: {\n inLink: boolean;\n inRawBlock: boolean;\n top: boolean;\n };\n\n private tokenizer: _Tokenizer;\n private inlineQueue: { src: string, tokens: Token[] }[];\n\n constructor(options?: MarkedOptions) {\n // TokenList cannot be created in one go\n this.tokens = [] as unknown as TokensList;\n this.tokens.links = Object.create(null);\n this.options = options || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true,\n };\n\n const rules = {\n other,\n block: block.normal,\n inline: inline.normal,\n };\n\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline,\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex(src: string, options?: MarkedOptions) {\n const lexer = new _Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline(src: string, options?: MarkedOptions) {\n const lexer = new _Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src: string) {\n src = src.replace(other.carriageReturn, '\\n');\n\n this.blockTokens(src, this.tokens);\n\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src: string, tokens?: Token[], lastParagraphClipped?: boolean): Token[];\n blockTokens(src: string, tokens?: TokensList, lastParagraphClipped?: boolean): TokensList;\n blockTokens(src: string, tokens: Token[] = [], lastParagraphClipped = false) {\n if (this.options.pedantic) {\n src = src.replace(other.tabCharGlobal, ' ').replace(other.spaceLine, '');\n }\n\n while (src) {\n let token: Tokens.Generic | undefined;\n\n if (this.options.extensions?.block?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.raw.length === 1 && lastToken !== undefined) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n lastToken.raw += '\\n';\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n // An indented code block cannot interrupt a paragraph.\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title,\n };\n tokens.push(token);\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n const lastToken = tokens.at(-1);\n if (lastParagraphClipped && lastToken?.type === 'paragraph') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n this.state.top = true;\n return tokens;\n }\n\n inline(src: string, tokens: Token[] = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src: string, tokens: Token[] = []): Token[] {\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match: RegExpExecArray | null = null;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index)\n + '[' + 'a'.repeat(match[0].length - 2) + ']'\n + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out blocks from extensions\n maskedSrc = this.options.hooks?.emStrongMask?.call({ lexer: this }, maskedSrc) ?? maskedSrc;\n\n let keepPrevChar = false;\n let prevChar = '';\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n let token: Tokens.Generic | undefined;\n\n // extensions\n if (this.options.extensions?.inline?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.type === 'text' && lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n}\n", "import { _defaults } from './defaults.ts';\nimport {\n cleanUrl,\n escape,\n} from './helpers.ts';\nimport { other } from './rules.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Tokens } from './Tokens.ts';\nimport type { _Parser } from './Parser.ts';\n\n/**\n * Renderer\n */\nexport class _Renderer {\n options: MarkedOptions;\n parser!: _Parser; // set by the parser\n constructor(options?: MarkedOptions) {\n this.options = options || _defaults;\n }\n\n space(token: Tokens.Space): RendererOutput {\n return '' as RendererOutput;\n }\n\n code({ text, lang, escaped }: Tokens.Code): RendererOutput {\n const langString = (lang || '').match(other.notSpaceStart)?.[0];\n\n const code = text.replace(other.endingNewline, '') + '\\n';\n\n if (!langString) {\n return '
    '\n        + (escaped ? code : escape(code, true))\n        + '
    \\n' as RendererOutput;\n }\n\n return '
    '\n      + (escaped ? code : escape(code, true))\n      + '
    \\n' as RendererOutput;\n }\n\n blockquote({ tokens }: Tokens.Blockquote): RendererOutput {\n const body = this.parser.parse(tokens);\n return `
    \\n${body}
    \\n` as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n def(token: Tokens.Def): RendererOutput {\n return '' as RendererOutput;\n }\n\n heading({ tokens, depth }: Tokens.Heading): RendererOutput {\n return `${this.parser.parseInline(tokens)}\\n` as RendererOutput;\n }\n\n hr(token: Tokens.Hr): RendererOutput {\n return '
    \\n' as RendererOutput;\n }\n\n list(token: Tokens.List): RendererOutput {\n const ordered = token.ordered;\n const start = token.start;\n\n let body = '';\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n\n const type = ordered ? 'ol' : 'ul';\n const startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startAttr + '>\\n' + body + '\\n' as RendererOutput;\n }\n\n listitem(item: Tokens.ListItem): RendererOutput {\n let itemBody = '';\n if (item.task) {\n const checkbox = this.checkbox({ checked: !!item.checked });\n if (item.loose) {\n if (item.tokens[0]?.type === 'paragraph') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + escape(item.tokens[0].tokens[0].text);\n item.tokens[0].tokens[0].escaped = true;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n raw: checkbox + ' ',\n text: checkbox + ' ',\n escaped: true,\n });\n }\n } else {\n itemBody += checkbox + ' ';\n }\n }\n\n itemBody += this.parser.parse(item.tokens, !!item.loose);\n\n return `
  • ${itemBody}
  • \\n` as RendererOutput;\n }\n\n checkbox({ checked }: Tokens.Checkbox): RendererOutput {\n return '' as RendererOutput;\n }\n\n paragraph({ tokens }: Tokens.Paragraph): RendererOutput {\n return `

    ${this.parser.parseInline(tokens)}

    \\n` as RendererOutput;\n }\n\n table(token: Tokens.Table): RendererOutput {\n let header = '';\n\n // header\n let cell = '';\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell as ParserOutput });\n\n let body = '';\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n\n cell = '';\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n\n body += this.tablerow({ text: cell as ParserOutput });\n }\n if (body) body = `${body}`;\n\n return '\\n'\n + '\\n'\n + header\n + '\\n'\n + body\n + '
    \\n' as RendererOutput;\n }\n\n tablerow({ text }: Tokens.TableRow): RendererOutput {\n return `\\n${text}\\n` as RendererOutput;\n }\n\n tablecell(token: Tokens.TableCell): RendererOutput {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? 'th' : 'td';\n const tag = token.align\n ? `<${type} align=\"${token.align}\">`\n : `<${type}>`;\n return tag + content + `\\n` as RendererOutput;\n }\n\n /**\n * span level renderer\n */\n strong({ tokens }: Tokens.Strong): RendererOutput {\n return `${this.parser.parseInline(tokens)}` as RendererOutput;\n }\n\n em({ tokens }: Tokens.Em): RendererOutput {\n return `${this.parser.parseInline(tokens)}` as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return `${escape(text, true)}` as RendererOutput;\n }\n\n br(token: Tokens.Br): RendererOutput {\n return '
    ' as RendererOutput;\n }\n\n del({ tokens }: Tokens.Del): RendererOutput {\n return `${this.parser.parseInline(tokens)}` as RendererOutput;\n }\n\n link({ href, title, tokens }: Tokens.Link): RendererOutput {\n const text = this.parser.parseInline(tokens) as string;\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text as RendererOutput;\n }\n href = cleanHref;\n let out = '
    ';\n return out as RendererOutput;\n }\n\n image({ href, title, text, tokens }: Tokens.Image): RendererOutput {\n if (tokens) {\n text = this.parser.parseInline(tokens, this.parser.textRenderer) as string;\n }\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return escape(text) as RendererOutput;\n }\n href = cleanHref;\n\n let out = `\"${text}\"`;\n {\n // no need for block level renderers\n strong({ text }: Tokens.Strong): RendererOutput {\n return text as RendererOutput;\n }\n\n em({ text }: Tokens.Em): RendererOutput {\n return text as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return text as RendererOutput;\n }\n\n del({ text }: Tokens.Del): RendererOutput {\n return text as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n text({ text }: Tokens.Text | Tokens.Escape | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n link({ text }: Tokens.Link): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n image({ text }: Tokens.Image): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n br(): RendererOutput {\n return '' as RendererOutput;\n }\n}\n", "import { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _defaults } from './defaults.ts';\nimport type { MarkedToken, Token, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Parsing & Compiling\n */\nexport class _Parser {\n options: MarkedOptions;\n renderer: _Renderer;\n textRenderer: _TextRenderer;\n constructor(options?: MarkedOptions) {\n this.options = options || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.renderer.parser = this;\n this.textRenderer = new _TextRenderer();\n }\n\n /**\n * Static Parse Method\n */\n static parse(tokens: Token[], options?: MarkedOptions) {\n const parser = new _Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens: Token[], options?: MarkedOptions) {\n const parser = new _Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens: Token[], top = true): ParserOutput {\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const genericToken = anyToken as Tokens.Generic;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'def', 'paragraph', 'text'].includes(genericToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'space': {\n out += this.renderer.space(token);\n continue;\n }\n case 'hr': {\n out += this.renderer.hr(token);\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(token);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token);\n continue;\n }\n case 'table': {\n out += this.renderer.table(token);\n continue;\n }\n case 'blockquote': {\n out += this.renderer.blockquote(token);\n continue;\n }\n case 'list': {\n out += this.renderer.list(token);\n continue;\n }\n case 'html': {\n out += this.renderer.html(token);\n continue;\n }\n case 'def': {\n out += this.renderer.def(token);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(token);\n continue;\n }\n case 'text': {\n let textToken = token;\n let body = this.renderer.text(textToken) as string;\n while (i + 1 < tokens.length && tokens[i + 1].type === 'text') {\n textToken = tokens[++i] as Tokens.Text;\n body += ('\\n' + this.renderer.text(textToken));\n }\n if (top) {\n out += this.renderer.paragraph({\n type: 'paragraph',\n raw: body,\n text: body,\n tokens: [{ type: 'text', raw: body, text: body, escaped: true }],\n });\n } else {\n out += body;\n }\n continue;\n }\n\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out as ParserOutput;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens: Token[], renderer: _Renderer | _TextRenderer = this.renderer): ParserOutput {\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(anyToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token);\n break;\n }\n case 'html': {\n out += renderer.html(token);\n break;\n }\n case 'link': {\n out += renderer.link(token);\n break;\n }\n case 'image': {\n out += renderer.image(token);\n break;\n }\n case 'strong': {\n out += renderer.strong(token);\n break;\n }\n case 'em': {\n out += renderer.em(token);\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token);\n break;\n }\n case 'br': {\n out += renderer.br(token);\n break;\n }\n case 'del': {\n out += renderer.del(token);\n break;\n }\n case 'text': {\n out += renderer.text(token);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out as ParserOutput;\n }\n}\n", "import { _defaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\n\nexport class _Hooks {\n options: MarkedOptions;\n block?: boolean;\n\n constructor(options?: MarkedOptions) {\n this.options = options || _defaults;\n }\n\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n 'emStrongMask',\n ]);\n\n static passThroughHooksRespectAsync = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n ]);\n\n /**\n * Process markdown before marked\n */\n preprocess(markdown: string) {\n return markdown;\n }\n\n /**\n * Process HTML after marked is finished\n */\n postprocess(html: ParserOutput) {\n return html;\n }\n\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens: Token[] | TokensList) {\n return tokens;\n }\n\n /**\n * Mask contents that should not be interpreted as em/strong delimiters\n */\n emStrongMask(src: string) {\n return src;\n }\n\n /**\n * Provide function to tokenize markdown\n */\n provideLexer() {\n return this.block ? _Lexer.lex : _Lexer.lexInline;\n }\n\n /**\n * Provide function to parse tokens\n */\n provideParser() {\n return this.block ? _Parser.parse : _Parser.parseInline;\n }\n}\n", "import { _getDefaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { escape } from './helpers.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, Tokens, TokensList } from './Tokens.ts';\n\nexport type MaybePromise = void | Promise;\n\ntype UnknownFunction = (...args: unknown[]) => unknown;\ntype GenericRendererFunction = (...args: unknown[]) => string | false;\n\nexport class Marked {\n defaults = _getDefaults();\n options = this.setOptions;\n\n parse = this.parseMarkdown(true);\n parseInline = this.parseMarkdown(false);\n\n Parser = _Parser;\n Renderer = _Renderer;\n TextRenderer = _TextRenderer;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer;\n Hooks = _Hooks;\n\n constructor(...args: MarkedExtension[]) {\n this.use(...args);\n }\n\n /**\n * Run callback for every token\n */\n walkTokens(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n let values: MaybePromise[] = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token as Tokens.Table;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token as Tokens.List;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token as Tokens.Generic;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens = genericToken[childTokens].flat(Infinity) as Token[] | TokensList;\n values = values.concat(this.walkTokens(tokens, callback));\n });\n } else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n\n use(...args: MarkedExtension[]) {\n const extensions: MarkedOptions['extensions'] = this.defaults.extensions || { renderers: {}, childTokens: {} };\n\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack } as MarkedOptions;\n\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function(...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (['options', 'parser'].includes(prop)) {\n // ignore options property\n continue;\n }\n const rendererProp = prop as Exclude, 'options' | 'parser'>;\n const rendererFunc = pack.renderer[rendererProp] as GenericRendererFunction;\n const prevRenderer = renderer[rendererProp] as GenericRendererFunction;\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args: unknown[]) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return (ret || '') as RendererOutput;\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop as Exclude, 'options' | 'rules' | 'lexer'>;\n const tokenizerFunc = pack.tokenizer[tokenizerProp] as UnknownFunction;\n const prevTokenizer = tokenizer[tokenizerProp] as UnknownFunction;\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args: unknown[]) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (['options', 'block'].includes(prop)) {\n // ignore options and block properties\n continue;\n }\n const hooksProp = prop as Exclude, 'options' | 'block'>;\n const hooksFunc = pack.hooks[hooksProp] as UnknownFunction;\n const prevHook = hooks[hooksProp] as UnknownFunction;\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg: unknown) => {\n if (this.defaults.async && _Hooks.passThroughHooksRespectAsync.has(prop)) {\n return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => {\n return prevHook.call(hooks, ret);\n });\n }\n\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args: unknown[]) => {\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function(token) {\n let values: MaybePromise[] = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n\n this.defaults = { ...this.defaults, ...opts };\n });\n\n return this;\n }\n\n setOptions(opt: MarkedOptions) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n\n lexer(src: string, options?: MarkedOptions) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n\n parser(tokens: Token[], options?: MarkedOptions) {\n return _Parser.parse(tokens, options ?? this.defaults);\n }\n\n private parseMarkdown(blockType: boolean) {\n type overloadedParse = {\n (src: string, options: MarkedOptions & { async: true }): Promise;\n (src: string, options: MarkedOptions & { async: false }): ParserOutput;\n (src: string, options?: MarkedOptions | null): ParserOutput | Promise;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parse: overloadedParse = (src: string, options?: MarkedOptions | null): any => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n\n const throwError = this.onError(!!opt.silent, !!opt.async);\n\n // throw error if an extension set async to true but parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error('marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.'));\n }\n\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n\n const lexer = opt.hooks ? opt.hooks.provideLexer() : (blockType ? _Lexer.lex : _Lexer.lexInline);\n const parser = opt.hooks ? opt.hooks.provideParser() : (blockType ? _Parser.parse : _Parser.parseInline);\n\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)\n .then(src => lexer(src, opt))\n .then(tokens => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens)\n .then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)\n .then(tokens => parser(tokens, opt))\n .then(html => opt.hooks ? opt.hooks.postprocess(html) : html)\n .catch(throwError);\n }\n\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src) as string;\n }\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n } catch(e) {\n return throwError(e as Error);\n }\n };\n\n return parse;\n }\n\n private onError(silent: boolean, async: boolean) {\n return (e: Error): string | Promise => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n if (silent) {\n const msg = '

    An error occurred:

    '\n          + escape(e.message + '', true)\n          + '
    ';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n", "import { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { Marked } from './Instance.ts';\nimport {\n _getDefaults,\n changeDefaults,\n _defaults,\n} from './defaults.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\nimport type { MaybePromise } from './Instance.ts';\n\nconst markedInstance = new Marked();\n\n/**\n * Compiles markdown to HTML asynchronously.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options, having async: true\n * @return Promise of string of compiled HTML\n */\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise;\n\n/**\n * Compiles markdown to HTML.\n *\n * @param src String of markdown source to be compiled\n * @param options Optional hash of options\n * @return String of compiled HTML. Will be a Promise of string if async is set to true by any extensions.\n */\nexport function marked(src: string, options: MarkedOptions & { async: false }): string;\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise;\nexport function marked(src: string, options?: MarkedOptions | null): string | Promise;\nexport function marked(src: string, opt?: MarkedOptions | null): string | Promise {\n return markedInstance.parse(src, opt);\n}\n\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\nmarked.setOptions = function(options: MarkedOptions) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\n\nmarked.defaults = _defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(...args: MarkedExtension[]) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n return markedInstance.walkTokens(tokens, callback);\n};\n\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\n\nexport const options = marked.options;\nexport const setOptions = marked.setOptions;\nexport const use = marked.use;\nexport const walkTokens = marked.walkTokens;\nexport const parseInline = marked.parseInline;\nexport const parse = marked;\nexport const parser = _Parser.parse;\nexport const lexer = _Lexer.lex;\nexport { _defaults as defaults, _getDefaults as getDefaults } from './defaults.ts';\nexport { _Lexer as Lexer } from './Lexer.ts';\nexport { _Parser as Parser } from './Parser.ts';\nexport { _Tokenizer as Tokenizer } from './Tokenizer.ts';\nexport { _Renderer as Renderer } from './Renderer.ts';\nexport { _TextRenderer as TextRenderer } from './TextRenderer.ts';\nexport { _Hooks as Hooks } from './Hooks.ts';\nexport { Marked } from './Instance.ts';\nexport type * from './MarkedOptions.ts';\nexport type * from './Tokens.ts';\n", "import type { MarkedToken, Token } from 'marked';\nimport { marked } from 'marked';\nimport { dedent } from 'ts-dedent';\nimport type { MarkdownLine, MarkdownWordType } from './types.js';\nimport type { MermaidConfig } from '../config.type.js';\nimport { log } from '../logger.js';\n\n/**\n * @param markdown - markdown to process\n * @returns processed markdown\n */\nfunction preprocessMarkdown(markdown: string, { markdownAutoWrap }: MermaidConfig): string {\n //Replace
    with \\n\n const withoutBR = markdown.replace(//g, '\\n');\n // Replace multiple newlines with a single newline\n const withoutMultipleNewlines = withoutBR.replace(/\\n{2,}/g, '\\n');\n // Remove extra spaces at the beginning of each line\n const withoutExtraSpaces = dedent(withoutMultipleNewlines);\n if (markdownAutoWrap === false) {\n return withoutExtraSpaces.replace(/ /g, ' ');\n }\n return withoutExtraSpaces;\n}\n\n/**\n * @param markdown - markdown to split into lines\n */\nexport function markdownToLines(markdown: string, config: MermaidConfig = {}): MarkdownLine[] {\n const preprocessedMarkdown = preprocessMarkdown(markdown, config);\n const nodes = marked.lexer(preprocessedMarkdown);\n const lines: MarkdownLine[] = [[]];\n let currentLine = 0;\n\n function processNode(node: MarkedToken, parentType: MarkdownWordType = 'normal') {\n if (node.type === 'text') {\n const textLines = node.text.split('\\n');\n textLines.forEach((textLine, index) => {\n if (index !== 0) {\n currentLine++;\n lines.push([]);\n }\n textLine.split(' ').forEach((word) => {\n word = word.replace(/'/g, `'`);\n if (word) {\n lines[currentLine].push({ content: word, type: parentType });\n }\n });\n });\n } else if (node.type === 'strong' || node.type === 'em') {\n node.tokens.forEach((contentNode) => {\n processNode(contentNode as MarkedToken, node.type);\n });\n } else if (node.type === 'html') {\n lines[currentLine].push({ content: node.text, type: 'normal' });\n }\n }\n\n nodes.forEach((treeNode) => {\n if (treeNode.type === 'paragraph') {\n treeNode.tokens?.forEach((contentNode) => {\n processNode(contentNode as MarkedToken);\n });\n } else if (treeNode.type === 'html') {\n lines[currentLine].push({ content: treeNode.text, type: 'normal' });\n } else {\n lines[currentLine].push({ content: treeNode.raw, type: 'normal' });\n }\n });\n\n return lines;\n}\n\nexport function markdownToHTML(markdown: string, { markdownAutoWrap }: MermaidConfig = {}) {\n const nodes = marked.lexer(markdown);\n\n function output(node: Token): string {\n if (node.type === 'text') {\n if (markdownAutoWrap === false) {\n return node.text.replace(/\\n */g, '
    ').replace(/ /g, ' ');\n }\n return node.text.replace(/\\n */g, '
    ');\n } else if (node.type === 'strong') {\n return `${node.tokens?.map(output).join('')}`;\n } else if (node.type === 'em') {\n return `${node.tokens?.map(output).join('')}`;\n } else if (node.type === 'paragraph') {\n return `

    ${node.tokens?.map(output).join('')}

    `;\n } else if (node.type === 'space') {\n return '';\n } else if (node.type === 'html') {\n return `${node.text}`;\n } else if (node.type === 'escape') {\n return node.text;\n }\n log.warn(`Unsupported markdown: ${node.type}`);\n return node.raw;\n }\n\n return nodes.map(output).join('');\n}\n", "import type { CheckFitFunction, MarkdownLine, MarkdownWord, MarkdownWordType } from './types.js';\n\n/**\n * Splits a string into graphemes if available, otherwise characters.\n */\nexport function splitTextToChars(text: string): string[] {\n if (Intl.Segmenter) {\n return [...new Intl.Segmenter().segment(text)].map((s) => s.segment);\n }\n return [...text];\n}\n\n/**\n * Splits a string into words by using `Intl.Segmenter` if available, or splitting by ' '.\n * `Intl.Segmenter` uses the default locale, which might be different across browsers.\n */\nexport function splitLineToWords(text: string): string[] {\n if (Intl.Segmenter) {\n return [...new Intl.Segmenter(undefined, { granularity: 'word' }).segment(text)].map(\n (s) => s.segment\n );\n }\n // Split by ' ' removes the ' 's from the result.\n const words = text.split(' ');\n // Add the ' 's back to the result.\n const wordsWithSpaces = words.flatMap((s) => [s, ' ']).filter((s) => s);\n // Remove last space.\n wordsWithSpaces.pop();\n return wordsWithSpaces;\n}\n\n/**\n * Splits a word into two parts, the first part fits the width and the remaining part.\n * @param checkFit - Function to check if word fits\n * @param word - Word to split\n * @returns [first part of word that fits, rest of word]\n */\nexport function splitWordToFitWidth(\n checkFit: CheckFitFunction,\n word: MarkdownWord\n): [MarkdownWord, MarkdownWord] {\n const characters = splitTextToChars(word.content);\n return splitWordToFitWidthRecursion(checkFit, [], characters, word.type);\n}\n\nfunction splitWordToFitWidthRecursion(\n checkFit: CheckFitFunction,\n usedChars: string[],\n remainingChars: string[],\n type: MarkdownWordType\n): [MarkdownWord, MarkdownWord] {\n if (remainingChars.length === 0) {\n return [\n { content: usedChars.join(''), type },\n { content: '', type },\n ];\n }\n const [nextChar, ...rest] = remainingChars;\n const newWord = [...usedChars, nextChar];\n if (checkFit([{ content: newWord.join(''), type }])) {\n return splitWordToFitWidthRecursion(checkFit, newWord, rest, type);\n }\n if (usedChars.length === 0 && nextChar) {\n // If the first character does not fit, split it anyway\n usedChars.push(nextChar);\n remainingChars.shift();\n }\n return [\n { content: usedChars.join(''), type },\n { content: remainingChars.join(''), type },\n ];\n}\n\n/**\n * Splits a line into multiple lines that satisfy the checkFit function.\n * @param line - Line to split\n * @param checkFit - Function to check if line fits\n * @returns Array of lines that fit\n */\nexport function splitLineToFitWidth(\n line: MarkdownLine,\n checkFit: CheckFitFunction\n): MarkdownLine[] {\n if (line.some(({ content }) => content.includes('\\n'))) {\n throw new Error('splitLineToFitWidth does not support newlines in the line');\n }\n return splitLineToFitWidthRecursion(line, checkFit);\n}\n\nfunction splitLineToFitWidthRecursion(\n words: MarkdownWord[],\n checkFit: CheckFitFunction,\n lines: MarkdownLine[] = [],\n newLine: MarkdownLine = []\n): MarkdownLine[] {\n // Return if there is nothing left to split\n if (words.length === 0) {\n // If there is a new line, add it to the lines\n if (newLine.length > 0) {\n lines.push(newLine);\n }\n return lines.length > 0 ? lines : [];\n }\n let joiner = '';\n if (words[0].content === ' ') {\n joiner = ' ';\n words.shift();\n }\n const nextWord: MarkdownWord = words.shift() ?? { content: ' ', type: 'normal' };\n const lineWithNextWord: MarkdownLine = [...newLine];\n if (joiner !== '') {\n lineWithNextWord.push({ content: joiner, type: 'normal' });\n }\n lineWithNextWord.push(nextWord);\n\n if (checkFit(lineWithNextWord)) {\n // nextWord fits, so we can add it to the new line and continue\n return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord);\n }\n\n // nextWord doesn't fit, so we need to split it\n if (newLine.length > 0) {\n // There was text in newLine, so add it to lines and push nextWord back into words.\n lines.push(newLine);\n words.unshift(nextWord);\n } else if (nextWord.content) {\n // There was no text in newLine, so we need to split nextWord\n const [line, rest] = splitWordToFitWidth(checkFit, nextWord);\n lines.push([line]);\n if (rest.content) {\n words.unshift(rest);\n }\n }\n return splitLineToFitWidthRecursion(words, checkFit, lines);\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n// @ts-nocheck TODO: Fix types\nimport { select } from 'd3';\nimport type { MermaidConfig } from '../config.type.js';\nimport type { SVGGroup } from '../diagram-api/types.js';\nimport common, { hasKatex, renderKatexSanitized, sanitizeText } from '../diagrams/common/common.js';\nimport type { D3TSpanElement, D3TextElement } from '../diagrams/common/commonTypes.js';\nimport { log } from '../logger.js';\nimport { markdownToHTML, markdownToLines } from '../rendering-util/handle-markdown-text.js';\nimport { decodeEntities } from '../utils.js';\nimport { getIconSVG, isIconAvailable } from './icons.js';\nimport { splitLineToFitWidth } from './splitText.js';\nimport type { MarkdownLine, MarkdownWord } from './types.js';\nimport { getConfig } from '../config.js';\n\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr('style', styleFn);\n }\n}\n\nasync function addHtmlSpan(\n element,\n node,\n width,\n classes,\n addBackground = false,\n // TODO: Make config mandatory\n config: MermaidConfig = getConfig()\n) {\n const fo = element.append('foreignObject');\n // This is not the final width but used in order to make sure the foreign\n // object in firefox gets a width at all. The final width is fetched from the div\n fo.attr('width', `${10 * width}px`);\n fo.attr('height', `${10 * width}px`);\n\n const div = fo.append('xhtml:div');\n const sanitizedLabel = hasKatex(node.label)\n ? await renderKatexSanitized(node.label.replace(common.lineBreakRegex, '\\n'), config)\n : sanitizeText(node.label, config);\n const labelClass = node.isNode ? 'nodeLabel' : 'edgeLabel';\n const span = div.append('span');\n span.html(sanitizedLabel);\n applyStyle(span, node.labelStyle);\n span.attr('class', `${labelClass} ${classes}`);\n\n applyStyle(div, node.labelStyle);\n div.style('display', 'table-cell');\n div.style('white-space', 'nowrap');\n div.style('line-height', '1.5');\n div.style('max-width', width + 'px');\n div.style('text-align', 'center');\n div.attr('xmlns', 'http://www.w3.org/1999/xhtml');\n if (addBackground) {\n div.attr('class', 'labelBkg');\n }\n\n let bbox = div.node().getBoundingClientRect();\n if (bbox.width === width) {\n div.style('display', 'table');\n div.style('white-space', 'break-spaces');\n div.style('width', width + 'px');\n bbox = div.node().getBoundingClientRect();\n }\n\n return fo.node();\n}\n\n/**\n * Creates a tspan element with the specified attributes for text positioning.\n *\n * @param textElement - The parent text element to append the tspan element.\n * @param lineIndex - The index of the current line in the structuredText array.\n * @param lineHeight - The line height value for the text.\n * @returns The created tspan element.\n */\nfunction createTspan(textElement: any, lineIndex: number, lineHeight: number) {\n return textElement\n .append('tspan')\n .attr('class', 'text-outer-tspan')\n .attr('x', 0)\n .attr('y', lineIndex * lineHeight - 0.1 + 'em')\n .attr('dy', lineHeight + 'em');\n}\n\nfunction computeWidthOfText(parentNode: any, lineHeight: number, line: MarkdownLine): number {\n const testElement = parentNode.append('text');\n const testSpan = createTspan(testElement, 1, lineHeight);\n updateTextContentAndStyles(testSpan, line);\n const textLength = testSpan.node().getComputedTextLength();\n testElement.remove();\n return textLength;\n}\n\nexport function computeDimensionOfText(\n parentNode: SVGGroup,\n lineHeight: number,\n text: string\n): DOMRect | undefined {\n const testElement: D3TextElement = parentNode.append('text');\n const testSpan: D3TSpanElement = createTspan(testElement, 1, lineHeight);\n updateTextContentAndStyles(testSpan, [{ content: text, type: 'normal' }]);\n const textDimension: DOMRect | undefined = testSpan.node()?.getBoundingClientRect();\n if (textDimension) {\n testElement.remove();\n }\n return textDimension;\n}\n\n/**\n * Creates a formatted text element by breaking lines and applying styles based on\n * the given structuredText.\n *\n * @param width - The maximum allowed width of the text.\n * @param g - The parent group element to append the formatted text.\n * @param structuredText - The structured text data to format.\n * @param addBackground - Whether to add a background to the text.\n */\nfunction createFormattedText(\n width: number,\n g: any,\n structuredText: MarkdownWord[][],\n addBackground = false\n) {\n const lineHeight = 1.1;\n const labelGroup = g.append('g');\n const bkg = labelGroup.insert('rect').attr('class', 'background').attr('style', 'stroke: none');\n const textElement = labelGroup.append('text').attr('y', '-10.1');\n let lineIndex = 0;\n for (const line of structuredText) {\n /**\n * Preprocess raw string content of line data\n * Creating an array of strings pre-split to satisfy width limit\n */\n const checkWidth = (line: MarkdownLine) =>\n computeWidthOfText(labelGroup, lineHeight, line) <= width;\n const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth);\n /** Add each prepared line as a tspan to the parent node */\n for (const preparedLine of linesUnderWidth) {\n const tspan = createTspan(textElement, lineIndex, lineHeight);\n updateTextContentAndStyles(tspan, preparedLine);\n lineIndex++;\n }\n }\n if (addBackground) {\n const bbox = textElement.node().getBBox();\n const padding = 2;\n bkg\n .attr('x', bbox.x - padding)\n .attr('y', bbox.y - padding)\n .attr('width', bbox.width + 2 * padding)\n .attr('height', bbox.height + 2 * padding);\n\n return labelGroup.node();\n } else {\n return textElement.node();\n }\n}\n\n/**\n * Updates the text content and styles of the given tspan element based on the\n * provided wrappedLine data.\n *\n * @param tspan - The tspan element to update.\n * @param wrappedLine - The line data to apply to the tspan element.\n */\nfunction updateTextContentAndStyles(tspan: any, wrappedLine: MarkdownWord[]) {\n tspan.text('');\n\n wrappedLine.forEach((word, index) => {\n const innerTspan = tspan\n .append('tspan')\n .attr('font-style', word.type === 'em' ? 'italic' : 'normal')\n .attr('class', 'text-inner-tspan')\n .attr('font-weight', word.type === 'strong' ? 'bold' : 'normal');\n if (index === 0) {\n innerTspan.text(word.content);\n } else {\n // TODO: check what joiner to use.\n innerTspan.text(' ' + word.content);\n }\n });\n}\n\n/**\n * Convert fontawesome labels into fontawesome icons by using a regex pattern\n * @param text - The raw string to convert\n * @param config - Mermaid config\n * @returns string with fontawesome icons as svg if the icon is registered otherwise as i tags\n */\nexport async function replaceIconSubstring(\n text: string,\n // TODO: Make config mandatory\n config: MermaidConfig = {}\n): Promise {\n const pendingReplacements: Promise[] = [];\n // cspell: disable-next-line\n text.replace(/(fa[bklrs]?):fa-([\\w-]+)/g, (fullMatch, prefix, iconName) => {\n pendingReplacements.push(\n (async () => {\n const registeredIconName = `${prefix}:${iconName}`;\n if (await isIconAvailable(registeredIconName)) {\n return await getIconSVG(registeredIconName, undefined, { class: 'label-icon' });\n } else {\n return ``;\n }\n })()\n );\n return fullMatch;\n });\n\n const replacements = await Promise.all(pendingReplacements);\n // cspell: disable-next-line\n return text.replace(/(fa[bklrs]?):fa-([\\w-]+)/g, () => replacements.shift() ?? '');\n}\n\n// Note when using from flowcharts converting the API isNode means classes should be set accordingly. When using htmlLabels => to set classes to 'nodeLabel' when isNode=true otherwise 'edgeLabel'\n// When not using htmlLabels => to set classes to 'title-row' when isTitle=true otherwise 'title-row'\nexport const createText = async (\n el,\n text = '',\n {\n style = '',\n isTitle = false,\n classes = '',\n useHtmlLabels = true,\n isNode = true,\n width = 200,\n addSvgBackground = false,\n } = {},\n config?: MermaidConfig\n) => {\n log.debug(\n 'XYZ createText',\n text,\n style,\n isTitle,\n classes,\n useHtmlLabels,\n isNode,\n 'addSvgBackground: ',\n addSvgBackground\n );\n if (useHtmlLabels) {\n // TODO: addHtmlLabel accepts a labelStyle. Do we possibly have that?\n\n const htmlText = markdownToHTML(text, config);\n const decodedReplacedText = await replaceIconSubstring(decodeEntities(htmlText), config);\n\n //for Katex the text could contain escaped characters, \\\\relax that should be transformed to \\relax\n const inputForKatex = text.replace(/\\\\\\\\/g, '\\\\');\n\n const node = {\n isNode,\n label: hasKatex(text) ? inputForKatex : decodedReplacedText,\n labelStyle: style.replace('fill:', 'color:'),\n };\n const vertexNode = await addHtmlSpan(el, node, width, classes, addSvgBackground, config);\n return vertexNode;\n } else {\n //sometimes the user might add br tags with 1 or more spaces in between, so we need to replace them with
    \n const sanitizeBR = text.replace(//g, '
    ');\n const structuredText = markdownToLines(sanitizeBR.replace('
    ', '
    '), config);\n const svgLabel = createFormattedText(\n width,\n el,\n structuredText,\n text ? addSvgBackground : false\n );\n if (isNode) {\n if (/stroke:/.exec(style)) {\n style = style.replace('stroke:', 'lineColor:');\n }\n\n const nodeLabelTextStyle = style\n .replace(/stroke:[^;]+;?/g, '')\n .replace(/stroke-width:[^;]+;?/g, '')\n .replace(/fill:[^;]+;?/g, '')\n .replace(/color:/g, 'fill:');\n select(svgLabel).attr('style', nodeLabelTextStyle);\n // svgLabel.setAttribute('style', style);\n } else {\n //On style, assume `stroke`, `stroke-width` are used for edge path, so remove them\n // remove `fill`\n // use `background` as `fill` for label rect,\n\n const edgeLabelRectStyle = style\n .replace(/stroke:[^;]+;?/g, '')\n .replace(/stroke-width:[^;]+;?/g, '')\n .replace(/fill:[^;]+;?/g, '')\n .replace(/background:/g, 'fill:');\n select(svgLabel)\n .select('rect')\n .attr('style', edgeLabelRectStyle.replace(/background:/g, 'fill:'));\n\n // for text, update fill color with `color`\n const edgeLabelTextStyle = style\n .replace(/stroke:[^;]+;?/g, '')\n .replace(/stroke-width:[^;]+;?/g, '')\n .replace(/fill:[^;]+;?/g, '')\n .replace(/color:/g, 'fill:');\n select(svgLabel).select('text').attr('style', edgeLabelTextStyle);\n }\n return svgLabel;\n }\n};\n", "import { createText } from '../../createText.js';\nimport type { Node } from '../../types.js';\nimport { getConfig } from '../../../diagram-api/diagramAPI.js';\nimport { select } from 'd3';\nimport defaultConfig from '../../../defaultConfig.js';\nimport { evaluate, sanitizeText } from '../../../diagrams/common/common.js';\nimport { decodeEntities, handleUndefinedAttr, parseFontSize } from '../../../utils.js';\nimport type { D3Selection, Point } from '../../../types.js';\n\nexport const labelHelper = async (\n parent: D3Selection,\n node: Node,\n _classes?: string\n) => {\n let cssClasses;\n const useHtmlLabels = node.useHtmlLabels || evaluate(getConfig()?.htmlLabels);\n if (!_classes) {\n cssClasses = 'node default';\n } else {\n cssClasses = _classes;\n }\n\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', cssClasses)\n .attr('id', node.domId || node.id);\n\n // Create the label and insert it after the rect\n const labelEl = shapeSvg\n .insert('g')\n .attr('class', 'label')\n .attr('style', handleUndefinedAttr(node.labelStyle));\n\n // Replace label with default value if undefined\n let label;\n if (node.label === undefined) {\n label = '';\n } else {\n label = typeof node.label === 'string' ? node.label : node.label[0];\n }\n\n const text = await createText(labelEl, sanitizeText(decodeEntities(label), getConfig()), {\n useHtmlLabels,\n width: node.width || getConfig().flowchart?.wrappingWidth,\n // @ts-expect-error -- This is currently not used. Should this be `classes` instead?\n cssClasses: 'markdown-node-label',\n style: node.labelStyle,\n addSvgBackground: !!node.icon || !!node.img,\n });\n // Get the size of the label\n let bbox = text.getBBox();\n const halfPadding = (node?.padding ?? 0) / 2;\n\n if (useHtmlLabels) {\n const div = text.children[0];\n const dv = select(text);\n\n // if there are images, need to wait for them to load before getting the bounding box\n const images = div.getElementsByTagName('img');\n if (images) {\n const noImgText = label.replace(/]*>/g, '').trim() === '';\n\n await Promise.all(\n [...images].map(\n (img) =>\n new Promise((res) => {\n /**\n *\n */\n function setupImage() {\n img.style.display = 'flex';\n img.style.flexDirection = 'column';\n\n if (noImgText) {\n // default size if no text\n const bodyFontSize = getConfig().fontSize\n ? getConfig().fontSize\n : window.getComputedStyle(document.body).fontSize;\n const enlargingFactor = 5;\n const [parsedBodyFontSize = defaultConfig.fontSize] = parseFontSize(bodyFontSize);\n const width = parsedBodyFontSize * enlargingFactor + 'px';\n img.style.minWidth = width;\n img.style.maxWidth = width;\n } else {\n img.style.width = '100%';\n }\n res(img);\n }\n setTimeout(() => {\n if (img.complete) {\n setupImage();\n }\n });\n img.addEventListener('error', setupImage);\n img.addEventListener('load', setupImage);\n })\n )\n );\n }\n\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n\n // Center the label\n if (useHtmlLabels) {\n labelEl.attr('transform', 'translate(' + -bbox.width / 2 + ', ' + -bbox.height / 2 + ')');\n } else {\n labelEl.attr('transform', 'translate(' + 0 + ', ' + -bbox.height / 2 + ')');\n }\n if (node.centerLabel) {\n labelEl.attr('transform', 'translate(' + -bbox.width / 2 + ', ' + -bbox.height / 2 + ')');\n }\n labelEl.insert('rect', ':first-child');\n return { shapeSvg, bbox, halfPadding, label: labelEl };\n};\nexport const insertLabel = async (\n parent: D3Selection,\n label: string,\n options: {\n labelStyle?: string | undefined;\n icon?: boolean | undefined;\n img?: string | undefined;\n useHtmlLabels?: boolean | undefined;\n padding: number;\n width?: number | undefined;\n centerLabel?: boolean | undefined;\n addSvgBackground?: boolean | undefined;\n }\n) => {\n const useHtmlLabels = options.useHtmlLabels || evaluate(getConfig()?.flowchart?.htmlLabels);\n\n // Create the label and insert it after the rect\n const labelEl = parent\n .insert('g')\n .attr('class', 'label')\n .attr('style', options.labelStyle || '');\n\n const text = await createText(labelEl, sanitizeText(decodeEntities(label), getConfig()), {\n useHtmlLabels,\n width: options.width || getConfig()?.flowchart?.wrappingWidth,\n style: options.labelStyle,\n addSvgBackground: !!options.icon || !!options.img,\n });\n // Get the size of the label\n let bbox = text.getBBox();\n const halfPadding = options.padding / 2;\n\n if (evaluate(getConfig()?.flowchart?.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n\n // Center the label\n if (useHtmlLabels) {\n labelEl.attr('transform', 'translate(' + -bbox.width / 2 + ', ' + -bbox.height / 2 + ')');\n } else {\n labelEl.attr('transform', 'translate(' + 0 + ', ' + -bbox.height / 2 + ')');\n }\n if (options.centerLabel) {\n labelEl.attr('transform', 'translate(' + -bbox.width / 2 + ', ' + -bbox.height / 2 + ')');\n }\n labelEl.insert('rect', ':first-child');\n return { shapeSvg: parent, bbox, halfPadding, label: labelEl };\n};\nexport const updateNodeBounds = (\n node: Node,\n // D3Selection is for the roughjs case, D3Selection is for the non-roughjs case\n element: D3Selection | D3Selection\n) => {\n const bbox = element.node()!.getBBox();\n node.width = bbox.width;\n node.height = bbox.height;\n};\n\n/**\n * @param parent - Parent element to append the polygon to\n * @param w - Width of the polygon\n * @param h - Height of the polygon\n * @param points - Array of points to create the polygon\n */\nexport function insertPolygonShape(\n parent: D3Selection,\n w: number,\n h: number,\n points: Point[]\n) {\n return parent\n .insert('polygon', ':first-child')\n .attr(\n 'points',\n points\n .map(function (d) {\n return d.x + ',' + d.y;\n })\n .join(' ')\n )\n .attr('class', 'label-container')\n .attr('transform', 'translate(' + -w / 2 + ',' + h / 2 + ')');\n}\n\nexport const getNodeClasses = (node: Node, extra?: string) =>\n (node.look === 'handDrawn' ? 'rough-node' : 'node') + ' ' + node.cssClasses + ' ' + (extra || '');\n\nexport function createPathFromPoints(points: Point[]) {\n const pointStrings = points.map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x},${p.y}`);\n pointStrings.push('Z');\n return pointStrings.join(' ');\n}\n\nexport function generateFullSineWavePoints(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n amplitude: number,\n numCycles: number\n) {\n const points = [];\n const steps = 50; // Number of segments to create a smooth curve\n const deltaX = x2 - x1;\n const deltaY = y2 - y1;\n const cycleLength = deltaX / numCycles;\n\n // Calculate frequency and phase shift\n const frequency = (2 * Math.PI) / cycleLength;\n const midY = y1 + deltaY / 2;\n\n for (let i = 0; i <= steps; i++) {\n const t = i / steps;\n const x = x1 + t * deltaX;\n const y = midY + amplitude * Math.sin(frequency * (x - x1));\n\n points.push({ x, y });\n }\n\n return points;\n}\n\n/**\n * @param centerX - x-coordinate of center of circle\n * @param centerY - y-coordinate of center of circle\n * @param radius - radius of circle\n * @param numPoints - total points required\n * @param startAngle - angle where arc will start\n * @param endAngle - angle where arc will end\n */\nexport function generateCirclePoints(\n centerX: number,\n centerY: number,\n radius: number,\n numPoints: number,\n startAngle: number,\n endAngle: number\n) {\n const points = [];\n\n // Convert angles to radians\n const startAngleRad = (startAngle * Math.PI) / 180;\n const endAngleRad = (endAngle * Math.PI) / 180;\n\n // Calculate the angle range in radians\n const angleRange = endAngleRad - startAngleRad;\n\n // Calculate the angle step\n const angleStep = angleRange / (numPoints - 1);\n\n for (let i = 0; i < numPoints; i++) {\n const angle = startAngleRad + i * angleStep;\n const x = centerX + radius * Math.cos(angle);\n const y = centerY + radius * Math.sin(angle);\n points.push({ x: -x, y: -y });\n }\n\n return points;\n}\n", "function intersectNode(node, point) {\n return node.intersect(point);\n}\n\nexport default intersectNode;\n", "function intersectEllipse(node, rx, ry, point) {\n // Formulae from: https://mathworld.wolfram.com/Ellipse-LineIntersection.html\n\n var cx = node.x;\n var cy = node.y;\n\n var px = cx - point.x;\n var py = cy - point.y;\n\n var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);\n\n var dx = Math.abs((rx * ry * px) / det);\n if (point.x < cx) {\n dx = -dx;\n }\n var dy = Math.abs((rx * ry * py) / det);\n if (point.y < cy) {\n dy = -dy;\n }\n\n return { x: cx + dx, y: cy + dy };\n}\n\nexport default intersectEllipse;\n", "import intersectEllipse from './intersect-ellipse.js';\n\nfunction intersectCircle(node, rx, point) {\n return intersectEllipse(node, rx, rx, point);\n}\n\nexport default intersectCircle;\n", "/**\n * Returns the point at which two lines, p and q, intersect or returns undefined if they do not intersect.\n */\nfunction intersectLine(p1, p2, q1, q2) {\n {\n // Algorithm from J. Avro, (ed.) Graphics Gems, No 2, Morgan Kaufmann, 1994,\n // p7 and p473.\n\n // Compute a1, b1, c1, where line joining points 1 and 2 is F(x,y) = a1 x +\n // b1 y + c1 = 0.\n const a1 = p2.y - p1.y;\n const b1 = p1.x - p2.x;\n const c1 = p2.x * p1.y - p1.x * p2.y;\n\n // Compute r3 and r4.\n const r3 = a1 * q1.x + b1 * q1.y + c1;\n const r4 = a1 * q2.x + b1 * q2.y + c1;\n\n const epsilon = 1e-6;\n\n // Check signs of r3 and r4. If both point 3 and point 4 lie on\n // same side of line 1, the line segments do not intersect.\n if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) {\n return /*DON'T_INTERSECT*/;\n }\n\n // Compute a2, b2, c2 where line joining points 3 and 4 is G(x,y) = a2 x + b2 y + c2 = 0\n const a2 = q2.y - q1.y;\n const b2 = q1.x - q2.x;\n const c2 = q2.x * q1.y - q1.x * q2.y;\n\n // Compute r1 and r2\n const r1 = a2 * p1.x + b2 * p1.y + c2;\n const r2 = a2 * p2.x + b2 * p2.y + c2;\n\n // Check signs of r1 and r2. If both point 1 and point 2 lie\n // on same side of second line segment, the line segments do\n // not intersect.\n if (Math.abs(r1) < epsilon && Math.abs(r2) < epsilon && sameSign(r1, r2)) {\n return /*DON'T_INTERSECT*/;\n }\n\n // Line segments intersect: compute intersection point.\n const denom = a1 * b2 - a2 * b1;\n if (denom === 0) {\n return /*COLLINEAR*/;\n }\n\n const offset = Math.abs(denom / 2);\n\n // The denom/2 is to get rounding instead of truncating. It\n // is added or subtracted to the numerator, depending upon the\n // sign of the numerator.\n let num = b1 * c2 - b2 * c1;\n const x = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n\n num = a2 * c1 - a1 * c2;\n const y = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n\n return { x: x, y: y };\n }\n}\n\nfunction sameSign(r1, r2) {\n return r1 * r2 > 0;\n}\n\nexport default intersectLine;\n", "import intersectLine from './intersect-line.js';\n\n/**\n * Returns the point ({x, y}) at which the point argument intersects with the node argument assuming\n * that it has the shape specified by polygon.\n */\nfunction intersectPolygon(node, polyPoints, point) {\n let x1 = node.x;\n let y1 = node.y;\n\n let intersections = [];\n\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n if (typeof polyPoints.forEach === 'function') {\n polyPoints.forEach(function (entry) {\n minX = Math.min(minX, entry.x);\n minY = Math.min(minY, entry.y);\n });\n } else {\n minX = Math.min(minX, polyPoints.x);\n minY = Math.min(minY, polyPoints.y);\n }\n\n let left = x1 - node.width / 2 - minX;\n let top = y1 - node.height / 2 - minY;\n\n for (let i = 0; i < polyPoints.length; i++) {\n let p1 = polyPoints[i];\n let p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0];\n let intersect = intersectLine(\n node,\n point,\n { x: left + p1.x, y: top + p1.y },\n { x: left + p2.x, y: top + p2.y }\n );\n if (intersect) {\n intersections.push(intersect);\n }\n }\n\n if (!intersections.length) {\n return node;\n }\n\n if (intersections.length > 1) {\n // More intersections, find the one nearest to edge end point\n intersections.sort(function (p, q) {\n let pdx = p.x - point.x;\n let pdy = p.y - point.y;\n let distp = Math.sqrt(pdx * pdx + pdy * pdy);\n\n let qdx = q.x - point.x;\n let qdy = q.y - point.y;\n let distq = Math.sqrt(qdx * qdx + qdy * qdy);\n\n return distp < distq ? -1 : distp === distq ? 0 : 1;\n });\n }\n return intersections[0];\n}\n\nexport default intersectPolygon;\n", "const intersectRect = (node, point) => {\n var x = node.x;\n var y = node.y;\n\n // Rectangle intersection algorithm from:\n // https://math.stackexchange.com/questions/108113/find-edge-between-two-boxes\n var dx = point.x - x;\n var dy = point.y - y;\n var w = node.width / 2;\n var h = node.height / 2;\n\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n // Intersection is top or bottom of rect.\n if (dy < 0) {\n h = -h;\n }\n sx = dy === 0 ? 0 : (h * dx) / dy;\n sy = h;\n } else {\n // Intersection is left or right of rect.\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = dx === 0 ? 0 : (w * dy) / dx;\n }\n\n return { x: x + sx, y: y + sy };\n};\n\nexport default intersectRect;\n", "/*\n * Borrowed with love from dagre-d3. Many thanks to cpettitt!\n */\n\nimport node from './intersect-node.js';\nimport circle from './intersect-circle.js';\nimport ellipse from './intersect-ellipse.js';\nimport polygon from './intersect-polygon.js';\nimport rect from './intersect-rect.js';\n\nexport default {\n node,\n circle,\n ellipse,\n polygon,\n rect,\n};\n", "import { getConfig } from '../../../diagram-api/diagramAPI.js';\nimport type { Node } from '../../types.js';\n\n// Striped fill like start or fork nodes in state diagrams\nexport const solidStateFill = (color: string) => {\n const { handDrawnSeed } = getConfig();\n return {\n fill: color,\n hachureAngle: 120, // angle of hachure,\n hachureGap: 4,\n fillWeight: 2,\n roughness: 0.7,\n stroke: color,\n seed: handDrawnSeed,\n };\n};\n\nexport const compileStyles = (node: Node) => {\n // node.cssCompiledStyles is an array of strings in the form of 'key: value' where key is the css property and value is the value\n // the array is the styles of node from the classes it is using\n // node.cssStyles is an array of styles directly set on the node\n // concat the arrays and remove duplicates such that the values from node.cssStyles are used if there are duplicates\n const stylesMap = styles2Map([\n ...(node.cssCompiledStyles || []),\n ...(node.cssStyles || []),\n ...(node.labelStyle || []),\n ]);\n return { stylesMap, stylesArray: [...stylesMap] };\n};\n\nexport const styles2Map = (styles: string[]) => {\n const styleMap = new Map();\n styles.forEach((style) => {\n const [key, value] = style.split(':');\n styleMap.set(key.trim(), value?.trim());\n });\n return styleMap;\n};\nexport const isLabelStyle = (key: string) => {\n return (\n key === 'color' ||\n key === 'font-size' ||\n key === 'font-family' ||\n key === 'font-weight' ||\n key === 'font-style' ||\n key === 'text-decoration' ||\n key === 'text-align' ||\n key === 'text-transform' ||\n key === 'line-height' ||\n key === 'letter-spacing' ||\n key === 'word-spacing' ||\n key === 'text-shadow' ||\n key === 'text-overflow' ||\n key === 'white-space' ||\n key === 'word-wrap' ||\n key === 'word-break' ||\n key === 'overflow-wrap' ||\n key === 'hyphens'\n );\n};\nexport const styles2String = (node: Node) => {\n const { stylesArray } = compileStyles(node);\n const labelStyles: string[] = [];\n const nodeStyles: string[] = [];\n const borderStyles: string[] = [];\n const backgroundStyles: string[] = [];\n\n stylesArray.forEach((style) => {\n const key = style[0];\n if (isLabelStyle(key)) {\n labelStyles.push(style.join(':') + ' !important');\n } else {\n nodeStyles.push(style.join(':') + ' !important');\n if (key.includes('stroke')) {\n borderStyles.push(style.join(':') + ' !important');\n }\n if (key === 'fill') {\n backgroundStyles.push(style.join(':') + ' !important');\n }\n }\n });\n\n return {\n labelStyles: labelStyles.join(';'),\n nodeStyles: nodeStyles.join(';'),\n stylesArray,\n borderStyles,\n backgroundStyles,\n };\n};\n\n// Striped fill like start or fork nodes in state diagrams\n// TODO remove any\nexport const userNodeOverrides = (node: Node, options: any) => {\n const { themeVariables, handDrawnSeed } = getConfig();\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n\n // index the style array to a map object\n const result = Object.assign(\n {\n roughness: 0.7,\n fill: stylesMap.get('fill') || mainBkg,\n fillStyle: 'hachure', // solid fill\n fillWeight: 4,\n hachureGap: 5.2,\n stroke: stylesMap.get('stroke') || nodeBorder,\n seed: handDrawnSeed,\n strokeWidth: stylesMap.get('stroke-width')?.replace('px', '') || 1.3,\n fillLineDash: [0, 0],\n strokeLineDash: getStrokeDashArray(stylesMap.get('stroke-dasharray')),\n },\n options\n );\n return result;\n};\n\nconst getStrokeDashArray = (strokeDasharrayStyle?: string) => {\n if (!strokeDasharrayStyle) {\n return [0, 0];\n }\n const dashArray = strokeDasharrayStyle.trim().split(/\\s+/).map(Number);\n if (dashArray.length === 1) {\n const val = isNaN(dashArray[0]) ? 0 : dashArray[0];\n return [val, val];\n }\n const first = isNaN(dashArray[0]) ? 0 : dashArray[0];\n const second = isNaN(dashArray[1]) ? 0 : dashArray[1];\n return [first, second];\n};\n", "function t(t,e,s){if(t&&t.length){const[n,o]=e,a=Math.PI/180*s,h=Math.cos(a),r=Math.sin(a);for(const e of t){const[t,s]=e;e[0]=(t-n)*h-(s-o)*r+n,e[1]=(t-n)*r+(s-o)*h+o}}}function e(t,e){return t[0]===e[0]&&t[1]===e[1]}function s(s,n,o,a=1){const h=o,r=Math.max(n,.1),i=s[0]&&s[0][0]&&\"number\"==typeof s[0][0]?[s]:s,c=[0,0];if(h)for(const e of i)t(e,c,h);const l=function(t,s,n){const o=[];for(const s of t){const t=[...s];e(t[0],t[t.length-1])||t.push([t[0][0],t[0][1]]),t.length>2&&o.push(t)}const a=[];s=Math.max(s,.1);const h=[];for(const t of o)for(let e=0;et.ymine.ymin?1:t.xe.x?1:t.ymax===e.ymax?0:(t.ymax-e.ymax)/Math.abs(t.ymax-e.ymax))),!h.length)return a;let r=[],i=h[0].ymin,c=0;for(;r.length||h.length;){if(h.length){let t=-1;for(let e=0;ei);e++)t=e;h.splice(0,t+1).forEach((t=>{r.push({s:i,edge:t})}))}if(r=r.filter((t=>!(t.edge.ymax<=i))),r.sort(((t,e)=>t.edge.x===e.edge.x?0:(t.edge.x-e.edge.x)/Math.abs(t.edge.x-e.edge.x))),(1!==n||c%s==0)&&r.length>1)for(let t=0;t=r.length)break;const s=r[t].edge,n=r[e].edge;a.push([[Math.round(s.x),i],[Math.round(n.x),i]])}i+=n,r.forEach((t=>{t.edge.x=t.edge.x+n*t.edge.islope})),c++}return a}(i,r,a);if(h){for(const e of i)t(e,c,-h);!function(e,s,n){const o=[];e.forEach((t=>o.push(...t))),t(o,s,n)}(l,c,-h)}return l}function n(t,e){var n;const o=e.hachureAngle+90;let a=e.hachureGap;a<0&&(a=4*e.strokeWidth),a=Math.round(Math.max(a,.1));let h=1;return e.roughness>=1&&((null===(n=e.randomizer)||void 0===n?void 0:n.next())||Math.random())>.7&&(h=a),s(t,a,o,h||1)}class o{constructor(t){this.helper=t}fillPolygons(t,e){return this._fillPolygons(t,e)}_fillPolygons(t,e){const s=n(t,e);return{type:\"fillSketch\",ops:this.renderLines(s,e)}}renderLines(t,e){const s=[];for(const n of t)s.push(...this.helper.doubleLineOps(n[0][0],n[0][1],n[1][0],n[1][1],e));return s}}function a(t){const e=t[0],s=t[1];return Math.sqrt(Math.pow(e[0]-s[0],2)+Math.pow(e[1]-s[1],2))}class h extends o{fillPolygons(t,e){let s=e.hachureGap;s<0&&(s=4*e.strokeWidth),s=Math.max(s,.1);const o=n(t,Object.assign({},e,{hachureGap:s})),h=Math.PI/180*e.hachureAngle,r=[],i=.5*s*Math.cos(h),c=.5*s*Math.sin(h);for(const[t,e]of o)a([t,e])&&r.push([[t[0]-i,t[1]+c],[...e]],[[t[0]+i,t[1]-c],[...e]]);return{type:\"fillSketch\",ops:this.renderLines(r,e)}}}class r extends o{fillPolygons(t,e){const s=this._fillPolygons(t,e),n=Object.assign({},e,{hachureAngle:e.hachureAngle+90}),o=this._fillPolygons(t,n);return s.ops=s.ops.concat(o.ops),s}}class i{constructor(t){this.helper=t}fillPolygons(t,e){const s=n(t,e=Object.assign({},e,{hachureAngle:0}));return this.dotsOnLines(s,e)}dotsOnLines(t,e){const s=[];let n=e.hachureGap;n<0&&(n=4*e.strokeWidth),n=Math.max(n,.1);let o=e.fillWeight;o<0&&(o=e.strokeWidth/2);const h=n/4;for(const r of t){const t=a(r),i=t/n,c=Math.ceil(i)-1,l=t-c*n,u=(r[0][0]+r[1][0])/2-n/4,p=Math.min(r[0][1],r[1][1]);for(let t=0;t{const h=a(t),r=Math.floor(h/(s+n)),i=(h+n-r*(s+n))/2;let c=t[0],l=t[1];c[0]>l[0]&&(c=t[1],l=t[0]);const u=Math.atan((l[1]-c[1])/(l[0]-c[0]));for(let t=0;t{const o=a(t),h=Math.round(o/(2*e));let r=t[0],i=t[1];r[0]>i[0]&&(r=t[1],i=t[0]);const c=Math.atan((i[1]-r[1])/(i[0]-r[0]));for(let t=0;tn%2?t+s:t+e));a.push({key:\"C\",data:t}),e=t[4],s=t[5];break}case\"Q\":a.push({key:\"Q\",data:[...r]}),e=r[2],s=r[3];break;case\"q\":{const t=r.map(((t,n)=>n%2?t+s:t+e));a.push({key:\"Q\",data:t}),e=t[2],s=t[3];break}case\"A\":a.push({key:\"A\",data:[...r]}),e=r[5],s=r[6];break;case\"a\":e+=r[5],s+=r[6],a.push({key:\"A\",data:[r[0],r[1],r[2],r[3],r[4],e,s]});break;case\"H\":a.push({key:\"H\",data:[...r]}),e=r[0];break;case\"h\":e+=r[0],a.push({key:\"H\",data:[e]});break;case\"V\":a.push({key:\"V\",data:[...r]}),s=r[0];break;case\"v\":s+=r[0],a.push({key:\"V\",data:[s]});break;case\"S\":a.push({key:\"S\",data:[...r]}),e=r[2],s=r[3];break;case\"s\":{const t=r.map(((t,n)=>n%2?t+s:t+e));a.push({key:\"S\",data:t}),e=t[2],s=t[3];break}case\"T\":a.push({key:\"T\",data:[...r]}),e=r[0],s=r[1];break;case\"t\":e+=r[0],s+=r[1],a.push({key:\"T\",data:[e,s]});break;case\"Z\":case\"z\":a.push({key:\"Z\",data:[]}),e=n,s=o}return a}function m(t){const e=[];let s=\"\",n=0,o=0,a=0,h=0,r=0,i=0;for(const{key:c,data:l}of t){switch(c){case\"M\":e.push({key:\"M\",data:[...l]}),[n,o]=l,[a,h]=l;break;case\"C\":e.push({key:\"C\",data:[...l]}),n=l[4],o=l[5],r=l[2],i=l[3];break;case\"L\":e.push({key:\"L\",data:[...l]}),[n,o]=l;break;case\"H\":n=l[0],e.push({key:\"L\",data:[n,o]});break;case\"V\":o=l[0],e.push({key:\"L\",data:[n,o]});break;case\"S\":{let t=0,a=0;\"C\"===s||\"S\"===s?(t=n+(n-r),a=o+(o-i)):(t=n,a=o),e.push({key:\"C\",data:[t,a,...l]}),r=l[0],i=l[1],n=l[2],o=l[3];break}case\"T\":{const[t,a]=l;let h=0,c=0;\"Q\"===s||\"T\"===s?(h=n+(n-r),c=o+(o-i)):(h=n,c=o);const u=n+2*(h-n)/3,p=o+2*(c-o)/3,f=t+2*(h-t)/3,d=a+2*(c-a)/3;e.push({key:\"C\",data:[u,p,f,d,t,a]}),r=h,i=c,n=t,o=a;break}case\"Q\":{const[t,s,a,h]=l,c=n+2*(t-n)/3,u=o+2*(s-o)/3,p=a+2*(t-a)/3,f=h+2*(s-h)/3;e.push({key:\"C\",data:[c,u,p,f,a,h]}),r=t,i=s,n=a,o=h;break}case\"A\":{const t=Math.abs(l[0]),s=Math.abs(l[1]),a=l[2],h=l[3],r=l[4],i=l[5],c=l[6];if(0===t||0===s)e.push({key:\"C\",data:[n,o,i,c,i,c]}),n=i,o=c;else if(n!==i||o!==c){x(n,o,i,c,t,s,a,h,r).forEach((function(t){e.push({key:\"C\",data:t})})),n=i,o=c}break}case\"Z\":e.push({key:\"Z\",data:[]}),n=a,o=h}s=c}return e}function w(t,e,s){return[t*Math.cos(s)-e*Math.sin(s),t*Math.sin(s)+e*Math.cos(s)]}function x(t,e,s,n,o,a,h,r,i,c){const l=(u=h,Math.PI*u/180);var u;let p=[],f=0,d=0,g=0,M=0;if(c)[f,d,g,M]=c;else{[t,e]=w(t,e,-l),[s,n]=w(s,n,-l);const h=(t-s)/2,c=(e-n)/2;let u=h*h/(o*o)+c*c/(a*a);u>1&&(u=Math.sqrt(u),o*=u,a*=u);const p=o*o,k=a*a,b=p*k-p*c*c-k*h*h,y=p*c*c+k*h*h,m=(r===i?-1:1)*Math.sqrt(Math.abs(b/y));g=m*o*c/a+(t+s)/2,M=m*-a*h/o+(e+n)/2,f=Math.asin(parseFloat(((e-M)/a).toFixed(9))),d=Math.asin(parseFloat(((n-M)/a).toFixed(9))),td&&(f-=2*Math.PI),!i&&d>f&&(d-=2*Math.PI)}let k=d-f;if(Math.abs(k)>120*Math.PI/180){const t=d,e=s,r=n;d=i&&d>f?f+120*Math.PI/180*1:f+120*Math.PI/180*-1,p=x(s=g+o*Math.cos(d),n=M+a*Math.sin(d),e,r,o,a,h,0,i,[d,t,g,M])}k=d-f;const b=Math.cos(f),y=Math.sin(f),m=Math.cos(d),P=Math.sin(d),v=Math.tan(k/4),S=4/3*o*v,O=4/3*a*v,L=[t,e],T=[t+S*y,e-O*b],D=[s+S*P,n-O*m],A=[s,n];if(T[0]=2*L[0]-T[0],T[1]=2*L[1]-T[1],c)return[T,D,A].concat(p);{p=[T,D,A].concat(p);const t=[];for(let e=0;e2){const o=[];for(let e=0;e2*Math.PI&&(f=0,d=2*Math.PI);const g=2*Math.PI/i.curveStepCount,M=Math.min(g/2,(d-f)/2),k=V(M,c,l,u,p,f,d,1,i);if(!i.disableMultiStroke){const t=V(M,c,l,u,p,f,d,1.5,i);k.push(...t)}return h&&(r?k.push(...$(c,l,c+u*Math.cos(f),l+p*Math.sin(f),i),...$(c,l,c+u*Math.cos(d),l+p*Math.sin(d),i)):k.push({op:\"lineTo\",data:[c,l]},{op:\"lineTo\",data:[c+u*Math.cos(f),l+p*Math.sin(f)]})),{type:\"path\",ops:k}}function _(t,e){const s=m(y(b(t))),n=[];let o=[0,0],a=[0,0];for(const{key:t,data:h}of s)switch(t){case\"M\":a=[h[0],h[1]],o=[h[0],h[1]];break;case\"L\":n.push(...$(a[0],a[1],h[0],h[1],e)),a=[h[0],h[1]];break;case\"C\":{const[t,s,o,r,i,c]=h;n.push(...Z(t,s,o,r,i,c,a,e)),a=[i,c];break}case\"Z\":n.push(...$(a[0],a[1],o[0],o[1],e)),a=[o[0],o[1]]}return{type:\"path\",ops:n}}function I(t,e){const s=[];for(const n of t)if(n.length){const t=e.maxRandomnessOffset||0,o=n.length;if(o>2){s.push({op:\"move\",data:[n[0][0]+G(t,e),n[0][1]+G(t,e)]});for(let a=1;a500?.4:-.0016668*i+1.233334;let l=o.maxRandomnessOffset||0;l*l*100>r&&(l=i/10);const u=l/2,p=.2+.2*W(o);let f=o.bowing*o.maxRandomnessOffset*(n-e)/200,d=o.bowing*o.maxRandomnessOffset*(t-s)/200;f=G(f,o,c),d=G(d,o,c);const g=[],M=()=>G(u,o,c),k=()=>G(l,o,c),b=o.preserveVertices;return a&&(h?g.push({op:\"move\",data:[t+(b?0:M()),e+(b?0:M())]}):g.push({op:\"move\",data:[t+(b?0:G(l,o,c)),e+(b?0:G(l,o,c))]})),h?g.push({op:\"bcurveTo\",data:[f+t+(s-t)*p+M(),d+e+(n-e)*p+M(),f+t+2*(s-t)*p+M(),d+e+2*(n-e)*p+M(),s+(b?0:M()),n+(b?0:M())]}):g.push({op:\"bcurveTo\",data:[f+t+(s-t)*p+k(),d+e+(n-e)*p+k(),f+t+2*(s-t)*p+k(),d+e+2*(n-e)*p+k(),s+(b?0:k()),n+(b?0:k())]}),g}function j(t,e,s){if(!t.length)return[];const n=[];n.push([t[0][0]+G(e,s),t[0][1]+G(e,s)]),n.push([t[0][0]+G(e,s),t[0][1]+G(e,s)]);for(let o=1;o3){const a=[],h=1-s.curveTightness;o.push({op:\"move\",data:[t[1][0],t[1][1]]});for(let e=1;e+21&&o.push(s)}else o.push(s);o.push(t[e+3])}else{const n=.5,a=t[e+0],h=t[e+1],r=t[e+2],i=t[e+3],c=J(a,h,n),l=J(h,r,n),u=J(r,i,n),p=J(c,l,n),f=J(l,u,n),d=J(p,f,n);K([a,c,p,d],0,s,o),K([d,f,u,i],0,s,o)}var a,h;return o}function U(t,e){return X(t,0,t.length,e)}function X(t,e,s,n,o){const a=o||[],h=t[e],r=t[s-1];let i=0,c=1;for(let n=e+1;ni&&(i=e,c=n)}return Math.sqrt(i)>n?(X(t,e,c+1,n,a),X(t,c,s,n,a)):(a.length||a.push(h),a.push(r)),a}function Y(t,e=.15,s){const n=[],o=(t.length-1)/3;for(let s=0;s0?X(n,0,n.length,s):n}const tt=\"none\";class et{constructor(t){this.defaultOptions={maxRandomnessOffset:2,roughness:1,bowing:1,stroke:\"#000\",strokeWidth:1,curveTightness:0,curveFitting:.95,curveStepCount:9,fillStyle:\"hachure\",fillWeight:-1,hachureAngle:-41,hachureGap:-1,dashOffset:-1,dashGap:-1,zigzagOffset:-1,seed:0,disableMultiStroke:!1,disableMultiStrokeFill:!1,preserveVertices:!1,fillShapeRoughnessGain:.8},this.config=t||{},this.config.options&&(this.defaultOptions=this._o(this.config.options))}static newSeed(){return Math.floor(Math.random()*2**31)}_o(t){return t?Object.assign({},this.defaultOptions,t):this.defaultOptions}_d(t,e,s){return{shape:t,sets:e||[],options:s||this.defaultOptions}}line(t,e,s,n,o){const a=this._o(o);return this._d(\"line\",[v(t,e,s,n,a)],a)}rectangle(t,e,s,n,o){const a=this._o(o),h=[],r=O(t,e,s,n,a);if(a.fill){const o=[[t,e],[t+s,e],[t+s,e+n],[t,e+n]];\"solid\"===a.fillStyle?h.push(I([o],a)):h.push(C([o],a))}return a.stroke!==tt&&h.push(r),this._d(\"rectangle\",h,a)}ellipse(t,e,s,n,o){const a=this._o(o),h=[],r=T(s,n,a),i=D(t,e,a,r);if(a.fill)if(\"solid\"===a.fillStyle){const s=D(t,e,a,r).opset;s.type=\"fillPath\",h.push(s)}else h.push(C([i.estimatedPoints],a));return a.stroke!==tt&&h.push(i.opset),this._d(\"ellipse\",h,a)}circle(t,e,s,n){const o=this.ellipse(t,e,s,s,n);return o.shape=\"circle\",o}linearPath(t,e){const s=this._o(e);return this._d(\"linearPath\",[S(t,!1,s)],s)}arc(t,e,s,n,o,a,h=!1,r){const i=this._o(r),c=[],l=A(t,e,s,n,o,a,h,!0,i);if(h&&i.fill)if(\"solid\"===i.fillStyle){const h=Object.assign({},i);h.disableMultiStroke=!0;const r=A(t,e,s,n,o,a,!0,!1,h);r.type=\"fillPath\",c.push(r)}else c.push(function(t,e,s,n,o,a,h){const r=t,i=e;let c=Math.abs(s/2),l=Math.abs(n/2);c+=G(.01*c,h),l+=G(.01*l,h);let u=o,p=a;for(;u<0;)u+=2*Math.PI,p+=2*Math.PI;p-u>2*Math.PI&&(u=0,p=2*Math.PI);const f=(p-u)/h.curveStepCount,d=[];for(let t=u;t<=p;t+=f)d.push([r+c*Math.cos(t),i+l*Math.sin(t)]);return d.push([r+c*Math.cos(p),i+l*Math.sin(p)]),d.push([r,i]),C([d],h)}(t,e,s,n,o,a,i));return i.stroke!==tt&&c.push(l),this._d(\"arc\",c,i)}curve(t,e){const s=this._o(e),n=[],o=L(t,s);if(s.fill&&s.fill!==tt)if(\"solid\"===s.fillStyle){const e=L(t,Object.assign(Object.assign({},s),{disableMultiStroke:!0,roughness:s.roughness?s.roughness+s.fillShapeRoughnessGain:0}));n.push({type:\"fillPath\",ops:this._mergedShape(e.ops)})}else{const e=[],o=t;if(o.length){const t=\"number\"==typeof o[0][0]?[o]:o;for(const n of t)n.length<3?e.push(...n):3===n.length?e.push(...Y(H([n[0],n[0],n[1],n[2]]),10,(1+s.roughness)/2)):e.push(...Y(H(n),10,(1+s.roughness)/2))}e.length&&n.push(C([e],s))}return s.stroke!==tt&&n.push(o),this._d(\"curve\",n,s)}polygon(t,e){const s=this._o(e),n=[],o=S(t,!0,s);return s.fill&&(\"solid\"===s.fillStyle?n.push(I([t],s)):n.push(C([t],s))),s.stroke!==tt&&n.push(o),this._d(\"polygon\",n,s)}path(t,e){const s=this._o(e),n=[];if(!t)return this._d(\"path\",n,s);t=(t||\"\").replace(/\\n/g,\" \").replace(/(-\\s)/g,\"-\").replace(\"/(ss)/g\",\" \");const o=s.fill&&\"transparent\"!==s.fill&&s.fill!==tt,a=s.stroke!==tt,h=!!(s.simplification&&s.simplification<1),r=function(t,e,s){const n=m(y(b(t))),o=[];let a=[],h=[0,0],r=[];const i=()=>{r.length>=4&&a.push(...Y(r,e)),r=[]},c=()=>{i(),a.length&&(o.push(a),a=[])};for(const{key:t,data:e}of n)switch(t){case\"M\":c(),h=[e[0],e[1]],a.push(h);break;case\"L\":i(),a.push([e[0],e[1]]);break;case\"C\":if(!r.length){const t=a.length?a[a.length-1]:h;r.push([t[0],t[1]])}r.push([e[0],e[1]]),r.push([e[2],e[3]]),r.push([e[4],e[5]]);break;case\"Z\":i(),a.push([h[0],h[1]])}if(c(),!s)return o;const l=[];for(const t of o){const e=U(t,s);e.length&&l.push(e)}return l}(t,1,h?4-4*(s.simplification||1):(1+s.roughness)/2),i=_(t,s);if(o)if(\"solid\"===s.fillStyle)if(1===r.length){const e=_(t,Object.assign(Object.assign({},s),{disableMultiStroke:!0,roughness:s.roughness?s.roughness+s.fillShapeRoughnessGain:0}));n.push({type:\"fillPath\",ops:this._mergedShape(e.ops)})}else n.push(I(r,s));else n.push(C(r,s));return a&&(h?r.forEach((t=>{n.push(S(t,!1,s))})):n.push(i)),this._d(\"path\",n,s)}opsToPath(t,e){let s=\"\";for(const n of t.ops){const t=\"number\"==typeof e&&e>=0?n.data.map((t=>+t.toFixed(e))):n.data;switch(n.op){case\"move\":s+=`M${t[0]} ${t[1]} `;break;case\"bcurveTo\":s+=`C${t[0]} ${t[1]}, ${t[2]} ${t[3]}, ${t[4]} ${t[5]} `;break;case\"lineTo\":s+=`L${t[0]} ${t[1]} `}}return s.trim()}toPaths(t){const e=t.sets||[],s=t.options||this.defaultOptions,n=[];for(const t of e){let e=null;switch(t.type){case\"path\":e={d:this.opsToPath(t),stroke:s.stroke,strokeWidth:s.strokeWidth,fill:tt};break;case\"fillPath\":e={d:this.opsToPath(t),stroke:tt,strokeWidth:0,fill:s.fill||tt};break;case\"fillSketch\":e=this.fillSketch(t,s)}e&&n.push(e)}return n}fillSketch(t,e){let s=e.fillWeight;return s<0&&(s=e.strokeWidth/2),{d:this.opsToPath(t),stroke:e.fill||tt,strokeWidth:s,fill:tt}}_mergedShape(t){return t.filter(((t,e)=>0===e||\"move\"!==t.op))}}class st{constructor(t,e){this.canvas=t,this.ctx=this.canvas.getContext(\"2d\"),this.gen=new et(e)}draw(t){const e=t.sets||[],s=t.options||this.getDefaultOptions(),n=this.ctx,o=t.options.fixedDecimalPlaceDigits;for(const a of e)switch(a.type){case\"path\":n.save(),n.strokeStyle=\"none\"===s.stroke?\"transparent\":s.stroke,n.lineWidth=s.strokeWidth,s.strokeLineDash&&n.setLineDash(s.strokeLineDash),s.strokeLineDashOffset&&(n.lineDashOffset=s.strokeLineDashOffset),this._drawToContext(n,a,o),n.restore();break;case\"fillPath\":{n.save(),n.fillStyle=s.fill||\"\";const e=\"curve\"===t.shape||\"polygon\"===t.shape||\"path\"===t.shape?\"evenodd\":\"nonzero\";this._drawToContext(n,a,o,e),n.restore();break}case\"fillSketch\":this.fillSketch(n,a,s)}}fillSketch(t,e,s){let n=s.fillWeight;n<0&&(n=s.strokeWidth/2),t.save(),s.fillLineDash&&t.setLineDash(s.fillLineDash),s.fillLineDashOffset&&(t.lineDashOffset=s.fillLineDashOffset),t.strokeStyle=s.fill||\"\",t.lineWidth=n,this._drawToContext(t,e,s.fixedDecimalPlaceDigits),t.restore()}_drawToContext(t,e,s,n=\"nonzero\"){t.beginPath();for(const n of e.ops){const e=\"number\"==typeof s&&s>=0?n.data.map((t=>+t.toFixed(s))):n.data;switch(n.op){case\"move\":t.moveTo(e[0],e[1]);break;case\"bcurveTo\":t.bezierCurveTo(e[0],e[1],e[2],e[3],e[4],e[5]);break;case\"lineTo\":t.lineTo(e[0],e[1])}}\"fillPath\"===e.type?t.fill(n):t.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(t,e,s,n,o){const a=this.gen.line(t,e,s,n,o);return this.draw(a),a}rectangle(t,e,s,n,o){const a=this.gen.rectangle(t,e,s,n,o);return this.draw(a),a}ellipse(t,e,s,n,o){const a=this.gen.ellipse(t,e,s,n,o);return this.draw(a),a}circle(t,e,s,n){const o=this.gen.circle(t,e,s,n);return this.draw(o),o}linearPath(t,e){const s=this.gen.linearPath(t,e);return this.draw(s),s}polygon(t,e){const s=this.gen.polygon(t,e);return this.draw(s),s}arc(t,e,s,n,o,a,h=!1,r){const i=this.gen.arc(t,e,s,n,o,a,h,r);return this.draw(i),i}curve(t,e){const s=this.gen.curve(t,e);return this.draw(s),s}path(t,e){const s=this.gen.path(t,e);return this.draw(s),s}}const nt=\"http://www.w3.org/2000/svg\";class ot{constructor(t,e){this.svg=t,this.gen=new et(e)}draw(t){const e=t.sets||[],s=t.options||this.getDefaultOptions(),n=this.svg.ownerDocument||window.document,o=n.createElementNS(nt,\"g\"),a=t.options.fixedDecimalPlaceDigits;for(const h of e){let e=null;switch(h.type){case\"path\":e=n.createElementNS(nt,\"path\"),e.setAttribute(\"d\",this.opsToPath(h,a)),e.setAttribute(\"stroke\",s.stroke),e.setAttribute(\"stroke-width\",s.strokeWidth+\"\"),e.setAttribute(\"fill\",\"none\"),s.strokeLineDash&&e.setAttribute(\"stroke-dasharray\",s.strokeLineDash.join(\" \").trim()),s.strokeLineDashOffset&&e.setAttribute(\"stroke-dashoffset\",`${s.strokeLineDashOffset}`);break;case\"fillPath\":e=n.createElementNS(nt,\"path\"),e.setAttribute(\"d\",this.opsToPath(h,a)),e.setAttribute(\"stroke\",\"none\"),e.setAttribute(\"stroke-width\",\"0\"),e.setAttribute(\"fill\",s.fill||\"\"),\"curve\"!==t.shape&&\"polygon\"!==t.shape||e.setAttribute(\"fill-rule\",\"evenodd\");break;case\"fillSketch\":e=this.fillSketch(n,h,s)}e&&o.appendChild(e)}return o}fillSketch(t,e,s){let n=s.fillWeight;n<0&&(n=s.strokeWidth/2);const o=t.createElementNS(nt,\"path\");return o.setAttribute(\"d\",this.opsToPath(e,s.fixedDecimalPlaceDigits)),o.setAttribute(\"stroke\",s.fill||\"\"),o.setAttribute(\"stroke-width\",n+\"\"),o.setAttribute(\"fill\",\"none\"),s.fillLineDash&&o.setAttribute(\"stroke-dasharray\",s.fillLineDash.join(\" \").trim()),s.fillLineDashOffset&&o.setAttribute(\"stroke-dashoffset\",`${s.fillLineDashOffset}`),o}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(t,e){return this.gen.opsToPath(t,e)}line(t,e,s,n,o){const a=this.gen.line(t,e,s,n,o);return this.draw(a)}rectangle(t,e,s,n,o){const a=this.gen.rectangle(t,e,s,n,o);return this.draw(a)}ellipse(t,e,s,n,o){const a=this.gen.ellipse(t,e,s,n,o);return this.draw(a)}circle(t,e,s,n){const o=this.gen.circle(t,e,s,n);return this.draw(o)}linearPath(t,e){const s=this.gen.linearPath(t,e);return this.draw(s)}polygon(t,e){const s=this.gen.polygon(t,e);return this.draw(s)}arc(t,e,s,n,o,a,h=!1,r){const i=this.gen.arc(t,e,s,n,o,a,h,r);return this.draw(i)}curve(t,e){const s=this.gen.curve(t,e);return this.draw(s)}path(t,e){const s=this.gen.path(t,e);return this.draw(s)}}var at={canvas:(t,e)=>new st(t,e),svg:(t,e)=>new ot(t,e),generator:t=>new et(t),newSeed:()=>et.newSeed()};export{at as default};\n", "import { log } from '../../../logger.js';\nimport { updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { handleUndefinedAttr } from '../../../utils.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function anchor(parent: D3Selection, node: Node) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const classes = getNodeClasses(node);\n let cssClasses = classes;\n if (!classes) {\n cssClasses = 'anchor';\n }\n const shapeSvg = parent\n .insert('g')\n .attr('class', cssClasses)\n .attr('id', node.domId || node.id);\n\n const radius = 1;\n\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: 'black', stroke: 'none', fillStyle: 'solid' });\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n }\n const roughNode = rc.circle(0, 0, radius * 2, options);\n const circleElem = shapeSvg.insert(() => roughNode, ':first-child');\n circleElem.attr('class', 'anchor').attr('style', handleUndefinedAttr(cssStyles));\n\n updateNodeBounds(node, circleElem);\n\n node.intersect = function (point) {\n log.info('Circle intersect', node, radius, point);\n return intersect.circle(node, radius, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nfunction generateArcPoints(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n rx: number,\n ry: number,\n clockwise: boolean\n) {\n const numPoints = 20;\n // Calculate midpoint\n const midX = (x1 + x2) / 2;\n const midY = (y1 + y2) / 2;\n\n // Calculate the angle of the line connecting the points\n const angle = Math.atan2(y2 - y1, x2 - x1);\n\n // Calculate transformed coordinates for the ellipse\n const dx = (x2 - x1) / 2;\n const dy = (y2 - y1) / 2;\n\n // Scale to unit circle\n const transformedX = dx / rx;\n const transformedY = dy / ry;\n\n // Calculate the distance between points on the unit circle\n const distance = Math.sqrt(transformedX ** 2 + transformedY ** 2);\n\n // Check if the ellipse can be drawn with the given radii\n if (distance > 1) {\n throw new Error('The given radii are too small to create an arc between the points.');\n }\n\n // Calculate the distance from the midpoint to the center of the ellipse\n const scaledCenterDistance = Math.sqrt(1 - distance ** 2);\n\n // Calculate the center of the ellipse\n const centerX = midX + scaledCenterDistance * ry * Math.sin(angle) * (clockwise ? -1 : 1);\n const centerY = midY - scaledCenterDistance * rx * Math.cos(angle) * (clockwise ? -1 : 1);\n\n // Calculate the start and end angles on the ellipse\n const startAngle = Math.atan2((y1 - centerY) / ry, (x1 - centerX) / rx);\n const endAngle = Math.atan2((y2 - centerY) / ry, (x2 - centerX) / rx);\n\n // Adjust angles for clockwise/counterclockwise\n let angleRange = endAngle - startAngle;\n if (clockwise && angleRange < 0) {\n angleRange += 2 * Math.PI;\n }\n if (!clockwise && angleRange > 0) {\n angleRange -= 2 * Math.PI;\n }\n\n // Generate points\n const points = [];\n for (let i = 0; i < numPoints; i++) {\n const t = i / (numPoints - 1);\n const angle = startAngle + t * angleRange;\n const x = centerX + rx * Math.cos(angle);\n const y = centerY + ry * Math.sin(angle);\n points.push({ x, y });\n }\n\n return points;\n}\n\nexport async function bowTieRect(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + node.padding + 20;\n const h = bbox.height + node.padding;\n\n const ry = h / 2;\n const rx = ry / (2.5 + h / 50);\n\n // let shape: d3.Selection;\n const { cssStyles } = node;\n\n const points = [\n { x: w / 2, y: -h / 2 },\n { x: -w / 2, y: -h / 2 },\n ...generateArcPoints(-w / 2, -h / 2, -w / 2, h / 2, rx, ry, false),\n { x: w / 2, y: h / 2 },\n ...generateArcPoints(w / 2, h / 2, w / 2, -h / 2, rx, ry, true),\n ];\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n const bowTieRectPath = createPathFromPoints(points);\n const bowTieRectShapePath = rc.path(bowTieRectPath, options);\n const bowTieRectShape = shapeSvg.insert(() => bowTieRectShapePath, ':first-child');\n\n bowTieRectShape.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n bowTieRectShape.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n bowTieRectShape.selectAll('path').attr('style', nodeStyles);\n }\n\n bowTieRectShape.attr('transform', `translate(${rx / 2}, 0)`);\n\n updateNodeBounds(node, bowTieRectShape);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import type { D3Selection } from '../../../types.js';\n\nexport function insertPolygonShape(\n parent: D3Selection,\n w: number,\n h: number,\n points: { x: number; y: number }[]\n) {\n return parent\n .insert('polygon', ':first-child')\n .attr(\n 'points',\n points\n .map(function (d) {\n return d.x + ',' + d.y;\n })\n .join(' ')\n )\n .attr('class', 'label-container')\n .attr('transform', 'translate(' + -w / 2 + ',' + h / 2 + ')');\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\n\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport { createPathFromPoints } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\n// const createPathFromPoints = (points: { x: number; y: number }[]): string => {\n// const pointStrings = points.map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x},${p.y}`);\n// pointStrings.push('Z');\n// return pointStrings.join(' ');\n// };\n\nexport async function card(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n const h = bbox.height + node.padding;\n const padding = 12;\n const w = bbox.width + node.padding + padding;\n const left = 0;\n const right = w;\n const top = -h;\n const bottom = 0;\n const points = [\n { x: left + padding, y: top },\n { x: right, y: top },\n { x: right, y: bottom },\n { x: left, y: bottom },\n { x: left, y: top + padding },\n { x: left + padding, y: top },\n ];\n\n let polygon: D3Selection | Awaited>;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n\n polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-w / 2}, ${h / 2})`);\n\n if (cssStyles) {\n polygon.attr('style', cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n\n if (nodeStyles) {\n polygon.attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport rough from 'roughjs';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { createPathFromPoints, getNodeClasses } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function choice(parent: D3Selection, node: Node) {\n const { nodeStyles } = styles2String(node);\n node.label = '';\n const shapeSvg = parent\n .insert('g')\n .attr('class', getNodeClasses(node))\n .attr('id', node.domId ?? node.id);\n const { cssStyles } = node;\n\n const s = Math.max(28, node.width ?? 0);\n\n const points = [\n { x: 0, y: s / 2 },\n { x: s / 2, y: 0 },\n { x: 0, y: -s / 2 },\n { x: -s / 2, y: 0 },\n ];\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const choicePath = createPathFromPoints(points);\n const roughNode = rc.path(choicePath, options);\n const choiceShape = shapeSvg.insert(() => roughNode, ':first-child');\n\n if (cssStyles && node.look !== 'handDrawn') {\n choiceShape.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n choiceShape.selectAll('path').attr('style', nodeStyles);\n }\n\n node.width = 28;\n node.height = 28;\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport type { Bounds, D3Selection, Point } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\nimport type { MindmapOptions, Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { getNodeClasses, labelHelper, updateNodeBounds } from './util.js';\n\nexport async function circle(\n parent: D3Selection,\n node: Node,\n options?: MindmapOptions | ShapeRenderOptions\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, getNodeClasses(node));\n const padding = options?.padding ?? halfPadding;\n const radius = bbox.width / 2 + padding;\n let circleElem;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.circle(0, 0, radius * 2, options);\n\n circleElem = shapeSvg.insert(() => roughNode, ':first-child');\n circleElem.attr('class', 'basic label-container').attr('style', handleUndefinedAttr(cssStyles));\n } else {\n circleElem = shapeSvg\n .insert('circle', ':first-child')\n .attr('class', 'basic label-container')\n .attr('style', nodeStyles)\n .attr('r', radius)\n .attr('cx', 0)\n .attr('cy', 0);\n }\n\n updateNodeBounds(node, circleElem);\n node.calcIntersect = function (bounds: Bounds, point: Point) {\n const radius = bounds.width / 2;\n return intersect.circle(bounds, radius, point);\n };\n node.intersect = function (point) {\n log.info('Circle intersect', node, radius, point);\n return intersect.circle(node, radius, point);\n };\n\n return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport { getNodeClasses, updateNodeBounds } from './util.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport intersect from '../intersect/index.js';\nimport type { D3Selection } from '../../../types.js';\n\nfunction createLine(r: number) {\n const xAxis45 = Math.cos(Math.PI / 4); // cosine of 45 degrees\n const yAxis45 = Math.sin(Math.PI / 4); // sine of 45 degrees\n const lineLength = r * 2;\n\n const pointQ1 = { x: (lineLength / 2) * xAxis45, y: (lineLength / 2) * yAxis45 }; // Quadrant I\n const pointQ2 = { x: -(lineLength / 2) * xAxis45, y: (lineLength / 2) * yAxis45 }; // Quadrant II\n const pointQ3 = { x: -(lineLength / 2) * xAxis45, y: -(lineLength / 2) * yAxis45 }; // Quadrant III\n const pointQ4 = { x: (lineLength / 2) * xAxis45, y: -(lineLength / 2) * yAxis45 }; // Quadrant IV\n\n return `M ${pointQ2.x},${pointQ2.y} L ${pointQ4.x},${pointQ4.y}\n M ${pointQ1.x},${pointQ1.y} L ${pointQ3.x},${pointQ3.y}`;\n}\n\nexport function crossedCircle(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n node.label = '';\n const shapeSvg = parent\n .insert('g')\n .attr('class', getNodeClasses(node))\n .attr('id', node.domId ?? node.id);\n const radius = Math.max(30, node?.width ?? 0);\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const circleNode = rc.circle(0, 0, radius * 2, options);\n const linePath = createLine(radius);\n const lineNode = rc.path(linePath, options);\n\n const crossedCircle = shapeSvg.insert(() => circleNode, ':first-child');\n crossedCircle.insert(() => lineNode);\n\n if (cssStyles && node.look !== 'handDrawn') {\n crossedCircle.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n crossedCircle.selectAll('path').attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, crossedCircle);\n\n node.intersect = function (point) {\n log.info('crossedCircle intersect', node, { radius, point });\n const pos = intersect.circle(node, radius, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nfunction generateCirclePoints(\n centerX: number,\n centerY: number,\n radius: number,\n numPoints = 100,\n startAngle = 0,\n endAngle = 180\n) {\n const points = [];\n\n // Convert angles to radians\n const startAngleRad = (startAngle * Math.PI) / 180;\n const endAngleRad = (endAngle * Math.PI) / 180;\n\n // Calculate the angle range in radians\n const angleRange = endAngleRad - startAngleRad;\n\n // Calculate the angle step\n const angleStep = angleRange / (numPoints - 1);\n\n for (let i = 0; i < numPoints; i++) {\n const angle = startAngleRad + i * angleStep;\n const x = centerX + radius * Math.cos(angle);\n const y = centerY + radius * Math.sin(angle);\n points.push({ x: -x, y: -y });\n }\n\n return points;\n}\n\nexport async function curlyBraceLeft(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + (node.padding ?? 0);\n const h = bbox.height + (node.padding ?? 0);\n const radius = Math.max(5, h * 0.1);\n\n const { cssStyles } = node;\n\n const points = [\n ...generateCirclePoints(w / 2, -h / 2, radius, 30, -90, 0),\n { x: -w / 2 - radius, y: radius },\n ...generateCirclePoints(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints(w / 2, h / 2, radius, 20, 0, 90),\n ];\n\n const rectPoints = [\n { x: w / 2, y: -h / 2 - radius },\n { x: -w / 2, y: -h / 2 - radius },\n ...generateCirclePoints(w / 2, -h / 2, radius, 20, -90, 0),\n { x: -w / 2 - radius, y: -radius },\n ...generateCirclePoints(w / 2 + w * 0.1, -radius, radius, 20, -180, -270),\n ...generateCirclePoints(w / 2 + w * 0.1, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: h / 2 },\n ...generateCirclePoints(w / 2, h / 2, radius, 20, 0, 90),\n { x: -w / 2, y: h / 2 + radius },\n { x: w / 2, y: h / 2 + radius },\n ];\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: 'none' });\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n const curlyBraceLeftPath = createPathFromPoints(points);\n const newCurlyBracePath = curlyBraceLeftPath.replace('Z', '');\n const curlyBraceLeftNode = rc.path(newCurlyBracePath, options);\n const rectPath = createPathFromPoints(rectPoints);\n const rectShape = rc.path(rectPath, { ...options });\n const curlyBraceLeftShape = shapeSvg.insert('g', ':first-child');\n curlyBraceLeftShape.insert(() => rectShape, ':first-child').attr('stroke-opacity', 0);\n curlyBraceLeftShape.insert(() => curlyBraceLeftNode, ':first-child');\n curlyBraceLeftShape.attr('class', 'text');\n\n if (cssStyles && node.look !== 'handDrawn') {\n curlyBraceLeftShape.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n curlyBraceLeftShape.selectAll('path').attr('style', nodeStyles);\n }\n\n curlyBraceLeftShape.attr('transform', `translate(${radius}, 0)`);\n\n label.attr(\n 'transform',\n `translate(${-w / 2 + radius - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n\n updateNodeBounds(node, curlyBraceLeftShape);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, rectPoints, point);\n\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nfunction generateCirclePoints(\n centerX: number,\n centerY: number,\n radius: number,\n numPoints = 100,\n startAngle = 0,\n endAngle = 180\n) {\n const points = [];\n\n // Convert angles to radians\n const startAngleRad = (startAngle * Math.PI) / 180;\n const endAngleRad = (endAngle * Math.PI) / 180;\n\n // Calculate the angle range in radians\n const angleRange = endAngleRad - startAngleRad;\n\n // Calculate the angle step\n const angleStep = angleRange / (numPoints - 1);\n\n for (let i = 0; i < numPoints; i++) {\n const angle = startAngleRad + i * angleStep;\n const x = centerX + radius * Math.cos(angle);\n const y = centerY + radius * Math.sin(angle);\n points.push({ x, y });\n }\n\n return points;\n}\n\nexport async function curlyBraceRight(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + (node.padding ?? 0);\n const h = bbox.height + (node.padding ?? 0);\n const radius = Math.max(5, h * 0.1);\n\n const { cssStyles } = node;\n\n const points = [\n ...generateCirclePoints(w / 2, -h / 2, radius, 20, -90, 0),\n { x: w / 2 + radius, y: -radius },\n ...generateCirclePoints(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: w / 2 + radius, y: h / 2 },\n ...generateCirclePoints(w / 2, h / 2, radius, 20, 0, 90),\n ];\n\n const rectPoints = [\n { x: -w / 2, y: -h / 2 - radius },\n { x: w / 2, y: -h / 2 - radius },\n ...generateCirclePoints(w / 2, -h / 2, radius, 20, -90, 0),\n { x: w / 2 + radius, y: -radius },\n ...generateCirclePoints(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: w / 2 + radius, y: h / 2 },\n ...generateCirclePoints(w / 2, h / 2, radius, 20, 0, 90),\n { x: w / 2, y: h / 2 + radius },\n { x: -w / 2, y: h / 2 + radius },\n ];\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: 'none' });\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n const curlyBraceRightPath = createPathFromPoints(points);\n const newCurlyBracePath = curlyBraceRightPath.replace('Z', '');\n const curlyBraceRightNode = rc.path(newCurlyBracePath, options);\n const rectPath = createPathFromPoints(rectPoints);\n const rectShape = rc.path(rectPath, { ...options });\n const curlyBraceRightShape = shapeSvg.insert('g', ':first-child');\n curlyBraceRightShape.insert(() => rectShape, ':first-child').attr('stroke-opacity', 0);\n curlyBraceRightShape.insert(() => curlyBraceRightNode, ':first-child');\n curlyBraceRightShape.attr('class', 'text');\n\n if (cssStyles && node.look !== 'handDrawn') {\n curlyBraceRightShape.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n curlyBraceRightShape.selectAll('path').attr('style', nodeStyles);\n }\n\n curlyBraceRightShape.attr('transform', `translate(${-radius}, 0)`);\n\n label.attr(\n 'transform',\n `translate(${-w / 2 + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n\n updateNodeBounds(node, curlyBraceRightShape);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, rectPoints, point);\n\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nfunction generateCirclePoints(\n centerX: number,\n centerY: number,\n radius: number,\n numPoints = 100,\n startAngle = 0,\n endAngle = 180\n) {\n const points = [];\n\n // Convert angles to radians\n const startAngleRad = (startAngle * Math.PI) / 180;\n const endAngleRad = (endAngle * Math.PI) / 180;\n\n // Calculate the angle range in radians\n const angleRange = endAngleRad - startAngleRad;\n\n // Calculate the angle step\n const angleStep = angleRange / (numPoints - 1);\n\n for (let i = 0; i < numPoints; i++) {\n const angle = startAngleRad + i * angleStep;\n const x = centerX + radius * Math.cos(angle);\n const y = centerY + radius * Math.sin(angle);\n points.push({ x: -x, y: -y });\n }\n\n return points;\n}\n\nexport async function curlyBraces(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + (node.padding ?? 0);\n const h = bbox.height + (node.padding ?? 0);\n const radius = Math.max(5, h * 0.1);\n\n const { cssStyles } = node;\n\n const leftCurlyBracePoints = [\n ...generateCirclePoints(w / 2, -h / 2, radius, 30, -90, 0),\n { x: -w / 2 - radius, y: radius },\n ...generateCirclePoints(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints(w / 2, h / 2, radius, 20, 0, 90),\n ];\n\n const rightCurlyBracePoints = [\n ...generateCirclePoints(-w / 2 + radius + radius / 2, -h / 2, radius, 20, -90, -180),\n { x: w / 2 - radius / 2, y: radius },\n ...generateCirclePoints(-w / 2 - radius / 2, -radius, radius, 20, 0, 90),\n ...generateCirclePoints(-w / 2 - radius / 2, radius, radius, 20, -90, 0),\n { x: w / 2 - radius / 2, y: -radius },\n ...generateCirclePoints(-w / 2 + radius + radius / 2, h / 2, radius, 30, -180, -270),\n ];\n\n const rectPoints = [\n { x: w / 2, y: -h / 2 - radius },\n { x: -w / 2, y: -h / 2 - radius },\n ...generateCirclePoints(w / 2, -h / 2, radius, 20, -90, 0),\n { x: -w / 2 - radius, y: -radius },\n ...generateCirclePoints(w / 2 + radius * 2, -radius, radius, 20, -180, -270),\n ...generateCirclePoints(w / 2 + radius * 2, radius, radius, 20, -90, -180),\n { x: -w / 2 - radius, y: h / 2 },\n ...generateCirclePoints(w / 2, h / 2, radius, 20, 0, 90),\n { x: -w / 2, y: h / 2 + radius },\n { x: w / 2 - radius - radius / 2, y: h / 2 + radius },\n ...generateCirclePoints(-w / 2 + radius + radius / 2, -h / 2, radius, 20, -90, -180),\n { x: w / 2 - radius / 2, y: radius },\n ...generateCirclePoints(-w / 2 - radius / 2, -radius, radius, 20, 0, 90),\n ...generateCirclePoints(-w / 2 - radius / 2, radius, radius, 20, -90, 0),\n { x: w / 2 - radius / 2, y: -radius },\n ...generateCirclePoints(-w / 2 + radius + radius / 2, h / 2, radius, 30, -180, -270),\n ];\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, { fill: 'none' });\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n const leftCurlyBracePath = createPathFromPoints(leftCurlyBracePoints);\n const newLeftCurlyBracePath = leftCurlyBracePath.replace('Z', '');\n const leftCurlyBraceNode = rc.path(newLeftCurlyBracePath, options);\n const rightCurlyBracePath = createPathFromPoints(rightCurlyBracePoints);\n const newRightCurlyBracePath = rightCurlyBracePath.replace('Z', '');\n const rightCurlyBraceNode = rc.path(newRightCurlyBracePath, options);\n const rectPath = createPathFromPoints(rectPoints);\n const rectShape = rc.path(rectPath, { ...options });\n const curlyBracesShape = shapeSvg.insert('g', ':first-child');\n curlyBracesShape.insert(() => rectShape, ':first-child').attr('stroke-opacity', 0);\n curlyBracesShape.insert(() => leftCurlyBraceNode, ':first-child');\n curlyBracesShape.insert(() => rightCurlyBraceNode, ':first-child');\n curlyBracesShape.attr('class', 'text');\n\n if (cssStyles && node.look !== 'handDrawn') {\n curlyBracesShape.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n curlyBracesShape.selectAll('path').attr('style', nodeStyles);\n }\n\n curlyBracesShape.attr('transform', `translate(${radius - radius / 4}, 0)`);\n\n label.attr(\n 'transform',\n `translate(${-w / 2 + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n\n updateNodeBounds(node, curlyBracesShape);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, rectPoints, point);\n\n return pos;\n };\n\n return shapeSvg;\n}\n", "import {\n labelHelper,\n updateNodeBounds,\n getNodeClasses,\n createPathFromPoints,\n generateCirclePoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function curvedTrapezoid(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const minWidth = 80,\n minHeight = 20;\n const w = Math.max(minWidth, (bbox.width + (node.padding ?? 0) * 2) * 1.25, node?.width ?? 0);\n const h = Math.max(minHeight, bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const radius = h / 2;\n\n const { cssStyles } = node;\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const totalWidth = w,\n totalHeight = h;\n const rw = totalWidth - radius;\n const tw = totalHeight / 4;\n\n const points = [\n { x: rw, y: 0 },\n { x: tw, y: 0 },\n { x: 0, y: totalHeight / 2 },\n { x: tw, y: totalHeight },\n { x: rw, y: totalHeight },\n ...generateCirclePoints(-rw, -totalHeight / 2, radius, 50, 270, 90),\n ];\n\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n\n const polygon = shapeSvg.insert(() => shapeNode, ':first-child');\n polygon.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', nodeStyles);\n }\n\n polygon.attr('transform', `translate(${-w / 2}, ${-h / 2})`);\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\n\nexport const createCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number\n): string => {\n return [\n `M${x},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`,\n ].join(' ');\n};\nexport const createOuterCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number\n): string => {\n return [\n `M${x},${y + ry}`,\n `M${x + width},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`,\n ].join(' ');\n};\nexport const createInnerCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number\n): string => {\n return [`M${x - width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 ${width},0`].join(' ');\n};\nexport async function cylinder(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + node.padding, node.width ?? 0);\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n const h = Math.max(bbox.height + ry + node.padding, node.height ?? 0);\n\n let cylinder: D3Selection | D3Selection;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const outerPathData = createOuterCylinderPathD(0, 0, w, h, rx, ry);\n const innerPathData = createInnerCylinderPathD(0, ry, w, h, rx, ry);\n const outerNode = rc.path(outerPathData, userNodeOverrides(node, {}));\n const innerLine = rc.path(innerPathData, userNodeOverrides(node, { fill: 'none' }));\n\n cylinder = shapeSvg.insert(() => innerLine, ':first-child');\n cylinder = shapeSvg.insert(() => outerNode, ':first-child');\n cylinder.attr('class', 'basic label-container');\n if (cssStyles) {\n cylinder.attr('style', cssStyles);\n }\n } else {\n const pathData = createCylinderPathD(0, 0, w, h, rx, ry);\n cylinder = shapeSvg\n .insert('path', ':first-child')\n .attr('d', pathData)\n .attr('class', 'basic label-container')\n .attr('style', handleUndefinedAttr(cssStyles))\n .attr('style', nodeStyles);\n }\n\n cylinder.attr('label-offset-y', ry);\n cylinder.attr('transform', `translate(${-w / 2}, ${-(h / 2 + ry)})`);\n\n updateNodeBounds(node, cylinder);\n\n label.attr(\n 'transform',\n `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + (node.padding ?? 0) / 1.5 - (bbox.y - (bbox.top ?? 0))})`\n );\n\n node.intersect = function (point) {\n const pos = intersect.rect(node, point);\n const x = pos.x - (node.x ?? 0);\n\n if (\n rx != 0 &&\n (Math.abs(x) < (node.width ?? 0) / 2 ||\n (Math.abs(x) == (node.width ?? 0) / 2 &&\n Math.abs(pos.y - (node.y ?? 0)) > (node.height ?? 0) / 2 - ry))\n ) {\n let y = ry * ry * (1 - (x * x) / (rx * rx));\n if (y > 0) {\n y = Math.sqrt(y);\n }\n y = ry - y;\n if (point.y - (node.y ?? 0) > 0) {\n y = -y;\n }\n\n pos.y += y;\n }\n\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function dividedRectangle(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const rectOffset = h * 0.2;\n\n const x = -w / 2;\n const y = -h / 2 - rectOffset / 2;\n\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const pts = [\n { x, y: y + rectOffset },\n { x: -x, y: y + rectOffset },\n { x: -x, y: -y },\n { x, y: -y },\n { x, y },\n { x: -x, y },\n { x: -x, y: y + rectOffset },\n ];\n\n const poly = rc.polygon(\n pts.map((p) => [p.x, p.y]),\n options\n );\n\n const polygon = shapeSvg.insert(() => poly, ':first-child');\n polygon.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n polygon.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n polygon.selectAll('path').attr('style', nodeStyles);\n }\n\n label.attr(\n 'transform',\n `translate(${x + (node.padding ?? 0) / 2 - (bbox.x - (bbox.left ?? 0))}, ${y + rectOffset + (node.padding ?? 0) / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n const pos = intersect.rect(node, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\n\nexport async function doublecircle(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding } = await labelHelper(parent, node, getNodeClasses(node));\n const gap = 5;\n const outerRadius = bbox.width / 2 + halfPadding + gap;\n const innerRadius = bbox.width / 2 + halfPadding;\n\n let circleGroup;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const outerOptions = userNodeOverrides(node, { roughness: 0.2, strokeWidth: 2.5 });\n\n const innerOptions = userNodeOverrides(node, { roughness: 0.2, strokeWidth: 1.5 });\n const outerRoughNode = rc.circle(0, 0, outerRadius * 2, outerOptions);\n const innerRoughNode = rc.circle(0, 0, innerRadius * 2, innerOptions);\n\n circleGroup = shapeSvg.insert('g', ':first-child');\n // circleGroup = circleGroup.insert(() => outerRoughNode, ':first-child');\n circleGroup\n .attr('class', handleUndefinedAttr(node.cssClasses))\n .attr('style', handleUndefinedAttr(cssStyles));\n\n circleGroup.node()?.appendChild(outerRoughNode);\n circleGroup.node()?.appendChild(innerRoughNode);\n } else {\n circleGroup = shapeSvg.insert('g', ':first-child');\n\n const outerCircle = circleGroup.insert('circle', ':first-child');\n const innerCircle = circleGroup.insert('circle');\n circleGroup.attr('class', 'basic label-container').attr('style', nodeStyles);\n\n outerCircle\n .attr('class', 'outer-circle')\n .attr('style', nodeStyles)\n .attr('r', outerRadius)\n .attr('cx', 0)\n .attr('cy', 0);\n\n innerCircle\n .attr('class', 'inner-circle')\n .attr('style', nodeStyles)\n .attr('r', innerRadius)\n .attr('cx', 0)\n .attr('cy', 0);\n }\n\n updateNodeBounds(node, circleGroup);\n\n node.intersect = function (point) {\n log.info('DoubleCircle intersect', node, outerRadius, point);\n return intersect.circle(node, outerRadius, point);\n };\n\n return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { getNodeClasses, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function filledCircle(\n parent: D3Selection,\n node: Node,\n { config: { themeVariables } }: ShapeRenderOptions\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.label = '';\n node.labelStyle = labelStyles;\n const shapeSvg = parent\n .insert('g')\n .attr('class', getNodeClasses(node))\n .attr('id', node.domId ?? node.id);\n const radius = 7;\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const { nodeBorder } = themeVariables;\n const options = userNodeOverrides(node, { fillStyle: 'solid' });\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n }\n\n const circleNode = rc.circle(0, 0, radius * 2, options);\n\n const filledCircle = shapeSvg.insert(() => circleNode, ':first-child');\n\n filledCircle.selectAll('path').attr('style', `fill: ${nodeBorder} !important;`);\n\n if (cssStyles && cssStyles.length > 0 && node.look !== 'handDrawn') {\n filledCircle.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n filledCircle.selectAll('path').attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, filledCircle);\n\n node.intersect = function (point) {\n log.info('filledCircle intersect', node, { radius, point });\n const pos = intersect.circle(node, radius, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { createPathFromPoints } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function flippedTriangle(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n\n const w = bbox.width + (node.padding ?? 0);\n const h = w + bbox.height;\n\n const tw = w + bbox.height;\n const points = [\n { x: 0, y: -h },\n { x: tw, y: -h },\n { x: tw / 2, y: 0 },\n ];\n\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n\n const flippedTriangle = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-h / 2}, ${h / 2})`);\n\n if (cssStyles && node.look !== 'handDrawn') {\n flippedTriangle.selectChildren('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n flippedTriangle.selectChildren('path').attr('style', nodeStyles);\n }\n\n node.width = w;\n node.height = h;\n\n updateNodeBounds(node, flippedTriangle);\n\n label.attr(\n 'transform',\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-h / 2 + (node.padding ?? 0) / 2 + (bbox.y - (bbox.top ?? 0))})`\n );\n\n node.intersect = function (point) {\n log.info('Triangle intersect', node, points, point);\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { getNodeClasses, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function forkJoin(\n parent: D3Selection,\n node: Node,\n { dir, config: { state, themeVariables } }: ShapeRenderOptions\n) {\n const { nodeStyles } = styles2String(node);\n node.label = '';\n const shapeSvg = parent\n .insert('g')\n .attr('class', getNodeClasses(node))\n .attr('id', node.domId ?? node.id);\n\n const { cssStyles } = node;\n let width = Math.max(70, node?.width ?? 0);\n let height = Math.max(10, node?.height ?? 0);\n\n if (dir === 'LR') {\n width = Math.max(10, node?.width ?? 0);\n height = Math.max(70, node?.height ?? 0);\n }\n\n const x = (-1 * width) / 2;\n const y = (-1 * height) / 2;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n stroke: themeVariables.lineColor,\n fill: themeVariables.lineColor,\n });\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const roughNode = rc.rectangle(x, y, width, height, options);\n\n const shape = shapeSvg.insert(() => roughNode, ':first-child');\n\n if (cssStyles && node.look !== 'handDrawn') {\n shape.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n shape.selectAll('path').attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, shape);\n const padding = state?.padding ?? 0;\n if (node.width && node.height) {\n node.width += padding / 2 || 0;\n node.height += padding / 2 || 0;\n }\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport {\n labelHelper,\n updateNodeBounds,\n getNodeClasses,\n createPathFromPoints,\n generateCirclePoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function halfRoundedRectangle(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const minWidth = 80,\n minHeight = 50;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(minWidth, bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(minHeight, bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const radius = h / 2;\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const points = [\n { x: -w / 2, y: -h / 2 },\n { x: w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints(-w / 2 + radius, 0, radius, 50, 90, 270),\n { x: w / 2 - radius, y: h / 2 },\n { x: -w / 2, y: h / 2 },\n ];\n\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, ':first-child');\n polygon.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', nodeStyles);\n }\n\n // label.attr(\n // 'transform',\n // `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))}, ${-h / 2 + (node.padding ?? 0) - (bbox.y - (bbox.top ?? 0))})`\n // );\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n log.info('Pill intersect', node, { radius, point });\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport const createHexagonPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n m: number\n): string => {\n return [\n `M${x + m},${y}`,\n `L${x + width - m},${y}`,\n `L${x + width},${y - height / 2}`,\n `L${x + width - m},${y - height}`,\n `L${x + m},${y - height}`,\n `L${x},${y - height / 2}`,\n 'Z',\n ].join(' ');\n};\n\nexport async function hexagon(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n const h = bbox.height + (node.padding ?? 0);\n const w = bbox.width + (node.padding ?? 0) * 2.5;\n const { cssStyles } = node;\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n let halfWidth = w / 2;\n const m = halfWidth / 6; // Margin for label\n halfWidth = halfWidth + m; // Adjusted half width for hexagon\n\n const halfHeight = h / 2;\n\n const fixedLength = halfHeight / 2;\n const deducedWidth = halfWidth - fixedLength;\n\n const points = [\n { x: -deducedWidth, y: -halfHeight },\n { x: 0, y: -halfHeight },\n { x: deducedWidth, y: -halfHeight },\n { x: halfWidth, y: 0 },\n { x: deducedWidth, y: halfHeight },\n { x: 0, y: halfHeight },\n { x: -deducedWidth, y: halfHeight },\n { x: -halfWidth, y: 0 },\n ];\n\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n\n const polygon = shapeSvg.insert(() => shapeNode, ':first-child');\n polygon.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', nodeStyles);\n }\n\n node.width = w;\n node.height = h;\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function hourglass(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.label = '';\n node.labelStyle = labelStyles;\n const { shapeSvg } = await labelHelper(parent, node, getNodeClasses(node));\n\n const w = Math.max(30, node?.width ?? 0);\n const h = Math.max(30, node?.height ?? 0);\n\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: 0, y: h },\n { x: w, y: h },\n ];\n\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n const polygon = shapeSvg.insert(() => shapeNode, ':first-child');\n polygon.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', nodeStyles);\n }\n\n polygon.attr('transform', `translate(${-w / 2}, ${-h / 2})`);\n\n updateNodeBounds(node, polygon);\n\n // label.attr('transform', `translate(${-bbox.width / 2}, ${(h/2)})`); // To transform text below hourglass shape\n\n node.intersect = function (point) {\n log.info('Pill intersect', node, { points });\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport { getIconSVG } from '../../icons.js';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { compileStyles, styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { labelHelper, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function icon(\n parent: D3Selection,\n node: Node,\n { config: { themeVariables, flowchart } }: ShapeRenderOptions\n) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const assetHeight = node.assetHeight ?? 48;\n const assetWidth = node.assetWidth ?? 48;\n const iconSize = Math.max(assetHeight, assetWidth);\n const defaultWidth = flowchart?.wrappingWidth;\n node.width = Math.max(iconSize, defaultWidth ?? 0);\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, 'icon-shape default');\n\n const topLabel = node.pos === 't';\n\n const height = iconSize;\n const width = iconSize;\n const { nodeBorder } = themeVariables;\n const { stylesMap } = compileStyles(node);\n\n const x = -width / 2;\n const y = -height / 2;\n\n const labelPadding = node.label ? 8 : 0;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, { stroke: 'none', fill: 'none' });\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const iconNode = rc.rectangle(x, y, width, height, options);\n\n const outerWidth = Math.max(width, bbox.width);\n const outerHeight = height + bbox.height + labelPadding;\n\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: 'transparent',\n stroke: 'none',\n });\n\n const iconShape = shapeSvg.insert(() => iconNode, ':first-child');\n const outerShape = shapeSvg.insert(() => outerNode);\n\n if (node.icon) {\n const iconElem = shapeSvg.append('g');\n iconElem.html(\n `${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: '',\n })}`\n );\n const iconBBox = iconElem.node()!.getBBox();\n const iconWidth = iconBBox.width;\n const iconHeight = iconBBox.height;\n const iconX = iconBBox.x;\n const iconY = iconBBox.y;\n iconElem.attr(\n 'transform',\n `translate(${-iconWidth / 2 - iconX},${\n topLabel\n ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY\n : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY\n })`\n );\n iconElem.attr('style', `color: ${stylesMap.get('stroke') ?? nodeBorder};`);\n }\n\n label.attr(\n 'transform',\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${\n topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height\n })`\n );\n\n iconShape.attr(\n 'transform',\n `translate(${0},${\n topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2\n })`\n );\n\n updateNodeBounds(node, outerShape);\n\n node.intersect = function (point) {\n log.info('iconSquare intersect', node, point);\n if (!node.label) {\n return intersect.rect(node, point);\n }\n const dx = node.x ?? 0;\n const dy = node.y ?? 0;\n const nodeHeight = node.height ?? 0;\n let points = [];\n if (topLabel) {\n points = [\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n ];\n } else {\n points = [\n { x: dx - width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + height },\n ];\n }\n\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport { getIconSVG } from '../../icons.js';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { compileStyles, styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { labelHelper, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function iconCircle(\n parent: D3Selection,\n node: Node,\n { config: { themeVariables, flowchart } }: ShapeRenderOptions\n) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const assetHeight = node.assetHeight ?? 48;\n const assetWidth = node.assetWidth ?? 48;\n const iconSize = Math.max(assetHeight, assetWidth);\n const defaultWidth = flowchart?.wrappingWidth;\n node.width = Math.max(iconSize, defaultWidth ?? 0);\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, 'icon-shape default');\n\n const padding = 20;\n const labelPadding = node.label ? 8 : 0;\n\n const topLabel = node.pos === 't';\n\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n const fill = stylesMap.get('fill');\n options.stroke = fill ?? mainBkg;\n\n const iconElem = shapeSvg.append('g');\n if (node.icon) {\n iconElem.html(\n `${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: '',\n })}`\n );\n }\n const iconBBox = iconElem.node()!.getBBox();\n const iconWidth = iconBBox.width;\n const iconHeight = iconBBox.height;\n const iconX = iconBBox.x;\n const iconY = iconBBox.y;\n\n const diameter = Math.max(iconWidth, iconHeight) * Math.SQRT2 + padding * 2;\n const iconNode = rc.circle(0, 0, diameter, options);\n\n const outerWidth = Math.max(diameter, bbox.width);\n const outerHeight = diameter + bbox.height + labelPadding;\n\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: 'transparent',\n stroke: 'none',\n });\n\n const iconShape = shapeSvg.insert(() => iconNode, ':first-child');\n const outerShape = shapeSvg.insert(() => outerNode);\n iconElem.attr(\n 'transform',\n `translate(${-iconWidth / 2 - iconX},${\n topLabel\n ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY\n : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY\n })`\n );\n iconElem.attr('style', `color: ${stylesMap.get('stroke') ?? nodeBorder};`);\n label.attr(\n 'transform',\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${\n topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height\n })`\n );\n\n iconShape.attr(\n 'transform',\n `translate(${0},${\n topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2\n })`\n );\n\n updateNodeBounds(node, outerShape);\n\n node.intersect = function (point) {\n log.info('iconSquare intersect', node, point);\n const pos = intersect.rect(node, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "export const createRoundedRectPathD = (\n x: number,\n y: number,\n totalWidth: number,\n totalHeight: number,\n radius: number\n) =>\n [\n 'M',\n x + radius,\n y, // Move to the first point\n 'H',\n x + totalWidth - radius, // Draw horizontal line to the beginning of the right corner\n 'A',\n radius,\n radius,\n 0,\n 0,\n 1,\n x + totalWidth,\n y + radius, // Draw arc to the right top corner\n 'V',\n y + totalHeight - radius, // Draw vertical line down to the beginning of the right bottom corner\n 'A',\n radius,\n radius,\n 0,\n 0,\n 1,\n x + totalWidth - radius,\n y + totalHeight, // Draw arc to the right bottom corner\n 'H',\n x + radius, // Draw horizontal line to the beginning of the left bottom corner\n 'A',\n radius,\n radius,\n 0,\n 0,\n 1,\n x,\n y + totalHeight - radius, // Draw arc to the left bottom corner\n 'V',\n y + radius, // Draw vertical line up to the beginning of the left top corner\n 'A',\n radius,\n radius,\n 0,\n 0,\n 1,\n x + radius,\n y, // Draw arc to the left top corner\n 'Z', // Close the path\n ].join(' ');\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport { getIconSVG } from '../../icons.js';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { compileStyles, styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { createRoundedRectPathD } from './roundedRectPath.js';\nimport { labelHelper, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function iconRounded(\n parent: D3Selection,\n node: Node,\n { config: { themeVariables, flowchart } }: ShapeRenderOptions\n) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const assetHeight = node.assetHeight ?? 48;\n const assetWidth = node.assetWidth ?? 48;\n const iconSize = Math.max(assetHeight, assetWidth);\n const defaultWidth = flowchart?.wrappingWidth;\n node.width = Math.max(iconSize, defaultWidth ?? 0);\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n 'icon-shape default'\n );\n\n const topLabel = node.pos === 't';\n\n const height = iconSize + halfPadding * 2;\n const width = iconSize + halfPadding * 2;\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n\n const x = -width / 2;\n const y = -height / 2;\n\n const labelPadding = node.label ? 8 : 0;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n const fill = stylesMap.get('fill');\n options.stroke = fill ?? mainBkg;\n\n const iconNode = rc.path(createRoundedRectPathD(x, y, width, height, 5), options);\n\n const outerWidth = Math.max(width, bbox.width);\n const outerHeight = height + bbox.height + labelPadding;\n\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: 'transparent',\n stroke: 'none',\n });\n\n const iconShape = shapeSvg.insert(() => iconNode, ':first-child').attr('class', 'icon-shape2');\n const outerShape = shapeSvg.insert(() => outerNode);\n\n if (node.icon) {\n const iconElem = shapeSvg.append('g');\n iconElem.html(\n `${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: '',\n })}`\n );\n const iconBBox = iconElem.node()!.getBBox();\n const iconWidth = iconBBox.width;\n const iconHeight = iconBBox.height;\n const iconX = iconBBox.x;\n const iconY = iconBBox.y;\n iconElem.attr(\n 'transform',\n `translate(${-iconWidth / 2 - iconX},${\n topLabel\n ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY\n : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY\n })`\n );\n iconElem.attr('style', `color: ${stylesMap.get('stroke') ?? nodeBorder};`);\n }\n\n label.attr(\n 'transform',\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${\n topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height\n })`\n );\n\n iconShape.attr(\n 'transform',\n `translate(${0},${\n topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2\n })`\n );\n\n updateNodeBounds(node, outerShape);\n\n node.intersect = function (point) {\n log.info('iconSquare intersect', node, point);\n if (!node.label) {\n return intersect.rect(node, point);\n }\n const dx = node.x ?? 0;\n const dy = node.y ?? 0;\n const nodeHeight = node.height ?? 0;\n let points = [];\n if (topLabel) {\n points = [\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n ];\n } else {\n points = [\n { x: dx - width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + height },\n ];\n }\n\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport { getIconSVG } from '../../icons.js';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { createRoundedRectPathD } from './roundedRectPath.js';\nimport { compileStyles, styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { labelHelper, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function iconSquare(\n parent: D3Selection,\n node: Node,\n { config: { themeVariables, flowchart } }: ShapeRenderOptions\n) {\n const { labelStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const assetHeight = node.assetHeight ?? 48;\n const assetWidth = node.assetWidth ?? 48;\n const iconSize = Math.max(assetHeight, assetWidth);\n const defaultWidth = flowchart?.wrappingWidth;\n node.width = Math.max(iconSize, defaultWidth ?? 0);\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n 'icon-shape default'\n );\n\n const topLabel = node.pos === 't';\n\n const height = iconSize + halfPadding * 2;\n const width = iconSize + halfPadding * 2;\n const { nodeBorder, mainBkg } = themeVariables;\n const { stylesMap } = compileStyles(node);\n\n const x = -width / 2;\n const y = -height / 2;\n\n const labelPadding = node.label ? 8 : 0;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n const fill = stylesMap.get('fill');\n options.stroke = fill ?? mainBkg;\n\n const iconNode = rc.path(createRoundedRectPathD(x, y, width, height, 0.1), options);\n\n const outerWidth = Math.max(width, bbox.width);\n const outerHeight = height + bbox.height + labelPadding;\n\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: 'transparent',\n stroke: 'none',\n });\n\n const iconShape = shapeSvg.insert(() => iconNode, ':first-child');\n const outerShape = shapeSvg.insert(() => outerNode);\n\n if (node.icon) {\n const iconElem = shapeSvg.append('g');\n iconElem.html(\n `${await getIconSVG(node.icon, {\n height: iconSize,\n width: iconSize,\n fallbackPrefix: '',\n })}`\n );\n const iconBBox = iconElem.node()!.getBBox();\n const iconWidth = iconBBox.width;\n const iconHeight = iconBBox.height;\n const iconX = iconBBox.x;\n const iconY = iconBBox.y;\n iconElem.attr(\n 'transform',\n `translate(${-iconWidth / 2 - iconX},${\n topLabel\n ? bbox.height / 2 + labelPadding / 2 - iconHeight / 2 - iconY\n : -bbox.height / 2 - labelPadding / 2 - iconHeight / 2 - iconY\n })`\n );\n iconElem.attr('style', `color: ${stylesMap.get('stroke') ?? nodeBorder};`);\n }\n\n label.attr(\n 'transform',\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${\n topLabel ? -outerHeight / 2 : outerHeight / 2 - bbox.height\n })`\n );\n\n iconShape.attr(\n 'transform',\n `translate(${0},${\n topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2\n })`\n );\n\n updateNodeBounds(node, outerShape);\n\n node.intersect = function (point) {\n log.info('iconSquare intersect', node, point);\n if (!node.label) {\n return intersect.rect(node, point);\n }\n const dx = node.x ?? 0;\n const dy = node.y ?? 0;\n const nodeHeight = node.height ?? 0;\n let points = [];\n if (topLabel) {\n points = [\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy + nodeHeight / 2 },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n ];\n } else {\n points = [\n { x: dx - width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 },\n { x: dx + width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + height },\n { x: dx - width / 2, y: dy - nodeHeight / 2 + height },\n ];\n }\n\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { labelHelper, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function imageSquare(\n parent: D3Selection,\n node: Node,\n { config: { flowchart } }: ShapeRenderOptions\n) {\n const img = new Image();\n img.src = node?.img ?? '';\n await img.decode();\n\n const imageNaturalWidth = Number(img.naturalWidth.toString().replace('px', ''));\n const imageNaturalHeight = Number(img.naturalHeight.toString().replace('px', ''));\n node.imageAspectRatio = imageNaturalWidth / imageNaturalHeight;\n\n const { labelStyles } = styles2String(node);\n\n node.labelStyle = labelStyles;\n\n const defaultWidth = flowchart?.wrappingWidth;\n node.defaultWidth = flowchart?.wrappingWidth;\n\n const imageRawWidth = Math.max(\n node.label ? (defaultWidth ?? 0) : 0,\n node?.assetWidth ?? imageNaturalWidth\n );\n\n const imageWidth =\n node.constraint === 'on'\n ? node?.assetHeight\n ? node.assetHeight * node.imageAspectRatio\n : imageRawWidth\n : imageRawWidth;\n\n const imageHeight =\n node.constraint === 'on'\n ? imageWidth / node.imageAspectRatio\n : (node?.assetHeight ?? imageNaturalHeight);\n node.width = Math.max(imageWidth, defaultWidth ?? 0);\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, 'image-shape default');\n\n const topLabel = node.pos === 't';\n\n const x = -imageWidth / 2;\n const y = -imageHeight / 2;\n\n const labelPadding = node.label ? 8 : 0;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const imageNode = rc.rectangle(x, y, imageWidth, imageHeight, options);\n\n const outerWidth = Math.max(imageWidth, bbox.width);\n const outerHeight = imageHeight + bbox.height + labelPadding;\n\n const outerNode = rc.rectangle(-outerWidth / 2, -outerHeight / 2, outerWidth, outerHeight, {\n ...options,\n fill: 'none',\n stroke: 'none',\n });\n\n const iconShape = shapeSvg.insert(() => imageNode, ':first-child');\n const outerShape = shapeSvg.insert(() => outerNode);\n\n if (node.img) {\n const image = shapeSvg.append('image');\n\n // Set the image attributes\n image.attr('href', node.img);\n image.attr('width', imageWidth);\n image.attr('height', imageHeight);\n image.attr('preserveAspectRatio', 'none');\n\n image.attr(\n 'transform',\n `translate(${-imageWidth / 2},${topLabel ? outerHeight / 2 - imageHeight : -outerHeight / 2})`\n );\n }\n\n label.attr(\n 'transform',\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))},${\n topLabel\n ? -imageHeight / 2 - bbox.height / 2 - labelPadding / 2\n : imageHeight / 2 - bbox.height / 2 + labelPadding / 2\n })`\n );\n\n iconShape.attr(\n 'transform',\n `translate(${0},${\n topLabel ? bbox.height / 2 + labelPadding / 2 : -bbox.height / 2 - labelPadding / 2\n })`\n );\n\n updateNodeBounds(node, outerShape);\n\n node.intersect = function (point) {\n log.info('iconSquare intersect', node, point);\n if (!node.label) {\n return intersect.rect(node, point);\n }\n const dx = node.x ?? 0;\n const dy = node.y ?? 0;\n const nodeHeight = node.height ?? 0;\n let points = [];\n if (topLabel) {\n points = [\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx + imageWidth / 2, y: dy + nodeHeight / 2 },\n { x: dx - imageWidth / 2, y: dy + nodeHeight / 2 },\n { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + bbox.height + labelPadding },\n ];\n } else {\n points = [\n { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 },\n { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 },\n { x: dx + imageWidth / 2, y: dy - nodeHeight / 2 + imageHeight },\n { x: dx + bbox.width / 2, y: dy - nodeHeight / 2 + imageHeight },\n { x: dx + bbox.width / 2 / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy + nodeHeight / 2 },\n { x: dx - bbox.width / 2, y: dy - nodeHeight / 2 + imageHeight },\n { x: dx - imageWidth / 2, y: dy - nodeHeight / 2 + imageHeight },\n ];\n }\n\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport type { D3Selection } from '../../../types.js';\n\n// export const createInvertedTrapezoidPathD = (\n// x: number,\n// y: number,\n// width: number,\n// height: number\n// ): string => {\n// return [\n// `M${x + height / 6},${y}`,\n// `L${x + width - height / 6},${y}`,\n// `L${x + width + (2 * height) / 6},${y - height}`,\n// `L${x - (2 * height) / 6},${y - height}`,\n// 'Z',\n// ].join(' ');\n// };\n\nexport async function inv_trapezoid(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: w + (3 * h) / 6, y: -h },\n { x: (-3 * h) / 6, y: -h },\n ];\n\n let polygon: typeof shapeSvg | ReturnType;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n // const pathData = createInvertedTrapezoidPathD(0, 0, w, h);\n const roughNode = rc.path(pathData, options);\n\n polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-w / 2}, ${h / 2})`);\n\n if (cssStyles) {\n polygon.attr('style', cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n\n if (nodeStyles) {\n polygon.attr('style', nodeStyles);\n }\n\n node.width = w;\n node.height = h;\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node, RectOptions } from '../../types.js';\nimport { createRoundedRectPathD } from './roundedRectPath.js';\nimport { userNodeOverrides, styles2String } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\nimport type { Bounds, Point } from '../../../types.js';\n\nexport async function drawRect(\n parent: D3Selection,\n node: Node,\n options: RectOptions\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n // console.log('IPI labelStyles:', labelStyles);\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n const totalWidth = Math.max(bbox.width + options.labelPaddingX * 2, node?.width || 0);\n const totalHeight = Math.max(bbox.height + options.labelPaddingY * 2, node?.height || 0);\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n\n // log.info('IPI node = ', node);\n\n let rect;\n let { rx, ry } = node;\n const { cssStyles } = node;\n\n //use options rx, ry overrides if present\n if (options?.rx && options.ry) {\n rx = options.rx;\n ry = options.ry;\n }\n\n if (node.look === 'handDrawn') {\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n const roughNode =\n rx || ry\n ? rc.path(createRoundedRectPathD(x, y, totalWidth, totalHeight, rx || 0), options)\n : rc.rectangle(x, y, totalWidth, totalHeight, options);\n\n rect = shapeSvg.insert(() => roughNode, ':first-child');\n rect.attr('class', 'basic label-container').attr('style', handleUndefinedAttr(cssStyles));\n } else {\n rect = shapeSvg.insert('rect', ':first-child');\n\n rect\n .attr('class', 'basic label-container')\n .attr('style', nodeStyles)\n .attr('rx', handleUndefinedAttr(rx))\n .attr('ry', handleUndefinedAttr(ry))\n .attr('x', x)\n .attr('y', y)\n .attr('width', totalWidth)\n .attr('height', totalHeight);\n }\n\n updateNodeBounds(node, rect);\n\n node.calcIntersect = function (bounds: Bounds, point: Point) {\n return intersect.rect(bounds, point);\n };\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n}\n", "import type { Node, RectOptions } from '../../types.js';\nimport { drawRect } from './drawRect.js';\nimport { labelHelper, updateNodeBounds } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function roundedRect(\n parent: D3Selection,\n node: Node\n) {\n const options = {\n rx: 5,\n ry: 5,\n classes: '',\n labelPaddingX: (node?.padding || 0) * 1,\n labelPaddingY: (node?.padding || 0) * 1,\n } as RectOptions;\n\n return drawRect(parent, node, options);\n}\n\nexport async function labelRect(parent: D3Selection, node: Node) {\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, 'label');\n\n // log.trace('Classes = ', node.class);\n // add the rect\n const rect = shapeSvg.insert('rect', ':first-child');\n\n // Hide the rect we are only after the label\n const totalWidth = 0.1;\n const totalHeight = 0.1;\n rect.attr('width', totalWidth).attr('height', totalHeight);\n shapeSvg.attr('class', 'label edgeLabel');\n label.attr(\n 'transform',\n `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n );\n\n // if (node.props) {\n // const propKeys = new Set(Object.keys(node.props));\n // if (node.props.borders) {\n // applyNodePropertyBorders(rect, node.borders, totalWidth, totalHeight);\n // propKeys.delete('borders');\n // }\n // propKeys.forEach((propKey) => {\n // log.warn(`Unknown node property ${propKey}`);\n // });\n // }\n\n updateNodeBounds(node, rect);\n // node.width = 1;\n // node.height = 1;\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function lean_left(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0), node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0), node?.height ?? 0);\n const points = [\n { x: 0, y: 0 },\n { x: w + (3 * h) / 6, y: 0 },\n { x: w, y: -h },\n { x: -(3 * h) / 6, y: -h },\n ];\n\n let polygon: typeof shapeSvg | ReturnType;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n // const pathData = createLeanLeftPathD(0, 0, w, h);\n const roughNode = rc.path(pathData, options);\n\n polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-w / 2}, ${h / 2})`);\n\n if (cssStyles) {\n polygon.attr('style', cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n\n if (nodeStyles) {\n polygon.attr('style', nodeStyles);\n }\n\n node.width = w;\n node.height = h;\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function lean_right(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0), node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0), node?.height ?? 0);\n const points = [\n { x: (-3 * h) / 6, y: 0 },\n { x: w, y: 0 },\n { x: w + (3 * h) / 6, y: -h },\n { x: 0, y: -h },\n ];\n\n let polygon: typeof shapeSvg | ReturnType;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n\n polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-w / 2}, ${h / 2})`);\n\n if (cssStyles) {\n polygon.attr('style', cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n\n if (nodeStyles) {\n polygon.attr('style', nodeStyles);\n }\n\n node.width = w;\n node.height = h;\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport { getNodeClasses, updateNodeBounds } from './util.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport intersect from '../intersect/index.js';\nimport { createPathFromPoints } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function lightningBolt(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.label = '';\n node.labelStyle = labelStyles;\n const shapeSvg = parent\n .insert('g')\n .attr('class', getNodeClasses(node))\n .attr('id', node.domId ?? node.id);\n const { cssStyles } = node;\n const width = Math.max(35, node?.width ?? 0);\n const height = Math.max(35, node?.height ?? 0);\n const gap = 7;\n\n const points = [\n { x: width, y: 0 },\n { x: 0, y: height + gap / 2 },\n { x: width - 2 * gap, y: height + gap / 2 },\n { x: 0, y: 2 * height },\n { x: width, y: height - gap / 2 },\n { x: 2 * gap, y: height - gap / 2 },\n ];\n\n // @ts-expect-error shapeSvg d3 class is incorrect?\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const linePath = createPathFromPoints(points);\n const lineNode = rc.path(linePath, options);\n\n const lightningBolt = shapeSvg.insert(() => lineNode, ':first-child');\n\n if (cssStyles && node.look !== 'handDrawn') {\n lightningBolt.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n lightningBolt.selectAll('path').attr('style', nodeStyles);\n }\n\n lightningBolt.attr('transform', `translate(-${width / 2},${-height})`);\n\n updateNodeBounds(node, lightningBolt);\n\n node.intersect = function (point) {\n log.info('lightningBolt intersect', node, point);\n const pos = intersect.polygon(node, points, point);\n\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\n\nexport const createCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number,\n outerOffset: number\n): string => {\n return [\n `M${x},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`,\n `M${x},${y + ry + outerOffset}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n ].join(' ');\n};\nexport const createOuterCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number,\n outerOffset: number\n): string => {\n return [\n `M${x},${y + ry}`,\n `M${x + width},${y + ry}`,\n `a${rx},${ry} 0,0,0 ${-width},0`,\n `l0,${height}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n `l0,${-height}`,\n `M${x},${y + ry + outerOffset}`,\n `a${rx},${ry} 0,0,0 ${width},0`,\n ].join(' ');\n};\nexport const createInnerCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number\n): string => {\n return [`M${x - width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 ${width},0`].join(' ');\n};\nexport async function linedCylinder(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0), node.width ?? 0);\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n const h = Math.max(bbox.height + ry + (node.padding ?? 0), node.height ?? 0);\n const outerOffset = h * 0.1; // 10% of height\n\n let cylinder: typeof shapeSvg | D3Selection;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const outerPathData = createOuterCylinderPathD(0, 0, w, h, rx, ry, outerOffset);\n const innerPathData = createInnerCylinderPathD(0, ry, w, h, rx, ry);\n const options = userNodeOverrides(node, {});\n\n const outerNode = rc.path(outerPathData, options);\n const innerLine = rc.path(innerPathData, options);\n\n const innerLineEl = shapeSvg.insert(() => innerLine, ':first-child');\n innerLineEl.attr('class', 'line');\n cylinder = shapeSvg.insert(() => outerNode, ':first-child');\n cylinder.attr('class', 'basic label-container');\n if (cssStyles) {\n cylinder.attr('style', cssStyles);\n }\n } else {\n const pathData = createCylinderPathD(0, 0, w, h, rx, ry, outerOffset);\n cylinder = shapeSvg\n .insert('path', ':first-child')\n .attr('d', pathData)\n .attr('class', 'basic label-container')\n .attr('style', handleUndefinedAttr(cssStyles))\n .attr('style', nodeStyles);\n }\n\n // find label and move it down\n cylinder.attr('label-offset-y', ry);\n cylinder.attr('transform', `translate(${-w / 2}, ${-(h / 2 + ry)})`);\n\n updateNodeBounds(node, cylinder);\n\n label.attr(\n 'transform',\n `translate(${-(bbox.width / 2) - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + ry - (bbox.y - (bbox.top ?? 0))})`\n );\n\n node.intersect = function (point) {\n const pos = intersect.rect(node, point);\n const x = pos.x - (node.x ?? 0);\n\n if (\n rx != 0 &&\n (Math.abs(x) < (node.width ?? 0) / 2 ||\n (Math.abs(x) == (node.width ?? 0) / 2 &&\n Math.abs(pos.y - (node.y ?? 0)) > (node.height ?? 0) / 2 - ry))\n ) {\n let y = ry * ry * (1 - (x * x) / (rx * rx));\n if (y > 0) {\n y = Math.sqrt(y);\n }\n y = ry - y;\n if (point.y - (node.y ?? 0) > 0) {\n y = -y;\n }\n\n pos.y += y;\n }\n\n return pos;\n };\n\n return shapeSvg;\n}\n", "import {\n labelHelper,\n updateNodeBounds,\n getNodeClasses,\n generateFullSineWavePoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport rough from 'roughjs';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function linedWaveEdgedRect(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const waveAmplitude = h / 4;\n const finalH = h + waveAmplitude;\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const points = [\n { x: -w / 2 - (w / 2) * 0.1, y: -finalH / 2 },\n { x: -w / 2 - (w / 2) * 0.1, y: finalH / 2 },\n ...generateFullSineWavePoints(\n -w / 2 - (w / 2) * 0.1,\n finalH / 2,\n w / 2 + (w / 2) * 0.1,\n finalH / 2,\n waveAmplitude,\n 0.8\n ),\n { x: w / 2 + (w / 2) * 0.1, y: -finalH / 2 },\n { x: -w / 2 - (w / 2) * 0.1, y: -finalH / 2 },\n { x: -w / 2, y: -finalH / 2 },\n { x: -w / 2, y: (finalH / 2) * 1.1 },\n { x: -w / 2, y: -finalH / 2 },\n ];\n\n const poly = rc.polygon(\n points.map((p) => [p.x, p.y]),\n options\n );\n\n const waveEdgeRect = shapeSvg.insert(() => poly, ':first-child');\n\n waveEdgeRect.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n waveEdgeRect.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n waveEdgeRect.selectAll('path').attr('style', nodeStyles);\n }\n\n waveEdgeRect.attr('transform', `translate(0,${-waveAmplitude / 2})`);\n label.attr(\n 'transform',\n `translate(${-w / 2 + (node.padding ?? 0) + ((w / 2) * 0.1) / 2 - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n\n updateNodeBounds(node, waveEdgeRect);\n node.intersect = function (point) {\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, getNodeClasses, updateNodeBounds, createPathFromPoints } from './util.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport intersect from '../intersect/index.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function multiRect(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const rectOffset = 5;\n const x = -w / 2;\n const y = -h / 2;\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n const outerPathPoints = [\n { x: x - rectOffset, y: y + rectOffset },\n { x: x - rectOffset, y: y + h + rectOffset },\n { x: x + w - rectOffset, y: y + h + rectOffset },\n { x: x + w - rectOffset, y: y + h },\n { x: x + w, y: y + h },\n { x: x + w, y: y + h - rectOffset },\n { x: x + w + rectOffset, y: y + h - rectOffset },\n { x: x + w + rectOffset, y: y - rectOffset },\n { x: x + rectOffset, y: y - rectOffset },\n { x: x + rectOffset, y: y },\n { x, y },\n { x, y: y + rectOffset },\n ];\n\n const innerPathPoints = [\n { x, y: y + rectOffset },\n { x: x + w - rectOffset, y: y + rectOffset },\n { x: x + w - rectOffset, y: y + h },\n { x: x + w, y: y + h },\n { x: x + w, y },\n { x, y },\n ];\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const outerPath = createPathFromPoints(outerPathPoints);\n const outerNode = rc.path(outerPath, options);\n const innerPath = createPathFromPoints(innerPathPoints);\n const innerNode = rc.path(innerPath, { ...options, fill: 'none' });\n\n const multiRect = shapeSvg.insert(() => innerNode, ':first-child');\n multiRect.insert(() => outerNode, ':first-child');\n\n multiRect.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n multiRect.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n multiRect.selectAll('path').attr('style', nodeStyles);\n }\n\n label.attr(\n 'transform',\n `translate(${-(bbox.width / 2) - rectOffset - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset - (bbox.y - (bbox.top ?? 0))})`\n );\n\n updateNodeBounds(node, multiRect);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, outerPathPoints, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import {\n labelHelper,\n updateNodeBounds,\n getNodeClasses,\n createPathFromPoints,\n generateFullSineWavePoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport rough from 'roughjs';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function multiWaveEdgedRectangle(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const waveAmplitude = h / 4;\n const finalH = h + waveAmplitude;\n const x = -w / 2;\n const y = -finalH / 2;\n const rectOffset = 5;\n\n const { cssStyles } = node;\n\n const wavePoints = generateFullSineWavePoints(\n x - rectOffset,\n y + finalH + rectOffset,\n x + w - rectOffset,\n y + finalH + rectOffset,\n waveAmplitude,\n 0.8\n );\n\n const lastWavePoint = wavePoints?.[wavePoints.length - 1];\n\n const outerPathPoints = [\n { x: x - rectOffset, y: y + rectOffset },\n { x: x - rectOffset, y: y + finalH + rectOffset },\n ...wavePoints,\n { x: x + w - rectOffset, y: lastWavePoint.y - rectOffset },\n { x: x + w, y: lastWavePoint.y - rectOffset },\n { x: x + w, y: lastWavePoint.y - 2 * rectOffset },\n { x: x + w + rectOffset, y: lastWavePoint.y - 2 * rectOffset },\n { x: x + w + rectOffset, y: y - rectOffset },\n { x: x + rectOffset, y: y - rectOffset },\n { x: x + rectOffset, y: y },\n { x, y },\n { x, y: y + rectOffset },\n ];\n\n const innerPathPoints = [\n { x, y: y + rectOffset },\n { x: x + w - rectOffset, y: y + rectOffset },\n { x: x + w - rectOffset, y: lastWavePoint.y - rectOffset },\n { x: x + w, y: lastWavePoint.y - rectOffset },\n { x: x + w, y },\n { x, y },\n ];\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const outerPath = createPathFromPoints(outerPathPoints);\n const outerNode = rc.path(outerPath, options);\n const innerPath = createPathFromPoints(innerPathPoints);\n const innerNode = rc.path(innerPath, options);\n\n const shape = shapeSvg.insert(() => outerNode, ':first-child');\n shape.insert(() => innerNode);\n\n shape.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n shape.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n shape.selectAll('path').attr('style', nodeStyles);\n }\n\n shape.attr('transform', `translate(0,${-waveAmplitude / 2})`);\n\n label.attr(\n 'transform',\n `translate(${-(bbox.width / 2) - rectOffset - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n\n updateNodeBounds(node, shape);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, outerPathPoints, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { getNodeClasses, labelHelper, updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\nimport { getConfig } from '../../../config.js';\n\nexport async function note(\n parent: D3Selection,\n node: Node,\n { config: { themeVariables } }: ShapeRenderOptions\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const useHtmlLabels = node.useHtmlLabels || getConfig().flowchart?.htmlLabels !== false;\n if (!useHtmlLabels) {\n node.centerLabel = true;\n }\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const totalWidth = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const totalHeight = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n const { cssStyles } = node;\n\n // add the rect\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n fill: themeVariables.noteBkgColor,\n stroke: themeVariables.noteBorderColor,\n });\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const noteShapeNode = rc.rectangle(x, y, totalWidth, totalHeight, options);\n\n const rect = shapeSvg.insert(() => noteShapeNode, ':first-child');\n rect.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n rect.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n rect.selectAll('path').attr('style', nodeStyles);\n }\n\n label.attr(\n 'transform',\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n );\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport type { D3Selection } from '../../../types.js';\nimport type { Bounds, Point } from '../../../types.js';\n\nexport const createDecisionBoxPathD = (x: number, y: number, size: number): string => {\n return [\n `M${x + size / 2},${y}`,\n `L${x + size},${y - size / 2}`,\n `L${x + size / 2},${y - size}`,\n `L${x},${y - size / 2}`,\n 'Z',\n ].join(' ');\n};\n\nexport async function question(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const s = w + h;\n const adjustment = 0.5;\n\n const points = [\n { x: s / 2, y: 0 },\n { x: s, y: -s / 2 },\n { x: s / 2, y: -s },\n { x: 0, y: -s / 2 },\n ];\n\n let polygon: typeof shapeSvg | ReturnType;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createDecisionBoxPathD(0, 0, s);\n const roughNode = rc.path(pathData, options);\n\n polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-s / 2 + adjustment}, ${s / 2})`);\n\n if (cssStyles) {\n polygon.attr('style', cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, s, s, points);\n polygon.attr('transform', `translate(${-s / 2 + adjustment}, ${s / 2})`);\n }\n\n if (nodeStyles) {\n polygon.attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, polygon);\n node.calcIntersect = function (bounds: Bounds, point: Point) {\n const s = bounds.width;\n\n // Define polygon points\n const points = [\n { x: s / 2, y: 0 },\n { x: s, y: -s / 2 },\n { x: s / 2, y: -s },\n { x: 0, y: -s / 2 },\n ];\n\n // Calculate the intersection point\n const res = intersect.polygon(bounds, points, point);\n\n return { x: res.x - 0.5, y: res.y - 0.5 }; // Adjusted result\n };\n\n node.intersect = function (point) {\n // @ts-ignore TODO fix this (KNSV)\n return this.calcIntersect(node as Bounds, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function rect_left_inv_arrow(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n\n const w = Math.max(bbox.width + (node.padding ?? 0), node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0), node?.height ?? 0);\n\n const x = -w / 2;\n const y = -h / 2;\n const notch = y / 2;\n\n const points = [\n { x: x + notch, y },\n { x: x, y: 0 },\n { x: x + notch, y: -y },\n { x: -x, y: -y },\n { x: -x, y },\n ];\n\n const { cssStyles } = node;\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n\n const polygon = shapeSvg.insert(() => roughNode, ':first-child');\n\n polygon.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n polygon.selectAll('path').attr('style', cssStyles);\n }\n if (nodeStyles && node.look !== 'handDrawn') {\n polygon.selectAll('path').attr('style', nodeStyles);\n }\n\n polygon.attr('transform', `translate(${-notch / 2},0)`);\n\n label.attr(\n 'transform',\n `translate(${-notch / 2 - bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n );\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import { select } from 'd3';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport common, {\n evaluate,\n hasKatex,\n renderKatexSanitized,\n sanitizeText,\n} from '../../diagrams/common/common.js';\nimport { log } from '../../logger.js';\nimport { decodeEntities } from '../../utils.js';\n\n/**\n * @param dom\n * @param styleFn\n */\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr('style', styleFn);\n }\n}\n\n/**\n * @param {any} node\n * @returns {Promise} Node\n */\nasync function addHtmlLabel(node) {\n const fo = select(document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject'));\n const div = fo.append('xhtml:div');\n\n const config = getConfig();\n let label = node.label;\n if (node.label && hasKatex(node.label)) {\n label = await renderKatexSanitized(node.label.replace(common.lineBreakRegex, '\\n'), config);\n }\n const labelClass = node.isNode ? 'nodeLabel' : 'edgeLabel';\n const labelSpan =\n '' +\n label +\n '';\n div.html(sanitizeText(labelSpan, config));\n\n applyStyle(div, node.labelStyle);\n div.style('display', 'inline-block');\n div.style('padding-right', '1px');\n // Fix for firefox\n div.style('white-space', 'nowrap');\n div.attr('xmlns', 'http://www.w3.org/1999/xhtml');\n return fo.node();\n}\n/**\n * @param _vertexText\n * @param style\n * @param isTitle\n * @param isNode\n * @deprecated svg-util/createText instead\n */\nconst createLabel = async (_vertexText, style, isTitle, isNode) => {\n let vertexText = _vertexText || '';\n if (typeof vertexText === 'object') {\n vertexText = vertexText[0];\n }\n\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n // TODO: addHtmlLabel accepts a labelStyle. Do we possibly have that?\n vertexText = vertexText.replace(/\\\\n|\\n/g, '
    ');\n log.info('vertexText' + vertexText);\n const node = {\n isNode,\n label: decodeEntities(vertexText).replace(\n /fa[blrs]?:fa-[\\w-]+/g,\n (s) => ``\n ),\n labelStyle: style ? style.replace('fill:', 'color:') : style,\n };\n let vertexNode = await addHtmlLabel(node);\n // vertexNode.parentNode.removeChild(vertexNode);\n return vertexNode;\n } else {\n const svgLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n svgLabel.setAttribute('style', style.replace('color:', 'fill:'));\n let rows = [];\n if (typeof vertexText === 'string') {\n rows = vertexText.split(/\\\\n|\\n|/gi);\n } else if (Array.isArray(vertexText)) {\n rows = vertexText;\n } else {\n rows = [];\n }\n\n for (const row of rows) {\n const tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan');\n tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n tspan.setAttribute('dy', '1em');\n tspan.setAttribute('x', '0');\n if (isTitle) {\n tspan.setAttribute('class', 'title-row');\n } else {\n tspan.setAttribute('class', 'row');\n }\n tspan.textContent = row.trim();\n svgLabel.appendChild(tspan);\n }\n return svgLabel;\n }\n};\n\nexport default createLabel;\n", "import type { Node } from '../../types.js';\nimport { select } from 'd3';\nimport { evaluate } from '../../../diagrams/common/common.js';\nimport { updateNodeBounds } from './util.js';\nimport createLabel from '../createLabel.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { getConfig } from '../../../diagram-api/diagramAPI.js';\nimport { createRoundedRectPathD } from './roundedRectPath.js';\nimport { log } from '../../../logger.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function rectWithTitle(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n let classes;\n if (!node.cssClasses) {\n classes = 'node default';\n } else {\n classes = 'node ' + node.cssClasses;\n }\n\n // Add outer g element\n const shapeSvg = parent\n // @ts-ignore - d3 typings are not correct\n .insert('g')\n .attr('class', classes)\n .attr('id', node.domId || node.id);\n\n // Create the title label and insert it after the rect\n const g = shapeSvg.insert('g');\n\n const label = shapeSvg.insert('g').attr('class', 'label').attr('style', nodeStyles);\n\n const description = node.description;\n\n const title = node.label;\n\n const text = label.node()!.appendChild(await createLabel(title, node.labelStyle, true, true));\n let bbox = { width: 0, height: 0 };\n if (evaluate(getConfig()?.flowchart?.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n log.info('Text 2', description);\n const textRows = description || [];\n const titleBox = text.getBBox();\n const descr = label\n .node()!\n .appendChild(\n await createLabel(\n textRows.join ? textRows.join('
    ') : textRows,\n node.labelStyle,\n true,\n true\n )\n );\n\n //if (evaluate(getConfig()?.flowchart?.htmlLabels)) {\n const div = descr.children[0];\n const dv = select(descr);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n // }\n\n const halfPadding = (node.padding || 0) / 2;\n select(descr).attr(\n 'transform',\n 'translate( ' +\n (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) +\n ', ' +\n (titleBox.height + halfPadding + 5) +\n ')'\n );\n select(text).attr(\n 'transform',\n 'translate( ' +\n (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) +\n ', ' +\n 0 +\n ')'\n );\n // Get the size of the label\n\n // Bounding box for title and text\n bbox = label.node()!.getBBox();\n\n // Center the label\n label.attr(\n 'transform',\n 'translate(' + -bbox.width / 2 + ', ' + (-bbox.height / 2 - halfPadding + 3) + ')'\n );\n\n const totalWidth = bbox.width + (node.padding || 0);\n const totalHeight = bbox.height + (node.padding || 0);\n const x = -bbox.width / 2 - halfPadding;\n const y = -bbox.height / 2 - halfPadding;\n let rect;\n let innerLine;\n if (node.look === 'handDrawn') {\n // @ts-ignore No typings for rough\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.path(\n createRoundedRectPathD(x, y, totalWidth, totalHeight, node.rx || 0),\n options\n );\n\n const roughLine = rc.line(\n -bbox.width / 2 - halfPadding,\n -bbox.height / 2 - halfPadding + titleBox.height + halfPadding,\n bbox.width / 2 + halfPadding,\n -bbox.height / 2 - halfPadding + titleBox.height + halfPadding,\n options\n );\n\n innerLine = shapeSvg.insert(() => {\n log.debug('Rough node insert CXC', roughNode);\n return roughLine;\n }, ':first-child');\n rect = shapeSvg.insert(() => {\n log.debug('Rough node insert CXC', roughNode);\n return roughNode;\n }, ':first-child');\n } else {\n rect = g.insert('rect', ':first-child');\n innerLine = g.insert('line');\n rect\n .attr('class', 'outer title-state')\n .attr('style', nodeStyles)\n .attr('x', -bbox.width / 2 - halfPadding)\n .attr('y', -bbox.height / 2 - halfPadding)\n .attr('width', bbox.width + (node.padding || 0))\n .attr('height', bbox.height + (node.padding || 0));\n\n innerLine\n .attr('class', 'divider')\n .attr('x1', -bbox.width / 2 - halfPadding)\n .attr('x2', bbox.width / 2 + halfPadding)\n .attr('y1', -bbox.height / 2 - halfPadding + titleBox.height + halfPadding)\n .attr('y2', -bbox.height / 2 - halfPadding + titleBox.height + halfPadding);\n }\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\n/**\n * Generates evenly spaced points along an elliptical arc connecting two points.\n *\n * @param x1 - x-coordinate of the start point of the arc\n * @param y1 - y-coordinate of the start point of the arc\n * @param x2 - x-coordinate of the end point of the arc\n * @param y2 - y-coordinate of the end point of the arc\n * @param rx - horizontal radius of the ellipse\n * @param ry - vertical radius of the ellipse\n * @param clockwise - direction of the arc; true for clockwise, false for counterclockwise\n * @returns Array of points `{ x, y }` along the elliptical arc\n *\n * @throws Error if the given radii are too small to draw an arc between the points\n */\nexport function generateArcPoints(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n rx: number,\n ry: number,\n clockwise: boolean\n) {\n const numPoints = 20;\n // Calculate midpoint\n const midX = (x1 + x2) / 2;\n const midY = (y1 + y2) / 2;\n\n // Calculate the angle of the line connecting the points\n const angle = Math.atan2(y2 - y1, x2 - x1);\n\n // Calculate transformed coordinates for the ellipse\n const dx = (x2 - x1) / 2;\n const dy = (y2 - y1) / 2;\n\n // Scale to unit circle\n const transformedX = dx / rx;\n const transformedY = dy / ry;\n\n // Calculate the distance between points on the unit circle\n const distance = Math.sqrt(transformedX ** 2 + transformedY ** 2);\n\n // Check if the ellipse can be drawn with the given radii\n if (distance > 1) {\n throw new Error('The given radii are too small to create an arc between the points.');\n }\n\n // Calculate the distance from the midpoint to the center of the ellipse\n const scaledCenterDistance = Math.sqrt(1 - distance ** 2);\n\n // Calculate the center of the ellipse\n const centerX = midX + scaledCenterDistance * ry * Math.sin(angle) * (clockwise ? -1 : 1);\n const centerY = midY - scaledCenterDistance * rx * Math.cos(angle) * (clockwise ? -1 : 1);\n\n // Calculate the start and end angles on the ellipse\n const startAngle = Math.atan2((y1 - centerY) / ry, (x1 - centerX) / rx);\n const endAngle = Math.atan2((y2 - centerY) / ry, (x2 - centerX) / rx);\n\n // Adjust angles for clockwise/counterclockwise\n let angleRange = endAngle - startAngle;\n if (clockwise && angleRange < 0) {\n angleRange += 2 * Math.PI;\n }\n if (!clockwise && angleRange > 0) {\n angleRange -= 2 * Math.PI;\n }\n\n // Generate points\n const points = [];\n for (let i = 0; i < numPoints; i++) {\n const t = i / (numPoints - 1);\n const angle = startAngle + t * angleRange;\n const x = centerX + rx * Math.cos(angle);\n const y = centerY + ry * Math.sin(angle);\n points.push({ x, y });\n }\n\n return points;\n}\n\nexport async function roundedRect(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n const labelPaddingX = node?.padding ?? 0;\n const labelPaddingY = node?.padding ?? 0;\n\n const w = (node?.width ? node?.width : bbox.width) + labelPaddingX * 2;\n const h = (node?.height ? node?.height : bbox.height) + labelPaddingY * 2;\n const radius = node.radius || 5;\n const taper = node.taper || 5; // Taper width for the rounded corners\n const { cssStyles } = node;\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.stroke) {\n options.stroke = node.stroke;\n }\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n const points = [\n // Top edge (left to right)\n { x: -w / 2 + taper, y: -h / 2 }, // Top-left corner start (1)\n { x: w / 2 - taper, y: -h / 2 }, // Top-right corner start (2)\n\n ...generateArcPoints(w / 2 - taper, -h / 2, w / 2, -h / 2 + taper, radius, radius, true), // Top-left arc (2 to 3)\n\n // Right edge (top to bottom)\n { x: w / 2, y: -h / 2 + taper }, // Top-right taper point (3)\n { x: w / 2, y: h / 2 - taper }, // Bottom-right taper point (4)\n\n ...generateArcPoints(w / 2, h / 2 - taper, w / 2 - taper, h / 2, radius, radius, true), // Top-left arc (4 to 5)\n\n // Bottom edge (right to left)\n { x: w / 2 - taper, y: h / 2 }, // Bottom-right corner start (5)\n { x: -w / 2 + taper, y: h / 2 }, // Bottom-left corner start (6)\n\n ...generateArcPoints(-w / 2 + taper, h / 2, -w / 2, h / 2 - taper, radius, radius, true), // Top-left arc (4 to 5)\n\n // Left edge (bottom to top)\n { x: -w / 2, y: h / 2 - taper }, // Bottom-left taper point (7)\n { x: -w / 2, y: -h / 2 + taper }, // Top-left taper point (8)\n ...generateArcPoints(-w / 2, -h / 2 + taper, -w / 2 + taper, -h / 2, radius, radius, true), // Top-left arc (4 to 5)\n ];\n\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n\n const polygon = shapeSvg.insert(() => shapeNode, ':first-child');\n polygon.attr('class', 'basic label-container outer-path');\n\n if (cssStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\n\nexport async function shadedProcess(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const halfPadding = node?.padding ?? 0;\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const x = -bbox.width / 2 - halfPadding;\n const y = -bbox.height / 2 - halfPadding;\n\n const { cssStyles } = node;\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const points = [\n { x, y },\n { x: x + w + 8, y },\n { x: x + w + 8, y: y + h },\n { x: x - 8, y: y + h },\n { x: x - 8, y: y },\n { x, y },\n { x, y: y + h },\n ];\n\n const roughNode = rc.polygon(\n points.map((p) => [p.x, p.y]),\n options\n );\n\n const rect = shapeSvg.insert(() => roughNode, ':first-child');\n\n rect.attr('class', 'basic label-container').attr('style', handleUndefinedAttr(cssStyles));\n\n if (nodeStyles && node.look !== 'handDrawn') {\n rect.selectAll('path').attr('style', nodeStyles);\n }\n\n if (cssStyles && node.look !== 'handDrawn') {\n rect.selectAll('path').attr('style', nodeStyles);\n }\n\n label.attr(\n 'transform',\n `translate(${-w / 2 + 4 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - (bbox.y - (bbox.top ?? 0))})`\n );\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function slopedRect(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const x = -w / 2;\n const y = -h / 2;\n\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const points = [\n { x, y },\n { x, y: y + h },\n { x: x + w, y: y + h },\n { x: x + w, y: y - h / 2 },\n ];\n\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n\n const polygon = shapeSvg.insert(() => shapeNode, ':first-child');\n polygon.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', nodeStyles);\n }\n\n polygon.attr('transform', `translate(0, ${h / 4})`);\n label.attr(\n 'transform',\n `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))}, ${-h / 4 + (node.padding ?? 0) - (bbox.y - (bbox.top ?? 0))})`\n );\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import type { Node, RectOptions } from '../../types.js';\nimport type { D3Selection } from '../../../types.js';\nimport { drawRect } from './drawRect.js';\n\nexport async function squareRect(parent: D3Selection, node: Node) {\n const options = {\n rx: 0,\n ry: 0,\n classes: '',\n labelPaddingX: node.labelPaddingX ?? (node?.padding || 0) * 2,\n labelPaddingY: (node?.padding || 0) * 1,\n } as RectOptions;\n return drawRect(parent, node, options);\n}\n", "import {\n labelHelper,\n updateNodeBounds,\n getNodeClasses,\n generateCirclePoints,\n createPathFromPoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport const createStadiumPathD = (\n x: number,\n y: number,\n totalWidth: number,\n totalHeight: number\n) => {\n const radius = totalHeight / 2;\n return [\n 'M',\n x + radius,\n y, // Move to the start of the top-left arc\n 'H',\n x + totalWidth - radius, // Draw horizontal line to the start of the top-right arc\n 'A',\n radius,\n radius,\n 0,\n 0,\n 1,\n x + totalWidth,\n y + radius, // Draw top-right arc\n 'H',\n x, // Draw horizontal line to the start of the bottom-right arc\n 'A',\n radius,\n radius,\n 0,\n 0,\n 1,\n x + totalWidth - radius,\n y + totalHeight, // Draw bottom-right arc\n 'H',\n x + radius, // Draw horizontal line to the start of the bottom-left arc\n 'A',\n radius,\n radius,\n 0,\n 0,\n 1,\n x,\n y + radius, // Draw bottom-left arc\n 'Z', // Close the path\n ].join(' ');\n};\n\nexport async function stadium(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n const h = bbox.height + node.padding;\n const w = bbox.width + h / 4 + node.padding;\n\n const radius = h / 2;\n const { cssStyles } = node;\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const points = [\n { x: -w / 2 + radius, y: -h / 2 },\n { x: w / 2 - radius, y: -h / 2 },\n ...generateCirclePoints(-w / 2 + radius, 0, radius, 50, 90, 270),\n { x: w / 2 - radius, y: h / 2 },\n ...generateCirclePoints(w / 2 - radius, 0, radius, 50, 270, 450),\n ];\n\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n\n const polygon = shapeSvg.insert(() => shapeNode, ':first-child');\n polygon.attr('class', 'basic label-container outer-path');\n\n if (cssStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import type { Node, RectOptions } from '../../types.js';\nimport type { D3Selection } from '../../../types.js';\nimport { drawRect } from './drawRect.js';\n\nexport async function state(parent: D3Selection, node: Node) {\n const options = {\n rx: 5,\n ry: 5,\n classes: 'flowchart-node',\n } as RectOptions;\n return drawRect(parent, node, options);\n}\n", "import rough from 'roughjs';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function stateEnd(\n parent: D3Selection,\n node: Node,\n { config: { themeVariables } }: ShapeRenderOptions\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { cssStyles } = node;\n const { lineColor, stateBorder, nodeBorder } = themeVariables;\n const shapeSvg = parent\n .insert('g')\n .attr('class', 'node default')\n .attr('id', node.domId || node.id);\n\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const roughNode = rc.circle(0, 0, 14, {\n ...options,\n stroke: lineColor,\n strokeWidth: 2,\n });\n const innerFill = stateBorder ?? nodeBorder;\n const roughInnerNode = rc.circle(0, 0, 5, {\n ...options,\n fill: innerFill,\n stroke: innerFill,\n strokeWidth: 2,\n fillStyle: 'solid',\n });\n const circle = shapeSvg.insert(() => roughNode, ':first-child');\n circle.insert(() => roughInnerNode);\n\n if (cssStyles) {\n circle.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles) {\n circle.selectAll('path').attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, circle);\n\n node.intersect = function (point) {\n return intersect.circle(node, 7, point);\n };\n\n return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport type { Node, ShapeRenderOptions } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { solidStateFill } from './handDrawnShapeStyles.js';\nimport { updateNodeBounds } from './util.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport function stateStart(\n parent: D3Selection,\n node: Node,\n { config: { themeVariables } }: ShapeRenderOptions\n) {\n const { lineColor } = themeVariables;\n\n const shapeSvg = parent\n .insert('g')\n .attr('class', 'node default')\n .attr('id', node.domId || node.id);\n\n let circle: D3Selection | D3Selection;\n if (node.look === 'handDrawn') {\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const roughNode = rc.circle(0, 0, 14, solidStateFill(lineColor));\n circle = shapeSvg.insert(() => roughNode);\n // center the circle around its coordinate\n circle.attr('class', 'state-start').attr('r', 7).attr('width', 14).attr('height', 14);\n } else {\n circle = shapeSvg.insert('circle', ':first-child');\n // center the circle around its coordinate\n circle.attr('class', 'state-start').attr('r', 7).attr('width', 14).attr('height', 14);\n }\n\n updateNodeBounds(node, circle);\n\n node.intersect = function (point) {\n return intersect.circle(node, 7, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\n\nexport const createSubroutinePathD = (\n x: number,\n y: number,\n width: number,\n height: number\n): string => {\n const offset = 8;\n return [\n `M${x - offset},${y}`,\n `H${x + width + offset}`,\n `V${y + height}`,\n `H${x - offset}`,\n `V${y}`,\n 'M',\n x,\n y,\n 'H',\n x + width,\n 'V',\n y + height,\n 'H',\n x,\n 'Z',\n ].join(' ');\n};\n\nexport async function subroutine(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const halfPadding = (node?.padding || 0) / 2;\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const x = -bbox.width / 2 - halfPadding;\n const y = -bbox.height / 2 - halfPadding;\n\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: 0, y: -h },\n { x: 0, y: 0 },\n { x: -8, y: 0 },\n { x: w + 8, y: 0 },\n { x: w + 8, y: -h },\n { x: -8, y: -h },\n { x: -8, y: 0 },\n ];\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n const roughNode = rc.rectangle(x - 8, y, w + 16, h, options);\n const l1 = rc.line(x, y, x, y + h, options);\n const l2 = rc.line(x + w, y, x + w, y + h, options);\n\n shapeSvg.insert(() => l1, ':first-child');\n shapeSvg.insert(() => l2, ':first-child');\n const rect = shapeSvg.insert(() => roughNode, ':first-child');\n const { cssStyles } = node;\n rect.attr('class', 'basic label-container').attr('style', handleUndefinedAttr(cssStyles));\n updateNodeBounds(node, rect);\n } else {\n const el = insertPolygonShape(shapeSvg, w, h, points);\n if (nodeStyles) {\n el.attr('style', nodeStyles);\n }\n updateNodeBounds(node, el);\n }\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, getNodeClasses, updateNodeBounds, createPathFromPoints } from './util.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport intersect from '../intersect/index.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function taggedRect(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const x = -w / 2;\n const y = -h / 2;\n const tagWidth = 0.2 * h;\n const tagHeight = 0.2 * h;\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n const rectPoints = [\n { x: x - tagWidth / 2, y },\n { x: x + w + tagWidth / 2, y },\n { x: x + w + tagWidth / 2, y: y + h },\n { x: x - tagWidth / 2, y: y + h },\n ];\n\n const tagPoints = [\n { x: x + w - tagWidth / 2, y: y + h },\n { x: x + w + tagWidth / 2, y: y + h },\n { x: x + w + tagWidth / 2, y: y + h - tagHeight },\n ];\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const rectPath = createPathFromPoints(rectPoints);\n const rectNode = rc.path(rectPath, options);\n\n const tagPath = createPathFromPoints(tagPoints);\n const tagNode = rc.path(tagPath, { ...options, fillStyle: 'solid' });\n\n const taggedRect = shapeSvg.insert(() => tagNode, ':first-child');\n taggedRect.insert(() => rectNode, ':first-child');\n\n taggedRect.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n taggedRect.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n taggedRect.selectAll('path').attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, taggedRect);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, rectPoints, point);\n\n return pos;\n };\n\n return shapeSvg;\n}\n", "import {\n labelHelper,\n updateNodeBounds,\n getNodeClasses,\n generateFullSineWavePoints,\n createPathFromPoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport rough from 'roughjs';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function taggedWaveEdgedRectangle(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const waveAmplitude = h / 4;\n const tagWidth = 0.2 * w;\n const tagHeight = 0.2 * h;\n const finalH = h + waveAmplitude;\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const points = [\n { x: -w / 2 - (w / 2) * 0.1, y: finalH / 2 },\n ...generateFullSineWavePoints(\n -w / 2 - (w / 2) * 0.1,\n finalH / 2,\n w / 2 + (w / 2) * 0.1,\n finalH / 2,\n waveAmplitude,\n 0.8\n ),\n\n { x: w / 2 + (w / 2) * 0.1, y: -finalH / 2 },\n { x: -w / 2 - (w / 2) * 0.1, y: -finalH / 2 },\n ];\n\n const x = -w / 2 + (w / 2) * 0.1;\n const y = -finalH / 2 - tagHeight * 0.4;\n\n const tagPoints = [\n { x: x + w - tagWidth, y: (y + h) * 1.4 },\n { x: x + w, y: y + h - tagHeight },\n { x: x + w, y: (y + h) * 0.9 },\n ...generateFullSineWavePoints(\n x + w,\n (y + h) * 1.3,\n x + w - tagWidth,\n (y + h) * 1.5,\n -h * 0.03,\n 0.5\n ),\n ];\n\n const waveEdgeRectPath = createPathFromPoints(points);\n const waveEdgeRectNode = rc.path(waveEdgeRectPath, options);\n\n const taggedWaveEdgeRectPath = createPathFromPoints(tagPoints);\n const taggedWaveEdgeRectNode = rc.path(taggedWaveEdgeRectPath, {\n ...options,\n fillStyle: 'solid',\n });\n\n const waveEdgeRect = shapeSvg.insert(() => taggedWaveEdgeRectNode, ':first-child');\n waveEdgeRect.insert(() => waveEdgeRectNode, ':first-child');\n\n waveEdgeRect.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n waveEdgeRect.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n waveEdgeRect.selectAll('path').attr('style', nodeStyles);\n }\n\n waveEdgeRect.attr('transform', `translate(0,${-waveAmplitude / 2})`);\n label.attr(\n 'transform',\n `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n\n updateNodeBounds(node, waveEdgeRect);\n node.intersect = function (point) {\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String } from './handDrawnShapeStyles.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function text(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n const totalWidth = Math.max(bbox.width + node.padding, node?.width || 0);\n const totalHeight = Math.max(bbox.height + node.padding, node?.height || 0);\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n\n const rect = shapeSvg.insert('rect', ':first-child');\n\n rect\n .attr('class', 'text')\n .attr('style', nodeStyles)\n .attr('rx', 0)\n .attr('ry', 0)\n .attr('x', x)\n .attr('y', y)\n .attr('width', totalWidth)\n .attr('height', totalHeight);\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, getNodeClasses, updateNodeBounds } from './util.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport intersect from '../intersect/index.js';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\n\nexport const createCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number\n): string => {\n return `M${x},${y}\n a${rx},${ry} 0,0,1 ${0},${-height}\n l${width},${0}\n a${rx},${ry} 0,0,1 ${0},${height}\n M${width},${-height}\n a${rx},${ry} 0,0,0 ${0},${height}\n l${-width},${0}`;\n};\n\nexport const createOuterCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number\n): string => {\n return [\n `M${x},${y}`,\n `M${x + width},${y}`,\n `a${rx},${ry} 0,0,0 ${0},${-height}`,\n `l${-width},0`,\n `a${rx},${ry} 0,0,0 ${0},${height}`,\n `l${width},0`,\n ].join(' ');\n};\nexport const createInnerCylinderPathD = (\n x: number,\n y: number,\n width: number,\n height: number,\n rx: number,\n ry: number\n): string => {\n return [`M${x + width / 2},${-height / 2}`, `a${rx},${ry} 0,0,0 0,${height}`].join(' ');\n};\n\nexport async function tiltedCylinder(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label, halfPadding } = await labelHelper(\n parent,\n node,\n getNodeClasses(node)\n );\n const labelPadding = node.look === 'neo' ? halfPadding * 2 : halfPadding;\n const h = bbox.height + labelPadding;\n const ry = h / 2;\n const rx = ry / (2.5 + h / 50);\n const w = bbox.width + rx + labelPadding;\n const { cssStyles } = node;\n\n let cylinder: D3Selection | D3Selection;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const outerPathData = createOuterCylinderPathD(0, 0, w, h, rx, ry);\n const innerPathData = createInnerCylinderPathD(0, 0, w, h, rx, ry);\n const outerNode = rc.path(outerPathData, userNodeOverrides(node, {}));\n const innerLine = rc.path(innerPathData, userNodeOverrides(node, { fill: 'none' }));\n cylinder = shapeSvg.insert(() => innerLine, ':first-child');\n cylinder = shapeSvg.insert(() => outerNode, ':first-child');\n cylinder.attr('class', 'basic label-container');\n if (cssStyles) {\n cylinder.attr('style', cssStyles);\n }\n } else {\n const pathData = createCylinderPathD(0, 0, w, h, rx, ry);\n cylinder = shapeSvg\n .insert('path', ':first-child')\n .attr('d', pathData)\n .attr('class', 'basic label-container')\n .attr('style', handleUndefinedAttr(cssStyles))\n .attr('style', nodeStyles);\n cylinder.attr('class', 'basic label-container');\n\n if (cssStyles) {\n cylinder.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles) {\n cylinder.selectAll('path').attr('style', nodeStyles);\n }\n }\n\n cylinder.attr('label-offset-x', rx);\n cylinder.attr('transform', `translate(${-w / 2}, ${h / 2} )`);\n\n label.attr(\n 'transform',\n `translate(${-(bbox.width / 2) - rx - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`\n );\n\n updateNodeBounds(node, cylinder);\n\n node.intersect = function (point) {\n const pos = intersect.rect(node, point);\n const y = pos.y - (node.y ?? 0);\n\n if (\n ry != 0 &&\n (Math.abs(y) < (node.height ?? 0) / 2 ||\n (Math.abs(y) == (node.height ?? 0) / 2 &&\n Math.abs(pos.x - (node.x ?? 0)) > (node.width ?? 0) / 2 - rx))\n ) {\n let x = rx * rx * (1 - (y * y) / (ry * ry));\n if (x != 0) {\n x = Math.sqrt(Math.abs(x));\n }\n x = rx - x;\n if (point.x - (node.x ?? 0) > 0) {\n x = -x;\n }\n\n pos.x += x;\n }\n\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { insertPolygonShape } from './insertPolygonShape.js';\nimport type { D3Selection } from '../../../types.js';\n\n// export const createTrapezoidPathD = (\n// x: number,\n// y: number,\n// width: number,\n// height: number\n// ): string => {\n// return [\n// `M${x - (2 * height) / 6},${y}`,\n// `L${x + width + (2 * height) / 6},${y}`,\n// `L${x + width - height / 6},${y - height}`,\n// `L${x + height / 6},${y - height}`,\n// 'Z',\n// ].join(' ');\n// };\n\nexport async function trapezoid(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: (-3 * h) / 6, y: 0 },\n { x: w + (3 * h) / 6, y: 0 },\n { x: w, y: -h },\n { x: 0, y: -h },\n ];\n\n let polygon: typeof shapeSvg | ReturnType;\n const { cssStyles } = node;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n\n polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-w / 2}, ${h / 2})`);\n\n if (cssStyles) {\n polygon.attr('style', cssStyles);\n }\n } else {\n polygon = insertPolygonShape(shapeSvg, w, h, points);\n }\n\n if (nodeStyles) {\n polygon.attr('style', nodeStyles);\n }\n\n node.width = w;\n node.height = h;\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, updateNodeBounds, getNodeClasses, createPathFromPoints } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function trapezoidalPentagon(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n const minWidth = 60,\n minHeight = 20;\n const w = Math.max(minWidth, bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(minHeight, bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n\n const { cssStyles } = node;\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const points = [\n { x: (-w / 2) * 0.8, y: -h / 2 },\n { x: (w / 2) * 0.8, y: -h / 2 },\n { x: w / 2, y: (-h / 2) * 0.6 },\n { x: w / 2, y: h / 2 },\n { x: -w / 2, y: h / 2 },\n { x: -w / 2, y: (-h / 2) * 0.6 },\n ];\n\n const pathData = createPathFromPoints(points);\n const shapeNode = rc.path(pathData, options);\n\n const polygon = shapeSvg.insert(() => shapeNode, ':first-child');\n polygon.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, polygon);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { createPathFromPoints } from './util.js';\nimport { evaluate } from '../../../diagrams/common/common.js';\nimport { getConfig } from '../../../diagram-api/diagramAPI.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function triangle(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const useHtmlLabels = evaluate(getConfig().flowchart?.htmlLabels);\n\n const w = bbox.width + (node.padding ?? 0);\n const h = w + bbox.height;\n\n const tw = w + bbox.height;\n const points = [\n { x: 0, y: 0 },\n { x: tw, y: 0 },\n { x: tw / 2, y: -h },\n ];\n\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n const pathData = createPathFromPoints(points);\n const roughNode = rc.path(pathData, options);\n\n const polygon = shapeSvg\n .insert(() => roughNode, ':first-child')\n .attr('transform', `translate(${-h / 2}, ${h / 2})`);\n\n if (cssStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n polygon.selectChildren('path').attr('style', nodeStyles);\n }\n\n node.width = w;\n node.height = h;\n\n updateNodeBounds(node, polygon);\n\n label.attr(\n 'transform',\n `translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${h / 2 - (bbox.height + (node.padding ?? 0) / (useHtmlLabels ? 2 : 1) - (bbox.y - (bbox.top ?? 0)))})`\n );\n\n node.intersect = function (point) {\n log.info('Triangle intersect', node, points, point);\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n}\n", "import {\n labelHelper,\n updateNodeBounds,\n getNodeClasses,\n generateFullSineWavePoints,\n createPathFromPoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport rough from 'roughjs';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function waveEdgedRectangle(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const waveAmplitude = h / 8;\n const finalH = h + waveAmplitude;\n const { cssStyles } = node;\n\n // To maintain minimum width\n const minWidth = 70;\n const widthDif = minWidth - w;\n const extraW = widthDif > 0 ? widthDif / 2 : 0;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const points = [\n { x: -w / 2 - extraW, y: finalH / 2 },\n ...generateFullSineWavePoints(\n -w / 2 - extraW,\n finalH / 2,\n w / 2 + extraW,\n finalH / 2,\n waveAmplitude,\n 0.8\n ),\n { x: w / 2 + extraW, y: -finalH / 2 },\n { x: -w / 2 - extraW, y: -finalH / 2 },\n ];\n\n const waveEdgeRectPath = createPathFromPoints(points);\n const waveEdgeRectNode = rc.path(waveEdgeRectPath, options);\n\n const waveEdgeRect = shapeSvg.insert(() => waveEdgeRectNode, ':first-child');\n\n waveEdgeRect.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n waveEdgeRect.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n waveEdgeRect.selectAll('path').attr('style', nodeStyles);\n }\n\n waveEdgeRect.attr('transform', `translate(0,${-waveAmplitude / 2})`);\n label.attr(\n 'transform',\n `translate(${-w / 2 + (node.padding ?? 0) - (bbox.x - (bbox.left ?? 0))},${-h / 2 + (node.padding ?? 0) - waveAmplitude - (bbox.y - (bbox.top ?? 0))})`\n );\n\n updateNodeBounds(node, waveEdgeRect);\n node.intersect = function (point) {\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import {\n labelHelper,\n updateNodeBounds,\n getNodeClasses,\n createPathFromPoints,\n generateFullSineWavePoints,\n} from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function waveRectangle(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));\n\n const minWidth = 100; // Minimum width\n const minHeight = 50; // Minimum height\n\n const baseWidth = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const baseHeight = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n\n const aspectRatio = baseWidth / baseHeight;\n\n let w = baseWidth;\n let h = baseHeight;\n\n if (w > h * aspectRatio) {\n h = w / aspectRatio;\n } else {\n w = h * aspectRatio;\n }\n\n w = Math.max(w, minWidth);\n h = Math.max(h, minHeight);\n\n const waveAmplitude = Math.min(h * 0.2, h / 4);\n const finalH = h + waveAmplitude * 2;\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const points = [\n { x: -w / 2, y: finalH / 2 },\n ...generateFullSineWavePoints(-w / 2, finalH / 2, w / 2, finalH / 2, waveAmplitude, 1),\n { x: w / 2, y: -finalH / 2 },\n ...generateFullSineWavePoints(w / 2, -finalH / 2, -w / 2, -finalH / 2, waveAmplitude, -1),\n ];\n\n const waveRectPath = createPathFromPoints(points);\n const waveRectNode = rc.path(waveRectPath, options);\n\n const waveRect = shapeSvg.insert(() => waveRectNode, ':first-child');\n\n waveRect.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n waveRect.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n waveRect.selectAll('path').attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, waveRect);\n node.intersect = function (point) {\n const pos = intersect.polygon(node, points, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { labelHelper, getNodeClasses, updateNodeBounds } from './util.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport intersect from '../intersect/index.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function windowPane(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));\n const w = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);\n const h = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);\n const rectOffset = 5;\n const x = -w / 2;\n const y = -h / 2;\n const { cssStyles } = node;\n\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n const outerPathPoints = [\n { x: x - rectOffset, y: y - rectOffset },\n { x: x - rectOffset, y: y + h },\n { x: x + w, y: y + h },\n { x: x + w, y: y - rectOffset },\n ];\n\n const path = `M${x - rectOffset},${y - rectOffset} L${x + w},${y - rectOffset} L${x + w},${y + h} L${x - rectOffset},${y + h} L${x - rectOffset},${y - rectOffset}\n M${x - rectOffset},${y} L${x + w},${y}\n M${x},${y - rectOffset} L${x},${y + h}`;\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const no = rc.path(path, options);\n\n const windowPane = shapeSvg.insert(() => no, ':first-child');\n windowPane.attr('transform', `translate(${rectOffset / 2}, ${rectOffset / 2})`);\n\n windowPane.attr('class', 'basic label-container');\n\n if (cssStyles && node.look !== 'handDrawn') {\n windowPane.selectAll('path').attr('style', cssStyles);\n }\n\n if (nodeStyles && node.look !== 'handDrawn') {\n windowPane.selectAll('path').attr('style', nodeStyles);\n }\n\n label.attr(\n 'transform',\n `translate(${-(bbox.width / 2) + rectOffset / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) + rectOffset / 2 - (bbox.y - (bbox.top ?? 0))})`\n );\n\n updateNodeBounds(node, windowPane);\n\n node.intersect = function (point) {\n const pos = intersect.polygon(node, outerPathPoints, point);\n return pos;\n };\n\n return shapeSvg;\n}\n", "import { updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { userNodeOverrides, styles2String } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport { drawRect } from './drawRect.js';\nimport { getConfig } from '../../../config.js';\nimport type { EntityNode } from '../../../diagrams/er/erTypes.js';\nimport { createText } from '../../createText.js';\nimport { evaluate, parseGenericTypes } from '../../../diagrams/common/common.js';\nimport { select } from 'd3';\nimport { calculateTextWidth } from '../../../utils.js';\nimport type { MermaidConfig } from '../../../config.type.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function erBox(parent: D3Selection, node: Node) {\n // Treat node as entityNode for certain entityNode checks\n const entityNode = node as unknown as EntityNode;\n if (entityNode.alias) {\n node.label = entityNode.alias;\n }\n\n // Background shapes are drawn to fill in the background color and cover up the ER diagram edge markers.\n // Draw background shape once.\n if (node.look === 'handDrawn') {\n const { themeVariables } = getConfig();\n const { background } = themeVariables;\n const backgroundNode = {\n ...node,\n id: node.id + '-background',\n look: 'default',\n cssStyles: ['stroke: none', `fill: ${background}`],\n };\n await erBox(parent, backgroundNode);\n }\n\n const config = getConfig();\n node.useHtmlLabels = config.htmlLabels;\n let PADDING = config.er?.diagramPadding ?? 10;\n let TEXT_PADDING = config.er?.entityPadding ?? 6;\n\n const { cssStyles } = node;\n const { labelStyles, nodeStyles } = styles2String(node);\n\n // Draw rect if no attributes are found\n if (entityNode.attributes.length === 0 && node.label) {\n const options = {\n rx: 0,\n ry: 0,\n labelPaddingX: PADDING,\n labelPaddingY: PADDING * 1.5,\n classes: '',\n };\n // Set minimum width\n if (\n calculateTextWidth(node.label, config) + options.labelPaddingX * 2 <\n config.er!.minEntityWidth!\n ) {\n node.width = config.er!.minEntityWidth;\n }\n const shapeSvg = await drawRect(parent, node, options);\n\n // drawRect doesn't center non-htmlLabels correctly as of now, so translate label\n if (!evaluate(config.htmlLabels)) {\n const textElement = shapeSvg.select('text');\n const bbox = (textElement.node() as SVGTextElement)?.getBBox();\n textElement.attr('transform', `translate(${-bbox.width / 2}, 0)`);\n }\n return shapeSvg;\n }\n\n if (!config.htmlLabels) {\n PADDING *= 1.25;\n TEXT_PADDING *= 1.25;\n }\n\n let cssClasses = getNodeClasses(node);\n if (!cssClasses) {\n cssClasses = 'node default';\n }\n\n const shapeSvg = parent\n // @ts-ignore Ignore .insert on SVGAElement\n .insert('g')\n .attr('class', cssClasses)\n .attr('id', node.domId || node.id);\n\n const nameBBox = await addText(shapeSvg, node.label ?? '', config, 0, 0, ['name'], labelStyles);\n nameBBox.height += TEXT_PADDING;\n let yOffset = 0;\n const yOffsets = [];\n const rows = [];\n let maxTypeWidth = 0;\n let maxNameWidth = 0;\n let maxKeysWidth = 0;\n let maxCommentWidth = 0;\n let keysPresent = true;\n let commentPresent = true;\n for (const attribute of entityNode.attributes) {\n const typeBBox = await addText(\n shapeSvg,\n attribute.type,\n config,\n 0,\n yOffset,\n ['attribute-type'],\n labelStyles\n );\n maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width + PADDING);\n const nameBBox = await addText(\n shapeSvg,\n attribute.name,\n config,\n 0,\n yOffset,\n ['attribute-name'],\n labelStyles\n );\n maxNameWidth = Math.max(maxNameWidth, nameBBox.width + PADDING);\n const keysBBox = await addText(\n shapeSvg,\n attribute.keys.join(),\n config,\n 0,\n yOffset,\n ['attribute-keys'],\n labelStyles\n );\n maxKeysWidth = Math.max(maxKeysWidth, keysBBox.width + PADDING);\n const commentBBox = await addText(\n shapeSvg,\n attribute.comment,\n config,\n 0,\n yOffset,\n ['attribute-comment'],\n labelStyles\n );\n maxCommentWidth = Math.max(maxCommentWidth, commentBBox.width + PADDING);\n\n const rowHeight =\n Math.max(typeBBox.height, nameBBox.height, keysBBox.height, commentBBox.height) +\n TEXT_PADDING;\n rows.push({ yOffset, rowHeight });\n yOffset += rowHeight;\n }\n let totalWidthSections = 4;\n\n if (maxKeysWidth <= PADDING) {\n keysPresent = false;\n maxKeysWidth = 0;\n totalWidthSections--;\n }\n if (maxCommentWidth <= PADDING) {\n commentPresent = false;\n maxCommentWidth = 0;\n totalWidthSections--;\n }\n\n const shapeBBox = shapeSvg.node()!.getBBox();\n // Add extra padding to attribute components to accommodate for difference in width\n if (\n nameBBox.width + PADDING * 2 - (maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth) >\n 0\n ) {\n const difference =\n nameBBox.width + PADDING * 2 - (maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth);\n maxTypeWidth += difference / totalWidthSections;\n maxNameWidth += difference / totalWidthSections;\n if (maxKeysWidth > 0) {\n maxKeysWidth += difference / totalWidthSections;\n }\n if (maxCommentWidth > 0) {\n maxCommentWidth += difference / totalWidthSections;\n }\n }\n\n const maxWidth = maxTypeWidth + maxNameWidth + maxKeysWidth + maxCommentWidth;\n\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n let totalShapeBBoxHeight = 0;\n if (rows.length > 0) {\n totalShapeBBoxHeight = rows.reduce((sum, row) => sum + (row?.rowHeight ?? 0), 0);\n }\n const w = Math.max(shapeBBox.width + PADDING * 2, node?.width || 0, maxWidth);\n const h = Math.max((totalShapeBBoxHeight ?? 0) + nameBBox.height, node?.height || 0);\n const x = -w / 2;\n const y = -h / 2;\n\n // Translate attribute text labels\n shapeSvg.selectAll('g:not(:first-child)').each((_: any, i: number, nodes: any) => {\n const text = select(nodes[i]);\n const transform = text.attr('transform');\n let translateX = 0;\n let translateY = 0;\n\n if (transform) {\n const regex = RegExp(/translate\\(([^,]+),([^)]+)\\)/);\n const translate = regex.exec(transform);\n if (translate) {\n translateX = parseFloat(translate[1]);\n translateY = parseFloat(translate[2]);\n if (text.attr('class').includes('attribute-name')) {\n translateX += maxTypeWidth;\n } else if (text.attr('class').includes('attribute-keys')) {\n translateX += maxTypeWidth + maxNameWidth;\n } else if (text.attr('class').includes('attribute-comment')) {\n translateX += maxTypeWidth + maxNameWidth + maxKeysWidth;\n }\n }\n }\n\n text.attr(\n 'transform',\n `translate(${x + PADDING / 2 + translateX}, ${translateY + y + nameBBox.height + TEXT_PADDING / 2})`\n );\n });\n // Center the name\n shapeSvg\n .select('.name')\n .attr('transform', 'translate(' + -nameBBox.width / 2 + ', ' + (y + TEXT_PADDING / 2) + ')');\n\n // Draw shape\n const roughRect = rc.rectangle(x, y, w, h, options);\n const rect = shapeSvg.insert(() => roughRect, ':first-child').attr('style', cssStyles!.join(''));\n\n const { themeVariables } = getConfig();\n const { rowEven, rowOdd, nodeBorder } = themeVariables;\n\n yOffsets.push(0);\n // Draw row rects\n for (const [i, row] of rows.entries()) {\n const contentRowIndex = i + 1; // Adjusted index to skip the header (name) row\n const isEven = contentRowIndex % 2 === 0 && row.yOffset !== 0;\n const roughRect = rc.rectangle(x, nameBBox.height + y + row?.yOffset, w, row?.rowHeight, {\n ...options,\n fill: isEven ? rowEven : rowOdd,\n stroke: nodeBorder,\n });\n shapeSvg\n .insert(() => roughRect, 'g.label')\n .attr('style', cssStyles!.join(''))\n .attr('class', `row-rect-${isEven ? 'even' : 'odd'}`);\n }\n\n // Draw divider lines\n // Name line\n let roughLine = rc.line(x, nameBBox.height + y, w + x, nameBBox.height + y, options);\n shapeSvg.insert(() => roughLine).attr('class', 'divider');\n // First line\n roughLine = rc.line(maxTypeWidth + x, nameBBox.height + y, maxTypeWidth + x, h + y, options);\n shapeSvg.insert(() => roughLine).attr('class', 'divider');\n // Second line\n if (keysPresent) {\n roughLine = rc.line(\n maxTypeWidth + maxNameWidth + x,\n nameBBox.height + y,\n maxTypeWidth + maxNameWidth + x,\n h + y,\n options\n );\n shapeSvg.insert(() => roughLine).attr('class', 'divider');\n }\n // Third line\n if (commentPresent) {\n roughLine = rc.line(\n maxTypeWidth + maxNameWidth + maxKeysWidth + x,\n nameBBox.height + y,\n maxTypeWidth + maxNameWidth + maxKeysWidth + x,\n h + y,\n options\n );\n shapeSvg.insert(() => roughLine).attr('class', 'divider');\n }\n\n // Attribute divider lines\n for (const yOffset of yOffsets) {\n roughLine = rc.line(\n x,\n nameBBox.height + y + yOffset,\n w + x,\n nameBBox.height + y + yOffset,\n options\n );\n shapeSvg.insert(() => roughLine).attr('class', 'divider');\n }\n\n updateNodeBounds(node, rect);\n\n if (nodeStyles && node.look !== 'handDrawn') {\n const allStyle = nodeStyles.split(';');\n const strokeStyles = allStyle\n ?.filter((e) => {\n return e.includes('stroke');\n })\n ?.map((s) => `${s}`)\n .join('; ');\n shapeSvg.selectAll('path').attr('style', strokeStyles ?? '');\n shapeSvg.selectAll('.row-rect-even path').attr('style', nodeStyles);\n }\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n return shapeSvg;\n}\n\n// Helper function to add label text g with translate position and style\nasync function addText(\n shapeSvg: D3Selection,\n labelText: string,\n config: MermaidConfig,\n translateX = 0,\n translateY = 0,\n classes: string[] = [],\n style = ''\n) {\n const label = shapeSvg\n .insert('g')\n .attr('class', `label ${classes.join(' ')}`)\n .attr('transform', `translate(${translateX}, ${translateY})`)\n .attr('style', style);\n\n // Return types need to be parsed\n if (labelText !== parseGenericTypes(labelText)) {\n labelText = parseGenericTypes(labelText);\n // Work around\n labelText = labelText.replaceAll('<', '<').replaceAll('>', '>');\n }\n\n const text = label.node()!.appendChild(\n await createText(\n label,\n labelText,\n {\n width: calculateTextWidth(labelText, config) + 100,\n style,\n useHtmlLabels: config.htmlLabels,\n },\n config\n )\n );\n // Undo work around now that text passed through correctly\n if (labelText.includes('<') || labelText.includes('>')) {\n let child = text.children[0];\n child.textContent = child.textContent.replaceAll('<', '<').replaceAll('>', '>');\n while (child.childNodes[0]) {\n child = child.childNodes[0];\n // Replace its text content\n child.textContent = child.textContent.replaceAll('<', '<').replaceAll('>', '>');\n }\n }\n\n let bbox = text.getBBox();\n if (evaluate(config.htmlLabels)) {\n const div = text.children[0];\n div.style.textAlign = 'start';\n const dv = select(text);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n\n return bbox;\n}\n", "import { select } from 'd3';\nimport { getConfig } from '../../config.js';\nimport { getNodeClasses } from '../../rendering-util/rendering-elements/shapes/util.js';\nimport { calculateTextWidth, decodeEntities } from '../../utils.js';\nimport type { ClassMember, ClassNode } from './classTypes.js';\nimport { sanitizeText } from '../../diagram-api/diagramAPI.js';\nimport { createText } from '../../rendering-util/createText.js';\nimport { evaluate, hasKatex } from '../common/common.js';\nimport type { Node } from '../../rendering-util/types.js';\nimport type { MermaidConfig } from '../../config.type.js';\nimport type { D3Selection } from '../../types.js';\n\n// Creates the shapeSvg and inserts text\nexport async function textHelper(\n parent: D3Selection,\n node: any,\n config: MermaidConfig,\n useHtmlLabels: boolean,\n GAP = config.class!.padding ?? 12\n) {\n const TEXT_PADDING = !useHtmlLabels ? 3 : 0;\n const shapeSvg = parent\n // @ts-ignore: Ignore error for using .insert on SVGAElement\n .insert('g')\n .attr('class', getNodeClasses(node))\n .attr('id', node.domId || node.id);\n\n let annotationGroup = null;\n let labelGroup = null;\n let membersGroup = null;\n let methodsGroup = null;\n\n let annotationGroupHeight = 0;\n let labelGroupHeight = 0;\n let membersGroupHeight = 0;\n\n annotationGroup = shapeSvg.insert('g').attr('class', 'annotation-group text');\n if (node.annotations.length > 0) {\n const annotation = node.annotations[0];\n await addText(annotationGroup, { text: `\u00AB${annotation}\u00BB` } as unknown as ClassMember, 0);\n\n const annotationGroupBBox = annotationGroup.node()!.getBBox();\n annotationGroupHeight = annotationGroupBBox.height;\n }\n\n labelGroup = shapeSvg.insert('g').attr('class', 'label-group text');\n await addText(labelGroup, node, 0, ['font-weight: bolder']);\n const labelGroupBBox = labelGroup.node()!.getBBox();\n labelGroupHeight = labelGroupBBox.height;\n\n membersGroup = shapeSvg.insert('g').attr('class', 'members-group text');\n let yOffset = 0;\n for (const member of node.members) {\n const height = await addText(membersGroup, member, yOffset, [member.parseClassifier()]);\n yOffset += height + TEXT_PADDING;\n }\n membersGroupHeight = membersGroup.node()!.getBBox().height;\n if (membersGroupHeight <= 0) {\n membersGroupHeight = GAP / 2;\n }\n\n methodsGroup = shapeSvg.insert('g').attr('class', 'methods-group text');\n let methodsYOffset = 0;\n for (const method of node.methods) {\n const height = await addText(methodsGroup, method, methodsYOffset, [method.parseClassifier()]);\n methodsYOffset += height + TEXT_PADDING;\n }\n\n let bbox = shapeSvg.node()!.getBBox();\n\n // Center annotation\n if (annotationGroup !== null) {\n const annotationGroupBBox = annotationGroup.node()!.getBBox();\n annotationGroup.attr('transform', `translate(${-annotationGroupBBox.width / 2})`);\n }\n\n // Adjust label\n labelGroup.attr('transform', `translate(${-labelGroupBBox.width / 2}, ${annotationGroupHeight})`);\n\n bbox = shapeSvg.node()!.getBBox();\n\n membersGroup.attr(\n 'transform',\n `translate(${0}, ${annotationGroupHeight + labelGroupHeight + GAP * 2})`\n );\n bbox = shapeSvg.node()!.getBBox();\n methodsGroup.attr(\n 'transform',\n `translate(${0}, ${annotationGroupHeight + labelGroupHeight + (membersGroupHeight ? membersGroupHeight + GAP * 4 : GAP * 2)})`\n );\n\n bbox = shapeSvg.node()!.getBBox();\n\n return { shapeSvg, bbox };\n}\n\n// Modified version of labelHelper() to help create and place text for classes\nasync function addText(\n parentGroup: D3Selection,\n node: Node | ClassNode | ClassMember,\n yOffset: number,\n styles: string[] = []\n) {\n const textEl = parentGroup.insert('g').attr('class', 'label').attr('style', styles.join('; '));\n const config = getConfig();\n let useHtmlLabels =\n 'useHtmlLabels' in node ? node.useHtmlLabels : (evaluate(config.htmlLabels) ?? true);\n\n let textContent = '';\n // Support regular node type (.label) and classNodes (.text)\n if ('text' in node) {\n textContent = node.text;\n } else {\n textContent = node.label!;\n }\n\n // createText() will cause unwanted behavior because of classDiagram syntax so workarounds are needed\n\n if (!useHtmlLabels && textContent.startsWith('\\\\')) {\n textContent = textContent.substring(1);\n }\n\n if (hasKatex(textContent)) {\n useHtmlLabels = true;\n }\n\n const text = await createText(\n textEl,\n sanitizeText(decodeEntities(textContent)),\n {\n width: calculateTextWidth(textContent, config) + 50, // Add room for error when splitting text into multiple lines\n classes: 'markdown-node-label',\n useHtmlLabels,\n },\n config\n );\n let bbox;\n let numberOfLines = 1;\n\n if (!useHtmlLabels) {\n // Undo font-weight normal\n if (styles.includes('font-weight: bolder')) {\n select(text).selectAll('tspan').attr('font-weight', '');\n }\n\n numberOfLines = text.children.length;\n\n const textChild = text.children[0];\n if (text.textContent === '' || text.textContent.includes('>')) {\n textChild.textContent =\n textContent[0] +\n textContent.substring(1).replaceAll('>', '>').replaceAll('<', '<').trim();\n\n // Text was improperly removed due to spaces (preserve one space if present)\n const preserveSpace = textContent[1] === ' ';\n if (preserveSpace) {\n textChild.textContent = textChild.textContent[0] + ' ' + textChild.textContent.substring(1);\n }\n }\n\n // To support empty boxes\n if (textChild.textContent === 'undefined') {\n textChild.textContent = '';\n }\n\n // Get the bounding box after the text update\n bbox = text.getBBox();\n } else {\n const div = text.children[0];\n const dv = select(text);\n\n numberOfLines = div.innerHTML.split('
    ').length;\n // Katex math support\n if (div.innerHTML.includes('')) {\n numberOfLines += div.innerHTML.split('').length - 1;\n }\n\n // Support images\n const images = div.getElementsByTagName('img');\n if (images) {\n const noImgText = textContent.replace(/]*>/g, '').trim() === '';\n await Promise.all(\n [...images].map(\n (img) =>\n new Promise((res) => {\n function setupImage() {\n img.style.display = 'flex';\n img.style.flexDirection = 'column';\n\n if (noImgText) {\n // default size if no text\n const bodyFontSize =\n config.fontSize?.toString() ?? window.getComputedStyle(document.body).fontSize;\n const enlargingFactor = 5;\n const width = parseInt(bodyFontSize, 10) * enlargingFactor + 'px';\n img.style.minWidth = width;\n img.style.maxWidth = width;\n } else {\n img.style.width = '100%';\n }\n res(img);\n }\n setTimeout(() => {\n if (img.complete) {\n setupImage();\n }\n });\n img.addEventListener('error', setupImage);\n img.addEventListener('load', setupImage);\n })\n )\n );\n }\n\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n\n // Center text and offset by yOffset\n textEl.attr('transform', 'translate(0,' + (-bbox.height / (2 * numberOfLines) + yOffset) + ')');\n return bbox.height;\n}\n", "import { updateNodeBounds } from './util.js';\nimport { getConfig } from '../../../diagram-api/diagramAPI.js';\nimport { select } from 'd3';\nimport type { Node } from '../../types.js';\nimport type { ClassNode } from '../../../diagrams/class/classTypes.js';\nimport rough from 'roughjs';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport intersect from '../intersect/index.js';\nimport { textHelper } from '../../../diagrams/class/shapeUtil.js';\nimport { evaluate } from '../../../diagrams/common/common.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function classBox(parent: D3Selection, node: Node) {\n const config = getConfig();\n const PADDING = config.class!.padding ?? 12;\n const GAP = PADDING;\n const useHtmlLabels = node.useHtmlLabels ?? evaluate(config.htmlLabels) ?? true;\n // Treat node as classNode\n const classNode = node as unknown as ClassNode;\n classNode.annotations = classNode.annotations ?? [];\n classNode.members = classNode.members ?? [];\n classNode.methods = classNode.methods ?? [];\n\n const { shapeSvg, bbox } = await textHelper(parent, node, config, useHtmlLabels, GAP);\n\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n\n node.cssStyles = classNode.styles || '';\n\n const styles = classNode.styles?.join(';') || nodeStyles || '';\n\n if (!node.cssStyles) {\n node.cssStyles = styles.replaceAll('!important', '').split(';');\n }\n\n const renderExtraBox =\n classNode.members.length === 0 &&\n classNode.methods.length === 0 &&\n !config.class?.hideEmptyMembersBox;\n\n // Setup roughjs\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n const w = bbox.width;\n let h = bbox.height;\n if (classNode.members.length === 0 && classNode.methods.length === 0) {\n h += GAP;\n } else if (classNode.members.length > 0 && classNode.methods.length === 0) {\n h += GAP * 2;\n }\n const x = -w / 2;\n const y = -h / 2;\n\n // Create and center rectangle\n const roughRect = rc.rectangle(\n x - PADDING,\n y -\n PADDING -\n (renderExtraBox\n ? PADDING\n : classNode.members.length === 0 && classNode.methods.length === 0\n ? -PADDING / 2\n : 0),\n w + 2 * PADDING,\n h +\n 2 * PADDING +\n (renderExtraBox\n ? PADDING * 2\n : classNode.members.length === 0 && classNode.methods.length === 0\n ? -PADDING\n : 0),\n options\n );\n\n const rect = shapeSvg.insert(() => roughRect, ':first-child');\n rect.attr('class', 'basic label-container');\n const rectBBox = rect.node()!.getBBox();\n\n // Rect is centered so now adjust labels.\n // TODO: Fix types\n shapeSvg.selectAll('.text').each((_: any, i: number, nodes: any) => {\n const text = select(nodes[i]);\n // Get the current transform attribute\n const transform = text.attr('transform');\n // Initialize variables for the translation values\n let translateY = 0;\n // Check if the transform attribute exists\n if (transform) {\n const regex = RegExp(/translate\\(([^,]+),([^)]+)\\)/);\n const translate = regex.exec(transform);\n if (translate) {\n translateY = parseFloat(translate[2]);\n }\n }\n // Add to the y value\n let newTranslateY =\n translateY +\n y +\n PADDING -\n (renderExtraBox\n ? PADDING\n : classNode.members.length === 0 && classNode.methods.length === 0\n ? -PADDING / 2\n : 0);\n if (!useHtmlLabels) {\n // Fix so non html labels are better centered.\n // BBox of text seems to be slightly different when calculated so we offset\n newTranslateY -= 4;\n }\n let newTranslateX = x;\n if (\n text.attr('class').includes('label-group') ||\n text.attr('class').includes('annotation-group')\n ) {\n newTranslateX = -text.node()?.getBBox().width / 2 || 0;\n shapeSvg.selectAll('text').each(function (_: any, i: number, nodes: any) {\n if (window.getComputedStyle(nodes[i]).textAnchor === 'middle') {\n newTranslateX = 0;\n }\n });\n }\n // Set the updated transform attribute\n text.attr('transform', `translate(${newTranslateX}, ${newTranslateY})`);\n });\n\n // Render divider lines.\n const annotationGroupHeight =\n (shapeSvg.select('.annotation-group').node() as SVGGraphicsElement).getBBox().height -\n (renderExtraBox ? PADDING / 2 : 0) || 0;\n const labelGroupHeight =\n (shapeSvg.select('.label-group').node() as SVGGraphicsElement).getBBox().height -\n (renderExtraBox ? PADDING / 2 : 0) || 0;\n const membersGroupHeight =\n (shapeSvg.select('.members-group').node() as SVGGraphicsElement).getBBox().height -\n (renderExtraBox ? PADDING / 2 : 0) || 0;\n // First line (under label)\n if (classNode.members.length > 0 || classNode.methods.length > 0 || renderExtraBox) {\n const roughLine = rc.line(\n rectBBox.x,\n annotationGroupHeight + labelGroupHeight + y + PADDING,\n rectBBox.x + rectBBox.width,\n annotationGroupHeight + labelGroupHeight + y + PADDING,\n options\n );\n const line = shapeSvg.insert(() => roughLine);\n line.attr('class', 'divider').attr('style', styles);\n }\n\n // Second line (under members)\n if (renderExtraBox || classNode.members.length > 0 || classNode.methods.length > 0) {\n const roughLine = rc.line(\n rectBBox.x,\n annotationGroupHeight + labelGroupHeight + membersGroupHeight + y + GAP * 2 + PADDING,\n rectBBox.x + rectBBox.width,\n annotationGroupHeight + labelGroupHeight + membersGroupHeight + y + PADDING + GAP * 2,\n options\n );\n const line = shapeSvg.insert(() => roughLine);\n line.attr('class', 'divider').attr('style', styles);\n }\n\n /// Apply styles ///\n if (classNode.look !== 'handDrawn') {\n shapeSvg.selectAll('path').attr('style', styles);\n }\n // Apply other styles like stroke-width and stroke-dasharray to border (not background of shape)\n rect.select(':nth-child(2)').attr('style', styles);\n // Divider lines\n shapeSvg.selectAll('.divider').select('path').attr('style', styles);\n // Text elements\n if (node.labelStyle) {\n shapeSvg.selectAll('span').attr('style', node.labelStyle);\n } else {\n shapeSvg.selectAll('span').attr('style', styles);\n }\n // SVG text uses fill not color\n if (!useHtmlLabels) {\n // We just want to apply color to the text\n const colorRegex = RegExp(/color\\s*:\\s*([^;]*)/);\n const match = colorRegex.exec(styles);\n if (match) {\n const colorStyle = match[0].replace('color', 'fill');\n shapeSvg.selectAll('tspan').attr('style', colorStyle);\n } else if (labelStyles) {\n const match = colorRegex.exec(labelStyles);\n if (match) {\n const colorStyle = match[0].replace('color', 'fill');\n shapeSvg.selectAll('tspan').attr('style', colorStyle);\n }\n }\n }\n\n updateNodeBounds(node, rect);\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n}\n", "import { getNodeClasses, updateNodeBounds } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\nimport { calculateTextWidth, decodeEntities } from '../../../utils.js';\nimport { getConfig, sanitizeText } from '../../../diagram-api/diagramAPI.js';\nimport { createText } from '../../createText.js';\nimport { select } from 'd3';\nimport type { Requirement, Element } from '../../../diagrams/requirement/types.js';\n\nexport async function requirementBox(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const requirementNode = node as unknown as Requirement;\n const elementNode = node as unknown as Element;\n const padding = 20;\n const gap = 20;\n const isRequirementNode = 'verifyMethod' in node;\n const classes = getNodeClasses(node);\n\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', classes)\n .attr('id', node.domId ?? node.id);\n\n let typeHeight;\n if (isRequirementNode) {\n typeHeight = await addText(\n shapeSvg,\n `<<${requirementNode.type}>>`,\n 0,\n node.labelStyle\n );\n } else {\n typeHeight = await addText(shapeSvg, '<<Element>>', 0, node.labelStyle);\n }\n\n let accumulativeHeight = typeHeight;\n const nameHeight = await addText(\n shapeSvg,\n requirementNode.name,\n accumulativeHeight,\n node.labelStyle + '; font-weight: bold;'\n );\n accumulativeHeight += nameHeight + gap;\n\n // Requirement\n if (isRequirementNode) {\n const idHeight = await addText(\n shapeSvg,\n `${requirementNode.requirementId ? `ID: ${requirementNode.requirementId}` : ''}`,\n accumulativeHeight,\n node.labelStyle\n );\n\n accumulativeHeight += idHeight;\n const textHeight = await addText(\n shapeSvg,\n `${requirementNode.text ? `Text: ${requirementNode.text}` : ''}`,\n accumulativeHeight,\n node.labelStyle\n );\n accumulativeHeight += textHeight;\n const riskHeight = await addText(\n shapeSvg,\n `${requirementNode.risk ? `Risk: ${requirementNode.risk}` : ''}`,\n accumulativeHeight,\n node.labelStyle\n );\n accumulativeHeight += riskHeight;\n await addText(\n shapeSvg,\n `${requirementNode.verifyMethod ? `Verification: ${requirementNode.verifyMethod}` : ''}`,\n accumulativeHeight,\n node.labelStyle\n );\n } else {\n // Element\n const typeHeight = await addText(\n shapeSvg,\n `${elementNode.type ? `Type: ${elementNode.type}` : ''}`,\n accumulativeHeight,\n node.labelStyle\n );\n accumulativeHeight += typeHeight;\n await addText(\n shapeSvg,\n `${elementNode.docRef ? `Doc Ref: ${elementNode.docRef}` : ''}`,\n accumulativeHeight,\n node.labelStyle\n );\n }\n\n const totalWidth = (shapeSvg.node()?.getBBox().width ?? 200) + padding;\n const totalHeight = (shapeSvg.node()?.getBBox().height ?? 200) + padding;\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n\n // Setup roughjs\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n\n if (node.look !== 'handDrawn') {\n options.roughness = 0;\n options.fillStyle = 'solid';\n }\n\n // Create and center rectangle\n const roughRect = rc.rectangle(x, y, totalWidth, totalHeight, options);\n\n const rect = shapeSvg.insert(() => roughRect, ':first-child');\n rect.attr('class', 'basic label-container').attr('style', nodeStyles);\n\n // Re-translate labels now that rect is centered\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n shapeSvg.selectAll('.label').each((_: any, i: number, nodes: any) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const text = select(nodes[i]);\n\n const transform = text.attr('transform');\n let translateX = 0;\n let translateY = 0;\n if (transform) {\n const regex = RegExp(/translate\\(([^,]+),([^)]+)\\)/);\n const translate = regex.exec(transform);\n if (translate) {\n translateX = parseFloat(translate[1]);\n translateY = parseFloat(translate[2]);\n }\n }\n\n const newTranslateY = translateY - totalHeight / 2;\n let newTranslateX = x + padding / 2;\n\n // Keep type and name labels centered.\n if (i === 0 || i === 1) {\n newTranslateX = translateX;\n }\n // Set the updated transform attribute\n text.attr('transform', `translate(${newTranslateX}, ${newTranslateY + padding})`);\n });\n\n // Insert divider line if there is body text\n if (accumulativeHeight > typeHeight + nameHeight + gap) {\n const roughLine = rc.line(\n x,\n y + typeHeight + nameHeight + gap,\n x + totalWidth,\n y + typeHeight + nameHeight + gap,\n options\n );\n const dividerLine = shapeSvg.insert(() => roughLine);\n dividerLine.attr('style', nodeStyles);\n }\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n}\n\nasync function addText(\n parentGroup: D3Selection,\n inputText: string,\n yOffset: number,\n style = ''\n) {\n if (inputText === '') {\n return 0;\n }\n const textEl = parentGroup.insert('g').attr('class', 'label').attr('style', style);\n const config = getConfig();\n const useHtmlLabels = config.htmlLabels ?? true;\n\n const text = await createText(\n textEl,\n sanitizeText(decodeEntities(inputText)),\n {\n width: calculateTextWidth(inputText, config) + 50, // Add room for error when splitting text into multiple lines\n classes: 'markdown-node-label',\n useHtmlLabels,\n style,\n },\n config\n );\n let bbox;\n\n if (!useHtmlLabels) {\n const textChild = text.children[0];\n for (const child of textChild.children) {\n child.textContent = child.textContent.replaceAll('>', '>').replaceAll('<', '<');\n if (style) {\n child.setAttribute('style', style);\n }\n }\n // Get the bounding box after the text update\n bbox = text.getBBox();\n // Add extra height so it is similar to the html labels\n bbox.height += 6;\n } else {\n const div = text.children[0];\n const dv = select(text);\n\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n\n // Center text and offset by yOffset\n textEl.attr('transform', `translate(${-bbox.width / 2},${-bbox.height / 2 + yOffset})`);\n return bbox.height;\n}\n", "import { labelHelper, insertLabel, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node, KanbanNode, ShapeRenderOptions } from '../../types.js';\nimport { createRoundedRectPathD } from './roundedRectPath.js';\nimport { userNodeOverrides, styles2String } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\n\nconst colorFromPriority = (priority: NonNullable) => {\n switch (priority) {\n case 'Very High':\n return 'red';\n case 'High':\n return 'orange';\n case 'Medium':\n return null; // no stroke\n case 'Low':\n return 'blue';\n case 'Very Low':\n return 'lightblue';\n }\n};\nexport async function kanbanItem(\n parent: D3Selection,\n // Omit the 'shape' prop since otherwise, it causes a TypeScript circular dependency error\n kanbanNode: Omit | Omit,\n { config }: ShapeRenderOptions\n) {\n const { labelStyles, nodeStyles } = styles2String(kanbanNode);\n kanbanNode.labelStyle = labelStyles || '';\n\n const labelPaddingX = 10;\n const orgWidth = kanbanNode.width;\n kanbanNode.width = (kanbanNode.width ?? 200) - 10;\n\n const {\n shapeSvg,\n bbox,\n label: labelElTitle,\n } = await labelHelper(parent, kanbanNode, getNodeClasses(kanbanNode));\n const padding = kanbanNode.padding || 10;\n\n let ticketUrl = '';\n let link;\n\n if ('ticket' in kanbanNode && kanbanNode.ticket && config?.kanban?.ticketBaseUrl) {\n ticketUrl = config?.kanban?.ticketBaseUrl.replace('#TICKET#', kanbanNode.ticket);\n link = shapeSvg\n .insert('svg:a', ':first-child')\n .attr('class', 'kanban-ticket-link')\n .attr('xlink:href', ticketUrl)\n .attr('target', '_blank');\n }\n\n const options = {\n useHtmlLabels: kanbanNode.useHtmlLabels,\n labelStyle: kanbanNode.labelStyle || '',\n width: kanbanNode.width,\n img: kanbanNode.img,\n padding: kanbanNode.padding || 8,\n centerLabel: false,\n };\n let labelEl, bbox2;\n if (link) {\n ({ label: labelEl, bbox: bbox2 } = await insertLabel(\n link,\n ('ticket' in kanbanNode && kanbanNode.ticket) || '',\n options\n ));\n } else {\n ({ label: labelEl, bbox: bbox2 } = await insertLabel(\n shapeSvg,\n ('ticket' in kanbanNode && kanbanNode.ticket) || '',\n options\n ));\n }\n const { label: labelElAssigned, bbox: bboxAssigned } = await insertLabel(\n shapeSvg,\n ('assigned' in kanbanNode && kanbanNode.assigned) || '',\n options\n );\n kanbanNode.width = orgWidth;\n const labelPaddingY = 10;\n const totalWidth = kanbanNode?.width || 0;\n const heightAdj = Math.max(bbox2.height, bboxAssigned.height) / 2;\n const totalHeight =\n Math.max(bbox.height + labelPaddingY * 2, kanbanNode?.height || 0) + heightAdj;\n const x = -totalWidth / 2;\n const y = -totalHeight / 2;\n labelElTitle.attr(\n 'transform',\n 'translate(' + (padding - totalWidth / 2) + ', ' + (-heightAdj - bbox.height / 2) + ')'\n );\n labelEl.attr(\n 'transform',\n 'translate(' + (padding - totalWidth / 2) + ', ' + (-heightAdj + bbox.height / 2) + ')'\n );\n labelElAssigned.attr(\n 'transform',\n 'translate(' +\n (padding + totalWidth / 2 - bboxAssigned.width - 2 * labelPaddingX) +\n ', ' +\n (-heightAdj + bbox.height / 2) +\n ')'\n );\n\n let rect;\n\n const { rx, ry } = kanbanNode;\n const { cssStyles } = kanbanNode;\n\n if (kanbanNode.look === 'handDrawn') {\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(kanbanNode, {});\n\n const roughNode =\n rx || ry\n ? rc.path(createRoundedRectPathD(x, y, totalWidth, totalHeight, rx || 0), options)\n : rc.rectangle(x, y, totalWidth, totalHeight, options);\n\n rect = shapeSvg.insert(() => roughNode, ':first-child');\n rect.attr('class', 'basic label-container').attr('style', cssStyles ? cssStyles : null);\n } else {\n rect = shapeSvg.insert('rect', ':first-child');\n\n rect\n .attr('class', 'basic label-container __APA__')\n .attr('style', nodeStyles)\n .attr('rx', rx ?? 5)\n .attr('ry', ry ?? 5)\n .attr('x', x)\n .attr('y', y)\n .attr('width', totalWidth)\n .attr('height', totalHeight);\n\n const priority = 'priority' in kanbanNode && kanbanNode.priority;\n if (priority) {\n const line = shapeSvg.append('line');\n const lineX = x + 2;\n\n const y1 = y + Math.floor((rx ?? 0) / 2);\n const y2 = y + totalHeight - Math.floor((rx ?? 0) / 2);\n line\n .attr('x1', lineX)\n .attr('y1', y1)\n .attr('x2', lineX)\n .attr('y2', y2)\n\n .attr('stroke-width', '4')\n .attr('stroke', colorFromPriority(priority));\n }\n }\n\n updateNodeBounds(kanbanNode, rect);\n kanbanNode.height = totalHeight;\n\n kanbanNode.intersect = function (point) {\n return intersect.rect(kanbanNode, point);\n };\n\n return shapeSvg;\n}\n", "import { log } from '../../../logger.js';\nimport { labelHelper, updateNodeBounds, getNodeClasses } from './util.js';\nimport intersect from '../intersect/index.js';\nimport type { Node } from '../../types.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport rough from 'roughjs';\nimport type { D3Selection } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\nimport type { Bounds, Point } from '../../../types.js';\n\nexport async function bang(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n getNodeClasses(node)\n );\n\n const w = bbox.width + 10 * halfPadding;\n const h = bbox.height + 8 * halfPadding;\n const r = 0.15 * w;\n const { cssStyles } = node;\n\n const minWidth = bbox.width + 20;\n const minHeight = bbox.height + 20;\n const effectiveWidth = Math.max(w, minWidth);\n const effectiveHeight = Math.max(h, minHeight);\n\n label.attr('transform', `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);\n\n let bangElem;\n const path = `M0 0 \n a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${-1 * effectiveHeight * 0.1}\n a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${0}\n a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${0}\n a${r},${r} 1 0,0 ${effectiveWidth * 0.25},${effectiveHeight * 0.1}\n\n a${r},${r} 1 0,0 ${effectiveWidth * 0.15},${effectiveHeight * 0.33}\n a${r * 0.8},${r * 0.8} 1 0,0 0,${effectiveHeight * 0.34}\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.15},${effectiveHeight * 0.33}\n\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},${effectiveHeight * 0.15}\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},0\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},0\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.25},${-1 * effectiveHeight * 0.15}\n\n a${r},${r} 1 0,0 ${-1 * effectiveWidth * 0.1},${-1 * effectiveHeight * 0.33}\n a${r * 0.8},${r * 0.8} 1 0,0 0,${-1 * effectiveHeight * 0.34}\n a${r},${r} 1 0,0 ${effectiveWidth * 0.1},${-1 * effectiveHeight * 0.33}\n H0 V0 Z`;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.path(path, options);\n bangElem = shapeSvg.insert(() => roughNode, ':first-child');\n bangElem.attr('class', 'basic label-container').attr('style', handleUndefinedAttr(cssStyles));\n } else {\n bangElem = shapeSvg\n .insert('path', ':first-child')\n .attr('class', 'basic label-container')\n .attr('style', nodeStyles)\n .attr('d', path);\n }\n\n // Translate the path (center the shape)\n bangElem.attr('transform', `translate(${-effectiveWidth / 2}, ${-effectiveHeight / 2})`);\n\n updateNodeBounds(node, bangElem);\n node.calcIntersect = function (bounds: Bounds, point: Point) {\n return intersect.rect(bounds, point);\n };\n node.intersect = function (point) {\n log.info('Bang intersect', node, point);\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n}\n", "import rough from 'roughjs';\nimport { log } from '../../../logger.js';\nimport type { Bounds, D3Selection, Point } from '../../../types.js';\nimport { handleUndefinedAttr } from '../../../utils.js';\nimport type { Node } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String, userNodeOverrides } from './handDrawnShapeStyles.js';\nimport { getNodeClasses, labelHelper, updateNodeBounds } from './util.js';\n\nexport async function cloud(parent: D3Selection, node: Node) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n getNodeClasses(node)\n );\n\n const w = bbox.width + 2 * halfPadding;\n const h = bbox.height + 2 * halfPadding;\n\n // Cloud radii\n const r1 = 0.15 * w;\n const r2 = 0.25 * w;\n const r3 = 0.35 * w;\n const r4 = 0.2 * w;\n\n const { cssStyles } = node;\n let cloudElem;\n\n // Cloud path\n const path = `M0 0 \n a${r1},${r1} 0 0,1 ${w * 0.25},${-1 * w * 0.1}\n a${r3},${r3} 1 0,1 ${w * 0.4},${-1 * w * 0.1}\n a${r2},${r2} 1 0,1 ${w * 0.35},${w * 0.2}\n\n a${r1},${r1} 1 0,1 ${w * 0.15},${h * 0.35}\n a${r4},${r4} 1 0,1 ${-1 * w * 0.15},${h * 0.65}\n\n a${r2},${r1} 1 0,1 ${-1 * w * 0.25},${w * 0.15}\n a${r3},${r3} 1 0,1 ${-1 * w * 0.5},0\n a${r1},${r1} 1 0,1 ${-1 * w * 0.25},${-1 * w * 0.15}\n\n a${r1},${r1} 1 0,1 ${-1 * w * 0.1},${-1 * h * 0.35}\n a${r4},${r4} 1 0,1 ${w * 0.1},${-1 * h * 0.65}\n H0 V0 Z`;\n\n if (node.look === 'handDrawn') {\n // @ts-expect-error -- Passing a D3.Selection seems to work for some reason\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {});\n const roughNode = rc.path(path, options);\n cloudElem = shapeSvg.insert(() => roughNode, ':first-child');\n cloudElem.attr('class', 'basic label-container').attr('style', handleUndefinedAttr(cssStyles));\n } else {\n cloudElem = shapeSvg\n .insert('path', ':first-child')\n .attr('class', 'basic label-container')\n .attr('style', nodeStyles)\n .attr('d', path);\n }\n\n label.attr('transform', `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);\n\n // Center the shape\n cloudElem.attr('transform', `translate(${-w / 2}, ${-h / 2})`);\n\n updateNodeBounds(node, cloudElem);\n\n node.calcIntersect = function (bounds: Bounds, point: Point) {\n return intersect.rect(bounds, point);\n };\n node.intersect = function (point) {\n log.info('Cloud intersect', node, point);\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n}\n", "import type { Bounds, D3Selection, Point } from '../../../types.js';\nimport type { Node } from '../../types.js';\nimport intersect from '../intersect/index.js';\nimport { styles2String } from './handDrawnShapeStyles.js';\nimport { getNodeClasses, labelHelper, updateNodeBounds } from './util.js';\n\nexport async function defaultMindmapNode(\n parent: D3Selection,\n node: Node\n) {\n const { labelStyles, nodeStyles } = styles2String(node);\n node.labelStyle = labelStyles;\n\n const { shapeSvg, bbox, halfPadding, label } = await labelHelper(\n parent,\n node,\n getNodeClasses(node)\n );\n\n const w = bbox.width + 8 * halfPadding;\n const h = bbox.height + 2 * halfPadding;\n const rd = 5;\n\n const rectPath = `\n M${-w / 2} ${h / 2 - rd}\n v${-h + 2 * rd}\n q0,-${rd} ${rd},-${rd}\n h${w - 2 * rd}\n q${rd},0 ${rd},${rd}\n v${h - 2 * rd}\n q0,${rd} -${rd},${rd}\n h${-w + 2 * rd}\n q-${rd},0 -${rd},-${rd}\n Z\n `;\n\n const bg = shapeSvg\n .append('path')\n .attr('id', 'node-' + node.id)\n .attr('class', 'node-bkg node-' + node.type)\n .attr('style', nodeStyles)\n .attr('d', rectPath);\n\n shapeSvg\n .append('line')\n .attr('class', 'node-line-')\n .attr('x1', -w / 2)\n .attr('y1', h / 2)\n .attr('x2', w / 2)\n .attr('y2', h / 2);\n\n label.attr('transform', `translate(${-bbox.width / 2}, ${-bbox.height / 2})`);\n shapeSvg.append(() => label.node());\n\n updateNodeBounds(node, bg);\n node.calcIntersect = function (bounds: Bounds, point: Point) {\n return intersect.rect(bounds, point);\n };\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n}\n", "import { circle } from './circle.js';\nimport type { Node, MindmapOptions } from '../../types.js';\nimport type { D3Selection } from '../../../types.js';\n\nexport async function mindmapCircle(\n parent: D3Selection,\n node: Node\n) {\n const options = {\n padding: node.padding ?? 0,\n } as MindmapOptions;\n return circle(parent, node, options);\n}\n", "import type { Entries } from 'type-fest';\nimport type { D3Selection, MaybePromise } from '../../types.js';\nimport type { Node, ShapeRenderOptions } from '../types.js';\nimport { anchor } from './shapes/anchor.js';\nimport { bowTieRect } from './shapes/bowTieRect.js';\nimport { card } from './shapes/card.js';\nimport { choice } from './shapes/choice.js';\nimport { circle } from './shapes/circle.js';\nimport { crossedCircle } from './shapes/crossedCircle.js';\nimport { curlyBraceLeft } from './shapes/curlyBraceLeft.js';\nimport { curlyBraceRight } from './shapes/curlyBraceRight.js';\nimport { curlyBraces } from './shapes/curlyBraces.js';\nimport { curvedTrapezoid } from './shapes/curvedTrapezoid.js';\nimport { cylinder } from './shapes/cylinder.js';\nimport { dividedRectangle } from './shapes/dividedRect.js';\nimport { doublecircle } from './shapes/doubleCircle.js';\nimport { filledCircle } from './shapes/filledCircle.js';\nimport { flippedTriangle } from './shapes/flippedTriangle.js';\nimport { forkJoin } from './shapes/forkJoin.js';\nimport { halfRoundedRectangle } from './shapes/halfRoundedRectangle.js';\nimport { hexagon } from './shapes/hexagon.js';\nimport { hourglass } from './shapes/hourglass.js';\nimport { icon } from './shapes/icon.js';\nimport { iconCircle } from './shapes/iconCircle.js';\nimport { iconRounded } from './shapes/iconRounded.js';\nimport { iconSquare } from './shapes/iconSquare.js';\nimport { imageSquare } from './shapes/imageSquare.js';\nimport { inv_trapezoid } from './shapes/invertedTrapezoid.js';\nimport { labelRect } from './shapes/labelRect.js';\nimport { lean_left } from './shapes/leanLeft.js';\nimport { lean_right } from './shapes/leanRight.js';\nimport { lightningBolt } from './shapes/lightningBolt.js';\nimport { linedCylinder } from './shapes/linedCylinder.js';\nimport { linedWaveEdgedRect } from './shapes/linedWaveEdgedRect.js';\nimport { multiRect } from './shapes/multiRect.js';\nimport { multiWaveEdgedRectangle } from './shapes/multiWaveEdgedRectangle.js';\nimport { note } from './shapes/note.js';\nimport { question } from './shapes/question.js';\nimport { rect_left_inv_arrow } from './shapes/rectLeftInvArrow.js';\nimport { rectWithTitle } from './shapes/rectWithTitle.js';\nimport { roundedRect } from './shapes/roundedRect.js';\nimport { shadedProcess } from './shapes/shadedProcess.js';\nimport { slopedRect } from './shapes/slopedRect.js';\nimport { squareRect } from './shapes/squareRect.js';\nimport { stadium } from './shapes/stadium.js';\nimport { state } from './shapes/state.js';\nimport { stateEnd } from './shapes/stateEnd.js';\nimport { stateStart } from './shapes/stateStart.js';\nimport { subroutine } from './shapes/subroutine.js';\nimport { taggedRect } from './shapes/taggedRect.js';\nimport { taggedWaveEdgedRectangle } from './shapes/taggedWaveEdgedRectangle.js';\nimport { text } from './shapes/text.js';\nimport { tiltedCylinder } from './shapes/tiltedCylinder.js';\nimport { trapezoid } from './shapes/trapezoid.js';\nimport { trapezoidalPentagon } from './shapes/trapezoidalPentagon.js';\nimport { triangle } from './shapes/triangle.js';\nimport { waveEdgedRectangle } from './shapes/waveEdgedRectangle.js';\nimport { waveRectangle } from './shapes/waveRectangle.js';\nimport { windowPane } from './shapes/windowPane.js';\nimport { erBox } from './shapes/erBox.js';\nimport { classBox } from './shapes/classBox.js';\nimport { requirementBox } from './shapes/requirementBox.js';\nimport { kanbanItem } from './shapes/kanbanItem.js';\nimport { bang } from './shapes/bang.js';\nimport { cloud } from './shapes/cloud.js';\nimport { defaultMindmapNode } from './shapes/defaultMindmapNode.js';\nimport { mindmapCircle } from './shapes/mindmapCircle.js';\n\ntype ShapeHandler = (\n parent: D3Selection,\n node: Node,\n options: ShapeRenderOptions\n) => MaybePromise>;\n\nexport interface ShapeDefinition {\n semanticName: string;\n name: string;\n shortName: string;\n description: string;\n /**\n * Aliases can include descriptive names, other short names, etc.\n */\n aliases?: string[];\n /**\n * These are names used by mermaid before the introduction of new shapes. These will not be in standard formats, and shouldn't be used by the users\n */\n internalAliases?: string[];\n handler: ShapeHandler;\n}\n\nexport const shapesDefs = [\n {\n semanticName: 'Process',\n name: 'Rectangle',\n shortName: 'rect',\n description: 'Standard process shape',\n aliases: ['proc', 'process', 'rectangle'],\n internalAliases: ['squareRect'],\n handler: squareRect,\n },\n {\n semanticName: 'Event',\n name: 'Rounded Rectangle',\n shortName: 'rounded',\n description: 'Represents an event',\n aliases: ['event'],\n internalAliases: ['roundedRect'],\n handler: roundedRect,\n },\n {\n semanticName: 'Terminal Point',\n name: 'Stadium',\n shortName: 'stadium',\n description: 'Terminal point',\n aliases: ['terminal', 'pill'],\n handler: stadium,\n },\n {\n semanticName: 'Subprocess',\n name: 'Framed Rectangle',\n shortName: 'fr-rect',\n description: 'Subprocess',\n aliases: ['subprocess', 'subproc', 'framed-rectangle', 'subroutine'],\n handler: subroutine,\n },\n {\n semanticName: 'Database',\n name: 'Cylinder',\n shortName: 'cyl',\n description: 'Database storage',\n aliases: ['db', 'database', 'cylinder'],\n handler: cylinder,\n },\n {\n semanticName: 'Start',\n name: 'Circle',\n shortName: 'circle',\n description: 'Starting point',\n aliases: ['circ'],\n handler: circle,\n },\n {\n semanticName: 'Bang',\n name: 'Bang',\n shortName: 'bang',\n description: 'Bang',\n aliases: ['bang'],\n handler: bang,\n },\n {\n semanticName: 'Cloud',\n name: 'Cloud',\n shortName: 'cloud',\n description: 'cloud',\n aliases: ['cloud'],\n handler: cloud,\n },\n {\n semanticName: 'Decision',\n name: 'Diamond',\n shortName: 'diam',\n description: 'Decision-making step',\n aliases: ['decision', 'diamond', 'question'],\n handler: question,\n },\n {\n semanticName: 'Prepare Conditional',\n name: 'Hexagon',\n shortName: 'hex',\n description: 'Preparation or condition step',\n aliases: ['hexagon', 'prepare'],\n handler: hexagon,\n },\n {\n semanticName: 'Data Input/Output',\n name: 'Lean Right',\n shortName: 'lean-r',\n description: 'Represents input or output',\n aliases: ['lean-right', 'in-out'],\n internalAliases: ['lean_right'],\n handler: lean_right,\n },\n {\n semanticName: 'Data Input/Output',\n name: 'Lean Left',\n shortName: 'lean-l',\n description: 'Represents output or input',\n aliases: ['lean-left', 'out-in'],\n internalAliases: ['lean_left'],\n handler: lean_left,\n },\n {\n semanticName: 'Priority Action',\n name: 'Trapezoid Base Bottom',\n shortName: 'trap-b',\n description: 'Priority action',\n aliases: ['priority', 'trapezoid-bottom', 'trapezoid'],\n handler: trapezoid,\n },\n {\n semanticName: 'Manual Operation',\n name: 'Trapezoid Base Top',\n shortName: 'trap-t',\n description: 'Represents a manual task',\n aliases: ['manual', 'trapezoid-top', 'inv-trapezoid'],\n internalAliases: ['inv_trapezoid'],\n handler: inv_trapezoid,\n },\n {\n semanticName: 'Stop',\n name: 'Double Circle',\n shortName: 'dbl-circ',\n description: 'Represents a stop point',\n aliases: ['double-circle'],\n internalAliases: ['doublecircle'],\n handler: doublecircle,\n },\n {\n semanticName: 'Text Block',\n name: 'Text Block',\n shortName: 'text',\n description: 'Text block',\n handler: text,\n },\n {\n semanticName: 'Card',\n name: 'Notched Rectangle',\n shortName: 'notch-rect',\n description: 'Represents a card',\n aliases: ['card', 'notched-rectangle'],\n handler: card,\n },\n {\n semanticName: 'Lined/Shaded Process',\n name: 'Lined Rectangle',\n shortName: 'lin-rect',\n description: 'Lined process shape',\n aliases: ['lined-rectangle', 'lined-process', 'lin-proc', 'shaded-process'],\n handler: shadedProcess,\n },\n {\n semanticName: 'Start',\n name: 'Small Circle',\n shortName: 'sm-circ',\n description: 'Small starting point',\n aliases: ['start', 'small-circle'],\n internalAliases: ['stateStart'],\n handler: stateStart,\n },\n {\n semanticName: 'Stop',\n name: 'Framed Circle',\n shortName: 'fr-circ',\n description: 'Stop point',\n aliases: ['stop', 'framed-circle'],\n internalAliases: ['stateEnd'],\n handler: stateEnd,\n },\n {\n semanticName: 'Fork/Join',\n name: 'Filled Rectangle',\n shortName: 'fork',\n description: 'Fork or join in process flow',\n aliases: ['join'],\n internalAliases: ['forkJoin'],\n handler: forkJoin,\n },\n {\n semanticName: 'Collate',\n name: 'Hourglass',\n shortName: 'hourglass',\n description: 'Represents a collate operation',\n aliases: ['hourglass', 'collate'],\n handler: hourglass,\n },\n {\n semanticName: 'Comment',\n name: 'Curly Brace',\n shortName: 'brace',\n description: 'Adds a comment',\n aliases: ['comment', 'brace-l'],\n handler: curlyBraceLeft,\n },\n {\n semanticName: 'Comment Right',\n name: 'Curly Brace',\n shortName: 'brace-r',\n description: 'Adds a comment',\n handler: curlyBraceRight,\n },\n {\n semanticName: 'Comment with braces on both sides',\n name: 'Curly Braces',\n shortName: 'braces',\n description: 'Adds a comment',\n handler: curlyBraces,\n },\n {\n semanticName: 'Com Link',\n name: 'Lightning Bolt',\n shortName: 'bolt',\n description: 'Communication link',\n aliases: ['com-link', 'lightning-bolt'],\n handler: lightningBolt,\n },\n {\n semanticName: 'Document',\n name: 'Document',\n shortName: 'doc',\n description: 'Represents a document',\n aliases: ['doc', 'document'],\n handler: waveEdgedRectangle,\n },\n {\n semanticName: 'Delay',\n name: 'Half-Rounded Rectangle',\n shortName: 'delay',\n description: 'Represents a delay',\n aliases: ['half-rounded-rectangle'],\n handler: halfRoundedRectangle,\n },\n {\n semanticName: 'Direct Access Storage',\n name: 'Horizontal Cylinder',\n shortName: 'h-cyl',\n description: 'Direct access storage',\n aliases: ['das', 'horizontal-cylinder'],\n handler: tiltedCylinder,\n },\n {\n semanticName: 'Disk Storage',\n name: 'Lined Cylinder',\n shortName: 'lin-cyl',\n description: 'Disk storage',\n aliases: ['disk', 'lined-cylinder'],\n handler: linedCylinder,\n },\n {\n semanticName: 'Display',\n name: 'Curved Trapezoid',\n shortName: 'curv-trap',\n description: 'Represents a display',\n aliases: ['curved-trapezoid', 'display'],\n handler: curvedTrapezoid,\n },\n {\n semanticName: 'Divided Process',\n name: 'Divided Rectangle',\n shortName: 'div-rect',\n description: 'Divided process shape',\n aliases: ['div-proc', 'divided-rectangle', 'divided-process'],\n handler: dividedRectangle,\n },\n {\n semanticName: 'Extract',\n name: 'Triangle',\n shortName: 'tri',\n description: 'Extraction process',\n aliases: ['extract', 'triangle'],\n handler: triangle,\n },\n {\n semanticName: 'Internal Storage',\n name: 'Window Pane',\n shortName: 'win-pane',\n description: 'Internal storage',\n aliases: ['internal-storage', 'window-pane'],\n handler: windowPane,\n },\n {\n semanticName: 'Junction',\n name: 'Filled Circle',\n shortName: 'f-circ',\n description: 'Junction point',\n aliases: ['junction', 'filled-circle'],\n handler: filledCircle,\n },\n {\n semanticName: 'Loop Limit',\n name: 'Trapezoidal Pentagon',\n shortName: 'notch-pent',\n description: 'Loop limit step',\n aliases: ['loop-limit', 'notched-pentagon'],\n handler: trapezoidalPentagon,\n },\n {\n semanticName: 'Manual File',\n name: 'Flipped Triangle',\n shortName: 'flip-tri',\n description: 'Manual file operation',\n aliases: ['manual-file', 'flipped-triangle'],\n handler: flippedTriangle,\n },\n {\n semanticName: 'Manual Input',\n name: 'Sloped Rectangle',\n shortName: 'sl-rect',\n description: 'Manual input step',\n aliases: ['manual-input', 'sloped-rectangle'],\n handler: slopedRect,\n },\n {\n semanticName: 'Multi-Document',\n name: 'Stacked Document',\n shortName: 'docs',\n description: 'Multiple documents',\n aliases: ['documents', 'st-doc', 'stacked-document'],\n handler: multiWaveEdgedRectangle,\n },\n {\n semanticName: 'Multi-Process',\n name: 'Stacked Rectangle',\n shortName: 'st-rect',\n description: 'Multiple processes',\n aliases: ['procs', 'processes', 'stacked-rectangle'],\n handler: multiRect,\n },\n {\n semanticName: 'Stored Data',\n name: 'Bow Tie Rectangle',\n shortName: 'bow-rect',\n description: 'Stored data',\n aliases: ['stored-data', 'bow-tie-rectangle'],\n handler: bowTieRect,\n },\n {\n semanticName: 'Summary',\n name: 'Crossed Circle',\n shortName: 'cross-circ',\n description: 'Summary',\n aliases: ['summary', 'crossed-circle'],\n handler: crossedCircle,\n },\n {\n semanticName: 'Tagged Document',\n name: 'Tagged Document',\n shortName: 'tag-doc',\n description: 'Tagged document',\n aliases: ['tag-doc', 'tagged-document'],\n handler: taggedWaveEdgedRectangle,\n },\n {\n semanticName: 'Tagged Process',\n name: 'Tagged Rectangle',\n shortName: 'tag-rect',\n description: 'Tagged process',\n aliases: ['tagged-rectangle', 'tag-proc', 'tagged-process'],\n handler: taggedRect,\n },\n {\n semanticName: 'Paper Tape',\n name: 'Flag',\n shortName: 'flag',\n description: 'Paper tape',\n aliases: ['paper-tape'],\n handler: waveRectangle,\n },\n {\n semanticName: 'Odd',\n name: 'Odd',\n shortName: 'odd',\n description: 'Odd shape',\n internalAliases: ['rect_left_inv_arrow'],\n handler: rect_left_inv_arrow,\n },\n {\n semanticName: 'Lined Document',\n name: 'Lined Document',\n shortName: 'lin-doc',\n description: 'Lined document',\n aliases: ['lined-document'],\n handler: linedWaveEdgedRect,\n },\n] as const satisfies ShapeDefinition[];\n\nconst generateShapeMap = () => {\n // These are the shapes that didn't have documentation present\n const undocumentedShapes = {\n // States\n state,\n choice,\n note,\n\n // Rectangles\n rectWithTitle,\n labelRect,\n\n // Icons\n iconSquare,\n iconCircle,\n icon,\n iconRounded,\n imageSquare,\n anchor,\n\n // Kanban diagram\n kanbanItem,\n\n //Mindmap diagram\n mindmapCircle,\n defaultMindmapNode,\n // class diagram\n classBox,\n\n // er diagram\n erBox,\n\n // Requirement diagram\n requirementBox,\n } as const;\n\n const entries = [\n ...(Object.entries(undocumentedShapes) as Entries),\n ...shapesDefs.flatMap((shape) => {\n const aliases = [\n shape.shortName,\n ...('aliases' in shape ? shape.aliases : []),\n ...('internalAliases' in shape ? shape.internalAliases : []),\n ];\n return aliases.map((alias) => [alias, shape.handler] as const);\n }),\n ];\n return Object.fromEntries(entries) as Record<\n (typeof entries)[number][0],\n (typeof entries)[number][1]\n > satisfies Record;\n};\n\nexport const shapes = generateShapeMap();\n\nexport function isValidShape(shape: string): shape is ShapeID {\n return shape in shapes;\n}\n\nexport type ShapeID = keyof typeof shapes;\n", "import { select } from 'd3';\nimport * as yaml from 'js-yaml';\nimport { getConfig, defaultConfig } from '../../diagram-api/diagramAPI.js';\nimport type { DiagramDB } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport { isValidShape, type ShapeID } from '../../rendering-util/rendering-elements/shapes.js';\nimport type { Edge, Node } from '../../rendering-util/types.js';\nimport type { EdgeMetaData, NodeMetaData } from '../../types.js';\nimport utils, { getEdgeId } from '../../utils.js';\nimport common from '../common/common.js';\nimport {\n setAccTitle,\n getAccTitle,\n getAccDescription,\n setAccDescription,\n clear as commonClear,\n setDiagramTitle,\n getDiagramTitle,\n} from '../common/commonDb.js';\nimport type {\n FlowClass,\n FlowEdge,\n FlowLink,\n FlowSubGraph,\n FlowText,\n FlowVertex,\n FlowVertexTypeParam,\n} from './types.js';\n\ninterface LinkData {\n id: string;\n}\n\nconst MERMAID_DOM_ID_PREFIX = 'flowchart-';\n\n// We are using arrow functions assigned to class instance fields instead of methods as they are required by flow JISON\nexport class FlowDB implements DiagramDB {\n private vertexCounter = 0;\n private config = getConfig();\n private vertices = new Map();\n private edges: FlowEdge[] & { defaultInterpolate?: string; defaultStyle?: string[] } = [];\n private classes = new Map();\n private subGraphs: FlowSubGraph[] = [];\n private subGraphLookup = new Map();\n private tooltips = new Map();\n private subCount = 0;\n private firstGraphFlag = true;\n private direction: string | undefined;\n private version: string | undefined; // As in graph\n private secCount = -1;\n private posCrossRef: number[] = [];\n\n // Functions to be run after graph rendering\n private funs: ((element: Element) => void)[] = []; // cspell:ignore funs\n\n constructor() {\n this.funs.push(this.setupToolTips.bind(this));\n\n // Needed for JISON since it only supports direct properties\n this.addVertex = this.addVertex.bind(this);\n this.firstGraph = this.firstGraph.bind(this);\n this.setDirection = this.setDirection.bind(this);\n this.addSubGraph = this.addSubGraph.bind(this);\n this.addLink = this.addLink.bind(this);\n this.setLink = this.setLink.bind(this);\n this.updateLink = this.updateLink.bind(this);\n this.addClass = this.addClass.bind(this);\n this.setClass = this.setClass.bind(this);\n this.destructLink = this.destructLink.bind(this);\n this.setClickEvent = this.setClickEvent.bind(this);\n this.setTooltip = this.setTooltip.bind(this);\n this.updateLinkInterpolate = this.updateLinkInterpolate.bind(this);\n this.setClickFun = this.setClickFun.bind(this);\n this.bindFunctions = this.bindFunctions.bind(this);\n\n this.lex = {\n firstGraph: this.firstGraph.bind(this),\n };\n\n this.clear();\n this.setGen('gen-2');\n }\n\n private sanitizeText(txt: string) {\n return common.sanitizeText(txt, this.config);\n }\n\n /**\n * Function to lookup domId from id in the graph definition.\n *\n * @param id - id of the node\n */\n public lookUpDomId(id: string) {\n for (const vertex of this.vertices.values()) {\n if (vertex.id === id) {\n return vertex.domId;\n }\n }\n return id;\n }\n\n /**\n * Function called by parser when a node definition has been found\n */\n public addVertex(\n id: string,\n textObj: FlowText,\n type: FlowVertexTypeParam,\n style: string[],\n classes: string[],\n dir: string,\n props = {},\n metadata: any\n ) {\n if (!id || id.trim().length === 0) {\n return;\n }\n // Extract the metadata from the shapeData, the syntax for adding metadata for nodes and edges is the same\n // so at this point we don't know if it's a node or an edge, but we can still extract the metadata\n let doc;\n if (metadata !== undefined) {\n let yamlData;\n // detect if shapeData contains a newline character\n if (!metadata.includes('\\n')) {\n yamlData = '{\\n' + metadata + '\\n}';\n } else {\n yamlData = metadata + '\\n';\n }\n doc = yaml.load(yamlData, { schema: yaml.JSON_SCHEMA }) as NodeMetaData;\n }\n\n // Check if this is an edge\n const edge = this.edges.find((e) => e.id === id);\n if (edge) {\n const edgeDoc = doc as EdgeMetaData;\n if (edgeDoc?.animate !== undefined) {\n edge.animate = edgeDoc.animate;\n }\n if (edgeDoc?.animation !== undefined) {\n edge.animation = edgeDoc.animation;\n }\n if (edgeDoc?.curve !== undefined) {\n edge.interpolate = edgeDoc.curve;\n }\n return;\n }\n\n let txt;\n\n let vertex = this.vertices.get(id);\n if (vertex === undefined) {\n vertex = {\n id,\n labelType: 'text',\n domId: MERMAID_DOM_ID_PREFIX + id + '-' + this.vertexCounter,\n styles: [],\n classes: [],\n };\n this.vertices.set(id, vertex);\n }\n this.vertexCounter++;\n\n if (textObj !== undefined) {\n this.config = getConfig();\n txt = this.sanitizeText(textObj.text.trim());\n vertex.labelType = textObj.type;\n // strip quotes if string starts and ends with a quote\n if (txt.startsWith('\"') && txt.endsWith('\"')) {\n txt = txt.substring(1, txt.length - 1);\n }\n vertex.text = txt;\n } else {\n if (vertex.text === undefined) {\n vertex.text = id;\n }\n }\n if (type !== undefined) {\n vertex.type = type;\n }\n if (style !== undefined && style !== null) {\n style.forEach((s) => {\n vertex.styles.push(s);\n });\n }\n if (classes !== undefined && classes !== null) {\n classes.forEach((s) => {\n vertex.classes.push(s);\n });\n }\n if (dir !== undefined) {\n vertex.dir = dir;\n }\n if (vertex.props === undefined) {\n vertex.props = props;\n } else if (props !== undefined) {\n Object.assign(vertex.props, props);\n }\n\n if (doc !== undefined) {\n if (doc.shape) {\n if (doc.shape !== doc.shape.toLowerCase() || doc.shape.includes('_')) {\n throw new Error(`No such shape: ${doc.shape}. Shape names should be lowercase.`);\n } else if (!isValidShape(doc.shape)) {\n throw new Error(`No such shape: ${doc.shape}.`);\n }\n vertex.type = doc?.shape;\n }\n\n if (doc?.label) {\n vertex.text = doc?.label;\n }\n if (doc?.icon) {\n vertex.icon = doc?.icon;\n if (!doc.label?.trim() && vertex.text === id) {\n vertex.text = '';\n }\n }\n if (doc?.form) {\n vertex.form = doc?.form;\n }\n if (doc?.pos) {\n vertex.pos = doc?.pos;\n }\n if (doc?.img) {\n vertex.img = doc?.img;\n if (!doc.label?.trim() && vertex.text === id) {\n vertex.text = '';\n }\n }\n if (doc?.constraint) {\n vertex.constraint = doc.constraint;\n }\n if (doc.w) {\n vertex.assetWidth = Number(doc.w);\n }\n if (doc.h) {\n vertex.assetHeight = Number(doc.h);\n }\n }\n }\n\n /**\n * Function called by parser when a link/edge definition has been found\n *\n */\n public addSingleLink(_start: string, _end: string, type: any, id?: string) {\n const start = _start;\n const end = _end;\n\n const edge: FlowEdge = {\n start: start,\n end: end,\n type: undefined,\n text: '',\n labelType: 'text',\n classes: [],\n isUserDefinedId: false,\n interpolate: this.edges.defaultInterpolate,\n };\n log.info('abc78 Got edge...', edge);\n const linkTextObj = type.text;\n\n if (linkTextObj !== undefined) {\n edge.text = this.sanitizeText(linkTextObj.text.trim());\n\n // strip quotes if string starts and ends with a quote\n if (edge.text.startsWith('\"') && edge.text.endsWith('\"')) {\n edge.text = edge.text.substring(1, edge.text.length - 1);\n }\n edge.labelType = linkTextObj.type;\n }\n\n if (type !== undefined) {\n edge.type = type.type;\n edge.stroke = type.stroke;\n edge.length = type.length > 10 ? 10 : type.length;\n }\n if (id && !this.edges.some((e) => e.id === id)) {\n edge.id = id;\n edge.isUserDefinedId = true;\n } else {\n const existingLinks = this.edges.filter((e) => e.start === edge.start && e.end === edge.end);\n if (existingLinks.length === 0) {\n edge.id = getEdgeId(edge.start, edge.end, { counter: 0, prefix: 'L' });\n } else {\n edge.id = getEdgeId(edge.start, edge.end, {\n counter: existingLinks.length + 1,\n prefix: 'L',\n });\n }\n }\n\n if (this.edges.length < (this.config.maxEdges ?? 500)) {\n log.info('Pushing edge...');\n this.edges.push(edge);\n } else {\n throw new Error(\n `Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}.\n\nInitialize mermaid with maxEdges set to a higher number to allow more edges.\nYou cannot set this config via configuration inside the diagram as it is a secure config.\nYou have to call mermaid.initialize.`\n );\n }\n }\n\n private isLinkData(value: unknown): value is LinkData {\n return (\n value !== null &&\n typeof value === 'object' &&\n 'id' in value &&\n typeof (value as LinkData).id === 'string'\n );\n }\n\n public addLink(_start: string[], _end: string[], linkData: unknown) {\n const id = this.isLinkData(linkData) ? linkData.id.replace('@', '') : undefined;\n\n log.info('addLink', _start, _end, id);\n\n // for a group syntax like A e1@--> B & C, only the first edge should have a userDefined id\n // the rest of the edges should have auto generated ids\n for (const start of _start) {\n for (const end of _end) {\n //use the id only for last node in _start and first node in _end\n const isLastStart = start === _start[_start.length - 1];\n const isFirstEnd = end === _end[0];\n if (isLastStart && isFirstEnd) {\n this.addSingleLink(start, end, linkData, id);\n } else {\n this.addSingleLink(start, end, linkData, undefined);\n }\n }\n }\n }\n\n /**\n * Updates a link's line interpolation algorithm\n */\n public updateLinkInterpolate(positions: ('default' | number)[], interpolate: string) {\n positions.forEach((pos) => {\n if (pos === 'default') {\n this.edges.defaultInterpolate = interpolate;\n } else {\n this.edges[pos].interpolate = interpolate;\n }\n });\n }\n\n /**\n * Updates a link with a style\n *\n */\n public updateLink(positions: ('default' | number)[], style: string[]) {\n positions.forEach((pos) => {\n if (typeof pos === 'number' && pos >= this.edges.length) {\n throw new Error(\n `The index ${pos} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${\n this.edges.length - 1\n }. (Help: Ensure that the index is within the range of existing edges.)`\n );\n }\n if (pos === 'default') {\n this.edges.defaultStyle = style;\n } else {\n this.edges[pos].style = style;\n // if edges[pos].style does have fill not set, set it to none\n if (\n (this.edges[pos]?.style?.length ?? 0) > 0 &&\n !this.edges[pos]?.style?.some((s) => s?.startsWith('fill'))\n ) {\n this.edges[pos]?.style?.push('fill:none');\n }\n }\n });\n }\n\n public addClass(ids: string, _style: string[]) {\n const style = _style\n .join()\n .replace(/\\\\,/g, '\u00A7\u00A7\u00A7')\n .replace(/,/g, ';')\n .replace(/\u00A7\u00A7\u00A7/g, ',')\n .split(';');\n ids.split(',').forEach((id) => {\n let classNode = this.classes.get(id);\n if (classNode === undefined) {\n classNode = { id, styles: [], textStyles: [] };\n this.classes.set(id, classNode);\n }\n\n if (style !== undefined && style !== null) {\n style.forEach((s) => {\n if (/color/.exec(s)) {\n const newStyle = s.replace('fill', 'bgFill'); // .replace('color', 'fill');\n classNode.textStyles.push(newStyle);\n }\n classNode.styles.push(s);\n });\n }\n });\n }\n\n /**\n * Called by parser when a graph definition is found, stores the direction of the chart.\n *\n */\n public setDirection(dir: string) {\n this.direction = dir.trim();\n\n if (/.*/.exec(this.direction)) {\n this.direction = 'LR';\n }\n if (/.*v/.exec(this.direction)) {\n this.direction = 'TB';\n }\n if (this.direction === 'TD') {\n this.direction = 'TB';\n }\n }\n\n /**\n * Called by parser when a special node is found, e.g. a clickable element.\n *\n * @param ids - Comma separated list of ids\n * @param className - Class to add\n */\n public setClass(ids: string, className: string) {\n for (const id of ids.split(',')) {\n const vertex = this.vertices.get(id);\n if (vertex) {\n vertex.classes.push(className);\n }\n const edge = this.edges.find((e) => e.id === id);\n if (edge) {\n edge.classes.push(className);\n }\n const subGraph = this.subGraphLookup.get(id);\n if (subGraph) {\n subGraph.classes.push(className);\n }\n }\n }\n\n public setTooltip(ids: string, tooltip: string) {\n if (tooltip === undefined) {\n return;\n }\n tooltip = this.sanitizeText(tooltip);\n for (const id of ids.split(',')) {\n this.tooltips.set(this.version === 'gen-1' ? this.lookUpDomId(id) : id, tooltip);\n }\n }\n\n private setClickFun(id: string, functionName: string, functionArgs: string) {\n const domId = this.lookUpDomId(id);\n // if (_id[0].match(/\\d/)) id = MERMAID_DOM_ID_PREFIX + id;\n if (getConfig().securityLevel !== 'loose') {\n return;\n }\n if (functionName === undefined) {\n return;\n }\n let argList: string[] = [];\n if (typeof functionArgs === 'string') {\n /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */\n argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/);\n for (let i = 0; i < argList.length; i++) {\n let item = argList[i].trim();\n /* Removes all double quotes at the start and end of an argument */\n /* This preserves all starting and ending whitespace inside */\n if (item.startsWith('\"') && item.endsWith('\"')) {\n item = item.substr(1, item.length - 2);\n }\n argList[i] = item;\n }\n }\n\n /* if no arguments passed into callback, default to passing in id */\n if (argList.length === 0) {\n argList.push(id);\n }\n\n const vertex = this.vertices.get(id);\n if (vertex) {\n vertex.haveCallback = true;\n this.funs.push(() => {\n const elem = document.querySelector(`[id=\"${domId}\"]`);\n if (elem !== null) {\n elem.addEventListener(\n 'click',\n () => {\n utils.runFunc(functionName, ...argList);\n },\n false\n );\n }\n });\n }\n }\n\n /**\n * Called by parser when a link is found. Adds the URL to the vertex data.\n *\n * @param ids - Comma separated list of ids\n * @param linkStr - URL to create a link for\n * @param target - Target attribute for the link\n */\n public setLink(ids: string, linkStr: string, target: string) {\n ids.split(',').forEach((id) => {\n const vertex = this.vertices.get(id);\n if (vertex !== undefined) {\n vertex.link = utils.formatUrl(linkStr, this.config);\n vertex.linkTarget = target;\n }\n });\n this.setClass(ids, 'clickable');\n }\n\n public getTooltip(id: string) {\n return this.tooltips.get(id);\n }\n\n /**\n * Called by parser when a click definition is found. Registers an event handler.\n *\n * @param ids - Comma separated list of ids\n * @param functionName - Function to be called on click\n * @param functionArgs - Arguments to be passed to the function\n */\n public setClickEvent(ids: string, functionName: string, functionArgs: string) {\n ids.split(',').forEach((id) => {\n this.setClickFun(id, functionName, functionArgs);\n });\n this.setClass(ids, 'clickable');\n }\n\n public bindFunctions(element: Element) {\n this.funs.forEach((fun) => {\n fun(element);\n });\n }\n public getDirection() {\n return this.direction?.trim();\n }\n /**\n * Retrieval function for fetching the found nodes after parsing has completed.\n *\n */\n public getVertices() {\n return this.vertices;\n }\n\n /**\n * Retrieval function for fetching the found links after parsing has completed.\n *\n */\n public getEdges() {\n return this.edges;\n }\n\n /**\n * Retrieval function for fetching the found class definitions after parsing has completed.\n *\n */\n public getClasses() {\n return this.classes;\n }\n\n private setupToolTips(element: Element) {\n let tooltipElem = select('.mermaidTooltip');\n // @ts-ignore TODO: fix this\n if ((tooltipElem._groups || tooltipElem)[0][0] === null) {\n // @ts-ignore TODO: fix this\n tooltipElem = select('body')\n .append('div')\n .attr('class', 'mermaidTooltip')\n .style('opacity', 0);\n }\n\n const svg = select(element).select('svg');\n\n const nodes = svg.selectAll('g.node');\n nodes\n .on('mouseover', (e: MouseEvent) => {\n const el = select(e.currentTarget as Element);\n const title = el.attr('title');\n\n // Don't try to draw a tooltip if no data is provided\n if (title === null) {\n return;\n }\n const rect = (e.currentTarget as Element)?.getBoundingClientRect();\n\n tooltipElem.transition().duration(200).style('opacity', '.9');\n tooltipElem\n .text(el.attr('title'))\n .style('left', window.scrollX + rect.left + (rect.right - rect.left) / 2 + 'px')\n .style('top', window.scrollY + rect.bottom + 'px');\n tooltipElem.html(tooltipElem.html().replace(/<br\\/>/g, '
    '));\n el.classed('hover', true);\n })\n .on('mouseout', (e: MouseEvent) => {\n tooltipElem.transition().duration(500).style('opacity', 0);\n const el = select(e.currentTarget as Element);\n el.classed('hover', false);\n });\n }\n\n /**\n * Clears the internal graph db so that a new graph can be parsed.\n *\n */\n public clear(ver = 'gen-2') {\n this.vertices = new Map();\n this.classes = new Map();\n this.edges = [];\n this.funs = [this.setupToolTips.bind(this)];\n this.subGraphs = [];\n this.subGraphLookup = new Map();\n this.subCount = 0;\n this.tooltips = new Map();\n this.firstGraphFlag = true;\n this.version = ver;\n this.config = getConfig();\n commonClear();\n }\n\n public setGen(ver: string) {\n this.version = ver || 'gen-2';\n }\n\n public defaultStyle() {\n return 'fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;';\n }\n\n public addSubGraph(\n _id: { text: string },\n list: string[],\n _title: { text: string; type: string }\n ) {\n let id: string | undefined = _id.text.trim();\n let title = _title.text;\n if (_id === _title && /\\s/.exec(_title.text)) {\n id = undefined;\n }\n\n const uniq = (a: any[]) => {\n const prims: any = { boolean: {}, number: {}, string: {} };\n const objs: any[] = [];\n\n let dir: string | undefined;\n\n const nodeList = a.filter(function (item) {\n const type = typeof item;\n if (item.stmt && item.stmt === 'dir') {\n dir = item.value;\n return false;\n }\n if (item.trim() === '') {\n return false;\n }\n if (type in prims) {\n return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true);\n } else {\n return objs.includes(item) ? false : objs.push(item);\n }\n });\n return { nodeList, dir };\n };\n\n const result = uniq(list.flat());\n const nodeList = result.nodeList;\n let dir = result.dir;\n const flowchartConfig = getConfig().flowchart ?? {};\n dir =\n dir ??\n (flowchartConfig.inheritDir\n ? (this.getDirection() ?? (getConfig() as any).direction ?? undefined)\n : undefined);\n\n if (this.version === 'gen-1') {\n for (let i = 0; i < nodeList.length; i++) {\n nodeList[i] = this.lookUpDomId(nodeList[i]);\n }\n }\n\n id = id ?? 'subGraph' + this.subCount;\n title = title || '';\n title = this.sanitizeText(title);\n this.subCount = this.subCount + 1;\n\n const subGraph = {\n id: id,\n nodes: nodeList,\n title: title.trim(),\n classes: [],\n dir,\n labelType: _title.type,\n };\n\n log.info('Adding', subGraph.id, subGraph.nodes, subGraph.dir);\n\n // Remove the members in the new subgraph if they already belong to another subgraph\n subGraph.nodes = this.makeUniq(subGraph, this.subGraphs).nodes;\n this.subGraphs.push(subGraph);\n this.subGraphLookup.set(id, subGraph);\n return id;\n }\n\n private getPosForId(id: string) {\n for (const [i, subGraph] of this.subGraphs.entries()) {\n if (subGraph.id === id) {\n return i;\n }\n }\n return -1;\n }\n\n private indexNodes2(id: string, pos: number): { result: boolean; count: number } {\n const nodes = this.subGraphs[pos].nodes;\n this.secCount = this.secCount + 1;\n if (this.secCount > 2000) {\n return {\n result: false,\n count: 0,\n };\n }\n this.posCrossRef[this.secCount] = pos;\n // Check if match\n if (this.subGraphs[pos].id === id) {\n return {\n result: true,\n count: 0,\n };\n }\n\n let count = 0;\n let posCount = 1;\n while (count < nodes.length) {\n const childPos = this.getPosForId(nodes[count]);\n // Ignore regular nodes (pos will be -1)\n if (childPos >= 0) {\n const res = this.indexNodes2(id, childPos);\n if (res.result) {\n return {\n result: true,\n count: posCount + res.count,\n };\n } else {\n posCount = posCount + res.count;\n }\n }\n count = count + 1;\n }\n\n return {\n result: false,\n count: posCount,\n };\n }\n\n public getDepthFirstPos(pos: number) {\n return this.posCrossRef[pos];\n }\n public indexNodes() {\n this.secCount = -1;\n if (this.subGraphs.length > 0) {\n this.indexNodes2('none', this.subGraphs.length - 1);\n }\n }\n\n public getSubGraphs() {\n return this.subGraphs;\n }\n\n public firstGraph() {\n if (this.firstGraphFlag) {\n this.firstGraphFlag = false;\n return true;\n }\n return false;\n }\n\n private destructStartLink(_str: string): FlowLink {\n let str = _str.trim();\n let type = 'arrow_open';\n\n switch (str[0]) {\n case '<':\n type = 'arrow_point';\n str = str.slice(1);\n break;\n case 'x':\n type = 'arrow_cross';\n str = str.slice(1);\n break;\n case 'o':\n type = 'arrow_circle';\n str = str.slice(1);\n break;\n }\n\n let stroke = 'normal';\n\n if (str.includes('=')) {\n stroke = 'thick';\n }\n\n if (str.includes('.')) {\n stroke = 'dotted';\n }\n\n return { type, stroke };\n }\n\n private countChar(char: string, str: string) {\n const length = str.length;\n let count = 0;\n for (let i = 0; i < length; ++i) {\n if (str[i] === char) {\n ++count;\n }\n }\n return count;\n }\n\n private destructEndLink(_str: string) {\n const str = _str.trim();\n let line = str.slice(0, -1);\n let type = 'arrow_open';\n\n switch (str.slice(-1)) {\n case 'x':\n type = 'arrow_cross';\n if (str.startsWith('x')) {\n type = 'double_' + type;\n line = line.slice(1);\n }\n break;\n case '>':\n type = 'arrow_point';\n if (str.startsWith('<')) {\n type = 'double_' + type;\n line = line.slice(1);\n }\n break;\n case 'o':\n type = 'arrow_circle';\n if (str.startsWith('o')) {\n type = 'double_' + type;\n line = line.slice(1);\n }\n break;\n }\n\n let stroke = 'normal';\n let length = line.length - 1;\n\n if (line.startsWith('=')) {\n stroke = 'thick';\n }\n\n if (line.startsWith('~')) {\n stroke = 'invisible';\n }\n\n const dots = this.countChar('.', line);\n\n if (dots) {\n stroke = 'dotted';\n length = dots;\n }\n\n return { type, stroke, length };\n }\n\n public destructLink(_str: string, _startStr: string) {\n const info = this.destructEndLink(_str);\n let startInfo;\n if (_startStr) {\n startInfo = this.destructStartLink(_startStr);\n\n if (startInfo.stroke !== info.stroke) {\n return { type: 'INVALID', stroke: 'INVALID' };\n }\n\n if (startInfo.type === 'arrow_open') {\n // -- xyz --> - take arrow type from ending\n startInfo.type = info.type;\n } else {\n // x-- xyz --> - not supported\n if (startInfo.type !== info.type) {\n return { type: 'INVALID', stroke: 'INVALID' };\n }\n\n startInfo.type = 'double_' + startInfo.type;\n }\n\n if (startInfo.type === 'double_arrow') {\n startInfo.type = 'double_arrow_point';\n }\n\n startInfo.length = info.length;\n return startInfo;\n }\n\n return info;\n }\n\n // Todo optimizer this by caching existing nodes\n public exists(allSgs: FlowSubGraph[], _id: string) {\n for (const sg of allSgs) {\n if (sg.nodes.includes(_id)) {\n return true;\n }\n }\n return false;\n }\n /**\n * Deletes an id from all subgraphs\n *\n */\n public makeUniq(sg: FlowSubGraph, allSubgraphs: FlowSubGraph[]) {\n const res: string[] = [];\n sg.nodes.forEach((_id, pos) => {\n if (!this.exists(allSubgraphs, _id)) {\n res.push(sg.nodes[pos]);\n }\n });\n return { nodes: res };\n }\n\n public lex: { firstGraph: typeof FlowDB.prototype.firstGraph };\n\n private getTypeFromVertex(vertex: FlowVertex): ShapeID {\n if (vertex.img) {\n return 'imageSquare';\n }\n if (vertex.icon) {\n if (vertex.form === 'circle') {\n return 'iconCircle';\n }\n if (vertex.form === 'square') {\n return 'iconSquare';\n }\n if (vertex.form === 'rounded') {\n return 'iconRounded';\n }\n return 'icon';\n }\n switch (vertex.type) {\n case 'square':\n case undefined:\n return 'squareRect';\n case 'round':\n return 'roundedRect';\n case 'ellipse':\n // @ts-expect-error -- Ellipses are broken, see https://github.com/mermaid-js/mermaid/issues/5976\n return 'ellipse';\n default:\n return vertex.type;\n }\n }\n\n private findNode(nodes: Node[], id: string) {\n return nodes.find((node) => node.id === id);\n }\n private destructEdgeType(type: string | undefined) {\n let arrowTypeStart = 'none';\n let arrowTypeEnd = 'arrow_point';\n switch (type) {\n case 'arrow_point':\n case 'arrow_circle':\n case 'arrow_cross':\n arrowTypeEnd = type;\n break;\n\n case 'double_arrow_point':\n case 'double_arrow_circle':\n case 'double_arrow_cross':\n arrowTypeStart = type.replace('double_', '');\n arrowTypeEnd = arrowTypeStart;\n break;\n }\n return { arrowTypeStart, arrowTypeEnd };\n }\n\n private addNodeFromVertex(\n vertex: FlowVertex,\n nodes: Node[],\n parentDB: Map,\n subGraphDB: Map,\n config: any,\n look: string\n ) {\n const parentId = parentDB.get(vertex.id);\n const isGroup = subGraphDB.get(vertex.id) ?? false;\n\n const node = this.findNode(nodes, vertex.id);\n if (node) {\n node.cssStyles = vertex.styles;\n node.cssCompiledStyles = this.getCompiledStyles(vertex.classes);\n node.cssClasses = vertex.classes.join(' ');\n } else {\n const baseNode = {\n id: vertex.id,\n label: vertex.text,\n labelStyle: '',\n parentId,\n padding: config.flowchart?.padding || 8,\n cssStyles: vertex.styles,\n cssCompiledStyles: this.getCompiledStyles(['default', 'node', ...vertex.classes]),\n cssClasses: 'default ' + vertex.classes.join(' '),\n dir: vertex.dir,\n domId: vertex.domId,\n look,\n link: vertex.link,\n linkTarget: vertex.linkTarget,\n tooltip: this.getTooltip(vertex.id),\n icon: vertex.icon,\n pos: vertex.pos,\n img: vertex.img,\n assetWidth: vertex.assetWidth,\n assetHeight: vertex.assetHeight,\n constraint: vertex.constraint,\n };\n if (isGroup) {\n nodes.push({\n ...baseNode,\n isGroup: true,\n shape: 'rect',\n });\n } else {\n nodes.push({\n ...baseNode,\n isGroup: false,\n shape: this.getTypeFromVertex(vertex),\n });\n }\n }\n }\n\n private getCompiledStyles(classDefs: string[]) {\n let compiledStyles: string[] = [];\n for (const customClass of classDefs) {\n const cssClass = this.classes.get(customClass);\n if (cssClass?.styles) {\n compiledStyles = [...compiledStyles, ...(cssClass.styles ?? [])].map((s) => s.trim());\n }\n if (cssClass?.textStyles) {\n compiledStyles = [...compiledStyles, ...(cssClass.textStyles ?? [])].map((s) => s.trim());\n }\n }\n return compiledStyles;\n }\n\n public getData() {\n const config = getConfig();\n const nodes: Node[] = [];\n const edges: Edge[] = [];\n\n const subGraphs = this.getSubGraphs();\n const parentDB = new Map();\n const subGraphDB = new Map();\n\n // Setup the subgraph data for adding nodes\n for (let i = subGraphs.length - 1; i >= 0; i--) {\n const subGraph = subGraphs[i];\n if (subGraph.nodes.length > 0) {\n subGraphDB.set(subGraph.id, true);\n }\n for (const id of subGraph.nodes) {\n parentDB.set(id, subGraph.id);\n }\n }\n\n // Data is setup, add the nodes\n for (let i = subGraphs.length - 1; i >= 0; i--) {\n const subGraph = subGraphs[i];\n nodes.push({\n id: subGraph.id,\n label: subGraph.title,\n labelStyle: '',\n parentId: parentDB.get(subGraph.id),\n padding: 8,\n cssCompiledStyles: this.getCompiledStyles(subGraph.classes),\n cssClasses: subGraph.classes.join(' '),\n shape: 'rect',\n dir: subGraph.dir,\n isGroup: true,\n look: config.look,\n });\n }\n\n const n = this.getVertices();\n n.forEach((vertex) => {\n this.addNodeFromVertex(vertex, nodes, parentDB, subGraphDB, config, config.look || 'classic');\n });\n\n const e = this.getEdges();\n e.forEach((rawEdge, index) => {\n const { arrowTypeStart, arrowTypeEnd } = this.destructEdgeType(rawEdge.type);\n const styles = [...(e.defaultStyle ?? [])];\n\n if (rawEdge.style) {\n styles.push(...rawEdge.style);\n }\n const edge: Edge = {\n id: getEdgeId(rawEdge.start, rawEdge.end, { counter: index, prefix: 'L' }, rawEdge.id),\n isUserDefinedId: rawEdge.isUserDefinedId,\n start: rawEdge.start,\n end: rawEdge.end,\n type: rawEdge.type ?? 'normal',\n label: rawEdge.text,\n labelpos: 'c',\n thickness: rawEdge.stroke,\n minlen: rawEdge.length,\n classes:\n rawEdge?.stroke === 'invisible'\n ? ''\n : 'edge-thickness-normal edge-pattern-solid flowchart-link',\n arrowTypeStart:\n rawEdge?.stroke === 'invisible' || rawEdge?.type === 'arrow_open'\n ? 'none'\n : arrowTypeStart,\n arrowTypeEnd:\n rawEdge?.stroke === 'invisible' || rawEdge?.type === 'arrow_open' ? 'none' : arrowTypeEnd,\n arrowheadStyle: 'fill: #333',\n cssCompiledStyles: this.getCompiledStyles(rawEdge.classes),\n labelStyle: styles,\n style: styles,\n pattern: rawEdge.stroke,\n look: config.look,\n animate: rawEdge.animate,\n animation: rawEdge.animation,\n curve: rawEdge.interpolate || this.edges.defaultInterpolate || config.flowchart?.curve,\n };\n\n edges.push(edge);\n });\n\n return { nodes, edges, other: {}, config };\n }\n\n public defaultConfig() {\n return defaultConfig.flowchart;\n }\n public setAccTitle = setAccTitle;\n public setAccDescription = setAccDescription;\n public setDiagramTitle = setDiagramTitle;\n public getAccTitle = getAccTitle;\n public getAccDescription = getAccDescription;\n public getDiagramTitle = getDiagramTitle;\n}\n", "import { select } from 'd3';\n\nexport const getDiagramElement = (id, securityLevel) => {\n let sandboxElement;\n if (securityLevel === 'sandbox') {\n sandboxElement = select('#i' + id);\n }\n const root =\n securityLevel === 'sandbox'\n ? select(sandboxElement.nodes()[0].contentDocument.body)\n : select('body');\n\n const svg = root.select(`[id=\"${id}\"]`);\n\n // Run the renderer. This is what draws the final graph.\n\n return svg;\n};\n", "import type { FlowchartDiagramConfig } from '../config.type.js';\n\nexport const getSubGraphTitleMargins = ({\n flowchart,\n}: {\n flowchart: FlowchartDiagramConfig;\n}): {\n subGraphTitleTopMargin: number;\n subGraphTitleBottomMargin: number;\n subGraphTitleTotalMargin: number;\n} => {\n const subGraphTitleTopMargin = flowchart?.subGraphTitleMargin?.top ?? 0;\n const subGraphTitleBottomMargin = flowchart?.subGraphTitleMargin?.bottom ?? 0;\n const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin;\n\n return {\n subGraphTitleTopMargin,\n subGraphTitleBottomMargin,\n subGraphTitleTotalMargin,\n };\n};\n", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { evaluate } from '../../diagrams/common/common.js';\nimport { log } from '../../logger.js';\nimport { getSubGraphTitleMargins } from '../../utils/subGraphTitleMargins.js';\nimport { select } from 'd3';\nimport rough from 'roughjs';\nimport { createText } from '../createText.ts';\nimport intersectRect from '../rendering-elements/intersect/intersect-rect.js';\nimport createLabel from './createLabel.js';\nimport { createRoundedRectPathD } from './shapes/roundedRectPath.ts';\nimport { styles2String, userNodeOverrides } from './shapes/handDrawnShapeStyles.js';\n\nconst rect = async (parent, node) => {\n log.info('Creating subgraph rect for ', node.id, node);\n const siteConfig = getConfig();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { clusterBkg, clusterBorder } = themeVariables;\n\n const { labelStyles, nodeStyles, borderStyles, backgroundStyles } = styles2String(node);\n\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', 'cluster ' + node.cssClasses)\n .attr('id', node.id)\n .attr('data-look', node.look);\n\n const useHtmlLabels = evaluate(siteConfig.flowchart.htmlLabels);\n\n // Create the label and insert it after the rect\n const labelEl = shapeSvg.insert('g').attr('class', 'cluster-label ');\n\n const text = await createText(labelEl, node.label, {\n style: node.labelStyle,\n useHtmlLabels,\n isNode: true,\n });\n\n // Get the size of the label\n let bbox = text.getBBox();\n\n if (evaluate(siteConfig.flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n\n const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width;\n if (node.width <= bbox.width + node.padding) {\n node.diff = (width - node.width) / 2 - node.padding;\n } else {\n node.diff = -node.padding;\n }\n\n const height = node.height;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n\n log.trace('Data ', node, JSON.stringify(node));\n let rect;\n if (node.look === 'handDrawn') {\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n roughness: 0.7,\n fill: clusterBkg,\n // fill: 'red',\n stroke: clusterBorder,\n fillWeight: 3,\n seed: handDrawnSeed,\n });\n const roughNode = rc.path(createRoundedRectPathD(x, y, width, height, 0), options);\n rect = shapeSvg.insert(() => {\n log.debug('Rough node insert CXC', roughNode);\n return roughNode;\n }, ':first-child');\n // Should we affect the options instead of doing this?\n rect.select('path:nth-child(2)').attr('style', borderStyles.join(';'));\n rect.select('path').attr('style', backgroundStyles.join(';').replace('fill', 'stroke'));\n } else {\n // add the rect\n rect = shapeSvg.insert('rect', ':first-child');\n // center the rect around its coordinate\n rect\n .attr('style', nodeStyles)\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('x', x)\n .attr('y', y)\n .attr('width', width)\n .attr('height', height);\n }\n const { subGraphTitleTopMargin } = getSubGraphTitleMargins(siteConfig);\n labelEl.attr(\n 'transform',\n // This puts the label on top of the box instead of inside it\n `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})`\n );\n\n if (labelStyles) {\n const span = labelEl.select('span');\n if (span) {\n span.attr('style', labelStyles);\n }\n }\n // Center the label\n\n const rectBox = rect.node().getBBox();\n node.offsetX = 0;\n node.width = rectBox.width;\n node.height = rectBox.height;\n // Used by layout engine to position subgraph in parent\n node.offsetY = bbox.height - node.padding / 2;\n\n node.intersect = function (point) {\n return intersectRect(node, point);\n };\n\n return { cluster: shapeSvg, labelBBox: bbox };\n};\n\n/**\n * Non visible cluster where the note is group with its\n *\n * @param {any} parent\n * @param {any} node\n * @returns {any} ShapeSvg\n */\nconst noteGroup = (parent, node) => {\n // Add outer g element\n const shapeSvg = parent.insert('g').attr('class', 'note-cluster').attr('id', node.id);\n\n // add the rect\n const rect = shapeSvg.insert('rect', ':first-child');\n\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n\n // center the rect around its coordinate\n rect\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('x', node.x - node.width / 2 - halfPadding)\n .attr('y', node.y - node.height / 2 - halfPadding)\n .attr('width', node.width + padding)\n .attr('height', node.height + padding)\n .attr('fill', 'none');\n\n const rectBox = rect.node().getBBox();\n node.width = rectBox.width;\n node.height = rectBox.height;\n\n node.intersect = function (point) {\n return intersectRect(node, point);\n };\n\n return { cluster: shapeSvg, labelBBox: { width: 0, height: 0 } };\n};\n\nconst roundedWithTitle = async (parent, node) => {\n const siteConfig = getConfig();\n\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { altBackground, compositeBackground, compositeTitleBackground, nodeBorder } =\n themeVariables;\n\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', node.cssClasses)\n .attr('id', node.id)\n .attr('data-id', node.id)\n .attr('data-look', node.look);\n\n // add the rect\n const outerRectG = shapeSvg.insert('g', ':first-child');\n\n // Create the label and insert it after the rect\n const label = shapeSvg.insert('g').attr('class', 'cluster-label');\n let innerRect = shapeSvg.append('rect');\n\n const text = label\n .node()\n .appendChild(await createLabel(node.label, node.labelStyle, undefined, true));\n\n // Get the size of the label\n let bbox = text.getBBox();\n\n if (evaluate(siteConfig.flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n\n // Rounded With Title\n const padding = 0 * node.padding;\n const halfPadding = padding / 2;\n\n const width =\n (node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width) + padding;\n if (node.width <= bbox.width + node.padding) {\n node.diff = (width - node.width) / 2 - node.padding;\n } else {\n node.diff = -node.padding;\n }\n\n const height = node.height + padding;\n // const height = node.height + padding;\n const innerHeight = node.height + padding - bbox.height - 6;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n node.width = width;\n const innerY = node.y - node.height / 2 - halfPadding + bbox.height + 2;\n\n // add the rect\n let rect;\n if (node.look === 'handDrawn') {\n const isAlt = node.cssClasses.includes('statediagram-cluster-alt');\n const rc = rough.svg(shapeSvg);\n const roughOuterNode =\n node.rx || node.ry\n ? rc.path(createRoundedRectPathD(x, y, width, height, 10), {\n roughness: 0.7,\n fill: compositeTitleBackground,\n fillStyle: 'solid',\n stroke: nodeBorder,\n seed: handDrawnSeed,\n })\n : rc.rectangle(x, y, width, height, { seed: handDrawnSeed });\n\n rect = shapeSvg.insert(() => roughOuterNode, ':first-child');\n const roughInnerNode = rc.rectangle(x, innerY, width, innerHeight, {\n fill: isAlt ? altBackground : compositeBackground,\n fillStyle: isAlt ? 'hachure' : 'solid',\n stroke: nodeBorder,\n seed: handDrawnSeed,\n });\n\n rect = shapeSvg.insert(() => roughOuterNode, ':first-child');\n innerRect = shapeSvg.insert(() => roughInnerNode);\n } else {\n rect = outerRectG.insert('rect', ':first-child');\n const outerRectClass = 'outer';\n\n // center the rect around its coordinate\n rect\n .attr('class', outerRectClass)\n .attr('x', x)\n .attr('y', y)\n .attr('width', width)\n .attr('height', height)\n .attr('data-look', node.look);\n innerRect\n .attr('class', 'inner')\n .attr('x', x)\n .attr('y', innerY)\n .attr('width', width)\n .attr('height', innerHeight);\n }\n\n label.attr(\n 'transform',\n `translate(${node.x - bbox.width / 2}, ${y + 1 - (evaluate(siteConfig.flowchart.htmlLabels) ? 0 : 3)})`\n );\n\n const rectBox = rect.node().getBBox();\n node.height = rectBox.height;\n node.offsetX = 0;\n // Used by layout engine to position subgraph in parent\n node.offsetY = bbox.height - node.padding / 2;\n node.labelBBox = bbox;\n\n node.intersect = function (point) {\n return intersectRect(node, point);\n };\n\n return { cluster: shapeSvg, labelBBox: bbox };\n};\nconst kanbanSection = async (parent, node) => {\n log.info('Creating subgraph rect for ', node.id, node);\n const siteConfig = getConfig();\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { clusterBkg, clusterBorder } = themeVariables;\n\n const { labelStyles, nodeStyles, borderStyles, backgroundStyles } = styles2String(node);\n\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', 'cluster ' + node.cssClasses)\n .attr('id', node.id)\n .attr('data-look', node.look);\n\n const useHtmlLabels = evaluate(siteConfig.flowchart.htmlLabels);\n\n // Create the label and insert it after the rect\n const labelEl = shapeSvg.insert('g').attr('class', 'cluster-label ');\n\n const text = await createText(labelEl, node.label, {\n style: node.labelStyle,\n useHtmlLabels,\n isNode: true,\n width: node.width,\n });\n\n // Get the size of the label\n let bbox = text.getBBox();\n\n if (evaluate(siteConfig.flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n\n const width = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width;\n if (node.width <= bbox.width + node.padding) {\n node.diff = (width - node.width) / 2 - node.padding;\n } else {\n node.diff = -node.padding;\n }\n\n const height = node.height;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n\n log.trace('Data ', node, JSON.stringify(node));\n let rect;\n if (node.look === 'handDrawn') {\n // @ts-ignore TODO: Fix rough typings\n const rc = rough.svg(shapeSvg);\n const options = userNodeOverrides(node, {\n roughness: 0.7,\n fill: clusterBkg,\n // fill: 'red',\n stroke: clusterBorder,\n fillWeight: 4,\n seed: handDrawnSeed,\n });\n const roughNode = rc.path(createRoundedRectPathD(x, y, width, height, node.rx), options);\n rect = shapeSvg.insert(() => {\n log.debug('Rough node insert CXC', roughNode);\n return roughNode;\n }, ':first-child');\n // Should we affect the options instead of doing this?\n rect.select('path:nth-child(2)').attr('style', borderStyles.join(';'));\n rect.select('path').attr('style', backgroundStyles.join(';').replace('fill', 'stroke'));\n } else {\n // add the rect\n rect = shapeSvg.insert('rect', ':first-child');\n // center the rect around its coordinate\n rect\n .attr('style', nodeStyles)\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('x', x)\n .attr('y', y)\n .attr('width', width)\n .attr('height', height);\n }\n const { subGraphTitleTopMargin } = getSubGraphTitleMargins(siteConfig);\n labelEl.attr(\n 'transform',\n // This puts the label on top of the box instead of inside it\n `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})`\n );\n\n if (labelStyles) {\n const span = labelEl.select('span');\n if (span) {\n span.attr('style', labelStyles);\n }\n }\n // Center the label\n\n const rectBox = rect.node().getBBox();\n node.offsetX = 0;\n node.width = rectBox.width;\n node.height = rectBox.height;\n // Used by layout engine to position subgraph in parent\n node.offsetY = bbox.height - node.padding / 2;\n\n node.intersect = function (point) {\n return intersectRect(node, point);\n };\n\n return { cluster: shapeSvg, labelBBox: bbox };\n};\nconst divider = (parent, node) => {\n const siteConfig = getConfig();\n\n const { themeVariables, handDrawnSeed } = siteConfig;\n const { nodeBorder } = themeVariables;\n\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', node.cssClasses)\n .attr('id', node.id)\n .attr('data-look', node.look);\n\n // add the rect\n const outerRectG = shapeSvg.insert('g', ':first-child');\n\n const padding = 0 * node.padding;\n\n const width = node.width + padding;\n\n node.diff = -node.padding;\n\n const height = node.height + padding;\n // const height = node.height + padding;\n const x = node.x - width / 2;\n const y = node.y - height / 2;\n node.width = width;\n\n // add the rect\n let rect;\n if (node.look === 'handDrawn') {\n const rc = rough.svg(shapeSvg);\n const roughOuterNode = rc.rectangle(x, y, width, height, {\n fill: 'lightgrey',\n roughness: 0.5,\n strokeLineDash: [5],\n stroke: nodeBorder,\n seed: handDrawnSeed,\n });\n\n rect = shapeSvg.insert(() => roughOuterNode, ':first-child');\n } else {\n rect = outerRectG.insert('rect', ':first-child');\n const outerRectClass = 'divider';\n\n // center the rect around its coordinate\n rect\n .attr('class', outerRectClass)\n .attr('x', x)\n .attr('y', y)\n .attr('width', width)\n .attr('height', height)\n .attr('data-look', node.look);\n }\n\n const rectBox = rect.node().getBBox();\n node.height = rectBox.height;\n node.offsetX = 0;\n // Used by layout engine to position subgraph in parent\n node.offsetY = 0;\n\n node.intersect = function (point) {\n return intersectRect(node, point);\n };\n\n return { cluster: shapeSvg, labelBBox: {} };\n};\n\nconst squareRect = rect;\nconst shapes = {\n rect,\n squareRect,\n roundedWithTitle,\n noteGroup,\n divider,\n kanbanSection,\n};\n\nlet clusterElems = new Map();\n\n/**\n * @typedef {keyof typeof shapes} ClusterShapeID\n */\n\n/**\n * @param {import('../types.js').ClusterNode} node - Shape defaults to 'rect'\n */\nexport const insertCluster = async (elem, node) => {\n const shape = node.shape || 'rect';\n const cluster = await shapes[shape](elem, node);\n clusterElems.set(node.id, cluster);\n return cluster;\n};\n\nexport const getClusterTitleWidth = (elem, node) => {\n const label = createLabel(node.label, node.labelStyle, undefined, true);\n elem.node().appendChild(label);\n const width = label.getBBox().width;\n elem.node().removeChild(label);\n return width;\n};\n\nexport const clear = () => {\n clusterElems = new Map();\n};\n\nexport const positionCluster = (node) => {\n log.info(\n 'Position cluster (' +\n node.id +\n ', ' +\n node.x +\n ', ' +\n node.y +\n ') (' +\n node?.width +\n ', ' +\n node?.height +\n ')',\n clusterElems.get(node.id)\n );\n const el = clusterElems.get(node.id);\n el.cluster.attr('transform', 'translate(' + node.x + ', ' + node.y + ')');\n};\n", "import type { EdgeData, Point } from '../types.js';\n\n// We need to draw the lines a bit shorter to avoid drawing\n// under any transparent markers.\n// The offsets are calculated from the markers' dimensions.\nexport const markerOffsets = {\n aggregation: 17.25,\n extension: 17.25,\n composition: 17.25,\n dependency: 6,\n lollipop: 13.5,\n arrow_point: 4,\n //arrow_cross: 24,\n} as const;\n\n// We need to draw the lines a bit shorter to avoid drawing\n// under any transparent markers.\n// The offsets are calculated from the markers' dimensions.\nexport const markerOffsets2 = {\n arrow_point: 9,\n arrow_cross: 12.5,\n arrow_circle: 12.5,\n} as const;\n\n/**\n * Calculate the deltas and angle between two points\n * @param point1 - First point\n * @param point2 - Second point\n * @returns The angle, deltaX and deltaY\n */\nfunction calculateDeltaAndAngle(\n point1?: Point | [number, number],\n point2?: Point | [number, number]\n): { angle: number; deltaX: number; deltaY: number } {\n if (point1 === undefined || point2 === undefined) {\n return { angle: 0, deltaX: 0, deltaY: 0 };\n }\n point1 = pointTransformer(point1);\n point2 = pointTransformer(point2);\n const [x1, y1] = [point1.x, point1.y];\n const [x2, y2] = [point2.x, point2.y];\n const deltaX = x2 - x1;\n const deltaY = y2 - y1;\n return { angle: Math.atan(deltaY / deltaX), deltaX, deltaY };\n}\n\nconst pointTransformer = (data: Point | [number, number]) => {\n if (Array.isArray(data)) {\n return { x: data[0], y: data[1] };\n }\n return data;\n};\n\nexport const getLineFunctionsWithOffset = (\n edge: Pick\n) => {\n return {\n x: function (\n this: void,\n d: Point | [number, number],\n i: number,\n data: (Point | [number, number])[]\n ) {\n let offset = 0;\n const DIRECTION =\n pointTransformer(data[0]).x < pointTransformer(data[data.length - 1]).x ? 'left' : 'right';\n if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) {\n const { angle, deltaX } = calculateDeltaAndAngle(data[0], data[1]);\n offset =\n markerOffsets[edge.arrowTypeStart as keyof typeof markerOffsets] *\n Math.cos(angle) *\n (deltaX >= 0 ? 1 : -1);\n } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) {\n const { angle, deltaX } = calculateDeltaAndAngle(\n data[data.length - 1],\n data[data.length - 2]\n );\n offset =\n markerOffsets[edge.arrowTypeEnd as keyof typeof markerOffsets] *\n Math.cos(angle) *\n (deltaX >= 0 ? 1 : -1);\n }\n\n const differenceToEnd = Math.abs(\n pointTransformer(d).x - pointTransformer(data[data.length - 1]).x\n );\n const differenceInYEnd = Math.abs(\n pointTransformer(d).y - pointTransformer(data[data.length - 1]).y\n );\n const differenceToStart = Math.abs(pointTransformer(d).x - pointTransformer(data[0]).x);\n const differenceInYStart = Math.abs(pointTransformer(d).y - pointTransformer(data[0]).y);\n const startMarkerHeight = markerOffsets[edge.arrowTypeStart as keyof typeof markerOffsets];\n const endMarkerHeight = markerOffsets[edge.arrowTypeEnd as keyof typeof markerOffsets];\n const extraRoom = 1;\n\n // Adjust the offset if the difference is smaller than the marker height\n if (\n differenceToEnd < endMarkerHeight &&\n differenceToEnd > 0 &&\n differenceInYEnd < endMarkerHeight\n ) {\n let adjustment = endMarkerHeight + extraRoom - differenceToEnd;\n adjustment *= DIRECTION === 'right' ? -1 : 1;\n // Adjust the offset by the amount needed to fit the marker\n offset -= adjustment;\n }\n\n if (\n differenceToStart < startMarkerHeight &&\n differenceToStart > 0 &&\n differenceInYStart < startMarkerHeight\n ) {\n let adjustment = startMarkerHeight + extraRoom - differenceToStart;\n adjustment *= DIRECTION === 'right' ? -1 : 1;\n offset += adjustment;\n }\n\n return pointTransformer(d).x + offset;\n },\n y: function (\n this: void,\n d: Point | [number, number],\n i: number,\n data: (Point | [number, number])[]\n ) {\n let offset = 0;\n const DIRECTION =\n pointTransformer(data[0]).y < pointTransformer(data[data.length - 1]).y ? 'down' : 'up';\n if (i === 0 && Object.hasOwn(markerOffsets, edge.arrowTypeStart)) {\n const { angle, deltaY } = calculateDeltaAndAngle(data[0], data[1]);\n offset =\n markerOffsets[edge.arrowTypeStart as keyof typeof markerOffsets] *\n Math.abs(Math.sin(angle)) *\n (deltaY >= 0 ? 1 : -1);\n } else if (i === data.length - 1 && Object.hasOwn(markerOffsets, edge.arrowTypeEnd)) {\n const { angle, deltaY } = calculateDeltaAndAngle(\n data[data.length - 1],\n data[data.length - 2]\n );\n offset =\n markerOffsets[edge.arrowTypeEnd as keyof typeof markerOffsets] *\n Math.abs(Math.sin(angle)) *\n (deltaY >= 0 ? 1 : -1);\n }\n\n const differenceToEnd = Math.abs(\n pointTransformer(d).y - pointTransformer(data[data.length - 1]).y\n );\n const differenceInXEnd = Math.abs(\n pointTransformer(d).x - pointTransformer(data[data.length - 1]).x\n );\n const differenceToStart = Math.abs(pointTransformer(d).y - pointTransformer(data[0]).y);\n const differenceInXStart = Math.abs(pointTransformer(d).x - pointTransformer(data[0]).x);\n const startMarkerHeight = markerOffsets[edge.arrowTypeStart as keyof typeof markerOffsets];\n const endMarkerHeight = markerOffsets[edge.arrowTypeEnd as keyof typeof markerOffsets];\n const extraRoom = 1;\n\n // Adjust the offset if the difference is smaller than the marker height\n if (\n differenceToEnd < endMarkerHeight &&\n differenceToEnd > 0 &&\n differenceInXEnd < endMarkerHeight\n ) {\n let adjustment = endMarkerHeight + extraRoom - differenceToEnd;\n adjustment *= DIRECTION === 'up' ? -1 : 1;\n // Adjust the offset by the amount needed to fit the marker\n offset -= adjustment;\n }\n\n if (\n differenceToStart < startMarkerHeight &&\n differenceToStart > 0 &&\n differenceInXStart < startMarkerHeight\n ) {\n let adjustment = startMarkerHeight + extraRoom - differenceToStart;\n adjustment *= DIRECTION === 'up' ? -1 : 1;\n offset += adjustment;\n }\n return pointTransformer(d).y + offset;\n },\n };\n};\n\nif (import.meta.vitest) {\n const { it, expect, describe } = import.meta.vitest;\n describe('calculateDeltaAndAngle', () => {\n it('should calculate the angle and deltas between two points', () => {\n expect(calculateDeltaAndAngle([0, 0], [0, 1])).toStrictEqual({\n angle: 1.5707963267948966,\n deltaX: 0,\n deltaY: 1,\n });\n expect(calculateDeltaAndAngle([1, 0], [0, -1])).toStrictEqual({\n angle: 0.7853981633974483,\n deltaX: -1,\n deltaY: -1,\n });\n expect(calculateDeltaAndAngle({ x: 1, y: 0 }, [0, -1])).toStrictEqual({\n angle: 0.7853981633974483,\n deltaX: -1,\n deltaY: -1,\n });\n expect(calculateDeltaAndAngle({ x: 1, y: 0 }, { x: 1, y: 0 })).toStrictEqual({\n angle: NaN,\n deltaX: 0,\n deltaY: 0,\n });\n });\n\n it('should calculate the angle and deltas if one point in undefined', () => {\n expect(calculateDeltaAndAngle(undefined, [0, 1])).toStrictEqual({\n angle: 0,\n deltaX: 0,\n deltaY: 0,\n });\n expect(calculateDeltaAndAngle([0, 1], undefined)).toStrictEqual({\n angle: 0,\n deltaX: 0,\n deltaY: 0,\n });\n });\n });\n}\n", "import type { SVG } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport type { EdgeData } from '../../types.js';\n/**\n * Adds SVG markers to a path element based on the arrow types specified in the edge.\n *\n * @param svgPath - The SVG path element to add markers to.\n * @param edge - The edge data object containing the arrow types.\n * @param url - The URL of the SVG marker definitions.\n * @param id - The ID prefix for the SVG marker definitions.\n * @param diagramType - The type of diagram being rendered.\n */\nexport const addEdgeMarkers = (\n svgPath: SVG,\n edge: Pick,\n url: string,\n id: string,\n diagramType: string,\n strokeColor?: string\n) => {\n if (edge.arrowTypeStart) {\n addEdgeMarker(svgPath, 'start', edge.arrowTypeStart, url, id, diagramType, strokeColor);\n }\n if (edge.arrowTypeEnd) {\n addEdgeMarker(svgPath, 'end', edge.arrowTypeEnd, url, id, diagramType, strokeColor);\n }\n};\n\nconst arrowTypesMap = {\n arrow_cross: { type: 'cross', fill: false },\n arrow_point: { type: 'point', fill: true },\n arrow_barb: { type: 'barb', fill: true },\n arrow_circle: { type: 'circle', fill: false },\n aggregation: { type: 'aggregation', fill: false },\n extension: { type: 'extension', fill: false },\n composition: { type: 'composition', fill: true },\n dependency: { type: 'dependency', fill: true },\n lollipop: { type: 'lollipop', fill: false },\n only_one: { type: 'onlyOne', fill: false },\n zero_or_one: { type: 'zeroOrOne', fill: false },\n one_or_more: { type: 'oneOrMore', fill: false },\n zero_or_more: { type: 'zeroOrMore', fill: false },\n requirement_arrow: { type: 'requirement_arrow', fill: false },\n requirement_contains: { type: 'requirement_contains', fill: false },\n} as const;\n\nconst addEdgeMarker = (\n svgPath: SVG,\n position: 'start' | 'end',\n arrowType: string,\n url: string,\n id: string,\n diagramType: string,\n strokeColor?: string\n) => {\n const arrowTypeInfo = arrowTypesMap[arrowType as keyof typeof arrowTypesMap];\n\n if (!arrowTypeInfo) {\n log.warn(`Unknown arrow type: ${arrowType}`);\n return; // unknown arrow type, ignore\n }\n\n const endMarkerType = arrowTypeInfo.type;\n const suffix = position === 'start' ? 'Start' : 'End';\n const originalMarkerId = `${id}_${diagramType}-${endMarkerType}${suffix}`;\n\n // If stroke color is specified and non-empty, create or use a colored variant of the marker\n if (strokeColor && strokeColor.trim() !== '') {\n // Create a sanitized color value for use in IDs\n const colorId = strokeColor.replace(/[^\\dA-Za-z]/g, '_');\n const coloredMarkerId = `${originalMarkerId}_${colorId}`;\n\n // Check if the colored marker already exists\n if (!document.getElementById(coloredMarkerId)) {\n // Get the original marker\n const originalMarker = document.getElementById(originalMarkerId);\n if (originalMarker) {\n // Clone the marker and create colored version\n const coloredMarker = originalMarker.cloneNode(true) as Element;\n coloredMarker.id = coloredMarkerId;\n\n // Apply colors to the paths inside the marker\n const paths = coloredMarker.querySelectorAll('path, circle, line');\n paths.forEach((path) => {\n path.setAttribute('stroke', strokeColor);\n\n // Apply fill only to markers that should be filled\n if (arrowTypeInfo.fill) {\n path.setAttribute('fill', strokeColor);\n }\n });\n\n // Add the new colored marker to the defs section\n originalMarker.parentNode?.appendChild(coloredMarker);\n }\n }\n\n // Use the colored marker\n svgPath.attr(`marker-${position}`, `url(${url}#${coloredMarkerId})`);\n } else {\n // Always use the original marker for unstyled edges\n svgPath.attr(`marker-${position}`, `url(${url}#${originalMarkerId})`);\n }\n};\n", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { evaluate } from '../../diagrams/common/common.js';\nimport { log } from '../../logger.js';\nimport { createText } from '../createText.js';\nimport utils from '../../utils.js';\nimport {\n getLineFunctionsWithOffset,\n markerOffsets,\n markerOffsets2,\n} from '../../utils/lineWithOffset.js';\nimport { getSubGraphTitleMargins } from '../../utils/subGraphTitleMargins.js';\n\nimport {\n curveBasis,\n curveLinear,\n curveCardinal,\n curveBumpX,\n curveBumpY,\n curveCatmullRom,\n curveMonotoneX,\n curveMonotoneY,\n curveNatural,\n curveStep,\n curveStepAfter,\n curveStepBefore,\n line,\n select,\n} from 'd3';\nimport rough from 'roughjs';\nimport createLabel from './createLabel.js';\nimport { addEdgeMarkers } from './edgeMarker.ts';\nimport { isLabelStyle, styles2String } from './shapes/handDrawnShapeStyles.js';\n\nexport const edgeLabels = new Map();\nexport const terminalLabels = new Map();\n\nexport const clear = () => {\n edgeLabels.clear();\n terminalLabels.clear();\n};\n\nexport const getLabelStyles = (styleArray) => {\n let styles = styleArray ? styleArray.reduce((acc, style) => acc + ';' + style, '') : '';\n return styles;\n};\n\nexport const insertEdgeLabel = async (elem, edge) => {\n let useHtmlLabels = evaluate(getConfig().flowchart.htmlLabels);\n\n const { labelStyles } = styles2String(edge);\n edge.labelStyle = labelStyles;\n const labelElement = await createText(elem, edge.label, {\n style: edge.labelStyle,\n useHtmlLabels,\n addSvgBackground: true,\n isNode: false,\n });\n log.info('abc82', edge, edge.labelType);\n\n // Create outer g, edgeLabel, this will be positioned after graph layout\n const edgeLabel = elem.insert('g').attr('class', 'edgeLabel');\n\n // Create inner g, label, this will be positioned now for centering the text\n const label = edgeLabel.insert('g').attr('class', 'label').attr('data-id', edge.id);\n label.node().appendChild(labelElement);\n\n // Center the label\n let bbox = labelElement.getBBox();\n if (useHtmlLabels) {\n const div = labelElement.children[0];\n const dv = select(labelElement);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n label.attr('transform', 'translate(' + -bbox.width / 2 + ', ' + -bbox.height / 2 + ')');\n\n // Make element accessible by id for positioning\n edgeLabels.set(edge.id, edgeLabel);\n\n // Update the abstract data of the edge with the new information about its width and height\n edge.width = bbox.width;\n edge.height = bbox.height;\n\n let fo;\n if (edge.startLabelLeft) {\n // Create the actual text element\n const startLabelElement = await createLabel(\n edge.startLabelLeft,\n getLabelStyles(edge.labelStyle)\n );\n const startEdgeLabelLeft = elem.insert('g').attr('class', 'edgeTerminals');\n const inner = startEdgeLabelLeft.insert('g').attr('class', 'inner');\n fo = inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')');\n if (!terminalLabels.get(edge.id)) {\n terminalLabels.set(edge.id, {});\n }\n terminalLabels.get(edge.id).startLeft = startEdgeLabelLeft;\n setTerminalWidth(fo, edge.startLabelLeft);\n }\n if (edge.startLabelRight) {\n // Create the actual text element\n const startLabelElement = await createLabel(\n edge.startLabelRight,\n getLabelStyles(edge.labelStyle)\n );\n const startEdgeLabelRight = elem.insert('g').attr('class', 'edgeTerminals');\n const inner = startEdgeLabelRight.insert('g').attr('class', 'inner');\n fo = startEdgeLabelRight.node().appendChild(startLabelElement);\n inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')');\n\n if (!terminalLabels.get(edge.id)) {\n terminalLabels.set(edge.id, {});\n }\n terminalLabels.get(edge.id).startRight = startEdgeLabelRight;\n setTerminalWidth(fo, edge.startLabelRight);\n }\n if (edge.endLabelLeft) {\n // Create the actual text element\n const endLabelElement = await createLabel(edge.endLabelLeft, getLabelStyles(edge.labelStyle));\n const endEdgeLabelLeft = elem.insert('g').attr('class', 'edgeTerminals');\n const inner = endEdgeLabelLeft.insert('g').attr('class', 'inner');\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')');\n\n endEdgeLabelLeft.node().appendChild(endLabelElement);\n\n if (!terminalLabels.get(edge.id)) {\n terminalLabels.set(edge.id, {});\n }\n terminalLabels.get(edge.id).endLeft = endEdgeLabelLeft;\n setTerminalWidth(fo, edge.endLabelLeft);\n }\n if (edge.endLabelRight) {\n // Create the actual text element\n const endLabelElement = await createLabel(edge.endLabelRight, getLabelStyles(edge.labelStyle));\n const endEdgeLabelRight = elem.insert('g').attr('class', 'edgeTerminals');\n const inner = endEdgeLabelRight.insert('g').attr('class', 'inner');\n\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')');\n\n endEdgeLabelRight.node().appendChild(endLabelElement);\n if (!terminalLabels.get(edge.id)) {\n terminalLabels.set(edge.id, {});\n }\n terminalLabels.get(edge.id).endRight = endEdgeLabelRight;\n setTerminalWidth(fo, edge.endLabelRight);\n }\n return labelElement;\n};\n\n/**\n * @param {any} fo\n * @param {any} value\n */\nfunction setTerminalWidth(fo, value) {\n if (getConfig().flowchart.htmlLabels && fo) {\n fo.style.width = value.length * 9 + 'px';\n fo.style.height = '12px';\n }\n}\n\nexport const positionEdgeLabel = (edge, paths) => {\n log.debug('Moving label abc88 ', edge.id, edge.label, edgeLabels.get(edge.id), paths);\n let path = paths.updatedPath ? paths.updatedPath : paths.originalPath;\n const siteConfig = getConfig();\n const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig);\n if (edge.label) {\n const el = edgeLabels.get(edge.id);\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcLabelPosition(path);\n log.debug(\n 'Moving label ' + edge.label + ' from (',\n x,\n ',',\n y,\n ') to (',\n pos.x,\n ',',\n pos.y,\n ') abc88'\n );\n if (paths.updatedPath) {\n x = pos.x;\n y = pos.y;\n }\n }\n el.attr('transform', `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`);\n }\n\n if (edge.startLabelLeft) {\n const el = terminalLabels.get(edge.id).startLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, 'start_left', path);\n x = pos.x;\n y = pos.y;\n }\n el.attr('transform', `translate(${x}, ${y})`);\n }\n if (edge.startLabelRight) {\n const el = terminalLabels.get(edge.id).startRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcTerminalLabelPosition(\n edge.arrowTypeStart ? 10 : 0,\n 'start_right',\n path\n );\n x = pos.x;\n y = pos.y;\n }\n el.attr('transform', `translate(${x}, ${y})`);\n }\n if (edge.endLabelLeft) {\n const el = terminalLabels.get(edge.id).endLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, 'end_left', path);\n x = pos.x;\n y = pos.y;\n }\n el.attr('transform', `translate(${x}, ${y})`);\n }\n if (edge.endLabelRight) {\n const el = terminalLabels.get(edge.id).endRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, 'end_right', path);\n x = pos.x;\n y = pos.y;\n }\n el.attr('transform', `translate(${x}, ${y})`);\n }\n};\n\nconst outsideNode = (node, point) => {\n const x = node.x;\n const y = node.y;\n const dx = Math.abs(point.x - x);\n const dy = Math.abs(point.y - y);\n const w = node.width / 2;\n const h = node.height / 2;\n return dx >= w || dy >= h;\n};\n\nexport const intersection = (node, outsidePoint, insidePoint) => {\n log.debug(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(outsidePoint)}\n insidePoint : ${JSON.stringify(insidePoint)}\n node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`);\n const x = node.x;\n const y = node.y;\n\n const dx = Math.abs(x - insidePoint.x);\n const w = node.width / 2;\n let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx;\n const h = node.height / 2;\n\n const Q = Math.abs(outsidePoint.y - insidePoint.y);\n const R = Math.abs(outsidePoint.x - insidePoint.x);\n\n if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) {\n // Intersection is top or bottom of rect.\n let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y;\n r = (R * q) / Q;\n const res = {\n x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r,\n y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q,\n };\n\n if (r === 0) {\n res.x = outsidePoint.x;\n res.y = outsidePoint.y;\n }\n if (R === 0) {\n res.x = outsidePoint.x;\n }\n if (Q === 0) {\n res.y = outsidePoint.y;\n }\n\n log.debug(`abc89 top/bottom calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res);\n\n return res;\n } else {\n // Intersection on sides of rect\n if (insidePoint.x < outsidePoint.x) {\n r = outsidePoint.x - w - x;\n } else {\n r = x - w - outsidePoint.x;\n }\n let q = (Q * r) / R;\n let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r;\n let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q;\n log.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y });\n if (r === 0) {\n _x = outsidePoint.x;\n _y = outsidePoint.y;\n }\n if (R === 0) {\n _x = outsidePoint.x;\n }\n if (Q === 0) {\n _y = outsidePoint.y;\n }\n\n return { x: _x, y: _y };\n }\n};\n\nconst cutPathAtIntersect = (_points, boundaryNode) => {\n log.warn('abc88 cutPathAtIntersect', _points, boundaryNode);\n let points = [];\n let lastPointOutside = _points[0];\n let isInside = false;\n _points.forEach((point) => {\n log.info('abc88 checking point', point, boundaryNode);\n\n if (!outsideNode(boundaryNode, point) && !isInside) {\n const inter = intersection(boundaryNode, lastPointOutside, point);\n log.debug('abc88 inside', point, lastPointOutside, inter);\n log.debug('abc88 intersection', inter, boundaryNode);\n\n let pointPresent = false;\n points.forEach((p) => {\n pointPresent = pointPresent || (p.x === inter.x && p.y === inter.y);\n });\n\n if (!points.some((e) => e.x === inter.x && e.y === inter.y)) {\n points.push(inter);\n } else {\n log.warn('abc88 no intersect', inter, points);\n }\n isInside = true;\n } else {\n log.warn('abc88 outside', point, lastPointOutside);\n lastPointOutside = point;\n if (!isInside) {\n points.push(point);\n }\n }\n });\n log.debug('returning points', points);\n return points;\n};\n\nfunction extractCornerPoints(points) {\n const cornerPoints = [];\n const cornerPointPositions = [];\n for (let i = 1; i < points.length - 1; i++) {\n const prev = points[i - 1];\n const curr = points[i];\n const next = points[i + 1];\n if (\n prev.x === curr.x &&\n curr.y === next.y &&\n Math.abs(curr.x - next.x) > 5 &&\n Math.abs(curr.y - prev.y) > 5\n ) {\n cornerPoints.push(curr);\n cornerPointPositions.push(i);\n } else if (\n prev.y === curr.y &&\n curr.x === next.x &&\n Math.abs(curr.x - prev.x) > 5 &&\n Math.abs(curr.y - next.y) > 5\n ) {\n cornerPoints.push(curr);\n cornerPointPositions.push(i);\n }\n }\n return { cornerPoints, cornerPointPositions };\n}\n\nconst findAdjacentPoint = function (pointA, pointB, distance) {\n const xDiff = pointB.x - pointA.x;\n const yDiff = pointB.y - pointA.y;\n const length = Math.sqrt(xDiff * xDiff + yDiff * yDiff);\n const ratio = distance / length;\n return { x: pointB.x - ratio * xDiff, y: pointB.y - ratio * yDiff };\n};\n\nconst fixCorners = function (lineData) {\n const { cornerPointPositions } = extractCornerPoints(lineData);\n const newLineData = [];\n for (let i = 0; i < lineData.length; i++) {\n if (cornerPointPositions.includes(i)) {\n const prevPoint = lineData[i - 1];\n const nextPoint = lineData[i + 1];\n const cornerPoint = lineData[i];\n\n const newPrevPoint = findAdjacentPoint(prevPoint, cornerPoint, 5);\n const newNextPoint = findAdjacentPoint(nextPoint, cornerPoint, 5);\n\n const xDiff = newNextPoint.x - newPrevPoint.x;\n const yDiff = newNextPoint.y - newPrevPoint.y;\n newLineData.push(newPrevPoint);\n\n const a = Math.sqrt(2) * 2;\n let newCornerPoint = { x: cornerPoint.x, y: cornerPoint.y };\n if (Math.abs(nextPoint.x - prevPoint.x) > 10 && Math.abs(nextPoint.y - prevPoint.y) >= 10) {\n log.debug(\n 'Corner point fixing',\n Math.abs(nextPoint.x - prevPoint.x),\n Math.abs(nextPoint.y - prevPoint.y)\n );\n const r = 5;\n if (cornerPoint.x === newPrevPoint.x) {\n newCornerPoint = {\n x: xDiff < 0 ? newPrevPoint.x - r + a : newPrevPoint.x + r - a,\n y: yDiff < 0 ? newPrevPoint.y - a : newPrevPoint.y + a,\n };\n } else {\n newCornerPoint = {\n x: xDiff < 0 ? newPrevPoint.x - a : newPrevPoint.x + a,\n y: yDiff < 0 ? newPrevPoint.y - r + a : newPrevPoint.y + r - a,\n };\n }\n } else {\n log.debug(\n 'Corner point skipping fixing',\n Math.abs(nextPoint.x - prevPoint.x),\n Math.abs(nextPoint.y - prevPoint.y)\n );\n }\n newLineData.push(newCornerPoint, newNextPoint);\n } else {\n newLineData.push(lineData[i]);\n }\n }\n return newLineData;\n};\nconst generateDashArray = (len, oValueS, oValueE) => {\n const middleLength = len - oValueS - oValueE;\n const dashLength = 2; // Length of each dash\n const gapLength = 2; // Length of each gap\n const dashGapPairLength = dashLength + gapLength;\n\n // Calculate number of complete dash-gap pairs that can fit\n const numberOfPairs = Math.floor(middleLength / dashGapPairLength);\n\n // Generate the middle pattern array\n const middlePattern = Array(numberOfPairs).fill(`${dashLength} ${gapLength}`).join(' ');\n\n // Combine all parts\n const dashArray = `0 ${oValueS} ${middlePattern} ${oValueE}`;\n\n return dashArray;\n};\nexport const insertEdge = function (\n elem,\n edge,\n clusterDb,\n diagramType,\n startNode,\n endNode,\n id,\n skipIntersect = false\n) {\n const { handDrawnSeed } = getConfig();\n let points = edge.points;\n let pointsHasChanged = false;\n const tail = startNode;\n var head = endNode;\n const edgeClassStyles = [];\n for (const key in edge.cssCompiledStyles) {\n if (isLabelStyle(key)) {\n continue;\n }\n edgeClassStyles.push(edge.cssCompiledStyles[key]);\n }\n\n log.debug('UIO intersect check', edge.points, head.x, tail.x);\n if (head.intersect && tail.intersect && !skipIntersect) {\n points = points.slice(1, edge.points.length - 1);\n points.unshift(tail.intersect(points[0]));\n log.debug(\n 'Last point UIO',\n edge.start,\n '-->',\n edge.end,\n points[points.length - 1],\n head,\n head.intersect(points[points.length - 1])\n );\n points.push(head.intersect(points[points.length - 1]));\n }\n const pointsStr = btoa(JSON.stringify(points));\n if (edge.toCluster) {\n log.info('to cluster abc88', clusterDb.get(edge.toCluster));\n points = cutPathAtIntersect(edge.points, clusterDb.get(edge.toCluster).node);\n\n pointsHasChanged = true;\n }\n\n if (edge.fromCluster) {\n log.debug(\n 'from cluster abc88',\n clusterDb.get(edge.fromCluster),\n JSON.stringify(points, null, 2)\n );\n points = cutPathAtIntersect(points.reverse(), clusterDb.get(edge.fromCluster).node).reverse();\n\n pointsHasChanged = true;\n }\n\n let lineData = points.filter((p) => !Number.isNaN(p.y));\n lineData = fixCorners(lineData);\n let curve = curveBasis;\n curve = curveLinear;\n switch (edge.curve) {\n case 'linear':\n curve = curveLinear;\n break;\n case 'basis':\n curve = curveBasis;\n break;\n case 'cardinal':\n curve = curveCardinal;\n break;\n case 'bumpX':\n curve = curveBumpX;\n break;\n case 'bumpY':\n curve = curveBumpY;\n break;\n case 'catmullRom':\n curve = curveCatmullRom;\n break;\n case 'monotoneX':\n curve = curveMonotoneX;\n break;\n case 'monotoneY':\n curve = curveMonotoneY;\n break;\n case 'natural':\n curve = curveNatural;\n break;\n case 'step':\n curve = curveStep;\n break;\n case 'stepAfter':\n curve = curveStepAfter;\n break;\n case 'stepBefore':\n curve = curveStepBefore;\n break;\n default:\n curve = curveBasis;\n }\n\n // if (edge.curve) {\n // curve = edge.curve;\n // }\n\n const { x, y } = getLineFunctionsWithOffset(edge);\n const lineFunction = line().x(x).y(y).curve(curve);\n\n let strokeClasses;\n switch (edge.thickness) {\n case 'normal':\n strokeClasses = 'edge-thickness-normal';\n break;\n case 'thick':\n strokeClasses = 'edge-thickness-thick';\n break;\n case 'invisible':\n strokeClasses = 'edge-thickness-invisible';\n break;\n default:\n strokeClasses = 'edge-thickness-normal';\n }\n switch (edge.pattern) {\n case 'solid':\n strokeClasses += ' edge-pattern-solid';\n break;\n case 'dotted':\n strokeClasses += ' edge-pattern-dotted';\n break;\n case 'dashed':\n strokeClasses += ' edge-pattern-dashed';\n break;\n default:\n strokeClasses += ' edge-pattern-solid';\n }\n let svgPath;\n let linePath =\n edge.curve === 'rounded'\n ? generateRoundedPath(applyMarkerOffsetsToPoints(lineData, edge), 5)\n : lineFunction(lineData);\n const edgeStyles = Array.isArray(edge.style) ? edge.style : [edge.style];\n let strokeColor = edgeStyles.find((style) => style?.startsWith('stroke:'));\n\n let animatedEdge = false;\n if (edge.look === 'handDrawn') {\n const rc = rough.svg(elem);\n Object.assign([], lineData);\n\n const svgPathNode = rc.path(linePath, {\n roughness: 0.3,\n seed: handDrawnSeed,\n });\n\n strokeClasses += ' transition';\n\n svgPath = select(svgPathNode)\n .select('path')\n .attr('id', edge.id)\n .attr('class', ' ' + strokeClasses + (edge.classes ? ' ' + edge.classes : ''))\n .attr('style', edgeStyles ? edgeStyles.reduce((acc, style) => acc + ';' + style, '') : '');\n let d = svgPath.attr('d');\n svgPath.attr('d', d);\n elem.node().appendChild(svgPath.node());\n } else {\n const stylesFromClasses = edgeClassStyles.join(';');\n const styles = edgeStyles ? edgeStyles.reduce((acc, style) => acc + style + ';', '') : '';\n let animationClass = '';\n if (edge.animate) {\n animationClass = ' edge-animation-fast';\n }\n if (edge.animation) {\n animationClass = ' edge-animation-' + edge.animation;\n }\n\n const pathStyle =\n (stylesFromClasses ? stylesFromClasses + ';' + styles + ';' : styles) +\n ';' +\n (edgeStyles ? edgeStyles.reduce((acc, style) => acc + ';' + style, '') : '');\n svgPath = elem\n .append('path')\n .attr('d', linePath)\n .attr('id', edge.id)\n .attr(\n 'class',\n ' ' + strokeClasses + (edge.classes ? ' ' + edge.classes : '') + (animationClass ?? '')\n )\n .attr('style', pathStyle);\n\n //eslint-disable-next-line @typescript-eslint/prefer-regexp-exec\n strokeColor = pathStyle.match(/stroke:([^;]+)/)?.[1];\n\n // Possible fix to remove eslint-disable-next-line\n //strokeColor = /stroke:([^;]+)/.exec(pathStyle)?.[1];\n\n animatedEdge =\n edge.animate === true || !!edge.animation || stylesFromClasses.includes('animation');\n const pathNode = svgPath.node();\n const len = typeof pathNode.getTotalLength === 'function' ? pathNode.getTotalLength() : 0;\n const oValueS = markerOffsets2[edge.arrowTypeStart] || 0;\n const oValueE = markerOffsets2[edge.arrowTypeEnd] || 0;\n\n if (edge.look === 'neo' && !animatedEdge) {\n const dashArray =\n edge.pattern === 'dotted' || edge.pattern === 'dashed'\n ? generateDashArray(len, oValueS, oValueE)\n : `0 ${oValueS} ${len - oValueS - oValueE} ${oValueE}`;\n\n // No offset needed because we already start with a zero-length dash that effectively sets us up for a gap at the start.\n const mOffset = `stroke-dasharray: ${dashArray}; stroke-dashoffset: 0;`;\n svgPath.attr('style', mOffset + svgPath.attr('style'));\n }\n }\n\n // MC Special\n svgPath.attr('data-edge', true);\n svgPath.attr('data-et', 'edge');\n svgPath.attr('data-id', edge.id);\n svgPath.attr('data-points', pointsStr);\n\n // DEBUG code, adds a red circle at each edge coordinate\n // cornerPoints.forEach((point) => {\n // elem\n // .append('circle')\n // .style('stroke', 'blue')\n // .style('fill', 'blue')\n // .attr('r', 3)\n // .attr('cx', point.x)\n // .attr('cy', point.y);\n // });\n if (edge.showPoints) {\n lineData.forEach((point) => {\n elem\n .append('circle')\n .style('stroke', 'red')\n .style('fill', 'red')\n .attr('r', 1)\n .attr('cx', point.x)\n .attr('cy', point.y);\n });\n }\n\n let url = '';\n if (getConfig().flowchart.arrowMarkerAbsolute || getConfig().state.arrowMarkerAbsolute) {\n url =\n window.location.protocol +\n '//' +\n window.location.host +\n window.location.pathname +\n window.location.search;\n url = url.replace(/\\(/g, '\\\\(').replace(/\\)/g, '\\\\)');\n }\n log.info('arrowTypeStart', edge.arrowTypeStart);\n log.info('arrowTypeEnd', edge.arrowTypeEnd);\n\n addEdgeMarkers(svgPath, edge, url, id, diagramType, strokeColor);\n const midIndex = Math.floor(points.length / 2);\n const point = points[midIndex];\n if (!utils.isLabelCoordinateInPath(point, svgPath.attr('d'))) {\n pointsHasChanged = true;\n }\n\n let paths = {};\n if (pointsHasChanged) {\n paths.updatedPath = points;\n }\n paths.originalPath = edge.points;\n return paths;\n};\n\n/**\n * Generates SVG path data with rounded corners from an array of points.\n * @param {Array} points - Array of points in the format [{x: Number, y: Number}, ...]\n * @param {Number} radius - The radius of the rounded corners\n * @returns {String} - SVG path data string\n */\nfunction generateRoundedPath(points, radius) {\n if (points.length < 2) {\n return '';\n }\n\n let path = '';\n const size = points.length;\n const epsilon = 1e-5;\n\n for (let i = 0; i < size; i++) {\n const currPoint = points[i];\n const prevPoint = points[i - 1];\n const nextPoint = points[i + 1];\n\n if (i === 0) {\n // Move to the first point\n path += `M${currPoint.x},${currPoint.y}`;\n } else if (i === size - 1) {\n // Last point, draw a straight line to the final point\n path += `L${currPoint.x},${currPoint.y}`;\n } else {\n // Calculate vectors for incoming and outgoing segments\n const dx1 = currPoint.x - prevPoint.x;\n const dy1 = currPoint.y - prevPoint.y;\n const dx2 = nextPoint.x - currPoint.x;\n const dy2 = nextPoint.y - currPoint.y;\n\n const len1 = Math.hypot(dx1, dy1);\n const len2 = Math.hypot(dx2, dy2);\n\n // Prevent division by zero\n if (len1 < epsilon || len2 < epsilon) {\n path += `L${currPoint.x},${currPoint.y}`;\n continue;\n }\n\n // Normalize the vectors\n const nx1 = dx1 / len1;\n const ny1 = dy1 / len1;\n const nx2 = dx2 / len2;\n const ny2 = dy2 / len2;\n\n // Calculate the angle between the vectors\n const dot = nx1 * nx2 + ny1 * ny2;\n // Clamp the dot product to avoid numerical issues with acos\n const clampedDot = Math.max(-1, Math.min(1, dot));\n const angle = Math.acos(clampedDot);\n\n // Skip rounding if the angle is too small or too close to 180 degrees\n if (angle < epsilon || Math.abs(Math.PI - angle) < epsilon) {\n path += `L${currPoint.x},${currPoint.y}`;\n continue;\n }\n\n // Calculate the distance to offset the control point\n const cutLen = Math.min(radius / Math.sin(angle / 2), len1 / 2, len2 / 2);\n\n // Calculate the start and end points of the curve\n const startX = currPoint.x - nx1 * cutLen;\n const startY = currPoint.y - ny1 * cutLen;\n const endX = currPoint.x + nx2 * cutLen;\n const endY = currPoint.y + ny2 * cutLen;\n\n // Draw the line to the start of the curve\n path += `L${startX},${startY}`;\n\n // Draw the quadratic Bezier curve\n path += `Q${currPoint.x},${currPoint.y} ${endX},${endY}`;\n }\n }\n\n return path;\n}\n// Helper function to calculate delta and angle between two points\nfunction calculateDeltaAndAngle(point1, point2) {\n if (!point1 || !point2) {\n return { angle: 0, deltaX: 0, deltaY: 0 };\n }\n const deltaX = point2.x - point1.x;\n const deltaY = point2.y - point1.y;\n const angle = Math.atan2(deltaY, deltaX);\n return { angle, deltaX, deltaY };\n}\n\n// Function to adjust the first and last points of the points array\nfunction applyMarkerOffsetsToPoints(points, edge) {\n // Copy the points array to avoid mutating the original data\n const newPoints = points.map((point) => ({ ...point }));\n\n // Handle the first point (start of the edge)\n if (points.length >= 2 && markerOffsets[edge.arrowTypeStart]) {\n const offsetValue = markerOffsets[edge.arrowTypeStart];\n\n const point1 = points[0];\n const point2 = points[1];\n\n const { angle } = calculateDeltaAndAngle(point1, point2);\n\n const offsetX = offsetValue * Math.cos(angle);\n const offsetY = offsetValue * Math.sin(angle);\n\n newPoints[0].x = point1.x + offsetX;\n newPoints[0].y = point1.y + offsetY;\n }\n\n // Handle the last point (end of the edge)\n const n = points.length;\n if (n >= 2 && markerOffsets[edge.arrowTypeEnd]) {\n const offsetValue = markerOffsets[edge.arrowTypeEnd];\n\n const point1 = points[n - 1];\n const point2 = points[n - 2];\n\n const { angle } = calculateDeltaAndAngle(point2, point1);\n\n const offsetX = offsetValue * Math.cos(angle);\n const offsetY = offsetValue * Math.sin(angle);\n\n newPoints[n - 1].x = point1.x - offsetX;\n newPoints[n - 1].y = point1.y - offsetY;\n }\n\n return newPoints;\n}\n", "/** Setup arrow head and define the marker. The result is appended to the svg. */\nimport { log } from '../../logger.js';\n\n// Only add the number of markers that the diagram needs\nconst insertMarkers = (elem, markerArray, type, id) => {\n markerArray.forEach((markerName) => {\n markers[markerName](elem, type, id);\n });\n};\n\nconst extension = (elem, type, id) => {\n log.trace('Making markers for ', id);\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-extensionStart')\n .attr('class', 'marker extension ' + type)\n .attr('refX', 18)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 1,7 L18,13 V 1 Z');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-extensionEnd')\n .attr('class', 'marker extension ' + type)\n .attr('refX', 1)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 1,1 V 13 L18,7 Z'); // this is actual shape for arrowhead\n};\n\nconst composition = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-compositionStart')\n .attr('class', 'marker composition ' + type)\n .attr('refX', 18)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-compositionEnd')\n .attr('class', 'marker composition ' + type)\n .attr('refX', 1)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n};\nconst aggregation = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-aggregationStart')\n .attr('class', 'marker aggregation ' + type)\n .attr('refX', 18)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-aggregationEnd')\n .attr('class', 'marker aggregation ' + type)\n .attr('refX', 1)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n};\nconst dependency = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-dependencyStart')\n .attr('class', 'marker dependency ' + type)\n .attr('refX', 6)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 5,7 L9,13 L1,7 L9,1 Z');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-dependencyEnd')\n .attr('class', 'marker dependency ' + type)\n .attr('refX', 13)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L14,7 L9,1 Z');\n};\nconst lollipop = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-lollipopStart')\n .attr('class', 'marker lollipop ' + type)\n .attr('refX', 13)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('circle')\n .attr('stroke', 'black')\n .attr('fill', 'transparent')\n .attr('cx', 7)\n .attr('cy', 7)\n .attr('r', 6);\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-lollipopEnd')\n .attr('class', 'marker lollipop ' + type)\n .attr('refX', 1)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('circle')\n .attr('stroke', 'black')\n .attr('fill', 'transparent')\n .attr('cx', 7)\n .attr('cy', 7)\n .attr('r', 6);\n};\nconst point = (elem, type, id) => {\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-pointEnd')\n .attr('class', 'marker ' + type)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 5)\n .attr('refY', 5)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 8)\n .attr('markerHeight', 8)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 0 0 L 10 5 L 0 10 z')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 1)\n .style('stroke-dasharray', '1,0');\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-pointStart')\n .attr('class', 'marker ' + type)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 4.5)\n .attr('refY', 5)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 8)\n .attr('markerHeight', 8)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 0 5 L 10 10 L 10 0 z')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 1)\n .style('stroke-dasharray', '1,0');\n};\nconst circle = (elem, type, id) => {\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-circleEnd')\n .attr('class', 'marker ' + type)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 11)\n .attr('refY', 5)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 11)\n .attr('markerHeight', 11)\n .attr('orient', 'auto')\n .append('circle')\n .attr('cx', '5')\n .attr('cy', '5')\n .attr('r', '5')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 1)\n .style('stroke-dasharray', '1,0');\n\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-circleStart')\n .attr('class', 'marker ' + type)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', -1)\n .attr('refY', 5)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 11)\n .attr('markerHeight', 11)\n .attr('orient', 'auto')\n .append('circle')\n .attr('cx', '5')\n .attr('cy', '5')\n .attr('r', '5')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 1)\n .style('stroke-dasharray', '1,0');\n};\nconst cross = (elem, type, id) => {\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-crossEnd')\n .attr('class', 'marker cross ' + type)\n .attr('viewBox', '0 0 11 11')\n .attr('refX', 12)\n .attr('refY', 5.2)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 11)\n .attr('markerHeight', 11)\n .attr('orient', 'auto')\n .append('path')\n // .attr('stroke', 'black')\n .attr('d', 'M 1,1 l 9,9 M 10,1 l -9,9')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 2)\n .style('stroke-dasharray', '1,0');\n\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-crossStart')\n .attr('class', 'marker cross ' + type)\n .attr('viewBox', '0 0 11 11')\n .attr('refX', -1)\n .attr('refY', 5.2)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 11)\n .attr('markerHeight', 11)\n .attr('orient', 'auto')\n .append('path')\n // .attr('stroke', 'black')\n .attr('d', 'M 1,1 l 9,9 M 10,1 l -9,9')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 2)\n .style('stroke-dasharray', '1,0');\n};\nconst barb = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-barbEnd')\n .attr('refX', 19)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 14)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 19,7 L9,13 L14,7 L9,1 Z');\n};\n// erDiagram specific markers\nconst only_one = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-onlyOneStart')\n .attr('class', 'marker onlyOne ' + type)\n .attr('refX', 0)\n .attr('refY', 9)\n .attr('markerWidth', 18)\n .attr('markerHeight', 18)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M9,0 L9,18 M15,0 L15,18');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-onlyOneEnd')\n .attr('class', 'marker onlyOne ' + type)\n .attr('refX', 18)\n .attr('refY', 9)\n .attr('markerWidth', 18)\n .attr('markerHeight', 18)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M3,0 L3,18 M9,0 L9,18');\n};\n\nconst zero_or_one = (elem, type, id) => {\n const startMarker = elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-zeroOrOneStart')\n .attr('class', 'marker zeroOrOne ' + type)\n .attr('refX', 0)\n .attr('refY', 9)\n .attr('markerWidth', 30)\n .attr('markerHeight', 18)\n .attr('orient', 'auto');\n startMarker\n .append('circle')\n .attr('fill', 'white') // Fill white for now?\n .attr('cx', 21)\n .attr('cy', 9)\n .attr('r', 6);\n startMarker.append('path').attr('d', 'M9,0 L9,18');\n\n const endMarker = elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-zeroOrOneEnd')\n .attr('class', 'marker zeroOrOne ' + type)\n .attr('refX', 30)\n .attr('refY', 9)\n .attr('markerWidth', 30)\n .attr('markerHeight', 18)\n .attr('orient', 'auto');\n endMarker\n .append('circle')\n .attr('fill', 'white') // Fill white for now?\n .attr('cx', 9)\n .attr('cy', 9)\n .attr('r', 6);\n endMarker.append('path').attr('d', 'M21,0 L21,18');\n};\n\nconst one_or_more = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-oneOrMoreStart')\n .attr('class', 'marker oneOrMore ' + type)\n .attr('refX', 18)\n .attr('refY', 18)\n .attr('markerWidth', 45)\n .attr('markerHeight', 36)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-oneOrMoreEnd')\n .attr('class', 'marker oneOrMore ' + type)\n .attr('refX', 27)\n .attr('refY', 18)\n .attr('markerWidth', 45)\n .attr('markerHeight', 36)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18');\n};\n\nconst zero_or_more = (elem, type, id) => {\n const startMarker = elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-zeroOrMoreStart')\n .attr('class', 'marker zeroOrMore ' + type)\n .attr('refX', 18)\n .attr('refY', 18)\n .attr('markerWidth', 57)\n .attr('markerHeight', 36)\n .attr('orient', 'auto');\n startMarker.append('circle').attr('fill', 'white').attr('cx', 48).attr('cy', 18).attr('r', 6);\n startMarker.append('path').attr('d', 'M0,18 Q18,0 36,18 Q18,36 0,18');\n\n const endMarker = elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-zeroOrMoreEnd')\n .attr('class', 'marker zeroOrMore ' + type)\n .attr('refX', 39)\n .attr('refY', 18)\n .attr('markerWidth', 57)\n .attr('markerHeight', 36)\n .attr('orient', 'auto');\n endMarker.append('circle').attr('fill', 'white').attr('cx', 9).attr('cy', 18).attr('r', 6);\n endMarker.append('path').attr('d', 'M21,18 Q39,0 57,18 Q39,36 21,18');\n};\n\nconst requirement_arrow = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-requirement_arrowEnd')\n .attr('refX', 20)\n .attr('refY', 10)\n .attr('markerWidth', 20)\n .attr('markerHeight', 20)\n .attr('orient', 'auto')\n .append('path')\n .attr(\n 'd',\n `M0,0\n L20,10\n M20,10\n L0,20`\n );\n};\nconst requirement_contains = (elem, type, id) => {\n const containsNode = elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-requirement_containsStart')\n .attr('refX', 0)\n .attr('refY', 10)\n .attr('markerWidth', 20)\n .attr('markerHeight', 20)\n .attr('orient', 'auto')\n .append('g');\n\n containsNode.append('circle').attr('cx', 10).attr('cy', 10).attr('r', 9).attr('fill', 'none');\n\n containsNode.append('line').attr('x1', 1).attr('x2', 19).attr('y1', 10).attr('y2', 10);\n\n containsNode.append('line').attr('y1', 1).attr('y2', 19).attr('x1', 10).attr('x2', 10);\n};\n\n// TODO rename the class diagram markers to something shape descriptive and semantic free\nconst markers = {\n extension,\n composition,\n aggregation,\n dependency,\n lollipop,\n point,\n circle,\n cross,\n barb,\n only_one,\n zero_or_one,\n one_or_more,\n zero_or_more,\n requirement_arrow,\n requirement_contains,\n};\nexport default insertMarkers;\n", "import { log } from '../../logger.js';\nimport { shapes } from './shapes.js';\nimport type { Node, NonClusterNode, ShapeRenderOptions } from '../types.js';\nimport type { SVGGroup } from '../../mermaid.js';\nimport type { D3Selection } from '../../types.js';\nimport type { graphlib } from 'dagre-d3-es';\n\ntype ShapeHandler = (typeof shapes)[keyof typeof shapes];\ntype NodeElement = D3Selection | Awaited>;\n\nconst nodeElems = new Map();\n\nexport async function insertNode(\n elem: SVGGroup,\n node: NonClusterNode,\n renderOptions: ShapeRenderOptions\n) {\n let newEl: NodeElement | undefined;\n let el;\n\n //special check for rect shape (with or without rounded corners)\n if (node.shape === 'rect') {\n if (node.rx && node.ry) {\n node.shape = 'roundedRect';\n } else {\n node.shape = 'squareRect';\n }\n }\n\n const shapeHandler = node.shape ? shapes[node.shape] : undefined;\n\n if (!shapeHandler) {\n throw new Error(`No such shape: ${node.shape}. Please check your syntax.`);\n }\n\n if (node.link) {\n // Add link when appropriate\n let target;\n if (renderOptions.config.securityLevel === 'sandbox') {\n target = '_top';\n } else if (node.linkTarget) {\n target = node.linkTarget || '_blank';\n }\n newEl = elem\n .insert('svg:a')\n .attr('xlink:href', node.link)\n .attr('target', target ?? null);\n el = await shapeHandler(newEl, node, renderOptions);\n } else {\n el = await shapeHandler(elem, node, renderOptions);\n newEl = el;\n }\n if (node.tooltip) {\n el.attr('title', node.tooltip);\n }\n\n nodeElems.set(node.id, newEl);\n\n if (node.haveCallback) {\n newEl.attr('class', newEl.attr('class') + ' clickable');\n }\n return newEl;\n}\n\nexport const setNodeElem = (elem: NodeElement, node: Pick) => {\n nodeElems.set(node.id, elem);\n};\n\nexport const clear = () => {\n nodeElems.clear();\n};\n\nexport const positionNode = (node: ReturnType) => {\n const el = nodeElems.get(node.id)!;\n log.trace(\n 'Transforming node',\n node.diff,\n node,\n 'translate(' + (node.x - node.width / 2 - 5) + ', ' + node.width / 2 + ')'\n );\n const padding = 8;\n const diff = node.diff || 0;\n if (node.clusterNode) {\n el.attr(\n 'transform',\n 'translate(' +\n (node.x + diff - node.width / 2) +\n ', ' +\n (node.y - node.height / 2 - padding) +\n ')'\n );\n } else {\n el.attr('transform', 'translate(' + node.x + ', ' + node.y + ')');\n }\n return diff;\n};\n", "import { getConfig } from './config.js';\nimport common from './diagrams/common/common.js';\nimport { log } from './logger.js';\nimport { insertCluster } from './rendering-util/rendering-elements/clusters.js';\nimport {\n insertEdge,\n insertEdgeLabel,\n positionEdgeLabel,\n} from './rendering-util/rendering-elements/edges.js';\nimport insertMarkers from './rendering-util/rendering-elements/markers.js';\nimport { insertNode } from './rendering-util/rendering-elements/nodes.js';\nimport { labelHelper } from './rendering-util/rendering-elements/shapes/util.js';\nimport { interpolateToCurve } from './utils.js';\n\n/**\n * Internal helpers for mermaid\n * @deprecated - This should not be used by external packages, as the definitions will change without notice.\n */\nexport const internalHelpers = {\n common,\n getConfig,\n insertCluster,\n insertEdge,\n insertEdgeLabel,\n insertMarkers,\n insertNode,\n interpolateToCurve,\n labelHelper,\n log,\n positionEdgeLabel,\n};\n\nexport type InternalHelpers = typeof internalHelpers;\n", "import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n", "/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n", "import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n", "/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n", "import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n", "import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n", "import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n", "import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n", "/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nexport default noop;\n", "/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n", "/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport default baseFindIndex;\n", "/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nexport default baseIsNaN;\n", "/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nexport default strictIndexOf;\n", "import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n", "import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nexport default arrayIncludes;\n", "import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n", "import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n", "import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n", "import assignValue from './_assignValue.js';\nimport copyObject from './_copyObject.js';\nimport createAssigner from './_createAssigner.js';\nimport isArrayLike from './isArrayLike.js';\nimport isPrototype from './_isPrototype.js';\nimport keys from './keys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\nvar assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n});\n\nexport default assign;\n", "import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n", "import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n", "import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n", "import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n", "import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n", "import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n", "import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n", "import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nexport default get;\n", "/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n", "import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n", "import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nexport default baseFlatten;\n", "import baseFlatten from './_baseFlatten.js';\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n", "import flatten from './flatten.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nexport default flatRest;\n", "/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nexport default baseSlice;\n", "/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** 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/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nexport default hasUnicode;\n", "/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nexport default arrayReduce;\n", "import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n", "import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n", "/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n", "/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n", "import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n", "import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n", "import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nexport default getSymbolsIn;\n", "import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n", "import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n", "import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n", "import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n", "import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nexport default initCloneArray;\n", "import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n", "/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nexport default cloneRegExp;\n", "import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n", "import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nexport default initCloneByTag;\n", "import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n", "import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n", "import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n", "import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n", "import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nexport default baseClone;\n", "import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nexport default clone;\n", "import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n", "/**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\nfunction compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default compact;\n", "/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n", "/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n", "import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n", "/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n", "/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n", "import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n", "/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n", "/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n", "import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n", "import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n", "import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n", "import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n", "import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nexport default baseIsMatch;\n", "import isObject from './isObject.js';\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n", "import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nexport default getMatchData;\n", "/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nexport default matchesStrictComparable;\n", "import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nexport default baseMatches;\n", "/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n", "import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n", "import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n", "import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nexport default baseMatchesProperty;\n", "/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default baseProperty;\n", "import baseGet from './_baseGet.js';\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nexport default basePropertyDeep;\n", "import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n", "import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nexport default baseIteratee;\n", "/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n}\n\nexport default arrayAggregator;\n", "import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n", "import isArrayLike from './isArrayLike.js';\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nexport default createBaseEach;\n", "import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\n", "import baseEach from './_baseEach.js';\n\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n}\n\nexport default baseAggregator;\n", "import arrayAggregator from './_arrayAggregator.js';\nimport baseAggregator from './_baseAggregator.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\nfunction createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n };\n}\n\nexport default createAggregator;\n", "import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n", "import baseRest from './_baseRest.js';\nimport eq from './eq.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport keysIn from './keysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n});\n\nexport default defaults;\n", "/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nexport default arrayIncludesWith;\n", "import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport arrayMap from './_arrayMap.js';\nimport baseUnary from './_baseUnary.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseDifference;\n", "import baseDifference from './_baseDifference.js';\nimport baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\nvar difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n});\n\nexport default difference;\n", "/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n", "import baseSlice from './_baseSlice.js';\nimport toInteger from './toInteger.js';\n\n/**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\nfunction drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n}\n\nexport default drop;\n", "import baseSlice from './_baseSlice.js';\nimport toInteger from './toInteger.js';\n\n/**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\nfunction dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n}\n\nexport default dropRight;\n", "import identity from './identity.js';\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nexport default castFunction;\n", "import arrayEach from './_arrayEach.js';\nimport baseEach from './_baseEach.js';\nimport castFunction from './_castFunction.js';\nimport isArray from './isArray.js';\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nexport default forEach;\n", "export { default } from './forEach.js'\n", "/**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\nfunction arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n}\n\nexport default arrayEvery;\n", "import baseEach from './_baseEach.js';\n\n/**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\nfunction baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n}\n\nexport default baseEvery;\n", "import arrayEvery from './_arrayEvery.js';\nimport baseEvery from './_baseEvery.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\nfunction every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, baseIteratee(predicate, 3));\n}\n\nexport default every;\n", "import baseEach from './_baseEach.js';\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n}\n\nexport default baseFilter;\n", "import arrayFilter from './_arrayFilter.js';\nimport baseFilter from './_baseFilter.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\nfunction filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, baseIteratee(predicate, 3));\n}\n\nexport default filter;\n", "import baseIteratee from './_baseIteratee.js';\nimport isArrayLike from './isArrayLike.js';\nimport keys from './keys.js';\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\nexport default createFind;\n", "import baseFindIndex from './_baseFindIndex.js';\nimport baseIteratee from './_baseIteratee.js';\nimport toInteger from './toInteger.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nexport default findIndex;\n", "import createFind from './_createFind.js';\nimport findIndex from './findIndex.js';\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nexport default find;\n", "/**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\nfunction head(array) {\n return (array && array.length) ? array[0] : undefined;\n}\n\nexport default head;\n", "export { default } from './head.js'\n", "import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nexport default baseMap;\n", "import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nexport default map;\n", "import baseFlatten from './_baseFlatten.js';\nimport map from './map.js';\n\n/**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\nfunction flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n}\n\nexport default flatMap;\n", "import baseFor from './_baseFor.js';\nimport castFunction from './_castFunction.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\nfunction forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, castFunction(iteratee), keysIn);\n}\n\nexport default forIn;\n", "import baseForOwn from './_baseForOwn.js';\nimport castFunction from './_castFunction.js';\n\n/**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forOwn(object, iteratee) {\n return object && baseForOwn(object, castFunction(iteratee));\n}\n\nexport default forOwn;\n", "import baseAssignValue from './_baseAssignValue.js';\nimport createAggregator from './_createAggregator.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\nvar groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n});\n\nexport default groupBy;\n", "/**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\nfunction baseGt(value, other) {\n return value > other;\n}\n\nexport default baseGt;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nexport default baseHas;\n", "import baseHas from './_baseHas.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nexport default has;\n", "import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n", "import arrayMap from './_arrayMap.js';\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\nexport default baseValues;\n", "import baseValues from './_baseValues.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n}\n\nexport default values;\n", "import baseIndexOf from './_baseIndexOf.js';\nimport isArrayLike from './isArrayLike.js';\nimport isString from './isString.js';\nimport toInteger from './toInteger.js';\nimport values from './values.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\nfunction includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n}\n\nexport default includes;\n", "import baseIndexOf from './_baseIndexOf.js';\nimport toInteger from './toInteger.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\nfunction indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n}\n\nexport default indexOf;\n", "import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLike from './isArrayLike.js';\nimport isBuffer from './isBuffer.js';\nimport isPrototype from './_isPrototype.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nexport default isEmpty;\n", "import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar regexpTag = '[object RegExp]';\n\n/**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\nfunction baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n}\n\nexport default baseIsRegExp;\n", "import baseIsRegExp from './_baseIsRegExp.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsRegExp = nodeUtil && nodeUtil.isRegExp;\n\n/**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\nvar isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\nexport default isRegExp;\n", "/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nexport default isUndefined;\n", "/**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\nfunction baseLt(value, other) {\n return value < other;\n}\n\nexport default baseLt;\n", "import baseAssignValue from './_baseAssignValue.js';\nimport baseForOwn from './_baseForOwn.js';\nimport baseIteratee from './_baseIteratee.js';\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nexport default mapValues;\n", "import isSymbol from './isSymbol.js';\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n}\n\nexport default baseExtremum;\n", "import baseExtremum from './_baseExtremum.js';\nimport baseGt from './_baseGt.js';\nimport identity from './identity.js';\n\n/**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\nfunction max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n}\n\nexport default max;\n", "import baseExtremum from './_baseExtremum.js';\nimport baseLt from './_baseLt.js';\nimport identity from './identity.js';\n\n/**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n}\n\nexport default min;\n", "import baseExtremum from './_baseExtremum.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseLt from './_baseLt.js';\n\n/**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\nfunction minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, baseIteratee(iteratee, 2), baseLt)\n : undefined;\n}\n\nexport default minBy;\n", "/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\nfunction negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n}\n\nexport default negate;\n", "import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nexport default baseSet;\n", "import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\nimport castPath from './_castPath.js';\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nexport default basePickBy;\n", "import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport basePickBy from './_basePickBy.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\n\n/**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\nfunction pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = baseIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n}\n\nexport default pickBy;\n", "/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n}\n\nexport default baseSortBy;\n", "import isSymbol from './isSymbol.js';\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n}\n\nexport default compareAscending;\n", "import compareAscending from './_compareAscending.js';\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n}\n\nexport default compareMultiple;\n", "import arrayMap from './_arrayMap.js';\nimport baseGet from './_baseGet.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport baseSortBy from './_baseSortBy.js';\nimport baseUnary from './_baseUnary.js';\nimport compareMultiple from './_compareMultiple.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n}\n\nexport default baseOrderBy;\n", "import baseProperty from './_baseProperty.js';\n\n/**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nvar asciiSize = baseProperty('length');\n\nexport default asciiSize;\n", "/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nfunction unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n}\n\nexport default unicodeSize;\n", "import asciiSize from './_asciiSize.js';\nimport hasUnicode from './_hasUnicode.js';\nimport unicodeSize from './_unicodeSize.js';\n\n/**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\nfunction stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n}\n\nexport default stringSize;\n", "import basePickBy from './_basePickBy.js';\nimport hasIn from './hasIn.js';\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n}\n\nexport default basePick;\n", "import basePick from './_basePick.js';\nimport flatRest from './_flatRest.js';\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n});\n\nexport default pick;\n", "/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n}\n\nexport default baseRange;\n", "import baseRange from './_baseRange.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport toFinite from './toFinite.js';\n\n/**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n}\n\nexport default createRange;\n", "import createRange from './_createRange.js';\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nexport default range;\n", "/**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n}\n\nexport default baseReduce;\n", "import arrayReduce from './_arrayReduce.js';\nimport baseEach from './_baseEach.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseReduce from './_baseReduce.js';\nimport isArray from './isArray.js';\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\nfunction reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n}\n\nexport default reduce;\n", "import arrayFilter from './_arrayFilter.js';\nimport baseFilter from './_baseFilter.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\nimport negate from './negate.js';\n\n/**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\nfunction reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(baseIteratee(predicate, 3)));\n}\n\nexport default reject;\n", "import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArrayLike from './isArrayLike.js';\nimport isString from './isString.js';\nimport stringSize from './_stringSize.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\nfunction size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n}\n\nexport default size;\n", "import baseEach from './_baseEach.js';\n\n/**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n}\n\nexport default baseSome;\n", "import arraySome from './_arraySome.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseSome from './_baseSome.js';\nimport isArray from './isArray.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\nfunction some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, baseIteratee(predicate, 3));\n}\n\nexport default some;\n", "import baseFlatten from './_baseFlatten.js';\nimport baseOrderBy from './_baseOrderBy.js';\nimport baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nexport default sortBy;\n", "import Set from './_Set.js';\nimport noop from './noop.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nexport default createSet;\n", "import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport cacheHas from './_cacheHas.js';\nimport createSet from './_createSet.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseUniq;\n", "import baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport baseUniq from './_baseUniq.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\nvar union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nexport default union;\n", "import baseUniq from './_baseUniq.js';\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n}\n\nexport default uniq;\n", "import baseIteratee from './_baseIteratee.js';\nimport baseUniq from './_baseUniq.js';\n\n/**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\nfunction uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];\n}\n\nexport default uniqBy;\n", "import toString from './toString.js';\n\n/** Used to generate unique IDs. */\nvar idCounter = 0;\n\n/**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\nfunction uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n}\n\nexport default uniqueId;\n", "/**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\nfunction baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n}\n\nexport default baseZipObject;\n", "import assignValue from './_assignValue.js';\nimport baseZipObject from './_baseZipObject.js';\n\n/**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\nfunction zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n}\n\nexport default zipObject;\n", "/**\n * @license\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"es\" -o ./`\n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\nexport { default as add } from './add.js';\nexport { default as after } from './after.js';\nexport { default as ary } from './ary.js';\nexport { default as assign } from './assign.js';\nexport { default as assignIn } from './assignIn.js';\nexport { default as assignInWith } from './assignInWith.js';\nexport { default as assignWith } from './assignWith.js';\nexport { default as at } from './at.js';\nexport { default as attempt } from './attempt.js';\nexport { default as before } from './before.js';\nexport { default as bind } from './bind.js';\nexport { default as bindAll } from './bindAll.js';\nexport { default as bindKey } from './bindKey.js';\nexport { default as camelCase } from './camelCase.js';\nexport { default as capitalize } from './capitalize.js';\nexport { default as castArray } from './castArray.js';\nexport { default as ceil } from './ceil.js';\nexport { default as chain } from './chain.js';\nexport { default as chunk } from './chunk.js';\nexport { default as clamp } from './clamp.js';\nexport { default as clone } from './clone.js';\nexport { default as cloneDeep } from './cloneDeep.js';\nexport { default as cloneDeepWith } from './cloneDeepWith.js';\nexport { default as cloneWith } from './cloneWith.js';\nexport { default as commit } from './commit.js';\nexport { default as compact } from './compact.js';\nexport { default as concat } from './concat.js';\nexport { default as cond } from './cond.js';\nexport { default as conforms } from './conforms.js';\nexport { default as conformsTo } from './conformsTo.js';\nexport { default as constant } from './constant.js';\nexport { default as countBy } from './countBy.js';\nexport { default as create } from './create.js';\nexport { default as curry } from './curry.js';\nexport { default as curryRight } from './curryRight.js';\nexport { default as debounce } from './debounce.js';\nexport { default as deburr } from './deburr.js';\nexport { default as defaultTo } from './defaultTo.js';\nexport { default as defaults } from './defaults.js';\nexport { default as defaultsDeep } from './defaultsDeep.js';\nexport { default as defer } from './defer.js';\nexport { default as delay } from './delay.js';\nexport { default as difference } from './difference.js';\nexport { default as differenceBy } from './differenceBy.js';\nexport { default as differenceWith } from './differenceWith.js';\nexport { default as divide } from './divide.js';\nexport { default as drop } from './drop.js';\nexport { default as dropRight } from './dropRight.js';\nexport { default as dropRightWhile } from './dropRightWhile.js';\nexport { default as dropWhile } from './dropWhile.js';\nexport { default as each } from './each.js';\nexport { default as eachRight } from './eachRight.js';\nexport { default as endsWith } from './endsWith.js';\nexport { default as entries } from './entries.js';\nexport { default as entriesIn } from './entriesIn.js';\nexport { default as eq } from './eq.js';\nexport { default as escape } from './escape.js';\nexport { default as escapeRegExp } from './escapeRegExp.js';\nexport { default as every } from './every.js';\nexport { default as extend } from './extend.js';\nexport { default as extendWith } from './extendWith.js';\nexport { default as fill } from './fill.js';\nexport { default as filter } from './filter.js';\nexport { default as find } from './find.js';\nexport { default as findIndex } from './findIndex.js';\nexport { default as findKey } from './findKey.js';\nexport { default as findLast } from './findLast.js';\nexport { default as findLastIndex } from './findLastIndex.js';\nexport { default as findLastKey } from './findLastKey.js';\nexport { default as first } from './first.js';\nexport { default as flatMap } from './flatMap.js';\nexport { default as flatMapDeep } from './flatMapDeep.js';\nexport { default as flatMapDepth } from './flatMapDepth.js';\nexport { default as flatten } from './flatten.js';\nexport { default as flattenDeep } from './flattenDeep.js';\nexport { default as flattenDepth } from './flattenDepth.js';\nexport { default as flip } from './flip.js';\nexport { default as floor } from './floor.js';\nexport { default as flow } from './flow.js';\nexport { default as flowRight } from './flowRight.js';\nexport { default as forEach } from './forEach.js';\nexport { default as forEachRight } from './forEachRight.js';\nexport { default as forIn } from './forIn.js';\nexport { default as forInRight } from './forInRight.js';\nexport { default as forOwn } from './forOwn.js';\nexport { default as forOwnRight } from './forOwnRight.js';\nexport { default as fromPairs } from './fromPairs.js';\nexport { default as functions } from './functions.js';\nexport { default as functionsIn } from './functionsIn.js';\nexport { default as get } from './get.js';\nexport { default as groupBy } from './groupBy.js';\nexport { default as gt } from './gt.js';\nexport { default as gte } from './gte.js';\nexport { default as has } from './has.js';\nexport { default as hasIn } from './hasIn.js';\nexport { default as head } from './head.js';\nexport { default as identity } from './identity.js';\nexport { default as inRange } from './inRange.js';\nexport { default as includes } from './includes.js';\nexport { default as indexOf } from './indexOf.js';\nexport { default as initial } from './initial.js';\nexport { default as intersection } from './intersection.js';\nexport { default as intersectionBy } from './intersectionBy.js';\nexport { default as intersectionWith } from './intersectionWith.js';\nexport { default as invert } from './invert.js';\nexport { default as invertBy } from './invertBy.js';\nexport { default as invoke } from './invoke.js';\nexport { default as invokeMap } from './invokeMap.js';\nexport { default as isArguments } from './isArguments.js';\nexport { default as isArray } from './isArray.js';\nexport { default as isArrayBuffer } from './isArrayBuffer.js';\nexport { default as isArrayLike } from './isArrayLike.js';\nexport { default as isArrayLikeObject } from './isArrayLikeObject.js';\nexport { default as isBoolean } from './isBoolean.js';\nexport { default as isBuffer } from './isBuffer.js';\nexport { default as isDate } from './isDate.js';\nexport { default as isElement } from './isElement.js';\nexport { default as isEmpty } from './isEmpty.js';\nexport { default as isEqual } from './isEqual.js';\nexport { default as isEqualWith } from './isEqualWith.js';\nexport { default as isError } from './isError.js';\nexport { default as isFinite } from './isFinite.js';\nexport { default as isFunction } from './isFunction.js';\nexport { default as isInteger } from './isInteger.js';\nexport { default as isLength } from './isLength.js';\nexport { default as isMap } from './isMap.js';\nexport { default as isMatch } from './isMatch.js';\nexport { default as isMatchWith } from './isMatchWith.js';\nexport { default as isNaN } from './isNaN.js';\nexport { default as isNative } from './isNative.js';\nexport { default as isNil } from './isNil.js';\nexport { default as isNull } from './isNull.js';\nexport { default as isNumber } from './isNumber.js';\nexport { default as isObject } from './isObject.js';\nexport { default as isObjectLike } from './isObjectLike.js';\nexport { default as isPlainObject } from './isPlainObject.js';\nexport { default as isRegExp } from './isRegExp.js';\nexport { default as isSafeInteger } from './isSafeInteger.js';\nexport { default as isSet } from './isSet.js';\nexport { default as isString } from './isString.js';\nexport { default as isSymbol } from './isSymbol.js';\nexport { default as isTypedArray } from './isTypedArray.js';\nexport { default as isUndefined } from './isUndefined.js';\nexport { default as isWeakMap } from './isWeakMap.js';\nexport { default as isWeakSet } from './isWeakSet.js';\nexport { default as iteratee } from './iteratee.js';\nexport { default as join } from './join.js';\nexport { default as kebabCase } from './kebabCase.js';\nexport { default as keyBy } from './keyBy.js';\nexport { default as keys } from './keys.js';\nexport { default as keysIn } from './keysIn.js';\nexport { default as last } from './last.js';\nexport { default as lastIndexOf } from './lastIndexOf.js';\nexport { default as lodash } from './wrapperLodash.js';\nexport { default as lowerCase } from './lowerCase.js';\nexport { default as lowerFirst } from './lowerFirst.js';\nexport { default as lt } from './lt.js';\nexport { default as lte } from './lte.js';\nexport { default as map } from './map.js';\nexport { default as mapKeys } from './mapKeys.js';\nexport { default as mapValues } from './mapValues.js';\nexport { default as matches } from './matches.js';\nexport { default as matchesProperty } from './matchesProperty.js';\nexport { default as max } from './max.js';\nexport { default as maxBy } from './maxBy.js';\nexport { default as mean } from './mean.js';\nexport { default as meanBy } from './meanBy.js';\nexport { default as memoize } from './memoize.js';\nexport { default as merge } from './merge.js';\nexport { default as mergeWith } from './mergeWith.js';\nexport { default as method } from './method.js';\nexport { default as methodOf } from './methodOf.js';\nexport { default as min } from './min.js';\nexport { default as minBy } from './minBy.js';\nexport { default as mixin } from './mixin.js';\nexport { default as multiply } from './multiply.js';\nexport { default as negate } from './negate.js';\nexport { default as next } from './next.js';\nexport { default as noop } from './noop.js';\nexport { default as now } from './now.js';\nexport { default as nth } from './nth.js';\nexport { default as nthArg } from './nthArg.js';\nexport { default as omit } from './omit.js';\nexport { default as omitBy } from './omitBy.js';\nexport { default as once } from './once.js';\nexport { default as orderBy } from './orderBy.js';\nexport { default as over } from './over.js';\nexport { default as overArgs } from './overArgs.js';\nexport { default as overEvery } from './overEvery.js';\nexport { default as overSome } from './overSome.js';\nexport { default as pad } from './pad.js';\nexport { default as padEnd } from './padEnd.js';\nexport { default as padStart } from './padStart.js';\nexport { default as parseInt } from './parseInt.js';\nexport { default as partial } from './partial.js';\nexport { default as partialRight } from './partialRight.js';\nexport { default as partition } from './partition.js';\nexport { default as pick } from './pick.js';\nexport { default as pickBy } from './pickBy.js';\nexport { default as plant } from './plant.js';\nexport { default as property } from './property.js';\nexport { default as propertyOf } from './propertyOf.js';\nexport { default as pull } from './pull.js';\nexport { default as pullAll } from './pullAll.js';\nexport { default as pullAllBy } from './pullAllBy.js';\nexport { default as pullAllWith } from './pullAllWith.js';\nexport { default as pullAt } from './pullAt.js';\nexport { default as random } from './random.js';\nexport { default as range } from './range.js';\nexport { default as rangeRight } from './rangeRight.js';\nexport { default as rearg } from './rearg.js';\nexport { default as reduce } from './reduce.js';\nexport { default as reduceRight } from './reduceRight.js';\nexport { default as reject } from './reject.js';\nexport { default as remove } from './remove.js';\nexport { default as repeat } from './repeat.js';\nexport { default as replace } from './replace.js';\nexport { default as rest } from './rest.js';\nexport { default as result } from './result.js';\nexport { default as reverse } from './reverse.js';\nexport { default as round } from './round.js';\nexport { default as sample } from './sample.js';\nexport { default as sampleSize } from './sampleSize.js';\nexport { default as set } from './set.js';\nexport { default as setWith } from './setWith.js';\nexport { default as shuffle } from './shuffle.js';\nexport { default as size } from './size.js';\nexport { default as slice } from './slice.js';\nexport { default as snakeCase } from './snakeCase.js';\nexport { default as some } from './some.js';\nexport { default as sortBy } from './sortBy.js';\nexport { default as sortedIndex } from './sortedIndex.js';\nexport { default as sortedIndexBy } from './sortedIndexBy.js';\nexport { default as sortedIndexOf } from './sortedIndexOf.js';\nexport { default as sortedLastIndex } from './sortedLastIndex.js';\nexport { default as sortedLastIndexBy } from './sortedLastIndexBy.js';\nexport { default as sortedLastIndexOf } from './sortedLastIndexOf.js';\nexport { default as sortedUniq } from './sortedUniq.js';\nexport { default as sortedUniqBy } from './sortedUniqBy.js';\nexport { default as split } from './split.js';\nexport { default as spread } from './spread.js';\nexport { default as startCase } from './startCase.js';\nexport { default as startsWith } from './startsWith.js';\nexport { default as stubArray } from './stubArray.js';\nexport { default as stubFalse } from './stubFalse.js';\nexport { default as stubObject } from './stubObject.js';\nexport { default as stubString } from './stubString.js';\nexport { default as stubTrue } from './stubTrue.js';\nexport { default as subtract } from './subtract.js';\nexport { default as sum } from './sum.js';\nexport { default as sumBy } from './sumBy.js';\nexport { default as tail } from './tail.js';\nexport { default as take } from './take.js';\nexport { default as takeRight } from './takeRight.js';\nexport { default as takeRightWhile } from './takeRightWhile.js';\nexport { default as takeWhile } from './takeWhile.js';\nexport { default as tap } from './tap.js';\nexport { default as template } from './template.js';\nexport { default as templateSettings } from './templateSettings.js';\nexport { default as throttle } from './throttle.js';\nexport { default as thru } from './thru.js';\nexport { default as times } from './times.js';\nexport { default as toArray } from './toArray.js';\nexport { default as toFinite } from './toFinite.js';\nexport { default as toInteger } from './toInteger.js';\nexport { default as toIterator } from './toIterator.js';\nexport { default as toJSON } from './toJSON.js';\nexport { default as toLength } from './toLength.js';\nexport { default as toLower } from './toLower.js';\nexport { default as toNumber } from './toNumber.js';\nexport { default as toPairs } from './toPairs.js';\nexport { default as toPairsIn } from './toPairsIn.js';\nexport { default as toPath } from './toPath.js';\nexport { default as toPlainObject } from './toPlainObject.js';\nexport { default as toSafeInteger } from './toSafeInteger.js';\nexport { default as toString } from './toString.js';\nexport { default as toUpper } from './toUpper.js';\nexport { default as transform } from './transform.js';\nexport { default as trim } from './trim.js';\nexport { default as trimEnd } from './trimEnd.js';\nexport { default as trimStart } from './trimStart.js';\nexport { default as truncate } from './truncate.js';\nexport { default as unary } from './unary.js';\nexport { default as unescape } from './unescape.js';\nexport { default as union } from './union.js';\nexport { default as unionBy } from './unionBy.js';\nexport { default as unionWith } from './unionWith.js';\nexport { default as uniq } from './uniq.js';\nexport { default as uniqBy } from './uniqBy.js';\nexport { default as uniqWith } from './uniqWith.js';\nexport { default as uniqueId } from './uniqueId.js';\nexport { default as unset } from './unset.js';\nexport { default as unzip } from './unzip.js';\nexport { default as unzipWith } from './unzipWith.js';\nexport { default as update } from './update.js';\nexport { default as updateWith } from './updateWith.js';\nexport { default as upperCase } from './upperCase.js';\nexport { default as upperFirst } from './upperFirst.js';\nexport { default as value } from './value.js';\nexport { default as valueOf } from './valueOf.js';\nexport { default as values } from './values.js';\nexport { default as valuesIn } from './valuesIn.js';\nexport { default as without } from './without.js';\nexport { default as words } from './words.js';\nexport { default as wrap } from './wrap.js';\nexport { default as wrapperAt } from './wrapperAt.js';\nexport { default as wrapperChain } from './wrapperChain.js';\nexport { default as wrapperCommit } from './commit.js';\nexport { default as wrapperLodash } from './wrapperLodash.js';\nexport { default as wrapperNext } from './next.js';\nexport { default as wrapperPlant } from './plant.js';\nexport { default as wrapperReverse } from './wrapperReverse.js';\nexport { default as wrapperToIterator } from './toIterator.js';\nexport { default as wrapperValue } from './wrapperValue.js';\nexport { default as xor } from './xor.js';\nexport { default as xorBy } from './xorBy.js';\nexport { default as xorWith } from './xorWith.js';\nexport { default as zip } from './zip.js';\nexport { default as zipObject } from './zipObject.js';\nexport { default as zipObjectDeep } from './zipObjectDeep.js';\nexport { default as zipWith } from './zipWith.js';\nexport { default } from './lodash.default.js';\n", "import * as _ from 'lodash-es';\n\nvar DEFAULT_EDGE_NAME = '\\x00';\nvar GRAPH_NODE = '\\x00';\nvar EDGE_KEY_DELIM = '\\x01';\n\n// Implementation notes:\n//\n// * Node id query functions should return string ids for the nodes\n// * Edge id query functions should return an \"edgeObj\", edge object, that is\n// composed of enough information to uniquely identify an edge: {v, w, name}.\n// * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n// reference edges. This is because we need a performant way to look these\n// edges up and, object properties, which have string keys, are the closest\n// we're going to get to a performant hashtable in JavaScript.\n\n// Implementation notes:\n//\n// * Node id query functions should return string ids for the nodes\n// * Edge id query functions should return an \"edgeObj\", edge object, that is\n// composed of enough information to uniquely identify an edge: {v, w, name}.\n// * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n// reference edges. This is because we need a performant way to look these\n// edges up and, object properties, which have string keys, are the closest\n// we're going to get to a performant hashtable in JavaScript.\nexport class Graph {\n constructor(opts = {}) {\n this._isDirected = Object.prototype.hasOwnProperty.call(opts, 'directed')\n ? opts.directed\n : true;\n this._isMultigraph = Object.prototype.hasOwnProperty.call(opts, 'multigraph')\n ? opts.multigraph\n : false;\n this._isCompound = Object.prototype.hasOwnProperty.call(opts, 'compound')\n ? opts.compound\n : false;\n\n // Label for the graph itself\n this._label = undefined;\n\n // Defaults to be set when creating a new node\n this._defaultNodeLabelFn = _.constant(undefined);\n\n // Defaults to be set when creating a new edge\n this._defaultEdgeLabelFn = _.constant(undefined);\n\n // v -> label\n this._nodes = {};\n\n if (this._isCompound) {\n // v -> parent\n this._parent = {};\n\n // v -> children\n this._children = {};\n this._children[GRAPH_NODE] = {};\n }\n\n // v -> edgeObj\n this._in = {};\n\n // u -> v -> Number\n this._preds = {};\n\n // v -> edgeObj\n this._out = {};\n\n // v -> w -> Number\n this._sucs = {};\n\n // e -> edgeObj\n this._edgeObjs = {};\n\n // e -> label\n this._edgeLabels = {};\n }\n /* === Graph functions ========= */\n isDirected() {\n return this._isDirected;\n }\n isMultigraph() {\n return this._isMultigraph;\n }\n isCompound() {\n return this._isCompound;\n }\n setGraph(label) {\n this._label = label;\n return this;\n }\n graph() {\n return this._label;\n }\n /* === Node functions ========== */\n setDefaultNodeLabel(newDefault) {\n if (!_.isFunction(newDefault)) {\n newDefault = _.constant(newDefault);\n }\n this._defaultNodeLabelFn = newDefault;\n return this;\n }\n nodeCount() {\n return this._nodeCount;\n }\n nodes() {\n return _.keys(this._nodes);\n }\n sources() {\n var self = this;\n return _.filter(this.nodes(), function (v) {\n return _.isEmpty(self._in[v]);\n });\n }\n sinks() {\n var self = this;\n return _.filter(this.nodes(), function (v) {\n return _.isEmpty(self._out[v]);\n });\n }\n setNodes(vs, value) {\n var args = arguments;\n var self = this;\n _.each(vs, function (v) {\n if (args.length > 1) {\n self.setNode(v, value);\n } else {\n self.setNode(v);\n }\n });\n return this;\n }\n setNode(v, value) {\n if (Object.prototype.hasOwnProperty.call(this._nodes, v)) {\n if (arguments.length > 1) {\n this._nodes[v] = value;\n }\n return this;\n }\n\n // @ts-expect-error\n this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v);\n if (this._isCompound) {\n this._parent[v] = GRAPH_NODE;\n this._children[v] = {};\n this._children[GRAPH_NODE][v] = true;\n }\n this._in[v] = {};\n this._preds[v] = {};\n this._out[v] = {};\n this._sucs[v] = {};\n ++this._nodeCount;\n return this;\n }\n node(v) {\n return this._nodes[v];\n }\n hasNode(v) {\n return Object.prototype.hasOwnProperty.call(this._nodes, v);\n }\n removeNode(v) {\n if (Object.prototype.hasOwnProperty.call(this._nodes, v)) {\n var removeEdge = (e) => this.removeEdge(this._edgeObjs[e]);\n delete this._nodes[v];\n if (this._isCompound) {\n this._removeFromParentsChildList(v);\n delete this._parent[v];\n _.each(this.children(v), (child) => {\n this.setParent(child);\n });\n delete this._children[v];\n }\n _.each(_.keys(this._in[v]), removeEdge);\n delete this._in[v];\n delete this._preds[v];\n _.each(_.keys(this._out[v]), removeEdge);\n delete this._out[v];\n delete this._sucs[v];\n --this._nodeCount;\n }\n return this;\n }\n setParent(v, parent) {\n if (!this._isCompound) {\n throw new Error('Cannot set parent in a non-compound graph');\n }\n\n if (_.isUndefined(parent)) {\n parent = GRAPH_NODE;\n } else {\n // Coerce parent to string\n parent += '';\n for (var ancestor = parent; !_.isUndefined(ancestor); ancestor = this.parent(ancestor)) {\n if (ancestor === v) {\n throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle');\n }\n }\n\n this.setNode(parent);\n }\n\n this.setNode(v);\n this._removeFromParentsChildList(v);\n this._parent[v] = parent;\n this._children[parent][v] = true;\n return this;\n }\n _removeFromParentsChildList(v) {\n delete this._children[this._parent[v]][v];\n }\n parent(v) {\n if (this._isCompound) {\n var parent = this._parent[v];\n if (parent !== GRAPH_NODE) {\n return parent;\n }\n }\n }\n children(v) {\n if (_.isUndefined(v)) {\n v = GRAPH_NODE;\n }\n\n if (this._isCompound) {\n var children = this._children[v];\n if (children) {\n return _.keys(children);\n }\n } else if (v === GRAPH_NODE) {\n return this.nodes();\n } else if (this.hasNode(v)) {\n return [];\n }\n }\n predecessors(v) {\n var predsV = this._preds[v];\n if (predsV) {\n return _.keys(predsV);\n }\n }\n successors(v) {\n var sucsV = this._sucs[v];\n if (sucsV) {\n return _.keys(sucsV);\n }\n }\n neighbors(v) {\n var preds = this.predecessors(v);\n if (preds) {\n return _.union(preds, this.successors(v));\n }\n }\n isLeaf(v) {\n var neighbors;\n if (this.isDirected()) {\n neighbors = this.successors(v);\n } else {\n neighbors = this.neighbors(v);\n }\n return neighbors.length === 0;\n }\n filterNodes(filter) {\n // @ts-expect-error\n var copy = new this.constructor({\n directed: this._isDirected,\n multigraph: this._isMultigraph,\n compound: this._isCompound,\n });\n\n copy.setGraph(this.graph());\n\n var self = this;\n _.each(this._nodes, function (value, v) {\n if (filter(v)) {\n copy.setNode(v, value);\n }\n });\n\n _.each(this._edgeObjs, function (e) {\n // @ts-expect-error\n if (copy.hasNode(e.v) && copy.hasNode(e.w)) {\n copy.setEdge(e, self.edge(e));\n }\n });\n\n var parents = {};\n function findParent(v) {\n var parent = self.parent(v);\n if (parent === undefined || copy.hasNode(parent)) {\n parents[v] = parent;\n return parent;\n } else if (parent in parents) {\n return parents[parent];\n } else {\n return findParent(parent);\n }\n }\n\n if (this._isCompound) {\n _.each(copy.nodes(), function (v) {\n copy.setParent(v, findParent(v));\n });\n }\n\n return copy;\n }\n /* === Edge functions ========== */\n setDefaultEdgeLabel(newDefault) {\n if (!_.isFunction(newDefault)) {\n newDefault = _.constant(newDefault);\n }\n this._defaultEdgeLabelFn = newDefault;\n return this;\n }\n edgeCount() {\n return this._edgeCount;\n }\n edges() {\n return _.values(this._edgeObjs);\n }\n setPath(vs, value) {\n var self = this;\n var args = arguments;\n _.reduce(vs, function (v, w) {\n if (args.length > 1) {\n self.setEdge(v, w, value);\n } else {\n self.setEdge(v, w);\n }\n return w;\n });\n return this;\n }\n /*\n * setEdge(v, w, [value, [name]])\n * setEdge({ v, w, [name] }, [value])\n */\n setEdge() {\n var v, w, name, value;\n var valueSpecified = false;\n var arg0 = arguments[0];\n\n if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) {\n v = arg0.v;\n w = arg0.w;\n name = arg0.name;\n if (arguments.length === 2) {\n value = arguments[1];\n valueSpecified = true;\n }\n } else {\n v = arg0;\n w = arguments[1];\n name = arguments[3];\n if (arguments.length > 2) {\n value = arguments[2];\n valueSpecified = true;\n }\n }\n\n v = '' + v;\n w = '' + w;\n if (!_.isUndefined(name)) {\n name = '' + name;\n }\n\n var e = edgeArgsToId(this._isDirected, v, w, name);\n if (Object.prototype.hasOwnProperty.call(this._edgeLabels, e)) {\n if (valueSpecified) {\n this._edgeLabels[e] = value;\n }\n return this;\n }\n\n if (!_.isUndefined(name) && !this._isMultigraph) {\n throw new Error('Cannot set a named edge when isMultigraph = false');\n }\n\n // It didn't exist, so we need to create it.\n // First ensure the nodes exist.\n this.setNode(v);\n this.setNode(w);\n\n // @ts-expect-error\n this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name);\n\n var edgeObj = edgeArgsToObj(this._isDirected, v, w, name);\n // Ensure we add undirected edges in a consistent way.\n v = edgeObj.v;\n w = edgeObj.w;\n\n Object.freeze(edgeObj);\n this._edgeObjs[e] = edgeObj;\n incrementOrInitEntry(this._preds[w], v);\n incrementOrInitEntry(this._sucs[v], w);\n this._in[w][e] = edgeObj;\n this._out[v][e] = edgeObj;\n this._edgeCount++;\n return this;\n }\n edge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n return this._edgeLabels[e];\n }\n hasEdge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n return Object.prototype.hasOwnProperty.call(this._edgeLabels, e);\n }\n removeEdge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n var edge = this._edgeObjs[e];\n if (edge) {\n v = edge.v;\n w = edge.w;\n delete this._edgeLabels[e];\n delete this._edgeObjs[e];\n decrementOrRemoveEntry(this._preds[w], v);\n decrementOrRemoveEntry(this._sucs[v], w);\n delete this._in[w][e];\n delete this._out[v][e];\n this._edgeCount--;\n }\n return this;\n }\n inEdges(v, u) {\n var inV = this._in[v];\n if (inV) {\n var edges = _.values(inV);\n if (!u) {\n return edges;\n }\n return _.filter(edges, function (edge) {\n return edge.v === u;\n });\n }\n }\n outEdges(v, w) {\n var outV = this._out[v];\n if (outV) {\n var edges = _.values(outV);\n if (!w) {\n return edges;\n }\n return _.filter(edges, function (edge) {\n return edge.w === w;\n });\n }\n }\n nodeEdges(v, w) {\n var inEdges = this.inEdges(v, w);\n if (inEdges) {\n return inEdges.concat(this.outEdges(v, w));\n }\n }\n}\n\n/* Number of nodes in the graph. Should only be changed by the implementation. */\nGraph.prototype._nodeCount = 0;\n\n/* Number of edges in the graph. Should only be changed by the implementation. */\nGraph.prototype._edgeCount = 0;\n\nfunction incrementOrInitEntry(map, k) {\n if (map[k]) {\n map[k]++;\n } else {\n map[k] = 1;\n }\n}\n\nfunction decrementOrRemoveEntry(map, k) {\n if (!--map[k]) {\n delete map[k];\n }\n}\n\nfunction edgeArgsToId(isDirected, v_, w_, name) {\n var v = '' + v_;\n var w = '' + w_;\n if (!isDirected && v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (_.isUndefined(name) ? DEFAULT_EDGE_NAME : name);\n}\n\nfunction edgeArgsToObj(isDirected, v_, w_, name) {\n var v = '' + v_;\n var w = '' + w_;\n if (!isDirected && v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n var edgeObj = { v: v, w: w };\n if (name) {\n edgeObj.name = name;\n }\n return edgeObj;\n}\n\nfunction edgeObjToId(isDirected, edgeObj) {\n return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name);\n}\n", "// Includes only the \"core\" of graphlib\n\nimport { Graph } from './graph.js';\n\nconst version = '2.1.9-pre';\n\nexport { Graph, version };\n", "/*\n * Simple doubly linked list implementation derived from Cormen, et al.,\n * \"Introduction to Algorithms\".\n */\n\nexport { List };\n\nclass List {\n constructor() {\n var sentinel = {};\n sentinel._next = sentinel._prev = sentinel;\n this._sentinel = sentinel;\n }\n dequeue() {\n var sentinel = this._sentinel;\n var entry = sentinel._prev;\n if (entry !== sentinel) {\n unlink(entry);\n return entry;\n }\n }\n enqueue(entry) {\n var sentinel = this._sentinel;\n if (entry._prev && entry._next) {\n unlink(entry);\n }\n entry._next = sentinel._next;\n sentinel._next._prev = entry;\n sentinel._next = entry;\n entry._prev = sentinel;\n }\n toString() {\n var strs = [];\n var sentinel = this._sentinel;\n var curr = sentinel._prev;\n while (curr !== sentinel) {\n strs.push(JSON.stringify(curr, filterOutLinks));\n curr = curr._prev;\n }\n return '[' + strs.join(', ') + ']';\n }\n}\n\nfunction unlink(entry) {\n entry._prev._next = entry._next;\n entry._next._prev = entry._prev;\n delete entry._next;\n delete entry._prev;\n}\n\nfunction filterOutLinks(k, v) {\n if (k !== '_next' && k !== '_prev') {\n return v;\n }\n}\n", "import * as _ from 'lodash-es';\nimport { Graph } from '../graphlib/index.js';\nimport { List } from './data/list.js';\n\n/*\n * A greedy heuristic for finding a feedback arc set for a graph. A feedback\n * arc set is a set of edges that can be removed to make a graph acyclic.\n * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, \"A fast and\n * effective heuristic for the feedback arc set problem.\" This implementation\n * adjusts that from the paper to allow for weighted edges.\n */\nexport { greedyFAS };\n\nvar DEFAULT_WEIGHT_FN = _.constant(1);\n\nfunction greedyFAS(g, weightFn) {\n if (g.nodeCount() <= 1) {\n return [];\n }\n var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN);\n var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx);\n\n // Expand multi-edges\n return _.flatten(\n _.map(results, function (e) {\n return g.outEdges(e.v, e.w);\n }),\n );\n}\n\nfunction doGreedyFAS(g, buckets, zeroIdx) {\n var results = [];\n var sources = buckets[buckets.length - 1];\n var sinks = buckets[0];\n\n var entry;\n while (g.nodeCount()) {\n while ((entry = sinks.dequeue())) {\n removeNode(g, buckets, zeroIdx, entry);\n }\n while ((entry = sources.dequeue())) {\n removeNode(g, buckets, zeroIdx, entry);\n }\n if (g.nodeCount()) {\n for (var i = buckets.length - 2; i > 0; --i) {\n entry = buckets[i].dequeue();\n if (entry) {\n results = results.concat(removeNode(g, buckets, zeroIdx, entry, true));\n break;\n }\n }\n }\n }\n\n return results;\n}\n\nfunction removeNode(g, buckets, zeroIdx, entry, collectPredecessors) {\n var results = collectPredecessors ? [] : undefined;\n\n _.forEach(g.inEdges(entry.v), function (edge) {\n var weight = g.edge(edge);\n var uEntry = g.node(edge.v);\n\n if (collectPredecessors) {\n results.push({ v: edge.v, w: edge.w });\n }\n\n uEntry.out -= weight;\n assignBucket(buckets, zeroIdx, uEntry);\n });\n\n _.forEach(g.outEdges(entry.v), function (edge) {\n var weight = g.edge(edge);\n var w = edge.w;\n var wEntry = g.node(w);\n wEntry['in'] -= weight;\n assignBucket(buckets, zeroIdx, wEntry);\n });\n\n g.removeNode(entry.v);\n\n return results;\n}\n\nfunction buildState(g, weightFn) {\n var fasGraph = new Graph();\n var maxIn = 0;\n var maxOut = 0;\n\n _.forEach(g.nodes(), function (v) {\n fasGraph.setNode(v, { v: v, in: 0, out: 0 });\n });\n\n // Aggregate weights on nodes, but also sum the weights across multi-edges\n // into a single edge for the fasGraph.\n _.forEach(g.edges(), function (e) {\n var prevWeight = fasGraph.edge(e.v, e.w) || 0;\n var weight = weightFn(e);\n var edgeWeight = prevWeight + weight;\n fasGraph.setEdge(e.v, e.w, edgeWeight);\n maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight));\n maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight));\n });\n\n var buckets = _.range(maxOut + maxIn + 3).map(function () {\n return new List();\n });\n var zeroIdx = maxIn + 1;\n\n _.forEach(fasGraph.nodes(), function (v) {\n assignBucket(buckets, zeroIdx, fasGraph.node(v));\n });\n\n return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx };\n}\n\nfunction assignBucket(buckets, zeroIdx, entry) {\n if (!entry.out) {\n buckets[0].enqueue(entry);\n } else if (!entry['in']) {\n buckets[buckets.length - 1].enqueue(entry);\n } else {\n buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry);\n }\n}\n", "import * as _ from 'lodash-es';\nimport { greedyFAS } from './greedy-fas.js';\n\nexport { run, undo };\n\nfunction run(g) {\n var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g);\n _.forEach(fas, function (e) {\n var label = g.edge(e);\n g.removeEdge(e);\n label.forwardName = e.name;\n label.reversed = true;\n g.setEdge(e.w, e.v, label, _.uniqueId('rev'));\n });\n\n function weightFn(g) {\n return function (e) {\n return g.edge(e).weight;\n };\n }\n}\n\nfunction dfsFAS(g) {\n var fas = [];\n var stack = {};\n var visited = {};\n\n function dfs(v) {\n if (Object.prototype.hasOwnProperty.call(visited, v)) {\n return;\n }\n visited[v] = true;\n stack[v] = true;\n _.forEach(g.outEdges(v), function (e) {\n if (Object.prototype.hasOwnProperty.call(stack, e.w)) {\n fas.push(e);\n } else {\n dfs(e.w);\n }\n });\n delete stack[v];\n }\n\n _.forEach(g.nodes(), dfs);\n return fas;\n}\n\nfunction undo(g) {\n _.forEach(g.edges(), function (e) {\n var label = g.edge(e);\n if (label.reversed) {\n g.removeEdge(e);\n\n var forwardName = label.forwardName;\n delete label.reversed;\n delete label.forwardName;\n g.setEdge(e.w, e.v, label, forwardName);\n }\n });\n}\n", "import * as _ from 'lodash-es';\nimport { Graph } from '../graphlib/index.js';\n\nexport {\n addDummyNode,\n simplify,\n asNonCompoundGraph,\n successorWeights,\n predecessorWeights,\n intersectRect,\n buildLayerMatrix,\n normalizeRanks,\n removeEmptyRanks,\n addBorderNode,\n maxRank,\n partition,\n time,\n notime,\n};\n\n/*\n * Adds a dummy node to the graph and return v.\n */\nfunction addDummyNode(g, type, attrs, name) {\n var v;\n do {\n v = _.uniqueId(name);\n } while (g.hasNode(v));\n\n attrs.dummy = type;\n g.setNode(v, attrs);\n return v;\n}\n\n/*\n * Returns a new graph with only simple edges. Handles aggregation of data\n * associated with multi-edges.\n */\nfunction simplify(g) {\n var simplified = new Graph().setGraph(g.graph());\n _.forEach(g.nodes(), function (v) {\n simplified.setNode(v, g.node(v));\n });\n _.forEach(g.edges(), function (e) {\n var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 };\n var label = g.edge(e);\n simplified.setEdge(e.v, e.w, {\n weight: simpleLabel.weight + label.weight,\n minlen: Math.max(simpleLabel.minlen, label.minlen),\n });\n });\n return simplified;\n}\n\nfunction asNonCompoundGraph(g) {\n var simplified = new Graph({ multigraph: g.isMultigraph() }).setGraph(g.graph());\n _.forEach(g.nodes(), function (v) {\n if (!g.children(v).length) {\n simplified.setNode(v, g.node(v));\n }\n });\n _.forEach(g.edges(), function (e) {\n simplified.setEdge(e, g.edge(e));\n });\n return simplified;\n}\n\nfunction successorWeights(g) {\n var weightMap = _.map(g.nodes(), function (v) {\n var sucs = {};\n _.forEach(g.outEdges(v), function (e) {\n sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight;\n });\n return sucs;\n });\n return _.zipObject(g.nodes(), weightMap);\n}\n\nfunction predecessorWeights(g) {\n var weightMap = _.map(g.nodes(), function (v) {\n var preds = {};\n _.forEach(g.inEdges(v), function (e) {\n preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight;\n });\n return preds;\n });\n return _.zipObject(g.nodes(), weightMap);\n}\n\n/*\n * Finds where a line starting at point ({x, y}) would intersect a rectangle\n * ({x, y, width, height}) if it were pointing at the rectangle's center.\n */\nfunction intersectRect(rect, point) {\n var x = rect.x;\n var y = rect.y;\n\n // Rectangle intersection algorithm from:\n // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes\n var dx = point.x - x;\n var dy = point.y - y;\n var w = rect.width / 2;\n var h = rect.height / 2;\n\n if (!dx && !dy) {\n throw new Error('Not possible to find intersection inside of the rectangle');\n }\n\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n // Intersection is top or bottom of rect.\n if (dy < 0) {\n h = -h;\n }\n sx = (h * dx) / dy;\n sy = h;\n } else {\n // Intersection is left or right of rect.\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = (w * dy) / dx;\n }\n\n return { x: x + sx, y: y + sy };\n}\n\n/*\n * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\n * function will produce a matrix with the ids of each node.\n */\nfunction buildLayerMatrix(g) {\n var layering = _.map(_.range(maxRank(g) + 1), function () {\n return [];\n });\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n var rank = node.rank;\n if (!_.isUndefined(rank)) {\n layering[rank][node.order] = v;\n }\n });\n return layering;\n}\n\n/*\n * Adjusts the ranks for all nodes in the graph such that all nodes v have\n * rank(v) >= 0 and at least one node w has rank(w) = 0.\n */\nfunction normalizeRanks(g) {\n var min = _.min(\n _.map(g.nodes(), function (v) {\n return g.node(v).rank;\n }),\n );\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n if (_.has(node, 'rank')) {\n node.rank -= min;\n }\n });\n}\n\nfunction removeEmptyRanks(g) {\n // Ranks may not start at 0, so we need to offset them\n var offset = _.min(\n _.map(g.nodes(), function (v) {\n return g.node(v).rank;\n }),\n );\n\n var layers = [];\n _.forEach(g.nodes(), function (v) {\n var rank = g.node(v).rank - offset;\n if (!layers[rank]) {\n layers[rank] = [];\n }\n layers[rank].push(v);\n });\n\n var delta = 0;\n var nodeRankFactor = g.graph().nodeRankFactor;\n _.forEach(layers, function (vs, i) {\n if (_.isUndefined(vs) && i % nodeRankFactor !== 0) {\n --delta;\n } else if (delta) {\n _.forEach(vs, function (v) {\n g.node(v).rank += delta;\n });\n }\n });\n}\n\nfunction addBorderNode(g, prefix, rank, order) {\n var node = {\n width: 0,\n height: 0,\n };\n if (arguments.length >= 4) {\n node.rank = rank;\n node.order = order;\n }\n return addDummyNode(g, 'border', node, prefix);\n}\n\nfunction maxRank(g) {\n return _.max(\n _.map(g.nodes(), function (v) {\n var rank = g.node(v).rank;\n if (!_.isUndefined(rank)) {\n return rank;\n }\n }),\n );\n}\n\n/*\n * Partition a collection into two groups: `lhs` and `rhs`. If the supplied\n * function returns true for an entry it goes into `lhs`. Otherwise it goes\n * into `rhs.\n */\nfunction partition(collection, fn) {\n var result = { lhs: [], rhs: [] };\n _.forEach(collection, function (value) {\n if (fn(value)) {\n result.lhs.push(value);\n } else {\n result.rhs.push(value);\n }\n });\n return result;\n}\n\n/*\n * Returns a new function that wraps `fn` with a timer. The wrapper logs the\n * time it takes to execute the function.\n */\nfunction time(name, fn) {\n var start = _.now();\n try {\n return fn();\n } finally {\n console.log(name + ' time: ' + (_.now() - start) + 'ms');\n }\n}\n\nfunction notime(name, fn) {\n return fn();\n}\n", "import * as _ from 'lodash-es';\nimport * as util from './util.js';\n\nexport { addBorderSegments };\n\nfunction addBorderSegments(g) {\n function dfs(v) {\n var children = g.children(v);\n var node = g.node(v);\n if (children.length) {\n _.forEach(children, dfs);\n }\n\n if (Object.prototype.hasOwnProperty.call(node, 'minRank')) {\n node.borderLeft = [];\n node.borderRight = [];\n for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) {\n addBorderNode(g, 'borderLeft', '_bl', v, node, rank);\n addBorderNode(g, 'borderRight', '_br', v, node, rank);\n }\n }\n }\n\n _.forEach(g.children(), dfs);\n}\n\nfunction addBorderNode(g, prop, prefix, sg, sgNode, rank) {\n var label = { width: 0, height: 0, rank: rank, borderType: prop };\n var prev = sgNode[prop][rank - 1];\n var curr = util.addDummyNode(g, 'border', label, prefix);\n sgNode[prop][rank] = curr;\n g.setParent(curr, sg);\n if (prev) {\n g.setEdge(prev, curr, { weight: 1 });\n }\n}\n", "import * as _ from 'lodash-es';\n\nexport { adjust, undo };\n\nfunction adjust(g) {\n var rankDir = g.graph().rankdir.toLowerCase();\n if (rankDir === 'lr' || rankDir === 'rl') {\n swapWidthHeight(g);\n }\n}\n\nfunction undo(g) {\n var rankDir = g.graph().rankdir.toLowerCase();\n if (rankDir === 'bt' || rankDir === 'rl') {\n reverseY(g);\n }\n\n if (rankDir === 'lr' || rankDir === 'rl') {\n swapXY(g);\n swapWidthHeight(g);\n }\n}\n\nfunction swapWidthHeight(g) {\n _.forEach(g.nodes(), function (v) {\n swapWidthHeightOne(g.node(v));\n });\n _.forEach(g.edges(), function (e) {\n swapWidthHeightOne(g.edge(e));\n });\n}\n\nfunction swapWidthHeightOne(attrs) {\n var w = attrs.width;\n attrs.width = attrs.height;\n attrs.height = w;\n}\n\nfunction reverseY(g) {\n _.forEach(g.nodes(), function (v) {\n reverseYOne(g.node(v));\n });\n\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n _.forEach(edge.points, reverseYOne);\n if (Object.prototype.hasOwnProperty.call(edge, 'y')) {\n reverseYOne(edge);\n }\n });\n}\n\nfunction reverseYOne(attrs) {\n attrs.y = -attrs.y;\n}\n\nfunction swapXY(g) {\n _.forEach(g.nodes(), function (v) {\n swapXYOne(g.node(v));\n });\n\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n _.forEach(edge.points, swapXYOne);\n if (Object.prototype.hasOwnProperty.call(edge, 'x')) {\n swapXYOne(edge);\n }\n });\n}\n\nfunction swapXYOne(attrs) {\n var x = attrs.x;\n attrs.x = attrs.y;\n attrs.y = x;\n}\n", "/**\n * TypeScript type imports:\n *\n * @import { Graph } from '../graphlib/graph.js';\n */\nimport * as _ from 'lodash-es';\nimport * as util from './util.js';\n\nexport { run, undo };\n\n/*\n * Breaks any long edges in the graph into short segments that span 1 layer\n * each. This operation is undoable with the denormalize function.\n *\n * Pre-conditions:\n *\n * 1. The input graph is a DAG.\n * 2. Each node in the graph has a \"rank\" property.\n *\n * Post-condition:\n *\n * 1. All edges in the graph have a length of 1.\n * 2. Dummy nodes are added where edges have been split into segments.\n * 3. The graph is augmented with a \"dummyChains\" attribute which contains\n * the first dummy in each chain of dummy nodes produced.\n */\nfunction run(g) {\n g.graph().dummyChains = [];\n _.forEach(g.edges(), function (edge) {\n normalizeEdge(g, edge);\n });\n}\n\n/**\n * @param {Graph} g\n */\nfunction normalizeEdge(g, e) {\n var v = e.v;\n var vRank = g.node(v).rank;\n var w = e.w;\n var wRank = g.node(w).rank;\n var name = e.name;\n var edgeLabel = g.edge(e);\n var labelRank = edgeLabel.labelRank;\n\n if (wRank === vRank + 1) return;\n\n g.removeEdge(e);\n\n /**\n * @typedef {Object} Attrs\n * @property {number} width\n * @property {number} height\n * @property {ReturnType} edgeLabel\n * @property {any} edgeObj\n * @property {ReturnType[\"rank\"]} rank\n * @property {string} [dummy]\n * @property {ReturnType[\"labelpos\"]} [labelpos]\n */\n\n /** @type {Attrs | undefined} */\n var attrs = undefined;\n var dummy, i;\n for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) {\n edgeLabel.points = [];\n attrs = {\n width: 0,\n height: 0,\n edgeLabel: edgeLabel,\n edgeObj: e,\n rank: vRank,\n };\n dummy = util.addDummyNode(g, 'edge', attrs, '_d');\n if (vRank === labelRank) {\n attrs.width = edgeLabel.width;\n attrs.height = edgeLabel.height;\n attrs.dummy = 'edge-label';\n attrs.labelpos = edgeLabel.labelpos;\n }\n g.setEdge(v, dummy, { weight: edgeLabel.weight }, name);\n if (i === 0) {\n g.graph().dummyChains.push(dummy);\n }\n v = dummy;\n }\n\n g.setEdge(v, w, { weight: edgeLabel.weight }, name);\n}\n\nfunction undo(g) {\n _.forEach(g.graph().dummyChains, function (v) {\n var node = g.node(v);\n var origLabel = node.edgeLabel;\n var w;\n g.setEdge(node.edgeObj, origLabel);\n while (node.dummy) {\n w = g.successors(v)[0];\n g.removeNode(v);\n origLabel.points.push({ x: node.x, y: node.y });\n if (node.dummy === 'edge-label') {\n origLabel.x = node.x;\n origLabel.y = node.y;\n origLabel.width = node.width;\n origLabel.height = node.height;\n }\n v = w;\n node = g.node(v);\n }\n });\n}\n", "import * as _ from 'lodash-es';\n\nexport { longestPath, slack };\n\n/*\n * Initializes ranks for the input graph using the longest path algorithm. This\n * algorithm scales well and is fast in practice, it yields rather poor\n * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\n * ranks wide and leaving edges longer than necessary. However, due to its\n * speed, this algorithm is good for getting an initial ranking that can be fed\n * into other algorithms.\n *\n * This algorithm does not normalize layers because it will be used by other\n * algorithms in most cases. If using this algorithm directly, be sure to\n * run normalize at the end.\n *\n * Pre-conditions:\n *\n * 1. Input graph is a DAG.\n * 2. Input graph node labels can be assigned properties.\n *\n * Post-conditions:\n *\n * 1. Each node will be assign an (unnormalized) \"rank\" property.\n */\nfunction longestPath(g) {\n var visited = {};\n\n function dfs(v) {\n var label = g.node(v);\n if (Object.prototype.hasOwnProperty.call(visited, v)) {\n return label.rank;\n }\n visited[v] = true;\n\n var rank = _.min(\n _.map(g.outEdges(v), function (e) {\n return dfs(e.w) - g.edge(e).minlen;\n }),\n );\n\n if (\n rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3\n rank === undefined || // return value of _.map([]) for Lodash 4\n rank === null\n ) {\n // return value of _.map([null])\n rank = 0;\n }\n\n return (label.rank = rank);\n }\n\n _.forEach(g.sources(), dfs);\n}\n\n/*\n * Returns the amount of slack for the given edge. The slack is defined as the\n * difference between the length of the edge and its minimum length.\n */\nfunction slack(g, e) {\n return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen;\n}\n", "import * as _ from 'lodash-es';\nimport { Graph } from '../../graphlib/index.js';\nimport { slack } from './util.js';\n\nexport { feasibleTree };\n\n/*\n * Constructs a spanning tree with tight edges and adjusted the input node's\n * ranks to achieve this. A tight edge is one that is has a length that matches\n * its \"minlen\" attribute.\n *\n * The basic structure for this function is derived from Gansner, et al., \"A\n * Technique for Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n * 1. Graph must be a DAG.\n * 2. Graph must be connected.\n * 3. Graph must have at least one node.\n * 5. Graph nodes must have been previously assigned a \"rank\" property that\n * respects the \"minlen\" property of incident edges.\n * 6. Graph edges must have a \"minlen\" property.\n *\n * Post-conditions:\n *\n * - Graph nodes will have their rank adjusted to ensure that all edges are\n * tight.\n *\n * Returns a tree (undirected graph) that is constructed using only \"tight\"\n * edges.\n */\nfunction feasibleTree(g) {\n var t = new Graph({ directed: false });\n\n // Choose arbitrary node from which to start our tree\n var start = g.nodes()[0];\n var size = g.nodeCount();\n t.setNode(start, {});\n\n var edge, delta;\n while (tightTree(t, g) < size) {\n edge = findMinSlackEdge(t, g);\n delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge);\n shiftRanks(t, g, delta);\n }\n\n return t;\n}\n\n/*\n * Finds a maximal tree of tight edges and returns the number of nodes in the\n * tree.\n */\nfunction tightTree(t, g) {\n function dfs(v) {\n _.forEach(g.nodeEdges(v), function (e) {\n var edgeV = e.v,\n w = v === edgeV ? e.w : edgeV;\n if (!t.hasNode(w) && !slack(g, e)) {\n t.setNode(w, {});\n t.setEdge(v, w, {});\n dfs(w);\n }\n });\n }\n\n _.forEach(t.nodes(), dfs);\n return t.nodeCount();\n}\n\n/*\n * Finds the edge with the smallest slack that is incident on tree and returns\n * it.\n */\nfunction findMinSlackEdge(t, g) {\n return _.minBy(g.edges(), function (e) {\n if (t.hasNode(e.v) !== t.hasNode(e.w)) {\n return slack(g, e);\n }\n });\n}\n\nfunction shiftRanks(t, g, delta) {\n _.forEach(t.nodes(), function (v) {\n g.node(v).rank += delta;\n });\n}\n", "import * as _ from 'lodash-es';\n\nexport { components };\n\nfunction components(g) {\n var visited = {};\n var cmpts = [];\n var cmpt;\n\n function dfs(v) {\n if (Object.prototype.hasOwnProperty.call(visited, v)) return;\n visited[v] = true;\n cmpt.push(v);\n _.each(g.successors(v), dfs);\n _.each(g.predecessors(v), dfs);\n }\n\n _.each(g.nodes(), function (v) {\n cmpt = [];\n dfs(v);\n if (cmpt.length) {\n cmpts.push(cmpt);\n }\n });\n\n return cmpts;\n}\n", "export { PriorityQueue };\n\n/**\n * A min-priority queue data structure. This algorithm is derived from Cormen,\n * et al., \"Introduction to Algorithms\". The basic idea of a min-priority\n * queue is that you can efficiently (in O(1) time) get the smallest key in\n * the queue. Adding and removing elements takes O(log n) time. A key can\n * have its priority decreased in O(log n) time.\n */\nclass PriorityQueue {\n constructor() {\n this._arr = [];\n this._keyIndices = {};\n }\n /**\n * Returns the number of elements in the queue. Takes `O(1)` time.\n */\n size() {\n return this._arr.length;\n }\n /**\n * Returns the keys that are in the queue. Takes `O(n)` time.\n */\n keys() {\n return this._arr.map(function (x) {\n return x.key;\n });\n }\n /**\n * Returns `true` if **key** is in the queue and `false` if not.\n */\n has(key) {\n return Object.prototype.hasOwnProperty.call(this._keyIndices, key);\n }\n /**\n * Returns the priority for **key**. If **key** is not present in the queue\n * then this function returns `undefined`. Takes `O(1)` time.\n *\n * @param {Object} key\n */\n priority(key) {\n var index = this._keyIndices[key];\n if (index !== undefined) {\n return this._arr[index].priority;\n }\n }\n /**\n * Returns the key for the minimum element in this queue. If the queue is\n * empty this function throws an Error. Takes `O(1)` time.\n */\n min() {\n if (this.size() === 0) {\n throw new Error('Queue underflow');\n }\n return this._arr[0].key;\n }\n /**\n * Inserts a new key into the priority queue. If the key already exists in\n * the queue this function returns `false`; otherwise it will return `true`.\n * Takes `O(n)` time.\n *\n * @param {Object} key the key to add\n * @param {Number} priority the initial priority for the key\n */\n add(key, priority) {\n var keyIndices = this._keyIndices;\n key = String(key);\n if (!Object.prototype.hasOwnProperty.call(keyIndices, key)) {\n var arr = this._arr;\n var index = arr.length;\n keyIndices[key] = index;\n arr.push({ key: key, priority: priority });\n this._decrease(index);\n return true;\n }\n return false;\n }\n /**\n * Removes and returns the smallest key in the queue. Takes `O(log n)` time.\n */\n removeMin() {\n this._swap(0, this._arr.length - 1);\n var min = this._arr.pop();\n delete this._keyIndices[min.key];\n this._heapify(0);\n return min.key;\n }\n /**\n * Decreases the priority for **key** to **priority**. If the new priority is\n * greater than the previous priority, this function will throw an Error.\n *\n * @param {Object} key the key for which to raise priority\n * @param {Number} priority the new priority for the key\n */\n decrease(key, priority) {\n var index = this._keyIndices[key];\n if (priority > this._arr[index].priority) {\n throw new Error(\n 'New priority is greater than current priority. ' +\n 'Key: ' +\n key +\n ' Old: ' +\n this._arr[index].priority +\n ' New: ' +\n priority,\n );\n }\n this._arr[index].priority = priority;\n this._decrease(index);\n }\n _heapify(i) {\n var arr = this._arr;\n var l = 2 * i;\n var r = l + 1;\n var largest = i;\n if (l < arr.length) {\n largest = arr[l].priority < arr[largest].priority ? l : largest;\n if (r < arr.length) {\n largest = arr[r].priority < arr[largest].priority ? r : largest;\n }\n if (largest !== i) {\n this._swap(i, largest);\n this._heapify(largest);\n }\n }\n }\n _decrease(index) {\n var arr = this._arr;\n var priority = arr[index].priority;\n var parent;\n while (index !== 0) {\n parent = index >> 1;\n if (arr[parent].priority < priority) {\n break;\n }\n this._swap(index, parent);\n index = parent;\n }\n }\n _swap(i, j) {\n var arr = this._arr;\n var keyIndices = this._keyIndices;\n var origArrI = arr[i];\n var origArrJ = arr[j];\n arr[i] = origArrJ;\n arr[j] = origArrI;\n keyIndices[origArrJ.key] = i;\n keyIndices[origArrI.key] = j;\n }\n}\n", "import * as _ from 'lodash-es';\nimport { PriorityQueue } from '../data/priority-queue.js';\n\nexport { dijkstra };\n\nvar DEFAULT_WEIGHT_FUNC = _.constant(1);\n\nfunction dijkstra(g, source, weightFn, edgeFn) {\n return runDijkstra(\n g,\n String(source),\n weightFn || DEFAULT_WEIGHT_FUNC,\n edgeFn ||\n function (v) {\n return g.outEdges(v);\n },\n );\n}\n\nfunction runDijkstra(g, source, weightFn, edgeFn) {\n var results = {};\n var pq = new PriorityQueue();\n var v, vEntry;\n\n var updateNeighbors = function (edge) {\n var w = edge.v !== v ? edge.v : edge.w;\n var wEntry = results[w];\n var weight = weightFn(edge);\n var distance = vEntry.distance + weight;\n\n if (weight < 0) {\n throw new Error(\n 'dijkstra does not allow negative edge weights. ' +\n 'Bad edge: ' +\n edge +\n ' Weight: ' +\n weight,\n );\n }\n\n if (distance < wEntry.distance) {\n wEntry.distance = distance;\n wEntry.predecessor = v;\n pq.decrease(w, distance);\n }\n };\n\n g.nodes().forEach(function (v) {\n var distance = v === source ? 0 : Number.POSITIVE_INFINITY;\n results[v] = { distance: distance };\n pq.add(v, distance);\n });\n\n while (pq.size() > 0) {\n v = pq.removeMin();\n vEntry = results[v];\n if (vEntry.distance === Number.POSITIVE_INFINITY) {\n break;\n }\n\n edgeFn(v).forEach(updateNeighbors);\n }\n\n return results;\n}\n", "import * as _ from 'lodash-es';\nimport { dijkstra } from './dijkstra.js';\n\nexport { dijkstraAll };\n\nfunction dijkstraAll(g, weightFunc, edgeFunc) {\n return _.transform(\n g.nodes(),\n function (acc, v) {\n acc[v] = dijkstra(g, v, weightFunc, edgeFunc);\n },\n {},\n );\n}\n", "export { tarjan };\n\nfunction tarjan(g) {\n var index = 0;\n var stack = [];\n var visited = {}; // node id -> { onStack, lowlink, index }\n var results = [];\n\n function dfs(v) {\n var entry = (visited[v] = {\n onStack: true,\n lowlink: index,\n index: index++,\n });\n stack.push(v);\n\n g.successors(v).forEach(function (w) {\n if (!Object.prototype.hasOwnProperty.call(visited, w)) {\n dfs(w);\n entry.lowlink = Math.min(entry.lowlink, visited[w].lowlink);\n } else if (visited[w].onStack) {\n entry.lowlink = Math.min(entry.lowlink, visited[w].index);\n }\n });\n\n if (entry.lowlink === entry.index) {\n var cmpt = [];\n var w;\n do {\n w = stack.pop();\n visited[w].onStack = false;\n cmpt.push(w);\n } while (v !== w);\n results.push(cmpt);\n }\n }\n\n g.nodes().forEach(function (v) {\n if (!Object.prototype.hasOwnProperty.call(visited, v)) {\n dfs(v);\n }\n });\n\n return results;\n}\n", "import * as _ from 'lodash-es';\nimport { tarjan } from './tarjan.js';\n\nexport { findCycles };\n\nfunction findCycles(g) {\n return _.filter(tarjan(g), function (cmpt) {\n return cmpt.length > 1 || (cmpt.length === 1 && g.hasEdge(cmpt[0], cmpt[0]));\n });\n}\n", "import * as _ from 'lodash-es';\n\nexport { floydWarshall };\n\nvar DEFAULT_WEIGHT_FUNC = _.constant(1);\n\nfunction floydWarshall(g, weightFn, edgeFn) {\n return runFloydWarshall(\n g,\n weightFn || DEFAULT_WEIGHT_FUNC,\n edgeFn ||\n function (v) {\n return g.outEdges(v);\n },\n );\n}\n\nfunction runFloydWarshall(g, weightFn, edgeFn) {\n var results = {};\n var nodes = g.nodes();\n\n nodes.forEach(function (v) {\n results[v] = {};\n results[v][v] = { distance: 0 };\n nodes.forEach(function (w) {\n if (v !== w) {\n results[v][w] = { distance: Number.POSITIVE_INFINITY };\n }\n });\n edgeFn(v).forEach(function (edge) {\n var w = edge.v === v ? edge.w : edge.v;\n var d = weightFn(edge);\n results[v][w] = { distance: d, predecessor: v };\n });\n });\n\n nodes.forEach(function (k) {\n var rowK = results[k];\n nodes.forEach(function (i) {\n var rowI = results[i];\n nodes.forEach(function (j) {\n var ik = rowI[k];\n var kj = rowK[j];\n var ij = rowI[j];\n var altDistance = ik.distance + kj.distance;\n if (altDistance < ij.distance) {\n ij.distance = altDistance;\n ij.predecessor = kj.predecessor;\n }\n });\n });\n });\n\n return results;\n}\n", "import * as _ from 'lodash-es';\n\nexport { topsort, CycleException };\n\ntopsort.CycleException = CycleException;\n\nfunction topsort(g) {\n var visited = {};\n var stack = {};\n var results = [];\n\n function visit(node) {\n if (Object.prototype.hasOwnProperty.call(stack, node)) {\n throw new CycleException();\n }\n\n if (!Object.prototype.hasOwnProperty.call(visited, node)) {\n stack[node] = true;\n visited[node] = true;\n _.each(g.predecessors(node), visit);\n delete stack[node];\n results.push(node);\n }\n }\n\n _.each(g.sinks(), visit);\n\n if (_.size(visited) !== g.nodeCount()) {\n throw new CycleException();\n }\n\n return results;\n}\n\nfunction CycleException() {}\nCycleException.prototype = new Error(); // must be an instance of Error to pass testing\n", "import { topsort, CycleException } from './topsort.js';\n\nexport { isAcyclic };\n\nfunction isAcyclic(g) {\n try {\n topsort(g);\n } catch (e) {\n if (e instanceof CycleException) {\n return false;\n }\n throw e;\n }\n return true;\n}\n", "import * as _ from 'lodash-es';\n\nexport { dfs };\n\n/*\n * A helper that preforms a pre- or post-order traversal on the input graph\n * and returns the nodes in the order they were visited. If the graph is\n * undirected then this algorithm will navigate using neighbors. If the graph\n * is directed then this algorithm will navigate using successors.\n *\n * Order must be one of \"pre\" or \"post\".\n */\nfunction dfs(g, vs, order) {\n if (!_.isArray(vs)) {\n vs = [vs];\n }\n\n var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g);\n\n var acc = [];\n var visited = {};\n _.each(vs, function (v) {\n if (!g.hasNode(v)) {\n throw new Error('Graph does not have node: ' + v);\n }\n\n doDfs(g, v, order === 'post', visited, navigation, acc);\n });\n return acc;\n}\n\nfunction doDfs(g, v, postorder, visited, navigation, acc) {\n if (!Object.prototype.hasOwnProperty.call(visited, v)) {\n visited[v] = true;\n\n if (!postorder) {\n acc.push(v);\n }\n _.each(navigation(v), function (w) {\n doDfs(g, w, postorder, visited, navigation, acc);\n });\n if (postorder) {\n acc.push(v);\n }\n }\n}\n", "import { dfs } from './dfs.js';\n\nexport { postorder };\n\nfunction postorder(g, vs) {\n return dfs(g, vs, 'post');\n}\n", "import { dfs } from './dfs.js';\n\nexport { preorder };\n\nfunction preorder(g, vs) {\n return dfs(g, vs, 'pre');\n}\n", "import * as _ from 'lodash-es';\nimport { PriorityQueue } from '../data/priority-queue.js';\nimport { Graph } from '../graph.js';\n\nexport { prim };\n\nfunction prim(g, weightFunc) {\n var result = new Graph();\n var parents = {};\n var pq = new PriorityQueue();\n var v;\n\n function updateNeighbors(edge) {\n var w = edge.v === v ? edge.w : edge.v;\n var pri = pq.priority(w);\n if (pri !== undefined) {\n var edgeWeight = weightFunc(edge);\n if (edgeWeight < pri) {\n parents[w] = v;\n pq.decrease(w, edgeWeight);\n }\n }\n }\n\n if (g.nodeCount() === 0) {\n return result;\n }\n\n _.each(g.nodes(), function (v) {\n pq.add(v, Number.POSITIVE_INFINITY);\n result.setNode(v);\n });\n\n // Start from an arbitrary node\n pq.decrease(g.nodes()[0], 0);\n\n var init = false;\n while (pq.size() > 0) {\n v = pq.removeMin();\n if (Object.prototype.hasOwnProperty.call(parents, v)) {\n result.setEdge(v, parents[v]);\n } else if (init) {\n throw new Error('Input graph is not connected: ' + g);\n } else {\n init = true;\n }\n\n g.nodeEdges(v).forEach(updateNeighbors);\n }\n\n return result;\n}\n", "import { components } from './components.js';\nimport { dijkstra } from './dijkstra.js';\nimport { dijkstraAll } from './dijkstra-all.js';\nimport { findCycles } from './find-cycles.js';\nimport { floydWarshall } from './floyd-warshall.js';\nimport { isAcyclic } from './is-acyclic.js';\nimport { postorder } from './postorder.js';\nimport { preorder } from './preorder.js';\nimport { prim } from './prim.js';\nimport { tarjan } from './tarjan.js';\nimport { topsort } from './topsort.js';\n\nexport {\n components,\n dijkstra,\n dijkstraAll,\n findCycles,\n floydWarshall,\n isAcyclic,\n postorder,\n preorder,\n prim,\n tarjan,\n topsort,\n};\n", "import * as _ from 'lodash-es';\nimport * as alg from '../../graphlib/alg/index.js';\nimport { simplify } from '../util.js';\nimport { feasibleTree } from './feasible-tree.js';\nimport { longestPath, slack } from './util.js';\n\nexport { networkSimplex };\n\n// Expose some internals for testing purposes\nnetworkSimplex.initLowLimValues = initLowLimValues;\nnetworkSimplex.initCutValues = initCutValues;\nnetworkSimplex.calcCutValue = calcCutValue;\nnetworkSimplex.leaveEdge = leaveEdge;\nnetworkSimplex.enterEdge = enterEdge;\nnetworkSimplex.exchangeEdges = exchangeEdges;\n\n/*\n * The network simplex algorithm assigns ranks to each node in the input graph\n * and iteratively improves the ranking to reduce the length of edges.\n *\n * Preconditions:\n *\n * 1. The input graph must be a DAG.\n * 2. All nodes in the graph must have an object value.\n * 3. All edges in the graph must have \"minlen\" and \"weight\" attributes.\n *\n * Postconditions:\n *\n * 1. All nodes in the graph will have an assigned \"rank\" attribute that has\n * been optimized by the network simplex algorithm. Ranks start at 0.\n *\n *\n * A rough sketch of the algorithm is as follows:\n *\n * 1. Assign initial ranks to each node. We use the longest path algorithm,\n * which assigns ranks to the lowest position possible. In general this\n * leads to very wide bottom ranks and unnecessarily long edges.\n * 2. Construct a feasible tight tree. A tight tree is one such that all\n * edges in the tree have no slack (difference between length of edge\n * and minlen for the edge). This by itself greatly improves the assigned\n * rankings by shorting edges.\n * 3. Iteratively find edges that have negative cut values. Generally a\n * negative cut value indicates that the edge could be removed and a new\n * tree edge could be added to produce a more compact graph.\n *\n * Much of the algorithms here are derived from Gansner, et al., \"A Technique\n * for Drawing Directed Graphs.\" The structure of the file roughly follows the\n * structure of the overall algorithm.\n */\nfunction networkSimplex(g) {\n g = simplify(g);\n longestPath(g);\n var t = feasibleTree(g);\n initLowLimValues(t);\n initCutValues(t, g);\n\n var e, f;\n while ((e = leaveEdge(t))) {\n f = enterEdge(t, g, e);\n exchangeEdges(t, g, e, f);\n }\n}\n\n/*\n * Initializes cut values for all edges in the tree.\n */\nfunction initCutValues(t, g) {\n var vs = alg.postorder(t, t.nodes());\n vs = vs.slice(0, vs.length - 1);\n _.forEach(vs, function (v) {\n assignCutValue(t, g, v);\n });\n}\n\nfunction assignCutValue(t, g, child) {\n var childLab = t.node(child);\n var parent = childLab.parent;\n t.edge(child, parent).cutvalue = calcCutValue(t, g, child);\n}\n\n/*\n * Given the tight tree, its graph, and a child in the graph calculate and\n * return the cut value for the edge between the child and its parent.\n */\nfunction calcCutValue(t, g, child) {\n var childLab = t.node(child);\n var parent = childLab.parent;\n // True if the child is on the tail end of the edge in the directed graph\n var childIsTail = true;\n // The graph's view of the tree edge we're inspecting\n var graphEdge = g.edge(child, parent);\n // The accumulated cut value for the edge between this node and its parent\n var cutValue = 0;\n\n if (!graphEdge) {\n childIsTail = false;\n graphEdge = g.edge(parent, child);\n }\n\n cutValue = graphEdge.weight;\n\n _.forEach(g.nodeEdges(child), function (e) {\n var isOutEdge = e.v === child,\n other = isOutEdge ? e.w : e.v;\n\n if (other !== parent) {\n var pointsToHead = isOutEdge === childIsTail,\n otherWeight = g.edge(e).weight;\n\n cutValue += pointsToHead ? otherWeight : -otherWeight;\n if (isTreeEdge(t, child, other)) {\n var otherCutValue = t.edge(child, other).cutvalue;\n cutValue += pointsToHead ? -otherCutValue : otherCutValue;\n }\n }\n });\n\n return cutValue;\n}\n\nfunction initLowLimValues(tree, root) {\n if (arguments.length < 2) {\n root = tree.nodes()[0];\n }\n dfsAssignLowLim(tree, {}, 1, root);\n}\n\nfunction dfsAssignLowLim(tree, visited, nextLim, v, parent) {\n var low = nextLim;\n var label = tree.node(v);\n\n visited[v] = true;\n _.forEach(tree.neighbors(v), function (w) {\n if (!Object.prototype.hasOwnProperty.call(visited, w)) {\n nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v);\n }\n });\n\n label.low = low;\n label.lim = nextLim++;\n if (parent) {\n label.parent = parent;\n } else {\n // TODO should be able to remove this when we incrementally update low lim\n delete label.parent;\n }\n\n return nextLim;\n}\n\nfunction leaveEdge(tree) {\n return _.find(tree.edges(), function (e) {\n return tree.edge(e).cutvalue < 0;\n });\n}\n\nfunction enterEdge(t, g, edge) {\n var v = edge.v;\n var w = edge.w;\n\n // For the rest of this function we assume that v is the tail and w is the\n // head, so if we don't have this edge in the graph we should flip it to\n // match the correct orientation.\n if (!g.hasEdge(v, w)) {\n v = edge.w;\n w = edge.v;\n }\n\n var vLabel = t.node(v);\n var wLabel = t.node(w);\n var tailLabel = vLabel;\n var flip = false;\n\n // If the root is in the tail of the edge then we need to flip the logic that\n // checks for the head and tail nodes in the candidates function below.\n if (vLabel.lim > wLabel.lim) {\n tailLabel = wLabel;\n flip = true;\n }\n\n var candidates = _.filter(g.edges(), function (edge) {\n return (\n flip === isDescendant(t, t.node(edge.v), tailLabel) &&\n flip !== isDescendant(t, t.node(edge.w), tailLabel)\n );\n });\n\n return _.minBy(candidates, function (edge) {\n return slack(g, edge);\n });\n}\n\nfunction exchangeEdges(t, g, e, f) {\n var v = e.v;\n var w = e.w;\n t.removeEdge(v, w);\n t.setEdge(f.v, f.w, {});\n initLowLimValues(t);\n initCutValues(t, g);\n updateRanks(t, g);\n}\n\nfunction updateRanks(t, g) {\n var root = _.find(t.nodes(), function (v) {\n return !g.node(v).parent;\n });\n var vs = alg.preorder(t, root);\n vs = vs.slice(1);\n _.forEach(vs, function (v) {\n var parent = t.node(v).parent,\n edge = g.edge(v, parent),\n flipped = false;\n\n if (!edge) {\n edge = g.edge(parent, v);\n flipped = true;\n }\n\n g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen);\n });\n}\n\n/*\n * Returns true if the edge is in the tree.\n */\nfunction isTreeEdge(tree, u, v) {\n return tree.hasEdge(u, v);\n}\n\n/*\n * Returns true if the specified node is descendant of the root node per the\n * assigned low and lim attributes in the tree.\n */\nfunction isDescendant(tree, vLabel, rootLabel) {\n return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim;\n}\n", "import { feasibleTree } from './feasible-tree.js';\nimport { networkSimplex } from './network-simplex.js';\nimport { longestPath } from './util.js';\n\nexport { rank };\n\n/*\n * Assigns a rank to each node in the input graph that respects the \"minlen\"\n * constraint specified on edges between nodes.\n *\n * This basic structure is derived from Gansner, et al., \"A Technique for\n * Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n * 1. Graph must be a connected DAG\n * 2. Graph nodes must be objects\n * 3. Graph edges must have \"weight\" and \"minlen\" attributes\n *\n * Post-conditions:\n *\n * 1. Graph nodes will have a \"rank\" attribute based on the results of the\n * algorithm. Ranks can start at any index (including negative), we'll\n * fix them up later.\n */\nfunction rank(g) {\n switch (g.graph().ranker) {\n case 'network-simplex':\n networkSimplexRanker(g);\n break;\n case 'tight-tree':\n tightTreeRanker(g);\n break;\n case 'longest-path':\n longestPathRanker(g);\n break;\n default:\n networkSimplexRanker(g);\n }\n}\n\n// A fast and simple ranker, but results are far from optimal.\nvar longestPathRanker = longestPath;\n\nfunction tightTreeRanker(g) {\n longestPath(g);\n feasibleTree(g);\n}\n\nfunction networkSimplexRanker(g) {\n networkSimplex(g);\n}\n", "import * as _ from 'lodash-es';\nimport * as util from './util.js';\n\nexport { run, cleanup };\n\n/*\n * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs,\n * adds appropriate edges to ensure that all cluster nodes are placed between\n * these boundries, and ensures that the graph is connected.\n *\n * In addition we ensure, through the use of the minlen property, that nodes\n * and subgraph border nodes to not end up on the same rank.\n *\n * Preconditions:\n *\n * 1. Input graph is a DAG\n * 2. Nodes in the input graph has a minlen attribute\n *\n * Postconditions:\n *\n * 1. Input graph is connected.\n * 2. Dummy nodes are added for the tops and bottoms of subgraphs.\n * 3. The minlen attribute for nodes is adjusted to ensure nodes do not\n * get placed on the same rank as subgraph border nodes.\n *\n * The nesting graph idea comes from Sander, \"Layout of Compound Directed\n * Graphs.\"\n */\nfunction run(g) {\n var root = util.addDummyNode(g, 'root', {}, '_root');\n var depths = treeDepths(g);\n var height = _.max(_.values(depths)) - 1; // Note: depths is an Object not an array\n var nodeSep = 2 * height + 1;\n\n g.graph().nestingRoot = root;\n\n // Multiply minlen by nodeSep to align nodes on non-border ranks.\n _.forEach(g.edges(), function (e) {\n g.edge(e).minlen *= nodeSep;\n });\n\n // Calculate a weight that is sufficient to keep subgraphs vertically compact\n var weight = sumWeights(g) + 1;\n\n // Create border nodes and link them up\n _.forEach(g.children(), function (child) {\n dfs(g, root, nodeSep, weight, height, depths, child);\n });\n\n // Save the multiplier for node layers for later removal of empty border\n // layers.\n g.graph().nodeRankFactor = nodeSep;\n}\n\nfunction dfs(g, root, nodeSep, weight, height, depths, v) {\n var children = g.children(v);\n if (!children.length) {\n if (v !== root) {\n g.setEdge(root, v, { weight: 0, minlen: nodeSep });\n }\n return;\n }\n\n var top = util.addBorderNode(g, '_bt');\n var bottom = util.addBorderNode(g, '_bb');\n var label = g.node(v);\n\n g.setParent(top, v);\n label.borderTop = top;\n g.setParent(bottom, v);\n label.borderBottom = bottom;\n\n _.forEach(children, function (child) {\n dfs(g, root, nodeSep, weight, height, depths, child);\n\n var childNode = g.node(child);\n var childTop = childNode.borderTop ? childNode.borderTop : child;\n var childBottom = childNode.borderBottom ? childNode.borderBottom : child;\n var thisWeight = childNode.borderTop ? weight : 2 * weight;\n var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1;\n\n g.setEdge(top, childTop, {\n weight: thisWeight,\n minlen: minlen,\n nestingEdge: true,\n });\n\n g.setEdge(childBottom, bottom, {\n weight: thisWeight,\n minlen: minlen,\n nestingEdge: true,\n });\n });\n\n if (!g.parent(v)) {\n g.setEdge(root, top, { weight: 0, minlen: height + depths[v] });\n }\n}\n\nfunction treeDepths(g) {\n var depths = {};\n function dfs(v, depth) {\n var children = g.children(v);\n if (children && children.length) {\n _.forEach(children, function (child) {\n dfs(child, depth + 1);\n });\n }\n depths[v] = depth;\n }\n _.forEach(g.children(), function (v) {\n dfs(v, 1);\n });\n return depths;\n}\n\nfunction sumWeights(g) {\n return _.reduce(\n g.edges(),\n function (acc, e) {\n return acc + g.edge(e).weight;\n },\n 0,\n );\n}\n\nfunction cleanup(g) {\n var graphLabel = g.graph();\n g.removeNode(graphLabel.nestingRoot);\n delete graphLabel.nestingRoot;\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n if (edge.nestingEdge) {\n g.removeEdge(e);\n }\n });\n}\n", "import * as _ from 'lodash-es';\n\nexport { addSubgraphConstraints };\n\nfunction addSubgraphConstraints(g, cg, vs) {\n var prev = {},\n rootPrev;\n\n _.forEach(vs, function (v) {\n var child = g.parent(v),\n parent,\n prevChild;\n while (child) {\n parent = g.parent(child);\n if (parent) {\n prevChild = prev[parent];\n prev[parent] = child;\n } else {\n prevChild = rootPrev;\n rootPrev = child;\n }\n if (prevChild && prevChild !== child) {\n cg.setEdge(prevChild, child);\n return;\n }\n child = parent;\n }\n });\n\n /*\n function dfs(v) {\n var children = v ? g.children(v) : g.children();\n if (children.length) {\n var min = Number.POSITIVE_INFINITY,\n subgraphs = [];\n _.each(children, function(child) {\n var childMin = dfs(child);\n if (g.children(child).length) {\n subgraphs.push({ v: child, order: childMin });\n }\n min = Math.min(min, childMin);\n });\n _.reduce(_.sortBy(subgraphs, \"order\"), function(prev, curr) {\n cg.setEdge(prev.v, curr.v);\n return curr;\n });\n return min;\n }\n return g.node(v).order;\n }\n dfs(undefined);\n */\n}\n", "import * as _ from 'lodash-es';\nimport { Graph } from '../../graphlib/index.js';\n\nexport { buildLayerGraph };\n\n/*\n * Constructs a graph that can be used to sort a layer of nodes. The graph will\n * contain all base and subgraph nodes from the request layer in their original\n * hierarchy and any edges that are incident on these nodes and are of the type\n * requested by the \"relationship\" parameter.\n *\n * Nodes from the requested rank that do not have parents are assigned a root\n * node in the output graph, which is set in the root graph attribute. This\n * makes it easy to walk the hierarchy of movable nodes during ordering.\n *\n * Pre-conditions:\n *\n * 1. Input graph is a DAG\n * 2. Base nodes in the input graph have a rank attribute\n * 3. Subgraph nodes in the input graph has minRank and maxRank attributes\n * 4. Edges have an assigned weight\n *\n * Post-conditions:\n *\n * 1. Output graph has all nodes in the movable rank with preserved\n * hierarchy.\n * 2. Root nodes in the movable layer are made children of the node\n * indicated by the root attribute of the graph.\n * 3. Non-movable nodes incident on movable nodes, selected by the\n * relationship parameter, are included in the graph (without hierarchy).\n * 4. Edges incident on movable nodes, selected by the relationship\n * parameter, are added to the output graph.\n * 5. The weights for copied edges are aggregated as need, since the output\n * graph is not a multi-graph.\n */\nfunction buildLayerGraph(g, rank, relationship) {\n var root = createRootNode(g),\n result = new Graph({ compound: true })\n .setGraph({ root: root })\n .setDefaultNodeLabel(function (v) {\n return g.node(v);\n });\n\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v),\n parent = g.parent(v);\n\n if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) {\n result.setNode(v);\n result.setParent(v, parent || root);\n\n // This assumes we have only short edges!\n _.forEach(g[relationship](v), function (e) {\n var u = e.v === v ? e.w : e.v,\n edge = result.edge(u, v),\n weight = !_.isUndefined(edge) ? edge.weight : 0;\n result.setEdge(u, v, { weight: g.edge(e).weight + weight });\n });\n\n if (Object.prototype.hasOwnProperty.call(node, 'minRank')) {\n result.setNode(v, {\n borderLeft: node.borderLeft[rank],\n borderRight: node.borderRight[rank],\n });\n }\n }\n });\n\n return result;\n}\n\nfunction createRootNode(g) {\n var v;\n while (g.hasNode((v = _.uniqueId('_root'))));\n return v;\n}\n", "import * as _ from 'lodash-es';\n\nexport { crossCount };\n\n/*\n * A function that takes a layering (an array of layers, each with an array of\n * ordererd nodes) and a graph and returns a weighted crossing count.\n *\n * Pre-conditions:\n *\n * 1. Input graph must be simple (not a multigraph), directed, and include\n * only simple edges.\n * 2. Edges in the input graph must have assigned weights.\n *\n * Post-conditions:\n *\n * 1. The graph and layering matrix are left unchanged.\n *\n * This algorithm is derived from Barth, et al., \"Bilayer Cross Counting.\"\n */\nfunction crossCount(g, layering) {\n var cc = 0;\n for (var i = 1; i < layering.length; ++i) {\n cc += twoLayerCrossCount(g, layering[i - 1], layering[i]);\n }\n return cc;\n}\n\nfunction twoLayerCrossCount(g, northLayer, southLayer) {\n // Sort all of the edges between the north and south layers by their position\n // in the north layer and then the south. Map these edges to the position of\n // their head in the south layer.\n var southPos = _.zipObject(\n southLayer,\n _.map(southLayer, function (v, i) {\n return i;\n }),\n );\n var southEntries = _.flatten(\n _.map(northLayer, function (v) {\n return _.sortBy(\n _.map(g.outEdges(v), function (e) {\n return { pos: southPos[e.w], weight: g.edge(e).weight };\n }),\n 'pos',\n );\n }),\n );\n\n // Build the accumulator tree\n var firstIndex = 1;\n while (firstIndex < southLayer.length) firstIndex <<= 1;\n var treeSize = 2 * firstIndex - 1;\n firstIndex -= 1;\n var tree = _.map(new Array(treeSize), function () {\n return 0;\n });\n\n // Calculate the weighted crossings\n var cc = 0;\n _.forEach(\n // @ts-expect-error\n southEntries.forEach(function (entry) {\n var index = entry.pos + firstIndex;\n tree[index] += entry.weight;\n var weightSum = 0;\n while (index > 0) {\n if (index % 2) {\n weightSum += tree[index + 1];\n }\n index = (index - 1) >> 1;\n tree[index] += entry.weight;\n }\n cc += entry.weight * weightSum;\n }),\n );\n\n return cc;\n}\n", "import * as _ from 'lodash-es';\n\n/*\n * Assigns an initial order value for each node by performing a DFS search\n * starting from nodes in the first rank. Nodes are assigned an order in their\n * rank as they are first visited.\n *\n * This approach comes from Gansner, et al., \"A Technique for Drawing Directed\n * Graphs.\"\n *\n * Returns a layering matrix with an array per layer and each layer sorted by\n * the order of its nodes.\n */\nexport function initOrder(g) {\n var visited = {};\n var simpleNodes = _.filter(g.nodes(), function (v) {\n return !g.children(v).length;\n });\n var maxRank = _.max(\n _.map(simpleNodes, function (v) {\n return g.node(v).rank;\n }),\n );\n var layers = _.map(_.range(maxRank + 1), function () {\n return [];\n });\n\n function dfs(v) {\n if (_.has(visited, v)) return;\n visited[v] = true;\n var node = g.node(v);\n layers[node.rank].push(v);\n _.forEach(g.successors(v), dfs);\n }\n\n var orderedVs = _.sortBy(simpleNodes, function (v) {\n return g.node(v).rank;\n });\n _.forEach(orderedVs, dfs);\n\n return layers;\n}\n", "import * as _ from 'lodash-es';\n\nexport { barycenter };\n\nfunction barycenter(g, movable) {\n return _.map(movable, function (v) {\n var inV = g.inEdges(v);\n if (!inV.length) {\n return { v: v };\n } else {\n var result = _.reduce(\n inV,\n function (acc, e) {\n var edge = g.edge(e),\n nodeU = g.node(e.v);\n return {\n sum: acc.sum + edge.weight * nodeU.order,\n weight: acc.weight + edge.weight,\n };\n },\n { sum: 0, weight: 0 },\n );\n\n return {\n v: v,\n barycenter: result.sum / result.weight,\n weight: result.weight,\n };\n }\n });\n}\n", "import * as _ from 'lodash-es';\n\nexport { resolveConflicts };\n\n/*\n * Given a list of entries of the form {v, barycenter, weight} and a\n * constraint graph this function will resolve any conflicts between the\n * constraint graph and the barycenters for the entries. If the barycenters for\n * an entry would violate a constraint in the constraint graph then we coalesce\n * the nodes in the conflict into a new node that respects the contraint and\n * aggregates barycenter and weight information.\n *\n * This implementation is based on the description in Forster, \"A Fast and\n * Simple Hueristic for Constrained Two-Level Crossing Reduction,\" thought it\n * differs in some specific details.\n *\n * Pre-conditions:\n *\n * 1. Each entry has the form {v, barycenter, weight}, or if the node has\n * no barycenter, then {v}.\n *\n * Returns:\n *\n * A new list of entries of the form {vs, i, barycenter, weight}. The list\n * `vs` may either be a singleton or it may be an aggregation of nodes\n * ordered such that they do not violate constraints from the constraint\n * graph. The property `i` is the lowest original index of any of the\n * elements in `vs`.\n */\nfunction resolveConflicts(entries, cg) {\n var mappedEntries = {};\n _.forEach(entries, function (entry, i) {\n var tmp = (mappedEntries[entry.v] = {\n indegree: 0,\n in: [],\n out: [],\n vs: [entry.v],\n i: i,\n });\n if (!_.isUndefined(entry.barycenter)) {\n // @ts-expect-error\n tmp.barycenter = entry.barycenter;\n // @ts-expect-error\n tmp.weight = entry.weight;\n }\n });\n\n _.forEach(cg.edges(), function (e) {\n var entryV = mappedEntries[e.v];\n var entryW = mappedEntries[e.w];\n if (!_.isUndefined(entryV) && !_.isUndefined(entryW)) {\n entryW.indegree++;\n entryV.out.push(mappedEntries[e.w]);\n }\n });\n\n var sourceSet = _.filter(mappedEntries, function (entry) {\n // @ts-expect-error\n return !entry.indegree;\n });\n\n return doResolveConflicts(sourceSet);\n}\n\nfunction doResolveConflicts(sourceSet) {\n var entries = [];\n\n function handleIn(vEntry) {\n return function (uEntry) {\n if (uEntry.merged) {\n return;\n }\n if (\n _.isUndefined(uEntry.barycenter) ||\n _.isUndefined(vEntry.barycenter) ||\n uEntry.barycenter >= vEntry.barycenter\n ) {\n mergeEntries(vEntry, uEntry);\n }\n };\n }\n\n function handleOut(vEntry) {\n return function (wEntry) {\n wEntry['in'].push(vEntry);\n if (--wEntry.indegree === 0) {\n sourceSet.push(wEntry);\n }\n };\n }\n\n while (sourceSet.length) {\n var entry = sourceSet.pop();\n entries.push(entry);\n _.forEach(entry['in'].reverse(), handleIn(entry));\n _.forEach(entry.out, handleOut(entry));\n }\n\n return _.map(\n _.filter(entries, function (entry) {\n return !entry.merged;\n }),\n function (entry) {\n return _.pick(entry, ['vs', 'i', 'barycenter', 'weight']);\n },\n );\n}\n\nfunction mergeEntries(target, source) {\n var sum = 0;\n var weight = 0;\n\n if (target.weight) {\n sum += target.barycenter * target.weight;\n weight += target.weight;\n }\n\n if (source.weight) {\n sum += source.barycenter * source.weight;\n weight += source.weight;\n }\n\n target.vs = source.vs.concat(target.vs);\n target.barycenter = sum / weight;\n target.weight = weight;\n target.i = Math.min(source.i, target.i);\n source.merged = true;\n}\n", "import * as _ from 'lodash-es';\nimport * as util from '../util.js';\n\nexport { sort };\n\nfunction sort(entries, biasRight) {\n var parts = util.partition(entries, function (entry) {\n return Object.prototype.hasOwnProperty.call(entry, 'barycenter');\n });\n var sortable = parts.lhs,\n unsortable = _.sortBy(parts.rhs, function (entry) {\n return -entry.i;\n }),\n vs = [],\n sum = 0,\n weight = 0,\n vsIndex = 0;\n\n sortable.sort(compareWithBias(!!biasRight));\n\n vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n\n _.forEach(sortable, function (entry) {\n vsIndex += entry.vs.length;\n vs.push(entry.vs);\n sum += entry.barycenter * entry.weight;\n weight += entry.weight;\n vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n });\n\n var result = { vs: _.flatten(vs) };\n if (weight) {\n result.barycenter = sum / weight;\n result.weight = weight;\n }\n return result;\n}\n\nfunction consumeUnsortable(vs, unsortable, index) {\n var last;\n while (unsortable.length && (last = _.last(unsortable)).i <= index) {\n unsortable.pop();\n vs.push(last.vs);\n index++;\n }\n return index;\n}\n\nfunction compareWithBias(bias) {\n return function (entryV, entryW) {\n if (entryV.barycenter < entryW.barycenter) {\n return -1;\n } else if (entryV.barycenter > entryW.barycenter) {\n return 1;\n }\n\n return !bias ? entryV.i - entryW.i : entryW.i - entryV.i;\n };\n}\n", "import * as _ from 'lodash-es';\nimport { barycenter } from './barycenter.js';\nimport { resolveConflicts } from './resolve-conflicts.js';\nimport { sort } from './sort.js';\n\nexport { sortSubgraph };\n\nfunction sortSubgraph(g, v, cg, biasRight) {\n var movable = g.children(v);\n var node = g.node(v);\n var bl = node ? node.borderLeft : undefined;\n var br = node ? node.borderRight : undefined;\n var subgraphs = {};\n\n if (bl) {\n movable = _.filter(movable, function (w) {\n return w !== bl && w !== br;\n });\n }\n\n var barycenters = barycenter(g, movable);\n _.forEach(barycenters, function (entry) {\n if (g.children(entry.v).length) {\n var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight);\n subgraphs[entry.v] = subgraphResult;\n if (Object.prototype.hasOwnProperty.call(subgraphResult, 'barycenter')) {\n mergeBarycenters(entry, subgraphResult);\n }\n }\n });\n\n var entries = resolveConflicts(barycenters, cg);\n expandSubgraphs(entries, subgraphs);\n\n var result = sort(entries, biasRight);\n\n if (bl) {\n result.vs = _.flatten([bl, result.vs, br]);\n if (g.predecessors(bl).length) {\n var blPred = g.node(g.predecessors(bl)[0]),\n brPred = g.node(g.predecessors(br)[0]);\n if (!Object.prototype.hasOwnProperty.call(result, 'barycenter')) {\n result.barycenter = 0;\n result.weight = 0;\n }\n result.barycenter =\n (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2);\n result.weight += 2;\n }\n }\n\n return result;\n}\n\nfunction expandSubgraphs(entries, subgraphs) {\n _.forEach(entries, function (entry) {\n entry.vs = _.flatten(\n entry.vs.map(function (v) {\n if (subgraphs[v]) {\n return subgraphs[v].vs;\n }\n return v;\n }),\n );\n });\n}\n\nfunction mergeBarycenters(target, other) {\n if (!_.isUndefined(target.barycenter)) {\n target.barycenter =\n (target.barycenter * target.weight + other.barycenter * other.weight) /\n (target.weight + other.weight);\n target.weight += other.weight;\n } else {\n target.barycenter = other.barycenter;\n target.weight = other.weight;\n }\n}\n", "import * as _ from 'lodash-es';\nimport { Graph } from '../../graphlib/index.js';\nimport * as util from '../util.js';\nimport { addSubgraphConstraints } from './add-subgraph-constraints.js';\nimport { buildLayerGraph } from './build-layer-graph.js';\nimport { crossCount } from './cross-count.js';\nimport { initOrder } from './init-order.js';\nimport { sortSubgraph } from './sort-subgraph.js';\n\nexport { order };\n\n/*\n * Applies heuristics to minimize edge crossings in the graph and sets the best\n * order solution as an order attribute on each node.\n *\n * Pre-conditions:\n *\n * 1. Graph must be DAG\n * 2. Graph nodes must be objects with a \"rank\" attribute\n * 3. Graph edges must have the \"weight\" attribute\n *\n * Post-conditions:\n *\n * 1. Graph nodes will have an \"order\" attribute based on the results of the\n * algorithm.\n */\nfunction order(g) {\n var maxRank = util.maxRank(g),\n downLayerGraphs = buildLayerGraphs(g, _.range(1, maxRank + 1), 'inEdges'),\n upLayerGraphs = buildLayerGraphs(g, _.range(maxRank - 1, -1, -1), 'outEdges');\n\n var layering = initOrder(g);\n assignOrder(g, layering);\n\n var bestCC = Number.POSITIVE_INFINITY,\n best;\n\n for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {\n sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2);\n\n layering = util.buildLayerMatrix(g);\n var cc = crossCount(g, layering);\n if (cc < bestCC) {\n lastBest = 0;\n best = _.cloneDeep(layering);\n bestCC = cc;\n }\n }\n\n assignOrder(g, best);\n}\n\nfunction buildLayerGraphs(g, ranks, relationship) {\n return _.map(ranks, function (rank) {\n return buildLayerGraph(g, rank, relationship);\n });\n}\n\nfunction sweepLayerGraphs(layerGraphs, biasRight) {\n var cg = new Graph();\n _.forEach(layerGraphs, function (lg) {\n var root = lg.graph().root;\n var sorted = sortSubgraph(lg, root, cg, biasRight);\n _.forEach(sorted.vs, function (v, i) {\n lg.node(v).order = i;\n });\n addSubgraphConstraints(lg, cg, sorted.vs);\n });\n}\n\nfunction assignOrder(g, layering) {\n _.forEach(layering, function (layer) {\n _.forEach(layer, function (v, i) {\n g.node(v).order = i;\n });\n });\n}\n", "import * as _ from 'lodash-es';\n\nexport { parentDummyChains };\n\nfunction parentDummyChains(g) {\n var postorderNums = postorder(g);\n\n _.forEach(g.graph().dummyChains, function (v) {\n var node = g.node(v);\n var edgeObj = node.edgeObj;\n var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w);\n var path = pathData.path;\n var lca = pathData.lca;\n var pathIdx = 0;\n var pathV = path[pathIdx];\n var ascending = true;\n\n while (v !== edgeObj.w) {\n node = g.node(v);\n\n if (ascending) {\n while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) {\n pathIdx++;\n }\n\n if (pathV === lca) {\n ascending = false;\n }\n }\n\n if (!ascending) {\n while (\n pathIdx < path.length - 1 &&\n g.node((pathV = path[pathIdx + 1])).minRank <= node.rank\n ) {\n pathIdx++;\n }\n pathV = path[pathIdx];\n }\n\n g.setParent(v, pathV);\n v = g.successors(v)[0];\n }\n });\n}\n\n// Find a path from v to w through the lowest common ancestor (LCA). Return the\n// full path and the LCA.\nfunction findPath(g, postorderNums, v, w) {\n var vPath = [];\n var wPath = [];\n var low = Math.min(postorderNums[v].low, postorderNums[w].low);\n var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim);\n var parent;\n var lca;\n\n // Traverse up from v to find the LCA\n parent = v;\n do {\n parent = g.parent(parent);\n vPath.push(parent);\n } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim));\n lca = parent;\n\n // Traverse from w to LCA\n parent = w;\n while ((parent = g.parent(parent)) !== lca) {\n wPath.push(parent);\n }\n\n return { path: vPath.concat(wPath.reverse()), lca: lca };\n}\n\nfunction postorder(g) {\n var result = {};\n var lim = 0;\n\n function dfs(v) {\n var low = lim;\n _.forEach(g.children(v), dfs);\n result[v] = { low: low, lim: lim++ };\n }\n _.forEach(g.children(), dfs);\n\n return result;\n}\n", "import * as _ from 'lodash-es';\nimport { Graph } from '../../graphlib/index.js';\nimport * as util from '../util.js';\n\n/*\n * This module provides coordinate assignment based on Brandes and K\u00F6pf, \"Fast\n * and Simple Horizontal Coordinate Assignment.\"\n */\n\nexport {\n positionX,\n findType1Conflicts,\n findType2Conflicts,\n addConflict,\n hasConflict,\n verticalAlignment,\n horizontalCompaction,\n alignCoordinates,\n findSmallestWidthAlignment,\n balance,\n};\n\n/*\n * Marks all edges in the graph with a type-1 conflict with the \"type1Conflict\"\n * property. A type-1 conflict is one where a non-inner segment crosses an\n * inner segment. An inner segment is an edge with both incident nodes marked\n * with the \"dummy\" property.\n *\n * This algorithm scans layer by layer, starting with the second, for type-1\n * conflicts between the current layer and the previous layer. For each layer\n * it scans the nodes from left to right until it reaches one that is incident\n * on an inner segment. It then scans predecessors to determine if they have\n * edges that cross that inner segment. At the end a final scan is done for all\n * nodes on the current rank to see if they cross the last visited inner\n * segment.\n *\n * This algorithm (safely) assumes that a dummy node will only be incident on a\n * single node in the layers being scanned.\n */\nfunction findType1Conflicts(g, layering) {\n /** @type {{[nodeId: string | number]: {[nodeId: string | number]: true}}} */\n var conflicts = {};\n\n function visitLayer(prevLayer, layer) {\n var // last visited node in the previous layer that is incident on an inner\n // segment.\n k0 = 0,\n // Tracks the last node in this layer scanned for crossings with a type-1\n // segment.\n scanPos = 0,\n prevLayerLength = prevLayer.length,\n lastNode = _.last(layer);\n\n _.forEach(layer, function (v, i) {\n var w = findOtherInnerSegmentNode(g, v),\n k1 = w ? g.node(w).order : prevLayerLength;\n\n if (w || v === lastNode) {\n _.forEach(layer.slice(scanPos, i + 1), function (scanNode) {\n _.forEach(g.predecessors(scanNode), function (u) {\n var uLabel = g.node(u),\n uPos = uLabel.order;\n if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) {\n addConflict(conflicts, u, scanNode);\n }\n });\n });\n // @ts-expect-error\n scanPos = i + 1;\n k0 = k1;\n }\n });\n\n return layer;\n }\n\n _.reduce(layering, visitLayer);\n return conflicts;\n}\n\nfunction findType2Conflicts(g, layering) {\n /** @type {{[nodeId: string | number]: {[nodeId: string | number]: true}}} */\n var conflicts = {};\n\n function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) {\n var v;\n _.forEach(_.range(southPos, southEnd), function (i) {\n v = south[i];\n if (g.node(v).dummy) {\n _.forEach(g.predecessors(v), function (u) {\n var uNode = g.node(u);\n if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) {\n addConflict(conflicts, u, v);\n }\n });\n }\n });\n }\n\n function visitLayer(north, south) {\n var prevNorthPos = -1,\n nextNorthPos,\n southPos = 0;\n\n _.forEach(south, function (v, southLookahead) {\n if (g.node(v).dummy === 'border') {\n var predecessors = g.predecessors(v);\n if (predecessors.length) {\n nextNorthPos = g.node(predecessors[0]).order;\n scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos);\n // @ts-expect-error\n southPos = southLookahead;\n prevNorthPos = nextNorthPos;\n }\n }\n scan(south, southPos, south.length, nextNorthPos, north.length);\n });\n\n return south;\n }\n\n _.reduce(layering, visitLayer);\n return conflicts;\n}\n\nfunction findOtherInnerSegmentNode(g, v) {\n if (g.node(v).dummy) {\n return _.find(g.predecessors(v), function (u) {\n return g.node(u).dummy;\n });\n }\n}\n\n/**\n * Sets `conflicts[v][w] = true`, creating objects if needed.\n *\n * @param {{[nodeId: string | number]: {[nodeId: string | number]: true}}} conflicts - Object to set.\n * @param {string | number} v - First Node ID\n * @param {string | number} w - Second Node ID\n */\nfunction addConflict(conflicts, v, w) {\n if (v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n\n if (!Object.prototype.hasOwnProperty.call(conflicts, v)) {\n // can't use conflicts[v] = {} since it's unsafe if v = `__proto__`\n Object.defineProperty(conflicts, v, {\n enumerable: true,\n configurable: true,\n value: {},\n writable: true,\n });\n }\n var conflictsV = conflicts[v];\n Object.defineProperty(conflictsV, w, {\n enumerable: true,\n configurable: true,\n value: true,\n writable: true,\n });\n}\n\nfunction hasConflict(conflicts, v, w) {\n if (v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n return !!conflicts[v] && Object.prototype.hasOwnProperty.call(conflicts[v], w);\n}\n\n/*\n * Try to align nodes into vertical \"blocks\" where possible. This algorithm\n * attempts to align a node with one of its median neighbors. If the edge\n * connecting a neighbor is a type-1 conflict then we ignore that possibility.\n * If a previous node has already formed a block with a node after the node\n * we're trying to form a block with, we also ignore that possibility - our\n * blocks would be split in that scenario.\n */\nfunction verticalAlignment(g, layering, conflicts, neighborFn) {\n var root = {},\n align = {},\n pos = {};\n\n // We cache the position here based on the layering because the graph and\n // layering may be out of sync. The layering matrix is manipulated to\n // generate different extreme alignments.\n _.forEach(layering, function (layer) {\n _.forEach(layer, function (v, order) {\n root[v] = v;\n align[v] = v;\n pos[v] = order;\n });\n });\n\n _.forEach(layering, function (layer) {\n var prevIdx = -1;\n _.forEach(layer, function (v) {\n var ws = neighborFn(v);\n if (ws.length) {\n ws = _.sortBy(ws, function (w) {\n return pos[w];\n });\n var mp = (ws.length - 1) / 2;\n for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) {\n var w = ws[i];\n if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) {\n align[w] = v;\n align[v] = root[v] = root[w];\n prevIdx = pos[w];\n }\n }\n }\n });\n });\n\n return { root: root, align: align };\n}\n\nfunction horizontalCompaction(g, layering, root, align, reverseSep) {\n // This portion of the algorithm differs from BK due to a number of problems.\n // Instead of their algorithm we construct a new block graph and do two\n // sweeps. The first sweep places blocks with the smallest possible\n // coordinates. The second sweep removes unused space by moving blocks to the\n // greatest coordinates without violating separation.\n var xs = {},\n blockG = buildBlockGraph(g, layering, root, reverseSep),\n borderType = reverseSep ? 'borderLeft' : 'borderRight';\n\n function iterate(setXsFunc, nextNodesFunc) {\n var stack = blockG.nodes();\n var elem = stack.pop();\n var visited = {};\n while (elem) {\n if (visited[elem]) {\n setXsFunc(elem);\n } else {\n visited[elem] = true;\n stack.push(elem);\n stack = stack.concat(nextNodesFunc(elem));\n }\n\n elem = stack.pop();\n }\n }\n\n // First pass, assign smallest coordinates\n function pass1(elem) {\n xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) {\n return Math.max(acc, xs[e.v] + blockG.edge(e));\n }, 0);\n }\n\n // Second pass, assign greatest coordinates\n function pass2(elem) {\n var min = blockG.outEdges(elem).reduce(function (acc, e) {\n return Math.min(acc, xs[e.w] - blockG.edge(e));\n }, Number.POSITIVE_INFINITY);\n\n var node = g.node(elem);\n if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) {\n xs[elem] = Math.max(xs[elem], min);\n }\n }\n\n iterate(pass1, blockG.predecessors.bind(blockG));\n iterate(pass2, blockG.successors.bind(blockG));\n\n // Assign x coordinates to all nodes\n _.forEach(align, function (v) {\n xs[v] = xs[root[v]];\n });\n\n return xs;\n}\n\nfunction buildBlockGraph(g, layering, root, reverseSep) {\n var blockGraph = new Graph(),\n graphLabel = g.graph(),\n sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep);\n\n _.forEach(layering, function (layer) {\n var u;\n _.forEach(layer, function (v) {\n var vRoot = root[v];\n blockGraph.setNode(vRoot);\n if (u) {\n var uRoot = root[u],\n prevMax = blockGraph.edge(uRoot, vRoot);\n blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0));\n }\n u = v;\n });\n });\n\n return blockGraph;\n}\n\n/*\n * Returns the alignment that has the smallest width of the given alignments.\n */\nfunction findSmallestWidthAlignment(g, xss) {\n return _.minBy(_.values(xss), function (xs) {\n var max = Number.NEGATIVE_INFINITY;\n var min = Number.POSITIVE_INFINITY;\n\n _.forIn(xs, function (x, v) {\n var halfWidth = width(g, v) / 2;\n\n max = Math.max(x + halfWidth, max);\n min = Math.min(x - halfWidth, min);\n });\n\n return max - min;\n });\n}\n\n/*\n * Align the coordinates of each of the layout alignments such that\n * left-biased alignments have their minimum coordinate at the same point as\n * the minimum coordinate of the smallest width alignment and right-biased\n * alignments have their maximum coordinate at the same point as the maximum\n * coordinate of the smallest width alignment.\n */\nfunction alignCoordinates(xss, alignTo) {\n var alignToVals = _.values(alignTo),\n alignToMin = _.min(alignToVals),\n alignToMax = _.max(alignToVals);\n\n _.forEach(['u', 'd'], function (vert) {\n _.forEach(['l', 'r'], function (horiz) {\n var alignment = vert + horiz,\n xs = xss[alignment],\n delta;\n if (xs === alignTo) return;\n\n var xsVals = _.values(xs);\n delta = horiz === 'l' ? alignToMin - _.min(xsVals) : alignToMax - _.max(xsVals);\n\n if (delta) {\n xss[alignment] = _.mapValues(xs, function (x) {\n return x + delta;\n });\n }\n });\n });\n}\n\nfunction balance(xss, align) {\n return _.mapValues(xss.ul, function (ignore, v) {\n if (align) {\n return xss[align.toLowerCase()][v];\n } else {\n var xs = _.sortBy(_.map(xss, v));\n return (xs[1] + xs[2]) / 2;\n }\n });\n}\n\nfunction positionX(g) {\n var layering = util.buildLayerMatrix(g);\n var conflicts = _.merge(findType1Conflicts(g, layering), findType2Conflicts(g, layering));\n\n var xss = {};\n var adjustedLayering;\n _.forEach(['u', 'd'], function (vert) {\n adjustedLayering = vert === 'u' ? layering : _.values(layering).reverse();\n _.forEach(['l', 'r'], function (horiz) {\n if (horiz === 'r') {\n adjustedLayering = _.map(adjustedLayering, function (inner) {\n return _.values(inner).reverse();\n });\n }\n\n var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g);\n var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn);\n var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r');\n if (horiz === 'r') {\n xs = _.mapValues(xs, function (x) {\n return -x;\n });\n }\n xss[vert + horiz] = xs;\n });\n });\n\n var smallestWidth = findSmallestWidthAlignment(g, xss);\n alignCoordinates(xss, smallestWidth);\n return balance(xss, g.graph().align);\n}\n\nfunction sep(nodeSep, edgeSep, reverseSep) {\n return function (g, v, w) {\n var vLabel = g.node(v);\n var wLabel = g.node(w);\n var sum = 0;\n var delta;\n\n sum += vLabel.width / 2;\n if (Object.prototype.hasOwnProperty.call(vLabel, 'labelpos')) {\n switch (vLabel.labelpos.toLowerCase()) {\n case 'l':\n delta = -vLabel.width / 2;\n break;\n case 'r':\n delta = vLabel.width / 2;\n break;\n }\n }\n if (delta) {\n sum += reverseSep ? delta : -delta;\n }\n delta = 0;\n\n sum += (vLabel.dummy ? edgeSep : nodeSep) / 2;\n sum += (wLabel.dummy ? edgeSep : nodeSep) / 2;\n\n sum += wLabel.width / 2;\n if (Object.prototype.hasOwnProperty.call(wLabel, 'labelpos')) {\n switch (wLabel.labelpos.toLowerCase()) {\n case 'l':\n delta = wLabel.width / 2;\n break;\n case 'r':\n delta = -wLabel.width / 2;\n break;\n }\n }\n if (delta) {\n sum += reverseSep ? delta : -delta;\n }\n delta = 0;\n\n return sum;\n };\n}\n\nfunction width(g, v) {\n return g.node(v).width;\n}\n", "import * as _ from 'lodash-es';\nimport * as util from '../util.js';\nimport { positionX } from './bk.js';\n\nexport { position };\n\nfunction position(g) {\n g = util.asNonCompoundGraph(g);\n\n positionY(g);\n _.forOwn(positionX(g), function (x, v) {\n g.node(v).x = x;\n });\n}\n\nfunction positionY(g) {\n var layering = util.buildLayerMatrix(g);\n var rankSep = g.graph().ranksep;\n var prevY = 0;\n _.forEach(layering, function (layer) {\n var maxHeight = _.max(\n _.map(layer, function (v) {\n return g.node(v).height;\n }),\n );\n _.forEach(layer, function (v) {\n g.node(v).y = prevY + maxHeight / 2;\n });\n prevY += maxHeight + rankSep;\n });\n}\n", "import * as _ from 'lodash-es';\nimport { Graph } from '../graphlib/index.js';\nimport { addBorderSegments } from './add-border-segments.js';\nimport * as coordinateSystem from './coordinate-system.js';\nimport * as acyclic from './acyclic.js';\nimport * as normalize from './normalize.js';\nimport { rank } from './rank/index.js';\nimport * as nestingGraph from './nesting-graph.js';\nimport { order } from './order/index.js';\nimport { parentDummyChains } from './parent-dummy-chains.js';\nimport { position } from './position/index.js';\nimport * as util from './util.js';\n\nexport { layout };\n\nfunction layout(g, opts) {\n var time = opts && opts.debugTiming ? util.time : util.notime;\n time('layout', () => {\n var layoutGraph = time(' buildLayoutGraph', () => buildLayoutGraph(g));\n time(' runLayout', () => runLayout(layoutGraph, time));\n time(' updateInputGraph', () => updateInputGraph(g, layoutGraph));\n });\n}\n\nfunction runLayout(g, time) {\n time(' makeSpaceForEdgeLabels', () => makeSpaceForEdgeLabels(g));\n time(' removeSelfEdges', () => removeSelfEdges(g));\n time(' acyclic', () => acyclic.run(g));\n time(' nestingGraph.run', () => nestingGraph.run(g));\n time(' rank', () => rank(util.asNonCompoundGraph(g)));\n time(' injectEdgeLabelProxies', () => injectEdgeLabelProxies(g));\n time(' removeEmptyRanks', () => util.removeEmptyRanks(g));\n time(' nestingGraph.cleanup', () => nestingGraph.cleanup(g));\n time(' normalizeRanks', () => util.normalizeRanks(g));\n time(' assignRankMinMax', () => assignRankMinMax(g));\n time(' removeEdgeLabelProxies', () => removeEdgeLabelProxies(g));\n time(' normalize.run', () => normalize.run(g));\n time(' parentDummyChains', () => parentDummyChains(g));\n time(' addBorderSegments', () => addBorderSegments(g));\n time(' order', () => order(g));\n time(' insertSelfEdges', () => insertSelfEdges(g));\n time(' adjustCoordinateSystem', () => coordinateSystem.adjust(g));\n time(' position', () => position(g));\n time(' positionSelfEdges', () => positionSelfEdges(g));\n time(' removeBorderNodes', () => removeBorderNodes(g));\n time(' normalize.undo', () => normalize.undo(g));\n time(' fixupEdgeLabelCoords', () => fixupEdgeLabelCoords(g));\n time(' undoCoordinateSystem', () => coordinateSystem.undo(g));\n time(' translateGraph', () => translateGraph(g));\n time(' assignNodeIntersects', () => assignNodeIntersects(g));\n time(' reversePoints', () => reversePointsForReversedEdges(g));\n time(' acyclic.undo', () => acyclic.undo(g));\n}\n\n/*\n * Copies final layout information from the layout graph back to the input\n * graph. This process only copies whitelisted attributes from the layout graph\n * to the input graph, so it serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction updateInputGraph(inputGraph, layoutGraph) {\n _.forEach(inputGraph.nodes(), function (v) {\n var inputLabel = inputGraph.node(v);\n var layoutLabel = layoutGraph.node(v);\n\n if (inputLabel) {\n inputLabel.x = layoutLabel.x;\n inputLabel.y = layoutLabel.y;\n\n if (layoutGraph.children(v).length) {\n inputLabel.width = layoutLabel.width;\n inputLabel.height = layoutLabel.height;\n }\n }\n });\n\n _.forEach(inputGraph.edges(), function (e) {\n var inputLabel = inputGraph.edge(e);\n var layoutLabel = layoutGraph.edge(e);\n\n inputLabel.points = layoutLabel.points;\n if (Object.prototype.hasOwnProperty.call(layoutLabel, 'x')) {\n inputLabel.x = layoutLabel.x;\n inputLabel.y = layoutLabel.y;\n }\n });\n\n inputGraph.graph().width = layoutGraph.graph().width;\n inputGraph.graph().height = layoutGraph.graph().height;\n}\n\nvar graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy'];\nvar graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' };\nvar graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align'];\nvar nodeNumAttrs = ['width', 'height'];\nvar nodeDefaults = { width: 0, height: 0 };\nvar edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset'];\nvar edgeDefaults = {\n minlen: 1,\n weight: 1,\n width: 0,\n height: 0,\n labeloffset: 10,\n labelpos: 'r',\n};\nvar edgeAttrs = ['labelpos'];\n\n/*\n * Constructs a new graph from the input graph, which can be used for layout.\n * This process copies only whitelisted attributes from the input graph to the\n * layout graph. Thus this function serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction buildLayoutGraph(inputGraph) {\n var g = new Graph({ multigraph: true, compound: true });\n var graph = canonicalize(inputGraph.graph());\n\n g.setGraph(\n _.merge({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), _.pick(graph, graphAttrs)),\n );\n\n _.forEach(inputGraph.nodes(), function (v) {\n var node = canonicalize(inputGraph.node(v));\n g.setNode(v, _.defaults(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults));\n g.setParent(v, inputGraph.parent(v));\n });\n\n _.forEach(inputGraph.edges(), function (e) {\n var edge = canonicalize(inputGraph.edge(e));\n g.setEdge(\n e,\n _.merge({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), _.pick(edge, edgeAttrs)),\n );\n });\n\n return g;\n}\n\n/*\n * This idea comes from the Gansner paper: to account for edge labels in our\n * layout we split each rank in half by doubling minlen and halving ranksep.\n * Then we can place labels at these mid-points between nodes.\n *\n * We also add some minimal padding to the width to push the label for the edge\n * away from the edge itself a bit.\n */\nfunction makeSpaceForEdgeLabels(g) {\n var graph = g.graph();\n graph.ranksep /= 2;\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n edge.minlen *= 2;\n if (edge.labelpos.toLowerCase() !== 'c') {\n if (graph.rankdir === 'TB' || graph.rankdir === 'BT') {\n edge.width += edge.labeloffset;\n } else {\n edge.height += edge.labeloffset;\n }\n }\n });\n}\n\n/*\n * Creates temporary dummy nodes that capture the rank in which each edge's\n * label is going to, if it has one of non-zero width and height. We do this\n * so that we can safely remove empty ranks while preserving balance for the\n * label's position.\n */\nfunction injectEdgeLabelProxies(g) {\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n if (edge.width && edge.height) {\n var v = g.node(e.v);\n var w = g.node(e.w);\n var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e };\n util.addDummyNode(g, 'edge-proxy', label, '_ep');\n }\n });\n}\n\nfunction assignRankMinMax(g) {\n var maxRank = 0;\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n if (node.borderTop) {\n node.minRank = g.node(node.borderTop).rank;\n node.maxRank = g.node(node.borderBottom).rank;\n // @ts-expect-error\n maxRank = _.max(maxRank, node.maxRank);\n }\n });\n g.graph().maxRank = maxRank;\n}\n\nfunction removeEdgeLabelProxies(g) {\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n if (node.dummy === 'edge-proxy') {\n g.edge(node.e).labelRank = node.rank;\n g.removeNode(v);\n }\n });\n}\n\nfunction translateGraph(g) {\n var minX = Number.POSITIVE_INFINITY;\n var maxX = 0;\n var minY = Number.POSITIVE_INFINITY;\n var maxY = 0;\n var graphLabel = g.graph();\n var marginX = graphLabel.marginx || 0;\n var marginY = graphLabel.marginy || 0;\n\n function getExtremes(attrs) {\n var x = attrs.x;\n var y = attrs.y;\n var w = attrs.width;\n var h = attrs.height;\n minX = Math.min(minX, x - w / 2);\n maxX = Math.max(maxX, x + w / 2);\n minY = Math.min(minY, y - h / 2);\n maxY = Math.max(maxY, y + h / 2);\n }\n\n _.forEach(g.nodes(), function (v) {\n getExtremes(g.node(v));\n });\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n if (Object.prototype.hasOwnProperty.call(edge, 'x')) {\n getExtremes(edge);\n }\n });\n\n minX -= marginX;\n minY -= marginY;\n\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n node.x -= minX;\n node.y -= minY;\n });\n\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n _.forEach(edge.points, function (p) {\n p.x -= minX;\n p.y -= minY;\n });\n if (Object.prototype.hasOwnProperty.call(edge, 'x')) {\n edge.x -= minX;\n }\n if (Object.prototype.hasOwnProperty.call(edge, 'y')) {\n edge.y -= minY;\n }\n });\n\n graphLabel.width = maxX - minX + marginX;\n graphLabel.height = maxY - minY + marginY;\n}\n\nfunction assignNodeIntersects(g) {\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n var nodeV = g.node(e.v);\n var nodeW = g.node(e.w);\n var p1, p2;\n if (!edge.points) {\n edge.points = [];\n p1 = nodeW;\n p2 = nodeV;\n } else {\n p1 = edge.points[0];\n p2 = edge.points[edge.points.length - 1];\n }\n edge.points.unshift(util.intersectRect(nodeV, p1));\n edge.points.push(util.intersectRect(nodeW, p2));\n });\n}\n\nfunction fixupEdgeLabelCoords(g) {\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n if (Object.prototype.hasOwnProperty.call(edge, 'x')) {\n if (edge.labelpos === 'l' || edge.labelpos === 'r') {\n edge.width -= edge.labeloffset;\n }\n switch (edge.labelpos) {\n case 'l':\n edge.x -= edge.width / 2 + edge.labeloffset;\n break;\n case 'r':\n edge.x += edge.width / 2 + edge.labeloffset;\n break;\n }\n }\n });\n}\n\nfunction reversePointsForReversedEdges(g) {\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n if (edge.reversed) {\n edge.points.reverse();\n }\n });\n}\n\nfunction removeBorderNodes(g) {\n _.forEach(g.nodes(), function (v) {\n if (g.children(v).length) {\n var node = g.node(v);\n var t = g.node(node.borderTop);\n var b = g.node(node.borderBottom);\n var l = g.node(_.last(node.borderLeft));\n var r = g.node(_.last(node.borderRight));\n\n node.width = Math.abs(r.x - l.x);\n node.height = Math.abs(b.y - t.y);\n node.x = l.x + node.width / 2;\n node.y = t.y + node.height / 2;\n }\n });\n\n _.forEach(g.nodes(), function (v) {\n if (g.node(v).dummy === 'border') {\n g.removeNode(v);\n }\n });\n}\n\nfunction removeSelfEdges(g) {\n _.forEach(g.edges(), function (e) {\n if (e.v === e.w) {\n var node = g.node(e.v);\n if (!node.selfEdges) {\n node.selfEdges = [];\n }\n node.selfEdges.push({ e: e, label: g.edge(e) });\n g.removeEdge(e);\n }\n });\n}\n\nfunction insertSelfEdges(g) {\n var layers = util.buildLayerMatrix(g);\n _.forEach(layers, function (layer) {\n var orderShift = 0;\n _.forEach(layer, function (v, i) {\n var node = g.node(v);\n node.order = i + orderShift;\n _.forEach(node.selfEdges, function (selfEdge) {\n util.addDummyNode(\n g,\n 'selfedge',\n {\n width: selfEdge.label.width,\n height: selfEdge.label.height,\n rank: node.rank,\n order: i + ++orderShift,\n e: selfEdge.e,\n label: selfEdge.label,\n },\n '_se',\n );\n });\n delete node.selfEdges;\n });\n });\n}\n\nfunction positionSelfEdges(g) {\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n if (node.dummy === 'selfedge') {\n var selfNode = g.node(node.e.v);\n var x = selfNode.x + selfNode.width / 2;\n var y = selfNode.y;\n var dx = node.x - x;\n var dy = selfNode.height / 2;\n g.setEdge(node.e, node.label);\n g.removeNode(v);\n node.label.points = [\n { x: x + (2 * dx) / 3, y: y - dy },\n { x: x + (5 * dx) / 6, y: y - dy },\n { x: x + dx, y: y },\n { x: x + (5 * dx) / 6, y: y + dy },\n { x: x + (2 * dx) / 3, y: y + dy },\n ];\n node.label.x = node.x;\n node.label.y = node.y;\n }\n });\n}\n\nfunction selectNumberAttrs(obj, attrs) {\n return _.mapValues(_.pick(obj, attrs), Number);\n}\n\nfunction canonicalize(attrs) {\n var newAttrs = {};\n _.forEach(attrs, function (v, k) {\n newAttrs[k.toLowerCase()] = v;\n });\n return newAttrs;\n}\n", "import * as acyclic from './acyclic.js';\nimport { layout } from './layout.js';\nimport * as normalize from './normalize.js';\nimport { rank } from './rank/index.js';\n\nexport { acyclic, normalize, rank, layout };\n", "import * as _ from 'lodash-es';\nimport { Graph } from './graph.js';\n\nexport { write, read };\n\nfunction write(g) {\n var json = {\n options: {\n directed: g.isDirected(),\n multigraph: g.isMultigraph(),\n compound: g.isCompound(),\n },\n nodes: writeNodes(g),\n edges: writeEdges(g),\n };\n if (!_.isUndefined(g.graph())) {\n json.value = _.clone(g.graph());\n }\n return json;\n}\n\nfunction writeNodes(g) {\n return _.map(g.nodes(), function (v) {\n var nodeValue = g.node(v);\n var parent = g.parent(v);\n var node = { v: v };\n if (!_.isUndefined(nodeValue)) {\n node.value = nodeValue;\n }\n if (!_.isUndefined(parent)) {\n node.parent = parent;\n }\n return node;\n });\n}\n\nfunction writeEdges(g) {\n return _.map(g.edges(), function (e) {\n var edgeValue = g.edge(e);\n var edge = { v: e.v, w: e.w };\n if (!_.isUndefined(e.name)) {\n edge.name = e.name;\n }\n if (!_.isUndefined(edgeValue)) {\n edge.value = edgeValue;\n }\n return edge;\n });\n}\n\nfunction read(json) {\n var g = new Graph(json.options).setGraph(json.value);\n _.each(json.nodes, function (entry) {\n g.setNode(entry.v, entry.value);\n if (entry.parent) {\n g.setParent(entry.v, entry.parent);\n }\n });\n _.each(json.edges, function (entry) {\n g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value);\n });\n return g;\n}\n", "/** Decorates with functions required by mermaids dagre-wrapper. */\nimport { log } from '../../../logger.js';\nimport * as graphlib from 'dagre-d3-es/src/graphlib/index.js';\nimport * as graphlibJson from 'dagre-d3-es/src/graphlib/json.js';\n\nexport let clusterDb = new Map();\nlet descendants = new Map();\nlet parents = new Map();\n\nexport const clear = () => {\n descendants.clear();\n parents.clear();\n clusterDb.clear();\n};\n\nconst isDescendant = (id, ancestorId) => {\n const ancestorDescendants = descendants.get(ancestorId) || [];\n log.trace('In isDescendant', ancestorId, ' ', id, ' = ', ancestorDescendants.includes(id));\n return ancestorDescendants.includes(id);\n};\n\nconst edgeInCluster = (edge, clusterId) => {\n const clusterDescendants = descendants.get(clusterId) || [];\n log.info('Descendants of ', clusterId, ' is ', clusterDescendants);\n log.info('Edge is ', edge);\n if (edge.v === clusterId || edge.w === clusterId) {\n return false;\n }\n\n if (!clusterDescendants) {\n log.debug('Tilt, ', clusterId, ',not in descendants');\n return false;\n }\n\n return (\n clusterDescendants.includes(edge.v) ||\n isDescendant(edge.v, clusterId) ||\n isDescendant(edge.w, clusterId) ||\n clusterDescendants.includes(edge.w)\n );\n};\n\nconst copy = (clusterId, graph, newGraph, rootId) => {\n log.warn(\n 'Copying children of ',\n clusterId,\n 'root',\n rootId,\n 'data',\n graph.node(clusterId),\n rootId\n );\n const nodes = graph.children(clusterId) || [];\n\n if (clusterId !== rootId) {\n nodes.push(clusterId);\n }\n\n log.warn('Copying (nodes) clusterId', clusterId, 'nodes', nodes);\n\n nodes.forEach((node) => {\n if (graph.children(node).length > 0) {\n copy(node, graph, newGraph, rootId);\n } else {\n const data = graph.node(node);\n log.info('cp ', node, ' to ', rootId, ' with parent ', clusterId);\n newGraph.setNode(node, data);\n if (rootId !== graph.parent(node)) {\n log.warn('Setting parent', node, graph.parent(node));\n newGraph.setParent(node, graph.parent(node));\n }\n\n if (clusterId !== rootId && node !== clusterId) {\n log.debug('Setting parent', node, clusterId);\n newGraph.setParent(node, clusterId);\n } else {\n log.info('In copy ', clusterId, 'root', rootId, 'data', graph.node(clusterId), rootId);\n log.debug(\n 'Not Setting parent for node=',\n node,\n 'cluster!==rootId',\n clusterId !== rootId,\n 'node!==clusterId',\n node !== clusterId\n );\n }\n const edges = graph.edges(node);\n log.debug('Copying Edges', edges);\n edges.forEach((edge) => {\n log.info('Edge', edge);\n const data = graph.edge(edge.v, edge.w, edge.name);\n log.info('Edge data', data, rootId);\n try {\n if (edgeInCluster(edge, rootId)) {\n log.info('Copying as ', edge.v, edge.w, data, edge.name);\n newGraph.setEdge(edge.v, edge.w, data, edge.name);\n log.info('newGraph edges ', newGraph.edges(), newGraph.edge(newGraph.edges()[0]));\n } else {\n log.info(\n 'Skipping copy of edge ',\n edge.v,\n '-->',\n edge.w,\n ' rootId: ',\n rootId,\n ' clusterId:',\n clusterId\n );\n }\n } catch (e) {\n log.error(e);\n }\n });\n }\n log.debug('Removing node', node);\n graph.removeNode(node);\n });\n};\n\nexport const extractDescendants = (id, graph) => {\n const children = graph.children(id);\n let res = [...children];\n\n for (const child of children) {\n parents.set(child, id);\n res = [...res, ...extractDescendants(child, graph)];\n }\n\n return res;\n};\n\nexport const validate = (graph) => {\n const edges = graph.edges();\n log.trace('Edges: ', edges);\n for (const edge of edges) {\n if (graph.children(edge.v).length > 0) {\n log.trace('The node ', edge.v, ' is part of and edge even though it has children');\n return false;\n }\n if (graph.children(edge.w).length > 0) {\n log.trace('The node ', edge.w, ' is part of and edge even though it has children');\n return false;\n }\n }\n return true;\n};\n\nconst findCommonEdges = (graph, id1, id2) => {\n const edges1 = graph.edges().filter((edge) => edge.v === id1 || edge.w === id1);\n const edges2 = graph.edges().filter((edge) => edge.v === id2 || edge.w === id2);\n const edges1Prim = edges1.map((edge) => {\n return { v: edge.v === id1 ? id2 : edge.v, w: edge.w === id1 ? id1 : edge.w };\n });\n const edges2Prim = edges2.map((edge) => {\n return { v: edge.v, w: edge.w };\n });\n const result = edges1Prim.filter((edgeIn1) => {\n return edges2Prim.some((edge) => edgeIn1.v === edge.v && edgeIn1.w === edge.w);\n });\n\n return result;\n};\n\nexport const findNonClusterChild = (id, graph, clusterId) => {\n const children = graph.children(id);\n log.trace('Searching children of id ', id, children);\n if (children.length < 1) {\n return id;\n }\n let reserve;\n for (const child of children) {\n const _id = findNonClusterChild(child, graph, clusterId);\n\n const commonEdges = findCommonEdges(graph, clusterId, _id);\n\n if (_id) {\n if (commonEdges.length > 0) {\n reserve = _id;\n } else {\n return _id;\n }\n }\n }\n return reserve;\n};\n\nconst getAnchorId = (id) => {\n if (!clusterDb.has(id)) {\n return id;\n }\n if (!clusterDb.get(id).externalConnections) {\n return id;\n }\n\n if (clusterDb.has(id)) {\n return clusterDb.get(id).id;\n }\n return id;\n};\n\nexport const adjustClustersAndEdges = (graph, depth) => {\n if (!graph || depth > 10) {\n log.debug('Opting out, no graph ');\n return;\n } else {\n log.debug('Opting in, graph ');\n }\n\n graph.nodes().forEach(function (id) {\n const children = graph.children(id);\n if (children.length > 0) {\n log.warn(\n 'Cluster identified',\n id,\n ' Replacement id in edges: ',\n findNonClusterChild(id, graph, id)\n );\n descendants.set(id, extractDescendants(id, graph));\n clusterDb.set(id, { id: findNonClusterChild(id, graph, id), clusterData: graph.node(id) });\n }\n });\n\n graph.nodes().forEach(function (id) {\n const children = graph.children(id);\n const edges = graph.edges();\n if (children.length > 0) {\n log.debug('Cluster identified', id, descendants);\n edges.forEach((edge) => {\n const d1 = isDescendant(edge.v, id);\n const d2 = isDescendant(edge.w, id);\n\n if (d1 ^ d2) {\n log.warn('Edge: ', edge, ' leaves cluster ', id);\n log.warn('Descendants of XXX ', id, ': ', descendants.get(id));\n clusterDb.get(id).externalConnections = true;\n }\n });\n } else {\n log.debug('Not a cluster ', id, descendants);\n }\n });\n\n for (let id of clusterDb.keys()) {\n const nonClusterChild = clusterDb.get(id).id;\n const parent = graph.parent(nonClusterChild);\n\n if (parent !== id && clusterDb.has(parent) && !clusterDb.get(parent).externalConnections) {\n clusterDb.get(id).id = parent;\n }\n }\n\n graph.edges().forEach(function (e) {\n const edge = graph.edge(e);\n log.warn('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(e));\n log.warn('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(graph.edge(e)));\n\n let v = e.v;\n let w = e.w;\n log.warn(\n 'Fix XXX',\n clusterDb,\n 'ids:',\n e.v,\n e.w,\n 'Translating: ',\n clusterDb.get(e.v),\n ' --- ',\n clusterDb.get(e.w)\n );\n if (clusterDb.get(e.v) || clusterDb.get(e.w)) {\n log.warn('Fixing and trying - removing XXX', e.v, e.w, e.name);\n v = getAnchorId(e.v);\n w = getAnchorId(e.w);\n graph.removeEdge(e.v, e.w, e.name);\n if (v !== e.v) {\n const parent = graph.parent(v);\n clusterDb.get(parent).externalConnections = true;\n edge.fromCluster = e.v;\n }\n if (w !== e.w) {\n const parent = graph.parent(w);\n clusterDb.get(parent).externalConnections = true;\n edge.toCluster = e.w;\n }\n log.warn('Fix Replacing with XXX', v, w, e.name);\n graph.setEdge(v, w, edge, e.name);\n }\n });\n log.warn('Adjusted Graph', graphlibJson.write(graph));\n extractor(graph, 0);\n\n log.trace(clusterDb);\n};\n\nexport const extractor = (graph, depth) => {\n log.warn('extractor - ', depth, graphlibJson.write(graph), graph.children('D'));\n if (depth > 10) {\n log.error('Bailing out');\n return;\n }\n let nodes = graph.nodes();\n let hasChildren = false;\n for (const node of nodes) {\n const children = graph.children(node);\n hasChildren = hasChildren || children.length > 0;\n }\n\n if (!hasChildren) {\n log.debug('Done, no node has children', graph.nodes());\n return;\n }\n log.debug('Nodes = ', nodes, depth);\n for (const node of nodes) {\n log.debug(\n 'Extracting node',\n node,\n clusterDb,\n clusterDb.has(node) && !clusterDb.get(node).externalConnections,\n !graph.parent(node),\n graph.node(node),\n graph.children('D'),\n ' Depth ',\n depth\n );\n if (!clusterDb.has(node)) {\n log.debug('Not a cluster', node, depth);\n } else if (\n !clusterDb.get(node).externalConnections &&\n graph.children(node) &&\n graph.children(node).length > 0\n ) {\n log.warn(\n 'Cluster without external connections, without a parent and with children',\n node,\n depth\n );\n\n const graphSettings = graph.graph();\n let dir = graphSettings.rankdir === 'TB' ? 'LR' : 'TB';\n if (clusterDb.get(node)?.clusterData?.dir) {\n dir = clusterDb.get(node).clusterData.dir;\n log.warn('Fixing dir', clusterDb.get(node).clusterData.dir, dir);\n }\n\n const clusterGraph = new graphlib.Graph({\n multigraph: true,\n compound: true,\n })\n .setGraph({\n rankdir: dir,\n nodesep: 50,\n ranksep: 50,\n marginx: 8,\n marginy: 8,\n })\n .setDefaultEdgeLabel(function () {\n return {};\n });\n\n log.warn('Old graph before copy', graphlibJson.write(graph));\n copy(node, graph, clusterGraph, node);\n graph.setNode(node, {\n clusterNode: true,\n id: node,\n clusterData: clusterDb.get(node).clusterData,\n label: clusterDb.get(node).label,\n graph: clusterGraph,\n });\n log.warn('New graph after copy node: (', node, ')', graphlibJson.write(clusterGraph));\n log.debug('Old graph after copy', graphlibJson.write(graph));\n } else {\n log.warn(\n 'Cluster ** ',\n node,\n ' **not meeting the criteria !externalConnections:',\n !clusterDb.get(node).externalConnections,\n ' no parent: ',\n !graph.parent(node),\n ' children ',\n graph.children(node) && graph.children(node).length > 0,\n graph.children('D'),\n depth\n );\n log.debug(clusterDb);\n }\n }\n\n nodes = graph.nodes();\n log.warn('New list of nodes', nodes);\n for (const node of nodes) {\n const data = graph.node(node);\n log.warn(' Now next level', node, data);\n if (data?.clusterNode) {\n extractor(data.graph, depth + 1);\n }\n }\n};\n\nconst sorter = (graph, nodes) => {\n if (nodes.length === 0) {\n return [];\n }\n let result = Object.assign([], nodes);\n nodes.forEach((node) => {\n const children = graph.children(node);\n const sorted = sorter(graph, children);\n result = [...result, ...sorted];\n });\n\n return result;\n};\n\nexport const sortNodesByHierarchy = (graph) => sorter(graph, graph.children());\n", "import { layout as dagreLayout } from 'dagre-d3-es/src/dagre/index.js';\nimport * as graphlibJson from 'dagre-d3-es/src/graphlib/json.js';\nimport * as graphlib from 'dagre-d3-es/src/graphlib/index.js';\nimport insertMarkers from '../../rendering-elements/markers.js';\nimport { updateNodeBounds } from '../../rendering-elements/shapes/util.js';\nimport {\n clear as clearGraphlib,\n clusterDb,\n adjustClustersAndEdges,\n findNonClusterChild,\n sortNodesByHierarchy,\n} from './mermaid-graphlib.js';\nimport {\n insertNode,\n positionNode,\n clear as clearNodes,\n setNodeElem,\n} from '../../rendering-elements/nodes.js';\nimport { insertCluster, clear as clearClusters } from '../../rendering-elements/clusters.js';\nimport {\n insertEdgeLabel,\n positionEdgeLabel,\n insertEdge,\n clear as clearEdges,\n} from '../../rendering-elements/edges.js';\nimport { log } from '../../../logger.js';\nimport { getSubGraphTitleMargins } from '../../../utils/subGraphTitleMargins.js';\nimport { getConfig } from '../../../diagram-api/diagramAPI.js';\n\nconst recursiveRender = async (_elem, graph, diagramType, id, parentCluster, siteConfig) => {\n log.warn('Graph in recursive render:XAX', graphlibJson.write(graph), parentCluster);\n const dir = graph.graph().rankdir;\n log.trace('Dir in recursive render - dir:', dir);\n\n const elem = _elem.insert('g').attr('class', 'root');\n if (!graph.nodes()) {\n log.info('No nodes found for', graph);\n } else {\n log.info('Recursive render XXX', graph.nodes());\n }\n if (graph.edges().length > 0) {\n log.info('Recursive edges', graph.edge(graph.edges()[0]));\n }\n const clusters = elem.insert('g').attr('class', 'clusters');\n const edgePaths = elem.insert('g').attr('class', 'edgePaths');\n const edgeLabels = elem.insert('g').attr('class', 'edgeLabels');\n const nodes = elem.insert('g').attr('class', 'nodes');\n\n // Insert nodes, this will insert them into the dom and each node will get a size. The size is updated\n // to the abstract node and is later used by dagre for the layout\n await Promise.all(\n graph.nodes().map(async function (v) {\n const node = graph.node(v);\n if (parentCluster !== undefined) {\n const data = JSON.parse(JSON.stringify(parentCluster.clusterData));\n // data.clusterPositioning = true;\n log.trace(\n 'Setting data for parent cluster XXX\\n Node.id = ',\n v,\n '\\n data=',\n data.height,\n '\\nParent cluster',\n parentCluster.height\n );\n graph.setNode(parentCluster.id, data);\n if (!graph.parent(v)) {\n log.trace('Setting parent', v, parentCluster.id);\n graph.setParent(v, parentCluster.id, data);\n }\n }\n log.info('(Insert) Node XXX' + v + ': ' + JSON.stringify(graph.node(v)));\n if (node?.clusterNode) {\n // const children = graph.children(v);\n log.info('Cluster identified XBX', v, node.width, graph.node(v));\n\n // `node.graph.setGraph` applies the graph configurations such as nodeSpacing to subgraphs as without this the default values would be used\n // We override only the `ranksep` and `nodesep` configurations to allow for setting subgraph spacing while avoiding overriding other properties\n const { ranksep, nodesep } = graph.graph();\n node.graph.setGraph({\n ...node.graph.graph(),\n ranksep: ranksep + 25,\n nodesep,\n });\n\n // \"o\" will contain the full cluster not just the children\n const o = await recursiveRender(\n nodes,\n node.graph,\n diagramType,\n id,\n graph.node(v),\n siteConfig\n );\n const newEl = o.elem;\n updateNodeBounds(node, newEl);\n // node.height = o.diff;\n node.diff = o.diff || 0;\n log.info(\n 'New compound node after recursive render XAX',\n v,\n 'width',\n // node,\n node.width,\n 'height',\n node.height\n // node.x,\n // node.y\n );\n setNodeElem(newEl, node);\n } else {\n if (graph.children(v).length > 0) {\n // This is a cluster but not to be rendered recursively\n // Render as before\n log.trace(\n 'Cluster - the non recursive path XBX',\n v,\n node.id,\n node,\n node.width,\n 'Graph:',\n graph\n );\n log.trace(findNonClusterChild(node.id, graph));\n clusterDb.set(node.id, { id: findNonClusterChild(node.id, graph), node });\n // insertCluster(clusters, graph.node(v));\n } else {\n log.trace('Node - the non recursive path XAX', v, nodes, graph.node(v), dir);\n await insertNode(nodes, graph.node(v), { config: siteConfig, dir });\n }\n }\n })\n );\n\n const processEdges = async () => {\n const edgePromises = graph.edges().map(async function (e) {\n const edge = graph.edge(e.v, e.w, e.name);\n log.info('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(e));\n log.info('Edge ' + e.v + ' -> ' + e.w + ': ', e, ' ', JSON.stringify(graph.edge(e)));\n\n // Check if link is either from or to a cluster\n log.info(\n 'Fix',\n clusterDb,\n 'ids:',\n e.v,\n e.w,\n 'Translating: ',\n clusterDb.get(e.v),\n clusterDb.get(e.w)\n );\n await insertEdgeLabel(edgeLabels, edge);\n });\n\n await Promise.all(edgePromises);\n };\n\n await processEdges();\n\n log.info('Graph before layout:', JSON.stringify(graphlibJson.write(graph)));\n\n log.info('############################################# XXX');\n log.info('### Layout ### XXX');\n log.info('############################################# XXX');\n\n dagreLayout(graph);\n\n log.info('Graph after layout:', JSON.stringify(graphlibJson.write(graph)));\n // Move the nodes to the correct place\n let diff = 0;\n let { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig);\n await Promise.all(\n sortNodesByHierarchy(graph).map(async function (v) {\n const node = graph.node(v);\n log.info(\n 'Position XBX => ' + v + ': (' + node.x,\n ',' + node.y,\n ') width: ',\n node.width,\n ' height: ',\n node.height\n );\n if (node?.clusterNode) {\n // Adjust for padding when on root level\n node.y += subGraphTitleTotalMargin;\n\n log.info(\n 'A tainted cluster node XBX1',\n v,\n node.id,\n node.width,\n node.height,\n node.x,\n node.y,\n graph.parent(v)\n );\n clusterDb.get(node.id).node = node;\n positionNode(node);\n } else {\n // A tainted cluster node\n if (graph.children(v).length > 0) {\n log.info(\n 'A pure cluster node XBX1',\n v,\n node.id,\n node.x,\n node.y,\n node.width,\n node.height,\n graph.parent(v)\n );\n node.height += subGraphTitleTotalMargin;\n graph.node(node.parentId);\n const halfPadding = node?.padding / 2 || 0;\n const labelHeight = node?.labelBBox?.height || 0;\n const offsetY = labelHeight - halfPadding || 0;\n log.debug('OffsetY', offsetY, 'labelHeight', labelHeight, 'halfPadding', halfPadding);\n await insertCluster(clusters, node);\n\n // A cluster in the non-recursive way\n clusterDb.get(node.id).node = node;\n } else {\n // Regular node\n const parent = graph.node(node.parentId);\n node.y += subGraphTitleTotalMargin / 2;\n log.info(\n 'A regular node XBX1 - using the padding',\n node.id,\n 'parent',\n node.parentId,\n node.width,\n node.height,\n node.x,\n node.y,\n 'offsetY',\n node.offsetY,\n 'parent',\n parent,\n parent?.offsetY,\n node\n );\n\n positionNode(node);\n }\n }\n })\n );\n\n // Move the edge labels to the correct place after layout\n graph.edges().forEach(function (e) {\n const edge = graph.edge(e);\n log.info('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(edge), edge);\n\n edge.points.forEach((point) => (point.y += subGraphTitleTotalMargin / 2));\n const startNode = graph.node(e.v);\n var endNode = graph.node(e.w);\n const paths = insertEdge(edgePaths, edge, clusterDb, diagramType, startNode, endNode, id);\n positionEdgeLabel(edge, paths);\n });\n\n graph.nodes().forEach(function (v) {\n const n = graph.node(v);\n log.info(v, n.type, n.diff);\n if (n.isGroup) {\n diff = n.diff;\n }\n });\n log.warn('Returning from recursive render XAX', elem, diff);\n return { elem, diff };\n};\n\nexport const render = async (data4Layout, svg) => {\n const graph = new graphlib.Graph({\n multigraph: true,\n compound: true,\n })\n .setGraph({\n rankdir: data4Layout.direction,\n nodesep:\n data4Layout.config?.nodeSpacing ||\n data4Layout.config?.flowchart?.nodeSpacing ||\n data4Layout.nodeSpacing,\n ranksep:\n data4Layout.config?.rankSpacing ||\n data4Layout.config?.flowchart?.rankSpacing ||\n data4Layout.rankSpacing,\n marginx: 8,\n marginy: 8,\n })\n .setDefaultEdgeLabel(function () {\n return {};\n });\n const element = svg.select('g');\n insertMarkers(element, data4Layout.markers, data4Layout.type, data4Layout.diagramId);\n clearNodes();\n clearEdges();\n clearClusters();\n clearGraphlib();\n\n data4Layout.nodes.forEach((node) => {\n graph.setNode(node.id, { ...node });\n if (node.parentId) {\n graph.setParent(node.id, node.parentId);\n }\n });\n\n log.debug('Edges:', data4Layout.edges);\n data4Layout.edges.forEach((edge) => {\n // Handle self-loops\n if (edge.start === edge.end) {\n const nodeId = edge.start;\n const specialId1 = nodeId + '---' + nodeId + '---1';\n const specialId2 = nodeId + '---' + nodeId + '---2';\n const node = graph.node(nodeId);\n graph.setNode(specialId1, {\n domId: specialId1,\n id: specialId1,\n parentId: node.parentId,\n labelStyle: '',\n label: '',\n padding: 0,\n shape: 'labelRect',\n // shape: 'rect',\n style: '',\n width: 10,\n height: 10,\n });\n graph.setParent(specialId1, node.parentId);\n graph.setNode(specialId2, {\n domId: specialId2,\n id: specialId2,\n parentId: node.parentId,\n labelStyle: '',\n padding: 0,\n // shape: 'rect',\n shape: 'labelRect',\n label: '',\n style: '',\n width: 10,\n height: 10,\n });\n graph.setParent(specialId2, node.parentId);\n\n const edge1 = structuredClone(edge);\n const edgeMid = structuredClone(edge);\n const edge2 = structuredClone(edge);\n edge1.label = '';\n edge1.arrowTypeEnd = 'none';\n edge1.id = nodeId + '-cyclic-special-1';\n edgeMid.arrowTypeStart = 'none';\n edgeMid.arrowTypeEnd = 'none';\n edgeMid.id = nodeId + '-cyclic-special-mid';\n edge2.label = '';\n if (node.isGroup) {\n edge1.fromCluster = nodeId;\n edge2.toCluster = nodeId;\n }\n edge2.id = nodeId + '-cyclic-special-2';\n edge2.arrowTypeStart = 'none';\n graph.setEdge(nodeId, specialId1, edge1, nodeId + '-cyclic-special-0');\n graph.setEdge(specialId1, specialId2, edgeMid, nodeId + '-cyclic-special-1');\n graph.setEdge(specialId2, nodeId, edge2, nodeId + '-cyc r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nfunction _arrayWithHoles(r) {\n if (Array.isArray(r)) return r;\n}\nfunction _arrayWithoutHoles(r) {\n if (Array.isArray(r)) return _arrayLikeToArray(r);\n}\nfunction _classCallCheck(a, n) {\n if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nfunction _defineProperties(e, r) {\n for (var t = 0; t < r.length; t++) {\n var o = r[t];\n o.enumerable = o.enumerable || false, o.configurable = true, \"value\" in o && (o.writable = true), Object.defineProperty(e, _toPropertyKey(o.key), o);\n }\n}\nfunction _createClass(e, r, t) {\n return r && _defineProperties(e.prototype, r), Object.defineProperty(e, \"prototype\", {\n writable: false\n }), e;\n}\nfunction _createForOfIteratorHelper(r, e) {\n var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (!t) {\n if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e) {\n t && (r = t);\n var n = 0,\n F = function () {};\n return {\n s: F,\n n: function () {\n return n >= r.length ? {\n done: true\n } : {\n done: false,\n value: r[n++]\n };\n },\n e: function (r) {\n throw r;\n },\n f: F\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n var o,\n a = true,\n u = false;\n return {\n s: function () {\n t = t.call(r);\n },\n n: function () {\n var r = t.next();\n return a = r.done, r;\n },\n e: function (r) {\n u = true, o = r;\n },\n f: function () {\n try {\n a || null == t.return || t.return();\n } finally {\n if (u) throw o;\n }\n }\n };\n}\nfunction _defineProperty$1(e, r, t) {\n return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: true,\n configurable: true,\n writable: true\n }) : e[r] = t, e;\n}\nfunction _iterableToArray(r) {\n if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nfunction _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = true,\n o = false;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = true, n = r;\n } finally {\n try {\n if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _slicedToArray(r, e) {\n return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _toConsumableArray(r) {\n return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();\n}\nfunction _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (undefined !== e) {\n var i = e.call(t, r);\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (String )(t);\n}\nfunction _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : undefined;\n }\n}\n\nvar _window = typeof window === 'undefined' ? null : window; // eslint-disable-line no-undef\n\nvar navigator = _window ? _window.navigator : null;\n_window ? _window.document : null;\nvar typeofstr = _typeof('');\nvar typeofobj = _typeof({});\nvar typeoffn = _typeof(function () {});\nvar typeofhtmlele = typeof HTMLElement === \"undefined\" ? \"undefined\" : _typeof(HTMLElement);\nvar instanceStr = function instanceStr(obj) {\n return obj && obj.instanceString && fn$6(obj.instanceString) ? obj.instanceString() : null;\n};\n\nvar string = function string(obj) {\n return obj != null && _typeof(obj) == typeofstr;\n};\nvar fn$6 = function fn(obj) {\n return obj != null && _typeof(obj) === typeoffn;\n};\nvar array = function array(obj) {\n return !elementOrCollection(obj) && (Array.isArray ? Array.isArray(obj) : obj != null && obj instanceof Array);\n};\nvar plainObject = function plainObject(obj) {\n return obj != null && _typeof(obj) === typeofobj && !array(obj) && obj.constructor === Object;\n};\nvar object = function object(obj) {\n return obj != null && _typeof(obj) === typeofobj;\n};\nvar number$1 = function number(obj) {\n return obj != null && _typeof(obj) === _typeof(1) && !isNaN(obj);\n};\nvar integer = function integer(obj) {\n return number$1(obj) && Math.floor(obj) === obj;\n};\nvar htmlElement = function htmlElement(obj) {\n if ('undefined' === typeofhtmlele) {\n return undefined;\n } else {\n return null != obj && obj instanceof HTMLElement;\n }\n};\nvar elementOrCollection = function elementOrCollection(obj) {\n return element(obj) || collection(obj);\n};\nvar element = function element(obj) {\n return instanceStr(obj) === 'collection' && obj._private.single;\n};\nvar collection = function collection(obj) {\n return instanceStr(obj) === 'collection' && !obj._private.single;\n};\nvar core = function core(obj) {\n return instanceStr(obj) === 'core';\n};\nvar stylesheet = function stylesheet(obj) {\n return instanceStr(obj) === 'stylesheet';\n};\nvar event = function event(obj) {\n return instanceStr(obj) === 'event';\n};\nvar emptyString = function emptyString(obj) {\n if (obj === undefined || obj === null) {\n // null is empty\n return true;\n } else if (obj === '' || obj.match(/^\\s+$/)) {\n return true; // empty string is empty\n }\n return false; // otherwise, we don't know what we've got\n};\nvar domElement = function domElement(obj) {\n if (typeof HTMLElement === 'undefined') {\n return false; // we're not in a browser so it doesn't matter\n } else {\n return obj instanceof HTMLElement;\n }\n};\nvar boundingBox = function boundingBox(obj) {\n return plainObject(obj) && number$1(obj.x1) && number$1(obj.x2) && number$1(obj.y1) && number$1(obj.y2);\n};\nvar promise = function promise(obj) {\n return object(obj) && fn$6(obj.then);\n};\nvar ms = function ms() {\n return navigator && navigator.userAgent.match(/msie|trident|edge/i);\n}; // probably a better way to detect this...\n\nvar memoize = function memoize(fn, keyFn) {\n if (!keyFn) {\n keyFn = function keyFn() {\n if (arguments.length === 1) {\n return arguments[0];\n } else if (arguments.length === 0) {\n return 'undefined';\n }\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n return args.join('$');\n };\n }\n var _memoizedFn = function memoizedFn() {\n var self = this;\n var args = arguments;\n var ret;\n var k = keyFn.apply(self, args);\n var cache = _memoizedFn.cache;\n if (!(ret = cache[k])) {\n ret = cache[k] = fn.apply(self, args);\n }\n return ret;\n };\n _memoizedFn.cache = {};\n return _memoizedFn;\n};\n\nvar camel2dash = memoize(function (str) {\n return str.replace(/([A-Z])/g, function (v) {\n return '-' + v.toLowerCase();\n });\n});\nvar dash2camel = memoize(function (str) {\n return str.replace(/(-\\w)/g, function (v) {\n return v[1].toUpperCase();\n });\n});\nvar prependCamel = memoize(function (prefix, str) {\n return prefix + str[0].toUpperCase() + str.substring(1);\n}, function (prefix, str) {\n return prefix + '$' + str;\n});\nvar capitalize = function capitalize(str) {\n if (emptyString(str)) {\n return str;\n }\n return str.charAt(0).toUpperCase() + str.substring(1);\n};\nvar endsWith = function endsWith(string, suffix) {\n return string.slice(-1 * suffix.length) === suffix;\n};\n\nvar number = '(?:[-+]?(?:(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:[Ee][+-]?\\\\d+)?))';\nvar rgba = 'rgb[a]?\\\\((' + number + '[%]?)\\\\s*,\\\\s*(' + number + '[%]?)\\\\s*,\\\\s*(' + number + '[%]?)(?:\\\\s*,\\\\s*(' + number + '))?\\\\)';\nvar rgbaNoBackRefs = 'rgb[a]?\\\\((?:' + number + '[%]?)\\\\s*,\\\\s*(?:' + number + '[%]?)\\\\s*,\\\\s*(?:' + number + '[%]?)(?:\\\\s*,\\\\s*(?:' + number + '))?\\\\)';\nvar hsla = 'hsl[a]?\\\\((' + number + ')\\\\s*,\\\\s*(' + number + '[%])\\\\s*,\\\\s*(' + number + '[%])(?:\\\\s*,\\\\s*(' + number + '))?\\\\)';\nvar hslaNoBackRefs = 'hsl[a]?\\\\((?:' + number + ')\\\\s*,\\\\s*(?:' + number + '[%])\\\\s*,\\\\s*(?:' + number + '[%])(?:\\\\s*,\\\\s*(?:' + number + '))?\\\\)';\nvar hex3 = '\\\\#[0-9a-fA-F]{3}';\nvar hex6 = '\\\\#[0-9a-fA-F]{6}';\n\nvar ascending = function ascending(a, b) {\n if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n } else {\n return 0;\n }\n};\nvar descending = function descending(a, b) {\n return -1 * ascending(a, b);\n};\n\nvar extend = Object.assign != null ? Object.assign.bind(Object) : function (tgt) {\n var args = arguments;\n for (var i = 1; i < args.length; i++) {\n var obj = args[i];\n if (obj == null) {\n continue;\n }\n var keys = Object.keys(obj);\n for (var j = 0; j < keys.length; j++) {\n var k = keys[j];\n tgt[k] = obj[k];\n }\n }\n return tgt;\n};\n\n// get [r, g, b] from #abc or #aabbcc\nvar hex2tuple = function hex2tuple(hex) {\n if (!(hex.length === 4 || hex.length === 7) || hex[0] !== '#') {\n return;\n }\n var shortHex = hex.length === 4;\n var r, g, b;\n var base = 16;\n if (shortHex) {\n r = parseInt(hex[1] + hex[1], base);\n g = parseInt(hex[2] + hex[2], base);\n b = parseInt(hex[3] + hex[3], base);\n } else {\n r = parseInt(hex[1] + hex[2], base);\n g = parseInt(hex[3] + hex[4], base);\n b = parseInt(hex[5] + hex[6], base);\n }\n return [r, g, b];\n};\n\n// get [r, g, b, a] from hsl(0, 0, 0) or hsla(0, 0, 0, 0)\nvar hsl2tuple = function hsl2tuple(hsl) {\n var ret;\n var h, s, l, a, r, g, b;\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n var m = new RegExp('^' + hsla + '$').exec(hsl);\n if (m) {\n // get hue\n h = parseInt(m[1]);\n if (h < 0) {\n h = (360 - -1 * h % 360) % 360;\n } else if (h > 360) {\n h = h % 360;\n }\n h /= 360; // normalise on [0, 1]\n\n s = parseFloat(m[2]);\n if (s < 0 || s > 100) {\n return;\n } // saturation is [0, 100]\n s = s / 100; // normalise on [0, 1]\n\n l = parseFloat(m[3]);\n if (l < 0 || l > 100) {\n return;\n } // lightness is [0, 100]\n l = l / 100; // normalise on [0, 1]\n\n a = m[4];\n if (a !== undefined) {\n a = parseFloat(a);\n if (a < 0 || a > 1) {\n return;\n } // alpha is [0, 1]\n }\n\n // now, convert to rgb\n // code from http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript\n if (s === 0) {\n r = g = b = Math.round(l * 255); // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = Math.round(255 * hue2rgb(p, q, h + 1 / 3));\n g = Math.round(255 * hue2rgb(p, q, h));\n b = Math.round(255 * hue2rgb(p, q, h - 1 / 3));\n }\n ret = [r, g, b, a];\n }\n return ret;\n};\n\n// get [r, g, b, a] from rgb(0, 0, 0) or rgba(0, 0, 0, 0)\nvar rgb2tuple = function rgb2tuple(rgb) {\n var ret;\n var m = new RegExp('^' + rgba + '$').exec(rgb);\n if (m) {\n ret = [];\n var isPct = [];\n for (var i = 1; i <= 3; i++) {\n var channel = m[i];\n if (channel[channel.length - 1] === '%') {\n isPct[i] = true;\n }\n channel = parseFloat(channel);\n if (isPct[i]) {\n channel = channel / 100 * 255; // normalise to [0, 255]\n }\n if (channel < 0 || channel > 255) {\n return;\n } // invalid channel value\n\n ret.push(Math.floor(channel));\n }\n var atLeastOneIsPct = isPct[1] || isPct[2] || isPct[3];\n var allArePct = isPct[1] && isPct[2] && isPct[3];\n if (atLeastOneIsPct && !allArePct) {\n return;\n } // must all be percent values if one is\n\n var alpha = m[4];\n if (alpha !== undefined) {\n alpha = parseFloat(alpha);\n if (alpha < 0 || alpha > 1) {\n return;\n } // invalid alpha value\n\n ret.push(alpha);\n }\n }\n return ret;\n};\nvar colorname2tuple = function colorname2tuple(color) {\n return colors[color.toLowerCase()];\n};\nvar color2tuple = function color2tuple(color) {\n return (array(color) ? color : null) || colorname2tuple(color) || hex2tuple(color) || rgb2tuple(color) || hsl2tuple(color);\n};\nvar colors = {\n // special colour names\n transparent: [0, 0, 0, 0],\n // NB alpha === 0\n\n // regular colours\n aliceblue: [240, 248, 255],\n antiquewhite: [250, 235, 215],\n aqua: [0, 255, 255],\n aquamarine: [127, 255, 212],\n azure: [240, 255, 255],\n beige: [245, 245, 220],\n bisque: [255, 228, 196],\n black: [0, 0, 0],\n blanchedalmond: [255, 235, 205],\n blue: [0, 0, 255],\n blueviolet: [138, 43, 226],\n brown: [165, 42, 42],\n burlywood: [222, 184, 135],\n cadetblue: [95, 158, 160],\n chartreuse: [127, 255, 0],\n chocolate: [210, 105, 30],\n coral: [255, 127, 80],\n cornflowerblue: [100, 149, 237],\n cornsilk: [255, 248, 220],\n crimson: [220, 20, 60],\n cyan: [0, 255, 255],\n darkblue: [0, 0, 139],\n darkcyan: [0, 139, 139],\n darkgoldenrod: [184, 134, 11],\n darkgray: [169, 169, 169],\n darkgreen: [0, 100, 0],\n darkgrey: [169, 169, 169],\n darkkhaki: [189, 183, 107],\n darkmagenta: [139, 0, 139],\n darkolivegreen: [85, 107, 47],\n darkorange: [255, 140, 0],\n darkorchid: [153, 50, 204],\n darkred: [139, 0, 0],\n darksalmon: [233, 150, 122],\n darkseagreen: [143, 188, 143],\n darkslateblue: [72, 61, 139],\n darkslategray: [47, 79, 79],\n darkslategrey: [47, 79, 79],\n darkturquoise: [0, 206, 209],\n darkviolet: [148, 0, 211],\n deeppink: [255, 20, 147],\n deepskyblue: [0, 191, 255],\n dimgray: [105, 105, 105],\n dimgrey: [105, 105, 105],\n dodgerblue: [30, 144, 255],\n firebrick: [178, 34, 34],\n floralwhite: [255, 250, 240],\n forestgreen: [34, 139, 34],\n fuchsia: [255, 0, 255],\n gainsboro: [220, 220, 220],\n ghostwhite: [248, 248, 255],\n gold: [255, 215, 0],\n goldenrod: [218, 165, 32],\n gray: [128, 128, 128],\n grey: [128, 128, 128],\n green: [0, 128, 0],\n greenyellow: [173, 255, 47],\n honeydew: [240, 255, 240],\n hotpink: [255, 105, 180],\n indianred: [205, 92, 92],\n indigo: [75, 0, 130],\n ivory: [255, 255, 240],\n khaki: [240, 230, 140],\n lavender: [230, 230, 250],\n lavenderblush: [255, 240, 245],\n lawngreen: [124, 252, 0],\n lemonchiffon: [255, 250, 205],\n lightblue: [173, 216, 230],\n lightcoral: [240, 128, 128],\n lightcyan: [224, 255, 255],\n lightgoldenrodyellow: [250, 250, 210],\n lightgray: [211, 211, 211],\n lightgreen: [144, 238, 144],\n lightgrey: [211, 211, 211],\n lightpink: [255, 182, 193],\n lightsalmon: [255, 160, 122],\n lightseagreen: [32, 178, 170],\n lightskyblue: [135, 206, 250],\n lightslategray: [119, 136, 153],\n lightslategrey: [119, 136, 153],\n lightsteelblue: [176, 196, 222],\n lightyellow: [255, 255, 224],\n lime: [0, 255, 0],\n limegreen: [50, 205, 50],\n linen: [250, 240, 230],\n magenta: [255, 0, 255],\n maroon: [128, 0, 0],\n mediumaquamarine: [102, 205, 170],\n mediumblue: [0, 0, 205],\n mediumorchid: [186, 85, 211],\n mediumpurple: [147, 112, 219],\n mediumseagreen: [60, 179, 113],\n mediumslateblue: [123, 104, 238],\n mediumspringgreen: [0, 250, 154],\n mediumturquoise: [72, 209, 204],\n mediumvioletred: [199, 21, 133],\n midnightblue: [25, 25, 112],\n mintcream: [245, 255, 250],\n mistyrose: [255, 228, 225],\n moccasin: [255, 228, 181],\n navajowhite: [255, 222, 173],\n navy: [0, 0, 128],\n oldlace: [253, 245, 230],\n olive: [128, 128, 0],\n olivedrab: [107, 142, 35],\n orange: [255, 165, 0],\n orangered: [255, 69, 0],\n orchid: [218, 112, 214],\n palegoldenrod: [238, 232, 170],\n palegreen: [152, 251, 152],\n paleturquoise: [175, 238, 238],\n palevioletred: [219, 112, 147],\n papayawhip: [255, 239, 213],\n peachpuff: [255, 218, 185],\n peru: [205, 133, 63],\n pink: [255, 192, 203],\n plum: [221, 160, 221],\n powderblue: [176, 224, 230],\n purple: [128, 0, 128],\n red: [255, 0, 0],\n rosybrown: [188, 143, 143],\n royalblue: [65, 105, 225],\n saddlebrown: [139, 69, 19],\n salmon: [250, 128, 114],\n sandybrown: [244, 164, 96],\n seagreen: [46, 139, 87],\n seashell: [255, 245, 238],\n sienna: [160, 82, 45],\n silver: [192, 192, 192],\n skyblue: [135, 206, 235],\n slateblue: [106, 90, 205],\n slategray: [112, 128, 144],\n slategrey: [112, 128, 144],\n snow: [255, 250, 250],\n springgreen: [0, 255, 127],\n steelblue: [70, 130, 180],\n tan: [210, 180, 140],\n teal: [0, 128, 128],\n thistle: [216, 191, 216],\n tomato: [255, 99, 71],\n turquoise: [64, 224, 208],\n violet: [238, 130, 238],\n wheat: [245, 222, 179],\n white: [255, 255, 255],\n whitesmoke: [245, 245, 245],\n yellow: [255, 255, 0],\n yellowgreen: [154, 205, 50]\n};\n\n// sets the value in a map (map may not be built)\nvar setMap = function setMap(options) {\n var obj = options.map;\n var keys = options.keys;\n var l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (plainObject(key)) {\n throw Error('Tried to set map with object key');\n }\n if (i < keys.length - 1) {\n // extend the map if necessary\n if (obj[key] == null) {\n obj[key] = {};\n }\n obj = obj[key];\n } else {\n // set the value\n obj[key] = options.value;\n }\n }\n};\n\n// gets the value in a map even if it's not built in places\nvar getMap = function getMap(options) {\n var obj = options.map;\n var keys = options.keys;\n var l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (plainObject(key)) {\n throw Error('Tried to get map with object key');\n }\n obj = obj[key];\n if (obj == null) {\n return obj;\n }\n }\n return obj;\n};\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n\nvar isObject_1;\nvar hasRequiredIsObject;\n\nfunction requireIsObject () {\n\tif (hasRequiredIsObject) return isObject_1;\n\thasRequiredIsObject = 1;\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return value != null && (type == 'object' || type == 'function');\n\t}\n\n\tisObject_1 = isObject;\n\treturn isObject_1;\n}\n\n/** Detect free variable `global` from Node.js. */\n\nvar _freeGlobal;\nvar hasRequired_freeGlobal;\n\nfunction require_freeGlobal () {\n\tif (hasRequired_freeGlobal) return _freeGlobal;\n\thasRequired_freeGlobal = 1;\n\tvar freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;\n\n\t_freeGlobal = freeGlobal;\n\treturn _freeGlobal;\n}\n\nvar _root;\nvar hasRequired_root;\n\nfunction require_root () {\n\tif (hasRequired_root) return _root;\n\thasRequired_root = 1;\n\tvar freeGlobal = require_freeGlobal();\n\n\t/** Detect free variable `self`. */\n\tvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n\t/** Used as a reference to the global object. */\n\tvar root = freeGlobal || freeSelf || Function('return this')();\n\n\t_root = root;\n\treturn _root;\n}\n\nvar now_1;\nvar hasRequiredNow;\n\nfunction requireNow () {\n\tif (hasRequiredNow) return now_1;\n\thasRequiredNow = 1;\n\tvar root = require_root();\n\n\t/**\n\t * Gets the timestamp of the number of milliseconds that have elapsed since\n\t * the Unix epoch (1 January 1970 00:00:00 UTC).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 2.4.0\n\t * @category Date\n\t * @returns {number} Returns the timestamp.\n\t * @example\n\t *\n\t * _.defer(function(stamp) {\n\t * console.log(_.now() - stamp);\n\t * }, _.now());\n\t * // => Logs the number of milliseconds it took for the deferred invocation.\n\t */\n\tvar now = function() {\n\t return root.Date.now();\n\t};\n\n\tnow_1 = now;\n\treturn now_1;\n}\n\n/** Used to match a single whitespace character. */\n\nvar _trimmedEndIndex;\nvar hasRequired_trimmedEndIndex;\n\nfunction require_trimmedEndIndex () {\n\tif (hasRequired_trimmedEndIndex) return _trimmedEndIndex;\n\thasRequired_trimmedEndIndex = 1;\n\tvar reWhitespace = /\\s/;\n\n\t/**\n\t * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n\t * character of `string`.\n\t *\n\t * @private\n\t * @param {string} string The string to inspect.\n\t * @returns {number} Returns the index of the last non-whitespace character.\n\t */\n\tfunction trimmedEndIndex(string) {\n\t var index = string.length;\n\n\t while (index-- && reWhitespace.test(string.charAt(index))) {}\n\t return index;\n\t}\n\n\t_trimmedEndIndex = trimmedEndIndex;\n\treturn _trimmedEndIndex;\n}\n\nvar _baseTrim;\nvar hasRequired_baseTrim;\n\nfunction require_baseTrim () {\n\tif (hasRequired_baseTrim) return _baseTrim;\n\thasRequired_baseTrim = 1;\n\tvar trimmedEndIndex = require_trimmedEndIndex();\n\n\t/** Used to match leading whitespace. */\n\tvar reTrimStart = /^\\s+/;\n\n\t/**\n\t * The base implementation of `_.trim`.\n\t *\n\t * @private\n\t * @param {string} string The string to trim.\n\t * @returns {string} Returns the trimmed string.\n\t */\n\tfunction baseTrim(string) {\n\t return string\n\t ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n\t : string;\n\t}\n\n\t_baseTrim = baseTrim;\n\treturn _baseTrim;\n}\n\nvar _Symbol;\nvar hasRequired_Symbol;\n\nfunction require_Symbol () {\n\tif (hasRequired_Symbol) return _Symbol;\n\thasRequired_Symbol = 1;\n\tvar root = require_root();\n\n\t/** Built-in value references. */\n\tvar Symbol = root.Symbol;\n\n\t_Symbol = Symbol;\n\treturn _Symbol;\n}\n\nvar _getRawTag;\nvar hasRequired_getRawTag;\n\nfunction require_getRawTag () {\n\tif (hasRequired_getRawTag) return _getRawTag;\n\thasRequired_getRawTag = 1;\n\tvar Symbol = require_Symbol();\n\n\t/** Used for built-in method references. */\n\tvar objectProto = Object.prototype;\n\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\n\t/**\n\t * Used to resolve the\n\t * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n\t * of values.\n\t */\n\tvar nativeObjectToString = objectProto.toString;\n\n\t/** Built-in value references. */\n\tvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n\t/**\n\t * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n\t *\n\t * @private\n\t * @param {*} value The value to query.\n\t * @returns {string} Returns the raw `toStringTag`.\n\t */\n\tfunction getRawTag(value) {\n\t var isOwn = hasOwnProperty.call(value, symToStringTag),\n\t tag = value[symToStringTag];\n\n\t try {\n\t value[symToStringTag] = undefined;\n\t var unmasked = true;\n\t } catch (e) {}\n\n\t var result = nativeObjectToString.call(value);\n\t if (unmasked) {\n\t if (isOwn) {\n\t value[symToStringTag] = tag;\n\t } else {\n\t delete value[symToStringTag];\n\t }\n\t }\n\t return result;\n\t}\n\n\t_getRawTag = getRawTag;\n\treturn _getRawTag;\n}\n\n/** Used for built-in method references. */\n\nvar _objectToString;\nvar hasRequired_objectToString;\n\nfunction require_objectToString () {\n\tif (hasRequired_objectToString) return _objectToString;\n\thasRequired_objectToString = 1;\n\tvar objectProto = Object.prototype;\n\n\t/**\n\t * Used to resolve the\n\t * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n\t * of values.\n\t */\n\tvar nativeObjectToString = objectProto.toString;\n\n\t/**\n\t * Converts `value` to a string using `Object.prototype.toString`.\n\t *\n\t * @private\n\t * @param {*} value The value to convert.\n\t * @returns {string} Returns the converted string.\n\t */\n\tfunction objectToString(value) {\n\t return nativeObjectToString.call(value);\n\t}\n\n\t_objectToString = objectToString;\n\treturn _objectToString;\n}\n\nvar _baseGetTag;\nvar hasRequired_baseGetTag;\n\nfunction require_baseGetTag () {\n\tif (hasRequired_baseGetTag) return _baseGetTag;\n\thasRequired_baseGetTag = 1;\n\tvar Symbol = require_Symbol(),\n\t getRawTag = require_getRawTag(),\n\t objectToString = require_objectToString();\n\n\t/** `Object#toString` result references. */\n\tvar nullTag = '[object Null]',\n\t undefinedTag = '[object Undefined]';\n\n\t/** Built-in value references. */\n\tvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n\t/**\n\t * The base implementation of `getTag` without fallbacks for buggy environments.\n\t *\n\t * @private\n\t * @param {*} value The value to query.\n\t * @returns {string} Returns the `toStringTag`.\n\t */\n\tfunction baseGetTag(value) {\n\t if (value == null) {\n\t return value === undefined ? undefinedTag : nullTag;\n\t }\n\t return (symToStringTag && symToStringTag in Object(value))\n\t ? getRawTag(value)\n\t : objectToString(value);\n\t}\n\n\t_baseGetTag = baseGetTag;\n\treturn _baseGetTag;\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n\nvar isObjectLike_1;\nvar hasRequiredIsObjectLike;\n\nfunction requireIsObjectLike () {\n\tif (hasRequiredIsObjectLike) return isObjectLike_1;\n\thasRequiredIsObjectLike = 1;\n\tfunction isObjectLike(value) {\n\t return value != null && typeof value == 'object';\n\t}\n\n\tisObjectLike_1 = isObjectLike;\n\treturn isObjectLike_1;\n}\n\nvar isSymbol_1;\nvar hasRequiredIsSymbol;\n\nfunction requireIsSymbol () {\n\tif (hasRequiredIsSymbol) return isSymbol_1;\n\thasRequiredIsSymbol = 1;\n\tvar baseGetTag = require_baseGetTag(),\n\t isObjectLike = requireIsObjectLike();\n\n\t/** `Object#toString` result references. */\n\tvar symbolTag = '[object Symbol]';\n\n\t/**\n\t * Checks if `value` is classified as a `Symbol` primitive or object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n\t * @example\n\t *\n\t * _.isSymbol(Symbol.iterator);\n\t * // => true\n\t *\n\t * _.isSymbol('abc');\n\t * // => false\n\t */\n\tfunction isSymbol(value) {\n\t return typeof value == 'symbol' ||\n\t (isObjectLike(value) && baseGetTag(value) == symbolTag);\n\t}\n\n\tisSymbol_1 = isSymbol;\n\treturn isSymbol_1;\n}\n\nvar toNumber_1;\nvar hasRequiredToNumber;\n\nfunction requireToNumber () {\n\tif (hasRequiredToNumber) return toNumber_1;\n\thasRequiredToNumber = 1;\n\tvar baseTrim = require_baseTrim(),\n\t isObject = requireIsObject(),\n\t isSymbol = requireIsSymbol();\n\n\t/** Used as references for various `Number` constants. */\n\tvar NAN = 0 / 0;\n\n\t/** Used to detect bad signed hexadecimal string values. */\n\tvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n\t/** Used to detect binary string values. */\n\tvar reIsBinary = /^0b[01]+$/i;\n\n\t/** Used to detect octal string values. */\n\tvar reIsOctal = /^0o[0-7]+$/i;\n\n\t/** Built-in method references without a dependency on `root`. */\n\tvar freeParseInt = parseInt;\n\n\t/**\n\t * Converts `value` to a number.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to process.\n\t * @returns {number} Returns the number.\n\t * @example\n\t *\n\t * _.toNumber(3.2);\n\t * // => 3.2\n\t *\n\t * _.toNumber(Number.MIN_VALUE);\n\t * // => 5e-324\n\t *\n\t * _.toNumber(Infinity);\n\t * // => Infinity\n\t *\n\t * _.toNumber('3.2');\n\t * // => 3.2\n\t */\n\tfunction toNumber(value) {\n\t if (typeof value == 'number') {\n\t return value;\n\t }\n\t if (isSymbol(value)) {\n\t return NAN;\n\t }\n\t if (isObject(value)) {\n\t var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n\t value = isObject(other) ? (other + '') : other;\n\t }\n\t if (typeof value != 'string') {\n\t return value === 0 ? value : +value;\n\t }\n\t value = baseTrim(value);\n\t var isBinary = reIsBinary.test(value);\n\t return (isBinary || reIsOctal.test(value))\n\t ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n\t : (reIsBadHex.test(value) ? NAN : +value);\n\t}\n\n\ttoNumber_1 = toNumber;\n\treturn toNumber_1;\n}\n\nvar debounce_1;\nvar hasRequiredDebounce;\n\nfunction requireDebounce () {\n\tif (hasRequiredDebounce) return debounce_1;\n\thasRequiredDebounce = 1;\n\tvar isObject = requireIsObject(),\n\t now = requireNow(),\n\t toNumber = requireToNumber();\n\n\t/** Error message constants. */\n\tvar FUNC_ERROR_TEXT = 'Expected a function';\n\n\t/* Built-in method references for those with the same name as other `lodash` methods. */\n\tvar nativeMax = Math.max,\n\t nativeMin = Math.min;\n\n\t/**\n\t * Creates a debounced function that delays invoking `func` until after `wait`\n\t * milliseconds have elapsed since the last time the debounced function was\n\t * invoked. The debounced function comes with a `cancel` method to cancel\n\t * delayed `func` invocations and a `flush` method to immediately invoke them.\n\t * Provide `options` to indicate whether `func` should be invoked on the\n\t * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n\t * with the last arguments provided to the debounced function. Subsequent\n\t * calls to the debounced function return the result of the last `func`\n\t * invocation.\n\t *\n\t * **Note:** If `leading` and `trailing` options are `true`, `func` is\n\t * invoked on the trailing edge of the timeout only if the debounced function\n\t * is invoked more than once during the `wait` timeout.\n\t *\n\t * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n\t * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n\t *\n\t * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n\t * for details over the differences between `_.debounce` and `_.throttle`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Function\n\t * @param {Function} func The function to debounce.\n\t * @param {number} [wait=0] The number of milliseconds to delay.\n\t * @param {Object} [options={}] The options object.\n\t * @param {boolean} [options.leading=false]\n\t * Specify invoking on the leading edge of the timeout.\n\t * @param {number} [options.maxWait]\n\t * The maximum time `func` is allowed to be delayed before it's invoked.\n\t * @param {boolean} [options.trailing=true]\n\t * Specify invoking on the trailing edge of the timeout.\n\t * @returns {Function} Returns the new debounced function.\n\t * @example\n\t *\n\t * // Avoid costly calculations while the window size is in flux.\n\t * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n\t *\n\t * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n\t * jQuery(element).on('click', _.debounce(sendMail, 300, {\n\t * 'leading': true,\n\t * 'trailing': false\n\t * }));\n\t *\n\t * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n\t * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n\t * var source = new EventSource('/stream');\n\t * jQuery(source).on('message', debounced);\n\t *\n\t * // Cancel the trailing debounced invocation.\n\t * jQuery(window).on('popstate', debounced.cancel);\n\t */\n\tfunction debounce(func, wait, options) {\n\t var lastArgs,\n\t lastThis,\n\t maxWait,\n\t result,\n\t timerId,\n\t lastCallTime,\n\t lastInvokeTime = 0,\n\t leading = false,\n\t maxing = false,\n\t trailing = true;\n\n\t if (typeof func != 'function') {\n\t throw new TypeError(FUNC_ERROR_TEXT);\n\t }\n\t wait = toNumber(wait) || 0;\n\t if (isObject(options)) {\n\t leading = !!options.leading;\n\t maxing = 'maxWait' in options;\n\t maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n\t trailing = 'trailing' in options ? !!options.trailing : trailing;\n\t }\n\n\t function invokeFunc(time) {\n\t var args = lastArgs,\n\t thisArg = lastThis;\n\n\t lastArgs = lastThis = undefined;\n\t lastInvokeTime = time;\n\t result = func.apply(thisArg, args);\n\t return result;\n\t }\n\n\t function leadingEdge(time) {\n\t // Reset any `maxWait` timer.\n\t lastInvokeTime = time;\n\t // Start the timer for the trailing edge.\n\t timerId = setTimeout(timerExpired, wait);\n\t // Invoke the leading edge.\n\t return leading ? invokeFunc(time) : result;\n\t }\n\n\t function remainingWait(time) {\n\t var timeSinceLastCall = time - lastCallTime,\n\t timeSinceLastInvoke = time - lastInvokeTime,\n\t timeWaiting = wait - timeSinceLastCall;\n\n\t return maxing\n\t ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n\t : timeWaiting;\n\t }\n\n\t function shouldInvoke(time) {\n\t var timeSinceLastCall = time - lastCallTime,\n\t timeSinceLastInvoke = time - lastInvokeTime;\n\n\t // Either this is the first call, activity has stopped and we're at the\n\t // trailing edge, the system time has gone backwards and we're treating\n\t // it as the trailing edge, or we've hit the `maxWait` limit.\n\t return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n\t (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n\t }\n\n\t function timerExpired() {\n\t var time = now();\n\t if (shouldInvoke(time)) {\n\t return trailingEdge(time);\n\t }\n\t // Restart the timer.\n\t timerId = setTimeout(timerExpired, remainingWait(time));\n\t }\n\n\t function trailingEdge(time) {\n\t timerId = undefined;\n\n\t // Only invoke if we have `lastArgs` which means `func` has been\n\t // debounced at least once.\n\t if (trailing && lastArgs) {\n\t return invokeFunc(time);\n\t }\n\t lastArgs = lastThis = undefined;\n\t return result;\n\t }\n\n\t function cancel() {\n\t if (timerId !== undefined) {\n\t clearTimeout(timerId);\n\t }\n\t lastInvokeTime = 0;\n\t lastArgs = lastCallTime = lastThis = timerId = undefined;\n\t }\n\n\t function flush() {\n\t return timerId === undefined ? result : trailingEdge(now());\n\t }\n\n\t function debounced() {\n\t var time = now(),\n\t isInvoking = shouldInvoke(time);\n\n\t lastArgs = arguments;\n\t lastThis = this;\n\t lastCallTime = time;\n\n\t if (isInvoking) {\n\t if (timerId === undefined) {\n\t return leadingEdge(lastCallTime);\n\t }\n\t if (maxing) {\n\t // Handle invocations in a tight loop.\n\t clearTimeout(timerId);\n\t timerId = setTimeout(timerExpired, wait);\n\t return invokeFunc(lastCallTime);\n\t }\n\t }\n\t if (timerId === undefined) {\n\t timerId = setTimeout(timerExpired, wait);\n\t }\n\t return result;\n\t }\n\t debounced.cancel = cancel;\n\t debounced.flush = flush;\n\t return debounced;\n\t}\n\n\tdebounce_1 = debounce;\n\treturn debounce_1;\n}\n\nvar debounceExports = requireDebounce();\nvar debounce = /*@__PURE__*/getDefaultExportFromCjs(debounceExports);\n\nvar performance$1 = _window ? _window.performance : null;\nvar pnow = performance$1 && performance$1.now ? function () {\n return performance$1.now();\n} : function () {\n return Date.now();\n};\nvar raf = function () {\n if (_window) {\n if (_window.requestAnimationFrame) {\n return function (fn) {\n _window.requestAnimationFrame(fn);\n };\n } else if (_window.mozRequestAnimationFrame) {\n return function (fn) {\n _window.mozRequestAnimationFrame(fn);\n };\n } else if (_window.webkitRequestAnimationFrame) {\n return function (fn) {\n _window.webkitRequestAnimationFrame(fn);\n };\n } else if (_window.msRequestAnimationFrame) {\n return function (fn) {\n _window.msRequestAnimationFrame(fn);\n };\n }\n }\n return function (fn) {\n if (fn) {\n setTimeout(function () {\n fn(pnow());\n }, 1000 / 60);\n }\n };\n}();\nvar requestAnimationFrame = function requestAnimationFrame(fn) {\n return raf(fn);\n};\nvar performanceNow = pnow;\n\nvar DEFAULT_HASH_SEED = 9261;\nvar K = 65599; // 37 also works pretty well\nvar DEFAULT_HASH_SEED_ALT = 5381;\nvar hashIterableInts = function hashIterableInts(iterator) {\n var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED;\n // sdbm/string-hash\n var hash = seed;\n var entry;\n for (;;) {\n entry = iterator.next();\n if (entry.done) {\n break;\n }\n hash = hash * K + entry.value | 0;\n }\n return hash;\n};\nvar hashInt = function hashInt(num) {\n var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED;\n // sdbm/string-hash\n return seed * K + num | 0;\n};\nvar hashIntAlt = function hashIntAlt(num) {\n var seed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_HASH_SEED_ALT;\n // djb2/string-hash\n return (seed << 5) + seed + num | 0;\n};\nvar combineHashes = function combineHashes(hash1, hash2) {\n return hash1 * 0x200000 + hash2;\n};\nvar combineHashesArray = function combineHashesArray(hashes) {\n return hashes[0] * 0x200000 + hashes[1];\n};\nvar hashArrays = function hashArrays(hashes1, hashes2) {\n return [hashInt(hashes1[0], hashes2[0]), hashIntAlt(hashes1[1], hashes2[1])];\n};\nvar hashIntsArray = function hashIntsArray(ints, seed) {\n var entry = {\n value: 0,\n done: false\n };\n var i = 0;\n var length = ints.length;\n var iterator = {\n next: function next() {\n if (i < length) {\n entry.value = ints[i++];\n } else {\n entry.done = true;\n }\n return entry;\n }\n };\n return hashIterableInts(iterator, seed);\n};\nvar hashString = function hashString(str, seed) {\n var entry = {\n value: 0,\n done: false\n };\n var i = 0;\n var length = str.length;\n var iterator = {\n next: function next() {\n if (i < length) {\n entry.value = str.charCodeAt(i++);\n } else {\n entry.done = true;\n }\n return entry;\n }\n };\n return hashIterableInts(iterator, seed);\n};\nvar hashStrings = function hashStrings() {\n return hashStringsArray(arguments);\n};\nvar hashStringsArray = function hashStringsArray(strs) {\n var hash;\n for (var i = 0; i < strs.length; i++) {\n var str = strs[i];\n if (i === 0) {\n hash = hashString(str);\n } else {\n hash = hashString(str, hash);\n }\n }\n return hash;\n};\n\nfunction rotatePoint(x, y, centerX, centerY, angleDegrees) {\n var angleRadians = angleDegrees * Math.PI / 180;\n var rotatedX = Math.cos(angleRadians) * (x - centerX) - Math.sin(angleRadians) * (y - centerY) + centerX;\n var rotatedY = Math.sin(angleRadians) * (x - centerX) + Math.cos(angleRadians) * (y - centerY) + centerY;\n return {\n x: rotatedX,\n y: rotatedY\n };\n}\nvar movePointByBoxAspect = function movePointByBoxAspect(x, y, boxX, boxY, skewX, skewY) {\n return {\n x: (x - boxX) * skewX + boxX,\n y: (y - boxY) * skewY + boxY\n };\n};\nfunction rotatePosAndSkewByBox(pos, box, angleDegrees) {\n if (angleDegrees === 0) return pos;\n var centerX = (box.x1 + box.x2) / 2;\n var centerY = (box.y1 + box.y2) / 2;\n var skewX = box.w / box.h;\n var skewY = 1 / skewX;\n var rotated = rotatePoint(pos.x, pos.y, centerX, centerY, angleDegrees);\n var skewed = movePointByBoxAspect(rotated.x, rotated.y, centerX, centerY, skewX, skewY);\n return {\n x: skewed.x,\n y: skewed.y\n };\n}\n\nvar warningsEnabled = true;\nvar warnSupported = console.warn != null;\nvar traceSupported = console.trace != null;\nvar MAX_INT$1 = Number.MAX_SAFE_INTEGER || 9007199254740991;\nvar trueify = function trueify() {\n return true;\n};\nvar falsify = function falsify() {\n return false;\n};\nvar zeroify = function zeroify() {\n return 0;\n};\nvar noop$1 = function noop() {};\nvar error = function error(msg) {\n throw new Error(msg);\n};\nvar warnings = function warnings(enabled) {\n if (enabled !== undefined) {\n warningsEnabled = !!enabled;\n } else {\n return warningsEnabled;\n }\n};\nvar warn = function warn(msg) {\n if (!warnings()) {\n return;\n }\n if (warnSupported) {\n console.warn(msg);\n } else {\n console.log(msg);\n if (traceSupported) {\n console.trace();\n }\n }\n};\nvar clone = function clone(obj) {\n return extend({}, obj);\n};\n\n// gets a shallow copy of the argument\nvar copy = function copy(obj) {\n if (obj == null) {\n return obj;\n }\n if (array(obj)) {\n return obj.slice();\n } else if (plainObject(obj)) {\n return clone(obj);\n } else {\n return obj;\n }\n};\nvar copyArray = function copyArray(arr) {\n return arr.slice();\n};\nvar uuid = function uuid(a, b /* placeholders */) {\n for (\n // loop :)\n b = a = '';\n // b - result , a - numeric letiable\n a++ < 36;\n //\n b += a * 51 & 52 // if \"a\" is not 9 or 14 or 19 or 24\n ?\n // return a random number or 4\n (a ^ 15 // if \"a\" is not 15\n ?\n // generate a random number from 0 to 15\n 8 ^ Math.random() * (a ^ 20 ? 16 : 4) // unless \"a\" is 20, in which case a random number from 8 to 11\n : 4 // otherwise 4\n ).toString(16) : '-' // in other cases (if \"a\" is 9,14,19,24) insert \"-\"\n );\n return b;\n};\nvar _staticEmptyObject = {};\nvar staticEmptyObject = function staticEmptyObject() {\n return _staticEmptyObject;\n};\nvar defaults$g = function defaults(_defaults) {\n var keys = Object.keys(_defaults);\n return function (opts) {\n var filledOpts = {};\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var optVal = opts == null ? undefined : opts[key];\n filledOpts[key] = optVal === undefined ? _defaults[key] : optVal;\n }\n return filledOpts;\n };\n};\nvar removeFromArray = function removeFromArray(arr, ele, oneCopy) {\n for (var i = arr.length - 1; i >= 0; i--) {\n if (arr[i] === ele) {\n arr.splice(i, 1);\n }\n }\n};\nvar clearArray = function clearArray(arr) {\n arr.splice(0, arr.length);\n};\nvar push = function push(arr, otherArr) {\n for (var i = 0; i < otherArr.length; i++) {\n var el = otherArr[i];\n arr.push(el);\n }\n};\nvar getPrefixedProperty = function getPrefixedProperty(obj, propName, prefix) {\n if (prefix) {\n propName = prependCamel(prefix, propName); // e.g. (labelWidth, source) => sourceLabelWidth\n }\n return obj[propName];\n};\nvar setPrefixedProperty = function setPrefixedProperty(obj, propName, prefix, value) {\n if (prefix) {\n propName = prependCamel(prefix, propName); // e.g. (labelWidth, source) => sourceLabelWidth\n }\n obj[propName] = value;\n};\n\n/* global Map */\nvar ObjectMap = /*#__PURE__*/function () {\n function ObjectMap() {\n _classCallCheck(this, ObjectMap);\n this._obj = {};\n }\n return _createClass(ObjectMap, [{\n key: \"set\",\n value: function set(key, val) {\n this._obj[key] = val;\n return this;\n }\n }, {\n key: \"delete\",\n value: function _delete(key) {\n this._obj[key] = undefined;\n return this;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this._obj = {};\n }\n }, {\n key: \"has\",\n value: function has(key) {\n return this._obj[key] !== undefined;\n }\n }, {\n key: \"get\",\n value: function get(key) {\n return this._obj[key];\n }\n }]);\n}();\nvar Map$1 = typeof Map !== 'undefined' ? Map : ObjectMap;\n\n/* global Set */\n\nvar undef = \"undefined\" ;\nvar ObjectSet = /*#__PURE__*/function () {\n function ObjectSet(arrayOrObjectSet) {\n _classCallCheck(this, ObjectSet);\n this._obj = Object.create(null);\n this.size = 0;\n if (arrayOrObjectSet != null) {\n var arr;\n if (arrayOrObjectSet.instanceString != null && arrayOrObjectSet.instanceString() === this.instanceString()) {\n arr = arrayOrObjectSet.toArray();\n } else {\n arr = arrayOrObjectSet;\n }\n for (var i = 0; i < arr.length; i++) {\n this.add(arr[i]);\n }\n }\n }\n return _createClass(ObjectSet, [{\n key: \"instanceString\",\n value: function instanceString() {\n return 'set';\n }\n }, {\n key: \"add\",\n value: function add(val) {\n var o = this._obj;\n if (o[val] !== 1) {\n o[val] = 1;\n this.size++;\n }\n }\n }, {\n key: \"delete\",\n value: function _delete(val) {\n var o = this._obj;\n if (o[val] === 1) {\n o[val] = 0;\n this.size--;\n }\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this._obj = Object.create(null);\n }\n }, {\n key: \"has\",\n value: function has(val) {\n return this._obj[val] === 1;\n }\n }, {\n key: \"toArray\",\n value: function toArray() {\n var _this = this;\n return Object.keys(this._obj).filter(function (key) {\n return _this.has(key);\n });\n }\n }, {\n key: \"forEach\",\n value: function forEach(callback, thisArg) {\n return this.toArray().forEach(callback, thisArg);\n }\n }]);\n}();\nvar Set$1 = (typeof Set === \"undefined\" ? \"undefined\" : _typeof(Set)) !== undef ? Set : ObjectSet;\n\n// represents a node or an edge\nvar Element = function Element(cy, params) {\n var restore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n if (cy === undefined || params === undefined || !core(cy)) {\n error('An element must have a core reference and parameters set');\n return;\n }\n var group = params.group;\n\n // try to automatically infer the group if unspecified\n if (group == null) {\n if (params.data && params.data.source != null && params.data.target != null) {\n group = 'edges';\n } else {\n group = 'nodes';\n }\n }\n\n // validate group\n if (group !== 'nodes' && group !== 'edges') {\n error('An element must be of type `nodes` or `edges`; you specified `' + group + '`');\n return;\n }\n\n // make the element array-like, just like a collection\n this.length = 1;\n this[0] = this;\n\n // NOTE: when something is added here, add also to ele.json()\n var _p = this._private = {\n cy: cy,\n single: true,\n // indicates this is an element\n data: params.data || {},\n // data object\n position: params.position || {\n x: 0,\n y: 0\n },\n // (x, y) position pair\n autoWidth: undefined,\n // width and height of nodes calculated by the renderer when set to special 'auto' value\n autoHeight: undefined,\n autoPadding: undefined,\n compoundBoundsClean: false,\n // whether the compound dimensions need to be recalculated the next time dimensions are read\n listeners: [],\n // array of bound listeners\n group: group,\n // string; 'nodes' or 'edges'\n style: {},\n // properties as set by the style\n rstyle: {},\n // properties for style sent from the renderer to the core\n styleCxts: [],\n // applied style contexts from the styler\n styleKeys: {},\n // per-group keys of style property values\n removed: true,\n // whether it's inside the vis; true if removed (set true here since we call restore)\n selected: params.selected ? true : false,\n // whether it's selected\n selectable: params.selectable === undefined ? true : params.selectable ? true : false,\n // whether it's selectable\n locked: params.locked ? true : false,\n // whether the element is locked (cannot be moved)\n grabbed: false,\n // whether the element is grabbed by the mouse; renderer sets this privately\n grabbable: params.grabbable === undefined ? true : params.grabbable ? true : false,\n // whether the element can be grabbed\n pannable: params.pannable === undefined ? group === 'edges' ? true : false : params.pannable ? true : false,\n // whether the element has passthrough panning enabled\n active: false,\n // whether the element is active from user interaction\n classes: new Set$1(),\n // map ( className => true )\n animation: {\n // object for currently-running animations\n current: [],\n queue: []\n },\n rscratch: {},\n // object in which the renderer can store information\n scratch: params.scratch || {},\n // scratch objects\n edges: [],\n // array of connected edges\n children: [],\n // array of children\n parent: params.parent && params.parent.isNode() ? params.parent : null,\n // parent ref\n traversalCache: {},\n // cache of output of traversal functions\n backgrounding: false,\n // whether background images are loading\n bbCache: null,\n // cache of the current bounding box\n bbCacheShift: {\n x: 0,\n y: 0\n },\n // shift applied to cached bb to be applied on next get\n bodyBounds: null,\n // bounds cache of element body, w/o overlay\n overlayBounds: null,\n // bounds cache of element body, including overlay\n labelBounds: {\n // bounds cache of labels\n all: null,\n source: null,\n target: null,\n main: null\n },\n arrowBounds: {\n // bounds cache of edge arrows\n source: null,\n target: null,\n 'mid-source': null,\n 'mid-target': null\n }\n };\n if (_p.position.x == null) {\n _p.position.x = 0;\n }\n if (_p.position.y == null) {\n _p.position.y = 0;\n }\n\n // renderedPosition overrides if specified\n if (params.renderedPosition) {\n var rpos = params.renderedPosition;\n var pan = cy.pan();\n var zoom = cy.zoom();\n _p.position = {\n x: (rpos.x - pan.x) / zoom,\n y: (rpos.y - pan.y) / zoom\n };\n }\n var classes = [];\n if (array(params.classes)) {\n classes = params.classes;\n } else if (string(params.classes)) {\n classes = params.classes.split(/\\s+/);\n }\n for (var i = 0, l = classes.length; i < l; i++) {\n var cls = classes[i];\n if (!cls || cls === '') {\n continue;\n }\n _p.classes.add(cls);\n }\n this.createEmitter();\n if (restore === undefined || restore) {\n this.restore();\n }\n var bypass = params.style || params.css;\n if (bypass) {\n warn('Setting a `style` bypass at element creation should be done only when absolutely necessary. Try to use the stylesheet instead.');\n this.style(bypass);\n }\n};\n\nvar defineSearch = function defineSearch(params) {\n params = {\n bfs: params.bfs || !params.dfs,\n dfs: params.dfs || !params.bfs\n };\n\n // from pseudocode on wikipedia\n return function searchFn(roots, fn, directed) {\n var options;\n if (plainObject(roots) && !elementOrCollection(roots)) {\n options = roots;\n roots = options.roots || options.root;\n fn = options.visit;\n directed = options.directed;\n }\n directed = arguments.length === 2 && !fn$6(fn) ? fn : directed;\n fn = fn$6(fn) ? fn : function () {};\n var cy = this._private.cy;\n var v = roots = string(roots) ? this.filter(roots) : roots;\n var Q = [];\n var connectedNodes = [];\n var connectedBy = {};\n var id2depth = {};\n var V = {};\n var j = 0;\n var found;\n var _this$byGroup = this.byGroup(),\n nodes = _this$byGroup.nodes,\n edges = _this$byGroup.edges;\n\n // enqueue v\n for (var i = 0; i < v.length; i++) {\n var vi = v[i];\n var viId = vi.id();\n if (vi.isNode()) {\n Q.unshift(vi);\n if (params.bfs) {\n V[viId] = true;\n connectedNodes.push(vi);\n }\n id2depth[viId] = 0;\n }\n }\n var _loop = function _loop() {\n var v = params.bfs ? Q.shift() : Q.pop();\n var vId = v.id();\n if (params.dfs) {\n if (V[vId]) {\n return 0; // continue\n }\n V[vId] = true;\n connectedNodes.push(v);\n }\n var depth = id2depth[vId];\n var prevEdge = connectedBy[vId];\n var src = prevEdge != null ? prevEdge.source() : null;\n var tgt = prevEdge != null ? prevEdge.target() : null;\n var prevNode = prevEdge == null ? undefined : v.same(src) ? tgt[0] : src[0];\n var ret;\n ret = fn(v, prevEdge, prevNode, j++, depth);\n if (ret === true) {\n found = v;\n return 1; // break\n }\n if (ret === false) {\n return 1; // break\n }\n var vwEdges = v.connectedEdges().filter(function (e) {\n return (!directed || e.source().same(v)) && edges.has(e);\n });\n for (var _i2 = 0; _i2 < vwEdges.length; _i2++) {\n var e = vwEdges[_i2];\n var w = e.connectedNodes().filter(function (n) {\n return !n.same(v) && nodes.has(n);\n });\n var wId = w.id();\n if (w.length !== 0 && !V[wId]) {\n w = w[0];\n Q.push(w);\n if (params.bfs) {\n V[wId] = true;\n connectedNodes.push(w);\n }\n connectedBy[wId] = e;\n id2depth[wId] = id2depth[vId] + 1;\n }\n }\n },\n _ret;\n while (Q.length !== 0) {\n _ret = _loop();\n if (_ret === 0) continue;\n if (_ret === 1) break;\n }\n var connectedEles = cy.collection();\n for (var _i = 0; _i < connectedNodes.length; _i++) {\n var node = connectedNodes[_i];\n var edge = connectedBy[node.id()];\n if (edge != null) {\n connectedEles.push(edge);\n }\n connectedEles.push(node);\n }\n return {\n path: cy.collection(connectedEles),\n found: cy.collection(found)\n };\n };\n};\n\n// search, spanning trees, etc\nvar elesfn$v = {\n breadthFirstSearch: defineSearch({\n bfs: true\n }),\n depthFirstSearch: defineSearch({\n dfs: true\n })\n};\n\n// nice, short mathematical alias\nelesfn$v.bfs = elesfn$v.breadthFirstSearch;\nelesfn$v.dfs = elesfn$v.depthFirstSearch;\n\nvar heap$2 = {exports: {}};\n\nvar heap$1 = heap$2.exports;\n\nvar hasRequiredHeap$1;\n\nfunction requireHeap$1 () {\n\tif (hasRequiredHeap$1) return heap$2.exports;\n\thasRequiredHeap$1 = 1;\n\t(function (module, exports) {\n\t\t// Generated by CoffeeScript 1.8.0\n\t\t(function() {\n\t\t var Heap, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup;\n\n\t\t floor = Math.floor, min = Math.min;\n\n\n\t\t /*\n\t\t Default comparison function to be used\n\t\t */\n\n\t\t defaultCmp = function(x, y) {\n\t\t if (x < y) {\n\t\t return -1;\n\t\t }\n\t\t if (x > y) {\n\t\t return 1;\n\t\t }\n\t\t return 0;\n\t\t };\n\n\n\t\t /*\n\t\t Insert item x in list a, and keep it sorted assuming a is sorted.\n\t\t \n\t\t If x is already in a, insert it to the right of the rightmost x.\n\t\t \n\t\t Optional args lo (default 0) and hi (default a.length) bound the slice\n\t\t of a to be searched.\n\t\t */\n\n\t\t insort = function(a, x, lo, hi, cmp) {\n\t\t var mid;\n\t\t if (lo == null) {\n\t\t lo = 0;\n\t\t }\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t if (lo < 0) {\n\t\t throw new Error('lo must be non-negative');\n\t\t }\n\t\t if (hi == null) {\n\t\t hi = a.length;\n\t\t }\n\t\t while (lo < hi) {\n\t\t mid = floor((lo + hi) / 2);\n\t\t if (cmp(x, a[mid]) < 0) {\n\t\t hi = mid;\n\t\t } else {\n\t\t lo = mid + 1;\n\t\t }\n\t\t }\n\t\t return ([].splice.apply(a, [lo, lo - lo].concat(x)), x);\n\t\t };\n\n\n\t\t /*\n\t\t Push item onto heap, maintaining the heap invariant.\n\t\t */\n\n\t\t heappush = function(array, item, cmp) {\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t array.push(item);\n\t\t return _siftdown(array, 0, array.length - 1, cmp);\n\t\t };\n\n\n\t\t /*\n\t\t Pop the smallest item off the heap, maintaining the heap invariant.\n\t\t */\n\n\t\t heappop = function(array, cmp) {\n\t\t var lastelt, returnitem;\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t lastelt = array.pop();\n\t\t if (array.length) {\n\t\t returnitem = array[0];\n\t\t array[0] = lastelt;\n\t\t _siftup(array, 0, cmp);\n\t\t } else {\n\t\t returnitem = lastelt;\n\t\t }\n\t\t return returnitem;\n\t\t };\n\n\n\t\t /*\n\t\t Pop and return the current smallest value, and add the new item.\n\t\t \n\t\t This is more efficient than heappop() followed by heappush(), and can be\n\t\t more appropriate when using a fixed size heap. Note that the value\n\t\t returned may be larger than item! That constrains reasonable use of\n\t\t this routine unless written as part of a conditional replacement:\n\t\t if item > array[0]\n\t\t item = heapreplace(array, item)\n\t\t */\n\n\t\t heapreplace = function(array, item, cmp) {\n\t\t var returnitem;\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t returnitem = array[0];\n\t\t array[0] = item;\n\t\t _siftup(array, 0, cmp);\n\t\t return returnitem;\n\t\t };\n\n\n\t\t /*\n\t\t Fast version of a heappush followed by a heappop.\n\t\t */\n\n\t\t heappushpop = function(array, item, cmp) {\n\t\t var _ref;\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t if (array.length && cmp(array[0], item) < 0) {\n\t\t _ref = [array[0], item], item = _ref[0], array[0] = _ref[1];\n\t\t _siftup(array, 0, cmp);\n\t\t }\n\t\t return item;\n\t\t };\n\n\n\t\t /*\n\t\t Transform list into a heap, in-place, in O(array.length) time.\n\t\t */\n\n\t\t heapify = function(array, cmp) {\n\t\t var i, _i, _len, _ref1, _results, _results1;\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t _ref1 = (function() {\n\t\t _results1 = [];\n\t\t for (var _j = 0, _ref = floor(array.length / 2); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j--){ _results1.push(_j); }\n\t\t return _results1;\n\t\t }).apply(this).reverse();\n\t\t _results = [];\n\t\t for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n\t\t i = _ref1[_i];\n\t\t _results.push(_siftup(array, i, cmp));\n\t\t }\n\t\t return _results;\n\t\t };\n\n\n\t\t /*\n\t\t Update the position of the given item in the heap.\n\t\t This function should be called every time the item is being modified.\n\t\t */\n\n\t\t updateItem = function(array, item, cmp) {\n\t\t var pos;\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t pos = array.indexOf(item);\n\t\t if (pos === -1) {\n\t\t return;\n\t\t }\n\t\t _siftdown(array, 0, pos, cmp);\n\t\t return _siftup(array, pos, cmp);\n\t\t };\n\n\n\t\t /*\n\t\t Find the n largest elements in a dataset.\n\t\t */\n\n\t\t nlargest = function(array, n, cmp) {\n\t\t var elem, result, _i, _len, _ref;\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t result = array.slice(0, n);\n\t\t if (!result.length) {\n\t\t return result;\n\t\t }\n\t\t heapify(result, cmp);\n\t\t _ref = array.slice(n);\n\t\t for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n\t\t elem = _ref[_i];\n\t\t heappushpop(result, elem, cmp);\n\t\t }\n\t\t return result.sort(cmp).reverse();\n\t\t };\n\n\n\t\t /*\n\t\t Find the n smallest elements in a dataset.\n\t\t */\n\n\t\t nsmallest = function(array, n, cmp) {\n\t\t var elem, los, result, _i, _j, _len, _ref, _ref1, _results;\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t if (n * 10 <= array.length) {\n\t\t result = array.slice(0, n).sort(cmp);\n\t\t if (!result.length) {\n\t\t return result;\n\t\t }\n\t\t los = result[result.length - 1];\n\t\t _ref = array.slice(n);\n\t\t for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n\t\t elem = _ref[_i];\n\t\t if (cmp(elem, los) < 0) {\n\t\t insort(result, elem, 0, null, cmp);\n\t\t result.pop();\n\t\t los = result[result.length - 1];\n\t\t }\n\t\t }\n\t\t return result;\n\t\t }\n\t\t heapify(array, cmp);\n\t\t _results = [];\n\t\t for (_j = 0, _ref1 = min(n, array.length); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; 0 <= _ref1 ? ++_j : --_j) {\n\t\t _results.push(heappop(array, cmp));\n\t\t }\n\t\t return _results;\n\t\t };\n\n\t\t _siftdown = function(array, startpos, pos, cmp) {\n\t\t var newitem, parent, parentpos;\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t newitem = array[pos];\n\t\t while (pos > startpos) {\n\t\t parentpos = (pos - 1) >> 1;\n\t\t parent = array[parentpos];\n\t\t if (cmp(newitem, parent) < 0) {\n\t\t array[pos] = parent;\n\t\t pos = parentpos;\n\t\t continue;\n\t\t }\n\t\t break;\n\t\t }\n\t\t return array[pos] = newitem;\n\t\t };\n\n\t\t _siftup = function(array, pos, cmp) {\n\t\t var childpos, endpos, newitem, rightpos, startpos;\n\t\t if (cmp == null) {\n\t\t cmp = defaultCmp;\n\t\t }\n\t\t endpos = array.length;\n\t\t startpos = pos;\n\t\t newitem = array[pos];\n\t\t childpos = 2 * pos + 1;\n\t\t while (childpos < endpos) {\n\t\t rightpos = childpos + 1;\n\t\t if (rightpos < endpos && !(cmp(array[childpos], array[rightpos]) < 0)) {\n\t\t childpos = rightpos;\n\t\t }\n\t\t array[pos] = array[childpos];\n\t\t pos = childpos;\n\t\t childpos = 2 * pos + 1;\n\t\t }\n\t\t array[pos] = newitem;\n\t\t return _siftdown(array, startpos, pos, cmp);\n\t\t };\n\n\t\t Heap = (function() {\n\t\t Heap.push = heappush;\n\n\t\t Heap.pop = heappop;\n\n\t\t Heap.replace = heapreplace;\n\n\t\t Heap.pushpop = heappushpop;\n\n\t\t Heap.heapify = heapify;\n\n\t\t Heap.updateItem = updateItem;\n\n\t\t Heap.nlargest = nlargest;\n\n\t\t Heap.nsmallest = nsmallest;\n\n\t\t function Heap(cmp) {\n\t\t this.cmp = cmp != null ? cmp : defaultCmp;\n\t\t this.nodes = [];\n\t\t }\n\n\t\t Heap.prototype.push = function(x) {\n\t\t return heappush(this.nodes, x, this.cmp);\n\t\t };\n\n\t\t Heap.prototype.pop = function() {\n\t\t return heappop(this.nodes, this.cmp);\n\t\t };\n\n\t\t Heap.prototype.peek = function() {\n\t\t return this.nodes[0];\n\t\t };\n\n\t\t Heap.prototype.contains = function(x) {\n\t\t return this.nodes.indexOf(x) !== -1;\n\t\t };\n\n\t\t Heap.prototype.replace = function(x) {\n\t\t return heapreplace(this.nodes, x, this.cmp);\n\t\t };\n\n\t\t Heap.prototype.pushpop = function(x) {\n\t\t return heappushpop(this.nodes, x, this.cmp);\n\t\t };\n\n\t\t Heap.prototype.heapify = function() {\n\t\t return heapify(this.nodes, this.cmp);\n\t\t };\n\n\t\t Heap.prototype.updateItem = function(x) {\n\t\t return updateItem(this.nodes, x, this.cmp);\n\t\t };\n\n\t\t Heap.prototype.clear = function() {\n\t\t return this.nodes = [];\n\t\t };\n\n\t\t Heap.prototype.empty = function() {\n\t\t return this.nodes.length === 0;\n\t\t };\n\n\t\t Heap.prototype.size = function() {\n\t\t return this.nodes.length;\n\t\t };\n\n\t\t Heap.prototype.clone = function() {\n\t\t var heap;\n\t\t heap = new Heap();\n\t\t heap.nodes = this.nodes.slice(0);\n\t\t return heap;\n\t\t };\n\n\t\t Heap.prototype.toArray = function() {\n\t\t return this.nodes.slice(0);\n\t\t };\n\n\t\t Heap.prototype.insert = Heap.prototype.push;\n\n\t\t Heap.prototype.top = Heap.prototype.peek;\n\n\t\t Heap.prototype.front = Heap.prototype.peek;\n\n\t\t Heap.prototype.has = Heap.prototype.contains;\n\n\t\t Heap.prototype.copy = Heap.prototype.clone;\n\n\t\t return Heap;\n\n\t\t })();\n\n\t\t (function(root, factory) {\n\t\t {\n\t\t return module.exports = factory();\n\t\t }\n\t\t })(this, function() {\n\t\t return Heap;\n\t\t });\n\n\t\t}).call(heap$1); \n\t} (heap$2));\n\treturn heap$2.exports;\n}\n\nvar heap;\nvar hasRequiredHeap;\n\nfunction requireHeap () {\n\tif (hasRequiredHeap) return heap;\n\thasRequiredHeap = 1;\n\theap = requireHeap$1();\n\treturn heap;\n}\n\nvar heapExports = requireHeap();\nvar Heap = /*@__PURE__*/getDefaultExportFromCjs(heapExports);\n\nvar dijkstraDefaults = defaults$g({\n root: null,\n weight: function weight(edge) {\n return 1;\n },\n directed: false\n});\nvar elesfn$u = {\n dijkstra: function dijkstra(options) {\n if (!plainObject(options)) {\n var args = arguments;\n options = {\n root: args[0],\n weight: args[1],\n directed: args[2]\n };\n }\n var _dijkstraDefaults = dijkstraDefaults(options),\n root = _dijkstraDefaults.root,\n weight = _dijkstraDefaults.weight,\n directed = _dijkstraDefaults.directed;\n var eles = this;\n var weightFn = weight;\n var source = string(root) ? this.filter(root)[0] : root[0];\n var dist = {};\n var prev = {};\n var knownDist = {};\n var _this$byGroup = this.byGroup(),\n nodes = _this$byGroup.nodes,\n edges = _this$byGroup.edges;\n edges.unmergeBy(function (ele) {\n return ele.isLoop();\n });\n var getDist = function getDist(node) {\n return dist[node.id()];\n };\n var setDist = function setDist(node, d) {\n dist[node.id()] = d;\n Q.updateItem(node);\n };\n var Q = new Heap(function (a, b) {\n return getDist(a) - getDist(b);\n });\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n dist[node.id()] = node.same(source) ? 0 : Infinity;\n Q.push(node);\n }\n var distBetween = function distBetween(u, v) {\n var uvs = (directed ? u.edgesTo(v) : u.edgesWith(v)).intersect(edges);\n var smallestDistance = Infinity;\n var smallestEdge;\n for (var _i = 0; _i < uvs.length; _i++) {\n var edge = uvs[_i];\n var _weight = weightFn(edge);\n if (_weight < smallestDistance || !smallestEdge) {\n smallestDistance = _weight;\n smallestEdge = edge;\n }\n }\n return {\n edge: smallestEdge,\n dist: smallestDistance\n };\n };\n while (Q.size() > 0) {\n var u = Q.pop();\n var smalletsDist = getDist(u);\n var uid = u.id();\n knownDist[uid] = smalletsDist;\n if (smalletsDist === Infinity) {\n continue;\n }\n var neighbors = u.neighborhood().intersect(nodes);\n for (var _i2 = 0; _i2 < neighbors.length; _i2++) {\n var v = neighbors[_i2];\n var vid = v.id();\n var vDist = distBetween(u, v);\n var alt = smalletsDist + vDist.dist;\n if (alt < getDist(v)) {\n setDist(v, alt);\n prev[vid] = {\n node: u,\n edge: vDist.edge\n };\n }\n } // for\n } // while\n\n return {\n distanceTo: function distanceTo(node) {\n var target = string(node) ? nodes.filter(node)[0] : node[0];\n return knownDist[target.id()];\n },\n pathTo: function pathTo(node) {\n var target = string(node) ? nodes.filter(node)[0] : node[0];\n var S = [];\n var u = target;\n var uid = u.id();\n if (target.length > 0) {\n S.unshift(target);\n while (prev[uid]) {\n var p = prev[uid];\n S.unshift(p.edge);\n S.unshift(p.node);\n u = p.node;\n uid = u.id();\n }\n }\n return eles.spawn(S);\n }\n };\n }\n};\n\nvar elesfn$t = {\n // kruskal's algorithm (finds min spanning tree, assuming undirected graph)\n // implemented from pseudocode from wikipedia\n kruskal: function kruskal(weightFn) {\n weightFn = weightFn || function (edge) {\n return 1;\n };\n var _this$byGroup = this.byGroup(),\n nodes = _this$byGroup.nodes,\n edges = _this$byGroup.edges;\n var numNodes = nodes.length;\n var forest = new Array(numNodes);\n var A = nodes; // assumes byGroup() creates new collections that can be safely mutated\n\n var findSetIndex = function findSetIndex(ele) {\n for (var i = 0; i < forest.length; i++) {\n var eles = forest[i];\n if (eles.has(ele)) {\n return i;\n }\n }\n };\n\n // start with one forest per node\n for (var i = 0; i < numNodes; i++) {\n forest[i] = this.spawn(nodes[i]);\n }\n var S = edges.sort(function (a, b) {\n return weightFn(a) - weightFn(b);\n });\n for (var _i = 0; _i < S.length; _i++) {\n var edge = S[_i];\n var u = edge.source()[0];\n var v = edge.target()[0];\n var setUIndex = findSetIndex(u);\n var setVIndex = findSetIndex(v);\n var setU = forest[setUIndex];\n var setV = forest[setVIndex];\n if (setUIndex !== setVIndex) {\n A.merge(edge);\n\n // combine forests for u and v\n setU.merge(setV);\n forest.splice(setVIndex, 1);\n }\n }\n return A;\n }\n};\n\nvar aStarDefaults = defaults$g({\n root: null,\n goal: null,\n weight: function weight(edge) {\n return 1;\n },\n heuristic: function heuristic(edge) {\n return 0;\n },\n directed: false\n});\nvar elesfn$s = {\n // Implemented from pseudocode from wikipedia\n aStar: function aStar(options) {\n var cy = this.cy();\n var _aStarDefaults = aStarDefaults(options),\n root = _aStarDefaults.root,\n goal = _aStarDefaults.goal,\n heuristic = _aStarDefaults.heuristic,\n directed = _aStarDefaults.directed,\n weight = _aStarDefaults.weight;\n root = cy.collection(root)[0];\n goal = cy.collection(goal)[0];\n var sid = root.id();\n var tid = goal.id();\n var gScore = {};\n var fScore = {};\n var closedSetIds = {};\n var openSet = new Heap(function (a, b) {\n return fScore[a.id()] - fScore[b.id()];\n });\n var openSetIds = new Set$1();\n var cameFrom = {};\n var cameFromEdge = {};\n var addToOpenSet = function addToOpenSet(ele, id) {\n openSet.push(ele);\n openSetIds.add(id);\n };\n var cMin, cMinId;\n var popFromOpenSet = function popFromOpenSet() {\n cMin = openSet.pop();\n cMinId = cMin.id();\n openSetIds[\"delete\"](cMinId);\n };\n var isInOpenSet = function isInOpenSet(id) {\n return openSetIds.has(id);\n };\n addToOpenSet(root, sid);\n gScore[sid] = 0;\n fScore[sid] = heuristic(root);\n\n // Counter\n var steps = 0;\n\n // Main loop\n while (openSet.size() > 0) {\n popFromOpenSet();\n steps++;\n\n // If we've found our goal, then we are done\n if (cMinId === tid) {\n var path = [];\n var pathNode = goal;\n var pathNodeId = tid;\n var pathEdge = cameFromEdge[pathNodeId];\n for (;;) {\n path.unshift(pathNode);\n if (pathEdge != null) {\n path.unshift(pathEdge);\n }\n pathNode = cameFrom[pathNodeId];\n if (pathNode == null) {\n break;\n }\n pathNodeId = pathNode.id();\n pathEdge = cameFromEdge[pathNodeId];\n }\n return {\n found: true,\n distance: gScore[cMinId],\n path: this.spawn(path),\n steps: steps\n };\n }\n\n // Add cMin to processed nodes\n closedSetIds[cMinId] = true;\n\n // Update scores for neighbors of cMin\n // Take into account if graph is directed or not\n var vwEdges = cMin._private.edges;\n for (var i = 0; i < vwEdges.length; i++) {\n var e = vwEdges[i];\n\n // edge must be in set of calling eles\n if (!this.hasElementWithId(e.id())) {\n continue;\n }\n\n // cMin must be the source of edge if directed\n if (directed && e.data('source') !== cMinId) {\n continue;\n }\n var wSrc = e.source();\n var wTgt = e.target();\n var w = wSrc.id() !== cMinId ? wSrc : wTgt;\n var wid = w.id();\n\n // node must be in set of calling eles\n if (!this.hasElementWithId(wid)) {\n continue;\n }\n\n // if node is in closedSet, ignore it\n if (closedSetIds[wid]) {\n continue;\n }\n\n // New tentative score for node w\n var tempScore = gScore[cMinId] + weight(e);\n\n // Update gScore for node w if:\n // w not present in openSet\n // OR\n // tentative gScore is less than previous value\n\n // w not in openSet\n if (!isInOpenSet(wid)) {\n gScore[wid] = tempScore;\n fScore[wid] = tempScore + heuristic(w);\n addToOpenSet(w, wid);\n cameFrom[wid] = cMin;\n cameFromEdge[wid] = e;\n continue;\n }\n\n // w already in openSet, but with greater gScore\n if (tempScore < gScore[wid]) {\n gScore[wid] = tempScore;\n fScore[wid] = tempScore + heuristic(w);\n cameFrom[wid] = cMin;\n cameFromEdge[wid] = e;\n }\n } // End of neighbors update\n } // End of main loop\n\n // If we've reached here, then we've not reached our goal\n return {\n found: false,\n distance: undefined,\n path: undefined,\n steps: steps\n };\n }\n}; // elesfn\n\nvar floydWarshallDefaults = defaults$g({\n weight: function weight(edge) {\n return 1;\n },\n directed: false\n});\nvar elesfn$r = {\n // Implemented from pseudocode from wikipedia\n floydWarshall: function floydWarshall(options) {\n var cy = this.cy();\n var _floydWarshallDefault = floydWarshallDefaults(options),\n weight = _floydWarshallDefault.weight,\n directed = _floydWarshallDefault.directed;\n var weightFn = weight;\n var _this$byGroup = this.byGroup(),\n nodes = _this$byGroup.nodes,\n edges = _this$byGroup.edges;\n var N = nodes.length;\n var Nsq = N * N;\n var indexOf = function indexOf(node) {\n return nodes.indexOf(node);\n };\n var atIndex = function atIndex(i) {\n return nodes[i];\n };\n\n // Initialize distance matrix\n var dist = new Array(Nsq);\n for (var n = 0; n < Nsq; n++) {\n var j = n % N;\n var i = (n - j) / N;\n if (i === j) {\n dist[n] = 0;\n } else {\n dist[n] = Infinity;\n }\n }\n\n // Initialize matrix used for path reconstruction\n // Initialize distance matrix\n var next = new Array(Nsq);\n var edgeNext = new Array(Nsq);\n\n // Process edges\n for (var _i = 0; _i < edges.length; _i++) {\n var edge = edges[_i];\n var src = edge.source()[0];\n var tgt = edge.target()[0];\n if (src === tgt) {\n continue;\n } // exclude loops\n\n var s = indexOf(src);\n var t = indexOf(tgt);\n var st = s * N + t; // source to target index\n var _weight = weightFn(edge);\n\n // Check if already process another edge between same 2 nodes\n if (dist[st] > _weight) {\n dist[st] = _weight;\n next[st] = t;\n edgeNext[st] = edge;\n }\n\n // If undirected graph, process 'reversed' edge\n if (!directed) {\n var ts = t * N + s; // target to source index\n\n if (!directed && dist[ts] > _weight) {\n dist[ts] = _weight;\n next[ts] = s;\n edgeNext[ts] = edge;\n }\n }\n }\n\n // Main loop\n for (var k = 0; k < N; k++) {\n for (var _i2 = 0; _i2 < N; _i2++) {\n var ik = _i2 * N + k;\n for (var _j = 0; _j < N; _j++) {\n var ij = _i2 * N + _j;\n var kj = k * N + _j;\n if (dist[ik] + dist[kj] < dist[ij]) {\n dist[ij] = dist[ik] + dist[kj];\n next[ij] = next[ik];\n }\n }\n }\n }\n var getArgEle = function getArgEle(ele) {\n return (string(ele) ? cy.filter(ele) : ele)[0];\n };\n var indexOfArgEle = function indexOfArgEle(ele) {\n return indexOf(getArgEle(ele));\n };\n var res = {\n distance: function distance(from, to) {\n var i = indexOfArgEle(from);\n var j = indexOfArgEle(to);\n return dist[i * N + j];\n },\n path: function path(from, to) {\n var i = indexOfArgEle(from);\n var j = indexOfArgEle(to);\n var fromNode = atIndex(i);\n if (i === j) {\n return fromNode.collection();\n }\n if (next[i * N + j] == null) {\n return cy.collection();\n }\n var path = cy.collection();\n var prev = i;\n var edge;\n path.merge(fromNode);\n while (i !== j) {\n prev = i;\n i = next[i * N + j];\n edge = edgeNext[prev * N + i];\n path.merge(edge);\n path.merge(atIndex(i));\n }\n return path;\n }\n };\n return res;\n } // floydWarshall\n}; // elesfn\n\nvar bellmanFordDefaults = defaults$g({\n weight: function weight(edge) {\n return 1;\n },\n directed: false,\n root: null\n});\nvar elesfn$q = {\n // Implemented from pseudocode from wikipedia\n bellmanFord: function bellmanFord(options) {\n var _this = this;\n var _bellmanFordDefaults = bellmanFordDefaults(options),\n weight = _bellmanFordDefaults.weight,\n directed = _bellmanFordDefaults.directed,\n root = _bellmanFordDefaults.root;\n var weightFn = weight;\n var eles = this;\n var cy = this.cy();\n var _this$byGroup = this.byGroup(),\n edges = _this$byGroup.edges,\n nodes = _this$byGroup.nodes;\n var numNodes = nodes.length;\n var infoMap = new Map$1();\n var hasNegativeWeightCycle = false;\n var negativeWeightCycles = [];\n root = cy.collection(root)[0]; // in case selector passed\n\n edges.unmergeBy(function (edge) {\n return edge.isLoop();\n });\n var numEdges = edges.length;\n var getInfo = function getInfo(node) {\n var obj = infoMap.get(node.id());\n if (!obj) {\n obj = {};\n infoMap.set(node.id(), obj);\n }\n return obj;\n };\n var getNodeFromTo = function getNodeFromTo(to) {\n return (string(to) ? cy.$(to) : to)[0];\n };\n var distanceTo = function distanceTo(to) {\n return getInfo(getNodeFromTo(to)).dist;\n };\n var pathTo = function pathTo(to) {\n var thisStart = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : root;\n var end = getNodeFromTo(to);\n var path = [];\n var node = end;\n for (;;) {\n if (node == null) {\n return _this.spawn();\n }\n var _getInfo = getInfo(node),\n edge = _getInfo.edge,\n pred = _getInfo.pred;\n path.unshift(node[0]);\n if (node.same(thisStart) && path.length > 0) {\n break;\n }\n if (edge != null) {\n path.unshift(edge);\n }\n node = pred;\n }\n return eles.spawn(path);\n };\n\n // Initializations { dist, pred, edge }\n for (var i = 0; i < numNodes; i++) {\n var node = nodes[i];\n var info = getInfo(node);\n if (node.same(root)) {\n info.dist = 0;\n } else {\n info.dist = Infinity;\n }\n info.pred = null;\n info.edge = null;\n }\n\n // Edges relaxation\n var replacedEdge = false;\n var checkForEdgeReplacement = function checkForEdgeReplacement(node1, node2, edge, info1, info2, weight) {\n var dist = info1.dist + weight;\n if (dist < info2.dist && !edge.same(info1.edge)) {\n info2.dist = dist;\n info2.pred = node1;\n info2.edge = edge;\n replacedEdge = true;\n }\n };\n for (var _i = 1; _i < numNodes; _i++) {\n replacedEdge = false;\n for (var e = 0; e < numEdges; e++) {\n var edge = edges[e];\n var src = edge.source();\n var tgt = edge.target();\n var _weight = weightFn(edge);\n var srcInfo = getInfo(src);\n var tgtInfo = getInfo(tgt);\n checkForEdgeReplacement(src, tgt, edge, srcInfo, tgtInfo, _weight);\n\n // If undirected graph, we need to take into account the 'reverse' edge\n if (!directed) {\n checkForEdgeReplacement(tgt, src, edge, tgtInfo, srcInfo, _weight);\n }\n }\n if (!replacedEdge) {\n break;\n }\n }\n if (replacedEdge) {\n // Check for negative weight cycles\n var negativeWeightCycleIds = [];\n for (var _e = 0; _e < numEdges; _e++) {\n var _edge = edges[_e];\n var _src = _edge.source();\n var _tgt = _edge.target();\n var _weight2 = weightFn(_edge);\n var srcDist = getInfo(_src).dist;\n var tgtDist = getInfo(_tgt).dist;\n if (srcDist + _weight2 < tgtDist || !directed && tgtDist + _weight2 < srcDist) {\n if (!hasNegativeWeightCycle) {\n warn('Graph contains a negative weight cycle for Bellman-Ford');\n hasNegativeWeightCycle = true;\n }\n if (options.findNegativeWeightCycles !== false) {\n var negativeNodes = [];\n if (srcDist + _weight2 < tgtDist) {\n negativeNodes.push(_src);\n }\n if (!directed && tgtDist + _weight2 < srcDist) {\n negativeNodes.push(_tgt);\n }\n var numNegativeNodes = negativeNodes.length;\n for (var n = 0; n < numNegativeNodes; n++) {\n var start = negativeNodes[n];\n var cycle = [start];\n cycle.push(getInfo(start).edge);\n var _node = getInfo(start).pred;\n while (cycle.indexOf(_node) === -1) {\n cycle.push(_node);\n cycle.push(getInfo(_node).edge);\n _node = getInfo(_node).pred;\n }\n cycle = cycle.slice(cycle.indexOf(_node));\n var smallestId = cycle[0].id();\n var smallestIndex = 0;\n for (var c = 2; c < cycle.length; c += 2) {\n if (cycle[c].id() < smallestId) {\n smallestId = cycle[c].id();\n smallestIndex = c;\n }\n }\n cycle = cycle.slice(smallestIndex).concat(cycle.slice(0, smallestIndex));\n cycle.push(cycle[0]);\n var cycleId = cycle.map(function (el) {\n return el.id();\n }).join(\",\");\n if (negativeWeightCycleIds.indexOf(cycleId) === -1) {\n negativeWeightCycles.push(eles.spawn(cycle));\n negativeWeightCycleIds.push(cycleId);\n }\n }\n } else {\n break;\n }\n }\n }\n }\n return {\n distanceTo: distanceTo,\n pathTo: pathTo,\n hasNegativeWeightCycle: hasNegativeWeightCycle,\n negativeWeightCycles: negativeWeightCycles\n };\n } // bellmanFord\n}; // elesfn\n\nvar sqrt2 = Math.sqrt(2);\n\n// Function which colapses 2 (meta) nodes into one\n// Updates the remaining edge lists\n// Receives as a paramater the edge which causes the collapse\nvar collapse = function collapse(edgeIndex, nodeMap, remainingEdges) {\n if (remainingEdges.length === 0) {\n error(\"Karger-Stein must be run on a connected (sub)graph\");\n }\n var edgeInfo = remainingEdges[edgeIndex];\n var sourceIn = edgeInfo[1];\n var targetIn = edgeInfo[2];\n var partition1 = nodeMap[sourceIn];\n var partition2 = nodeMap[targetIn];\n var newEdges = remainingEdges; // re-use array\n\n // Delete all edges between partition1 and partition2\n for (var i = newEdges.length - 1; i >= 0; i--) {\n var edge = newEdges[i];\n var src = edge[1];\n var tgt = edge[2];\n if (nodeMap[src] === partition1 && nodeMap[tgt] === partition2 || nodeMap[src] === partition2 && nodeMap[tgt] === partition1) {\n newEdges.splice(i, 1);\n }\n }\n\n // All edges pointing to partition2 should now point to partition1\n for (var _i = 0; _i < newEdges.length; _i++) {\n var _edge = newEdges[_i];\n if (_edge[1] === partition2) {\n // Check source\n newEdges[_i] = _edge.slice(); // copy\n newEdges[_i][1] = partition1;\n } else if (_edge[2] === partition2) {\n // Check target\n newEdges[_i] = _edge.slice(); // copy\n newEdges[_i][2] = partition1;\n }\n }\n\n // Move all nodes from partition2 to partition1\n for (var _i2 = 0; _i2 < nodeMap.length; _i2++) {\n if (nodeMap[_i2] === partition2) {\n nodeMap[_i2] = partition1;\n }\n }\n return newEdges;\n};\n\n// Contracts a graph until we reach a certain number of meta nodes\nvar contractUntil = function contractUntil(metaNodeMap, remainingEdges, size, sizeLimit) {\n while (size > sizeLimit) {\n // Choose an edge randomly\n var edgeIndex = Math.floor(Math.random() * remainingEdges.length);\n\n // Collapse graph based on edge\n remainingEdges = collapse(edgeIndex, metaNodeMap, remainingEdges);\n size--;\n }\n return remainingEdges;\n};\nvar elesfn$p = {\n // Computes the minimum cut of an undirected graph\n // Returns the correct answer with high probability\n kargerStein: function kargerStein() {\n var _this = this;\n var _this$byGroup = this.byGroup(),\n nodes = _this$byGroup.nodes,\n edges = _this$byGroup.edges;\n edges.unmergeBy(function (edge) {\n return edge.isLoop();\n });\n var numNodes = nodes.length;\n var numEdges = edges.length;\n var numIter = Math.ceil(Math.pow(Math.log(numNodes) / Math.LN2, 2));\n var stopSize = Math.floor(numNodes / sqrt2);\n if (numNodes < 2) {\n error('At least 2 nodes are required for Karger-Stein algorithm');\n return undefined;\n }\n\n // Now store edge destination as indexes\n // Format for each edge (edge index, source node index, target node index)\n var edgeIndexes = [];\n for (var i = 0; i < numEdges; i++) {\n var e = edges[i];\n edgeIndexes.push([i, nodes.indexOf(e.source()), nodes.indexOf(e.target())]);\n }\n\n // We will store the best cut found here\n var minCutSize = Infinity;\n var minCutEdgeIndexes = [];\n var minCutNodeMap = new Array(numNodes);\n\n // Initial meta node partition\n var metaNodeMap = new Array(numNodes);\n var metaNodeMap2 = new Array(numNodes);\n var copyNodesMap = function copyNodesMap(from, to) {\n for (var _i3 = 0; _i3 < numNodes; _i3++) {\n to[_i3] = from[_i3];\n }\n };\n\n // Main loop\n for (var iter = 0; iter <= numIter; iter++) {\n // Reset meta node partition\n for (var _i4 = 0; _i4 < numNodes; _i4++) {\n metaNodeMap[_i4] = _i4;\n }\n\n // Contract until stop point (stopSize nodes)\n var edgesState = contractUntil(metaNodeMap, edgeIndexes.slice(), numNodes, stopSize);\n var edgesState2 = edgesState.slice(); // copy\n\n // Create a copy of the colapsed nodes state\n copyNodesMap(metaNodeMap, metaNodeMap2);\n\n // Run 2 iterations starting in the stop state\n var res1 = contractUntil(metaNodeMap, edgesState, stopSize, 2);\n var res2 = contractUntil(metaNodeMap2, edgesState2, stopSize, 2);\n\n // Is any of the 2 results the best cut so far?\n if (res1.length <= res2.length && res1.length < minCutSize) {\n minCutSize = res1.length;\n minCutEdgeIndexes = res1;\n copyNodesMap(metaNodeMap, minCutNodeMap);\n } else if (res2.length <= res1.length && res2.length < minCutSize) {\n minCutSize = res2.length;\n minCutEdgeIndexes = res2;\n copyNodesMap(metaNodeMap2, minCutNodeMap);\n }\n } // end of main loop\n\n // Construct result\n var cut = this.spawn(minCutEdgeIndexes.map(function (e) {\n return edges[e[0]];\n }));\n var partition1 = this.spawn();\n var partition2 = this.spawn();\n\n // traverse metaNodeMap for best cut\n var witnessNodePartition = minCutNodeMap[0];\n for (var _i5 = 0; _i5 < minCutNodeMap.length; _i5++) {\n var partitionId = minCutNodeMap[_i5];\n var node = nodes[_i5];\n if (partitionId === witnessNodePartition) {\n partition1.merge(node);\n } else {\n partition2.merge(node);\n }\n }\n\n // construct components corresponding to each disjoint subset of nodes\n var constructComponent = function constructComponent(subset) {\n var component = _this.spawn();\n subset.forEach(function (node) {\n component.merge(node);\n node.connectedEdges().forEach(function (edge) {\n // ensure edge is within calling collection and edge is not in cut\n if (_this.contains(edge) && !cut.contains(edge)) {\n component.merge(edge);\n }\n });\n });\n return component;\n };\n var components = [constructComponent(partition1), constructComponent(partition2)];\n var ret = {\n cut: cut,\n components: components,\n // n.b. partitions are included to be compatible with the old api spec\n // (could be removed in a future major version)\n partition1: partition1,\n partition2: partition2\n };\n return ret;\n }\n}; // elesfn\n\nvar _Math$hypot;\nvar copyPosition = function copyPosition(p) {\n return {\n x: p.x,\n y: p.y\n };\n};\nvar modelToRenderedPosition$1 = function modelToRenderedPosition(p, zoom, pan) {\n return {\n x: p.x * zoom + pan.x,\n y: p.y * zoom + pan.y\n };\n};\nvar renderedToModelPosition = function renderedToModelPosition(p, zoom, pan) {\n return {\n x: (p.x - pan.x) / zoom,\n y: (p.y - pan.y) / zoom\n };\n};\nvar array2point = function array2point(arr) {\n return {\n x: arr[0],\n y: arr[1]\n };\n};\nvar min = function min(arr) {\n var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length;\n var min = Infinity;\n for (var i = begin; i < end; i++) {\n var val = arr[i];\n if (isFinite(val)) {\n min = Math.min(val, min);\n }\n }\n return min;\n};\nvar max = function max(arr) {\n var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length;\n var max = -Infinity;\n for (var i = begin; i < end; i++) {\n var val = arr[i];\n if (isFinite(val)) {\n max = Math.max(val, max);\n }\n }\n return max;\n};\nvar mean = function mean(arr) {\n var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length;\n var total = 0;\n var n = 0;\n for (var i = begin; i < end; i++) {\n var val = arr[i];\n if (isFinite(val)) {\n total += val;\n n++;\n }\n }\n return total / n;\n};\nvar median = function median(arr) {\n var begin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : arr.length;\n var copy = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var sort = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var includeHoles = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n if (copy) {\n arr = arr.slice(begin, end);\n } else {\n if (end < arr.length) {\n arr.splice(end, arr.length - end);\n }\n if (begin > 0) {\n arr.splice(0, begin);\n }\n }\n\n // all non finite (e.g. Infinity, NaN) elements must be -Infinity so they go to the start\n var off = 0; // offset from non-finite values\n for (var i = arr.length - 1; i >= 0; i--) {\n var v = arr[i];\n if (includeHoles) {\n if (!isFinite(v)) {\n arr[i] = -Infinity;\n off++;\n }\n } else {\n // just remove it if we don't want to consider holes\n arr.splice(i, 1);\n }\n }\n if (sort) {\n arr.sort(function (a, b) {\n return a - b;\n }); // requires copy = true if you don't want to change the orig\n }\n var len = arr.length;\n var mid = Math.floor(len / 2);\n if (len % 2 !== 0) {\n return arr[mid + 1 + off];\n } else {\n return (arr[mid - 1 + off] + arr[mid + off]) / 2;\n }\n};\nvar deg2rad = function deg2rad(deg) {\n return Math.PI * deg / 180;\n};\nvar getAngleFromDisp = function getAngleFromDisp(dispX, dispY) {\n return Math.atan2(dispY, dispX) - Math.PI / 2;\n};\nvar log2 = Math.log2 || function (n) {\n return Math.log(n) / Math.log(2);\n};\nvar signum = function signum(x) {\n if (x > 0) {\n return 1;\n } else if (x < 0) {\n return -1;\n } else {\n return 0;\n }\n};\nvar dist = function dist(p1, p2) {\n return Math.sqrt(sqdist(p1, p2));\n};\nvar sqdist = function sqdist(p1, p2) {\n var dx = p2.x - p1.x;\n var dy = p2.y - p1.y;\n return dx * dx + dy * dy;\n};\nvar inPlaceSumNormalize = function inPlaceSumNormalize(v) {\n var length = v.length;\n\n // First, get sum of all elements\n var total = 0;\n for (var i = 0; i < length; i++) {\n total += v[i];\n }\n\n // Now, divide each by the sum of all elements\n for (var _i = 0; _i < length; _i++) {\n v[_i] = v[_i] / total;\n }\n return v;\n};\n\n// from http://en.wikipedia.org/wiki/B\u00E9zier_curve#Quadratic_curves\nvar qbezierAt = function qbezierAt(p0, p1, p2, t) {\n return (1 - t) * (1 - t) * p0 + 2 * (1 - t) * t * p1 + t * t * p2;\n};\nvar qbezierPtAt = function qbezierPtAt(p0, p1, p2, t) {\n return {\n x: qbezierAt(p0.x, p1.x, p2.x, t),\n y: qbezierAt(p0.y, p1.y, p2.y, t)\n };\n};\nvar lineAt = function lineAt(p0, p1, t, d) {\n var vec = {\n x: p1.x - p0.x,\n y: p1.y - p0.y\n };\n var vecDist = dist(p0, p1);\n var normVec = {\n x: vec.x / vecDist,\n y: vec.y / vecDist\n };\n t = t == null ? 0 : t;\n d = d != null ? d : t * vecDist;\n return {\n x: p0.x + normVec.x * d,\n y: p0.y + normVec.y * d\n };\n};\nvar bound = function bound(min, val, max) {\n return Math.max(min, Math.min(max, val));\n};\n\n// makes a full bb (x1, y1, x2, y2, w, h) from implicit params\nvar makeBoundingBox = function makeBoundingBox(bb) {\n if (bb == null) {\n return {\n x1: Infinity,\n y1: Infinity,\n x2: -Infinity,\n y2: -Infinity,\n w: 0,\n h: 0\n };\n } else if (bb.x1 != null && bb.y1 != null) {\n if (bb.x2 != null && bb.y2 != null && bb.x2 >= bb.x1 && bb.y2 >= bb.y1) {\n return {\n x1: bb.x1,\n y1: bb.y1,\n x2: bb.x2,\n y2: bb.y2,\n w: bb.x2 - bb.x1,\n h: bb.y2 - bb.y1\n };\n } else if (bb.w != null && bb.h != null && bb.w >= 0 && bb.h >= 0) {\n return {\n x1: bb.x1,\n y1: bb.y1,\n x2: bb.x1 + bb.w,\n y2: bb.y1 + bb.h,\n w: bb.w,\n h: bb.h\n };\n }\n }\n};\nvar copyBoundingBox = function copyBoundingBox(bb) {\n return {\n x1: bb.x1,\n x2: bb.x2,\n w: bb.w,\n y1: bb.y1,\n y2: bb.y2,\n h: bb.h\n };\n};\nvar clearBoundingBox = function clearBoundingBox(bb) {\n bb.x1 = Infinity;\n bb.y1 = Infinity;\n bb.x2 = -Infinity;\n bb.y2 = -Infinity;\n bb.w = 0;\n bb.h = 0;\n};\nvar updateBoundingBox = function updateBoundingBox(bb1, bb2) {\n // update bb1 with bb2 bounds\n\n bb1.x1 = Math.min(bb1.x1, bb2.x1);\n bb1.x2 = Math.max(bb1.x2, bb2.x2);\n bb1.w = bb1.x2 - bb1.x1;\n bb1.y1 = Math.min(bb1.y1, bb2.y1);\n bb1.y2 = Math.max(bb1.y2, bb2.y2);\n bb1.h = bb1.y2 - bb1.y1;\n};\nvar expandBoundingBoxByPoint = function expandBoundingBoxByPoint(bb, x, y) {\n bb.x1 = Math.min(bb.x1, x);\n bb.x2 = Math.max(bb.x2, x);\n bb.w = bb.x2 - bb.x1;\n bb.y1 = Math.min(bb.y1, y);\n bb.y2 = Math.max(bb.y2, y);\n bb.h = bb.y2 - bb.y1;\n};\nvar expandBoundingBox = function expandBoundingBox(bb) {\n var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n bb.x1 -= padding;\n bb.x2 += padding;\n bb.y1 -= padding;\n bb.y2 += padding;\n bb.w = bb.x2 - bb.x1;\n bb.h = bb.y2 - bb.y1;\n return bb;\n};\nvar expandBoundingBoxSides = function expandBoundingBoxSides(bb) {\n var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0];\n var top, right, bottom, left;\n if (padding.length === 1) {\n top = right = bottom = left = padding[0];\n } else if (padding.length === 2) {\n top = bottom = padding[0];\n left = right = padding[1];\n } else if (padding.length === 4) {\n var _padding = _slicedToArray(padding, 4);\n top = _padding[0];\n right = _padding[1];\n bottom = _padding[2];\n left = _padding[3];\n }\n bb.x1 -= left;\n bb.x2 += right;\n bb.y1 -= top;\n bb.y2 += bottom;\n bb.w = bb.x2 - bb.x1;\n bb.h = bb.y2 - bb.y1;\n return bb;\n};\n\n// assign the values of bb2 into bb1\nvar assignBoundingBox = function assignBoundingBox(bb1, bb2) {\n bb1.x1 = bb2.x1;\n bb1.y1 = bb2.y1;\n bb1.x2 = bb2.x2;\n bb1.y2 = bb2.y2;\n bb1.w = bb1.x2 - bb1.x1;\n bb1.h = bb1.y2 - bb1.y1;\n};\nvar boundingBoxesIntersect = function boundingBoxesIntersect(bb1, bb2) {\n // case: one bb to right of other\n if (bb1.x1 > bb2.x2) {\n return false;\n }\n if (bb2.x1 > bb1.x2) {\n return false;\n }\n\n // case: one bb to left of other\n if (bb1.x2 < bb2.x1) {\n return false;\n }\n if (bb2.x2 < bb1.x1) {\n return false;\n }\n\n // case: one bb above other\n if (bb1.y2 < bb2.y1) {\n return false;\n }\n if (bb2.y2 < bb1.y1) {\n return false;\n }\n\n // case: one bb below other\n if (bb1.y1 > bb2.y2) {\n return false;\n }\n if (bb2.y1 > bb1.y2) {\n return false;\n }\n\n // otherwise, must have some overlap\n return true;\n};\nvar inBoundingBox = function inBoundingBox(bb, x, y) {\n return bb.x1 <= x && x <= bb.x2 && bb.y1 <= y && y <= bb.y2;\n};\nvar pointInBoundingBox = function pointInBoundingBox(bb, pt) {\n return inBoundingBox(bb, pt.x, pt.y);\n};\nvar boundingBoxInBoundingBox = function boundingBoxInBoundingBox(bb1, bb2) {\n return inBoundingBox(bb1, bb2.x1, bb2.y1) && inBoundingBox(bb1, bb2.x2, bb2.y2);\n};\nvar hypot = (_Math$hypot = Math.hypot) !== null && _Math$hypot !== undefined ? _Math$hypot : function (x, y) {\n return Math.sqrt(x * x + y * y);\n};\nfunction inflatePolygon(polygon, d) {\n if (polygon.length < 3) {\n throw new Error('Need at least 3 vertices');\n }\n // Helpers\n var add = function add(a, b) {\n return {\n x: a.x + b.x,\n y: a.y + b.y\n };\n };\n var sub = function sub(a, b) {\n return {\n x: a.x - b.x,\n y: a.y - b.y\n };\n };\n var scale = function scale(v, s) {\n return {\n x: v.x * s,\n y: v.y * s\n };\n };\n var cross = function cross(u, v) {\n return u.x * v.y - u.y * v.x;\n };\n var normalize = function normalize(v) {\n var len = hypot(v.x, v.y);\n return len === 0 ? {\n x: 0,\n y: 0\n } : {\n x: v.x / len,\n y: v.y / len\n };\n };\n // Signed area (positive = CCW)\n var signedArea = function signedArea(pts) {\n var A = 0;\n for (var i = 0; i < pts.length; i++) {\n var p = pts[i],\n q = pts[(i + 1) % pts.length];\n A += p.x * q.y - q.x * p.y;\n }\n return A / 2;\n };\n // Line\u2013line intersection (infinite lines)\n var intersectLines = function intersectLines(p1, p2, p3, p4) {\n var r = sub(p2, p1);\n var s = sub(p4, p3);\n var denom = cross(r, s);\n if (Math.abs(denom) < 1e-9) {\n // Parallel or nearly so \u2014 fallback to midpoint\n return add(p1, scale(r, 0.5));\n }\n var t = cross(sub(p3, p1), s) / denom;\n return add(p1, scale(r, t));\n };\n\n // Make a shallow copy and enforce CCW\n var pts = polygon.map(function (p) {\n return {\n x: p.x,\n y: p.y\n };\n });\n if (signedArea(pts) < 0) pts.reverse();\n var n = pts.length;\n // Compute outward normals for each edge\n var normals = [];\n for (var i = 0; i < n; i++) {\n var p = pts[i],\n q = pts[(i + 1) % n];\n var edge = sub(q, p);\n // For CCW polygon, inward normal = (-edge.y, edge.x)\n // so outward normal = (edge.y, -edge.x)\n var out = normalize({\n x: edge.y,\n y: -edge.x\n });\n normals.push(out);\n }\n\n // Build offset edges\n var offsetEdges = normals.map(function (nrm, i) {\n var p1 = add(pts[i], scale(nrm, d));\n var p2 = add(pts[(i + 1) % n], scale(nrm, d));\n return {\n p1: p1,\n p2: p2\n };\n });\n\n // Intersect consecutive offset edges\n var inflated = [];\n for (var _i2 = 0; _i2 < n; _i2++) {\n var prevEdge = offsetEdges[(_i2 - 1 + n) % n];\n var currEdge = offsetEdges[_i2];\n var ip = intersectLines(prevEdge.p1, prevEdge.p2, currEdge.p1, currEdge.p2);\n inflated.push(ip);\n }\n return inflated;\n}\nfunction miterBox(pts, centerX, centerY, width, height, strokeWidth) {\n var tpts = transformPoints(pts, centerX, centerY, width, height);\n var offsetPoints = inflatePolygon(tpts, strokeWidth);\n var bb = makeBoundingBox();\n offsetPoints.forEach(function (pt) {\n return expandBoundingBoxByPoint(bb, pt.x, pt.y);\n });\n return bb;\n}\nvar roundRectangleIntersectLine = function roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding) {\n var radius = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 'auto';\n var cornerRadius = radius === 'auto' ? getRoundRectangleRadius(width, height) : radius;\n var halfWidth = width / 2;\n var halfHeight = height / 2;\n cornerRadius = Math.min(cornerRadius, halfWidth, halfHeight);\n var doWidth = cornerRadius !== halfWidth,\n doHeight = cornerRadius !== halfHeight;\n\n // Check intersections with straight line segments\n var straightLineIntersections;\n\n // Top segment, left to right\n if (doWidth) {\n var topStartX = nodeX - halfWidth + cornerRadius - padding;\n var topStartY = nodeY - halfHeight - padding;\n var topEndX = nodeX + halfWidth - cornerRadius + padding;\n var topEndY = topStartY;\n straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false);\n if (straightLineIntersections.length > 0) {\n return straightLineIntersections;\n }\n }\n\n // Right segment, top to bottom\n if (doHeight) {\n var rightStartX = nodeX + halfWidth + padding;\n var rightStartY = nodeY - halfHeight + cornerRadius - padding;\n var rightEndX = rightStartX;\n var rightEndY = nodeY + halfHeight - cornerRadius + padding;\n straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, rightStartX, rightStartY, rightEndX, rightEndY, false);\n if (straightLineIntersections.length > 0) {\n return straightLineIntersections;\n }\n }\n\n // Bottom segment, left to right\n if (doWidth) {\n var bottomStartX = nodeX - halfWidth + cornerRadius - padding;\n var bottomStartY = nodeY + halfHeight + padding;\n var bottomEndX = nodeX + halfWidth - cornerRadius + padding;\n var bottomEndY = bottomStartY;\n straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, bottomStartX, bottomStartY, bottomEndX, bottomEndY, false);\n if (straightLineIntersections.length > 0) {\n return straightLineIntersections;\n }\n }\n\n // Left segment, top to bottom\n if (doHeight) {\n var leftStartX = nodeX - halfWidth - padding;\n var leftStartY = nodeY - halfHeight + cornerRadius - padding;\n var leftEndX = leftStartX;\n var leftEndY = nodeY + halfHeight - cornerRadius + padding;\n straightLineIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, leftStartX, leftStartY, leftEndX, leftEndY, false);\n if (straightLineIntersections.length > 0) {\n return straightLineIntersections;\n }\n }\n\n // Check intersections with arc segments\n var arcIntersections;\n\n // Top Left\n {\n var topLeftCenterX = nodeX - halfWidth + cornerRadius;\n var topLeftCenterY = nodeY - halfHeight + cornerRadius;\n arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, topLeftCenterX, topLeftCenterY, cornerRadius + padding);\n\n // Ensure the intersection is on the desired quarter of the circle\n if (arcIntersections.length > 0 && arcIntersections[0] <= topLeftCenterX && arcIntersections[1] <= topLeftCenterY) {\n return [arcIntersections[0], arcIntersections[1]];\n }\n }\n\n // Top Right\n {\n var topRightCenterX = nodeX + halfWidth - cornerRadius;\n var topRightCenterY = nodeY - halfHeight + cornerRadius;\n arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, topRightCenterX, topRightCenterY, cornerRadius + padding);\n\n // Ensure the intersection is on the desired quarter of the circle\n if (arcIntersections.length > 0 && arcIntersections[0] >= topRightCenterX && arcIntersections[1] <= topRightCenterY) {\n return [arcIntersections[0], arcIntersections[1]];\n }\n }\n\n // Bottom Right\n {\n var bottomRightCenterX = nodeX + halfWidth - cornerRadius;\n var bottomRightCenterY = nodeY + halfHeight - cornerRadius;\n arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, bottomRightCenterX, bottomRightCenterY, cornerRadius + padding);\n\n // Ensure the intersection is on the desired quarter of the circle\n if (arcIntersections.length > 0 && arcIntersections[0] >= bottomRightCenterX && arcIntersections[1] >= bottomRightCenterY) {\n return [arcIntersections[0], arcIntersections[1]];\n }\n }\n\n // Bottom Left\n {\n var bottomLeftCenterX = nodeX - halfWidth + cornerRadius;\n var bottomLeftCenterY = nodeY + halfHeight - cornerRadius;\n arcIntersections = intersectLineCircle(x, y, nodeX, nodeY, bottomLeftCenterX, bottomLeftCenterY, cornerRadius + padding);\n\n // Ensure the intersection is on the desired quarter of the circle\n if (arcIntersections.length > 0 && arcIntersections[0] <= bottomLeftCenterX && arcIntersections[1] >= bottomLeftCenterY) {\n return [arcIntersections[0], arcIntersections[1]];\n }\n }\n return []; // if nothing\n};\nvar inLineVicinity = function inLineVicinity(x, y, lx1, ly1, lx2, ly2, tolerance) {\n var t = tolerance;\n var x1 = Math.min(lx1, lx2);\n var x2 = Math.max(lx1, lx2);\n var y1 = Math.min(ly1, ly2);\n var y2 = Math.max(ly1, ly2);\n return x1 - t <= x && x <= x2 + t && y1 - t <= y && y <= y2 + t;\n};\nvar inBezierVicinity = function inBezierVicinity(x, y, x1, y1, x2, y2, x3, y3, tolerance) {\n var bb = {\n x1: Math.min(x1, x3, x2) - tolerance,\n x2: Math.max(x1, x3, x2) + tolerance,\n y1: Math.min(y1, y3, y2) - tolerance,\n y2: Math.max(y1, y3, y2) + tolerance\n };\n\n // if outside the rough bounding box for the bezier, then it can't be a hit\n if (x < bb.x1 || x > bb.x2 || y < bb.y1 || y > bb.y2) {\n // console.log('bezier out of rough bb')\n return false;\n } else {\n // console.log('do more expensive check');\n return true;\n }\n};\nvar solveQuadratic = function solveQuadratic(a, b, c, val) {\n c -= val;\n var r = b * b - 4 * a * c;\n if (r < 0) {\n return [];\n }\n var sqrtR = Math.sqrt(r);\n var denom = 2 * a;\n var root1 = (-b + sqrtR) / denom;\n var root2 = (-b - sqrtR) / denom;\n return [root1, root2];\n};\nvar solveCubic = function solveCubic(a, b, c, d, result) {\n // Solves a cubic function, returns root in form [r1, i1, r2, i2, r3, i3], where\n // r is the real component, i is the imaginary component\n\n // An implementation of the Cardano method from the year 1545\n // http://en.wikipedia.org/wiki/Cubic_function#The_nature_of_the_roots\n\n var epsilon = 0.00001;\n\n // avoid division by zero while keeping the overall expression close in value\n if (a === 0) {\n a = epsilon;\n }\n b /= a;\n c /= a;\n d /= a;\n var discriminant, q, r, dum1, s, t, term1, r13;\n q = (3.0 * c - b * b) / 9.0;\n r = -(27.0 * d) + b * (9.0 * c - 2.0 * (b * b));\n r /= 54.0;\n discriminant = q * q * q + r * r;\n result[1] = 0;\n term1 = b / 3.0;\n if (discriminant > 0) {\n s = r + Math.sqrt(discriminant);\n s = s < 0 ? -Math.pow(-s, 1.0 / 3.0) : Math.pow(s, 1.0 / 3.0);\n t = r - Math.sqrt(discriminant);\n t = t < 0 ? -Math.pow(-t, 1.0 / 3.0) : Math.pow(t, 1.0 / 3.0);\n result[0] = -term1 + s + t;\n term1 += (s + t) / 2.0;\n result[4] = result[2] = -term1;\n term1 = Math.sqrt(3.0) * (-t + s) / 2;\n result[3] = term1;\n result[5] = -term1;\n return;\n }\n result[5] = result[3] = 0;\n if (discriminant === 0) {\n r13 = r < 0 ? -Math.pow(-r, 1.0 / 3.0) : Math.pow(r, 1.0 / 3.0);\n result[0] = -term1 + 2.0 * r13;\n result[4] = result[2] = -(r13 + term1);\n return;\n }\n q = -q;\n dum1 = q * q * q;\n dum1 = Math.acos(r / Math.sqrt(dum1));\n r13 = 2.0 * Math.sqrt(q);\n result[0] = -term1 + r13 * Math.cos(dum1 / 3.0);\n result[2] = -term1 + r13 * Math.cos((dum1 + 2.0 * Math.PI) / 3.0);\n result[4] = -term1 + r13 * Math.cos((dum1 + 4.0 * Math.PI) / 3.0);\n return;\n};\nvar sqdistToQuadraticBezier = function sqdistToQuadraticBezier(x, y, x1, y1, x2, y2, x3, y3) {\n // Find minimum distance by using the minimum of the distance\n // function between the given point and the curve\n\n // This gives the coefficients of the resulting cubic equation\n // whose roots tell us where a possible minimum is\n // (Coefficients are divided by 4)\n\n var a = 1.0 * x1 * x1 - 4 * x1 * x2 + 2 * x1 * x3 + 4 * x2 * x2 - 4 * x2 * x3 + x3 * x3 + y1 * y1 - 4 * y1 * y2 + 2 * y1 * y3 + 4 * y2 * y2 - 4 * y2 * y3 + y3 * y3;\n var b = 1.0 * 9 * x1 * x2 - 3 * x1 * x1 - 3 * x1 * x3 - 6 * x2 * x2 + 3 * x2 * x3 + 9 * y1 * y2 - 3 * y1 * y1 - 3 * y1 * y3 - 6 * y2 * y2 + 3 * y2 * y3;\n var c = 1.0 * 3 * x1 * x1 - 6 * x1 * x2 + x1 * x3 - x1 * x + 2 * x2 * x2 + 2 * x2 * x - x3 * x + 3 * y1 * y1 - 6 * y1 * y2 + y1 * y3 - y1 * y + 2 * y2 * y2 + 2 * y2 * y - y3 * y;\n var d = 1.0 * x1 * x2 - x1 * x1 + x1 * x - x2 * x + y1 * y2 - y1 * y1 + y1 * y - y2 * y;\n\n // debug(\"coefficients: \" + a / a + \", \" + b / a + \", \" + c / a + \", \" + d / a);\n\n var roots = [];\n\n // Use the cubic solving algorithm\n solveCubic(a, b, c, d, roots);\n var zeroThreshold = 0.0000001;\n var params = [];\n for (var index = 0; index < 6; index += 2) {\n if (Math.abs(roots[index + 1]) < zeroThreshold && roots[index] >= 0 && roots[index] <= 1.0) {\n params.push(roots[index]);\n }\n }\n params.push(1.0);\n params.push(0.0);\n var minDistanceSquared = -1;\n var curX, curY, distSquared;\n for (var i = 0; i < params.length; i++) {\n curX = Math.pow(1.0 - params[i], 2.0) * x1 + 2.0 * (1 - params[i]) * params[i] * x2 + params[i] * params[i] * x3;\n curY = Math.pow(1 - params[i], 2.0) * y1 + 2 * (1.0 - params[i]) * params[i] * y2 + params[i] * params[i] * y3;\n distSquared = Math.pow(curX - x, 2) + Math.pow(curY - y, 2);\n // debug('distance for param ' + params[i] + \": \" + Math.sqrt(distSquared));\n if (minDistanceSquared >= 0) {\n if (distSquared < minDistanceSquared) {\n minDistanceSquared = distSquared;\n }\n } else {\n minDistanceSquared = distSquared;\n }\n }\n return minDistanceSquared;\n};\nvar sqdistToFiniteLine = function sqdistToFiniteLine(x, y, x1, y1, x2, y2) {\n var offset = [x - x1, y - y1];\n var line = [x2 - x1, y2 - y1];\n var lineSq = line[0] * line[0] + line[1] * line[1];\n var hypSq = offset[0] * offset[0] + offset[1] * offset[1];\n var dotProduct = offset[0] * line[0] + offset[1] * line[1];\n var adjSq = dotProduct * dotProduct / lineSq;\n if (dotProduct < 0) {\n return hypSq;\n }\n if (adjSq > lineSq) {\n return (x - x2) * (x - x2) + (y - y2) * (y - y2);\n }\n return hypSq - adjSq;\n};\nvar pointInsidePolygonPoints = function pointInsidePolygonPoints(x, y, points) {\n var x1, y1, x2, y2;\n var y3;\n\n // Intersect with vertical line through (x, y)\n var up = 0;\n // let down = 0;\n for (var i = 0; i < points.length / 2; i++) {\n x1 = points[i * 2];\n y1 = points[i * 2 + 1];\n if (i + 1 < points.length / 2) {\n x2 = points[(i + 1) * 2];\n y2 = points[(i + 1) * 2 + 1];\n } else {\n x2 = points[(i + 1 - points.length / 2) * 2];\n y2 = points[(i + 1 - points.length / 2) * 2 + 1];\n }\n if (x1 == x && x2 == x) ; else if (x1 >= x && x >= x2 || x1 <= x && x <= x2) {\n y3 = (x - x1) / (x2 - x1) * (y2 - y1) + y1;\n if (y3 > y) {\n up++;\n }\n\n // if( y3 < y ){\n // down++;\n // }\n } else {\n continue;\n }\n }\n if (up % 2 === 0) {\n return false;\n } else {\n return true;\n }\n};\nvar pointInsidePolygon = function pointInsidePolygon(x, y, basePoints, centerX, centerY, width, height, direction, padding) {\n var transformedPoints = new Array(basePoints.length);\n\n // Gives negative angle\n var angle;\n if (direction[0] != null) {\n angle = Math.atan(direction[1] / direction[0]);\n if (direction[0] < 0) {\n angle = angle + Math.PI / 2;\n } else {\n angle = -angle - Math.PI / 2;\n }\n } else {\n angle = direction;\n }\n var cos = Math.cos(-angle);\n var sin = Math.sin(-angle);\n\n // console.log(\"base: \" + basePoints);\n for (var i = 0; i < transformedPoints.length / 2; i++) {\n transformedPoints[i * 2] = width / 2 * (basePoints[i * 2] * cos - basePoints[i * 2 + 1] * sin);\n transformedPoints[i * 2 + 1] = height / 2 * (basePoints[i * 2 + 1] * cos + basePoints[i * 2] * sin);\n transformedPoints[i * 2] += centerX;\n transformedPoints[i * 2 + 1] += centerY;\n }\n var points;\n if (padding > 0) {\n var expandedLineSet = expandPolygon(transformedPoints, -padding);\n points = joinLines(expandedLineSet);\n } else {\n points = transformedPoints;\n }\n return pointInsidePolygonPoints(x, y, points);\n};\nvar pointInsideRoundPolygon = function pointInsideRoundPolygon(x, y, basePoints, centerX, centerY, width, height, corners) {\n var cutPolygonPoints = new Array(basePoints.length * 2);\n for (var i = 0; i < corners.length; i++) {\n var corner = corners[i];\n cutPolygonPoints[i * 4 + 0] = corner.startX;\n cutPolygonPoints[i * 4 + 1] = corner.startY;\n cutPolygonPoints[i * 4 + 2] = corner.stopX;\n cutPolygonPoints[i * 4 + 3] = corner.stopY;\n var squaredDistance = Math.pow(corner.cx - x, 2) + Math.pow(corner.cy - y, 2);\n if (squaredDistance <= Math.pow(corner.radius, 2)) {\n return true;\n }\n }\n return pointInsidePolygonPoints(x, y, cutPolygonPoints);\n};\nvar joinLines = function joinLines(lineSet) {\n var vertices = new Array(lineSet.length / 2);\n var currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY;\n var nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY;\n for (var i = 0; i < lineSet.length / 4; i++) {\n currentLineStartX = lineSet[i * 4];\n currentLineStartY = lineSet[i * 4 + 1];\n currentLineEndX = lineSet[i * 4 + 2];\n currentLineEndY = lineSet[i * 4 + 3];\n if (i < lineSet.length / 4 - 1) {\n nextLineStartX = lineSet[(i + 1) * 4];\n nextLineStartY = lineSet[(i + 1) * 4 + 1];\n nextLineEndX = lineSet[(i + 1) * 4 + 2];\n nextLineEndY = lineSet[(i + 1) * 4 + 3];\n } else {\n nextLineStartX = lineSet[0];\n nextLineStartY = lineSet[1];\n nextLineEndX = lineSet[2];\n nextLineEndY = lineSet[3];\n }\n var intersection = finiteLinesIntersect(currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY, nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY, true);\n vertices[i * 2] = intersection[0];\n vertices[i * 2 + 1] = intersection[1];\n }\n return vertices;\n};\nvar expandPolygon = function expandPolygon(points, pad) {\n var expandedLineSet = new Array(points.length * 2);\n var currentPointX, currentPointY, nextPointX, nextPointY;\n for (var i = 0; i < points.length / 2; i++) {\n currentPointX = points[i * 2];\n currentPointY = points[i * 2 + 1];\n if (i < points.length / 2 - 1) {\n nextPointX = points[(i + 1) * 2];\n nextPointY = points[(i + 1) * 2 + 1];\n } else {\n nextPointX = points[0];\n nextPointY = points[1];\n }\n\n // Current line: [currentPointX, currentPointY] to [nextPointX, nextPointY]\n\n // Assume CCW polygon winding\n\n var offsetX = nextPointY - currentPointY;\n var offsetY = -(nextPointX - currentPointX);\n\n // Normalize\n var offsetLength = Math.sqrt(offsetX * offsetX + offsetY * offsetY);\n var normalizedOffsetX = offsetX / offsetLength;\n var normalizedOffsetY = offsetY / offsetLength;\n expandedLineSet[i * 4] = currentPointX + normalizedOffsetX * pad;\n expandedLineSet[i * 4 + 1] = currentPointY + normalizedOffsetY * pad;\n expandedLineSet[i * 4 + 2] = nextPointX + normalizedOffsetX * pad;\n expandedLineSet[i * 4 + 3] = nextPointY + normalizedOffsetY * pad;\n }\n return expandedLineSet;\n};\nvar intersectLineEllipse = function intersectLineEllipse(x, y, centerX, centerY, ellipseWradius, ellipseHradius) {\n var dispX = centerX - x;\n var dispY = centerY - y;\n dispX /= ellipseWradius;\n dispY /= ellipseHradius;\n var len = Math.sqrt(dispX * dispX + dispY * dispY);\n var newLength = len - 1;\n if (newLength < 0) {\n return [];\n }\n var lenProportion = newLength / len;\n return [(centerX - x) * lenProportion + x, (centerY - y) * lenProportion + y];\n};\nvar checkInEllipse = function checkInEllipse(x, y, width, height, centerX, centerY, padding) {\n x -= centerX;\n y -= centerY;\n x /= width / 2 + padding;\n y /= height / 2 + padding;\n return x * x + y * y <= 1;\n};\n\n// Returns intersections of increasing distance from line's start point\nvar intersectLineCircle = function intersectLineCircle(x1, y1, x2, y2, centerX, centerY, radius) {\n // Calculate d, direction vector of line\n var d = [x2 - x1, y2 - y1]; // Direction vector of line\n var f = [x1 - centerX, y1 - centerY];\n var a = d[0] * d[0] + d[1] * d[1];\n var b = 2 * (f[0] * d[0] + f[1] * d[1]);\n var c = f[0] * f[0] + f[1] * f[1] - radius * radius;\n var discriminant = b * b - 4 * a * c;\n if (discriminant < 0) {\n return [];\n }\n var t1 = (-b + Math.sqrt(discriminant)) / (2 * a);\n var t2 = (-b - Math.sqrt(discriminant)) / (2 * a);\n var tMin = Math.min(t1, t2);\n var tMax = Math.max(t1, t2);\n var inRangeParams = [];\n if (tMin >= 0 && tMin <= 1) {\n inRangeParams.push(tMin);\n }\n if (tMax >= 0 && tMax <= 1) {\n inRangeParams.push(tMax);\n }\n if (inRangeParams.length === 0) {\n return [];\n }\n var nearIntersectionX = inRangeParams[0] * d[0] + x1;\n var nearIntersectionY = inRangeParams[0] * d[1] + y1;\n if (inRangeParams.length > 1) {\n if (inRangeParams[0] == inRangeParams[1]) {\n return [nearIntersectionX, nearIntersectionY];\n } else {\n var farIntersectionX = inRangeParams[1] * d[0] + x1;\n var farIntersectionY = inRangeParams[1] * d[1] + y1;\n return [nearIntersectionX, nearIntersectionY, farIntersectionX, farIntersectionY];\n }\n } else {\n return [nearIntersectionX, nearIntersectionY];\n }\n};\nvar midOfThree = function midOfThree(a, b, c) {\n if (b <= a && a <= c || c <= a && a <= b) {\n return a;\n } else if (a <= b && b <= c || c <= b && b <= a) {\n return b;\n } else {\n return c;\n }\n};\n\n// (x1,y1)=>(x2,y2) intersect with (x3,y3)=>(x4,y4)\nvar finiteLinesIntersect = function finiteLinesIntersect(x1, y1, x2, y2, x3, y3, x4, y4, infiniteLines) {\n var dx13 = x1 - x3;\n var dx21 = x2 - x1;\n var dx43 = x4 - x3;\n var dy13 = y1 - y3;\n var dy21 = y2 - y1;\n var dy43 = y4 - y3;\n var ua_t = dx43 * dy13 - dy43 * dx13;\n var ub_t = dx21 * dy13 - dy21 * dx13;\n var u_b = dy43 * dx21 - dx43 * dy21;\n if (u_b !== 0) {\n var ua = ua_t / u_b;\n var ub = ub_t / u_b;\n var flptThreshold = 0.001;\n var _min = 0 - flptThreshold;\n var _max = 1 + flptThreshold;\n if (_min <= ua && ua <= _max && _min <= ub && ub <= _max) {\n return [x1 + ua * dx21, y1 + ua * dy21];\n } else {\n if (!infiniteLines) {\n return [];\n } else {\n return [x1 + ua * dx21, y1 + ua * dy21];\n }\n }\n } else {\n if (ua_t === 0 || ub_t === 0) {\n // Parallel, coincident lines. Check if overlap\n\n // Check endpoint of second line\n if (midOfThree(x1, x2, x4) === x4) {\n return [x4, y4];\n }\n\n // Check start point of second line\n if (midOfThree(x1, x2, x3) === x3) {\n return [x3, y3];\n }\n\n // Endpoint of first line\n if (midOfThree(x3, x4, x2) === x2) {\n return [x2, y2];\n }\n return [];\n } else {\n // Parallel, non-coincident\n return [];\n }\n }\n};\nvar transformPoints = function transformPoints(points, centerX, centerY, width, height) {\n var ret = [];\n var halfW = width / 2;\n var halfH = height / 2;\n var x = centerX;\n var y = centerY;\n ret.push({\n x: x + halfW * points[0],\n y: y + halfH * points[1]\n });\n for (var i = 1; i < points.length / 2; i++) {\n ret.push({\n x: x + halfW * points[i * 2],\n y: y + halfH * points[i * 2 + 1]\n });\n }\n return ret;\n};\n\n// math.polygonIntersectLine( x, y, basePoints, centerX, centerY, width, height, padding )\n// intersect a node polygon (pts transformed)\n//\n// math.polygonIntersectLine( x, y, basePoints, centerX, centerY )\n// intersect the points (no transform)\nvar polygonIntersectLine = function polygonIntersectLine(x, y, basePoints, centerX, centerY, width, height, padding) {\n var intersections = [];\n var intersection;\n var transformedPoints = new Array(basePoints.length);\n var doTransform = true;\n if (width == null) {\n doTransform = false;\n }\n var points;\n if (doTransform) {\n for (var i = 0; i < transformedPoints.length / 2; i++) {\n transformedPoints[i * 2] = basePoints[i * 2] * width + centerX;\n transformedPoints[i * 2 + 1] = basePoints[i * 2 + 1] * height + centerY;\n }\n if (padding > 0) {\n var expandedLineSet = expandPolygon(transformedPoints, -padding);\n points = joinLines(expandedLineSet);\n } else {\n points = transformedPoints;\n }\n } else {\n points = basePoints;\n }\n var currentX, currentY, nextX, nextY;\n for (var _i3 = 0; _i3 < points.length / 2; _i3++) {\n currentX = points[_i3 * 2];\n currentY = points[_i3 * 2 + 1];\n if (_i3 < points.length / 2 - 1) {\n nextX = points[(_i3 + 1) * 2];\n nextY = points[(_i3 + 1) * 2 + 1];\n } else {\n nextX = points[0];\n nextY = points[1];\n }\n intersection = finiteLinesIntersect(x, y, centerX, centerY, currentX, currentY, nextX, nextY);\n if (intersection.length !== 0) {\n intersections.push(intersection[0], intersection[1]);\n }\n }\n return intersections;\n};\nvar roundPolygonIntersectLine = function roundPolygonIntersectLine(x, y, basePoints, centerX, centerY, width, height, padding, corners) {\n var intersections = [];\n var intersection;\n var lines = new Array(basePoints.length * 2);\n corners.forEach(function (corner, i) {\n if (i === 0) {\n lines[lines.length - 2] = corner.startX;\n lines[lines.length - 1] = corner.startY;\n } else {\n lines[i * 4 - 2] = corner.startX;\n lines[i * 4 - 1] = corner.startY;\n }\n lines[i * 4] = corner.stopX;\n lines[i * 4 + 1] = corner.stopY;\n intersection = intersectLineCircle(x, y, centerX, centerY, corner.cx, corner.cy, corner.radius);\n if (intersection.length !== 0) {\n intersections.push(intersection[0], intersection[1]);\n }\n });\n for (var i = 0; i < lines.length / 4; i++) {\n intersection = finiteLinesIntersect(x, y, centerX, centerY, lines[i * 4], lines[i * 4 + 1], lines[i * 4 + 2], lines[i * 4 + 3], false);\n if (intersection.length !== 0) {\n intersections.push(intersection[0], intersection[1]);\n }\n }\n if (intersections.length > 2) {\n var lowestIntersection = [intersections[0], intersections[1]];\n var lowestSquaredDistance = Math.pow(lowestIntersection[0] - x, 2) + Math.pow(lowestIntersection[1] - y, 2);\n for (var _i4 = 1; _i4 < intersections.length / 2; _i4++) {\n var squaredDistance = Math.pow(intersections[_i4 * 2] - x, 2) + Math.pow(intersections[_i4 * 2 + 1] - y, 2);\n if (squaredDistance <= lowestSquaredDistance) {\n lowestIntersection[0] = intersections[_i4 * 2];\n lowestIntersection[1] = intersections[_i4 * 2 + 1];\n lowestSquaredDistance = squaredDistance;\n }\n }\n return lowestIntersection;\n }\n return intersections;\n};\nvar shortenIntersection = function shortenIntersection(intersection, offset, amount) {\n var disp = [intersection[0] - offset[0], intersection[1] - offset[1]];\n var length = Math.sqrt(disp[0] * disp[0] + disp[1] * disp[1]);\n var lenRatio = (length - amount) / length;\n if (lenRatio < 0) {\n lenRatio = 0.00001;\n }\n return [offset[0] + lenRatio * disp[0], offset[1] + lenRatio * disp[1]];\n};\nvar generateUnitNgonPointsFitToSquare = function generateUnitNgonPointsFitToSquare(sides, rotationRadians) {\n var points = generateUnitNgonPoints(sides, rotationRadians);\n points = fitPolygonToSquare(points);\n return points;\n};\nvar fitPolygonToSquare = function fitPolygonToSquare(points) {\n var x, y;\n var sides = points.length / 2;\n var minX = Infinity,\n minY = Infinity,\n maxX = -Infinity,\n maxY = -Infinity;\n for (var i = 0; i < sides; i++) {\n x = points[2 * i];\n y = points[2 * i + 1];\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, x);\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, y);\n }\n\n // stretch factors\n var sx = 2 / (maxX - minX);\n var sy = 2 / (maxY - minY);\n for (var _i5 = 0; _i5 < sides; _i5++) {\n x = points[2 * _i5] = points[2 * _i5] * sx;\n y = points[2 * _i5 + 1] = points[2 * _i5 + 1] * sy;\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, x);\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, y);\n }\n if (minY < -1) {\n for (var _i6 = 0; _i6 < sides; _i6++) {\n y = points[2 * _i6 + 1] = points[2 * _i6 + 1] + (-1 - minY);\n }\n }\n return points;\n};\nvar generateUnitNgonPoints = function generateUnitNgonPoints(sides, rotationRadians) {\n var increment = 1.0 / sides * 2 * Math.PI;\n var startAngle = sides % 2 === 0 ? Math.PI / 2.0 + increment / 2.0 : Math.PI / 2.0;\n startAngle += rotationRadians;\n var points = new Array(sides * 2);\n var currentAngle;\n for (var i = 0; i < sides; i++) {\n currentAngle = i * increment + startAngle;\n points[2 * i] = Math.cos(currentAngle); // x\n points[2 * i + 1] = Math.sin(-currentAngle); // y\n }\n return points;\n};\n\n// Set the default radius, unless half of width or height is smaller than default\nvar getRoundRectangleRadius = function getRoundRectangleRadius(width, height) {\n return Math.min(width / 4, height / 4, 8);\n};\n\n// Set the default radius\nvar getRoundPolygonRadius = function getRoundPolygonRadius(width, height) {\n return Math.min(width / 10, height / 10, 8);\n};\nvar getCutRectangleCornerLength = function getCutRectangleCornerLength() {\n return 8;\n};\nvar bezierPtsToQuadCoeff = function bezierPtsToQuadCoeff(p0, p1, p2) {\n return [p0 - 2 * p1 + p2, 2 * (p1 - p0), p0];\n};\n\n// get curve width, height, and control point position offsets as a percentage of node height / width\nvar getBarrelCurveConstants = function getBarrelCurveConstants(width, height) {\n return {\n heightOffset: Math.min(15, 0.05 * height),\n widthOffset: Math.min(100, 0.25 * width),\n ctrlPtOffsetPct: 0.05\n };\n};\n\n// Separating Axis Theorem (SAT) to determine if two polygons intersect. \n// The function takes two polygons as input and returns a boolean value indicating \n// whether the two polygons intersect.\nfunction satPolygonIntersection(poly1, poly2) {\n function getAxes(polygon) {\n var axes = [];\n for (var i = 0; i < polygon.length; i++) {\n var p1 = polygon[i];\n var p2 = polygon[(i + 1) % polygon.length];\n var edge = {\n x: p2.x - p1.x,\n y: p2.y - p1.y\n };\n var normal = {\n x: -edge.y,\n y: edge.x\n };\n var length = Math.sqrt(normal.x * normal.x + normal.y * normal.y);\n axes.push({\n x: normal.x / length,\n y: normal.y / length\n });\n }\n return axes;\n }\n function project(polygon, axis) {\n var min = Infinity;\n var max = -Infinity;\n var _iterator = _createForOfIteratorHelper(polygon),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var point = _step.value;\n var projection = point.x * axis.x + point.y * axis.y;\n min = Math.min(min, projection);\n max = Math.max(max, projection);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n return {\n min: min,\n max: max\n };\n }\n function overlaps(proj1, proj2) {\n return !(proj1.max < proj2.min || proj2.max < proj1.min);\n }\n var axes = [].concat(_toConsumableArray(getAxes(poly1)), _toConsumableArray(getAxes(poly2)));\n var _iterator2 = _createForOfIteratorHelper(axes),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var axis = _step2.value;\n var proj1 = project(poly1, axis);\n var proj2 = project(poly2, axis);\n if (!overlaps(proj1, proj2)) {\n return false; // No overlap, so the polygons do not intersect\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n return true; // polygons intersect\n}\n\nvar pageRankDefaults = defaults$g({\n dampingFactor: 0.8,\n precision: 0.000001,\n iterations: 200,\n weight: function weight(edge) {\n return 1;\n }\n});\nvar elesfn$o = {\n pageRank: function pageRank(options) {\n var _pageRankDefaults = pageRankDefaults(options),\n dampingFactor = _pageRankDefaults.dampingFactor,\n precision = _pageRankDefaults.precision,\n iterations = _pageRankDefaults.iterations,\n weight = _pageRankDefaults.weight;\n var cy = this._private.cy;\n var _this$byGroup = this.byGroup(),\n nodes = _this$byGroup.nodes,\n edges = _this$byGroup.edges;\n var numNodes = nodes.length;\n var numNodesSqd = numNodes * numNodes;\n var numEdges = edges.length;\n\n // Construct transposed adjacency matrix\n // First lets have a zeroed matrix of the right size\n // We'll also keep track of the sum of each column\n var matrix = new Array(numNodesSqd);\n var columnSum = new Array(numNodes);\n var additionalProb = (1 - dampingFactor) / numNodes;\n\n // Create null matrix\n for (var i = 0; i < numNodes; i++) {\n for (var j = 0; j < numNodes; j++) {\n var n = i * numNodes + j;\n matrix[n] = 0;\n }\n columnSum[i] = 0;\n }\n\n // Now, process edges\n for (var _i = 0; _i < numEdges; _i++) {\n var edge = edges[_i];\n var srcId = edge.data('source');\n var tgtId = edge.data('target');\n\n // Don't include loops in the matrix\n if (srcId === tgtId) {\n continue;\n }\n var s = nodes.indexOfId(srcId);\n var t = nodes.indexOfId(tgtId);\n var w = weight(edge);\n var _n = t * numNodes + s;\n\n // Update matrix\n matrix[_n] += w;\n\n // Update column sum\n columnSum[s] += w;\n }\n\n // Add additional probability based on damping factor\n // Also, take into account columns that have sum = 0\n var p = 1.0 / numNodes + additionalProb; // Shorthand\n\n // Traverse matrix, column by column\n for (var _j = 0; _j < numNodes; _j++) {\n if (columnSum[_j] === 0) {\n // No 'links' out from node jth, assume equal probability for each possible node\n for (var _i2 = 0; _i2 < numNodes; _i2++) {\n var _n2 = _i2 * numNodes + _j;\n matrix[_n2] = p;\n }\n } else {\n // Node jth has outgoing link, compute normalized probabilities\n for (var _i3 = 0; _i3 < numNodes; _i3++) {\n var _n3 = _i3 * numNodes + _j;\n matrix[_n3] = matrix[_n3] / columnSum[_j] + additionalProb;\n }\n }\n }\n\n // Compute dominant eigenvector using power method\n var eigenvector = new Array(numNodes);\n var temp = new Array(numNodes);\n var previous;\n\n // Start with a vector of all 1's\n // Also, initialize a null vector which will be used as shorthand\n for (var _i4 = 0; _i4 < numNodes; _i4++) {\n eigenvector[_i4] = 1;\n }\n for (var iter = 0; iter < iterations; iter++) {\n // Temp array with all 0's\n for (var _i5 = 0; _i5 < numNodes; _i5++) {\n temp[_i5] = 0;\n }\n\n // Multiply matrix with previous result\n for (var _i6 = 0; _i6 < numNodes; _i6++) {\n for (var _j2 = 0; _j2 < numNodes; _j2++) {\n var _n4 = _i6 * numNodes + _j2;\n temp[_i6] += matrix[_n4] * eigenvector[_j2];\n }\n }\n inPlaceSumNormalize(temp);\n previous = eigenvector;\n eigenvector = temp;\n temp = previous;\n var diff = 0;\n // Compute difference (squared module) of both vectors\n for (var _i7 = 0; _i7 < numNodes; _i7++) {\n var delta = previous[_i7] - eigenvector[_i7];\n diff += delta * delta;\n }\n\n // If difference is less than the desired threshold, stop iterating\n if (diff < precision) {\n break;\n }\n }\n\n // Construct result\n var res = {\n rank: function rank(node) {\n node = cy.collection(node)[0];\n return eigenvector[nodes.indexOf(node)];\n }\n };\n return res;\n } // pageRank\n}; // elesfn\n\nvar defaults$f = defaults$g({\n root: null,\n weight: function weight(edge) {\n return 1;\n },\n directed: false,\n alpha: 0\n});\nvar elesfn$n = {\n degreeCentralityNormalized: function degreeCentralityNormalized(options) {\n options = defaults$f(options);\n var cy = this.cy();\n var nodes = this.nodes();\n var numNodes = nodes.length;\n if (!options.directed) {\n var degrees = {};\n var maxDegree = 0;\n for (var i = 0; i < numNodes; i++) {\n var node = nodes[i];\n\n // add current node to the current options object and call degreeCentrality\n options.root = node;\n var currDegree = this.degreeCentrality(options);\n if (maxDegree < currDegree.degree) {\n maxDegree = currDegree.degree;\n }\n degrees[node.id()] = currDegree.degree;\n }\n return {\n degree: function degree(node) {\n if (maxDegree === 0) {\n return 0;\n }\n if (string(node)) {\n // from is a selector string\n node = cy.filter(node);\n }\n return degrees[node.id()] / maxDegree;\n }\n };\n } else {\n var indegrees = {};\n var outdegrees = {};\n var maxIndegree = 0;\n var maxOutdegree = 0;\n for (var _i = 0; _i < numNodes; _i++) {\n var _node = nodes[_i];\n var id = _node.id();\n\n // add current node to the current options object and call degreeCentrality\n options.root = _node;\n var _currDegree = this.degreeCentrality(options);\n if (maxIndegree < _currDegree.indegree) maxIndegree = _currDegree.indegree;\n if (maxOutdegree < _currDegree.outdegree) maxOutdegree = _currDegree.outdegree;\n indegrees[id] = _currDegree.indegree;\n outdegrees[id] = _currDegree.outdegree;\n }\n return {\n indegree: function indegree(node) {\n if (maxIndegree == 0) {\n return 0;\n }\n if (string(node)) {\n // from is a selector string\n node = cy.filter(node);\n }\n return indegrees[node.id()] / maxIndegree;\n },\n outdegree: function outdegree(node) {\n if (maxOutdegree === 0) {\n return 0;\n }\n if (string(node)) {\n // from is a selector string\n node = cy.filter(node);\n }\n return outdegrees[node.id()] / maxOutdegree;\n }\n };\n }\n },\n // degreeCentralityNormalized\n\n // Implemented from the algorithm in Opsahl's paper\n // \"Node centrality in weighted networks: Generalizing degree and shortest paths\"\n // check the heading 2 \"Degree\"\n degreeCentrality: function degreeCentrality(options) {\n options = defaults$f(options);\n var cy = this.cy();\n var callingEles = this;\n var _options = options,\n root = _options.root,\n weight = _options.weight,\n directed = _options.directed,\n alpha = _options.alpha;\n root = cy.collection(root)[0];\n if (!directed) {\n var connEdges = root.connectedEdges().intersection(callingEles);\n var k = connEdges.length;\n var s = 0;\n\n // Now, sum edge weights\n for (var i = 0; i < connEdges.length; i++) {\n s += weight(connEdges[i]);\n }\n return {\n degree: Math.pow(k, 1 - alpha) * Math.pow(s, alpha)\n };\n } else {\n var edges = root.connectedEdges();\n var incoming = edges.filter(function (edge) {\n return edge.target().same(root) && callingEles.has(edge);\n });\n var outgoing = edges.filter(function (edge) {\n return edge.source().same(root) && callingEles.has(edge);\n });\n var k_in = incoming.length;\n var k_out = outgoing.length;\n var s_in = 0;\n var s_out = 0;\n\n // Now, sum incoming edge weights\n for (var _i2 = 0; _i2 < incoming.length; _i2++) {\n s_in += weight(incoming[_i2]);\n }\n\n // Now, sum outgoing edge weights\n for (var _i3 = 0; _i3 < outgoing.length; _i3++) {\n s_out += weight(outgoing[_i3]);\n }\n return {\n indegree: Math.pow(k_in, 1 - alpha) * Math.pow(s_in, alpha),\n outdegree: Math.pow(k_out, 1 - alpha) * Math.pow(s_out, alpha)\n };\n }\n } // degreeCentrality\n}; // elesfn\n\n// nice, short mathematical alias\nelesfn$n.dc = elesfn$n.degreeCentrality;\nelesfn$n.dcn = elesfn$n.degreeCentralityNormalised = elesfn$n.degreeCentralityNormalized;\n\nvar defaults$e = defaults$g({\n harmonic: true,\n weight: function weight() {\n return 1;\n },\n directed: false,\n root: null\n});\nvar elesfn$m = {\n closenessCentralityNormalized: function closenessCentralityNormalized(options) {\n var _defaults = defaults$e(options),\n harmonic = _defaults.harmonic,\n weight = _defaults.weight,\n directed = _defaults.directed;\n var cy = this.cy();\n var closenesses = {};\n var maxCloseness = 0;\n var nodes = this.nodes();\n var fw = this.floydWarshall({\n weight: weight,\n directed: directed\n });\n\n // Compute closeness for every node and find the maximum closeness\n for (var i = 0; i < nodes.length; i++) {\n var currCloseness = 0;\n var node_i = nodes[i];\n for (var j = 0; j < nodes.length; j++) {\n if (i !== j) {\n var d = fw.distance(node_i, nodes[j]);\n if (harmonic) {\n currCloseness += 1 / d;\n } else {\n currCloseness += d;\n }\n }\n }\n if (!harmonic) {\n currCloseness = 1 / currCloseness;\n }\n if (maxCloseness < currCloseness) {\n maxCloseness = currCloseness;\n }\n closenesses[node_i.id()] = currCloseness;\n }\n return {\n closeness: function closeness(node) {\n if (maxCloseness == 0) {\n return 0;\n }\n if (string(node)) {\n // from is a selector string\n node = cy.filter(node)[0].id();\n } else {\n // from is a node\n node = node.id();\n }\n return closenesses[node] / maxCloseness;\n }\n };\n },\n // Implemented from pseudocode from wikipedia\n closenessCentrality: function closenessCentrality(options) {\n var _defaults2 = defaults$e(options),\n root = _defaults2.root,\n weight = _defaults2.weight,\n directed = _defaults2.directed,\n harmonic = _defaults2.harmonic;\n root = this.filter(root)[0];\n\n // we need distance from this node to every other node\n var dijkstra = this.dijkstra({\n root: root,\n weight: weight,\n directed: directed\n });\n var totalDistance = 0;\n var nodes = this.nodes();\n for (var i = 0; i < nodes.length; i++) {\n var n = nodes[i];\n if (!n.same(root)) {\n var d = dijkstra.distanceTo(n);\n if (harmonic) {\n totalDistance += 1 / d;\n } else {\n totalDistance += d;\n }\n }\n }\n return harmonic ? totalDistance : 1 / totalDistance;\n } // closenessCentrality\n}; // elesfn\n\n// nice, short mathematical alias\nelesfn$m.cc = elesfn$m.closenessCentrality;\nelesfn$m.ccn = elesfn$m.closenessCentralityNormalised = elesfn$m.closenessCentralityNormalized;\n\nvar defaults$d = defaults$g({\n weight: null,\n directed: false\n});\nvar elesfn$l = {\n // Implemented from the algorithm in the paper \"On Variants of Shortest-Path Betweenness Centrality and their Generic Computation\" by Ulrik Brandes\n betweennessCentrality: function betweennessCentrality(options) {\n var _defaults = defaults$d(options),\n directed = _defaults.directed,\n weight = _defaults.weight;\n var weighted = weight != null;\n var cy = this.cy();\n\n // starting\n var V = this.nodes();\n var A = {};\n var _C = {};\n var max = 0;\n var C = {\n set: function set(key, val) {\n _C[key] = val;\n if (val > max) {\n max = val;\n }\n },\n get: function get(key) {\n return _C[key];\n }\n };\n\n // A contains the neighborhoods of every node\n for (var i = 0; i < V.length; i++) {\n var v = V[i];\n var vid = v.id();\n if (directed) {\n A[vid] = v.outgoers().nodes(); // get outgoers of every node\n } else {\n A[vid] = v.openNeighborhood().nodes(); // get neighbors of every node\n }\n C.set(vid, 0);\n }\n var _loop = function _loop() {\n var sid = V[s].id();\n var S = []; // stack\n var P = {};\n var g = {};\n var d = {};\n var Q = new Heap(function (a, b) {\n return d[a] - d[b];\n }); // queue\n\n // init dictionaries\n for (var _i = 0; _i < V.length; _i++) {\n var _vid = V[_i].id();\n P[_vid] = [];\n g[_vid] = 0;\n d[_vid] = Infinity;\n }\n g[sid] = 1; // sigma\n d[sid] = 0; // distance to s\n\n Q.push(sid);\n while (!Q.empty()) {\n var _v = Q.pop();\n S.push(_v);\n if (weighted) {\n for (var j = 0; j < A[_v].length; j++) {\n var w = A[_v][j];\n var vEle = cy.getElementById(_v);\n var edge = undefined;\n if (vEle.edgesTo(w).length > 0) {\n edge = vEle.edgesTo(w)[0];\n } else {\n edge = w.edgesTo(vEle)[0];\n }\n var edgeWeight = weight(edge);\n w = w.id();\n if (d[w] > d[_v] + edgeWeight) {\n d[w] = d[_v] + edgeWeight;\n if (Q.nodes.indexOf(w) < 0) {\n //if w is not in Q\n Q.push(w);\n } else {\n // update position if w is in Q\n Q.updateItem(w);\n }\n g[w] = 0;\n P[w] = [];\n }\n if (d[w] == d[_v] + edgeWeight) {\n g[w] = g[w] + g[_v];\n P[w].push(_v);\n }\n }\n } else {\n for (var _j = 0; _j < A[_v].length; _j++) {\n var _w = A[_v][_j].id();\n if (d[_w] == Infinity) {\n Q.push(_w);\n d[_w] = d[_v] + 1;\n }\n if (d[_w] == d[_v] + 1) {\n g[_w] = g[_w] + g[_v];\n P[_w].push(_v);\n }\n }\n }\n }\n var e = {};\n for (var _i2 = 0; _i2 < V.length; _i2++) {\n e[V[_i2].id()] = 0;\n }\n while (S.length > 0) {\n var _w2 = S.pop();\n for (var _j2 = 0; _j2 < P[_w2].length; _j2++) {\n var _v2 = P[_w2][_j2];\n e[_v2] = e[_v2] + g[_v2] / g[_w2] * (1 + e[_w2]);\n }\n if (_w2 != V[s].id()) {\n C.set(_w2, C.get(_w2) + e[_w2]);\n }\n }\n };\n for (var s = 0; s < V.length; s++) {\n _loop();\n }\n var ret = {\n betweenness: function betweenness(node) {\n var id = cy.collection(node).id();\n return C.get(id);\n },\n betweennessNormalized: function betweennessNormalized(node) {\n if (max == 0) {\n return 0;\n }\n var id = cy.collection(node).id();\n return C.get(id) / max;\n }\n };\n\n // alias\n ret.betweennessNormalised = ret.betweennessNormalized;\n return ret;\n } // betweennessCentrality\n}; // elesfn\n\n// nice, short mathematical alias\nelesfn$l.bc = elesfn$l.betweennessCentrality;\n\n// Implemented by Zoe Xi @zoexi for GSOC 2016\n// https://github.com/cytoscape/cytoscape.js-markov-cluster\n\n\n/* eslint-disable no-unused-vars */\nvar defaults$c = defaults$g({\n expandFactor: 2,\n // affects time of computation and cluster granularity to some extent: M * M\n inflateFactor: 2,\n // affects cluster granularity (the greater the value, the more clusters): M(i,j) / E(j)\n multFactor: 1,\n // optional self loops for each node. Use a neutral value to improve cluster computations.\n maxIterations: 20,\n // maximum number of iterations of the MCL algorithm in a single run\n attributes: [\n // attributes/features used to group nodes, ie. similarity values between nodes\n function (edge) {\n return 1;\n }]\n});\n/* eslint-enable */\n\nvar setOptions$3 = function setOptions(options) {\n return defaults$c(options);\n};\n/* eslint-enable */\n\nvar getSimilarity$1 = function getSimilarity(edge, attributes) {\n var total = 0;\n for (var i = 0; i < attributes.length; i++) {\n total += attributes[i](edge);\n }\n return total;\n};\nvar addLoops = function addLoops(M, n, val) {\n for (var i = 0; i < n; i++) {\n M[i * n + i] = val;\n }\n};\nvar normalize = function normalize(M, n) {\n var sum;\n for (var col = 0; col < n; col++) {\n sum = 0;\n for (var row = 0; row < n; row++) {\n sum += M[row * n + col];\n }\n for (var _row = 0; _row < n; _row++) {\n M[_row * n + col] = M[_row * n + col] / sum;\n }\n }\n};\n\n// TODO: blocked matrix multiplication?\nvar mmult = function mmult(A, B, n) {\n var C = new Array(n * n);\n for (var i = 0; i < n; i++) {\n for (var j = 0; j < n; j++) {\n C[i * n + j] = 0;\n }\n for (var k = 0; k < n; k++) {\n for (var _j = 0; _j < n; _j++) {\n C[i * n + _j] += A[i * n + k] * B[k * n + _j];\n }\n }\n }\n return C;\n};\nvar expand = function expand(M, n, expandFactor /** power **/) {\n var _M = M.slice(0);\n for (var p = 1; p < expandFactor; p++) {\n M = mmult(M, _M, n);\n }\n return M;\n};\nvar inflate = function inflate(M, n, inflateFactor /** r **/) {\n var _M = new Array(n * n);\n\n // M(i,j) ^ inflatePower\n for (var i = 0; i < n * n; i++) {\n _M[i] = Math.pow(M[i], inflateFactor);\n }\n normalize(_M, n);\n return _M;\n};\nvar hasConverged = function hasConverged(M, _M, n2, roundFactor) {\n // Check that both matrices have the same elements (i,j)\n for (var i = 0; i < n2; i++) {\n var v1 = Math.round(M[i] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor); // truncate to 'roundFactor' decimal places\n var v2 = Math.round(_M[i] * Math.pow(10, roundFactor)) / Math.pow(10, roundFactor);\n if (v1 !== v2) {\n return false;\n }\n }\n return true;\n};\nvar assign$2 = function assign(M, n, nodes, cy) {\n var clusters = [];\n for (var i = 0; i < n; i++) {\n var cluster = [];\n for (var j = 0; j < n; j++) {\n // Row-wise attractors and elements that they attract belong in same cluster\n if (Math.round(M[i * n + j] * 1000) / 1000 > 0) {\n cluster.push(nodes[j]);\n }\n }\n if (cluster.length !== 0) {\n clusters.push(cy.collection(cluster));\n }\n }\n return clusters;\n};\nvar isDuplicate = function isDuplicate(c1, c2) {\n for (var i = 0; i < c1.length; i++) {\n if (!c2[i] || c1[i].id() !== c2[i].id()) {\n return false;\n }\n }\n return true;\n};\nvar removeDuplicates = function removeDuplicates(clusters) {\n for (var i = 0; i < clusters.length; i++) {\n for (var j = 0; j < clusters.length; j++) {\n if (i != j && isDuplicate(clusters[i], clusters[j])) {\n clusters.splice(j, 1);\n }\n }\n }\n return clusters;\n};\nvar markovClustering = function markovClustering(options) {\n var nodes = this.nodes();\n var edges = this.edges();\n var cy = this.cy();\n\n // Set parameters of algorithm:\n var opts = setOptions$3(options);\n\n // Map each node to its position in node array\n var id2position = {};\n for (var i = 0; i < nodes.length; i++) {\n id2position[nodes[i].id()] = i;\n }\n\n // Generate stochastic matrix M from input graph G (should be symmetric/undirected)\n var n = nodes.length,\n n2 = n * n;\n var M = new Array(n2),\n _M;\n for (var _i = 0; _i < n2; _i++) {\n M[_i] = 0;\n }\n for (var e = 0; e < edges.length; e++) {\n var edge = edges[e];\n var _i2 = id2position[edge.source().id()];\n var j = id2position[edge.target().id()];\n var sim = getSimilarity$1(edge, opts.attributes);\n M[_i2 * n + j] += sim; // G should be symmetric and undirected\n M[j * n + _i2] += sim;\n }\n\n // Begin Markov cluster algorithm\n\n // Step 1: Add self loops to each node, ie. add multFactor to matrix diagonal\n addLoops(M, n, opts.multFactor);\n\n // Step 2: M = normalize( M );\n normalize(M, n);\n var isStillMoving = true;\n var iterations = 0;\n while (isStillMoving && iterations < opts.maxIterations) {\n isStillMoving = false;\n\n // Step 3:\n _M = expand(M, n, opts.expandFactor);\n\n // Step 4:\n M = inflate(_M, n, opts.inflateFactor);\n\n // Step 5: check to see if ~steady state has been reached\n if (!hasConverged(M, _M, n2, 4)) {\n isStillMoving = true;\n }\n iterations++;\n }\n\n // Build clusters from matrix\n var clusters = assign$2(M, n, nodes, cy);\n\n // Remove duplicate clusters due to symmetry of graph and M matrix\n clusters = removeDuplicates(clusters);\n return clusters;\n};\nvar markovClustering$1 = {\n markovClustering: markovClustering,\n mcl: markovClustering\n};\n\n// Common distance metrics for clustering algorithms\n// https://en.wikipedia.org/wiki/Hierarchical_clustering#Metric\n\nvar identity$1 = function identity(x) {\n return x;\n};\nvar absDiff = function absDiff(p, q) {\n return Math.abs(q - p);\n};\nvar addAbsDiff = function addAbsDiff(total, p, q) {\n return total + absDiff(p, q);\n};\nvar addSquaredDiff = function addSquaredDiff(total, p, q) {\n return total + Math.pow(q - p, 2);\n};\nvar sqrt = function sqrt(x) {\n return Math.sqrt(x);\n};\nvar maxAbsDiff = function maxAbsDiff(currentMax, p, q) {\n return Math.max(currentMax, absDiff(p, q));\n};\nvar getDistance = function getDistance(length, getP, getQ, init, visit) {\n var post = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : identity$1;\n var ret = init;\n var p, q;\n for (var dim = 0; dim < length; dim++) {\n p = getP(dim);\n q = getQ(dim);\n ret = visit(ret, p, q);\n }\n return post(ret);\n};\nvar distances = {\n euclidean: function euclidean(length, getP, getQ) {\n if (length >= 2) {\n return getDistance(length, getP, getQ, 0, addSquaredDiff, sqrt);\n } else {\n // for single attr case, more efficient to avoid sqrt\n return getDistance(length, getP, getQ, 0, addAbsDiff);\n }\n },\n squaredEuclidean: function squaredEuclidean(length, getP, getQ) {\n return getDistance(length, getP, getQ, 0, addSquaredDiff);\n },\n manhattan: function manhattan(length, getP, getQ) {\n return getDistance(length, getP, getQ, 0, addAbsDiff);\n },\n max: function max(length, getP, getQ) {\n return getDistance(length, getP, getQ, -Infinity, maxAbsDiff);\n }\n};\n\n// in case the user accidentally doesn't use camel case\ndistances['squared-euclidean'] = distances['squaredEuclidean'];\ndistances['squaredeuclidean'] = distances['squaredEuclidean'];\nfunction clusteringDistance (method, length, getP, getQ, nodeP, nodeQ) {\n var impl;\n if (fn$6(method)) {\n impl = method;\n } else {\n impl = distances[method] || distances.euclidean;\n }\n if (length === 0 && fn$6(method)) {\n return impl(nodeP, nodeQ);\n } else {\n return impl(length, getP, getQ, nodeP, nodeQ);\n }\n}\n\nvar defaults$b = defaults$g({\n k: 2,\n m: 2,\n sensitivityThreshold: 0.0001,\n distance: 'euclidean',\n maxIterations: 10,\n attributes: [],\n testMode: false,\n testCentroids: null\n});\nvar setOptions$2 = function setOptions(options) {\n return defaults$b(options);\n};\n\nvar getDist = function getDist(type, node, centroid, attributes, mode) {\n var noNodeP = mode !== 'kMedoids';\n var getP = noNodeP ? function (i) {\n return centroid[i];\n } : function (i) {\n return attributes[i](centroid);\n };\n var getQ = function getQ(i) {\n return attributes[i](node);\n };\n var nodeP = centroid;\n var nodeQ = node;\n return clusteringDistance(type, attributes.length, getP, getQ, nodeP, nodeQ);\n};\nvar randomCentroids = function randomCentroids(nodes, k, attributes) {\n var ndim = attributes.length;\n var min = new Array(ndim);\n var max = new Array(ndim);\n var centroids = new Array(k);\n var centroid = null;\n\n // Find min, max values for each attribute dimension\n for (var i = 0; i < ndim; i++) {\n min[i] = nodes.min(attributes[i]).value;\n max[i] = nodes.max(attributes[i]).value;\n }\n\n // Build k centroids, each represented as an n-dim feature vector\n for (var c = 0; c < k; c++) {\n centroid = [];\n for (var _i = 0; _i < ndim; _i++) {\n centroid[_i] = Math.random() * (max[_i] - min[_i]) + min[_i]; // random initial value\n }\n centroids[c] = centroid;\n }\n return centroids;\n};\nvar classify = function classify(node, centroids, distance, attributes, type) {\n var min = Infinity;\n var index = 0;\n for (var i = 0; i < centroids.length; i++) {\n var dist = getDist(distance, node, centroids[i], attributes, type);\n if (dist < min) {\n min = dist;\n index = i;\n }\n }\n return index;\n};\nvar buildCluster = function buildCluster(centroid, nodes, assignment) {\n var cluster = [];\n var node = null;\n for (var n = 0; n < nodes.length; n++) {\n node = nodes[n];\n if (assignment[node.id()] === centroid) {\n //console.log(\"Node \" + node.id() + \" is associated with medoid #: \" + m);\n cluster.push(node);\n }\n }\n return cluster;\n};\nvar haveValuesConverged = function haveValuesConverged(v1, v2, sensitivityThreshold) {\n return Math.abs(v2 - v1) <= sensitivityThreshold;\n};\nvar haveMatricesConverged = function haveMatricesConverged(v1, v2, sensitivityThreshold) {\n for (var i = 0; i < v1.length; i++) {\n for (var j = 0; j < v1[i].length; j++) {\n var diff = Math.abs(v1[i][j] - v2[i][j]);\n if (diff > sensitivityThreshold) {\n return false;\n }\n }\n }\n return true;\n};\nvar seenBefore = function seenBefore(node, medoids, n) {\n for (var i = 0; i < n; i++) {\n if (node === medoids[i]) return true;\n }\n return false;\n};\nvar randomMedoids = function randomMedoids(nodes, k) {\n var medoids = new Array(k);\n\n // For small data sets, the probability of medoid conflict is greater,\n // so we need to check to see if we've already seen or chose this node before.\n if (nodes.length < 50) {\n // Randomly select k medoids from the n nodes\n for (var i = 0; i < k; i++) {\n var node = nodes[Math.floor(Math.random() * nodes.length)];\n\n // If we've already chosen this node to be a medoid, don't choose it again (for small data sets).\n // Instead choose a different random node.\n while (seenBefore(node, medoids, i)) {\n node = nodes[Math.floor(Math.random() * nodes.length)];\n }\n medoids[i] = node;\n }\n } else {\n // Relatively large data set, so pretty safe to not check and just select random nodes\n for (var _i2 = 0; _i2 < k; _i2++) {\n medoids[_i2] = nodes[Math.floor(Math.random() * nodes.length)];\n }\n }\n return medoids;\n};\nvar findCost = function findCost(potentialNewMedoid, cluster, attributes) {\n var cost = 0;\n for (var n = 0; n < cluster.length; n++) {\n cost += getDist('manhattan', cluster[n], potentialNewMedoid, attributes, 'kMedoids');\n }\n return cost;\n};\nvar kMeans = function kMeans(options) {\n var cy = this.cy();\n var nodes = this.nodes();\n var node = null;\n\n // Set parameters of algorithm: # of clusters, distance metric, etc.\n var opts = setOptions$2(options);\n\n // Begin k-means algorithm\n var clusters = new Array(opts.k);\n var assignment = {};\n var centroids;\n\n // Step 1: Initialize centroid positions\n if (opts.testMode) {\n if (typeof opts.testCentroids === 'number') {\n // TODO: implement a seeded random number generator.\n opts.testCentroids;\n centroids = randomCentroids(nodes, opts.k, opts.attributes);\n } else if (_typeof(opts.testCentroids) === 'object') {\n centroids = opts.testCentroids;\n } else {\n centroids = randomCentroids(nodes, opts.k, opts.attributes);\n }\n } else {\n centroids = randomCentroids(nodes, opts.k, opts.attributes);\n }\n var isStillMoving = true;\n var iterations = 0;\n while (isStillMoving && iterations < opts.maxIterations) {\n // Step 2: Assign nodes to the nearest centroid\n for (var n = 0; n < nodes.length; n++) {\n node = nodes[n];\n // Determine which cluster this node belongs to: node id => cluster #\n assignment[node.id()] = classify(node, centroids, opts.distance, opts.attributes, 'kMeans');\n }\n\n // Step 3: For each of the k clusters, update its centroid\n isStillMoving = false;\n for (var c = 0; c < opts.k; c++) {\n // Get all nodes that belong to this cluster\n var cluster = buildCluster(c, nodes, assignment);\n if (cluster.length === 0) {\n // If cluster is empty, break out early & move to next cluster\n continue;\n }\n\n // Update centroids by calculating avg of all nodes within the cluster.\n var ndim = opts.attributes.length;\n var centroid = centroids[c]; // [ dim_1, dim_2, dim_3, ... , dim_n ]\n var newCentroid = new Array(ndim);\n var sum = new Array(ndim);\n for (var d = 0; d < ndim; d++) {\n sum[d] = 0.0;\n for (var i = 0; i < cluster.length; i++) {\n node = cluster[i];\n sum[d] += opts.attributes[d](node);\n }\n newCentroid[d] = sum[d] / cluster.length;\n\n // Check to see if algorithm has converged, i.e. when centroids no longer change\n if (!haveValuesConverged(newCentroid[d], centroid[d], opts.sensitivityThreshold)) {\n isStillMoving = true;\n }\n }\n centroids[c] = newCentroid;\n clusters[c] = cy.collection(cluster);\n }\n iterations++;\n }\n return clusters;\n};\nvar kMedoids = function kMedoids(options) {\n var cy = this.cy();\n var nodes = this.nodes();\n var node = null;\n var opts = setOptions$2(options);\n\n // Begin k-medoids algorithm\n var clusters = new Array(opts.k);\n var medoids;\n var assignment = {};\n var curCost;\n var minCosts = new Array(opts.k); // minimum cost configuration for each cluster\n\n // Step 1: Initialize k medoids\n if (opts.testMode) {\n if (typeof opts.testCentroids === 'number') ; else if (_typeof(opts.testCentroids) === 'object') {\n medoids = opts.testCentroids;\n } else {\n medoids = randomMedoids(nodes, opts.k);\n }\n } else {\n medoids = randomMedoids(nodes, opts.k);\n }\n var isStillMoving = true;\n var iterations = 0;\n while (isStillMoving && iterations < opts.maxIterations) {\n // Step 2: Assign nodes to the nearest medoid\n for (var n = 0; n < nodes.length; n++) {\n node = nodes[n];\n // Determine which cluster this node belongs to: node id => cluster #\n assignment[node.id()] = classify(node, medoids, opts.distance, opts.attributes, 'kMedoids');\n }\n isStillMoving = false;\n // Step 3: For each medoid m, and for each node associated with mediod m,\n // select the node with the lowest configuration cost as new medoid.\n for (var m = 0; m < medoids.length; m++) {\n // Get all nodes that belong to this medoid\n var cluster = buildCluster(m, nodes, assignment);\n if (cluster.length === 0) {\n // If cluster is empty, break out early & move to next cluster\n continue;\n }\n minCosts[m] = findCost(medoids[m], cluster, opts.attributes); // original cost\n\n // Select different medoid if its configuration has the lowest cost\n for (var _n = 0; _n < cluster.length; _n++) {\n curCost = findCost(cluster[_n], cluster, opts.attributes);\n if (curCost < minCosts[m]) {\n minCosts[m] = curCost;\n medoids[m] = cluster[_n];\n isStillMoving = true;\n }\n }\n clusters[m] = cy.collection(cluster);\n }\n iterations++;\n }\n return clusters;\n};\nvar updateCentroids = function updateCentroids(centroids, nodes, U, weight, opts) {\n var numerator, denominator;\n for (var n = 0; n < nodes.length; n++) {\n for (var c = 0; c < centroids.length; c++) {\n weight[n][c] = Math.pow(U[n][c], opts.m);\n }\n }\n for (var _c = 0; _c < centroids.length; _c++) {\n for (var dim = 0; dim < opts.attributes.length; dim++) {\n numerator = 0;\n denominator = 0;\n for (var _n2 = 0; _n2 < nodes.length; _n2++) {\n numerator += weight[_n2][_c] * opts.attributes[dim](nodes[_n2]);\n denominator += weight[_n2][_c];\n }\n centroids[_c][dim] = numerator / denominator;\n }\n }\n};\nvar updateMembership = function updateMembership(U, _U, centroids, nodes, opts) {\n // Save previous step\n for (var i = 0; i < U.length; i++) {\n _U[i] = U[i].slice();\n }\n var sum, numerator, denominator;\n var pow = 2 / (opts.m - 1);\n for (var c = 0; c < centroids.length; c++) {\n for (var n = 0; n < nodes.length; n++) {\n sum = 0;\n for (var k = 0; k < centroids.length; k++) {\n // against all other centroids\n numerator = getDist(opts.distance, nodes[n], centroids[c], opts.attributes, 'cmeans');\n denominator = getDist(opts.distance, nodes[n], centroids[k], opts.attributes, 'cmeans');\n sum += Math.pow(numerator / denominator, pow);\n }\n U[n][c] = 1 / sum;\n }\n }\n};\nvar assign$1 = function assign(nodes, U, opts, cy) {\n var clusters = new Array(opts.k);\n for (var c = 0; c < clusters.length; c++) {\n clusters[c] = [];\n }\n var max;\n var index;\n for (var n = 0; n < U.length; n++) {\n // for each node (U is N x C matrix)\n max = -Infinity;\n index = -1;\n // Determine which cluster the node is most likely to belong in\n for (var _c2 = 0; _c2 < U[0].length; _c2++) {\n if (U[n][_c2] > max) {\n max = U[n][_c2];\n index = _c2;\n }\n }\n clusters[index].push(nodes[n]);\n }\n\n // Turn every array into a collection of nodes\n for (var _c3 = 0; _c3 < clusters.length; _c3++) {\n clusters[_c3] = cy.collection(clusters[_c3]);\n }\n return clusters;\n};\nvar fuzzyCMeans = function fuzzyCMeans(options) {\n var cy = this.cy();\n var nodes = this.nodes();\n var opts = setOptions$2(options);\n\n // Begin fuzzy c-means algorithm\n var clusters;\n var centroids;\n var U;\n var _U;\n var weight;\n\n // Step 1: Initialize letiables.\n _U = new Array(nodes.length);\n for (var i = 0; i < nodes.length; i++) {\n // N x C matrix\n _U[i] = new Array(opts.k);\n }\n U = new Array(nodes.length);\n for (var _i3 = 0; _i3 < nodes.length; _i3++) {\n // N x C matrix\n U[_i3] = new Array(opts.k);\n }\n for (var _i4 = 0; _i4 < nodes.length; _i4++) {\n var total = 0;\n for (var j = 0; j < opts.k; j++) {\n U[_i4][j] = Math.random();\n total += U[_i4][j];\n }\n for (var _j = 0; _j < opts.k; _j++) {\n U[_i4][_j] = U[_i4][_j] / total;\n }\n }\n centroids = new Array(opts.k);\n for (var _i5 = 0; _i5 < opts.k; _i5++) {\n centroids[_i5] = new Array(opts.attributes.length);\n }\n weight = new Array(nodes.length);\n for (var _i6 = 0; _i6 < nodes.length; _i6++) {\n // N x C matrix\n weight[_i6] = new Array(opts.k);\n }\n // end init FCM\n\n var isStillMoving = true;\n var iterations = 0;\n while (isStillMoving && iterations < opts.maxIterations) {\n isStillMoving = false;\n\n // Step 2: Calculate the centroids for each step.\n updateCentroids(centroids, nodes, U, weight, opts);\n\n // Step 3: Update the partition matrix U.\n updateMembership(U, _U, centroids, nodes, opts);\n\n // Step 4: Check for convergence.\n if (!haveMatricesConverged(U, _U, opts.sensitivityThreshold)) {\n isStillMoving = true;\n }\n iterations++;\n }\n\n // Assign nodes to clusters with highest probability.\n clusters = assign$1(nodes, U, opts, cy);\n return {\n clusters: clusters,\n degreeOfMembership: U\n };\n};\nvar kClustering = {\n kMeans: kMeans,\n kMedoids: kMedoids,\n fuzzyCMeans: fuzzyCMeans,\n fcm: fuzzyCMeans\n};\n\n// Implemented by Zoe Xi @zoexi for GSOC 2016\n// https://github.com/cytoscape/cytoscape.js-hierarchical\n\nvar defaults$a = defaults$g({\n distance: 'euclidean',\n // distance metric to compare nodes\n linkage: 'min',\n // linkage criterion : how to determine the distance between clusters of nodes\n mode: 'threshold',\n // mode:'threshold' => clusters must be threshold distance apart\n threshold: Infinity,\n // the distance threshold\n // mode:'dendrogram' => the nodes are organised as leaves in a tree (siblings are close), merging makes clusters\n addDendrogram: false,\n // whether to add the dendrogram to the graph for viz\n dendrogramDepth: 0,\n // depth at which dendrogram branches are merged into the returned clusters\n attributes: [] // array of attr functions\n});\nvar linkageAliases = {\n 'single': 'min',\n 'complete': 'max'\n};\nvar setOptions$1 = function setOptions(options) {\n var opts = defaults$a(options);\n var preferredAlias = linkageAliases[opts.linkage];\n if (preferredAlias != null) {\n opts.linkage = preferredAlias;\n }\n return opts;\n};\nvar mergeClosest = function mergeClosest(clusters, index, dists, mins, opts) {\n // Find two closest clusters from cached mins\n var minKey = 0;\n var min = Infinity;\n var dist;\n var attrs = opts.attributes;\n var getDist = function getDist(n1, n2) {\n return clusteringDistance(opts.distance, attrs.length, function (i) {\n return attrs[i](n1);\n }, function (i) {\n return attrs[i](n2);\n }, n1, n2);\n };\n for (var i = 0; i < clusters.length; i++) {\n var key = clusters[i].key;\n var _dist = dists[key][mins[key]];\n if (_dist < min) {\n minKey = key;\n min = _dist;\n }\n }\n if (opts.mode === 'threshold' && min >= opts.threshold || opts.mode === 'dendrogram' && clusters.length === 1) {\n return false;\n }\n var c1 = index[minKey];\n var c2 = index[mins[minKey]];\n var merged;\n\n // Merge two closest clusters\n if (opts.mode === 'dendrogram') {\n merged = {\n left: c1,\n right: c2,\n key: c1.key\n };\n } else {\n merged = {\n value: c1.value.concat(c2.value),\n key: c1.key\n };\n }\n clusters[c1.index] = merged;\n clusters.splice(c2.index, 1);\n index[c1.key] = merged;\n\n // Update distances with new merged cluster\n for (var _i = 0; _i < clusters.length; _i++) {\n var cur = clusters[_i];\n if (c1.key === cur.key) {\n dist = Infinity;\n } else if (opts.linkage === 'min') {\n dist = dists[c1.key][cur.key];\n if (dists[c1.key][cur.key] > dists[c2.key][cur.key]) {\n dist = dists[c2.key][cur.key];\n }\n } else if (opts.linkage === 'max') {\n dist = dists[c1.key][cur.key];\n if (dists[c1.key][cur.key] < dists[c2.key][cur.key]) {\n dist = dists[c2.key][cur.key];\n }\n } else if (opts.linkage === 'mean') {\n dist = (dists[c1.key][cur.key] * c1.size + dists[c2.key][cur.key] * c2.size) / (c1.size + c2.size);\n } else {\n if (opts.mode === 'dendrogram') dist = getDist(cur.value, c1.value);else dist = getDist(cur.value[0], c1.value[0]);\n }\n dists[c1.key][cur.key] = dists[cur.key][c1.key] = dist; // distance matrix is symmetric\n }\n\n // Update cached mins\n for (var _i2 = 0; _i2 < clusters.length; _i2++) {\n var key1 = clusters[_i2].key;\n if (mins[key1] === c1.key || mins[key1] === c2.key) {\n var _min = key1;\n for (var j = 0; j < clusters.length; j++) {\n var key2 = clusters[j].key;\n if (dists[key1][key2] < dists[key1][_min]) {\n _min = key2;\n }\n }\n mins[key1] = _min;\n }\n clusters[_i2].index = _i2;\n }\n\n // Clean up meta data used for clustering\n c1.key = c2.key = c1.index = c2.index = null;\n return true;\n};\nvar _getAllChildren = function getAllChildren(root, arr, cy) {\n if (!root) return;\n if (root.value) {\n arr.push(root.value);\n } else {\n if (root.left) _getAllChildren(root.left, arr);\n if (root.right) _getAllChildren(root.right, arr);\n }\n};\nvar _buildDendrogram = function buildDendrogram(root, cy) {\n if (!root) return '';\n if (root.left && root.right) {\n var leftStr = _buildDendrogram(root.left, cy);\n var rightStr = _buildDendrogram(root.right, cy);\n var node = cy.add({\n group: 'nodes',\n data: {\n id: leftStr + ',' + rightStr\n }\n });\n cy.add({\n group: 'edges',\n data: {\n source: leftStr,\n target: node.id()\n }\n });\n cy.add({\n group: 'edges',\n data: {\n source: rightStr,\n target: node.id()\n }\n });\n return node.id();\n } else if (root.value) {\n return root.value.id();\n }\n};\nvar _buildClustersFromTree = function buildClustersFromTree(root, k, cy) {\n if (!root) return [];\n var left = [],\n right = [],\n leaves = [];\n if (k === 0) {\n // don't cut tree, simply return all nodes as 1 single cluster\n if (root.left) _getAllChildren(root.left, left);\n if (root.right) _getAllChildren(root.right, right);\n leaves = left.concat(right);\n return [cy.collection(leaves)];\n } else if (k === 1) {\n // cut at root\n\n if (root.value) {\n // leaf node\n return [cy.collection(root.value)];\n } else {\n if (root.left) _getAllChildren(root.left, left);\n if (root.right) _getAllChildren(root.right, right);\n return [cy.collection(left), cy.collection(right)];\n }\n } else {\n if (root.value) {\n return [cy.collection(root.value)];\n } else {\n if (root.left) left = _buildClustersFromTree(root.left, k - 1, cy);\n if (root.right) right = _buildClustersFromTree(root.right, k - 1, cy);\n return left.concat(right);\n }\n }\n};\n\nvar hierarchicalClustering = function hierarchicalClustering(options) {\n var cy = this.cy();\n var nodes = this.nodes();\n\n // Set parameters of algorithm: linkage type, distance metric, etc.\n var opts = setOptions$1(options);\n var attrs = opts.attributes;\n var getDist = function getDist(n1, n2) {\n return clusteringDistance(opts.distance, attrs.length, function (i) {\n return attrs[i](n1);\n }, function (i) {\n return attrs[i](n2);\n }, n1, n2);\n };\n\n // Begin hierarchical algorithm\n var clusters = [];\n var dists = []; // distances between each pair of clusters\n var mins = []; // closest cluster for each cluster\n var index = []; // hash of all clusters by key\n\n // In agglomerative (bottom-up) clustering, each node starts as its own cluster\n for (var n = 0; n < nodes.length; n++) {\n var cluster = {\n value: opts.mode === 'dendrogram' ? nodes[n] : [nodes[n]],\n key: n,\n index: n\n };\n clusters[n] = cluster;\n index[n] = cluster;\n dists[n] = [];\n mins[n] = 0;\n }\n\n // Calculate the distance between each pair of clusters\n for (var i = 0; i < clusters.length; i++) {\n for (var j = 0; j <= i; j++) {\n var dist = undefined;\n if (opts.mode === 'dendrogram') {\n // modes store cluster values differently\n dist = i === j ? Infinity : getDist(clusters[i].value, clusters[j].value);\n } else {\n dist = i === j ? Infinity : getDist(clusters[i].value[0], clusters[j].value[0]);\n }\n dists[i][j] = dist;\n dists[j][i] = dist;\n if (dist < dists[i][mins[i]]) {\n mins[i] = j; // Cache mins: closest cluster to cluster i is cluster j\n }\n }\n }\n\n // Find the closest pair of clusters and merge them into a single cluster.\n // Update distances between new cluster and each of the old clusters, and loop until threshold reached.\n var merged = mergeClosest(clusters, index, dists, mins, opts);\n while (merged) {\n merged = mergeClosest(clusters, index, dists, mins, opts);\n }\n var retClusters;\n\n // Dendrogram mode builds the hierarchy and adds intermediary nodes + edges\n // in addition to returning the clusters.\n if (opts.mode === 'dendrogram') {\n retClusters = _buildClustersFromTree(clusters[0], opts.dendrogramDepth, cy);\n if (opts.addDendrogram) _buildDendrogram(clusters[0], cy);\n } else {\n // Regular mode simply returns the clusters\n\n retClusters = new Array(clusters.length);\n clusters.forEach(function (cluster, i) {\n // Clean up meta data used for clustering\n cluster.key = cluster.index = null;\n retClusters[i] = cy.collection(cluster.value);\n });\n }\n return retClusters;\n};\nvar hierarchicalClustering$1 = {\n hierarchicalClustering: hierarchicalClustering,\n hca: hierarchicalClustering\n};\n\n// Implemented by Zoe Xi @zoexi for GSOC 2016\n// https://github.com/cytoscape/cytoscape.js-affinity-propagation\n\nvar defaults$9 = defaults$g({\n distance: 'euclidean',\n // distance metric to compare attributes between two nodes\n preference: 'median',\n // suitability of a data point to serve as an exemplar\n damping: 0.8,\n // damping factor between [0.5, 1)\n maxIterations: 1000,\n // max number of iterations to run\n minIterations: 100,\n // min number of iterations to run in order for clustering to stop\n attributes: [// functions to quantify the similarity between any two points\n // e.g. node => node.data('weight')\n ]\n});\nvar setOptions = function setOptions(options) {\n var dmp = options.damping;\n var pref = options.preference;\n if (!(0.5 <= dmp && dmp < 1)) {\n error(\"Damping must range on [0.5, 1). Got: \".concat(dmp));\n }\n var validPrefs = ['median', 'mean', 'min', 'max'];\n if (!(validPrefs.some(function (v) {\n return v === pref;\n }) || number$1(pref))) {\n error(\"Preference must be one of [\".concat(validPrefs.map(function (p) {\n return \"'\".concat(p, \"'\");\n }).join(', '), \"] or a number. Got: \").concat(pref));\n }\n return defaults$9(options);\n};\n\nvar getSimilarity = function getSimilarity(type, n1, n2, attributes) {\n var attr = function attr(n, i) {\n return attributes[i](n);\n };\n\n // nb negative because similarity should have an inverse relationship to distance\n return -clusteringDistance(type, attributes.length, function (i) {\n return attr(n1, i);\n }, function (i) {\n return attr(n2, i);\n }, n1, n2);\n};\nvar getPreference = function getPreference(S, preference) {\n // larger preference = greater # of clusters\n var p = null;\n if (preference === 'median') {\n p = median(S);\n } else if (preference === 'mean') {\n p = mean(S);\n } else if (preference === 'min') {\n p = min(S);\n } else if (preference === 'max') {\n p = max(S);\n } else {\n // Custom preference number, as set by user\n p = preference;\n }\n return p;\n};\nvar findExemplars = function findExemplars(n, R, A) {\n var indices = [];\n for (var i = 0; i < n; i++) {\n if (R[i * n + i] + A[i * n + i] > 0) {\n indices.push(i);\n }\n }\n return indices;\n};\nvar assignClusters = function assignClusters(n, S, exemplars) {\n var clusters = [];\n for (var i = 0; i < n; i++) {\n var index = -1;\n var max = -Infinity;\n for (var ei = 0; ei < exemplars.length; ei++) {\n var e = exemplars[ei];\n if (S[i * n + e] > max) {\n index = e;\n max = S[i * n + e];\n }\n }\n if (index > 0) {\n clusters.push(index);\n }\n }\n for (var _ei = 0; _ei < exemplars.length; _ei++) {\n clusters[exemplars[_ei]] = exemplars[_ei];\n }\n return clusters;\n};\nvar assign = function assign(n, S, exemplars) {\n var clusters = assignClusters(n, S, exemplars);\n for (var ei = 0; ei < exemplars.length; ei++) {\n var ii = [];\n for (var c = 0; c < clusters.length; c++) {\n if (clusters[c] === exemplars[ei]) {\n ii.push(c);\n }\n }\n var maxI = -1;\n var maxSum = -Infinity;\n for (var i = 0; i < ii.length; i++) {\n var sum = 0;\n for (var j = 0; j < ii.length; j++) {\n sum += S[ii[j] * n + ii[i]];\n }\n if (sum > maxSum) {\n maxI = i;\n maxSum = sum;\n }\n }\n exemplars[ei] = ii[maxI];\n }\n clusters = assignClusters(n, S, exemplars);\n return clusters;\n};\nvar affinityPropagation = function affinityPropagation(options) {\n var cy = this.cy();\n var nodes = this.nodes();\n var opts = setOptions(options);\n\n // Map each node to its position in node array\n var id2position = {};\n for (var i = 0; i < nodes.length; i++) {\n id2position[nodes[i].id()] = i;\n }\n\n // Begin affinity propagation algorithm\n\n var n; // number of data points\n var n2; // size of matrices\n var S; // similarity matrix (1D array)\n var p; // preference/suitability of a data point to serve as an exemplar\n var R; // responsibility matrix (1D array)\n var A; // availability matrix (1D array)\n\n n = nodes.length;\n n2 = n * n;\n\n // Initialize and build S similarity matrix\n S = new Array(n2);\n for (var _i = 0; _i < n2; _i++) {\n S[_i] = -Infinity; // for cases where two data points shouldn't be linked together\n }\n for (var _i2 = 0; _i2 < n; _i2++) {\n for (var j = 0; j < n; j++) {\n if (_i2 !== j) {\n S[_i2 * n + j] = getSimilarity(opts.distance, nodes[_i2], nodes[j], opts.attributes);\n }\n }\n }\n\n // Place preferences on the diagonal of S\n p = getPreference(S, opts.preference);\n for (var _i3 = 0; _i3 < n; _i3++) {\n S[_i3 * n + _i3] = p;\n }\n\n // Initialize R responsibility matrix\n R = new Array(n2);\n for (var _i4 = 0; _i4 < n2; _i4++) {\n R[_i4] = 0.0;\n }\n\n // Initialize A availability matrix\n A = new Array(n2);\n for (var _i5 = 0; _i5 < n2; _i5++) {\n A[_i5] = 0.0;\n }\n var old = new Array(n);\n var Rp = new Array(n);\n var se = new Array(n);\n for (var _i6 = 0; _i6 < n; _i6++) {\n old[_i6] = 0.0;\n Rp[_i6] = 0.0;\n se[_i6] = 0;\n }\n var e = new Array(n * opts.minIterations);\n for (var _i7 = 0; _i7 < e.length; _i7++) {\n e[_i7] = 0;\n }\n var iter;\n for (iter = 0; iter < opts.maxIterations; iter++) {\n // main algorithmic loop\n\n // Update R responsibility matrix\n for (var _i8 = 0; _i8 < n; _i8++) {\n var max = -Infinity,\n max2 = -Infinity,\n maxI = -1,\n AS = 0.0;\n for (var _j = 0; _j < n; _j++) {\n old[_j] = R[_i8 * n + _j];\n AS = A[_i8 * n + _j] + S[_i8 * n + _j];\n if (AS >= max) {\n max2 = max;\n max = AS;\n maxI = _j;\n } else if (AS > max2) {\n max2 = AS;\n }\n }\n for (var _j2 = 0; _j2 < n; _j2++) {\n R[_i8 * n + _j2] = (1 - opts.damping) * (S[_i8 * n + _j2] - max) + opts.damping * old[_j2];\n }\n R[_i8 * n + maxI] = (1 - opts.damping) * (S[_i8 * n + maxI] - max2) + opts.damping * old[maxI];\n }\n\n // Update A availability matrix\n for (var _i9 = 0; _i9 < n; _i9++) {\n var sum = 0;\n for (var _j3 = 0; _j3 < n; _j3++) {\n old[_j3] = A[_j3 * n + _i9];\n Rp[_j3] = Math.max(0, R[_j3 * n + _i9]);\n sum += Rp[_j3];\n }\n sum -= Rp[_i9];\n Rp[_i9] = R[_i9 * n + _i9];\n sum += Rp[_i9];\n for (var _j4 = 0; _j4 < n; _j4++) {\n A[_j4 * n + _i9] = (1 - opts.damping) * Math.min(0, sum - Rp[_j4]) + opts.damping * old[_j4];\n }\n A[_i9 * n + _i9] = (1 - opts.damping) * (sum - Rp[_i9]) + opts.damping * old[_i9];\n }\n\n // Check for convergence\n var K = 0;\n for (var _i10 = 0; _i10 < n; _i10++) {\n var E = A[_i10 * n + _i10] + R[_i10 * n + _i10] > 0 ? 1 : 0;\n e[iter % opts.minIterations * n + _i10] = E;\n K += E;\n }\n if (K > 0 && (iter >= opts.minIterations - 1 || iter == opts.maxIterations - 1)) {\n var _sum = 0;\n for (var _i11 = 0; _i11 < n; _i11++) {\n se[_i11] = 0;\n for (var _j5 = 0; _j5 < opts.minIterations; _j5++) {\n se[_i11] += e[_j5 * n + _i11];\n }\n if (se[_i11] === 0 || se[_i11] === opts.minIterations) {\n _sum++;\n }\n }\n if (_sum === n) {\n // then we have convergence\n break;\n }\n }\n }\n\n // Identify exemplars (cluster centers)\n var exemplarsIndices = findExemplars(n, R, A);\n\n // Assign nodes to clusters\n var clusterIndices = assign(n, S, exemplarsIndices);\n var clusters = {};\n for (var c = 0; c < exemplarsIndices.length; c++) {\n clusters[exemplarsIndices[c]] = [];\n }\n for (var _i12 = 0; _i12 < nodes.length; _i12++) {\n var pos = id2position[nodes[_i12].id()];\n var clusterIndex = clusterIndices[pos];\n if (clusterIndex != null) {\n // the node may have not been assigned a cluster if no valid attributes were specified\n clusters[clusterIndex].push(nodes[_i12]);\n }\n }\n var retClusters = new Array(exemplarsIndices.length);\n for (var _c = 0; _c < exemplarsIndices.length; _c++) {\n retClusters[_c] = cy.collection(clusters[exemplarsIndices[_c]]);\n }\n return retClusters;\n};\nvar affinityPropagation$1 = {\n affinityPropagation: affinityPropagation,\n ap: affinityPropagation\n};\n\nvar hierholzerDefaults = defaults$g({\n root: undefined,\n directed: false\n});\nvar elesfn$k = {\n hierholzer: function hierholzer(options) {\n if (!plainObject(options)) {\n var args = arguments;\n options = {\n root: args[0],\n directed: args[1]\n };\n }\n var _hierholzerDefaults = hierholzerDefaults(options),\n root = _hierholzerDefaults.root,\n directed = _hierholzerDefaults.directed;\n var eles = this;\n var dflag = false;\n var oddIn;\n var oddOut;\n var startVertex;\n if (root) startVertex = string(root) ? this.filter(root)[0].id() : root[0].id();\n var nodes = {};\n var edges = {};\n if (directed) {\n eles.forEach(function (ele) {\n var id = ele.id();\n if (ele.isNode()) {\n var ind = ele.indegree(true);\n var outd = ele.outdegree(true);\n var d1 = ind - outd;\n var d2 = outd - ind;\n if (d1 == 1) {\n if (oddIn) dflag = true;else oddIn = id;\n } else if (d2 == 1) {\n if (oddOut) dflag = true;else oddOut = id;\n } else if (d2 > 1 || d1 > 1) {\n dflag = true;\n }\n nodes[id] = [];\n ele.outgoers().forEach(function (e) {\n if (e.isEdge()) nodes[id].push(e.id());\n });\n } else {\n edges[id] = [undefined, ele.target().id()];\n }\n });\n } else {\n eles.forEach(function (ele) {\n var id = ele.id();\n if (ele.isNode()) {\n var d = ele.degree(true);\n if (d % 2) {\n if (!oddIn) oddIn = id;else if (!oddOut) oddOut = id;else dflag = true;\n }\n nodes[id] = [];\n ele.connectedEdges().forEach(function (e) {\n return nodes[id].push(e.id());\n });\n } else {\n edges[id] = [ele.source().id(), ele.target().id()];\n }\n });\n }\n var result = {\n found: false,\n trail: undefined\n };\n if (dflag) return result;else if (oddOut && oddIn) {\n if (directed) {\n if (startVertex && oddOut != startVertex) {\n return result;\n }\n startVertex = oddOut;\n } else {\n if (startVertex && oddOut != startVertex && oddIn != startVertex) {\n return result;\n } else if (!startVertex) {\n startVertex = oddOut;\n }\n }\n } else {\n if (!startVertex) startVertex = eles[0].id();\n }\n var walk = function walk(v) {\n var currentNode = v;\n var subtour = [v];\n var adj, adjTail, adjHead;\n while (nodes[currentNode].length) {\n adj = nodes[currentNode].shift();\n adjTail = edges[adj][0];\n adjHead = edges[adj][1];\n if (currentNode != adjHead) {\n nodes[adjHead] = nodes[adjHead].filter(function (e) {\n return e != adj;\n });\n currentNode = adjHead;\n } else if (!directed && currentNode != adjTail) {\n nodes[adjTail] = nodes[adjTail].filter(function (e) {\n return e != adj;\n });\n currentNode = adjTail;\n }\n subtour.unshift(adj);\n subtour.unshift(currentNode);\n }\n return subtour;\n };\n var trail = [];\n var subtour = [];\n subtour = walk(startVertex);\n while (subtour.length != 1) {\n if (nodes[subtour[0]].length == 0) {\n trail.unshift(eles.getElementById(subtour.shift()));\n trail.unshift(eles.getElementById(subtour.shift()));\n } else {\n subtour = walk(subtour.shift()).concat(subtour);\n }\n }\n trail.unshift(eles.getElementById(subtour.shift())); // final node\n\n for (var d in nodes) {\n if (nodes[d].length) {\n return result;\n }\n }\n result.found = true;\n result.trail = this.spawn(trail, true);\n return result;\n }\n};\n\nvar hopcroftTarjanBiconnected = function hopcroftTarjanBiconnected() {\n var eles = this;\n var nodes = {};\n var id = 0;\n var edgeCount = 0;\n var components = [];\n var stack = [];\n var visitedEdges = {};\n var buildComponent = function buildComponent(x, y) {\n var i = stack.length - 1;\n var cutset = [];\n var component = eles.spawn();\n while (stack[i].x != x || stack[i].y != y) {\n cutset.push(stack.pop().edge);\n i--;\n }\n cutset.push(stack.pop().edge);\n cutset.forEach(function (edge) {\n var connectedNodes = edge.connectedNodes().intersection(eles);\n component.merge(edge);\n connectedNodes.forEach(function (node) {\n var nodeId = node.id();\n var connectedEdges = node.connectedEdges().intersection(eles);\n component.merge(node);\n if (!nodes[nodeId].cutVertex) {\n component.merge(connectedEdges);\n } else {\n component.merge(connectedEdges.filter(function (edge) {\n return edge.isLoop();\n }));\n }\n });\n });\n components.push(component);\n };\n var _biconnectedSearch = function biconnectedSearch(root, currentNode, parent) {\n if (root === parent) edgeCount += 1;\n nodes[currentNode] = {\n id: id,\n low: id++,\n cutVertex: false\n };\n var edges = eles.getElementById(currentNode).connectedEdges().intersection(eles);\n if (edges.size() === 0) {\n components.push(eles.spawn(eles.getElementById(currentNode)));\n } else {\n var sourceId, targetId, otherNodeId, edgeId;\n edges.forEach(function (edge) {\n sourceId = edge.source().id();\n targetId = edge.target().id();\n otherNodeId = sourceId === currentNode ? targetId : sourceId;\n if (otherNodeId !== parent) {\n edgeId = edge.id();\n if (!visitedEdges[edgeId]) {\n visitedEdges[edgeId] = true;\n stack.push({\n x: currentNode,\n y: otherNodeId,\n edge: edge\n });\n }\n if (!(otherNodeId in nodes)) {\n _biconnectedSearch(root, otherNodeId, currentNode);\n nodes[currentNode].low = Math.min(nodes[currentNode].low, nodes[otherNodeId].low);\n if (nodes[currentNode].id <= nodes[otherNodeId].low) {\n nodes[currentNode].cutVertex = true;\n buildComponent(currentNode, otherNodeId);\n }\n } else {\n nodes[currentNode].low = Math.min(nodes[currentNode].low, nodes[otherNodeId].id);\n }\n }\n });\n }\n };\n eles.forEach(function (ele) {\n if (ele.isNode()) {\n var nodeId = ele.id();\n if (!(nodeId in nodes)) {\n edgeCount = 0;\n _biconnectedSearch(nodeId, nodeId);\n nodes[nodeId].cutVertex = edgeCount > 1;\n }\n }\n });\n var cutVertices = Object.keys(nodes).filter(function (id) {\n return nodes[id].cutVertex;\n }).map(function (id) {\n return eles.getElementById(id);\n });\n return {\n cut: eles.spawn(cutVertices),\n components: components\n };\n};\nvar hopcroftTarjanBiconnected$1 = {\n hopcroftTarjanBiconnected: hopcroftTarjanBiconnected,\n htbc: hopcroftTarjanBiconnected,\n htb: hopcroftTarjanBiconnected,\n hopcroftTarjanBiconnectedComponents: hopcroftTarjanBiconnected\n};\n\nvar tarjanStronglyConnected = function tarjanStronglyConnected() {\n var eles = this;\n var nodes = {};\n var index = 0;\n var components = [];\n var stack = [];\n var cut = eles.spawn(eles);\n var _stronglyConnectedSearch = function stronglyConnectedSearch(sourceNodeId) {\n stack.push(sourceNodeId);\n nodes[sourceNodeId] = {\n index: index,\n low: index++,\n explored: false\n };\n var connectedEdges = eles.getElementById(sourceNodeId).connectedEdges().intersection(eles);\n connectedEdges.forEach(function (edge) {\n var targetNodeId = edge.target().id();\n if (targetNodeId !== sourceNodeId) {\n if (!(targetNodeId in nodes)) {\n _stronglyConnectedSearch(targetNodeId);\n }\n if (!nodes[targetNodeId].explored) {\n nodes[sourceNodeId].low = Math.min(nodes[sourceNodeId].low, nodes[targetNodeId].low);\n }\n }\n });\n if (nodes[sourceNodeId].index === nodes[sourceNodeId].low) {\n var componentNodes = eles.spawn();\n for (;;) {\n var nodeId = stack.pop();\n componentNodes.merge(eles.getElementById(nodeId));\n nodes[nodeId].low = nodes[sourceNodeId].index;\n nodes[nodeId].explored = true;\n if (nodeId === sourceNodeId) {\n break;\n }\n }\n var componentEdges = componentNodes.edgesWith(componentNodes);\n var component = componentNodes.merge(componentEdges);\n components.push(component);\n cut = cut.difference(component);\n }\n };\n eles.forEach(function (ele) {\n if (ele.isNode()) {\n var nodeId = ele.id();\n if (!(nodeId in nodes)) {\n _stronglyConnectedSearch(nodeId);\n }\n }\n });\n return {\n cut: cut,\n components: components\n };\n};\nvar tarjanStronglyConnected$1 = {\n tarjanStronglyConnected: tarjanStronglyConnected,\n tsc: tarjanStronglyConnected,\n tscc: tarjanStronglyConnected,\n tarjanStronglyConnectedComponents: tarjanStronglyConnected\n};\n\nvar elesfn$j = {};\n[elesfn$v, elesfn$u, elesfn$t, elesfn$s, elesfn$r, elesfn$q, elesfn$p, elesfn$o, elesfn$n, elesfn$m, elesfn$l, markovClustering$1, kClustering, hierarchicalClustering$1, affinityPropagation$1, elesfn$k, hopcroftTarjanBiconnected$1, tarjanStronglyConnected$1].forEach(function (props) {\n extend(elesfn$j, props);\n});\n\n/*!\nEmbeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable\nCopyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com)\nLicensed under The MIT License (http://opensource.org/licenses/MIT)\n*/\n\n/* promise states [Promises/A+ 2.1] */\nvar STATE_PENDING = 0; /* [Promises/A+ 2.1.1] */\nvar STATE_FULFILLED = 1; /* [Promises/A+ 2.1.2] */\nvar STATE_REJECTED = 2; /* [Promises/A+ 2.1.3] */\n\n/* promise object constructor */\nvar _api = function api(executor) {\n /* optionally support non-constructor/plain-function call */\n if (!(this instanceof _api)) return new _api(executor);\n\n /* initialize object */\n this.id = 'Thenable/1.0.7';\n this.state = STATE_PENDING; /* initial state */\n this.fulfillValue = undefined; /* initial value */ /* [Promises/A+ 1.3, 2.1.2.2] */\n this.rejectReason = undefined; /* initial reason */ /* [Promises/A+ 1.5, 2.1.3.2] */\n this.onFulfilled = []; /* initial handlers */\n this.onRejected = []; /* initial handlers */\n\n /* provide optional information-hiding proxy */\n this.proxy = {\n then: this.then.bind(this)\n };\n\n /* support optional executor function */\n if (typeof executor === 'function') executor.call(this, this.fulfill.bind(this), this.reject.bind(this));\n};\n\n/* promise API methods */\n_api.prototype = {\n /* promise resolving methods */\n fulfill: function fulfill(value) {\n return deliver(this, STATE_FULFILLED, 'fulfillValue', value);\n },\n reject: function reject(value) {\n return deliver(this, STATE_REJECTED, 'rejectReason', value);\n },\n /* \"The then Method\" [Promises/A+ 1.1, 1.2, 2.2] */\n then: function then(onFulfilled, onRejected) {\n var curr = this;\n var next = new _api(); /* [Promises/A+ 2.2.7] */\n curr.onFulfilled.push(resolver(onFulfilled, next, 'fulfill')); /* [Promises/A+ 2.2.2/2.2.6] */\n curr.onRejected.push(resolver(onRejected, next, 'reject')); /* [Promises/A+ 2.2.3/2.2.6] */\n execute(curr);\n return next.proxy; /* [Promises/A+ 2.2.7, 3.3] */\n }\n};\n\n/* deliver an action */\nvar deliver = function deliver(curr, state, name, value) {\n if (curr.state === STATE_PENDING) {\n curr.state = state; /* [Promises/A+ 2.1.2.1, 2.1.3.1] */\n curr[name] = value; /* [Promises/A+ 2.1.2.2, 2.1.3.2] */\n execute(curr);\n }\n return curr;\n};\n\n/* execute all handlers */\nvar execute = function execute(curr) {\n if (curr.state === STATE_FULFILLED) execute_handlers(curr, 'onFulfilled', curr.fulfillValue);else if (curr.state === STATE_REJECTED) execute_handlers(curr, 'onRejected', curr.rejectReason);\n};\n\n/* execute particular set of handlers */\nvar execute_handlers = function execute_handlers(curr, name, value) {\n /* global setImmediate: true */\n /* global setTimeout: true */\n\n /* short-circuit processing */\n if (curr[name].length === 0) return;\n\n /* iterate over all handlers, exactly once */\n var handlers = curr[name];\n curr[name] = []; /* [Promises/A+ 2.2.2.3, 2.2.3.3] */\n var func = function func() {\n for (var i = 0; i < handlers.length; i++) handlers[i](value); /* [Promises/A+ 2.2.5] */\n };\n\n /* execute procedure asynchronously */ /* [Promises/A+ 2.2.4, 3.1] */\n if (typeof setImmediate === 'function') setImmediate(func);else setTimeout(func, 0);\n};\n\n/* generate a resolver function */\nvar resolver = function resolver(cb, next, method) {\n return function (value) {\n if (typeof cb !== 'function') /* [Promises/A+ 2.2.1, 2.2.7.3, 2.2.7.4] */\n next[method].call(next, value); /* [Promises/A+ 2.2.7.3, 2.2.7.4] */else {\n var result;\n try {\n result = cb(value);\n } /* [Promises/A+ 2.2.2.1, 2.2.3.1, 2.2.5, 3.2] */ catch (e) {\n next.reject(e); /* [Promises/A+ 2.2.7.2] */\n return;\n }\n _resolve(next, result); /* [Promises/A+ 2.2.7.1] */\n }\n };\n};\n\n/* \"Promise Resolution Procedure\" */ /* [Promises/A+ 2.3] */\nvar _resolve = function resolve(promise, x) {\n /* sanity check arguments */ /* [Promises/A+ 2.3.1] */\n if (promise === x || promise.proxy === x) {\n promise.reject(new TypeError('cannot resolve promise with itself'));\n return;\n }\n\n /* surgically check for a \"then\" method\n (mainly to just call the \"getter\" of \"then\" only once) */\n var then;\n if (_typeof(x) === 'object' && x !== null || typeof x === 'function') {\n try {\n then = x.then;\n } /* [Promises/A+ 2.3.3.1, 3.5] */ catch (e) {\n promise.reject(e); /* [Promises/A+ 2.3.3.2] */\n return;\n }\n }\n\n /* handle own Thenables [Promises/A+ 2.3.2]\n and similar \"thenables\" [Promises/A+ 2.3.3] */\n if (typeof then === 'function') {\n var resolved = false;\n try {\n /* call retrieved \"then\" method */ /* [Promises/A+ 2.3.3.3] */\n then.call(x, /* resolvePromise */ /* [Promises/A+ 2.3.3.3.1] */\n function (y) {\n if (resolved) return;\n resolved = true; /* [Promises/A+ 2.3.3.3.3] */\n if (y === x) /* [Promises/A+ 3.6] */\n promise.reject(new TypeError('circular thenable chain'));else _resolve(promise, y);\n }, /* rejectPromise */ /* [Promises/A+ 2.3.3.3.2] */\n function (r) {\n if (resolved) return;\n resolved = true; /* [Promises/A+ 2.3.3.3.3] */\n promise.reject(r);\n });\n } catch (e) {\n if (!resolved) /* [Promises/A+ 2.3.3.3.3] */\n promise.reject(e); /* [Promises/A+ 2.3.3.3.4] */\n }\n return;\n }\n\n /* handle other values */\n promise.fulfill(x); /* [Promises/A+ 2.3.4, 2.3.3.4] */\n};\n\n// so we always have Promise.all()\n_api.all = function (ps) {\n return new _api(function (resolveAll, rejectAll) {\n var vals = new Array(ps.length);\n var doneCount = 0;\n var fulfill = function fulfill(i, val) {\n vals[i] = val;\n doneCount++;\n if (doneCount === ps.length) {\n resolveAll(vals);\n }\n };\n for (var i = 0; i < ps.length; i++) {\n (function (i) {\n var p = ps[i];\n var isPromise = p != null && p.then != null;\n if (isPromise) {\n p.then(function (val) {\n fulfill(i, val);\n }, function (err) {\n rejectAll(err);\n });\n } else {\n var val = p;\n fulfill(i, val);\n }\n })(i);\n }\n });\n};\n_api.resolve = function (val) {\n return new _api(function (resolve, reject) {\n resolve(val);\n });\n};\n_api.reject = function (val) {\n return new _api(function (resolve, reject) {\n reject(val);\n });\n};\nvar Promise$1 = typeof Promise !== 'undefined' ? Promise : _api; // eslint-disable-line no-undef\n\nvar Animation = function Animation(target, opts, opts2) {\n var isCore = core(target);\n var isEle = !isCore;\n var _p = this._private = extend({\n duration: 1000\n }, opts, opts2);\n _p.target = target;\n _p.style = _p.style || _p.css;\n _p.started = false;\n _p.playing = false;\n _p.hooked = false;\n _p.applying = false;\n _p.progress = 0;\n _p.completes = [];\n _p.frames = [];\n if (_p.complete && fn$6(_p.complete)) {\n _p.completes.push(_p.complete);\n }\n if (isEle) {\n var pos = target.position();\n _p.startPosition = _p.startPosition || {\n x: pos.x,\n y: pos.y\n };\n _p.startStyle = _p.startStyle || target.cy().style().getAnimationStartStyle(target, _p.style);\n }\n if (isCore) {\n var pan = target.pan();\n _p.startPan = {\n x: pan.x,\n y: pan.y\n };\n _p.startZoom = target.zoom();\n }\n\n // for future timeline/animations impl\n this.length = 1;\n this[0] = this;\n};\nvar anifn = Animation.prototype;\nextend(anifn, {\n instanceString: function instanceString() {\n return 'animation';\n },\n hook: function hook() {\n var _p = this._private;\n if (!_p.hooked) {\n // add to target's animation queue\n var q;\n var tAni = _p.target._private.animation;\n if (_p.queue) {\n q = tAni.queue;\n } else {\n q = tAni.current;\n }\n q.push(this);\n\n // add to the animation loop pool\n if (elementOrCollection(_p.target)) {\n _p.target.cy().addToAnimationPool(_p.target);\n }\n _p.hooked = true;\n }\n return this;\n },\n play: function play() {\n var _p = this._private;\n\n // autorewind\n if (_p.progress === 1) {\n _p.progress = 0;\n }\n _p.playing = true;\n _p.started = false; // needs to be started by animation loop\n _p.stopped = false;\n this.hook();\n\n // the animation loop will start the animation...\n\n return this;\n },\n playing: function playing() {\n return this._private.playing;\n },\n apply: function apply() {\n var _p = this._private;\n _p.applying = true;\n _p.started = false; // needs to be started by animation loop\n _p.stopped = false;\n this.hook();\n\n // the animation loop will apply the animation at this progress\n\n return this;\n },\n applying: function applying() {\n return this._private.applying;\n },\n pause: function pause() {\n var _p = this._private;\n _p.playing = false;\n _p.started = false;\n return this;\n },\n stop: function stop() {\n var _p = this._private;\n _p.playing = false;\n _p.started = false;\n _p.stopped = true; // to be removed from animation queues\n\n return this;\n },\n rewind: function rewind() {\n return this.progress(0);\n },\n fastforward: function fastforward() {\n return this.progress(1);\n },\n time: function time(t) {\n var _p = this._private;\n if (t === undefined) {\n return _p.progress * _p.duration;\n } else {\n return this.progress(t / _p.duration);\n }\n },\n progress: function progress(p) {\n var _p = this._private;\n var wasPlaying = _p.playing;\n if (p === undefined) {\n return _p.progress;\n } else {\n if (wasPlaying) {\n this.pause();\n }\n _p.progress = p;\n _p.started = false;\n if (wasPlaying) {\n this.play();\n }\n }\n return this;\n },\n completed: function completed() {\n return this._private.progress === 1;\n },\n reverse: function reverse() {\n var _p = this._private;\n var wasPlaying = _p.playing;\n if (wasPlaying) {\n this.pause();\n }\n _p.progress = 1 - _p.progress;\n _p.started = false;\n var swap = function swap(a, b) {\n var _pa = _p[a];\n if (_pa == null) {\n return;\n }\n _p[a] = _p[b];\n _p[b] = _pa;\n };\n swap('zoom', 'startZoom');\n swap('pan', 'startPan');\n swap('position', 'startPosition');\n\n // swap styles\n if (_p.style) {\n for (var i = 0; i < _p.style.length; i++) {\n var prop = _p.style[i];\n var name = prop.name;\n var startStyleProp = _p.startStyle[name];\n _p.startStyle[name] = prop;\n _p.style[i] = startStyleProp;\n }\n }\n if (wasPlaying) {\n this.play();\n }\n return this;\n },\n promise: function promise(type) {\n var _p = this._private;\n var arr;\n switch (type) {\n case 'frame':\n arr = _p.frames;\n break;\n default:\n case 'complete':\n case 'completed':\n arr = _p.completes;\n }\n return new Promise$1(function (resolve, reject) {\n arr.push(function () {\n resolve();\n });\n });\n }\n});\nanifn.complete = anifn.completed;\nanifn.run = anifn.play;\nanifn.running = anifn.playing;\n\nvar define$3 = {\n animated: function animated() {\n return function animatedImpl() {\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n var cy = this._private.cy || this;\n if (!cy.styleEnabled()) {\n return false;\n }\n var ele = all[0];\n if (ele) {\n return ele._private.animation.current.length > 0;\n }\n };\n },\n // animated\n\n clearQueue: function clearQueue() {\n return function clearQueueImpl() {\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n var cy = this._private.cy || this;\n if (!cy.styleEnabled()) {\n return this;\n }\n for (var i = 0; i < all.length; i++) {\n var ele = all[i];\n ele._private.animation.queue = [];\n }\n return this;\n };\n },\n // clearQueue\n\n delay: function delay() {\n return function delayImpl(time, complete) {\n var cy = this._private.cy || this;\n if (!cy.styleEnabled()) {\n return this;\n }\n return this.animate({\n delay: time,\n duration: time,\n complete: complete\n });\n };\n },\n // delay\n\n delayAnimation: function delayAnimation() {\n return function delayAnimationImpl(time, complete) {\n var cy = this._private.cy || this;\n if (!cy.styleEnabled()) {\n return this;\n }\n return this.animation({\n delay: time,\n duration: time,\n complete: complete\n });\n };\n },\n // delay\n\n animation: function animation() {\n return function animationImpl(properties, params) {\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n var cy = this._private.cy || this;\n var isCore = !selfIsArrayLike;\n var isEles = !isCore;\n if (!cy.styleEnabled()) {\n return this;\n }\n var style = cy.style();\n properties = extend({}, properties, params);\n var propertiesEmpty = Object.keys(properties).length === 0;\n if (propertiesEmpty) {\n return new Animation(all[0], properties); // nothing to animate\n }\n if (properties.duration === undefined) {\n properties.duration = 400;\n }\n switch (properties.duration) {\n case 'slow':\n properties.duration = 600;\n break;\n case 'fast':\n properties.duration = 200;\n break;\n }\n if (isEles) {\n properties.style = style.getPropsList(properties.style || properties.css);\n properties.css = undefined;\n }\n if (isEles && properties.renderedPosition != null) {\n var rpos = properties.renderedPosition;\n var pan = cy.pan();\n var zoom = cy.zoom();\n properties.position = renderedToModelPosition(rpos, zoom, pan);\n }\n\n // override pan w/ panBy if set\n if (isCore && properties.panBy != null) {\n var panBy = properties.panBy;\n var cyPan = cy.pan();\n properties.pan = {\n x: cyPan.x + panBy.x,\n y: cyPan.y + panBy.y\n };\n }\n\n // override pan w/ center if set\n var center = properties.center || properties.centre;\n if (isCore && center != null) {\n var centerPan = cy.getCenterPan(center.eles, properties.zoom);\n if (centerPan != null) {\n properties.pan = centerPan;\n }\n }\n\n // override pan & zoom w/ fit if set\n if (isCore && properties.fit != null) {\n var fit = properties.fit;\n var fitVp = cy.getFitViewport(fit.eles || fit.boundingBox, fit.padding);\n if (fitVp != null) {\n properties.pan = fitVp.pan;\n properties.zoom = fitVp.zoom;\n }\n }\n\n // override zoom (& potentially pan) w/ zoom obj if set\n if (isCore && plainObject(properties.zoom)) {\n var vp = cy.getZoomedViewport(properties.zoom);\n if (vp != null) {\n if (vp.zoomed) {\n properties.zoom = vp.zoom;\n }\n if (vp.panned) {\n properties.pan = vp.pan;\n }\n } else {\n properties.zoom = null; // an inavalid zoom (e.g. no delta) gets automatically destroyed\n }\n }\n return new Animation(all[0], properties);\n };\n },\n // animate\n\n animate: function animate() {\n return function animateImpl(properties, params) {\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n var cy = this._private.cy || this;\n if (!cy.styleEnabled()) {\n return this;\n }\n if (params) {\n properties = extend({}, properties, params);\n }\n\n // manually hook and run the animation\n for (var i = 0; i < all.length; i++) {\n var ele = all[i];\n var queue = ele.animated() && (properties.queue === undefined || properties.queue);\n var ani = ele.animation(properties, queue ? {\n queue: true\n } : undefined);\n ani.play();\n }\n return this; // chaining\n };\n },\n // animate\n\n stop: function stop() {\n return function stopImpl(clearQueue, jumpToEnd) {\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n var cy = this._private.cy || this;\n if (!cy.styleEnabled()) {\n return this;\n }\n for (var i = 0; i < all.length; i++) {\n var ele = all[i];\n var _p = ele._private;\n var anis = _p.animation.current;\n for (var j = 0; j < anis.length; j++) {\n var ani = anis[j];\n var ani_p = ani._private;\n if (jumpToEnd) {\n // next iteration of the animation loop, the animation\n // will go straight to the end and be removed\n ani_p.duration = 0;\n }\n }\n\n // clear the queue of future animations\n if (clearQueue) {\n _p.animation.queue = [];\n }\n if (!jumpToEnd) {\n _p.animation.current = [];\n }\n }\n\n // we have to notify (the animation loop doesn't do it for us on `stop`)\n cy.notify('draw');\n return this;\n };\n } // stop\n}; // define\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n\nvar isArray_1;\nvar hasRequiredIsArray;\n\nfunction requireIsArray () {\n\tif (hasRequiredIsArray) return isArray_1;\n\thasRequiredIsArray = 1;\n\tvar isArray = Array.isArray;\n\n\tisArray_1 = isArray;\n\treturn isArray_1;\n}\n\nvar _isKey;\nvar hasRequired_isKey;\n\nfunction require_isKey () {\n\tif (hasRequired_isKey) return _isKey;\n\thasRequired_isKey = 1;\n\tvar isArray = requireIsArray(),\n\t isSymbol = requireIsSymbol();\n\n\t/** Used to match property names within property paths. */\n\tvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n\t reIsPlainProp = /^\\w*$/;\n\n\t/**\n\t * Checks if `value` is a property name and not a property path.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @param {Object} [object] The object to query keys on.\n\t * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n\t */\n\tfunction isKey(value, object) {\n\t if (isArray(value)) {\n\t return false;\n\t }\n\t var type = typeof value;\n\t if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n\t value == null || isSymbol(value)) {\n\t return true;\n\t }\n\t return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n\t (object != null && value in Object(object));\n\t}\n\n\t_isKey = isKey;\n\treturn _isKey;\n}\n\nvar isFunction_1;\nvar hasRequiredIsFunction;\n\nfunction requireIsFunction () {\n\tif (hasRequiredIsFunction) return isFunction_1;\n\thasRequiredIsFunction = 1;\n\tvar baseGetTag = require_baseGetTag(),\n\t isObject = requireIsObject();\n\n\t/** `Object#toString` result references. */\n\tvar asyncTag = '[object AsyncFunction]',\n\t funcTag = '[object Function]',\n\t genTag = '[object GeneratorFunction]',\n\t proxyTag = '[object Proxy]';\n\n\t/**\n\t * Checks if `value` is classified as a `Function` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n\t * @example\n\t *\n\t * _.isFunction(_);\n\t * // => true\n\t *\n\t * _.isFunction(/abc/);\n\t * // => false\n\t */\n\tfunction isFunction(value) {\n\t if (!isObject(value)) {\n\t return false;\n\t }\n\t // The use of `Object#toString` avoids issues with the `typeof` operator\n\t // in Safari 9 which returns 'object' for typed arrays and other constructors.\n\t var tag = baseGetTag(value);\n\t return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n\t}\n\n\tisFunction_1 = isFunction;\n\treturn isFunction_1;\n}\n\nvar _coreJsData;\nvar hasRequired_coreJsData;\n\nfunction require_coreJsData () {\n\tif (hasRequired_coreJsData) return _coreJsData;\n\thasRequired_coreJsData = 1;\n\tvar root = require_root();\n\n\t/** Used to detect overreaching core-js shims. */\n\tvar coreJsData = root['__core-js_shared__'];\n\n\t_coreJsData = coreJsData;\n\treturn _coreJsData;\n}\n\nvar _isMasked;\nvar hasRequired_isMasked;\n\nfunction require_isMasked () {\n\tif (hasRequired_isMasked) return _isMasked;\n\thasRequired_isMasked = 1;\n\tvar coreJsData = require_coreJsData();\n\n\t/** Used to detect methods masquerading as native. */\n\tvar maskSrcKey = (function() {\n\t var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n\t return uid ? ('Symbol(src)_1.' + uid) : '';\n\t}());\n\n\t/**\n\t * Checks if `func` has its source masked.\n\t *\n\t * @private\n\t * @param {Function} func The function to check.\n\t * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n\t */\n\tfunction isMasked(func) {\n\t return !!maskSrcKey && (maskSrcKey in func);\n\t}\n\n\t_isMasked = isMasked;\n\treturn _isMasked;\n}\n\n/** Used for built-in method references. */\n\nvar _toSource;\nvar hasRequired_toSource;\n\nfunction require_toSource () {\n\tif (hasRequired_toSource) return _toSource;\n\thasRequired_toSource = 1;\n\tvar funcProto = Function.prototype;\n\n\t/** Used to resolve the decompiled source of functions. */\n\tvar funcToString = funcProto.toString;\n\n\t/**\n\t * Converts `func` to its source code.\n\t *\n\t * @private\n\t * @param {Function} func The function to convert.\n\t * @returns {string} Returns the source code.\n\t */\n\tfunction toSource(func) {\n\t if (func != null) {\n\t try {\n\t return funcToString.call(func);\n\t } catch (e) {}\n\t try {\n\t return (func + '');\n\t } catch (e) {}\n\t }\n\t return '';\n\t}\n\n\t_toSource = toSource;\n\treturn _toSource;\n}\n\nvar _baseIsNative;\nvar hasRequired_baseIsNative;\n\nfunction require_baseIsNative () {\n\tif (hasRequired_baseIsNative) return _baseIsNative;\n\thasRequired_baseIsNative = 1;\n\tvar isFunction = requireIsFunction(),\n\t isMasked = require_isMasked(),\n\t isObject = requireIsObject(),\n\t toSource = require_toSource();\n\n\t/**\n\t * Used to match `RegExp`\n\t * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n\t */\n\tvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n\t/** Used to detect host constructors (Safari). */\n\tvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n\t/** Used for built-in method references. */\n\tvar funcProto = Function.prototype,\n\t objectProto = Object.prototype;\n\n\t/** Used to resolve the decompiled source of functions. */\n\tvar funcToString = funcProto.toString;\n\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\n\t/** Used to detect if a method is native. */\n\tvar reIsNative = RegExp('^' +\n\t funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n\t);\n\n\t/**\n\t * The base implementation of `_.isNative` without bad shim checks.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a native function,\n\t * else `false`.\n\t */\n\tfunction baseIsNative(value) {\n\t if (!isObject(value) || isMasked(value)) {\n\t return false;\n\t }\n\t var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n\t return pattern.test(toSource(value));\n\t}\n\n\t_baseIsNative = baseIsNative;\n\treturn _baseIsNative;\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n\nvar _getValue;\nvar hasRequired_getValue;\n\nfunction require_getValue () {\n\tif (hasRequired_getValue) return _getValue;\n\thasRequired_getValue = 1;\n\tfunction getValue(object, key) {\n\t return object == null ? undefined : object[key];\n\t}\n\n\t_getValue = getValue;\n\treturn _getValue;\n}\n\nvar _getNative;\nvar hasRequired_getNative;\n\nfunction require_getNative () {\n\tif (hasRequired_getNative) return _getNative;\n\thasRequired_getNative = 1;\n\tvar baseIsNative = require_baseIsNative(),\n\t getValue = require_getValue();\n\n\t/**\n\t * Gets the native function at `key` of `object`.\n\t *\n\t * @private\n\t * @param {Object} object The object to query.\n\t * @param {string} key The key of the method to get.\n\t * @returns {*} Returns the function if it's native, else `undefined`.\n\t */\n\tfunction getNative(object, key) {\n\t var value = getValue(object, key);\n\t return baseIsNative(value) ? value : undefined;\n\t}\n\n\t_getNative = getNative;\n\treturn _getNative;\n}\n\nvar _nativeCreate;\nvar hasRequired_nativeCreate;\n\nfunction require_nativeCreate () {\n\tif (hasRequired_nativeCreate) return _nativeCreate;\n\thasRequired_nativeCreate = 1;\n\tvar getNative = require_getNative();\n\n\t/* Built-in method references that are verified to be native. */\n\tvar nativeCreate = getNative(Object, 'create');\n\n\t_nativeCreate = nativeCreate;\n\treturn _nativeCreate;\n}\n\nvar _hashClear;\nvar hasRequired_hashClear;\n\nfunction require_hashClear () {\n\tif (hasRequired_hashClear) return _hashClear;\n\thasRequired_hashClear = 1;\n\tvar nativeCreate = require_nativeCreate();\n\n\t/**\n\t * Removes all key-value entries from the hash.\n\t *\n\t * @private\n\t * @name clear\n\t * @memberOf Hash\n\t */\n\tfunction hashClear() {\n\t this.__data__ = nativeCreate ? nativeCreate(null) : {};\n\t this.size = 0;\n\t}\n\n\t_hashClear = hashClear;\n\treturn _hashClear;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n\nvar _hashDelete;\nvar hasRequired_hashDelete;\n\nfunction require_hashDelete () {\n\tif (hasRequired_hashDelete) return _hashDelete;\n\thasRequired_hashDelete = 1;\n\tfunction hashDelete(key) {\n\t var result = this.has(key) && delete this.__data__[key];\n\t this.size -= result ? 1 : 0;\n\t return result;\n\t}\n\n\t_hashDelete = hashDelete;\n\treturn _hashDelete;\n}\n\nvar _hashGet;\nvar hasRequired_hashGet;\n\nfunction require_hashGet () {\n\tif (hasRequired_hashGet) return _hashGet;\n\thasRequired_hashGet = 1;\n\tvar nativeCreate = require_nativeCreate();\n\n\t/** Used to stand-in for `undefined` hash values. */\n\tvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n\t/** Used for built-in method references. */\n\tvar objectProto = Object.prototype;\n\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\n\t/**\n\t * Gets the hash value for `key`.\n\t *\n\t * @private\n\t * @name get\n\t * @memberOf Hash\n\t * @param {string} key The key of the value to get.\n\t * @returns {*} Returns the entry value.\n\t */\n\tfunction hashGet(key) {\n\t var data = this.__data__;\n\t if (nativeCreate) {\n\t var result = data[key];\n\t return result === HASH_UNDEFINED ? undefined : result;\n\t }\n\t return hasOwnProperty.call(data, key) ? data[key] : undefined;\n\t}\n\n\t_hashGet = hashGet;\n\treturn _hashGet;\n}\n\nvar _hashHas;\nvar hasRequired_hashHas;\n\nfunction require_hashHas () {\n\tif (hasRequired_hashHas) return _hashHas;\n\thasRequired_hashHas = 1;\n\tvar nativeCreate = require_nativeCreate();\n\n\t/** Used for built-in method references. */\n\tvar objectProto = Object.prototype;\n\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\n\t/**\n\t * Checks if a hash value for `key` exists.\n\t *\n\t * @private\n\t * @name has\n\t * @memberOf Hash\n\t * @param {string} key The key of the entry to check.\n\t * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n\t */\n\tfunction hashHas(key) {\n\t var data = this.__data__;\n\t return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n\t}\n\n\t_hashHas = hashHas;\n\treturn _hashHas;\n}\n\nvar _hashSet;\nvar hasRequired_hashSet;\n\nfunction require_hashSet () {\n\tif (hasRequired_hashSet) return _hashSet;\n\thasRequired_hashSet = 1;\n\tvar nativeCreate = require_nativeCreate();\n\n\t/** Used to stand-in for `undefined` hash values. */\n\tvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n\t/**\n\t * Sets the hash `key` to `value`.\n\t *\n\t * @private\n\t * @name set\n\t * @memberOf Hash\n\t * @param {string} key The key of the value to set.\n\t * @param {*} value The value to set.\n\t * @returns {Object} Returns the hash instance.\n\t */\n\tfunction hashSet(key, value) {\n\t var data = this.__data__;\n\t this.size += this.has(key) ? 0 : 1;\n\t data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n\t return this;\n\t}\n\n\t_hashSet = hashSet;\n\treturn _hashSet;\n}\n\nvar _Hash;\nvar hasRequired_Hash;\n\nfunction require_Hash () {\n\tif (hasRequired_Hash) return _Hash;\n\thasRequired_Hash = 1;\n\tvar hashClear = require_hashClear(),\n\t hashDelete = require_hashDelete(),\n\t hashGet = require_hashGet(),\n\t hashHas = require_hashHas(),\n\t hashSet = require_hashSet();\n\n\t/**\n\t * Creates a hash object.\n\t *\n\t * @private\n\t * @constructor\n\t * @param {Array} [entries] The key-value pairs to cache.\n\t */\n\tfunction Hash(entries) {\n\t var index = -1,\n\t length = entries == null ? 0 : entries.length;\n\n\t this.clear();\n\t while (++index < length) {\n\t var entry = entries[index];\n\t this.set(entry[0], entry[1]);\n\t }\n\t}\n\n\t// Add methods to `Hash`.\n\tHash.prototype.clear = hashClear;\n\tHash.prototype['delete'] = hashDelete;\n\tHash.prototype.get = hashGet;\n\tHash.prototype.has = hashHas;\n\tHash.prototype.set = hashSet;\n\n\t_Hash = Hash;\n\treturn _Hash;\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n\nvar _listCacheClear;\nvar hasRequired_listCacheClear;\n\nfunction require_listCacheClear () {\n\tif (hasRequired_listCacheClear) return _listCacheClear;\n\thasRequired_listCacheClear = 1;\n\tfunction listCacheClear() {\n\t this.__data__ = [];\n\t this.size = 0;\n\t}\n\n\t_listCacheClear = listCacheClear;\n\treturn _listCacheClear;\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n\nvar eq_1;\nvar hasRequiredEq;\n\nfunction requireEq () {\n\tif (hasRequiredEq) return eq_1;\n\thasRequiredEq = 1;\n\tfunction eq(value, other) {\n\t return value === other || (value !== value && other !== other);\n\t}\n\n\teq_1 = eq;\n\treturn eq_1;\n}\n\nvar _assocIndexOf;\nvar hasRequired_assocIndexOf;\n\nfunction require_assocIndexOf () {\n\tif (hasRequired_assocIndexOf) return _assocIndexOf;\n\thasRequired_assocIndexOf = 1;\n\tvar eq = requireEq();\n\n\t/**\n\t * Gets the index at which the `key` is found in `array` of key-value pairs.\n\t *\n\t * @private\n\t * @param {Array} array The array to inspect.\n\t * @param {*} key The key to search for.\n\t * @returns {number} Returns the index of the matched value, else `-1`.\n\t */\n\tfunction assocIndexOf(array, key) {\n\t var length = array.length;\n\t while (length--) {\n\t if (eq(array[length][0], key)) {\n\t return length;\n\t }\n\t }\n\t return -1;\n\t}\n\n\t_assocIndexOf = assocIndexOf;\n\treturn _assocIndexOf;\n}\n\nvar _listCacheDelete;\nvar hasRequired_listCacheDelete;\n\nfunction require_listCacheDelete () {\n\tif (hasRequired_listCacheDelete) return _listCacheDelete;\n\thasRequired_listCacheDelete = 1;\n\tvar assocIndexOf = require_assocIndexOf();\n\n\t/** Used for built-in method references. */\n\tvar arrayProto = Array.prototype;\n\n\t/** Built-in value references. */\n\tvar splice = arrayProto.splice;\n\n\t/**\n\t * Removes `key` and its value from the list cache.\n\t *\n\t * @private\n\t * @name delete\n\t * @memberOf ListCache\n\t * @param {string} key The key of the value to remove.\n\t * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n\t */\n\tfunction listCacheDelete(key) {\n\t var data = this.__data__,\n\t index = assocIndexOf(data, key);\n\n\t if (index < 0) {\n\t return false;\n\t }\n\t var lastIndex = data.length - 1;\n\t if (index == lastIndex) {\n\t data.pop();\n\t } else {\n\t splice.call(data, index, 1);\n\t }\n\t --this.size;\n\t return true;\n\t}\n\n\t_listCacheDelete = listCacheDelete;\n\treturn _listCacheDelete;\n}\n\nvar _listCacheGet;\nvar hasRequired_listCacheGet;\n\nfunction require_listCacheGet () {\n\tif (hasRequired_listCacheGet) return _listCacheGet;\n\thasRequired_listCacheGet = 1;\n\tvar assocIndexOf = require_assocIndexOf();\n\n\t/**\n\t * Gets the list cache value for `key`.\n\t *\n\t * @private\n\t * @name get\n\t * @memberOf ListCache\n\t * @param {string} key The key of the value to get.\n\t * @returns {*} Returns the entry value.\n\t */\n\tfunction listCacheGet(key) {\n\t var data = this.__data__,\n\t index = assocIndexOf(data, key);\n\n\t return index < 0 ? undefined : data[index][1];\n\t}\n\n\t_listCacheGet = listCacheGet;\n\treturn _listCacheGet;\n}\n\nvar _listCacheHas;\nvar hasRequired_listCacheHas;\n\nfunction require_listCacheHas () {\n\tif (hasRequired_listCacheHas) return _listCacheHas;\n\thasRequired_listCacheHas = 1;\n\tvar assocIndexOf = require_assocIndexOf();\n\n\t/**\n\t * Checks if a list cache value for `key` exists.\n\t *\n\t * @private\n\t * @name has\n\t * @memberOf ListCache\n\t * @param {string} key The key of the entry to check.\n\t * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n\t */\n\tfunction listCacheHas(key) {\n\t return assocIndexOf(this.__data__, key) > -1;\n\t}\n\n\t_listCacheHas = listCacheHas;\n\treturn _listCacheHas;\n}\n\nvar _listCacheSet;\nvar hasRequired_listCacheSet;\n\nfunction require_listCacheSet () {\n\tif (hasRequired_listCacheSet) return _listCacheSet;\n\thasRequired_listCacheSet = 1;\n\tvar assocIndexOf = require_assocIndexOf();\n\n\t/**\n\t * Sets the list cache `key` to `value`.\n\t *\n\t * @private\n\t * @name set\n\t * @memberOf ListCache\n\t * @param {string} key The key of the value to set.\n\t * @param {*} value The value to set.\n\t * @returns {Object} Returns the list cache instance.\n\t */\n\tfunction listCacheSet(key, value) {\n\t var data = this.__data__,\n\t index = assocIndexOf(data, key);\n\n\t if (index < 0) {\n\t ++this.size;\n\t data.push([key, value]);\n\t } else {\n\t data[index][1] = value;\n\t }\n\t return this;\n\t}\n\n\t_listCacheSet = listCacheSet;\n\treturn _listCacheSet;\n}\n\nvar _ListCache;\nvar hasRequired_ListCache;\n\nfunction require_ListCache () {\n\tif (hasRequired_ListCache) return _ListCache;\n\thasRequired_ListCache = 1;\n\tvar listCacheClear = require_listCacheClear(),\n\t listCacheDelete = require_listCacheDelete(),\n\t listCacheGet = require_listCacheGet(),\n\t listCacheHas = require_listCacheHas(),\n\t listCacheSet = require_listCacheSet();\n\n\t/**\n\t * Creates an list cache object.\n\t *\n\t * @private\n\t * @constructor\n\t * @param {Array} [entries] The key-value pairs to cache.\n\t */\n\tfunction ListCache(entries) {\n\t var index = -1,\n\t length = entries == null ? 0 : entries.length;\n\n\t this.clear();\n\t while (++index < length) {\n\t var entry = entries[index];\n\t this.set(entry[0], entry[1]);\n\t }\n\t}\n\n\t// Add methods to `ListCache`.\n\tListCache.prototype.clear = listCacheClear;\n\tListCache.prototype['delete'] = listCacheDelete;\n\tListCache.prototype.get = listCacheGet;\n\tListCache.prototype.has = listCacheHas;\n\tListCache.prototype.set = listCacheSet;\n\n\t_ListCache = ListCache;\n\treturn _ListCache;\n}\n\nvar _Map;\nvar hasRequired_Map;\n\nfunction require_Map () {\n\tif (hasRequired_Map) return _Map;\n\thasRequired_Map = 1;\n\tvar getNative = require_getNative(),\n\t root = require_root();\n\n\t/* Built-in method references that are verified to be native. */\n\tvar Map = getNative(root, 'Map');\n\n\t_Map = Map;\n\treturn _Map;\n}\n\nvar _mapCacheClear;\nvar hasRequired_mapCacheClear;\n\nfunction require_mapCacheClear () {\n\tif (hasRequired_mapCacheClear) return _mapCacheClear;\n\thasRequired_mapCacheClear = 1;\n\tvar Hash = require_Hash(),\n\t ListCache = require_ListCache(),\n\t Map = require_Map();\n\n\t/**\n\t * Removes all key-value entries from the map.\n\t *\n\t * @private\n\t * @name clear\n\t * @memberOf MapCache\n\t */\n\tfunction mapCacheClear() {\n\t this.size = 0;\n\t this.__data__ = {\n\t 'hash': new Hash,\n\t 'map': new (Map || ListCache),\n\t 'string': new Hash\n\t };\n\t}\n\n\t_mapCacheClear = mapCacheClear;\n\treturn _mapCacheClear;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n\nvar _isKeyable;\nvar hasRequired_isKeyable;\n\nfunction require_isKeyable () {\n\tif (hasRequired_isKeyable) return _isKeyable;\n\thasRequired_isKeyable = 1;\n\tfunction isKeyable(value) {\n\t var type = typeof value;\n\t return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n\t ? (value !== '__proto__')\n\t : (value === null);\n\t}\n\n\t_isKeyable = isKeyable;\n\treturn _isKeyable;\n}\n\nvar _getMapData;\nvar hasRequired_getMapData;\n\nfunction require_getMapData () {\n\tif (hasRequired_getMapData) return _getMapData;\n\thasRequired_getMapData = 1;\n\tvar isKeyable = require_isKeyable();\n\n\t/**\n\t * Gets the data for `map`.\n\t *\n\t * @private\n\t * @param {Object} map The map to query.\n\t * @param {string} key The reference key.\n\t * @returns {*} Returns the map data.\n\t */\n\tfunction getMapData(map, key) {\n\t var data = map.__data__;\n\t return isKeyable(key)\n\t ? data[typeof key == 'string' ? 'string' : 'hash']\n\t : data.map;\n\t}\n\n\t_getMapData = getMapData;\n\treturn _getMapData;\n}\n\nvar _mapCacheDelete;\nvar hasRequired_mapCacheDelete;\n\nfunction require_mapCacheDelete () {\n\tif (hasRequired_mapCacheDelete) return _mapCacheDelete;\n\thasRequired_mapCacheDelete = 1;\n\tvar getMapData = require_getMapData();\n\n\t/**\n\t * Removes `key` and its value from the map.\n\t *\n\t * @private\n\t * @name delete\n\t * @memberOf MapCache\n\t * @param {string} key The key of the value to remove.\n\t * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n\t */\n\tfunction mapCacheDelete(key) {\n\t var result = getMapData(this, key)['delete'](key);\n\t this.size -= result ? 1 : 0;\n\t return result;\n\t}\n\n\t_mapCacheDelete = mapCacheDelete;\n\treturn _mapCacheDelete;\n}\n\nvar _mapCacheGet;\nvar hasRequired_mapCacheGet;\n\nfunction require_mapCacheGet () {\n\tif (hasRequired_mapCacheGet) return _mapCacheGet;\n\thasRequired_mapCacheGet = 1;\n\tvar getMapData = require_getMapData();\n\n\t/**\n\t * Gets the map value for `key`.\n\t *\n\t * @private\n\t * @name get\n\t * @memberOf MapCache\n\t * @param {string} key The key of the value to get.\n\t * @returns {*} Returns the entry value.\n\t */\n\tfunction mapCacheGet(key) {\n\t return getMapData(this, key).get(key);\n\t}\n\n\t_mapCacheGet = mapCacheGet;\n\treturn _mapCacheGet;\n}\n\nvar _mapCacheHas;\nvar hasRequired_mapCacheHas;\n\nfunction require_mapCacheHas () {\n\tif (hasRequired_mapCacheHas) return _mapCacheHas;\n\thasRequired_mapCacheHas = 1;\n\tvar getMapData = require_getMapData();\n\n\t/**\n\t * Checks if a map value for `key` exists.\n\t *\n\t * @private\n\t * @name has\n\t * @memberOf MapCache\n\t * @param {string} key The key of the entry to check.\n\t * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n\t */\n\tfunction mapCacheHas(key) {\n\t return getMapData(this, key).has(key);\n\t}\n\n\t_mapCacheHas = mapCacheHas;\n\treturn _mapCacheHas;\n}\n\nvar _mapCacheSet;\nvar hasRequired_mapCacheSet;\n\nfunction require_mapCacheSet () {\n\tif (hasRequired_mapCacheSet) return _mapCacheSet;\n\thasRequired_mapCacheSet = 1;\n\tvar getMapData = require_getMapData();\n\n\t/**\n\t * Sets the map `key` to `value`.\n\t *\n\t * @private\n\t * @name set\n\t * @memberOf MapCache\n\t * @param {string} key The key of the value to set.\n\t * @param {*} value The value to set.\n\t * @returns {Object} Returns the map cache instance.\n\t */\n\tfunction mapCacheSet(key, value) {\n\t var data = getMapData(this, key),\n\t size = data.size;\n\n\t data.set(key, value);\n\t this.size += data.size == size ? 0 : 1;\n\t return this;\n\t}\n\n\t_mapCacheSet = mapCacheSet;\n\treturn _mapCacheSet;\n}\n\nvar _MapCache;\nvar hasRequired_MapCache;\n\nfunction require_MapCache () {\n\tif (hasRequired_MapCache) return _MapCache;\n\thasRequired_MapCache = 1;\n\tvar mapCacheClear = require_mapCacheClear(),\n\t mapCacheDelete = require_mapCacheDelete(),\n\t mapCacheGet = require_mapCacheGet(),\n\t mapCacheHas = require_mapCacheHas(),\n\t mapCacheSet = require_mapCacheSet();\n\n\t/**\n\t * Creates a map cache object to store key-value pairs.\n\t *\n\t * @private\n\t * @constructor\n\t * @param {Array} [entries] The key-value pairs to cache.\n\t */\n\tfunction MapCache(entries) {\n\t var index = -1,\n\t length = entries == null ? 0 : entries.length;\n\n\t this.clear();\n\t while (++index < length) {\n\t var entry = entries[index];\n\t this.set(entry[0], entry[1]);\n\t }\n\t}\n\n\t// Add methods to `MapCache`.\n\tMapCache.prototype.clear = mapCacheClear;\n\tMapCache.prototype['delete'] = mapCacheDelete;\n\tMapCache.prototype.get = mapCacheGet;\n\tMapCache.prototype.has = mapCacheHas;\n\tMapCache.prototype.set = mapCacheSet;\n\n\t_MapCache = MapCache;\n\treturn _MapCache;\n}\n\nvar memoize_1;\nvar hasRequiredMemoize;\n\nfunction requireMemoize () {\n\tif (hasRequiredMemoize) return memoize_1;\n\thasRequiredMemoize = 1;\n\tvar MapCache = require_MapCache();\n\n\t/** Error message constants. */\n\tvar FUNC_ERROR_TEXT = 'Expected a function';\n\n\t/**\n\t * Creates a function that memoizes the result of `func`. If `resolver` is\n\t * provided, it determines the cache key for storing the result based on the\n\t * arguments provided to the memoized function. By default, the first argument\n\t * provided to the memoized function is used as the map cache key. The `func`\n\t * is invoked with the `this` binding of the memoized function.\n\t *\n\t * **Note:** The cache is exposed as the `cache` property on the memoized\n\t * function. Its creation may be customized by replacing the `_.memoize.Cache`\n\t * constructor with one whose instances implement the\n\t * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n\t * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Function\n\t * @param {Function} func The function to have its output memoized.\n\t * @param {Function} [resolver] The function to resolve the cache key.\n\t * @returns {Function} Returns the new memoized function.\n\t * @example\n\t *\n\t * var object = { 'a': 1, 'b': 2 };\n\t * var other = { 'c': 3, 'd': 4 };\n\t *\n\t * var values = _.memoize(_.values);\n\t * values(object);\n\t * // => [1, 2]\n\t *\n\t * values(other);\n\t * // => [3, 4]\n\t *\n\t * object.a = 2;\n\t * values(object);\n\t * // => [1, 2]\n\t *\n\t * // Modify the result cache.\n\t * values.cache.set(object, ['a', 'b']);\n\t * values(object);\n\t * // => ['a', 'b']\n\t *\n\t * // Replace `_.memoize.Cache`.\n\t * _.memoize.Cache = WeakMap;\n\t */\n\tfunction memoize(func, resolver) {\n\t if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n\t throw new TypeError(FUNC_ERROR_TEXT);\n\t }\n\t var memoized = function() {\n\t var args = arguments,\n\t key = resolver ? resolver.apply(this, args) : args[0],\n\t cache = memoized.cache;\n\n\t if (cache.has(key)) {\n\t return cache.get(key);\n\t }\n\t var result = func.apply(this, args);\n\t memoized.cache = cache.set(key, result) || cache;\n\t return result;\n\t };\n\t memoized.cache = new (memoize.Cache || MapCache);\n\t return memoized;\n\t}\n\n\t// Expose `MapCache`.\n\tmemoize.Cache = MapCache;\n\n\tmemoize_1 = memoize;\n\treturn memoize_1;\n}\n\nvar _memoizeCapped;\nvar hasRequired_memoizeCapped;\n\nfunction require_memoizeCapped () {\n\tif (hasRequired_memoizeCapped) return _memoizeCapped;\n\thasRequired_memoizeCapped = 1;\n\tvar memoize = requireMemoize();\n\n\t/** Used as the maximum memoize cache size. */\n\tvar MAX_MEMOIZE_SIZE = 500;\n\n\t/**\n\t * A specialized version of `_.memoize` which clears the memoized function's\n\t * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n\t *\n\t * @private\n\t * @param {Function} func The function to have its output memoized.\n\t * @returns {Function} Returns the new memoized function.\n\t */\n\tfunction memoizeCapped(func) {\n\t var result = memoize(func, function(key) {\n\t if (cache.size === MAX_MEMOIZE_SIZE) {\n\t cache.clear();\n\t }\n\t return key;\n\t });\n\n\t var cache = result.cache;\n\t return result;\n\t}\n\n\t_memoizeCapped = memoizeCapped;\n\treturn _memoizeCapped;\n}\n\nvar _stringToPath;\nvar hasRequired_stringToPath;\n\nfunction require_stringToPath () {\n\tif (hasRequired_stringToPath) return _stringToPath;\n\thasRequired_stringToPath = 1;\n\tvar memoizeCapped = require_memoizeCapped();\n\n\t/** Used to match property names within property paths. */\n\tvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n\t/** Used to match backslashes in property paths. */\n\tvar reEscapeChar = /\\\\(\\\\)?/g;\n\n\t/**\n\t * Converts `string` to a property path array.\n\t *\n\t * @private\n\t * @param {string} string The string to convert.\n\t * @returns {Array} Returns the property path array.\n\t */\n\tvar stringToPath = memoizeCapped(function(string) {\n\t var result = [];\n\t if (string.charCodeAt(0) === 46 /* . */) {\n\t result.push('');\n\t }\n\t string.replace(rePropName, function(match, number, quote, subString) {\n\t result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n\t });\n\t return result;\n\t});\n\n\t_stringToPath = stringToPath;\n\treturn _stringToPath;\n}\n\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n\nvar _arrayMap;\nvar hasRequired_arrayMap;\n\nfunction require_arrayMap () {\n\tif (hasRequired_arrayMap) return _arrayMap;\n\thasRequired_arrayMap = 1;\n\tfunction arrayMap(array, iteratee) {\n\t var index = -1,\n\t length = array == null ? 0 : array.length,\n\t result = Array(length);\n\n\t while (++index < length) {\n\t result[index] = iteratee(array[index], index, array);\n\t }\n\t return result;\n\t}\n\n\t_arrayMap = arrayMap;\n\treturn _arrayMap;\n}\n\nvar _baseToString;\nvar hasRequired_baseToString;\n\nfunction require_baseToString () {\n\tif (hasRequired_baseToString) return _baseToString;\n\thasRequired_baseToString = 1;\n\tvar Symbol = require_Symbol(),\n\t arrayMap = require_arrayMap(),\n\t isArray = requireIsArray(),\n\t isSymbol = requireIsSymbol();\n\n\t/** Used to convert symbols to primitives and strings. */\n\tvar symbolProto = Symbol ? Symbol.prototype : undefined,\n\t symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n\t/**\n\t * The base implementation of `_.toString` which doesn't convert nullish\n\t * values to empty strings.\n\t *\n\t * @private\n\t * @param {*} value The value to process.\n\t * @returns {string} Returns the string.\n\t */\n\tfunction baseToString(value) {\n\t // Exit early for strings to avoid a performance hit in some environments.\n\t if (typeof value == 'string') {\n\t return value;\n\t }\n\t if (isArray(value)) {\n\t // Recursively convert values (susceptible to call stack limits).\n\t return arrayMap(value, baseToString) + '';\n\t }\n\t if (isSymbol(value)) {\n\t return symbolToString ? symbolToString.call(value) : '';\n\t }\n\t var result = (value + '');\n\t return (result == '0' && (1 / value) == -Infinity) ? '-0' : result;\n\t}\n\n\t_baseToString = baseToString;\n\treturn _baseToString;\n}\n\nvar toString_1;\nvar hasRequiredToString;\n\nfunction requireToString () {\n\tif (hasRequiredToString) return toString_1;\n\thasRequiredToString = 1;\n\tvar baseToString = require_baseToString();\n\n\t/**\n\t * Converts `value` to a string. An empty string is returned for `null`\n\t * and `undefined` values. The sign of `-0` is preserved.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to convert.\n\t * @returns {string} Returns the converted string.\n\t * @example\n\t *\n\t * _.toString(null);\n\t * // => ''\n\t *\n\t * _.toString(-0);\n\t * // => '-0'\n\t *\n\t * _.toString([1, 2, 3]);\n\t * // => '1,2,3'\n\t */\n\tfunction toString(value) {\n\t return value == null ? '' : baseToString(value);\n\t}\n\n\ttoString_1 = toString;\n\treturn toString_1;\n}\n\nvar _castPath;\nvar hasRequired_castPath;\n\nfunction require_castPath () {\n\tif (hasRequired_castPath) return _castPath;\n\thasRequired_castPath = 1;\n\tvar isArray = requireIsArray(),\n\t isKey = require_isKey(),\n\t stringToPath = require_stringToPath(),\n\t toString = requireToString();\n\n\t/**\n\t * Casts `value` to a path array if it's not one.\n\t *\n\t * @private\n\t * @param {*} value The value to inspect.\n\t * @param {Object} [object] The object to query keys on.\n\t * @returns {Array} Returns the cast property path array.\n\t */\n\tfunction castPath(value, object) {\n\t if (isArray(value)) {\n\t return value;\n\t }\n\t return isKey(value, object) ? [value] : stringToPath(toString(value));\n\t}\n\n\t_castPath = castPath;\n\treturn _castPath;\n}\n\nvar _toKey;\nvar hasRequired_toKey;\n\nfunction require_toKey () {\n\tif (hasRequired_toKey) return _toKey;\n\thasRequired_toKey = 1;\n\tvar isSymbol = requireIsSymbol();\n\n\t/**\n\t * Converts `value` to a string key if it's not a string or symbol.\n\t *\n\t * @private\n\t * @param {*} value The value to inspect.\n\t * @returns {string|symbol} Returns the key.\n\t */\n\tfunction toKey(value) {\n\t if (typeof value == 'string' || isSymbol(value)) {\n\t return value;\n\t }\n\t var result = (value + '');\n\t return (result == '0' && (1 / value) == -Infinity) ? '-0' : result;\n\t}\n\n\t_toKey = toKey;\n\treturn _toKey;\n}\n\nvar _baseGet;\nvar hasRequired_baseGet;\n\nfunction require_baseGet () {\n\tif (hasRequired_baseGet) return _baseGet;\n\thasRequired_baseGet = 1;\n\tvar castPath = require_castPath(),\n\t toKey = require_toKey();\n\n\t/**\n\t * The base implementation of `_.get` without support for default values.\n\t *\n\t * @private\n\t * @param {Object} object The object to query.\n\t * @param {Array|string} path The path of the property to get.\n\t * @returns {*} Returns the resolved value.\n\t */\n\tfunction baseGet(object, path) {\n\t path = castPath(path, object);\n\n\t var index = 0,\n\t length = path.length;\n\n\t while (object != null && index < length) {\n\t object = object[toKey(path[index++])];\n\t }\n\t return (index && index == length) ? object : undefined;\n\t}\n\n\t_baseGet = baseGet;\n\treturn _baseGet;\n}\n\nvar get_1;\nvar hasRequiredGet;\n\nfunction requireGet () {\n\tif (hasRequiredGet) return get_1;\n\thasRequiredGet = 1;\n\tvar baseGet = require_baseGet();\n\n\t/**\n\t * Gets the value at `path` of `object`. If the resolved value is\n\t * `undefined`, the `defaultValue` is returned in its place.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.7.0\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @param {Array|string} path The path of the property to get.\n\t * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n\t * @returns {*} Returns the resolved value.\n\t * @example\n\t *\n\t * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n\t *\n\t * _.get(object, 'a[0].b.c');\n\t * // => 3\n\t *\n\t * _.get(object, ['a', '0', 'b', 'c']);\n\t * // => 3\n\t *\n\t * _.get(object, 'a.b.c', 'default');\n\t * // => 'default'\n\t */\n\tfunction get(object, path, defaultValue) {\n\t var result = object == null ? undefined : baseGet(object, path);\n\t return result === undefined ? defaultValue : result;\n\t}\n\n\tget_1 = get;\n\treturn get_1;\n}\n\nvar getExports = requireGet();\nvar get = /*@__PURE__*/getDefaultExportFromCjs(getExports);\n\nvar _defineProperty;\nvar hasRequired_defineProperty;\n\nfunction require_defineProperty () {\n\tif (hasRequired_defineProperty) return _defineProperty;\n\thasRequired_defineProperty = 1;\n\tvar getNative = require_getNative();\n\n\tvar defineProperty = (function() {\n\t try {\n\t var func = getNative(Object, 'defineProperty');\n\t func({}, '', {});\n\t return func;\n\t } catch (e) {}\n\t}());\n\n\t_defineProperty = defineProperty;\n\treturn _defineProperty;\n}\n\nvar _baseAssignValue;\nvar hasRequired_baseAssignValue;\n\nfunction require_baseAssignValue () {\n\tif (hasRequired_baseAssignValue) return _baseAssignValue;\n\thasRequired_baseAssignValue = 1;\n\tvar defineProperty = require_defineProperty();\n\n\t/**\n\t * The base implementation of `assignValue` and `assignMergeValue` without\n\t * value checks.\n\t *\n\t * @private\n\t * @param {Object} object The object to modify.\n\t * @param {string} key The key of the property to assign.\n\t * @param {*} value The value to assign.\n\t */\n\tfunction baseAssignValue(object, key, value) {\n\t if (key == '__proto__' && defineProperty) {\n\t defineProperty(object, key, {\n\t 'configurable': true,\n\t 'enumerable': true,\n\t 'value': value,\n\t 'writable': true\n\t });\n\t } else {\n\t object[key] = value;\n\t }\n\t}\n\n\t_baseAssignValue = baseAssignValue;\n\treturn _baseAssignValue;\n}\n\nvar _assignValue;\nvar hasRequired_assignValue;\n\nfunction require_assignValue () {\n\tif (hasRequired_assignValue) return _assignValue;\n\thasRequired_assignValue = 1;\n\tvar baseAssignValue = require_baseAssignValue(),\n\t eq = requireEq();\n\n\t/** Used for built-in method references. */\n\tvar objectProto = Object.prototype;\n\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\n\t/**\n\t * Assigns `value` to `key` of `object` if the existing value is not equivalent\n\t * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n\t * for equality comparisons.\n\t *\n\t * @private\n\t * @param {Object} object The object to modify.\n\t * @param {string} key The key of the property to assign.\n\t * @param {*} value The value to assign.\n\t */\n\tfunction assignValue(object, key, value) {\n\t var objValue = object[key];\n\t if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n\t (value === undefined && !(key in object))) {\n\t baseAssignValue(object, key, value);\n\t }\n\t}\n\n\t_assignValue = assignValue;\n\treturn _assignValue;\n}\n\n/** Used as references for various `Number` constants. */\n\nvar _isIndex;\nvar hasRequired_isIndex;\n\nfunction require_isIndex () {\n\tif (hasRequired_isIndex) return _isIndex;\n\thasRequired_isIndex = 1;\n\tvar MAX_SAFE_INTEGER = 9007199254740991;\n\n\t/** Used to detect unsigned integer values. */\n\tvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n\t/**\n\t * Checks if `value` is a valid array-like index.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n\t * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n\t */\n\tfunction isIndex(value, length) {\n\t var type = typeof value;\n\t length = length == null ? MAX_SAFE_INTEGER : length;\n\n\t return !!length &&\n\t (type == 'number' ||\n\t (type != 'symbol' && reIsUint.test(value))) &&\n\t (value > -1 && value % 1 == 0 && value < length);\n\t}\n\n\t_isIndex = isIndex;\n\treturn _isIndex;\n}\n\nvar _baseSet;\nvar hasRequired_baseSet;\n\nfunction require_baseSet () {\n\tif (hasRequired_baseSet) return _baseSet;\n\thasRequired_baseSet = 1;\n\tvar assignValue = require_assignValue(),\n\t castPath = require_castPath(),\n\t isIndex = require_isIndex(),\n\t isObject = requireIsObject(),\n\t toKey = require_toKey();\n\n\t/**\n\t * The base implementation of `_.set`.\n\t *\n\t * @private\n\t * @param {Object} object The object to modify.\n\t * @param {Array|string} path The path of the property to set.\n\t * @param {*} value The value to set.\n\t * @param {Function} [customizer] The function to customize path creation.\n\t * @returns {Object} Returns `object`.\n\t */\n\tfunction baseSet(object, path, value, customizer) {\n\t if (!isObject(object)) {\n\t return object;\n\t }\n\t path = castPath(path, object);\n\n\t var index = -1,\n\t length = path.length,\n\t lastIndex = length - 1,\n\t nested = object;\n\n\t while (nested != null && ++index < length) {\n\t var key = toKey(path[index]),\n\t newValue = value;\n\n\t if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n\t return object;\n\t }\n\n\t if (index != lastIndex) {\n\t var objValue = nested[key];\n\t newValue = customizer ? customizer(objValue, key, nested) : undefined;\n\t if (newValue === undefined) {\n\t newValue = isObject(objValue)\n\t ? objValue\n\t : (isIndex(path[index + 1]) ? [] : {});\n\t }\n\t }\n\t assignValue(nested, key, newValue);\n\t nested = nested[key];\n\t }\n\t return object;\n\t}\n\n\t_baseSet = baseSet;\n\treturn _baseSet;\n}\n\nvar set_1;\nvar hasRequiredSet;\n\nfunction requireSet () {\n\tif (hasRequiredSet) return set_1;\n\thasRequiredSet = 1;\n\tvar baseSet = require_baseSet();\n\n\t/**\n\t * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n\t * it's created. Arrays are created for missing index properties while objects\n\t * are created for all other missing properties. Use `_.setWith` to customize\n\t * `path` creation.\n\t *\n\t * **Note:** This method mutates `object`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.7.0\n\t * @category Object\n\t * @param {Object} object The object to modify.\n\t * @param {Array|string} path The path of the property to set.\n\t * @param {*} value The value to set.\n\t * @returns {Object} Returns `object`.\n\t * @example\n\t *\n\t * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n\t *\n\t * _.set(object, 'a[0].b.c', 4);\n\t * console.log(object.a[0].b.c);\n\t * // => 4\n\t *\n\t * _.set(object, ['x', '0', 'y', 'z'], 5);\n\t * console.log(object.x[0].y.z);\n\t * // => 5\n\t */\n\tfunction set(object, path, value) {\n\t return object == null ? object : baseSet(object, path, value);\n\t}\n\n\tset_1 = set;\n\treturn set_1;\n}\n\nvar setExports = requireSet();\nvar set = /*@__PURE__*/getDefaultExportFromCjs(setExports);\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n\nvar _copyArray;\nvar hasRequired_copyArray;\n\nfunction require_copyArray () {\n\tif (hasRequired_copyArray) return _copyArray;\n\thasRequired_copyArray = 1;\n\tfunction copyArray(source, array) {\n\t var index = -1,\n\t length = source.length;\n\n\t array || (array = Array(length));\n\t while (++index < length) {\n\t array[index] = source[index];\n\t }\n\t return array;\n\t}\n\n\t_copyArray = copyArray;\n\treturn _copyArray;\n}\n\nvar toPath_1;\nvar hasRequiredToPath;\n\nfunction requireToPath () {\n\tif (hasRequiredToPath) return toPath_1;\n\thasRequiredToPath = 1;\n\tvar arrayMap = require_arrayMap(),\n\t copyArray = require_copyArray(),\n\t isArray = requireIsArray(),\n\t isSymbol = requireIsSymbol(),\n\t stringToPath = require_stringToPath(),\n\t toKey = require_toKey(),\n\t toString = requireToString();\n\n\t/**\n\t * Converts `value` to a property path array.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Util\n\t * @param {*} value The value to convert.\n\t * @returns {Array} Returns the new property path array.\n\t * @example\n\t *\n\t * _.toPath('a.b.c');\n\t * // => ['a', 'b', 'c']\n\t *\n\t * _.toPath('a[0].b.c');\n\t * // => ['a', '0', 'b', 'c']\n\t */\n\tfunction toPath(value) {\n\t if (isArray(value)) {\n\t return arrayMap(value, toKey);\n\t }\n\t return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n\t}\n\n\ttoPath_1 = toPath;\n\treturn toPath_1;\n}\n\nvar toPathExports = requireToPath();\nvar toPath = /*@__PURE__*/getDefaultExportFromCjs(toPathExports);\n\nvar define$2 = {\n // access data field\n data: function data(params) {\n var defaults = {\n field: 'data',\n bindingEvent: 'data',\n allowBinding: false,\n allowSetting: false,\n allowGetting: false,\n settingEvent: 'data',\n settingTriggersEvent: false,\n triggerFnName: 'trigger',\n immutableKeys: {},\n // key => true if immutable\n updateStyle: false,\n beforeGet: function beforeGet(self) {},\n beforeSet: function beforeSet(self, obj) {},\n onSet: function onSet(self) {},\n canSet: function canSet(self) {\n return true;\n }\n };\n params = extend({}, defaults, params);\n return function dataImpl(name, value) {\n var p = params;\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n var single = selfIsArrayLike ? self[0] : self;\n\n // .data('foo', ...)\n if (string(name)) {\n // set or get property\n var isPathLike = name.indexOf('.') !== -1; // there might be a normal field with a dot \n var path = isPathLike && toPath(name);\n\n // .data('foo')\n if (p.allowGetting && value === undefined) {\n // get\n\n var ret;\n if (single) {\n p.beforeGet(single);\n\n // check if it's path and a field with the same name doesn't exist\n if (path && single._private[p.field][name] === undefined) {\n ret = get(single._private[p.field], path);\n } else {\n ret = single._private[p.field][name];\n }\n }\n return ret;\n\n // .data('foo', 'bar')\n } else if (p.allowSetting && value !== undefined) {\n // set\n var valid = !p.immutableKeys[name];\n if (valid) {\n var change = _defineProperty$1({}, name, value);\n p.beforeSet(self, change);\n for (var i = 0, l = all.length; i < l; i++) {\n var ele = all[i];\n if (p.canSet(ele)) {\n if (path && single._private[p.field][name] === undefined) {\n set(ele._private[p.field], path, value);\n } else {\n ele._private[p.field][name] = value;\n }\n }\n }\n\n // update mappers if asked\n if (p.updateStyle) {\n self.updateStyle();\n }\n\n // call onSet callback\n p.onSet(self);\n if (p.settingTriggersEvent) {\n self[p.triggerFnName](p.settingEvent);\n }\n }\n }\n\n // .data({ 'foo': 'bar' })\n } else if (p.allowSetting && plainObject(name)) {\n // extend\n var obj = name;\n var k, v;\n var keys = Object.keys(obj);\n p.beforeSet(self, obj);\n for (var _i = 0; _i < keys.length; _i++) {\n k = keys[_i];\n v = obj[k];\n var _valid = !p.immutableKeys[k];\n if (_valid) {\n for (var j = 0; j < all.length; j++) {\n var _ele = all[j];\n if (p.canSet(_ele)) {\n _ele._private[p.field][k] = v;\n }\n }\n }\n }\n\n // update mappers if asked\n if (p.updateStyle) {\n self.updateStyle();\n }\n\n // call onSet callback\n p.onSet(self);\n if (p.settingTriggersEvent) {\n self[p.triggerFnName](p.settingEvent);\n }\n\n // .data(function(){ ... })\n } else if (p.allowBinding && fn$6(name)) {\n // bind to event\n var fn = name;\n self.on(p.bindingEvent, fn);\n\n // .data()\n } else if (p.allowGetting && name === undefined) {\n // get whole object\n var _ret;\n if (single) {\n p.beforeGet(single);\n _ret = single._private[p.field];\n }\n return _ret;\n }\n return self; // maintain chainability\n }; // function\n },\n // data\n\n // remove data field\n removeData: function removeData(params) {\n var defaults = {\n field: 'data',\n event: 'data',\n triggerFnName: 'trigger',\n triggerEvent: false,\n immutableKeys: {} // key => true if immutable\n };\n params = extend({}, defaults, params);\n return function removeDataImpl(names) {\n var p = params;\n var self = this;\n var selfIsArrayLike = self.length !== undefined;\n var all = selfIsArrayLike ? self : [self]; // put in array if not array-like\n\n // .removeData('foo bar')\n if (string(names)) {\n // then get the list of keys, and delete them\n var keys = names.split(/\\s+/);\n var l = keys.length;\n for (var i = 0; i < l; i++) {\n // delete each non-empty key\n var key = keys[i];\n if (emptyString(key)) {\n continue;\n }\n var valid = !p.immutableKeys[key]; // not valid if immutable\n if (valid) {\n for (var i_a = 0, l_a = all.length; i_a < l_a; i_a++) {\n all[i_a]._private[p.field][key] = undefined;\n }\n }\n }\n if (p.triggerEvent) {\n self[p.triggerFnName](p.event);\n }\n\n // .removeData()\n } else if (names === undefined) {\n // then delete all keys\n\n for (var _i_a = 0, _l_a = all.length; _i_a < _l_a; _i_a++) {\n var _privateFields = all[_i_a]._private[p.field];\n var _keys = Object.keys(_privateFields);\n for (var _i2 = 0; _i2 < _keys.length; _i2++) {\n var _key = _keys[_i2];\n var validKeyToDelete = !p.immutableKeys[_key];\n if (validKeyToDelete) {\n _privateFields[_key] = undefined;\n }\n }\n }\n if (p.triggerEvent) {\n self[p.triggerFnName](p.event);\n }\n }\n return self; // maintain chaining\n }; // function\n } // removeData\n}; // define\n\nvar define$1 = {\n eventAliasesOn: function eventAliasesOn(proto) {\n var p = proto;\n p.addListener = p.listen = p.bind = p.on;\n p.unlisten = p.unbind = p.off = p.removeListener;\n p.trigger = p.emit;\n\n // this is just a wrapper alias of .on()\n p.pon = p.promiseOn = function (events, selector) {\n var self = this;\n var args = Array.prototype.slice.call(arguments, 0);\n return new Promise$1(function (resolve, reject) {\n var callback = function callback(e) {\n self.off.apply(self, offArgs);\n resolve(e);\n };\n var onArgs = args.concat([callback]);\n var offArgs = onArgs.concat([]);\n self.on.apply(self, onArgs);\n });\n };\n }\n}; // define\n\n// use this module to cherry pick functions into your prototype\n// (useful for functions shared between the core and collections, for example)\n\nvar define = {};\n[define$3, define$2, define$1].forEach(function (m) {\n extend(define, m);\n});\n\nvar elesfn$i = {\n animate: define.animate(),\n animation: define.animation(),\n animated: define.animated(),\n clearQueue: define.clearQueue(),\n delay: define.delay(),\n delayAnimation: define.delayAnimation(),\n stop: define.stop()\n};\n\nvar elesfn$h = {\n classes: function classes(_classes) {\n var self = this;\n if (_classes === undefined) {\n var ret = [];\n self[0]._private.classes.forEach(function (cls) {\n return ret.push(cls);\n });\n return ret;\n } else if (!array(_classes)) {\n // extract classes from string\n _classes = (_classes || '').match(/\\S+/g) || [];\n }\n var changed = [];\n var classesSet = new Set$1(_classes);\n\n // check and update each ele\n for (var j = 0; j < self.length; j++) {\n var ele = self[j];\n var _p = ele._private;\n var eleClasses = _p.classes;\n var changedEle = false;\n\n // check if ele has all of the passed classes\n for (var i = 0; i < _classes.length; i++) {\n var cls = _classes[i];\n var eleHasClass = eleClasses.has(cls);\n if (!eleHasClass) {\n changedEle = true;\n break;\n }\n }\n\n // check if ele has classes outside of those passed\n if (!changedEle) {\n changedEle = eleClasses.size !== _classes.length;\n }\n if (changedEle) {\n _p.classes = classesSet;\n changed.push(ele);\n }\n }\n\n // trigger update style on those eles that had class changes\n if (changed.length > 0) {\n this.spawn(changed).updateStyle().emit('class');\n }\n return self;\n },\n addClass: function addClass(classes) {\n return this.toggleClass(classes, true);\n },\n hasClass: function hasClass(className) {\n var ele = this[0];\n return ele != null && ele._private.classes.has(className);\n },\n toggleClass: function toggleClass(classes, toggle) {\n if (!array(classes)) {\n // extract classes from string\n classes = classes.match(/\\S+/g) || [];\n }\n var self = this;\n var toggleUndefd = toggle === undefined;\n var changed = []; // eles who had classes changed\n\n for (var i = 0, il = self.length; i < il; i++) {\n var ele = self[i];\n var eleClasses = ele._private.classes;\n var changedEle = false;\n for (var j = 0; j < classes.length; j++) {\n var cls = classes[j];\n var hasClass = eleClasses.has(cls);\n var changedNow = false;\n if (toggle || toggleUndefd && !hasClass) {\n eleClasses.add(cls);\n changedNow = true;\n } else if (!toggle || toggleUndefd && hasClass) {\n eleClasses[\"delete\"](cls);\n changedNow = true;\n }\n if (!changedEle && changedNow) {\n changed.push(ele);\n changedEle = true;\n }\n } // for j classes\n } // for i eles\n\n // trigger update style on those eles that had class changes\n if (changed.length > 0) {\n this.spawn(changed).updateStyle().emit('class');\n }\n return self;\n },\n removeClass: function removeClass(classes) {\n return this.toggleClass(classes, false);\n },\n flashClass: function flashClass(classes, duration) {\n var self = this;\n if (duration == null) {\n duration = 250;\n } else if (duration === 0) {\n return self; // nothing to do really\n }\n self.addClass(classes);\n setTimeout(function () {\n self.removeClass(classes);\n }, duration);\n return self;\n }\n};\nelesfn$h.className = elesfn$h.classNames = elesfn$h.classes;\n\n// tokens in the query language\nvar tokens = {\n metaChar: '[\\\\!\\\\\"\\\\#\\\\$\\\\%\\\\&\\\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\.\\\\/\\\\:\\\\;\\\\<\\\\=\\\\>\\\\?\\\\@\\\\[\\\\]\\\\^\\\\`\\\\{\\\\|\\\\}\\\\~]',\n // chars we need to escape in let names, etc\n comparatorOp: '=|\\\\!=|>|>=|<|<=|\\\\$=|\\\\^=|\\\\*=',\n // binary comparison op (used in data selectors)\n boolOp: '\\\\?|\\\\!|\\\\^',\n // boolean (unary) operators (used in data selectors)\n string: '\"(?:\\\\\\\\\"|[^\"])*\"' + '|' + \"'(?:\\\\\\\\'|[^'])*'\",\n // string literals (used in data selectors) -- doublequotes | singlequotes\n number: number,\n // number literal (used in data selectors) --- e.g. 0.1234, 1234, 12e123\n meta: 'degree|indegree|outdegree',\n // allowed metadata fields (i.e. allowed functions to use from Collection)\n separator: '\\\\s*,\\\\s*',\n // queries are separated by commas, e.g. edge[foo = 'bar'], node.someClass\n descendant: '\\\\s+',\n child: '\\\\s+>\\\\s+',\n subject: '\\\\$',\n group: 'node|edge|\\\\*',\n directedEdge: '\\\\s+->\\\\s+',\n undirectedEdge: '\\\\s+<->\\\\s+'\n};\ntokens.variable = '(?:[\\\\w-.]|(?:\\\\\\\\' + tokens.metaChar + '))+'; // a variable name can have letters, numbers, dashes, and periods\ntokens.className = '(?:[\\\\w-]|(?:\\\\\\\\' + tokens.metaChar + '))+'; // a class name has the same rules as a variable except it can't have a '.' in the name\ntokens.value = tokens.string + '|' + tokens.number; // a value literal, either a string or number\ntokens.id = tokens.variable; // an element id (follows variable conventions)\n\n(function () {\n var ops, op, i;\n\n // add @ variants to comparatorOp\n ops = tokens.comparatorOp.split('|');\n for (i = 0; i < ops.length; i++) {\n op = ops[i];\n tokens.comparatorOp += '|@' + op;\n }\n\n // add ! variants to comparatorOp\n ops = tokens.comparatorOp.split('|');\n for (i = 0; i < ops.length; i++) {\n op = ops[i];\n if (op.indexOf('!') >= 0) {\n continue;\n } // skip ops that explicitly contain !\n if (op === '=') {\n continue;\n } // skip = b/c != is explicitly defined\n\n tokens.comparatorOp += '|\\\\!' + op;\n }\n})();\n\n/**\n * Make a new query object\n *\n * @prop type {Type} The type enum (int) of the query\n * @prop checks List of checks to make against an ele to test for a match\n */\nvar newQuery = function newQuery() {\n return {\n checks: []\n };\n};\n\n/**\n * A check type enum-like object. Uses integer values for fast match() lookup.\n * The ordering does not matter as long as the ints are unique.\n */\nvar Type = {\n /** E.g. node */\n GROUP: 0,\n /** A collection of elements */\n COLLECTION: 1,\n /** A filter(ele) function */\n FILTER: 2,\n /** E.g. [foo > 1] */\n DATA_COMPARE: 3,\n /** E.g. [foo] */\n DATA_EXIST: 4,\n /** E.g. [?foo] */\n DATA_BOOL: 5,\n /** E.g. [[degree > 2]] */\n META_COMPARE: 6,\n /** E.g. :selected */\n STATE: 7,\n /** E.g. #foo */\n ID: 8,\n /** E.g. .foo */\n CLASS: 9,\n /** E.g. #foo <-> #bar */\n UNDIRECTED_EDGE: 10,\n /** E.g. #foo -> #bar */\n DIRECTED_EDGE: 11,\n /** E.g. $#foo -> #bar */\n NODE_SOURCE: 12,\n /** E.g. #foo -> $#bar */\n NODE_TARGET: 13,\n /** E.g. $#foo <-> #bar */\n NODE_NEIGHBOR: 14,\n /** E.g. #foo > #bar */\n CHILD: 15,\n /** E.g. #foo #bar */\n DESCENDANT: 16,\n /** E.g. $#foo > #bar */\n PARENT: 17,\n /** E.g. $#foo #bar */\n ANCESTOR: 18,\n /** E.g. #foo > $bar > #baz */\n COMPOUND_SPLIT: 19,\n /** Always matches, useful placeholder for subject in `COMPOUND_SPLIT` */\n TRUE: 20\n};\n\nvar stateSelectors = [{\n selector: ':selected',\n matches: function matches(ele) {\n return ele.selected();\n }\n}, {\n selector: ':unselected',\n matches: function matches(ele) {\n return !ele.selected();\n }\n}, {\n selector: ':selectable',\n matches: function matches(ele) {\n return ele.selectable();\n }\n}, {\n selector: ':unselectable',\n matches: function matches(ele) {\n return !ele.selectable();\n }\n}, {\n selector: ':locked',\n matches: function matches(ele) {\n return ele.locked();\n }\n}, {\n selector: ':unlocked',\n matches: function matches(ele) {\n return !ele.locked();\n }\n}, {\n selector: ':visible',\n matches: function matches(ele) {\n return ele.visible();\n }\n}, {\n selector: ':hidden',\n matches: function matches(ele) {\n return !ele.visible();\n }\n}, {\n selector: ':transparent',\n matches: function matches(ele) {\n return ele.transparent();\n }\n}, {\n selector: ':grabbed',\n matches: function matches(ele) {\n return ele.grabbed();\n }\n}, {\n selector: ':free',\n matches: function matches(ele) {\n return !ele.grabbed();\n }\n}, {\n selector: ':removed',\n matches: function matches(ele) {\n return ele.removed();\n }\n}, {\n selector: ':inside',\n matches: function matches(ele) {\n return !ele.removed();\n }\n}, {\n selector: ':grabbable',\n matches: function matches(ele) {\n return ele.grabbable();\n }\n}, {\n selector: ':ungrabbable',\n matches: function matches(ele) {\n return !ele.grabbable();\n }\n}, {\n selector: ':animated',\n matches: function matches(ele) {\n return ele.animated();\n }\n}, {\n selector: ':unanimated',\n matches: function matches(ele) {\n return !ele.animated();\n }\n}, {\n selector: ':parent',\n matches: function matches(ele) {\n return ele.isParent();\n }\n}, {\n selector: ':childless',\n matches: function matches(ele) {\n return ele.isChildless();\n }\n}, {\n selector: ':child',\n matches: function matches(ele) {\n return ele.isChild();\n }\n}, {\n selector: ':orphan',\n matches: function matches(ele) {\n return ele.isOrphan();\n }\n}, {\n selector: ':nonorphan',\n matches: function matches(ele) {\n return ele.isChild();\n }\n}, {\n selector: ':compound',\n matches: function matches(ele) {\n if (ele.isNode()) {\n return ele.isParent();\n } else {\n return ele.source().isParent() || ele.target().isParent();\n }\n }\n}, {\n selector: ':loop',\n matches: function matches(ele) {\n return ele.isLoop();\n }\n}, {\n selector: ':simple',\n matches: function matches(ele) {\n return ele.isSimple();\n }\n}, {\n selector: ':active',\n matches: function matches(ele) {\n return ele.active();\n }\n}, {\n selector: ':inactive',\n matches: function matches(ele) {\n return !ele.active();\n }\n}, {\n selector: ':backgrounding',\n matches: function matches(ele) {\n return ele.backgrounding();\n }\n}, {\n selector: ':nonbackgrounding',\n matches: function matches(ele) {\n return !ele.backgrounding();\n }\n}].sort(function (a, b) {\n // n.b. selectors that are starting substrings of others must have the longer ones first\n return descending(a.selector, b.selector);\n});\nvar lookup = function () {\n var selToFn = {};\n var s;\n for (var i = 0; i < stateSelectors.length; i++) {\n s = stateSelectors[i];\n selToFn[s.selector] = s.matches;\n }\n return selToFn;\n}();\nvar stateSelectorMatches = function stateSelectorMatches(sel, ele) {\n return lookup[sel](ele);\n};\nvar stateSelectorRegex = '(' + stateSelectors.map(function (s) {\n return s.selector;\n}).join('|') + ')';\n\n// when a token like a variable has escaped meta characters, we need to clean the backslashes out\n// so that values get compared properly in Selector.filter()\nvar cleanMetaChars = function cleanMetaChars(str) {\n return str.replace(new RegExp('\\\\\\\\(' + tokens.metaChar + ')', 'g'), function (match, $1) {\n return $1;\n });\n};\nvar replaceLastQuery = function replaceLastQuery(selector, examiningQuery, replacementQuery) {\n selector[selector.length - 1] = replacementQuery;\n};\n\n// NOTE: add new expression syntax here to have it recognised by the parser;\n// - a query contains all adjacent (i.e. no separator in between) expressions;\n// - the current query is stored in selector[i]\n// - you need to check the query objects in match() for it actually filter properly, but that's pretty straight forward\nvar exprs = [{\n name: 'group',\n // just used for identifying when debugging\n query: true,\n regex: '(' + tokens.group + ')',\n populate: function populate(selector, query, _ref) {\n var _ref2 = _slicedToArray(_ref, 1),\n group = _ref2[0];\n query.checks.push({\n type: Type.GROUP,\n value: group === '*' ? group : group + 's'\n });\n }\n}, {\n name: 'state',\n query: true,\n regex: stateSelectorRegex,\n populate: function populate(selector, query, _ref3) {\n var _ref4 = _slicedToArray(_ref3, 1),\n state = _ref4[0];\n query.checks.push({\n type: Type.STATE,\n value: state\n });\n }\n}, {\n name: 'id',\n query: true,\n regex: '\\\\#(' + tokens.id + ')',\n populate: function populate(selector, query, _ref5) {\n var _ref6 = _slicedToArray(_ref5, 1),\n id = _ref6[0];\n query.checks.push({\n type: Type.ID,\n value: cleanMetaChars(id)\n });\n }\n}, {\n name: 'className',\n query: true,\n regex: '\\\\.(' + tokens.className + ')',\n populate: function populate(selector, query, _ref7) {\n var _ref8 = _slicedToArray(_ref7, 1),\n className = _ref8[0];\n query.checks.push({\n type: Type.CLASS,\n value: cleanMetaChars(className)\n });\n }\n}, {\n name: 'dataExists',\n query: true,\n regex: '\\\\[\\\\s*(' + tokens.variable + ')\\\\s*\\\\]',\n populate: function populate(selector, query, _ref9) {\n var _ref10 = _slicedToArray(_ref9, 1),\n variable = _ref10[0];\n query.checks.push({\n type: Type.DATA_EXIST,\n field: cleanMetaChars(variable)\n });\n }\n}, {\n name: 'dataCompare',\n query: true,\n regex: '\\\\[\\\\s*(' + tokens.variable + ')\\\\s*(' + tokens.comparatorOp + ')\\\\s*(' + tokens.value + ')\\\\s*\\\\]',\n populate: function populate(selector, query, _ref11) {\n var _ref12 = _slicedToArray(_ref11, 3),\n variable = _ref12[0],\n comparatorOp = _ref12[1],\n value = _ref12[2];\n var valueIsString = new RegExp('^' + tokens.string + '$').exec(value) != null;\n if (valueIsString) {\n value = value.substring(1, value.length - 1);\n } else {\n value = parseFloat(value);\n }\n query.checks.push({\n type: Type.DATA_COMPARE,\n field: cleanMetaChars(variable),\n operator: comparatorOp,\n value: value\n });\n }\n}, {\n name: 'dataBool',\n query: true,\n regex: '\\\\[\\\\s*(' + tokens.boolOp + ')\\\\s*(' + tokens.variable + ')\\\\s*\\\\]',\n populate: function populate(selector, query, _ref13) {\n var _ref14 = _slicedToArray(_ref13, 2),\n boolOp = _ref14[0],\n variable = _ref14[1];\n query.checks.push({\n type: Type.DATA_BOOL,\n field: cleanMetaChars(variable),\n operator: boolOp\n });\n }\n}, {\n name: 'metaCompare',\n query: true,\n regex: '\\\\[\\\\[\\\\s*(' + tokens.meta + ')\\\\s*(' + tokens.comparatorOp + ')\\\\s*(' + tokens.number + ')\\\\s*\\\\]\\\\]',\n populate: function populate(selector, query, _ref15) {\n var _ref16 = _slicedToArray(_ref15, 3),\n meta = _ref16[0],\n comparatorOp = _ref16[1],\n number = _ref16[2];\n query.checks.push({\n type: Type.META_COMPARE,\n field: cleanMetaChars(meta),\n operator: comparatorOp,\n value: parseFloat(number)\n });\n }\n}, {\n name: 'nextQuery',\n separator: true,\n regex: tokens.separator,\n populate: function populate(selector, query) {\n var currentSubject = selector.currentSubject;\n var edgeCount = selector.edgeCount;\n var compoundCount = selector.compoundCount;\n var lastQ = selector[selector.length - 1];\n if (currentSubject != null) {\n lastQ.subject = currentSubject;\n selector.currentSubject = null;\n }\n lastQ.edgeCount = edgeCount;\n lastQ.compoundCount = compoundCount;\n selector.edgeCount = 0;\n selector.compoundCount = 0;\n\n // go on to next query\n var nextQuery = selector[selector.length++] = newQuery();\n return nextQuery; // this is the new query to be filled by the following exprs\n }\n}, {\n name: 'directedEdge',\n separator: true,\n regex: tokens.directedEdge,\n populate: function populate(selector, query) {\n if (selector.currentSubject == null) {\n // undirected edge\n var edgeQuery = newQuery();\n var source = query;\n var target = newQuery();\n edgeQuery.checks.push({\n type: Type.DIRECTED_EDGE,\n source: source,\n target: target\n });\n\n // the query in the selector should be the edge rather than the source\n replaceLastQuery(selector, query, edgeQuery);\n selector.edgeCount++;\n\n // we're now populating the target query with expressions that follow\n return target;\n } else {\n // source/target\n var srcTgtQ = newQuery();\n var _source = query;\n var _target = newQuery();\n srcTgtQ.checks.push({\n type: Type.NODE_SOURCE,\n source: _source,\n target: _target\n });\n\n // the query in the selector should be the neighbourhood rather than the node\n replaceLastQuery(selector, query, srcTgtQ);\n selector.edgeCount++;\n return _target; // now populating the target with the following expressions\n }\n }\n}, {\n name: 'undirectedEdge',\n separator: true,\n regex: tokens.undirectedEdge,\n populate: function populate(selector, query) {\n if (selector.currentSubject == null) {\n // undirected edge\n var edgeQuery = newQuery();\n var source = query;\n var target = newQuery();\n edgeQuery.checks.push({\n type: Type.UNDIRECTED_EDGE,\n nodes: [source, target]\n });\n\n // the query in the selector should be the edge rather than the source\n replaceLastQuery(selector, query, edgeQuery);\n selector.edgeCount++;\n\n // we're now populating the target query with expressions that follow\n return target;\n } else {\n // neighbourhood\n var nhoodQ = newQuery();\n var node = query;\n var neighbor = newQuery();\n nhoodQ.checks.push({\n type: Type.NODE_NEIGHBOR,\n node: node,\n neighbor: neighbor\n });\n\n // the query in the selector should be the neighbourhood rather than the node\n replaceLastQuery(selector, query, nhoodQ);\n return neighbor; // now populating the neighbor with following expressions\n }\n }\n}, {\n name: 'child',\n separator: true,\n regex: tokens.child,\n populate: function populate(selector, query) {\n if (selector.currentSubject == null) {\n // default: child query\n var parentChildQuery = newQuery();\n var child = newQuery();\n var parent = selector[selector.length - 1];\n parentChildQuery.checks.push({\n type: Type.CHILD,\n parent: parent,\n child: child\n });\n\n // the query in the selector should be the '>' itself\n replaceLastQuery(selector, query, parentChildQuery);\n selector.compoundCount++;\n\n // we're now populating the child query with expressions that follow\n return child;\n } else if (selector.currentSubject === query) {\n // compound split query\n var compound = newQuery();\n var left = selector[selector.length - 1];\n var right = newQuery();\n var subject = newQuery();\n var _child = newQuery();\n var _parent = newQuery();\n\n // set up the root compound q\n compound.checks.push({\n type: Type.COMPOUND_SPLIT,\n left: left,\n right: right,\n subject: subject\n });\n\n // populate the subject and replace the q at the old spot (within left) with TRUE\n subject.checks = query.checks; // take the checks from the left\n query.checks = [{\n type: Type.TRUE\n }]; // checks under left refs the subject implicitly\n\n // set up the right q\n _parent.checks.push({\n type: Type.TRUE\n }); // parent implicitly refs the subject\n right.checks.push({\n type: Type.PARENT,\n // type is swapped on right side queries\n parent: _parent,\n child: _child // empty for now\n });\n replaceLastQuery(selector, left, compound);\n\n // update the ref since we moved things around for `query`\n selector.currentSubject = subject;\n selector.compoundCount++;\n return _child; // now populating the right side's child\n } else {\n // parent query\n // info for parent query\n var _parent2 = newQuery();\n var _child2 = newQuery();\n var pcQChecks = [{\n type: Type.PARENT,\n parent: _parent2,\n child: _child2\n }];\n\n // the parent-child query takes the place of the query previously being populated\n _parent2.checks = query.checks; // the previous query contains the checks for the parent\n query.checks = pcQChecks; // pc query takes over\n\n selector.compoundCount++;\n return _child2; // we're now populating the child\n }\n }\n}, {\n name: 'descendant',\n separator: true,\n regex: tokens.descendant,\n populate: function populate(selector, query) {\n if (selector.currentSubject == null) {\n // default: descendant query\n var ancChQuery = newQuery();\n var descendant = newQuery();\n var ancestor = selector[selector.length - 1];\n ancChQuery.checks.push({\n type: Type.DESCENDANT,\n ancestor: ancestor,\n descendant: descendant\n });\n\n // the query in the selector should be the '>' itself\n replaceLastQuery(selector, query, ancChQuery);\n selector.compoundCount++;\n\n // we're now populating the descendant query with expressions that follow\n return descendant;\n } else if (selector.currentSubject === query) {\n // compound split query\n var compound = newQuery();\n var left = selector[selector.length - 1];\n var right = newQuery();\n var subject = newQuery();\n var _descendant = newQuery();\n var _ancestor = newQuery();\n\n // set up the root compound q\n compound.checks.push({\n type: Type.COMPOUND_SPLIT,\n left: left,\n right: right,\n subject: subject\n });\n\n // populate the subject and replace the q at the old spot (within left) with TRUE\n subject.checks = query.checks; // take the checks from the left\n query.checks = [{\n type: Type.TRUE\n }]; // checks under left refs the subject implicitly\n\n // set up the right q\n _ancestor.checks.push({\n type: Type.TRUE\n }); // ancestor implicitly refs the subject\n right.checks.push({\n type: Type.ANCESTOR,\n // type is swapped on right side queries\n ancestor: _ancestor,\n descendant: _descendant // empty for now\n });\n replaceLastQuery(selector, left, compound);\n\n // update the ref since we moved things around for `query`\n selector.currentSubject = subject;\n selector.compoundCount++;\n return _descendant; // now populating the right side's descendant\n } else {\n // ancestor query\n // info for parent query\n var _ancestor2 = newQuery();\n var _descendant2 = newQuery();\n var adQChecks = [{\n type: Type.ANCESTOR,\n ancestor: _ancestor2,\n descendant: _descendant2\n }];\n\n // the parent-child query takes the place of the query previously being populated\n _ancestor2.checks = query.checks; // the previous query contains the checks for the parent\n query.checks = adQChecks; // pc query takes over\n\n selector.compoundCount++;\n return _descendant2; // we're now populating the child\n }\n }\n}, {\n name: 'subject',\n modifier: true,\n regex: tokens.subject,\n populate: function populate(selector, query) {\n if (selector.currentSubject != null && selector.currentSubject !== query) {\n warn('Redefinition of subject in selector `' + selector.toString() + '`');\n return false;\n }\n selector.currentSubject = query;\n var topQ = selector[selector.length - 1];\n var topChk = topQ.checks[0];\n var topType = topChk == null ? null : topChk.type;\n if (topType === Type.DIRECTED_EDGE) {\n // directed edge with subject on the target\n\n // change to target node check\n topChk.type = Type.NODE_TARGET;\n } else if (topType === Type.UNDIRECTED_EDGE) {\n // undirected edge with subject on the second node\n\n // change to neighbor check\n topChk.type = Type.NODE_NEIGHBOR;\n topChk.node = topChk.nodes[1]; // second node is subject\n topChk.neighbor = topChk.nodes[0];\n\n // clean up unused fields for new type\n topChk.nodes = null;\n }\n }\n}];\nexprs.forEach(function (e) {\n return e.regexObj = new RegExp('^' + e.regex);\n});\n\n/**\n * Of all the expressions, find the first match in the remaining text.\n * @param {string} remaining The remaining text to parse\n * @returns The matched expression and the newly remaining text `{ expr, match, name, remaining }`\n */\nvar consumeExpr = function consumeExpr(remaining) {\n var expr;\n var match;\n var name;\n for (var j = 0; j < exprs.length; j++) {\n var e = exprs[j];\n var n = e.name;\n var m = remaining.match(e.regexObj);\n if (m != null) {\n match = m;\n expr = e;\n name = n;\n var consumed = m[0];\n remaining = remaining.substring(consumed.length);\n break; // we've consumed one expr, so we can return now\n }\n }\n return {\n expr: expr,\n match: match,\n name: name,\n remaining: remaining\n };\n};\n\n/**\n * Consume all the leading whitespace\n * @param {string} remaining The text to consume\n * @returns The text with the leading whitespace removed\n */\nvar consumeWhitespace = function consumeWhitespace(remaining) {\n var match = remaining.match(/^\\s+/);\n if (match) {\n var consumed = match[0];\n remaining = remaining.substring(consumed.length);\n }\n return remaining;\n};\n\n/**\n * Parse the string and store the parsed representation in the Selector.\n * @param {string} selector The selector string\n * @returns `true` if the selector was successfully parsed, `false` otherwise\n */\nvar parse = function parse(selector) {\n var self = this;\n var remaining = self.inputText = selector;\n var currentQuery = self[0] = newQuery();\n self.length = 1;\n remaining = consumeWhitespace(remaining); // get rid of leading whitespace\n\n for (;;) {\n var exprInfo = consumeExpr(remaining);\n if (exprInfo.expr == null) {\n warn('The selector `' + selector + '`is invalid');\n return false;\n } else {\n var args = exprInfo.match.slice(1);\n\n // let the token populate the selector object in currentQuery\n var ret = exprInfo.expr.populate(self, currentQuery, args);\n if (ret === false) {\n return false; // exit if population failed\n } else if (ret != null) {\n currentQuery = ret; // change the current query to be filled if the expr specifies\n }\n }\n remaining = exprInfo.remaining;\n\n // we're done when there's nothing left to parse\n if (remaining.match(/^\\s*$/)) {\n break;\n }\n }\n var lastQ = self[self.length - 1];\n if (self.currentSubject != null) {\n lastQ.subject = self.currentSubject;\n }\n lastQ.edgeCount = self.edgeCount;\n lastQ.compoundCount = self.compoundCount;\n for (var i = 0; i < self.length; i++) {\n var q = self[i];\n\n // in future, this could potentially be allowed if there were operator precedence and detection of invalid combinations\n if (q.compoundCount > 0 && q.edgeCount > 0) {\n warn('The selector `' + selector + '` is invalid because it uses both a compound selector and an edge selector');\n return false;\n }\n if (q.edgeCount > 1) {\n warn('The selector `' + selector + '` is invalid because it uses multiple edge selectors');\n return false;\n } else if (q.edgeCount === 1) {\n warn('The selector `' + selector + '` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.');\n }\n }\n return true; // success\n};\n\n/**\n * Get the selector represented as a string. This value uses default formatting,\n * so things like spacing may differ from the input text passed to the constructor.\n * @returns {string} The selector string\n */\nvar toString = function toString() {\n if (this.toStringCache != null) {\n return this.toStringCache;\n }\n var clean = function clean(obj) {\n if (obj == null) {\n return '';\n } else {\n return obj;\n }\n };\n var cleanVal = function cleanVal(val) {\n if (string(val)) {\n return '\"' + val + '\"';\n } else {\n return clean(val);\n }\n };\n var space = function space(val) {\n return ' ' + val + ' ';\n };\n var checkToString = function checkToString(check, subject) {\n var type = check.type,\n value = check.value;\n switch (type) {\n case Type.GROUP:\n {\n var group = clean(value);\n return group.substring(0, group.length - 1);\n }\n case Type.DATA_COMPARE:\n {\n var field = check.field,\n operator = check.operator;\n return '[' + field + space(clean(operator)) + cleanVal(value) + ']';\n }\n case Type.DATA_BOOL:\n {\n var _operator = check.operator,\n _field = check.field;\n return '[' + clean(_operator) + _field + ']';\n }\n case Type.DATA_EXIST:\n {\n var _field2 = check.field;\n return '[' + _field2 + ']';\n }\n case Type.META_COMPARE:\n {\n var _operator2 = check.operator,\n _field3 = check.field;\n return '[[' + _field3 + space(clean(_operator2)) + cleanVal(value) + ']]';\n }\n case Type.STATE:\n {\n return value;\n }\n case Type.ID:\n {\n return '#' + value;\n }\n case Type.CLASS:\n {\n return '.' + value;\n }\n case Type.PARENT:\n case Type.CHILD:\n {\n return queryToString(check.parent, subject) + space('>') + queryToString(check.child, subject);\n }\n case Type.ANCESTOR:\n case Type.DESCENDANT:\n {\n return queryToString(check.ancestor, subject) + ' ' + queryToString(check.descendant, subject);\n }\n case Type.COMPOUND_SPLIT:\n {\n var lhs = queryToString(check.left, subject);\n var sub = queryToString(check.subject, subject);\n var rhs = queryToString(check.right, subject);\n return lhs + (lhs.length > 0 ? ' ' : '') + sub + rhs;\n }\n case Type.TRUE:\n {\n return '';\n }\n }\n };\n var queryToString = function queryToString(query, subject) {\n return query.checks.reduce(function (str, chk, i) {\n return str + (subject === query && i === 0 ? '$' : '') + checkToString(chk, subject);\n }, '');\n };\n var str = '';\n for (var i = 0; i < this.length; i++) {\n var query = this[i];\n str += queryToString(query, query.subject);\n if (this.length > 1 && i < this.length - 1) {\n str += ', ';\n }\n }\n this.toStringCache = str;\n return str;\n};\nvar parse$1 = {\n parse: parse,\n toString: toString\n};\n\nvar valCmp = function valCmp(fieldVal, operator, value) {\n var matches;\n var isFieldStr = string(fieldVal);\n var isFieldNum = number$1(fieldVal);\n var isValStr = string(value);\n var fieldStr, valStr;\n var caseInsensitive = false;\n var notExpr = false;\n var isIneqCmp = false;\n if (operator.indexOf('!') >= 0) {\n operator = operator.replace('!', '');\n notExpr = true;\n }\n if (operator.indexOf('@') >= 0) {\n operator = operator.replace('@', '');\n caseInsensitive = true;\n }\n if (isFieldStr || isValStr || caseInsensitive) {\n fieldStr = !isFieldStr && !isFieldNum ? '' : '' + fieldVal;\n valStr = '' + value;\n }\n\n // if we're doing a case insensitive comparison, then we're using a STRING comparison\n // even if we're comparing numbers\n if (caseInsensitive) {\n fieldVal = fieldStr = fieldStr.toLowerCase();\n value = valStr = valStr.toLowerCase();\n }\n switch (operator) {\n case '*=':\n matches = fieldStr.indexOf(valStr) >= 0;\n break;\n case '$=':\n matches = fieldStr.indexOf(valStr, fieldStr.length - valStr.length) >= 0;\n break;\n case '^=':\n matches = fieldStr.indexOf(valStr) === 0;\n break;\n case '=':\n matches = fieldVal === value;\n break;\n case '>':\n isIneqCmp = true;\n matches = fieldVal > value;\n break;\n case '>=':\n isIneqCmp = true;\n matches = fieldVal >= value;\n break;\n case '<':\n isIneqCmp = true;\n matches = fieldVal < value;\n break;\n case '<=':\n isIneqCmp = true;\n matches = fieldVal <= value;\n break;\n default:\n matches = false;\n break;\n }\n\n // apply the not op, but null vals for inequalities should always stay non-matching\n if (notExpr && (fieldVal != null || !isIneqCmp)) {\n matches = !matches;\n }\n return matches;\n};\nvar boolCmp = function boolCmp(fieldVal, operator) {\n switch (operator) {\n case '?':\n return fieldVal ? true : false;\n case '!':\n return fieldVal ? false : true;\n case '^':\n return fieldVal === undefined;\n }\n};\nvar existCmp = function existCmp(fieldVal) {\n return fieldVal !== undefined;\n};\nvar data$1 = function data(ele, field) {\n return ele.data(field);\n};\nvar meta = function meta(ele, field) {\n return ele[field]();\n};\n\n/** A lookup of `match(check, ele)` functions by `Type` int */\nvar match = [];\n\n/**\n * Returns whether the query matches for the element\n * @param query The `{ type, value, ... }` query object\n * @param ele The element to compare against\n*/\nvar matches$1 = function matches(query, ele) {\n return query.checks.every(function (chk) {\n return match[chk.type](chk, ele);\n });\n};\nmatch[Type.GROUP] = function (check, ele) {\n var group = check.value;\n return group === '*' || group === ele.group();\n};\nmatch[Type.STATE] = function (check, ele) {\n var stateSelector = check.value;\n return stateSelectorMatches(stateSelector, ele);\n};\nmatch[Type.ID] = function (check, ele) {\n var id = check.value;\n return ele.id() === id;\n};\nmatch[Type.CLASS] = function (check, ele) {\n var cls = check.value;\n return ele.hasClass(cls);\n};\nmatch[Type.META_COMPARE] = function (check, ele) {\n var field = check.field,\n operator = check.operator,\n value = check.value;\n return valCmp(meta(ele, field), operator, value);\n};\nmatch[Type.DATA_COMPARE] = function (check, ele) {\n var field = check.field,\n operator = check.operator,\n value = check.value;\n return valCmp(data$1(ele, field), operator, value);\n};\nmatch[Type.DATA_BOOL] = function (check, ele) {\n var field = check.field,\n operator = check.operator;\n return boolCmp(data$1(ele, field), operator);\n};\nmatch[Type.DATA_EXIST] = function (check, ele) {\n var field = check.field;\n check.operator;\n return existCmp(data$1(ele, field));\n};\nmatch[Type.UNDIRECTED_EDGE] = function (check, ele) {\n var qA = check.nodes[0];\n var qB = check.nodes[1];\n var src = ele.source();\n var tgt = ele.target();\n return matches$1(qA, src) && matches$1(qB, tgt) || matches$1(qB, src) && matches$1(qA, tgt);\n};\nmatch[Type.NODE_NEIGHBOR] = function (check, ele) {\n return matches$1(check.node, ele) && ele.neighborhood().some(function (n) {\n return n.isNode() && matches$1(check.neighbor, n);\n });\n};\nmatch[Type.DIRECTED_EDGE] = function (check, ele) {\n return matches$1(check.source, ele.source()) && matches$1(check.target, ele.target());\n};\nmatch[Type.NODE_SOURCE] = function (check, ele) {\n return matches$1(check.source, ele) && ele.outgoers().some(function (n) {\n return n.isNode() && matches$1(check.target, n);\n });\n};\nmatch[Type.NODE_TARGET] = function (check, ele) {\n return matches$1(check.target, ele) && ele.incomers().some(function (n) {\n return n.isNode() && matches$1(check.source, n);\n });\n};\nmatch[Type.CHILD] = function (check, ele) {\n return matches$1(check.child, ele) && matches$1(check.parent, ele.parent());\n};\nmatch[Type.PARENT] = function (check, ele) {\n return matches$1(check.parent, ele) && ele.children().some(function (c) {\n return matches$1(check.child, c);\n });\n};\nmatch[Type.DESCENDANT] = function (check, ele) {\n return matches$1(check.descendant, ele) && ele.ancestors().some(function (a) {\n return matches$1(check.ancestor, a);\n });\n};\nmatch[Type.ANCESTOR] = function (check, ele) {\n return matches$1(check.ancestor, ele) && ele.descendants().some(function (d) {\n return matches$1(check.descendant, d);\n });\n};\nmatch[Type.COMPOUND_SPLIT] = function (check, ele) {\n return matches$1(check.subject, ele) && matches$1(check.left, ele) && matches$1(check.right, ele);\n};\nmatch[Type.TRUE] = function () {\n return true;\n};\nmatch[Type.COLLECTION] = function (check, ele) {\n var collection = check.value;\n return collection.has(ele);\n};\nmatch[Type.FILTER] = function (check, ele) {\n var filter = check.value;\n return filter(ele);\n};\n\n// filter an existing collection\nvar filter = function filter(collection) {\n var self = this;\n\n // for 1 id #foo queries, just get the element\n if (self.length === 1 && self[0].checks.length === 1 && self[0].checks[0].type === Type.ID) {\n return collection.getElementById(self[0].checks[0].value).collection();\n }\n var selectorFunction = function selectorFunction(element) {\n for (var j = 0; j < self.length; j++) {\n var query = self[j];\n if (matches$1(query, element)) {\n return true;\n }\n }\n return false;\n };\n if (self.text() == null) {\n selectorFunction = function selectorFunction() {\n return true;\n };\n }\n return collection.filter(selectorFunction);\n}; // filter\n\n// does selector match a single element?\nvar matches = function matches(ele) {\n var self = this;\n for (var j = 0; j < self.length; j++) {\n var query = self[j];\n if (matches$1(query, ele)) {\n return true;\n }\n }\n return false;\n}; // matches\n\nvar matching = {\n matches: matches,\n filter: filter\n};\n\nvar Selector = function Selector(selector) {\n this.inputText = selector;\n this.currentSubject = null;\n this.compoundCount = 0;\n this.edgeCount = 0;\n this.length = 0;\n if (selector == null || string(selector) && selector.match(/^\\s*$/)) ; else if (elementOrCollection(selector)) {\n this.addQuery({\n checks: [{\n type: Type.COLLECTION,\n value: selector.collection()\n }]\n });\n } else if (fn$6(selector)) {\n this.addQuery({\n checks: [{\n type: Type.FILTER,\n value: selector\n }]\n });\n } else if (string(selector)) {\n if (!this.parse(selector)) {\n this.invalid = true;\n }\n } else {\n error('A selector must be created from a string; found ');\n }\n};\nvar selfn = Selector.prototype;\n[parse$1, matching].forEach(function (p) {\n return extend(selfn, p);\n});\nselfn.text = function () {\n return this.inputText;\n};\nselfn.size = function () {\n return this.length;\n};\nselfn.eq = function (i) {\n return this[i];\n};\nselfn.sameText = function (otherSel) {\n return !this.invalid && !otherSel.invalid && this.text() === otherSel.text();\n};\nselfn.addQuery = function (q) {\n this[this.length++] = q;\n};\nselfn.selector = selfn.toString;\n\nvar elesfn$g = {\n allAre: function allAre(selector) {\n var selObj = new Selector(selector);\n return this.every(function (ele) {\n return selObj.matches(ele);\n });\n },\n is: function is(selector) {\n var selObj = new Selector(selector);\n return this.some(function (ele) {\n return selObj.matches(ele);\n });\n },\n some: function some(fn, thisArg) {\n for (var i = 0; i < this.length; i++) {\n var ret = !thisArg ? fn(this[i], i, this) : fn.apply(thisArg, [this[i], i, this]);\n if (ret) {\n return true;\n }\n }\n return false;\n },\n every: function every(fn, thisArg) {\n for (var i = 0; i < this.length; i++) {\n var ret = !thisArg ? fn(this[i], i, this) : fn.apply(thisArg, [this[i], i, this]);\n if (!ret) {\n return false;\n }\n }\n return true;\n },\n same: function same(collection) {\n // cheap collection ref check\n if (this === collection) {\n return true;\n }\n collection = this.cy().collection(collection);\n var thisLength = this.length;\n var collectionLength = collection.length;\n\n // cheap length check\n if (thisLength !== collectionLength) {\n return false;\n }\n\n // cheap element ref check\n if (thisLength === 1) {\n return this[0] === collection[0];\n }\n return this.every(function (ele) {\n return collection.hasElementWithId(ele.id());\n });\n },\n anySame: function anySame(collection) {\n collection = this.cy().collection(collection);\n return this.some(function (ele) {\n return collection.hasElementWithId(ele.id());\n });\n },\n allAreNeighbors: function allAreNeighbors(collection) {\n collection = this.cy().collection(collection);\n var nhood = this.neighborhood();\n return collection.every(function (ele) {\n return nhood.hasElementWithId(ele.id());\n });\n },\n contains: function contains(collection) {\n collection = this.cy().collection(collection);\n var self = this;\n return collection.every(function (ele) {\n return self.hasElementWithId(ele.id());\n });\n }\n};\nelesfn$g.allAreNeighbours = elesfn$g.allAreNeighbors;\nelesfn$g.has = elesfn$g.contains;\nelesfn$g.equal = elesfn$g.equals = elesfn$g.same;\n\nvar cache = function cache(fn, name) {\n return function traversalCache(arg1, arg2, arg3, arg4) {\n var selectorOrEles = arg1;\n var eles = this;\n var key;\n if (selectorOrEles == null) {\n key = '';\n } else if (elementOrCollection(selectorOrEles) && selectorOrEles.length === 1) {\n key = selectorOrEles.id();\n }\n if (eles.length === 1 && key) {\n var _p = eles[0]._private;\n var tch = _p.traversalCache = _p.traversalCache || {};\n var ch = tch[name] = tch[name] || [];\n var hash = hashString(key);\n var cacheHit = ch[hash];\n if (cacheHit) {\n return cacheHit;\n } else {\n return ch[hash] = fn.call(eles, arg1, arg2, arg3, arg4);\n }\n } else {\n return fn.call(eles, arg1, arg2, arg3, arg4);\n }\n };\n};\n\nvar elesfn$f = {\n parent: function parent(selector) {\n var parents = [];\n\n // optimisation for single ele call\n if (this.length === 1) {\n var parent = this[0]._private.parent;\n if (parent) {\n return parent;\n }\n }\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var _parent = ele._private.parent;\n if (_parent) {\n parents.push(_parent);\n }\n }\n return this.spawn(parents, true).filter(selector);\n },\n parents: function parents(selector) {\n var parents = [];\n var eles = this.parent();\n while (eles.nonempty()) {\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n parents.push(ele);\n }\n eles = eles.parent();\n }\n return this.spawn(parents, true).filter(selector);\n },\n commonAncestors: function commonAncestors(selector) {\n var ancestors;\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var parents = ele.parents();\n ancestors = ancestors || parents;\n ancestors = ancestors.intersect(parents); // current list must be common with current ele parents set\n }\n return ancestors.filter(selector);\n },\n orphans: function orphans(selector) {\n return this.stdFilter(function (ele) {\n return ele.isOrphan();\n }).filter(selector);\n },\n nonorphans: function nonorphans(selector) {\n return this.stdFilter(function (ele) {\n return ele.isChild();\n }).filter(selector);\n },\n children: cache(function (selector) {\n var children = [];\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var eleChildren = ele._private.children;\n for (var j = 0; j < eleChildren.length; j++) {\n children.push(eleChildren[j]);\n }\n }\n return this.spawn(children, true).filter(selector);\n }, 'children'),\n siblings: function siblings(selector) {\n return this.parent().children().not(this).filter(selector);\n },\n isParent: function isParent() {\n var ele = this[0];\n if (ele) {\n return ele.isNode() && ele._private.children.length !== 0;\n }\n },\n isChildless: function isChildless() {\n var ele = this[0];\n if (ele) {\n return ele.isNode() && ele._private.children.length === 0;\n }\n },\n isChild: function isChild() {\n var ele = this[0];\n if (ele) {\n return ele.isNode() && ele._private.parent != null;\n }\n },\n isOrphan: function isOrphan() {\n var ele = this[0];\n if (ele) {\n return ele.isNode() && ele._private.parent == null;\n }\n },\n descendants: function descendants(selector) {\n var elements = [];\n function add(eles) {\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n elements.push(ele);\n if (ele.children().nonempty()) {\n add(ele.children());\n }\n }\n }\n add(this.children());\n return this.spawn(elements, true).filter(selector);\n }\n};\nfunction forEachCompound(eles, fn, includeSelf, recursiveStep) {\n var q = [];\n var did = new Set$1();\n var cy = eles.cy();\n var hasCompounds = cy.hasCompoundNodes();\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n if (includeSelf) {\n q.push(ele);\n } else if (hasCompounds) {\n recursiveStep(q, did, ele);\n }\n }\n while (q.length > 0) {\n var _ele = q.shift();\n fn(_ele);\n did.add(_ele.id());\n if (hasCompounds) {\n recursiveStep(q, did, _ele);\n }\n }\n return eles;\n}\nfunction addChildren(q, did, ele) {\n if (ele.isParent()) {\n var children = ele._private.children;\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (!did.has(child.id())) {\n q.push(child);\n }\n }\n }\n}\n\n// very efficient version of eles.add( eles.descendants() ).forEach()\n// for internal use\nelesfn$f.forEachDown = function (fn) {\n var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return forEachCompound(this, fn, includeSelf, addChildren);\n};\nfunction addParent(q, did, ele) {\n if (ele.isChild()) {\n var parent = ele._private.parent;\n if (!did.has(parent.id())) {\n q.push(parent);\n }\n }\n}\nelesfn$f.forEachUp = function (fn) {\n var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return forEachCompound(this, fn, includeSelf, addParent);\n};\nfunction addParentAndChildren(q, did, ele) {\n addParent(q, did, ele);\n addChildren(q, did, ele);\n}\nelesfn$f.forEachUpAndDown = function (fn) {\n var includeSelf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n return forEachCompound(this, fn, includeSelf, addParentAndChildren);\n};\n\n// aliases\nelesfn$f.ancestors = elesfn$f.parents;\n\nvar fn$5, elesfn$e;\nfn$5 = elesfn$e = {\n data: define.data({\n field: 'data',\n bindingEvent: 'data',\n allowBinding: true,\n allowSetting: true,\n settingEvent: 'data',\n settingTriggersEvent: true,\n triggerFnName: 'trigger',\n allowGetting: true,\n immutableKeys: {\n 'id': true,\n 'source': true,\n 'target': true,\n 'parent': true\n },\n updateStyle: true\n }),\n removeData: define.removeData({\n field: 'data',\n event: 'data',\n triggerFnName: 'trigger',\n triggerEvent: true,\n immutableKeys: {\n 'id': true,\n 'source': true,\n 'target': true,\n 'parent': true\n },\n updateStyle: true\n }),\n scratch: define.data({\n field: 'scratch',\n bindingEvent: 'scratch',\n allowBinding: true,\n allowSetting: true,\n settingEvent: 'scratch',\n settingTriggersEvent: true,\n triggerFnName: 'trigger',\n allowGetting: true,\n updateStyle: true\n }),\n removeScratch: define.removeData({\n field: 'scratch',\n event: 'scratch',\n triggerFnName: 'trigger',\n triggerEvent: true,\n updateStyle: true\n }),\n rscratch: define.data({\n field: 'rscratch',\n allowBinding: false,\n allowSetting: true,\n settingTriggersEvent: false,\n allowGetting: true\n }),\n removeRscratch: define.removeData({\n field: 'rscratch',\n triggerEvent: false\n }),\n id: function id() {\n var ele = this[0];\n if (ele) {\n return ele._private.data.id;\n }\n }\n};\n\n// aliases\nfn$5.attr = fn$5.data;\nfn$5.removeAttr = fn$5.removeData;\nvar data = elesfn$e;\n\nvar elesfn$d = {};\nfunction defineDegreeFunction(callback) {\n return function (includeLoops) {\n var self = this;\n if (includeLoops === undefined) {\n includeLoops = true;\n }\n if (self.length === 0) {\n return;\n }\n if (self.isNode() && !self.removed()) {\n var degree = 0;\n var node = self[0];\n var connectedEdges = node._private.edges;\n for (var i = 0; i < connectedEdges.length; i++) {\n var edge = connectedEdges[i];\n if (!includeLoops && edge.isLoop()) {\n continue;\n }\n degree += callback(node, edge);\n }\n return degree;\n } else {\n return;\n }\n };\n}\nextend(elesfn$d, {\n degree: defineDegreeFunction(function (node, edge) {\n if (edge.source().same(edge.target())) {\n return 2;\n } else {\n return 1;\n }\n }),\n indegree: defineDegreeFunction(function (node, edge) {\n if (edge.target().same(node)) {\n return 1;\n } else {\n return 0;\n }\n }),\n outdegree: defineDegreeFunction(function (node, edge) {\n if (edge.source().same(node)) {\n return 1;\n } else {\n return 0;\n }\n })\n});\nfunction defineDegreeBoundsFunction(degreeFn, callback) {\n return function (includeLoops) {\n var ret;\n var nodes = this.nodes();\n for (var i = 0; i < nodes.length; i++) {\n var ele = nodes[i];\n var degree = ele[degreeFn](includeLoops);\n if (degree !== undefined && (ret === undefined || callback(degree, ret))) {\n ret = degree;\n }\n }\n return ret;\n };\n}\nextend(elesfn$d, {\n minDegree: defineDegreeBoundsFunction('degree', function (degree, min) {\n return degree < min;\n }),\n maxDegree: defineDegreeBoundsFunction('degree', function (degree, max) {\n return degree > max;\n }),\n minIndegree: defineDegreeBoundsFunction('indegree', function (degree, min) {\n return degree < min;\n }),\n maxIndegree: defineDegreeBoundsFunction('indegree', function (degree, max) {\n return degree > max;\n }),\n minOutdegree: defineDegreeBoundsFunction('outdegree', function (degree, min) {\n return degree < min;\n }),\n maxOutdegree: defineDegreeBoundsFunction('outdegree', function (degree, max) {\n return degree > max;\n })\n});\nextend(elesfn$d, {\n totalDegree: function totalDegree(includeLoops) {\n var total = 0;\n var nodes = this.nodes();\n for (var i = 0; i < nodes.length; i++) {\n total += nodes[i].degree(includeLoops);\n }\n return total;\n }\n});\n\nvar fn$4, elesfn$c;\nvar beforePositionSet = function beforePositionSet(eles, newPos, silent) {\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n if (!ele.locked()) {\n var oldPos = ele._private.position;\n var delta = {\n x: newPos.x != null ? newPos.x - oldPos.x : 0,\n y: newPos.y != null ? newPos.y - oldPos.y : 0\n };\n if (ele.isParent() && !(delta.x === 0 && delta.y === 0)) {\n ele.children().shift(delta, silent);\n }\n ele.dirtyBoundingBoxCache();\n }\n }\n};\nvar positionDef = {\n field: 'position',\n bindingEvent: 'position',\n allowBinding: true,\n allowSetting: true,\n settingEvent: 'position',\n settingTriggersEvent: true,\n triggerFnName: 'emitAndNotify',\n allowGetting: true,\n validKeys: ['x', 'y'],\n beforeGet: function beforeGet(ele) {\n ele.updateCompoundBounds();\n },\n beforeSet: function beforeSet(eles, newPos) {\n beforePositionSet(eles, newPos, false);\n },\n onSet: function onSet(eles) {\n eles.dirtyCompoundBoundsCache();\n },\n canSet: function canSet(ele) {\n return !ele.locked();\n }\n};\nfn$4 = elesfn$c = {\n position: define.data(positionDef),\n // position but no notification to renderer\n silentPosition: define.data(extend({}, positionDef, {\n allowBinding: false,\n allowSetting: true,\n settingTriggersEvent: false,\n allowGetting: false,\n beforeSet: function beforeSet(eles, newPos) {\n beforePositionSet(eles, newPos, true);\n },\n onSet: function onSet(eles) {\n eles.dirtyCompoundBoundsCache();\n }\n })),\n positions: function positions(pos, silent) {\n if (plainObject(pos)) {\n if (silent) {\n this.silentPosition(pos);\n } else {\n this.position(pos);\n }\n } else if (fn$6(pos)) {\n var _fn = pos;\n var cy = this.cy();\n cy.startBatch();\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var _pos = undefined;\n if (_pos = _fn(ele, i)) {\n if (silent) {\n ele.silentPosition(_pos);\n } else {\n ele.position(_pos);\n }\n }\n }\n cy.endBatch();\n }\n return this; // chaining\n },\n silentPositions: function silentPositions(pos) {\n return this.positions(pos, true);\n },\n shift: function shift(dim, val, silent) {\n var delta;\n if (plainObject(dim)) {\n delta = {\n x: number$1(dim.x) ? dim.x : 0,\n y: number$1(dim.y) ? dim.y : 0\n };\n silent = val;\n } else if (string(dim) && number$1(val)) {\n delta = {\n x: 0,\n y: 0\n };\n delta[dim] = val;\n }\n if (delta != null) {\n var cy = this.cy();\n cy.startBatch();\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n\n // exclude any node that is a descendant of the calling collection\n if (cy.hasCompoundNodes() && ele.isChild() && ele.ancestors().anySame(this)) {\n continue;\n }\n var pos = ele.position();\n var newPos = {\n x: pos.x + delta.x,\n y: pos.y + delta.y\n };\n if (silent) {\n ele.silentPosition(newPos);\n } else {\n ele.position(newPos);\n }\n }\n cy.endBatch();\n }\n return this;\n },\n silentShift: function silentShift(dim, val) {\n if (plainObject(dim)) {\n this.shift(dim, true);\n } else if (string(dim) && number$1(val)) {\n this.shift(dim, val, true);\n }\n return this;\n },\n // get/set the rendered (i.e. on screen) positon of the element\n renderedPosition: function renderedPosition(dim, val) {\n var ele = this[0];\n var cy = this.cy();\n var zoom = cy.zoom();\n var pan = cy.pan();\n var rpos = plainObject(dim) ? dim : undefined;\n var setting = rpos !== undefined || val !== undefined && string(dim);\n if (ele && ele.isNode()) {\n // must have an element and must be a node to return position\n if (setting) {\n for (var i = 0; i < this.length; i++) {\n var _ele = this[i];\n if (val !== undefined) {\n // set one dimension\n _ele.position(dim, (val - pan[dim]) / zoom);\n } else if (rpos !== undefined) {\n // set whole position\n _ele.position(renderedToModelPosition(rpos, zoom, pan));\n }\n }\n } else {\n // getting\n var pos = ele.position();\n rpos = modelToRenderedPosition$1(pos, zoom, pan);\n if (dim === undefined) {\n // then return the whole rendered position\n return rpos;\n } else {\n // then return the specified dimension\n return rpos[dim];\n }\n }\n } else if (!setting) {\n return undefined; // for empty collection case\n }\n return this; // chaining\n },\n // get/set the position relative to the parent\n relativePosition: function relativePosition(dim, val) {\n var ele = this[0];\n var cy = this.cy();\n var ppos = plainObject(dim) ? dim : undefined;\n var setting = ppos !== undefined || val !== undefined && string(dim);\n var hasCompoundNodes = cy.hasCompoundNodes();\n if (ele && ele.isNode()) {\n // must have an element and must be a node to return position\n if (setting) {\n for (var i = 0; i < this.length; i++) {\n var _ele2 = this[i];\n var parent = hasCompoundNodes ? _ele2.parent() : null;\n var hasParent = parent && parent.length > 0;\n var relativeToParent = hasParent;\n if (hasParent) {\n parent = parent[0];\n }\n var origin = relativeToParent ? parent.position() : {\n x: 0,\n y: 0\n };\n if (val !== undefined) {\n // set one dimension\n _ele2.position(dim, val + origin[dim]);\n } else if (ppos !== undefined) {\n // set whole position\n _ele2.position({\n x: ppos.x + origin.x,\n y: ppos.y + origin.y\n });\n }\n }\n } else {\n // getting\n var pos = ele.position();\n var _parent = hasCompoundNodes ? ele.parent() : null;\n var _hasParent = _parent && _parent.length > 0;\n var _relativeToParent = _hasParent;\n if (_hasParent) {\n _parent = _parent[0];\n }\n var _origin = _relativeToParent ? _parent.position() : {\n x: 0,\n y: 0\n };\n ppos = {\n x: pos.x - _origin.x,\n y: pos.y - _origin.y\n };\n if (dim === undefined) {\n // then return the whole rendered position\n return ppos;\n } else {\n // then return the specified dimension\n return ppos[dim];\n }\n }\n } else if (!setting) {\n return undefined; // for empty collection case\n }\n return this; // chaining\n }\n};\n\n// aliases\nfn$4.modelPosition = fn$4.point = fn$4.position;\nfn$4.modelPositions = fn$4.points = fn$4.positions;\nfn$4.renderedPoint = fn$4.renderedPosition;\nfn$4.relativePoint = fn$4.relativePosition;\nvar position = elesfn$c;\n\nvar fn$3, elesfn$b;\nfn$3 = elesfn$b = {};\nelesfn$b.renderedBoundingBox = function (options) {\n var bb = this.boundingBox(options);\n var cy = this.cy();\n var zoom = cy.zoom();\n var pan = cy.pan();\n var x1 = bb.x1 * zoom + pan.x;\n var x2 = bb.x2 * zoom + pan.x;\n var y1 = bb.y1 * zoom + pan.y;\n var y2 = bb.y2 * zoom + pan.y;\n return {\n x1: x1,\n x2: x2,\n y1: y1,\n y2: y2,\n w: x2 - x1,\n h: y2 - y1\n };\n};\nelesfn$b.dirtyCompoundBoundsCache = function () {\n var silent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var cy = this.cy();\n if (!cy.styleEnabled() || !cy.hasCompoundNodes()) {\n return this;\n }\n this.forEachUp(function (ele) {\n if (ele.isParent()) {\n var _p = ele._private;\n _p.compoundBoundsClean = false;\n _p.bbCache = null;\n if (!silent) {\n ele.emitAndNotify('bounds');\n }\n }\n });\n return this;\n};\nelesfn$b.updateCompoundBounds = function () {\n var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var cy = this.cy();\n\n // not possible to do on non-compound graphs or with the style disabled\n if (!cy.styleEnabled() || !cy.hasCompoundNodes()) {\n return this;\n }\n\n // save cycles when batching -- but bounds will be stale (or not exist yet)\n if (!force && cy.batching()) {\n return this;\n }\n function update(parent) {\n if (!parent.isParent()) {\n return;\n }\n var _p = parent._private;\n var children = parent.children();\n var includeLabels = parent.pstyle('compound-sizing-wrt-labels').value === 'include';\n var min = {\n width: {\n val: parent.pstyle('min-width').pfValue,\n left: parent.pstyle('min-width-bias-left'),\n right: parent.pstyle('min-width-bias-right')\n },\n height: {\n val: parent.pstyle('min-height').pfValue,\n top: parent.pstyle('min-height-bias-top'),\n bottom: parent.pstyle('min-height-bias-bottom')\n }\n };\n var bb = children.boundingBox({\n includeLabels: includeLabels,\n includeOverlays: false,\n // updating the compound bounds happens outside of the regular\n // cache cycle (i.e. before fired events)\n useCache: false\n });\n var pos = _p.position;\n\n // if children take up zero area then keep position and fall back on stylesheet w/h\n if (bb.w === 0 || bb.h === 0) {\n bb = {\n w: parent.pstyle('width').pfValue,\n h: parent.pstyle('height').pfValue\n };\n bb.x1 = pos.x - bb.w / 2;\n bb.x2 = pos.x + bb.w / 2;\n bb.y1 = pos.y - bb.h / 2;\n bb.y2 = pos.y + bb.h / 2;\n }\n function computeBiasValues(propDiff, propBias, propBiasComplement) {\n var biasDiff = 0;\n var biasComplementDiff = 0;\n var biasTotal = propBias + propBiasComplement;\n if (propDiff > 0 && biasTotal > 0) {\n biasDiff = propBias / biasTotal * propDiff;\n biasComplementDiff = propBiasComplement / biasTotal * propDiff;\n }\n return {\n biasDiff: biasDiff,\n biasComplementDiff: biasComplementDiff\n };\n }\n function computePaddingValues(width, height, paddingObject, relativeTo) {\n // Assuming percentage is number from 0 to 1\n if (paddingObject.units === '%') {\n switch (relativeTo) {\n case 'width':\n return width > 0 ? paddingObject.pfValue * width : 0;\n case 'height':\n return height > 0 ? paddingObject.pfValue * height : 0;\n case 'average':\n return width > 0 && height > 0 ? paddingObject.pfValue * (width + height) / 2 : 0;\n case 'min':\n return width > 0 && height > 0 ? width > height ? paddingObject.pfValue * height : paddingObject.pfValue * width : 0;\n case 'max':\n return width > 0 && height > 0 ? width > height ? paddingObject.pfValue * width : paddingObject.pfValue * height : 0;\n default:\n return 0;\n }\n } else if (paddingObject.units === 'px') {\n return paddingObject.pfValue;\n } else {\n return 0;\n }\n }\n var leftVal = min.width.left.value;\n if (min.width.left.units === 'px' && min.width.val > 0) {\n leftVal = leftVal * 100 / min.width.val;\n }\n var rightVal = min.width.right.value;\n if (min.width.right.units === 'px' && min.width.val > 0) {\n rightVal = rightVal * 100 / min.width.val;\n }\n var topVal = min.height.top.value;\n if (min.height.top.units === 'px' && min.height.val > 0) {\n topVal = topVal * 100 / min.height.val;\n }\n var bottomVal = min.height.bottom.value;\n if (min.height.bottom.units === 'px' && min.height.val > 0) {\n bottomVal = bottomVal * 100 / min.height.val;\n }\n var widthBiasDiffs = computeBiasValues(min.width.val - bb.w, leftVal, rightVal);\n var diffLeft = widthBiasDiffs.biasDiff;\n var diffRight = widthBiasDiffs.biasComplementDiff;\n var heightBiasDiffs = computeBiasValues(min.height.val - bb.h, topVal, bottomVal);\n var diffTop = heightBiasDiffs.biasDiff;\n var diffBottom = heightBiasDiffs.biasComplementDiff;\n _p.autoPadding = computePaddingValues(bb.w, bb.h, parent.pstyle('padding'), parent.pstyle('padding-relative-to').value);\n _p.autoWidth = Math.max(bb.w, min.width.val);\n pos.x = (-diffLeft + bb.x1 + bb.x2 + diffRight) / 2;\n _p.autoHeight = Math.max(bb.h, min.height.val);\n pos.y = (-diffTop + bb.y1 + bb.y2 + diffBottom) / 2;\n }\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var _p = ele._private;\n if (!_p.compoundBoundsClean || force) {\n update(ele);\n if (!cy.batching()) {\n _p.compoundBoundsClean = true;\n }\n }\n }\n return this;\n};\nvar noninf = function noninf(x) {\n if (x === Infinity || x === -Infinity) {\n return 0;\n }\n return x;\n};\nvar updateBounds = function updateBounds(b, x1, y1, x2, y2) {\n // don't update with zero area boxes\n if (x2 - x1 === 0 || y2 - y1 === 0) {\n return;\n }\n\n // don't update with null dim\n if (x1 == null || y1 == null || x2 == null || y2 == null) {\n return;\n }\n b.x1 = x1 < b.x1 ? x1 : b.x1;\n b.x2 = x2 > b.x2 ? x2 : b.x2;\n b.y1 = y1 < b.y1 ? y1 : b.y1;\n b.y2 = y2 > b.y2 ? y2 : b.y2;\n b.w = b.x2 - b.x1;\n b.h = b.y2 - b.y1;\n};\nvar updateBoundsFromBox = function updateBoundsFromBox(b, b2) {\n if (b2 == null) {\n return b;\n }\n return updateBounds(b, b2.x1, b2.y1, b2.x2, b2.y2);\n};\nvar prefixedProperty = function prefixedProperty(obj, field, prefix) {\n return getPrefixedProperty(obj, field, prefix);\n};\nvar updateBoundsFromArrow = function updateBoundsFromArrow(bounds, ele, prefix) {\n if (ele.cy().headless()) {\n return;\n }\n var _p = ele._private;\n var rstyle = _p.rstyle;\n var halfArW = rstyle.arrowWidth / 2;\n var arrowType = ele.pstyle(prefix + '-arrow-shape').value;\n var x;\n var y;\n if (arrowType !== 'none') {\n if (prefix === 'source') {\n x = rstyle.srcX;\n y = rstyle.srcY;\n } else if (prefix === 'target') {\n x = rstyle.tgtX;\n y = rstyle.tgtY;\n } else {\n x = rstyle.midX;\n y = rstyle.midY;\n }\n\n // always store the individual arrow bounds\n var bbs = _p.arrowBounds = _p.arrowBounds || {};\n var bb = bbs[prefix] = bbs[prefix] || {};\n bb.x1 = x - halfArW;\n bb.y1 = y - halfArW;\n bb.x2 = x + halfArW;\n bb.y2 = y + halfArW;\n bb.w = bb.x2 - bb.x1;\n bb.h = bb.y2 - bb.y1;\n expandBoundingBox(bb, 1);\n updateBounds(bounds, bb.x1, bb.y1, bb.x2, bb.y2);\n }\n};\nvar updateBoundsFromLabel = function updateBoundsFromLabel(bounds, ele, prefix) {\n if (ele.cy().headless()) {\n return;\n }\n var prefixDash;\n if (prefix) {\n prefixDash = prefix + '-';\n } else {\n prefixDash = '';\n }\n var _p = ele._private;\n var rstyle = _p.rstyle;\n var label = ele.pstyle(prefixDash + 'label').strValue;\n if (label) {\n var halign = ele.pstyle('text-halign');\n var valign = ele.pstyle('text-valign');\n var labelWidth = prefixedProperty(rstyle, 'labelWidth', prefix);\n var labelHeight = prefixedProperty(rstyle, 'labelHeight', prefix);\n var labelX = prefixedProperty(rstyle, 'labelX', prefix);\n var labelY = prefixedProperty(rstyle, 'labelY', prefix);\n var marginX = ele.pstyle(prefixDash + 'text-margin-x').pfValue;\n var marginY = ele.pstyle(prefixDash + 'text-margin-y').pfValue;\n var isEdge = ele.isEdge();\n var rotation = ele.pstyle(prefixDash + 'text-rotation');\n var outlineWidth = ele.pstyle('text-outline-width').pfValue;\n var borderWidth = ele.pstyle('text-border-width').pfValue;\n var halfBorderWidth = borderWidth / 2;\n var padding = ele.pstyle('text-background-padding').pfValue;\n var marginOfError = 2; // expand to work around browser dimension inaccuracies\n\n var lh = labelHeight;\n var lw = labelWidth;\n var lw_2 = lw / 2;\n var lh_2 = lh / 2;\n var lx1, lx2, ly1, ly2;\n if (isEdge) {\n lx1 = labelX - lw_2;\n lx2 = labelX + lw_2;\n ly1 = labelY - lh_2;\n ly2 = labelY + lh_2;\n } else {\n switch (halign.value) {\n case 'left':\n lx1 = labelX - lw;\n lx2 = labelX;\n break;\n case 'center':\n lx1 = labelX - lw_2;\n lx2 = labelX + lw_2;\n break;\n case 'right':\n lx1 = labelX;\n lx2 = labelX + lw;\n break;\n }\n switch (valign.value) {\n case 'top':\n ly1 = labelY - lh;\n ly2 = labelY;\n break;\n case 'center':\n ly1 = labelY - lh_2;\n ly2 = labelY + lh_2;\n break;\n case 'bottom':\n ly1 = labelY;\n ly2 = labelY + lh;\n break;\n }\n }\n\n // shift by margin and expand by outline and border\n var leftPad = marginX - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError;\n var rightPad = marginX + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError;\n var topPad = marginY - Math.max(outlineWidth, halfBorderWidth) - padding - marginOfError;\n var botPad = marginY + Math.max(outlineWidth, halfBorderWidth) + padding + marginOfError;\n lx1 += leftPad;\n lx2 += rightPad;\n ly1 += topPad;\n ly2 += botPad;\n\n // always store the unrotated label bounds separately\n var bbPrefix = prefix || 'main';\n var bbs = _p.labelBounds;\n var bb = bbs[bbPrefix] = bbs[bbPrefix] || {};\n bb.x1 = lx1;\n bb.y1 = ly1;\n bb.x2 = lx2;\n bb.y2 = ly2;\n bb.w = lx2 - lx1;\n bb.h = ly2 - ly1;\n bb.leftPad = leftPad;\n bb.rightPad = rightPad;\n bb.topPad = topPad;\n bb.botPad = botPad;\n var isAutorotate = isEdge && rotation.strValue === 'autorotate';\n var isPfValue = rotation.pfValue != null && rotation.pfValue !== 0;\n if (isAutorotate || isPfValue) {\n var theta = isAutorotate ? prefixedProperty(_p.rstyle, 'labelAngle', prefix) : rotation.pfValue;\n var cos = Math.cos(theta);\n var sin = Math.sin(theta);\n\n // rotation point (default value for center-center)\n var xo = (lx1 + lx2) / 2;\n var yo = (ly1 + ly2) / 2;\n if (!isEdge) {\n switch (halign.value) {\n case 'left':\n xo = lx2;\n break;\n case 'right':\n xo = lx1;\n break;\n }\n switch (valign.value) {\n case 'top':\n yo = ly2;\n break;\n case 'bottom':\n yo = ly1;\n break;\n }\n }\n var rotate = function rotate(x, y) {\n x = x - xo;\n y = y - yo;\n return {\n x: x * cos - y * sin + xo,\n y: x * sin + y * cos + yo\n };\n };\n var px1y1 = rotate(lx1, ly1);\n var px1y2 = rotate(lx1, ly2);\n var px2y1 = rotate(lx2, ly1);\n var px2y2 = rotate(lx2, ly2);\n lx1 = Math.min(px1y1.x, px1y2.x, px2y1.x, px2y2.x);\n lx2 = Math.max(px1y1.x, px1y2.x, px2y1.x, px2y2.x);\n ly1 = Math.min(px1y1.y, px1y2.y, px2y1.y, px2y2.y);\n ly2 = Math.max(px1y1.y, px1y2.y, px2y1.y, px2y2.y);\n }\n var bbPrefixRot = bbPrefix + 'Rot';\n var bbRot = bbs[bbPrefixRot] = bbs[bbPrefixRot] || {};\n bbRot.x1 = lx1;\n bbRot.y1 = ly1;\n bbRot.x2 = lx2;\n bbRot.y2 = ly2;\n bbRot.w = lx2 - lx1;\n bbRot.h = ly2 - ly1;\n updateBounds(bounds, lx1, ly1, lx2, ly2);\n updateBounds(_p.labelBounds.all, lx1, ly1, lx2, ly2);\n }\n return bounds;\n};\nvar updateBoundsFromOutline = function updateBoundsFromOutline(bounds, ele) {\n if (ele.cy().headless()) {\n return;\n }\n var outlineOpacity = ele.pstyle('outline-opacity').value;\n var outlineWidth = ele.pstyle('outline-width').value;\n var outlineOffset = ele.pstyle('outline-offset').value;\n var expansion = outlineWidth + outlineOffset;\n updateBoundsFromMiter(bounds, ele, outlineOpacity, expansion, 'outside', expansion / 2);\n};\nvar updateBoundsFromMiter = function updateBoundsFromMiter(bounds, ele, opacity, expansionSize, expansionPosition, useFallbackValue) {\n if (opacity === 0 || expansionSize <= 0 || expansionPosition === 'inside') {\n return;\n }\n var cy = ele.cy();\n var shape = ele.pstyle('shape').value;\n var rshape = cy.renderer().nodeShapes[shape];\n var _ele$position = ele.position(),\n x = _ele$position.x,\n y = _ele$position.y;\n var w = ele.width();\n var h = ele.height();\n if (rshape.hasMiterBounds) {\n if (expansionPosition === 'center') {\n expansionSize /= 2;\n }\n var mbb = rshape.miterBounds(x, y, w, h, expansionSize);\n updateBoundsFromBox(bounds, mbb);\n } else if (useFallbackValue != null && useFallbackValue > 0) {\n expandBoundingBoxSides(bounds, [useFallbackValue, useFallbackValue, useFallbackValue, useFallbackValue]);\n }\n};\nvar updateBoundsFromMiterBorder = function updateBoundsFromMiterBorder(bounds, ele) {\n if (ele.cy().headless()) {\n return;\n }\n var borderOpacity = ele.pstyle('border-opacity').value;\n var borderWidth = ele.pstyle('border-width').pfValue;\n var borderPosition = ele.pstyle('border-position').value;\n updateBoundsFromMiter(bounds, ele, borderOpacity, borderWidth, borderPosition);\n};\n\n// get the bounding box of the elements (in raw model position)\nvar boundingBoxImpl = function boundingBoxImpl(ele, options) {\n var cy = ele._private.cy;\n var styleEnabled = cy.styleEnabled();\n var headless = cy.headless();\n var bounds = makeBoundingBox();\n var _p = ele._private;\n var isNode = ele.isNode();\n var isEdge = ele.isEdge();\n var ex1, ex2, ey1, ey2; // extrema of body / lines\n var x, y; // node pos\n var rstyle = _p.rstyle;\n var manualExpansion = isNode && styleEnabled ? ele.pstyle('bounds-expansion').pfValue : [0];\n\n // must use `display` prop only, as reading `compound.width()` causes recursion\n // (other factors like width values will be considered later in this function anyway)\n var isDisplayed = function isDisplayed(ele) {\n return ele.pstyle('display').value !== 'none';\n };\n var displayed = !styleEnabled || isDisplayed(ele)\n\n // must take into account connected nodes b/c of implicit edge hiding on display:none node\n && (!isEdge || isDisplayed(ele.source()) && isDisplayed(ele.target()));\n if (displayed) {\n // displayed suffices, since we will find zero area eles anyway\n var overlayOpacity = 0;\n var overlayPadding = 0;\n if (styleEnabled && options.includeOverlays) {\n overlayOpacity = ele.pstyle('overlay-opacity').value;\n if (overlayOpacity !== 0) {\n overlayPadding = ele.pstyle('overlay-padding').value;\n }\n }\n var underlayOpacity = 0;\n var underlayPadding = 0;\n if (styleEnabled && options.includeUnderlays) {\n underlayOpacity = ele.pstyle('underlay-opacity').value;\n if (underlayOpacity !== 0) {\n underlayPadding = ele.pstyle('underlay-padding').value;\n }\n }\n var padding = Math.max(overlayPadding, underlayPadding);\n var w = 0;\n var wHalf = 0;\n if (styleEnabled) {\n w = ele.pstyle('width').pfValue;\n wHalf = w / 2;\n }\n if (isNode && options.includeNodes) {\n var pos = ele.position();\n x = pos.x;\n y = pos.y;\n var _w = ele.outerWidth();\n var halfW = _w / 2;\n var h = ele.outerHeight();\n var halfH = h / 2;\n\n // handle node dimensions\n /////////////////////////\n\n ex1 = x - halfW;\n ex2 = x + halfW;\n ey1 = y - halfH;\n ey2 = y + halfH;\n updateBounds(bounds, ex1, ey1, ex2, ey2);\n if (styleEnabled) {\n updateBoundsFromOutline(bounds, ele);\n }\n if (styleEnabled && options.includeOutlines && !headless) {\n updateBoundsFromOutline(bounds, ele);\n }\n if (styleEnabled) {\n updateBoundsFromMiterBorder(bounds, ele);\n }\n } else if (isEdge && options.includeEdges) {\n if (styleEnabled && !headless) {\n var curveStyle = ele.pstyle('curve-style').strValue;\n\n // handle edge dimensions (rough box estimate)\n //////////////////////////////////////////////\n\n ex1 = Math.min(rstyle.srcX, rstyle.midX, rstyle.tgtX);\n ex2 = Math.max(rstyle.srcX, rstyle.midX, rstyle.tgtX);\n ey1 = Math.min(rstyle.srcY, rstyle.midY, rstyle.tgtY);\n ey2 = Math.max(rstyle.srcY, rstyle.midY, rstyle.tgtY);\n\n // take into account edge width\n ex1 -= wHalf;\n ex2 += wHalf;\n ey1 -= wHalf;\n ey2 += wHalf;\n updateBounds(bounds, ex1, ey1, ex2, ey2);\n\n // precise edges\n ////////////////\n\n if (curveStyle === 'haystack') {\n var hpts = rstyle.haystackPts;\n if (hpts && hpts.length === 2) {\n ex1 = hpts[0].x;\n ey1 = hpts[0].y;\n ex2 = hpts[1].x;\n ey2 = hpts[1].y;\n if (ex1 > ex2) {\n var temp = ex1;\n ex1 = ex2;\n ex2 = temp;\n }\n if (ey1 > ey2) {\n var _temp = ey1;\n ey1 = ey2;\n ey2 = _temp;\n }\n updateBounds(bounds, ex1 - wHalf, ey1 - wHalf, ex2 + wHalf, ey2 + wHalf);\n }\n } else if (curveStyle === 'bezier' || curveStyle === 'unbundled-bezier' || endsWith(curveStyle, 'segments') || endsWith(curveStyle, 'taxi')) {\n var pts;\n switch (curveStyle) {\n case 'bezier':\n case 'unbundled-bezier':\n pts = rstyle.bezierPts;\n break;\n case 'segments':\n case 'taxi':\n case 'round-segments':\n case 'round-taxi':\n pts = rstyle.linePts;\n break;\n }\n if (pts != null) {\n for (var j = 0; j < pts.length; j++) {\n var pt = pts[j];\n ex1 = pt.x - wHalf;\n ex2 = pt.x + wHalf;\n ey1 = pt.y - wHalf;\n ey2 = pt.y + wHalf;\n updateBounds(bounds, ex1, ey1, ex2, ey2);\n }\n }\n } // bezier-like or segment-like edge\n } else {\n // headless or style disabled\n\n // fallback on source and target positions\n //////////////////////////////////////////\n\n var n1 = ele.source();\n var n1pos = n1.position();\n var n2 = ele.target();\n var n2pos = n2.position();\n ex1 = n1pos.x;\n ex2 = n2pos.x;\n ey1 = n1pos.y;\n ey2 = n2pos.y;\n if (ex1 > ex2) {\n var _temp2 = ex1;\n ex1 = ex2;\n ex2 = _temp2;\n }\n if (ey1 > ey2) {\n var _temp3 = ey1;\n ey1 = ey2;\n ey2 = _temp3;\n }\n\n // take into account edge width\n ex1 -= wHalf;\n ex2 += wHalf;\n ey1 -= wHalf;\n ey2 += wHalf;\n updateBounds(bounds, ex1, ey1, ex2, ey2);\n } // headless or style disabled\n } // edges\n\n // handle edge arrow size\n /////////////////////////\n\n if (styleEnabled && options.includeEdges && isEdge) {\n updateBoundsFromArrow(bounds, ele, 'mid-source');\n updateBoundsFromArrow(bounds, ele, 'mid-target');\n updateBoundsFromArrow(bounds, ele, 'source');\n updateBoundsFromArrow(bounds, ele, 'target');\n }\n\n // ghost\n ////////\n\n if (styleEnabled) {\n var ghost = ele.pstyle('ghost').value === 'yes';\n if (ghost) {\n var gx = ele.pstyle('ghost-offset-x').pfValue;\n var gy = ele.pstyle('ghost-offset-y').pfValue;\n updateBounds(bounds, bounds.x1 + gx, bounds.y1 + gy, bounds.x2 + gx, bounds.y2 + gy);\n }\n }\n\n // always store the body bounds separately from the labels\n var bbBody = _p.bodyBounds = _p.bodyBounds || {};\n assignBoundingBox(bbBody, bounds);\n expandBoundingBoxSides(bbBody, manualExpansion);\n expandBoundingBox(bbBody, 1); // expand to work around browser dimension inaccuracies\n\n // overlay\n //////////\n\n if (styleEnabled) {\n ex1 = bounds.x1;\n ex2 = bounds.x2;\n ey1 = bounds.y1;\n ey2 = bounds.y2;\n updateBounds(bounds, ex1 - padding, ey1 - padding, ex2 + padding, ey2 + padding);\n }\n\n // always store the body bounds separately from the labels\n var bbOverlay = _p.overlayBounds = _p.overlayBounds || {};\n assignBoundingBox(bbOverlay, bounds);\n expandBoundingBoxSides(bbOverlay, manualExpansion);\n expandBoundingBox(bbOverlay, 1); // expand to work around browser dimension inaccuracies\n\n // handle label dimensions\n //////////////////////////\n\n var bbLabels = _p.labelBounds = _p.labelBounds || {};\n if (bbLabels.all != null) {\n clearBoundingBox(bbLabels.all);\n } else {\n bbLabels.all = makeBoundingBox();\n }\n if (styleEnabled && options.includeLabels) {\n if (options.includeMainLabels) {\n updateBoundsFromLabel(bounds, ele, null);\n }\n if (isEdge) {\n if (options.includeSourceLabels) {\n updateBoundsFromLabel(bounds, ele, 'source');\n }\n if (options.includeTargetLabels) {\n updateBoundsFromLabel(bounds, ele, 'target');\n }\n }\n } // style enabled for labels\n } // if displayed\n\n bounds.x1 = noninf(bounds.x1);\n bounds.y1 = noninf(bounds.y1);\n bounds.x2 = noninf(bounds.x2);\n bounds.y2 = noninf(bounds.y2);\n bounds.w = noninf(bounds.x2 - bounds.x1);\n bounds.h = noninf(bounds.y2 - bounds.y1);\n if (bounds.w > 0 && bounds.h > 0 && displayed) {\n expandBoundingBoxSides(bounds, manualExpansion);\n\n // expand bounds by 1 because antialiasing can increase the visual/effective size by 1 on all sides\n expandBoundingBox(bounds, 1);\n }\n return bounds;\n};\nvar getKey = function getKey(opts) {\n var i = 0;\n var tf = function tf(val) {\n return (val ? 1 : 0) << i++;\n };\n var key = 0;\n key += tf(opts.incudeNodes);\n key += tf(opts.includeEdges);\n key += tf(opts.includeLabels);\n key += tf(opts.includeMainLabels);\n key += tf(opts.includeSourceLabels);\n key += tf(opts.includeTargetLabels);\n key += tf(opts.includeOverlays);\n key += tf(opts.includeOutlines);\n return key;\n};\nvar getBoundingBoxPosKey = function getBoundingBoxPosKey(ele) {\n var r = function r(x) {\n return Math.round(x);\n };\n if (ele.isEdge()) {\n var p1 = ele.source().position();\n var p2 = ele.target().position();\n return hashIntsArray([r(p1.x), r(p1.y), r(p2.x), r(p2.y)]);\n } else {\n var p = ele.position();\n return hashIntsArray([r(p.x), r(p.y)]);\n }\n};\nvar cachedBoundingBoxImpl = function cachedBoundingBoxImpl(ele, opts) {\n var _p = ele._private;\n var bb;\n var isEdge = ele.isEdge();\n var key = opts == null ? defBbOptsKey : getKey(opts);\n var usingDefOpts = key === defBbOptsKey;\n if (_p.bbCache == null) {\n bb = boundingBoxImpl(ele, defBbOpts);\n _p.bbCache = bb;\n _p.bbCachePosKey = getBoundingBoxPosKey(ele);\n } else {\n bb = _p.bbCache;\n }\n\n // not using def opts => need to build up bb from combination of sub bbs\n if (!usingDefOpts) {\n var isNode = ele.isNode();\n bb = makeBoundingBox();\n if (opts.includeNodes && isNode || opts.includeEdges && !isNode) {\n if (opts.includeOverlays) {\n updateBoundsFromBox(bb, _p.overlayBounds);\n } else {\n updateBoundsFromBox(bb, _p.bodyBounds);\n }\n }\n if (opts.includeLabels) {\n if (opts.includeMainLabels && (!isEdge || opts.includeSourceLabels && opts.includeTargetLabels)) {\n updateBoundsFromBox(bb, _p.labelBounds.all);\n } else {\n if (opts.includeMainLabels) {\n updateBoundsFromBox(bb, _p.labelBounds.mainRot);\n }\n if (opts.includeSourceLabels) {\n updateBoundsFromBox(bb, _p.labelBounds.sourceRot);\n }\n if (opts.includeTargetLabels) {\n updateBoundsFromBox(bb, _p.labelBounds.targetRot);\n }\n }\n }\n bb.w = bb.x2 - bb.x1;\n bb.h = bb.y2 - bb.y1;\n }\n return bb;\n};\nvar defBbOpts = {\n includeNodes: true,\n includeEdges: true,\n includeLabels: true,\n includeMainLabels: true,\n includeSourceLabels: true,\n includeTargetLabels: true,\n includeOverlays: true,\n includeUnderlays: true,\n includeOutlines: true,\n useCache: true\n};\nvar defBbOptsKey = getKey(defBbOpts);\nvar filledBbOpts = defaults$g(defBbOpts);\nelesfn$b.boundingBox = function (options) {\n var bounds;\n var useCache = options === undefined || options.useCache === undefined || options.useCache === true;\n var isDirty = memoize(function (ele) {\n var _p = ele._private;\n return _p.bbCache == null || _p.styleDirty || _p.bbCachePosKey !== getBoundingBoxPosKey(ele);\n }, function (ele) {\n return ele.id();\n });\n\n // the main usecase is ele.boundingBox() for a single element with no/def options\n // specified s.t. the cache is used, so check for this case to make it faster by\n // avoiding the overhead of the rest of the function\n if (useCache && this.length === 1 && !isDirty(this[0])) {\n if (options === undefined) {\n options = defBbOpts;\n } else {\n options = filledBbOpts(options);\n }\n bounds = cachedBoundingBoxImpl(this[0], options);\n } else {\n bounds = makeBoundingBox();\n options = options || defBbOpts;\n var opts = filledBbOpts(options);\n var eles = this;\n var cy = eles.cy();\n var styleEnabled = cy.styleEnabled();\n\n // cache the isDirty state for all eles, edges first since they depend on node state\n this.edges().forEach(isDirty);\n this.nodes().forEach(isDirty);\n if (styleEnabled) {\n this.recalculateRenderedStyle(useCache);\n }\n this.updateCompoundBounds(!useCache);\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n if (isDirty(ele)) {\n ele.dirtyBoundingBoxCache();\n }\n updateBoundsFromBox(bounds, cachedBoundingBoxImpl(ele, opts));\n }\n }\n bounds.x1 = noninf(bounds.x1);\n bounds.y1 = noninf(bounds.y1);\n bounds.x2 = noninf(bounds.x2);\n bounds.y2 = noninf(bounds.y2);\n bounds.w = noninf(bounds.x2 - bounds.x1);\n bounds.h = noninf(bounds.y2 - bounds.y1);\n return bounds;\n};\nelesfn$b.dirtyBoundingBoxCache = function () {\n for (var i = 0; i < this.length; i++) {\n var _p = this[i]._private;\n _p.bbCache = null;\n _p.bbCachePosKey = null;\n _p.bodyBounds = null;\n _p.overlayBounds = null;\n _p.labelBounds.all = null;\n _p.labelBounds.source = null;\n _p.labelBounds.target = null;\n _p.labelBounds.main = null;\n _p.labelBounds.sourceRot = null;\n _p.labelBounds.targetRot = null;\n _p.labelBounds.mainRot = null;\n _p.arrowBounds.source = null;\n _p.arrowBounds.target = null;\n _p.arrowBounds['mid-source'] = null;\n _p.arrowBounds['mid-target'] = null;\n }\n this.emitAndNotify('bounds');\n return this;\n};\n\n// private helper to get bounding box for custom node positions\n// - good for perf in certain cases but currently requires dirtying the rendered style\n// - would be better to not modify the nodes but the nodes are read directly everywhere in the renderer...\n// - try to use for only things like discrete layouts where the node position would change anyway\nelesfn$b.boundingBoxAt = function (fn) {\n var nodes = this.nodes();\n var cy = this.cy();\n var hasCompoundNodes = cy.hasCompoundNodes();\n var parents = cy.collection();\n if (hasCompoundNodes) {\n parents = nodes.filter(function (node) {\n return node.isParent();\n });\n nodes = nodes.not(parents);\n }\n if (plainObject(fn)) {\n var obj = fn;\n fn = function fn() {\n return obj;\n };\n }\n var storeOldPos = function storeOldPos(node, i) {\n return node._private.bbAtOldPos = fn(node, i);\n };\n var getOldPos = function getOldPos(node) {\n return node._private.bbAtOldPos;\n };\n cy.startBatch();\n nodes.forEach(storeOldPos).silentPositions(fn);\n if (hasCompoundNodes) {\n parents.dirtyCompoundBoundsCache();\n parents.dirtyBoundingBoxCache();\n parents.updateCompoundBounds(true); // force update b/c we're inside a batch cycle\n }\n var bb = copyBoundingBox(this.boundingBox({\n useCache: false\n }));\n nodes.silentPositions(getOldPos);\n if (hasCompoundNodes) {\n parents.dirtyCompoundBoundsCache();\n parents.dirtyBoundingBoxCache();\n parents.updateCompoundBounds(true); // force update b/c we're inside a batch cycle\n }\n cy.endBatch();\n return bb;\n};\nfn$3.boundingbox = fn$3.bb = fn$3.boundingBox;\nfn$3.renderedBoundingbox = fn$3.renderedBoundingBox;\nvar bounds = elesfn$b;\n\nvar fn$2, elesfn$a;\nfn$2 = elesfn$a = {};\nvar defineDimFns = function defineDimFns(opts) {\n opts.uppercaseName = capitalize(opts.name);\n opts.autoName = 'auto' + opts.uppercaseName;\n opts.labelName = 'label' + opts.uppercaseName;\n opts.outerName = 'outer' + opts.uppercaseName;\n opts.uppercaseOuterName = capitalize(opts.outerName);\n fn$2[opts.name] = function dimImpl() {\n var ele = this[0];\n var _p = ele._private;\n var cy = _p.cy;\n var styleEnabled = cy._private.styleEnabled;\n if (ele) {\n if (styleEnabled) {\n if (ele.isParent()) {\n ele.updateCompoundBounds();\n return _p[opts.autoName] || 0;\n }\n var d = ele.pstyle(opts.name);\n switch (d.strValue) {\n case 'label':\n ele.recalculateRenderedStyle();\n return _p.rstyle[opts.labelName] || 0;\n default:\n return d.pfValue;\n }\n } else {\n return 1;\n }\n }\n };\n fn$2['outer' + opts.uppercaseName] = function outerDimImpl() {\n var ele = this[0];\n var _p = ele._private;\n var cy = _p.cy;\n var styleEnabled = cy._private.styleEnabled;\n if (ele) {\n if (styleEnabled) {\n var dim = ele[opts.name]();\n var borderPos = ele.pstyle('border-position').value;\n var border;\n if (borderPos === 'center') {\n border = ele.pstyle('border-width').pfValue; // n.b. 1/2 each side\n } else if (borderPos === 'outside') {\n border = 2 * ele.pstyle('border-width').pfValue;\n } else {\n // 'inside'\n border = 0;\n }\n var padding = 2 * ele.padding();\n return dim + border + padding;\n } else {\n return 1;\n }\n }\n };\n fn$2['rendered' + opts.uppercaseName] = function renderedDimImpl() {\n var ele = this[0];\n if (ele) {\n var d = ele[opts.name]();\n return d * this.cy().zoom();\n }\n };\n fn$2['rendered' + opts.uppercaseOuterName] = function renderedOuterDimImpl() {\n var ele = this[0];\n if (ele) {\n var od = ele[opts.outerName]();\n return od * this.cy().zoom();\n }\n };\n};\ndefineDimFns({\n name: 'width'\n});\ndefineDimFns({\n name: 'height'\n});\nelesfn$a.padding = function () {\n var ele = this[0];\n var _p = ele._private;\n if (ele.isParent()) {\n ele.updateCompoundBounds();\n if (_p.autoPadding !== undefined) {\n return _p.autoPadding;\n } else {\n return ele.pstyle('padding').pfValue;\n }\n } else {\n return ele.pstyle('padding').pfValue;\n }\n};\nelesfn$a.paddedHeight = function () {\n var ele = this[0];\n return ele.height() + 2 * ele.padding();\n};\nelesfn$a.paddedWidth = function () {\n var ele = this[0];\n return ele.width() + 2 * ele.padding();\n};\nvar widthHeight = elesfn$a;\n\nvar ifEdge = function ifEdge(ele, getValue) {\n if (ele.isEdge() && ele.takesUpSpace()) {\n return getValue(ele);\n }\n};\nvar ifEdgeRenderedPosition = function ifEdgeRenderedPosition(ele, getPoint) {\n if (ele.isEdge() && ele.takesUpSpace()) {\n var cy = ele.cy();\n return modelToRenderedPosition$1(getPoint(ele), cy.zoom(), cy.pan());\n }\n};\nvar ifEdgeRenderedPositions = function ifEdgeRenderedPositions(ele, getPoints) {\n if (ele.isEdge() && ele.takesUpSpace()) {\n var cy = ele.cy();\n var pan = cy.pan();\n var zoom = cy.zoom();\n return getPoints(ele).map(function (p) {\n return modelToRenderedPosition$1(p, zoom, pan);\n });\n }\n};\nvar controlPoints = function controlPoints(ele) {\n return ele.renderer().getControlPoints(ele);\n};\nvar segmentPoints = function segmentPoints(ele) {\n return ele.renderer().getSegmentPoints(ele);\n};\nvar sourceEndpoint = function sourceEndpoint(ele) {\n return ele.renderer().getSourceEndpoint(ele);\n};\nvar targetEndpoint = function targetEndpoint(ele) {\n return ele.renderer().getTargetEndpoint(ele);\n};\nvar midpoint = function midpoint(ele) {\n return ele.renderer().getEdgeMidpoint(ele);\n};\nvar pts = {\n controlPoints: {\n get: controlPoints,\n mult: true\n },\n segmentPoints: {\n get: segmentPoints,\n mult: true\n },\n sourceEndpoint: {\n get: sourceEndpoint\n },\n targetEndpoint: {\n get: targetEndpoint\n },\n midpoint: {\n get: midpoint\n }\n};\nvar renderedName = function renderedName(name) {\n return 'rendered' + name[0].toUpperCase() + name.substr(1);\n};\nvar edgePoints = Object.keys(pts).reduce(function (obj, name) {\n var spec = pts[name];\n var rName = renderedName(name);\n obj[name] = function () {\n return ifEdge(this, spec.get);\n };\n if (spec.mult) {\n obj[rName] = function () {\n return ifEdgeRenderedPositions(this, spec.get);\n };\n } else {\n obj[rName] = function () {\n return ifEdgeRenderedPosition(this, spec.get);\n };\n }\n return obj;\n}, {});\n\nvar dimensions = extend({}, position, bounds, widthHeight, edgePoints);\n\n/*!\nEvent object based on jQuery events, MIT license\n\nhttps://jquery.org/license/\nhttps://tldrlegal.com/license/mit-license\nhttps://github.com/jquery/jquery/blob/master/src/event.js\n*/\n\nvar Event = function Event(src, props) {\n this.recycle(src, props);\n};\nfunction returnFalse() {\n return false;\n}\nfunction returnTrue() {\n return true;\n}\n\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\nEvent.prototype = {\n instanceString: function instanceString() {\n return 'event';\n },\n recycle: function recycle(src, props) {\n this.isImmediatePropagationStopped = this.isPropagationStopped = this.isDefaultPrevented = returnFalse;\n if (src != null && src.preventDefault) {\n // Browser Event object\n this.type = src.type;\n\n // Events bubbling up the document may have been marked as prevented\n // by a handler lower down the tree; reflect the correct value.\n this.isDefaultPrevented = src.defaultPrevented ? returnTrue : returnFalse;\n } else if (src != null && src.type) {\n // Plain object containing all event details\n props = src;\n } else {\n // Event string\n this.type = src;\n }\n\n // Put explicitly provided properties onto the event object\n if (props != null) {\n // more efficient to manually copy fields we use\n this.originalEvent = props.originalEvent;\n this.type = props.type != null ? props.type : this.type;\n this.cy = props.cy;\n this.target = props.target;\n this.position = props.position;\n this.renderedPosition = props.renderedPosition;\n this.namespace = props.namespace;\n this.layout = props.layout;\n }\n if (this.cy != null && this.position != null && this.renderedPosition == null) {\n // create a rendered position based on the passed position\n var pos = this.position;\n var zoom = this.cy.zoom();\n var pan = this.cy.pan();\n this.renderedPosition = {\n x: pos.x * zoom + pan.x,\n y: pos.y * zoom + pan.y\n };\n }\n\n // Create a timestamp if incoming event doesn't have one\n this.timeStamp = src && src.timeStamp || Date.now();\n },\n preventDefault: function preventDefault() {\n this.isDefaultPrevented = returnTrue;\n var e = this.originalEvent;\n if (!e) {\n return;\n }\n\n // if preventDefault exists run it on the original event\n if (e.preventDefault) {\n e.preventDefault();\n }\n },\n stopPropagation: function stopPropagation() {\n this.isPropagationStopped = returnTrue;\n var e = this.originalEvent;\n if (!e) {\n return;\n }\n\n // if stopPropagation exists run it on the original event\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n },\n stopImmediatePropagation: function stopImmediatePropagation() {\n this.isImmediatePropagationStopped = returnTrue;\n this.stopPropagation();\n },\n isDefaultPrevented: returnFalse,\n isPropagationStopped: returnFalse,\n isImmediatePropagationStopped: returnFalse\n};\n\nvar eventRegex = /^([^.]+)(\\.(?:[^.]+))?$/; // regex for matching event strings (e.g. \"click.namespace\")\nvar universalNamespace = '.*'; // matches as if no namespace specified and prevents users from unbinding accidentally\n\nvar defaults$8 = {\n qualifierCompare: function qualifierCompare(q1, q2) {\n return q1 === q2;\n },\n eventMatches: function eventMatches(/*context, listener, eventObj*/\n ) {\n return true;\n },\n addEventFields: function addEventFields(/*context, evt*/\n ) {},\n callbackContext: function callbackContext(context /*, listener, eventObj*/) {\n return context;\n },\n beforeEmit: function beforeEmit(/* context, listener, eventObj */\n ) {},\n afterEmit: function afterEmit(/* context, listener, eventObj */\n ) {},\n bubble: function bubble(/*context*/\n ) {\n return false;\n },\n parent: function parent(/*context*/\n ) {\n return null;\n },\n context: null\n};\nvar defaultsKeys = Object.keys(defaults$8);\nvar emptyOpts = {};\nfunction Emitter() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : emptyOpts;\n var context = arguments.length > 1 ? arguments[1] : undefined;\n // micro-optimisation vs Object.assign() -- reduces Element instantiation time\n for (var i = 0; i < defaultsKeys.length; i++) {\n var key = defaultsKeys[i];\n this[key] = opts[key] || defaults$8[key];\n }\n this.context = context || this.context;\n this.listeners = [];\n this.emitting = 0;\n}\nvar p = Emitter.prototype;\nvar forEachEvent = function forEachEvent(self, handler, events, qualifier, callback, conf, confOverrides) {\n if (fn$6(qualifier)) {\n callback = qualifier;\n qualifier = null;\n }\n if (confOverrides) {\n if (conf == null) {\n conf = confOverrides;\n } else {\n conf = extend({}, conf, confOverrides);\n }\n }\n var eventList = array(events) ? events : events.split(/\\s+/);\n for (var i = 0; i < eventList.length; i++) {\n var evt = eventList[i];\n if (emptyString(evt)) {\n continue;\n }\n var match = evt.match(eventRegex); // type[.namespace]\n\n if (match) {\n var type = match[1];\n var namespace = match[2] ? match[2] : null;\n var ret = handler(self, evt, type, namespace, qualifier, callback, conf);\n if (ret === false) {\n break;\n } // allow exiting early\n }\n }\n};\nvar makeEventObj = function makeEventObj(self, obj) {\n self.addEventFields(self.context, obj);\n return new Event(obj.type, obj);\n};\nvar forEachEventObj = function forEachEventObj(self, handler, events) {\n if (event(events)) {\n handler(self, events);\n return;\n } else if (plainObject(events)) {\n handler(self, makeEventObj(self, events));\n return;\n }\n var eventList = array(events) ? events : events.split(/\\s+/);\n for (var i = 0; i < eventList.length; i++) {\n var evt = eventList[i];\n if (emptyString(evt)) {\n continue;\n }\n var match = evt.match(eventRegex); // type[.namespace]\n\n if (match) {\n var type = match[1];\n var namespace = match[2] ? match[2] : null;\n var eventObj = makeEventObj(self, {\n type: type,\n namespace: namespace,\n target: self.context\n });\n handler(self, eventObj);\n }\n }\n};\np.on = p.addListener = function (events, qualifier, callback, conf, confOverrides) {\n forEachEvent(this, function (self, event, type, namespace, qualifier, callback, conf) {\n if (fn$6(callback)) {\n self.listeners.push({\n event: event,\n // full event string\n callback: callback,\n // callback to run\n type: type,\n // the event type (e.g. 'click')\n namespace: namespace,\n // the event namespace (e.g. \".foo\")\n qualifier: qualifier,\n // a restriction on whether to match this emitter\n conf: conf // additional configuration\n });\n }\n }, events, qualifier, callback, conf, confOverrides);\n return this;\n};\np.one = function (events, qualifier, callback, conf) {\n return this.on(events, qualifier, callback, conf, {\n one: true\n });\n};\np.removeListener = p.off = function (events, qualifier, callback, conf) {\n var _this = this;\n if (this.emitting !== 0) {\n this.listeners = copyArray(this.listeners);\n }\n var listeners = this.listeners;\n var _loop = function _loop(i) {\n var listener = listeners[i];\n forEachEvent(_this, function (self, event, type, namespace, qualifier, callback /*, conf*/) {\n if ((listener.type === type || events === '*') && (!namespace && listener.namespace !== '.*' || listener.namespace === namespace) && (!qualifier || self.qualifierCompare(listener.qualifier, qualifier)) && (!callback || listener.callback === callback)) {\n listeners.splice(i, 1);\n return false;\n }\n }, events, qualifier, callback, conf);\n };\n for (var i = listeners.length - 1; i >= 0; i--) {\n _loop(i);\n }\n return this;\n};\np.removeAllListeners = function () {\n return this.removeListener('*');\n};\np.emit = p.trigger = function (events, extraParams, manualCallback) {\n var listeners = this.listeners;\n var numListenersBeforeEmit = listeners.length;\n this.emitting++;\n if (!array(extraParams)) {\n extraParams = [extraParams];\n }\n forEachEventObj(this, function (self, eventObj) {\n if (manualCallback != null) {\n listeners = [{\n event: eventObj.event,\n type: eventObj.type,\n namespace: eventObj.namespace,\n callback: manualCallback\n }];\n numListenersBeforeEmit = listeners.length;\n }\n var _loop2 = function _loop2() {\n var listener = listeners[i];\n if (listener.type === eventObj.type && (!listener.namespace || listener.namespace === eventObj.namespace || listener.namespace === universalNamespace) && self.eventMatches(self.context, listener, eventObj)) {\n var args = [eventObj];\n if (extraParams != null) {\n push(args, extraParams);\n }\n self.beforeEmit(self.context, listener, eventObj);\n if (listener.conf && listener.conf.one) {\n self.listeners = self.listeners.filter(function (l) {\n return l !== listener;\n });\n }\n var context = self.callbackContext(self.context, listener, eventObj);\n var ret = listener.callback.apply(context, args);\n self.afterEmit(self.context, listener, eventObj);\n if (ret === false) {\n eventObj.stopPropagation();\n eventObj.preventDefault();\n }\n } // if listener matches\n };\n for (var i = 0; i < numListenersBeforeEmit; i++) {\n _loop2();\n } // for listener\n\n if (self.bubble(self.context) && !eventObj.isPropagationStopped()) {\n self.parent(self.context).emit(eventObj, extraParams);\n }\n }, events);\n this.emitting--;\n return this;\n};\n\nvar emitterOptions$1 = {\n qualifierCompare: function qualifierCompare(selector1, selector2) {\n if (selector1 == null || selector2 == null) {\n return selector1 == null && selector2 == null;\n } else {\n return selector1.sameText(selector2);\n }\n },\n eventMatches: function eventMatches(ele, listener, eventObj) {\n var selector = listener.qualifier;\n if (selector != null) {\n return ele !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target);\n }\n return true;\n },\n addEventFields: function addEventFields(ele, evt) {\n evt.cy = ele.cy();\n evt.target = ele;\n },\n callbackContext: function callbackContext(ele, listener, eventObj) {\n return listener.qualifier != null ? eventObj.target : ele;\n },\n beforeEmit: function beforeEmit(context, listener /*, eventObj*/) {\n if (listener.conf && listener.conf.once) {\n listener.conf.onceCollection.removeListener(listener.event, listener.qualifier, listener.callback);\n }\n },\n bubble: function bubble() {\n return true;\n },\n parent: function parent(ele) {\n return ele.isChild() ? ele.parent() : ele.cy();\n }\n};\nvar argSelector$1 = function argSelector(arg) {\n if (string(arg)) {\n return new Selector(arg);\n } else {\n return arg;\n }\n};\nvar elesfn$9 = {\n createEmitter: function createEmitter() {\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var _p = ele._private;\n if (!_p.emitter) {\n _p.emitter = new Emitter(emitterOptions$1, ele);\n }\n }\n return this;\n },\n emitter: function emitter() {\n return this._private.emitter;\n },\n on: function on(events, selector, callback) {\n var argSel = argSelector$1(selector);\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n ele.emitter().on(events, argSel, callback);\n }\n return this;\n },\n removeListener: function removeListener(events, selector, callback) {\n var argSel = argSelector$1(selector);\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n ele.emitter().removeListener(events, argSel, callback);\n }\n return this;\n },\n removeAllListeners: function removeAllListeners() {\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n ele.emitter().removeAllListeners();\n }\n return this;\n },\n one: function one(events, selector, callback) {\n var argSel = argSelector$1(selector);\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n ele.emitter().one(events, argSel, callback);\n }\n return this;\n },\n once: function once(events, selector, callback) {\n var argSel = argSelector$1(selector);\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n ele.emitter().on(events, argSel, callback, {\n once: true,\n onceCollection: this\n });\n }\n },\n emit: function emit(events, extraParams) {\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n ele.emitter().emit(events, extraParams);\n }\n return this;\n },\n emitAndNotify: function emitAndNotify(event, extraParams) {\n // for internal use only\n if (this.length === 0) {\n return;\n } // empty collections don't need to notify anything\n\n // notify renderer\n this.cy().notify(event, this);\n this.emit(event, extraParams);\n return this;\n }\n};\ndefine.eventAliasesOn(elesfn$9);\n\nvar elesfn$8 = {\n nodes: function nodes(selector) {\n return this.filter(function (ele) {\n return ele.isNode();\n }).filter(selector);\n },\n edges: function edges(selector) {\n return this.filter(function (ele) {\n return ele.isEdge();\n }).filter(selector);\n },\n // internal helper to get nodes and edges as separate collections with single iteration over elements\n byGroup: function byGroup() {\n var nodes = this.spawn();\n var edges = this.spawn();\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n if (ele.isNode()) {\n nodes.push(ele);\n } else {\n edges.push(ele);\n }\n }\n return {\n nodes: nodes,\n edges: edges\n };\n },\n filter: function filter(_filter, thisArg) {\n if (_filter === undefined) {\n // check this first b/c it's the most common/performant case\n return this;\n } else if (string(_filter) || elementOrCollection(_filter)) {\n return new Selector(_filter).filter(this);\n } else if (fn$6(_filter)) {\n var filterEles = this.spawn();\n var eles = this;\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var include = thisArg ? _filter.apply(thisArg, [ele, i, eles]) : _filter(ele, i, eles);\n if (include) {\n filterEles.push(ele);\n }\n }\n return filterEles;\n }\n return this.spawn(); // if not handled by above, give 'em an empty collection\n },\n not: function not(toRemove) {\n if (!toRemove) {\n return this;\n } else {\n if (string(toRemove)) {\n toRemove = this.filter(toRemove);\n }\n var elements = this.spawn();\n for (var i = 0; i < this.length; i++) {\n var element = this[i];\n var remove = toRemove.has(element);\n if (!remove) {\n elements.push(element);\n }\n }\n return elements;\n }\n },\n absoluteComplement: function absoluteComplement() {\n var cy = this.cy();\n return cy.mutableElements().not(this);\n },\n intersect: function intersect(other) {\n // if a selector is specified, then filter by it instead\n if (string(other)) {\n var selector = other;\n return this.filter(selector);\n }\n var elements = this.spawn();\n var col1 = this;\n var col2 = other;\n var col1Smaller = this.length < other.length;\n var colS = col1Smaller ? col1 : col2;\n var colL = col1Smaller ? col2 : col1;\n for (var i = 0; i < colS.length; i++) {\n var ele = colS[i];\n if (colL.has(ele)) {\n elements.push(ele);\n }\n }\n return elements;\n },\n xor: function xor(other) {\n var cy = this._private.cy;\n if (string(other)) {\n other = cy.$(other);\n }\n var elements = this.spawn();\n var col1 = this;\n var col2 = other;\n var add = function add(col, other) {\n for (var i = 0; i < col.length; i++) {\n var ele = col[i];\n var id = ele._private.data.id;\n var inOther = other.hasElementWithId(id);\n if (!inOther) {\n elements.push(ele);\n }\n }\n };\n add(col1, col2);\n add(col2, col1);\n return elements;\n },\n diff: function diff(other) {\n var cy = this._private.cy;\n if (string(other)) {\n other = cy.$(other);\n }\n var left = this.spawn();\n var right = this.spawn();\n var both = this.spawn();\n var col1 = this;\n var col2 = other;\n var add = function add(col, other, retEles) {\n for (var i = 0; i < col.length; i++) {\n var ele = col[i];\n var id = ele._private.data.id;\n var inOther = other.hasElementWithId(id);\n if (inOther) {\n both.merge(ele);\n } else {\n retEles.push(ele);\n }\n }\n };\n add(col1, col2, left);\n add(col2, col1, right);\n return {\n left: left,\n right: right,\n both: both\n };\n },\n add: function add(toAdd) {\n var cy = this._private.cy;\n if (!toAdd) {\n return this;\n }\n if (string(toAdd)) {\n var selector = toAdd;\n toAdd = cy.mutableElements().filter(selector);\n }\n var elements = this.spawnSelf();\n for (var i = 0; i < toAdd.length; i++) {\n var ele = toAdd[i];\n var add = !this.has(ele);\n if (add) {\n elements.push(ele);\n }\n }\n return elements;\n },\n // in place merge on calling collection\n merge: function merge(toAdd) {\n var _p = this._private;\n var cy = _p.cy;\n if (!toAdd) {\n return this;\n }\n if (toAdd && string(toAdd)) {\n var selector = toAdd;\n toAdd = cy.mutableElements().filter(selector);\n }\n var map = _p.map;\n for (var i = 0; i < toAdd.length; i++) {\n var toAddEle = toAdd[i];\n var id = toAddEle._private.data.id;\n var add = !map.has(id);\n if (add) {\n var index = this.length++;\n this[index] = toAddEle;\n map.set(id, {\n ele: toAddEle,\n index: index\n });\n }\n }\n return this; // chaining\n },\n unmergeAt: function unmergeAt(i) {\n var ele = this[i];\n var id = ele.id();\n var _p = this._private;\n var map = _p.map;\n\n // remove ele\n this[i] = undefined;\n map[\"delete\"](id);\n var unmergedLastEle = i === this.length - 1;\n\n // replace empty spot with last ele in collection\n if (this.length > 1 && !unmergedLastEle) {\n var lastEleI = this.length - 1;\n var lastEle = this[lastEleI];\n var lastEleId = lastEle._private.data.id;\n this[lastEleI] = undefined;\n this[i] = lastEle;\n map.set(lastEleId, {\n ele: lastEle,\n index: i\n });\n }\n\n // the collection is now 1 ele smaller\n this.length--;\n return this;\n },\n // remove single ele in place in calling collection\n unmergeOne: function unmergeOne(ele) {\n ele = ele[0];\n var _p = this._private;\n var id = ele._private.data.id;\n var map = _p.map;\n var entry = map.get(id);\n if (!entry) {\n return this; // no need to remove\n }\n var i = entry.index;\n this.unmergeAt(i);\n return this;\n },\n // remove eles in place on calling collection\n unmerge: function unmerge(toRemove) {\n var cy = this._private.cy;\n if (!toRemove) {\n return this;\n }\n if (toRemove && string(toRemove)) {\n var selector = toRemove;\n toRemove = cy.mutableElements().filter(selector);\n }\n for (var i = 0; i < toRemove.length; i++) {\n this.unmergeOne(toRemove[i]);\n }\n return this; // chaining\n },\n unmergeBy: function unmergeBy(toRmFn) {\n for (var i = this.length - 1; i >= 0; i--) {\n var ele = this[i];\n if (toRmFn(ele)) {\n this.unmergeAt(i);\n }\n }\n return this;\n },\n map: function map(mapFn, thisArg) {\n var arr = [];\n var eles = this;\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var ret = thisArg ? mapFn.apply(thisArg, [ele, i, eles]) : mapFn(ele, i, eles);\n arr.push(ret);\n }\n return arr;\n },\n reduce: function reduce(fn, initialValue) {\n var val = initialValue;\n var eles = this;\n for (var i = 0; i < eles.length; i++) {\n val = fn(val, eles[i], i, eles);\n }\n return val;\n },\n max: function max(valFn, thisArg) {\n var max = -Infinity;\n var maxEle;\n var eles = this;\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var val = thisArg ? valFn.apply(thisArg, [ele, i, eles]) : valFn(ele, i, eles);\n if (val > max) {\n max = val;\n maxEle = ele;\n }\n }\n return {\n value: max,\n ele: maxEle\n };\n },\n min: function min(valFn, thisArg) {\n var min = Infinity;\n var minEle;\n var eles = this;\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var val = thisArg ? valFn.apply(thisArg, [ele, i, eles]) : valFn(ele, i, eles);\n if (val < min) {\n min = val;\n minEle = ele;\n }\n }\n return {\n value: min,\n ele: minEle\n };\n }\n};\n\n// aliases\nvar fn$1 = elesfn$8;\nfn$1['u'] = fn$1['|'] = fn$1['+'] = fn$1.union = fn$1.or = fn$1.add;\nfn$1['\\\\'] = fn$1['!'] = fn$1['-'] = fn$1.difference = fn$1.relativeComplement = fn$1.subtract = fn$1.not;\nfn$1['n'] = fn$1['&'] = fn$1['.'] = fn$1.and = fn$1.intersection = fn$1.intersect;\nfn$1['^'] = fn$1['(+)'] = fn$1['(-)'] = fn$1.symmetricDifference = fn$1.symdiff = fn$1.xor;\nfn$1.fnFilter = fn$1.filterFn = fn$1.stdFilter = fn$1.filter;\nfn$1.complement = fn$1.abscomp = fn$1.absoluteComplement;\n\nvar elesfn$7 = {\n isNode: function isNode() {\n return this.group() === 'nodes';\n },\n isEdge: function isEdge() {\n return this.group() === 'edges';\n },\n isLoop: function isLoop() {\n return this.isEdge() && this.source()[0] === this.target()[0];\n },\n isSimple: function isSimple() {\n return this.isEdge() && this.source()[0] !== this.target()[0];\n },\n group: function group() {\n var ele = this[0];\n if (ele) {\n return ele._private.group;\n }\n }\n};\n\n/**\n * Elements are drawn in a specific order based on compound depth (low to high), the element type (nodes above edges),\n * and z-index (low to high). These styles affect how this applies:\n *\n * z-compound-depth: May be `bottom | orphan | auto | top`. The first drawn is `bottom`, then `orphan` which is the\n * same depth as the root of the compound graph, followed by the default value `auto` which draws in order from\n * root to leaves of the compound graph. The last drawn is `top`.\n * z-index-compare: May be `auto | manual`. The default value is `auto` which always draws edges under nodes.\n * `manual` ignores this convention and draws based on the `z-index` value setting.\n * z-index: An integer value that affects the relative draw order of elements. In general, an element with a higher\n * `z-index` will be drawn on top of an element with a lower `z-index`.\n */\nvar zIndexSort = function zIndexSort(a, b) {\n var cy = a.cy();\n var hasCompoundNodes = cy.hasCompoundNodes();\n function getDepth(ele) {\n var style = ele.pstyle('z-compound-depth');\n if (style.value === 'auto') {\n return hasCompoundNodes ? ele.zDepth() : 0;\n } else if (style.value === 'bottom') {\n return -1;\n } else if (style.value === 'top') {\n return MAX_INT$1;\n }\n // 'orphan'\n return 0;\n }\n var depthDiff = getDepth(a) - getDepth(b);\n if (depthDiff !== 0) {\n return depthDiff;\n }\n function getEleDepth(ele) {\n var style = ele.pstyle('z-index-compare');\n if (style.value === 'auto') {\n return ele.isNode() ? 1 : 0;\n }\n // 'manual'\n return 0;\n }\n var eleDiff = getEleDepth(a) - getEleDepth(b);\n if (eleDiff !== 0) {\n return eleDiff;\n }\n var zDiff = a.pstyle('z-index').value - b.pstyle('z-index').value;\n if (zDiff !== 0) {\n return zDiff;\n }\n // compare indices in the core (order added to graph w/ last on top)\n return a.poolIndex() - b.poolIndex();\n};\n\nvar elesfn$6 = {\n forEach: function forEach(fn, thisArg) {\n if (fn$6(fn)) {\n var N = this.length;\n for (var i = 0; i < N; i++) {\n var ele = this[i];\n var ret = thisArg ? fn.apply(thisArg, [ele, i, this]) : fn(ele, i, this);\n if (ret === false) {\n break;\n } // exit each early on return false\n }\n }\n return this;\n },\n toArray: function toArray() {\n var array = [];\n for (var i = 0; i < this.length; i++) {\n array.push(this[i]);\n }\n return array;\n },\n slice: function slice(start, end) {\n var array = [];\n var thisSize = this.length;\n if (end == null) {\n end = thisSize;\n }\n if (start == null) {\n start = 0;\n }\n if (start < 0) {\n start = thisSize + start;\n }\n if (end < 0) {\n end = thisSize + end;\n }\n for (var i = start; i >= 0 && i < end && i < thisSize; i++) {\n array.push(this[i]);\n }\n return this.spawn(array);\n },\n size: function size() {\n return this.length;\n },\n eq: function eq(i) {\n return this[i] || this.spawn();\n },\n first: function first() {\n return this[0] || this.spawn();\n },\n last: function last() {\n return this[this.length - 1] || this.spawn();\n },\n empty: function empty() {\n return this.length === 0;\n },\n nonempty: function nonempty() {\n return !this.empty();\n },\n sort: function sort(sortFn) {\n if (!fn$6(sortFn)) {\n return this;\n }\n var sorted = this.toArray().sort(sortFn);\n return this.spawn(sorted);\n },\n sortByZIndex: function sortByZIndex() {\n return this.sort(zIndexSort);\n },\n zDepth: function zDepth() {\n var ele = this[0];\n if (!ele) {\n return undefined;\n }\n\n // let cy = ele.cy();\n var _p = ele._private;\n var group = _p.group;\n if (group === 'nodes') {\n var depth = _p.data.parent ? ele.parents().size() : 0;\n if (!ele.isParent()) {\n return MAX_INT$1 - 1; // childless nodes always on top\n }\n return depth;\n } else {\n var src = _p.source;\n var tgt = _p.target;\n var srcDepth = src.zDepth();\n var tgtDepth = tgt.zDepth();\n return Math.max(srcDepth, tgtDepth, 0); // depth of deepest parent\n }\n }\n};\nelesfn$6.each = elesfn$6.forEach;\nvar defineSymbolIterator = function defineSymbolIterator() {\n var typeofUndef = \"undefined\" ;\n var isIteratorSupported = (typeof Symbol === \"undefined\" ? \"undefined\" : _typeof(Symbol)) != typeofUndef && _typeof(Symbol.iterator) != typeofUndef;\n if (isIteratorSupported) {\n elesfn$6[Symbol.iterator] = function () {\n var _this = this;\n var entry = {\n value: undefined,\n done: false\n };\n var i = 0;\n var length = this.length;\n return _defineProperty$1({\n next: function next() {\n if (i < length) {\n entry.value = _this[i++];\n } else {\n entry.value = undefined;\n entry.done = true;\n }\n return entry;\n }\n }, Symbol.iterator, function () {\n return this;\n });\n };\n }\n};\ndefineSymbolIterator();\n\nvar getLayoutDimensionOptions = defaults$g({\n nodeDimensionsIncludeLabels: false\n});\nvar elesfn$5 = {\n // Calculates and returns node dimensions { x, y } based on options given\n layoutDimensions: function layoutDimensions(options) {\n options = getLayoutDimensionOptions(options);\n var dims;\n if (!this.takesUpSpace()) {\n dims = {\n w: 0,\n h: 0\n };\n } else if (options.nodeDimensionsIncludeLabels) {\n var bbDim = this.boundingBox();\n dims = {\n w: bbDim.w,\n h: bbDim.h\n };\n } else {\n dims = {\n w: this.outerWidth(),\n h: this.outerHeight()\n };\n }\n\n // sanitise the dimensions for external layouts (avoid division by zero)\n if (dims.w === 0 || dims.h === 0) {\n dims.w = dims.h = 1;\n }\n return dims;\n },\n // using standard layout options, apply position function (w/ or w/o animation)\n layoutPositions: function layoutPositions(layout, options, fn) {\n var nodes = this.nodes().filter(function (n) {\n return !n.isParent();\n });\n var cy = this.cy();\n var layoutEles = options.eles; // nodes & edges\n var getMemoizeKey = function getMemoizeKey(node) {\n return node.id();\n };\n var fnMem = memoize(fn, getMemoizeKey); // memoized version of position function\n\n layout.emit({\n type: 'layoutstart',\n layout: layout\n });\n layout.animations = [];\n var calculateSpacing = function calculateSpacing(spacing, nodesBb, pos) {\n var center = {\n x: nodesBb.x1 + nodesBb.w / 2,\n y: nodesBb.y1 + nodesBb.h / 2\n };\n var spacingVector = {\n // scale from center of bounding box (not necessarily 0,0)\n x: (pos.x - center.x) * spacing,\n y: (pos.y - center.y) * spacing\n };\n return {\n x: center.x + spacingVector.x,\n y: center.y + spacingVector.y\n };\n };\n var useSpacingFactor = options.spacingFactor && options.spacingFactor !== 1;\n var spacingBb = function spacingBb() {\n if (!useSpacingFactor) {\n return null;\n }\n var bb = makeBoundingBox();\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n var pos = fnMem(node, i);\n expandBoundingBoxByPoint(bb, pos.x, pos.y);\n }\n return bb;\n };\n var bb = spacingBb();\n var getFinalPos = memoize(function (node, i) {\n var newPos = fnMem(node, i);\n if (useSpacingFactor) {\n var spacing = Math.abs(options.spacingFactor);\n newPos = calculateSpacing(spacing, bb, newPos);\n }\n if (options.transform != null) {\n newPos = options.transform(node, newPos);\n }\n return newPos;\n }, getMemoizeKey);\n if (options.animate) {\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n var newPos = getFinalPos(node, i);\n var animateNode = options.animateFilter == null || options.animateFilter(node, i);\n if (animateNode) {\n var ani = node.animation({\n position: newPos,\n duration: options.animationDuration,\n easing: options.animationEasing\n });\n layout.animations.push(ani);\n } else {\n node.position(newPos);\n }\n }\n if (options.fit) {\n var fitAni = cy.animation({\n fit: {\n boundingBox: layoutEles.boundingBoxAt(getFinalPos),\n padding: options.padding\n },\n duration: options.animationDuration,\n easing: options.animationEasing\n });\n layout.animations.push(fitAni);\n } else if (options.zoom !== undefined && options.pan !== undefined) {\n var zoomPanAni = cy.animation({\n zoom: options.zoom,\n pan: options.pan,\n duration: options.animationDuration,\n easing: options.animationEasing\n });\n layout.animations.push(zoomPanAni);\n }\n layout.animations.forEach(function (ani) {\n return ani.play();\n });\n layout.one('layoutready', options.ready);\n layout.emit({\n type: 'layoutready',\n layout: layout\n });\n Promise$1.all(layout.animations.map(function (ani) {\n return ani.promise();\n })).then(function () {\n layout.one('layoutstop', options.stop);\n layout.emit({\n type: 'layoutstop',\n layout: layout\n });\n });\n } else {\n nodes.positions(getFinalPos);\n if (options.fit) {\n cy.fit(options.eles, options.padding);\n }\n if (options.zoom != null) {\n cy.zoom(options.zoom);\n }\n if (options.pan) {\n cy.pan(options.pan);\n }\n layout.one('layoutready', options.ready);\n layout.emit({\n type: 'layoutready',\n layout: layout\n });\n layout.one('layoutstop', options.stop);\n layout.emit({\n type: 'layoutstop',\n layout: layout\n });\n }\n return this; // chaining\n },\n layout: function layout(options) {\n var cy = this.cy();\n return cy.makeLayout(extend({}, options, {\n eles: this\n }));\n }\n};\n\n// aliases:\nelesfn$5.createLayout = elesfn$5.makeLayout = elesfn$5.layout;\n\nfunction styleCache(key, fn, ele) {\n var _p = ele._private;\n var cache = _p.styleCache = _p.styleCache || [];\n var val;\n if ((val = cache[key]) != null) {\n return val;\n } else {\n val = cache[key] = fn(ele);\n return val;\n }\n}\nfunction cacheStyleFunction(key, fn) {\n key = hashString(key);\n return function cachedStyleFunction(ele) {\n return styleCache(key, fn, ele);\n };\n}\nfunction cachePrototypeStyleFunction(key, fn) {\n key = hashString(key);\n var selfFn = function selfFn(ele) {\n return fn.call(ele);\n };\n return function cachedPrototypeStyleFunction() {\n var ele = this[0];\n if (ele) {\n return styleCache(key, selfFn, ele);\n }\n };\n}\nvar elesfn$4 = {\n recalculateRenderedStyle: function recalculateRenderedStyle(useCache) {\n var cy = this.cy();\n var renderer = cy.renderer();\n var styleEnabled = cy.styleEnabled();\n if (renderer && styleEnabled) {\n renderer.recalculateRenderedStyle(this, useCache);\n }\n return this;\n },\n dirtyStyleCache: function dirtyStyleCache() {\n var cy = this.cy();\n var dirty = function dirty(ele) {\n return ele._private.styleCache = null;\n };\n if (cy.hasCompoundNodes()) {\n var eles;\n eles = this.spawnSelf().merge(this.descendants()).merge(this.parents());\n eles.merge(eles.connectedEdges());\n eles.forEach(dirty);\n } else {\n this.forEach(function (ele) {\n dirty(ele);\n ele.connectedEdges().forEach(dirty);\n });\n }\n return this;\n },\n // fully updates (recalculates) the style for the elements\n updateStyle: function updateStyle(notifyRenderer) {\n var cy = this._private.cy;\n if (!cy.styleEnabled()) {\n return this;\n }\n if (cy.batching()) {\n var bEles = cy._private.batchStyleEles;\n bEles.merge(this);\n return this; // chaining and exit early when batching\n }\n var hasCompounds = cy.hasCompoundNodes();\n var updatedEles = this;\n notifyRenderer = notifyRenderer || notifyRenderer === undefined ? true : false;\n if (hasCompounds) {\n // then add everything up and down for compound selector checks\n updatedEles = this.spawnSelf().merge(this.descendants()).merge(this.parents());\n }\n\n // let changedEles = style.apply( updatedEles );\n var changedEles = updatedEles;\n if (notifyRenderer) {\n changedEles.emitAndNotify('style'); // let renderer know we changed style\n } else {\n changedEles.emit('style'); // just fire the event\n }\n updatedEles.forEach(function (ele) {\n return ele._private.styleDirty = true;\n });\n return this; // chaining\n },\n // private: clears dirty flag and recalculates style\n cleanStyle: function cleanStyle() {\n var cy = this.cy();\n if (!cy.styleEnabled()) {\n return;\n }\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n if (ele._private.styleDirty) {\n // n.b. this flag should be set before apply() to avoid potential infinite recursion\n ele._private.styleDirty = false;\n cy.style().apply(ele);\n }\n }\n },\n // get the internal parsed style object for the specified property\n parsedStyle: function parsedStyle(property) {\n var includeNonDefault = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var ele = this[0];\n var cy = ele.cy();\n if (!cy.styleEnabled()) {\n return;\n }\n if (ele) {\n // this.cleanStyle();\n\n // Inline the important part of cleanStyle(), for raw performance\n if (ele._private.styleDirty) {\n // n.b. this flag should be set before apply() to avoid potential infinite recursion\n ele._private.styleDirty = false;\n cy.style().apply(ele);\n }\n var overriddenStyle = ele._private.style[property];\n if (overriddenStyle != null) {\n return overriddenStyle;\n } else if (includeNonDefault) {\n return cy.style().getDefaultProperty(property);\n } else {\n return null;\n }\n }\n },\n numericStyle: function numericStyle(property) {\n var ele = this[0];\n if (!ele.cy().styleEnabled()) {\n return;\n }\n if (ele) {\n var pstyle = ele.pstyle(property);\n return pstyle.pfValue !== undefined ? pstyle.pfValue : pstyle.value;\n }\n },\n numericStyleUnits: function numericStyleUnits(property) {\n var ele = this[0];\n if (!ele.cy().styleEnabled()) {\n return;\n }\n if (ele) {\n return ele.pstyle(property).units;\n }\n },\n // get the specified css property as a rendered value (i.e. on-screen value)\n // or get the whole rendered style if no property specified (NB doesn't allow setting)\n renderedStyle: function renderedStyle(property) {\n var cy = this.cy();\n if (!cy.styleEnabled()) {\n return this;\n }\n var ele = this[0];\n if (ele) {\n return cy.style().getRenderedStyle(ele, property);\n }\n },\n // read the calculated css style of the element or override the style (via a bypass)\n style: function style(name, value) {\n var cy = this.cy();\n if (!cy.styleEnabled()) {\n return this;\n }\n var updateTransitions = false;\n var style = cy.style();\n if (plainObject(name)) {\n // then extend the bypass\n var props = name;\n style.applyBypass(this, props, updateTransitions);\n this.emitAndNotify('style'); // let the renderer know we've updated style\n } else if (string(name)) {\n if (value === undefined) {\n // then get the property from the style\n var ele = this[0];\n if (ele) {\n return style.getStylePropertyValue(ele, name);\n } else {\n // empty collection => can't get any value\n return;\n }\n } else {\n // then set the bypass with the property value\n style.applyBypass(this, name, value, updateTransitions);\n this.emitAndNotify('style'); // let the renderer know we've updated style\n }\n } else if (name === undefined) {\n var _ele = this[0];\n if (_ele) {\n return style.getRawStyle(_ele);\n } else {\n // empty collection => can't get any value\n return;\n }\n }\n return this; // chaining\n },\n removeStyle: function removeStyle(names) {\n var cy = this.cy();\n if (!cy.styleEnabled()) {\n return this;\n }\n var updateTransitions = false;\n var style = cy.style();\n var eles = this;\n if (names === undefined) {\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n style.removeAllBypasses(ele, updateTransitions);\n }\n } else {\n names = names.split(/\\s+/);\n for (var _i = 0; _i < eles.length; _i++) {\n var _ele2 = eles[_i];\n style.removeBypasses(_ele2, names, updateTransitions);\n }\n }\n this.emitAndNotify('style'); // let the renderer know we've updated style\n\n return this; // chaining\n },\n show: function show() {\n this.css('display', 'element');\n return this; // chaining\n },\n hide: function hide() {\n this.css('display', 'none');\n return this; // chaining\n },\n effectiveOpacity: function effectiveOpacity() {\n var cy = this.cy();\n if (!cy.styleEnabled()) {\n return 1;\n }\n var hasCompoundNodes = cy.hasCompoundNodes();\n var ele = this[0];\n if (ele) {\n var _p = ele._private;\n var parentOpacity = ele.pstyle('opacity').value;\n if (!hasCompoundNodes) {\n return parentOpacity;\n }\n var parents = !_p.data.parent ? null : ele.parents();\n if (parents) {\n for (var i = 0; i < parents.length; i++) {\n var parent = parents[i];\n var opacity = parent.pstyle('opacity').value;\n parentOpacity = opacity * parentOpacity;\n }\n }\n return parentOpacity;\n }\n },\n transparent: function transparent() {\n var cy = this.cy();\n if (!cy.styleEnabled()) {\n return false;\n }\n var ele = this[0];\n var hasCompoundNodes = ele.cy().hasCompoundNodes();\n if (ele) {\n if (!hasCompoundNodes) {\n return ele.pstyle('opacity').value === 0;\n } else {\n return ele.effectiveOpacity() === 0;\n }\n }\n },\n backgrounding: function backgrounding() {\n var cy = this.cy();\n if (!cy.styleEnabled()) {\n return false;\n }\n var ele = this[0];\n return ele._private.backgrounding ? true : false;\n }\n};\nfunction checkCompound(ele, parentOk) {\n var _p = ele._private;\n var parents = _p.data.parent ? ele.parents() : null;\n if (parents) {\n for (var i = 0; i < parents.length; i++) {\n var parent = parents[i];\n if (!parentOk(parent)) {\n return false;\n }\n }\n }\n return true;\n}\nfunction defineDerivedStateFunction(specs) {\n var ok = specs.ok;\n var edgeOkViaNode = specs.edgeOkViaNode || specs.ok;\n var parentOk = specs.parentOk || specs.ok;\n return function () {\n var cy = this.cy();\n if (!cy.styleEnabled()) {\n return true;\n }\n var ele = this[0];\n var hasCompoundNodes = cy.hasCompoundNodes();\n if (ele) {\n var _p = ele._private;\n if (!ok(ele)) {\n return false;\n }\n if (ele.isNode()) {\n return !hasCompoundNodes || checkCompound(ele, parentOk);\n } else {\n var src = _p.source;\n var tgt = _p.target;\n return edgeOkViaNode(src) && (!hasCompoundNodes || checkCompound(src, edgeOkViaNode)) && (src === tgt || edgeOkViaNode(tgt) && (!hasCompoundNodes || checkCompound(tgt, edgeOkViaNode)));\n }\n }\n };\n}\nvar eleTakesUpSpace = cacheStyleFunction('eleTakesUpSpace', function (ele) {\n return ele.pstyle('display').value === 'element' && ele.width() !== 0 && (ele.isNode() ? ele.height() !== 0 : true);\n});\nelesfn$4.takesUpSpace = cachePrototypeStyleFunction('takesUpSpace', defineDerivedStateFunction({\n ok: eleTakesUpSpace\n}));\nvar eleInteractive = cacheStyleFunction('eleInteractive', function (ele) {\n return ele.pstyle('events').value === 'yes' && ele.pstyle('visibility').value === 'visible' && eleTakesUpSpace(ele);\n});\nvar parentInteractive = cacheStyleFunction('parentInteractive', function (parent) {\n return parent.pstyle('visibility').value === 'visible' && eleTakesUpSpace(parent);\n});\nelesfn$4.interactive = cachePrototypeStyleFunction('interactive', defineDerivedStateFunction({\n ok: eleInteractive,\n parentOk: parentInteractive,\n edgeOkViaNode: eleTakesUpSpace\n}));\nelesfn$4.noninteractive = function () {\n var ele = this[0];\n if (ele) {\n return !ele.interactive();\n }\n};\nvar eleVisible = cacheStyleFunction('eleVisible', function (ele) {\n return ele.pstyle('visibility').value === 'visible' && ele.pstyle('opacity').pfValue !== 0 && eleTakesUpSpace(ele);\n});\nvar edgeVisibleViaNode = eleTakesUpSpace;\nelesfn$4.visible = cachePrototypeStyleFunction('visible', defineDerivedStateFunction({\n ok: eleVisible,\n edgeOkViaNode: edgeVisibleViaNode\n}));\nelesfn$4.hidden = function () {\n var ele = this[0];\n if (ele) {\n return !ele.visible();\n }\n};\nelesfn$4.isBundledBezier = cachePrototypeStyleFunction('isBundledBezier', function () {\n if (!this.cy().styleEnabled()) {\n return false;\n }\n return !this.removed() && this.pstyle('curve-style').value === 'bezier' && this.takesUpSpace();\n});\nelesfn$4.bypass = elesfn$4.css = elesfn$4.style;\nelesfn$4.renderedCss = elesfn$4.renderedStyle;\nelesfn$4.removeBypass = elesfn$4.removeCss = elesfn$4.removeStyle;\nelesfn$4.pstyle = elesfn$4.parsedStyle;\n\nvar elesfn$3 = {};\nfunction defineSwitchFunction(params) {\n return function () {\n var args = arguments;\n var changedEles = [];\n\n // e.g. cy.nodes().select( data, handler )\n if (args.length === 2) {\n var data = args[0];\n var handler = args[1];\n this.on(params.event, data, handler);\n }\n\n // e.g. cy.nodes().select( handler )\n else if (args.length === 1 && fn$6(args[0])) {\n var _handler = args[0];\n this.on(params.event, _handler);\n }\n\n // e.g. cy.nodes().select()\n // e.g. (private) cy.nodes().select(['tapselect'])\n else if (args.length === 0 || args.length === 1 && array(args[0])) {\n var addlEvents = args.length === 1 ? args[0] : null;\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var able = !params.ableField || ele._private[params.ableField];\n var changed = ele._private[params.field] != params.value;\n if (params.overrideAble) {\n var overrideAble = params.overrideAble(ele);\n if (overrideAble !== undefined) {\n able = overrideAble;\n if (!overrideAble) {\n return this;\n } // to save cycles assume not able for all on override\n }\n }\n if (able) {\n ele._private[params.field] = params.value;\n if (changed) {\n changedEles.push(ele);\n }\n }\n }\n var changedColl = this.spawn(changedEles);\n changedColl.updateStyle(); // change of state => possible change of style\n changedColl.emit(params.event);\n if (addlEvents) {\n changedColl.emit(addlEvents);\n }\n }\n return this;\n };\n}\nfunction defineSwitchSet(params) {\n elesfn$3[params.field] = function () {\n var ele = this[0];\n if (ele) {\n if (params.overrideField) {\n var val = params.overrideField(ele);\n if (val !== undefined) {\n return val;\n }\n }\n return ele._private[params.field];\n }\n };\n elesfn$3[params.on] = defineSwitchFunction({\n event: params.on,\n field: params.field,\n ableField: params.ableField,\n overrideAble: params.overrideAble,\n value: true\n });\n elesfn$3[params.off] = defineSwitchFunction({\n event: params.off,\n field: params.field,\n ableField: params.ableField,\n overrideAble: params.overrideAble,\n value: false\n });\n}\ndefineSwitchSet({\n field: 'locked',\n overrideField: function overrideField(ele) {\n return ele.cy().autolock() ? true : undefined;\n },\n on: 'lock',\n off: 'unlock'\n});\ndefineSwitchSet({\n field: 'grabbable',\n overrideField: function overrideField(ele) {\n return ele.cy().autoungrabify() || ele.pannable() ? false : undefined;\n },\n on: 'grabify',\n off: 'ungrabify'\n});\ndefineSwitchSet({\n field: 'selected',\n ableField: 'selectable',\n overrideAble: function overrideAble(ele) {\n return ele.cy().autounselectify() ? false : undefined;\n },\n on: 'select',\n off: 'unselect'\n});\ndefineSwitchSet({\n field: 'selectable',\n overrideField: function overrideField(ele) {\n return ele.cy().autounselectify() ? false : undefined;\n },\n on: 'selectify',\n off: 'unselectify'\n});\nelesfn$3.deselect = elesfn$3.unselect;\nelesfn$3.grabbed = function () {\n var ele = this[0];\n if (ele) {\n return ele._private.grabbed;\n }\n};\ndefineSwitchSet({\n field: 'active',\n on: 'activate',\n off: 'unactivate'\n});\ndefineSwitchSet({\n field: 'pannable',\n on: 'panify',\n off: 'unpanify'\n});\nelesfn$3.inactive = function () {\n var ele = this[0];\n if (ele) {\n return !ele._private.active;\n }\n};\n\nvar elesfn$2 = {};\n\n// DAG functions\n////////////////\n\nvar defineDagExtremity = function defineDagExtremity(params) {\n return function dagExtremityImpl(selector) {\n var eles = this;\n var ret = [];\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n if (!ele.isNode()) {\n continue;\n }\n var disqualified = false;\n var edges = ele.connectedEdges();\n for (var j = 0; j < edges.length; j++) {\n var edge = edges[j];\n var src = edge.source();\n var tgt = edge.target();\n if (params.noIncomingEdges && tgt === ele && src !== ele || params.noOutgoingEdges && src === ele && tgt !== ele) {\n disqualified = true;\n break;\n }\n }\n if (!disqualified) {\n ret.push(ele);\n }\n }\n return this.spawn(ret, true).filter(selector);\n };\n};\nvar defineDagOneHop = function defineDagOneHop(params) {\n return function (selector) {\n var eles = this;\n var oEles = [];\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n if (!ele.isNode()) {\n continue;\n }\n var edges = ele.connectedEdges();\n for (var j = 0; j < edges.length; j++) {\n var edge = edges[j];\n var src = edge.source();\n var tgt = edge.target();\n if (params.outgoing && src === ele) {\n oEles.push(edge);\n oEles.push(tgt);\n } else if (params.incoming && tgt === ele) {\n oEles.push(edge);\n oEles.push(src);\n }\n }\n }\n return this.spawn(oEles, true).filter(selector);\n };\n};\nvar defineDagAllHops = function defineDagAllHops(params) {\n return function (selector) {\n var eles = this;\n var sEles = [];\n var sElesIds = {};\n for (;;) {\n var next = params.outgoing ? eles.outgoers() : eles.incomers();\n if (next.length === 0) {\n break;\n } // done if none left\n\n var newNext = false;\n for (var i = 0; i < next.length; i++) {\n var n = next[i];\n var nid = n.id();\n if (!sElesIds[nid]) {\n sElesIds[nid] = true;\n sEles.push(n);\n newNext = true;\n }\n }\n if (!newNext) {\n break;\n } // done if touched all outgoers already\n\n eles = next;\n }\n return this.spawn(sEles, true).filter(selector);\n };\n};\nelesfn$2.clearTraversalCache = function () {\n for (var i = 0; i < this.length; i++) {\n this[i]._private.traversalCache = null;\n }\n};\nextend(elesfn$2, {\n // get the root nodes in the DAG\n roots: defineDagExtremity({\n noIncomingEdges: true\n }),\n // get the leaf nodes in the DAG\n leaves: defineDagExtremity({\n noOutgoingEdges: true\n }),\n // normally called children in graph theory\n // these nodes =edges=> outgoing nodes\n outgoers: cache(defineDagOneHop({\n outgoing: true\n }), 'outgoers'),\n // aka DAG descendants\n successors: defineDagAllHops({\n outgoing: true\n }),\n // normally called parents in graph theory\n // these nodes <=edges= incoming nodes\n incomers: cache(defineDagOneHop({\n incoming: true\n }), 'incomers'),\n // aka DAG ancestors\n predecessors: defineDagAllHops({\n })\n});\n\n// Neighbourhood functions\n//////////////////////////\n\nextend(elesfn$2, {\n neighborhood: cache(function (selector) {\n var elements = [];\n var nodes = this.nodes();\n for (var i = 0; i < nodes.length; i++) {\n // for all nodes\n var node = nodes[i];\n var connectedEdges = node.connectedEdges();\n\n // for each connected edge, add the edge and the other node\n for (var j = 0; j < connectedEdges.length; j++) {\n var edge = connectedEdges[j];\n var src = edge.source();\n var tgt = edge.target();\n var otherNode = node === src ? tgt : src;\n\n // need check in case of loop\n if (otherNode.length > 0) {\n elements.push(otherNode[0]); // add node 1 hop away\n }\n\n // add connected edge\n elements.push(edge[0]);\n }\n }\n return this.spawn(elements, true).filter(selector);\n }, 'neighborhood'),\n closedNeighborhood: function closedNeighborhood(selector) {\n return this.neighborhood().add(this).filter(selector);\n },\n openNeighborhood: function openNeighborhood(selector) {\n return this.neighborhood(selector);\n }\n});\n\n// aliases\nelesfn$2.neighbourhood = elesfn$2.neighborhood;\nelesfn$2.closedNeighbourhood = elesfn$2.closedNeighborhood;\nelesfn$2.openNeighbourhood = elesfn$2.openNeighborhood;\n\n// Edge functions\n/////////////////\n\nextend(elesfn$2, {\n source: cache(function sourceImpl(selector) {\n var ele = this[0];\n var src;\n if (ele) {\n src = ele._private.source || ele.cy().collection();\n }\n return src && selector ? src.filter(selector) : src;\n }, 'source'),\n target: cache(function targetImpl(selector) {\n var ele = this[0];\n var tgt;\n if (ele) {\n tgt = ele._private.target || ele.cy().collection();\n }\n return tgt && selector ? tgt.filter(selector) : tgt;\n }, 'target'),\n sources: defineSourceFunction({\n attr: 'source'\n }),\n targets: defineSourceFunction({\n attr: 'target'\n })\n});\nfunction defineSourceFunction(params) {\n return function sourceImpl(selector) {\n var sources = [];\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var src = ele._private[params.attr];\n if (src) {\n sources.push(src);\n }\n }\n return this.spawn(sources, true).filter(selector);\n };\n}\nextend(elesfn$2, {\n edgesWith: cache(defineEdgesWithFunction(), 'edgesWith'),\n edgesTo: cache(defineEdgesWithFunction({\n thisIsSrc: true\n }), 'edgesTo')\n});\nfunction defineEdgesWithFunction(params) {\n return function edgesWithImpl(otherNodes) {\n var elements = [];\n var cy = this._private.cy;\n var p = params || {};\n\n // get elements if a selector is specified\n if (string(otherNodes)) {\n otherNodes = cy.$(otherNodes);\n }\n for (var h = 0; h < otherNodes.length; h++) {\n var edges = otherNodes[h]._private.edges;\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n var edgeData = edge._private.data;\n var thisToOther = this.hasElementWithId(edgeData.source) && otherNodes.hasElementWithId(edgeData.target);\n var otherToThis = otherNodes.hasElementWithId(edgeData.source) && this.hasElementWithId(edgeData.target);\n var edgeConnectsThisAndOther = thisToOther || otherToThis;\n if (!edgeConnectsThisAndOther) {\n continue;\n }\n if (p.thisIsSrc || p.thisIsTgt) {\n if (p.thisIsSrc && !thisToOther) {\n continue;\n }\n if (p.thisIsTgt && !otherToThis) {\n continue;\n }\n }\n elements.push(edge);\n }\n }\n return this.spawn(elements, true);\n };\n}\nextend(elesfn$2, {\n connectedEdges: cache(function (selector) {\n var retEles = [];\n var eles = this;\n for (var i = 0; i < eles.length; i++) {\n var node = eles[i];\n if (!node.isNode()) {\n continue;\n }\n var edges = node._private.edges;\n for (var j = 0; j < edges.length; j++) {\n var edge = edges[j];\n retEles.push(edge);\n }\n }\n return this.spawn(retEles, true).filter(selector);\n }, 'connectedEdges'),\n connectedNodes: cache(function (selector) {\n var retEles = [];\n var eles = this;\n for (var i = 0; i < eles.length; i++) {\n var edge = eles[i];\n if (!edge.isEdge()) {\n continue;\n }\n retEles.push(edge.source()[0]);\n retEles.push(edge.target()[0]);\n }\n return this.spawn(retEles, true).filter(selector);\n }, 'connectedNodes'),\n parallelEdges: cache(defineParallelEdgesFunction(), 'parallelEdges'),\n codirectedEdges: cache(defineParallelEdgesFunction({\n codirected: true\n }), 'codirectedEdges')\n});\nfunction defineParallelEdgesFunction(params) {\n var defaults = {\n codirected: false\n };\n params = extend({}, defaults, params);\n return function parallelEdgesImpl(selector) {\n // micro-optimised for renderer\n var elements = [];\n var edges = this.edges();\n var p = params;\n\n // look at all the edges in the collection\n for (var i = 0; i < edges.length; i++) {\n var edge1 = edges[i];\n var edge1_p = edge1._private;\n var src1 = edge1_p.source;\n var srcid1 = src1._private.data.id;\n var tgtid1 = edge1_p.data.target;\n var srcEdges1 = src1._private.edges;\n\n // look at edges connected to the src node of this edge\n for (var j = 0; j < srcEdges1.length; j++) {\n var edge2 = srcEdges1[j];\n var edge2data = edge2._private.data;\n var tgtid2 = edge2data.target;\n var srcid2 = edge2data.source;\n var codirected = tgtid2 === tgtid1 && srcid2 === srcid1;\n var oppdirected = srcid1 === tgtid2 && tgtid1 === srcid2;\n if (p.codirected && codirected || !p.codirected && (codirected || oppdirected)) {\n elements.push(edge2);\n }\n }\n }\n return this.spawn(elements, true).filter(selector);\n };\n}\n\n// Misc functions\n/////////////////\n\nextend(elesfn$2, {\n components: function components(root) {\n var self = this;\n var cy = self.cy();\n var visited = cy.collection();\n var unvisited = root == null ? self.nodes() : root.nodes();\n var components = [];\n if (root != null && unvisited.empty()) {\n // root may contain only edges\n unvisited = root.sources(); // doesn't matter which node to use (undirected), so just use the source sides\n }\n var visitInComponent = function visitInComponent(node, component) {\n visited.merge(node);\n unvisited.unmerge(node);\n component.merge(node);\n };\n if (unvisited.empty()) {\n return self.spawn();\n }\n var _loop = function _loop() {\n // each iteration yields a component\n var cmpt = cy.collection();\n components.push(cmpt);\n var root = unvisited[0];\n visitInComponent(root, cmpt);\n self.bfs({\n directed: false,\n roots: root,\n visit: function visit(v) {\n return visitInComponent(v, cmpt);\n }\n });\n cmpt.forEach(function (node) {\n node.connectedEdges().forEach(function (e) {\n // connectedEdges() usually cached\n if (self.has(e) && cmpt.has(e.source()) && cmpt.has(e.target())) {\n // has() is cheap\n cmpt.merge(e); // forEach() only considers nodes -- sets N at call time\n }\n });\n });\n };\n do {\n _loop();\n } while (unvisited.length > 0);\n return components;\n },\n component: function component() {\n var ele = this[0];\n return ele.cy().mutableElements().components(ele)[0];\n }\n});\nelesfn$2.componentsOf = elesfn$2.components;\n\n// represents a set of nodes, edges, or both together\nvar Collection = function Collection(cy, elements) {\n var unique = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var removed = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n if (cy === undefined) {\n error('A collection must have a reference to the core');\n return;\n }\n var map = new Map$1();\n var createdElements = false;\n if (!elements) {\n elements = [];\n } else if (elements.length > 0 && plainObject(elements[0]) && !element(elements[0])) {\n createdElements = true;\n\n // make elements from json and restore all at once later\n var eles = [];\n var elesIds = new Set$1();\n for (var i = 0, l = elements.length; i < l; i++) {\n var json = elements[i];\n if (json.data == null) {\n json.data = {};\n }\n var _data = json.data;\n\n // make sure newly created elements have valid ids\n if (_data.id == null) {\n _data.id = uuid();\n } else if (cy.hasElementWithId(_data.id) || elesIds.has(_data.id)) {\n continue; // can't create element if prior id already exists\n }\n var ele = new Element(cy, json, false);\n eles.push(ele);\n elesIds.add(_data.id);\n }\n elements = eles;\n }\n this.length = 0;\n for (var _i = 0, _l = elements.length; _i < _l; _i++) {\n var element$1 = elements[_i][0]; // [0] in case elements is an array of collections, rather than array of elements\n if (element$1 == null) {\n continue;\n }\n var id = element$1._private.data.id;\n if (!unique || !map.has(id)) {\n if (unique) {\n map.set(id, {\n index: this.length,\n ele: element$1\n });\n }\n this[this.length] = element$1;\n this.length++;\n }\n }\n this._private = {\n eles: this,\n cy: cy,\n get map() {\n if (this.lazyMap == null) {\n this.rebuildMap();\n }\n return this.lazyMap;\n },\n set map(m) {\n this.lazyMap = m;\n },\n rebuildMap: function rebuildMap() {\n var m = this.lazyMap = new Map$1();\n var eles = this.eles;\n for (var _i2 = 0; _i2 < eles.length; _i2++) {\n var _ele = eles[_i2];\n m.set(_ele.id(), {\n index: _i2,\n ele: _ele\n });\n }\n }\n };\n if (unique) {\n this._private.map = map;\n }\n\n // restore the elements if we created them from json\n if (createdElements && !removed) {\n this.restore();\n }\n};\n\n// Functions\n////////////////////////////////////////////////////////////////////////////////////////////////////\n\n// keep the prototypes in sync (an element has the same functions as a collection)\n// and use elefn and elesfn as shorthands to the prototypes\nvar elesfn$1 = Element.prototype = Collection.prototype = Object.create(Array.prototype);\nelesfn$1.instanceString = function () {\n return 'collection';\n};\nelesfn$1.spawn = function (eles, unique) {\n return new Collection(this.cy(), eles, unique);\n};\nelesfn$1.spawnSelf = function () {\n return this.spawn(this);\n};\nelesfn$1.cy = function () {\n return this._private.cy;\n};\nelesfn$1.renderer = function () {\n return this._private.cy.renderer();\n};\nelesfn$1.element = function () {\n return this[0];\n};\nelesfn$1.collection = function () {\n if (collection(this)) {\n return this;\n } else {\n // an element\n return new Collection(this._private.cy, [this]);\n }\n};\nelesfn$1.unique = function () {\n return new Collection(this._private.cy, this, true);\n};\nelesfn$1.hasElementWithId = function (id) {\n id = '' + id; // id must be string\n\n return this._private.map.has(id);\n};\nelesfn$1.getElementById = function (id) {\n id = '' + id; // id must be string\n\n var cy = this._private.cy;\n var entry = this._private.map.get(id);\n return entry ? entry.ele : new Collection(cy); // get ele or empty collection\n};\nelesfn$1.$id = elesfn$1.getElementById;\nelesfn$1.poolIndex = function () {\n var cy = this._private.cy;\n var eles = cy._private.elements;\n var id = this[0]._private.data.id;\n return eles._private.map.get(id).index;\n};\nelesfn$1.indexOf = function (ele) {\n var id = ele[0]._private.data.id;\n return this._private.map.get(id).index;\n};\nelesfn$1.indexOfId = function (id) {\n id = '' + id; // id must be string\n\n return this._private.map.get(id).index;\n};\nelesfn$1.json = function (obj) {\n var ele = this.element();\n var cy = this.cy();\n if (ele == null && obj) {\n return this;\n } // can't set to no eles\n\n if (ele == null) {\n return undefined;\n } // can't get from no eles\n\n var p = ele._private;\n if (plainObject(obj)) {\n // set\n\n cy.startBatch();\n if (obj.data) {\n ele.data(obj.data);\n var _data2 = p.data;\n if (ele.isEdge()) {\n // source and target are immutable via data()\n var move = false;\n var spec = {};\n var src = obj.data.source;\n var tgt = obj.data.target;\n if (src != null && src != _data2.source) {\n spec.source = '' + src; // id must be string\n move = true;\n }\n if (tgt != null && tgt != _data2.target) {\n spec.target = '' + tgt; // id must be string\n move = true;\n }\n if (move) {\n ele = ele.move(spec);\n }\n } else {\n // parent is immutable via data()\n var newParentValSpecd = 'parent' in obj.data;\n var parent = obj.data.parent;\n if (newParentValSpecd && (parent != null || _data2.parent != null) && parent != _data2.parent) {\n if (parent === undefined) {\n // can't set undefined imperatively, so use null\n parent = null;\n }\n if (parent != null) {\n parent = '' + parent; // id must be string\n }\n ele = ele.move({\n parent: parent\n });\n }\n }\n }\n if (obj.position) {\n ele.position(obj.position);\n }\n\n // ignore group -- immutable\n\n var checkSwitch = function checkSwitch(k, trueFnName, falseFnName) {\n var obj_k = obj[k];\n if (obj_k != null && obj_k !== p[k]) {\n if (obj_k) {\n ele[trueFnName]();\n } else {\n ele[falseFnName]();\n }\n }\n };\n checkSwitch('removed', 'remove', 'restore');\n checkSwitch('selected', 'select', 'unselect');\n checkSwitch('selectable', 'selectify', 'unselectify');\n checkSwitch('locked', 'lock', 'unlock');\n checkSwitch('grabbable', 'grabify', 'ungrabify');\n checkSwitch('pannable', 'panify', 'unpanify');\n if (obj.classes != null) {\n ele.classes(obj.classes);\n }\n cy.endBatch();\n return this;\n } else if (obj === undefined) {\n // get\n\n var json = {\n data: copy(p.data),\n position: copy(p.position),\n group: p.group,\n removed: p.removed,\n selected: p.selected,\n selectable: p.selectable,\n locked: p.locked,\n grabbable: p.grabbable,\n pannable: p.pannable,\n classes: null\n };\n json.classes = '';\n var i = 0;\n p.classes.forEach(function (cls) {\n return json.classes += i++ === 0 ? cls : ' ' + cls;\n });\n return json;\n }\n};\nelesfn$1.jsons = function () {\n var jsons = [];\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var json = ele.json();\n jsons.push(json);\n }\n return jsons;\n};\nelesfn$1.clone = function () {\n var cy = this.cy();\n var elesArr = [];\n for (var i = 0; i < this.length; i++) {\n var ele = this[i];\n var json = ele.json();\n var clone = new Element(cy, json, false); // NB no restore\n\n elesArr.push(clone);\n }\n return new Collection(cy, elesArr);\n};\nelesfn$1.copy = elesfn$1.clone;\nelesfn$1.restore = function () {\n var notifyRenderer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var addToPool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var self = this;\n var cy = self.cy();\n var cy_p = cy._private;\n\n // create arrays of nodes and edges, since we need to\n // restore the nodes first\n var nodes = [];\n var edges = [];\n var elements;\n for (var _i3 = 0, l = self.length; _i3 < l; _i3++) {\n var ele = self[_i3];\n if (addToPool && !ele.removed()) {\n // don't need to handle this ele\n continue;\n }\n\n // keep nodes first in the array and edges after\n if (ele.isNode()) {\n // put to front of array if node\n nodes.push(ele);\n } else {\n // put to end of array if edge\n edges.push(ele);\n }\n }\n elements = nodes.concat(edges);\n var i;\n var removeFromElements = function removeFromElements() {\n elements.splice(i, 1);\n i--;\n };\n\n // now, restore each element\n for (i = 0; i < elements.length; i++) {\n var _ele2 = elements[i];\n var _private = _ele2._private;\n var _data3 = _private.data;\n\n // the traversal cache should start fresh when ele is added\n _ele2.clearTraversalCache();\n\n // set id and validate\n if (!addToPool && !_private.removed) ; else if (_data3.id === undefined) {\n _data3.id = uuid();\n } else if (number$1(_data3.id)) {\n _data3.id = '' + _data3.id; // now it's a string\n } else if (emptyString(_data3.id) || !string(_data3.id)) {\n error('Can not create element with invalid string ID `' + _data3.id + '`');\n\n // can't create element if it has empty string as id or non-string id\n removeFromElements();\n continue;\n } else if (cy.hasElementWithId(_data3.id)) {\n error('Can not create second element with ID `' + _data3.id + '`');\n\n // can't create element if one already has that id\n removeFromElements();\n continue;\n }\n var id = _data3.id; // id is finalised, now let's keep a ref\n\n if (_ele2.isNode()) {\n // extra checks for nodes\n var pos = _private.position;\n\n // make sure the nodes have a defined position\n\n if (pos.x == null) {\n pos.x = 0;\n }\n if (pos.y == null) {\n pos.y = 0;\n }\n }\n if (_ele2.isEdge()) {\n // extra checks for edges\n\n var edge = _ele2;\n var fields = ['source', 'target'];\n var fieldsLength = fields.length;\n var badSourceOrTarget = false;\n for (var j = 0; j < fieldsLength; j++) {\n var field = fields[j];\n var val = _data3[field];\n if (number$1(val)) {\n val = _data3[field] = '' + _data3[field]; // now string\n }\n if (val == null || val === '') {\n // can't create if source or target is not defined properly\n error('Can not create edge `' + id + '` with unspecified ' + field);\n badSourceOrTarget = true;\n } else if (!cy.hasElementWithId(val)) {\n // can't create edge if one of its nodes doesn't exist\n error('Can not create edge `' + id + '` with nonexistant ' + field + ' `' + val + '`');\n badSourceOrTarget = true;\n }\n }\n if (badSourceOrTarget) {\n removeFromElements();\n continue;\n } // can't create this\n\n var src = cy.getElementById(_data3.source);\n var tgt = cy.getElementById(_data3.target);\n\n // only one edge in node if loop\n if (src.same(tgt)) {\n src._private.edges.push(edge);\n } else {\n src._private.edges.push(edge);\n tgt._private.edges.push(edge);\n }\n edge._private.source = src;\n edge._private.target = tgt;\n } // if is edge\n\n // create mock ids / indexes maps for element so it can be used like collections\n _private.map = new Map$1();\n _private.map.set(id, {\n ele: _ele2,\n index: 0\n });\n _private.removed = false;\n if (addToPool) {\n cy.addToPool(_ele2);\n }\n } // for each element\n\n // do compound node sanity checks\n for (var _i4 = 0; _i4 < nodes.length; _i4++) {\n // each node\n var node = nodes[_i4];\n var _data4 = node._private.data;\n if (number$1(_data4.parent)) {\n // then automake string\n _data4.parent = '' + _data4.parent;\n }\n var parentId = _data4.parent;\n var specifiedParent = parentId != null;\n if (specifiedParent || node._private.parent) {\n var parent = node._private.parent ? cy.collection().merge(node._private.parent) : cy.getElementById(parentId);\n if (parent.empty()) {\n // non-existant parent; just remove it\n _data4.parent = undefined;\n } else if (parent[0].removed()) {\n warn('Node added with missing parent, reference to parent removed');\n _data4.parent = undefined;\n node._private.parent = null;\n } else {\n var selfAsParent = false;\n var ancestor = parent;\n while (!ancestor.empty()) {\n if (node.same(ancestor)) {\n // mark self as parent and remove from data\n selfAsParent = true;\n _data4.parent = undefined; // remove parent reference\n\n // exit or we loop forever\n break;\n }\n ancestor = ancestor.parent();\n }\n if (!selfAsParent) {\n // connect with children\n parent[0]._private.children.push(node);\n node._private.parent = parent[0];\n\n // let the core know we have a compound graph\n cy_p.hasCompoundNodes = true;\n }\n } // else\n } // if specified parent\n } // for each node\n\n if (elements.length > 0) {\n var restored = elements.length === self.length ? self : new Collection(cy, elements);\n for (var _i5 = 0; _i5 < restored.length; _i5++) {\n var _ele3 = restored[_i5];\n if (_ele3.isNode()) {\n continue;\n }\n\n // adding an edge invalidates the traversal caches for the parallel edges\n _ele3.parallelEdges().clearTraversalCache();\n\n // adding an edge invalidates the traversal cache for the connected nodes\n _ele3.source().clearTraversalCache();\n _ele3.target().clearTraversalCache();\n }\n var toUpdateStyle;\n if (cy_p.hasCompoundNodes) {\n toUpdateStyle = cy.collection().merge(restored).merge(restored.connectedNodes()).merge(restored.parent());\n } else {\n toUpdateStyle = restored;\n }\n toUpdateStyle.dirtyCompoundBoundsCache().dirtyBoundingBoxCache().updateStyle(notifyRenderer);\n if (notifyRenderer) {\n restored.emitAndNotify('add');\n } else if (addToPool) {\n restored.emit('add');\n }\n }\n return self; // chainability\n};\nelesfn$1.removed = function () {\n var ele = this[0];\n return ele && ele._private.removed;\n};\nelesfn$1.inside = function () {\n var ele = this[0];\n return ele && !ele._private.removed;\n};\nelesfn$1.remove = function () {\n var notifyRenderer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var removeFromPool = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var self = this;\n var elesToRemove = [];\n var elesToRemoveIds = {};\n var cy = self._private.cy;\n\n // add connected edges\n function addConnectedEdges(node) {\n var edges = node._private.edges;\n for (var i = 0; i < edges.length; i++) {\n add(edges[i]);\n }\n }\n\n // add descendant nodes\n function addChildren(node) {\n var children = node._private.children;\n for (var i = 0; i < children.length; i++) {\n add(children[i]);\n }\n }\n function add(ele) {\n var alreadyAdded = elesToRemoveIds[ele.id()];\n if (removeFromPool && ele.removed() || alreadyAdded) {\n return;\n } else {\n elesToRemoveIds[ele.id()] = true;\n }\n if (ele.isNode()) {\n elesToRemove.push(ele); // nodes are removed last\n\n addConnectedEdges(ele);\n addChildren(ele);\n } else {\n elesToRemove.unshift(ele); // edges are removed first\n }\n }\n\n // make the list of elements to remove\n // (may be removing more than specified due to connected edges etc)\n\n for (var i = 0, l = self.length; i < l; i++) {\n var ele = self[i];\n add(ele);\n }\n function removeEdgeRef(node, edge) {\n var connectedEdges = node._private.edges;\n removeFromArray(connectedEdges, edge);\n\n // removing an edges invalidates the traversal cache for its nodes\n node.clearTraversalCache();\n }\n function removeParallelRef(pllEdge) {\n // removing an edge invalidates the traversal caches for the parallel edges\n pllEdge.clearTraversalCache();\n }\n var alteredParents = [];\n alteredParents.ids = {};\n function removeChildRef(parent, ele) {\n ele = ele[0];\n parent = parent[0];\n var children = parent._private.children;\n var pid = parent.id();\n removeFromArray(children, ele); // remove parent => child ref\n\n ele._private.parent = null; // remove child => parent ref\n\n if (!alteredParents.ids[pid]) {\n alteredParents.ids[pid] = true;\n alteredParents.push(parent);\n }\n }\n self.dirtyCompoundBoundsCache();\n if (removeFromPool) {\n cy.removeFromPool(elesToRemove); // remove from core pool\n }\n for (var _i6 = 0; _i6 < elesToRemove.length; _i6++) {\n var _ele4 = elesToRemove[_i6];\n if (_ele4.isEdge()) {\n // remove references to this edge in its connected nodes\n var src = _ele4.source()[0];\n var tgt = _ele4.target()[0];\n removeEdgeRef(src, _ele4);\n removeEdgeRef(tgt, _ele4);\n var pllEdges = _ele4.parallelEdges();\n for (var j = 0; j < pllEdges.length; j++) {\n var pllEdge = pllEdges[j];\n removeParallelRef(pllEdge);\n if (pllEdge.isBundledBezier()) {\n pllEdge.dirtyBoundingBoxCache();\n }\n }\n } else {\n // remove reference to parent\n var parent = _ele4.parent();\n if (parent.length !== 0) {\n removeChildRef(parent, _ele4);\n }\n }\n if (removeFromPool) {\n // mark as removed\n _ele4._private.removed = true;\n }\n }\n\n // check to see if we have a compound graph or not\n var elesStillInside = cy._private.elements;\n cy._private.hasCompoundNodes = false;\n for (var _i7 = 0; _i7 < elesStillInside.length; _i7++) {\n var _ele5 = elesStillInside[_i7];\n if (_ele5.isParent()) {\n cy._private.hasCompoundNodes = true;\n break;\n }\n }\n var removedElements = new Collection(this.cy(), elesToRemove);\n if (removedElements.size() > 0) {\n // must manually notify since trigger won't do this automatically once removed\n\n if (notifyRenderer) {\n removedElements.emitAndNotify('remove');\n } else if (removeFromPool) {\n removedElements.emit('remove');\n }\n }\n\n // the parents who were modified by the removal need their style updated\n for (var _i8 = 0; _i8 < alteredParents.length; _i8++) {\n var _ele6 = alteredParents[_i8];\n if (!removeFromPool || !_ele6.removed()) {\n _ele6.updateStyle();\n }\n }\n return removedElements;\n};\nelesfn$1.move = function (struct) {\n var cy = this._private.cy;\n var eles = this;\n\n // just clean up refs, caches, etc. in the same way as when removing and then restoring\n // (our calls to remove/restore do not remove from the graph or make events)\n var notifyRenderer = false;\n var modifyPool = false;\n var toString = function toString(id) {\n return id == null ? id : '' + id;\n }; // id must be string\n\n if (struct.source !== undefined || struct.target !== undefined) {\n var srcId = toString(struct.source);\n var tgtId = toString(struct.target);\n var srcExists = srcId != null && cy.hasElementWithId(srcId);\n var tgtExists = tgtId != null && cy.hasElementWithId(tgtId);\n if (srcExists || tgtExists) {\n cy.batch(function () {\n // avoid duplicate style updates\n eles.remove(notifyRenderer, modifyPool); // clean up refs etc.\n eles.emitAndNotify('moveout');\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var _data5 = ele._private.data;\n if (ele.isEdge()) {\n if (srcExists) {\n _data5.source = srcId;\n }\n if (tgtExists) {\n _data5.target = tgtId;\n }\n }\n }\n eles.restore(notifyRenderer, modifyPool); // make new refs, style, etc.\n });\n eles.emitAndNotify('move');\n }\n } else if (struct.parent !== undefined) {\n // move node to new parent\n var parentId = toString(struct.parent);\n var parentExists = parentId === null || cy.hasElementWithId(parentId);\n if (parentExists) {\n var pidToAssign = parentId === null ? undefined : parentId;\n cy.batch(function () {\n // avoid duplicate style updates\n var updated = eles.remove(notifyRenderer, modifyPool); // clean up refs etc.\n updated.emitAndNotify('moveout');\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var _data6 = ele._private.data;\n if (ele.isNode()) {\n _data6.parent = pidToAssign;\n }\n }\n updated.restore(notifyRenderer, modifyPool); // make new refs, style, etc.\n });\n eles.emitAndNotify('move');\n }\n }\n return this;\n};\n[elesfn$j, elesfn$i, elesfn$h, elesfn$g, elesfn$f, data, elesfn$d, dimensions, elesfn$9, elesfn$8, elesfn$7, elesfn$6, elesfn$5, elesfn$4, elesfn$3, elesfn$2].forEach(function (props) {\n extend(elesfn$1, props);\n});\n\nvar corefn$9 = {\n add: function add(opts) {\n var elements;\n var cy = this;\n\n // add the elements\n if (elementOrCollection(opts)) {\n var eles = opts;\n if (eles._private.cy === cy) {\n // same instance => just restore\n elements = eles.restore();\n } else {\n // otherwise, copy from json\n var jsons = [];\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n jsons.push(ele.json());\n }\n elements = new Collection(cy, jsons);\n }\n }\n\n // specify an array of options\n else if (array(opts)) {\n var _jsons = opts;\n elements = new Collection(cy, _jsons);\n }\n\n // specify via opts.nodes and opts.edges\n else if (plainObject(opts) && (array(opts.nodes) || array(opts.edges))) {\n var elesByGroup = opts;\n var _jsons2 = [];\n var grs = ['nodes', 'edges'];\n for (var _i = 0, il = grs.length; _i < il; _i++) {\n var group = grs[_i];\n var elesArray = elesByGroup[group];\n if (array(elesArray)) {\n for (var j = 0, jl = elesArray.length; j < jl; j++) {\n var json = extend({\n group: group\n }, elesArray[j]);\n _jsons2.push(json);\n }\n }\n }\n elements = new Collection(cy, _jsons2);\n }\n\n // specify options for one element\n else {\n var _json = opts;\n elements = new Element(cy, _json).collection();\n }\n return elements;\n },\n remove: function remove(collection) {\n if (elementOrCollection(collection)) ; else if (string(collection)) {\n var selector = collection;\n collection = this.$(selector);\n }\n return collection.remove();\n }\n};\n\n/* global Float32Array */\n\n/*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */\nfunction generateCubicBezier(mX1, mY1, mX2, mY2) {\n var NEWTON_ITERATIONS = 4,\n NEWTON_MIN_SLOPE = 0.001,\n SUBDIVISION_PRECISION = 0.0000001,\n SUBDIVISION_MAX_ITERATIONS = 10,\n kSplineTableSize = 11,\n kSampleStepSize = 1.0 / (kSplineTableSize - 1.0),\n float32ArraySupported = typeof Float32Array !== 'undefined';\n\n /* Must contain four arguments. */\n if (arguments.length !== 4) {\n return false;\n }\n\n /* Arguments must be numbers. */\n for (var i = 0; i < 4; ++i) {\n if (typeof arguments[i] !== \"number\" || isNaN(arguments[i]) || !isFinite(arguments[i])) {\n return false;\n }\n }\n\n /* X values must be in the [0, 1] range. */\n mX1 = Math.min(mX1, 1);\n mX2 = Math.min(mX2, 1);\n mX1 = Math.max(mX1, 0);\n mX2 = Math.max(mX2, 0);\n var mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n function A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n }\n function B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n }\n function C(aA1) {\n return 3.0 * aA1;\n }\n function calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n }\n function getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n }\n function newtonRaphsonIterate(aX, aGuessT) {\n for (var _i = 0; _i < NEWTON_ITERATIONS; ++_i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n }\n function calcSampleValues() {\n for (var _i2 = 0; _i2 < kSplineTableSize; ++_i2) {\n mSampleValues[_i2] = calcBezier(_i2 * kSampleStepSize, mX1, mX2);\n }\n }\n function binarySubdivide(aX, aA, aB) {\n var currentX,\n currentT,\n i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n }\n function getTForX(aX) {\n var intervalStart = 0.0,\n currentSample = 1,\n lastSample = kSplineTableSize - 1;\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]),\n guessForT = intervalStart + dist * kSampleStepSize,\n initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize);\n }\n }\n var _precomputed = false;\n function precompute() {\n _precomputed = true;\n if (mX1 !== mY1 || mX2 !== mY2) {\n calcSampleValues();\n }\n }\n var f = function f(aX) {\n if (!_precomputed) {\n precompute();\n }\n if (mX1 === mY1 && mX2 === mY2) {\n return aX;\n }\n if (aX === 0) {\n return 0;\n }\n if (aX === 1) {\n return 1;\n }\n return calcBezier(getTForX(aX), mY1, mY2);\n };\n f.getControlPoints = function () {\n return [{\n x: mX1,\n y: mY1\n }, {\n x: mX2,\n y: mY2\n }];\n };\n var str = \"generateBezier(\" + [mX1, mY1, mX2, mY2] + \")\";\n f.toString = function () {\n return str;\n };\n return f;\n}\n\n/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */\n/* Given a tension, friction, and duration, a simulation at 60FPS will first run without a defined duration in order to calculate the full path. A second pass\n then adjusts the time delta -- using the relation between actual time and duration -- to calculate the path for the duration-constrained animation. */\nvar generateSpringRK4 = function () {\n function springAccelerationForState(state) {\n return -state.tension * state.x - state.friction * state.v;\n }\n function springEvaluateStateWithDerivative(initialState, dt, derivative) {\n var state = {\n x: initialState.x + derivative.dx * dt,\n v: initialState.v + derivative.dv * dt,\n tension: initialState.tension,\n friction: initialState.friction\n };\n return {\n dx: state.v,\n dv: springAccelerationForState(state)\n };\n }\n function springIntegrateState(state, dt) {\n var a = {\n dx: state.v,\n dv: springAccelerationForState(state)\n },\n b = springEvaluateStateWithDerivative(state, dt * 0.5, a),\n c = springEvaluateStateWithDerivative(state, dt * 0.5, b),\n d = springEvaluateStateWithDerivative(state, dt, c),\n dxdt = 1.0 / 6.0 * (a.dx + 2.0 * (b.dx + c.dx) + d.dx),\n dvdt = 1.0 / 6.0 * (a.dv + 2.0 * (b.dv + c.dv) + d.dv);\n state.x = state.x + dxdt * dt;\n state.v = state.v + dvdt * dt;\n return state;\n }\n return function springRK4Factory(tension, friction, duration) {\n var initState = {\n x: -1,\n v: 0,\n tension: null,\n friction: null\n },\n path = [0],\n time_lapsed = 0,\n tolerance = 1 / 10000,\n DT = 16 / 1000,\n have_duration,\n dt,\n last_state;\n tension = parseFloat(tension) || 500;\n friction = parseFloat(friction) || 20;\n duration = duration || null;\n initState.tension = tension;\n initState.friction = friction;\n have_duration = duration !== null;\n\n /* Calculate the actual time it takes for this animation to complete with the provided conditions. */\n if (have_duration) {\n /* Run the simulation without a duration. */\n time_lapsed = springRK4Factory(tension, friction);\n /* Compute the adjusted time delta. */\n dt = time_lapsed / duration * DT;\n } else {\n dt = DT;\n }\n for (;;) {\n /* Next/step function .*/\n last_state = springIntegrateState(last_state || initState, dt);\n /* Store the position. */\n path.push(1 + last_state.x);\n time_lapsed += 16;\n /* If the change threshold is reached, break. */\n if (!(Math.abs(last_state.x) > tolerance && Math.abs(last_state.v) > tolerance)) {\n break;\n }\n }\n\n /* If duration is not defined, return the actual time required for completing this animation. Otherwise, return a closure that holds the\n computed path and returns a snapshot of the position according to a given percentComplete. */\n return !have_duration ? time_lapsed : function (percentComplete) {\n return path[percentComplete * (path.length - 1) | 0];\n };\n };\n}();\n\nvar cubicBezier = function cubicBezier(t1, p1, t2, p2) {\n var bezier = generateCubicBezier(t1, p1, t2, p2);\n return function (start, end, percent) {\n return start + (end - start) * bezier(percent);\n };\n};\nvar easings = {\n 'linear': function linear(start, end, percent) {\n return start + (end - start) * percent;\n },\n // default easings\n 'ease': cubicBezier(0.25, 0.1, 0.25, 1),\n 'ease-in': cubicBezier(0.42, 0, 1, 1),\n 'ease-out': cubicBezier(0, 0, 0.58, 1),\n 'ease-in-out': cubicBezier(0.42, 0, 0.58, 1),\n // sine\n 'ease-in-sine': cubicBezier(0.47, 0, 0.745, 0.715),\n 'ease-out-sine': cubicBezier(0.39, 0.575, 0.565, 1),\n 'ease-in-out-sine': cubicBezier(0.445, 0.05, 0.55, 0.95),\n // quad\n 'ease-in-quad': cubicBezier(0.55, 0.085, 0.68, 0.53),\n 'ease-out-quad': cubicBezier(0.25, 0.46, 0.45, 0.94),\n 'ease-in-out-quad': cubicBezier(0.455, 0.03, 0.515, 0.955),\n // cubic\n 'ease-in-cubic': cubicBezier(0.55, 0.055, 0.675, 0.19),\n 'ease-out-cubic': cubicBezier(0.215, 0.61, 0.355, 1),\n 'ease-in-out-cubic': cubicBezier(0.645, 0.045, 0.355, 1),\n // quart\n 'ease-in-quart': cubicBezier(0.895, 0.03, 0.685, 0.22),\n 'ease-out-quart': cubicBezier(0.165, 0.84, 0.44, 1),\n 'ease-in-out-quart': cubicBezier(0.77, 0, 0.175, 1),\n // quint\n 'ease-in-quint': cubicBezier(0.755, 0.05, 0.855, 0.06),\n 'ease-out-quint': cubicBezier(0.23, 1, 0.32, 1),\n 'ease-in-out-quint': cubicBezier(0.86, 0, 0.07, 1),\n // expo\n 'ease-in-expo': cubicBezier(0.95, 0.05, 0.795, 0.035),\n 'ease-out-expo': cubicBezier(0.19, 1, 0.22, 1),\n 'ease-in-out-expo': cubicBezier(1, 0, 0, 1),\n // circ\n 'ease-in-circ': cubicBezier(0.6, 0.04, 0.98, 0.335),\n 'ease-out-circ': cubicBezier(0.075, 0.82, 0.165, 1),\n 'ease-in-out-circ': cubicBezier(0.785, 0.135, 0.15, 0.86),\n // user param easings...\n\n 'spring': function spring(tension, friction, duration) {\n if (duration === 0) {\n // can't get a spring w/ duration 0\n return easings.linear; // duration 0 => jump to end so impl doesn't matter\n }\n var spring = generateSpringRK4(tension, friction, duration);\n return function (start, end, percent) {\n return start + (end - start) * spring(percent);\n };\n },\n 'cubic-bezier': cubicBezier\n};\n\nfunction getEasedValue(type, start, end, percent, easingFn) {\n if (percent === 1) {\n return end;\n }\n if (start === end) {\n return end;\n }\n var val = easingFn(start, end, percent);\n if (type == null) {\n return val;\n }\n if (type.roundValue || type.color) {\n val = Math.round(val);\n }\n if (type.min !== undefined) {\n val = Math.max(val, type.min);\n }\n if (type.max !== undefined) {\n val = Math.min(val, type.max);\n }\n return val;\n}\nfunction getValue(prop, spec) {\n if (prop.pfValue != null || prop.value != null) {\n if (prop.pfValue != null && (spec == null || spec.type.units !== '%')) {\n return prop.pfValue;\n } else {\n return prop.value;\n }\n } else {\n return prop;\n }\n}\nfunction ease(startProp, endProp, percent, easingFn, propSpec) {\n var type = propSpec != null ? propSpec.type : null;\n if (percent < 0) {\n percent = 0;\n } else if (percent > 1) {\n percent = 1;\n }\n var start = getValue(startProp, propSpec);\n var end = getValue(endProp, propSpec);\n if (number$1(start) && number$1(end)) {\n return getEasedValue(type, start, end, percent, easingFn);\n } else if (array(start) && array(end)) {\n var easedArr = [];\n for (var i = 0; i < end.length; i++) {\n var si = start[i];\n var ei = end[i];\n if (si != null && ei != null) {\n var val = getEasedValue(type, si, ei, percent, easingFn);\n easedArr.push(val);\n } else {\n easedArr.push(ei);\n }\n }\n return easedArr;\n }\n return undefined;\n}\n\nfunction step$1(self, ani, now, isCore) {\n var isEles = !isCore;\n var _p = self._private;\n var ani_p = ani._private;\n var pEasing = ani_p.easing;\n var startTime = ani_p.startTime;\n var cy = isCore ? self : self.cy();\n var style = cy.style();\n if (!ani_p.easingImpl) {\n if (pEasing == null) {\n // use default\n ani_p.easingImpl = easings['linear'];\n } else {\n // then define w/ name\n var easingVals;\n if (string(pEasing)) {\n var easingProp = style.parse('transition-timing-function', pEasing);\n easingVals = easingProp.value;\n } else {\n // then assume preparsed array\n easingVals = pEasing;\n }\n var name, args;\n if (string(easingVals)) {\n name = easingVals;\n args = [];\n } else {\n name = easingVals[1];\n args = easingVals.slice(2).map(function (n) {\n return +n;\n });\n }\n if (args.length > 0) {\n // create with args\n if (name === 'spring') {\n args.push(ani_p.duration); // need duration to generate spring\n }\n ani_p.easingImpl = easings[name].apply(null, args);\n } else {\n // static impl by name\n ani_p.easingImpl = easings[name];\n }\n }\n }\n var easing = ani_p.easingImpl;\n var percent;\n if (ani_p.duration === 0) {\n percent = 1;\n } else {\n percent = (now - startTime) / ani_p.duration;\n }\n if (ani_p.applying) {\n percent = ani_p.progress;\n }\n if (percent < 0) {\n percent = 0;\n } else if (percent > 1) {\n percent = 1;\n }\n if (ani_p.delay == null) {\n // then update\n\n var startPos = ani_p.startPosition;\n var endPos = ani_p.position;\n if (endPos && isEles && !self.locked()) {\n var newPos = {};\n if (valid(startPos.x, endPos.x)) {\n newPos.x = ease(startPos.x, endPos.x, percent, easing);\n }\n if (valid(startPos.y, endPos.y)) {\n newPos.y = ease(startPos.y, endPos.y, percent, easing);\n }\n self.position(newPos);\n }\n var startPan = ani_p.startPan;\n var endPan = ani_p.pan;\n var pan = _p.pan;\n var animatingPan = endPan != null && isCore;\n if (animatingPan) {\n if (valid(startPan.x, endPan.x)) {\n pan.x = ease(startPan.x, endPan.x, percent, easing);\n }\n if (valid(startPan.y, endPan.y)) {\n pan.y = ease(startPan.y, endPan.y, percent, easing);\n }\n self.emit('pan');\n }\n var startZoom = ani_p.startZoom;\n var endZoom = ani_p.zoom;\n var animatingZoom = endZoom != null && isCore;\n if (animatingZoom) {\n if (valid(startZoom, endZoom)) {\n _p.zoom = bound(_p.minZoom, ease(startZoom, endZoom, percent, easing), _p.maxZoom);\n }\n self.emit('zoom');\n }\n if (animatingPan || animatingZoom) {\n self.emit('viewport');\n }\n var props = ani_p.style;\n if (props && props.length > 0 && isEles) {\n for (var i = 0; i < props.length; i++) {\n var prop = props[i];\n var _name = prop.name;\n var end = prop;\n var start = ani_p.startStyle[_name];\n var propSpec = style.properties[start.name];\n var easedVal = ease(start, end, percent, easing, propSpec);\n style.overrideBypass(self, _name, easedVal);\n } // for props\n\n self.emit('style');\n } // if\n }\n ani_p.progress = percent;\n return percent;\n}\nfunction valid(start, end) {\n if (start == null || end == null) {\n return false;\n }\n if (number$1(start) && number$1(end)) {\n return true;\n } else if (start && end) {\n return true;\n }\n return false;\n}\n\nfunction startAnimation(self, ani, now, isCore) {\n var ani_p = ani._private;\n ani_p.started = true;\n ani_p.startTime = now - ani_p.progress * ani_p.duration;\n}\n\nfunction stepAll(now, cy) {\n var eles = cy._private.aniEles;\n var doneEles = [];\n function stepOne(ele, isCore) {\n var _p = ele._private;\n var current = _p.animation.current;\n var queue = _p.animation.queue;\n var ranAnis = false;\n\n // if nothing currently animating, get something from the queue\n if (current.length === 0) {\n var next = queue.shift();\n if (next) {\n current.push(next);\n }\n }\n var callbacks = function callbacks(_callbacks) {\n for (var j = _callbacks.length - 1; j >= 0; j--) {\n var cb = _callbacks[j];\n cb();\n }\n _callbacks.splice(0, _callbacks.length);\n };\n\n // step and remove if done\n for (var i = current.length - 1; i >= 0; i--) {\n var ani = current[i];\n var ani_p = ani._private;\n if (ani_p.stopped) {\n current.splice(i, 1);\n ani_p.hooked = false;\n ani_p.playing = false;\n ani_p.started = false;\n callbacks(ani_p.frames);\n continue;\n }\n if (!ani_p.playing && !ani_p.applying) {\n continue;\n }\n\n // an apply() while playing shouldn't do anything\n if (ani_p.playing && ani_p.applying) {\n ani_p.applying = false;\n }\n if (!ani_p.started) {\n startAnimation(ele, ani, now);\n }\n step$1(ele, ani, now, isCore);\n if (ani_p.applying) {\n ani_p.applying = false;\n }\n callbacks(ani_p.frames);\n if (ani_p.step != null) {\n ani_p.step(now);\n }\n if (ani.completed()) {\n current.splice(i, 1);\n ani_p.hooked = false;\n ani_p.playing = false;\n ani_p.started = false;\n callbacks(ani_p.completes);\n }\n ranAnis = true;\n }\n if (!isCore && current.length === 0 && queue.length === 0) {\n doneEles.push(ele);\n }\n return ranAnis;\n } // stepElement\n\n // handle all eles\n var ranEleAni = false;\n for (var e = 0; e < eles.length; e++) {\n var ele = eles[e];\n var handledThisEle = stepOne(ele);\n ranEleAni = ranEleAni || handledThisEle;\n } // each element\n\n var ranCoreAni = stepOne(cy, true);\n\n // notify renderer\n if (ranEleAni || ranCoreAni) {\n if (eles.length > 0) {\n cy.notify('draw', eles);\n } else {\n cy.notify('draw');\n }\n }\n\n // remove elements from list of currently animating if its queues are empty\n eles.unmerge(doneEles);\n cy.emit('step');\n} // stepAll\n\nvar corefn$8 = {\n // pull in animation functions\n animate: define.animate(),\n animation: define.animation(),\n animated: define.animated(),\n clearQueue: define.clearQueue(),\n delay: define.delay(),\n delayAnimation: define.delayAnimation(),\n stop: define.stop(),\n addToAnimationPool: function addToAnimationPool(eles) {\n var cy = this;\n if (!cy.styleEnabled()) {\n return;\n } // save cycles when no style used\n\n cy._private.aniEles.merge(eles);\n },\n stopAnimationLoop: function stopAnimationLoop() {\n this._private.animationsRunning = false;\n },\n startAnimationLoop: function startAnimationLoop() {\n var cy = this;\n cy._private.animationsRunning = true;\n if (!cy.styleEnabled()) {\n return;\n } // save cycles when no style used\n\n // NB the animation loop will exec in headless environments if style enabled\n // and explicit cy.destroy() is necessary to stop the loop\n\n function headlessStep() {\n if (!cy._private.animationsRunning) {\n return;\n }\n requestAnimationFrame(function animationStep(now) {\n stepAll(now, cy);\n headlessStep();\n });\n }\n var renderer = cy.renderer();\n if (renderer && renderer.beforeRender) {\n // let the renderer schedule animations\n renderer.beforeRender(function rendererAnimationStep(willDraw, now) {\n stepAll(now, cy);\n }, renderer.beforeRenderPriorities.animations);\n } else {\n // manage the animation loop ourselves\n headlessStep(); // first call\n }\n }\n};\n\nvar emitterOptions = {\n qualifierCompare: function qualifierCompare(selector1, selector2) {\n if (selector1 == null || selector2 == null) {\n return selector1 == null && selector2 == null;\n } else {\n return selector1.sameText(selector2);\n }\n },\n eventMatches: function eventMatches(cy, listener, eventObj) {\n var selector = listener.qualifier;\n if (selector != null) {\n return cy !== eventObj.target && element(eventObj.target) && selector.matches(eventObj.target);\n }\n return true;\n },\n addEventFields: function addEventFields(cy, evt) {\n evt.cy = cy;\n evt.target = cy;\n },\n callbackContext: function callbackContext(cy, listener, eventObj) {\n return listener.qualifier != null ? eventObj.target : cy;\n }\n};\nvar argSelector = function argSelector(arg) {\n if (string(arg)) {\n return new Selector(arg);\n } else {\n return arg;\n }\n};\nvar elesfn = {\n createEmitter: function createEmitter() {\n var _p = this._private;\n if (!_p.emitter) {\n _p.emitter = new Emitter(emitterOptions, this);\n }\n return this;\n },\n emitter: function emitter() {\n return this._private.emitter;\n },\n on: function on(events, selector, callback) {\n this.emitter().on(events, argSelector(selector), callback);\n return this;\n },\n removeListener: function removeListener(events, selector, callback) {\n this.emitter().removeListener(events, argSelector(selector), callback);\n return this;\n },\n removeAllListeners: function removeAllListeners() {\n this.emitter().removeAllListeners();\n return this;\n },\n one: function one(events, selector, callback) {\n this.emitter().one(events, argSelector(selector), callback);\n return this;\n },\n once: function once(events, selector, callback) {\n this.emitter().one(events, argSelector(selector), callback);\n return this;\n },\n emit: function emit(events, extraParams) {\n this.emitter().emit(events, extraParams);\n return this;\n },\n emitAndNotify: function emitAndNotify(event, eles) {\n this.emit(event);\n this.notify(event, eles);\n return this;\n }\n};\ndefine.eventAliasesOn(elesfn);\n\nvar corefn$7 = {\n png: function png(options) {\n var renderer = this._private.renderer;\n options = options || {};\n return renderer.png(options);\n },\n jpg: function jpg(options) {\n var renderer = this._private.renderer;\n options = options || {};\n options.bg = options.bg || '#fff';\n return renderer.jpg(options);\n }\n};\ncorefn$7.jpeg = corefn$7.jpg;\n\nvar corefn$6 = {\n layout: function layout(options) {\n var cy = this;\n if (options == null) {\n error('Layout options must be specified to make a layout');\n return;\n }\n if (options.name == null) {\n error('A `name` must be specified to make a layout');\n return;\n }\n var name = options.name;\n var Layout = cy.extension('layout', name);\n if (Layout == null) {\n error('No such layout `' + name + '` found. Did you forget to import it and `cytoscape.use()` it?');\n return;\n }\n var eles;\n if (string(options.eles)) {\n eles = cy.$(options.eles);\n } else {\n eles = options.eles != null ? options.eles : cy.$();\n }\n var layout = new Layout(extend({}, options, {\n cy: cy,\n eles: eles\n }));\n return layout;\n }\n};\ncorefn$6.createLayout = corefn$6.makeLayout = corefn$6.layout;\n\nvar corefn$5 = {\n notify: function notify(eventName, eventEles) {\n var _p = this._private;\n if (this.batching()) {\n _p.batchNotifications = _p.batchNotifications || {};\n var eles = _p.batchNotifications[eventName] = _p.batchNotifications[eventName] || this.collection();\n if (eventEles != null) {\n eles.merge(eventEles);\n }\n return; // notifications are disabled during batching\n }\n if (!_p.notificationsEnabled) {\n return;\n } // exit on disabled\n\n var renderer = this.renderer();\n\n // exit if destroy() called on core or renderer in between frames #1499 #1528\n if (this.destroyed() || !renderer) {\n return;\n }\n renderer.notify(eventName, eventEles);\n },\n notifications: function notifications(bool) {\n var p = this._private;\n if (bool === undefined) {\n return p.notificationsEnabled;\n } else {\n p.notificationsEnabled = bool ? true : false;\n }\n return this;\n },\n noNotifications: function noNotifications(callback) {\n this.notifications(false);\n callback();\n this.notifications(true);\n },\n batching: function batching() {\n return this._private.batchCount > 0;\n },\n startBatch: function startBatch() {\n var _p = this._private;\n if (_p.batchCount == null) {\n _p.batchCount = 0;\n }\n if (_p.batchCount === 0) {\n _p.batchStyleEles = this.collection();\n _p.batchNotifications = {};\n }\n _p.batchCount++;\n return this;\n },\n endBatch: function endBatch() {\n var _p = this._private;\n if (_p.batchCount === 0) {\n return this;\n }\n _p.batchCount--;\n if (_p.batchCount === 0) {\n // update style for dirty eles\n _p.batchStyleEles.updateStyle();\n var renderer = this.renderer();\n\n // notify the renderer of queued eles and event types\n Object.keys(_p.batchNotifications).forEach(function (eventName) {\n var eles = _p.batchNotifications[eventName];\n if (eles.empty()) {\n renderer.notify(eventName);\n } else {\n renderer.notify(eventName, eles);\n }\n });\n }\n return this;\n },\n batch: function batch(callback) {\n this.startBatch();\n callback();\n this.endBatch();\n return this;\n },\n // for backwards compatibility\n batchData: function batchData(map) {\n var cy = this;\n return this.batch(function () {\n var ids = Object.keys(map);\n for (var i = 0; i < ids.length; i++) {\n var id = ids[i];\n var data = map[id];\n var ele = cy.getElementById(id);\n ele.data(data);\n }\n });\n }\n};\n\nvar rendererDefaults = defaults$g({\n hideEdgesOnViewport: false,\n textureOnViewport: false,\n motionBlur: false,\n motionBlurOpacity: 0.05,\n pixelRatio: undefined,\n desktopTapThreshold: 4,\n touchTapThreshold: 8,\n wheelSensitivity: 1,\n debug: false,\n showFps: false,\n // webgl options\n webgl: false,\n webglDebug: false,\n webglDebugShowAtlases: false,\n // defaults good for mobile\n webglTexSize: 2048,\n webglTexRows: 36,\n webglTexRowsNodes: 18,\n webglBatchSize: 2048,\n webglTexPerBatch: 14,\n webglBgColor: [255, 255, 255]\n});\nvar corefn$4 = {\n renderTo: function renderTo(context, zoom, pan, pxRatio) {\n var r = this._private.renderer;\n r.renderTo(context, zoom, pan, pxRatio);\n return this;\n },\n renderer: function renderer() {\n return this._private.renderer;\n },\n forceRender: function forceRender() {\n this.notify('draw');\n return this;\n },\n resize: function resize() {\n this.invalidateSize();\n this.emitAndNotify('resize');\n return this;\n },\n initRenderer: function initRenderer(options) {\n var cy = this;\n var RendererProto = cy.extension('renderer', options.name);\n if (RendererProto == null) {\n error(\"Can not initialise: No such renderer `\".concat(options.name, \"` found. Did you forget to import it and `cytoscape.use()` it?\"));\n return;\n }\n if (options.wheelSensitivity !== undefined) {\n warn(\"You have set a custom wheel sensitivity. This will make your app zoom unnaturally when using mainstream mice. You should change this value from the default only if you can guarantee that all your users will use the same hardware and OS configuration as your current machine.\");\n }\n var rOpts = rendererDefaults(options);\n rOpts.cy = cy;\n cy._private.renderer = new RendererProto(rOpts);\n this.notify('init');\n },\n destroyRenderer: function destroyRenderer() {\n var cy = this;\n cy.notify('destroy'); // destroy the renderer\n\n var domEle = cy.container();\n if (domEle) {\n domEle._cyreg = null;\n while (domEle.childNodes.length > 0) {\n domEle.removeChild(domEle.childNodes[0]);\n }\n }\n cy._private.renderer = null; // to be extra safe, remove the ref\n cy.mutableElements().forEach(function (ele) {\n var _p = ele._private;\n _p.rscratch = {};\n _p.rstyle = {};\n _p.animation.current = [];\n _p.animation.queue = [];\n });\n },\n onRender: function onRender(fn) {\n return this.on('render', fn);\n },\n offRender: function offRender(fn) {\n return this.off('render', fn);\n }\n};\ncorefn$4.invalidateDimensions = corefn$4.resize;\n\nvar corefn$3 = {\n // get a collection\n // - empty collection on no args\n // - collection of elements in the graph on selector arg\n // - guarantee a returned collection when elements or collection specified\n collection: function collection(eles, opts) {\n if (string(eles)) {\n return this.$(eles);\n } else if (elementOrCollection(eles)) {\n return eles.collection();\n } else if (array(eles)) {\n if (!opts) {\n opts = {};\n }\n return new Collection(this, eles, opts.unique, opts.removed);\n }\n return new Collection(this);\n },\n nodes: function nodes(selector) {\n var nodes = this.$(function (ele) {\n return ele.isNode();\n });\n if (selector) {\n return nodes.filter(selector);\n }\n return nodes;\n },\n edges: function edges(selector) {\n var edges = this.$(function (ele) {\n return ele.isEdge();\n });\n if (selector) {\n return edges.filter(selector);\n }\n return edges;\n },\n // search the graph like jQuery\n $: function $(selector) {\n var eles = this._private.elements;\n if (selector) {\n return eles.filter(selector);\n } else {\n return eles.spawnSelf();\n }\n },\n mutableElements: function mutableElements() {\n return this._private.elements;\n }\n};\n\n// aliases\ncorefn$3.elements = corefn$3.filter = corefn$3.$;\n\nvar styfn$8 = {};\n\n// keys for style blocks, e.g. ttfftt\nvar TRUE = 't';\nvar FALSE = 'f';\n\n// (potentially expensive calculation)\n// apply the style to the element based on\n// - its bypass\n// - what selectors match it\nstyfn$8.apply = function (eles) {\n var self = this;\n var _p = self._private;\n var cy = _p.cy;\n var updatedEles = cy.collection();\n for (var ie = 0; ie < eles.length; ie++) {\n var ele = eles[ie];\n var cxtMeta = self.getContextMeta(ele);\n if (cxtMeta.empty) {\n continue;\n }\n var cxtStyle = self.getContextStyle(cxtMeta);\n var app = self.applyContextStyle(cxtMeta, cxtStyle, ele);\n if (ele._private.appliedInitStyle) {\n self.updateTransitions(ele, app.diffProps);\n } else {\n ele._private.appliedInitStyle = true;\n }\n var hintsDiff = self.updateStyleHints(ele);\n if (hintsDiff) {\n updatedEles.push(ele);\n }\n } // for elements\n\n return updatedEles;\n};\nstyfn$8.getPropertiesDiff = function (oldCxtKey, newCxtKey) {\n var self = this;\n var cache = self._private.propDiffs = self._private.propDiffs || {};\n var dualCxtKey = oldCxtKey + '-' + newCxtKey;\n var cachedVal = cache[dualCxtKey];\n if (cachedVal) {\n return cachedVal;\n }\n var diffProps = [];\n var addedProp = {};\n for (var i = 0; i < self.length; i++) {\n var cxt = self[i];\n var oldHasCxt = oldCxtKey[i] === TRUE;\n var newHasCxt = newCxtKey[i] === TRUE;\n var cxtHasDiffed = oldHasCxt !== newHasCxt;\n var cxtHasMappedProps = cxt.mappedProperties.length > 0;\n if (cxtHasDiffed || newHasCxt && cxtHasMappedProps) {\n var props = undefined;\n if (cxtHasDiffed && cxtHasMappedProps) {\n props = cxt.properties; // suffices b/c mappedProperties is a subset of properties\n } else if (cxtHasDiffed) {\n props = cxt.properties; // need to check them all\n } else if (cxtHasMappedProps) {\n props = cxt.mappedProperties; // only need to check mapped\n }\n for (var j = 0; j < props.length; j++) {\n var prop = props[j];\n var name = prop.name;\n\n // if a later context overrides this property, then the fact that this context has switched/diffed doesn't matter\n // (semi expensive check since it makes this function O(n^2) on context length, but worth it since overall result\n // is cached)\n var laterCxtOverrides = false;\n for (var k = i + 1; k < self.length; k++) {\n var laterCxt = self[k];\n var hasLaterCxt = newCxtKey[k] === TRUE;\n if (!hasLaterCxt) {\n continue;\n } // can't override unless the context is active\n\n laterCxtOverrides = laterCxt.properties[prop.name] != null;\n if (laterCxtOverrides) {\n break;\n } // exit early as long as one later context overrides\n }\n if (!addedProp[name] && !laterCxtOverrides) {\n addedProp[name] = true;\n diffProps.push(name);\n }\n } // for props\n } // if\n } // for contexts\n\n cache[dualCxtKey] = diffProps;\n return diffProps;\n};\nstyfn$8.getContextMeta = function (ele) {\n var self = this;\n var cxtKey = '';\n var diffProps;\n var prevKey = ele._private.styleCxtKey || '';\n\n // get the cxt key\n for (var i = 0; i < self.length; i++) {\n var context = self[i];\n var contextSelectorMatches = context.selector && context.selector.matches(ele); // NB: context.selector may be null for 'core'\n\n if (contextSelectorMatches) {\n cxtKey += TRUE;\n } else {\n cxtKey += FALSE;\n }\n } // for context\n\n diffProps = self.getPropertiesDiff(prevKey, cxtKey);\n ele._private.styleCxtKey = cxtKey;\n return {\n key: cxtKey,\n diffPropNames: diffProps,\n empty: diffProps.length === 0\n };\n};\n\n// gets a computed ele style object based on matched contexts\nstyfn$8.getContextStyle = function (cxtMeta) {\n var cxtKey = cxtMeta.key;\n var self = this;\n var cxtStyles = this._private.contextStyles = this._private.contextStyles || {};\n\n // if already computed style, returned cached copy\n if (cxtStyles[cxtKey]) {\n return cxtStyles[cxtKey];\n }\n var style = {\n _private: {\n key: cxtKey\n }\n };\n for (var i = 0; i < self.length; i++) {\n var cxt = self[i];\n var hasCxt = cxtKey[i] === TRUE;\n if (!hasCxt) {\n continue;\n }\n for (var j = 0; j < cxt.properties.length; j++) {\n var prop = cxt.properties[j];\n style[prop.name] = prop;\n }\n }\n cxtStyles[cxtKey] = style;\n return style;\n};\nstyfn$8.applyContextStyle = function (cxtMeta, cxtStyle, ele) {\n var self = this;\n var diffProps = cxtMeta.diffPropNames;\n var retDiffProps = {};\n var types = self.types;\n for (var i = 0; i < diffProps.length; i++) {\n var diffPropName = diffProps[i];\n var cxtProp = cxtStyle[diffPropName];\n var eleProp = ele.pstyle(diffPropName);\n if (!cxtProp) {\n // no context prop means delete\n if (!eleProp) {\n continue; // no existing prop means nothing needs to be removed\n // nb affects initial application on mapped values like control-point-distances\n } else if (eleProp.bypass) {\n cxtProp = {\n name: diffPropName,\n deleteBypassed: true\n };\n } else {\n cxtProp = {\n name: diffPropName,\n \"delete\": true\n };\n }\n }\n\n // save cycles when the context prop doesn't need to be applied\n if (eleProp === cxtProp) {\n continue;\n }\n\n // save cycles when a mapped context prop doesn't need to be applied\n if (cxtProp.mapped === types.fn // context prop is function mapper\n && eleProp != null // some props can be null even by default (e.g. a prop that overrides another one)\n && eleProp.mapping != null // ele prop is a concrete value from from a mapper\n && eleProp.mapping.value === cxtProp.value // the current prop on the ele is a flat prop value for the function mapper\n ) {\n // NB don't write to cxtProp, as it's shared among eles (stored in stylesheet)\n var mapping = eleProp.mapping; // can write to mapping, as it's a per-ele copy\n var fnValue = mapping.fnValue = cxtProp.value(ele); // temporarily cache the value in case of a miss\n\n if (fnValue === mapping.prevFnValue) {\n continue;\n }\n }\n var retDiffProp = retDiffProps[diffPropName] = {\n prev: eleProp\n };\n self.applyParsedProperty(ele, cxtProp);\n retDiffProp.next = ele.pstyle(diffPropName);\n if (retDiffProp.next && retDiffProp.next.bypass) {\n retDiffProp.next = retDiffProp.next.bypassed;\n }\n }\n return {\n diffProps: retDiffProps\n };\n};\nstyfn$8.updateStyleHints = function (ele) {\n var _p = ele._private;\n var self = this;\n var propNames = self.propertyGroupNames;\n var propGrKeys = self.propertyGroupKeys;\n var propHash = function propHash(ele, propNames, seedKey) {\n return self.getPropertiesHash(ele, propNames, seedKey);\n };\n var oldStyleKey = _p.styleKey;\n if (ele.removed()) {\n return false;\n }\n var isNode = _p.group === 'nodes';\n\n // get the style key hashes per prop group\n // but lazily -- only use non-default prop values to reduce the number of hashes\n //\n\n var overriddenStyles = ele._private.style;\n propNames = Object.keys(overriddenStyles);\n for (var i = 0; i < propGrKeys.length; i++) {\n var grKey = propGrKeys[i];\n _p.styleKeys[grKey] = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT];\n }\n var updateGrKey1 = function updateGrKey1(val, grKey) {\n return _p.styleKeys[grKey][0] = hashInt(val, _p.styleKeys[grKey][0]);\n };\n var updateGrKey2 = function updateGrKey2(val, grKey) {\n return _p.styleKeys[grKey][1] = hashIntAlt(val, _p.styleKeys[grKey][1]);\n };\n var updateGrKey = function updateGrKey(val, grKey) {\n updateGrKey1(val, grKey);\n updateGrKey2(val, grKey);\n };\n var updateGrKeyWStr = function updateGrKeyWStr(strVal, grKey) {\n for (var j = 0; j < strVal.length; j++) {\n var ch = strVal.charCodeAt(j);\n updateGrKey1(ch, grKey);\n updateGrKey2(ch, grKey);\n }\n };\n\n // - hashing works on 32 bit ints b/c we use bitwise ops\n // - small numbers get cut off (e.g. 0.123 is seen as 0 by the hashing function)\n // - raise up small numbers so more significant digits are seen by hashing\n // - make small numbers larger than a normal value to avoid collisions\n // - works in practice and it's relatively cheap\n var N = 2000000000;\n var cleanNum = function cleanNum(val) {\n return -128 < val && val < 128 && Math.floor(val) !== val ? N - (val * 1024 | 0) : val;\n };\n for (var _i = 0; _i < propNames.length; _i++) {\n var name = propNames[_i];\n var parsedProp = overriddenStyles[name];\n if (parsedProp == null) {\n continue;\n }\n var propInfo = this.properties[name];\n var type = propInfo.type;\n var _grKey = propInfo.groupKey;\n var normalizedNumberVal = undefined;\n if (propInfo.hashOverride != null) {\n normalizedNumberVal = propInfo.hashOverride(ele, parsedProp);\n } else if (parsedProp.pfValue != null) {\n normalizedNumberVal = parsedProp.pfValue;\n }\n\n // might not be a number if it allows enums\n var numberVal = propInfo.enums == null ? parsedProp.value : null;\n var haveNormNum = normalizedNumberVal != null;\n var haveUnitedNum = numberVal != null;\n var haveNum = haveNormNum || haveUnitedNum;\n var units = parsedProp.units;\n\n // numbers are cheaper to hash than strings\n // 1 hash op vs n hash ops (for length n string)\n if (type.number && haveNum && !type.multiple) {\n var v = haveNormNum ? normalizedNumberVal : numberVal;\n updateGrKey(cleanNum(v), _grKey);\n if (!haveNormNum && units != null) {\n updateGrKeyWStr(units, _grKey);\n }\n } else {\n updateGrKeyWStr(parsedProp.strValue, _grKey);\n }\n }\n\n // overall style key\n //\n\n var hash = [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT];\n for (var _i2 = 0; _i2 < propGrKeys.length; _i2++) {\n var _grKey2 = propGrKeys[_i2];\n var grHash = _p.styleKeys[_grKey2];\n hash[0] = hashInt(grHash[0], hash[0]);\n hash[1] = hashIntAlt(grHash[1], hash[1]);\n }\n _p.styleKey = combineHashes(hash[0], hash[1]);\n\n // label dims\n //\n\n var sk = _p.styleKeys;\n _p.labelDimsKey = combineHashesArray(sk.labelDimensions);\n var labelKeys = propHash(ele, ['label'], sk.labelDimensions);\n _p.labelKey = combineHashesArray(labelKeys);\n _p.labelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, labelKeys));\n if (!isNode) {\n var sourceLabelKeys = propHash(ele, ['source-label'], sk.labelDimensions);\n _p.sourceLabelKey = combineHashesArray(sourceLabelKeys);\n _p.sourceLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, sourceLabelKeys));\n var targetLabelKeys = propHash(ele, ['target-label'], sk.labelDimensions);\n _p.targetLabelKey = combineHashesArray(targetLabelKeys);\n _p.targetLabelStyleKey = combineHashesArray(hashArrays(sk.commonLabel, targetLabelKeys));\n }\n\n // node\n //\n\n if (isNode) {\n var _p$styleKeys = _p.styleKeys,\n nodeBody = _p$styleKeys.nodeBody,\n nodeBorder = _p$styleKeys.nodeBorder,\n nodeOutline = _p$styleKeys.nodeOutline,\n backgroundImage = _p$styleKeys.backgroundImage,\n compound = _p$styleKeys.compound,\n pie = _p$styleKeys.pie,\n stripe = _p$styleKeys.stripe;\n var nodeKeys = [nodeBody, nodeBorder, nodeOutline, backgroundImage, compound, pie, stripe].filter(function (k) {\n return k != null;\n }).reduce(hashArrays, [DEFAULT_HASH_SEED, DEFAULT_HASH_SEED_ALT]);\n _p.nodeKey = combineHashesArray(nodeKeys);\n _p.hasPie = pie != null && pie[0] !== DEFAULT_HASH_SEED && pie[1] !== DEFAULT_HASH_SEED_ALT;\n _p.hasStripe = stripe != null && stripe[0] !== DEFAULT_HASH_SEED && stripe[1] !== DEFAULT_HASH_SEED_ALT;\n }\n return oldStyleKey !== _p.styleKey;\n};\nstyfn$8.clearStyleHints = function (ele) {\n var _p = ele._private;\n _p.styleCxtKey = '';\n _p.styleKeys = {};\n _p.styleKey = null;\n _p.labelKey = null;\n _p.labelStyleKey = null;\n _p.sourceLabelKey = null;\n _p.sourceLabelStyleKey = null;\n _p.targetLabelKey = null;\n _p.targetLabelStyleKey = null;\n _p.nodeKey = null;\n _p.hasPie = null;\n _p.hasStripe = null;\n};\n\n// apply a property to the style (for internal use)\n// returns whether application was successful\n//\n// now, this function flattens the property, and here's how:\n//\n// for parsedProp:{ bypass: true, deleteBypass: true }\n// no property is generated, instead the bypass property in the\n// element's style is replaced by what's pointed to by the `bypassed`\n// field in the bypass property (i.e. restoring the property the\n// bypass was overriding)\n//\n// for parsedProp:{ mapped: truthy }\n// the generated flattenedProp:{ mapping: prop }\n//\n// for parsedProp:{ bypass: true }\n// the generated flattenedProp:{ bypassed: parsedProp }\nstyfn$8.applyParsedProperty = function (ele, parsedProp) {\n var self = this;\n var prop = parsedProp;\n var style = ele._private.style;\n var flatProp;\n var types = self.types;\n var type = self.properties[prop.name].type;\n var propIsBypass = prop.bypass;\n var origProp = style[prop.name];\n var origPropIsBypass = origProp && origProp.bypass;\n var _p = ele._private;\n var flatPropMapping = 'mapping';\n var getVal = function getVal(p) {\n if (p == null) {\n return null;\n } else if (p.pfValue != null) {\n return p.pfValue;\n } else {\n return p.value;\n }\n };\n var checkTriggers = function checkTriggers() {\n var fromVal = getVal(origProp);\n var toVal = getVal(prop);\n self.checkTriggers(ele, prop.name, fromVal, toVal);\n };\n\n // edge sanity checks to prevent the client from making serious mistakes\n if (parsedProp.name === 'curve-style' && ele.isEdge() && (\n // loops must be bundled beziers\n parsedProp.value !== 'bezier' && ele.isLoop() ||\n // edges connected to compound nodes can not be haystacks\n parsedProp.value === 'haystack' && (ele.source().isParent() || ele.target().isParent()))) {\n prop = parsedProp = this.parse(parsedProp.name, 'bezier', propIsBypass);\n }\n if (prop[\"delete\"]) {\n // delete the property and use the default value on falsey value\n style[prop.name] = undefined;\n checkTriggers();\n return true;\n }\n if (prop.deleteBypassed) {\n // delete the property that the\n if (!origProp) {\n checkTriggers();\n return true; // can't delete if no prop\n } else if (origProp.bypass) {\n // delete bypassed\n origProp.bypassed = undefined;\n checkTriggers();\n return true;\n } else {\n return false; // we're unsuccessful deleting the bypassed\n }\n }\n\n // check if we need to delete the current bypass\n if (prop.deleteBypass) {\n // then this property is just here to indicate we need to delete\n if (!origProp) {\n checkTriggers();\n return true; // property is already not defined\n } else if (origProp.bypass) {\n // then replace the bypass property with the original\n // because the bypassed property was already applied (and therefore parsed), we can just replace it (no reapplying necessary)\n style[prop.name] = origProp.bypassed;\n checkTriggers();\n return true;\n } else {\n return false; // we're unsuccessful deleting the bypass\n }\n }\n var printMappingErr = function printMappingErr() {\n warn('Do not assign mappings to elements without corresponding data (i.e. ele `' + ele.id() + '` has no mapping for property `' + prop.name + '` with data field `' + prop.field + '`); try a `[' + prop.field + ']` selector to limit scope to elements with `' + prop.field + '` defined');\n };\n\n // put the property in the style objects\n switch (prop.mapped) {\n // flatten the property if mapped\n case types.mapData:\n {\n // flatten the field (e.g. data.foo.bar)\n var fields = prop.field.split('.');\n var fieldVal = _p.data;\n for (var i = 0; i < fields.length && fieldVal; i++) {\n var field = fields[i];\n fieldVal = fieldVal[field];\n }\n if (fieldVal == null) {\n printMappingErr();\n return false;\n }\n var percent;\n if (!number$1(fieldVal)) {\n // then don't apply and fall back on the existing style\n warn('Do not use continuous mappers without specifying numeric data (i.e. `' + prop.field + ': ' + fieldVal + '` for `' + ele.id() + '` is non-numeric)');\n return false;\n } else {\n var fieldWidth = prop.fieldMax - prop.fieldMin;\n if (fieldWidth === 0) {\n // safety check -- not strictly necessary as no props of zero range should be passed here\n percent = 0;\n } else {\n percent = (fieldVal - prop.fieldMin) / fieldWidth;\n }\n }\n\n // make sure to bound percent value\n if (percent < 0) {\n percent = 0;\n } else if (percent > 1) {\n percent = 1;\n }\n if (type.color) {\n var r1 = prop.valueMin[0];\n var r2 = prop.valueMax[0];\n var g1 = prop.valueMin[1];\n var g2 = prop.valueMax[1];\n var b1 = prop.valueMin[2];\n var b2 = prop.valueMax[2];\n var a1 = prop.valueMin[3] == null ? 1 : prop.valueMin[3];\n var a2 = prop.valueMax[3] == null ? 1 : prop.valueMax[3];\n var clr = [Math.round(r1 + (r2 - r1) * percent), Math.round(g1 + (g2 - g1) * percent), Math.round(b1 + (b2 - b1) * percent), Math.round(a1 + (a2 - a1) * percent)];\n flatProp = {\n // colours are simple, so just create the flat property instead of expensive string parsing\n bypass: prop.bypass,\n // we're a bypass if the mapping property is a bypass\n name: prop.name,\n value: clr,\n strValue: 'rgb(' + clr[0] + ', ' + clr[1] + ', ' + clr[2] + ')'\n };\n } else if (type.number) {\n var calcValue = prop.valueMin + (prop.valueMax - prop.valueMin) * percent;\n flatProp = this.parse(prop.name, calcValue, prop.bypass, flatPropMapping);\n } else {\n return false; // can only map to colours and numbers\n }\n if (!flatProp) {\n // if we can't flatten the property, then don't apply the property and fall back on the existing style\n printMappingErr();\n return false;\n }\n flatProp.mapping = prop; // keep a reference to the mapping\n prop = flatProp; // the flattened (mapped) property is the one we want\n\n break;\n }\n\n // direct mapping\n case types.data:\n {\n // flatten the field (e.g. data.foo.bar)\n var _fields = prop.field.split('.');\n var _fieldVal = _p.data;\n for (var _i3 = 0; _i3 < _fields.length && _fieldVal; _i3++) {\n var _field = _fields[_i3];\n _fieldVal = _fieldVal[_field];\n }\n if (_fieldVal != null) {\n flatProp = this.parse(prop.name, _fieldVal, prop.bypass, flatPropMapping);\n }\n if (!flatProp) {\n // if we can't flatten the property, then don't apply and fall back on the existing style\n printMappingErr();\n return false;\n }\n flatProp.mapping = prop; // keep a reference to the mapping\n prop = flatProp; // the flattened (mapped) property is the one we want\n\n break;\n }\n case types.fn:\n {\n var fn = prop.value;\n var fnRetVal = prop.fnValue != null ? prop.fnValue : fn(ele); // check for cached value before calling function\n\n prop.prevFnValue = fnRetVal;\n if (fnRetVal == null) {\n warn('Custom function mappers may not return null (i.e. `' + prop.name + '` for ele `' + ele.id() + '` is null)');\n return false;\n }\n flatProp = this.parse(prop.name, fnRetVal, prop.bypass, flatPropMapping);\n if (!flatProp) {\n warn('Custom function mappers may not return invalid values for the property type (i.e. `' + prop.name + '` for ele `' + ele.id() + '` is invalid)');\n return false;\n }\n flatProp.mapping = copy(prop); // keep a reference to the mapping\n prop = flatProp; // the flattened (mapped) property is the one we want\n\n break;\n }\n case undefined:\n break;\n // just set the property\n\n default:\n return false;\n // not a valid mapping\n }\n\n // if the property is a bypass property, then link the resultant property to the original one\n if (propIsBypass) {\n if (origPropIsBypass) {\n // then this bypass overrides the existing one\n prop.bypassed = origProp.bypassed; // steal bypassed prop from old bypass\n } else {\n // then link the orig prop to the new bypass\n prop.bypassed = origProp;\n }\n style[prop.name] = prop; // and set\n } else {\n // prop is not bypass\n if (origPropIsBypass) {\n // then keep the orig prop (since it's a bypass) and link to the new prop\n origProp.bypassed = prop;\n } else {\n // then just replace the old prop with the new one\n style[prop.name] = prop;\n }\n }\n checkTriggers();\n return true;\n};\nstyfn$8.cleanElements = function (eles, keepBypasses) {\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n this.clearStyleHints(ele);\n ele.dirtyCompoundBoundsCache();\n ele.dirtyBoundingBoxCache();\n if (!keepBypasses) {\n ele._private.style = {};\n } else {\n var style = ele._private.style;\n var propNames = Object.keys(style);\n for (var j = 0; j < propNames.length; j++) {\n var propName = propNames[j];\n var eleProp = style[propName];\n if (eleProp != null) {\n if (eleProp.bypass) {\n eleProp.bypassed = null;\n } else {\n style[propName] = null;\n }\n }\n }\n }\n }\n};\n\n// updates the visual style for all elements (useful for manual style modification after init)\nstyfn$8.update = function () {\n var cy = this._private.cy;\n var eles = cy.mutableElements();\n eles.updateStyle();\n};\n\n// diffProps : { name => { prev, next } }\nstyfn$8.updateTransitions = function (ele, diffProps) {\n var self = this;\n var _p = ele._private;\n var props = ele.pstyle('transition-property').value;\n var duration = ele.pstyle('transition-duration').pfValue;\n var delay = ele.pstyle('transition-delay').pfValue;\n if (props.length > 0 && duration > 0) {\n var style = {};\n\n // build up the style to animate towards\n var anyPrev = false;\n for (var i = 0; i < props.length; i++) {\n var prop = props[i];\n var styProp = ele.pstyle(prop);\n var diffProp = diffProps[prop];\n if (!diffProp) {\n continue;\n }\n var prevProp = diffProp.prev;\n var fromProp = prevProp;\n var toProp = diffProp.next != null ? diffProp.next : styProp;\n var diff = false;\n var initVal = undefined;\n var initDt = 0.000001; // delta time % value for initVal (allows animating out of init zero opacity)\n\n if (!fromProp) {\n continue;\n }\n\n // consider px values\n if (number$1(fromProp.pfValue) && number$1(toProp.pfValue)) {\n diff = toProp.pfValue - fromProp.pfValue; // nonzero is truthy\n initVal = fromProp.pfValue + initDt * diff;\n\n // consider numerical values\n } else if (number$1(fromProp.value) && number$1(toProp.value)) {\n diff = toProp.value - fromProp.value; // nonzero is truthy\n initVal = fromProp.value + initDt * diff;\n\n // consider colour values\n } else if (array(fromProp.value) && array(toProp.value)) {\n diff = fromProp.value[0] !== toProp.value[0] || fromProp.value[1] !== toProp.value[1] || fromProp.value[2] !== toProp.value[2];\n initVal = fromProp.strValue;\n }\n\n // the previous value is good for an animation only if it's different\n if (diff) {\n style[prop] = toProp.strValue; // to val\n this.applyBypass(ele, prop, initVal); // from val\n anyPrev = true;\n }\n } // end if props allow ani\n\n // can't transition if there's nothing previous to transition from\n if (!anyPrev) {\n return;\n }\n _p.transitioning = true;\n new Promise$1(function (resolve) {\n if (delay > 0) {\n ele.delayAnimation(delay).play().promise().then(resolve);\n } else {\n resolve();\n }\n }).then(function () {\n return ele.animation({\n style: style,\n duration: duration,\n easing: ele.pstyle('transition-timing-function').value,\n queue: false\n }).play().promise();\n }).then(function () {\n // if( !isBypass ){\n self.removeBypasses(ele, props);\n ele.emitAndNotify('style');\n // }\n\n _p.transitioning = false;\n });\n } else if (_p.transitioning) {\n this.removeBypasses(ele, props);\n ele.emitAndNotify('style');\n _p.transitioning = false;\n }\n};\nstyfn$8.checkTrigger = function (ele, name, fromValue, toValue, getTrigger, onTrigger) {\n var prop = this.properties[name];\n var triggerCheck = getTrigger(prop);\n if (ele.removed()) {\n return;\n }\n if (triggerCheck != null && triggerCheck(fromValue, toValue, ele)) {\n onTrigger(prop);\n }\n};\nstyfn$8.checkZOrderTrigger = function (ele, name, fromValue, toValue) {\n var _this = this;\n this.checkTrigger(ele, name, fromValue, toValue, function (prop) {\n return prop.triggersZOrder;\n }, function () {\n _this._private.cy.notify('zorder', ele);\n });\n};\nstyfn$8.checkBoundsTrigger = function (ele, name, fromValue, toValue) {\n this.checkTrigger(ele, name, fromValue, toValue, function (prop) {\n return prop.triggersBounds;\n }, function (prop) {\n ele.dirtyCompoundBoundsCache();\n ele.dirtyBoundingBoxCache();\n });\n};\nstyfn$8.checkConnectedEdgesBoundsTrigger = function (ele, name, fromValue, toValue) {\n this.checkTrigger(ele, name, fromValue, toValue, function (prop) {\n return prop.triggersBoundsOfConnectedEdges;\n }, function (prop) {\n ele.connectedEdges().forEach(function (edge) {\n edge.dirtyBoundingBoxCache();\n });\n });\n};\nstyfn$8.checkParallelEdgesBoundsTrigger = function (ele, name, fromValue, toValue) {\n this.checkTrigger(ele, name, fromValue, toValue, function (prop) {\n return prop.triggersBoundsOfParallelEdges;\n }, function (prop) {\n ele.parallelEdges().forEach(function (pllEdge) {\n pllEdge.dirtyBoundingBoxCache();\n });\n });\n};\nstyfn$8.checkTriggers = function (ele, name, fromValue, toValue) {\n ele.dirtyStyleCache();\n this.checkZOrderTrigger(ele, name, fromValue, toValue);\n this.checkBoundsTrigger(ele, name, fromValue, toValue);\n this.checkConnectedEdgesBoundsTrigger(ele, name, fromValue, toValue);\n this.checkParallelEdgesBoundsTrigger(ele, name, fromValue, toValue);\n};\n\nvar styfn$7 = {};\n\n// bypasses are applied to an existing style on an element, and just tacked on temporarily\n// returns true iff application was successful for at least 1 specified property\nstyfn$7.applyBypass = function (eles, name, value, updateTransitions) {\n var self = this;\n var props = [];\n var isBypass = true;\n\n // put all the properties (can specify one or many) in an array after parsing them\n if (name === '*' || name === '**') {\n // apply to all property names\n\n if (value !== undefined) {\n for (var i = 0; i < self.properties.length; i++) {\n var prop = self.properties[i];\n var _name = prop.name;\n var parsedProp = this.parse(_name, value, true);\n if (parsedProp) {\n props.push(parsedProp);\n }\n }\n }\n } else if (string(name)) {\n // then parse the single property\n var _parsedProp = this.parse(name, value, true);\n if (_parsedProp) {\n props.push(_parsedProp);\n }\n } else if (plainObject(name)) {\n // then parse each property\n var specifiedProps = name;\n updateTransitions = value;\n var names = Object.keys(specifiedProps);\n for (var _i = 0; _i < names.length; _i++) {\n var _name2 = names[_i];\n var _value = specifiedProps[_name2];\n if (_value === undefined) {\n // try camel case name too\n _value = specifiedProps[dash2camel(_name2)];\n }\n if (_value !== undefined) {\n var _parsedProp2 = this.parse(_name2, _value, true);\n if (_parsedProp2) {\n props.push(_parsedProp2);\n }\n }\n }\n } else {\n // can't do anything without well defined properties\n return false;\n }\n\n // we've failed if there are no valid properties\n if (props.length === 0) {\n return false;\n }\n\n // now, apply the bypass properties on the elements\n var ret = false; // return true if at least one succesful bypass applied\n for (var _i2 = 0; _i2 < eles.length; _i2++) {\n // for each ele\n var ele = eles[_i2];\n var diffProps = {};\n var diffProp = undefined;\n for (var j = 0; j < props.length; j++) {\n // for each prop\n var _prop = props[j];\n if (updateTransitions) {\n var prevProp = ele.pstyle(_prop.name);\n diffProp = diffProps[_prop.name] = {\n prev: prevProp\n };\n }\n ret = this.applyParsedProperty(ele, copy(_prop)) || ret;\n if (updateTransitions) {\n diffProp.next = ele.pstyle(_prop.name);\n }\n } // for props\n\n if (ret) {\n this.updateStyleHints(ele);\n }\n if (updateTransitions) {\n this.updateTransitions(ele, diffProps, isBypass);\n }\n } // for eles\n\n return ret;\n};\n\n// only useful in specific cases like animation\nstyfn$7.overrideBypass = function (eles, name, value) {\n name = camel2dash(name);\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var prop = ele._private.style[name];\n var type = this.properties[name].type;\n var isColor = type.color;\n var isMulti = type.mutiple;\n var oldValue = !prop ? null : prop.pfValue != null ? prop.pfValue : prop.value;\n if (!prop || !prop.bypass) {\n // need a bypass if one doesn't exist\n this.applyBypass(ele, name, value);\n } else {\n prop.value = value;\n if (prop.pfValue != null) {\n prop.pfValue = value;\n }\n if (isColor) {\n prop.strValue = 'rgb(' + value.join(',') + ')';\n } else if (isMulti) {\n prop.strValue = value.join(' ');\n } else {\n prop.strValue = '' + value;\n }\n this.updateStyleHints(ele);\n }\n this.checkTriggers(ele, name, oldValue, value);\n }\n};\nstyfn$7.removeAllBypasses = function (eles, updateTransitions) {\n return this.removeBypasses(eles, this.propertyNames, updateTransitions);\n};\nstyfn$7.removeBypasses = function (eles, props, updateTransitions) {\n var isBypass = true;\n for (var j = 0; j < eles.length; j++) {\n var ele = eles[j];\n var diffProps = {};\n for (var i = 0; i < props.length; i++) {\n var name = props[i];\n var prop = this.properties[name];\n var prevProp = ele.pstyle(prop.name);\n if (!prevProp || !prevProp.bypass) {\n // if a bypass doesn't exist for the prop, nothing needs to be removed\n continue;\n }\n var value = ''; // empty => remove bypass\n var parsedProp = this.parse(name, value, true);\n var diffProp = diffProps[prop.name] = {\n prev: prevProp\n };\n this.applyParsedProperty(ele, parsedProp);\n diffProp.next = ele.pstyle(prop.name);\n } // for props\n\n this.updateStyleHints(ele);\n if (updateTransitions) {\n this.updateTransitions(ele, diffProps, isBypass);\n }\n } // for eles\n};\n\nvar styfn$6 = {};\n\n// gets what an em size corresponds to in pixels relative to a dom element\nstyfn$6.getEmSizeInPixels = function () {\n var px = this.containerCss('font-size');\n if (px != null) {\n return parseFloat(px);\n } else {\n return 1; // for headless\n }\n};\n\n// gets css property from the core container\nstyfn$6.containerCss = function (propName) {\n var cy = this._private.cy;\n var domElement = cy.container();\n var containerWindow = cy.window();\n if (containerWindow && domElement && containerWindow.getComputedStyle) {\n return containerWindow.getComputedStyle(domElement).getPropertyValue(propName);\n }\n};\n\nvar styfn$5 = {};\n\n// gets the rendered style for an element\nstyfn$5.getRenderedStyle = function (ele, prop) {\n if (prop) {\n return this.getStylePropertyValue(ele, prop, true);\n } else {\n return this.getRawStyle(ele, true);\n }\n};\n\n// gets the raw style for an element\nstyfn$5.getRawStyle = function (ele, isRenderedVal) {\n var self = this;\n ele = ele[0]; // insure it's an element\n\n if (ele) {\n var rstyle = {};\n for (var i = 0; i < self.properties.length; i++) {\n var prop = self.properties[i];\n var val = self.getStylePropertyValue(ele, prop.name, isRenderedVal);\n if (val != null) {\n rstyle[prop.name] = val;\n rstyle[dash2camel(prop.name)] = val;\n }\n }\n return rstyle;\n }\n};\nstyfn$5.getIndexedStyle = function (ele, property, subproperty, index) {\n var pstyle = ele.pstyle(property)[subproperty][index];\n return pstyle != null ? pstyle : ele.cy().style().getDefaultProperty(property)[subproperty][0];\n};\nstyfn$5.getStylePropertyValue = function (ele, propName, isRenderedVal) {\n var self = this;\n ele = ele[0]; // insure it's an element\n\n if (ele) {\n var prop = self.properties[propName];\n if (prop.alias) {\n prop = prop.pointsTo;\n }\n var type = prop.type;\n var styleProp = ele.pstyle(prop.name);\n if (styleProp) {\n var value = styleProp.value,\n units = styleProp.units,\n strValue = styleProp.strValue;\n if (isRenderedVal && type.number && value != null && number$1(value)) {\n var zoom = ele.cy().zoom();\n var getRenderedValue = function getRenderedValue(val) {\n return val * zoom;\n };\n var getValueStringWithUnits = function getValueStringWithUnits(val, units) {\n return getRenderedValue(val) + units;\n };\n var isArrayValue = array(value);\n var haveUnits = isArrayValue ? units.every(function (u) {\n return u != null;\n }) : units != null;\n if (haveUnits) {\n if (isArrayValue) {\n return value.map(function (v, i) {\n return getValueStringWithUnits(v, units[i]);\n }).join(' ');\n } else {\n return getValueStringWithUnits(value, units);\n }\n } else {\n if (isArrayValue) {\n return value.map(function (v) {\n return string(v) ? v : '' + getRenderedValue(v);\n }).join(' ');\n } else {\n return '' + getRenderedValue(value);\n }\n }\n } else if (strValue != null) {\n return strValue;\n }\n }\n return null;\n }\n};\nstyfn$5.getAnimationStartStyle = function (ele, aniProps) {\n var rstyle = {};\n for (var i = 0; i < aniProps.length; i++) {\n var aniProp = aniProps[i];\n var name = aniProp.name;\n var styleProp = ele.pstyle(name);\n if (styleProp !== undefined) {\n // then make a prop of it\n if (plainObject(styleProp)) {\n styleProp = this.parse(name, styleProp.strValue);\n } else {\n styleProp = this.parse(name, styleProp);\n }\n }\n if (styleProp) {\n rstyle[name] = styleProp;\n }\n }\n return rstyle;\n};\nstyfn$5.getPropsList = function (propsObj) {\n var self = this;\n var rstyle = [];\n var style = propsObj;\n var props = self.properties;\n if (style) {\n var names = Object.keys(style);\n for (var i = 0; i < names.length; i++) {\n var name = names[i];\n var val = style[name];\n var prop = props[name] || props[camel2dash(name)];\n var styleProp = this.parse(prop.name, val);\n if (styleProp) {\n rstyle.push(styleProp);\n }\n }\n }\n return rstyle;\n};\nstyfn$5.getNonDefaultPropertiesHash = function (ele, propNames, seed) {\n var hash = seed.slice();\n var name, val, strVal, chVal;\n var i, j;\n for (i = 0; i < propNames.length; i++) {\n name = propNames[i];\n val = ele.pstyle(name, false);\n if (val == null) {\n continue;\n } else if (val.pfValue != null) {\n hash[0] = hashInt(chVal, hash[0]);\n hash[1] = hashIntAlt(chVal, hash[1]);\n } else {\n strVal = val.strValue;\n for (j = 0; j < strVal.length; j++) {\n chVal = strVal.charCodeAt(j);\n hash[0] = hashInt(chVal, hash[0]);\n hash[1] = hashIntAlt(chVal, hash[1]);\n }\n }\n }\n return hash;\n};\nstyfn$5.getPropertiesHash = styfn$5.getNonDefaultPropertiesHash;\n\nvar styfn$4 = {};\nstyfn$4.appendFromJson = function (json) {\n var style = this;\n for (var i = 0; i < json.length; i++) {\n var context = json[i];\n var selector = context.selector;\n var props = context.style || context.css;\n var names = Object.keys(props);\n style.selector(selector); // apply selector\n\n for (var j = 0; j < names.length; j++) {\n var name = names[j];\n var value = props[name];\n style.css(name, value); // apply property\n }\n }\n return style;\n};\n\n// accessible cy.style() function\nstyfn$4.fromJson = function (json) {\n var style = this;\n style.resetToDefault();\n style.appendFromJson(json);\n return style;\n};\n\n// get json from cy.style() api\nstyfn$4.json = function () {\n var json = [];\n for (var i = this.defaultLength; i < this.length; i++) {\n var cxt = this[i];\n var selector = cxt.selector;\n var props = cxt.properties;\n var css = {};\n for (var j = 0; j < props.length; j++) {\n var prop = props[j];\n css[prop.name] = prop.strValue;\n }\n json.push({\n selector: !selector ? 'core' : selector.toString(),\n style: css\n });\n }\n return json;\n};\n\nvar styfn$3 = {};\nstyfn$3.appendFromString = function (string) {\n var self = this;\n var style = this;\n var remaining = '' + string;\n var selAndBlockStr;\n var blockRem;\n var propAndValStr;\n\n // remove comments from the style string\n remaining = remaining.replace(/[/][*](\\s|.)+?[*][/]/g, '');\n function removeSelAndBlockFromRemaining() {\n // remove the parsed selector and block from the remaining text to parse\n if (remaining.length > selAndBlockStr.length) {\n remaining = remaining.substr(selAndBlockStr.length);\n } else {\n remaining = '';\n }\n }\n function removePropAndValFromRem() {\n // remove the parsed property and value from the remaining block text to parse\n if (blockRem.length > propAndValStr.length) {\n blockRem = blockRem.substr(propAndValStr.length);\n } else {\n blockRem = '';\n }\n }\n for (;;) {\n var nothingLeftToParse = remaining.match(/^\\s*$/);\n if (nothingLeftToParse) {\n break;\n }\n var selAndBlock = remaining.match(/^\\s*((?:.|\\s)+?)\\s*\\{((?:.|\\s)+?)\\}/);\n if (!selAndBlock) {\n warn('Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: ' + remaining);\n break;\n }\n selAndBlockStr = selAndBlock[0];\n\n // parse the selector\n var selectorStr = selAndBlock[1];\n if (selectorStr !== 'core') {\n var selector = new Selector(selectorStr);\n if (selector.invalid) {\n warn('Skipping parsing of block: Invalid selector found in string stylesheet: ' + selectorStr);\n\n // skip this selector and block\n removeSelAndBlockFromRemaining();\n continue;\n }\n }\n\n // parse the block of properties and values\n var blockStr = selAndBlock[2];\n var invalidBlock = false;\n blockRem = blockStr;\n var props = [];\n for (;;) {\n var _nothingLeftToParse = blockRem.match(/^\\s*$/);\n if (_nothingLeftToParse) {\n break;\n }\n var propAndVal = blockRem.match(/^\\s*(.+?)\\s*:\\s*(.+?)(?:\\s*;|\\s*$)/);\n if (!propAndVal) {\n warn('Skipping parsing of block: Invalid formatting of style property and value definitions found in:' + blockStr);\n invalidBlock = true;\n break;\n }\n propAndValStr = propAndVal[0];\n var propStr = propAndVal[1];\n var valStr = propAndVal[2];\n var prop = self.properties[propStr];\n if (!prop) {\n warn('Skipping property: Invalid property name in: ' + propAndValStr);\n\n // skip this property in the block\n removePropAndValFromRem();\n continue;\n }\n var parsedProp = style.parse(propStr, valStr);\n if (!parsedProp) {\n warn('Skipping property: Invalid property definition in: ' + propAndValStr);\n\n // skip this property in the block\n removePropAndValFromRem();\n continue;\n }\n props.push({\n name: propStr,\n val: valStr\n });\n removePropAndValFromRem();\n }\n if (invalidBlock) {\n removeSelAndBlockFromRemaining();\n break;\n }\n\n // put the parsed block in the style\n style.selector(selectorStr);\n for (var i = 0; i < props.length; i++) {\n var _prop = props[i];\n style.css(_prop.name, _prop.val);\n }\n removeSelAndBlockFromRemaining();\n }\n return style;\n};\nstyfn$3.fromString = function (string) {\n var style = this;\n style.resetToDefault();\n style.appendFromString(string);\n return style;\n};\n\nvar styfn$2 = {};\n(function () {\n var number$1 = number;\n var rgba = rgbaNoBackRefs;\n var hsla = hslaNoBackRefs;\n var hex3$1 = hex3;\n var hex6$1 = hex6;\n var data = function data(prefix) {\n return '^' + prefix + '\\\\s*\\\\(\\\\s*([\\\\w\\\\.]+)\\\\s*\\\\)$';\n };\n var mapData = function mapData(prefix) {\n var mapArg = number$1 + '|\\\\w+|' + rgba + '|' + hsla + '|' + hex3$1 + '|' + hex6$1;\n return '^' + prefix + '\\\\s*\\\\(([\\\\w\\\\.]+)\\\\s*\\\\,\\\\s*(' + number$1 + ')\\\\s*\\\\,\\\\s*(' + number$1 + ')\\\\s*,\\\\s*(' + mapArg + ')\\\\s*\\\\,\\\\s*(' + mapArg + ')\\\\)$';\n };\n var urlRegexes = ['^url\\\\s*\\\\(\\\\s*[\\'\"]?(.+?)[\\'\"]?\\\\s*\\\\)$', '^(none)$', '^(.+)$'];\n\n // each visual style property has a type and needs to be validated according to it\n styfn$2.types = {\n time: {\n number: true,\n min: 0,\n units: 's|ms',\n implicitUnits: 'ms'\n },\n percent: {\n number: true,\n min: 0,\n max: 100,\n units: '%',\n implicitUnits: '%'\n },\n percentages: {\n number: true,\n min: 0,\n max: 100,\n units: '%',\n implicitUnits: '%',\n multiple: true\n },\n zeroOneNumber: {\n number: true,\n min: 0,\n max: 1,\n unitless: true\n },\n zeroOneNumbers: {\n number: true,\n min: 0,\n max: 1,\n unitless: true,\n multiple: true\n },\n nOneOneNumber: {\n number: true,\n min: -1,\n max: 1,\n unitless: true\n },\n nonNegativeInt: {\n number: true,\n min: 0,\n integer: true,\n unitless: true\n },\n nonNegativeNumber: {\n number: true,\n min: 0,\n unitless: true\n },\n position: {\n enums: ['parent', 'origin']\n },\n nodeSize: {\n number: true,\n min: 0,\n enums: ['label']\n },\n number: {\n number: true,\n unitless: true\n },\n numbers: {\n number: true,\n unitless: true,\n multiple: true\n },\n positiveNumber: {\n number: true,\n unitless: true,\n min: 0,\n strictMin: true\n },\n size: {\n number: true,\n min: 0\n },\n bidirectionalSize: {\n number: true\n },\n // allows negative\n bidirectionalSizeMaybePercent: {\n number: true,\n allowPercent: true\n },\n // allows negative\n bidirectionalSizes: {\n number: true,\n multiple: true\n },\n // allows negative\n sizeMaybePercent: {\n number: true,\n min: 0,\n allowPercent: true\n },\n axisDirection: {\n enums: ['horizontal', 'leftward', 'rightward', 'vertical', 'upward', 'downward', 'auto']\n },\n axisDirectionExplicit: {\n enums: ['leftward', 'rightward', 'upward', 'downward']\n },\n axisDirectionPrimary: {\n enums: ['horizontal', 'vertical']\n },\n paddingRelativeTo: {\n enums: ['width', 'height', 'average', 'min', 'max']\n },\n bgWH: {\n number: true,\n min: 0,\n allowPercent: true,\n enums: ['auto'],\n multiple: true\n },\n bgPos: {\n number: true,\n allowPercent: true,\n multiple: true\n },\n bgRelativeTo: {\n enums: ['inner', 'include-padding'],\n multiple: true\n },\n bgRepeat: {\n enums: ['repeat', 'repeat-x', 'repeat-y', 'no-repeat'],\n multiple: true\n },\n bgFit: {\n enums: ['none', 'contain', 'cover'],\n multiple: true\n },\n bgCrossOrigin: {\n enums: ['anonymous', 'use-credentials', 'null'],\n multiple: true\n },\n bgClip: {\n enums: ['none', 'node'],\n multiple: true\n },\n bgContainment: {\n enums: ['inside', 'over'],\n multiple: true\n },\n boxSelection: {\n enums: ['contain', 'overlap', 'none']\n },\n color: {\n color: true\n },\n colors: {\n color: true,\n multiple: true\n },\n fill: {\n enums: ['solid', 'linear-gradient', 'radial-gradient']\n },\n bool: {\n enums: ['yes', 'no']\n },\n bools: {\n enums: ['yes', 'no'],\n multiple: true\n },\n lineStyle: {\n enums: ['solid', 'dotted', 'dashed']\n },\n lineCap: {\n enums: ['butt', 'round', 'square']\n },\n linePosition: {\n enums: ['center', 'inside', 'outside']\n },\n lineJoin: {\n enums: ['round', 'bevel', 'miter']\n },\n borderStyle: {\n enums: ['solid', 'dotted', 'dashed', 'double']\n },\n curveStyle: {\n enums: ['bezier', 'unbundled-bezier', 'haystack', 'segments', 'straight', 'straight-triangle', 'taxi', 'round-segments', 'round-taxi']\n },\n radiusType: {\n enums: ['arc-radius', 'influence-radius'],\n multiple: true\n },\n fontFamily: {\n regex: '^([\\\\w- \\\\\"]+(?:\\\\s*,\\\\s*[\\\\w- \\\\\"]+)*)$'\n },\n fontStyle: {\n enums: ['italic', 'normal', 'oblique']\n },\n fontWeight: {\n enums: ['normal', 'bold', 'bolder', 'lighter', '100', '200', '300', '400', '500', '600', '800', '900', 100, 200, 300, 400, 500, 600, 700, 800, 900]\n },\n textDecoration: {\n enums: ['none', 'underline', 'overline', 'line-through']\n },\n textTransform: {\n enums: ['none', 'uppercase', 'lowercase']\n },\n textWrap: {\n enums: ['none', 'wrap', 'ellipsis']\n },\n textOverflowWrap: {\n enums: ['whitespace', 'anywhere']\n },\n textBackgroundShape: {\n enums: ['rectangle', 'roundrectangle', 'round-rectangle', 'circle']\n },\n nodeShape: {\n enums: ['rectangle', 'roundrectangle', 'round-rectangle', 'cutrectangle', 'cut-rectangle', 'bottomroundrectangle', 'bottom-round-rectangle', 'barrel', 'ellipse', 'triangle', 'round-triangle', 'square', 'pentagon', 'round-pentagon', 'hexagon', 'round-hexagon', 'concavehexagon', 'concave-hexagon', 'heptagon', 'round-heptagon', 'octagon', 'round-octagon', 'tag', 'round-tag', 'star', 'diamond', 'round-diamond', 'vee', 'rhomboid', 'right-rhomboid', 'polygon']\n },\n overlayShape: {\n enums: ['roundrectangle', 'round-rectangle', 'ellipse']\n },\n cornerRadius: {\n number: true,\n min: 0,\n units: 'px|em',\n implicitUnits: 'px',\n enums: ['auto']\n },\n compoundIncludeLabels: {\n enums: ['include', 'exclude']\n },\n arrowShape: {\n enums: ['tee', 'triangle', 'triangle-tee', 'circle-triangle', 'triangle-cross', 'triangle-backcurve', 'vee', 'square', 'circle', 'diamond', 'chevron', 'none']\n },\n arrowFill: {\n enums: ['filled', 'hollow']\n },\n arrowWidth: {\n number: true,\n units: '%|px|em',\n implicitUnits: 'px',\n enums: ['match-line']\n },\n display: {\n enums: ['element', 'none']\n },\n visibility: {\n enums: ['hidden', 'visible']\n },\n zCompoundDepth: {\n enums: ['bottom', 'orphan', 'auto', 'top']\n },\n zIndexCompare: {\n enums: ['auto', 'manual']\n },\n valign: {\n enums: ['top', 'center', 'bottom']\n },\n halign: {\n enums: ['left', 'center', 'right']\n },\n justification: {\n enums: ['left', 'center', 'right', 'auto']\n },\n text: {\n string: true\n },\n data: {\n mapping: true,\n regex: data('data')\n },\n layoutData: {\n mapping: true,\n regex: data('layoutData')\n },\n scratch: {\n mapping: true,\n regex: data('scratch')\n },\n mapData: {\n mapping: true,\n regex: mapData('mapData')\n },\n mapLayoutData: {\n mapping: true,\n regex: mapData('mapLayoutData')\n },\n mapScratch: {\n mapping: true,\n regex: mapData('mapScratch')\n },\n fn: {\n mapping: true,\n fn: true\n },\n url: {\n regexes: urlRegexes,\n singleRegexMatchValue: true\n },\n urls: {\n regexes: urlRegexes,\n singleRegexMatchValue: true,\n multiple: true\n },\n propList: {\n propList: true\n },\n angle: {\n number: true,\n units: 'deg|rad',\n implicitUnits: 'rad'\n },\n textRotation: {\n number: true,\n units: 'deg|rad',\n implicitUnits: 'rad',\n enums: ['none', 'autorotate']\n },\n polygonPointList: {\n number: true,\n multiple: true,\n evenMultiple: true,\n min: -1,\n max: 1,\n unitless: true\n },\n edgeDistances: {\n enums: ['intersection', 'node-position', 'endpoints']\n },\n edgeEndpoint: {\n number: true,\n multiple: true,\n units: '%|px|em|deg|rad',\n implicitUnits: 'px',\n enums: ['inside-to-node', 'outside-to-node', 'outside-to-node-or-label', 'outside-to-line', 'outside-to-line-or-label'],\n singleEnum: true,\n validate: function validate(valArr, unitsArr) {\n switch (valArr.length) {\n case 2:\n // can be % or px only\n return unitsArr[0] !== 'deg' && unitsArr[0] !== 'rad' && unitsArr[1] !== 'deg' && unitsArr[1] !== 'rad';\n case 1:\n // can be enum, deg, or rad only\n return string(valArr[0]) || unitsArr[0] === 'deg' || unitsArr[0] === 'rad';\n default:\n return false;\n }\n }\n },\n easing: {\n regexes: ['^(spring)\\\\s*\\\\(\\\\s*(' + number$1 + ')\\\\s*,\\\\s*(' + number$1 + ')\\\\s*\\\\)$', '^(cubic-bezier)\\\\s*\\\\(\\\\s*(' + number$1 + ')\\\\s*,\\\\s*(' + number$1 + ')\\\\s*,\\\\s*(' + number$1 + ')\\\\s*,\\\\s*(' + number$1 + ')\\\\s*\\\\)$'],\n enums: ['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out', 'ease-in-sine', 'ease-out-sine', 'ease-in-out-sine', 'ease-in-quad', 'ease-out-quad', 'ease-in-out-quad', 'ease-in-cubic', 'ease-out-cubic', 'ease-in-out-cubic', 'ease-in-quart', 'ease-out-quart', 'ease-in-out-quart', 'ease-in-quint', 'ease-out-quint', 'ease-in-out-quint', 'ease-in-expo', 'ease-out-expo', 'ease-in-out-expo', 'ease-in-circ', 'ease-out-circ', 'ease-in-out-circ']\n },\n gradientDirection: {\n enums: ['to-bottom', 'to-top', 'to-left', 'to-right', 'to-bottom-right', 'to-bottom-left', 'to-top-right', 'to-top-left', 'to-right-bottom', 'to-left-bottom', 'to-right-top', 'to-left-top' // different order\n ]\n },\n boundsExpansion: {\n number: true,\n multiple: true,\n min: 0,\n validate: function validate(valArr) {\n var length = valArr.length;\n return length === 1 || length === 2 || length === 4;\n }\n }\n };\n var diff = {\n zeroNonZero: function zeroNonZero(val1, val2) {\n if ((val1 == null || val2 == null) && val1 !== val2) {\n return true; // null cases could represent any value\n }\n if (val1 == 0 && val2 != 0) {\n return true;\n } else if (val1 != 0 && val2 == 0) {\n return true;\n } else {\n return false;\n }\n },\n any: function any(val1, val2) {\n return val1 != val2;\n },\n emptyNonEmpty: function emptyNonEmpty(str1, str2) {\n var empty1 = emptyString(str1);\n var empty2 = emptyString(str2);\n return empty1 && !empty2 || !empty1 && empty2;\n }\n };\n\n // define visual style properties\n //\n // - n.b. adding a new group of props may require updates to updateStyleHints()\n // - adding new props to an existing group gets handled automatically\n\n var t = styfn$2.types;\n var mainLabel = [{\n name: 'label',\n type: t.text,\n triggersBounds: diff.any,\n triggersZOrder: diff.emptyNonEmpty\n }, {\n name: 'text-rotation',\n type: t.textRotation,\n triggersBounds: diff.any\n }, {\n name: 'text-margin-x',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'text-margin-y',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }];\n var sourceLabel = [{\n name: 'source-label',\n type: t.text,\n triggersBounds: diff.any\n }, {\n name: 'source-text-rotation',\n type: t.textRotation,\n triggersBounds: diff.any\n }, {\n name: 'source-text-margin-x',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'source-text-margin-y',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'source-text-offset',\n type: t.size,\n triggersBounds: diff.any\n }];\n var targetLabel = [{\n name: 'target-label',\n type: t.text,\n triggersBounds: diff.any\n }, {\n name: 'target-text-rotation',\n type: t.textRotation,\n triggersBounds: diff.any\n }, {\n name: 'target-text-margin-x',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'target-text-margin-y',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'target-text-offset',\n type: t.size,\n triggersBounds: diff.any\n }];\n var labelDimensions = [{\n name: 'font-family',\n type: t.fontFamily,\n triggersBounds: diff.any\n }, {\n name: 'font-style',\n type: t.fontStyle,\n triggersBounds: diff.any\n }, {\n name: 'font-weight',\n type: t.fontWeight,\n triggersBounds: diff.any\n }, {\n name: 'font-size',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'text-transform',\n type: t.textTransform,\n triggersBounds: diff.any\n }, {\n name: 'text-wrap',\n type: t.textWrap,\n triggersBounds: diff.any\n }, {\n name: 'text-overflow-wrap',\n type: t.textOverflowWrap,\n triggersBounds: diff.any\n }, {\n name: 'text-max-width',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'text-outline-width',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'line-height',\n type: t.positiveNumber,\n triggersBounds: diff.any\n }];\n var commonLabel = [{\n name: 'text-valign',\n type: t.valign,\n triggersBounds: diff.any\n }, {\n name: 'text-halign',\n type: t.halign,\n triggersBounds: diff.any\n }, {\n name: 'color',\n type: t.color\n }, {\n name: 'text-outline-color',\n type: t.color\n }, {\n name: 'text-outline-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'text-background-color',\n type: t.color\n }, {\n name: 'text-background-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'text-background-padding',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'text-border-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'text-border-color',\n type: t.color\n }, {\n name: 'text-border-width',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'text-border-style',\n type: t.borderStyle,\n triggersBounds: diff.any\n }, {\n name: 'text-background-shape',\n type: t.textBackgroundShape,\n triggersBounds: diff.any\n }, {\n name: 'text-justification',\n type: t.justification\n }, {\n name: 'box-select-labels',\n type: t.bool,\n triggersBounds: diff.any\n }];\n var behavior = [{\n name: 'events',\n type: t.bool,\n triggersZOrder: diff.any\n }, {\n name: 'text-events',\n type: t.bool,\n triggersZOrder: diff.any\n }, {\n name: 'box-selection',\n type: t.boxSelection,\n triggersZOrder: diff.any\n }];\n var visibility = [{\n name: 'display',\n type: t.display,\n triggersZOrder: diff.any,\n triggersBounds: diff.any,\n triggersBoundsOfConnectedEdges: diff.any,\n triggersBoundsOfParallelEdges: function triggersBoundsOfParallelEdges(fromValue, toValue, ele) {\n if (fromValue === toValue) {\n return false;\n }\n\n // only if edge is bundled bezier (so as not to affect performance of other edges)\n return ele.pstyle('curve-style').value === 'bezier';\n }\n }, {\n name: 'visibility',\n type: t.visibility,\n triggersZOrder: diff.any\n }, {\n name: 'opacity',\n type: t.zeroOneNumber,\n triggersZOrder: diff.zeroNonZero\n }, {\n name: 'text-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'min-zoomed-font-size',\n type: t.size\n }, {\n name: 'z-compound-depth',\n type: t.zCompoundDepth,\n triggersZOrder: diff.any\n }, {\n name: 'z-index-compare',\n type: t.zIndexCompare,\n triggersZOrder: diff.any\n }, {\n name: 'z-index',\n type: t.number,\n triggersZOrder: diff.any\n }];\n var overlay = [{\n name: 'overlay-padding',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'overlay-color',\n type: t.color\n }, {\n name: 'overlay-opacity',\n type: t.zeroOneNumber,\n triggersBounds: diff.zeroNonZero\n }, {\n name: 'overlay-shape',\n type: t.overlayShape,\n triggersBounds: diff.any\n }, {\n name: 'overlay-corner-radius',\n type: t.cornerRadius\n }];\n var underlay = [{\n name: 'underlay-padding',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'underlay-color',\n type: t.color\n }, {\n name: 'underlay-opacity',\n type: t.zeroOneNumber,\n triggersBounds: diff.zeroNonZero\n }, {\n name: 'underlay-shape',\n type: t.overlayShape,\n triggersBounds: diff.any\n }, {\n name: 'underlay-corner-radius',\n type: t.cornerRadius\n }];\n var transition = [{\n name: 'transition-property',\n type: t.propList\n }, {\n name: 'transition-duration',\n type: t.time\n }, {\n name: 'transition-delay',\n type: t.time\n }, {\n name: 'transition-timing-function',\n type: t.easing\n }];\n var nodeSizeHashOverride = function nodeSizeHashOverride(ele, parsedProp) {\n if (parsedProp.value === 'label') {\n return -ele.poolIndex(); // no hash key hits is using label size (hitrate for perf probably low anyway)\n } else {\n return parsedProp.pfValue;\n }\n };\n var nodeBody = [{\n name: 'height',\n type: t.nodeSize,\n triggersBounds: diff.any,\n hashOverride: nodeSizeHashOverride\n }, {\n name: 'width',\n type: t.nodeSize,\n triggersBounds: diff.any,\n hashOverride: nodeSizeHashOverride\n }, {\n name: 'shape',\n type: t.nodeShape,\n triggersBounds: diff.any\n }, {\n name: 'shape-polygon-points',\n type: t.polygonPointList,\n triggersBounds: diff.any\n }, {\n name: 'corner-radius',\n type: t.cornerRadius\n }, {\n name: 'background-color',\n type: t.color\n }, {\n name: 'background-fill',\n type: t.fill\n }, {\n name: 'background-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'background-blacken',\n type: t.nOneOneNumber\n }, {\n name: 'background-gradient-stop-colors',\n type: t.colors\n }, {\n name: 'background-gradient-stop-positions',\n type: t.percentages\n }, {\n name: 'background-gradient-direction',\n type: t.gradientDirection\n }, {\n name: 'padding',\n type: t.sizeMaybePercent,\n triggersBounds: diff.any\n }, {\n name: 'padding-relative-to',\n type: t.paddingRelativeTo,\n triggersBounds: diff.any\n }, {\n name: 'bounds-expansion',\n type: t.boundsExpansion,\n triggersBounds: diff.any\n }];\n var nodeBorder = [{\n name: 'border-color',\n type: t.color\n }, {\n name: 'border-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'border-width',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'border-style',\n type: t.borderStyle\n }, {\n name: 'border-cap',\n type: t.lineCap\n }, {\n name: 'border-join',\n type: t.lineJoin\n }, {\n name: 'border-dash-pattern',\n type: t.numbers\n }, {\n name: 'border-dash-offset',\n type: t.number\n }, {\n name: 'border-position',\n type: t.linePosition\n }];\n var nodeOutline = [{\n name: 'outline-color',\n type: t.color\n }, {\n name: 'outline-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'outline-width',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'outline-style',\n type: t.borderStyle\n }, {\n name: 'outline-offset',\n type: t.size,\n triggersBounds: diff.any\n }];\n var backgroundImage = [{\n name: 'background-image',\n type: t.urls\n }, {\n name: 'background-image-crossorigin',\n type: t.bgCrossOrigin\n }, {\n name: 'background-image-opacity',\n type: t.zeroOneNumbers\n }, {\n name: 'background-image-containment',\n type: t.bgContainment\n }, {\n name: 'background-image-smoothing',\n type: t.bools\n }, {\n name: 'background-position-x',\n type: t.bgPos\n }, {\n name: 'background-position-y',\n type: t.bgPos\n }, {\n name: 'background-width-relative-to',\n type: t.bgRelativeTo\n }, {\n name: 'background-height-relative-to',\n type: t.bgRelativeTo\n }, {\n name: 'background-repeat',\n type: t.bgRepeat\n }, {\n name: 'background-fit',\n type: t.bgFit\n }, {\n name: 'background-clip',\n type: t.bgClip\n }, {\n name: 'background-width',\n type: t.bgWH\n }, {\n name: 'background-height',\n type: t.bgWH\n }, {\n name: 'background-offset-x',\n type: t.bgPos\n }, {\n name: 'background-offset-y',\n type: t.bgPos\n }];\n var compound = [{\n name: 'position',\n type: t.position,\n triggersBounds: diff.any\n }, {\n name: 'compound-sizing-wrt-labels',\n type: t.compoundIncludeLabels,\n triggersBounds: diff.any\n }, {\n name: 'min-width',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'min-width-bias-left',\n type: t.sizeMaybePercent,\n triggersBounds: diff.any\n }, {\n name: 'min-width-bias-right',\n type: t.sizeMaybePercent,\n triggersBounds: diff.any\n }, {\n name: 'min-height',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'min-height-bias-top',\n type: t.sizeMaybePercent,\n triggersBounds: diff.any\n }, {\n name: 'min-height-bias-bottom',\n type: t.sizeMaybePercent,\n triggersBounds: diff.any\n }];\n var edgeLine = [{\n name: 'line-style',\n type: t.lineStyle\n }, {\n name: 'line-color',\n type: t.color\n }, {\n name: 'line-fill',\n type: t.fill\n }, {\n name: 'line-cap',\n type: t.lineCap\n }, {\n name: 'line-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'line-dash-pattern',\n type: t.numbers\n }, {\n name: 'line-dash-offset',\n type: t.number\n }, {\n name: 'line-outline-width',\n type: t.size\n }, {\n name: 'line-outline-color',\n type: t.color\n }, {\n name: 'line-gradient-stop-colors',\n type: t.colors\n }, {\n name: 'line-gradient-stop-positions',\n type: t.percentages\n }, {\n name: 'curve-style',\n type: t.curveStyle,\n triggersBounds: diff.any,\n triggersBoundsOfParallelEdges: function triggersBoundsOfParallelEdges(fromValue, toValue) {\n if (fromValue === toValue) {\n return false;\n } // must have diff\n\n return fromValue === 'bezier' ||\n // remove from bundle\n toValue === 'bezier'; // add to bundle\n }\n }, {\n name: 'haystack-radius',\n type: t.zeroOneNumber,\n triggersBounds: diff.any\n }, {\n name: 'source-endpoint',\n type: t.edgeEndpoint,\n triggersBounds: diff.any\n }, {\n name: 'target-endpoint',\n type: t.edgeEndpoint,\n triggersBounds: diff.any\n }, {\n name: 'control-point-step-size',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'control-point-distances',\n type: t.bidirectionalSizes,\n triggersBounds: diff.any\n }, {\n name: 'control-point-weights',\n type: t.numbers,\n triggersBounds: diff.any\n }, {\n name: 'segment-distances',\n type: t.bidirectionalSizes,\n triggersBounds: diff.any\n }, {\n name: 'segment-weights',\n type: t.numbers,\n triggersBounds: diff.any\n }, {\n name: 'segment-radii',\n type: t.numbers,\n triggersBounds: diff.any\n }, {\n name: 'radius-type',\n type: t.radiusType,\n triggersBounds: diff.any\n }, {\n name: 'taxi-turn',\n type: t.bidirectionalSizeMaybePercent,\n triggersBounds: diff.any\n }, {\n name: 'taxi-turn-min-distance',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'taxi-direction',\n type: t.axisDirection,\n triggersBounds: diff.any\n }, {\n name: 'taxi-radius',\n type: t.number,\n triggersBounds: diff.any\n }, {\n name: 'edge-distances',\n type: t.edgeDistances,\n triggersBounds: diff.any\n }, {\n name: 'arrow-scale',\n type: t.positiveNumber,\n triggersBounds: diff.any\n }, {\n name: 'loop-direction',\n type: t.angle,\n triggersBounds: diff.any\n }, {\n name: 'loop-sweep',\n type: t.angle,\n triggersBounds: diff.any\n }, {\n name: 'source-distance-from-node',\n type: t.size,\n triggersBounds: diff.any\n }, {\n name: 'target-distance-from-node',\n type: t.size,\n triggersBounds: diff.any\n }];\n var ghost = [{\n name: 'ghost',\n type: t.bool,\n triggersBounds: diff.any\n }, {\n name: 'ghost-offset-x',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'ghost-offset-y',\n type: t.bidirectionalSize,\n triggersBounds: diff.any\n }, {\n name: 'ghost-opacity',\n type: t.zeroOneNumber\n }];\n var core = [{\n name: 'selection-box-color',\n type: t.color\n }, {\n name: 'selection-box-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'selection-box-border-color',\n type: t.color\n }, {\n name: 'selection-box-border-width',\n type: t.size\n }, {\n name: 'active-bg-color',\n type: t.color\n }, {\n name: 'active-bg-opacity',\n type: t.zeroOneNumber\n }, {\n name: 'active-bg-size',\n type: t.size\n }, {\n name: 'outside-texture-bg-color',\n type: t.color\n }, {\n name: 'outside-texture-bg-opacity',\n type: t.zeroOneNumber\n }];\n\n // pie backgrounds for nodes\n var pie = [];\n styfn$2.pieBackgroundN = 16; // because the pie properties are numbered, give access to a constant N (for renderer use)\n pie.push({\n name: 'pie-size',\n type: t.sizeMaybePercent\n });\n pie.push({\n name: 'pie-hole',\n type: t.sizeMaybePercent\n });\n pie.push({\n name: 'pie-start-angle',\n type: t.angle\n });\n for (var i = 1; i <= styfn$2.pieBackgroundN; i++) {\n pie.push({\n name: 'pie-' + i + '-background-color',\n type: t.color\n });\n pie.push({\n name: 'pie-' + i + '-background-size',\n type: t.percent\n });\n pie.push({\n name: 'pie-' + i + '-background-opacity',\n type: t.zeroOneNumber\n });\n }\n\n // stripe backgrounds for nodes\n var stripe = [];\n styfn$2.stripeBackgroundN = 16; // because the stripe properties are numbered, give access to a constant N (for renderer use)\n stripe.push({\n name: 'stripe-size',\n type: t.sizeMaybePercent\n });\n stripe.push({\n name: 'stripe-direction',\n type: t.axisDirectionPrimary\n });\n for (var _i = 1; _i <= styfn$2.stripeBackgroundN; _i++) {\n stripe.push({\n name: 'stripe-' + _i + '-background-color',\n type: t.color\n });\n stripe.push({\n name: 'stripe-' + _i + '-background-size',\n type: t.percent\n });\n stripe.push({\n name: 'stripe-' + _i + '-background-opacity',\n type: t.zeroOneNumber\n });\n }\n\n // edge arrows\n var edgeArrow = [];\n var arrowPrefixes = styfn$2.arrowPrefixes = ['source', 'mid-source', 'target', 'mid-target'];\n [{\n name: 'arrow-shape',\n type: t.arrowShape,\n triggersBounds: diff.any\n }, {\n name: 'arrow-color',\n type: t.color\n }, {\n name: 'arrow-fill',\n type: t.arrowFill\n }, {\n name: 'arrow-width',\n type: t.arrowWidth\n }].forEach(function (prop) {\n arrowPrefixes.forEach(function (prefix) {\n var name = prefix + '-' + prop.name;\n var type = prop.type,\n triggersBounds = prop.triggersBounds;\n edgeArrow.push({\n name: name,\n type: type,\n triggersBounds: triggersBounds\n });\n });\n }, {});\n var props = styfn$2.properties = [].concat(behavior, transition, visibility, overlay, underlay, ghost, commonLabel, labelDimensions, mainLabel, sourceLabel, targetLabel, nodeBody, nodeBorder, nodeOutline, backgroundImage, pie, stripe, compound, edgeLine, edgeArrow, core);\n var propGroups = styfn$2.propertyGroups = {\n // common to all eles\n behavior: behavior,\n transition: transition,\n visibility: visibility,\n overlay: overlay,\n underlay: underlay,\n ghost: ghost,\n // labels\n commonLabel: commonLabel,\n labelDimensions: labelDimensions,\n mainLabel: mainLabel,\n sourceLabel: sourceLabel,\n targetLabel: targetLabel,\n // node props\n nodeBody: nodeBody,\n nodeBorder: nodeBorder,\n nodeOutline: nodeOutline,\n backgroundImage: backgroundImage,\n pie: pie,\n stripe: stripe,\n compound: compound,\n // edge props\n edgeLine: edgeLine,\n edgeArrow: edgeArrow,\n core: core\n };\n var propGroupNames = styfn$2.propertyGroupNames = {};\n var propGroupKeys = styfn$2.propertyGroupKeys = Object.keys(propGroups);\n propGroupKeys.forEach(function (key) {\n propGroupNames[key] = propGroups[key].map(function (prop) {\n return prop.name;\n });\n propGroups[key].forEach(function (prop) {\n return prop.groupKey = key;\n });\n });\n\n // define aliases\n var aliases = styfn$2.aliases = [{\n name: 'content',\n pointsTo: 'label'\n }, {\n name: 'control-point-distance',\n pointsTo: 'control-point-distances'\n }, {\n name: 'control-point-weight',\n pointsTo: 'control-point-weights'\n }, {\n name: 'segment-distance',\n pointsTo: 'segment-distances'\n }, {\n name: 'segment-weight',\n pointsTo: 'segment-weights'\n }, {\n name: 'segment-radius',\n pointsTo: 'segment-radii'\n }, {\n name: 'edge-text-rotation',\n pointsTo: 'text-rotation'\n }, {\n name: 'padding-left',\n pointsTo: 'padding'\n }, {\n name: 'padding-right',\n pointsTo: 'padding'\n }, {\n name: 'padding-top',\n pointsTo: 'padding'\n }, {\n name: 'padding-bottom',\n pointsTo: 'padding'\n }];\n\n // list of property names\n styfn$2.propertyNames = props.map(function (p) {\n return p.name;\n });\n\n // allow access of properties by name ( e.g. style.properties.height )\n for (var _i2 = 0; _i2 < props.length; _i2++) {\n var prop = props[_i2];\n props[prop.name] = prop; // allow lookup by name\n }\n\n // map aliases\n for (var _i3 = 0; _i3 < aliases.length; _i3++) {\n var alias = aliases[_i3];\n var pointsToProp = props[alias.pointsTo];\n var aliasProp = {\n name: alias.name,\n alias: true,\n pointsTo: pointsToProp\n };\n\n // add alias prop for parsing\n props.push(aliasProp);\n props[alias.name] = aliasProp; // allow lookup by name\n }\n})();\nstyfn$2.getDefaultProperty = function (name) {\n return this.getDefaultProperties()[name];\n};\nstyfn$2.getDefaultProperties = function () {\n var _p = this._private;\n if (_p.defaultProperties != null) {\n return _p.defaultProperties;\n }\n var rawProps = extend({\n // core props\n 'selection-box-color': '#ddd',\n 'selection-box-opacity': 0.65,\n 'selection-box-border-color': '#aaa',\n 'selection-box-border-width': 1,\n 'active-bg-color': 'black',\n 'active-bg-opacity': 0.15,\n 'active-bg-size': 30,\n 'outside-texture-bg-color': '#000',\n 'outside-texture-bg-opacity': 0.125,\n // common node/edge props\n 'events': 'yes',\n 'text-events': 'no',\n 'text-valign': 'top',\n 'text-halign': 'center',\n 'text-justification': 'auto',\n 'line-height': 1,\n 'color': '#000',\n 'box-selection': 'contain',\n 'text-outline-color': '#000',\n 'text-outline-width': 0,\n 'text-outline-opacity': 1,\n 'text-opacity': 1,\n 'text-decoration': 'none',\n 'text-transform': 'none',\n 'text-wrap': 'none',\n 'text-overflow-wrap': 'whitespace',\n 'text-max-width': 9999,\n 'text-background-color': '#000',\n 'text-background-opacity': 0,\n 'text-background-shape': 'rectangle',\n 'text-background-padding': 0,\n 'text-border-opacity': 0,\n 'text-border-width': 0,\n 'text-border-style': 'solid',\n 'text-border-color': '#000',\n 'font-family': 'Helvetica Neue, Helvetica, sans-serif',\n 'font-style': 'normal',\n 'font-weight': 'normal',\n 'font-size': 16,\n 'min-zoomed-font-size': 0,\n 'text-rotation': 'none',\n 'source-text-rotation': 'none',\n 'target-text-rotation': 'none',\n 'visibility': 'visible',\n 'display': 'element',\n 'opacity': 1,\n 'z-compound-depth': 'auto',\n 'z-index-compare': 'auto',\n 'z-index': 0,\n 'label': '',\n 'text-margin-x': 0,\n 'text-margin-y': 0,\n 'source-label': '',\n 'source-text-offset': 0,\n 'source-text-margin-x': 0,\n 'source-text-margin-y': 0,\n 'target-label': '',\n 'target-text-offset': 0,\n 'target-text-margin-x': 0,\n 'target-text-margin-y': 0,\n 'overlay-opacity': 0,\n 'overlay-color': '#000',\n 'overlay-padding': 10,\n 'overlay-shape': 'round-rectangle',\n 'overlay-corner-radius': 'auto',\n 'underlay-opacity': 0,\n 'underlay-color': '#000',\n 'underlay-padding': 10,\n 'underlay-shape': 'round-rectangle',\n 'underlay-corner-radius': 'auto',\n 'transition-property': 'none',\n 'transition-duration': 0,\n 'transition-delay': 0,\n 'transition-timing-function': 'linear',\n 'box-select-labels': 'no',\n // node props\n 'background-blacken': 0,\n 'background-color': '#999',\n 'background-fill': 'solid',\n 'background-opacity': 1,\n 'background-image': 'none',\n 'background-image-crossorigin': 'anonymous',\n 'background-image-opacity': 1,\n 'background-image-containment': 'inside',\n 'background-image-smoothing': 'yes',\n 'background-position-x': '50%',\n 'background-position-y': '50%',\n 'background-offset-x': 0,\n 'background-offset-y': 0,\n 'background-width-relative-to': 'include-padding',\n 'background-height-relative-to': 'include-padding',\n 'background-repeat': 'no-repeat',\n 'background-fit': 'none',\n 'background-clip': 'node',\n 'background-width': 'auto',\n 'background-height': 'auto',\n 'border-color': '#000',\n 'border-opacity': 1,\n 'border-width': 0,\n 'border-style': 'solid',\n 'border-dash-pattern': [4, 2],\n 'border-dash-offset': 0,\n 'border-cap': 'butt',\n 'border-join': 'miter',\n 'border-position': 'center',\n 'outline-color': '#999',\n 'outline-opacity': 1,\n 'outline-width': 0,\n 'outline-offset': 0,\n 'outline-style': 'solid',\n 'height': 30,\n 'width': 30,\n 'shape': 'ellipse',\n 'shape-polygon-points': '-1, -1, 1, -1, 1, 1, -1, 1',\n 'corner-radius': 'auto',\n 'bounds-expansion': 0,\n // node gradient\n 'background-gradient-direction': 'to-bottom',\n 'background-gradient-stop-colors': '#999',\n 'background-gradient-stop-positions': '0%',\n // ghost props\n 'ghost': 'no',\n 'ghost-offset-y': 0,\n 'ghost-offset-x': 0,\n 'ghost-opacity': 0,\n // compound props\n 'padding': 0,\n 'padding-relative-to': 'width',\n 'position': 'origin',\n 'compound-sizing-wrt-labels': 'include',\n 'min-width': 0,\n 'min-width-bias-left': 0,\n 'min-width-bias-right': 0,\n 'min-height': 0,\n 'min-height-bias-top': 0,\n 'min-height-bias-bottom': 0\n }, {\n // node pie bg\n 'pie-size': '100%',\n 'pie-hole': 0,\n 'pie-start-angle': '0deg'\n }, [{\n name: 'pie-{{i}}-background-color',\n value: 'black'\n }, {\n name: 'pie-{{i}}-background-size',\n value: '0%'\n }, {\n name: 'pie-{{i}}-background-opacity',\n value: 1\n }].reduce(function (css, prop) {\n for (var i = 1; i <= styfn$2.pieBackgroundN; i++) {\n var name = prop.name.replace('{{i}}', i);\n var val = prop.value;\n css[name] = val;\n }\n return css;\n }, {}), {\n // node stripes bg\n 'stripe-size': '100%',\n 'stripe-direction': 'horizontal'\n }, [{\n name: 'stripe-{{i}}-background-color',\n value: 'black'\n }, {\n name: 'stripe-{{i}}-background-size',\n value: '0%'\n }, {\n name: 'stripe-{{i}}-background-opacity',\n value: 1\n }].reduce(function (css, prop) {\n for (var i = 1; i <= styfn$2.stripeBackgroundN; i++) {\n var name = prop.name.replace('{{i}}', i);\n var val = prop.value;\n css[name] = val;\n }\n return css;\n }, {}), {\n // edge props\n 'line-style': 'solid',\n 'line-color': '#999',\n 'line-fill': 'solid',\n 'line-cap': 'butt',\n 'line-opacity': 1,\n 'line-outline-width': 0,\n 'line-outline-color': '#000',\n 'line-gradient-stop-colors': '#999',\n 'line-gradient-stop-positions': '0%',\n 'control-point-step-size': 40,\n 'control-point-weights': 0.5,\n 'segment-weights': 0.5,\n 'segment-distances': 20,\n 'segment-radii': 15,\n 'radius-type': 'arc-radius',\n 'taxi-turn': '50%',\n 'taxi-radius': 15,\n 'taxi-turn-min-distance': 10,\n 'taxi-direction': 'auto',\n 'edge-distances': 'intersection',\n 'curve-style': 'haystack',\n 'haystack-radius': 0,\n 'arrow-scale': 1,\n 'loop-direction': '-45deg',\n 'loop-sweep': '-90deg',\n 'source-distance-from-node': 0,\n 'target-distance-from-node': 0,\n 'source-endpoint': 'outside-to-node',\n 'target-endpoint': 'outside-to-node',\n 'line-dash-pattern': [6, 3],\n 'line-dash-offset': 0\n }, [{\n name: 'arrow-shape',\n value: 'none'\n }, {\n name: 'arrow-color',\n value: '#999'\n }, {\n name: 'arrow-fill',\n value: 'filled'\n }, {\n name: 'arrow-width',\n value: 1\n }].reduce(function (css, prop) {\n styfn$2.arrowPrefixes.forEach(function (prefix) {\n var name = prefix + '-' + prop.name;\n var val = prop.value;\n css[name] = val;\n });\n return css;\n }, {}));\n var parsedProps = {};\n for (var i = 0; i < this.properties.length; i++) {\n var prop = this.properties[i];\n if (prop.pointsTo) {\n continue;\n }\n var name = prop.name;\n var val = rawProps[name];\n var parsedProp = this.parse(name, val);\n parsedProps[name] = parsedProp;\n }\n _p.defaultProperties = parsedProps;\n return _p.defaultProperties;\n};\nstyfn$2.addDefaultStylesheet = function () {\n this.selector(':parent').css({\n 'shape': 'rectangle',\n 'padding': 10,\n 'background-color': '#eee',\n 'border-color': '#ccc',\n 'border-width': 1\n }).selector('edge').css({\n 'width': 3\n }).selector(':loop').css({\n 'curve-style': 'bezier'\n }).selector('edge:compound').css({\n 'curve-style': 'bezier',\n 'source-endpoint': 'outside-to-line',\n 'target-endpoint': 'outside-to-line'\n }).selector(':selected').css({\n 'background-color': '#0169D9',\n 'line-color': '#0169D9',\n 'source-arrow-color': '#0169D9',\n 'target-arrow-color': '#0169D9',\n 'mid-source-arrow-color': '#0169D9',\n 'mid-target-arrow-color': '#0169D9'\n }).selector(':parent:selected').css({\n 'background-color': '#CCE1F9',\n 'border-color': '#aec8e5'\n }).selector(':active').css({\n 'overlay-color': 'black',\n 'overlay-padding': 10,\n 'overlay-opacity': 0.25\n });\n this.defaultLength = this.length;\n};\n\nvar styfn$1 = {};\n\n// a caching layer for property parsing\nstyfn$1.parse = function (name, value, propIsBypass, propIsFlat) {\n var self = this;\n\n // function values can't be cached in all cases, and there isn't much benefit of caching them anyway\n if (fn$6(value)) {\n return self.parseImplWarn(name, value, propIsBypass, propIsFlat);\n }\n var flatKey = propIsFlat === 'mapping' || propIsFlat === true || propIsFlat === false || propIsFlat == null ? 'dontcare' : propIsFlat;\n var bypassKey = propIsBypass ? 't' : 'f';\n var valueKey = '' + value;\n var argHash = hashStrings(name, valueKey, bypassKey, flatKey);\n var propCache = self.propCache = self.propCache || [];\n var ret;\n if (!(ret = propCache[argHash])) {\n ret = propCache[argHash] = self.parseImplWarn(name, value, propIsBypass, propIsFlat);\n }\n\n // - bypasses can't be shared b/c the value can be changed by animations or otherwise overridden\n // - mappings can't be shared b/c mappings are per-element\n if (propIsBypass || propIsFlat === 'mapping') {\n // need a copy since props are mutated later in their lifecycles\n ret = copy(ret);\n if (ret) {\n ret.value = copy(ret.value); // because it could be an array, e.g. colour\n }\n }\n return ret;\n};\nstyfn$1.parseImplWarn = function (name, value, propIsBypass, propIsFlat) {\n var prop = this.parseImpl(name, value, propIsBypass, propIsFlat);\n if (!prop && value != null) {\n warn(\"The style property `\".concat(name, \": \").concat(value, \"` is invalid\"));\n }\n if (prop && (prop.name === 'width' || prop.name === 'height') && value === 'label') {\n warn('The style value of `label` is deprecated for `' + prop.name + '`');\n }\n return prop;\n};\n\n// parse a property; return null on invalid; return parsed property otherwise\n// fields :\n// - name : the name of the property\n// - value : the parsed, native-typed value of the property\n// - strValue : a string value that represents the property value in valid css\n// - bypass : true iff the property is a bypass property\nstyfn$1.parseImpl = function (name, value, propIsBypass, propIsFlat) {\n var self = this;\n name = camel2dash(name); // make sure the property name is in dash form (e.g. 'property-name' not 'propertyName')\n\n var property = self.properties[name];\n var passedValue = value;\n var types = self.types;\n if (!property) {\n return null;\n } // return null on property of unknown name\n if (value === undefined) {\n return null;\n } // can't assign undefined\n\n // the property may be an alias\n if (property.alias) {\n property = property.pointsTo;\n name = property.name;\n }\n var valueIsString = string(value);\n if (valueIsString) {\n // trim the value to make parsing easier\n value = value.trim();\n }\n var type = property.type;\n if (!type) {\n return null;\n } // no type, no luck\n\n // check if bypass is null or empty string (i.e. indication to delete bypass property)\n if (propIsBypass && (value === '' || value === null)) {\n return {\n name: name,\n value: value,\n bypass: true,\n deleteBypass: true\n };\n }\n\n // check if value is a function used as a mapper\n if (fn$6(value)) {\n return {\n name: name,\n value: value,\n strValue: 'fn',\n mapped: types.fn,\n bypass: propIsBypass\n };\n }\n\n // check if value is mapped\n var data, mapData;\n if (!valueIsString || propIsFlat || value.length < 7 || value[1] !== 'a') ; else if (value.length >= 7 && value[0] === 'd' && (data = new RegExp(types.data.regex).exec(value))) {\n if (propIsBypass) {\n return false;\n } // mappers not allowed in bypass\n\n var mapped = types.data;\n return {\n name: name,\n value: data,\n strValue: '' + value,\n mapped: mapped,\n field: data[1],\n bypass: propIsBypass\n };\n } else if (value.length >= 10 && value[0] === 'm' && (mapData = new RegExp(types.mapData.regex).exec(value))) {\n if (propIsBypass) {\n return false;\n } // mappers not allowed in bypass\n if (type.multiple) {\n return false;\n } // impossible to map to num\n\n var _mapped = types.mapData;\n\n // we can map only if the type is a colour or a number\n if (!(type.color || type.number)) {\n return false;\n }\n var valueMin = this.parse(name, mapData[4]); // parse to validate\n if (!valueMin || valueMin.mapped) {\n return false;\n } // can't be invalid or mapped\n\n var valueMax = this.parse(name, mapData[5]); // parse to validate\n if (!valueMax || valueMax.mapped) {\n return false;\n } // can't be invalid or mapped\n\n // check if valueMin and valueMax are the same\n if (valueMin.pfValue === valueMax.pfValue || valueMin.strValue === valueMax.strValue) {\n warn('`' + name + ': ' + value + '` is not a valid mapper because the output range is zero; converting to `' + name + ': ' + valueMin.strValue + '`');\n return this.parse(name, valueMin.strValue); // can't make much of a mapper without a range\n } else if (type.color) {\n var c1 = valueMin.value;\n var c2 = valueMax.value;\n var same = c1[0] === c2[0] // red\n && c1[1] === c2[1] // green\n && c1[2] === c2[2] // blue\n && (\n // optional alpha\n c1[3] === c2[3] // same alpha outright\n || (c1[3] == null || c1[3] === 1 // full opacity for colour 1?\n ) && (c2[3] == null || c2[3] === 1) // full opacity for colour 2?\n );\n if (same) {\n return false;\n } // can't make a mapper without a range\n }\n return {\n name: name,\n value: mapData,\n strValue: '' + value,\n mapped: _mapped,\n field: mapData[1],\n fieldMin: parseFloat(mapData[2]),\n // min & max are numeric\n fieldMax: parseFloat(mapData[3]),\n valueMin: valueMin.value,\n valueMax: valueMax.value,\n bypass: propIsBypass\n };\n }\n if (type.multiple && propIsFlat !== 'multiple') {\n var vals;\n if (valueIsString) {\n vals = value.split(/\\s+/);\n } else if (array(value)) {\n vals = value;\n } else {\n vals = [value];\n }\n if (type.evenMultiple && vals.length % 2 !== 0) {\n return null;\n }\n var valArr = [];\n var unitsArr = [];\n var pfValArr = [];\n var strVal = '';\n var hasEnum = false;\n for (var i = 0; i < vals.length; i++) {\n var p = self.parse(name, vals[i], propIsBypass, 'multiple');\n hasEnum = hasEnum || string(p.value);\n valArr.push(p.value);\n pfValArr.push(p.pfValue != null ? p.pfValue : p.value);\n unitsArr.push(p.units);\n strVal += (i > 0 ? ' ' : '') + p.strValue;\n }\n if (type.validate && !type.validate(valArr, unitsArr)) {\n return null;\n }\n if (type.singleEnum && hasEnum) {\n if (valArr.length === 1 && string(valArr[0])) {\n return {\n name: name,\n value: valArr[0],\n strValue: valArr[0],\n bypass: propIsBypass\n };\n } else {\n return null;\n }\n }\n return {\n name: name,\n value: valArr,\n pfValue: pfValArr,\n strValue: strVal,\n bypass: propIsBypass,\n units: unitsArr\n };\n }\n\n // several types also allow enums\n var checkEnums = function checkEnums() {\n for (var _i = 0; _i < type.enums.length; _i++) {\n var en = type.enums[_i];\n if (en === value) {\n return {\n name: name,\n value: value,\n strValue: '' + value,\n bypass: propIsBypass\n };\n }\n }\n return null;\n };\n\n // check the type and return the appropriate object\n if (type.number) {\n var units;\n var implicitUnits = 'px'; // not set => px\n\n if (type.units) {\n // use specified units if set\n units = type.units;\n }\n if (type.implicitUnits) {\n implicitUnits = type.implicitUnits;\n }\n if (!type.unitless) {\n if (valueIsString) {\n var unitsRegex = 'px|em' + (type.allowPercent ? '|\\\\%' : '');\n if (units) {\n unitsRegex = units;\n } // only allow explicit units if so set\n var match = value.match('^(' + number + ')(' + unitsRegex + ')?' + '$');\n if (match) {\n value = match[1];\n units = match[2] || implicitUnits;\n }\n } else if (!units || type.implicitUnits) {\n units = implicitUnits; // implicitly px if unspecified\n }\n }\n value = parseFloat(value);\n\n // if not a number and enums not allowed, then the value is invalid\n if (isNaN(value) && type.enums === undefined) {\n return null;\n }\n\n // check if this number type also accepts special keywords in place of numbers\n // (i.e. `left`, `auto`, etc)\n if (isNaN(value) && type.enums !== undefined) {\n value = passedValue;\n return checkEnums();\n }\n\n // check if value must be an integer\n if (type.integer && !integer(value)) {\n return null;\n }\n\n // check value is within range\n if (type.min !== undefined && (value < type.min || type.strictMin && value === type.min) || type.max !== undefined && (value > type.max || type.strictMax && value === type.max)) {\n return null;\n }\n var ret = {\n name: name,\n value: value,\n strValue: '' + value + (units ? units : ''),\n units: units,\n bypass: propIsBypass\n };\n\n // normalise value in pixels\n if (type.unitless || units !== 'px' && units !== 'em') {\n ret.pfValue = value;\n } else {\n ret.pfValue = units === 'px' || !units ? value : this.getEmSizeInPixels() * value;\n }\n\n // normalise value in ms\n if (units === 'ms' || units === 's') {\n ret.pfValue = units === 'ms' ? value : 1000 * value;\n }\n\n // normalise value in rad\n if (units === 'deg' || units === 'rad') {\n ret.pfValue = units === 'rad' ? value : deg2rad(value);\n }\n\n // normalize value in %\n if (units === '%') {\n ret.pfValue = value / 100;\n }\n return ret;\n } else if (type.propList) {\n var props = [];\n var propsStr = '' + value;\n if (propsStr === 'none') ; else {\n // go over each prop\n\n var propsSplit = propsStr.split(/\\s*,\\s*|\\s+/);\n for (var _i2 = 0; _i2 < propsSplit.length; _i2++) {\n var propName = propsSplit[_i2].trim();\n if (self.properties[propName]) {\n props.push(propName);\n } else {\n warn('`' + propName + '` is not a valid property name');\n }\n }\n if (props.length === 0) {\n return null;\n }\n }\n return {\n name: name,\n value: props,\n strValue: props.length === 0 ? 'none' : props.join(' '),\n bypass: propIsBypass\n };\n } else if (type.color) {\n var tuple = color2tuple(value);\n if (!tuple) {\n return null;\n }\n return {\n name: name,\n value: tuple,\n pfValue: tuple,\n strValue: 'rgb(' + tuple[0] + ',' + tuple[1] + ',' + tuple[2] + ')',\n // n.b. no spaces b/c of multiple support\n bypass: propIsBypass\n };\n } else if (type.regex || type.regexes) {\n // first check enums\n if (type.enums) {\n var enumProp = checkEnums();\n if (enumProp) {\n return enumProp;\n }\n }\n var regexes = type.regexes ? type.regexes : [type.regex];\n for (var _i3 = 0; _i3 < regexes.length; _i3++) {\n var regex = new RegExp(regexes[_i3]); // make a regex from the type string\n var m = regex.exec(value);\n if (m) {\n // regex matches\n return {\n name: name,\n value: type.singleRegexMatchValue ? m[1] : m,\n strValue: '' + value,\n bypass: propIsBypass\n };\n }\n }\n return null; // didn't match any\n } else if (type.string) {\n // just return\n return {\n name: name,\n value: '' + value,\n strValue: '' + value,\n bypass: propIsBypass\n };\n } else if (type.enums) {\n // check enums last because it's a combo type in others\n return checkEnums();\n } else {\n return null; // not a type we can handle\n }\n};\n\nvar _Style = function Style(cy) {\n if (!(this instanceof _Style)) {\n return new _Style(cy);\n }\n if (!core(cy)) {\n error('A style must have a core reference');\n return;\n }\n this._private = {\n cy: cy,\n coreStyle: {}\n };\n this.length = 0;\n this.resetToDefault();\n};\nvar styfn = _Style.prototype;\nstyfn.instanceString = function () {\n return 'style';\n};\n\n// remove all contexts\nstyfn.clear = function () {\n var _p = this._private;\n var cy = _p.cy;\n var eles = cy.elements();\n for (var i = 0; i < this.length; i++) {\n this[i] = undefined;\n }\n this.length = 0;\n _p.contextStyles = {};\n _p.propDiffs = {};\n this.cleanElements(eles, true);\n eles.forEach(function (ele) {\n var ele_p = ele[0]._private;\n ele_p.styleDirty = true;\n ele_p.appliedInitStyle = false;\n });\n return this; // chaining\n};\nstyfn.resetToDefault = function () {\n this.clear();\n this.addDefaultStylesheet();\n return this;\n};\n\n// builds a style object for the 'core' selector\nstyfn.core = function (propName) {\n return this._private.coreStyle[propName] || this.getDefaultProperty(propName);\n};\n\n// create a new context from the specified selector string and switch to that context\nstyfn.selector = function (selectorStr) {\n // 'core' is a special case and does not need a selector\n var selector = selectorStr === 'core' ? null : new Selector(selectorStr);\n var i = this.length++; // new context means new index\n this[i] = {\n selector: selector,\n properties: [],\n mappedProperties: [],\n index: i\n };\n return this; // chaining\n};\n\n// add one or many css rules to the current context\nstyfn.css = function () {\n var self = this;\n var args = arguments;\n if (args.length === 1) {\n var map = args[0];\n for (var i = 0; i < self.properties.length; i++) {\n var prop = self.properties[i];\n var mapVal = map[prop.name];\n if (mapVal === undefined) {\n mapVal = map[dash2camel(prop.name)];\n }\n if (mapVal !== undefined) {\n this.cssRule(prop.name, mapVal);\n }\n }\n } else if (args.length === 2) {\n this.cssRule(args[0], args[1]);\n }\n\n // do nothing if args are invalid\n\n return this; // chaining\n};\nstyfn.style = styfn.css;\n\n// add a single css rule to the current context\nstyfn.cssRule = function (name, value) {\n // name-value pair\n var property = this.parse(name, value);\n\n // add property to current context if valid\n if (property) {\n var i = this.length - 1;\n this[i].properties.push(property);\n this[i].properties[property.name] = property; // allow access by name as well\n\n if (property.name.match(/pie-(\\d+)-background-size/) && property.value) {\n this._private.hasPie = true;\n }\n if (property.name.match(/stripe-(\\d+)-background-size/) && property.value) {\n this._private.hasStripe = true;\n }\n if (property.mapped) {\n this[i].mappedProperties.push(property);\n }\n\n // add to core style if necessary\n var currentSelectorIsCore = !this[i].selector;\n if (currentSelectorIsCore) {\n this._private.coreStyle[property.name] = property;\n }\n }\n return this; // chaining\n};\nstyfn.append = function (style) {\n if (stylesheet(style)) {\n style.appendToStyle(this);\n } else if (array(style)) {\n this.appendFromJson(style);\n } else if (string(style)) {\n this.appendFromString(style);\n } // you probably wouldn't want to append a Style, since you'd duplicate the default parts\n\n return this;\n};\n\n// static function\n_Style.fromJson = function (cy, json) {\n var style = new _Style(cy);\n style.fromJson(json);\n return style;\n};\n_Style.fromString = function (cy, string) {\n return new _Style(cy).fromString(string);\n};\n[styfn$8, styfn$7, styfn$6, styfn$5, styfn$4, styfn$3, styfn$2, styfn$1].forEach(function (props) {\n extend(styfn, props);\n});\n_Style.types = styfn.types;\n_Style.properties = styfn.properties;\n_Style.propertyGroups = styfn.propertyGroups;\n_Style.propertyGroupNames = styfn.propertyGroupNames;\n_Style.propertyGroupKeys = styfn.propertyGroupKeys;\n\nvar corefn$2 = {\n style: function style(newStyle) {\n if (newStyle) {\n var s = this.setStyle(newStyle);\n s.update();\n }\n return this._private.style;\n },\n setStyle: function setStyle(style) {\n var _p = this._private;\n if (stylesheet(style)) {\n _p.style = style.generateStyle(this);\n } else if (array(style)) {\n _p.style = _Style.fromJson(this, style);\n } else if (string(style)) {\n _p.style = _Style.fromString(this, style);\n } else {\n _p.style = _Style(this);\n }\n return _p.style;\n },\n // e.g. cy.data() changed => recalc ele mappers\n updateStyle: function updateStyle() {\n this.mutableElements().updateStyle(); // just send to all eles\n }\n};\n\nvar defaultSelectionType = 'single';\nvar corefn$1 = {\n autolock: function autolock(bool) {\n if (bool !== undefined) {\n this._private.autolock = bool ? true : false;\n } else {\n return this._private.autolock;\n }\n return this; // chaining\n },\n autoungrabify: function autoungrabify(bool) {\n if (bool !== undefined) {\n this._private.autoungrabify = bool ? true : false;\n } else {\n return this._private.autoungrabify;\n }\n return this; // chaining\n },\n autounselectify: function autounselectify(bool) {\n if (bool !== undefined) {\n this._private.autounselectify = bool ? true : false;\n } else {\n return this._private.autounselectify;\n }\n return this; // chaining\n },\n selectionType: function selectionType(selType) {\n var _p = this._private;\n if (_p.selectionType == null) {\n _p.selectionType = defaultSelectionType;\n }\n if (selType !== undefined) {\n if (selType === 'additive' || selType === 'single') {\n _p.selectionType = selType;\n }\n } else {\n return _p.selectionType;\n }\n return this;\n },\n panningEnabled: function panningEnabled(bool) {\n if (bool !== undefined) {\n this._private.panningEnabled = bool ? true : false;\n } else {\n return this._private.panningEnabled;\n }\n return this; // chaining\n },\n userPanningEnabled: function userPanningEnabled(bool) {\n if (bool !== undefined) {\n this._private.userPanningEnabled = bool ? true : false;\n } else {\n return this._private.userPanningEnabled;\n }\n return this; // chaining\n },\n zoomingEnabled: function zoomingEnabled(bool) {\n if (bool !== undefined) {\n this._private.zoomingEnabled = bool ? true : false;\n } else {\n return this._private.zoomingEnabled;\n }\n return this; // chaining\n },\n userZoomingEnabled: function userZoomingEnabled(bool) {\n if (bool !== undefined) {\n this._private.userZoomingEnabled = bool ? true : false;\n } else {\n return this._private.userZoomingEnabled;\n }\n return this; // chaining\n },\n boxSelectionEnabled: function boxSelectionEnabled(bool) {\n if (bool !== undefined) {\n this._private.boxSelectionEnabled = bool ? true : false;\n } else {\n return this._private.boxSelectionEnabled;\n }\n return this; // chaining\n },\n pan: function pan() {\n var args = arguments;\n var pan = this._private.pan;\n var dim, val, dims, x, y;\n switch (args.length) {\n case 0:\n // .pan()\n return pan;\n case 1:\n if (string(args[0])) {\n // .pan('x')\n dim = args[0];\n return pan[dim];\n } else if (plainObject(args[0])) {\n // .pan({ x: 0, y: 100 })\n if (!this._private.panningEnabled) {\n return this;\n }\n dims = args[0];\n x = dims.x;\n y = dims.y;\n if (number$1(x)) {\n pan.x = x;\n }\n if (number$1(y)) {\n pan.y = y;\n }\n this.emit('pan viewport');\n }\n break;\n case 2:\n // .pan('x', 100)\n if (!this._private.panningEnabled) {\n return this;\n }\n dim = args[0];\n val = args[1];\n if ((dim === 'x' || dim === 'y') && number$1(val)) {\n pan[dim] = val;\n }\n this.emit('pan viewport');\n break;\n // invalid\n }\n this.notify('viewport');\n return this; // chaining\n },\n panBy: function panBy(arg0, arg1) {\n var args = arguments;\n var pan = this._private.pan;\n var dim, val, dims, x, y;\n if (!this._private.panningEnabled) {\n return this;\n }\n switch (args.length) {\n case 1:\n if (plainObject(arg0)) {\n // .panBy({ x: 0, y: 100 })\n dims = args[0];\n x = dims.x;\n y = dims.y;\n if (number$1(x)) {\n pan.x += x;\n }\n if (number$1(y)) {\n pan.y += y;\n }\n this.emit('pan viewport');\n }\n break;\n case 2:\n // .panBy('x', 100)\n dim = arg0;\n val = arg1;\n if ((dim === 'x' || dim === 'y') && number$1(val)) {\n pan[dim] += val;\n }\n this.emit('pan viewport');\n break;\n // invalid\n }\n this.notify('viewport');\n return this; // chaining\n },\n gc: function gc() {\n this.notify('gc');\n },\n fit: function fit(elements, padding) {\n var viewportState = this.getFitViewport(elements, padding);\n if (viewportState) {\n var _p = this._private;\n _p.zoom = viewportState.zoom;\n _p.pan = viewportState.pan;\n this.emit('pan zoom viewport');\n this.notify('viewport');\n }\n return this; // chaining\n },\n getFitViewport: function getFitViewport(elements, padding) {\n if (number$1(elements) && padding === undefined) {\n // elements is optional\n padding = elements;\n elements = undefined;\n }\n if (!this._private.panningEnabled || !this._private.zoomingEnabled) {\n return;\n }\n var bb;\n if (string(elements)) {\n var sel = elements;\n elements = this.$(sel);\n } else if (boundingBox(elements)) {\n // assume bb\n var bbe = elements;\n bb = {\n x1: bbe.x1,\n y1: bbe.y1,\n x2: bbe.x2,\n y2: bbe.y2\n };\n bb.w = bb.x2 - bb.x1;\n bb.h = bb.y2 - bb.y1;\n } else if (!elementOrCollection(elements)) {\n elements = this.mutableElements();\n }\n if (elementOrCollection(elements) && elements.empty()) {\n return;\n } // can't fit to nothing\n\n bb = bb || elements.boundingBox();\n var w = this.width();\n var h = this.height();\n var zoom;\n padding = number$1(padding) ? padding : 0;\n if (!isNaN(w) && !isNaN(h) && w > 0 && h > 0 && !isNaN(bb.w) && !isNaN(bb.h) && bb.w > 0 && bb.h > 0) {\n zoom = Math.min((w - 2 * padding) / bb.w, (h - 2 * padding) / bb.h);\n\n // crop zoom\n zoom = zoom > this._private.maxZoom ? this._private.maxZoom : zoom;\n zoom = zoom < this._private.minZoom ? this._private.minZoom : zoom;\n var pan = {\n // now pan to middle\n x: (w - zoom * (bb.x1 + bb.x2)) / 2,\n y: (h - zoom * (bb.y1 + bb.y2)) / 2\n };\n return {\n zoom: zoom,\n pan: pan\n };\n }\n return;\n },\n zoomRange: function zoomRange(min, max) {\n var _p = this._private;\n if (max == null) {\n var opts = min;\n min = opts.min;\n max = opts.max;\n }\n if (number$1(min) && number$1(max) && min <= max) {\n _p.minZoom = min;\n _p.maxZoom = max;\n } else if (number$1(min) && max === undefined && min <= _p.maxZoom) {\n _p.minZoom = min;\n } else if (number$1(max) && min === undefined && max >= _p.minZoom) {\n _p.maxZoom = max;\n }\n return this;\n },\n minZoom: function minZoom(zoom) {\n if (zoom === undefined) {\n return this._private.minZoom;\n } else {\n return this.zoomRange({\n min: zoom\n });\n }\n },\n maxZoom: function maxZoom(zoom) {\n if (zoom === undefined) {\n return this._private.maxZoom;\n } else {\n return this.zoomRange({\n max: zoom\n });\n }\n },\n getZoomedViewport: function getZoomedViewport(params) {\n var _p = this._private;\n var currentPan = _p.pan;\n var currentZoom = _p.zoom;\n var pos; // in rendered px\n var zoom;\n var bail = false;\n if (!_p.zoomingEnabled) {\n // zooming disabled\n bail = true;\n }\n if (number$1(params)) {\n // then set the zoom\n zoom = params;\n } else if (plainObject(params)) {\n // then zoom about a point\n zoom = params.level;\n if (params.position != null) {\n pos = modelToRenderedPosition$1(params.position, currentZoom, currentPan);\n } else if (params.renderedPosition != null) {\n pos = params.renderedPosition;\n }\n if (pos != null && !_p.panningEnabled) {\n // panning disabled\n bail = true;\n }\n }\n\n // crop zoom\n zoom = zoom > _p.maxZoom ? _p.maxZoom : zoom;\n zoom = zoom < _p.minZoom ? _p.minZoom : zoom;\n\n // can't zoom with invalid params\n if (bail || !number$1(zoom) || zoom === currentZoom || pos != null && (!number$1(pos.x) || !number$1(pos.y))) {\n return null;\n }\n if (pos != null) {\n // set zoom about position\n var pan1 = currentPan;\n var zoom1 = currentZoom;\n var zoom2 = zoom;\n var pan2 = {\n x: -zoom2 / zoom1 * (pos.x - pan1.x) + pos.x,\n y: -zoom2 / zoom1 * (pos.y - pan1.y) + pos.y\n };\n return {\n zoomed: true,\n panned: true,\n zoom: zoom2,\n pan: pan2\n };\n } else {\n // just set the zoom\n return {\n zoomed: true,\n panned: false,\n zoom: zoom,\n pan: currentPan\n };\n }\n },\n zoom: function zoom(params) {\n if (params === undefined) {\n // get\n return this._private.zoom;\n } else {\n // set\n var vp = this.getZoomedViewport(params);\n var _p = this._private;\n if (vp == null || !vp.zoomed) {\n return this;\n }\n _p.zoom = vp.zoom;\n if (vp.panned) {\n _p.pan.x = vp.pan.x;\n _p.pan.y = vp.pan.y;\n }\n this.emit('zoom' + (vp.panned ? ' pan' : '') + ' viewport');\n this.notify('viewport');\n return this; // chaining\n }\n },\n viewport: function viewport(opts) {\n var _p = this._private;\n var zoomDefd = true;\n var panDefd = true;\n var events = []; // to trigger\n var zoomFailed = false;\n var panFailed = false;\n if (!opts) {\n return this;\n }\n if (!number$1(opts.zoom)) {\n zoomDefd = false;\n }\n if (!plainObject(opts.pan)) {\n panDefd = false;\n }\n if (!zoomDefd && !panDefd) {\n return this;\n }\n if (zoomDefd) {\n var z = opts.zoom;\n if (z < _p.minZoom || z > _p.maxZoom || !_p.zoomingEnabled) {\n zoomFailed = true;\n } else {\n _p.zoom = z;\n events.push('zoom');\n }\n }\n if (panDefd && (!zoomFailed || !opts.cancelOnFailedZoom) && _p.panningEnabled) {\n var p = opts.pan;\n if (number$1(p.x)) {\n _p.pan.x = p.x;\n panFailed = false;\n }\n if (number$1(p.y)) {\n _p.pan.y = p.y;\n panFailed = false;\n }\n if (!panFailed) {\n events.push('pan');\n }\n }\n if (events.length > 0) {\n events.push('viewport');\n this.emit(events.join(' '));\n this.notify('viewport');\n }\n return this; // chaining\n },\n center: function center(elements) {\n var pan = this.getCenterPan(elements);\n if (pan) {\n this._private.pan = pan;\n this.emit('pan viewport');\n this.notify('viewport');\n }\n return this; // chaining\n },\n getCenterPan: function getCenterPan(elements, zoom) {\n if (!this._private.panningEnabled) {\n return;\n }\n if (string(elements)) {\n var selector = elements;\n elements = this.mutableElements().filter(selector);\n } else if (!elementOrCollection(elements)) {\n elements = this.mutableElements();\n }\n if (elements.length === 0) {\n return;\n } // can't centre pan to nothing\n\n var bb = elements.boundingBox();\n var w = this.width();\n var h = this.height();\n zoom = zoom === undefined ? this._private.zoom : zoom;\n var pan = {\n // middle\n x: (w - zoom * (bb.x1 + bb.x2)) / 2,\n y: (h - zoom * (bb.y1 + bb.y2)) / 2\n };\n return pan;\n },\n reset: function reset() {\n if (!this._private.panningEnabled || !this._private.zoomingEnabled) {\n return this;\n }\n this.viewport({\n pan: {\n x: 0,\n y: 0\n },\n zoom: 1\n });\n return this; // chaining\n },\n invalidateSize: function invalidateSize() {\n this._private.sizeCache = null;\n },\n size: function size() {\n var _p = this._private;\n var container = _p.container;\n var cy = this;\n return _p.sizeCache = _p.sizeCache || (container ? function () {\n var style = cy.window().getComputedStyle(container);\n var val = function val(name) {\n return parseFloat(style.getPropertyValue(name));\n };\n return {\n width: container.clientWidth - val('padding-left') - val('padding-right'),\n height: container.clientHeight - val('padding-top') - val('padding-bottom')\n };\n }() : {\n // fallback if no container (not 0 b/c can be used for dividing etc)\n width: 1,\n height: 1\n });\n },\n width: function width() {\n return this.size().width;\n },\n height: function height() {\n return this.size().height;\n },\n extent: function extent() {\n var pan = this._private.pan;\n var zoom = this._private.zoom;\n var rb = this.renderedExtent();\n var b = {\n x1: (rb.x1 - pan.x) / zoom,\n x2: (rb.x2 - pan.x) / zoom,\n y1: (rb.y1 - pan.y) / zoom,\n y2: (rb.y2 - pan.y) / zoom\n };\n b.w = b.x2 - b.x1;\n b.h = b.y2 - b.y1;\n return b;\n },\n renderedExtent: function renderedExtent() {\n var width = this.width();\n var height = this.height();\n return {\n x1: 0,\n y1: 0,\n x2: width,\n y2: height,\n w: width,\n h: height\n };\n },\n multiClickDebounceTime: function multiClickDebounceTime(_int) {\n if (_int) this._private.multiClickDebounceTime = _int;else return this._private.multiClickDebounceTime;\n return this; // chaining\n }\n};\n\n// aliases\ncorefn$1.centre = corefn$1.center;\n\n// backwards compatibility\ncorefn$1.autolockNodes = corefn$1.autolock;\ncorefn$1.autoungrabifyNodes = corefn$1.autoungrabify;\n\nvar fn = {\n data: define.data({\n field: 'data',\n bindingEvent: 'data',\n allowBinding: true,\n allowSetting: true,\n settingEvent: 'data',\n settingTriggersEvent: true,\n triggerFnName: 'trigger',\n allowGetting: true,\n updateStyle: true\n }),\n removeData: define.removeData({\n field: 'data',\n event: 'data',\n triggerFnName: 'trigger',\n triggerEvent: true,\n updateStyle: true\n }),\n scratch: define.data({\n field: 'scratch',\n bindingEvent: 'scratch',\n allowBinding: true,\n allowSetting: true,\n settingEvent: 'scratch',\n settingTriggersEvent: true,\n triggerFnName: 'trigger',\n allowGetting: true,\n updateStyle: true\n }),\n removeScratch: define.removeData({\n field: 'scratch',\n event: 'scratch',\n triggerFnName: 'trigger',\n triggerEvent: true,\n updateStyle: true\n })\n};\n\n// aliases\nfn.attr = fn.data;\nfn.removeAttr = fn.removeData;\n\nvar Core = function Core(opts) {\n var cy = this;\n opts = extend({}, opts);\n var container = opts.container;\n\n // allow for passing a wrapped jquery object\n // e.g. cytoscape({ container: $('#cy') })\n if (container && !htmlElement(container) && htmlElement(container[0])) {\n container = container[0];\n }\n var reg = container ? container._cyreg : null; // e.g. already registered some info (e.g. readies) via jquery\n reg = reg || {};\n if (reg && reg.cy) {\n reg.cy.destroy();\n reg = {}; // old instance => replace reg completely\n }\n var readies = reg.readies = reg.readies || [];\n if (container) {\n container._cyreg = reg;\n } // make sure container assoc'd reg points to this cy\n reg.cy = cy;\n var head = _window !== undefined && container !== undefined && !opts.headless;\n var options = opts;\n options.layout = extend({\n name: head ? 'grid' : 'null'\n }, options.layout);\n options.renderer = extend({\n name: head ? 'canvas' : 'null'\n }, options.renderer);\n var defVal = function defVal(def, val, altVal) {\n if (val !== undefined) {\n return val;\n } else if (altVal !== undefined) {\n return altVal;\n } else {\n return def;\n }\n };\n var _p = this._private = {\n container: container,\n // html dom ele container\n ready: false,\n // whether ready has been triggered\n options: options,\n // cached options\n elements: new Collection(this),\n // elements in the graph\n listeners: [],\n // list of listeners\n aniEles: new Collection(this),\n // elements being animated\n data: options.data || {},\n // data for the core\n scratch: {},\n // scratch object for core\n layout: null,\n renderer: null,\n destroyed: false,\n // whether destroy was called\n notificationsEnabled: true,\n // whether notifications are sent to the renderer\n minZoom: 1e-50,\n maxZoom: 1e50,\n zoomingEnabled: defVal(true, options.zoomingEnabled),\n userZoomingEnabled: defVal(true, options.userZoomingEnabled),\n panningEnabled: defVal(true, options.panningEnabled),\n userPanningEnabled: defVal(true, options.userPanningEnabled),\n boxSelectionEnabled: defVal(true, options.boxSelectionEnabled),\n autolock: defVal(false, options.autolock, options.autolockNodes),\n autoungrabify: defVal(false, options.autoungrabify, options.autoungrabifyNodes),\n autounselectify: defVal(false, options.autounselectify),\n styleEnabled: options.styleEnabled === undefined ? head : options.styleEnabled,\n zoom: number$1(options.zoom) ? options.zoom : 1,\n pan: {\n x: plainObject(options.pan) && number$1(options.pan.x) ? options.pan.x : 0,\n y: plainObject(options.pan) && number$1(options.pan.y) ? options.pan.y : 0\n },\n animation: {\n // object for currently-running animations\n current: [],\n queue: []\n },\n hasCompoundNodes: false,\n multiClickDebounceTime: defVal(250, options.multiClickDebounceTime)\n };\n this.createEmitter();\n\n // set selection type\n this.selectionType(options.selectionType);\n\n // init zoom bounds\n this.zoomRange({\n min: options.minZoom,\n max: options.maxZoom\n });\n var loadExtData = function loadExtData(extData, next) {\n var anyIsPromise = extData.some(promise);\n if (anyIsPromise) {\n return Promise$1.all(extData).then(next); // load all data asynchronously, then exec rest of init\n } else {\n next(extData); // exec synchronously for convenience\n }\n };\n\n // start with the default stylesheet so we have something before loading an external stylesheet\n if (_p.styleEnabled) {\n cy.setStyle([]);\n }\n\n // create the renderer\n var rendererOptions = extend({}, options, options.renderer); // allow rendering hints in top level options\n cy.initRenderer(rendererOptions);\n var setElesAndLayout = function setElesAndLayout(elements, onload, ondone) {\n cy.notifications(false);\n\n // remove old elements\n var oldEles = cy.mutableElements();\n if (oldEles.length > 0) {\n oldEles.remove();\n }\n if (elements != null) {\n if (plainObject(elements) || array(elements)) {\n cy.add(elements);\n }\n }\n cy.one('layoutready', function (e) {\n cy.notifications(true);\n cy.emit(e); // we missed this event by turning notifications off, so pass it on\n\n cy.one('load', onload);\n cy.emitAndNotify('load');\n }).one('layoutstop', function () {\n cy.one('done', ondone);\n cy.emit('done');\n });\n var layoutOpts = extend({}, cy._private.options.layout);\n layoutOpts.eles = cy.elements();\n cy.layout(layoutOpts).run();\n };\n loadExtData([options.style, options.elements], function (thens) {\n var initStyle = thens[0];\n var initEles = thens[1];\n\n // init style\n if (_p.styleEnabled) {\n cy.style().append(initStyle);\n }\n\n // initial load\n setElesAndLayout(initEles, function () {\n // onready\n cy.startAnimationLoop();\n _p.ready = true;\n\n // if a ready callback is specified as an option, the bind it\n if (fn$6(options.ready)) {\n cy.on('ready', options.ready);\n }\n\n // bind all the ready handlers registered before creating this instance\n for (var i = 0; i < readies.length; i++) {\n var fn = readies[i];\n cy.on('ready', fn);\n }\n if (reg) {\n reg.readies = [];\n } // clear b/c we've bound them all and don't want to keep it around in case a new core uses the same div etc\n\n cy.emit('ready');\n }, options.done);\n });\n};\nvar corefn = Core.prototype; // short alias\n\nextend(corefn, {\n instanceString: function instanceString() {\n return 'core';\n },\n isReady: function isReady() {\n return this._private.ready;\n },\n destroyed: function destroyed() {\n return this._private.destroyed;\n },\n ready: function ready(fn) {\n if (this.isReady()) {\n this.emitter().emit('ready', [], fn); // just calls fn as though triggered via ready event\n } else {\n this.on('ready', fn);\n }\n return this;\n },\n destroy: function destroy() {\n var cy = this;\n if (cy.destroyed()) return;\n cy.stopAnimationLoop();\n cy.destroyRenderer();\n this.emit('destroy');\n cy._private.destroyed = true;\n return cy;\n },\n hasElementWithId: function hasElementWithId(id) {\n return this._private.elements.hasElementWithId(id);\n },\n getElementById: function getElementById(id) {\n return this._private.elements.getElementById(id);\n },\n hasCompoundNodes: function hasCompoundNodes() {\n return this._private.hasCompoundNodes;\n },\n headless: function headless() {\n return this._private.renderer.isHeadless();\n },\n styleEnabled: function styleEnabled() {\n return this._private.styleEnabled;\n },\n addToPool: function addToPool(eles) {\n this._private.elements.merge(eles);\n return this; // chaining\n },\n removeFromPool: function removeFromPool(eles) {\n this._private.elements.unmerge(eles);\n return this;\n },\n container: function container() {\n return this._private.container || null;\n },\n window: function window() {\n var container = this._private.container;\n if (container == null) return _window;\n var ownerDocument = this._private.container.ownerDocument;\n if (ownerDocument === undefined || ownerDocument == null) {\n return _window;\n }\n return ownerDocument.defaultView || _window;\n },\n mount: function mount(container) {\n if (container == null) {\n return;\n }\n var cy = this;\n var _p = cy._private;\n var options = _p.options;\n if (!htmlElement(container) && htmlElement(container[0])) {\n container = container[0];\n }\n cy.stopAnimationLoop();\n cy.destroyRenderer();\n _p.container = container;\n _p.styleEnabled = true;\n cy.invalidateSize();\n cy.initRenderer(extend({}, options, options.renderer, {\n // allow custom renderer name to be re-used, otherwise use canvas\n name: options.renderer.name === 'null' ? 'canvas' : options.renderer.name\n }));\n cy.startAnimationLoop();\n cy.style(options.style);\n cy.emit('mount');\n return cy;\n },\n unmount: function unmount() {\n var cy = this;\n cy.stopAnimationLoop();\n cy.destroyRenderer();\n cy.initRenderer({\n name: 'null'\n });\n cy.emit('unmount');\n return cy;\n },\n options: function options() {\n return copy(this._private.options);\n },\n json: function json(obj) {\n var cy = this;\n var _p = cy._private;\n var eles = cy.mutableElements();\n var getFreshRef = function getFreshRef(ele) {\n return cy.getElementById(ele.id());\n };\n if (plainObject(obj)) {\n // set\n\n cy.startBatch();\n if (obj.elements) {\n var idInJson = {};\n var updateEles = function updateEles(jsons, gr) {\n var toAdd = [];\n var toMod = [];\n for (var i = 0; i < jsons.length; i++) {\n var json = jsons[i];\n if (!json.data.id) {\n warn('cy.json() cannot handle elements without an ID attribute');\n continue;\n }\n var id = '' + json.data.id; // id must be string\n var ele = cy.getElementById(id);\n idInJson[id] = true;\n if (ele.length !== 0) {\n // existing element should be updated\n toMod.push({\n ele: ele,\n json: json\n });\n } else {\n // otherwise should be added\n if (gr) {\n json.group = gr;\n toAdd.push(json);\n } else {\n toAdd.push(json);\n }\n }\n }\n cy.add(toAdd);\n for (var _i = 0; _i < toMod.length; _i++) {\n var _toMod$_i = toMod[_i],\n _ele = _toMod$_i.ele,\n _json = _toMod$_i.json;\n _ele.json(_json);\n }\n };\n if (array(obj.elements)) {\n // elements: []\n updateEles(obj.elements);\n } else {\n // elements: { nodes: [], edges: [] }\n var grs = ['nodes', 'edges'];\n for (var i = 0; i < grs.length; i++) {\n var gr = grs[i];\n var elements = obj.elements[gr];\n if (array(elements)) {\n updateEles(elements, gr);\n }\n }\n }\n var parentsToRemove = cy.collection();\n eles.filter(function (ele) {\n return !idInJson[ele.id()];\n }).forEach(function (ele) {\n if (ele.isParent()) {\n parentsToRemove.merge(ele);\n } else {\n ele.remove();\n }\n });\n\n // so that children are not removed w/parent\n parentsToRemove.forEach(function (ele) {\n return ele.children().move({\n parent: null\n });\n });\n\n // intermediate parents may be moved by prior line, so make sure we remove by fresh refs\n parentsToRemove.forEach(function (ele) {\n return getFreshRef(ele).remove();\n });\n }\n if (obj.style) {\n cy.style(obj.style);\n }\n if (obj.zoom != null && obj.zoom !== _p.zoom) {\n cy.zoom(obj.zoom);\n }\n if (obj.pan) {\n if (obj.pan.x !== _p.pan.x || obj.pan.y !== _p.pan.y) {\n cy.pan(obj.pan);\n }\n }\n if (obj.data) {\n cy.data(obj.data);\n }\n var fields = ['minZoom', 'maxZoom', 'zoomingEnabled', 'userZoomingEnabled', 'panningEnabled', 'userPanningEnabled', 'boxSelectionEnabled', 'autolock', 'autoungrabify', 'autounselectify', 'multiClickDebounceTime'];\n for (var _i2 = 0; _i2 < fields.length; _i2++) {\n var f = fields[_i2];\n if (obj[f] != null) {\n cy[f](obj[f]);\n }\n }\n cy.endBatch();\n return this; // chaining\n } else {\n // get\n var flat = !!obj;\n var json = {};\n if (flat) {\n json.elements = this.elements().map(function (ele) {\n return ele.json();\n });\n } else {\n json.elements = {};\n eles.forEach(function (ele) {\n var group = ele.group();\n if (!json.elements[group]) {\n json.elements[group] = [];\n }\n json.elements[group].push(ele.json());\n });\n }\n if (this._private.styleEnabled) {\n json.style = cy.style().json();\n }\n json.data = copy(cy.data());\n var options = _p.options;\n json.zoomingEnabled = _p.zoomingEnabled;\n json.userZoomingEnabled = _p.userZoomingEnabled;\n json.zoom = _p.zoom;\n json.minZoom = _p.minZoom;\n json.maxZoom = _p.maxZoom;\n json.panningEnabled = _p.panningEnabled;\n json.userPanningEnabled = _p.userPanningEnabled;\n json.pan = copy(_p.pan);\n json.boxSelectionEnabled = _p.boxSelectionEnabled;\n json.renderer = copy(options.renderer);\n json.hideEdgesOnViewport = options.hideEdgesOnViewport;\n json.textureOnViewport = options.textureOnViewport;\n json.wheelSensitivity = options.wheelSensitivity;\n json.motionBlur = options.motionBlur;\n json.multiClickDebounceTime = options.multiClickDebounceTime;\n return json;\n }\n }\n});\ncorefn.$id = corefn.getElementById;\n[corefn$9, corefn$8, elesfn, corefn$7, corefn$6, corefn$5, corefn$4, corefn$3, corefn$2, corefn$1, fn].forEach(function (props) {\n extend(corefn, props);\n});\n\n/* eslint-disable no-unused-vars */\nvar defaults$7 = {\n fit: true,\n // whether to fit the viewport to the graph\n directed: false,\n // whether the tree is directed downwards (or edges can point in any direction if false)\n direction: 'downward',\n // determines the direction in which the tree structure is drawn. The possible values are 'downward', 'upward', 'rightward', or 'leftward'.\n padding: 30,\n // padding on fit\n circle: false,\n // put depths in concentric circles if true, put depths top down if false\n grid: false,\n // whether to create an even grid into which the DAG is placed (circle:false only)\n spacingFactor: 1.75,\n // positive spacing factor, larger => more space between nodes (N.B. n/a if causes overlap)\n boundingBox: undefined,\n // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }\n avoidOverlap: true,\n // prevents node overlap, may overflow boundingBox if not enough space\n nodeDimensionsIncludeLabels: false,\n // Excludes the label when calculating node bounding boxes for the layout algorithm\n roots: undefined,\n // the roots of the trees\n depthSort: undefined,\n // a sorting function to order nodes at equal depth. e.g. function(a, b){ return a.data('weight') - b.data('weight') }\n animate: false,\n // whether to transition the node positions\n animationDuration: 500,\n // duration of animation in ms if enabled\n animationEasing: undefined,\n // easing of animation if enabled,\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts\n ready: undefined,\n // callback on layoutready\n stop: undefined,\n // callback on layoutstop\n transform: function transform(node, position) {\n return position;\n } // transform a given node position. Useful for changing flow direction in discrete layouts\n};\nvar deprecatedOptionDefaults = {\n maximal: false,\n // whether to shift nodes down their natural BFS depths in order to avoid upwards edges (DAGS only); setting acyclic to true sets maximal to true also\n acyclic: false // whether the tree is acyclic and thus a node could be shifted (due to the maximal option) multiple times without causing an infinite loop; setting to true sets maximal to true also; if you are uncertain whether a tree is acyclic, set to false to avoid potential infinite loops\n};\n\n/* eslint-enable */\n\nvar getInfo = function getInfo(ele) {\n return ele.scratch('breadthfirst');\n};\nvar setInfo = function setInfo(ele, obj) {\n return ele.scratch('breadthfirst', obj);\n};\nfunction BreadthFirstLayout(options) {\n this.options = extend({}, defaults$7, deprecatedOptionDefaults, options);\n}\nBreadthFirstLayout.prototype.run = function () {\n var options = this.options;\n var cy = options.cy;\n var eles = options.eles;\n var nodes = eles.nodes().filter(function (n) {\n return n.isChildless();\n });\n var graph = eles;\n var directed = options.directed;\n var maximal = options.acyclic || options.maximal || options.maximalAdjustments > 0; // maximalAdjustments for compat. w/ old code; also, setting acyclic to true sets maximal to true\n\n var hasBoundingBox = !!options.boundingBox;\n var bb = makeBoundingBox(hasBoundingBox ? options.boundingBox : structuredClone(cy.extent()));\n var roots;\n if (elementOrCollection(options.roots)) {\n roots = options.roots;\n } else if (array(options.roots)) {\n var rootsArray = [];\n for (var i = 0; i < options.roots.length; i++) {\n var id = options.roots[i];\n var ele = cy.getElementById(id);\n rootsArray.push(ele);\n }\n roots = cy.collection(rootsArray);\n } else if (string(options.roots)) {\n roots = cy.$(options.roots);\n } else {\n if (directed) {\n roots = nodes.roots();\n } else {\n var components = eles.components();\n roots = cy.collection();\n var _loop = function _loop() {\n var comp = components[_i];\n var maxDegree = comp.maxDegree(false);\n var compRoots = comp.filter(function (ele) {\n return ele.degree(false) === maxDegree;\n });\n roots = roots.add(compRoots);\n };\n for (var _i = 0; _i < components.length; _i++) {\n _loop();\n }\n }\n }\n var depths = [];\n var foundByBfs = {};\n var addToDepth = function addToDepth(ele, d) {\n if (depths[d] == null) {\n depths[d] = [];\n }\n var i = depths[d].length;\n depths[d].push(ele);\n setInfo(ele, {\n index: i,\n depth: d\n });\n };\n var changeDepth = function changeDepth(ele, newDepth) {\n var _getInfo = getInfo(ele),\n depth = _getInfo.depth,\n index = _getInfo.index;\n depths[depth][index] = null;\n\n // add only childless nodes\n if (ele.isChildless()) addToDepth(ele, newDepth);\n };\n\n // find the depths of the nodes\n graph.bfs({\n roots: roots,\n directed: options.directed,\n visit: function visit(node, edge, pNode, i, depth) {\n var ele = node[0];\n var id = ele.id();\n\n // add only childless nodes\n if (ele.isChildless()) addToDepth(ele, depth);\n foundByBfs[id] = true;\n }\n });\n\n // check for nodes not found by bfs\n var orphanNodes = [];\n for (var _i2 = 0; _i2 < nodes.length; _i2++) {\n var _ele = nodes[_i2];\n if (foundByBfs[_ele.id()]) {\n continue;\n } else {\n orphanNodes.push(_ele);\n }\n }\n\n // assign the nodes a depth and index\n var assignDepthsAt = function assignDepthsAt(i) {\n var eles = depths[i];\n for (var j = 0; j < eles.length; j++) {\n var _ele2 = eles[j];\n if (_ele2 == null) {\n eles.splice(j, 1);\n j--;\n continue;\n }\n setInfo(_ele2, {\n depth: i,\n index: j\n });\n }\n };\n var adjustMaximally = function adjustMaximally(ele, shifted) {\n var eInfo = getInfo(ele);\n var incomers = ele.incomers().filter(function (el) {\n return el.isNode() && eles.has(el);\n });\n var maxDepth = -1;\n var id = ele.id();\n for (var k = 0; k < incomers.length; k++) {\n var incmr = incomers[k];\n var iInfo = getInfo(incmr);\n maxDepth = Math.max(maxDepth, iInfo.depth);\n }\n if (eInfo.depth <= maxDepth) {\n if (!options.acyclic && shifted[id]) {\n return null;\n }\n var newDepth = maxDepth + 1;\n changeDepth(ele, newDepth);\n shifted[id] = newDepth;\n return true;\n }\n return false;\n };\n\n // for the directed case, try to make the edges all go down (i.e. depth i => depth i + 1)\n if (directed && maximal) {\n var Q = [];\n var shifted = {};\n var enqueue = function enqueue(n) {\n return Q.push(n);\n };\n var dequeue = function dequeue() {\n return Q.shift();\n };\n nodes.forEach(function (n) {\n return Q.push(n);\n });\n while (Q.length > 0) {\n var _ele3 = dequeue();\n var didShift = adjustMaximally(_ele3, shifted);\n if (didShift) {\n _ele3.outgoers().filter(function (el) {\n return el.isNode() && eles.has(el);\n }).forEach(enqueue);\n } else if (didShift === null) {\n warn('Detected double maximal shift for node `' + _ele3.id() + '`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.');\n break; // exit on failure\n }\n }\n }\n\n // find min distance we need to leave between nodes\n var minDistance = 0;\n if (options.avoidOverlap) {\n for (var _i3 = 0; _i3 < nodes.length; _i3++) {\n var n = nodes[_i3];\n var nbb = n.layoutDimensions(options);\n var w = nbb.w;\n var h = nbb.h;\n minDistance = Math.max(minDistance, w, h);\n }\n }\n\n // get the weighted percent for an element based on its connectivity to other levels\n var cachedWeightedPercent = {};\n var getWeightedPercent = function getWeightedPercent(ele) {\n if (cachedWeightedPercent[ele.id()]) {\n return cachedWeightedPercent[ele.id()];\n }\n var eleDepth = getInfo(ele).depth;\n var neighbors = ele.neighborhood();\n var percent = 0;\n var samples = 0;\n for (var _i4 = 0; _i4 < neighbors.length; _i4++) {\n var neighbor = neighbors[_i4];\n if (neighbor.isEdge() || neighbor.isParent() || !nodes.has(neighbor)) {\n continue;\n }\n var bf = getInfo(neighbor);\n if (bf == null) {\n continue;\n }\n var index = bf.index;\n var depth = bf.depth;\n\n // unassigned neighbours shouldn't affect the ordering\n if (index == null || depth == null) {\n continue;\n }\n var nDepth = depths[depth].length;\n if (depth < eleDepth) {\n // only get influenced by elements above\n percent += index / nDepth;\n samples++;\n }\n }\n samples = Math.max(1, samples);\n percent = percent / samples;\n if (samples === 0) {\n // put lone nodes at the start\n percent = 0;\n }\n cachedWeightedPercent[ele.id()] = percent;\n return percent;\n };\n\n // rearrange the indices in each depth level based on connectivity\n var sortFn = function sortFn(a, b) {\n var apct = getWeightedPercent(a);\n var bpct = getWeightedPercent(b);\n var diff = apct - bpct;\n if (diff === 0) {\n return ascending(a.id(), b.id()); // make sure sort doesn't have don't-care comparisons\n } else {\n return diff;\n }\n };\n if (options.depthSort !== undefined) {\n sortFn = options.depthSort;\n }\n var depthsLen = depths.length;\n\n // sort each level to make connected nodes closer\n for (var _i5 = 0; _i5 < depthsLen; _i5++) {\n depths[_i5].sort(sortFn);\n assignDepthsAt(_i5);\n }\n\n // assign orphan nodes to a new top-level depth\n var orphanDepth = [];\n for (var _i6 = 0; _i6 < orphanNodes.length; _i6++) {\n orphanDepth.push(orphanNodes[_i6]);\n }\n var assignDepths = function assignDepths() {\n for (var _i7 = 0; _i7 < depthsLen; _i7++) {\n assignDepthsAt(_i7);\n }\n };\n\n // add a new top-level depth only when there are orphan nodes\n if (orphanDepth.length) {\n depths.unshift(orphanDepth);\n depthsLen = depths.length;\n assignDepths();\n }\n var biggestDepthSize = 0;\n for (var _i8 = 0; _i8 < depthsLen; _i8++) {\n biggestDepthSize = Math.max(depths[_i8].length, biggestDepthSize);\n }\n var center = {\n x: bb.x1 + bb.w / 2,\n y: bb.y1 + bb.h / 2\n };\n\n // average node size\n var aveNodeSize = nodes.reduce(function (acc, node) {\n return function (box) {\n return {\n w: acc.w === -1 ? box.w : (acc.w + box.w) / 2,\n h: acc.h === -1 ? box.h : (acc.h + box.h) / 2\n };\n }(node.boundingBox({\n includeLabels: options.nodeDimensionsIncludeLabels\n }));\n }, {\n w: -1,\n h: -1\n });\n var distanceY = Math.max(\n // only one depth\n depthsLen === 1 ? 0 :\n // inside a bounding box, no need for top & bottom padding\n hasBoundingBox ? (bb.h - options.padding * 2 - aveNodeSize.h) / (depthsLen - 1) : (bb.h - options.padding * 2 - aveNodeSize.h) / (depthsLen + 1), minDistance);\n var maxDepthSize = depths.reduce(function (max, eles) {\n return Math.max(max, eles.length);\n }, 0);\n var getPositionTopBottom = function getPositionTopBottom(ele) {\n var _getInfo2 = getInfo(ele),\n depth = _getInfo2.depth,\n index = _getInfo2.index;\n if (options.circle) {\n var radiusStepSize = Math.min(bb.w / 2 / depthsLen, bb.h / 2 / depthsLen);\n radiusStepSize = Math.max(radiusStepSize, minDistance);\n var radius = radiusStepSize * depth + radiusStepSize - (depthsLen > 0 && depths[0].length <= 3 ? radiusStepSize / 2 : 0);\n var theta = 2 * Math.PI / depths[depth].length * index;\n if (depth === 0 && depths[0].length === 1) {\n radius = 1;\n }\n return {\n x: center.x + radius * Math.cos(theta),\n y: center.y + radius * Math.sin(theta)\n };\n } else {\n var depthSize = depths[depth].length;\n var distanceX = Math.max(\n // only one depth\n depthSize === 1 ? 0 :\n // inside a bounding box, no need for left & right padding\n hasBoundingBox ? (bb.w - options.padding * 2 - aveNodeSize.w) / ((options.grid ? maxDepthSize : depthSize) - 1) : (bb.w - options.padding * 2 - aveNodeSize.w) / ((options.grid ? maxDepthSize : depthSize) + 1), minDistance);\n var epos = {\n x: center.x + (index + 1 - (depthSize + 1) / 2) * distanceX,\n y: center.y + (depth + 1 - (depthsLen + 1) / 2) * distanceY\n };\n return epos;\n }\n };\n var rotateDegrees = {\n 'downward': 0,\n 'leftward': 90,\n 'upward': 180,\n 'rightward': -90\n };\n if (Object.keys(rotateDegrees).indexOf(options.direction) === -1) {\n error(\"Invalid direction '\".concat(options.direction, \"' specified for breadthfirst layout. Valid values are: \").concat(Object.keys(rotateDegrees).join(', ')));\n }\n var getPosition = function getPosition(ele) {\n return rotatePosAndSkewByBox(getPositionTopBottom(ele), bb, rotateDegrees[options.direction]);\n };\n eles.nodes().layoutPositions(this, options, getPosition);\n return this; // chaining\n};\n\nvar defaults$6 = {\n fit: true,\n // whether to fit the viewport to the graph\n padding: 30,\n // the padding on fit\n boundingBox: undefined,\n // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }\n avoidOverlap: true,\n // prevents node overlap, may overflow boundingBox and radius if not enough space\n nodeDimensionsIncludeLabels: false,\n // Excludes the label when calculating node bounding boxes for the layout algorithm\n spacingFactor: undefined,\n // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up\n radius: undefined,\n // the radius of the circle\n startAngle: 3 / 2 * Math.PI,\n // where nodes start in radians\n sweep: undefined,\n // how many radians should be between the first and last node (defaults to full circle)\n clockwise: true,\n // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false)\n sort: undefined,\n // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') }\n animate: false,\n // whether to transition the node positions\n animationDuration: 500,\n // duration of animation in ms if enabled\n animationEasing: undefined,\n // easing of animation if enabled\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts\n ready: undefined,\n // callback on layoutready\n stop: undefined,\n // callback on layoutstop\n transform: function transform(node, position) {\n return position;\n } // transform a given node position. Useful for changing flow direction in discrete layouts \n};\nfunction CircleLayout(options) {\n this.options = extend({}, defaults$6, options);\n}\nCircleLayout.prototype.run = function () {\n var params = this.options;\n var options = params;\n var cy = params.cy;\n var eles = options.eles;\n var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise;\n var nodes = eles.nodes().not(':parent');\n if (options.sort) {\n nodes = nodes.sort(options.sort);\n }\n var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : {\n x1: 0,\n y1: 0,\n w: cy.width(),\n h: cy.height()\n });\n var center = {\n x: bb.x1 + bb.w / 2,\n y: bb.y1 + bb.h / 2\n };\n var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / nodes.length : options.sweep;\n var dTheta = sweep / Math.max(1, nodes.length - 1);\n var r;\n var minDistance = 0;\n for (var i = 0; i < nodes.length; i++) {\n var n = nodes[i];\n var nbb = n.layoutDimensions(options);\n var w = nbb.w;\n var h = nbb.h;\n minDistance = Math.max(minDistance, w, h);\n }\n if (number$1(options.radius)) {\n r = options.radius;\n } else if (nodes.length <= 1) {\n r = 0;\n } else {\n r = Math.min(bb.h, bb.w) / 2 - minDistance;\n }\n\n // calculate the radius\n if (nodes.length > 1 && options.avoidOverlap) {\n // but only if more than one node (can't overlap)\n minDistance *= 1.75; // just to have some nice spacing\n\n var dcos = Math.cos(dTheta) - Math.cos(0);\n var dsin = Math.sin(dTheta) - Math.sin(0);\n var rMin = Math.sqrt(minDistance * minDistance / (dcos * dcos + dsin * dsin)); // s.t. no nodes overlapping\n r = Math.max(rMin, r);\n }\n var getPos = function getPos(ele, i) {\n var theta = options.startAngle + i * dTheta * (clockwise ? 1 : -1);\n var rx = r * Math.cos(theta);\n var ry = r * Math.sin(theta);\n var pos = {\n x: center.x + rx,\n y: center.y + ry\n };\n return pos;\n };\n eles.nodes().layoutPositions(this, options, getPos);\n return this; // chaining\n};\n\nvar defaults$5 = {\n fit: true,\n // whether to fit the viewport to the graph\n padding: 30,\n // the padding on fit\n startAngle: 3 / 2 * Math.PI,\n // where nodes start in radians\n sweep: undefined,\n // how many radians should be between the first and last node (defaults to full circle)\n clockwise: true,\n // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false)\n equidistant: false,\n // whether levels have an equal radial distance betwen them, may cause bounding box overflow\n minNodeSpacing: 10,\n // min spacing between outside of nodes (used for radius adjustment)\n boundingBox: undefined,\n // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }\n avoidOverlap: true,\n // prevents node overlap, may overflow boundingBox if not enough space\n nodeDimensionsIncludeLabels: false,\n // Excludes the label when calculating node bounding boxes for the layout algorithm\n height: undefined,\n // height of layout area (overrides container height)\n width: undefined,\n // width of layout area (overrides container width)\n spacingFactor: undefined,\n // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up\n concentric: function concentric(node) {\n // returns numeric value for each node, placing higher nodes in levels towards the centre\n return node.degree();\n },\n levelWidth: function levelWidth(nodes) {\n // the variation of concentric values in each level\n return nodes.maxDegree() / 4;\n },\n animate: false,\n // whether to transition the node positions\n animationDuration: 500,\n // duration of animation in ms if enabled\n animationEasing: undefined,\n // easing of animation if enabled\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts\n ready: undefined,\n // callback on layoutready\n stop: undefined,\n // callback on layoutstop\n transform: function transform(node, position) {\n return position;\n } // transform a given node position. Useful for changing flow direction in discrete layouts\n};\nfunction ConcentricLayout(options) {\n this.options = extend({}, defaults$5, options);\n}\nConcentricLayout.prototype.run = function () {\n var params = this.options;\n var options = params;\n var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise;\n var cy = params.cy;\n var eles = options.eles;\n var nodes = eles.nodes().not(':parent');\n var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : {\n x1: 0,\n y1: 0,\n w: cy.width(),\n h: cy.height()\n });\n var center = {\n x: bb.x1 + bb.w / 2,\n y: bb.y1 + bb.h / 2\n };\n var nodeValues = []; // { node, value }\n var maxNodeSize = 0;\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n var value = undefined;\n\n // calculate the node value\n value = options.concentric(node);\n nodeValues.push({\n value: value,\n node: node\n });\n\n // for style mapping\n node._private.scratch.concentric = value;\n }\n\n // in case we used the `concentric` in style\n nodes.updateStyle();\n\n // calculate max size now based on potentially updated mappers\n for (var _i = 0; _i < nodes.length; _i++) {\n var _node = nodes[_i];\n var nbb = _node.layoutDimensions(options);\n maxNodeSize = Math.max(maxNodeSize, nbb.w, nbb.h);\n }\n\n // sort node values in descreasing order\n nodeValues.sort(function (a, b) {\n return b.value - a.value;\n });\n var levelWidth = options.levelWidth(nodes);\n\n // put the values into levels\n var levels = [[]];\n var currentLevel = levels[0];\n for (var _i2 = 0; _i2 < nodeValues.length; _i2++) {\n var val = nodeValues[_i2];\n if (currentLevel.length > 0) {\n var diff = Math.abs(currentLevel[0].value - val.value);\n if (diff >= levelWidth) {\n currentLevel = [];\n levels.push(currentLevel);\n }\n }\n currentLevel.push(val);\n }\n\n // create positions from levels\n\n var minDist = maxNodeSize + options.minNodeSpacing; // min dist between nodes\n\n if (!options.avoidOverlap) {\n // then strictly constrain to bb\n var firstLvlHasMulti = levels.length > 0 && levels[0].length > 1;\n var maxR = Math.min(bb.w, bb.h) / 2 - minDist;\n var rStep = maxR / (levels.length + firstLvlHasMulti ? 1 : 0);\n minDist = Math.min(minDist, rStep);\n }\n\n // find the metrics for each level\n var r = 0;\n for (var _i3 = 0; _i3 < levels.length; _i3++) {\n var level = levels[_i3];\n var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / level.length : options.sweep;\n var dTheta = level.dTheta = sweep / Math.max(1, level.length - 1);\n\n // calculate the radius\n if (level.length > 1 && options.avoidOverlap) {\n // but only if more than one node (can't overlap)\n var dcos = Math.cos(dTheta) - Math.cos(0);\n var dsin = Math.sin(dTheta) - Math.sin(0);\n var rMin = Math.sqrt(minDist * minDist / (dcos * dcos + dsin * dsin)); // s.t. no nodes overlapping\n\n r = Math.max(rMin, r);\n }\n level.r = r;\n r += minDist;\n }\n if (options.equidistant) {\n var rDeltaMax = 0;\n var _r = 0;\n for (var _i4 = 0; _i4 < levels.length; _i4++) {\n var _level = levels[_i4];\n var rDelta = _level.r - _r;\n rDeltaMax = Math.max(rDeltaMax, rDelta);\n }\n _r = 0;\n for (var _i5 = 0; _i5 < levels.length; _i5++) {\n var _level2 = levels[_i5];\n if (_i5 === 0) {\n _r = _level2.r;\n }\n _level2.r = _r;\n _r += rDeltaMax;\n }\n }\n\n // calculate the node positions\n var pos = {}; // id => position\n for (var _i6 = 0; _i6 < levels.length; _i6++) {\n var _level3 = levels[_i6];\n var _dTheta = _level3.dTheta;\n var _r2 = _level3.r;\n for (var j = 0; j < _level3.length; j++) {\n var _val = _level3[j];\n var theta = options.startAngle + (clockwise ? 1 : -1) * _dTheta * j;\n var p = {\n x: center.x + _r2 * Math.cos(theta),\n y: center.y + _r2 * Math.sin(theta)\n };\n pos[_val.node.id()] = p;\n }\n }\n\n // position the nodes\n eles.nodes().layoutPositions(this, options, function (ele) {\n var id = ele.id();\n return pos[id];\n });\n return this; // chaining\n};\n\n/*\nThe CoSE layout was written by Gerardo Huck.\nhttps://www.linkedin.com/in/gerardohuck/\n\nBased on the following article:\nhttp://dl.acm.org/citation.cfm?id=1498047\n\nModifications tracked on Github.\n*/\n\nvar DEBUG;\n\n/**\n * @brief : default layout options\n */\nvar defaults$4 = {\n // Called on `layoutready`\n ready: function ready() {},\n // Called on `layoutstop`\n stop: function stop() {},\n // Whether to animate while running the layout\n // true : Animate continuously as the layout is running\n // false : Just show the end result\n // 'end' : Animate with the end result, from the initial positions to the end positions\n animate: true,\n // Easing of the animation for animate:'end'\n animationEasing: undefined,\n // The duration of the animation for animate:'end'\n animationDuration: undefined,\n // A function that determines whether the node should be animated\n // All nodes animated by default on animate enabled\n // Non-animated nodes are positioned immediately when the layout starts\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // The layout animates only after this many milliseconds for animate:true\n // (prevents flashing on fast runs)\n animationThreshold: 250,\n // Number of iterations between consecutive screen positions update\n refresh: 20,\n // Whether to fit the network view after when done\n fit: true,\n // Padding on fit\n padding: 30,\n // Constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }\n boundingBox: undefined,\n // Excludes the label when calculating node bounding boxes for the layout algorithm\n nodeDimensionsIncludeLabels: false,\n // Randomize the initial positions of the nodes (true) or use existing positions (false)\n randomize: false,\n // Extra spacing between components in non-compound graphs\n componentSpacing: 40,\n // Node repulsion (non overlapping) multiplier\n nodeRepulsion: function nodeRepulsion(node) {\n return 2048;\n },\n // Node repulsion (overlapping) multiplier\n nodeOverlap: 4,\n // Ideal edge (non nested) length\n idealEdgeLength: function idealEdgeLength(edge) {\n return 32;\n },\n // Divisor to compute edge forces\n edgeElasticity: function edgeElasticity(edge) {\n return 32;\n },\n // Nesting factor (multiplier) to compute ideal edge length for nested edges\n nestingFactor: 1.2,\n // Gravity force (constant)\n gravity: 1,\n // Maximum number of iterations to perform\n numIter: 1000,\n // Initial temperature (maximum node displacement)\n initialTemp: 1000,\n // Cooling factor (how the temperature is reduced between consecutive iterations\n coolingFactor: 0.99,\n // Lower temperature threshold (below this point the layout will end)\n minTemp: 1.0\n};\n\n/**\n * @brief : constructor\n * @arg options : object containing layout options\n */\nfunction CoseLayout(options) {\n this.options = extend({}, defaults$4, options);\n this.options.layout = this;\n\n // Exclude any edge that has a source or target node that is not in the set of passed-in nodes\n var nodes = this.options.eles.nodes();\n var edges = this.options.eles.edges();\n var notEdges = edges.filter(function (e) {\n var sourceId = e.source().data('id');\n var targetId = e.target().data('id');\n var hasSource = nodes.some(function (n) {\n return n.data('id') === sourceId;\n });\n var hasTarget = nodes.some(function (n) {\n return n.data('id') === targetId;\n });\n return !hasSource || !hasTarget;\n });\n this.options.eles = this.options.eles.not(notEdges);\n}\n\n/**\n * @brief : runs the layout\n */\nCoseLayout.prototype.run = function () {\n var options = this.options;\n var cy = options.cy;\n var layout = this;\n layout.stopped = false;\n if (options.animate === true || options.animate === false) {\n layout.emit({\n type: 'layoutstart',\n layout: layout\n });\n }\n\n // Set DEBUG - Global variable\n if (true === options.debug) {\n DEBUG = true;\n } else {\n DEBUG = false;\n }\n\n // Initialize layout info\n var layoutInfo = createLayoutInfo(cy, layout, options);\n\n // Show LayoutInfo contents if debugging\n if (DEBUG) {\n printLayoutInfo(layoutInfo);\n }\n\n // If required, randomize node positions\n if (options.randomize) {\n randomizePositions(layoutInfo);\n }\n var startTime = performanceNow();\n var refresh = function refresh() {\n refreshPositions(layoutInfo, cy, options);\n\n // Fit the graph if necessary\n if (true === options.fit) {\n cy.fit(options.padding);\n }\n };\n var mainLoop = function mainLoop(i) {\n if (layout.stopped || i >= options.numIter) {\n // logDebug(\"Layout manually stopped. Stopping computation in step \" + i);\n return false;\n }\n\n // Do one step in the phisical simulation\n step(layoutInfo, options);\n\n // Update temperature\n layoutInfo.temperature = layoutInfo.temperature * options.coolingFactor;\n // logDebug(\"New temperature: \" + layoutInfo.temperature);\n\n if (layoutInfo.temperature < options.minTemp) {\n // logDebug(\"Temperature drop below minimum threshold. Stopping computation in step \" + i);\n return false;\n }\n return true;\n };\n var done = function done() {\n if (options.animate === true || options.animate === false) {\n refresh();\n\n // Layout has finished\n layout.one('layoutstop', options.stop);\n layout.emit({\n type: 'layoutstop',\n layout: layout\n });\n } else {\n var nodes = options.eles.nodes();\n var getScaledPos = getScaleInBoundsFn(layoutInfo, options, nodes);\n nodes.layoutPositions(layout, options, getScaledPos);\n }\n };\n var i = 0;\n var loopRet = true;\n if (options.animate === true) {\n var _frame = function frame() {\n var f = 0;\n while (loopRet && f < options.refresh) {\n loopRet = mainLoop(i);\n i++;\n f++;\n }\n if (!loopRet) {\n // it's done\n separateComponents(layoutInfo, options);\n done();\n } else {\n var now = performanceNow();\n if (now - startTime >= options.animationThreshold) {\n refresh();\n }\n requestAnimationFrame(_frame);\n }\n };\n _frame();\n } else {\n while (loopRet) {\n loopRet = mainLoop(i);\n i++;\n }\n separateComponents(layoutInfo, options);\n done();\n }\n return this; // chaining\n};\n\n/**\n * @brief : called on continuous layouts to stop them before they finish\n */\nCoseLayout.prototype.stop = function () {\n this.stopped = true;\n if (this.thread) {\n this.thread.stop();\n }\n this.emit('layoutstop');\n return this; // chaining\n};\nCoseLayout.prototype.destroy = function () {\n if (this.thread) {\n this.thread.stop();\n }\n return this; // chaining\n};\n\n/**\n * @brief : Creates an object which is contains all the data\n * used in the layout process\n * @arg cy : cytoscape.js object\n * @return : layoutInfo object initialized\n */\nvar createLayoutInfo = function createLayoutInfo(cy, layout, options) {\n // Shortcut\n var edges = options.eles.edges();\n var nodes = options.eles.nodes();\n var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : {\n x1: 0,\n y1: 0,\n w: cy.width(),\n h: cy.height()\n });\n var layoutInfo = {\n isCompound: cy.hasCompoundNodes(),\n layoutNodes: [],\n idToIndex: {},\n nodeSize: nodes.size(),\n graphSet: [],\n indexToGraph: [],\n layoutEdges: [],\n edgeSize: edges.size(),\n temperature: options.initialTemp,\n clientWidth: bb.w,\n clientHeight: bb.h,\n boundingBox: bb\n };\n var components = options.eles.components();\n var id2cmptId = {};\n for (var i = 0; i < components.length; i++) {\n var component = components[i];\n for (var j = 0; j < component.length; j++) {\n var node = component[j];\n id2cmptId[node.id()] = i;\n }\n }\n\n // Iterate over all nodes, creating layout nodes\n for (var i = 0; i < layoutInfo.nodeSize; i++) {\n var n = nodes[i];\n var nbb = n.layoutDimensions(options);\n var tempNode = {};\n tempNode.isLocked = n.locked();\n tempNode.id = n.data('id');\n tempNode.parentId = n.data('parent');\n tempNode.cmptId = id2cmptId[n.id()];\n tempNode.children = [];\n tempNode.positionX = n.position('x');\n tempNode.positionY = n.position('y');\n tempNode.offsetX = 0;\n tempNode.offsetY = 0;\n tempNode.height = nbb.w;\n tempNode.width = nbb.h;\n tempNode.maxX = tempNode.positionX + tempNode.width / 2;\n tempNode.minX = tempNode.positionX - tempNode.width / 2;\n tempNode.maxY = tempNode.positionY + tempNode.height / 2;\n tempNode.minY = tempNode.positionY - tempNode.height / 2;\n tempNode.padLeft = parseFloat(n.style('padding'));\n tempNode.padRight = parseFloat(n.style('padding'));\n tempNode.padTop = parseFloat(n.style('padding'));\n tempNode.padBottom = parseFloat(n.style('padding'));\n\n // forces\n tempNode.nodeRepulsion = fn$6(options.nodeRepulsion) ? options.nodeRepulsion(n) : options.nodeRepulsion;\n\n // Add new node\n layoutInfo.layoutNodes.push(tempNode);\n // Add entry to id-index map\n layoutInfo.idToIndex[tempNode.id] = i;\n }\n\n // Inline implementation of a queue, used for traversing the graph in BFS order\n var queue = [];\n var start = 0; // Points to the start the queue\n var end = -1; // Points to the end of the queue\n\n var tempGraph = [];\n\n // Second pass to add child information and\n // initialize queue for hierarchical traversal\n for (var i = 0; i < layoutInfo.nodeSize; i++) {\n var n = layoutInfo.layoutNodes[i];\n var p_id = n.parentId;\n // Check if node n has a parent node\n if (null != p_id) {\n // Add node Id to parent's list of children\n layoutInfo.layoutNodes[layoutInfo.idToIndex[p_id]].children.push(n.id);\n } else {\n // If a node doesn't have a parent, then it's in the root graph\n queue[++end] = n.id;\n tempGraph.push(n.id);\n }\n }\n\n // Add root graph to graphSet\n layoutInfo.graphSet.push(tempGraph);\n\n // Traverse the graph, level by level,\n while (start <= end) {\n // Get the node to visit and remove it from queue\n var node_id = queue[start++];\n var node_ix = layoutInfo.idToIndex[node_id];\n var node = layoutInfo.layoutNodes[node_ix];\n var children = node.children;\n if (children.length > 0) {\n // Add children nodes as a new graph to graph set\n layoutInfo.graphSet.push(children);\n // Add children to que queue to be visited\n for (var i = 0; i < children.length; i++) {\n queue[++end] = children[i];\n }\n }\n }\n\n // Create indexToGraph map\n for (var i = 0; i < layoutInfo.graphSet.length; i++) {\n var graph = layoutInfo.graphSet[i];\n for (var j = 0; j < graph.length; j++) {\n var index = layoutInfo.idToIndex[graph[j]];\n layoutInfo.indexToGraph[index] = i;\n }\n }\n\n // Iterate over all edges, creating Layout Edges\n for (var i = 0; i < layoutInfo.edgeSize; i++) {\n var e = edges[i];\n var tempEdge = {};\n tempEdge.id = e.data('id');\n tempEdge.sourceId = e.data('source');\n tempEdge.targetId = e.data('target');\n\n // Compute ideal length\n var idealLength = fn$6(options.idealEdgeLength) ? options.idealEdgeLength(e) : options.idealEdgeLength;\n var elasticity = fn$6(options.edgeElasticity) ? options.edgeElasticity(e) : options.edgeElasticity;\n\n // Check if it's an inter graph edge\n var sourceIx = layoutInfo.idToIndex[tempEdge.sourceId];\n var targetIx = layoutInfo.idToIndex[tempEdge.targetId];\n var sourceGraph = layoutInfo.indexToGraph[sourceIx];\n var targetGraph = layoutInfo.indexToGraph[targetIx];\n if (sourceGraph != targetGraph) {\n // Find lowest common graph ancestor\n var lca = findLCA(tempEdge.sourceId, tempEdge.targetId, layoutInfo);\n\n // Compute sum of node depths, relative to lca graph\n var lcaGraph = layoutInfo.graphSet[lca];\n var depth = 0;\n\n // Source depth\n var tempNode = layoutInfo.layoutNodes[sourceIx];\n while (-1 === lcaGraph.indexOf(tempNode.id)) {\n tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]];\n depth++;\n }\n\n // Target depth\n tempNode = layoutInfo.layoutNodes[targetIx];\n while (-1 === lcaGraph.indexOf(tempNode.id)) {\n tempNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[tempNode.parentId]];\n depth++;\n }\n\n // logDebug('LCA of nodes ' + tempEdge.sourceId + ' and ' + tempEdge.targetId +\n // \". Index: \" + lca + \" Contents: \" + lcaGraph.toString() +\n // \". Depth: \" + depth);\n\n // Update idealLength\n idealLength *= depth * options.nestingFactor;\n }\n tempEdge.idealLength = idealLength;\n tempEdge.elasticity = elasticity;\n layoutInfo.layoutEdges.push(tempEdge);\n }\n\n // Finally, return layoutInfo object\n return layoutInfo;\n};\n\n/**\n * @brief : This function finds the index of the lowest common\n * graph ancestor between 2 nodes in the subtree\n * (from the graph hierarchy induced tree) whose\n * root is graphIx\n *\n * @arg node1: node1's ID\n * @arg node2: node2's ID\n * @arg layoutInfo: layoutInfo object\n *\n */\nvar findLCA = function findLCA(node1, node2, layoutInfo) {\n // Find their common ancester, starting from the root graph\n var res = _findLCA_aux(node1, node2, 0, layoutInfo);\n if (2 > res.count) {\n // If aux function couldn't find the common ancester,\n // then it is the root graph\n return 0;\n } else {\n return res.graph;\n }\n};\n\n/**\n * @brief : Auxiliary function used for LCA computation\n *\n * @arg node1 : node1's ID\n * @arg node2 : node2's ID\n * @arg graphIx : subgraph index\n * @arg layoutInfo : layoutInfo object\n *\n * @return : object of the form {count: X, graph: Y}, where:\n * X is the number of ancestors (max: 2) found in\n * graphIx (and it's subgraphs),\n * Y is the graph index of the lowest graph containing\n * all X nodes\n */\nvar _findLCA_aux = function findLCA_aux(node1, node2, graphIx, layoutInfo) {\n var graph = layoutInfo.graphSet[graphIx];\n // If both nodes belongs to graphIx\n if (-1 < graph.indexOf(node1) && -1 < graph.indexOf(node2)) {\n return {\n count: 2,\n graph: graphIx\n };\n }\n\n // Make recursive calls for all subgraphs\n var c = 0;\n for (var i = 0; i < graph.length; i++) {\n var nodeId = graph[i];\n var nodeIx = layoutInfo.idToIndex[nodeId];\n var children = layoutInfo.layoutNodes[nodeIx].children;\n\n // If the node has no child, skip it\n if (0 === children.length) {\n continue;\n }\n var childGraphIx = layoutInfo.indexToGraph[layoutInfo.idToIndex[children[0]]];\n var result = _findLCA_aux(node1, node2, childGraphIx, layoutInfo);\n if (0 === result.count) {\n // Neither node1 nor node2 are present in this subgraph\n continue;\n } else if (1 === result.count) {\n // One of (node1, node2) is present in this subgraph\n c++;\n if (2 === c) {\n // We've already found both nodes, no need to keep searching\n break;\n }\n } else {\n // Both nodes are present in this subgraph\n return result;\n }\n }\n return {\n count: c,\n graph: graphIx\n };\n};\n\n/**\n * @brief: printsLayoutInfo into js console\n * Only used for debbuging\n */\nvar printLayoutInfo; \n\n/**\n * @brief : Randomizes the position of all nodes\n */\nvar randomizePositions = function randomizePositions(layoutInfo, cy) {\n var width = layoutInfo.clientWidth;\n var height = layoutInfo.clientHeight;\n for (var i = 0; i < layoutInfo.nodeSize; i++) {\n var n = layoutInfo.layoutNodes[i];\n\n // No need to randomize compound nodes or locked nodes\n if (0 === n.children.length && !n.isLocked) {\n n.positionX = Math.random() * width;\n n.positionY = Math.random() * height;\n }\n }\n};\nvar getScaleInBoundsFn = function getScaleInBoundsFn(layoutInfo, options, nodes) {\n var bb = layoutInfo.boundingBox;\n var coseBB = {\n x1: Infinity,\n x2: -Infinity,\n y1: Infinity,\n y2: -Infinity\n };\n if (options.boundingBox) {\n nodes.forEach(function (node) {\n var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[node.data('id')]];\n coseBB.x1 = Math.min(coseBB.x1, lnode.positionX);\n coseBB.x2 = Math.max(coseBB.x2, lnode.positionX);\n coseBB.y1 = Math.min(coseBB.y1, lnode.positionY);\n coseBB.y2 = Math.max(coseBB.y2, lnode.positionY);\n });\n coseBB.w = coseBB.x2 - coseBB.x1;\n coseBB.h = coseBB.y2 - coseBB.y1;\n }\n return function (ele, i) {\n var lnode = layoutInfo.layoutNodes[layoutInfo.idToIndex[ele.data('id')]];\n if (options.boundingBox) {\n // then add extra bounding box constraint\n // Handle single node case where coseBB.w or coseBB.h is 0\n var pctX = coseBB.w === 0 ? 0.5 : (lnode.positionX - coseBB.x1) / coseBB.w;\n var pctY = coseBB.h === 0 ? 0.5 : (lnode.positionY - coseBB.y1) / coseBB.h;\n return {\n x: bb.x1 + pctX * bb.w,\n y: bb.y1 + pctY * bb.h\n };\n } else {\n return {\n x: lnode.positionX,\n y: lnode.positionY\n };\n }\n };\n};\n\n/**\n * @brief : Updates the positions of nodes in the network\n * @arg layoutInfo : LayoutInfo object\n * @arg cy : Cytoscape object\n * @arg options : Layout options\n */\nvar refreshPositions = function refreshPositions(layoutInfo, cy, options) {\n // var s = 'Refreshing positions';\n // logDebug(s);\n\n var layout = options.layout;\n var nodes = options.eles.nodes();\n var getScaledPos = getScaleInBoundsFn(layoutInfo, options, nodes);\n nodes.positions(getScaledPos);\n\n // Trigger layoutReady only on first call\n if (true !== layoutInfo.ready) {\n // s = 'Triggering layoutready';\n // logDebug(s);\n layoutInfo.ready = true;\n layout.one('layoutready', options.ready);\n layout.emit({\n type: 'layoutready',\n layout: this\n });\n }\n};\n\n/**\n * @brief : Logs a debug message in JS console, if DEBUG is ON\n */\n// var logDebug = function(text) {\n// if (DEBUG) {\n// console.debug(text);\n// }\n// };\n\n/**\n * @brief : Performs one iteration of the physical simulation\n * @arg layoutInfo : LayoutInfo object already initialized\n * @arg cy : Cytoscape object\n * @arg options : Layout options\n */\nvar step = function step(layoutInfo, options, _step) {\n // var s = \"\\n\\n###############################\";\n // s += \"\\nSTEP: \" + step;\n // s += \"\\n###############################\\n\";\n // logDebug(s);\n\n // Calculate node repulsions\n calculateNodeForces(layoutInfo, options);\n // Calculate edge forces\n calculateEdgeForces(layoutInfo);\n // Calculate gravity forces\n calculateGravityForces(layoutInfo, options);\n // Propagate forces from parent to child\n propagateForces(layoutInfo);\n // Update positions based on calculated forces\n updatePositions(layoutInfo);\n};\n\n/**\n * @brief : Computes the node repulsion forces\n */\nvar calculateNodeForces = function calculateNodeForces(layoutInfo, options) {\n // Go through each of the graphs in graphSet\n // Nodes only repel each other if they belong to the same graph\n // var s = 'calculateNodeForces';\n // logDebug(s);\n for (var i = 0; i < layoutInfo.graphSet.length; i++) {\n var graph = layoutInfo.graphSet[i];\n var numNodes = graph.length;\n\n // s = \"Set: \" + graph.toString();\n // logDebug(s);\n\n // Now get all the pairs of nodes\n // Only get each pair once, (A, B) = (B, A)\n for (var j = 0; j < numNodes; j++) {\n var node1 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j]]];\n for (var k = j + 1; k < numNodes; k++) {\n var node2 = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[k]]];\n nodeRepulsion(node1, node2, layoutInfo, options);\n }\n }\n }\n};\nvar randomDistance = function randomDistance(max) {\n return -1 + 2 * max * Math.random();\n};\n\n/**\n * @brief : Compute the node repulsion forces between a pair of nodes\n */\nvar nodeRepulsion = function nodeRepulsion(node1, node2, layoutInfo, options) {\n // var s = \"Node repulsion. Node1: \" + node1.id + \" Node2: \" + node2.id;\n\n var cmptId1 = node1.cmptId;\n var cmptId2 = node2.cmptId;\n if (cmptId1 !== cmptId2 && !layoutInfo.isCompound) {\n return;\n }\n\n // Get direction of line connecting both node centers\n var directionX = node2.positionX - node1.positionX;\n var directionY = node2.positionY - node1.positionY;\n var maxRandDist = 1;\n // s += \"\\ndirectionX: \" + directionX + \", directionY: \" + directionY;\n\n // If both centers are the same, apply a random force\n if (0 === directionX && 0 === directionY) {\n directionX = randomDistance(maxRandDist);\n directionY = randomDistance(maxRandDist);\n }\n var overlap = nodesOverlap(node1, node2, directionX, directionY);\n if (overlap > 0) {\n // s += \"\\nNodes DO overlap.\";\n // s += \"\\nOverlap: \" + overlap;\n // If nodes overlap, repulsion force is proportional\n // to the overlap\n var force = options.nodeOverlap * overlap;\n\n // Compute the module and components of the force vector\n var distance = Math.sqrt(directionX * directionX + directionY * directionY);\n // s += \"\\nDistance: \" + distance;\n var forceX = force * directionX / distance;\n var forceY = force * directionY / distance;\n } else {\n // s += \"\\nNodes do NOT overlap.\";\n // If there's no overlap, force is inversely proportional\n // to squared distance\n\n // Get clipping points for both nodes\n var point1 = findClippingPoint(node1, directionX, directionY);\n var point2 = findClippingPoint(node2, -1 * directionX, -1 * directionY);\n\n // Use clipping points to compute distance\n var distanceX = point2.x - point1.x;\n var distanceY = point2.y - point1.y;\n var distanceSqr = distanceX * distanceX + distanceY * distanceY;\n var distance = Math.sqrt(distanceSqr);\n // s += \"\\nDistance: \" + distance;\n\n // Compute the module and components of the force vector\n var force = (node1.nodeRepulsion + node2.nodeRepulsion) / distanceSqr;\n var forceX = force * distanceX / distance;\n var forceY = force * distanceY / distance;\n }\n\n // Apply force\n if (!node1.isLocked) {\n node1.offsetX -= forceX;\n node1.offsetY -= forceY;\n }\n if (!node2.isLocked) {\n node2.offsetX += forceX;\n node2.offsetY += forceY;\n }\n\n // s += \"\\nForceX: \" + forceX + \" ForceY: \" + forceY;\n // logDebug(s);\n\n return;\n};\n\n/**\n * @brief : Determines whether two nodes overlap or not\n * @return : Amount of overlapping (0 => no overlap)\n */\nvar nodesOverlap = function nodesOverlap(node1, node2, dX, dY) {\n if (dX > 0) {\n var overlapX = node1.maxX - node2.minX;\n } else {\n var overlapX = node2.maxX - node1.minX;\n }\n if (dY > 0) {\n var overlapY = node1.maxY - node2.minY;\n } else {\n var overlapY = node2.maxY - node1.minY;\n }\n if (overlapX >= 0 && overlapY >= 0) {\n return Math.sqrt(overlapX * overlapX + overlapY * overlapY);\n } else {\n return 0;\n }\n};\n\n/**\n * @brief : Finds the point in which an edge (direction dX, dY) intersects\n * the rectangular bounding box of it's source/target node\n */\nvar findClippingPoint = function findClippingPoint(node, dX, dY) {\n // Shorcuts\n var X = node.positionX;\n var Y = node.positionY;\n var H = node.height || 1;\n var W = node.width || 1;\n var dirSlope = dY / dX;\n var nodeSlope = H / W;\n\n // var s = 'Computing clipping point of node ' + node.id +\n // \" . Height: \" + H + \", Width: \" + W +\n // \"\\nDirection \" + dX + \", \" + dY;\n //\n // Compute intersection\n var res = {};\n\n // Case: Vertical direction (up)\n if (0 === dX && 0 < dY) {\n res.x = X;\n // s += \"\\nUp direction\";\n res.y = Y + H / 2;\n return res;\n }\n\n // Case: Vertical direction (down)\n if (0 === dX && 0 > dY) {\n res.x = X;\n res.y = Y + H / 2;\n // s += \"\\nDown direction\";\n\n return res;\n }\n\n // Case: Intersects the right border\n if (0 < dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) {\n res.x = X + W / 2;\n res.y = Y + W * dY / 2 / dX;\n // s += \"\\nRightborder\";\n\n return res;\n }\n\n // Case: Intersects the left border\n if (0 > dX && -1 * nodeSlope <= dirSlope && dirSlope <= nodeSlope) {\n res.x = X - W / 2;\n res.y = Y - W * dY / 2 / dX;\n // s += \"\\nLeftborder\";\n\n return res;\n }\n\n // Case: Intersects the top border\n if (0 < dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) {\n res.x = X + H * dX / 2 / dY;\n res.y = Y + H / 2;\n // s += \"\\nTop border\";\n\n return res;\n }\n\n // Case: Intersects the bottom border\n if (0 > dY && (dirSlope <= -1 * nodeSlope || dirSlope >= nodeSlope)) {\n res.x = X - H * dX / 2 / dY;\n res.y = Y - H / 2;\n // s += \"\\nBottom border\";\n\n return res;\n }\n\n // s += \"\\nClipping point found at \" + res.x + \", \" + res.y;\n // logDebug(s);\n return res;\n};\n\n/**\n * @brief : Calculates all edge forces\n */\nvar calculateEdgeForces = function calculateEdgeForces(layoutInfo, options) {\n // Iterate over all edges\n for (var i = 0; i < layoutInfo.edgeSize; i++) {\n // Get edge, source & target nodes\n var edge = layoutInfo.layoutEdges[i];\n var sourceIx = layoutInfo.idToIndex[edge.sourceId];\n var source = layoutInfo.layoutNodes[sourceIx];\n var targetIx = layoutInfo.idToIndex[edge.targetId];\n var target = layoutInfo.layoutNodes[targetIx];\n\n // Get direction of line connecting both node centers\n var directionX = target.positionX - source.positionX;\n var directionY = target.positionY - source.positionY;\n\n // If both centers are the same, do nothing.\n // A random force has already been applied as node repulsion\n if (0 === directionX && 0 === directionY) {\n continue;\n }\n\n // Get clipping points for both nodes\n var point1 = findClippingPoint(source, directionX, directionY);\n var point2 = findClippingPoint(target, -1 * directionX, -1 * directionY);\n var lx = point2.x - point1.x;\n var ly = point2.y - point1.y;\n var l = Math.sqrt(lx * lx + ly * ly);\n var force = Math.pow(edge.idealLength - l, 2) / edge.elasticity;\n if (0 !== l) {\n var forceX = force * lx / l;\n var forceY = force * ly / l;\n } else {\n var forceX = 0;\n var forceY = 0;\n }\n\n // Add this force to target and source nodes\n if (!source.isLocked) {\n source.offsetX += forceX;\n source.offsetY += forceY;\n }\n if (!target.isLocked) {\n target.offsetX -= forceX;\n target.offsetY -= forceY;\n }\n\n // var s = 'Edge force between nodes ' + source.id + ' and ' + target.id;\n // s += \"\\nDistance: \" + l + \" Force: (\" + forceX + \", \" + forceY + \")\";\n // logDebug(s);\n }\n};\n\n/**\n * @brief : Computes gravity forces for all nodes\n */\nvar calculateGravityForces = function calculateGravityForces(layoutInfo, options) {\n if (options.gravity === 0) {\n return;\n }\n var distThreshold = 1;\n\n // var s = 'calculateGravityForces';\n // logDebug(s);\n for (var i = 0; i < layoutInfo.graphSet.length; i++) {\n var graph = layoutInfo.graphSet[i];\n var numNodes = graph.length;\n\n // s = \"Set: \" + graph.toString();\n // logDebug(s);\n\n // Compute graph center\n if (0 === i) {\n var centerX = layoutInfo.clientHeight / 2;\n var centerY = layoutInfo.clientWidth / 2;\n } else {\n // Get Parent node for this graph, and use its position as center\n var temp = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[0]]];\n var parent = layoutInfo.layoutNodes[layoutInfo.idToIndex[temp.parentId]];\n var centerX = parent.positionX;\n var centerY = parent.positionY;\n }\n // s = \"Center found at: \" + centerX + \", \" + centerY;\n // logDebug(s);\n\n // Apply force to all nodes in graph\n for (var j = 0; j < numNodes; j++) {\n var node = layoutInfo.layoutNodes[layoutInfo.idToIndex[graph[j]]];\n // s = \"Node: \" + node.id;\n\n if (node.isLocked) {\n continue;\n }\n var dx = centerX - node.positionX;\n var dy = centerY - node.positionY;\n var d = Math.sqrt(dx * dx + dy * dy);\n if (d > distThreshold) {\n var fx = options.gravity * dx / d;\n var fy = options.gravity * dy / d;\n node.offsetX += fx;\n node.offsetY += fy;\n // s += \": Applied force: \" + fx + \", \" + fy;\n }\n // logDebug(s);\n }\n }\n};\n\n/**\n * @brief : This function propagates the existing offsets from\n * parent nodes to its descendents.\n * @arg layoutInfo : layoutInfo Object\n * @arg cy : cytoscape Object\n * @arg options : Layout options\n */\nvar propagateForces = function propagateForces(layoutInfo, options) {\n // Inline implementation of a queue, used for traversing the graph in BFS order\n var queue = [];\n var start = 0; // Points to the start the queue\n var end = -1; // Points to the end of the queue\n\n // logDebug('propagateForces');\n\n // Start by visiting the nodes in the root graph\n queue.push.apply(queue, layoutInfo.graphSet[0]);\n end += layoutInfo.graphSet[0].length;\n\n // Traverse the graph, level by level,\n while (start <= end) {\n // Get the node to visit and remove it from queue\n var nodeId = queue[start++];\n var nodeIndex = layoutInfo.idToIndex[nodeId];\n var node = layoutInfo.layoutNodes[nodeIndex];\n var children = node.children;\n\n // We only need to process the node if it's compound\n if (0 < children.length && !node.isLocked) {\n var offX = node.offsetX;\n var offY = node.offsetY;\n\n // var s = \"Propagating offset from parent node : \" + node.id +\n // \". OffsetX: \" + offX + \". OffsetY: \" + offY;\n // s += \"\\n Children: \" + children.toString();\n // logDebug(s);\n\n for (var i = 0; i < children.length; i++) {\n var childNode = layoutInfo.layoutNodes[layoutInfo.idToIndex[children[i]]];\n // Propagate offset\n childNode.offsetX += offX;\n childNode.offsetY += offY;\n // Add children to queue to be visited\n queue[++end] = children[i];\n }\n\n // Reset parent offsets\n node.offsetX = 0;\n node.offsetY = 0;\n }\n }\n};\n\n/**\n * @brief : Updates the layout model positions, based on\n * the accumulated forces\n */\nvar updatePositions = function updatePositions(layoutInfo, options) {\n // var s = 'Updating positions';\n // logDebug(s);\n\n // Reset boundaries for compound nodes\n for (var i = 0; i < layoutInfo.nodeSize; i++) {\n var n = layoutInfo.layoutNodes[i];\n if (0 < n.children.length) {\n // logDebug(\"Resetting boundaries of compound node: \" + n.id);\n n.maxX = undefined;\n n.minX = undefined;\n n.maxY = undefined;\n n.minY = undefined;\n }\n }\n for (var i = 0; i < layoutInfo.nodeSize; i++) {\n var n = layoutInfo.layoutNodes[i];\n if (0 < n.children.length || n.isLocked) {\n // No need to set compound or locked node position\n // logDebug(\"Skipping position update of node: \" + n.id);\n continue;\n }\n // s = \"Node: \" + n.id + \" Previous position: (\" +\n // n.positionX + \", \" + n.positionY + \").\";\n\n // Limit displacement in order to improve stability\n var tempForce = limitForce(n.offsetX, n.offsetY, layoutInfo.temperature);\n n.positionX += tempForce.x;\n n.positionY += tempForce.y;\n n.offsetX = 0;\n n.offsetY = 0;\n n.minX = n.positionX - n.width;\n n.maxX = n.positionX + n.width;\n n.minY = n.positionY - n.height;\n n.maxY = n.positionY + n.height;\n // s += \" New Position: (\" + n.positionX + \", \" + n.positionY + \").\";\n // logDebug(s);\n\n // Update ancestry boudaries\n _updateAncestryBoundaries(n, layoutInfo);\n }\n\n // Update size, position of compund nodes\n for (var i = 0; i < layoutInfo.nodeSize; i++) {\n var n = layoutInfo.layoutNodes[i];\n if (0 < n.children.length && !n.isLocked) {\n n.positionX = (n.maxX + n.minX) / 2;\n n.positionY = (n.maxY + n.minY) / 2;\n n.width = n.maxX - n.minX;\n n.height = n.maxY - n.minY;\n // s = \"Updating position, size of compound node \" + n.id;\n // s += \"\\nPositionX: \" + n.positionX + \", PositionY: \" + n.positionY;\n // s += \"\\nWidth: \" + n.width + \", Height: \" + n.height;\n // logDebug(s);\n }\n }\n};\n\n/**\n * @brief : Limits a force (forceX, forceY) to be not\n * greater (in modulo) than max.\n 8 Preserves force direction.\n */\nvar limitForce = function limitForce(forceX, forceY, max) {\n // var s = \"Limiting force: (\" + forceX + \", \" + forceY + \"). Max: \" + max;\n var force = Math.sqrt(forceX * forceX + forceY * forceY);\n if (force > max) {\n var res = {\n x: max * forceX / force,\n y: max * forceY / force\n };\n } else {\n var res = {\n x: forceX,\n y: forceY\n };\n }\n\n // s += \".\\nResult: (\" + res.x + \", \" + res.y + \")\";\n // logDebug(s);\n\n return res;\n};\n\n/**\n * @brief : Function used for keeping track of compound node\n * sizes, since they should bound all their subnodes.\n */\nvar _updateAncestryBoundaries = function updateAncestryBoundaries(node, layoutInfo) {\n // var s = \"Propagating new position/size of node \" + node.id;\n var parentId = node.parentId;\n if (null == parentId) {\n // If there's no parent, we are done\n // s += \". No parent node.\";\n // logDebug(s);\n return;\n }\n\n // Get Parent Node\n var p = layoutInfo.layoutNodes[layoutInfo.idToIndex[parentId]];\n var flag = false;\n\n // MaxX\n if (null == p.maxX || node.maxX + p.padRight > p.maxX) {\n p.maxX = node.maxX + p.padRight;\n flag = true;\n // s += \"\\nNew maxX for parent node \" + p.id + \": \" + p.maxX;\n }\n\n // MinX\n if (null == p.minX || node.minX - p.padLeft < p.minX) {\n p.minX = node.minX - p.padLeft;\n flag = true;\n // s += \"\\nNew minX for parent node \" + p.id + \": \" + p.minX;\n }\n\n // MaxY\n if (null == p.maxY || node.maxY + p.padBottom > p.maxY) {\n p.maxY = node.maxY + p.padBottom;\n flag = true;\n // s += \"\\nNew maxY for parent node \" + p.id + \": \" + p.maxY;\n }\n\n // MinY\n if (null == p.minY || node.minY - p.padTop < p.minY) {\n p.minY = node.minY - p.padTop;\n flag = true;\n // s += \"\\nNew minY for parent node \" + p.id + \": \" + p.minY;\n }\n\n // If updated boundaries, propagate changes upward\n if (flag) {\n // logDebug(s);\n return _updateAncestryBoundaries(p, layoutInfo);\n }\n\n // s += \". No changes in boundaries/position of parent node \" + p.id;\n // logDebug(s);\n return;\n};\nvar separateComponents = function separateComponents(layoutInfo, options) {\n var nodes = layoutInfo.layoutNodes;\n var components = [];\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n var cid = node.cmptId;\n var component = components[cid] = components[cid] || [];\n component.push(node);\n }\n var totalA = 0;\n for (var i = 0; i < components.length; i++) {\n var c = components[i];\n if (!c) {\n continue;\n }\n c.x1 = Infinity;\n c.x2 = -Infinity;\n c.y1 = Infinity;\n c.y2 = -Infinity;\n for (var j = 0; j < c.length; j++) {\n var n = c[j];\n c.x1 = Math.min(c.x1, n.positionX - n.width / 2);\n c.x2 = Math.max(c.x2, n.positionX + n.width / 2);\n c.y1 = Math.min(c.y1, n.positionY - n.height / 2);\n c.y2 = Math.max(c.y2, n.positionY + n.height / 2);\n }\n c.w = c.x2 - c.x1;\n c.h = c.y2 - c.y1;\n totalA += c.w * c.h;\n }\n components.sort(function (c1, c2) {\n return c2.w * c2.h - c1.w * c1.h;\n });\n var x = 0;\n var y = 0;\n var usedW = 0;\n var rowH = 0;\n var maxRowW = Math.sqrt(totalA) * layoutInfo.clientWidth / layoutInfo.clientHeight;\n for (var i = 0; i < components.length; i++) {\n var c = components[i];\n if (!c) {\n continue;\n }\n for (var j = 0; j < c.length; j++) {\n var n = c[j];\n if (!n.isLocked) {\n n.positionX += x - c.x1;\n n.positionY += y - c.y1;\n }\n }\n x += c.w + options.componentSpacing;\n usedW += c.w + options.componentSpacing;\n rowH = Math.max(rowH, c.h);\n if (usedW > maxRowW) {\n y += rowH + options.componentSpacing;\n x = 0;\n usedW = 0;\n rowH = 0;\n }\n }\n};\n\nvar defaults$3 = {\n fit: true,\n // whether to fit the viewport to the graph\n padding: 30,\n // padding used on fit\n boundingBox: undefined,\n // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }\n avoidOverlap: true,\n // prevents node overlap, may overflow boundingBox if not enough space\n avoidOverlapPadding: 10,\n // extra spacing around nodes when avoidOverlap: true\n nodeDimensionsIncludeLabels: false,\n // Excludes the label when calculating node bounding boxes for the layout algorithm\n spacingFactor: undefined,\n // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up\n condense: false,\n // uses all available space on false, uses minimal space on true\n rows: undefined,\n // force num of rows in the grid\n cols: undefined,\n // force num of columns in the grid\n position: function position(node) {},\n // returns { row, col } for element\n sort: undefined,\n // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') }\n animate: false,\n // whether to transition the node positions\n animationDuration: 500,\n // duration of animation in ms if enabled\n animationEasing: undefined,\n // easing of animation if enabled\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts\n ready: undefined,\n // callback on layoutready\n stop: undefined,\n // callback on layoutstop\n transform: function transform(node, position) {\n return position;\n } // transform a given node position. Useful for changing flow direction in discrete layouts \n};\nfunction GridLayout(options) {\n this.options = extend({}, defaults$3, options);\n}\nGridLayout.prototype.run = function () {\n var params = this.options;\n var options = params;\n var cy = params.cy;\n var eles = options.eles;\n var nodes = eles.nodes().not(':parent');\n if (options.sort) {\n nodes = nodes.sort(options.sort);\n }\n var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : {\n x1: 0,\n y1: 0,\n w: cy.width(),\n h: cy.height()\n });\n if (bb.h === 0 || bb.w === 0) {\n eles.nodes().layoutPositions(this, options, function (ele) {\n return {\n x: bb.x1,\n y: bb.y1\n };\n });\n } else {\n // width/height * splits^2 = cells where splits is number of times to split width\n var cells = nodes.size();\n var splits = Math.sqrt(cells * bb.h / bb.w);\n var rows = Math.round(splits);\n var cols = Math.round(bb.w / bb.h * splits);\n var small = function small(val) {\n if (val == null) {\n return Math.min(rows, cols);\n } else {\n var min = Math.min(rows, cols);\n if (min == rows) {\n rows = val;\n } else {\n cols = val;\n }\n }\n };\n var large = function large(val) {\n if (val == null) {\n return Math.max(rows, cols);\n } else {\n var max = Math.max(rows, cols);\n if (max == rows) {\n rows = val;\n } else {\n cols = val;\n }\n }\n };\n var oRows = options.rows;\n var oCols = options.cols != null ? options.cols : options.columns;\n\n // if rows or columns were set in options, use those values\n if (oRows != null && oCols != null) {\n rows = oRows;\n cols = oCols;\n } else if (oRows != null && oCols == null) {\n rows = oRows;\n cols = Math.ceil(cells / rows);\n } else if (oRows == null && oCols != null) {\n cols = oCols;\n rows = Math.ceil(cells / cols);\n }\n\n // otherwise use the automatic values and adjust accordingly\n\n // if rounding was up, see if we can reduce rows or columns\n else if (cols * rows > cells) {\n var sm = small();\n var lg = large();\n\n // reducing the small side takes away the most cells, so try it first\n if ((sm - 1) * lg >= cells) {\n small(sm - 1);\n } else if ((lg - 1) * sm >= cells) {\n large(lg - 1);\n }\n } else {\n // if rounding was too low, add rows or columns\n while (cols * rows < cells) {\n var _sm = small();\n var _lg = large();\n\n // try to add to larger side first (adds less in multiplication)\n if ((_lg + 1) * _sm >= cells) {\n large(_lg + 1);\n } else {\n small(_sm + 1);\n }\n }\n }\n var cellWidth = bb.w / cols;\n var cellHeight = bb.h / rows;\n if (options.condense) {\n cellWidth = 0;\n cellHeight = 0;\n }\n if (options.avoidOverlap) {\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n var pos = node._private.position;\n if (pos.x == null || pos.y == null) {\n // for bb\n pos.x = 0;\n pos.y = 0;\n }\n var nbb = node.layoutDimensions(options);\n var p = options.avoidOverlapPadding;\n var w = nbb.w + p;\n var h = nbb.h + p;\n cellWidth = Math.max(cellWidth, w);\n cellHeight = Math.max(cellHeight, h);\n }\n }\n var cellUsed = {}; // e.g. 'c-0-2' => true\n\n var used = function used(row, col) {\n return cellUsed['c-' + row + '-' + col] ? true : false;\n };\n var use = function use(row, col) {\n cellUsed['c-' + row + '-' + col] = true;\n };\n\n // to keep track of current cell position\n var row = 0;\n var col = 0;\n var moveToNextCell = function moveToNextCell() {\n col++;\n if (col >= cols) {\n col = 0;\n row++;\n }\n };\n\n // get a cache of all the manual positions\n var id2manPos = {};\n for (var _i = 0; _i < nodes.length; _i++) {\n var _node = nodes[_i];\n var rcPos = options.position(_node);\n if (rcPos && (rcPos.row !== undefined || rcPos.col !== undefined)) {\n // must have at least row or col def'd\n var _pos = {\n row: rcPos.row,\n col: rcPos.col\n };\n if (_pos.col === undefined) {\n // find unused col\n _pos.col = 0;\n while (used(_pos.row, _pos.col)) {\n _pos.col++;\n }\n } else if (_pos.row === undefined) {\n // find unused row\n _pos.row = 0;\n while (used(_pos.row, _pos.col)) {\n _pos.row++;\n }\n }\n id2manPos[_node.id()] = _pos;\n use(_pos.row, _pos.col);\n }\n }\n var getPos = function getPos(element, i) {\n var x, y;\n if (element.locked() || element.isParent()) {\n return false;\n }\n\n // see if we have a manual position set\n var rcPos = id2manPos[element.id()];\n if (rcPos) {\n x = rcPos.col * cellWidth + cellWidth / 2 + bb.x1;\n y = rcPos.row * cellHeight + cellHeight / 2 + bb.y1;\n } else {\n // otherwise set automatically\n\n while (used(row, col)) {\n moveToNextCell();\n }\n x = col * cellWidth + cellWidth / 2 + bb.x1;\n y = row * cellHeight + cellHeight / 2 + bb.y1;\n use(row, col);\n moveToNextCell();\n }\n return {\n x: x,\n y: y\n };\n };\n nodes.layoutPositions(this, options, getPos);\n }\n return this; // chaining\n};\n\n// default layout options\nvar defaults$2 = {\n ready: function ready() {},\n // on layoutready\n stop: function stop() {} // on layoutstop\n};\n\n// constructor\n// options : object containing layout options\nfunction NullLayout(options) {\n this.options = extend({}, defaults$2, options);\n}\n\n// runs the layout\nNullLayout.prototype.run = function () {\n var options = this.options;\n var eles = options.eles; // elements to consider in the layout\n var layout = this;\n\n // cy is automatically populated for us in the constructor\n // (disable eslint for next line as this serves as example layout code to external developers)\n // eslint-disable-next-line no-unused-vars\n options.cy;\n layout.emit('layoutstart');\n\n // puts all nodes at (0, 0)\n // n.b. most layouts would use layoutPositions(), instead of positions() and manual events\n eles.nodes().positions(function () {\n return {\n x: 0,\n y: 0\n };\n });\n\n // trigger layoutready when each node has had its position set at least once\n layout.one('layoutready', options.ready);\n layout.emit('layoutready');\n\n // trigger layoutstop when the layout stops (e.g. finishes)\n layout.one('layoutstop', options.stop);\n layout.emit('layoutstop');\n return this; // chaining\n};\n\n// called on continuous layouts to stop them before they finish\nNullLayout.prototype.stop = function () {\n return this; // chaining\n};\n\nvar defaults$1 = {\n positions: undefined,\n // map of (node id) => (position obj); or function(node){ return somPos; }\n zoom: undefined,\n // the zoom level to set (prob want fit = false if set)\n pan: undefined,\n // the pan level to set (prob want fit = false if set)\n fit: true,\n // whether to fit to viewport\n padding: 30,\n // padding on fit\n spacingFactor: undefined,\n // Applies a multiplicative factor (>0) to expand or compress the overall area that the nodes take up\n animate: false,\n // whether to transition the node positions\n animationDuration: 500,\n // duration of animation in ms if enabled\n animationEasing: undefined,\n // easing of animation if enabled\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts\n ready: undefined,\n // callback on layoutready\n stop: undefined,\n // callback on layoutstop\n transform: function transform(node, position) {\n return position;\n } // transform a given node position. Useful for changing flow direction in discrete layouts\n};\nfunction PresetLayout(options) {\n this.options = extend({}, defaults$1, options);\n}\nPresetLayout.prototype.run = function () {\n var options = this.options;\n var eles = options.eles;\n var nodes = eles.nodes();\n var posIsFn = fn$6(options.positions);\n function getPosition(node) {\n if (options.positions == null) {\n return copyPosition(node.position());\n }\n if (posIsFn) {\n return options.positions(node);\n }\n var pos = options.positions[node._private.data.id];\n if (pos == null) {\n return null;\n }\n return pos;\n }\n nodes.layoutPositions(this, options, function (node, i) {\n var position = getPosition(node);\n if (node.locked() || position == null) {\n return false;\n }\n return position;\n });\n return this; // chaining\n};\n\nvar defaults = {\n fit: true,\n // whether to fit to viewport\n padding: 30,\n // fit padding\n boundingBox: undefined,\n // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }\n animate: false,\n // whether to transition the node positions\n animationDuration: 500,\n // duration of animation in ms if enabled\n animationEasing: undefined,\n // easing of animation if enabled\n animateFilter: function animateFilter(node, i) {\n return true;\n },\n // a function that determines whether the node should be animated. All nodes animated by default on animate enabled. Non-animated nodes are positioned immediately when the layout starts\n ready: undefined,\n // callback on layoutready\n stop: undefined,\n // callback on layoutstop\n transform: function transform(node, position) {\n return position;\n } // transform a given node position. Useful for changing flow direction in discrete layouts \n};\nfunction RandomLayout(options) {\n this.options = extend({}, defaults, options);\n}\nRandomLayout.prototype.run = function () {\n var options = this.options;\n var cy = options.cy;\n var eles = options.eles;\n var bb = makeBoundingBox(options.boundingBox ? options.boundingBox : {\n x1: 0,\n y1: 0,\n w: cy.width(),\n h: cy.height()\n });\n var getPos = function getPos(node, i) {\n return {\n x: bb.x1 + Math.round(Math.random() * bb.w),\n y: bb.y1 + Math.round(Math.random() * bb.h)\n };\n };\n eles.nodes().layoutPositions(this, options, getPos);\n return this; // chaining\n};\n\nvar layout = [{\n name: 'breadthfirst',\n impl: BreadthFirstLayout\n}, {\n name: 'circle',\n impl: CircleLayout\n}, {\n name: 'concentric',\n impl: ConcentricLayout\n}, {\n name: 'cose',\n impl: CoseLayout\n}, {\n name: 'grid',\n impl: GridLayout\n}, {\n name: 'null',\n impl: NullLayout\n}, {\n name: 'preset',\n impl: PresetLayout\n}, {\n name: 'random',\n impl: RandomLayout\n}];\n\nfunction NullRenderer(options) {\n this.options = options;\n this.notifications = 0; // for testing\n}\nvar noop = function noop() {};\nvar throwImgErr = function throwImgErr() {\n throw new Error('A headless instance can not render images');\n};\nNullRenderer.prototype = {\n recalculateRenderedStyle: noop,\n notify: function notify() {\n this.notifications++;\n },\n init: noop,\n isHeadless: function isHeadless() {\n return true;\n },\n png: throwImgErr,\n jpg: throwImgErr\n};\n\nvar BRp$f = {};\nBRp$f.arrowShapeWidth = 0.3;\nBRp$f.registerArrowShapes = function () {\n var arrowShapes = this.arrowShapes = {};\n var renderer = this;\n\n // Contract for arrow shapes:\n // 0, 0 is arrow tip\n // (0, 1) is direction towards node\n // (1, 0) is right\n //\n // functional api:\n // collide: check x, y in shape\n // roughCollide: called before collide, no false negatives\n // draw: draw\n // spacing: dist(arrowTip, nodeBoundary)\n // gap: dist(edgeTip, nodeBoundary), edgeTip may != arrowTip\n\n var bbCollide = function bbCollide(x, y, size, angle, translation, edgeWidth, padding) {\n var x1 = translation.x - size / 2 - padding;\n var x2 = translation.x + size / 2 + padding;\n var y1 = translation.y - size / 2 - padding;\n var y2 = translation.y + size / 2 + padding;\n var inside = x1 <= x && x <= x2 && y1 <= y && y <= y2;\n return inside;\n };\n var transform = function transform(x, y, size, angle, translation) {\n var xRotated = x * Math.cos(angle) - y * Math.sin(angle);\n var yRotated = x * Math.sin(angle) + y * Math.cos(angle);\n var xScaled = xRotated * size;\n var yScaled = yRotated * size;\n var xTranslated = xScaled + translation.x;\n var yTranslated = yScaled + translation.y;\n return {\n x: xTranslated,\n y: yTranslated\n };\n };\n var transformPoints = function transformPoints(pts, size, angle, translation) {\n var retPts = [];\n for (var i = 0; i < pts.length; i += 2) {\n var x = pts[i];\n var y = pts[i + 1];\n retPts.push(transform(x, y, size, angle, translation));\n }\n return retPts;\n };\n var pointsToArr = function pointsToArr(pts) {\n var ret = [];\n for (var i = 0; i < pts.length; i++) {\n var p = pts[i];\n ret.push(p.x, p.y);\n }\n return ret;\n };\n var standardGap = function standardGap(edge) {\n return edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').pfValue * 2;\n };\n var defineArrowShape = function defineArrowShape(name, defn) {\n if (string(defn)) {\n defn = arrowShapes[defn];\n }\n arrowShapes[name] = extend({\n name: name,\n points: [-0.15, -0.3, 0.15, -0.3, 0.15, 0.3, -0.15, 0.3],\n collide: function collide(x, y, size, angle, translation, padding) {\n var points = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation));\n var inside = pointInsidePolygonPoints(x, y, points);\n return inside;\n },\n roughCollide: bbCollide,\n draw: function draw(context, size, angle, translation) {\n var points = transformPoints(this.points, size, angle, translation);\n renderer.arrowShapeImpl('polygon')(context, points);\n },\n spacing: function spacing(edge) {\n return 0;\n },\n gap: standardGap\n }, defn);\n };\n defineArrowShape('none', {\n collide: falsify,\n roughCollide: falsify,\n draw: noop$1,\n spacing: zeroify,\n gap: zeroify\n });\n defineArrowShape('triangle', {\n points: [-0.15, -0.3, 0, 0, 0.15, -0.3]\n });\n defineArrowShape('arrow', 'triangle');\n defineArrowShape('triangle-backcurve', {\n points: arrowShapes['triangle'].points,\n controlPoint: [0, -0.15],\n roughCollide: bbCollide,\n draw: function draw(context, size, angle, translation, edgeWidth) {\n var ptsTrans = transformPoints(this.points, size, angle, translation);\n var ctrlPt = this.controlPoint;\n var ctrlPtTrans = transform(ctrlPt[0], ctrlPt[1], size, angle, translation);\n renderer.arrowShapeImpl(this.name)(context, ptsTrans, ctrlPtTrans);\n },\n gap: function gap(edge) {\n return standardGap(edge) * 0.8;\n }\n });\n defineArrowShape('triangle-tee', {\n points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0],\n pointsTee: [-0.15, -0.4, -0.15, -0.5, 0.15, -0.5, 0.15, -0.4],\n collide: function collide(x, y, size, angle, translation, edgeWidth, padding) {\n var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation));\n var teePts = pointsToArr(transformPoints(this.pointsTee, size + 2 * padding, angle, translation));\n var inside = pointInsidePolygonPoints(x, y, triPts) || pointInsidePolygonPoints(x, y, teePts);\n return inside;\n },\n draw: function draw(context, size, angle, translation, edgeWidth) {\n var triPts = transformPoints(this.points, size, angle, translation);\n var teePts = transformPoints(this.pointsTee, size, angle, translation);\n renderer.arrowShapeImpl(this.name)(context, triPts, teePts);\n }\n });\n defineArrowShape('circle-triangle', {\n radius: 0.15,\n pointsTr: [0, -0.15, 0.15, -0.45, -0.15, -0.45, 0, -0.15],\n collide: function collide(x, y, size, angle, translation, edgeWidth, padding) {\n var t = translation;\n var circleInside = Math.pow(t.x - x, 2) + Math.pow(t.y - y, 2) <= Math.pow((size + 2 * padding) * this.radius, 2);\n var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation));\n return pointInsidePolygonPoints(x, y, triPts) || circleInside;\n },\n draw: function draw(context, size, angle, translation, edgeWidth) {\n var triPts = transformPoints(this.pointsTr, size, angle, translation);\n renderer.arrowShapeImpl(this.name)(context, triPts, translation.x, translation.y, this.radius * size);\n },\n spacing: function spacing(edge) {\n return renderer.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.radius;\n }\n });\n defineArrowShape('triangle-cross', {\n points: [0, 0, 0.15, -0.3, -0.15, -0.3, 0, 0],\n baseCrossLinePts: [-0.15, -0.4,\n // first half of the rectangle\n -0.15, -0.4, 0.15, -0.4,\n // second half of the rectangle\n 0.15, -0.4],\n crossLinePts: function crossLinePts(size, edgeWidth) {\n // shift points so that the distance between the cross points matches edge width\n var p = this.baseCrossLinePts.slice();\n var shiftFactor = edgeWidth / size;\n var y0 = 3;\n var y1 = 5;\n p[y0] = p[y0] - shiftFactor;\n p[y1] = p[y1] - shiftFactor;\n return p;\n },\n collide: function collide(x, y, size, angle, translation, edgeWidth, padding) {\n var triPts = pointsToArr(transformPoints(this.points, size + 2 * padding, angle, translation));\n var teePts = pointsToArr(transformPoints(this.crossLinePts(size, edgeWidth), size + 2 * padding, angle, translation));\n var inside = pointInsidePolygonPoints(x, y, triPts) || pointInsidePolygonPoints(x, y, teePts);\n return inside;\n },\n draw: function draw(context, size, angle, translation, edgeWidth) {\n var triPts = transformPoints(this.points, size, angle, translation);\n var crossLinePts = transformPoints(this.crossLinePts(size, edgeWidth), size, angle, translation);\n renderer.arrowShapeImpl(this.name)(context, triPts, crossLinePts);\n }\n });\n defineArrowShape('vee', {\n points: [-0.15, -0.3, 0, 0, 0.15, -0.3, 0, -0.15],\n gap: function gap(edge) {\n return standardGap(edge) * 0.525;\n }\n });\n defineArrowShape('circle', {\n radius: 0.15,\n collide: function collide(x, y, size, angle, translation, edgeWidth, padding) {\n var t = translation;\n var inside = Math.pow(t.x - x, 2) + Math.pow(t.y - y, 2) <= Math.pow((size + 2 * padding) * this.radius, 2);\n return inside;\n },\n draw: function draw(context, size, angle, translation, edgeWidth) {\n renderer.arrowShapeImpl(this.name)(context, translation.x, translation.y, this.radius * size);\n },\n spacing: function spacing(edge) {\n return renderer.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.radius;\n }\n });\n defineArrowShape('tee', {\n points: [-0.15, 0, -0.15, -0.1, 0.15, -0.1, 0.15, 0],\n spacing: function spacing(edge) {\n return 1;\n },\n gap: function gap(edge) {\n return 1;\n }\n });\n defineArrowShape('square', {\n points: [-0.15, 0.00, 0.15, 0.00, 0.15, -0.3, -0.15, -0.3]\n });\n defineArrowShape('diamond', {\n points: [-0.15, -0.15, 0, -0.3, 0.15, -0.15, 0, 0],\n gap: function gap(edge) {\n return edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').value;\n }\n });\n defineArrowShape('chevron', {\n points: [0, 0, -0.15, -0.15, -0.1, -0.2, 0, -0.1, 0.1, -0.2, 0.15, -0.15],\n gap: function gap(edge) {\n return 0.95 * edge.pstyle('width').pfValue * edge.pstyle('arrow-scale').value;\n }\n });\n};\n\nvar BRp$e = {};\n\n// Project mouse\nBRp$e.projectIntoViewport = function (clientX, clientY) {\n var cy = this.cy;\n var offsets = this.findContainerClientCoords();\n var offsetLeft = offsets[0];\n var offsetTop = offsets[1];\n var scale = offsets[4];\n var pan = cy.pan();\n var zoom = cy.zoom();\n var x = ((clientX - offsetLeft) / scale - pan.x) / zoom;\n var y = ((clientY - offsetTop) / scale - pan.y) / zoom;\n return [x, y];\n};\nBRp$e.findContainerClientCoords = function () {\n if (this.containerBB) {\n return this.containerBB;\n }\n var container = this.container;\n var rect = container.getBoundingClientRect();\n var style = this.cy.window().getComputedStyle(container);\n var styleValue = function styleValue(name) {\n return parseFloat(style.getPropertyValue(name));\n };\n var padding = {\n left: styleValue('padding-left'),\n right: styleValue('padding-right'),\n top: styleValue('padding-top'),\n bottom: styleValue('padding-bottom')\n };\n var border = {\n left: styleValue('border-left-width'),\n right: styleValue('border-right-width'),\n top: styleValue('border-top-width'),\n bottom: styleValue('border-bottom-width')\n };\n var clientWidth = container.clientWidth;\n var clientHeight = container.clientHeight;\n var paddingHor = padding.left + padding.right;\n var paddingVer = padding.top + padding.bottom;\n var borderHor = border.left + border.right;\n var scale = rect.width / (clientWidth + borderHor);\n var unscaledW = clientWidth - paddingHor;\n var unscaledH = clientHeight - paddingVer;\n var left = rect.left + padding.left + border.left;\n var top = rect.top + padding.top + border.top;\n return this.containerBB = [left, top, unscaledW, unscaledH, scale];\n};\nBRp$e.invalidateContainerClientCoordsCache = function () {\n this.containerBB = null;\n};\nBRp$e.findNearestElement = function (x, y, interactiveElementsOnly, isTouch) {\n return this.findNearestElements(x, y, interactiveElementsOnly, isTouch)[0];\n};\nBRp$e.findNearestElements = function (x, y, interactiveElementsOnly, isTouch) {\n var self = this;\n var r = this;\n var eles = r.getCachedZSortedEles();\n var near = []; // 1 node max, 1 edge max\n var zoom = r.cy.zoom();\n var hasCompounds = r.cy.hasCompoundNodes();\n var edgeThreshold = (isTouch ? 24 : 8) / zoom;\n var nodeThreshold = (isTouch ? 8 : 2) / zoom;\n var labelThreshold = (isTouch ? 8 : 2) / zoom;\n var minSqDist = Infinity;\n var nearEdge;\n var nearNode;\n if (interactiveElementsOnly) {\n eles = eles.interactive;\n }\n function addEle(ele, sqDist) {\n if (ele.isNode()) {\n if (nearNode) {\n return; // can't replace node\n } else {\n nearNode = ele;\n near.push(ele);\n }\n }\n if (ele.isEdge() && (sqDist == null || sqDist < minSqDist)) {\n if (nearEdge) {\n // then replace existing edge\n // can replace only if same z-index\n if (nearEdge.pstyle('z-compound-depth').value === ele.pstyle('z-compound-depth').value && nearEdge.pstyle('z-compound-depth').value === ele.pstyle('z-compound-depth').value) {\n for (var i = 0; i < near.length; i++) {\n if (near[i].isEdge()) {\n near[i] = ele;\n nearEdge = ele;\n minSqDist = sqDist != null ? sqDist : minSqDist;\n break;\n }\n }\n }\n } else {\n near.push(ele);\n nearEdge = ele;\n minSqDist = sqDist != null ? sqDist : minSqDist;\n }\n }\n }\n function checkNode(node) {\n var width = node.outerWidth() + 2 * nodeThreshold;\n var height = node.outerHeight() + 2 * nodeThreshold;\n var hw = width / 2;\n var hh = height / 2;\n var pos = node.position();\n var cornerRadius = node.pstyle('corner-radius').value === 'auto' ? 'auto' : node.pstyle('corner-radius').pfValue;\n var rs = node._private.rscratch;\n if (pos.x - hw <= x && x <= pos.x + hw // bb check x\n && pos.y - hh <= y && y <= pos.y + hh // bb check y\n ) {\n var shape = r.nodeShapes[self.getNodeShape(node)];\n if (shape.checkPoint(x, y, 0, width, height, pos.x, pos.y, cornerRadius, rs)) {\n addEle(node, 0);\n return true;\n }\n }\n }\n function checkEdge(edge) {\n var _p = edge._private;\n var rs = _p.rscratch;\n var styleWidth = edge.pstyle('width').pfValue;\n var scale = edge.pstyle('arrow-scale').value;\n var width = styleWidth / 2 + edgeThreshold; // more like a distance radius from centre\n var widthSq = width * width;\n var width2 = width * 2;\n var src = _p.source;\n var tgt = _p.target;\n var sqDist;\n if (rs.edgeType === 'segments' || rs.edgeType === 'straight' || rs.edgeType === 'haystack') {\n var pts = rs.allpts;\n for (var i = 0; i + 3 < pts.length; i += 2) {\n if (inLineVicinity(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], width2) && widthSq > (sqDist = sqdistToFiniteLine(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3]))) {\n addEle(edge, sqDist);\n return true;\n }\n }\n } else if (rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound') {\n var pts = rs.allpts;\n for (var i = 0; i + 5 < rs.allpts.length; i += 4) {\n if (inBezierVicinity(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], pts[i + 4], pts[i + 5], width2) && widthSq > (sqDist = sqdistToQuadraticBezier(x, y, pts[i], pts[i + 1], pts[i + 2], pts[i + 3], pts[i + 4], pts[i + 5]))) {\n addEle(edge, sqDist);\n return true;\n }\n }\n }\n\n // if we're close to the edge but didn't hit it, maybe we hit its arrows\n\n var src = src || _p.source;\n var tgt = tgt || _p.target;\n var arSize = self.getArrowWidth(styleWidth, scale);\n var arrows = [{\n name: 'source',\n x: rs.arrowStartX,\n y: rs.arrowStartY,\n angle: rs.srcArrowAngle\n }, {\n name: 'target',\n x: rs.arrowEndX,\n y: rs.arrowEndY,\n angle: rs.tgtArrowAngle\n }, {\n name: 'mid-source',\n x: rs.midX,\n y: rs.midY,\n angle: rs.midsrcArrowAngle\n }, {\n name: 'mid-target',\n x: rs.midX,\n y: rs.midY,\n angle: rs.midtgtArrowAngle\n }];\n for (var i = 0; i < arrows.length; i++) {\n var ar = arrows[i];\n var shape = r.arrowShapes[edge.pstyle(ar.name + '-arrow-shape').value];\n var edgeWidth = edge.pstyle('width').pfValue;\n if (shape.roughCollide(x, y, arSize, ar.angle, {\n x: ar.x,\n y: ar.y\n }, edgeWidth, edgeThreshold) && shape.collide(x, y, arSize, ar.angle, {\n x: ar.x,\n y: ar.y\n }, edgeWidth, edgeThreshold)) {\n addEle(edge);\n return true;\n }\n }\n\n // for compound graphs, hitting edge may actually want a connected node instead (b/c edge may have greater z-index precedence)\n if (hasCompounds && near.length > 0) {\n checkNode(src);\n checkNode(tgt);\n }\n }\n function preprop(obj, name, pre) {\n return getPrefixedProperty(obj, name, pre);\n }\n function checkLabel(ele, prefix) {\n var _p = ele._private;\n var th = labelThreshold;\n var prefixDash;\n if (prefix) {\n prefixDash = prefix + '-';\n } else {\n prefixDash = '';\n }\n ele.boundingBox();\n var bb = _p.labelBounds[prefix || 'main'];\n var text = ele.pstyle(prefixDash + 'label').value;\n var eventsEnabled = ele.pstyle('text-events').strValue === 'yes';\n if (!eventsEnabled || !text) {\n return;\n }\n var lx = preprop(_p.rscratch, 'labelX', prefix);\n var ly = preprop(_p.rscratch, 'labelY', prefix);\n var theta = preprop(_p.rscratch, 'labelAngle', prefix);\n var ox = ele.pstyle(prefixDash + 'text-margin-x').pfValue;\n var oy = ele.pstyle(prefixDash + 'text-margin-y').pfValue;\n var lx1 = bb.x1 - th - ox; // (-ox, -oy) as bb already includes margin\n var lx2 = bb.x2 + th - ox; // and rotation is about (lx, ly)\n var ly1 = bb.y1 - th - oy;\n var ly2 = bb.y2 + th - oy;\n if (theta) {\n var cos = Math.cos(theta);\n var sin = Math.sin(theta);\n var rotate = function rotate(x, y) {\n x = x - lx;\n y = y - ly;\n return {\n x: x * cos - y * sin + lx,\n y: x * sin + y * cos + ly\n };\n };\n var px1y1 = rotate(lx1, ly1);\n var px1y2 = rotate(lx1, ly2);\n var px2y1 = rotate(lx2, ly1);\n var px2y2 = rotate(lx2, ly2);\n var points = [\n // with the margin added after the rotation is applied\n px1y1.x + ox, px1y1.y + oy, px2y1.x + ox, px2y1.y + oy, px2y2.x + ox, px2y2.y + oy, px1y2.x + ox, px1y2.y + oy];\n if (pointInsidePolygonPoints(x, y, points)) {\n addEle(ele);\n return true;\n }\n } else {\n // do a cheaper bb check\n if (inBoundingBox(bb, x, y)) {\n addEle(ele);\n return true;\n }\n }\n }\n for (var i = eles.length - 1; i >= 0; i--) {\n // reverse order for precedence\n var ele = eles[i];\n if (ele.isNode()) {\n checkNode(ele) || checkLabel(ele);\n } else {\n // then edge\n checkEdge(ele) || checkLabel(ele) || checkLabel(ele, 'source') || checkLabel(ele, 'target');\n }\n }\n return near;\n};\n\n// 'Give me everything from this box'\nBRp$e.getAllInBox = function (x1, y1, x2, y2) {\n var eles = this.getCachedZSortedEles().interactive;\n var zoom = this.cy.zoom();\n var labelThreshold = 2 / zoom;\n var box = [];\n var x1c = Math.min(x1, x2);\n var x2c = Math.max(x1, x2);\n var y1c = Math.min(y1, y2);\n var y2c = Math.max(y1, y2);\n x1 = x1c;\n x2 = x2c;\n y1 = y1c;\n y2 = y2c;\n var boxBb = makeBoundingBox({\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2\n });\n var selectionBox = [{\n x: boxBb.x1,\n y: boxBb.y1\n }, {\n x: boxBb.x2,\n y: boxBb.y1\n }, {\n x: boxBb.x2,\n y: boxBb.y2\n }, {\n x: boxBb.x1,\n y: boxBb.y2\n }];\n var boxEdges = [[selectionBox[0], selectionBox[1]], [selectionBox[1], selectionBox[2]], [selectionBox[2], selectionBox[3]], [selectionBox[3], selectionBox[0]]];\n function preprop(obj, name, pre) {\n return getPrefixedProperty(obj, name, pre);\n }\n function getRotatedLabelBox(ele, prefix) {\n var _p = ele._private;\n var th = labelThreshold;\n var prefixDash = '';\n ele.boundingBox();\n var bb = _p.labelBounds['main'];\n\n // If the bounding box is not available, return null.\n // This indicates that the label box cannot be calculated, which is consistent\n // with the expected behavior of this function. Returning null allows the caller\n // to handle the absence of a bounding box explicitly.\n if (!bb) {\n return null;\n }\n var lx = preprop(_p.rscratch, 'labelX', prefix);\n var ly = preprop(_p.rscratch, 'labelY', prefix);\n var theta = preprop(_p.rscratch, 'labelAngle', prefix);\n var ox = ele.pstyle(prefixDash + 'text-margin-x').pfValue;\n var oy = ele.pstyle(prefixDash + 'text-margin-y').pfValue;\n var lx1 = bb.x1 - th - ox;\n var lx2 = bb.x2 + th - ox;\n var ly1 = bb.y1 - th - oy;\n var ly2 = bb.y2 + th - oy;\n if (theta) {\n var cos = Math.cos(theta);\n var sin = Math.sin(theta);\n var rotate = function rotate(x, y) {\n x = x - lx;\n y = y - ly;\n return {\n x: x * cos - y * sin + lx,\n y: x * sin + y * cos + ly\n };\n };\n return [rotate(lx1, ly1), rotate(lx2, ly1), rotate(lx2, ly2), rotate(lx1, ly2)];\n } else {\n return [{\n x: lx1,\n y: ly1\n }, {\n x: lx2,\n y: ly1\n }, {\n x: lx2,\n y: ly2\n }, {\n x: lx1,\n y: ly2\n }];\n }\n }\n function doLinesIntersect(p1, p2, q1, q2) {\n function ccw(a, b, c) {\n return (c.y - a.y) * (b.x - a.x) > (b.y - a.y) * (c.x - a.x);\n }\n return ccw(p1, q1, q2) !== ccw(p2, q1, q2) && ccw(p1, p2, q1) !== ccw(p1, p2, q2);\n }\n for (var e = 0; e < eles.length; e++) {\n var ele = eles[e];\n if (ele.isNode()) {\n var node = ele;\n var textEvents = node.pstyle('text-events').strValue === 'yes';\n var nodeBoxSelectMode = node.pstyle('box-selection').strValue;\n var labelBoxSelectEnabled = node.pstyle('box-select-labels').strValue === 'yes';\n if (nodeBoxSelectMode === 'none') {\n continue;\n }\n var includeLabels = (nodeBoxSelectMode === 'overlap' || labelBoxSelectEnabled) && textEvents;\n var nodeBb = node.boundingBox({\n includeNodes: true,\n includeEdges: false,\n includeLabels: includeLabels\n });\n if (nodeBoxSelectMode === 'contain') {\n var selected = false;\n if (labelBoxSelectEnabled && textEvents) {\n var rotatedLabelBox = getRotatedLabelBox(node);\n if (rotatedLabelBox && satPolygonIntersection(rotatedLabelBox, selectionBox)) {\n box.push(node);\n selected = true;\n }\n }\n if (!selected && boundingBoxInBoundingBox(boxBb, nodeBb)) {\n box.push(node);\n }\n } else if (nodeBoxSelectMode === 'overlap') {\n if (boundingBoxesIntersect(boxBb, nodeBb)) {\n var nodeBodyBb = node.boundingBox({\n includeNodes: true,\n includeEdges: true,\n includeLabels: false,\n includeMainLabels: false,\n includeSourceLabels: false,\n includeTargetLabels: false\n });\n var nodeBodyCorners = [{\n x: nodeBodyBb.x1,\n y: nodeBodyBb.y1\n }, {\n x: nodeBodyBb.x2,\n y: nodeBodyBb.y1\n }, {\n x: nodeBodyBb.x2,\n y: nodeBodyBb.y2\n }, {\n x: nodeBodyBb.x1,\n y: nodeBodyBb.y2\n }];\n\n // if node body intersects, no need to check label\n if (satPolygonIntersection(nodeBodyCorners, selectionBox)) {\n box.push(node);\n } else {\n // only check label if node body didn't intersect\n var _rotatedLabelBox = getRotatedLabelBox(node);\n if (_rotatedLabelBox && satPolygonIntersection(_rotatedLabelBox, selectionBox)) {\n box.push(node);\n }\n }\n }\n }\n } else {\n var edge = ele;\n var _p = edge._private;\n var rs = _p.rscratch;\n var edgeBoxSelectMode = edge.pstyle('box-selection').strValue;\n if (edgeBoxSelectMode === 'none') {\n continue;\n }\n if (edgeBoxSelectMode === 'contain') {\n if (rs.startX != null && rs.startY != null && !inBoundingBox(boxBb, rs.startX, rs.startY)) {\n continue;\n }\n if (rs.endX != null && rs.endY != null && !inBoundingBox(boxBb, rs.endX, rs.endY)) {\n continue;\n }\n if (rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound' || rs.edgeType === 'segments' || rs.edgeType === 'haystack') {\n var pts = _p.rstyle.bezierPts || _p.rstyle.linePts || _p.rstyle.haystackPts;\n var allInside = true;\n for (var i = 0; i < pts.length; i++) {\n if (!pointInBoundingBox(boxBb, pts[i])) {\n allInside = false;\n break;\n }\n }\n if (allInside) {\n box.push(edge);\n }\n } else if (rs.edgeType === 'straight') {\n box.push(edge);\n }\n } else if (edgeBoxSelectMode === 'overlap') {\n var _selected = false;\n\n // Check: either endpoint inside box\n if (rs.startX != null && rs.startY != null && rs.endX != null && rs.endY != null && (inBoundingBox(boxBb, rs.startX, rs.startY) || inBoundingBox(boxBb, rs.endX, rs.endY))) {\n box.push(edge);\n _selected = true;\n }\n\n // Haystack fallback (only check if not already selected)\n else if (!_selected && rs.edgeType === 'haystack') {\n var haystackPts = _p.rstyle.haystackPts;\n for (var _i = 0; _i < haystackPts.length; _i++) {\n if (pointInBoundingBox(boxBb, haystackPts[_i])) {\n box.push(edge);\n _selected = true;\n break;\n }\n }\n }\n\n // Segment intersection check (only if not already selected)\n if (!_selected) {\n var _pts = _p.rstyle.bezierPts || _p.rstyle.linePts || _p.rstyle.haystackPts;\n\n // straight edges\n if ((!_pts || _pts.length < 2) && rs.edgeType === 'straight') {\n if (rs.startX != null && rs.startY != null && rs.endX != null && rs.endY != null) {\n _pts = [{\n x: rs.startX,\n y: rs.startY\n }, {\n x: rs.endX,\n y: rs.endY\n }];\n }\n }\n if (!_pts || _pts.length < 2) continue;\n for (var _i2 = 0; _i2 < _pts.length - 1; _i2++) {\n var segStart = _pts[_i2];\n var segEnd = _pts[_i2 + 1];\n for (var b = 0; b < boxEdges.length; b++) {\n var _boxEdges$b = _slicedToArray(boxEdges[b], 2),\n boxStart = _boxEdges$b[0],\n boxEnd = _boxEdges$b[1];\n if (doLinesIntersect(segStart, segEnd, boxStart, boxEnd)) {\n box.push(edge);\n _selected = true;\n break;\n }\n }\n if (_selected) break;\n }\n }\n }\n }\n }\n return box;\n};\n\nvar BRp$d = {};\nBRp$d.calculateArrowAngles = function (edge) {\n var rs = edge._private.rscratch;\n var isHaystack = rs.edgeType === 'haystack';\n var isBezier = rs.edgeType === 'bezier';\n var isMultibezier = rs.edgeType === 'multibezier';\n var isSegments = rs.edgeType === 'segments';\n var isCompound = rs.edgeType === 'compound';\n var isSelf = rs.edgeType === 'self';\n\n // Displacement gives direction for arrowhead orientation\n var dispX, dispY;\n var startX, startY, endX, endY, midX, midY;\n if (isHaystack) {\n startX = rs.haystackPts[0];\n startY = rs.haystackPts[1];\n endX = rs.haystackPts[2];\n endY = rs.haystackPts[3];\n } else {\n startX = rs.arrowStartX;\n startY = rs.arrowStartY;\n endX = rs.arrowEndX;\n endY = rs.arrowEndY;\n }\n midX = rs.midX;\n midY = rs.midY;\n\n // source\n //\n\n if (isSegments) {\n dispX = startX - rs.segpts[0];\n dispY = startY - rs.segpts[1];\n } else if (isMultibezier || isCompound || isSelf || isBezier) {\n var pts = rs.allpts;\n var bX = qbezierAt(pts[0], pts[2], pts[4], 0.1);\n var bY = qbezierAt(pts[1], pts[3], pts[5], 0.1);\n dispX = startX - bX;\n dispY = startY - bY;\n } else {\n dispX = startX - midX;\n dispY = startY - midY;\n }\n rs.srcArrowAngle = getAngleFromDisp(dispX, dispY);\n\n // mid target\n //\n\n var midX = rs.midX;\n var midY = rs.midY;\n if (isHaystack) {\n midX = (startX + endX) / 2;\n midY = (startY + endY) / 2;\n }\n dispX = endX - startX;\n dispY = endY - startY;\n if (isSegments) {\n var pts = rs.allpts;\n if (pts.length / 2 % 2 === 0) {\n var i2 = pts.length / 2;\n var i1 = i2 - 2;\n dispX = pts[i2] - pts[i1];\n dispY = pts[i2 + 1] - pts[i1 + 1];\n } else if (rs.isRound) {\n dispX = rs.midVector[1];\n dispY = -rs.midVector[0];\n } else {\n var i2 = pts.length / 2 - 1;\n var i1 = i2 - 2;\n dispX = pts[i2] - pts[i1];\n dispY = pts[i2 + 1] - pts[i1 + 1];\n }\n } else if (isMultibezier || isCompound || isSelf) {\n var pts = rs.allpts;\n var cpts = rs.ctrlpts;\n var bp0x, bp0y;\n var bp1x, bp1y;\n if (cpts.length / 2 % 2 === 0) {\n var p0 = pts.length / 2 - 1; // startpt\n var ic = p0 + 2;\n var p1 = ic + 2;\n bp0x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.0);\n bp0y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.0);\n bp1x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.0001);\n bp1y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.0001);\n } else {\n var ic = pts.length / 2 - 1; // ctrpt\n var p0 = ic - 2; // startpt\n var p1 = ic + 2; // endpt\n\n bp0x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.4999);\n bp0y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.4999);\n bp1x = qbezierAt(pts[p0], pts[ic], pts[p1], 0.5);\n bp1y = qbezierAt(pts[p0 + 1], pts[ic + 1], pts[p1 + 1], 0.5);\n }\n dispX = bp1x - bp0x;\n dispY = bp1y - bp0y;\n }\n rs.midtgtArrowAngle = getAngleFromDisp(dispX, dispY);\n rs.midDispX = dispX;\n rs.midDispY = dispY;\n\n // mid source\n //\n\n dispX *= -1;\n dispY *= -1;\n if (isSegments) {\n var pts = rs.allpts;\n if (pts.length / 2 % 2 === 0) ; else if (!rs.isRound) {\n var i2 = pts.length / 2 - 1;\n var i3 = i2 + 2;\n dispX = -(pts[i3] - pts[i2]);\n dispY = -(pts[i3 + 1] - pts[i2 + 1]);\n }\n }\n rs.midsrcArrowAngle = getAngleFromDisp(dispX, dispY);\n\n // target\n //\n\n if (isSegments) {\n dispX = endX - rs.segpts[rs.segpts.length - 2];\n dispY = endY - rs.segpts[rs.segpts.length - 1];\n } else if (isMultibezier || isCompound || isSelf || isBezier) {\n var pts = rs.allpts;\n var l = pts.length;\n var bX = qbezierAt(pts[l - 6], pts[l - 4], pts[l - 2], 0.9);\n var bY = qbezierAt(pts[l - 5], pts[l - 3], pts[l - 1], 0.9);\n dispX = endX - bX;\n dispY = endY - bY;\n } else {\n dispX = endX - midX;\n dispY = endY - midY;\n }\n rs.tgtArrowAngle = getAngleFromDisp(dispX, dispY);\n};\nBRp$d.getArrowWidth = BRp$d.getArrowHeight = function (edgeWidth, scale) {\n var cache = this.arrowWidthCache = this.arrowWidthCache || {};\n var cachedVal = cache[edgeWidth + ', ' + scale];\n if (cachedVal) {\n return cachedVal;\n }\n cachedVal = Math.max(Math.pow(edgeWidth * 13.37, 0.9), 29) * scale;\n cache[edgeWidth + ', ' + scale] = cachedVal;\n return cachedVal;\n};\n\n/**\n * Explained by Blindman67 at https://stackoverflow.com/a/44856925/11028828\n */\n\n// Declare reused variable to avoid reallocating variables every time the function is called\nvar x,\n y,\n v1 = {},\n v2 = {},\n sinA,\n sinA90,\n radDirection,\n drawDirection,\n angle,\n halfAngle,\n cRadius,\n lenOut,\n radius,\n limit;\nvar startX, startY, stopX, stopY;\nvar lastPoint;\n\n// convert 2 points into vector form, polar form, and normalised\nvar asVec = function asVec(p, pp, v) {\n v.x = pp.x - p.x;\n v.y = pp.y - p.y;\n v.len = Math.sqrt(v.x * v.x + v.y * v.y);\n v.nx = v.x / v.len;\n v.ny = v.y / v.len;\n v.ang = Math.atan2(v.ny, v.nx);\n};\nvar invertVec = function invertVec(originalV, invertedV) {\n invertedV.x = originalV.x * -1;\n invertedV.y = originalV.y * -1;\n invertedV.nx = originalV.nx * -1;\n invertedV.ny = originalV.ny * -1;\n invertedV.ang = originalV.ang > 0 ? -(Math.PI - originalV.ang) : Math.PI + originalV.ang;\n};\nvar calcCornerArc = function calcCornerArc(previousPoint, currentPoint, nextPoint, radiusMax, isArcRadius) {\n //-----------------------------------------\n // Part 1\n previousPoint !== lastPoint ? asVec(currentPoint, previousPoint, v1) : invertVec(v2, v1); // Avoid recalculating vec if it is the invert of the last one calculated\n asVec(currentPoint, nextPoint, v2);\n sinA = v1.nx * v2.ny - v1.ny * v2.nx;\n sinA90 = v1.nx * v2.nx - v1.ny * -v2.ny;\n angle = Math.asin(Math.max(-1, Math.min(1, sinA)));\n if (Math.abs(angle) < 1e-6) {\n x = currentPoint.x;\n y = currentPoint.y;\n cRadius = radius = 0;\n return;\n }\n //-----------------------------------------\n radDirection = 1;\n drawDirection = false;\n if (sinA90 < 0) {\n if (angle < 0) {\n angle = Math.PI + angle;\n } else {\n angle = Math.PI - angle;\n radDirection = -1;\n drawDirection = true;\n }\n } else {\n if (angle > 0) {\n radDirection = -1;\n drawDirection = true;\n }\n }\n if (currentPoint.radius !== undefined) {\n radius = currentPoint.radius;\n } else {\n radius = radiusMax;\n }\n //-----------------------------------------\n // Part 2\n halfAngle = angle / 2;\n //-----------------------------------------\n\n limit = Math.min(v1.len / 2, v2.len / 2);\n if (isArcRadius) {\n //-----------------------------------------\n // Part 3\n lenOut = Math.abs(Math.cos(halfAngle) * radius / Math.sin(halfAngle));\n\n //-----------------------------------------\n // Special part A\n if (lenOut > limit) {\n lenOut = limit;\n cRadius = Math.abs(lenOut * Math.sin(halfAngle) / Math.cos(halfAngle));\n } else {\n cRadius = radius;\n }\n } else {\n lenOut = Math.min(limit, radius);\n cRadius = Math.abs(lenOut * Math.sin(halfAngle) / Math.cos(halfAngle));\n }\n //-----------------------------------------\n\n //-----------------------------------------\n // Part 4\n stopX = currentPoint.x + v2.nx * lenOut;\n stopY = currentPoint.y + v2.ny * lenOut;\n //-----------------------------------------\n // Part 5\n x = stopX - v2.ny * cRadius * radDirection;\n y = stopY + v2.nx * cRadius * radDirection;\n //-----------------------------------------\n // Additional Part : calculate start point E\n startX = currentPoint.x + v1.nx * lenOut;\n startY = currentPoint.y + v1.ny * lenOut;\n\n // Save last point to avoid recalculating vector when not needed\n lastPoint = currentPoint;\n};\n\n/**\n * Draw corner provided by {@link getRoundCorner}\n *\n * @param ctx :CanvasRenderingContext2D\n * @param roundCorner {{cx:number, cy:number, radius:number, endAngle: number, startAngle: number, counterClockwise: boolean}}\n */\nfunction drawPreparedRoundCorner(ctx, roundCorner) {\n if (roundCorner.radius === 0) ctx.lineTo(roundCorner.cx, roundCorner.cy);else ctx.arc(roundCorner.cx, roundCorner.cy, roundCorner.radius, roundCorner.startAngle, roundCorner.endAngle, roundCorner.counterClockwise);\n}\n\n/**\n * Get round corner from a point and its previous and next neighbours in a path\n *\n * @param previousPoint {{x: number, y:number, radius: number?}}\n * @param currentPoint {{x: number, y:number, radius: number?}}\n * @param nextPoint {{x: number, y:number, radius: number?}}\n * @param radiusMax :number\n * @param isArcRadius :boolean\n * @return {{\n * cx:number, cy:number, radius:number,\n * startX:number, startY:number,\n * stopX:number, stopY: number,\n * endAngle: number, startAngle: number, counterClockwise: boolean\n * }}\n */\nfunction getRoundCorner(previousPoint, currentPoint, nextPoint, radiusMax) {\n var isArcRadius = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n if (radiusMax === 0 || currentPoint.radius === 0) return {\n cx: currentPoint.x,\n cy: currentPoint.y,\n radius: 0,\n startX: currentPoint.x,\n startY: currentPoint.y,\n stopX: currentPoint.x,\n stopY: currentPoint.y,\n startAngle: undefined,\n endAngle: undefined,\n counterClockwise: undefined\n };\n calcCornerArc(previousPoint, currentPoint, nextPoint, radiusMax, isArcRadius);\n return {\n cx: x,\n cy: y,\n radius: cRadius,\n startX: startX,\n startY: startY,\n stopX: stopX,\n stopY: stopY,\n startAngle: v1.ang + Math.PI / 2 * radDirection,\n endAngle: v2.ang - Math.PI / 2 * radDirection,\n counterClockwise: drawDirection\n };\n}\n\nvar AVOID_IMPOSSIBLE_BEZIER_CONSTANT = 0.01;\nvar AVOID_IMPOSSIBLE_BEZIER_CONSTANT_L = Math.sqrt(2 * AVOID_IMPOSSIBLE_BEZIER_CONSTANT);\nvar BRp$c = {};\nBRp$c.findMidptPtsEtc = function (edge, pairInfo) {\n var posPts = pairInfo.posPts,\n intersectionPts = pairInfo.intersectionPts,\n vectorNormInverse = pairInfo.vectorNormInverse;\n var midptPts;\n\n // n.b. assumes all edges in bezier bundle have same endpoints specified\n var srcManEndpt = edge.pstyle('source-endpoint');\n var tgtManEndpt = edge.pstyle('target-endpoint');\n var haveManualEndPts = srcManEndpt.units != null && tgtManEndpt.units != null;\n var recalcVectorNormInverse = function recalcVectorNormInverse(x1, y1, x2, y2) {\n var dy = y2 - y1;\n var dx = x2 - x1;\n var l = Math.sqrt(dx * dx + dy * dy);\n return {\n x: -dy / l,\n y: dx / l\n };\n };\n var edgeDistances = edge.pstyle('edge-distances').value;\n switch (edgeDistances) {\n case 'node-position':\n midptPts = posPts;\n break;\n case 'intersection':\n midptPts = intersectionPts;\n break;\n case 'endpoints':\n {\n if (haveManualEndPts) {\n var _this$manualEndptToPx = this.manualEndptToPx(edge.source()[0], srcManEndpt),\n _this$manualEndptToPx2 = _slicedToArray(_this$manualEndptToPx, 2),\n x1 = _this$manualEndptToPx2[0],\n y1 = _this$manualEndptToPx2[1];\n var _this$manualEndptToPx3 = this.manualEndptToPx(edge.target()[0], tgtManEndpt),\n _this$manualEndptToPx4 = _slicedToArray(_this$manualEndptToPx3, 2),\n x2 = _this$manualEndptToPx4[0],\n y2 = _this$manualEndptToPx4[1];\n var endPts = {\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2\n };\n vectorNormInverse = recalcVectorNormInverse(x1, y1, x2, y2);\n midptPts = endPts;\n } else {\n warn(\"Edge \".concat(edge.id(), \" has edge-distances:endpoints specified without manual endpoints specified via source-endpoint and target-endpoint. Falling back on edge-distances:intersection (default).\"));\n midptPts = intersectionPts; // back to default\n }\n break;\n }\n }\n return {\n midptPts: midptPts,\n vectorNormInverse: vectorNormInverse\n };\n};\nBRp$c.findHaystackPoints = function (edges) {\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n var _p = edge._private;\n var rs = _p.rscratch;\n if (!rs.haystack) {\n var angle = Math.random() * 2 * Math.PI;\n rs.source = {\n x: Math.cos(angle),\n y: Math.sin(angle)\n };\n angle = Math.random() * 2 * Math.PI;\n rs.target = {\n x: Math.cos(angle),\n y: Math.sin(angle)\n };\n }\n var src = _p.source;\n var tgt = _p.target;\n var srcPos = src.position();\n var tgtPos = tgt.position();\n var srcW = src.width();\n var tgtW = tgt.width();\n var srcH = src.height();\n var tgtH = tgt.height();\n var radius = edge.pstyle('haystack-radius').value;\n var halfRadius = radius / 2; // b/c have to half width/height\n\n rs.haystackPts = rs.allpts = [rs.source.x * srcW * halfRadius + srcPos.x, rs.source.y * srcH * halfRadius + srcPos.y, rs.target.x * tgtW * halfRadius + tgtPos.x, rs.target.y * tgtH * halfRadius + tgtPos.y];\n rs.midX = (rs.allpts[0] + rs.allpts[2]) / 2;\n rs.midY = (rs.allpts[1] + rs.allpts[3]) / 2;\n\n // always override as haystack in case set to different type previously\n rs.edgeType = 'haystack';\n rs.haystack = true;\n this.storeEdgeProjections(edge);\n this.calculateArrowAngles(edge);\n this.recalculateEdgeLabelProjections(edge);\n this.calculateLabelAngles(edge);\n }\n};\nBRp$c.findSegmentsPoints = function (edge, pairInfo) {\n // Segments (multiple straight lines)\n\n var rs = edge._private.rscratch;\n var segmentWs = edge.pstyle('segment-weights');\n var segmentDs = edge.pstyle('segment-distances');\n var segmentRs = edge.pstyle('segment-radii');\n var segmentTs = edge.pstyle('radius-type');\n var segmentsN = Math.min(segmentWs.pfValue.length, segmentDs.pfValue.length);\n var lastRadius = segmentRs.pfValue[segmentRs.pfValue.length - 1];\n var lastRadiusType = segmentTs.pfValue[segmentTs.pfValue.length - 1];\n rs.edgeType = 'segments';\n rs.segpts = [];\n rs.radii = [];\n rs.isArcRadius = [];\n for (var s = 0; s < segmentsN; s++) {\n var w = segmentWs.pfValue[s];\n var d = segmentDs.pfValue[s];\n var w1 = 1 - w;\n var w2 = w;\n var _this$findMidptPtsEtc = this.findMidptPtsEtc(edge, pairInfo),\n midptPts = _this$findMidptPtsEtc.midptPts,\n vectorNormInverse = _this$findMidptPtsEtc.vectorNormInverse;\n var adjustedMidpt = {\n x: midptPts.x1 * w1 + midptPts.x2 * w2,\n y: midptPts.y1 * w1 + midptPts.y2 * w2\n };\n rs.segpts.push(adjustedMidpt.x + vectorNormInverse.x * d, adjustedMidpt.y + vectorNormInverse.y * d);\n rs.radii.push(segmentRs.pfValue[s] !== undefined ? segmentRs.pfValue[s] : lastRadius);\n rs.isArcRadius.push((segmentTs.pfValue[s] !== undefined ? segmentTs.pfValue[s] : lastRadiusType) === 'arc-radius');\n }\n};\nBRp$c.findLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) {\n // Self-edge\n\n var rs = edge._private.rscratch;\n var dirCounts = pairInfo.dirCounts,\n srcPos = pairInfo.srcPos;\n var ctrlptDists = edge.pstyle('control-point-distances');\n var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined;\n var loopDir = edge.pstyle('loop-direction').pfValue;\n var loopSwp = edge.pstyle('loop-sweep').pfValue;\n var stepSize = edge.pstyle('control-point-step-size').pfValue;\n rs.edgeType = 'self';\n var j = i;\n var loopDist = stepSize;\n if (edgeIsUnbundled) {\n j = 0;\n loopDist = ctrlptDist;\n }\n var loopAngle = loopDir - Math.PI / 2;\n var outAngle = loopAngle - loopSwp / 2;\n var inAngle = loopAngle + loopSwp / 2;\n\n // increase by step size for overlapping loops, keyed on direction and sweep values\n var dc = String(loopDir + '_' + loopSwp);\n j = dirCounts[dc] === undefined ? dirCounts[dc] = 0 : ++dirCounts[dc];\n rs.ctrlpts = [srcPos.x + Math.cos(outAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.y + Math.sin(outAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.x + Math.cos(inAngle) * 1.4 * loopDist * (j / 3 + 1), srcPos.y + Math.sin(inAngle) * 1.4 * loopDist * (j / 3 + 1)];\n};\nBRp$c.findCompoundLoopPoints = function (edge, pairInfo, i, edgeIsUnbundled) {\n // Compound edge\n\n var rs = edge._private.rscratch;\n rs.edgeType = 'compound';\n var srcPos = pairInfo.srcPos,\n tgtPos = pairInfo.tgtPos,\n srcW = pairInfo.srcW,\n srcH = pairInfo.srcH,\n tgtW = pairInfo.tgtW,\n tgtH = pairInfo.tgtH;\n var stepSize = edge.pstyle('control-point-step-size').pfValue;\n var ctrlptDists = edge.pstyle('control-point-distances');\n var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined;\n var j = i;\n var loopDist = stepSize;\n if (edgeIsUnbundled) {\n j = 0;\n loopDist = ctrlptDist;\n }\n var loopW = 50;\n var loopaPos = {\n x: srcPos.x - srcW / 2,\n y: srcPos.y - srcH / 2\n };\n var loopbPos = {\n x: tgtPos.x - tgtW / 2,\n y: tgtPos.y - tgtH / 2\n };\n var loopPos = {\n x: Math.min(loopaPos.x, loopbPos.x),\n y: Math.min(loopaPos.y, loopbPos.y)\n };\n\n // avoids cases with impossible beziers\n var minCompoundStretch = 0.5;\n var compoundStretchA = Math.max(minCompoundStretch, Math.log(srcW * AVOID_IMPOSSIBLE_BEZIER_CONSTANT));\n var compoundStretchB = Math.max(minCompoundStretch, Math.log(tgtW * AVOID_IMPOSSIBLE_BEZIER_CONSTANT));\n rs.ctrlpts = [loopPos.x, loopPos.y - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j / 3 + 1) * compoundStretchA, loopPos.x - (1 + Math.pow(loopW, 1.12) / 100) * loopDist * (j / 3 + 1) * compoundStretchB, loopPos.y];\n};\nBRp$c.findStraightEdgePoints = function (edge) {\n // Straight edge within bundle\n\n edge._private.rscratch.edgeType = 'straight';\n};\nBRp$c.findBezierPoints = function (edge, pairInfo, i, edgeIsUnbundled, edgeIsSwapped) {\n var rs = edge._private.rscratch;\n var stepSize = edge.pstyle('control-point-step-size').pfValue;\n var ctrlptDists = edge.pstyle('control-point-distances');\n var ctrlptWs = edge.pstyle('control-point-weights');\n var bezierN = ctrlptDists && ctrlptWs ? Math.min(ctrlptDists.value.length, ctrlptWs.value.length) : 1;\n var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined;\n var ctrlptWeight = ctrlptWs.value[0];\n\n // (Multi)bezier\n\n var multi = edgeIsUnbundled;\n rs.edgeType = multi ? 'multibezier' : 'bezier';\n rs.ctrlpts = [];\n for (var b = 0; b < bezierN; b++) {\n var normctrlptDist = (0.5 - pairInfo.eles.length / 2 + i) * stepSize * (edgeIsSwapped ? -1 : 1);\n var manctrlptDist = undefined;\n var sign = signum(normctrlptDist);\n if (multi) {\n ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[b] : stepSize; // fall back on step size\n ctrlptWeight = ctrlptWs.value[b];\n }\n if (edgeIsUnbundled) {\n // multi or single unbundled\n manctrlptDist = ctrlptDist;\n } else {\n manctrlptDist = ctrlptDist !== undefined ? sign * ctrlptDist : undefined;\n }\n var distanceFromMidpoint = manctrlptDist !== undefined ? manctrlptDist : normctrlptDist;\n var w1 = 1 - ctrlptWeight;\n var w2 = ctrlptWeight;\n var _this$findMidptPtsEtc2 = this.findMidptPtsEtc(edge, pairInfo),\n midptPts = _this$findMidptPtsEtc2.midptPts,\n vectorNormInverse = _this$findMidptPtsEtc2.vectorNormInverse;\n var adjustedMidpt = {\n x: midptPts.x1 * w1 + midptPts.x2 * w2,\n y: midptPts.y1 * w1 + midptPts.y2 * w2\n };\n rs.ctrlpts.push(adjustedMidpt.x + vectorNormInverse.x * distanceFromMidpoint, adjustedMidpt.y + vectorNormInverse.y * distanceFromMidpoint);\n }\n};\nBRp$c.findTaxiPoints = function (edge, pairInfo) {\n // Taxicab geometry with two turns maximum\n\n var rs = edge._private.rscratch;\n rs.edgeType = 'segments';\n var VERTICAL = 'vertical';\n var HORIZONTAL = 'horizontal';\n var LEFTWARD = 'leftward';\n var RIGHTWARD = 'rightward';\n var DOWNWARD = 'downward';\n var UPWARD = 'upward';\n var AUTO = 'auto';\n var posPts = pairInfo.posPts,\n srcW = pairInfo.srcW,\n srcH = pairInfo.srcH,\n tgtW = pairInfo.tgtW,\n tgtH = pairInfo.tgtH;\n var edgeDistances = edge.pstyle('edge-distances').value;\n var dIncludesNodeBody = edgeDistances !== 'node-position';\n var taxiDir = edge.pstyle('taxi-direction').value;\n var rawTaxiDir = taxiDir; // unprocessed value\n var taxiTurn = edge.pstyle('taxi-turn');\n var turnIsPercent = taxiTurn.units === '%';\n var taxiTurnPfVal = taxiTurn.pfValue;\n var turnIsNegative = taxiTurnPfVal < 0; // i.e. from target side\n var minD = edge.pstyle('taxi-turn-min-distance').pfValue;\n var dw = dIncludesNodeBody ? (srcW + tgtW) / 2 : 0;\n var dh = dIncludesNodeBody ? (srcH + tgtH) / 2 : 0;\n var pdx = posPts.x2 - posPts.x1;\n var pdy = posPts.y2 - posPts.y1;\n\n // take away the effective w/h from the magnitude of the delta value\n var subDWH = function subDWH(dxy, dwh) {\n if (dxy > 0) {\n return Math.max(dxy - dwh, 0);\n } else {\n return Math.min(dxy + dwh, 0);\n }\n };\n var dx = subDWH(pdx, dw);\n var dy = subDWH(pdy, dh);\n var isExplicitDir = false;\n if (rawTaxiDir === AUTO) {\n taxiDir = Math.abs(dx) > Math.abs(dy) ? HORIZONTAL : VERTICAL;\n } else if (rawTaxiDir === UPWARD || rawTaxiDir === DOWNWARD) {\n taxiDir = VERTICAL;\n isExplicitDir = true;\n } else if (rawTaxiDir === LEFTWARD || rawTaxiDir === RIGHTWARD) {\n taxiDir = HORIZONTAL;\n isExplicitDir = true;\n }\n var isVert = taxiDir === VERTICAL;\n var l = isVert ? dy : dx;\n var pl = isVert ? pdy : pdx;\n var sgnL = signum(pl);\n var forcedDir = false;\n if (!(isExplicitDir && (turnIsPercent || turnIsNegative)) // forcing in this case would cause weird growing in the opposite direction\n && (rawTaxiDir === DOWNWARD && pl < 0 || rawTaxiDir === UPWARD && pl > 0 || rawTaxiDir === LEFTWARD && pl > 0 || rawTaxiDir === RIGHTWARD && pl < 0)) {\n sgnL *= -1;\n l = sgnL * Math.abs(l);\n forcedDir = true;\n }\n var d;\n if (turnIsPercent) {\n var p = taxiTurnPfVal < 0 ? 1 + taxiTurnPfVal : taxiTurnPfVal;\n d = p * l;\n } else {\n var k = taxiTurnPfVal < 0 ? l : 0;\n d = k + taxiTurnPfVal * sgnL;\n }\n var getIsTooClose = function getIsTooClose(d) {\n return Math.abs(d) < minD || Math.abs(d) >= Math.abs(l);\n };\n var isTooCloseSrc = getIsTooClose(d);\n var isTooCloseTgt = getIsTooClose(Math.abs(l) - Math.abs(d));\n var isTooClose = isTooCloseSrc || isTooCloseTgt;\n if (isTooClose && !forcedDir) {\n // non-ideal routing\n if (isVert) {\n // vertical fallbacks\n var lShapeInsideSrc = Math.abs(pl) <= srcH / 2;\n var lShapeInsideTgt = Math.abs(pdx) <= tgtW / 2;\n if (lShapeInsideSrc) {\n // horizontal Z-shape (direction not respected)\n var x = (posPts.x1 + posPts.x2) / 2;\n var y1 = posPts.y1,\n y2 = posPts.y2;\n rs.segpts = [x, y1, x, y2];\n } else if (lShapeInsideTgt) {\n // vertical Z-shape (distance not respected)\n var y = (posPts.y1 + posPts.y2) / 2;\n var x1 = posPts.x1,\n x2 = posPts.x2;\n rs.segpts = [x1, y, x2, y];\n } else {\n // L-shape fallback (turn distance not respected, but works well with tree siblings)\n rs.segpts = [posPts.x1, posPts.y2];\n }\n } else {\n // horizontal fallbacks\n var _lShapeInsideSrc = Math.abs(pl) <= srcW / 2;\n var _lShapeInsideTgt = Math.abs(pdy) <= tgtH / 2;\n if (_lShapeInsideSrc) {\n // vertical Z-shape (direction not respected)\n var _y = (posPts.y1 + posPts.y2) / 2;\n var _x = posPts.x1,\n _x2 = posPts.x2;\n rs.segpts = [_x, _y, _x2, _y];\n } else if (_lShapeInsideTgt) {\n // horizontal Z-shape (turn distance not respected)\n var _x3 = (posPts.x1 + posPts.x2) / 2;\n var _y2 = posPts.y1,\n _y3 = posPts.y2;\n rs.segpts = [_x3, _y2, _x3, _y3];\n } else {\n // L-shape (turn distance not respected, but works well for tree siblings)\n rs.segpts = [posPts.x2, posPts.y1];\n }\n }\n } else {\n // ideal routing\n if (isVert) {\n var _y4 = posPts.y1 + d + (dIncludesNodeBody ? srcH / 2 * sgnL : 0);\n var _x4 = posPts.x1,\n _x5 = posPts.x2;\n rs.segpts = [_x4, _y4, _x5, _y4];\n } else {\n // horizontal\n var _x6 = posPts.x1 + d + (dIncludesNodeBody ? srcW / 2 * sgnL : 0);\n var _y5 = posPts.y1,\n _y6 = posPts.y2;\n rs.segpts = [_x6, _y5, _x6, _y6];\n }\n }\n if (rs.isRound) {\n var radius = edge.pstyle('taxi-radius').value;\n var isArcRadius = edge.pstyle('radius-type').value[0] === 'arc-radius';\n rs.radii = new Array(rs.segpts.length / 2).fill(radius);\n rs.isArcRadius = new Array(rs.segpts.length / 2).fill(isArcRadius);\n }\n};\nBRp$c.tryToCorrectInvalidPoints = function (edge, pairInfo) {\n var rs = edge._private.rscratch;\n\n // can only correct beziers for now...\n if (rs.edgeType === 'bezier') {\n var srcPos = pairInfo.srcPos,\n tgtPos = pairInfo.tgtPos,\n srcW = pairInfo.srcW,\n srcH = pairInfo.srcH,\n tgtW = pairInfo.tgtW,\n tgtH = pairInfo.tgtH,\n srcShape = pairInfo.srcShape,\n tgtShape = pairInfo.tgtShape,\n srcCornerRadius = pairInfo.srcCornerRadius,\n tgtCornerRadius = pairInfo.tgtCornerRadius,\n srcRs = pairInfo.srcRs,\n tgtRs = pairInfo.tgtRs;\n var badStart = !number$1(rs.startX) || !number$1(rs.startY);\n var badAStart = !number$1(rs.arrowStartX) || !number$1(rs.arrowStartY);\n var badEnd = !number$1(rs.endX) || !number$1(rs.endY);\n var badAEnd = !number$1(rs.arrowEndX) || !number$1(rs.arrowEndY);\n var minCpADistFactor = 3;\n var arrowW = this.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.arrowShapeWidth;\n var minCpADist = minCpADistFactor * arrowW;\n var startACpDist = dist({\n x: rs.ctrlpts[0],\n y: rs.ctrlpts[1]\n }, {\n x: rs.startX,\n y: rs.startY\n });\n var closeStartACp = startACpDist < minCpADist;\n var endACpDist = dist({\n x: rs.ctrlpts[0],\n y: rs.ctrlpts[1]\n }, {\n x: rs.endX,\n y: rs.endY\n });\n var closeEndACp = endACpDist < minCpADist;\n var overlapping = false;\n if (badStart || badAStart || closeStartACp) {\n overlapping = true;\n\n // project control point along line from src centre to outside the src shape\n // (otherwise intersection will yield nothing)\n var cpD = {\n // delta\n x: rs.ctrlpts[0] - srcPos.x,\n y: rs.ctrlpts[1] - srcPos.y\n };\n var cpL = Math.sqrt(cpD.x * cpD.x + cpD.y * cpD.y); // length of line\n var cpM = {\n // normalised delta\n x: cpD.x / cpL,\n y: cpD.y / cpL\n };\n var radius = Math.max(srcW, srcH);\n var cpProj = {\n // *2 radius guarantees outside shape\n x: rs.ctrlpts[0] + cpM.x * 2 * radius,\n y: rs.ctrlpts[1] + cpM.y * 2 * radius\n };\n var srcCtrlPtIntn = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, cpProj.x, cpProj.y, 0, srcCornerRadius, srcRs);\n if (closeStartACp) {\n rs.ctrlpts[0] = rs.ctrlpts[0] + cpM.x * (minCpADist - startACpDist);\n rs.ctrlpts[1] = rs.ctrlpts[1] + cpM.y * (minCpADist - startACpDist);\n } else {\n rs.ctrlpts[0] = srcCtrlPtIntn[0] + cpM.x * minCpADist;\n rs.ctrlpts[1] = srcCtrlPtIntn[1] + cpM.y * minCpADist;\n }\n }\n if (badEnd || badAEnd || closeEndACp) {\n overlapping = true;\n\n // project control point along line from tgt centre to outside the tgt shape\n // (otherwise intersection will yield nothing)\n var _cpD = {\n // delta\n x: rs.ctrlpts[0] - tgtPos.x,\n y: rs.ctrlpts[1] - tgtPos.y\n };\n var _cpL = Math.sqrt(_cpD.x * _cpD.x + _cpD.y * _cpD.y); // length of line\n var _cpM = {\n // normalised delta\n x: _cpD.x / _cpL,\n y: _cpD.y / _cpL\n };\n var _radius = Math.max(srcW, srcH);\n var _cpProj = {\n // *2 radius guarantees outside shape\n x: rs.ctrlpts[0] + _cpM.x * 2 * _radius,\n y: rs.ctrlpts[1] + _cpM.y * 2 * _radius\n };\n var tgtCtrlPtIntn = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, _cpProj.x, _cpProj.y, 0, tgtCornerRadius, tgtRs);\n if (closeEndACp) {\n rs.ctrlpts[0] = rs.ctrlpts[0] + _cpM.x * (minCpADist - endACpDist);\n rs.ctrlpts[1] = rs.ctrlpts[1] + _cpM.y * (minCpADist - endACpDist);\n } else {\n rs.ctrlpts[0] = tgtCtrlPtIntn[0] + _cpM.x * minCpADist;\n rs.ctrlpts[1] = tgtCtrlPtIntn[1] + _cpM.y * minCpADist;\n }\n }\n if (overlapping) {\n // recalc endpts\n this.findEndpoints(edge);\n }\n }\n};\nBRp$c.storeAllpts = function (edge) {\n var rs = edge._private.rscratch;\n if (rs.edgeType === 'multibezier' || rs.edgeType === 'bezier' || rs.edgeType === 'self' || rs.edgeType === 'compound') {\n rs.allpts = [];\n rs.allpts.push(rs.startX, rs.startY);\n for (var b = 0; b + 1 < rs.ctrlpts.length; b += 2) {\n // ctrl pt itself\n rs.allpts.push(rs.ctrlpts[b], rs.ctrlpts[b + 1]);\n\n // the midpt between ctrlpts as intermediate destination pts\n if (b + 3 < rs.ctrlpts.length) {\n rs.allpts.push((rs.ctrlpts[b] + rs.ctrlpts[b + 2]) / 2, (rs.ctrlpts[b + 1] + rs.ctrlpts[b + 3]) / 2);\n }\n }\n rs.allpts.push(rs.endX, rs.endY);\n var m, mt;\n if (rs.ctrlpts.length / 2 % 2 === 0) {\n m = rs.allpts.length / 2 - 1;\n rs.midX = rs.allpts[m];\n rs.midY = rs.allpts[m + 1];\n } else {\n m = rs.allpts.length / 2 - 3;\n mt = 0.5;\n rs.midX = qbezierAt(rs.allpts[m], rs.allpts[m + 2], rs.allpts[m + 4], mt);\n rs.midY = qbezierAt(rs.allpts[m + 1], rs.allpts[m + 3], rs.allpts[m + 5], mt);\n }\n } else if (rs.edgeType === 'straight') {\n // need to calc these after endpts\n rs.allpts = [rs.startX, rs.startY, rs.endX, rs.endY];\n\n // default midpt for labels etc\n rs.midX = (rs.startX + rs.endX + rs.arrowStartX + rs.arrowEndX) / 4;\n rs.midY = (rs.startY + rs.endY + rs.arrowStartY + rs.arrowEndY) / 4;\n } else if (rs.edgeType === 'segments') {\n rs.allpts = [];\n rs.allpts.push(rs.startX, rs.startY);\n rs.allpts.push.apply(rs.allpts, rs.segpts);\n rs.allpts.push(rs.endX, rs.endY);\n if (rs.isRound) {\n rs.roundCorners = [];\n for (var i = 2; i + 3 < rs.allpts.length; i += 2) {\n var radius = rs.radii[i / 2 - 1];\n var isArcRadius = rs.isArcRadius[i / 2 - 1];\n rs.roundCorners.push(getRoundCorner({\n x: rs.allpts[i - 2],\n y: rs.allpts[i - 1]\n }, {\n x: rs.allpts[i],\n y: rs.allpts[i + 1],\n radius: radius\n }, {\n x: rs.allpts[i + 2],\n y: rs.allpts[i + 3]\n }, radius, isArcRadius));\n }\n }\n if (rs.segpts.length % 4 === 0) {\n var i2 = rs.segpts.length / 2;\n var i1 = i2 - 2;\n rs.midX = (rs.segpts[i1] + rs.segpts[i2]) / 2;\n rs.midY = (rs.segpts[i1 + 1] + rs.segpts[i2 + 1]) / 2;\n } else {\n var _i = rs.segpts.length / 2 - 1;\n if (!rs.isRound) {\n rs.midX = rs.segpts[_i];\n rs.midY = rs.segpts[_i + 1];\n } else {\n var point = {\n x: rs.segpts[_i],\n y: rs.segpts[_i + 1]\n };\n var corner = rs.roundCorners[_i / 2];\n if (corner.radius === 0) {\n // On collinear points\n var nextPoint = {\n x: rs.segpts[_i + 2],\n y: rs.segpts[_i + 3]\n };\n rs.midX = point.x;\n rs.midY = point.y;\n rs.midVector = [point.y - nextPoint.y, nextPoint.x - point.x];\n } else {\n // On rounded points\n var v = [point.x - corner.cx, point.y - corner.cy];\n var factor = corner.radius / Math.sqrt(Math.pow(v[0], 2) + Math.pow(v[1], 2));\n v = v.map(function (c) {\n return c * factor;\n });\n rs.midX = corner.cx + v[0];\n rs.midY = corner.cy + v[1];\n rs.midVector = v;\n }\n }\n }\n }\n};\nBRp$c.checkForInvalidEdgeWarning = function (edge) {\n var rs = edge[0]._private.rscratch;\n if (rs.nodesOverlap || number$1(rs.startX) && number$1(rs.startY) && number$1(rs.endX) && number$1(rs.endY)) {\n rs.loggedErr = false;\n } else {\n if (!rs.loggedErr) {\n rs.loggedErr = true;\n warn('Edge `' + edge.id() + '` has invalid endpoints and so it is impossible to draw. Adjust your edge style (e.g. control points) accordingly or use an alternative edge type. This is expected behaviour when the source node and the target node overlap.');\n }\n }\n};\nBRp$c.findEdgeControlPoints = function (edges) {\n var _this = this;\n if (!edges || edges.length === 0) {\n return;\n }\n var r = this;\n var cy = r.cy;\n var hasCompounds = cy.hasCompoundNodes();\n var hashTable = new Map$1();\n var getKey = function getKey(pairId, edgeIsUnbundled) {\n return [].concat(_toConsumableArray(pairId), [edgeIsUnbundled ? 1 : 0]).join('-');\n };\n var pairIds = [];\n var haystackEdges = [];\n\n // create a table of edge (src, tgt) => list of edges between them\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n var _p = edge._private;\n var curveStyle = edge.pstyle('curve-style').value;\n\n // ignore edges who are not to be displayed\n // they shouldn't take up space\n if (edge.removed() || !edge.takesUpSpace()) {\n continue;\n }\n if (curveStyle === 'haystack') {\n haystackEdges.push(edge);\n continue;\n }\n var edgeIsUnbundled = curveStyle === 'unbundled-bezier' || endsWith(curveStyle, 'segments') || curveStyle === 'straight' || curveStyle === 'straight-triangle' || endsWith(curveStyle, 'taxi');\n var edgeIsBezier = curveStyle === 'unbundled-bezier' || curveStyle === 'bezier';\n var src = _p.source;\n var tgt = _p.target;\n var srcIndex = src.poolIndex();\n var tgtIndex = tgt.poolIndex();\n var pairId = [srcIndex, tgtIndex].sort();\n var key = getKey(pairId, edgeIsUnbundled);\n var tableEntry = hashTable.get(key);\n if (tableEntry == null) {\n tableEntry = {\n eles: []\n };\n pairIds.push({\n pairId: pairId,\n edgeIsUnbundled: edgeIsUnbundled\n });\n hashTable.set(key, tableEntry);\n }\n tableEntry.eles.push(edge);\n if (edgeIsUnbundled) {\n tableEntry.hasUnbundled = true;\n }\n if (edgeIsBezier) {\n tableEntry.hasBezier = true;\n }\n }\n\n // for each pair (src, tgt), create the ctrl pts\n // Nested for loop is OK; total number of iterations for both loops = edgeCount\n var _loop = function _loop() {\n var _pairIds$p = pairIds[p],\n pairId = _pairIds$p.pairId,\n edgeIsUnbundled = _pairIds$p.edgeIsUnbundled;\n var key = getKey(pairId, edgeIsUnbundled);\n var pairInfo = hashTable.get(key);\n var swappedpairInfo;\n if (!pairInfo.hasUnbundled) {\n var pllEdges = pairInfo.eles[0].parallelEdges().filter(function (e) {\n return e.isBundledBezier();\n });\n clearArray(pairInfo.eles);\n pllEdges.forEach(function (edge) {\n return pairInfo.eles.push(edge);\n });\n\n // for each pair id, the edges should be sorted by index\n pairInfo.eles.sort(function (edge1, edge2) {\n return edge1.poolIndex() - edge2.poolIndex();\n });\n }\n var firstEdge = pairInfo.eles[0];\n var src = firstEdge.source();\n var tgt = firstEdge.target();\n\n // make sure src/tgt distinction is consistent w.r.t. pairId\n if (src.poolIndex() > tgt.poolIndex()) {\n var temp = src;\n src = tgt;\n tgt = temp;\n }\n var srcPos = pairInfo.srcPos = src.position();\n var tgtPos = pairInfo.tgtPos = tgt.position();\n var srcW = pairInfo.srcW = src.outerWidth();\n var srcH = pairInfo.srcH = src.outerHeight();\n var tgtW = pairInfo.tgtW = tgt.outerWidth();\n var tgtH = pairInfo.tgtH = tgt.outerHeight();\n var srcShape = pairInfo.srcShape = r.nodeShapes[_this.getNodeShape(src)];\n var tgtShape = pairInfo.tgtShape = r.nodeShapes[_this.getNodeShape(tgt)];\n var srcCornerRadius = pairInfo.srcCornerRadius = src.pstyle('corner-radius').value === 'auto' ? 'auto' : src.pstyle('corner-radius').pfValue;\n var tgtCornerRadius = pairInfo.tgtCornerRadius = tgt.pstyle('corner-radius').value === 'auto' ? 'auto' : tgt.pstyle('corner-radius').pfValue;\n var tgtRs = pairInfo.tgtRs = tgt._private.rscratch;\n var srcRs = pairInfo.srcRs = src._private.rscratch;\n pairInfo.dirCounts = {\n 'north': 0,\n 'west': 0,\n 'south': 0,\n 'east': 0,\n 'northwest': 0,\n 'southwest': 0,\n 'northeast': 0,\n 'southeast': 0\n };\n for (var _i2 = 0; _i2 < pairInfo.eles.length; _i2++) {\n var _edge = pairInfo.eles[_i2];\n var rs = _edge[0]._private.rscratch;\n var _curveStyle = _edge.pstyle('curve-style').value;\n var _edgeIsUnbundled = _curveStyle === 'unbundled-bezier' || endsWith(_curveStyle, 'segments') || endsWith(_curveStyle, 'taxi');\n\n // whether the normalised pair order is the reverse of the edge's src-tgt order\n var edgeIsSwapped = !src.same(_edge.source());\n if (!pairInfo.calculatedIntersection && src !== tgt && (pairInfo.hasBezier || pairInfo.hasUnbundled)) {\n pairInfo.calculatedIntersection = true;\n\n // pt outside src shape to calc distance/displacement from src to tgt\n var srcOutside = srcShape.intersectLine(srcPos.x, srcPos.y, srcW, srcH, tgtPos.x, tgtPos.y, 0, srcCornerRadius, srcRs);\n var srcIntn = pairInfo.srcIntn = srcOutside;\n\n // pt outside tgt shape to calc distance/displacement from src to tgt\n var tgtOutside = tgtShape.intersectLine(tgtPos.x, tgtPos.y, tgtW, tgtH, srcPos.x, srcPos.y, 0, tgtCornerRadius, tgtRs);\n var tgtIntn = pairInfo.tgtIntn = tgtOutside;\n var intersectionPts = pairInfo.intersectionPts = {\n x1: srcOutside[0],\n x2: tgtOutside[0],\n y1: srcOutside[1],\n y2: tgtOutside[1]\n };\n var posPts = pairInfo.posPts = {\n x1: srcPos.x,\n x2: tgtPos.x,\n y1: srcPos.y,\n y2: tgtPos.y\n };\n var dy = tgtOutside[1] - srcOutside[1];\n var dx = tgtOutside[0] - srcOutside[0];\n var l = Math.sqrt(dx * dx + dy * dy);\n if (number$1(l) && l >= AVOID_IMPOSSIBLE_BEZIER_CONSTANT_L) ; else {\n l = Math.sqrt(Math.max(dx * dx, AVOID_IMPOSSIBLE_BEZIER_CONSTANT) + Math.max(dy * dy, AVOID_IMPOSSIBLE_BEZIER_CONSTANT));\n }\n var vector = pairInfo.vector = {\n x: dx,\n y: dy\n };\n var vectorNorm = pairInfo.vectorNorm = {\n x: vector.x / l,\n y: vector.y / l\n };\n var vectorNormInverse = {\n x: -vectorNorm.y,\n y: vectorNorm.x\n };\n\n // if node shapes overlap, then no ctrl pts to draw\n pairInfo.nodesOverlap = !number$1(l) || tgtShape.checkPoint(srcOutside[0], srcOutside[1], 0, tgtW, tgtH, tgtPos.x, tgtPos.y, tgtCornerRadius, tgtRs) || srcShape.checkPoint(tgtOutside[0], tgtOutside[1], 0, srcW, srcH, srcPos.x, srcPos.y, srcCornerRadius, srcRs);\n pairInfo.vectorNormInverse = vectorNormInverse;\n swappedpairInfo = {\n nodesOverlap: pairInfo.nodesOverlap,\n dirCounts: pairInfo.dirCounts,\n calculatedIntersection: true,\n hasBezier: pairInfo.hasBezier,\n hasUnbundled: pairInfo.hasUnbundled,\n eles: pairInfo.eles,\n srcPos: tgtPos,\n srcRs: tgtRs,\n tgtPos: srcPos,\n tgtRs: srcRs,\n srcW: tgtW,\n srcH: tgtH,\n tgtW: srcW,\n tgtH: srcH,\n srcIntn: tgtIntn,\n tgtIntn: srcIntn,\n srcShape: tgtShape,\n tgtShape: srcShape,\n posPts: {\n x1: posPts.x2,\n y1: posPts.y2,\n x2: posPts.x1,\n y2: posPts.y1\n },\n intersectionPts: {\n x1: intersectionPts.x2,\n y1: intersectionPts.y2,\n x2: intersectionPts.x1,\n y2: intersectionPts.y1\n },\n vector: {\n x: -vector.x,\n y: -vector.y\n },\n vectorNorm: {\n x: -vectorNorm.x,\n y: -vectorNorm.y\n },\n vectorNormInverse: {\n x: -vectorNormInverse.x,\n y: -vectorNormInverse.y\n }\n };\n }\n var passedPairInfo = edgeIsSwapped ? swappedpairInfo : pairInfo;\n rs.nodesOverlap = passedPairInfo.nodesOverlap;\n rs.srcIntn = passedPairInfo.srcIntn;\n rs.tgtIntn = passedPairInfo.tgtIntn;\n rs.isRound = _curveStyle.startsWith('round');\n if (hasCompounds && (src.isParent() || src.isChild() || tgt.isParent() || tgt.isChild()) && (src.parents().anySame(tgt) || tgt.parents().anySame(src) || src.same(tgt) && src.isParent())) {\n _this.findCompoundLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled);\n } else if (src === tgt) {\n _this.findLoopPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled);\n } else if (_curveStyle.endsWith('segments')) {\n _this.findSegmentsPoints(_edge, passedPairInfo);\n } else if (_curveStyle.endsWith('taxi')) {\n _this.findTaxiPoints(_edge, passedPairInfo);\n } else if (_curveStyle === 'straight' || !_edgeIsUnbundled && pairInfo.eles.length % 2 === 1 && _i2 === Math.floor(pairInfo.eles.length / 2)) {\n _this.findStraightEdgePoints(_edge);\n } else {\n _this.findBezierPoints(_edge, passedPairInfo, _i2, _edgeIsUnbundled, edgeIsSwapped);\n }\n _this.findEndpoints(_edge);\n _this.tryToCorrectInvalidPoints(_edge, passedPairInfo);\n _this.checkForInvalidEdgeWarning(_edge);\n _this.storeAllpts(_edge);\n _this.storeEdgeProjections(_edge);\n _this.calculateArrowAngles(_edge);\n _this.recalculateEdgeLabelProjections(_edge);\n _this.calculateLabelAngles(_edge);\n } // for pair edges\n };\n for (var p = 0; p < pairIds.length; p++) {\n _loop();\n } // for pair ids\n\n // haystacks avoid the expense of pairInfo stuff (intersections etc.)\n this.findHaystackPoints(haystackEdges);\n};\nfunction getPts(pts) {\n var retPts = [];\n if (pts == null) {\n return;\n }\n for (var i = 0; i < pts.length; i += 2) {\n var x = pts[i];\n var y = pts[i + 1];\n retPts.push({\n x: x,\n y: y\n });\n }\n return retPts;\n}\nBRp$c.getSegmentPoints = function (edge) {\n var rs = edge[0]._private.rscratch;\n this.recalculateRenderedStyle(edge);\n var type = rs.edgeType;\n if (type === 'segments') {\n return getPts(rs.segpts);\n }\n};\nBRp$c.getControlPoints = function (edge) {\n var rs = edge[0]._private.rscratch;\n this.recalculateRenderedStyle(edge);\n var type = rs.edgeType;\n if (type === 'bezier' || type === 'multibezier' || type === 'self' || type === 'compound') {\n return getPts(rs.ctrlpts);\n }\n};\nBRp$c.getEdgeMidpoint = function (edge) {\n var rs = edge[0]._private.rscratch;\n this.recalculateRenderedStyle(edge);\n return {\n x: rs.midX,\n y: rs.midY\n };\n};\n\nvar BRp$b = {};\nBRp$b.manualEndptToPx = function (node, prop) {\n var r = this;\n var npos = node.position();\n var w = node.outerWidth();\n var h = node.outerHeight();\n var rs = node._private.rscratch;\n if (prop.value.length === 2) {\n var p = [prop.pfValue[0], prop.pfValue[1]];\n if (prop.units[0] === '%') {\n p[0] = p[0] * w;\n }\n if (prop.units[1] === '%') {\n p[1] = p[1] * h;\n }\n p[0] += npos.x;\n p[1] += npos.y;\n return p;\n } else {\n var angle = prop.pfValue[0];\n angle = -Math.PI / 2 + angle; // start at 12 o'clock\n\n var l = 2 * Math.max(w, h);\n var _p = [npos.x + Math.cos(angle) * l, npos.y + Math.sin(angle) * l];\n return r.nodeShapes[this.getNodeShape(node)].intersectLine(npos.x, npos.y, w, h, _p[0], _p[1], 0, node.pstyle('corner-radius').value === 'auto' ? 'auto' : node.pstyle('corner-radius').pfValue, rs);\n }\n};\nBRp$b.findEndpoints = function (edge) {\n var _ref, _tgtManEndpt$pfValue, _ref2, _srcManEndpt$pfValue;\n var r = this;\n var intersect;\n var source = edge.source()[0];\n var target = edge.target()[0];\n var srcPos = source.position();\n var tgtPos = target.position();\n var tgtArShape = edge.pstyle('target-arrow-shape').value;\n var srcArShape = edge.pstyle('source-arrow-shape').value;\n var tgtDist = edge.pstyle('target-distance-from-node').pfValue;\n var srcDist = edge.pstyle('source-distance-from-node').pfValue;\n var srcRs = source._private.rscratch;\n var tgtRs = target._private.rscratch;\n var curveStyle = edge.pstyle('curve-style').value;\n var rs = edge._private.rscratch;\n var et = rs.edgeType;\n var taxi = endsWith(curveStyle, 'taxi'); // Covers taxi and round-taxi\n var self = et === 'self' || et === 'compound';\n var bezier = et === 'bezier' || et === 'multibezier' || self;\n var multi = et !== 'bezier';\n var lines = et === 'straight' || et === 'segments';\n var segments = et === 'segments';\n var hasEndpts = bezier || multi || lines;\n var overrideEndpts = self || taxi;\n var srcManEndpt = edge.pstyle('source-endpoint');\n var srcManEndptVal = overrideEndpts ? 'outside-to-node' : srcManEndpt.value;\n var srcCornerRadius = source.pstyle('corner-radius').value === 'auto' ? 'auto' : source.pstyle('corner-radius').pfValue;\n var tgtManEndpt = edge.pstyle('target-endpoint');\n var tgtManEndptVal = overrideEndpts ? 'outside-to-node' : tgtManEndpt.value;\n var tgtCornerRadius = target.pstyle('corner-radius').value === 'auto' ? 'auto' : target.pstyle('corner-radius').pfValue;\n rs.srcManEndpt = srcManEndpt;\n rs.tgtManEndpt = tgtManEndpt;\n var p1; // last known point of edge on target side\n var p2; // last known point of edge on source side\n\n var p1_i; // point to intersect with target shape\n var p2_i; // point to intersect with source shape\n\n var tgtManEndptPt = (_ref = (tgtManEndpt === null || tgtManEndpt === undefined || (_tgtManEndpt$pfValue = tgtManEndpt.pfValue) === null || _tgtManEndpt$pfValue === undefined ? undefined : _tgtManEndpt$pfValue.length) === 2 ? tgtManEndpt.pfValue : null) !== null && _ref !== undefined ? _ref : [0, 0];\n var srcManEndptPt = (_ref2 = (srcManEndpt === null || srcManEndpt === undefined || (_srcManEndpt$pfValue = srcManEndpt.pfValue) === null || _srcManEndpt$pfValue === undefined ? undefined : _srcManEndpt$pfValue.length) === 2 ? srcManEndpt.pfValue : null) !== null && _ref2 !== undefined ? _ref2 : [0, 0];\n if (bezier) {\n var cpStart = [rs.ctrlpts[0], rs.ctrlpts[1]];\n var cpEnd = multi ? [rs.ctrlpts[rs.ctrlpts.length - 2], rs.ctrlpts[rs.ctrlpts.length - 1]] : cpStart;\n p1 = cpEnd;\n p2 = cpStart;\n } else if (lines) {\n var srcArrowFromPt = !segments ? [tgtPos.x + tgtManEndptPt[0], tgtPos.y + tgtManEndptPt[1]] : rs.segpts.slice(0, 2);\n var tgtArrowFromPt = !segments ? [srcPos.x + srcManEndptPt[0], srcPos.y + srcManEndptPt[1]] : rs.segpts.slice(rs.segpts.length - 2);\n p1 = tgtArrowFromPt;\n p2 = srcArrowFromPt;\n }\n if (tgtManEndptVal === 'inside-to-node') {\n intersect = [tgtPos.x, tgtPos.y];\n } else if (tgtManEndpt.units) {\n intersect = this.manualEndptToPx(target, tgtManEndpt);\n } else if (tgtManEndptVal === 'outside-to-line') {\n intersect = rs.tgtIntn; // use cached value from ctrlpt calc\n } else {\n if (tgtManEndptVal === 'outside-to-node' || tgtManEndptVal === 'outside-to-node-or-label') {\n p1_i = p1;\n } else if (tgtManEndptVal === 'outside-to-line' || tgtManEndptVal === 'outside-to-line-or-label') {\n p1_i = [srcPos.x, srcPos.y];\n }\n intersect = r.nodeShapes[this.getNodeShape(target)].intersectLine(tgtPos.x, tgtPos.y, target.outerWidth(), target.outerHeight(), p1_i[0], p1_i[1], 0, tgtCornerRadius, tgtRs);\n if (tgtManEndptVal === 'outside-to-node-or-label' || tgtManEndptVal === 'outside-to-line-or-label') {\n var trs = target._private.rscratch;\n var lw = trs.labelWidth;\n var lh = trs.labelHeight;\n var lx = trs.labelX;\n var ly = trs.labelY;\n var lw2 = lw / 2;\n var lh2 = lh / 2;\n var va = target.pstyle('text-valign').value;\n if (va === 'top') {\n ly -= lh2;\n } else if (va === 'bottom') {\n ly += lh2;\n }\n var ha = target.pstyle('text-halign').value;\n if (ha === 'left') {\n lx -= lw2;\n } else if (ha === 'right') {\n lx += lw2;\n }\n var labelIntersect = polygonIntersectLine(p1_i[0], p1_i[1], [lx - lw2, ly - lh2, lx + lw2, ly - lh2, lx + lw2, ly + lh2, lx - lw2, ly + lh2], tgtPos.x, tgtPos.y);\n if (labelIntersect.length > 0) {\n var refPt = srcPos;\n var intSqdist = sqdist(refPt, array2point(intersect));\n var labIntSqdist = sqdist(refPt, array2point(labelIntersect));\n var minSqDist = intSqdist;\n if (labIntSqdist < intSqdist) {\n intersect = labelIntersect;\n minSqDist = labIntSqdist;\n }\n if (labelIntersect.length > 2) {\n var labInt2SqDist = sqdist(refPt, {\n x: labelIntersect[2],\n y: labelIntersect[3]\n });\n if (labInt2SqDist < minSqDist) {\n intersect = [labelIntersect[2], labelIntersect[3]];\n }\n }\n }\n }\n }\n var arrowEnd = shortenIntersection(intersect, p1, r.arrowShapes[tgtArShape].spacing(edge) + tgtDist);\n var edgeEnd = shortenIntersection(intersect, p1, r.arrowShapes[tgtArShape].gap(edge) + tgtDist);\n rs.endX = edgeEnd[0];\n rs.endY = edgeEnd[1];\n rs.arrowEndX = arrowEnd[0];\n rs.arrowEndY = arrowEnd[1];\n if (srcManEndptVal === 'inside-to-node') {\n intersect = [srcPos.x, srcPos.y];\n } else if (srcManEndpt.units) {\n intersect = this.manualEndptToPx(source, srcManEndpt);\n } else if (srcManEndptVal === 'outside-to-line') {\n intersect = rs.srcIntn; // use cached value from ctrlpt calc\n } else {\n if (srcManEndptVal === 'outside-to-node' || srcManEndptVal === 'outside-to-node-or-label') {\n p2_i = p2;\n } else if (srcManEndptVal === 'outside-to-line' || srcManEndptVal === 'outside-to-line-or-label') {\n p2_i = [tgtPos.x, tgtPos.y];\n }\n intersect = r.nodeShapes[this.getNodeShape(source)].intersectLine(srcPos.x, srcPos.y, source.outerWidth(), source.outerHeight(), p2_i[0], p2_i[1], 0, srcCornerRadius, srcRs);\n if (srcManEndptVal === 'outside-to-node-or-label' || srcManEndptVal === 'outside-to-line-or-label') {\n var srs = source._private.rscratch;\n var _lw = srs.labelWidth;\n var _lh = srs.labelHeight;\n var _lx = srs.labelX;\n var _ly = srs.labelY;\n var _lw2 = _lw / 2;\n var _lh2 = _lh / 2;\n var _va = source.pstyle('text-valign').value;\n if (_va === 'top') {\n _ly -= _lh2;\n } else if (_va === 'bottom') {\n _ly += _lh2;\n }\n var _ha = source.pstyle('text-halign').value;\n if (_ha === 'left') {\n _lx -= _lw2;\n } else if (_ha === 'right') {\n _lx += _lw2;\n }\n var _labelIntersect = polygonIntersectLine(p2_i[0], p2_i[1], [_lx - _lw2, _ly - _lh2, _lx + _lw2, _ly - _lh2, _lx + _lw2, _ly + _lh2, _lx - _lw2, _ly + _lh2], srcPos.x, srcPos.y);\n if (_labelIntersect.length > 0) {\n var _refPt = tgtPos;\n var _intSqdist = sqdist(_refPt, array2point(intersect));\n var _labIntSqdist = sqdist(_refPt, array2point(_labelIntersect));\n var _minSqDist = _intSqdist;\n if (_labIntSqdist < _intSqdist) {\n intersect = [_labelIntersect[0], _labelIntersect[1]];\n _minSqDist = _labIntSqdist;\n }\n if (_labelIntersect.length > 2) {\n var _labInt2SqDist = sqdist(_refPt, {\n x: _labelIntersect[2],\n y: _labelIntersect[3]\n });\n if (_labInt2SqDist < _minSqDist) {\n intersect = [_labelIntersect[2], _labelIntersect[3]];\n }\n }\n }\n }\n }\n var arrowStart = shortenIntersection(intersect, p2, r.arrowShapes[srcArShape].spacing(edge) + srcDist);\n var edgeStart = shortenIntersection(intersect, p2, r.arrowShapes[srcArShape].gap(edge) + srcDist);\n rs.startX = edgeStart[0];\n rs.startY = edgeStart[1];\n rs.arrowStartX = arrowStart[0];\n rs.arrowStartY = arrowStart[1];\n if (hasEndpts) {\n if (!number$1(rs.startX) || !number$1(rs.startY) || !number$1(rs.endX) || !number$1(rs.endY)) {\n rs.badLine = true;\n } else {\n rs.badLine = false;\n }\n }\n};\nBRp$b.getSourceEndpoint = function (edge) {\n var rs = edge[0]._private.rscratch;\n this.recalculateRenderedStyle(edge);\n switch (rs.edgeType) {\n case 'haystack':\n return {\n x: rs.haystackPts[0],\n y: rs.haystackPts[1]\n };\n default:\n return {\n x: rs.arrowStartX,\n y: rs.arrowStartY\n };\n }\n};\nBRp$b.getTargetEndpoint = function (edge) {\n var rs = edge[0]._private.rscratch;\n this.recalculateRenderedStyle(edge);\n switch (rs.edgeType) {\n case 'haystack':\n return {\n x: rs.haystackPts[2],\n y: rs.haystackPts[3]\n };\n default:\n return {\n x: rs.arrowEndX,\n y: rs.arrowEndY\n };\n }\n};\n\nvar BRp$a = {};\nfunction pushBezierPts(r, edge, pts) {\n var qbezierAt$1 = function qbezierAt$1(p1, p2, p3, t) {\n return qbezierAt(p1, p2, p3, t);\n };\n var _p = edge._private;\n var bpts = _p.rstyle.bezierPts;\n for (var i = 0; i < r.bezierProjPcts.length; i++) {\n var p = r.bezierProjPcts[i];\n bpts.push({\n x: qbezierAt$1(pts[0], pts[2], pts[4], p),\n y: qbezierAt$1(pts[1], pts[3], pts[5], p)\n });\n }\n}\nBRp$a.storeEdgeProjections = function (edge) {\n var _p = edge._private;\n var rs = _p.rscratch;\n var et = rs.edgeType;\n\n // clear the cached points state\n _p.rstyle.bezierPts = null;\n _p.rstyle.linePts = null;\n _p.rstyle.haystackPts = null;\n if (et === 'multibezier' || et === 'bezier' || et === 'self' || et === 'compound') {\n _p.rstyle.bezierPts = [];\n for (var i = 0; i + 5 < rs.allpts.length; i += 4) {\n pushBezierPts(this, edge, rs.allpts.slice(i, i + 6));\n }\n } else if (et === 'segments') {\n var lpts = _p.rstyle.linePts = [];\n for (var i = 0; i + 1 < rs.allpts.length; i += 2) {\n lpts.push({\n x: rs.allpts[i],\n y: rs.allpts[i + 1]\n });\n }\n } else if (et === 'haystack') {\n var hpts = rs.haystackPts;\n _p.rstyle.haystackPts = [{\n x: hpts[0],\n y: hpts[1]\n }, {\n x: hpts[2],\n y: hpts[3]\n }];\n }\n _p.rstyle.arrowWidth = this.getArrowWidth(edge.pstyle('width').pfValue, edge.pstyle('arrow-scale').value) * this.arrowShapeWidth;\n};\nBRp$a.recalculateEdgeProjections = function (edges) {\n this.findEdgeControlPoints(edges);\n};\n\nvar BRp$9 = {};\nBRp$9.recalculateNodeLabelProjection = function (node) {\n var content = node.pstyle('label').strValue;\n if (emptyString(content)) {\n return;\n }\n var textX, textY;\n var _p = node._private;\n var nodeWidth = node.width();\n var nodeHeight = node.height();\n var padding = node.padding();\n var nodePos = node.position();\n var textHalign = node.pstyle('text-halign').strValue;\n var textValign = node.pstyle('text-valign').strValue;\n var rs = _p.rscratch;\n var rstyle = _p.rstyle;\n switch (textHalign) {\n case 'left':\n textX = nodePos.x - nodeWidth / 2 - padding;\n break;\n case 'right':\n textX = nodePos.x + nodeWidth / 2 + padding;\n break;\n default:\n // e.g. center\n textX = nodePos.x;\n }\n switch (textValign) {\n case 'top':\n textY = nodePos.y - nodeHeight / 2 - padding;\n break;\n case 'bottom':\n textY = nodePos.y + nodeHeight / 2 + padding;\n break;\n default:\n // e.g. middle\n textY = nodePos.y;\n }\n rs.labelX = textX;\n rs.labelY = textY;\n rstyle.labelX = textX;\n rstyle.labelY = textY;\n this.calculateLabelAngles(node);\n this.applyLabelDimensions(node);\n};\nvar lineAngleFromDelta = function lineAngleFromDelta(dx, dy) {\n var angle = Math.atan(dy / dx);\n if (dx === 0 && angle < 0) {\n angle = angle * -1;\n }\n return angle;\n};\nvar lineAngle = function lineAngle(p0, p1) {\n var dx = p1.x - p0.x;\n var dy = p1.y - p0.y;\n return lineAngleFromDelta(dx, dy);\n};\nvar bezierAngle = function bezierAngle(p0, p1, p2, t) {\n var t0 = bound(0, t - 0.001, 1);\n var t1 = bound(0, t + 0.001, 1);\n var lp0 = qbezierPtAt(p0, p1, p2, t0);\n var lp1 = qbezierPtAt(p0, p1, p2, t1);\n return lineAngle(lp0, lp1);\n};\nBRp$9.recalculateEdgeLabelProjections = function (edge) {\n var p;\n var _p = edge._private;\n var rs = _p.rscratch;\n var r = this;\n var content = {\n mid: edge.pstyle('label').strValue,\n source: edge.pstyle('source-label').strValue,\n target: edge.pstyle('target-label').strValue\n };\n if (content.mid || content.source || content.target) ; else {\n return; // no labels => no calcs\n }\n\n // add center point to style so bounding box calculations can use it\n //\n p = {\n x: rs.midX,\n y: rs.midY\n };\n var setRs = function setRs(propName, prefix, value) {\n setPrefixedProperty(_p.rscratch, propName, prefix, value);\n setPrefixedProperty(_p.rstyle, propName, prefix, value);\n };\n setRs('labelX', null, p.x);\n setRs('labelY', null, p.y);\n var midAngle = lineAngleFromDelta(rs.midDispX, rs.midDispY);\n setRs('labelAutoAngle', null, midAngle);\n var _createControlPointInfo = function createControlPointInfo() {\n if (_createControlPointInfo.cache) {\n return _createControlPointInfo.cache;\n } // use cache so only 1x per edge\n\n var ctrlpts = [];\n\n // store each ctrlpt info init\n for (var i = 0; i + 5 < rs.allpts.length; i += 4) {\n var p0 = {\n x: rs.allpts[i],\n y: rs.allpts[i + 1]\n };\n var p1 = {\n x: rs.allpts[i + 2],\n y: rs.allpts[i + 3]\n }; // ctrlpt\n var p2 = {\n x: rs.allpts[i + 4],\n y: rs.allpts[i + 5]\n };\n ctrlpts.push({\n p0: p0,\n p1: p1,\n p2: p2,\n startDist: 0,\n length: 0,\n segments: []\n });\n }\n var bpts = _p.rstyle.bezierPts;\n var nProjs = r.bezierProjPcts.length;\n function addSegment(cp, p0, p1, t0, t1) {\n var length = dist(p0, p1);\n var prevSegment = cp.segments[cp.segments.length - 1];\n var segment = {\n p0: p0,\n p1: p1,\n t0: t0,\n t1: t1,\n startDist: prevSegment ? prevSegment.startDist + prevSegment.length : 0,\n length: length\n };\n cp.segments.push(segment);\n cp.length += length;\n }\n\n // update each ctrlpt with segment info\n for (var _i = 0; _i < ctrlpts.length; _i++) {\n var cp = ctrlpts[_i];\n var prevCp = ctrlpts[_i - 1];\n if (prevCp) {\n cp.startDist = prevCp.startDist + prevCp.length;\n }\n addSegment(cp, cp.p0, bpts[_i * nProjs], 0, r.bezierProjPcts[0]); // first\n\n for (var j = 0; j < nProjs - 1; j++) {\n addSegment(cp, bpts[_i * nProjs + j], bpts[_i * nProjs + j + 1], r.bezierProjPcts[j], r.bezierProjPcts[j + 1]);\n }\n addSegment(cp, bpts[_i * nProjs + nProjs - 1], cp.p2, r.bezierProjPcts[nProjs - 1], 1); // last\n }\n return _createControlPointInfo.cache = ctrlpts;\n };\n var calculateEndProjection = function calculateEndProjection(prefix) {\n var angle;\n var isSrc = prefix === 'source';\n if (!content[prefix]) {\n return;\n }\n var offset = edge.pstyle(prefix + '-text-offset').pfValue;\n switch (rs.edgeType) {\n case 'self':\n case 'compound':\n case 'bezier':\n case 'multibezier':\n {\n var cps = _createControlPointInfo();\n var selected;\n var startDist = 0;\n var totalDist = 0;\n\n // find the segment we're on\n for (var i = 0; i < cps.length; i++) {\n var _cp = cps[isSrc ? i : cps.length - 1 - i];\n for (var j = 0; j < _cp.segments.length; j++) {\n var _seg = _cp.segments[isSrc ? j : _cp.segments.length - 1 - j];\n var lastSeg = i === cps.length - 1 && j === _cp.segments.length - 1;\n startDist = totalDist;\n totalDist += _seg.length;\n if (totalDist >= offset || lastSeg) {\n selected = {\n cp: _cp,\n segment: _seg\n };\n break;\n }\n }\n if (selected) {\n break;\n }\n }\n var cp = selected.cp;\n var seg = selected.segment;\n var tSegment = (offset - startDist) / seg.length;\n var segDt = seg.t1 - seg.t0;\n var t = isSrc ? seg.t0 + segDt * tSegment : seg.t1 - segDt * tSegment;\n t = bound(0, t, 1);\n p = qbezierPtAt(cp.p0, cp.p1, cp.p2, t);\n angle = bezierAngle(cp.p0, cp.p1, cp.p2, t);\n break;\n }\n case 'straight':\n case 'segments':\n case 'haystack':\n {\n var d = 0,\n di,\n d0;\n var p0, p1;\n var l = rs.allpts.length;\n for (var _i2 = 0; _i2 + 3 < l; _i2 += 2) {\n if (isSrc) {\n p0 = {\n x: rs.allpts[_i2],\n y: rs.allpts[_i2 + 1]\n };\n p1 = {\n x: rs.allpts[_i2 + 2],\n y: rs.allpts[_i2 + 3]\n };\n } else {\n p0 = {\n x: rs.allpts[l - 2 - _i2],\n y: rs.allpts[l - 1 - _i2]\n };\n p1 = {\n x: rs.allpts[l - 4 - _i2],\n y: rs.allpts[l - 3 - _i2]\n };\n }\n di = dist(p0, p1);\n d0 = d;\n d += di;\n if (d >= offset) {\n break;\n }\n }\n var pD = offset - d0;\n var _t = pD / di;\n _t = bound(0, _t, 1);\n p = lineAt(p0, p1, _t);\n angle = lineAngle(p0, p1);\n break;\n }\n }\n setRs('labelX', prefix, p.x);\n setRs('labelY', prefix, p.y);\n setRs('labelAutoAngle', prefix, angle);\n };\n calculateEndProjection('source');\n calculateEndProjection('target');\n this.applyLabelDimensions(edge);\n};\nBRp$9.applyLabelDimensions = function (ele) {\n this.applyPrefixedLabelDimensions(ele);\n if (ele.isEdge()) {\n this.applyPrefixedLabelDimensions(ele, 'source');\n this.applyPrefixedLabelDimensions(ele, 'target');\n }\n};\nBRp$9.applyPrefixedLabelDimensions = function (ele, prefix) {\n var _p = ele._private;\n var text = this.getLabelText(ele, prefix);\n var cacheKey = hashString(text, ele._private.labelDimsKey);\n\n // save recalc if the label is the same as before\n if (getPrefixedProperty(_p.rscratch, 'prefixedLabelDimsKey', prefix) === cacheKey) {\n return; // then the label dimensions + text are the same\n }\n\n // save the key\n setPrefixedProperty(_p.rscratch, 'prefixedLabelDimsKey', prefix, cacheKey);\n var labelDims = this.calculateLabelDimensions(ele, text);\n var lineHeight = ele.pstyle('line-height').pfValue;\n var textWrap = ele.pstyle('text-wrap').strValue;\n var lines = getPrefixedProperty(_p.rscratch, 'labelWrapCachedLines', prefix) || [];\n var numLines = textWrap !== 'wrap' ? 1 : Math.max(lines.length, 1);\n var normPerLineHeight = labelDims.height / numLines;\n var labelLineHeight = normPerLineHeight * lineHeight;\n var width = labelDims.width;\n var height = labelDims.height + (numLines - 1) * (lineHeight - 1) * normPerLineHeight;\n setPrefixedProperty(_p.rstyle, 'labelWidth', prefix, width);\n setPrefixedProperty(_p.rscratch, 'labelWidth', prefix, width);\n setPrefixedProperty(_p.rstyle, 'labelHeight', prefix, height);\n setPrefixedProperty(_p.rscratch, 'labelHeight', prefix, height);\n setPrefixedProperty(_p.rscratch, 'labelLineHeight', prefix, labelLineHeight);\n};\nBRp$9.getLabelText = function (ele, prefix) {\n var _p = ele._private;\n var pfd = prefix ? prefix + '-' : '';\n var text = ele.pstyle(pfd + 'label').strValue;\n var textTransform = ele.pstyle('text-transform').value;\n var rscratch = function rscratch(propName, value) {\n if (value) {\n setPrefixedProperty(_p.rscratch, propName, prefix, value);\n return value;\n } else {\n return getPrefixedProperty(_p.rscratch, propName, prefix);\n }\n };\n\n // for empty text, skip all processing\n if (!text) {\n return '';\n }\n if (textTransform == 'none') ; else if (textTransform == 'uppercase') {\n text = text.toUpperCase();\n } else if (textTransform == 'lowercase') {\n text = text.toLowerCase();\n }\n var wrapStyle = ele.pstyle('text-wrap').value;\n if (wrapStyle === 'wrap') {\n var labelKey = rscratch('labelKey');\n\n // save recalc if the label is the same as before\n if (labelKey != null && rscratch('labelWrapKey') === labelKey) {\n return rscratch('labelWrapCachedText');\n }\n var zwsp = \"\\u200B\";\n var lines = text.split('\\n');\n var maxW = ele.pstyle('text-max-width').pfValue;\n var overflow = ele.pstyle('text-overflow-wrap').value;\n var overflowAny = overflow === 'anywhere';\n var wrappedLines = [];\n var separatorRegex = /[\\s\\u200b]+|$/g; // Include end of string to add last word\n\n for (var l = 0; l < lines.length; l++) {\n var line = lines[l];\n var lineDims = this.calculateLabelDimensions(ele, line);\n var lineW = lineDims.width;\n if (overflowAny) {\n var processedLine = line.split('').join(zwsp);\n line = processedLine;\n }\n if (lineW > maxW) {\n // line is too long\n var separatorMatches = line.matchAll(separatorRegex);\n var subline = '';\n var previousIndex = 0;\n // Add fake match\n var _iterator = _createForOfIteratorHelper(separatorMatches),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var separatorMatch = _step.value;\n var wordSeparator = separatorMatch[0];\n var word = line.substring(previousIndex, separatorMatch.index);\n previousIndex = separatorMatch.index + wordSeparator.length;\n var testLine = subline.length === 0 ? word : subline + word + wordSeparator;\n var testDims = this.calculateLabelDimensions(ele, testLine);\n var testW = testDims.width;\n if (testW <= maxW) {\n // word fits on current line\n subline += word + wordSeparator;\n } else {\n // word starts new line\n if (subline) {\n wrappedLines.push(subline);\n }\n subline = word + wordSeparator;\n }\n }\n\n // if there's remaining text, put it in a wrapped line\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n if (!subline.match(/^[\\s\\u200b]+$/)) {\n wrappedLines.push(subline);\n }\n } else {\n // line is already short enough\n wrappedLines.push(line);\n }\n } // for\n\n rscratch('labelWrapCachedLines', wrappedLines);\n text = rscratch('labelWrapCachedText', wrappedLines.join('\\n'));\n rscratch('labelWrapKey', labelKey);\n } else if (wrapStyle === 'ellipsis') {\n var _maxW = ele.pstyle('text-max-width').pfValue;\n var ellipsized = '';\n var ellipsis = \"\\u2026\";\n var incLastCh = false;\n if (this.calculateLabelDimensions(ele, text).width < _maxW) {\n // the label already fits\n return text;\n }\n for (var i = 0; i < text.length; i++) {\n var widthWithNextCh = this.calculateLabelDimensions(ele, ellipsized + text[i] + ellipsis).width;\n if (widthWithNextCh > _maxW) {\n break;\n }\n ellipsized += text[i];\n if (i === text.length - 1) {\n incLastCh = true;\n }\n }\n if (!incLastCh) {\n ellipsized += ellipsis;\n }\n return ellipsized;\n } // if ellipsize\n\n return text;\n};\nBRp$9.getLabelJustification = function (ele) {\n var justification = ele.pstyle('text-justification').strValue;\n var textHalign = ele.pstyle('text-halign').strValue;\n if (justification === 'auto') {\n if (ele.isNode()) {\n switch (textHalign) {\n case 'left':\n return 'right';\n case 'right':\n return 'left';\n default:\n return 'center';\n }\n } else {\n return 'center';\n }\n } else {\n return justification;\n }\n};\nBRp$9.calculateLabelDimensions = function (ele, text) {\n var r = this;\n var containerWindow = r.cy.window();\n var document = containerWindow.document;\n var padding = 0; // add padding around text dims, as the measurement isn't that accurate\n var fStyle = ele.pstyle('font-style').strValue;\n var size = ele.pstyle('font-size').pfValue;\n var family = ele.pstyle('font-family').strValue;\n var weight = ele.pstyle('font-weight').strValue;\n var canvas = this.labelCalcCanvas;\n var c2d = this.labelCalcCanvasContext;\n if (!canvas) {\n canvas = this.labelCalcCanvas = document.createElement('canvas');\n c2d = this.labelCalcCanvasContext = canvas.getContext('2d');\n var ds = canvas.style;\n ds.position = 'absolute';\n ds.left = '-9999px';\n ds.top = '-9999px';\n ds.zIndex = '-1';\n ds.visibility = 'hidden';\n ds.pointerEvents = 'none';\n }\n c2d.font = \"\".concat(fStyle, \" \").concat(weight, \" \").concat(size, \"px \").concat(family);\n var width = 0;\n var height = 0;\n var lines = text.split('\\n');\n for (var i = 0; i < lines.length; i++) {\n var line = lines[i];\n var metrics = c2d.measureText(line);\n var w = Math.ceil(metrics.width);\n var h = size;\n width = Math.max(w, width);\n height += h;\n }\n width += padding;\n height += padding;\n return {\n width: width,\n height: height\n };\n};\nBRp$9.calculateLabelAngle = function (ele, prefix) {\n var _p = ele._private;\n var rs = _p.rscratch;\n var isEdge = ele.isEdge();\n var prefixDash = prefix ? prefix + '-' : '';\n var rot = ele.pstyle(prefixDash + 'text-rotation');\n var rotStr = rot.strValue;\n if (rotStr === 'none') {\n return 0;\n } else if (isEdge && rotStr === 'autorotate') {\n return rs.labelAutoAngle;\n } else if (rotStr === 'autorotate') {\n return 0;\n } else {\n return rot.pfValue;\n }\n};\nBRp$9.calculateLabelAngles = function (ele) {\n var r = this;\n var isEdge = ele.isEdge();\n var _p = ele._private;\n var rs = _p.rscratch;\n rs.labelAngle = r.calculateLabelAngle(ele);\n if (isEdge) {\n rs.sourceLabelAngle = r.calculateLabelAngle(ele, 'source');\n rs.targetLabelAngle = r.calculateLabelAngle(ele, 'target');\n }\n};\n\nvar BRp$8 = {};\nvar TOO_SMALL_CUT_RECT = 28;\nvar warnedCutRect = false;\nBRp$8.getNodeShape = function (node) {\n var r = this;\n var shape = node.pstyle('shape').value;\n if (shape === 'cutrectangle' && (node.width() < TOO_SMALL_CUT_RECT || node.height() < TOO_SMALL_CUT_RECT)) {\n if (!warnedCutRect) {\n warn('The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead');\n warnedCutRect = true;\n }\n return 'rectangle';\n }\n if (node.isParent()) {\n if (shape === 'rectangle' || shape === 'roundrectangle' || shape === 'round-rectangle' || shape === 'cutrectangle' || shape === 'cut-rectangle' || shape === 'barrel') {\n return shape;\n } else {\n return 'rectangle';\n }\n }\n if (shape === 'polygon') {\n var points = node.pstyle('shape-polygon-points').value;\n return r.nodeShapes.makePolygon(points).name;\n }\n return shape;\n};\n\nvar BRp$7 = {};\nBRp$7.registerCalculationListeners = function () {\n var cy = this.cy;\n var elesToUpdate = cy.collection();\n var r = this;\n var enqueue = function enqueue(eles) {\n var dirtyStyleCaches = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n elesToUpdate.merge(eles);\n if (dirtyStyleCaches) {\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var _p = ele._private;\n var rstyle = _p.rstyle;\n rstyle.clean = false;\n rstyle.cleanConnected = false;\n }\n }\n };\n r.binder(cy).on('bounds.* dirty.*', function onDirtyBounds(e) {\n var ele = e.target;\n enqueue(ele);\n }).on('style.* background.*', function onDirtyStyle(e) {\n var ele = e.target;\n enqueue(ele, false);\n });\n var updateEleCalcs = function updateEleCalcs(willDraw) {\n if (willDraw) {\n var fns = r.onUpdateEleCalcsFns;\n\n // because we need to have up-to-date style (e.g. stylesheet mappers)\n // before calculating rendered style (and pstyle might not be called yet)\n elesToUpdate.cleanStyle();\n for (var i = 0; i < elesToUpdate.length; i++) {\n var ele = elesToUpdate[i];\n var rstyle = ele._private.rstyle;\n if (ele.isNode() && !rstyle.cleanConnected) {\n enqueue(ele.connectedEdges());\n rstyle.cleanConnected = true;\n }\n }\n if (fns) {\n for (var _i = 0; _i < fns.length; _i++) {\n var fn = fns[_i];\n fn(willDraw, elesToUpdate);\n }\n }\n r.recalculateRenderedStyle(elesToUpdate);\n elesToUpdate = cy.collection();\n }\n };\n r.flushRenderedStyleQueue = function () {\n updateEleCalcs(true);\n };\n r.beforeRender(updateEleCalcs, r.beforeRenderPriorities.eleCalcs);\n};\nBRp$7.onUpdateEleCalcs = function (fn) {\n var fns = this.onUpdateEleCalcsFns = this.onUpdateEleCalcsFns || [];\n fns.push(fn);\n};\nBRp$7.recalculateRenderedStyle = function (eles, useCache) {\n var isCleanConnected = function isCleanConnected(ele) {\n return ele._private.rstyle.cleanConnected;\n };\n if (eles.length === 0) {\n return;\n }\n var edges = [];\n var nodes = [];\n\n // the renderer can't be used for calcs when destroyed, e.g. ele.boundingBox()\n if (this.destroyed) {\n return;\n }\n\n // use cache by default for perf\n if (useCache === undefined) {\n useCache = true;\n }\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var _p = ele._private;\n var rstyle = _p.rstyle;\n\n // an edge may be implicitly dirty b/c of one of its connected nodes\n // (and a request for recalc may come in between frames)\n if (ele.isEdge() && (!isCleanConnected(ele.source()) || !isCleanConnected(ele.target()))) {\n rstyle.clean = false;\n }\n if (ele.isEdge() && ele.isBundledBezier()) {\n if (ele.parallelEdges().some(function (ele) {\n return !ele._private.rstyle.clean && ele.isBundledBezier();\n })) {\n rstyle.clean = false;\n }\n }\n\n // only update if dirty and in graph\n if (useCache && rstyle.clean || ele.removed()) {\n continue;\n }\n\n // only update if not display: none\n if (ele.pstyle('display').value === 'none') {\n continue;\n }\n if (_p.group === 'nodes') {\n nodes.push(ele);\n } else {\n // edges\n edges.push(ele);\n }\n rstyle.clean = true;\n }\n\n // update node data from projections\n for (var _i2 = 0; _i2 < nodes.length; _i2++) {\n var _ele = nodes[_i2];\n var _p2 = _ele._private;\n var _rstyle = _p2.rstyle;\n var pos = _ele.position();\n this.recalculateNodeLabelProjection(_ele);\n _rstyle.nodeX = pos.x;\n _rstyle.nodeY = pos.y;\n _rstyle.nodeW = _ele.pstyle('width').pfValue;\n _rstyle.nodeH = _ele.pstyle('height').pfValue;\n }\n this.recalculateEdgeProjections(edges);\n\n // update edge data from projections\n for (var _i3 = 0; _i3 < edges.length; _i3++) {\n var _ele2 = edges[_i3];\n var _p3 = _ele2._private;\n var _rstyle2 = _p3.rstyle;\n var rs = _p3.rscratch;\n\n // update rstyle positions\n _rstyle2.srcX = rs.arrowStartX;\n _rstyle2.srcY = rs.arrowStartY;\n _rstyle2.tgtX = rs.arrowEndX;\n _rstyle2.tgtY = rs.arrowEndY;\n _rstyle2.midX = rs.midX;\n _rstyle2.midY = rs.midY;\n _rstyle2.labelAngle = rs.labelAngle;\n _rstyle2.sourceLabelAngle = rs.sourceLabelAngle;\n _rstyle2.targetLabelAngle = rs.targetLabelAngle;\n }\n};\n\nvar BRp$6 = {};\nBRp$6.updateCachedGrabbedEles = function () {\n var eles = this.cachedZSortedEles;\n if (!eles) {\n // just let this be recalculated on the next z sort tick\n return;\n }\n eles.drag = [];\n eles.nondrag = [];\n var grabTargets = [];\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var rs = ele._private.rscratch;\n if (ele.grabbed() && !ele.isParent()) {\n grabTargets.push(ele);\n } else if (rs.inDragLayer) {\n eles.drag.push(ele);\n } else {\n eles.nondrag.push(ele);\n }\n }\n\n // put the grab target nodes last so it's on top of its neighbourhood\n for (var i = 0; i < grabTargets.length; i++) {\n var ele = grabTargets[i];\n eles.drag.push(ele);\n }\n};\nBRp$6.invalidateCachedZSortedEles = function () {\n this.cachedZSortedEles = null;\n};\nBRp$6.getCachedZSortedEles = function (forceRecalc) {\n if (forceRecalc || !this.cachedZSortedEles) {\n var eles = this.cy.mutableElements().toArray();\n eles.sort(zIndexSort);\n eles.interactive = eles.filter(function (ele) {\n return ele.interactive();\n });\n this.cachedZSortedEles = eles;\n this.updateCachedGrabbedEles();\n } else {\n eles = this.cachedZSortedEles;\n }\n return eles;\n};\n\nvar BRp$5 = {};\n[BRp$e, BRp$d, BRp$c, BRp$b, BRp$a, BRp$9, BRp$8, BRp$7, BRp$6].forEach(function (props) {\n extend(BRp$5, props);\n});\n\nvar BRp$4 = {};\nBRp$4.getCachedImage = function (url, crossOrigin, onLoad) {\n var r = this;\n var imageCache = r.imageCache = r.imageCache || {};\n var cache = imageCache[url];\n if (cache) {\n if (!cache.image.complete) {\n cache.image.addEventListener('load', onLoad);\n }\n return cache.image;\n } else {\n cache = imageCache[url] = imageCache[url] || {};\n var image = cache.image = new Image(); // eslint-disable-line no-undef\n\n image.addEventListener('load', onLoad);\n image.addEventListener('error', function () {\n image.error = true;\n });\n\n // #1582 safari doesn't load data uris with crossOrigin properly\n // https://bugs.webkit.org/show_bug.cgi?id=123978\n var dataUriPrefix = 'data:';\n var isDataUri = url.substring(0, dataUriPrefix.length).toLowerCase() === dataUriPrefix;\n if (!isDataUri) {\n // if crossorigin is 'null'(stringified), then manually set it to null \n crossOrigin = crossOrigin === 'null' ? null : crossOrigin;\n image.crossOrigin = crossOrigin; // prevent tainted canvas\n }\n image.src = url;\n return image;\n }\n};\n\nvar BRp$3 = {};\n\n/* global document, ResizeObserver, MutationObserver */\n\nBRp$3.registerBinding = function (target, event, handler, useCapture) {\n // eslint-disable-line no-unused-vars\n var args = Array.prototype.slice.apply(arguments, [1]); // copy\n\n if (Array.isArray(target)) {\n var res = [];\n for (var i = 0; i < target.length; i++) {\n var t = target[i];\n if (t !== undefined) {\n var b = this.binder(t);\n res.push(b.on.apply(b, args));\n }\n }\n return res;\n }\n var b = this.binder(target);\n return b.on.apply(b, args);\n};\nBRp$3.binder = function (tgt) {\n var r = this;\n var containerWindow = r.cy.window();\n var tgtIsDom = tgt === containerWindow || tgt === containerWindow.document || tgt === containerWindow.document.body || domElement(tgt);\n if (r.supportsPassiveEvents == null) {\n // from https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n var supportsPassive = false;\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n return true;\n }\n });\n containerWindow.addEventListener('test', null, opts);\n } catch (err) {\n // not supported\n }\n r.supportsPassiveEvents = supportsPassive;\n }\n var on = function on(event, handler, useCapture) {\n var args = Array.prototype.slice.call(arguments);\n if (tgtIsDom && r.supportsPassiveEvents) {\n // replace useCapture w/ opts obj\n args[2] = {\n capture: useCapture != null ? useCapture : false,\n passive: false,\n once: false\n };\n }\n r.bindings.push({\n target: tgt,\n args: args\n });\n (tgt.addEventListener || tgt.on).apply(tgt, args);\n return this;\n };\n return {\n on: on,\n addEventListener: on,\n addListener: on,\n bind: on\n };\n};\nBRp$3.nodeIsDraggable = function (node) {\n return node && node.isNode() && !node.locked() && node.grabbable();\n};\nBRp$3.nodeIsGrabbable = function (node) {\n return this.nodeIsDraggable(node) && node.interactive();\n};\nBRp$3.load = function () {\n var r = this;\n var containerWindow = r.cy.window();\n var isSelected = function isSelected(ele) {\n return ele.selected();\n };\n var getShadowRoot = function getShadowRoot(element) {\n var rootNode = element.getRootNode();\n // Check if the root node is a shadow root\n if (rootNode && rootNode.nodeType === 11 && rootNode.host !== undefined) {\n return rootNode;\n }\n };\n var triggerEvents = function triggerEvents(target, names, e, position) {\n if (target == null) {\n target = r.cy;\n }\n for (var i = 0; i < names.length; i++) {\n var name = names[i];\n target.emit({\n originalEvent: e,\n type: name,\n position: position\n });\n }\n };\n var isMultSelKeyDown = function isMultSelKeyDown(e) {\n return e.shiftKey || e.metaKey || e.ctrlKey; // maybe e.altKey\n };\n var allowPanningPassthrough = function allowPanningPassthrough(down, downs) {\n var allowPassthrough = true;\n if (r.cy.hasCompoundNodes() && down && down.pannable()) {\n // a grabbable compound node below the ele => no passthrough panning\n for (var i = 0; downs && i < downs.length; i++) {\n var down = downs[i];\n\n //if any parent node in event hierarchy isn't pannable, reject passthrough\n if (down.isNode() && down.isParent() && !down.pannable()) {\n allowPassthrough = false;\n break;\n }\n }\n } else {\n allowPassthrough = true;\n }\n return allowPassthrough;\n };\n var setGrabbed = function setGrabbed(ele) {\n ele[0]._private.grabbed = true;\n };\n var setFreed = function setFreed(ele) {\n ele[0]._private.grabbed = false;\n };\n var setInDragLayer = function setInDragLayer(ele) {\n ele[0]._private.rscratch.inDragLayer = true;\n };\n var setOutDragLayer = function setOutDragLayer(ele) {\n ele[0]._private.rscratch.inDragLayer = false;\n };\n var setGrabTarget = function setGrabTarget(ele) {\n ele[0]._private.rscratch.isGrabTarget = true;\n };\n var removeGrabTarget = function removeGrabTarget(ele) {\n ele[0]._private.rscratch.isGrabTarget = false;\n };\n var addToDragList = function addToDragList(ele, opts) {\n var list = opts.addToList;\n var listHasEle = list.has(ele);\n if (!listHasEle && ele.grabbable() && !ele.locked()) {\n list.merge(ele);\n setGrabbed(ele);\n }\n };\n\n // helper function to determine which child nodes and inner edges\n // of a compound node to be dragged as well as the grabbed and selected nodes\n var addDescendantsToDrag = function addDescendantsToDrag(node, opts) {\n if (!node.cy().hasCompoundNodes()) {\n return;\n }\n if (opts.inDragLayer == null && opts.addToList == null) {\n return;\n } // nothing to do\n\n var innerNodes = node.descendants();\n if (opts.inDragLayer) {\n innerNodes.forEach(setInDragLayer);\n innerNodes.connectedEdges().forEach(setInDragLayer);\n }\n if (opts.addToList) {\n addToDragList(innerNodes, opts);\n }\n };\n\n // adds the given nodes and its neighbourhood to the drag layer\n var addNodesToDrag = function addNodesToDrag(nodes, opts) {\n opts = opts || {};\n var hasCompoundNodes = nodes.cy().hasCompoundNodes();\n if (opts.inDragLayer) {\n nodes.forEach(setInDragLayer);\n nodes.neighborhood().stdFilter(function (ele) {\n return !hasCompoundNodes || ele.isEdge();\n }).forEach(setInDragLayer);\n }\n if (opts.addToList) {\n nodes.forEach(function (ele) {\n addToDragList(ele, opts);\n });\n }\n addDescendantsToDrag(nodes, opts); // always add to drag\n\n // also add nodes and edges related to the topmost ancestor\n updateAncestorsInDragLayer(nodes, {\n inDragLayer: opts.inDragLayer\n });\n r.updateCachedGrabbedEles();\n };\n var addNodeToDrag = addNodesToDrag;\n var freeDraggedElements = function freeDraggedElements(grabbedEles) {\n if (!grabbedEles) {\n return;\n }\n\n // just go over all elements rather than doing a bunch of (possibly expensive) traversals\n r.getCachedZSortedEles().forEach(function (ele) {\n setFreed(ele);\n setOutDragLayer(ele);\n removeGrabTarget(ele);\n });\n r.updateCachedGrabbedEles();\n };\n\n // helper function to determine which ancestor nodes and edges should go\n // to the drag layer (or should be removed from drag layer).\n var updateAncestorsInDragLayer = function updateAncestorsInDragLayer(node, opts) {\n if (opts.inDragLayer == null && opts.addToList == null) {\n return;\n } // nothing to do\n\n if (!node.cy().hasCompoundNodes()) {\n return;\n }\n\n // find top-level parent\n var parent = node.ancestors().orphans();\n\n // no parent node: no nodes to add to the drag layer\n if (parent.same(node)) {\n return;\n }\n var nodes = parent.descendants().spawnSelf().merge(parent).unmerge(node).unmerge(node.descendants());\n var edges = nodes.connectedEdges();\n if (opts.inDragLayer) {\n edges.forEach(setInDragLayer);\n nodes.forEach(setInDragLayer);\n }\n if (opts.addToList) {\n nodes.forEach(function (ele) {\n addToDragList(ele, opts);\n });\n }\n };\n var blurActiveDomElement = function blurActiveDomElement() {\n if (document.activeElement != null && document.activeElement.blur != null) {\n document.activeElement.blur();\n }\n };\n var haveMutationsApi = typeof MutationObserver !== 'undefined';\n var haveResizeObserverApi = typeof ResizeObserver !== 'undefined';\n\n // watch for when the cy container is removed from the dom\n if (haveMutationsApi) {\n r.removeObserver = new MutationObserver(function (mutns) {\n // eslint-disable-line no-undef\n for (var i = 0; i < mutns.length; i++) {\n var mutn = mutns[i];\n var rNodes = mutn.removedNodes;\n if (rNodes) {\n for (var j = 0; j < rNodes.length; j++) {\n var rNode = rNodes[j];\n if (rNode === r.container) {\n r.destroy();\n break;\n }\n }\n }\n }\n });\n if (r.container.parentNode) {\n r.removeObserver.observe(r.container.parentNode, {\n childList: true\n });\n }\n } else {\n r.registerBinding(r.container, 'DOMNodeRemoved', function (e) {\n // eslint-disable-line no-unused-vars\n r.destroy();\n });\n }\n var onResize = debounce(function () {\n r.cy.resize();\n }, 100);\n if (haveMutationsApi) {\n r.styleObserver = new MutationObserver(onResize); // eslint-disable-line no-undef\n\n r.styleObserver.observe(r.container, {\n attributes: true\n });\n }\n\n // auto resize\n r.registerBinding(containerWindow, 'resize', onResize); // eslint-disable-line no-undef\n\n if (haveResizeObserverApi) {\n r.resizeObserver = new ResizeObserver(onResize); // eslint-disable-line no-undef\n\n r.resizeObserver.observe(r.container);\n }\n var forEachUp = function forEachUp(domEle, fn) {\n while (domEle != null) {\n fn(domEle);\n domEle = domEle.parentNode;\n }\n };\n var invalidateCoords = function invalidateCoords() {\n r.invalidateContainerClientCoordsCache();\n };\n forEachUp(r.container, function (domEle) {\n r.registerBinding(domEle, 'transitionend', invalidateCoords);\n r.registerBinding(domEle, 'animationend', invalidateCoords);\n r.registerBinding(domEle, 'scroll', invalidateCoords);\n });\n\n // stop right click menu from appearing on cy\n r.registerBinding(r.container, 'contextmenu', function (e) {\n e.preventDefault();\n });\n var inBoxSelection = function inBoxSelection() {\n return r.selection[4] !== 0;\n };\n var eventInContainer = function eventInContainer(e) {\n // save cycles if mouse events aren't to be captured\n var containerPageCoords = r.findContainerClientCoords();\n var x = containerPageCoords[0];\n var y = containerPageCoords[1];\n var width = containerPageCoords[2];\n var height = containerPageCoords[3];\n var positions = e.touches ? e.touches : [e];\n var atLeastOnePosInside = false;\n for (var i = 0; i < positions.length; i++) {\n var p = positions[i];\n if (x <= p.clientX && p.clientX <= x + width && y <= p.clientY && p.clientY <= y + height) {\n atLeastOnePosInside = true;\n break;\n }\n }\n if (!atLeastOnePosInside) {\n return false;\n }\n var container = r.container;\n var target = e.target;\n var tParent = target.parentNode;\n var containerIsTarget = false;\n while (tParent) {\n if (tParent === container) {\n containerIsTarget = true;\n break;\n }\n tParent = tParent.parentNode;\n }\n if (!containerIsTarget) {\n return false;\n } // if target is outisde cy container, then this event is not for us\n\n return true;\n };\n\n // Primary key\n r.registerBinding(r.container, 'mousedown', function mousedownHandler(e) {\n if (!eventInContainer(e)) {\n return;\n }\n\n // during left mouse button gestures, ignore other buttons\n if (r.hoverData.which === 1 && e.which !== 1) {\n return;\n }\n e.preventDefault();\n blurActiveDomElement();\n r.hoverData.capture = true;\n r.hoverData.which = e.which;\n var cy = r.cy;\n var gpos = [e.clientX, e.clientY];\n var pos = r.projectIntoViewport(gpos[0], gpos[1]);\n var select = r.selection;\n var nears = r.findNearestElements(pos[0], pos[1], true, false);\n var near = nears[0];\n var draggedElements = r.dragData.possibleDragElements;\n r.hoverData.mdownPos = pos;\n r.hoverData.mdownGPos = gpos;\n var makeEvent = function makeEvent(type) {\n return {\n originalEvent: e,\n type: type,\n position: {\n x: pos[0],\n y: pos[1]\n }\n };\n };\n var checkForTaphold = function checkForTaphold() {\n r.hoverData.tapholdCancelled = false;\n clearTimeout(r.hoverData.tapholdTimeout);\n r.hoverData.tapholdTimeout = setTimeout(function () {\n if (r.hoverData.tapholdCancelled) {\n return;\n } else {\n var ele = r.hoverData.down;\n if (ele) {\n ele.emit(makeEvent('taphold'));\n } else {\n cy.emit(makeEvent('taphold'));\n }\n }\n }, r.tapholdDuration);\n };\n\n // Right click button\n if (e.which == 3) {\n r.hoverData.cxtStarted = true;\n var cxtEvt = {\n originalEvent: e,\n type: 'cxttapstart',\n position: {\n x: pos[0],\n y: pos[1]\n }\n };\n if (near) {\n near.activate();\n near.emit(cxtEvt);\n r.hoverData.down = near;\n } else {\n cy.emit(cxtEvt);\n }\n r.hoverData.downTime = new Date().getTime();\n r.hoverData.cxtDragged = false;\n\n // Primary button\n } else if (e.which == 1) {\n if (near) {\n near.activate();\n }\n\n // Element dragging\n {\n // If something is under the cursor and it is draggable, prepare to grab it\n if (near != null) {\n if (r.nodeIsGrabbable(near)) {\n var triggerGrab = function triggerGrab(ele) {\n ele.emit(makeEvent('grab'));\n };\n setGrabTarget(near);\n if (!near.selected()) {\n draggedElements = r.dragData.possibleDragElements = cy.collection();\n addNodeToDrag(near, {\n addToList: draggedElements\n });\n near.emit(makeEvent('grabon')).emit(makeEvent('grab'));\n } else {\n draggedElements = r.dragData.possibleDragElements = cy.collection();\n var selectedNodes = cy.$(function (ele) {\n return ele.isNode() && ele.selected() && r.nodeIsGrabbable(ele);\n });\n addNodesToDrag(selectedNodes, {\n addToList: draggedElements\n });\n near.emit(makeEvent('grabon'));\n selectedNodes.forEach(triggerGrab);\n }\n r.redrawHint('eles', true);\n r.redrawHint('drag', true);\n }\n }\n r.hoverData.down = near;\n r.hoverData.downs = nears;\n r.hoverData.downTime = new Date().getTime();\n }\n triggerEvents(near, ['mousedown', 'tapstart', 'vmousedown'], e, {\n x: pos[0],\n y: pos[1]\n });\n if (near == null) {\n select[4] = 1;\n r.data.bgActivePosistion = {\n x: pos[0],\n y: pos[1]\n };\n r.redrawHint('select', true);\n r.redraw();\n } else if (near.pannable()) {\n select[4] = 1; // for future pan\n }\n checkForTaphold();\n }\n\n // Initialize selection box coordinates\n select[0] = select[2] = pos[0];\n select[1] = select[3] = pos[1];\n }, false);\n var shadowRoot = getShadowRoot(r.container);\n r.registerBinding([containerWindow, shadowRoot], 'mousemove', function mousemoveHandler(e) {\n // eslint-disable-line no-undef\n var capture = r.hoverData.capture;\n if (!capture && !eventInContainer(e)) {\n return;\n }\n var preventDefault = false;\n var cy = r.cy;\n var zoom = cy.zoom();\n var gpos = [e.clientX, e.clientY];\n var pos = r.projectIntoViewport(gpos[0], gpos[1]);\n var mdownPos = r.hoverData.mdownPos;\n var mdownGPos = r.hoverData.mdownGPos;\n var select = r.selection;\n var near = null;\n if (!r.hoverData.draggingEles && !r.hoverData.dragging && !r.hoverData.selecting) {\n near = r.findNearestElement(pos[0], pos[1], true, false);\n }\n var last = r.hoverData.last;\n var down = r.hoverData.down;\n var disp = [pos[0] - select[2], pos[1] - select[3]];\n var draggedElements = r.dragData.possibleDragElements;\n var isOverThresholdDrag;\n if (mdownGPos) {\n var dx = gpos[0] - mdownGPos[0];\n var dx2 = dx * dx;\n var dy = gpos[1] - mdownGPos[1];\n var dy2 = dy * dy;\n var dist2 = dx2 + dy2;\n r.hoverData.isOverThresholdDrag = isOverThresholdDrag = dist2 >= r.desktopTapThreshold2;\n }\n var multSelKeyDown = isMultSelKeyDown(e);\n if (isOverThresholdDrag) {\n r.hoverData.tapholdCancelled = true;\n }\n var updateDragDelta = function updateDragDelta() {\n var dragDelta = r.hoverData.dragDelta = r.hoverData.dragDelta || [];\n if (dragDelta.length === 0) {\n dragDelta.push(disp[0]);\n dragDelta.push(disp[1]);\n } else {\n dragDelta[0] += disp[0];\n dragDelta[1] += disp[1];\n }\n };\n preventDefault = true;\n triggerEvents(near, ['mousemove', 'vmousemove', 'tapdrag'], e, {\n x: pos[0],\n y: pos[1]\n });\n var makeEvent = function makeEvent(type) {\n return {\n originalEvent: e,\n type: type,\n position: {\n x: pos[0],\n y: pos[1]\n }\n };\n };\n var goIntoBoxMode = function goIntoBoxMode() {\n r.data.bgActivePosistion = undefined;\n if (!r.hoverData.selecting) {\n cy.emit(makeEvent('boxstart'));\n }\n select[4] = 1;\n r.hoverData.selecting = true;\n r.redrawHint('select', true);\n r.redraw();\n };\n\n // trigger context drag if rmouse down\n if (r.hoverData.which === 3) {\n // but only if over threshold\n if (isOverThresholdDrag) {\n var cxtEvt = makeEvent('cxtdrag');\n if (down) {\n down.emit(cxtEvt);\n } else {\n cy.emit(cxtEvt);\n }\n r.hoverData.cxtDragged = true;\n if (!r.hoverData.cxtOver || near !== r.hoverData.cxtOver) {\n if (r.hoverData.cxtOver) {\n r.hoverData.cxtOver.emit(makeEvent('cxtdragout'));\n }\n r.hoverData.cxtOver = near;\n if (near) {\n near.emit(makeEvent('cxtdragover'));\n }\n }\n }\n\n // Check if we are drag panning the entire graph\n } else if (r.hoverData.dragging) {\n preventDefault = true;\n if (cy.panningEnabled() && cy.userPanningEnabled()) {\n var deltaP;\n if (r.hoverData.justStartedPan) {\n var mdPos = r.hoverData.mdownPos;\n deltaP = {\n x: (pos[0] - mdPos[0]) * zoom,\n y: (pos[1] - mdPos[1]) * zoom\n };\n r.hoverData.justStartedPan = false;\n } else {\n deltaP = {\n x: disp[0] * zoom,\n y: disp[1] * zoom\n };\n }\n cy.panBy(deltaP);\n cy.emit(makeEvent('dragpan'));\n r.hoverData.dragged = true;\n }\n\n // Needs reproject due to pan changing viewport\n pos = r.projectIntoViewport(e.clientX, e.clientY);\n\n // Checks primary button down & out of time & mouse not moved much\n } else if (select[4] == 1 && (down == null || down.pannable())) {\n if (isOverThresholdDrag) {\n if (!r.hoverData.dragging && cy.boxSelectionEnabled() && (multSelKeyDown || !cy.panningEnabled() || !cy.userPanningEnabled())) {\n goIntoBoxMode();\n } else if (!r.hoverData.selecting && cy.panningEnabled() && cy.userPanningEnabled()) {\n var allowPassthrough = allowPanningPassthrough(down, r.hoverData.downs);\n if (allowPassthrough) {\n r.hoverData.dragging = true;\n r.hoverData.justStartedPan = true;\n select[4] = 0;\n r.data.bgActivePosistion = array2point(mdownPos);\n r.redrawHint('select', true);\n r.redraw();\n }\n }\n if (down && down.pannable() && down.active()) {\n down.unactivate();\n }\n }\n } else {\n if (down && down.pannable() && down.active()) {\n down.unactivate();\n }\n if ((!down || !down.grabbed()) && near != last) {\n if (last) {\n triggerEvents(last, ['mouseout', 'tapdragout'], e, {\n x: pos[0],\n y: pos[1]\n });\n }\n if (near) {\n triggerEvents(near, ['mouseover', 'tapdragover'], e, {\n x: pos[0],\n y: pos[1]\n });\n }\n r.hoverData.last = near;\n }\n if (down) {\n if (isOverThresholdDrag) {\n // then we can take action\n\n if (cy.boxSelectionEnabled() && multSelKeyDown) {\n // then selection overrides\n if (down && down.grabbed()) {\n freeDraggedElements(draggedElements);\n down.emit(makeEvent('freeon'));\n draggedElements.emit(makeEvent('free'));\n if (r.dragData.didDrag) {\n down.emit(makeEvent('dragfreeon'));\n draggedElements.emit(makeEvent('dragfree'));\n }\n }\n goIntoBoxMode();\n } else if (down && down.grabbed() && r.nodeIsDraggable(down)) {\n // drag node\n var justStartedDrag = !r.dragData.didDrag;\n if (justStartedDrag) {\n r.redrawHint('eles', true);\n }\n r.dragData.didDrag = true; // indicate that we actually did drag the node\n\n // now, add the elements to the drag layer if not done already\n if (!r.hoverData.draggingEles) {\n addNodesToDrag(draggedElements, {\n inDragLayer: true\n });\n }\n var totalShift = {\n x: 0,\n y: 0\n };\n if (number$1(disp[0]) && number$1(disp[1])) {\n totalShift.x += disp[0];\n totalShift.y += disp[1];\n if (justStartedDrag) {\n var dragDelta = r.hoverData.dragDelta;\n if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) {\n totalShift.x += dragDelta[0];\n totalShift.y += dragDelta[1];\n }\n }\n }\n r.hoverData.draggingEles = true;\n draggedElements.silentShift(totalShift).emit(makeEvent('position')).emit(makeEvent('drag'));\n r.redrawHint('drag', true);\n r.redraw();\n }\n } else {\n // otherwise save drag delta for when we actually start dragging so the relative grab pos is constant\n updateDragDelta();\n }\n }\n\n // prevent the dragging from triggering text selection on the page\n preventDefault = true;\n }\n select[2] = pos[0];\n select[3] = pos[1];\n if (preventDefault) {\n if (e.stopPropagation) e.stopPropagation();\n if (e.preventDefault) e.preventDefault();\n return false;\n }\n }, false);\n var clickTimeout, didDoubleClick, prevClickTimeStamp;\n r.registerBinding(containerWindow, 'mouseup', function mouseupHandler(e) {\n // eslint-disable-line no-undef\n // during left mouse button gestures, ignore other buttons\n if (r.hoverData.which === 1 && e.which !== 1 && r.hoverData.capture) {\n return;\n }\n var capture = r.hoverData.capture;\n if (!capture) {\n return;\n }\n r.hoverData.capture = false;\n var cy = r.cy;\n var pos = r.projectIntoViewport(e.clientX, e.clientY);\n var select = r.selection;\n var near = r.findNearestElement(pos[0], pos[1], true, false);\n var draggedElements = r.dragData.possibleDragElements;\n var down = r.hoverData.down;\n var multSelKeyDown = isMultSelKeyDown(e);\n if (r.data.bgActivePosistion) {\n r.redrawHint('select', true);\n r.redraw();\n }\n r.hoverData.tapholdCancelled = true;\n r.data.bgActivePosistion = undefined; // not active bg now\n\n if (down) {\n down.unactivate();\n }\n var makeEvent = function makeEvent(type) {\n return {\n originalEvent: e,\n type: type,\n position: {\n x: pos[0],\n y: pos[1]\n }\n };\n };\n if (r.hoverData.which === 3) {\n var cxtEvt = makeEvent('cxttapend');\n if (down) {\n down.emit(cxtEvt);\n } else {\n cy.emit(cxtEvt);\n }\n if (!r.hoverData.cxtDragged) {\n var cxtTap = makeEvent('cxttap');\n if (down) {\n down.emit(cxtTap);\n } else {\n cy.emit(cxtTap);\n }\n }\n r.hoverData.cxtDragged = false;\n r.hoverData.which = null;\n } else if (r.hoverData.which === 1) {\n triggerEvents(near, ['mouseup', 'tapend', 'vmouseup'], e, {\n x: pos[0],\n y: pos[1]\n });\n if (!r.dragData.didDrag &&\n // didn't move a node around\n !r.hoverData.dragged &&\n // didn't pan\n !r.hoverData.selecting &&\n // not box selection\n !r.hoverData.isOverThresholdDrag // didn't move too much\n ) {\n triggerEvents(down, [\"click\", \"tap\", \"vclick\"], e, {\n x: pos[0],\n y: pos[1]\n });\n didDoubleClick = false;\n if (e.timeStamp - prevClickTimeStamp <= cy.multiClickDebounceTime()) {\n clickTimeout && clearTimeout(clickTimeout);\n didDoubleClick = true;\n prevClickTimeStamp = null;\n triggerEvents(down, [\"dblclick\", \"dbltap\", \"vdblclick\"], e, {\n x: pos[0],\n y: pos[1]\n });\n } else {\n clickTimeout = setTimeout(function () {\n if (didDoubleClick) return;\n triggerEvents(down, [\"oneclick\", \"onetap\", \"voneclick\"], e, {\n x: pos[0],\n y: pos[1]\n });\n }, cy.multiClickDebounceTime());\n prevClickTimeStamp = e.timeStamp;\n }\n }\n\n // Deselect all elements if nothing is currently under the mouse cursor and we aren't dragging something\n if (down == null // not mousedown on node\n && !r.dragData.didDrag // didn't move the node around\n && !r.hoverData.selecting // not box selection\n && !r.hoverData.dragged // didn't pan\n && !isMultSelKeyDown(e)) {\n cy.$(isSelected).unselect(['tapunselect']);\n if (draggedElements.length > 0) {\n r.redrawHint('eles', true);\n }\n r.dragData.possibleDragElements = draggedElements = cy.collection();\n }\n\n // Single selection\n if (near == down && !r.dragData.didDrag && !r.hoverData.selecting) {\n if (near != null && near._private.selectable) {\n if (r.hoverData.dragging) ; else if (cy.selectionType() === 'additive' || multSelKeyDown) {\n if (near.selected()) {\n near.unselect(['tapunselect']);\n } else {\n near.select(['tapselect']);\n }\n } else {\n if (!multSelKeyDown) {\n cy.$(isSelected).unmerge(near).unselect(['tapunselect']);\n near.select(['tapselect']);\n }\n }\n r.redrawHint('eles', true);\n }\n }\n if (r.hoverData.selecting) {\n var box = cy.collection(r.getAllInBox(select[0], select[1], select[2], select[3]));\n r.redrawHint('select', true);\n if (box.length > 0) {\n r.redrawHint('eles', true);\n }\n cy.emit(makeEvent('boxend'));\n var eleWouldBeSelected = function eleWouldBeSelected(ele) {\n return ele.selectable() && !ele.selected();\n };\n if (cy.selectionType() === 'additive') {\n box.emit(makeEvent('box')).stdFilter(eleWouldBeSelected).select().emit(makeEvent('boxselect'));\n } else {\n if (!multSelKeyDown) {\n cy.$(isSelected).unmerge(box).unselect();\n }\n box.emit(makeEvent('box')).stdFilter(eleWouldBeSelected).select().emit(makeEvent('boxselect'));\n }\n\n // always need redraw in case eles unselectable\n r.redraw();\n }\n\n // Cancel drag pan\n if (r.hoverData.dragging) {\n r.hoverData.dragging = false;\n r.redrawHint('select', true);\n r.redrawHint('eles', true);\n r.redraw();\n }\n if (!select[4]) {\n r.redrawHint('drag', true);\n r.redrawHint('eles', true);\n var downWasGrabbed = down && down.grabbed();\n freeDraggedElements(draggedElements);\n if (downWasGrabbed) {\n down.emit(makeEvent('freeon'));\n draggedElements.emit(makeEvent('free'));\n if (r.dragData.didDrag) {\n down.emit(makeEvent('dragfreeon'));\n draggedElements.emit(makeEvent('dragfree'));\n }\n }\n }\n } // else not right mouse\n\n select[4] = 0;\n r.hoverData.down = null;\n r.hoverData.cxtStarted = false;\n r.hoverData.draggingEles = false;\n r.hoverData.selecting = false;\n r.hoverData.isOverThresholdDrag = false;\n r.dragData.didDrag = false;\n r.hoverData.dragged = false;\n r.hoverData.dragDelta = [];\n r.hoverData.mdownPos = null;\n r.hoverData.mdownGPos = null;\n r.hoverData.which = null;\n }, false);\n var wheelDeltas = []; // log of first N wheel deltas\n var wheelDeltaN = 4; // how many events to log\n var inaccurateScrollDevice;\n var inaccurateScrollFactor = 100000; // base of inaccurate wheel deltas (e.g. base 5 could yield wheels of 10, 25, 50, etc.)\n\n var allAreDivisibleBy = function allAreDivisibleBy(list, factor) {\n for (var i = 0; i < list.length; i++) {\n if (list[i] % factor !== 0) {\n return false;\n }\n }\n return true;\n };\n var allAreSameMagnitude = function allAreSameMagnitude(list) {\n var firstMag = Math.abs(list[0]);\n for (var i = 1; i < list.length; i++) {\n if (Math.abs(list[i]) !== firstMag) {\n return false;\n }\n }\n return true;\n };\n var wheelHandler = function wheelHandler(e) {\n var clamp = false;\n var delta = e.deltaY;\n if (delta == null) {\n // compatibility with old browsers\n if (e.wheelDeltaY != null) {\n delta = e.wheelDeltaY / 4;\n } else if (e.wheelDelta != null) {\n delta = e.wheelDelta / 4;\n }\n }\n if (delta === 0) {\n return; // no change in zoom (Bug: Zoom becomes erratic on rapid scroll due to deltaY: 0 event #3394)\n }\n if (inaccurateScrollDevice == null) {\n if (wheelDeltas.length >= wheelDeltaN) {\n // use log to determine if inaccurate\n var wds = wheelDeltas;\n inaccurateScrollDevice = allAreDivisibleBy(wds, 5);\n if (!inaccurateScrollDevice) {\n // check for all large values of exact same magnitude\n var firstMag = Math.abs(wds[0]);\n inaccurateScrollDevice = allAreSameMagnitude(wds) && firstMag > 5;\n }\n if (inaccurateScrollDevice) {\n for (var i = 0; i < wds.length; i++) {\n inaccurateScrollFactor = Math.min(Math.abs(wds[i]), inaccurateScrollFactor);\n }\n }\n\n // console.log('Sampled wheel deltas:', wds);\n // console.log('inaccurateScrollDevice:', inaccurateScrollDevice);\n // console.log('inaccurateScrollFactor:', inaccurateScrollFactor);\n } else {\n // clamp and log until we reach N\n wheelDeltas.push(delta);\n clamp = true;\n // console.log('Clamping initial wheel events until we get a good sample');\n }\n } else if (inaccurateScrollDevice) {\n // keep updating\n inaccurateScrollFactor = Math.min(Math.abs(delta), inaccurateScrollFactor);\n // console.log('Keep updating inaccurateScrollFactor beyond sample in case we did not get the smallest possible val:', inaccurateScrollFactor);\n }\n if (r.scrollingPage) {\n return;\n } // while scrolling, ignore wheel-to-zoom\n\n var cy = r.cy;\n var zoom = cy.zoom();\n var pan = cy.pan();\n var pos = r.projectIntoViewport(e.clientX, e.clientY);\n var rpos = [pos[0] * zoom + pan.x, pos[1] * zoom + pan.y];\n if (r.hoverData.draggingEles || r.hoverData.dragging || r.hoverData.cxtStarted || inBoxSelection()) {\n // if pan dragging or cxt dragging, wheel movements make no zoom\n e.preventDefault();\n return;\n }\n if (cy.panningEnabled() && cy.userPanningEnabled() && cy.zoomingEnabled() && cy.userZoomingEnabled()) {\n e.preventDefault();\n r.data.wheelZooming = true;\n clearTimeout(r.data.wheelTimeout);\n r.data.wheelTimeout = setTimeout(function () {\n r.data.wheelZooming = false;\n r.redrawHint('eles', true);\n r.redraw();\n }, 150);\n var diff;\n if (clamp && Math.abs(delta) > 5) {\n delta = signum(delta) * 5;\n }\n diff = delta / -250;\n if (inaccurateScrollDevice) {\n diff /= inaccurateScrollFactor;\n diff *= 3;\n }\n diff = diff * r.wheelSensitivity;\n\n // console.log(`delta = ${delta}, diff = ${diff}, mode = ${e.deltaMode}`)\n\n var needsWheelFix = e.deltaMode === 1;\n if (needsWheelFix) {\n // fixes slow wheel events on ff/linux and ff/windows\n diff *= 33;\n }\n var newZoom = cy.zoom() * Math.pow(10, diff);\n if (e.type === 'gesturechange') {\n newZoom = r.gestureStartZoom * e.scale;\n }\n cy.zoom({\n level: newZoom,\n renderedPosition: {\n x: rpos[0],\n y: rpos[1]\n }\n });\n cy.emit({\n type: e.type === 'gesturechange' ? 'pinchzoom' : 'scrollzoom',\n originalEvent: e,\n position: {\n x: pos[0],\n y: pos[1]\n }\n });\n }\n };\n\n // Functions to help with whether mouse wheel should trigger zooming\n // --\n r.registerBinding(r.container, 'wheel', wheelHandler, true);\n\n // disable nonstandard wheel events\n // r.registerBinding(r.container, 'mousewheel', wheelHandler, true);\n // r.registerBinding(r.container, 'DOMMouseScroll', wheelHandler, true);\n // r.registerBinding(r.container, 'MozMousePixelScroll', wheelHandler, true); // older firefox\n\n r.registerBinding(containerWindow, 'scroll', function scrollHandler(e) {\n // eslint-disable-line no-unused-vars\n r.scrollingPage = true;\n clearTimeout(r.scrollingPageTimeout);\n r.scrollingPageTimeout = setTimeout(function () {\n r.scrollingPage = false;\n }, 250);\n }, true);\n\n // desktop safari pinch to zoom start\n r.registerBinding(r.container, 'gesturestart', function gestureStartHandler(e) {\n r.gestureStartZoom = r.cy.zoom();\n if (!r.hasTouchStarted) {\n // don't affect touch devices like iphone\n e.preventDefault();\n }\n }, true);\n r.registerBinding(r.container, 'gesturechange', function (e) {\n if (!r.hasTouchStarted) {\n // don't affect touch devices like iphone\n wheelHandler(e);\n }\n }, true);\n\n // Functions to help with handling mouseout/mouseover on the Cytoscape container\n // Handle mouseout on Cytoscape container\n r.registerBinding(r.container, 'mouseout', function mouseOutHandler(e) {\n var pos = r.projectIntoViewport(e.clientX, e.clientY);\n r.cy.emit({\n originalEvent: e,\n type: 'mouseout',\n position: {\n x: pos[0],\n y: pos[1]\n }\n });\n }, false);\n r.registerBinding(r.container, 'mouseover', function mouseOverHandler(e) {\n var pos = r.projectIntoViewport(e.clientX, e.clientY);\n r.cy.emit({\n originalEvent: e,\n type: 'mouseover',\n position: {\n x: pos[0],\n y: pos[1]\n }\n });\n }, false);\n var f1x1, f1y1, f2x1, f2y1; // starting points for pinch-to-zoom\n var distance1, distance1Sq; // initial distance between finger 1 and finger 2 for pinch-to-zoom\n var center1, modelCenter1; // center point on start pinch to zoom\n var offsetLeft, offsetTop;\n var containerWidth, containerHeight;\n var twoFingersStartInside;\n var distance = function distance(x1, y1, x2, y2) {\n return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n };\n var distanceSq = function distanceSq(x1, y1, x2, y2) {\n return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);\n };\n var touchstartHandler;\n r.registerBinding(r.container, 'touchstart', touchstartHandler = function touchstartHandler(e) {\n r.hasTouchStarted = true;\n if (!eventInContainer(e)) {\n return;\n }\n blurActiveDomElement();\n r.touchData.capture = true;\n r.data.bgActivePosistion = undefined;\n var cy = r.cy;\n var now = r.touchData.now;\n var earlier = r.touchData.earlier;\n if (e.touches[0]) {\n var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY);\n now[0] = pos[0];\n now[1] = pos[1];\n }\n if (e.touches[1]) {\n var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY);\n now[2] = pos[0];\n now[3] = pos[1];\n }\n if (e.touches[2]) {\n var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY);\n now[4] = pos[0];\n now[5] = pos[1];\n }\n var makeEvent = function makeEvent(type) {\n return {\n originalEvent: e,\n type: type,\n position: {\n x: now[0],\n y: now[1]\n }\n };\n };\n\n // record starting points for pinch-to-zoom\n if (e.touches[1]) {\n r.touchData.singleTouchMoved = true;\n freeDraggedElements(r.dragData.touchDragEles);\n var offsets = r.findContainerClientCoords();\n offsetLeft = offsets[0];\n offsetTop = offsets[1];\n containerWidth = offsets[2];\n containerHeight = offsets[3];\n f1x1 = e.touches[0].clientX - offsetLeft;\n f1y1 = e.touches[0].clientY - offsetTop;\n f2x1 = e.touches[1].clientX - offsetLeft;\n f2y1 = e.touches[1].clientY - offsetTop;\n twoFingersStartInside = 0 <= f1x1 && f1x1 <= containerWidth && 0 <= f2x1 && f2x1 <= containerWidth && 0 <= f1y1 && f1y1 <= containerHeight && 0 <= f2y1 && f2y1 <= containerHeight;\n var pan = cy.pan();\n var zoom = cy.zoom();\n distance1 = distance(f1x1, f1y1, f2x1, f2y1);\n distance1Sq = distanceSq(f1x1, f1y1, f2x1, f2y1);\n center1 = [(f1x1 + f2x1) / 2, (f1y1 + f2y1) / 2];\n modelCenter1 = [(center1[0] - pan.x) / zoom, (center1[1] - pan.y) / zoom];\n\n // consider context tap\n var cxtDistThreshold = 200;\n var cxtDistThresholdSq = cxtDistThreshold * cxtDistThreshold;\n if (distance1Sq < cxtDistThresholdSq && !e.touches[2]) {\n var near1 = r.findNearestElement(now[0], now[1], true, true);\n var near2 = r.findNearestElement(now[2], now[3], true, true);\n if (near1 && near1.isNode()) {\n near1.activate().emit(makeEvent('cxttapstart'));\n r.touchData.start = near1;\n } else if (near2 && near2.isNode()) {\n near2.activate().emit(makeEvent('cxttapstart'));\n r.touchData.start = near2;\n } else {\n cy.emit(makeEvent('cxttapstart'));\n }\n if (r.touchData.start) {\n r.touchData.start._private.grabbed = false;\n }\n r.touchData.cxt = true;\n r.touchData.cxtDragged = false;\n r.data.bgActivePosistion = undefined;\n r.redraw();\n return;\n }\n }\n if (e.touches[2]) {\n // ignore\n\n // safari on ios pans the page otherwise (normally you should be able to preventdefault on touchmove...)\n if (cy.boxSelectionEnabled()) {\n e.preventDefault();\n }\n } else if (e.touches[1]) ; else if (e.touches[0]) {\n var nears = r.findNearestElements(now[0], now[1], true, true);\n var near = nears[0];\n if (near != null) {\n near.activate();\n r.touchData.start = near;\n r.touchData.starts = nears;\n if (r.nodeIsGrabbable(near)) {\n var draggedEles = r.dragData.touchDragEles = cy.collection();\n var selectedNodes = null;\n r.redrawHint('eles', true);\n r.redrawHint('drag', true);\n if (near.selected()) {\n // reset drag elements, since near will be added again\n\n selectedNodes = cy.$(function (ele) {\n return ele.selected() && r.nodeIsGrabbable(ele);\n });\n addNodesToDrag(selectedNodes, {\n addToList: draggedEles\n });\n } else {\n addNodeToDrag(near, {\n addToList: draggedEles\n });\n }\n setGrabTarget(near);\n near.emit(makeEvent('grabon'));\n if (selectedNodes) {\n selectedNodes.forEach(function (n) {\n n.emit(makeEvent('grab'));\n });\n } else {\n near.emit(makeEvent('grab'));\n }\n }\n }\n triggerEvents(near, ['touchstart', 'tapstart', 'vmousedown'], e, {\n x: now[0],\n y: now[1]\n });\n if (near == null) {\n r.data.bgActivePosistion = {\n x: pos[0],\n y: pos[1]\n };\n r.redrawHint('select', true);\n r.redraw();\n }\n\n // Tap, taphold\n // -----\n\n r.touchData.singleTouchMoved = false;\n r.touchData.singleTouchStartTime = +new Date();\n clearTimeout(r.touchData.tapholdTimeout);\n r.touchData.tapholdTimeout = setTimeout(function () {\n if (r.touchData.singleTouchMoved === false && !r.pinching // if pinching, then taphold unselect shouldn't take effect\n && !r.touchData.selecting // box selection shouldn't allow taphold through\n ) {\n triggerEvents(r.touchData.start, ['taphold'], e, {\n x: now[0],\n y: now[1]\n });\n }\n }, r.tapholdDuration);\n }\n if (e.touches.length >= 1) {\n var sPos = r.touchData.startPosition = [null, null, null, null, null, null];\n for (var i = 0; i < now.length; i++) {\n sPos[i] = earlier[i] = now[i];\n }\n var touch0 = e.touches[0];\n r.touchData.startGPosition = [touch0.clientX, touch0.clientY];\n }\n }, false);\n var touchmoveHandler;\n r.registerBinding(containerWindow, 'touchmove', touchmoveHandler = function touchmoveHandler(e) {\n // eslint-disable-line no-undef\n var capture = r.touchData.capture;\n if (!capture && !eventInContainer(e)) {\n return;\n }\n var select = r.selection;\n var cy = r.cy;\n var now = r.touchData.now;\n var earlier = r.touchData.earlier;\n var zoom = cy.zoom();\n if (e.touches[0]) {\n var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY);\n now[0] = pos[0];\n now[1] = pos[1];\n }\n if (e.touches[1]) {\n var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY);\n now[2] = pos[0];\n now[3] = pos[1];\n }\n if (e.touches[2]) {\n var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY);\n now[4] = pos[0];\n now[5] = pos[1];\n }\n var makeEvent = function makeEvent(type) {\n return {\n originalEvent: e,\n type: type,\n position: {\n x: now[0],\n y: now[1]\n }\n };\n };\n var startGPos = r.touchData.startGPosition;\n var isOverThresholdDrag;\n if (capture && e.touches[0] && startGPos) {\n var disp = [];\n for (var j = 0; j < now.length; j++) {\n disp[j] = now[j] - earlier[j];\n }\n var dx = e.touches[0].clientX - startGPos[0];\n var dx2 = dx * dx;\n var dy = e.touches[0].clientY - startGPos[1];\n var dy2 = dy * dy;\n var dist2 = dx2 + dy2;\n isOverThresholdDrag = dist2 >= r.touchTapThreshold2;\n }\n\n // context swipe cancelling\n if (capture && r.touchData.cxt) {\n e.preventDefault();\n var f1x2 = e.touches[0].clientX - offsetLeft,\n f1y2 = e.touches[0].clientY - offsetTop;\n var f2x2 = e.touches[1].clientX - offsetLeft,\n f2y2 = e.touches[1].clientY - offsetTop;\n // var distance2 = distance( f1x2, f1y2, f2x2, f2y2 );\n var distance2Sq = distanceSq(f1x2, f1y2, f2x2, f2y2);\n var factorSq = distance2Sq / distance1Sq;\n var distThreshold = 150;\n var distThresholdSq = distThreshold * distThreshold;\n var factorThreshold = 1.5;\n var factorThresholdSq = factorThreshold * factorThreshold;\n\n // cancel ctx gestures if the distance b/t the fingers increases\n if (factorSq >= factorThresholdSq || distance2Sq >= distThresholdSq) {\n r.touchData.cxt = false;\n r.data.bgActivePosistion = undefined;\n r.redrawHint('select', true);\n var cxtEvt = makeEvent('cxttapend');\n if (r.touchData.start) {\n r.touchData.start.unactivate().emit(cxtEvt);\n r.touchData.start = null;\n } else {\n cy.emit(cxtEvt);\n }\n }\n }\n\n // context swipe\n if (capture && r.touchData.cxt) {\n var cxtEvt = makeEvent('cxtdrag');\n r.data.bgActivePosistion = undefined;\n r.redrawHint('select', true);\n if (r.touchData.start) {\n r.touchData.start.emit(cxtEvt);\n } else {\n cy.emit(cxtEvt);\n }\n if (r.touchData.start) {\n r.touchData.start._private.grabbed = false;\n }\n r.touchData.cxtDragged = true;\n var near = r.findNearestElement(now[0], now[1], true, true);\n if (!r.touchData.cxtOver || near !== r.touchData.cxtOver) {\n if (r.touchData.cxtOver) {\n r.touchData.cxtOver.emit(makeEvent('cxtdragout'));\n }\n r.touchData.cxtOver = near;\n if (near) {\n near.emit(makeEvent('cxtdragover'));\n }\n }\n\n // box selection\n } else if (capture && e.touches[2] && cy.boxSelectionEnabled()) {\n e.preventDefault();\n r.data.bgActivePosistion = undefined;\n this.lastThreeTouch = +new Date();\n if (!r.touchData.selecting) {\n cy.emit(makeEvent('boxstart'));\n }\n r.touchData.selecting = true;\n r.touchData.didSelect = true;\n select[4] = 1;\n if (!select || select.length === 0 || select[0] === undefined) {\n select[0] = (now[0] + now[2] + now[4]) / 3;\n select[1] = (now[1] + now[3] + now[5]) / 3;\n select[2] = (now[0] + now[2] + now[4]) / 3 + 1;\n select[3] = (now[1] + now[3] + now[5]) / 3 + 1;\n } else {\n select[2] = (now[0] + now[2] + now[4]) / 3;\n select[3] = (now[1] + now[3] + now[5]) / 3;\n }\n r.redrawHint('select', true);\n r.redraw();\n\n // pinch to zoom\n } else if (capture && e.touches[1] && !r.touchData.didSelect // don't allow box selection to degrade to pinch-to-zoom\n && cy.zoomingEnabled() && cy.panningEnabled() && cy.userZoomingEnabled() && cy.userPanningEnabled()) {\n // two fingers => pinch to zoom\n e.preventDefault();\n r.data.bgActivePosistion = undefined;\n r.redrawHint('select', true);\n var draggedEles = r.dragData.touchDragEles;\n if (draggedEles) {\n r.redrawHint('drag', true);\n for (var i = 0; i < draggedEles.length; i++) {\n var de_p = draggedEles[i]._private;\n de_p.grabbed = false;\n de_p.rscratch.inDragLayer = false;\n }\n }\n var _start = r.touchData.start;\n\n // (x2, y2) for fingers 1 and 2\n var f1x2 = e.touches[0].clientX - offsetLeft,\n f1y2 = e.touches[0].clientY - offsetTop;\n var f2x2 = e.touches[1].clientX - offsetLeft,\n f2y2 = e.touches[1].clientY - offsetTop;\n var distance2 = distance(f1x2, f1y2, f2x2, f2y2);\n // var distance2Sq = distanceSq( f1x2, f1y2, f2x2, f2y2 );\n // var factor = Math.sqrt( distance2Sq ) / Math.sqrt( distance1Sq );\n var factor = distance2 / distance1;\n if (twoFingersStartInside) {\n // delta finger1\n var df1x = f1x2 - f1x1;\n var df1y = f1y2 - f1y1;\n\n // delta finger 2\n var df2x = f2x2 - f2x1;\n var df2y = f2y2 - f2y1;\n\n // translation is the normalised vector of the two fingers movement\n // i.e. so pinching cancels out and moving together pans\n var tx = (df1x + df2x) / 2;\n var ty = (df1y + df2y) / 2;\n\n // now calculate the zoom\n var zoom1 = cy.zoom();\n var zoom2 = zoom1 * factor;\n var pan1 = cy.pan();\n\n // the model center point converted to the current rendered pos\n var ctrx = modelCenter1[0] * zoom1 + pan1.x;\n var ctry = modelCenter1[1] * zoom1 + pan1.y;\n var pan2 = {\n x: -zoom2 / zoom1 * (ctrx - pan1.x - tx) + ctrx,\n y: -zoom2 / zoom1 * (ctry - pan1.y - ty) + ctry\n };\n\n // remove dragged eles\n if (_start && _start.active()) {\n var draggedEles = r.dragData.touchDragEles;\n freeDraggedElements(draggedEles);\n r.redrawHint('drag', true);\n r.redrawHint('eles', true);\n _start.unactivate().emit(makeEvent('freeon'));\n draggedEles.emit(makeEvent('free'));\n if (r.dragData.didDrag) {\n _start.emit(makeEvent('dragfreeon'));\n draggedEles.emit(makeEvent('dragfree'));\n }\n }\n cy.viewport({\n zoom: zoom2,\n pan: pan2,\n cancelOnFailedZoom: true\n });\n cy.emit(makeEvent('pinchzoom'));\n distance1 = distance2;\n f1x1 = f1x2;\n f1y1 = f1y2;\n f2x1 = f2x2;\n f2y1 = f2y2;\n r.pinching = true;\n }\n\n // Re-project\n if (e.touches[0]) {\n var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY);\n now[0] = pos[0];\n now[1] = pos[1];\n }\n if (e.touches[1]) {\n var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY);\n now[2] = pos[0];\n now[3] = pos[1];\n }\n if (e.touches[2]) {\n var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY);\n now[4] = pos[0];\n now[5] = pos[1];\n }\n } else if (e.touches[0] && !r.touchData.didSelect // don't allow box selection to degrade to single finger events like panning\n ) {\n var start = r.touchData.start;\n var last = r.touchData.last;\n var near;\n if (!r.hoverData.draggingEles && !r.swipePanning) {\n near = r.findNearestElement(now[0], now[1], true, true);\n }\n if (capture && start != null) {\n e.preventDefault();\n }\n\n // dragging nodes\n if (capture && start != null && r.nodeIsDraggable(start)) {\n if (isOverThresholdDrag) {\n // then dragging can happen\n var draggedEles = r.dragData.touchDragEles;\n var justStartedDrag = !r.dragData.didDrag;\n if (justStartedDrag) {\n addNodesToDrag(draggedEles, {\n inDragLayer: true\n });\n }\n r.dragData.didDrag = true;\n var totalShift = {\n x: 0,\n y: 0\n };\n if (number$1(disp[0]) && number$1(disp[1])) {\n totalShift.x += disp[0];\n totalShift.y += disp[1];\n if (justStartedDrag) {\n r.redrawHint('eles', true);\n var dragDelta = r.touchData.dragDelta;\n if (dragDelta && number$1(dragDelta[0]) && number$1(dragDelta[1])) {\n totalShift.x += dragDelta[0];\n totalShift.y += dragDelta[1];\n }\n }\n }\n r.hoverData.draggingEles = true;\n draggedEles.silentShift(totalShift).emit(makeEvent('position')).emit(makeEvent('drag'));\n r.redrawHint('drag', true);\n if (r.touchData.startPosition[0] == earlier[0] && r.touchData.startPosition[1] == earlier[1]) {\n r.redrawHint('eles', true);\n }\n r.redraw();\n } else {\n // otherwise keep track of drag delta for later\n var dragDelta = r.touchData.dragDelta = r.touchData.dragDelta || [];\n if (dragDelta.length === 0) {\n dragDelta.push(disp[0]);\n dragDelta.push(disp[1]);\n } else {\n dragDelta[0] += disp[0];\n dragDelta[1] += disp[1];\n }\n }\n }\n\n // touchmove\n {\n triggerEvents(start || near, ['touchmove', 'tapdrag', 'vmousemove'], e, {\n x: now[0],\n y: now[1]\n });\n if ((!start || !start.grabbed()) && near != last) {\n if (last) {\n last.emit(makeEvent('tapdragout'));\n }\n if (near) {\n near.emit(makeEvent('tapdragover'));\n }\n }\n r.touchData.last = near;\n }\n\n // check to cancel taphold\n if (capture) {\n for (var i = 0; i < now.length; i++) {\n if (now[i] && r.touchData.startPosition[i] && isOverThresholdDrag) {\n r.touchData.singleTouchMoved = true;\n }\n }\n }\n\n // panning\n if (capture && (start == null || start.pannable()) && cy.panningEnabled() && cy.userPanningEnabled()) {\n var allowPassthrough = allowPanningPassthrough(start, r.touchData.starts);\n if (allowPassthrough) {\n e.preventDefault();\n if (!r.data.bgActivePosistion) {\n r.data.bgActivePosistion = array2point(r.touchData.startPosition);\n }\n if (r.swipePanning) {\n cy.panBy({\n x: disp[0] * zoom,\n y: disp[1] * zoom\n });\n cy.emit(makeEvent('dragpan'));\n } else if (isOverThresholdDrag) {\n r.swipePanning = true;\n cy.panBy({\n x: dx * zoom,\n y: dy * zoom\n });\n cy.emit(makeEvent('dragpan'));\n if (start) {\n start.unactivate();\n r.redrawHint('select', true);\n r.touchData.start = null;\n }\n }\n }\n\n // Re-project\n var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY);\n now[0] = pos[0];\n now[1] = pos[1];\n }\n }\n for (var j = 0; j < now.length; j++) {\n earlier[j] = now[j];\n }\n\n // the active bg indicator should be removed when making a swipe that is neither for dragging nodes or panning\n if (capture && e.touches.length > 0 && !r.hoverData.draggingEles && !r.swipePanning && r.data.bgActivePosistion != null) {\n r.data.bgActivePosistion = undefined;\n r.redrawHint('select', true);\n r.redraw();\n }\n }, false);\n var touchcancelHandler;\n r.registerBinding(containerWindow, 'touchcancel', touchcancelHandler = function touchcancelHandler(e) {\n // eslint-disable-line no-unused-vars\n var start = r.touchData.start;\n r.touchData.capture = false;\n if (start) {\n start.unactivate();\n }\n });\n var touchendHandler, didDoubleTouch, touchTimeout, prevTouchTimeStamp;\n r.registerBinding(containerWindow, 'touchend', touchendHandler = function touchendHandler(e) {\n // eslint-disable-line no-unused-vars\n var start = r.touchData.start;\n var capture = r.touchData.capture;\n if (capture) {\n if (e.touches.length === 0) {\n r.touchData.capture = false;\n }\n e.preventDefault();\n } else {\n return;\n }\n var select = r.selection;\n r.swipePanning = false;\n r.hoverData.draggingEles = false;\n var cy = r.cy;\n var zoom = cy.zoom();\n var now = r.touchData.now;\n var earlier = r.touchData.earlier;\n if (e.touches[0]) {\n var pos = r.projectIntoViewport(e.touches[0].clientX, e.touches[0].clientY);\n now[0] = pos[0];\n now[1] = pos[1];\n }\n if (e.touches[1]) {\n var pos = r.projectIntoViewport(e.touches[1].clientX, e.touches[1].clientY);\n now[2] = pos[0];\n now[3] = pos[1];\n }\n if (e.touches[2]) {\n var pos = r.projectIntoViewport(e.touches[2].clientX, e.touches[2].clientY);\n now[4] = pos[0];\n now[5] = pos[1];\n }\n var makeEvent = function makeEvent(type) {\n return {\n originalEvent: e,\n type: type,\n position: {\n x: now[0],\n y: now[1]\n }\n };\n };\n if (start) {\n start.unactivate();\n }\n var ctxTapend;\n if (r.touchData.cxt) {\n ctxTapend = makeEvent('cxttapend');\n if (start) {\n start.emit(ctxTapend);\n } else {\n cy.emit(ctxTapend);\n }\n if (!r.touchData.cxtDragged) {\n var ctxTap = makeEvent('cxttap');\n if (start) {\n start.emit(ctxTap);\n } else {\n cy.emit(ctxTap);\n }\n }\n if (r.touchData.start) {\n r.touchData.start._private.grabbed = false;\n }\n r.touchData.cxt = false;\n r.touchData.start = null;\n r.redraw();\n return;\n }\n\n // no more box selection if we don't have three fingers\n if (!e.touches[2] && cy.boxSelectionEnabled() && r.touchData.selecting) {\n r.touchData.selecting = false;\n var box = cy.collection(r.getAllInBox(select[0], select[1], select[2], select[3]));\n select[0] = undefined;\n select[1] = undefined;\n select[2] = undefined;\n select[3] = undefined;\n select[4] = 0;\n r.redrawHint('select', true);\n cy.emit(makeEvent('boxend'));\n var eleWouldBeSelected = function eleWouldBeSelected(ele) {\n return ele.selectable() && !ele.selected();\n };\n box.emit(makeEvent('box')).stdFilter(eleWouldBeSelected).select().emit(makeEvent('boxselect'));\n if (box.nonempty()) {\n r.redrawHint('eles', true);\n }\n r.redraw();\n }\n if (start != null) {\n start.unactivate();\n }\n if (e.touches[2]) {\n r.data.bgActivePosistion = undefined;\n r.redrawHint('select', true);\n } else if (e.touches[1]) ; else if (e.touches[0]) ; else if (!e.touches[0]) {\n r.data.bgActivePosistion = undefined;\n r.redrawHint('select', true);\n var draggedEles = r.dragData.touchDragEles;\n if (start != null) {\n var startWasGrabbed = start._private.grabbed;\n freeDraggedElements(draggedEles);\n r.redrawHint('drag', true);\n r.redrawHint('eles', true);\n if (startWasGrabbed) {\n start.emit(makeEvent('freeon'));\n draggedEles.emit(makeEvent('free'));\n if (r.dragData.didDrag) {\n start.emit(makeEvent('dragfreeon'));\n draggedEles.emit(makeEvent('dragfree'));\n }\n }\n triggerEvents(start, ['touchend', 'tapend', 'vmouseup', 'tapdragout'], e, {\n x: now[0],\n y: now[1]\n });\n start.unactivate();\n r.touchData.start = null;\n } else {\n var near = r.findNearestElement(now[0], now[1], true, true);\n triggerEvents(near, ['touchend', 'tapend', 'vmouseup', 'tapdragout'], e, {\n x: now[0],\n y: now[1]\n });\n }\n var dx = r.touchData.startPosition[0] - now[0];\n var dx2 = dx * dx;\n var dy = r.touchData.startPosition[1] - now[1];\n var dy2 = dy * dy;\n var dist2 = dx2 + dy2;\n var rdist2 = dist2 * zoom * zoom;\n\n // Tap event, roughly same as mouse click event for touch\n if (!r.touchData.singleTouchMoved) {\n if (!start) {\n cy.$(':selected').unselect(['tapunselect']);\n }\n triggerEvents(start, ['tap', 'vclick'], e, {\n x: now[0],\n y: now[1]\n });\n didDoubleTouch = false;\n if (e.timeStamp - prevTouchTimeStamp <= cy.multiClickDebounceTime()) {\n touchTimeout && clearTimeout(touchTimeout);\n didDoubleTouch = true;\n prevTouchTimeStamp = null;\n triggerEvents(start, ['dbltap', 'vdblclick'], e, {\n x: now[0],\n y: now[1]\n });\n } else {\n touchTimeout = setTimeout(function () {\n if (didDoubleTouch) return;\n triggerEvents(start, ['onetap', 'voneclick'], e, {\n x: now[0],\n y: now[1]\n });\n }, cy.multiClickDebounceTime());\n prevTouchTimeStamp = e.timeStamp;\n }\n }\n\n // Prepare to select the currently touched node, only if it hasn't been dragged past a certain distance\n if (start != null && !r.dragData.didDrag // didn't drag nodes around\n && start._private.selectable && rdist2 < r.touchTapThreshold2 && !r.pinching // pinch to zoom should not affect selection\n ) {\n if (cy.selectionType() === 'single') {\n cy.$(isSelected).unmerge(start).unselect(['tapunselect']);\n start.select(['tapselect']);\n } else {\n if (start.selected()) {\n start.unselect(['tapunselect']);\n } else {\n start.select(['tapselect']);\n }\n }\n r.redrawHint('eles', true);\n }\n r.touchData.singleTouchMoved = true;\n }\n for (var j = 0; j < now.length; j++) {\n earlier[j] = now[j];\n }\n r.dragData.didDrag = false; // reset for next touchstart\n\n if (e.touches.length === 0) {\n r.touchData.dragDelta = [];\n r.touchData.startPosition = [null, null, null, null, null, null];\n r.touchData.startGPosition = null;\n r.touchData.didSelect = false;\n }\n if (e.touches.length < 2) {\n if (e.touches.length === 1) {\n // the old start global pos'n may not be the same finger that remains\n r.touchData.startGPosition = [e.touches[0].clientX, e.touches[0].clientY];\n }\n r.pinching = false;\n r.redrawHint('eles', true);\n r.redraw();\n }\n\n //r.redraw();\n }, false);\n\n // fallback compatibility layer for ms pointer events\n if (typeof TouchEvent === 'undefined') {\n var pointers = [];\n var makeTouch = function makeTouch(e) {\n return {\n clientX: e.clientX,\n clientY: e.clientY,\n force: 1,\n identifier: e.pointerId,\n pageX: e.pageX,\n pageY: e.pageY,\n radiusX: e.width / 2,\n radiusY: e.height / 2,\n screenX: e.screenX,\n screenY: e.screenY,\n target: e.target\n };\n };\n var makePointer = function makePointer(e) {\n return {\n event: e,\n touch: makeTouch(e)\n };\n };\n var addPointer = function addPointer(e) {\n pointers.push(makePointer(e));\n };\n var removePointer = function removePointer(e) {\n for (var i = 0; i < pointers.length; i++) {\n var p = pointers[i];\n if (p.event.pointerId === e.pointerId) {\n pointers.splice(i, 1);\n return;\n }\n }\n };\n var updatePointer = function updatePointer(e) {\n var p = pointers.filter(function (p) {\n return p.event.pointerId === e.pointerId;\n })[0];\n p.event = e;\n p.touch = makeTouch(e);\n };\n var addTouchesToEvent = function addTouchesToEvent(e) {\n e.touches = pointers.map(function (p) {\n return p.touch;\n });\n };\n var pointerIsMouse = function pointerIsMouse(e) {\n return e.pointerType === 'mouse' || e.pointerType === 4;\n };\n r.registerBinding(r.container, 'pointerdown', function (e) {\n if (pointerIsMouse(e)) {\n return;\n } // mouse already handled\n\n e.preventDefault();\n addPointer(e);\n addTouchesToEvent(e);\n touchstartHandler(e);\n });\n r.registerBinding(r.container, 'pointerup', function (e) {\n if (pointerIsMouse(e)) {\n return;\n } // mouse already handled\n\n removePointer(e);\n addTouchesToEvent(e);\n touchendHandler(e);\n });\n r.registerBinding(r.container, 'pointercancel', function (e) {\n if (pointerIsMouse(e)) {\n return;\n } // mouse already handled\n\n removePointer(e);\n addTouchesToEvent(e);\n touchcancelHandler(e);\n });\n r.registerBinding(r.container, 'pointermove', function (e) {\n if (pointerIsMouse(e)) {\n return;\n } // mouse already handled\n\n e.preventDefault();\n updatePointer(e);\n addTouchesToEvent(e);\n touchmoveHandler(e);\n });\n }\n};\n\nvar BRp$2 = {};\nBRp$2.generatePolygon = function (name, points) {\n return this.nodeShapes[name] = {\n renderer: this,\n name: name,\n points: points,\n draw: function draw(context, centerX, centerY, width, height, cornerRadius) {\n this.renderer.nodeShapeImpl('polygon', context, centerX, centerY, width, height, this.points);\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius) {\n return polygonIntersectLine(x, y, this.points, nodeX, nodeY, width / 2, height / 2, padding);\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius) {\n return pointInsidePolygon(x, y, this.points, centerX, centerY, width, height, [0, -1], padding);\n },\n hasMiterBounds: name !== 'rectangle',\n miterBounds: function miterBounds(centerX, centerY, width, height, strokeWidth, strokePosition) {\n return miterBox(this.points, centerX, centerY, width, height, strokeWidth);\n }\n };\n};\nBRp$2.generateEllipse = function () {\n return this.nodeShapes['ellipse'] = {\n renderer: this,\n name: 'ellipse',\n draw: function draw(context, centerX, centerY, width, height, cornerRadius) {\n this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height);\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius) {\n return intersectLineEllipse(x, y, nodeX, nodeY, width / 2 + padding, height / 2 + padding);\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius) {\n return checkInEllipse(x, y, width, height, centerX, centerY, padding);\n }\n };\n};\nBRp$2.generateRoundPolygon = function (name, points) {\n return this.nodeShapes[name] = {\n renderer: this,\n name: name,\n points: points,\n getOrCreateCorners: function getOrCreateCorners(centerX, centerY, width, height, cornerRadius, rs, field) {\n if (rs[field] !== undefined && rs[field + '-cx'] === centerX && rs[field + '-cy'] === centerY) {\n return rs[field];\n }\n rs[field] = new Array(points.length / 2);\n rs[field + '-cx'] = centerX;\n rs[field + '-cy'] = centerY;\n var halfW = width / 2;\n var halfH = height / 2;\n cornerRadius = cornerRadius === 'auto' ? getRoundPolygonRadius(width, height) : cornerRadius;\n var p = new Array(points.length / 2);\n for (var _i = 0; _i < points.length / 2; _i++) {\n p[_i] = {\n x: centerX + halfW * points[_i * 2],\n y: centerY + halfH * points[_i * 2 + 1]\n };\n }\n var i,\n p1,\n p2,\n p3,\n len = p.length;\n p1 = p[len - 1];\n // for each point\n for (i = 0; i < len; i++) {\n p2 = p[i % len];\n p3 = p[(i + 1) % len];\n rs[field][i] = getRoundCorner(p1, p2, p3, cornerRadius);\n p1 = p2;\n p2 = p3;\n }\n return rs[field];\n },\n draw: function draw(context, centerX, centerY, width, height, cornerRadius, rs) {\n this.renderer.nodeShapeImpl('round-polygon', context, centerX, centerY, width, height, this.points, this.getOrCreateCorners(centerX, centerY, width, height, cornerRadius, rs, 'drawCorners'));\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius, rs) {\n return roundPolygonIntersectLine(x, y, this.points, nodeX, nodeY, width, height, padding, this.getOrCreateCorners(nodeX, nodeY, width, height, cornerRadius, rs, 'corners'));\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius, rs) {\n return pointInsideRoundPolygon(x, y, this.points, centerX, centerY, width, height, this.getOrCreateCorners(centerX, centerY, width, height, cornerRadius, rs, 'corners'));\n }\n };\n};\nBRp$2.generateRoundRectangle = function () {\n return this.nodeShapes['round-rectangle'] = this.nodeShapes['roundrectangle'] = {\n renderer: this,\n name: 'round-rectangle',\n points: generateUnitNgonPointsFitToSquare(4, 0),\n draw: function draw(context, centerX, centerY, width, height, cornerRadius) {\n this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height, this.points, cornerRadius);\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius) {\n return roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding, cornerRadius);\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius) {\n var halfWidth = width / 2;\n var halfHeight = height / 2;\n cornerRadius = cornerRadius === 'auto' ? getRoundRectangleRadius(width, height) : cornerRadius;\n cornerRadius = Math.min(halfWidth, halfHeight, cornerRadius);\n var diam = cornerRadius * 2;\n\n // Check hBox\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) {\n return true;\n }\n\n // Check vBox\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) {\n return true;\n }\n\n // Check top left quarter circle\n if (checkInEllipse(x, y, diam, diam, centerX - halfWidth + cornerRadius, centerY - halfHeight + cornerRadius, padding)) {\n return true;\n }\n\n // Check top right quarter circle\n if (checkInEllipse(x, y, diam, diam, centerX + halfWidth - cornerRadius, centerY - halfHeight + cornerRadius, padding)) {\n return true;\n }\n\n // Check bottom right quarter circle\n if (checkInEllipse(x, y, diam, diam, centerX + halfWidth - cornerRadius, centerY + halfHeight - cornerRadius, padding)) {\n return true;\n }\n\n // Check bottom left quarter circle\n if (checkInEllipse(x, y, diam, diam, centerX - halfWidth + cornerRadius, centerY + halfHeight - cornerRadius, padding)) {\n return true;\n }\n return false;\n }\n };\n};\nBRp$2.generateCutRectangle = function () {\n return this.nodeShapes['cut-rectangle'] = this.nodeShapes['cutrectangle'] = {\n renderer: this,\n name: 'cut-rectangle',\n cornerLength: getCutRectangleCornerLength(),\n points: generateUnitNgonPointsFitToSquare(4, 0),\n draw: function draw(context, centerX, centerY, width, height, cornerRadius) {\n this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height, null, cornerRadius);\n },\n generateCutTrianglePts: function generateCutTrianglePts(width, height, centerX, centerY, cornerRadius) {\n var cl = cornerRadius === 'auto' ? this.cornerLength : cornerRadius;\n var hh = height / 2;\n var hw = width / 2;\n var xBegin = centerX - hw;\n var xEnd = centerX + hw;\n var yBegin = centerY - hh;\n var yEnd = centerY + hh;\n\n // points are in clockwise order, inner (imaginary) triangle pt on [4, 5]\n return {\n topLeft: [xBegin, yBegin + cl, xBegin + cl, yBegin, xBegin + cl, yBegin + cl],\n topRight: [xEnd - cl, yBegin, xEnd, yBegin + cl, xEnd - cl, yBegin + cl],\n bottomRight: [xEnd, yEnd - cl, xEnd - cl, yEnd, xEnd - cl, yEnd - cl],\n bottomLeft: [xBegin + cl, yEnd, xBegin, yEnd - cl, xBegin + cl, yEnd - cl]\n };\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius) {\n var cPts = this.generateCutTrianglePts(width + 2 * padding, height + 2 * padding, nodeX, nodeY, cornerRadius);\n var pts = [].concat.apply([], [cPts.topLeft.splice(0, 4), cPts.topRight.splice(0, 4), cPts.bottomRight.splice(0, 4), cPts.bottomLeft.splice(0, 4)]);\n return polygonIntersectLine(x, y, pts, nodeX, nodeY);\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius) {\n var cl = cornerRadius === 'auto' ? this.cornerLength : cornerRadius;\n // Check hBox\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * cl, [0, -1], padding)) {\n return true;\n }\n\n // Check vBox\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * cl, height, [0, -1], padding)) {\n return true;\n }\n var cutTrianglePts = this.generateCutTrianglePts(width, height, centerX, centerY);\n return pointInsidePolygonPoints(x, y, cutTrianglePts.topLeft) || pointInsidePolygonPoints(x, y, cutTrianglePts.topRight) || pointInsidePolygonPoints(x, y, cutTrianglePts.bottomRight) || pointInsidePolygonPoints(x, y, cutTrianglePts.bottomLeft);\n }\n };\n};\nBRp$2.generateBarrel = function () {\n return this.nodeShapes['barrel'] = {\n renderer: this,\n name: 'barrel',\n points: generateUnitNgonPointsFitToSquare(4, 0),\n draw: function draw(context, centerX, centerY, width, height, cornerRadius) {\n this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height);\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius) {\n // use two fixed t values for the bezier curve approximation\n\n var t0 = 0.15;\n var t1 = 0.5;\n var t2 = 0.85;\n var bPts = this.generateBarrelBezierPts(width + 2 * padding, height + 2 * padding, nodeX, nodeY);\n var approximateBarrelCurvePts = function approximateBarrelCurvePts(pts) {\n // approximate curve pts based on the two t values\n var m0 = qbezierPtAt({\n x: pts[0],\n y: pts[1]\n }, {\n x: pts[2],\n y: pts[3]\n }, {\n x: pts[4],\n y: pts[5]\n }, t0);\n var m1 = qbezierPtAt({\n x: pts[0],\n y: pts[1]\n }, {\n x: pts[2],\n y: pts[3]\n }, {\n x: pts[4],\n y: pts[5]\n }, t1);\n var m2 = qbezierPtAt({\n x: pts[0],\n y: pts[1]\n }, {\n x: pts[2],\n y: pts[3]\n }, {\n x: pts[4],\n y: pts[5]\n }, t2);\n return [pts[0], pts[1], m0.x, m0.y, m1.x, m1.y, m2.x, m2.y, pts[4], pts[5]];\n };\n var pts = [].concat(approximateBarrelCurvePts(bPts.topLeft), approximateBarrelCurvePts(bPts.topRight), approximateBarrelCurvePts(bPts.bottomRight), approximateBarrelCurvePts(bPts.bottomLeft));\n return polygonIntersectLine(x, y, pts, nodeX, nodeY);\n },\n generateBarrelBezierPts: function generateBarrelBezierPts(width, height, centerX, centerY) {\n var hh = height / 2;\n var hw = width / 2;\n var xBegin = centerX - hw;\n var xEnd = centerX + hw;\n var yBegin = centerY - hh;\n var yEnd = centerY + hh;\n var curveConstants = getBarrelCurveConstants(width, height);\n var hOffset = curveConstants.heightOffset;\n var wOffset = curveConstants.widthOffset;\n var ctrlPtXOffset = curveConstants.ctrlPtOffsetPct * width;\n\n // points are in clockwise order, inner (imaginary) control pt on [4, 5]\n var pts = {\n topLeft: [xBegin, yBegin + hOffset, xBegin + ctrlPtXOffset, yBegin, xBegin + wOffset, yBegin],\n topRight: [xEnd - wOffset, yBegin, xEnd - ctrlPtXOffset, yBegin, xEnd, yBegin + hOffset],\n bottomRight: [xEnd, yEnd - hOffset, xEnd - ctrlPtXOffset, yEnd, xEnd - wOffset, yEnd],\n bottomLeft: [xBegin + wOffset, yEnd, xBegin + ctrlPtXOffset, yEnd, xBegin, yEnd - hOffset]\n };\n pts.topLeft.isTop = true;\n pts.topRight.isTop = true;\n pts.bottomLeft.isBottom = true;\n pts.bottomRight.isBottom = true;\n return pts;\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius) {\n var curveConstants = getBarrelCurveConstants(width, height);\n var hOffset = curveConstants.heightOffset;\n var wOffset = curveConstants.widthOffset;\n\n // Check hBox\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - 2 * hOffset, [0, -1], padding)) {\n return true;\n }\n\n // Check vBox\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - 2 * wOffset, height, [0, -1], padding)) {\n return true;\n }\n var barrelCurvePts = this.generateBarrelBezierPts(width, height, centerX, centerY);\n var getCurveT = function getCurveT(x, y, curvePts) {\n var x0 = curvePts[4];\n var x1 = curvePts[2];\n var x2 = curvePts[0];\n var y0 = curvePts[5];\n // var y1 = curvePts[ 3 ];\n var y2 = curvePts[1];\n var xMin = Math.min(x0, x2);\n var xMax = Math.max(x0, x2);\n var yMin = Math.min(y0, y2);\n var yMax = Math.max(y0, y2);\n if (xMin <= x && x <= xMax && yMin <= y && y <= yMax) {\n var coeff = bezierPtsToQuadCoeff(x0, x1, x2);\n var roots = solveQuadratic(coeff[0], coeff[1], coeff[2], x);\n var validRoots = roots.filter(function (r) {\n return 0 <= r && r <= 1;\n });\n if (validRoots.length > 0) {\n return validRoots[0];\n }\n }\n return null;\n };\n var curveRegions = Object.keys(barrelCurvePts);\n for (var i = 0; i < curveRegions.length; i++) {\n var corner = curveRegions[i];\n var cornerPts = barrelCurvePts[corner];\n var t = getCurveT(x, y, cornerPts);\n if (t == null) {\n continue;\n }\n var y0 = cornerPts[5];\n var y1 = cornerPts[3];\n var y2 = cornerPts[1];\n var bezY = qbezierAt(y0, y1, y2, t);\n if (cornerPts.isTop && bezY <= y) {\n return true;\n }\n if (cornerPts.isBottom && y <= bezY) {\n return true;\n }\n }\n return false;\n }\n };\n};\nBRp$2.generateBottomRoundrectangle = function () {\n return this.nodeShapes['bottom-round-rectangle'] = this.nodeShapes['bottomroundrectangle'] = {\n renderer: this,\n name: 'bottom-round-rectangle',\n points: generateUnitNgonPointsFitToSquare(4, 0),\n draw: function draw(context, centerX, centerY, width, height, cornerRadius) {\n this.renderer.nodeShapeImpl(this.name, context, centerX, centerY, width, height, this.points, cornerRadius);\n },\n intersectLine: function intersectLine(nodeX, nodeY, width, height, x, y, padding, cornerRadius) {\n var topStartX = nodeX - (width / 2 + padding);\n var topStartY = nodeY - (height / 2 + padding);\n var topEndY = topStartY;\n var topEndX = nodeX + (width / 2 + padding);\n var topIntersections = finiteLinesIntersect(x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false);\n if (topIntersections.length > 0) {\n return topIntersections;\n }\n return roundRectangleIntersectLine(x, y, nodeX, nodeY, width, height, padding, cornerRadius);\n },\n checkPoint: function checkPoint(x, y, padding, width, height, centerX, centerY, cornerRadius) {\n cornerRadius = cornerRadius === 'auto' ? getRoundRectangleRadius(width, height) : cornerRadius;\n var diam = 2 * cornerRadius;\n\n // Check hBox\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width, height - diam, [0, -1], padding)) {\n return true;\n }\n\n // Check vBox\n if (pointInsidePolygon(x, y, this.points, centerX, centerY, width - diam, height, [0, -1], padding)) {\n return true;\n }\n\n // check non-rounded top side\n var outerWidth = width / 2 + 2 * padding;\n var outerHeight = height / 2 + 2 * padding;\n var points = [centerX - outerWidth, centerY - outerHeight, centerX - outerWidth, centerY, centerX + outerWidth, centerY, centerX + outerWidth, centerY - outerHeight];\n if (pointInsidePolygonPoints(x, y, points)) {\n return true;\n }\n\n // Check bottom right quarter circle\n if (checkInEllipse(x, y, diam, diam, centerX + width / 2 - cornerRadius, centerY + height / 2 - cornerRadius, padding)) {\n return true;\n }\n\n // Check bottom left quarter circle\n if (checkInEllipse(x, y, diam, diam, centerX - width / 2 + cornerRadius, centerY + height / 2 - cornerRadius, padding)) {\n return true;\n }\n return false;\n }\n };\n};\nBRp$2.registerNodeShapes = function () {\n var nodeShapes = this.nodeShapes = {};\n var renderer = this;\n this.generateEllipse();\n this.generatePolygon('triangle', generateUnitNgonPointsFitToSquare(3, 0));\n this.generateRoundPolygon('round-triangle', generateUnitNgonPointsFitToSquare(3, 0));\n this.generatePolygon('rectangle', generateUnitNgonPointsFitToSquare(4, 0));\n nodeShapes['square'] = nodeShapes['rectangle'];\n this.generateRoundRectangle();\n this.generateCutRectangle();\n this.generateBarrel();\n this.generateBottomRoundrectangle();\n {\n var diamondPoints = [0, 1, 1, 0, 0, -1, -1, 0];\n this.generatePolygon('diamond', diamondPoints);\n this.generateRoundPolygon('round-diamond', diamondPoints);\n }\n this.generatePolygon('pentagon', generateUnitNgonPointsFitToSquare(5, 0));\n this.generateRoundPolygon('round-pentagon', generateUnitNgonPointsFitToSquare(5, 0));\n this.generatePolygon('hexagon', generateUnitNgonPointsFitToSquare(6, 0));\n this.generateRoundPolygon('round-hexagon', generateUnitNgonPointsFitToSquare(6, 0));\n this.generatePolygon('heptagon', generateUnitNgonPointsFitToSquare(7, 0));\n this.generateRoundPolygon('round-heptagon', generateUnitNgonPointsFitToSquare(7, 0));\n this.generatePolygon('octagon', generateUnitNgonPointsFitToSquare(8, 0));\n this.generateRoundPolygon('round-octagon', generateUnitNgonPointsFitToSquare(8, 0));\n var star5Points = new Array(20);\n {\n var outerPoints = generateUnitNgonPoints(5, 0);\n var innerPoints = generateUnitNgonPoints(5, Math.PI / 5);\n\n // Outer radius is 1; inner radius of star is smaller\n var innerRadius = 0.5 * (3 - Math.sqrt(5));\n innerRadius *= 1.57;\n for (var i = 0; i < innerPoints.length / 2; i++) {\n innerPoints[i * 2] *= innerRadius;\n innerPoints[i * 2 + 1] *= innerRadius;\n }\n for (var i = 0; i < 20 / 4; i++) {\n star5Points[i * 4] = outerPoints[i * 2];\n star5Points[i * 4 + 1] = outerPoints[i * 2 + 1];\n star5Points[i * 4 + 2] = innerPoints[i * 2];\n star5Points[i * 4 + 3] = innerPoints[i * 2 + 1];\n }\n }\n star5Points = fitPolygonToSquare(star5Points);\n this.generatePolygon('star', star5Points);\n this.generatePolygon('vee', [-1, -1, 0, -0.333, 1, -1, 0, 1]);\n this.generatePolygon('rhomboid', [-1, -1, 0.333, -1, 1, 1, -0.333, 1]);\n this.generatePolygon('right-rhomboid', [-0.333, -1, 1, -1, 0.333, 1, -1, 1]);\n this.nodeShapes['concavehexagon'] = this.generatePolygon('concave-hexagon', [-1, -0.95, -0.75, 0, -1, 0.95, 1, 0.95, 0.75, 0, 1, -0.95]);\n {\n var tagPoints = [-1, -1, 0.25, -1, 1, 0, 0.25, 1, -1, 1];\n this.generatePolygon('tag', tagPoints);\n this.generateRoundPolygon('round-tag', tagPoints);\n }\n nodeShapes.makePolygon = function (points) {\n // use caching on user-specified polygons so they are as fast as native shapes\n\n var key = points.join('$');\n var name = 'polygon-' + key;\n var shape;\n if (shape = this[name]) {\n // got cached shape\n return shape;\n }\n\n // create and cache new shape\n return renderer.generatePolygon(name, points);\n };\n};\n\nvar BRp$1 = {};\nBRp$1.timeToRender = function () {\n return this.redrawTotalTime / this.redrawCount;\n};\nBRp$1.redraw = function (options) {\n options = options || staticEmptyObject();\n var r = this;\n if (r.averageRedrawTime === undefined) {\n r.averageRedrawTime = 0;\n }\n if (r.lastRedrawTime === undefined) {\n r.lastRedrawTime = 0;\n }\n if (r.lastDrawTime === undefined) {\n r.lastDrawTime = 0;\n }\n r.requestedFrame = true;\n r.renderOptions = options;\n};\nBRp$1.beforeRender = function (fn, priority) {\n // the renderer can't add tick callbacks when destroyed\n if (this.destroyed) {\n return;\n }\n if (priority == null) {\n error('Priority is not optional for beforeRender');\n }\n var cbs = this.beforeRenderCallbacks;\n cbs.push({\n fn: fn,\n priority: priority\n });\n\n // higher priority callbacks executed first\n cbs.sort(function (a, b) {\n return b.priority - a.priority;\n });\n};\nvar beforeRenderCallbacks = function beforeRenderCallbacks(r, willDraw, startTime) {\n var cbs = r.beforeRenderCallbacks;\n for (var i = 0; i < cbs.length; i++) {\n cbs[i].fn(willDraw, startTime);\n }\n};\nBRp$1.startRenderLoop = function () {\n var r = this;\n var cy = r.cy;\n if (r.renderLoopStarted) {\n return;\n } else {\n r.renderLoopStarted = true;\n }\n var _renderFn = function renderFn(requestTime) {\n if (r.destroyed) {\n return;\n }\n if (cy.batching()) ; else if (r.requestedFrame && !r.skipFrame) {\n beforeRenderCallbacks(r, true, requestTime);\n var startTime = performanceNow();\n r.render(r.renderOptions);\n var endTime = r.lastDrawTime = performanceNow();\n if (r.averageRedrawTime === undefined) {\n r.averageRedrawTime = endTime - startTime;\n }\n if (r.redrawCount === undefined) {\n r.redrawCount = 0;\n }\n r.redrawCount++;\n if (r.redrawTotalTime === undefined) {\n r.redrawTotalTime = 0;\n }\n var duration = endTime - startTime;\n r.redrawTotalTime += duration;\n r.lastRedrawTime = duration;\n\n // use a weighted average with a bias from the previous average so we don't spike so easily\n r.averageRedrawTime = r.averageRedrawTime / 2 + duration / 2;\n r.requestedFrame = false;\n } else {\n beforeRenderCallbacks(r, false, requestTime);\n }\n r.skipFrame = false;\n requestAnimationFrame(_renderFn);\n };\n requestAnimationFrame(_renderFn);\n};\n\nvar BaseRenderer = function BaseRenderer(options) {\n this.init(options);\n};\nvar BR = BaseRenderer;\nvar BRp = BR.prototype;\nBRp.clientFunctions = ['redrawHint', 'render', 'renderTo', 'matchCanvasSize', 'nodeShapeImpl', 'arrowShapeImpl'];\nBRp.init = function (options) {\n var r = this;\n r.options = options;\n r.cy = options.cy;\n var ctr = r.container = options.cy.container();\n var containerWindow = r.cy.window();\n\n // prepend a stylesheet in the head such that\n if (containerWindow) {\n var document = containerWindow.document;\n var head = document.head;\n var stylesheetId = '__________cytoscape_stylesheet';\n var className = '__________cytoscape_container';\n var stylesheetAlreadyExists = document.getElementById(stylesheetId) != null;\n if (ctr.className.indexOf(className) < 0) {\n ctr.className = (ctr.className || '') + ' ' + className;\n }\n if (!stylesheetAlreadyExists) {\n var stylesheet = document.createElement('style');\n stylesheet.id = stylesheetId;\n stylesheet.textContent = '.' + className + ' { position: relative; }';\n head.insertBefore(stylesheet, head.children[0]); // first so lowest priority\n }\n var computedStyle = containerWindow.getComputedStyle(ctr);\n var position = computedStyle.getPropertyValue('position');\n if (position === 'static') {\n warn('A Cytoscape container has style position:static and so can not use UI extensions properly');\n }\n }\n r.selection = [undefined, undefined, undefined, undefined, 0]; // Coordinates for selection box, plus enabled flag\n\n r.bezierProjPcts = [0.05, 0.225, 0.4, 0.5, 0.6, 0.775, 0.95];\n\n //--Pointer-related data\n r.hoverData = {\n down: null,\n last: null,\n downTime: null,\n triggerMode: null,\n dragging: false,\n initialPan: [null, null],\n capture: false\n };\n r.dragData = {\n possibleDragElements: []\n };\n r.touchData = {\n start: null,\n capture: false,\n // These 3 fields related to tap, taphold events\n startPosition: [null, null, null, null, null, null],\n singleTouchStartTime: null,\n singleTouchMoved: true,\n now: [null, null, null, null, null, null],\n earlier: [null, null, null, null, null, null]\n };\n r.redraws = 0;\n r.showFps = options.showFps;\n r.debug = options.debug;\n r.webgl = options.webgl;\n r.hideEdgesOnViewport = options.hideEdgesOnViewport;\n r.textureOnViewport = options.textureOnViewport;\n r.wheelSensitivity = options.wheelSensitivity;\n r.motionBlurEnabled = options.motionBlur; // on by default\n r.forcedPixelRatio = number$1(options.pixelRatio) ? options.pixelRatio : null;\n r.motionBlur = options.motionBlur; // for initial kick off\n r.motionBlurOpacity = options.motionBlurOpacity;\n r.motionBlurTransparency = 1 - r.motionBlurOpacity;\n r.motionBlurPxRatio = 1;\n r.mbPxRBlurry = 1; //0.8;\n r.minMbLowQualFrames = 4;\n r.fullQualityMb = false;\n r.clearedForMotionBlur = [];\n r.desktopTapThreshold = options.desktopTapThreshold;\n r.desktopTapThreshold2 = options.desktopTapThreshold * options.desktopTapThreshold;\n r.touchTapThreshold = options.touchTapThreshold;\n r.touchTapThreshold2 = options.touchTapThreshold * options.touchTapThreshold;\n r.tapholdDuration = 500;\n r.bindings = [];\n r.beforeRenderCallbacks = [];\n r.beforeRenderPriorities = {\n // higher priority execs before lower one\n animations: 400,\n eleCalcs: 300,\n eleTxrDeq: 200,\n lyrTxrDeq: 150,\n lyrTxrSkip: 100\n };\n r.registerNodeShapes();\n r.registerArrowShapes();\n r.registerCalculationListeners();\n};\nBRp.notify = function (eventName, eles) {\n var r = this;\n var cy = r.cy;\n\n // the renderer can't be notified after it's destroyed\n if (this.destroyed) {\n return;\n }\n if (eventName === 'init') {\n r.load();\n return;\n }\n if (eventName === 'destroy') {\n r.destroy();\n return;\n }\n if (eventName === 'add' || eventName === 'remove' || eventName === 'move' && cy.hasCompoundNodes() || eventName === 'load' || eventName === 'zorder' || eventName === 'mount') {\n r.invalidateCachedZSortedEles();\n }\n if (eventName === 'viewport') {\n r.redrawHint('select', true);\n }\n if (eventName === 'gc') {\n r.redrawHint('gc', true);\n }\n if (eventName === 'load' || eventName === 'resize' || eventName === 'mount') {\n r.invalidateContainerClientCoordsCache();\n r.matchCanvasSize(r.container);\n }\n r.redrawHint('eles', true);\n r.redrawHint('drag', true);\n this.startRenderLoop();\n this.redraw();\n};\nBRp.destroy = function () {\n var r = this;\n r.destroyed = true;\n r.cy.stopAnimationLoop();\n for (var i = 0; i < r.bindings.length; i++) {\n var binding = r.bindings[i];\n var b = binding;\n var tgt = b.target;\n (tgt.off || tgt.removeEventListener).apply(tgt, b.args);\n }\n r.bindings = [];\n r.beforeRenderCallbacks = [];\n r.onUpdateEleCalcsFns = [];\n if (r.removeObserver) {\n r.removeObserver.disconnect();\n }\n if (r.styleObserver) {\n r.styleObserver.disconnect();\n }\n if (r.resizeObserver) {\n r.resizeObserver.disconnect();\n }\n if (r.labelCalcDiv) {\n try {\n document.body.removeChild(r.labelCalcDiv); // eslint-disable-line no-undef\n } catch (e) {\n // ie10 issue #1014\n }\n }\n};\nBRp.isHeadless = function () {\n return false;\n};\n[BRp$f, BRp$5, BRp$4, BRp$3, BRp$2, BRp$1].forEach(function (props) {\n extend(BRp, props);\n});\n\nvar fullFpsTime = 1000 / 60; // assume 60 frames per second\n\nvar defs = {\n setupDequeueing: function setupDequeueing(opts) {\n return function setupDequeueingImpl() {\n var self = this;\n var r = this.renderer;\n if (self.dequeueingSetup) {\n return;\n } else {\n self.dequeueingSetup = true;\n }\n var queueRedraw = debounce(function () {\n r.redrawHint('eles', true);\n r.redrawHint('drag', true);\n r.redraw();\n }, opts.deqRedrawThreshold);\n var dequeue = function dequeue(willDraw, frameStartTime) {\n var startTime = performanceNow();\n var avgRenderTime = r.averageRedrawTime;\n var renderTime = r.lastRedrawTime;\n var deqd = [];\n var extent = r.cy.extent();\n var pixelRatio = r.getPixelRatio();\n\n // if we aren't in a tick that causes a draw, then the rendered style\n // queue won't automatically be flushed before dequeueing starts\n if (!willDraw) {\n r.flushRenderedStyleQueue();\n }\n while (true) {\n // eslint-disable-line no-constant-condition\n var now = performanceNow();\n var duration = now - startTime;\n var frameDuration = now - frameStartTime;\n if (renderTime < fullFpsTime) {\n // if we're rendering faster than the ideal fps, then do dequeueing\n // during all of the remaining frame time\n\n var timeAvailable = fullFpsTime - (willDraw ? avgRenderTime : 0);\n if (frameDuration >= opts.deqFastCost * timeAvailable) {\n break;\n }\n } else {\n if (willDraw) {\n if (duration >= opts.deqCost * renderTime || duration >= opts.deqAvgCost * avgRenderTime) {\n break;\n }\n } else if (frameDuration >= opts.deqNoDrawCost * fullFpsTime) {\n break;\n }\n }\n var thisDeqd = opts.deq(self, pixelRatio, extent);\n if (thisDeqd.length > 0) {\n for (var i = 0; i < thisDeqd.length; i++) {\n deqd.push(thisDeqd[i]);\n }\n } else {\n break;\n }\n }\n\n // callbacks on dequeue\n if (deqd.length > 0) {\n opts.onDeqd(self, deqd);\n if (!willDraw && opts.shouldRedraw(self, deqd, pixelRatio, extent)) {\n queueRedraw();\n }\n }\n };\n var priority = opts.priority || noop$1;\n r.beforeRender(dequeue, priority(self));\n };\n }\n};\n\n// Allows lookups for (ele, lvl) => cache.\n// Uses keys so elements may share the same cache.\nvar ElementTextureCacheLookup = /*#__PURE__*/function () {\n function ElementTextureCacheLookup(getKey) {\n var doesEleInvalidateKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : falsify;\n _classCallCheck(this, ElementTextureCacheLookup);\n this.idsByKey = new Map$1();\n this.keyForId = new Map$1();\n this.cachesByLvl = new Map$1();\n this.lvls = [];\n this.getKey = getKey;\n this.doesEleInvalidateKey = doesEleInvalidateKey;\n }\n return _createClass(ElementTextureCacheLookup, [{\n key: \"getIdsFor\",\n value: function getIdsFor(key) {\n if (key == null) {\n error(\"Can not get id list for null key\");\n }\n var idsByKey = this.idsByKey;\n var ids = this.idsByKey.get(key);\n if (!ids) {\n ids = new Set$1();\n idsByKey.set(key, ids);\n }\n return ids;\n }\n }, {\n key: \"addIdForKey\",\n value: function addIdForKey(key, id) {\n if (key != null) {\n this.getIdsFor(key).add(id);\n }\n }\n }, {\n key: \"deleteIdForKey\",\n value: function deleteIdForKey(key, id) {\n if (key != null) {\n this.getIdsFor(key)[\"delete\"](id);\n }\n }\n }, {\n key: \"getNumberOfIdsForKey\",\n value: function getNumberOfIdsForKey(key) {\n if (key == null) {\n return 0;\n } else {\n return this.getIdsFor(key).size;\n }\n }\n }, {\n key: \"updateKeyMappingFor\",\n value: function updateKeyMappingFor(ele) {\n var id = ele.id();\n var prevKey = this.keyForId.get(id);\n var currKey = this.getKey(ele);\n this.deleteIdForKey(prevKey, id);\n this.addIdForKey(currKey, id);\n this.keyForId.set(id, currKey);\n }\n }, {\n key: \"deleteKeyMappingFor\",\n value: function deleteKeyMappingFor(ele) {\n var id = ele.id();\n var prevKey = this.keyForId.get(id);\n this.deleteIdForKey(prevKey, id);\n this.keyForId[\"delete\"](id);\n }\n }, {\n key: \"keyHasChangedFor\",\n value: function keyHasChangedFor(ele) {\n var id = ele.id();\n var prevKey = this.keyForId.get(id);\n var newKey = this.getKey(ele);\n return prevKey !== newKey;\n }\n }, {\n key: \"isInvalid\",\n value: function isInvalid(ele) {\n return this.keyHasChangedFor(ele) || this.doesEleInvalidateKey(ele);\n }\n }, {\n key: \"getCachesAt\",\n value: function getCachesAt(lvl) {\n var cachesByLvl = this.cachesByLvl,\n lvls = this.lvls;\n var caches = cachesByLvl.get(lvl);\n if (!caches) {\n caches = new Map$1();\n cachesByLvl.set(lvl, caches);\n lvls.push(lvl);\n }\n return caches;\n }\n }, {\n key: \"getCache\",\n value: function getCache(key, lvl) {\n return this.getCachesAt(lvl).get(key);\n }\n }, {\n key: \"get\",\n value: function get(ele, lvl) {\n var key = this.getKey(ele);\n var cache = this.getCache(key, lvl);\n\n // getting for an element may need to add to the id list b/c eles can share keys\n if (cache != null) {\n this.updateKeyMappingFor(ele);\n }\n return cache;\n }\n }, {\n key: \"getForCachedKey\",\n value: function getForCachedKey(ele, lvl) {\n var key = this.keyForId.get(ele.id()); // n.b. use cached key, not newly computed key\n var cache = this.getCache(key, lvl);\n return cache;\n }\n }, {\n key: \"hasCache\",\n value: function hasCache(key, lvl) {\n return this.getCachesAt(lvl).has(key);\n }\n }, {\n key: \"has\",\n value: function has(ele, lvl) {\n var key = this.getKey(ele);\n return this.hasCache(key, lvl);\n }\n }, {\n key: \"setCache\",\n value: function setCache(key, lvl, cache) {\n cache.key = key;\n this.getCachesAt(lvl).set(key, cache);\n }\n }, {\n key: \"set\",\n value: function set(ele, lvl, cache) {\n var key = this.getKey(ele);\n this.setCache(key, lvl, cache);\n this.updateKeyMappingFor(ele);\n }\n }, {\n key: \"deleteCache\",\n value: function deleteCache(key, lvl) {\n this.getCachesAt(lvl)[\"delete\"](key);\n }\n }, {\n key: \"delete\",\n value: function _delete(ele, lvl) {\n var key = this.getKey(ele);\n this.deleteCache(key, lvl);\n }\n }, {\n key: \"invalidateKey\",\n value: function invalidateKey(key) {\n var _this = this;\n this.lvls.forEach(function (lvl) {\n return _this.deleteCache(key, lvl);\n });\n }\n\n // returns true if no other eles reference the invalidated cache (n.b. other eles may need the cache with the same key)\n }, {\n key: \"invalidate\",\n value: function invalidate(ele) {\n var id = ele.id();\n var key = this.keyForId.get(id); // n.b. use stored key rather than current (potential key)\n\n this.deleteKeyMappingFor(ele);\n var entireKeyInvalidated = this.doesEleInvalidateKey(ele);\n if (entireKeyInvalidated) {\n // clear mapping for current key\n this.invalidateKey(key);\n }\n return entireKeyInvalidated || this.getNumberOfIdsForKey(key) === 0;\n }\n }]);\n}();\n\nvar minTxrH = 25; // the size of the texture cache for small height eles (special case)\nvar txrStepH = 50; // the min size of the regular cache, and the size it increases with each step up\nvar minLvl$1 = -4; // when scaling smaller than that we don't need to re-render\nvar maxLvl$1 = 3; // when larger than this scale just render directly (caching is not helpful)\nvar maxZoom$1 = 7.99; // beyond this zoom level, layered textures are not used\nvar eleTxrSpacing = 8; // spacing between elements on textures to avoid blitting overlaps\nvar defTxrWidth = 1024; // default/minimum texture width\nvar maxTxrW = 1024; // the maximum width of a texture\nvar maxTxrH = 1024; // the maximum height of a texture\nvar minUtility = 0.2; // if usage of texture is less than this, it is retired\nvar maxFullness = 0.8; // fullness of texture after which queue removal is checked\nvar maxFullnessChecks = 10; // dequeued after this many checks\nvar deqCost$1 = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame\nvar deqAvgCost$1 = 0.1; // % of add'l rendering cost compared to average overall redraw time\nvar deqNoDrawCost$1 = 0.9; // % of avg frame time that can be used for dequeueing when not drawing\nvar deqFastCost$1 = 0.9; // % of frame time to be used when >60fps\nvar deqRedrawThreshold$1 = 100; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile\nvar maxDeqSize$1 = 1; // number of eles to dequeue and render at higher texture in each batch\n\nvar getTxrReasons = {\n dequeue: 'dequeue',\n downscale: 'downscale',\n highQuality: 'highQuality'\n};\nvar initDefaults = defaults$g({\n getKey: null,\n doesEleInvalidateKey: falsify,\n drawElement: null,\n getBoundingBox: null,\n getRotationPoint: null,\n getRotationOffset: null,\n isVisible: trueify,\n allowEdgeTxrCaching: true,\n allowParentTxrCaching: true\n});\nvar ElementTextureCache = function ElementTextureCache(renderer, initOptions) {\n var self = this;\n self.renderer = renderer;\n self.onDequeues = [];\n var opts = initDefaults(initOptions);\n extend(self, opts);\n self.lookup = new ElementTextureCacheLookup(opts.getKey, opts.doesEleInvalidateKey);\n self.setupDequeueing();\n};\nvar ETCp = ElementTextureCache.prototype;\nETCp.reasons = getTxrReasons;\n\n// the list of textures in which new subtextures for elements can be placed\nETCp.getTextureQueue = function (txrH) {\n var self = this;\n self.eleImgCaches = self.eleImgCaches || {};\n return self.eleImgCaches[txrH] = self.eleImgCaches[txrH] || [];\n};\n\n// the list of usused textures which can be recycled (in use in texture queue)\nETCp.getRetiredTextureQueue = function (txrH) {\n var self = this;\n var rtxtrQs = self.eleImgCaches.retired = self.eleImgCaches.retired || {};\n var rtxtrQ = rtxtrQs[txrH] = rtxtrQs[txrH] || [];\n return rtxtrQ;\n};\n\n// queue of element draw requests at different scale levels\nETCp.getElementQueue = function () {\n var self = this;\n var q = self.eleCacheQueue = self.eleCacheQueue || new Heap(function (a, b) {\n return b.reqs - a.reqs;\n });\n return q;\n};\n\n// queue of element draw requests at different scale levels (element id lookup)\nETCp.getElementKeyToQueue = function () {\n var self = this;\n var k2q = self.eleKeyToCacheQueue = self.eleKeyToCacheQueue || {};\n return k2q;\n};\nETCp.getElement = function (ele, bb, pxRatio, lvl, reason) {\n var self = this;\n var r = this.renderer;\n var zoom = r.cy.zoom();\n var lookup = this.lookup;\n if (!bb || bb.w === 0 || bb.h === 0 || isNaN(bb.w) || isNaN(bb.h) || !ele.visible() || ele.removed()) {\n return null;\n }\n if (!self.allowEdgeTxrCaching && ele.isEdge() || !self.allowParentTxrCaching && ele.isParent()) {\n return null;\n }\n if (lvl == null) {\n lvl = Math.ceil(log2(zoom * pxRatio));\n }\n if (lvl < minLvl$1) {\n lvl = minLvl$1;\n } else if (zoom >= maxZoom$1 || lvl > maxLvl$1) {\n return null;\n }\n var scale = Math.pow(2, lvl);\n var eleScaledH = bb.h * scale;\n var eleScaledW = bb.w * scale;\n var scaledLabelShown = r.eleTextBiggerThanMin(ele, scale);\n if (!this.isVisible(ele, scaledLabelShown)) {\n return null;\n }\n var eleCache = lookup.get(ele, lvl);\n\n // if this get was on an unused/invalidated cache, then restore the texture usage metric\n if (eleCache && eleCache.invalidated) {\n eleCache.invalidated = false;\n eleCache.texture.invalidatedWidth -= eleCache.width;\n }\n if (eleCache) {\n return eleCache;\n }\n var txrH; // which texture height this ele belongs to\n\n if (eleScaledH <= minTxrH) {\n txrH = minTxrH;\n } else if (eleScaledH <= txrStepH) {\n txrH = txrStepH;\n } else {\n txrH = Math.ceil(eleScaledH / txrStepH) * txrStepH;\n }\n if (eleScaledH > maxTxrH || eleScaledW > maxTxrW) {\n return null; // caching large elements is not efficient\n }\n var txrQ = self.getTextureQueue(txrH);\n\n // first try the second last one in case it has space at the end\n var txr = txrQ[txrQ.length - 2];\n var addNewTxr = function addNewTxr() {\n return self.recycleTexture(txrH, eleScaledW) || self.addTexture(txrH, eleScaledW);\n };\n\n // try the last one if there is no second last one\n if (!txr) {\n txr = txrQ[txrQ.length - 1];\n }\n\n // if the last one doesn't exist, we need a first one\n if (!txr) {\n txr = addNewTxr();\n }\n\n // if there's no room in the current texture, we need a new one\n if (txr.width - txr.usedWidth < eleScaledW) {\n txr = addNewTxr();\n }\n var scalableFrom = function scalableFrom(otherCache) {\n return otherCache && otherCache.scaledLabelShown === scaledLabelShown;\n };\n var deqing = reason && reason === getTxrReasons.dequeue;\n var highQualityReq = reason && reason === getTxrReasons.highQuality;\n var downscaleReq = reason && reason === getTxrReasons.downscale;\n var higherCache; // the nearest cache with a higher level\n for (var l = lvl + 1; l <= maxLvl$1; l++) {\n var c = lookup.get(ele, l);\n if (c) {\n higherCache = c;\n break;\n }\n }\n var oneUpCache = higherCache && higherCache.level === lvl + 1 ? higherCache : null;\n var downscale = function downscale() {\n txr.context.drawImage(oneUpCache.texture.canvas, oneUpCache.x, 0, oneUpCache.width, oneUpCache.height, txr.usedWidth, 0, eleScaledW, eleScaledH);\n };\n\n // reset ele area in texture\n txr.context.setTransform(1, 0, 0, 1, 0, 0);\n txr.context.clearRect(txr.usedWidth, 0, eleScaledW, txrH);\n if (scalableFrom(oneUpCache)) {\n // then we can relatively cheaply rescale the existing image w/o rerendering\n downscale();\n } else if (scalableFrom(higherCache)) {\n // then use the higher cache for now and queue the next level down\n // to cheaply scale towards the smaller level\n\n if (highQualityReq) {\n for (var _l = higherCache.level; _l > lvl; _l--) {\n oneUpCache = self.getElement(ele, bb, pxRatio, _l, getTxrReasons.downscale);\n }\n downscale();\n } else {\n self.queueElement(ele, higherCache.level - 1);\n return higherCache;\n }\n } else {\n var lowerCache; // the nearest cache with a lower level\n if (!deqing && !highQualityReq && !downscaleReq) {\n for (var _l2 = lvl - 1; _l2 >= minLvl$1; _l2--) {\n var _c = lookup.get(ele, _l2);\n if (_c) {\n lowerCache = _c;\n break;\n }\n }\n }\n if (scalableFrom(lowerCache)) {\n // then use the lower quality cache for now and queue the better one for later\n\n self.queueElement(ele, lvl);\n return lowerCache;\n }\n txr.context.translate(txr.usedWidth, 0);\n txr.context.scale(scale, scale);\n this.drawElement(txr.context, ele, bb, scaledLabelShown, false);\n txr.context.scale(1 / scale, 1 / scale);\n txr.context.translate(-txr.usedWidth, 0);\n }\n eleCache = {\n x: txr.usedWidth,\n texture: txr,\n level: lvl,\n scale: scale,\n width: eleScaledW,\n height: eleScaledH,\n scaledLabelShown: scaledLabelShown\n };\n txr.usedWidth += Math.ceil(eleScaledW + eleTxrSpacing);\n txr.eleCaches.push(eleCache);\n lookup.set(ele, lvl, eleCache);\n self.checkTextureFullness(txr);\n return eleCache;\n};\nETCp.invalidateElements = function (eles) {\n for (var i = 0; i < eles.length; i++) {\n this.invalidateElement(eles[i]);\n }\n};\nETCp.invalidateElement = function (ele) {\n var self = this;\n var lookup = self.lookup;\n var caches = [];\n var invalid = lookup.isInvalid(ele);\n if (!invalid) {\n return; // override the invalidation request if the element key has not changed\n }\n for (var lvl = minLvl$1; lvl <= maxLvl$1; lvl++) {\n var cache = lookup.getForCachedKey(ele, lvl);\n if (cache) {\n caches.push(cache);\n }\n }\n var noOtherElesUseCache = lookup.invalidate(ele);\n if (noOtherElesUseCache) {\n for (var i = 0; i < caches.length; i++) {\n var _cache = caches[i];\n var txr = _cache.texture;\n\n // remove space from the texture it belongs to\n txr.invalidatedWidth += _cache.width;\n\n // mark the cache as invalidated\n _cache.invalidated = true;\n\n // retire the texture if its utility is low\n self.checkTextureUtility(txr);\n }\n }\n\n // remove from queue since the old req was for the old state\n self.removeFromQueue(ele);\n};\nETCp.checkTextureUtility = function (txr) {\n // invalidate all entries in the cache if the cache size is small\n if (txr.invalidatedWidth >= minUtility * txr.width) {\n this.retireTexture(txr);\n }\n};\nETCp.checkTextureFullness = function (txr) {\n // if texture has been mostly filled and passed over several times, remove\n // it from the queue so we don't need to waste time looking at it to put new things\n\n var self = this;\n var txrQ = self.getTextureQueue(txr.height);\n if (txr.usedWidth / txr.width > maxFullness && txr.fullnessChecks >= maxFullnessChecks) {\n removeFromArray(txrQ, txr);\n } else {\n txr.fullnessChecks++;\n }\n};\nETCp.retireTexture = function (txr) {\n var self = this;\n var txrH = txr.height;\n var txrQ = self.getTextureQueue(txrH);\n var lookup = this.lookup;\n\n // retire the texture from the active / searchable queue:\n\n removeFromArray(txrQ, txr);\n txr.retired = true;\n\n // remove the refs from the eles to the caches:\n\n var eleCaches = txr.eleCaches;\n for (var i = 0; i < eleCaches.length; i++) {\n var eleCache = eleCaches[i];\n lookup.deleteCache(eleCache.key, eleCache.level);\n }\n clearArray(eleCaches);\n\n // add the texture to a retired queue so it can be recycled in future:\n\n var rtxtrQ = self.getRetiredTextureQueue(txrH);\n rtxtrQ.push(txr);\n};\nETCp.addTexture = function (txrH, minW) {\n var self = this;\n var txrQ = self.getTextureQueue(txrH);\n var txr = {};\n txrQ.push(txr);\n txr.eleCaches = [];\n txr.height = txrH;\n txr.width = Math.max(defTxrWidth, minW);\n txr.usedWidth = 0;\n txr.invalidatedWidth = 0;\n txr.fullnessChecks = 0;\n txr.canvas = self.renderer.makeOffscreenCanvas(txr.width, txr.height);\n txr.context = txr.canvas.getContext('2d');\n return txr;\n};\nETCp.recycleTexture = function (txrH, minW) {\n var self = this;\n var txrQ = self.getTextureQueue(txrH);\n var rtxtrQ = self.getRetiredTextureQueue(txrH);\n for (var i = 0; i < rtxtrQ.length; i++) {\n var txr = rtxtrQ[i];\n if (txr.width >= minW) {\n txr.retired = false;\n txr.usedWidth = 0;\n txr.invalidatedWidth = 0;\n txr.fullnessChecks = 0;\n clearArray(txr.eleCaches);\n txr.context.setTransform(1, 0, 0, 1, 0, 0);\n txr.context.clearRect(0, 0, txr.width, txr.height);\n removeFromArray(rtxtrQ, txr);\n txrQ.push(txr);\n return txr;\n }\n }\n};\nETCp.queueElement = function (ele, lvl) {\n var self = this;\n var q = self.getElementQueue();\n var k2q = self.getElementKeyToQueue();\n var key = this.getKey(ele);\n var existingReq = k2q[key];\n if (existingReq) {\n // use the max lvl b/c in between lvls are cheap to make\n existingReq.level = Math.max(existingReq.level, lvl);\n existingReq.eles.merge(ele);\n existingReq.reqs++;\n q.updateItem(existingReq);\n } else {\n var req = {\n eles: ele.spawn().merge(ele),\n level: lvl,\n reqs: 1,\n key: key\n };\n q.push(req);\n k2q[key] = req;\n }\n};\nETCp.dequeue = function (pxRatio /*, extent*/) {\n var self = this;\n var q = self.getElementQueue();\n var k2q = self.getElementKeyToQueue();\n var dequeued = [];\n var lookup = self.lookup;\n for (var i = 0; i < maxDeqSize$1; i++) {\n if (q.size() > 0) {\n var req = q.pop();\n var key = req.key;\n var ele = req.eles[0]; // all eles have the same key\n var cacheExists = lookup.hasCache(ele, req.level);\n\n // clear out the key to req lookup\n k2q[key] = null;\n\n // dequeueing isn't necessary with an existing cache\n if (cacheExists) {\n continue;\n }\n dequeued.push(req);\n var bb = self.getBoundingBox(ele);\n self.getElement(ele, bb, pxRatio, req.level, getTxrReasons.dequeue);\n } else {\n break;\n }\n }\n return dequeued;\n};\nETCp.removeFromQueue = function (ele) {\n var self = this;\n var q = self.getElementQueue();\n var k2q = self.getElementKeyToQueue();\n var key = this.getKey(ele);\n var req = k2q[key];\n if (req != null) {\n if (req.eles.length === 1) {\n // remove if last ele in the req\n // bring to front of queue\n req.reqs = MAX_INT$1;\n q.updateItem(req);\n q.pop(); // remove from queue\n\n k2q[key] = null; // remove from lookup map\n } else {\n // otherwise just remove ele from req\n req.eles.unmerge(ele);\n }\n }\n};\nETCp.onDequeue = function (fn) {\n this.onDequeues.push(fn);\n};\nETCp.offDequeue = function (fn) {\n removeFromArray(this.onDequeues, fn);\n};\nETCp.setupDequeueing = defs.setupDequeueing({\n deqRedrawThreshold: deqRedrawThreshold$1,\n deqCost: deqCost$1,\n deqAvgCost: deqAvgCost$1,\n deqNoDrawCost: deqNoDrawCost$1,\n deqFastCost: deqFastCost$1,\n deq: function deq(self, pxRatio, extent) {\n return self.dequeue(pxRatio, extent);\n },\n onDeqd: function onDeqd(self, deqd) {\n for (var i = 0; i < self.onDequeues.length; i++) {\n var fn = self.onDequeues[i];\n fn(deqd);\n }\n },\n shouldRedraw: function shouldRedraw(self, deqd, pxRatio, extent) {\n for (var i = 0; i < deqd.length; i++) {\n var eles = deqd[i].eles;\n for (var j = 0; j < eles.length; j++) {\n var bb = eles[j].boundingBox();\n if (boundingBoxesIntersect(bb, extent)) {\n return true;\n }\n }\n }\n return false;\n },\n priority: function priority(self) {\n return self.renderer.beforeRenderPriorities.eleTxrDeq;\n }\n});\n\nvar defNumLayers = 1; // default number of layers to use\nvar minLvl = -4; // when scaling smaller than that we don't need to re-render\nvar maxLvl = 2; // when larger than this scale just render directly (caching is not helpful)\nvar maxZoom = 3.99; // beyond this zoom level, layered textures are not used\nvar deqRedrawThreshold = 50; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile\nvar refineEleDebounceTime = 50; // time to debounce sharper ele texture updates\nvar deqCost = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame\nvar deqAvgCost = 0.1; // % of add'l rendering cost compared to average overall redraw time\nvar deqNoDrawCost = 0.9; // % of avg frame time that can be used for dequeueing when not drawing\nvar deqFastCost = 0.9; // % of frame time to be used when >60fps\nvar maxDeqSize = 1; // number of eles to dequeue and render at higher texture in each batch\nvar invalidThreshold = 250; // time threshold for disabling b/c of invalidations\nvar maxLayerArea = 4000 * 4000; // layers can't be bigger than this\nvar maxLayerDim = 32767; // maximum size for the width/height of layer canvases\nvar useHighQualityEleTxrReqs = true; // whether to use high quality ele txr requests (generally faster and cheaper in the longterm)\n\n// var log = function(){ console.log.apply( console, arguments ); };\n\nvar LayeredTextureCache = function LayeredTextureCache(renderer) {\n var self = this;\n var r = self.renderer = renderer;\n var cy = r.cy;\n self.layersByLevel = {}; // e.g. 2 => [ layer1, layer2, ..., layerN ]\n\n self.firstGet = true;\n self.lastInvalidationTime = performanceNow() - 2 * invalidThreshold;\n self.skipping = false;\n self.eleTxrDeqs = cy.collection();\n self.scheduleElementRefinement = debounce(function () {\n self.refineElementTextures(self.eleTxrDeqs);\n self.eleTxrDeqs.unmerge(self.eleTxrDeqs);\n }, refineEleDebounceTime);\n r.beforeRender(function (willDraw, now) {\n if (now - self.lastInvalidationTime <= invalidThreshold) {\n self.skipping = true;\n } else {\n self.skipping = false;\n }\n }, r.beforeRenderPriorities.lyrTxrSkip);\n var qSort = function qSort(a, b) {\n return b.reqs - a.reqs;\n };\n self.layersQueue = new Heap(qSort);\n self.setupDequeueing();\n};\nvar LTCp = LayeredTextureCache.prototype;\nvar layerIdPool = 0;\nvar MAX_INT = Math.pow(2, 53) - 1;\nLTCp.makeLayer = function (bb, lvl) {\n var scale = Math.pow(2, lvl);\n var w = Math.ceil(bb.w * scale);\n var h = Math.ceil(bb.h * scale);\n var canvas = this.renderer.makeOffscreenCanvas(w, h);\n var layer = {\n id: layerIdPool = ++layerIdPool % MAX_INT,\n bb: bb,\n level: lvl,\n width: w,\n height: h,\n canvas: canvas,\n context: canvas.getContext('2d'),\n eles: [],\n elesQueue: [],\n reqs: 0\n };\n\n // log('make layer %s with w %s and h %s and lvl %s', layer.id, layer.width, layer.height, layer.level);\n\n var cxt = layer.context;\n var dx = -layer.bb.x1;\n var dy = -layer.bb.y1;\n\n // do the transform on creation to save cycles (it's the same for all eles)\n cxt.scale(scale, scale);\n cxt.translate(dx, dy);\n return layer;\n};\nLTCp.getLayers = function (eles, pxRatio, lvl) {\n var self = this;\n var r = self.renderer;\n var cy = r.cy;\n var zoom = cy.zoom();\n var firstGet = self.firstGet;\n self.firstGet = false;\n\n // log('--\\nget layers with %s eles', eles.length);\n //log eles.map(function(ele){ return ele.id() }) );\n\n if (lvl == null) {\n lvl = Math.ceil(log2(zoom * pxRatio));\n if (lvl < minLvl) {\n lvl = minLvl;\n } else if (zoom >= maxZoom || lvl > maxLvl) {\n return null;\n }\n }\n self.validateLayersElesOrdering(lvl, eles);\n var layersByLvl = self.layersByLevel;\n var scale = Math.pow(2, lvl);\n var layers = layersByLvl[lvl] = layersByLvl[lvl] || [];\n var bb;\n var lvlComplete = self.levelIsComplete(lvl, eles);\n var tmpLayers;\n var checkTempLevels = function checkTempLevels() {\n var canUseAsTmpLvl = function canUseAsTmpLvl(l) {\n self.validateLayersElesOrdering(l, eles);\n if (self.levelIsComplete(l, eles)) {\n tmpLayers = layersByLvl[l];\n return true;\n }\n };\n var checkLvls = function checkLvls(dir) {\n if (tmpLayers) {\n return;\n }\n for (var l = lvl + dir; minLvl <= l && l <= maxLvl; l += dir) {\n if (canUseAsTmpLvl(l)) {\n break;\n }\n }\n };\n checkLvls(1);\n checkLvls(-1);\n\n // remove the invalid layers; they will be replaced as needed later in this function\n for (var i = layers.length - 1; i >= 0; i--) {\n var layer = layers[i];\n if (layer.invalid) {\n removeFromArray(layers, layer);\n }\n }\n };\n if (!lvlComplete) {\n // if the current level is incomplete, then use the closest, best quality layerset temporarily\n // and later queue the current layerset so we can get the proper quality level soon\n\n checkTempLevels();\n } else {\n // log('level complete, using existing layers\\n--');\n return layers;\n }\n var getBb = function getBb() {\n if (!bb) {\n bb = makeBoundingBox();\n for (var i = 0; i < eles.length; i++) {\n updateBoundingBox(bb, eles[i].boundingBox());\n }\n }\n return bb;\n };\n var makeLayer = function makeLayer(opts) {\n opts = opts || {};\n var after = opts.after;\n getBb();\n var w = Math.ceil(bb.w * scale);\n var h = Math.ceil(bb.h * scale);\n if (w > maxLayerDim || h > maxLayerDim) {\n return null;\n }\n var area = w * h;\n if (area > maxLayerArea) {\n return null;\n }\n var layer = self.makeLayer(bb, lvl);\n if (after != null) {\n var index = layers.indexOf(after) + 1;\n layers.splice(index, 0, layer);\n } else if (opts.insert === undefined || opts.insert) {\n // no after specified => first layer made so put at start\n layers.unshift(layer);\n }\n\n // if( tmpLayers ){\n //self.queueLayer( layer );\n // }\n\n return layer;\n };\n if (self.skipping && !firstGet) {\n // log('skip layers');\n return null;\n }\n\n // log('do layers');\n\n var layer = null;\n var maxElesPerLayer = eles.length / defNumLayers;\n var allowLazyQueueing = !firstGet;\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n var rs = ele._private.rscratch;\n var caches = rs.imgLayerCaches = rs.imgLayerCaches || {};\n\n // log('look at ele', ele.id());\n\n var existingLayer = caches[lvl];\n if (existingLayer) {\n // reuse layer for later eles\n // log('reuse layer for', ele.id());\n layer = existingLayer;\n continue;\n }\n if (!layer || layer.eles.length >= maxElesPerLayer || !boundingBoxInBoundingBox(layer.bb, ele.boundingBox())) {\n // log('make new layer for ele %s', ele.id());\n\n layer = makeLayer({\n insert: true,\n after: layer\n });\n\n // if now layer can be built then we can't use layers at this level\n if (!layer) {\n return null;\n }\n\n // log('new layer with id %s', layer.id);\n }\n if (tmpLayers || allowLazyQueueing) {\n // log('queue ele %s in layer %s', ele.id(), layer.id);\n self.queueLayer(layer, ele);\n } else {\n // log('draw ele %s in layer %s', ele.id(), layer.id);\n self.drawEleInLayer(layer, ele, lvl, pxRatio);\n }\n layer.eles.push(ele);\n caches[lvl] = layer;\n }\n\n // log('--');\n\n if (tmpLayers) {\n // then we only queued the current layerset and can't draw it yet\n return tmpLayers;\n }\n if (allowLazyQueueing) {\n // log('lazy queue level', lvl);\n return null;\n }\n return layers;\n};\n\n// a layer may want to use an ele cache of a higher level to avoid blurriness\n// so the layer level might not equal the ele level\nLTCp.getEleLevelForLayerLevel = function (lvl, pxRatio) {\n return lvl;\n};\nLTCp.drawEleInLayer = function (layer, ele, lvl, pxRatio) {\n var self = this;\n var r = this.renderer;\n var context = layer.context;\n var bb = ele.boundingBox();\n if (bb.w === 0 || bb.h === 0 || !ele.visible()) {\n return;\n }\n lvl = self.getEleLevelForLayerLevel(lvl, pxRatio);\n {\n r.setImgSmoothing(context, false);\n }\n {\n r.drawCachedElement(context, ele, null, null, lvl, useHighQualityEleTxrReqs);\n }\n {\n r.setImgSmoothing(context, true);\n }\n};\nLTCp.levelIsComplete = function (lvl, eles) {\n var self = this;\n var layers = self.layersByLevel[lvl];\n if (!layers || layers.length === 0) {\n return false;\n }\n var numElesInLayers = 0;\n for (var i = 0; i < layers.length; i++) {\n var layer = layers[i];\n\n // if there are any eles needed to be drawn yet, the level is not complete\n if (layer.reqs > 0) {\n return false;\n }\n\n // if the layer is invalid, the level is not complete\n if (layer.invalid) {\n return false;\n }\n numElesInLayers += layer.eles.length;\n }\n\n // we should have exactly the number of eles passed in to be complete\n if (numElesInLayers !== eles.length) {\n return false;\n }\n return true;\n};\nLTCp.validateLayersElesOrdering = function (lvl, eles) {\n var layers = this.layersByLevel[lvl];\n if (!layers) {\n return;\n }\n\n // if in a layer the eles are not in the same order, then the layer is invalid\n // (i.e. there is an ele in between the eles in the layer)\n\n for (var i = 0; i < layers.length; i++) {\n var layer = layers[i];\n var offset = -1;\n\n // find the offset\n for (var j = 0; j < eles.length; j++) {\n if (layer.eles[0] === eles[j]) {\n offset = j;\n break;\n }\n }\n if (offset < 0) {\n // then the layer has nonexistent elements and is invalid\n this.invalidateLayer(layer);\n continue;\n }\n\n // the eles in the layer must be in the same continuous order, else the layer is invalid\n\n var o = offset;\n for (var j = 0; j < layer.eles.length; j++) {\n if (layer.eles[j] !== eles[o + j]) {\n // log('invalidate based on ordering', layer.id);\n\n this.invalidateLayer(layer);\n break;\n }\n }\n }\n};\nLTCp.updateElementsInLayers = function (eles, update) {\n var self = this;\n var isEles = element(eles[0]);\n\n // collect udpated elements (cascaded from the layers) and update each\n // layer itself along the way\n for (var i = 0; i < eles.length; i++) {\n var req = isEles ? null : eles[i];\n var ele = isEles ? eles[i] : eles[i].ele;\n var rs = ele._private.rscratch;\n var caches = rs.imgLayerCaches = rs.imgLayerCaches || {};\n for (var l = minLvl; l <= maxLvl; l++) {\n var layer = caches[l];\n if (!layer) {\n continue;\n }\n\n // if update is a request from the ele cache, then it affects only\n // the matching level\n if (req && self.getEleLevelForLayerLevel(layer.level) !== req.level) {\n continue;\n }\n update(layer, ele, req);\n }\n }\n};\nLTCp.haveLayers = function () {\n var self = this;\n var haveLayers = false;\n for (var l = minLvl; l <= maxLvl; l++) {\n var layers = self.layersByLevel[l];\n if (layers && layers.length > 0) {\n haveLayers = true;\n break;\n }\n }\n return haveLayers;\n};\nLTCp.invalidateElements = function (eles) {\n var self = this;\n if (eles.length === 0) {\n return;\n }\n self.lastInvalidationTime = performanceNow();\n\n // log('update invalidate layer time from eles');\n\n if (eles.length === 0 || !self.haveLayers()) {\n return;\n }\n self.updateElementsInLayers(eles, function invalAssocLayers(layer, ele, req) {\n self.invalidateLayer(layer);\n });\n};\nLTCp.invalidateLayer = function (layer) {\n // log('update invalidate layer time');\n\n this.lastInvalidationTime = performanceNow();\n if (layer.invalid) {\n return;\n } // save cycles\n\n var lvl = layer.level;\n var eles = layer.eles;\n var layers = this.layersByLevel[lvl];\n\n // log('invalidate layer', layer.id );\n\n removeFromArray(layers, layer);\n // layer.eles = [];\n\n layer.elesQueue = [];\n layer.invalid = true;\n if (layer.replacement) {\n layer.replacement.invalid = true;\n }\n for (var i = 0; i < eles.length; i++) {\n var caches = eles[i]._private.rscratch.imgLayerCaches;\n if (caches) {\n caches[lvl] = null;\n }\n }\n};\nLTCp.refineElementTextures = function (eles) {\n var self = this;\n\n // log('refine', eles.length);\n\n self.updateElementsInLayers(eles, function refineEachEle(layer, ele, req) {\n var rLyr = layer.replacement;\n if (!rLyr) {\n rLyr = layer.replacement = self.makeLayer(layer.bb, layer.level);\n rLyr.replaces = layer;\n rLyr.eles = layer.eles;\n\n // log('make replacement layer %s for %s with level %s', rLyr.id, layer.id, rLyr.level);\n }\n if (!rLyr.reqs) {\n for (var i = 0; i < rLyr.eles.length; i++) {\n self.queueLayer(rLyr, rLyr.eles[i]);\n }\n\n // log('queue replacement layer refinement', rLyr.id);\n }\n });\n};\nLTCp.enqueueElementRefinement = function (ele) {\n this.eleTxrDeqs.merge(ele);\n this.scheduleElementRefinement();\n};\nLTCp.queueLayer = function (layer, ele) {\n var self = this;\n var q = self.layersQueue;\n var elesQ = layer.elesQueue;\n var hasId = elesQ.hasId = elesQ.hasId || {};\n\n // if a layer is going to be replaced, queuing is a waste of time\n if (layer.replacement) {\n return;\n }\n if (ele) {\n if (hasId[ele.id()]) {\n return;\n }\n elesQ.push(ele);\n hasId[ele.id()] = true;\n }\n if (layer.reqs) {\n layer.reqs++;\n q.updateItem(layer);\n } else {\n layer.reqs = 1;\n q.push(layer);\n }\n};\nLTCp.dequeue = function (pxRatio) {\n var self = this;\n var q = self.layersQueue;\n var deqd = [];\n var eleDeqs = 0;\n while (eleDeqs < maxDeqSize) {\n if (q.size() === 0) {\n break;\n }\n var layer = q.peek();\n\n // if a layer has been or will be replaced, then don't waste time with it\n if (layer.replacement) {\n // log('layer %s in queue skipped b/c it already has a replacement', layer.id);\n q.pop();\n continue;\n }\n\n // if this is a replacement layer that has been superceded, then forget it\n if (layer.replaces && layer !== layer.replaces.replacement) {\n // log('layer is no longer the most uptodate replacement; dequeued', layer.id)\n q.pop();\n continue;\n }\n if (layer.invalid) {\n // log('replacement layer %s is invalid; dequeued', layer.id);\n q.pop();\n continue;\n }\n var ele = layer.elesQueue.shift();\n if (ele) {\n // log('dequeue layer %s', layer.id);\n\n self.drawEleInLayer(layer, ele, layer.level, pxRatio);\n eleDeqs++;\n }\n if (deqd.length === 0) {\n // we need only one entry in deqd to queue redrawing etc\n deqd.push(true);\n }\n\n // if the layer has all its eles done, then remove from the queue\n if (layer.elesQueue.length === 0) {\n q.pop();\n layer.reqs = 0;\n\n // log('dequeue of layer %s complete', layer.id);\n\n // when a replacement layer is dequeued, it replaces the old layer in the level\n if (layer.replaces) {\n self.applyLayerReplacement(layer);\n }\n self.requestRedraw();\n }\n }\n return deqd;\n};\nLTCp.applyLayerReplacement = function (layer) {\n var self = this;\n var layersInLevel = self.layersByLevel[layer.level];\n var replaced = layer.replaces;\n var index = layersInLevel.indexOf(replaced);\n\n // if the replaced layer is not in the active list for the level, then replacing\n // refs would be a mistake (i.e. overwriting the true active layer)\n if (index < 0 || replaced.invalid) {\n // log('replacement layer would have no effect', layer.id);\n return;\n }\n layersInLevel[index] = layer; // replace level ref\n\n // replace refs in eles\n for (var i = 0; i < layer.eles.length; i++) {\n var _p = layer.eles[i]._private;\n var cache = _p.imgLayerCaches = _p.imgLayerCaches || {};\n if (cache) {\n cache[layer.level] = layer;\n }\n }\n\n // log('apply replacement layer %s over %s', layer.id, replaced.id);\n\n self.requestRedraw();\n};\nLTCp.requestRedraw = debounce(function () {\n var r = this.renderer;\n r.redrawHint('eles', true);\n r.redrawHint('drag', true);\n r.redraw();\n}, 100);\nLTCp.setupDequeueing = defs.setupDequeueing({\n deqRedrawThreshold: deqRedrawThreshold,\n deqCost: deqCost,\n deqAvgCost: deqAvgCost,\n deqNoDrawCost: deqNoDrawCost,\n deqFastCost: deqFastCost,\n deq: function deq(self, pxRatio) {\n return self.dequeue(pxRatio);\n },\n onDeqd: noop$1,\n shouldRedraw: trueify,\n priority: function priority(self) {\n return self.renderer.beforeRenderPriorities.lyrTxrDeq;\n }\n});\n\nvar CRp$b = {};\nvar impl;\nfunction polygon(context, points) {\n for (var i = 0; i < points.length; i++) {\n var pt = points[i];\n context.lineTo(pt.x, pt.y);\n }\n}\nfunction triangleBackcurve(context, points, controlPoint) {\n var firstPt;\n for (var i = 0; i < points.length; i++) {\n var pt = points[i];\n if (i === 0) {\n firstPt = pt;\n }\n context.lineTo(pt.x, pt.y);\n }\n context.quadraticCurveTo(controlPoint.x, controlPoint.y, firstPt.x, firstPt.y);\n}\nfunction triangleTee(context, trianglePoints, teePoints) {\n if (context.beginPath) {\n context.beginPath();\n }\n var triPts = trianglePoints;\n for (var i = 0; i < triPts.length; i++) {\n var pt = triPts[i];\n context.lineTo(pt.x, pt.y);\n }\n var teePts = teePoints;\n var firstTeePt = teePoints[0];\n context.moveTo(firstTeePt.x, firstTeePt.y);\n for (var i = 1; i < teePts.length; i++) {\n var pt = teePts[i];\n context.lineTo(pt.x, pt.y);\n }\n if (context.closePath) {\n context.closePath();\n }\n}\nfunction circleTriangle(context, trianglePoints, rx, ry, r) {\n if (context.beginPath) {\n context.beginPath();\n }\n context.arc(rx, ry, r, 0, Math.PI * 2, false);\n var triPts = trianglePoints;\n var firstTrPt = triPts[0];\n context.moveTo(firstTrPt.x, firstTrPt.y);\n for (var i = 0; i < triPts.length; i++) {\n var pt = triPts[i];\n context.lineTo(pt.x, pt.y);\n }\n if (context.closePath) {\n context.closePath();\n }\n}\nfunction circle$1(context, rx, ry, r) {\n context.arc(rx, ry, r, 0, Math.PI * 2, false);\n}\nCRp$b.arrowShapeImpl = function (name) {\n return (impl || (impl = {\n 'polygon': polygon,\n 'triangle-backcurve': triangleBackcurve,\n 'triangle-tee': triangleTee,\n 'circle-triangle': circleTriangle,\n 'triangle-cross': triangleTee,\n 'circle': circle$1\n }))[name];\n};\n\nvar CRp$a = {};\nCRp$a.drawElement = function (context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity) {\n var r = this;\n if (ele.isNode()) {\n r.drawNode(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity);\n } else {\n r.drawEdge(context, ele, shiftToOriginWithBb, showLabel, showOverlay, showOpacity);\n }\n};\nCRp$a.drawElementOverlay = function (context, ele) {\n var r = this;\n if (ele.isNode()) {\n r.drawNodeOverlay(context, ele);\n } else {\n r.drawEdgeOverlay(context, ele);\n }\n};\nCRp$a.drawElementUnderlay = function (context, ele) {\n var r = this;\n if (ele.isNode()) {\n r.drawNodeUnderlay(context, ele);\n } else {\n r.drawEdgeUnderlay(context, ele);\n }\n};\nCRp$a.drawCachedElementPortion = function (context, ele, eleTxrCache, pxRatio, lvl, reason, getRotation, getOpacity) {\n var r = this;\n var bb = eleTxrCache.getBoundingBox(ele);\n if (bb.w === 0 || bb.h === 0) {\n return;\n } // ignore zero size case\n\n var eleCache = eleTxrCache.getElement(ele, bb, pxRatio, lvl, reason);\n if (eleCache != null) {\n var opacity = getOpacity(r, ele);\n if (opacity === 0) {\n return;\n }\n var theta = getRotation(r, ele);\n var x1 = bb.x1,\n y1 = bb.y1,\n w = bb.w,\n h = bb.h;\n var x, y, sx, sy, smooth;\n if (theta !== 0) {\n var rotPt = eleTxrCache.getRotationPoint(ele);\n sx = rotPt.x;\n sy = rotPt.y;\n context.translate(sx, sy);\n context.rotate(theta);\n smooth = r.getImgSmoothing(context);\n if (!smooth) {\n r.setImgSmoothing(context, true);\n }\n var off = eleTxrCache.getRotationOffset(ele);\n x = off.x;\n y = off.y;\n } else {\n x = x1;\n y = y1;\n }\n var oldGlobalAlpha;\n if (opacity !== 1) {\n oldGlobalAlpha = context.globalAlpha;\n context.globalAlpha = oldGlobalAlpha * opacity;\n }\n context.drawImage(eleCache.texture.canvas, eleCache.x, 0, eleCache.width, eleCache.height, x, y, w, h);\n if (opacity !== 1) {\n context.globalAlpha = oldGlobalAlpha;\n }\n if (theta !== 0) {\n context.rotate(-theta);\n context.translate(-sx, -sy);\n if (!smooth) {\n r.setImgSmoothing(context, false);\n }\n }\n } else {\n eleTxrCache.drawElement(context, ele); // direct draw fallback\n }\n};\nvar getZeroRotation = function getZeroRotation() {\n return 0;\n};\nvar getLabelRotation = function getLabelRotation(r, ele) {\n return r.getTextAngle(ele, null);\n};\nvar getSourceLabelRotation = function getSourceLabelRotation(r, ele) {\n return r.getTextAngle(ele, 'source');\n};\nvar getTargetLabelRotation = function getTargetLabelRotation(r, ele) {\n return r.getTextAngle(ele, 'target');\n};\nvar getOpacity = function getOpacity(r, ele) {\n return ele.effectiveOpacity();\n};\nvar getTextOpacity = function getTextOpacity(e, ele) {\n return ele.pstyle('text-opacity').pfValue * ele.effectiveOpacity();\n};\nCRp$a.drawCachedElement = function (context, ele, pxRatio, extent, lvl, requestHighQuality) {\n var r = this;\n var _r$data = r.data,\n eleTxrCache = _r$data.eleTxrCache,\n lblTxrCache = _r$data.lblTxrCache,\n slbTxrCache = _r$data.slbTxrCache,\n tlbTxrCache = _r$data.tlbTxrCache;\n var bb = ele.boundingBox();\n var reason = requestHighQuality === true ? eleTxrCache.reasons.highQuality : null;\n if (bb.w === 0 || bb.h === 0 || !ele.visible()) {\n return;\n }\n if (!extent || boundingBoxesIntersect(bb, extent)) {\n var isEdge = ele.isEdge();\n var badLine = ele.element()._private.rscratch.badLine;\n r.drawElementUnderlay(context, ele);\n r.drawCachedElementPortion(context, ele, eleTxrCache, pxRatio, lvl, reason, getZeroRotation, getOpacity);\n if (!isEdge || !badLine) {\n r.drawCachedElementPortion(context, ele, lblTxrCache, pxRatio, lvl, reason, getLabelRotation, getTextOpacity);\n }\n if (isEdge && !badLine) {\n r.drawCachedElementPortion(context, ele, slbTxrCache, pxRatio, lvl, reason, getSourceLabelRotation, getTextOpacity);\n r.drawCachedElementPortion(context, ele, tlbTxrCache, pxRatio, lvl, reason, getTargetLabelRotation, getTextOpacity);\n }\n r.drawElementOverlay(context, ele);\n }\n};\nCRp$a.drawElements = function (context, eles) {\n var r = this;\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n r.drawElement(context, ele);\n }\n};\nCRp$a.drawCachedElements = function (context, eles, pxRatio, extent) {\n var r = this;\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n r.drawCachedElement(context, ele, pxRatio, extent);\n }\n};\nCRp$a.drawCachedNodes = function (context, eles, pxRatio, extent) {\n var r = this;\n for (var i = 0; i < eles.length; i++) {\n var ele = eles[i];\n if (!ele.isNode()) {\n continue;\n }\n r.drawCachedElement(context, ele, pxRatio, extent);\n }\n};\nCRp$a.drawLayeredElements = function (context, eles, pxRatio, extent) {\n var r = this;\n var layers = r.data.lyrTxrCache.getLayers(eles, pxRatio);\n if (layers) {\n for (var i = 0; i < layers.length; i++) {\n var layer = layers[i];\n var bb = layer.bb;\n if (bb.w === 0 || bb.h === 0) {\n continue;\n }\n context.drawImage(layer.canvas, bb.x1, bb.y1, bb.w, bb.h);\n }\n } else {\n // fall back on plain caching if no layers\n r.drawCachedElements(context, eles, pxRatio, extent);\n }\n};\n\nvar CRp$9 = {};\nCRp$9.drawEdge = function (context, edge, shiftToOriginWithBb) {\n var drawLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n var r = this;\n var rs = edge._private.rscratch;\n if (shouldDrawOpacity && !edge.visible()) {\n return;\n }\n\n // if bezier ctrl pts can not be calculated, then die\n if (rs.badLine || rs.allpts == null || isNaN(rs.allpts[0])) {\n // isNaN in case edge is impossible and browser bugs (e.g. safari)\n return;\n }\n var bb;\n if (shiftToOriginWithBb) {\n bb = shiftToOriginWithBb;\n context.translate(-bb.x1, -bb.y1);\n }\n var opacity = shouldDrawOpacity ? edge.pstyle('opacity').value : 1;\n var lineOpacity = shouldDrawOpacity ? edge.pstyle('line-opacity').value : 1;\n var curveStyle = edge.pstyle('curve-style').value;\n var lineStyle = edge.pstyle('line-style').value;\n var edgeWidth = edge.pstyle('width').pfValue;\n var lineCap = edge.pstyle('line-cap').value;\n var lineOutlineWidth = edge.pstyle('line-outline-width').value;\n var lineOutlineColor = edge.pstyle('line-outline-color').value;\n var effectiveLineOpacity = opacity * lineOpacity;\n // separate arrow opacity would require arrow-opacity property\n var effectiveArrowOpacity = opacity * lineOpacity;\n var drawLine = function drawLine() {\n var strokeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveLineOpacity;\n if (curveStyle === 'straight-triangle') {\n r.eleStrokeStyle(context, edge, strokeOpacity);\n r.drawEdgeTrianglePath(edge, context, rs.allpts);\n } else {\n context.lineWidth = edgeWidth;\n context.lineCap = lineCap;\n r.eleStrokeStyle(context, edge, strokeOpacity);\n r.drawEdgePath(edge, context, rs.allpts, lineStyle);\n context.lineCap = 'butt'; // reset for other drawing functions\n }\n };\n var drawLineOutline = function drawLineOutline() {\n var strokeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveLineOpacity;\n context.lineWidth = edgeWidth + lineOutlineWidth;\n context.lineCap = lineCap;\n if (lineOutlineWidth > 0) {\n r.colorStrokeStyle(context, lineOutlineColor[0], lineOutlineColor[1], lineOutlineColor[2], strokeOpacity);\n } else {\n // do not draw any lineOutline\n context.lineCap = 'butt'; // reset for other drawing functions\n return;\n }\n if (curveStyle === 'straight-triangle') {\n r.drawEdgeTrianglePath(edge, context, rs.allpts);\n } else {\n r.drawEdgePath(edge, context, rs.allpts, lineStyle);\n context.lineCap = 'butt'; // reset for other drawing functions\n }\n };\n var drawOverlay = function drawOverlay() {\n if (!shouldDrawOverlay) {\n return;\n }\n r.drawEdgeOverlay(context, edge);\n };\n var drawUnderlay = function drawUnderlay() {\n if (!shouldDrawOverlay) {\n return;\n }\n r.drawEdgeUnderlay(context, edge);\n };\n var drawArrows = function drawArrows() {\n var arrowOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : effectiveArrowOpacity;\n r.drawArrowheads(context, edge, arrowOpacity);\n };\n var drawText = function drawText() {\n r.drawElementText(context, edge, null, drawLabel);\n };\n context.lineJoin = 'round';\n var ghost = edge.pstyle('ghost').value === 'yes';\n if (ghost) {\n var gx = edge.pstyle('ghost-offset-x').pfValue;\n var gy = edge.pstyle('ghost-offset-y').pfValue;\n var ghostOpacity = edge.pstyle('ghost-opacity').value;\n var effectiveGhostOpacity = effectiveLineOpacity * ghostOpacity;\n context.translate(gx, gy);\n drawLine(effectiveGhostOpacity);\n drawArrows(effectiveGhostOpacity);\n context.translate(-gx, -gy);\n } else {\n drawLineOutline();\n }\n drawUnderlay();\n drawLine();\n drawArrows();\n drawOverlay();\n drawText();\n if (shiftToOriginWithBb) {\n context.translate(bb.x1, bb.y1);\n }\n};\nvar drawEdgeOverlayUnderlay = function drawEdgeOverlayUnderlay(overlayOrUnderlay) {\n if (!['overlay', 'underlay'].includes(overlayOrUnderlay)) {\n throw new Error('Invalid state');\n }\n return function (context, edge) {\n if (!edge.visible()) {\n return;\n }\n var opacity = edge.pstyle(\"\".concat(overlayOrUnderlay, \"-opacity\")).value;\n if (opacity === 0) {\n return;\n }\n var r = this;\n var usePaths = r.usePaths();\n var rs = edge._private.rscratch;\n var padding = edge.pstyle(\"\".concat(overlayOrUnderlay, \"-padding\")).pfValue;\n var width = 2 * padding;\n var color = edge.pstyle(\"\".concat(overlayOrUnderlay, \"-color\")).value;\n context.lineWidth = width;\n if (rs.edgeType === 'self' && !usePaths) {\n context.lineCap = 'butt';\n } else {\n context.lineCap = 'round';\n }\n r.colorStrokeStyle(context, color[0], color[1], color[2], opacity);\n r.drawEdgePath(edge, context, rs.allpts, 'solid');\n };\n};\nCRp$9.drawEdgeOverlay = drawEdgeOverlayUnderlay('overlay');\nCRp$9.drawEdgeUnderlay = drawEdgeOverlayUnderlay('underlay');\nCRp$9.drawEdgePath = function (edge, context, pts, type) {\n var rs = edge._private.rscratch;\n var canvasCxt = context;\n var path;\n var pathCacheHit = false;\n var usePaths = this.usePaths();\n var lineDashPattern = edge.pstyle('line-dash-pattern').pfValue;\n var lineDashOffset = edge.pstyle('line-dash-offset').pfValue;\n if (usePaths) {\n var pathCacheKey = pts.join('$');\n var keyMatches = rs.pathCacheKey && rs.pathCacheKey === pathCacheKey;\n if (keyMatches) {\n path = context = rs.pathCache;\n pathCacheHit = true;\n } else {\n path = context = new Path2D();\n rs.pathCacheKey = pathCacheKey;\n rs.pathCache = path;\n }\n }\n if (canvasCxt.setLineDash) {\n // for very outofdate browsers\n switch (type) {\n case 'dotted':\n canvasCxt.setLineDash([1, 1]);\n break;\n case 'dashed':\n canvasCxt.setLineDash(lineDashPattern);\n canvasCxt.lineDashOffset = lineDashOffset;\n break;\n case 'solid':\n canvasCxt.setLineDash([]);\n break;\n }\n }\n if (!pathCacheHit && !rs.badLine) {\n if (context.beginPath) {\n context.beginPath();\n }\n context.moveTo(pts[0], pts[1]);\n switch (rs.edgeType) {\n case 'bezier':\n case 'self':\n case 'compound':\n case 'multibezier':\n for (var i = 2; i + 3 < pts.length; i += 4) {\n context.quadraticCurveTo(pts[i], pts[i + 1], pts[i + 2], pts[i + 3]);\n }\n break;\n case 'straight':\n case 'haystack':\n for (var _i = 2; _i + 1 < pts.length; _i += 2) {\n context.lineTo(pts[_i], pts[_i + 1]);\n }\n break;\n case 'segments':\n if (rs.isRound) {\n var _iterator = _createForOfIteratorHelper(rs.roundCorners),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var corner = _step.value;\n drawPreparedRoundCorner(context, corner);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n context.lineTo(pts[pts.length - 2], pts[pts.length - 1]);\n } else {\n for (var _i2 = 2; _i2 + 1 < pts.length; _i2 += 2) {\n context.lineTo(pts[_i2], pts[_i2 + 1]);\n }\n }\n break;\n }\n }\n context = canvasCxt;\n if (usePaths) {\n context.stroke(path);\n } else {\n context.stroke();\n }\n\n // reset any line dashes\n if (context.setLineDash) {\n // for very outofdate browsers\n context.setLineDash([]);\n }\n};\nCRp$9.drawEdgeTrianglePath = function (edge, context, pts) {\n // use line stroke style for triangle fill style\n context.fillStyle = context.strokeStyle;\n var edgeWidth = edge.pstyle('width').pfValue;\n for (var i = 0; i + 1 < pts.length; i += 2) {\n var vector = [pts[i + 2] - pts[i], pts[i + 3] - pts[i + 1]];\n var length = Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1]);\n var normal = [vector[1] / length, -vector[0] / length];\n var triangleHead = [normal[0] * edgeWidth / 2, normal[1] * edgeWidth / 2];\n context.beginPath();\n context.moveTo(pts[i] - triangleHead[0], pts[i + 1] - triangleHead[1]);\n context.lineTo(pts[i] + triangleHead[0], pts[i + 1] + triangleHead[1]);\n context.lineTo(pts[i + 2], pts[i + 3]);\n context.closePath();\n context.fill();\n }\n};\nCRp$9.drawArrowheads = function (context, edge, opacity) {\n var rs = edge._private.rscratch;\n var isHaystack = rs.edgeType === 'haystack';\n if (!isHaystack) {\n this.drawArrowhead(context, edge, 'source', rs.arrowStartX, rs.arrowStartY, rs.srcArrowAngle, opacity);\n }\n this.drawArrowhead(context, edge, 'mid-target', rs.midX, rs.midY, rs.midtgtArrowAngle, opacity);\n this.drawArrowhead(context, edge, 'mid-source', rs.midX, rs.midY, rs.midsrcArrowAngle, opacity);\n if (!isHaystack) {\n this.drawArrowhead(context, edge, 'target', rs.arrowEndX, rs.arrowEndY, rs.tgtArrowAngle, opacity);\n }\n};\nCRp$9.drawArrowhead = function (context, edge, prefix, x, y, angle, opacity) {\n if (isNaN(x) || x == null || isNaN(y) || y == null || isNaN(angle) || angle == null) {\n return;\n }\n var self = this;\n var arrowShape = edge.pstyle(prefix + '-arrow-shape').value;\n if (arrowShape === 'none') {\n return;\n }\n var arrowClearFill = edge.pstyle(prefix + '-arrow-fill').value === 'hollow' ? 'both' : 'filled';\n var arrowFill = edge.pstyle(prefix + '-arrow-fill').value;\n var edgeWidth = edge.pstyle('width').pfValue;\n var pArrowWidth = edge.pstyle(prefix + '-arrow-width');\n var arrowWidth = pArrowWidth.value === 'match-line' ? edgeWidth : pArrowWidth.pfValue;\n if (pArrowWidth.units === '%') arrowWidth *= edgeWidth;\n var edgeOpacity = edge.pstyle('opacity').value;\n if (opacity === undefined) {\n opacity = edgeOpacity;\n }\n var gco = context.globalCompositeOperation;\n if (opacity !== 1 || arrowFill === 'hollow') {\n // then extra clear is needed\n context.globalCompositeOperation = 'destination-out';\n self.colorFillStyle(context, 255, 255, 255, 1);\n self.colorStrokeStyle(context, 255, 255, 255, 1);\n self.drawArrowShape(edge, context, arrowClearFill, edgeWidth, arrowShape, arrowWidth, x, y, angle);\n context.globalCompositeOperation = gco;\n } // otherwise, the opaque arrow clears it for free :)\n\n var color = edge.pstyle(prefix + '-arrow-color').value;\n self.colorFillStyle(context, color[0], color[1], color[2], opacity);\n self.colorStrokeStyle(context, color[0], color[1], color[2], opacity);\n self.drawArrowShape(edge, context, arrowFill, edgeWidth, arrowShape, arrowWidth, x, y, angle);\n};\nCRp$9.drawArrowShape = function (edge, context, fill, edgeWidth, shape, shapeWidth, x, y, angle) {\n var r = this;\n var usePaths = this.usePaths() && shape !== 'triangle-cross';\n var pathCacheHit = false;\n var path;\n var canvasContext = context;\n var translation = {\n x: x,\n y: y\n };\n var scale = edge.pstyle('arrow-scale').value;\n var size = this.getArrowWidth(edgeWidth, scale);\n var shapeImpl = r.arrowShapes[shape];\n if (usePaths) {\n var cache = r.arrowPathCache = r.arrowPathCache || [];\n var key = hashString(shape);\n var cachedPath = cache[key];\n if (cachedPath != null) {\n path = context = cachedPath;\n pathCacheHit = true;\n } else {\n path = context = new Path2D();\n cache[key] = path;\n }\n }\n if (!pathCacheHit) {\n if (context.beginPath) {\n context.beginPath();\n }\n if (usePaths) {\n // store in the path cache with values easily manipulated later\n shapeImpl.draw(context, 1, 0, {\n x: 0,\n y: 0\n }, 1);\n } else {\n shapeImpl.draw(context, size, angle, translation, edgeWidth);\n }\n if (context.closePath) {\n context.closePath();\n }\n }\n context = canvasContext;\n if (usePaths) {\n // set transform to arrow position/orientation\n context.translate(x, y);\n context.rotate(angle);\n context.scale(size, size);\n }\n if (fill === 'filled' || fill === 'both') {\n if (usePaths) {\n context.fill(path);\n } else {\n context.fill();\n }\n }\n if (fill === 'hollow' || fill === 'both') {\n context.lineWidth = shapeWidth / (usePaths ? size : 1);\n context.lineJoin = 'miter';\n if (usePaths) {\n context.stroke(path);\n } else {\n context.stroke();\n }\n }\n if (usePaths) {\n // reset transform by applying inverse\n context.scale(1 / size, 1 / size);\n context.rotate(-angle);\n context.translate(-x, -y);\n }\n};\n\nvar CRp$8 = {};\nCRp$8.safeDrawImage = function (context, img, ix, iy, iw, ih, x, y, w, h) {\n // detect problematic cases for old browsers with bad images (cheaper than try-catch)\n if (iw <= 0 || ih <= 0 || w <= 0 || h <= 0) {\n return;\n }\n try {\n context.drawImage(img, ix, iy, iw, ih, x, y, w, h);\n } catch (e) {\n warn(e);\n }\n};\nCRp$8.drawInscribedImage = function (context, img, node, index, nodeOpacity) {\n var r = this;\n var pos = node.position();\n var nodeX = pos.x;\n var nodeY = pos.y;\n var styleObj = node.cy().style();\n var getIndexedStyle = styleObj.getIndexedStyle.bind(styleObj);\n var fit = getIndexedStyle(node, 'background-fit', 'value', index);\n var repeat = getIndexedStyle(node, 'background-repeat', 'value', index);\n var nodeW = node.width();\n var nodeH = node.height();\n var paddingX2 = node.padding() * 2;\n var nodeTW = nodeW + (getIndexedStyle(node, 'background-width-relative-to', 'value', index) === 'inner' ? 0 : paddingX2);\n var nodeTH = nodeH + (getIndexedStyle(node, 'background-height-relative-to', 'value', index) === 'inner' ? 0 : paddingX2);\n var rs = node._private.rscratch;\n var clip = getIndexedStyle(node, 'background-clip', 'value', index);\n var shouldClip = clip === 'node';\n var imgOpacity = getIndexedStyle(node, 'background-image-opacity', 'value', index) * nodeOpacity;\n var smooth = getIndexedStyle(node, 'background-image-smoothing', 'value', index);\n var cornerRadius = node.pstyle('corner-radius').value;\n if (cornerRadius !== 'auto') cornerRadius = node.pstyle('corner-radius').pfValue;\n var imgW = img.width || img.cachedW;\n var imgH = img.height || img.cachedH;\n\n // workaround for broken browsers like ie\n if (null == imgW || null == imgH) {\n document.body.appendChild(img); // eslint-disable-line no-undef\n\n imgW = img.cachedW = img.width || img.offsetWidth;\n imgH = img.cachedH = img.height || img.offsetHeight;\n document.body.removeChild(img); // eslint-disable-line no-undef\n }\n var w = imgW;\n var h = imgH;\n if (getIndexedStyle(node, 'background-width', 'value', index) !== 'auto') {\n if (getIndexedStyle(node, 'background-width', 'units', index) === '%') {\n w = getIndexedStyle(node, 'background-width', 'pfValue', index) * nodeTW;\n } else {\n w = getIndexedStyle(node, 'background-width', 'pfValue', index);\n }\n }\n if (getIndexedStyle(node, 'background-height', 'value', index) !== 'auto') {\n if (getIndexedStyle(node, 'background-height', 'units', index) === '%') {\n h = getIndexedStyle(node, 'background-height', 'pfValue', index) * nodeTH;\n } else {\n h = getIndexedStyle(node, 'background-height', 'pfValue', index);\n }\n }\n if (w === 0 || h === 0) {\n return; // no point in drawing empty image (and chrome is broken in this case)\n }\n if (fit === 'contain') {\n var scale = Math.min(nodeTW / w, nodeTH / h);\n w *= scale;\n h *= scale;\n } else if (fit === 'cover') {\n var scale = Math.max(nodeTW / w, nodeTH / h);\n w *= scale;\n h *= scale;\n }\n var x = nodeX - nodeTW / 2; // left\n var posXUnits = getIndexedStyle(node, 'background-position-x', 'units', index);\n var posXPfVal = getIndexedStyle(node, 'background-position-x', 'pfValue', index);\n if (posXUnits === '%') {\n x += (nodeTW - w) * posXPfVal;\n } else {\n x += posXPfVal;\n }\n var offXUnits = getIndexedStyle(node, 'background-offset-x', 'units', index);\n var offXPfVal = getIndexedStyle(node, 'background-offset-x', 'pfValue', index);\n if (offXUnits === '%') {\n x += (nodeTW - w) * offXPfVal;\n } else {\n x += offXPfVal;\n }\n var y = nodeY - nodeTH / 2; // top\n var posYUnits = getIndexedStyle(node, 'background-position-y', 'units', index);\n var posYPfVal = getIndexedStyle(node, 'background-position-y', 'pfValue', index);\n if (posYUnits === '%') {\n y += (nodeTH - h) * posYPfVal;\n } else {\n y += posYPfVal;\n }\n var offYUnits = getIndexedStyle(node, 'background-offset-y', 'units', index);\n var offYPfVal = getIndexedStyle(node, 'background-offset-y', 'pfValue', index);\n if (offYUnits === '%') {\n y += (nodeTH - h) * offYPfVal;\n } else {\n y += offYPfVal;\n }\n if (rs.pathCache) {\n x -= nodeX;\n y -= nodeY;\n nodeX = 0;\n nodeY = 0;\n }\n var gAlpha = context.globalAlpha;\n context.globalAlpha = imgOpacity;\n var smoothingEnabled = r.getImgSmoothing(context);\n var isSmoothingSwitched = false;\n if (smooth === 'no' && smoothingEnabled) {\n r.setImgSmoothing(context, false);\n isSmoothingSwitched = true;\n } else if (smooth === 'yes' && !smoothingEnabled) {\n r.setImgSmoothing(context, true);\n isSmoothingSwitched = true;\n }\n if (repeat === 'no-repeat') {\n if (shouldClip) {\n context.save();\n if (rs.pathCache) {\n context.clip(rs.pathCache);\n } else {\n r.nodeShapes[r.getNodeShape(node)].draw(context, nodeX, nodeY, nodeTW, nodeTH, cornerRadius, rs);\n context.clip();\n }\n }\n r.safeDrawImage(context, img, 0, 0, imgW, imgH, x, y, w, h);\n if (shouldClip) {\n context.restore();\n }\n } else {\n var pattern = context.createPattern(img, repeat);\n context.fillStyle = pattern;\n r.nodeShapes[r.getNodeShape(node)].draw(context, nodeX, nodeY, nodeTW, nodeTH, cornerRadius, rs);\n context.translate(x, y);\n context.fill();\n context.translate(-x, -y);\n }\n context.globalAlpha = gAlpha;\n if (isSmoothingSwitched) {\n r.setImgSmoothing(context, smoothingEnabled);\n }\n};\n\nvar CRp$7 = {};\nCRp$7.eleTextBiggerThanMin = function (ele, scale) {\n if (!scale) {\n var zoom = ele.cy().zoom();\n var pxRatio = this.getPixelRatio();\n var lvl = Math.ceil(log2(zoom * pxRatio)); // the effective texture level\n\n scale = Math.pow(2, lvl);\n }\n var computedSize = ele.pstyle('font-size').pfValue * scale;\n var minSize = ele.pstyle('min-zoomed-font-size').pfValue;\n if (computedSize < minSize) {\n return false;\n }\n return true;\n};\nCRp$7.drawElementText = function (context, ele, shiftToOriginWithBb, force, prefix) {\n var useEleOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n var r = this;\n if (force == null) {\n if (useEleOpacity && !r.eleTextBiggerThanMin(ele)) {\n return;\n }\n } else if (force === false) {\n return;\n }\n if (ele.isNode()) {\n var label = ele.pstyle('label');\n if (!label || !label.value) {\n return;\n }\n var justification = r.getLabelJustification(ele);\n context.textAlign = justification;\n context.textBaseline = 'bottom';\n } else {\n var badLine = ele.element()._private.rscratch.badLine;\n var _label = ele.pstyle('label');\n var srcLabel = ele.pstyle('source-label');\n var tgtLabel = ele.pstyle('target-label');\n if (badLine || (!_label || !_label.value) && (!srcLabel || !srcLabel.value) && (!tgtLabel || !tgtLabel.value)) {\n return;\n }\n context.textAlign = 'center';\n context.textBaseline = 'bottom';\n }\n var applyRotation = !shiftToOriginWithBb;\n var bb;\n if (shiftToOriginWithBb) {\n bb = shiftToOriginWithBb;\n context.translate(-bb.x1, -bb.y1);\n }\n if (prefix == null) {\n r.drawText(context, ele, null, applyRotation, useEleOpacity);\n if (ele.isEdge()) {\n r.drawText(context, ele, 'source', applyRotation, useEleOpacity);\n r.drawText(context, ele, 'target', applyRotation, useEleOpacity);\n }\n } else {\n r.drawText(context, ele, prefix, applyRotation, useEleOpacity);\n }\n if (shiftToOriginWithBb) {\n context.translate(bb.x1, bb.y1);\n }\n};\nCRp$7.getFontCache = function (context) {\n var cache;\n this.fontCaches = this.fontCaches || [];\n for (var i = 0; i < this.fontCaches.length; i++) {\n cache = this.fontCaches[i];\n if (cache.context === context) {\n return cache;\n }\n }\n cache = {\n context: context\n };\n this.fontCaches.push(cache);\n return cache;\n};\n\n// set up canvas context with font\n// returns transformed text string\nCRp$7.setupTextStyle = function (context, ele) {\n var useEleOpacity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n // Font style\n var labelStyle = ele.pstyle('font-style').strValue;\n var labelSize = ele.pstyle('font-size').pfValue + 'px';\n var labelFamily = ele.pstyle('font-family').strValue;\n var labelWeight = ele.pstyle('font-weight').strValue;\n var opacity = useEleOpacity ? ele.effectiveOpacity() * ele.pstyle('text-opacity').value : 1;\n var outlineOpacity = ele.pstyle('text-outline-opacity').value * opacity;\n var color = ele.pstyle('color').value;\n var outlineColor = ele.pstyle('text-outline-color').value;\n context.font = labelStyle + ' ' + labelWeight + ' ' + labelSize + ' ' + labelFamily;\n context.lineJoin = 'round'; // so text outlines aren't jagged\n\n this.colorFillStyle(context, color[0], color[1], color[2], opacity);\n this.colorStrokeStyle(context, outlineColor[0], outlineColor[1], outlineColor[2], outlineOpacity);\n};\nfunction circle(ctx, x, y, width, height) {\n var diameter = Math.min(width, height);\n var radius = diameter / 2;\n var centerX = x + width / 2;\n var centerY = y + height / 2;\n ctx.beginPath();\n ctx.arc(centerX, centerY, radius, 0, Math.PI * 2);\n ctx.closePath();\n}\nfunction roundRect(ctx, x, y, width, height) {\n var radius = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 5;\n var r = Math.min(radius, width / 2, height / 2); // prevent overflow\n ctx.beginPath();\n ctx.moveTo(x + r, y);\n ctx.lineTo(x + width - r, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + r);\n ctx.lineTo(x + width, y + height - r);\n ctx.quadraticCurveTo(x + width, y + height, x + width - r, y + height);\n ctx.lineTo(x + r, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - r);\n ctx.lineTo(x, y + r);\n ctx.quadraticCurveTo(x, y, x + r, y);\n ctx.closePath();\n}\nCRp$7.getTextAngle = function (ele, prefix) {\n var theta;\n var _p = ele._private;\n var rscratch = _p.rscratch;\n var pdash = prefix ? prefix + '-' : '';\n var rotation = ele.pstyle(pdash + 'text-rotation');\n if (rotation.strValue === 'autorotate') {\n var textAngle = getPrefixedProperty(rscratch, 'labelAngle', prefix);\n theta = ele.isEdge() ? textAngle : 0;\n } else if (rotation.strValue === 'none') {\n theta = 0;\n } else {\n theta = rotation.pfValue;\n }\n return theta;\n};\nCRp$7.drawText = function (context, ele, prefix) {\n var applyRotation = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var useEleOpacity = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var _p = ele._private;\n var rscratch = _p.rscratch;\n var parentOpacity = useEleOpacity ? ele.effectiveOpacity() : 1;\n if (useEleOpacity && (parentOpacity === 0 || ele.pstyle('text-opacity').value === 0)) {\n return;\n }\n\n // use 'main' as an alias for the main label (i.e. null prefix)\n if (prefix === 'main') {\n prefix = null;\n }\n var textX = getPrefixedProperty(rscratch, 'labelX', prefix);\n var textY = getPrefixedProperty(rscratch, 'labelY', prefix);\n var orgTextX, orgTextY; // used for rotation\n var text = this.getLabelText(ele, prefix);\n if (text != null && text !== '' && !isNaN(textX) && !isNaN(textY)) {\n this.setupTextStyle(context, ele, useEleOpacity);\n var pdash = prefix ? prefix + '-' : '';\n var textW = getPrefixedProperty(rscratch, 'labelWidth', prefix);\n var textH = getPrefixedProperty(rscratch, 'labelHeight', prefix);\n var marginX = ele.pstyle(pdash + 'text-margin-x').pfValue;\n var marginY = ele.pstyle(pdash + 'text-margin-y').pfValue;\n var isEdge = ele.isEdge();\n var halign = ele.pstyle('text-halign').value;\n var valign = ele.pstyle('text-valign').value;\n if (isEdge) {\n halign = 'center';\n valign = 'center';\n }\n textX += marginX;\n textY += marginY;\n var theta;\n if (!applyRotation) {\n theta = 0;\n } else {\n theta = this.getTextAngle(ele, prefix);\n }\n if (theta !== 0) {\n orgTextX = textX;\n orgTextY = textY;\n context.translate(orgTextX, orgTextY);\n context.rotate(theta);\n textX = 0;\n textY = 0;\n }\n switch (valign) {\n case 'top':\n break;\n case 'center':\n textY += textH / 2;\n break;\n case 'bottom':\n textY += textH;\n break;\n }\n var backgroundOpacity = ele.pstyle('text-background-opacity').value;\n var borderOpacity = ele.pstyle('text-border-opacity').value;\n var textBorderWidth = ele.pstyle('text-border-width').pfValue;\n var backgroundPadding = ele.pstyle('text-background-padding').pfValue;\n var styleShape = ele.pstyle('text-background-shape').strValue;\n var rounded = styleShape === 'round-rectangle' || styleShape === 'roundrectangle';\n var circled = styleShape === 'circle';\n var roundRadius = 2;\n if (backgroundOpacity > 0 || textBorderWidth > 0 && borderOpacity > 0) {\n var textFill = context.fillStyle;\n var textStroke = context.strokeStyle;\n var textLineWidth = context.lineWidth;\n var textBackgroundColor = ele.pstyle('text-background-color').value;\n var textBorderColor = ele.pstyle('text-border-color').value;\n var textBorderStyle = ele.pstyle('text-border-style').value;\n var doFill = backgroundOpacity > 0;\n var doStroke = textBorderWidth > 0 && borderOpacity > 0;\n var bgX = textX - backgroundPadding;\n switch (halign) {\n case 'left':\n bgX -= textW;\n break;\n case 'center':\n bgX -= textW / 2;\n break;\n }\n var bgY = textY - textH - backgroundPadding;\n var bgW = textW + 2 * backgroundPadding;\n var bgH = textH + 2 * backgroundPadding;\n if (doFill) {\n context.fillStyle = \"rgba(\".concat(textBackgroundColor[0], \",\").concat(textBackgroundColor[1], \",\").concat(textBackgroundColor[2], \",\").concat(backgroundOpacity * parentOpacity, \")\");\n }\n if (doStroke) {\n context.strokeStyle = \"rgba(\".concat(textBorderColor[0], \",\").concat(textBorderColor[1], \",\").concat(textBorderColor[2], \",\").concat(borderOpacity * parentOpacity, \")\");\n context.lineWidth = textBorderWidth;\n if (context.setLineDash) {\n switch (textBorderStyle) {\n case 'dotted':\n context.setLineDash([1, 1]);\n break;\n case 'dashed':\n context.setLineDash([4, 2]);\n break;\n case 'double':\n context.lineWidth = textBorderWidth / 4;\n context.setLineDash([]);\n break;\n case 'solid':\n default:\n context.setLineDash([]);\n break;\n }\n }\n }\n if (rounded) {\n context.beginPath();\n roundRect(context, bgX, bgY, bgW, bgH, roundRadius);\n } else if (circled) {\n context.beginPath();\n circle(context, bgX, bgY, bgW, bgH);\n } else {\n context.beginPath();\n context.rect(bgX, bgY, bgW, bgH);\n }\n if (doFill) context.fill();\n if (doStroke) context.stroke();\n\n // Double border pass for 'double' style\n if (doStroke && textBorderStyle === 'double') {\n var whiteWidth = textBorderWidth / 2;\n context.beginPath();\n if (rounded) {\n roundRect(context, bgX + whiteWidth, bgY + whiteWidth, bgW - 2 * whiteWidth, bgH - 2 * whiteWidth, roundRadius);\n } else {\n context.rect(bgX + whiteWidth, bgY + whiteWidth, bgW - 2 * whiteWidth, bgH - 2 * whiteWidth);\n }\n context.stroke();\n }\n context.fillStyle = textFill;\n context.strokeStyle = textStroke;\n context.lineWidth = textLineWidth;\n if (context.setLineDash) context.setLineDash([]);\n }\n var lineWidth = 2 * ele.pstyle('text-outline-width').pfValue; // *2 b/c the stroke is drawn centred on the middle\n\n if (lineWidth > 0) {\n context.lineWidth = lineWidth;\n }\n if (ele.pstyle('text-wrap').value === 'wrap') {\n var lines = getPrefixedProperty(rscratch, 'labelWrapCachedLines', prefix);\n var lineHeight = getPrefixedProperty(rscratch, 'labelLineHeight', prefix);\n var halfTextW = textW / 2;\n var justification = this.getLabelJustification(ele);\n if (justification === 'auto') ; else if (halign === 'left') {\n // auto justification : right\n if (justification === 'left') {\n textX += -textW;\n } else if (justification === 'center') {\n textX += -halfTextW;\n } // else same as auto\n } else if (halign === 'center') {\n // auto justfication : center\n if (justification === 'left') {\n textX += -halfTextW;\n } else if (justification === 'right') {\n textX += halfTextW;\n } // else same as auto\n } else if (halign === 'right') {\n // auto justification : left\n if (justification === 'center') {\n textX += halfTextW;\n } else if (justification === 'right') {\n textX += textW;\n } // else same as auto\n }\n switch (valign) {\n case 'top':\n textY -= (lines.length - 1) * lineHeight;\n break;\n case 'center':\n case 'bottom':\n textY -= (lines.length - 1) * lineHeight;\n break;\n }\n for (var l = 0; l < lines.length; l++) {\n if (lineWidth > 0) {\n context.strokeText(lines[l], textX, textY);\n }\n context.fillText(lines[l], textX, textY);\n textY += lineHeight;\n }\n } else {\n if (lineWidth > 0) {\n context.strokeText(text, textX, textY);\n }\n context.fillText(text, textX, textY);\n }\n if (theta !== 0) {\n context.rotate(-theta);\n context.translate(-orgTextX, -orgTextY);\n }\n }\n};\n\n/* global Path2D */\n\nvar CRp$6 = {};\nCRp$6.drawNode = function (context, node, shiftToOriginWithBb) {\n var drawLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var shouldDrawOverlay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var shouldDrawOpacity = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n var r = this;\n var nodeWidth, nodeHeight;\n var _p = node._private;\n var rs = _p.rscratch;\n var pos = node.position();\n if (!number$1(pos.x) || !number$1(pos.y)) {\n return; // can't draw node with undefined position\n }\n if (shouldDrawOpacity && !node.visible()) {\n return;\n }\n var eleOpacity = shouldDrawOpacity ? node.effectiveOpacity() : 1;\n var usePaths = r.usePaths();\n var path;\n var pathCacheHit = false;\n var padding = node.padding();\n nodeWidth = node.width() + 2 * padding;\n nodeHeight = node.height() + 2 * padding;\n\n //\n // setup shift\n\n var bb;\n if (shiftToOriginWithBb) {\n bb = shiftToOriginWithBb;\n context.translate(-bb.x1, -bb.y1);\n }\n\n //\n // load bg image\n\n var bgImgProp = node.pstyle('background-image');\n var urls = bgImgProp.value;\n var urlDefined = new Array(urls.length);\n var image = new Array(urls.length);\n var numImages = 0;\n for (var i = 0; i < urls.length; i++) {\n var url = urls[i];\n var defd = urlDefined[i] = url != null && url !== 'none';\n if (defd) {\n var bgImgCrossOrigin = node.cy().style().getIndexedStyle(node, 'background-image-crossorigin', 'value', i);\n numImages++;\n\n // get image, and if not loaded then ask to redraw when later loaded\n image[i] = r.getCachedImage(url, bgImgCrossOrigin, function () {\n _p.backgroundTimestamp = Date.now();\n node.emitAndNotify('background');\n });\n }\n }\n\n //\n // setup styles\n\n var darkness = node.pstyle('background-blacken').value;\n var borderWidth = node.pstyle('border-width').pfValue;\n var bgOpacity = node.pstyle('background-opacity').value * eleOpacity;\n var borderColor = node.pstyle('border-color').value;\n var borderStyle = node.pstyle('border-style').value;\n var borderJoin = node.pstyle('border-join').value;\n var borderCap = node.pstyle('border-cap').value;\n var borderPosition = node.pstyle('border-position').value;\n var borderPattern = node.pstyle('border-dash-pattern').pfValue;\n var borderOffset = node.pstyle('border-dash-offset').pfValue;\n var borderOpacity = node.pstyle('border-opacity').value * eleOpacity;\n var outlineWidth = node.pstyle('outline-width').pfValue;\n var outlineColor = node.pstyle('outline-color').value;\n var outlineStyle = node.pstyle('outline-style').value;\n var outlineOpacity = node.pstyle('outline-opacity').value * eleOpacity;\n var outlineOffset = node.pstyle('outline-offset').value;\n var cornerRadius = node.pstyle('corner-radius').value;\n if (cornerRadius !== 'auto') cornerRadius = node.pstyle('corner-radius').pfValue;\n var setupShapeColor = function setupShapeColor() {\n var bgOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : bgOpacity;\n r.eleFillStyle(context, node, bgOpy);\n };\n var setupBorderColor = function setupBorderColor() {\n var bdrOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : borderOpacity;\n r.colorStrokeStyle(context, borderColor[0], borderColor[1], borderColor[2], bdrOpy);\n };\n var setupOutlineColor = function setupOutlineColor() {\n var otlnOpy = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : outlineOpacity;\n r.colorStrokeStyle(context, outlineColor[0], outlineColor[1], outlineColor[2], otlnOpy);\n };\n\n //\n // setup shape\n\n var getPath = function getPath(width, height, shape, points) {\n var pathCache = r.nodePathCache = r.nodePathCache || [];\n var key = hashStrings(shape === 'polygon' ? shape + ',' + points.join(',') : shape, '' + height, '' + width, '' + cornerRadius);\n var cachedPath = pathCache[key];\n var path;\n var cacheHit = false;\n if (cachedPath != null) {\n path = cachedPath;\n cacheHit = true;\n rs.pathCache = path;\n } else {\n path = new Path2D();\n pathCache[key] = rs.pathCache = path;\n }\n return {\n path: path,\n cacheHit: cacheHit\n };\n };\n var styleShape = node.pstyle('shape').strValue;\n var shapePts = node.pstyle('shape-polygon-points').pfValue;\n if (usePaths) {\n context.translate(pos.x, pos.y);\n var shapePath = getPath(nodeWidth, nodeHeight, styleShape, shapePts);\n path = shapePath.path;\n pathCacheHit = shapePath.cacheHit;\n }\n var drawShape = function drawShape() {\n if (!pathCacheHit) {\n var npos = pos;\n if (usePaths) {\n npos = {\n x: 0,\n y: 0\n };\n }\n r.nodeShapes[r.getNodeShape(node)].draw(path || context, npos.x, npos.y, nodeWidth, nodeHeight, cornerRadius, rs);\n }\n if (usePaths) {\n context.fill(path);\n } else {\n context.fill();\n }\n };\n var drawImages = function drawImages() {\n var nodeOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : eleOpacity;\n var inside = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var prevBging = _p.backgrounding;\n var totalCompleted = 0;\n for (var _i = 0; _i < image.length; _i++) {\n var bgContainment = node.cy().style().getIndexedStyle(node, 'background-image-containment', 'value', _i);\n if (inside && bgContainment === 'over' || !inside && bgContainment === 'inside') {\n totalCompleted++;\n continue;\n }\n if (urlDefined[_i] && image[_i].complete && !image[_i].error) {\n totalCompleted++;\n r.drawInscribedImage(context, image[_i], node, _i, nodeOpacity);\n }\n }\n _p.backgrounding = !(totalCompleted === numImages);\n if (prevBging !== _p.backgrounding) {\n // update style b/c :backgrounding state changed\n node.updateStyle(false);\n }\n };\n var drawPie = function drawPie() {\n var redrawShape = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var pieOpacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : eleOpacity;\n if (r.hasPie(node)) {\n r.drawPie(context, node, pieOpacity);\n\n // redraw/restore path if steps after pie need it\n if (redrawShape) {\n if (!usePaths) {\n r.nodeShapes[r.getNodeShape(node)].draw(context, pos.x, pos.y, nodeWidth, nodeHeight, cornerRadius, rs);\n }\n }\n }\n };\n var drawStripe = function drawStripe() {\n var redrawShape = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var stripeOpacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : eleOpacity;\n if (r.hasStripe(node)) {\n context.save();\n if (usePaths) {\n context.clip(rs.pathCache);\n } else {\n r.nodeShapes[r.getNodeShape(node)].draw(context, pos.x, pos.y, nodeWidth, nodeHeight, cornerRadius, rs);\n context.clip();\n }\n r.drawStripe(context, node, stripeOpacity);\n context.restore();\n\n // redraw/restore path if steps after stripes need it\n if (redrawShape) {\n if (!usePaths) {\n r.nodeShapes[r.getNodeShape(node)].draw(context, pos.x, pos.y, nodeWidth, nodeHeight, cornerRadius, rs);\n }\n }\n }\n };\n var darken = function darken() {\n var darkenOpacity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : eleOpacity;\n var opacity = (darkness > 0 ? darkness : -darkness) * darkenOpacity;\n var c = darkness > 0 ? 0 : 255;\n if (darkness !== 0) {\n r.colorFillStyle(context, c, c, c, opacity);\n if (usePaths) {\n context.fill(path);\n } else {\n context.fill();\n }\n }\n };\n var drawBorder = function drawBorder() {\n if (borderWidth > 0) {\n context.lineWidth = borderWidth;\n context.lineCap = borderCap;\n context.lineJoin = borderJoin;\n if (context.setLineDash) {\n // for very outofdate browsers\n switch (borderStyle) {\n case 'dotted':\n context.setLineDash([1, 1]);\n break;\n case 'dashed':\n context.setLineDash(borderPattern);\n context.lineDashOffset = borderOffset;\n break;\n case 'solid':\n case 'double':\n context.setLineDash([]);\n break;\n }\n }\n if (borderPosition !== 'center') {\n context.save();\n context.lineWidth *= 2;\n if (borderPosition === 'inside') {\n usePaths ? context.clip(path) : context.clip();\n } else {\n var region = new Path2D();\n region.rect(-nodeWidth / 2 - borderWidth, -nodeHeight / 2 - borderWidth, nodeWidth + 2 * borderWidth, nodeHeight + 2 * borderWidth);\n region.addPath(path);\n context.clip(region, 'evenodd');\n }\n usePaths ? context.stroke(path) : context.stroke();\n context.restore();\n } else {\n usePaths ? context.stroke(path) : context.stroke();\n }\n if (borderStyle === 'double') {\n context.lineWidth = borderWidth / 3;\n var gco = context.globalCompositeOperation;\n context.globalCompositeOperation = 'destination-out';\n if (usePaths) {\n context.stroke(path);\n } else {\n context.stroke();\n }\n context.globalCompositeOperation = gco;\n }\n\n // reset in case we changed the border style\n if (context.setLineDash) {\n // for very outofdate browsers\n context.setLineDash([]);\n }\n }\n };\n var drawOutline = function drawOutline() {\n if (outlineWidth > 0) {\n context.lineWidth = outlineWidth;\n context.lineCap = 'butt';\n if (context.setLineDash) {\n // for very outofdate browsers\n switch (outlineStyle) {\n case 'dotted':\n context.setLineDash([1, 1]);\n break;\n case 'dashed':\n context.setLineDash([4, 2]);\n break;\n case 'solid':\n case 'double':\n context.setLineDash([]);\n break;\n }\n }\n var npos = pos;\n if (usePaths) {\n npos = {\n x: 0,\n y: 0\n };\n }\n var shape = r.getNodeShape(node);\n var bWidth = borderWidth;\n if (borderPosition === 'inside') bWidth = 0;\n if (borderPosition === 'outside') bWidth *= 2;\n var scaleX = (nodeWidth + bWidth + (outlineWidth + outlineOffset)) / nodeWidth;\n var scaleY = (nodeHeight + bWidth + (outlineWidth + outlineOffset)) / nodeHeight;\n var sWidth = nodeWidth * scaleX;\n var sHeight = nodeHeight * scaleY;\n var points = r.nodeShapes[shape].points;\n var _path;\n if (usePaths) {\n var outlinePath = getPath(sWidth, sHeight, shape, points);\n _path = outlinePath.path;\n }\n\n // draw the outline path, either by using expanded points or by scaling \n // the dimensions, depending on shape\n if (shape === \"ellipse\") {\n r.drawEllipsePath(_path || context, npos.x, npos.y, sWidth, sHeight);\n } else if (['round-diamond', 'round-heptagon', 'round-hexagon', 'round-octagon', 'round-pentagon', 'round-polygon', 'round-triangle', 'round-tag'].includes(shape)) {\n var sMult = 0;\n var offsetX = 0;\n var offsetY = 0;\n if (shape === 'round-diamond') {\n sMult = (bWidth + outlineOffset + outlineWidth) * 1.4;\n } else if (shape === 'round-heptagon') {\n sMult = (bWidth + outlineOffset + outlineWidth) * 1.075;\n offsetY = -(bWidth / 2 + outlineOffset + outlineWidth) / 35;\n } else if (shape === 'round-hexagon') {\n sMult = (bWidth + outlineOffset + outlineWidth) * 1.12;\n } else if (shape === 'round-pentagon') {\n sMult = (bWidth + outlineOffset + outlineWidth) * 1.13;\n offsetY = -(bWidth / 2 + outlineOffset + outlineWidth) / 15;\n } else if (shape === 'round-tag') {\n sMult = (bWidth + outlineOffset + outlineWidth) * 1.12;\n offsetX = (bWidth / 2 + outlineWidth + outlineOffset) * .07;\n } else if (shape === 'round-triangle') {\n sMult = (bWidth + outlineOffset + outlineWidth) * (Math.PI / 2);\n offsetY = -(bWidth + outlineOffset / 2 + outlineWidth) / Math.PI;\n }\n if (sMult !== 0) {\n scaleX = (nodeWidth + sMult) / nodeWidth;\n sWidth = nodeWidth * scaleX;\n if (!['round-hexagon', 'round-tag'].includes(shape)) {\n scaleY = (nodeHeight + sMult) / nodeHeight;\n sHeight = nodeHeight * scaleY;\n }\n }\n cornerRadius = cornerRadius === 'auto' ? getRoundPolygonRadius(sWidth, sHeight) : cornerRadius;\n var halfW = sWidth / 2;\n var halfH = sHeight / 2;\n var radius = cornerRadius + (bWidth + outlineWidth + outlineOffset) / 2;\n var p = new Array(points.length / 2);\n var corners = new Array(points.length / 2);\n for (var _i2 = 0; _i2 < points.length / 2; _i2++) {\n p[_i2] = {\n x: npos.x + offsetX + halfW * points[_i2 * 2],\n y: npos.y + offsetY + halfH * points[_i2 * 2 + 1]\n };\n }\n var _i3,\n p1,\n p2,\n p3,\n len = p.length;\n p1 = p[len - 1];\n // for each point\n for (_i3 = 0; _i3 < len; _i3++) {\n p2 = p[_i3 % len];\n p3 = p[(_i3 + 1) % len];\n corners[_i3] = getRoundCorner(p1, p2, p3, radius);\n p1 = p2;\n p2 = p3;\n }\n r.drawRoundPolygonPath(_path || context, npos.x + offsetX, npos.y + offsetY, nodeWidth * scaleX, nodeHeight * scaleY, points, corners);\n } else if (['roundrectangle', 'round-rectangle'].includes(shape)) {\n cornerRadius = cornerRadius === 'auto' ? getRoundRectangleRadius(sWidth, sHeight) : cornerRadius;\n r.drawRoundRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight, cornerRadius + (bWidth + outlineWidth + outlineOffset) / 2);\n } else if (['cutrectangle', 'cut-rectangle'].includes(shape)) {\n cornerRadius = cornerRadius === 'auto' ? getCutRectangleCornerLength() : cornerRadius;\n r.drawCutRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight, null, cornerRadius + (bWidth + outlineWidth + outlineOffset) / 4);\n } else if (['bottomroundrectangle', 'bottom-round-rectangle'].includes(shape)) {\n cornerRadius = cornerRadius === 'auto' ? getRoundRectangleRadius(sWidth, sHeight) : cornerRadius;\n r.drawBottomRoundRectanglePath(_path || context, npos.x, npos.y, sWidth, sHeight, cornerRadius + (bWidth + outlineWidth + outlineOffset) / 2);\n } else if (shape === \"barrel\") {\n r.drawBarrelPath(_path || context, npos.x, npos.y, sWidth, sHeight);\n } else if (shape.startsWith(\"polygon\") || ['rhomboid', 'right-rhomboid', 'round-tag', 'tag', 'vee'].includes(shape)) {\n var pad = (bWidth + outlineWidth + outlineOffset) / nodeWidth;\n points = joinLines(expandPolygon(points, pad));\n r.drawPolygonPath(_path || context, npos.x, npos.y, nodeWidth, nodeHeight, points);\n } else {\n var _pad = (bWidth + outlineWidth + outlineOffset) / nodeWidth;\n points = joinLines(expandPolygon(points, -_pad));\n r.drawPolygonPath(_path || context, npos.x, npos.y, nodeWidth, nodeHeight, points);\n }\n if (usePaths) {\n context.stroke(_path);\n } else {\n context.stroke();\n }\n if (outlineStyle === 'double') {\n context.lineWidth = bWidth / 3;\n var gco = context.globalCompositeOperation;\n context.globalCompositeOperation = 'destination-out';\n if (usePaths) {\n context.stroke(_path);\n } else {\n context.stroke();\n }\n context.globalCompositeOperation = gco;\n }\n\n // reset in case we changed the border style\n if (context.setLineDash) {\n // for very outofdate browsers\n context.setLineDash([]);\n }\n }\n };\n var drawOverlay = function drawOverlay() {\n if (shouldDrawOverlay) {\n r.drawNodeOverlay(context, node, pos, nodeWidth, nodeHeight);\n }\n };\n var drawUnderlay = function drawUnderlay() {\n if (shouldDrawOverlay) {\n r.drawNodeUnderlay(context, node, pos, nodeWidth, nodeHeight);\n }\n };\n var drawText = function drawText() {\n r.drawElementText(context, node, null, drawLabel);\n };\n var ghost = node.pstyle('ghost').value === 'yes';\n if (ghost) {\n var gx = node.pstyle('ghost-offset-x').pfValue;\n var gy = node.pstyle('ghost-offset-y').pfValue;\n var ghostOpacity = node.pstyle('ghost-opacity').value;\n var effGhostOpacity = ghostOpacity * eleOpacity;\n context.translate(gx, gy);\n setupOutlineColor();\n drawOutline();\n setupShapeColor(ghostOpacity * bgOpacity);\n drawShape();\n drawImages(effGhostOpacity, true);\n setupBorderColor(ghostOpacity * borderOpacity);\n drawBorder();\n drawPie(darkness !== 0 || borderWidth !== 0);\n drawStripe(darkness !== 0 || borderWidth !== 0);\n drawImages(effGhostOpacity, false);\n darken(effGhostOpacity);\n context.translate(-gx, -gy);\n }\n if (usePaths) {\n context.translate(-pos.x, -pos.y);\n }\n drawUnderlay();\n if (usePaths) {\n context.translate(pos.x, pos.y);\n }\n setupOutlineColor();\n drawOutline();\n setupShapeColor();\n drawShape();\n drawImages(eleOpacity, true);\n setupBorderColor();\n drawBorder();\n drawPie(darkness !== 0 || borderWidth !== 0);\n drawStripe(darkness !== 0 || borderWidth !== 0);\n drawImages(eleOpacity, false);\n darken();\n if (usePaths) {\n context.translate(-pos.x, -pos.y);\n }\n drawText();\n drawOverlay();\n\n //\n // clean up shift\n\n if (shiftToOriginWithBb) {\n context.translate(bb.x1, bb.y1);\n }\n};\nvar drawNodeOverlayUnderlay = function drawNodeOverlayUnderlay(overlayOrUnderlay) {\n if (!['overlay', 'underlay'].includes(overlayOrUnderlay)) {\n throw new Error('Invalid state');\n }\n return function (context, node, pos, nodeWidth, nodeHeight) {\n var r = this;\n if (!node.visible()) {\n return;\n }\n var padding = node.pstyle(\"\".concat(overlayOrUnderlay, \"-padding\")).pfValue;\n var opacity = node.pstyle(\"\".concat(overlayOrUnderlay, \"-opacity\")).value;\n var color = node.pstyle(\"\".concat(overlayOrUnderlay, \"-color\")).value;\n var shape = node.pstyle(\"\".concat(overlayOrUnderlay, \"-shape\")).value;\n var radius = node.pstyle(\"\".concat(overlayOrUnderlay, \"-corner-radius\")).value;\n if (opacity > 0) {\n pos = pos || node.position();\n if (nodeWidth == null || nodeHeight == null) {\n var _padding = node.padding();\n nodeWidth = node.width() + 2 * _padding;\n nodeHeight = node.height() + 2 * _padding;\n }\n r.colorFillStyle(context, color[0], color[1], color[2], opacity);\n r.nodeShapes[shape].draw(context, pos.x, pos.y, nodeWidth + padding * 2, nodeHeight + padding * 2, radius);\n context.fill();\n }\n };\n};\nCRp$6.drawNodeOverlay = drawNodeOverlayUnderlay('overlay');\nCRp$6.drawNodeUnderlay = drawNodeOverlayUnderlay('underlay');\n\n// does the node have at least one pie piece?\nCRp$6.hasPie = function (node) {\n node = node[0]; // ensure ele ref\n\n return node._private.hasPie;\n};\nCRp$6.hasStripe = function (node) {\n node = node[0]; // ensure ele ref\n\n return node._private.hasStripe;\n};\nCRp$6.drawPie = function (context, node, nodeOpacity, pos) {\n node = node[0]; // ensure ele ref\n pos = pos || node.position();\n var cyStyle = node.cy().style();\n var pieSize = node.pstyle('pie-size');\n var hole = node.pstyle('pie-hole');\n var overallStartAngle = node.pstyle('pie-start-angle').pfValue;\n var x = pos.x;\n var y = pos.y;\n var nodeW = node.width();\n var nodeH = node.height();\n var radius = Math.min(nodeW, nodeH) / 2; // must fit in node\n var holeRadius;\n var lastPercent = 0; // what % to continue drawing pie slices from on [0, 1]\n var usePaths = this.usePaths();\n if (usePaths) {\n x = 0;\n y = 0;\n }\n if (pieSize.units === '%') {\n radius = radius * pieSize.pfValue;\n } else if (pieSize.pfValue !== undefined) {\n radius = pieSize.pfValue / 2; // diameter in pixels => radius\n }\n if (hole.units === '%') {\n holeRadius = radius * hole.pfValue;\n } else if (hole.pfValue !== undefined) {\n holeRadius = hole.pfValue / 2; // diameter in pixels => radius\n }\n if (holeRadius >= radius) {\n return; // the pie would be invisible anyway\n }\n for (var i = 1; i <= cyStyle.pieBackgroundN; i++) {\n // 1..N\n var size = node.pstyle('pie-' + i + '-background-size').value;\n var color = node.pstyle('pie-' + i + '-background-color').value;\n var opacity = node.pstyle('pie-' + i + '-background-opacity').value * nodeOpacity;\n var percent = size / 100; // map integer range [0, 100] to [0, 1]\n\n // percent can't push beyond 1\n if (percent + lastPercent > 1) {\n percent = 1 - lastPercent;\n }\n var angleStart = 1.5 * Math.PI + 2 * Math.PI * lastPercent; // start at 12 o'clock and go clockwise\n angleStart += overallStartAngle; // shift by the overall pie start angle\n var angleDelta = 2 * Math.PI * percent;\n var angleEnd = angleStart + angleDelta;\n\n // ignore if\n // - zero size\n // - we're already beyond the full circle\n // - adding the current slice would go beyond the full circle\n if (size === 0 || lastPercent >= 1 || lastPercent + percent > 1) {\n continue;\n }\n if (holeRadius === 0) {\n // make a pie slice\n context.beginPath();\n context.moveTo(x, y);\n context.arc(x, y, radius, angleStart, angleEnd);\n context.closePath();\n } else {\n // make a pie slice that's like the above but with a hole in the middle\n context.beginPath();\n context.arc(x, y, radius, angleStart, angleEnd);\n context.arc(x, y, holeRadius, angleEnd, angleStart, true); // true for anticlockwise\n context.closePath();\n }\n this.colorFillStyle(context, color[0], color[1], color[2], opacity);\n context.fill();\n lastPercent += percent;\n }\n};\nCRp$6.drawStripe = function (context, node, nodeOpacity, pos) {\n node = node[0]; // ensure ele ref\n pos = pos || node.position();\n var cyStyle = node.cy().style();\n var x = pos.x;\n var y = pos.y;\n var nodeW = node.width();\n var nodeH = node.height();\n var lastPercent = 0; // what % to continue drawing pie slices from on [0, 1]\n var usePaths = this.usePaths();\n context.save();\n var direction = node.pstyle('stripe-direction').value;\n var stripeSize = node.pstyle('stripe-size');\n switch (direction) {\n case 'vertical':\n break;\n // default\n case 'righward':\n context.rotate(-Math.PI / 2);\n break;\n }\n var stripeW = nodeW;\n var stripeH = nodeH;\n if (stripeSize.units === '%') {\n stripeW = stripeW * stripeSize.pfValue;\n stripeH = stripeH * stripeSize.pfValue;\n } else if (stripeSize.pfValue !== undefined) {\n stripeW = stripeSize.pfValue;\n stripeH = stripeSize.pfValue;\n }\n if (usePaths) {\n x = 0;\n y = 0;\n }\n\n // shift up from the centre of the node to the top-left corner\n y -= stripeW / 2;\n x -= stripeH / 2;\n for (var i = 1; i <= cyStyle.stripeBackgroundN; i++) {\n // 1..N\n var size = node.pstyle('stripe-' + i + '-background-size').value;\n var color = node.pstyle('stripe-' + i + '-background-color').value;\n var opacity = node.pstyle('stripe-' + i + '-background-opacity').value * nodeOpacity;\n var percent = size / 100; // map integer range [0, 100] to [0, 1]\n\n // percent can't push beyond 1\n if (percent + lastPercent > 1) {\n percent = 1 - lastPercent;\n }\n\n // ignore if\n // - zero size\n // - we're already beyond the full chart\n // - adding the current slice would go beyond the full chart\n if (size === 0 || lastPercent >= 1 || lastPercent + percent > 1) {\n continue;\n }\n\n // draw rect for the current stripe\n context.beginPath();\n context.rect(x, y + stripeH * lastPercent, stripeW, stripeH * percent);\n context.closePath();\n this.colorFillStyle(context, color[0], color[1], color[2], opacity);\n context.fill();\n lastPercent += percent;\n }\n context.restore();\n};\n\nvar CRp$5 = {};\nvar motionBlurDelay = 100;\n\n// var isFirefox = typeof InstallTrigger !== 'undefined';\n\nCRp$5.getPixelRatio = function () {\n var context = this.data.contexts[0];\n if (this.forcedPixelRatio != null) {\n return this.forcedPixelRatio;\n }\n var containerWindow = this.cy.window();\n var backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1;\n return (containerWindow.devicePixelRatio || 1) / backingStore; // eslint-disable-line no-undef\n};\nCRp$5.paintCache = function (context) {\n var caches = this.paintCaches = this.paintCaches || [];\n var needToCreateCache = true;\n var cache;\n for (var i = 0; i < caches.length; i++) {\n cache = caches[i];\n if (cache.context === context) {\n needToCreateCache = false;\n break;\n }\n }\n if (needToCreateCache) {\n cache = {\n context: context\n };\n caches.push(cache);\n }\n return cache;\n};\nCRp$5.createGradientStyleFor = function (context, shapeStyleName, ele, fill, opacity) {\n var gradientStyle;\n var usePaths = this.usePaths();\n var colors = ele.pstyle(shapeStyleName + '-gradient-stop-colors').value,\n positions = ele.pstyle(shapeStyleName + '-gradient-stop-positions').pfValue;\n if (fill === 'radial-gradient') {\n if (ele.isEdge()) {\n var start = ele.sourceEndpoint(),\n end = ele.targetEndpoint(),\n mid = ele.midpoint();\n var d1 = dist(start, mid);\n var d2 = dist(end, mid);\n gradientStyle = context.createRadialGradient(mid.x, mid.y, 0, mid.x, mid.y, Math.max(d1, d2));\n } else {\n var pos = usePaths ? {\n x: 0,\n y: 0\n } : ele.position(),\n width = ele.paddedWidth(),\n height = ele.paddedHeight();\n gradientStyle = context.createRadialGradient(pos.x, pos.y, 0, pos.x, pos.y, Math.max(width, height));\n }\n } else {\n if (ele.isEdge()) {\n var _start = ele.sourceEndpoint(),\n _end = ele.targetEndpoint();\n gradientStyle = context.createLinearGradient(_start.x, _start.y, _end.x, _end.y);\n } else {\n var _pos = usePaths ? {\n x: 0,\n y: 0\n } : ele.position(),\n _width = ele.paddedWidth(),\n _height = ele.paddedHeight(),\n halfWidth = _width / 2,\n halfHeight = _height / 2;\n var direction = ele.pstyle('background-gradient-direction').value;\n switch (direction) {\n case 'to-bottom':\n gradientStyle = context.createLinearGradient(_pos.x, _pos.y - halfHeight, _pos.x, _pos.y + halfHeight);\n break;\n case 'to-top':\n gradientStyle = context.createLinearGradient(_pos.x, _pos.y + halfHeight, _pos.x, _pos.y - halfHeight);\n break;\n case 'to-left':\n gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y, _pos.x - halfWidth, _pos.y);\n break;\n case 'to-right':\n gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y, _pos.x + halfWidth, _pos.y);\n break;\n case 'to-bottom-right':\n case 'to-right-bottom':\n gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y - halfHeight, _pos.x + halfWidth, _pos.y + halfHeight);\n break;\n case 'to-top-right':\n case 'to-right-top':\n gradientStyle = context.createLinearGradient(_pos.x - halfWidth, _pos.y + halfHeight, _pos.x + halfWidth, _pos.y - halfHeight);\n break;\n case 'to-bottom-left':\n case 'to-left-bottom':\n gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y - halfHeight, _pos.x - halfWidth, _pos.y + halfHeight);\n break;\n case 'to-top-left':\n case 'to-left-top':\n gradientStyle = context.createLinearGradient(_pos.x + halfWidth, _pos.y + halfHeight, _pos.x - halfWidth, _pos.y - halfHeight);\n break;\n }\n }\n }\n if (!gradientStyle) return null; // invalid gradient style\n\n var hasPositions = positions.length === colors.length;\n var length = colors.length;\n for (var i = 0; i < length; i++) {\n gradientStyle.addColorStop(hasPositions ? positions[i] : i / (length - 1), 'rgba(' + colors[i][0] + ',' + colors[i][1] + ',' + colors[i][2] + ',' + opacity + ')');\n }\n return gradientStyle;\n};\nCRp$5.gradientFillStyle = function (context, ele, fill, opacity) {\n var gradientStyle = this.createGradientStyleFor(context, 'background', ele, fill, opacity);\n if (!gradientStyle) return null; // error\n context.fillStyle = gradientStyle;\n};\nCRp$5.colorFillStyle = function (context, r, g, b, a) {\n context.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n // turn off for now, seems context does its own caching\n\n // var cache = this.paintCache(context);\n\n // var fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n\n // if( cache.fillStyle !== fillStyle ){\n // context.fillStyle = cache.fillStyle = fillStyle;\n // }\n};\nCRp$5.eleFillStyle = function (context, ele, opacity) {\n var backgroundFill = ele.pstyle('background-fill').value;\n if (backgroundFill === 'linear-gradient' || backgroundFill === 'radial-gradient') {\n this.gradientFillStyle(context, ele, backgroundFill, opacity);\n } else {\n var backgroundColor = ele.pstyle('background-color').value;\n this.colorFillStyle(context, backgroundColor[0], backgroundColor[1], backgroundColor[2], opacity);\n }\n};\nCRp$5.gradientStrokeStyle = function (context, ele, fill, opacity) {\n var gradientStyle = this.createGradientStyleFor(context, 'line', ele, fill, opacity);\n if (!gradientStyle) return null; // error\n context.strokeStyle = gradientStyle;\n};\nCRp$5.colorStrokeStyle = function (context, r, g, b, a) {\n context.strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n // turn off for now, seems context does its own caching\n\n // var cache = this.paintCache(context);\n\n // var strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n\n // if( cache.strokeStyle !== strokeStyle ){\n // context.strokeStyle = cache.strokeStyle = strokeStyle;\n // }\n};\nCRp$5.eleStrokeStyle = function (context, ele, opacity) {\n var lineFill = ele.pstyle('line-fill').value;\n if (lineFill === 'linear-gradient' || lineFill === 'radial-gradient') {\n this.gradientStrokeStyle(context, ele, lineFill, opacity);\n } else {\n var lineColor = ele.pstyle('line-color').value;\n this.colorStrokeStyle(context, lineColor[0], lineColor[1], lineColor[2], opacity);\n }\n};\n\n// Resize canvas\nCRp$5.matchCanvasSize = function (container) {\n var r = this;\n var data = r.data;\n var bb = r.findContainerClientCoords();\n var width = bb[2];\n var height = bb[3];\n var pixelRatio = r.getPixelRatio();\n var mbPxRatio = r.motionBlurPxRatio;\n if (container === r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_NODE] || container === r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_DRAG]) {\n pixelRatio = mbPxRatio;\n }\n var canvasWidth = width * pixelRatio;\n var canvasHeight = height * pixelRatio;\n var canvas;\n if (canvasWidth === r.canvasWidth && canvasHeight === r.canvasHeight) {\n return; // save cycles if same\n }\n r.fontCaches = null; // resizing resets the style\n\n var canvasContainer = data.canvasContainer;\n canvasContainer.style.width = width + 'px';\n canvasContainer.style.height = height + 'px';\n for (var i = 0; i < r.CANVAS_LAYERS; i++) {\n canvas = data.canvases[i];\n canvas.width = canvasWidth;\n canvas.height = canvasHeight;\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n for (var i = 0; i < r.BUFFER_COUNT; i++) {\n canvas = data.bufferCanvases[i];\n canvas.width = canvasWidth;\n canvas.height = canvasHeight;\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n r.textureMult = 1;\n if (pixelRatio <= 1) {\n canvas = data.bufferCanvases[r.TEXTURE_BUFFER];\n r.textureMult = 2;\n canvas.width = canvasWidth * r.textureMult;\n canvas.height = canvasHeight * r.textureMult;\n }\n r.canvasWidth = canvasWidth;\n r.canvasHeight = canvasHeight;\n r.pixelRatio = pixelRatio;\n};\nCRp$5.renderTo = function (cxt, zoom, pan, pxRatio) {\n this.render({\n forcedContext: cxt,\n forcedZoom: zoom,\n forcedPan: pan,\n drawAllLayers: true,\n forcedPxRatio: pxRatio\n });\n};\nCRp$5.clearCanvas = function () {\n var r = this;\n var data = r.data;\n function clear(context) {\n context.clearRect(0, 0, r.canvasWidth, r.canvasHeight);\n }\n clear(data.contexts[r.NODE]);\n clear(data.contexts[r.DRAG]);\n};\nCRp$5.render = function (options) {\n var r = this;\n options = options || staticEmptyObject();\n var cy = r.cy;\n var forcedContext = options.forcedContext;\n var drawAllLayers = options.drawAllLayers;\n var drawOnlyNodeLayer = options.drawOnlyNodeLayer;\n var forcedZoom = options.forcedZoom;\n var forcedPan = options.forcedPan;\n var pixelRatio = options.forcedPxRatio === undefined ? this.getPixelRatio() : options.forcedPxRatio;\n var data = r.data;\n var needDraw = data.canvasNeedsRedraw;\n var textureDraw = r.textureOnViewport && !forcedContext && (r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming);\n var motionBlur = options.motionBlur !== undefined ? options.motionBlur : r.motionBlur;\n var mbPxRatio = r.motionBlurPxRatio;\n var hasCompoundNodes = cy.hasCompoundNodes();\n var inNodeDragGesture = r.hoverData.draggingEles;\n var inBoxSelection = r.hoverData.selecting || r.touchData.selecting ? true : false;\n motionBlur = motionBlur && !forcedContext && r.motionBlurEnabled && !inBoxSelection;\n var motionBlurFadeEffect = motionBlur;\n if (!forcedContext) {\n if (r.prevPxRatio !== pixelRatio) {\n r.invalidateContainerClientCoordsCache();\n r.matchCanvasSize(r.container);\n r.redrawHint('eles', true);\n r.redrawHint('drag', true);\n }\n r.prevPxRatio = pixelRatio;\n }\n if (!forcedContext && r.motionBlurTimeout) {\n clearTimeout(r.motionBlurTimeout);\n }\n if (motionBlur) {\n if (r.mbFrames == null) {\n r.mbFrames = 0;\n }\n r.mbFrames++;\n if (r.mbFrames < 3) {\n // need several frames before even high quality motionblur\n motionBlurFadeEffect = false;\n }\n\n // go to lower quality blurry frames when several m/b frames have been rendered (avoids flashing)\n if (r.mbFrames > r.minMbLowQualFrames) {\n //r.fullQualityMb = false;\n r.motionBlurPxRatio = r.mbPxRBlurry;\n }\n }\n if (r.clearingMotionBlur) {\n r.motionBlurPxRatio = 1;\n }\n\n // b/c drawToContext() may be async w.r.t. redraw(), keep track of last texture frame\n // because a rogue async texture frame would clear needDraw\n if (r.textureDrawLastFrame && !textureDraw) {\n needDraw[r.NODE] = true;\n needDraw[r.SELECT_BOX] = true;\n }\n var style = cy.style();\n var zoom = cy.zoom();\n var effectiveZoom = forcedZoom !== undefined ? forcedZoom : zoom;\n var pan = cy.pan();\n var effectivePan = {\n x: pan.x,\n y: pan.y\n };\n var vp = {\n zoom: zoom,\n pan: {\n x: pan.x,\n y: pan.y\n }\n };\n var prevVp = r.prevViewport;\n var viewportIsDiff = prevVp === undefined || vp.zoom !== prevVp.zoom || vp.pan.x !== prevVp.pan.x || vp.pan.y !== prevVp.pan.y;\n\n // we want the low quality motionblur only when the viewport is being manipulated etc (where it's not noticed)\n if (!viewportIsDiff && !(inNodeDragGesture && !hasCompoundNodes)) {\n r.motionBlurPxRatio = 1;\n }\n if (forcedPan) {\n effectivePan = forcedPan;\n }\n\n // apply pixel ratio\n\n effectiveZoom *= pixelRatio;\n effectivePan.x *= pixelRatio;\n effectivePan.y *= pixelRatio;\n var eles = r.getCachedZSortedEles();\n function mbclear(context, x, y, w, h) {\n var gco = context.globalCompositeOperation;\n context.globalCompositeOperation = 'destination-out';\n r.colorFillStyle(context, 255, 255, 255, r.motionBlurTransparency);\n context.fillRect(x, y, w, h);\n context.globalCompositeOperation = gco;\n }\n function setContextTransform(context, clear) {\n var ePan, eZoom, w, h;\n if (!r.clearingMotionBlur && (context === data.bufferContexts[r.MOTIONBLUR_BUFFER_NODE] || context === data.bufferContexts[r.MOTIONBLUR_BUFFER_DRAG])) {\n ePan = {\n x: pan.x * mbPxRatio,\n y: pan.y * mbPxRatio\n };\n eZoom = zoom * mbPxRatio;\n w = r.canvasWidth * mbPxRatio;\n h = r.canvasHeight * mbPxRatio;\n } else {\n ePan = effectivePan;\n eZoom = effectiveZoom;\n w = r.canvasWidth;\n h = r.canvasHeight;\n }\n context.setTransform(1, 0, 0, 1, 0, 0);\n if (clear === 'motionBlur') {\n mbclear(context, 0, 0, w, h);\n } else if (!forcedContext && (clear === undefined || clear)) {\n context.clearRect(0, 0, w, h);\n }\n if (!drawAllLayers) {\n context.translate(ePan.x, ePan.y);\n context.scale(eZoom, eZoom);\n }\n if (forcedPan) {\n context.translate(forcedPan.x, forcedPan.y);\n }\n if (forcedZoom) {\n context.scale(forcedZoom, forcedZoom);\n }\n }\n if (!textureDraw) {\n r.textureDrawLastFrame = false;\n }\n if (textureDraw) {\n r.textureDrawLastFrame = true;\n if (!r.textureCache) {\n r.textureCache = {};\n r.textureCache.bb = cy.mutableElements().boundingBox();\n r.textureCache.texture = r.data.bufferCanvases[r.TEXTURE_BUFFER];\n var cxt = r.data.bufferContexts[r.TEXTURE_BUFFER];\n cxt.setTransform(1, 0, 0, 1, 0, 0);\n cxt.clearRect(0, 0, r.canvasWidth * r.textureMult, r.canvasHeight * r.textureMult);\n r.render({\n forcedContext: cxt,\n drawOnlyNodeLayer: true,\n forcedPxRatio: pixelRatio * r.textureMult\n });\n var vp = r.textureCache.viewport = {\n zoom: cy.zoom(),\n pan: cy.pan(),\n width: r.canvasWidth,\n height: r.canvasHeight\n };\n vp.mpan = {\n x: (0 - vp.pan.x) / vp.zoom,\n y: (0 - vp.pan.y) / vp.zoom\n };\n }\n needDraw[r.DRAG] = false;\n needDraw[r.NODE] = false;\n var context = data.contexts[r.NODE];\n var texture = r.textureCache.texture;\n var vp = r.textureCache.viewport;\n context.setTransform(1, 0, 0, 1, 0, 0);\n if (motionBlur) {\n mbclear(context, 0, 0, vp.width, vp.height);\n } else {\n context.clearRect(0, 0, vp.width, vp.height);\n }\n var outsideBgColor = style.core('outside-texture-bg-color').value;\n var outsideBgOpacity = style.core('outside-texture-bg-opacity').value;\n r.colorFillStyle(context, outsideBgColor[0], outsideBgColor[1], outsideBgColor[2], outsideBgOpacity);\n context.fillRect(0, 0, vp.width, vp.height);\n var zoom = cy.zoom();\n setContextTransform(context, false);\n context.clearRect(vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio);\n context.drawImage(texture, vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio);\n } else if (r.textureOnViewport && !forcedContext) {\n // clear the cache since we don't need it\n r.textureCache = null;\n }\n var extent = cy.extent();\n var vpManip = r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming || r.hoverData.draggingEles || r.cy.animated();\n var hideEdges = r.hideEdgesOnViewport && vpManip;\n var needMbClear = [];\n needMbClear[r.NODE] = !needDraw[r.NODE] && motionBlur && !r.clearedForMotionBlur[r.NODE] || r.clearingMotionBlur;\n if (needMbClear[r.NODE]) {\n r.clearedForMotionBlur[r.NODE] = true;\n }\n needMbClear[r.DRAG] = !needDraw[r.DRAG] && motionBlur && !r.clearedForMotionBlur[r.DRAG] || r.clearingMotionBlur;\n if (needMbClear[r.DRAG]) {\n r.clearedForMotionBlur[r.DRAG] = true;\n }\n if (needDraw[r.NODE] || drawAllLayers || drawOnlyNodeLayer || needMbClear[r.NODE]) {\n var useBuffer = motionBlur && !needMbClear[r.NODE] && mbPxRatio !== 1;\n var context = forcedContext || (useBuffer ? r.data.bufferContexts[r.MOTIONBLUR_BUFFER_NODE] : data.contexts[r.NODE]);\n var clear = motionBlur && !useBuffer ? 'motionBlur' : undefined;\n setContextTransform(context, clear);\n if (hideEdges) {\n r.drawCachedNodes(context, eles.nondrag, pixelRatio, extent);\n } else {\n r.drawLayeredElements(context, eles.nondrag, pixelRatio, extent);\n }\n if (r.debug) {\n r.drawDebugPoints(context, eles.nondrag);\n }\n if (!drawAllLayers && !motionBlur) {\n needDraw[r.NODE] = false;\n }\n }\n if (!drawOnlyNodeLayer && (needDraw[r.DRAG] || drawAllLayers || needMbClear[r.DRAG])) {\n var useBuffer = motionBlur && !needMbClear[r.DRAG] && mbPxRatio !== 1;\n var context = forcedContext || (useBuffer ? r.data.bufferContexts[r.MOTIONBLUR_BUFFER_DRAG] : data.contexts[r.DRAG]);\n setContextTransform(context, motionBlur && !useBuffer ? 'motionBlur' : undefined);\n if (hideEdges) {\n r.drawCachedNodes(context, eles.drag, pixelRatio, extent);\n } else {\n r.drawCachedElements(context, eles.drag, pixelRatio, extent);\n }\n if (r.debug) {\n r.drawDebugPoints(context, eles.drag);\n }\n if (!drawAllLayers && !motionBlur) {\n needDraw[r.DRAG] = false;\n }\n }\n this.drawSelectionRectangle(options, setContextTransform);\n\n // motionblur: blit rendered blurry frames\n if (motionBlur && mbPxRatio !== 1) {\n var cxtNode = data.contexts[r.NODE];\n var txtNode = r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_NODE];\n var cxtDrag = data.contexts[r.DRAG];\n var txtDrag = r.data.bufferCanvases[r.MOTIONBLUR_BUFFER_DRAG];\n var drawMotionBlur = function drawMotionBlur(cxt, txt, needClear) {\n cxt.setTransform(1, 0, 0, 1, 0, 0);\n if (needClear || !motionBlurFadeEffect) {\n cxt.clearRect(0, 0, r.canvasWidth, r.canvasHeight);\n } else {\n mbclear(cxt, 0, 0, r.canvasWidth, r.canvasHeight);\n }\n var pxr = mbPxRatio;\n cxt.drawImage(txt,\n // img\n 0, 0,\n // sx, sy\n r.canvasWidth * pxr, r.canvasHeight * pxr,\n // sw, sh\n 0, 0,\n // x, y\n r.canvasWidth, r.canvasHeight // w, h\n );\n };\n if (needDraw[r.NODE] || needMbClear[r.NODE]) {\n drawMotionBlur(cxtNode, txtNode, needMbClear[r.NODE]);\n needDraw[r.NODE] = false;\n }\n if (needDraw[r.DRAG] || needMbClear[r.DRAG]) {\n drawMotionBlur(cxtDrag, txtDrag, needMbClear[r.DRAG]);\n needDraw[r.DRAG] = false;\n }\n }\n r.prevViewport = vp;\n if (r.clearingMotionBlur) {\n r.clearingMotionBlur = false;\n r.motionBlurCleared = true;\n r.motionBlur = true;\n }\n if (motionBlur) {\n r.motionBlurTimeout = setTimeout(function () {\n r.motionBlurTimeout = null;\n r.clearedForMotionBlur[r.NODE] = false;\n r.clearedForMotionBlur[r.DRAG] = false;\n r.motionBlur = false;\n r.clearingMotionBlur = !textureDraw;\n r.mbFrames = 0;\n needDraw[r.NODE] = true;\n needDraw[r.DRAG] = true;\n r.redraw();\n }, motionBlurDelay);\n }\n if (!forcedContext) {\n cy.emit('render');\n }\n};\nvar fpsHeight;\nCRp$5.drawSelectionRectangle = function (options, setContextTransform) {\n var r = this;\n var cy = r.cy;\n var data = r.data;\n var style = cy.style();\n var drawOnlyNodeLayer = options.drawOnlyNodeLayer;\n var drawAllLayers = options.drawAllLayers;\n var needDraw = data.canvasNeedsRedraw;\n var forcedContext = options.forcedContext;\n if (r.showFps || !drawOnlyNodeLayer && needDraw[r.SELECT_BOX] && !drawAllLayers) {\n var context = forcedContext || data.contexts[r.SELECT_BOX];\n setContextTransform(context);\n if (r.selection[4] == 1 && (r.hoverData.selecting || r.touchData.selecting)) {\n var zoom = r.cy.zoom();\n var borderWidth = style.core('selection-box-border-width').value / zoom;\n context.lineWidth = borderWidth;\n context.fillStyle = 'rgba(' + style.core('selection-box-color').value[0] + ',' + style.core('selection-box-color').value[1] + ',' + style.core('selection-box-color').value[2] + ',' + style.core('selection-box-opacity').value + ')';\n context.fillRect(r.selection[0], r.selection[1], r.selection[2] - r.selection[0], r.selection[3] - r.selection[1]);\n if (borderWidth > 0) {\n context.strokeStyle = 'rgba(' + style.core('selection-box-border-color').value[0] + ',' + style.core('selection-box-border-color').value[1] + ',' + style.core('selection-box-border-color').value[2] + ',' + style.core('selection-box-opacity').value + ')';\n context.strokeRect(r.selection[0], r.selection[1], r.selection[2] - r.selection[0], r.selection[3] - r.selection[1]);\n }\n }\n if (data.bgActivePosistion && !r.hoverData.selecting) {\n var zoom = r.cy.zoom();\n var pos = data.bgActivePosistion;\n context.fillStyle = 'rgba(' + style.core('active-bg-color').value[0] + ',' + style.core('active-bg-color').value[1] + ',' + style.core('active-bg-color').value[2] + ',' + style.core('active-bg-opacity').value + ')';\n context.beginPath();\n context.arc(pos.x, pos.y, style.core('active-bg-size').pfValue / zoom, 0, 2 * Math.PI);\n context.fill();\n }\n var timeToRender = r.lastRedrawTime;\n if (r.showFps && timeToRender) {\n timeToRender = Math.round(timeToRender);\n var fps = Math.round(1000 / timeToRender);\n var text = '1 frame = ' + timeToRender + ' ms = ' + fps + ' fps';\n context.setTransform(1, 0, 0, 1, 0, 0);\n context.fillStyle = 'rgba(255, 0, 0, 0.75)';\n context.strokeStyle = 'rgba(255, 0, 0, 0.75)';\n // context.lineWidth = 1;\n context.font = '30px Arial';\n if (!fpsHeight) {\n var dims = context.measureText(text);\n fpsHeight = dims.actualBoundingBoxAscent;\n }\n context.fillText(text, 0, fpsHeight);\n var maxFps = 60;\n context.strokeRect(0, fpsHeight + 10, 250, 20);\n context.fillRect(0, fpsHeight + 10, 250 * Math.min(fps / maxFps, 1), 20);\n }\n if (!drawAllLayers) {\n needDraw[r.SELECT_BOX] = false;\n }\n }\n};\n\n/**\n * Notes:\n * - All colors have premultiplied alpha. Very important for textues and \n * blending to work correctly.\n */\n\nfunction compileShader(gl, type, source) {\n var shader = gl.createShader(type);\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n throw new Error(gl.getShaderInfoLog(shader));\n }\n // console.log(gl.getShaderInfoLog(shader));\n return shader;\n}\nfunction createProgram(gl, vertexSource, fragementSource) {\n var vertexShader = compileShader(gl, gl.VERTEX_SHADER, vertexSource);\n var fragmentShader = compileShader(gl, gl.FRAGMENT_SHADER, fragementSource);\n var program = gl.createProgram();\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n throw new Error('Could not initialize shaders');\n }\n return program;\n}\n\n/**\n * Creates an offscren canvas with a 2D context, for the\n * canvas renderer to use for drawing textures.\n */\nfunction createTextureCanvas(r, width, height) {\n if (height === undefined) {\n height = width;\n }\n var canvas = r.makeOffscreenCanvas(width, height);\n var ctx = canvas.context = canvas.getContext('2d');\n canvas.clear = function () {\n return ctx.clearRect(0, 0, canvas.width, canvas.height);\n };\n canvas.clear();\n return canvas;\n}\n\n/**\n * Returns the current pan & zoom values, scaled by the pixel ratio.\n */\nfunction getEffectivePanZoom(r) {\n var pixelRatio = r.pixelRatio;\n var zoom = r.cy.zoom();\n var pan = r.cy.pan();\n return {\n zoom: zoom * pixelRatio,\n pan: {\n x: pan.x * pixelRatio,\n y: pan.y * pixelRatio\n }\n };\n}\n\n/**\n * Returns the zoom value, scaled by the pixel ratio.\n */\nfunction getEffectiveZoom(r) {\n var pixelRatio = r.pixelRatio;\n var zoom = r.cy.zoom();\n return zoom * pixelRatio;\n}\nfunction modelToRenderedPosition(r, pan, zoom, x, y) {\n var rx = x * zoom + pan.x;\n var ry = y * zoom + pan.y;\n ry = Math.round(r.canvasHeight - ry); // adjust for webgl\n return [rx, ry];\n}\nfunction isSimpleShape(node) {\n // the actual shape is checked in ElementDrawingWebGL._getVertTypeForShape()\n // no need to check it twice, this just checks other visual properties\n if (node.pstyle('background-fill').value !== 'solid') return false;\n if (node.pstyle('background-image').strValue !== 'none') return false;\n if (node.pstyle('border-width').value === 0) return true;\n if (node.pstyle('border-opacity').value === 0) return true;\n // we have a border but it must be simple\n if (node.pstyle('border-style').value !== 'solid') return false;\n // TODO ignoring 'border-cap', 'border-join' and 'border-position' for now\n return true;\n}\nfunction arrayEqual(a1, a2) {\n if (a1.length !== a2.length) {\n return false;\n }\n for (var i = 0; i < a1.length; i++) {\n if (a1[i] !== a2[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Takes color & opacity style values and converts them to WebGL format. \n * Alpha is premultiplied.\n */\nfunction toWebGLColor(color, opacity, outArray) {\n var r = color[0] / 255;\n var g = color[1] / 255;\n var b = color[2] / 255;\n var a = opacity;\n var arr = outArray || new Array(4);\n arr[0] = r * a;\n arr[1] = g * a;\n arr[2] = b * a;\n arr[3] = a;\n return arr;\n}\nfunction indexToVec4(index, outArray) {\n var arr = outArray || new Array(4);\n arr[0] = (index >> 0 & 0xFF) / 0xFF;\n arr[1] = (index >> 8 & 0xFF) / 0xFF;\n arr[2] = (index >> 16 & 0xFF) / 0xFF;\n arr[3] = (index >> 24 & 0xFF) / 0xFF;\n return arr;\n}\nfunction vec4ToIndex(vec4) {\n return vec4[0] + (vec4[1] << 8) + (vec4[2] << 16) + (vec4[3] << 24);\n}\nfunction createTexture(gl, debugID) {\n var texture = gl.createTexture();\n texture.buffer = function (offscreenCanvas) {\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);\n\n // very important, this tells webgl to premultiply colors by the alpha channel\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, offscreenCanvas);\n gl.generateMipmap(gl.TEXTURE_2D);\n gl.bindTexture(gl.TEXTURE_2D, null);\n };\n texture.deleteTexture = function () {\n gl.deleteTexture(texture);\n };\n return texture;\n}\nfunction getTypeInfo(gl, glslType) {\n switch (glslType) {\n case 'float':\n return [1, gl.FLOAT, 4];\n case 'vec2':\n return [2, gl.FLOAT, 4];\n case 'vec3':\n return [3, gl.FLOAT, 4];\n case 'vec4':\n return [4, gl.FLOAT, 4];\n case 'int':\n return [1, gl.INT, 4];\n case 'ivec2':\n return [2, gl.INT, 4];\n }\n}\nfunction createTypedArray(gl, glType, dataOrSize) {\n switch (glType) {\n case gl.FLOAT:\n return new Float32Array(dataOrSize);\n case gl.INT:\n return new Int32Array(dataOrSize);\n }\n}\nfunction createTypedArrayView(gl, glType, array, stride, size, i) {\n switch (glType) {\n case gl.FLOAT:\n return new Float32Array(array.buffer, i * stride, size);\n case gl.INT:\n return new Int32Array(array.buffer, i * stride, size);\n }\n}\n\n/** @param {WebGLRenderingContext} gl */\nfunction createBufferStaticDraw(gl, type, attributeLoc, dataArray) {\n var _getTypeInfo = getTypeInfo(gl, type),\n _getTypeInfo2 = _slicedToArray(_getTypeInfo, 2),\n size = _getTypeInfo2[0],\n glType = _getTypeInfo2[1];\n var data = createTypedArray(gl, glType, dataArray);\n var buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);\n if (glType === gl.FLOAT) {\n gl.vertexAttribPointer(attributeLoc, size, glType, false, 0, 0);\n } else if (glType === gl.INT) {\n gl.vertexAttribIPointer(attributeLoc, size, glType, 0, 0);\n }\n gl.enableVertexAttribArray(attributeLoc);\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n return buffer;\n}\n\n/** \n * Creates a float buffer with gl.DYNAMIC_DRAW.\n * The returned buffer object contains functions to easily set instance data and buffer the data before a draw call.\n * @param {WebGLRenderingContext} gl \n */\nfunction createBufferDynamicDraw(gl, instances, type, attributeLoc) {\n var _getTypeInfo3 = getTypeInfo(gl, type),\n _getTypeInfo4 = _slicedToArray(_getTypeInfo3, 3),\n size = _getTypeInfo4[0],\n glType = _getTypeInfo4[1],\n bytes = _getTypeInfo4[2];\n var dataArray = createTypedArray(gl, glType, instances * size);\n var stride = size * bytes;\n var buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.bufferData(gl.ARRAY_BUFFER, instances * stride, gl.DYNAMIC_DRAW);\n gl.enableVertexAttribArray(attributeLoc);\n if (glType === gl.FLOAT) {\n gl.vertexAttribPointer(attributeLoc, size, glType, false, stride, 0);\n } else if (glType === gl.INT) {\n gl.vertexAttribIPointer(attributeLoc, size, glType, stride, 0);\n }\n gl.vertexAttribDivisor(attributeLoc, 1);\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n\n // use array views to set values directly into the buffer array\n var views = new Array(instances);\n for (var i = 0; i < instances; i++) {\n views[i] = createTypedArrayView(gl, glType, dataArray, stride, size, i);\n }\n buffer.dataArray = dataArray;\n buffer.stride = stride;\n buffer.size = size;\n buffer.getView = function (i) {\n return views[i];\n };\n buffer.setPoint = function (i, x, y) {\n var view = views[i];\n view[0] = x;\n view[1] = y;\n };\n buffer.bufferSubData = function (count) {\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n if (count) {\n gl.bufferSubData(gl.ARRAY_BUFFER, 0, dataArray, 0, count * size);\n } else {\n gl.bufferSubData(gl.ARRAY_BUFFER, 0, dataArray);\n }\n };\n return buffer;\n}\n\n/** \n * Creates a buffer of 3x3 matrix data for use as attribute data.\n * @param {WebGLRenderingContext} gl \n */\nfunction create3x3MatrixBufferDynamicDraw(gl, instances, attributeLoc) {\n var matrixSize = 9; // 3x3 matrix\n var matrixData = new Float32Array(instances * matrixSize);\n\n // use matrix views to set values directly into the matrixData array\n var matrixViews = new Array(instances);\n for (var i = 0; i < instances; i++) {\n var byteOffset = i * matrixSize * 4; // 4 bytes per float\n matrixViews[i] = new Float32Array(matrixData.buffer, byteOffset, matrixSize); // array view\n }\n var buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.bufferData(gl.ARRAY_BUFFER, matrixData.byteLength, gl.DYNAMIC_DRAW);\n\n // each row of the matrix needs to be a separate attribute\n for (var _i = 0; _i < 3; _i++) {\n var loc = attributeLoc + _i;\n gl.enableVertexAttribArray(loc);\n gl.vertexAttribPointer(loc, 3, gl.FLOAT, false, 3 * 12, _i * 12);\n gl.vertexAttribDivisor(loc, 1);\n }\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n buffer.getMatrixView = function (i) {\n return matrixViews[i];\n };\n\n // TODO this is too slow, use getMatrixView and pass the view directly to the glmatrix library\n buffer.setData = function (matrix, i) {\n matrixViews[i].set(matrix, 0);\n };\n buffer.bufferSubData = function () {\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.bufferSubData(gl.ARRAY_BUFFER, 0, matrixData);\n };\n return buffer;\n}\n\n/** \n * Creates a Frame Buffer to use for offscreen rendering.\n * @param {WebGLRenderingContext} gl \n */\nfunction createPickingFrameBuffer(gl) {\n // Create and bind the framebuffer\n var fb = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, fb);\n\n // Create a texture to render to\n var targetTexture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, targetTexture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n // attach the texture as the first color attachment\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, targetTexture, 0);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n fb.setFramebufferAttachmentSizes = function (width, height) {\n gl.bindTexture(gl.TEXTURE_2D, targetTexture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n };\n return fb;\n}\n\n/**\n * Common utilities\n * @module glMatrix\n */\n// Configuration Constants\nvar ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nif (!Math.hypot) Math.hypot = function () {\n var y = 0,\n i = arguments.length;\n\n while (i--) {\n y += arguments[i] * arguments[i];\n }\n\n return Math.sqrt(y);\n};\n\n/**\n * 3x3 Matrix\n * @module mat3\n */\n\n/**\n * Creates a new identity mat3\n *\n * @returns {mat3} a new 3x3 matrix\n */\n\nfunction create() {\n var out = new ARRAY_TYPE(9);\n\n if (ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n }\n\n out[0] = 1;\n out[4] = 1;\n out[8] = 1;\n return out;\n}\n/**\n * Set a mat3 to the identity matrix\n *\n * @param {mat3} out the receiving matrix\n * @returns {mat3} out\n */\n\nfunction identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Multiplies two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nfunction multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b00 = b[0],\n b01 = b[1],\n b02 = b[2];\n var b10 = b[3],\n b11 = b[4],\n b12 = b[5];\n var b20 = b[6],\n b21 = b[7],\n b22 = b[8];\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n}\n/**\n * Translate a mat3 by the given vector\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to translate\n * @param {ReadonlyVec2} v vector to translate by\n * @returns {mat3} out\n */\n\nfunction translate(out, a, v) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n x = v[0],\n y = v[1];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a10;\n out[4] = a11;\n out[5] = a12;\n out[6] = x * a00 + y * a10 + a20;\n out[7] = x * a01 + y * a11 + a21;\n out[8] = x * a02 + y * a12 + a22;\n return out;\n}\n/**\n * Rotates a mat3 by the given angle\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\n\nfunction rotate(out, a, rad) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c * a00 + s * a10;\n out[1] = c * a01 + s * a11;\n out[2] = c * a02 + s * a12;\n out[3] = c * a10 - s * a00;\n out[4] = c * a11 - s * a01;\n out[5] = c * a12 - s * a02;\n out[6] = a20;\n out[7] = a21;\n out[8] = a22;\n return out;\n}\n/**\n * Scales the mat3 by the dimensions in the given vec2\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {ReadonlyVec2} v the vec2 to scale the matrix by\n * @returns {mat3} out\n **/\n\nfunction scale(out, a, v) {\n var x = v[0],\n y = v[1];\n out[0] = x * a[0];\n out[1] = x * a[1];\n out[2] = x * a[2];\n out[3] = y * a[3];\n out[4] = y * a[4];\n out[5] = y * a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Generates a 2D projection matrix with the given bounds\n *\n * @param {mat3} out mat3 frustum matrix will be written into\n * @param {number} width Width of your gl context\n * @param {number} height Height of gl context\n * @returns {mat3} out\n */\n\nfunction projection(out, width, height) {\n out[0] = 2 / width;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = -2 / height;\n out[5] = 0;\n out[6] = -1;\n out[7] = 1;\n out[8] = 1;\n return out;\n}\n\n// A \"texture atlas\" is a big canvas, and sections of it are used as textures for nodes/labels.\n\n/**\n * A single square texture atlas (also known as a \"sprite sheet\").\n */\nvar Atlas = /*#__PURE__*/function () {\n function Atlas(r, texSize, texRows, createTextureCanvas) {\n _classCallCheck(this, Atlas);\n this.debugID = Math.floor(Math.random() * 10000);\n this.r = r;\n this.texSize = texSize;\n this.texRows = texRows;\n this.texHeight = Math.floor(texSize / texRows);\n this.enableWrapping = true; // hardcoded for now, can be made an option\n\n this.locked = false; // once an atlas is locked it can no longer be drawn to\n this.texture = null; // WebGLTexture object\n this.needsBuffer = true;\n\n // a \"location\" is an pointer into the atlas with a 'row' and 'x' fields\n this.freePointer = {\n x: 0,\n row: 0\n };\n\n // map from the style key to the row/x where the texture starts\n // if the texture wraps then there's a second location\n this.keyToLocation = new Map(); // styleKey -> [ location, location ]\n\n this.canvas = createTextureCanvas(r, texSize, texSize);\n this.scratch = createTextureCanvas(r, texSize, this.texHeight, 'scratch');\n }\n return _createClass(Atlas, [{\n key: \"lock\",\n value: function lock() {\n this.locked = true;\n }\n }, {\n key: \"getKeys\",\n value: function getKeys() {\n return new Set(this.keyToLocation.keys());\n }\n }, {\n key: \"getScale\",\n value: function getScale(_ref) {\n var w = _ref.w,\n h = _ref.h;\n var texHeight = this.texHeight,\n maxTexWidth = this.texSize;\n // try to fit to the height of a row\n var scale = texHeight / h; // TODO what about pixelRatio?\n var texW = w * scale;\n var texH = h * scale;\n // if the scaled width is too wide then scale to fit max width instead\n if (texW > maxTexWidth) {\n scale = maxTexWidth / w;\n texW = w * scale;\n texH = h * scale;\n }\n return {\n scale: scale,\n texW: texW,\n texH: texH\n };\n }\n }, {\n key: \"draw\",\n value: function draw(key, bb, doDrawing) {\n var _this = this;\n if (this.locked) throw new Error('can\\'t draw, atlas is locked');\n var texSize = this.texSize,\n texRows = this.texRows,\n texHeight = this.texHeight;\n var _this$getScale = this.getScale(bb),\n scale = _this$getScale.scale,\n texW = _this$getScale.texW,\n texH = _this$getScale.texH;\n var drawAt = function drawAt(location, canvas) {\n if (doDrawing && canvas) {\n var context = canvas.context;\n var x = location.x,\n row = location.row;\n var xOffset = x;\n var yOffset = texHeight * row;\n context.save();\n context.translate(xOffset, yOffset);\n context.scale(scale, scale);\n doDrawing(context, bb);\n context.restore();\n }\n };\n var locations = [null, null];\n var drawNormal = function drawNormal() {\n // don't need to wrap, draw directly on the canvas\n drawAt(_this.freePointer, _this.canvas);\n locations[0] = {\n x: _this.freePointer.x,\n y: _this.freePointer.row * texHeight,\n w: texW,\n h: texH\n };\n locations[1] = {\n // create a second location with a width of 0, for convenience\n x: _this.freePointer.x + texW,\n y: _this.freePointer.row * texHeight,\n w: 0,\n h: texH\n };\n\n // move the pointer to the end of the texture\n _this.freePointer.x += texW;\n if (_this.freePointer.x == texSize) {\n _this.freePointer.x = 0;\n _this.freePointer.row++;\n }\n };\n var drawWrapped = function drawWrapped() {\n var scratch = _this.scratch,\n canvas = _this.canvas;\n\n // Draw to the scratch canvas\n scratch.clear();\n drawAt({\n x: 0,\n row: 0\n }, scratch);\n var firstTexW = texSize - _this.freePointer.x;\n var secondTexW = texW - firstTexW;\n var h = texHeight;\n {\n // copy first part of scratch to the first texture\n var dx = _this.freePointer.x;\n var dy = _this.freePointer.row * texHeight;\n var w = firstTexW;\n canvas.context.drawImage(scratch, 0, 0, w, h, dx, dy, w, h);\n locations[0] = {\n x: dx,\n y: dy,\n w: w,\n h: texH\n };\n }\n {\n // copy second part of scratch to the second texture\n var sx = firstTexW;\n var _dy = (_this.freePointer.row + 1) * texHeight;\n var _w = secondTexW;\n if (canvas) {\n canvas.context.drawImage(scratch, sx, 0, _w, h, 0, _dy, _w, h);\n }\n locations[1] = {\n x: 0,\n y: _dy,\n w: _w,\n h: texH\n };\n }\n _this.freePointer.x = secondTexW;\n _this.freePointer.row++;\n };\n var moveToStartOfNextRow = function moveToStartOfNextRow() {\n _this.freePointer.x = 0;\n _this.freePointer.row++;\n };\n if (this.freePointer.x + texW <= texSize) {\n // There's enough space in the current row\n drawNormal();\n } else if (this.freePointer.row >= texRows - 1) {\n // Need to move to the next row, but there are no more rows, atlas is full.\n return false;\n } else if (this.freePointer.x === texSize) {\n // happen to be right at end of current row\n moveToStartOfNextRow();\n drawNormal();\n } else if (this.enableWrapping) {\n // draw part of the texture to the end of the curent row, then wrap to the next row\n drawWrapped();\n } else {\n // move to the start of the next row, then draw normally\n moveToStartOfNextRow();\n drawNormal();\n }\n this.keyToLocation.set(key, locations);\n this.needsBuffer = true;\n return locations;\n }\n }, {\n key: \"getOffsets\",\n value: function getOffsets(key) {\n return this.keyToLocation.get(key);\n }\n }, {\n key: \"isEmpty\",\n value: function isEmpty() {\n return this.freePointer.x === 0 && this.freePointer.row === 0;\n }\n }, {\n key: \"canFit\",\n value: function canFit(bb) {\n if (this.locked) return false;\n var texSize = this.texSize,\n texRows = this.texRows;\n var _this$getScale2 = this.getScale(bb),\n texW = _this$getScale2.texW;\n if (this.freePointer.x + texW > texSize) {\n // need to wrap\n return this.freePointer.row < texRows - 1; // return true if there's a row to wrap to\n }\n return true;\n }\n\n // called on every frame\n }, {\n key: \"bufferIfNeeded\",\n value: function bufferIfNeeded(gl) {\n if (!this.texture) {\n this.texture = createTexture(gl, this.debugID);\n }\n if (this.needsBuffer) {\n this.texture.buffer(this.canvas);\n this.needsBuffer = false;\n if (this.locked) {\n this.canvas = null;\n this.scratch = null;\n }\n }\n }\n }, {\n key: \"dispose\",\n value: function dispose() {\n if (this.texture) {\n this.texture.deleteTexture();\n this.texture = null;\n }\n this.canvas = null;\n this.scratch = null;\n this.locked = true;\n }\n }]);\n}();\n\n/**\n * A collection of texture atlases, all of the same \"render type\". \n * ('node-body' is an example of a render type.)\n * An AtlasCollection can also be notified when a texture is no longer needed, \n * and it can garbage collect the unused textures.\n */\nvar AtlasCollection = /*#__PURE__*/function () {\n function AtlasCollection(r, texSize, texRows, createTextureCanvas) {\n _classCallCheck(this, AtlasCollection);\n this.r = r;\n this.texSize = texSize;\n this.texRows = texRows;\n this.createTextureCanvas = createTextureCanvas;\n this.atlases = [];\n this.styleKeyToAtlas = new Map();\n this.markedKeys = new Set(); // marked for garbage collection\n }\n return _createClass(AtlasCollection, [{\n key: \"getKeys\",\n value: function getKeys() {\n return new Set(this.styleKeyToAtlas.keys());\n }\n }, {\n key: \"_createAtlas\",\n value: function _createAtlas() {\n var r = this.r,\n texSize = this.texSize,\n texRows = this.texRows,\n createTextureCanvas = this.createTextureCanvas;\n return new Atlas(r, texSize, texRows, createTextureCanvas);\n }\n }, {\n key: \"_getScratchCanvas\",\n value: function _getScratchCanvas() {\n if (!this.scratch) {\n var r = this.r,\n texSize = this.texSize,\n texRows = this.texRows,\n createTextureCanvas = this.createTextureCanvas;\n var texHeight = Math.floor(texSize / texRows);\n this.scratch = createTextureCanvas(r, texSize, texHeight, 'scratch');\n }\n return this.scratch;\n }\n }, {\n key: \"draw\",\n value: function draw(key, bb, doDrawing) {\n var atlas = this.styleKeyToAtlas.get(key);\n if (!atlas) {\n // check for space at the end of the last atlas\n atlas = this.atlases[this.atlases.length - 1];\n if (!atlas || !atlas.canFit(bb)) {\n if (atlas) atlas.lock();\n // create a new atlas\n atlas = this._createAtlas();\n this.atlases.push(atlas);\n }\n atlas.draw(key, bb, doDrawing);\n this.styleKeyToAtlas.set(key, atlas);\n }\n return atlas;\n }\n }, {\n key: \"getAtlas\",\n value: function getAtlas(key) {\n return this.styleKeyToAtlas.get(key);\n }\n }, {\n key: \"hasAtlas\",\n value: function hasAtlas(key) {\n return this.styleKeyToAtlas.has(key);\n }\n }, {\n key: \"markKeyForGC\",\n value: function markKeyForGC(key) {\n this.markedKeys.add(key);\n }\n }, {\n key: \"gc\",\n value: function gc() {\n var _this2 = this;\n var markedKeys = this.markedKeys;\n if (markedKeys.size === 0) {\n console.log('nothing to garbage collect');\n return;\n }\n var newAtlases = [];\n var newStyleKeyToAtlas = new Map();\n var newAtlas = null;\n var _iterator = _createForOfIteratorHelper(this.atlases),\n _step;\n try {\n var _loop = function _loop() {\n var atlas = _step.value;\n var keys = atlas.getKeys();\n var keysToCollect = intersection(markedKeys, keys);\n if (keysToCollect.size === 0) {\n // this atlas can still be used\n newAtlases.push(atlas);\n keys.forEach(function (k) {\n return newStyleKeyToAtlas.set(k, atlas);\n });\n return 1; // continue\n }\n if (!newAtlas) {\n newAtlas = _this2._createAtlas();\n newAtlases.push(newAtlas);\n }\n var _iterator2 = _createForOfIteratorHelper(keys),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var key = _step2.value;\n if (!keysToCollect.has(key)) {\n var _atlas$getOffsets = atlas.getOffsets(key),\n _atlas$getOffsets2 = _slicedToArray(_atlas$getOffsets, 2),\n s1 = _atlas$getOffsets2[0],\n s2 = _atlas$getOffsets2[1];\n if (!newAtlas.canFit({\n w: s1.w + s2.w,\n h: s1.h\n })) {\n newAtlas.lock();\n newAtlas = _this2._createAtlas();\n newAtlases.push(newAtlas);\n }\n if (atlas.canvas) {\n // if the texture can't be copied then it will have to be redrawn on the next frame\n _this2._copyTextureToNewAtlas(key, atlas, newAtlas);\n newStyleKeyToAtlas.set(key, newAtlas);\n }\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n atlas.dispose();\n };\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n if (_loop()) continue;\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n this.atlases = newAtlases;\n this.styleKeyToAtlas = newStyleKeyToAtlas;\n this.markedKeys = new Set();\n }\n }, {\n key: \"_copyTextureToNewAtlas\",\n value: function _copyTextureToNewAtlas(key, oldAtlas, newAtlas) {\n var _oldAtlas$getOffsets = oldAtlas.getOffsets(key),\n _oldAtlas$getOffsets2 = _slicedToArray(_oldAtlas$getOffsets, 2),\n s1 = _oldAtlas$getOffsets2[0],\n s2 = _oldAtlas$getOffsets2[1];\n if (s2.w === 0) {\n // the texture does not wrap, draw directly to new atlas\n newAtlas.draw(key, s1, function (context) {\n context.drawImage(oldAtlas.canvas, s1.x, s1.y, s1.w, s1.h, 0, 0, s1.w, s1.h);\n });\n } else {\n // the texture wraps, first draw both parts to a scratch canvas\n var scratch = this._getScratchCanvas();\n scratch.clear();\n scratch.context.drawImage(oldAtlas.canvas, s1.x, s1.y, s1.w, s1.h, 0, 0, s1.w, s1.h);\n scratch.context.drawImage(oldAtlas.canvas, s2.x, s2.y, s2.w, s2.h, s1.w, 0, s2.w, s2.h);\n\n // now draw the scratch to the new atlas\n var w = s1.w + s2.w;\n var h = s1.h;\n newAtlas.draw(key, {\n w: w,\n h: h\n }, function (context) {\n context.drawImage(scratch, 0, 0, w, h, 0, 0, w, h // the destination context has already been translated to the correct position\n );\n });\n }\n }\n }, {\n key: \"getCounts\",\n value: function getCounts() {\n return {\n keyCount: this.styleKeyToAtlas.size,\n atlasCount: new Set(this.styleKeyToAtlas.values()).size\n };\n }\n }]);\n}();\nfunction intersection(set1, set2) {\n // TODO why no Set.intersection in node 16???\n if (set1.intersection) return set1.intersection(set2);else return new Set(_toConsumableArray(set1).filter(function (x) {\n return set2.has(x);\n }));\n}\n\n/**\n * Used to manage batches of Atlases for drawing nodes and labels.\n * Supports different types of AtlasCollections for different render types,\n * for example 'node-body' and 'node-label' would be different render types.\n * Render types are kept separate because they will likely need to be garbage collected\n * separately and its not entierly guaranteed that their style keys won't collide.\n */\nvar AtlasManager = /*#__PURE__*/function () {\n function AtlasManager(r, globalOptions) {\n _classCallCheck(this, AtlasManager);\n this.r = r;\n this.globalOptions = globalOptions;\n this.atlasSize = globalOptions.webglTexSize;\n this.maxAtlasesPerBatch = globalOptions.webglTexPerBatch;\n this.renderTypes = new Map(); // renderType:string -> renderTypeOptions\n this.collections = new Map(); // collectionName:string -> AtlasCollection\n\n this.typeAndIdToKey = new Map(); // [renderType,id] => Array\n\n`;\n const cssHtml = `\n\n`;\n\n const scripts = `\n\n\n\n\n`;\n const diagramsDiv = `\n
    \n`;\n const serializedGrammar = `\n\n`;\n\n const initLogic = `\n\n`;\n return (\n header + cssHtml + scripts + diagramsDiv + serializedGrammar + initLogic\n );\n}\n", "/* istanbul ignore file - tricky to import some things from this module during testing */\n\n// semantic version\nexport { VERSION } from \"./version.js\";\n\nexport {\n CstParser,\n EmbeddedActionsParser,\n ParserDefinitionErrorType,\n EMPTY_ALT,\n} from \"./parse/parser/parser.js\";\n\nexport { Lexer, LexerDefinitionErrorType } from \"./scan/lexer_public.js\";\n\n// Tokens utilities\nexport {\n createToken,\n createTokenInstance,\n EOF,\n tokenLabel,\n tokenMatcher,\n tokenName,\n} from \"./scan/tokens_public.js\";\n\n// Lookahead\n\nexport { getLookaheadPaths } from \"./parse/grammar/lookahead.js\";\n\nexport { LLkLookaheadStrategy } from \"./parse/grammar/llk_lookahead.js\";\n\n// Other Utilities\n\nexport { defaultParserErrorProvider } from \"./parse/errors_public.js\";\n\nexport {\n EarlyExitException,\n isRecognitionException,\n MismatchedTokenException,\n NotAllInputParsedException,\n NoViableAltException,\n} from \"./parse/exceptions_public.js\";\n\nexport { defaultLexerErrorProvider } from \"./scan/lexer_errors_public.js\";\n\n// grammar reflection API\nexport {\n Alternation,\n Alternative,\n NonTerminal,\n Option,\n Repetition,\n RepetitionMandatory,\n RepetitionMandatoryWithSeparator,\n RepetitionWithSeparator,\n Rule,\n Terminal,\n} from \"@chevrotain/gast\";\n\n// GAST Utilities\n\nexport {\n serializeGrammar,\n serializeProduction,\n GAstVisitor,\n} from \"@chevrotain/gast\";\n\nexport { generateCstDts } from \"@chevrotain/cst-dts-gen\";\n\n/* istanbul ignore next */\nexport function clearCache() {\n console.warn(\n \"The clearCache function was 'soft' removed from the Chevrotain API.\" +\n \"\\n\\t It performs no action other than printing this message.\" +\n \"\\n\\t Please avoid using it as it will be completely removed in the future\",\n );\n}\n\nexport { createSyntaxDiagramsCode } from \"./diagrams/render_public.js\";\n\nexport class Parser {\n constructor() {\n throw new Error(\n \"The Parser class has been deprecated, use CstParser or EmbeddedActionsParser instead.\\t\\n\" +\n \"See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_7-0-0\",\n );\n }\n}\n", "/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport map from \"lodash-es/map.js\"\r\nimport filter from \"lodash-es/filter.js\"\r\nimport {\r\n IProduction,\r\n IProductionWithOccurrence,\r\n TokenType,\r\n Alternation,\r\n NonTerminal,\r\n Rule,\r\n Option,\r\n RepetitionMandatory,\r\n Repetition,\r\n Terminal,\r\n Alternative,\r\n RepetitionWithSeparator,\r\n RepetitionMandatoryWithSeparator,\r\n LookaheadProductionType\r\n} from \"chevrotain\"\r\n\r\nexport function buildATNKey(rule: Rule, type: LookaheadProductionType, occurrence: number): string {\r\n return `${rule.name}_${type}_${occurrence}`;\r\n}\r\n\r\nexport interface ATN {\r\n decisionMap: Record\r\n states: ATNState[]\r\n decisionStates: DecisionState[]\r\n ruleToStartState: Map\r\n ruleToStopState: Map\r\n}\r\n\r\nexport const ATN_INVALID_TYPE = 0\r\nexport const ATN_BASIC = 1\r\nexport const ATN_RULE_START = 2\r\nexport const ATN_PLUS_BLOCK_START = 4\r\nexport const ATN_STAR_BLOCK_START = 5\r\n// Currently unused as the ATN is not used for lexing\r\nexport const ATN_TOKEN_START = 6\r\nexport const ATN_RULE_STOP = 7\r\nexport const ATN_BLOCK_END = 8\r\nexport const ATN_STAR_LOOP_BACK = 9\r\nexport const ATN_STAR_LOOP_ENTRY = 10\r\nexport const ATN_PLUS_LOOP_BACK = 11\r\nexport const ATN_LOOP_END = 12\r\n\r\nexport type ATNState =\r\n | BasicState\r\n | BasicBlockStartState\r\n | PlusBlockStartState\r\n | PlusLoopbackState\r\n | StarBlockStartState\r\n | StarLoopbackState\r\n | StarLoopEntryState\r\n | BlockEndState\r\n | RuleStartState\r\n | RuleStopState\r\n | LoopEndState\r\n\r\nexport interface ATNBaseState {\r\n atn: ATN\r\n production: IProductionWithOccurrence\r\n stateNumber: number\r\n rule: Rule\r\n epsilonOnlyTransitions: boolean\r\n transitions: Transition[]\r\n nextTokenWithinRule: number[]\r\n}\r\n\r\nexport interface BasicState extends ATNBaseState {\r\n type: typeof ATN_BASIC\r\n}\r\n\r\nexport interface BlockStartState extends DecisionState {\r\n end: BlockEndState\r\n}\r\n\r\nexport interface BasicBlockStartState extends BlockStartState {\r\n type: typeof ATN_BASIC\r\n}\r\n\r\nexport interface PlusBlockStartState extends BlockStartState {\r\n loopback: PlusLoopbackState\r\n type: typeof ATN_PLUS_BLOCK_START\r\n}\r\n\r\nexport interface PlusLoopbackState extends DecisionState {\r\n type: typeof ATN_PLUS_LOOP_BACK\r\n}\r\n\r\nexport interface StarBlockStartState extends BlockStartState {\r\n type: typeof ATN_STAR_BLOCK_START\r\n}\r\n\r\nexport interface StarLoopbackState extends ATNBaseState {\r\n type: typeof ATN_STAR_LOOP_BACK\r\n}\r\n\r\nexport interface StarLoopEntryState extends DecisionState {\r\n loopback: StarLoopbackState\r\n type: typeof ATN_STAR_LOOP_ENTRY\r\n}\r\n\r\nexport interface BlockEndState extends ATNBaseState {\r\n start: BlockStartState\r\n type: typeof ATN_BLOCK_END\r\n}\r\n\r\nexport interface DecisionState extends ATNBaseState {\r\n decision: number\r\n}\r\n\r\nexport interface LoopEndState extends ATNBaseState {\r\n loopback: ATNState\r\n type: typeof ATN_LOOP_END\r\n}\r\n\r\nexport interface RuleStartState extends ATNBaseState {\r\n stop: RuleStopState\r\n type: typeof ATN_RULE_START\r\n}\r\n\r\nexport interface RuleStopState extends ATNBaseState {\r\n type: typeof ATN_RULE_STOP\r\n}\r\n\r\nexport interface Transition {\r\n target: ATNState\r\n isEpsilon(): boolean\r\n}\r\n\r\nexport abstract class AbstractTransition implements Transition {\r\n target: ATNState\r\n\r\n constructor(target: ATNState) {\r\n this.target = target\r\n }\r\n\r\n isEpsilon() {\r\n return false\r\n }\r\n}\r\n\r\nexport class AtomTransition extends AbstractTransition {\r\n tokenType: TokenType\r\n\r\n constructor(target: ATNState, tokenType: TokenType) {\r\n super(target)\r\n this.tokenType = tokenType\r\n }\r\n}\r\n\r\nexport class EpsilonTransition extends AbstractTransition {\r\n constructor(target: ATNState) {\r\n super(target)\r\n }\r\n\r\n isEpsilon() {\r\n return true\r\n }\r\n}\r\n\r\nexport class RuleTransition extends AbstractTransition {\r\n rule: Rule\r\n followState: ATNState\r\n\r\n constructor(ruleStart: RuleStartState, rule: Rule, followState: ATNState) {\r\n super(ruleStart)\r\n this.rule = rule\r\n this.followState = followState\r\n }\r\n\r\n isEpsilon() {\r\n return true\r\n }\r\n}\r\n\r\ninterface ATNHandle {\r\n left: ATNState\r\n right: ATNState\r\n}\r\n\r\nexport function createATN(rules: Rule[]): ATN {\r\n const atn: ATN = {\r\n decisionMap: {},\r\n decisionStates: [],\r\n ruleToStartState: new Map(),\r\n ruleToStopState: new Map(),\r\n states: []\r\n }\r\n createRuleStartAndStopATNStates(atn, rules)\r\n const ruleLength = rules.length\r\n for (let i = 0; i < ruleLength; i++) {\r\n const rule = rules[i]\r\n const ruleBlock = block(atn, rule, rule)\r\n if (ruleBlock === undefined) {\r\n continue\r\n }\r\n buildRuleHandle(atn, rule, ruleBlock)\r\n }\r\n return atn\r\n}\r\n\r\nfunction createRuleStartAndStopATNStates(atn: ATN, rules: Rule[]): void {\r\n const ruleLength = rules.length\r\n for (let i = 0; i < ruleLength; i++) {\r\n const rule = rules[i]\r\n const start = newState(atn, rule, undefined, {\r\n type: ATN_RULE_START\r\n })\r\n const stop = newState(atn, rule, undefined, {\r\n type: ATN_RULE_STOP\r\n })\r\n start.stop = stop\r\n atn.ruleToStartState.set(rule, start)\r\n atn.ruleToStopState.set(rule, stop)\r\n }\r\n}\r\n\r\nfunction atom(\r\n atn: ATN,\r\n rule: Rule,\r\n production: IProduction\r\n): ATNHandle | undefined {\r\n if (production instanceof Terminal) {\r\n return tokenRef(atn, rule, production.terminalType, production)\r\n } else if (production instanceof NonTerminal) {\r\n return ruleRef(atn, rule, production)\r\n } else if (production instanceof Alternation) {\r\n return alternation(atn, rule, production)\r\n } else if (production instanceof Option) {\r\n return option(atn, rule, production)\r\n } else if (production instanceof Repetition) {\r\n return repetition(atn, rule, production)\r\n } else if (production instanceof RepetitionWithSeparator) {\r\n return repetitionSep(atn, rule, production)\r\n } else if (production instanceof RepetitionMandatory) {\r\n return repetitionMandatory(atn, rule, production)\r\n } else if (production instanceof RepetitionMandatoryWithSeparator) {\r\n return repetitionMandatorySep(atn, rule, production)\r\n } else {\r\n return block(atn, rule, production as Alternative)\r\n }\r\n}\r\n\r\nfunction repetition(atn: ATN, rule: Rule, repetition: Repetition): ATNHandle {\r\n const starState = newState(atn, rule, repetition, {\r\n type: ATN_STAR_BLOCK_START\r\n })\r\n defineDecisionState(atn, starState)\r\n const handle = makeAlts(\r\n atn,\r\n rule,\r\n starState,\r\n repetition,\r\n block(atn, rule, repetition)\r\n )\r\n return star(atn, rule, repetition, handle)\r\n}\r\n\r\nfunction repetitionSep(\r\n atn: ATN,\r\n rule: Rule,\r\n repetition: RepetitionWithSeparator\r\n): ATNHandle {\r\n const starState = newState(atn, rule, repetition, {\r\n type: ATN_STAR_BLOCK_START\r\n })\r\n defineDecisionState(atn, starState)\r\n const handle = makeAlts(\r\n atn,\r\n rule,\r\n starState,\r\n repetition,\r\n block(atn, rule, repetition)\r\n )\r\n const sep = tokenRef(atn, rule, repetition.separator, repetition)\r\n return star(atn, rule, repetition, handle, sep)\r\n}\r\n\r\nfunction repetitionMandatory(\r\n atn: ATN,\r\n rule: Rule,\r\n repetition: RepetitionMandatory\r\n): ATNHandle {\r\n const plusState = newState(atn, rule, repetition, {\r\n type: ATN_PLUS_BLOCK_START\r\n })\r\n defineDecisionState(atn, plusState)\r\n const handle = makeAlts(\r\n atn,\r\n rule,\r\n plusState,\r\n repetition,\r\n block(atn, rule, repetition)\r\n )\r\n return plus(atn, rule, repetition, handle)\r\n}\r\n\r\nfunction repetitionMandatorySep(\r\n atn: ATN,\r\n rule: Rule,\r\n repetition: RepetitionMandatoryWithSeparator\r\n): ATNHandle {\r\n const plusState = newState(atn, rule, repetition, {\r\n type: ATN_PLUS_BLOCK_START\r\n })\r\n defineDecisionState(atn, plusState)\r\n const handle = makeAlts(\r\n atn,\r\n rule,\r\n plusState,\r\n repetition,\r\n block(atn, rule, repetition)\r\n )\r\n const sep = tokenRef(atn, rule, repetition.separator, repetition)\r\n return plus(atn, rule, repetition, handle, sep)\r\n}\r\n\r\nfunction alternation(\r\n atn: ATN,\r\n rule: Rule,\r\n alternation: Alternation\r\n): ATNHandle {\r\n const start = newState(atn, rule, alternation, {\r\n type: ATN_BASIC\r\n })\r\n defineDecisionState(atn, start)\r\n const alts = map(alternation.definition, (e) => atom(atn, rule, e))\r\n const handle = makeAlts(atn, rule, start, alternation, ...alts)\r\n return handle\r\n}\r\n\r\nfunction option(atn: ATN, rule: Rule, option: Option): ATNHandle {\r\n const start = newState(atn, rule, option, {\r\n type: ATN_BASIC\r\n })\r\n defineDecisionState(atn, start)\r\n const handle = makeAlts(atn, rule, start, option, block(atn, rule, option))\r\n return optional(atn, rule, option, handle)\r\n}\r\n\r\nfunction block(\r\n atn: ATN,\r\n rule: Rule,\r\n block: { definition: IProduction[] }\r\n): ATNHandle | undefined {\r\n const handles = filter(\r\n map(block.definition, (e) => atom(atn, rule, e)),\r\n (e) => e !== undefined\r\n ) as ATNHandle[]\r\n if (handles.length === 1) {\r\n return handles[0]\r\n } else if (handles.length === 0) {\r\n return undefined\r\n } else {\r\n return makeBlock(atn, handles)\r\n }\r\n}\r\n\r\nfunction plus(\r\n atn: ATN,\r\n rule: Rule,\r\n plus: IProductionWithOccurrence,\r\n handle: ATNHandle,\r\n sep?: ATNHandle\r\n): ATNHandle {\r\n const blkStart = handle.left as PlusBlockStartState\r\n const blkEnd = handle.right\r\n\r\n const loop = newState(atn, rule, plus, {\r\n type: ATN_PLUS_LOOP_BACK\r\n })\r\n defineDecisionState(atn, loop)\r\n const end = newState(atn, rule, plus, {\r\n type: ATN_LOOP_END\r\n })\r\n blkStart.loopback = loop\r\n end.loopback = loop\r\n atn.decisionMap[buildATNKey(rule, sep ? 'RepetitionMandatoryWithSeparator' : 'RepetitionMandatory', plus.idx)] = loop;\r\n epsilon(blkEnd, loop) // block can see loop back\r\n\r\n // Depending on whether we have a separator we put the exit transition at index 1 or 0\r\n // This influences the chosen option in the lookahead DFA\r\n if (sep === undefined) {\r\n epsilon(loop, blkStart) // loop back to start\r\n epsilon(loop, end) // exit\r\n } else {\r\n epsilon(loop, end) // exit\r\n // loop back to start with separator\r\n epsilon(loop, sep.left)\r\n epsilon(sep.right, blkStart)\r\n }\r\n\r\n return {\r\n left: blkStart,\r\n right: end\r\n }\r\n}\r\n\r\nfunction star(\r\n atn: ATN,\r\n rule: Rule,\r\n star: IProductionWithOccurrence,\r\n handle: ATNHandle,\r\n sep?: ATNHandle\r\n): ATNHandle {\r\n const start = handle.left\r\n const end = handle.right\r\n\r\n const entry = newState(atn, rule, star, {\r\n type: ATN_STAR_LOOP_ENTRY\r\n })\r\n defineDecisionState(atn, entry)\r\n const loopEnd = newState(atn, rule, star, {\r\n type: ATN_LOOP_END\r\n })\r\n const loop = newState(atn, rule, star, {\r\n type: ATN_STAR_LOOP_BACK\r\n })\r\n entry.loopback = loop\r\n loopEnd.loopback = loop\r\n\r\n epsilon(entry, start) // loop enter edge (alt 2)\r\n epsilon(entry, loopEnd) // bypass loop edge (alt 1)\r\n epsilon(end, loop) // block end hits loop back\r\n\r\n if (sep !== undefined) {\r\n epsilon(loop, loopEnd) // end loop\r\n // loop back to start of handle using separator\r\n epsilon(loop, sep.left)\r\n epsilon(sep.right, start)\r\n } else {\r\n epsilon(loop, entry) // loop back to entry/exit decision\r\n }\r\n\r\n atn.decisionMap[buildATNKey(rule, sep ? 'RepetitionWithSeparator' : 'Repetition', star.idx)] = entry;\r\n return {\r\n left: entry,\r\n right: loopEnd\r\n }\r\n}\r\n\r\nfunction optional(atn: ATN, rule: Rule, optional: Option, handle: ATNHandle): ATNHandle {\r\n const start = handle.left as DecisionState\r\n const end = handle.right\r\n\r\n epsilon(start, end)\r\n\r\n atn.decisionMap[buildATNKey(rule, 'Option', optional.idx)] = start;\r\n return handle\r\n}\r\n\r\nfunction defineDecisionState(atn: ATN, state: DecisionState): number {\r\n atn.decisionStates.push(state)\r\n state.decision = atn.decisionStates.length - 1\r\n return state.decision\r\n}\r\n\r\nfunction makeAlts(\r\n atn: ATN,\r\n rule: Rule,\r\n start: BlockStartState,\r\n production: IProductionWithOccurrence,\r\n ...alts: (ATNHandle | undefined)[]\r\n): ATNHandle {\r\n const end = newState(atn, rule, production, {\r\n type: ATN_BLOCK_END,\r\n start\r\n })\r\n start.end = end\r\n for (const alt of alts) {\r\n if (alt !== undefined) {\r\n // hook alts up to decision block\r\n epsilon(start, alt.left)\r\n epsilon(alt.right, end)\r\n } else {\r\n epsilon(start, end)\r\n }\r\n }\r\n\r\n const handle: ATNHandle = {\r\n left: start as ATNState,\r\n right: end\r\n }\r\n atn.decisionMap[buildATNKey(rule, getProdType(production), production.idx)] = start\r\n return handle\r\n}\r\n\r\nfunction getProdType(production: IProduction): LookaheadProductionType {\r\n if (production instanceof Alternation) {\r\n return 'Alternation';\r\n } else if (production instanceof Option) {\r\n return 'Option';\r\n } else if (production instanceof Repetition) {\r\n return 'Repetition';\r\n } else if (production instanceof RepetitionWithSeparator) {\r\n return 'RepetitionWithSeparator';\r\n } else if (production instanceof RepetitionMandatory) {\r\n return 'RepetitionMandatory';\r\n } else if (production instanceof RepetitionMandatoryWithSeparator) {\r\n return 'RepetitionMandatoryWithSeparator';\r\n } else {\r\n throw new Error('Invalid production type encountered');\r\n }\r\n}\r\n\r\nfunction makeBlock(atn: ATN, alts: ATNHandle[]): ATNHandle {\r\n const altsLength = alts.length\r\n for (let i = 0; i < altsLength - 1; i++) {\r\n const handle = alts[i]\r\n let transition: Transition | undefined\r\n if (handle.left.transitions.length === 1) {\r\n transition = handle.left.transitions[0]\r\n }\r\n const isRuleTransition = transition instanceof RuleTransition\r\n const ruleTransition = transition as RuleTransition\r\n const next = alts[i + 1].left\r\n if (\r\n handle.left.type === ATN_BASIC &&\r\n handle.right.type === ATN_BASIC &&\r\n transition !== undefined &&\r\n ((isRuleTransition && ruleTransition.followState === handle.right) ||\r\n transition.target === handle.right)\r\n ) {\r\n // we can avoid epsilon edge to next element\r\n if (isRuleTransition) {\r\n ruleTransition.followState = next\r\n } else {\r\n transition.target = next\r\n }\r\n removeState(atn, handle.right) // we skipped over this state\r\n } else {\r\n // need epsilon if previous block's right end node is complex\r\n epsilon(handle.right, next)\r\n }\r\n }\r\n\r\n const first = alts[0]\r\n const last = alts[altsLength - 1]\r\n return {\r\n left: first.left,\r\n right: last.right\r\n }\r\n}\r\n\r\nfunction tokenRef(\r\n atn: ATN,\r\n rule: Rule,\r\n tokenType: TokenType,\r\n production: IProductionWithOccurrence\r\n): ATNHandle {\r\n const left = newState(atn, rule, production, {\r\n type: ATN_BASIC\r\n })\r\n const right = newState(atn, rule, production, {\r\n type: ATN_BASIC\r\n })\r\n addTransition(left, new AtomTransition(right, tokenType))\r\n return {\r\n left,\r\n right\r\n }\r\n}\r\n\r\nfunction ruleRef(\r\n atn: ATN,\r\n currentRule: Rule,\r\n nonTerminal: NonTerminal\r\n): ATNHandle {\r\n const rule = nonTerminal.referencedRule\r\n const start = atn.ruleToStartState.get(rule)!\r\n const left = newState(atn, currentRule, nonTerminal, {\r\n type: ATN_BASIC\r\n })\r\n const right = newState(atn, currentRule, nonTerminal, {\r\n type: ATN_BASIC\r\n })\r\n\r\n const call = new RuleTransition(start, rule, right)\r\n addTransition(left, call)\r\n\r\n return {\r\n left,\r\n right\r\n }\r\n}\r\n\r\nfunction buildRuleHandle(atn: ATN, rule: Rule, block: ATNHandle): ATNHandle {\r\n const start = atn.ruleToStartState.get(rule)!\r\n epsilon(start, block.left)\r\n const stop = atn.ruleToStopState.get(rule)!\r\n epsilon(block.right, stop)\r\n const handle: ATNHandle = {\r\n left: start,\r\n right: stop\r\n }\r\n return handle\r\n}\r\n\r\nfunction epsilon(a: ATNBaseState, b: ATNBaseState): void {\r\n const transition = new EpsilonTransition(b as ATNState)\r\n addTransition(a, transition)\r\n}\r\n\r\nfunction newState(\r\n atn: ATN,\r\n rule: Rule,\r\n production: IProductionWithOccurrence | undefined,\r\n partial: Partial\r\n): T {\r\n const t: T = {\r\n atn,\r\n production,\r\n epsilonOnlyTransitions: false,\r\n rule,\r\n transitions: [],\r\n nextTokenWithinRule: [],\r\n stateNumber: atn.states.length,\r\n ...partial\r\n } as unknown as T\r\n atn.states.push(t)\r\n return t\r\n}\r\n\r\nfunction addTransition(state: ATNBaseState, transition: Transition) {\r\n // A single ATN state can only contain epsilon transitions or non-epsilon transitions\r\n // Because they are never mixed, only setting the property for the first transition is fine\r\n if (state.transitions.length === 0) {\r\n state.epsilonOnlyTransitions = transition.isEpsilon()\r\n }\r\n state.transitions.push(transition)\r\n}\r\n\r\nfunction removeState(atn: ATN, state: ATNState): void {\r\n atn.states.splice(atn.states.indexOf(state), 1)\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport map from \"lodash-es/map.js\"\r\nimport { ATNState, DecisionState } from \"./atn.js\"\r\n\r\nexport interface DFA {\r\n start?: DFAState\r\n states: Record\r\n decision: number\r\n atnStartState: DecisionState\r\n}\r\n\r\nexport interface DFAState {\r\n configs: ATNConfigSet\r\n edges: Record\r\n isAcceptState: boolean\r\n prediction: number\r\n}\r\n\r\nexport const DFA_ERROR = {} as DFAState\r\n\r\nexport interface ATNConfig {\r\n state: ATNState\r\n alt: number\r\n stack: ATNState[]\r\n}\r\n\r\nexport class ATNConfigSet {\r\n private map: Record = {}\r\n private configs: ATNConfig[] = []\r\n\r\n uniqueAlt: number | undefined\r\n\r\n get size(): number {\r\n return this.configs.length\r\n }\r\n\r\n finalize(): void {\r\n // Empties the map to free up memory\r\n this.map = {}\r\n }\r\n\r\n add(config: ATNConfig): void {\r\n const key = getATNConfigKey(config)\r\n // Only add configs which don't exist in our map already\r\n // While this does not influence the actual algorithm, adding them anyway would massively increase memory consumption\r\n if (!(key in this.map)) {\r\n this.map[key] = this.configs.length\r\n this.configs.push(config)\r\n }\r\n }\r\n\r\n get elements(): readonly ATNConfig[] {\r\n return this.configs\r\n }\r\n\r\n get alts(): number[] {\r\n return map(this.configs, (e) => e.alt)\r\n }\r\n\r\n get key(): string {\r\n let value = \"\"\r\n for (const k in this.map) {\r\n value += k + \":\"\r\n }\r\n return value\r\n }\r\n}\r\n\r\nexport function getATNConfigKey(config: ATNConfig, alt = true) {\r\n return `${alt ? `a${config.alt}` : \"\"}s${\r\n config.state.stateNumber\r\n }:${config.stack.map((e) => e.stateNumber.toString()).join(\"_\")}`\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport {\r\n IToken,\r\n TokenType,\r\n tokenMatcher,\r\n tokenLabel,\r\n Rule,\r\n IProductionWithOccurrence,\r\n NonTerminal,\r\n Alternation,\r\n Option,\r\n RepetitionMandatory,\r\n RepetitionMandatoryWithSeparator,\r\n RepetitionWithSeparator,\r\n Repetition,\r\n Terminal,\r\n BaseParser,\r\n LLkLookaheadStrategy,\r\n ILookaheadValidationError,\r\n IOrAlt,\r\n getLookaheadPaths,\r\n OptionalProductionType\r\n} from \"chevrotain\";\r\nimport {\r\n ATN,\r\n ATNState,\r\n ATN_RULE_STOP,\r\n AtomTransition,\r\n buildATNKey,\r\n createATN,\r\n DecisionState,\r\n EpsilonTransition,\r\n RuleTransition,\r\n Transition\r\n} from \"./atn.js\";\r\nimport {\r\n ATNConfig,\r\n ATNConfigSet,\r\n DFA,\r\n DFAState,\r\n DFA_ERROR,\r\n getATNConfigKey\r\n} from \"./dfa.js\";\r\nimport min from \"lodash-es/min.js\";\r\nimport flatMap from \"lodash-es/flatMap.js\";\r\nimport uniqBy from \"lodash-es/uniqBy.js\";\r\nimport map from \"lodash-es/map.js\";\r\nimport flatten from \"lodash-es/flatten.js\";\r\nimport forEach from \"lodash-es/forEach.js\";\r\nimport isEmpty from \"lodash-es/isEmpty.js\";\r\nimport reduce from \"lodash-es/reduce.js\";\r\n\r\ntype DFACache = (predicateSet: PredicateSet) => DFA\r\n\r\nexport type AmbiguityReport = (message: string) => void;\r\n\r\nfunction createDFACache(startState: DecisionState, decision: number): DFACache {\r\n const map: Record = {}\r\n return (predicateSet) => {\r\n const key = predicateSet.toString()\r\n let existing = map[key]\r\n if (existing !== undefined) {\r\n return existing\r\n } else {\r\n existing = {\r\n atnStartState: startState,\r\n decision,\r\n states: {}\r\n }\r\n map[key] = existing\r\n return existing\r\n }\r\n }\r\n}\r\n\r\nclass PredicateSet {\r\n private predicates: boolean[] = []\r\n\r\n is(index: number): boolean {\r\n return index >= this.predicates.length || this.predicates[index]\r\n }\r\n\r\n set(index: number, value: boolean) {\r\n this.predicates[index] = value\r\n }\r\n\r\n toString(): string {\r\n let value = \"\"\r\n const size = this.predicates.length\r\n for (let i = 0; i < size; i++) {\r\n value += this.predicates[i] === true ? \"1\" : \"0\"\r\n }\r\n return value\r\n }\r\n}\r\n\r\ninterface AdaptivePredictError {\r\n tokenPath: IToken[]\r\n possibleTokenTypes: TokenType[]\r\n actualToken: IToken\r\n}\r\n\r\nconst EMPTY_PREDICATES = new PredicateSet()\r\n\r\nexport interface LLStarLookaheadOptions {\r\n logging?: AmbiguityReport\r\n}\r\n\r\nexport class LLStarLookaheadStrategy extends LLkLookaheadStrategy {\r\n\r\n private atn: ATN;\r\n private dfas: DFACache[];\r\n private logging: AmbiguityReport;\r\n\r\n constructor(options?: LLStarLookaheadOptions) {\r\n super();\r\n this.logging = options?.logging ?? ((message) => console.log(message));\r\n }\r\n\r\n override initialize(options: { rules: Rule[] }): void {\r\n this.atn = createATN(options.rules);\r\n this.dfas = initATNSimulator(this.atn);\r\n }\r\n\r\n override validateAmbiguousAlternationAlternatives(): ILookaheadValidationError[] {\r\n return [];\r\n }\r\n\r\n override validateEmptyOrAlternatives(): ILookaheadValidationError[] {\r\n return [];\r\n }\r\n\r\n override buildLookaheadForAlternation(options: {\r\n prodOccurrence: number;\r\n rule: Rule;\r\n maxLookahead: number;\r\n hasPredicates: boolean;\r\n dynamicTokensEnabled: boolean\r\n }): (this: BaseParser, orAlts?: IOrAlt[] | undefined) => number | undefined {\r\n const { prodOccurrence, rule, hasPredicates, dynamicTokensEnabled } = options;\r\n const dfas = this.dfas;\r\n const logging = this.logging;\r\n const key = buildATNKey(rule, 'Alternation', prodOccurrence);\r\n const decisionState = this.atn.decisionMap[key];\r\n const decisionIndex = decisionState.decision;\r\n const partialAlts: (TokenType | undefined)[][] = map(\r\n getLookaheadPaths({\r\n maxLookahead: 1,\r\n occurrence: prodOccurrence,\r\n prodType: \"Alternation\",\r\n rule: rule\r\n }),\r\n (currAlt) => map(currAlt, (path) => path[0])\r\n )\r\n\r\n if (isLL1Sequence(partialAlts, false) && !dynamicTokensEnabled) {\r\n const choiceToAlt = reduce(\r\n partialAlts,\r\n (result, currAlt, idx) => {\r\n forEach(currAlt, (currTokType) => {\r\n if (currTokType) {\r\n result[currTokType.tokenTypeIdx!] = idx\r\n forEach(currTokType.categoryMatches!, (currExtendingType) => {\r\n result[currExtendingType] = idx\r\n })\r\n }\r\n })\r\n return result\r\n },\r\n {} as Record\r\n )\r\n\r\n if (hasPredicates) {\r\n return function (this: BaseParser, orAlts) {\r\n const nextToken = this.LA(1)\r\n const prediction: number | undefined = choiceToAlt[nextToken.tokenTypeIdx]\r\n if (orAlts !== undefined && prediction !== undefined) {\r\n const gate = orAlts[prediction]?.GATE\r\n if (gate !== undefined && gate.call(this) === false) {\r\n return undefined;\r\n }\r\n }\r\n return prediction\r\n }\r\n } else {\r\n return function (this: BaseParser): number | undefined {\r\n const nextToken = this.LA(1)\r\n return choiceToAlt[nextToken.tokenTypeIdx];\r\n }\r\n }\r\n } else if (hasPredicates) {\r\n return function (this: BaseParser, orAlts) {\r\n const predicates = new PredicateSet()\r\n const length = orAlts === undefined ? 0 : orAlts.length\r\n for (let i = 0; i < length; i++) {\r\n const gate = orAlts?.[i].GATE\r\n predicates.set(i, gate === undefined || gate.call(this))\r\n }\r\n const result = adaptivePredict.call(this, dfas, decisionIndex, predicates, logging);\r\n return typeof result === 'number' ? result : undefined;\r\n }\r\n } else {\r\n return function (this: BaseParser) {\r\n const result = adaptivePredict.call(this, dfas, decisionIndex, EMPTY_PREDICATES, logging);\r\n return typeof result === 'number' ? result : undefined;\r\n }\r\n }\r\n }\r\n\r\n override buildLookaheadForOptional(options: {\r\n prodOccurrence: number;\r\n prodType: OptionalProductionType;\r\n rule: Rule;\r\n maxLookahead: number;\r\n dynamicTokensEnabled: boolean\r\n }): (this: BaseParser) => boolean {\r\n const { prodOccurrence, rule, prodType, dynamicTokensEnabled } = options;\r\n const dfas = this.dfas;\r\n const logging = this.logging;\r\n const key = buildATNKey(rule, prodType, prodOccurrence);\r\n const decisionState = this.atn.decisionMap[key];\r\n const decisionIndex = decisionState.decision;\r\n const alts = map(\r\n getLookaheadPaths({\r\n maxLookahead: 1,\r\n occurrence: prodOccurrence,\r\n prodType,\r\n rule\r\n }),\r\n (e) => {\r\n return map(e, (g) => g[0])\r\n }\r\n )\r\n \r\n if (isLL1Sequence(alts) && alts[0][0] && !dynamicTokensEnabled) {\r\n const alt = alts[0]\r\n const singleTokensTypes = flatten(alt)\r\n \r\n if (\r\n singleTokensTypes.length === 1 &&\r\n isEmpty(singleTokensTypes[0].categoryMatches)\r\n ) {\r\n const expectedTokenType = singleTokensTypes[0]\r\n const expectedTokenUniqueKey = expectedTokenType.tokenTypeIdx\r\n \r\n return function (this: BaseParser): boolean {\r\n return this.LA(1).tokenTypeIdx === expectedTokenUniqueKey\r\n }\r\n } else {\r\n const choiceToAlt = reduce(\r\n singleTokensTypes,\r\n (result, currTokType) => {\r\n if (currTokType !== undefined) {\r\n result[currTokType.tokenTypeIdx!] = true\r\n forEach(currTokType.categoryMatches, (currExtendingType) => {\r\n result[currExtendingType] = true\r\n })\r\n }\r\n return result\r\n },\r\n {} as Record\r\n )\r\n \r\n return function (this: BaseParser): boolean {\r\n const nextToken = this.LA(1)\r\n return choiceToAlt[nextToken.tokenTypeIdx] === true\r\n }\r\n }\r\n }\r\n return function (this: BaseParser) {\r\n const result = adaptivePredict.call(this, dfas, decisionIndex, EMPTY_PREDICATES, logging)\r\n return typeof result === \"object\" ? false : result === 0;\r\n }\r\n }\r\n\r\n}\r\n\r\nfunction isLL1Sequence(sequences: (TokenType | undefined)[][], allowEmpty = true): boolean {\r\n const fullSet = new Set()\r\n\r\n for (const alt of sequences) {\r\n const altSet = new Set()\r\n for (const tokType of alt) {\r\n if (tokType === undefined) {\r\n if (allowEmpty) {\r\n // Epsilon production encountered\r\n break\r\n } else {\r\n return false;\r\n }\r\n }\r\n const indices = [tokType.tokenTypeIdx!].concat(tokType.categoryMatches!)\r\n for (const index of indices) {\r\n if (fullSet.has(index)) {\r\n if (!altSet.has(index)) {\r\n return false\r\n }\r\n } else {\r\n fullSet.add(index)\r\n altSet.add(index)\r\n }\r\n }\r\n }\r\n }\r\n return true\r\n}\r\n\r\nfunction initATNSimulator(atn: ATN): DFACache[] {\r\n const decisionLength = atn.decisionStates.length\r\n const decisionToDFA: DFACache[] = Array(decisionLength)\r\n for (let i = 0; i < decisionLength; i++) {\r\n decisionToDFA[i] = createDFACache(atn.decisionStates[i], i)\r\n }\r\n return decisionToDFA;\r\n}\r\n\r\nfunction adaptivePredict(\r\n this: BaseParser,\r\n dfaCaches: DFACache[],\r\n decision: number,\r\n predicateSet: PredicateSet,\r\n logging: AmbiguityReport\r\n): number | AdaptivePredictError {\r\n const dfa = dfaCaches[decision](predicateSet)\r\n let start = dfa.start\r\n if (start === undefined) {\r\n const closure = computeStartState(dfa.atnStartState as ATNState)\r\n start = addDFAState(dfa, newDFAState(closure))\r\n dfa.start = start\r\n }\r\n\r\n const alt = performLookahead.apply(this, [dfa, start, predicateSet, logging])\r\n return alt\r\n}\r\n\r\nfunction performLookahead(\r\n this: BaseParser,\r\n dfa: DFA,\r\n s0: DFAState,\r\n predicateSet: PredicateSet,\r\n logging: AmbiguityReport\r\n): number | AdaptivePredictError {\r\n let previousD = s0\r\n\r\n let i = 1\r\n const path: IToken[] = []\r\n let t = this.LA(i++)\r\n\r\n while (true) {\r\n let d = getExistingTargetState(previousD, t)\r\n if (d === undefined) {\r\n d = computeLookaheadTarget.apply(this, [dfa, previousD, t, i, predicateSet, logging])\r\n }\r\n\r\n if (d === DFA_ERROR) {\r\n return buildAdaptivePredictError(path, previousD, t)\r\n }\r\n\r\n if (d.isAcceptState === true) {\r\n return d.prediction\r\n }\r\n\r\n previousD = d\r\n path.push(t)\r\n t = this.LA(i++)\r\n }\r\n}\r\n\r\nfunction computeLookaheadTarget(\r\n this: BaseParser,\r\n dfa: DFA,\r\n previousD: DFAState,\r\n token: IToken,\r\n lookahead: number,\r\n predicateSet: PredicateSet,\r\n logging: AmbiguityReport\r\n): DFAState {\r\n const reach = computeReachSet(previousD.configs, token, predicateSet)\r\n if (reach.size === 0) {\r\n addDFAEdge(dfa, previousD, token, DFA_ERROR)\r\n return DFA_ERROR\r\n }\r\n\r\n let newState = newDFAState(reach)\r\n const predictedAlt = getUniqueAlt(reach, predicateSet)\r\n\r\n if (predictedAlt !== undefined) {\r\n newState.isAcceptState = true\r\n newState.prediction = predictedAlt\r\n newState.configs.uniqueAlt = predictedAlt\r\n } else if (hasConflictTerminatingPrediction(reach)) {\r\n const prediction = min(reach.alts)!\r\n newState.isAcceptState = true\r\n newState.prediction = prediction\r\n newState.configs.uniqueAlt = prediction\r\n reportLookaheadAmbiguity.apply(this, [dfa, lookahead, reach.alts, logging])\r\n }\r\n\r\n newState = addDFAEdge(dfa, previousD, token, newState)\r\n return newState\r\n}\r\n\r\nfunction reportLookaheadAmbiguity(\r\n this: BaseParser,\r\n dfa: DFA,\r\n lookahead: number,\r\n ambiguityIndices: number[],\r\n logging: AmbiguityReport\r\n) {\r\n const prefixPath: TokenType[] = []\r\n for (let i = 1; i <= lookahead; i++) {\r\n prefixPath.push(this.LA(i).tokenType)\r\n }\r\n const atnState = dfa.atnStartState\r\n const topLevelRule = atnState.rule\r\n const production = atnState.production\r\n const message = buildAmbiguityError({\r\n topLevelRule,\r\n ambiguityIndices,\r\n production,\r\n prefixPath\r\n })\r\n logging(message)\r\n}\r\n\r\nfunction buildAmbiguityError(options: {\r\n topLevelRule: Rule\r\n prefixPath: TokenType[]\r\n ambiguityIndices: number[]\r\n production: IProductionWithOccurrence\r\n}): string {\r\n const pathMsg = map(options.prefixPath, (currtok) =>\r\n tokenLabel(currtok)\r\n ).join(\", \")\r\n const occurrence =\r\n options.production.idx === 0 ? \"\" : options.production.idx\r\n let currMessage =\r\n `Ambiguous Alternatives Detected: <${options.ambiguityIndices.join(\r\n \", \"\r\n )}> in <${getProductionDslName(options.production)}${occurrence}>` +\r\n ` inside <${options.topLevelRule.name}> Rule,\\n` +\r\n `<${pathMsg}> may appears as a prefix path in all these alternatives.\\n`\r\n\r\n currMessage =\r\n currMessage +\r\n `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\\n` +\r\n `For Further details.`\r\n return currMessage\r\n}\r\n\r\nfunction getProductionDslName(prod: IProductionWithOccurrence): string {\r\n if (prod instanceof NonTerminal) {\r\n return \"SUBRULE\"\r\n } else if (prod instanceof Option) {\r\n return \"OPTION\"\r\n } else if (prod instanceof Alternation) {\r\n return \"OR\"\r\n } else if (prod instanceof RepetitionMandatory) {\r\n return \"AT_LEAST_ONE\"\r\n } else if (prod instanceof RepetitionMandatoryWithSeparator) {\r\n return \"AT_LEAST_ONE_SEP\"\r\n } else if (prod instanceof RepetitionWithSeparator) {\r\n return \"MANY_SEP\"\r\n } else if (prod instanceof Repetition) {\r\n return \"MANY\"\r\n } else if (prod instanceof Terminal) {\r\n return \"CONSUME\"\r\n } else {\r\n throw Error(\"non exhaustive match\")\r\n }\r\n}\r\n\r\nfunction buildAdaptivePredictError(\r\n path: IToken[],\r\n previous: DFAState,\r\n current: IToken\r\n): AdaptivePredictError {\r\n const nextTransitions = flatMap(\r\n previous.configs.elements,\r\n (e) => e.state.transitions\r\n )\r\n const nextTokenTypes = uniqBy(\r\n nextTransitions\r\n .filter((e): e is AtomTransition => e instanceof AtomTransition)\r\n .map((e) => e.tokenType),\r\n (e) => e.tokenTypeIdx\r\n )\r\n return {\r\n actualToken: current,\r\n possibleTokenTypes: nextTokenTypes,\r\n tokenPath: path\r\n }\r\n}\r\n\r\nfunction getExistingTargetState(\r\n state: DFAState,\r\n token: IToken\r\n): DFAState | undefined {\r\n return state.edges[token.tokenTypeIdx]\r\n}\r\n\r\nfunction computeReachSet(\r\n configs: ATNConfigSet,\r\n token: IToken,\r\n predicateSet: PredicateSet\r\n): ATNConfigSet {\r\n const intermediate = new ATNConfigSet()\r\n const skippedStopStates: ATNConfig[] = []\r\n\r\n for (const c of configs.elements) {\r\n if (predicateSet.is(c.alt) === false) {\r\n continue\r\n }\r\n if (c.state.type === ATN_RULE_STOP) {\r\n skippedStopStates.push(c)\r\n continue\r\n }\r\n const transitionLength = c.state.transitions.length\r\n for (let i = 0; i < transitionLength; i++) {\r\n const transition = c.state.transitions[i]\r\n const target = getReachableTarget(transition, token)\r\n if (target !== undefined) {\r\n intermediate.add({\r\n state: target,\r\n alt: c.alt,\r\n stack: c.stack\r\n })\r\n }\r\n }\r\n }\r\n\r\n let reach: ATNConfigSet | undefined\r\n\r\n if (skippedStopStates.length === 0 && intermediate.size === 1) {\r\n reach = intermediate\r\n }\r\n\r\n if (reach === undefined) {\r\n reach = new ATNConfigSet()\r\n for (const c of intermediate.elements) {\r\n closure(c, reach)\r\n }\r\n }\r\n\r\n if (skippedStopStates.length > 0 && !hasConfigInRuleStopState(reach)) {\r\n for (const c of skippedStopStates) {\r\n reach.add(c)\r\n }\r\n }\r\n\r\n return reach\r\n}\r\n\r\nfunction getReachableTarget(\r\n transition: Transition,\r\n token: IToken\r\n): ATNState | undefined {\r\n if (\r\n transition instanceof AtomTransition &&\r\n tokenMatcher(token, transition.tokenType)\r\n ) {\r\n return transition.target\r\n }\r\n return undefined\r\n}\r\n\r\nfunction getUniqueAlt(\r\n configs: ATNConfigSet,\r\n predicateSet: PredicateSet\r\n): number | undefined {\r\n let alt: number | undefined\r\n for (const c of configs.elements) {\r\n if (predicateSet.is(c.alt) === true) {\r\n if (alt === undefined) {\r\n alt = c.alt\r\n } else if (alt !== c.alt) {\r\n return undefined\r\n }\r\n }\r\n }\r\n return alt\r\n}\r\n\r\nfunction newDFAState(closure: ATNConfigSet): DFAState {\r\n return {\r\n configs: closure,\r\n edges: {},\r\n isAcceptState: false,\r\n prediction: -1\r\n }\r\n}\r\n\r\nfunction addDFAEdge(\r\n dfa: DFA,\r\n from: DFAState,\r\n token: IToken,\r\n to: DFAState\r\n): DFAState {\r\n to = addDFAState(dfa, to)\r\n from.edges[token.tokenTypeIdx] = to\r\n return to\r\n}\r\n\r\nfunction addDFAState(dfa: DFA, state: DFAState): DFAState {\r\n if (state === DFA_ERROR) {\r\n return state\r\n }\r\n // Repetitions have the same config set\r\n // Therefore, storing the key of the config in a map allows us to create a loop in our DFA\r\n const mapKey = state.configs.key\r\n const existing = dfa.states[mapKey]\r\n if (existing !== undefined) {\r\n return existing\r\n }\r\n state.configs.finalize()\r\n dfa.states[mapKey] = state\r\n return state\r\n}\r\n\r\nfunction computeStartState(atnState: ATNState): ATNConfigSet {\r\n const configs = new ATNConfigSet()\r\n\r\n const numberOfTransitions = atnState.transitions.length\r\n for (let i = 0; i < numberOfTransitions; i++) {\r\n const target = atnState.transitions[i].target\r\n const config: ATNConfig = {\r\n state: target,\r\n alt: i,\r\n stack: []\r\n }\r\n closure(config, configs)\r\n }\r\n\r\n return configs\r\n}\r\n\r\nfunction closure(config: ATNConfig, configs: ATNConfigSet): void {\r\n const p = config.state\r\n\r\n if (p.type === ATN_RULE_STOP) {\r\n if (config.stack.length > 0) {\r\n const atnStack = [...config.stack]\r\n const followState = atnStack.pop()!\r\n const followConfig: ATNConfig = {\r\n state: followState,\r\n alt: config.alt,\r\n stack: atnStack\r\n }\r\n closure(followConfig, configs)\r\n } else {\r\n // Dipping into outer context, simply add the config\r\n // This will stop computation once every config is at the rule stop state\r\n configs.add(config)\r\n }\r\n return\r\n }\r\n\r\n if (!p.epsilonOnlyTransitions) {\r\n configs.add(config)\r\n }\r\n\r\n const transitionLength = p.transitions.length\r\n for (let i = 0; i < transitionLength; i++) {\r\n const transition = p.transitions[i]\r\n const c = getEpsilonTarget(config, transition)\r\n\r\n if (c !== undefined) {\r\n closure(c, configs)\r\n }\r\n }\r\n}\r\n\r\nfunction getEpsilonTarget(\r\n config: ATNConfig,\r\n transition: Transition\r\n): ATNConfig | undefined {\r\n if (transition instanceof EpsilonTransition) {\r\n return {\r\n state: transition.target,\r\n alt: config.alt,\r\n stack: config.stack\r\n }\r\n } else if (transition instanceof RuleTransition) {\r\n const stack = [...config.stack, transition.followState]\r\n return {\r\n state: transition.target,\r\n alt: config.alt,\r\n stack\r\n }\r\n }\r\n return undefined\r\n}\r\n\r\nfunction hasConfigInRuleStopState(configs: ATNConfigSet): boolean {\r\n for (const c of configs.elements) {\r\n if (c.state.type === ATN_RULE_STOP) {\r\n return true\r\n }\r\n }\r\n return false\r\n}\r\n\r\nfunction allConfigsInRuleStopStates(configs: ATNConfigSet): boolean {\r\n for (const c of configs.elements) {\r\n if (c.state.type !== ATN_RULE_STOP) {\r\n return false\r\n }\r\n }\r\n return true\r\n}\r\n\r\nfunction hasConflictTerminatingPrediction(configs: ATNConfigSet): boolean {\r\n if (allConfigsInRuleStopStates(configs)) {\r\n return true\r\n }\r\n const altSets = getConflictingAltSets(configs.elements)\r\n const heuristic =\r\n hasConflictingAltSet(altSets) && !hasStateAssociatedWithOneAlt(altSets)\r\n return heuristic\r\n}\r\n\r\nfunction getConflictingAltSets(\r\n configs: readonly ATNConfig[]\r\n): Map> {\r\n const configToAlts = new Map>()\r\n for (const c of configs) {\r\n const key = getATNConfigKey(c, false)\r\n let alts = configToAlts.get(key)\r\n if (alts === undefined) {\r\n alts = {}\r\n configToAlts.set(key, alts)\r\n }\r\n alts[c.alt] = true\r\n }\r\n return configToAlts\r\n}\r\n\r\nfunction hasConflictingAltSet(\r\n altSets: Map>\r\n): boolean {\r\n for (const value of Array.from(altSets.values())) {\r\n if (Object.keys(value).length > 1) {\r\n return true\r\n }\r\n }\r\n return false\r\n}\r\n\r\nfunction hasStateAssociatedWithOneAlt(\r\n altSets: Map>\r\n): boolean {\r\n for (const value of Array.from(altSets.values())) {\r\n if (Object.keys(value).length === 1) {\r\n return true\r\n }\r\n }\r\n return false\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nexport {\r\n AmbiguityReport,\r\n LLStarLookaheadOptions,\r\n LLStarLookaheadStrategy\r\n} from './all-star-lookahead.js';\r\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nexport var DocumentUri;\n(function (DocumentUri) {\n function is(value) {\n return typeof value === 'string';\n }\n DocumentUri.is = is;\n})(DocumentUri || (DocumentUri = {}));\nexport var URI;\n(function (URI) {\n function is(value) {\n return typeof value === 'string';\n }\n URI.is = is;\n})(URI || (URI = {}));\nexport var integer;\n(function (integer) {\n integer.MIN_VALUE = -2147483648;\n integer.MAX_VALUE = 2147483647;\n function is(value) {\n return typeof value === 'number' && integer.MIN_VALUE <= value && value <= integer.MAX_VALUE;\n }\n integer.is = is;\n})(integer || (integer = {}));\nexport var uinteger;\n(function (uinteger) {\n uinteger.MIN_VALUE = 0;\n uinteger.MAX_VALUE = 2147483647;\n function is(value) {\n return typeof value === 'number' && uinteger.MIN_VALUE <= value && value <= uinteger.MAX_VALUE;\n }\n uinteger.is = is;\n})(uinteger || (uinteger = {}));\n/**\n * The Position namespace provides helper functions to work with\n * {@link Position} literals.\n */\nexport var Position;\n(function (Position) {\n /**\n * Creates a new Position literal from the given line and character.\n * @param line The position's line.\n * @param character The position's character.\n */\n function create(line, character) {\n if (line === Number.MAX_VALUE) {\n line = uinteger.MAX_VALUE;\n }\n if (character === Number.MAX_VALUE) {\n character = uinteger.MAX_VALUE;\n }\n return { line, character };\n }\n Position.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Position} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character);\n }\n Position.is = is;\n})(Position || (Position = {}));\n/**\n * The Range namespace provides helper functions to work with\n * {@link Range} literals.\n */\nexport var Range;\n(function (Range) {\n function create(one, two, three, four) {\n if (Is.uinteger(one) && Is.uinteger(two) && Is.uinteger(three) && Is.uinteger(four)) {\n return { start: Position.create(one, two), end: Position.create(three, four) };\n }\n else if (Position.is(one) && Position.is(two)) {\n return { start: one, end: two };\n }\n else {\n throw new Error(`Range#create called with invalid arguments[${one}, ${two}, ${three}, ${four}]`);\n }\n }\n Range.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Range} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);\n }\n Range.is = is;\n})(Range || (Range = {}));\n/**\n * The Location namespace provides helper functions to work with\n * {@link Location} literals.\n */\nexport var Location;\n(function (Location) {\n /**\n * Creates a Location literal.\n * @param uri The location's uri.\n * @param range The location's range.\n */\n function create(uri, range) {\n return { uri, range };\n }\n Location.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Location} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));\n }\n Location.is = is;\n})(Location || (Location = {}));\n/**\n * The LocationLink namespace provides helper functions to work with\n * {@link LocationLink} literals.\n */\nexport var LocationLink;\n(function (LocationLink) {\n /**\n * Creates a LocationLink literal.\n * @param targetUri The definition's uri.\n * @param targetRange The full range of the definition.\n * @param targetSelectionRange The span of the symbol definition at the target.\n * @param originSelectionRange The span of the symbol being defined in the originating source file.\n */\n function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {\n return { targetUri, targetRange, targetSelectionRange, originSelectionRange };\n }\n LocationLink.create = create;\n /**\n * Checks whether the given literal conforms to the {@link LocationLink} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri)\n && Range.is(candidate.targetSelectionRange)\n && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));\n }\n LocationLink.is = is;\n})(LocationLink || (LocationLink = {}));\n/**\n * The Color namespace provides helper functions to work with\n * {@link Color} literals.\n */\nexport var Color;\n(function (Color) {\n /**\n * Creates a new Color literal.\n */\n function create(red, green, blue, alpha) {\n return {\n red,\n green,\n blue,\n alpha,\n };\n }\n Color.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Color} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.numberRange(candidate.red, 0, 1)\n && Is.numberRange(candidate.green, 0, 1)\n && Is.numberRange(candidate.blue, 0, 1)\n && Is.numberRange(candidate.alpha, 0, 1);\n }\n Color.is = is;\n})(Color || (Color = {}));\n/**\n * The ColorInformation namespace provides helper functions to work with\n * {@link ColorInformation} literals.\n */\nexport var ColorInformation;\n(function (ColorInformation) {\n /**\n * Creates a new ColorInformation literal.\n */\n function create(range, color) {\n return {\n range,\n color,\n };\n }\n ColorInformation.create = create;\n /**\n * Checks whether the given literal conforms to the {@link ColorInformation} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.range) && Color.is(candidate.color);\n }\n ColorInformation.is = is;\n})(ColorInformation || (ColorInformation = {}));\n/**\n * The Color namespace provides helper functions to work with\n * {@link ColorPresentation} literals.\n */\nexport var ColorPresentation;\n(function (ColorPresentation) {\n /**\n * Creates a new ColorInformation literal.\n */\n function create(label, textEdit, additionalTextEdits) {\n return {\n label,\n textEdit,\n additionalTextEdits,\n };\n }\n ColorPresentation.create = create;\n /**\n * Checks whether the given literal conforms to the {@link ColorInformation} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.string(candidate.label)\n && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate))\n && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));\n }\n ColorPresentation.is = is;\n})(ColorPresentation || (ColorPresentation = {}));\n/**\n * A set of predefined range kinds.\n */\nexport var FoldingRangeKind;\n(function (FoldingRangeKind) {\n /**\n * Folding range for a comment\n */\n FoldingRangeKind.Comment = 'comment';\n /**\n * Folding range for an import or include\n */\n FoldingRangeKind.Imports = 'imports';\n /**\n * Folding range for a region (e.g. `#region`)\n */\n FoldingRangeKind.Region = 'region';\n})(FoldingRangeKind || (FoldingRangeKind = {}));\n/**\n * The folding range namespace provides helper functions to work with\n * {@link FoldingRange} literals.\n */\nexport var FoldingRange;\n(function (FoldingRange) {\n /**\n * Creates a new FoldingRange literal.\n */\n function create(startLine, endLine, startCharacter, endCharacter, kind, collapsedText) {\n const result = {\n startLine,\n endLine\n };\n if (Is.defined(startCharacter)) {\n result.startCharacter = startCharacter;\n }\n if (Is.defined(endCharacter)) {\n result.endCharacter = endCharacter;\n }\n if (Is.defined(kind)) {\n result.kind = kind;\n }\n if (Is.defined(collapsedText)) {\n result.collapsedText = collapsedText;\n }\n return result;\n }\n FoldingRange.create = create;\n /**\n * Checks whether the given literal conforms to the {@link FoldingRange} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.uinteger(candidate.startLine) && Is.uinteger(candidate.startLine)\n && (Is.undefined(candidate.startCharacter) || Is.uinteger(candidate.startCharacter))\n && (Is.undefined(candidate.endCharacter) || Is.uinteger(candidate.endCharacter))\n && (Is.undefined(candidate.kind) || Is.string(candidate.kind));\n }\n FoldingRange.is = is;\n})(FoldingRange || (FoldingRange = {}));\n/**\n * The DiagnosticRelatedInformation namespace provides helper functions to work with\n * {@link DiagnosticRelatedInformation} literals.\n */\nexport var DiagnosticRelatedInformation;\n(function (DiagnosticRelatedInformation) {\n /**\n * Creates a new DiagnosticRelatedInformation literal.\n */\n function create(location, message) {\n return {\n location,\n message\n };\n }\n DiagnosticRelatedInformation.create = create;\n /**\n * Checks whether the given literal conforms to the {@link DiagnosticRelatedInformation} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);\n }\n DiagnosticRelatedInformation.is = is;\n})(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));\n/**\n * The diagnostic's severity.\n */\nexport var DiagnosticSeverity;\n(function (DiagnosticSeverity) {\n /**\n * Reports an error.\n */\n DiagnosticSeverity.Error = 1;\n /**\n * Reports a warning.\n */\n DiagnosticSeverity.Warning = 2;\n /**\n * Reports an information.\n */\n DiagnosticSeverity.Information = 3;\n /**\n * Reports a hint.\n */\n DiagnosticSeverity.Hint = 4;\n})(DiagnosticSeverity || (DiagnosticSeverity = {}));\n/**\n * The diagnostic tags.\n *\n * @since 3.15.0\n */\nexport var DiagnosticTag;\n(function (DiagnosticTag) {\n /**\n * Unused or unnecessary code.\n *\n * Clients are allowed to render diagnostics with this tag faded out instead of having\n * an error squiggle.\n */\n DiagnosticTag.Unnecessary = 1;\n /**\n * Deprecated or obsolete code.\n *\n * Clients are allowed to rendered diagnostics with this tag strike through.\n */\n DiagnosticTag.Deprecated = 2;\n})(DiagnosticTag || (DiagnosticTag = {}));\n/**\n * The CodeDescription namespace provides functions to deal with descriptions for diagnostic codes.\n *\n * @since 3.16.0\n */\nexport var CodeDescription;\n(function (CodeDescription) {\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.string(candidate.href);\n }\n CodeDescription.is = is;\n})(CodeDescription || (CodeDescription = {}));\n/**\n * The Diagnostic namespace provides helper functions to work with\n * {@link Diagnostic} literals.\n */\nexport var Diagnostic;\n(function (Diagnostic) {\n /**\n * Creates a new Diagnostic literal.\n */\n function create(range, message, severity, code, source, relatedInformation) {\n let result = { range, message };\n if (Is.defined(severity)) {\n result.severity = severity;\n }\n if (Is.defined(code)) {\n result.code = code;\n }\n if (Is.defined(source)) {\n result.source = source;\n }\n if (Is.defined(relatedInformation)) {\n result.relatedInformation = relatedInformation;\n }\n return result;\n }\n Diagnostic.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Diagnostic} interface.\n */\n function is(value) {\n var _a;\n let candidate = value;\n return Is.defined(candidate)\n && Range.is(candidate.range)\n && Is.string(candidate.message)\n && (Is.number(candidate.severity) || Is.undefined(candidate.severity))\n && (Is.integer(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code))\n && (Is.undefined(candidate.codeDescription) || (Is.string((_a = candidate.codeDescription) === null || _a === void 0 ? void 0 : _a.href)))\n && (Is.string(candidate.source) || Is.undefined(candidate.source))\n && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));\n }\n Diagnostic.is = is;\n})(Diagnostic || (Diagnostic = {}));\n/**\n * The Command namespace provides helper functions to work with\n * {@link Command} literals.\n */\nexport var Command;\n(function (Command) {\n /**\n * Creates a new Command literal.\n */\n function create(title, command, ...args) {\n let result = { title, command };\n if (Is.defined(args) && args.length > 0) {\n result.arguments = args;\n }\n return result;\n }\n Command.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Command} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);\n }\n Command.is = is;\n})(Command || (Command = {}));\n/**\n * The TextEdit namespace provides helper function to create replace,\n * insert and delete edits more easily.\n */\nexport var TextEdit;\n(function (TextEdit) {\n /**\n * Creates a replace text edit.\n * @param range The range of text to be replaced.\n * @param newText The new text.\n */\n function replace(range, newText) {\n return { range, newText };\n }\n TextEdit.replace = replace;\n /**\n * Creates an insert text edit.\n * @param position The position to insert the text at.\n * @param newText The text to be inserted.\n */\n function insert(position, newText) {\n return { range: { start: position, end: position }, newText };\n }\n TextEdit.insert = insert;\n /**\n * Creates a delete text edit.\n * @param range The range of text to be deleted.\n */\n function del(range) {\n return { range, newText: '' };\n }\n TextEdit.del = del;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate)\n && Is.string(candidate.newText)\n && Range.is(candidate.range);\n }\n TextEdit.is = is;\n})(TextEdit || (TextEdit = {}));\nexport var ChangeAnnotation;\n(function (ChangeAnnotation) {\n function create(label, needsConfirmation, description) {\n const result = { label };\n if (needsConfirmation !== undefined) {\n result.needsConfirmation = needsConfirmation;\n }\n if (description !== undefined) {\n result.description = description;\n }\n return result;\n }\n ChangeAnnotation.create = create;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Is.string(candidate.label) &&\n (Is.boolean(candidate.needsConfirmation) || candidate.needsConfirmation === undefined) &&\n (Is.string(candidate.description) || candidate.description === undefined);\n }\n ChangeAnnotation.is = is;\n})(ChangeAnnotation || (ChangeAnnotation = {}));\nexport var ChangeAnnotationIdentifier;\n(function (ChangeAnnotationIdentifier) {\n function is(value) {\n const candidate = value;\n return Is.string(candidate);\n }\n ChangeAnnotationIdentifier.is = is;\n})(ChangeAnnotationIdentifier || (ChangeAnnotationIdentifier = {}));\nexport var AnnotatedTextEdit;\n(function (AnnotatedTextEdit) {\n /**\n * Creates an annotated replace text edit.\n *\n * @param range The range of text to be replaced.\n * @param newText The new text.\n * @param annotation The annotation.\n */\n function replace(range, newText, annotation) {\n return { range, newText, annotationId: annotation };\n }\n AnnotatedTextEdit.replace = replace;\n /**\n * Creates an annotated insert text edit.\n *\n * @param position The position to insert the text at.\n * @param newText The text to be inserted.\n * @param annotation The annotation.\n */\n function insert(position, newText, annotation) {\n return { range: { start: position, end: position }, newText, annotationId: annotation };\n }\n AnnotatedTextEdit.insert = insert;\n /**\n * Creates an annotated delete text edit.\n *\n * @param range The range of text to be deleted.\n * @param annotation The annotation.\n */\n function del(range, annotation) {\n return { range, newText: '', annotationId: annotation };\n }\n AnnotatedTextEdit.del = del;\n function is(value) {\n const candidate = value;\n return TextEdit.is(candidate) && (ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n AnnotatedTextEdit.is = is;\n})(AnnotatedTextEdit || (AnnotatedTextEdit = {}));\n/**\n * The TextDocumentEdit namespace provides helper function to create\n * an edit that manipulates a text document.\n */\nexport var TextDocumentEdit;\n(function (TextDocumentEdit) {\n /**\n * Creates a new `TextDocumentEdit`\n */\n function create(textDocument, edits) {\n return { textDocument, edits };\n }\n TextDocumentEdit.create = create;\n function is(value) {\n let candidate = value;\n return Is.defined(candidate)\n && OptionalVersionedTextDocumentIdentifier.is(candidate.textDocument)\n && Array.isArray(candidate.edits);\n }\n TextDocumentEdit.is = is;\n})(TextDocumentEdit || (TextDocumentEdit = {}));\nexport var CreateFile;\n(function (CreateFile) {\n function create(uri, options, annotation) {\n let result = {\n kind: 'create',\n uri\n };\n if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {\n result.options = options;\n }\n if (annotation !== undefined) {\n result.annotationId = annotation;\n }\n return result;\n }\n CreateFile.create = create;\n function is(value) {\n let candidate = value;\n return candidate && candidate.kind === 'create' && Is.string(candidate.uri) && (candidate.options === undefined ||\n ((candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n CreateFile.is = is;\n})(CreateFile || (CreateFile = {}));\nexport var RenameFile;\n(function (RenameFile) {\n function create(oldUri, newUri, options, annotation) {\n let result = {\n kind: 'rename',\n oldUri,\n newUri\n };\n if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {\n result.options = options;\n }\n if (annotation !== undefined) {\n result.annotationId = annotation;\n }\n return result;\n }\n RenameFile.create = create;\n function is(value) {\n let candidate = value;\n return candidate && candidate.kind === 'rename' && Is.string(candidate.oldUri) && Is.string(candidate.newUri) && (candidate.options === undefined ||\n ((candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n RenameFile.is = is;\n})(RenameFile || (RenameFile = {}));\nexport var DeleteFile;\n(function (DeleteFile) {\n function create(uri, options, annotation) {\n let result = {\n kind: 'delete',\n uri\n };\n if (options !== undefined && (options.recursive !== undefined || options.ignoreIfNotExists !== undefined)) {\n result.options = options;\n }\n if (annotation !== undefined) {\n result.annotationId = annotation;\n }\n return result;\n }\n DeleteFile.create = create;\n function is(value) {\n let candidate = value;\n return candidate && candidate.kind === 'delete' && Is.string(candidate.uri) && (candidate.options === undefined ||\n ((candidate.options.recursive === undefined || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === undefined || Is.boolean(candidate.options.ignoreIfNotExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n DeleteFile.is = is;\n})(DeleteFile || (DeleteFile = {}));\nexport var WorkspaceEdit;\n(function (WorkspaceEdit) {\n function is(value) {\n let candidate = value;\n return candidate &&\n (candidate.changes !== undefined || candidate.documentChanges !== undefined) &&\n (candidate.documentChanges === undefined || candidate.documentChanges.every((change) => {\n if (Is.string(change.kind)) {\n return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);\n }\n else {\n return TextDocumentEdit.is(change);\n }\n }));\n }\n WorkspaceEdit.is = is;\n})(WorkspaceEdit || (WorkspaceEdit = {}));\nclass TextEditChangeImpl {\n constructor(edits, changeAnnotations) {\n this.edits = edits;\n this.changeAnnotations = changeAnnotations;\n }\n insert(position, newText, annotation) {\n let edit;\n let id;\n if (annotation === undefined) {\n edit = TextEdit.insert(position, newText);\n }\n else if (ChangeAnnotationIdentifier.is(annotation)) {\n id = annotation;\n edit = AnnotatedTextEdit.insert(position, newText, annotation);\n }\n else {\n this.assertChangeAnnotations(this.changeAnnotations);\n id = this.changeAnnotations.manage(annotation);\n edit = AnnotatedTextEdit.insert(position, newText, id);\n }\n this.edits.push(edit);\n if (id !== undefined) {\n return id;\n }\n }\n replace(range, newText, annotation) {\n let edit;\n let id;\n if (annotation === undefined) {\n edit = TextEdit.replace(range, newText);\n }\n else if (ChangeAnnotationIdentifier.is(annotation)) {\n id = annotation;\n edit = AnnotatedTextEdit.replace(range, newText, annotation);\n }\n else {\n this.assertChangeAnnotations(this.changeAnnotations);\n id = this.changeAnnotations.manage(annotation);\n edit = AnnotatedTextEdit.replace(range, newText, id);\n }\n this.edits.push(edit);\n if (id !== undefined) {\n return id;\n }\n }\n delete(range, annotation) {\n let edit;\n let id;\n if (annotation === undefined) {\n edit = TextEdit.del(range);\n }\n else if (ChangeAnnotationIdentifier.is(annotation)) {\n id = annotation;\n edit = AnnotatedTextEdit.del(range, annotation);\n }\n else {\n this.assertChangeAnnotations(this.changeAnnotations);\n id = this.changeAnnotations.manage(annotation);\n edit = AnnotatedTextEdit.del(range, id);\n }\n this.edits.push(edit);\n if (id !== undefined) {\n return id;\n }\n }\n add(edit) {\n this.edits.push(edit);\n }\n all() {\n return this.edits;\n }\n clear() {\n this.edits.splice(0, this.edits.length);\n }\n assertChangeAnnotations(value) {\n if (value === undefined) {\n throw new Error(`Text edit change is not configured to manage change annotations.`);\n }\n }\n}\n/**\n * A helper class\n */\nclass ChangeAnnotations {\n constructor(annotations) {\n this._annotations = annotations === undefined ? Object.create(null) : annotations;\n this._counter = 0;\n this._size = 0;\n }\n all() {\n return this._annotations;\n }\n get size() {\n return this._size;\n }\n manage(idOrAnnotation, annotation) {\n let id;\n if (ChangeAnnotationIdentifier.is(idOrAnnotation)) {\n id = idOrAnnotation;\n }\n else {\n id = this.nextId();\n annotation = idOrAnnotation;\n }\n if (this._annotations[id] !== undefined) {\n throw new Error(`Id ${id} is already in use.`);\n }\n if (annotation === undefined) {\n throw new Error(`No annotation provided for id ${id}`);\n }\n this._annotations[id] = annotation;\n this._size++;\n return id;\n }\n nextId() {\n this._counter++;\n return this._counter.toString();\n }\n}\n/**\n * A workspace change helps constructing changes to a workspace.\n */\nexport class WorkspaceChange {\n constructor(workspaceEdit) {\n this._textEditChanges = Object.create(null);\n if (workspaceEdit !== undefined) {\n this._workspaceEdit = workspaceEdit;\n if (workspaceEdit.documentChanges) {\n this._changeAnnotations = new ChangeAnnotations(workspaceEdit.changeAnnotations);\n workspaceEdit.changeAnnotations = this._changeAnnotations.all();\n workspaceEdit.documentChanges.forEach((change) => {\n if (TextDocumentEdit.is(change)) {\n const textEditChange = new TextEditChangeImpl(change.edits, this._changeAnnotations);\n this._textEditChanges[change.textDocument.uri] = textEditChange;\n }\n });\n }\n else if (workspaceEdit.changes) {\n Object.keys(workspaceEdit.changes).forEach((key) => {\n const textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);\n this._textEditChanges[key] = textEditChange;\n });\n }\n }\n else {\n this._workspaceEdit = {};\n }\n }\n /**\n * Returns the underlying {@link WorkspaceEdit} literal\n * use to be returned from a workspace edit operation like rename.\n */\n get edit() {\n this.initDocumentChanges();\n if (this._changeAnnotations !== undefined) {\n if (this._changeAnnotations.size === 0) {\n this._workspaceEdit.changeAnnotations = undefined;\n }\n else {\n this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();\n }\n }\n return this._workspaceEdit;\n }\n getTextEditChange(key) {\n if (OptionalVersionedTextDocumentIdentifier.is(key)) {\n this.initDocumentChanges();\n if (this._workspaceEdit.documentChanges === undefined) {\n throw new Error('Workspace edit is not configured for document changes.');\n }\n const textDocument = { uri: key.uri, version: key.version };\n let result = this._textEditChanges[textDocument.uri];\n if (!result) {\n const edits = [];\n const textDocumentEdit = {\n textDocument,\n edits\n };\n this._workspaceEdit.documentChanges.push(textDocumentEdit);\n result = new TextEditChangeImpl(edits, this._changeAnnotations);\n this._textEditChanges[textDocument.uri] = result;\n }\n return result;\n }\n else {\n this.initChanges();\n if (this._workspaceEdit.changes === undefined) {\n throw new Error('Workspace edit is not configured for normal text edit changes.');\n }\n let result = this._textEditChanges[key];\n if (!result) {\n let edits = [];\n this._workspaceEdit.changes[key] = edits;\n result = new TextEditChangeImpl(edits);\n this._textEditChanges[key] = result;\n }\n return result;\n }\n }\n initDocumentChanges() {\n if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {\n this._changeAnnotations = new ChangeAnnotations();\n this._workspaceEdit.documentChanges = [];\n this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();\n }\n }\n initChanges() {\n if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {\n this._workspaceEdit.changes = Object.create(null);\n }\n }\n createFile(uri, optionsOrAnnotation, options) {\n this.initDocumentChanges();\n if (this._workspaceEdit.documentChanges === undefined) {\n throw new Error('Workspace edit is not configured for document changes.');\n }\n let annotation;\n if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n annotation = optionsOrAnnotation;\n }\n else {\n options = optionsOrAnnotation;\n }\n let operation;\n let id;\n if (annotation === undefined) {\n operation = CreateFile.create(uri, options);\n }\n else {\n id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);\n operation = CreateFile.create(uri, options, id);\n }\n this._workspaceEdit.documentChanges.push(operation);\n if (id !== undefined) {\n return id;\n }\n }\n renameFile(oldUri, newUri, optionsOrAnnotation, options) {\n this.initDocumentChanges();\n if (this._workspaceEdit.documentChanges === undefined) {\n throw new Error('Workspace edit is not configured for document changes.');\n }\n let annotation;\n if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n annotation = optionsOrAnnotation;\n }\n else {\n options = optionsOrAnnotation;\n }\n let operation;\n let id;\n if (annotation === undefined) {\n operation = RenameFile.create(oldUri, newUri, options);\n }\n else {\n id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);\n operation = RenameFile.create(oldUri, newUri, options, id);\n }\n this._workspaceEdit.documentChanges.push(operation);\n if (id !== undefined) {\n return id;\n }\n }\n deleteFile(uri, optionsOrAnnotation, options) {\n this.initDocumentChanges();\n if (this._workspaceEdit.documentChanges === undefined) {\n throw new Error('Workspace edit is not configured for document changes.');\n }\n let annotation;\n if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n annotation = optionsOrAnnotation;\n }\n else {\n options = optionsOrAnnotation;\n }\n let operation;\n let id;\n if (annotation === undefined) {\n operation = DeleteFile.create(uri, options);\n }\n else {\n id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);\n operation = DeleteFile.create(uri, options, id);\n }\n this._workspaceEdit.documentChanges.push(operation);\n if (id !== undefined) {\n return id;\n }\n }\n}\n/**\n * The TextDocumentIdentifier namespace provides helper functions to work with\n * {@link TextDocumentIdentifier} literals.\n */\nexport var TextDocumentIdentifier;\n(function (TextDocumentIdentifier) {\n /**\n * Creates a new TextDocumentIdentifier literal.\n * @param uri The document's uri.\n */\n function create(uri) {\n return { uri };\n }\n TextDocumentIdentifier.create = create;\n /**\n * Checks whether the given literal conforms to the {@link TextDocumentIdentifier} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri);\n }\n TextDocumentIdentifier.is = is;\n})(TextDocumentIdentifier || (TextDocumentIdentifier = {}));\n/**\n * The VersionedTextDocumentIdentifier namespace provides helper functions to work with\n * {@link VersionedTextDocumentIdentifier} literals.\n */\nexport var VersionedTextDocumentIdentifier;\n(function (VersionedTextDocumentIdentifier) {\n /**\n * Creates a new VersionedTextDocumentIdentifier literal.\n * @param uri The document's uri.\n * @param version The document's version.\n */\n function create(uri, version) {\n return { uri, version };\n }\n VersionedTextDocumentIdentifier.create = create;\n /**\n * Checks whether the given literal conforms to the {@link VersionedTextDocumentIdentifier} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version);\n }\n VersionedTextDocumentIdentifier.is = is;\n})(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));\n/**\n * The OptionalVersionedTextDocumentIdentifier namespace provides helper functions to work with\n * {@link OptionalVersionedTextDocumentIdentifier} literals.\n */\nexport var OptionalVersionedTextDocumentIdentifier;\n(function (OptionalVersionedTextDocumentIdentifier) {\n /**\n * Creates a new OptionalVersionedTextDocumentIdentifier literal.\n * @param uri The document's uri.\n * @param version The document's version.\n */\n function create(uri, version) {\n return { uri, version };\n }\n OptionalVersionedTextDocumentIdentifier.create = create;\n /**\n * Checks whether the given literal conforms to the {@link OptionalVersionedTextDocumentIdentifier} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.integer(candidate.version));\n }\n OptionalVersionedTextDocumentIdentifier.is = is;\n})(OptionalVersionedTextDocumentIdentifier || (OptionalVersionedTextDocumentIdentifier = {}));\n/**\n * The TextDocumentItem namespace provides helper functions to work with\n * {@link TextDocumentItem} literals.\n */\nexport var TextDocumentItem;\n(function (TextDocumentItem) {\n /**\n * Creates a new TextDocumentItem literal.\n * @param uri The document's uri.\n * @param languageId The document's language identifier.\n * @param version The document's version number.\n * @param text The document's text.\n */\n function create(uri, languageId, version, text) {\n return { uri, languageId, version, text };\n }\n TextDocumentItem.create = create;\n /**\n * Checks whether the given literal conforms to the {@link TextDocumentItem} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.integer(candidate.version) && Is.string(candidate.text);\n }\n TextDocumentItem.is = is;\n})(TextDocumentItem || (TextDocumentItem = {}));\n/**\n * Describes the content type that a client supports in various\n * result literals like `Hover`, `ParameterInfo` or `CompletionItem`.\n *\n * Please note that `MarkupKinds` must not start with a `$`. This kinds\n * are reserved for internal usage.\n */\nexport var MarkupKind;\n(function (MarkupKind) {\n /**\n * Plain text is supported as a content format\n */\n MarkupKind.PlainText = 'plaintext';\n /**\n * Markdown is supported as a content format\n */\n MarkupKind.Markdown = 'markdown';\n /**\n * Checks whether the given value is a value of the {@link MarkupKind} type.\n */\n function is(value) {\n const candidate = value;\n return candidate === MarkupKind.PlainText || candidate === MarkupKind.Markdown;\n }\n MarkupKind.is = is;\n})(MarkupKind || (MarkupKind = {}));\nexport var MarkupContent;\n(function (MarkupContent) {\n /**\n * Checks whether the given value conforms to the {@link MarkupContent} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);\n }\n MarkupContent.is = is;\n})(MarkupContent || (MarkupContent = {}));\n/**\n * The kind of a completion entry.\n */\nexport var CompletionItemKind;\n(function (CompletionItemKind) {\n CompletionItemKind.Text = 1;\n CompletionItemKind.Method = 2;\n CompletionItemKind.Function = 3;\n CompletionItemKind.Constructor = 4;\n CompletionItemKind.Field = 5;\n CompletionItemKind.Variable = 6;\n CompletionItemKind.Class = 7;\n CompletionItemKind.Interface = 8;\n CompletionItemKind.Module = 9;\n CompletionItemKind.Property = 10;\n CompletionItemKind.Unit = 11;\n CompletionItemKind.Value = 12;\n CompletionItemKind.Enum = 13;\n CompletionItemKind.Keyword = 14;\n CompletionItemKind.Snippet = 15;\n CompletionItemKind.Color = 16;\n CompletionItemKind.File = 17;\n CompletionItemKind.Reference = 18;\n CompletionItemKind.Folder = 19;\n CompletionItemKind.EnumMember = 20;\n CompletionItemKind.Constant = 21;\n CompletionItemKind.Struct = 22;\n CompletionItemKind.Event = 23;\n CompletionItemKind.Operator = 24;\n CompletionItemKind.TypeParameter = 25;\n})(CompletionItemKind || (CompletionItemKind = {}));\n/**\n * Defines whether the insert text in a completion item should be interpreted as\n * plain text or a snippet.\n */\nexport var InsertTextFormat;\n(function (InsertTextFormat) {\n /**\n * The primary text to be inserted is treated as a plain string.\n */\n InsertTextFormat.PlainText = 1;\n /**\n * The primary text to be inserted is treated as a snippet.\n *\n * A snippet can define tab stops and placeholders with `$1`, `$2`\n * and `${3:foo}`. `$0` defines the final tab stop, it defaults to\n * the end of the snippet. Placeholders with equal identifiers are linked,\n * that is typing in one will update others too.\n *\n * See also: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#snippet_syntax\n */\n InsertTextFormat.Snippet = 2;\n})(InsertTextFormat || (InsertTextFormat = {}));\n/**\n * Completion item tags are extra annotations that tweak the rendering of a completion\n * item.\n *\n * @since 3.15.0\n */\nexport var CompletionItemTag;\n(function (CompletionItemTag) {\n /**\n * Render a completion as obsolete, usually using a strike-out.\n */\n CompletionItemTag.Deprecated = 1;\n})(CompletionItemTag || (CompletionItemTag = {}));\n/**\n * The InsertReplaceEdit namespace provides functions to deal with insert / replace edits.\n *\n * @since 3.16.0\n */\nexport var InsertReplaceEdit;\n(function (InsertReplaceEdit) {\n /**\n * Creates a new insert / replace edit\n */\n function create(newText, insert, replace) {\n return { newText, insert, replace };\n }\n InsertReplaceEdit.create = create;\n /**\n * Checks whether the given literal conforms to the {@link InsertReplaceEdit} interface.\n */\n function is(value) {\n const candidate = value;\n return candidate && Is.string(candidate.newText) && Range.is(candidate.insert) && Range.is(candidate.replace);\n }\n InsertReplaceEdit.is = is;\n})(InsertReplaceEdit || (InsertReplaceEdit = {}));\n/**\n * How whitespace and indentation is handled during completion\n * item insertion.\n *\n * @since 3.16.0\n */\nexport var InsertTextMode;\n(function (InsertTextMode) {\n /**\n * The insertion or replace strings is taken as it is. If the\n * value is multi line the lines below the cursor will be\n * inserted using the indentation defined in the string value.\n * The client will not apply any kind of adjustments to the\n * string.\n */\n InsertTextMode.asIs = 1;\n /**\n * The editor adjusts leading whitespace of new lines so that\n * they match the indentation up to the cursor of the line for\n * which the item is accepted.\n *\n * Consider a line like this: <2tabs><3tabs>foo. Accepting a\n * multi line completion item is indented using 2 tabs and all\n * following lines inserted will be indented using 2 tabs as well.\n */\n InsertTextMode.adjustIndentation = 2;\n})(InsertTextMode || (InsertTextMode = {}));\nexport var CompletionItemLabelDetails;\n(function (CompletionItemLabelDetails) {\n function is(value) {\n const candidate = value;\n return candidate && (Is.string(candidate.detail) || candidate.detail === undefined) &&\n (Is.string(candidate.description) || candidate.description === undefined);\n }\n CompletionItemLabelDetails.is = is;\n})(CompletionItemLabelDetails || (CompletionItemLabelDetails = {}));\n/**\n * The CompletionItem namespace provides functions to deal with\n * completion items.\n */\nexport var CompletionItem;\n(function (CompletionItem) {\n /**\n * Create a completion item and seed it with a label.\n * @param label The completion item's label\n */\n function create(label) {\n return { label };\n }\n CompletionItem.create = create;\n})(CompletionItem || (CompletionItem = {}));\n/**\n * The CompletionList namespace provides functions to deal with\n * completion lists.\n */\nexport var CompletionList;\n(function (CompletionList) {\n /**\n * Creates a new completion list.\n *\n * @param items The completion items.\n * @param isIncomplete The list is not complete.\n */\n function create(items, isIncomplete) {\n return { items: items ? items : [], isIncomplete: !!isIncomplete };\n }\n CompletionList.create = create;\n})(CompletionList || (CompletionList = {}));\nexport var MarkedString;\n(function (MarkedString) {\n /**\n * Creates a marked string from plain text.\n *\n * @param plainText The plain text.\n */\n function fromPlainText(plainText) {\n return plainText.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g, '\\\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash\n }\n MarkedString.fromPlainText = fromPlainText;\n /**\n * Checks whether the given value conforms to the {@link MarkedString} type.\n */\n function is(value) {\n const candidate = value;\n return Is.string(candidate) || (Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value));\n }\n MarkedString.is = is;\n})(MarkedString || (MarkedString = {}));\nexport var Hover;\n(function (Hover) {\n /**\n * Checks whether the given value conforms to the {@link Hover} interface.\n */\n function is(value) {\n let candidate = value;\n return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) ||\n MarkedString.is(candidate.contents) ||\n Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === undefined || Range.is(value.range));\n }\n Hover.is = is;\n})(Hover || (Hover = {}));\n/**\n * The ParameterInformation namespace provides helper functions to work with\n * {@link ParameterInformation} literals.\n */\nexport var ParameterInformation;\n(function (ParameterInformation) {\n /**\n * Creates a new parameter information literal.\n *\n * @param label A label string.\n * @param documentation A doc string.\n */\n function create(label, documentation) {\n return documentation ? { label, documentation } : { label };\n }\n ParameterInformation.create = create;\n})(ParameterInformation || (ParameterInformation = {}));\n/**\n * The SignatureInformation namespace provides helper functions to work with\n * {@link SignatureInformation} literals.\n */\nexport var SignatureInformation;\n(function (SignatureInformation) {\n function create(label, documentation, ...parameters) {\n let result = { label };\n if (Is.defined(documentation)) {\n result.documentation = documentation;\n }\n if (Is.defined(parameters)) {\n result.parameters = parameters;\n }\n else {\n result.parameters = [];\n }\n return result;\n }\n SignatureInformation.create = create;\n})(SignatureInformation || (SignatureInformation = {}));\n/**\n * A document highlight kind.\n */\nexport var DocumentHighlightKind;\n(function (DocumentHighlightKind) {\n /**\n * A textual occurrence.\n */\n DocumentHighlightKind.Text = 1;\n /**\n * Read-access of a symbol, like reading a variable.\n */\n DocumentHighlightKind.Read = 2;\n /**\n * Write-access of a symbol, like writing to a variable.\n */\n DocumentHighlightKind.Write = 3;\n})(DocumentHighlightKind || (DocumentHighlightKind = {}));\n/**\n * DocumentHighlight namespace to provide helper functions to work with\n * {@link DocumentHighlight} literals.\n */\nexport var DocumentHighlight;\n(function (DocumentHighlight) {\n /**\n * Create a DocumentHighlight object.\n * @param range The range the highlight applies to.\n * @param kind The highlight kind\n */\n function create(range, kind) {\n let result = { range };\n if (Is.number(kind)) {\n result.kind = kind;\n }\n return result;\n }\n DocumentHighlight.create = create;\n})(DocumentHighlight || (DocumentHighlight = {}));\n/**\n * A symbol kind.\n */\nexport var SymbolKind;\n(function (SymbolKind) {\n SymbolKind.File = 1;\n SymbolKind.Module = 2;\n SymbolKind.Namespace = 3;\n SymbolKind.Package = 4;\n SymbolKind.Class = 5;\n SymbolKind.Method = 6;\n SymbolKind.Property = 7;\n SymbolKind.Field = 8;\n SymbolKind.Constructor = 9;\n SymbolKind.Enum = 10;\n SymbolKind.Interface = 11;\n SymbolKind.Function = 12;\n SymbolKind.Variable = 13;\n SymbolKind.Constant = 14;\n SymbolKind.String = 15;\n SymbolKind.Number = 16;\n SymbolKind.Boolean = 17;\n SymbolKind.Array = 18;\n SymbolKind.Object = 19;\n SymbolKind.Key = 20;\n SymbolKind.Null = 21;\n SymbolKind.EnumMember = 22;\n SymbolKind.Struct = 23;\n SymbolKind.Event = 24;\n SymbolKind.Operator = 25;\n SymbolKind.TypeParameter = 26;\n})(SymbolKind || (SymbolKind = {}));\n/**\n * Symbol tags are extra annotations that tweak the rendering of a symbol.\n *\n * @since 3.16\n */\nexport var SymbolTag;\n(function (SymbolTag) {\n /**\n * Render a symbol as obsolete, usually using a strike-out.\n */\n SymbolTag.Deprecated = 1;\n})(SymbolTag || (SymbolTag = {}));\nexport var SymbolInformation;\n(function (SymbolInformation) {\n /**\n * Creates a new symbol information literal.\n *\n * @param name The name of the symbol.\n * @param kind The kind of the symbol.\n * @param range The range of the location of the symbol.\n * @param uri The resource of the location of symbol.\n * @param containerName The name of the symbol containing the symbol.\n */\n function create(name, kind, range, uri, containerName) {\n let result = {\n name,\n kind,\n location: { uri, range }\n };\n if (containerName) {\n result.containerName = containerName;\n }\n return result;\n }\n SymbolInformation.create = create;\n})(SymbolInformation || (SymbolInformation = {}));\nexport var WorkspaceSymbol;\n(function (WorkspaceSymbol) {\n /**\n * Create a new workspace symbol.\n *\n * @param name The name of the symbol.\n * @param kind The kind of the symbol.\n * @param uri The resource of the location of the symbol.\n * @param range An options range of the location.\n * @returns A WorkspaceSymbol.\n */\n function create(name, kind, uri, range) {\n return range !== undefined\n ? { name, kind, location: { uri, range } }\n : { name, kind, location: { uri } };\n }\n WorkspaceSymbol.create = create;\n})(WorkspaceSymbol || (WorkspaceSymbol = {}));\nexport var DocumentSymbol;\n(function (DocumentSymbol) {\n /**\n * Creates a new symbol information literal.\n *\n * @param name The name of the symbol.\n * @param detail The detail of the symbol.\n * @param kind The kind of the symbol.\n * @param range The range of the symbol.\n * @param selectionRange The selectionRange of the symbol.\n * @param children Children of the symbol.\n */\n function create(name, detail, kind, range, selectionRange, children) {\n let result = {\n name,\n detail,\n kind,\n range,\n selectionRange\n };\n if (children !== undefined) {\n result.children = children;\n }\n return result;\n }\n DocumentSymbol.create = create;\n /**\n * Checks whether the given literal conforms to the {@link DocumentSymbol} interface.\n */\n function is(value) {\n let candidate = value;\n return candidate &&\n Is.string(candidate.name) && Is.number(candidate.kind) &&\n Range.is(candidate.range) && Range.is(candidate.selectionRange) &&\n (candidate.detail === undefined || Is.string(candidate.detail)) &&\n (candidate.deprecated === undefined || Is.boolean(candidate.deprecated)) &&\n (candidate.children === undefined || Array.isArray(candidate.children)) &&\n (candidate.tags === undefined || Array.isArray(candidate.tags));\n }\n DocumentSymbol.is = is;\n})(DocumentSymbol || (DocumentSymbol = {}));\n/**\n * A set of predefined code action kinds\n */\nexport var CodeActionKind;\n(function (CodeActionKind) {\n /**\n * Empty kind.\n */\n CodeActionKind.Empty = '';\n /**\n * Base kind for quickfix actions: 'quickfix'\n */\n CodeActionKind.QuickFix = 'quickfix';\n /**\n * Base kind for refactoring actions: 'refactor'\n */\n CodeActionKind.Refactor = 'refactor';\n /**\n * Base kind for refactoring extraction actions: 'refactor.extract'\n *\n * Example extract actions:\n *\n * - Extract method\n * - Extract function\n * - Extract variable\n * - Extract interface from class\n * - ...\n */\n CodeActionKind.RefactorExtract = 'refactor.extract';\n /**\n * Base kind for refactoring inline actions: 'refactor.inline'\n *\n * Example inline actions:\n *\n * - Inline function\n * - Inline variable\n * - Inline constant\n * - ...\n */\n CodeActionKind.RefactorInline = 'refactor.inline';\n /**\n * Base kind for refactoring rewrite actions: 'refactor.rewrite'\n *\n * Example rewrite actions:\n *\n * - Convert JavaScript function to class\n * - Add or remove parameter\n * - Encapsulate field\n * - Make method static\n * - Move method to base class\n * - ...\n */\n CodeActionKind.RefactorRewrite = 'refactor.rewrite';\n /**\n * Base kind for source actions: `source`\n *\n * Source code actions apply to the entire file.\n */\n CodeActionKind.Source = 'source';\n /**\n * Base kind for an organize imports source action: `source.organizeImports`\n */\n CodeActionKind.SourceOrganizeImports = 'source.organizeImports';\n /**\n * Base kind for auto-fix source actions: `source.fixAll`.\n *\n * Fix all actions automatically fix errors that have a clear fix that do not require user input.\n * They should not suppress errors or perform unsafe fixes such as generating new types or classes.\n *\n * @since 3.15.0\n */\n CodeActionKind.SourceFixAll = 'source.fixAll';\n})(CodeActionKind || (CodeActionKind = {}));\n/**\n * The reason why code actions were requested.\n *\n * @since 3.17.0\n */\nexport var CodeActionTriggerKind;\n(function (CodeActionTriggerKind) {\n /**\n * Code actions were explicitly requested by the user or by an extension.\n */\n CodeActionTriggerKind.Invoked = 1;\n /**\n * Code actions were requested automatically.\n *\n * This typically happens when current selection in a file changes, but can\n * also be triggered when file content changes.\n */\n CodeActionTriggerKind.Automatic = 2;\n})(CodeActionTriggerKind || (CodeActionTriggerKind = {}));\n/**\n * The CodeActionContext namespace provides helper functions to work with\n * {@link CodeActionContext} literals.\n */\nexport var CodeActionContext;\n(function (CodeActionContext) {\n /**\n * Creates a new CodeActionContext literal.\n */\n function create(diagnostics, only, triggerKind) {\n let result = { diagnostics };\n if (only !== undefined && only !== null) {\n result.only = only;\n }\n if (triggerKind !== undefined && triggerKind !== null) {\n result.triggerKind = triggerKind;\n }\n return result;\n }\n CodeActionContext.create = create;\n /**\n * Checks whether the given literal conforms to the {@link CodeActionContext} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is)\n && (candidate.only === undefined || Is.typedArray(candidate.only, Is.string))\n && (candidate.triggerKind === undefined || candidate.triggerKind === CodeActionTriggerKind.Invoked || candidate.triggerKind === CodeActionTriggerKind.Automatic);\n }\n CodeActionContext.is = is;\n})(CodeActionContext || (CodeActionContext = {}));\nexport var CodeAction;\n(function (CodeAction) {\n function create(title, kindOrCommandOrEdit, kind) {\n let result = { title };\n let checkKind = true;\n if (typeof kindOrCommandOrEdit === 'string') {\n checkKind = false;\n result.kind = kindOrCommandOrEdit;\n }\n else if (Command.is(kindOrCommandOrEdit)) {\n result.command = kindOrCommandOrEdit;\n }\n else {\n result.edit = kindOrCommandOrEdit;\n }\n if (checkKind && kind !== undefined) {\n result.kind = kind;\n }\n return result;\n }\n CodeAction.create = create;\n function is(value) {\n let candidate = value;\n return candidate && Is.string(candidate.title) &&\n (candidate.diagnostics === undefined || Is.typedArray(candidate.diagnostics, Diagnostic.is)) &&\n (candidate.kind === undefined || Is.string(candidate.kind)) &&\n (candidate.edit !== undefined || candidate.command !== undefined) &&\n (candidate.command === undefined || Command.is(candidate.command)) &&\n (candidate.isPreferred === undefined || Is.boolean(candidate.isPreferred)) &&\n (candidate.edit === undefined || WorkspaceEdit.is(candidate.edit));\n }\n CodeAction.is = is;\n})(CodeAction || (CodeAction = {}));\n/**\n * The CodeLens namespace provides helper functions to work with\n * {@link CodeLens} literals.\n */\nexport var CodeLens;\n(function (CodeLens) {\n /**\n * Creates a new CodeLens literal.\n */\n function create(range, data) {\n let result = { range };\n if (Is.defined(data)) {\n result.data = data;\n }\n return result;\n }\n CodeLens.create = create;\n /**\n * Checks whether the given literal conforms to the {@link CodeLens} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));\n }\n CodeLens.is = is;\n})(CodeLens || (CodeLens = {}));\n/**\n * The FormattingOptions namespace provides helper functions to work with\n * {@link FormattingOptions} literals.\n */\nexport var FormattingOptions;\n(function (FormattingOptions) {\n /**\n * Creates a new FormattingOptions literal.\n */\n function create(tabSize, insertSpaces) {\n return { tabSize, insertSpaces };\n }\n FormattingOptions.create = create;\n /**\n * Checks whether the given literal conforms to the {@link FormattingOptions} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces);\n }\n FormattingOptions.is = is;\n})(FormattingOptions || (FormattingOptions = {}));\n/**\n * The DocumentLink namespace provides helper functions to work with\n * {@link DocumentLink} literals.\n */\nexport var DocumentLink;\n(function (DocumentLink) {\n /**\n * Creates a new DocumentLink literal.\n */\n function create(range, target, data) {\n return { range, target, data };\n }\n DocumentLink.create = create;\n /**\n * Checks whether the given literal conforms to the {@link DocumentLink} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));\n }\n DocumentLink.is = is;\n})(DocumentLink || (DocumentLink = {}));\n/**\n * The SelectionRange namespace provides helper function to work with\n * SelectionRange literals.\n */\nexport var SelectionRange;\n(function (SelectionRange) {\n /**\n * Creates a new SelectionRange\n * @param range the range.\n * @param parent an optional parent.\n */\n function create(range, parent) {\n return { range, parent };\n }\n SelectionRange.create = create;\n function is(value) {\n let candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.range) && (candidate.parent === undefined || SelectionRange.is(candidate.parent));\n }\n SelectionRange.is = is;\n})(SelectionRange || (SelectionRange = {}));\n/**\n * A set of predefined token types. This set is not fixed\n * an clients can specify additional token types via the\n * corresponding client capabilities.\n *\n * @since 3.16.0\n */\nexport var SemanticTokenTypes;\n(function (SemanticTokenTypes) {\n SemanticTokenTypes[\"namespace\"] = \"namespace\";\n /**\n * Represents a generic type. Acts as a fallback for types which can't be mapped to\n * a specific type like class or enum.\n */\n SemanticTokenTypes[\"type\"] = \"type\";\n SemanticTokenTypes[\"class\"] = \"class\";\n SemanticTokenTypes[\"enum\"] = \"enum\";\n SemanticTokenTypes[\"interface\"] = \"interface\";\n SemanticTokenTypes[\"struct\"] = \"struct\";\n SemanticTokenTypes[\"typeParameter\"] = \"typeParameter\";\n SemanticTokenTypes[\"parameter\"] = \"parameter\";\n SemanticTokenTypes[\"variable\"] = \"variable\";\n SemanticTokenTypes[\"property\"] = \"property\";\n SemanticTokenTypes[\"enumMember\"] = \"enumMember\";\n SemanticTokenTypes[\"event\"] = \"event\";\n SemanticTokenTypes[\"function\"] = \"function\";\n SemanticTokenTypes[\"method\"] = \"method\";\n SemanticTokenTypes[\"macro\"] = \"macro\";\n SemanticTokenTypes[\"keyword\"] = \"keyword\";\n SemanticTokenTypes[\"modifier\"] = \"modifier\";\n SemanticTokenTypes[\"comment\"] = \"comment\";\n SemanticTokenTypes[\"string\"] = \"string\";\n SemanticTokenTypes[\"number\"] = \"number\";\n SemanticTokenTypes[\"regexp\"] = \"regexp\";\n SemanticTokenTypes[\"operator\"] = \"operator\";\n /**\n * @since 3.17.0\n */\n SemanticTokenTypes[\"decorator\"] = \"decorator\";\n})(SemanticTokenTypes || (SemanticTokenTypes = {}));\n/**\n * A set of predefined token modifiers. This set is not fixed\n * an clients can specify additional token types via the\n * corresponding client capabilities.\n *\n * @since 3.16.0\n */\nexport var SemanticTokenModifiers;\n(function (SemanticTokenModifiers) {\n SemanticTokenModifiers[\"declaration\"] = \"declaration\";\n SemanticTokenModifiers[\"definition\"] = \"definition\";\n SemanticTokenModifiers[\"readonly\"] = \"readonly\";\n SemanticTokenModifiers[\"static\"] = \"static\";\n SemanticTokenModifiers[\"deprecated\"] = \"deprecated\";\n SemanticTokenModifiers[\"abstract\"] = \"abstract\";\n SemanticTokenModifiers[\"async\"] = \"async\";\n SemanticTokenModifiers[\"modification\"] = \"modification\";\n SemanticTokenModifiers[\"documentation\"] = \"documentation\";\n SemanticTokenModifiers[\"defaultLibrary\"] = \"defaultLibrary\";\n})(SemanticTokenModifiers || (SemanticTokenModifiers = {}));\n/**\n * @since 3.16.0\n */\nexport var SemanticTokens;\n(function (SemanticTokens) {\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && (candidate.resultId === undefined || typeof candidate.resultId === 'string') &&\n Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === 'number');\n }\n SemanticTokens.is = is;\n})(SemanticTokens || (SemanticTokens = {}));\n/**\n * The InlineValueText namespace provides functions to deal with InlineValueTexts.\n *\n * @since 3.17.0\n */\nexport var InlineValueText;\n(function (InlineValueText) {\n /**\n * Creates a new InlineValueText literal.\n */\n function create(range, text) {\n return { range, text };\n }\n InlineValueText.create = create;\n function is(value) {\n const candidate = value;\n return candidate !== undefined && candidate !== null && Range.is(candidate.range) && Is.string(candidate.text);\n }\n InlineValueText.is = is;\n})(InlineValueText || (InlineValueText = {}));\n/**\n * The InlineValueVariableLookup namespace provides functions to deal with InlineValueVariableLookups.\n *\n * @since 3.17.0\n */\nexport var InlineValueVariableLookup;\n(function (InlineValueVariableLookup) {\n /**\n * Creates a new InlineValueText literal.\n */\n function create(range, variableName, caseSensitiveLookup) {\n return { range, variableName, caseSensitiveLookup };\n }\n InlineValueVariableLookup.create = create;\n function is(value) {\n const candidate = value;\n return candidate !== undefined && candidate !== null && Range.is(candidate.range) && Is.boolean(candidate.caseSensitiveLookup)\n && (Is.string(candidate.variableName) || candidate.variableName === undefined);\n }\n InlineValueVariableLookup.is = is;\n})(InlineValueVariableLookup || (InlineValueVariableLookup = {}));\n/**\n * The InlineValueEvaluatableExpression namespace provides functions to deal with InlineValueEvaluatableExpression.\n *\n * @since 3.17.0\n */\nexport var InlineValueEvaluatableExpression;\n(function (InlineValueEvaluatableExpression) {\n /**\n * Creates a new InlineValueEvaluatableExpression literal.\n */\n function create(range, expression) {\n return { range, expression };\n }\n InlineValueEvaluatableExpression.create = create;\n function is(value) {\n const candidate = value;\n return candidate !== undefined && candidate !== null && Range.is(candidate.range)\n && (Is.string(candidate.expression) || candidate.expression === undefined);\n }\n InlineValueEvaluatableExpression.is = is;\n})(InlineValueEvaluatableExpression || (InlineValueEvaluatableExpression = {}));\n/**\n * The InlineValueContext namespace provides helper functions to work with\n * {@link InlineValueContext} literals.\n *\n * @since 3.17.0\n */\nexport var InlineValueContext;\n(function (InlineValueContext) {\n /**\n * Creates a new InlineValueContext literal.\n */\n function create(frameId, stoppedLocation) {\n return { frameId, stoppedLocation };\n }\n InlineValueContext.create = create;\n /**\n * Checks whether the given literal conforms to the {@link InlineValueContext} interface.\n */\n function is(value) {\n const candidate = value;\n return Is.defined(candidate) && Range.is(value.stoppedLocation);\n }\n InlineValueContext.is = is;\n})(InlineValueContext || (InlineValueContext = {}));\n/**\n * Inlay hint kinds.\n *\n * @since 3.17.0\n */\nexport var InlayHintKind;\n(function (InlayHintKind) {\n /**\n * An inlay hint that for a type annotation.\n */\n InlayHintKind.Type = 1;\n /**\n * An inlay hint that is for a parameter.\n */\n InlayHintKind.Parameter = 2;\n function is(value) {\n return value === 1 || value === 2;\n }\n InlayHintKind.is = is;\n})(InlayHintKind || (InlayHintKind = {}));\nexport var InlayHintLabelPart;\n(function (InlayHintLabelPart) {\n function create(value) {\n return { value };\n }\n InlayHintLabelPart.create = create;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate)\n && (candidate.tooltip === undefined || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip))\n && (candidate.location === undefined || Location.is(candidate.location))\n && (candidate.command === undefined || Command.is(candidate.command));\n }\n InlayHintLabelPart.is = is;\n})(InlayHintLabelPart || (InlayHintLabelPart = {}));\nexport var InlayHint;\n(function (InlayHint) {\n function create(position, label, kind) {\n const result = { position, label };\n if (kind !== undefined) {\n result.kind = kind;\n }\n return result;\n }\n InlayHint.create = create;\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && Position.is(candidate.position)\n && (Is.string(candidate.label) || Is.typedArray(candidate.label, InlayHintLabelPart.is))\n && (candidate.kind === undefined || InlayHintKind.is(candidate.kind))\n && (candidate.textEdits === undefined) || Is.typedArray(candidate.textEdits, TextEdit.is)\n && (candidate.tooltip === undefined || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip))\n && (candidate.paddingLeft === undefined || Is.boolean(candidate.paddingLeft))\n && (candidate.paddingRight === undefined || Is.boolean(candidate.paddingRight));\n }\n InlayHint.is = is;\n})(InlayHint || (InlayHint = {}));\nexport var StringValue;\n(function (StringValue) {\n function createSnippet(value) {\n return { kind: 'snippet', value };\n }\n StringValue.createSnippet = createSnippet;\n})(StringValue || (StringValue = {}));\nexport var InlineCompletionItem;\n(function (InlineCompletionItem) {\n function create(insertText, filterText, range, command) {\n return { insertText, filterText, range, command };\n }\n InlineCompletionItem.create = create;\n})(InlineCompletionItem || (InlineCompletionItem = {}));\nexport var InlineCompletionList;\n(function (InlineCompletionList) {\n function create(items) {\n return { items };\n }\n InlineCompletionList.create = create;\n})(InlineCompletionList || (InlineCompletionList = {}));\n/**\n * Describes how an {@link InlineCompletionItemProvider inline completion provider} was triggered.\n *\n * @since 3.18.0\n * @proposed\n */\nexport var InlineCompletionTriggerKind;\n(function (InlineCompletionTriggerKind) {\n /**\n * Completion was triggered explicitly by a user gesture.\n */\n InlineCompletionTriggerKind.Invoked = 0;\n /**\n * Completion was triggered automatically while editing.\n */\n InlineCompletionTriggerKind.Automatic = 1;\n})(InlineCompletionTriggerKind || (InlineCompletionTriggerKind = {}));\nexport var SelectedCompletionInfo;\n(function (SelectedCompletionInfo) {\n function create(range, text) {\n return { range, text };\n }\n SelectedCompletionInfo.create = create;\n})(SelectedCompletionInfo || (SelectedCompletionInfo = {}));\nexport var InlineCompletionContext;\n(function (InlineCompletionContext) {\n function create(triggerKind, selectedCompletionInfo) {\n return { triggerKind, selectedCompletionInfo };\n }\n InlineCompletionContext.create = create;\n})(InlineCompletionContext || (InlineCompletionContext = {}));\nexport var WorkspaceFolder;\n(function (WorkspaceFolder) {\n function is(value) {\n const candidate = value;\n return Is.objectLiteral(candidate) && URI.is(candidate.uri) && Is.string(candidate.name);\n }\n WorkspaceFolder.is = is;\n})(WorkspaceFolder || (WorkspaceFolder = {}));\nexport const EOL = ['\\n', '\\r\\n', '\\r'];\n/**\n * @deprecated Use the text document from the new vscode-languageserver-textdocument package.\n */\nexport var TextDocument;\n(function (TextDocument) {\n /**\n * Creates a new ITextDocument literal from the given uri and content.\n * @param uri The document's uri.\n * @param languageId The document's language Id.\n * @param version The document's version.\n * @param content The document's content.\n */\n function create(uri, languageId, version, content) {\n return new FullTextDocument(uri, languageId, version, content);\n }\n TextDocument.create = create;\n /**\n * Checks whether the given literal conforms to the {@link ITextDocument} interface.\n */\n function is(value) {\n let candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.uinteger(candidate.lineCount)\n && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;\n }\n TextDocument.is = is;\n function applyEdits(document, edits) {\n let text = document.getText();\n let sortedEdits = mergeSort(edits, (a, b) => {\n let diff = a.range.start.line - b.range.start.line;\n if (diff === 0) {\n return a.range.start.character - b.range.start.character;\n }\n return diff;\n });\n let lastModifiedOffset = text.length;\n for (let i = sortedEdits.length - 1; i >= 0; i--) {\n let e = sortedEdits[i];\n let startOffset = document.offsetAt(e.range.start);\n let endOffset = document.offsetAt(e.range.end);\n if (endOffset <= lastModifiedOffset) {\n text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);\n }\n else {\n throw new Error('Overlapping edit');\n }\n lastModifiedOffset = startOffset;\n }\n return text;\n }\n TextDocument.applyEdits = applyEdits;\n function mergeSort(data, compare) {\n if (data.length <= 1) {\n // sorted\n return data;\n }\n const p = (data.length / 2) | 0;\n const left = data.slice(0, p);\n const right = data.slice(p);\n mergeSort(left, compare);\n mergeSort(right, compare);\n let leftIdx = 0;\n let rightIdx = 0;\n let i = 0;\n while (leftIdx < left.length && rightIdx < right.length) {\n let ret = compare(left[leftIdx], right[rightIdx]);\n if (ret <= 0) {\n // smaller_equal -> take left to preserve order\n data[i++] = left[leftIdx++];\n }\n else {\n // greater -> take right\n data[i++] = right[rightIdx++];\n }\n }\n while (leftIdx < left.length) {\n data[i++] = left[leftIdx++];\n }\n while (rightIdx < right.length) {\n data[i++] = right[rightIdx++];\n }\n return data;\n }\n})(TextDocument || (TextDocument = {}));\n/**\n * @deprecated Use the text document from the new vscode-languageserver-textdocument package.\n */\nclass FullTextDocument {\n constructor(uri, languageId, version, content) {\n this._uri = uri;\n this._languageId = languageId;\n this._version = version;\n this._content = content;\n this._lineOffsets = undefined;\n }\n get uri() {\n return this._uri;\n }\n get languageId() {\n return this._languageId;\n }\n get version() {\n return this._version;\n }\n getText(range) {\n if (range) {\n let start = this.offsetAt(range.start);\n let end = this.offsetAt(range.end);\n return this._content.substring(start, end);\n }\n return this._content;\n }\n update(event, version) {\n this._content = event.text;\n this._version = version;\n this._lineOffsets = undefined;\n }\n getLineOffsets() {\n if (this._lineOffsets === undefined) {\n let lineOffsets = [];\n let text = this._content;\n let isLineStart = true;\n for (let i = 0; i < text.length; i++) {\n if (isLineStart) {\n lineOffsets.push(i);\n isLineStart = false;\n }\n let ch = text.charAt(i);\n isLineStart = (ch === '\\r' || ch === '\\n');\n if (ch === '\\r' && i + 1 < text.length && text.charAt(i + 1) === '\\n') {\n i++;\n }\n }\n if (isLineStart && text.length > 0) {\n lineOffsets.push(text.length);\n }\n this._lineOffsets = lineOffsets;\n }\n return this._lineOffsets;\n }\n positionAt(offset) {\n offset = Math.max(Math.min(offset, this._content.length), 0);\n let lineOffsets = this.getLineOffsets();\n let low = 0, high = lineOffsets.length;\n if (high === 0) {\n return Position.create(0, offset);\n }\n while (low < high) {\n let mid = Math.floor((low + high) / 2);\n if (lineOffsets[mid] > offset) {\n high = mid;\n }\n else {\n low = mid + 1;\n }\n }\n // low is the least x for which the line offset is larger than the current offset\n // or array.length if no line offset is larger than the current offset\n let line = low - 1;\n return Position.create(line, offset - lineOffsets[line]);\n }\n offsetAt(position) {\n let lineOffsets = this.getLineOffsets();\n if (position.line >= lineOffsets.length) {\n return this._content.length;\n }\n else if (position.line < 0) {\n return 0;\n }\n let lineOffset = lineOffsets[position.line];\n let nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;\n return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);\n }\n get lineCount() {\n return this.getLineOffsets().length;\n }\n}\nvar Is;\n(function (Is) {\n const toString = Object.prototype.toString;\n function defined(value) {\n return typeof value !== 'undefined';\n }\n Is.defined = defined;\n function undefined(value) {\n return typeof value === 'undefined';\n }\n Is.undefined = undefined;\n function boolean(value) {\n return value === true || value === false;\n }\n Is.boolean = boolean;\n function string(value) {\n return toString.call(value) === '[object String]';\n }\n Is.string = string;\n function number(value) {\n return toString.call(value) === '[object Number]';\n }\n Is.number = number;\n function numberRange(value, min, max) {\n return toString.call(value) === '[object Number]' && min <= value && value <= max;\n }\n Is.numberRange = numberRange;\n function integer(value) {\n return toString.call(value) === '[object Number]' && -2147483648 <= value && value <= 2147483647;\n }\n Is.integer = integer;\n function uinteger(value) {\n return toString.call(value) === '[object Number]' && 0 <= value && value <= 2147483647;\n }\n Is.uinteger = uinteger;\n function func(value) {\n return toString.call(value) === '[object Function]';\n }\n Is.func = func;\n function objectLiteral(value) {\n // Strictly speaking class instances pass this check as well. Since the LSP\n // doesn't use classes we ignore this for now. If we do we need to add something\n // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`\n return value !== null && typeof value === 'object';\n }\n Is.objectLiteral = objectLiteral;\n function typedArray(value, check) {\n return Array.isArray(value) && value.every(check);\n }\n Is.typedArray = typedArray;\n})(Is || (Is = {}));\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { IToken, TokenType } from 'chevrotain';\r\nimport type { Range } from 'vscode-languageserver-types';\r\nimport type { AbstractElement } from '../languages/generated/ast.js';\r\nimport type { AstNode, CompositeCstNode, CstNode, LeafCstNode, RootCstNode } from '../syntax-tree.js';\r\nimport { Position } from 'vscode-languageserver-types';\r\nimport { tokenToRange } from '../utils/cst-utils.js';\r\n\r\nexport class CstNodeBuilder {\r\n\r\n private rootNode!: RootCstNodeImpl;\r\n private nodeStack: CompositeCstNodeImpl[] = [];\r\n\r\n get current(): CompositeCstNodeImpl {\r\n return this.nodeStack[this.nodeStack.length - 1] ?? this.rootNode;\r\n }\r\n\r\n buildRootNode(input: string): RootCstNode {\r\n this.rootNode = new RootCstNodeImpl(input);\r\n this.rootNode.root = this.rootNode;\r\n this.nodeStack = [this.rootNode];\r\n return this.rootNode;\r\n }\r\n\r\n buildCompositeNode(feature: AbstractElement): CompositeCstNode {\r\n const compositeNode = new CompositeCstNodeImpl();\r\n compositeNode.grammarSource = feature;\r\n compositeNode.root = this.rootNode;\r\n this.current.content.push(compositeNode);\r\n this.nodeStack.push(compositeNode);\r\n return compositeNode;\r\n }\r\n\r\n buildLeafNode(token: IToken, feature?: AbstractElement): LeafCstNode {\r\n const leafNode = new LeafCstNodeImpl(token.startOffset, token.image.length, tokenToRange(token), token.tokenType, !feature);\r\n leafNode.grammarSource = feature;\r\n leafNode.root = this.rootNode;\r\n this.current.content.push(leafNode);\r\n return leafNode;\r\n }\r\n\r\n removeNode(node: CstNode): void {\r\n const parent = node.container;\r\n if (parent) {\r\n const index = parent.content.indexOf(node);\r\n if (index >= 0) {\r\n parent.content.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n addHiddenNodes(tokens: IToken[]): void {\r\n const nodes: LeafCstNode[] = [];\r\n for (const token of tokens) {\r\n const leafNode = new LeafCstNodeImpl(token.startOffset, token.image.length, tokenToRange(token), token.tokenType, true);\r\n leafNode.root = this.rootNode;\r\n nodes.push(leafNode);\r\n }\r\n let current: CompositeCstNode = this.current;\r\n let added = false;\r\n // If we are within a composite node, we add the hidden nodes to the content\r\n if (current.content.length > 0) {\r\n current.content.push(...nodes);\r\n return;\r\n }\r\n // Otherwise we are at a newly created node\r\n // Instead of adding the hidden nodes here, we search for the first parent node with content\r\n while (current.container) {\r\n const index = current.container.content.indexOf(current);\r\n if (index > 0) {\r\n // Add the hidden nodes before the current node\r\n current.container.content.splice(index, 0, ...nodes);\r\n added = true;\r\n break;\r\n }\r\n current = current.container;\r\n }\r\n // If we arrive at the root node, we add the hidden nodes at the beginning\r\n // This is the case if the hidden nodes are the first nodes in the tree\r\n if (!added) {\r\n this.rootNode.content.unshift(...nodes);\r\n }\r\n }\r\n\r\n construct(item: { $type: string | symbol | undefined, $cstNode: CstNode }): void {\r\n const current: CstNode = this.current;\r\n // The specified item could be a datatype ($type is symbol) or a fragment ($type is undefined)\r\n // Only if the $type is a string, we actually assign the element\r\n if (typeof item.$type === 'string') {\r\n this.current.astNode = item;\r\n }\r\n item.$cstNode = current;\r\n const node = this.nodeStack.pop();\r\n // Empty composite nodes are not valid\r\n // Simply remove the node from the tree\r\n if (node?.content.length === 0) {\r\n this.removeNode(node);\r\n }\r\n }\r\n}\r\n\r\nexport abstract class AbstractCstNode implements CstNode {\r\n abstract get offset(): number;\r\n abstract get length(): number;\r\n abstract get end(): number;\r\n abstract get range(): Range;\r\n\r\n container?: CompositeCstNode;\r\n grammarSource?: AbstractElement;\r\n root: RootCstNode;\r\n private _astNode?: AstNode;\r\n\r\n /** @deprecated use `container` instead. */\r\n get parent(): CompositeCstNode | undefined {\r\n return this.container;\r\n }\r\n\r\n /** @deprecated use `grammarSource` instead. */\r\n get feature(): AbstractElement | undefined {\r\n return this.grammarSource;\r\n }\r\n\r\n get hidden(): boolean {\r\n return false;\r\n }\r\n\r\n get astNode(): AstNode {\r\n const node = typeof this._astNode?.$type === 'string' ? this._astNode : this.container?.astNode;\r\n if (!node) {\r\n throw new Error('This node has no associated AST element');\r\n }\r\n return node;\r\n }\r\n\r\n set astNode(value: AstNode | undefined) {\r\n this._astNode = value;\r\n }\r\n\r\n /** @deprecated use `astNode` instead. */\r\n get element(): AstNode {\r\n return this.astNode;\r\n }\r\n\r\n get text(): string {\r\n return this.root.fullText.substring(this.offset, this.end);\r\n }\r\n}\r\n\r\nexport class LeafCstNodeImpl extends AbstractCstNode implements LeafCstNode {\r\n get offset(): number {\r\n return this._offset;\r\n }\r\n\r\n get length(): number {\r\n return this._length;\r\n }\r\n\r\n get end(): number {\r\n return this._offset + this._length;\r\n }\r\n\r\n override get hidden(): boolean {\r\n return this._hidden;\r\n }\r\n\r\n get tokenType(): TokenType {\r\n return this._tokenType;\r\n }\r\n\r\n get range(): Range {\r\n return this._range;\r\n }\r\n\r\n private _hidden: boolean;\r\n private _offset: number;\r\n private _length: number;\r\n private _range: Range;\r\n private _tokenType: TokenType;\r\n\r\n constructor(offset: number, length: number, range: Range, tokenType: TokenType, hidden = false) {\r\n super();\r\n this._hidden = hidden;\r\n this._offset = offset;\r\n this._tokenType = tokenType;\r\n this._length = length;\r\n this._range = range;\r\n }\r\n}\r\n\r\nexport class CompositeCstNodeImpl extends AbstractCstNode implements CompositeCstNode {\r\n readonly content: CstNode[] = new CstNodeContainer(this);\r\n private _rangeCache?: Range;\r\n\r\n /** @deprecated use `content` instead. */\r\n get children(): CstNode[] {\r\n return this.content;\r\n }\r\n\r\n get offset(): number {\r\n return this.firstNonHiddenNode?.offset ?? 0;\r\n }\r\n\r\n get length(): number {\r\n return this.end - this.offset;\r\n }\r\n\r\n get end(): number {\r\n return this.lastNonHiddenNode?.end ?? 0;\r\n }\r\n\r\n get range(): Range {\r\n const firstNode = this.firstNonHiddenNode;\r\n const lastNode = this.lastNonHiddenNode;\r\n if (firstNode && lastNode) {\r\n if (this._rangeCache === undefined) {\r\n const { range: firstRange } = firstNode;\r\n const { range: lastRange } = lastNode;\r\n this._rangeCache = { start: firstRange.start, end: lastRange.end.line < firstRange.start.line ? firstRange.start : lastRange.end };\r\n }\r\n return this._rangeCache;\r\n } else {\r\n return { start: Position.create(0, 0), end: Position.create(0, 0) };\r\n }\r\n }\r\n\r\n private get firstNonHiddenNode(): CstNode | undefined {\r\n for (const child of this.content) {\r\n if (!child.hidden) {\r\n return child;\r\n }\r\n }\r\n return this.content[0];\r\n }\r\n\r\n private get lastNonHiddenNode(): CstNode | undefined {\r\n for (let i = this.content.length - 1; i >= 0; i--) {\r\n const child = this.content[i];\r\n if (!child.hidden) {\r\n return child;\r\n }\r\n }\r\n return this.content[this.content.length - 1];\r\n }\r\n}\r\n\r\nclass CstNodeContainer extends Array {\r\n readonly parent: CompositeCstNode;\r\n\r\n constructor(parent: CompositeCstNode) {\r\n super();\r\n this.parent = parent;\r\n Object.setPrototypeOf(this, CstNodeContainer.prototype);\r\n }\r\n\r\n override push(...items: CstNode[]): number {\r\n this.addParents(items);\r\n return super.push(...items);\r\n }\r\n\r\n override unshift(...items: CstNode[]): number {\r\n this.addParents(items);\r\n return super.unshift(...items);\r\n }\r\n\r\n override splice(start: number, count: number, ...items: CstNode[]): CstNode[] {\r\n this.addParents(items);\r\n return super.splice(start, count, ...items);\r\n }\r\n\r\n private addParents(items: CstNode[]): void {\r\n for (const item of items) {\r\n (item).container = this.parent;\r\n }\r\n }\r\n}\r\n\r\nexport class RootCstNodeImpl extends CompositeCstNodeImpl implements RootCstNode {\r\n private _text = '';\r\n\r\n override get text(): string {\r\n return this._text.substring(this.offset, this.end);\r\n }\r\n\r\n get fullText(): string {\r\n return this._text;\r\n }\r\n\r\n constructor(input?: string) {\r\n super();\r\n this._text = input ?? '';\r\n }\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport type { DSLMethodOpts, ILexingError, IOrAlt, IParserErrorMessageProvider, IRecognitionException, IToken, TokenType, TokenVocabulary } from 'chevrotain';\r\nimport type { AbstractElement, Action, Assignment, ParserRule } from '../languages/generated/ast.js';\r\nimport type { Linker } from '../references/linker.js';\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode, AstReflection, CompositeCstNode, CstNode } from '../syntax-tree.js';\r\nimport type { Lexer, LexerResult } from './lexer.js';\r\nimport type { IParserConfig } from './parser-config.js';\r\nimport type { ValueConverter } from './value-converter.js';\r\nimport { defaultParserErrorProvider, EmbeddedActionsParser, LLkLookaheadStrategy } from 'chevrotain';\r\nimport { LLStarLookaheadStrategy } from 'chevrotain-allstar';\r\nimport { isAssignment, isCrossReference, isKeyword } from '../languages/generated/ast.js';\r\nimport { getExplicitRuleType, isDataTypeRule } from '../utils/grammar-utils.js';\r\nimport { assignMandatoryProperties, getContainerOfType, linkContentToContainer } from '../utils/ast-utils.js';\r\nimport { CstNodeBuilder } from './cst-node-builder.js';\r\nimport type { LexingReport } from './token-builder.js';\r\n\r\nexport type ParseResult = {\r\n value: T,\r\n parserErrors: IRecognitionException[],\r\n lexerErrors: ILexingError[],\r\n lexerReport?: LexingReport\r\n}\r\n\r\nexport const DatatypeSymbol = Symbol('Datatype');\r\n\r\ninterface DataTypeNode {\r\n $cstNode: CompositeCstNode\r\n /** Instead of a string, this node is uniquely identified by the `Datatype` symbol */\r\n $type: symbol\r\n /** Used as a storage for all parsed terminals, keywords and sub-datatype rules */\r\n value: string\r\n}\r\n\r\nfunction isDataTypeNode(node: { $type: string | symbol | undefined }): node is DataTypeNode {\r\n return node.$type === DatatypeSymbol;\r\n}\r\n\r\ntype RuleResult = (args: Args) => any;\r\n\r\ntype Args = Record;\r\n\r\ntype RuleImpl = (args: Args) => any;\r\n\r\ninterface AssignmentElement {\r\n assignment?: Assignment\r\n isCrossRef: boolean\r\n}\r\n\r\n/**\r\n * Base interface for all parsers. Mainly used by the `parser-builder-base.ts` to perform work on different kinds of parsers.\r\n * The main use cases are:\r\n * * AST parser: Based on a string, create an AST for the current grammar\r\n * * Completion parser: Based on a partial string, identify the current position of the input within the grammar\r\n */\r\nexport interface BaseParser {\r\n /**\r\n * Adds a new parser rule to the parser\r\n */\r\n rule(rule: ParserRule, impl: RuleImpl): RuleResult;\r\n /**\r\n * Returns the executable rule function for the specified rule name\r\n */\r\n getRule(name: string): RuleResult | undefined;\r\n /**\r\n * Performs alternatives parsing (the `|` operation in EBNF/Langium)\r\n */\r\n alternatives(idx: number, choices: Array>): void;\r\n /**\r\n * Parses the callback as optional (the `?` operation in EBNF/Langium)\r\n */\r\n optional(idx: number, callback: DSLMethodOpts): void;\r\n /**\r\n * Parses the callback 0 or more times (the `*` operation in EBNF/Langium)\r\n */\r\n many(idx: number, callback: DSLMethodOpts): void;\r\n /**\r\n * Parses the callback 1 or more times (the `+` operation in EBNF/Langium)\r\n */\r\n atLeastOne(idx: number, callback: DSLMethodOpts): void;\r\n /**\r\n * Consumes a specific token type from the token input stream.\r\n * Requires a unique index within the rule for a specific token type.\r\n */\r\n consume(idx: number, tokenType: TokenType, feature: AbstractElement): void;\r\n /**\r\n * Invokes the executable function for a given parser rule.\r\n * Requires a unique index within the rule for a specific sub rule.\r\n * Arguments can be supplied to the rule invocation for semantic predicates\r\n */\r\n subrule(idx: number, rule: RuleResult, fragment: boolean, feature: AbstractElement, args: Args): void;\r\n /**\r\n * Executes a grammar action that modifies the currently active AST node\r\n */\r\n action($type: string, action: Action): void;\r\n /**\r\n * Finishes construction of the current AST node. Only used by the AST parser.\r\n */\r\n construct(): unknown;\r\n /**\r\n * Whether the parser is currently actually in use or in \"recording mode\".\r\n * Recording mode is activated once when the parser is analyzing itself.\r\n * During this phase, no input exists and therefore no AST should be constructed\r\n */\r\n isRecording(): boolean;\r\n /**\r\n * Current state of the unordered groups\r\n */\r\n get unorderedGroups(): Map;\r\n /**\r\n * The rule stack indicates the indices of rules that are currently invoked,\r\n * in order of their invocation.\r\n */\r\n getRuleStack(): number[];\r\n}\r\n\r\nconst ruleSuffix = '\\u200B';\r\nconst withRuleSuffix = (name: string): string => name.endsWith(ruleSuffix) ? name : name + ruleSuffix;\r\n\r\nexport abstract class AbstractLangiumParser implements BaseParser {\r\n\r\n protected readonly lexer: Lexer;\r\n protected readonly wrapper: ChevrotainWrapper;\r\n protected _unorderedGroups: Map = new Map();\r\n\r\n protected allRules = new Map();\r\n protected mainRule!: RuleResult;\r\n\r\n constructor(services: LangiumCoreServices) {\r\n this.lexer = services.parser.Lexer;\r\n const tokens = this.lexer.definition;\r\n const production = services.LanguageMetaData.mode === 'production';\r\n this.wrapper = new ChevrotainWrapper(tokens, {\r\n ...services.parser.ParserConfig,\r\n skipValidations: production,\r\n errorMessageProvider: services.parser.ParserErrorMessageProvider\r\n });\r\n }\r\n\r\n alternatives(idx: number, choices: Array>): void {\r\n this.wrapper.wrapOr(idx, choices);\r\n }\r\n\r\n optional(idx: number, callback: DSLMethodOpts): void {\r\n this.wrapper.wrapOption(idx, callback);\r\n }\r\n\r\n many(idx: number, callback: DSLMethodOpts): void {\r\n this.wrapper.wrapMany(idx, callback);\r\n }\r\n\r\n atLeastOne(idx: number, callback: DSLMethodOpts): void {\r\n this.wrapper.wrapAtLeastOne(idx, callback);\r\n }\r\n\r\n abstract rule(rule: ParserRule, impl: RuleImpl): RuleResult;\r\n abstract consume(idx: number, tokenType: TokenType, feature: AbstractElement): void;\r\n abstract subrule(idx: number, rule: RuleResult, fragment: boolean, feature: AbstractElement, args: Args): void;\r\n abstract action($type: string, action: Action): void;\r\n abstract construct(): unknown;\r\n\r\n getRule(name: string): RuleResult | undefined {\r\n return this.allRules.get(name);\r\n }\r\n\r\n isRecording(): boolean {\r\n return this.wrapper.IS_RECORDING;\r\n }\r\n\r\n get unorderedGroups(): Map {\r\n return this._unorderedGroups;\r\n }\r\n\r\n getRuleStack(): number[] {\r\n return (this.wrapper as any).RULE_STACK;\r\n }\r\n\r\n finalize(): void {\r\n this.wrapper.wrapSelfAnalysis();\r\n }\r\n}\r\n\r\nexport interface ParserOptions {\r\n rule?: string\r\n}\r\n\r\nexport class LangiumParser extends AbstractLangiumParser {\r\n private readonly linker: Linker;\r\n private readonly converter: ValueConverter;\r\n private readonly astReflection: AstReflection;\r\n private readonly nodeBuilder = new CstNodeBuilder();\r\n private lexerResult?: LexerResult;\r\n private stack: any[] = [];\r\n private assignmentMap = new Map();\r\n\r\n private get current(): any {\r\n return this.stack[this.stack.length - 1];\r\n }\r\n\r\n constructor(services: LangiumCoreServices) {\r\n super(services);\r\n this.linker = services.references.Linker;\r\n this.converter = services.parser.ValueConverter;\r\n this.astReflection = services.shared.AstReflection;\r\n }\r\n\r\n rule(rule: ParserRule, impl: RuleImpl): RuleResult {\r\n const type = this.computeRuleType(rule);\r\n const ruleMethod = this.wrapper.DEFINE_RULE(withRuleSuffix(rule.name), this.startImplementation(type, impl).bind(this));\r\n this.allRules.set(rule.name, ruleMethod);\r\n if (rule.entry) {\r\n this.mainRule = ruleMethod;\r\n }\r\n return ruleMethod;\r\n }\r\n\r\n private computeRuleType(rule: ParserRule): string | symbol | undefined {\r\n if (rule.fragment) {\r\n return undefined;\r\n } else if (isDataTypeRule(rule)) {\r\n return DatatypeSymbol;\r\n } else {\r\n const explicit = getExplicitRuleType(rule);\r\n return explicit ?? rule.name;\r\n }\r\n }\r\n\r\n parse(input: string, options: ParserOptions = {}): ParseResult {\r\n this.nodeBuilder.buildRootNode(input);\r\n const lexerResult = this.lexerResult = this.lexer.tokenize(input);\r\n this.wrapper.input = lexerResult.tokens;\r\n const ruleMethod = options.rule ? this.allRules.get(options.rule) : this.mainRule;\r\n if (!ruleMethod) {\r\n throw new Error(options.rule ? `No rule found with name '${options.rule}'` : 'No main rule available.');\r\n }\r\n const result = ruleMethod.call(this.wrapper, {});\r\n this.nodeBuilder.addHiddenNodes(lexerResult.hidden);\r\n this.unorderedGroups.clear();\r\n this.lexerResult = undefined;\r\n return {\r\n value: result,\r\n lexerErrors: lexerResult.errors,\r\n lexerReport: lexerResult.report,\r\n parserErrors: this.wrapper.errors\r\n };\r\n }\r\n\r\n private startImplementation($type: string | symbol | undefined, implementation: RuleImpl): RuleImpl {\r\n return (args) => {\r\n // Only create a new AST node in case the calling rule is not a fragment rule\r\n const createNode = !this.isRecording() && $type !== undefined;\r\n if (createNode) {\r\n const node: any = { $type };\r\n this.stack.push(node);\r\n if ($type === DatatypeSymbol) {\r\n node.value = '';\r\n }\r\n }\r\n let result: unknown;\r\n try {\r\n result = implementation(args);\r\n } catch (err) {\r\n result = undefined;\r\n }\r\n if (result === undefined && createNode) {\r\n result = this.construct();\r\n }\r\n return result;\r\n };\r\n }\r\n\r\n private extractHiddenTokens(token: IToken): IToken[] {\r\n const hiddenTokens = this.lexerResult!.hidden;\r\n if (!hiddenTokens.length) {\r\n return [];\r\n }\r\n const offset = token.startOffset;\r\n for (let i = 0; i < hiddenTokens.length; i++) {\r\n const token = hiddenTokens[i];\r\n if (token.startOffset > offset) {\r\n return hiddenTokens.splice(0, i);\r\n }\r\n }\r\n return hiddenTokens.splice(0, hiddenTokens.length);\r\n }\r\n\r\n consume(idx: number, tokenType: TokenType, feature: AbstractElement): void {\r\n const token = this.wrapper.wrapConsume(idx, tokenType);\r\n if (!this.isRecording() && this.isValidToken(token)) {\r\n const hiddenTokens = this.extractHiddenTokens(token);\r\n this.nodeBuilder.addHiddenNodes(hiddenTokens);\r\n const leafNode = this.nodeBuilder.buildLeafNode(token, feature);\r\n const { assignment, isCrossRef } = this.getAssignment(feature);\r\n const current = this.current;\r\n if (assignment) {\r\n const convertedValue = isKeyword(feature) ? token.image : this.converter.convert(token.image, leafNode);\r\n this.assign(assignment.operator, assignment.feature, convertedValue, leafNode, isCrossRef);\r\n } else if (isDataTypeNode(current)) {\r\n let text = token.image;\r\n if (!isKeyword(feature)) {\r\n text = this.converter.convert(text, leafNode).toString();\r\n }\r\n current.value += text;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Most consumed parser tokens are valid. However there are two cases in which they are not valid:\r\n *\r\n * 1. They were inserted during error recovery by the parser. These tokens don't really exist and should not be further processed\r\n * 2. They contain invalid token ranges. This might include the special EOF token, or other tokens produced by invalid token builders.\r\n */\r\n private isValidToken(token: IToken): boolean {\r\n return !token.isInsertedInRecovery && !isNaN(token.startOffset) && typeof token.endOffset === 'number' && !isNaN(token.endOffset);\r\n }\r\n\r\n subrule(idx: number, rule: RuleResult, fragment: boolean, feature: AbstractElement, args: Args): void {\r\n let cstNode: CompositeCstNode | undefined;\r\n if (!this.isRecording() && !fragment) {\r\n // We only want to create a new CST node if the subrule actually creates a new AST node.\r\n // In other cases like calls of fragment rules the current CST/AST is populated further.\r\n // Note that skipping this initialization and leaving cstNode unassigned also skips the subrule assignment later on.\r\n // This is intended, as fragment rules only enrich the current AST node\r\n cstNode = this.nodeBuilder.buildCompositeNode(feature);\r\n }\r\n const subruleResult = this.wrapper.wrapSubrule(idx, rule, args) as any;\r\n if (!this.isRecording() && cstNode && cstNode.length > 0) {\r\n this.performSubruleAssignment(subruleResult, feature, cstNode);\r\n }\r\n }\r\n\r\n private performSubruleAssignment(result: any, feature: AbstractElement, cstNode: CompositeCstNode): void {\r\n const { assignment, isCrossRef } = this.getAssignment(feature);\r\n if (assignment) {\r\n this.assign(assignment.operator, assignment.feature, result, cstNode, isCrossRef);\r\n } else if (!assignment) {\r\n // If we call a subrule without an assignment we either:\r\n // 1. append the result of the subrule (data type rule)\r\n // 2. override the current object with the newly parsed object\r\n // If the current element is an AST node and the result of the subrule\r\n // is a data type rule, we can safely discard the results.\r\n const current = this.current;\r\n if (isDataTypeNode(current)) {\r\n current.value += result.toString();\r\n } else if (typeof result === 'object' && result) {\r\n const object = this.assignWithoutOverride(result, current);\r\n const newItem = object;\r\n this.stack.pop();\r\n this.stack.push(newItem);\r\n }\r\n }\r\n }\r\n\r\n action($type: string, action: Action): void {\r\n if (!this.isRecording()) {\r\n let last = this.current;\r\n if (action.feature && action.operator) {\r\n last = this.construct();\r\n this.nodeBuilder.removeNode(last.$cstNode);\r\n const node = this.nodeBuilder.buildCompositeNode(action);\r\n node.content.push(last.$cstNode);\r\n const newItem = { $type };\r\n this.stack.push(newItem);\r\n this.assign(action.operator, action.feature, last, last.$cstNode, false);\r\n } else {\r\n last.$type = $type;\r\n }\r\n }\r\n }\r\n\r\n construct(): unknown {\r\n if (this.isRecording()) {\r\n return undefined;\r\n }\r\n const obj = this.current;\r\n linkContentToContainer(obj);\r\n this.nodeBuilder.construct(obj);\r\n this.stack.pop();\r\n if (isDataTypeNode(obj)) {\r\n return this.converter.convert(obj.value, obj.$cstNode);\r\n } else {\r\n assignMandatoryProperties(this.astReflection, obj);\r\n }\r\n return obj;\r\n }\r\n\r\n private getAssignment(feature: AbstractElement): AssignmentElement {\r\n if (!this.assignmentMap.has(feature)) {\r\n const assignment = getContainerOfType(feature, isAssignment);\r\n this.assignmentMap.set(feature, {\r\n assignment: assignment,\r\n isCrossRef: assignment ? isCrossReference(assignment.terminal) : false\r\n });\r\n }\r\n return this.assignmentMap.get(feature)!;\r\n }\r\n\r\n private assign(operator: string, feature: string, value: unknown, cstNode: CstNode, isCrossRef: boolean): void {\r\n const obj = this.current;\r\n let item: unknown;\r\n if (isCrossRef && typeof value === 'string') {\r\n item = this.linker.buildReference(obj, feature, cstNode, value);\r\n } else {\r\n item = value;\r\n }\r\n switch (operator) {\r\n case '=': {\r\n obj[feature] = item;\r\n break;\r\n }\r\n case '?=': {\r\n obj[feature] = true;\r\n break;\r\n }\r\n case '+=': {\r\n if (!Array.isArray(obj[feature])) {\r\n obj[feature] = [];\r\n }\r\n obj[feature].push(item);\r\n }\r\n }\r\n }\r\n\r\n private assignWithoutOverride(target: any, source: any): any {\r\n for (const [name, existingValue] of Object.entries(source)) {\r\n const newValue = target[name];\r\n if (newValue === undefined) {\r\n target[name] = existingValue;\r\n } else if (Array.isArray(newValue) && Array.isArray(existingValue)) {\r\n existingValue.push(...newValue);\r\n target[name] = existingValue;\r\n }\r\n }\r\n // The target was parsed from a unassigned subrule\r\n // After the subrule construction, it received a cst node\r\n // This CST node will later be overriden by the cst node builder\r\n // To prevent references to stale AST nodes in the CST,\r\n // we need to remove the reference here\r\n const targetCstNode = target.$cstNode;\r\n if (targetCstNode) {\r\n targetCstNode.astNode = undefined;\r\n target.$cstNode = undefined;\r\n }\r\n return target;\r\n }\r\n\r\n get definitionErrors(): IParserDefinitionError[] {\r\n return this.wrapper.definitionErrors;\r\n }\r\n}\r\n\r\nexport interface IParserDefinitionError {\r\n message: string\r\n type: number\r\n ruleName?: string\r\n}\r\n\r\nexport abstract class AbstractParserErrorMessageProvider implements IParserErrorMessageProvider {\r\n\r\n buildMismatchTokenMessage(options: {\r\n expected: TokenType\r\n actual: IToken\r\n previous: IToken\r\n ruleName: string\r\n }): string {\r\n return defaultParserErrorProvider.buildMismatchTokenMessage(options);\r\n }\r\n\r\n buildNotAllInputParsedMessage(options: {\r\n firstRedundant: IToken\r\n ruleName: string\r\n }): string {\r\n return defaultParserErrorProvider.buildNotAllInputParsedMessage(options);\r\n }\r\n\r\n buildNoViableAltMessage(options: {\r\n expectedPathsPerAlt: TokenType[][][]\r\n actual: IToken[]\r\n previous: IToken\r\n customUserDescription: string\r\n ruleName: string\r\n }): string {\r\n return defaultParserErrorProvider.buildNoViableAltMessage(options);\r\n }\r\n\r\n buildEarlyExitMessage(options: {\r\n expectedIterationPaths: TokenType[][]\r\n actual: IToken[]\r\n previous: IToken\r\n customUserDescription: string\r\n ruleName: string\r\n }): string {\r\n return defaultParserErrorProvider.buildEarlyExitMessage(options);\r\n }\r\n\r\n}\r\n\r\nexport class LangiumParserErrorMessageProvider extends AbstractParserErrorMessageProvider {\r\n\r\n override buildMismatchTokenMessage({ expected, actual }: {\r\n expected: TokenType\r\n actual: IToken\r\n previous: IToken\r\n ruleName: string\r\n }): string {\r\n const expectedMsg = expected.LABEL\r\n ? '`' + expected.LABEL + '`'\r\n : expected.name.endsWith(':KW')\r\n ? `keyword '${expected.name.substring(0, expected.name.length - 3)}'`\r\n : `token of type '${expected.name}'`;\r\n return `Expecting ${expectedMsg} but found \\`${actual.image}\\`.`;\r\n }\r\n\r\n override buildNotAllInputParsedMessage({ firstRedundant }: {\r\n firstRedundant: IToken\r\n ruleName: string\r\n }): string {\r\n return `Expecting end of file but found \\`${firstRedundant.image}\\`.`;\r\n }\r\n}\r\n\r\nexport interface CompletionParserResult {\r\n tokens: IToken[]\r\n elementStack: AbstractElement[]\r\n tokenIndex: number\r\n}\r\n\r\nexport class LangiumCompletionParser extends AbstractLangiumParser {\r\n private tokens: IToken[] = [];\r\n\r\n private elementStack: AbstractElement[] = [];\r\n private lastElementStack: AbstractElement[] = [];\r\n private nextTokenIndex = 0;\r\n private stackSize = 0;\r\n\r\n action(): void {\r\n // NOOP\r\n }\r\n\r\n construct(): unknown {\r\n // NOOP\r\n return undefined;\r\n }\r\n\r\n parse(input: string): CompletionParserResult {\r\n this.resetState();\r\n const tokens = this.lexer.tokenize(input, { mode: 'partial' });\r\n this.tokens = tokens.tokens;\r\n this.wrapper.input = [...this.tokens];\r\n this.mainRule.call(this.wrapper, {});\r\n this.unorderedGroups.clear();\r\n return {\r\n tokens: this.tokens,\r\n elementStack: [...this.lastElementStack],\r\n tokenIndex: this.nextTokenIndex\r\n };\r\n }\r\n\r\n rule(rule: ParserRule, impl: RuleImpl): RuleResult {\r\n const ruleMethod = this.wrapper.DEFINE_RULE(withRuleSuffix(rule.name), this.startImplementation(impl).bind(this));\r\n this.allRules.set(rule.name, ruleMethod);\r\n if (rule.entry) {\r\n this.mainRule = ruleMethod;\r\n }\r\n return ruleMethod;\r\n }\r\n\r\n private resetState(): void {\r\n this.elementStack = [];\r\n this.lastElementStack = [];\r\n this.nextTokenIndex = 0;\r\n this.stackSize = 0;\r\n }\r\n\r\n private startImplementation(implementation: RuleImpl): RuleImpl {\r\n return (args) => {\r\n const size = this.keepStackSize();\r\n try {\r\n implementation(args);\r\n } finally {\r\n this.resetStackSize(size);\r\n }\r\n };\r\n }\r\n\r\n private removeUnexpectedElements(): void {\r\n this.elementStack.splice(this.stackSize);\r\n }\r\n\r\n keepStackSize(): number {\r\n const size = this.elementStack.length;\r\n this.stackSize = size;\r\n return size;\r\n }\r\n\r\n resetStackSize(size: number): void {\r\n this.removeUnexpectedElements();\r\n this.stackSize = size;\r\n }\r\n\r\n consume(idx: number, tokenType: TokenType, feature: AbstractElement): void {\r\n this.wrapper.wrapConsume(idx, tokenType);\r\n if (!this.isRecording()) {\r\n this.lastElementStack = [...this.elementStack, feature];\r\n this.nextTokenIndex = this.currIdx + 1;\r\n }\r\n }\r\n\r\n subrule(idx: number, rule: RuleResult, fragment: boolean, feature: AbstractElement, args: Args): void {\r\n this.before(feature);\r\n this.wrapper.wrapSubrule(idx, rule, args);\r\n this.after(feature);\r\n }\r\n\r\n before(element: AbstractElement): void {\r\n if (!this.isRecording()) {\r\n this.elementStack.push(element);\r\n }\r\n }\r\n\r\n after(element: AbstractElement): void {\r\n if (!this.isRecording()) {\r\n const index = this.elementStack.lastIndexOf(element);\r\n if (index >= 0) {\r\n this.elementStack.splice(index);\r\n }\r\n }\r\n }\r\n\r\n get currIdx(): number {\r\n return (this.wrapper as any).currIdx;\r\n }\r\n}\r\n\r\nconst defaultConfig: IParserConfig = {\r\n recoveryEnabled: true,\r\n nodeLocationTracking: 'full',\r\n skipValidations: true,\r\n errorMessageProvider: new LangiumParserErrorMessageProvider()\r\n};\r\n\r\n/**\r\n * This class wraps the embedded actions parser of chevrotain and exposes protected methods.\r\n * This way, we can build the `LangiumParser` as a composition.\r\n */\r\nclass ChevrotainWrapper extends EmbeddedActionsParser {\r\n\r\n // This array is set in the base implementation of Chevrotain.\r\n definitionErrors: IParserDefinitionError[];\r\n\r\n constructor(tokens: TokenVocabulary, config: IParserConfig) {\r\n const useDefaultLookahead = config && 'maxLookahead' in config;\r\n super(tokens, {\r\n ...defaultConfig,\r\n lookaheadStrategy: useDefaultLookahead\r\n ? new LLkLookaheadStrategy({ maxLookahead: config.maxLookahead })\r\n : new LLStarLookaheadStrategy({\r\n // If validations are skipped, don't log the lookahead warnings\r\n logging: config.skipValidations ? () => { } : undefined\r\n }),\r\n ...config,\r\n });\r\n }\r\n\r\n get IS_RECORDING(): boolean {\r\n return this.RECORDING_PHASE;\r\n }\r\n\r\n DEFINE_RULE(name: string, impl: RuleImpl): RuleResult {\r\n return this.RULE(name, impl);\r\n }\r\n\r\n wrapSelfAnalysis(): void {\r\n this.performSelfAnalysis();\r\n }\r\n\r\n wrapConsume(idx: number, tokenType: TokenType): IToken {\r\n return this.consume(idx, tokenType);\r\n }\r\n\r\n wrapSubrule(idx: number, rule: RuleResult, args: Args): unknown {\r\n return this.subrule(idx, rule, {\r\n ARGS: [args]\r\n });\r\n }\r\n\r\n wrapOr(idx: number, choices: Array>): void {\r\n this.or(idx, choices);\r\n }\r\n\r\n wrapOption(idx: number, callback: DSLMethodOpts): void {\r\n this.option(idx, callback);\r\n }\r\n\r\n wrapMany(idx: number, callback: DSLMethodOpts): void {\r\n this.many(idx, callback);\r\n }\r\n\r\n wrapAtLeastOne(idx: number, callback: DSLMethodOpts): void {\r\n this.atLeastOne(idx, callback);\r\n }\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { IOrAlt, TokenType, TokenTypeDictionary } from 'chevrotain';\r\nimport type { AbstractElement, Action, Alternatives, Condition, CrossReference, Grammar, Group, Keyword, NamedArgument, ParserRule, RuleCall, UnorderedGroup } from '../languages/generated/ast.js';\r\nimport type { BaseParser } from './langium-parser.js';\r\nimport type { AstNode } from '../syntax-tree.js';\r\nimport type { Cardinality } from '../utils/grammar-utils.js';\r\nimport { EMPTY_ALT, EOF } from 'chevrotain';\r\nimport { isAction, isAlternatives, isEndOfFile, isAssignment, isConjunction, isCrossReference, isDisjunction, isGroup, isKeyword, isNegation, isParameterReference, isParserRule, isRuleCall, isTerminalRule, isUnorderedGroup, isBooleanLiteral } from '../languages/generated/ast.js';\r\nimport { assertUnreachable, ErrorWithLocation } from '../utils/errors.js';\r\nimport { stream } from '../utils/stream.js';\r\nimport { findNameAssignment, getAllReachableRules, getTypeName } from '../utils/grammar-utils.js';\r\n\r\ntype RuleContext = {\r\n optional: number,\r\n consume: number,\r\n subrule: number,\r\n many: number,\r\n or: number\r\n} & ParserContext;\r\n\r\ntype ParserContext = {\r\n parser: BaseParser\r\n tokens: TokenTypeDictionary\r\n ruleNames: Map\r\n}\r\n\r\ntype Rule = (args: Args) => unknown;\r\n\r\ntype Args = Record;\r\n\r\ntype Predicate = (args: Args) => boolean;\r\n\r\ntype Method = (args: Args) => void;\r\n\r\nexport function createParser(grammar: Grammar, parser: T, tokens: TokenTypeDictionary): T {\r\n const parserContext: ParserContext = {\r\n parser,\r\n tokens,\r\n ruleNames: new Map()\r\n };\r\n buildRules(parserContext, grammar);\r\n return parser;\r\n}\r\n\r\nfunction buildRules(parserContext: ParserContext, grammar: Grammar): void {\r\n const reachable = getAllReachableRules(grammar, false);\r\n const parserRules = stream(grammar.rules).filter(isParserRule).filter(rule => reachable.has(rule));\r\n for (const rule of parserRules) {\r\n const ctx: RuleContext = {\r\n ...parserContext,\r\n consume: 1,\r\n optional: 1,\r\n subrule: 1,\r\n many: 1,\r\n or: 1\r\n };\r\n parserContext.parser.rule(rule, buildElement(ctx, rule.definition));\r\n }\r\n}\r\n\r\nfunction buildElement(ctx: RuleContext, element: AbstractElement, ignoreGuard = false): Method {\r\n let method: Method;\r\n if (isKeyword(element)) {\r\n method = buildKeyword(ctx, element);\r\n } else if (isAction(element)) {\r\n method = buildAction(ctx, element);\r\n } else if (isAssignment(element)) {\r\n method = buildElement(ctx, element.terminal);\r\n } else if (isCrossReference(element)) {\r\n method = buildCrossReference(ctx, element);\r\n } else if (isRuleCall(element)) {\r\n method = buildRuleCall(ctx, element);\r\n } else if (isAlternatives(element)) {\r\n method = buildAlternatives(ctx, element);\r\n } else if (isUnorderedGroup(element)) {\r\n method = buildUnorderedGroup(ctx, element);\r\n } else if (isGroup(element)) {\r\n method = buildGroup(ctx, element);\r\n } else if(isEndOfFile(element)) {\r\n const idx = ctx.consume++;\r\n method = () => ctx.parser.consume(idx, EOF, element);\r\n } else {\r\n throw new ErrorWithLocation(element.$cstNode, `Unexpected element type: ${element.$type}`);\r\n }\r\n return wrap(ctx, ignoreGuard ? undefined : getGuardCondition(element), method, element.cardinality);\r\n}\r\n\r\nfunction buildAction(ctx: RuleContext, action: Action): Method {\r\n const actionType = getTypeName(action);\r\n return () => ctx.parser.action(actionType, action);\r\n}\r\n\r\nfunction buildRuleCall(ctx: RuleContext, ruleCall: RuleCall): Method {\r\n const rule = ruleCall.rule.ref;\r\n if (isParserRule(rule)) {\r\n const idx = ctx.subrule++;\r\n const fragment = rule.fragment;\r\n const predicate = ruleCall.arguments.length > 0 ? buildRuleCallPredicate(rule, ruleCall.arguments) : () => ({});\r\n return (args) => ctx.parser.subrule(idx, getRule(ctx, rule), fragment, ruleCall, predicate(args));\r\n } else if (isTerminalRule(rule)) {\r\n const idx = ctx.consume++;\r\n const method = getToken(ctx, rule.name);\r\n return () => ctx.parser.consume(idx, method, ruleCall);\r\n } else if (!rule) {\r\n throw new ErrorWithLocation(ruleCall.$cstNode, `Undefined rule: ${ruleCall.rule.$refText}`);\r\n } else {\r\n assertUnreachable(rule);\r\n }\r\n}\r\n\r\nfunction buildRuleCallPredicate(rule: ParserRule, namedArgs: NamedArgument[]): (args: Args) => Args {\r\n const predicates = namedArgs.map(e => buildPredicate(e.value));\r\n return (args) => {\r\n const ruleArgs: Args = {};\r\n for (let i = 0; i < predicates.length; i++) {\r\n const ruleTarget = rule.parameters[i];\r\n const predicate = predicates[i];\r\n ruleArgs[ruleTarget.name] = predicate(args);\r\n }\r\n return ruleArgs;\r\n };\r\n}\r\n\r\ninterface PredicatedMethod {\r\n ALT: Method,\r\n GATE?: Predicate\r\n}\r\n\r\nfunction buildPredicate(condition: Condition): Predicate {\r\n if (isDisjunction(condition)) {\r\n const left = buildPredicate(condition.left);\r\n const right = buildPredicate(condition.right);\r\n return (args) => (left(args) || right(args));\r\n } else if (isConjunction(condition)) {\r\n const left = buildPredicate(condition.left);\r\n const right = buildPredicate(condition.right);\r\n return (args) => (left(args) && right(args));\r\n } else if (isNegation(condition)) {\r\n const value = buildPredicate(condition.value);\r\n return (args) => !value(args);\r\n } else if (isParameterReference(condition)) {\r\n const name = condition.parameter.ref!.name;\r\n return (args) => args !== undefined && args[name] === true;\r\n } else if (isBooleanLiteral(condition)) {\r\n const value = Boolean(condition.true);\r\n return () => value;\r\n }\r\n assertUnreachable(condition);\r\n}\r\n\r\nfunction buildAlternatives(ctx: RuleContext, alternatives: Alternatives): Method {\r\n if (alternatives.elements.length === 1) {\r\n return buildElement(ctx, alternatives.elements[0]);\r\n } else {\r\n const methods: PredicatedMethod[] = [];\r\n\r\n for (const element of alternatives.elements) {\r\n const predicatedMethod: PredicatedMethod = {\r\n // Since we handle the guard condition in the alternative already\r\n // We can ignore the group guard condition inside\r\n ALT: buildElement(ctx, element, true)\r\n };\r\n const guard = getGuardCondition(element);\r\n if (guard) {\r\n predicatedMethod.GATE = buildPredicate(guard);\r\n }\r\n methods.push(predicatedMethod);\r\n }\r\n\r\n const idx = ctx.or++;\r\n return (args) => ctx.parser.alternatives(idx, methods.map(method => {\r\n const alt: IOrAlt = {\r\n ALT: () => method.ALT(args)\r\n };\r\n const gate = method.GATE;\r\n if (gate) {\r\n alt.GATE = () => gate(args);\r\n }\r\n return alt;\r\n }));\r\n }\r\n}\r\n\r\nfunction buildUnorderedGroup(ctx: RuleContext, group: UnorderedGroup): Method {\r\n if (group.elements.length === 1) {\r\n return buildElement(ctx, group.elements[0]);\r\n }\r\n const methods: PredicatedMethod[] = [];\r\n\r\n for (const element of group.elements) {\r\n const predicatedMethod: PredicatedMethod = {\r\n // Since we handle the guard condition in the alternative already\r\n // We can ignore the group guard condition inside\r\n ALT: buildElement(ctx, element, true)\r\n };\r\n const guard = getGuardCondition(element);\r\n if (guard) {\r\n predicatedMethod.GATE = buildPredicate(guard);\r\n }\r\n methods.push(predicatedMethod);\r\n }\r\n\r\n const orIdx = ctx.or++;\r\n\r\n const idFunc = (groupIdx: number, lParser: BaseParser) => {\r\n const stackId = lParser.getRuleStack().join('-');\r\n return `uGroup_${groupIdx}_${stackId}`;\r\n };\r\n const alternatives: Method = (args) => ctx.parser.alternatives(orIdx, methods.map((method, idx) => {\r\n const alt: IOrAlt = { ALT: () => true };\r\n const parser = ctx.parser;\r\n alt.ALT = () => {\r\n method.ALT(args);\r\n if (!parser.isRecording()) {\r\n const key = idFunc(orIdx, parser);\r\n if (!parser.unorderedGroups.get(key)) {\r\n // init after clear state\r\n parser.unorderedGroups.set(key, []);\r\n }\r\n const groupState = parser.unorderedGroups.get(key)!;\r\n if (typeof groupState?.[idx] === 'undefined') {\r\n // Not accessed yet\r\n groupState[idx] = true;\r\n }\r\n }\r\n };\r\n const gate = method.GATE;\r\n if (gate) {\r\n alt.GATE = () => gate(args);\r\n } else {\r\n alt.GATE = () => {\r\n const trackedAlternatives = parser.unorderedGroups.get(idFunc(orIdx, parser));\r\n const allow = !trackedAlternatives?.[idx];\r\n return allow;\r\n };\r\n }\r\n return alt;\r\n }));\r\n const wrapped = wrap(ctx, getGuardCondition(group), alternatives, '*');\r\n return (args) => {\r\n wrapped(args);\r\n if (!ctx.parser.isRecording()) {\r\n ctx.parser.unorderedGroups.delete(idFunc(orIdx, ctx.parser));\r\n }\r\n };\r\n}\r\n\r\nfunction buildGroup(ctx: RuleContext, group: Group): Method {\r\n const methods = group.elements.map(e => buildElement(ctx, e));\r\n return (args) => methods.forEach(method => method(args));\r\n}\r\n\r\nfunction getGuardCondition(element: AbstractElement): Condition | undefined {\r\n if (isGroup(element)) {\r\n return element.guardCondition;\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction buildCrossReference(ctx: RuleContext, crossRef: CrossReference, terminal = crossRef.terminal): Method {\r\n if (!terminal) {\r\n if (!crossRef.type.ref) {\r\n throw new Error('Could not resolve reference to type: ' + crossRef.type.$refText);\r\n }\r\n const assignment = findNameAssignment(crossRef.type.ref);\r\n const assignTerminal = assignment?.terminal;\r\n if (!assignTerminal) {\r\n throw new Error('Could not find name assignment for type: ' + getTypeName(crossRef.type.ref));\r\n }\r\n return buildCrossReference(ctx, crossRef, assignTerminal);\r\n } else if (isRuleCall(terminal) && isParserRule(terminal.rule.ref)) {\r\n // The terminal is a data type rule here. Everything else will result in a validation error.\r\n const rule = terminal.rule.ref;\r\n const idx = ctx.subrule++;\r\n return (args) => ctx.parser.subrule(idx, getRule(ctx, rule), false, crossRef, args);\r\n } else if (isRuleCall(terminal) && isTerminalRule(terminal.rule.ref)) {\r\n const idx = ctx.consume++;\r\n const terminalRule = getToken(ctx, terminal.rule.ref.name);\r\n return () => ctx.parser.consume(idx, terminalRule, crossRef);\r\n } else if (isKeyword(terminal)) {\r\n const idx = ctx.consume++;\r\n const keyword = getToken(ctx, terminal.value);\r\n return () => ctx.parser.consume(idx, keyword, crossRef);\r\n }\r\n else {\r\n throw new Error('Could not build cross reference parser');\r\n }\r\n}\r\n\r\nfunction buildKeyword(ctx: RuleContext, keyword: Keyword): Method {\r\n const idx = ctx.consume++;\r\n const token = ctx.tokens[keyword.value];\r\n if (!token) {\r\n throw new Error('Could not find token for keyword: ' + keyword.value);\r\n }\r\n return () => ctx.parser.consume(idx, token, keyword);\r\n}\r\n\r\nfunction wrap(ctx: RuleContext, guard: Condition | undefined, method: Method, cardinality: Cardinality): Method {\r\n const gate = guard && buildPredicate(guard);\r\n\r\n if (!cardinality) {\r\n if (gate) {\r\n const idx = ctx.or++;\r\n return (args) => ctx.parser.alternatives(idx, [\r\n {\r\n ALT: () => method(args),\r\n GATE: () => gate(args)\r\n },\r\n {\r\n ALT: EMPTY_ALT(),\r\n GATE: () => !gate(args)\r\n }\r\n ]);\r\n } else {\r\n return method;\r\n }\r\n }\r\n\r\n if (cardinality === '*') {\r\n const idx = ctx.many++;\r\n return (args) => ctx.parser.many(idx, {\r\n DEF: () => method(args),\r\n GATE: gate ? () => gate(args) : undefined\r\n });\r\n } else if (cardinality === '+') {\r\n const idx = ctx.many++;\r\n if (gate) {\r\n const orIdx = ctx.or++;\r\n // In the case of a guard condition for the `+` group\r\n // We combine it with an empty alternative\r\n // If the condition returns true, it needs to parse at least a single iteration\r\n // If its false, it is not allowed to parse anything\r\n return (args) => ctx.parser.alternatives(orIdx, [\r\n {\r\n ALT: () => ctx.parser.atLeastOne(idx, {\r\n DEF: () => method(args)\r\n }),\r\n GATE: () => gate(args)\r\n },\r\n {\r\n ALT: EMPTY_ALT(),\r\n GATE: () => !gate(args)\r\n }\r\n ]);\r\n } else {\r\n return (args) => ctx.parser.atLeastOne(idx, {\r\n DEF: () => method(args),\r\n });\r\n }\r\n } else if (cardinality === '?') {\r\n const idx = ctx.optional++;\r\n return (args) => ctx.parser.optional(idx, {\r\n DEF: () => method(args),\r\n GATE: gate ? () => gate(args) : undefined\r\n });\r\n } else {\r\n assertUnreachable(cardinality);\r\n }\r\n}\r\n\r\nfunction getRule(ctx: ParserContext, element: ParserRule | AbstractElement): Rule {\r\n const name = getRuleName(ctx, element);\r\n const rule = ctx.parser.getRule(name);\r\n if (!rule) throw new Error(`Rule \"${name}\" not found.\"`);\r\n return rule;\r\n}\r\n\r\nfunction getRuleName(ctx: ParserContext, element: ParserRule | AbstractElement): string {\r\n if (isParserRule(element)) {\r\n return element.name;\r\n } else if (ctx.ruleNames.has(element)) {\r\n return ctx.ruleNames.get(element)!;\r\n } else {\r\n let item: AstNode = element;\r\n let parent: AstNode = item.$container!;\r\n let ruleName: string = element.$type;\r\n while (!isParserRule(parent)) {\r\n if (isGroup(parent) || isAlternatives(parent) || isUnorderedGroup(parent)) {\r\n const index = parent.elements.indexOf(item as AbstractElement);\r\n ruleName = index.toString() + ':' + ruleName;\r\n }\r\n item = parent;\r\n parent = parent.$container!;\r\n }\r\n const rule = parent as ParserRule;\r\n ruleName = rule.name + ':' + ruleName;\r\n ctx.ruleNames.set(element, ruleName);\r\n return ruleName;\r\n }\r\n}\r\n\r\nfunction getToken(ctx: ParserContext, name: string): TokenType {\r\n const token = ctx.tokens[name];\r\n if (!token) throw new Error(`Token \"${name}\" not found.\"`);\r\n return token;\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport { LangiumCompletionParser } from './langium-parser.js';\r\nimport { createParser } from './parser-builder-base.js';\r\n\r\nexport function createCompletionParser(services: LangiumCoreServices): LangiumCompletionParser {\r\n const grammar = services.Grammar;\r\n const lexer = services.parser.Lexer;\r\n const parser = new LangiumCompletionParser(services);\r\n createParser(grammar, parser, lexer.definition);\r\n parser.finalize();\r\n return parser;\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport { LangiumParser } from './langium-parser.js';\r\nimport { createParser } from './parser-builder-base.js';\r\n\r\n/**\r\n * Create and finalize a Langium parser. The parser rules are derived from the grammar, which is\r\n * available at `services.Grammar`.\r\n */\r\nexport function createLangiumParser(services: LangiumCoreServices): LangiumParser {\r\n const parser = prepareLangiumParser(services);\r\n parser.finalize();\r\n return parser;\r\n}\r\n\r\n/**\r\n * Create a Langium parser without finalizing it. This is used to extract more detailed error\r\n * information when the parser is initially validated.\r\n */\r\nexport function prepareLangiumParser(services: LangiumCoreServices): LangiumParser {\r\n const grammar = services.Grammar;\r\n const lexer = services.parser.Lexer;\r\n const parser = new LangiumParser(services);\r\n return createParser(grammar, parser, lexer.definition);\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { CustomPatternMatcherFunc, ILexingError, TokenPattern, TokenType, TokenVocabulary } from 'chevrotain';\r\nimport type { AbstractRule, Grammar, Keyword, TerminalRule } from '../languages/generated/ast.js';\r\nimport type { Stream } from '../utils/stream.js';\r\nimport { Lexer } from 'chevrotain';\r\nimport { isKeyword, isParserRule, isTerminalRule } from '../languages/generated/ast.js';\r\nimport { streamAllContents } from '../utils/ast-utils.js';\r\nimport { getAllReachableRules, terminalRegex } from '../utils/grammar-utils.js';\r\nimport { getCaseInsensitivePattern, isWhitespace, partialMatches } from '../utils/regexp-utils.js';\r\nimport { stream } from '../utils/stream.js';\r\n\r\nexport interface TokenBuilderOptions {\r\n caseInsensitive?: boolean\r\n}\r\n\r\nexport interface TokenBuilder {\r\n buildTokens(grammar: Grammar, options?: TokenBuilderOptions): TokenVocabulary;\r\n /**\r\n * Produces a lexing report for the given text that was just tokenized using the tokens provided by this builder.\r\n *\r\n * @param text The text that was tokenized.\r\n */\r\n flushLexingReport?(text: string): LexingReport;\r\n}\r\n\r\n/**\r\n * A custom lexing report that can be produced by the token builder during the lexing process.\r\n * Adopters need to ensure that the any custom fields are serializable so they can be sent across worker threads.\r\n */\r\nexport interface LexingReport {\r\n diagnostics: LexingDiagnostic[];\r\n}\r\n\r\nexport type LexingDiagnosticSeverity = 'error' | 'warning' | 'info' | 'hint';\r\n\r\nexport interface LexingDiagnostic extends ILexingError {\r\n severity?: LexingDiagnosticSeverity;\r\n}\r\n\r\nexport class DefaultTokenBuilder implements TokenBuilder {\r\n /**\r\n * The list of diagnostics stored during the lexing process of a single text.\r\n */\r\n protected diagnostics: LexingDiagnostic[] = [];\r\n\r\n buildTokens(grammar: Grammar, options?: TokenBuilderOptions): TokenVocabulary {\r\n const reachableRules = stream(getAllReachableRules(grammar, false));\r\n const terminalTokens: TokenType[] = this.buildTerminalTokens(reachableRules);\r\n const tokens: TokenType[] = this.buildKeywordTokens(reachableRules, terminalTokens, options);\r\n\r\n terminalTokens.forEach(terminalToken => {\r\n const pattern = terminalToken.PATTERN;\r\n if (typeof pattern === 'object' && pattern && 'test' in pattern && isWhitespace(pattern)) {\r\n tokens.unshift(terminalToken);\r\n } else {\r\n tokens.push(terminalToken);\r\n }\r\n });\r\n // We don't need to add the EOF token explicitly.\r\n // It is automatically available at the end of the token stream.\r\n return tokens;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n flushLexingReport(text: string): LexingReport {\r\n return { diagnostics: this.popDiagnostics() };\r\n }\r\n\r\n protected popDiagnostics(): LexingDiagnostic[] {\r\n const diagnostics = [...this.diagnostics];\r\n this.diagnostics = [];\r\n return diagnostics;\r\n }\r\n\r\n protected buildTerminalTokens(rules: Stream): TokenType[] {\r\n return rules.filter(isTerminalRule).filter(e => !e.fragment)\r\n .map(terminal => this.buildTerminalToken(terminal)).toArray();\r\n }\r\n\r\n protected buildTerminalToken(terminal: TerminalRule): TokenType {\r\n const regex = terminalRegex(terminal);\r\n const pattern = this.requiresCustomPattern(regex) ? this.regexPatternFunction(regex) : regex;\r\n const tokenType: TokenType = {\r\n name: terminal.name,\r\n PATTERN: pattern,\r\n };\r\n if (typeof pattern === 'function') {\r\n tokenType.LINE_BREAKS = true;\r\n }\r\n if (terminal.hidden) {\r\n // Only skip tokens that are able to accept whitespace\r\n tokenType.GROUP = isWhitespace(regex) ? Lexer.SKIPPED : 'hidden';\r\n }\r\n return tokenType;\r\n }\r\n\r\n protected requiresCustomPattern(regex: RegExp): boolean {\r\n if (regex.flags.includes('u') || regex.flags.includes('s')) {\r\n // Unicode and dotall regexes are not supported by Chevrotain.\r\n return true;\r\n } else if (regex.source.includes('?<=') || regex.source.includes('? {\r\n stickyRegex.lastIndex = offset;\r\n const execResult = stickyRegex.exec(text);\r\n return execResult;\r\n };\r\n }\r\n\r\n protected buildKeywordTokens(rules: Stream, terminalTokens: TokenType[], options?: TokenBuilderOptions): TokenType[] {\r\n return rules\r\n // We filter by parser rules, since keywords in terminal rules get transformed into regex and are not actual tokens\r\n .filter(isParserRule)\r\n .flatMap(rule => streamAllContents(rule).filter(isKeyword))\r\n .distinct(e => e.value).toArray()\r\n // Sort keywords by descending length\r\n .sort((a, b) => b.value.length - a.value.length)\r\n .map(keyword => this.buildKeywordToken(keyword, terminalTokens, Boolean(options?.caseInsensitive)));\r\n }\r\n\r\n protected buildKeywordToken(keyword: Keyword, terminalTokens: TokenType[], caseInsensitive: boolean): TokenType {\r\n const keywordPattern = this.buildKeywordPattern(keyword, caseInsensitive);\r\n const tokenType: TokenType = {\r\n name: keyword.value,\r\n PATTERN: keywordPattern,\r\n LONGER_ALT: this.findLongerAlt(keyword, terminalTokens)\r\n };\r\n\r\n if (typeof keywordPattern === 'function') {\r\n tokenType.LINE_BREAKS = true;\r\n }\r\n\r\n return tokenType;\r\n }\r\n\r\n protected buildKeywordPattern(keyword: Keyword, caseInsensitive: boolean): TokenPattern {\r\n return caseInsensitive ?\r\n new RegExp(getCaseInsensitivePattern(keyword.value)) :\r\n keyword.value;\r\n }\r\n\r\n protected findLongerAlt(keyword: Keyword, terminalTokens: TokenType[]): TokenType[] {\r\n return terminalTokens.reduce((longerAlts: TokenType[], token) => {\r\n const pattern = token?.PATTERN as RegExp;\r\n if (pattern?.source && partialMatches('^' + pattern.source + '$', keyword.value)) {\r\n longerAlts.push(token);\r\n }\r\n return longerAlts;\r\n }, []);\r\n }\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { AbstractElement, AbstractRule } from '../languages/generated/ast.js';\r\nimport type { CstNode } from '../syntax-tree.js';\r\nimport { isCrossReference, isRuleCall } from '../languages/generated/ast.js';\r\nimport { getCrossReferenceTerminal, getRuleType } from '../utils/grammar-utils.js';\r\n\r\n/**\r\n * Language-specific service for converting string values from the source text format into a value to be held in the AST.\r\n */\r\nexport interface ValueConverter {\r\n /**\r\n * Converts a string value from the source text format into a value to be held in the AST.\r\n */\r\n convert(input: string, cstNode: CstNode): ValueType;\r\n}\r\n\r\nexport type ValueType = string | number | boolean | bigint | Date;\r\n\r\nexport class DefaultValueConverter implements ValueConverter {\r\n\r\n convert(input: string, cstNode: CstNode): ValueType {\r\n let feature: AbstractElement | undefined = cstNode.grammarSource;\r\n if (isCrossReference(feature)) {\r\n feature = getCrossReferenceTerminal(feature);\r\n }\r\n if (isRuleCall(feature)) {\r\n const rule = feature.rule.ref;\r\n if (!rule) {\r\n throw new Error('This cst node was not parsed by a rule.');\r\n }\r\n return this.runConverter(rule, input, cstNode);\r\n }\r\n return input;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n protected runConverter(rule: AbstractRule, input: string, cstNode: CstNode): ValueType {\r\n switch (rule.name.toUpperCase()) {\r\n case 'INT': return ValueConverter.convertInt(input);\r\n case 'STRING': return ValueConverter.convertString(input);\r\n case 'ID': return ValueConverter.convertID(input);\r\n }\r\n switch (getRuleType(rule)?.toLowerCase()) {\r\n case 'number': return ValueConverter.convertNumber(input);\r\n case 'boolean': return ValueConverter.convertBoolean(input);\r\n case 'bigint': return ValueConverter.convertBigint(input);\r\n case 'date': return ValueConverter.convertDate(input);\r\n default: return input;\r\n }\r\n }\r\n}\r\n\r\nexport namespace ValueConverter {\r\n\r\n export function convertString(input: string): string {\r\n let result = '';\r\n for (let i = 1; i < input.length - 1; i++) {\r\n const c = input.charAt(i);\r\n if (c === '\\\\') {\r\n const c1 = input.charAt(++i);\r\n result += convertEscapeCharacter(c1);\r\n } else {\r\n result += c;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n function convertEscapeCharacter(char: string): string {\r\n switch (char) {\r\n case 'b': return '\\b';\r\n case 'f': return '\\f';\r\n case 'n': return '\\n';\r\n case 'r': return '\\r';\r\n case 't': return '\\t';\r\n case 'v': return '\\v';\r\n case '0': return '\\0';\r\n default: return char;\r\n }\r\n }\r\n\r\n export function convertID(input: string): string {\r\n if (input.charAt(0) === '^') {\r\n return input.substring(1);\r\n } else {\r\n return input;\r\n }\r\n }\r\n\r\n export function convertInt(input: string): number {\r\n return parseInt(input);\r\n }\r\n\r\n export function convertBigint(input: string): bigint {\r\n return BigInt(input);\r\n }\r\n\r\n export function convertDate(input: string): Date {\r\n return new Date(input);\r\n }\r\n\r\n export function convertNumber(input: string): number {\r\n return Number(input);\r\n }\r\n\r\n export function convertBoolean(input: string): boolean {\r\n return input.toLowerCase() === 'true';\r\n }\r\n\r\n}\r\n", "\"use strict\";\n/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nlet _ral;\nfunction RAL() {\n if (_ral === undefined) {\n throw new Error(`No runtime abstraction layer installed`);\n }\n return _ral;\n}\n(function (RAL) {\n function install(ral) {\n if (ral === undefined) {\n throw new Error(`No runtime abstraction layer provided`);\n }\n _ral = ral;\n }\n RAL.install = install;\n})(RAL || (RAL = {}));\nexports.default = RAL;\n", "\"use strict\";\n/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stringArray = exports.array = exports.func = exports.error = exports.number = exports.string = exports.boolean = void 0;\nfunction boolean(value) {\n return value === true || value === false;\n}\nexports.boolean = boolean;\nfunction string(value) {\n return typeof value === 'string' || value instanceof String;\n}\nexports.string = string;\nfunction number(value) {\n return typeof value === 'number' || value instanceof Number;\n}\nexports.number = number;\nfunction error(value) {\n return value instanceof Error;\n}\nexports.error = error;\nfunction func(value) {\n return typeof value === 'function';\n}\nexports.func = func;\nfunction array(value) {\n return Array.isArray(value);\n}\nexports.array = array;\nfunction stringArray(value) {\n return array(value) && value.every(elem => string(elem));\n}\nexports.stringArray = stringArray;\n", "\"use strict\";\n/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Emitter = exports.Event = void 0;\nconst ral_1 = require(\"./ral\");\nvar Event;\n(function (Event) {\n const _disposable = { dispose() { } };\n Event.None = function () { return _disposable; };\n})(Event || (exports.Event = Event = {}));\nclass CallbackList {\n add(callback, context = null, bucket) {\n if (!this._callbacks) {\n this._callbacks = [];\n this._contexts = [];\n }\n this._callbacks.push(callback);\n this._contexts.push(context);\n if (Array.isArray(bucket)) {\n bucket.push({ dispose: () => this.remove(callback, context) });\n }\n }\n remove(callback, context = null) {\n if (!this._callbacks) {\n return;\n }\n let foundCallbackWithDifferentContext = false;\n for (let i = 0, len = this._callbacks.length; i < len; i++) {\n if (this._callbacks[i] === callback) {\n if (this._contexts[i] === context) {\n // callback & context match => remove it\n this._callbacks.splice(i, 1);\n this._contexts.splice(i, 1);\n return;\n }\n else {\n foundCallbackWithDifferentContext = true;\n }\n }\n }\n if (foundCallbackWithDifferentContext) {\n throw new Error('When adding a listener with a context, you should remove it with the same context');\n }\n }\n invoke(...args) {\n if (!this._callbacks) {\n return [];\n }\n const ret = [], callbacks = this._callbacks.slice(0), contexts = this._contexts.slice(0);\n for (let i = 0, len = callbacks.length; i < len; i++) {\n try {\n ret.push(callbacks[i].apply(contexts[i], args));\n }\n catch (e) {\n // eslint-disable-next-line no-console\n (0, ral_1.default)().console.error(e);\n }\n }\n return ret;\n }\n isEmpty() {\n return !this._callbacks || this._callbacks.length === 0;\n }\n dispose() {\n this._callbacks = undefined;\n this._contexts = undefined;\n }\n}\nclass Emitter {\n constructor(_options) {\n this._options = _options;\n }\n /**\n * For the public to allow to subscribe\n * to events from this Emitter\n */\n get event() {\n if (!this._event) {\n this._event = (listener, thisArgs, disposables) => {\n if (!this._callbacks) {\n this._callbacks = new CallbackList();\n }\n if (this._options && this._options.onFirstListenerAdd && this._callbacks.isEmpty()) {\n this._options.onFirstListenerAdd(this);\n }\n this._callbacks.add(listener, thisArgs);\n const result = {\n dispose: () => {\n if (!this._callbacks) {\n // disposable is disposed after emitter is disposed.\n return;\n }\n this._callbacks.remove(listener, thisArgs);\n result.dispose = Emitter._noop;\n if (this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty()) {\n this._options.onLastListenerRemove(this);\n }\n }\n };\n if (Array.isArray(disposables)) {\n disposables.push(result);\n }\n return result;\n };\n }\n return this._event;\n }\n /**\n * To be kept private to fire an event to\n * subscribers\n */\n fire(event) {\n if (this._callbacks) {\n this._callbacks.invoke.call(this._callbacks, event);\n }\n }\n dispose() {\n if (this._callbacks) {\n this._callbacks.dispose();\n this._callbacks = undefined;\n }\n }\n}\nexports.Emitter = Emitter;\nEmitter._noop = function () { };\n", "\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CancellationTokenSource = exports.CancellationToken = void 0;\nconst ral_1 = require(\"./ral\");\nconst Is = require(\"./is\");\nconst events_1 = require(\"./events\");\nvar CancellationToken;\n(function (CancellationToken) {\n CancellationToken.None = Object.freeze({\n isCancellationRequested: false,\n onCancellationRequested: events_1.Event.None\n });\n CancellationToken.Cancelled = Object.freeze({\n isCancellationRequested: true,\n onCancellationRequested: events_1.Event.None\n });\n function is(value) {\n const candidate = value;\n return candidate && (candidate === CancellationToken.None\n || candidate === CancellationToken.Cancelled\n || (Is.boolean(candidate.isCancellationRequested) && !!candidate.onCancellationRequested));\n }\n CancellationToken.is = is;\n})(CancellationToken || (exports.CancellationToken = CancellationToken = {}));\nconst shortcutEvent = Object.freeze(function (callback, context) {\n const handle = (0, ral_1.default)().timer.setTimeout(callback.bind(context), 0);\n return { dispose() { handle.dispose(); } };\n});\nclass MutableToken {\n constructor() {\n this._isCancelled = false;\n }\n cancel() {\n if (!this._isCancelled) {\n this._isCancelled = true;\n if (this._emitter) {\n this._emitter.fire(undefined);\n this.dispose();\n }\n }\n }\n get isCancellationRequested() {\n return this._isCancelled;\n }\n get onCancellationRequested() {\n if (this._isCancelled) {\n return shortcutEvent;\n }\n if (!this._emitter) {\n this._emitter = new events_1.Emitter();\n }\n return this._emitter.event;\n }\n dispose() {\n if (this._emitter) {\n this._emitter.dispose();\n this._emitter = undefined;\n }\n }\n}\nclass CancellationTokenSource {\n get token() {\n if (!this._token) {\n // be lazy and create the token only when\n // actually needed\n this._token = new MutableToken();\n }\n return this._token;\n }\n cancel() {\n if (!this._token) {\n // save an object by returning the default\n // cancelled token when cancellation happens\n // before someone asks for the token\n this._token = CancellationToken.Cancelled;\n }\n else {\n this._token.cancel();\n }\n }\n dispose() {\n if (!this._token) {\n // ensure to initialize with an empty token if we had none\n this._token = CancellationToken.None;\n }\n else if (this._token instanceof MutableToken) {\n // actually dispose\n this._token.dispose();\n }\n }\n}\nexports.CancellationTokenSource = CancellationTokenSource;\n", "/******************************************************************************\r\n * Copyright 2024 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\n// eslint-disable-next-line no-restricted-imports\r\nexport * from 'vscode-jsonrpc/lib/common/cancellation.js';\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport { CancellationToken, CancellationTokenSource, type AbstractCancellationTokenSource } from '../utils/cancellation.js';\r\n\r\nexport type MaybePromise = T | Promise\r\n\r\n/**\r\n * Delays the execution of the current code to the next tick of the event loop.\r\n * Don't call this method directly in a tight loop to prevent too many promises from being created.\r\n */\r\nexport function delayNextTick(): Promise {\r\n return new Promise(resolve => {\r\n // In case we are running in a non-node environment, `setImmediate` isn't available.\r\n // Using `setTimeout` of the browser API accomplishes the same result.\r\n if (typeof setImmediate === 'undefined') {\r\n setTimeout(resolve, 0);\r\n } else {\r\n setImmediate(resolve);\r\n }\r\n });\r\n}\r\n\r\nlet lastTick = 0;\r\nlet globalInterruptionPeriod = 10;\r\n\r\n/**\r\n * Reset the global interruption period and create a cancellation token source.\r\n */\r\nexport function startCancelableOperation(): AbstractCancellationTokenSource {\r\n lastTick = performance.now();\r\n return new CancellationTokenSource();\r\n}\r\n\r\n/**\r\n * Change the period duration for `interruptAndCheck` to the given number of milliseconds.\r\n * The default value is 10ms.\r\n */\r\nexport function setInterruptionPeriod(period: number): void {\r\n globalInterruptionPeriod = period;\r\n}\r\n\r\n/**\r\n * This symbol may be thrown in an asynchronous context by any Langium service that receives\r\n * a `CancellationToken`. This means that the promise returned by such a service is rejected with\r\n * this symbol as rejection reason.\r\n */\r\nexport const OperationCancelled = Symbol('OperationCancelled');\r\n\r\n/**\r\n * Use this in a `catch` block to check whether the thrown object indicates that the operation\r\n * has been cancelled.\r\n */\r\nexport function isOperationCancelled(err: unknown): err is typeof OperationCancelled {\r\n return err === OperationCancelled;\r\n}\r\n\r\n/**\r\n * This function does two things:\r\n * 1. Check the elapsed time since the last call to this function or to `startCancelableOperation`. If the predefined\r\n * period (configured with `setInterruptionPeriod`) is exceeded, execution is delayed with `delayNextTick`.\r\n * 2. If the predefined period is not met yet or execution is resumed after an interruption, the given cancellation\r\n * token is checked, and if cancellation is requested, `OperationCanceled` is thrown.\r\n *\r\n * All services in Langium that receive a `CancellationToken` may potentially call this function, so the\r\n * `CancellationToken` must be caught (with an `async` try-catch block or a `catch` callback attached to\r\n * the promise) to avoid that event being exposed as an error.\r\n */\r\nexport async function interruptAndCheck(token: CancellationToken): Promise {\r\n if (token === CancellationToken.None) {\r\n // Early exit in case cancellation was disabled by the caller\r\n return;\r\n }\r\n const current = performance.now();\r\n if (current - lastTick >= globalInterruptionPeriod) {\r\n lastTick = current;\r\n await delayNextTick();\r\n // prevent calling delayNextTick every iteration of loop\r\n // where delayNextTick takes up the majority or all of the\r\n // globalInterruptionPeriod itself\r\n lastTick = performance.now();\r\n }\r\n if (token.isCancellationRequested) {\r\n throw OperationCancelled;\r\n }\r\n}\r\n\r\n/**\r\n * Simple implementation of the deferred pattern.\r\n * An object that exposes a promise and functions to resolve and reject it.\r\n */\r\nexport class Deferred {\r\n resolve: (value: T) => this;\r\n reject: (err?: unknown) => this;\r\n\r\n promise = new Promise((resolve, reject) => {\r\n this.resolve = (arg) => {\r\n resolve(arg);\r\n return this;\r\n };\r\n this.reject = (err) => {\r\n reject(err);\r\n return this;\r\n };\r\n });\r\n}\r\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nclass FullTextDocument {\n constructor(uri, languageId, version, content) {\n this._uri = uri;\n this._languageId = languageId;\n this._version = version;\n this._content = content;\n this._lineOffsets = undefined;\n }\n get uri() {\n return this._uri;\n }\n get languageId() {\n return this._languageId;\n }\n get version() {\n return this._version;\n }\n getText(range) {\n if (range) {\n const start = this.offsetAt(range.start);\n const end = this.offsetAt(range.end);\n return this._content.substring(start, end);\n }\n return this._content;\n }\n update(changes, version) {\n for (const change of changes) {\n if (FullTextDocument.isIncremental(change)) {\n // makes sure start is before end\n const range = getWellformedRange(change.range);\n // update content\n const startOffset = this.offsetAt(range.start);\n const endOffset = this.offsetAt(range.end);\n this._content = this._content.substring(0, startOffset) + change.text + this._content.substring(endOffset, this._content.length);\n // update the offsets\n const startLine = Math.max(range.start.line, 0);\n const endLine = Math.max(range.end.line, 0);\n let lineOffsets = this._lineOffsets;\n const addedLineOffsets = computeLineOffsets(change.text, false, startOffset);\n if (endLine - startLine === addedLineOffsets.length) {\n for (let i = 0, len = addedLineOffsets.length; i < len; i++) {\n lineOffsets[i + startLine + 1] = addedLineOffsets[i];\n }\n }\n else {\n if (addedLineOffsets.length < 10000) {\n lineOffsets.splice(startLine + 1, endLine - startLine, ...addedLineOffsets);\n }\n else { // avoid too many arguments for splice\n this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1));\n }\n }\n const diff = change.text.length - (endOffset - startOffset);\n if (diff !== 0) {\n for (let i = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i < len; i++) {\n lineOffsets[i] = lineOffsets[i] + diff;\n }\n }\n }\n else if (FullTextDocument.isFull(change)) {\n this._content = change.text;\n this._lineOffsets = undefined;\n }\n else {\n throw new Error('Unknown change event received');\n }\n }\n this._version = version;\n }\n getLineOffsets() {\n if (this._lineOffsets === undefined) {\n this._lineOffsets = computeLineOffsets(this._content, true);\n }\n return this._lineOffsets;\n }\n positionAt(offset) {\n offset = Math.max(Math.min(offset, this._content.length), 0);\n const lineOffsets = this.getLineOffsets();\n let low = 0, high = lineOffsets.length;\n if (high === 0) {\n return { line: 0, character: offset };\n }\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (lineOffsets[mid] > offset) {\n high = mid;\n }\n else {\n low = mid + 1;\n }\n }\n // low is the least x for which the line offset is larger than the current offset\n // or array.length if no line offset is larger than the current offset\n const line = low - 1;\n offset = this.ensureBeforeEOL(offset, lineOffsets[line]);\n return { line, character: offset - lineOffsets[line] };\n }\n offsetAt(position) {\n const lineOffsets = this.getLineOffsets();\n if (position.line >= lineOffsets.length) {\n return this._content.length;\n }\n else if (position.line < 0) {\n return 0;\n }\n const lineOffset = lineOffsets[position.line];\n if (position.character <= 0) {\n return lineOffset;\n }\n const nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;\n const offset = Math.min(lineOffset + position.character, nextLineOffset);\n return this.ensureBeforeEOL(offset, lineOffset);\n }\n ensureBeforeEOL(offset, lineOffset) {\n while (offset > lineOffset && isEOL(this._content.charCodeAt(offset - 1))) {\n offset--;\n }\n return offset;\n }\n get lineCount() {\n return this.getLineOffsets().length;\n }\n static isIncremental(event) {\n const candidate = event;\n return candidate !== undefined && candidate !== null &&\n typeof candidate.text === 'string' && candidate.range !== undefined &&\n (candidate.rangeLength === undefined || typeof candidate.rangeLength === 'number');\n }\n static isFull(event) {\n const candidate = event;\n return candidate !== undefined && candidate !== null &&\n typeof candidate.text === 'string' && candidate.range === undefined && candidate.rangeLength === undefined;\n }\n}\nexport var TextDocument;\n(function (TextDocument) {\n /**\n * Creates a new text document.\n *\n * @param uri The document's uri.\n * @param languageId The document's language Id.\n * @param version The document's initial version number.\n * @param content The document's content.\n */\n function create(uri, languageId, version, content) {\n return new FullTextDocument(uri, languageId, version, content);\n }\n TextDocument.create = create;\n /**\n * Updates a TextDocument by modifying its content.\n *\n * @param document the document to update. Only documents created by TextDocument.create are valid inputs.\n * @param changes the changes to apply to the document.\n * @param version the changes version for the document.\n * @returns The updated TextDocument. Note: That's the same document instance passed in as first parameter.\n *\n */\n function update(document, changes, version) {\n if (document instanceof FullTextDocument) {\n document.update(changes, version);\n return document;\n }\n else {\n throw new Error('TextDocument.update: document must be created by TextDocument.create');\n }\n }\n TextDocument.update = update;\n function applyEdits(document, edits) {\n const text = document.getText();\n const sortedEdits = mergeSort(edits.map(getWellformedEdit), (a, b) => {\n const diff = a.range.start.line - b.range.start.line;\n if (diff === 0) {\n return a.range.start.character - b.range.start.character;\n }\n return diff;\n });\n let lastModifiedOffset = 0;\n const spans = [];\n for (const e of sortedEdits) {\n const startOffset = document.offsetAt(e.range.start);\n if (startOffset < lastModifiedOffset) {\n throw new Error('Overlapping edit');\n }\n else if (startOffset > lastModifiedOffset) {\n spans.push(text.substring(lastModifiedOffset, startOffset));\n }\n if (e.newText.length) {\n spans.push(e.newText);\n }\n lastModifiedOffset = document.offsetAt(e.range.end);\n }\n spans.push(text.substr(lastModifiedOffset));\n return spans.join('');\n }\n TextDocument.applyEdits = applyEdits;\n})(TextDocument || (TextDocument = {}));\nfunction mergeSort(data, compare) {\n if (data.length <= 1) {\n // sorted\n return data;\n }\n const p = (data.length / 2) | 0;\n const left = data.slice(0, p);\n const right = data.slice(p);\n mergeSort(left, compare);\n mergeSort(right, compare);\n let leftIdx = 0;\n let rightIdx = 0;\n let i = 0;\n while (leftIdx < left.length && rightIdx < right.length) {\n const ret = compare(left[leftIdx], right[rightIdx]);\n if (ret <= 0) {\n // smaller_equal -> take left to preserve order\n data[i++] = left[leftIdx++];\n }\n else {\n // greater -> take right\n data[i++] = right[rightIdx++];\n }\n }\n while (leftIdx < left.length) {\n data[i++] = left[leftIdx++];\n }\n while (rightIdx < right.length) {\n data[i++] = right[rightIdx++];\n }\n return data;\n}\nfunction computeLineOffsets(text, isAtLineStart, textOffset = 0) {\n const result = isAtLineStart ? [textOffset] : [];\n for (let i = 0; i < text.length; i++) {\n const ch = text.charCodeAt(i);\n if (isEOL(ch)) {\n if (ch === 13 /* CharCode.CarriageReturn */ && i + 1 < text.length && text.charCodeAt(i + 1) === 10 /* CharCode.LineFeed */) {\n i++;\n }\n result.push(textOffset + i + 1);\n }\n }\n return result;\n}\nfunction isEOL(char) {\n return char === 13 /* CharCode.CarriageReturn */ || char === 10 /* CharCode.LineFeed */;\n}\nfunction getWellformedRange(range) {\n const start = range.start;\n const end = range.end;\n if (start.line > end.line || (start.line === end.line && start.character > end.character)) {\n return { start: end, end: start };\n }\n return range;\n}\nfunction getWellformedEdit(textEdit) {\n const range = getWellformedRange(textEdit.range);\n if (range !== textEdit.range) {\n return { newText: textEdit.newText, range };\n }\n return textEdit;\n}\n", "// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n// transplited with Babel\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n var res = '';\n var lastSegmentLength = 0;\n var lastSlash = -1;\n var dots = 0;\n var code;\n for (var i = 0; i <= path.length; ++i) {\n if (i < path.length)\n code = path.charCodeAt(i);\n else if (code === 47 /*/*/)\n break;\n else\n code = 47 /*/*/;\n if (code === 47 /*/*/) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n if (res.length > 2) {\n var lastSlashIndex = res.lastIndexOf('/');\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0)\n res += '/..';\n else\n res = '..';\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0)\n res += '/' + path.slice(lastSlash + 1, i);\n else\n res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === 46 /*.*/ && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\n\nfunction _format(sep, pathObject) {\n var dir = pathObject.dir || pathObject.root;\n var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n if (!dir) {\n return base;\n }\n if (dir === pathObject.root) {\n return dir + base;\n }\n return dir + sep + base;\n}\n\nvar posix = {\n // path.resolve([from ...], to)\n resolve: function resolve() {\n var resolvedPath = '';\n var resolvedAbsolute = false;\n var cwd;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path;\n if (i >= 0)\n path = arguments[i];\n else {\n if (cwd === undefined)\n cwd = process.cwd();\n path = cwd;\n }\n\n assertPath(path);\n\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n if (resolvedAbsolute) {\n if (resolvedPath.length > 0)\n return '/' + resolvedPath;\n else\n return '/';\n } else if (resolvedPath.length > 0) {\n return resolvedPath;\n } else {\n return '.';\n }\n },\n\n normalize: function normalize(path) {\n assertPath(path);\n\n if (path.length === 0) return '.';\n\n var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n // Normalize the path\n path = normalizeStringPosix(path, !isAbsolute);\n\n if (path.length === 0 && !isAbsolute) path = '.';\n if (path.length > 0 && trailingSeparator) path += '/';\n\n if (isAbsolute) return '/' + path;\n return path;\n },\n\n isAbsolute: function isAbsolute(path) {\n assertPath(path);\n return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n },\n\n join: function join() {\n if (arguments.length === 0)\n return '.';\n var joined;\n for (var i = 0; i < arguments.length; ++i) {\n var arg = arguments[i];\n assertPath(arg);\n if (arg.length > 0) {\n if (joined === undefined)\n joined = arg;\n else\n joined += '/' + arg;\n }\n }\n if (joined === undefined)\n return '.';\n return posix.normalize(joined);\n },\n\n relative: function relative(from, to) {\n assertPath(from);\n assertPath(to);\n\n if (from === to) return '';\n\n from = posix.resolve(from);\n to = posix.resolve(to);\n\n if (from === to) return '';\n\n // Trim any leading backslashes\n var fromStart = 1;\n for (; fromStart < from.length; ++fromStart) {\n if (from.charCodeAt(fromStart) !== 47 /*/*/)\n break;\n }\n var fromEnd = from.length;\n var fromLen = fromEnd - fromStart;\n\n // Trim any leading backslashes\n var toStart = 1;\n for (; toStart < to.length; ++toStart) {\n if (to.charCodeAt(toStart) !== 47 /*/*/)\n break;\n }\n var toEnd = to.length;\n var toLen = toEnd - toStart;\n\n // Compare paths to find the longest common path from root\n var length = fromLen < toLen ? fromLen : toLen;\n var lastCommonSep = -1;\n var i = 0;\n for (; i <= length; ++i) {\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n } else if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n } else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n } else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo'; to='/'\n lastCommonSep = 0;\n }\n }\n break;\n }\n var fromCode = from.charCodeAt(fromStart + i);\n var toCode = to.charCodeAt(toStart + i);\n if (fromCode !== toCode)\n break;\n else if (fromCode === 47 /*/*/)\n lastCommonSep = i;\n }\n\n var out = '';\n // Generate the relative path based on the path difference between `to`\n // and `from`\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n if (out.length === 0)\n out += '..';\n else\n out += '/..';\n }\n }\n\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts\n if (out.length > 0)\n return out + to.slice(toStart + lastCommonSep);\n else {\n toStart += lastCommonSep;\n if (to.charCodeAt(toStart) === 47 /*/*/)\n ++toStart;\n return to.slice(toStart);\n }\n },\n\n _makeLong: function _makeLong(path) {\n return path;\n },\n\n dirname: function dirname(path) {\n assertPath(path);\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) return '//';\n return path.slice(0, end);\n },\n\n basename: function basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n assertPath(path);\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext.length === path.length && ext === path) return '';\n var extIdx = ext.length - 1;\n var firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n\n if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n return path.slice(start, end);\n } else {\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n }\n },\n\n extname: function extname(path) {\n assertPath(path);\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n },\n\n format: function format(pathObject) {\n if (pathObject === null || typeof pathObject !== 'object') {\n throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n }\n return _format('/', pathObject);\n },\n\n parse: function parse(path) {\n assertPath(path);\n\n var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) return ret;\n var code = path.charCodeAt(0);\n var isAbsolute = code === 47 /*/*/;\n var start;\n if (isAbsolute) {\n ret.root = '/';\n start = 1;\n } else {\n start = 0;\n }\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n var i = path.length - 1;\n\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n\n // Get non-dir info\n for (; i >= start; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n if (end !== -1) {\n if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n }\n } else {\n if (startPart === 0 && isAbsolute) {\n ret.name = path.slice(1, startDot);\n ret.base = path.slice(1, end);\n } else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n }\n ret.ext = path.slice(startDot, end);\n }\n\n if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n return ret;\n },\n\n sep: '/',\n delimiter: ':',\n win32: null,\n posix: null\n};\n\nposix.posix = posix;\n\nmodule.exports = posix;\n", "// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n", "// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};", "__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))", "// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\n// !!!!!\n// SEE https://github.com/microsoft/vscode/blob/master/src/vs/base/common/platform.ts\n// !!!!!\n\ndeclare const process: { platform: 'win32' };\ndeclare const navigator: { userAgent: string };\n\nexport let isWindows: boolean;\n\nif (typeof process === 'object') {\n\tisWindows = process.platform === 'win32';\n} else if (typeof navigator === 'object') {\n\tlet userAgent = navigator.userAgent;\n\tisWindows = userAgent.indexOf('Windows') >= 0;\n}\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\n\nimport { CharCode } from './charCode'\nimport { isWindows } from './platform';\n\nconst _schemePattern = /^\\w[\\w\\d+.-]*$/;\nconst _singleSlashStart = /^\\//;\nconst _doubleSlashStart = /^\\/\\//;\n\nfunction _validateUri(ret: URI, _strict?: boolean): void {\n\n\t// scheme, must be set\n\tif (!ret.scheme && _strict) {\n\t\tthrow new Error(`[UriError]: Scheme is missing: {scheme: \"\", authority: \"${ret.authority}\", path: \"${ret.path}\", query: \"${ret.query}\", fragment: \"${ret.fragment}\"}`);\n\t}\n\n\t// scheme, https://tools.ietf.org/html/rfc3986#section-3.1\n\t// ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\n\tif (ret.scheme && !_schemePattern.test(ret.scheme)) {\n\t\tthrow new Error('[UriError]: Scheme contains illegal characters.');\n\t}\n\n\t// path, http://tools.ietf.org/html/rfc3986#section-3.3\n\t// If a URI contains an authority component, then the path component\n\t// must either be empty or begin with a slash (\"/\") character. If a URI\n\t// does not contain an authority component, then the path cannot begin\n\t// with two slash characters (\"//\").\n\tif (ret.path) {\n\t\tif (ret.authority) {\n\t\t\tif (!_singleSlashStart.test(ret.path)) {\n\t\t\t\tthrow new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\"/\") character');\n\t\t\t}\n\t\t} else {\n\t\t\tif (_doubleSlashStart.test(ret.path)) {\n\t\t\t\tthrow new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")');\n\t\t\t}\n\t\t}\n\t}\n}\n\n// for a while we allowed uris *without* schemes and this is the migration\n// for them, e.g. an uri without scheme and without strict-mode warns and falls\n// back to the file-scheme. that should cause the least carnage and still be a\n// clear warning\nfunction _schemeFix(scheme: string, _strict: boolean): string {\n\tif (!scheme && !_strict) {\n\t\treturn 'file';\n\t}\n\treturn scheme;\n}\n\n// implements a bit of https://tools.ietf.org/html/rfc3986#section-5\nfunction _referenceResolution(scheme: string, path: string): string {\n\n\t// the slash-character is our 'default base' as we don't\n\t// support constructing URIs relative to other URIs. This\n\t// also means that we alter and potentially break paths.\n\t// see https://tools.ietf.org/html/rfc3986#section-5.1.4\n\tswitch (scheme) {\n\t\tcase 'https':\n\t\tcase 'http':\n\t\tcase 'file':\n\t\t\tif (!path) {\n\t\t\t\tpath = _slash;\n\t\t\t} else if (path[0] !== _slash) {\n\t\t\t\tpath = _slash + path;\n\t\t\t}\n\t\t\tbreak;\n\t}\n\treturn path;\n}\n\nconst _empty = '';\nconst _slash = '/';\nconst _regexp = /^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/;\n\n/**\n * Uniform Resource Identifier (URI) http://tools.ietf.org/html/rfc3986.\n * This class is a simple parser which creates the basic component parts\n * (http://tools.ietf.org/html/rfc3986#section-3) with minimal validation\n * and encoding.\n *\n * ```txt\n * foo://example.com:8042/over/there?name=ferret#nose\n * \\_/ \\______________/\\_________/ \\_________/ \\__/\n * | | | | |\n * scheme authority path query fragment\n * | _____________________|__\n * / \\ / \\\n * urn:example:animal:ferret:nose\n * ```\n */\nexport class URI implements UriComponents {\n\n\tstatic isUri(thing: any): thing is URI {\n\t\tif (thing instanceof URI) {\n\t\t\treturn true;\n\t\t}\n\t\tif (!thing) {\n\t\t\treturn false;\n\t\t}\n\t\treturn typeof (thing).authority === 'string'\n\t\t\t&& typeof (thing).fragment === 'string'\n\t\t\t&& typeof (thing).path === 'string'\n\t\t\t&& typeof (thing).query === 'string'\n\t\t\t&& typeof (thing).scheme === 'string'\n\t\t\t&& typeof (thing).fsPath === 'string'\n\t\t\t&& typeof (thing).with === 'function'\n\t\t\t&& typeof (thing).toString === 'function';\n\t}\n\n\t/**\n\t * scheme is the 'http' part of 'http://www.example.com/some/path?query#fragment'.\n\t * The part before the first colon.\n\t */\n\treadonly scheme: string;\n\n\t/**\n\t * authority is the 'www.example.com' part of 'http://www.example.com/some/path?query#fragment'.\n\t * The part between the first double slashes and the next slash.\n\t */\n\treadonly authority: string;\n\n\t/**\n\t * path is the '/some/path' part of 'http://www.example.com/some/path?query#fragment'.\n\t */\n\treadonly path: string;\n\n\t/**\n\t * query is the 'query' part of 'http://www.example.com/some/path?query#fragment'.\n\t */\n\treadonly query: string;\n\n\t/**\n\t * fragment is the 'fragment' part of 'http://www.example.com/some/path?query#fragment'.\n\t */\n\treadonly fragment: string;\n\n\t/**\n\t * @internal\n\t */\n\tprotected constructor(scheme: string, authority?: string, path?: string, query?: string, fragment?: string, _strict?: boolean);\n\n\t/**\n\t * @internal\n\t */\n\tprotected constructor(components: UriComponents);\n\n\t/**\n\t * @internal\n\t */\n\tprotected constructor(schemeOrData: string | UriComponents, authority?: string, path?: string, query?: string, fragment?: string, _strict: boolean = false) {\n\n\t\tif (typeof schemeOrData === 'object') {\n\t\t\tthis.scheme = schemeOrData.scheme || _empty;\n\t\t\tthis.authority = schemeOrData.authority || _empty;\n\t\t\tthis.path = schemeOrData.path || _empty;\n\t\t\tthis.query = schemeOrData.query || _empty;\n\t\t\tthis.fragment = schemeOrData.fragment || _empty;\n\t\t\t// no validation because it's this URI\n\t\t\t// that creates uri components.\n\t\t\t// _validateUri(this);\n\t\t} else {\n\t\t\tthis.scheme = _schemeFix(schemeOrData, _strict);\n\t\t\tthis.authority = authority || _empty;\n\t\t\tthis.path = _referenceResolution(this.scheme, path || _empty);\n\t\t\tthis.query = query || _empty;\n\t\t\tthis.fragment = fragment || _empty;\n\n\t\t\t_validateUri(this, _strict);\n\t\t}\n\t}\n\n\t// ---- filesystem path -----------------------\n\n\t/**\n\t * Returns a string representing the corresponding file system path of this URI.\n\t * Will handle UNC paths, normalizes windows drive letters to lower-case, and uses the\n\t * platform specific path separator.\n\t *\n\t * * Will *not* validate the path for invalid characters and semantics.\n\t * * Will *not* look at the scheme of this URI.\n\t * * The result shall *not* be used for display purposes but for accessing a file on disk.\n\t *\n\t *\n\t * The *difference* to `URI#path` is the use of the platform specific separator and the handling\n\t * of UNC paths. See the below sample of a file-uri with an authority (UNC path).\n\t *\n\t * ```ts\n\t\tconst u = URI.parse('file://server/c$/folder/file.txt')\n\t\tu.authority === 'server'\n\t\tu.path === '/shares/c$/file.txt'\n\t\tu.fsPath === '\\\\server\\c$\\folder\\file.txt'\n\t```\n\t *\n\t * Using `URI#path` to read a file (using fs-apis) would not be enough because parts of the path,\n\t * namely the server name, would be missing. Therefore `URI#fsPath` exists - it's sugar to ease working\n\t * with URIs that represent files on disk (`file` scheme).\n\t */\n\tget fsPath(): string {\n\t\t// if (this.scheme !== 'file') {\n\t\t// \tconsole.warn(`[UriError] calling fsPath with scheme ${this.scheme}`);\n\t\t// }\n\t\treturn uriToFsPath(this, false);\n\t}\n\n\t// ---- modify to new -------------------------\n\n\twith(change: { scheme?: string; authority?: string | null; path?: string | null; query?: string | null; fragment?: string | null }): URI {\n\n\t\tif (!change) {\n\t\t\treturn this;\n\t\t}\n\n\t\tlet { scheme, authority, path, query, fragment } = change;\n\t\tif (scheme === undefined) {\n\t\t\tscheme = this.scheme;\n\t\t} else if (scheme === null) {\n\t\t\tscheme = _empty;\n\t\t}\n\t\tif (authority === undefined) {\n\t\t\tauthority = this.authority;\n\t\t} else if (authority === null) {\n\t\t\tauthority = _empty;\n\t\t}\n\t\tif (path === undefined) {\n\t\t\tpath = this.path;\n\t\t} else if (path === null) {\n\t\t\tpath = _empty;\n\t\t}\n\t\tif (query === undefined) {\n\t\t\tquery = this.query;\n\t\t} else if (query === null) {\n\t\t\tquery = _empty;\n\t\t}\n\t\tif (fragment === undefined) {\n\t\t\tfragment = this.fragment;\n\t\t} else if (fragment === null) {\n\t\t\tfragment = _empty;\n\t\t}\n\n\t\tif (scheme === this.scheme\n\t\t\t&& authority === this.authority\n\t\t\t&& path === this.path\n\t\t\t&& query === this.query\n\t\t\t&& fragment === this.fragment) {\n\n\t\t\treturn this;\n\t\t}\n\n\t\treturn new Uri(scheme, authority, path, query, fragment);\n\t}\n\n\t// ---- parse & validate ------------------------\n\n\t/**\n\t * Creates a new URI from a string, e.g. `http://www.example.com/some/path`,\n\t * `file:///usr/home`, or `scheme:with/path`.\n\t *\n\t * @param value A string which represents an URI (see `URI#toString`).\n\t */\n\tstatic parse(value: string, _strict: boolean = false): URI {\n\t\tconst match = _regexp.exec(value);\n\t\tif (!match) {\n\t\t\treturn new Uri(_empty, _empty, _empty, _empty, _empty);\n\t\t}\n\t\treturn new Uri(\n\t\t\tmatch[2] || _empty,\n\t\t\tpercentDecode(match[4] || _empty),\n\t\t\tpercentDecode(match[5] || _empty),\n\t\t\tpercentDecode(match[7] || _empty),\n\t\t\tpercentDecode(match[9] || _empty),\n\t\t\t_strict\n\t\t);\n\t}\n\n\t/**\n\t * Creates a new URI from a file system path, e.g. `c:\\my\\files`,\n\t * `/usr/home`, or `\\\\server\\share\\some\\path`.\n\t *\n\t * The *difference* between `URI#parse` and `URI#file` is that the latter treats the argument\n\t * as path, not as stringified-uri. E.g. `URI.file(path)` is **not the same as**\n\t * `URI.parse('file://' + path)` because the path might contain characters that are\n\t * interpreted (# and ?). See the following sample:\n\t * ```ts\n\tconst good = URI.file('/coding/c#/project1');\n\tgood.scheme === 'file';\n\tgood.path === '/coding/c#/project1';\n\tgood.fragment === '';\n\tconst bad = URI.parse('file://' + '/coding/c#/project1');\n\tbad.scheme === 'file';\n\tbad.path === '/coding/c'; // path is now broken\n\tbad.fragment === '/project1';\n\t```\n\t *\n\t * @param path A file system path (see `URI#fsPath`)\n\t */\n\tstatic file(path: string): URI {\n\n\t\tlet authority = _empty;\n\n\t\t// normalize to fwd-slashes on windows,\n\t\t// on other systems bwd-slashes are valid\n\t\t// filename character, eg /f\\oo/ba\\r.txt\n\t\tif (isWindows) {\n\t\t\tpath = path.replace(/\\\\/g, _slash);\n\t\t}\n\n\t\t// check for authority as used in UNC shares\n\t\t// or use the path as given\n\t\tif (path[0] === _slash && path[1] === _slash) {\n\t\t\tconst idx = path.indexOf(_slash, 2);\n\t\t\tif (idx === -1) {\n\t\t\t\tauthority = path.substring(2);\n\t\t\t\tpath = _slash;\n\t\t\t} else {\n\t\t\t\tauthority = path.substring(2, idx);\n\t\t\t\tpath = path.substring(idx) || _slash;\n\t\t\t}\n\t\t}\n\n\t\treturn new Uri('file', authority, path, _empty, _empty);\n\t}\n\n\tstatic from(components: { scheme: string; authority?: string; path?: string; query?: string; fragment?: string }): URI {\n\t\tconst result = new Uri(\n\t\t\tcomponents.scheme,\n\t\t\tcomponents.authority,\n\t\t\tcomponents.path,\n\t\t\tcomponents.query,\n\t\t\tcomponents.fragment,\n\t\t);\n\t\t_validateUri(result, true);\n\t\treturn result;\n\t}\n\n\t// ---- printing/externalize ---------------------------\n\n\t/**\n\t * Creates a string representation for this URI. It's guaranteed that calling\n\t * `URI.parse` with the result of this function creates an URI which is equal\n\t * to this URI.\n\t *\n\t * * The result shall *not* be used for display purposes but for externalization or transport.\n\t * * The result will be encoded using the percentage encoding and encoding happens mostly\n\t * ignore the scheme-specific encoding rules.\n\t *\n\t * @param skipEncoding Do not encode the result, default is `false`\n\t */\n\ttoString(skipEncoding: boolean = false): string {\n\t\treturn _asFormatted(this, skipEncoding);\n\t}\n\n\ttoJSON(): UriComponents {\n\t\treturn this;\n\t}\n\n\tstatic revive(data: UriComponents | URI): URI;\n\tstatic revive(data: UriComponents | URI | undefined): URI | undefined;\n\tstatic revive(data: UriComponents | URI | null): URI | null;\n\tstatic revive(data: UriComponents | URI | undefined | null): URI | undefined | null;\n\tstatic revive(data: UriComponents | URI | undefined | null): URI | undefined | null {\n\t\tif (!data) {\n\t\t\treturn data;\n\t\t} else if (data instanceof URI) {\n\t\t\treturn data;\n\t\t} else {\n\t\t\tconst result = new Uri(data);\n\t\t\tresult._formatted = (data).external;\n\t\t\tresult._fsPath = (data)._sep === _pathSepMarker ? (data).fsPath : null;\n\t\t\treturn result;\n\t\t}\n\t}\n}\n\nexport interface UriComponents {\n\tscheme: string;\n\tauthority: string;\n\tpath: string;\n\tquery: string;\n\tfragment: string;\n}\n\ninterface UriState extends UriComponents {\n\t$mid: number;\n\texternal: string;\n\tfsPath: string;\n\t_sep: 1 | undefined;\n}\n\nconst _pathSepMarker = isWindows ? 1 : undefined;\n\n// This class exists so that URI is compatible with vscode.Uri (API).\nclass Uri extends URI {\n\n\t_formatted: string | null = null;\n\t_fsPath: string | null = null;\n\n\toverride get fsPath(): string {\n\t\tif (!this._fsPath) {\n\t\t\tthis._fsPath = uriToFsPath(this, false);\n\t\t}\n\t\treturn this._fsPath;\n\t}\n\n\toverride toString(skipEncoding: boolean = false): string {\n\t\tif (!skipEncoding) {\n\t\t\tif (!this._formatted) {\n\t\t\t\tthis._formatted = _asFormatted(this, false);\n\t\t\t}\n\t\t\treturn this._formatted;\n\t\t} else {\n\t\t\t// we don't cache that\n\t\t\treturn _asFormatted(this, true);\n\t\t}\n\t}\n\n\toverride toJSON(): UriComponents {\n\t\tconst res = {\n\t\t\t$mid: 1\n\t\t};\n\t\t// cached state\n\t\tif (this._fsPath) {\n\t\t\tres.fsPath = this._fsPath;\n\t\t\tres._sep = _pathSepMarker;\n\t\t}\n\t\tif (this._formatted) {\n\t\t\tres.external = this._formatted;\n\t\t}\n\t\t// uri components\n\t\tif (this.path) {\n\t\t\tres.path = this.path;\n\t\t}\n\t\tif (this.scheme) {\n\t\t\tres.scheme = this.scheme;\n\t\t}\n\t\tif (this.authority) {\n\t\t\tres.authority = this.authority;\n\t\t}\n\t\tif (this.query) {\n\t\t\tres.query = this.query;\n\t\t}\n\t\tif (this.fragment) {\n\t\t\tres.fragment = this.fragment;\n\t\t}\n\t\treturn res;\n\t}\n}\n\n// reserved characters: https://tools.ietf.org/html/rfc3986#section-2.2\nconst encodeTable: { [ch: number]: string } = {\n\t[CharCode.Colon]: '%3A', // gen-delims\n\t[CharCode.Slash]: '%2F',\n\t[CharCode.QuestionMark]: '%3F',\n\t[CharCode.Hash]: '%23',\n\t[CharCode.OpenSquareBracket]: '%5B',\n\t[CharCode.CloseSquareBracket]: '%5D',\n\t[CharCode.AtSign]: '%40',\n\n\t[CharCode.ExclamationMark]: '%21', // sub-delims\n\t[CharCode.DollarSign]: '%24',\n\t[CharCode.Ampersand]: '%26',\n\t[CharCode.SingleQuote]: '%27',\n\t[CharCode.OpenParen]: '%28',\n\t[CharCode.CloseParen]: '%29',\n\t[CharCode.Asterisk]: '%2A',\n\t[CharCode.Plus]: '%2B',\n\t[CharCode.Comma]: '%2C',\n\t[CharCode.Semicolon]: '%3B',\n\t[CharCode.Equals]: '%3D',\n\n\t[CharCode.Space]: '%20',\n};\n\nfunction encodeURIComponentFast(uriComponent: string, isPath: boolean, isAuthority: boolean): string {\n\tlet res: string | undefined = undefined;\n\tlet nativeEncodePos = -1;\n\n\tfor (let pos = 0; pos < uriComponent.length; pos++) {\n\t\tconst code = uriComponent.charCodeAt(pos);\n\n\t\t// unreserved characters: https://tools.ietf.org/html/rfc3986#section-2.3\n\t\tif (\n\t\t\t(code >= CharCode.a && code <= CharCode.z)\n\t\t\t|| (code >= CharCode.A && code <= CharCode.Z)\n\t\t\t|| (code >= CharCode.Digit0 && code <= CharCode.Digit9)\n\t\t\t|| code === CharCode.Dash\n\t\t\t|| code === CharCode.Period\n\t\t\t|| code === CharCode.Underline\n\t\t\t|| code === CharCode.Tilde\n\t\t\t|| (isPath && code === CharCode.Slash)\n\t\t\t|| (isAuthority && code === CharCode.OpenSquareBracket)\n\t\t\t|| (isAuthority && code === CharCode.CloseSquareBracket)\n\t\t\t|| (isAuthority && code === CharCode.Colon)\n\t\t) {\n\t\t\t// check if we are delaying native encode\n\t\t\tif (nativeEncodePos !== -1) {\n\t\t\t\tres += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));\n\t\t\t\tnativeEncodePos = -1;\n\t\t\t}\n\t\t\t// check if we write into a new string (by default we try to return the param)\n\t\t\tif (res !== undefined) {\n\t\t\t\tres += uriComponent.charAt(pos);\n\t\t\t}\n\n\t\t} else {\n\t\t\t// encoding needed, we need to allocate a new string\n\t\t\tif (res === undefined) {\n\t\t\t\tres = uriComponent.substr(0, pos);\n\t\t\t}\n\n\t\t\t// check with default table first\n\t\t\tconst escaped = encodeTable[code];\n\t\t\tif (escaped !== undefined) {\n\n\t\t\t\t// check if we are delaying native encode\n\t\t\t\tif (nativeEncodePos !== -1) {\n\t\t\t\t\tres += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));\n\t\t\t\t\tnativeEncodePos = -1;\n\t\t\t\t}\n\n\t\t\t\t// append escaped variant to result\n\t\t\t\tres += escaped;\n\n\t\t\t} else if (nativeEncodePos === -1) {\n\t\t\t\t// use native encode only when needed\n\t\t\t\tnativeEncodePos = pos;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (nativeEncodePos !== -1) {\n\t\tres += encodeURIComponent(uriComponent.substring(nativeEncodePos));\n\t}\n\n\treturn res !== undefined ? res : uriComponent;\n}\n\nfunction encodeURIComponentMinimal(path: string): string {\n\tlet res: string | undefined = undefined;\n\tfor (let pos = 0; pos < path.length; pos++) {\n\t\tconst code = path.charCodeAt(pos);\n\t\tif (code === CharCode.Hash || code === CharCode.QuestionMark) {\n\t\t\tif (res === undefined) {\n\t\t\t\tres = path.substr(0, pos);\n\t\t\t}\n\t\t\tres += encodeTable[code];\n\t\t} else {\n\t\t\tif (res !== undefined) {\n\t\t\t\tres += path[pos];\n\t\t\t}\n\t\t}\n\t}\n\treturn res !== undefined ? res : path;\n}\n\n/**\n * Compute `fsPath` for the given uri\n */\nexport function uriToFsPath(uri: URI, keepDriveLetterCasing: boolean): string {\n\n\tlet value: string;\n\tif (uri.authority && uri.path.length > 1 && uri.scheme === 'file') {\n\t\t// unc path: file://shares/c$/far/boo\n\t\tvalue = `//${uri.authority}${uri.path}`;\n\t} else if (\n\t\turi.path.charCodeAt(0) === CharCode.Slash\n\t\t&& (uri.path.charCodeAt(1) >= CharCode.A && uri.path.charCodeAt(1) <= CharCode.Z || uri.path.charCodeAt(1) >= CharCode.a && uri.path.charCodeAt(1) <= CharCode.z)\n\t\t&& uri.path.charCodeAt(2) === CharCode.Colon\n\t) {\n\t\tif (!keepDriveLetterCasing) {\n\t\t\t// windows drive letter: file:///c:/far/boo\n\t\t\tvalue = uri.path[1].toLowerCase() + uri.path.substr(2);\n\t\t} else {\n\t\t\tvalue = uri.path.substr(1);\n\t\t}\n\t} else {\n\t\t// other path\n\t\tvalue = uri.path;\n\t}\n\tif (isWindows) {\n\t\tvalue = value.replace(/\\//g, '\\\\');\n\t}\n\treturn value;\n}\n\n/**\n * Create the external version of a uri\n */\nfunction _asFormatted(uri: URI, skipEncoding: boolean): string {\n\n\tconst encoder = !skipEncoding\n\t\t? encodeURIComponentFast\n\t\t: encodeURIComponentMinimal;\n\n\tlet res = '';\n\tlet { scheme, authority, path, query, fragment } = uri;\n\tif (scheme) {\n\t\tres += scheme;\n\t\tres += ':';\n\t}\n\tif (authority || scheme === 'file') {\n\t\tres += _slash;\n\t\tres += _slash;\n\t}\n\tif (authority) {\n\t\tlet idx = authority.indexOf('@');\n\t\tif (idx !== -1) {\n\t\t\t// @\n\t\t\tconst userinfo = authority.substr(0, idx);\n\t\t\tauthority = authority.substr(idx + 1);\n\t\t\tidx = userinfo.lastIndexOf(':');\n\t\t\tif (idx === -1) {\n\t\t\t\tres += encoder(userinfo, false, false);\n\t\t\t} else {\n\t\t\t\t// :@\n\t\t\t\tres += encoder(userinfo.substr(0, idx), false, false);\n\t\t\t\tres += ':';\n\t\t\t\tres += encoder(userinfo.substr(idx + 1), false, true);\n\t\t\t}\n\t\t\tres += '@';\n\t\t}\n\t\tauthority = authority.toLowerCase();\n\t\tidx = authority.lastIndexOf(':');\n\t\tif (idx === -1) {\n\t\t\tres += encoder(authority, false, true);\n\t\t} else {\n\t\t\t// :\n\t\t\tres += encoder(authority.substr(0, idx), false, true);\n\t\t\tres += authority.substr(idx);\n\t\t}\n\t}\n\tif (path) {\n\t\t// lower-case windows drive letters in /C:/fff or C:/fff\n\t\tif (path.length >= 3 && path.charCodeAt(0) === CharCode.Slash && path.charCodeAt(2) === CharCode.Colon) {\n\t\t\tconst code = path.charCodeAt(1);\n\t\t\tif (code >= CharCode.A && code <= CharCode.Z) {\n\t\t\t\tpath = `/${String.fromCharCode(code + 32)}:${path.substr(3)}`; // \"/c:\".length === 3\n\t\t\t}\n\t\t} else if (path.length >= 2 && path.charCodeAt(1) === CharCode.Colon) {\n\t\t\tconst code = path.charCodeAt(0);\n\t\t\tif (code >= CharCode.A && code <= CharCode.Z) {\n\t\t\t\tpath = `${String.fromCharCode(code + 32)}:${path.substr(2)}`; // \"/c:\".length === 3\n\t\t\t}\n\t\t}\n\t\t// encode the rest of the path\n\t\tres += encoder(path, true, false);\n\t}\n\tif (query) {\n\t\tres += '?';\n\t\tres += encoder(query, false, false);\n\t}\n\tif (fragment) {\n\t\tres += '#';\n\t\tres += !skipEncoding ? encodeURIComponentFast(fragment, false, false) : fragment;\n\t}\n\treturn res;\n}\n\n// --- decode\n\nfunction decodeURIComponentGraceful(str: string): string {\n\ttry {\n\t\treturn decodeURIComponent(str);\n\t} catch {\n\t\tif (str.length > 3) {\n\t\t\treturn str.substr(0, 3) + decodeURIComponentGraceful(str.substr(3));\n\t\t} else {\n\t\t\treturn str;\n\t\t}\n\t}\n}\n\nconst _rEncodedAsHex = /(%[0-9A-Za-z][0-9A-Za-z])+/g;\n\nfunction percentDecode(str: string): string {\n\tif (!str.match(_rEncodedAsHex)) {\n\t\treturn str;\n\t}\n\treturn str.replace(_rEncodedAsHex, (match) => decodeURIComponentGraceful(match));\n}\n\n/**\n * Mapped-type that replaces all occurrences of URI with UriComponents\n */\nexport type UriDto = { [K in keyof T]: T[K] extends URI\n\t? UriComponents\n\t: UriDto };\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n'use strict';\n\nimport { CharCode } from './charCode';\nimport { URI } from './uri';\nimport * as nodePath from 'path';\n\nconst posixPath = nodePath.posix || nodePath;\nconst slash = '/';\n\nexport namespace Utils {\n\n /**\n * Joins one or more input paths to the path of URI. \n * '/' is used as the directory separation character. \n * \n * The resolved path will be normalized. That means:\n * - all '..' and '.' segments are resolved.\n * - multiple, sequential occurences of '/' are replaced by a single instance of '/'.\n * - trailing separators are preserved.\n * \n * @param uri The input URI.\n * @param paths The paths to be joined with the path of URI.\n * @returns A URI with the joined path. All other properties of the URI (scheme, authority, query, fragments, ...) will be taken from the input URI.\n */\n export function joinPath(uri: URI, ...paths: string[]): URI {\n return uri.with({ path: posixPath.join(uri.path, ...paths) });\n }\n\n\n /**\n * Resolves one or more paths against the path of a URI. \n * '/' is used as the directory separation character. \n * \n * The resolved path will be normalized. That means:\n * - all '..' and '.' segments are resolved. \n * - multiple, sequential occurences of '/' are replaced by a single instance of '/'.\n * - trailing separators are removed.\n * \n * @param uri The input URI.\n * @param paths The paths to resolve against the path of URI.\n * @returns A URI with the resolved path. All other properties of the URI (scheme, authority, query, fragments, ...) will be taken from the input URI.\n */\n export function resolvePath(uri: URI, ...paths: string[]): URI {\n let path = uri.path; \n let slashAdded = false;\n if (path[0] !== slash) {\n path = slash + path; // make the path abstract: for posixPath.resolve the first segments has to be absolute or cwd is used.\n slashAdded = true;\n }\n let resolvedPath = posixPath.resolve(path, ...paths);\n if (slashAdded && resolvedPath[0] === slash && !uri.authority) {\n resolvedPath = resolvedPath.substring(1);\n }\n return uri.with({ path: resolvedPath });\n }\n\n /**\n * Returns a URI where the path is the directory name of the input uri, similar to the Unix dirname command. \n * In the path, '/' is recognized as the directory separation character. Trailing directory separators are ignored.\n * The orignal URI is returned if the URIs path is empty or does not contain any path segments.\n * \n * @param uri The input URI.\n * @return The last segment of the URIs path.\n */\n export function dirname(uri: URI): URI {\n if (uri.path.length === 0 || uri.path === slash) {\n return uri;\n }\n let path = posixPath.dirname(uri.path);\n if (path.length === 1 && path.charCodeAt(0) === CharCode.Period) {\n path = '';\n }\n return uri.with({ path });\n }\n\n /**\n * Returns the last segment of the path of a URI, similar to the Unix basename command. \n * In the path, '/' is recognized as the directory separation character. Trailing directory separators are ignored.\n * The empty string is returned if the URIs path is empty or does not contain any path segments.\n * \n * @param uri The input URI.\n * @return The base name of the URIs path.\n */\n export function basename(uri: URI): string {\n return posixPath.basename(uri.path);\n }\n\n /**\n * Returns the extension name of the path of a URI, similar to the Unix extname command. \n * In the path, '/' is recognized as the directory separation character. Trailing directory separators are ignored.\n * The empty string is returned if the URIs path is empty or does not contain any path segments.\n * \n * @param uri The input URI.\n * @return The extension name of the URIs path.\n */\n export function extname(uri: URI): string {\n return posixPath.extname(uri.path);\n }\n}", "/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport { URI, Utils } from 'vscode-uri';\r\n\r\nexport { URI };\r\n\r\nexport namespace UriUtils {\r\n\r\n export const basename = Utils.basename;\r\n export const dirname = Utils.dirname;\r\n export const extname = Utils.extname;\r\n export const joinPath = Utils.joinPath;\r\n export const resolvePath = Utils.resolvePath;\r\n\r\n export function equals(a?: URI | string, b?: URI | string): boolean {\r\n return a?.toString() === b?.toString();\r\n }\r\n\r\n export function relative(from: URI | string, to: URI | string): string {\r\n const fromPath = typeof from === 'string' ? from : from.path;\r\n const toPath = typeof to === 'string' ? to : to.path;\r\n const fromParts = fromPath.split('/').filter(e => e.length > 0);\r\n const toParts = toPath.split('/').filter(e => e.length > 0);\r\n let i = 0;\r\n for (; i < fromParts.length; i++) {\r\n if (fromParts[i] !== toParts[i]) {\r\n break;\r\n }\r\n }\r\n const backPart = '../'.repeat(fromParts.length - i);\r\n const toPart = toParts.slice(i).join('/');\r\n return backPart + toPart;\r\n }\r\n\r\n export function normalize(uri: URI | string): string {\r\n return URI.parse(uri.toString()).toString();\r\n }\r\n\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\n/**\r\n * Re-export 'TextDocument' from 'vscode-languageserver-textdocument' for convenience,\r\n * including both type _and_ symbol (namespace), as we here and there also refer to the symbol,\r\n * the overhead is very small, just a few kilobytes.\r\n * Everything else of that package (at the time contributing) is also defined\r\n * in 'vscode-languageserver-protocol' or 'vscode-languageserver-types'.\r\n */\r\nexport { TextDocument } from 'vscode-languageserver-textdocument';\r\n\r\nimport type { Diagnostic, Range } from 'vscode-languageserver-types';\r\nimport type { FileSystemProvider } from './file-system-provider.js';\r\nimport type { ParseResult, ParserOptions } from '../parser/langium-parser.js';\r\nimport type { ServiceRegistry } from '../service-registry.js';\r\nimport type { LangiumSharedCoreServices } from '../services.js';\r\nimport type { AstNode, AstNodeDescription, Mutable, Reference } from '../syntax-tree.js';\r\nimport type { MultiMap } from '../utils/collections.js';\r\nimport type { Stream } from '../utils/stream.js';\r\nimport { TextDocument } from './documents.js';\r\nimport { CancellationToken } from '../utils/cancellation.js';\r\nimport { stream } from '../utils/stream.js';\r\nimport { URI } from '../utils/uri-utils.js';\r\n\r\n/**\r\n * A Langium document holds the parse result (AST and CST) and any additional state that is derived\r\n * from the AST, e.g. the result of scope precomputation.\r\n */\r\nexport interface LangiumDocument {\r\n /** The Uniform Resource Identifier (URI) of the document */\r\n readonly uri: URI;\r\n /** The text document used to convert between offsets and positions */\r\n readonly textDocument: TextDocument;\r\n /** The current state of the document */\r\n state: DocumentState;\r\n /** The parse result holds the Abstract Syntax Tree (AST) and potentially also parser / lexer errors */\r\n parseResult: ParseResult;\r\n /** Result of the scope precomputation phase */\r\n precomputedScopes?: PrecomputedScopes;\r\n /** An array of all cross-references found in the AST while linking */\r\n references: Reference[];\r\n /** Result of the validation phase */\r\n diagnostics?: Diagnostic[]\r\n}\r\n\r\n/**\r\n * A document is subject to several phases that are run in predefined order. Any state value implies that\r\n * smaller state values are finished as well.\r\n */\r\nexport enum DocumentState {\r\n /**\r\n * The text content has changed and needs to be parsed again. The AST held by this outdated\r\n * document instance is no longer valid.\r\n */\r\n Changed = 0,\r\n /**\r\n * An AST has been created from the text content. The document structure can be traversed,\r\n * but cross-references cannot be resolved yet. If necessary, the structure can be manipulated\r\n * at this stage as a preprocessing step.\r\n */\r\n Parsed = 1,\r\n /**\r\n * The `IndexManager` service has processed AST nodes of this document. This means the\r\n * exported symbols are available in the global scope and can be resolved from other documents.\r\n */\r\n IndexedContent = 2,\r\n /**\r\n * The `ScopeComputation` service has processed this document. This means the local symbols\r\n * are stored in a MultiMap so they can be looked up by the `ScopeProvider` service.\r\n * Once a document has reached this state, you may follow every reference - it will lazily\r\n * resolve its `ref` property and yield either the target AST node or `undefined` in case\r\n * the target is not in scope.\r\n */\r\n ComputedScopes = 3,\r\n /**\r\n * The `Linker` service has processed this document. All outgoing references have been\r\n * resolved or marked as erroneous.\r\n */\r\n Linked = 4,\r\n /**\r\n * The `IndexManager` service has processed AST node references of this document. This is\r\n * necessary to determine which documents are affected by a change in one of the workspace\r\n * documents.\r\n */\r\n IndexedReferences = 5,\r\n /**\r\n * The `DocumentValidator` service has processed this document. The language server listens\r\n * to the results of this phase and sends diagnostics to the client.\r\n */\r\n Validated = 6\r\n}\r\n\r\n/**\r\n * Result of the scope precomputation phase (`ScopeComputation` service).\r\n * It maps every AST node to the set of symbols that are visible in the subtree of that node.\r\n */\r\nexport type PrecomputedScopes = MultiMap\r\n\r\nexport interface DocumentSegment {\r\n readonly range: Range\r\n readonly offset: number\r\n readonly length: number\r\n readonly end: number\r\n}\r\n\r\n/**\r\n * Surrogate definition of the `TextDocuments` interface from the `vscode-languageserver` package.\r\n * No implementation object is expected to be offered by `LangiumCoreServices`, but only by `LangiumLSPServices`.\r\n */\r\nexport type TextDocumentProvider = {\r\n get(uri: string | URI): TextDocument | undefined\r\n}\r\n\r\n/**\r\n * Shared service for creating `LangiumDocument` instances.\r\n *\r\n * Register a custom implementation if special (additional) behavior is required for your language(s).\r\n * Note: If you specialize {@link fromString} or {@link fromTextDocument} you probably might want to\r\n * specialize {@link update}, too!\r\n */\r\nexport interface LangiumDocumentFactory {\r\n /**\r\n * Create a Langium document from a `TextDocument` (usually associated with a file).\r\n */\r\n fromTextDocument(textDocument: TextDocument, uri?: URI, options?: ParserOptions): LangiumDocument;\r\n /**\r\n * Create a Langium document from a `TextDocument` asynchronously. This action can be cancelled if a cancellable parser implementation has been provided.\r\n */\r\n fromTextDocument(textDocument: TextDocument, uri: URI | undefined, cancellationToken: CancellationToken): Promise>;\r\n\r\n /**\r\n * Create an Langium document from an in-memory string.\r\n */\r\n fromString(text: string, uri: URI, options?: ParserOptions): LangiumDocument;\r\n /**\r\n * Create a Langium document from an in-memory string asynchronously. This action can be cancelled if a cancellable parser implementation has been provided.\r\n */\r\n fromString(text: string, uri: URI, cancellationToken: CancellationToken): Promise>;\r\n\r\n /**\r\n * Create an Langium document from a model that has been constructed in memory.\r\n */\r\n fromModel(model: T, uri: URI): LangiumDocument;\r\n\r\n /**\r\n * Create an Langium document from a specified `URI`. The factory will use the `FileSystemAccess` service to read the file.\r\n */\r\n fromUri(uri: URI, cancellationToken?: CancellationToken): Promise>;\r\n\r\n /**\r\n * Update the given document after changes in the corresponding textual representation.\r\n * Method is called by the document builder after it has been requested to build an existing\r\n * document and the document's state is {@link DocumentState.Changed}.\r\n * The text parsing is expected to be done the same way as in {@link fromTextDocument}\r\n * and {@link fromString}.\r\n */\r\n update(document: LangiumDocument, cancellationToken: CancellationToken): Promise>\r\n}\r\n\r\nexport class DefaultLangiumDocumentFactory implements LangiumDocumentFactory {\r\n\r\n protected readonly serviceRegistry: ServiceRegistry;\r\n protected readonly textDocuments?: TextDocumentProvider;\r\n protected readonly fileSystemProvider: FileSystemProvider;\r\n\r\n constructor(services: LangiumSharedCoreServices) {\r\n this.serviceRegistry = services.ServiceRegistry;\r\n this.textDocuments = services.workspace.TextDocuments;\r\n this.fileSystemProvider = services.workspace.FileSystemProvider;\r\n }\r\n\r\n async fromUri(uri: URI, cancellationToken = CancellationToken.None): Promise> {\r\n const content = await this.fileSystemProvider.readFile(uri);\r\n return this.createAsync(uri, content, cancellationToken);\r\n }\r\n\r\n fromTextDocument(textDocument: TextDocument, uri?: URI, options?: ParserOptions): LangiumDocument;\r\n fromTextDocument(textDocument: TextDocument, uri: URI | undefined, cancellationToken: CancellationToken): Promise>;\r\n fromTextDocument(textDocument: TextDocument, uri?: URI, token?: CancellationToken | ParserOptions): LangiumDocument | Promise> {\r\n uri = uri ?? URI.parse(textDocument.uri);\r\n if (CancellationToken.is(token)) {\r\n return this.createAsync(uri, textDocument, token);\r\n } else {\r\n return this.create(uri, textDocument, token);\r\n }\r\n }\r\n\r\n fromString(text: string, uri: URI, options?: ParserOptions): LangiumDocument;\r\n fromString(text: string, uri: URI, cancellationToken: CancellationToken): Promise>;\r\n fromString(text: string, uri: URI, token?: CancellationToken | ParserOptions): LangiumDocument | Promise> {\r\n if (CancellationToken.is(token)) {\r\n return this.createAsync(uri, text, token);\r\n } else {\r\n return this.create(uri, text, token);\r\n }\r\n }\r\n\r\n fromModel(model: T, uri: URI): LangiumDocument {\r\n return this.create(uri, { $model: model });\r\n }\r\n\r\n protected create(uri: URI, content: string | TextDocument | { $model: T }, options?: ParserOptions): LangiumDocument {\r\n if (typeof content === 'string') {\r\n const parseResult = this.parse(uri, content, options);\r\n return this.createLangiumDocument(parseResult, uri, undefined, content);\r\n\r\n } else if ('$model' in content) {\r\n const parseResult = { value: content.$model, parserErrors: [], lexerErrors: [] };\r\n return this.createLangiumDocument(parseResult, uri);\r\n\r\n } else {\r\n const parseResult = this.parse(uri, content.getText(), options);\r\n return this.createLangiumDocument(parseResult, uri, content);\r\n }\r\n }\r\n\r\n protected async createAsync(uri: URI, content: string | TextDocument, cancelToken: CancellationToken): Promise> {\r\n if (typeof content === 'string') {\r\n const parseResult = await this.parseAsync(uri, content, cancelToken);\r\n return this.createLangiumDocument(parseResult, uri, undefined, content);\r\n } else {\r\n const parseResult = await this.parseAsync(uri, content.getText(), cancelToken);\r\n return this.createLangiumDocument(parseResult, uri, content);\r\n }\r\n }\r\n\r\n /**\r\n * Create a LangiumDocument from a given parse result.\r\n *\r\n * A TextDocument is created on demand if it is not provided as argument here. Usually this\r\n * should not be necessary because the main purpose of the TextDocument is to convert between\r\n * text ranges and offsets, which is done solely in LSP request handling.\r\n *\r\n * With the introduction of {@link update} below this method is supposed to be mainly called\r\n * during workspace initialization and on addition/recognition of new files, while changes in\r\n * existing documents are processed via {@link update}.\r\n */\r\n protected createLangiumDocument(parseResult: ParseResult, uri: URI, textDocument?: TextDocument, text?: string): LangiumDocument {\r\n let document: LangiumDocument;\r\n if (textDocument) {\r\n document = {\r\n parseResult,\r\n uri,\r\n state: DocumentState.Parsed,\r\n references: [],\r\n textDocument\r\n };\r\n } else {\r\n const textDocumentGetter = this.createTextDocumentGetter(uri, text);\r\n document = {\r\n parseResult,\r\n uri,\r\n state: DocumentState.Parsed,\r\n references: [],\r\n get textDocument() {\r\n return textDocumentGetter();\r\n }\r\n };\r\n }\r\n (parseResult.value as Mutable).$document = document;\r\n return document;\r\n }\r\n\r\n async update(document: Mutable>, cancellationToken: CancellationToken): Promise> {\r\n // The CST full text property contains the original text that was used to create the AST.\r\n const oldText = document.parseResult.value.$cstNode?.root.fullText;\r\n const textDocument = this.textDocuments?.get(document.uri.toString());\r\n const text = textDocument ? textDocument.getText() : await this.fileSystemProvider.readFile(document.uri);\r\n\r\n if (textDocument) {\r\n Object.defineProperty(\r\n document,\r\n 'textDocument',\r\n {\r\n value: textDocument\r\n }\r\n );\r\n } else {\r\n const textDocumentGetter = this.createTextDocumentGetter(document.uri, text);\r\n Object.defineProperty(\r\n document,\r\n 'textDocument',\r\n {\r\n get: textDocumentGetter\r\n }\r\n );\r\n }\r\n\r\n // Some of these documents can be pretty large, so parsing them again can be quite expensive.\r\n // Therefore, we only parse if the text has actually changed.\r\n if (oldText !== text) {\r\n document.parseResult = await this.parseAsync(document.uri, text, cancellationToken);\r\n (document.parseResult.value as Mutable).$document = document;\r\n }\r\n document.state = DocumentState.Parsed;\r\n return document;\r\n }\r\n\r\n protected parse(uri: URI, text: string, options?: ParserOptions): ParseResult {\r\n const services = this.serviceRegistry.getServices(uri);\r\n return services.parser.LangiumParser.parse(text, options);\r\n }\r\n\r\n protected parseAsync(uri: URI, text: string, cancellationToken: CancellationToken): Promise> {\r\n const services = this.serviceRegistry.getServices(uri);\r\n return services.parser.AsyncParser.parse(text, cancellationToken);\r\n }\r\n\r\n protected createTextDocumentGetter(uri: URI, text?: string): () => TextDocument {\r\n const serviceRegistry = this.serviceRegistry;\r\n let textDoc: TextDocument | undefined = undefined;\r\n return () => {\r\n return textDoc ??= TextDocument.create(\r\n uri.toString(), serviceRegistry.getServices(uri).LanguageMetaData.languageId, 0, text ?? ''\r\n );\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Shared service for managing Langium documents.\r\n */\r\nexport interface LangiumDocuments {\r\n\r\n /**\r\n * A stream of all documents managed under this service.\r\n */\r\n readonly all: Stream\r\n\r\n /**\r\n * Manage a new document under this service.\r\n * @throws an error if a document with the same URI is already present.\r\n */\r\n addDocument(document: LangiumDocument): void;\r\n\r\n /**\r\n * Retrieve the document with the given URI, if present. Otherwise returns `undefined`.\r\n */\r\n getDocument(uri: URI): LangiumDocument | undefined;\r\n\r\n /**\r\n * Retrieve the document with the given URI. If not present, a new one will be created using the file system access.\r\n * The new document will be added to the list of documents managed under this service.\r\n */\r\n getOrCreateDocument(uri: URI, cancellationToken?: CancellationToken): Promise;\r\n\r\n /**\r\n * Creates a new document with the given URI and text content.\r\n * The new document is automatically added to this service and can be retrieved using {@link getDocument}.\r\n *\r\n * @throws an error if a document with the same URI is already present.\r\n */\r\n createDocument(uri: URI, text: string): LangiumDocument;\r\n\r\n /**\r\n * Creates a new document with the given URI and text content asynchronously.\r\n * The process can be interrupted with a cancellation token.\r\n * The new document is automatically added to this service and can be retrieved using {@link getDocument}.\r\n *\r\n * @throws an error if a document with the same URI is already present.\r\n */\r\n createDocument(uri: URI, text: string, cancellationToken: CancellationToken): Promise;\r\n\r\n /**\r\n * Returns `true` if a document with the given URI is managed under this service.\r\n */\r\n hasDocument(uri: URI): boolean;\r\n\r\n /**\r\n * Flag the document with the given URI as `Changed`, if present, meaning that its content\r\n * is no longer valid. The content (parseResult) stays untouched, while internal data may\r\n * be dropped to reduce memory footprint.\r\n *\r\n * @returns the affected {@link LangiumDocument} if existing for convenience\r\n */\r\n invalidateDocument(uri: URI): LangiumDocument | undefined;\r\n\r\n /**\r\n * Remove the document with the given URI, if present, and mark it as `Changed`, meaning\r\n * that its content is no longer valid. The next call to `getOrCreateDocument` with the same\r\n * URI will create a new document instance.\r\n *\r\n * @returns the affected {@link LangiumDocument} if existing for convenience\r\n */\r\n deleteDocument(uri: URI): LangiumDocument | undefined;\r\n}\r\n\r\nexport class DefaultLangiumDocuments implements LangiumDocuments {\r\n\r\n protected readonly langiumDocumentFactory: LangiumDocumentFactory;\r\n protected readonly serviceRegistry: ServiceRegistry;\r\n\r\n protected readonly documentMap: Map = new Map();\r\n\r\n constructor(services: LangiumSharedCoreServices) {\r\n this.langiumDocumentFactory = services.workspace.LangiumDocumentFactory;\r\n this.serviceRegistry = services.ServiceRegistry;\r\n }\r\n\r\n get all(): Stream {\r\n return stream(this.documentMap.values());\r\n }\r\n\r\n addDocument(document: LangiumDocument): void {\r\n const uriString = document.uri.toString();\r\n if (this.documentMap.has(uriString)) {\r\n throw new Error(`A document with the URI '${uriString}' is already present.`);\r\n }\r\n this.documentMap.set(uriString, document);\r\n }\r\n\r\n getDocument(uri: URI): LangiumDocument | undefined {\r\n const uriString = uri.toString();\r\n return this.documentMap.get(uriString);\r\n }\r\n\r\n async getOrCreateDocument(uri: URI, cancellationToken?: CancellationToken): Promise {\r\n let document = this.getDocument(uri);\r\n if (document) {\r\n return document;\r\n }\r\n document = await this.langiumDocumentFactory.fromUri(uri, cancellationToken);\r\n this.addDocument(document);\r\n return document;\r\n }\r\n\r\n createDocument(uri: URI, text: string): LangiumDocument;\r\n createDocument(uri: URI, text: string, cancellationToken: CancellationToken): Promise;\r\n createDocument(uri: URI, text: string, cancellationToken?: CancellationToken): LangiumDocument | Promise {\r\n if (cancellationToken) {\r\n return this.langiumDocumentFactory.fromString(text, uri, cancellationToken).then(document => {\r\n this.addDocument(document);\r\n return document;\r\n });\r\n } else {\r\n const document = this.langiumDocumentFactory.fromString(text, uri);\r\n this.addDocument(document);\r\n return document;\r\n }\r\n }\r\n\r\n hasDocument(uri: URI): boolean {\r\n return this.documentMap.has(uri.toString());\r\n }\r\n\r\n invalidateDocument(uri: URI): LangiumDocument | undefined {\r\n const uriString = uri.toString();\r\n const langiumDoc = this.documentMap.get(uriString);\r\n if (langiumDoc) {\r\n const linker = this.serviceRegistry.getServices(uri).references.Linker;\r\n linker.unlink(langiumDoc);\r\n langiumDoc.state = DocumentState.Changed;\r\n langiumDoc.precomputedScopes = undefined;\r\n langiumDoc.diagnostics = undefined;\r\n }\r\n return langiumDoc;\r\n }\r\n\r\n deleteDocument(uri: URI): LangiumDocument | undefined {\r\n const uriString = uri.toString();\r\n const langiumDoc = this.documentMap.get(uriString);\r\n if (langiumDoc) {\r\n langiumDoc.state = DocumentState.Changed;\r\n this.documentMap.delete(uriString);\r\n }\r\n return langiumDoc;\r\n }\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode, AstNodeDescription, AstReflection, CstNode, LinkingError, Reference, ReferenceInfo } from '../syntax-tree.js';\r\nimport type { AstNodeLocator } from '../workspace/ast-node-locator.js';\r\nimport type { LangiumDocument, LangiumDocuments } from '../workspace/documents.js';\r\nimport type { ScopeProvider } from './scope-provider.js';\r\nimport { CancellationToken } from '../utils/cancellation.js';\r\nimport { isAstNode, isAstNodeDescription, isLinkingError } from '../syntax-tree.js';\r\nimport { findRootNode, streamAst, streamReferences } from '../utils/ast-utils.js';\r\nimport { interruptAndCheck } from '../utils/promise-utils.js';\r\nimport { DocumentState } from '../workspace/documents.js';\r\n\r\n/**\r\n * Language-specific service for resolving cross-references in the AST.\r\n */\r\nexport interface Linker {\r\n\r\n /**\r\n * Links all cross-references within the specified document. The default implementation loads only target\r\n * elements from documents that are present in the `LangiumDocuments` service. The linked references are\r\n * stored in the document's `references` property.\r\n *\r\n * @param document A LangiumDocument that shall be linked.\r\n * @param cancelToken A token for cancelling the operation.\r\n *\r\n * @throws `OperationCancelled` if a cancellation event is detected\r\n */\r\n link(document: LangiumDocument, cancelToken?: CancellationToken): Promise;\r\n\r\n /**\r\n * Unlinks all references within the specified document and removes them from the list of `references`.\r\n *\r\n * @param document A LangiumDocument that shall be unlinked.\r\n */\r\n unlink(document: LangiumDocument): void;\r\n\r\n /**\r\n * Determines a candidate AST node description for linking the given reference.\r\n *\r\n * @param refInfo Information about the reference.\r\n */\r\n getCandidate(refInfo: ReferenceInfo): AstNodeDescription | LinkingError;\r\n\r\n /**\r\n * Creates a cross reference node being aware of its containing AstNode, the corresponding CstNode,\r\n * the cross reference text denoting the target AstNode being already extracted of the document text,\r\n * as well as the unique cross reference identifier.\r\n *\r\n * Default behavior:\r\n * - The returned Reference's 'ref' property pointing to the target AstNode is populated lazily on its\r\n * first visit.\r\n * - If the target AstNode cannot be resolved on the first visit, an error indicator will be installed\r\n * and further resolution attempts will *not* be performed.\r\n *\r\n * @param node The containing AST node\r\n * @param property The AST node property being referenced\r\n * @param refNode The corresponding CST node\r\n * @param refText The cross reference text denoting the target AstNode\r\n * @returns the desired Reference node, whose behavior wrt. resolving the cross reference is implementation specific.\r\n */\r\n buildReference(node: AstNode, property: string, refNode: CstNode | undefined, refText: string): Reference;\r\n\r\n}\r\n\r\nconst ref_resolving = Symbol('ref_resolving');\r\n\r\ninterface DefaultReference extends Reference {\r\n _ref?: AstNode | LinkingError | typeof ref_resolving;\r\n _nodeDescription?: AstNodeDescription;\r\n}\r\n\r\nexport class DefaultLinker implements Linker {\r\n protected readonly reflection: AstReflection;\r\n protected readonly scopeProvider: ScopeProvider;\r\n protected readonly astNodeLocator: AstNodeLocator;\r\n protected readonly langiumDocuments: () => LangiumDocuments;\r\n\r\n constructor(services: LangiumCoreServices) {\r\n this.reflection = services.shared.AstReflection;\r\n this.langiumDocuments = () => services.shared.workspace.LangiumDocuments;\r\n this.scopeProvider = services.references.ScopeProvider;\r\n this.astNodeLocator = services.workspace.AstNodeLocator;\r\n }\r\n\r\n async link(document: LangiumDocument, cancelToken = CancellationToken.None): Promise {\r\n for (const node of streamAst(document.parseResult.value)) {\r\n await interruptAndCheck(cancelToken);\r\n streamReferences(node).forEach(ref => this.doLink(ref, document));\r\n }\r\n }\r\n\r\n protected doLink(refInfo: ReferenceInfo, document: LangiumDocument): void {\r\n const ref = refInfo.reference as DefaultReference;\r\n // The reference may already have been resolved lazily by accessing its `ref` property.\r\n if (ref._ref === undefined) {\r\n ref._ref = ref_resolving;\r\n try {\r\n const description = this.getCandidate(refInfo);\r\n if (isLinkingError(description)) {\r\n ref._ref = description;\r\n } else {\r\n ref._nodeDescription = description;\r\n if (this.langiumDocuments().hasDocument(description.documentUri)) {\r\n // The target document is already loaded\r\n const linkedNode = this.loadAstNode(description);\r\n ref._ref = linkedNode ?? this.createLinkingError(refInfo, description);\r\n } else {\r\n // Try to load the target AST node later using the already provided description\r\n ref._ref = undefined;\r\n }\r\n }\r\n } catch (err) {\r\n console.error(`An error occurred while resolving reference to '${ref.$refText}':`, err);\r\n const errorMessage = (err as Error).message ?? String(err);\r\n ref._ref = {\r\n ...refInfo,\r\n message: `An error occurred while resolving reference to '${ref.$refText}': ${errorMessage}`\r\n };\r\n }\r\n // Add the reference to the document's array of references\r\n // Only add if the reference has been not been resolved earlier\r\n // Otherwise we end up with duplicates\r\n // See also implementation of `buildReference`\r\n document.references.push(ref);\r\n }\r\n }\r\n\r\n unlink(document: LangiumDocument): void {\r\n for (const ref of document.references) {\r\n delete (ref as DefaultReference)._ref;\r\n delete (ref as DefaultReference)._nodeDescription;\r\n }\r\n document.references = [];\r\n }\r\n\r\n getCandidate(refInfo: ReferenceInfo): AstNodeDescription | LinkingError {\r\n const scope = this.scopeProvider.getScope(refInfo);\r\n const description = scope.getElement(refInfo.reference.$refText);\r\n return description ?? this.createLinkingError(refInfo);\r\n }\r\n\r\n buildReference(node: AstNode, property: string, refNode: CstNode | undefined, refText: string): Reference {\r\n // See behavior description in doc of Linker, update that on changes in here.\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const linker = this;\r\n const reference: DefaultReference = {\r\n $refNode: refNode,\r\n $refText: refText,\r\n\r\n get ref() {\r\n if (isAstNode(this._ref)) {\r\n // Most frequent case: the target is already resolved.\r\n return this._ref;\r\n } else if (isAstNodeDescription(this._nodeDescription)) {\r\n // A candidate has been found before, but it is not loaded yet.\r\n const linkedNode = linker.loadAstNode(this._nodeDescription);\r\n this._ref = linkedNode ??\r\n linker.createLinkingError({ reference, container: node, property }, this._nodeDescription);\r\n } else if (this._ref === undefined) {\r\n // The reference has not been linked yet, so do that now.\r\n this._ref = ref_resolving;\r\n const document = findRootNode(node).$document;\r\n const refData = linker.getLinkedNode({ reference, container: node, property });\r\n if (refData.error && document && document.state < DocumentState.ComputedScopes) {\r\n // Document scope is not ready, don't set `this._ref` so linker can retry later.\r\n return this._ref = undefined;\r\n }\r\n this._ref = refData.node ?? refData.error;\r\n this._nodeDescription = refData.descr;\r\n document?.references.push(this);\r\n } else if (this._ref === ref_resolving) {\r\n throw new Error(`Cyclic reference resolution detected: ${linker.astNodeLocator.getAstNodePath(node)}/${property} (symbol '${refText}')`);\r\n }\r\n return isAstNode(this._ref) ? this._ref : undefined;\r\n },\r\n get $nodeDescription() {\r\n return this._nodeDescription;\r\n },\r\n get error() {\r\n return isLinkingError(this._ref) ? this._ref : undefined;\r\n }\r\n };\r\n return reference;\r\n }\r\n\r\n protected getLinkedNode(refInfo: ReferenceInfo): { node?: AstNode, descr?: AstNodeDescription, error?: LinkingError } {\r\n try {\r\n const description = this.getCandidate(refInfo);\r\n if (isLinkingError(description)) {\r\n return { error: description };\r\n }\r\n const linkedNode = this.loadAstNode(description);\r\n if (linkedNode) {\r\n return { node: linkedNode, descr: description };\r\n }\r\n else {\r\n return {\r\n descr: description,\r\n error:\r\n this.createLinkingError(refInfo, description)\r\n };\r\n }\r\n } catch (err) {\r\n console.error(`An error occurred while resolving reference to '${refInfo.reference.$refText}':`, err);\r\n const errorMessage = (err as Error).message ?? String(err);\r\n return {\r\n error: {\r\n ...refInfo,\r\n message: `An error occurred while resolving reference to '${refInfo.reference.$refText}': ${errorMessage}`\r\n }\r\n };\r\n }\r\n }\r\n\r\n protected loadAstNode(nodeDescription: AstNodeDescription): AstNode | undefined {\r\n if (nodeDescription.node) {\r\n return nodeDescription.node;\r\n }\r\n const doc = this.langiumDocuments().getDocument(nodeDescription.documentUri);\r\n if (!doc) {\r\n return undefined;\r\n }\r\n return this.astNodeLocator.getAstNode(doc.parseResult.value, nodeDescription.path);\r\n }\r\n\r\n protected createLinkingError(refInfo: ReferenceInfo, targetDescription?: AstNodeDescription): LinkingError {\r\n // Check whether the document is sufficiently processed by the DocumentBuilder. If not, this is a hint for a bug\r\n // in the language implementation.\r\n const document = findRootNode(refInfo.container).$document;\r\n if (document && document.state < DocumentState.ComputedScopes) {\r\n console.warn(`Attempted reference resolution before document reached ComputedScopes state (${document.uri}).`);\r\n }\r\n const referenceType = this.reflection.getReferenceType(refInfo);\r\n return {\r\n ...refInfo,\r\n message: `Could not resolve reference to ${referenceType} named '${refInfo.reference.$refText}'.`,\r\n targetDescription\r\n };\r\n }\r\n\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { AstNode, CstNode } from '../syntax-tree.js';\r\nimport { findNodeForProperty } from '../utils/grammar-utils.js';\r\n\r\nexport interface NamedAstNode extends AstNode {\r\n name: string;\r\n}\r\n\r\nexport function isNamed(node: AstNode): node is NamedAstNode {\r\n return typeof (node as NamedAstNode).name === 'string';\r\n}\r\n\r\n/**\r\n * Utility service for retrieving the `name` of an `AstNode` or the `CstNode` containing a `name`.\r\n */\r\nexport interface NameProvider {\r\n /**\r\n * Returns the `name` of a given AstNode.\r\n * @param node Specified `AstNode` whose name node shall be retrieved.\r\n */\r\n getName(node: AstNode): string | undefined;\r\n /**\r\n * Returns the `CstNode` which contains the parsed value of the `name` assignment.\r\n * @param node Specified `AstNode` whose name node shall be retrieved.\r\n */\r\n getNameNode(node: AstNode): CstNode | undefined;\r\n}\r\n\r\nexport class DefaultNameProvider implements NameProvider {\r\n getName(node: AstNode): string | undefined {\r\n if (isNamed(node)) {\r\n return node.name;\r\n }\r\n return undefined;\r\n }\r\n\r\n getNameNode(node: AstNode): CstNode | undefined {\r\n return findNodeForProperty(node.$cstNode, 'name');\r\n }\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode, CstNode, GenericAstNode } from '../syntax-tree.js';\r\nimport type { Stream } from '../utils/stream.js';\r\nimport type { ReferenceDescription } from '../workspace/ast-descriptions.js';\r\nimport type { AstNodeLocator } from '../workspace/ast-node-locator.js';\r\nimport type { IndexManager } from '../workspace/index-manager.js';\r\nimport type { NameProvider } from './name-provider.js';\r\nimport type { URI } from '../utils/uri-utils.js';\r\nimport { findAssignment } from '../utils/grammar-utils.js';\r\nimport { isReference } from '../syntax-tree.js';\r\nimport { getDocument } from '../utils/ast-utils.js';\r\nimport { isChildNode, toDocumentSegment } from '../utils/cst-utils.js';\r\nimport { stream } from '../utils/stream.js';\r\nimport { UriUtils } from '../utils/uri-utils.js';\r\n\r\n/**\r\n * Language-specific service for finding references and declaration of a given `CstNode`.\r\n */\r\nexport interface References {\r\n\r\n /**\r\n * If the CstNode is a reference node the target CstNode will be returned.\r\n * If the CstNode is a significant node of the CstNode this CstNode will be returned.\r\n *\r\n * @param sourceCstNode CstNode that points to a AstNode\r\n */\r\n findDeclaration(sourceCstNode: CstNode): AstNode | undefined;\r\n\r\n /**\r\n * If the CstNode is a reference node the target CstNode will be returned.\r\n * If the CstNode is a significant node of the CstNode this CstNode will be returned.\r\n *\r\n * @param sourceCstNode CstNode that points to a AstNode\r\n */\r\n findDeclarationNode(sourceCstNode: CstNode): CstNode | undefined;\r\n\r\n /**\r\n * Finds all references to the target node as references (local references) or reference descriptions.\r\n *\r\n * @param targetNode Specified target node whose references should be returned\r\n */\r\n findReferences(targetNode: AstNode, options: FindReferencesOptions): Stream;\r\n}\r\n\r\nexport interface FindReferencesOptions {\r\n /**\r\n * @deprecated Since v1.2.0. Please use `documentUri` instead.\r\n */\r\n onlyLocal?: boolean;\r\n /**\r\n * When set, the `findReferences` method will only return references/declarations from the specified document.\r\n */\r\n documentUri?: URI;\r\n /**\r\n * Whether the returned list of references should include the declaration.\r\n */\r\n includeDeclaration?: boolean;\r\n}\r\n\r\nexport class DefaultReferences implements References {\r\n protected readonly nameProvider: NameProvider;\r\n protected readonly index: IndexManager;\r\n protected readonly nodeLocator: AstNodeLocator;\r\n\r\n constructor(services: LangiumCoreServices) {\r\n this.nameProvider = services.references.NameProvider;\r\n this.index = services.shared.workspace.IndexManager;\r\n this.nodeLocator = services.workspace.AstNodeLocator;\r\n }\r\n\r\n findDeclaration(sourceCstNode: CstNode): AstNode | undefined {\r\n if (sourceCstNode) {\r\n const assignment = findAssignment(sourceCstNode);\r\n const nodeElem = sourceCstNode.astNode;\r\n if (assignment && nodeElem) {\r\n const reference = (nodeElem as GenericAstNode)[assignment.feature];\r\n\r\n if (isReference(reference)) {\r\n return reference.ref;\r\n } else if (Array.isArray(reference)) {\r\n for (const ref of reference) {\r\n if (isReference(ref) && ref.$refNode\r\n && ref.$refNode.offset <= sourceCstNode.offset\r\n && ref.$refNode.end >= sourceCstNode.end) {\r\n return ref.ref;\r\n }\r\n }\r\n }\r\n }\r\n if (nodeElem) {\r\n const nameNode = this.nameProvider.getNameNode(nodeElem);\r\n // Only return the targeted node in case the targeted cst node is the name node or part of it\r\n if (nameNode && (nameNode === sourceCstNode || isChildNode(sourceCstNode, nameNode))) {\r\n return nodeElem;\r\n }\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n findDeclarationNode(sourceCstNode: CstNode): CstNode | undefined {\r\n const astNode = this.findDeclaration(sourceCstNode);\r\n if (astNode?.$cstNode) {\r\n const targetNode = this.nameProvider.getNameNode(astNode);\r\n return targetNode ?? astNode.$cstNode;\r\n }\r\n return undefined;\r\n }\r\n\r\n findReferences(targetNode: AstNode, options: FindReferencesOptions): Stream {\r\n const refs: ReferenceDescription[] = [];\r\n if (options.includeDeclaration) {\r\n const ref = this.getReferenceToSelf(targetNode);\r\n if (ref) {\r\n refs.push(ref);\r\n }\r\n }\r\n let indexReferences = this.index.findAllReferences(targetNode, this.nodeLocator.getAstNodePath(targetNode));\r\n if (options.documentUri) {\r\n indexReferences = indexReferences.filter(ref => UriUtils.equals(ref.sourceUri, options.documentUri));\r\n }\r\n refs.push(...indexReferences);\r\n return stream(refs);\r\n }\r\n\r\n protected getReferenceToSelf(targetNode: AstNode): ReferenceDescription | undefined {\r\n const nameNode = this.nameProvider.getNameNode(targetNode);\r\n if (nameNode) {\r\n const doc = getDocument(targetNode);\r\n const path = this.nodeLocator.getAstNodePath(targetNode);\r\n return {\r\n sourceUri: doc.uri,\r\n sourcePath: path,\r\n targetUri: doc.uri,\r\n targetPath: path,\r\n segment: toDocumentSegment(nameNode),\r\n local: true\r\n };\r\n }\r\n return undefined;\r\n }\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { Stream } from './stream.js';\r\nimport { Reduction, stream } from './stream.js';\r\n\r\n/**\r\n * A multimap is a variation of a Map that has potentially multiple values for every key.\r\n */\r\nexport class MultiMap {\r\n\r\n private map = new Map();\r\n\r\n constructor()\r\n constructor(elements: Array<[K, V]>)\r\n constructor(elements?: Array<[K, V]>) {\r\n if (elements) {\r\n for (const [key, value] of elements) {\r\n this.add(key, value);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * The total number of values in the multimap.\r\n */\r\n get size(): number {\r\n return Reduction.sum(stream(this.map.values()).map(a => a.length));\r\n }\r\n\r\n /**\r\n * Clear all entries in the multimap.\r\n */\r\n clear(): void {\r\n this.map.clear();\r\n }\r\n\r\n /**\r\n * Operates differently depending on whether a `value` is given:\r\n * * With a value, this method deletes the specific key / value pair from the multimap.\r\n * * Without a value, all values associated with the given key are deleted.\r\n *\r\n * @returns `true` if a value existed and has been removed, or `false` if the specified\r\n * key / value does not exist.\r\n */\r\n delete(key: K, value?: V): boolean {\r\n if (value === undefined) {\r\n return this.map.delete(key);\r\n } else {\r\n const values = this.map.get(key);\r\n if (values) {\r\n const index = values.indexOf(value);\r\n if (index >= 0) {\r\n if (values.length === 1) {\r\n this.map.delete(key);\r\n } else {\r\n values.splice(index, 1);\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Returns an array of all values associated with the given key. If no value exists,\r\n * an empty array is returned.\r\n *\r\n * _Note:_ The returned array is assumed not to be modified. Use the `set` method to add a\r\n * value and `delete` to remove a value from the multimap.\r\n */\r\n get(key: K): readonly V[] {\r\n return this.map.get(key) ?? [];\r\n }\r\n\r\n /**\r\n * Operates differently depending on whether a `value` is given:\r\n * * With a value, this method returns `true` if the specific key / value pair is present in the multimap.\r\n * * Without a value, this method returns `true` if the given key is present in the multimap.\r\n */\r\n has(key: K, value?: V): boolean {\r\n if (value === undefined) {\r\n return this.map.has(key);\r\n } else {\r\n const values = this.map.get(key);\r\n if (values) {\r\n return values.indexOf(value) >= 0;\r\n }\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Add the given key / value pair to the multimap.\r\n */\r\n add(key: K, value: V): this {\r\n if (this.map.has(key)) {\r\n this.map.get(key)!.push(value);\r\n } else {\r\n this.map.set(key, [value]);\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Add the given set of key / value pairs to the multimap.\r\n */\r\n addAll(key: K, values: Iterable): this {\r\n if (this.map.has(key)) {\r\n this.map.get(key)!.push(...values);\r\n } else {\r\n this.map.set(key, Array.from(values));\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Invokes the given callback function for every key / value pair in the multimap.\r\n */\r\n forEach(callbackfn: (value: V, key: K, map: this) => void): void {\r\n this.map.forEach((array, key) =>\r\n array.forEach(value => callbackfn(value, key, this))\r\n );\r\n }\r\n\r\n /**\r\n * Returns an iterator of key, value pairs for every entry in the map.\r\n */\r\n [Symbol.iterator](): Iterator<[K, V]> {\r\n return this.entries().iterator();\r\n }\r\n\r\n /**\r\n * Returns a stream of key, value pairs for every entry in the map.\r\n */\r\n entries(): Stream<[K, V]> {\r\n return stream(this.map.entries())\r\n .flatMap(([key, array]) => array.map(value => [key, value] as [K, V]));\r\n }\r\n\r\n /**\r\n * Returns a stream of keys in the map.\r\n */\r\n keys(): Stream {\r\n return stream(this.map.keys());\r\n }\r\n\r\n /**\r\n * Returns a stream of values in the map.\r\n */\r\n values(): Stream {\r\n return stream(this.map.values()).flat();\r\n }\r\n\r\n /**\r\n * Returns a stream of key, value set pairs for every key in the map.\r\n */\r\n entriesGroupedByKey(): Stream<[K, V[]]> {\r\n return stream(this.map.entries());\r\n }\r\n\r\n}\r\n\r\nexport class BiMap {\r\n\r\n private map = new Map();\r\n private inverse = new Map();\r\n\r\n get size(): number {\r\n return this.map.size;\r\n }\r\n\r\n constructor()\r\n constructor(elements: Array<[K, V]>)\r\n constructor(elements?: Array<[K, V]>) {\r\n if (elements) {\r\n for (const [key, value] of elements) {\r\n this.set(key, value);\r\n }\r\n }\r\n }\r\n\r\n clear(): void {\r\n this.map.clear();\r\n this.inverse.clear();\r\n }\r\n\r\n set(key: K, value: V): this {\r\n this.map.set(key, value);\r\n this.inverse.set(value, key);\r\n return this;\r\n }\r\n\r\n get(key: K): V | undefined {\r\n return this.map.get(key);\r\n }\r\n\r\n getKey(value: V): K | undefined {\r\n return this.inverse.get(value);\r\n }\r\n\r\n delete(key: K): boolean {\r\n const value = this.map.get(key);\r\n if (value !== undefined) {\r\n this.map.delete(key);\r\n this.inverse.delete(value);\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021-2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode, AstNodeDescription } from '../syntax-tree.js';\r\nimport type { AstNodeDescriptionProvider } from '../workspace/ast-descriptions.js';\r\nimport type { LangiumDocument, PrecomputedScopes } from '../workspace/documents.js';\r\nimport type { NameProvider } from './name-provider.js';\r\nimport { CancellationToken } from '../utils/cancellation.js';\r\nimport { streamAllContents, streamContents } from '../utils/ast-utils.js';\r\nimport { MultiMap } from '../utils/collections.js';\r\nimport { interruptAndCheck } from '../utils/promise-utils.js';\r\n\r\n/**\r\n * Language-specific service for precomputing global and local scopes. The service methods are executed\r\n * as the first and second phase in the `DocumentBuilder`.\r\n */\r\nexport interface ScopeComputation {\r\n\r\n /**\r\n * Creates descriptions of all AST nodes that shall be exported into the _global_ scope from the given\r\n * document. These descriptions are gathered by the `IndexManager` and stored in the global index so\r\n * they can be referenced from other documents.\r\n *\r\n * _Note:_ You should not resolve any cross-references in this service method. Cross-reference resolution\r\n * depends on the scope computation phase to be completed (`computeScope` method), which runs after the\r\n * initial indexing where this method is used.\r\n *\r\n * @param document The document from which to gather exported AST nodes.\r\n * @param cancelToken Indicates when to cancel the current operation.\r\n * @throws `OperationCanceled` if a user action occurs during execution\r\n */\r\n computeExports(document: LangiumDocument, cancelToken?: CancellationToken): Promise;\r\n\r\n /**\r\n * Precomputes the _local_ scopes for a document, which are necessary for the default way of\r\n * resolving references to symbols in the same document. The result is a multimap assigning a\r\n * set of AST node descriptions to every level of the AST. These data are used by the `ScopeProvider`\r\n * service to determine which target nodes are visible in the context of a specific cross-reference.\r\n *\r\n * _Note:_ You should not resolve any cross-references in this service method. Cross-reference\r\n * resolution depends on the scope computation phase to be completed.\r\n *\r\n * @param document The document in which to compute scopes.\r\n * @param cancelToken Indicates when to cancel the current operation.\r\n * @throws `OperationCanceled` if a user action occurs during execution\r\n */\r\n computeLocalScopes(document: LangiumDocument, cancelToken?: CancellationToken): Promise;\r\n\r\n}\r\n\r\n/**\r\n * The default scope computation creates and collectes descriptions of the AST nodes to be exported into the\r\n * _global_ scope from the given document. By default those are the document's root AST node and its directly\r\n * contained child nodes.\r\n *\r\n * Besides, it gathers all AST nodes that have a name (according to the `NameProvider` service) and includes them\r\n * in the local scope of their particular container nodes. As a result, for every cross-reference in the AST,\r\n * target elements from the same level (siblings) and further up towards the root (parents and siblings of parents)\r\n * are visible. Elements being nested inside lower levels (children, children of siblings and parents' siblings)\r\n * are _invisible_ by default, but that can be changed by customizing this service.\r\n */\r\nexport class DefaultScopeComputation implements ScopeComputation {\r\n\r\n protected readonly nameProvider: NameProvider;\r\n protected readonly descriptions: AstNodeDescriptionProvider;\r\n\r\n constructor(services: LangiumCoreServices) {\r\n this.nameProvider = services.references.NameProvider;\r\n this.descriptions = services.workspace.AstNodeDescriptionProvider;\r\n }\r\n\r\n async computeExports(document: LangiumDocument, cancelToken = CancellationToken.None): Promise {\r\n return this.computeExportsForNode(document.parseResult.value, document, undefined, cancelToken);\r\n }\r\n\r\n /**\r\n * Creates {@link AstNodeDescription AstNodeDescriptions} for the given {@link AstNode parentNode} and its children.\r\n * The list of children to be considered is determined by the function parameter {@link children}.\r\n * By default only the direct children of {@link parentNode} are visited, nested nodes are not exported.\r\n *\r\n * @param parentNode AST node to be exported, i.e., of which an {@link AstNodeDescription} shall be added to the returned list.\r\n * @param document The document containing the AST node to be exported.\r\n * @param children A function called with {@link parentNode} as single argument and returning an {@link Iterable} supplying the children to be visited, which must be directly or transitively contained in {@link parentNode}.\r\n * @param cancelToken Indicates when to cancel the current operation.\r\n * @throws `OperationCancelled` if a user action occurs during execution.\r\n * @returns A list of {@link AstNodeDescription AstNodeDescriptions} to be published to index.\r\n */\r\n async computeExportsForNode(parentNode: AstNode, document: LangiumDocument, children: (root: AstNode) => Iterable = streamContents, cancelToken: CancellationToken = CancellationToken.None): Promise {\r\n const exports: AstNodeDescription[] = [];\r\n\r\n this.exportNode(parentNode, exports, document);\r\n for (const node of children(parentNode)) {\r\n await interruptAndCheck(cancelToken);\r\n this.exportNode(node, exports, document);\r\n }\r\n return exports;\r\n }\r\n\r\n /**\r\n * Add a single node to the list of exports if it has a name. Override this method to change how\r\n * symbols are exported, e.g. by modifying their exported name.\r\n */\r\n protected exportNode(node: AstNode, exports: AstNodeDescription[], document: LangiumDocument): void {\r\n const name = this.nameProvider.getName(node);\r\n if (name) {\r\n exports.push(this.descriptions.createDescription(node, name, document));\r\n }\r\n }\r\n\r\n async computeLocalScopes(document: LangiumDocument, cancelToken = CancellationToken.None): Promise {\r\n const rootNode = document.parseResult.value;\r\n const scopes = new MultiMap();\r\n // Here we navigate the full AST - local scopes shall be available in the whole document\r\n for (const node of streamAllContents(rootNode)) {\r\n await interruptAndCheck(cancelToken);\r\n this.processNode(node, document, scopes);\r\n }\r\n return scopes;\r\n }\r\n\r\n /**\r\n * Process a single node during scopes computation. The default implementation makes the node visible\r\n * in the subtree of its container (if the node has a name). Override this method to change this,\r\n * e.g. by increasing the visibility to a higher level in the AST.\r\n */\r\n protected processNode(node: AstNode, document: LangiumDocument, scopes: PrecomputedScopes): void {\r\n const container = node.$container;\r\n if (container) {\r\n const name = this.nameProvider.getName(node);\r\n if (name) {\r\n scopes.add(container, this.descriptions.createDescription(node, name, document));\r\n }\r\n }\r\n }\r\n\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { AstNodeDescription } from '../syntax-tree.js';\r\nimport type { Stream } from '../utils/stream.js';\r\nimport { EMPTY_STREAM, stream } from '../utils/stream.js';\r\n\r\n/**\r\n * A scope describes what target elements are visible from a specific cross-reference context.\r\n */\r\nexport interface Scope {\r\n\r\n /**\r\n * Find a target element matching the given name. If no element is found, `undefined` is returned.\r\n * If multiple matching elements are present, the selection of the returned element should be done\r\n * according to the semantics of your language. Usually it is the element that is most closely defined.\r\n *\r\n * @param name Name of the cross-reference target as it appears in the source text.\r\n */\r\n getElement(name: string): AstNodeDescription | undefined;\r\n\r\n /**\r\n * Create a stream of all elements in the scope. This is used to compute completion proposals to be\r\n * shown in the editor.\r\n */\r\n getAllElements(): Stream;\r\n\r\n}\r\n\r\nexport interface ScopeOptions {\r\n caseInsensitive?: boolean;\r\n}\r\n\r\n/**\r\n * The default scope implementation is based on a `Stream`. It has an optional _outer scope_ describing\r\n * the next level of elements, which are queried when a target element is not found in the stream provided\r\n * to this scope.\r\n */\r\nexport class StreamScope implements Scope {\r\n readonly elements: Stream;\r\n readonly outerScope?: Scope;\r\n readonly caseInsensitive: boolean;\r\n\r\n constructor(elements: Stream, outerScope?: Scope, options?: ScopeOptions) {\r\n this.elements = elements;\r\n this.outerScope = outerScope;\r\n this.caseInsensitive = options?.caseInsensitive ?? false;\r\n }\r\n\r\n getAllElements(): Stream {\r\n if (this.outerScope) {\r\n return this.elements.concat(this.outerScope.getAllElements());\r\n } else {\r\n return this.elements;\r\n }\r\n }\r\n\r\n getElement(name: string): AstNodeDescription | undefined {\r\n const local = this.caseInsensitive\r\n ? this.elements.find(e => e.name.toLowerCase() === name.toLowerCase())\r\n : this.elements.find(e => e.name === name);\r\n if (local) {\r\n return local;\r\n }\r\n if (this.outerScope) {\r\n return this.outerScope.getElement(name);\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nexport class MapScope implements Scope {\r\n readonly elements: Map;\r\n readonly outerScope?: Scope;\r\n readonly caseInsensitive: boolean;\r\n\r\n constructor(elements: Iterable, outerScope?: Scope, options?: ScopeOptions) {\r\n this.elements = new Map();\r\n this.caseInsensitive = options?.caseInsensitive ?? false;\r\n for (const element of elements) {\r\n const name = this.caseInsensitive\r\n ? element.name.toLowerCase()\r\n : element.name;\r\n this.elements.set(name, element);\r\n }\r\n this.outerScope = outerScope;\r\n }\r\n\r\n getElement(name: string): AstNodeDescription | undefined {\r\n const localName = this.caseInsensitive ? name.toLowerCase() : name;\r\n const local = this.elements.get(localName);\r\n if (local) {\r\n return local;\r\n }\r\n if (this.outerScope) {\r\n return this.outerScope.getElement(name);\r\n }\r\n return undefined;\r\n }\r\n\r\n getAllElements(): Stream {\r\n let elementStream = stream(this.elements.values());\r\n if (this.outerScope) {\r\n elementStream = elementStream.concat(this.outerScope.getAllElements());\r\n }\r\n return elementStream;\r\n }\r\n\r\n}\r\n\r\nexport const EMPTY_SCOPE: Scope = {\r\n getElement(): undefined {\r\n return undefined;\r\n },\r\n getAllElements(): Stream {\r\n return EMPTY_STREAM;\r\n }\r\n};\r\n", "/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { Disposable } from './disposable.js';\r\nimport type { URI } from './uri-utils.js';\r\nimport type { LangiumSharedCoreServices } from '../services.js';\r\nimport type { DocumentState } from '../workspace/documents.js';\r\n\r\nexport abstract class DisposableCache implements Disposable {\r\n\r\n protected toDispose: Disposable[] = [];\r\n protected isDisposed = false;\r\n\r\n onDispose(disposable: Disposable): void {\r\n this.toDispose.push(disposable);\r\n }\r\n\r\n dispose(): void {\r\n this.throwIfDisposed();\r\n this.clear();\r\n this.isDisposed = true;\r\n this.toDispose.forEach(disposable => disposable.dispose());\r\n }\r\n\r\n protected throwIfDisposed(): void {\r\n if (this.isDisposed) {\r\n throw new Error('This cache has already been disposed');\r\n }\r\n }\r\n\r\n abstract clear(): void;\r\n}\r\n\r\nexport class SimpleCache extends DisposableCache {\r\n protected readonly cache = new Map();\r\n\r\n has(key: K): boolean {\r\n this.throwIfDisposed();\r\n return this.cache.has(key);\r\n }\r\n\r\n set(key: K, value: V): void {\r\n this.throwIfDisposed();\r\n this.cache.set(key, value);\r\n }\r\n\r\n get(key: K): V | undefined;\r\n get(key: K, provider: () => V): V;\r\n get(key: K, provider?: () => V): V | undefined {\r\n this.throwIfDisposed();\r\n if (this.cache.has(key)) {\r\n return this.cache.get(key);\r\n } else if (provider) {\r\n const value = provider();\r\n this.cache.set(key, value);\r\n return value;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n delete(key: K): boolean {\r\n this.throwIfDisposed();\r\n return this.cache.delete(key);\r\n }\r\n\r\n clear(): void {\r\n this.throwIfDisposed();\r\n this.cache.clear();\r\n }\r\n}\r\n\r\nexport class ContextCache extends DisposableCache {\r\n\r\n private readonly cache = new Map>();\r\n private readonly converter: (input: Context) => ContextKey | Context;\r\n\r\n constructor(converter?: (input: Context) => ContextKey) {\r\n super();\r\n this.converter = converter ?? (value => value);\r\n }\r\n\r\n has(contextKey: Context, key: Key): boolean {\r\n this.throwIfDisposed();\r\n return this.cacheForContext(contextKey).has(key);\r\n }\r\n\r\n set(contextKey: Context, key: Key, value: Value): void {\r\n this.throwIfDisposed();\r\n this.cacheForContext(contextKey).set(key, value);\r\n }\r\n\r\n get(contextKey: Context, key: Key): Value | undefined;\r\n get(contextKey: Context, key: Key, provider: () => Value): Value;\r\n get(contextKey: Context, key: Key, provider?: () => Value): Value | undefined {\r\n this.throwIfDisposed();\r\n const contextCache = this.cacheForContext(contextKey);\r\n if (contextCache.has(key)) {\r\n return contextCache.get(key);\r\n } else if (provider) {\r\n const value = provider();\r\n contextCache.set(key, value);\r\n return value;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n delete(contextKey: Context, key: Key): boolean {\r\n this.throwIfDisposed();\r\n return this.cacheForContext(contextKey).delete(key);\r\n }\r\n\r\n clear(): void;\r\n clear(contextKey: Context): void;\r\n clear(contextKey?: Context): void {\r\n this.throwIfDisposed();\r\n if (contextKey) {\r\n const mapKey = this.converter(contextKey);\r\n this.cache.delete(mapKey);\r\n } else {\r\n this.cache.clear();\r\n }\r\n }\r\n\r\n protected cacheForContext(contextKey: Context): Map {\r\n const mapKey = this.converter(contextKey);\r\n let documentCache = this.cache.get(mapKey);\r\n if (!documentCache) {\r\n documentCache = new Map();\r\n this.cache.set(mapKey, documentCache);\r\n }\r\n return documentCache;\r\n }\r\n}\r\n\r\n/**\r\n * Every key/value pair in this cache is scoped to a document.\r\n * If this document is changed or deleted, all associated key/value pairs are deleted.\r\n */\r\nexport class DocumentCache extends ContextCache {\r\n\r\n /**\r\n * Creates a new document cache.\r\n *\r\n * @param sharedServices Service container instance to hook into document lifecycle events.\r\n * @param state Optional document state on which the cache should evict.\r\n * If not provided, the cache will evict on `DocumentBuilder#onUpdate`.\r\n * *Deleted* documents are considered in both cases.\r\n *\r\n * Providing a state here will use `DocumentBuilder#onDocumentPhase` instead,\r\n * which triggers on all documents that have been affected by this change, assuming that the\r\n * state is `DocumentState.Linked` or a later state.\r\n */\r\n constructor(sharedServices: LangiumSharedCoreServices, state?: DocumentState) {\r\n super(uri => uri.toString());\r\n if (state) {\r\n this.toDispose.push(sharedServices.workspace.DocumentBuilder.onDocumentPhase(state, document => {\r\n this.clear(document.uri.toString());\r\n }));\r\n this.toDispose.push(sharedServices.workspace.DocumentBuilder.onUpdate((_changed, deleted) => {\r\n for (const uri of deleted) { // react only on deleted documents\r\n this.clear(uri);\r\n }\r\n }));\r\n } else {\r\n this.toDispose.push(sharedServices.workspace.DocumentBuilder.onUpdate((changed, deleted) => {\r\n const allUris = changed.concat(deleted); // react on both changed and deleted documents\r\n for (const uri of allUris) {\r\n this.clear(uri);\r\n }\r\n }));\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Every key/value pair in this cache is scoped to the whole workspace.\r\n * If any document in the workspace is added, changed or deleted, the whole cache is evicted.\r\n */\r\nexport class WorkspaceCache extends SimpleCache {\r\n\r\n /**\r\n * Creates a new workspace cache.\r\n *\r\n * @param sharedServices Service container instance to hook into document lifecycle events.\r\n * @param state Optional document state on which the cache should evict.\r\n * If not provided, the cache will evict on `DocumentBuilder#onUpdate`.\r\n * *Deleted* documents are considered in both cases.\r\n */\r\n constructor(sharedServices: LangiumSharedCoreServices, state?: DocumentState) {\r\n super();\r\n if (state) {\r\n this.toDispose.push(sharedServices.workspace.DocumentBuilder.onBuildPhase(state, () => {\r\n this.clear();\r\n }));\r\n this.toDispose.push(sharedServices.workspace.DocumentBuilder.onUpdate((_changed, deleted) => {\r\n if (deleted.length > 0) { // react only on deleted documents\r\n this.clear();\r\n }\r\n }));\r\n } else {\r\n this.toDispose.push(sharedServices.workspace.DocumentBuilder.onUpdate(() => { // react on both changed and deleted documents\r\n this.clear();\r\n }));\r\n }\r\n }\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021-2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode, AstNodeDescription, AstReflection, ReferenceInfo } from '../syntax-tree.js';\r\nimport type { Stream } from '../utils/stream.js';\r\nimport type { AstNodeDescriptionProvider } from '../workspace/ast-descriptions.js';\r\nimport type { IndexManager } from '../workspace/index-manager.js';\r\nimport type { NameProvider } from './name-provider.js';\r\nimport type { Scope, ScopeOptions} from './scope.js';\r\nimport { MapScope, StreamScope } from './scope.js';\r\nimport { getDocument } from '../utils/ast-utils.js';\r\nimport { stream } from '../utils/stream.js';\r\nimport { WorkspaceCache } from '../utils/caching.js';\r\n\r\n/**\r\n * Language-specific service for determining the scope of target elements visible in a specific cross-reference context.\r\n */\r\nexport interface ScopeProvider {\r\n\r\n /**\r\n * Return a scope describing what elements are visible for the given AST node and cross-reference\r\n * identifier.\r\n *\r\n * @param context Information about the reference for which a scope is requested.\r\n */\r\n getScope(context: ReferenceInfo): Scope;\r\n\r\n}\r\n\r\nexport class DefaultScopeProvider implements ScopeProvider {\r\n\r\n protected readonly reflection: AstReflection;\r\n protected readonly nameProvider: NameProvider;\r\n protected readonly descriptions: AstNodeDescriptionProvider;\r\n protected readonly indexManager: IndexManager;\r\n\r\n protected readonly globalScopeCache: WorkspaceCache;\r\n\r\n constructor(services: LangiumCoreServices) {\r\n this.reflection = services.shared.AstReflection;\r\n this.nameProvider = services.references.NameProvider;\r\n this.descriptions = services.workspace.AstNodeDescriptionProvider;\r\n this.indexManager = services.shared.workspace.IndexManager;\r\n this.globalScopeCache = new WorkspaceCache(services.shared);\r\n }\r\n\r\n getScope(context: ReferenceInfo): Scope {\r\n const scopes: Array> = [];\r\n const referenceType = this.reflection.getReferenceType(context);\r\n\r\n const precomputed = getDocument(context.container).precomputedScopes;\r\n if (precomputed) {\r\n let currentNode: AstNode | undefined = context.container;\r\n do {\r\n const allDescriptions = precomputed.get(currentNode);\r\n if (allDescriptions.length > 0) {\r\n scopes.push(stream(allDescriptions).filter(\r\n desc => this.reflection.isSubtype(desc.type, referenceType)));\r\n }\r\n currentNode = currentNode.$container;\r\n } while (currentNode);\r\n }\r\n\r\n let result: Scope = this.getGlobalScope(referenceType, context);\r\n for (let i = scopes.length - 1; i >= 0; i--) {\r\n result = this.createScope(scopes[i], result);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Create a scope for the given collection of AST node descriptions.\r\n */\r\n protected createScope(elements: Iterable, outerScope?: Scope, options?: ScopeOptions): Scope {\r\n return new StreamScope(stream(elements), outerScope, options);\r\n }\r\n\r\n /**\r\n * Create a scope for the given collection of AST nodes, which need to be transformed into respective\r\n * descriptions first. This is done using the `NameProvider` and `AstNodeDescriptionProvider` services.\r\n */\r\n protected createScopeForNodes(elements: Iterable, outerScope?: Scope, options?: ScopeOptions): Scope {\r\n const s = stream(elements).map(e => {\r\n const name = this.nameProvider.getName(e);\r\n if (name) {\r\n return this.descriptions.createDescription(e, name);\r\n }\r\n return undefined;\r\n }).nonNullable();\r\n return new StreamScope(s, outerScope, options);\r\n }\r\n\r\n /**\r\n * Create a global scope filtered for the given reference type.\r\n */\r\n protected getGlobalScope(referenceType: string, _context: ReferenceInfo): Scope {\r\n return this.globalScopeCache.get(referenceType, () => new MapScope(this.indexManager.allElements(referenceType)));\r\n }\r\n\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport { URI } from 'vscode-uri';\r\nimport type { CommentProvider } from '../documentation/comment-provider.js';\r\nimport type { NameProvider } from '../references/name-provider.js';\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode, CstNode, GenericAstNode, Mutable, Reference } from '../syntax-tree.js';\r\nimport { isAstNode, isReference } from '../syntax-tree.js';\r\nimport { getDocument } from '../utils/ast-utils.js';\r\nimport { findNodesForProperty } from '../utils/grammar-utils.js';\r\nimport type { AstNodeLocator } from '../workspace/ast-node-locator.js';\r\nimport type { DocumentSegment, LangiumDocument, LangiumDocuments } from '../workspace/documents.js';\r\n\r\nexport interface JsonSerializeOptions {\r\n /** The space parameter for `JSON.stringify`, controlling whether and how to pretty-print the output. */\r\n space?: string | number;\r\n /** Whether to include the `$refText` property for references (the name used to identify the target node). */\r\n refText?: boolean;\r\n /** Whether to include the `$sourceText` property, which holds the full source text from which an AST node was parsed. */\r\n sourceText?: boolean;\r\n /** Whether to include the `$textRegion` property, which holds information to trace AST node properties to their respective source text regions. */\r\n textRegions?: boolean;\r\n /** Whether to include the `$comment` property, which holds comments according to the CommentProvider service. */\r\n comments?: boolean;\r\n /** The replacer parameter for `JSON.stringify`; the default replacer given as parameter should be used to apply basic replacements. */\r\n replacer?: (key: string, value: unknown, defaultReplacer: (key: string, value: unknown) => unknown) => unknown\r\n /** Used to convert and serialize URIs when the target of a cross-reference is in a different document. */\r\n uriConverter?: (uri: URI, reference: Reference) => string\r\n}\r\n\r\nexport interface JsonDeserializeOptions {\r\n /** Used to parse and convert URIs when the target of a cross-reference is in a different document. */\r\n uriConverter?: (uri: string) => URI\r\n}\r\n\r\n/**\r\n * {@link AstNode}s that may carry information on their definition area within the DSL text.\r\n */\r\nexport interface AstNodeWithTextRegion extends AstNode {\r\n $sourceText?: string;\r\n $textRegion?: AstNodeRegionWithAssignments;\r\n}\r\n\r\n/**\r\n * {@link AstNode}s that may carry a semantically relevant comment.\r\n */\r\nexport interface AstNodeWithComment extends AstNode {\r\n $comment?: string;\r\n}\r\n\r\nexport function isAstNodeWithComment(node: AstNode): node is AstNodeWithComment {\r\n return typeof (node as AstNodeWithComment).$comment === 'string';\r\n}\r\n\r\n/**\r\n * A {@link DocumentSegment} representing the definition area of an AstNode within the DSL text.\r\n * Usually contains text region information on all assigned property values of the AstNode,\r\n * and may contain the defining file's URI as string.\r\n */\r\nexport interface AstNodeRegionWithAssignments extends DocumentSegment {\r\n /**\r\n * A record containing an entry for each assigned property of the AstNode.\r\n * The key is equal to the property name and the value is an array of the property values'\r\n * text regions, regardless of whether the property is a single value or list property.\r\n */\r\n assignments?: Record;\r\n /**\r\n * The AstNode defining file's URI as string\r\n */\r\n documentURI?: string;\r\n}\r\n\r\n/**\r\n * Utility service for transforming an `AstNode` into a JSON string and vice versa.\r\n */\r\nexport interface JsonSerializer {\r\n /**\r\n * Serialize an `AstNode` into a JSON `string`.\r\n * @param node The `AstNode` to be serialized.\r\n * @param options Serialization options\r\n */\r\n serialize(node: AstNode, options?: JsonSerializeOptions): string;\r\n /**\r\n * Deserialize (parse) a JSON `string` into an `AstNode`.\r\n */\r\n deserialize(content: string, options?: JsonDeserializeOptions): T;\r\n}\r\n\r\n/**\r\n * A cross-reference in the serialized JSON representation of an AstNode.\r\n */\r\ninterface IntermediateReference {\r\n /** URI pointing to the target element. This is either `#${path}` if the target is in the same document, or `${documentURI}#${path}` otherwise. */\r\n $ref?: string\r\n /** The actual text used to look up the reference target in the surrounding scope. */\r\n $refText?: string\r\n /** If any problem occurred while resolving the reference, it is described by this property. */\r\n $error?: string\r\n}\r\n\r\nfunction isIntermediateReference(obj: unknown): obj is IntermediateReference {\r\n return typeof obj === 'object' && !!obj && ('$ref' in obj || '$error' in obj);\r\n}\r\n\r\nexport class DefaultJsonSerializer implements JsonSerializer {\r\n\r\n /** The set of AstNode properties to be ignored by the serializer. */\r\n ignoreProperties = new Set(['$container', '$containerProperty', '$containerIndex', '$document', '$cstNode']);\r\n\r\n /** The document that is currently processed by the serializer; this is used by the replacer function. */\r\n protected currentDocument: LangiumDocument | undefined;\r\n\r\n protected readonly langiumDocuments: LangiumDocuments;\r\n protected readonly astNodeLocator: AstNodeLocator;\r\n protected readonly nameProvider: NameProvider;\r\n protected readonly commentProvider: CommentProvider;\r\n\r\n constructor(services: LangiumCoreServices) {\r\n this.langiumDocuments = services.shared.workspace.LangiumDocuments;\r\n this.astNodeLocator = services.workspace.AstNodeLocator;\r\n this.nameProvider = services.references.NameProvider;\r\n this.commentProvider = services.documentation.CommentProvider;\r\n }\r\n\r\n serialize(node: AstNode, options?: JsonSerializeOptions): string {\r\n const serializeOptions = options ?? {};\r\n const specificReplacer = options?.replacer;\r\n const defaultReplacer = (key: string, value: unknown) => this.replacer(key, value, serializeOptions);\r\n const replacer = specificReplacer ? (key: string, value: unknown) => specificReplacer(key, value, defaultReplacer) : defaultReplacer;\r\n\r\n try {\r\n this.currentDocument = getDocument(node);\r\n return JSON.stringify(node, replacer, options?.space);\r\n } finally {\r\n this.currentDocument = undefined;\r\n }\r\n }\r\n\r\n deserialize(content: string, options?: JsonDeserializeOptions): T {\r\n const deserializeOptions = options ?? {};\r\n const root = JSON.parse(content);\r\n this.linkNode(root, root, deserializeOptions);\r\n return root;\r\n }\r\n\r\n protected replacer(key: string, value: unknown, { refText, sourceText, textRegions, comments, uriConverter }: JsonSerializeOptions): unknown {\r\n if (this.ignoreProperties.has(key)) {\r\n return undefined;\r\n } else if (isReference(value)) {\r\n const refValue = value.ref;\r\n const $refText = refText ? value.$refText : undefined;\r\n if (refValue) {\r\n const targetDocument = getDocument(refValue);\r\n let targetUri = '';\r\n if (this.currentDocument && this.currentDocument !== targetDocument) {\r\n if (uriConverter) {\r\n targetUri = uriConverter(targetDocument.uri, value);\r\n } else {\r\n targetUri = targetDocument.uri.toString();\r\n }\r\n }\r\n const targetPath = this.astNodeLocator.getAstNodePath(refValue);\r\n return {\r\n $ref: `${targetUri}#${targetPath}`,\r\n $refText\r\n } satisfies IntermediateReference;\r\n } else {\r\n return {\r\n $error: value.error?.message ?? 'Could not resolve reference',\r\n $refText\r\n } satisfies IntermediateReference;\r\n }\r\n } else if (isAstNode(value)) {\r\n let astNode: AstNodeWithTextRegion | undefined = undefined;\r\n if (textRegions) {\r\n astNode = this.addAstNodeRegionWithAssignmentsTo({ ...value });\r\n if ((!key || value.$document) && astNode?.$textRegion) {\r\n // The document URI is added to the root node of the resulting JSON tree\r\n astNode.$textRegion.documentURI = this.currentDocument?.uri.toString();\r\n }\r\n }\r\n if (sourceText && !key) {\r\n astNode ??= { ...value };\r\n astNode.$sourceText = value.$cstNode?.text;\r\n }\r\n if (comments) {\r\n astNode ??= { ...value };\r\n const comment = this.commentProvider.getComment(value);\r\n if (comment) {\r\n (astNode as AstNodeWithComment).$comment = comment.replace(/\\r/g, '');\r\n }\r\n }\r\n return astNode ?? value;\r\n } else {\r\n return value;\r\n }\r\n }\r\n\r\n protected addAstNodeRegionWithAssignmentsTo(node: AstNodeWithTextRegion) {\r\n const createDocumentSegment: (cstNode: CstNode) => AstNodeRegionWithAssignments = cstNode => {\r\n offset: cstNode.offset,\r\n end: cstNode.end,\r\n length: cstNode.length,\r\n range: cstNode.range,\r\n };\r\n\r\n if (node.$cstNode) {\r\n const textRegion = node.$textRegion = createDocumentSegment(node.$cstNode);\r\n const assignments: Record = textRegion.assignments = {};\r\n\r\n Object.keys(node).filter(key => !key.startsWith('$')).forEach(key => {\r\n const propertyAssignments = findNodesForProperty(node.$cstNode, key).map(createDocumentSegment);\r\n if (propertyAssignments.length !== 0) {\r\n assignments[key] = propertyAssignments;\r\n }\r\n });\r\n\r\n return node;\r\n }\r\n return undefined;\r\n }\r\n\r\n protected linkNode(node: GenericAstNode, root: AstNode, options: JsonDeserializeOptions, container?: AstNode, containerProperty?: string, containerIndex?: number) {\r\n for (const [propertyName, item] of Object.entries(node)) {\r\n if (Array.isArray(item)) {\r\n for (let index = 0; index < item.length; index++) {\r\n const element = item[index];\r\n if (isIntermediateReference(element)) {\r\n item[index] = this.reviveReference(node, propertyName, root, element, options);\r\n } else if (isAstNode(element)) {\r\n this.linkNode(element as GenericAstNode, root, options, node, propertyName, index);\r\n }\r\n }\r\n } else if (isIntermediateReference(item)) {\r\n node[propertyName] = this.reviveReference(node, propertyName, root, item, options);\r\n } else if (isAstNode(item)) {\r\n this.linkNode(item as GenericAstNode, root, options, node, propertyName);\r\n }\r\n }\r\n const mutable = node as Mutable;\r\n mutable.$container = container;\r\n mutable.$containerProperty = containerProperty;\r\n mutable.$containerIndex = containerIndex;\r\n }\r\n\r\n protected reviveReference(container: AstNode, property: string, root: AstNode, reference: IntermediateReference, options: JsonDeserializeOptions): Reference | undefined {\r\n let refText = reference.$refText;\r\n let error = reference.$error;\r\n if (reference.$ref) {\r\n const ref = this.getRefNode(root, reference.$ref, options.uriConverter);\r\n if (isAstNode(ref)) {\r\n if (!refText) {\r\n refText = this.nameProvider.getName(ref);\r\n }\r\n return {\r\n $refText: refText ?? '',\r\n ref\r\n };\r\n } else {\r\n error = ref;\r\n }\r\n }\r\n if (error) {\r\n const ref: Mutable = {\r\n $refText: refText ?? ''\r\n };\r\n ref.error = {\r\n container,\r\n property,\r\n message: error,\r\n reference: ref\r\n };\r\n return ref;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected getRefNode(root: AstNode, uri: string, uriConverter?: (uri: string) => URI): AstNode | string {\r\n try {\r\n const fragmentIndex = uri.indexOf('#');\r\n if (fragmentIndex === 0) {\r\n const node = this.astNodeLocator.getAstNode(root, uri.substring(1));\r\n if (!node) {\r\n return 'Could not resolve path: ' + uri;\r\n }\r\n return node;\r\n }\r\n if (fragmentIndex < 0) {\r\n const documentUri = uriConverter ? uriConverter(uri) : URI.parse(uri);\r\n const document = this.langiumDocuments.getDocument(documentUri);\r\n if (!document) {\r\n return 'Could not find document for URI: ' + uri;\r\n }\r\n return document.parseResult.value;\r\n }\r\n const documentUri = uriConverter ? uriConverter(uri.substring(0, fragmentIndex)) : URI.parse(uri.substring(0, fragmentIndex));\r\n const document = this.langiumDocuments.getDocument(documentUri);\r\n if (!document) {\r\n return 'Could not find document for URI: ' + uri;\r\n }\r\n if (fragmentIndex === uri.length - 1) {\r\n return document.parseResult.value;\r\n }\r\n const node = this.astNodeLocator.getAstNode(document.parseResult.value, uri.substring(fragmentIndex + 1));\r\n if (!node) {\r\n return 'Could not resolve URI: ' + uri;\r\n }\r\n return node;\r\n } catch (err) {\r\n return String(err);\r\n }\r\n }\r\n\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { LangiumCoreServices, LangiumSharedCoreServices } from './services.js';\r\nimport type { TextDocumentProvider } from './workspace/documents.js';\r\nimport { UriUtils, type URI } from './utils/uri-utils.js';\r\n\r\n/**\r\n * The service registry provides access to the language-specific {@link LangiumCoreServices} optionally including LSP-related services.\r\n * These are resolved via the URI of a text document.\r\n */\r\nexport interface ServiceRegistry {\r\n\r\n /**\r\n * Register a language via its injected services.\r\n */\r\n register(language: LangiumCoreServices): void;\r\n\r\n /**\r\n * Retrieve the language-specific services for the given URI. In case only one language is\r\n * registered, it may be used regardless of the URI format.\r\n */\r\n getServices(uri: URI): LangiumCoreServices;\r\n\r\n /**\r\n * Check whether services are available for the given URI.\r\n */\r\n hasServices(uri: URI): boolean;\r\n\r\n /**\r\n * The full set of registered language services.\r\n */\r\n readonly all: readonly LangiumCoreServices[];\r\n}\r\n\r\n/**\r\n * Generic registry for Langium services, but capable of being used with extending service sets as well (such as the lsp-complete LangiumCoreServices set)\r\n */\r\nexport class DefaultServiceRegistry implements ServiceRegistry {\r\n\r\n protected singleton?: LangiumCoreServices;\r\n protected readonly languageIdMap = new Map();\r\n protected readonly fileExtensionMap = new Map();\r\n\r\n /**\r\n * @deprecated Use the new `fileExtensionMap` (or `languageIdMap`) property instead.\r\n */\r\n protected get map(): Map | undefined {\r\n return this.fileExtensionMap;\r\n }\r\n\r\n protected readonly textDocuments?: TextDocumentProvider;\r\n\r\n constructor(services?: LangiumSharedCoreServices) {\r\n this.textDocuments = services?.workspace.TextDocuments;\r\n }\r\n\r\n register(language: LangiumCoreServices): void {\r\n const data = language.LanguageMetaData;\r\n for (const ext of data.fileExtensions) {\r\n if (this.fileExtensionMap.has(ext)) {\r\n console.warn(`The file extension ${ext} is used by multiple languages. It is now assigned to '${data.languageId}'.`);\r\n }\r\n this.fileExtensionMap.set(ext, language);\r\n }\r\n this.languageIdMap.set(data.languageId, language);\r\n if (this.languageIdMap.size === 1) {\r\n this.singleton = language;\r\n } else {\r\n this.singleton = undefined;\r\n }\r\n }\r\n\r\n getServices(uri: URI): LangiumCoreServices {\r\n if (this.singleton !== undefined) {\r\n return this.singleton;\r\n }\r\n if (this.languageIdMap.size === 0) {\r\n throw new Error('The service registry is empty. Use `register` to register the services of a language.');\r\n }\r\n const languageId = this.textDocuments?.get(uri)?.languageId;\r\n if (languageId !== undefined) {\r\n const services = this.languageIdMap.get(languageId);\r\n if (services) {\r\n return services;\r\n }\r\n }\r\n const ext = UriUtils.extname(uri);\r\n const services = this.fileExtensionMap.get(ext);\r\n if (!services) {\r\n if (languageId) {\r\n throw new Error(`The service registry contains no services for the extension '${ext}' for language '${languageId}'.`);\r\n } else {\r\n throw new Error(`The service registry contains no services for the extension '${ext}'.`);\r\n }\r\n }\r\n return services;\r\n }\r\n\r\n hasServices(uri: URI): boolean {\r\n try {\r\n this.getServices(uri);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n get all(): readonly LangiumCoreServices[] {\r\n return Array.from(this.languageIdMap.values());\r\n }\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { CodeDescription, DiagnosticRelatedInformation, DiagnosticTag, integer, Range } from 'vscode-languageserver-types';\r\nimport { assertUnreachable } from '../index.js';\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode, AstReflection, Properties } from '../syntax-tree.js';\r\nimport type { CancellationToken } from '../utils/cancellation.js';\r\nimport { MultiMap } from '../utils/collections.js';\r\nimport type { MaybePromise } from '../utils/promise-utils.js';\r\nimport { isOperationCancelled } from '../utils/promise-utils.js';\r\nimport type { Stream } from '../utils/stream.js';\r\nimport { stream } from '../utils/stream.js';\r\nimport type { DocumentSegment } from '../workspace/documents.js';\r\n\r\nexport type DiagnosticInfo> = {\r\n /** The AST node to which the diagnostic is attached. */\r\n node: N;\r\n /** If a property name is given, the diagnostic is restricted to the corresponding text region. */\r\n property?: P;\r\n /** If the value of a keyword is given, the diagnostic will appear at its corresponding text region */\r\n keyword?: string;\r\n /** In case of a multi-value property (array), an index can be given to select a specific element. */\r\n index?: number;\r\n /** If you want to create a diagnostic independent to any property, use the range property. */\r\n range?: Range;\r\n /** The diagnostic's code, which usually appear in the user interface. */\r\n code?: integer | string;\r\n /** An optional property to describe the error code. */\r\n codeDescription?: CodeDescription;\r\n /** Additional metadata about the diagnostic. */\r\n tags?: DiagnosticTag[];\r\n /** An array of related diagnostic information, e.g. when symbol-names within a scope collide all definitions can be marked via this property. */\r\n relatedInformation?: DiagnosticRelatedInformation[];\r\n /** A data entry field that is preserved between a `textDocument/publishDiagnostics` notification and `textDocument/codeAction` request. */\r\n data?: unknown;\r\n}\r\n\r\n/**\r\n * Shape of information commonly used in the `data` field of diagnostics.\r\n */\r\nexport interface DiagnosticData {\r\n /** Diagnostic code for identifying which code action to apply. This code is _not_ shown in the user interface. */\r\n code: string\r\n /** Specifies where to apply the code action in the form of a `DocumentSegment`. */\r\n actionSegment?: DocumentSegment\r\n /** Specifies where to apply the code action in the form of a `Range`. */\r\n actionRange?: Range\r\n}\r\n\r\n/**\r\n * Create DiagnosticData for a given diagnostic code. The result can be put into the `data` field of a DiagnosticInfo.\r\n */\r\nexport function diagnosticData(code: string): DiagnosticData {\r\n return { code };\r\n}\r\n\r\nexport type ValidationSeverity = 'error' | 'warning' | 'info' | 'hint';\r\n\r\nexport type ValidationAcceptor = (severity: ValidationSeverity, message: string, info: DiagnosticInfo) => void\r\n\r\nexport type ValidationCheck = (node: T, accept: ValidationAcceptor, cancelToken: CancellationToken) => MaybePromise;\r\n\r\n/**\r\n * A utility type for describing functions which will be called once before or after all the AstNodes of an AST/Langium document are validated.\r\n *\r\n * The AST is represented by its root AstNode.\r\n *\r\n * The given validation acceptor helps to report some early or lately detected issues.\r\n *\r\n * The 'categories' indicate, which validation categories are executed for all the AstNodes.\r\n * This helps to tailor the preparations/tear-down logic to the actually executed checks on the nodes.\r\n *\r\n * It is recommended to support interrupts during long-running logic with 'interruptAndCheck(cancelToken)'.\r\n */\r\nexport type ValidationPreparation = (rootNode: AstNode, accept: ValidationAcceptor, categories: ValidationCategory[], cancelToken: CancellationToken) => MaybePromise;\r\n\r\n/**\r\n * A utility type for associating non-primitive AST types to corresponding validation checks. For example:\r\n *\r\n * ```ts\r\n * const checks: ValidationChecks = {\r\n * State: validator.checkStateNameStartsWithCapital\r\n * };\r\n * ```\r\n *\r\n * If an AST type does not extend AstNode, e.g. if it describes a union of string literals, that type's name must not occur as a key in objects of type `ValidationCheck<...>`.\r\n *\r\n * @param T a type definition mapping language specific type names (keys) to the corresponding types (values)\r\n */\r\nexport type ValidationChecks = {\r\n [K in keyof T]?: T[K] extends AstNode ? ValidationCheck | Array> : never\r\n} & {\r\n AstNode?: ValidationCheck | Array>;\r\n}\r\n\r\n/**\r\n * `fast` checks can be executed after every document change (i.e. as the user is typing). If a check\r\n * is too slow it can delay the response to document changes, yielding bad user experience. By marking\r\n * it as `slow`, it will be skipped for normal as-you-type validation. Then it's up to you when to\r\n * schedule these long-running checks: after the fast checks are done, or after saving a document,\r\n * or with an explicit command, etc.\r\n *\r\n * `built-in` checks are errors produced by the lexer, the parser, or the linker. They cannot be used\r\n * for custom validation checks.\r\n */\r\nexport type ValidationCategory = 'fast' | 'slow' | 'built-in'\r\n\r\nexport namespace ValidationCategory {\r\n export const all: readonly ValidationCategory[] = ['fast', 'slow', 'built-in'];\r\n}\r\n\r\ntype ValidationCheckEntry = {\r\n check: ValidationCheck\r\n category: ValidationCategory\r\n}\r\n\r\n/**\r\n * Manages a set of `ValidationCheck`s to be applied when documents are validated.\r\n */\r\nexport class ValidationRegistry {\r\n private readonly entries = new MultiMap();\r\n private readonly reflection: AstReflection;\r\n\r\n private entriesBefore: ValidationPreparation[] = [];\r\n private entriesAfter: ValidationPreparation[] = [];\r\n\r\n constructor(services: LangiumCoreServices) {\r\n this.reflection = services.shared.AstReflection;\r\n }\r\n\r\n /**\r\n * Register a set of validation checks. Each value in the record can be either a single validation check (i.e. a function)\r\n * or an array of validation checks.\r\n *\r\n * @param checksRecord Set of validation checks to register.\r\n * @param category Optional category for the validation checks (defaults to `'fast'`).\r\n * @param thisObj Optional object to be used as `this` when calling the validation check functions.\r\n */\r\n register(checksRecord: ValidationChecks, thisObj: ThisParameterType = this, category: ValidationCategory = 'fast'): void {\r\n if (category === 'built-in') {\r\n throw new Error(\"The 'built-in' category is reserved for lexer, parser, and linker errors.\");\r\n }\r\n for (const [type, ch] of Object.entries(checksRecord)) {\r\n const callbacks = ch as ValidationCheck | ValidationCheck[];\r\n if (Array.isArray(callbacks)) {\r\n for (const check of callbacks) {\r\n const entry: ValidationCheckEntry = {\r\n check: this.wrapValidationException(check, thisObj),\r\n category\r\n };\r\n this.addEntry(type, entry);\r\n }\r\n } else if (typeof callbacks === 'function') {\r\n const entry: ValidationCheckEntry = {\r\n check: this.wrapValidationException(callbacks, thisObj),\r\n category\r\n };\r\n this.addEntry(type, entry);\r\n } else {\r\n assertUnreachable(callbacks);\r\n }\r\n }\r\n }\r\n\r\n protected wrapValidationException(check: ValidationCheck, thisObj: unknown): ValidationCheck {\r\n return async (node, accept, cancelToken) => {\r\n await this.handleException(() => check.call(thisObj, node, accept, cancelToken), 'An error occurred during validation', accept, node);\r\n };\r\n }\r\n\r\n protected async handleException(functionality: () => MaybePromise, messageContext: string, accept: ValidationAcceptor, node: AstNode): Promise {\r\n try {\r\n await functionality();\r\n } catch (err) {\r\n if (isOperationCancelled(err)) {\r\n throw err;\r\n }\r\n console.error(`${messageContext}:`, err);\r\n if (err instanceof Error && err.stack) {\r\n console.error(err.stack);\r\n }\r\n const messageDetails = err instanceof Error ? err.message : String(err);\r\n accept('error', `${messageContext}: ${messageDetails}`, { node });\r\n }\r\n }\r\n\r\n protected addEntry(type: string, entry: ValidationCheckEntry): void {\r\n if (type === 'AstNode') {\r\n this.entries.add('AstNode', entry);\r\n return;\r\n }\r\n for (const subtype of this.reflection.getAllSubTypes(type)) {\r\n this.entries.add(subtype, entry);\r\n }\r\n }\r\n\r\n getChecks(type: string, categories?: ValidationCategory[]): Stream {\r\n let checks = stream(this.entries.get(type))\r\n .concat(this.entries.get('AstNode'));\r\n if (categories) {\r\n checks = checks.filter(entry => categories.includes(entry.category));\r\n }\r\n return checks.map(entry => entry.check);\r\n }\r\n\r\n /**\r\n * Register logic which will be executed once before validating all the nodes of an AST/Langium document.\r\n * This helps to prepare or initialize some information which are required or reusable for the following checks on the AstNodes.\r\n *\r\n * As an example, for validating unique fully-qualified names of nodes in the AST,\r\n * here the map for mapping names to nodes could be established.\r\n * During the usual checks on the nodes, they are put into this map with their name.\r\n *\r\n * Note that this approach makes validations stateful, which is relevant e.g. when cancelling the validation.\r\n * Therefore it is recommended to clear stored information\r\n * _before_ validating an AST to validate each AST unaffected from other ASTs\r\n * AND _after_ validating the AST to free memory by information which are no longer used.\r\n *\r\n * @param checkBefore a set-up function which will be called once before actually validating an AST\r\n * @param thisObj Optional object to be used as `this` when calling the validation check functions.\r\n */\r\n registerBeforeDocument(checkBefore: ValidationPreparation, thisObj: ThisParameterType = this): void {\r\n this.entriesBefore.push(this.wrapPreparationException(checkBefore, 'An error occurred during set-up of the validation', thisObj));\r\n }\r\n\r\n /**\r\n * Register logic which will be executed once after validating all the nodes of an AST/Langium document.\r\n * This helps to finally evaluate information which are collected during the checks on the AstNodes.\r\n *\r\n * As an example, for validating unique fully-qualified names of nodes in the AST,\r\n * here the map with all the collected nodes and their names is checked\r\n * and validation hints are created for all nodes with the same name.\r\n *\r\n * Note that this approach makes validations stateful, which is relevant e.g. when cancelling the validation.\r\n * Therefore it is recommended to clear stored information\r\n * _before_ validating an AST to validate each AST unaffected from other ASTs\r\n * AND _after_ validating the AST to free memory by information which are no longer used.\r\n *\r\n * @param checkBefore a set-up function which will be called once before actually validating an AST\r\n * @param thisObj Optional object to be used as `this` when calling the validation check functions.\r\n */\r\n registerAfterDocument(checkAfter: ValidationPreparation, thisObj: ThisParameterType = this): void {\r\n this.entriesAfter.push(this.wrapPreparationException(checkAfter, 'An error occurred during tear-down of the validation', thisObj));\r\n }\r\n\r\n protected wrapPreparationException(check: ValidationPreparation, messageContext: string, thisObj: unknown): ValidationPreparation {\r\n return async (rootNode, accept, categories, cancelToken) => {\r\n await this.handleException(() => check.call(thisObj, rootNode, accept, categories, cancelToken), messageContext, accept, rootNode);\r\n };\r\n }\r\n\r\n get checksBefore(): ValidationPreparation[] {\r\n return this.entriesBefore;\r\n }\r\n\r\n get checksAfter(): ValidationPreparation[] {\r\n return this.entriesAfter;\r\n }\r\n\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { MismatchedTokenException } from 'chevrotain';\r\nimport type { DiagnosticSeverity, Position, Range, Diagnostic } from 'vscode-languageserver-types';\r\nimport type { LanguageMetaData } from '../languages/language-meta-data.js';\r\nimport type { ParseResult } from '../parser/langium-parser.js';\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode, CstNode } from '../syntax-tree.js';\r\nimport type { LangiumDocument } from '../workspace/documents.js';\r\nimport type { DiagnosticData, DiagnosticInfo, ValidationAcceptor, ValidationCategory, ValidationRegistry, ValidationSeverity } from './validation-registry.js';\r\nimport { CancellationToken } from '../utils/cancellation.js';\r\nimport { findNodeForKeyword, findNodeForProperty } from '../utils/grammar-utils.js';\r\nimport { streamAst } from '../utils/ast-utils.js';\r\nimport { tokenToRange } from '../utils/cst-utils.js';\r\nimport { interruptAndCheck, isOperationCancelled } from '../utils/promise-utils.js';\r\nimport { diagnosticData } from './validation-registry.js';\r\nimport type { LexingDiagnostic, LexingDiagnosticSeverity } from '../parser/token-builder.js';\r\n\r\nexport interface ValidationOptions {\r\n /**\r\n * If this is set, only the checks associated with these categories are executed; otherwise\r\n * all checks are executed. The default category if not specified to the registry is `'fast'`.\r\n */\r\n categories?: ValidationCategory[];\r\n /** If true, no further diagnostics are reported if there are lexing errors. */\r\n stopAfterLexingErrors?: boolean\r\n /** If true, no further diagnostics are reported if there are parsing errors. */\r\n stopAfterParsingErrors?: boolean\r\n /** If true, no further diagnostics are reported if there are linking errors. */\r\n stopAfterLinkingErrors?: boolean\r\n}\r\n\r\n/**\r\n * Language-specific service for validating `LangiumDocument`s.\r\n */\r\nexport interface DocumentValidator {\r\n /**\r\n * Validates the whole specified document.\r\n *\r\n * @param document specified document to validate\r\n * @param options options to control the validation process\r\n * @param cancelToken allows to cancel the current operation\r\n * @throws `OperationCanceled` if a user action occurs during execution\r\n */\r\n validateDocument(document: LangiumDocument, options?: ValidationOptions, cancelToken?: CancellationToken): Promise;\r\n}\r\n\r\nexport class DefaultDocumentValidator implements DocumentValidator {\r\n\r\n protected readonly validationRegistry: ValidationRegistry;\r\n protected readonly metadata: LanguageMetaData;\r\n\r\n constructor(services: LangiumCoreServices) {\r\n this.validationRegistry = services.validation.ValidationRegistry;\r\n this.metadata = services.LanguageMetaData;\r\n }\r\n\r\n async validateDocument(document: LangiumDocument, options: ValidationOptions = {}, cancelToken = CancellationToken.None): Promise {\r\n const parseResult = document.parseResult;\r\n const diagnostics: Diagnostic[] = [];\r\n\r\n await interruptAndCheck(cancelToken);\r\n\r\n if (!options.categories || options.categories.includes('built-in')) {\r\n this.processLexingErrors(parseResult, diagnostics, options);\r\n if (options.stopAfterLexingErrors && diagnostics.some(d => d.data?.code === DocumentValidator.LexingError)) {\r\n return diagnostics;\r\n }\r\n\r\n this.processParsingErrors(parseResult, diagnostics, options);\r\n if (options.stopAfterParsingErrors && diagnostics.some(d => d.data?.code === DocumentValidator.ParsingError)) {\r\n return diagnostics;\r\n }\r\n\r\n this.processLinkingErrors(document, diagnostics, options);\r\n if (options.stopAfterLinkingErrors && diagnostics.some(d => d.data?.code === DocumentValidator.LinkingError)) {\r\n return diagnostics;\r\n }\r\n }\r\n\r\n // Process custom validations\r\n try {\r\n diagnostics.push(...await this.validateAst(parseResult.value, options, cancelToken));\r\n } catch (err) {\r\n if (isOperationCancelled(err)) {\r\n throw err;\r\n }\r\n console.error('An error occurred during validation:', err);\r\n }\r\n\r\n await interruptAndCheck(cancelToken);\r\n\r\n return diagnostics;\r\n }\r\n\r\n protected processLexingErrors(parseResult: ParseResult, diagnostics: Diagnostic[], _options: ValidationOptions): void {\r\n const lexerDiagnostics = [...parseResult.lexerErrors, ...parseResult.lexerReport?.diagnostics ?? []] as LexingDiagnostic[];\r\n for (const lexerDiagnostic of lexerDiagnostics) {\r\n const severity = lexerDiagnostic.severity ?? 'error';\r\n const diagnostic: Diagnostic = {\r\n severity: toDiagnosticSeverity(severity),\r\n range: {\r\n start: {\r\n line: lexerDiagnostic.line! - 1,\r\n character: lexerDiagnostic.column! - 1\r\n },\r\n end: {\r\n line: lexerDiagnostic.line! - 1,\r\n character: lexerDiagnostic.column! + lexerDiagnostic.length - 1\r\n }\r\n },\r\n message: lexerDiagnostic.message,\r\n data: toDiagnosticData(severity),\r\n source: this.getSource()\r\n };\r\n diagnostics.push(diagnostic);\r\n }\r\n }\r\n\r\n protected processParsingErrors(parseResult: ParseResult, diagnostics: Diagnostic[], _options: ValidationOptions): void {\r\n for (const parserError of parseResult.parserErrors) {\r\n let range: Range | undefined = undefined;\r\n // We can run into the chevrotain error recovery here\r\n // The token contained in the parser error might be automatically inserted\r\n // In this case every position value will be `NaN`\r\n if (isNaN(parserError.token.startOffset)) {\r\n // Some special parser error types contain a `previousToken`\r\n // We can simply append our diagnostic to that token\r\n if ('previousToken' in parserError) {\r\n const token = (parserError as MismatchedTokenException).previousToken;\r\n if (!isNaN(token.startOffset)) {\r\n const position: Position = { line: token.endLine! - 1, character: token.endColumn! };\r\n range = { start: position, end: position};\r\n } else {\r\n // No valid prev token. Might be empty document or containing only hidden tokens.\r\n // Point to document start\r\n const position: Position = { line: 0, character: 0 };\r\n range = { start: position, end: position};\r\n }\r\n }\r\n } else {\r\n range = tokenToRange(parserError.token);\r\n }\r\n if (range) {\r\n const diagnostic: Diagnostic = {\r\n severity: toDiagnosticSeverity('error'),\r\n range,\r\n message: parserError.message,\r\n data: diagnosticData(DocumentValidator.ParsingError),\r\n source: this.getSource()\r\n };\r\n diagnostics.push(diagnostic);\r\n }\r\n }\r\n }\r\n\r\n protected processLinkingErrors(document: LangiumDocument, diagnostics: Diagnostic[], _options: ValidationOptions): void {\r\n for (const reference of document.references) {\r\n const linkingError = reference.error;\r\n if (linkingError) {\r\n const info: DiagnosticInfo = {\r\n node: linkingError.container,\r\n property: linkingError.property,\r\n index: linkingError.index,\r\n data: {\r\n code: DocumentValidator.LinkingError,\r\n containerType: linkingError.container.$type,\r\n property: linkingError.property,\r\n refText: linkingError.reference.$refText\r\n } satisfies LinkingErrorData\r\n };\r\n diagnostics.push(this.toDiagnostic('error', linkingError.message, info));\r\n }\r\n }\r\n }\r\n\r\n protected async validateAst(rootNode: AstNode, options: ValidationOptions, cancelToken = CancellationToken.None): Promise {\r\n const validationItems: Diagnostic[] = [];\r\n const acceptor: ValidationAcceptor = (severity: ValidationSeverity, message: string, info: DiagnosticInfo) => {\r\n validationItems.push(this.toDiagnostic(severity, message, info));\r\n };\r\n\r\n await this.validateAstBefore(rootNode, options, acceptor, cancelToken);\r\n await this.validateAstNodes(rootNode, options, acceptor, cancelToken);\r\n await this.validateAstAfter(rootNode, options, acceptor, cancelToken);\r\n\r\n return validationItems;\r\n }\r\n\r\n protected async validateAstBefore(rootNode: AstNode, options: ValidationOptions, acceptor: ValidationAcceptor, cancelToken = CancellationToken.None): Promise {\r\n const checksBefore = this.validationRegistry.checksBefore;\r\n for (const checkBefore of checksBefore) {\r\n await interruptAndCheck(cancelToken);\r\n await checkBefore(rootNode, acceptor, options.categories ?? [], cancelToken);\r\n }\r\n }\r\n\r\n protected async validateAstNodes(rootNode: AstNode, options: ValidationOptions, acceptor: ValidationAcceptor, cancelToken = CancellationToken.None): Promise {\r\n await Promise.all(streamAst(rootNode).map(async node => {\r\n await interruptAndCheck(cancelToken);\r\n const checks = this.validationRegistry.getChecks(node.$type, options.categories);\r\n for (const check of checks) {\r\n await check(node, acceptor, cancelToken);\r\n }\r\n }));\r\n }\r\n\r\n protected async validateAstAfter(rootNode: AstNode, options: ValidationOptions, acceptor: ValidationAcceptor, cancelToken = CancellationToken.None): Promise {\r\n const checksAfter = this.validationRegistry.checksAfter;\r\n for (const checkAfter of checksAfter) {\r\n await interruptAndCheck(cancelToken);\r\n await checkAfter(rootNode, acceptor, options.categories ?? [], cancelToken);\r\n }\r\n }\r\n\r\n protected toDiagnostic(severity: ValidationSeverity, message: string, info: DiagnosticInfo): Diagnostic {\r\n return {\r\n message,\r\n range: getDiagnosticRange(info),\r\n severity: toDiagnosticSeverity(severity),\r\n code: info.code,\r\n codeDescription: info.codeDescription,\r\n tags: info.tags,\r\n relatedInformation: info.relatedInformation,\r\n data: info.data,\r\n source: this.getSource()\r\n };\r\n }\r\n\r\n protected getSource(): string | undefined {\r\n return this.metadata.languageId;\r\n }\r\n}\r\n\r\nexport function getDiagnosticRange(info: DiagnosticInfo): Range {\r\n if (info.range) {\r\n return info.range;\r\n }\r\n let cstNode: CstNode | undefined;\r\n if (typeof info.property === 'string') {\r\n cstNode = findNodeForProperty(info.node.$cstNode, info.property, info.index);\r\n } else if (typeof info.keyword === 'string') {\r\n cstNode = findNodeForKeyword(info.node.$cstNode, info.keyword, info.index);\r\n }\r\n cstNode ??= info.node.$cstNode;\r\n if (!cstNode) {\r\n return {\r\n start: { line: 0, character: 0 },\r\n end: { line: 0, character: 0 }\r\n };\r\n }\r\n return cstNode.range;\r\n}\r\n\r\n/**\r\n * Transforms the diagnostic severity from the {@link LexingDiagnosticSeverity} format to LSP's `DiagnosticSeverity` format.\r\n *\r\n * @param severity The lexing diagnostic severity\r\n * @returns Diagnostic severity according to `vscode-languageserver-types/lib/esm/main.js#DiagnosticSeverity`\r\n */\r\nexport function toDiagnosticSeverity(severity: LexingDiagnosticSeverity): DiagnosticSeverity {\r\n switch (severity) {\r\n case 'error':\r\n return 1 satisfies typeof DiagnosticSeverity.Error;\r\n case 'warning':\r\n return 2 satisfies typeof DiagnosticSeverity.Warning;\r\n case 'info':\r\n return 3 satisfies typeof DiagnosticSeverity.Information;\r\n case 'hint':\r\n return 4 satisfies typeof DiagnosticSeverity.Hint;\r\n default:\r\n throw new Error('Invalid diagnostic severity: ' + severity);\r\n }\r\n}\r\n\r\nexport function toDiagnosticData(severity: LexingDiagnosticSeverity): DiagnosticData {\r\n switch (severity) {\r\n case 'error':\r\n return diagnosticData(DocumentValidator.LexingError);\r\n case 'warning':\r\n return diagnosticData(DocumentValidator.LexingWarning);\r\n case 'info':\r\n return diagnosticData(DocumentValidator.LexingInfo);\r\n case 'hint':\r\n return diagnosticData(DocumentValidator.LexingHint);\r\n default:\r\n throw new Error('Invalid diagnostic severity: ' + severity);\r\n }\r\n}\r\n\r\nexport namespace DocumentValidator {\r\n export const LexingError = 'lexing-error';\r\n export const LexingWarning = 'lexing-warning';\r\n export const LexingInfo = 'lexing-info';\r\n export const LexingHint = 'lexing-hint';\r\n export const ParsingError = 'parsing-error';\r\n export const LinkingError = 'linking-error';\r\n}\r\n\r\nexport interface LinkingErrorData extends DiagnosticData {\r\n containerType: string\r\n property: string\r\n refText: string\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { URI } from '../utils/uri-utils.js';\r\nimport type { NameProvider } from '../references/name-provider.js';\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode, AstNodeDescription, ReferenceInfo } from '../syntax-tree.js';\r\nimport type { AstNodeLocator } from './ast-node-locator.js';\r\nimport type { DocumentSegment, LangiumDocument } from './documents.js';\r\nimport { CancellationToken } from '../utils/cancellation.js';\r\nimport { isLinkingError } from '../syntax-tree.js';\r\nimport { getDocument, streamAst, streamReferences } from '../utils/ast-utils.js';\r\nimport { toDocumentSegment } from '../utils/cst-utils.js';\r\nimport { interruptAndCheck } from '../utils/promise-utils.js';\r\nimport { UriUtils } from '../utils/uri-utils.js';\r\n\r\n/**\r\n * Language-specific service for creating descriptions of AST nodes to be used for cross-reference resolutions.\r\n */\r\nexport interface AstNodeDescriptionProvider {\r\n\r\n /**\r\n * Create a description for the given AST node. This service method is typically used while indexing\r\n * the contents of a document and during scope computation.\r\n *\r\n * @param node An AST node.\r\n * @param name The name to be used to refer to the AST node. By default, this is determined by the\r\n * `NameProvider` service, but alternative names may be provided according to the semantics\r\n * of your language.\r\n * @param document The document containing the AST node. If omitted, it is taken from the root AST node.\r\n */\r\n createDescription(node: AstNode, name: string | undefined, document?: LangiumDocument): AstNodeDescription;\r\n\r\n}\r\n\r\nexport class DefaultAstNodeDescriptionProvider implements AstNodeDescriptionProvider {\r\n\r\n protected readonly astNodeLocator: AstNodeLocator;\r\n protected readonly nameProvider: NameProvider;\r\n\r\n constructor(services: LangiumCoreServices) {\r\n this.astNodeLocator = services.workspace.AstNodeLocator;\r\n this.nameProvider = services.references.NameProvider;\r\n }\r\n\r\n createDescription(node: AstNode, name: string | undefined, document?: LangiumDocument): AstNodeDescription {\r\n const doc = document ?? getDocument(node);\r\n name ??= this.nameProvider.getName(node);\r\n const path = this.astNodeLocator.getAstNodePath(node);\r\n if (!name) {\r\n throw new Error(`Node at path ${path} has no name.`);\r\n }\r\n let nameNodeSegment: DocumentSegment | undefined;\r\n const nameSegmentGetter = () => nameNodeSegment ??= toDocumentSegment(this.nameProvider.getNameNode(node) ?? node.$cstNode);\r\n return {\r\n node,\r\n name,\r\n get nameSegment() {\r\n return nameSegmentGetter();\r\n },\r\n selectionSegment: toDocumentSegment(node.$cstNode),\r\n type: node.$type,\r\n documentUri: doc.uri,\r\n path\r\n };\r\n }\r\n\r\n}\r\n\r\n/**\r\n * Describes a cross-reference within a document or between two documents.\r\n */\r\nexport interface ReferenceDescription {\r\n /** URI of the document that holds a reference */\r\n sourceUri: URI\r\n /** Path to AstNode that holds a reference */\r\n sourcePath: string\r\n /** Target document uri */\r\n targetUri: URI\r\n /** Path to the target AstNode inside the document */\r\n targetPath: string\r\n /** Segment of the reference text. */\r\n segment: DocumentSegment\r\n /** Marks a local reference i.e. a cross reference inside a document. */\r\n local?: boolean\r\n}\r\n\r\n/**\r\n * Language-specific service to create descriptions of all cross-references in a document. These are used by the `IndexManager`\r\n * to determine which documents are affected and should be rebuilt when a document is changed.\r\n */\r\nexport interface ReferenceDescriptionProvider {\r\n /**\r\n * Create descriptions of all cross-references found in the given document. These descriptions are\r\n * gathered by the `IndexManager` and stored in the global index so they can be considered when\r\n * a document change is reported by the client.\r\n *\r\n * @param document The document in which to gather cross-references.\r\n * @param cancelToken Indicates when to cancel the current operation.\r\n * @throws `OperationCanceled` if a user action occurs during execution\r\n */\r\n createDescriptions(document: LangiumDocument, cancelToken?: CancellationToken): Promise;\r\n}\r\n\r\nexport class DefaultReferenceDescriptionProvider implements ReferenceDescriptionProvider {\r\n\r\n protected readonly nodeLocator: AstNodeLocator;\r\n\r\n constructor(services: LangiumCoreServices) {\r\n this.nodeLocator = services.workspace.AstNodeLocator;\r\n }\r\n\r\n async createDescriptions(document: LangiumDocument, cancelToken = CancellationToken.None): Promise {\r\n const descr: ReferenceDescription[] = [];\r\n const rootNode = document.parseResult.value;\r\n for (const astNode of streamAst(rootNode)) {\r\n await interruptAndCheck(cancelToken);\r\n streamReferences(astNode).filter(refInfo => !isLinkingError(refInfo)).forEach(refInfo => {\r\n // TODO: Consider logging a warning or throw an exception when DocumentState is < than Linked\r\n const description = this.createDescription(refInfo);\r\n if (description) {\r\n descr.push(description);\r\n }\r\n });\r\n }\r\n return descr;\r\n }\r\n\r\n protected createDescription(refInfo: ReferenceInfo): ReferenceDescription | undefined {\r\n const targetNodeDescr = refInfo.reference.$nodeDescription;\r\n const refCstNode = refInfo.reference.$refNode;\r\n if (!targetNodeDescr || !refCstNode) {\r\n return undefined;\r\n }\r\n const docUri = getDocument(refInfo.container).uri;\r\n return {\r\n sourceUri: docUri,\r\n sourcePath: this.nodeLocator.getAstNodePath(refInfo.container),\r\n targetUri: targetNodeDescr.documentUri,\r\n targetPath: targetNodeDescr.path,\r\n segment: toDocumentSegment(refCstNode),\r\n local: UriUtils.equals(targetNodeDescr.documentUri, docUri)\r\n };\r\n }\r\n\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { AstNode } from '../syntax-tree.js';\r\n\r\n/**\r\n * Language-specific service for locating an `AstNode` in a document.\r\n */\r\nexport interface AstNodeLocator {\r\n\r\n /**\r\n * Creates a path represented by a `string` that identifies an `AstNode` inside its document.\r\n * It must be possible to retrieve exactly the same `AstNode` from the document using this path.\r\n *\r\n * @param node The `AstNode` for which to create the path.\r\n * @returns a path represented by a `string` that identifies `node` inside its document.\r\n * @see AstNodeLocator.getAstNode\r\n */\r\n getAstNodePath(node: AstNode): string;\r\n\r\n /**\r\n * Locates an `AstNode` inside another node by following the given path.\r\n *\r\n * @param node Parent element.\r\n * @param path Describes how to locate the `AstNode` inside the given `node`.\r\n * @returns The `AstNode` located under the given path, or `undefined` if the path cannot be resolved.\r\n * @see AstNodeLocator.getAstNodePath\r\n */\r\n getAstNode(node: AstNode, path: string): T | undefined;\r\n\r\n}\r\n\r\nexport class DefaultAstNodeLocator implements AstNodeLocator {\r\n protected segmentSeparator = '/';\r\n protected indexSeparator = '@';\r\n\r\n getAstNodePath(node: AstNode): string {\r\n if (node.$container) {\r\n const containerPath = this.getAstNodePath(node.$container);\r\n const newSegment = this.getPathSegment(node);\r\n const nodePath = containerPath + this.segmentSeparator + newSegment;\r\n return nodePath;\r\n }\r\n return '';\r\n }\r\n\r\n protected getPathSegment({ $containerProperty, $containerIndex }: AstNode): string {\r\n if (!$containerProperty) {\r\n throw new Error(\"Missing '$containerProperty' in AST node.\");\r\n }\r\n if ($containerIndex !== undefined) {\r\n return $containerProperty + this.indexSeparator + $containerIndex;\r\n }\r\n return $containerProperty;\r\n }\r\n\r\n getAstNode(node: AstNode, path: string): T | undefined {\r\n const segments = path.split(this.segmentSeparator);\r\n return segments.reduce((previousValue, currentValue) => {\r\n if (!previousValue || currentValue.length === 0) {\r\n return previousValue;\r\n }\r\n const propertyIndex = currentValue.indexOf(this.indexSeparator);\r\n if (propertyIndex > 0) {\r\n const property = currentValue.substring(0, propertyIndex);\r\n const arrayIndex = parseInt(currentValue.substring(propertyIndex + 1));\r\n const array = (previousValue as unknown as Record)[property];\r\n return array?.[arrayIndex];\r\n }\r\n return (previousValue as unknown as Record)[currentValue];\r\n }, node) as T;\r\n }\r\n\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2024 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\n// eslint-disable-next-line no-restricted-imports\r\nexport * from 'vscode-jsonrpc/lib/common/events.js';\r\n", "/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport { Emitter } from '../utils/event.js';\r\nimport type {\r\n ConfigurationItem,\r\n DidChangeConfigurationParams,\r\n DidChangeConfigurationRegistrationOptions,\r\n Disposable,\r\n Event,\r\n InitializeParams,\r\n InitializedParams\r\n} from 'vscode-languageserver-protocol';\r\nimport type { ServiceRegistry } from '../service-registry.js';\r\nimport type { LangiumSharedCoreServices } from '../services.js';\r\nimport { Deferred } from '../utils/promise-utils.js';\r\n\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\nexport interface ConfigurationProvider {\r\n\r\n /**\r\n * A promise that resolves when the configuration provider is ready to be used.\r\n */\r\n readonly ready: Promise;\r\n\r\n /**\r\n * When used in a language server context, this method is called when the server receives\r\n * the `initialize` request.\r\n */\r\n initialize(params: InitializeParams): void;\r\n\r\n /**\r\n * When used in a language server context, this method is called when the server receives\r\n * the `initialized` notification.\r\n */\r\n initialized(params: ConfigurationInitializedParams): Promise;\r\n\r\n /**\r\n * Returns a configuration value stored for the given language.\r\n *\r\n * @param language The language id\r\n * @param configuration Configuration name\r\n */\r\n getConfiguration(language: string, configuration: string): Promise;\r\n\r\n /**\r\n * Updates the cached configurations using the `change` notification parameters.\r\n *\r\n * @param change The parameters of a change configuration notification.\r\n * `settings` property of the change object could be expressed as `Record>`\r\n */\r\n updateConfiguration(change: DidChangeConfigurationParams): void;\r\n\r\n /**\r\n * Get notified after a configuration section has been updated.\r\n */\r\n onConfigurationSectionUpdate(callback: ConfigurationSectionUpdateListener): Disposable\r\n}\r\n\r\nexport interface ConfigurationInitializedParams extends InitializedParams {\r\n register?: (params: DidChangeConfigurationRegistrationOptions) => void,\r\n fetchConfiguration?: (configuration: ConfigurationItem[]) => Promise\r\n}\r\n\r\nexport interface ConfigurationSectionUpdate {\r\n /**\r\n * The name of the configuration section that has been updated.\r\n */\r\n section: string;\r\n\r\n /**\r\n * The updated configuration section.\r\n */\r\n configuration: any;\r\n}\r\n\r\nexport type ConfigurationSectionUpdateListener = (update: ConfigurationSectionUpdate) => void;\r\n\r\n/**\r\n * Base configuration provider for building up other configuration providers\r\n */\r\nexport class DefaultConfigurationProvider implements ConfigurationProvider {\r\n\r\n protected readonly serviceRegistry: ServiceRegistry;\r\n protected readonly _ready = new Deferred();\r\n protected settings: Record> = {};\r\n protected workspaceConfig = false;\r\n protected onConfigurationSectionUpdateEmitter = new Emitter();\r\n\r\n constructor(services: LangiumSharedCoreServices) {\r\n this.serviceRegistry = services.ServiceRegistry;\r\n }\r\n\r\n get ready(): Promise {\r\n return this._ready.promise;\r\n }\r\n\r\n initialize(params: InitializeParams): void {\r\n this.workspaceConfig = params.capabilities.workspace?.configuration ?? false;\r\n }\r\n\r\n async initialized(params: ConfigurationInitializedParams): Promise {\r\n if (this.workspaceConfig) {\r\n if (params.register) {\r\n // params.register(...) is a function to be provided by the calling language server for the sake of\r\n // decoupling this implementation from the concrete LSP implementations, specifically the LSP Connection\r\n\r\n const languages = this.serviceRegistry.all;\r\n params.register({\r\n // Listen to configuration changes for all languages\r\n section: languages.map(lang => this.toSectionName(lang.LanguageMetaData.languageId))\r\n });\r\n }\r\n\r\n if (params.fetchConfiguration) {\r\n // params.fetchConfiguration(...) is a function to be provided by the calling language server for the sake of\r\n // decoupling this implementation from the concrete LSP implementations, specifically the LSP Connection\r\n const configToUpdate = this.serviceRegistry.all.map(lang => {\r\n // Fetch the configuration changes for all languages\r\n section: this.toSectionName(lang.LanguageMetaData.languageId)\r\n });\r\n\r\n // get workspace configurations (default scope URI)\r\n const configs = await params.fetchConfiguration(configToUpdate);\r\n configToUpdate.forEach((conf, idx) => {\r\n this.updateSectionConfiguration(conf.section!, configs[idx]);\r\n });\r\n }\r\n }\r\n this._ready.resolve();\r\n }\r\n\r\n /**\r\n * Updates the cached configurations using the `change` notification parameters.\r\n *\r\n * @param change The parameters of a change configuration notification.\r\n * `settings` property of the change object could be expressed as `Record>`\r\n */\r\n updateConfiguration(change: DidChangeConfigurationParams): void {\r\n if (!change.settings) {\r\n return;\r\n }\r\n Object.keys(change.settings).forEach(section => {\r\n const configuration = change.settings[section];\r\n this.updateSectionConfiguration(section, configuration);\r\n this.onConfigurationSectionUpdateEmitter.fire({ section, configuration });\r\n });\r\n }\r\n\r\n protected updateSectionConfiguration(section: string, configuration: any): void {\r\n this.settings[section] = configuration;\r\n }\r\n\r\n /**\r\n * Returns a configuration value stored for the given language.\r\n *\r\n * @param language The language id\r\n * @param configuration Configuration name\r\n */\r\n async getConfiguration(language: string, configuration: string): Promise {\r\n await this.ready;\r\n\r\n const sectionName = this.toSectionName(language);\r\n if (this.settings[sectionName]) {\r\n return this.settings[sectionName][configuration];\r\n }\r\n }\r\n\r\n protected toSectionName(languageId: string): string {\r\n return `${languageId}`;\r\n }\r\n\r\n get onConfigurationSectionUpdate(): Event {\r\n return this.onConfigurationSectionUpdateEmitter.event;\r\n }\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nexport interface Disposable {\r\n /**\r\n * Dispose this object.\r\n */\r\n dispose(): void;\r\n}\r\n\r\nexport interface AsyncDisposable {\r\n /**\r\n * Dispose this object.\r\n */\r\n dispose(): Promise;\r\n}\r\n\r\nexport namespace Disposable {\r\n export function create(callback: () => Promise): AsyncDisposable;\r\n export function create(callback: () => void): Disposable;\r\n export function create(callback: () => void | Promise): Disposable | AsyncDisposable {\r\n return {\r\n dispose: async () => await callback()\r\n };\r\n }\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport { CancellationToken } from '../utils/cancellation.js';\r\nimport { Disposable } from '../utils/disposable.js';\r\nimport type { ServiceRegistry } from '../service-registry.js';\r\nimport type { LangiumSharedCoreServices } from '../services.js';\r\nimport type { AstNode } from '../syntax-tree.js';\r\nimport type { MaybePromise } from '../utils/promise-utils.js';\r\nimport type { Deferred } from '../utils/promise-utils.js';\r\nimport type { ValidationOptions } from '../validation/document-validator.js';\r\nimport type { IndexManager } from '../workspace/index-manager.js';\r\nimport type { LangiumDocument, LangiumDocuments, LangiumDocumentFactory, TextDocumentProvider } from './documents.js';\r\nimport { MultiMap } from '../utils/collections.js';\r\nimport { OperationCancelled, interruptAndCheck, isOperationCancelled } from '../utils/promise-utils.js';\r\nimport { stream } from '../utils/stream.js';\r\nimport type { URI } from '../utils/uri-utils.js';\r\nimport { ValidationCategory } from '../validation/validation-registry.js';\r\nimport { DocumentState } from './documents.js';\r\n\r\nexport interface BuildOptions {\r\n /**\r\n * Control the validation phase with this option:\r\n * - `true` enables all validation checks and forces revalidating the documents\r\n * - `false` or `undefined` disables all validation checks\r\n * - An object runs only the necessary validation checks; the `categories` property restricts this to a specific subset\r\n */\r\n validation?: boolean | ValidationOptions\r\n}\r\n\r\nexport interface DocumentBuildState {\r\n /** Whether a document has completed its last build process. */\r\n completed: boolean\r\n /** The options used for the last build process. */\r\n options: BuildOptions\r\n /** Additional information about the last build result. */\r\n result?: {\r\n validationChecks?: ValidationCategory[]\r\n }\r\n}\r\n\r\n/**\r\n * Shared-service for building and updating `LangiumDocument`s.\r\n */\r\nexport interface DocumentBuilder {\r\n\r\n /** The options used for rebuilding documents after an update. */\r\n updateBuildOptions: BuildOptions;\r\n\r\n /**\r\n * Execute all necessary build steps for the given documents.\r\n *\r\n * @param documents Set of documents to be built.\r\n * @param options Options for the document builder.\r\n * @param cancelToken Indicates when to cancel the current operation.\r\n * @throws `OperationCanceled` if a user action occurs during execution\r\n */\r\n build(documents: Array>, options?: BuildOptions, cancelToken?: CancellationToken): Promise;\r\n\r\n /**\r\n * This method is called when a document change is detected. It updates the state of all\r\n * affected documents, including those with references to the changed ones, so they are rebuilt.\r\n *\r\n * @param changed URIs of changed or created documents\r\n * @param deleted URIs of deleted documents\r\n * @param cancelToken allows to cancel the current operation\r\n * @throws `OperationCancelled` if cancellation is detected during execution\r\n */\r\n update(changed: URI[], deleted: URI[], cancelToken?: CancellationToken): Promise;\r\n\r\n /**\r\n * Notify the given callback when a document update was triggered, but before any document\r\n * is rebuilt. Listeners to this event should not perform any long-running task.\r\n */\r\n onUpdate(callback: DocumentUpdateListener): Disposable;\r\n\r\n /**\r\n * Notify the given callback when a set of documents has been built reaching the specified target state.\r\n */\r\n onBuildPhase(targetState: DocumentState, callback: DocumentBuildListener): Disposable;\r\n\r\n /**\r\n * Notify the specified callback when a document has been built reaching the specified target state.\r\n * Unlike {@link onBuildPhase} the listener is called for every single document.\r\n *\r\n * There are two main advantages compared to {@link onBuildPhase}:\r\n * 1. If the build is cancelled, {@link onDocumentPhase} will still fire for documents that have reached a specific state.\r\n * Meanwhile, {@link onBuildPhase} won't fire for that state.\r\n * 2. The {@link DocumentBuilder} ensures that all {@link DocumentPhaseListener} instances are called for a built document.\r\n * Even if the build is cancelled before those listeners were called.\r\n */\r\n onDocumentPhase(targetState: DocumentState, callback: DocumentPhaseListener): Disposable;\r\n\r\n /**\r\n * Wait until the workspace has reached the specified state for all documents.\r\n *\r\n * @param state The desired state. The promise won't resolve until all documents have reached this state\r\n * @param cancelToken Optionally allows to cancel the wait operation, disposing any listeners in the process\r\n * @throws `OperationCancelled` if cancellation has been requested before the state has been reached\r\n */\r\n waitUntil(state: DocumentState, cancelToken?: CancellationToken): Promise;\r\n\r\n /**\r\n * Wait until the document specified by the {@link uri} has reached the specified state.\r\n *\r\n * @param state The desired state. The promise won't resolve until the document has reached this state.\r\n * @param uri The specified URI that points to the document. If the URI does not exist, the promise will resolve once the workspace has reached the specified state.\r\n * @param cancelToken Optionally allows to cancel the wait operation, disposing any listeners in the process.\r\n * @return The URI of the document that has reached the desired state, or `undefined` if the document does not exist.\r\n * @throws `OperationCancelled` if cancellation has been requested before the state has been reached\r\n */\r\n waitUntil(state: DocumentState, uri?: URI, cancelToken?: CancellationToken): Promise;\r\n}\r\n\r\nexport type DocumentUpdateListener = (changed: URI[], deleted: URI[]) => void | Promise\r\nexport type DocumentBuildListener = (built: LangiumDocument[], cancelToken: CancellationToken) => void | Promise\r\nexport type DocumentPhaseListener = (built: LangiumDocument, cancelToken: CancellationToken) => void | Promise\r\nexport class DefaultDocumentBuilder implements DocumentBuilder {\r\n\r\n updateBuildOptions: BuildOptions = {\r\n // Default: run only the built-in validation checks and those in the _fast_ category (includes those without category)\r\n validation: {\r\n categories: ['built-in', 'fast']\r\n }\r\n };\r\n\r\n protected readonly langiumDocuments: LangiumDocuments;\r\n protected readonly langiumDocumentFactory: LangiumDocumentFactory;\r\n protected readonly textDocuments: TextDocumentProvider | undefined;\r\n protected readonly indexManager: IndexManager;\r\n protected readonly serviceRegistry: ServiceRegistry;\r\n protected readonly updateListeners: DocumentUpdateListener[] = [];\r\n protected readonly buildPhaseListeners = new MultiMap();\r\n protected readonly documentPhaseListeners = new MultiMap();\r\n protected readonly buildState = new Map();\r\n protected readonly documentBuildWaiters = new Map>();\r\n protected currentState = DocumentState.Changed;\r\n\r\n constructor(services: LangiumSharedCoreServices) {\r\n this.langiumDocuments = services.workspace.LangiumDocuments;\r\n this.langiumDocumentFactory = services.workspace.LangiumDocumentFactory;\r\n this.textDocuments = services.workspace.TextDocuments;\r\n this.indexManager = services.workspace.IndexManager;\r\n this.serviceRegistry = services.ServiceRegistry;\r\n }\r\n\r\n async build(documents: Array>, options: BuildOptions = {}, cancelToken = CancellationToken.None): Promise {\r\n for (const document of documents) {\r\n const key = document.uri.toString();\r\n if (document.state === DocumentState.Validated) {\r\n if (typeof options.validation === 'boolean' && options.validation) {\r\n // Force re-running all validation checks\r\n document.state = DocumentState.IndexedReferences;\r\n document.diagnostics = undefined;\r\n this.buildState.delete(key);\r\n } else if (typeof options.validation === 'object') {\r\n const buildState = this.buildState.get(key);\r\n const previousCategories = buildState?.result?.validationChecks;\r\n if (previousCategories) {\r\n // Validation with explicit options was requested for a document that has already been partly validated.\r\n // In this case, we need to merge the previous validation categories with the new ones.\r\n const newCategories = options.validation.categories ?? ValidationCategory.all as ValidationCategory[];\r\n const categories = newCategories.filter(c => !previousCategories.includes(c));\r\n if (categories.length > 0) {\r\n this.buildState.set(key, {\r\n completed: false,\r\n options: {\r\n validation: {\r\n ...options.validation,\r\n categories\r\n }\r\n },\r\n result: buildState.result\r\n });\r\n document.state = DocumentState.IndexedReferences;\r\n }\r\n }\r\n }\r\n } else {\r\n // Default: forget any previous build options\r\n this.buildState.delete(key);\r\n }\r\n }\r\n this.currentState = DocumentState.Changed;\r\n await this.emitUpdate(documents.map(e => e.uri), []);\r\n await this.buildDocuments(documents, options, cancelToken);\r\n }\r\n\r\n async update(changed: URI[], deleted: URI[], cancelToken = CancellationToken.None): Promise {\r\n this.currentState = DocumentState.Changed;\r\n // Remove all metadata of documents that are reported as deleted\r\n for (const deletedUri of deleted) {\r\n this.langiumDocuments.deleteDocument(deletedUri);\r\n this.buildState.delete(deletedUri.toString());\r\n this.indexManager.remove(deletedUri);\r\n }\r\n // Set the state of all changed documents to `Changed` so they are completely rebuilt\r\n for (const changedUri of changed) {\r\n const invalidated = this.langiumDocuments.invalidateDocument(changedUri);\r\n if (!invalidated) {\r\n // We create an unparsed, invalid document.\r\n // This will be parsed as soon as we reach the first document builder phase.\r\n // This allows to cancel the parsing process later in case we need it.\r\n const newDocument = this.langiumDocumentFactory.fromModel({ $type: 'INVALID' }, changedUri);\r\n newDocument.state = DocumentState.Changed;\r\n this.langiumDocuments.addDocument(newDocument);\r\n }\r\n this.buildState.delete(changedUri.toString());\r\n }\r\n // Set the state of all documents that should be relinked to `ComputedScopes` (if not already lower)\r\n const allChangedUris = stream(changed).concat(deleted).map(uri => uri.toString()).toSet();\r\n this.langiumDocuments.all\r\n .filter(doc => !allChangedUris.has(doc.uri.toString()) && this.shouldRelink(doc, allChangedUris))\r\n .forEach(doc => {\r\n const linker = this.serviceRegistry.getServices(doc.uri).references.Linker;\r\n linker.unlink(doc);\r\n doc.state = Math.min(doc.state, DocumentState.ComputedScopes);\r\n doc.diagnostics = undefined;\r\n });\r\n // Notify listeners of the update\r\n await this.emitUpdate(changed, deleted);\r\n // Only allow interrupting the execution after all state changes are done\r\n await interruptAndCheck(cancelToken);\r\n\r\n // Collect and sort all documents that we should rebuild\r\n const rebuildDocuments = this.sortDocuments(\r\n this.langiumDocuments.all\r\n .filter(doc =>\r\n // This includes those that were reported as changed and those that we selected for relinking\r\n doc.state < DocumentState.Linked\r\n // This includes those for which a previous build has been cancelled\r\n || !this.buildState.get(doc.uri.toString())?.completed\r\n )\r\n .toArray()\r\n );\r\n await this.buildDocuments(rebuildDocuments, this.updateBuildOptions, cancelToken);\r\n }\r\n\r\n protected async emitUpdate(changed: URI[], deleted: URI[]): Promise {\r\n await Promise.all(this.updateListeners.map(listener => listener(changed, deleted)));\r\n }\r\n\r\n /**\r\n * Sort the given documents by priority. By default, documents with an open text document are prioritized.\r\n * This is useful to ensure that visible documents show their diagnostics before all other documents.\r\n *\r\n * This improves the responsiveness in large workspaces as users usually don't care about diagnostics\r\n * in files that are currently not opened in the editor.\r\n */\r\n protected sortDocuments(documents: LangiumDocument[]): LangiumDocument[] {\r\n let left = 0;\r\n let right = documents.length - 1;\r\n\r\n while (left < right) {\r\n while (left < documents.length && this.hasTextDocument(documents[left])) {\r\n left++;\r\n }\r\n\r\n while (right >= 0 && !this.hasTextDocument(documents[right])) {\r\n right--;\r\n }\r\n\r\n if (left < right) {\r\n [documents[left], documents[right]] = [documents[right], documents[left]];\r\n }\r\n }\r\n\r\n return documents;\r\n }\r\n\r\n private hasTextDocument(doc: LangiumDocument): boolean {\r\n return Boolean(this.textDocuments?.get(doc.uri));\r\n }\r\n\r\n /**\r\n * Check whether the given document should be relinked after changes were found in the given URIs.\r\n */\r\n protected shouldRelink(document: LangiumDocument, changedUris: Set): boolean {\r\n // Relink documents with linking errors -- maybe those references can be resolved now\r\n if (document.references.some(ref => ref.error !== undefined)) {\r\n return true;\r\n }\r\n // Check whether the document is affected by any of the changed URIs\r\n return this.indexManager.isAffected(document, changedUris);\r\n }\r\n\r\n onUpdate(callback: DocumentUpdateListener): Disposable {\r\n this.updateListeners.push(callback);\r\n return Disposable.create(() => {\r\n const index = this.updateListeners.indexOf(callback);\r\n if (index >= 0) {\r\n this.updateListeners.splice(index, 1);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Build the given documents by stepping through all build phases. If a document's state indicates\r\n * that a certain build phase is already done, the phase is skipped for that document.\r\n *\r\n * @param documents The documents to build.\r\n * @param options the {@link BuildOptions} to use.\r\n * @param cancelToken A cancellation token that can be used to cancel the build.\r\n * @returns A promise that resolves when the build is done.\r\n */\r\n protected async buildDocuments(documents: LangiumDocument[], options: BuildOptions, cancelToken: CancellationToken): Promise {\r\n this.prepareBuild(documents, options);\r\n // 0. Parse content\r\n await this.runCancelable(documents, DocumentState.Parsed, cancelToken, doc =>\r\n this.langiumDocumentFactory.update(doc, cancelToken)\r\n );\r\n // 1. Index content\r\n await this.runCancelable(documents, DocumentState.IndexedContent, cancelToken, doc =>\r\n this.indexManager.updateContent(doc, cancelToken)\r\n );\r\n // 2. Compute scopes\r\n await this.runCancelable(documents, DocumentState.ComputedScopes, cancelToken, async doc => {\r\n const scopeComputation = this.serviceRegistry.getServices(doc.uri).references.ScopeComputation;\r\n doc.precomputedScopes = await scopeComputation.computeLocalScopes(doc, cancelToken);\r\n });\r\n // 3. Linking\r\n await this.runCancelable(documents, DocumentState.Linked, cancelToken, doc => {\r\n const linker = this.serviceRegistry.getServices(doc.uri).references.Linker;\r\n return linker.link(doc, cancelToken);\r\n });\r\n // 4. Index references\r\n await this.runCancelable(documents, DocumentState.IndexedReferences, cancelToken, doc =>\r\n this.indexManager.updateReferences(doc, cancelToken)\r\n );\r\n // 5. Validation\r\n const toBeValidated = documents.filter(doc => this.shouldValidate(doc));\r\n await this.runCancelable(toBeValidated, DocumentState.Validated, cancelToken, doc =>\r\n this.validate(doc, cancelToken)\r\n );\r\n\r\n // If we've made it to this point without being cancelled, we can mark the build state as completed.\r\n for (const doc of documents) {\r\n const state = this.buildState.get(doc.uri.toString());\r\n if (state) {\r\n state.completed = true;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Runs prior to beginning the build process to update the {@link DocumentBuildState} for each document\r\n *\r\n * @param documents collection of documents to be built\r\n * @param options the {@link BuildOptions} to use\r\n */\r\n protected prepareBuild(documents: LangiumDocument[], options: BuildOptions): void {\r\n for (const doc of documents) {\r\n const key = doc.uri.toString();\r\n const state = this.buildState.get(key);\r\n // If the document has no previous build state, we set it. If it has one, but it's already marked\r\n // as completed, we overwrite it. If the previous build was not completed, we keep its state\r\n // and continue where it was cancelled.\r\n if (!state || state.completed) {\r\n this.buildState.set(key, {\r\n completed: false,\r\n options,\r\n result: state?.result\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Runs a cancelable operation on a set of documents to bring them to a specified {@link DocumentState}.\r\n *\r\n * @param documents The array of documents to process.\r\n * @param targetState The target {@link DocumentState} to bring the documents to.\r\n * @param cancelToken A token that can be used to cancel the operation.\r\n * @param callback A function to be called for each document.\r\n * @returns A promise that resolves when all documents have been processed or the operation is canceled.\r\n * @throws Will throw `OperationCancelled` if the operation is canceled via a `CancellationToken`.\r\n */\r\n protected async runCancelable(documents: LangiumDocument[], targetState: DocumentState, cancelToken: CancellationToken,\r\n callback: (document: LangiumDocument) => MaybePromise): Promise {\r\n const filtered = documents.filter(doc => doc.state < targetState);\r\n for (const document of filtered) {\r\n await interruptAndCheck(cancelToken);\r\n await callback(document);\r\n document.state = targetState;\r\n await this.notifyDocumentPhase(document, targetState, cancelToken);\r\n }\r\n\r\n // Do not use `filtered` here, as that will miss documents that have previously reached the current target state\r\n // For example, this happens in case the cancellation triggers between the processing of two documents\r\n // Or files that were picked up during the workspace initialization\r\n const targetStateDocs = documents.filter(doc => doc.state === targetState);\r\n await this.notifyBuildPhase(targetStateDocs, targetState, cancelToken);\r\n this.currentState = targetState;\r\n }\r\n\r\n onBuildPhase(targetState: DocumentState, callback: DocumentBuildListener): Disposable {\r\n this.buildPhaseListeners.add(targetState, callback);\r\n return Disposable.create(() => {\r\n this.buildPhaseListeners.delete(targetState, callback);\r\n });\r\n }\r\n\r\n onDocumentPhase(targetState: DocumentState, callback: DocumentPhaseListener): Disposable {\r\n this.documentPhaseListeners.add(targetState, callback);\r\n return Disposable.create(() => {\r\n this.documentPhaseListeners.delete(targetState, callback);\r\n });\r\n }\r\n\r\n waitUntil(state: DocumentState, cancelToken?: CancellationToken): Promise;\r\n waitUntil(state: DocumentState, uri?: URI, cancelToken?: CancellationToken): Promise;\r\n waitUntil(state: DocumentState, uriOrToken?: URI | CancellationToken, cancelToken?: CancellationToken): Promise {\r\n let uri: URI | undefined = undefined;\r\n if (uriOrToken && 'path' in uriOrToken) {\r\n uri = uriOrToken;\r\n } else {\r\n cancelToken = uriOrToken;\r\n }\r\n cancelToken ??= CancellationToken.None;\r\n if (uri) {\r\n const document = this.langiumDocuments.getDocument(uri);\r\n if (document && document.state > state) {\r\n return Promise.resolve(uri);\r\n }\r\n }\r\n if (this.currentState >= state) {\r\n return Promise.resolve(undefined);\r\n } else if (cancelToken.isCancellationRequested) {\r\n return Promise.reject(OperationCancelled);\r\n }\r\n return new Promise((resolve, reject) => {\r\n const buildDisposable = this.onBuildPhase(state, () => {\r\n buildDisposable.dispose();\r\n cancelDisposable.dispose();\r\n if (uri) {\r\n const document = this.langiumDocuments.getDocument(uri);\r\n resolve(document?.uri);\r\n } else {\r\n resolve(undefined);\r\n }\r\n });\r\n const cancelDisposable = cancelToken!.onCancellationRequested(() => {\r\n buildDisposable.dispose();\r\n cancelDisposable.dispose();\r\n reject(OperationCancelled);\r\n });\r\n });\r\n }\r\n\r\n protected async notifyDocumentPhase(document: LangiumDocument, state: DocumentState, cancelToken: CancellationToken): Promise {\r\n const listeners = this.documentPhaseListeners.get(state);\r\n const listenersCopy = listeners.slice();\r\n for (const listener of listenersCopy) {\r\n try {\r\n await listener(document, cancelToken);\r\n } catch (err) {\r\n // Ignore cancellation errors\r\n // We want to finish the listeners before throwing\r\n if (!isOperationCancelled(err)) {\r\n throw err;\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected async notifyBuildPhase(documents: LangiumDocument[], state: DocumentState, cancelToken: CancellationToken): Promise {\r\n if (documents.length === 0) {\r\n // Don't notify when no document has been processed\r\n return;\r\n }\r\n const listeners = this.buildPhaseListeners.get(state);\r\n const listenersCopy = listeners.slice();\r\n for (const listener of listenersCopy) {\r\n await interruptAndCheck(cancelToken);\r\n await listener(documents, cancelToken);\r\n }\r\n }\r\n\r\n /**\r\n * Determine whether the given document should be validated during a build. The default\r\n * implementation checks the `validation` property of the build options. If it's set to `true`\r\n * or a `ValidationOptions` object, the document is included in the validation phase.\r\n */\r\n protected shouldValidate(document: LangiumDocument): boolean {\r\n return Boolean(this.getBuildOptions(document).validation);\r\n }\r\n\r\n /**\r\n * Run validation checks on the given document and store the resulting diagnostics in the document.\r\n * If the document already contains diagnostics, the new ones are added to the list.\r\n */\r\n protected async validate(document: LangiumDocument, cancelToken: CancellationToken): Promise {\r\n const validator = this.serviceRegistry.getServices(document.uri).validation.DocumentValidator;\r\n const validationSetting = this.getBuildOptions(document).validation;\r\n const options = typeof validationSetting === 'object' ? validationSetting : undefined;\r\n const diagnostics = await validator.validateDocument(document, options, cancelToken);\r\n if (document.diagnostics) {\r\n document.diagnostics.push(...diagnostics);\r\n } else {\r\n document.diagnostics = diagnostics;\r\n }\r\n\r\n // Store information about the executed validation in the build state\r\n const state = this.buildState.get(document.uri.toString());\r\n if (state) {\r\n state.result ??= {};\r\n const newCategories = options?.categories ?? ValidationCategory.all;\r\n if (state.result.validationChecks) {\r\n state.result.validationChecks.push(...newCategories);\r\n } else {\r\n state.result.validationChecks = [...newCategories];\r\n }\r\n }\r\n }\r\n\r\n protected getBuildOptions(document: LangiumDocument): BuildOptions {\r\n return this.buildState.get(document.uri.toString())?.options ?? {};\r\n }\r\n\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { ServiceRegistry } from '../service-registry.js';\r\nimport type { LangiumSharedCoreServices } from '../services.js';\r\nimport type { AstNode, AstNodeDescription, AstReflection } from '../syntax-tree.js';\r\nimport { getDocument } from '../utils/ast-utils.js';\r\nimport { ContextCache } from '../utils/caching.js';\r\nimport { CancellationToken } from '../utils/cancellation.js';\r\nimport type { Stream } from '../utils/stream.js';\r\nimport { stream } from '../utils/stream.js';\r\nimport type { URI } from '../utils/uri-utils.js';\r\nimport { UriUtils } from '../utils/uri-utils.js';\r\nimport type { ReferenceDescription } from './ast-descriptions.js';\r\nimport type { LangiumDocument, LangiumDocuments } from './documents.js';\r\n\r\n/**\r\n * The index manager is responsible for keeping metadata about symbols and cross-references\r\n * in the workspace. It is used to look up symbols in the global scope, mostly during linking\r\n * and completion. This service is shared between all languages of a language server.\r\n */\r\nexport interface IndexManager {\r\n\r\n /**\r\n * Removes the specified document URI from the index.\r\n * Necessary when documents are deleted and not referenceable anymore.\r\n *\r\n * @param uri The URI of the document for which index data shall be removed\r\n */\r\n remove(uri: URI): void;\r\n\r\n /**\r\n * Updates the information about the exportable content of a document inside the index.\r\n *\r\n * @param document Document to be updated\r\n * @param cancelToken Indicates when to cancel the current operation.\r\n * @throws `OperationCanceled` if a user action occurs during execution\r\n */\r\n updateContent(document: LangiumDocument, cancelToken?: CancellationToken): Promise;\r\n\r\n /**\r\n * Updates the information about the cross-references of a document inside the index.\r\n *\r\n * @param document Document to be updated\r\n * @param cancelToken Indicates when to cancel the current operation.\r\n * @throws `OperationCanceled` if a user action occurs during execution\r\n */\r\n updateReferences(document: LangiumDocument, cancelToken?: CancellationToken): Promise;\r\n\r\n /**\r\n * Determine whether the given document could be affected by changes of the documents\r\n * identified by the given URIs (second parameter). The document is typically regarded as\r\n * affected if it contains a reference to any of the changed files.\r\n *\r\n * @param document Document to check whether it's affected\r\n * @param changedUris URIs of the changed documents\r\n */\r\n isAffected(document: LangiumDocument, changedUris: Set): boolean;\r\n\r\n /**\r\n * Compute a list of all exported elements, optionally filtered using a type identifier and document URIs.\r\n *\r\n * @param nodeType The type to filter with, or `undefined` to return descriptions of all types.\r\n * @param uris If specified, only returns elements from the given URIs.\r\n * @returns a `Stream` containing all globally visible nodes (of a given type).\r\n */\r\n allElements(nodeType?: string, uris?: Set): Stream;\r\n\r\n /**\r\n * Returns all known references that are pointing to the given `targetNode`.\r\n *\r\n * @param targetNode the `AstNode` to look up references for\r\n * @param astNodePath the path that points to the `targetNode` inside the document. See also `AstNodeLocator`\r\n *\r\n * @returns a `Stream` of references that are targeting the `targetNode`\r\n */\r\n findAllReferences(targetNode: AstNode, astNodePath: string): Stream;\r\n\r\n}\r\n\r\nexport class DefaultIndexManager implements IndexManager {\r\n\r\n protected readonly serviceRegistry: ServiceRegistry;\r\n protected readonly documents: LangiumDocuments;\r\n protected readonly astReflection: AstReflection;\r\n\r\n /**\r\n * The symbol index stores all `AstNodeDescription` items exported by a document.\r\n * The key used in this map is the string representation of the specific document URI.\r\n */\r\n protected readonly symbolIndex = new Map();\r\n /**\r\n * This is a cache for the `allElements()` method.\r\n * It caches the descriptions from `symbolIndex` grouped by types.\r\n */\r\n protected readonly symbolByTypeIndex = new ContextCache();\r\n /**\r\n * This index keeps track of all `ReferenceDescription` items exported by a document.\r\n * This is used to compute which elements are affected by a document change\r\n * and for finding references to an AST node.\r\n */\r\n protected readonly referenceIndex = new Map();\r\n\r\n constructor(services: LangiumSharedCoreServices) {\r\n this.documents = services.workspace.LangiumDocuments;\r\n this.serviceRegistry = services.ServiceRegistry;\r\n this.astReflection = services.AstReflection;\r\n }\r\n\r\n findAllReferences(targetNode: AstNode, astNodePath: string): Stream {\r\n const targetDocUri = getDocument(targetNode).uri;\r\n const result: ReferenceDescription[] = [];\r\n this.referenceIndex.forEach(docRefs => {\r\n docRefs.forEach(refDescr => {\r\n if (UriUtils.equals(refDescr.targetUri, targetDocUri) && refDescr.targetPath === astNodePath) {\r\n result.push(refDescr);\r\n }\r\n });\r\n });\r\n return stream(result);\r\n }\r\n\r\n allElements(nodeType?: string, uris?: Set): Stream {\r\n let documentUris = stream(this.symbolIndex.keys());\r\n if (uris) {\r\n documentUris = documentUris.filter(uri => !uris || uris.has(uri));\r\n }\r\n return documentUris\r\n .map(uri => this.getFileDescriptions(uri, nodeType))\r\n .flat();\r\n }\r\n\r\n protected getFileDescriptions(uri: string, nodeType?: string): AstNodeDescription[] {\r\n if (!nodeType) {\r\n return this.symbolIndex.get(uri) ?? [];\r\n }\r\n const descriptions = this.symbolByTypeIndex.get(uri, nodeType, () => {\r\n const allFileDescriptions = this.symbolIndex.get(uri) ?? [];\r\n return allFileDescriptions.filter(e => this.astReflection.isSubtype(e.type, nodeType));\r\n });\r\n return descriptions;\r\n }\r\n\r\n remove(uri: URI): void {\r\n const uriString = uri.toString();\r\n this.symbolIndex.delete(uriString);\r\n this.symbolByTypeIndex.clear(uriString);\r\n this.referenceIndex.delete(uriString);\r\n }\r\n\r\n async updateContent(document: LangiumDocument, cancelToken = CancellationToken.None): Promise {\r\n const services = this.serviceRegistry.getServices(document.uri);\r\n const exports = await services.references.ScopeComputation.computeExports(document, cancelToken);\r\n const uri = document.uri.toString();\r\n this.symbolIndex.set(uri, exports);\r\n this.symbolByTypeIndex.clear(uri);\r\n }\r\n\r\n async updateReferences(document: LangiumDocument, cancelToken = CancellationToken.None): Promise {\r\n const services = this.serviceRegistry.getServices(document.uri);\r\n const indexData = await services.workspace.ReferenceDescriptionProvider.createDescriptions(document, cancelToken);\r\n this.referenceIndex.set(document.uri.toString(), indexData);\r\n }\r\n\r\n isAffected(document: LangiumDocument, changedUris: Set): boolean {\r\n const references = this.referenceIndex.get(document.uri.toString());\r\n if (!references) {\r\n return false;\r\n }\r\n return references.some(ref => !ref.local && changedUris.has(ref.targetUri.toString()));\r\n }\r\n\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { InitializeParams, InitializedParams } from 'vscode-languageserver-protocol';\r\nimport type { WorkspaceFolder } from 'vscode-languageserver-types';\r\nimport type { ServiceRegistry } from '../service-registry.js';\r\nimport type { LangiumSharedCoreServices } from '../services.js';\r\nimport { CancellationToken } from '../utils/cancellation.js';\r\nimport { Deferred, interruptAndCheck } from '../utils/promise-utils.js';\r\nimport { URI, UriUtils } from '../utils/uri-utils.js';\r\nimport type { BuildOptions, DocumentBuilder } from './document-builder.js';\r\nimport type { LangiumDocument, LangiumDocuments } from './documents.js';\r\nimport type { FileSystemNode, FileSystemProvider } from './file-system-provider.js';\r\nimport type { WorkspaceLock } from './workspace-lock.js';\r\n\r\n// export type WorkspaceFolder from 'vscode-languageserver-types' for convenience,\r\n// is supposed to avoid confusion as 'WorkspaceFolder' might accidentally be imported via 'vscode-languageclient'\r\nexport type { WorkspaceFolder };\r\n\r\n/**\r\n * The workspace manager is responsible for finding source files in the workspace.\r\n * This service is shared between all languages of a language server.\r\n */\r\nexport interface WorkspaceManager {\r\n\r\n /** The options used for the initial workspace build. */\r\n initialBuildOptions: BuildOptions | undefined;\r\n\r\n /**\r\n * A promise that resolves when the workspace manager is ready to be used.\r\n * Use this to ensure that the workspace manager has finished its initialization.\r\n */\r\n readonly ready: Promise;\r\n\r\n /**\r\n * The workspace folders of the current workspace.\r\n * Available only after the `ready` promise resolves.\r\n */\r\n get workspaceFolders(): readonly WorkspaceFolder[] | undefined;\r\n\r\n /**\r\n * When used in a language server context, this method is called when the server receives\r\n * the `initialize` request.\r\n */\r\n initialize(params: InitializeParams): void;\r\n\r\n /**\r\n * When used in a language server context, this method is called when the server receives\r\n * the `initialized` notification.\r\n */\r\n initialized(params: InitializedParams): Promise;\r\n\r\n /**\r\n * Does the initial indexing of workspace folders.\r\n * Collects information about exported and referenced AstNodes in\r\n * each language file and stores it locally.\r\n *\r\n * @param folders The set of workspace folders to be indexed.\r\n * @param cancelToken A cancellation token that can be used to cancel the operation.\r\n *\r\n * @throws OperationCancelled if a cancellation event has been detected\r\n */\r\n initializeWorkspace(folders: WorkspaceFolder[], cancelToken?: CancellationToken): Promise;\r\n\r\n}\r\n\r\nexport class DefaultWorkspaceManager implements WorkspaceManager {\r\n\r\n initialBuildOptions: BuildOptions = {};\r\n\r\n protected readonly serviceRegistry: ServiceRegistry;\r\n protected readonly langiumDocuments: LangiumDocuments;\r\n protected readonly documentBuilder: DocumentBuilder;\r\n protected readonly fileSystemProvider: FileSystemProvider;\r\n protected readonly mutex: WorkspaceLock;\r\n protected readonly _ready = new Deferred();\r\n protected folders?: WorkspaceFolder[];\r\n\r\n constructor(services: LangiumSharedCoreServices) {\r\n this.serviceRegistry = services.ServiceRegistry;\r\n this.langiumDocuments = services.workspace.LangiumDocuments;\r\n this.documentBuilder = services.workspace.DocumentBuilder;\r\n this.fileSystemProvider = services.workspace.FileSystemProvider;\r\n this.mutex = services.workspace.WorkspaceLock;\r\n }\r\n\r\n get ready(): Promise {\r\n return this._ready.promise;\r\n }\r\n\r\n get workspaceFolders(): readonly WorkspaceFolder[] | undefined {\r\n return this.folders;\r\n }\r\n\r\n initialize(params: InitializeParams): void {\r\n this.folders = params.workspaceFolders ?? undefined;\r\n }\r\n\r\n initialized(_params: InitializedParams): Promise {\r\n // Initialize the workspace even if there are no workspace folders\r\n // We still want to load additional documents (language library or similar) during initialization\r\n return this.mutex.write(token => this.initializeWorkspace(this.folders ?? [], token));\r\n }\r\n\r\n async initializeWorkspace(folders: WorkspaceFolder[], cancelToken = CancellationToken.None): Promise {\r\n const documents = await this.performStartup(folders);\r\n // Only after creating all documents do we check whether we need to cancel the initialization\r\n // The document builder will later pick up on all unprocessed documents\r\n await interruptAndCheck(cancelToken);\r\n await this.documentBuilder.build(documents, this.initialBuildOptions, cancelToken);\r\n }\r\n\r\n /**\r\n * Performs the uninterruptable startup sequence of the workspace manager.\r\n * This methods loads all documents in the workspace and other documents and returns them.\r\n */\r\n protected async performStartup(folders: WorkspaceFolder[]): Promise {\r\n const fileExtensions = this.serviceRegistry.all.flatMap(e => e.LanguageMetaData.fileExtensions);\r\n const documents: LangiumDocument[] = [];\r\n const collector = (document: LangiumDocument) => {\r\n documents.push(document);\r\n if (!this.langiumDocuments.hasDocument(document.uri)) {\r\n this.langiumDocuments.addDocument(document);\r\n }\r\n };\r\n // Even though we don't await the initialization of the workspace manager,\r\n // we can still assume that all library documents and file documents are loaded by the time we start building documents.\r\n // The mutex prevents anything from performing a workspace build until we check the cancellation token\r\n await this.loadAdditionalDocuments(folders, collector);\r\n await Promise.all(\r\n folders.map(wf => [wf, this.getRootFolder(wf)] as [WorkspaceFolder, URI])\r\n .map(async entry => this.traverseFolder(...entry, fileExtensions, collector))\r\n );\r\n this._ready.resolve();\r\n return documents;\r\n }\r\n\r\n /**\r\n * Load all additional documents that shall be visible in the context of the given workspace\r\n * folders and add them to the collector. This can be used to include built-in libraries of\r\n * your language, which can be either loaded from provided files or constructed in memory.\r\n */\r\n protected loadAdditionalDocuments(_folders: WorkspaceFolder[], _collector: (document: LangiumDocument) => void): Promise {\r\n return Promise.resolve();\r\n }\r\n\r\n /**\r\n * Determine the root folder of the source documents in the given workspace folder.\r\n * The default implementation returns the URI of the workspace folder, but you can override\r\n * this to return a subfolder like `src` instead.\r\n */\r\n protected getRootFolder(workspaceFolder: WorkspaceFolder): URI {\r\n return URI.parse(workspaceFolder.uri);\r\n }\r\n\r\n /**\r\n * Traverse the file system folder identified by the given URI and its subfolders. All\r\n * contained files that match the file extensions are added to the collector.\r\n */\r\n protected async traverseFolder(workspaceFolder: WorkspaceFolder, folderPath: URI, fileExtensions: string[], collector: (document: LangiumDocument) => void): Promise {\r\n const content = await this.fileSystemProvider.readDirectory(folderPath);\r\n await Promise.all(content.map(async entry => {\r\n if (this.includeEntry(workspaceFolder, entry, fileExtensions)) {\r\n if (entry.isDirectory) {\r\n await this.traverseFolder(workspaceFolder, entry.uri, fileExtensions, collector);\r\n } else if (entry.isFile) {\r\n const document = await this.langiumDocuments.getOrCreateDocument(entry.uri);\r\n collector(document);\r\n }\r\n }\r\n }));\r\n }\r\n\r\n /**\r\n * Determine whether the given folder entry shall be included while indexing the workspace.\r\n */\r\n protected includeEntry(_workspaceFolder: WorkspaceFolder, entry: FileSystemNode, fileExtensions: string[]): boolean {\r\n const name = UriUtils.basename(entry.uri);\r\n if (name.startsWith('.')) {\r\n return false;\r\n }\r\n if (entry.isDirectory) {\r\n return name !== 'node_modules' && name !== 'out';\r\n } else if (entry.isFile) {\r\n const extname = UriUtils.extname(entry.uri);\r\n return fileExtensions.includes(extname);\r\n }\r\n return false;\r\n }\r\n\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { ILexerErrorMessageProvider, ILexingError, IMultiModeLexerDefinition, IToken, TokenType, TokenTypeDictionary, TokenVocabulary } from 'chevrotain';\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport { Lexer as ChevrotainLexer, defaultLexerErrorProvider } from 'chevrotain';\r\nimport type { LexingReport, TokenBuilder } from './token-builder.js';\r\n\r\nexport class DefaultLexerErrorMessageProvider implements ILexerErrorMessageProvider {\r\n\r\n buildUnexpectedCharactersMessage(fullText: string, startOffset: number, length: number, line?: number, column?: number): string {\r\n return defaultLexerErrorProvider.buildUnexpectedCharactersMessage(fullText, startOffset, length, line, column);\r\n }\r\n\r\n buildUnableToPopLexerModeMessage(token: IToken): string {\r\n return defaultLexerErrorProvider.buildUnableToPopLexerModeMessage(token);\r\n }\r\n}\r\n\r\nexport interface LexerResult {\r\n /**\r\n * A list of all tokens that were lexed from the input.\r\n *\r\n * Note that Langium requires the optional properties\r\n * `startLine`, `startColumn`, `endOffset`, `endLine` and `endColumn` to be set on each token.\r\n */\r\n tokens: IToken[];\r\n /**\r\n * Contains hidden tokens, usually comments.\r\n */\r\n hidden: IToken[];\r\n errors: ILexingError[];\r\n report?: LexingReport;\r\n}\r\n\r\nexport type TokenizeMode = 'full' | 'partial';\r\n\r\nexport interface TokenizeOptions {\r\n mode?: TokenizeMode;\r\n}\r\n\r\nexport const DEFAULT_TOKENIZE_OPTIONS: TokenizeOptions = { mode: 'full' };\r\n\r\nexport interface Lexer {\r\n readonly definition: TokenTypeDictionary;\r\n tokenize(text: string, options?: TokenizeOptions): LexerResult;\r\n}\r\n\r\nexport class DefaultLexer implements Lexer {\r\n\r\n protected readonly tokenBuilder: TokenBuilder;\r\n protected readonly errorMessageProvider: ILexerErrorMessageProvider;\r\n protected tokenTypes: TokenTypeDictionary;\r\n protected chevrotainLexer: ChevrotainLexer;\r\n\r\n constructor(services: LangiumCoreServices) {\r\n this.errorMessageProvider = services.parser.LexerErrorMessageProvider;\r\n this.tokenBuilder = services.parser.TokenBuilder;\r\n const tokens = this.tokenBuilder.buildTokens(services.Grammar, {\r\n caseInsensitive: services.LanguageMetaData.caseInsensitive\r\n });\r\n this.tokenTypes = this.toTokenTypeDictionary(tokens);\r\n const lexerTokens = isTokenTypeDictionary(tokens) ? Object.values(tokens) : tokens;\r\n const production = services.LanguageMetaData.mode === 'production';\r\n this.chevrotainLexer = new ChevrotainLexer(lexerTokens, {\r\n positionTracking: 'full',\r\n skipValidations: production,\r\n errorMessageProvider: this.errorMessageProvider\r\n });\r\n }\r\n\r\n get definition(): TokenTypeDictionary {\r\n return this.tokenTypes;\r\n }\r\n\r\n tokenize(text: string, _options: TokenizeOptions = DEFAULT_TOKENIZE_OPTIONS): LexerResult {\r\n const chevrotainResult = this.chevrotainLexer.tokenize(text);\r\n return {\r\n tokens: chevrotainResult.tokens,\r\n errors: chevrotainResult.errors,\r\n hidden: chevrotainResult.groups.hidden ?? [],\r\n report: this.tokenBuilder.flushLexingReport?.(text)\r\n };\r\n }\r\n\r\n protected toTokenTypeDictionary(buildTokens: TokenVocabulary): TokenTypeDictionary {\r\n if (isTokenTypeDictionary(buildTokens)) return buildTokens;\r\n const tokens = isIMultiModeLexerDefinition(buildTokens) ? Object.values(buildTokens.modes).flat() : buildTokens;\r\n const res: TokenTypeDictionary = {};\r\n tokens.forEach(token => res[token.name] = token);\r\n return res;\r\n }\r\n}\r\n\r\n/**\r\n * Returns a check whether the given TokenVocabulary is TokenType array\r\n */\r\nexport function isTokenTypeArray(tokenVocabulary: TokenVocabulary): tokenVocabulary is TokenType[] {\r\n return Array.isArray(tokenVocabulary) && (tokenVocabulary.length === 0 || 'name' in tokenVocabulary[0]);\r\n}\r\n\r\n/**\r\n * Returns a check whether the given TokenVocabulary is IMultiModeLexerDefinition\r\n */\r\nexport function isIMultiModeLexerDefinition(tokenVocabulary: TokenVocabulary): tokenVocabulary is IMultiModeLexerDefinition {\r\n return tokenVocabulary && 'modes' in tokenVocabulary && 'defaultMode' in tokenVocabulary;\r\n}\r\n\r\n/**\r\n * Returns a check whether the given TokenVocabulary is TokenTypeDictionary\r\n */\r\nexport function isTokenTypeDictionary(tokenVocabulary: TokenVocabulary): tokenVocabulary is TokenTypeDictionary {\r\n return !isTokenTypeArray(tokenVocabulary) && !isIMultiModeLexerDefinition(tokenVocabulary);\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport { Position, Range } from 'vscode-languageserver-types';\r\nimport type { CstNode } from '../syntax-tree.js';\r\nimport { NEWLINE_REGEXP, escapeRegExp } from '../utils/regexp-utils.js';\r\nimport { URI } from '../utils/uri-utils.js';\r\n\r\nexport interface JSDocComment extends JSDocValue {\r\n readonly elements: JSDocElement[]\r\n getTag(name: string): JSDocTag | undefined\r\n getTags(name: string): JSDocTag[]\r\n}\r\n\r\nexport type JSDocElement = JSDocParagraph | JSDocTag;\r\n\r\nexport type JSDocInline = JSDocTag | JSDocLine;\r\n\r\nexport interface JSDocValue {\r\n /**\r\n * Represents the range that this JSDoc element occupies.\r\n * If the JSDoc was parsed from a `CstNode`, the range will represent the location in the source document.\r\n */\r\n readonly range: Range\r\n /**\r\n * Renders this JSDoc element to a plain text representation.\r\n */\r\n toString(): string\r\n /**\r\n * Renders this JSDoc element to a markdown representation.\r\n *\r\n * @param options Rendering options to customize the markdown result.\r\n */\r\n toMarkdown(options?: JSDocRenderOptions): string\r\n}\r\n\r\nexport interface JSDocParagraph extends JSDocValue {\r\n readonly inlines: JSDocInline[]\r\n}\r\n\r\nexport interface JSDocLine extends JSDocValue {\r\n readonly text: string\r\n}\r\n\r\nexport interface JSDocTag extends JSDocValue {\r\n readonly name: string\r\n readonly content: JSDocParagraph\r\n readonly inline: boolean\r\n}\r\n\r\nexport interface JSDocParseOptions {\r\n /**\r\n * The start symbol of your comment format. Defaults to `/**`.\r\n */\r\n readonly start?: RegExp | string\r\n /**\r\n * The symbol that start a line of your comment format. Defaults to `*`.\r\n */\r\n readonly line?: RegExp | string\r\n /**\r\n * The end symbol of your comment format. Defaults to `*\\/`.\r\n */\r\n readonly end?: RegExp | string\r\n}\r\n\r\nexport interface JSDocRenderOptions {\r\n /**\r\n * Determines the style for rendering tags. Defaults to `italic`.\r\n */\r\n tag?: 'plain' | 'italic' | 'bold' | 'bold-italic'\r\n /**\r\n * Determines the default for rendering `@link` tags. Defaults to `plain`.\r\n */\r\n link?: 'code' | 'plain'\r\n /**\r\n * Custom tag rendering function.\r\n * Return a markdown formatted tag or `undefined` to fall back to the default rendering.\r\n */\r\n renderTag?(tag: JSDocTag): string | undefined\r\n /**\r\n * Custom link rendering function. Accepts a link target and a display value for the link.\r\n * Return a markdown formatted link with the format `[$display]($link)` or `undefined` if the link is not a valid target.\r\n */\r\n renderLink?(link: string, display: string): string | undefined\r\n}\r\n\r\n/**\r\n * Parses a JSDoc from a `CstNode` containing a comment.\r\n *\r\n * @param node A `CstNode` from a parsed Langium document.\r\n * @param options Parsing options specialized to your language. See {@link JSDocParseOptions}.\r\n */\r\nexport function parseJSDoc(node: CstNode, options?: JSDocParseOptions): JSDocComment;\r\n/**\r\n * Parses a JSDoc from a string comment.\r\n *\r\n * @param content A string containing the source of the JSDoc comment.\r\n * @param start The start position the comment occupies in the source document.\r\n * @param options Parsing options specialized to your language. See {@link JSDocParseOptions}.\r\n */\r\nexport function parseJSDoc(content: string, start?: Position, options?: JSDocParseOptions): JSDocComment;\r\nexport function parseJSDoc(node: CstNode | string, start?: Position | JSDocParseOptions, options?: JSDocParseOptions): JSDocComment {\r\n let opts: JSDocParseOptions | undefined;\r\n let position: Position | undefined;\r\n if (typeof node === 'string') {\r\n position = start as Position | undefined;\r\n opts = options as JSDocParseOptions | undefined;\r\n } else {\r\n position = node.range.start;\r\n opts = start as JSDocParseOptions | undefined;\r\n }\r\n if (!position) {\r\n position = Position.create(0, 0);\r\n }\r\n\r\n const lines = getLines(node);\r\n const normalizedOptions = normalizeOptions(opts);\r\n\r\n const tokens = tokenize({\r\n lines,\r\n position,\r\n options: normalizedOptions\r\n });\r\n\r\n return parseJSDocComment({\r\n index: 0,\r\n tokens,\r\n position\r\n });\r\n}\r\n\r\nexport function isJSDoc(node: CstNode | string, options?: JSDocParseOptions): boolean {\r\n const normalizedOptions = normalizeOptions(options);\r\n const lines = getLines(node);\r\n if (lines.length === 0) {\r\n return false;\r\n }\r\n\r\n const first = lines[0];\r\n const last = lines[lines.length - 1];\r\n const firstRegex = normalizedOptions.start;\r\n const lastRegex = normalizedOptions.end;\r\n\r\n return Boolean(firstRegex?.exec(first)) && Boolean(lastRegex?.exec(last));\r\n}\r\n\r\nfunction getLines(node: CstNode | string): string[] {\r\n let content = '';\r\n if (typeof node === 'string') {\r\n content = node;\r\n } else {\r\n content = node.text;\r\n }\r\n const lines = content.split(NEWLINE_REGEXP);\r\n return lines;\r\n}\r\n\r\n// Tokenization\r\n\r\ninterface JSDocToken {\r\n type: 'text' | 'tag' | 'inline-tag' | 'break'\r\n content: string\r\n range: Range\r\n}\r\n\r\nconst tagRegex = /\\s*(@([\\p{L}][\\p{L}\\p{N}]*)?)/uy;\r\nconst inlineTagRegex = /\\{(@[\\p{L}][\\p{L}\\p{N}]*)(\\s*)([^\\r\\n}]+)?\\}/gu;\r\n\r\nfunction tokenize(context: TokenizationContext): JSDocToken[] {\r\n const tokens: JSDocToken[] = [];\r\n let currentLine = context.position.line;\r\n let currentCharacter = context.position.character;\r\n for (let i = 0; i < context.lines.length; i++) {\r\n const first = i === 0;\r\n const last = i === context.lines.length - 1;\r\n let line = context.lines[i];\r\n let index = 0;\r\n\r\n if (first && context.options.start) {\r\n const match = context.options.start?.exec(line);\r\n if (match) {\r\n index = match.index + match[0].length;\r\n }\r\n } else {\r\n const match = context.options.line?.exec(line);\r\n if (match) {\r\n index = match.index + match[0].length;\r\n }\r\n }\r\n if (last) {\r\n const match = context.options.end?.exec(line);\r\n if (match) {\r\n line = line.substring(0, match.index);\r\n }\r\n }\r\n\r\n line = line.substring(0, lastCharacter(line));\r\n const whitespaceEnd = skipWhitespace(line, index);\r\n\r\n if (whitespaceEnd >= line.length) {\r\n // Only create a break token when we already have previous tokens\r\n if (tokens.length > 0) {\r\n const position = Position.create(currentLine, currentCharacter);\r\n tokens.push({\r\n type: 'break',\r\n content: '',\r\n range: Range.create(position, position)\r\n });\r\n }\r\n } else {\r\n tagRegex.lastIndex = index;\r\n const tagMatch = tagRegex.exec(line);\r\n if (tagMatch) {\r\n const fullMatch = tagMatch[0];\r\n const value = tagMatch[1];\r\n const start = Position.create(currentLine, currentCharacter + index);\r\n const end = Position.create(currentLine, currentCharacter + index + fullMatch.length);\r\n tokens.push({\r\n type: 'tag',\r\n content: value,\r\n range: Range.create(start, end)\r\n });\r\n index += fullMatch.length;\r\n index = skipWhitespace(line, index);\r\n }\r\n\r\n if (index < line.length) {\r\n const rest = line.substring(index);\r\n const inlineTagMatches = Array.from(rest.matchAll(inlineTagRegex));\r\n tokens.push(...buildInlineTokens(inlineTagMatches, rest, currentLine, currentCharacter + index));\r\n }\r\n }\r\n\r\n currentLine++;\r\n currentCharacter = 0;\r\n }\r\n\r\n // Remove last break token if there is one\r\n if (tokens.length > 0 && tokens[tokens.length - 1].type === 'break') {\r\n return tokens.slice(0, -1);\r\n }\r\n\r\n return tokens;\r\n}\r\n\r\nfunction buildInlineTokens(tags: RegExpMatchArray[], line: string, lineIndex: number, characterIndex: number): JSDocToken[] {\r\n const tokens: JSDocToken[] = [];\r\n\r\n if (tags.length === 0) {\r\n const start = Position.create(lineIndex, characterIndex);\r\n const end = Position.create(lineIndex, characterIndex + line.length);\r\n tokens.push({\r\n type: 'text',\r\n content: line,\r\n range: Range.create(start, end)\r\n });\r\n } else {\r\n let lastIndex = 0;\r\n for (const match of tags) {\r\n const matchIndex = match.index!;\r\n const startContent = line.substring(lastIndex, matchIndex);\r\n if (startContent.length > 0) {\r\n tokens.push({\r\n type: 'text',\r\n content: line.substring(lastIndex, matchIndex),\r\n range: Range.create(\r\n Position.create(lineIndex, lastIndex + characterIndex),\r\n Position.create(lineIndex, matchIndex + characterIndex)\r\n )\r\n });\r\n }\r\n let offset = startContent.length + 1;\r\n const tagName = match[1];\r\n tokens.push({\r\n type: 'inline-tag',\r\n content: tagName,\r\n range: Range.create(\r\n Position.create(lineIndex, lastIndex + offset + characterIndex),\r\n Position.create(lineIndex, lastIndex + offset + tagName.length + characterIndex)\r\n )\r\n });\r\n offset += tagName.length;\r\n if (match.length === 4) {\r\n offset += match[2].length;\r\n const value = match[3];\r\n tokens.push({\r\n type: 'text',\r\n content: value,\r\n range: Range.create(\r\n Position.create(lineIndex, lastIndex + offset + characterIndex),\r\n Position.create(lineIndex, lastIndex + offset + value.length + characterIndex)\r\n )\r\n });\r\n } else {\r\n tokens.push({\r\n type: 'text',\r\n content: '',\r\n range: Range.create(\r\n Position.create(lineIndex, lastIndex + offset + characterIndex),\r\n Position.create(lineIndex, lastIndex + offset + characterIndex)\r\n )\r\n });\r\n }\r\n lastIndex = matchIndex + match[0].length;\r\n }\r\n const endContent = line.substring(lastIndex);\r\n if (endContent.length > 0) {\r\n tokens.push({\r\n type: 'text',\r\n content: endContent,\r\n range: Range.create(\r\n Position.create(lineIndex, lastIndex + characterIndex),\r\n Position.create(lineIndex, lastIndex + characterIndex + endContent.length)\r\n )\r\n });\r\n }\r\n }\r\n\r\n return tokens;\r\n}\r\n\r\nconst nonWhitespaceRegex = /\\S/;\r\nconst whitespaceEndRegex = /\\s*$/;\r\n\r\nfunction skipWhitespace(line: string, index: number): number {\r\n const match = line.substring(index).match(nonWhitespaceRegex);\r\n if (match) {\r\n return index + match.index!;\r\n } else {\r\n return line.length;\r\n }\r\n}\r\n\r\nfunction lastCharacter(line: string): number | undefined {\r\n const match = line.match(whitespaceEndRegex);\r\n if (match && typeof match.index === 'number') {\r\n return match.index;\r\n }\r\n return undefined;\r\n}\r\n\r\n// Parsing\r\n\r\nfunction parseJSDocComment(context: ParseContext): JSDocComment {\r\n const startPosition: Position = Position.create(context.position.line, context.position.character);\r\n if (context.tokens.length === 0) {\r\n return new JSDocCommentImpl([], Range.create(startPosition, startPosition));\r\n }\r\n const elements: JSDocElement[] = [];\r\n while (context.index < context.tokens.length) {\r\n const element = parseJSDocElement(context, elements[elements.length - 1]);\r\n if (element) {\r\n elements.push(element);\r\n }\r\n }\r\n const start = elements[0]?.range.start ?? startPosition;\r\n const end = elements[elements.length - 1]?.range.end ?? startPosition;\r\n return new JSDocCommentImpl(elements, Range.create(start, end));\r\n}\r\n\r\nfunction parseJSDocElement(context: ParseContext, last?: JSDocElement): JSDocElement | undefined {\r\n const next = context.tokens[context.index];\r\n if (next.type === 'tag') {\r\n return parseJSDocTag(context, false);\r\n } else if (next.type === 'text' || next.type === 'inline-tag') {\r\n return parseJSDocText(context);\r\n } else {\r\n appendEmptyLine(next, last);\r\n context.index++;\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction appendEmptyLine(token: JSDocToken, element?: JSDocElement): void {\r\n if (element) {\r\n const line = new JSDocLineImpl('', token.range);\r\n if ('inlines' in element) {\r\n element.inlines.push(line);\r\n } else {\r\n element.content.inlines.push(line);\r\n }\r\n }\r\n}\r\n\r\nfunction parseJSDocText(context: ParseContext): JSDocParagraph {\r\n let token = context.tokens[context.index];\r\n const firstToken = token;\r\n let lastToken = token;\r\n const lines: JSDocInline[] = [];\r\n while (token && token.type !== 'break' && token.type !== 'tag') {\r\n lines.push(parseJSDocInline(context));\r\n lastToken = token;\r\n token = context.tokens[context.index];\r\n }\r\n return new JSDocTextImpl(lines, Range.create(firstToken.range.start, lastToken.range.end));\r\n}\r\n\r\nfunction parseJSDocInline(context: ParseContext): JSDocInline {\r\n const token = context.tokens[context.index];\r\n if (token.type === 'inline-tag') {\r\n return parseJSDocTag(context, true);\r\n } else {\r\n return parseJSDocLine(context);\r\n }\r\n}\r\n\r\nfunction parseJSDocTag(context: ParseContext, inline: boolean): JSDocTag {\r\n const tagToken = context.tokens[context.index++];\r\n const name = tagToken.content.substring(1);\r\n const nextToken = context.tokens[context.index];\r\n if (nextToken?.type === 'text') {\r\n if (inline) {\r\n const docLine = parseJSDocLine(context);\r\n return new JSDocTagImpl(\r\n name,\r\n new JSDocTextImpl([docLine], docLine.range),\r\n inline,\r\n Range.create(tagToken.range.start, docLine.range.end)\r\n );\r\n } else {\r\n const textDoc = parseJSDocText(context);\r\n return new JSDocTagImpl(\r\n name,\r\n textDoc,\r\n inline,\r\n Range.create(tagToken.range.start, textDoc.range.end)\r\n );\r\n }\r\n } else {\r\n const range = tagToken.range;\r\n return new JSDocTagImpl(name, new JSDocTextImpl([], range), inline, range);\r\n }\r\n}\r\n\r\nfunction parseJSDocLine(context: ParseContext): JSDocLine {\r\n const token = context.tokens[context.index++];\r\n return new JSDocLineImpl(token.content, token.range);\r\n}\r\n\r\ninterface NormalizedOptions {\r\n start?: RegExp\r\n end?: RegExp\r\n line?: RegExp\r\n}\r\n\r\ninterface TokenizationContext {\r\n position: Position\r\n lines: string[]\r\n options: NormalizedOptions\r\n}\r\n\r\ninterface ParseContext {\r\n position: Position\r\n tokens: JSDocToken[]\r\n index: number\r\n}\r\n\r\nfunction normalizeOptions(options?: JSDocParseOptions): NormalizedOptions {\r\n if (!options) {\r\n return normalizeOptions({\r\n start: '/**',\r\n end: '*/',\r\n line: '*'\r\n });\r\n }\r\n const { start, end, line } = options;\r\n return {\r\n start: normalizeOption(start, true),\r\n end: normalizeOption(end, false),\r\n line: normalizeOption(line, true)\r\n };\r\n}\r\n\r\nfunction normalizeOption(option: RegExp | string | undefined, start: boolean): RegExp | undefined {\r\n if (typeof option === 'string' || typeof option === 'object') {\r\n const escaped = typeof option === 'string' ? escapeRegExp(option) : option.source;\r\n if (start) {\r\n return new RegExp(`^\\\\s*${escaped}`);\r\n } else {\r\n return new RegExp(`\\\\s*${escaped}\\\\s*$`);\r\n }\r\n } else {\r\n return option;\r\n }\r\n}\r\n\r\nclass JSDocCommentImpl implements JSDocComment {\r\n\r\n readonly elements: JSDocElement[];\r\n readonly range: Range;\r\n\r\n constructor(elements: JSDocElement[], range: Range) {\r\n this.elements = elements;\r\n this.range = range;\r\n }\r\n\r\n getTag(name: string): JSDocTag | undefined {\r\n return this.getAllTags().find(e => e.name === name);\r\n }\r\n\r\n getTags(name: string): JSDocTag[] {\r\n return this.getAllTags().filter(e => e.name === name);\r\n }\r\n\r\n private getAllTags(): JSDocTag[] {\r\n return this.elements.filter((e): e is JSDocTag => 'name' in e);\r\n }\r\n\r\n toString(): string {\r\n let value = '';\r\n for (const element of this.elements) {\r\n if (value.length === 0) {\r\n value = element.toString();\r\n } else {\r\n const text = element.toString();\r\n value += fillNewlines(value) + text;\r\n }\r\n }\r\n return value.trim();\r\n }\r\n\r\n toMarkdown(options?: JSDocRenderOptions): string {\r\n let value = '';\r\n for (const element of this.elements) {\r\n if (value.length === 0) {\r\n value = element.toMarkdown(options);\r\n } else {\r\n const text = element.toMarkdown(options);\r\n value += fillNewlines(value) + text;\r\n }\r\n }\r\n return value.trim();\r\n }\r\n}\r\n\r\nclass JSDocTagImpl implements JSDocTag {\r\n name: string;\r\n content: JSDocParagraph;\r\n range: Range;\r\n inline: boolean;\r\n\r\n constructor(name: string, content: JSDocParagraph, inline: boolean, range: Range) {\r\n this.name = name;\r\n this.content = content;\r\n this.inline = inline;\r\n this.range = range;\r\n }\r\n\r\n toString(): string {\r\n let text = `@${this.name}`;\r\n const content = this.content.toString();\r\n if (this.content.inlines.length === 1) {\r\n text = `${text} ${content}`;\r\n } else if (this.content.inlines.length > 1) {\r\n text = `${text}\\n${content}`;\r\n }\r\n if (this.inline) {\r\n // Inline tags are surrounded by curly braces\r\n return `{${text}}`;\r\n } else {\r\n return text;\r\n }\r\n }\r\n\r\n toMarkdown(options?: JSDocRenderOptions): string {\r\n return options?.renderTag?.(this) ?? this.toMarkdownDefault(options);\r\n }\r\n\r\n private toMarkdownDefault(options?: JSDocRenderOptions): string {\r\n const content = this.content.toMarkdown(options);\r\n if (this.inline) {\r\n const rendered = renderInlineTag(this.name, content, options ?? {});\r\n if (typeof rendered === 'string') {\r\n return rendered;\r\n }\r\n }\r\n let marker = '';\r\n if (options?.tag === 'italic' || options?.tag === undefined) {\r\n marker = '*';\r\n } else if (options?.tag === 'bold') {\r\n marker = '**';\r\n } else if (options?.tag === 'bold-italic') {\r\n marker = '***';\r\n }\r\n let text = `${marker}@${this.name}${marker}`;\r\n if (this.content.inlines.length === 1) {\r\n text = `${text} \u2014 ${content}`;\r\n } else if (this.content.inlines.length > 1) {\r\n text = `${text}\\n${content}`;\r\n }\r\n if (this.inline) {\r\n // Inline tags are surrounded by curly braces\r\n return `{${text}}`;\r\n } else {\r\n return text;\r\n }\r\n }\r\n}\r\n\r\nfunction renderInlineTag(tag: string, content: string, options: JSDocRenderOptions): string | undefined {\r\n if (tag === 'linkplain' || tag === 'linkcode' || tag === 'link') {\r\n const index = content.indexOf(' ');\r\n let display = content;\r\n if (index > 0) {\r\n const displayStart = skipWhitespace(content, index);\r\n display = content.substring(displayStart);\r\n content = content.substring(0, index);\r\n }\r\n if (tag === 'linkcode' || (tag === 'link' && options.link === 'code')) {\r\n // Surround the display value in a markdown inline code block\r\n display = `\\`${display}\\``;\r\n }\r\n const renderedLink = options.renderLink?.(content, display) ?? renderLinkDefault(content, display);\r\n return renderedLink;\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction renderLinkDefault(content: string, display: string): string {\r\n try {\r\n URI.parse(content, true);\r\n return `[${display}](${content})`;\r\n } catch {\r\n return content;\r\n }\r\n}\r\n\r\nclass JSDocTextImpl implements JSDocParagraph {\r\n inlines: JSDocInline[];\r\n range: Range;\r\n\r\n constructor(lines: JSDocInline[], range: Range) {\r\n this.inlines = lines;\r\n this.range = range;\r\n }\r\n\r\n toString(): string {\r\n let text = '';\r\n for (let i = 0; i < this.inlines.length; i++) {\r\n const inline = this.inlines[i];\r\n const next = this.inlines[i + 1];\r\n text += inline.toString();\r\n if (next && next.range.start.line > inline.range.start.line) {\r\n text += '\\n';\r\n }\r\n }\r\n return text;\r\n }\r\n\r\n toMarkdown(options?: JSDocRenderOptions): string {\r\n let text = '';\r\n for (let i = 0; i < this.inlines.length; i++) {\r\n const inline = this.inlines[i];\r\n const next = this.inlines[i + 1];\r\n text += inline.toMarkdown(options);\r\n if (next && next.range.start.line > inline.range.start.line) {\r\n text += '\\n';\r\n }\r\n }\r\n return text;\r\n }\r\n}\r\n\r\nclass JSDocLineImpl implements JSDocLine {\r\n text: string;\r\n range: Range;\r\n\r\n constructor(text: string, range: Range) {\r\n this.text = text;\r\n this.range = range;\r\n }\r\n\r\n toString(): string {\r\n return this.text;\r\n }\r\n toMarkdown(): string {\r\n return this.text;\r\n }\r\n\r\n}\r\n\r\nfunction fillNewlines(text: string): string {\r\n if (text.endsWith('\\n')) {\r\n return '\\n';\r\n } else {\r\n return '\\n\\n';\r\n }\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode, AstNodeDescription } from '../syntax-tree.js';\r\nimport type { IndexManager } from '../workspace/index-manager.js';\r\nimport type { CommentProvider } from './comment-provider.js';\r\nimport type { JSDocTag } from './jsdoc.js';\r\nimport { getDocument } from '../utils/ast-utils.js';\r\nimport { isJSDoc, parseJSDoc } from './jsdoc.js';\r\n\r\n/**\r\n * Provides documentation for AST nodes.\r\n */\r\nexport interface DocumentationProvider {\r\n /**\r\n * Returns a markdown documentation string for the specified AST node.\r\n *\r\n * The default implementation `JSDocDocumentationProvider` will inspect the comment associated with the specified node.\r\n */\r\n getDocumentation(node: AstNode): string | undefined;\r\n}\r\n\r\nexport class JSDocDocumentationProvider implements DocumentationProvider {\r\n\r\n protected readonly indexManager: IndexManager;\r\n protected readonly commentProvider: CommentProvider;\r\n\r\n constructor(services: LangiumCoreServices) {\r\n this.indexManager = services.shared.workspace.IndexManager;\r\n this.commentProvider = services.documentation.CommentProvider;\r\n }\r\n\r\n getDocumentation(node: AstNode): string | undefined {\r\n const comment = this.commentProvider.getComment(node);\r\n if (comment && isJSDoc(comment)) {\r\n const parsedJSDoc = parseJSDoc(comment);\r\n return parsedJSDoc.toMarkdown({\r\n renderLink: (link, display) => {\r\n return this.documentationLinkRenderer(node, link, display);\r\n },\r\n renderTag: (tag) => {\r\n return this.documentationTagRenderer(node, tag);\r\n }\r\n });\r\n }\r\n return undefined;\r\n }\r\n\r\n protected documentationLinkRenderer(node: AstNode, name: string, display: string): string | undefined {\r\n const description = this.findNameInPrecomputedScopes(node, name) ?? this.findNameInGlobalScope(node, name);\r\n if (description && description.nameSegment) {\r\n const line = description.nameSegment.range.start.line + 1;\r\n const character = description.nameSegment.range.start.character + 1;\r\n const uri = description.documentUri.with({ fragment: `L${line},${character}` });\r\n return `[${display}](${uri.toString()})`;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected documentationTagRenderer(_node: AstNode, _tag: JSDocTag): string | undefined {\r\n // Fall back to the default tag rendering\r\n return undefined;\r\n }\r\n\r\n protected findNameInPrecomputedScopes(node: AstNode, name: string): AstNodeDescription | undefined {\r\n const document = getDocument(node);\r\n const precomputed = document.precomputedScopes;\r\n if (!precomputed) {\r\n return undefined;\r\n }\r\n let currentNode: AstNode | undefined = node;\r\n do {\r\n const allDescriptions = precomputed.get(currentNode);\r\n const description = allDescriptions.find(e => e.name === name);\r\n if (description) {\r\n return description;\r\n }\r\n currentNode = currentNode.$container;\r\n } while (currentNode);\r\n\r\n return undefined;\r\n }\r\n\r\n protected findNameInGlobalScope(node: AstNode, name: string): AstNodeDescription | undefined {\r\n const description = this.indexManager.allElements().find(e => e.name === name);\r\n return description;\r\n }\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { GrammarConfig } from '../languages/grammar-config.js';\r\nimport { isAstNodeWithComment } from '../serializer/json-serializer.js';\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode } from '../syntax-tree.js';\r\nimport { findCommentNode } from '../utils/cst-utils.js';\r\n\r\n/**\r\n * Provides comments for AST nodes.\r\n */\r\nexport interface CommentProvider {\r\n /**\r\n * Returns the comment associated with the specified AST node.\r\n * @param node The AST node to get the comment for.\r\n * @returns The comment associated with the specified AST node or `undefined` if there is no comment.\r\n */\r\n getComment(node: AstNode): string | undefined;\r\n}\r\n\r\nexport class DefaultCommentProvider implements CommentProvider {\r\n protected readonly grammarConfig: () => GrammarConfig;\r\n constructor(services: LangiumCoreServices) {\r\n this.grammarConfig = () => services.parser.GrammarConfig;\r\n }\r\n getComment(node: AstNode): string | undefined {\r\n if(isAstNodeWithComment(node)) {\r\n return node.$comment;\r\n }\r\n return findCommentNode(node.$cstNode, this.grammarConfig().multilineCommentRules)?.text;\r\n }\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { CancellationToken } from '../utils/cancellation.js';\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { AstNode } from '../syntax-tree.js';\r\nimport type { LangiumParser, ParseResult } from './langium-parser.js';\r\nimport type { Hydrator } from '../serializer/hydrator.js';\r\nimport type { Event } from '../utils/event.js';\r\nimport { Deferred, OperationCancelled } from '../utils/promise-utils.js';\r\nimport { Emitter } from '../utils/event.js';\r\n\r\n/**\r\n * Async parser that allows cancellation of the current parsing process.\r\n *\r\n * @remarks\r\n * The sync parser implementation is blocking the event loop, which can become quite problematic for large files.\r\n * The default implementation is not actually async. It just wraps the sync parser in a promise. A real implementation would create worker threads or web workers to offload the parsing work.\r\n */\r\nexport interface AsyncParser {\r\n /**\r\n * Parses the given text and returns the parse result.\r\n *\r\n * @param text The text to parse.\r\n * @param cancelToken A cancellation token that can be used to cancel the parsing process.\r\n * @returns A promise that resolves to the parse result.\r\n *\r\n * @throws `OperationCancelled` if the parsing process is cancelled.\r\n */\r\n parse(text: string, cancelToken: CancellationToken): Promise>;\r\n}\r\n\r\n/**\r\n * Default implementation of the async parser which simply wraps the sync parser in a promise.\r\n *\r\n * @remarks\r\n * A real implementation would create worker threads or web workers to offload the parsing work.\r\n */\r\nexport class DefaultAsyncParser implements AsyncParser {\r\n\r\n protected readonly syncParser: LangiumParser;\r\n\r\n constructor(services: LangiumCoreServices) {\r\n this.syncParser = services.parser.LangiumParser;\r\n }\r\n\r\n parse(text: string, _cancelToken: CancellationToken): Promise> {\r\n return Promise.resolve(this.syncParser.parse(text));\r\n }\r\n}\r\n\r\nexport abstract class AbstractThreadedAsyncParser implements AsyncParser {\r\n\r\n /**\r\n * The thread count determines how many threads are used to parse files in parallel.\r\n * The default value is 8. Decreasing this value increases startup performance, but decreases parallel parsing performance.\r\n */\r\n protected threadCount = 8;\r\n /**\r\n * The termination delay determines how long the parser waits for a thread to finish after a cancellation request.\r\n * The default value is 200(ms).\r\n */\r\n protected terminationDelay = 200;\r\n protected workerPool: ParserWorker[] = [];\r\n protected queue: Array> = [];\r\n\r\n protected readonly hydrator: Hydrator;\r\n\r\n constructor(services: LangiumCoreServices) {\r\n this.hydrator = services.serializer.Hydrator;\r\n }\r\n\r\n protected initializeWorkers(): void {\r\n while (this.workerPool.length < this.threadCount) {\r\n const worker = this.createWorker();\r\n worker.onReady(() => {\r\n if (this.queue.length > 0) {\r\n const deferred = this.queue.shift();\r\n if (deferred) {\r\n worker.lock();\r\n deferred.resolve(worker);\r\n }\r\n }\r\n });\r\n this.workerPool.push(worker);\r\n }\r\n }\r\n\r\n async parse(text: string, cancelToken: CancellationToken): Promise> {\r\n const worker = await this.acquireParserWorker(cancelToken);\r\n const deferred = new Deferred>();\r\n let timeout: NodeJS.Timeout | undefined;\r\n // If the cancellation token is requested, we wait for a certain time before terminating the worker.\r\n // Since the cancellation token lives longer than the parsing process, we need to dispose the event listener.\r\n // Otherwise, we might accidentally terminate the worker after the parsing process has finished.\r\n const cancellation = cancelToken.onCancellationRequested(() => {\r\n timeout = setTimeout(() => {\r\n this.terminateWorker(worker);\r\n }, this.terminationDelay);\r\n });\r\n worker.parse(text).then(result => {\r\n const hydrated = this.hydrator.hydrate(result);\r\n deferred.resolve(hydrated);\r\n }).catch(err => {\r\n deferred.reject(err);\r\n }).finally(() => {\r\n cancellation.dispose();\r\n clearTimeout(timeout);\r\n });\r\n return deferred.promise;\r\n }\r\n\r\n protected terminateWorker(worker: ParserWorker): void {\r\n worker.terminate();\r\n const index = this.workerPool.indexOf(worker);\r\n if (index >= 0) {\r\n this.workerPool.splice(index, 1);\r\n }\r\n }\r\n\r\n protected async acquireParserWorker(cancelToken: CancellationToken): Promise {\r\n this.initializeWorkers();\r\n for (const worker of this.workerPool) {\r\n if (worker.ready) {\r\n worker.lock();\r\n return worker;\r\n }\r\n }\r\n const deferred = new Deferred();\r\n cancelToken.onCancellationRequested(() => {\r\n const index = this.queue.indexOf(deferred);\r\n if (index >= 0) {\r\n this.queue.splice(index, 1);\r\n }\r\n deferred.reject(OperationCancelled);\r\n });\r\n this.queue.push(deferred);\r\n return deferred.promise;\r\n }\r\n\r\n protected abstract createWorker(): ParserWorker;\r\n}\r\n\r\nexport type WorkerMessagePost = (message: unknown) => void;\r\nexport type WorkerMessageCallback = (cb: (message: unknown) => void) => void;\r\n\r\nexport class ParserWorker {\r\n\r\n protected readonly sendMessage: WorkerMessagePost;\r\n protected readonly _terminate: () => void;\r\n protected readonly onReadyEmitter = new Emitter();\r\n\r\n protected deferred = new Deferred();\r\n protected _ready = true;\r\n protected _parsing = false;\r\n\r\n get ready(): boolean {\r\n return this._ready;\r\n }\r\n\r\n get onReady(): Event {\r\n return this.onReadyEmitter.event;\r\n }\r\n\r\n constructor(sendMessage: WorkerMessagePost, onMessage: WorkerMessageCallback, onError: WorkerMessageCallback, terminate: () => void) {\r\n this.sendMessage = sendMessage;\r\n this._terminate = terminate;\r\n onMessage(result => {\r\n const parseResult = result as ParseResult;\r\n this.deferred.resolve(parseResult);\r\n this.unlock();\r\n });\r\n onError(error => {\r\n this.deferred.reject(error);\r\n this.unlock();\r\n });\r\n }\r\n\r\n terminate(): void {\r\n this.deferred.reject(OperationCancelled);\r\n this._terminate();\r\n }\r\n\r\n lock(): void {\r\n this._ready = false;\r\n }\r\n\r\n unlock(): void {\r\n this._parsing = false;\r\n this._ready = true;\r\n this.onReadyEmitter.fire();\r\n }\r\n\r\n parse(text: string): Promise {\r\n if (this._parsing) {\r\n throw new Error('Parser worker is busy');\r\n }\r\n this._parsing = true;\r\n this.deferred = new Deferred();\r\n this.sendMessage(text);\r\n return this.deferred.promise;\r\n }\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport { type AbstractCancellationTokenSource, CancellationToken, CancellationTokenSource } from '../utils/cancellation.js';\r\nimport { Deferred, isOperationCancelled, startCancelableOperation, type MaybePromise } from '../utils/promise-utils.js';\r\n\r\n/**\r\n * Utility service to execute mutually exclusive actions.\r\n */\r\nexport interface WorkspaceLock {\r\n /**\r\n * Performs a single async action, like initializing the workspace or processing document changes.\r\n * Only one action will be executed at a time.\r\n *\r\n * When another action is queued up, the token provided for the action will be cancelled.\r\n * Assuming the action makes use of this token, the next action only has to wait for the current action to finish cancellation.\r\n */\r\n write(action: (token: CancellationToken) => MaybePromise): Promise;\r\n\r\n /**\r\n * Performs a single action, like computing completion results or providing workspace symbols.\r\n * Read actions will only be executed after all write actions have finished. They will be executed in parallel if possible.\r\n *\r\n * If a write action is currently running, the read action will be queued up and executed afterwards.\r\n * If a new write action is queued up while a read action is waiting, the write action will receive priority and will be handled before the read action.\r\n *\r\n * Note that read actions are not allowed to modify anything in the workspace. Please use {@link write} instead.\r\n */\r\n read(action: () => MaybePromise): Promise;\r\n\r\n /**\r\n * Cancels the last queued write action. All previous write actions already have been cancelled.\r\n */\r\n cancelWrite(): void;\r\n}\r\n\r\ntype LockAction = (token: CancellationToken) => MaybePromise;\r\n\r\ninterface LockEntry {\r\n action: LockAction;\r\n deferred: Deferred;\r\n cancellationToken: CancellationToken;\r\n}\r\n\r\nexport class DefaultWorkspaceLock implements WorkspaceLock {\r\n\r\n private previousTokenSource: AbstractCancellationTokenSource = new CancellationTokenSource();\r\n private writeQueue: LockEntry[] = [];\r\n private readQueue: LockEntry[] = [];\r\n private done = true;\r\n\r\n write(action: (token: CancellationToken) => MaybePromise): Promise {\r\n this.cancelWrite();\r\n const tokenSource = startCancelableOperation();\r\n this.previousTokenSource = tokenSource;\r\n return this.enqueue(this.writeQueue, action, tokenSource.token);\r\n }\r\n\r\n read(action: () => MaybePromise): Promise {\r\n return this.enqueue(this.readQueue, action);\r\n }\r\n\r\n private enqueue(queue: LockEntry[], action: LockAction, cancellationToken = CancellationToken.None): Promise {\r\n const deferred = new Deferred();\r\n const entry: LockEntry = {\r\n action,\r\n deferred,\r\n cancellationToken\r\n };\r\n queue.push(entry);\r\n this.performNextOperation();\r\n return deferred.promise as Promise;\r\n }\r\n\r\n private async performNextOperation(): Promise {\r\n if (!this.done) {\r\n return;\r\n }\r\n const entries: LockEntry[] = [];\r\n if (this.writeQueue.length > 0) {\r\n // Just perform the next write action\r\n entries.push(this.writeQueue.shift()!);\r\n } else if (this.readQueue.length > 0) {\r\n // Empty the read queue and perform all actions in parallel\r\n entries.push(...this.readQueue.splice(0, this.readQueue.length));\r\n } else {\r\n return;\r\n }\r\n this.done = false;\r\n await Promise.all(entries.map(async ({ action, deferred, cancellationToken }) => {\r\n try {\r\n // Move the execution of the action to the next event loop tick via `Promise.resolve()`\r\n const result = await Promise.resolve().then(() => action(cancellationToken));\r\n deferred.resolve(result);\r\n } catch (err) {\r\n if (isOperationCancelled(err)) {\r\n // If the operation was cancelled, we don't want to reject the promise\r\n deferred.resolve(undefined);\r\n } else {\r\n deferred.reject(err);\r\n }\r\n }\r\n }));\r\n this.done = true;\r\n this.performNextOperation();\r\n }\r\n\r\n cancelWrite(): void {\r\n this.previousTokenSource.cancel();\r\n }\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2024 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\nimport type { TokenType } from 'chevrotain';\r\nimport { CompositeCstNodeImpl, LeafCstNodeImpl, RootCstNodeImpl } from '../parser/cst-node-builder.js';\r\nimport { isAbstractElement, type AbstractElement, type Grammar } from '../languages/generated/ast.js';\r\nimport type { Linker } from '../references/linker.js';\r\nimport type { Lexer } from '../parser/lexer.js';\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport type { ParseResult } from '../parser/langium-parser.js';\r\nimport type { Reference, AstNode, CstNode, LeafCstNode, GenericAstNode, Mutable, RootCstNode } from '../syntax-tree.js';\r\nimport { isRootCstNode, isCompositeCstNode, isLeafCstNode, isAstNode, isReference } from '../syntax-tree.js';\r\nimport { streamAst } from '../utils/ast-utils.js';\r\nimport { BiMap } from '../utils/collections.js';\r\nimport { streamCst } from '../utils/cst-utils.js';\r\nimport type { LexingReport } from '../parser/token-builder.js';\r\n\r\n/**\r\n * The hydrator service is responsible for allowing AST parse results to be sent across worker threads.\r\n */\r\nexport interface Hydrator {\r\n /**\r\n * Converts a parse result to a plain object. The resulting object can be sent across worker threads.\r\n */\r\n dehydrate(result: ParseResult): ParseResult;\r\n /**\r\n * Converts a plain object to a parse result. The included AST node can then be used in the main thread.\r\n * Calling this method on objects that have not been dehydrated first will result in undefined behavior.\r\n */\r\n hydrate(result: ParseResult): ParseResult;\r\n}\r\n\r\nexport interface DehydrateContext {\r\n astNodes: Map;\r\n cstNodes: Map;\r\n}\r\n\r\nexport interface HydrateContext {\r\n astNodes: Map;\r\n cstNodes: Map;\r\n}\r\n\r\nexport class DefaultHydrator implements Hydrator {\r\n\r\n protected readonly grammar: Grammar;\r\n protected readonly lexer: Lexer;\r\n protected readonly linker: Linker;\r\n\r\n protected readonly grammarElementIdMap = new BiMap();\r\n protected readonly tokenTypeIdMap = new BiMap();\r\n\r\n constructor(services: LangiumCoreServices) {\r\n this.grammar = services.Grammar;\r\n this.lexer = services.parser.Lexer;\r\n this.linker = services.references.Linker;\r\n }\r\n\r\n dehydrate(result: ParseResult): ParseResult {\r\n return {\r\n lexerErrors: result.lexerErrors,\r\n lexerReport: result.lexerReport ? this.dehydrateLexerReport(result.lexerReport) : undefined,\r\n // We need to create shallow copies of the errors\r\n // The original errors inherit from the `Error` class, which is not transferable across worker threads\r\n parserErrors: result.parserErrors.map(e => ({ ...e, message: e.message })),\r\n value: this.dehydrateAstNode(result.value, this.createDehyrationContext(result.value))\r\n };\r\n }\r\n\r\n protected dehydrateLexerReport(lexerReport: LexingReport): LexingReport {\r\n // By default, lexer reports are serializable\r\n return lexerReport;\r\n }\r\n\r\n protected createDehyrationContext(node: AstNode): DehydrateContext {\r\n const astNodes = new Map();\r\n const cstNodes = new Map();\r\n for (const astNode of streamAst(node)) {\r\n astNodes.set(astNode, {});\r\n }\r\n if (node.$cstNode) {\r\n for (const cstNode of streamCst(node.$cstNode)) {\r\n cstNodes.set(cstNode, {});\r\n }\r\n }\r\n return {\r\n astNodes,\r\n cstNodes\r\n };\r\n }\r\n\r\n protected dehydrateAstNode(node: AstNode, context: DehydrateContext): object {\r\n const obj = context.astNodes.get(node) as Record;\r\n obj.$type = node.$type;\r\n obj.$containerIndex = node.$containerIndex;\r\n obj.$containerProperty = node.$containerProperty;\r\n if (node.$cstNode !== undefined) {\r\n obj.$cstNode = this.dehydrateCstNode(node.$cstNode, context);\r\n }\r\n for (const [name, value] of Object.entries(node)) {\r\n if (name.startsWith('$')) {\r\n continue;\r\n }\r\n if (Array.isArray(value)) {\r\n const arr: any[] = [];\r\n obj[name] = arr;\r\n for (const item of value) {\r\n if (isAstNode(item)) {\r\n arr.push(this.dehydrateAstNode(item, context));\r\n } else if (isReference(item)) {\r\n arr.push(this.dehydrateReference(item, context));\r\n } else {\r\n arr.push(item);\r\n }\r\n }\r\n } else if (isAstNode(value)) {\r\n obj[name] = this.dehydrateAstNode(value, context);\r\n } else if (isReference(value)) {\r\n obj[name] = this.dehydrateReference(value, context);\r\n } else if (value !== undefined) {\r\n obj[name] = value;\r\n }\r\n }\r\n return obj;\r\n }\r\n\r\n protected dehydrateReference(reference: Reference, context: DehydrateContext): any {\r\n const obj: Record = {};\r\n obj.$refText = reference.$refText;\r\n if (reference.$refNode) {\r\n obj.$refNode = context.cstNodes.get(reference.$refNode);\r\n }\r\n return obj;\r\n }\r\n\r\n protected dehydrateCstNode(node: CstNode, context: DehydrateContext): any {\r\n const cstNode = context.cstNodes.get(node) as Record;\r\n if (isRootCstNode(node)) {\r\n cstNode.fullText = node.fullText;\r\n } else {\r\n // Note: This returns undefined for hidden nodes (i.e. comments)\r\n cstNode.grammarSource = this.getGrammarElementId(node.grammarSource);\r\n }\r\n cstNode.hidden = node.hidden;\r\n cstNode.astNode = context.astNodes.get(node.astNode);\r\n if (isCompositeCstNode(node)) {\r\n cstNode.content = node.content.map(child => this.dehydrateCstNode(child, context));\r\n } else if (isLeafCstNode(node)) {\r\n cstNode.tokenType = node.tokenType.name;\r\n cstNode.offset = node.offset;\r\n cstNode.length = node.length;\r\n cstNode.startLine = node.range.start.line;\r\n cstNode.startColumn = node.range.start.character;\r\n cstNode.endLine = node.range.end.line;\r\n cstNode.endColumn = node.range.end.character;\r\n }\r\n return cstNode;\r\n }\r\n\r\n hydrate(result: ParseResult): ParseResult {\r\n const node = result.value;\r\n const context = this.createHydrationContext(node);\r\n if ('$cstNode' in node) {\r\n this.hydrateCstNode(node.$cstNode, context);\r\n }\r\n return {\r\n lexerErrors: result.lexerErrors,\r\n lexerReport: result.lexerReport,\r\n parserErrors: result.parserErrors,\r\n value: this.hydrateAstNode(node, context) as T\r\n };\r\n }\r\n\r\n protected createHydrationContext(node: any): HydrateContext {\r\n const astNodes = new Map();\r\n const cstNodes = new Map();\r\n for (const astNode of streamAst(node)) {\r\n astNodes.set(astNode, {} as AstNode);\r\n }\r\n let root: RootCstNode;\r\n if (node.$cstNode) {\r\n for (const cstNode of streamCst(node.$cstNode)) {\r\n let cst: Mutable | undefined;\r\n if ('fullText' in cstNode) {\r\n cst = new RootCstNodeImpl(cstNode.fullText as string);\r\n root = cst as RootCstNode;\r\n } else if ('content' in cstNode) {\r\n cst = new CompositeCstNodeImpl();\r\n } else if ('tokenType' in cstNode) {\r\n cst = this.hydrateCstLeafNode(cstNode);\r\n }\r\n if (cst) {\r\n cstNodes.set(cstNode, cst);\r\n cst.root = root!;\r\n }\r\n }\r\n }\r\n return {\r\n astNodes,\r\n cstNodes\r\n };\r\n }\r\n\r\n protected hydrateAstNode(node: any, context: HydrateContext): AstNode {\r\n const astNode = context.astNodes.get(node) as Mutable;\r\n astNode.$type = node.$type;\r\n astNode.$containerIndex = node.$containerIndex;\r\n astNode.$containerProperty = node.$containerProperty;\r\n if (node.$cstNode) {\r\n astNode.$cstNode = context.cstNodes.get(node.$cstNode);\r\n }\r\n for (const [name, value] of Object.entries(node)) {\r\n if (name.startsWith('$')) {\r\n continue;\r\n }\r\n if (Array.isArray(value)) {\r\n const arr: unknown[] = [];\r\n astNode[name] = arr;\r\n for (const item of value) {\r\n if (isAstNode(item)) {\r\n arr.push(this.setParent(this.hydrateAstNode(item, context), astNode));\r\n } else if (isReference(item)) {\r\n arr.push(this.hydrateReference(item, astNode, name, context));\r\n } else {\r\n arr.push(item);\r\n }\r\n }\r\n } else if (isAstNode(value)) {\r\n astNode[name] = this.setParent(this.hydrateAstNode(value, context), astNode);\r\n } else if (isReference(value)) {\r\n astNode[name] = this.hydrateReference(value, astNode, name, context);\r\n } else if (value !== undefined) {\r\n astNode[name] = value;\r\n }\r\n }\r\n return astNode;\r\n }\r\n\r\n protected setParent(node: any, parent: any): any {\r\n node.$container = parent as AstNode;\r\n return node;\r\n }\r\n\r\n protected hydrateReference(reference: any, node: AstNode, name: string, context: HydrateContext): Reference {\r\n return this.linker.buildReference(node, name, context.cstNodes.get(reference.$refNode)!, reference.$refText);\r\n }\r\n\r\n protected hydrateCstNode(cstNode: any, context: HydrateContext, num = 0): CstNode {\r\n const cstNodeObj = context.cstNodes.get(cstNode) as Mutable;\r\n if (typeof cstNode.grammarSource === 'number') {\r\n cstNodeObj.grammarSource = this.getGrammarElement(cstNode.grammarSource);\r\n }\r\n cstNodeObj.astNode = context.astNodes.get(cstNode.astNode)!;\r\n if (isCompositeCstNode(cstNodeObj)) {\r\n for (const child of cstNode.content) {\r\n const hydrated = this.hydrateCstNode(child, context, num++);\r\n cstNodeObj.content.push(hydrated);\r\n }\r\n }\r\n return cstNodeObj;\r\n }\r\n\r\n protected hydrateCstLeafNode(cstNode: any): LeafCstNode {\r\n const tokenType = this.getTokenType(cstNode.tokenType);\r\n const offset = cstNode.offset;\r\n const length = cstNode.length;\r\n const startLine = cstNode.startLine;\r\n const startColumn = cstNode.startColumn;\r\n const endLine = cstNode.endLine;\r\n const endColumn = cstNode.endColumn;\r\n const hidden = cstNode.hidden;\r\n const node = new LeafCstNodeImpl(\r\n offset,\r\n length,\r\n {\r\n start: {\r\n line: startLine,\r\n character: startColumn\r\n },\r\n end: {\r\n line: endLine,\r\n character: endColumn\r\n }\r\n },\r\n tokenType,\r\n hidden\r\n );\r\n return node;\r\n }\r\n\r\n protected getTokenType(name: string): TokenType {\r\n return this.lexer.definition[name];\r\n }\r\n\r\n protected getGrammarElementId(node: AbstractElement | undefined): number | undefined {\r\n if (!node) {\r\n return undefined;\r\n }\r\n if (this.grammarElementIdMap.size === 0) {\r\n this.createGrammarElementIdMap();\r\n }\r\n return this.grammarElementIdMap.get(node);\r\n }\r\n\r\n protected getGrammarElement(id: number): AbstractElement | undefined {\r\n if (this.grammarElementIdMap.size === 0) {\r\n this.createGrammarElementIdMap();\r\n }\r\n const element = this.grammarElementIdMap.getKey(id);\r\n return element;\r\n }\r\n\r\n protected createGrammarElementIdMap(): void {\r\n let id = 0;\r\n for (const element of streamAst(this.grammar)) {\r\n if (isAbstractElement(element)) {\r\n this.grammarElementIdMap.set(element, id++);\r\n }\r\n }\r\n }\r\n\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n******************************************************************************/\r\n\r\nimport type { Module } from './dependency-injection.js';\r\nimport type { LangiumDefaultCoreServices, LangiumDefaultSharedCoreServices, LangiumCoreServices, LangiumSharedCoreServices } from './services.js';\r\nimport type { FileSystemProvider } from './workspace/file-system-provider.js';\r\nimport { createGrammarConfig } from './languages/grammar-config.js';\r\nimport { createCompletionParser } from './parser/completion-parser-builder.js';\r\nimport { createLangiumParser } from './parser/langium-parser-builder.js';\r\nimport { DefaultTokenBuilder } from './parser/token-builder.js';\r\nimport { DefaultValueConverter } from './parser/value-converter.js';\r\nimport { DefaultLinker } from './references/linker.js';\r\nimport { DefaultNameProvider } from './references/name-provider.js';\r\nimport { DefaultReferences } from './references/references.js';\r\nimport { DefaultScopeComputation } from './references/scope-computation.js';\r\nimport { DefaultScopeProvider } from './references/scope-provider.js';\r\nimport { DefaultJsonSerializer } from './serializer/json-serializer.js';\r\nimport { DefaultServiceRegistry } from './service-registry.js';\r\nimport { DefaultDocumentValidator } from './validation/document-validator.js';\r\nimport { ValidationRegistry } from './validation/validation-registry.js';\r\nimport { DefaultAstNodeDescriptionProvider, DefaultReferenceDescriptionProvider } from './workspace/ast-descriptions.js';\r\nimport { DefaultAstNodeLocator } from './workspace/ast-node-locator.js';\r\nimport { DefaultConfigurationProvider } from './workspace/configuration.js';\r\nimport { DefaultDocumentBuilder } from './workspace/document-builder.js';\r\nimport { DefaultLangiumDocumentFactory, DefaultLangiumDocuments } from './workspace/documents.js';\r\nimport { DefaultIndexManager } from './workspace/index-manager.js';\r\nimport { DefaultWorkspaceManager } from './workspace/workspace-manager.js';\r\nimport { DefaultLexer, DefaultLexerErrorMessageProvider } from './parser/lexer.js';\r\nimport { JSDocDocumentationProvider } from './documentation/documentation-provider.js';\r\nimport { DefaultCommentProvider } from './documentation/comment-provider.js';\r\nimport { LangiumParserErrorMessageProvider } from './parser/langium-parser.js';\r\nimport { DefaultAsyncParser } from './parser/async-parser.js';\r\nimport { DefaultWorkspaceLock } from './workspace/workspace-lock.js';\r\nimport { DefaultHydrator } from './serializer/hydrator.js';\r\n\r\n/**\r\n * Context required for creating the default language-specific dependency injection module.\r\n */\r\nexport interface DefaultCoreModuleContext {\r\n shared: LangiumSharedCoreServices;\r\n}\r\n\r\n/**\r\n * Creates a dependency injection module configuring the default core services.\r\n * This is a set of services that are dedicated to a specific language.\r\n */\r\nexport function createDefaultCoreModule(context: DefaultCoreModuleContext): Module {\r\n return {\r\n documentation: {\r\n CommentProvider: (services) => new DefaultCommentProvider(services),\r\n DocumentationProvider: (services) => new JSDocDocumentationProvider(services)\r\n },\r\n parser: {\r\n AsyncParser: (services) => new DefaultAsyncParser(services),\r\n GrammarConfig: (services) => createGrammarConfig(services),\r\n LangiumParser: (services) => createLangiumParser(services),\r\n CompletionParser: (services) => createCompletionParser(services),\r\n ValueConverter: () => new DefaultValueConverter(),\r\n TokenBuilder: () => new DefaultTokenBuilder(),\r\n Lexer: (services) => new DefaultLexer(services),\r\n ParserErrorMessageProvider: () => new LangiumParserErrorMessageProvider(),\r\n LexerErrorMessageProvider: () => new DefaultLexerErrorMessageProvider()\r\n },\r\n workspace: {\r\n AstNodeLocator: () => new DefaultAstNodeLocator(),\r\n AstNodeDescriptionProvider: (services) => new DefaultAstNodeDescriptionProvider(services),\r\n ReferenceDescriptionProvider: (services) => new DefaultReferenceDescriptionProvider(services)\r\n },\r\n references: {\r\n Linker: (services) => new DefaultLinker(services),\r\n NameProvider: () => new DefaultNameProvider(),\r\n ScopeProvider: (services) => new DefaultScopeProvider(services),\r\n ScopeComputation: (services) => new DefaultScopeComputation(services),\r\n References: (services) => new DefaultReferences(services)\r\n },\r\n serializer: {\r\n Hydrator: (services) => new DefaultHydrator(services),\r\n JsonSerializer: (services) => new DefaultJsonSerializer(services)\r\n },\r\n validation: {\r\n DocumentValidator: (services) => new DefaultDocumentValidator(services),\r\n ValidationRegistry: (services) => new ValidationRegistry(services)\r\n },\r\n shared: () => context.shared\r\n };\r\n}\r\n\r\n/**\r\n * Context required for creating the default shared dependency injection module.\r\n */\r\nexport interface DefaultSharedCoreModuleContext {\r\n /**\r\n * Factory function to create a {@link FileSystemProvider}.\r\n *\r\n * Langium exposes an `EmptyFileSystem` and `NodeFileSystem`, exported through `langium/node`.\r\n * When running Langium as part of a vscode language server or a Node.js app, using the `NodeFileSystem` is recommended,\r\n * the `EmptyFileSystem` in every other use case.\r\n */\r\n fileSystemProvider: (services: LangiumSharedCoreServices) => FileSystemProvider;\r\n}\r\n\r\n/**\r\n * Creates a dependency injection module configuring the default shared core services.\r\n * This is the set of services that are shared between multiple languages.\r\n */\r\nexport function createDefaultSharedCoreModule(context: DefaultSharedCoreModuleContext): Module {\r\n return {\r\n ServiceRegistry: (services) => new DefaultServiceRegistry(services),\r\n workspace: {\r\n LangiumDocuments: (services) => new DefaultLangiumDocuments(services),\r\n LangiumDocumentFactory: (services) => new DefaultLangiumDocumentFactory(services),\r\n DocumentBuilder: (services) => new DefaultDocumentBuilder(services),\r\n IndexManager: (services) => new DefaultIndexManager(services),\r\n WorkspaceManager: (services) => new DefaultWorkspaceManager(services),\r\n FileSystemProvider: (services) => context.fileSystemProvider(services),\r\n WorkspaceLock: () => new DefaultWorkspaceLock(),\r\n ConfigurationProvider: (services) => new DefaultConfigurationProvider(services)\r\n }\r\n };\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\n/**\r\n * A `Module` is a description of possibly grouped service factories.\r\n *\r\n * Given a type I = { group: { service: A } },\r\n * Module := { group: { service: (injector: I) => A } }\r\n *\r\n * Making `I` available during the creation of `I` allows us to create cyclic\r\n * dependencies.\r\n */\r\nexport type Module = {\r\n [K in keyof T]: Module | ((injector: I) => T[K])\r\n}\r\n\r\nexport namespace Module {\r\n export const merge = (m1: Module, m2: Module) => (_merge(_merge({}, m1), m2) as Module);\r\n}\r\n\r\n/**\r\n * Given a set of modules, the inject function returns a lazily evaluated injector\r\n * that injects dependencies into the requested service when it is requested the\r\n * first time. Subsequent requests will return the same service.\r\n *\r\n * In the case of cyclic dependencies, an Error will be thrown. This can be fixed\r\n * by injecting a provider `() => T` instead of a `T`.\r\n *\r\n * Please note that the arguments may be objects or arrays. However, the result will\r\n * be an object. Using it with for..of will have no effect.\r\n *\r\n * @param module1 first Module\r\n * @param module2 (optional) second Module\r\n * @param module3 (optional) third Module\r\n * @param module4 (optional) fourth Module\r\n * @param module5 (optional) fifth Module\r\n * @param module6 (optional) sixth Module\r\n * @param module7 (optional) seventh Module\r\n * @param module8 (optional) eighth Module\r\n * @param module9 (optional) ninth Module\r\n * @returns a new object of type I\r\n */\r\nexport function inject(\r\n module1: Module, module2?: Module, module3?: Module, module4?: Module, module5?: Module, module6?: Module, module7?: Module, module8?: Module, module9?: Module\r\n): I {\r\n const module = [module1, module2, module3, module4, module5, module6, module7, module8, module9].reduce(_merge, {}) as Module;\r\n return _inject(module);\r\n}\r\n\r\nconst isProxy = Symbol('isProxy');\r\n\r\n/**\r\n * Eagerly load all services in the given dependency injection container. This is sometimes\r\n * necessary because services can register event listeners in their constructors.\r\n */\r\nexport function eagerLoad(item: T): T {\r\n if (item && (item as any)[isProxy]) {\r\n for (const value of Object.values(item)) {\r\n eagerLoad(value);\r\n }\r\n }\r\n return item;\r\n}\r\n\r\n/**\r\n * Helper function that returns an injector by creating a proxy.\r\n * Invariant: injector is of type I. If injector is undefined, then T = I.\r\n */\r\nfunction _inject(module: Module, injector?: any): T {\r\n const proxy: any = new Proxy({} as any, {\r\n deleteProperty: () => false,\r\n set: () => {\r\n throw new Error('Cannot set property on injected service container');\r\n },\r\n get: (obj, prop) => {\r\n if (prop === isProxy) {\r\n return true;\r\n } else {\r\n return _resolve(obj, prop, module, injector || proxy);\r\n }\r\n },\r\n getOwnPropertyDescriptor: (obj, prop) => (_resolve(obj, prop, module, injector || proxy), Object.getOwnPropertyDescriptor(obj, prop)), // used by for..in\r\n has: (_, prop) => prop in module, // used by ..in..\r\n ownKeys: () => [...Object.getOwnPropertyNames(module)] // used by for..in\r\n });\r\n return proxy;\r\n}\r\n\r\n/**\r\n * Internally used to tag a requested dependency, directly before calling the factory.\r\n * This allows us to find cycles during instance creation.\r\n */\r\nconst __requested__ = Symbol();\r\n\r\n/**\r\n * Returns the value `obj[prop]`. If the value does not exist, yet, it is resolved from\r\n * the module description. The result of service factories is cached. Groups are\r\n * recursively proxied.\r\n *\r\n * @param obj an object holding all group proxies and services\r\n * @param prop the key of a value within obj\r\n * @param module an object containing groups and service factories\r\n * @param injector the first level proxy that provides access to all values\r\n * @returns the requested value `obj[prop]`\r\n * @throws Error if a dependency cycle is detected\r\n */\r\nfunction _resolve(obj: any, prop: string | symbol | number, module: Module, injector: I): T[keyof T] | undefined {\r\n if (prop in obj) {\r\n if (obj[prop] instanceof Error) {\r\n throw new Error('Construction failure. Please make sure that your dependencies are constructable.', {cause: obj[prop]});\r\n }\r\n if (obj[prop] === __requested__) {\r\n throw new Error('Cycle detected. Please make \"' + String(prop) + '\" lazy. Visit https://langium.org/docs/reference/configuration-services/#resolving-cyclic-dependencies');\r\n }\r\n return obj[prop];\r\n } else if (prop in module) {\r\n const value: Module | ((injector: I) => T[keyof T]) = module[prop as keyof T];\r\n obj[prop] = __requested__;\r\n try {\r\n obj[prop] = (typeof value === 'function') ? value(injector) : _inject(value, injector);\r\n } catch (error) {\r\n obj[prop] = error instanceof Error ? error : undefined;\r\n throw error;\r\n }\r\n return obj[prop];\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * Performs a deep-merge of two modules by writing source entries into the target module.\r\n *\r\n * @param target the module which is written\r\n * @param source the module which is read\r\n * @returns the target module\r\n */\r\nfunction _merge(target: Module, source?: Module): Module {\r\n if (source) {\r\n for (const [key, value2] of Object.entries(source)) {\r\n if (value2 !== undefined) {\r\n const value1 = target[key];\r\n if (value1 !== null && value2 !== null && typeof value1 === 'object' && typeof value2 === 'object') {\r\n target[key] = _merge(value1, value2);\r\n } else {\r\n target[key] = value2;\r\n }\r\n }\r\n }\r\n }\r\n return target;\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\n// Ensure that all imports are erased at runtime to avoid circular dependencies.\r\nimport type { IParserErrorMessageProvider, ILexerErrorMessageProvider } from 'chevrotain';\r\nimport type { CommentProvider } from './documentation/comment-provider.js';\r\nimport type { DocumentationProvider } from './documentation/documentation-provider.js';\r\nimport type { Grammar } from './languages/generated/ast.js';\r\nimport type { GrammarConfig } from './languages/grammar-config.js';\r\nimport type { LanguageMetaData } from './languages/language-meta-data.js';\r\nimport type { AsyncParser } from './parser/async-parser.js';\r\nimport type { LangiumCompletionParser, LangiumParser } from './parser/langium-parser.js';\r\nimport type { Lexer } from './parser/lexer.js';\r\nimport type { IParserConfig } from './parser/parser-config.js';\r\nimport type { TokenBuilder } from './parser/token-builder.js';\r\nimport type { ValueConverter } from './parser/value-converter.js';\r\nimport type { Linker } from './references/linker.js';\r\nimport type { NameProvider } from './references/name-provider.js';\r\nimport type { References } from './references/references.js';\r\nimport type { ScopeComputation } from './references/scope-computation.js';\r\nimport type { ScopeProvider } from './references/scope-provider.js';\r\nimport type { JsonSerializer } from './serializer/json-serializer.js';\r\nimport type { ServiceRegistry } from './service-registry.js';\r\nimport type { AstReflection } from './syntax-tree.js';\r\nimport type { DocumentValidator } from './validation/document-validator.js';\r\nimport type { ValidationRegistry } from './validation/validation-registry.js';\r\nimport type { AstNodeDescriptionProvider, ReferenceDescriptionProvider } from './workspace/ast-descriptions.js';\r\nimport type { AstNodeLocator } from './workspace/ast-node-locator.js';\r\nimport type { ConfigurationProvider } from './workspace/configuration.js';\r\nimport type { DocumentBuilder } from './workspace/document-builder.js';\r\nimport type { LangiumDocumentFactory, LangiumDocuments, TextDocumentProvider } from './workspace/documents.js';\r\nimport type { FileSystemProvider } from './workspace/file-system-provider.js';\r\nimport type { IndexManager } from './workspace/index-manager.js';\r\nimport type { WorkspaceLock } from './workspace/workspace-lock.js';\r\nimport type { Hydrator } from './serializer/hydrator.js';\r\nimport type { WorkspaceManager } from './workspace/workspace-manager.js';\r\n\r\n/**\r\n * The services generated by `langium-cli` for a specific language. These are derived from the\r\n * grammar definition and the language configuration.\r\n */\r\nexport type LangiumGeneratedCoreServices = {\r\n readonly Grammar: Grammar\r\n readonly LanguageMetaData: LanguageMetaData\r\n readonly parser: {\r\n readonly ParserConfig?: IParserConfig\r\n }\r\n}\r\n\r\n/**\r\n * Core services for a specific language of which Langium provides default implementations.\r\n */\r\nexport type LangiumDefaultCoreServices = {\r\n readonly parser: {\r\n readonly AsyncParser: AsyncParser\r\n readonly GrammarConfig: GrammarConfig\r\n readonly ValueConverter: ValueConverter\r\n readonly LangiumParser: LangiumParser\r\n readonly ParserErrorMessageProvider: IParserErrorMessageProvider\r\n readonly LexerErrorMessageProvider: ILexerErrorMessageProvider\r\n readonly CompletionParser: LangiumCompletionParser\r\n readonly TokenBuilder: TokenBuilder\r\n readonly Lexer: Lexer\r\n }\r\n readonly documentation: {\r\n readonly CommentProvider: CommentProvider\r\n readonly DocumentationProvider: DocumentationProvider\r\n }\r\n readonly references: {\r\n readonly Linker: Linker\r\n readonly NameProvider: NameProvider\r\n readonly References: References\r\n readonly ScopeProvider: ScopeProvider\r\n readonly ScopeComputation: ScopeComputation\r\n }\r\n readonly serializer: {\r\n readonly Hydrator: Hydrator\r\n readonly JsonSerializer: JsonSerializer\r\n }\r\n readonly validation: {\r\n readonly DocumentValidator: DocumentValidator\r\n readonly ValidationRegistry: ValidationRegistry\r\n }\r\n readonly workspace: {\r\n readonly AstNodeLocator: AstNodeLocator\r\n readonly AstNodeDescriptionProvider: AstNodeDescriptionProvider\r\n readonly ReferenceDescriptionProvider: ReferenceDescriptionProvider\r\n }\r\n readonly shared: LangiumSharedCoreServices\r\n}\r\n\r\n/**\r\n * The core set of services available for a language. These are either generated by `langium-cli`\r\n * or provided as default implementations.\r\n */\r\nexport type LangiumCoreServices = LangiumGeneratedCoreServices & LangiumDefaultCoreServices\r\n\r\n/**\r\n * The services generated by `langium-cli` that are shared between multiple languages. These are\r\n * derived from the grammar definition.\r\n */\r\nexport type LangiumGeneratedSharedCoreServices = {\r\n readonly AstReflection: AstReflection\r\n}\r\n\r\n/**\r\n * Core services shared between multiple languages where Langium provides default implementations.\r\n */\r\nexport type LangiumDefaultSharedCoreServices = {\r\n readonly ServiceRegistry: ServiceRegistry\r\n readonly workspace: {\r\n readonly ConfigurationProvider: ConfigurationProvider\r\n readonly DocumentBuilder: DocumentBuilder\r\n readonly FileSystemProvider: FileSystemProvider\r\n readonly IndexManager: IndexManager\r\n readonly LangiumDocuments: LangiumDocuments\r\n readonly LangiumDocumentFactory: LangiumDocumentFactory\r\n readonly TextDocuments?: TextDocumentProvider\r\n readonly WorkspaceLock: WorkspaceLock\r\n readonly WorkspaceManager: WorkspaceManager\r\n }\r\n}\r\n\r\n/**\r\n * The shared core services are a set of services that are used by every language within a Langium project (excluding LSP services)\r\n * This is necessary to enable features like cross references across different languages.\r\n */\r\nexport type LangiumSharedCoreServices = LangiumDefaultSharedCoreServices & LangiumGeneratedSharedCoreServices\r\n\r\n/**\r\n * A deep partial type definition for services. We look into T to see whether its type definition contains\r\n * any methods. If it does, it's one of our services and therefore should not be partialized.\r\n */\r\n//eslint-disable-next-line @typescript-eslint/ban-types\r\nexport type DeepPartial = T[keyof T] extends Function ? T : {\r\n [P in keyof T]?: DeepPartial;\r\n}\r\n\r\n/**\r\n * Language-specific core services to be partially overridden via dependency injection.\r\n */\r\nexport type PartialLangiumCoreServices = DeepPartial\r\n\r\n/**\r\n * Shared core services to be partially overridden via dependency injection.\r\n */\r\nexport type PartialLangiumSharedCoreServices = DeepPartial\r\n", "/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nexport * from './comment-provider.js';\r\nexport * from './documentation-provider.js';\r\nexport * from './jsdoc.js';\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\n/**\r\n * Metadata of a language.\r\n */\r\nexport interface LanguageMetaData {\r\n languageId: string;\r\n fileExtensions: readonly string[];\r\n caseInsensitive: boolean;\r\n /**\r\n * Mode used to optimize code for development or production environments.\r\n *\r\n * In production mode, all Chevrotain lexer/parser validations are disabled.\r\n */\r\n mode: 'development' | 'production';\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nexport * from './grammar-config.js';\r\nexport * from './language-meta-data.js';\r\n", "/******************************************************************************\r\n * Copyright 2024 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { CustomPatternMatcherFunc, TokenType, IToken, IMultiModeLexerDefinition, TokenVocabulary } from 'chevrotain';\r\nimport type { Grammar, TerminalRule } from '../languages/generated/ast.js';\r\nimport type { LexingReport, TokenBuilderOptions } from './token-builder.js';\r\nimport type { LexerResult, TokenizeOptions } from './lexer.js';\r\nimport type { LangiumCoreServices } from '../services.js';\r\nimport { createToken, createTokenInstance, Lexer } from 'chevrotain';\r\nimport { DefaultTokenBuilder } from './token-builder.js';\r\nimport { DEFAULT_TOKENIZE_OPTIONS, DefaultLexer, isTokenTypeArray } from './lexer.js';\r\n\r\ntype IndentationAwareDelimiter = [begin: TokenName, end: TokenName];\r\n\r\nexport interface IndentationTokenBuilderOptions {\r\n /**\r\n * The name of the token used to denote indentation in the grammar.\r\n * A possible definition in the grammar could look like this:\r\n * ```langium\r\n * terminal INDENT: ':synthetic-indent:';\r\n * ```\r\n *\r\n * @default 'INDENT'\r\n */\r\n indentTokenName: TerminalName;\r\n /**\r\n * The name of the token used to denote deindentation in the grammar.\r\n * A possible definition in the grammar could look like this:\r\n * ```langium\r\n * terminal DEDENT: ':synthetic-dedent:';\r\n * ```\r\n *\r\n * @default 'DEDENT'\r\n */\r\n dedentTokenName: TerminalName;\r\n /**\r\n * The name of the token used to denote whitespace other than indentation and newlines in the grammar.\r\n * A possible definition in the grammar could look like this:\r\n * ```langium\r\n * hidden terminal WS: /[ \\t]+/;\r\n * ```\r\n *\r\n * @default 'WS'\r\n */\r\n whitespaceTokenName: TerminalName;\r\n /**\r\n * The delimiter tokens inside of which indentation should be ignored and treated as normal whitespace.\r\n * For example, Python doesn't treat any whitespace between `(` and `)` as significant.\r\n *\r\n * Can be either terminal tokens or keyword tokens.\r\n *\r\n * @default []\r\n */\r\n ignoreIndentationDelimiters: Array>\r\n}\r\n\r\nexport const indentationBuilderDefaultOptions: IndentationTokenBuilderOptions = {\r\n indentTokenName: 'INDENT',\r\n dedentTokenName: 'DEDENT',\r\n whitespaceTokenName: 'WS',\r\n ignoreIndentationDelimiters: [],\r\n};\r\n\r\nexport enum LexingMode {\r\n REGULAR = 'indentation-sensitive',\r\n IGNORE_INDENTATION = 'ignore-indentation',\r\n}\r\n\r\nexport interface IndentationLexingReport extends LexingReport {\r\n /** Dedent tokens that are necessary to close the remaining indents. */\r\n remainingDedents: IToken[];\r\n}\r\n\r\n/**\r\n * A token builder that is sensitive to indentation in the input text.\r\n * It will generate tokens for indentation and dedentation based on the indentation level.\r\n *\r\n * The first generic parameter corresponds to the names of terminal tokens,\r\n * while the second one corresponds to the names of keyword tokens.\r\n * Both parameters are optional and can be imported from `./generated/ast.js`.\r\n *\r\n * Inspired by https://github.com/chevrotain/chevrotain/blob/master/examples/lexer/python_indentation/python_indentation.js\r\n */\r\nexport class IndentationAwareTokenBuilder extends DefaultTokenBuilder {\r\n /**\r\n * The stack stores all the previously matched indentation levels to understand how deeply the next tokens are nested.\r\n * The stack is valid for lexing\r\n */\r\n protected indentationStack: number[] = [0];\r\n\r\n readonly options: IndentationTokenBuilderOptions;\r\n\r\n /**\r\n * The token type to be used for indentation tokens\r\n */\r\n readonly indentTokenType: TokenType;\r\n\r\n /**\r\n * The token type to be used for dedentation tokens\r\n */\r\n readonly dedentTokenType: TokenType;\r\n\r\n /**\r\n * A regular expression to match a series of tabs and/or spaces.\r\n * Override this to customize what the indentation is allowed to consist of.\r\n */\r\n protected whitespaceRegExp = /[ \\t]+/y;\r\n\r\n constructor(options: Partial, NoInfer>> = indentationBuilderDefaultOptions as IndentationTokenBuilderOptions) {\r\n super();\r\n this.options = {\r\n ...indentationBuilderDefaultOptions as IndentationTokenBuilderOptions,\r\n ...options,\r\n };\r\n\r\n this.indentTokenType = createToken({\r\n name: this.options.indentTokenName,\r\n pattern: this.indentMatcher.bind(this),\r\n line_breaks: false,\r\n });\r\n\r\n this.dedentTokenType = createToken({\r\n name: this.options.dedentTokenName,\r\n pattern: this.dedentMatcher.bind(this),\r\n line_breaks: false,\r\n });\r\n }\r\n\r\n override buildTokens(grammar: Grammar, options?: TokenBuilderOptions | undefined): TokenVocabulary {\r\n const tokenTypes = super.buildTokens(grammar, options);\r\n if (!isTokenTypeArray(tokenTypes)) {\r\n throw new Error('Invalid tokens built by default builder');\r\n }\r\n\r\n const { indentTokenName, dedentTokenName, whitespaceTokenName, ignoreIndentationDelimiters } = this.options;\r\n\r\n // Rearrange tokens because whitespace (which is ignored) goes to the beginning by default, consuming indentation as well\r\n // Order should be: dedent, indent, spaces\r\n let dedent: TokenType | undefined;\r\n let indent: TokenType | undefined;\r\n let ws: TokenType | undefined;\r\n const otherTokens: TokenType[] = [];\r\n for (const tokenType of tokenTypes) {\r\n for (const [begin, end] of ignoreIndentationDelimiters) {\r\n if (tokenType.name === begin) {\r\n tokenType.PUSH_MODE = LexingMode.IGNORE_INDENTATION;\r\n } else if (tokenType.name === end) {\r\n tokenType.POP_MODE = true;\r\n }\r\n }\r\n if (tokenType.name === dedentTokenName) {\r\n dedent = tokenType;\r\n } else if (tokenType.name === indentTokenName) {\r\n indent = tokenType;\r\n } else if (tokenType.name === whitespaceTokenName) {\r\n ws = tokenType;\r\n } else {\r\n otherTokens.push(tokenType);\r\n }\r\n }\r\n if (!dedent || !indent || !ws) {\r\n throw new Error('Some indentation/whitespace tokens not found!');\r\n }\r\n\r\n if (ignoreIndentationDelimiters.length > 0) {\r\n const multiModeLexerDef: IMultiModeLexerDefinition = {\r\n modes: {\r\n [LexingMode.REGULAR]: [dedent, indent, ...otherTokens, ws],\r\n [LexingMode.IGNORE_INDENTATION]: [...otherTokens, ws],\r\n },\r\n defaultMode: LexingMode.REGULAR,\r\n };\r\n return multiModeLexerDef;\r\n } else {\r\n return [dedent, indent, ws, ...otherTokens];\r\n }\r\n }\r\n\r\n override flushLexingReport(text: string): IndentationLexingReport {\r\n const result = super.flushLexingReport(text);\r\n return {\r\n ...result,\r\n remainingDedents: this.flushRemainingDedents(text),\r\n };\r\n }\r\n\r\n /**\r\n * Helper function to check if the current position is the start of a new line.\r\n *\r\n * @param text The full input string.\r\n * @param offset The current position at which to check\r\n * @returns Whether the current position is the start of a new line\r\n */\r\n protected isStartOfLine(text: string, offset: number): boolean {\r\n return offset === 0 || '\\r\\n'.includes(text[offset - 1]);\r\n }\r\n\r\n /**\r\n * A helper function used in matching both indents and dedents.\r\n *\r\n * @param text The full input string.\r\n * @param offset The current position at which to attempt a match\r\n * @param tokens Previously scanned tokens\r\n * @param groups Token Groups\r\n * @returns The current and previous indentation levels and the matched whitespace\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n protected matchWhitespace(text: string, offset: number, tokens: IToken[], groups: Record): { currIndentLevel: number, prevIndentLevel: number, match: RegExpExecArray | null } {\r\n this.whitespaceRegExp.lastIndex = offset;\r\n const match = this.whitespaceRegExp.exec(text);\r\n return {\r\n currIndentLevel: match?.[0].length ?? 0,\r\n prevIndentLevel: this.indentationStack.at(-1)!,\r\n match,\r\n };\r\n }\r\n\r\n /**\r\n * Helper function to create an instance of an indentation token.\r\n *\r\n * @param tokenType Indent or dedent token type\r\n * @param text Full input string, used to calculate the line number\r\n * @param image The original image of the token (tabs or spaces)\r\n * @param offset Current position in the input string\r\n * @returns The indentation token instance\r\n */\r\n protected createIndentationTokenInstance(tokenType: TokenType, text: string, image: string, offset: number): IToken {\r\n const lineNumber = this.getLineNumber(text, offset);\r\n return createTokenInstance(\r\n tokenType,\r\n image,\r\n offset, offset + image.length,\r\n lineNumber, lineNumber,\r\n 1, image.length,\r\n );\r\n }\r\n\r\n /**\r\n * Helper function to get the line number at a given offset.\r\n *\r\n * @param text Full input string, used to calculate the line number\r\n * @param offset Current position in the input string\r\n * @returns The line number at the given offset\r\n */\r\n protected getLineNumber(text: string, offset: number): number {\r\n return text.substring(0, offset).split(/\\r\\n|\\r|\\n/).length;\r\n }\r\n\r\n /**\r\n * A custom pattern for matching indents\r\n *\r\n * @param text The full input string.\r\n * @param offset The offset at which to attempt a match\r\n * @param tokens Previously scanned tokens\r\n * @param groups Token Groups\r\n */\r\n protected indentMatcher(text: string, offset: number, tokens: IToken[], groups: Record): ReturnType {\r\n if (!this.isStartOfLine(text, offset)) {\r\n return null;\r\n }\r\n\r\n const { currIndentLevel, prevIndentLevel, match } = this.matchWhitespace(text, offset, tokens, groups);\r\n\r\n if (currIndentLevel <= prevIndentLevel) {\r\n // shallower indentation (should be matched by dedent)\r\n // or same indentation level (should be matched by whitespace and ignored)\r\n return null;\r\n }\r\n\r\n this.indentationStack.push(currIndentLevel);\r\n\r\n return match;\r\n }\r\n\r\n /**\r\n * A custom pattern for matching dedents\r\n *\r\n * @param text The full input string.\r\n * @param offset The offset at which to attempt a match\r\n * @param tokens Previously scanned tokens\r\n * @param groups Token Groups\r\n */\r\n protected dedentMatcher(text: string, offset: number, tokens: IToken[], groups: Record): ReturnType {\r\n if (!this.isStartOfLine(text, offset)) {\r\n return null;\r\n }\r\n\r\n const { currIndentLevel, prevIndentLevel, match } = this.matchWhitespace(text, offset, tokens, groups);\r\n\r\n if (currIndentLevel >= prevIndentLevel) {\r\n // bigger indentation (should be matched by indent)\r\n // or same indentation level (should be matched by whitespace and ignored)\r\n return null;\r\n }\r\n\r\n const matchIndentIndex = this.indentationStack.lastIndexOf(currIndentLevel);\r\n\r\n // Any dedent must match some previous indentation level.\r\n if (matchIndentIndex === -1) {\r\n this.diagnostics.push({\r\n severity: 'error',\r\n message: `Invalid dedent level ${currIndentLevel} at offset: ${offset}. Current indentation stack: ${this.indentationStack}`,\r\n offset,\r\n length: match?.[0]?.length ?? 0,\r\n line: this.getLineNumber(text, offset),\r\n column: 1\r\n });\r\n return null;\r\n }\r\n\r\n const numberOfDedents = this.indentationStack.length - matchIndentIndex - 1;\r\n const newlinesBeforeDedent = text.substring(0, offset).match(/[\\r\\n]+$/)?.[0].length ?? 1;\r\n\r\n for (let i = 0; i < numberOfDedents; i++) {\r\n const token = this.createIndentationTokenInstance(\r\n this.dedentTokenType,\r\n text,\r\n '', // Dedents are 0-width tokens\r\n offset - (newlinesBeforeDedent - 1), // Place the dedent after the first new line character\r\n );\r\n tokens.push(token);\r\n this.indentationStack.pop();\r\n }\r\n\r\n // Token already added, let the dedentation now be consumed as whitespace (if any) and ignored\r\n return null;\r\n }\r\n\r\n protected override buildTerminalToken(terminal: TerminalRule): TokenType {\r\n const tokenType = super.buildTerminalToken(terminal);\r\n const { indentTokenName, dedentTokenName, whitespaceTokenName } = this.options;\r\n\r\n if (tokenType.name === indentTokenName) {\r\n return this.indentTokenType;\r\n } else if (tokenType.name === dedentTokenName) {\r\n return this.dedentTokenType;\r\n } else if (tokenType.name === whitespaceTokenName) {\r\n return createToken({\r\n name: whitespaceTokenName,\r\n pattern: this.whitespaceRegExp,\r\n group: Lexer.SKIPPED,\r\n });\r\n }\r\n return tokenType;\r\n }\r\n\r\n /**\r\n * Resets the indentation stack between different runs of the lexer\r\n *\r\n * @param text Full text that was tokenized\r\n * @returns Remaining dedent tokens to match all previous indents at the end of the file\r\n */\r\n flushRemainingDedents(text: string): IToken[] {\r\n const remainingDedents: IToken[] = [];\r\n while (this.indentationStack.length > 1) {\r\n remainingDedents.push(\r\n this.createIndentationTokenInstance(this.dedentTokenType, text, '', text.length)\r\n );\r\n this.indentationStack.pop();\r\n }\r\n\r\n this.indentationStack = [0];\r\n return remainingDedents;\r\n }\r\n}\r\n\r\n/**\r\n * A lexer that is aware of indentation in the input text.\r\n * The only purpose of this lexer is to reset the internal state of the {@link IndentationAwareTokenBuilder}\r\n * between the tokenization of different text inputs.\r\n *\r\n * In your module, you can override the default lexer with this one as such:\r\n * ```ts\r\n * parser: {\r\n * TokenBuilder: () => new IndentationAwareTokenBuilder(),\r\n * Lexer: (services) => new IndentationAwareLexer(services),\r\n * }\r\n * ```\r\n */\r\nexport class IndentationAwareLexer extends DefaultLexer {\r\n\r\n protected readonly indentationTokenBuilder: IndentationAwareTokenBuilder;\r\n\r\n constructor(services: LangiumCoreServices) {\r\n super(services);\r\n if (services.parser.TokenBuilder instanceof IndentationAwareTokenBuilder) {\r\n this.indentationTokenBuilder = services.parser.TokenBuilder;\r\n } else {\r\n throw new Error('IndentationAwareLexer requires an accompanying IndentationAwareTokenBuilder');\r\n }\r\n }\r\n\r\n override tokenize(text: string, options: TokenizeOptions = DEFAULT_TOKENIZE_OPTIONS): LexerResult {\r\n const result = super.tokenize(text);\r\n\r\n // consuming all remaining dedents and remove them as they might not be serializable\r\n const report = result.report as IndentationLexingReport;\r\n if (options?.mode === 'full') {\r\n // auto-complete document with remaining dedents\r\n result.tokens.push(...report.remainingDedents);\r\n }\r\n report.remainingDedents = [];\r\n\r\n // remove any \"indent-dedent\" pair with an empty body as these are typically\r\n // added by comments or lines with just whitespace but have no real value\r\n const { indentTokenType, dedentTokenType } = this.indentationTokenBuilder;\r\n // Use tokenTypeIdx for fast comparison\r\n const indentTokenIdx = indentTokenType.tokenTypeIdx;\r\n const dedentTokenIdx = dedentTokenType.tokenTypeIdx;\r\n const cleanTokens: IToken[] = [];\r\n const length = result.tokens.length - 1;\r\n for (let i = 0; i < length; i++) {\r\n const token = result.tokens[i];\r\n const nextToken = result.tokens[i + 1];\r\n if (token.tokenTypeIdx === indentTokenIdx && nextToken.tokenTypeIdx === dedentTokenIdx) {\r\n i++;\r\n continue;\r\n }\r\n\r\n cleanTokens.push(token);\r\n }\r\n // Push last token separately\r\n if (length >= 0) {\r\n cleanTokens.push(result.tokens[length]);\r\n }\r\n result.tokens = cleanTokens;\r\n\r\n return result;\r\n }\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nexport type { IParserConfig } from 'chevrotain';\r\n", "/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nexport * from './async-parser.js';\r\nexport * from './completion-parser-builder.js';\r\nexport * from './cst-node-builder.js';\r\nexport * from './indentation-aware.js';\r\nexport * from './langium-parser-builder.js';\r\nexport * from './langium-parser.js';\r\nexport * from './lexer.js';\r\nexport * from './parser-builder-base.js';\r\nexport * from './parser-config.js';\r\nexport * from './token-builder.js';\r\nexport * from './value-converter.js';\r\n", "/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nexport * from './linker.js';\r\nexport * from './name-provider.js';\r\nexport * from './references.js';\r\nexport * from './scope.js';\r\nexport * from './scope-computation.js';\r\nexport * from './scope-provider.js';\r\n", "/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nexport * from './hydrator.js';\r\nexport * from './json-serializer.js';\r\n", "/******************************************************************************\r\n * Copyright 2022 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport type { URI } from '../utils/uri-utils.js';\r\n\r\nexport interface FileSystemNode {\r\n readonly isFile: boolean;\r\n readonly isDirectory: boolean;\r\n readonly uri: URI;\r\n}\r\n\r\nexport type FileSystemFilter = (node: FileSystemNode) => boolean;\r\n\r\n/**\r\n * Provides methods to interact with an abstract file system. The default implementation is based on the node.js `fs` API.\r\n */\r\nexport interface FileSystemProvider {\r\n /**\r\n * Reads a document asynchronously from a given URI.\r\n * @returns The string content of the file with the specified URI.\r\n */\r\n readFile(uri: URI): Promise;\r\n /**\r\n * Reads the directory information for the given URI.\r\n * @returns The list of file system entries that are contained within the specified directory.\r\n */\r\n readDirectory(uri: URI): Promise;\r\n}\r\n\r\nexport class EmptyFileSystemProvider implements FileSystemProvider {\r\n\r\n readFile(): Promise {\r\n throw new Error('No file system is available.');\r\n }\r\n\r\n async readDirectory(): Promise {\r\n return [];\r\n }\r\n\r\n}\r\n\r\nexport const EmptyFileSystem = {\r\n fileSystemProvider: () => new EmptyFileSystemProvider()\r\n};\r\n", "/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nimport { createDefaultCoreModule, createDefaultSharedCoreModule } from '../default-module.js';\r\nimport type { Module } from '../dependency-injection.js';\r\nimport { inject } from '../dependency-injection.js';\r\nimport * as ast from '../languages/generated/ast.js';\r\nimport type { LangiumCoreServices, LangiumSharedCoreServices, PartialLangiumCoreServices, PartialLangiumSharedCoreServices } from '../services.js';\r\nimport type { Mutable } from '../syntax-tree.js';\r\nimport { EmptyFileSystem } from '../workspace/file-system-provider.js';\r\nimport { URI } from './uri-utils.js';\r\n\r\nconst minimalGrammarModule: Module = {\r\n Grammar: () => undefined as unknown as ast.Grammar,\r\n LanguageMetaData: () => ({\r\n caseInsensitive: false,\r\n fileExtensions: ['.langium'],\r\n languageId: 'langium'\r\n })\r\n};\r\n\r\nconst minimalSharedGrammarModule: Module = {\r\n AstReflection: () => new ast.LangiumGrammarAstReflection()\r\n};\r\n\r\nfunction createMinimalGrammarServices(): LangiumCoreServices {\r\n const shared = inject(\r\n createDefaultSharedCoreModule(EmptyFileSystem),\r\n minimalSharedGrammarModule\r\n );\r\n const grammar = inject(\r\n createDefaultCoreModule({ shared }),\r\n minimalGrammarModule\r\n );\r\n shared.ServiceRegistry.register(grammar);\r\n return grammar;\r\n}\r\n\r\n/**\r\n * Load a Langium grammar for your language from a JSON string. This is used by several services,\r\n * most notably the parser builder which interprets the grammar to create a parser.\r\n */\r\nexport function loadGrammarFromJson(json: string): ast.Grammar {\r\n const services = createMinimalGrammarServices();\r\n const astNode = services.serializer.JsonSerializer.deserialize(json) as Mutable;\r\n services.shared.workspace.LangiumDocumentFactory.fromModel(astNode, URI.parse(`memory://${astNode.name ?? 'grammar'}.langium`));\r\n return astNode;\r\n}\r\n", "/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nexport * from './caching.js';\r\nexport * from './event.js';\r\nexport * from './collections.js';\r\nexport * from './disposable.js';\r\nexport * from './errors.js';\r\nexport * from './grammar-loader.js';\r\nexport * from './promise-utils.js';\r\nexport * from './stream.js';\r\nexport * from './uri-utils.js';\r\n\r\nimport * as AstUtils from './ast-utils.js';\r\nimport * as Cancellation from './cancellation.js';\r\nimport * as CstUtils from './cst-utils.js';\r\nimport * as GrammarUtils from './grammar-utils.js';\r\nimport * as RegExpUtils from './regexp-utils.js';\r\nexport { AstUtils, Cancellation, CstUtils, GrammarUtils, RegExpUtils };\r\n", "/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nexport * from './document-validator.js';\r\nexport * from './validation-registry.js';\r\n", "/******************************************************************************\r\n * Copyright 2023 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n ******************************************************************************/\r\n\r\nexport * from './ast-descriptions.js';\r\nexport * from './ast-node-locator.js';\r\nexport * from './configuration.js';\r\nexport * from './document-builder.js';\r\nexport * from './documents.js';\r\nexport * from './file-system-provider.js';\r\nexport * from './index-manager.js';\r\nexport * from './workspace-lock.js';\r\nexport * from './workspace-manager.js';\r\n", "/******************************************************************************\r\n * Copyright 2021 TypeFox GmbH\r\n * This program and the accompanying materials are made available under the\r\n * terms of the MIT License, which is available in the project root.\r\n *\r\n * @module langium\r\n */\r\n\r\nexport * from './default-module.js';\r\nexport * from './dependency-injection.js';\r\nexport * from './service-registry.js';\r\nexport * from './services.js';\r\nexport * from './syntax-tree.js';\r\nexport * from './documentation/index.js';\r\nexport * from './languages/index.js';\r\nexport * from './parser/index.js';\r\nexport * from './references/index.js';\r\nexport * from './serializer/index.js';\r\nexport * from './utils/index.js';\r\nexport * from './validation/index.js';\r\nexport * from './workspace/index.js';\r\n\r\n// Export the Langium Grammar AST definitions in the `GrammarAST` namespace\r\nimport * as GrammarAST from './languages/generated/ast.js';\r\nimport type { Grammar } from './languages/generated/ast.js';\r\nexport { Grammar, GrammarAST };\r\n", "var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/language/generated/ast.ts\nimport { AbstractAstReflection } from \"langium\";\nvar Statement = \"Statement\";\nvar Architecture = \"Architecture\";\nfunction isArchitecture(item) {\n return reflection.isInstance(item, Architecture);\n}\n__name(isArchitecture, \"isArchitecture\");\nvar Axis = \"Axis\";\nvar Branch = \"Branch\";\nfunction isBranch(item) {\n return reflection.isInstance(item, Branch);\n}\n__name(isBranch, \"isBranch\");\nvar Checkout = \"Checkout\";\nvar CherryPicking = \"CherryPicking\";\nvar ClassDefStatement = \"ClassDefStatement\";\nvar Commit = \"Commit\";\nfunction isCommit(item) {\n return reflection.isInstance(item, Commit);\n}\n__name(isCommit, \"isCommit\");\nvar Curve = \"Curve\";\nvar Edge = \"Edge\";\nvar Entry = \"Entry\";\nvar GitGraph = \"GitGraph\";\nfunction isGitGraph(item) {\n return reflection.isInstance(item, GitGraph);\n}\n__name(isGitGraph, \"isGitGraph\");\nvar Group = \"Group\";\nvar Info = \"Info\";\nfunction isInfo(item) {\n return reflection.isInstance(item, Info);\n}\n__name(isInfo, \"isInfo\");\nvar Item = \"Item\";\nvar Junction = \"Junction\";\nvar Merge = \"Merge\";\nfunction isMerge(item) {\n return reflection.isInstance(item, Merge);\n}\n__name(isMerge, \"isMerge\");\nvar Option = \"Option\";\nvar Packet = \"Packet\";\nfunction isPacket(item) {\n return reflection.isInstance(item, Packet);\n}\n__name(isPacket, \"isPacket\");\nvar PacketBlock = \"PacketBlock\";\nfunction isPacketBlock(item) {\n return reflection.isInstance(item, PacketBlock);\n}\n__name(isPacketBlock, \"isPacketBlock\");\nvar Pie = \"Pie\";\nfunction isPie(item) {\n return reflection.isInstance(item, Pie);\n}\n__name(isPie, \"isPie\");\nvar PieSection = \"PieSection\";\nfunction isPieSection(item) {\n return reflection.isInstance(item, PieSection);\n}\n__name(isPieSection, \"isPieSection\");\nvar Radar = \"Radar\";\nvar Service = \"Service\";\nvar Treemap = \"Treemap\";\nfunction isTreemap(item) {\n return reflection.isInstance(item, Treemap);\n}\n__name(isTreemap, \"isTreemap\");\nvar TreemapRow = \"TreemapRow\";\nvar Direction = \"Direction\";\nvar Leaf = \"Leaf\";\nvar Section = \"Section\";\nvar MermaidAstReflection = class extends AbstractAstReflection {\n static {\n __name(this, \"MermaidAstReflection\");\n }\n getAllTypes() {\n return [Architecture, Axis, Branch, Checkout, CherryPicking, ClassDefStatement, Commit, Curve, Direction, Edge, Entry, GitGraph, Group, Info, Item, Junction, Leaf, Merge, Option, Packet, PacketBlock, Pie, PieSection, Radar, Section, Service, Statement, Treemap, TreemapRow];\n }\n computeIsSubtype(subtype, supertype) {\n switch (subtype) {\n case Branch:\n case Checkout:\n case CherryPicking:\n case Commit:\n case Merge: {\n return this.isSubtype(Statement, supertype);\n }\n case Direction: {\n return this.isSubtype(GitGraph, supertype);\n }\n case Leaf:\n case Section: {\n return this.isSubtype(Item, supertype);\n }\n default: {\n return false;\n }\n }\n }\n getReferenceType(refInfo) {\n const referenceId = `${refInfo.container.$type}:${refInfo.property}`;\n switch (referenceId) {\n case \"Entry:axis\": {\n return Axis;\n }\n default: {\n throw new Error(`${referenceId} is not a valid reference id.`);\n }\n }\n }\n getTypeMetaData(type) {\n switch (type) {\n case Architecture: {\n return {\n name: Architecture,\n properties: [\n { name: \"accDescr\" },\n { name: \"accTitle\" },\n { name: \"edges\", defaultValue: [] },\n { name: \"groups\", defaultValue: [] },\n { name: \"junctions\", defaultValue: [] },\n { name: \"services\", defaultValue: [] },\n { name: \"title\" }\n ]\n };\n }\n case Axis: {\n return {\n name: Axis,\n properties: [\n { name: \"label\" },\n { name: \"name\" }\n ]\n };\n }\n case Branch: {\n return {\n name: Branch,\n properties: [\n { name: \"name\" },\n { name: \"order\" }\n ]\n };\n }\n case Checkout: {\n return {\n name: Checkout,\n properties: [\n { name: \"branch\" }\n ]\n };\n }\n case CherryPicking: {\n return {\n name: CherryPicking,\n properties: [\n { name: \"id\" },\n { name: \"parent\" },\n { name: \"tags\", defaultValue: [] }\n ]\n };\n }\n case ClassDefStatement: {\n return {\n name: ClassDefStatement,\n properties: [\n { name: \"className\" },\n { name: \"styleText\" }\n ]\n };\n }\n case Commit: {\n return {\n name: Commit,\n properties: [\n { name: \"id\" },\n { name: \"message\" },\n { name: \"tags\", defaultValue: [] },\n { name: \"type\" }\n ]\n };\n }\n case Curve: {\n return {\n name: Curve,\n properties: [\n { name: \"entries\", defaultValue: [] },\n { name: \"label\" },\n { name: \"name\" }\n ]\n };\n }\n case Edge: {\n return {\n name: Edge,\n properties: [\n { name: \"lhsDir\" },\n { name: \"lhsGroup\", defaultValue: false },\n { name: \"lhsId\" },\n { name: \"lhsInto\", defaultValue: false },\n { name: \"rhsDir\" },\n { name: \"rhsGroup\", defaultValue: false },\n { name: \"rhsId\" },\n { name: \"rhsInto\", defaultValue: false },\n { name: \"title\" }\n ]\n };\n }\n case Entry: {\n return {\n name: Entry,\n properties: [\n { name: \"axis\" },\n { name: \"value\" }\n ]\n };\n }\n case GitGraph: {\n return {\n name: GitGraph,\n properties: [\n { name: \"accDescr\" },\n { name: \"accTitle\" },\n { name: \"statements\", defaultValue: [] },\n { name: \"title\" }\n ]\n };\n }\n case Group: {\n return {\n name: Group,\n properties: [\n { name: \"icon\" },\n { name: \"id\" },\n { name: \"in\" },\n { name: \"title\" }\n ]\n };\n }\n case Info: {\n return {\n name: Info,\n properties: [\n { name: \"accDescr\" },\n { name: \"accTitle\" },\n { name: \"title\" }\n ]\n };\n }\n case Item: {\n return {\n name: Item,\n properties: [\n { name: \"classSelector\" },\n { name: \"name\" }\n ]\n };\n }\n case Junction: {\n return {\n name: Junction,\n properties: [\n { name: \"id\" },\n { name: \"in\" }\n ]\n };\n }\n case Merge: {\n return {\n name: Merge,\n properties: [\n { name: \"branch\" },\n { name: \"id\" },\n { name: \"tags\", defaultValue: [] },\n { name: \"type\" }\n ]\n };\n }\n case Option: {\n return {\n name: Option,\n properties: [\n { name: \"name\" },\n { name: \"value\", defaultValue: false }\n ]\n };\n }\n case Packet: {\n return {\n name: Packet,\n properties: [\n { name: \"accDescr\" },\n { name: \"accTitle\" },\n { name: \"blocks\", defaultValue: [] },\n { name: \"title\" }\n ]\n };\n }\n case PacketBlock: {\n return {\n name: PacketBlock,\n properties: [\n { name: \"bits\" },\n { name: \"end\" },\n { name: \"label\" },\n { name: \"start\" }\n ]\n };\n }\n case Pie: {\n return {\n name: Pie,\n properties: [\n { name: \"accDescr\" },\n { name: \"accTitle\" },\n { name: \"sections\", defaultValue: [] },\n { name: \"showData\", defaultValue: false },\n { name: \"title\" }\n ]\n };\n }\n case PieSection: {\n return {\n name: PieSection,\n properties: [\n { name: \"label\" },\n { name: \"value\" }\n ]\n };\n }\n case Radar: {\n return {\n name: Radar,\n properties: [\n { name: \"accDescr\" },\n { name: \"accTitle\" },\n { name: \"axes\", defaultValue: [] },\n { name: \"curves\", defaultValue: [] },\n { name: \"options\", defaultValue: [] },\n { name: \"title\" }\n ]\n };\n }\n case Service: {\n return {\n name: Service,\n properties: [\n { name: \"icon\" },\n { name: \"iconText\" },\n { name: \"id\" },\n { name: \"in\" },\n { name: \"title\" }\n ]\n };\n }\n case Treemap: {\n return {\n name: Treemap,\n properties: [\n { name: \"accDescr\" },\n { name: \"accTitle\" },\n { name: \"title\" },\n { name: \"TreemapRows\", defaultValue: [] }\n ]\n };\n }\n case TreemapRow: {\n return {\n name: TreemapRow,\n properties: [\n { name: \"indent\" },\n { name: \"item\" }\n ]\n };\n }\n case Direction: {\n return {\n name: Direction,\n properties: [\n { name: \"accDescr\" },\n { name: \"accTitle\" },\n { name: \"dir\" },\n { name: \"statements\", defaultValue: [] },\n { name: \"title\" }\n ]\n };\n }\n case Leaf: {\n return {\n name: Leaf,\n properties: [\n { name: \"classSelector\" },\n { name: \"name\" },\n { name: \"value\" }\n ]\n };\n }\n case Section: {\n return {\n name: Section,\n properties: [\n { name: \"classSelector\" },\n { name: \"name\" }\n ]\n };\n }\n default: {\n return {\n name: type,\n properties: []\n };\n }\n }\n }\n};\nvar reflection = new MermaidAstReflection();\n\n// src/language/generated/grammar.ts\nimport { loadGrammarFromJson } from \"langium\";\nvar loadedInfoGrammar;\nvar InfoGrammar = /* @__PURE__ */ __name(() => loadedInfoGrammar ?? (loadedInfoGrammar = loadGrammarFromJson(`{\"$type\":\"Grammar\",\"isDeclared\":true,\"name\":\"Info\",\"imports\":[],\"rules\":[{\"$type\":\"ParserRule\",\"entry\":true,\"name\":\"Info\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Keyword\",\"value\":\"info\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"showInfo\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[],\"cardinality\":\"*\"}],\"cardinality\":\"?\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[],\"cardinality\":\"?\"}]},\"definesHiddenTokens\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"EOL\",\"dataType\":\"string\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[],\"cardinality\":\"+\"},{\"$type\":\"EndOfFile\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"TitleAndAccessibilities\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"accDescr\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@4\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"accTitle\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@5\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"title\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@6\"},\"arguments\":[]}}]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@1\"},\"arguments\":[]}],\"cardinality\":\"+\"},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"BOOLEAN\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"boolean\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"true\"}},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"false\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_DESCR\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accDescr(?:[\\\\\\\\t ]*:([^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)|\\\\\\\\s*{([^}]*)})/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accTitle[\\\\\\\\t ]*:(?:[^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*title(?:[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*|)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"FLOAT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[0-9]+\\\\\\\\.[0-9]+(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"INT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/0|[1-9][0-9]*(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NUMBER\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@7\"}},{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"STRING\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\"([^\\\\\"\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*\\\\\"|'([^'\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*'/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ID\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\w]([-\\\\\\\\w]*\\\\\\\\w)?/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NEWLINE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\r?\\\\\\\\n/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"WHITESPACE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]+/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"YAML\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/---[\\\\\\\\t ]*\\\\\\\\r?\\\\\\\\n(?:[\\\\\\\\S\\\\\\\\s]*?\\\\\\\\r?\\\\\\\\n)?---(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"DIRECTIVE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%{[\\\\\\\\S\\\\\\\\s]*?}%%(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"SINGLE_LINE_COMMENT\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%[^\\\\\\\\n\\\\\\\\r]*/\"},\"fragment\":false}],\"definesHiddenTokens\":false,\"hiddenTokens\":[],\"interfaces\":[],\"types\":[],\"usedGrammars\":[]}`)), \"InfoGrammar\");\nvar loadedPacketGrammar;\nvar PacketGrammar = /* @__PURE__ */ __name(() => loadedPacketGrammar ?? (loadedPacketGrammar = loadGrammarFromJson(`{\"$type\":\"Grammar\",\"isDeclared\":true,\"name\":\"Packet\",\"imports\":[],\"rules\":[{\"$type\":\"ParserRule\",\"entry\":true,\"name\":\"Packet\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@13\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"packet\"},{\"$type\":\"Keyword\",\"value\":\"packet-beta\"}]},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]},{\"$type\":\"Assignment\",\"feature\":\"blocks\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@1\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@13\"},\"arguments\":[]}],\"cardinality\":\"*\"}]},\"definesHiddenTokens\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"PacketBlock\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"start\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"},\"arguments\":[]}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"-\"},{\"$type\":\"Assignment\",\"feature\":\"end\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"},\"arguments\":[]}}],\"cardinality\":\"?\"}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"+\"},{\"$type\":\"Assignment\",\"feature\":\"bits\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"},\"arguments\":[]}}]}]},{\"$type\":\"Keyword\",\"value\":\":\"},{\"$type\":\"Assignment\",\"feature\":\"label\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@11\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"EOL\",\"dataType\":\"string\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@13\"},\"arguments\":[],\"cardinality\":\"+\"},{\"$type\":\"EndOfFile\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"TitleAndAccessibilities\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"accDescr\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@5\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"accTitle\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@6\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"title\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@7\"},\"arguments\":[]}}]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]}],\"cardinality\":\"+\"},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"BOOLEAN\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"boolean\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"true\"}},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"false\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_DESCR\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accDescr(?:[\\\\\\\\t ]*:([^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)|\\\\\\\\s*{([^}]*)})/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accTitle[\\\\\\\\t ]*:(?:[^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*title(?:[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*|)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"FLOAT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[0-9]+\\\\\\\\.[0-9]+(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"INT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/0|[1-9][0-9]*(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NUMBER\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"}},{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"STRING\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\"([^\\\\\"\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*\\\\\"|'([^'\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*'/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ID\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\w]([-\\\\\\\\w]*\\\\\\\\w)?/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NEWLINE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\r?\\\\\\\\n/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"WHITESPACE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]+/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"YAML\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/---[\\\\\\\\t ]*\\\\\\\\r?\\\\\\\\n(?:[\\\\\\\\S\\\\\\\\s]*?\\\\\\\\r?\\\\\\\\n)?---(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"DIRECTIVE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%{[\\\\\\\\S\\\\\\\\s]*?}%%(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"SINGLE_LINE_COMMENT\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%[^\\\\\\\\n\\\\\\\\r]*/\"},\"fragment\":false}],\"definesHiddenTokens\":false,\"hiddenTokens\":[],\"interfaces\":[],\"types\":[],\"usedGrammars\":[]}`)), \"PacketGrammar\");\nvar loadedPieGrammar;\nvar PieGrammar = /* @__PURE__ */ __name(() => loadedPieGrammar ?? (loadedPieGrammar = loadGrammarFromJson(`{\"$type\":\"Grammar\",\"isDeclared\":true,\"name\":\"Pie\",\"imports\":[],\"rules\":[{\"$type\":\"ParserRule\",\"entry\":true,\"name\":\"Pie\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@16\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Keyword\",\"value\":\"pie\"},{\"$type\":\"Assignment\",\"feature\":\"showData\",\"operator\":\"?=\",\"terminal\":{\"$type\":\"Keyword\",\"value\":\"showData\"},\"cardinality\":\"?\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@6\"},\"arguments\":[]},{\"$type\":\"Assignment\",\"feature\":\"sections\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@1\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@16\"},\"arguments\":[]}],\"cardinality\":\"*\"}]},\"definesHiddenTokens\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"PieSection\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"label\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@14\"},\"arguments\":[]}},{\"$type\":\"Keyword\",\"value\":\":\"},{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@4\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@5\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"FLOAT_PIE\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/-?[0-9]+\\\\\\\\.[0-9]+(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"INT_PIE\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/-?(0|[1-9][0-9]*)(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NUMBER_PIE\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"}},{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"EOL\",\"dataType\":\"string\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@16\"},\"arguments\":[],\"cardinality\":\"+\"},{\"$type\":\"EndOfFile\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"TitleAndAccessibilities\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"accDescr\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"accTitle\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"title\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@10\"},\"arguments\":[]}}]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@5\"},\"arguments\":[]}],\"cardinality\":\"+\"},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"BOOLEAN\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"boolean\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"true\"}},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"false\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_DESCR\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accDescr(?:[\\\\\\\\t ]*:([^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)|\\\\\\\\s*{([^}]*)})/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accTitle[\\\\\\\\t ]*:(?:[^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*title(?:[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*|)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"FLOAT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[0-9]+\\\\\\\\.[0-9]+(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"INT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/0|[1-9][0-9]*(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NUMBER\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@11\"}},{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"STRING\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\"([^\\\\\"\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*\\\\\"|'([^'\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*'/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ID\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\w]([-\\\\\\\\w]*\\\\\\\\w)?/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NEWLINE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\r?\\\\\\\\n/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"WHITESPACE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]+/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"YAML\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/---[\\\\\\\\t ]*\\\\\\\\r?\\\\\\\\n(?:[\\\\\\\\S\\\\\\\\s]*?\\\\\\\\r?\\\\\\\\n)?---(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"DIRECTIVE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%{[\\\\\\\\S\\\\\\\\s]*?}%%(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"SINGLE_LINE_COMMENT\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%[^\\\\\\\\n\\\\\\\\r]*/\"},\"fragment\":false}],\"definesHiddenTokens\":false,\"hiddenTokens\":[],\"interfaces\":[],\"types\":[],\"usedGrammars\":[]}`)), \"PieGrammar\");\nvar loadedArchitectureGrammar;\nvar ArchitectureGrammar = /* @__PURE__ */ __name(() => loadedArchitectureGrammar ?? (loadedArchitectureGrammar = loadGrammarFromJson(`{\"$type\":\"Grammar\",\"isDeclared\":true,\"name\":\"Architecture\",\"imports\":[],\"rules\":[{\"$type\":\"ParserRule\",\"entry\":true,\"name\":\"Architecture\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@23\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Keyword\",\"value\":\"architecture-beta\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@23\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@13\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@1\"},\"arguments\":[]}],\"cardinality\":\"*\"}]},\"definesHiddenTokens\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"Statement\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"groups\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@5\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"services\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@6\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"junctions\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@7\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"edges\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]}}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"LeftPort\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\":\"},{\"$type\":\"Assignment\",\"feature\":\"lhsDir\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"},\"arguments\":[]}}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"RightPort\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"rhsDir\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"},\"arguments\":[]}},{\"$type\":\"Keyword\",\"value\":\":\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"Arrow\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]},{\"$type\":\"Assignment\",\"feature\":\"lhsInto\",\"operator\":\"?=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@11\"},\"arguments\":[]},\"cardinality\":\"?\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"--\"},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"-\"},{\"$type\":\"Assignment\",\"feature\":\"title\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@29\"},\"arguments\":[]}},{\"$type\":\"Keyword\",\"value\":\"-\"}]}]},{\"$type\":\"Assignment\",\"feature\":\"rhsInto\",\"operator\":\"?=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@11\"},\"arguments\":[]},\"cardinality\":\"?\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Group\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"group\"},{\"$type\":\"Assignment\",\"feature\":\"id\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@22\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"icon\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@28\"},\"arguments\":[]},\"cardinality\":\"?\"},{\"$type\":\"Assignment\",\"feature\":\"title\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@29\"},\"arguments\":[]},\"cardinality\":\"?\"},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"in\"},{\"$type\":\"Assignment\",\"feature\":\"in\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@22\"},\"arguments\":[]}}],\"cardinality\":\"?\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Service\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"service\"},{\"$type\":\"Assignment\",\"feature\":\"id\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@22\"},\"arguments\":[]}},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"iconText\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@21\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"icon\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@28\"},\"arguments\":[]}}],\"cardinality\":\"?\"},{\"$type\":\"Assignment\",\"feature\":\"title\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@29\"},\"arguments\":[]},\"cardinality\":\"?\"},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"in\"},{\"$type\":\"Assignment\",\"feature\":\"in\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@22\"},\"arguments\":[]}}],\"cardinality\":\"?\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Junction\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"junction\"},{\"$type\":\"Assignment\",\"feature\":\"id\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@22\"},\"arguments\":[]}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"in\"},{\"$type\":\"Assignment\",\"feature\":\"in\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@22\"},\"arguments\":[]}}],\"cardinality\":\"?\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Edge\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"lhsId\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@22\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"lhsGroup\",\"operator\":\"?=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@10\"},\"arguments\":[]},\"cardinality\":\"?\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@4\"},\"arguments\":[]},{\"$type\":\"Assignment\",\"feature\":\"rhsId\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@22\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"rhsGroup\",\"operator\":\"?=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@10\"},\"arguments\":[]},\"cardinality\":\"?\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"ARROW_DIRECTION\",\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"L\"}},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"R\"}}]},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"T\"}}]},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"B\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ARROW_GROUP\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\{group\\\\\\\\}/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ARROW_INTO\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/<|>/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"EOL\",\"dataType\":\"string\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@23\"},\"arguments\":[],\"cardinality\":\"+\"},{\"$type\":\"EndOfFile\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"TitleAndAccessibilities\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"accDescr\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@15\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"accTitle\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@16\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"title\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[]}],\"cardinality\":\"+\"},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"BOOLEAN\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"boolean\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"true\"}},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"false\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_DESCR\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accDescr(?:[\\\\\\\\t ]*:([^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)|\\\\\\\\s*{([^}]*)})/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accTitle[\\\\\\\\t ]*:(?:[^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*title(?:[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*|)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"FLOAT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[0-9]+\\\\\\\\.[0-9]+(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"INT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/0|[1-9][0-9]*(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NUMBER\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@18\"}},{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"STRING\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\"([^\\\\\"\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*\\\\\"|'([^'\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*'/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ID\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\w]([-\\\\\\\\w]*\\\\\\\\w)?/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NEWLINE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\r?\\\\\\\\n/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"WHITESPACE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]+/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"YAML\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/---[\\\\\\\\t ]*\\\\\\\\r?\\\\\\\\n(?:[\\\\\\\\S\\\\\\\\s]*?\\\\\\\\r?\\\\\\\\n)?---(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"DIRECTIVE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%{[\\\\\\\\S\\\\\\\\s]*?}%%(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"SINGLE_LINE_COMMENT\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%[^\\\\\\\\n\\\\\\\\r]*/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"name\":\"ARCH_ICON\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\([\\\\\\\\w-:]+\\\\\\\\)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ARCH_TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\[[\\\\\\\\w ]+\\\\\\\\]/\"},\"fragment\":false,\"hidden\":false}],\"definesHiddenTokens\":false,\"hiddenTokens\":[],\"interfaces\":[],\"types\":[],\"usedGrammars\":[]}`)), \"ArchitectureGrammar\");\nvar loadedGitGraphGrammar;\nvar GitGraphGrammar = /* @__PURE__ */ __name(() => loadedGitGraphGrammar ?? (loadedGitGraphGrammar = loadGrammarFromJson(`{\"$type\":\"Grammar\",\"isDeclared\":true,\"name\":\"GitGraph\",\"imports\":[],\"rules\":[{\"$type\":\"ParserRule\",\"entry\":true,\"name\":\"GitGraph\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"gitGraph\"},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"gitGraph\"},{\"$type\":\"Keyword\",\"value\":\":\"}]},{\"$type\":\"Keyword\",\"value\":\"gitGraph:\"},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"gitGraph\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]},{\"$type\":\"Keyword\",\"value\":\":\"}]}]},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"},\"arguments\":[]},{\"$type\":\"Assignment\",\"feature\":\"statements\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@1\"},\"arguments\":[]}}],\"cardinality\":\"*\"}]},\"definesHiddenTokens\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Statement\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@4\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@5\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@6\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@7\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Direction\",\"definition\":{\"$type\":\"Assignment\",\"feature\":\"dir\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"LR\"},{\"$type\":\"Keyword\",\"value\":\"TB\"},{\"$type\":\"Keyword\",\"value\":\"BT\"}]}},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Commit\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"commit\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"id:\"},{\"$type\":\"Assignment\",\"feature\":\"id\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"msg:\",\"cardinality\":\"?\"},{\"$type\":\"Assignment\",\"feature\":\"message\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"tag:\"},{\"$type\":\"Assignment\",\"feature\":\"tags\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"type:\"},{\"$type\":\"Assignment\",\"feature\":\"type\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"NORMAL\"},{\"$type\":\"Keyword\",\"value\":\"REVERSE\"},{\"$type\":\"Keyword\",\"value\":\"HIGHLIGHT\"}]}}]}],\"cardinality\":\"*\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Branch\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"branch\"},{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@24\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}]}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"order:\"},{\"$type\":\"Assignment\",\"feature\":\"order\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@15\"},\"arguments\":[]}}],\"cardinality\":\"?\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Merge\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"merge\"},{\"$type\":\"Assignment\",\"feature\":\"branch\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@24\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}]}},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"id:\"},{\"$type\":\"Assignment\",\"feature\":\"id\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"tag:\"},{\"$type\":\"Assignment\",\"feature\":\"tags\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"type:\"},{\"$type\":\"Assignment\",\"feature\":\"type\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"NORMAL\"},{\"$type\":\"Keyword\",\"value\":\"REVERSE\"},{\"$type\":\"Keyword\",\"value\":\"HIGHLIGHT\"}]}}]}],\"cardinality\":\"*\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Checkout\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"checkout\"},{\"$type\":\"Keyword\",\"value\":\"switch\"}]},{\"$type\":\"Assignment\",\"feature\":\"branch\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@24\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"CherryPicking\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"cherry-pick\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"id:\"},{\"$type\":\"Assignment\",\"feature\":\"id\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"tag:\"},{\"$type\":\"Assignment\",\"feature\":\"tags\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"parent:\"},{\"$type\":\"Assignment\",\"feature\":\"parent\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]}],\"cardinality\":\"*\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"EOL\",\"dataType\":\"string\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"},\"arguments\":[],\"cardinality\":\"+\"},{\"$type\":\"EndOfFile\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"TitleAndAccessibilities\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"accDescr\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@11\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"accTitle\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"title\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@13\"},\"arguments\":[]}}]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]}],\"cardinality\":\"+\"},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"BOOLEAN\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"boolean\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"true\"}},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"false\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_DESCR\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accDescr(?:[\\\\\\\\t ]*:([^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)|\\\\\\\\s*{([^}]*)})/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accTitle[\\\\\\\\t ]*:(?:[^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*title(?:[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*|)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"FLOAT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[0-9]+\\\\\\\\.[0-9]+(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"INT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/0|[1-9][0-9]*(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NUMBER\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@14\"}},{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@15\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"STRING\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\"([^\\\\\"\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*\\\\\"|'([^'\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*'/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ID\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\w]([-\\\\\\\\w]*\\\\\\\\w)?/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NEWLINE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\r?\\\\\\\\n/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"WHITESPACE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]+/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"YAML\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/---[\\\\\\\\t ]*\\\\\\\\r?\\\\\\\\n(?:[\\\\\\\\S\\\\\\\\s]*?\\\\\\\\r?\\\\\\\\n)?---(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"DIRECTIVE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%{[\\\\\\\\S\\\\\\\\s]*?}%%(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"SINGLE_LINE_COMMENT\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%[^\\\\\\\\n\\\\\\\\r]*/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"name\":\"REFERENCE\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\w([-\\\\\\\\./\\\\\\\\w]*[-\\\\\\\\w])?/\"},\"fragment\":false,\"hidden\":false}],\"definesHiddenTokens\":false,\"hiddenTokens\":[],\"interfaces\":[],\"types\":[],\"usedGrammars\":[]}`)), \"GitGraphGrammar\");\nvar loadedRadarGrammar;\nvar RadarGrammar = /* @__PURE__ */ __name(() => loadedRadarGrammar ?? (loadedRadarGrammar = loadGrammarFromJson(`{\"$type\":\"Grammar\",\"isDeclared\":true,\"name\":\"Radar\",\"imports\":[],\"rules\":[{\"$type\":\"ParserRule\",\"entry\":true,\"name\":\"Radar\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"radar-beta\"},{\"$type\":\"Keyword\",\"value\":\"radar-beta:\"},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"radar-beta\"},{\"$type\":\"Keyword\",\"value\":\":\"}]}]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@10\"},\"arguments\":[]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"axis\"},{\"$type\":\"Assignment\",\"feature\":\"axes\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\",\"},{\"$type\":\"Assignment\",\"feature\":\"axes\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]}}],\"cardinality\":\"*\"}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"curve\"},{\"$type\":\"Assignment\",\"feature\":\"curves\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\",\"},{\"$type\":\"Assignment\",\"feature\":\"curves\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]}}],\"cardinality\":\"*\"}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"options\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@7\"},\"arguments\":[]}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\",\"},{\"$type\":\"Assignment\",\"feature\":\"options\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@7\"},\"arguments\":[]}}],\"cardinality\":\"*\"}]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[]}],\"cardinality\":\"*\"}]},\"definesHiddenTokens\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"Label\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\"[\"},{\"$type\":\"Assignment\",\"feature\":\"label\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@18\"},\"arguments\":[]}},{\"$type\":\"Keyword\",\"value\":\"]\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Axis\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@1\"},\"arguments\":[],\"cardinality\":\"?\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Curve\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@1\"},\"arguments\":[],\"cardinality\":\"?\"},{\"$type\":\"Keyword\",\"value\":\"{\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@4\"},\"arguments\":[]},{\"$type\":\"Keyword\",\"value\":\"}\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"Entries\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Assignment\",\"feature\":\"entries\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@6\"},\"arguments\":[]}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\",\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Assignment\",\"feature\":\"entries\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@6\"},\"arguments\":[]}}],\"cardinality\":\"*\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[],\"cardinality\":\"*\"}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Assignment\",\"feature\":\"entries\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@5\"},\"arguments\":[]}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Keyword\",\"value\":\",\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[],\"cardinality\":\"*\"},{\"$type\":\"Assignment\",\"feature\":\"entries\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@5\"},\"arguments\":[]}}],\"cardinality\":\"*\"},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[],\"cardinality\":\"*\"}]}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"DetailedEntry\",\"returnType\":{\"$ref\":\"#/interfaces@0\"},\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"axis\",\"operator\":\"=\",\"terminal\":{\"$type\":\"CrossReference\",\"type\":{\"$ref\":\"#/rules@2\"},\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"},\"arguments\":[]},\"deprecatedSyntax\":false}},{\"$type\":\"Keyword\",\"value\":\":\",\"cardinality\":\"?\"},{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"NumberEntry\",\"returnType\":{\"$ref\":\"#/interfaces@0\"},\"definition\":{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Option\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Keyword\",\"value\":\"showLegend\"}},{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@11\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Keyword\",\"value\":\"ticks\"}},{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Keyword\",\"value\":\"max\"}},{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Keyword\",\"value\":\"min\"}},{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}}]},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"Keyword\",\"value\":\"graticule\"}},{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]}}]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"GRATICULE\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"circle\"}},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"polygon\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"EOL\",\"dataType\":\"string\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[],\"cardinality\":\"+\"},{\"$type\":\"EndOfFile\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"TitleAndAccessibilities\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"accDescr\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@12\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"accTitle\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@13\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"title\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@14\"},\"arguments\":[]}}]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"},\"arguments\":[]}],\"cardinality\":\"+\"},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"BOOLEAN\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"boolean\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"true\"}},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"false\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_DESCR\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accDescr(?:[\\\\\\\\t ]*:([^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)|\\\\\\\\s*{([^}]*)})/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accTitle[\\\\\\\\t ]*:(?:[^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*title(?:[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*|)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"FLOAT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[0-9]+\\\\\\\\.[0-9]+(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"INT\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/0|[1-9][0-9]*(?!\\\\\\\\.)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NUMBER\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"number\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@15\"}},{\"$type\":\"TerminalRuleCall\",\"rule\":{\"$ref\":\"#/rules@16\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"STRING\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\"([^\\\\\"\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*\\\\\"|'([^'\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\.)*'/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ID\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"string\"},\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\w]([-\\\\\\\\w]*\\\\\\\\w)?/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NEWLINE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\r?\\\\\\\\n/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"WHITESPACE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]+/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"YAML\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/---[\\\\\\\\t ]*\\\\\\\\r?\\\\\\\\n(?:[\\\\\\\\S\\\\\\\\s]*?\\\\\\\\r?\\\\\\\\n)?---(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"DIRECTIVE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%{[\\\\\\\\S\\\\\\\\s]*?}%%(?:\\\\\\\\r?\\\\\\\\n|(?!\\\\\\\\S))/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"SINGLE_LINE_COMMENT\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*%%[^\\\\\\\\n\\\\\\\\r]*/\"},\"fragment\":false}],\"interfaces\":[{\"$type\":\"Interface\",\"name\":\"Entry\",\"attributes\":[{\"$type\":\"TypeAttribute\",\"name\":\"axis\",\"isOptional\":true,\"type\":{\"$type\":\"ReferenceType\",\"referenceType\":{\"$type\":\"SimpleType\",\"typeRef\":{\"$ref\":\"#/rules@2\"}}}},{\"$type\":\"TypeAttribute\",\"name\":\"value\",\"type\":{\"$type\":\"SimpleType\",\"primitiveType\":\"number\"},\"isOptional\":false}],\"superTypes\":[]}],\"definesHiddenTokens\":false,\"hiddenTokens\":[],\"types\":[],\"usedGrammars\":[]}`)), \"RadarGrammar\");\nvar loadedTreemapGrammar;\nvar TreemapGrammar = /* @__PURE__ */ __name(() => loadedTreemapGrammar ?? (loadedTreemapGrammar = loadGrammarFromJson(`{\"$type\":\"Grammar\",\"isDeclared\":true,\"name\":\"Treemap\",\"rules\":[{\"$type\":\"ParserRule\",\"fragment\":true,\"name\":\"TitleAndAccessibilities\",\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"accDescr\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@2\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"accTitle\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@3\"},\"arguments\":[]}},{\"$type\":\"Assignment\",\"feature\":\"title\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@4\"},\"arguments\":[]}}],\"cardinality\":\"+\"},\"definesHiddenTokens\":false,\"entry\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"BOOLEAN\",\"type\":{\"$type\":\"ReturnType\",\"name\":\"boolean\"},\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"true\"}},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"false\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_DESCR\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accDescr(?:[\\\\\\\\t ]*:([^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)|\\\\\\\\s*{([^}]*)})/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ACC_TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*accTitle[\\\\\\\\t ]*:(?:[^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[^\\\\\\\\n\\\\\\\\r]*)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"TITLE\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[\\\\\\\\t ]*title(?:[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*?(?=%%)|[\\\\\\\\t ][^\\\\\\\\n\\\\\\\\r]*|)/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"ParserRule\",\"entry\":true,\"name\":\"Treemap\",\"returnType\":{\"$ref\":\"#/interfaces@4\"},\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@6\"},\"arguments\":[]},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@0\"},\"arguments\":[]},{\"$type\":\"Assignment\",\"feature\":\"TreemapRows\",\"operator\":\"+=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@14\"},\"arguments\":[]}}],\"cardinality\":\"*\"}]},\"definesHiddenTokens\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"TREEMAP_KEYWORD\",\"definition\":{\"$type\":\"TerminalAlternatives\",\"elements\":[{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"treemap-beta\"}},{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\"treemap\"}}]},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"CLASS_DEF\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/classDef\\\\\\\\s+([a-zA-Z_][a-zA-Z0-9_]+)(?:\\\\\\\\s+([^;\\\\\\\\r\\\\\\\\n]*))?(?:;)?/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"STYLE_SEPARATOR\",\"definition\":{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\":::\"}},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"SEPARATOR\",\"definition\":{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\":\"}},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"COMMA\",\"definition\":{\"$type\":\"CharacterRange\",\"left\":{\"$type\":\"Keyword\",\"value\":\",\"}},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"WS\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[ \\\\\\\\t]+/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"ML_COMMENT\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\%\\\\\\\\%[^\\\\\\\\n]*/\"},\"fragment\":false},{\"$type\":\"TerminalRule\",\"hidden\":true,\"name\":\"NL\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\\\\r?\\\\\\\\n/\"},\"fragment\":false},{\"$type\":\"ParserRule\",\"name\":\"TreemapRow\",\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"indent\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"},\"arguments\":[]},\"cardinality\":\"?\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"item\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@16\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@15\"},\"arguments\":[]}]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"ClassDef\",\"dataType\":\"string\",\"definition\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@7\"},\"arguments\":[]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Item\",\"returnType\":{\"$ref\":\"#/interfaces@0\"},\"definition\":{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@18\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@17\"},\"arguments\":[]}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Section\",\"returnType\":{\"$ref\":\"#/interfaces@1\"},\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@23\"},\"arguments\":[]}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]},{\"$type\":\"Assignment\",\"feature\":\"classSelector\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[]}}],\"cardinality\":\"?\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"ParserRule\",\"name\":\"Leaf\",\"returnType\":{\"$ref\":\"#/interfaces@2\"},\"definition\":{\"$type\":\"Group\",\"elements\":[{\"$type\":\"Assignment\",\"feature\":\"name\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@23\"},\"arguments\":[]}},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"},\"arguments\":[],\"cardinality\":\"?\"},{\"$type\":\"Alternatives\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@9\"},\"arguments\":[]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@10\"},\"arguments\":[]}]},{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@19\"},\"arguments\":[],\"cardinality\":\"?\"},{\"$type\":\"Assignment\",\"feature\":\"value\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@22\"},\"arguments\":[]}},{\"$type\":\"Group\",\"elements\":[{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@8\"},\"arguments\":[]},{\"$type\":\"Assignment\",\"feature\":\"classSelector\",\"operator\":\"=\",\"terminal\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@20\"},\"arguments\":[]}}],\"cardinality\":\"?\"}]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"INDENTATION\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[ \\\\\\\\t]{1,}/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"ID2\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[a-zA-Z_][a-zA-Z0-9_]*/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"TerminalRule\",\"name\":\"NUMBER2\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/[0-9_\\\\\\\\.\\\\\\\\,]+/\"},\"fragment\":false,\"hidden\":false},{\"$type\":\"ParserRule\",\"name\":\"MyNumber\",\"dataType\":\"number\",\"definition\":{\"$type\":\"RuleCall\",\"rule\":{\"$ref\":\"#/rules@21\"},\"arguments\":[]},\"definesHiddenTokens\":false,\"entry\":false,\"fragment\":false,\"hiddenTokens\":[],\"parameters\":[],\"wildcard\":false},{\"$type\":\"TerminalRule\",\"name\":\"STRING2\",\"definition\":{\"$type\":\"RegexToken\",\"regex\":\"/\\\\\"[^\\\\\"]*\\\\\"|'[^']*'/\"},\"fragment\":false,\"hidden\":false}],\"interfaces\":[{\"$type\":\"Interface\",\"name\":\"Item\",\"attributes\":[{\"$type\":\"TypeAttribute\",\"name\":\"name\",\"type\":{\"$type\":\"SimpleType\",\"primitiveType\":\"string\"},\"isOptional\":false},{\"$type\":\"TypeAttribute\",\"name\":\"classSelector\",\"isOptional\":true,\"type\":{\"$type\":\"SimpleType\",\"primitiveType\":\"string\"}}],\"superTypes\":[]},{\"$type\":\"Interface\",\"name\":\"Section\",\"superTypes\":[{\"$ref\":\"#/interfaces@0\"}],\"attributes\":[]},{\"$type\":\"Interface\",\"name\":\"Leaf\",\"superTypes\":[{\"$ref\":\"#/interfaces@0\"}],\"attributes\":[{\"$type\":\"TypeAttribute\",\"name\":\"value\",\"type\":{\"$type\":\"SimpleType\",\"primitiveType\":\"number\"},\"isOptional\":false}]},{\"$type\":\"Interface\",\"name\":\"ClassDefStatement\",\"attributes\":[{\"$type\":\"TypeAttribute\",\"name\":\"className\",\"type\":{\"$type\":\"SimpleType\",\"primitiveType\":\"string\"},\"isOptional\":false},{\"$type\":\"TypeAttribute\",\"name\":\"styleText\",\"type\":{\"$type\":\"SimpleType\",\"primitiveType\":\"string\"},\"isOptional\":false}],\"superTypes\":[]},{\"$type\":\"Interface\",\"name\":\"Treemap\",\"attributes\":[{\"$type\":\"TypeAttribute\",\"name\":\"TreemapRows\",\"type\":{\"$type\":\"ArrayType\",\"elementType\":{\"$type\":\"SimpleType\",\"typeRef\":{\"$ref\":\"#/rules@14\"}}},\"isOptional\":false},{\"$type\":\"TypeAttribute\",\"name\":\"title\",\"isOptional\":true,\"type\":{\"$type\":\"SimpleType\",\"primitiveType\":\"string\"}},{\"$type\":\"TypeAttribute\",\"name\":\"accTitle\",\"isOptional\":true,\"type\":{\"$type\":\"SimpleType\",\"primitiveType\":\"string\"}},{\"$type\":\"TypeAttribute\",\"name\":\"accDescr\",\"isOptional\":true,\"type\":{\"$type\":\"SimpleType\",\"primitiveType\":\"string\"}}],\"superTypes\":[]}],\"definesHiddenTokens\":false,\"hiddenTokens\":[],\"imports\":[],\"types\":[],\"usedGrammars\":[],\"$comment\":\"/**\\\\n * Treemap grammar for Langium\\\\n * Converted from mindmap grammar\\\\n *\\\\n * The ML_COMMENT and NL hidden terminals handle whitespace, comments, and newlines\\\\n * before the treemap keyword, allowing for empty lines and comments before the\\\\n * treemap declaration.\\\\n */\"}`)), \"TreemapGrammar\");\n\n// src/language/generated/module.ts\nvar InfoLanguageMetaData = {\n languageId: \"info\",\n fileExtensions: [\".mmd\", \".mermaid\"],\n caseInsensitive: false,\n mode: \"production\"\n};\nvar PacketLanguageMetaData = {\n languageId: \"packet\",\n fileExtensions: [\".mmd\", \".mermaid\"],\n caseInsensitive: false,\n mode: \"production\"\n};\nvar PieLanguageMetaData = {\n languageId: \"pie\",\n fileExtensions: [\".mmd\", \".mermaid\"],\n caseInsensitive: false,\n mode: \"production\"\n};\nvar ArchitectureLanguageMetaData = {\n languageId: \"architecture\",\n fileExtensions: [\".mmd\", \".mermaid\"],\n caseInsensitive: false,\n mode: \"production\"\n};\nvar GitGraphLanguageMetaData = {\n languageId: \"gitGraph\",\n fileExtensions: [\".mmd\", \".mermaid\"],\n caseInsensitive: false,\n mode: \"production\"\n};\nvar RadarLanguageMetaData = {\n languageId: \"radar\",\n fileExtensions: [\".mmd\", \".mermaid\"],\n caseInsensitive: false,\n mode: \"production\"\n};\nvar TreemapLanguageMetaData = {\n languageId: \"treemap\",\n fileExtensions: [\".mmd\", \".mermaid\"],\n caseInsensitive: false,\n mode: \"production\"\n};\nvar MermaidGeneratedSharedModule = {\n AstReflection: /* @__PURE__ */ __name(() => new MermaidAstReflection(), \"AstReflection\")\n};\nvar InfoGeneratedModule = {\n Grammar: /* @__PURE__ */ __name(() => InfoGrammar(), \"Grammar\"),\n LanguageMetaData: /* @__PURE__ */ __name(() => InfoLanguageMetaData, \"LanguageMetaData\"),\n parser: {}\n};\nvar PacketGeneratedModule = {\n Grammar: /* @__PURE__ */ __name(() => PacketGrammar(), \"Grammar\"),\n LanguageMetaData: /* @__PURE__ */ __name(() => PacketLanguageMetaData, \"LanguageMetaData\"),\n parser: {}\n};\nvar PieGeneratedModule = {\n Grammar: /* @__PURE__ */ __name(() => PieGrammar(), \"Grammar\"),\n LanguageMetaData: /* @__PURE__ */ __name(() => PieLanguageMetaData, \"LanguageMetaData\"),\n parser: {}\n};\nvar ArchitectureGeneratedModule = {\n Grammar: /* @__PURE__ */ __name(() => ArchitectureGrammar(), \"Grammar\"),\n LanguageMetaData: /* @__PURE__ */ __name(() => ArchitectureLanguageMetaData, \"LanguageMetaData\"),\n parser: {}\n};\nvar GitGraphGeneratedModule = {\n Grammar: /* @__PURE__ */ __name(() => GitGraphGrammar(), \"Grammar\"),\n LanguageMetaData: /* @__PURE__ */ __name(() => GitGraphLanguageMetaData, \"LanguageMetaData\"),\n parser: {}\n};\nvar RadarGeneratedModule = {\n Grammar: /* @__PURE__ */ __name(() => RadarGrammar(), \"Grammar\"),\n LanguageMetaData: /* @__PURE__ */ __name(() => RadarLanguageMetaData, \"LanguageMetaData\"),\n parser: {}\n};\nvar TreemapGeneratedModule = {\n Grammar: /* @__PURE__ */ __name(() => TreemapGrammar(), \"Grammar\"),\n LanguageMetaData: /* @__PURE__ */ __name(() => TreemapLanguageMetaData, \"LanguageMetaData\"),\n parser: {}\n};\n\n// src/language/common/valueConverter.ts\nimport { DefaultValueConverter } from \"langium\";\n\n// src/language/common/matcher.ts\nvar accessibilityDescrRegex = /accDescr(?:[\\t ]*:([^\\n\\r]*)|\\s*{([^}]*)})/;\nvar accessibilityTitleRegex = /accTitle[\\t ]*:([^\\n\\r]*)/;\nvar titleRegex = /title([\\t ][^\\n\\r]*|)/;\n\n// src/language/common/valueConverter.ts\nvar rulesRegexes = {\n ACC_DESCR: accessibilityDescrRegex,\n ACC_TITLE: accessibilityTitleRegex,\n TITLE: titleRegex\n};\nvar AbstractMermaidValueConverter = class extends DefaultValueConverter {\n static {\n __name(this, \"AbstractMermaidValueConverter\");\n }\n runConverter(rule, input, cstNode) {\n let value = this.runCommonConverter(rule, input, cstNode);\n if (value === void 0) {\n value = this.runCustomConverter(rule, input, cstNode);\n }\n if (value === void 0) {\n return super.runConverter(rule, input, cstNode);\n }\n return value;\n }\n runCommonConverter(rule, input, _cstNode) {\n const regex = rulesRegexes[rule.name];\n if (regex === void 0) {\n return void 0;\n }\n const match = regex.exec(input);\n if (match === null) {\n return void 0;\n }\n if (match[1] !== void 0) {\n return match[1].trim().replace(/[\\t ]{2,}/gm, \" \");\n }\n if (match[2] !== void 0) {\n return match[2].replace(/^\\s*/gm, \"\").replace(/\\s+$/gm, \"\").replace(/[\\t ]{2,}/gm, \" \").replace(/[\\n\\r]{2,}/gm, \"\\n\");\n }\n return void 0;\n }\n};\nvar CommonValueConverter = class extends AbstractMermaidValueConverter {\n static {\n __name(this, \"CommonValueConverter\");\n }\n runCustomConverter(_rule, _input, _cstNode) {\n return void 0;\n }\n};\n\n// src/language/common/tokenBuilder.ts\nimport { DefaultTokenBuilder } from \"langium\";\nvar AbstractMermaidTokenBuilder = class extends DefaultTokenBuilder {\n static {\n __name(this, \"AbstractMermaidTokenBuilder\");\n }\n constructor(keywords) {\n super();\n this.keywords = new Set(keywords);\n }\n buildKeywordTokens(rules, terminalTokens, options) {\n const tokenTypes = super.buildKeywordTokens(rules, terminalTokens, options);\n tokenTypes.forEach((tokenType) => {\n if (this.keywords.has(tokenType.name) && tokenType.PATTERN !== void 0) {\n tokenType.PATTERN = new RegExp(tokenType.PATTERN.toString() + \"(?:(?=%%)|(?!\\\\S))\");\n }\n });\n return tokenTypes;\n }\n};\nvar CommonTokenBuilder = class extends AbstractMermaidTokenBuilder {\n static {\n __name(this, \"CommonTokenBuilder\");\n }\n};\n\nexport {\n __name,\n Statement,\n Architecture,\n isArchitecture,\n Branch,\n isBranch,\n Commit,\n isCommit,\n GitGraph,\n isGitGraph,\n Info,\n isInfo,\n Merge,\n isMerge,\n Packet,\n isPacket,\n PacketBlock,\n isPacketBlock,\n Pie,\n isPie,\n PieSection,\n isPieSection,\n Radar,\n Treemap,\n isTreemap,\n MermaidGeneratedSharedModule,\n InfoGeneratedModule,\n PacketGeneratedModule,\n PieGeneratedModule,\n ArchitectureGeneratedModule,\n GitGraphGeneratedModule,\n RadarGeneratedModule,\n TreemapGeneratedModule,\n AbstractMermaidValueConverter,\n CommonValueConverter,\n AbstractMermaidTokenBuilder,\n CommonTokenBuilder\n};\n", "import {\n AbstractMermaidTokenBuilder,\n CommonValueConverter,\n GitGraphGeneratedModule,\n MermaidGeneratedSharedModule,\n __name\n} from \"./chunk-FPAJGGOC.mjs\";\n\n// src/language/gitGraph/module.ts\nimport {\n inject,\n createDefaultCoreModule,\n createDefaultSharedCoreModule,\n EmptyFileSystem\n} from \"langium\";\n\n// src/language/gitGraph/tokenBuilder.ts\nvar GitGraphTokenBuilder = class extends AbstractMermaidTokenBuilder {\n static {\n __name(this, \"GitGraphTokenBuilder\");\n }\n constructor() {\n super([\"gitGraph\"]);\n }\n};\n\n// src/language/gitGraph/module.ts\nvar GitGraphModule = {\n parser: {\n TokenBuilder: /* @__PURE__ */ __name(() => new GitGraphTokenBuilder(), \"TokenBuilder\"),\n ValueConverter: /* @__PURE__ */ __name(() => new CommonValueConverter(), \"ValueConverter\")\n }\n};\nfunction createGitGraphServices(context = EmptyFileSystem) {\n const shared = inject(\n createDefaultSharedCoreModule(context),\n MermaidGeneratedSharedModule\n );\n const GitGraph = inject(\n createDefaultCoreModule({ shared }),\n GitGraphGeneratedModule,\n GitGraphModule\n );\n shared.ServiceRegistry.register(GitGraph);\n return { shared, GitGraph };\n}\n__name(createGitGraphServices, \"createGitGraphServices\");\n\nexport {\n GitGraphModule,\n createGitGraphServices\n};\n", "import {\n AbstractMermaidTokenBuilder,\n CommonValueConverter,\n InfoGeneratedModule,\n MermaidGeneratedSharedModule,\n __name\n} from \"./chunk-FPAJGGOC.mjs\";\n\n// src/language/info/module.ts\nimport {\n EmptyFileSystem,\n createDefaultCoreModule,\n createDefaultSharedCoreModule,\n inject\n} from \"langium\";\n\n// src/language/info/tokenBuilder.ts\nvar InfoTokenBuilder = class extends AbstractMermaidTokenBuilder {\n static {\n __name(this, \"InfoTokenBuilder\");\n }\n constructor() {\n super([\"info\", \"showInfo\"]);\n }\n};\n\n// src/language/info/module.ts\nvar InfoModule = {\n parser: {\n TokenBuilder: /* @__PURE__ */ __name(() => new InfoTokenBuilder(), \"TokenBuilder\"),\n ValueConverter: /* @__PURE__ */ __name(() => new CommonValueConverter(), \"ValueConverter\")\n }\n};\nfunction createInfoServices(context = EmptyFileSystem) {\n const shared = inject(\n createDefaultSharedCoreModule(context),\n MermaidGeneratedSharedModule\n );\n const Info = inject(\n createDefaultCoreModule({ shared }),\n InfoGeneratedModule,\n InfoModule\n );\n shared.ServiceRegistry.register(Info);\n return { shared, Info };\n}\n__name(createInfoServices, \"createInfoServices\");\n\nexport {\n InfoModule,\n createInfoServices\n};\n", "import {\n AbstractMermaidTokenBuilder,\n CommonValueConverter,\n MermaidGeneratedSharedModule,\n PacketGeneratedModule,\n __name\n} from \"./chunk-FPAJGGOC.mjs\";\n\n// src/language/packet/module.ts\nimport {\n EmptyFileSystem,\n createDefaultCoreModule,\n createDefaultSharedCoreModule,\n inject\n} from \"langium\";\n\n// src/language/packet/tokenBuilder.ts\nvar PacketTokenBuilder = class extends AbstractMermaidTokenBuilder {\n static {\n __name(this, \"PacketTokenBuilder\");\n }\n constructor() {\n super([\"packet\"]);\n }\n};\n\n// src/language/packet/module.ts\nvar PacketModule = {\n parser: {\n TokenBuilder: /* @__PURE__ */ __name(() => new PacketTokenBuilder(), \"TokenBuilder\"),\n ValueConverter: /* @__PURE__ */ __name(() => new CommonValueConverter(), \"ValueConverter\")\n }\n};\nfunction createPacketServices(context = EmptyFileSystem) {\n const shared = inject(\n createDefaultSharedCoreModule(context),\n MermaidGeneratedSharedModule\n );\n const Packet = inject(\n createDefaultCoreModule({ shared }),\n PacketGeneratedModule,\n PacketModule\n );\n shared.ServiceRegistry.register(Packet);\n return { shared, Packet };\n}\n__name(createPacketServices, \"createPacketServices\");\n\nexport {\n PacketModule,\n createPacketServices\n};\n", "import {\n AbstractMermaidTokenBuilder,\n AbstractMermaidValueConverter,\n MermaidGeneratedSharedModule,\n PieGeneratedModule,\n __name\n} from \"./chunk-FPAJGGOC.mjs\";\n\n// src/language/pie/module.ts\nimport {\n EmptyFileSystem,\n createDefaultCoreModule,\n createDefaultSharedCoreModule,\n inject\n} from \"langium\";\n\n// src/language/pie/tokenBuilder.ts\nvar PieTokenBuilder = class extends AbstractMermaidTokenBuilder {\n static {\n __name(this, \"PieTokenBuilder\");\n }\n constructor() {\n super([\"pie\", \"showData\"]);\n }\n};\n\n// src/language/pie/valueConverter.ts\nvar PieValueConverter = class extends AbstractMermaidValueConverter {\n static {\n __name(this, \"PieValueConverter\");\n }\n runCustomConverter(rule, input, _cstNode) {\n if (rule.name !== \"PIE_SECTION_LABEL\") {\n return void 0;\n }\n return input.replace(/\"/g, \"\").trim();\n }\n};\n\n// src/language/pie/module.ts\nvar PieModule = {\n parser: {\n TokenBuilder: /* @__PURE__ */ __name(() => new PieTokenBuilder(), \"TokenBuilder\"),\n ValueConverter: /* @__PURE__ */ __name(() => new PieValueConverter(), \"ValueConverter\")\n }\n};\nfunction createPieServices(context = EmptyFileSystem) {\n const shared = inject(\n createDefaultSharedCoreModule(context),\n MermaidGeneratedSharedModule\n );\n const Pie = inject(\n createDefaultCoreModule({ shared }),\n PieGeneratedModule,\n PieModule\n );\n shared.ServiceRegistry.register(Pie);\n return { shared, Pie };\n}\n__name(createPieServices, \"createPieServices\");\n\nexport {\n PieModule,\n createPieServices\n};\n", "import {\n AbstractMermaidTokenBuilder,\n AbstractMermaidValueConverter,\n ArchitectureGeneratedModule,\n MermaidGeneratedSharedModule,\n __name\n} from \"./chunk-FPAJGGOC.mjs\";\n\n// src/language/architecture/module.ts\nimport {\n EmptyFileSystem,\n createDefaultCoreModule,\n createDefaultSharedCoreModule,\n inject\n} from \"langium\";\n\n// src/language/architecture/tokenBuilder.ts\nvar ArchitectureTokenBuilder = class extends AbstractMermaidTokenBuilder {\n static {\n __name(this, \"ArchitectureTokenBuilder\");\n }\n constructor() {\n super([\"architecture\"]);\n }\n};\n\n// src/language/architecture/valueConverter.ts\nvar ArchitectureValueConverter = class extends AbstractMermaidValueConverter {\n static {\n __name(this, \"ArchitectureValueConverter\");\n }\n runCustomConverter(rule, input, _cstNode) {\n if (rule.name === \"ARCH_ICON\") {\n return input.replace(/[()]/g, \"\").trim();\n } else if (rule.name === \"ARCH_TEXT_ICON\") {\n return input.replace(/[\"()]/g, \"\");\n } else if (rule.name === \"ARCH_TITLE\") {\n return input.replace(/[[\\]]/g, \"\").trim();\n }\n return void 0;\n }\n};\n\n// src/language/architecture/module.ts\nvar ArchitectureModule = {\n parser: {\n TokenBuilder: /* @__PURE__ */ __name(() => new ArchitectureTokenBuilder(), \"TokenBuilder\"),\n ValueConverter: /* @__PURE__ */ __name(() => new ArchitectureValueConverter(), \"ValueConverter\")\n }\n};\nfunction createArchitectureServices(context = EmptyFileSystem) {\n const shared = inject(\n createDefaultSharedCoreModule(context),\n MermaidGeneratedSharedModule\n );\n const Architecture = inject(\n createDefaultCoreModule({ shared }),\n ArchitectureGeneratedModule,\n ArchitectureModule\n );\n shared.ServiceRegistry.register(Architecture);\n return { shared, Architecture };\n}\n__name(createArchitectureServices, \"createArchitectureServices\");\n\nexport {\n ArchitectureModule,\n createArchitectureServices\n};\n", "import {\n AbstractMermaidTokenBuilder,\n CommonValueConverter,\n MermaidGeneratedSharedModule,\n RadarGeneratedModule,\n __name\n} from \"./chunk-FPAJGGOC.mjs\";\n\n// src/language/radar/module.ts\nimport {\n EmptyFileSystem,\n createDefaultCoreModule,\n createDefaultSharedCoreModule,\n inject\n} from \"langium\";\n\n// src/language/radar/tokenBuilder.ts\nvar RadarTokenBuilder = class extends AbstractMermaidTokenBuilder {\n static {\n __name(this, \"RadarTokenBuilder\");\n }\n constructor() {\n super([\"radar-beta\"]);\n }\n};\n\n// src/language/radar/module.ts\nvar RadarModule = {\n parser: {\n TokenBuilder: /* @__PURE__ */ __name(() => new RadarTokenBuilder(), \"TokenBuilder\"),\n ValueConverter: /* @__PURE__ */ __name(() => new CommonValueConverter(), \"ValueConverter\")\n }\n};\nfunction createRadarServices(context = EmptyFileSystem) {\n const shared = inject(\n createDefaultSharedCoreModule(context),\n MermaidGeneratedSharedModule\n );\n const Radar = inject(\n createDefaultCoreModule({ shared }),\n RadarGeneratedModule,\n RadarModule\n );\n shared.ServiceRegistry.register(Radar);\n return { shared, Radar };\n}\n__name(createRadarServices, \"createRadarServices\");\n\nexport {\n RadarModule,\n createRadarServices\n};\n", "import {\n AbstractMermaidTokenBuilder,\n AbstractMermaidValueConverter,\n MermaidGeneratedSharedModule,\n TreemapGeneratedModule,\n __name\n} from \"./chunk-FPAJGGOC.mjs\";\n\n// src/language/treemap/module.ts\nimport {\n EmptyFileSystem,\n createDefaultCoreModule,\n createDefaultSharedCoreModule,\n inject\n} from \"langium\";\n\n// src/language/treemap/tokenBuilder.ts\nvar TreemapTokenBuilder = class extends AbstractMermaidTokenBuilder {\n static {\n __name(this, \"TreemapTokenBuilder\");\n }\n constructor() {\n super([\"treemap\"]);\n }\n};\n\n// src/language/treemap/valueConverter.ts\nvar classDefRegex = /classDef\\s+([A-Z_a-z]\\w+)(?:\\s+([^\\n\\r;]*))?;?/;\nvar TreemapValueConverter = class extends AbstractMermaidValueConverter {\n static {\n __name(this, \"TreemapValueConverter\");\n }\n runCustomConverter(rule, input, _cstNode) {\n if (rule.name === \"NUMBER2\") {\n return parseFloat(input.replace(/,/g, \"\"));\n } else if (rule.name === \"SEPARATOR\") {\n return input.substring(1, input.length - 1);\n } else if (rule.name === \"STRING2\") {\n return input.substring(1, input.length - 1);\n } else if (rule.name === \"INDENTATION\") {\n return input.length;\n } else if (rule.name === \"ClassDef\") {\n if (typeof input !== \"string\") {\n return input;\n }\n const match = classDefRegex.exec(input);\n if (match) {\n return {\n $type: \"ClassDefStatement\",\n className: match[1],\n styleText: match[2] || void 0\n };\n }\n }\n return void 0;\n }\n};\n\n// src/language/treemap/treemap-validator.ts\nfunction registerValidationChecks(services) {\n const validator = services.validation.TreemapValidator;\n const registry = services.validation.ValidationRegistry;\n if (registry) {\n const checks = {\n Treemap: validator.checkSingleRoot.bind(validator)\n // Remove unused validation for TreemapRow\n };\n registry.register(checks, validator);\n }\n}\n__name(registerValidationChecks, \"registerValidationChecks\");\nvar TreemapValidator = class {\n static {\n __name(this, \"TreemapValidator\");\n }\n /**\n * Validates that a treemap has only one root node.\n * A root node is defined as a node that has no indentation.\n */\n checkSingleRoot(doc, accept) {\n let rootNodeIndentation;\n for (const row of doc.TreemapRows) {\n if (!row.item) {\n continue;\n }\n if (rootNodeIndentation === void 0 && // Check if this is a root node (no indentation)\n row.indent === void 0) {\n rootNodeIndentation = 0;\n } else if (row.indent === void 0) {\n accept(\"error\", \"Multiple root nodes are not allowed in a treemap.\", {\n node: row,\n property: \"item\"\n });\n } else if (rootNodeIndentation !== void 0 && rootNodeIndentation >= parseInt(row.indent, 10)) {\n accept(\"error\", \"Multiple root nodes are not allowed in a treemap.\", {\n node: row,\n property: \"item\"\n });\n }\n }\n }\n};\n\n// src/language/treemap/module.ts\nvar TreemapModule = {\n parser: {\n TokenBuilder: /* @__PURE__ */ __name(() => new TreemapTokenBuilder(), \"TokenBuilder\"),\n ValueConverter: /* @__PURE__ */ __name(() => new TreemapValueConverter(), \"ValueConverter\")\n },\n validation: {\n TreemapValidator: /* @__PURE__ */ __name(() => new TreemapValidator(), \"TreemapValidator\")\n }\n};\nfunction createTreemapServices(context = EmptyFileSystem) {\n const shared = inject(\n createDefaultSharedCoreModule(context),\n MermaidGeneratedSharedModule\n );\n const Treemap = inject(\n createDefaultCoreModule({ shared }),\n TreemapGeneratedModule,\n TreemapModule\n );\n shared.ServiceRegistry.register(Treemap);\n registerValidationChecks(Treemap);\n return { shared, Treemap };\n}\n__name(createTreemapServices, \"createTreemapServices\");\n\nexport {\n TreemapModule,\n createTreemapServices\n};\n", "import {\n InfoModule,\n createInfoServices\n} from \"./chunk-LBM3YZW2.mjs\";\nimport \"./chunk-FPAJGGOC.mjs\";\nexport {\n InfoModule,\n createInfoServices\n};\n", "import {\n PacketModule,\n createPacketServices\n} from \"./chunk-76Q3JFCE.mjs\";\nimport \"./chunk-FPAJGGOC.mjs\";\nexport {\n PacketModule,\n createPacketServices\n};\n", "import {\n PieModule,\n createPieServices\n} from \"./chunk-T53DSG4Q.mjs\";\nimport \"./chunk-FPAJGGOC.mjs\";\nexport {\n PieModule,\n createPieServices\n};\n", "import {\n ArchitectureModule,\n createArchitectureServices\n} from \"./chunk-O7ZBX7Z2.mjs\";\nimport \"./chunk-FPAJGGOC.mjs\";\nexport {\n ArchitectureModule,\n createArchitectureServices\n};\n", "import {\n GitGraphModule,\n createGitGraphServices\n} from \"./chunk-S6J4BHB3.mjs\";\nimport \"./chunk-FPAJGGOC.mjs\";\nexport {\n GitGraphModule,\n createGitGraphServices\n};\n", "import {\n RadarModule,\n createRadarServices\n} from \"./chunk-LHMN2FUI.mjs\";\nimport \"./chunk-FPAJGGOC.mjs\";\nexport {\n RadarModule,\n createRadarServices\n};\n", "import {\n TreemapModule,\n createTreemapServices\n} from \"./chunk-FWNWRKHM.mjs\";\nimport \"./chunk-FPAJGGOC.mjs\";\nexport {\n TreemapModule,\n createTreemapServices\n};\n", "import {\n GitGraphModule,\n createGitGraphServices\n} from \"./chunks/mermaid-parser.core/chunk-S6J4BHB3.mjs\";\nimport {\n InfoModule,\n createInfoServices\n} from \"./chunks/mermaid-parser.core/chunk-LBM3YZW2.mjs\";\nimport {\n PacketModule,\n createPacketServices\n} from \"./chunks/mermaid-parser.core/chunk-76Q3JFCE.mjs\";\nimport {\n PieModule,\n createPieServices\n} from \"./chunks/mermaid-parser.core/chunk-T53DSG4Q.mjs\";\nimport {\n ArchitectureModule,\n createArchitectureServices\n} from \"./chunks/mermaid-parser.core/chunk-O7ZBX7Z2.mjs\";\nimport {\n RadarModule,\n createRadarServices\n} from \"./chunks/mermaid-parser.core/chunk-LHMN2FUI.mjs\";\nimport {\n TreemapModule,\n createTreemapServices\n} from \"./chunks/mermaid-parser.core/chunk-FWNWRKHM.mjs\";\nimport {\n AbstractMermaidTokenBuilder,\n AbstractMermaidValueConverter,\n Architecture,\n ArchitectureGeneratedModule,\n Branch,\n Commit,\n CommonTokenBuilder,\n CommonValueConverter,\n GitGraph,\n GitGraphGeneratedModule,\n Info,\n InfoGeneratedModule,\n Merge,\n MermaidGeneratedSharedModule,\n Packet,\n PacketBlock,\n PacketGeneratedModule,\n Pie,\n PieGeneratedModule,\n PieSection,\n Radar,\n RadarGeneratedModule,\n Statement,\n Treemap,\n TreemapGeneratedModule,\n __name,\n isArchitecture,\n isBranch,\n isCommit,\n isGitGraph,\n isInfo,\n isMerge,\n isPacket,\n isPacketBlock,\n isPie,\n isPieSection,\n isTreemap\n} from \"./chunks/mermaid-parser.core/chunk-FPAJGGOC.mjs\";\n\n// src/parse.ts\nvar parsers = {};\nvar initializers = {\n info: /* @__PURE__ */ __name(async () => {\n const { createInfoServices: createInfoServices2 } = await import(\"./chunks/mermaid-parser.core/info-NVLQJR56.mjs\");\n const parser = createInfoServices2().Info.parser.LangiumParser;\n parsers.info = parser;\n }, \"info\"),\n packet: /* @__PURE__ */ __name(async () => {\n const { createPacketServices: createPacketServices2 } = await import(\"./chunks/mermaid-parser.core/packet-BFZMPI3H.mjs\");\n const parser = createPacketServices2().Packet.parser.LangiumParser;\n parsers.packet = parser;\n }, \"packet\"),\n pie: /* @__PURE__ */ __name(async () => {\n const { createPieServices: createPieServices2 } = await import(\"./chunks/mermaid-parser.core/pie-7BOR55EZ.mjs\");\n const parser = createPieServices2().Pie.parser.LangiumParser;\n parsers.pie = parser;\n }, \"pie\"),\n architecture: /* @__PURE__ */ __name(async () => {\n const { createArchitectureServices: createArchitectureServices2 } = await import(\"./chunks/mermaid-parser.core/architecture-U656AL7Q.mjs\");\n const parser = createArchitectureServices2().Architecture.parser.LangiumParser;\n parsers.architecture = parser;\n }, \"architecture\"),\n gitGraph: /* @__PURE__ */ __name(async () => {\n const { createGitGraphServices: createGitGraphServices2 } = await import(\"./chunks/mermaid-parser.core/gitGraph-F6HP7TQM.mjs\");\n const parser = createGitGraphServices2().GitGraph.parser.LangiumParser;\n parsers.gitGraph = parser;\n }, \"gitGraph\"),\n radar: /* @__PURE__ */ __name(async () => {\n const { createRadarServices: createRadarServices2 } = await import(\"./chunks/mermaid-parser.core/radar-NHE76QYJ.mjs\");\n const parser = createRadarServices2().Radar.parser.LangiumParser;\n parsers.radar = parser;\n }, \"radar\"),\n treemap: /* @__PURE__ */ __name(async () => {\n const { createTreemapServices: createTreemapServices2 } = await import(\"./chunks/mermaid-parser.core/treemap-KMMF4GRG.mjs\");\n const parser = createTreemapServices2().Treemap.parser.LangiumParser;\n parsers.treemap = parser;\n }, \"treemap\")\n};\nasync function parse(diagramType, text) {\n const initializer = initializers[diagramType];\n if (!initializer) {\n throw new Error(`Unknown diagram type: ${diagramType}`);\n }\n if (!parsers[diagramType]) {\n await initializer();\n }\n const parser = parsers[diagramType];\n const result = parser.parse(text);\n if (result.lexerErrors.length > 0 || result.parserErrors.length > 0) {\n throw new MermaidParseError(result);\n }\n return result.value;\n}\n__name(parse, \"parse\");\nvar MermaidParseError = class extends Error {\n constructor(result) {\n const lexerErrors = result.lexerErrors.map((err) => err.message).join(\"\\n\");\n const parserErrors = result.parserErrors.map((err) => err.message).join(\"\\n\");\n super(`Parsing failed: ${lexerErrors} ${parserErrors}`);\n this.result = result;\n }\n static {\n __name(this, \"MermaidParseError\");\n }\n};\nexport {\n AbstractMermaidTokenBuilder,\n AbstractMermaidValueConverter,\n Architecture,\n ArchitectureGeneratedModule,\n ArchitectureModule,\n Branch,\n Commit,\n CommonTokenBuilder,\n CommonValueConverter,\n GitGraph,\n GitGraphGeneratedModule,\n GitGraphModule,\n Info,\n InfoGeneratedModule,\n InfoModule,\n Merge,\n MermaidGeneratedSharedModule,\n MermaidParseError,\n Packet,\n PacketBlock,\n PacketGeneratedModule,\n PacketModule,\n Pie,\n PieGeneratedModule,\n PieModule,\n PieSection,\n Radar,\n RadarGeneratedModule,\n RadarModule,\n Statement,\n Treemap,\n TreemapGeneratedModule,\n TreemapModule,\n createArchitectureServices,\n createGitGraphServices,\n createInfoServices,\n createPacketServices,\n createPieServices,\n createRadarServices,\n createTreemapServices,\n isArchitecture,\n isBranch,\n isCommit,\n isGitGraph,\n isInfo,\n isMerge,\n isPacket,\n isPacketBlock,\n isPie,\n isPieSection,\n isTreemap,\n parse\n};\n", "import type { DiagramAST } from '@mermaid-js/parser';\nimport type { DiagramDB } from '../../diagram-api/types.js';\n\nexport function populateCommonDb(ast: DiagramAST, db: DiagramDB) {\n if (ast.accDescr) {\n db.setAccDescription?.(ast.accDescr);\n }\n if (ast.accTitle) {\n db.setAccTitle?.(ast.accTitle);\n }\n if (ast.title) {\n db.setDiagramTitle?.(ast.title);\n }\n}\n", "import type { GitGraphDiagramConfig } from '../../config.type.js';\nimport type { DiagramDBBase } from '../../diagram-api/types.js';\n\nexport const commitType = {\n NORMAL: 0,\n REVERSE: 1,\n HIGHLIGHT: 2,\n MERGE: 3,\n CHERRY_PICK: 4,\n} as const;\n\nexport interface CommitDB {\n msg: string;\n id: string;\n type: number;\n tags?: string[];\n}\n\nexport interface BranchDB {\n name: string;\n order: number;\n}\n\nexport interface MergeDB {\n branch: string;\n id: string;\n type?: number;\n tags?: string[];\n}\n\nexport interface CherryPickDB {\n id: string;\n targetId: string;\n parent: string;\n tags?: string[];\n}\n\nexport interface Commit {\n id: string;\n message: string;\n seq: number;\n type: number;\n tags: string[];\n parents: string[];\n branch: string;\n customType?: number;\n customId?: boolean;\n}\n\nexport interface GitGraph {\n statements: Statement[];\n}\n\nexport type Statement = CommitAst | BranchAst | MergeAst | CheckoutAst | CherryPickingAst;\n\nexport interface CommitAst {\n $type: 'Commit';\n id: string;\n message?: string;\n tags?: string[];\n type?: 'NORMAL' | 'REVERSE' | 'HIGHLIGHT';\n}\n\nexport interface BranchAst {\n $type: 'Branch';\n name: string;\n order?: number;\n}\n\nexport interface MergeAst {\n $type: 'Merge';\n branch: string;\n id?: string;\n tags?: string[];\n type?: 'NORMAL' | 'REVERSE' | 'HIGHLIGHT';\n}\n\nexport interface CheckoutAst {\n $type: 'Checkout';\n branch: string;\n}\n\nexport interface CherryPickingAst {\n $type: 'CherryPicking';\n id: string;\n parent: string;\n tags?: string[];\n}\n\nexport interface GitGraphDB extends DiagramDBBase {\n commitType: typeof commitType;\n setDirection: (dir: DiagramOrientation) => void;\n setOptions: (rawOptString: string) => void;\n getOptions: () => any;\n commit: (commitDB: CommitDB) => void;\n branch: (branchDB: BranchDB) => void;\n merge: (mergeDB: MergeDB) => void;\n cherryPick: (cherryPickDB: CherryPickDB) => void;\n checkout: (branch: string) => void;\n prettyPrint: () => void;\n clear: () => void;\n getBranchesAsObjArray: () => { name: string }[];\n getBranches: () => Map;\n getCommits: () => Map;\n getCommitsArray: () => Commit[];\n getCurrentBranch: () => string;\n getDirection: () => DiagramOrientation;\n getHead: () => Commit | null;\n}\n\nexport interface GitGraphDBParseProvider extends Partial {\n commitType: typeof commitType;\n setDirection: (dir: DiagramOrientation) => void;\n commit: (commitDB: CommitDB) => void;\n branch: (branchDB: BranchDB) => void;\n merge: (mergeDB: MergeDB) => void;\n cherryPick: (cherryPickDB: CherryPickDB) => void;\n checkout: (branch: string) => void;\n}\n\nexport interface GitGraphDBRenderProvider extends Partial {\n prettyPrint: () => void;\n clear: () => void;\n getBranchesAsObjArray: () => { name: string }[];\n getBranches: () => Map;\n getCommits: () => Map;\n getCommitsArray: () => Commit[];\n getCurrentBranch: () => string;\n getDirection: () => DiagramOrientation;\n getHead: () => Commit | null;\n getDiagramTitle: () => string;\n}\n\nexport type DiagramOrientation = 'LR' | 'TB' | 'BT';\n", "/**\n * Resettable state storage.\n * @example\n * ```\n * const state = new ImperativeState(() => ({\n * foo: undefined as string | undefined,\n * bar: [] as number[],\n * baz: 1 as number | undefined,\n * }));\n *\n * state.records.foo = \"hi\";\n * console.log(state.records.foo); // prints \"hi\";\n * state.reset();\n * console.log(state.records.foo); // prints \"default\";\n *\n * // typeof state.records:\n * // {\n * // foo: string | undefined, // actual: undefined\n * // bar: number[], // actual: []\n * // baz: number | undefined, // actual: 1\n * // }\n * ```\n */\nexport class ImperativeState {\n public records: S;\n\n /**\n * @param init - Function that creates the default state.\n */\n constructor(private init: () => S) {\n this.records = this.init();\n }\n\n reset() {\n this.records = this.init();\n }\n}\n", "import { log } from '../../logger.js';\nimport { cleanAndMerge, random } from '../../utils.js';\nimport { getConfig as commonGetConfig } from '../../config.js';\nimport common from '../common/common.js';\nimport {\n setAccTitle,\n getAccTitle,\n getAccDescription,\n setAccDescription,\n clear as commonClear,\n setDiagramTitle,\n getDiagramTitle,\n} from '../common/commonDb.js';\nimport type {\n DiagramOrientation,\n Commit,\n GitGraphDB,\n CommitDB,\n MergeDB,\n BranchDB,\n CherryPickDB,\n} from './gitGraphTypes.js';\nimport { commitType } from './gitGraphTypes.js';\nimport { ImperativeState } from '../../utils/imperativeState.js';\n\nimport DEFAULT_CONFIG from '../../defaultConfig.js';\n\nimport type { GitGraphDiagramConfig } from '../../config.type.js';\ninterface GitGraphState {\n commits: Map;\n head: Commit | null;\n branchConfig: Map;\n branches: Map;\n currBranch: string;\n direction: DiagramOrientation;\n seq: number;\n options: any;\n}\n\nconst DEFAULT_GITGRAPH_CONFIG: Required = DEFAULT_CONFIG.gitGraph;\nconst getConfig = (): Required => {\n const config = cleanAndMerge({\n ...DEFAULT_GITGRAPH_CONFIG,\n ...commonGetConfig().gitGraph,\n });\n return config;\n};\n\nconst state = new ImperativeState(() => {\n const config = getConfig();\n const mainBranchName = config.mainBranchName;\n const mainBranchOrder = config.mainBranchOrder;\n return {\n mainBranchName,\n commits: new Map(),\n head: null,\n branchConfig: new Map([[mainBranchName, { name: mainBranchName, order: mainBranchOrder }]]),\n branches: new Map([[mainBranchName, null]]),\n currBranch: mainBranchName,\n direction: 'LR',\n seq: 0,\n options: {},\n };\n});\n\nfunction getID() {\n return random({ length: 7 });\n}\n\n/**\n * @param list - list of items\n * @param fn - function to get the key\n */\nfunction uniqBy(list: any[], fn: (item: any) => any) {\n const recordMap = Object.create(null);\n return list.reduce((out, item) => {\n const key = fn(item);\n if (!recordMap[key]) {\n recordMap[key] = true;\n out.push(item);\n }\n return out;\n }, []);\n}\n\nexport const setDirection = function (dir: DiagramOrientation) {\n state.records.direction = dir;\n};\n\nexport const setOptions = function (rawOptString: string) {\n log.debug('options str', rawOptString);\n rawOptString = rawOptString?.trim();\n rawOptString = rawOptString || '{}';\n try {\n state.records.options = JSON.parse(rawOptString);\n } catch (e: any) {\n log.error('error while parsing gitGraph options', e.message);\n }\n};\n\nexport const getOptions = function () {\n return state.records.options;\n};\n\nexport const commit = function (commitDB: CommitDB) {\n let msg = commitDB.msg;\n let id = commitDB.id;\n const type = commitDB.type;\n let tags = commitDB.tags;\n\n log.info('commit', msg, id, type, tags);\n log.debug('Entering commit:', msg, id, type, tags);\n const config = getConfig();\n id = common.sanitizeText(id, config);\n msg = common.sanitizeText(msg, config);\n tags = tags?.map((tag) => common.sanitizeText(tag, config));\n const newCommit: Commit = {\n id: id ? id : state.records.seq + '-' + getID(),\n message: msg,\n seq: state.records.seq++,\n type: type ?? commitType.NORMAL,\n tags: tags ?? [],\n parents: state.records.head == null ? [] : [state.records.head.id],\n branch: state.records.currBranch,\n };\n state.records.head = newCommit;\n log.info('main branch', config.mainBranchName);\n if (state.records.commits.has(newCommit.id)) {\n log.warn(`Commit ID ${newCommit.id} already exists`);\n }\n state.records.commits.set(newCommit.id, newCommit);\n state.records.branches.set(state.records.currBranch, newCommit.id);\n log.debug('in pushCommit ' + newCommit.id);\n};\n\nexport const branch = function (branchDB: BranchDB) {\n let name = branchDB.name;\n const order = branchDB.order;\n name = common.sanitizeText(name, getConfig());\n if (state.records.branches.has(name)) {\n throw new Error(\n `Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using \"checkout ${name}\")`\n );\n }\n\n state.records.branches.set(name, state.records.head != null ? state.records.head.id : null);\n state.records.branchConfig.set(name, { name, order });\n checkout(name);\n log.debug('in createBranch');\n};\n\nexport const merge = (mergeDB: MergeDB): void => {\n let otherBranch = mergeDB.branch;\n let customId = mergeDB.id;\n const overrideType = mergeDB.type;\n const customTags = mergeDB.tags;\n const config = getConfig();\n otherBranch = common.sanitizeText(otherBranch, config);\n if (customId) {\n customId = common.sanitizeText(customId, config);\n }\n const currentBranchCheck = state.records.branches.get(state.records.currBranch);\n const otherBranchCheck = state.records.branches.get(otherBranch);\n const currentCommit = currentBranchCheck\n ? state.records.commits.get(currentBranchCheck)\n : undefined;\n const otherCommit: Commit | undefined = otherBranchCheck\n ? state.records.commits.get(otherBranchCheck)\n : undefined;\n if (currentCommit && otherCommit && currentCommit.branch === otherBranch) {\n throw new Error(`Cannot merge branch '${otherBranch}' into itself.`);\n }\n if (state.records.currBranch === otherBranch) {\n const error: any = new Error('Incorrect usage of \"merge\". Cannot merge a branch to itself');\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: ['branch abc'],\n };\n throw error;\n }\n if (currentCommit === undefined || !currentCommit) {\n const error: any = new Error(\n `Incorrect usage of \"merge\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: ['commit'],\n };\n throw error;\n }\n if (!state.records.branches.has(otherBranch)) {\n const error: any = new Error(\n 'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + ') does not exist'\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: [`branch ${otherBranch}`],\n };\n throw error;\n }\n if (otherCommit === undefined || !otherCommit) {\n const error: any = new Error(\n 'Incorrect usage of \"merge\". Branch to be merged (' + otherBranch + ') has no commits'\n );\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: ['\"commit\"'],\n };\n throw error;\n }\n if (currentCommit === otherCommit) {\n const error: any = new Error('Incorrect usage of \"merge\". Both branches have same head');\n error.hash = {\n text: `merge ${otherBranch}`,\n token: `merge ${otherBranch}`,\n expected: ['branch abc'],\n };\n throw error;\n }\n if (customId && state.records.commits.has(customId)) {\n const error: any = new Error(\n 'Incorrect usage of \"merge\". Commit with id:' +\n customId +\n ' already exists, use different custom id'\n );\n error.hash = {\n text: `merge ${otherBranch} ${customId} ${overrideType} ${customTags?.join(' ')}`,\n token: `merge ${otherBranch} ${customId} ${overrideType} ${customTags?.join(' ')}`,\n expected: [\n `merge ${otherBranch} ${customId}_UNIQUE ${overrideType} ${customTags?.join(' ')}`,\n ],\n };\n\n throw error;\n }\n\n const verifiedBranch: string = otherBranchCheck ? otherBranchCheck : ''; //figure out a cleaner way to do this\n\n const commit = {\n id: customId || `${state.records.seq}-${getID()}`,\n message: `merged branch ${otherBranch} into ${state.records.currBranch}`,\n seq: state.records.seq++,\n parents: state.records.head == null ? [] : [state.records.head.id, verifiedBranch],\n branch: state.records.currBranch,\n type: commitType.MERGE,\n customType: overrideType,\n customId: customId ? true : false,\n tags: customTags ?? [],\n } satisfies Commit;\n state.records.head = commit;\n state.records.commits.set(commit.id, commit);\n state.records.branches.set(state.records.currBranch, commit.id);\n log.debug(state.records.branches);\n log.debug('in mergeBranch');\n};\n\nexport const cherryPick = function (cherryPickDB: CherryPickDB) {\n let sourceId = cherryPickDB.id;\n let targetId = cherryPickDB.targetId;\n let tags = cherryPickDB.tags;\n let parentCommitId = cherryPickDB.parent;\n log.debug('Entering cherryPick:', sourceId, targetId, tags);\n const config = getConfig();\n sourceId = common.sanitizeText(sourceId, config);\n targetId = common.sanitizeText(targetId, config);\n\n tags = tags?.map((tag) => common.sanitizeText(tag, config));\n\n parentCommitId = common.sanitizeText(parentCommitId, config);\n\n if (!sourceId || !state.records.commits.has(sourceId)) {\n const error: any = new Error(\n 'Incorrect usage of \"cherryPick\". Source commit id should exist and provided'\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: ['cherry-pick abc'],\n };\n throw error;\n }\n\n const sourceCommit = state.records.commits.get(sourceId);\n if (sourceCommit === undefined || !sourceCommit) {\n throw new Error('Incorrect usage of \"cherryPick\". Source commit id should exist and provided');\n }\n if (\n parentCommitId &&\n !(Array.isArray(sourceCommit.parents) && sourceCommit.parents.includes(parentCommitId))\n ) {\n const error = new Error(\n 'Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.'\n );\n throw error;\n }\n const sourceCommitBranch = sourceCommit.branch;\n if (sourceCommit.type === commitType.MERGE && !parentCommitId) {\n const error = new Error(\n 'Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.'\n );\n throw error;\n }\n if (!targetId || !state.records.commits.has(targetId)) {\n // cherry-pick source commit to current branch\n\n if (sourceCommitBranch === state.records.currBranch) {\n const error: any = new Error(\n 'Incorrect usage of \"cherryPick\". Source commit is already on current branch'\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: ['cherry-pick abc'],\n };\n throw error;\n }\n const currentCommitId = state.records.branches.get(state.records.currBranch);\n if (currentCommitId === undefined || !currentCommitId) {\n const error: any = new Error(\n `Incorrect usage of \"cherry-pick\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: ['cherry-pick abc'],\n };\n throw error;\n }\n\n const currentCommit = state.records.commits.get(currentCommitId);\n if (currentCommit === undefined || !currentCommit) {\n const error: any = new Error(\n `Incorrect usage of \"cherry-pick\". Current branch (${state.records.currBranch})has no commits`\n );\n error.hash = {\n text: `cherryPick ${sourceId} ${targetId}`,\n token: `cherryPick ${sourceId} ${targetId}`,\n expected: ['cherry-pick abc'],\n };\n throw error;\n }\n const commit = {\n id: state.records.seq + '-' + getID(),\n message: `cherry-picked ${sourceCommit?.message} into ${state.records.currBranch}`,\n seq: state.records.seq++,\n parents: state.records.head == null ? [] : [state.records.head.id, sourceCommit.id],\n branch: state.records.currBranch,\n type: commitType.CHERRY_PICK,\n tags: tags\n ? tags.filter(Boolean)\n : [\n `cherry-pick:${sourceCommit.id}${\n sourceCommit.type === commitType.MERGE ? `|parent:${parentCommitId}` : ''\n }`,\n ],\n };\n\n state.records.head = commit;\n state.records.commits.set(commit.id, commit);\n state.records.branches.set(state.records.currBranch, commit.id);\n log.debug(state.records.branches);\n log.debug('in cherryPick');\n }\n};\nexport const checkout = function (branch: string) {\n branch = common.sanitizeText(branch, getConfig());\n if (!state.records.branches.has(branch)) {\n const error: any = new Error(\n `Trying to checkout branch which is not yet created. (Help try using \"branch ${branch}\")`\n );\n error.hash = {\n text: `checkout ${branch}`,\n token: `checkout ${branch}`,\n expected: [`branch ${branch}`],\n };\n throw error;\n } else {\n state.records.currBranch = branch;\n const id = state.records.branches.get(state.records.currBranch);\n if (id === undefined || !id) {\n state.records.head = null;\n } else {\n state.records.head = state.records.commits.get(id) ?? null;\n }\n }\n};\n\n/**\n * @param arr - array\n * @param key - key\n * @param newVal - new value\n */\nfunction upsert(arr: any[], key: any, newVal: any) {\n const index = arr.indexOf(key);\n if (index === -1) {\n arr.push(newVal);\n } else {\n arr.splice(index, 1, newVal);\n }\n}\n\nfunction prettyPrintCommitHistory(commitArr: Commit[]) {\n const commit = commitArr.reduce((out, commit) => {\n if (out.seq > commit.seq) {\n return out;\n }\n return commit;\n }, commitArr[0]);\n let line = '';\n commitArr.forEach(function (c) {\n if (c === commit) {\n line += '\\t*';\n } else {\n line += '\\t|';\n }\n });\n const label = [line, commit.id, commit.seq];\n for (const branch in state.records.branches) {\n if (state.records.branches.get(branch) === commit.id) {\n label.push(branch);\n }\n }\n log.debug(label.join(' '));\n if (commit.parents && commit.parents.length == 2 && commit.parents[0] && commit.parents[1]) {\n const newCommit = state.records.commits.get(commit.parents[0]);\n upsert(commitArr, commit, newCommit);\n if (commit.parents[1]) {\n commitArr.push(state.records.commits.get(commit.parents[1])!);\n }\n } else if (commit.parents.length == 0) {\n return;\n } else {\n if (commit.parents[0]) {\n const newCommit = state.records.commits.get(commit.parents[0]);\n upsert(commitArr, commit, newCommit);\n }\n }\n commitArr = uniqBy(commitArr, (c) => c.id);\n prettyPrintCommitHistory(commitArr);\n}\n\nexport const prettyPrint = function () {\n log.debug(state.records.commits);\n const node = getCommitsArray()[0];\n prettyPrintCommitHistory([node]);\n};\n\nexport const clear = function () {\n state.reset();\n commonClear();\n};\n\nexport const getBranchesAsObjArray = function () {\n const branchesArray = [...state.records.branchConfig.values()]\n .map((branchConfig, i) => {\n if (branchConfig.order !== null && branchConfig.order !== undefined) {\n return branchConfig;\n }\n return {\n ...branchConfig,\n order: parseFloat(`0.${i}`),\n };\n })\n .sort((a, b) => (a.order ?? 0) - (b.order ?? 0))\n .map(({ name }) => ({ name }));\n\n return branchesArray;\n};\n\nexport const getBranches = function () {\n return state.records.branches;\n};\nexport const getCommits = function () {\n return state.records.commits;\n};\nexport const getCommitsArray = function () {\n const commitArr = [...state.records.commits.values()];\n commitArr.forEach(function (o) {\n log.debug(o.id);\n });\n commitArr.sort((a, b) => a.seq - b.seq);\n return commitArr;\n};\nexport const getCurrentBranch = function () {\n return state.records.currBranch;\n};\nexport const getDirection = function () {\n return state.records.direction;\n};\nexport const getHead = function () {\n return state.records.head;\n};\n\nexport const db: GitGraphDB = {\n commitType,\n getConfig,\n setDirection,\n setOptions,\n getOptions,\n commit,\n branch,\n merge,\n cherryPick,\n checkout,\n //reset,\n prettyPrint,\n clear,\n getBranchesAsObjArray,\n getBranches,\n getCommits,\n getCommitsArray,\n getCurrentBranch,\n getDirection,\n getHead,\n setAccTitle,\n getAccTitle,\n getAccDescription,\n setAccDescription,\n setDiagramTitle,\n getDiagramTitle,\n};\n", "import type { GitGraph } from '@mermaid-js/parser';\nimport { parse } from '@mermaid-js/parser';\nimport type { ParserDefinition } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport { populateCommonDb } from '../common/populateCommonDb.js';\nimport { db } from './gitGraphAst.js';\nimport { commitType } from './gitGraphTypes.js';\nimport type {\n CheckoutAst,\n CherryPickingAst,\n MergeAst,\n CommitAst,\n BranchAst,\n GitGraphDBParseProvider,\n CommitDB,\n BranchDB,\n MergeDB,\n CherryPickDB,\n} from './gitGraphTypes.js';\n\nconst populate = (ast: GitGraph, db: GitGraphDBParseProvider) => {\n populateCommonDb(ast, db);\n // @ts-ignore: this wont exist if the direction is not specified\n if (ast.dir) {\n // @ts-ignore: this wont exist if the direction is not specified\n db.setDirection(ast.dir);\n }\n for (const statement of ast.statements) {\n parseStatement(statement, db);\n }\n};\n\nconst parseStatement = (statement: any, db: GitGraphDBParseProvider) => {\n const parsers: Record void> = {\n Commit: (stmt) => db.commit(parseCommit(stmt)),\n Branch: (stmt) => db.branch(parseBranch(stmt)),\n Merge: (stmt) => db.merge(parseMerge(stmt)),\n Checkout: (stmt) => db.checkout(parseCheckout(stmt)),\n CherryPicking: (stmt) => db.cherryPick(parseCherryPicking(stmt)),\n };\n\n const parser = parsers[statement.$type];\n if (parser) {\n parser(statement);\n } else {\n log.error(`Unknown statement type: ${statement.$type}`);\n }\n};\n\nconst parseCommit = (commit: CommitAst): CommitDB => {\n const commitDB: CommitDB = {\n id: commit.id,\n msg: commit.message ?? '',\n type: commit.type !== undefined ? commitType[commit.type] : commitType.NORMAL,\n tags: commit.tags ?? undefined,\n };\n return commitDB;\n};\n\nconst parseBranch = (branch: BranchAst): BranchDB => {\n const branchDB: BranchDB = {\n name: branch.name,\n order: branch.order ?? 0,\n };\n return branchDB;\n};\n\nconst parseMerge = (merge: MergeAst): MergeDB => {\n const mergeDB: MergeDB = {\n branch: merge.branch,\n id: merge.id ?? '',\n type: merge.type !== undefined ? commitType[merge.type] : undefined,\n tags: merge.tags ?? undefined,\n };\n return mergeDB;\n};\n\nconst parseCheckout = (checkout: CheckoutAst): string => {\n const branch = checkout.branch;\n return branch;\n};\n\nconst parseCherryPicking = (cherryPicking: CherryPickingAst): CherryPickDB => {\n const cherryPickDB: CherryPickDB = {\n id: cherryPicking.id,\n targetId: '',\n tags: cherryPicking.tags?.length === 0 ? undefined : cherryPicking.tags,\n parent: cherryPicking.parent,\n };\n return cherryPickDB;\n};\n\nexport const parser: ParserDefinition = {\n parse: async (input: string): Promise => {\n const ast: GitGraph = await parse('gitGraph', input);\n log.debug(ast);\n populate(ast, db);\n },\n};\n\nif (import.meta.vitest) {\n const { it, expect, describe } = import.meta.vitest;\n\n const mockDB: GitGraphDBParseProvider = {\n commitType: commitType,\n setDirection: vi.fn(),\n commit: vi.fn(),\n branch: vi.fn(),\n merge: vi.fn(),\n cherryPick: vi.fn(),\n checkout: vi.fn(),\n };\n\n describe('GitGraph Parser', () => {\n it('should parse a commit statement', () => {\n const commit = {\n $type: 'Commit',\n id: '1',\n message: 'test',\n tags: ['tag1', 'tag2'],\n type: 'NORMAL',\n };\n parseStatement(commit, mockDB);\n expect(mockDB.commit).toHaveBeenCalledWith({\n id: '1',\n msg: 'test',\n tags: ['tag1', 'tag2'],\n type: 0,\n });\n });\n it('should parse a branch statement', () => {\n const branch = {\n $type: 'Branch',\n name: 'newBranch',\n order: 1,\n };\n parseStatement(branch, mockDB);\n expect(mockDB.branch).toHaveBeenCalledWith({ name: 'newBranch', order: 1 });\n });\n it('should parse a checkout statement', () => {\n const checkout = {\n $type: 'Checkout',\n branch: 'newBranch',\n };\n parseStatement(checkout, mockDB);\n expect(mockDB.checkout).toHaveBeenCalledWith('newBranch');\n });\n it('should parse a merge statement', () => {\n const merge = {\n $type: 'Merge',\n branch: 'newBranch',\n id: '1',\n tags: ['tag1', 'tag2'],\n type: 'NORMAL',\n };\n parseStatement(merge, mockDB);\n expect(mockDB.merge).toHaveBeenCalledWith({\n branch: 'newBranch',\n id: '1',\n tags: ['tag1', 'tag2'],\n type: 0,\n });\n });\n it('should parse a cherry picking statement', () => {\n const cherryPick = {\n $type: 'CherryPicking',\n id: '1',\n tags: ['tag1', 'tag2'],\n parent: '2',\n };\n parseStatement(cherryPick, mockDB);\n expect(mockDB.cherryPick).toHaveBeenCalledWith({\n id: '1',\n targetId: '',\n parent: '2',\n tags: ['tag1', 'tag2'],\n });\n });\n\n it('should parse a langium generated gitGraph ast', () => {\n const dummy: GitGraph = {\n $type: 'GitGraph',\n statements: [],\n };\n const gitGraphAst: GitGraph = {\n $type: 'GitGraph',\n statements: [\n {\n $container: dummy,\n $type: 'Commit',\n id: '1',\n message: 'test',\n tags: ['tag1', 'tag2'],\n type: 'NORMAL',\n },\n {\n $container: dummy,\n $type: 'Branch',\n name: 'newBranch',\n order: 1,\n },\n {\n $container: dummy,\n $type: 'Merge',\n branch: 'newBranch',\n id: '1',\n tags: ['tag1', 'tag2'],\n type: 'NORMAL',\n },\n {\n $container: dummy,\n $type: 'Checkout',\n branch: 'newBranch',\n },\n {\n $container: dummy,\n $type: 'CherryPicking',\n id: '1',\n tags: ['tag1', 'tag2'],\n parent: '2',\n },\n ],\n };\n\n populate(gitGraphAst, mockDB);\n\n expect(mockDB.commit).toHaveBeenCalledWith({\n id: '1',\n msg: 'test',\n tags: ['tag1', 'tag2'],\n type: 0,\n });\n expect(mockDB.branch).toHaveBeenCalledWith({ name: 'newBranch', order: 1 });\n expect(mockDB.merge).toHaveBeenCalledWith({\n branch: 'newBranch',\n id: '1',\n tags: ['tag1', 'tag2'],\n type: 0,\n });\n expect(mockDB.checkout).toHaveBeenCalledWith('newBranch');\n });\n });\n}\n", "import { select } from 'd3';\nimport { getConfig, setupGraphViewbox } from '../../diagram-api/diagramAPI.js';\nimport { log } from '../../logger.js';\nimport utils from '../../utils.js';\nimport type { DrawDefinition } from '../../diagram-api/types.js';\nimport type d3 from 'd3';\nimport type { Commit, GitGraphDBRenderProvider, DiagramOrientation } from './gitGraphTypes.js';\nimport { commitType } from './gitGraphTypes.js';\n\ninterface BranchPosition {\n pos: number;\n index: number;\n}\n\ninterface CommitPosition {\n x: number;\n y: number;\n}\n\ninterface CommitPositionOffset extends CommitPosition {\n posWithOffset: number;\n}\n\nconst DEFAULT_CONFIG = getConfig();\nconst DEFAULT_GITGRAPH_CONFIG = DEFAULT_CONFIG?.gitGraph;\nconst LAYOUT_OFFSET = 10;\nconst COMMIT_STEP = 40;\nconst PX = 4;\nconst PY = 2;\n\nconst THEME_COLOR_LIMIT = 8;\nconst branchPos = new Map();\nconst commitPos = new Map();\nconst defaultPos = 30;\n\nlet allCommitsDict = new Map();\nlet lanes: number[] = [];\nlet maxPos = 0;\nlet dir: DiagramOrientation = 'LR';\n\nconst clear = () => {\n branchPos.clear();\n commitPos.clear();\n allCommitsDict.clear();\n maxPos = 0;\n lanes = [];\n dir = 'LR';\n};\n\nconst drawText = (txt: string | string[]) => {\n const svgLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n const rows = typeof txt === 'string' ? txt.split(/\\\\n|\\n|/gi) : txt;\n\n rows.forEach((row) => {\n const tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan');\n tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n tspan.setAttribute('dy', '1em');\n tspan.setAttribute('x', '0');\n tspan.setAttribute('class', 'row');\n tspan.textContent = row.trim();\n svgLabel.appendChild(tspan);\n });\n\n return svgLabel;\n};\n\nconst findClosestParent = (parents: string[]): string | undefined => {\n let closestParent: string | undefined;\n let comparisonFunc;\n let targetPosition: number;\n if (dir === 'BT') {\n comparisonFunc = (a: number, b: number) => a <= b;\n targetPosition = Infinity;\n } else {\n comparisonFunc = (a: number, b: number) => a >= b;\n targetPosition = 0;\n }\n\n parents.forEach((parent) => {\n const parentPosition =\n dir === 'TB' || dir == 'BT' ? commitPos.get(parent)?.y : commitPos.get(parent)?.x;\n\n if (parentPosition !== undefined && comparisonFunc(parentPosition, targetPosition)) {\n closestParent = parent;\n targetPosition = parentPosition;\n }\n });\n\n return closestParent;\n};\n\nconst findClosestParentBT = (parents: string[]) => {\n let closestParent = '';\n let maxPosition = Infinity;\n\n parents.forEach((parent) => {\n const parentPosition = commitPos.get(parent)!.y;\n if (parentPosition <= maxPosition) {\n closestParent = parent;\n maxPosition = parentPosition;\n }\n });\n return closestParent || undefined;\n};\n\nconst setParallelBTPos = (\n sortedKeys: string[],\n commits: Map,\n defaultPos: number\n) => {\n let curPos = defaultPos;\n let maxPosition = defaultPos;\n const roots: Commit[] = [];\n\n sortedKeys.forEach((key) => {\n const commit = commits.get(key);\n if (!commit) {\n throw new Error(`Commit not found for key ${key}`);\n }\n\n if (commit.parents.length) {\n curPos = calculateCommitPosition(commit);\n maxPosition = Math.max(curPos, maxPosition);\n } else {\n roots.push(commit);\n }\n setCommitPosition(commit, curPos);\n });\n\n curPos = maxPosition;\n roots.forEach((commit) => {\n setRootPosition(commit, curPos, defaultPos);\n });\n sortedKeys.forEach((key) => {\n const commit = commits.get(key);\n\n if (commit?.parents.length) {\n const closestParent = findClosestParentBT(commit.parents)!;\n curPos = commitPos.get(closestParent)!.y - COMMIT_STEP;\n if (curPos <= maxPosition) {\n maxPosition = curPos;\n }\n const x = branchPos.get(commit.branch)!.pos;\n const y = curPos - LAYOUT_OFFSET;\n commitPos.set(commit.id, { x: x, y: y });\n }\n });\n};\n\nconst findClosestParentPos = (commit: Commit): number => {\n const closestParent = findClosestParent(commit.parents.filter((p) => p !== null));\n if (!closestParent) {\n throw new Error(`Closest parent not found for commit ${commit.id}`);\n }\n\n const closestParentPos = commitPos.get(closestParent)?.y;\n if (closestParentPos === undefined) {\n throw new Error(`Closest parent position not found for commit ${commit.id}`);\n }\n return closestParentPos;\n};\n\nconst calculateCommitPosition = (commit: Commit): number => {\n const closestParentPos = findClosestParentPos(commit);\n return closestParentPos + COMMIT_STEP;\n};\n\nconst setCommitPosition = (commit: Commit, curPos: number): CommitPosition => {\n const branch = branchPos.get(commit.branch);\n\n if (!branch) {\n throw new Error(`Branch not found for commit ${commit.id}`);\n }\n\n const x = branch.pos;\n const y = curPos + LAYOUT_OFFSET;\n commitPos.set(commit.id, { x, y });\n return { x, y };\n};\n\nconst setRootPosition = (commit: Commit, curPos: number, defaultPos: number) => {\n const branch = branchPos.get(commit.branch);\n if (!branch) {\n throw new Error(`Branch not found for commit ${commit.id}`);\n }\n\n const y = curPos + defaultPos;\n const x = branch.pos;\n commitPos.set(commit.id, { x, y });\n};\n\nconst drawCommitBullet = (\n gBullets: d3.Selection,\n commit: Commit,\n commitPosition: CommitPositionOffset,\n typeClass: string,\n branchIndex: number,\n commitSymbolType: number\n) => {\n if (commitSymbolType === commitType.HIGHLIGHT) {\n gBullets\n .append('rect')\n .attr('x', commitPosition.x - 10)\n .attr('y', commitPosition.y - 10)\n .attr('width', 20)\n .attr('height', 20)\n .attr(\n 'class',\n `commit ${commit.id} commit-highlight${branchIndex % THEME_COLOR_LIMIT} ${typeClass}-outer`\n );\n gBullets\n .append('rect')\n .attr('x', commitPosition.x - 6)\n .attr('y', commitPosition.y - 6)\n .attr('width', 12)\n .attr('height', 12)\n .attr(\n 'class',\n `commit ${commit.id} commit${branchIndex % THEME_COLOR_LIMIT} ${typeClass}-inner`\n );\n } else if (commitSymbolType === commitType.CHERRY_PICK) {\n gBullets\n .append('circle')\n .attr('cx', commitPosition.x)\n .attr('cy', commitPosition.y)\n .attr('r', 10)\n .attr('class', `commit ${commit.id} ${typeClass}`);\n gBullets\n .append('circle')\n .attr('cx', commitPosition.x - 3)\n .attr('cy', commitPosition.y + 2)\n .attr('r', 2.75)\n .attr('fill', '#fff')\n .attr('class', `commit ${commit.id} ${typeClass}`);\n gBullets\n .append('circle')\n .attr('cx', commitPosition.x + 3)\n .attr('cy', commitPosition.y + 2)\n .attr('r', 2.75)\n .attr('fill', '#fff')\n .attr('class', `commit ${commit.id} ${typeClass}`);\n gBullets\n .append('line')\n .attr('x1', commitPosition.x + 3)\n .attr('y1', commitPosition.y + 1)\n .attr('x2', commitPosition.x)\n .attr('y2', commitPosition.y - 5)\n .attr('stroke', '#fff')\n .attr('class', `commit ${commit.id} ${typeClass}`);\n gBullets\n .append('line')\n .attr('x1', commitPosition.x - 3)\n .attr('y1', commitPosition.y + 1)\n .attr('x2', commitPosition.x)\n .attr('y2', commitPosition.y - 5)\n .attr('stroke', '#fff')\n .attr('class', `commit ${commit.id} ${typeClass}`);\n } else {\n const circle = gBullets.append('circle');\n circle.attr('cx', commitPosition.x);\n circle.attr('cy', commitPosition.y);\n circle.attr('r', commit.type === commitType.MERGE ? 9 : 10);\n circle.attr('class', `commit ${commit.id} commit${branchIndex % THEME_COLOR_LIMIT}`);\n if (commitSymbolType === commitType.MERGE) {\n const circle2 = gBullets.append('circle');\n circle2.attr('cx', commitPosition.x);\n circle2.attr('cy', commitPosition.y);\n circle2.attr('r', 6);\n circle2.attr(\n 'class',\n `commit ${typeClass} ${commit.id} commit${branchIndex % THEME_COLOR_LIMIT}`\n );\n }\n if (commitSymbolType === commitType.REVERSE) {\n const cross = gBullets.append('path');\n cross\n .attr(\n 'd',\n `M ${commitPosition.x - 5},${commitPosition.y - 5}L${commitPosition.x + 5},${commitPosition.y + 5}M${commitPosition.x - 5},${commitPosition.y + 5}L${commitPosition.x + 5},${commitPosition.y - 5}`\n )\n .attr('class', `commit ${typeClass} ${commit.id} commit${branchIndex % THEME_COLOR_LIMIT}`);\n }\n }\n};\n\nconst drawCommitLabel = (\n gLabels: d3.Selection,\n commit: Commit,\n commitPosition: CommitPositionOffset,\n pos: number\n) => {\n if (\n commit.type !== commitType.CHERRY_PICK &&\n ((commit.customId && commit.type === commitType.MERGE) || commit.type !== commitType.MERGE) &&\n DEFAULT_GITGRAPH_CONFIG?.showCommitLabel\n ) {\n const wrapper = gLabels.append('g');\n const labelBkg = wrapper.insert('rect').attr('class', 'commit-label-bkg');\n const text = wrapper\n .append('text')\n .attr('x', pos)\n .attr('y', commitPosition.y + 25)\n .attr('class', 'commit-label')\n .text(commit.id);\n const bbox = text.node()?.getBBox();\n\n if (bbox) {\n labelBkg\n .attr('x', commitPosition.posWithOffset - bbox.width / 2 - PY)\n .attr('y', commitPosition.y + 13.5)\n .attr('width', bbox.width + 2 * PY)\n .attr('height', bbox.height + 2 * PY);\n\n if (dir === 'TB' || dir === 'BT') {\n labelBkg\n .attr('x', commitPosition.x - (bbox.width + 4 * PX + 5))\n .attr('y', commitPosition.y - 12);\n text\n .attr('x', commitPosition.x - (bbox.width + 4 * PX))\n .attr('y', commitPosition.y + bbox.height - 12);\n } else {\n text.attr('x', commitPosition.posWithOffset - bbox.width / 2);\n }\n\n if (DEFAULT_GITGRAPH_CONFIG.rotateCommitLabel) {\n if (dir === 'TB' || dir === 'BT') {\n text.attr(\n 'transform',\n 'rotate(' + -45 + ', ' + commitPosition.x + ', ' + commitPosition.y + ')'\n );\n labelBkg.attr(\n 'transform',\n 'rotate(' + -45 + ', ' + commitPosition.x + ', ' + commitPosition.y + ')'\n );\n } else {\n const r_x = -7.5 - ((bbox.width + 10) / 25) * 9.5;\n const r_y = 10 + (bbox.width / 25) * 8.5;\n wrapper.attr(\n 'transform',\n 'translate(' +\n r_x +\n ', ' +\n r_y +\n ') rotate(' +\n -45 +\n ', ' +\n pos +\n ', ' +\n commitPosition.y +\n ')'\n );\n }\n }\n }\n }\n};\n\nconst drawCommitTags = (\n gLabels: d3.Selection,\n commit: Commit,\n commitPosition: CommitPositionOffset,\n pos: number\n) => {\n if (commit.tags.length > 0) {\n let yOffset = 0;\n let maxTagBboxWidth = 0;\n let maxTagBboxHeight = 0;\n const tagElements = [];\n\n for (const tagValue of commit.tags.reverse()) {\n const rect = gLabels.insert('polygon');\n const hole = gLabels.append('circle');\n const tag = gLabels\n .append('text')\n .attr('y', commitPosition.y - 16 - yOffset)\n .attr('class', 'tag-label')\n .text(tagValue);\n const tagBbox = tag.node()?.getBBox();\n if (!tagBbox) {\n throw new Error('Tag bbox not found');\n }\n\n maxTagBboxWidth = Math.max(maxTagBboxWidth, tagBbox.width);\n maxTagBboxHeight = Math.max(maxTagBboxHeight, tagBbox.height);\n\n tag.attr('x', commitPosition.posWithOffset - tagBbox.width / 2);\n\n tagElements.push({\n tag,\n hole,\n rect,\n yOffset,\n });\n\n yOffset += 20;\n }\n\n for (const { tag, hole, rect, yOffset } of tagElements) {\n const h2 = maxTagBboxHeight / 2;\n const ly = commitPosition.y - 19.2 - yOffset;\n rect.attr('class', 'tag-label-bkg').attr(\n 'points',\n `\n ${pos - maxTagBboxWidth / 2 - PX / 2},${ly + PY} \n ${pos - maxTagBboxWidth / 2 - PX / 2},${ly - PY}\n ${commitPosition.posWithOffset - maxTagBboxWidth / 2 - PX},${ly - h2 - PY}\n ${commitPosition.posWithOffset + maxTagBboxWidth / 2 + PX},${ly - h2 - PY}\n ${commitPosition.posWithOffset + maxTagBboxWidth / 2 + PX},${ly + h2 + PY}\n ${commitPosition.posWithOffset - maxTagBboxWidth / 2 - PX},${ly + h2 + PY}`\n );\n\n hole\n .attr('cy', ly)\n .attr('cx', pos - maxTagBboxWidth / 2 + PX / 2)\n .attr('r', 1.5)\n .attr('class', 'tag-hole');\n\n if (dir === 'TB' || dir === 'BT') {\n const yOrigin = pos + yOffset;\n\n rect\n .attr('class', 'tag-label-bkg')\n .attr(\n 'points',\n `\n ${commitPosition.x},${yOrigin + 2}\n ${commitPosition.x},${yOrigin - 2}\n ${commitPosition.x + LAYOUT_OFFSET},${yOrigin - h2 - 2}\n ${commitPosition.x + LAYOUT_OFFSET + maxTagBboxWidth + 4},${yOrigin - h2 - 2}\n ${commitPosition.x + LAYOUT_OFFSET + maxTagBboxWidth + 4},${yOrigin + h2 + 2}\n ${commitPosition.x + LAYOUT_OFFSET},${yOrigin + h2 + 2}`\n )\n .attr('transform', 'translate(12,12) rotate(45, ' + commitPosition.x + ',' + pos + ')');\n hole\n .attr('cx', commitPosition.x + PX / 2)\n .attr('cy', yOrigin)\n .attr('transform', 'translate(12,12) rotate(45, ' + commitPosition.x + ',' + pos + ')');\n tag\n .attr('x', commitPosition.x + 5)\n .attr('y', yOrigin + 3)\n .attr('transform', 'translate(14,14) rotate(45, ' + commitPosition.x + ',' + pos + ')');\n }\n }\n }\n};\n\nconst getCommitClassType = (commit: Commit): string => {\n const commitSymbolType = commit.customType ?? commit.type;\n switch (commitSymbolType) {\n case commitType.NORMAL:\n return 'commit-normal';\n case commitType.REVERSE:\n return 'commit-reverse';\n case commitType.HIGHLIGHT:\n return 'commit-highlight';\n case commitType.MERGE:\n return 'commit-merge';\n case commitType.CHERRY_PICK:\n return 'commit-cherry-pick';\n default:\n return 'commit-normal';\n }\n};\n\nconst calculatePosition = (\n commit: Commit,\n dir: string,\n pos: number,\n commitPos: Map\n): number => {\n const defaultCommitPosition = { x: 0, y: 0 }; // Default position if commit is not found\n\n if (commit.parents.length > 0) {\n const closestParent = findClosestParent(commit.parents);\n if (closestParent) {\n const parentPosition = commitPos.get(closestParent) ?? defaultCommitPosition;\n\n if (dir === 'TB') {\n return parentPosition.y + COMMIT_STEP;\n } else if (dir === 'BT') {\n const currentPosition = commitPos.get(commit.id) ?? defaultCommitPosition;\n return currentPosition.y - COMMIT_STEP;\n } else {\n return parentPosition.x + COMMIT_STEP;\n }\n }\n } else {\n if (dir === 'TB') {\n return defaultPos;\n } else if (dir === 'BT') {\n const currentPosition = commitPos.get(commit.id) ?? defaultCommitPosition;\n return currentPosition.y - COMMIT_STEP;\n } else {\n return 0;\n }\n }\n return 0;\n};\n\nconst getCommitPosition = (\n commit: Commit,\n pos: number,\n isParallelCommits: boolean\n): CommitPositionOffset => {\n const posWithOffset = dir === 'BT' && isParallelCommits ? pos : pos + LAYOUT_OFFSET;\n const y = dir === 'TB' || dir === 'BT' ? posWithOffset : branchPos.get(commit.branch)?.pos;\n const x = dir === 'TB' || dir === 'BT' ? branchPos.get(commit.branch)?.pos : posWithOffset;\n if (x === undefined || y === undefined) {\n throw new Error(`Position were undefined for commit ${commit.id}`);\n }\n return { x, y, posWithOffset };\n};\n\nconst drawCommits = (\n svg: d3.Selection,\n commits: Map,\n modifyGraph: boolean\n) => {\n if (!DEFAULT_GITGRAPH_CONFIG) {\n throw new Error('GitGraph config not found');\n }\n const gBullets = svg.append('g').attr('class', 'commit-bullets');\n const gLabels = svg.append('g').attr('class', 'commit-labels');\n let pos = dir === 'TB' || dir === 'BT' ? defaultPos : 0;\n const keys = [...commits.keys()];\n const isParallelCommits = DEFAULT_GITGRAPH_CONFIG?.parallelCommits ?? false;\n\n const sortKeys = (a: string, b: string) => {\n const seqA = commits.get(a)?.seq;\n const seqB = commits.get(b)?.seq;\n return seqA !== undefined && seqB !== undefined ? seqA - seqB : 0;\n };\n\n let sortedKeys = keys.sort(sortKeys);\n if (dir === 'BT') {\n if (isParallelCommits) {\n setParallelBTPos(sortedKeys, commits, pos);\n }\n sortedKeys = sortedKeys.reverse();\n }\n\n sortedKeys.forEach((key) => {\n const commit = commits.get(key);\n if (!commit) {\n throw new Error(`Commit not found for key ${key}`);\n }\n if (isParallelCommits) {\n pos = calculatePosition(commit, dir, pos, commitPos);\n }\n\n const commitPosition = getCommitPosition(commit, pos, isParallelCommits);\n // Don't draw the commits now but calculate the positioning which is used by the branch lines etc.\n if (modifyGraph) {\n const typeClass = getCommitClassType(commit);\n const commitSymbolType = commit.customType ?? commit.type;\n const branchIndex = branchPos.get(commit.branch)?.index ?? 0;\n drawCommitBullet(gBullets, commit, commitPosition, typeClass, branchIndex, commitSymbolType);\n drawCommitLabel(gLabels, commit, commitPosition, pos);\n drawCommitTags(gLabels, commit, commitPosition, pos);\n }\n if (dir === 'TB' || dir === 'BT') {\n commitPos.set(commit.id, { x: commitPosition.x, y: commitPosition.posWithOffset });\n } else {\n commitPos.set(commit.id, { x: commitPosition.posWithOffset, y: commitPosition.y });\n }\n pos = dir === 'BT' && isParallelCommits ? pos + COMMIT_STEP : pos + COMMIT_STEP + LAYOUT_OFFSET;\n if (pos > maxPos) {\n maxPos = pos;\n }\n });\n};\n\nconst shouldRerouteArrow = (\n commitA: Commit,\n commitB: Commit,\n p1: CommitPosition,\n p2: CommitPosition,\n allCommits: Map\n) => {\n const commitBIsFurthest = dir === 'TB' || dir === 'BT' ? p1.x < p2.x : p1.y < p2.y;\n const branchToGetCurve = commitBIsFurthest ? commitB.branch : commitA.branch;\n const isOnBranchToGetCurve = (x: Commit) => x.branch === branchToGetCurve;\n const isBetweenCommits = (x: Commit) => x.seq > commitA.seq && x.seq < commitB.seq;\n return [...allCommits.values()].some((commitX) => {\n return isBetweenCommits(commitX) && isOnBranchToGetCurve(commitX);\n });\n};\n\nconst findLane = (y1: number, y2: number, depth = 0): number => {\n const candidate = y1 + Math.abs(y1 - y2) / 2;\n if (depth > 5) {\n return candidate;\n }\n\n const ok = lanes.every((lane) => Math.abs(lane - candidate) >= 10);\n if (ok) {\n lanes.push(candidate);\n return candidate;\n }\n const diff = Math.abs(y1 - y2);\n return findLane(y1, y2 - diff / 5, depth + 1);\n};\n\nconst drawArrow = (\n svg: d3.Selection,\n commitA: Commit,\n commitB: Commit,\n allCommits: Map\n) => {\n const p1 = commitPos.get(commitA.id); // arrowStart\n const p2 = commitPos.get(commitB.id); // arrowEnd\n if (p1 === undefined || p2 === undefined) {\n throw new Error(`Commit positions not found for commits ${commitA.id} and ${commitB.id}`);\n }\n const arrowNeedsRerouting = shouldRerouteArrow(commitA, commitB, p1, p2, allCommits);\n // log.debug('drawArrow', p1, p2, arrowNeedsRerouting, commitA.id, commitB.id);\n\n // Lower-right quadrant logic; top-left is 0,0\n\n let arc = '';\n let arc2 = '';\n let radius = 0;\n let offset = 0;\n\n let colorClassNum = branchPos.get(commitB.branch)?.index;\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n colorClassNum = branchPos.get(commitA.branch)?.index;\n }\n\n let lineDef;\n if (arrowNeedsRerouting) {\n arc = 'A 10 10, 0, 0, 0,';\n arc2 = 'A 10 10, 0, 0, 1,';\n radius = 10;\n offset = 10;\n\n const lineY = p1.y < p2.y ? findLane(p1.y, p2.y) : findLane(p2.y, p1.y);\n\n const lineX = p1.x < p2.x ? findLane(p1.x, p2.x) : findLane(p2.x, p1.x);\n\n if (dir === 'TB') {\n if (p1.x < p2.x) {\n // Source commit is on branch position left of destination commit\n // so render arrow rightward with colour of destination branch\n\n lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc2} ${lineX} ${\n p1.y + offset\n } L ${lineX} ${p2.y - radius} ${arc} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n // Source commit is on branch position right of destination commit\n // so render arrow leftward with colour of source branch\n\n colorClassNum = branchPos.get(commitA.branch)?.index;\n\n lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc} ${lineX} ${p1.y + offset} L ${lineX} ${p2.y - radius} ${arc2} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n } else if (dir === 'BT') {\n if (p1.x < p2.x) {\n // Source commit is on branch position left of destination commit\n // so render arrow rightward with colour of destination branch\n\n lineDef = `M ${p1.x} ${p1.y} L ${lineX - radius} ${p1.y} ${arc} ${lineX} ${p1.y - offset} L ${lineX} ${p2.y + radius} ${arc2} ${lineX + offset} ${p2.y} L ${p2.x} ${p2.y}`;\n } else {\n // Source commit is on branch position right of destination commit\n // so render arrow leftward with colour of source branch\n\n colorClassNum = branchPos.get(commitA.branch)?.index;\n\n lineDef = `M ${p1.x} ${p1.y} L ${lineX + radius} ${p1.y} ${arc2} ${lineX} ${p1.y - offset} L ${lineX} ${p2.y + radius} ${arc} ${lineX - offset} ${p2.y} L ${p2.x} ${p2.y}`;\n }\n } else {\n if (p1.y < p2.y) {\n // Source commit is on branch positioned above destination commit\n // so render arrow downward with colour of destination branch\n\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY - radius} ${arc} ${\n p1.x + offset\n } ${lineY} L ${p2.x - radius} ${lineY} ${arc2} ${p2.x} ${lineY + offset} L ${p2.x} ${p2.y}`;\n } else {\n // Source commit is on branch positioned below destination commit\n // so render arrow upward with colour of source branch\n\n colorClassNum = branchPos.get(commitA.branch)?.index;\n\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY + radius} ${arc2} ${\n p1.x + offset\n } ${lineY} L ${p2.x - radius} ${lineY} ${arc} ${p2.x} ${lineY - offset} L ${p2.x} ${p2.y}`;\n }\n }\n } else {\n arc = 'A 20 20, 0, 0, 0,';\n arc2 = 'A 20 20, 0, 0, 1,';\n radius = 20;\n offset = 20;\n\n if (dir === 'TB') {\n if (p1.x < p2.x) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${\n p2.y\n } L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${\n p1.y + offset\n } L ${p2.x} ${p2.y}`;\n }\n }\n\n if (p1.x > p2.x) {\n arc = 'A 20 20, 0, 0, 0,';\n arc2 = 'A 20 20, 0, 0, 1,';\n radius = 20;\n offset = 20;\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc2} ${p1.x - offset} ${\n p2.y\n } L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x + radius} ${p1.y} ${arc} ${p2.x} ${\n p1.y + offset\n } L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x === p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n } else if (dir === 'BT') {\n if (p1.x < p2.x) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc2} ${p1.x + offset} ${\n p2.y\n } L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${\n p1.y - offset\n } L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.x > p2.x) {\n arc = 'A 20 20, 0, 0, 0,';\n arc2 = 'A 20 20, 0, 0, 1,';\n radius = 20;\n offset = 20;\n\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc} ${p1.x - offset} ${\n p2.y\n } L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${\n p1.y - offset\n } L ${p2.x} ${p2.y}`;\n }\n }\n\n if (p1.x === p2.x) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n } else {\n if (p1.y < p2.y) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${\n p1.y + offset\n } L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc} ${p1.x + offset} ${\n p2.y\n } L ${p2.x} ${p2.y}`;\n }\n }\n if (p1.y > p2.y) {\n if (commitB.type === commitType.MERGE && commitA.id !== commitB.parents[0]) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc} ${p2.x} ${\n p1.y - offset\n } L ${p2.x} ${p2.y}`;\n } else {\n lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y + radius} ${arc2} ${p1.x + offset} ${\n p2.y\n } L ${p2.x} ${p2.y}`;\n }\n }\n\n if (p1.y === p2.y) {\n lineDef = `M ${p1.x} ${p1.y} L ${p2.x} ${p2.y}`;\n }\n }\n }\n if (lineDef === undefined) {\n throw new Error('Line definition not found');\n }\n svg\n .append('path')\n .attr('d', lineDef)\n .attr('class', 'arrow arrow' + (colorClassNum! % THEME_COLOR_LIMIT));\n};\n\nconst drawArrows = (\n svg: d3.Selection,\n commits: Map\n) => {\n const gArrows = svg.append('g').attr('class', 'commit-arrows');\n [...commits.keys()].forEach((key) => {\n const commit = commits.get(key);\n\n if (commit!.parents && commit!.parents.length > 0) {\n commit!.parents.forEach((parent) => {\n drawArrow(gArrows, commits.get(parent)!, commit!, commits);\n });\n }\n });\n};\n\nconst drawBranches = (\n svg: d3.Selection,\n branches: { name: string }[]\n) => {\n const g = svg.append('g');\n branches.forEach((branch, index) => {\n const adjustIndexForTheme = index % THEME_COLOR_LIMIT;\n\n const pos = branchPos.get(branch.name)?.pos;\n if (pos === undefined) {\n throw new Error(`Position not found for branch ${branch.name}`);\n }\n const line = g.append('line');\n line.attr('x1', 0);\n line.attr('y1', pos);\n line.attr('x2', maxPos);\n line.attr('y2', pos);\n line.attr('class', 'branch branch' + adjustIndexForTheme);\n\n if (dir === 'TB') {\n line.attr('y1', defaultPos);\n line.attr('x1', pos);\n line.attr('y2', maxPos);\n line.attr('x2', pos);\n } else if (dir === 'BT') {\n line.attr('y1', maxPos);\n line.attr('x1', pos);\n line.attr('y2', defaultPos);\n line.attr('x2', pos);\n }\n lanes.push(pos);\n\n const name = branch.name;\n\n // Create the actual text element\n const labelElement = drawText(name);\n // Create outer g, edgeLabel, this will be positioned after graph layout\n const bkg = g.insert('rect');\n const branchLabel = g.insert('g').attr('class', 'branchLabel');\n\n // Create inner g, label, this will be positioned now for centering the text\n const label = branchLabel.insert('g').attr('class', 'label branch-label' + adjustIndexForTheme);\n\n label.node()!.appendChild(labelElement);\n const bbox = labelElement.getBBox();\n bkg\n .attr('class', 'branchLabelBkg label' + adjustIndexForTheme)\n .attr('rx', 4)\n .attr('ry', 4)\n .attr('x', -bbox.width - 4 - (DEFAULT_GITGRAPH_CONFIG?.rotateCommitLabel === true ? 30 : 0))\n .attr('y', -bbox.height / 2 + 8)\n .attr('width', bbox.width + 18)\n .attr('height', bbox.height + 4);\n label.attr(\n 'transform',\n 'translate(' +\n (-bbox.width - 14 - (DEFAULT_GITGRAPH_CONFIG?.rotateCommitLabel === true ? 30 : 0)) +\n ', ' +\n (pos - bbox.height / 2 - 1) +\n ')'\n );\n if (dir === 'TB') {\n bkg.attr('x', pos - bbox.width / 2 - 10).attr('y', 0);\n label.attr('transform', 'translate(' + (pos - bbox.width / 2 - 5) + ', ' + 0 + ')');\n } else if (dir === 'BT') {\n bkg.attr('x', pos - bbox.width / 2 - 10).attr('y', maxPos);\n label.attr('transform', 'translate(' + (pos - bbox.width / 2 - 5) + ', ' + maxPos + ')');\n } else {\n bkg.attr('transform', 'translate(' + -19 + ', ' + (pos - bbox.height / 2) + ')');\n }\n });\n};\n\nconst setBranchPosition = function (\n name: string,\n pos: number,\n index: number,\n bbox: DOMRect,\n rotateCommitLabel: boolean\n): number {\n branchPos.set(name, { pos, index });\n pos += 50 + (rotateCommitLabel ? 40 : 0) + (dir === 'TB' || dir === 'BT' ? bbox.width / 2 : 0);\n return pos;\n};\n\nexport const draw: DrawDefinition = function (txt, id, ver, diagObj) {\n clear();\n\n log.debug('in gitgraph renderer', txt + '\\n', 'id:', id, ver);\n if (!DEFAULT_GITGRAPH_CONFIG) {\n throw new Error('GitGraph config not found');\n }\n const rotateCommitLabel = DEFAULT_GITGRAPH_CONFIG.rotateCommitLabel ?? false;\n const db = diagObj.db as GitGraphDBRenderProvider;\n allCommitsDict = db.getCommits();\n const branches = db.getBranchesAsObjArray();\n dir = db.getDirection();\n const diagram = select(`[id=\"${id}\"]`);\n let pos = 0;\n\n branches.forEach((branch, index) => {\n const labelElement = drawText(branch.name);\n const g = diagram.append('g');\n const branchLabel = g.insert('g').attr('class', 'branchLabel');\n const label = branchLabel.insert('g').attr('class', 'label branch-label');\n label.node()?.appendChild(labelElement);\n const bbox = labelElement.getBBox();\n\n pos = setBranchPosition(branch.name, pos, index, bbox, rotateCommitLabel);\n label.remove();\n branchLabel.remove();\n g.remove();\n });\n\n drawCommits(diagram, allCommitsDict, false);\n if (DEFAULT_GITGRAPH_CONFIG.showBranches) {\n drawBranches(diagram, branches);\n }\n drawArrows(diagram, allCommitsDict);\n drawCommits(diagram, allCommitsDict, true);\n\n utils.insertTitle(\n diagram,\n 'gitTitleText',\n DEFAULT_GITGRAPH_CONFIG.titleTopMargin ?? 0,\n db.getDiagramTitle()\n );\n\n // Setup the view box and size of the svg element\n setupGraphViewbox(\n undefined,\n diagram,\n DEFAULT_GITGRAPH_CONFIG.diagramPadding,\n DEFAULT_GITGRAPH_CONFIG.useMaxWidth\n );\n};\n\nexport default {\n draw,\n};\n\nif (import.meta.vitest) {\n const { it, expect, describe } = import.meta.vitest;\n\n describe('drawText', () => {\n it('should drawText', () => {\n const svgLabel = drawText('main');\n expect(svgLabel).toBeDefined();\n expect(svgLabel.children[0].innerHTML).toBe('main');\n });\n });\n\n describe('branchPosition', () => {\n const bbox: DOMRect = {\n x: 0,\n y: 0,\n width: 10,\n height: 10,\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n toJSON: () => '',\n };\n\n it('should setBranchPositions LR with two branches', () => {\n dir = 'LR';\n\n const pos = setBranchPosition('main', 0, 0, bbox, true);\n expect(pos).toBe(90);\n expect(branchPos.get('main')).toEqual({ pos: 0, index: 0 });\n const posNext = setBranchPosition('develop', pos, 1, bbox, true);\n expect(posNext).toBe(180);\n expect(branchPos.get('develop')).toEqual({ pos: pos, index: 1 });\n });\n\n it('should setBranchPositions TB with two branches', () => {\n dir = 'TB';\n bbox.width = 34.9921875;\n\n const pos = setBranchPosition('main', 0, 0, bbox, true);\n expect(pos).toBe(107.49609375);\n expect(branchPos.get('main')).toEqual({ pos: 0, index: 0 });\n\n bbox.width = 56.421875;\n const posNext = setBranchPosition('develop', pos, 1, bbox, true);\n expect(posNext).toBe(225.70703125);\n expect(branchPos.get('develop')).toEqual({ pos: pos, index: 1 });\n });\n });\n\n describe('commitPosition', () => {\n const commits = new Map([\n [\n 'commitZero',\n {\n id: 'ZERO',\n message: '',\n seq: 0,\n type: commitType.NORMAL,\n tags: [],\n parents: [],\n branch: 'main',\n },\n ],\n [\n 'commitA',\n {\n id: 'A',\n message: '',\n seq: 1,\n type: commitType.NORMAL,\n tags: [],\n parents: ['ZERO'],\n branch: 'feature',\n },\n ],\n [\n 'commitB',\n {\n id: 'B',\n message: '',\n seq: 2,\n type: commitType.NORMAL,\n tags: [],\n parents: ['A'],\n branch: 'feature',\n },\n ],\n [\n 'commitM',\n {\n id: 'M',\n message: 'merged branch feature into main',\n seq: 3,\n type: commitType.MERGE,\n tags: [],\n parents: ['ZERO', 'B'],\n branch: 'main',\n customId: true,\n },\n ],\n [\n 'commitC',\n {\n id: 'C',\n message: '',\n seq: 4,\n type: commitType.NORMAL,\n tags: [],\n parents: ['ZERO'],\n branch: 'release',\n },\n ],\n [\n 'commit5_8928ea0',\n {\n id: '5-8928ea0',\n message: 'cherry-picked [object Object] into release',\n seq: 5,\n type: commitType.CHERRY_PICK,\n tags: [],\n parents: ['C', 'M'],\n branch: 'release',\n },\n ],\n [\n 'commitD',\n {\n id: 'D',\n message: '',\n seq: 6,\n type: commitType.NORMAL,\n tags: [],\n parents: ['5-8928ea0'],\n branch: 'release',\n },\n ],\n [\n 'commit7_ed848ba',\n {\n id: '7-ed848ba',\n message: 'cherry-picked [object Object] into release',\n seq: 7,\n type: commitType.CHERRY_PICK,\n tags: [],\n parents: ['D', 'M'],\n branch: 'release',\n },\n ],\n ]);\n let pos = 0;\n branchPos.set('main', { pos: 0, index: 0 });\n branchPos.set('feature', { pos: 107.49609375, index: 1 });\n branchPos.set('release', { pos: 224.03515625, index: 2 });\n\n describe('TB', () => {\n pos = 30;\n dir = 'TB';\n const expectedCommitPositionTB = new Map([\n ['commitZero', { x: 0, y: 40, posWithOffset: 40 }],\n ['commitA', { x: 107.49609375, y: 90, posWithOffset: 90 }],\n ['commitB', { x: 107.49609375, y: 140, posWithOffset: 140 }],\n ['commitM', { x: 0, y: 190, posWithOffset: 190 }],\n ['commitC', { x: 224.03515625, y: 240, posWithOffset: 240 }],\n ['commit5_8928ea0', { x: 224.03515625, y: 290, posWithOffset: 290 }],\n ['commitD', { x: 224.03515625, y: 340, posWithOffset: 340 }],\n ['commit7_ed848ba', { x: 224.03515625, y: 390, posWithOffset: 390 }],\n ]);\n commits.forEach((commit, key) => {\n it(`should give the correct position for commit ${key}`, () => {\n const position = getCommitPosition(commit, pos, false);\n expect(position).toEqual(expectedCommitPositionTB.get(key));\n pos += 50;\n });\n });\n });\n describe('LR', () => {\n let pos = 30;\n dir = 'LR';\n const expectedCommitPositionLR = new Map([\n ['commitZero', { x: 0, y: 40, posWithOffset: 40 }],\n ['commitA', { x: 107.49609375, y: 90, posWithOffset: 90 }],\n ['commitB', { x: 107.49609375, y: 140, posWithOffset: 140 }],\n ['commitM', { x: 0, y: 190, posWithOffset: 190 }],\n ['commitC', { x: 224.03515625, y: 240, posWithOffset: 240 }],\n ['commit5_8928ea0', { x: 224.03515625, y: 290, posWithOffset: 290 }],\n ['commitD', { x: 224.03515625, y: 340, posWithOffset: 340 }],\n ['commit7_ed848ba', { x: 224.03515625, y: 390, posWithOffset: 390 }],\n ]);\n commits.forEach((commit, key) => {\n it(`should give the correct position for commit ${key}`, () => {\n const position = getCommitPosition(commit, pos, false);\n expect(position).toEqual(expectedCommitPositionLR.get(key));\n pos += 50;\n });\n });\n });\n describe('getCommitClassType', () => {\n const expectedCommitClassType = new Map([\n ['commitZero', 'commit-normal'],\n ['commitA', 'commit-normal'],\n ['commitB', 'commit-normal'],\n ['commitM', 'commit-merge'],\n ['commitC', 'commit-normal'],\n ['commit5_8928ea0', 'commit-cherry-pick'],\n ['commitD', 'commit-normal'],\n ['commit7_ed848ba', 'commit-cherry-pick'],\n ]);\n commits.forEach((commit, key) => {\n it(`should give the correct class type for commit ${key}`, () => {\n const classType = getCommitClassType(commit);\n expect(classType).toBe(expectedCommitClassType.get(key));\n });\n });\n });\n });\n describe('building BT parallel commit diagram', () => {\n const commits = new Map([\n [\n '1-abcdefg',\n {\n id: '1-abcdefg',\n message: '',\n seq: 0,\n type: 0,\n tags: [],\n parents: [],\n branch: 'main',\n },\n ],\n [\n '2-abcdefg',\n {\n id: '2-abcdefg',\n message: '',\n seq: 1,\n type: 0,\n tags: [],\n parents: ['1-abcdefg'],\n branch: 'main',\n },\n ],\n [\n '3-abcdefg',\n {\n id: '3-abcdefg',\n message: '',\n seq: 2,\n type: 0,\n tags: [],\n parents: ['2-abcdefg'],\n branch: 'develop',\n },\n ],\n [\n '4-abcdefg',\n {\n id: '4-abcdefg',\n message: '',\n seq: 3,\n type: 0,\n tags: [],\n parents: ['3-abcdefg'],\n branch: 'develop',\n },\n ],\n [\n '5-abcdefg',\n {\n id: '5-abcdefg',\n message: '',\n seq: 4,\n type: 0,\n tags: [],\n parents: ['2-abcdefg'],\n branch: 'feature',\n },\n ],\n [\n '6-abcdefg',\n {\n id: '6-abcdefg',\n message: '',\n seq: 5,\n type: 0,\n tags: [],\n parents: ['5-abcdefg'],\n branch: 'feature',\n },\n ],\n [\n '7-abcdefg',\n {\n id: '7-abcdefg',\n message: '',\n seq: 6,\n type: 0,\n tags: [],\n parents: ['2-abcdefg'],\n branch: 'main',\n },\n ],\n [\n '8-abcdefg',\n {\n id: '8-abcdefg',\n message: '',\n seq: 7,\n type: 0,\n tags: [],\n parents: ['7-abcdefg'],\n branch: 'main',\n },\n ],\n ]);\n const expectedCommitPosition = new Map([\n ['1-abcdefg', { x: 0, y: 40 }],\n ['2-abcdefg', { x: 0, y: 90 }],\n ['3-abcdefg', { x: 107.49609375, y: 140 }],\n ['4-abcdefg', { x: 107.49609375, y: 190 }],\n ['5-abcdefg', { x: 225.70703125, y: 140 }],\n ['6-abcdefg', { x: 225.70703125, y: 190 }],\n ['7-abcdefg', { x: 0, y: 140 }],\n ['8-abcdefg', { x: 0, y: 190 }],\n ]);\n\n const expectedCommitPositionAfterParallel = new Map([\n ['1-abcdefg', { x: 0, y: 210 }],\n ['2-abcdefg', { x: 0, y: 160 }],\n ['3-abcdefg', { x: 107.49609375, y: 110 }],\n ['4-abcdefg', { x: 107.49609375, y: 60 }],\n ['5-abcdefg', { x: 225.70703125, y: 110 }],\n ['6-abcdefg', { x: 225.70703125, y: 60 }],\n ['7-abcdefg', { x: 0, y: 110 }],\n ['8-abcdefg', { x: 0, y: 60 }],\n ]);\n\n const expectedCommitCurrentPosition = new Map([\n ['1-abcdefg', 30],\n ['2-abcdefg', 80],\n ['3-abcdefg', 130],\n ['4-abcdefg', 180],\n ['5-abcdefg', 130],\n ['6-abcdefg', 180],\n ['7-abcdefg', 130],\n ['8-abcdefg', 180],\n ]);\n const sortedKeys = [...expectedCommitPosition.keys()];\n it('should get the correct commit position and current position', () => {\n dir = 'BT';\n let curPos = 30;\n commitPos.clear();\n branchPos.clear();\n branchPos.set('main', { pos: 0, index: 0 });\n branchPos.set('develop', { pos: 107.49609375, index: 1 });\n branchPos.set('feature', { pos: 225.70703125, index: 2 });\n DEFAULT_GITGRAPH_CONFIG!.parallelCommits = true;\n commits.forEach((commit, key) => {\n if (commit.parents.length > 0) {\n curPos = calculateCommitPosition(commit);\n }\n const position = setCommitPosition(commit, curPos);\n expect(position).toEqual(expectedCommitPosition.get(key));\n expect(curPos).toEqual(expectedCommitCurrentPosition.get(key));\n });\n });\n\n it('should get the correct commit position after parallel commits', () => {\n commitPos.clear();\n branchPos.clear();\n dir = 'BT';\n const curPos = 30;\n commitPos.clear();\n branchPos.clear();\n branchPos.set('main', { pos: 0, index: 0 });\n branchPos.set('develop', { pos: 107.49609375, index: 1 });\n branchPos.set('feature', { pos: 225.70703125, index: 2 });\n setParallelBTPos(sortedKeys, commits, curPos);\n sortedKeys.forEach((commit) => {\n const position = commitPos.get(commit);\n expect(position).toEqual(expectedCommitPositionAfterParallel.get(commit));\n });\n });\n });\n DEFAULT_GITGRAPH_CONFIG!.parallelCommits = false;\n it('add', () => {\n commitPos.set('parent1', { x: 1, y: 1 });\n commitPos.set('parent2', { x: 2, y: 2 });\n commitPos.set('parent3', { x: 3, y: 3 });\n dir = 'LR';\n const parents = ['parent1', 'parent2', 'parent3'];\n const closestParent = findClosestParent(parents);\n\n expect(closestParent).toBe('parent3');\n commitPos.clear();\n });\n}\n", "const getStyles = (options) =>\n `\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n ${[0, 1, 2, 3, 4, 5, 6, 7]\n .map(\n (i) =>\n `\n .branch-label${i} { fill: ${options['gitBranchLabel' + i]}; }\n .commit${i} { stroke: ${options['git' + i]}; fill: ${options['git' + i]}; }\n .commit-highlight${i} { stroke: ${options['gitInv' + i]}; fill: ${options['gitInv' + i]}; }\n .label${i} { fill: ${options['git' + i]}; }\n .arrow${i} { stroke: ${options['git' + i]}; }\n `\n )\n .join('\\n')}\n\n .branch {\n stroke-width: 1;\n stroke: ${options.lineColor};\n stroke-dasharray: 2;\n }\n .commit-label { font-size: ${options.commitLabelFontSize}; fill: ${options.commitLabelColor};}\n .commit-label-bkg { font-size: ${options.commitLabelFontSize}; fill: ${\n options.commitLabelBackground\n }; opacity: 0.5; }\n .tag-label { font-size: ${options.tagLabelFontSize}; fill: ${options.tagLabelColor};}\n .tag-label-bkg { fill: ${options.tagLabelBackground}; stroke: ${options.tagLabelBorder}; }\n .tag-hole { fill: ${options.textColor}; }\n\n .commit-merge {\n stroke: ${options.primaryColor};\n fill: ${options.primaryColor};\n }\n .commit-reverse {\n stroke: ${options.primaryColor};\n fill: ${options.primaryColor};\n stroke-width: 3;\n }\n .commit-highlight-outer {\n }\n .commit-highlight-inner {\n stroke: ${options.primaryColor};\n fill: ${options.primaryColor};\n }\n\n .arrow { stroke-width: 8; stroke-linecap: round; fill: none}\n .gitTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n }\n`;\n\nexport default getStyles;\n", "// @ts-ignore: JISON doesn't support types\nimport { parser } from './gitGraphParser.js';\nimport { db } from './gitGraphAst.js';\nimport gitGraphRenderer from './gitGraphRenderer.js';\nimport gitGraphStyles from './styles.js';\nimport type { DiagramDefinition } from '../../diagram-api/types.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n db,\n renderer: gitGraphRenderer,\n styles: gitGraphStyles,\n};\n", "/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],$V1=[1,26],$V2=[1,27],$V3=[1,28],$V4=[1,29],$V5=[1,30],$V6=[1,31],$V7=[1,32],$V8=[1,33],$V9=[1,34],$Va=[1,9],$Vb=[1,10],$Vc=[1,11],$Vd=[1,12],$Ve=[1,13],$Vf=[1,14],$Vg=[1,15],$Vh=[1,16],$Vi=[1,19],$Vj=[1,20],$Vk=[1,21],$Vl=[1,22],$Vm=[1,23],$Vn=[1,25],$Vo=[1,35];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"gantt\":4,\"document\":5,\"EOF\":6,\"line\":7,\"SPACE\":8,\"statement\":9,\"NL\":10,\"weekday\":11,\"weekday_monday\":12,\"weekday_tuesday\":13,\"weekday_wednesday\":14,\"weekday_thursday\":15,\"weekday_friday\":16,\"weekday_saturday\":17,\"weekday_sunday\":18,\"weekend\":19,\"weekend_friday\":20,\"weekend_saturday\":21,\"dateFormat\":22,\"inclusiveEndDates\":23,\"topAxis\":24,\"axisFormat\":25,\"tickInterval\":26,\"excludes\":27,\"includes\":28,\"todayMarker\":29,\"title\":30,\"acc_title\":31,\"acc_title_value\":32,\"acc_descr\":33,\"acc_descr_value\":34,\"acc_descr_multiline_value\":35,\"section\":36,\"clickStatement\":37,\"taskTxt\":38,\"taskData\":39,\"click\":40,\"callbackname\":41,\"callbackargs\":42,\"href\":43,\"clickStatementDebug\":44,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"gantt\",6:\"EOF\",8:\"SPACE\",10:\"NL\",12:\"weekday_monday\",13:\"weekday_tuesday\",14:\"weekday_wednesday\",15:\"weekday_thursday\",16:\"weekday_friday\",17:\"weekday_saturday\",18:\"weekday_sunday\",20:\"weekend_friday\",21:\"weekend_saturday\",22:\"dateFormat\",23:\"inclusiveEndDates\",24:\"topAxis\",25:\"axisFormat\",26:\"tickInterval\",27:\"excludes\",28:\"includes\",29:\"todayMarker\",30:\"title\",31:\"acc_title\",32:\"acc_title_value\",33:\"acc_descr\",34:\"acc_descr_value\",35:\"acc_descr_multiline_value\",36:\"section\",38:\"taskTxt\",39:\"taskData\",40:\"click\",41:\"callbackname\",42:\"callbackargs\",43:\"href\"},\nproductions_: [0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[19,1],[19,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n return $$[$0-1]; \nbreak;\ncase 2:\n this.$ = [] \nbreak;\ncase 3:\n$$[$0-1].push($$[$0]);this.$ = $$[$0-1]\nbreak;\ncase 4: case 5:\n this.$ = $$[$0] \nbreak;\ncase 6: case 7:\n this.$=[];\nbreak;\ncase 8:\n yy.setWeekday(\"monday\");\nbreak;\ncase 9:\n yy.setWeekday(\"tuesday\");\nbreak;\ncase 10:\n yy.setWeekday(\"wednesday\");\nbreak;\ncase 11:\n yy.setWeekday(\"thursday\");\nbreak;\ncase 12:\n yy.setWeekday(\"friday\");\nbreak;\ncase 13:\n yy.setWeekday(\"saturday\");\nbreak;\ncase 14:\n yy.setWeekday(\"sunday\");\nbreak;\ncase 15:\n yy.setWeekend(\"friday\");\nbreak;\ncase 16:\n yy.setWeekend(\"saturday\");\nbreak;\ncase 17:\nyy.setDateFormat($$[$0].substr(11));this.$=$$[$0].substr(11);\nbreak;\ncase 18:\nyy.enableInclusiveEndDates();this.$=$$[$0].substr(18);\nbreak;\ncase 19:\nyy.TopAxis();this.$=$$[$0].substr(8);\nbreak;\ncase 20:\nyy.setAxisFormat($$[$0].substr(11));this.$=$$[$0].substr(11);\nbreak;\ncase 21:\nyy.setTickInterval($$[$0].substr(13));this.$=$$[$0].substr(13);\nbreak;\ncase 22:\nyy.setExcludes($$[$0].substr(9));this.$=$$[$0].substr(9);\nbreak;\ncase 23:\nyy.setIncludes($$[$0].substr(9));this.$=$$[$0].substr(9);\nbreak;\ncase 24:\nyy.setTodayMarker($$[$0].substr(12));this.$=$$[$0].substr(12);\nbreak;\ncase 27:\nyy.setDiagramTitle($$[$0].substr(6));this.$=$$[$0].substr(6);\nbreak;\ncase 28:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 29: case 30:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 31:\n yy.addSection($$[$0].substr(8));this.$=$$[$0].substr(8); \nbreak;\ncase 33:\nyy.addTask($$[$0-1],$$[$0]);this.$='task';\nbreak;\ncase 34:\nthis.$ = $$[$0-1];yy.setClickEvent($$[$0-1], $$[$0], null);\nbreak;\ncase 35:\nthis.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0-1], $$[$0]);\nbreak;\ncase 36:\nthis.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0-1], null);yy.setLink($$[$0-2],$$[$0]);\nbreak;\ncase 37:\nthis.$ = $$[$0-3];yy.setClickEvent($$[$0-3], $$[$0-2], $$[$0-1]);yy.setLink($$[$0-3],$$[$0]);\nbreak;\ncase 38:\nthis.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0], null);yy.setLink($$[$0-2],$$[$0-1]);\nbreak;\ncase 39:\nthis.$ = $$[$0-3];yy.setClickEvent($$[$0-3], $$[$0-1], $$[$0]);yy.setLink($$[$0-3],$$[$0-2]);\nbreak;\ncase 40:\nthis.$ = $$[$0-1];yy.setLink($$[$0-1], $$[$0]);\nbreak;\ncase 41: case 47:\nthis.$=$$[$0-1] + ' ' + $$[$0];\nbreak;\ncase 42: case 43: case 45:\nthis.$=$$[$0-2] + ' ' + $$[$0-1] + ' ' + $$[$0];\nbreak;\ncase 44: case 46:\nthis.$=$$[$0-3] + ' ' + $$[$0-2] + ' ' + $$[$0-1] + ' ' + $$[$0];\nbreak;\n}\n},\ntable: [{3:1,4:[1,2]},{1:[3]},o($V0,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:$V1,13:$V2,14:$V3,15:$V4,16:$V5,17:$V6,18:$V7,19:18,20:$V8,21:$V9,22:$Va,23:$Vb,24:$Vc,25:$Vd,26:$Ve,27:$Vf,28:$Vg,29:$Vh,30:$Vi,31:$Vj,33:$Vk,35:$Vl,36:$Vm,37:24,38:$Vn,40:$Vo},o($V0,[2,7],{1:[2,1]}),o($V0,[2,3]),{9:36,11:17,12:$V1,13:$V2,14:$V3,15:$V4,16:$V5,17:$V6,18:$V7,19:18,20:$V8,21:$V9,22:$Va,23:$Vb,24:$Vc,25:$Vd,26:$Ve,27:$Vf,28:$Vg,29:$Vh,30:$Vi,31:$Vj,33:$Vk,35:$Vl,36:$Vm,37:24,38:$Vn,40:$Vo},o($V0,[2,5]),o($V0,[2,6]),o($V0,[2,17]),o($V0,[2,18]),o($V0,[2,19]),o($V0,[2,20]),o($V0,[2,21]),o($V0,[2,22]),o($V0,[2,23]),o($V0,[2,24]),o($V0,[2,25]),o($V0,[2,26]),o($V0,[2,27]),{32:[1,37]},{34:[1,38]},o($V0,[2,30]),o($V0,[2,31]),o($V0,[2,32]),{39:[1,39]},o($V0,[2,8]),o($V0,[2,9]),o($V0,[2,10]),o($V0,[2,11]),o($V0,[2,12]),o($V0,[2,13]),o($V0,[2,14]),o($V0,[2,15]),o($V0,[2,16]),{41:[1,40],43:[1,41]},o($V0,[2,4]),o($V0,[2,28]),o($V0,[2,29]),o($V0,[2,33]),o($V0,[2,34],{42:[1,42],43:[1,43]}),o($V0,[2,40],{41:[1,44]}),o($V0,[2,35],{43:[1,45]}),o($V0,[2,36]),o($V0,[2,38],{42:[1,46]}),o($V0,[2,37]),o($V0,[2,39])],\ndefaultActions: {},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// 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.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n 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(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0: this.begin('open_directive'); return 'open_directive'; \nbreak;\ncase 1: this.begin(\"acc_title\");return 31; \nbreak;\ncase 2: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 3: this.begin(\"acc_descr\");return 33; \nbreak;\ncase 4: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 5: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 6: this.popState(); \nbreak;\ncase 7:return \"acc_descr_multiline_value\";\nbreak;\ncase 8:/* skip comments */\nbreak;\ncase 9:/* skip comments */\nbreak;\ncase 10:/* do nothing */\nbreak;\ncase 11:return 10;\nbreak;\ncase 12:/* skip whitespace */\nbreak;\ncase 13:/* skip comments */\nbreak;\ncase 14:this.begin(\"href\");\nbreak;\ncase 15:this.popState();\nbreak;\ncase 16:return 43;\nbreak;\ncase 17:this.begin(\"callbackname\");\nbreak;\ncase 18:this.popState();\nbreak;\ncase 19:this.popState(); this.begin(\"callbackargs\");\nbreak;\ncase 20:return 41;\nbreak;\ncase 21:this.popState();\nbreak;\ncase 22:return 42;\nbreak;\ncase 23:this.begin(\"click\");\nbreak;\ncase 24:this.popState();\nbreak;\ncase 25:return 40;\nbreak;\ncase 26:return 4;\nbreak;\ncase 27:return 22;\nbreak;\ncase 28:return 23;\nbreak;\ncase 29:return 24;\nbreak;\ncase 30:return 25;\nbreak;\ncase 31:return 26;\nbreak;\ncase 32:return 28;\nbreak;\ncase 33:return 27;\nbreak;\ncase 34:return 29;\nbreak;\ncase 35:return 12\nbreak;\ncase 36:return 13\nbreak;\ncase 37:return 14\nbreak;\ncase 38:return 15\nbreak;\ncase 39:return 16\nbreak;\ncase 40:return 17\nbreak;\ncase 41:return 18\nbreak;\ncase 42:return 20\nbreak;\ncase 43:return 21\nbreak;\ncase 44:return 'date';\nbreak;\ncase 45:return 30;\nbreak;\ncase 46:return 'accDescription'\nbreak;\ncase 47:return 36;\nbreak;\ncase 48:return 38;\nbreak;\ncase 49:return 39;\nbreak;\ncase 50:return ':';\nbreak;\ncase 51:return 6;\nbreak;\ncase 52:return 'INVALID';\nbreak;\n}\n},\nrules: [/^(?:%%\\{)/i,/^(?:accTitle\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*\\{\\s*)/i,/^(?:[\\}])/i,/^(?:[^\\}]*)/i,/^(?:%%(?!\\{)*[^\\n]*)/i,/^(?:[^\\}]%%*[^\\n]*)/i,/^(?:%%*[^\\n]*[\\n]*)/i,/^(?:[\\n]+)/i,/^(?:\\s+)/i,/^(?:%[^\\n]*)/i,/^(?:href[\\s]+[\"])/i,/^(?:[\"])/i,/^(?:[^\"]*)/i,/^(?:call[\\s]+)/i,/^(?:\\([\\s]*\\))/i,/^(?:\\()/i,/^(?:[^(]*)/i,/^(?:\\))/i,/^(?:[^)]*)/i,/^(?:click[\\s]+)/i,/^(?:[\\s\\n])/i,/^(?:[^\\s\\n]*)/i,/^(?:gantt\\b)/i,/^(?:dateFormat\\s[^#\\n;]+)/i,/^(?:inclusiveEndDates\\b)/i,/^(?:topAxis\\b)/i,/^(?:axisFormat\\s[^#\\n;]+)/i,/^(?:tickInterval\\s[^#\\n;]+)/i,/^(?:includes\\s[^#\\n;]+)/i,/^(?:excludes\\s[^#\\n;]+)/i,/^(?:todayMarker\\s[^\\n;]+)/i,/^(?:weekday\\s+monday\\b)/i,/^(?:weekday\\s+tuesday\\b)/i,/^(?:weekday\\s+wednesday\\b)/i,/^(?:weekday\\s+thursday\\b)/i,/^(?:weekday\\s+friday\\b)/i,/^(?:weekday\\s+saturday\\b)/i,/^(?:weekday\\s+sunday\\b)/i,/^(?:weekend\\s+friday\\b)/i,/^(?:weekend\\s+saturday\\b)/i,/^(?:\\d\\d\\d\\d-\\d\\d-\\d\\d\\b)/i,/^(?:title\\s[^\\n]+)/i,/^(?:accDescription\\s[^#\\n;]+)/i,/^(?:section\\s[^\\n]+)/i,/^(?:[^:\\n]+)/i,/^(?::[^#\\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],\nconditions: {\"acc_descr_multiline\":{\"rules\":[6,7],\"inclusive\":false},\"acc_descr\":{\"rules\":[4],\"inclusive\":false},\"acc_title\":{\"rules\":[2],\"inclusive\":false},\"callbackargs\":{\"rules\":[21,22],\"inclusive\":false},\"callbackname\":{\"rules\":[18,19,20],\"inclusive\":false},\"href\":{\"rules\":[15,16],\"inclusive\":false},\"click\":{\"rules\":[24,25],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,3,5,8,9,10,11,12,13,14,17,23,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})(); \n\tparser.parser = parser;\n\texport { parser };\n\texport default parser;\n\t", "!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isoWeek=t()}(this,(function(){\"use strict\";var e=\"day\";return function(t,i,s){var a=function(t){return t.add(4-t.isoWeekday(),e)},d=i.prototype;d.isoWeekYear=function(){return a(this).year()},d.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var i,d,n,o,r=a(this),u=(i=this.isoWeekYear(),d=this.$u,n=(d?s.utc:s)().year(i).startOf(\"year\"),o=4-n.isoWeekday(),n.isoWeekday()>4&&(o+=7),n.add(o,e));return r.diff(u,\"week\")+1},d.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var n=d.startOf;d.startOf=function(e,t){var i=this.$utils(),s=!!i.u(t)||t;return\"isoweek\"===i.p(e)?s?this.date(this.date()-(this.isoWeekday()-1)).startOf(\"day\"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf(\"day\"):n.bind(this)(e,t)}}}));", "!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d/,r=/\\d\\d/,i=/\\d\\d?/,o=/\\d*[^-_:/,()\\s\\d]+/,s={},a=function(e){return(e=+e)+(e>68?1900:2e3)};var f=function(e){return function(t){this[e]=+t}},h=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],u=function(e){var t=s[e];return t&&(t.indexOf?t:t.s.concat(t.f))},d=function(e,t){var n,r=s.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},c={A:[o,function(e){this.afternoon=d(e,!1)}],a:[o,function(e){this.afternoon=d(e,!0)}],Q:[n,function(e){this.month=3*(e-1)+1}],S:[n,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[i,f(\"seconds\")],ss:[i,f(\"seconds\")],m:[i,f(\"minutes\")],mm:[i,f(\"minutes\")],H:[i,f(\"hours\")],h:[i,f(\"hours\")],HH:[i,f(\"hours\")],hh:[i,f(\"hours\")],D:[i,f(\"day\")],DD:[r,f(\"day\")],Do:[o,function(e){var t=s.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],w:[i,f(\"week\")],ww:[r,f(\"week\")],M:[i,f(\"month\")],MM:[r,f(\"month\")],MMM:[o,function(e){var t=u(\"months\"),n=(u(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[o,function(e){var t=u(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,f(\"year\")],YY:[r,function(e){this.year=a(e)}],YYYY:[/\\d{4}/,f(\"year\")],Z:h,ZZ:h};function l(n){var r,i;r=n,i=s&&s.formats;for(var o=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=o.length,f=0;f-1)return new Date((\"X\"===t?1e3:1)*e);var i=l(t)(e),o=i.year,s=i.month,a=i.day,f=i.hours,h=i.minutes,u=i.seconds,d=i.milliseconds,c=i.zone,m=i.week,M=new Date,Y=a||(o||s?1:M.getDate()),p=o||M.getFullYear(),v=0;o&&!s||(v=s>0?s-1:M.getMonth());var D,w=f||0,g=h||0,y=u||0,L=d||0;return c?new Date(Date.UTC(p,v,Y,w,g,y,L+60*c.offset*1e3)):n?new Date(Date.UTC(p,v,Y,w,g,y,L)):(D=new Date(p,v,Y,w,g,y,L),m&&(D=r(D).week(m).toDate()),D)}catch(e){return new Date(\"\")}}(t,a,r,n),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),s={}}else if(a instanceof Array)for(var c=a.length,m=1;m<=c;m+=1){o[1]=a[m-1];var M=n.apply(this,o);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===c&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));", "!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_advancedFormat=t()}(this,(function(){\"use strict\";return function(e,t){var r=t.prototype,n=r.format;r.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return n.bind(this)(e);var s=this.$utils(),a=(e||\"YYYY-MM-DDTHH:mm:ssZ\").replace(/\\[([^\\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(e){switch(e){case\"Q\":return Math.ceil((t.$M+1)/3);case\"Do\":return r.ordinal(t.$D);case\"gggg\":return t.weekYear();case\"GGGG\":return t.isoWeekYear();case\"wo\":return r.ordinal(t.week(),\"W\");case\"w\":case\"ww\":return s.s(t.week(),\"w\"===e?1:2,\"0\");case\"W\":case\"WW\":return s.s(t.isoWeek(),\"W\"===e?1:2,\"0\");case\"k\":case\"kk\":return s.s(String(0===t.$H?24:t.$H),\"k\"===e?1:2,\"0\");case\"X\":return Math.floor(t.$d.getTime()/1e3);case\"x\":return t.$d.getTime();case\"z\":return\"[\"+t.offsetName()+\"]\";case\"zzz\":return\"[\"+t.offsetName(\"long\")+\"]\";default:return e}}));return n.bind(this)(a)}}}));", "import { sanitizeUrl } from '@braintree/sanitize-url';\nimport dayjs from 'dayjs';\nimport dayjsIsoWeek from 'dayjs/plugin/isoWeek.js';\nimport dayjsCustomParseFormat from 'dayjs/plugin/customParseFormat.js';\nimport dayjsAdvancedFormat from 'dayjs/plugin/advancedFormat.js';\nimport { log } from '../../logger.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport utils from '../../utils.js';\n\nimport {\n setAccTitle,\n getAccTitle,\n getAccDescription,\n setAccDescription,\n clear as commonClear,\n setDiagramTitle,\n getDiagramTitle,\n} from '../common/commonDb.js';\n\ndayjs.extend(dayjsIsoWeek);\ndayjs.extend(dayjsCustomParseFormat);\ndayjs.extend(dayjsAdvancedFormat);\n\nconst WEEKEND_START_DAY = { friday: 5, saturday: 6 };\nlet dateFormat = '';\nlet axisFormat = '';\nlet tickInterval = undefined;\nlet todayMarker = '';\nlet includes = [];\nlet excludes = [];\nlet links = new Map();\nlet sections = [];\nlet tasks = [];\nlet currentSection = '';\nlet displayMode = '';\nconst tags = ['active', 'done', 'crit', 'milestone', 'vert'];\nlet funs = [];\nlet inclusiveEndDates = false;\nlet topAxis = false;\nlet weekday = 'sunday';\nlet weekend = 'saturday';\n\n// The serial order of the task in the script\nlet lastOrder = 0;\n\nexport const clear = function () {\n sections = [];\n tasks = [];\n currentSection = '';\n funs = [];\n taskCnt = 0;\n lastTask = undefined;\n lastTaskID = undefined;\n rawTasks = [];\n dateFormat = '';\n axisFormat = '';\n displayMode = '';\n tickInterval = undefined;\n todayMarker = '';\n includes = [];\n excludes = [];\n inclusiveEndDates = false;\n topAxis = false;\n lastOrder = 0;\n links = new Map();\n commonClear();\n weekday = 'sunday';\n weekend = 'saturday';\n};\n\nexport const setAxisFormat = function (txt) {\n axisFormat = txt;\n};\n\nexport const getAxisFormat = function () {\n return axisFormat;\n};\n\nexport const setTickInterval = function (txt) {\n tickInterval = txt;\n};\n\nexport const getTickInterval = function () {\n return tickInterval;\n};\n\nexport const setTodayMarker = function (txt) {\n todayMarker = txt;\n};\n\nexport const getTodayMarker = function () {\n return todayMarker;\n};\n\nexport const setDateFormat = function (txt) {\n dateFormat = txt;\n};\n\nexport const enableInclusiveEndDates = function () {\n inclusiveEndDates = true;\n};\n\nexport const endDatesAreInclusive = function () {\n return inclusiveEndDates;\n};\n\nexport const enableTopAxis = function () {\n topAxis = true;\n};\n\nexport const topAxisEnabled = function () {\n return topAxis;\n};\n\nexport const setDisplayMode = function (txt) {\n displayMode = txt;\n};\n\nexport const getDisplayMode = function () {\n return displayMode;\n};\n\nexport const getDateFormat = function () {\n return dateFormat;\n};\n\nexport const setIncludes = function (txt) {\n includes = txt.toLowerCase().split(/[\\s,]+/);\n};\n\nexport const getIncludes = function () {\n return includes;\n};\nexport const setExcludes = function (txt) {\n excludes = txt.toLowerCase().split(/[\\s,]+/);\n};\n\nexport const getExcludes = function () {\n return excludes;\n};\n\nexport const getLinks = function () {\n return links;\n};\n\nexport const addSection = function (txt) {\n currentSection = txt;\n sections.push(txt);\n};\n\nexport const getSections = function () {\n return sections;\n};\n\nexport const getTasks = function () {\n let allItemsProcessed = compileTasks();\n const maxDepth = 10;\n let iterationCount = 0;\n while (!allItemsProcessed && iterationCount < maxDepth) {\n allItemsProcessed = compileTasks();\n iterationCount++;\n }\n\n tasks = rawTasks;\n\n return tasks;\n};\n\nexport const isInvalidDate = function (date, dateFormat, excludes, includes) {\n const formattedDate = date.format(dateFormat.trim());\n const dateOnly = date.format('YYYY-MM-DD');\n\n if (includes.includes(formattedDate) || includes.includes(dateOnly)) {\n return false;\n }\n if (\n excludes.includes('weekends') &&\n (date.isoWeekday() === WEEKEND_START_DAY[weekend] ||\n date.isoWeekday() === WEEKEND_START_DAY[weekend] + 1)\n ) {\n return true;\n }\n if (excludes.includes(date.format('dddd').toLowerCase())) {\n return true;\n }\n return excludes.includes(formattedDate) || excludes.includes(dateOnly);\n};\n\nexport const setWeekday = function (txt) {\n weekday = txt;\n};\n\nexport const getWeekday = function () {\n return weekday;\n};\n\nexport const setWeekend = function (startDay) {\n weekend = startDay;\n};\n\n/**\n * TODO: fully document what this function does and what types it accepts\n *\n * @param {object} task - The task to check.\n * @param {string | Date} task.startTime - Might be a `Date` or a `string`.\n * TODO: is this always a Date?\n * @param {string | Date} task.endTime - Might be a `Date` or a `string`.\n * TODO: is this always a Date?\n * @param {string} dateFormat - Dayjs date format string.\n * @param {*} excludes\n * @param {*} includes\n */\nconst checkTaskDates = function (task, dateFormat, excludes, includes) {\n if (!excludes.length || task.manualEndTime) {\n return;\n }\n let startTime;\n if (task.startTime instanceof Date) {\n startTime = dayjs(task.startTime);\n } else {\n startTime = dayjs(task.startTime, dateFormat, true);\n }\n startTime = startTime.add(1, 'd');\n\n let originalEndTime;\n if (task.endTime instanceof Date) {\n originalEndTime = dayjs(task.endTime);\n } else {\n originalEndTime = dayjs(task.endTime, dateFormat, true);\n }\n const [fixedEndTime, renderEndTime] = fixTaskDates(\n startTime,\n originalEndTime,\n dateFormat,\n excludes,\n includes\n );\n task.endTime = fixedEndTime.toDate();\n task.renderEndTime = renderEndTime;\n};\n\n/**\n * TODO: what does this function do?\n *\n * @param {dayjs.Dayjs} startTime - The start time.\n * @param {dayjs.Dayjs} endTime - The original end time (will return a different end time if it's invalid).\n * @param {string} dateFormat - Dayjs date format string.\n * @param {*} excludes\n * @param {*} includes\n * @returns {[endTime: dayjs.Dayjs, renderEndTime: Date | null]} The new `endTime`, and the end time to render.\n * `renderEndTime` may be `null` if `startTime` is newer than `endTime`.\n */\nconst fixTaskDates = function (startTime, endTime, dateFormat, excludes, includes) {\n let invalid = false;\n let renderEndTime = null;\n while (startTime <= endTime) {\n if (!invalid) {\n renderEndTime = endTime.toDate();\n }\n invalid = isInvalidDate(startTime, dateFormat, excludes, includes);\n if (invalid) {\n endTime = endTime.add(1, 'd');\n }\n startTime = startTime.add(1, 'd');\n }\n return [endTime, renderEndTime];\n};\n\nconst getStartDate = function (prevTime, dateFormat, str) {\n str = str.trim();\n\n // Helper function to check if format is a timestamp format (x or X)\n const isTimestampFormat = (format) => {\n const trimmedFormat = format.trim();\n return trimmedFormat === 'x' || trimmedFormat === 'X';\n };\n\n // Handle timestamp formats (x, X) with numeric strings\n if (isTimestampFormat(dateFormat) && /^\\d+$/.test(str)) {\n return new Date(Number(str));\n }\n // Test for after\n const afterRePattern = /^after\\s+(?[\\d\\w- ]+)/;\n const afterStatement = afterRePattern.exec(str);\n\n if (afterStatement !== null) {\n // check all after ids and take the latest\n let latestTask = null;\n for (const id of afterStatement.groups.ids.split(' ')) {\n let task = findTaskById(id);\n if (task !== undefined && (!latestTask || task.endTime > latestTask.endTime)) {\n latestTask = task;\n }\n }\n\n if (latestTask) {\n return latestTask.endTime;\n }\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return today;\n }\n\n // Check for actual date set using dayjs strict parsing\n let mDate = dayjs(str, dateFormat.trim(), true);\n if (mDate.isValid()) {\n return mDate.toDate();\n } else {\n log.debug('Invalid date:' + str);\n log.debug('With date format:' + dateFormat.trim());\n\n // Timestamp formats can fall back to new Date()\n const d = new Date(str);\n if (\n d === undefined ||\n isNaN(d.getTime()) ||\n // WebKit browsers can mis-parse invalid dates to be ridiculously\n // huge numbers, e.g. new Date('202304') gets parsed as January 1, 202304.\n // This can cause virtually infinite loops while rendering, so for the\n // purposes of Gantt charts we'll just treat any date beyond 10,000 AD/BC as\n // invalid.\n d.getFullYear() < -10000 ||\n d.getFullYear() > 10000\n ) {\n throw new Error('Invalid date:' + str);\n }\n return d;\n }\n};\n\n/**\n * Parse a string into the args for `dayjs.add()`.\n *\n * The string have to be compound by a value and a shorthand duration unit. For example `5d`\n * represents 5 days.\n *\n * Please be aware that 1 day may be 23 or 25 hours, if the user lives in an area\n * that has daylight savings time (or even 23.5/24.5 hours in Lord Howe Island!)\n *\n * Shorthand unit supported are:\n *\n * - `y` for years\n * - `M` for months\n * - `w` for weeks\n * - `d` for days\n * - `h` for hours\n * - `s` for seconds\n * - `ms` for milliseconds\n *\n * @param {string} str - A string representing the duration.\n * @returns {[value: number, unit: dayjs.ManipulateType]} Arguments to pass to `dayjs.add()`\n */\nconst parseDuration = function (str) {\n // cspell:disable-next-line\n const statement = /^(\\d+(?:\\.\\d+)?)([Mdhmswy]|ms)$/.exec(str.trim());\n if (statement !== null) {\n return [Number.parseFloat(statement[1]), statement[2]];\n }\n // NaN means an invalid duration\n return [NaN, 'ms'];\n};\n\nconst getEndDate = function (prevTime, dateFormat, str, inclusive = false) {\n str = str.trim();\n\n // test for until\n const untilRePattern = /^until\\s+(?[\\d\\w- ]+)/;\n const untilStatement = untilRePattern.exec(str);\n\n if (untilStatement !== null) {\n // check all until ids and take the earliest\n let earliestTask = null;\n for (const id of untilStatement.groups.ids.split(' ')) {\n let task = findTaskById(id);\n if (task !== undefined && (!earliestTask || task.startTime < earliestTask.startTime)) {\n earliestTask = task;\n }\n }\n\n if (earliestTask) {\n return earliestTask.startTime;\n }\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return today;\n }\n\n // check for actual date\n let parsedDate = dayjs(str, dateFormat.trim(), true);\n if (parsedDate.isValid()) {\n if (inclusive) {\n parsedDate = parsedDate.add(1, 'd');\n }\n return parsedDate.toDate();\n }\n\n let endTime = dayjs(prevTime);\n const [durationValue, durationUnit] = parseDuration(str);\n if (!Number.isNaN(durationValue)) {\n const newEndTime = endTime.add(durationValue, durationUnit);\n if (newEndTime.isValid()) {\n endTime = newEndTime;\n }\n }\n return endTime.toDate();\n};\n\nlet taskCnt = 0;\nconst parseId = function (idStr) {\n if (idStr === undefined) {\n taskCnt = taskCnt + 1;\n return 'task' + taskCnt;\n }\n return idStr;\n};\n// id, startDate, endDate\n// id, startDate, length\n// id, after x, endDate\n// id, after x, length\n// startDate, endDate\n// startDate, length\n// after x, endDate\n// after x, length\n// endDate\n// length\n\nconst compileData = function (prevTask, dataStr) {\n let ds;\n\n if (dataStr.substr(0, 1) === ':') {\n ds = dataStr.substr(1, dataStr.length);\n } else {\n ds = dataStr;\n }\n\n const data = ds.split(',');\n\n const task = {};\n\n // Get tags like active, done, crit, milestone, and vert\n getTaskTags(data, task, tags);\n\n for (let i = 0; i < data.length; i++) {\n data[i] = data[i].trim();\n }\n\n let endTimeData = '';\n switch (data.length) {\n case 1:\n task.id = parseId();\n task.startTime = prevTask.endTime;\n endTimeData = data[0];\n break;\n case 2:\n task.id = parseId();\n task.startTime = getStartDate(undefined, dateFormat, data[0]);\n endTimeData = data[1];\n break;\n case 3:\n task.id = parseId(data[0]);\n task.startTime = getStartDate(undefined, dateFormat, data[1]);\n endTimeData = data[2];\n break;\n default:\n }\n\n if (endTimeData) {\n task.endTime = getEndDate(task.startTime, dateFormat, endTimeData, inclusiveEndDates);\n task.manualEndTime = dayjs(endTimeData, 'YYYY-MM-DD', true).isValid();\n checkTaskDates(task, dateFormat, excludes, includes);\n }\n\n return task;\n};\n\nconst parseData = function (prevTaskId, dataStr) {\n let ds;\n if (dataStr.substr(0, 1) === ':') {\n ds = dataStr.substr(1, dataStr.length);\n } else {\n ds = dataStr;\n }\n\n const data = ds.split(',');\n\n const task = {};\n\n // Get tags like active, done, crit, milestone, and vert\n getTaskTags(data, task, tags);\n\n for (let i = 0; i < data.length; i++) {\n data[i] = data[i].trim();\n }\n\n switch (data.length) {\n case 1:\n task.id = parseId();\n task.startTime = {\n type: 'prevTaskEnd',\n id: prevTaskId,\n };\n task.endTime = {\n data: data[0],\n };\n break;\n case 2:\n task.id = parseId();\n task.startTime = {\n type: 'getStartDate',\n startData: data[0],\n };\n task.endTime = {\n data: data[1],\n };\n break;\n case 3:\n task.id = parseId(data[0]);\n task.startTime = {\n type: 'getStartDate',\n startData: data[1],\n };\n task.endTime = {\n data: data[2],\n };\n break;\n default:\n }\n\n return task;\n};\n\nlet lastTask;\nlet lastTaskID;\nlet rawTasks = [];\nconst taskDb = {};\nexport const addTask = function (descr, data) {\n const rawTask = {\n section: currentSection,\n type: currentSection,\n processed: false,\n manualEndTime: false,\n renderEndTime: null,\n raw: { data: data },\n task: descr,\n classes: [],\n };\n const taskInfo = parseData(lastTaskID, data);\n rawTask.raw.startTime = taskInfo.startTime;\n rawTask.raw.endTime = taskInfo.endTime;\n rawTask.id = taskInfo.id;\n rawTask.prevTaskId = lastTaskID;\n rawTask.active = taskInfo.active;\n rawTask.done = taskInfo.done;\n rawTask.crit = taskInfo.crit;\n rawTask.milestone = taskInfo.milestone;\n rawTask.vert = taskInfo.vert;\n rawTask.order = lastOrder;\n\n lastOrder++;\n\n const pos = rawTasks.push(rawTask);\n\n lastTaskID = rawTask.id;\n // Store cross ref\n taskDb[rawTask.id] = pos - 1;\n};\n\nexport const findTaskById = function (id) {\n const pos = taskDb[id];\n return rawTasks[pos];\n};\n\nexport const addTaskOrg = function (descr, data) {\n const newTask = {\n section: currentSection,\n type: currentSection,\n description: descr,\n task: descr,\n classes: [],\n };\n const taskInfo = compileData(lastTask, data);\n newTask.startTime = taskInfo.startTime;\n newTask.endTime = taskInfo.endTime;\n newTask.id = taskInfo.id;\n newTask.active = taskInfo.active;\n newTask.done = taskInfo.done;\n newTask.crit = taskInfo.crit;\n newTask.milestone = taskInfo.milestone;\n newTask.vert = taskInfo.vert;\n lastTask = newTask;\n tasks.push(newTask);\n};\n\nconst compileTasks = function () {\n const compileTask = function (pos) {\n const task = rawTasks[pos];\n let startTime = '';\n switch (rawTasks[pos].raw.startTime.type) {\n case 'prevTaskEnd': {\n const prevTask = findTaskById(task.prevTaskId);\n task.startTime = prevTask.endTime;\n break;\n }\n case 'getStartDate':\n startTime = getStartDate(undefined, dateFormat, rawTasks[pos].raw.startTime.startData);\n if (startTime) {\n rawTasks[pos].startTime = startTime;\n }\n break;\n }\n\n if (rawTasks[pos].startTime) {\n rawTasks[pos].endTime = getEndDate(\n rawTasks[pos].startTime,\n dateFormat,\n rawTasks[pos].raw.endTime.data,\n inclusiveEndDates\n );\n if (rawTasks[pos].endTime) {\n rawTasks[pos].processed = true;\n rawTasks[pos].manualEndTime = dayjs(\n rawTasks[pos].raw.endTime.data,\n 'YYYY-MM-DD',\n true\n ).isValid();\n checkTaskDates(rawTasks[pos], dateFormat, excludes, includes);\n }\n }\n\n return rawTasks[pos].processed;\n };\n\n let allProcessed = true;\n for (const [i, rawTask] of rawTasks.entries()) {\n compileTask(i);\n\n allProcessed = allProcessed && rawTask.processed;\n }\n return allProcessed;\n};\n\n/**\n * Called by parser when a link is found. Adds the URL to the vertex data.\n *\n * @param ids Comma separated list of ids\n * @param _linkStr URL to create a link for\n */\nexport const setLink = function (ids, _linkStr) {\n let linkStr = _linkStr;\n if (getConfig().securityLevel !== 'loose') {\n linkStr = sanitizeUrl(_linkStr);\n }\n ids.split(',').forEach(function (id) {\n let rawTask = findTaskById(id);\n if (rawTask !== undefined) {\n pushFun(id, () => {\n window.open(linkStr, '_self');\n });\n links.set(id, linkStr);\n }\n });\n setClass(ids, 'clickable');\n};\n\n/**\n * Called by parser when a special node is found, e.g. a clickable element.\n *\n * @param ids Comma separated list of ids\n * @param className Class to add\n */\nexport const setClass = function (ids, className) {\n ids.split(',').forEach(function (id) {\n let rawTask = findTaskById(id);\n if (rawTask !== undefined) {\n rawTask.classes.push(className);\n }\n });\n};\n\nconst setClickFun = function (id, functionName, functionArgs) {\n if (getConfig().securityLevel !== 'loose') {\n return;\n }\n if (functionName === undefined) {\n return;\n }\n\n let argList = [];\n if (typeof functionArgs === 'string') {\n /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */\n argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/);\n for (let i = 0; i < argList.length; i++) {\n let item = argList[i].trim();\n /* Removes all double quotes at the start and end of an argument */\n /* This preserves all starting and ending whitespace inside */\n if (item.startsWith('\"') && item.endsWith('\"')) {\n item = item.substr(1, item.length - 2);\n }\n argList[i] = item;\n }\n }\n\n /* if no arguments passed into callback, default to passing in id */\n if (argList.length === 0) {\n argList.push(id);\n }\n\n let rawTask = findTaskById(id);\n if (rawTask !== undefined) {\n pushFun(id, () => {\n utils.runFunc(functionName, ...argList);\n });\n }\n};\n\n/**\n * The callbackFunction is executed in a click event bound to the task with the specified id or the\n * task's assigned text\n *\n * @param id The task's id\n * @param callbackFunction A function to be executed when clicked on the task or the task's text\n */\nconst pushFun = function (id, callbackFunction) {\n funs.push(\n function () {\n // const elem = d3.select(element).select(`[id=\"${id}\"]`)\n const elem = document.querySelector(`[id=\"${id}\"]`);\n if (elem !== null) {\n elem.addEventListener('click', function () {\n callbackFunction();\n });\n }\n },\n function () {\n // const elem = d3.select(element).select(`[id=\"${id}-text\"]`)\n const elem = document.querySelector(`[id=\"${id}-text\"]`);\n if (elem !== null) {\n elem.addEventListener('click', function () {\n callbackFunction();\n });\n }\n }\n );\n};\n\n/**\n * Called by parser when a click definition is found. Registers an event handler.\n *\n * @param ids Comma separated list of ids\n * @param functionName Function to be called on click\n * @param functionArgs Function args the function should be called with\n */\nexport const setClickEvent = function (ids, functionName, functionArgs) {\n ids.split(',').forEach(function (id) {\n setClickFun(id, functionName, functionArgs);\n });\n setClass(ids, 'clickable');\n};\n\n/**\n * Binds all functions previously added to fun (specified through click) to the element\n *\n * @param element\n */\nexport const bindFunctions = function (element) {\n funs.forEach(function (fun) {\n fun(element);\n });\n};\n\nexport default {\n getConfig: () => getConfig().gantt,\n clear,\n setDateFormat,\n getDateFormat,\n enableInclusiveEndDates,\n endDatesAreInclusive,\n enableTopAxis,\n topAxisEnabled,\n setAxisFormat,\n getAxisFormat,\n setTickInterval,\n getTickInterval,\n setTodayMarker,\n getTodayMarker,\n setAccTitle,\n getAccTitle,\n setDiagramTitle,\n getDiagramTitle,\n setDisplayMode,\n getDisplayMode,\n setAccDescription,\n getAccDescription,\n addSection,\n getSections,\n getTasks,\n addTask,\n findTaskById,\n addTaskOrg,\n setIncludes,\n getIncludes,\n setExcludes,\n getExcludes,\n setClickEvent,\n setLink,\n getLinks,\n bindFunctions,\n parseDuration,\n isInvalidDate,\n setWeekday,\n getWeekday,\n setWeekend,\n};\n\n/**\n * @param data\n * @param task\n * @param tags\n */\nfunction getTaskTags(data, task, tags) {\n let matchFound = true;\n while (matchFound) {\n matchFound = false;\n tags.forEach(function (t) {\n const pattern = '^\\\\s*' + t + '\\\\s*$';\n const regex = new RegExp(pattern);\n if (data[0].match(regex)) {\n task[t] = true;\n data.shift(1);\n matchFound = true;\n }\n });\n }\n}\n", "!function(t,s){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=s():\"function\"==typeof define&&define.amd?define(s):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_duration=s()}(this,(function(){\"use strict\";var t,s,n=1e3,i=6e4,e=36e5,r=864e5,o=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=31536e6,d=2628e6,a=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,h={years:u,months:d,days:r,hours:e,minutes:i,seconds:n,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof g},f=function(t,s,n){return new g(t,n,s.$l)},m=function(t){return s.p(t)+\"s\"},l=function(t){return t<0},$=function(t){return l(t)?Math.ceil(t):Math.floor(t)},y=function(t){return Math.abs(t)},v=function(t,s){return t?l(t)?{negative:!0,format:\"\"+y(t)+s}:{negative:!1,format:\"\"+t+s}:{negative:!1,format:\"\"}},g=function(){function l(t,s,n){var i=this;if(this.$d={},this.$l=n,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),s)return f(t*h[m(s)],this);if(\"number\"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if(\"object\"==typeof t)return Object.keys(t).forEach((function(s){i.$d[m(s)]=t[s]})),this.calMilliseconds(),this;if(\"string\"==typeof t){var e=t.match(a);if(e){var r=e.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var y=l.prototype;return y.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(s,n){return s+(t.$d[n]||0)*h[n]}),0)},y.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=$(t/u),t%=u,this.$d.months=$(t/d),t%=d,this.$d.days=$(t/r),t%=r,this.$d.hours=$(t/e),t%=e,this.$d.minutes=$(t/i),t%=i,this.$d.seconds=$(t/n),t%=n,this.$d.milliseconds=t},y.toISOString=function(){var t=v(this.$d.years,\"Y\"),s=v(this.$d.months,\"M\"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var i=v(n,\"D\"),e=v(this.$d.hours,\"H\"),r=v(this.$d.minutes,\"M\"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3,o=Math.round(1e3*o)/1e3);var u=v(o,\"S\"),d=t.negative||s.negative||i.negative||e.negative||r.negative||u.negative,a=e.format||r.format||u.format?\"T\":\"\",h=(d?\"-\":\"\")+\"P\"+t.format+s.format+i.format+a+e.format+r.format+u.format;return\"P\"===h||\"-P\"===h?\"P0D\":h},y.toJSON=function(){return this.toISOString()},y.format=function(t){var n=t||\"YYYY-MM-DDTHH:mm:ss\",i={Y:this.$d.years,YY:s.s(this.$d.years,2,\"0\"),YYYY:s.s(this.$d.years,4,\"0\"),M:this.$d.months,MM:s.s(this.$d.months,2,\"0\"),D:this.$d.days,DD:s.s(this.$d.days,2,\"0\"),H:this.$d.hours,HH:s.s(this.$d.hours,2,\"0\"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,\"0\"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,\"0\"),SSS:s.s(this.$d.milliseconds,3,\"0\")};return n.replace(o,(function(t,s){return s||String(i[t])}))},y.as=function(t){return this.$ms/h[m(t)]},y.get=function(t){var s=this.$ms,n=m(t);return\"milliseconds\"===n?s%=1e3:s=\"weeks\"===n?$(s/h[n]):this.$d[n],s||0},y.add=function(t,s,n){var i;return i=s?t*h[m(s)]:c(t)?t.$ms:f(t,this).$ms,f(this.$ms+i*(n?-1:1),this)},y.subtract=function(t,s){return this.add(t,s,!0)},y.locale=function(t){var s=this.clone();return s.$l=t,s},y.clone=function(){return f(this.$ms,this)},y.humanize=function(s){return t().add(this.$ms,\"ms\").locale(this.$l).fromNow(!s)},y.valueOf=function(){return this.asMilliseconds()},y.milliseconds=function(){return this.get(\"milliseconds\")},y.asMilliseconds=function(){return this.as(\"milliseconds\")},y.seconds=function(){return this.get(\"seconds\")},y.asSeconds=function(){return this.as(\"seconds\")},y.minutes=function(){return this.get(\"minutes\")},y.asMinutes=function(){return this.as(\"minutes\")},y.hours=function(){return this.get(\"hours\")},y.asHours=function(){return this.as(\"hours\")},y.days=function(){return this.get(\"days\")},y.asDays=function(){return this.as(\"days\")},y.weeks=function(){return this.get(\"weeks\")},y.asWeeks=function(){return this.as(\"weeks\")},y.months=function(){return this.get(\"months\")},y.asMonths=function(){return this.as(\"months\")},y.years=function(){return this.get(\"years\")},y.asYears=function(){return this.as(\"years\")},l}(),p=function(t,s,n){return t.add(s.years()*n,\"y\").add(s.months()*n,\"M\").add(s.days()*n,\"d\").add(s.hours()*n,\"h\").add(s.minutes()*n,\"m\").add(s.seconds()*n,\"s\").add(s.milliseconds()*n,\"ms\")};return function(n,i,e){t=e,s=e().$utils(),e.duration=function(t,s){var n=e.locale();return f(t,{$l:n},s)},e.isDuration=c;var r=i.prototype.add,o=i.prototype.subtract;i.prototype.add=function(t,s){return c(t)?p(this,t,1):r.bind(this)(t,s)},i.prototype.subtract=function(t,s){return c(t)?p(this,t,-1):o.bind(this)(t,s)}}}));", "import dayjs from 'dayjs';\nimport dayjsDuration from 'dayjs/plugin/duration.js';\nimport { log } from '../../logger.js';\nimport {\n select,\n scaleTime,\n min,\n max,\n scaleLinear,\n interpolateHcl,\n axisBottom,\n axisTop,\n timeFormat,\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeMonday,\n timeTuesday,\n timeWednesday,\n timeThursday,\n timeFriday,\n timeSaturday,\n timeSunday,\n timeMonth,\n} from 'd3';\nimport common from '../common/common.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\n\ndayjs.extend(dayjsDuration);\n\nexport const setConf = function () {\n log.debug('Something is calling, setConf, remove the call');\n};\n\n/**\n * This will map any day of the week that can be set in the `weekday` option to\n * the corresponding d3-time function that is used to calculate the ticks.\n */\nconst mapWeekdayToTimeFunction = {\n monday: timeMonday,\n tuesday: timeTuesday,\n wednesday: timeWednesday,\n thursday: timeThursday,\n friday: timeFriday,\n saturday: timeSaturday,\n sunday: timeSunday,\n};\n\n/**\n * For this issue:\n * https://github.com/mermaid-js/mermaid/issues/1618\n *\n * Finds the number of intersections between tasks that happen at any point in time.\n * Used to figure out how many rows are needed to display the tasks when the display\n * mode is set to 'compact'.\n *\n * @param tasks\n * @param orderOffset\n */\nconst getMaxIntersections = (tasks, orderOffset) => {\n let timeline = [...tasks].map(() => -Infinity);\n let sorted = [...tasks].sort((a, b) => a.startTime - b.startTime || a.order - b.order);\n let maxIntersections = 0;\n for (const element of sorted) {\n for (let j = 0; j < timeline.length; j++) {\n if (element.startTime >= timeline[j]) {\n timeline[j] = element.endTime;\n element.order = j + orderOffset;\n if (j > maxIntersections) {\n maxIntersections = j;\n }\n break;\n }\n }\n }\n\n return maxIntersections;\n};\n\nlet w;\nconst MAX_TICK_COUNT = 10000;\nexport const draw = function (text, id, version, diagObj) {\n const conf = getConfig().gantt;\n\n const securityLevel = getConfig().securityLevel;\n // Handle root and Document for when rendering in sandbox mode\n let sandboxElement;\n if (securityLevel === 'sandbox') {\n sandboxElement = select('#i' + id);\n }\n const root =\n securityLevel === 'sandbox'\n ? select(sandboxElement.nodes()[0].contentDocument.body)\n : select('body');\n const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n\n const elem = doc.getElementById(id);\n w = elem.parentElement.offsetWidth;\n\n if (w === undefined) {\n w = 1200;\n }\n\n if (conf.useWidth !== undefined) {\n w = conf.useWidth;\n }\n\n const taskArray = diagObj.db.getTasks();\n\n // Set height based on number of tasks\n\n let categories = [];\n\n for (const element of taskArray) {\n categories.push(element.type);\n }\n\n categories = checkUnique(categories);\n const categoryHeights = {};\n\n let h = 2 * conf.topPadding;\n if (diagObj.db.getDisplayMode() === 'compact' || conf.displayMode === 'compact') {\n const categoryElements = {};\n for (const element of taskArray) {\n if (categoryElements[element.section] === undefined) {\n categoryElements[element.section] = [element];\n } else {\n categoryElements[element.section].push(element);\n }\n }\n\n let intersections = 0;\n for (const category of Object.keys(categoryElements)) {\n const categoryHeight = getMaxIntersections(categoryElements[category], intersections) + 1;\n intersections += categoryHeight;\n h += categoryHeight * (conf.barHeight + conf.barGap);\n categoryHeights[category] = categoryHeight;\n }\n } else {\n h += taskArray.length * (conf.barHeight + conf.barGap);\n for (const category of categories) {\n categoryHeights[category] = taskArray.filter((task) => task.type === category).length;\n }\n }\n\n // Set viewBox\n elem.setAttribute('viewBox', '0 0 ' + w + ' ' + h);\n const svg = root.select(`[id=\"${id}\"]`);\n\n // Set timescale\n const timeScale = scaleTime()\n .domain([\n min(taskArray, function (d) {\n return d.startTime;\n }),\n max(taskArray, function (d) {\n return d.endTime;\n }),\n ])\n .rangeRound([0, w - conf.leftPadding - conf.rightPadding]);\n\n /**\n * @param a\n * @param b\n */\n function taskCompare(a, b) {\n const taskA = a.startTime;\n const taskB = b.startTime;\n let result = 0;\n if (taskA > taskB) {\n result = 1;\n } else if (taskA < taskB) {\n result = -1;\n }\n return result;\n }\n\n // Sort the task array using the above taskCompare() so that\n // tasks are created based on their order of startTime\n taskArray.sort(taskCompare);\n\n makeGantt(taskArray, w, h);\n\n configureSvgSize(svg, h, w, conf.useMaxWidth);\n\n svg\n .append('text')\n .text(diagObj.db.getDiagramTitle())\n .attr('x', w / 2)\n .attr('y', conf.titleTopMargin)\n .attr('class', 'titleText');\n\n /**\n * @param tasks\n * @param pageWidth\n * @param pageHeight\n */\n function makeGantt(tasks, pageWidth, pageHeight) {\n const barHeight = conf.barHeight;\n const gap = barHeight + conf.barGap;\n const topPadding = conf.topPadding;\n const leftPadding = conf.leftPadding;\n\n const colorScale = scaleLinear()\n .domain([0, categories.length])\n .range(['#00B9FA', '#F95002'])\n .interpolate(interpolateHcl);\n\n drawExcludeDays(\n gap,\n topPadding,\n leftPadding,\n pageWidth,\n pageHeight,\n tasks,\n diagObj.db.getExcludes(),\n diagObj.db.getIncludes()\n );\n makeGrid(leftPadding, topPadding, pageWidth, pageHeight);\n drawRects(tasks, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth, pageHeight);\n vertLabels(gap, topPadding, leftPadding, barHeight, colorScale);\n drawToday(leftPadding, topPadding, pageWidth, pageHeight);\n }\n\n /**\n * @param theArray\n * @param theGap\n * @param theTopPad\n * @param theSidePad\n * @param theBarHeight\n * @param theColorScale\n * @param w\n */\n function drawRects(theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w) {\n // Sort theArray so that tasks with `vert` come last\n theArray.sort((a, b) => (a.vert === b.vert ? 0 : a.vert ? 1 : -1));\n // Get unique task orders. Required to draw the background rects when display mode is compact.\n const uniqueTaskOrderIds = [...new Set(theArray.map((item) => item.order))];\n const uniqueTasks = uniqueTaskOrderIds.map((id) => theArray.find((item) => item.order === id));\n // Draw background rects covering the entire width of the graph, these form the section rows.\n svg\n .append('g')\n .selectAll('rect')\n .data(uniqueTasks)\n .enter()\n .append('rect')\n .attr('x', 0)\n .attr('y', function (d, i) {\n // Ignore the incoming i value and use our order instead\n i = d.order;\n return i * theGap + theTopPad - 2;\n })\n .attr('width', function () {\n return w - conf.rightPadding / 2;\n })\n .attr('height', theGap)\n .attr('class', function (d) {\n for (const [i, category] of categories.entries()) {\n if (d.type === category) {\n return 'section section' + (i % conf.numberSectionStyles);\n }\n }\n return 'section section0';\n })\n .enter();\n\n // Draw the rects representing the tasks\n const rectangles = svg.append('g').selectAll('rect').data(theArray).enter();\n\n const links = diagObj.db.getLinks();\n\n // Render the tasks with links\n // Render the other tasks\n rectangles\n .append('rect')\n .attr('id', function (d) {\n return d.id;\n })\n .attr('rx', 3)\n .attr('ry', 3)\n .attr('x', function (d) {\n if (d.milestone) {\n return (\n timeScale(d.startTime) +\n theSidePad +\n 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) -\n 0.5 * theBarHeight\n );\n }\n return timeScale(d.startTime) + theSidePad;\n })\n .attr('y', function (d, i) {\n // Ignore the incoming i value and use our order instead\n i = d.order;\n if (d.vert) {\n return conf.gridLineStartPadding;\n }\n return i * theGap + theTopPad;\n })\n .attr('width', function (d) {\n if (d.milestone) {\n return theBarHeight;\n }\n if (d.vert) {\n return 0.08 * theBarHeight;\n }\n return timeScale(d.renderEndTime || d.endTime) - timeScale(d.startTime);\n })\n .attr('height', function (d) {\n if (d.vert) {\n return taskArray.length * (conf.barHeight + conf.barGap) + conf.barHeight * 2;\n }\n return theBarHeight;\n })\n .attr('transform-origin', function (d, i) {\n // Ignore the incoming i value and use our order instead\n i = d.order;\n\n return (\n (\n timeScale(d.startTime) +\n theSidePad +\n 0.5 * (timeScale(d.endTime) - timeScale(d.startTime))\n ).toString() +\n 'px ' +\n (i * theGap + theTopPad + 0.5 * theBarHeight).toString() +\n 'px'\n );\n })\n .attr('class', function (d) {\n const res = 'task';\n\n let classStr = '';\n if (d.classes.length > 0) {\n classStr = d.classes.join(' ');\n }\n\n let secNum = 0;\n for (const [i, category] of categories.entries()) {\n if (d.type === category) {\n secNum = i % conf.numberSectionStyles;\n }\n }\n\n let taskClass = '';\n if (d.active) {\n if (d.crit) {\n taskClass += ' activeCrit';\n } else {\n taskClass = ' active';\n }\n } else if (d.done) {\n if (d.crit) {\n taskClass = ' doneCrit';\n } else {\n taskClass = ' done';\n }\n } else {\n if (d.crit) {\n taskClass += ' crit';\n }\n }\n\n if (taskClass.length === 0) {\n taskClass = ' task';\n }\n\n if (d.milestone) {\n taskClass = ' milestone ' + taskClass;\n }\n if (d.vert) {\n taskClass = ' vert ' + taskClass;\n }\n\n taskClass += secNum;\n\n taskClass += ' ' + classStr;\n\n return res + taskClass;\n });\n\n // Append task labels\n rectangles\n .append('text')\n .attr('id', function (d) {\n return d.id + '-text';\n })\n .text(function (d) {\n return d.task;\n })\n .attr('font-size', conf.fontSize)\n .attr('x', function (d) {\n let startX = timeScale(d.startTime);\n let endX = timeScale(d.renderEndTime || d.endTime);\n if (d.milestone) {\n startX += 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight;\n endX = startX + theBarHeight;\n }\n\n if (d.vert) {\n return timeScale(d.startTime) + theSidePad;\n }\n\n const textWidth = this.getBBox().width;\n\n // Check id text width > width of rectangle\n if (textWidth > endX - startX) {\n if (endX + textWidth + 1.5 * conf.leftPadding > w) {\n return startX + theSidePad - 5;\n } else {\n return endX + theSidePad + 5;\n }\n } else {\n return (endX - startX) / 2 + startX + theSidePad;\n }\n })\n .attr('y', function (d, i) {\n // Ignore the incoming i value and use our order instead\n if (d.vert) {\n return conf.gridLineStartPadding + taskArray.length * (conf.barHeight + conf.barGap) + 60;\n }\n i = d.order;\n return i * theGap + conf.barHeight / 2 + (conf.fontSize / 2 - 2) + theTopPad;\n })\n .attr('text-height', theBarHeight)\n .attr('class', function (d) {\n const startX = timeScale(d.startTime);\n let endX = timeScale(d.endTime);\n if (d.milestone) {\n endX = startX + theBarHeight;\n }\n\n const textWidth = this.getBBox().width;\n\n let classStr = '';\n if (d.classes.length > 0) {\n classStr = d.classes.join(' ');\n }\n\n let secNum = 0;\n for (const [i, category] of categories.entries()) {\n if (d.type === category) {\n secNum = i % conf.numberSectionStyles;\n }\n }\n\n let taskType = '';\n if (d.active) {\n if (d.crit) {\n taskType = 'activeCritText' + secNum;\n } else {\n taskType = 'activeText' + secNum;\n }\n }\n\n if (d.done) {\n if (d.crit) {\n taskType = taskType + ' doneCritText' + secNum;\n } else {\n taskType = taskType + ' doneText' + secNum;\n }\n } else {\n if (d.crit) {\n taskType = taskType + ' critText' + secNum;\n }\n }\n\n if (d.milestone) {\n taskType += ' milestoneText';\n }\n\n if (d.vert) {\n taskType += ' vertText';\n }\n\n // Check id text width > width of rectangle\n if (textWidth > endX - startX) {\n if (endX + textWidth + 1.5 * conf.leftPadding > w) {\n return classStr + ' taskTextOutsideLeft taskTextOutside' + secNum + ' ' + taskType;\n } else {\n return (\n classStr +\n ' taskTextOutsideRight taskTextOutside' +\n secNum +\n ' ' +\n taskType +\n ' width-' +\n textWidth\n );\n }\n } else {\n return classStr + ' taskText taskText' + secNum + ' ' + taskType + ' width-' + textWidth;\n }\n });\n\n const securityLevel = getConfig().securityLevel;\n\n // Wrap the tasks in a tag for working links without javascript\n if (securityLevel === 'sandbox') {\n let sandboxElement;\n sandboxElement = select('#i' + id);\n const doc = sandboxElement.nodes()[0].contentDocument;\n\n rectangles\n .filter(function (d) {\n return links.has(d.id);\n })\n .each(function (o) {\n var taskRect = doc.querySelector('#' + o.id);\n var taskText = doc.querySelector('#' + o.id + '-text');\n const oldParent = taskRect.parentNode;\n var Link = doc.createElement('a');\n Link.setAttribute('xlink:href', links.get(o.id));\n Link.setAttribute('target', '_top');\n oldParent.appendChild(Link);\n Link.appendChild(taskRect);\n Link.appendChild(taskText);\n });\n }\n }\n /**\n * @param theGap\n * @param theTopPad\n * @param theSidePad\n * @param w\n * @param h\n * @param tasks\n * @param {unknown[]} excludes\n * @param {unknown[]} includes\n */\n function drawExcludeDays(theGap, theTopPad, theSidePad, w, h, tasks, excludes, includes) {\n if (excludes.length === 0 && includes.length === 0) {\n return;\n }\n\n let minTime;\n let maxTime;\n for (const { startTime, endTime } of tasks) {\n if (minTime === undefined || startTime < minTime) {\n minTime = startTime;\n }\n if (maxTime === undefined || endTime > maxTime) {\n maxTime = endTime;\n }\n }\n\n if (!minTime || !maxTime) {\n return;\n }\n\n if (dayjs(maxTime).diff(dayjs(minTime), 'year') > 5) {\n log.warn(\n 'The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.'\n );\n return;\n }\n\n const dateFormat = diagObj.db.getDateFormat();\n const excludeRanges = [];\n let range = null;\n let d = dayjs(minTime);\n while (d.valueOf() <= maxTime) {\n if (diagObj.db.isInvalidDate(d, dateFormat, excludes, includes)) {\n if (!range) {\n range = {\n start: d,\n end: d,\n };\n } else {\n range.end = d;\n }\n } else {\n if (range) {\n excludeRanges.push(range);\n range = null;\n }\n }\n d = d.add(1, 'd');\n }\n\n const rectangles = svg.append('g').selectAll('rect').data(excludeRanges).enter();\n\n rectangles\n .append('rect')\n .attr('id', (d) => 'exclude-' + d.start.format('YYYY-MM-DD'))\n .attr('x', (d) => timeScale(d.start.startOf('day')) + theSidePad)\n .attr('y', conf.gridLineStartPadding)\n .attr('width', (d) => timeScale(d.end.endOf('day')) - timeScale(d.start.startOf('day')))\n\n .attr('height', h - theTopPad - conf.gridLineStartPadding)\n .attr('transform-origin', function (d, i) {\n return (\n (\n timeScale(d.start) +\n theSidePad +\n 0.5 * (timeScale(d.end) - timeScale(d.start))\n ).toString() +\n 'px ' +\n (i * theGap + 0.5 * h).toString() +\n 'px'\n );\n })\n .attr('class', 'exclude-range');\n }\n\n /**\n * Calculates the estimated number of ticks based on the time domain and tick interval.\n * Returns the estimated number of ticks as a number.\n * @param {Date} minTime - The minimum time in the domain\n * @param {Date} maxTime - The maximum time in the domain\n * @param {number} every - The interval count (e.g., 1 for \"1second\")\n * @param {string} interval - The interval unit (e.g., \"second\", \"day\")\n * @returns {number} The estimated number of ticks\n */\n function getEstimatedTickCount(minTime, maxTime, every, interval) {\n if (every <= 0 || minTime > maxTime) {\n return Infinity;\n }\n const timeDiffMs = maxTime - minTime;\n const intervalMs = dayjs.duration({ [interval ?? 'day']: every }).asMilliseconds();\n if (intervalMs <= 0) {\n return Infinity;\n }\n return Math.ceil(timeDiffMs / intervalMs);\n }\n\n /**\n * @param theSidePad\n * @param theTopPad\n * @param w\n * @param h\n */\n function makeGrid(theSidePad, theTopPad, w, h) {\n const dateFormat = diagObj.db.getDateFormat();\n const userAxisFormat = diagObj.db.getAxisFormat();\n let axisFormat;\n if (userAxisFormat) {\n axisFormat = userAxisFormat;\n } else if (dateFormat === 'D') {\n axisFormat = '%d';\n } else {\n axisFormat = conf.axisFormat ?? '%Y-%m-%d';\n }\n\n let bottomXAxis = axisBottom(timeScale)\n .tickSize(-h + theTopPad + conf.gridLineStartPadding)\n .tickFormat(timeFormat(axisFormat));\n\n const reTickInterval = /^([1-9]\\d*)(millisecond|second|minute|hour|day|week|month)$/;\n const resultTickInterval = reTickInterval.exec(\n diagObj.db.getTickInterval() || conf.tickInterval\n );\n\n if (resultTickInterval !== null) {\n const every = parseInt(resultTickInterval[1], 10);\n if (isNaN(every) || every <= 0) {\n log.warn(\n `Invalid tick interval value: \"${resultTickInterval[1]}\". Skipping custom tick interval.`\n );\n // Skip applying custom ticks\n } else {\n const interval = resultTickInterval[2];\n const weekday = diagObj.db.getWeekday() || conf.weekday;\n\n // Get the time domain to check tick count\n const domain = timeScale.domain();\n const minTime = domain[0];\n const maxTime = domain[1];\n const estimatedTicks = getEstimatedTickCount(minTime, maxTime, every, interval);\n\n if (estimatedTicks > MAX_TICK_COUNT) {\n log.warn(\n `The tick interval \"${every}${interval}\" would generate ${estimatedTicks} ticks, ` +\n `which exceeds the maximum allowed (${MAX_TICK_COUNT}). ` +\n `This may indicate an invalid date or time range. Skipping custom tick interval.`\n );\n // D3 will use its default automatic tick generation\n } else {\n switch (interval) {\n case 'millisecond':\n bottomXAxis.ticks(timeMillisecond.every(every));\n break;\n case 'second':\n bottomXAxis.ticks(timeSecond.every(every));\n break;\n case 'minute':\n bottomXAxis.ticks(timeMinute.every(every));\n break;\n case 'hour':\n bottomXAxis.ticks(timeHour.every(every));\n break;\n case 'day':\n bottomXAxis.ticks(timeDay.every(every));\n break;\n case 'week':\n bottomXAxis.ticks(mapWeekdayToTimeFunction[weekday].every(every));\n break;\n case 'month':\n bottomXAxis.ticks(timeMonth.every(every));\n break;\n }\n }\n }\n }\n\n svg\n .append('g')\n .attr('class', 'grid')\n .attr('transform', 'translate(' + theSidePad + ', ' + (h - 50) + ')')\n .call(bottomXAxis)\n .selectAll('text')\n .style('text-anchor', 'middle')\n .attr('fill', '#000')\n .attr('stroke', 'none')\n .attr('font-size', 10)\n .attr('dy', '1em');\n\n if (diagObj.db.topAxisEnabled() || conf.topAxis) {\n let topXAxis = axisTop(timeScale)\n .tickSize(-h + theTopPad + conf.gridLineStartPadding)\n .tickFormat(timeFormat(axisFormat));\n\n if (resultTickInterval !== null) {\n const every = parseInt(resultTickInterval[1], 10);\n if (isNaN(every) || every <= 0) {\n log.warn(\n `Invalid tick interval value: \"${resultTickInterval[1]}\". Skipping custom tick interval.`\n );\n // Skip applying custom ticks\n } else {\n const interval = resultTickInterval[2];\n const weekday = diagObj.db.getWeekday() || conf.weekday;\n\n // Get the time domain to check tick count\n const domain = timeScale.domain();\n const minTime = domain[0];\n const maxTime = domain[1];\n const estimatedTicks = getEstimatedTickCount(minTime, maxTime, every, interval);\n\n // Only apply custom ticks if the count is reasonable\n if (estimatedTicks <= MAX_TICK_COUNT) {\n switch (interval) {\n case 'millisecond':\n topXAxis.ticks(timeMillisecond.every(every));\n break;\n case 'second':\n topXAxis.ticks(timeSecond.every(every));\n break;\n case 'minute':\n topXAxis.ticks(timeMinute.every(every));\n break;\n case 'hour':\n topXAxis.ticks(timeHour.every(every));\n break;\n case 'day':\n topXAxis.ticks(timeDay.every(every));\n break;\n case 'week':\n topXAxis.ticks(mapWeekdayToTimeFunction[weekday].every(every));\n break;\n case 'month':\n topXAxis.ticks(timeMonth.every(every));\n break;\n }\n }\n }\n }\n\n svg\n .append('g')\n .attr('class', 'grid')\n .attr('transform', 'translate(' + theSidePad + ', ' + theTopPad + ')')\n .call(topXAxis)\n .selectAll('text')\n .style('text-anchor', 'middle')\n .attr('fill', '#000')\n .attr('stroke', 'none')\n .attr('font-size', 10);\n // .attr('dy', '1em');\n }\n }\n\n /**\n * @param theGap\n * @param theTopPad\n */\n function vertLabels(theGap, theTopPad) {\n let prevGap = 0;\n\n const numOccurrences = Object.keys(categoryHeights).map((d) => [d, categoryHeights[d]]);\n\n svg\n .append('g') // without doing this, impossible to put grid lines behind text\n .selectAll('text')\n .data(numOccurrences)\n .enter()\n .append(function (d) {\n const rows = d[0].split(common.lineBreakRegex);\n const dy = -(rows.length - 1) / 2;\n\n const svgLabel = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n svgLabel.setAttribute('dy', dy + 'em');\n\n for (const [j, row] of rows.entries()) {\n const tspan = doc.createElementNS('http://www.w3.org/2000/svg', 'tspan');\n tspan.setAttribute('alignment-baseline', 'central');\n tspan.setAttribute('x', '10');\n if (j > 0) {\n tspan.setAttribute('dy', '1em');\n }\n tspan.textContent = row;\n svgLabel.appendChild(tspan);\n }\n return svgLabel;\n })\n .attr('x', 10)\n .attr('y', function (d, i) {\n if (i > 0) {\n for (let j = 0; j < i; j++) {\n prevGap += numOccurrences[i - 1][1];\n return (d[1] * theGap) / 2 + prevGap * theGap + theTopPad;\n }\n } else {\n return (d[1] * theGap) / 2 + theTopPad;\n }\n })\n .attr('font-size', conf.sectionFontSize)\n .attr('class', function (d) {\n for (const [i, category] of categories.entries()) {\n if (d[0] === category) {\n return 'sectionTitle sectionTitle' + (i % conf.numberSectionStyles);\n }\n }\n return 'sectionTitle';\n });\n }\n\n /**\n * @param theSidePad\n * @param theTopPad\n * @param w\n * @param h\n */\n function drawToday(theSidePad, theTopPad, w, h) {\n const todayMarker = diagObj.db.getTodayMarker();\n if (todayMarker === 'off') {\n return;\n }\n\n const todayG = svg.append('g').attr('class', 'today');\n const today = new Date();\n const todayLine = todayG.append('line');\n\n todayLine\n .attr('x1', timeScale(today) + theSidePad)\n .attr('x2', timeScale(today) + theSidePad)\n .attr('y1', conf.titleTopMargin)\n .attr('y2', h - conf.titleTopMargin)\n .attr('class', 'today');\n\n if (todayMarker !== '') {\n todayLine.attr('style', todayMarker.replace(/,/g, ';'));\n }\n }\n\n /**\n * From this stack exchange question:\n * http://stackoverflow.com/questions/1890203/unique-for-arrays-in-javascript\n *\n * @param arr\n */\n function checkUnique(arr) {\n const hash = {};\n const result = [];\n for (let i = 0, l = arr.length; i < l; ++i) {\n if (!Object.prototype.hasOwnProperty.call(hash, arr[i])) {\n // it works with objects! in FF, at least\n hash[arr[i]] = true;\n result.push(arr[i]);\n }\n }\n return result;\n }\n};\n\nexport default {\n setConf,\n draw,\n};\n", "const getStyles = (options) =>\n `\n .mermaid-main-font {\n font-family: ${options.fontFamily};\n }\n\n .exclude-range {\n fill: ${options.excludeBkgColor};\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: ${options.sectionBkgColor};\n }\n\n .section2 {\n fill: ${options.sectionBkgColor2};\n }\n\n .section1,\n .section3 {\n fill: ${options.altSectionBkgColor};\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ${options.titleColor};\n }\n\n .sectionTitle1 {\n fill: ${options.titleColor};\n }\n\n .sectionTitle2 {\n fill: ${options.titleColor};\n }\n\n .sectionTitle3 {\n fill: ${options.titleColor};\n }\n\n .sectionTitle {\n text-anchor: start;\n font-family: ${options.fontFamily};\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ${options.gridColor};\n opacity: 0.8;\n shape-rendering: crispEdges;\n }\n\n .grid .tick text {\n font-family: ${options.fontFamily};\n fill: ${options.textColor};\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ${options.todayLineColor};\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: ${options.fontFamily};\n }\n\n .taskTextOutsideRight {\n fill: ${options.taskTextDarkColor};\n text-anchor: start;\n font-family: ${options.fontFamily};\n }\n\n .taskTextOutsideLeft {\n fill: ${options.taskTextDarkColor};\n text-anchor: end;\n }\n\n\n /* Special case clickable */\n\n .task.clickable {\n cursor: pointer;\n }\n\n .taskText.clickable {\n cursor: pointer;\n fill: ${options.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ${options.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ${options.taskTextClickableColor} !important;\n font-weight: bold;\n }\n\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ${options.taskTextColor};\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ${options.taskBkgColor};\n stroke: ${options.taskBorderColor};\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ${options.taskTextOutsideColor};\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ${options.taskTextOutsideColor};\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ${options.activeTaskBkgColor};\n stroke: ${options.activeTaskBorderColor};\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ${options.taskTextDarkColor} !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ${options.doneTaskBorderColor};\n fill: ${options.doneTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ${options.taskTextDarkColor} !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ${options.critBorderColor};\n fill: ${options.critBkgColor};\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ${options.critBorderColor};\n fill: ${options.activeTaskBkgColor};\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ${options.critBorderColor};\n fill: ${options.doneTaskBkgColor};\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ${options.taskTextDarkColor} !important;\n }\n\n .vert {\n stroke: ${options.vertLineColor};\n }\n\n .vertText {\n font-size: 15px;\n text-anchor: middle;\n fill: ${options.vertLineColor} !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ${options.taskTextDarkColor} !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.titleColor || options.textColor};\n font-family: ${options.fontFamily};\n }\n`;\n\nexport default getStyles;\n", "// @ts-ignore: JISON doesn't support types\nimport ganttParser from './parser/gantt.jison';\nimport ganttDb from './ganttDb.js';\nimport ganttRenderer from './ganttRenderer.js';\nimport ganttStyles from './styles.js';\nimport type { DiagramDefinition } from '../../diagram-api/types.js';\n\nexport const diagram: DiagramDefinition = {\n parser: ganttParser,\n db: ganttDb,\n renderer: ganttRenderer,\n styles: ganttStyles,\n};\n", "import type { Info } from '@mermaid-js/parser';\nimport { parse } from '@mermaid-js/parser';\nimport type { ParserDefinition } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\n\nexport const parser: ParserDefinition = {\n parse: async (input: string): Promise => {\n const ast: Info = await parse('info', input);\n log.debug(ast);\n },\n};\n", "{\n \"name\": \"mermaid\",\n \"version\": \"11.12.2\",\n \"description\": \"Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.\",\n \"type\": \"module\",\n \"module\": \"./dist/mermaid.core.mjs\",\n \"types\": \"./dist/mermaid.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/mermaid.d.ts\",\n \"import\": \"./dist/mermaid.core.mjs\",\n \"default\": \"./dist/mermaid.core.mjs\"\n },\n \"./*\": \"./*\"\n },\n \"keywords\": [\n \"diagram\",\n \"markdown\",\n \"flowchart\",\n \"sequence diagram\",\n \"gantt\",\n \"class diagram\",\n \"git graph\",\n \"mindmap\",\n \"packet diagram\",\n \"c4 diagram\",\n \"er diagram\",\n \"pie chart\",\n \"pie diagram\",\n \"quadrant chart\",\n \"requirement diagram\",\n \"graph\"\n ],\n \"scripts\": {\n \"clean\": \"rimraf dist\",\n \"dev\": \"pnpm -w dev\",\n \"docs:code\": \"typedoc src/defaultConfig.ts src/config.ts src/mermaid.ts && prettier --write ./src/docs/config/setup\",\n \"docs:build\": \"rimraf ../../docs && pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts\",\n \"docs:verify\": \"pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts --verify\",\n \"docs:pre:vitepress\": \"pnpm --filter ./src/docs prefetch && rimraf src/vitepress && pnpm docs:code && tsx scripts/docs.cli.mts --vitepress && pnpm --filter ./src/vitepress install --no-frozen-lockfile --ignore-scripts\",\n \"docs:build:vitepress\": \"pnpm docs:pre:vitepress && (cd src/vitepress && pnpm run build) && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing\",\n \"docs:dev\": \"pnpm docs:pre:vitepress && concurrently \\\"pnpm --filter ./src/vitepress dev\\\" \\\"tsx scripts/docs.cli.mts --watch --vitepress\\\"\",\n \"docs:dev:docker\": \"pnpm docs:pre:vitepress && concurrently \\\"pnpm --filter ./src/vitepress dev:docker\\\" \\\"tsx scripts/docs.cli.mts --watch --vitepress\\\"\",\n \"docs:serve\": \"pnpm docs:build:vitepress && vitepress serve src/vitepress\",\n \"docs:spellcheck\": \"cspell \\\"src/docs/**/*.md\\\"\",\n \"docs:release-version\": \"tsx scripts/update-release-version.mts\",\n \"docs:verify-version\": \"tsx scripts/update-release-version.mts --verify\",\n \"types:build-config\": \"tsx scripts/create-types-from-json-schema.mts\",\n \"types:verify-config\": \"tsx scripts/create-types-from-json-schema.mts --verify\",\n \"checkCircle\": \"npx madge --circular ./src\",\n \"prepublishOnly\": \"pnpm docs:verify-version\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/mermaid-js/mermaid\"\n },\n \"author\": \"Knut Sveidqvist\",\n \"license\": \"MIT\",\n \"standard\": {\n \"ignore\": [\n \"**/parser/*.js\",\n \"dist/**/*.js\",\n \"cypress/**/*.js\"\n ],\n \"globals\": [\n \"page\"\n ]\n },\n \"dependencies\": {\n \"@braintree/sanitize-url\": \"^7.1.1\",\n \"@iconify/utils\": \"^3.0.1\",\n \"@mermaid-js/parser\": \"workspace:^\",\n \"@types/d3\": \"^7.4.3\",\n \"cytoscape\": \"^3.29.3\",\n \"cytoscape-cose-bilkent\": \"^4.1.0\",\n \"cytoscape-fcose\": \"^2.2.0\",\n \"d3\": \"^7.9.0\",\n \"d3-sankey\": \"^0.12.3\",\n \"dagre-d3-es\": \"7.0.13\",\n \"dayjs\": \"^1.11.18\",\n \"dompurify\": \"^3.2.5\",\n \"katex\": \"^0.16.22\",\n \"khroma\": \"^2.1.0\",\n \"lodash-es\": \"^4.17.21\",\n \"marked\": \"^16.2.1\",\n \"roughjs\": \"^4.6.6\",\n \"stylis\": \"^4.3.6\",\n \"ts-dedent\": \"^2.2.0\",\n \"uuid\": \"^11.1.0\"\n },\n \"devDependencies\": {\n \"@adobe/jsonschema2md\": \"^8.0.5\",\n \"@iconify/types\": \"^2.0.0\",\n \"@types/cytoscape\": \"^3.21.9\",\n \"@types/cytoscape-fcose\": \"^2.2.4\",\n \"@types/d3-sankey\": \"^0.12.4\",\n \"@types/d3-scale\": \"^4.0.9\",\n \"@types/d3-scale-chromatic\": \"^3.1.0\",\n \"@types/d3-selection\": \"^3.0.11\",\n \"@types/d3-shape\": \"^3.1.7\",\n \"@types/jsdom\": \"^21.1.7\",\n \"@types/katex\": \"^0.16.7\",\n \"@types/lodash-es\": \"^4.17.12\",\n \"@types/micromatch\": \"^4.0.9\",\n \"@types/stylis\": \"^4.2.7\",\n \"@types/uuid\": \"^10.0.0\",\n \"ajv\": \"^8.17.1\",\n \"canvas\": \"^3.1.2\",\n \"chokidar\": \"3.6.0\",\n \"concurrently\": \"^9.1.2\",\n \"csstree-validator\": \"^4.0.1\",\n \"globby\": \"^14.1.0\",\n \"jison\": \"^0.4.18\",\n \"js-base64\": \"^3.7.8\",\n \"jsdom\": \"^26.1.0\",\n \"json-schema-to-typescript\": \"^15.0.4\",\n \"micromatch\": \"^4.0.8\",\n \"path-browserify\": \"^1.0.1\",\n \"prettier\": \"^3.5.3\",\n \"remark\": \"^15.0.1\",\n \"remark-frontmatter\": \"^5.0.0\",\n \"remark-gfm\": \"^4.0.1\",\n \"rimraf\": \"^6.0.1\",\n \"start-server-and-test\": \"^2.0.13\",\n \"type-fest\": \"^4.35.0\",\n \"typedoc\": \"^0.28.12\",\n \"typedoc-plugin-markdown\": \"^4.8.1\",\n \"typescript\": \"~5.7.3\",\n \"unist-util-flatmap\": \"^1.0.0\",\n \"unist-util-visit\": \"^5.0.0\",\n \"vitepress\": \"^1.6.4\",\n \"vitepress-plugin-search\": \"1.0.4-alpha.22\"\n },\n \"files\": [\n \"dist/\",\n \"README.md\"\n ],\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n", "import type { InfoFields, InfoDB } from './infoTypes.js';\nimport packageJson from '../../../package.json' assert { type: 'json' };\n\nexport const DEFAULT_INFO_DB: InfoFields = {\n version: packageJson.version + (includeLargeFeatures ? '' : '-tiny'),\n} as const;\n\nexport const getVersion = (): string => DEFAULT_INFO_DB.version;\n\nexport const db: InfoDB = {\n getVersion,\n};\n", "import { select } from 'd3';\nimport { getConfig } from '../diagram-api/diagramAPI.js';\nimport type { HTML, SVG } from '../diagram-api/types.js';\n\n/**\n * Selects the SVG element using {@link id}.\n *\n * @param id - The diagram ID.\n * @returns The selected {@link SVG} element using {@link id}.\n */\nexport const selectSvgElement = (id: string): SVG => {\n const { securityLevel } = getConfig();\n // handle root and document for when rendering in sandbox mode\n let root: HTML = select('body');\n if (securityLevel === 'sandbox') {\n const sandboxElement: HTML = select(`#i${id}`);\n const doc: Document = sandboxElement.node()?.contentDocument ?? document;\n root = select(doc.body as HTMLIFrameElement);\n }\n const svg: SVG = root.select(`#${id}`);\n return svg;\n};\n", "import type { DrawDefinition, SVG, SVGGroup } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport { selectSvgElement } from '../../rendering-util/selectSvgElement.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\n\n/**\n * Draws an info picture in the tag with id: id based on the graph definition in text.\n *\n * @param text - The text of the diagram.\n * @param id - The id of the diagram which will be used as a DOM element id.\n * @param version - MermaidJS version.\n */\nconst draw: DrawDefinition = (text, id, version) => {\n log.debug('rendering info diagram\\n' + text);\n\n const svg: SVG = selectSvgElement(id);\n configureSvgSize(svg, 100, 400, true);\n\n const group: SVGGroup = svg.append('g');\n group\n .append('text')\n .attr('x', 100)\n .attr('y', 40)\n .attr('class', 'version')\n .attr('font-size', 32)\n .style('text-anchor', 'middle')\n .text(`v${version}`);\n};\n\nexport const renderer = { draw };\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\nimport { parser } from './infoParser.js';\nimport { db } from './infoDb.js';\nimport { renderer } from './infoRenderer.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n db,\n renderer,\n};\n", "import { log } from '../../logger.js';\nimport {\n setAccTitle,\n getAccTitle,\n setDiagramTitle,\n getDiagramTitle,\n getAccDescription,\n setAccDescription,\n clear as commonClear,\n} from '../common/commonDb.js';\nimport type { PieFields, PieDB, Sections, D3Section } from './pieTypes.js';\nimport type { RequiredDeep } from 'type-fest';\nimport type { PieDiagramConfig } from '../../config.type.js';\nimport DEFAULT_CONFIG from '../../defaultConfig.js';\n\nexport const DEFAULT_PIE_CONFIG: Required = DEFAULT_CONFIG.pie;\n\nexport const DEFAULT_PIE_DB: RequiredDeep = {\n sections: new Map(),\n showData: false,\n config: DEFAULT_PIE_CONFIG,\n} as const;\n\nlet sections: Sections = DEFAULT_PIE_DB.sections;\nlet showData: boolean = DEFAULT_PIE_DB.showData;\nconst config: Required = structuredClone(DEFAULT_PIE_CONFIG);\n\nconst getConfig = (): Required => structuredClone(config);\n\nconst clear = (): void => {\n sections = new Map();\n showData = DEFAULT_PIE_DB.showData;\n commonClear();\n};\n\nconst addSection = ({ label, value }: D3Section): void => {\n if (value < 0) {\n throw new Error(\n `\"${label}\" has invalid value: ${value}. Negative values are not allowed in pie charts. All slice values must be >= 0.`\n );\n }\n if (!sections.has(label)) {\n sections.set(label, value);\n log.debug(`added new section: ${label}, with value: ${value}`);\n }\n};\n\nconst getSections = (): Sections => sections;\n\nconst setShowData = (toggle: boolean): void => {\n showData = toggle;\n};\n\nconst getShowData = (): boolean => showData;\n\nexport const db: PieDB = {\n getConfig,\n\n clear,\n setDiagramTitle,\n getDiagramTitle,\n setAccTitle,\n getAccTitle,\n setAccDescription,\n getAccDescription,\n\n addSection,\n getSections,\n setShowData,\n getShowData,\n};\n", "import type { Pie } from '@mermaid-js/parser';\nimport { parse } from '@mermaid-js/parser';\nimport { log } from '../../logger.js';\nimport type { ParserDefinition } from '../../diagram-api/types.js';\nimport { populateCommonDb } from '../common/populateCommonDb.js';\nimport type { PieDB } from './pieTypes.js';\nimport { db } from './pieDb.js';\n\nconst populateDb = (ast: Pie, db: PieDB) => {\n populateCommonDb(ast, db);\n db.setShowData(ast.showData);\n ast.sections.map(db.addSection);\n};\n\nexport const parser: ParserDefinition = {\n parse: async (input: string): Promise => {\n const ast: Pie = await parse('pie', input);\n log.debug(ast);\n populateDb(ast, db);\n },\n};\n", "import type { DiagramStylesProvider } from '../../diagram-api/types.js';\nimport type { PieStyleOptions } from './pieTypes.js';\n\nconst getStyles: DiagramStylesProvider = (options: PieStyleOptions) =>\n `\n .pieCircle{\n stroke: ${options.pieStrokeColor};\n stroke-width : ${options.pieStrokeWidth};\n opacity : ${options.pieOpacity};\n }\n .pieOuterCircle{\n stroke: ${options.pieOuterStrokeColor};\n stroke-width: ${options.pieOuterStrokeWidth};\n fill: none;\n }\n .pieTitleText {\n text-anchor: middle;\n font-size: ${options.pieTitleTextSize};\n fill: ${options.pieTitleTextColor};\n font-family: ${options.fontFamily};\n }\n .slice {\n font-family: ${options.fontFamily};\n fill: ${options.pieSectionTextColor};\n font-size:${options.pieSectionTextSize};\n // fill: white;\n }\n .legend text {\n fill: ${options.pieLegendTextColor};\n font-family: ${options.fontFamily};\n font-size: ${options.pieLegendTextSize};\n }\n`;\n\nexport default getStyles;\n", "import type d3 from 'd3';\nimport { arc, pie as d3pie, scaleOrdinal } from 'd3';\nimport type { MermaidConfig, PieDiagramConfig } from '../../config.type.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport type { DrawDefinition, SVG, SVGGroup } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport { selectSvgElement } from '../../rendering-util/selectSvgElement.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\nimport { cleanAndMerge, parseFontSize } from '../../utils.js';\nimport type { D3Section, PieDB, Sections } from './pieTypes.js';\n\nconst createPieArcs = (sections: Sections): d3.PieArcDatum[] => {\n const sum = [...sections.values()].reduce((acc, val) => acc + val, 0);\n\n const pieData: D3Section[] = [...sections.entries()]\n .map(([label, value]) => ({ label, value }))\n .filter((d) => (d.value / sum) * 100 >= 1) // Remove values < 1%\n .sort((a, b) => b.value - a.value);\n\n const pie: d3.Pie = d3pie().value((d) => d.value);\n return pie(pieData);\n};\n\n/**\n * Draws a Pie Chart with the data given in text.\n *\n * @param text - pie chart code\n * @param id - diagram id\n * @param _version - MermaidJS version from package.json.\n * @param diagObj - A standard diagram containing the DB and the text and type etc of the diagram.\n */\nexport const draw: DrawDefinition = (text, id, _version, diagObj) => {\n log.debug('rendering pie chart\\n' + text);\n const db = diagObj.db as PieDB;\n const globalConfig: MermaidConfig = getConfig();\n const pieConfig: Required = cleanAndMerge(db.getConfig(), globalConfig.pie);\n const MARGIN = 40;\n const LEGEND_RECT_SIZE = 18;\n const LEGEND_SPACING = 4;\n const height = 450;\n const pieWidth: number = height;\n const svg: SVG = selectSvgElement(id);\n const group: SVGGroup = svg.append('g');\n group.attr('transform', 'translate(' + pieWidth / 2 + ',' + height / 2 + ')');\n\n const { themeVariables } = globalConfig;\n let [outerStrokeWidth] = parseFontSize(themeVariables.pieOuterStrokeWidth);\n outerStrokeWidth ??= 2;\n\n const textPosition: number = pieConfig.textPosition;\n const radius: number = Math.min(pieWidth, height) / 2 - MARGIN;\n // Shape helper to build arcs:\n const arcGenerator: d3.Arc> = arc>()\n .innerRadius(0)\n .outerRadius(radius);\n const labelArcGenerator: d3.Arc> = arc<\n d3.PieArcDatum\n >()\n .innerRadius(radius * textPosition)\n .outerRadius(radius * textPosition);\n\n group\n .append('circle')\n .attr('cx', 0)\n .attr('cy', 0)\n .attr('r', radius + outerStrokeWidth / 2)\n .attr('class', 'pieOuterCircle');\n\n const sections: Sections = db.getSections();\n const arcs: d3.PieArcDatum[] = createPieArcs(sections);\n\n const myGeneratedColors = [\n themeVariables.pie1,\n themeVariables.pie2,\n themeVariables.pie3,\n themeVariables.pie4,\n themeVariables.pie5,\n themeVariables.pie6,\n themeVariables.pie7,\n themeVariables.pie8,\n themeVariables.pie9,\n themeVariables.pie10,\n themeVariables.pie11,\n themeVariables.pie12,\n ];\n let sum = 0;\n sections.forEach((section) => {\n sum += section;\n });\n\n // Filter out arcs that would render as 0%\n const filteredArcs = arcs.filter((datum) => ((datum.data.value / sum) * 100).toFixed(0) !== '0');\n\n // Set the color scale\n const color: d3.ScaleOrdinal = scaleOrdinal(myGeneratedColors);\n\n // Build the pie chart: each part of the pie is a path that we build using the arc function.\n group\n .selectAll('mySlices')\n .data(filteredArcs)\n .enter()\n .append('path')\n .attr('d', arcGenerator)\n .attr('fill', (datum: d3.PieArcDatum) => {\n return color(datum.data.label);\n })\n .attr('class', 'pieCircle');\n\n // Now add the percentage.\n // Use the centroid method to get the best coordinates.\n group\n .selectAll('mySlices')\n .data(filteredArcs)\n .enter()\n .append('text')\n .text((datum: d3.PieArcDatum): string => {\n return ((datum.data.value / sum) * 100).toFixed(0) + '%';\n })\n .attr('transform', (datum: d3.PieArcDatum): string => {\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n return 'translate(' + labelArcGenerator.centroid(datum) + ')';\n })\n .style('text-anchor', 'middle')\n .attr('class', 'slice');\n\n group\n .append('text')\n .text(db.getDiagramTitle())\n .attr('x', 0)\n .attr('y', -(height - 50) / 2)\n .attr('class', 'pieTitleText');\n\n // Add the legends/annotations for each section\n const allSectionData: D3Section[] = [...sections.entries()].map(([label, value]) => ({\n label,\n value,\n }));\n\n const legend = group\n .selectAll('.legend')\n .data(allSectionData)\n .enter()\n .append('g')\n .attr('class', 'legend')\n .attr('transform', (_datum, index: number): string => {\n const height = LEGEND_RECT_SIZE + LEGEND_SPACING;\n const offset = (height * allSectionData.length) / 2;\n const horizontal = 12 * LEGEND_RECT_SIZE;\n const vertical = index * height - offset;\n return 'translate(' + horizontal + ',' + vertical + ')';\n });\n\n legend\n .append('rect')\n .attr('width', LEGEND_RECT_SIZE)\n .attr('height', LEGEND_RECT_SIZE)\n .style('fill', (d) => color(d.label))\n .style('stroke', (d) => color(d.label));\n\n legend\n .append('text')\n .attr('x', LEGEND_RECT_SIZE + LEGEND_SPACING)\n .attr('y', LEGEND_RECT_SIZE - LEGEND_SPACING)\n .text((d) => {\n if (db.getShowData()) {\n return `${d.label} [${d.value}]`;\n }\n return d.label;\n });\n\n const longestTextWidth = Math.max(\n ...legend\n .selectAll('text')\n .nodes()\n .map((node) => (node as Element)?.getBoundingClientRect().width ?? 0)\n );\n\n const totalWidth = pieWidth + MARGIN + LEGEND_RECT_SIZE + LEGEND_SPACING + longestTextWidth;\n\n // Set viewBox\n svg.attr('viewBox', `0 0 ${totalWidth} ${height}`);\n configureSvgSize(svg, height, totalWidth, pieConfig.useMaxWidth);\n};\n\nexport const renderer = { draw };\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\nimport { parser } from './pieParser.js';\nimport { db } from './pieDb.js';\nimport styles from './pieStyles.js';\nimport { renderer } from './pieRenderer.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n db,\n renderer,\n styles,\n};\n", "/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,3],$V1=[1,4],$V2=[1,5],$V3=[1,6],$V4=[1,7],$V5=[1,4,5,10,12,13,14,18,25,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],$V6=[1,4,5,10,12,13,14,18,25,28,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],$V7=[55,56,57],$V8=[2,36],$V9=[1,37],$Va=[1,36],$Vb=[1,38],$Vc=[1,35],$Vd=[1,43],$Ve=[1,41],$Vf=[1,14],$Vg=[1,23],$Vh=[1,18],$Vi=[1,19],$Vj=[1,20],$Vk=[1,21],$Vl=[1,22],$Vm=[1,24],$Vn=[1,25],$Vo=[1,26],$Vp=[1,27],$Vq=[1,28],$Vr=[1,29],$Vs=[1,32],$Vt=[1,33],$Vu=[1,34],$Vv=[1,39],$Vw=[1,40],$Vx=[1,42],$Vy=[1,44],$Vz=[1,62],$VA=[1,61],$VB=[4,5,8,10,12,13,14,18,44,47,49,55,56,57,63,64,65,66,67],$VC=[1,65],$VD=[1,66],$VE=[1,67],$VF=[1,68],$VG=[1,69],$VH=[1,70],$VI=[1,71],$VJ=[1,72],$VK=[1,73],$VL=[1,74],$VM=[1,75],$VN=[1,76],$VO=[4,5,6,7,8,9,10,11,12,13,14,15,18],$VP=[1,90],$VQ=[1,91],$VR=[1,92],$VS=[1,99],$VT=[1,93],$VU=[1,96],$VV=[1,94],$VW=[1,95],$VX=[1,97],$VY=[1,98],$VZ=[1,102],$V_=[10,55,56,57],$V$=[4,5,6,8,10,11,13,17,18,19,20,55,56,57];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"idStringToken\":3,\"ALPHA\":4,\"NUM\":5,\"NODE_STRING\":6,\"DOWN\":7,\"MINUS\":8,\"DEFAULT\":9,\"COMMA\":10,\"COLON\":11,\"AMP\":12,\"BRKT\":13,\"MULT\":14,\"UNICODE_TEXT\":15,\"styleComponent\":16,\"UNIT\":17,\"SPACE\":18,\"STYLE\":19,\"PCT\":20,\"idString\":21,\"style\":22,\"stylesOpt\":23,\"classDefStatement\":24,\"CLASSDEF\":25,\"start\":26,\"eol\":27,\"QUADRANT\":28,\"document\":29,\"line\":30,\"statement\":31,\"axisDetails\":32,\"quadrantDetails\":33,\"points\":34,\"title\":35,\"title_value\":36,\"acc_title\":37,\"acc_title_value\":38,\"acc_descr\":39,\"acc_descr_value\":40,\"acc_descr_multiline_value\":41,\"section\":42,\"text\":43,\"point_start\":44,\"point_x\":45,\"point_y\":46,\"class_name\":47,\"X-AXIS\":48,\"AXIS-TEXT-DELIMITER\":49,\"Y-AXIS\":50,\"QUADRANT_1\":51,\"QUADRANT_2\":52,\"QUADRANT_3\":53,\"QUADRANT_4\":54,\"NEWLINE\":55,\"SEMI\":56,\"EOF\":57,\"alphaNumToken\":58,\"textNoTagsToken\":59,\"STR\":60,\"MD_STR\":61,\"alphaNum\":62,\"PUNCTUATION\":63,\"PLUS\":64,\"EQUALS\":65,\"DOT\":66,\"UNDERSCORE\":67,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"ALPHA\",5:\"NUM\",6:\"NODE_STRING\",7:\"DOWN\",8:\"MINUS\",9:\"DEFAULT\",10:\"COMMA\",11:\"COLON\",12:\"AMP\",13:\"BRKT\",14:\"MULT\",15:\"UNICODE_TEXT\",17:\"UNIT\",18:\"SPACE\",19:\"STYLE\",20:\"PCT\",25:\"CLASSDEF\",28:\"QUADRANT\",35:\"title\",36:\"title_value\",37:\"acc_title\",38:\"acc_title_value\",39:\"acc_descr\",40:\"acc_descr_value\",41:\"acc_descr_multiline_value\",42:\"section\",44:\"point_start\",45:\"point_x\",46:\"point_y\",47:\"class_name\",48:\"X-AXIS\",49:\"AXIS-TEXT-DELIMITER\",50:\"Y-AXIS\",51:\"QUADRANT_1\",52:\"QUADRANT_2\",53:\"QUADRANT_3\",54:\"QUADRANT_4\",55:\"NEWLINE\",56:\"SEMI\",57:\"EOF\",60:\"STR\",61:\"MD_STR\",63:\"PUNCTUATION\",64:\"PLUS\",65:\"EQUALS\",66:\"DOT\",67:\"UNDERSCORE\"},\nproductions_: [0,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[21,1],[21,2],[22,1],[22,2],[23,1],[23,3],[24,5],[26,2],[26,2],[26,2],[29,0],[29,2],[30,2],[31,0],[31,1],[31,2],[31,1],[31,1],[31,1],[31,2],[31,2],[31,2],[31,1],[31,1],[34,4],[34,5],[34,5],[34,6],[32,4],[32,3],[32,2],[32,4],[32,3],[32,2],[33,2],[33,2],[33,2],[33,2],[27,1],[27,1],[27,1],[43,1],[43,2],[43,1],[43,1],[62,1],[62,2],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[59,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 23:\nthis.$=$$[$0]\nbreak;\ncase 24:\nthis.$=$$[$0-1]+''+$$[$0]\nbreak;\ncase 26:\nthis.$ = $$[$0-1] + $$[$0];\nbreak;\ncase 27:\nthis.$ = [$$[$0].trim()]\nbreak;\ncase 28:\n$$[$0-2].push($$[$0].trim());this.$ = $$[$0-2];\nbreak;\ncase 29:\nthis.$ = $$[$0-4];yy.addClass($$[$0-2],$$[$0]);\nbreak;\ncase 37:\nthis.$=[];\nbreak;\ncase 42:\n this.$=$$[$0].trim();yy.setDiagramTitle(this.$); \nbreak;\ncase 43:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 44: case 45:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 46:\nyy.addSection($$[$0].substr(8));this.$=$$[$0].substr(8);\nbreak;\ncase 47:\nyy.addPoint($$[$0-3], \"\", $$[$0-1], $$[$0], []);\nbreak;\ncase 48:\nyy.addPoint($$[$0-4], $$[$0-3], $$[$0-1], $$[$0], []);\nbreak;\ncase 49:\nyy.addPoint($$[$0-4], \"\", $$[$0-2], $$[$0-1], $$[$0]);\nbreak;\ncase 50:\nyy.addPoint($$[$0-5], $$[$0-4], $$[$0-2], $$[$0-1], $$[$0]);\nbreak;\ncase 51:\nyy.setXAxisLeftText($$[$0-2]); yy.setXAxisRightText($$[$0]);\nbreak;\ncase 52:\n$$[$0-1].text += \" \u27F6 \"; yy.setXAxisLeftText($$[$0-1]);\nbreak;\ncase 53:\nyy.setXAxisLeftText($$[$0]);\nbreak;\ncase 54:\nyy.setYAxisBottomText($$[$0-2]); yy.setYAxisTopText($$[$0]);\nbreak;\ncase 55:\n$$[$0-1].text += \" \u27F6 \"; yy.setYAxisBottomText($$[$0-1]);\nbreak;\ncase 56:\nyy.setYAxisBottomText($$[$0]);\nbreak;\ncase 57:\nyy.setQuadrant1Text($$[$0])\nbreak;\ncase 58:\nyy.setQuadrant2Text($$[$0])\nbreak;\ncase 59:\nyy.setQuadrant3Text($$[$0])\nbreak;\ncase 60:\nyy.setQuadrant4Text($$[$0])\nbreak;\ncase 64:\n this.$={text:$$[$0], type: 'text'};\nbreak;\ncase 65:\n this.$={text:$$[$0-1].text+''+$$[$0], type: $$[$0-1].type};\nbreak;\ncase 66:\n this.$={text: $$[$0], type: 'text'};\nbreak;\ncase 67:\n this.$={text: $$[$0], type: 'markdown'};\nbreak;\ncase 68:\nthis.$=$$[$0];\nbreak;\ncase 69:\nthis.$=$$[$0-1]+''+$$[$0];\nbreak;\n}\n},\ntable: [{18:$V0,26:1,27:2,28:$V1,55:$V2,56:$V3,57:$V4},{1:[3]},{18:$V0,26:8,27:2,28:$V1,55:$V2,56:$V3,57:$V4},{18:$V0,26:9,27:2,28:$V1,55:$V2,56:$V3,57:$V4},o($V5,[2,33],{29:10}),o($V6,[2,61]),o($V6,[2,62]),o($V6,[2,63]),{1:[2,30]},{1:[2,31]},o($V7,$V8,{30:11,31:12,24:13,32:15,33:16,34:17,43:30,58:31,1:[2,32],4:$V9,5:$Va,10:$Vb,12:$Vc,13:$Vd,14:$Ve,18:$Vf,25:$Vg,35:$Vh,37:$Vi,39:$Vj,41:$Vk,42:$Vl,48:$Vm,50:$Vn,51:$Vo,52:$Vp,53:$Vq,54:$Vr,60:$Vs,61:$Vt,63:$Vu,64:$Vv,65:$Vw,66:$Vx,67:$Vy}),o($V5,[2,34]),{27:45,55:$V2,56:$V3,57:$V4},o($V7,[2,37]),o($V7,$V8,{24:13,32:15,33:16,34:17,43:30,58:31,31:46,4:$V9,5:$Va,10:$Vb,12:$Vc,13:$Vd,14:$Ve,18:$Vf,25:$Vg,35:$Vh,37:$Vi,39:$Vj,41:$Vk,42:$Vl,48:$Vm,50:$Vn,51:$Vo,52:$Vp,53:$Vq,54:$Vr,60:$Vs,61:$Vt,63:$Vu,64:$Vv,65:$Vw,66:$Vx,67:$Vy}),o($V7,[2,39]),o($V7,[2,40]),o($V7,[2,41]),{36:[1,47]},{38:[1,48]},{40:[1,49]},o($V7,[2,45]),o($V7,[2,46]),{18:[1,50]},{4:$V9,5:$Va,10:$Vb,12:$Vc,13:$Vd,14:$Ve,43:51,58:31,60:$Vs,61:$Vt,63:$Vu,64:$Vv,65:$Vw,66:$Vx,67:$Vy},{4:$V9,5:$Va,10:$Vb,12:$Vc,13:$Vd,14:$Ve,43:52,58:31,60:$Vs,61:$Vt,63:$Vu,64:$Vv,65:$Vw,66:$Vx,67:$Vy},{4:$V9,5:$Va,10:$Vb,12:$Vc,13:$Vd,14:$Ve,43:53,58:31,60:$Vs,61:$Vt,63:$Vu,64:$Vv,65:$Vw,66:$Vx,67:$Vy},{4:$V9,5:$Va,10:$Vb,12:$Vc,13:$Vd,14:$Ve,43:54,58:31,60:$Vs,61:$Vt,63:$Vu,64:$Vv,65:$Vw,66:$Vx,67:$Vy},{4:$V9,5:$Va,10:$Vb,12:$Vc,13:$Vd,14:$Ve,43:55,58:31,60:$Vs,61:$Vt,63:$Vu,64:$Vv,65:$Vw,66:$Vx,67:$Vy},{4:$V9,5:$Va,10:$Vb,12:$Vc,13:$Vd,14:$Ve,43:56,58:31,60:$Vs,61:$Vt,63:$Vu,64:$Vv,65:$Vw,66:$Vx,67:$Vy},{4:$V9,5:$Va,8:$Vz,10:$Vb,12:$Vc,13:$Vd,14:$Ve,18:$VA,44:[1,57],47:[1,58],58:60,59:59,63:$Vu,64:$Vv,65:$Vw,66:$Vx,67:$Vy},o($VB,[2,64]),o($VB,[2,66]),o($VB,[2,67]),o($VB,[2,70]),o($VB,[2,71]),o($VB,[2,72]),o($VB,[2,73]),o($VB,[2,74]),o($VB,[2,75]),o($VB,[2,76]),o($VB,[2,77]),o($VB,[2,78]),o($VB,[2,79]),o($VB,[2,80]),o($V5,[2,35]),o($V7,[2,38]),o($V7,[2,42]),o($V7,[2,43]),o($V7,[2,44]),{3:64,4:$VC,5:$VD,6:$VE,7:$VF,8:$VG,9:$VH,10:$VI,11:$VJ,12:$VK,13:$VL,14:$VM,15:$VN,21:63},o($V7,[2,53],{59:59,58:60,4:$V9,5:$Va,8:$Vz,10:$Vb,12:$Vc,13:$Vd,14:$Ve,18:$VA,49:[1,77],63:$Vu,64:$Vv,65:$Vw,66:$Vx,67:$Vy}),o($V7,[2,56],{59:59,58:60,4:$V9,5:$Va,8:$Vz,10:$Vb,12:$Vc,13:$Vd,14:$Ve,18:$VA,49:[1,78],63:$Vu,64:$Vv,65:$Vw,66:$Vx,67:$Vy}),o($V7,[2,57],{59:59,58:60,4:$V9,5:$Va,8:$Vz,10:$Vb,12:$Vc,13:$Vd,14:$Ve,18:$VA,63:$Vu,64:$Vv,65:$Vw,66:$Vx,67:$Vy}),o($V7,[2,58],{59:59,58:60,4:$V9,5:$Va,8:$Vz,10:$Vb,12:$Vc,13:$Vd,14:$Ve,18:$VA,63:$Vu,64:$Vv,65:$Vw,66:$Vx,67:$Vy}),o($V7,[2,59],{59:59,58:60,4:$V9,5:$Va,8:$Vz,10:$Vb,12:$Vc,13:$Vd,14:$Ve,18:$VA,63:$Vu,64:$Vv,65:$Vw,66:$Vx,67:$Vy}),o($V7,[2,60],{59:59,58:60,4:$V9,5:$Va,8:$Vz,10:$Vb,12:$Vc,13:$Vd,14:$Ve,18:$VA,63:$Vu,64:$Vv,65:$Vw,66:$Vx,67:$Vy}),{45:[1,79]},{44:[1,80]},o($VB,[2,65]),o($VB,[2,81]),o($VB,[2,82]),o($VB,[2,83]),{3:82,4:$VC,5:$VD,6:$VE,7:$VF,8:$VG,9:$VH,10:$VI,11:$VJ,12:$VK,13:$VL,14:$VM,15:$VN,18:[1,81]},o($VO,[2,23]),o($VO,[2,1]),o($VO,[2,2]),o($VO,[2,3]),o($VO,[2,4]),o($VO,[2,5]),o($VO,[2,6]),o($VO,[2,7]),o($VO,[2,8]),o($VO,[2,9]),o($VO,[2,10]),o($VO,[2,11]),o($VO,[2,12]),o($V7,[2,52],{58:31,43:83,4:$V9,5:$Va,10:$Vb,12:$Vc,13:$Vd,14:$Ve,60:$Vs,61:$Vt,63:$Vu,64:$Vv,65:$Vw,66:$Vx,67:$Vy}),o($V7,[2,55],{58:31,43:84,4:$V9,5:$Va,10:$Vb,12:$Vc,13:$Vd,14:$Ve,60:$Vs,61:$Vt,63:$Vu,64:$Vv,65:$Vw,66:$Vx,67:$Vy}),{46:[1,85]},{45:[1,86]},{4:$VP,5:$VQ,6:$VR,8:$VS,11:$VT,13:$VU,16:89,17:$VV,18:$VW,19:$VX,20:$VY,22:88,23:87},o($VO,[2,24]),o($V7,[2,51],{59:59,58:60,4:$V9,5:$Va,8:$Vz,10:$Vb,12:$Vc,13:$Vd,14:$Ve,18:$VA,63:$Vu,64:$Vv,65:$Vw,66:$Vx,67:$Vy}),o($V7,[2,54],{59:59,58:60,4:$V9,5:$Va,8:$Vz,10:$Vb,12:$Vc,13:$Vd,14:$Ve,18:$VA,63:$Vu,64:$Vv,65:$Vw,66:$Vx,67:$Vy}),o($V7,[2,47],{22:88,16:89,23:100,4:$VP,5:$VQ,6:$VR,8:$VS,11:$VT,13:$VU,17:$VV,18:$VW,19:$VX,20:$VY}),{46:[1,101]},o($V7,[2,29],{10:$VZ}),o($V_,[2,27],{16:103,4:$VP,5:$VQ,6:$VR,8:$VS,11:$VT,13:$VU,17:$VV,18:$VW,19:$VX,20:$VY}),o($V$,[2,25]),o($V$,[2,13]),o($V$,[2,14]),o($V$,[2,15]),o($V$,[2,16]),o($V$,[2,17]),o($V$,[2,18]),o($V$,[2,19]),o($V$,[2,20]),o($V$,[2,21]),o($V$,[2,22]),o($V7,[2,49],{10:$VZ}),o($V7,[2,48],{22:88,16:89,23:104,4:$VP,5:$VQ,6:$VR,8:$VS,11:$VT,13:$VU,17:$VV,18:$VW,19:$VX,20:$VY}),{4:$VP,5:$VQ,6:$VR,8:$VS,11:$VT,13:$VU,16:89,17:$VV,18:$VW,19:$VX,20:$VY,22:105},o($V$,[2,26]),o($V7,[2,50],{10:$VZ}),o($V_,[2,28],{16:103,4:$VP,5:$VQ,6:$VR,8:$VS,11:$VT,13:$VU,17:$VV,18:$VW,19:$VX,20:$VY})],\ndefaultActions: {8:[2,30],9:[2,31]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// 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.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n 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(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* skip comments */\nbreak;\ncase 1:/* skip comments */\nbreak;\ncase 2:return 55;\nbreak;\ncase 3:/* do nothing */\nbreak;\ncase 4: this.begin(\"title\");return 35; \nbreak;\ncase 5: this.popState(); return \"title_value\"; \nbreak;\ncase 6: this.begin(\"acc_title\");return 37; \nbreak;\ncase 7: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 8: this.begin(\"acc_descr\");return 39; \nbreak;\ncase 9: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 10: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 11: this.popState(); \nbreak;\ncase 12:return \"acc_descr_multiline_value\";\nbreak;\ncase 13:return 48;\nbreak;\ncase 14:return 50;\nbreak;\ncase 15:return 49\nbreak;\ncase 16:return 51;\nbreak;\ncase 17:return 52;\nbreak;\ncase 18:return 53;\nbreak;\ncase 19:return 54;\nbreak;\ncase 20:return 25;\nbreak;\ncase 21: this.begin(\"md_string\");\nbreak;\ncase 22: return \"MD_STR\";\nbreak;\ncase 23: this.popState();\nbreak;\ncase 24:this.begin(\"string\");\nbreak;\ncase 25:this.popState();\nbreak;\ncase 26:return \"STR\";\nbreak;\ncase 27:this.begin('class_name')\nbreak;\ncase 28:this.popState(); return 47;\nbreak;\ncase 29:this.begin(\"point_start\"); return 44;\nbreak;\ncase 30:this.begin('point_x'); return 45;\nbreak;\ncase 31:this.popState();\nbreak;\ncase 32:this.popState(); this.begin('point_y');\nbreak;\ncase 33:this.popState(); return 46;\nbreak;\ncase 34:return 28;\nbreak;\ncase 35:return 4;\nbreak;\ncase 36:return 11;\nbreak;\ncase 37:return 64;\nbreak;\ncase 38:return 10;\nbreak;\ncase 39:return 65;\nbreak;\ncase 40:return 65;\nbreak;\ncase 41:return 14;\nbreak;\ncase 42:return 13;\nbreak;\ncase 43:return 67;\nbreak;\ncase 44:return 66;\nbreak;\ncase 45:return 12;\nbreak;\ncase 46:return 8;\nbreak;\ncase 47:return 5;\nbreak;\ncase 48:return 18;\nbreak;\ncase 49:return 56;\nbreak;\ncase 50:return 63;\nbreak;\ncase 51:return 57;\nbreak;\n}\n},\nrules: [/^(?:%%(?!\\{)[^\\n]*)/i,/^(?:[^\\}]%%[^\\n]*)/i,/^(?:[\\n\\r]+)/i,/^(?:%%[^\\n]*)/i,/^(?:title\\b)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accTitle\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*\\{\\s*)/i,/^(?:[\\}])/i,/^(?:[^\\}]*)/i,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:classDef\\b)/i,/^(?:[\"][`])/i,/^(?:[^`\"]+)/i,/^(?:[`][\"])/i,/^(?:[\"])/i,/^(?:[\"])/i,/^(?:[^\"]*)/i,/^(?::::)/i,/^(?:^\\w+)/i,/^(?:\\s*:\\s*\\[\\s*)/i,/^(?:(1)|(0(.\\d+)?))/i,/^(?:\\s*\\] *)/i,/^(?:\\s*,\\s*)/i,/^(?:(1)|(0(.\\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\\*)/i,/^(?:#)/i,/^(?:[\\_])/i,/^(?:\\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\\s)/i,/^(?:;)/i,/^(?:[!\"#$%&'*+,-.`?\\\\_/])/i,/^(?:$)/i],\nconditions: {\"class_name\":{\"rules\":[28],\"inclusive\":false},\"point_y\":{\"rules\":[33],\"inclusive\":false},\"point_x\":{\"rules\":[32],\"inclusive\":false},\"point_start\":{\"rules\":[30,31],\"inclusive\":false},\"acc_descr_multiline\":{\"rules\":[11,12],\"inclusive\":false},\"acc_descr\":{\"rules\":[9],\"inclusive\":false},\"acc_title\":{\"rules\":[7],\"inclusive\":false},\"title\":{\"rules\":[5],\"inclusive\":false},\"md_string\":{\"rules\":[22,23],\"inclusive\":false},\"string\":{\"rules\":[25,26],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,21,24,27,29,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})(); \n\tparser.parser = parser;\n\texport { parser };\n\texport default parser;\n\t", "import { scaleLinear } from 'd3';\nimport type { BaseDiagramConfig, QuadrantChartConfig } from '../../config.type.js';\nimport defaultConfig from '../../defaultConfig.js';\nimport { log } from '../../logger.js';\nimport { getThemeVariables } from '../../themes/theme-default.js';\nimport type { Point } from '../../types.js';\n\nconst defaultThemeVariables = getThemeVariables();\n\nexport type TextVerticalPos = 'left' | 'center' | 'right';\nexport type TextHorizontalPos = 'top' | 'middle' | 'bottom';\n\nexport interface StylesObject {\n className?: string;\n radius?: number;\n color?: string;\n strokeColor?: string;\n strokeWidth?: string;\n}\n\nexport interface QuadrantPointInputType extends Point, StylesObject {\n text: string;\n}\n\nexport interface QuadrantTextType extends Point {\n text: string;\n fill: string;\n verticalPos: TextVerticalPos;\n horizontalPos: TextHorizontalPos;\n fontSize: number;\n rotation: number;\n}\n\nexport interface QuadrantPointType\n extends Point,\n Pick {\n fill: string;\n radius: number;\n text: QuadrantTextType;\n}\n\nexport interface QuadrantQuadrantsType extends Point {\n text: QuadrantTextType;\n width: number;\n height: number;\n fill: string;\n}\n\nexport interface QuadrantLineType {\n strokeWidth: number;\n strokeFill: string;\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n}\n\nexport interface QuadrantBuildType {\n points: QuadrantPointType[];\n quadrants: QuadrantQuadrantsType[];\n axisLabels: QuadrantTextType[];\n title?: QuadrantTextType;\n borderLines?: QuadrantLineType[];\n}\n\nexport interface QuadrantBuilderData {\n titleText: string;\n quadrant1Text: string;\n quadrant2Text: string;\n quadrant3Text: string;\n quadrant4Text: string;\n xAxisLeftText: string;\n xAxisRightText: string;\n yAxisBottomText: string;\n yAxisTopText: string;\n points: QuadrantPointInputType[];\n}\n\nexport interface QuadrantBuilderConfig\n extends Required> {\n showXAxis: boolean;\n showYAxis: boolean;\n showTitle: boolean;\n}\n\nexport interface QuadrantBuilderThemeConfig {\n quadrantTitleFill: string;\n quadrant1Fill: string;\n quadrant2Fill: string;\n quadrant3Fill: string;\n quadrant4Fill: string;\n quadrant1TextFill: string;\n quadrant2TextFill: string;\n quadrant3TextFill: string;\n quadrant4TextFill: string;\n quadrantPointFill: string;\n quadrantPointTextFill: string;\n quadrantXAxisTextFill: string;\n quadrantYAxisTextFill: string;\n quadrantInternalBorderStrokeFill: string;\n quadrantExternalBorderStrokeFill: string;\n}\n\ninterface CalculateSpaceData {\n xAxisSpace: {\n top: number;\n bottom: number;\n };\n yAxisSpace: {\n left: number;\n right: number;\n };\n titleSpace: {\n top: number;\n };\n quadrantSpace: {\n quadrantLeft: number;\n quadrantTop: number;\n quadrantWidth: number;\n quadrantHalfWidth: number;\n quadrantHeight: number;\n quadrantHalfHeight: number;\n };\n}\n\nexport class QuadrantBuilder {\n private config: QuadrantBuilderConfig;\n private themeConfig: QuadrantBuilderThemeConfig;\n private data: QuadrantBuilderData;\n private classes = new Map();\n\n constructor() {\n this.config = this.getDefaultConfig();\n this.themeConfig = this.getDefaultThemeConfig();\n this.data = this.getDefaultData();\n }\n\n getDefaultData(): QuadrantBuilderData {\n return {\n titleText: '',\n quadrant1Text: '',\n quadrant2Text: '',\n quadrant3Text: '',\n quadrant4Text: '',\n xAxisLeftText: '',\n xAxisRightText: '',\n yAxisBottomText: '',\n yAxisTopText: '',\n points: [],\n };\n }\n\n getDefaultConfig(): QuadrantBuilderConfig {\n return {\n showXAxis: true,\n showYAxis: true,\n showTitle: true,\n chartHeight: defaultConfig.quadrantChart?.chartWidth || 500,\n chartWidth: defaultConfig.quadrantChart?.chartHeight || 500,\n titlePadding: defaultConfig.quadrantChart?.titlePadding || 10,\n titleFontSize: defaultConfig.quadrantChart?.titleFontSize || 20,\n quadrantPadding: defaultConfig.quadrantChart?.quadrantPadding || 5,\n xAxisLabelPadding: defaultConfig.quadrantChart?.xAxisLabelPadding || 5,\n yAxisLabelPadding: defaultConfig.quadrantChart?.yAxisLabelPadding || 5,\n xAxisLabelFontSize: defaultConfig.quadrantChart?.xAxisLabelFontSize || 16,\n yAxisLabelFontSize: defaultConfig.quadrantChart?.yAxisLabelFontSize || 16,\n quadrantLabelFontSize: defaultConfig.quadrantChart?.quadrantLabelFontSize || 16,\n quadrantTextTopPadding: defaultConfig.quadrantChart?.quadrantTextTopPadding || 5,\n pointTextPadding: defaultConfig.quadrantChart?.pointTextPadding || 5,\n pointLabelFontSize: defaultConfig.quadrantChart?.pointLabelFontSize || 12,\n pointRadius: defaultConfig.quadrantChart?.pointRadius || 5,\n xAxisPosition: defaultConfig.quadrantChart?.xAxisPosition || 'top',\n yAxisPosition: defaultConfig.quadrantChart?.yAxisPosition || 'left',\n quadrantInternalBorderStrokeWidth:\n defaultConfig.quadrantChart?.quadrantInternalBorderStrokeWidth || 1,\n quadrantExternalBorderStrokeWidth:\n defaultConfig.quadrantChart?.quadrantExternalBorderStrokeWidth || 2,\n };\n }\n\n getDefaultThemeConfig(): QuadrantBuilderThemeConfig {\n return {\n quadrant1Fill: defaultThemeVariables.quadrant1Fill,\n quadrant2Fill: defaultThemeVariables.quadrant2Fill,\n quadrant3Fill: defaultThemeVariables.quadrant3Fill,\n quadrant4Fill: defaultThemeVariables.quadrant4Fill,\n quadrant1TextFill: defaultThemeVariables.quadrant1TextFill,\n quadrant2TextFill: defaultThemeVariables.quadrant2TextFill,\n quadrant3TextFill: defaultThemeVariables.quadrant3TextFill,\n quadrant4TextFill: defaultThemeVariables.quadrant4TextFill,\n quadrantPointFill: defaultThemeVariables.quadrantPointFill,\n quadrantPointTextFill: defaultThemeVariables.quadrantPointTextFill,\n quadrantXAxisTextFill: defaultThemeVariables.quadrantXAxisTextFill,\n quadrantYAxisTextFill: defaultThemeVariables.quadrantYAxisTextFill,\n quadrantTitleFill: defaultThemeVariables.quadrantTitleFill,\n quadrantInternalBorderStrokeFill: defaultThemeVariables.quadrantInternalBorderStrokeFill,\n quadrantExternalBorderStrokeFill: defaultThemeVariables.quadrantExternalBorderStrokeFill,\n };\n }\n\n clear() {\n this.config = this.getDefaultConfig();\n this.themeConfig = this.getDefaultThemeConfig();\n this.data = this.getDefaultData();\n this.classes = new Map();\n log.info('clear called');\n }\n\n setData(data: Partial) {\n this.data = { ...this.data, ...data };\n }\n\n addPoints(points: QuadrantPointInputType[]) {\n this.data.points = [...points, ...this.data.points];\n }\n\n addClass(className: string, styles: StylesObject) {\n this.classes.set(className, styles);\n }\n\n setConfig(config: Partial) {\n log.trace('setConfig called with: ', config);\n this.config = { ...this.config, ...config };\n }\n\n setThemeConfig(themeConfig: Partial) {\n log.trace('setThemeConfig called with: ', themeConfig);\n this.themeConfig = { ...this.themeConfig, ...themeConfig };\n }\n\n calculateSpace(\n xAxisPosition: typeof this.config.xAxisPosition,\n showXAxis: boolean,\n showYAxis: boolean,\n showTitle: boolean\n ): CalculateSpaceData {\n const xAxisSpaceCalculation =\n this.config.xAxisLabelPadding * 2 + this.config.xAxisLabelFontSize;\n const xAxisSpace = {\n top: xAxisPosition === 'top' && showXAxis ? xAxisSpaceCalculation : 0,\n bottom: xAxisPosition === 'bottom' && showXAxis ? xAxisSpaceCalculation : 0,\n };\n\n const yAxisSpaceCalculation =\n this.config.yAxisLabelPadding * 2 + this.config.yAxisLabelFontSize;\n const yAxisSpace = {\n left: this.config.yAxisPosition === 'left' && showYAxis ? yAxisSpaceCalculation : 0,\n right: this.config.yAxisPosition === 'right' && showYAxis ? yAxisSpaceCalculation : 0,\n };\n\n const titleSpaceCalculation = this.config.titleFontSize + this.config.titlePadding * 2;\n const titleSpace = {\n top: showTitle ? titleSpaceCalculation : 0,\n };\n\n const quadrantLeft = this.config.quadrantPadding + yAxisSpace.left;\n const quadrantTop = this.config.quadrantPadding + xAxisSpace.top + titleSpace.top;\n const quadrantWidth =\n this.config.chartWidth - this.config.quadrantPadding * 2 - yAxisSpace.left - yAxisSpace.right;\n const quadrantHeight =\n this.config.chartHeight -\n this.config.quadrantPadding * 2 -\n xAxisSpace.top -\n xAxisSpace.bottom -\n titleSpace.top;\n\n const quadrantHalfWidth = quadrantWidth / 2;\n const quadrantHalfHeight = quadrantHeight / 2;\n const quadrantSpace = {\n quadrantLeft,\n quadrantTop,\n quadrantWidth,\n quadrantHalfWidth,\n quadrantHeight,\n quadrantHalfHeight,\n };\n\n return {\n xAxisSpace,\n yAxisSpace,\n titleSpace,\n quadrantSpace,\n };\n }\n\n getAxisLabels(\n xAxisPosition: typeof this.config.xAxisPosition,\n showXAxis: boolean,\n showYAxis: boolean,\n spaceData: CalculateSpaceData\n ): QuadrantTextType[] {\n const { quadrantSpace, titleSpace } = spaceData;\n const {\n quadrantHalfHeight,\n quadrantHeight,\n quadrantLeft,\n quadrantHalfWidth,\n quadrantTop,\n quadrantWidth,\n } = quadrantSpace;\n\n const drawXAxisLabelsInMiddle = Boolean(this.data.xAxisRightText);\n const drawYAxisLabelsInMiddle = Boolean(this.data.yAxisTopText);\n\n const axisLabels: QuadrantTextType[] = [];\n\n if (this.data.xAxisLeftText && showXAxis) {\n axisLabels.push({\n text: this.data.xAxisLeftText,\n fill: this.themeConfig.quadrantXAxisTextFill,\n x: quadrantLeft + (drawXAxisLabelsInMiddle ? quadrantHalfWidth / 2 : 0),\n y:\n xAxisPosition === 'top'\n ? this.config.xAxisLabelPadding + titleSpace.top\n : this.config.xAxisLabelPadding +\n quadrantTop +\n quadrantHeight +\n this.config.quadrantPadding,\n fontSize: this.config.xAxisLabelFontSize,\n verticalPos: drawXAxisLabelsInMiddle ? 'center' : 'left',\n horizontalPos: 'top',\n rotation: 0,\n });\n }\n if (this.data.xAxisRightText && showXAxis) {\n axisLabels.push({\n text: this.data.xAxisRightText,\n fill: this.themeConfig.quadrantXAxisTextFill,\n x: quadrantLeft + quadrantHalfWidth + (drawXAxisLabelsInMiddle ? quadrantHalfWidth / 2 : 0),\n y:\n xAxisPosition === 'top'\n ? this.config.xAxisLabelPadding + titleSpace.top\n : this.config.xAxisLabelPadding +\n quadrantTop +\n quadrantHeight +\n this.config.quadrantPadding,\n fontSize: this.config.xAxisLabelFontSize,\n verticalPos: drawXAxisLabelsInMiddle ? 'center' : 'left',\n horizontalPos: 'top',\n rotation: 0,\n });\n }\n\n if (this.data.yAxisBottomText && showYAxis) {\n axisLabels.push({\n text: this.data.yAxisBottomText,\n fill: this.themeConfig.quadrantYAxisTextFill,\n x:\n this.config.yAxisPosition === 'left'\n ? this.config.yAxisLabelPadding\n : this.config.yAxisLabelPadding +\n quadrantLeft +\n quadrantWidth +\n this.config.quadrantPadding,\n y: quadrantTop + quadrantHeight - (drawYAxisLabelsInMiddle ? quadrantHalfHeight / 2 : 0),\n fontSize: this.config.yAxisLabelFontSize,\n verticalPos: drawYAxisLabelsInMiddle ? 'center' : 'left',\n horizontalPos: 'top',\n rotation: -90,\n });\n }\n if (this.data.yAxisTopText && showYAxis) {\n axisLabels.push({\n text: this.data.yAxisTopText,\n fill: this.themeConfig.quadrantYAxisTextFill,\n x:\n this.config.yAxisPosition === 'left'\n ? this.config.yAxisLabelPadding\n : this.config.yAxisLabelPadding +\n quadrantLeft +\n quadrantWidth +\n this.config.quadrantPadding,\n y:\n quadrantTop + quadrantHalfHeight - (drawYAxisLabelsInMiddle ? quadrantHalfHeight / 2 : 0),\n fontSize: this.config.yAxisLabelFontSize,\n verticalPos: drawYAxisLabelsInMiddle ? 'center' : 'left',\n horizontalPos: 'top',\n rotation: -90,\n });\n }\n return axisLabels;\n }\n\n getQuadrants(spaceData: CalculateSpaceData): QuadrantQuadrantsType[] {\n const { quadrantSpace } = spaceData;\n\n const { quadrantHalfHeight, quadrantLeft, quadrantHalfWidth, quadrantTop } = quadrantSpace;\n\n const quadrants: QuadrantQuadrantsType[] = [\n {\n text: {\n text: this.data.quadrant1Text,\n fill: this.themeConfig.quadrant1TextFill,\n x: 0,\n y: 0,\n fontSize: this.config.quadrantLabelFontSize,\n verticalPos: 'center',\n horizontalPos: 'middle',\n rotation: 0,\n },\n x: quadrantLeft + quadrantHalfWidth,\n y: quadrantTop,\n width: quadrantHalfWidth,\n height: quadrantHalfHeight,\n fill: this.themeConfig.quadrant1Fill,\n },\n {\n text: {\n text: this.data.quadrant2Text,\n fill: this.themeConfig.quadrant2TextFill,\n x: 0,\n y: 0,\n fontSize: this.config.quadrantLabelFontSize,\n verticalPos: 'center',\n horizontalPos: 'middle',\n rotation: 0,\n },\n x: quadrantLeft,\n y: quadrantTop,\n width: quadrantHalfWidth,\n height: quadrantHalfHeight,\n fill: this.themeConfig.quadrant2Fill,\n },\n {\n text: {\n text: this.data.quadrant3Text,\n fill: this.themeConfig.quadrant3TextFill,\n x: 0,\n y: 0,\n fontSize: this.config.quadrantLabelFontSize,\n verticalPos: 'center',\n horizontalPos: 'middle',\n rotation: 0,\n },\n x: quadrantLeft,\n y: quadrantTop + quadrantHalfHeight,\n width: quadrantHalfWidth,\n height: quadrantHalfHeight,\n fill: this.themeConfig.quadrant3Fill,\n },\n {\n text: {\n text: this.data.quadrant4Text,\n fill: this.themeConfig.quadrant4TextFill,\n x: 0,\n y: 0,\n fontSize: this.config.quadrantLabelFontSize,\n verticalPos: 'center',\n horizontalPos: 'middle',\n rotation: 0,\n },\n x: quadrantLeft + quadrantHalfWidth,\n y: quadrantTop + quadrantHalfHeight,\n width: quadrantHalfWidth,\n height: quadrantHalfHeight,\n fill: this.themeConfig.quadrant4Fill,\n },\n ];\n for (const quadrant of quadrants) {\n quadrant.text.x = quadrant.x + quadrant.width / 2;\n // place the text in the center of the box\n if (this.data.points.length === 0) {\n quadrant.text.y = quadrant.y + quadrant.height / 2;\n quadrant.text.horizontalPos = 'middle';\n // place the text top of the quadrant square\n } else {\n quadrant.text.y = quadrant.y + this.config.quadrantTextTopPadding;\n quadrant.text.horizontalPos = 'top';\n }\n }\n\n return quadrants;\n }\n\n getQuadrantPoints(spaceData: CalculateSpaceData): QuadrantPointType[] {\n const { quadrantSpace } = spaceData;\n\n const { quadrantHeight, quadrantLeft, quadrantTop, quadrantWidth } = quadrantSpace;\n\n const xAxis = scaleLinear()\n .domain([0, 1])\n .range([quadrantLeft, quadrantWidth + quadrantLeft]);\n\n const yAxis = scaleLinear()\n .domain([0, 1])\n .range([quadrantHeight + quadrantTop, quadrantTop]);\n\n const points: QuadrantPointType[] = this.data.points.map((point) => {\n const classStyles = this.classes.get(point.className!);\n if (classStyles) {\n point = { ...classStyles, ...point };\n }\n const props: QuadrantPointType = {\n x: xAxis(point.x),\n y: yAxis(point.y),\n fill: point.color ?? this.themeConfig.quadrantPointFill,\n radius: point.radius ?? this.config.pointRadius,\n text: {\n text: point.text,\n fill: this.themeConfig.quadrantPointTextFill,\n x: xAxis(point.x),\n y: yAxis(point.y) + this.config.pointTextPadding,\n verticalPos: 'center',\n horizontalPos: 'top',\n fontSize: this.config.pointLabelFontSize,\n rotation: 0,\n },\n strokeColor: point.strokeColor ?? this.themeConfig.quadrantPointFill,\n strokeWidth: point.strokeWidth ?? '0px',\n };\n return props;\n });\n return points;\n }\n\n getBorders(spaceData: CalculateSpaceData): QuadrantLineType[] {\n const halfExternalBorderWidth = this.config.quadrantExternalBorderStrokeWidth / 2;\n const { quadrantSpace } = spaceData;\n\n const {\n quadrantHalfHeight,\n quadrantHeight,\n quadrantLeft,\n quadrantHalfWidth,\n quadrantTop,\n quadrantWidth,\n } = quadrantSpace;\n\n const borderLines: QuadrantLineType[] = [\n // top border\n {\n strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill,\n strokeWidth: this.config.quadrantExternalBorderStrokeWidth,\n x1: quadrantLeft - halfExternalBorderWidth,\n y1: quadrantTop,\n x2: quadrantLeft + quadrantWidth + halfExternalBorderWidth,\n y2: quadrantTop,\n },\n // right border\n {\n strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill,\n strokeWidth: this.config.quadrantExternalBorderStrokeWidth,\n x1: quadrantLeft + quadrantWidth,\n y1: quadrantTop + halfExternalBorderWidth,\n x2: quadrantLeft + quadrantWidth,\n y2: quadrantTop + quadrantHeight - halfExternalBorderWidth,\n },\n // bottom border\n {\n strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill,\n strokeWidth: this.config.quadrantExternalBorderStrokeWidth,\n x1: quadrantLeft - halfExternalBorderWidth,\n y1: quadrantTop + quadrantHeight,\n x2: quadrantLeft + quadrantWidth + halfExternalBorderWidth,\n y2: quadrantTop + quadrantHeight,\n },\n // left border\n {\n strokeFill: this.themeConfig.quadrantExternalBorderStrokeFill,\n strokeWidth: this.config.quadrantExternalBorderStrokeWidth,\n x1: quadrantLeft,\n y1: quadrantTop + halfExternalBorderWidth,\n x2: quadrantLeft,\n y2: quadrantTop + quadrantHeight - halfExternalBorderWidth,\n },\n // vertical inner border\n {\n strokeFill: this.themeConfig.quadrantInternalBorderStrokeFill,\n strokeWidth: this.config.quadrantInternalBorderStrokeWidth,\n x1: quadrantLeft + quadrantHalfWidth,\n y1: quadrantTop + halfExternalBorderWidth,\n x2: quadrantLeft + quadrantHalfWidth,\n y2: quadrantTop + quadrantHeight - halfExternalBorderWidth,\n },\n // horizontal inner border\n {\n strokeFill: this.themeConfig.quadrantInternalBorderStrokeFill,\n strokeWidth: this.config.quadrantInternalBorderStrokeWidth,\n x1: quadrantLeft + halfExternalBorderWidth,\n y1: quadrantTop + quadrantHalfHeight,\n x2: quadrantLeft + quadrantWidth - halfExternalBorderWidth,\n y2: quadrantTop + quadrantHalfHeight,\n },\n ];\n return borderLines;\n }\n\n getTitle(showTitle: boolean): QuadrantTextType | undefined {\n if (showTitle) {\n return {\n text: this.data.titleText,\n fill: this.themeConfig.quadrantTitleFill,\n fontSize: this.config.titleFontSize,\n horizontalPos: 'top',\n verticalPos: 'center',\n rotation: 0,\n y: this.config.titlePadding,\n x: this.config.chartWidth / 2,\n };\n }\n return;\n }\n\n build(): QuadrantBuildType {\n const showXAxis =\n this.config.showXAxis && !!(this.data.xAxisLeftText || this.data.xAxisRightText);\n const showYAxis =\n this.config.showYAxis && !!(this.data.yAxisTopText || this.data.yAxisBottomText);\n const showTitle = this.config.showTitle && !!this.data.titleText;\n\n const xAxisPosition = this.data.points.length > 0 ? 'bottom' : this.config.xAxisPosition;\n\n const calculatedSpace = this.calculateSpace(xAxisPosition, showXAxis, showYAxis, showTitle);\n\n return {\n points: this.getQuadrantPoints(calculatedSpace),\n quadrants: this.getQuadrants(calculatedSpace),\n axisLabels: this.getAxisLabels(xAxisPosition, showXAxis, showYAxis, calculatedSpace),\n borderLines: this.getBorders(calculatedSpace),\n title: this.getTitle(showTitle),\n };\n }\n}\n", "class InvalidStyleError extends Error {\n constructor(style: string, value: string, type: string) {\n super(`value for ${style} ${value} is invalid, please use a valid ${type}`);\n this.name = 'InvalidStyleError';\n }\n}\n\nfunction validateHexCode(value: string): boolean {\n return !/^#?([\\dA-Fa-f]{6}|[\\dA-Fa-f]{3})$/.test(value);\n}\n\nfunction validateNumber(value: string): boolean {\n return !/^\\d+$/.test(value);\n}\n\nfunction validateSizeInPixels(value: string): boolean {\n return !/^\\d+px$/.test(value);\n}\n\nexport { validateHexCode, validateNumber, validateSizeInPixels, InvalidStyleError };\n", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { sanitizeText } from '../common/common.js';\nimport {\n setAccTitle,\n getAccTitle,\n setDiagramTitle,\n getDiagramTitle,\n getAccDescription,\n setAccDescription,\n clear as commonClear,\n} from '../common/commonDb.js';\nimport type { StylesObject } from './quadrantBuilder.js';\nimport { QuadrantBuilder } from './quadrantBuilder.js';\nimport {\n validateHexCode,\n validateSizeInPixels,\n validateNumber,\n InvalidStyleError,\n} from './utils.js';\n\nconst config = getConfig();\n\nfunction textSanitizer(text: string) {\n return sanitizeText(text.trim(), config);\n}\n\ninterface LexTextObj {\n text: string;\n type: 'text' | 'markdown';\n}\n\nconst quadrantBuilder = new QuadrantBuilder();\n\nfunction setQuadrant1Text(textObj: LexTextObj) {\n quadrantBuilder.setData({ quadrant1Text: textSanitizer(textObj.text) });\n}\n\nfunction setQuadrant2Text(textObj: LexTextObj) {\n quadrantBuilder.setData({ quadrant2Text: textSanitizer(textObj.text) });\n}\n\nfunction setQuadrant3Text(textObj: LexTextObj) {\n quadrantBuilder.setData({ quadrant3Text: textSanitizer(textObj.text) });\n}\n\nfunction setQuadrant4Text(textObj: LexTextObj) {\n quadrantBuilder.setData({ quadrant4Text: textSanitizer(textObj.text) });\n}\n\nfunction setXAxisLeftText(textObj: LexTextObj) {\n quadrantBuilder.setData({ xAxisLeftText: textSanitizer(textObj.text) });\n}\n\nfunction setXAxisRightText(textObj: LexTextObj) {\n quadrantBuilder.setData({ xAxisRightText: textSanitizer(textObj.text) });\n}\n\nfunction setYAxisTopText(textObj: LexTextObj) {\n quadrantBuilder.setData({ yAxisTopText: textSanitizer(textObj.text) });\n}\n\nfunction setYAxisBottomText(textObj: LexTextObj) {\n quadrantBuilder.setData({ yAxisBottomText: textSanitizer(textObj.text) });\n}\n\nfunction parseStyles(styles: string[]): StylesObject {\n const stylesObject: StylesObject = {};\n for (const style of styles) {\n const [key, value] = style.trim().split(/\\s*:\\s*/);\n if (key === 'radius') {\n if (validateNumber(value)) {\n throw new InvalidStyleError(key, value, 'number');\n }\n stylesObject.radius = parseInt(value);\n } else if (key === 'color') {\n if (validateHexCode(value)) {\n throw new InvalidStyleError(key, value, 'hex code');\n }\n stylesObject.color = value;\n } else if (key === 'stroke-color') {\n if (validateHexCode(value)) {\n throw new InvalidStyleError(key, value, 'hex code');\n }\n stylesObject.strokeColor = value;\n } else if (key === 'stroke-width') {\n if (validateSizeInPixels(value)) {\n throw new InvalidStyleError(key, value, 'number of pixels (eg. 10px)');\n }\n stylesObject.strokeWidth = value;\n } else {\n throw new Error(`style named ${key} is not supported.`);\n }\n }\n return stylesObject;\n}\n\nfunction addPoint(textObj: LexTextObj, className: string, x: number, y: number, styles: string[]) {\n const stylesObject = parseStyles(styles);\n quadrantBuilder.addPoints([\n {\n x,\n y,\n text: textSanitizer(textObj.text),\n className,\n ...stylesObject,\n },\n ]);\n}\n\nfunction addClass(className: string, styles: string[]) {\n quadrantBuilder.addClass(className, parseStyles(styles));\n}\n\nfunction setWidth(width: number) {\n quadrantBuilder.setConfig({ chartWidth: width });\n}\n\nfunction setHeight(height: number) {\n quadrantBuilder.setConfig({ chartHeight: height });\n}\n\nfunction getQuadrantData() {\n const config = getConfig();\n const { themeVariables, quadrantChart: quadrantChartConfig } = config;\n if (quadrantChartConfig) {\n quadrantBuilder.setConfig(quadrantChartConfig);\n }\n quadrantBuilder.setThemeConfig({\n quadrant1Fill: themeVariables.quadrant1Fill,\n quadrant2Fill: themeVariables.quadrant2Fill,\n quadrant3Fill: themeVariables.quadrant3Fill,\n quadrant4Fill: themeVariables.quadrant4Fill,\n quadrant1TextFill: themeVariables.quadrant1TextFill,\n quadrant2TextFill: themeVariables.quadrant2TextFill,\n quadrant3TextFill: themeVariables.quadrant3TextFill,\n quadrant4TextFill: themeVariables.quadrant4TextFill,\n quadrantPointFill: themeVariables.quadrantPointFill,\n quadrantPointTextFill: themeVariables.quadrantPointTextFill,\n quadrantXAxisTextFill: themeVariables.quadrantXAxisTextFill,\n quadrantYAxisTextFill: themeVariables.quadrantYAxisTextFill,\n quadrantExternalBorderStrokeFill: themeVariables.quadrantExternalBorderStrokeFill,\n quadrantInternalBorderStrokeFill: themeVariables.quadrantInternalBorderStrokeFill,\n quadrantTitleFill: themeVariables.quadrantTitleFill,\n });\n quadrantBuilder.setData({ titleText: getDiagramTitle() });\n return quadrantBuilder.build();\n}\n\nconst clear = function () {\n quadrantBuilder.clear();\n commonClear();\n};\n\nexport default {\n setWidth,\n setHeight,\n setQuadrant1Text,\n setQuadrant2Text,\n setQuadrant3Text,\n setQuadrant4Text,\n setXAxisLeftText,\n setXAxisRightText,\n setYAxisTopText,\n setYAxisBottomText,\n parseStyles,\n addPoint,\n addClass,\n getQuadrantData,\n clear,\n setAccTitle,\n getAccTitle,\n setDiagramTitle,\n getDiagramTitle,\n getAccDescription,\n setAccDescription,\n};\n", "// @ts-nocheck - don't check until handle it\nimport { select } from 'd3';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { log } from '../../logger.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\nimport type { Diagram } from '../../Diagram.js';\nimport type {\n QuadrantBuildType,\n QuadrantLineType,\n QuadrantPointType,\n QuadrantQuadrantsType,\n QuadrantTextType,\n TextHorizontalPos,\n TextVerticalPos,\n} from './quadrantBuilder.js';\n\nexport const draw = (txt: string, id: string, _version: string, diagObj: Diagram) => {\n function getDominantBaseLine(horizontalPos: TextHorizontalPos) {\n return horizontalPos === 'top' ? 'hanging' : 'middle';\n }\n\n function getTextAnchor(verticalPos: TextVerticalPos) {\n return verticalPos === 'left' ? 'start' : 'middle';\n }\n\n function getTransformation(data: { x: number; y: number; rotation: number }) {\n return `translate(${data.x}, ${data.y}) rotate(${data.rotation || 0})`;\n }\n\n const conf = getConfig();\n\n log.debug('Rendering quadrant chart\\n' + txt);\n\n const securityLevel = conf.securityLevel;\n // Handle root and Document for when rendering in sandbox mode\n let sandboxElement;\n if (securityLevel === 'sandbox') {\n sandboxElement = select('#i' + id);\n }\n const root =\n securityLevel === 'sandbox'\n ? select(sandboxElement.nodes()[0].contentDocument.body)\n : select('body');\n\n const svg = root.select(`[id=\"${id}\"]`);\n\n const group = svg.append('g').attr('class', 'main');\n\n const width = conf.quadrantChart?.chartWidth ?? 500;\n const height = conf.quadrantChart?.chartHeight ?? 500;\n\n configureSvgSize(svg, height, width, conf.quadrantChart?.useMaxWidth ?? true);\n\n svg.attr('viewBox', '0 0 ' + width + ' ' + height);\n\n // @ts-ignore: TODO Fix ts errors\n diagObj.db.setHeight(height);\n // @ts-ignore: TODO Fix ts errors\n diagObj.db.setWidth(width);\n\n // @ts-ignore: TODO Fix ts errors\n const quadrantData: QuadrantBuildType = diagObj.db.getQuadrantData();\n\n const quadrantsGroup = group.append('g').attr('class', 'quadrants');\n const borderGroup = group.append('g').attr('class', 'border');\n const dataPointGroup = group.append('g').attr('class', 'data-points');\n const labelGroup = group.append('g').attr('class', 'labels');\n const titleGroup = group.append('g').attr('class', 'title');\n\n if (quadrantData.title) {\n titleGroup\n .append('text')\n .attr('x', 0)\n .attr('y', 0)\n .attr('fill', quadrantData.title.fill)\n .attr('font-size', quadrantData.title.fontSize)\n .attr('dominant-baseline', getDominantBaseLine(quadrantData.title.horizontalPos))\n .attr('text-anchor', getTextAnchor(quadrantData.title.verticalPos))\n .attr('transform', getTransformation(quadrantData.title))\n .text(quadrantData.title.text);\n }\n\n if (quadrantData.borderLines) {\n borderGroup\n .selectAll('line')\n .data(quadrantData.borderLines)\n .enter()\n .append('line')\n .attr('x1', (data: QuadrantLineType) => data.x1)\n .attr('y1', (data: QuadrantLineType) => data.y1)\n .attr('x2', (data: QuadrantLineType) => data.x2)\n .attr('y2', (data: QuadrantLineType) => data.y2)\n .style('stroke', (data: QuadrantLineType) => data.strokeFill)\n .style('stroke-width', (data: QuadrantLineType) => data.strokeWidth);\n }\n\n const quadrants = quadrantsGroup\n .selectAll('g.quadrant')\n .data(quadrantData.quadrants)\n .enter()\n .append('g')\n .attr('class', 'quadrant');\n\n quadrants\n .append('rect')\n .attr('x', (data: QuadrantQuadrantsType) => data.x)\n .attr('y', (data: QuadrantQuadrantsType) => data.y)\n .attr('width', (data: QuadrantQuadrantsType) => data.width)\n .attr('height', (data: QuadrantQuadrantsType) => data.height)\n .attr('fill', (data: QuadrantQuadrantsType) => data.fill);\n\n quadrants\n .append('text')\n .attr('x', 0)\n .attr('y', 0)\n .attr('fill', (data: QuadrantQuadrantsType) => data.text.fill)\n .attr('font-size', (data: QuadrantQuadrantsType) => data.text.fontSize)\n .attr('dominant-baseline', (data: QuadrantQuadrantsType) =>\n getDominantBaseLine(data.text.horizontalPos)\n )\n .attr('text-anchor', (data: QuadrantQuadrantsType) => getTextAnchor(data.text.verticalPos))\n .attr('transform', (data: QuadrantQuadrantsType) => getTransformation(data.text))\n .text((data: QuadrantQuadrantsType) => data.text.text);\n\n const labels = labelGroup\n .selectAll('g.label')\n .data(quadrantData.axisLabels)\n .enter()\n .append('g')\n .attr('class', 'label');\n\n labels\n .append('text')\n .attr('x', 0)\n .attr('y', 0)\n .text((data: QuadrantTextType) => data.text)\n .attr('fill', (data: QuadrantTextType) => data.fill)\n .attr('font-size', (data: QuadrantTextType) => data.fontSize)\n .attr('dominant-baseline', (data: QuadrantTextType) => getDominantBaseLine(data.horizontalPos))\n .attr('text-anchor', (data: QuadrantTextType) => getTextAnchor(data.verticalPos))\n .attr('transform', (data: QuadrantTextType) => getTransformation(data));\n\n const dataPoints = dataPointGroup\n .selectAll('g.data-point')\n .data(quadrantData.points)\n .enter()\n .append('g')\n .attr('class', 'data-point');\n\n dataPoints\n .append('circle')\n .attr('cx', (data: QuadrantPointType) => data.x)\n .attr('cy', (data: QuadrantPointType) => data.y)\n .attr('r', (data: QuadrantPointType) => data.radius)\n .attr('fill', (data: QuadrantPointType) => data.fill)\n .attr('stroke', (data: QuadrantPointType) => data.strokeColor)\n .attr('stroke-width', (data: QuadrantPointType) => data.strokeWidth);\n\n dataPoints\n .append('text')\n .attr('x', 0)\n .attr('y', 0)\n .text((data: QuadrantPointType) => data.text.text)\n .attr('fill', (data: QuadrantPointType) => data.text.fill)\n .attr('font-size', (data: QuadrantPointType) => data.text.fontSize)\n .attr('dominant-baseline', (data: QuadrantPointType) =>\n getDominantBaseLine(data.text.horizontalPos)\n )\n .attr('text-anchor', (data: QuadrantPointType) => getTextAnchor(data.text.verticalPos))\n .attr('transform', (data: QuadrantPointType) => getTransformation(data.text));\n};\n\nexport default {\n draw,\n};\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\n// @ts-ignore: JISON doesn't support types\nimport parser from './parser/quadrant.jison';\nimport db from './quadrantDb.js';\nimport renderer from './quadrantRenderer.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n db,\n renderer,\n styles: () => '',\n};\n", "/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,10,12,14,16,18,19,21,23],$V1=[2,6],$V2=[1,3],$V3=[1,5],$V4=[1,6],$V5=[1,7],$V6=[1,5,10,12,14,16,18,19,21,23,34,35,36],$V7=[1,25],$V8=[1,26],$V9=[1,28],$Va=[1,29],$Vb=[1,30],$Vc=[1,31],$Vd=[1,32],$Ve=[1,33],$Vf=[1,34],$Vg=[1,35],$Vh=[1,36],$Vi=[1,37],$Vj=[1,43],$Vk=[1,42],$Vl=[1,47],$Vm=[1,50],$Vn=[1,10,12,14,16,18,19,21,23,34,35,36],$Vo=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],$Vp=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],$Vq=[1,64];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"eol\":4,\"XYCHART\":5,\"chartConfig\":6,\"document\":7,\"CHART_ORIENTATION\":8,\"statement\":9,\"title\":10,\"text\":11,\"X_AXIS\":12,\"parseXAxis\":13,\"Y_AXIS\":14,\"parseYAxis\":15,\"LINE\":16,\"plotData\":17,\"BAR\":18,\"acc_title\":19,\"acc_title_value\":20,\"acc_descr\":21,\"acc_descr_value\":22,\"acc_descr_multiline_value\":23,\"SQUARE_BRACES_START\":24,\"commaSeparatedNumbers\":25,\"SQUARE_BRACES_END\":26,\"NUMBER_WITH_DECIMAL\":27,\"COMMA\":28,\"xAxisData\":29,\"bandData\":30,\"ARROW_DELIMITER\":31,\"commaSeparatedTexts\":32,\"yAxisData\":33,\"NEWLINE\":34,\"SEMI\":35,\"EOF\":36,\"alphaNum\":37,\"STR\":38,\"MD_STR\":39,\"alphaNumToken\":40,\"AMP\":41,\"NUM\":42,\"ALPHA\":43,\"PLUS\":44,\"EQUALS\":45,\"MULT\":46,\"DOT\":47,\"BRKT\":48,\"MINUS\":49,\"UNDERSCORE\":50,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"XYCHART\",8:\"CHART_ORIENTATION\",10:\"title\",12:\"X_AXIS\",14:\"Y_AXIS\",16:\"LINE\",18:\"BAR\",19:\"acc_title\",20:\"acc_title_value\",21:\"acc_descr\",22:\"acc_descr_value\",23:\"acc_descr_multiline_value\",24:\"SQUARE_BRACES_START\",26:\"SQUARE_BRACES_END\",27:\"NUMBER_WITH_DECIMAL\",28:\"COMMA\",31:\"ARROW_DELIMITER\",34:\"NEWLINE\",35:\"SEMI\",36:\"EOF\",38:\"STR\",39:\"MD_STR\",41:\"AMP\",42:\"NUM\",43:\"ALPHA\",44:\"PLUS\",45:\"EQUALS\",46:\"MULT\",47:\"DOT\",48:\"BRKT\",49:\"MINUS\",50:\"UNDERSCORE\"},\nproductions_: [0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 5:\n yy.setOrientation($$[$0]); \nbreak;\ncase 9:\n yy.setDiagramTitle($$[$0].text.trim()); \nbreak;\ncase 12:\n yy.setLineData({text: '', type: 'text'}, $$[$0]); \nbreak;\ncase 13:\n yy.setLineData($$[$0-1], $$[$0]); \nbreak;\ncase 14:\n yy.setBarData({text: '', type: 'text'}, $$[$0]); \nbreak;\ncase 15:\n yy.setBarData($$[$0-1], $$[$0]); \nbreak;\ncase 16:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 17: case 18:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 19:\n this.$ = $$[$0-1] \nbreak;\ncase 20:\n this.$ = [Number($$[$0-2]), ...$$[$0]] \nbreak;\ncase 21:\n this.$ = [Number($$[$0])] \nbreak;\ncase 22:\nyy.setXAxisTitle($$[$0]);\nbreak;\ncase 23:\nyy.setXAxisTitle($$[$0-1]);\nbreak;\ncase 24:\nyy.setXAxisTitle({type: 'text', text: ''});\nbreak;\ncase 25:\nyy.setXAxisBand($$[$0]);\nbreak;\ncase 26:\nyy.setXAxisRangeData(Number($$[$0-2]), Number($$[$0]));\nbreak;\ncase 27:\nthis.$ = $$[$0-1]\nbreak;\ncase 28:\n this.$ = [$$[$0-2], ...$$[$0]] \nbreak;\ncase 29:\n this.$ = [$$[$0]] \nbreak;\ncase 30:\nyy.setYAxisTitle($$[$0]);\nbreak;\ncase 31:\nyy.setYAxisTitle($$[$0-1]);\nbreak;\ncase 32:\nyy.setYAxisTitle({type: \"text\", text: \"\"});\nbreak;\ncase 33:\nyy.setYAxisRangeData(Number($$[$0-2]), Number($$[$0]));\nbreak;\ncase 37:\n this.$={text:$$[$0], type: 'text'};\nbreak;\ncase 38:\n this.$={text: $$[$0], type: 'text'};\nbreak;\ncase 39:\n this.$={text: $$[$0], type: 'markdown'};\nbreak;\ncase 40:\nthis.$=$$[$0];\nbreak;\ncase 41:\nthis.$=$$[$0-1]+''+$$[$0];\nbreak;\n}\n},\ntable: [o($V0,$V1,{3:1,4:2,7:4,5:$V2,34:$V3,35:$V4,36:$V5}),{1:[3]},o($V0,$V1,{4:2,7:4,3:8,5:$V2,34:$V3,35:$V4,36:$V5}),o($V0,$V1,{4:2,7:4,6:9,3:10,5:$V2,8:[1,11],34:$V3,35:$V4,36:$V5}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},o($V6,[2,34]),o($V6,[2,35]),o($V6,[2,36]),{1:[2,1]},o($V0,$V1,{4:2,7:4,3:21,5:$V2,34:$V3,35:$V4,36:$V5}),{1:[2,3]},o($V6,[2,5]),o($V0,[2,7],{4:22,34:$V3,35:$V4,36:$V5}),{11:23,37:24,38:$V7,39:$V8,40:27,41:$V9,42:$Va,43:$Vb,44:$Vc,45:$Vd,46:$Ve,47:$Vf,48:$Vg,49:$Vh,50:$Vi},{11:39,13:38,24:$Vj,27:$Vk,29:40,30:41,37:24,38:$V7,39:$V8,40:27,41:$V9,42:$Va,43:$Vb,44:$Vc,45:$Vd,46:$Ve,47:$Vf,48:$Vg,49:$Vh,50:$Vi},{11:45,15:44,27:$Vl,33:46,37:24,38:$V7,39:$V8,40:27,41:$V9,42:$Va,43:$Vb,44:$Vc,45:$Vd,46:$Ve,47:$Vf,48:$Vg,49:$Vh,50:$Vi},{11:49,17:48,24:$Vm,37:24,38:$V7,39:$V8,40:27,41:$V9,42:$Va,43:$Vb,44:$Vc,45:$Vd,46:$Ve,47:$Vf,48:$Vg,49:$Vh,50:$Vi},{11:52,17:51,24:$Vm,37:24,38:$V7,39:$V8,40:27,41:$V9,42:$Va,43:$Vb,44:$Vc,45:$Vd,46:$Ve,47:$Vf,48:$Vg,49:$Vh,50:$Vi},{20:[1,53]},{22:[1,54]},o($Vn,[2,18]),{1:[2,2]},o($Vn,[2,8]),o($Vn,[2,9]),o($Vo,[2,37],{40:55,41:$V9,42:$Va,43:$Vb,44:$Vc,45:$Vd,46:$Ve,47:$Vf,48:$Vg,49:$Vh,50:$Vi}),o($Vo,[2,38]),o($Vo,[2,39]),o($Vp,[2,40]),o($Vp,[2,42]),o($Vp,[2,43]),o($Vp,[2,44]),o($Vp,[2,45]),o($Vp,[2,46]),o($Vp,[2,47]),o($Vp,[2,48]),o($Vp,[2,49]),o($Vp,[2,50]),o($Vp,[2,51]),o($Vn,[2,10]),o($Vn,[2,22],{30:41,29:56,24:$Vj,27:$Vk}),o($Vn,[2,24]),o($Vn,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:$V7,39:$V8,40:27,41:$V9,42:$Va,43:$Vb,44:$Vc,45:$Vd,46:$Ve,47:$Vf,48:$Vg,49:$Vh,50:$Vi},o($Vn,[2,11]),o($Vn,[2,30],{33:60,27:$Vl}),o($Vn,[2,32]),{31:[1,61]},o($Vn,[2,12]),{17:62,24:$Vm},{25:63,27:$Vq},o($Vn,[2,14]),{17:65,24:$Vm},o($Vn,[2,16]),o($Vn,[2,17]),o($Vp,[2,41]),o($Vn,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},o($Vn,[2,31]),{27:[1,69]},o($Vn,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},o($Vn,[2,15]),o($Vn,[2,26]),o($Vn,[2,27]),{11:59,32:72,37:24,38:$V7,39:$V8,40:27,41:$V9,42:$Va,43:$Vb,44:$Vc,45:$Vd,46:$Ve,47:$Vf,48:$Vg,49:$Vh,50:$Vi},o($Vn,[2,33]),o($Vn,[2,19]),{25:73,27:$Vq},{26:[2,28]},{26:[2,20]}],\ndefaultActions: {8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// 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.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n 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(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* skip comments */\nbreak;\ncase 1:/* skip comments */\nbreak;\ncase 2: this.popState(); return 34; \nbreak;\ncase 3: this.popState(); return 34; \nbreak;\ncase 4:return 34;\nbreak;\ncase 5:/* do nothing */\nbreak;\ncase 6: return 10; \nbreak;\ncase 7: this.pushState(\"acc_title\");return 19; \nbreak;\ncase 8: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 9: this.pushState(\"acc_descr\");return 21; \nbreak;\ncase 10: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 11: this.pushState(\"acc_descr_multiline\");\nbreak;\ncase 12: this.popState(); \nbreak;\ncase 13: return \"acc_descr_multiline_value\"; \nbreak;\ncase 14:return 5;\nbreak;\ncase 15:return 5;\nbreak;\ncase 16:return 8\nbreak;\ncase 17: this.pushState(\"axis_data\"); return \"X_AXIS\"; \nbreak;\ncase 18: this.pushState(\"axis_data\"); return \"Y_AXIS\"; \nbreak;\ncase 19: this.pushState(\"axis_band_data\"); return 24; \nbreak;\ncase 20: return 31; \nbreak;\ncase 21: this.pushState(\"data\"); return 16; \nbreak;\ncase 22: this.pushState(\"data\"); return 18; \nbreak;\ncase 23: this.pushState(\"data_inner\"); return 24; \nbreak;\ncase 24: return 27; \nbreak;\ncase 25: this.popState(); return 26; \nbreak;\ncase 26: this.popState(); \nbreak;\ncase 27:this.pushState(\"string\");\nbreak;\ncase 28:this.popState();\nbreak;\ncase 29:return \"STR\";\nbreak;\ncase 30:return 24\nbreak;\ncase 31:return 26\nbreak;\ncase 32:return 43;\nbreak;\ncase 33:return 'COLON';\nbreak;\ncase 34:return 44;\nbreak;\ncase 35:return 28;\nbreak;\ncase 36:return 45;\nbreak;\ncase 37:return 46;\nbreak;\ncase 38:return 48;\nbreak;\ncase 39:return 50;\nbreak;\ncase 40:return 47;\nbreak;\ncase 41:return 41;\nbreak;\ncase 42:return 49;\nbreak;\ncase 43:return 42;\nbreak;\ncase 44:/* skip */\nbreak;\ncase 45:return 35;\nbreak;\ncase 46:return 36;\nbreak;\n}\n},\nrules: [/^(?:%%(?!\\{)[^\\n]*)/i,/^(?:[^\\}]%%[^\\n]*)/i,/^(?:(\\r?\\n))/i,/^(?:(\\r?\\n))/i,/^(?:[\\n\\r]+)/i,/^(?:%%[^\\n]*)/i,/^(?:title\\b)/i,/^(?:accTitle\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*\\{\\s*)/i,/^(?:\\{)/i,/^(?:[^\\}]*)/i,/^(?:xychart-beta\\b)/i,/^(?:xychart\\b)/i,/^(?:(?:vertical|horizontal))/i,/^(?:x-axis\\b)/i,/^(?:y-axis\\b)/i,/^(?:\\[)/i,/^(?:-->)/i,/^(?:line\\b)/i,/^(?:bar\\b)/i,/^(?:\\[)/i,/^(?:[+-]?(?:\\d+(?:\\.\\d+)?|\\.\\d+))/i,/^(?:\\])/i,/^(?:(?:`\\) \\{ this\\.pushState\\(md_string\\); \\}\\n\\(\\?:\\(\\?!`\"\\)\\.\\)\\+ \\{ return MD_STR; \\}\\n\\(\\?:`))/i,/^(?:[\"])/i,/^(?:[\"])/i,/^(?:[^\"]*)/i,/^(?:\\[)/i,/^(?:\\])/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:\\*)/i,/^(?:#)/i,/^(?:[\\_])/i,/^(?:\\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\\s+)/i,/^(?:;)/i,/^(?:$)/i],\nconditions: {\"data_inner\":{\"rules\":[0,1,4,5,6,7,9,11,14,15,16,17,18,21,22,24,25,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],\"inclusive\":true},\"data\":{\"rules\":[0,1,3,4,5,6,7,9,11,14,15,16,17,18,21,22,23,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],\"inclusive\":true},\"axis_band_data\":{\"rules\":[0,1,4,5,6,7,9,11,14,15,16,17,18,21,22,25,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],\"inclusive\":true},\"axis_data\":{\"rules\":[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20,21,22,24,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],\"inclusive\":true},\"acc_descr_multiline\":{\"rules\":[12,13],\"inclusive\":false},\"acc_descr\":{\"rules\":[10],\"inclusive\":false},\"acc_title\":{\"rules\":[8],\"inclusive\":false},\"title\":{\"rules\":[],\"inclusive\":false},\"md_string\":{\"rules\":[],\"inclusive\":false},\"string\":{\"rules\":[28,29],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,4,5,6,7,9,11,14,15,16,17,18,21,22,26,27,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})(); \n\tparser.parser = parser;\n\texport { parser };\n\texport default parser;\n\t", "export interface XYChartAxisThemeConfig {\n titleColor: string;\n labelColor: string;\n tickColor: string;\n axisLineColor: string;\n}\n\nexport interface XYChartThemeConfig {\n backgroundColor: string;\n titleColor: string;\n xAxisLabelColor: string;\n xAxisTitleColor: string;\n xAxisTickColor: string;\n xAxisLineColor: string;\n yAxisLabelColor: string;\n yAxisTitleColor: string;\n yAxisTickColor: string;\n yAxisLineColor: string;\n plotColorPalette: string;\n}\n\nexport interface ChartComponent {\n calculateSpace(availableSpace: Dimension): Dimension;\n setBoundingBoxXY(point: Point): void;\n getDrawableElements(): DrawableElem[];\n}\n\nexport type SimplePlotDataType = [string, number][];\n\nexport interface LinePlotData {\n type: 'line';\n strokeFill: string;\n strokeWidth: number;\n data: SimplePlotDataType;\n}\n\nexport interface BarPlotData {\n type: 'bar';\n fill: string;\n data: SimplePlotDataType;\n}\n\nexport type PlotData = LinePlotData | BarPlotData;\n\nexport function isBarPlot(data: PlotData): data is BarPlotData {\n return data.type === 'bar';\n}\n\nexport interface BandAxisDataType {\n type: 'band';\n title: string;\n categories: string[];\n}\n\nexport interface LinearAxisDataType {\n type: 'linear';\n title: string;\n min: number;\n max: number;\n}\n\nexport type AxisDataType = LinearAxisDataType | BandAxisDataType;\n\nexport function isBandAxisData(data: AxisDataType): data is BandAxisDataType {\n return data.type === 'band';\n}\n\nexport function isLinearAxisData(data: AxisDataType): data is LinearAxisDataType {\n return data.type === 'linear';\n}\n\n/**\n * For now we are keeping this configs as we are removing the required fields while generating the config.type.ts file\n * we should remove `XYChartAxisConfig` and `XYChartConfig` after we started using required fields\n */\nexport interface XYChartAxisConfig {\n showLabel: boolean;\n labelFontSize: number;\n labelPadding: number;\n showTitle: boolean;\n titleFontSize: number;\n titlePadding: number;\n showTick: boolean;\n tickLength: number;\n tickWidth: number;\n showAxisLine: boolean;\n axisLineWidth: number;\n}\n\nexport interface XYChartConfig {\n width: number;\n height: number;\n titleFontSize: number;\n titlePadding: number;\n showTitle: boolean;\n showDataLabel: boolean;\n xAxis: XYChartAxisConfig;\n yAxis: XYChartAxisConfig;\n chartOrientation: 'vertical' | 'horizontal';\n plotReservedSpacePercent: number;\n}\n\nexport interface XYChartData {\n xAxis: AxisDataType;\n yAxis: AxisDataType;\n title: string;\n plots: PlotData[];\n}\n\nexport interface Dimension {\n width: number;\n height: number;\n}\n\nexport interface BoundingRect extends Point, Dimension {}\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nexport type TextHorizontalPos = 'left' | 'center' | 'right';\nexport type TextVerticalPos = 'top' | 'middle';\n\nexport interface RectElem extends Point {\n width: number;\n height: number;\n fill: string;\n strokeWidth: number;\n strokeFill: string;\n}\n\nexport interface TextElem extends Point {\n text: string;\n fill: string;\n verticalPos: TextVerticalPos;\n horizontalPos: TextHorizontalPos;\n fontSize: number;\n rotation: number;\n}\n\nexport interface PathElem {\n path: string;\n fill?: string;\n strokeWidth: number;\n strokeFill: string;\n}\n\nexport type DrawableElem =\n | {\n groupTexts: string[];\n type: 'rect';\n data: RectElem[];\n }\n | {\n groupTexts: string[];\n type: 'text';\n data: TextElem[];\n }\n | {\n groupTexts: string[];\n type: 'path';\n data: PathElem[];\n };\n", "import type { SVGGroup } from '../../../diagram-api/types.js';\nimport { computeDimensionOfText } from '../../../rendering-util/createText.js';\nimport type { Dimension } from './interfaces.js';\n\nexport interface TextDimensionCalculator {\n getMaxDimension(texts: string[], fontSize: number): Dimension;\n}\n\nexport class TextDimensionCalculatorWithFont implements TextDimensionCalculator {\n constructor(private parentGroup: SVGGroup) {}\n getMaxDimension(texts: string[], fontSize: number): Dimension {\n if (!this.parentGroup) {\n return {\n width: texts.reduce((acc, cur) => Math.max(cur.length, acc), 0) * fontSize,\n height: fontSize,\n };\n }\n\n const dimension: Dimension = {\n width: 0,\n height: 0,\n };\n\n const elem = this.parentGroup\n .append('g')\n .attr('visibility', 'hidden')\n .attr('font-size', fontSize);\n\n for (const t of texts) {\n const bbox = computeDimensionOfText(elem, 1, t);\n const width = bbox ? bbox.width : t.length * fontSize;\n const height = bbox ? bbox.height : fontSize;\n dimension.width = Math.max(dimension.width, width);\n dimension.height = Math.max(dimension.height, height);\n }\n elem.remove();\n return dimension;\n }\n}\n", "import type {\n BoundingRect,\n Dimension,\n DrawableElem,\n Point,\n XYChartAxisConfig,\n XYChartAxisThemeConfig,\n} from '../../interfaces.js';\nimport type { TextDimensionCalculator } from '../../textDimensionCalculator.js';\nimport type { Axis, AxisPosition } from './index.js';\n\nconst BAR_WIDTH_TO_TICK_WIDTH_RATIO = 0.7;\nconst MAX_OUTER_PADDING_PERCENT_FOR_WRT_LABEL = 0.2;\n\nexport abstract class BaseAxis implements Axis {\n protected boundingRect: BoundingRect = { x: 0, y: 0, width: 0, height: 0 };\n protected axisPosition: AxisPosition = 'left';\n private range: [number, number];\n protected showTitle = false;\n protected showLabel = false;\n protected showTick = false;\n protected showAxisLine = false;\n protected outerPadding = 0;\n protected titleTextHeight = 0;\n protected labelTextHeight = 0;\n\n constructor(\n protected axisConfig: XYChartAxisConfig,\n protected title: string,\n protected textDimensionCalculator: TextDimensionCalculator,\n protected axisThemeConfig: XYChartAxisThemeConfig\n ) {\n this.range = [0, 10];\n this.boundingRect = { x: 0, y: 0, width: 0, height: 0 };\n this.axisPosition = 'left';\n }\n\n setRange(range: [number, number]): void {\n this.range = range;\n if (this.axisPosition === 'left' || this.axisPosition === 'right') {\n this.boundingRect.height = range[1] - range[0];\n } else {\n this.boundingRect.width = range[1] - range[0];\n }\n this.recalculateScale();\n }\n\n getRange(): [number, number] {\n return [this.range[0] + this.outerPadding, this.range[1] - this.outerPadding];\n }\n\n setAxisPosition(axisPosition: AxisPosition): void {\n this.axisPosition = axisPosition;\n this.setRange(this.range);\n }\n\n abstract getScaleValue(value: number | string): number;\n\n abstract recalculateScale(): void;\n\n abstract getTickValues(): (string | number)[];\n\n getTickDistance(): number {\n const range = this.getRange();\n return Math.abs(range[0] - range[1]) / this.getTickValues().length;\n }\n\n getAxisOuterPadding(): number {\n return this.outerPadding;\n }\n\n private getLabelDimension(): Dimension {\n return this.textDimensionCalculator.getMaxDimension(\n this.getTickValues().map((tick) => tick.toString()),\n this.axisConfig.labelFontSize\n );\n }\n\n recalculateOuterPaddingToDrawBar(): void {\n if (BAR_WIDTH_TO_TICK_WIDTH_RATIO * this.getTickDistance() > this.outerPadding * 2) {\n this.outerPadding = Math.floor((BAR_WIDTH_TO_TICK_WIDTH_RATIO * this.getTickDistance()) / 2);\n }\n this.recalculateScale();\n }\n\n private calculateSpaceIfDrawnHorizontally(availableSpace: Dimension) {\n let availableHeight = availableSpace.height;\n if (this.axisConfig.showAxisLine && availableHeight > this.axisConfig.axisLineWidth) {\n availableHeight -= this.axisConfig.axisLineWidth;\n this.showAxisLine = true;\n }\n if (this.axisConfig.showLabel) {\n const spaceRequired = this.getLabelDimension();\n const maxPadding = MAX_OUTER_PADDING_PERCENT_FOR_WRT_LABEL * availableSpace.width;\n this.outerPadding = Math.min(spaceRequired.width / 2, maxPadding);\n\n const heightRequired = spaceRequired.height + this.axisConfig.labelPadding * 2;\n this.labelTextHeight = spaceRequired.height;\n if (heightRequired <= availableHeight) {\n availableHeight -= heightRequired;\n this.showLabel = true;\n }\n }\n if (this.axisConfig.showTick && availableHeight >= this.axisConfig.tickLength) {\n this.showTick = true;\n availableHeight -= this.axisConfig.tickLength;\n }\n if (this.axisConfig.showTitle && this.title) {\n const spaceRequired = this.textDimensionCalculator.getMaxDimension(\n [this.title],\n this.axisConfig.titleFontSize\n );\n const heightRequired = spaceRequired.height + this.axisConfig.titlePadding * 2;\n this.titleTextHeight = spaceRequired.height;\n if (heightRequired <= availableHeight) {\n availableHeight -= heightRequired;\n this.showTitle = true;\n }\n }\n this.boundingRect.width = availableSpace.width;\n this.boundingRect.height = availableSpace.height - availableHeight;\n }\n\n private calculateSpaceIfDrawnVertical(availableSpace: Dimension) {\n let availableWidth = availableSpace.width;\n if (this.axisConfig.showAxisLine && availableWidth > this.axisConfig.axisLineWidth) {\n availableWidth -= this.axisConfig.axisLineWidth;\n this.showAxisLine = true;\n }\n if (this.axisConfig.showLabel) {\n const spaceRequired = this.getLabelDimension();\n const maxPadding = MAX_OUTER_PADDING_PERCENT_FOR_WRT_LABEL * availableSpace.height;\n this.outerPadding = Math.min(spaceRequired.height / 2, maxPadding);\n const widthRequired = spaceRequired.width + this.axisConfig.labelPadding * 2;\n if (widthRequired <= availableWidth) {\n availableWidth -= widthRequired;\n this.showLabel = true;\n }\n }\n if (this.axisConfig.showTick && availableWidth >= this.axisConfig.tickLength) {\n this.showTick = true;\n availableWidth -= this.axisConfig.tickLength;\n }\n if (this.axisConfig.showTitle && this.title) {\n const spaceRequired = this.textDimensionCalculator.getMaxDimension(\n [this.title],\n this.axisConfig.titleFontSize\n );\n const widthRequired = spaceRequired.height + this.axisConfig.titlePadding * 2;\n this.titleTextHeight = spaceRequired.height;\n if (widthRequired <= availableWidth) {\n availableWidth -= widthRequired;\n this.showTitle = true;\n }\n }\n this.boundingRect.width = availableSpace.width - availableWidth;\n this.boundingRect.height = availableSpace.height;\n }\n\n calculateSpace(availableSpace: Dimension): Dimension {\n if (this.axisPosition === 'left' || this.axisPosition === 'right') {\n this.calculateSpaceIfDrawnVertical(availableSpace);\n } else {\n this.calculateSpaceIfDrawnHorizontally(availableSpace);\n }\n this.recalculateScale();\n return {\n width: this.boundingRect.width,\n height: this.boundingRect.height,\n };\n }\n\n setBoundingBoxXY(point: Point): void {\n this.boundingRect.x = point.x;\n this.boundingRect.y = point.y;\n }\n\n private getDrawableElementsForLeftAxis(): DrawableElem[] {\n const drawableElement: DrawableElem[] = [];\n if (this.showAxisLine) {\n const x = this.boundingRect.x + this.boundingRect.width - this.axisConfig.axisLineWidth / 2;\n drawableElement.push({\n type: 'path',\n groupTexts: ['left-axis', 'axisl-line'],\n data: [\n {\n path: `M ${x},${this.boundingRect.y} L ${x},${\n this.boundingRect.y + this.boundingRect.height\n } `,\n strokeFill: this.axisThemeConfig.axisLineColor,\n strokeWidth: this.axisConfig.axisLineWidth,\n },\n ],\n });\n }\n if (this.showLabel) {\n drawableElement.push({\n type: 'text',\n groupTexts: ['left-axis', 'label'],\n data: this.getTickValues().map((tick) => ({\n text: tick.toString(),\n x:\n this.boundingRect.x +\n this.boundingRect.width -\n (this.showLabel ? this.axisConfig.labelPadding : 0) -\n (this.showTick ? this.axisConfig.tickLength : 0) -\n (this.showAxisLine ? this.axisConfig.axisLineWidth : 0),\n y: this.getScaleValue(tick),\n fill: this.axisThemeConfig.labelColor,\n fontSize: this.axisConfig.labelFontSize,\n rotation: 0,\n verticalPos: 'middle',\n horizontalPos: 'right',\n })),\n });\n }\n if (this.showTick) {\n const x =\n this.boundingRect.x +\n this.boundingRect.width -\n (this.showAxisLine ? this.axisConfig.axisLineWidth : 0);\n drawableElement.push({\n type: 'path',\n groupTexts: ['left-axis', 'ticks'],\n data: this.getTickValues().map((tick) => ({\n path: `M ${x},${this.getScaleValue(tick)} L ${\n x - this.axisConfig.tickLength\n },${this.getScaleValue(tick)}`,\n strokeFill: this.axisThemeConfig.tickColor,\n strokeWidth: this.axisConfig.tickWidth,\n })),\n });\n }\n if (this.showTitle) {\n drawableElement.push({\n type: 'text',\n groupTexts: ['left-axis', 'title'],\n data: [\n {\n text: this.title,\n x: this.boundingRect.x + this.axisConfig.titlePadding,\n y: this.boundingRect.y + this.boundingRect.height / 2,\n fill: this.axisThemeConfig.titleColor,\n fontSize: this.axisConfig.titleFontSize,\n rotation: 270,\n verticalPos: 'top',\n horizontalPos: 'center',\n },\n ],\n });\n }\n return drawableElement;\n }\n private getDrawableElementsForBottomAxis(): DrawableElem[] {\n const drawableElement: DrawableElem[] = [];\n if (this.showAxisLine) {\n const y = this.boundingRect.y + this.axisConfig.axisLineWidth / 2;\n drawableElement.push({\n type: 'path',\n groupTexts: ['bottom-axis', 'axis-line'],\n data: [\n {\n path: `M ${this.boundingRect.x},${y} L ${\n this.boundingRect.x + this.boundingRect.width\n },${y}`,\n strokeFill: this.axisThemeConfig.axisLineColor,\n strokeWidth: this.axisConfig.axisLineWidth,\n },\n ],\n });\n }\n if (this.showLabel) {\n drawableElement.push({\n type: 'text',\n groupTexts: ['bottom-axis', 'label'],\n data: this.getTickValues().map((tick) => ({\n text: tick.toString(),\n x: this.getScaleValue(tick),\n y:\n this.boundingRect.y +\n this.axisConfig.labelPadding +\n (this.showTick ? this.axisConfig.tickLength : 0) +\n (this.showAxisLine ? this.axisConfig.axisLineWidth : 0),\n fill: this.axisThemeConfig.labelColor,\n fontSize: this.axisConfig.labelFontSize,\n rotation: 0,\n verticalPos: 'top',\n horizontalPos: 'center',\n })),\n });\n }\n if (this.showTick) {\n const y = this.boundingRect.y + (this.showAxisLine ? this.axisConfig.axisLineWidth : 0);\n drawableElement.push({\n type: 'path',\n groupTexts: ['bottom-axis', 'ticks'],\n data: this.getTickValues().map((tick) => ({\n path: `M ${this.getScaleValue(tick)},${y} L ${this.getScaleValue(tick)},${\n y + this.axisConfig.tickLength\n }`,\n strokeFill: this.axisThemeConfig.tickColor,\n strokeWidth: this.axisConfig.tickWidth,\n })),\n });\n }\n if (this.showTitle) {\n drawableElement.push({\n type: 'text',\n groupTexts: ['bottom-axis', 'title'],\n data: [\n {\n text: this.title,\n x: this.range[0] + (this.range[1] - this.range[0]) / 2,\n y:\n this.boundingRect.y +\n this.boundingRect.height -\n this.axisConfig.titlePadding -\n this.titleTextHeight,\n fill: this.axisThemeConfig.titleColor,\n fontSize: this.axisConfig.titleFontSize,\n rotation: 0,\n verticalPos: 'top',\n horizontalPos: 'center',\n },\n ],\n });\n }\n return drawableElement;\n }\n private getDrawableElementsForTopAxis(): DrawableElem[] {\n const drawableElement: DrawableElem[] = [];\n if (this.showAxisLine) {\n const y = this.boundingRect.y + this.boundingRect.height - this.axisConfig.axisLineWidth / 2;\n drawableElement.push({\n type: 'path',\n groupTexts: ['top-axis', 'axis-line'],\n data: [\n {\n path: `M ${this.boundingRect.x},${y} L ${\n this.boundingRect.x + this.boundingRect.width\n },${y}`,\n strokeFill: this.axisThemeConfig.axisLineColor,\n strokeWidth: this.axisConfig.axisLineWidth,\n },\n ],\n });\n }\n if (this.showLabel) {\n drawableElement.push({\n type: 'text',\n groupTexts: ['top-axis', 'label'],\n data: this.getTickValues().map((tick) => ({\n text: tick.toString(),\n x: this.getScaleValue(tick),\n y:\n this.boundingRect.y +\n (this.showTitle ? this.titleTextHeight + this.axisConfig.titlePadding * 2 : 0) +\n this.axisConfig.labelPadding,\n fill: this.axisThemeConfig.labelColor,\n fontSize: this.axisConfig.labelFontSize,\n rotation: 0,\n verticalPos: 'top',\n horizontalPos: 'center',\n })),\n });\n }\n if (this.showTick) {\n const y = this.boundingRect.y;\n drawableElement.push({\n type: 'path',\n groupTexts: ['top-axis', 'ticks'],\n data: this.getTickValues().map((tick) => ({\n path: `M ${this.getScaleValue(tick)},${\n y + this.boundingRect.height - (this.showAxisLine ? this.axisConfig.axisLineWidth : 0)\n } L ${this.getScaleValue(tick)},${\n y +\n this.boundingRect.height -\n this.axisConfig.tickLength -\n (this.showAxisLine ? this.axisConfig.axisLineWidth : 0)\n }`,\n strokeFill: this.axisThemeConfig.tickColor,\n strokeWidth: this.axisConfig.tickWidth,\n })),\n });\n }\n if (this.showTitle) {\n drawableElement.push({\n type: 'text',\n groupTexts: ['top-axis', 'title'],\n data: [\n {\n text: this.title,\n x: this.boundingRect.x + this.boundingRect.width / 2,\n y: this.boundingRect.y + this.axisConfig.titlePadding,\n fill: this.axisThemeConfig.titleColor,\n fontSize: this.axisConfig.titleFontSize,\n rotation: 0,\n verticalPos: 'top',\n horizontalPos: 'center',\n },\n ],\n });\n }\n return drawableElement;\n }\n\n getDrawableElements(): DrawableElem[] {\n if (this.axisPosition === 'left') {\n return this.getDrawableElementsForLeftAxis();\n }\n if (this.axisPosition === 'right') {\n throw Error('Drawing of right axis is not implemented');\n }\n if (this.axisPosition === 'bottom') {\n return this.getDrawableElementsForBottomAxis();\n }\n if (this.axisPosition === 'top') {\n return this.getDrawableElementsForTopAxis();\n }\n return [];\n }\n}\n", "import type { ScaleBand } from 'd3';\nimport { scaleBand } from 'd3';\nimport { log } from '../../../../../logger.js';\nimport type { TextDimensionCalculator } from '../../textDimensionCalculator.js';\nimport { BaseAxis } from './baseAxis.js';\nimport type { XYChartAxisThemeConfig, XYChartAxisConfig } from '../../interfaces.js';\n\nexport class BandAxis extends BaseAxis {\n private scale: ScaleBand;\n private categories: string[];\n\n constructor(\n axisConfig: XYChartAxisConfig,\n axisThemeConfig: XYChartAxisThemeConfig,\n categories: string[],\n title: string,\n textDimensionCalculator: TextDimensionCalculator\n ) {\n super(axisConfig, title, textDimensionCalculator, axisThemeConfig);\n this.categories = categories;\n this.scale = scaleBand().domain(this.categories).range(this.getRange());\n }\n\n setRange(range: [number, number]): void {\n super.setRange(range);\n }\n\n recalculateScale(): void {\n this.scale = scaleBand()\n .domain(this.categories)\n .range(this.getRange())\n .paddingInner(1)\n .paddingOuter(0)\n .align(0.5);\n log.trace('BandAxis axis final categories, range: ', this.categories, this.getRange());\n }\n\n getTickValues(): (string | number)[] {\n return this.categories;\n }\n\n getScaleValue(value: string): number {\n return this.scale(value) ?? this.getRange()[0];\n }\n}\n", "import type { ScaleLinear } from 'd3';\nimport { scaleLinear } from 'd3';\nimport type { TextDimensionCalculator } from '../../textDimensionCalculator.js';\nimport { BaseAxis } from './baseAxis.js';\nimport type { XYChartAxisThemeConfig, XYChartAxisConfig } from '../../interfaces.js';\n\nexport class LinearAxis extends BaseAxis {\n private scale: ScaleLinear;\n private domain: [number, number];\n\n constructor(\n axisConfig: XYChartAxisConfig,\n axisThemeConfig: XYChartAxisThemeConfig,\n domain: [number, number],\n title: string,\n textDimensionCalculator: TextDimensionCalculator\n ) {\n super(axisConfig, title, textDimensionCalculator, axisThemeConfig);\n this.domain = domain;\n this.scale = scaleLinear().domain(this.domain).range(this.getRange());\n }\n\n getTickValues(): (string | number)[] {\n return this.scale.ticks();\n }\n\n recalculateScale(): void {\n const domain = [...this.domain]; // copy the array so if reverse is called two times it should not cancel the reverse effect\n if (this.axisPosition === 'left') {\n domain.reverse(); // since y-axis in svg start from top\n }\n this.scale = scaleLinear().domain(domain).range(this.getRange());\n }\n\n getScaleValue(value: number): number {\n return this.scale(value);\n }\n}\n", "import type { SVGGroup } from '../../../../../diagram-api/types.js';\nimport type {\n AxisDataType,\n ChartComponent,\n XYChartAxisConfig,\n XYChartAxisThemeConfig,\n} from '../../interfaces.js';\nimport { isBandAxisData } from '../../interfaces.js';\nimport { TextDimensionCalculatorWithFont } from '../../textDimensionCalculator.js';\nimport { BandAxis } from './bandAxis.js';\nimport { LinearAxis } from './linearAxis.js';\n\nexport type AxisPosition = 'left' | 'right' | 'top' | 'bottom';\n\nexport interface Axis extends ChartComponent {\n getScaleValue(value: string | number): number;\n setAxisPosition(axisPosition: AxisPosition): void;\n getAxisOuterPadding(): number;\n getTickDistance(): number;\n recalculateOuterPaddingToDrawBar(): void;\n setRange(range: [number, number]): void;\n}\n\nexport function getAxis(\n data: AxisDataType,\n axisConfig: XYChartAxisConfig,\n axisThemeConfig: XYChartAxisThemeConfig,\n tmpSVGGroup: SVGGroup\n): Axis {\n const textDimensionCalculator = new TextDimensionCalculatorWithFont(tmpSVGGroup);\n if (isBandAxisData(data)) {\n return new BandAxis(\n axisConfig,\n axisThemeConfig,\n data.categories,\n data.title,\n textDimensionCalculator\n );\n }\n return new LinearAxis(\n axisConfig,\n axisThemeConfig,\n [data.min, data.max],\n data.title,\n textDimensionCalculator\n );\n}\n", "import type { SVGGroup } from '../../../../diagram-api/types.js';\nimport type {\n BoundingRect,\n ChartComponent,\n Dimension,\n DrawableElem,\n Point,\n XYChartConfig,\n XYChartData,\n XYChartThemeConfig,\n} from '../interfaces.js';\nimport type { TextDimensionCalculator } from '../textDimensionCalculator.js';\nimport { TextDimensionCalculatorWithFont } from '../textDimensionCalculator.js';\n\nexport class ChartTitle implements ChartComponent {\n private boundingRect: BoundingRect;\n private showChartTitle: boolean;\n constructor(\n private textDimensionCalculator: TextDimensionCalculator,\n private chartConfig: XYChartConfig,\n private chartData: XYChartData,\n private chartThemeConfig: XYChartThemeConfig\n ) {\n this.boundingRect = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n };\n this.showChartTitle = false;\n }\n setBoundingBoxXY(point: Point): void {\n this.boundingRect.x = point.x;\n this.boundingRect.y = point.y;\n }\n calculateSpace(availableSpace: Dimension): Dimension {\n const titleDimension = this.textDimensionCalculator.getMaxDimension(\n [this.chartData.title],\n this.chartConfig.titleFontSize\n );\n const widthRequired = Math.max(titleDimension.width, availableSpace.width);\n const heightRequired = titleDimension.height + 2 * this.chartConfig.titlePadding;\n if (\n titleDimension.width <= widthRequired &&\n titleDimension.height <= heightRequired &&\n this.chartConfig.showTitle &&\n this.chartData.title\n ) {\n this.boundingRect.width = widthRequired;\n this.boundingRect.height = heightRequired;\n this.showChartTitle = true;\n }\n\n return {\n width: this.boundingRect.width,\n height: this.boundingRect.height,\n };\n }\n getDrawableElements(): DrawableElem[] {\n const drawableElem: DrawableElem[] = [];\n if (this.showChartTitle) {\n drawableElem.push({\n groupTexts: ['chart-title'],\n type: 'text',\n data: [\n {\n fontSize: this.chartConfig.titleFontSize,\n text: this.chartData.title,\n verticalPos: 'middle',\n horizontalPos: 'center',\n x: this.boundingRect.x + this.boundingRect.width / 2,\n y: this.boundingRect.y + this.boundingRect.height / 2,\n fill: this.chartThemeConfig.titleColor,\n rotation: 0,\n },\n ],\n });\n }\n return drawableElem;\n }\n}\n\nexport function getChartTitleComponent(\n chartConfig: XYChartConfig,\n chartData: XYChartData,\n chartThemeConfig: XYChartThemeConfig,\n tmpSVGGroup: SVGGroup\n): ChartComponent {\n const textDimensionCalculator = new TextDimensionCalculatorWithFont(tmpSVGGroup);\n return new ChartTitle(textDimensionCalculator, chartConfig, chartData, chartThemeConfig);\n}\n", "import { line } from 'd3';\nimport type { DrawableElem, LinePlotData, XYChartConfig } from '../../interfaces.js';\nimport type { Axis } from '../axis/index.js';\n\nexport class LinePlot {\n constructor(\n private plotData: LinePlotData,\n private xAxis: Axis,\n private yAxis: Axis,\n private orientation: XYChartConfig['chartOrientation'],\n private plotIndex: number\n ) {}\n\n getDrawableElement(): DrawableElem[] {\n const finalData: [number, number][] = this.plotData.data.map((d) => [\n this.xAxis.getScaleValue(d[0]),\n this.yAxis.getScaleValue(d[1]),\n ]);\n\n let path: string | null;\n if (this.orientation === 'horizontal') {\n path = line()\n .y((d) => d[0])\n .x((d) => d[1])(finalData);\n } else {\n path = line()\n .x((d) => d[0])\n .y((d) => d[1])(finalData);\n }\n if (!path) {\n return [];\n }\n return [\n {\n groupTexts: ['plot', `line-plot-${this.plotIndex}`],\n type: 'path',\n data: [\n {\n path,\n strokeFill: this.plotData.strokeFill,\n strokeWidth: this.plotData.strokeWidth,\n },\n ],\n },\n ];\n }\n}\n", "import type { BarPlotData, BoundingRect, DrawableElem, XYChartConfig } from '../../interfaces.js';\nimport type { Axis } from '../axis/index.js';\n\nexport class BarPlot {\n constructor(\n private barData: BarPlotData,\n private boundingRect: BoundingRect,\n private xAxis: Axis,\n private yAxis: Axis,\n private orientation: XYChartConfig['chartOrientation'],\n private plotIndex: number\n ) {}\n\n getDrawableElement(): DrawableElem[] {\n const finalData: [number, number][] = this.barData.data.map((d) => [\n this.xAxis.getScaleValue(d[0]),\n this.yAxis.getScaleValue(d[1]),\n ]);\n\n const barPaddingPercent = 0.05;\n\n const barWidth =\n Math.min(this.xAxis.getAxisOuterPadding() * 2, this.xAxis.getTickDistance()) *\n (1 - barPaddingPercent);\n const barWidthHalf = barWidth / 2;\n\n if (this.orientation === 'horizontal') {\n return [\n {\n groupTexts: ['plot', `bar-plot-${this.plotIndex}`],\n type: 'rect',\n data: finalData.map((data) => ({\n x: this.boundingRect.x,\n y: data[0] - barWidthHalf,\n height: barWidth,\n width: data[1] - this.boundingRect.x,\n fill: this.barData.fill,\n strokeWidth: 0,\n strokeFill: this.barData.fill,\n })),\n },\n ];\n }\n return [\n {\n groupTexts: ['plot', `bar-plot-${this.plotIndex}`],\n type: 'rect',\n data: finalData.map((data) => ({\n x: data[0] - barWidthHalf,\n y: data[1],\n width: barWidth,\n height: this.boundingRect.y + this.boundingRect.height - data[1],\n fill: this.barData.fill,\n strokeWidth: 0,\n strokeFill: this.barData.fill,\n })),\n },\n ];\n }\n}\n", "import type {\n XYChartData,\n Dimension,\n BoundingRect,\n DrawableElem,\n Point,\n XYChartThemeConfig,\n XYChartConfig,\n} from '../../interfaces.js';\nimport type { Axis } from '../axis/index.js';\nimport type { ChartComponent } from '../../interfaces.js';\nimport { LinePlot } from './linePlot.js';\nimport { BarPlot } from './barPlot.js';\n\nexport interface Plot extends ChartComponent {\n setAxes(xAxis: Axis, yAxis: Axis): void;\n}\n\nexport class BasePlot implements Plot {\n private boundingRect: BoundingRect;\n private xAxis?: Axis;\n private yAxis?: Axis;\n\n constructor(\n private chartConfig: XYChartConfig,\n private chartData: XYChartData,\n private chartThemeConfig: XYChartThemeConfig\n ) {\n this.boundingRect = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n };\n }\n setAxes(xAxis: Axis, yAxis: Axis) {\n this.xAxis = xAxis;\n this.yAxis = yAxis;\n }\n setBoundingBoxXY(point: Point): void {\n this.boundingRect.x = point.x;\n this.boundingRect.y = point.y;\n }\n calculateSpace(availableSpace: Dimension): Dimension {\n this.boundingRect.width = availableSpace.width;\n this.boundingRect.height = availableSpace.height;\n\n return {\n width: this.boundingRect.width,\n height: this.boundingRect.height,\n };\n }\n getDrawableElements(): DrawableElem[] {\n if (!(this.xAxis && this.yAxis)) {\n throw Error('Axes must be passed to render Plots');\n }\n const drawableElem: DrawableElem[] = [];\n for (const [i, plot] of this.chartData.plots.entries()) {\n switch (plot.type) {\n case 'line':\n {\n const linePlot = new LinePlot(\n plot,\n this.xAxis,\n this.yAxis,\n this.chartConfig.chartOrientation,\n i\n );\n drawableElem.push(...linePlot.getDrawableElement());\n }\n break;\n case 'bar':\n {\n const barPlot = new BarPlot(\n plot,\n this.boundingRect,\n this.xAxis,\n this.yAxis,\n this.chartConfig.chartOrientation,\n i\n );\n drawableElem.push(...barPlot.getDrawableElement());\n }\n break;\n }\n }\n return drawableElem;\n }\n}\n\nexport function getPlotComponent(\n chartConfig: XYChartConfig,\n chartData: XYChartData,\n chartThemeConfig: XYChartThemeConfig\n): Plot {\n return new BasePlot(chartConfig, chartData, chartThemeConfig);\n}\n", "import type { SVGGroup } from '../../../diagram-api/types.js';\nimport type { Axis } from './components/axis/index.js';\nimport { getAxis } from './components/axis/index.js';\nimport { getChartTitleComponent } from './components/chartTitle.js';\nimport type { Plot } from './components/plot/index.js';\nimport { getPlotComponent } from './components/plot/index.js';\nimport type {\n ChartComponent,\n DrawableElem,\n XYChartConfig,\n XYChartData,\n XYChartThemeConfig,\n} from './interfaces.js';\nimport { isBarPlot } from './interfaces.js';\n\nexport class Orchestrator {\n private componentStore: {\n title: ChartComponent;\n plot: Plot;\n xAxis: Axis;\n yAxis: Axis;\n };\n constructor(\n private chartConfig: XYChartConfig,\n private chartData: XYChartData,\n chartThemeConfig: XYChartThemeConfig,\n tmpSVGGroup: SVGGroup\n ) {\n this.componentStore = {\n title: getChartTitleComponent(chartConfig, chartData, chartThemeConfig, tmpSVGGroup),\n plot: getPlotComponent(chartConfig, chartData, chartThemeConfig),\n xAxis: getAxis(\n chartData.xAxis,\n chartConfig.xAxis,\n {\n titleColor: chartThemeConfig.xAxisTitleColor,\n labelColor: chartThemeConfig.xAxisLabelColor,\n tickColor: chartThemeConfig.xAxisTickColor,\n axisLineColor: chartThemeConfig.xAxisLineColor,\n },\n tmpSVGGroup\n ),\n yAxis: getAxis(\n chartData.yAxis,\n chartConfig.yAxis,\n {\n titleColor: chartThemeConfig.yAxisTitleColor,\n labelColor: chartThemeConfig.yAxisLabelColor,\n tickColor: chartThemeConfig.yAxisTickColor,\n axisLineColor: chartThemeConfig.yAxisLineColor,\n },\n tmpSVGGroup\n ),\n };\n }\n\n private calculateVerticalSpace() {\n let availableWidth = this.chartConfig.width;\n let availableHeight = this.chartConfig.height;\n let plotX = 0;\n let plotY = 0;\n let chartWidth = Math.floor((availableWidth * this.chartConfig.plotReservedSpacePercent) / 100);\n let chartHeight = Math.floor(\n (availableHeight * this.chartConfig.plotReservedSpacePercent) / 100\n );\n let spaceUsed = this.componentStore.plot.calculateSpace({\n width: chartWidth,\n height: chartHeight,\n });\n availableWidth -= spaceUsed.width;\n availableHeight -= spaceUsed.height;\n\n spaceUsed = this.componentStore.title.calculateSpace({\n width: this.chartConfig.width,\n height: availableHeight,\n });\n plotY = spaceUsed.height;\n availableHeight -= spaceUsed.height;\n this.componentStore.xAxis.setAxisPosition('bottom');\n spaceUsed = this.componentStore.xAxis.calculateSpace({\n width: availableWidth,\n height: availableHeight,\n });\n availableHeight -= spaceUsed.height;\n this.componentStore.yAxis.setAxisPosition('left');\n spaceUsed = this.componentStore.yAxis.calculateSpace({\n width: availableWidth,\n height: availableHeight,\n });\n plotX = spaceUsed.width;\n availableWidth -= spaceUsed.width;\n if (availableWidth > 0) {\n chartWidth += availableWidth;\n availableWidth = 0;\n }\n if (availableHeight > 0) {\n chartHeight += availableHeight;\n availableHeight = 0;\n }\n this.componentStore.plot.calculateSpace({\n width: chartWidth,\n height: chartHeight,\n });\n\n this.componentStore.plot.setBoundingBoxXY({ x: plotX, y: plotY });\n this.componentStore.xAxis.setRange([plotX, plotX + chartWidth]);\n this.componentStore.xAxis.setBoundingBoxXY({ x: plotX, y: plotY + chartHeight });\n this.componentStore.yAxis.setRange([plotY, plotY + chartHeight]);\n this.componentStore.yAxis.setBoundingBoxXY({ x: 0, y: plotY });\n if (this.chartData.plots.some((p) => isBarPlot(p))) {\n this.componentStore.xAxis.recalculateOuterPaddingToDrawBar();\n }\n }\n\n private calculateHorizontalSpace() {\n let availableWidth = this.chartConfig.width;\n let availableHeight = this.chartConfig.height;\n let titleYEnd = 0;\n let plotX = 0;\n let plotY = 0;\n let chartWidth = Math.floor((availableWidth * this.chartConfig.plotReservedSpacePercent) / 100);\n let chartHeight = Math.floor(\n (availableHeight * this.chartConfig.plotReservedSpacePercent) / 100\n );\n let spaceUsed = this.componentStore.plot.calculateSpace({\n width: chartWidth,\n height: chartHeight,\n });\n availableWidth -= spaceUsed.width;\n availableHeight -= spaceUsed.height;\n\n spaceUsed = this.componentStore.title.calculateSpace({\n width: this.chartConfig.width,\n height: availableHeight,\n });\n titleYEnd = spaceUsed.height;\n availableHeight -= spaceUsed.height;\n this.componentStore.xAxis.setAxisPosition('left');\n spaceUsed = this.componentStore.xAxis.calculateSpace({\n width: availableWidth,\n height: availableHeight,\n });\n availableWidth -= spaceUsed.width;\n plotX = spaceUsed.width;\n this.componentStore.yAxis.setAxisPosition('top');\n spaceUsed = this.componentStore.yAxis.calculateSpace({\n width: availableWidth,\n height: availableHeight,\n });\n availableHeight -= spaceUsed.height;\n plotY = titleYEnd + spaceUsed.height;\n if (availableWidth > 0) {\n chartWidth += availableWidth;\n availableWidth = 0;\n }\n if (availableHeight > 0) {\n chartHeight += availableHeight;\n availableHeight = 0;\n }\n this.componentStore.plot.calculateSpace({\n width: chartWidth,\n height: chartHeight,\n });\n\n this.componentStore.plot.setBoundingBoxXY({ x: plotX, y: plotY });\n this.componentStore.yAxis.setRange([plotX, plotX + chartWidth]);\n this.componentStore.yAxis.setBoundingBoxXY({ x: plotX, y: titleYEnd });\n this.componentStore.xAxis.setRange([plotY, plotY + chartHeight]);\n this.componentStore.xAxis.setBoundingBoxXY({ x: 0, y: plotY });\n if (this.chartData.plots.some((p) => isBarPlot(p))) {\n this.componentStore.xAxis.recalculateOuterPaddingToDrawBar();\n }\n }\n\n private calculateSpace() {\n if (this.chartConfig.chartOrientation === 'horizontal') {\n this.calculateHorizontalSpace();\n } else {\n this.calculateVerticalSpace();\n }\n }\n\n getDrawableElement() {\n this.calculateSpace();\n const drawableElem: DrawableElem[] = [];\n this.componentStore.plot.setAxes(this.componentStore.xAxis, this.componentStore.yAxis);\n for (const component of Object.values(this.componentStore)) {\n drawableElem.push(...component.getDrawableElements());\n }\n return drawableElem;\n }\n}\n", "import type { SVGGroup } from '../../../diagram-api/types.js';\nimport type { DrawableElem, XYChartConfig, XYChartData, XYChartThemeConfig } from './interfaces.js';\nimport { Orchestrator } from './orchestrator.js';\n\nexport class XYChartBuilder {\n static build(\n config: XYChartConfig,\n chartData: XYChartData,\n chartThemeConfig: XYChartThemeConfig,\n tmpSVGGroup: SVGGroup\n ): DrawableElem[] {\n const orchestrator = new Orchestrator(config, chartData, chartThemeConfig, tmpSVGGroup);\n return orchestrator.getDrawableElement();\n }\n}\n", "import * as configApi from '../../config.js';\nimport defaultConfig from '../../defaultConfig.js';\nimport type { SVGGroup } from '../../diagram-api/types.js';\nimport { getThemeVariables } from '../../themes/theme-default.js';\nimport { cleanAndMerge } from '../../utils.js';\nimport { sanitizeText } from '../common/common.js';\nimport {\n clear as commonClear,\n getAccDescription,\n getAccTitle,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle,\n} from '../common/commonDb.js';\nimport { XYChartBuilder } from './chartBuilder/index.js';\nimport type {\n DrawableElem,\n SimplePlotDataType,\n XYChartConfig,\n XYChartData,\n XYChartThemeConfig,\n} from './chartBuilder/interfaces.js';\nimport { isBandAxisData, isLinearAxisData } from './chartBuilder/interfaces.js';\n\nlet plotIndex = 0;\n\nlet tmpSVGGroup: SVGGroup;\n\nlet xyChartConfig: XYChartConfig = getChartDefaultConfig();\nlet xyChartThemeConfig: XYChartThemeConfig = getChartDefaultThemeConfig();\nlet xyChartData: XYChartData = getChartDefaultData();\nlet plotColorPalette = xyChartThemeConfig.plotColorPalette.split(',').map((color) => color.trim());\nlet hasSetXAxis = false;\nlet hasSetYAxis = false;\n\ninterface NormalTextType {\n type: 'text';\n text: string;\n}\n\nfunction getChartDefaultThemeConfig(): XYChartThemeConfig {\n const defaultThemeVariables = getThemeVariables();\n const config = configApi.getConfig();\n return cleanAndMerge(defaultThemeVariables.xyChart, config.themeVariables.xyChart);\n}\nfunction getChartDefaultConfig(): XYChartConfig {\n const config = configApi.getConfig();\n return cleanAndMerge(\n defaultConfig.xyChart as XYChartConfig,\n config.xyChart as XYChartConfig\n );\n}\n\nfunction getChartDefaultData(): XYChartData {\n return {\n yAxis: {\n type: 'linear',\n title: '',\n min: Infinity,\n max: -Infinity,\n },\n xAxis: {\n type: 'band',\n title: '',\n categories: [],\n },\n title: '',\n plots: [],\n };\n}\n\nfunction textSanitizer(text: string) {\n const config = configApi.getConfig();\n return sanitizeText(text.trim(), config);\n}\n\nfunction setTmpSVGG(SVGG: SVGGroup) {\n tmpSVGGroup = SVGG;\n}\nfunction setOrientation(orientation: string) {\n if (orientation === 'horizontal') {\n xyChartConfig.chartOrientation = 'horizontal';\n } else {\n xyChartConfig.chartOrientation = 'vertical';\n }\n}\nfunction setXAxisTitle(title: NormalTextType) {\n xyChartData.xAxis.title = textSanitizer(title.text);\n}\nfunction setXAxisRangeData(min: number, max: number) {\n xyChartData.xAxis = { type: 'linear', title: xyChartData.xAxis.title, min, max };\n hasSetXAxis = true;\n}\nfunction setXAxisBand(categories: NormalTextType[]) {\n xyChartData.xAxis = {\n type: 'band',\n title: xyChartData.xAxis.title,\n categories: categories.map((c) => textSanitizer(c.text)),\n };\n hasSetXAxis = true;\n}\nfunction setYAxisTitle(title: NormalTextType) {\n xyChartData.yAxis.title = textSanitizer(title.text);\n}\nfunction setYAxisRangeData(min: number, max: number) {\n xyChartData.yAxis = { type: 'linear', title: xyChartData.yAxis.title, min, max };\n hasSetYAxis = true;\n}\n\n// this function does not set `hasSetYAxis` as there can be multiple data so we should calculate the range accordingly\nfunction setYAxisRangeFromPlotData(data: number[]) {\n const minValue = Math.min(...data);\n const maxValue = Math.max(...data);\n const prevMinValue = isLinearAxisData(xyChartData.yAxis) ? xyChartData.yAxis.min : Infinity;\n const prevMaxValue = isLinearAxisData(xyChartData.yAxis) ? xyChartData.yAxis.max : -Infinity;\n xyChartData.yAxis = {\n type: 'linear',\n title: xyChartData.yAxis.title,\n min: Math.min(prevMinValue, minValue),\n max: Math.max(prevMaxValue, maxValue),\n };\n}\n\nfunction transformDataWithoutCategory(data: number[]): SimplePlotDataType {\n let retData: SimplePlotDataType = [];\n if (data.length === 0) {\n return retData;\n }\n if (!hasSetXAxis) {\n const prevMinValue = isLinearAxisData(xyChartData.xAxis) ? xyChartData.xAxis.min : Infinity;\n const prevMaxValue = isLinearAxisData(xyChartData.xAxis) ? xyChartData.xAxis.max : -Infinity;\n setXAxisRangeData(Math.min(prevMinValue, 1), Math.max(prevMaxValue, data.length));\n }\n if (!hasSetYAxis) {\n setYAxisRangeFromPlotData(data);\n }\n\n if (isBandAxisData(xyChartData.xAxis)) {\n retData = xyChartData.xAxis.categories.map((c, i) => [c, data[i]]);\n }\n\n if (isLinearAxisData(xyChartData.xAxis)) {\n const min = xyChartData.xAxis.min;\n const max = xyChartData.xAxis.max;\n const step = (max - min) / (data.length - 1);\n const categories: string[] = [];\n for (let i = min; i <= max; i += step) {\n categories.push(`${i}`);\n }\n retData = categories.map((c, i) => [c, data[i]]);\n }\n\n return retData;\n}\n\nfunction getPlotColorFromPalette(plotIndex: number): string {\n return plotColorPalette[plotIndex === 0 ? 0 : plotIndex % plotColorPalette.length];\n}\n\nfunction setLineData(title: NormalTextType, data: number[]) {\n const plotData = transformDataWithoutCategory(data);\n xyChartData.plots.push({\n type: 'line',\n strokeFill: getPlotColorFromPalette(plotIndex),\n strokeWidth: 2,\n data: plotData,\n });\n plotIndex++;\n}\n\nfunction setBarData(title: NormalTextType, data: number[]) {\n const plotData = transformDataWithoutCategory(data);\n xyChartData.plots.push({\n type: 'bar',\n fill: getPlotColorFromPalette(plotIndex),\n data: plotData,\n });\n plotIndex++;\n}\n\nfunction getDrawableElem(): DrawableElem[] {\n if (xyChartData.plots.length === 0) {\n throw Error('No Plot to render, please provide a plot with some data');\n }\n xyChartData.title = getDiagramTitle();\n return XYChartBuilder.build(xyChartConfig, xyChartData, xyChartThemeConfig, tmpSVGGroup);\n}\n\nfunction getChartThemeConfig() {\n return xyChartThemeConfig;\n}\n\nfunction getChartConfig() {\n return xyChartConfig;\n}\n\nfunction getXYChartData() {\n return xyChartData;\n}\n\nconst clear = function () {\n commonClear();\n plotIndex = 0;\n xyChartConfig = getChartDefaultConfig();\n xyChartData = getChartDefaultData();\n xyChartThemeConfig = getChartDefaultThemeConfig();\n plotColorPalette = xyChartThemeConfig.plotColorPalette.split(',').map((color) => color.trim());\n hasSetXAxis = false;\n hasSetYAxis = false;\n};\n\nexport default {\n getDrawableElem,\n clear,\n setAccTitle,\n getAccTitle,\n setDiagramTitle,\n getDiagramTitle,\n getAccDescription,\n setAccDescription,\n setOrientation,\n setXAxisTitle,\n setXAxisRangeData,\n setXAxisBand,\n setYAxisTitle,\n setYAxisRangeData,\n setLineData,\n setBarData,\n setTmpSVGG,\n getChartThemeConfig,\n getChartConfig,\n getXYChartData,\n};\n", "import type { Diagram } from '../../Diagram.js';\nimport { log } from '../../logger.js';\nimport { selectSvgElement } from '../../rendering-util/selectSvgElement.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\nimport type {\n DrawableElem,\n TextElem,\n TextHorizontalPos,\n TextVerticalPos,\n} from './chartBuilder/interfaces.js';\nimport type XYChartDB from './xychartDb.js';\n\nexport const draw = (txt: string, id: string, _version: string, diagObj: Diagram) => {\n const db = diagObj.db as typeof XYChartDB;\n const themeConfig = db.getChartThemeConfig();\n const chartConfig = db.getChartConfig();\n const labelData = db.getXYChartData().plots[0].data.map((data) => data[1]);\n function getDominantBaseLine(horizontalPos: TextVerticalPos) {\n return horizontalPos === 'top' ? 'text-before-edge' : 'middle';\n }\n\n function getTextAnchor(verticalPos: TextHorizontalPos) {\n return verticalPos === 'left' ? 'start' : verticalPos === 'right' ? 'end' : 'middle';\n }\n\n function getTextTransformation(data: TextElem) {\n return `translate(${data.x}, ${data.y}) rotate(${data.rotation || 0})`;\n }\n\n log.debug('Rendering xychart chart\\n' + txt);\n\n const svg = selectSvgElement(id);\n const group = svg.append('g').attr('class', 'main');\n const background = group\n .append('rect')\n .attr('width', chartConfig.width)\n .attr('height', chartConfig.height)\n .attr('class', 'background');\n\n // @ts-ignore: TODO Fix ts errors\n configureSvgSize(svg, chartConfig.height, chartConfig.width, true);\n\n svg.attr('viewBox', `0 0 ${chartConfig.width} ${chartConfig.height}`);\n\n background.attr('fill', themeConfig.backgroundColor);\n\n db.setTmpSVGG(svg.append('g').attr('class', 'mermaid-tmp-group'));\n\n const shapes: DrawableElem[] = db.getDrawableElem();\n\n const groups: Record = {};\n\n interface BarItem {\n data: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n label: string;\n }\n\n function getGroup(gList: string[]) {\n let elem = group;\n let prefix = '';\n for (const [i] of gList.entries()) {\n let parent = group;\n if (i > 0 && groups[prefix]) {\n parent = groups[prefix];\n }\n prefix += gList[i];\n elem = groups[prefix];\n if (!elem) {\n elem = groups[prefix] = parent.append('g').attr('class', gList[i]);\n }\n }\n return elem;\n }\n\n for (const shape of shapes) {\n if (shape.data.length === 0) {\n continue;\n }\n\n const shapeGroup = getGroup(shape.groupTexts);\n\n switch (shape.type) {\n case 'rect':\n shapeGroup\n .selectAll('rect')\n .data(shape.data)\n .enter()\n .append('rect')\n .attr('x', (data) => data.x)\n .attr('y', (data) => data.y)\n .attr('width', (data) => data.width)\n .attr('height', (data) => data.height)\n .attr('fill', (data) => data.fill)\n .attr('stroke', (data) => data.strokeFill)\n .attr('stroke-width', (data) => data.strokeWidth);\n\n if (chartConfig.showDataLabel) {\n if (chartConfig.chartOrientation === 'horizontal') {\n // Factor to approximate each character's width.\n const charWidthFactor = 0.7;\n\n // Filter out bars that have zero width or height.\n const validItems = shape.data\n .map((d, i) => ({ data: d, label: labelData[i].toString() }))\n .filter((item) => item.data.width > 0 && item.data.height > 0);\n\n // Helper function to check if the text fits horizontally with a 10px right margin.\n function fitsHorizontally(item: BarItem, fontSize: number): boolean {\n const { data, label } = item;\n // Approximate the text width.\n const textWidth: number = fontSize * label.length * charWidthFactor;\n // The available width is the bar's width minus a 10px right margin.\n return textWidth <= data.width - 10;\n }\n\n // For each valid bar, start with an initial candidate font size (70% of the bar's height),\n // then reduce it until the text fits horizontally.\n const candidateFontSizes = validItems.map((item) => {\n const { data } = item;\n let fontSize = data.height * 0.7;\n // Decrease fontSize until the text fits horizontally.\n while (!fitsHorizontally(item, fontSize) && fontSize > 0) {\n fontSize -= 1;\n }\n return fontSize;\n });\n\n // Choose the smallest candidate font size across all valid bars for uniformity.\n const uniformFontSize = Math.floor(Math.min(...candidateFontSizes));\n\n shapeGroup\n .selectAll('text')\n .data(validItems)\n .enter()\n .append('text')\n .attr('x', (item) => item.data.x + item.data.width - 10)\n .attr('y', (item) => item.data.y + item.data.height / 2)\n .attr('text-anchor', 'end')\n .attr('dominant-baseline', 'middle')\n .attr('fill', 'black')\n .attr('font-size', `${uniformFontSize}px`)\n .text((item) => item.label);\n } else {\n const yOffset = 10;\n\n // filter out bars that have zero width or height.\n const validItems = shape.data\n .map((d, i) => ({ data: d, label: labelData[i].toString() }))\n .filter((item) => item.data.width > 0 && item.data.height > 0);\n\n // Helper function that checks if the text with a given fontSize fits within the bar boundaries.\n function fitsInBar(item: BarItem, fontSize: number, yOffset: number): boolean {\n const { data, label } = item;\n const charWidthFactor = 0.7;\n const textWidth = fontSize * label.length * charWidthFactor;\n\n // Compute horizontal boundaries using the center.\n const centerX = data.x + data.width / 2;\n const leftEdge = centerX - textWidth / 2;\n const rightEdge = centerX + textWidth / 2;\n\n // Check that text doesn't overflow horizontally.\n const horizontalFits = leftEdge >= data.x && rightEdge <= data.x + data.width;\n\n // For vertical placement, we use 'dominant-baseline: hanging' so that y marks the top of the text.\n // Thus, the bottom edge is y + yOffset + fontSize.\n const verticalFits = data.y + yOffset + fontSize <= data.y + data.height;\n\n return horizontalFits && verticalFits;\n }\n\n // For each valid item, start with a candidate font size based on the width,\n // then reduce it until the text fits within both the horizontal and vertical boundaries.\n const candidateFontSizes = validItems.map((item) => {\n const { data, label } = item;\n let fontSize = data.width / (label.length * 0.7);\n\n // Decrease the font size until the text fits or fontSize reaches 0.\n while (!fitsInBar(item, fontSize, yOffset) && fontSize > 0) {\n fontSize -= 1;\n }\n return fontSize;\n });\n\n // Choose the smallest candidate across all valid bars for uniformity.\n const uniformFontSize = Math.floor(Math.min(...candidateFontSizes));\n\n // Render text only for valid items.\n shapeGroup\n .selectAll('text')\n .data(validItems)\n .enter()\n .append('text')\n .attr('x', (item) => item.data.x + item.data.width / 2)\n .attr('y', (item) => item.data.y + yOffset)\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'hanging')\n .attr('fill', 'black')\n .attr('font-size', `${uniformFontSize}px`)\n .text((item) => item.label);\n }\n }\n break;\n case 'text':\n shapeGroup\n .selectAll('text')\n .data(shape.data)\n .enter()\n .append('text')\n .attr('x', 0)\n .attr('y', 0)\n .attr('fill', (data) => data.fill)\n .attr('font-size', (data) => data.fontSize)\n .attr('dominant-baseline', (data) => getDominantBaseLine(data.verticalPos))\n .attr('text-anchor', (data) => getTextAnchor(data.horizontalPos))\n .attr('transform', (data) => getTextTransformation(data))\n .text((data) => data.text);\n break;\n case 'path':\n shapeGroup\n .selectAll('path')\n .data(shape.data)\n .enter()\n .append('path')\n .attr('d', (data) => data.path)\n .attr('fill', (data) => (data.fill ? data.fill : 'none'))\n .attr('stroke', (data) => data.strokeFill)\n .attr('stroke-width', (data) => data.strokeWidth);\n break;\n }\n }\n};\n\nexport default {\n draw,\n};\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\n// @ts-ignore: Jison doesn't support types.\nimport parser from './parser/xychart.jison';\nimport db from './xychartDb.js';\nimport renderer from './xychartRenderer.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n db,\n renderer,\n};\n", "/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,3],$V1=[1,4],$V2=[1,5],$V3=[1,6],$V4=[5,6,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],$V5=[1,22],$V6=[2,7],$V7=[1,26],$V8=[1,27],$V9=[1,28],$Va=[1,29],$Vb=[1,33],$Vc=[1,34],$Vd=[1,35],$Ve=[1,36],$Vf=[1,37],$Vg=[1,38],$Vh=[1,24],$Vi=[1,31],$Vj=[1,32],$Vk=[1,30],$Vl=[1,39],$Vm=[1,40],$Vn=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],$Vo=[1,61],$Vp=[89,90],$Vq=[5,8,9,11,13,21,22,23,24,27,29,41,42,43,44,45,46,54,61,63,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],$Vr=[27,29],$Vs=[1,70],$Vt=[1,71],$Vu=[1,72],$Vv=[1,73],$Vw=[1,74],$Vx=[1,75],$Vy=[1,76],$Vz=[1,83],$VA=[1,80],$VB=[1,84],$VC=[1,85],$VD=[1,86],$VE=[1,87],$VF=[1,88],$VG=[1,89],$VH=[1,90],$VI=[1,91],$VJ=[1,92],$VK=[5,8,9,11,13,21,22,23,24,27,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],$VL=[63,64],$VM=[1,101],$VN=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,76,77,89,90],$VO=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],$VP=[1,110],$VQ=[1,106],$VR=[1,107],$VS=[1,108],$VT=[1,109],$VU=[1,111],$VV=[1,116],$VW=[1,117],$VX=[1,114],$VY=[1,115];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"directive\":4,\"NEWLINE\":5,\"RD\":6,\"diagram\":7,\"EOF\":8,\"acc_title\":9,\"acc_title_value\":10,\"acc_descr\":11,\"acc_descr_value\":12,\"acc_descr_multiline_value\":13,\"requirementDef\":14,\"elementDef\":15,\"relationshipDef\":16,\"direction\":17,\"styleStatement\":18,\"classDefStatement\":19,\"classStatement\":20,\"direction_tb\":21,\"direction_bt\":22,\"direction_rl\":23,\"direction_lr\":24,\"requirementType\":25,\"requirementName\":26,\"STRUCT_START\":27,\"requirementBody\":28,\"STYLE_SEPARATOR\":29,\"idList\":30,\"ID\":31,\"COLONSEP\":32,\"id\":33,\"TEXT\":34,\"text\":35,\"RISK\":36,\"riskLevel\":37,\"VERIFYMTHD\":38,\"verifyType\":39,\"STRUCT_STOP\":40,\"REQUIREMENT\":41,\"FUNCTIONAL_REQUIREMENT\":42,\"INTERFACE_REQUIREMENT\":43,\"PERFORMANCE_REQUIREMENT\":44,\"PHYSICAL_REQUIREMENT\":45,\"DESIGN_CONSTRAINT\":46,\"LOW_RISK\":47,\"MED_RISK\":48,\"HIGH_RISK\":49,\"VERIFY_ANALYSIS\":50,\"VERIFY_DEMONSTRATION\":51,\"VERIFY_INSPECTION\":52,\"VERIFY_TEST\":53,\"ELEMENT\":54,\"elementName\":55,\"elementBody\":56,\"TYPE\":57,\"type\":58,\"DOCREF\":59,\"ref\":60,\"END_ARROW_L\":61,\"relationship\":62,\"LINE\":63,\"END_ARROW_R\":64,\"CONTAINS\":65,\"COPIES\":66,\"DERIVES\":67,\"SATISFIES\":68,\"VERIFIES\":69,\"REFINES\":70,\"TRACES\":71,\"CLASSDEF\":72,\"stylesOpt\":73,\"CLASS\":74,\"ALPHA\":75,\"COMMA\":76,\"STYLE\":77,\"style\":78,\"styleComponent\":79,\"NUM\":80,\"COLON\":81,\"UNIT\":82,\"SPACE\":83,\"BRKT\":84,\"PCT\":85,\"MINUS\":86,\"LABEL\":87,\"SEMICOLON\":88,\"unqString\":89,\"qString\":90,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"NEWLINE\",6:\"RD\",8:\"EOF\",9:\"acc_title\",10:\"acc_title_value\",11:\"acc_descr\",12:\"acc_descr_value\",13:\"acc_descr_multiline_value\",21:\"direction_tb\",22:\"direction_bt\",23:\"direction_rl\",24:\"direction_lr\",27:\"STRUCT_START\",29:\"STYLE_SEPARATOR\",31:\"ID\",32:\"COLONSEP\",34:\"TEXT\",36:\"RISK\",38:\"VERIFYMTHD\",40:\"STRUCT_STOP\",41:\"REQUIREMENT\",42:\"FUNCTIONAL_REQUIREMENT\",43:\"INTERFACE_REQUIREMENT\",44:\"PERFORMANCE_REQUIREMENT\",45:\"PHYSICAL_REQUIREMENT\",46:\"DESIGN_CONSTRAINT\",47:\"LOW_RISK\",48:\"MED_RISK\",49:\"HIGH_RISK\",50:\"VERIFY_ANALYSIS\",51:\"VERIFY_DEMONSTRATION\",52:\"VERIFY_INSPECTION\",53:\"VERIFY_TEST\",54:\"ELEMENT\",57:\"TYPE\",59:\"DOCREF\",61:\"END_ARROW_L\",63:\"LINE\",64:\"END_ARROW_R\",65:\"CONTAINS\",66:\"COPIES\",67:\"DERIVES\",68:\"SATISFIES\",69:\"VERIFIES\",70:\"REFINES\",71:\"TRACES\",72:\"CLASSDEF\",74:\"CLASS\",75:\"ALPHA\",76:\"COMMA\",77:\"STYLE\",80:\"NUM\",81:\"COLON\",82:\"UNIT\",83:\"SPACE\",84:\"BRKT\",85:\"PCT\",86:\"MINUS\",87:\"LABEL\",88:\"SEMICOLON\",89:\"unqString\",90:\"qString\"},\nproductions_: [0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[17,1],[17,1],[17,1],[17,1],[14,5],[14,7],[28,5],[28,5],[28,5],[28,5],[28,2],[28,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[37,1],[37,1],[37,1],[39,1],[39,1],[39,1],[39,1],[15,5],[15,7],[56,5],[56,5],[56,2],[56,1],[16,5],[16,5],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[19,3],[20,3],[20,3],[30,1],[30,3],[30,1],[30,3],[18,3],[73,1],[73,3],[78,1],[78,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[26,1],[26,1],[33,1],[33,1],[35,1],[35,1],[55,1],[55,1],[58,1],[58,1],[60,1],[60,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 4:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 5: case 6:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 7:\n this.$ = [] \nbreak;\ncase 17:\n yy.setDirection('TB');\nbreak;\ncase 18:\n yy.setDirection('BT');\nbreak;\ncase 19:\n yy.setDirection('RL');\nbreak;\ncase 20:\n yy.setDirection('LR');\nbreak;\ncase 21:\n yy.addRequirement($$[$0-3], $$[$0-4]) \nbreak;\ncase 22:\n yy.addRequirement($$[$0-5], $$[$0-6]); yy.setClass([$$[$0-5]], $$[$0-3]); \nbreak;\ncase 23:\n yy.setNewReqId($$[$0-2]); \nbreak;\ncase 24:\n yy.setNewReqText($$[$0-2]); \nbreak;\ncase 25:\n yy.setNewReqRisk($$[$0-2]); \nbreak;\ncase 26:\n yy.setNewReqVerifyMethod($$[$0-2]); \nbreak;\ncase 29:\n this.$=yy.RequirementType.REQUIREMENT;\nbreak;\ncase 30:\n this.$=yy.RequirementType.FUNCTIONAL_REQUIREMENT;\nbreak;\ncase 31:\n this.$=yy.RequirementType.INTERFACE_REQUIREMENT;\nbreak;\ncase 32:\n this.$=yy.RequirementType.PERFORMANCE_REQUIREMENT;\nbreak;\ncase 33:\n this.$=yy.RequirementType.PHYSICAL_REQUIREMENT;\nbreak;\ncase 34:\n this.$=yy.RequirementType.DESIGN_CONSTRAINT;\nbreak;\ncase 35:\n this.$=yy.RiskLevel.LOW_RISK;\nbreak;\ncase 36:\n this.$=yy.RiskLevel.MED_RISK;\nbreak;\ncase 37:\n this.$=yy.RiskLevel.HIGH_RISK;\nbreak;\ncase 38:\n this.$=yy.VerifyType.VERIFY_ANALYSIS;\nbreak;\ncase 39:\n this.$=yy.VerifyType.VERIFY_DEMONSTRATION;\nbreak;\ncase 40:\n this.$=yy.VerifyType.VERIFY_INSPECTION;\nbreak;\ncase 41:\n this.$=yy.VerifyType.VERIFY_TEST;\nbreak;\ncase 42:\n yy.addElement($$[$0-3]) \nbreak;\ncase 43:\n yy.addElement($$[$0-5]); yy.setClass([$$[$0-5]], $$[$0-3]); \nbreak;\ncase 44:\n yy.setNewElementType($$[$0-2]); \nbreak;\ncase 45:\n yy.setNewElementDocRef($$[$0-2]); \nbreak;\ncase 48:\n yy.addRelationship($$[$0-2], $$[$0], $$[$0-4]) \nbreak;\ncase 49:\n yy.addRelationship($$[$0-2], $$[$0-4], $$[$0]) \nbreak;\ncase 50:\n this.$=yy.Relationships.CONTAINS;\nbreak;\ncase 51:\n this.$=yy.Relationships.COPIES;\nbreak;\ncase 52:\n this.$=yy.Relationships.DERIVES;\nbreak;\ncase 53:\n this.$=yy.Relationships.SATISFIES;\nbreak;\ncase 54:\n this.$=yy.Relationships.VERIFIES;\nbreak;\ncase 55:\n this.$=yy.Relationships.REFINES;\nbreak;\ncase 56:\n this.$=yy.Relationships.TRACES;\nbreak;\ncase 57:\nthis.$ = $$[$0-2];yy.defineClass($$[$0-1],$$[$0]);\nbreak;\ncase 58:\nyy.setClass($$[$0-1], $$[$0]);\nbreak;\ncase 59:\nyy.setClass([$$[$0-2]], $$[$0]);\nbreak;\ncase 60: case 62:\n this.$ = [$$[$0]]; \nbreak;\ncase 61: case 63:\n this.$ = $$[$0-2].concat([$$[$0]]); \nbreak;\ncase 64:\nthis.$ = $$[$0-2];yy.setCssStyle($$[$0-1],$$[$0]);\nbreak;\ncase 65:\nthis.$ = [$$[$0]]\nbreak;\ncase 66:\n$$[$0-2].push($$[$0]);this.$ = $$[$0-2];\nbreak;\ncase 68:\nthis.$ = $$[$0-1] + $$[$0];\nbreak;\n}\n},\ntable: [{3:1,4:2,6:$V0,9:$V1,11:$V2,13:$V3},{1:[3]},{3:8,4:2,5:[1,7],6:$V0,9:$V1,11:$V2,13:$V3},{5:[1,9]},{10:[1,10]},{12:[1,11]},o($V4,[2,6]),{3:12,4:2,6:$V0,9:$V1,11:$V2,13:$V3},{1:[2,2]},{4:17,5:$V5,7:13,8:$V6,9:$V1,11:$V2,13:$V3,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:$V7,22:$V8,23:$V9,24:$Va,25:23,33:25,41:$Vb,42:$Vc,43:$Vd,44:$Ve,45:$Vf,46:$Vg,54:$Vh,72:$Vi,74:$Vj,77:$Vk,89:$Vl,90:$Vm},o($V4,[2,4]),o($V4,[2,5]),{1:[2,1]},{8:[1,41]},{4:17,5:$V5,7:42,8:$V6,9:$V1,11:$V2,13:$V3,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:$V7,22:$V8,23:$V9,24:$Va,25:23,33:25,41:$Vb,42:$Vc,43:$Vd,44:$Ve,45:$Vf,46:$Vg,54:$Vh,72:$Vi,74:$Vj,77:$Vk,89:$Vl,90:$Vm},{4:17,5:$V5,7:43,8:$V6,9:$V1,11:$V2,13:$V3,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:$V7,22:$V8,23:$V9,24:$Va,25:23,33:25,41:$Vb,42:$Vc,43:$Vd,44:$Ve,45:$Vf,46:$Vg,54:$Vh,72:$Vi,74:$Vj,77:$Vk,89:$Vl,90:$Vm},{4:17,5:$V5,7:44,8:$V6,9:$V1,11:$V2,13:$V3,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:$V7,22:$V8,23:$V9,24:$Va,25:23,33:25,41:$Vb,42:$Vc,43:$Vd,44:$Ve,45:$Vf,46:$Vg,54:$Vh,72:$Vi,74:$Vj,77:$Vk,89:$Vl,90:$Vm},{4:17,5:$V5,7:45,8:$V6,9:$V1,11:$V2,13:$V3,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:$V7,22:$V8,23:$V9,24:$Va,25:23,33:25,41:$Vb,42:$Vc,43:$Vd,44:$Ve,45:$Vf,46:$Vg,54:$Vh,72:$Vi,74:$Vj,77:$Vk,89:$Vl,90:$Vm},{4:17,5:$V5,7:46,8:$V6,9:$V1,11:$V2,13:$V3,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:$V7,22:$V8,23:$V9,24:$Va,25:23,33:25,41:$Vb,42:$Vc,43:$Vd,44:$Ve,45:$Vf,46:$Vg,54:$Vh,72:$Vi,74:$Vj,77:$Vk,89:$Vl,90:$Vm},{4:17,5:$V5,7:47,8:$V6,9:$V1,11:$V2,13:$V3,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:$V7,22:$V8,23:$V9,24:$Va,25:23,33:25,41:$Vb,42:$Vc,43:$Vd,44:$Ve,45:$Vf,46:$Vg,54:$Vh,72:$Vi,74:$Vj,77:$Vk,89:$Vl,90:$Vm},{4:17,5:$V5,7:48,8:$V6,9:$V1,11:$V2,13:$V3,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:$V7,22:$V8,23:$V9,24:$Va,25:23,33:25,41:$Vb,42:$Vc,43:$Vd,44:$Ve,45:$Vf,46:$Vg,54:$Vh,72:$Vi,74:$Vj,77:$Vk,89:$Vl,90:$Vm},{4:17,5:$V5,7:49,8:$V6,9:$V1,11:$V2,13:$V3,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:$V7,22:$V8,23:$V9,24:$Va,25:23,33:25,41:$Vb,42:$Vc,43:$Vd,44:$Ve,45:$Vf,46:$Vg,54:$Vh,72:$Vi,74:$Vj,77:$Vk,89:$Vl,90:$Vm},{4:17,5:$V5,7:50,8:$V6,9:$V1,11:$V2,13:$V3,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:$V7,22:$V8,23:$V9,24:$Va,25:23,33:25,41:$Vb,42:$Vc,43:$Vd,44:$Ve,45:$Vf,46:$Vg,54:$Vh,72:$Vi,74:$Vj,77:$Vk,89:$Vl,90:$Vm},{26:51,89:[1,52],90:[1,53]},{55:54,89:[1,55],90:[1,56]},{29:[1,59],61:[1,57],63:[1,58]},o($Vn,[2,17]),o($Vn,[2,18]),o($Vn,[2,19]),o($Vn,[2,20]),{30:60,33:62,75:$Vo,89:$Vl,90:$Vm},{30:63,33:62,75:$Vo,89:$Vl,90:$Vm},{30:64,33:62,75:$Vo,89:$Vl,90:$Vm},o($Vp,[2,29]),o($Vp,[2,30]),o($Vp,[2,31]),o($Vp,[2,32]),o($Vp,[2,33]),o($Vp,[2,34]),o($Vq,[2,81]),o($Vq,[2,82]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{8:[2,13]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{27:[1,65],29:[1,66]},o($Vr,[2,79]),o($Vr,[2,80]),{27:[1,67],29:[1,68]},o($Vr,[2,85]),o($Vr,[2,86]),{62:69,65:$Vs,66:$Vt,67:$Vu,68:$Vv,69:$Vw,70:$Vx,71:$Vy},{62:77,65:$Vs,66:$Vt,67:$Vu,68:$Vv,69:$Vw,70:$Vx,71:$Vy},{30:78,33:62,75:$Vo,89:$Vl,90:$Vm},{73:79,75:$Vz,76:$VA,78:81,79:82,80:$VB,81:$VC,82:$VD,83:$VE,84:$VF,85:$VG,86:$VH,87:$VI,88:$VJ},o($VK,[2,60]),o($VK,[2,62]),{73:93,75:$Vz,76:$VA,78:81,79:82,80:$VB,81:$VC,82:$VD,83:$VE,84:$VF,85:$VG,86:$VH,87:$VI,88:$VJ},{30:94,33:62,75:$Vo,76:$VA,89:$Vl,90:$Vm},{5:[1,95]},{30:96,33:62,75:$Vo,89:$Vl,90:$Vm},{5:[1,97]},{30:98,33:62,75:$Vo,89:$Vl,90:$Vm},{63:[1,99]},o($VL,[2,50]),o($VL,[2,51]),o($VL,[2,52]),o($VL,[2,53]),o($VL,[2,54]),o($VL,[2,55]),o($VL,[2,56]),{64:[1,100]},o($Vn,[2,59],{76:$VA}),o($Vn,[2,64],{76:$VM}),{33:103,75:[1,102],89:$Vl,90:$Vm},o($VN,[2,65],{79:104,75:$Vz,80:$VB,81:$VC,82:$VD,83:$VE,84:$VF,85:$VG,86:$VH,87:$VI,88:$VJ}),o($VO,[2,67]),o($VO,[2,69]),o($VO,[2,70]),o($VO,[2,71]),o($VO,[2,72]),o($VO,[2,73]),o($VO,[2,74]),o($VO,[2,75]),o($VO,[2,76]),o($VO,[2,77]),o($VO,[2,78]),o($Vn,[2,57],{76:$VM}),o($Vn,[2,58],{76:$VA}),{5:$VP,28:105,31:$VQ,34:$VR,36:$VS,38:$VT,40:$VU},{27:[1,112],76:$VA},{5:$VV,40:$VW,56:113,57:$VX,59:$VY},{27:[1,118],76:$VA},{33:119,89:$Vl,90:$Vm},{33:120,89:$Vl,90:$Vm},{75:$Vz,78:121,79:82,80:$VB,81:$VC,82:$VD,83:$VE,84:$VF,85:$VG,86:$VH,87:$VI,88:$VJ},o($VK,[2,61]),o($VK,[2,63]),o($VO,[2,68]),o($Vn,[2,21]),{32:[1,122]},{32:[1,123]},{32:[1,124]},{32:[1,125]},{5:$VP,28:126,31:$VQ,34:$VR,36:$VS,38:$VT,40:$VU},o($Vn,[2,28]),{5:[1,127]},o($Vn,[2,42]),{32:[1,128]},{32:[1,129]},{5:$VV,40:$VW,56:130,57:$VX,59:$VY},o($Vn,[2,47]),{5:[1,131]},o($Vn,[2,48]),o($Vn,[2,49]),o($VN,[2,66],{79:104,75:$Vz,80:$VB,81:$VC,82:$VD,83:$VE,84:$VF,85:$VG,86:$VH,87:$VI,88:$VJ}),{33:132,89:$Vl,90:$Vm},{35:133,89:[1,134],90:[1,135]},{37:136,47:[1,137],48:[1,138],49:[1,139]},{39:140,50:[1,141],51:[1,142],52:[1,143],53:[1,144]},o($Vn,[2,27]),{5:$VP,28:145,31:$VQ,34:$VR,36:$VS,38:$VT,40:$VU},{58:146,89:[1,147],90:[1,148]},{60:149,89:[1,150],90:[1,151]},o($Vn,[2,46]),{5:$VV,40:$VW,56:152,57:$VX,59:$VY},{5:[1,153]},{5:[1,154]},{5:[2,83]},{5:[2,84]},{5:[1,155]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[1,156]},{5:[2,38]},{5:[2,39]},{5:[2,40]},{5:[2,41]},o($Vn,[2,22]),{5:[1,157]},{5:[2,87]},{5:[2,88]},{5:[1,158]},{5:[2,89]},{5:[2,90]},o($Vn,[2,43]),{5:$VP,28:159,31:$VQ,34:$VR,36:$VS,38:$VT,40:$VU},{5:$VP,28:160,31:$VQ,34:$VR,36:$VS,38:$VT,40:$VU},{5:$VP,28:161,31:$VQ,34:$VR,36:$VS,38:$VT,40:$VU},{5:$VP,28:162,31:$VQ,34:$VR,36:$VS,38:$VT,40:$VU},{5:$VV,40:$VW,56:163,57:$VX,59:$VY},{5:$VV,40:$VW,56:164,57:$VX,59:$VY},o($Vn,[2,23]),o($Vn,[2,24]),o($Vn,[2,25]),o($Vn,[2,26]),o($Vn,[2,44]),o($Vn,[2,45])],\ndefaultActions: {8:[2,2],12:[2,1],41:[2,3],42:[2,8],43:[2,9],44:[2,10],45:[2,11],46:[2,12],47:[2,13],48:[2,14],49:[2,15],50:[2,16],134:[2,83],135:[2,84],137:[2,35],138:[2,36],139:[2,37],141:[2,38],142:[2,39],143:[2,40],144:[2,41],147:[2,87],148:[2,88],150:[2,89],151:[2,90]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// 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.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n 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(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 'title';\nbreak;\ncase 1: this.begin(\"acc_title\");return 9; \nbreak;\ncase 2: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 3: this.begin(\"acc_descr\");return 11; \nbreak;\ncase 4: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 5: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 6: this.popState(); \nbreak;\ncase 7:return \"acc_descr_multiline_value\";\nbreak;\ncase 8:return 21;\nbreak;\ncase 9:return 22;\nbreak;\ncase 10:return 23;\nbreak;\ncase 11:return 24;\nbreak;\ncase 12:return 5;\nbreak;\ncase 13:/* skip all whitespace */\nbreak;\ncase 14:/* skip comments */\nbreak;\ncase 15:/* skip comments */\nbreak;\ncase 16:return 8;\nbreak;\ncase 17:return 6;\nbreak;\ncase 18:return 27;\nbreak;\ncase 19:return 40;\nbreak;\ncase 20:return 29;\nbreak;\ncase 21:return 32;\nbreak;\ncase 22:return 31;\nbreak;\ncase 23:return 34;\nbreak;\ncase 24:return 36;\nbreak;\ncase 25:return 38;\nbreak;\ncase 26:return 41;\nbreak;\ncase 27:return 42;\nbreak;\ncase 28:return 43;\nbreak;\ncase 29:return 44;\nbreak;\ncase 30:return 45;\nbreak;\ncase 31:return 46;\nbreak;\ncase 32:return 47;\nbreak;\ncase 33:return 48;\nbreak;\ncase 34:return 49;\nbreak;\ncase 35:return 50;\nbreak;\ncase 36:return 51;\nbreak;\ncase 37:return 52;\nbreak;\ncase 38:return 53;\nbreak;\ncase 39:return 54;\nbreak;\ncase 40:return 65;\nbreak;\ncase 41:return 66;\nbreak;\ncase 42:return 67;\nbreak;\ncase 43:return 68;\nbreak;\ncase 44:return 69;\nbreak;\ncase 45:return 70;\nbreak;\ncase 46:return 71;\nbreak;\ncase 47:return 57;\nbreak;\ncase 48:return 59;\nbreak;\ncase 49: this.begin(\"style\"); return 77; \nbreak;\ncase 50:return 75;\nbreak;\ncase 51:return 81;\nbreak;\ncase 52:return 88;\nbreak;\ncase 53:return 'PERCENT';\nbreak;\ncase 54:return 86;\nbreak;\ncase 55:return 84;\nbreak;\ncase 56:/* skip spaces */\nbreak;\ncase 57: this.begin(\"string\"); \nbreak;\ncase 58: this.popState(); \nbreak;\ncase 59: this.begin(\"style\"); return 72; \nbreak;\ncase 60: this.begin(\"style\"); return 74; \nbreak;\ncase 61:return 61;\nbreak;\ncase 62:return 64;\nbreak;\ncase 63:return 63;\nbreak;\ncase 64: this.begin(\"string\"); \nbreak;\ncase 65: this.popState(); \nbreak;\ncase 66: return \"qString\"; \nbreak;\ncase 67: yy_.yytext = yy_.yytext.trim(); return 89;\nbreak;\ncase 68:return 75;\nbreak;\ncase 69:return 80;\nbreak;\ncase 70:return 76;\nbreak;\n}\n},\nrules: [/^(?:title\\s[^#\\n;]+)/i,/^(?:accTitle\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*\\{\\s*)/i,/^(?:[\\}])/i,/^(?:[^\\}]*)/i,/^(?:.*direction\\s+TB[^\\n]*)/i,/^(?:.*direction\\s+BT[^\\n]*)/i,/^(?:.*direction\\s+RL[^\\n]*)/i,/^(?:.*direction\\s+LR[^\\n]*)/i,/^(?:(\\r?\\n)+)/i,/^(?:\\s+)/i,/^(?:#[^\\n]*)/i,/^(?:%[^\\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\\b)/i,/^(?:\\{)/i,/^(?:\\})/i,/^(?::{3})/i,/^(?::)/i,/^(?:id\\b)/i,/^(?:text\\b)/i,/^(?:risk\\b)/i,/^(?:verifyMethod\\b)/i,/^(?:requirement\\b)/i,/^(?:functionalRequirement\\b)/i,/^(?:interfaceRequirement\\b)/i,/^(?:performanceRequirement\\b)/i,/^(?:physicalRequirement\\b)/i,/^(?:designConstraint\\b)/i,/^(?:low\\b)/i,/^(?:medium\\b)/i,/^(?:high\\b)/i,/^(?:analysis\\b)/i,/^(?:demonstration\\b)/i,/^(?:inspection\\b)/i,/^(?:test\\b)/i,/^(?:element\\b)/i,/^(?:contains\\b)/i,/^(?:copies\\b)/i,/^(?:derives\\b)/i,/^(?:satisfies\\b)/i,/^(?:verifies\\b)/i,/^(?:refines\\b)/i,/^(?:traces\\b)/i,/^(?:type\\b)/i,/^(?:docref\\b)/i,/^(?:style\\b)/i,/^(?:\\w+)/i,/^(?::)/i,/^(?:;)/i,/^(?:%)/i,/^(?:-)/i,/^(?:#)/i,/^(?: )/i,/^(?:[\"])/i,/^(?:\\n)/i,/^(?:classDef\\b)/i,/^(?:class\\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:[\"])/i,/^(?:[\"])/i,/^(?:[^\"]*)/i,/^(?:[\\w][^:,\\r\\n\\{\\<\\>\\-\\=]*)/i,/^(?:\\w+)/i,/^(?:[0-9]+)/i,/^(?:,)/i],\nconditions: {\"acc_descr_multiline\":{\"rules\":[6,7,68,69,70],\"inclusive\":false},\"acc_descr\":{\"rules\":[4,68,69,70],\"inclusive\":false},\"acc_title\":{\"rules\":[2,68,69,70],\"inclusive\":false},\"style\":{\"rules\":[50,51,52,53,54,55,56,57,58,68,69,70],\"inclusive\":false},\"unqString\":{\"rules\":[68,69,70],\"inclusive\":false},\"token\":{\"rules\":[68,69,70],\"inclusive\":false},\"string\":{\"rules\":[65,66,68,69,70],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,59,60,61,62,63,64,67,68,69,70],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})(); \n\tparser.parser = parser;\n\texport { parser };\n\texport default parser;\n\t", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport type { DiagramDB } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport type { Node, Edge } from '../../rendering-util/types.js';\n\nimport {\n setAccTitle,\n getAccTitle,\n getAccDescription,\n setAccDescription,\n clear as commonClear,\n setDiagramTitle,\n getDiagramTitle,\n} from '../common/commonDb.js';\nimport type {\n Element,\n Relation,\n RelationshipType,\n Requirement,\n RequirementClass,\n RequirementType,\n RiskLevel,\n VerifyType,\n} from './types.js';\n\nexport class RequirementDB implements DiagramDB {\n private relations: Relation[] = [];\n private latestRequirement: Requirement = this.getInitialRequirement();\n private requirements = new Map();\n private latestElement: Element = this.getInitialElement();\n private elements = new Map();\n private classes = new Map();\n private direction = 'TB';\n\n private RequirementType = {\n REQUIREMENT: 'Requirement',\n FUNCTIONAL_REQUIREMENT: 'Functional Requirement',\n INTERFACE_REQUIREMENT: 'Interface Requirement',\n PERFORMANCE_REQUIREMENT: 'Performance Requirement',\n PHYSICAL_REQUIREMENT: 'Physical Requirement',\n DESIGN_CONSTRAINT: 'Design Constraint',\n };\n\n private RiskLevel = {\n LOW_RISK: 'Low',\n MED_RISK: 'Medium',\n HIGH_RISK: 'High',\n };\n\n private VerifyType = {\n VERIFY_ANALYSIS: 'Analysis',\n VERIFY_DEMONSTRATION: 'Demonstration',\n VERIFY_INSPECTION: 'Inspection',\n VERIFY_TEST: 'Test',\n };\n\n private Relationships = {\n CONTAINS: 'contains',\n COPIES: 'copies',\n DERIVES: 'derives',\n SATISFIES: 'satisfies',\n VERIFIES: 'verifies',\n REFINES: 'refines',\n TRACES: 'traces',\n };\n\n constructor() {\n this.clear();\n\n // Needed for JISON since it only supports direct properties\n this.setDirection = this.setDirection.bind(this);\n this.addRequirement = this.addRequirement.bind(this);\n this.setNewReqId = this.setNewReqId.bind(this);\n this.setNewReqRisk = this.setNewReqRisk.bind(this);\n this.setNewReqText = this.setNewReqText.bind(this);\n this.setNewReqVerifyMethod = this.setNewReqVerifyMethod.bind(this);\n this.addElement = this.addElement.bind(this);\n this.setNewElementType = this.setNewElementType.bind(this);\n this.setNewElementDocRef = this.setNewElementDocRef.bind(this);\n this.addRelationship = this.addRelationship.bind(this);\n this.setCssStyle = this.setCssStyle.bind(this);\n this.setClass = this.setClass.bind(this);\n this.defineClass = this.defineClass.bind(this);\n this.setAccTitle = this.setAccTitle.bind(this);\n this.setAccDescription = this.setAccDescription.bind(this);\n }\n\n public getDirection() {\n return this.direction;\n }\n public setDirection(dir: string) {\n this.direction = dir;\n }\n\n private resetLatestRequirement() {\n this.latestRequirement = this.getInitialRequirement();\n }\n\n private resetLatestElement() {\n this.latestElement = this.getInitialElement();\n }\n\n private getInitialRequirement(): Requirement {\n return {\n requirementId: '',\n text: '',\n risk: '' as RiskLevel,\n verifyMethod: '' as VerifyType,\n name: '',\n type: '' as RequirementType,\n cssStyles: [],\n classes: ['default'],\n };\n }\n\n private getInitialElement(): Element {\n return {\n name: '',\n type: '',\n docRef: '',\n cssStyles: [],\n classes: ['default'],\n };\n }\n\n public addRequirement(name: string, type: RequirementType) {\n if (!this.requirements.has(name)) {\n this.requirements.set(name, {\n name,\n type,\n requirementId: this.latestRequirement.requirementId,\n text: this.latestRequirement.text,\n risk: this.latestRequirement.risk,\n verifyMethod: this.latestRequirement.verifyMethod,\n cssStyles: [],\n classes: ['default'],\n });\n }\n this.resetLatestRequirement();\n\n return this.requirements.get(name);\n }\n\n public getRequirements() {\n return this.requirements;\n }\n\n public setNewReqId(id: string) {\n if (this.latestRequirement !== undefined) {\n this.latestRequirement.requirementId = id;\n }\n }\n\n public setNewReqText(text: string) {\n if (this.latestRequirement !== undefined) {\n this.latestRequirement.text = text;\n }\n }\n\n public setNewReqRisk(risk: RiskLevel) {\n if (this.latestRequirement !== undefined) {\n this.latestRequirement.risk = risk;\n }\n }\n\n public setNewReqVerifyMethod(verifyMethod: VerifyType) {\n if (this.latestRequirement !== undefined) {\n this.latestRequirement.verifyMethod = verifyMethod;\n }\n }\n\n public addElement(name: string) {\n if (!this.elements.has(name)) {\n this.elements.set(name, {\n name,\n type: this.latestElement.type,\n docRef: this.latestElement.docRef,\n cssStyles: [],\n classes: ['default'],\n });\n log.info('Added new element: ', name);\n }\n this.resetLatestElement();\n\n return this.elements.get(name);\n }\n\n public getElements() {\n return this.elements;\n }\n\n public setNewElementType(type: string) {\n if (this.latestElement !== undefined) {\n this.latestElement.type = type;\n }\n }\n\n public setNewElementDocRef(docRef: string) {\n if (this.latestElement !== undefined) {\n this.latestElement.docRef = docRef;\n }\n }\n\n public addRelationship(type: RelationshipType, src: string, dst: string) {\n this.relations.push({\n type,\n src,\n dst,\n });\n }\n\n public getRelationships() {\n return this.relations;\n }\n\n public clear() {\n this.relations = [];\n this.resetLatestRequirement();\n this.requirements = new Map();\n this.resetLatestElement();\n this.elements = new Map();\n this.classes = new Map();\n commonClear();\n }\n\n public setCssStyle(ids: string[], styles: string[]) {\n for (const id of ids) {\n const node = this.requirements.get(id) ?? this.elements.get(id);\n if (!styles || !node) {\n return;\n }\n for (const s of styles) {\n if (s.includes(',')) {\n node.cssStyles.push(...s.split(','));\n } else {\n node.cssStyles.push(s);\n }\n }\n }\n }\n\n public setClass(ids: string[], classNames: string[]) {\n for (const id of ids) {\n const node = this.requirements.get(id) ?? this.elements.get(id);\n if (node) {\n for (const _class of classNames) {\n node.classes.push(_class);\n const styles = this.classes.get(_class)?.styles;\n if (styles) {\n node.cssStyles.push(...styles);\n }\n }\n }\n }\n }\n\n public defineClass(ids: string[], style: string[]) {\n for (const id of ids) {\n let styleClass = this.classes.get(id);\n if (styleClass === undefined) {\n styleClass = { id, styles: [], textStyles: [] };\n this.classes.set(id, styleClass);\n }\n\n if (style) {\n style.forEach(function (s) {\n if (/color/.exec(s)) {\n const newStyle = s.replace('fill', 'bgFill'); // .replace('color', 'fill');\n styleClass.textStyles.push(newStyle);\n }\n styleClass.styles.push(s);\n });\n }\n\n this.requirements.forEach((value) => {\n if (value.classes.includes(id)) {\n value.cssStyles.push(...style.flatMap((s) => s.split(',')));\n }\n });\n this.elements.forEach((value) => {\n if (value.classes.includes(id)) {\n value.cssStyles.push(...style.flatMap((s) => s.split(',')));\n }\n });\n }\n }\n\n public getClasses() {\n return this.classes;\n }\n\n public getData() {\n const config = getConfig();\n const nodes: Node[] = [];\n const edges: Edge[] = [];\n for (const requirement of this.requirements.values()) {\n const node = requirement as unknown as Node;\n node.id = requirement.name;\n node.cssStyles = requirement.cssStyles;\n node.cssClasses = requirement.classes.join(' ');\n node.shape = 'requirementBox';\n node.look = config.look;\n nodes.push(node);\n }\n\n for (const element of this.elements.values()) {\n const node = element as unknown as Node;\n node.shape = 'requirementBox';\n node.look = config.look;\n node.id = element.name;\n node.cssStyles = element.cssStyles;\n node.cssClasses = element.classes.join(' ');\n\n nodes.push(node);\n }\n\n for (const relation of this.relations) {\n let counter = 0;\n const isContains = relation.type === this.Relationships.CONTAINS;\n const edge: Edge = {\n id: `${relation.src}-${relation.dst}-${counter}`,\n start: this.requirements.get(relation.src)?.name ?? this.elements.get(relation.src)?.name,\n end: this.requirements.get(relation.dst)?.name ?? this.elements.get(relation.dst)?.name,\n label: `<<${relation.type}>>`,\n classes: 'relationshipLine',\n style: ['fill:none', isContains ? '' : 'stroke-dasharray: 10,7'],\n labelpos: 'c',\n thickness: 'normal',\n type: 'normal',\n pattern: isContains ? 'normal' : 'dashed',\n arrowTypeStart: isContains ? 'requirement_contains' : '',\n arrowTypeEnd: isContains ? '' : 'requirement_arrow',\n look: config.look,\n };\n\n edges.push(edge);\n counter++;\n }\n\n return { nodes, edges, other: {}, config, direction: this.getDirection() };\n }\n\n public setAccTitle = setAccTitle;\n public getAccTitle = getAccTitle;\n public setAccDescription = setAccDescription;\n public getAccDescription = getAccDescription;\n public setDiagramTitle = setDiagramTitle;\n public getDiagramTitle = getDiagramTitle;\n public getConfig = () => getConfig().requirement;\n}\n", "const getStyles = (options) => `\n\n marker {\n fill: ${options.relationColor};\n stroke: ${options.relationColor};\n }\n\n marker.cross {\n stroke: ${options.lineColor};\n }\n\n svg {\n font-family: ${options.fontFamily};\n font-size: ${options.fontSize};\n }\n\n .reqBox {\n fill: ${options.requirementBackground};\n fill-opacity: 1.0;\n stroke: ${options.requirementBorderColor};\n stroke-width: ${options.requirementBorderSize};\n }\n \n .reqTitle, .reqLabel{\n fill: ${options.requirementTextColor};\n }\n .reqLabelBox {\n fill: ${options.relationLabelBackground};\n fill-opacity: 1.0;\n }\n\n .req-title-line {\n stroke: ${options.requirementBorderColor};\n stroke-width: ${options.requirementBorderSize};\n }\n .relationshipLine {\n stroke: ${options.relationColor};\n stroke-width: 1;\n }\n .relationshipLabel {\n fill: ${options.relationLabelColor};\n }\n .divider {\n stroke: ${options.nodeBorder};\n stroke-width: 1;\n }\n .label {\n font-family: ${options.fontFamily};\n color: ${options.nodeTextColor || options.textColor};\n }\n .label text,span {\n fill: ${options.nodeTextColor || options.textColor};\n color: ${options.nodeTextColor || options.textColor};\n }\n .labelBkg {\n background-color: ${options.edgeLabelBackground};\n }\n\n`;\n// fill', conf.rect_fill)\nexport default getStyles;\n", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { log } from '../../logger.js';\nimport { getDiagramElement } from '../../rendering-util/insertElementsForSize.js';\nimport { getRegisteredLayoutAlgorithm, render } from '../../rendering-util/render.js';\nimport { setupViewPortForSVG } from '../../rendering-util/setupViewPortForSVG.js';\nimport type { LayoutData } from '../../rendering-util/types.js';\nimport utils from '../../utils.js';\n\nexport const draw = async function (text: string, id: string, _version: string, diag: any) {\n log.info('REF0:');\n log.info('Drawing requirement diagram (unified)', id);\n const { securityLevel, state: conf, layout } = getConfig();\n\n const data4Layout = diag.db.getData() as LayoutData;\n\n // Create the root SVG - the element is the div containing the SVG element\n const svg = getDiagramElement(id, securityLevel);\n\n data4Layout.type = diag.type;\n data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout);\n\n data4Layout.nodeSpacing = conf?.nodeSpacing ?? 50;\n data4Layout.rankSpacing = conf?.rankSpacing ?? 50;\n data4Layout.markers = ['requirement_contains', 'requirement_arrow'];\n data4Layout.diagramId = id;\n await render(data4Layout, svg);\n const padding = 8;\n utils.insertTitle(\n svg,\n 'requirementDiagramTitleText',\n conf?.titleTopMargin ?? 25,\n diag.db.getDiagramTitle()\n );\n\n setupViewPortForSVG(svg, padding, 'requirementDiagram', conf?.useMaxWidth ?? true);\n};\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\n// @ts-ignore: JISON doesn't support types\nimport parser from './parser/requirementDiagram.jison';\nimport { RequirementDB } from './requirementDb.js';\nimport styles from './styles.js';\nimport * as renderer from './requirementRenderer.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n get db() {\n return new RequirementDB();\n },\n renderer,\n styles,\n};\n", "/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,2],$V1=[1,3],$V2=[1,4],$V3=[2,4],$V4=[1,9],$V5=[1,11],$V6=[1,13],$V7=[1,14],$V8=[1,16],$V9=[1,17],$Va=[1,18],$Vb=[1,24],$Vc=[1,25],$Vd=[1,26],$Ve=[1,27],$Vf=[1,28],$Vg=[1,29],$Vh=[1,30],$Vi=[1,31],$Vj=[1,32],$Vk=[1,33],$Vl=[1,34],$Vm=[1,35],$Vn=[1,36],$Vo=[1,37],$Vp=[1,38],$Vq=[1,39],$Vr=[1,41],$Vs=[1,42],$Vt=[1,43],$Vu=[1,44],$Vv=[1,45],$Vw=[1,46],$Vx=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,55,60,61,62,63,71],$Vy=[2,71],$Vz=[4,5,16,50,52,53],$VA=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,55,60,61,62,63,71],$VB=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,55,60,61,62,63,71],$VC=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,55,60,61,62,63,71],$VD=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,55,60,61,62,63,71],$VE=[69,70,71],$VF=[1,127];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"SPACE\":4,\"NEWLINE\":5,\"SD\":6,\"document\":7,\"line\":8,\"statement\":9,\"box_section\":10,\"box_line\":11,\"participant_statement\":12,\"create\":13,\"box\":14,\"restOfLine\":15,\"end\":16,\"signal\":17,\"autonumber\":18,\"NUM\":19,\"off\":20,\"activate\":21,\"actor\":22,\"deactivate\":23,\"note_statement\":24,\"links_statement\":25,\"link_statement\":26,\"properties_statement\":27,\"details_statement\":28,\"title\":29,\"legacy_title\":30,\"acc_title\":31,\"acc_title_value\":32,\"acc_descr\":33,\"acc_descr_value\":34,\"acc_descr_multiline_value\":35,\"loop\":36,\"rect\":37,\"opt\":38,\"alt\":39,\"else_sections\":40,\"par\":41,\"par_sections\":42,\"par_over\":43,\"critical\":44,\"option_sections\":45,\"break\":46,\"option\":47,\"and\":48,\"else\":49,\"participant\":50,\"AS\":51,\"participant_actor\":52,\"destroy\":53,\"actor_with_config\":54,\"note\":55,\"placement\":56,\"text2\":57,\"over\":58,\"actor_pair\":59,\"links\":60,\"link\":61,\"properties\":62,\"details\":63,\"spaceList\":64,\",\":65,\"left_of\":66,\"right_of\":67,\"signaltype\":68,\"+\":69,\"-\":70,\"ACTOR\":71,\"config_object\":72,\"CONFIG_START\":73,\"CONFIG_CONTENT\":74,\"CONFIG_END\":75,\"SOLID_OPEN_ARROW\":76,\"DOTTED_OPEN_ARROW\":77,\"SOLID_ARROW\":78,\"BIDIRECTIONAL_SOLID_ARROW\":79,\"DOTTED_ARROW\":80,\"BIDIRECTIONAL_DOTTED_ARROW\":81,\"SOLID_CROSS\":82,\"DOTTED_CROSS\":83,\"SOLID_POINT\":84,\"DOTTED_POINT\":85,\"TXT\":86,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"SPACE\",5:\"NEWLINE\",6:\"SD\",13:\"create\",14:\"box\",15:\"restOfLine\",16:\"end\",18:\"autonumber\",19:\"NUM\",20:\"off\",21:\"activate\",23:\"deactivate\",29:\"title\",30:\"legacy_title\",31:\"acc_title\",32:\"acc_title_value\",33:\"acc_descr\",34:\"acc_descr_value\",35:\"acc_descr_multiline_value\",36:\"loop\",37:\"rect\",38:\"opt\",39:\"alt\",41:\"par\",43:\"par_over\",44:\"critical\",46:\"break\",47:\"option\",48:\"and\",49:\"else\",50:\"participant\",51:\"AS\",52:\"participant_actor\",53:\"destroy\",55:\"note\",58:\"over\",60:\"links\",61:\"link\",62:\"properties\",63:\"details\",65:\",\",66:\"left_of\",67:\"right_of\",69:\"+\",70:\"-\",71:\"ACTOR\",73:\"CONFIG_START\",74:\"CONFIG_CONTENT\",75:\"CONFIG_END\",76:\"SOLID_OPEN_ARROW\",77:\"DOTTED_OPEN_ARROW\",78:\"SOLID_ARROW\",79:\"BIDIRECTIONAL_SOLID_ARROW\",80:\"DOTTED_ARROW\",81:\"BIDIRECTIONAL_DOTTED_ARROW\",82:\"SOLID_CROSS\",83:\"DOTTED_CROSS\",84:\"SOLID_POINT\",85:\"DOTTED_POINT\",86:\"TXT\"},\nproductions_: [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],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[64,2],[64,1],[59,3],[59,1],[56,1],[56,1],[17,5],[17,5],[17,4],[54,2],[72,3],[22,1],[68,1],[68,1],[68,1],[68,1],[68,1],[68,1],[68,1],[68,1],[68,1],[68,1],[57,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 3:\n yy.apply($$[$0]);return $$[$0]; \nbreak;\ncase 4: case 9:\n this.$ = [] \nbreak;\ncase 5: case 10:\n$$[$0-1].push($$[$0]);this.$ = $$[$0-1]\nbreak;\ncase 6: case 7: case 11: case 12:\n this.$ = $$[$0] \nbreak;\ncase 8: case 13:\n this.$=[]; \nbreak;\ncase 15:\n$$[$0].type='createParticipant'; this.$=$$[$0];\nbreak;\ncase 16:\n\n\t\t$$[$0-1].unshift({type: 'boxStart', boxData:yy.parseBoxData($$[$0-2]) });\n\t\t$$[$0-1].push({type: 'boxEnd', boxText:$$[$0-2]});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 18:\n this.$= {type:'sequenceIndex',sequenceIndex: Number($$[$0-2]), sequenceIndexStep:Number($$[$0-1]), sequenceVisible:true, signalType:yy.LINETYPE.AUTONUMBER};\nbreak;\ncase 19:\n this.$ = {type:'sequenceIndex',sequenceIndex: Number($$[$0-1]), sequenceIndexStep:1, sequenceVisible:true, signalType:yy.LINETYPE.AUTONUMBER};\nbreak;\ncase 20:\n this.$ = {type:'sequenceIndex', sequenceVisible:false, signalType:yy.LINETYPE.AUTONUMBER};\nbreak;\ncase 21:\nthis.$ = {type:'sequenceIndex', sequenceVisible:true, signalType:yy.LINETYPE.AUTONUMBER}; \nbreak;\ncase 22:\nthis.$={type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0-1].actor};\nbreak;\ncase 23:\nthis.$={type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0-1].actor};\nbreak;\ncase 29:\nyy.setDiagramTitle($$[$0].substring(6));this.$=$$[$0].substring(6);\nbreak;\ncase 30:\nyy.setDiagramTitle($$[$0].substring(7));this.$=$$[$0].substring(7);\nbreak;\ncase 31:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 32: case 33:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 34:\n\n\t\t$$[$0-1].unshift({type: 'loopStart', loopText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.LOOP_START});\n\t\t$$[$0-1].push({type: 'loopEnd', loopText:$$[$0-2], signalType: yy.LINETYPE.LOOP_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 35:\n\n\t\t$$[$0-1].unshift({type: 'rectStart', color:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.RECT_START });\n\t\t$$[$0-1].push({type: 'rectEnd', color:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.RECT_END });\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 36:\n\n\t\t$$[$0-1].unshift({type: 'optStart', optText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.OPT_START});\n\t\t$$[$0-1].push({type: 'optEnd', optText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.OPT_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 37:\n\n\t\t// Alt start\n\t\t$$[$0-1].unshift({type: 'altStart', altText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.ALT_START});\n\t\t// Content in alt is already in $$[$0-1]\n\t\t// End\n\t\t$$[$0-1].push({type: 'altEnd', signalType: yy.LINETYPE.ALT_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 38:\n\n\t\t// Parallel start\n\t\t$$[$0-1].unshift({type: 'parStart', parText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.PAR_START});\n\t\t// Content in par is already in $$[$0-1]\n\t\t// End\n\t\t$$[$0-1].push({type: 'parEnd', signalType: yy.LINETYPE.PAR_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 39:\n\n\t\t// Parallel (overlapped) start\n\t\t$$[$0-1].unshift({type: 'parStart', parText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.PAR_OVER_START});\n\t\t// Content in par is already in $$[$0-1]\n\t\t// End\n\t\t$$[$0-1].push({type: 'parEnd', signalType: yy.LINETYPE.PAR_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 40:\n\n\t\t// critical start\n\t\t$$[$0-1].unshift({type: 'criticalStart', criticalText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.CRITICAL_START});\n\t\t// Content in critical is already in $$[$0-1]\n\t\t// critical end\n\t\t$$[$0-1].push({type: 'criticalEnd', signalType: yy.LINETYPE.CRITICAL_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 41:\n\n\t\t$$[$0-1].unshift({type: 'breakStart', breakText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.BREAK_START});\n\t\t$$[$0-1].push({type: 'breakEnd', optText:yy.parseMessage($$[$0-2]), signalType: yy.LINETYPE.BREAK_END});\n\t\tthis.$=$$[$0-1];\nbreak;\ncase 43:\n this.$ = $$[$0-3].concat([{type: 'option', optionText:yy.parseMessage($$[$0-1]), signalType: yy.LINETYPE.CRITICAL_OPTION}, $$[$0]]); \nbreak;\ncase 45:\n this.$ = $$[$0-3].concat([{type: 'and', parText:yy.parseMessage($$[$0-1]), signalType: yy.LINETYPE.PAR_AND}, $$[$0]]); \nbreak;\ncase 47:\n this.$ = $$[$0-3].concat([{type: 'else', altText:yy.parseMessage($$[$0-1]), signalType: yy.LINETYPE.ALT_ELSE}, $$[$0]]); \nbreak;\ncase 48:\n$$[$0-3].draw='participant'; $$[$0-3].type='addParticipant';$$[$0-3].description=yy.parseMessage($$[$0-1]); this.$=$$[$0-3];\nbreak;\ncase 49:\n$$[$0-1].draw='participant'; $$[$0-1].type='addParticipant';this.$=$$[$0-1];\nbreak;\ncase 50:\n$$[$0-3].draw='actor'; $$[$0-3].type='addParticipant';$$[$0-3].description=yy.parseMessage($$[$0-1]); this.$=$$[$0-3];\nbreak;\ncase 51:\n$$[$0-1].draw='actor'; $$[$0-1].type='addParticipant'; this.$=$$[$0-1];\nbreak;\ncase 52:\n$$[$0-1].type='destroyParticipant'; this.$=$$[$0-1];\nbreak;\ncase 53:\n$$[$0-1].draw='participant'; $$[$0-1].type='addParticipant'; this.$=$$[$0-1];\nbreak;\ncase 54:\n\n\t\tthis.$ = [$$[$0-1], {type:'addNote', placement:$$[$0-2], actor:$$[$0-1].actor, text:$$[$0]}];\nbreak;\ncase 55:\n\n\t\t// Coerce actor_pair into a [to, from, ...] array\n\t\t$$[$0-2] = [].concat($$[$0-1], $$[$0-1]).slice(0, 2);\n\t\t$$[$0-2][0] = $$[$0-2][0].actor;\n\t\t$$[$0-2][1] = $$[$0-2][1].actor;\n\t\tthis.$ = [$$[$0-1], {type:'addNote', placement:yy.PLACEMENT.OVER, actor:$$[$0-2].slice(0, 2), text:$$[$0]}];\nbreak;\ncase 56:\n\n\t\tthis.$ = [$$[$0-1], {type:'addLinks', actor:$$[$0-1].actor, text:$$[$0]}];\n \nbreak;\ncase 57:\n\n\t\tthis.$ = [$$[$0-1], {type:'addALink', actor:$$[$0-1].actor, text:$$[$0]}];\n \nbreak;\ncase 58:\n\n\t\tthis.$ = [$$[$0-1], {type:'addProperties', actor:$$[$0-1].actor, text:$$[$0]}];\n \nbreak;\ncase 59:\n\n\t\tthis.$ = [$$[$0-1], {type:'addDetails', actor:$$[$0-1].actor, text:$$[$0]}];\n \nbreak;\ncase 62:\n this.$ = [$$[$0-2], $$[$0]]; \nbreak;\ncase 63:\n this.$ = $$[$0]; \nbreak;\ncase 64:\n this.$ = yy.PLACEMENT.LEFTOF; \nbreak;\ncase 65:\n this.$ = yy.PLACEMENT.RIGHTOF; \nbreak;\ncase 66:\n this.$ = [$$[$0-4],$$[$0-1],{type: 'addMessage', from:$$[$0-4].actor, to:$$[$0-1].actor, signalType:$$[$0-3], msg:$$[$0], activate: true},\n\t {type: 'activeStart', signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0-1].actor}\n\t ]\nbreak;\ncase 67:\n this.$ = [$$[$0-4],$$[$0-1],{type: 'addMessage', from:$$[$0-4].actor, to:$$[$0-1].actor, signalType:$$[$0-3], msg:$$[$0]},\n\t {type: 'activeEnd', signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0-4].actor}\n\t ]\nbreak;\ncase 68:\n this.$ = [$$[$0-3],$$[$0-1],{type: 'addMessage', from:$$[$0-3].actor, to:$$[$0-1].actor, signalType:$$[$0-2], msg:$$[$0]}]\nbreak;\ncase 69:\n\n this.$ = {\n type: 'addParticipant',\n actor: $$[$0-1],\n config: $$[$0]\n };\n \nbreak;\ncase 70:\n\n this.$ = $$[$0-1].trim();\n \nbreak;\ncase 71:\nthis.$={ type: 'addParticipant', actor:$$[$0]}\nbreak;\ncase 72:\n this.$ = yy.LINETYPE.SOLID_OPEN; \nbreak;\ncase 73:\n this.$ = yy.LINETYPE.DOTTED_OPEN; \nbreak;\ncase 74:\n this.$ = yy.LINETYPE.SOLID; \nbreak;\ncase 75:\n this.$ = yy.LINETYPE.BIDIRECTIONAL_SOLID; \nbreak;\ncase 76:\n this.$ = yy.LINETYPE.DOTTED; \nbreak;\ncase 77:\n this.$ = yy.LINETYPE.BIDIRECTIONAL_DOTTED; \nbreak;\ncase 78:\n this.$ = yy.LINETYPE.SOLID_CROSS; \nbreak;\ncase 79:\n this.$ = yy.LINETYPE.DOTTED_CROSS; \nbreak;\ncase 80:\n this.$ = yy.LINETYPE.SOLID_POINT; \nbreak;\ncase 81:\n this.$ = yy.LINETYPE.DOTTED_POINT; \nbreak;\ncase 82:\nthis.$ = yy.parseMessage($$[$0].trim().substring(1)) \nbreak;\n}\n},\ntable: [{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,55,60,61,62,63,71],$V3,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:$V4,5:$V5,8:8,9:10,12:12,13:$V6,14:$V7,17:15,18:$V8,21:$V9,22:40,23:$Va,24:19,25:20,26:21,27:22,28:23,29:$Vb,30:$Vc,31:$Vd,33:$Ve,35:$Vf,36:$Vg,37:$Vh,38:$Vi,39:$Vj,41:$Vk,43:$Vl,44:$Vm,46:$Vn,50:$Vo,52:$Vp,53:$Vq,55:$Vr,60:$Vs,61:$Vt,62:$Vu,63:$Vv,71:$Vw},o($Vx,[2,5]),{9:47,12:12,13:$V6,14:$V7,17:15,18:$V8,21:$V9,22:40,23:$Va,24:19,25:20,26:21,27:22,28:23,29:$Vb,30:$Vc,31:$Vd,33:$Ve,35:$Vf,36:$Vg,37:$Vh,38:$Vi,39:$Vj,41:$Vk,43:$Vl,44:$Vm,46:$Vn,50:$Vo,52:$Vp,53:$Vq,55:$Vr,60:$Vs,61:$Vt,62:$Vu,63:$Vv,71:$Vw},o($Vx,[2,7]),o($Vx,[2,8]),o($Vx,[2,14]),{12:48,50:$Vo,52:$Vp,53:$Vq},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,71:$Vw},{22:55,71:$Vw},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},o($Vx,[2,29]),o($Vx,[2,30]),{32:[1,61]},{34:[1,62]},o($Vx,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,54:72,71:[1,73]},{22:74,71:$Vw},{22:75,71:$Vw},{68:76,76:[1,77],77:[1,78],78:[1,79],79:[1,80],80:[1,81],81:[1,82],82:[1,83],83:[1,84],84:[1,85],85:[1,86]},{56:87,58:[1,88],66:[1,89],67:[1,90]},{22:91,71:$Vw},{22:92,71:$Vw},{22:93,71:$Vw},{22:94,71:$Vw},o([5,51,65,76,77,78,79,80,81,82,83,84,85,86],$Vy),o($Vx,[2,6]),o($Vx,[2,15]),o($Vz,[2,9],{10:95}),o($Vx,[2,17]),{5:[1,97],19:[1,96]},{5:[1,98]},o($Vx,[2,21]),{5:[1,99]},{5:[1,100]},o($Vx,[2,24]),o($Vx,[2,25]),o($Vx,[2,26]),o($Vx,[2,27]),o($Vx,[2,28]),o($Vx,[2,31]),o($Vx,[2,32]),o($VA,$V3,{7:101}),o($VA,$V3,{7:102}),o($VA,$V3,{7:103}),o($VB,$V3,{40:104,7:105}),o($VC,$V3,{42:106,7:107}),o($VC,$V3,{7:107,42:108}),o($VD,$V3,{45:109,7:110}),o($VA,$V3,{7:111}),{5:[1,113],51:[1,112]},{5:[1,114]},o([5,51],$Vy,{72:115,73:[1,116]}),{5:[1,118],51:[1,117]},{5:[1,119]},{22:122,69:[1,120],70:[1,121],71:$Vw},o($VE,[2,72]),o($VE,[2,73]),o($VE,[2,74]),o($VE,[2,75]),o($VE,[2,76]),o($VE,[2,77]),o($VE,[2,78]),o($VE,[2,79]),o($VE,[2,80]),o($VE,[2,81]),{22:123,71:$Vw},{22:125,59:124,71:$Vw},{71:[2,64]},{71:[2,65]},{57:126,86:$VF},{57:128,86:$VF},{57:129,86:$VF},{57:130,86:$VF},{4:[1,133],5:[1,135],11:132,12:134,16:[1,131],50:$Vo,52:$Vp,53:$Vq},{5:[1,136]},o($Vx,[2,19]),o($Vx,[2,20]),o($Vx,[2,22]),o($Vx,[2,23]),{4:$V4,5:$V5,8:8,9:10,12:12,13:$V6,14:$V7,16:[1,137],17:15,18:$V8,21:$V9,22:40,23:$Va,24:19,25:20,26:21,27:22,28:23,29:$Vb,30:$Vc,31:$Vd,33:$Ve,35:$Vf,36:$Vg,37:$Vh,38:$Vi,39:$Vj,41:$Vk,43:$Vl,44:$Vm,46:$Vn,50:$Vo,52:$Vp,53:$Vq,55:$Vr,60:$Vs,61:$Vt,62:$Vu,63:$Vv,71:$Vw},{4:$V4,5:$V5,8:8,9:10,12:12,13:$V6,14:$V7,16:[1,138],17:15,18:$V8,21:$V9,22:40,23:$Va,24:19,25:20,26:21,27:22,28:23,29:$Vb,30:$Vc,31:$Vd,33:$Ve,35:$Vf,36:$Vg,37:$Vh,38:$Vi,39:$Vj,41:$Vk,43:$Vl,44:$Vm,46:$Vn,50:$Vo,52:$Vp,53:$Vq,55:$Vr,60:$Vs,61:$Vt,62:$Vu,63:$Vv,71:$Vw},{4:$V4,5:$V5,8:8,9:10,12:12,13:$V6,14:$V7,16:[1,139],17:15,18:$V8,21:$V9,22:40,23:$Va,24:19,25:20,26:21,27:22,28:23,29:$Vb,30:$Vc,31:$Vd,33:$Ve,35:$Vf,36:$Vg,37:$Vh,38:$Vi,39:$Vj,41:$Vk,43:$Vl,44:$Vm,46:$Vn,50:$Vo,52:$Vp,53:$Vq,55:$Vr,60:$Vs,61:$Vt,62:$Vu,63:$Vv,71:$Vw},{16:[1,140]},{4:$V4,5:$V5,8:8,9:10,12:12,13:$V6,14:$V7,16:[2,46],17:15,18:$V8,21:$V9,22:40,23:$Va,24:19,25:20,26:21,27:22,28:23,29:$Vb,30:$Vc,31:$Vd,33:$Ve,35:$Vf,36:$Vg,37:$Vh,38:$Vi,39:$Vj,41:$Vk,43:$Vl,44:$Vm,46:$Vn,49:[1,141],50:$Vo,52:$Vp,53:$Vq,55:$Vr,60:$Vs,61:$Vt,62:$Vu,63:$Vv,71:$Vw},{16:[1,142]},{4:$V4,5:$V5,8:8,9:10,12:12,13:$V6,14:$V7,16:[2,44],17:15,18:$V8,21:$V9,22:40,23:$Va,24:19,25:20,26:21,27:22,28:23,29:$Vb,30:$Vc,31:$Vd,33:$Ve,35:$Vf,36:$Vg,37:$Vh,38:$Vi,39:$Vj,41:$Vk,43:$Vl,44:$Vm,46:$Vn,48:[1,143],50:$Vo,52:$Vp,53:$Vq,55:$Vr,60:$Vs,61:$Vt,62:$Vu,63:$Vv,71:$Vw},{16:[1,144]},{16:[1,145]},{4:$V4,5:$V5,8:8,9:10,12:12,13:$V6,14:$V7,16:[2,42],17:15,18:$V8,21:$V9,22:40,23:$Va,24:19,25:20,26:21,27:22,28:23,29:$Vb,30:$Vc,31:$Vd,33:$Ve,35:$Vf,36:$Vg,37:$Vh,38:$Vi,39:$Vj,41:$Vk,43:$Vl,44:$Vm,46:$Vn,47:[1,146],50:$Vo,52:$Vp,53:$Vq,55:$Vr,60:$Vs,61:$Vt,62:$Vu,63:$Vv,71:$Vw},{4:$V4,5:$V5,8:8,9:10,12:12,13:$V6,14:$V7,16:[1,147],17:15,18:$V8,21:$V9,22:40,23:$Va,24:19,25:20,26:21,27:22,28:23,29:$Vb,30:$Vc,31:$Vd,33:$Ve,35:$Vf,36:$Vg,37:$Vh,38:$Vi,39:$Vj,41:$Vk,43:$Vl,44:$Vm,46:$Vn,50:$Vo,52:$Vp,53:$Vq,55:$Vr,60:$Vs,61:$Vt,62:$Vu,63:$Vv,71:$Vw},{15:[1,148]},o($Vx,[2,49]),o($Vx,[2,53]),{5:[2,69]},{74:[1,149]},{15:[1,150]},o($Vx,[2,51]),o($Vx,[2,52]),{22:151,71:$Vw},{22:152,71:$Vw},{57:153,86:$VF},{57:154,86:$VF},{57:155,86:$VF},{65:[1,156],86:[2,63]},{5:[2,56]},{5:[2,82]},{5:[2,57]},{5:[2,58]},{5:[2,59]},o($Vx,[2,16]),o($Vz,[2,10]),{12:157,50:$Vo,52:$Vp,53:$Vq},o($Vz,[2,12]),o($Vz,[2,13]),o($Vx,[2,18]),o($Vx,[2,34]),o($Vx,[2,35]),o($Vx,[2,36]),o($Vx,[2,37]),{15:[1,158]},o($Vx,[2,38]),{15:[1,159]},o($Vx,[2,39]),o($Vx,[2,40]),{15:[1,160]},o($Vx,[2,41]),{5:[1,161]},{75:[1,162]},{5:[1,163]},{57:164,86:$VF},{57:165,86:$VF},{5:[2,68]},{5:[2,54]},{5:[2,55]},{22:166,71:$Vw},o($Vz,[2,11]),o($VB,$V3,{7:105,40:167}),o($VC,$V3,{7:107,42:168}),o($VD,$V3,{7:110,45:169}),o($Vx,[2,48]),{5:[2,70]},o($Vx,[2,50]),{5:[2,66]},{5:[2,67]},{86:[2,62]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],\ndefaultActions: {5:[2,1],6:[2,2],89:[2,64],90:[2,65],115:[2,69],126:[2,56],127:[2,82],128:[2,57],129:[2,58],130:[2,59],153:[2,68],154:[2,54],155:[2,55],162:[2,70],164:[2,66],165:[2,67],166:[2,62],167:[2,47],168:[2,45],169:[2,43]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// 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.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n 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(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 5;\nbreak;\ncase 1:/* skip all whitespace */\nbreak;\ncase 2:/* skip same-line whitespace */\nbreak;\ncase 3:/* skip comments */\nbreak;\ncase 4:/* skip comments */\nbreak;\ncase 5:/* skip comments */\nbreak;\ncase 6:return 19;\nbreak;\ncase 7: this.begin('CONFIG'); return 73; \nbreak;\ncase 8: return 74; \nbreak;\ncase 9: this.popState(); this.popState(); return 75; \nbreak;\ncase 10: yy_.yytext = yy_.yytext.trim(); return 71; \nbreak;\ncase 11: yy_.yytext = yy_.yytext.trim(); this.begin('ALIAS'); return 71; \nbreak;\ncase 12: this.begin('LINE'); return 14; \nbreak;\ncase 13: this.begin('ID'); return 50; \nbreak;\ncase 14: this.begin('ID'); return 52; \nbreak;\ncase 15:return 13;\nbreak;\ncase 16: this.begin('ID'); return 53; \nbreak;\ncase 17: yy_.yytext = yy_.yytext.trim(); this.begin('ALIAS'); return 71; \nbreak;\ncase 18: this.popState(); this.popState(); this.begin('LINE'); return 51; \nbreak;\ncase 19: this.popState(); this.popState(); return 5; \nbreak;\ncase 20: this.begin('LINE'); return 36; \nbreak;\ncase 21: this.begin('LINE'); return 37; \nbreak;\ncase 22: this.begin('LINE'); return 38; \nbreak;\ncase 23: this.begin('LINE'); return 39; \nbreak;\ncase 24: this.begin('LINE'); return 49; \nbreak;\ncase 25: this.begin('LINE'); return 41; \nbreak;\ncase 26: this.begin('LINE'); return 43; \nbreak;\ncase 27: this.begin('LINE'); return 48; \nbreak;\ncase 28: this.begin('LINE'); return 44; \nbreak;\ncase 29: this.begin('LINE'); return 47; \nbreak;\ncase 30: this.begin('LINE'); return 46; \nbreak;\ncase 31: this.popState(); return 15; \nbreak;\ncase 32:return 16;\nbreak;\ncase 33:return 66;\nbreak;\ncase 34:return 67;\nbreak;\ncase 35:return 60;\nbreak;\ncase 36:return 61;\nbreak;\ncase 37:return 62;\nbreak;\ncase 38:return 63;\nbreak;\ncase 39:return 58;\nbreak;\ncase 40:return 55;\nbreak;\ncase 41: this.begin('ID'); return 21; \nbreak;\ncase 42: this.begin('ID'); return 23; \nbreak;\ncase 43:return 29;\nbreak;\ncase 44:return 30;\nbreak;\ncase 45: this.begin(\"acc_title\");return 31; \nbreak;\ncase 46: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 47: this.begin(\"acc_descr\");return 33; \nbreak;\ncase 48: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 49: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 50: this.popState(); \nbreak;\ncase 51:return \"acc_descr_multiline_value\";\nbreak;\ncase 52:return 6;\nbreak;\ncase 53:return 18;\nbreak;\ncase 54:return 20;\nbreak;\ncase 55:return 65;\nbreak;\ncase 56:return 5;\nbreak;\ncase 57: yy_.yytext = yy_.yytext.trim(); return 71; \nbreak;\ncase 58:return 78;\nbreak;\ncase 59:return 79;\nbreak;\ncase 60:return 80;\nbreak;\ncase 61:return 81;\nbreak;\ncase 62:return 76;\nbreak;\ncase 63:return 77;\nbreak;\ncase 64:return 82;\nbreak;\ncase 65:return 83;\nbreak;\ncase 66:return 84;\nbreak;\ncase 67:return 85;\nbreak;\ncase 68:return 86;\nbreak;\ncase 69:return 86;\nbreak;\ncase 70:return 69;\nbreak;\ncase 71:return 70;\nbreak;\ncase 72:return 5;\nbreak;\ncase 73:return 'INVALID';\nbreak;\n}\n},\nrules: [/^(?:[\\n]+)/i,/^(?:\\s+)/i,/^(?:((?!\\n)\\s)+)/i,/^(?:#[^\\n]*)/i,/^(?:%(?!\\{)[^\\n]*)/i,/^(?:[^\\}]%%[^\\n]*)/i,/^(?:[0-9]+(?=[ \\n]+))/i,/^(?:@\\{)/i,/^(?:[^\\}]+)/i,/^(?:\\})/i,/^(?:[^\\<->\\->:\\n,;@\\s]+(?=@\\{))/i,/^(?:[^\\<->\\->:\\n,;@]+?([\\-]*[^\\<->\\->:\\n,;@]+?)*?(?=((?!\\n)\\s)+as(?!\\n)\\s|[#\\n;]|$))/i,/^(?:box\\b)/i,/^(?:participant\\b)/i,/^(?:actor\\b)/i,/^(?:create\\b)/i,/^(?:destroy\\b)/i,/^(?:[^<\\->\\->:\\n,;]+?([\\-]*[^<\\->\\->:\\n,;]+?)*?(?=((?!\\n)\\s)+as(?!\\n)\\s|[#\\n;]|$))/i,/^(?:as\\b)/i,/^(?:(?:))/i,/^(?:loop\\b)/i,/^(?:rect\\b)/i,/^(?:opt\\b)/i,/^(?:alt\\b)/i,/^(?:else\\b)/i,/^(?:par\\b)/i,/^(?:par_over\\b)/i,/^(?:and\\b)/i,/^(?:critical\\b)/i,/^(?:option\\b)/i,/^(?:break\\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\\n;]*)/i,/^(?:end\\b)/i,/^(?:left of\\b)/i,/^(?:right of\\b)/i,/^(?:links\\b)/i,/^(?:link\\b)/i,/^(?:properties\\b)/i,/^(?:details\\b)/i,/^(?:over\\b)/i,/^(?:note\\b)/i,/^(?:activate\\b)/i,/^(?:deactivate\\b)/i,/^(?:title\\s[^#\\n;]+)/i,/^(?:title:\\s[^#\\n;]+)/i,/^(?:accTitle\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*\\{\\s*)/i,/^(?:[\\}])/i,/^(?:[^\\}]*)/i,/^(?:sequenceDiagram\\b)/i,/^(?:autonumber\\b)/i,/^(?:off\\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^+<\\->\\->:\\n,;]+((?!(-x|--x|-\\)|--\\)))[\\-]*[^\\+<\\->\\->:\\n,;]+)*)/i,/^(?:->>)/i,/^(?:<<->>)/i,/^(?:-->>)/i,/^(?:<<-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\\)])/i,/^(?:--[\\)])/i,/^(?::(?:(?:no)?wrap)?[^#\\n;]*)/i,/^(?::)/i,/^(?:\\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],\nconditions: {\"acc_descr_multiline\":{\"rules\":[50,51],\"inclusive\":false},\"acc_descr\":{\"rules\":[48],\"inclusive\":false},\"acc_title\":{\"rules\":[46],\"inclusive\":false},\"ID\":{\"rules\":[2,3,7,10,11,17],\"inclusive\":false},\"ALIAS\":{\"rules\":[2,3,18,19],\"inclusive\":false},\"LINE\":{\"rules\":[2,3,31],\"inclusive\":false},\"CONFIG\":{\"rules\":[8,9],\"inclusive\":false},\"CONFIG_DATA\":{\"rules\":[],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,3,4,5,6,12,13,14,15,16,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,38,39,40,41,42,43,44,45,47,49,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})(); \n\tparser.parser = parser;\n\texport { parser };\n\texport default parser;\n\t", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport * as yaml from 'js-yaml';\nimport type { DiagramDB } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport { ImperativeState } from '../../utils/imperativeState.js';\nimport { sanitizeText } from '../common/common.js';\nimport {\n clear as commonClear,\n getAccDescription,\n getAccTitle,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle,\n} from '../common/commonDb.js';\nimport type { Actor, AddMessageParams, Box, Message, Note } from './types.js';\nimport type { ParticipantMetaData } from '../../types.js';\n\ninterface SequenceState {\n prevActor?: string;\n actors: Map;\n createdActors: Map;\n destroyedActors: Map;\n boxes: Box[];\n messages: Message[];\n notes: Note[];\n sequenceNumbersEnabled: boolean;\n wrapEnabled?: boolean;\n currentBox?: Box;\n lastCreated?: Actor;\n lastDestroyed?: Actor;\n}\n\nconst LINETYPE = {\n SOLID: 0,\n DOTTED: 1,\n NOTE: 2,\n SOLID_CROSS: 3,\n DOTTED_CROSS: 4,\n SOLID_OPEN: 5,\n DOTTED_OPEN: 6,\n LOOP_START: 10,\n LOOP_END: 11,\n ALT_START: 12,\n ALT_ELSE: 13,\n ALT_END: 14,\n OPT_START: 15,\n OPT_END: 16,\n ACTIVE_START: 17,\n ACTIVE_END: 18,\n PAR_START: 19,\n PAR_AND: 20,\n PAR_END: 21,\n RECT_START: 22,\n RECT_END: 23,\n SOLID_POINT: 24,\n DOTTED_POINT: 25,\n AUTONUMBER: 26,\n CRITICAL_START: 27,\n CRITICAL_OPTION: 28,\n CRITICAL_END: 29,\n BREAK_START: 30,\n BREAK_END: 31,\n PAR_OVER_START: 32,\n BIDIRECTIONAL_SOLID: 33,\n BIDIRECTIONAL_DOTTED: 34,\n} as const;\n\nconst ARROWTYPE = {\n FILLED: 0,\n OPEN: 1,\n} as const;\n\nconst PLACEMENT = {\n LEFTOF: 0,\n RIGHTOF: 1,\n OVER: 2,\n} as const;\n\nexport const PARTICIPANT_TYPE = {\n ACTOR: 'actor',\n BOUNDARY: 'boundary',\n COLLECTIONS: 'collections',\n CONTROL: 'control',\n DATABASE: 'database',\n ENTITY: 'entity',\n PARTICIPANT: 'participant',\n QUEUE: 'queue',\n} as const;\n\nexport class SequenceDB implements DiagramDB {\n private readonly state = new ImperativeState(() => ({\n prevActor: undefined,\n actors: new Map(),\n createdActors: new Map(),\n destroyedActors: new Map(),\n boxes: [],\n messages: [],\n notes: [],\n sequenceNumbersEnabled: false,\n wrapEnabled: undefined,\n currentBox: undefined,\n lastCreated: undefined,\n lastDestroyed: undefined,\n }));\n\n constructor() {\n // Needed for JISON since it only supports direct properties\n this.apply = this.apply.bind(this);\n this.parseBoxData = this.parseBoxData.bind(this);\n this.parseMessage = this.parseMessage.bind(this);\n\n this.clear();\n\n this.setWrap(getConfig().wrap);\n this.LINETYPE = LINETYPE;\n this.ARROWTYPE = ARROWTYPE;\n this.PLACEMENT = PLACEMENT;\n }\n\n public addBox(data: { text: string; color: string; wrap: boolean }) {\n this.state.records.boxes.push({\n name: data.text,\n wrap: data.wrap ?? this.autoWrap(),\n fill: data.color,\n actorKeys: [],\n });\n this.state.records.currentBox = this.state.records.boxes.slice(-1)[0];\n }\n\n public addActor(\n id: string,\n name: string,\n description: { text: string; wrap?: boolean | null; type: string },\n type: string,\n metadata?: any\n ) {\n let assignedBox = this.state.records.currentBox;\n let doc;\n if (metadata !== undefined) {\n let yamlData;\n // detect if shapeData contains a newline character\n if (!metadata.includes('\\n')) {\n yamlData = '{\\n' + metadata + '\\n}';\n } else {\n yamlData = metadata + '\\n';\n }\n doc = yaml.load(yamlData, { schema: yaml.JSON_SCHEMA }) as ParticipantMetaData;\n }\n type = doc?.type ?? type;\n const old = this.state.records.actors.get(id);\n if (old) {\n // If already set and trying to set to a new one throw error\n if (this.state.records.currentBox && old.box && this.state.records.currentBox !== old.box) {\n throw new Error(\n `A same participant should only be defined in one Box: ${old.name} can't be in '${old.box.name}' and in '${this.state.records.currentBox.name}' at the same time.`\n );\n }\n\n // Don't change the box if already\n assignedBox = old.box ? old.box : this.state.records.currentBox;\n old.box = assignedBox;\n\n // Don't allow description nulling\n if (old && name === old.name && description == null) {\n return;\n }\n }\n\n // Don't allow null descriptions, either\n if (description?.text == null) {\n description = { text: name, type };\n }\n if (type == null || description.text == null) {\n description = { text: name, type };\n }\n\n this.state.records.actors.set(id, {\n box: assignedBox,\n name: name,\n description: description.text,\n wrap: description.wrap ?? this.autoWrap(),\n prevActor: this.state.records.prevActor,\n links: {},\n properties: {},\n actorCnt: null,\n rectData: null,\n type: type ?? 'participant',\n });\n if (this.state.records.prevActor) {\n const prevActorInRecords = this.state.records.actors.get(this.state.records.prevActor);\n if (prevActorInRecords) {\n prevActorInRecords.nextActor = id;\n }\n }\n\n if (this.state.records.currentBox) {\n this.state.records.currentBox.actorKeys.push(id);\n }\n this.state.records.prevActor = id;\n }\n\n private activationCount(part: string) {\n let i;\n let count = 0;\n if (!part) {\n return 0;\n }\n for (i = 0; i < this.state.records.messages.length; i++) {\n if (\n this.state.records.messages[i].type === this.LINETYPE.ACTIVE_START &&\n this.state.records.messages[i].from === part\n ) {\n count++;\n }\n if (\n this.state.records.messages[i].type === this.LINETYPE.ACTIVE_END &&\n this.state.records.messages[i].from === part\n ) {\n count--;\n }\n }\n return count;\n }\n\n public addMessage(\n idFrom: Message['from'],\n idTo: Message['to'],\n message: { text: string; wrap?: boolean },\n answer: Message['answer']\n ) {\n this.state.records.messages.push({\n id: this.state.records.messages.length.toString(),\n from: idFrom,\n to: idTo,\n message: message.text,\n wrap: message.wrap ?? this.autoWrap(),\n answer: answer,\n });\n }\n\n public addSignal(\n idFrom?: Message['from'],\n idTo?: Message['to'],\n message?: { text: string; wrap: boolean },\n messageType?: number,\n activate = false\n ) {\n if (messageType === this.LINETYPE.ACTIVE_END) {\n const cnt = this.activationCount(idFrom ?? '');\n if (cnt < 1) {\n // Bail out as there is an activation signal from an inactive participant\n const error = new Error('Trying to inactivate an inactive participant (' + idFrom + ')');\n\n // @ts-ignore: we are passing hash param to the error object, however we should define our own custom error class to make it type safe\n error.hash = {\n text: '->>-',\n token: '->>-',\n line: '1',\n loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },\n expected: [\"'ACTIVE_PARTICIPANT'\"],\n };\n throw error;\n }\n }\n this.state.records.messages.push({\n id: this.state.records.messages.length.toString(),\n from: idFrom,\n to: idTo,\n message: message?.text ?? '',\n wrap: message?.wrap ?? this.autoWrap(),\n type: messageType,\n activate,\n });\n return true;\n }\n\n public hasAtLeastOneBox() {\n return this.state.records.boxes.length > 0;\n }\n\n public hasAtLeastOneBoxWithTitle() {\n return this.state.records.boxes.some((b) => b.name);\n }\n\n public getMessages() {\n return this.state.records.messages;\n }\n\n public getBoxes() {\n return this.state.records.boxes;\n }\n public getActors() {\n return this.state.records.actors;\n }\n public getCreatedActors() {\n return this.state.records.createdActors;\n }\n public getDestroyedActors() {\n return this.state.records.destroyedActors;\n }\n public getActor(id: string) {\n // TODO: do we ever use this function in a way that it might return undefined?\n return this.state.records.actors.get(id)!;\n }\n public getActorKeys() {\n return [...this.state.records.actors.keys()];\n }\n public enableSequenceNumbers() {\n this.state.records.sequenceNumbersEnabled = true;\n }\n public disableSequenceNumbers() {\n this.state.records.sequenceNumbersEnabled = false;\n }\n public showSequenceNumbers() {\n return this.state.records.sequenceNumbersEnabled;\n }\n\n public setWrap(wrapSetting?: boolean) {\n this.state.records.wrapEnabled = wrapSetting;\n }\n\n private extractWrap(text?: string): { cleanedText?: string; wrap?: boolean } {\n if (text === undefined) {\n return {};\n }\n text = text.trim();\n const wrap =\n /^:?wrap:/.exec(text) !== null ? true : /^:?nowrap:/.exec(text) !== null ? false : undefined;\n const cleanedText = (wrap === undefined ? text : text.replace(/^:?(?:no)?wrap:/, '')).trim();\n return { cleanedText, wrap };\n }\n\n public autoWrap() {\n // if setWrap has been called, use that value, otherwise use the value from the config\n // TODO: refactor, always use the config value let setWrap update the config value\n if (this.state.records.wrapEnabled !== undefined) {\n return this.state.records.wrapEnabled;\n }\n return getConfig().sequence?.wrap ?? false;\n }\n\n public clear() {\n this.state.reset();\n commonClear();\n }\n\n public parseMessage(str: string) {\n const trimmedStr = str.trim();\n const { wrap, cleanedText } = this.extractWrap(trimmedStr);\n const message = {\n text: cleanedText,\n wrap,\n };\n log.debug(`parseMessage: ${JSON.stringify(message)}`);\n return message;\n }\n\n // We expect the box statement to be color first then description\n // The color can be rgb,rgba,hsl,hsla, or css code names #hex codes are not supported for now because of the way the char # is handled\n // We extract first segment as color, the rest of the line is considered as text\n public parseBoxData(str: string) {\n const match = /^((?:rgba?|hsla?)\\s*\\(.*\\)|\\w*)(.*)$/.exec(str);\n let color = match?.[1] ? match[1].trim() : 'transparent';\n let title = match?.[2] ? match[2].trim() : undefined;\n\n // check that the string is a color\n if (window?.CSS) {\n if (!window.CSS.supports('color', color)) {\n color = 'transparent';\n title = str.trim();\n }\n } else {\n const style = new Option().style;\n style.color = color;\n if (style.color !== color) {\n color = 'transparent';\n title = str.trim();\n }\n }\n const { wrap, cleanedText } = this.extractWrap(title);\n return {\n text: cleanedText ? sanitizeText(cleanedText, getConfig()) : undefined,\n color,\n wrap,\n };\n }\n\n public readonly LINETYPE: typeof LINETYPE;\n public readonly ARROWTYPE: typeof ARROWTYPE;\n public readonly PLACEMENT: typeof PLACEMENT;\n\n public addNote(\n actor: { actor: string },\n placement: Message['placement'],\n message: { text: string; wrap?: boolean }\n ) {\n const note: Note = {\n actor: actor,\n placement: placement,\n message: message.text,\n wrap: message.wrap ?? this.autoWrap(),\n };\n\n //@ts-ignore: Coerce actor into a [to, from, ...] array\n // eslint-disable-next-line unicorn/prefer-spread\n const actors = [].concat(actor, actor);\n this.state.records.notes.push(note);\n this.state.records.messages.push({\n id: this.state.records.messages.length.toString(),\n from: actors[0],\n to: actors[1],\n message: message.text,\n wrap: message.wrap ?? this.autoWrap(),\n type: this.LINETYPE.NOTE,\n placement: placement,\n });\n }\n\n public addLinks(actorId: string, text: { text: string }) {\n // find the actor\n const actor = this.getActor(actorId);\n // JSON.parse the text\n try {\n let sanitizedText = sanitizeText(text.text, getConfig());\n sanitizedText = sanitizedText.replace(/=/g, '=');\n sanitizedText = sanitizedText.replace(/&/g, '&');\n const links = JSON.parse(sanitizedText);\n // add the deserialized text to the actor's links field.\n this.insertLinks(actor, links);\n } catch (e) {\n log.error('error while parsing actor link text', e);\n }\n }\n\n public addALink(actorId: string, text: { text: string }) {\n // find the actor\n const actor = this.getActor(actorId);\n try {\n const links: Record = {};\n let sanitizedText = sanitizeText(text.text, getConfig());\n const sep = sanitizedText.indexOf('@');\n sanitizedText = sanitizedText.replace(/=/g, '=');\n sanitizedText = sanitizedText.replace(/&/g, '&');\n const label = sanitizedText.slice(0, sep - 1).trim();\n const link = sanitizedText.slice(sep + 1).trim();\n\n links[label] = link;\n // add the deserialized text to the actor's links field.\n this.insertLinks(actor, links);\n } catch (e) {\n log.error('error while parsing actor link text', e);\n }\n }\n\n private insertLinks(actor: Actor, links: Record) {\n if (actor.links == null) {\n actor.links = links;\n } else {\n for (const key in links) {\n actor.links[key] = links[key];\n }\n }\n }\n\n public addProperties(actorId: string, text: { text: string }) {\n // find the actor\n const actor = this.getActor(actorId);\n // JSON.parse the text\n try {\n const sanitizedText = sanitizeText(text.text, getConfig());\n const properties: Record = JSON.parse(sanitizedText);\n // add the deserialized text to the actor's property field.\n this.insertProperties(actor, properties);\n } catch (e) {\n log.error('error while parsing actor properties text', e);\n }\n }\n\n private insertProperties(actor: Actor, properties: Record) {\n if (actor.properties == null) {\n actor.properties = properties;\n } else {\n for (const key in properties) {\n actor.properties[key] = properties[key];\n }\n }\n }\n\n private boxEnd() {\n this.state.records.currentBox = undefined;\n }\n\n public addDetails(actorId: string, text: { text: string }) {\n // find the actor\n const actor = this.getActor(actorId);\n const elem = document.getElementById(text.text)!;\n\n // JSON.parse the text\n try {\n const text = elem.innerHTML;\n const details = JSON.parse(text);\n // add the deserialized text to the actor's property field.\n if (details.properties) {\n this.insertProperties(actor, details.properties);\n }\n\n if (details.links) {\n this.insertLinks(actor, details.links);\n }\n } catch (e) {\n log.error('error while parsing actor details text', e);\n }\n }\n\n public getActorProperty(actor: Actor, key: string) {\n if (actor?.properties !== undefined) {\n return actor.properties[key];\n }\n\n return undefined;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-redundant-type-constituents\n public apply(param: any | AddMessageParams | AddMessageParams[]) {\n if (Array.isArray(param)) {\n param.forEach((item) => {\n this.apply(item);\n });\n } else {\n switch (param.type) {\n case 'sequenceIndex':\n this.state.records.messages.push({\n id: this.state.records.messages.length.toString(),\n from: undefined,\n to: undefined,\n message: {\n start: param.sequenceIndex,\n step: param.sequenceIndexStep,\n visible: param.sequenceVisible,\n },\n wrap: false,\n type: param.signalType,\n });\n break;\n case 'addParticipant':\n this.addActor(param.actor, param.actor, param.description, param.draw, param.config);\n break;\n case 'createParticipant':\n if (this.state.records.actors.has(param.actor)) {\n throw new Error(\n \"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\"\n );\n }\n this.state.records.lastCreated = param.actor;\n this.addActor(param.actor, param.actor, param.description, param.draw, param.config);\n this.state.records.createdActors.set(param.actor, this.state.records.messages.length);\n break;\n case 'destroyParticipant':\n this.state.records.lastDestroyed = param.actor;\n this.state.records.destroyedActors.set(param.actor, this.state.records.messages.length);\n break;\n case 'activeStart':\n this.addSignal(param.actor, undefined, undefined, param.signalType);\n break;\n case 'activeEnd':\n this.addSignal(param.actor, undefined, undefined, param.signalType);\n break;\n case 'addNote':\n this.addNote(param.actor, param.placement, param.text);\n break;\n case 'addLinks':\n this.addLinks(param.actor, param.text);\n break;\n case 'addALink':\n this.addALink(param.actor, param.text);\n break;\n case 'addProperties':\n this.addProperties(param.actor, param.text);\n break;\n case 'addDetails':\n this.addDetails(param.actor, param.text);\n break;\n case 'addMessage':\n if (this.state.records.lastCreated) {\n if (param.to !== this.state.records.lastCreated) {\n throw new Error(\n 'The created participant ' +\n this.state.records.lastCreated.name +\n ' does not have an associated creating message after its declaration. Please check the sequence diagram.'\n );\n } else {\n this.state.records.lastCreated = undefined;\n }\n } else if (this.state.records.lastDestroyed) {\n if (\n param.to !== this.state.records.lastDestroyed &&\n param.from !== this.state.records.lastDestroyed\n ) {\n throw new Error(\n 'The destroyed participant ' +\n this.state.records.lastDestroyed.name +\n ' does not have an associated destroying message after its declaration. Please check the sequence diagram.'\n );\n } else {\n this.state.records.lastDestroyed = undefined;\n }\n }\n this.addSignal(param.from, param.to, param.msg, param.signalType, param.activate);\n break;\n case 'boxStart':\n this.addBox(param.boxData);\n break;\n case 'boxEnd':\n this.boxEnd();\n break;\n case 'loopStart':\n this.addSignal(undefined, undefined, param.loopText, param.signalType);\n break;\n case 'loopEnd':\n this.addSignal(undefined, undefined, undefined, param.signalType);\n break;\n case 'rectStart':\n this.addSignal(undefined, undefined, param.color, param.signalType);\n break;\n case 'rectEnd':\n this.addSignal(undefined, undefined, undefined, param.signalType);\n break;\n case 'optStart':\n this.addSignal(undefined, undefined, param.optText, param.signalType);\n break;\n case 'optEnd':\n this.addSignal(undefined, undefined, undefined, param.signalType);\n break;\n case 'altStart':\n this.addSignal(undefined, undefined, param.altText, param.signalType);\n break;\n case 'else':\n this.addSignal(undefined, undefined, param.altText, param.signalType);\n break;\n case 'altEnd':\n this.addSignal(undefined, undefined, undefined, param.signalType);\n break;\n case 'setAccTitle':\n setAccTitle(param.text);\n break;\n case 'parStart':\n this.addSignal(undefined, undefined, param.parText, param.signalType);\n break;\n case 'and':\n this.addSignal(undefined, undefined, param.parText, param.signalType);\n break;\n case 'parEnd':\n this.addSignal(undefined, undefined, undefined, param.signalType);\n break;\n case 'criticalStart':\n this.addSignal(undefined, undefined, param.criticalText, param.signalType);\n break;\n case 'option':\n this.addSignal(undefined, undefined, param.optionText, param.signalType);\n break;\n case 'criticalEnd':\n this.addSignal(undefined, undefined, undefined, param.signalType);\n break;\n case 'breakStart':\n this.addSignal(undefined, undefined, param.breakText, param.signalType);\n break;\n case 'breakEnd':\n this.addSignal(undefined, undefined, undefined, param.signalType);\n break;\n }\n }\n }\n\n public setAccTitle = setAccTitle;\n public setAccDescription = setAccDescription;\n public setDiagramTitle = setDiagramTitle;\n public getAccTitle = getAccTitle;\n public getAccDescription = getAccDescription;\n public getDiagramTitle = getDiagramTitle;\n public getConfig() {\n return getConfig().sequence;\n }\n}\n", "const getStyles = (options) =>\n `.actor {\n stroke: ${options.actorBorder};\n fill: ${options.actorBkg};\n }\n\n text.actor > tspan {\n fill: ${options.actorTextColor};\n stroke: none;\n }\n\n .actor-line {\n stroke: ${options.actorLineColor};\n }\n \n .innerArc {\n stroke-width: 1.5;\n stroke-dasharray: none;\n }\n\n .messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: none;\n stroke: ${options.signalColor};\n }\n\n .messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: 2, 2;\n stroke: ${options.signalColor};\n }\n\n #arrowhead path {\n fill: ${options.signalColor};\n stroke: ${options.signalColor};\n }\n\n .sequenceNumber {\n fill: ${options.sequenceNumberColor};\n }\n\n #sequencenumber {\n fill: ${options.signalColor};\n }\n\n #crosshead path {\n fill: ${options.signalColor};\n stroke: ${options.signalColor};\n }\n\n .messageText {\n fill: ${options.signalTextColor};\n stroke: none;\n }\n\n .labelBox {\n stroke: ${options.labelBoxBorderColor};\n fill: ${options.labelBoxBkgColor};\n }\n\n .labelText, .labelText > tspan {\n fill: ${options.labelTextColor};\n stroke: none;\n }\n\n .loopText, .loopText > tspan {\n fill: ${options.loopTextColor};\n stroke: none;\n }\n\n .loopLine {\n stroke-width: 2px;\n stroke-dasharray: 2, 2;\n stroke: ${options.labelBoxBorderColor};\n fill: ${options.labelBoxBorderColor};\n }\n\n .note {\n //stroke: #decc93;\n stroke: ${options.noteBorderColor};\n fill: ${options.noteBkgColor};\n }\n\n .noteText, .noteText > tspan {\n fill: ${options.noteTextColor};\n stroke: none;\n }\n\n .activation0 {\n fill: ${options.activationBkgColor};\n stroke: ${options.activationBorderColor};\n }\n\n .activation1 {\n fill: ${options.activationBkgColor};\n stroke: ${options.activationBorderColor};\n }\n\n .activation2 {\n fill: ${options.activationBkgColor};\n stroke: ${options.activationBorderColor};\n }\n\n .actorPopupMenu {\n position: absolute;\n }\n\n .actorPopupMenuPanel {\n position: absolute;\n fill: ${options.actorBkg};\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));\n}\n .actor-man line {\n stroke: ${options.actorBorder};\n fill: ${options.actorBkg};\n }\n .actor-man circle, line {\n stroke: ${options.actorBorder};\n fill: ${options.actorBkg};\n stroke-width: 2px;\n }\n\n`;\n\nexport default getStyles;\n", "import { sanitizeUrl } from '@braintree/sanitize-url';\nimport * as configApi from '../../config.js';\nimport { ZERO_WIDTH_SPACE, parseFontSize } from '../../utils.js';\nimport common, {\n calculateMathMLDimensions,\n hasKatex,\n renderKatexSanitized,\n} from '../common/common.js';\nimport * as svgDrawCommon from '../common/svgDrawCommon.js';\n\nexport const ACTOR_TYPE_WIDTH = 18 * 2;\nconst TOP_ACTOR_CLASS = 'actor-top';\nconst BOTTOM_ACTOR_CLASS = 'actor-bottom';\nconst ACTOR_BOX_CLASS = 'actor-box';\nconst ACTOR_MAN_FIGURE_CLASS = 'actor-man';\n\nexport const drawRect = function (elem, rectData) {\n return svgDrawCommon.drawRect(elem, rectData);\n};\n\nexport const drawPopup = function (elem, actor, minMenuWidth, textAttrs, forceMenus) {\n if (actor.links === undefined || actor.links === null || Object.keys(actor.links).length === 0) {\n return { height: 0, width: 0 };\n }\n\n const links = actor.links;\n const actorCnt = actor.actorCnt;\n const rectData = actor.rectData;\n\n var displayValue = 'none';\n if (forceMenus) {\n displayValue = 'block !important';\n }\n\n const g = elem.append('g');\n g.attr('id', 'actor' + actorCnt + '_popup');\n g.attr('class', 'actorPopupMenu');\n g.attr('display', displayValue);\n var actorClass = '';\n if (rectData.class !== undefined) {\n actorClass = ' ' + rectData.class;\n }\n\n let menuWidth = rectData.width > minMenuWidth ? rectData.width : minMenuWidth;\n\n const rectElem = g.append('rect');\n rectElem.attr('class', 'actorPopupMenuPanel' + actorClass);\n rectElem.attr('x', rectData.x);\n rectElem.attr('y', rectData.height);\n rectElem.attr('fill', rectData.fill);\n rectElem.attr('stroke', rectData.stroke);\n rectElem.attr('width', menuWidth);\n rectElem.attr('height', rectData.height);\n rectElem.attr('rx', rectData.rx);\n rectElem.attr('ry', rectData.ry);\n if (links != null) {\n var linkY = 20;\n for (let key in links) {\n var linkElem = g.append('a');\n var sanitizedLink = sanitizeUrl(links[key]);\n linkElem.attr('xlink:href', sanitizedLink);\n linkElem.attr('target', '_blank');\n\n _drawMenuItemTextCandidateFunc(textAttrs)(\n key,\n linkElem,\n rectData.x + 10,\n rectData.height + linkY,\n menuWidth,\n 20,\n { class: 'actor' },\n textAttrs\n );\n\n linkY += 30;\n }\n }\n\n rectElem.attr('height', linkY);\n\n return { height: rectData.height + linkY, width: menuWidth };\n};\n\nconst popupMenuToggle = function (popId) {\n return (\n \"var pu = document.getElementById('\" +\n popId +\n \"'); if (pu != null) { pu.style.display = pu.style.display == 'block' ? 'none' : 'block'; }\"\n );\n};\n\nexport const drawKatex = async function (elem, textData, msgModel = null) {\n let textElem = elem.append('foreignObject');\n const linesSanitized = await renderKatexSanitized(textData.text, configApi.getConfig());\n\n const divElem = textElem\n .append('xhtml:div')\n .attr('style', 'width: fit-content;')\n .attr('xmlns', 'http://www.w3.org/1999/xhtml')\n .html(linesSanitized);\n const dim = divElem.node().getBoundingClientRect();\n\n textElem.attr('height', Math.round(dim.height)).attr('width', Math.round(dim.width));\n\n if (textData.class === 'noteText') {\n const rectElem = elem.node().firstChild;\n\n rectElem.setAttribute('height', dim.height + 2 * textData.textMargin);\n const rectDim = rectElem.getBBox();\n\n textElem\n .attr('x', Math.round(rectDim.x + rectDim.width / 2 - dim.width / 2))\n .attr('y', Math.round(rectDim.y + rectDim.height / 2 - dim.height / 2));\n } else if (msgModel) {\n let { startx, stopx, starty } = msgModel;\n if (startx > stopx) {\n const temp = startx;\n startx = stopx;\n stopx = temp;\n }\n\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n textElem.attr('x', Math.round(startx + Math.abs(startx - stopx) / 2 - dim.width / 2));\n if (textData.class === 'loopText') {\n textElem.attr('y', Math.round(starty));\n } else {\n textElem.attr('y', Math.round(starty - dim.height));\n }\n }\n\n return [textElem];\n};\n\nexport const drawText = function (elem, textData) {\n let prevTextHeight = 0;\n let textHeight = 0;\n const lines = textData.text.split(common.lineBreakRegex);\n\n const [_textFontSize, _textFontSizePx] = parseFontSize(textData.fontSize);\n\n let textElems = [];\n let dy = 0;\n let yfunc = () => textData.y;\n if (\n textData.valign !== undefined &&\n textData.textMargin !== undefined &&\n textData.textMargin > 0\n ) {\n switch (textData.valign) {\n case 'top':\n case 'start':\n yfunc = () => Math.round(textData.y + textData.textMargin);\n break;\n case 'middle':\n case 'center':\n yfunc = () =>\n Math.round(textData.y + (prevTextHeight + textHeight + textData.textMargin) / 2);\n break;\n case 'bottom':\n case 'end':\n yfunc = () =>\n Math.round(\n textData.y +\n (prevTextHeight + textHeight + 2 * textData.textMargin) -\n textData.textMargin\n );\n break;\n }\n }\n\n if (\n textData.anchor !== undefined &&\n textData.textMargin !== undefined &&\n textData.width !== undefined\n ) {\n switch (textData.anchor) {\n case 'left':\n case 'start':\n textData.x = Math.round(textData.x + textData.textMargin);\n textData.anchor = 'start';\n textData.dominantBaseline = 'middle';\n textData.alignmentBaseline = 'middle';\n break;\n case 'middle':\n case 'center':\n textData.x = Math.round(textData.x + textData.width / 2);\n textData.anchor = 'middle';\n textData.dominantBaseline = 'middle';\n textData.alignmentBaseline = 'middle';\n break;\n case 'right':\n case 'end':\n textData.x = Math.round(textData.x + textData.width - textData.textMargin);\n textData.anchor = 'end';\n textData.dominantBaseline = 'middle';\n textData.alignmentBaseline = 'middle';\n break;\n }\n }\n\n for (let [i, line] of lines.entries()) {\n if (\n textData.textMargin !== undefined &&\n textData.textMargin === 0 &&\n _textFontSize !== undefined\n ) {\n dy = i * _textFontSize;\n }\n\n const textElem = elem.append('text');\n textElem.attr('x', textData.x);\n textElem.attr('y', yfunc());\n if (textData.anchor !== undefined) {\n textElem\n .attr('text-anchor', textData.anchor)\n .attr('dominant-baseline', textData.dominantBaseline)\n .attr('alignment-baseline', textData.alignmentBaseline);\n }\n if (textData.fontFamily !== undefined) {\n textElem.style('font-family', textData.fontFamily);\n }\n if (_textFontSizePx !== undefined) {\n textElem.style('font-size', _textFontSizePx);\n }\n if (textData.fontWeight !== undefined) {\n textElem.style('font-weight', textData.fontWeight);\n }\n if (textData.fill !== undefined) {\n textElem.attr('fill', textData.fill);\n }\n if (textData.class !== undefined) {\n textElem.attr('class', textData.class);\n }\n if (textData.dy !== undefined) {\n textElem.attr('dy', textData.dy);\n } else if (dy !== 0) {\n textElem.attr('dy', dy);\n }\n\n const text = line || ZERO_WIDTH_SPACE;\n if (textData.tspan) {\n const span = textElem.append('tspan');\n span.attr('x', textData.x);\n if (textData.fill !== undefined) {\n span.attr('fill', textData.fill);\n }\n span.text(text);\n } else {\n textElem.text(text);\n }\n if (\n textData.valign !== undefined &&\n textData.textMargin !== undefined &&\n textData.textMargin > 0\n ) {\n textHeight += (textElem._groups || textElem)[0][0].getBBox().height;\n prevTextHeight = textHeight;\n }\n\n textElems.push(textElem);\n }\n\n return textElems;\n};\n\nexport const drawLabel = function (elem, txtObject) {\n /**\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} cut\n * @returns {any}\n */\n function genPoints(x, y, width, height, cut) {\n return (\n x +\n ',' +\n y +\n ' ' +\n (x + width) +\n ',' +\n y +\n ' ' +\n (x + width) +\n ',' +\n (y + height - cut) +\n ' ' +\n (x + width - cut * 1.2) +\n ',' +\n (y + height) +\n ' ' +\n x +\n ',' +\n (y + height)\n );\n }\n const polygon = elem.append('polygon');\n polygon.attr('points', genPoints(txtObject.x, txtObject.y, txtObject.width, txtObject.height, 7));\n polygon.attr('class', 'labelBox');\n\n txtObject.y = txtObject.y + txtObject.height / 2;\n\n drawText(elem, txtObject);\n return polygon;\n};\n\nlet actorCnt = -1;\n\nexport const fixLifeLineHeights = (diagram, actors, actorKeys, conf) => {\n if (!diagram.select) {\n return;\n }\n actorKeys.forEach((actorKey) => {\n const actor = actors.get(actorKey);\n const actorDOM = diagram.select('#actor' + actor.actorCnt);\n if (!conf.mirrorActors && actor.stopy) {\n actorDOM.attr('y2', actor.stopy + actor.height / 2);\n } else if (conf.mirrorActors) {\n actorDOM.attr('y2', actor.stopy);\n }\n });\n};\n\n/**\n * Draws an actor in the diagram with the attached line\n *\n * @param {any} elem - The diagram we'll draw to.\n * @param {any} actor - The actor to draw.\n * @param {any} conf - DrawText implementation discriminator object\n * @param {boolean} isFooter - If the actor is the footer one\n */\nconst drawActorTypeParticipant = function (elem, actor, conf, isFooter) {\n const actorY = isFooter ? actor.stopy : actor.starty;\n const center = actor.x + actor.width / 2;\n const centerY = actorY + actor.height;\n\n const boxplusLineGroup = elem.append('g').lower();\n var g = boxplusLineGroup;\n\n if (!isFooter) {\n actorCnt++;\n if (Object.keys(actor.links || {}).length && !conf.forceMenus) {\n g.attr('onclick', popupMenuToggle(`actor${actorCnt}_popup`)).attr('cursor', 'pointer');\n }\n g.append('line')\n .attr('id', 'actor' + actorCnt)\n .attr('x1', center)\n .attr('y1', centerY)\n .attr('x2', center)\n .attr('y2', 2000)\n .attr('class', 'actor-line 200')\n .attr('stroke-width', '0.5px')\n .attr('stroke', '#999')\n .attr('name', actor.name);\n\n g = boxplusLineGroup.append('g');\n actor.actorCnt = actorCnt;\n\n if (actor.links != null) {\n g.attr('id', 'root-' + actorCnt);\n }\n }\n\n const rect = svgDrawCommon.getNoteRect();\n var cssclass = 'actor';\n if (actor.properties?.class) {\n cssclass = actor.properties.class;\n } else {\n rect.fill = '#eaeaea';\n }\n if (isFooter) {\n cssclass += ` ${BOTTOM_ACTOR_CLASS}`;\n } else {\n cssclass += ` ${TOP_ACTOR_CLASS}`;\n }\n rect.x = actor.x;\n rect.y = actorY;\n rect.width = actor.width;\n rect.height = actor.height;\n rect.class = cssclass;\n rect.rx = 3;\n rect.ry = 3;\n rect.name = actor.name;\n const rectElem = drawRect(g, rect);\n actor.rectData = rect;\n\n if (actor.properties?.icon) {\n const iconSrc = actor.properties.icon.trim();\n if (iconSrc.charAt(0) === '@') {\n svgDrawCommon.drawEmbeddedImage(g, rect.x + rect.width - 20, rect.y + 10, iconSrc.substr(1));\n } else {\n svgDrawCommon.drawImage(g, rect.x + rect.width - 20, rect.y + 10, iconSrc);\n }\n }\n\n _drawTextCandidateFunc(conf, hasKatex(actor.description))(\n actor.description,\n g,\n rect.x,\n rect.y,\n rect.width,\n rect.height,\n { class: `actor ${ACTOR_BOX_CLASS}` },\n conf\n );\n\n let height = actor.height;\n if (rectElem.node) {\n const bounds = rectElem.node().getBBox();\n actor.height = bounds.height;\n height = bounds.height;\n }\n\n return height;\n};\n\n/**\n * Draws an actor in the diagram with the attached line\n *\n * @param {any} elem - The diagram we'll draw to.\n * @param {any} actor - The actor to draw.\n * @param {any} conf - DrawText implementation discriminator object\n * @param {boolean} isFooter - If the actor is the footer one\n */\nconst drawActorTypeCollections = function (elem, actor, conf, isFooter) {\n const actorY = isFooter ? actor.stopy : actor.starty;\n const center = actor.x + actor.width / 2;\n const centerY = actorY + actor.height;\n\n const boxplusLineGroup = elem.append('g').lower();\n var g = boxplusLineGroup;\n\n if (!isFooter) {\n actorCnt++;\n if (Object.keys(actor.links || {}).length && !conf.forceMenus) {\n g.attr('onclick', popupMenuToggle(`actor${actorCnt}_popup`)).attr('cursor', 'pointer');\n }\n g.append('line')\n .attr('id', 'actor' + actorCnt)\n .attr('x1', center)\n .attr('y1', centerY)\n .attr('x2', center)\n .attr('y2', 2000)\n .attr('class', 'actor-line 200')\n .attr('stroke-width', '0.5px')\n .attr('stroke', '#999')\n .attr('name', actor.name);\n\n g = boxplusLineGroup.append('g');\n actor.actorCnt = actorCnt;\n\n if (actor.links != null) {\n g.attr('id', 'root-' + actorCnt);\n }\n }\n\n const rect = svgDrawCommon.getNoteRect();\n var cssclass = 'actor';\n if (actor.properties?.class) {\n cssclass = actor.properties.class;\n } else {\n rect.fill = '#eaeaea';\n }\n if (isFooter) {\n cssclass += ` ${BOTTOM_ACTOR_CLASS}`;\n } else {\n cssclass += ` ${TOP_ACTOR_CLASS}`;\n }\n rect.x = actor.x;\n rect.y = actorY;\n rect.width = actor.width;\n rect.height = actor.height;\n rect.class = cssclass;\n rect.name = actor.name;\n\n // DRAW STACKED RECTANGLES\n const offset = 6;\n const shadowRect = {\n ...rect,\n x: rect.x + (isFooter ? -offset : -offset),\n y: rect.y + (isFooter ? +offset : +offset),\n class: 'actor',\n };\n const rectElem = drawRect(g, rect); // draw main rectangle on top\n drawRect(g, shadowRect);\n actor.rectData = rect;\n\n if (actor.properties?.icon) {\n const iconSrc = actor.properties.icon.trim();\n if (iconSrc.charAt(0) === '@') {\n svgDrawCommon.drawEmbeddedImage(g, rect.x + rect.width - 20, rect.y + 10, iconSrc.substr(1));\n } else {\n svgDrawCommon.drawImage(g, rect.x + rect.width - 20, rect.y + 10, iconSrc);\n }\n }\n\n _drawTextCandidateFunc(conf, hasKatex(actor.description))(\n actor.description,\n g,\n rect.x - offset,\n rect.y + offset,\n rect.width,\n rect.height,\n { class: `actor ${ACTOR_BOX_CLASS}` },\n conf\n );\n\n let height = actor.height;\n if (rectElem.node) {\n const bounds = rectElem.node().getBBox();\n actor.height = bounds.height;\n height = bounds.height;\n }\n\n return height;\n};\n\nconst drawActorTypeQueue = function (elem, actor, conf, isFooter) {\n const actorY = isFooter ? actor.stopy : actor.starty;\n const center = actor.x + actor.width / 2;\n const centerY = actorY + actor.height;\n\n const boxplusLineGroup = elem.append('g').lower();\n let g = boxplusLineGroup;\n\n if (!isFooter) {\n actorCnt++;\n if (Object.keys(actor.links || {}).length && !conf.forceMenus) {\n g.attr('onclick', popupMenuToggle(`actor${actorCnt}_popup`)).attr('cursor', 'pointer');\n }\n g.append('line')\n .attr('id', 'actor' + actorCnt)\n .attr('x1', center)\n .attr('y1', centerY)\n .attr('x2', center)\n .attr('y2', 2000)\n .attr('class', 'actor-line 200')\n .attr('stroke-width', '0.5px')\n .attr('stroke', '#999')\n .attr('name', actor.name);\n\n g = boxplusLineGroup.append('g');\n actor.actorCnt = actorCnt;\n\n if (actor.links != null) {\n g.attr('id', 'root-' + actorCnt);\n }\n }\n\n const rect = svgDrawCommon.getNoteRect();\n let cssclass = 'actor';\n if (actor.properties?.class) {\n cssclass = actor.properties.class;\n } else {\n rect.fill = '#eaeaea';\n }\n\n if (isFooter) {\n cssclass += ` ${BOTTOM_ACTOR_CLASS}`;\n } else {\n cssclass += ` ${TOP_ACTOR_CLASS}`;\n }\n\n rect.x = actor.x;\n rect.y = actorY;\n rect.width = actor.width;\n rect.height = actor.height;\n rect.class = cssclass;\n rect.name = actor.name;\n\n // Cylinder dimensions\n const ry = rect.height / 2;\n const rx = ry / (2.5 + rect.height / 50);\n\n // Cylinder base group\n const cylinderGroup = g.append('g');\n const cylinderArc = g.append('g');\n\n // Main cylinder body\n cylinderGroup\n .append('path')\n .attr(\n 'd',\n `M ${rect.x},${rect.y + ry}\n a ${rx},${ry} 0 0 0 0,${rect.height}\n h ${rect.width - 2 * rx}\n a ${rx},${ry} 0 0 0 0,-${rect.height}\n Z\n `\n )\n .attr('class', cssclass);\n cylinderArc\n .append('path')\n .attr(\n 'd',\n `M ${rect.x},${rect.y + ry}\n a ${rx},${ry} 0 0 0 0,${rect.height}`\n )\n .attr('stroke', '#666')\n .attr('stroke-width', '1px')\n .attr('class', cssclass);\n\n cylinderGroup.attr('transform', `translate(${rx}, ${-(rect.height / 2)})`);\n cylinderArc.attr('transform', `translate(${rect.width - rx}, ${-rect.height / 2})`);\n\n actor.rectData = rect;\n\n if (actor.properties?.icon) {\n const iconSrc = actor.properties.icon.trim();\n const iconX = rect.x + rect.width - 20;\n const iconY = rect.y + 10;\n if (iconSrc.charAt(0) === '@') {\n svgDrawCommon.drawEmbeddedImage(g, iconX, iconY, iconSrc.substr(1));\n } else {\n svgDrawCommon.drawImage(g, iconX, iconY, iconSrc);\n }\n }\n\n _drawTextCandidateFunc(conf, hasKatex(actor.description))(\n actor.description,\n g,\n rect.x,\n rect.y,\n rect.width,\n rect.height,\n { class: `actor ${ACTOR_BOX_CLASS}` },\n conf\n );\n\n let height = actor.height;\n const lastPath = cylinderGroup.select('path:last-child');\n if (lastPath.node()) {\n const bounds = lastPath.node().getBBox();\n actor.height = bounds.height;\n height = bounds.height;\n }\n\n return height;\n};\n\nconst drawActorTypeControl = function (elem, actor, conf, isFooter) {\n const actorY = isFooter ? actor.stopy : actor.starty;\n const center = actor.x + actor.width / 2;\n const centerY = actorY + 75;\n\n const line = elem.append('g').lower();\n\n if (!isFooter) {\n actorCnt++;\n line\n .append('line')\n .attr('id', 'actor' + actorCnt)\n .attr('x1', center)\n .attr('y1', centerY)\n .attr('x2', center)\n .attr('y2', 2000)\n .attr('class', 'actor-line 200')\n .attr('stroke-width', '0.5px')\n .attr('stroke', '#999')\n .attr('name', actor.name);\n\n actor.actorCnt = actorCnt;\n }\n const actElem = elem.append('g');\n let cssClass = ACTOR_MAN_FIGURE_CLASS;\n if (isFooter) {\n cssClass += ` ${BOTTOM_ACTOR_CLASS}`;\n } else {\n cssClass += ` ${TOP_ACTOR_CLASS}`;\n }\n actElem.attr('class', cssClass);\n actElem.attr('name', actor.name);\n\n const rect = svgDrawCommon.getNoteRect();\n rect.x = actor.x;\n rect.y = actorY;\n rect.fill = '#eaeaea';\n rect.width = actor.width;\n rect.height = actor.height;\n rect.class = 'actor';\n\n const cx = actor.x + actor.width / 2;\n const cy = actorY + 30;\n const r = 18;\n\n actElem\n .append('defs')\n .append('marker')\n .attr('id', 'filled-head-control')\n .attr('refX', 11)\n .attr('refY', 5.8)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', '172.5')\n .append('path')\n .attr('d', 'M 14.4 5.6 L 7.2 10.4 L 8.8 5.6 L 7.2 0.8 Z');\n\n // Draw the base circle\n actElem\n .append('circle')\n .attr('cx', cx)\n .attr('cy', cy)\n .attr('r', r)\n .attr('fill', '#eaeaf7')\n .attr('stroke', '#666')\n .attr('stroke-width', 1.2);\n\n // Draw looping arrow as arc path\n actElem\n .append('line')\n .attr('marker-end', 'url(#filled-head-control)')\n .attr('transform', `translate(${cx}, ${cy - r})`);\n\n const bounds = actElem.node().getBBox();\n actor.height = bounds.height + 2 * (conf?.sequence?.labelBoxHeight ?? 0);\n\n _drawTextCandidateFunc(conf, hasKatex(actor.description))(\n actor.description,\n actElem,\n rect.x,\n rect.y + r + (isFooter ? 5 : 10),\n rect.width,\n rect.height,\n { class: `actor ${ACTOR_MAN_FIGURE_CLASS}` },\n conf\n );\n\n return actor.height;\n};\n\nconst drawActorTypeEntity = function (elem, actor, conf, isFooter) {\n const actorY = isFooter ? actor.stopy : actor.starty;\n const center = actor.x + actor.width / 2;\n const centerY = actorY + 75;\n\n const line = elem.append('g').lower();\n\n const actElem = elem.append('g');\n let cssClass = ACTOR_MAN_FIGURE_CLASS;\n if (isFooter) {\n cssClass += ` ${BOTTOM_ACTOR_CLASS}`;\n } else {\n cssClass += ` ${TOP_ACTOR_CLASS}`;\n }\n actElem.attr('class', cssClass);\n actElem.attr('name', actor.name);\n\n const rect = svgDrawCommon.getNoteRect();\n rect.x = actor.x;\n rect.y = actorY;\n rect.fill = '#eaeaea';\n rect.width = actor.width;\n rect.height = actor.height;\n rect.class = 'actor';\n\n const cx = actor.x + actor.width / 2;\n const cy = actorY + (!isFooter ? 25 : 10);\n const r = 18;\n\n actElem\n .append('circle')\n .attr('cx', cx)\n .attr('cy', cy)\n .attr('r', r)\n .attr('width', actor.width)\n .attr('height', actor.height);\n\n actElem\n .append('line')\n .attr('x1', cx - r)\n .attr('x2', cx + r)\n .attr('y1', cy + r)\n .attr('y2', cy + r)\n .attr('stroke', '#333')\n .attr('stroke-width', 2);\n\n const bounds = actElem.node().getBBox();\n actor.height = bounds.height + (conf?.sequence?.labelBoxHeight ?? 0);\n\n if (!isFooter) {\n actorCnt++;\n line\n .append('line')\n .attr('id', 'actor' + actorCnt)\n .attr('x1', center)\n .attr('y1', centerY)\n .attr('x2', center)\n .attr('y2', 2000)\n .attr('class', 'actor-line 200')\n .attr('stroke-width', '0.5px')\n .attr('stroke', '#999')\n .attr('name', actor.name);\n\n actor.actorCnt = actorCnt;\n }\n\n _drawTextCandidateFunc(conf, hasKatex(actor.description))(\n actor.description,\n actElem,\n rect.x,\n rect.y + (!isFooter ? (cy + r - actorY) / 2 : (cy - actorY + r - 5) / 2),\n rect.width,\n rect.height,\n { class: `actor ${ACTOR_MAN_FIGURE_CLASS}` },\n conf\n );\n\n if (!isFooter) {\n actElem.attr('transform', `translate(${0}, ${r / 2})`);\n } else {\n actElem.attr('transform', `translate(${0}, ${r / 2})`);\n }\n\n return actor.height;\n};\n\nconst drawActorTypeDatabase = function (elem, actor, conf, isFooter) {\n const actorY = isFooter ? actor.stopy : actor.starty;\n const center = actor.x + actor.width / 2;\n const centerY = actorY + actor.height + 2 * conf.boxTextMargin;\n\n const boxplusLineGroup = elem.append('g').lower();\n let g = boxplusLineGroup;\n\n if (!isFooter) {\n actorCnt++;\n if (Object.keys(actor.links || {}).length && !conf.forceMenus) {\n g.attr('onclick', popupMenuToggle(`actor${actorCnt}_popup`)).attr('cursor', 'pointer');\n }\n g.append('line')\n .attr('id', 'actor' + actorCnt)\n .attr('x1', center)\n .attr('y1', centerY)\n .attr('x2', center)\n .attr('y2', 2000)\n .attr('class', 'actor-line 200')\n .attr('stroke-width', '0.5px')\n .attr('stroke', '#999')\n .attr('name', actor.name);\n\n g = boxplusLineGroup.append('g');\n actor.actorCnt = actorCnt;\n\n if (actor.links != null) {\n g.attr('id', 'root-' + actorCnt);\n }\n }\n\n const rect = svgDrawCommon.getNoteRect();\n\n let cssclass = 'actor';\n if (actor.properties?.class) {\n cssclass = actor.properties.class;\n } else {\n rect.fill = '#eaeaea';\n }\n\n if (isFooter) {\n cssclass += ` ${BOTTOM_ACTOR_CLASS}`;\n } else {\n cssclass += ` ${TOP_ACTOR_CLASS}`;\n }\n\n rect.x = actor.x;\n rect.y = actorY;\n rect.width = actor.width;\n rect.height = actor.height;\n rect.class = cssclass;\n rect.name = actor.name;\n\n // Cylinder dimensions\n rect.x = actor.x;\n rect.y = actorY;\n const w = rect.width / 4;\n const h = rect.width / 4;\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n\n // Cylinder base group\n const cylinderGroup = g.append('g');\n\n const d = `\n M ${rect.x},${rect.y + ry}\n a ${rx},${ry} 0 0 0 ${w},0\n a ${rx},${ry} 0 0 0 -${w},0\n l 0,${h - 2 * ry}\n a ${rx},${ry} 0 0 0 ${w},0\n l 0,-${h - 2 * ry}\n`;\n // Draw the main cylinder body\n cylinderGroup\n .append('path')\n .attr('d', d)\n .attr('fill', '#eaeaea')\n .attr('stroke', '#000')\n .attr('stroke-width', 1)\n .attr('class', cssclass);\n\n if (!isFooter) {\n cylinderGroup.attr('transform', `translate(${w * 1.5}, ${(rect.height + ry) / 4})`);\n } else {\n cylinderGroup.attr('transform', `translate(${w * 1.5}, ${rect.height / 4 - 2 * ry})`);\n }\n actor.rectData = rect;\n _drawTextCandidateFunc(conf, hasKatex(actor.description))(\n actor.description,\n g,\n rect.x,\n rect.y + (!isFooter ? (rect.height + ry) / 2 : (rect.height + h) / 4),\n rect.width,\n rect.height,\n { class: `actor ${ACTOR_BOX_CLASS}` },\n conf\n );\n\n const lastPath = cylinderGroup.select('path:last-child');\n if (lastPath.node()) {\n const bounds = lastPath.node().getBBox();\n actor.height = bounds.height + (conf.sequence.labelBoxHeight ?? 0);\n }\n\n return actor.height;\n};\n\nconst drawActorTypeBoundary = function (elem, actor, conf, isFooter) {\n const actorY = isFooter ? actor.stopy : actor.starty;\n const center = actor.x + actor.width / 2;\n const centerY = actorY + 80;\n const radius = 30;\n const line = elem.append('g').lower();\n\n if (!isFooter) {\n actorCnt++;\n line\n .append('line')\n .attr('id', 'actor' + actorCnt)\n .attr('x1', center)\n .attr('y1', centerY)\n .attr('x2', center)\n .attr('y2', 2000)\n .attr('class', 'actor-line 200')\n .attr('stroke-width', '0.5px')\n .attr('stroke', '#999')\n .attr('name', actor.name);\n\n actor.actorCnt = actorCnt;\n }\n const actElem = elem.append('g');\n let cssClass = ACTOR_MAN_FIGURE_CLASS;\n if (isFooter) {\n cssClass += ` ${BOTTOM_ACTOR_CLASS}`;\n } else {\n cssClass += ` ${TOP_ACTOR_CLASS}`;\n }\n actElem.attr('class', cssClass);\n actElem.attr('name', actor.name);\n\n const rect = svgDrawCommon.getNoteRect();\n rect.x = actor.x;\n rect.y = actorY;\n rect.fill = '#eaeaea';\n rect.width = actor.width;\n rect.height = actor.height;\n rect.class = 'actor';\n\n actElem\n .append('line')\n .attr('id', 'actor-man-torso' + actorCnt)\n .attr('x1', actor.x + actor.width / 2 - radius * 2.5)\n .attr('y1', actorY + 10)\n .attr('x2', actor.x + actor.width / 2 - 15)\n .attr('y2', actorY + 10);\n\n actElem\n .append('line')\n .attr('id', 'actor-man-arms' + actorCnt)\n .attr('x1', actor.x + actor.width / 2 - radius * 2.5)\n .attr('y1', actorY + 0) // starting Y\n .attr('x2', actor.x + actor.width / 2 - radius * 2.5)\n .attr('y2', actorY + 20); // ending Y (26px long, adjust as needed)\n\n actElem\n .append('circle')\n .attr('cx', actor.x + actor.width / 2)\n .attr('cy', actorY + 10)\n .attr('r', radius);\n\n const bounds = actElem.node().getBBox();\n actor.height = bounds.height + (conf.sequence.labelBoxHeight ?? 0);\n\n _drawTextCandidateFunc(conf, hasKatex(actor.description))(\n actor.description,\n actElem,\n rect.x,\n rect.y + (!isFooter ? radius / 2 + 3 : radius / 2 - 4),\n rect.width,\n rect.height,\n { class: `actor ${ACTOR_MAN_FIGURE_CLASS}` },\n conf\n );\n\n if (!isFooter) {\n actElem.attr('transform', `translate(0,${radius / 2 + 7})`);\n } else {\n actElem.attr('transform', `translate(0,${radius / 2 + 7})`);\n }\n\n return actor.height;\n};\n\nconst drawActorTypeActor = function (elem, actor, conf, isFooter) {\n const actorY = isFooter ? actor.stopy : actor.starty;\n const center = actor.x + actor.width / 2;\n const centerY = actorY + 80;\n\n const line = elem.append('g').lower();\n\n if (!isFooter) {\n actorCnt++;\n line\n .append('line')\n .attr('id', 'actor' + actorCnt)\n .attr('x1', center)\n .attr('y1', centerY)\n .attr('x2', center)\n .attr('y2', 2000)\n .attr('class', 'actor-line 200')\n .attr('stroke-width', '0.5px')\n .attr('stroke', '#999')\n .attr('name', actor.name);\n\n actor.actorCnt = actorCnt;\n }\n const actElem = elem.append('g');\n let cssClass = ACTOR_MAN_FIGURE_CLASS;\n if (isFooter) {\n cssClass += ` ${BOTTOM_ACTOR_CLASS}`;\n } else {\n cssClass += ` ${TOP_ACTOR_CLASS}`;\n }\n actElem.attr('class', cssClass);\n actElem.attr('name', actor.name);\n\n const rect = svgDrawCommon.getNoteRect();\n rect.x = actor.x;\n rect.y = actorY;\n rect.fill = '#eaeaea';\n rect.width = actor.width;\n rect.height = actor.height;\n rect.class = 'actor';\n rect.rx = 3;\n rect.ry = 3;\n\n actElem\n .append('line')\n .attr('id', 'actor-man-torso' + actorCnt)\n .attr('x1', center)\n .attr('y1', actorY + 25)\n .attr('x2', center)\n .attr('y2', actorY + 45);\n\n actElem\n .append('line')\n .attr('id', 'actor-man-arms' + actorCnt)\n .attr('x1', center - ACTOR_TYPE_WIDTH / 2)\n .attr('y1', actorY + 33)\n .attr('x2', center + ACTOR_TYPE_WIDTH / 2)\n .attr('y2', actorY + 33);\n actElem\n .append('line')\n .attr('x1', center - ACTOR_TYPE_WIDTH / 2)\n .attr('y1', actorY + 60)\n .attr('x2', center)\n .attr('y2', actorY + 45);\n actElem\n .append('line')\n .attr('x1', center)\n .attr('y1', actorY + 45)\n .attr('x2', center + ACTOR_TYPE_WIDTH / 2 - 2)\n .attr('y2', actorY + 60);\n\n const circle = actElem.append('circle');\n circle.attr('cx', actor.x + actor.width / 2);\n circle.attr('cy', actorY + 10);\n circle.attr('r', 15);\n circle.attr('width', actor.width);\n circle.attr('height', actor.height);\n\n const bounds = actElem.node().getBBox();\n actor.height = bounds.height;\n\n _drawTextCandidateFunc(conf, hasKatex(actor.description))(\n actor.description,\n actElem,\n rect.x,\n rect.y + 35,\n rect.width,\n rect.height,\n { class: `actor ${ACTOR_MAN_FIGURE_CLASS}` },\n conf\n );\n\n return actor.height;\n};\n\nexport const drawActor = async function (elem, actor, conf, isFooter) {\n switch (actor.type) {\n case 'actor':\n return await drawActorTypeActor(elem, actor, conf, isFooter);\n case 'participant':\n return await drawActorTypeParticipant(elem, actor, conf, isFooter);\n case 'boundary':\n return await drawActorTypeBoundary(elem, actor, conf, isFooter);\n case 'control':\n return await drawActorTypeControl(elem, actor, conf, isFooter);\n case 'entity':\n return await drawActorTypeEntity(elem, actor, conf, isFooter);\n case 'database':\n return await drawActorTypeDatabase(elem, actor, conf, isFooter);\n case 'collections':\n return await drawActorTypeCollections(elem, actor, conf, isFooter);\n case 'queue':\n return await drawActorTypeQueue(elem, actor, conf, isFooter);\n }\n};\n\nexport const drawBox = function (elem, box, conf) {\n const boxplusTextGroup = elem.append('g');\n const g = boxplusTextGroup;\n drawBackgroundRect(g, box);\n if (box.name) {\n _drawTextCandidateFunc(conf)(\n box.name,\n g,\n box.x,\n box.y + conf.boxTextMargin + (box.textMaxHeight || 0) / 2,\n box.width,\n 0,\n { class: 'text' },\n conf\n );\n }\n g.lower();\n};\n\nexport const anchorElement = function (elem) {\n return elem.append('g');\n};\n\n/**\n * Draws an activation in the diagram\n *\n * @param {any} elem - Element to append activation rect.\n * @param {any} bounds - Activation box bounds.\n * @param {any} verticalPos - Precise y coordinate of bottom activation box edge.\n * @param {any} conf - Sequence diagram config object.\n * @param {any} actorActivations - Number of activations on the actor.\n */\nexport const drawActivation = function (elem, bounds, verticalPos, conf, actorActivations) {\n const rect = svgDrawCommon.getNoteRect();\n const g = bounds.anchored;\n rect.x = bounds.startx;\n rect.y = bounds.starty;\n rect.class = 'activation' + (actorActivations % 3); // Will evaluate to 0, 1 or 2\n rect.width = bounds.stopx - bounds.startx;\n rect.height = verticalPos - bounds.starty;\n drawRect(g, rect);\n};\n\n/**\n * Draws a loop in the diagram\n *\n * @param {any} elem - Element to append the loop to.\n * @param {any} loopModel - LoopModel of the given loop.\n * @param {any} labelText - Text within the loop.\n * @param {any} conf - Diagram configuration\n * @returns {any}\n */\nexport const drawLoop = async function (elem, loopModel, labelText, conf) {\n const {\n boxMargin,\n boxTextMargin,\n labelBoxHeight,\n labelBoxWidth,\n messageFontFamily: fontFamily,\n messageFontSize: fontSize,\n messageFontWeight: fontWeight,\n } = conf;\n const g = elem.append('g');\n const drawLoopLine = function (startx, starty, stopx, stopy) {\n return g\n .append('line')\n .attr('x1', startx)\n .attr('y1', starty)\n .attr('x2', stopx)\n .attr('y2', stopy)\n .attr('class', 'loopLine');\n };\n drawLoopLine(loopModel.startx, loopModel.starty, loopModel.stopx, loopModel.starty);\n drawLoopLine(loopModel.stopx, loopModel.starty, loopModel.stopx, loopModel.stopy);\n drawLoopLine(loopModel.startx, loopModel.stopy, loopModel.stopx, loopModel.stopy);\n drawLoopLine(loopModel.startx, loopModel.starty, loopModel.startx, loopModel.stopy);\n if (loopModel.sections !== undefined) {\n loopModel.sections.forEach(function (item) {\n drawLoopLine(loopModel.startx, item.y, loopModel.stopx, item.y).style(\n 'stroke-dasharray',\n '3, 3'\n );\n });\n }\n\n let txt = svgDrawCommon.getTextObj();\n txt.text = labelText;\n txt.x = loopModel.startx;\n txt.y = loopModel.starty;\n txt.fontFamily = fontFamily;\n txt.fontSize = fontSize;\n txt.fontWeight = fontWeight;\n txt.anchor = 'middle';\n txt.valign = 'middle';\n txt.tspan = false;\n txt.width = labelBoxWidth || 50;\n txt.height = labelBoxHeight || 20;\n txt.textMargin = boxTextMargin;\n txt.class = 'labelText';\n\n drawLabel(g, txt);\n txt = getTextObj();\n txt.text = loopModel.title;\n txt.x = loopModel.startx + labelBoxWidth / 2 + (loopModel.stopx - loopModel.startx) / 2;\n txt.y = loopModel.starty + boxMargin + boxTextMargin;\n txt.anchor = 'middle';\n txt.valign = 'middle';\n txt.textMargin = boxTextMargin;\n txt.class = 'loopText';\n txt.fontFamily = fontFamily;\n txt.fontSize = fontSize;\n txt.fontWeight = fontWeight;\n txt.wrap = true;\n\n let textElem = hasKatex(txt.text) ? await drawKatex(g, txt, loopModel) : drawText(g, txt);\n\n if (loopModel.sectionTitles !== undefined) {\n for (const [idx, item] of Object.entries(loopModel.sectionTitles)) {\n if (item.message) {\n txt.text = item.message;\n txt.x = loopModel.startx + (loopModel.stopx - loopModel.startx) / 2;\n txt.y = loopModel.sections[idx].y + boxMargin + boxTextMargin;\n txt.class = 'loopText';\n txt.anchor = 'middle';\n txt.valign = 'middle';\n txt.tspan = false;\n txt.fontFamily = fontFamily;\n txt.fontSize = fontSize;\n txt.fontWeight = fontWeight;\n txt.wrap = loopModel.wrap;\n\n if (hasKatex(txt.text)) {\n loopModel.starty = loopModel.sections[idx].y;\n await drawKatex(g, txt, loopModel);\n } else {\n drawText(g, txt);\n }\n let sectionHeight = Math.round(\n textElem\n .map((te) => (te._groups || te)[0][0].getBBox().height)\n .reduce((acc, curr) => acc + curr)\n );\n loopModel.sections[idx].height += sectionHeight - (boxMargin + boxTextMargin);\n }\n }\n }\n\n loopModel.height = Math.round(loopModel.stopy - loopModel.starty);\n return g;\n};\n\n/**\n * Draws a background rectangle\n *\n * @param {any} elem Diagram (reference for bounds)\n * @param {any} bounds Shape of the rectangle\n */\nexport const drawBackgroundRect = function (elem, bounds) {\n svgDrawCommon.drawBackgroundRect(elem, bounds);\n};\n\nexport const insertDatabaseIcon = function (elem) {\n elem\n .append('defs')\n .append('symbol')\n .attr('id', 'database')\n .attr('fill-rule', 'evenodd')\n .attr('clip-rule', 'evenodd')\n .append('path')\n .attr('transform', 'scale(.5)')\n .attr(\n 'd',\n 'M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z'\n );\n};\n\nexport const insertComputerIcon = function (elem) {\n elem\n .append('defs')\n .append('symbol')\n .attr('id', 'computer')\n .attr('width', '24')\n .attr('height', '24')\n .append('path')\n .attr('transform', 'scale(.5)')\n .attr(\n 'd',\n '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'\n );\n};\n\nexport const insertClockIcon = function (elem) {\n elem\n .append('defs')\n .append('symbol')\n .attr('id', 'clock')\n .attr('width', '24')\n .attr('height', '24')\n .append('path')\n .attr('transform', 'scale(.5)')\n .attr(\n 'd',\n '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'\n );\n};\n\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n *\n * @param elem\n */\nexport const insertArrowHead = function (elem) {\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'arrowhead')\n .attr('refX', 7.9)\n .attr('refY', 5)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 12)\n .attr('markerHeight', 12)\n .attr('orient', 'auto-start-reverse')\n .append('path')\n .attr('d', 'M -1 0 L 10 5 L 0 10 z'); // this is actual shape for arrowhead\n};\n\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n *\n * @param {any} elem\n */\nexport const insertArrowFilledHead = function (elem) {\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'filled-head')\n .attr('refX', 15.5)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L14,7 L9,1 Z');\n};\n\n/**\n * Setup node number. The result is appended to the svg.\n *\n * @param {any} elem\n */\nexport const insertSequenceNumber = function (elem) {\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'sequencenumber')\n .attr('refX', 15)\n .attr('refY', 15)\n .attr('markerWidth', 60)\n .attr('markerHeight', 40)\n .attr('orient', 'auto')\n .append('circle')\n .attr('cx', 15)\n .attr('cy', 15)\n .attr('r', 6);\n // .style(\"fill\", '#f00');\n};\n\n/**\n * Setup cross head and define the marker. The result is appended to the svg.\n *\n * @param {any} elem\n */\nexport const insertArrowCrossHead = function (elem) {\n const defs = elem.append('defs');\n const marker = defs\n .append('marker')\n .attr('id', 'crosshead')\n .attr('markerWidth', 15)\n .attr('markerHeight', 8)\n .attr('orient', 'auto')\n .attr('refX', 4)\n .attr('refY', 4.5);\n // The cross\n marker\n .append('path')\n .attr('fill', 'none')\n .attr('stroke', '#000000')\n .style('stroke-dasharray', '0, 0')\n .attr('stroke-width', '1pt')\n .attr('d', 'M 1,2 L 6,7 M 6,2 L 1,7');\n // this is actual shape for arrowhead\n};\n\nexport const getTextObj = function () {\n return {\n x: 0,\n y: 0,\n fill: undefined,\n anchor: undefined,\n style: '#666',\n width: undefined,\n height: undefined,\n textMargin: 0,\n rx: 0,\n ry: 0,\n tspan: true,\n valign: undefined,\n };\n};\n\nexport const getNoteRect = function () {\n return {\n x: 0,\n y: 0,\n fill: '#EDF2AE',\n stroke: '#666',\n width: 100,\n anchor: 'start',\n height: 100,\n rx: 0,\n ry: 0,\n };\n};\n\nconst _drawTextCandidateFunc = (function () {\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n */\n function byText(content, g, x, y, width, height, textAttrs) {\n const text = g\n .append('text')\n .attr('x', x + width / 2)\n .attr('y', y + height / 2 + 5)\n .style('text-anchor', 'middle')\n .text(content);\n _setTextAttrs(text, textAttrs);\n }\n\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n * @param {any} conf\n */\n function byTspan(content, g, x, y, width, height, textAttrs, conf) {\n const { actorFontSize, actorFontFamily, actorFontWeight } = conf;\n\n const [_actorFontSize, _actorFontSizePx] = parseFontSize(actorFontSize);\n\n const lines = content.split(common.lineBreakRegex);\n for (let i = 0; i < lines.length; i++) {\n const dy = i * _actorFontSize - (_actorFontSize * (lines.length - 1)) / 2;\n const text = g\n .append('text')\n .attr('x', x + width / 2)\n .attr('y', y)\n .style('text-anchor', 'middle')\n .style('font-size', _actorFontSizePx)\n .style('font-weight', actorFontWeight)\n .style('font-family', actorFontFamily);\n text\n .append('tspan')\n .attr('x', x + width / 2)\n .attr('dy', dy)\n .text(lines[i]);\n\n text\n .attr('y', y + height / 2.0)\n .attr('dominant-baseline', 'central')\n .attr('alignment-baseline', 'central');\n\n _setTextAttrs(text, textAttrs);\n }\n }\n\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n * @param {any} conf\n */\n function byFo(content, g, x, y, width, height, textAttrs, conf) {\n const s = g.append('switch');\n const f = s\n .append('foreignObject')\n .attr('x', x)\n .attr('y', y)\n .attr('width', width)\n .attr('height', height);\n\n const text = f\n .append('xhtml:div')\n .style('display', 'table')\n .style('height', '100%')\n .style('width', '100%');\n\n text\n .append('div')\n .style('display', 'table-cell')\n .style('text-align', 'center')\n .style('vertical-align', 'middle')\n .text(content);\n\n byTspan(content, s, x, y, width, height, textAttrs, conf);\n _setTextAttrs(text, textAttrs);\n }\n\n /**\n *\n * @param content\n * @param g\n * @param x\n * @param y\n * @param width\n * @param height\n * @param textAttrs\n * @param conf\n */\n async function byKatex(content, g, x, y, width, height, textAttrs, conf) {\n // TODO duplicate render calls, optimize\n\n const dim = await calculateMathMLDimensions(content, configApi.getConfig());\n const s = g.append('switch');\n const f = s\n .append('foreignObject')\n .attr('x', x + width / 2 - dim.width / 2)\n .attr('y', y + height / 2 - dim.height / 2)\n .attr('width', dim.width)\n .attr('height', dim.height);\n\n const text = f.append('xhtml:div').style('height', '100%').style('width', '100%');\n\n text\n .append('div')\n .style('text-align', 'center')\n .style('vertical-align', 'middle')\n .html(await renderKatexSanitized(content, configApi.getConfig()));\n\n byTspan(content, s, x, y, width, height, textAttrs, conf);\n _setTextAttrs(text, textAttrs);\n }\n\n /**\n * @param {any} toText\n * @param {any} fromTextAttrsDict\n */\n function _setTextAttrs(toText, fromTextAttrsDict) {\n for (const key in fromTextAttrsDict) {\n if (fromTextAttrsDict.hasOwnProperty(key)) {\n toText.attr(key, fromTextAttrsDict[key]);\n }\n }\n }\n\n return function (conf, hasKatex = false) {\n if (hasKatex) {\n return byKatex;\n }\n return conf.textPlacement === 'fo' ? byFo : conf.textPlacement === 'old' ? byText : byTspan;\n };\n})();\n\nconst _drawMenuItemTextCandidateFunc = (function () {\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n */\n function byText(content, g, x, y, width, height, textAttrs) {\n const text = g\n .append('text')\n .attr('x', x)\n .attr('y', y)\n .style('text-anchor', 'start')\n .text(content);\n _setTextAttrs(text, textAttrs);\n }\n\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n * @param {any} conf\n */\n function byTspan(content, g, x, y, width, height, textAttrs, conf) {\n const { actorFontSize, actorFontFamily, actorFontWeight } = conf;\n\n const lines = content.split(common.lineBreakRegex);\n for (let i = 0; i < lines.length; i++) {\n const dy = i * actorFontSize - (actorFontSize * (lines.length - 1)) / 2;\n const text = g\n .append('text')\n .attr('x', x)\n .attr('y', y)\n .style('text-anchor', 'start')\n .style('font-size', actorFontSize)\n .style('font-weight', actorFontWeight)\n .style('font-family', actorFontFamily);\n text.append('tspan').attr('x', x).attr('dy', dy).text(lines[i]);\n\n text\n .attr('y', y + height / 2.0)\n .attr('dominant-baseline', 'central')\n .attr('alignment-baseline', 'central');\n\n _setTextAttrs(text, textAttrs);\n }\n }\n\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n * @param {any} conf\n */\n function byFo(content, g, x, y, width, height, textAttrs, conf) {\n const s = g.append('switch');\n const f = s\n .append('foreignObject')\n .attr('x', x)\n .attr('y', y)\n .attr('width', width)\n .attr('height', height);\n\n const text = f\n .append('xhtml:div')\n .style('display', 'table')\n .style('height', '100%')\n .style('width', '100%');\n\n text\n .append('div')\n .style('display', 'table-cell')\n .style('text-align', 'center')\n .style('vertical-align', 'middle')\n .text(content);\n\n byTspan(content, s, x, y, width, height, textAttrs, conf);\n _setTextAttrs(text, textAttrs);\n }\n\n /**\n * @param {any} toText\n * @param {any} fromTextAttrsDict\n */\n function _setTextAttrs(toText, fromTextAttrsDict) {\n for (const key in fromTextAttrsDict) {\n if (fromTextAttrsDict.hasOwnProperty(key)) {\n toText.attr(key, fromTextAttrsDict[key]);\n }\n }\n }\n\n return function (conf) {\n return conf.textPlacement === 'fo' ? byFo : conf.textPlacement === 'old' ? byText : byTspan;\n };\n})();\n\nexport default {\n drawRect,\n drawText,\n drawLabel,\n drawActor,\n drawBox,\n drawPopup,\n anchorElement,\n drawActivation,\n drawLoop,\n drawBackgroundRect,\n insertArrowHead,\n insertArrowFilledHead,\n insertSequenceNumber,\n insertArrowCrossHead,\n insertDatabaseIcon,\n insertComputerIcon,\n insertClockIcon,\n getTextObj,\n getNoteRect,\n fixLifeLineHeights,\n sanitizeUrl,\n};\n", "// @ts-nocheck TODO: fix file\nimport { select } from 'd3';\nimport svgDraw, { drawKatex, ACTOR_TYPE_WIDTH, drawText, fixLifeLineHeights } from './svgDraw.js';\nimport { log } from '../../logger.js';\nimport common, { calculateMathMLDimensions, hasKatex } from '../common/common.js';\nimport { getUrl } from '../common/common.js';\nimport * as svgDrawCommon from '../common/svgDrawCommon.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport assignWithDepth from '../../assignWithDepth.js';\nimport utils from '../../utils.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\nimport type { Diagram } from '../../Diagram.js';\nimport { PARTICIPANT_TYPE } from './sequenceDb.js';\n\nlet conf = {};\n\nexport const bounds = {\n data: {\n startx: undefined,\n stopx: undefined,\n starty: undefined,\n stopy: undefined,\n },\n verticalPos: 0,\n sequenceItems: [],\n activations: [],\n models: {\n getHeight: function () {\n return (\n Math.max.apply(\n null,\n this.actors.length === 0 ? [0] : this.actors.map((actor) => actor.height || 0)\n ) +\n (this.loops.length === 0\n ? 0\n : this.loops.map((it) => it.height || 0).reduce((acc, h) => acc + h)) +\n (this.messages.length === 0\n ? 0\n : this.messages.map((it) => it.height || 0).reduce((acc, h) => acc + h)) +\n (this.notes.length === 0\n ? 0\n : this.notes.map((it) => it.height || 0).reduce((acc, h) => acc + h))\n );\n },\n clear: function () {\n this.actors = [];\n this.boxes = [];\n this.loops = [];\n this.messages = [];\n this.notes = [];\n },\n addBox: function (boxModel) {\n this.boxes.push(boxModel);\n },\n addActor: function (actorModel) {\n this.actors.push(actorModel);\n },\n addLoop: function (loopModel) {\n this.loops.push(loopModel);\n },\n addMessage: function (msgModel) {\n this.messages.push(msgModel);\n },\n addNote: function (noteModel) {\n this.notes.push(noteModel);\n },\n lastActor: function () {\n return this.actors[this.actors.length - 1];\n },\n lastLoop: function () {\n return this.loops[this.loops.length - 1];\n },\n lastMessage: function () {\n return this.messages[this.messages.length - 1];\n },\n lastNote: function () {\n return this.notes[this.notes.length - 1];\n },\n actors: [],\n boxes: [],\n loops: [],\n messages: [],\n notes: [],\n },\n init: function () {\n this.sequenceItems = [];\n this.activations = [];\n this.models.clear();\n this.data = {\n startx: undefined,\n stopx: undefined,\n starty: undefined,\n stopy: undefined,\n };\n this.verticalPos = 0;\n setConf(getConfig());\n },\n updateVal: function (obj, key, val, fun) {\n if (obj[key] === undefined) {\n obj[key] = val;\n } else {\n obj[key] = fun(val, obj[key]);\n }\n },\n updateBounds: function (startx, starty, stopx, stopy) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const _self = this;\n let cnt = 0;\n /** @param type - Either `activation` or `undefined` */\n function updateFn(type?: 'activation') {\n return function updateItemBounds(item) {\n cnt++;\n // The loop sequenceItems is a stack so the biggest margins in the beginning of the sequenceItems\n const n = _self.sequenceItems.length - cnt + 1;\n\n _self.updateVal(item, 'starty', starty - n * conf.boxMargin, Math.min);\n _self.updateVal(item, 'stopy', stopy + n * conf.boxMargin, Math.max);\n\n _self.updateVal(bounds.data, 'startx', startx - n * conf.boxMargin, Math.min);\n _self.updateVal(bounds.data, 'stopx', stopx + n * conf.boxMargin, Math.max);\n\n if (!(type === 'activation')) {\n _self.updateVal(item, 'startx', startx - n * conf.boxMargin, Math.min);\n _self.updateVal(item, 'stopx', stopx + n * conf.boxMargin, Math.max);\n\n _self.updateVal(bounds.data, 'starty', starty - n * conf.boxMargin, Math.min);\n _self.updateVal(bounds.data, 'stopy', stopy + n * conf.boxMargin, Math.max);\n }\n };\n }\n\n this.sequenceItems.forEach(updateFn());\n this.activations.forEach(updateFn('activation'));\n },\n insert: function (startx, starty, stopx, stopy) {\n const _startx = common.getMin(startx, stopx);\n const _stopx = common.getMax(startx, stopx);\n const _starty = common.getMin(starty, stopy);\n const _stopy = common.getMax(starty, stopy);\n\n this.updateVal(bounds.data, 'startx', _startx, Math.min);\n this.updateVal(bounds.data, 'starty', _starty, Math.min);\n this.updateVal(bounds.data, 'stopx', _stopx, Math.max);\n this.updateVal(bounds.data, 'stopy', _stopy, Math.max);\n\n this.updateBounds(_startx, _starty, _stopx, _stopy);\n },\n newActivation: function (message, diagram, actors) {\n const actorRect = actors.get(message.from);\n const stackedSize = actorActivations(message.from).length || 0;\n const x = actorRect.x + actorRect.width / 2 + ((stackedSize - 1) * conf.activationWidth) / 2;\n this.activations.push({\n startx: x,\n starty: this.verticalPos + 2,\n stopx: x + conf.activationWidth,\n stopy: undefined,\n actor: message.from,\n anchored: svgDraw.anchorElement(diagram),\n });\n },\n endActivation: function (message) {\n // find most recent activation for given actor\n const lastActorActivationIdx = this.activations\n .map(function (activation) {\n return activation.actor;\n })\n .lastIndexOf(message.from);\n return this.activations.splice(lastActorActivationIdx, 1)[0];\n },\n createLoop: function (title = { message: undefined, wrap: false, width: undefined }, fill) {\n return {\n startx: undefined,\n starty: this.verticalPos,\n stopx: undefined,\n stopy: undefined,\n title: title.message,\n wrap: title.wrap,\n width: title.width,\n height: 0,\n fill: fill,\n };\n },\n newLoop: function (title = { message: undefined, wrap: false, width: undefined }, fill) {\n this.sequenceItems.push(this.createLoop(title, fill));\n },\n endLoop: function () {\n return this.sequenceItems.pop();\n },\n isLoopOverlap: function () {\n return this.sequenceItems.length\n ? this.sequenceItems[this.sequenceItems.length - 1].overlap\n : false;\n },\n addSectionToLoop: function (message) {\n const loop = this.sequenceItems.pop();\n loop.sections = loop.sections || [];\n loop.sectionTitles = loop.sectionTitles || [];\n loop.sections.push({ y: bounds.getVerticalPos(), height: 0 });\n loop.sectionTitles.push(message);\n this.sequenceItems.push(loop);\n },\n saveVerticalPos: function () {\n if (this.isLoopOverlap()) {\n this.savedVerticalPos = this.verticalPos;\n }\n },\n resetVerticalPos: function () {\n if (this.isLoopOverlap()) {\n this.verticalPos = this.savedVerticalPos;\n }\n },\n bumpVerticalPos: function (bump) {\n this.verticalPos = this.verticalPos + bump;\n this.data.stopy = common.getMax(this.data.stopy, this.verticalPos);\n },\n getVerticalPos: function () {\n return this.verticalPos;\n },\n getBounds: function () {\n return { bounds: this.data, models: this.models };\n },\n};\n\n/** Options for drawing a note in {@link drawNote} */\ninterface NoteModel {\n /** x axis start position */\n startx: number;\n /** y axis position */\n starty: number;\n /** the message to be shown */\n message: string;\n /** Set this with a custom width to override the default configured width. */\n width: number;\n}\n\n/**\n * Draws a note in the diagram with the attached line\n *\n * @param elem - The diagram to draw to.\n * @param noteModel - Note model options.\n */\nconst drawNote = async function (elem: any, noteModel: NoteModel) {\n bounds.bumpVerticalPos(conf.boxMargin);\n noteModel.height = conf.boxMargin;\n noteModel.starty = bounds.getVerticalPos();\n const rect = svgDrawCommon.getNoteRect();\n rect.x = noteModel.startx;\n rect.y = noteModel.starty;\n rect.width = noteModel.width || conf.width;\n rect.class = 'note';\n\n const g = elem.append('g');\n const rectElem = svgDraw.drawRect(g, rect);\n const textObj = svgDrawCommon.getTextObj();\n textObj.x = noteModel.startx;\n textObj.y = noteModel.starty;\n textObj.width = rect.width;\n textObj.dy = '1em';\n textObj.text = noteModel.message;\n textObj.class = 'noteText';\n textObj.fontFamily = conf.noteFontFamily;\n textObj.fontSize = conf.noteFontSize;\n textObj.fontWeight = conf.noteFontWeight;\n textObj.anchor = conf.noteAlign;\n textObj.textMargin = conf.noteMargin;\n textObj.valign = 'center';\n\n const textElem = hasKatex(textObj.text) ? await drawKatex(g, textObj) : drawText(g, textObj);\n\n const textHeight = Math.round(\n textElem\n .map((te) => (te._groups || te)[0][0].getBBox().height)\n .reduce((acc, curr) => acc + curr)\n );\n\n rectElem.attr('height', textHeight + 2 * conf.noteMargin);\n noteModel.height += textHeight + 2 * conf.noteMargin;\n bounds.bumpVerticalPos(textHeight + 2 * conf.noteMargin);\n noteModel.stopy = noteModel.starty + textHeight + 2 * conf.noteMargin;\n noteModel.stopx = noteModel.startx + rect.width;\n bounds.insert(noteModel.startx, noteModel.starty, noteModel.stopx, noteModel.stopy);\n bounds.models.addNote(noteModel);\n};\n\nconst messageFont = (cnf) => {\n return {\n fontFamily: cnf.messageFontFamily,\n fontSize: cnf.messageFontSize,\n fontWeight: cnf.messageFontWeight,\n };\n};\nconst noteFont = (cnf) => {\n return {\n fontFamily: cnf.noteFontFamily,\n fontSize: cnf.noteFontSize,\n fontWeight: cnf.noteFontWeight,\n };\n};\nconst actorFont = (cnf) => {\n return {\n fontFamily: cnf.actorFontFamily,\n fontSize: cnf.actorFontSize,\n fontWeight: cnf.actorFontWeight,\n };\n};\n\n/**\n * Process a message by adding its dimensions to the bound. It returns the Y coordinate of the\n * message so it can be drawn later. We do not draw the message at this point so the arrowhead can\n * be on top of the activation box.\n *\n * @param _diagram - The parent of the message element.\n * @param msgModel - The model containing fields describing a message\n * @returns `lineStartY` - The Y coordinate at which the message line starts\n */\nasync function boundMessage(_diagram, msgModel): Promise {\n bounds.bumpVerticalPos(10);\n const { startx, stopx, message } = msgModel;\n const lines = common.splitBreaks(message).length;\n const isKatexMsg = hasKatex(message);\n const textDims = isKatexMsg\n ? await calculateMathMLDimensions(message, getConfig())\n : utils.calculateTextDimensions(message, messageFont(conf));\n\n if (!isKatexMsg) {\n const lineHeight = textDims.height / lines;\n msgModel.height += lineHeight;\n bounds.bumpVerticalPos(lineHeight);\n }\n\n let lineStartY;\n let totalOffset = textDims.height - 10;\n const textWidth = textDims.width;\n\n if (startx === stopx) {\n lineStartY = bounds.getVerticalPos() + totalOffset;\n if (!conf.rightAngles) {\n totalOffset += conf.boxMargin;\n lineStartY = bounds.getVerticalPos() + totalOffset;\n }\n totalOffset += 30;\n const dx = common.getMax(textWidth / 2, conf.width / 2);\n bounds.insert(\n startx - dx,\n bounds.getVerticalPos() - 10 + totalOffset,\n stopx + dx,\n bounds.getVerticalPos() + 30 + totalOffset\n );\n } else {\n totalOffset += conf.boxMargin;\n lineStartY = bounds.getVerticalPos() + totalOffset;\n bounds.insert(startx, lineStartY - 10, stopx, lineStartY);\n }\n bounds.bumpVerticalPos(totalOffset);\n msgModel.height += totalOffset;\n msgModel.stopy = msgModel.starty + msgModel.height;\n bounds.insert(msgModel.fromBounds, msgModel.starty, msgModel.toBounds, msgModel.stopy);\n\n return lineStartY;\n}\n\n/**\n * Draws a message. Note that the bounds have previously been updated by boundMessage.\n *\n * @param diagram - The parent of the message element\n * @param msgModel - The model containing fields describing a message\n * @param lineStartY - The Y coordinate at which the message line starts\n * @param diagObj - The diagram object.\n */\nconst drawMessage = async function (diagram, msgModel, lineStartY: number, diagObj: Diagram) {\n const { startx, stopx, starty, message, type, sequenceIndex, sequenceVisible } = msgModel;\n const textDims = utils.calculateTextDimensions(message, messageFont(conf));\n const textObj = svgDrawCommon.getTextObj();\n textObj.x = startx;\n textObj.y = starty + 10;\n textObj.width = stopx - startx;\n textObj.class = 'messageText';\n textObj.dy = '1em';\n textObj.text = message;\n textObj.fontFamily = conf.messageFontFamily;\n textObj.fontSize = conf.messageFontSize;\n textObj.fontWeight = conf.messageFontWeight;\n textObj.anchor = conf.messageAlign;\n textObj.valign = 'center';\n textObj.textMargin = conf.wrapPadding;\n textObj.tspan = false;\n\n if (hasKatex(textObj.text)) {\n await drawKatex(diagram, textObj, { startx, stopx, starty: lineStartY });\n } else {\n drawText(diagram, textObj);\n }\n\n const textWidth = textDims.width;\n\n let line;\n if (startx === stopx) {\n if (conf.rightAngles) {\n line = diagram\n .append('path')\n .attr(\n 'd',\n `M ${startx},${lineStartY} H ${\n startx + common.getMax(conf.width / 2, textWidth / 2)\n } V ${lineStartY + 25} H ${startx}`\n );\n } else {\n line = diagram\n .append('path')\n .attr(\n 'd',\n 'M ' +\n startx +\n ',' +\n lineStartY +\n ' C ' +\n (startx + 60) +\n ',' +\n (lineStartY - 10) +\n ' ' +\n (startx + 60) +\n ',' +\n (lineStartY + 30) +\n ' ' +\n startx +\n ',' +\n (lineStartY + 20)\n );\n }\n } else {\n line = diagram.append('line');\n line.attr('x1', startx);\n line.attr('y1', lineStartY);\n line.attr('x2', stopx);\n line.attr('y2', lineStartY);\n }\n // Make an SVG Container\n // Draw the line\n if (\n type === diagObj.db.LINETYPE.DOTTED ||\n type === diagObj.db.LINETYPE.DOTTED_CROSS ||\n type === diagObj.db.LINETYPE.DOTTED_POINT ||\n type === diagObj.db.LINETYPE.DOTTED_OPEN ||\n type === diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED\n ) {\n line.style('stroke-dasharray', '3, 3');\n line.attr('class', 'messageLine1');\n } else {\n line.attr('class', 'messageLine0');\n }\n\n let url = '';\n if (conf.arrowMarkerAbsolute) {\n url = getUrl(true);\n }\n\n line.attr('stroke-width', 2);\n line.attr('stroke', 'none'); // handled by theme/css anyway\n line.style('fill', 'none'); // remove any fill colour\n if (type === diagObj.db.LINETYPE.SOLID || type === diagObj.db.LINETYPE.DOTTED) {\n line.attr('marker-end', 'url(' + url + '#arrowhead)');\n }\n if (\n type === diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID ||\n type === diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED\n ) {\n line.attr('marker-start', 'url(' + url + '#arrowhead)');\n line.attr('marker-end', 'url(' + url + '#arrowhead)');\n }\n if (type === diagObj.db.LINETYPE.SOLID_POINT || type === diagObj.db.LINETYPE.DOTTED_POINT) {\n line.attr('marker-end', 'url(' + url + '#filled-head)');\n }\n\n if (type === diagObj.db.LINETYPE.SOLID_CROSS || type === diagObj.db.LINETYPE.DOTTED_CROSS) {\n line.attr('marker-end', 'url(' + url + '#crosshead)');\n }\n\n // add node number\n if (sequenceVisible || conf.showSequenceNumbers) {\n const isBidirectional =\n type === diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID ||\n type === diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED;\n\n if (isBidirectional) {\n const SEQUENCE_NUMBER_RADIUS = 6;\n\n if (startx < stopx) {\n line.attr('x1', startx + 2 * SEQUENCE_NUMBER_RADIUS);\n } else {\n line.attr('x1', startx + SEQUENCE_NUMBER_RADIUS);\n }\n }\n\n diagram\n .append('line')\n .attr('x1', startx)\n .attr('y1', lineStartY)\n .attr('x2', startx)\n .attr('y2', lineStartY)\n .attr('stroke-width', 0)\n .attr('marker-start', 'url(' + url + '#sequencenumber)');\n\n diagram\n .append('text')\n .attr('x', startx)\n .attr('y', lineStartY + 4)\n .attr('font-family', 'sans-serif')\n .attr('font-size', '12px')\n .attr('text-anchor', 'middle')\n .attr('class', 'sequenceNumber')\n .text(sequenceIndex);\n }\n};\n\nconst addActorRenderingData = function (\n diagram,\n actors,\n createdActors: Map,\n actorKeys,\n verticalPos,\n messages,\n isFooter\n) {\n let prevWidth = 0;\n let prevMargin = 0;\n let prevBox = undefined;\n let maxHeight = 0;\n\n for (const actorKey of actorKeys) {\n const actor = actors.get(actorKey);\n const box = actor.box;\n\n // end of box\n if (prevBox && prevBox != box) {\n if (!isFooter) {\n bounds.models.addBox(prevBox);\n }\n prevMargin += conf.boxMargin + prevBox.margin;\n }\n\n // new box\n if (box && box != prevBox) {\n if (!isFooter) {\n box.x = prevWidth + prevMargin;\n box.y = verticalPos;\n }\n prevMargin += box.margin;\n }\n\n // Add some rendering data to the object\n actor.width = actor.width || conf.width;\n actor.height = common.getMax(actor.height || conf.height, conf.height);\n actor.margin = actor.margin || conf.actorMargin;\n\n maxHeight = common.getMax(maxHeight, actor.height);\n\n // if the actor is created by a message, widen margin\n if (createdActors.get(actor.name)) {\n prevMargin += actor.width / 2;\n }\n\n actor.x = prevWidth + prevMargin;\n actor.starty = bounds.getVerticalPos();\n\n bounds.insert(actor.x, verticalPos, actor.x + actor.width, actor.height);\n\n prevWidth += actor.width + prevMargin;\n if (actor.box) {\n actor.box.width = prevWidth + box.margin - actor.box.x;\n }\n prevMargin = actor.margin;\n prevBox = actor.box;\n bounds.models.addActor(actor);\n }\n\n // end of box\n if (prevBox && !isFooter) {\n bounds.models.addBox(prevBox);\n }\n\n // Add a margin between the actor boxes and the first arrow\n bounds.bumpVerticalPos(maxHeight);\n};\n\nexport const drawActors = async function (diagram, actors, actorKeys, isFooter) {\n if (!isFooter) {\n for (const actorKey of actorKeys) {\n const actor = actors.get(actorKey);\n // Draw the box with the attached line\n await svgDraw.drawActor(diagram, actor, conf, false);\n }\n } else {\n let maxHeight = 0;\n bounds.bumpVerticalPos(conf.boxMargin * 2);\n for (const actorKey of actorKeys) {\n const actor = actors.get(actorKey);\n if (!actor.stopy) {\n actor.stopy = bounds.getVerticalPos();\n }\n const height = await svgDraw.drawActor(diagram, actor, conf, true);\n maxHeight = common.getMax(maxHeight, height);\n }\n bounds.bumpVerticalPos(maxHeight + conf.boxMargin);\n }\n};\n\nexport const drawActorsPopup = function (diagram, actors, actorKeys, doc) {\n let maxHeight = 0;\n let maxWidth = 0;\n for (const actorKey of actorKeys) {\n const actor = actors.get(actorKey);\n const minMenuWidth = getRequiredPopupWidth(actor);\n const menuDimensions = svgDraw.drawPopup(\n diagram,\n actor,\n minMenuWidth,\n conf,\n conf.forceMenus,\n doc\n );\n if (menuDimensions.height > maxHeight) {\n maxHeight = menuDimensions.height;\n }\n if (menuDimensions.width + actor.x > maxWidth) {\n maxWidth = menuDimensions.width + actor.x;\n }\n }\n\n return { maxHeight: maxHeight, maxWidth: maxWidth };\n};\n\nexport const setConf = function (cnf) {\n assignWithDepth(conf, cnf);\n\n if (cnf.fontFamily) {\n conf.actorFontFamily = conf.noteFontFamily = conf.messageFontFamily = cnf.fontFamily;\n }\n if (cnf.fontSize) {\n conf.actorFontSize = conf.noteFontSize = conf.messageFontSize = cnf.fontSize;\n }\n if (cnf.fontWeight) {\n conf.actorFontWeight = conf.noteFontWeight = conf.messageFontWeight = cnf.fontWeight;\n }\n};\n\nconst actorActivations = function (actor) {\n return bounds.activations.filter(function (activation) {\n return activation.actor === actor;\n });\n};\n\nconst activationBounds = function (actor, actors) {\n // handle multiple stacked activations for same actor\n const actorObj = actors.get(actor);\n const activations = actorActivations(actor);\n\n const left = activations.reduce(\n function (acc, activation) {\n return common.getMin(acc, activation.startx);\n },\n actorObj.x + actorObj.width / 2 - 1\n );\n const right = activations.reduce(\n function (acc, activation) {\n return common.getMax(acc, activation.stopx);\n },\n actorObj.x + actorObj.width / 2 + 1\n );\n return [left, right];\n};\n\nfunction adjustLoopHeightForWrap(loopWidths, msg, preMargin, postMargin, addLoopFn) {\n bounds.bumpVerticalPos(preMargin);\n let heightAdjust = postMargin;\n if (msg.id && msg.message && loopWidths[msg.id]) {\n const loopWidth = loopWidths[msg.id].width;\n const textConf = messageFont(conf);\n msg.message = utils.wrapLabel(`[${msg.message}]`, loopWidth - 2 * conf.wrapPadding, textConf);\n msg.width = loopWidth;\n msg.wrap = true;\n\n // const lines = common.splitBreaks(msg.message).length;\n const textDims = utils.calculateTextDimensions(msg.message, textConf);\n const totalOffset = common.getMax(textDims.height, conf.labelBoxHeight);\n heightAdjust = postMargin + totalOffset;\n log.debug(`${totalOffset} - ${msg.message}`);\n }\n addLoopFn(msg);\n bounds.bumpVerticalPos(heightAdjust);\n}\n\n/**\n * Adjust the msgModel and the actor for the rendering in case the latter is created or destroyed by the msg\n * @param msg - the potentially creating or destroying message\n * @param msgModel - the model associated with the message\n * @param lineStartY - the y position of the message line\n * @param index - the index of the current actor under consideration\n * @param actors - the array of all actors\n * @param createdActors - the array of actors created in the diagram\n * @param destroyedActors - the array of actors destroyed in the diagram\n */\nfunction adjustCreatedDestroyedData(\n msg,\n msgModel,\n lineStartY,\n index,\n actors,\n createdActors,\n destroyedActors\n) {\n function receiverAdjustment(actor, adjustment) {\n if (actor.x < actors.get(msg.from).x) {\n bounds.insert(\n msgModel.stopx - adjustment,\n msgModel.starty,\n msgModel.startx,\n msgModel.stopy + actor.height / 2 + conf.noteMargin\n );\n msgModel.stopx = msgModel.stopx + adjustment;\n } else {\n bounds.insert(\n msgModel.startx,\n msgModel.starty,\n msgModel.stopx + adjustment,\n msgModel.stopy + actor.height / 2 + conf.noteMargin\n );\n msgModel.stopx = msgModel.stopx - adjustment;\n }\n }\n\n function senderAdjustment(actor, adjustment) {\n if (actor.x < actors.get(msg.to).x) {\n bounds.insert(\n msgModel.startx - adjustment,\n msgModel.starty,\n msgModel.stopx,\n msgModel.stopy + actor.height / 2 + conf.noteMargin\n );\n msgModel.startx = msgModel.startx + adjustment;\n } else {\n bounds.insert(\n msgModel.stopx,\n msgModel.starty,\n msgModel.startx + adjustment,\n msgModel.stopy + actor.height / 2 + conf.noteMargin\n );\n msgModel.startx = msgModel.startx - adjustment;\n }\n }\n const actorArray = [\n PARTICIPANT_TYPE.ACTOR,\n PARTICIPANT_TYPE.CONTROL,\n PARTICIPANT_TYPE.ENTITY,\n PARTICIPANT_TYPE.DATABASE,\n ];\n\n // if it is a create message\n if (createdActors.get(msg.to) == index) {\n const actor = actors.get(msg.to);\n const adjustment = actorArray.includes(actor.type)\n ? ACTOR_TYPE_WIDTH / 2 + 3\n : actor.width / 2 + 3;\n receiverAdjustment(actor, adjustment);\n actor.starty = lineStartY - actor.height / 2;\n bounds.bumpVerticalPos(actor.height / 2);\n }\n // if it is a destroy sender message\n else if (destroyedActors.get(msg.from) == index) {\n const actor = actors.get(msg.from);\n if (conf.mirrorActors) {\n const adjustment = actorArray.includes(actor.type) ? ACTOR_TYPE_WIDTH / 2 : actor.width / 2;\n senderAdjustment(actor, adjustment);\n }\n actor.stopy = lineStartY - actor.height / 2;\n bounds.bumpVerticalPos(actor.height / 2);\n }\n // if it is a destroy receiver message\n else if (destroyedActors.get(msg.to) == index) {\n const actor = actors.get(msg.to);\n if (conf.mirrorActors) {\n const adjustment = actorArray.includes(actor.type)\n ? ACTOR_TYPE_WIDTH / 2 + 3\n : actor.width / 2 + 3;\n receiverAdjustment(actor, adjustment);\n }\n actor.stopy = lineStartY - actor.height / 2;\n bounds.bumpVerticalPos(actor.height / 2);\n }\n}\n\n/**\n * Draws a sequenceDiagram in the tag with id: id based on the graph definition in text.\n *\n * @param _text - The text of the diagram\n * @param id - The id of the diagram which will be used as a DOM element id\u00A8\n * @param _version - Mermaid version from package.json\n * @param diagObj - A standard diagram containing the db and the text and type etc of the diagram\n */\nexport const draw = async function (_text: string, id: string, _version: string, diagObj: Diagram) {\n const { securityLevel, sequence } = getConfig();\n conf = sequence;\n // Handle root and Document for when rendering in sandbox mode\n let sandboxElement;\n if (securityLevel === 'sandbox') {\n sandboxElement = select('#i' + id);\n }\n\n const root =\n securityLevel === 'sandbox'\n ? select(sandboxElement.nodes()[0].contentDocument.body)\n : select('body');\n const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n bounds.init();\n log.debug(diagObj.db);\n\n const diagram =\n securityLevel === 'sandbox' ? root.select(`[id=\"${id}\"]`) : select(`[id=\"${id}\"]`);\n\n // Fetch data from the parsing\n const actors = diagObj.db.getActors();\n const createdActors = diagObj.db.getCreatedActors();\n const destroyedActors = diagObj.db.getDestroyedActors();\n const boxes = diagObj.db.getBoxes();\n let actorKeys = diagObj.db.getActorKeys();\n const messages = diagObj.db.getMessages();\n const title = diagObj.db.getDiagramTitle();\n const hasBoxes = diagObj.db.hasAtLeastOneBox();\n const hasBoxTitles = diagObj.db.hasAtLeastOneBoxWithTitle();\n const maxMessageWidthPerActor = await getMaxMessageWidthPerActor(actors, messages, diagObj);\n conf.height = await calculateActorMargins(actors, maxMessageWidthPerActor, boxes);\n\n svgDraw.insertComputerIcon(diagram);\n svgDraw.insertDatabaseIcon(diagram);\n svgDraw.insertClockIcon(diagram);\n\n if (hasBoxes) {\n bounds.bumpVerticalPos(conf.boxMargin);\n if (hasBoxTitles) {\n bounds.bumpVerticalPos(boxes[0].textMaxHeight);\n }\n }\n\n if (conf.hideUnusedParticipants === true) {\n const newActors = new Set();\n messages.forEach((message) => {\n newActors.add(message.from);\n newActors.add(message.to);\n });\n actorKeys = actorKeys.filter((actorKey) => newActors.has(actorKey));\n }\n\n addActorRenderingData(diagram, actors, createdActors, actorKeys, 0, messages, false);\n const loopWidths = await calculateLoopBounds(messages, actors, maxMessageWidthPerActor, diagObj);\n\n // The arrow head definition is attached to the svg once\n svgDraw.insertArrowHead(diagram);\n svgDraw.insertArrowCrossHead(diagram);\n svgDraw.insertArrowFilledHead(diagram);\n svgDraw.insertSequenceNumber(diagram);\n\n /**\n * @param msg - The message to draw.\n * @param verticalPos - The vertical position of the message.\n */\n function activeEnd(msg: any, verticalPos: number) {\n const activationData = bounds.endActivation(msg);\n if (activationData.starty + 18 > verticalPos) {\n activationData.starty = verticalPos - 6;\n verticalPos += 12;\n }\n svgDraw.drawActivation(\n diagram,\n activationData,\n verticalPos,\n conf,\n actorActivations(msg.from).length\n );\n\n bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos);\n }\n\n // Draw the messages/signals\n let sequenceIndex = 1;\n let sequenceIndexStep = 1;\n const messagesToDraw = [];\n const backgrounds = [];\n let index = 0;\n for (const msg of messages) {\n let loopModel, noteModel, msgModel;\n\n switch (msg.type) {\n case diagObj.db.LINETYPE.NOTE:\n bounds.resetVerticalPos();\n noteModel = msg.noteModel;\n await drawNote(diagram, noteModel);\n break;\n case diagObj.db.LINETYPE.ACTIVE_START:\n bounds.newActivation(msg, diagram, actors);\n break;\n case diagObj.db.LINETYPE.ACTIVE_END:\n activeEnd(msg, bounds.getVerticalPos());\n break;\n case diagObj.db.LINETYPE.LOOP_START:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin,\n conf.boxMargin + conf.boxTextMargin,\n (message) => bounds.newLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.LOOP_END:\n loopModel = bounds.endLoop();\n await svgDraw.drawLoop(diagram, loopModel, 'loop', conf);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n bounds.models.addLoop(loopModel);\n break;\n case diagObj.db.LINETYPE.RECT_START:\n adjustLoopHeightForWrap(loopWidths, msg, conf.boxMargin, conf.boxMargin, (message) =>\n bounds.newLoop(undefined, message.message)\n );\n break;\n case diagObj.db.LINETYPE.RECT_END:\n loopModel = bounds.endLoop();\n backgrounds.push(loopModel);\n bounds.models.addLoop(loopModel);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n break;\n case diagObj.db.LINETYPE.OPT_START:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin,\n conf.boxMargin + conf.boxTextMargin,\n (message) => bounds.newLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.OPT_END:\n loopModel = bounds.endLoop();\n await svgDraw.drawLoop(diagram, loopModel, 'opt', conf);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n bounds.models.addLoop(loopModel);\n break;\n case diagObj.db.LINETYPE.ALT_START:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin,\n conf.boxMargin + conf.boxTextMargin,\n (message) => bounds.newLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.ALT_ELSE:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin + conf.boxTextMargin,\n conf.boxMargin,\n (message) => bounds.addSectionToLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.ALT_END:\n loopModel = bounds.endLoop();\n await svgDraw.drawLoop(diagram, loopModel, 'alt', conf);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n bounds.models.addLoop(loopModel);\n break;\n case diagObj.db.LINETYPE.PAR_START:\n case diagObj.db.LINETYPE.PAR_OVER_START:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin,\n conf.boxMargin + conf.boxTextMargin,\n (message) => bounds.newLoop(message)\n );\n bounds.saveVerticalPos();\n break;\n case diagObj.db.LINETYPE.PAR_AND:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin + conf.boxTextMargin,\n conf.boxMargin,\n (message) => bounds.addSectionToLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.PAR_END:\n loopModel = bounds.endLoop();\n await svgDraw.drawLoop(diagram, loopModel, 'par', conf);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n bounds.models.addLoop(loopModel);\n break;\n case diagObj.db.LINETYPE.AUTONUMBER:\n sequenceIndex = msg.message.start || sequenceIndex;\n sequenceIndexStep = msg.message.step || sequenceIndexStep;\n if (msg.message.visible) {\n diagObj.db.enableSequenceNumbers();\n } else {\n diagObj.db.disableSequenceNumbers();\n }\n break;\n case diagObj.db.LINETYPE.CRITICAL_START:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin,\n conf.boxMargin + conf.boxTextMargin,\n (message) => bounds.newLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.CRITICAL_OPTION:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin + conf.boxTextMargin,\n conf.boxMargin,\n (message) => bounds.addSectionToLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.CRITICAL_END:\n loopModel = bounds.endLoop();\n await svgDraw.drawLoop(diagram, loopModel, 'critical', conf);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n bounds.models.addLoop(loopModel);\n break;\n case diagObj.db.LINETYPE.BREAK_START:\n adjustLoopHeightForWrap(\n loopWidths,\n msg,\n conf.boxMargin,\n conf.boxMargin + conf.boxTextMargin,\n (message) => bounds.newLoop(message)\n );\n break;\n case diagObj.db.LINETYPE.BREAK_END:\n loopModel = bounds.endLoop();\n await svgDraw.drawLoop(diagram, loopModel, 'break', conf);\n bounds.bumpVerticalPos(loopModel.stopy - bounds.getVerticalPos());\n bounds.models.addLoop(loopModel);\n break;\n default:\n try {\n msgModel = msg.msgModel;\n msgModel.starty = bounds.getVerticalPos();\n msgModel.sequenceIndex = sequenceIndex;\n msgModel.sequenceVisible = diagObj.db.showSequenceNumbers();\n const lineStartY = await boundMessage(diagram, msgModel);\n adjustCreatedDestroyedData(\n msg,\n msgModel,\n lineStartY,\n index,\n actors,\n createdActors,\n destroyedActors\n );\n messagesToDraw.push({ messageModel: msgModel, lineStartY: lineStartY });\n bounds.models.addMessage(msgModel);\n } catch (e) {\n log.error('error while drawing message', e);\n }\n }\n\n // Increment sequence counter if msg.type is a line (and not another event like activation or note, etc)\n if (\n [\n diagObj.db.LINETYPE.SOLID_OPEN,\n diagObj.db.LINETYPE.DOTTED_OPEN,\n diagObj.db.LINETYPE.SOLID,\n diagObj.db.LINETYPE.DOTTED,\n diagObj.db.LINETYPE.SOLID_CROSS,\n diagObj.db.LINETYPE.DOTTED_CROSS,\n diagObj.db.LINETYPE.SOLID_POINT,\n diagObj.db.LINETYPE.DOTTED_POINT,\n diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID,\n diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED,\n ].includes(msg.type)\n ) {\n sequenceIndex = sequenceIndex + sequenceIndexStep;\n }\n index++;\n }\n\n log.debug('createdActors', createdActors);\n log.debug('destroyedActors', destroyedActors);\n await drawActors(diagram, actors, actorKeys, false);\n\n for (const e of messagesToDraw) {\n await drawMessage(diagram, e.messageModel, e.lineStartY, diagObj);\n }\n if (conf.mirrorActors) {\n await drawActors(diagram, actors, actorKeys, true);\n }\n backgrounds.forEach((e) => svgDraw.drawBackgroundRect(diagram, e));\n fixLifeLineHeights(diagram, actors, actorKeys, conf);\n\n for (const box of bounds.models.boxes) {\n box.height = bounds.getVerticalPos() - box.y;\n bounds.insert(box.x, box.y, box.x + box.width, box.height);\n const boxPadding = conf.boxMargin * 2;\n box.startx = box.x - boxPadding;\n box.starty = box.y - boxPadding * 0.25;\n box.stopx = box.startx + box.width + 2 * boxPadding;\n box.stopy = box.starty + box.height + boxPadding * 0.75;\n box.stroke = 'rgb(0,0,0, 0.5)';\n svgDraw.drawBox(diagram, box, conf);\n }\n\n if (hasBoxes) {\n bounds.bumpVerticalPos(conf.boxMargin);\n }\n\n // only draw popups for the top row of actors.\n const requiredBoxSize = drawActorsPopup(diagram, actors, actorKeys, doc);\n\n const { bounds: box } = bounds.getBounds();\n\n if (box.startx === undefined) {\n box.startx = 0;\n }\n if (box.starty === undefined) {\n box.starty = 0;\n }\n if (box.stopx === undefined) {\n box.stopx = 0;\n }\n if (box.stopy === undefined) {\n box.stopy = 0;\n }\n\n // Make sure the height of the diagram supports long menus.\n let boxHeight = box.stopy - box.starty;\n if (boxHeight < requiredBoxSize.maxHeight) {\n boxHeight = requiredBoxSize.maxHeight;\n }\n\n let height = boxHeight + 2 * conf.diagramMarginY;\n if (conf.mirrorActors) {\n height = height - conf.boxMargin + conf.bottomMarginAdj;\n }\n\n // Make sure the width of the diagram supports wide menus.\n let boxWidth = box.stopx - box.startx;\n if (boxWidth < requiredBoxSize.maxWidth) {\n boxWidth = requiredBoxSize.maxWidth;\n }\n const width = boxWidth + 2 * conf.diagramMarginX;\n\n if (title) {\n diagram\n .append('text')\n .text(title)\n .attr('x', (box.stopx - box.startx) / 2 - 2 * conf.diagramMarginX)\n .attr('y', -25);\n }\n\n configureSvgSize(diagram, height, width, conf.useMaxWidth);\n\n const extraVertForTitle = title ? 40 : 0;\n diagram.attr(\n 'viewBox',\n box.startx -\n conf.diagramMarginX +\n ' -' +\n (conf.diagramMarginY + extraVertForTitle) +\n ' ' +\n width +\n ' ' +\n (height + extraVertForTitle)\n );\n\n log.debug(`models:`, bounds.models);\n};\n\n/**\n * Retrieves the max message width of each actor, supports signals (messages, loops) and notes.\n *\n * It will enumerate each given message, and will determine its text width, in relation to the actor\n * it originates from, and destined to.\n *\n * @param actors - The actors map\n * @param messages - A list of message objects to iterate\n * @param diagObj - The diagram object.\n * @returns The max message width of each actor.\n */\nasync function getMaxMessageWidthPerActor(\n actors: Map,\n messages: any[],\n diagObj: Diagram\n): Promise> {\n const maxMessageWidthPerActor = {};\n\n for (const msg of messages) {\n if (actors.get(msg.to) && actors.get(msg.from)) {\n const actor = actors.get(msg.to);\n\n // If this is the first actor, and the message is left of it, no need to calculate the margin\n if (msg.placement === diagObj.db.PLACEMENT.LEFTOF && !actor.prevActor) {\n continue;\n }\n\n // If this is the last actor, and the message is right of it, no need to calculate the margin\n if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF && !actor.nextActor) {\n continue;\n }\n\n const isNote = msg.placement !== undefined;\n const isMessage = !isNote;\n\n const textFont = isNote ? noteFont(conf) : messageFont(conf);\n const wrappedMessage = msg.wrap\n ? utils.wrapLabel(msg.message, conf.width - 2 * conf.wrapPadding, textFont)\n : msg.message;\n const messageDimensions = hasKatex(wrappedMessage)\n ? await calculateMathMLDimensions(msg.message, getConfig())\n : utils.calculateTextDimensions(wrappedMessage, textFont);\n const messageWidth = messageDimensions.width + 2 * conf.wrapPadding;\n\n /*\n * The following scenarios should be supported:\n *\n * - There's a message (non-note) between fromActor and toActor\n * - If fromActor is on the right and toActor is on the left, we should\n * define the toActor's margin\n * - If fromActor is on the left and toActor is on the right, we should\n * define the fromActor's margin\n * - There's a note, in which case fromActor == toActor\n * - If the note is to the left of the actor, we should define the previous actor\n * margin\n * - If the note is on the actor, we should define both the previous and next actor\n * margins, each being the half of the note size\n * - If the note is on the right of the actor, we should define the current actor\n * margin\n */\n if (isMessage && msg.from === actor.nextActor) {\n maxMessageWidthPerActor[msg.to] = common.getMax(\n maxMessageWidthPerActor[msg.to] || 0,\n messageWidth\n );\n } else if (isMessage && msg.from === actor.prevActor) {\n maxMessageWidthPerActor[msg.from] = common.getMax(\n maxMessageWidthPerActor[msg.from] || 0,\n messageWidth\n );\n } else if (isMessage && msg.from === msg.to) {\n maxMessageWidthPerActor[msg.from] = common.getMax(\n maxMessageWidthPerActor[msg.from] || 0,\n messageWidth / 2\n );\n\n maxMessageWidthPerActor[msg.to] = common.getMax(\n maxMessageWidthPerActor[msg.to] || 0,\n messageWidth / 2\n );\n } else if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) {\n maxMessageWidthPerActor[msg.from] = common.getMax(\n maxMessageWidthPerActor[msg.from] || 0,\n messageWidth\n );\n } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) {\n maxMessageWidthPerActor[actor.prevActor] = common.getMax(\n maxMessageWidthPerActor[actor.prevActor] || 0,\n messageWidth\n );\n } else if (msg.placement === diagObj.db.PLACEMENT.OVER) {\n if (actor.prevActor) {\n maxMessageWidthPerActor[actor.prevActor] = common.getMax(\n maxMessageWidthPerActor[actor.prevActor] || 0,\n messageWidth / 2\n );\n }\n\n if (actor.nextActor) {\n maxMessageWidthPerActor[msg.from] = common.getMax(\n maxMessageWidthPerActor[msg.from] || 0,\n messageWidth / 2\n );\n }\n }\n }\n }\n\n log.debug('maxMessageWidthPerActor:', maxMessageWidthPerActor);\n return maxMessageWidthPerActor;\n}\n\nconst getRequiredPopupWidth = function (actor) {\n let requiredPopupWidth = 0;\n const textFont = actorFont(conf);\n for (const key in actor.links) {\n const labelDimensions = utils.calculateTextDimensions(key, textFont);\n const labelWidth = labelDimensions.width + 2 * conf.wrapPadding + 2 * conf.boxMargin;\n if (requiredPopupWidth < labelWidth) {\n requiredPopupWidth = labelWidth;\n }\n }\n\n return requiredPopupWidth;\n};\n\n/**\n * This will calculate the optimal margin for each given actor,\n * for a given actor \u2192 messageWidth map.\n *\n * An actor's margin is determined by the width of the actor, the width of the largest message that\n * originates from it, and the configured conf.actorMargin.\n *\n * @param actors - The actors map to calculate margins for\n * @param actorToMessageWidth - A map of actor key \u2192 max message width it holds\n * @param boxes - The boxes around the actors if any\n */\nasync function calculateActorMargins(\n actors: Map,\n actorToMessageWidth: Awaited>,\n boxes\n) {\n let maxHeight = 0;\n for (const prop of actors.keys()) {\n const actor = actors.get(prop);\n if (actor.wrap) {\n actor.description = utils.wrapLabel(\n actor.description,\n conf.width - 2 * conf.wrapPadding,\n actorFont(conf)\n );\n }\n const actDims = hasKatex(actor.description)\n ? await calculateMathMLDimensions(actor.description, getConfig())\n : utils.calculateTextDimensions(actor.description, actorFont(conf));\n\n actor.width = actor.wrap\n ? conf.width\n : common.getMax(conf.width, actDims.width + 2 * conf.wrapPadding);\n\n actor.height = actor.wrap ? common.getMax(actDims.height, conf.height) : conf.height;\n maxHeight = common.getMax(maxHeight, actor.height);\n }\n\n for (const actorKey in actorToMessageWidth) {\n const actor = actors.get(actorKey);\n\n if (!actor) {\n continue;\n }\n\n const nextActor = actors.get(actor.nextActor);\n\n // No need to space out an actor that doesn't have a next link\n if (!nextActor) {\n const messageWidth = actorToMessageWidth[actorKey];\n const actorWidth = messageWidth + conf.actorMargin - actor.width / 2;\n actor.margin = common.getMax(actorWidth, conf.actorMargin);\n continue;\n }\n\n const messageWidth = actorToMessageWidth[actorKey];\n const actorWidth = messageWidth + conf.actorMargin - actor.width / 2 - nextActor.width / 2;\n\n actor.margin = common.getMax(actorWidth, conf.actorMargin);\n }\n\n let maxBoxHeight = 0;\n boxes.forEach((box) => {\n const textFont = messageFont(conf);\n let totalWidth = box.actorKeys.reduce((total, aKey) => {\n return (total += actors.get(aKey).width + (actors.get(aKey).margin || 0));\n }, 0);\n\n const standardBoxPadding = conf.boxMargin * 8;\n totalWidth += standardBoxPadding;\n\n totalWidth -= 2 * conf.boxTextMargin;\n if (box.wrap) {\n box.name = utils.wrapLabel(box.name, totalWidth - 2 * conf.wrapPadding, textFont);\n }\n\n const boxMsgDimensions = utils.calculateTextDimensions(box.name, textFont);\n maxBoxHeight = common.getMax(boxMsgDimensions.height, maxBoxHeight);\n const minWidth = common.getMax(totalWidth, boxMsgDimensions.width + 2 * conf.wrapPadding);\n box.margin = conf.boxTextMargin;\n if (totalWidth < minWidth) {\n const missing = (minWidth - totalWidth) / 2;\n box.margin += missing;\n }\n });\n boxes.forEach((box) => (box.textMaxHeight = maxBoxHeight));\n\n return common.getMax(maxHeight, conf.height);\n}\n\nconst buildNoteModel = async function (msg, actors, diagObj) {\n const fromActor = actors.get(msg.from);\n const toActor = actors.get(msg.to);\n const startx = fromActor.x;\n const stopx = toActor.x;\n const shouldWrap = msg.wrap && msg.message;\n\n let textDimensions: { width: number; height: number; lineHeight?: number } = hasKatex(msg.message)\n ? await calculateMathMLDimensions(msg.message, getConfig())\n : utils.calculateTextDimensions(\n shouldWrap ? utils.wrapLabel(msg.message, conf.width, noteFont(conf)) : msg.message,\n noteFont(conf)\n );\n const noteModel = {\n width: shouldWrap\n ? conf.width\n : common.getMax(conf.width, textDimensions.width + 2 * conf.noteMargin),\n height: 0,\n startx: fromActor.x,\n stopx: 0,\n starty: 0,\n stopy: 0,\n message: msg.message,\n };\n if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) {\n noteModel.width = shouldWrap\n ? common.getMax(conf.width, textDimensions.width)\n : common.getMax(\n fromActor.width / 2 + toActor.width / 2,\n textDimensions.width + 2 * conf.noteMargin\n );\n noteModel.startx = startx + (fromActor.width + conf.actorMargin) / 2;\n } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) {\n noteModel.width = shouldWrap\n ? common.getMax(conf.width, textDimensions.width + 2 * conf.noteMargin)\n : common.getMax(\n fromActor.width / 2 + toActor.width / 2,\n textDimensions.width + 2 * conf.noteMargin\n );\n noteModel.startx = startx - noteModel.width + (fromActor.width - conf.actorMargin) / 2;\n } else if (msg.to === msg.from) {\n textDimensions = utils.calculateTextDimensions(\n shouldWrap\n ? utils.wrapLabel(msg.message, common.getMax(conf.width, fromActor.width), noteFont(conf))\n : msg.message,\n noteFont(conf)\n );\n noteModel.width = shouldWrap\n ? common.getMax(conf.width, fromActor.width)\n : common.getMax(fromActor.width, conf.width, textDimensions.width + 2 * conf.noteMargin);\n noteModel.startx = startx + (fromActor.width - noteModel.width) / 2;\n } else {\n noteModel.width =\n Math.abs(startx + fromActor.width / 2 - (stopx + toActor.width / 2)) + conf.actorMargin;\n noteModel.startx =\n startx < stopx\n ? startx + fromActor.width / 2 - conf.actorMargin / 2\n : stopx + toActor.width / 2 - conf.actorMargin / 2;\n }\n if (shouldWrap) {\n noteModel.message = utils.wrapLabel(\n msg.message,\n noteModel.width - 2 * conf.wrapPadding,\n noteFont(conf)\n );\n }\n log.debug(\n `NM:[${noteModel.startx},${noteModel.stopx},${noteModel.starty},${noteModel.stopy}:${noteModel.width},${noteModel.height}=${msg.message}]`\n );\n return noteModel;\n};\n\nconst buildMessageModel = function (msg, actors, diagObj) {\n if (\n ![\n diagObj.db.LINETYPE.SOLID_OPEN,\n diagObj.db.LINETYPE.DOTTED_OPEN,\n diagObj.db.LINETYPE.SOLID,\n diagObj.db.LINETYPE.DOTTED,\n diagObj.db.LINETYPE.SOLID_CROSS,\n diagObj.db.LINETYPE.DOTTED_CROSS,\n diagObj.db.LINETYPE.SOLID_POINT,\n diagObj.db.LINETYPE.DOTTED_POINT,\n diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID,\n diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED,\n ].includes(msg.type)\n ) {\n return {};\n }\n const [fromLeft, fromRight] = activationBounds(msg.from, actors);\n const [toLeft, toRight] = activationBounds(msg.to, actors);\n const isArrowToRight = fromLeft <= toLeft;\n let startx = isArrowToRight ? fromRight : fromLeft;\n let stopx = isArrowToRight ? toLeft : toRight;\n\n // As the line width is considered, the left and right values will be off by 2.\n const isArrowToActivation = Math.abs(toLeft - toRight) > 2;\n\n /**\n * Adjust the value based on the arrow direction\n * @param value - The value to adjust\n * @returns The adjustment with correct sign to be added to the actual value.\n */\n const adjustValue = (value: number) => {\n return isArrowToRight ? -value : value;\n };\n\n if (msg.from === msg.to) {\n // This is a self reference, so we need to make sure the arrow is drawn correctly\n // There are many checks in the downstream rendering that checks for equality.\n // The lines on loops will be off by few pixels, but that's fine for now.\n stopx = startx;\n } else {\n /**\n * This is an edge case for the first activation.\n * Proper fix would require significant changes.\n * So, we set an activate flag in the message, and cross check that with isToActivation\n * In cases where the message is to an activation that was properly detected, we don't want to move the arrow head\n * The activation will not be detected on the first message, so we need to move the arrow head\n */\n if (msg.activate && !isArrowToActivation) {\n stopx += adjustValue(conf.activationWidth / 2 - 1);\n }\n\n /**\n * Shorten the length of arrow at the end and move the marker forward (using refX) to have a clean arrowhead\n * This is not required for open arrows that don't have arrowheads\n */\n if (![diagObj.db.LINETYPE.SOLID_OPEN, diagObj.db.LINETYPE.DOTTED_OPEN].includes(msg.type)) {\n stopx += adjustValue(3);\n }\n\n /**\n * Shorten start position of bidirectional arrow to accommodate for second arrowhead\n */\n if (\n [diagObj.db.LINETYPE.BIDIRECTIONAL_SOLID, diagObj.db.LINETYPE.BIDIRECTIONAL_DOTTED].includes(\n msg.type\n )\n ) {\n startx -= adjustValue(3);\n }\n }\n\n const allBounds = [fromLeft, fromRight, toLeft, toRight];\n const boundedWidth = Math.abs(startx - stopx);\n if (msg.wrap && msg.message) {\n msg.message = utils.wrapLabel(\n msg.message,\n common.getMax(boundedWidth + 2 * conf.wrapPadding, conf.width),\n messageFont(conf)\n );\n }\n const msgDims = utils.calculateTextDimensions(msg.message, messageFont(conf));\n\n return {\n width: common.getMax(\n msg.wrap ? 0 : msgDims.width + 2 * conf.wrapPadding,\n boundedWidth + 2 * conf.wrapPadding,\n conf.width\n ),\n height: 0,\n startx,\n stopx,\n starty: 0,\n stopy: 0,\n message: msg.message,\n type: msg.type,\n wrap: msg.wrap,\n fromBounds: Math.min.apply(null, allBounds),\n toBounds: Math.max.apply(null, allBounds),\n };\n};\n\nconst calculateLoopBounds = async function (messages, actors, _maxWidthPerActor, diagObj) {\n const loops = {};\n const stack = [];\n let current, noteModel, msgModel;\n\n for (const msg of messages) {\n switch (msg.type) {\n case diagObj.db.LINETYPE.LOOP_START:\n case diagObj.db.LINETYPE.ALT_START:\n case diagObj.db.LINETYPE.OPT_START:\n case diagObj.db.LINETYPE.PAR_START:\n case diagObj.db.LINETYPE.PAR_OVER_START:\n case diagObj.db.LINETYPE.CRITICAL_START:\n case diagObj.db.LINETYPE.BREAK_START:\n stack.push({\n id: msg.id,\n msg: msg.message,\n from: Number.MAX_SAFE_INTEGER,\n to: Number.MIN_SAFE_INTEGER,\n width: 0,\n });\n break;\n case diagObj.db.LINETYPE.ALT_ELSE:\n case diagObj.db.LINETYPE.PAR_AND:\n case diagObj.db.LINETYPE.CRITICAL_OPTION:\n if (msg.message) {\n current = stack.pop();\n loops[current.id] = current;\n loops[msg.id] = current;\n stack.push(current);\n }\n break;\n case diagObj.db.LINETYPE.LOOP_END:\n case diagObj.db.LINETYPE.ALT_END:\n case diagObj.db.LINETYPE.OPT_END:\n case diagObj.db.LINETYPE.PAR_END:\n case diagObj.db.LINETYPE.CRITICAL_END:\n case diagObj.db.LINETYPE.BREAK_END:\n current = stack.pop();\n loops[current.id] = current;\n break;\n case diagObj.db.LINETYPE.ACTIVE_START:\n {\n const actorRect = actors.get(msg.from ? msg.from : msg.to.actor);\n const stackedSize = actorActivations(msg.from ? msg.from : msg.to.actor).length;\n const x =\n actorRect.x + actorRect.width / 2 + ((stackedSize - 1) * conf.activationWidth) / 2;\n const toAdd = {\n startx: x,\n stopx: x + conf.activationWidth,\n actor: msg.from,\n enabled: true,\n };\n bounds.activations.push(toAdd);\n }\n break;\n case diagObj.db.LINETYPE.ACTIVE_END:\n {\n const lastActorActivationIdx = bounds.activations\n .map((a) => a.actor)\n .lastIndexOf(msg.from);\n bounds.activations.splice(lastActorActivationIdx, 1).splice(0, 1);\n }\n break;\n }\n const isNote = msg.placement !== undefined;\n if (isNote) {\n noteModel = await buildNoteModel(msg, actors, diagObj);\n msg.noteModel = noteModel;\n stack.forEach((stk) => {\n current = stk;\n current.from = common.getMin(current.from, noteModel.startx);\n current.to = common.getMax(current.to, noteModel.startx + noteModel.width);\n current.width =\n common.getMax(current.width, Math.abs(current.from - current.to)) - conf.labelBoxWidth;\n });\n } else {\n msgModel = buildMessageModel(msg, actors, diagObj);\n msg.msgModel = msgModel;\n if (msgModel.startx && msgModel.stopx && stack.length > 0) {\n stack.forEach((stk) => {\n current = stk;\n if (msgModel.startx === msgModel.stopx) {\n const from = actors.get(msg.from);\n const to = actors.get(msg.to);\n current.from = common.getMin(\n from.x - msgModel.width / 2,\n from.x - from.width / 2,\n current.from\n );\n current.to = common.getMax(\n to.x + msgModel.width / 2,\n to.x + from.width / 2,\n current.to\n );\n current.width =\n common.getMax(current.width, Math.abs(current.to - current.from)) -\n conf.labelBoxWidth;\n } else {\n current.from = common.getMin(msgModel.startx, current.from);\n current.to = common.getMax(msgModel.stopx, current.to);\n current.width = common.getMax(current.width, msgModel.width) - conf.labelBoxWidth;\n }\n });\n }\n }\n }\n bounds.activations = [];\n log.debug('Loop type widths:', loops);\n return loops;\n};\n\nexport default {\n bounds,\n drawActors,\n drawActorsPopup,\n setConf,\n draw,\n};\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\n// @ts-ignore: JISON doesn't support types\nimport parser from './parser/sequenceDiagram.jison';\nimport { SequenceDB } from './sequenceDb.js';\nimport styles from './styles.js';\nimport { setConfig } from '../../diagram-api/diagramAPI.js';\nimport renderer from './sequenceRenderer.js';\nimport type { MermaidConfig } from '../../config.type.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n get db() {\n return new SequenceDB();\n },\n renderer,\n styles,\n init: (cnf: MermaidConfig) => {\n if (!cnf.sequence) {\n cnf.sequence = {};\n }\n if (cnf.wrap) {\n cnf.sequence.wrap = cnf.wrap;\n setConfig({ sequence: { wrap: cnf.wrap } });\n }\n },\n};\n", "/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,18],$V1=[1,19],$V2=[1,20],$V3=[1,41],$V4=[1,42],$V5=[1,26],$V6=[1,24],$V7=[1,25],$V8=[1,32],$V9=[1,33],$Va=[1,34],$Vb=[1,45],$Vc=[1,35],$Vd=[1,36],$Ve=[1,37],$Vf=[1,38],$Vg=[1,27],$Vh=[1,28],$Vi=[1,29],$Vj=[1,30],$Vk=[1,31],$Vl=[1,44],$Vm=[1,46],$Vn=[1,43],$Vo=[1,47],$Vp=[1,9],$Vq=[1,8,9],$Vr=[1,58],$Vs=[1,59],$Vt=[1,60],$Vu=[1,61],$Vv=[1,62],$Vw=[1,63],$Vx=[1,64],$Vy=[1,8,9,41],$Vz=[1,76],$VA=[1,8,9,12,13,22,39,41,44,68,69,70,71,72,73,74,79,81],$VB=[1,8,9,12,13,18,20,22,39,41,44,50,60,68,69,70,71,72,73,74,79,81,86,100,102,103],$VC=[13,60,86,100,102,103],$VD=[13,60,73,74,86,100,102,103],$VE=[13,60,68,69,70,71,72,86,100,102,103],$VF=[1,100],$VG=[1,117],$VH=[1,113],$VI=[1,109],$VJ=[1,115],$VK=[1,110],$VL=[1,111],$VM=[1,112],$VN=[1,114],$VO=[1,116],$VP=[22,48,60,61,82,86,87,88,89,90],$VQ=[1,8,9,39,41,44],$VR=[1,8,9,22],$VS=[1,145],$VT=[1,8,9,61],$VU=[1,8,9,22,48,60,61,82,86,87,88,89,90];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"mermaidDoc\":4,\"statements\":5,\"graphConfig\":6,\"CLASS_DIAGRAM\":7,\"NEWLINE\":8,\"EOF\":9,\"statement\":10,\"classLabel\":11,\"SQS\":12,\"STR\":13,\"SQE\":14,\"namespaceName\":15,\"alphaNumToken\":16,\"classLiteralName\":17,\"DOT\":18,\"className\":19,\"GENERICTYPE\":20,\"relationStatement\":21,\"LABEL\":22,\"namespaceStatement\":23,\"classStatement\":24,\"memberStatement\":25,\"annotationStatement\":26,\"clickStatement\":27,\"styleStatement\":28,\"cssClassStatement\":29,\"noteStatement\":30,\"classDefStatement\":31,\"direction\":32,\"acc_title\":33,\"acc_title_value\":34,\"acc_descr\":35,\"acc_descr_value\":36,\"acc_descr_multiline_value\":37,\"namespaceIdentifier\":38,\"STRUCT_START\":39,\"classStatements\":40,\"STRUCT_STOP\":41,\"NAMESPACE\":42,\"classIdentifier\":43,\"STYLE_SEPARATOR\":44,\"members\":45,\"CLASS\":46,\"emptyBody\":47,\"SPACE\":48,\"ANNOTATION_START\":49,\"ANNOTATION_END\":50,\"MEMBER\":51,\"SEPARATOR\":52,\"relation\":53,\"NOTE_FOR\":54,\"noteText\":55,\"NOTE\":56,\"CLASSDEF\":57,\"classList\":58,\"stylesOpt\":59,\"ALPHA\":60,\"COMMA\":61,\"direction_tb\":62,\"direction_bt\":63,\"direction_rl\":64,\"direction_lr\":65,\"relationType\":66,\"lineType\":67,\"AGGREGATION\":68,\"EXTENSION\":69,\"COMPOSITION\":70,\"DEPENDENCY\":71,\"LOLLIPOP\":72,\"LINE\":73,\"DOTTED_LINE\":74,\"CALLBACK\":75,\"LINK\":76,\"LINK_TARGET\":77,\"CLICK\":78,\"CALLBACK_NAME\":79,\"CALLBACK_ARGS\":80,\"HREF\":81,\"STYLE\":82,\"CSSCLASS\":83,\"style\":84,\"styleComponent\":85,\"NUM\":86,\"COLON\":87,\"UNIT\":88,\"BRKT\":89,\"PCT\":90,\"commentToken\":91,\"textToken\":92,\"graphCodeTokens\":93,\"textNoTagsToken\":94,\"TAGSTART\":95,\"TAGEND\":96,\"==\":97,\"--\":98,\"DEFAULT\":99,\"MINUS\":100,\"keywords\":101,\"UNICODE_TEXT\":102,\"BQUOTE_STR\":103,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",7:\"CLASS_DIAGRAM\",8:\"NEWLINE\",9:\"EOF\",12:\"SQS\",13:\"STR\",14:\"SQE\",18:\"DOT\",20:\"GENERICTYPE\",22:\"LABEL\",33:\"acc_title\",34:\"acc_title_value\",35:\"acc_descr\",36:\"acc_descr_value\",37:\"acc_descr_multiline_value\",39:\"STRUCT_START\",41:\"STRUCT_STOP\",42:\"NAMESPACE\",44:\"STYLE_SEPARATOR\",46:\"CLASS\",48:\"SPACE\",49:\"ANNOTATION_START\",50:\"ANNOTATION_END\",51:\"MEMBER\",52:\"SEPARATOR\",54:\"NOTE_FOR\",56:\"NOTE\",57:\"CLASSDEF\",60:\"ALPHA\",61:\"COMMA\",62:\"direction_tb\",63:\"direction_bt\",64:\"direction_rl\",65:\"direction_lr\",68:\"AGGREGATION\",69:\"EXTENSION\",70:\"COMPOSITION\",71:\"DEPENDENCY\",72:\"LOLLIPOP\",73:\"LINE\",74:\"DOTTED_LINE\",75:\"CALLBACK\",76:\"LINK\",77:\"LINK_TARGET\",78:\"CLICK\",79:\"CALLBACK_NAME\",80:\"CALLBACK_ARGS\",81:\"HREF\",82:\"STYLE\",83:\"CSSCLASS\",86:\"NUM\",87:\"COLON\",88:\"UNIT\",89:\"BRKT\",90:\"PCT\",93:\"graphCodeTokens\",95:\"TAGSTART\",96:\"TAGEND\",97:\"==\",98:\"--\",99:\"DEFAULT\",100:\"MINUS\",101:\"keywords\",102:\"UNICODE_TEXT\",103:\"BQUOTE_STR\"},\nproductions_: [0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,1],[15,3],[15,2],[19,1],[19,3],[19,1],[19,2],[19,2],[19,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,3],[24,6],[43,2],[43,3],[47,0],[47,2],[47,2],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[58,1],[58,3],[32,1],[32,1],[32,1],[32,1],[53,3],[53,2],[53,2],[53,1],[66,1],[66,1],[66,1],[66,1],[66,1],[67,1],[67,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[59,1],[59,3],[84,1],[84,2],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[91,1],[91,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[92,1],[94,1],[94,1],[94,1],[94,1],[16,1],[16,1],[16,1],[16,1],[17,1],[55,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 8:\n this.$=$$[$0-1]; \nbreak;\ncase 9: case 10: case 13: case 15:\n this.$=$$[$0]; \nbreak;\ncase 11: case 14:\n this.$=$$[$0-2]+'.'+$$[$0]; \nbreak;\ncase 12: case 16:\n this.$=$$[$0-1]+$$[$0]; \nbreak;\ncase 17: case 18:\n this.$=$$[$0-1]+'~'+$$[$0]+'~'; \nbreak;\ncase 19:\n yy.addRelation($$[$0]); \nbreak;\ncase 20:\n $$[$0-1].title = yy.cleanupLabel($$[$0]); yy.addRelation($$[$0-1]); \nbreak;\ncase 31:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 32: case 33:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 34:\n yy.addClassesToNamespace($$[$0-3], $$[$0-1]); \nbreak;\ncase 35:\n yy.addClassesToNamespace($$[$0-4], $$[$0-1]); \nbreak;\ncase 36:\n this.$=$$[$0]; yy.addNamespace($$[$0]); \nbreak;\ncase 37:\nthis.$=[$$[$0]]\nbreak;\ncase 38:\nthis.$=[$$[$0-1]]\nbreak;\ncase 39:\n$$[$0].unshift($$[$0-2]); this.$=$$[$0]\nbreak;\ncase 41:\nyy.setCssClass($$[$0-2], $$[$0]);\nbreak;\ncase 42:\nyy.addMembers($$[$0-3],$$[$0-1]);\nbreak;\ncase 44:\nyy.setCssClass($$[$0-5], $$[$0-3]);yy.addMembers($$[$0-5],$$[$0-1]);\nbreak;\ncase 45:\nthis.$=$$[$0]; yy.addClass($$[$0]);\nbreak;\ncase 46:\nthis.$=$$[$0-1]; yy.addClass($$[$0-1]);yy.setClassLabel($$[$0-1], $$[$0]);\nbreak;\ncase 50:\n yy.addAnnotation($$[$0],$$[$0-2]); \nbreak;\ncase 51: case 64:\n this.$ = [$$[$0]]; \nbreak;\ncase 52:\n $$[$0].push($$[$0-1]);this.$=$$[$0];\nbreak;\ncase 53:\n/*console.log('Rel found',$$[$0]);*/\nbreak;\ncase 54:\nyy.addMember($$[$0-1],yy.cleanupLabel($$[$0]));\nbreak;\ncase 55:\n/*console.warn('Member',$$[$0]);*/\nbreak;\ncase 56:\n/*console.log('sep found',$$[$0]);*/\nbreak;\ncase 57:\n this.$ = {'id1':$$[$0-2],'id2':$$[$0], relation:$$[$0-1], relationTitle1:'none', relationTitle2:'none'}; \nbreak;\ncase 58:\n this.$ = {id1:$$[$0-3], id2:$$[$0], relation:$$[$0-1], relationTitle1:$$[$0-2], relationTitle2:'none'}\nbreak;\ncase 59:\n this.$ = {id1:$$[$0-3], id2:$$[$0], relation:$$[$0-2], relationTitle1:'none', relationTitle2:$$[$0-1]}; \nbreak;\ncase 60:\n this.$ = {id1:$$[$0-4], id2:$$[$0], relation:$$[$0-2], relationTitle1:$$[$0-3], relationTitle2:$$[$0-1]} \nbreak;\ncase 61:\n yy.addNote($$[$0], $$[$0-1]); \nbreak;\ncase 62:\n yy.addNote($$[$0]); \nbreak;\ncase 63:\nthis.$ = $$[$0-2];yy.defineClass($$[$0-1],$$[$0]);\nbreak;\ncase 65:\n this.$ = $$[$0-2].concat([$$[$0]]); \nbreak;\ncase 66:\n yy.setDirection('TB');\nbreak;\ncase 67:\n yy.setDirection('BT');\nbreak;\ncase 68:\n yy.setDirection('RL');\nbreak;\ncase 69:\n yy.setDirection('LR');\nbreak;\ncase 70:\n this.$={type1:$$[$0-2],type2:$$[$0],lineType:$$[$0-1]}; \nbreak;\ncase 71:\n this.$={type1:'none',type2:$$[$0],lineType:$$[$0-1]}; \nbreak;\ncase 72:\n this.$={type1:$$[$0-1],type2:'none',lineType:$$[$0]}; \nbreak;\ncase 73:\n this.$={type1:'none',type2:'none',lineType:$$[$0]}; \nbreak;\ncase 74:\n this.$=yy.relationType.AGGREGATION;\nbreak;\ncase 75:\n this.$=yy.relationType.EXTENSION;\nbreak;\ncase 76:\n this.$=yy.relationType.COMPOSITION;\nbreak;\ncase 77:\n this.$=yy.relationType.DEPENDENCY;\nbreak;\ncase 78:\n this.$=yy.relationType.LOLLIPOP;\nbreak;\ncase 79:\nthis.$=yy.lineType.LINE;\nbreak;\ncase 80:\nthis.$=yy.lineType.DOTTED_LINE;\nbreak;\ncase 81: case 87:\nthis.$ = $$[$0-2];yy.setClickEvent($$[$0-1], $$[$0]);\nbreak;\ncase 82: case 88:\nthis.$ = $$[$0-3];yy.setClickEvent($$[$0-2], $$[$0-1]);yy.setTooltip($$[$0-2], $$[$0]);\nbreak;\ncase 83:\nthis.$ = $$[$0-2];yy.setLink($$[$0-1], $$[$0]);\nbreak;\ncase 84:\nthis.$ = $$[$0-3];yy.setLink($$[$0-2], $$[$0-1],$$[$0]);\nbreak;\ncase 85:\nthis.$ = $$[$0-3];yy.setLink($$[$0-2], $$[$0-1]);yy.setTooltip($$[$0-2], $$[$0]);\nbreak;\ncase 86:\nthis.$ = $$[$0-4];yy.setLink($$[$0-3], $$[$0-2], $$[$0]);yy.setTooltip($$[$0-3], $$[$0-1]);\nbreak;\ncase 89:\nthis.$ = $$[$0-3];yy.setClickEvent($$[$0-2], $$[$0-1], $$[$0]);\nbreak;\ncase 90:\nthis.$ = $$[$0-4];yy.setClickEvent($$[$0-3], $$[$0-2], $$[$0-1]);yy.setTooltip($$[$0-3], $$[$0]);\nbreak;\ncase 91:\nthis.$ = $$[$0-3];yy.setLink($$[$0-2], $$[$0]);\nbreak;\ncase 92:\nthis.$ = $$[$0-4];yy.setLink($$[$0-3], $$[$0-1], $$[$0]);\nbreak;\ncase 93:\nthis.$ = $$[$0-4];yy.setLink($$[$0-3], $$[$0-1]);yy.setTooltip($$[$0-3], $$[$0]);\nbreak;\ncase 94:\nthis.$ = $$[$0-5];yy.setLink($$[$0-4], $$[$0-2], $$[$0]);yy.setTooltip($$[$0-4], $$[$0-1]);\nbreak;\ncase 95:\nthis.$ = $$[$0-2];yy.setCssStyle($$[$0-1],$$[$0]);\nbreak;\ncase 96:\nyy.setCssClass($$[$0-1], $$[$0]);\nbreak;\ncase 97:\nthis.$ = [$$[$0]]\nbreak;\ncase 98:\n$$[$0-2].push($$[$0]);this.$ = $$[$0-2];\nbreak;\ncase 100:\nthis.$ = $$[$0-1] + $$[$0];\nbreak;\n}\n},\ntable: [{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,17:40,19:21,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:$V0,35:$V1,37:$V2,38:22,42:$V3,43:23,46:$V4,49:$V5,51:$V6,52:$V7,54:$V8,56:$V9,57:$Va,60:$Vb,62:$Vc,63:$Vd,64:$Ve,65:$Vf,75:$Vg,76:$Vh,78:$Vi,82:$Vj,83:$Vk,86:$Vl,100:$Vm,102:$Vn,103:$Vo},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},o($Vp,[2,5],{8:[1,48]}),{8:[1,49]},o($Vq,[2,19],{22:[1,50]}),o($Vq,[2,21]),o($Vq,[2,22]),o($Vq,[2,23]),o($Vq,[2,24]),o($Vq,[2,25]),o($Vq,[2,26]),o($Vq,[2,27]),o($Vq,[2,28]),o($Vq,[2,29]),o($Vq,[2,30]),{34:[1,51]},{36:[1,52]},o($Vq,[2,33]),o($Vq,[2,53],{53:53,66:56,67:57,13:[1,54],22:[1,55],68:$Vr,69:$Vs,70:$Vt,71:$Vu,72:$Vv,73:$Vw,74:$Vx}),{39:[1,65]},o($Vy,[2,40],{39:[1,67],44:[1,66]}),o($Vq,[2,55]),o($Vq,[2,56]),{16:68,60:$Vb,86:$Vl,100:$Vm,102:$Vn},{16:39,17:40,19:69,60:$Vb,86:$Vl,100:$Vm,102:$Vn,103:$Vo},{16:39,17:40,19:70,60:$Vb,86:$Vl,100:$Vm,102:$Vn,103:$Vo},{16:39,17:40,19:71,60:$Vb,86:$Vl,100:$Vm,102:$Vn,103:$Vo},{60:[1,72]},{13:[1,73]},{16:39,17:40,19:74,60:$Vb,86:$Vl,100:$Vm,102:$Vn,103:$Vo},{13:$Vz,55:75},{58:77,60:[1,78]},o($Vq,[2,66]),o($Vq,[2,67]),o($Vq,[2,68]),o($Vq,[2,69]),o($VA,[2,13],{16:39,17:40,19:80,18:[1,79],20:[1,81],60:$Vb,86:$Vl,100:$Vm,102:$Vn,103:$Vo}),o($VA,[2,15],{20:[1,82]}),{15:83,16:84,17:85,60:$Vb,86:$Vl,100:$Vm,102:$Vn,103:$Vo},{16:39,17:40,19:86,60:$Vb,86:$Vl,100:$Vm,102:$Vn,103:$Vo},o($VB,[2,123]),o($VB,[2,124]),o($VB,[2,125]),o($VB,[2,126]),o([1,8,9,12,13,20,22,39,41,44,68,69,70,71,72,73,74,79,81],[2,127]),o($Vp,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,19:21,38:22,43:23,16:39,17:40,5:87,33:$V0,35:$V1,37:$V2,42:$V3,46:$V4,49:$V5,51:$V6,52:$V7,54:$V8,56:$V9,57:$Va,60:$Vb,62:$Vc,63:$Vd,64:$Ve,65:$Vf,75:$Vg,76:$Vh,78:$Vi,82:$Vj,83:$Vk,86:$Vl,100:$Vm,102:$Vn,103:$Vo}),{5:88,10:5,16:39,17:40,19:21,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:$V0,35:$V1,37:$V2,38:22,42:$V3,43:23,46:$V4,49:$V5,51:$V6,52:$V7,54:$V8,56:$V9,57:$Va,60:$Vb,62:$Vc,63:$Vd,64:$Ve,65:$Vf,75:$Vg,76:$Vh,78:$Vi,82:$Vj,83:$Vk,86:$Vl,100:$Vm,102:$Vn,103:$Vo},o($Vq,[2,20]),o($Vq,[2,31]),o($Vq,[2,32]),{13:[1,90],16:39,17:40,19:89,60:$Vb,86:$Vl,100:$Vm,102:$Vn,103:$Vo},{53:91,66:56,67:57,68:$Vr,69:$Vs,70:$Vt,71:$Vu,72:$Vv,73:$Vw,74:$Vx},o($Vq,[2,54]),{67:92,73:$Vw,74:$Vx},o($VC,[2,73],{66:93,68:$Vr,69:$Vs,70:$Vt,71:$Vu,72:$Vv}),o($VD,[2,74]),o($VD,[2,75]),o($VD,[2,76]),o($VD,[2,77]),o($VD,[2,78]),o($VE,[2,79]),o($VE,[2,80]),{8:[1,95],24:96,40:94,43:23,46:$V4},{16:97,60:$Vb,86:$Vl,100:$Vm,102:$Vn},{41:[1,99],45:98,51:$VF},{50:[1,101]},{13:[1,102]},{13:[1,103]},{79:[1,104],81:[1,105]},{22:$VG,48:$VH,59:106,60:$VI,82:$VJ,84:107,85:108,86:$VK,87:$VL,88:$VM,89:$VN,90:$VO},{60:[1,118]},{13:$Vz,55:119},o($Vq,[2,62]),o($Vq,[2,128]),{22:$VG,48:$VH,59:120,60:$VI,61:[1,121],82:$VJ,84:107,85:108,86:$VK,87:$VL,88:$VM,89:$VN,90:$VO},o($VP,[2,64]),{16:39,17:40,19:122,60:$Vb,86:$Vl,100:$Vm,102:$Vn,103:$Vo},o($VA,[2,16]),o($VA,[2,17]),o($VA,[2,18]),{39:[2,36]},{15:124,16:84,17:85,18:[1,123],39:[2,9],60:$Vb,86:$Vl,100:$Vm,102:$Vn,103:$Vo},{39:[2,10]},o($VQ,[2,45],{11:125,12:[1,126]}),o($Vp,[2,7]),{9:[1,127]},o($VR,[2,57]),{16:39,17:40,19:128,60:$Vb,86:$Vl,100:$Vm,102:$Vn,103:$Vo},{13:[1,130],16:39,17:40,19:129,60:$Vb,86:$Vl,100:$Vm,102:$Vn,103:$Vo},o($VC,[2,72],{66:131,68:$Vr,69:$Vs,70:$Vt,71:$Vu,72:$Vv}),o($VC,[2,71]),{41:[1,132]},{24:96,40:133,43:23,46:$V4},{8:[1,134],41:[2,37]},o($Vy,[2,41],{39:[1,135]}),{41:[1,136]},o($Vy,[2,43]),{41:[2,51],45:137,51:$VF},{16:39,17:40,19:138,60:$Vb,86:$Vl,100:$Vm,102:$Vn,103:$Vo},o($Vq,[2,81],{13:[1,139]}),o($Vq,[2,83],{13:[1,141],77:[1,140]}),o($Vq,[2,87],{13:[1,142],80:[1,143]}),{13:[1,144]},o($Vq,[2,95],{61:$VS}),o($VT,[2,97],{85:146,22:$VG,48:$VH,60:$VI,82:$VJ,86:$VK,87:$VL,88:$VM,89:$VN,90:$VO}),o($VU,[2,99]),o($VU,[2,101]),o($VU,[2,102]),o($VU,[2,103]),o($VU,[2,104]),o($VU,[2,105]),o($VU,[2,106]),o($VU,[2,107]),o($VU,[2,108]),o($VU,[2,109]),o($Vq,[2,96]),o($Vq,[2,61]),o($Vq,[2,63],{61:$VS}),{60:[1,147]},o($VA,[2,14]),{15:148,16:84,17:85,60:$Vb,86:$Vl,100:$Vm,102:$Vn,103:$Vo},{39:[2,12]},o($VQ,[2,46]),{13:[1,149]},{1:[2,4]},o($VR,[2,59]),o($VR,[2,58]),{16:39,17:40,19:150,60:$Vb,86:$Vl,100:$Vm,102:$Vn,103:$Vo},o($VC,[2,70]),o($Vq,[2,34]),{41:[1,151]},{24:96,40:152,41:[2,38],43:23,46:$V4},{45:153,51:$VF},o($Vy,[2,42]),{41:[2,52]},o($Vq,[2,50]),o($Vq,[2,82]),o($Vq,[2,84]),o($Vq,[2,85],{77:[1,154]}),o($Vq,[2,88]),o($Vq,[2,89],{13:[1,155]}),o($Vq,[2,91],{13:[1,157],77:[1,156]}),{22:$VG,48:$VH,60:$VI,82:$VJ,84:158,85:108,86:$VK,87:$VL,88:$VM,89:$VN,90:$VO},o($VU,[2,100]),o($VP,[2,65]),{39:[2,11]},{14:[1,159]},o($VR,[2,60]),o($Vq,[2,35]),{41:[2,39]},{41:[1,160]},o($Vq,[2,86]),o($Vq,[2,90]),o($Vq,[2,92]),o($Vq,[2,93],{77:[1,161]}),o($VT,[2,98],{85:146,22:$VG,48:$VH,60:$VI,82:$VJ,86:$VK,87:$VL,88:$VM,89:$VN,90:$VO}),o($VQ,[2,8]),o($Vy,[2,44]),o($Vq,[2,94])],\ndefaultActions: {2:[2,1],3:[2,2],4:[2,3],83:[2,36],85:[2,10],124:[2,12],127:[2,4],137:[2,52],148:[2,11],152:[2,39]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// 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.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n 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(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 62;\nbreak;\ncase 1:return 63;\nbreak;\ncase 2:return 64;\nbreak;\ncase 3:return 65;\nbreak;\ncase 4:/* skip comments */\nbreak;\ncase 5:/* skip comments */\nbreak;\ncase 6: this.begin(\"acc_title\");return 33; \nbreak;\ncase 7: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 8: this.begin(\"acc_descr\");return 35; \nbreak;\ncase 9: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 10: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 11: this.popState(); \nbreak;\ncase 12:return \"acc_descr_multiline_value\";\nbreak;\ncase 13:return 8;\nbreak;\ncase 14:/* skip whitespace */\nbreak;\ncase 15:return 7;\nbreak;\ncase 16:return 7;\nbreak;\ncase 17:return 'EDGE_STATE';\nbreak;\ncase 18:this.begin(\"callback_name\");\nbreak;\ncase 19:this.popState();\nbreak;\ncase 20:this.popState(); this.begin(\"callback_args\");\nbreak;\ncase 21:return 79;\nbreak;\ncase 22:this.popState();\nbreak;\ncase 23:return 80;\nbreak;\ncase 24:this.popState();\nbreak;\ncase 25:return \"STR\";\nbreak;\ncase 26:this.begin(\"string\");\nbreak;\ncase 27:return 82;\nbreak;\ncase 28:return 57;\nbreak;\ncase 29: this.begin('namespace'); return 42; \nbreak;\ncase 30: this.popState(); return 8; \nbreak;\ncase 31:/* skip whitespace */\nbreak;\ncase 32: this.begin(\"namespace-body\"); return 39;\nbreak;\ncase 33: this.popState(); return 41; \nbreak;\ncase 34:return \"EOF_IN_STRUCT\";\nbreak;\ncase 35:return 8;\nbreak;\ncase 36:/* skip whitespace */\nbreak;\ncase 37:return 'EDGE_STATE';\nbreak;\ncase 38: this.begin('class'); return 46;\nbreak;\ncase 39: this.popState(); return 8; \nbreak;\ncase 40:/* skip whitespace */\nbreak;\ncase 41: this.popState(); this.popState(); return 41;\nbreak;\ncase 42: this.begin(\"class-body\"); return 39;\nbreak;\ncase 43: this.popState(); return 41; \nbreak;\ncase 44:return \"EOF_IN_STRUCT\";\nbreak;\ncase 45: return 'EDGE_STATE';\nbreak;\ncase 46:return \"OPEN_IN_STRUCT\";\nbreak;\ncase 47:/* nothing */\nbreak;\ncase 48: return \"MEMBER\";\nbreak;\ncase 49:return 83;\nbreak;\ncase 50:return 75;\nbreak;\ncase 51:return 76;\nbreak;\ncase 52:return 78;\nbreak;\ncase 53:return 54;\nbreak;\ncase 54:return 56;\nbreak;\ncase 55:return 49;\nbreak;\ncase 56:return 50;\nbreak;\ncase 57:return 81;\nbreak;\ncase 58:this.popState();\nbreak;\ncase 59:return \"GENERICTYPE\";\nbreak;\ncase 60:this.begin(\"generic\");\nbreak;\ncase 61:this.popState();\nbreak;\ncase 62:return \"BQUOTE_STR\";\nbreak;\ncase 63:this.begin(\"bqstring\");\nbreak;\ncase 64:return 77;\nbreak;\ncase 65:return 77;\nbreak;\ncase 66:return 77;\nbreak;\ncase 67:return 77;\nbreak;\ncase 68:return 69;\nbreak;\ncase 69:return 69;\nbreak;\ncase 70:return 71;\nbreak;\ncase 71:return 71;\nbreak;\ncase 72:return 70;\nbreak;\ncase 73:return 68;\nbreak;\ncase 74:return 72;\nbreak;\ncase 75:return 73;\nbreak;\ncase 76:return 74;\nbreak;\ncase 77:return 22;\nbreak;\ncase 78:return 44;\nbreak;\ncase 79:return 100;\nbreak;\ncase 80:return 18;\nbreak;\ncase 81:return 'PLUS';\nbreak;\ncase 82:return 87;\nbreak;\ncase 83:return 61;\nbreak;\ncase 84:return 89;\nbreak;\ncase 85:return 89;\nbreak;\ncase 86:return 90;\nbreak;\ncase 87:return 'EQUALS';\nbreak;\ncase 88:return 'EQUALS';\nbreak;\ncase 89:return 60;\nbreak;\ncase 90:return 12;\nbreak;\ncase 91:return 14;\nbreak;\ncase 92:return 'PUNCTUATION';\nbreak;\ncase 93:return 86;\nbreak;\ncase 94:return 102;\nbreak;\ncase 95:return 48;\nbreak;\ncase 96:return 48;\nbreak;\ncase 97:return 9;\nbreak;\n}\n},\nrules: [/^(?:.*direction\\s+TB[^\\n]*)/,/^(?:.*direction\\s+BT[^\\n]*)/,/^(?:.*direction\\s+RL[^\\n]*)/,/^(?:.*direction\\s+LR[^\\n]*)/,/^(?:%%(?!\\{)*[^\\n]*(\\r?\\n?)+)/,/^(?:%%[^\\n]*(\\r?\\n)*)/,/^(?:accTitle\\s*:\\s*)/,/^(?:(?!\\n||)*[^\\n]*)/,/^(?:accDescr\\s*:\\s*)/,/^(?:(?!\\n||)*[^\\n]*)/,/^(?:accDescr\\s*\\{\\s*)/,/^(?:[\\}])/,/^(?:[^\\}]*)/,/^(?:\\s*(\\r?\\n)+)/,/^(?:\\s+)/,/^(?:classDiagram-v2\\b)/,/^(?:classDiagram\\b)/,/^(?:\\[\\*\\])/,/^(?:call[\\s]+)/,/^(?:\\([\\s]*\\))/,/^(?:\\()/,/^(?:[^(]*)/,/^(?:\\))/,/^(?:[^)]*)/,/^(?:[\"])/,/^(?:[^\"]*)/,/^(?:[\"])/,/^(?:style\\b)/,/^(?:classDef\\b)/,/^(?:namespace\\b)/,/^(?:\\s*(\\r?\\n)+)/,/^(?:\\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\\s*(\\r?\\n)+)/,/^(?:\\s+)/,/^(?:\\[\\*\\])/,/^(?:class\\b)/,/^(?:\\s*(\\r?\\n)+)/,/^(?:\\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\\[\\*\\])/,/^(?:[{])/,/^(?:[\\n])/,/^(?:[^{}\\n]*)/,/^(?:cssClass\\b)/,/^(?:callback\\b)/,/^(?:link\\b)/,/^(?:click\\b)/,/^(?:note for\\b)/,/^(?:note\\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\\b)/,/^(?:_blank\\b)/,/^(?:_parent\\b)/,/^(?:_top\\b)/,/^(?:\\s*<\\|)/,/^(?:\\s*\\|>)/,/^(?:\\s*>)/,/^(?:\\s*<)/,/^(?:\\s*\\*)/,/^(?:\\s*o\\b)/,/^(?:\\s*\\(\\))/,/^(?:--)/,/^(?:\\.\\.)/,/^(?::{1}[^:\\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\\.)/,/^(?:\\+)/,/^(?::)/,/^(?:,)/,/^(?:#)/,/^(?:#)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\\w+)/,/^(?:\\[)/,/^(?:\\])/,/^(?:[!\"#$%&'*+,-.`?\\\\/])/,/^(?:[0-9]+)/,/^(?:[\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6]|[\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377]|[\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5]|[\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA]|[\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE]|[\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA]|[\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0]|[\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977]|[\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2]|[\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A]|[\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39]|[\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8]|[\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C]|[\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C]|[\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99]|[\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0]|[\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D]|[\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3]|[\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10]|[\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1]|[\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81]|[\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3]|[\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6]|[\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A]|[\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081]|[\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D]|[\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0]|[\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310]|[\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C]|[\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711]|[\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7]|[\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C]|[\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16]|[\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF]|[\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC]|[\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D]|[\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D]|[\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3]|[\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F]|[\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128]|[\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184]|[\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3]|[\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6]|[\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE]|[\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C]|[\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D]|[\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC]|[\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B]|[\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788]|[\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805]|[\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB]|[\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28]|[\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5]|[\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4]|[\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E]|[\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D]|[\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36]|[\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D]|[\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC]|[\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF]|[\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])/,/^(?:\\s)/,/^(?:\\s)/,/^(?:$)/],\nconditions: {\"namespace-body\":{\"rules\":[26,33,34,35,36,37,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],\"inclusive\":false},\"namespace\":{\"rules\":[26,29,30,31,32,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],\"inclusive\":false},\"class-body\":{\"rules\":[26,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],\"inclusive\":false},\"class\":{\"rules\":[26,39,40,41,42,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],\"inclusive\":false},\"acc_descr_multiline\":{\"rules\":[11,12,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],\"inclusive\":false},\"acc_descr\":{\"rules\":[9,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],\"inclusive\":false},\"acc_title\":{\"rules\":[7,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],\"inclusive\":false},\"callback_args\":{\"rules\":[22,23,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],\"inclusive\":false},\"callback_name\":{\"rules\":[19,20,21,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],\"inclusive\":false},\"href\":{\"rules\":[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],\"inclusive\":false},\"struct\":{\"rules\":[26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],\"inclusive\":false},\"generic\":{\"rules\":[26,49,50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],\"inclusive\":false},\"bqstring\":{\"rules\":[26,49,50,51,52,53,54,55,56,57,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],\"inclusive\":false},\"string\":{\"rules\":[24,25,26,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,86,87,88,89,90,91,92,93,94,95,97],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,8,10,13,14,15,16,17,18,26,27,28,29,38,49,50,51,52,53,54,55,56,57,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})(); \n\tparser.parser = parser;\n\texport { parser };\n\texport default parser;\n\t", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { parseGenericTypes, sanitizeText } from '../common/common.js';\n\nexport interface ClassNode {\n id: string;\n type: string;\n label: string;\n shape: string;\n text: string;\n cssClasses: string;\n methods: ClassMember[];\n members: ClassMember[];\n annotations: string[];\n domId: string;\n styles: string[];\n parent?: string;\n link?: string;\n linkTarget?: string;\n haveCallback?: boolean;\n tooltip?: string;\n look?: string;\n}\n\nexport type Visibility = '#' | '+' | '~' | '-' | '';\nexport const visibilityValues = ['#', '+', '~', '-', ''];\n\n/**\n * Parses and stores class diagram member variables/methods.\n *\n */\nexport class ClassMember {\n id!: string;\n cssStyle!: string;\n memberType!: 'method' | 'attribute';\n visibility!: Visibility;\n text: string;\n /**\n * denote if static or to determine which css class to apply to the node\n * @defaultValue ''\n */\n classifier!: string;\n /**\n * parameters for method\n * @defaultValue ''\n */\n parameters!: string;\n /**\n * return type for method\n * @defaultValue ''\n */\n returnType!: string;\n\n constructor(input: string, memberType: 'method' | 'attribute') {\n this.memberType = memberType;\n this.visibility = '';\n this.classifier = '';\n this.text = '';\n const sanitizedInput = sanitizeText(input, getConfig());\n this.parseMember(sanitizedInput);\n }\n\n getDisplayDetails() {\n let displayText = this.visibility + parseGenericTypes(this.id);\n if (this.memberType === 'method') {\n displayText += `(${parseGenericTypes(this.parameters.trim())})`;\n if (this.returnType) {\n displayText += ' : ' + parseGenericTypes(this.returnType);\n }\n }\n\n displayText = displayText.trim();\n const cssStyle = this.parseClassifier();\n\n return {\n displayText,\n cssStyle,\n };\n }\n\n parseMember(input: string) {\n let potentialClassifier = '';\n\n if (this.memberType === 'method') {\n const methodRegEx = /([#+~-])?(.+)\\((.*)\\)([\\s$*])?(.*)([$*])?/;\n const match = methodRegEx.exec(input);\n if (match) {\n const detectedVisibility = match[1] ? match[1].trim() : '';\n\n if (visibilityValues.includes(detectedVisibility)) {\n this.visibility = detectedVisibility as Visibility;\n }\n\n this.id = match[2];\n this.parameters = match[3] ? match[3].trim() : '';\n potentialClassifier = match[4] ? match[4].trim() : '';\n this.returnType = match[5] ? match[5].trim() : '';\n\n if (potentialClassifier === '') {\n const lastChar = this.returnType.substring(this.returnType.length - 1);\n if (/[$*]/.exec(lastChar)) {\n potentialClassifier = lastChar;\n this.returnType = this.returnType.substring(0, this.returnType.length - 1);\n }\n }\n }\n } else {\n const length = input.length;\n const firstChar = input.substring(0, 1);\n const lastChar = input.substring(length - 1);\n\n if (visibilityValues.includes(firstChar)) {\n this.visibility = firstChar as Visibility;\n }\n\n if (/[$*]/.exec(lastChar)) {\n potentialClassifier = lastChar;\n }\n\n this.id = input.substring(\n this.visibility === '' ? 0 : 1,\n potentialClassifier === '' ? length : length - 1\n );\n }\n\n this.classifier = potentialClassifier;\n // Preserve one space only\n this.id = this.id.startsWith(' ') ? ' ' + this.id.trim() : this.id.trim();\n\n const combinedText = `${this.visibility ? '\\\\' + this.visibility : ''}${parseGenericTypes(this.id)}${this.memberType === 'method' ? `(${parseGenericTypes(this.parameters)})${this.returnType ? ' : ' + parseGenericTypes(this.returnType) : ''}` : ''}`;\n this.text = combinedText.replaceAll('<', '<').replaceAll('>', '>');\n if (this.text.startsWith('\\\\<')) {\n this.text = this.text.replace('\\\\<', '~');\n }\n }\n\n parseClassifier() {\n switch (this.classifier) {\n case '*':\n return 'font-style:italic;';\n case '$':\n return 'text-decoration:underline;';\n default:\n return '';\n }\n }\n}\n\nexport interface ClassNote {\n id: string;\n class: string;\n text: string;\n}\n\nexport interface ClassRelation {\n id1: string;\n id2: string;\n relationTitle1: string;\n relationTitle2: string;\n type: string;\n title: string;\n text: string;\n style: string[];\n relation: {\n type1: number;\n type2: number;\n lineType: number;\n };\n}\n\nexport interface Interface {\n id: string;\n label: string;\n classId: string;\n}\n\nexport interface NamespaceNode {\n id: string;\n domId: string;\n classes: ClassMap;\n children: NamespaceMap;\n}\n\nexport interface StyleClass {\n id: string;\n styles: string[];\n textStyles: string[];\n}\n\nexport type ClassMap = Map;\nexport type NamespaceMap = Map;\n", "import { select, type Selection } from 'd3';\nimport { log } from '../../logger.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport common from '../common/common.js';\nimport utils, { getEdgeId } from '../../utils.js';\nimport {\n setAccTitle,\n getAccTitle,\n getAccDescription,\n setAccDescription,\n clear as commonClear,\n setDiagramTitle,\n getDiagramTitle,\n} from '../common/commonDb.js';\nimport { ClassMember } from './classTypes.js';\nimport type {\n ClassRelation,\n ClassNode,\n ClassNote,\n ClassMap,\n NamespaceMap,\n NamespaceNode,\n StyleClass,\n Interface,\n} from './classTypes.js';\nimport type { Node, Edge } from '../../rendering-util/types.js';\nimport type { DiagramDB } from '../../diagram-api/types.js';\n\nconst MERMAID_DOM_ID_PREFIX = 'classId-';\nlet classCounter = 0;\n\nconst sanitizeText = (txt: string) => common.sanitizeText(txt, getConfig());\n\nexport class ClassDB implements DiagramDB {\n private relations: ClassRelation[] = [];\n private classes = new Map();\n private readonly styleClasses = new Map();\n private notes: ClassNote[] = [];\n private interfaces: Interface[] = [];\n // private static classCounter = 0;\n private namespaces = new Map();\n private namespaceCounter = 0;\n\n private functions: any[] = [];\n\n constructor() {\n this.functions.push(this.setupToolTips.bind(this));\n this.clear();\n\n // Needed for JISON since it only supports direct properties\n this.addRelation = this.addRelation.bind(this);\n this.addClassesToNamespace = this.addClassesToNamespace.bind(this);\n this.addNamespace = this.addNamespace.bind(this);\n this.setCssClass = this.setCssClass.bind(this);\n this.addMembers = this.addMembers.bind(this);\n this.addClass = this.addClass.bind(this);\n this.setClassLabel = this.setClassLabel.bind(this);\n this.addAnnotation = this.addAnnotation.bind(this);\n this.addMember = this.addMember.bind(this);\n this.cleanupLabel = this.cleanupLabel.bind(this);\n this.addNote = this.addNote.bind(this);\n this.defineClass = this.defineClass.bind(this);\n this.setDirection = this.setDirection.bind(this);\n this.setLink = this.setLink.bind(this);\n this.bindFunctions = this.bindFunctions.bind(this);\n this.clear = this.clear.bind(this);\n\n this.setTooltip = this.setTooltip.bind(this);\n this.setClickEvent = this.setClickEvent.bind(this);\n this.setCssStyle = this.setCssStyle.bind(this);\n }\n\n private splitClassNameAndType(_id: string) {\n const id = common.sanitizeText(_id, getConfig());\n let genericType = '';\n let className = id;\n\n if (id.indexOf('~') > 0) {\n const split = id.split('~');\n className = sanitizeText(split[0]);\n genericType = sanitizeText(split[1]);\n }\n\n return { className: className, type: genericType };\n }\n\n public setClassLabel(_id: string, label: string) {\n const id = common.sanitizeText(_id, getConfig());\n if (label) {\n label = sanitizeText(label);\n }\n\n const { className } = this.splitClassNameAndType(id);\n this.classes.get(className)!.label = label;\n this.classes.get(className)!.text =\n `${label}${this.classes.get(className)!.type ? `<${this.classes.get(className)!.type}>` : ''}`;\n }\n\n /**\n * Function called by parser when a node definition has been found.\n *\n * @param id - ID of the class to add\n * @public\n */\n public addClass(_id: string) {\n const id = common.sanitizeText(_id, getConfig());\n const { className, type } = this.splitClassNameAndType(id);\n // Only add class if not exists\n if (this.classes.has(className)) {\n return;\n }\n // alert('Adding class: ' + className);\n const name = common.sanitizeText(className, getConfig());\n // alert('Adding class after: ' + name);\n this.classes.set(name, {\n id: name,\n type: type,\n label: name,\n text: `${name}${type ? `<${type}>` : ''}`,\n shape: 'classBox',\n cssClasses: 'default',\n methods: [],\n members: [],\n annotations: [],\n styles: [],\n domId: MERMAID_DOM_ID_PREFIX + name + '-' + classCounter,\n } as ClassNode);\n\n classCounter++;\n }\n\n private addInterface(label: string, classId: string) {\n const classInterface: Interface = {\n id: `interface${this.interfaces.length}`,\n label,\n classId,\n };\n\n this.interfaces.push(classInterface);\n }\n\n /**\n * Function to lookup domId from id in the graph definition.\n *\n * @param id - class ID to lookup\n * @public\n */\n public lookUpDomId(_id: string): string {\n const id = common.sanitizeText(_id, getConfig());\n if (this.classes.has(id)) {\n return this.classes.get(id)!.domId;\n }\n throw new Error('Class not found: ' + id);\n }\n\n public clear() {\n this.relations = [];\n this.classes = new Map();\n this.notes = [];\n this.interfaces = [];\n this.functions = [];\n this.functions.push(this.setupToolTips.bind(this));\n this.namespaces = new Map();\n this.namespaceCounter = 0;\n this.direction = 'TB';\n commonClear();\n }\n\n public getClass(id: string): ClassNode {\n return this.classes.get(id)!;\n }\n\n public getClasses(): ClassMap {\n return this.classes;\n }\n\n public getRelations(): ClassRelation[] {\n return this.relations;\n }\n\n public getNotes() {\n return this.notes;\n }\n\n public addRelation(classRelation: ClassRelation) {\n log.debug('Adding relation: ' + JSON.stringify(classRelation));\n // Due to relationType cannot just check if it is equal to 'none' or it complains, can fix this later\n const invalidTypes = [\n this.relationType.LOLLIPOP,\n this.relationType.AGGREGATION,\n this.relationType.COMPOSITION,\n this.relationType.DEPENDENCY,\n this.relationType.EXTENSION,\n ];\n\n if (\n classRelation.relation.type1 === this.relationType.LOLLIPOP &&\n !invalidTypes.includes(classRelation.relation.type2)\n ) {\n this.addClass(classRelation.id2);\n this.addInterface(classRelation.id1, classRelation.id2);\n classRelation.id1 = `interface${this.interfaces.length - 1}`;\n } else if (\n classRelation.relation.type2 === this.relationType.LOLLIPOP &&\n !invalidTypes.includes(classRelation.relation.type1)\n ) {\n this.addClass(classRelation.id1);\n this.addInterface(classRelation.id2, classRelation.id1);\n classRelation.id2 = `interface${this.interfaces.length - 1}`;\n } else {\n this.addClass(classRelation.id1);\n this.addClass(classRelation.id2);\n }\n\n classRelation.id1 = this.splitClassNameAndType(classRelation.id1).className;\n classRelation.id2 = this.splitClassNameAndType(classRelation.id2).className;\n\n classRelation.relationTitle1 = common.sanitizeText(\n classRelation.relationTitle1.trim(),\n getConfig()\n );\n\n classRelation.relationTitle2 = common.sanitizeText(\n classRelation.relationTitle2.trim(),\n getConfig()\n );\n\n this.relations.push(classRelation);\n }\n\n /**\n * Adds an annotation to the specified class Annotations mark special properties of the given type\n * (like 'interface' or 'service')\n *\n * @param className - The class name\n * @param annotation - The name of the annotation without any brackets\n * @public\n */\n public addAnnotation(className: string, annotation: string) {\n const validatedClassName = this.splitClassNameAndType(className).className;\n this.classes.get(validatedClassName)!.annotations.push(annotation);\n }\n\n /**\n * Adds a member to the specified class\n *\n * @param className - The class name\n * @param member - The full name of the member. If the member is enclosed in `<>` it is\n * treated as an annotation If the member is ending with a closing bracket ) it is treated as a\n * method Otherwise the member will be treated as a normal property\n * @public\n */\n public addMember(className: string, member: string) {\n this.addClass(className);\n\n const validatedClassName = this.splitClassNameAndType(className).className;\n const theClass = this.classes.get(validatedClassName)!;\n\n if (typeof member === 'string') {\n // Member can contain white spaces, we trim them out\n const memberString = member.trim();\n\n if (memberString.startsWith('<<') && memberString.endsWith('>>')) {\n // its an annotation\n theClass.annotations.push(sanitizeText(memberString.substring(2, memberString.length - 2)));\n } else if (memberString.indexOf(')') > 0) {\n //its a method\n theClass.methods.push(new ClassMember(memberString, 'method'));\n } else if (memberString) {\n theClass.members.push(new ClassMember(memberString, 'attribute'));\n }\n }\n }\n\n public addMembers(className: string, members: string[]) {\n if (Array.isArray(members)) {\n members.reverse();\n members.forEach((member) => this.addMember(className, member));\n }\n }\n\n public addNote(text: string, className: string) {\n const note = {\n id: `note${this.notes.length}`,\n class: className,\n text: text,\n };\n this.notes.push(note);\n }\n\n public cleanupLabel(label: string) {\n if (label.startsWith(':')) {\n label = label.substring(1);\n }\n return sanitizeText(label.trim());\n }\n\n /**\n * Called by parser when assigning cssClass to a class\n *\n * @param ids - Comma separated list of ids\n * @param className - Class to add\n */\n public setCssClass(ids: string, className: string) {\n ids.split(',').forEach((_id) => {\n let id = _id;\n if (/\\d/.exec(_id[0])) {\n id = MERMAID_DOM_ID_PREFIX + id;\n }\n const classNode = this.classes.get(id);\n if (classNode) {\n classNode.cssClasses += ' ' + className;\n }\n });\n }\n\n public defineClass(ids: string[], style: string[]) {\n for (const id of ids) {\n let styleClass = this.styleClasses.get(id);\n if (styleClass === undefined) {\n styleClass = { id, styles: [], textStyles: [] };\n this.styleClasses.set(id, styleClass);\n }\n\n if (style) {\n style.forEach((s) => {\n if (/color/.exec(s)) {\n const newStyle = s.replace('fill', 'bgFill'); // .replace('color', 'fill');\n styleClass.textStyles.push(newStyle);\n }\n styleClass.styles.push(s);\n });\n }\n\n this.classes.forEach((value) => {\n if (value.cssClasses.includes(id)) {\n value.styles.push(...style.flatMap((s) => s.split(',')));\n }\n });\n }\n }\n\n /**\n * Called by parser when a tooltip is found, e.g. a clickable element.\n *\n * @param ids - Comma separated list of ids\n * @param tooltip - Tooltip to add\n */\n public setTooltip(ids: string, tooltip?: string) {\n ids.split(',').forEach((id) => {\n if (tooltip !== undefined) {\n this.classes.get(id)!.tooltip = sanitizeText(tooltip);\n }\n });\n }\n\n public getTooltip(id: string, namespace?: string) {\n if (namespace && this.namespaces.has(namespace)) {\n return this.namespaces.get(namespace)!.classes.get(id)!.tooltip;\n }\n\n return this.classes.get(id)!.tooltip;\n }\n\n /**\n * Called by parser when a link is found. Adds the URL to the vertex data.\n *\n * @param ids - Comma separated list of ids\n * @param linkStr - URL to create a link for\n * @param target - Target of the link, _blank by default as originally defined in the svgDraw.js file\n */\n public setLink(ids: string, linkStr: string, target: string) {\n const config = getConfig();\n ids.split(',').forEach((_id) => {\n let id = _id;\n if (/\\d/.exec(_id[0])) {\n id = MERMAID_DOM_ID_PREFIX + id;\n }\n const theClass = this.classes.get(id);\n if (theClass) {\n theClass.link = utils.formatUrl(linkStr, config);\n if (config.securityLevel === 'sandbox') {\n theClass.linkTarget = '_top';\n } else if (typeof target === 'string') {\n theClass.linkTarget = sanitizeText(target);\n } else {\n theClass.linkTarget = '_blank';\n }\n }\n });\n this.setCssClass(ids, 'clickable');\n }\n\n /**\n * Called by parser when a click definition is found. Registers an event handler.\n *\n * @param ids - Comma separated list of ids\n * @param functionName - Function to be called on click\n * @param functionArgs - Function args the function should be called with\n */\n public setClickEvent(ids: string, functionName: string, functionArgs: string) {\n ids.split(',').forEach((id) => {\n this.setClickFunc(id, functionName, functionArgs);\n this.classes.get(id)!.haveCallback = true;\n });\n this.setCssClass(ids, 'clickable');\n }\n\n private setClickFunc(_domId: string, functionName: string, functionArgs: string) {\n const domId = common.sanitizeText(_domId, getConfig());\n const config = getConfig();\n if (config.securityLevel !== 'loose') {\n return;\n }\n if (functionName === undefined) {\n return;\n }\n\n const id = domId;\n if (this.classes.has(id)) {\n const elemId = this.lookUpDomId(id);\n let argList: string[] = [];\n if (typeof functionArgs === 'string') {\n /* Splits functionArgs by ',', ignoring all ',' in double quoted strings */\n argList = functionArgs.split(/,(?=(?:(?:[^\"]*\"){2})*[^\"]*$)/);\n for (let i = 0; i < argList.length; i++) {\n let item = argList[i].trim();\n /* Removes all double quotes at the start and end of an argument */\n /* This preserves all starting and ending whitespace inside */\n if (item.startsWith('\"') && item.endsWith('\"')) {\n item = item.substr(1, item.length - 2);\n }\n argList[i] = item;\n }\n }\n\n /* if no arguments passed into callback, default to passing in id */\n if (argList.length === 0) {\n argList.push(elemId);\n }\n\n this.functions.push(() => {\n const elem = document.querySelector(`[id=\"${elemId}\"]`);\n if (elem !== null) {\n elem.addEventListener(\n 'click',\n () => {\n utils.runFunc(functionName, ...argList);\n },\n false\n );\n }\n });\n }\n }\n\n public bindFunctions(element: Element) {\n this.functions.forEach((fun) => {\n fun(element);\n });\n }\n\n public readonly lineType = {\n LINE: 0,\n DOTTED_LINE: 1,\n };\n\n public readonly relationType = {\n AGGREGATION: 0,\n EXTENSION: 1,\n COMPOSITION: 2,\n DEPENDENCY: 3,\n LOLLIPOP: 4,\n };\n\n private readonly setupToolTips = (element: Element) => {\n let tooltipElem: Selection =\n select('.mermaidTooltip');\n // @ts-expect-error - Incorrect types\n if ((tooltipElem._groups || tooltipElem)[0][0] === null) {\n tooltipElem = select('body')\n .append('div')\n .attr('class', 'mermaidTooltip')\n .style('opacity', 0);\n }\n\n const svg = select(element).select('svg');\n\n const nodes = svg.selectAll('g.node');\n nodes\n .on('mouseover', (event: MouseEvent) => {\n const el = select(event.currentTarget as HTMLElement);\n const title = el.attr('title');\n // Don't try to draw a tooltip if no data is provided\n if (title === null) {\n return;\n }\n // @ts-ignore - getBoundingClientRect is not part of the d3 type definition\n const rect = this.getBoundingClientRect();\n\n tooltipElem.transition().duration(200).style('opacity', '.9');\n tooltipElem\n .text(el.attr('title'))\n .style('left', window.scrollX + rect.left + (rect.right - rect.left) / 2 + 'px')\n .style('top', window.scrollY + rect.top - 14 + document.body.scrollTop + 'px');\n tooltipElem.html(tooltipElem.html().replace(/<br\\/>/g, '
    '));\n el.classed('hover', true);\n })\n .on('mouseout', (event: MouseEvent) => {\n tooltipElem.transition().duration(500).style('opacity', 0);\n const el = select(event.currentTarget as HTMLElement);\n el.classed('hover', false);\n });\n };\n\n private direction = 'TB';\n public getDirection() {\n return this.direction;\n }\n public setDirection(dir: string) {\n this.direction = dir;\n }\n\n /**\n * Function called by parser when a namespace definition has been found.\n *\n * @param id - ID of the namespace to add\n * @public\n */\n public addNamespace(id: string) {\n if (this.namespaces.has(id)) {\n return;\n }\n\n this.namespaces.set(id, {\n id: id,\n classes: new Map(),\n children: {},\n domId: MERMAID_DOM_ID_PREFIX + id + '-' + this.namespaceCounter,\n } as NamespaceNode);\n\n this.namespaceCounter++;\n }\n\n public getNamespace(name: string): NamespaceNode {\n return this.namespaces.get(name)!;\n }\n\n public getNamespaces(): NamespaceMap {\n return this.namespaces;\n }\n\n /**\n * Function called by parser when a namespace definition has been found.\n *\n * @param id - ID of the namespace to add\n * @param classNames - IDs of the class to add\n * @public\n */\n public addClassesToNamespace(id: string, classNames: string[]) {\n if (!this.namespaces.has(id)) {\n return;\n }\n for (const name of classNames) {\n const { className } = this.splitClassNameAndType(name);\n this.classes.get(className)!.parent = id;\n this.namespaces.get(id)!.classes.set(className, this.classes.get(className)!);\n }\n }\n\n public setCssStyle(id: string, styles: string[]) {\n const thisClass = this.classes.get(id);\n if (!styles || !thisClass) {\n return;\n }\n for (const s of styles) {\n if (s.includes(',')) {\n thisClass.styles.push(...s.split(','));\n } else {\n thisClass.styles.push(s);\n }\n }\n }\n\n /**\n * Gets the arrow marker for a type index\n *\n * @param type - The type to look for\n * @returns The arrow marker\n */\n private getArrowMarker(type: number) {\n let marker;\n switch (type) {\n case 0:\n marker = 'aggregation';\n break;\n case 1:\n marker = 'extension';\n break;\n case 2:\n marker = 'composition';\n break;\n case 3:\n marker = 'dependency';\n break;\n case 4:\n marker = 'lollipop';\n break;\n default:\n marker = 'none';\n }\n return marker;\n }\n\n public getData() {\n const nodes: Node[] = [];\n const edges: Edge[] = [];\n const config = getConfig();\n\n for (const namespaceKey of this.namespaces.keys()) {\n const namespace = this.namespaces.get(namespaceKey);\n if (namespace) {\n const node: Node = {\n id: namespace.id,\n label: namespace.id,\n isGroup: true,\n padding: config.class!.padding ?? 16,\n // parent node must be one of [rect, roundedWithTitle, noteGroup, divider]\n shape: 'rect',\n cssStyles: ['fill: none', 'stroke: black'],\n look: config.look,\n };\n nodes.push(node);\n }\n }\n\n for (const classKey of this.classes.keys()) {\n const classNode = this.classes.get(classKey);\n if (classNode) {\n const node = classNode as unknown as Node;\n node.parentId = classNode.parent;\n node.look = config.look;\n nodes.push(node);\n }\n }\n\n let cnt = 0;\n for (const note of this.notes) {\n cnt++;\n const noteNode: Node = {\n id: note.id,\n label: note.text,\n isGroup: false,\n shape: 'note',\n padding: config.class!.padding ?? 6,\n cssStyles: [\n 'text-align: left',\n 'white-space: nowrap',\n `fill: ${config.themeVariables.noteBkgColor}`,\n `stroke: ${config.themeVariables.noteBorderColor}`,\n ],\n look: config.look,\n };\n nodes.push(noteNode);\n\n const noteClassId = this.classes.get(note.class)?.id ?? '';\n\n if (noteClassId) {\n const edge: Edge = {\n id: `edgeNote${cnt}`,\n start: note.id,\n end: noteClassId,\n type: 'normal',\n thickness: 'normal',\n classes: 'relation',\n arrowTypeStart: 'none',\n arrowTypeEnd: 'none',\n arrowheadStyle: '',\n labelStyle: [''],\n style: ['fill: none'],\n pattern: 'dotted',\n look: config.look,\n };\n edges.push(edge);\n }\n }\n\n for (const _interface of this.interfaces) {\n const interfaceNode: Node = {\n id: _interface.id,\n label: _interface.label,\n isGroup: false,\n shape: 'rect',\n cssStyles: ['opacity: 0;'],\n look: config.look,\n };\n nodes.push(interfaceNode);\n }\n\n cnt = 0;\n for (const classRelation of this.relations) {\n cnt++;\n const edge: Edge = {\n id: getEdgeId(classRelation.id1, classRelation.id2, {\n prefix: 'id',\n counter: cnt,\n }),\n start: classRelation.id1,\n end: classRelation.id2,\n type: 'normal',\n label: classRelation.title,\n labelpos: 'c',\n thickness: 'normal',\n classes: 'relation',\n arrowTypeStart: this.getArrowMarker(classRelation.relation.type1),\n arrowTypeEnd: this.getArrowMarker(classRelation.relation.type2),\n startLabelRight:\n classRelation.relationTitle1 === 'none' ? '' : classRelation.relationTitle1,\n endLabelLeft: classRelation.relationTitle2 === 'none' ? '' : classRelation.relationTitle2,\n arrowheadStyle: '',\n labelStyle: ['display: inline-block'],\n style: classRelation.style || '',\n pattern: classRelation.relation.lineType == 1 ? 'dashed' : 'solid',\n look: config.look,\n };\n edges.push(edge);\n }\n\n return { nodes, edges, other: {}, config, direction: this.getDirection() };\n }\n\n public setAccTitle = setAccTitle;\n public getAccTitle = getAccTitle;\n public setAccDescription = setAccDescription;\n public getAccDescription = getAccDescription;\n public setDiagramTitle = setDiagramTitle;\n public getDiagramTitle = getDiagramTitle;\n public getConfig = () => getConfig().class;\n}\n", "import { getIconStyles } from '../globalStyles.js';\n\nconst getStyles = (options) =>\n `g.classGroup text {\n fill: ${options.nodeBorder || options.classText};\n stroke: none;\n font-family: ${options.fontFamily};\n font-size: 10px;\n\n .title {\n font-weight: bolder;\n }\n\n}\n\n.nodeLabel, .edgeLabel {\n color: ${options.classText};\n}\n.edgeLabel .label rect {\n fill: ${options.mainBkg};\n}\n.label text {\n fill: ${options.classText};\n}\n\n.labelBkg {\n background: ${options.mainBkg};\n}\n.edgeLabel .label span {\n background: ${options.mainBkg};\n}\n\n.classTitle {\n font-weight: bolder;\n}\n.node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n stroke-width: 1px;\n }\n\n\n.divider {\n stroke: ${options.nodeBorder};\n stroke-width: 1;\n}\n\ng.clickable {\n cursor: pointer;\n}\n\ng.classGroup rect {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n}\n\ng.classGroup line {\n stroke: ${options.nodeBorder};\n stroke-width: 1;\n}\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${options.mainBkg};\n opacity: 0.5;\n}\n\n.classLabel .label {\n fill: ${options.nodeBorder};\n font-size: 10px;\n}\n\n.relation {\n stroke: ${options.lineColor};\n stroke-width: 1;\n fill: none;\n}\n\n.dashed-line{\n stroke-dasharray: 3;\n}\n\n.dotted-line{\n stroke-dasharray: 1 2;\n}\n\n#compositionStart, .composition {\n fill: ${options.lineColor} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#compositionEnd, .composition {\n fill: ${options.lineColor} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${options.lineColor} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ${options.lineColor} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionStart, .extension {\n fill: transparent !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#extensionEnd, .extension {\n fill: transparent !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationStart, .aggregation {\n fill: transparent !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#aggregationEnd, .aggregation {\n fill: transparent !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopStart, .lollipop {\n fill: ${options.mainBkg} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n#lollipopEnd, .lollipop {\n fill: ${options.mainBkg} !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n}\n\n.edgeTerminals {\n font-size: 11px;\n line-height: initial;\n}\n\n.classTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n}\n ${getIconStyles()}\n`;\n\nexport default getStyles;\n", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport type { DiagramStyleClassDef } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport { getDiagramElement } from '../../rendering-util/insertElementsForSize.js';\nimport { getRegisteredLayoutAlgorithm, render } from '../../rendering-util/render.js';\nimport { setupViewPortForSVG } from '../../rendering-util/setupViewPortForSVG.js';\nimport type { LayoutData } from '../../rendering-util/types.js';\nimport utils from '../../utils.js';\n\n/**\n * Get the direction from the statement items.\n * Look through all of the documents (docs) in the parsedItems\n * Because is a _document_ direction, the default direction is not necessarily the same as the overall default _diagram_ direction.\n * @param parsedItem - the parsed statement item to look through\n * @param defaultDir - the direction to use if none is found\n * @returns The direction to use\n */\nexport const getDir = (parsedItem: any, defaultDir = 'TB') => {\n if (!parsedItem.doc) {\n return defaultDir;\n }\n\n let dir = defaultDir;\n\n for (const parsedItemDoc of parsedItem.doc) {\n if (parsedItemDoc.stmt === 'dir') {\n dir = parsedItemDoc.value;\n }\n }\n\n return dir;\n};\n\nexport const getClasses = function (\n text: string,\n diagramObj: any\n): Map {\n return diagramObj.db.getClasses();\n};\n\nexport const draw = async function (text: string, id: string, _version: string, diag: any) {\n log.info('REF0:');\n log.info('Drawing class diagram (v3)', id);\n const { securityLevel, state: conf, layout } = getConfig();\n // Extracting the data from the parsed structure into a more usable form\n // Not related to the refactoring, but this is the first step in the rendering process\n // diag.db.extract(diag.db.getRootDocV2());\n\n // The getData method provided in all supported diagrams is used to extract the data from the parsed structure\n // into the Layout data format\n const data4Layout = diag.db.getData() as LayoutData;\n\n // Create the root SVG - the element is the div containing the SVG element\n const svg = getDiagramElement(id, securityLevel);\n\n data4Layout.type = diag.type;\n data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(layout);\n\n data4Layout.nodeSpacing = conf?.nodeSpacing || 50;\n data4Layout.rankSpacing = conf?.rankSpacing || 50;\n data4Layout.markers = ['aggregation', 'extension', 'composition', 'dependency', 'lollipop'];\n data4Layout.diagramId = id;\n await render(data4Layout, svg);\n const padding = 8;\n utils.insertTitle(\n svg,\n 'classDiagramTitleText',\n conf?.titleTopMargin ?? 25,\n diag.db.getDiagramTitle()\n );\n\n setupViewPortForSVG(svg, padding, 'classDiagram', conf?.useMaxWidth ?? true);\n};\n\nexport default {\n getClasses,\n draw,\n getDir,\n};\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\n// @ts-ignore: JISON doesn't support types\nimport parser from './parser/classDiagram.jison';\nimport { ClassDB } from './classDb.js';\nimport styles from './styles.js';\nimport renderer from './classRenderer-v3-unified.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n get db() {\n return new ClassDB();\n },\n renderer,\n styles,\n init: (cnf) => {\n if (!cnf.class) {\n cnf.class = {};\n }\n cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n },\n};\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\n// @ts-ignore: JISON doesn't support types\nimport parser from './parser/classDiagram.jison';\nimport { ClassDB } from './classDb.js';\nimport styles from './styles.js';\nimport renderer from './classRenderer-v3-unified.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n get db() {\n return new ClassDB();\n },\n renderer,\n styles,\n init: (cnf) => {\n if (!cnf.class) {\n cnf.class = {};\n }\n cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n },\n};\n", "/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,2],$V1=[1,3],$V2=[1,4],$V3=[2,4],$V4=[1,9],$V5=[1,11],$V6=[1,16],$V7=[1,17],$V8=[1,18],$V9=[1,19],$Va=[1,33],$Vb=[1,20],$Vc=[1,21],$Vd=[1,22],$Ve=[1,23],$Vf=[1,24],$Vg=[1,26],$Vh=[1,27],$Vi=[1,28],$Vj=[1,29],$Vk=[1,30],$Vl=[1,31],$Vm=[1,32],$Vn=[1,35],$Vo=[1,36],$Vp=[1,37],$Vq=[1,38],$Vr=[1,34],$Vs=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],$Vt=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,39,40,41,45,48,51,52,53,54,57],$Vu=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"SPACE\":4,\"NL\":5,\"SD\":6,\"document\":7,\"line\":8,\"statement\":9,\"classDefStatement\":10,\"styleStatement\":11,\"cssClassStatement\":12,\"idStatement\":13,\"DESCR\":14,\"-->\":15,\"HIDE_EMPTY\":16,\"scale\":17,\"WIDTH\":18,\"COMPOSIT_STATE\":19,\"STRUCT_START\":20,\"STRUCT_STOP\":21,\"STATE_DESCR\":22,\"AS\":23,\"ID\":24,\"FORK\":25,\"JOIN\":26,\"CHOICE\":27,\"CONCURRENT\":28,\"note\":29,\"notePosition\":30,\"NOTE_TEXT\":31,\"direction\":32,\"acc_title\":33,\"acc_title_value\":34,\"acc_descr\":35,\"acc_descr_value\":36,\"acc_descr_multiline_value\":37,\"CLICK\":38,\"STRING\":39,\"HREF\":40,\"classDef\":41,\"CLASSDEF_ID\":42,\"CLASSDEF_STYLEOPTS\":43,\"DEFAULT\":44,\"style\":45,\"STYLE_IDS\":46,\"STYLEDEF_STYLEOPTS\":47,\"class\":48,\"CLASSENTITY_IDS\":49,\"STYLECLASS\":50,\"direction_tb\":51,\"direction_bt\":52,\"direction_rl\":53,\"direction_lr\":54,\"eol\":55,\";\":56,\"EDGE_STATE\":57,\"STYLE_SEPARATOR\":58,\"left_of\":59,\"right_of\":60,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"SPACE\",5:\"NL\",6:\"SD\",14:\"DESCR\",15:\"-->\",16:\"HIDE_EMPTY\",17:\"scale\",18:\"WIDTH\",19:\"COMPOSIT_STATE\",20:\"STRUCT_START\",21:\"STRUCT_STOP\",22:\"STATE_DESCR\",23:\"AS\",24:\"ID\",25:\"FORK\",26:\"JOIN\",27:\"CHOICE\",28:\"CONCURRENT\",29:\"note\",31:\"NOTE_TEXT\",33:\"acc_title\",34:\"acc_title_value\",35:\"acc_descr\",36:\"acc_descr_value\",37:\"acc_descr_multiline_value\",38:\"CLICK\",39:\"STRING\",40:\"HREF\",41:\"classDef\",42:\"CLASSDEF_ID\",43:\"CLASSDEF_STYLEOPTS\",44:\"DEFAULT\",45:\"style\",46:\"STYLE_IDS\",47:\"STYLEDEF_STYLEOPTS\",48:\"class\",49:\"CLASSENTITY_IDS\",50:\"STYLECLASS\",51:\"direction_tb\",52:\"direction_bt\",53:\"direction_rl\",54:\"direction_lr\",56:\";\",57:\"EDGE_STATE\",58:\"STYLE_SEPARATOR\",59:\"left_of\",60:\"right_of\"},\nproductions_: [0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[9,5],[9,5],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[55,1],[55,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 3:\n /* console.log('--> Root document', $$[$0]); */ yy.setRootDoc($$[$0]); return $$[$0]; \nbreak;\ncase 4:\n /*console.log('empty document'); */ this.$ = [] \nbreak;\ncase 5:\n\n if($$[$0] !='nl'){\n /* console.log(' document: 1: ', $$[$0-1], ' pushing 2: ', $$[$0]); */\n $$[$0-1].push($$[$0]); this.$ = $$[$0-1]\n }\n /* console.log('Got document',$$[$0-1], $$[$0]); */\n \nbreak;\ncase 6: case 7:\n this.$ = $$[$0] \nbreak;\ncase 8:\n this.$='nl';\nbreak;\ncase 12:\n /* console.log('got id', $$[$0]); */\n this.$=$$[$0];\n\t \nbreak;\ncase 13:\n\n const stateStmt = $$[$0-1];\n stateStmt.description = yy.trimColon($$[$0]);\n this.$ = stateStmt;\n\t \nbreak;\ncase 14:\n\n /* console.info('got ids: 1: ', $$[$0-2], ' 2:', $$[$0-1],' 3: ', $$[$0]); */\n // console.log(' idStatement --> idStatement : state1 =', $$[$0-2], ' state2 =', $$[$0]);\n this.$={ stmt: 'relation', state1: $$[$0-2], state2: $$[$0]};\n \nbreak;\ncase 15:\n\n const relDescription = yy.trimColon($$[$0]);\n /* console.log(' idStatement --> idStatement DESCR : state1 =', $$[$0-3], ' state2stmt =', $$[$0-1], ' description: ', relDescription); */\n this.$={ stmt: 'relation', state1: $$[$0-3], state2: $$[$0-1], description: relDescription};\n \nbreak;\ncase 19:\n\n // console.log('Adding document for state without id ', $$[$0-3]);\n this.$={ stmt: 'state', id: $$[$0-3], type: 'default', description: '', doc: $$[$0-1] }\n \nbreak;\ncase 20:\n\n var id=$$[$0];\n var description = $$[$0-2].trim();\n if($$[$0].match(':')){\n var parts = $$[$0].split(':');\n id=parts[0];\n description = [description, parts[1]];\n }\n this.$={stmt: 'state', id: id, type: 'default', description: description};\n\n \nbreak;\ncase 21:\n\n // console.log('state with id ', $$[$0-3],' document = ', $$[$0-1], );\n this.$={ stmt: 'state', id: $$[$0-3], type: 'default', description: $$[$0-5], doc: $$[$0-1] }\n \nbreak;\ncase 22:\n\n this.$={ stmt: 'state', id: $$[$0], type: 'fork' }\n \nbreak;\ncase 23:\n\n this.$={ stmt: 'state', id: $$[$0], type: 'join' }\n \nbreak;\ncase 24:\n\n this.$={ stmt: 'state', id: $$[$0], type: 'choice' }\n \nbreak;\ncase 25:\n\n this.$={ stmt: 'state', id: yy.getDividerId(), type: 'divider' }\n \nbreak;\ncase 26:\n\n /* console.warn('got NOTE, position: ', $$[$0-2].trim(), 'id = ', $$[$0-1].trim(), 'note: ', $$[$0]);*/\n this.$={ stmt: 'state', id: $$[$0-1].trim(), note:{position: $$[$0-2].trim(), text: $$[$0].trim()}};\n \nbreak;\ncase 29:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 30: case 31:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 32:\n\n this.$ = {\n stmt: \"click\",\n id: $$[$0-3],\n url: $$[$0-2],\n tooltip: $$[$0-1]\n };\n \nbreak;\ncase 33:\n\n this.$ = {\n stmt: \"click\",\n id: $$[$0-3],\n url: $$[$0-1],\n tooltip: \"\"\n };\n \nbreak;\ncase 34: case 35:\n\n this.$ = { stmt: 'classDef', id: $$[$0-1].trim(), classes: $$[$0].trim() };\n \nbreak;\ncase 36:\n\n this.$ = { stmt: 'style', id: $$[$0-1].trim(), styleClass: $$[$0].trim() };\n \nbreak;\ncase 37:\n\n //console.log('apply class: id(s): ',$$[$0-1], ' style class: ', $$[$0]);\n this.$={ stmt: 'applyClass', id: $$[$0-1].trim(), styleClass: $$[$0].trim() };\n \nbreak;\ncase 38:\n yy.setDirection('TB');this.$={stmt:'dir', value:'TB'};\nbreak;\ncase 39:\n yy.setDirection('BT');this.$={stmt:'dir', value:'BT'};\nbreak;\ncase 40:\n yy.setDirection('RL'); this.$={stmt:'dir', value:'RL'};\nbreak;\ncase 41:\n yy.setDirection('LR');this.$={stmt:'dir', value:'LR'};\nbreak;\ncase 44: case 45:\n /* console.log('idStatement id: ', $$[$0]); */\n this.$={ stmt: 'state', id: $$[$0].trim(), type: 'default', description: '' };\n \nbreak;\ncase 46:\n /*console.log('idStatement ID STYLE_SEPARATOR ID'); */\n this.$={ stmt: 'state', id: $$[$0-2].trim(), classes: [$$[$0].trim()], type: 'default', description: '' };\n \nbreak;\ncase 47:\n /*console.log('idStatement EDGE_STATE STYLE_SEPARATOR ID'); */\n this.$={ stmt: 'state', id: $$[$0-2].trim(), classes: [$$[$0].trim()], type: 'default', description: '' };\n \nbreak;\n}\n},\ntable: [{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,16,17,19,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],$V3,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:$V4,5:$V5,8:8,9:10,10:12,11:13,12:14,13:15,16:$V6,17:$V7,19:$V8,22:$V9,24:$Va,25:$Vb,26:$Vc,27:$Vd,28:$Ve,29:$Vf,32:25,33:$Vg,35:$Vh,37:$Vi,38:$Vj,41:$Vk,45:$Vl,48:$Vm,51:$Vn,52:$Vo,53:$Vp,54:$Vq,57:$Vr},o($Vs,[2,5]),{9:39,10:12,11:13,12:14,13:15,16:$V6,17:$V7,19:$V8,22:$V9,24:$Va,25:$Vb,26:$Vc,27:$Vd,28:$Ve,29:$Vf,32:25,33:$Vg,35:$Vh,37:$Vi,38:$Vj,41:$Vk,45:$Vl,48:$Vm,51:$Vn,52:$Vo,53:$Vp,54:$Vq,57:$Vr},o($Vs,[2,7]),o($Vs,[2,8]),o($Vs,[2,9]),o($Vs,[2,10]),o($Vs,[2,11]),o($Vs,[2,12],{14:[1,40],15:[1,41]}),o($Vs,[2,16]),{18:[1,42]},o($Vs,[2,18],{20:[1,43]}),{23:[1,44]},o($Vs,[2,22]),o($Vs,[2,23]),o($Vs,[2,24]),o($Vs,[2,25]),{30:45,31:[1,46],59:[1,47],60:[1,48]},o($Vs,[2,28]),{34:[1,49]},{36:[1,50]},o($Vs,[2,31]),{13:51,24:$Va,57:$Vr},{42:[1,52],44:[1,53]},{46:[1,54]},{49:[1,55]},o($Vt,[2,44],{58:[1,56]}),o($Vt,[2,45],{58:[1,57]}),o($Vs,[2,38]),o($Vs,[2,39]),o($Vs,[2,40]),o($Vs,[2,41]),o($Vs,[2,6]),o($Vs,[2,13]),{13:58,24:$Va,57:$Vr},o($Vs,[2,17]),o($Vu,$V3,{7:59}),{24:[1,60]},{24:[1,61]},{23:[1,62]},{24:[2,48]},{24:[2,49]},o($Vs,[2,29]),o($Vs,[2,30]),{39:[1,63],40:[1,64]},{43:[1,65]},{43:[1,66]},{47:[1,67]},{50:[1,68]},{24:[1,69]},{24:[1,70]},o($Vs,[2,14],{14:[1,71]}),{4:$V4,5:$V5,8:8,9:10,10:12,11:13,12:14,13:15,16:$V6,17:$V7,19:$V8,21:[1,72],22:$V9,24:$Va,25:$Vb,26:$Vc,27:$Vd,28:$Ve,29:$Vf,32:25,33:$Vg,35:$Vh,37:$Vi,38:$Vj,41:$Vk,45:$Vl,48:$Vm,51:$Vn,52:$Vo,53:$Vp,54:$Vq,57:$Vr},o($Vs,[2,20],{20:[1,73]}),{31:[1,74]},{24:[1,75]},{39:[1,76]},{39:[1,77]},o($Vs,[2,34]),o($Vs,[2,35]),o($Vs,[2,36]),o($Vs,[2,37]),o($Vt,[2,46]),o($Vt,[2,47]),o($Vs,[2,15]),o($Vs,[2,19]),o($Vu,$V3,{7:78}),o($Vs,[2,26]),o($Vs,[2,27]),{5:[1,79]},{5:[1,80]},{4:$V4,5:$V5,8:8,9:10,10:12,11:13,12:14,13:15,16:$V6,17:$V7,19:$V8,21:[1,81],22:$V9,24:$Va,25:$Vb,26:$Vc,27:$Vd,28:$Ve,29:$Vf,32:25,33:$Vg,35:$Vh,37:$Vi,38:$Vj,41:$Vk,45:$Vl,48:$Vm,51:$Vn,52:$Vo,53:$Vp,54:$Vq,57:$Vr},o($Vs,[2,32]),o($Vs,[2,33]),o($Vs,[2,21])],\ndefaultActions: {5:[2,1],6:[2,2],47:[2,48],48:[2,49]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// 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.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n 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(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:return 38;\nbreak;\ncase 1:return 40;\nbreak;\ncase 2:return 39; \nbreak;\ncase 3:return 44;\nbreak;\ncase 4:return 51;\nbreak;\ncase 5:return 52;\nbreak;\ncase 6:return 53;\nbreak;\ncase 7:return 54;\nbreak;\ncase 8:/* skip comments */\nbreak;\ncase 9:/* skip comments */{ /*console.log('Crap after close');*/ }\nbreak;\ncase 10:return 5;\nbreak;\ncase 11:/* skip all whitespace */\nbreak;\ncase 12:/* skip same-line whitespace */\nbreak;\ncase 13:/* skip comments */\nbreak;\ncase 14:/* skip comments */\nbreak;\ncase 15: this.pushState('SCALE'); /* console.log('Got scale', yy_.yytext);*/ return 17; \nbreak;\ncase 16:return 18;\nbreak;\ncase 17: this.popState(); \nbreak;\ncase 18: this.begin(\"acc_title\");return 33; \nbreak;\ncase 19: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 20: this.begin(\"acc_descr\");return 35; \nbreak;\ncase 21: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 22: this.begin(\"acc_descr_multiline\"); \nbreak;\ncase 23: this.popState(); \nbreak;\ncase 24:return \"acc_descr_multiline_value\";\nbreak;\ncase 25: this.pushState('CLASSDEF'); return 41; \nbreak;\ncase 26: this.popState(); this.pushState('CLASSDEFID'); return 'DEFAULT_CLASSDEF_ID' \nbreak;\ncase 27: this.popState(); this.pushState('CLASSDEFID'); return 42 \nbreak;\ncase 28: this.popState(); return 43 \nbreak;\ncase 29: this.pushState('CLASS'); return 48; \nbreak;\ncase 30: this.popState(); this.pushState('CLASS_STYLE'); return 49 \nbreak;\ncase 31: this.popState(); return 50 \nbreak;\ncase 32: this.pushState('STYLE'); return 45; \nbreak;\ncase 33: this.popState(); this.pushState('STYLEDEF_STYLES'); return 46 \nbreak;\ncase 34: this.popState(); return 47 \nbreak;\ncase 35: this.pushState('SCALE'); /* console.log('Got scale', yy_.yytext);*/ return 17; \nbreak;\ncase 36:return 18;\nbreak;\ncase 37:this.popState();\nbreak;\ncase 38: /* console.log('Starting STATE '); */ this.pushState('STATE'); \nbreak;\ncase 39:this.popState();yy_.yytext=yy_.yytext.slice(0,-8).trim(); /*console.warn('Fork Fork: ',yy_.yytext);*/return 25;\nbreak;\ncase 40:this.popState();yy_.yytext=yy_.yytext.slice(0,-8).trim();/*console.warn('Fork Join: ',yy_.yytext);*/return 26;\nbreak;\ncase 41:this.popState();yy_.yytext=yy_.yytext.slice(0,-10).trim();/*console.warn('Fork Join: ',yy_.yytext);*/return 27;\nbreak;\ncase 42:this.popState();yy_.yytext=yy_.yytext.slice(0,-8).trim();/*console.warn('Fork Fork: ',yy_.yytext);*/return 25;\nbreak;\ncase 43:this.popState();yy_.yytext=yy_.yytext.slice(0,-8).trim();/*console.warn('Fork Join: ',yy_.yytext);*/return 26;\nbreak;\ncase 44:this.popState();yy_.yytext=yy_.yytext.slice(0,-10).trim();/*console.warn('Fork Join: ',yy_.yytext);*/return 27;\nbreak;\ncase 45: return 51;\nbreak;\ncase 46: return 52;\nbreak;\ncase 47: return 53;\nbreak;\ncase 48: return 54;\nbreak;\ncase 49: /* console.log('Starting STATE_STRING'); */ this.pushState(\"STATE_STRING\"); \nbreak;\ncase 50: this.pushState('STATE_ID'); /* console.log('pushState(STATE_ID)'); */ return \"AS\"; \nbreak;\ncase 51: this.popState(); /* console.log('STATE_ID', yy_.yytext); */ return \"ID\"; \nbreak;\ncase 52: this.popState(); \nbreak;\ncase 53: /* console.log('Long description:', yy_.yytext); */ return \"STATE_DESCR\"; \nbreak;\ncase 54: /* console.log('COMPOSIT_STATE', yy_.yytext); */ return 19; \nbreak;\ncase 55: this.popState(); \nbreak;\ncase 56: this.popState(); this.pushState('struct'); /* console.log('begin struct', yy_.yytext); */ return 20; \nbreak;\ncase 57:/* skip comments inside state*/\nbreak;\ncase 58: /*console.log('Ending struct');*/ this.popState(); return 21;\nbreak;\ncase 59:/* nothing */\nbreak;\ncase 60: this.begin('NOTE'); return 29; \nbreak;\ncase 61: this.popState(); this.pushState('NOTE_ID'); return 59; \nbreak;\ncase 62: this.popState(); this.pushState('NOTE_ID'); return 60; \nbreak;\ncase 63: this.popState(); this.pushState('FLOATING_NOTE'); \nbreak;\ncase 64: this.popState(); this.pushState('FLOATING_NOTE_ID'); return \"AS\"; \nbreak;\ncase 65:/**/\nbreak;\ncase 66: /* console.log('Floating note text: ', yy_.yytext); */ return \"NOTE_TEXT\"; \nbreak;\ncase 67: this.popState(); /* console.log('Floating note ID', yy_.yytext);*/ return \"ID\"; \nbreak;\ncase 68: this.popState(); this.pushState('NOTE_TEXT'); /*console.log('Got ID for note', yy_.yytext);*/ return 24; \nbreak;\ncase 69: this.popState(); /* console.log('Got NOTE_TEXT for note',yy_.yytext);*/yy_.yytext = yy_.yytext.substr(2).trim(); return 31; \nbreak;\ncase 70: this.popState(); /* console.log('Got NOTE_TEXT for note',yy_.yytext);*/yy_.yytext = yy_.yytext.slice(0,-8).trim(); return 31; \nbreak;\ncase 71: /* console.log('Got state diagram', yy_.yytext,'#'); */ return 6; \nbreak;\ncase 72: /* console.log('Got state diagram', yy_.yytext,'#'); */ return 6; \nbreak;\ncase 73: /* console.log('HIDE_EMPTY', yy_.yytext,'#'); */ return 16; \nbreak;\ncase 74: /* console.log('EDGE_STATE=',yy_.yytext); */ return 57; \nbreak;\ncase 75: /* console.log('=>ID=',yy_.yytext); */ return 24; \nbreak;\ncase 76: yy_.yytext = yy_.yytext.trim(); /* console.log('Descr = ', yy_.yytext); */ return 14; \nbreak;\ncase 77:return 15;\nbreak;\ncase 78:return 28;\nbreak;\ncase 79:return 58;\nbreak;\ncase 80:return 5;\nbreak;\ncase 81:return 'INVALID';\nbreak;\n}\n},\nrules: [/^(?:click\\b)/i,/^(?:href\\b)/i,/^(?:\"[^\"]*\")/i,/^(?:default\\b)/i,/^(?:.*direction\\s+TB[^\\n]*)/i,/^(?:.*direction\\s+BT[^\\n]*)/i,/^(?:.*direction\\s+RL[^\\n]*)/i,/^(?:.*direction\\s+LR[^\\n]*)/i,/^(?:%%(?!\\{)[^\\n]*)/i,/^(?:[^\\}]%%[^\\n]*)/i,/^(?:[\\n]+)/i,/^(?:[\\s]+)/i,/^(?:((?!\\n)\\s)+)/i,/^(?:#[^\\n]*)/i,/^(?:%[^\\n]*)/i,/^(?:scale\\s+)/i,/^(?:\\d+)/i,/^(?:\\s+width\\b)/i,/^(?:accTitle\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*\\{\\s*)/i,/^(?:[\\}])/i,/^(?:[^\\}]*)/i,/^(?:classDef\\s+)/i,/^(?:DEFAULT\\s+)/i,/^(?:\\w+\\s+)/i,/^(?:[^\\n]*)/i,/^(?:class\\s+)/i,/^(?:(\\w+)+((,\\s*\\w+)*))/i,/^(?:[^\\n]*)/i,/^(?:style\\s+)/i,/^(?:[\\w,]+\\s+)/i,/^(?:[^\\n]*)/i,/^(?:scale\\s+)/i,/^(?:\\d+)/i,/^(?:\\s+width\\b)/i,/^(?:state\\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\\[\\[fork\\]\\])/i,/^(?:.*\\[\\[join\\]\\])/i,/^(?:.*\\[\\[choice\\]\\])/i,/^(?:.*direction\\s+TB[^\\n]*)/i,/^(?:.*direction\\s+BT[^\\n]*)/i,/^(?:.*direction\\s+RL[^\\n]*)/i,/^(?:.*direction\\s+LR[^\\n]*)/i,/^(?:[\"])/i,/^(?:\\s*as\\s+)/i,/^(?:[^\\n\\{]*)/i,/^(?:[\"])/i,/^(?:[^\"]*)/i,/^(?:[^\\n\\s\\{]+)/i,/^(?:\\n)/i,/^(?:\\{)/i,/^(?:%%(?!\\{)[^\\n]*)/i,/^(?:\\})/i,/^(?:[\\n])/i,/^(?:note\\s+)/i,/^(?:left of\\b)/i,/^(?:right of\\b)/i,/^(?:\")/i,/^(?:\\s*as\\s*)/i,/^(?:[\"])/i,/^(?:[^\"]*)/i,/^(?:[^\\n]*)/i,/^(?:\\s*[^:\\n\\s\\-]+)/i,/^(?:\\s*:[^:\\n;]+)/i,/^(?:[\\s\\S]*?end note\\b)/i,/^(?:stateDiagram\\s+)/i,/^(?:stateDiagram-v2\\s+)/i,/^(?:hide empty description\\b)/i,/^(?:\\[\\*\\])/i,/^(?:[^:\\n\\s\\-\\{]+)/i,/^(?:\\s*:[^:\\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],\nconditions: {\"LINE\":{\"rules\":[12,13],\"inclusive\":false},\"struct\":{\"rules\":[12,13,25,29,32,38,45,46,47,48,57,58,59,60,74,75,76,77,78],\"inclusive\":false},\"FLOATING_NOTE_ID\":{\"rules\":[67],\"inclusive\":false},\"FLOATING_NOTE\":{\"rules\":[64,65,66],\"inclusive\":false},\"NOTE_TEXT\":{\"rules\":[69,70],\"inclusive\":false},\"NOTE_ID\":{\"rules\":[68],\"inclusive\":false},\"NOTE\":{\"rules\":[61,62,63],\"inclusive\":false},\"STYLEDEF_STYLEOPTS\":{\"rules\":[],\"inclusive\":false},\"STYLEDEF_STYLES\":{\"rules\":[34],\"inclusive\":false},\"STYLE_IDS\":{\"rules\":[],\"inclusive\":false},\"STYLE\":{\"rules\":[33],\"inclusive\":false},\"CLASS_STYLE\":{\"rules\":[31],\"inclusive\":false},\"CLASS\":{\"rules\":[30],\"inclusive\":false},\"CLASSDEFID\":{\"rules\":[28],\"inclusive\":false},\"CLASSDEF\":{\"rules\":[26,27],\"inclusive\":false},\"acc_descr_multiline\":{\"rules\":[23,24],\"inclusive\":false},\"acc_descr\":{\"rules\":[21],\"inclusive\":false},\"acc_title\":{\"rules\":[19],\"inclusive\":false},\"SCALE\":{\"rules\":[16,17,36,37],\"inclusive\":false},\"ALIAS\":{\"rules\":[],\"inclusive\":false},\"STATE_ID\":{\"rules\":[51],\"inclusive\":false},\"STATE_STRING\":{\"rules\":[52,53],\"inclusive\":false},\"FORK_STATE\":{\"rules\":[],\"inclusive\":false},\"STATE\":{\"rules\":[12,13,39,40,41,42,43,44,49,50,54,55,56],\"inclusive\":false},\"ID\":{\"rules\":[12,13],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,18,20,22,25,29,32,35,38,56,60,71,72,73,74,75,76,77,79,80,81],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})(); \n\tparser.parser = parser;\n\texport { parser };\n\texport default parser;\n\t", "/**\n * Constants common to all State Diagram code\n */\n\n// default diagram direction\nexport const DEFAULT_DIAGRAM_DIRECTION = 'TB';\n\n// default direction for any nested documents (composites)\nexport const DEFAULT_NESTED_DOC_DIR = 'TB';\n\n// parsed statement type for a direction\nexport const STMT_DIRECTION = 'dir';\n\n// parsed statement type for a state\nexport const STMT_STATE = 'state';\n\n// parsed statement type for a root\nexport const STMT_ROOT = 'root';\n\n// parsed statement type for a relation\nexport const STMT_RELATION = 'relation';\n// parsed statement type for a classDef\nexport const STMT_CLASSDEF = 'classDef';\nexport const STMT_STYLEDEF = 'style';\n// parsed statement type for applyClass\nexport const STMT_APPLYCLASS = 'applyClass';\n\nexport const DEFAULT_STATE_TYPE = 'default';\nexport const DIVIDER_TYPE = 'divider';\n\n// Graph edge settings\nexport const G_EDGE_STYLE = 'fill:none';\nexport const G_EDGE_ARROWHEADSTYLE = 'fill: #333';\nexport const G_EDGE_LABELPOS = 'c';\nexport const G_EDGE_LABELTYPE = 'text';\nexport const G_EDGE_THICKNESS = 'normal';\n\nexport const SHAPE_STATE = 'rect';\nexport const SHAPE_STATE_WITH_DESC = 'rectWithTitle';\nexport const SHAPE_START = 'stateStart';\nexport const SHAPE_END = 'stateEnd';\nexport const SHAPE_DIVIDER = 'divider';\nexport const SHAPE_GROUP = 'roundedWithTitle';\nexport const SHAPE_NOTE = 'note';\nexport const SHAPE_NOTEGROUP = 'noteGroup';\n\n// CSS classes\nexport const CSS_DIAGRAM = 'statediagram';\nexport const CSS_STATE = 'state';\nexport const CSS_DIAGRAM_STATE = `${CSS_DIAGRAM}-${CSS_STATE}`;\nexport const CSS_EDGE = 'transition';\nexport const CSS_NOTE = 'note';\nexport const CSS_NOTE_EDGE = 'note-edge';\nexport const CSS_EDGE_NOTE_EDGE = `${CSS_EDGE} ${CSS_NOTE_EDGE}`;\nexport const CSS_DIAGRAM_NOTE = `${CSS_DIAGRAM}-${CSS_NOTE}`;\nexport const CSS_CLUSTER = 'cluster';\nexport const CSS_DIAGRAM_CLUSTER = `${CSS_DIAGRAM}-${CSS_CLUSTER}`;\nexport const CSS_CLUSTER_ALT = 'cluster-alt';\nexport const CSS_DIAGRAM_CLUSTER_ALT = `${CSS_DIAGRAM}-${CSS_CLUSTER_ALT}`;\n\nexport const PARENT = 'parent';\nexport const NOTE = 'note';\nexport const DOMID_STATE = 'state';\nexport const DOMID_TYPE_SPACER = '----';\nexport const NOTE_ID = `${DOMID_TYPE_SPACER}${NOTE}`;\nexport const PARENT_ID = `${DOMID_TYPE_SPACER}${PARENT}`;\n// --------------------------------------\n\nexport default {\n DEFAULT_DIAGRAM_DIRECTION,\n DEFAULT_NESTED_DOC_DIR,\n STMT_STATE,\n STMT_RELATION,\n STMT_CLASSDEF,\n STMT_STYLEDEF,\n STMT_APPLYCLASS,\n DEFAULT_STATE_TYPE,\n DIVIDER_TYPE,\n G_EDGE_STYLE,\n G_EDGE_ARROWHEADSTYLE,\n G_EDGE_LABELPOS,\n G_EDGE_LABELTYPE,\n G_EDGE_THICKNESS,\n CSS_EDGE,\n CSS_DIAGRAM,\n SHAPE_STATE,\n SHAPE_STATE_WITH_DESC,\n SHAPE_START,\n SHAPE_END,\n SHAPE_DIVIDER,\n SHAPE_GROUP,\n SHAPE_NOTE,\n SHAPE_NOTEGROUP,\n CSS_STATE,\n CSS_DIAGRAM_STATE,\n CSS_NOTE,\n CSS_NOTE_EDGE,\n CSS_EDGE_NOTE_EDGE,\n CSS_DIAGRAM_NOTE,\n CSS_CLUSTER,\n CSS_DIAGRAM_CLUSTER,\n CSS_CLUSTER_ALT,\n CSS_DIAGRAM_CLUSTER_ALT,\n PARENT,\n NOTE,\n DOMID_STATE,\n DOMID_TYPE_SPACER,\n NOTE_ID,\n PARENT_ID,\n};\n", "import type { MermaidConfig } from '../../config.type.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { log } from '../../logger.js';\nimport common from '../common/common.js';\nimport {\n CSS_DIAGRAM_CLUSTER,\n CSS_DIAGRAM_CLUSTER_ALT,\n CSS_DIAGRAM_NOTE,\n CSS_DIAGRAM_STATE,\n CSS_EDGE,\n CSS_EDGE_NOTE_EDGE,\n DEFAULT_NESTED_DOC_DIR,\n DEFAULT_STATE_TYPE,\n DIVIDER_TYPE,\n DOMID_STATE,\n DOMID_TYPE_SPACER,\n G_EDGE_ARROWHEADSTYLE,\n G_EDGE_LABELPOS,\n G_EDGE_LABELTYPE,\n G_EDGE_STYLE,\n G_EDGE_THICKNESS,\n NOTE,\n NOTE_ID,\n PARENT,\n PARENT_ID,\n SHAPE_DIVIDER,\n SHAPE_END,\n SHAPE_GROUP,\n SHAPE_NOTE,\n SHAPE_NOTEGROUP,\n SHAPE_START,\n SHAPE_STATE,\n SHAPE_STATE_WITH_DESC,\n STMT_RELATION,\n STMT_STATE,\n} from './stateCommon.js';\nimport type { Edge, NodeData, StateStmt, Stmt, StyleClass } from './stateDb.js';\n\n// List of nodes created from the parsed diagram statement items\nconst nodeDb = new Map();\n\nlet graphItemCount = 0; // used to construct ids, etc.\n\n/**\n * Create a standard string for the dom ID of an item.\n * If a type is given, insert that before the counter, preceded by the type spacer\n *\n */\nexport function stateDomId(\n itemId = '',\n counter = 0,\n type: string | null = '',\n typeSpacer = DOMID_TYPE_SPACER\n) {\n const typeStr = type !== null && type.length > 0 ? `${typeSpacer}${type}` : '';\n return `${DOMID_STATE}-${itemId}${typeStr}-${counter}`;\n}\n\nconst setupDoc = (\n parentParsedItem: StateStmt | undefined,\n doc: Stmt[],\n diagramStates: Map,\n nodes: NodeData[],\n edges: Edge[],\n altFlag: boolean,\n look: MermaidConfig['look'],\n classes: Map\n) => {\n // graphItemCount = 0;\n log.trace('items', doc);\n doc.forEach((item) => {\n switch (item.stmt) {\n case STMT_STATE:\n dataFetcher(parentParsedItem, item, diagramStates, nodes, edges, altFlag, look, classes);\n break;\n case DEFAULT_STATE_TYPE:\n dataFetcher(parentParsedItem, item, diagramStates, nodes, edges, altFlag, look, classes);\n break;\n case STMT_RELATION:\n {\n dataFetcher(\n parentParsedItem,\n item.state1,\n diagramStates,\n nodes,\n edges,\n altFlag,\n look,\n classes\n );\n dataFetcher(\n parentParsedItem,\n item.state2,\n diagramStates,\n nodes,\n edges,\n altFlag,\n look,\n classes\n );\n const edgeData = {\n id: 'edge' + graphItemCount,\n start: item.state1.id,\n end: item.state2.id,\n arrowhead: 'normal',\n arrowTypeEnd: 'arrow_barb',\n style: G_EDGE_STYLE,\n labelStyle: '',\n label: common.sanitizeText(item.description ?? '', getConfig()),\n arrowheadStyle: G_EDGE_ARROWHEADSTYLE,\n labelpos: G_EDGE_LABELPOS,\n labelType: G_EDGE_LABELTYPE,\n thickness: G_EDGE_THICKNESS,\n classes: CSS_EDGE,\n look,\n };\n edges.push(edgeData);\n graphItemCount++;\n }\n break;\n }\n });\n};\n\n/**\n * Get the direction from the statement items.\n * Look through all of the documents (docs) in the parsedItems\n * Because is a _document_ direction, the default direction is not necessarily the same as the overall default _diagram_ direction.\n * @param parsedItem - the parsed statement item to look through\n * @param defaultDir - the direction to use if none is found\n */\nconst getDir = (parsedItem: { doc?: Stmt[] }, defaultDir = DEFAULT_NESTED_DOC_DIR) => {\n let dir = defaultDir;\n if (parsedItem.doc) {\n for (const parsedItemDoc of parsedItem.doc) {\n if (parsedItemDoc.stmt === 'dir') {\n dir = parsedItemDoc.value;\n }\n }\n }\n return dir;\n};\n\nfunction insertOrUpdateNode(\n nodes: NodeData[],\n nodeData: NodeData,\n classes: Map\n) {\n if (!nodeData.id || nodeData.id === '' || nodeData.id === '') {\n return;\n }\n\n //Populate node style attributes if nodeData has classes defined\n if (nodeData.cssClasses) {\n if (!Array.isArray(nodeData.cssCompiledStyles)) {\n nodeData.cssCompiledStyles = [];\n }\n\n nodeData.cssClasses.split(' ').forEach((cssClass) => {\n const classDef = classes.get(cssClass);\n if (classDef) {\n nodeData.cssCompiledStyles = [...(nodeData.cssCompiledStyles ?? []), ...classDef.styles];\n }\n });\n }\n const existingNodeData = nodes.find((node) => node.id === nodeData.id);\n if (existingNodeData) {\n //update the existing nodeData\n Object.assign(existingNodeData, nodeData);\n } else {\n nodes.push(nodeData);\n }\n}\n/**\n * Get classes from the db for the info item.\n * If there aren't any or if dbInfoItem isn't defined, return an empty string.\n * Else create 1 string from the list of classes found\n *\n */\nfunction getClassesFromDbInfo(dbInfoItem?: StateStmt): string {\n return dbInfoItem?.classes?.join(' ') ?? '';\n}\n\nfunction getStylesFromDbInfo(dbInfoItem?: StateStmt): string[] {\n return dbInfoItem?.styles ?? [];\n}\n\nexport const dataFetcher = (\n parent: StateStmt | undefined,\n parsedItem: StateStmt,\n diagramStates: Map,\n nodes: NodeData[],\n edges: Edge[],\n altFlag: boolean,\n look: MermaidConfig['look'],\n classes: Map\n) => {\n const itemId = parsedItem.id;\n const dbState = diagramStates.get(itemId);\n const classStr = getClassesFromDbInfo(dbState);\n const style = getStylesFromDbInfo(dbState);\n const config = getConfig();\n\n log.info('dataFetcher parsedItem', parsedItem, dbState, style);\n\n if (itemId !== 'root') {\n let shape = SHAPE_STATE;\n // The if === true / false can be removed if we can guarantee that the parsedItem.start is always a boolean\n if (parsedItem.start === true) {\n shape = SHAPE_START;\n } else if (parsedItem.start === false) {\n shape = SHAPE_END;\n }\n if (parsedItem.type !== DEFAULT_STATE_TYPE) {\n shape = parsedItem.type;\n }\n\n // Add the node to our list (nodeDb)\n if (!nodeDb.get(itemId)) {\n nodeDb.set(itemId, {\n id: itemId,\n shape,\n description: common.sanitizeText(itemId, config),\n cssClasses: `${classStr} ${CSS_DIAGRAM_STATE}`,\n cssStyles: style,\n });\n }\n\n const newNode = nodeDb.get(itemId)!;\n\n // Save data for description and group so that for instance a statement without description overwrites\n // one with description @todo TODO What does this mean? If important, add a test for it\n\n // Build of the array of description strings\n if (parsedItem.description) {\n if (Array.isArray(newNode.description)) {\n // There already is an array of strings,add to it\n newNode.shape = SHAPE_STATE_WITH_DESC;\n newNode.description.push(parsedItem.description);\n } else {\n if (newNode.description?.length && newNode.description.length > 0) {\n // if there is a description already transform it to an array\n newNode.shape = SHAPE_STATE_WITH_DESC;\n if (newNode.description === itemId) {\n // If the previous description was this, remove it\n newNode.description = [parsedItem.description];\n } else {\n newNode.description = [newNode.description, parsedItem.description];\n }\n } else {\n newNode.shape = SHAPE_STATE;\n newNode.description = parsedItem.description;\n }\n }\n newNode.description = common.sanitizeTextOrArray(newNode.description, config);\n }\n\n // If there's only 1 description entry, just use a regular state shape\n if (newNode.description?.length === 1 && newNode.shape === SHAPE_STATE_WITH_DESC) {\n if (newNode.type === 'group') {\n newNode.shape = SHAPE_GROUP;\n } else {\n newNode.shape = SHAPE_STATE;\n }\n }\n\n // group\n if (!newNode.type && parsedItem.doc) {\n log.info('Setting cluster for XCX', itemId, getDir(parsedItem));\n newNode.type = 'group';\n newNode.isGroup = true;\n newNode.dir = getDir(parsedItem);\n newNode.shape = parsedItem.type === DIVIDER_TYPE ? SHAPE_DIVIDER : SHAPE_GROUP;\n newNode.cssClasses = `${newNode.cssClasses} ${CSS_DIAGRAM_CLUSTER} ${altFlag ? CSS_DIAGRAM_CLUSTER_ALT : ''}`;\n }\n\n // This is what will be added to the graph\n const nodeData: NodeData = {\n labelStyle: '',\n shape: newNode.shape,\n label: newNode.description,\n cssClasses: newNode.cssClasses,\n cssCompiledStyles: [],\n cssStyles: newNode.cssStyles,\n id: itemId,\n dir: newNode.dir,\n domId: stateDomId(itemId, graphItemCount),\n type: newNode.type,\n isGroup: newNode.type === 'group',\n padding: 8,\n rx: 10,\n ry: 10,\n look,\n };\n\n // Clear the label for dividers who have no description\n if (nodeData.shape === SHAPE_DIVIDER) {\n nodeData.label = '';\n }\n\n if (parent && parent.id !== 'root') {\n log.trace('Setting node ', itemId, ' to be child of its parent ', parent.id);\n nodeData.parentId = parent.id;\n }\n\n nodeData.centerLabel = true;\n\n if (parsedItem.note) {\n // Todo: set random id\n const noteData: NodeData = {\n labelStyle: '',\n shape: SHAPE_NOTE,\n label: parsedItem.note.text,\n cssClasses: CSS_DIAGRAM_NOTE,\n // useHtmlLabels: false,\n cssStyles: [],\n cssCompiledStyles: [],\n id: itemId + NOTE_ID + '-' + graphItemCount,\n domId: stateDomId(itemId, graphItemCount, NOTE),\n type: newNode.type,\n isGroup: newNode.type === 'group',\n padding: config.flowchart?.padding,\n look,\n position: parsedItem.note.position,\n };\n const parentNodeId = itemId + PARENT_ID;\n const groupData = {\n labelStyle: '',\n shape: SHAPE_NOTEGROUP,\n label: parsedItem.note.text,\n cssClasses: newNode.cssClasses,\n cssStyles: [],\n id: itemId + PARENT_ID,\n domId: stateDomId(itemId, graphItemCount, PARENT),\n type: 'group',\n isGroup: true,\n padding: 16, //getConfig().flowchart.padding\n look,\n position: parsedItem.note.position,\n };\n graphItemCount++;\n\n //add parent id to groupData\n groupData.id = parentNodeId;\n //add parent id to noteData\n noteData.parentId = parentNodeId;\n //nodeData.parentId = parentNodeId;\n\n //insert groupData\n insertOrUpdateNode(nodes, groupData, classes);\n //insert noteData\n insertOrUpdateNode(nodes, noteData, classes);\n //insert nodeData\n insertOrUpdateNode(nodes, nodeData, classes);\n\n let from = itemId;\n let to = noteData.id;\n\n if (parsedItem.note.position === 'left of') {\n from = noteData.id;\n to = itemId;\n }\n\n edges.push({\n id: from + '-' + to,\n start: from,\n end: to,\n arrowhead: 'none',\n arrowTypeEnd: '',\n style: G_EDGE_STYLE,\n labelStyle: '',\n classes: CSS_EDGE_NOTE_EDGE,\n arrowheadStyle: G_EDGE_ARROWHEADSTYLE,\n labelpos: G_EDGE_LABELPOS,\n labelType: G_EDGE_LABELTYPE,\n thickness: G_EDGE_THICKNESS,\n look,\n });\n } else {\n insertOrUpdateNode(nodes, nodeData, classes);\n }\n }\n if (parsedItem.doc) {\n log.trace('Adding nodes children ');\n setupDoc(parsedItem, parsedItem.doc, diagramStates, nodes, edges, !altFlag, look, classes);\n }\n};\n\nexport const reset = () => {\n nodeDb.clear();\n graphItemCount = 0;\n};\n", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport type { DiagramStyleClassDef } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport { getDiagramElement } from '../../rendering-util/insertElementsForSize.js';\nimport { render } from '../../rendering-util/render.js';\nimport { setupViewPortForSVG } from '../../rendering-util/setupViewPortForSVG.js';\nimport type { LayoutData } from '../../rendering-util/types.js';\nimport utils from '../../utils.js';\nimport { CSS_DIAGRAM, DEFAULT_NESTED_DOC_DIR } from './stateCommon.js';\n\n/**\n * Get the direction from the statement items.\n * Look through all of the documents (docs) in the parsedItems\n * Because is a _document_ direction, the default direction is not necessarily the same as the overall default _diagram_ direction.\n * @param parsedItem - the parsed statement item to look through\n * @param defaultDir - the direction to use if none is found\n * @returns The direction to use\n */\nexport const getDir = (parsedItem: any, defaultDir = DEFAULT_NESTED_DOC_DIR) => {\n if (!parsedItem.doc) {\n return defaultDir;\n }\n\n let dir = defaultDir;\n\n for (const parsedItemDoc of parsedItem.doc) {\n if (parsedItemDoc.stmt === 'dir') {\n dir = parsedItemDoc.value;\n }\n }\n\n return dir;\n};\n\nexport const getClasses = function (\n text: string,\n diagramObj: any\n): Map {\n return diagramObj.db.getClasses();\n};\n\nexport const draw = async function (text: string, id: string, _version: string, diag: any) {\n log.info('REF0:');\n log.info('Drawing state diagram (v2)', id);\n const { securityLevel, state: conf, layout } = getConfig();\n // Extracting the data from the parsed structure into a more usable form\n // Not related to the refactoring, but this is the first step in the rendering process\n diag.db.extract(diag.db.getRootDocV2());\n\n //const DIR = getDir(diag.db.getRootDocV2());\n\n // The getData method provided in all supported diagrams is used to extract the data from the parsed structure\n // into the Layout data format\n const data4Layout = diag.db.getData() as LayoutData;\n\n // Create the root SVG - the element is the div containing the SVG element\n const svg = getDiagramElement(id, securityLevel);\n\n data4Layout.type = diag.type;\n data4Layout.layoutAlgorithm = layout;\n\n // TODO: Should we move these two to baseConfig? These types are not there in StateConfig.\n\n data4Layout.nodeSpacing = conf?.nodeSpacing || 50;\n data4Layout.rankSpacing = conf?.rankSpacing || 50;\n data4Layout.markers = ['barb'];\n data4Layout.diagramId = id;\n // console.log('REF1:', data4Layout);\n await render(data4Layout, svg);\n const padding = 8;\n\n // Inject clickable links after nodes are rendered\n try {\n const links: Map =\n typeof diag.db.getLinks === 'function' ? diag.db.getLinks() : new Map();\n\n type StateKey = string | { id: string };\n\n links.forEach((linkInfo, key: StateKey) => {\n const stateId = typeof key === 'string' ? key : typeof key?.id === 'string' ? key.id : '';\n\n if (!stateId) {\n log.warn('\u26A0\uFE0F Invalid or missing stateId from key:', JSON.stringify(key));\n return;\n }\n\n const allNodes = svg.node()?.querySelectorAll('g');\n let matchedElem: SVGGElement | undefined;\n\n allNodes?.forEach((g: SVGGElement) => {\n const text = g.textContent?.trim();\n if (text === stateId) {\n matchedElem = g;\n }\n });\n\n if (!matchedElem) {\n log.warn('\u26A0\uFE0F Could not find node matching text:', stateId);\n return;\n }\n\n const parent = matchedElem.parentNode;\n if (!parent) {\n log.warn('\u26A0\uFE0F Node has no parent, cannot wrap:', stateId);\n return;\n }\n\n const a = document.createElementNS('http://www.w3.org/2000/svg', 'a');\n const cleanedUrl = linkInfo.url.replace(/^\"+|\"+$/g, ''); // remove leading/trailing quotes\n a.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', cleanedUrl);\n a.setAttribute('target', '_blank');\n if (linkInfo.tooltip) {\n const tooltip = linkInfo.tooltip.replace(/^\"+|\"+$/g, '');\n a.setAttribute('title', tooltip);\n }\n\n parent.replaceChild(a, matchedElem);\n a.appendChild(matchedElem);\n\n log.info('\uD83D\uDD17 Wrapped node in tag for:', stateId, linkInfo.url);\n });\n } catch (err) {\n log.error('\u274C Error injecting clickable links:', err);\n }\n\n utils.insertTitle(\n svg,\n 'statediagramTitleText',\n conf?.titleTopMargin ?? 25,\n diag.db.getDiagramTitle()\n );\n setupViewPortForSVG(svg, padding, CSS_DIAGRAM, conf?.useMaxWidth ?? true);\n};\n\nexport default {\n getClasses,\n draw,\n getDir,\n};\n", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { log } from '../../logger.js';\nimport { generateId } from '../../utils.js';\nimport common from '../common/common.js';\nimport {\n clear as commonClear,\n getAccDescription,\n getAccTitle,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle,\n} from '../common/commonDb.js';\nimport { dataFetcher, reset as resetDataFetcher } from './dataFetcher.js';\nimport { getDir } from './stateRenderer-v3-unified.js';\nimport {\n DEFAULT_DIAGRAM_DIRECTION,\n DEFAULT_STATE_TYPE,\n DIVIDER_TYPE,\n STMT_APPLYCLASS,\n STMT_CLASSDEF,\n STMT_RELATION,\n STMT_ROOT,\n STMT_DIRECTION,\n STMT_STATE,\n STMT_STYLEDEF,\n} from './stateCommon.js';\nimport type { MermaidConfig } from '../../config.type.js';\n\nconst CONSTANTS = {\n START_NODE: '[*]',\n START_TYPE: 'start',\n END_NODE: '[*]',\n END_TYPE: 'end',\n COLOR_KEYWORD: 'color',\n FILL_KEYWORD: 'fill',\n BG_FILL: 'bgFill',\n STYLECLASS_SEP: ',',\n} as const;\n\ninterface BaseStmt {\n stmt:\n | 'applyClass'\n | 'classDef'\n | 'dir'\n | 'relation'\n | 'state'\n | 'style'\n | 'root'\n | 'default'\n | 'click';\n}\n\ninterface ApplyClassStmt extends BaseStmt {\n stmt: 'applyClass';\n id: string;\n styleClass: string;\n}\n\ninterface ClassDefStmt extends BaseStmt {\n stmt: 'classDef';\n id: string;\n classes: string;\n}\n\ninterface DirectionStmt extends BaseStmt {\n stmt: 'dir';\n value: 'TB' | 'BT' | 'RL' | 'LR';\n}\n\ninterface RelationStmt extends BaseStmt {\n stmt: 'relation';\n state1: StateStmt;\n state2: StateStmt;\n description?: string;\n}\n\nexport interface StateStmt extends BaseStmt {\n stmt: 'state' | 'default';\n id: string;\n type: 'default' | 'fork' | 'join' | 'choice' | 'divider' | 'start' | 'end';\n description?: string;\n descriptions?: string[];\n doc?: Stmt[];\n note?: Note;\n start?: boolean;\n classes?: string[];\n styles?: string[];\n textStyles?: string[];\n}\n\ninterface StyleStmt extends BaseStmt {\n stmt: 'style';\n id: string;\n styleClass: string;\n}\n\nexport interface RootStmt {\n id: 'root';\n stmt: 'root';\n doc?: Stmt[];\n}\n\nexport interface ClickStmt extends BaseStmt {\n stmt: 'click';\n id: string;\n url: string;\n tooltip: string;\n}\n\ninterface Note {\n position?: 'left of' | 'right of';\n text: string;\n}\n\nexport type Stmt =\n | ApplyClassStmt\n | ClassDefStmt\n | DirectionStmt\n | RelationStmt\n | StateStmt\n | StyleStmt\n | RootStmt\n | ClickStmt;\n\ninterface DiagramEdge {\n id1: string;\n id2: string;\n relationTitle?: string;\n}\n\ninterface Document {\n relations: DiagramEdge[];\n states: Map;\n documents: Record;\n}\n\nexport interface StyleClass {\n id: string;\n styles: string[];\n textStyles: string[];\n}\n\nexport interface NodeData {\n labelStyle?: string;\n shape: string;\n label?: string | string[];\n cssClasses: string;\n cssCompiledStyles?: string[];\n cssStyles: string[];\n id: string;\n dir?: string;\n domId?: string;\n type?: string;\n isGroup?: boolean;\n padding?: number;\n rx?: number;\n ry?: number;\n look?: MermaidConfig['look'];\n parentId?: string;\n centerLabel?: boolean;\n position?: string;\n description?: string | string[];\n}\n\nexport interface Edge {\n id: string;\n start: string;\n end: string;\n arrowhead: string;\n arrowTypeEnd: string;\n style: string;\n labelStyle: string;\n label?: string;\n arrowheadStyle: string;\n labelpos: string;\n labelType: string;\n thickness: string;\n classes: string;\n look: MermaidConfig['look'];\n}\n\n/**\n * Returns a new list of classes.\n * In the future, this can be replaced with a class common to all diagrams.\n * ClassDef information = \\{ id: id, styles: [], textStyles: [] \\}\n */\nconst newClassesList = (): Map => new Map();\nconst newDoc = (): Document => ({\n relations: [],\n states: new Map(),\n documents: {},\n});\nconst clone = (o: T): T => JSON.parse(JSON.stringify(o));\n\nexport class StateDB {\n private nodes: NodeData[] = [];\n private edges: Edge[] = [];\n private rootDoc: Stmt[] = [];\n private classes = newClassesList();\n private documents = { root: newDoc() };\n private currentDocument = this.documents.root;\n private startEndCount = 0;\n private dividerCnt = 0;\n private links = new Map();\n\n static readonly relationType = {\n AGGREGATION: 0,\n EXTENSION: 1,\n COMPOSITION: 2,\n DEPENDENCY: 3,\n } as const;\n\n constructor(private version: 1 | 2) {\n this.clear();\n // Bind methods used by JISON\n this.setRootDoc = this.setRootDoc.bind(this);\n this.getDividerId = this.getDividerId.bind(this);\n this.setDirection = this.setDirection.bind(this);\n this.trimColon = this.trimColon.bind(this);\n }\n\n /**\n * Convert all of the statements (stmts) that were parsed into states and relationships.\n * This is done because a state diagram may have nested sections,\n * where each section is a 'document' and has its own set of statements.\n * Ex: the section within a fork has its own statements, and incoming and outgoing statements\n * refer to the fork as a whole (document).\n * See the parser grammar: the definition of a document is a document then a 'line', where a line can be a statement.\n * This will push the statement into the list of statements for the current document.\n */\n extract(statements: Stmt[] | { doc: Stmt[] }) {\n this.clear(true);\n for (const item of Array.isArray(statements) ? statements : statements.doc) {\n switch (item.stmt) {\n case STMT_STATE:\n this.addState(item.id.trim(), item.type, item.doc, item.description, item.note);\n break;\n case STMT_RELATION:\n this.addRelation(item.state1, item.state2, item.description);\n break;\n case STMT_CLASSDEF:\n this.addStyleClass(item.id.trim(), item.classes);\n break;\n case STMT_STYLEDEF:\n this.handleStyleDef(item);\n break;\n case STMT_APPLYCLASS:\n this.setCssClass(item.id.trim(), item.styleClass);\n break;\n case 'click':\n this.addLink(item.id, item.url, item.tooltip);\n break;\n }\n }\n const diagramStates = this.getStates();\n const config = getConfig();\n\n resetDataFetcher();\n dataFetcher(\n undefined,\n this.getRootDocV2() as StateStmt,\n diagramStates,\n this.nodes,\n this.edges,\n true,\n config.look,\n this.classes\n );\n\n // Process node labels\n for (const node of this.nodes) {\n if (!Array.isArray(node.label)) {\n continue;\n }\n\n node.description = node.label.slice(1);\n if (node.isGroup && node.description.length > 0) {\n throw new Error(\n `Group nodes can only have label. Remove the additional description for node [${node.id}]`\n );\n }\n node.label = node.label[0];\n }\n }\n\n private handleStyleDef(item: StyleStmt) {\n const ids = item.id.trim().split(',');\n const styles = item.styleClass.split(',');\n\n for (const id of ids) {\n let state = this.getState(id);\n if (!state) {\n const trimmedId = id.trim();\n this.addState(trimmedId);\n state = this.getState(trimmedId);\n }\n if (state) {\n state.styles = styles.map((s) => s.replace(/;/g, '')?.trim());\n }\n }\n }\n\n setRootDoc(o: Stmt[]) {\n log.info('Setting root doc', o);\n this.rootDoc = o;\n if (this.version === 1) {\n this.extract(o);\n } else {\n this.extract(this.getRootDocV2());\n }\n }\n\n docTranslator(parent: RootStmt | StateStmt, node: Stmt, first: boolean) {\n if (node.stmt === STMT_RELATION) {\n this.docTranslator(parent, node.state1, true);\n this.docTranslator(parent, node.state2, false);\n return;\n }\n\n if (node.stmt === STMT_STATE) {\n if (node.id === CONSTANTS.START_NODE) {\n node.id = parent.id + (first ? '_start' : '_end');\n node.start = first;\n } else {\n // This is just a plain state, not a start or end\n node.id = node.id.trim();\n }\n }\n\n if ((node.stmt !== STMT_ROOT && node.stmt !== STMT_STATE) || !node.doc) {\n return;\n }\n\n const doc = [];\n // Check for concurrency\n let currentDoc = [];\n for (const stmt of node.doc) {\n if ((stmt as StateStmt).type === DIVIDER_TYPE) {\n const newNode = clone(stmt as StateStmt);\n newNode.doc = clone(currentDoc);\n doc.push(newNode);\n currentDoc = [];\n } else {\n currentDoc.push(stmt);\n }\n }\n\n // If any divider was encountered\n if (doc.length > 0 && currentDoc.length > 0) {\n const newNode = {\n stmt: STMT_STATE,\n id: generateId(),\n type: 'divider',\n doc: clone(currentDoc),\n } satisfies StateStmt;\n doc.push(clone(newNode));\n node.doc = doc;\n }\n\n node.doc.forEach((docNode) => this.docTranslator(node, docNode, true));\n }\n\n private getRootDocV2() {\n this.docTranslator(\n { id: STMT_ROOT, stmt: STMT_ROOT },\n { id: STMT_ROOT, stmt: STMT_ROOT, doc: this.rootDoc },\n true\n );\n return { id: STMT_ROOT, doc: this.rootDoc };\n }\n\n /**\n * Function called by parser when a node definition has been found.\n *\n * @param descr - description for the state. Can be a string or a list or strings\n * @param classes - class styles to apply to this state. Can be a string (1 style) or an array of styles. If it's just 1 class, convert it to an array of that 1 class.\n * @param styles - styles to apply to this state. Can be a string (1 style) or an array of styles. If it's just 1 style, convert it to an array of that 1 style.\n * @param textStyles - text styles to apply to this state. Can be a string (1 text test) or an array of text styles. If it's just 1 text style, convert it to an array of that 1 text style.\n */\n addState(\n id: string,\n type: StateStmt['type'] = DEFAULT_STATE_TYPE,\n doc: Stmt[] | undefined = undefined,\n descr: string | string[] | undefined = undefined,\n note: Note | undefined = undefined,\n classes: string | string[] | undefined = undefined,\n styles: string | string[] | undefined = undefined,\n textStyles: string | string[] | undefined = undefined\n ) {\n const trimmedId = id?.trim();\n if (!this.currentDocument.states.has(trimmedId)) {\n log.info('Adding state ', trimmedId, descr);\n this.currentDocument.states.set(trimmedId, {\n stmt: STMT_STATE,\n id: trimmedId,\n descriptions: [],\n type,\n doc,\n note,\n classes: [],\n styles: [],\n textStyles: [],\n });\n } else {\n const state = this.currentDocument.states.get(trimmedId);\n if (!state) {\n throw new Error(`State not found: ${trimmedId}`);\n }\n if (!state.doc) {\n state.doc = doc;\n }\n if (!state.type) {\n state.type = type;\n }\n }\n\n if (descr) {\n log.info('Setting state description', trimmedId, descr);\n const descriptions = Array.isArray(descr) ? descr : [descr];\n descriptions.forEach((des) => this.addDescription(trimmedId, des.trim()));\n }\n\n if (note) {\n const doc2 = this.currentDocument.states.get(trimmedId);\n if (!doc2) {\n throw new Error(`State not found: ${trimmedId}`);\n }\n doc2.note = note;\n doc2.note.text = common.sanitizeText(doc2.note.text, getConfig());\n }\n\n if (classes) {\n log.info('Setting state classes', trimmedId, classes);\n const classesList = Array.isArray(classes) ? classes : [classes];\n classesList.forEach((cssClass) => this.setCssClass(trimmedId, cssClass.trim()));\n }\n\n if (styles) {\n log.info('Setting state styles', trimmedId, styles);\n const stylesList = Array.isArray(styles) ? styles : [styles];\n stylesList.forEach((style) => this.setStyle(trimmedId, style.trim()));\n }\n\n if (textStyles) {\n log.info('Setting state styles', trimmedId, styles);\n const textStylesList = Array.isArray(textStyles) ? textStyles : [textStyles];\n textStylesList.forEach((textStyle) => this.setTextStyle(trimmedId, textStyle.trim()));\n }\n }\n\n clear(saveCommon?: boolean) {\n this.nodes = [];\n this.edges = [];\n this.documents = { root: newDoc() };\n this.currentDocument = this.documents.root;\n\n // number of start and end nodes; used to construct ids\n this.startEndCount = 0;\n this.classes = newClassesList();\n if (!saveCommon) {\n this.links = new Map(); // <-- add here\n commonClear();\n }\n }\n\n getState(id: string) {\n return this.currentDocument.states.get(id);\n }\n\n getStates() {\n return this.currentDocument.states;\n }\n\n logDocuments() {\n log.info('Documents = ', this.documents);\n }\n\n getRelations() {\n return this.currentDocument.relations;\n }\n\n /**\n * Adds a clickable link to a state.\n */\n addLink(stateId: string, url: string, tooltip: string): void {\n this.links.set(stateId, { url, tooltip });\n log.warn('Adding link', stateId, url, tooltip);\n }\n\n /**\n * Get all registered links.\n */\n getLinks(): Map {\n return this.links;\n }\n\n /**\n * If the id is a start node ( [*] ), then return a new id constructed from\n * the start node name and the current start node count.\n * else return the given id\n */\n startIdIfNeeded(id = '') {\n if (id === CONSTANTS.START_NODE) {\n this.startEndCount++;\n return `${CONSTANTS.START_TYPE}${this.startEndCount}`;\n }\n return id;\n }\n\n /**\n * If the id is a start node ( [*] ), then return the start type ('start')\n * else return the given type\n */\n startTypeIfNeeded(id = '', type: StateStmt['type'] = DEFAULT_STATE_TYPE) {\n return id === CONSTANTS.START_NODE ? CONSTANTS.START_TYPE : type;\n }\n\n /**\n * If the id is an end node ( [*] ), then return a new id constructed from\n * the end node name and the current start_end node count.\n * else return the given id\n */\n endIdIfNeeded(id = '') {\n if (id === CONSTANTS.END_NODE) {\n this.startEndCount++;\n return `${CONSTANTS.END_TYPE}${this.startEndCount}`;\n }\n return id;\n }\n\n /**\n * If the id is an end node ( [*] ), then return the end type\n * else return the given type\n *\n */\n endTypeIfNeeded(id = '', type: StateStmt['type'] = DEFAULT_STATE_TYPE) {\n return id === CONSTANTS.END_NODE ? CONSTANTS.END_TYPE : type;\n }\n\n addRelationObjs(item1: StateStmt, item2: StateStmt, relationTitle = '') {\n const id1 = this.startIdIfNeeded(item1.id.trim());\n const type1 = this.startTypeIfNeeded(item1.id.trim(), item1.type);\n const id2 = this.startIdIfNeeded(item2.id.trim());\n const type2 = this.startTypeIfNeeded(item2.id.trim(), item2.type);\n this.addState(\n id1,\n type1,\n item1.doc,\n item1.description,\n item1.note,\n item1.classes,\n item1.styles,\n item1.textStyles\n );\n this.addState(\n id2,\n type2,\n item2.doc,\n item2.description,\n item2.note,\n item2.classes,\n item2.styles,\n item2.textStyles\n );\n this.currentDocument.relations.push({\n id1,\n id2,\n relationTitle: common.sanitizeText(relationTitle, getConfig()),\n });\n }\n\n /**\n * Add a relation between two items. The items may be full objects or just the string id of a state.\n */\n addRelation(item1: string | StateStmt, item2: string | StateStmt, title?: string) {\n if (typeof item1 === 'object' && typeof item2 === 'object') {\n this.addRelationObjs(item1, item2, title);\n } else if (typeof item1 === 'string' && typeof item2 === 'string') {\n const id1 = this.startIdIfNeeded(item1.trim());\n const type1 = this.startTypeIfNeeded(item1);\n const id2 = this.endIdIfNeeded(item2.trim());\n const type2 = this.endTypeIfNeeded(item2);\n\n this.addState(id1, type1);\n this.addState(id2, type2);\n this.currentDocument.relations.push({\n id1,\n id2,\n relationTitle: title ? common.sanitizeText(title, getConfig()) : undefined,\n });\n }\n }\n\n addDescription(id: string, descr: string) {\n const theState = this.currentDocument.states.get(id);\n const _descr = descr.startsWith(':') ? descr.replace(':', '').trim() : descr;\n theState?.descriptions?.push(common.sanitizeText(_descr, getConfig()));\n }\n\n cleanupLabel(label: string) {\n return label.startsWith(':') ? label.slice(2).trim() : label.trim();\n }\n\n getDividerId() {\n this.dividerCnt++;\n return `divider-id-${this.dividerCnt}`;\n }\n\n /**\n * Called when the parser comes across a (style) class definition\n * @example classDef my-style fill:#f96;\n *\n * @param id - the id of this (style) class\n * @param styleAttributes - the string with 1 or more style attributes (each separated by a comma)\n */\n addStyleClass(id: string, styleAttributes = '') {\n // create a new style class object with this id\n if (!this.classes.has(id)) {\n this.classes.set(id, { id, styles: [], textStyles: [] });\n }\n const foundClass = this.classes.get(id);\n if (styleAttributes && foundClass) {\n styleAttributes.split(CONSTANTS.STYLECLASS_SEP).forEach((attrib) => {\n const fixedAttrib = attrib.replace(/([^;]*);/, '$1').trim();\n if (RegExp(CONSTANTS.COLOR_KEYWORD).exec(attrib)) {\n const newStyle1 = fixedAttrib.replace(CONSTANTS.FILL_KEYWORD, CONSTANTS.BG_FILL);\n const newStyle2 = newStyle1.replace(CONSTANTS.COLOR_KEYWORD, CONSTANTS.FILL_KEYWORD);\n foundClass.textStyles.push(newStyle2);\n }\n foundClass.styles.push(fixedAttrib);\n });\n }\n }\n\n getClasses() {\n return this.classes;\n }\n\n /**\n * Add a (style) class or css class to a state with the given id.\n * If the state isn't already in the list of known states, add it.\n * Might be called by parser when a style class or CSS class should be applied to a state\n *\n * @param itemIds - The id or a list of ids of the item(s) to apply the css class to\n * @param cssClassName - CSS class name\n */\n setCssClass(itemIds: string, cssClassName: string) {\n itemIds.split(',').forEach((id) => {\n let foundState = this.getState(id);\n if (!foundState) {\n const trimmedId = id.trim();\n this.addState(trimmedId);\n foundState = this.getState(trimmedId);\n }\n foundState?.classes?.push(cssClassName);\n });\n }\n\n /**\n * Add a style to a state with the given id.\n * @example style stateId fill:#f9f,stroke:#333,stroke-width:4px\n * where 'style' is the keyword\n * stateId is the id of a state\n * the rest of the string is the styleText (all of the attributes to be applied to the state)\n *\n * @param itemId - The id of item to apply the style to\n * @param styleText - the text of the attributes for the style\n */\n setStyle(itemId: string, styleText: string) {\n this.getState(itemId)?.styles?.push(styleText);\n }\n\n /**\n * Add a text style to a state with the given id\n *\n * @param itemId - The id of item to apply the css class to\n * @param cssClassName - CSS class name\n */\n setTextStyle(itemId: string, cssClassName: string) {\n this.getState(itemId)?.textStyles?.push(cssClassName);\n }\n\n /**\n * Finds the direction statement in the root document.\n * @returns the direction statement if present\n */\n private getDirectionStatement() {\n return this.rootDoc.find((doc): doc is DirectionStmt => doc.stmt === STMT_DIRECTION);\n }\n\n getDirection() {\n return this.getDirectionStatement()?.value ?? DEFAULT_DIAGRAM_DIRECTION;\n }\n\n setDirection(dir: DirectionStmt['value']) {\n const doc = this.getDirectionStatement();\n if (doc) {\n doc.value = dir;\n } else {\n this.rootDoc.unshift({ stmt: STMT_DIRECTION, value: dir });\n }\n }\n\n trimColon(str: string) {\n return str.startsWith(':') ? str.slice(1).trim() : str.trim();\n }\n\n getData() {\n const config = getConfig();\n return {\n nodes: this.nodes,\n edges: this.edges,\n other: {},\n config,\n direction: getDir(this.getRootDocV2()),\n };\n }\n\n getConfig() {\n return getConfig().state;\n }\n\n getAccTitle = getAccTitle;\n setAccTitle = setAccTitle;\n getAccDescription = getAccDescription;\n setAccDescription = setAccDescription;\n setDiagramTitle = setDiagramTitle;\n getDiagramTitle = getDiagramTitle;\n}\n", "const getStyles = (options) =>\n `\ndefs #statediagram-barbEnd {\n fill: ${options.transitionColor};\n stroke: ${options.transitionColor};\n }\ng.stateGroup text {\n fill: ${options.nodeBorder};\n stroke: none;\n font-size: 10px;\n}\ng.stateGroup text {\n fill: ${options.textColor};\n stroke: none;\n font-size: 10px;\n\n}\ng.stateGroup .state-title {\n font-weight: bolder;\n fill: ${options.stateLabelColor};\n}\n\ng.stateGroup rect {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n}\n\ng.stateGroup line {\n stroke: ${options.lineColor};\n stroke-width: 1;\n}\n\n.transition {\n stroke: ${options.transitionColor};\n stroke-width: 1;\n fill: none;\n}\n\n.stateGroup .composit {\n fill: ${options.background};\n border-bottom: 1px\n}\n\n.stateGroup .alt-composit {\n fill: #e0e0e0;\n border-bottom: 1px\n}\n\n.state-note {\n stroke: ${options.noteBorderColor};\n fill: ${options.noteBkgColor};\n\n text {\n fill: ${options.noteTextColor};\n stroke: none;\n font-size: 10px;\n }\n}\n\n.stateLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ${options.mainBkg};\n opacity: 0.5;\n}\n\n.edgeLabel .label rect {\n fill: ${options.labelBackgroundColor};\n opacity: 0.5;\n}\n.edgeLabel {\n background-color: ${options.edgeLabelBackground};\n p {\n background-color: ${options.edgeLabelBackground};\n }\n rect {\n opacity: 0.5;\n background-color: ${options.edgeLabelBackground};\n fill: ${options.edgeLabelBackground};\n }\n text-align: center;\n}\n.edgeLabel .label text {\n fill: ${options.transitionLabelColor || options.tertiaryTextColor};\n}\n.label div .edgeLabel {\n color: ${options.transitionLabelColor || options.tertiaryTextColor};\n}\n\n.stateLabel text {\n fill: ${options.stateLabelColor};\n font-size: 10px;\n font-weight: bold;\n}\n\n.node circle.state-start {\n fill: ${options.specialStateColor};\n stroke: ${options.specialStateColor};\n}\n\n.node .fork-join {\n fill: ${options.specialStateColor};\n stroke: ${options.specialStateColor};\n}\n\n.node circle.state-end {\n fill: ${options.innerEndBackground};\n stroke: ${options.background};\n stroke-width: 1.5\n}\n.end-state-inner {\n fill: ${options.compositeBackground || options.background};\n // stroke: ${options.background};\n stroke-width: 1.5\n}\n\n.node rect {\n fill: ${options.stateBkg || options.mainBkg};\n stroke: ${options.stateBorder || options.nodeBorder};\n stroke-width: 1px;\n}\n.node polygon {\n fill: ${options.mainBkg};\n stroke: ${options.stateBorder || options.nodeBorder};;\n stroke-width: 1px;\n}\n#statediagram-barbEnd {\n fill: ${options.lineColor};\n}\n\n.statediagram-cluster rect {\n fill: ${options.compositeTitleBackground};\n stroke: ${options.stateBorder || options.nodeBorder};\n stroke-width: 1px;\n}\n\n.cluster-label, .nodeLabel {\n color: ${options.stateLabelColor};\n // line-height: 1;\n}\n\n.statediagram-cluster rect.outer {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state .divider {\n stroke: ${options.stateBorder || options.nodeBorder};\n}\n\n.statediagram-state .title-state {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-cluster.statediagram-cluster .inner {\n fill: ${options.compositeBackground || options.background};\n}\n.statediagram-cluster.statediagram-cluster-alt .inner {\n fill: ${options.altBackground ? options.altBackground : '#efefef'};\n}\n\n.statediagram-cluster .inner {\n rx:0;\n ry:0;\n}\n\n.statediagram-state rect.basic {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state rect.divider {\n stroke-dasharray: 10,10;\n fill: ${options.altBackground ? options.altBackground : '#efefef'};\n}\n\n.note-edge {\n stroke-dasharray: 5;\n}\n\n.statediagram-note rect {\n fill: ${options.noteBkgColor};\n stroke: ${options.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n.statediagram-note rect {\n fill: ${options.noteBkgColor};\n stroke: ${options.noteBorderColor};\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n\n.statediagram-note text {\n fill: ${options.noteTextColor};\n}\n\n.statediagram-note .nodeLabel {\n color: ${options.noteTextColor};\n}\n.statediagram .edgeLabel {\n color: red; // ${options.noteTextColor};\n}\n\n#dependencyStart, #dependencyEnd {\n fill: ${options.lineColor};\n stroke: ${options.lineColor};\n stroke-width: 1;\n}\n\n.statediagramTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n}\n`;\n\n// todo: change composit to composite\n// cspell:ignore composit\n\nexport default getStyles;\n", "import { line, curveBasis } from 'd3';\nimport { StateDB } from './stateDb.js';\nimport utils from '../../utils.js';\nimport common, { getUrl } from '../common/common.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { log } from '../../logger.js';\n\n/**\n * Draws a start state as a black circle\n *\n * @param {any} g\n */\nexport const drawStartState = (g) =>\n g\n .append('circle')\n // .style('stroke', 'black')\n // .style('fill', 'black')\n .attr('class', 'start-state')\n .attr('r', getConfig().state.sizeUnit)\n .attr('cx', getConfig().state.padding + getConfig().state.sizeUnit)\n .attr('cy', getConfig().state.padding + getConfig().state.sizeUnit);\n\n/**\n * Draws a start state as a black circle\n *\n * @param {any} g\n */\nexport const drawDivider = (g) =>\n g\n .append('line')\n .style('stroke', 'grey')\n .style('stroke-dasharray', '3')\n .attr('x1', getConfig().state.textHeight)\n .attr('class', 'divider')\n .attr('x2', getConfig().state.textHeight * 2)\n .attr('y1', 0)\n .attr('y2', 0);\n\n/**\n * Draws an end state as a black circle\n *\n * @param {any} g\n * @param {any} stateDef\n */\nexport const drawSimpleState = (g, stateDef) => {\n const state = g\n .append('text')\n .attr('x', 2 * getConfig().state.padding)\n .attr('y', getConfig().state.textHeight + 2 * getConfig().state.padding)\n .attr('font-size', getConfig().state.fontSize)\n .attr('class', 'state-title')\n .text(stateDef.id);\n\n const classBox = state.node().getBBox();\n g.insert('rect', ':first-child')\n .attr('x', getConfig().state.padding)\n .attr('y', getConfig().state.padding)\n .attr('width', classBox.width + 2 * getConfig().state.padding)\n .attr('height', classBox.height + 2 * getConfig().state.padding)\n .attr('rx', getConfig().state.radius);\n\n return state;\n};\n\n/**\n * Draws a state with descriptions\n *\n * @param {any} g The d3 svg object to add the state to\n * @param {any} stateDef\n * @returns {any} The d3 svg state\n */\nexport const drawDescrState = (g, stateDef) => {\n const addTspan = function (textEl, txt, isFirst) {\n const tSpan = textEl\n .append('tspan')\n .attr('x', 2 * getConfig().state.padding)\n .text(txt);\n if (!isFirst) {\n tSpan.attr('dy', getConfig().state.textHeight);\n }\n };\n const title = g\n .append('text')\n .attr('x', 2 * getConfig().state.padding)\n .attr('y', getConfig().state.textHeight + 1.3 * getConfig().state.padding)\n .attr('font-size', getConfig().state.fontSize)\n .attr('class', 'state-title')\n .text(stateDef.descriptions[0]);\n\n const titleBox = title.node().getBBox();\n const titleHeight = titleBox.height;\n\n const description = g\n .append('text') // text label for the x axis\n .attr('x', getConfig().state.padding)\n .attr(\n 'y',\n titleHeight +\n getConfig().state.padding * 0.4 +\n getConfig().state.dividerMargin +\n getConfig().state.textHeight\n )\n .attr('class', 'state-description');\n\n let isFirst = true;\n let isSecond = true;\n stateDef.descriptions.forEach(function (descr) {\n if (!isFirst) {\n addTspan(description, descr, isSecond);\n isSecond = false;\n }\n isFirst = false;\n });\n\n const descrLine = g\n .append('line') // text label for the x axis\n .attr('x1', getConfig().state.padding)\n .attr('y1', getConfig().state.padding + titleHeight + getConfig().state.dividerMargin / 2)\n .attr('y2', getConfig().state.padding + titleHeight + getConfig().state.dividerMargin / 2)\n .attr('class', 'descr-divider');\n const descrBox = description.node().getBBox();\n const width = Math.max(descrBox.width, titleBox.width);\n\n descrLine.attr('x2', width + 3 * getConfig().state.padding);\n // const classBox = title.node().getBBox();\n\n g.insert('rect', ':first-child')\n .attr('x', getConfig().state.padding)\n .attr('y', getConfig().state.padding)\n .attr('width', width + 2 * getConfig().state.padding)\n .attr('height', descrBox.height + titleHeight + 2 * getConfig().state.padding)\n .attr('rx', getConfig().state.radius);\n\n return g;\n};\n\n/** Adds the creates a box around the existing content and adds a panel for the id on top of the content. */\n/**\n * Function that creates a title row and a frame around a substate for a composite state diagram.\n * The function returns a new d3 svg object with updated width and height properties;\n *\n * @param {any} g The d3 svg object for the substate to framed\n * @param {any} stateDef The info about the\n * @param {any} altBkg\n */\nexport const addTitleAndBox = (g, stateDef, altBkg) => {\n const pad = getConfig().state.padding;\n const dblPad = 2 * getConfig().state.padding;\n const orgBox = g.node().getBBox();\n const orgWidth = orgBox.width;\n const orgX = orgBox.x;\n\n const title = g\n .append('text')\n .attr('x', 0)\n .attr('y', getConfig().state.titleShift)\n .attr('font-size', getConfig().state.fontSize)\n .attr('class', 'state-title')\n .text(stateDef.id);\n\n const titleBox = title.node().getBBox();\n const titleWidth = titleBox.width + dblPad;\n let width = Math.max(titleWidth, orgWidth); // + dblPad;\n if (width === orgWidth) {\n width = width + dblPad;\n }\n let startX;\n // const lineY = 1 - getConfig().state.textHeight;\n // const descrLine = g\n // .append('line') // text label for the x axis\n // .attr('x1', 0)\n // .attr('y1', lineY)\n // .attr('y2', lineY)\n // .attr('class', 'descr-divider');\n\n const graphBox = g.node().getBBox();\n // descrLine.attr('x2', graphBox.width + getConfig().state.padding);\n\n if (stateDef.doc) {\n // console.warn(\n // stateDef.id,\n // 'orgX: ',\n // orgX,\n // 'width: ',\n // width,\n // 'titleWidth: ',\n // titleWidth,\n // 'orgWidth: ',\n // orgWidth,\n // 'width',\n // width\n // );\n }\n\n startX = orgX - pad;\n if (titleWidth > orgWidth) {\n startX = (orgWidth - width) / 2 + pad;\n }\n if (Math.abs(orgX - graphBox.x) < pad && titleWidth > orgWidth) {\n startX = orgX - (titleWidth - orgWidth) / 2;\n }\n\n const lineY = 1 - getConfig().state.textHeight;\n // White color\n g.insert('rect', ':first-child')\n .attr('x', startX)\n .attr('y', lineY)\n .attr('class', altBkg ? 'alt-composit' : 'composit') // cspell:disable-line\n .attr('width', width)\n .attr(\n 'height',\n graphBox.height + getConfig().state.textHeight + getConfig().state.titleShift + 1\n )\n .attr('rx', '0');\n\n title.attr('x', startX + pad);\n if (titleWidth <= orgWidth) {\n title.attr('x', orgX + (width - dblPad) / 2 - titleWidth / 2 + pad);\n }\n\n // Title background\n g.insert('rect', ':first-child')\n .attr('x', startX)\n .attr(\n 'y',\n getConfig().state.titleShift - getConfig().state.textHeight - getConfig().state.padding\n )\n .attr('width', width)\n // Just needs to be higher then the descr line, will be clipped by the white color box\n .attr('height', getConfig().state.textHeight * 3)\n .attr('rx', getConfig().state.radius);\n\n // Full background\n g.insert('rect', ':first-child')\n .attr('x', startX)\n .attr(\n 'y',\n getConfig().state.titleShift - getConfig().state.textHeight - getConfig().state.padding\n )\n .attr('width', width)\n .attr('height', graphBox.height + 3 + 2 * getConfig().state.textHeight)\n .attr('rx', getConfig().state.radius);\n\n return g;\n};\n\nconst drawEndState = (g) => {\n g.append('circle')\n // .style('stroke', 'black')\n // .style('fill', 'white')\n .attr('class', 'end-state-outer')\n .attr('r', getConfig().state.sizeUnit + getConfig().state.miniPadding)\n .attr(\n 'cx',\n getConfig().state.padding + getConfig().state.sizeUnit + getConfig().state.miniPadding\n )\n .attr(\n 'cy',\n getConfig().state.padding + getConfig().state.sizeUnit + getConfig().state.miniPadding\n );\n\n return (\n g\n .append('circle')\n // .style('stroke', 'black')\n // .style('fill', 'black')\n .attr('class', 'end-state-inner')\n .attr('r', getConfig().state.sizeUnit)\n .attr('cx', getConfig().state.padding + getConfig().state.sizeUnit + 2)\n .attr('cy', getConfig().state.padding + getConfig().state.sizeUnit + 2)\n );\n};\nconst drawForkJoinState = (g, stateDef) => {\n let width = getConfig().state.forkWidth;\n let height = getConfig().state.forkHeight;\n\n if (stateDef.parentId) {\n let tmp = width;\n width = height;\n height = tmp;\n }\n return g\n .append('rect')\n .style('stroke', 'black')\n .style('fill', 'black')\n .attr('width', width)\n .attr('height', height)\n .attr('x', getConfig().state.padding)\n .attr('y', getConfig().state.padding);\n};\n\nexport const drawText = function (elem, textData) {\n // Remove and ignore br:s\n const nText = textData.text.replace(common.lineBreakRegex, ' ');\n\n const textElem = elem.append('text');\n textElem.attr('x', textData.x);\n textElem.attr('y', textData.y);\n textElem.style('text-anchor', textData.anchor);\n textElem.attr('fill', textData.fill);\n if (textData.class !== undefined) {\n textElem.attr('class', textData.class);\n }\n\n const span = textElem.append('tspan');\n span.attr('x', textData.x + textData.textMargin * 2);\n span.attr('fill', textData.fill);\n span.text(nText);\n\n return textElem;\n};\n\nconst _drawLongText = (_text, x, y, g) => {\n let textHeight = 0;\n\n const textElem = g.append('text');\n textElem.style('text-anchor', 'start');\n textElem.attr('class', 'noteText');\n\n let text = _text.replace(/\\r\\n/g, '
    ');\n text = text.replace(/\\n/g, '
    ');\n const lines = text.split(common.lineBreakRegex);\n\n let tHeight = 1.25 * getConfig().state.noteMargin;\n for (const line of lines) {\n const txt = line.trim();\n\n if (txt.length > 0) {\n const span = textElem.append('tspan');\n span.text(txt);\n if (tHeight === 0) {\n const textBounds = span.node().getBBox();\n tHeight += textBounds.height;\n }\n textHeight += tHeight;\n span.attr('x', x + getConfig().state.noteMargin);\n span.attr('y', y + textHeight + 1.25 * getConfig().state.noteMargin);\n }\n }\n return { textWidth: textElem.node().getBBox().width, textHeight };\n};\n\n/**\n * Draws a note to the diagram\n *\n * @param text - The text of the given note.\n * @param g - The element the note is attached to.\n */\n\nexport const drawNote = (text, g) => {\n g.attr('class', 'state-note');\n const note = g.append('rect').attr('x', 0).attr('y', getConfig().state.padding);\n const rectElem = g.append('g');\n\n const { textWidth, textHeight } = _drawLongText(text, 0, 0, rectElem);\n note.attr('height', textHeight + 2 * getConfig().state.noteMargin);\n note.attr('width', textWidth + getConfig().state.noteMargin * 2);\n\n return note;\n};\n\n/**\n * Starting point for drawing a state. The function finds out the specifics about the state and\n * renders with appropriate function.\n *\n * @param {any} elem\n * @param {any} stateDef\n */\n\nexport const drawState = function (elem, stateDef) {\n const id = stateDef.id;\n const stateInfo = {\n id: id,\n label: stateDef.id,\n width: 0,\n height: 0,\n };\n\n const g = elem.append('g').attr('id', id).attr('class', 'stateGroup');\n\n if (stateDef.type === 'start') {\n drawStartState(g);\n }\n if (stateDef.type === 'end') {\n drawEndState(g);\n }\n if (stateDef.type === 'fork' || stateDef.type === 'join') {\n drawForkJoinState(g, stateDef);\n }\n if (stateDef.type === 'note') {\n drawNote(stateDef.note.text, g);\n }\n if (stateDef.type === 'divider') {\n drawDivider(g);\n }\n if (stateDef.type === 'default' && stateDef.descriptions.length === 0) {\n drawSimpleState(g, stateDef);\n }\n if (stateDef.type === 'default' && stateDef.descriptions.length > 0) {\n drawDescrState(g, stateDef);\n }\n\n const stateBox = g.node().getBBox();\n stateInfo.width = stateBox.width + 2 * getConfig().state.padding;\n stateInfo.height = stateBox.height + 2 * getConfig().state.padding;\n\n return stateInfo;\n};\n\nlet edgeCount = 0;\nexport const drawEdge = function (elem, path, relation) {\n const getRelationType = function (type) {\n switch (type) {\n case StateDB.relationType.AGGREGATION:\n return 'aggregation';\n case StateDB.relationType.EXTENSION:\n return 'extension';\n case StateDB.relationType.COMPOSITION:\n return 'composition';\n case StateDB.relationType.DEPENDENCY:\n return 'dependency';\n }\n };\n\n path.points = path.points.filter((p) => !Number.isNaN(p.y));\n\n // The data for our line\n const lineData = path.points;\n\n // This is the accessor function we talked about above\n const lineFunction = line()\n .x(function (d) {\n return d.x;\n })\n .y(function (d) {\n return d.y;\n })\n .curve(curveBasis);\n\n const svgPath = elem\n .append('path')\n .attr('d', lineFunction(lineData))\n .attr('id', 'edge' + edgeCount)\n .attr('class', 'transition');\n let url = '';\n if (getConfig().state.arrowMarkerAbsolute) {\n url = getUrl(true);\n }\n\n svgPath.attr(\n 'marker-end',\n 'url(' + url + '#' + getRelationType(StateDB.relationType.DEPENDENCY) + 'End' + ')'\n );\n\n if (relation.title !== undefined) {\n const label = elem.append('g').attr('class', 'stateLabel');\n\n const { x, y } = utils.calcLabelPosition(path.points);\n\n const rows = common.getRows(relation.title);\n\n let titleHeight = 0;\n const titleRows = [];\n let maxWidth = 0;\n let minX = 0;\n\n for (let i = 0; i <= rows.length; i++) {\n const title = label\n .append('text')\n .attr('text-anchor', 'middle')\n .text(rows[i])\n .attr('x', x)\n .attr('y', y + titleHeight);\n\n const boundsTmp = title.node().getBBox();\n maxWidth = Math.max(maxWidth, boundsTmp.width);\n minX = Math.min(minX, boundsTmp.x);\n\n log.info(boundsTmp.x, x, y + titleHeight);\n\n if (titleHeight === 0) {\n const titleBox = title.node().getBBox();\n titleHeight = titleBox.height;\n log.info('Title height', titleHeight, y);\n }\n titleRows.push(title);\n }\n\n let boxHeight = titleHeight * rows.length;\n if (rows.length > 1) {\n const heightAdj = (rows.length - 1) * titleHeight * 0.5;\n\n titleRows.forEach((title, i) => title.attr('y', y + i * titleHeight - heightAdj));\n boxHeight = titleHeight * rows.length;\n }\n\n const bounds = label.node().getBBox();\n\n label\n .insert('rect', ':first-child')\n .attr('class', 'box')\n .attr('x', x - maxWidth / 2 - getConfig().state.padding / 2)\n .attr('y', y - boxHeight / 2 - getConfig().state.padding / 2 - 3.5)\n .attr('width', maxWidth + getConfig().state.padding)\n .attr('height', boxHeight + getConfig().state.padding);\n\n log.info(bounds);\n\n //label.attr('transform', '0 -' + (bounds.y / 2));\n\n // Debug points\n // path.points.forEach(point => {\n // g.append('circle')\n // .style('stroke', 'red')\n // .style('fill', 'red')\n // .attr('r', 1)\n // .attr('cx', point.x)\n // .attr('cy', point.y);\n // });\n // g.append('circle')\n // .style('stroke', 'blue')\n // .style('fill', 'blue')\n // .attr('r', 1)\n // .attr('cx', x)\n // .attr('cy', y);\n }\n\n edgeCount++;\n};\n", "import { select } from 'd3';\nimport { layout as dagreLayout } from 'dagre-d3-es/src/dagre/index.js';\nimport * as graphlib from 'dagre-d3-es/src/graphlib/index.js';\nimport { log } from '../../logger.js';\nimport common from '../common/common.js';\nimport { drawState, addTitleAndBox, drawEdge } from './shapes.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\n\n// TODO Move conf object to main conf in mermaidAPI\nlet conf;\n\nconst transformationLog = {};\n\nexport const setConf = function () {\n //no-op\n};\n\n/**\n * Setup arrow head and define the marker. The result is appended to the svg.\n *\n * @param {any} elem\n */\nconst insertMarkers = function (elem) {\n elem\n .append('defs')\n .append('marker')\n .attr('id', 'dependencyEnd')\n .attr('refX', 19)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 19,7 L9,13 L14,7 L9,1 Z');\n};\n\n/**\n * Draws a flowchart in the tag with id: id based on the graph definition in text.\n *\n * @param {any} text\n * @param {any} id\n * @param _version\n * @param diagObj\n */\nexport const draw = function (text, id, _version, diagObj) {\n conf = getConfig().state;\n const securityLevel = getConfig().securityLevel;\n // Handle root and Document for when rendering in sandbox mode\n let sandboxElement;\n if (securityLevel === 'sandbox') {\n sandboxElement = select('#i' + id);\n }\n const root =\n securityLevel === 'sandbox'\n ? select(sandboxElement.nodes()[0].contentDocument.body)\n : select('body');\n const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n\n log.debug('Rendering diagram ' + text);\n\n // Fetch the default direction, use TD if none was found\n const diagram = root.select(`[id='${id}']`);\n insertMarkers(diagram);\n\n const rootDoc = diagObj.db.getRootDoc();\n renderDoc(rootDoc, diagram, undefined, false, root, doc, diagObj);\n\n const padding = conf.padding;\n const bounds = diagram.node().getBBox();\n\n const width = bounds.width + padding * 2;\n const height = bounds.height + padding * 2;\n\n // zoom in a bit\n const svgWidth = width * 1.75;\n configureSvgSize(diagram, height, svgWidth, conf.useMaxWidth);\n\n diagram.attr(\n 'viewBox',\n `${bounds.x - conf.padding} ${bounds.y - conf.padding} ` + width + ' ' + height\n );\n};\nconst getLabelWidth = (text) => {\n return text ? text.length * conf.fontSizeFactor : 1;\n};\n\nconst renderDoc = (doc, diagram, parentId, altBkg, root, domDocument, diagObj) => {\n // Layout graph, Create a new directed graph\n const graph = new graphlib.Graph({\n compound: true,\n multigraph: true,\n });\n\n let i;\n let edgeFreeDoc = true;\n for (i = 0; i < doc.length; i++) {\n if (doc[i].stmt === 'relation') {\n edgeFreeDoc = false;\n break;\n }\n }\n\n // Set an object for the graph label\n if (parentId) {\n graph.setGraph({\n rankdir: 'LR',\n multigraph: true,\n compound: true,\n // acyclicer: 'greedy',\n ranker: 'tight-tree',\n ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor,\n nodeSep: edgeFreeDoc ? 1 : 50,\n isMultiGraph: true,\n // ranksep: 5,\n // nodesep: 1\n });\n } else {\n graph.setGraph({\n rankdir: 'TB',\n multigraph: true,\n compound: true,\n // isCompound: true,\n // acyclicer: 'greedy',\n // ranker: 'longest-path'\n ranksep: edgeFreeDoc ? 1 : conf.edgeLengthFactor,\n nodeSep: edgeFreeDoc ? 1 : 50,\n ranker: 'tight-tree',\n // ranker: 'network-simplex'\n isMultiGraph: true,\n });\n }\n\n // Default to assigning a new object as a label for each new edge.\n graph.setDefaultEdgeLabel(function () {\n return {};\n });\n\n const states = diagObj.db.getStates();\n const relations = diagObj.db.getRelations();\n\n const keys = Object.keys(states);\n\n let first = true;\n\n for (const key of keys) {\n const stateDef = states[key];\n\n if (parentId) {\n stateDef.parentId = parentId;\n }\n\n let node;\n if (stateDef.doc) {\n let sub = diagram.append('g').attr('id', stateDef.id).attr('class', 'stateGroup');\n node = renderDoc(stateDef.doc, sub, stateDef.id, !altBkg, root, domDocument, diagObj);\n\n if (first) {\n // first = false;\n sub = addTitleAndBox(sub, stateDef, altBkg);\n let boxBounds = sub.node().getBBox();\n node.width = boxBounds.width;\n node.height = boxBounds.height + conf.padding / 2;\n transformationLog[stateDef.id] = { y: conf.compositTitleSize };\n } else {\n // sub = addIdAndBox(sub, stateDef);\n let boxBounds = sub.node().getBBox();\n node.width = boxBounds.width;\n node.height = boxBounds.height;\n // transformationLog[stateDef.id] = { y: conf.compositTitleSize };\n }\n } else {\n node = drawState(diagram, stateDef, graph);\n }\n\n if (stateDef.note) {\n // Draw note note\n const noteDef = {\n descriptions: [],\n id: stateDef.id + '-note',\n note: stateDef.note,\n type: 'note',\n };\n const note = drawState(diagram, noteDef, graph);\n\n // graph.setNode(node.id, node);\n if (stateDef.note.position === 'left of') {\n graph.setNode(node.id + '-note', note);\n graph.setNode(node.id, node);\n } else {\n graph.setNode(node.id, node);\n graph.setNode(node.id + '-note', note);\n }\n // graph.setNode(node.id);\n graph.setParent(node.id, node.id + '-group');\n graph.setParent(node.id + '-note', node.id + '-group');\n } else {\n // Add nodes to the graph. The first argument is the node id. The second is\n // metadata about the node. In this case we're going to add labels to each of\n // our nodes.\n graph.setNode(node.id, node);\n }\n }\n\n log.debug('Count=', graph.nodeCount(), graph);\n let cnt = 0;\n relations.forEach(function (relation) {\n cnt++;\n log.debug('Setting edge', relation);\n graph.setEdge(\n relation.id1,\n relation.id2,\n {\n relation: relation,\n width: getLabelWidth(relation.title),\n height: conf.labelHeight * common.getRows(relation.title).length,\n labelpos: 'c',\n },\n 'id' + cnt\n );\n });\n\n dagreLayout(graph);\n\n log.debug('Graph after layout', graph.nodes());\n const svgElem = diagram.node();\n\n graph.nodes().forEach(function (v) {\n if (v !== undefined && graph.node(v) !== undefined) {\n log.warn('Node ' + v + ': ' + JSON.stringify(graph.node(v)));\n root\n .select('#' + svgElem.id + ' #' + v)\n .attr(\n 'transform',\n 'translate(' +\n (graph.node(v).x - graph.node(v).width / 2) +\n ',' +\n (graph.node(v).y +\n (transformationLog[v] ? transformationLog[v].y : 0) -\n graph.node(v).height / 2) +\n ' )'\n );\n root\n .select('#' + svgElem.id + ' #' + v)\n .attr('data-x-shift', graph.node(v).x - graph.node(v).width / 2);\n const dividers = domDocument.querySelectorAll('#' + svgElem.id + ' #' + v + ' .divider');\n dividers.forEach((divider) => {\n const parent = divider.parentElement;\n let pWidth = 0;\n let pShift = 0;\n if (parent) {\n if (parent.parentElement) {\n pWidth = parent.parentElement.getBBox().width;\n }\n pShift = parseInt(parent.getAttribute('data-x-shift'), 10);\n if (Number.isNaN(pShift)) {\n pShift = 0;\n }\n }\n divider.setAttribute('x1', 0 - pShift + 8);\n divider.setAttribute('x2', pWidth - pShift - 8);\n });\n } else {\n log.debug('No Node ' + v + ': ' + JSON.stringify(graph.node(v)));\n }\n });\n\n let stateBox = svgElem.getBBox();\n\n graph.edges().forEach(function (e) {\n if (e !== undefined && graph.edge(e) !== undefined) {\n log.debug('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(graph.edge(e)));\n drawEdge(diagram, graph.edge(e), graph.edge(e).relation);\n }\n });\n\n stateBox = svgElem.getBBox();\n\n const stateInfo = {\n id: parentId ? parentId : 'root',\n label: parentId ? parentId : 'root',\n width: 0,\n height: 0,\n };\n\n stateInfo.width = stateBox.width + 2 * conf.padding;\n stateInfo.height = stateBox.height + 2 * conf.padding;\n\n log.debug('Doc rendered', stateInfo, graph);\n return stateInfo;\n};\n\nexport default {\n setConf,\n draw,\n};\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\n// @ts-ignore: JISON doesn't support types\nimport parser from './parser/stateDiagram.jison';\nimport { StateDB } from './stateDb.js';\nimport styles from './styles.js';\nimport renderer from './stateRenderer.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n get db() {\n return new StateDB(1);\n },\n renderer,\n styles,\n init: (cnf) => {\n if (!cnf.state) {\n cnf.state = {};\n }\n cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n },\n};\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\n// @ts-ignore: JISON doesn't support types\nimport parser from './parser/stateDiagram.jison';\nimport { StateDB } from './stateDb.js';\nimport styles from './styles.js';\nimport renderer from './stateRenderer-v3-unified.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n get db() {\n return new StateDB(2);\n },\n renderer,\n styles,\n init: (cnf) => {\n if (!cnf.state) {\n cnf.state = {};\n }\n cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;\n },\n};\n", "/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[6,8,10,11,12,14,16,17,18],$V1=[1,9],$V2=[1,10],$V3=[1,11],$V4=[1,12],$V5=[1,13],$V6=[1,14];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"journey\":4,\"document\":5,\"EOF\":6,\"line\":7,\"SPACE\":8,\"statement\":9,\"NEWLINE\":10,\"title\":11,\"acc_title\":12,\"acc_title_value\":13,\"acc_descr\":14,\"acc_descr_value\":15,\"acc_descr_multiline_value\":16,\"section\":17,\"taskName\":18,\"taskData\":19,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"journey\",6:\"EOF\",8:\"SPACE\",10:\"NEWLINE\",11:\"title\",12:\"acc_title\",13:\"acc_title_value\",14:\"acc_descr\",15:\"acc_descr_value\",16:\"acc_descr_multiline_value\",17:\"section\",18:\"taskName\",19:\"taskData\"},\nproductions_: [0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n return $$[$0-1]; \nbreak;\ncase 2:\n this.$ = [] \nbreak;\ncase 3:\n$$[$0-1].push($$[$0]);this.$ = $$[$0-1]\nbreak;\ncase 4: case 5:\n this.$ = $$[$0] \nbreak;\ncase 6: case 7:\n this.$=[];\nbreak;\ncase 8:\nyy.setDiagramTitle($$[$0].substr(6));this.$=$$[$0].substr(6);\nbreak;\ncase 9:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 10: case 11:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 12:\nyy.addSection($$[$0].substr(8));this.$=$$[$0].substr(8);\nbreak;\ncase 13:\nyy.addTask($$[$0-1], $$[$0]);this.$='task';\nbreak;\n}\n},\ntable: [{3:1,4:[1,2]},{1:[3]},o($V0,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:$V1,12:$V2,14:$V3,16:$V4,17:$V5,18:$V6},o($V0,[2,7],{1:[2,1]}),o($V0,[2,3]),{9:15,11:$V1,12:$V2,14:$V3,16:$V4,17:$V5,18:$V6},o($V0,[2,5]),o($V0,[2,6]),o($V0,[2,8]),{13:[1,16]},{15:[1,17]},o($V0,[2,11]),o($V0,[2,12]),{19:[1,18]},o($V0,[2,4]),o($V0,[2,9]),o($V0,[2,10]),o($V0,[2,13])],\ndefaultActions: {},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// 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.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n 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(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* skip comments */\nbreak;\ncase 1:/* skip comments */\nbreak;\ncase 2:return 10;\nbreak;\ncase 3:/* skip whitespace */\nbreak;\ncase 4:/* skip comments */\nbreak;\ncase 5:return 4;\nbreak;\ncase 6:return 11;\nbreak;\ncase 7: this.begin(\"acc_title\");return 12; \nbreak;\ncase 8: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 9: this.begin(\"acc_descr\");return 14; \nbreak;\ncase 10: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 11: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 12: this.popState(); \nbreak;\ncase 13:return \"acc_descr_multiline_value\";\nbreak;\ncase 14:return 17;\nbreak;\ncase 15:return 18;\nbreak;\ncase 16:return 19;\nbreak;\ncase 17:return ':';\nbreak;\ncase 18:return 6;\nbreak;\ncase 19:return 'INVALID';\nbreak;\n}\n},\nrules: [/^(?:%(?!\\{)[^\\n]*)/i,/^(?:[^\\}]%%[^\\n]*)/i,/^(?:[\\n]+)/i,/^(?:\\s+)/i,/^(?:#[^\\n]*)/i,/^(?:journey\\b)/i,/^(?:title\\s[^#\\n;]+)/i,/^(?:accTitle\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*\\{\\s*)/i,/^(?:[\\}])/i,/^(?:[^\\}]*)/i,/^(?:section\\s[^#:\\n;]+)/i,/^(?:[^#:\\n;]+)/i,/^(?::[^#\\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],\nconditions: {\"acc_descr_multiline\":{\"rules\":[12,13],\"inclusive\":false},\"acc_descr\":{\"rules\":[10],\"inclusive\":false},\"acc_title\":{\"rules\":[8],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})(); \n\tparser.parser = parser;\n\texport { parser };\n\texport default parser;\n\t", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport {\n setAccTitle,\n getAccTitle,\n setDiagramTitle,\n getDiagramTitle,\n getAccDescription,\n setAccDescription,\n clear as commonClear,\n} from '../common/commonDb.js';\n\nlet currentSection = '';\n\nconst sections = [];\nconst tasks = [];\nconst rawTasks = [];\n\nexport const clear = function () {\n sections.length = 0;\n tasks.length = 0;\n currentSection = '';\n rawTasks.length = 0;\n commonClear();\n};\n\nexport const addSection = function (txt) {\n currentSection = txt;\n sections.push(txt);\n};\n\nexport const getSections = function () {\n return sections;\n};\n\nexport const getTasks = function () {\n let allItemsProcessed = compileTasks();\n const maxDepth = 100;\n let iterationCount = 0;\n while (!allItemsProcessed && iterationCount < maxDepth) {\n allItemsProcessed = compileTasks();\n iterationCount++;\n }\n\n tasks.push(...rawTasks);\n\n return tasks;\n};\n\nconst updateActors = function () {\n const tempActors = [];\n tasks.forEach((task) => {\n if (task.people) {\n tempActors.push(...task.people);\n }\n });\n\n const unique = new Set(tempActors);\n return [...unique].sort();\n};\n\nexport const addTask = function (descr, taskData) {\n const pieces = taskData.substr(1).split(':');\n\n let score = 0;\n let peeps = [];\n if (pieces.length === 1) {\n score = Number(pieces[0]);\n peeps = [];\n } else {\n score = Number(pieces[0]);\n peeps = pieces[1].split(',');\n }\n const peopleList = peeps.map((s) => s.trim());\n\n const rawTask = {\n section: currentSection,\n type: currentSection,\n people: peopleList,\n task: descr,\n score,\n };\n\n rawTasks.push(rawTask);\n};\n\nexport const addTaskOrg = function (descr) {\n const newTask = {\n section: currentSection,\n type: currentSection,\n description: descr,\n task: descr,\n classes: [],\n };\n tasks.push(newTask);\n};\n\nconst compileTasks = function () {\n const compileTask = function (pos) {\n return rawTasks[pos].processed;\n };\n\n let allProcessed = true;\n for (const [i, rawTask] of rawTasks.entries()) {\n compileTask(i);\n\n allProcessed = allProcessed && rawTask.processed;\n }\n return allProcessed;\n};\n\nconst getActors = function () {\n return updateActors();\n};\n\nexport default {\n getConfig: () => getConfig().journey,\n clear,\n setDiagramTitle,\n getDiagramTitle,\n setAccTitle,\n getAccTitle,\n setAccDescription,\n getAccDescription,\n addSection,\n getSections,\n getTasks,\n addTask,\n addTaskOrg,\n getActors,\n};\n", "import { getIconStyles } from '../globalStyles.js';\n\nconst getStyles = (options) =>\n `.label {\n font-family: ${options.fontFamily};\n color: ${options.textColor};\n }\n .mouth {\n stroke: #666;\n }\n\n line {\n stroke: ${options.textColor}\n }\n\n .legend {\n fill: ${options.textColor};\n font-family: ${options.fontFamily};\n }\n\n .label text {\n fill: #333;\n }\n .label {\n color: ${options.textColor}\n }\n\n .face {\n ${options.faceColor ? `fill: ${options.faceColor}` : 'fill: #FFF8DC'};\n stroke: #999;\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${options.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${options.lineColor};\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ${options.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${options.edgeLabelBackground};\n rect {\n opacity: 0.5;\n }\n text-align: center;\n }\n\n .cluster rect {\n }\n\n .cluster text {\n fill: ${options.titleColor};\n }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${options.fontFamily};\n font-size: 12px;\n background: ${options.tertiaryColor};\n border: 1px solid ${options.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .task-type-0, .section-type-0 {\n ${options.fillType0 ? `fill: ${options.fillType0}` : ''};\n }\n .task-type-1, .section-type-1 {\n ${options.fillType0 ? `fill: ${options.fillType1}` : ''};\n }\n .task-type-2, .section-type-2 {\n ${options.fillType0 ? `fill: ${options.fillType2}` : ''};\n }\n .task-type-3, .section-type-3 {\n ${options.fillType0 ? `fill: ${options.fillType3}` : ''};\n }\n .task-type-4, .section-type-4 {\n ${options.fillType0 ? `fill: ${options.fillType4}` : ''};\n }\n .task-type-5, .section-type-5 {\n ${options.fillType0 ? `fill: ${options.fillType5}` : ''};\n }\n .task-type-6, .section-type-6 {\n ${options.fillType0 ? `fill: ${options.fillType6}` : ''};\n }\n .task-type-7, .section-type-7 {\n ${options.fillType0 ? `fill: ${options.fillType7}` : ''};\n }\n\n .actor-0 {\n ${options.actor0 ? `fill: ${options.actor0}` : ''};\n }\n .actor-1 {\n ${options.actor1 ? `fill: ${options.actor1}` : ''};\n }\n .actor-2 {\n ${options.actor2 ? `fill: ${options.actor2}` : ''};\n }\n .actor-3 {\n ${options.actor3 ? `fill: ${options.actor3}` : ''};\n }\n .actor-4 {\n ${options.actor4 ? `fill: ${options.actor4}` : ''};\n }\n .actor-5 {\n ${options.actor5 ? `fill: ${options.actor5}` : ''};\n }\n ${getIconStyles()}\n`;\n\nexport default getStyles;\n", "import { arc as d3arc } from 'd3';\nimport * as svgDrawCommon from '../common/svgDrawCommon.js';\n\nexport const drawRect = function (elem, rectData) {\n return svgDrawCommon.drawRect(elem, rectData);\n};\n\nexport const drawFace = function (element, faceData) {\n const radius = 15;\n const circleElement = element\n .append('circle')\n .attr('cx', faceData.cx)\n .attr('cy', faceData.cy)\n .attr('class', 'face')\n .attr('r', radius)\n .attr('stroke-width', 2)\n .attr('overflow', 'visible');\n\n const face = element.append('g');\n\n //left eye\n face\n .append('circle')\n .attr('cx', faceData.cx - radius / 3)\n .attr('cy', faceData.cy - radius / 3)\n .attr('r', 1.5)\n .attr('stroke-width', 2)\n .attr('fill', '#666')\n .attr('stroke', '#666');\n\n //right eye\n face\n .append('circle')\n .attr('cx', faceData.cx + radius / 3)\n .attr('cy', faceData.cy - radius / 3)\n .attr('r', 1.5)\n .attr('stroke-width', 2)\n .attr('fill', '#666')\n .attr('stroke', '#666');\n\n /** @param {any} face */\n function smile(face) {\n const arc = d3arc()\n .startAngle(Math.PI / 2)\n .endAngle(3 * (Math.PI / 2))\n .innerRadius(radius / 2)\n .outerRadius(radius / 2.2);\n //mouth\n face\n .append('path')\n .attr('class', 'mouth')\n .attr('d', arc)\n .attr('transform', 'translate(' + faceData.cx + ',' + (faceData.cy + 2) + ')');\n }\n\n /** @param {any} face */\n function sad(face) {\n const arc = d3arc()\n .startAngle((3 * Math.PI) / 2)\n .endAngle(5 * (Math.PI / 2))\n .innerRadius(radius / 2)\n .outerRadius(radius / 2.2);\n //mouth\n face\n .append('path')\n .attr('class', 'mouth')\n .attr('d', arc)\n .attr('transform', 'translate(' + faceData.cx + ',' + (faceData.cy + 7) + ')');\n }\n\n /** @param {any} face */\n function ambivalent(face) {\n face\n .append('line')\n .attr('class', 'mouth')\n .attr('stroke', 2)\n .attr('x1', faceData.cx - 5)\n .attr('y1', faceData.cy + 7)\n .attr('x2', faceData.cx + 5)\n .attr('y2', faceData.cy + 7)\n .attr('class', 'mouth')\n .attr('stroke-width', '1px')\n .attr('stroke', '#666');\n }\n\n if (faceData.score > 3) {\n smile(face);\n } else if (faceData.score < 3) {\n sad(face);\n } else {\n ambivalent(face);\n }\n\n return circleElement;\n};\n\nexport const drawCircle = function (element, circleData) {\n const circleElement = element.append('circle');\n circleElement.attr('cx', circleData.cx);\n circleElement.attr('cy', circleData.cy);\n circleElement.attr('class', 'actor-' + circleData.pos);\n circleElement.attr('fill', circleData.fill);\n circleElement.attr('stroke', circleData.stroke);\n circleElement.attr('r', circleData.r);\n\n if (circleElement.class !== undefined) {\n circleElement.attr('class', circleElement.class);\n }\n\n if (circleData.title !== undefined) {\n circleElement.append('title').text(circleData.title);\n }\n\n return circleElement;\n};\n\nexport const drawText = function (elem, textData) {\n return svgDrawCommon.drawText(elem, textData);\n};\n\nexport const drawLabel = function (elem, txtObject) {\n /**\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} cut\n */\n function genPoints(x, y, width, height, cut) {\n return (\n x +\n ',' +\n y +\n ' ' +\n (x + width) +\n ',' +\n y +\n ' ' +\n (x + width) +\n ',' +\n (y + height - cut) +\n ' ' +\n (x + width - cut * 1.2) +\n ',' +\n (y + height) +\n ' ' +\n x +\n ',' +\n (y + height)\n );\n }\n const polygon = elem.append('polygon');\n polygon.attr('points', genPoints(txtObject.x, txtObject.y, 50, 20, 7));\n polygon.attr('class', 'labelBox');\n\n txtObject.y = txtObject.y + txtObject.labelMargin;\n txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin;\n drawText(elem, txtObject);\n};\n\nexport const drawSection = function (elem, section, conf) {\n const g = elem.append('g');\n\n const rect = svgDrawCommon.getNoteRect();\n rect.x = section.x;\n rect.y = section.y;\n rect.fill = section.fill;\n // section width covers all nested tasks\n rect.width =\n conf.width * section.taskCount + // width of the tasks\n conf.diagramMarginX * (section.taskCount - 1); // width of space between tasks\n rect.height = conf.height;\n rect.class = 'journey-section section-type-' + section.num;\n rect.rx = 3;\n rect.ry = 3;\n drawRect(g, rect);\n\n _drawTextCandidateFunc(conf)(\n section.text,\n g,\n rect.x,\n rect.y,\n rect.width,\n rect.height,\n { class: 'journey-section section-type-' + section.num },\n conf,\n section.colour\n );\n};\n\nlet taskCount = -1;\n/**\n * Draws an actor in the diagram with the attached line\n *\n * @param {any} elem The HTML element\n * @param {any} task The task to render\n * @param {any} conf The global configuration\n */\nexport const drawTask = function (elem, task, conf) {\n const center = task.x + conf.width / 2;\n const g = elem.append('g');\n taskCount++;\n const maxHeight = 300 + 5 * 30;\n g.append('line')\n .attr('id', 'task' + taskCount)\n .attr('x1', center)\n .attr('y1', task.y)\n .attr('x2', center)\n .attr('y2', maxHeight)\n .attr('class', 'task-line')\n .attr('stroke-width', '1px')\n .attr('stroke-dasharray', '4 2')\n .attr('stroke', '#666');\n\n drawFace(g, {\n cx: center,\n cy: 300 + (5 - task.score) * 30,\n score: task.score,\n });\n\n const rect = svgDrawCommon.getNoteRect();\n rect.x = task.x;\n rect.y = task.y;\n rect.fill = task.fill;\n rect.width = conf.width;\n rect.height = conf.height;\n rect.class = 'task task-type-' + task.num;\n rect.rx = 3;\n rect.ry = 3;\n drawRect(g, rect);\n\n let xPos = task.x + 14;\n task.people.forEach((person) => {\n const colour = task.actors[person].color;\n\n const circle = {\n cx: xPos,\n cy: task.y,\n r: 7,\n fill: colour,\n stroke: '#000',\n title: person,\n pos: task.actors[person].position,\n };\n\n drawCircle(g, circle);\n xPos += 10;\n });\n\n _drawTextCandidateFunc(conf)(\n task.task,\n g,\n rect.x,\n rect.y,\n rect.width,\n rect.height,\n { class: 'task' },\n conf,\n task.colour\n );\n};\n\n/**\n * Draws a background rectangle\n *\n * @param {any} elem The html element\n * @param {any} bounds The bounds of the drawing\n */\nexport const drawBackgroundRect = function (elem, bounds) {\n svgDrawCommon.drawBackgroundRect(elem, bounds);\n};\n\nconst _drawTextCandidateFunc = (function () {\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n * @param {any} colour\n */\n function byText(content, g, x, y, width, height, textAttrs, colour) {\n const text = g\n .append('text')\n .attr('x', x + width / 2)\n .attr('y', y + height / 2 + 5)\n .style('font-color', colour)\n .style('text-anchor', 'middle')\n .text(content);\n _setTextAttrs(text, textAttrs);\n }\n\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n * @param {any} conf\n * @param {any} colour\n */\n function byTspan(content, g, x, y, width, height, textAttrs, conf, colour) {\n const { taskFontSize, taskFontFamily } = conf;\n\n const lines = content.split(//gi);\n for (let i = 0; i < lines.length; i++) {\n const dy = i * taskFontSize - (taskFontSize * (lines.length - 1)) / 2;\n const text = g\n .append('text')\n .attr('x', x + width / 2)\n .attr('y', y)\n .attr('fill', colour)\n .style('text-anchor', 'middle')\n .style('font-size', taskFontSize)\n .style('font-family', taskFontFamily);\n text\n .append('tspan')\n .attr('x', x + width / 2)\n .attr('dy', dy)\n .text(lines[i]);\n\n text\n .attr('y', y + height / 2.0)\n .attr('dominant-baseline', 'central')\n .attr('alignment-baseline', 'central');\n\n _setTextAttrs(text, textAttrs);\n }\n }\n\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n * @param {any} conf\n */\n function byFo(content, g, x, y, width, height, textAttrs, conf) {\n const body = g.append('switch');\n const f = body\n .append('foreignObject')\n .attr('x', x)\n .attr('y', y)\n .attr('width', width)\n .attr('height', height)\n .attr('position', 'fixed');\n\n const text = f\n .append('xhtml:div')\n .style('display', 'table')\n .style('height', '100%')\n .style('width', '100%');\n\n text\n .append('div')\n .attr('class', 'label')\n .style('display', 'table-cell')\n .style('text-align', 'center')\n .style('vertical-align', 'middle')\n .text(content);\n\n byTspan(content, body, x, y, width, height, textAttrs, conf);\n _setTextAttrs(text, textAttrs);\n }\n\n /**\n * @param {any} toText\n * @param {any} fromTextAttrsDict\n */\n function _setTextAttrs(toText, fromTextAttrsDict) {\n for (const key in fromTextAttrsDict) {\n if (key in fromTextAttrsDict) {\n // noinspection JSUnfilteredForInLoop\n toText.attr(key, fromTextAttrsDict[key]);\n }\n }\n }\n\n return function (conf) {\n return conf.textPlacement === 'fo' ? byFo : conf.textPlacement === 'old' ? byText : byTspan;\n };\n})();\n\nconst initGraphics = function (graphics) {\n graphics\n .append('defs')\n .append('marker')\n .attr('id', 'arrowhead')\n .attr('refX', 5)\n .attr('refY', 2)\n .attr('markerWidth', 6)\n .attr('markerHeight', 4)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 0,0 V 4 L6,2 Z'); // this is actual shape for arrowhead\n};\n\nexport default {\n drawRect,\n drawCircle,\n drawSection,\n drawText,\n drawLabel,\n drawTask,\n drawBackgroundRect,\n initGraphics,\n};\n", "// @ts-nocheck TODO: fix file\nimport { select } from 'd3';\nimport svgDraw from './svgDraw.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\n\nexport const setConf = function (cnf) {\n const keys = Object.keys(cnf);\n\n keys.forEach(function (key) {\n conf[key] = cnf[key];\n });\n};\n\nconst actors = {};\nlet maxWidth = 0;\n\n/** @param diagram - The diagram to draw to. */\nfunction drawActorLegend(diagram) {\n const conf = getConfig().journey;\n const maxLabelWidth = conf.maxLabelWidth;\n maxWidth = 0;\n let yPos = 60;\n\n Object.keys(actors).forEach((person) => {\n const colour = actors[person].color;\n const circleData = {\n cx: 20,\n cy: yPos,\n r: 7,\n fill: colour,\n stroke: '#000',\n pos: actors[person].position,\n };\n svgDraw.drawCircle(diagram, circleData);\n\n // First, measure the full text width without wrapping.\n let measureText = diagram.append('text').attr('visibility', 'hidden').text(person);\n const fullTextWidth = measureText.node().getBoundingClientRect().width;\n measureText.remove();\n\n let lines = [];\n\n // If the text is naturally within the max width, use it as a single line.\n if (fullTextWidth <= maxLabelWidth) {\n lines = [person];\n } else {\n // Otherwise, wrap the text using the knuth-plass algorithm.\n const words = person.split(' '); // Split the text into words.\n let currentLine = '';\n measureText = diagram.append('text').attr('visibility', 'hidden');\n\n words.forEach((word) => {\n // check the width of the line with the new word.\n const testLine = currentLine ? `${currentLine} ${word}` : word;\n measureText.text(testLine);\n const textWidth = measureText.node().getBoundingClientRect().width;\n\n if (textWidth > maxLabelWidth) {\n // If adding the new word exceeds max width, push the current line.\n if (currentLine) {\n lines.push(currentLine);\n }\n currentLine = word; // Start a new line with the current word.\n\n // If the word itself is too long, break it with a hyphen.\n measureText.text(word);\n if (measureText.node().getBoundingClientRect().width > maxLabelWidth) {\n let brokenWord = '';\n for (const char of word) {\n brokenWord += char;\n measureText.text(brokenWord + '-');\n if (measureText.node().getBoundingClientRect().width > maxLabelWidth) {\n // Push the broken part with a hyphen.\n lines.push(brokenWord.slice(0, -1) + '-');\n brokenWord = char;\n }\n }\n currentLine = brokenWord;\n }\n } else {\n // If the line with the new word fits, add the new word to the current line.\n currentLine = testLine;\n }\n });\n\n // Push the last line.\n if (currentLine) {\n lines.push(currentLine);\n }\n measureText.remove(); // Remove the text element used for measuring.\n }\n\n lines.forEach((line, index) => {\n const labelData = {\n x: 40,\n y: yPos + 7 + index * 20,\n fill: '#666',\n text: line,\n textMargin: conf.boxTextMargin ?? 5,\n };\n\n // Draw the text and measure the width.\n const textElement = svgDraw.drawText(diagram, labelData);\n const lineWidth = textElement.node().getBoundingClientRect().width;\n\n // Use conf.leftMargin as the initial spacing baseline,\n // but expand maxWidth if the line is wider.\n if (lineWidth > maxWidth && lineWidth > conf.leftMargin - lineWidth) {\n maxWidth = lineWidth;\n }\n });\n\n yPos += Math.max(20, lines.length * 20);\n });\n}\n\n// TODO: Cleanup?\nconst conf = getConfig().journey;\nlet leftMargin = 0;\nexport const draw = function (text, id, version, diagObj) {\n const configObject = getConfig();\n const titleColor = configObject.journey.titleColor;\n const titleFontSize = configObject.journey.titleFontSize;\n const titleFontFamily = configObject.journey.titleFontFamily;\n\n const securityLevel = configObject.securityLevel;\n // Handle root and Document for when rendering in sandbox mode\n let sandboxElement;\n if (securityLevel === 'sandbox') {\n sandboxElement = select('#i' + id);\n }\n const root =\n securityLevel === 'sandbox'\n ? select(sandboxElement.nodes()[0].contentDocument.body)\n : select('body');\n // const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n\n bounds.init();\n const diagram = root.select('#' + id);\n\n svgDraw.initGraphics(diagram);\n\n const tasks = diagObj.db.getTasks();\n const title = diagObj.db.getDiagramTitle();\n\n const actorNames = diagObj.db.getActors();\n for (const member in actors) {\n delete actors[member];\n }\n let actorPos = 0;\n actorNames.forEach((actorName) => {\n actors[actorName] = {\n color: conf.actorColours[actorPos % conf.actorColours.length],\n position: actorPos,\n };\n actorPos++;\n });\n\n drawActorLegend(diagram);\n leftMargin = conf.leftMargin + maxWidth;\n bounds.insert(0, 0, leftMargin, Object.keys(actors).length * 50);\n drawTasks(diagram, tasks, 0);\n\n const box = bounds.getBounds();\n if (title) {\n diagram\n .append('text')\n .text(title)\n .attr('x', leftMargin)\n .attr('font-size', titleFontSize)\n .attr('font-weight', 'bold')\n .attr('y', 25)\n .attr('fill', titleColor)\n .attr('font-family', titleFontFamily);\n }\n\n const height = box.stopy - box.starty + 2 * conf.diagramMarginY;\n const width = leftMargin + box.stopx + 2 * conf.diagramMarginX;\n\n configureSvgSize(diagram, height, width, conf.useMaxWidth);\n\n // Draw activity line\n diagram\n .append('line')\n .attr('x1', leftMargin)\n .attr('y1', conf.height * 4) // One section head + one task + margins\n .attr('x2', width - leftMargin - 4) // Subtract stroke width so arrow point is retained\n .attr('y2', conf.height * 4)\n .attr('stroke-width', 4)\n .attr('stroke', 'black')\n .attr('marker-end', 'url(#arrowhead)');\n\n const extraVertForTitle = title ? 70 : 0;\n diagram.attr('viewBox', `${box.startx} -25 ${width} ${height + extraVertForTitle}`);\n diagram.attr('preserveAspectRatio', 'xMinYMin meet');\n diagram.attr('height', height + extraVertForTitle + 25);\n};\n\nexport const bounds = {\n data: {\n startx: undefined,\n stopx: undefined,\n starty: undefined,\n stopy: undefined,\n },\n verticalPos: 0,\n\n sequenceItems: [],\n init: function () {\n this.sequenceItems = [];\n this.data = {\n startx: undefined,\n stopx: undefined,\n starty: undefined,\n stopy: undefined,\n };\n this.verticalPos = 0;\n },\n updateVal: function (obj, key, val, fun) {\n if (obj[key] === undefined) {\n obj[key] = val;\n } else {\n obj[key] = fun(val, obj[key]);\n }\n },\n updateBounds: function (startx, starty, stopx, stopy) {\n const conf = getConfig().journey;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const _self = this;\n let cnt = 0;\n /** @param type - Set to `activation` if activation */\n function updateFn(type?: 'activation') {\n return function updateItemBounds(item) {\n cnt++;\n // The loop sequenceItems is a stack so the biggest margins in the beginning of the sequenceItems\n const n = _self.sequenceItems.length - cnt + 1;\n _self.updateVal(item, 'starty', starty - n * conf.boxMargin, Math.min);\n _self.updateVal(item, 'stopy', stopy + n * conf.boxMargin, Math.max);\n\n _self.updateVal(bounds.data, 'startx', startx - n * conf.boxMargin, Math.min);\n _self.updateVal(bounds.data, 'stopx', stopx + n * conf.boxMargin, Math.max);\n\n if (!(type === 'activation')) {\n _self.updateVal(item, 'startx', startx - n * conf.boxMargin, Math.min);\n _self.updateVal(item, 'stopx', stopx + n * conf.boxMargin, Math.max);\n\n _self.updateVal(bounds.data, 'starty', starty - n * conf.boxMargin, Math.min);\n _self.updateVal(bounds.data, 'stopy', stopy + n * conf.boxMargin, Math.max);\n }\n };\n }\n\n this.sequenceItems.forEach(updateFn());\n },\n insert: function (startx, starty, stopx, stopy) {\n const _startx = Math.min(startx, stopx);\n const _stopx = Math.max(startx, stopx);\n const _starty = Math.min(starty, stopy);\n const _stopy = Math.max(starty, stopy);\n\n this.updateVal(bounds.data, 'startx', _startx, Math.min);\n this.updateVal(bounds.data, 'starty', _starty, Math.min);\n this.updateVal(bounds.data, 'stopx', _stopx, Math.max);\n this.updateVal(bounds.data, 'stopy', _stopy, Math.max);\n\n this.updateBounds(_startx, _starty, _stopx, _stopy);\n },\n bumpVerticalPos: function (bump) {\n this.verticalPos = this.verticalPos + bump;\n this.data.stopy = this.verticalPos;\n },\n getVerticalPos: function () {\n return this.verticalPos;\n },\n getBounds: function () {\n return this.data;\n },\n};\n\nconst fills = conf.sectionFills;\nconst textColours = conf.sectionColours;\n\nexport const drawTasks = function (diagram, tasks, verticalPos) {\n const conf = getConfig().journey;\n let lastSection = '';\n const sectionVHeight = conf.height * 2 + conf.diagramMarginY;\n const taskPos = verticalPos + sectionVHeight;\n\n let sectionNumber = 0;\n let fill = '#CCC';\n let colour = 'black';\n let num = 0;\n\n // Draw the tasks\n for (const [i, task] of tasks.entries()) {\n if (lastSection !== task.section) {\n fill = fills[sectionNumber % fills.length];\n num = sectionNumber % fills.length;\n colour = textColours[sectionNumber % textColours.length];\n\n // count how many consecutive tasks have the same section\n let taskInSectionCount = 0;\n const currentSection = task.section;\n for (let taskIndex = i; taskIndex < tasks.length; taskIndex++) {\n if (tasks[taskIndex].section == currentSection) {\n taskInSectionCount = taskInSectionCount + 1;\n } else {\n break;\n }\n }\n\n const section = {\n x: i * conf.taskMargin + i * conf.width + leftMargin,\n y: 50,\n text: task.section,\n fill,\n num,\n colour,\n taskCount: taskInSectionCount,\n };\n\n svgDraw.drawSection(diagram, section, conf);\n lastSection = task.section;\n sectionNumber++;\n }\n\n // Collect the actors involved in the task\n const taskActors = task.people.reduce((acc, actorName) => {\n if (actors[actorName]) {\n acc[actorName] = actors[actorName];\n }\n\n return acc;\n }, {});\n\n // Add some rendering data to the object\n task.x = i * conf.taskMargin + i * conf.width + leftMargin;\n task.y = taskPos;\n task.width = conf.diagramMarginX;\n task.height = conf.diagramMarginY;\n task.colour = colour;\n task.fill = fill;\n task.num = num;\n task.actors = taskActors;\n\n // Draw the box with the attached line\n svgDraw.drawTask(diagram, task, conf);\n bounds.insert(task.x, task.y, task.x + task.width + conf.taskMargin, 300 + 5 * 30); // stopY is the length of the descenders.\n }\n};\n\nexport default {\n setConf,\n draw,\n};\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\n// @ts-ignore: JISON doesn't support types\nimport parser from './parser/journey.jison';\nimport db from './journeyDb.js';\nimport styles from './styles.js';\nimport renderer from './journeyRenderer.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n db,\n renderer,\n styles,\n init: (cnf) => {\n renderer.setConf(cnf.journey);\n db.clear();\n },\n};\n", "/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[6,8,10,11,12,14,16,17,20,21],$V1=[1,9],$V2=[1,10],$V3=[1,11],$V4=[1,12],$V5=[1,13],$V6=[1,16],$V7=[1,17];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"timeline\":4,\"document\":5,\"EOF\":6,\"line\":7,\"SPACE\":8,\"statement\":9,\"NEWLINE\":10,\"title\":11,\"acc_title\":12,\"acc_title_value\":13,\"acc_descr\":14,\"acc_descr_value\":15,\"acc_descr_multiline_value\":16,\"section\":17,\"period_statement\":18,\"event_statement\":19,\"period\":20,\"event\":21,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"timeline\",6:\"EOF\",8:\"SPACE\",10:\"NEWLINE\",11:\"title\",12:\"acc_title\",13:\"acc_title_value\",14:\"acc_descr\",15:\"acc_descr_value\",16:\"acc_descr_multiline_value\",17:\"section\",20:\"period\",21:\"event\"},\nproductions_: [0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n return $$[$0-1]; \nbreak;\ncase 2:\n this.$ = [] \nbreak;\ncase 3:\n$$[$0-1].push($$[$0]);this.$ = $$[$0-1]\nbreak;\ncase 4: case 5:\n this.$ = $$[$0] \nbreak;\ncase 6: case 7:\n this.$=[];\nbreak;\ncase 8:\nyy.getCommonDb().setDiagramTitle($$[$0].substr(6));this.$=$$[$0].substr(6);\nbreak;\ncase 9:\n this.$=$$[$0].trim();yy.getCommonDb().setAccTitle(this.$); \nbreak;\ncase 10: case 11:\n this.$=$$[$0].trim();yy.getCommonDb().setAccDescription(this.$); \nbreak;\ncase 12:\nyy.addSection($$[$0].substr(8));this.$=$$[$0].substr(8);\nbreak;\ncase 15:\nyy.addTask($$[$0],0,'');this.$=$$[$0];\nbreak;\ncase 16:\nyy.addEvent($$[$0].substr(2));this.$=$$[$0];\nbreak;\n}\n},\ntable: [{3:1,4:[1,2]},{1:[3]},o($V0,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:$V1,12:$V2,14:$V3,16:$V4,17:$V5,18:14,19:15,20:$V6,21:$V7},o($V0,[2,7],{1:[2,1]}),o($V0,[2,3]),{9:18,11:$V1,12:$V2,14:$V3,16:$V4,17:$V5,18:14,19:15,20:$V6,21:$V7},o($V0,[2,5]),o($V0,[2,6]),o($V0,[2,8]),{13:[1,19]},{15:[1,20]},o($V0,[2,11]),o($V0,[2,12]),o($V0,[2,13]),o($V0,[2,14]),o($V0,[2,15]),o($V0,[2,16]),o($V0,[2,4]),o($V0,[2,9]),o($V0,[2,10])],\ndefaultActions: {},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// 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.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n 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(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* skip comments */\nbreak;\ncase 1:/* skip comments */\nbreak;\ncase 2:return 10;\nbreak;\ncase 3:/* skip whitespace */\nbreak;\ncase 4:/* skip comments */\nbreak;\ncase 5:return 4;\nbreak;\ncase 6:return 11;\nbreak;\ncase 7: this.begin(\"acc_title\");return 12; \nbreak;\ncase 8: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 9: this.begin(\"acc_descr\");return 14; \nbreak;\ncase 10: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 11: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 12: this.popState(); \nbreak;\ncase 13:return \"acc_descr_multiline_value\";\nbreak;\ncase 14:return 17;\nbreak;\ncase 15:return 21;\nbreak;\ncase 16:return 20;\nbreak;\ncase 17:return 6;\nbreak;\ncase 18:return 'INVALID';\nbreak;\n}\n},\nrules: [/^(?:%(?!\\{)[^\\n]*)/i,/^(?:[^\\}]%%[^\\n]*)/i,/^(?:[\\n]+)/i,/^(?:\\s+)/i,/^(?:#[^\\n]*)/i,/^(?:timeline\\b)/i,/^(?:title\\s[^\\n]+)/i,/^(?:accTitle\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*\\{\\s*)/i,/^(?:[\\}])/i,/^(?:[^\\}]*)/i,/^(?:section\\s[^:\\n]+)/i,/^(?::\\s(?:[^:\\n]|:(?!\\s))+)/i,/^(?:[^#:\\n]+)/i,/^(?:$)/i,/^(?:.)/i],\nconditions: {\"acc_descr_multiline\":{\"rules\":[12,13],\"inclusive\":false},\"acc_descr\":{\"rules\":[10],\"inclusive\":false},\"acc_title\":{\"rules\":[8],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})(); \n\tparser.parser = parser;\n\texport { parser };\n\texport default parser;\n\t", "import * as commonDb from '../common/commonDb.js';\nlet currentSection = '';\nlet currentTaskId = 0;\n\nconst sections = [];\nconst tasks = [];\nconst rawTasks = [];\n\nexport const getCommonDb = () => commonDb;\n\nexport const clear = function () {\n sections.length = 0;\n tasks.length = 0;\n currentSection = '';\n rawTasks.length = 0;\n commonDb.clear();\n};\n\nexport const addSection = function (txt) {\n currentSection = txt;\n sections.push(txt);\n};\n\nexport const getSections = function () {\n return sections;\n};\n\nexport const getTasks = function () {\n let allItemsProcessed = compileTasks();\n const maxDepth = 100;\n let iterationCount = 0;\n while (!allItemsProcessed && iterationCount < maxDepth) {\n allItemsProcessed = compileTasks();\n iterationCount++;\n }\n\n tasks.push(...rawTasks);\n\n return tasks;\n};\n\nexport const addTask = function (period, length, event) {\n const rawTask = {\n id: currentTaskId++,\n section: currentSection,\n type: currentSection,\n task: period,\n score: length ? length : 0,\n //if event is defined, then add it the events array\n events: event ? [event] : [],\n };\n rawTasks.push(rawTask);\n};\n\nexport const addEvent = function (event) {\n // fetch current task with currentTaskId\n const currentTask = rawTasks.find((task) => task.id === currentTaskId - 1);\n //add event to the events array\n currentTask.events.push(event);\n};\n\nexport const addTaskOrg = function (descr) {\n const newTask = {\n section: currentSection,\n type: currentSection,\n description: descr,\n task: descr,\n classes: [],\n };\n tasks.push(newTask);\n};\n\n/**\n * Compiles the raw tasks into a list of tasks with events\n * @returns {boolean} true if all items are processed\n * @private\n * @memberof timelineDb\n */\nconst compileTasks = function () {\n const compileTask = function (pos) {\n return rawTasks[pos].processed;\n };\n\n let allProcessed = true;\n for (const [i, rawTask] of rawTasks.entries()) {\n compileTask(i);\n\n allProcessed = allProcessed && rawTask.processed;\n }\n return allProcessed;\n};\n\nexport default {\n clear,\n getCommonDb,\n addSection,\n getSections,\n getTasks,\n addTask,\n addTaskOrg,\n addEvent,\n};\n", "import { arc as d3arc, select } from 'd3';\nconst MAX_SECTIONS = 12;\n\nexport const drawRect = function (elem, rectData) {\n const rectElem = elem.append('rect');\n rectElem.attr('x', rectData.x);\n rectElem.attr('y', rectData.y);\n rectElem.attr('fill', rectData.fill);\n rectElem.attr('stroke', rectData.stroke);\n rectElem.attr('width', rectData.width);\n rectElem.attr('height', rectData.height);\n rectElem.attr('rx', rectData.rx);\n rectElem.attr('ry', rectData.ry);\n\n if (rectData.class !== undefined) {\n rectElem.attr('class', rectData.class);\n }\n\n return rectElem;\n};\n\nexport const drawFace = function (element, faceData) {\n const radius = 15;\n const circleElement = element\n .append('circle')\n .attr('cx', faceData.cx)\n .attr('cy', faceData.cy)\n .attr('class', 'face')\n .attr('r', radius)\n .attr('stroke-width', 2)\n .attr('overflow', 'visible');\n\n const face = element.append('g');\n\n //left eye\n face\n .append('circle')\n .attr('cx', faceData.cx - radius / 3)\n .attr('cy', faceData.cy - radius / 3)\n .attr('r', 1.5)\n .attr('stroke-width', 2)\n .attr('fill', '#666')\n .attr('stroke', '#666');\n\n //right eye\n face\n .append('circle')\n .attr('cx', faceData.cx + radius / 3)\n .attr('cy', faceData.cy - radius / 3)\n .attr('r', 1.5)\n .attr('stroke-width', 2)\n .attr('fill', '#666')\n .attr('stroke', '#666');\n\n /** @param {any} face */\n function smile(face) {\n const arc = d3arc()\n .startAngle(Math.PI / 2)\n .endAngle(3 * (Math.PI / 2))\n .innerRadius(radius / 2)\n .outerRadius(radius / 2.2);\n //mouth\n face\n .append('path')\n .attr('class', 'mouth')\n .attr('d', arc)\n .attr('transform', 'translate(' + faceData.cx + ',' + (faceData.cy + 2) + ')');\n }\n\n /** @param {any} face */\n function sad(face) {\n const arc = d3arc()\n .startAngle((3 * Math.PI) / 2)\n .endAngle(5 * (Math.PI / 2))\n .innerRadius(radius / 2)\n .outerRadius(radius / 2.2);\n //mouth\n face\n .append('path')\n .attr('class', 'mouth')\n .attr('d', arc)\n .attr('transform', 'translate(' + faceData.cx + ',' + (faceData.cy + 7) + ')');\n }\n\n /** @param {any} face */\n function ambivalent(face) {\n face\n .append('line')\n .attr('class', 'mouth')\n .attr('stroke', 2)\n .attr('x1', faceData.cx - 5)\n .attr('y1', faceData.cy + 7)\n .attr('x2', faceData.cx + 5)\n .attr('y2', faceData.cy + 7)\n .attr('class', 'mouth')\n .attr('stroke-width', '1px')\n .attr('stroke', '#666');\n }\n\n if (faceData.score > 3) {\n smile(face);\n } else if (faceData.score < 3) {\n sad(face);\n } else {\n ambivalent(face);\n }\n\n return circleElement;\n};\n\nexport const drawCircle = function (element, circleData) {\n const circleElement = element.append('circle');\n circleElement.attr('cx', circleData.cx);\n circleElement.attr('cy', circleData.cy);\n circleElement.attr('class', 'actor-' + circleData.pos);\n circleElement.attr('fill', circleData.fill);\n circleElement.attr('stroke', circleData.stroke);\n circleElement.attr('r', circleData.r);\n\n if (circleElement.class !== undefined) {\n circleElement.attr('class', circleElement.class);\n }\n\n if (circleData.title !== undefined) {\n circleElement.append('title').text(circleData.title);\n }\n\n return circleElement;\n};\n\nexport const drawText = function (elem, textData) {\n // Remove and ignore br:s\n const nText = textData.text.replace(//gi, ' ');\n\n const textElem = elem.append('text');\n textElem.attr('x', textData.x);\n textElem.attr('y', textData.y);\n textElem.attr('class', 'legend');\n\n textElem.style('text-anchor', textData.anchor);\n\n if (textData.class !== undefined) {\n textElem.attr('class', textData.class);\n }\n\n const span = textElem.append('tspan');\n span.attr('x', textData.x + textData.textMargin * 2);\n span.text(nText);\n\n return textElem;\n};\n\nexport const drawLabel = function (elem, txtObject) {\n /**\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} cut\n */\n function genPoints(x, y, width, height, cut) {\n return (\n x +\n ',' +\n y +\n ' ' +\n (x + width) +\n ',' +\n y +\n ' ' +\n (x + width) +\n ',' +\n (y + height - cut) +\n ' ' +\n (x + width - cut * 1.2) +\n ',' +\n (y + height) +\n ' ' +\n x +\n ',' +\n (y + height)\n );\n }\n const polygon = elem.append('polygon');\n polygon.attr('points', genPoints(txtObject.x, txtObject.y, 50, 20, 7));\n polygon.attr('class', 'labelBox');\n\n txtObject.y = txtObject.y + txtObject.labelMargin;\n txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin;\n drawText(elem, txtObject);\n};\n\nexport const drawSection = function (elem, section, conf) {\n const g = elem.append('g');\n\n const rect = getNoteRect();\n rect.x = section.x;\n rect.y = section.y;\n rect.fill = section.fill;\n rect.width = conf.width;\n rect.height = conf.height;\n rect.class = 'journey-section section-type-' + section.num;\n rect.rx = 3;\n rect.ry = 3;\n drawRect(g, rect);\n\n _drawTextCandidateFunc(conf)(\n section.text,\n g,\n rect.x,\n rect.y,\n rect.width,\n rect.height,\n { class: 'journey-section section-type-' + section.num },\n conf,\n section.colour\n );\n};\n\nlet taskCount = -1;\n/**\n * Draws an actor in the diagram with the attached line\n *\n * @param {any} elem The HTML element\n * @param {any} task The task to render\n * @param {any} conf The global configuration\n */\nexport const drawTask = function (elem, task, conf) {\n const center = task.x + conf.width / 2;\n const g = elem.append('g');\n taskCount++;\n const maxHeight = 300 + 5 * 30;\n g.append('line')\n .attr('id', 'task' + taskCount)\n .attr('x1', center)\n .attr('y1', task.y)\n .attr('x2', center)\n .attr('y2', maxHeight)\n .attr('class', 'task-line')\n .attr('stroke-width', '1px')\n .attr('stroke-dasharray', '4 2')\n .attr('stroke', '#666');\n\n drawFace(g, {\n cx: center,\n cy: 300 + (5 - task.score) * 30,\n score: task.score,\n });\n\n const rect = getNoteRect();\n rect.x = task.x;\n rect.y = task.y;\n rect.fill = task.fill;\n rect.width = conf.width;\n rect.height = conf.height;\n rect.class = 'task task-type-' + task.num;\n rect.rx = 3;\n rect.ry = 3;\n drawRect(g, rect);\n\n _drawTextCandidateFunc(conf)(\n task.task,\n g,\n rect.x,\n rect.y,\n rect.width,\n rect.height,\n { class: 'task' },\n conf,\n task.colour\n );\n};\n\n/**\n * Draws a background rectangle\n *\n * @param {any} elem The html element\n * @param {any} bounds The bounds of the drawing\n */\nexport const drawBackgroundRect = function (elem, bounds) {\n const rectElem = drawRect(elem, {\n x: bounds.startx,\n y: bounds.starty,\n width: bounds.stopx - bounds.startx,\n height: bounds.stopy - bounds.starty,\n fill: bounds.fill,\n class: 'rect',\n });\n rectElem.lower();\n};\n\nexport const getTextObj = function () {\n return {\n x: 0,\n y: 0,\n fill: undefined,\n 'text-anchor': 'start',\n width: 100,\n height: 100,\n textMargin: 0,\n rx: 0,\n ry: 0,\n };\n};\n\nexport const getNoteRect = function () {\n return {\n x: 0,\n y: 0,\n width: 100,\n anchor: 'start',\n height: 100,\n rx: 0,\n ry: 0,\n };\n};\n\nconst _drawTextCandidateFunc = (function () {\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n * @param {any} colour\n */\n function byText(content, g, x, y, width, height, textAttrs, colour) {\n const text = g\n .append('text')\n .attr('x', x + width / 2)\n .attr('y', y + height / 2 + 5)\n .style('font-color', colour)\n .style('text-anchor', 'middle')\n .text(content);\n _setTextAttrs(text, textAttrs);\n }\n\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n * @param {any} conf\n * @param {any} colour\n */\n function byTspan(content, g, x, y, width, height, textAttrs, conf, colour) {\n const { taskFontSize, taskFontFamily } = conf;\n\n const lines = content.split(//gi);\n for (let i = 0; i < lines.length; i++) {\n const dy = i * taskFontSize - (taskFontSize * (lines.length - 1)) / 2;\n const text = g\n .append('text')\n .attr('x', x + width / 2)\n .attr('y', y)\n .attr('fill', colour)\n .style('text-anchor', 'middle')\n .style('font-size', taskFontSize)\n .style('font-family', taskFontFamily);\n text\n .append('tspan')\n .attr('x', x + width / 2)\n .attr('dy', dy)\n .text(lines[i]);\n\n text\n .attr('y', y + height / 2.0)\n .attr('dominant-baseline', 'central')\n .attr('alignment-baseline', 'central');\n\n _setTextAttrs(text, textAttrs);\n }\n }\n\n /**\n * @param {any} content\n * @param {any} g\n * @param {any} x\n * @param {any} y\n * @param {any} width\n * @param {any} height\n * @param {any} textAttrs\n * @param {any} conf\n */\n function byFo(content, g, x, y, width, height, textAttrs, conf) {\n const body = g.append('switch');\n const f = body\n .append('foreignObject')\n .attr('x', x)\n .attr('y', y)\n .attr('width', width)\n .attr('height', height)\n .attr('position', 'fixed');\n\n const text = f\n .append('xhtml:div')\n .style('display', 'table')\n .style('height', '100%')\n .style('width', '100%');\n\n text\n .append('div')\n .attr('class', 'label')\n .style('display', 'table-cell')\n .style('text-align', 'center')\n .style('vertical-align', 'middle')\n .text(content);\n\n byTspan(content, body, x, y, width, height, textAttrs, conf);\n _setTextAttrs(text, textAttrs);\n }\n\n /**\n * @param {any} toText\n * @param {any} fromTextAttrsDict\n */\n function _setTextAttrs(toText, fromTextAttrsDict) {\n for (const key in fromTextAttrsDict) {\n if (key in fromTextAttrsDict) {\n // noinspection JSUnfilteredForInLoop\n toText.attr(key, fromTextAttrsDict[key]);\n }\n }\n }\n\n return function (conf) {\n return conf.textPlacement === 'fo' ? byFo : conf.textPlacement === 'old' ? byText : byTspan;\n };\n})();\n\nconst initGraphics = function (graphics) {\n graphics\n .append('defs')\n .append('marker')\n .attr('id', 'arrowhead')\n .attr('refX', 5)\n .attr('refY', 2)\n .attr('markerWidth', 6)\n .attr('markerHeight', 4)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 0,0 V 4 L6,2 Z'); // this is actual shape for arrowhead\n};\n\n/**\n * @param {string} text The text to be wrapped\n * @param {number} width The max width of the text\n */\nfunction wrap(text, width) {\n text.each(function () {\n var text = select(this),\n words = text\n .text()\n .split(/(\\s+|
    )/)\n .reverse(),\n word,\n line = [],\n lineHeight = 1.1, // ems\n y = text.attr('y'),\n dy = parseFloat(text.attr('dy')),\n tspan = text\n .text(null)\n .append('tspan')\n .attr('x', 0)\n .attr('y', y)\n .attr('dy', dy + 'em');\n for (let j = 0; j < words.length; j++) {\n word = words[words.length - 1 - j];\n line.push(word);\n tspan.text(line.join(' ').trim());\n if (tspan.node().getComputedTextLength() > width || word === '
    ') {\n line.pop();\n tspan.text(line.join(' ').trim());\n if (word === '
    ') {\n line = [''];\n } else {\n line = [word];\n }\n\n tspan = text\n .append('tspan')\n .attr('x', 0)\n .attr('y', y)\n .attr('dy', lineHeight + 'em')\n .text(word);\n }\n }\n });\n}\n\nexport const drawNode = function (elem, node, fullSection, conf) {\n const section = (fullSection % MAX_SECTIONS) - 1;\n const nodeElem = elem.append('g');\n node.section = section;\n nodeElem.attr(\n 'class',\n (node.class ? node.class + ' ' : '') + 'timeline-node ' + ('section-' + section)\n );\n const bkgElem = nodeElem.append('g');\n\n // Create the wrapped text element\n const textElem = nodeElem.append('g');\n\n const txt = textElem\n .append('text')\n .text(node.descr)\n .attr('dy', '1em')\n .attr('alignment-baseline', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('text-anchor', 'middle')\n .call(wrap, node.width);\n const bbox = txt.node().getBBox();\n const fontSize = conf.fontSize?.replace ? conf.fontSize.replace('px', '') : conf.fontSize;\n node.height = bbox.height + fontSize * 1.1 * 0.5 + node.padding;\n node.height = Math.max(node.height, node.maxHeight);\n node.width = node.width + 2 * node.padding;\n\n textElem.attr('transform', 'translate(' + node.width / 2 + ', ' + node.padding / 2 + ')');\n\n // Create the background element\n defaultBkg(bkgElem, node, section, conf);\n\n return node;\n};\n\nexport const getVirtualNodeHeight = function (elem, node, conf) {\n const textElem = elem.append('g');\n const txt = textElem\n .append('text')\n .text(node.descr)\n .attr('dy', '1em')\n .attr('alignment-baseline', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('text-anchor', 'middle')\n .call(wrap, node.width);\n const bbox = txt.node().getBBox();\n const fontSize = conf.fontSize?.replace ? conf.fontSize.replace('px', '') : conf.fontSize;\n textElem.remove();\n return bbox.height + fontSize * 1.1 * 0.5 + node.padding;\n};\n\nconst defaultBkg = function (elem, node, section) {\n const rd = 5;\n elem\n .append('path')\n .attr('id', 'node-' + node.id)\n .attr('class', 'node-bkg node-' + node.type)\n .attr(\n 'd',\n `M0 ${node.height - rd} v${-node.height + 2 * rd} q0,-5 5,-5 h${\n node.width - 2 * rd\n } q5,0 5,5 v${node.height - rd} H0 Z`\n );\n\n elem\n .append('line')\n .attr('class', 'node-line-' + section)\n .attr('x1', 0)\n .attr('y1', node.height)\n .attr('x2', node.width)\n .attr('y2', node.height);\n};\n\nexport default {\n drawRect,\n drawCircle,\n drawSection,\n drawText,\n drawLabel,\n drawTask,\n drawBackgroundRect,\n getTextObj,\n getNoteRect,\n initGraphics,\n drawNode,\n getVirtualNodeHeight,\n};\n", "// @ts-nocheck - don't check until handle it\nimport type { Selection } from 'd3';\nimport { select } from 'd3';\nimport svgDraw from './svgDraw.js';\nimport { log } from '../../logger.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { setupGraphViewbox } from '../../setupGraphViewbox.js';\nimport type { Diagram } from '../../Diagram.js';\nimport type { MermaidConfig } from '../../config.type.js';\n\ninterface Block {\n number: number;\n descr: TDesc;\n section: TSection;\n width: number;\n padding: number;\n maxHeight: number;\n}\n\ninterface TimelineTask {\n id: number;\n section: string;\n type: string;\n task: string;\n score: number;\n events: string[];\n}\nexport const draw = function (text: string, id: string, version: string, diagObj: Diagram) {\n //1. Fetch the configuration\n const conf = getConfig();\n const LEFT_MARGIN = conf.timeline?.leftMargin ?? 50;\n\n log.debug('timeline', diagObj.db);\n\n const securityLevel = conf.securityLevel;\n // Handle root and Document for when rendering in sandbox mode\n let sandboxElement;\n if (securityLevel === 'sandbox') {\n sandboxElement = select('#i' + id);\n }\n const root =\n securityLevel === 'sandbox'\n ? select(sandboxElement.nodes()[0].contentDocument.body)\n : select('body');\n\n const svg = root.select('#' + id);\n\n svg.append('g');\n\n //4. Fetch the diagram data\n // @ts-expect-error - db not typed yet\n const tasks: TimelineTask[] = diagObj.db.getTasks();\n // @ts-expect-error - db not typed yet\n const title = diagObj.db.getCommonDb().getDiagramTitle();\n log.debug('task', tasks);\n\n //5. Initialize the diagram\n svgDraw.initGraphics(svg);\n\n // fetch Sections\n // @ts-expect-error - db not typed yet\n const sections: string[] = diagObj.db.getSections();\n log.debug('sections', sections);\n\n let maxSectionHeight = 0;\n let maxTaskHeight = 0;\n //let sectionBeginX = 0;\n let depthY = 0;\n let sectionBeginY = 0;\n let masterX = 50 + LEFT_MARGIN;\n //sectionBeginX = masterX;\n let masterY = 50;\n sectionBeginY = 50;\n //draw sections\n let sectionNumber = 0;\n let hasSections = true;\n\n //Calculate the max height of the sections\n sections.forEach(function (section: string) {\n const sectionNode: Block = {\n number: sectionNumber,\n descr: section,\n section: sectionNumber,\n width: 150,\n padding: 20,\n maxHeight: maxSectionHeight,\n };\n const sectionHeight = svgDraw.getVirtualNodeHeight(svg, sectionNode, conf);\n log.debug('sectionHeight before draw', sectionHeight);\n maxSectionHeight = Math.max(maxSectionHeight, sectionHeight + 20);\n });\n\n //tasks length and maxEventCount\n let maxEventCount = 0;\n let maxEventLineLength = 0;\n log.debug('tasks.length', tasks.length);\n //calculate max task height\n // for loop till tasks.length\n\n for (const [i, task] of tasks.entries()) {\n const taskNode: Block = {\n number: i,\n descr: task,\n section: task.section,\n width: 150,\n padding: 20,\n maxHeight: maxTaskHeight,\n };\n const taskHeight = svgDraw.getVirtualNodeHeight(svg, taskNode, conf);\n log.debug('taskHeight before draw', taskHeight);\n maxTaskHeight = Math.max(maxTaskHeight, taskHeight + 20);\n\n //calculate maxEventCount\n maxEventCount = Math.max(maxEventCount, task.events.length);\n //calculate maxEventLineLength\n let maxEventLineLengthTemp = 0;\n for (const event of task.events) {\n const eventNode = {\n descr: event,\n section: task.section,\n number: task.section,\n width: 150,\n padding: 20,\n maxHeight: 50,\n };\n maxEventLineLengthTemp += svgDraw.getVirtualNodeHeight(svg, eventNode, conf);\n }\n // Add spacing between events (10px per event except the last one)\n if (task.events.length > 0) {\n maxEventLineLengthTemp += (task.events.length - 1) * 10;\n }\n maxEventLineLength = Math.max(maxEventLineLength, maxEventLineLengthTemp);\n }\n\n log.debug('maxSectionHeight before draw', maxSectionHeight);\n log.debug('maxTaskHeight before draw', maxTaskHeight);\n\n if (sections && sections.length > 0) {\n sections.forEach((section) => {\n //filter task where tasks.section == section\n const tasksForSection = tasks.filter((task) => task.section === section);\n\n const sectionNode: Block = {\n number: sectionNumber,\n descr: section,\n section: sectionNumber,\n width: 200 * Math.max(tasksForSection.length, 1) - 50,\n padding: 20,\n maxHeight: maxSectionHeight,\n };\n log.debug('sectionNode', sectionNode);\n const sectionNodeWrapper = svg.append('g');\n const node = svgDraw.drawNode(sectionNodeWrapper, sectionNode, sectionNumber, conf);\n log.debug('sectionNode output', node);\n\n sectionNodeWrapper.attr('transform', `translate(${masterX}, ${sectionBeginY})`);\n\n masterY += maxSectionHeight + 50;\n\n //draw tasks for this section\n if (tasksForSection.length > 0) {\n drawTasks(\n svg,\n tasksForSection,\n sectionNumber,\n masterX,\n masterY,\n maxTaskHeight,\n conf,\n maxEventCount,\n maxEventLineLength,\n maxSectionHeight,\n false\n );\n }\n // todo replace with total width of section and its tasks\n masterX += 200 * Math.max(tasksForSection.length, 1);\n\n masterY = sectionBeginY;\n sectionNumber++;\n });\n } else {\n //draw tasks\n hasSections = false;\n drawTasks(\n svg,\n tasks,\n sectionNumber,\n masterX,\n masterY,\n maxTaskHeight,\n conf,\n maxEventCount,\n maxEventLineLength,\n maxSectionHeight,\n true\n );\n }\n\n // Get BBox of the diagram\n const box = svg.node().getBBox();\n log.debug('bounds', box);\n\n if (title) {\n svg\n .append('text')\n .text(title)\n .attr('x', box.width / 2 - LEFT_MARGIN)\n .attr('font-size', '4ex')\n .attr('font-weight', 'bold')\n .attr('y', 20);\n }\n //5. Draw the diagram\n depthY = hasSections ? maxSectionHeight + maxTaskHeight + 150 : maxTaskHeight + 100;\n\n const lineWrapper = svg.append('g').attr('class', 'lineWrapper');\n // Draw activity line\n lineWrapper\n .append('line')\n .attr('x1', LEFT_MARGIN)\n .attr('y1', depthY) // One section head + one task + margins\n .attr('x2', box.width + 3 * LEFT_MARGIN) // Subtract stroke width so arrow point is retained\n .attr('y2', depthY)\n .attr('stroke-width', 4)\n .attr('stroke', 'black')\n .attr('marker-end', 'url(#arrowhead)');\n\n // Setup the view box and size of the svg element\n setupGraphViewbox(\n undefined,\n svg,\n conf.timeline?.padding ?? 50,\n conf.timeline?.useMaxWidth ?? false\n );\n\n // addSVGAccessibilityFields(diagObj.db, diagram, id);\n};\n\nexport const drawTasks = function (\n diagram: Selection,\n tasks: TimelineTask[],\n sectionColor: number,\n masterX: number,\n masterY: number,\n maxTaskHeight: number,\n conf: MermaidConfig,\n maxEventCount: number,\n maxEventLineLength: number,\n maxSectionHeight: number,\n isWithoutSections: boolean\n) {\n // Draw the tasks\n for (const task of tasks) {\n // create node from task\n const taskNode = {\n descr: task.task,\n section: sectionColor,\n number: sectionColor,\n width: 150,\n padding: 20,\n maxHeight: maxTaskHeight,\n };\n\n log.debug('taskNode', taskNode);\n // create task wrapper\n\n const taskWrapper = diagram.append('g').attr('class', 'taskWrapper');\n const node = svgDraw.drawNode(taskWrapper, taskNode, sectionColor, conf);\n const taskHeight = node.height;\n //log task height\n log.debug('taskHeight after draw', taskHeight);\n taskWrapper.attr('transform', `translate(${masterX}, ${masterY})`);\n\n // update max task height\n maxTaskHeight = Math.max(maxTaskHeight, taskHeight);\n\n // if task has events, draw them\n if (task.events) {\n // draw a line between the task and the events\n const lineWrapper = diagram.append('g').attr('class', 'lineWrapper');\n let lineLength = maxTaskHeight;\n //add margin to task\n masterY += 100;\n lineLength =\n lineLength + drawEvents(diagram, task.events, sectionColor, masterX, masterY, conf);\n masterY -= 100;\n\n lineWrapper\n .append('line')\n .attr('x1', masterX + 190 / 2)\n .attr('y1', masterY + maxTaskHeight) // Start from bottom of task box\n .attr('x2', masterX + 190 / 2) // Same x coordinate for vertical line\n .attr('y2', masterY + maxTaskHeight + 100 + maxEventLineLength + 100) // End at consistent depth with ample padding for visible dashed lines and arrowheads\n .attr('stroke-width', 2)\n .attr('stroke', 'black')\n .attr('marker-end', 'url(#arrowhead)')\n .attr('stroke-dasharray', '5,5');\n }\n\n masterX = masterX + 200;\n if (isWithoutSections && !conf.timeline?.disableMulticolor) {\n sectionColor++;\n }\n }\n\n // reset Y coordinate for next section\n masterY = masterY - 10;\n};\n\nexport const drawEvents = function (\n diagram: Selection,\n events: string[],\n sectionColor: number,\n masterX: number,\n masterY: number,\n conf: MermaidConfig\n) {\n let maxEventHeight = 0;\n const eventBeginY = masterY;\n masterY = masterY + 100;\n // Draw the events\n for (const event of events) {\n // create node from event\n const eventNode: Block = {\n descr: event,\n section: sectionColor,\n number: sectionColor,\n width: 150,\n padding: 20,\n maxHeight: 50,\n };\n\n //log task node\n log.debug('eventNode', eventNode);\n // create event wrapper\n const eventWrapper = diagram.append('g').attr('class', 'eventWrapper');\n const node = svgDraw.drawNode(eventWrapper, eventNode, sectionColor, conf);\n const eventHeight = node.height;\n maxEventHeight = maxEventHeight + eventHeight;\n eventWrapper.attr('transform', `translate(${masterX}, ${masterY})`);\n masterY = masterY + 10 + eventHeight;\n }\n // set masterY back to eventBeginY\n masterY = eventBeginY;\n return maxEventHeight;\n};\n\nexport default {\n setConf: () => {\n // no-op\n },\n draw,\n};\n", "import { darken, lighten, isDark } from 'khroma';\n\nconst genSections = (options) => {\n let sections = '';\n\n for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {\n options['lineColor' + i] = options['lineColor' + i] || options['cScaleInv' + i];\n if (isDark(options['lineColor' + i])) {\n options['lineColor' + i] = lighten(options['lineColor' + i], 20);\n } else {\n options['lineColor' + i] = darken(options['lineColor' + i], 20);\n }\n }\n\n for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {\n const sw = '' + (17 - 3 * i);\n sections += `\n .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${\n i - 1\n } path {\n fill: ${options['cScale' + i]};\n }\n .section-${i - 1} text {\n fill: ${options['cScaleLabel' + i]};\n }\n .node-icon-${i - 1} {\n font-size: 40px;\n color: ${options['cScaleLabel' + i]};\n }\n .section-edge-${i - 1}{\n stroke: ${options['cScale' + i]};\n }\n .edge-depth-${i - 1}{\n stroke-width: ${sw};\n }\n .section-${i - 1} line {\n stroke: ${options['cScaleInv' + i]} ;\n stroke-width: 3;\n }\n\n .lineWrapper line{\n stroke: ${options['cScaleLabel' + i]} ;\n }\n\n .disabled, .disabled circle, .disabled text {\n fill: lightgray;\n }\n .disabled text {\n fill: #efefef;\n }\n `;\n }\n return sections;\n};\n\nconst getStyles = (options) =>\n `\n .edge {\n stroke-width: 3;\n }\n ${genSections(options)}\n .section-root rect, .section-root path, .section-root circle {\n fill: ${options.git0};\n }\n .section-root text {\n fill: ${options.gitBranchLabel0};\n }\n .icon-container {\n height:100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .edge {\n fill: none;\n }\n .eventWrapper {\n filter: brightness(120%);\n }\n`;\nexport default getStyles;\n", "// @ts-ignore: JISON doesn't support types\nimport parser from './parser/timeline.jison';\nimport * as db from './timelineDb.js';\nimport renderer from './timelineRenderer.js';\nimport styles from './styles.js';\n\nexport const diagram = {\n db,\n renderer,\n parser,\n styles,\n};\n", "/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,4],$V1=[1,13],$V2=[1,12],$V3=[1,15],$V4=[1,16],$V5=[1,20],$V6=[1,19],$V7=[6,7,8],$V8=[1,26],$V9=[1,24],$Va=[1,25],$Vb=[6,7,11],$Vc=[1,6,13,15,16,19,22],$Vd=[1,33],$Ve=[1,34],$Vf=[1,6,7,11,13,15,16,19,22];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"mindMap\":4,\"spaceLines\":5,\"SPACELINE\":6,\"NL\":7,\"MINDMAP\":8,\"document\":9,\"stop\":10,\"EOF\":11,\"statement\":12,\"SPACELIST\":13,\"node\":14,\"ICON\":15,\"CLASS\":16,\"nodeWithId\":17,\"nodeWithoutId\":18,\"NODE_DSTART\":19,\"NODE_DESCR\":20,\"NODE_DEND\":21,\"NODE_ID\":22,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",6:\"SPACELINE\",7:\"NL\",8:\"MINDMAP\",11:\"EOF\",13:\"SPACELIST\",15:\"ICON\",16:\"CLASS\",19:\"NODE_DSTART\",20:\"NODE_DESCR\",21:\"NODE_DEND\",22:\"NODE_ID\"},\nproductions_: [0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 6: case 7:\n return yy; \nbreak;\ncase 8:\nyy.getLogger().trace('Stop NL ');\nbreak;\ncase 9:\nyy.getLogger().trace('Stop EOF ');\nbreak;\ncase 11:\nyy.getLogger().trace('Stop NL2 ');\nbreak;\ncase 12:\nyy.getLogger().trace('Stop EOF2 ');\nbreak;\ncase 15:\n yy.getLogger().info('Node: ',$$[$0].id);yy.addNode($$[$0-1].length, $$[$0].id, $$[$0].descr, $$[$0].type); \nbreak;\ncase 16:\n yy.getLogger().trace('Icon: ',$$[$0]);yy.decorateNode({icon: $$[$0]}); \nbreak;\ncase 17: case 21:\n yy.decorateNode({class: $$[$0]}); \nbreak;\ncase 18:\n yy.getLogger().trace('SPACELIST');\nbreak;\ncase 19:\n yy.getLogger().trace('Node: ',$$[$0].id);yy.addNode(0, $$[$0].id, $$[$0].descr, $$[$0].type); \nbreak;\ncase 20:\n yy.decorateNode({icon: $$[$0]}); \nbreak;\ncase 25:\n yy.getLogger().trace(\"node found ..\", $$[$0-2]); this.$ = { id: $$[$0-1], descr: $$[$0-1], type: yy.getType($$[$0-2], $$[$0]) }; \nbreak;\ncase 26:\n this.$ = { id: $$[$0], descr: $$[$0], type: yy.nodeType.DEFAULT }; \nbreak;\ncase 27:\n yy.getLogger().trace(\"node found ..\", $$[$0-3]); this.$ = { id: $$[$0-3], descr: $$[$0-1], type: yy.getType($$[$0-2], $$[$0]) }; \nbreak;\n}\n},\ntable: [{3:1,4:2,5:3,6:[1,5],8:$V0},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:$V0},{6:$V1,7:[1,10],9:9,12:11,13:$V2,14:14,15:$V3,16:$V4,17:17,18:18,19:$V5,22:$V6},o($V7,[2,3]),{1:[2,2]},o($V7,[2,4]),o($V7,[2,5]),{1:[2,6],6:$V1,12:21,13:$V2,14:14,15:$V3,16:$V4,17:17,18:18,19:$V5,22:$V6},{6:$V1,9:22,12:11,13:$V2,14:14,15:$V3,16:$V4,17:17,18:18,19:$V5,22:$V6},{6:$V8,7:$V9,10:23,11:$Va},o($Vb,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:$V5,22:$V6}),o($Vb,[2,18]),o($Vb,[2,19]),o($Vb,[2,20]),o($Vb,[2,21]),o($Vb,[2,23]),o($Vb,[2,24]),o($Vb,[2,26],{19:[1,30]}),{20:[1,31]},{6:$V8,7:$V9,10:32,11:$Va},{1:[2,7],6:$V1,12:21,13:$V2,14:14,15:$V3,16:$V4,17:17,18:18,19:$V5,22:$V6},o($Vc,[2,14],{7:$Vd,11:$Ve}),o($Vf,[2,8]),o($Vf,[2,9]),o($Vf,[2,10]),o($Vb,[2,15]),o($Vb,[2,16]),o($Vb,[2,17]),{20:[1,35]},{21:[1,36]},o($Vc,[2,13],{7:$Vd,11:$Ve}),o($Vf,[2,11]),o($Vf,[2,12]),{21:[1,37]},o($Vb,[2,25]),o($Vb,[2,27])],\ndefaultActions: {2:[2,1],6:[2,2]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// 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.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n 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(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\n\t// Pre-lexer code can go here\n\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:yy.getLogger().trace('Found comment',yy_.yytext); return 6;\nbreak;\ncase 1:return 8;\nbreak;\ncase 2: this.begin('CLASS'); \nbreak;\ncase 3: this.popState();return 16; \nbreak;\ncase 4: this.popState();\nbreak;\ncase 5: yy.getLogger().trace('Begin icon');this.begin('ICON'); \nbreak;\ncase 6:yy.getLogger().trace('SPACELINE');return 6 /* skip all whitespace */ ;\nbreak;\ncase 7:return 7;\nbreak;\ncase 8: return 15; \nbreak;\ncase 9:yy.getLogger().trace('end icon');this.popState();\nbreak;\ncase 10: yy.getLogger().trace('Exploding node'); this.begin('NODE');return 19; \nbreak;\ncase 11: yy.getLogger().trace('Cloud'); this.begin('NODE');return 19; \nbreak;\ncase 12: yy.getLogger().trace('Explosion Bang'); this.begin('NODE');return 19; \nbreak;\ncase 13: yy.getLogger().trace('Cloud Bang'); this.begin('NODE');return 19; \nbreak;\ncase 14: this.begin('NODE');return 19; \nbreak;\ncase 15: this.begin('NODE');return 19; \nbreak;\ncase 16: this.begin('NODE');return 19; \nbreak;\ncase 17: this.begin('NODE');return 19; \nbreak;\ncase 18:return 13 /* skip all whitespace */ ;\nbreak;\ncase 19:return 22;\nbreak;\ncase 20:return 11;\nbreak;\ncase 21: this.begin(\"NSTR2\");\nbreak;\ncase 22: return \"NODE_DESCR\";\nbreak;\ncase 23: this.popState();\nbreak;\ncase 24: yy.getLogger().trace('Starting NSTR');this.begin(\"NSTR\");\nbreak;\ncase 25: yy.getLogger().trace('description:', yy_.yytext); return \"NODE_DESCR\";\nbreak;\ncase 26:this.popState();\nbreak;\ncase 27:this.popState();yy.getLogger().trace('node end ))');return \"NODE_DEND\";\nbreak;\ncase 28:this.popState();yy.getLogger().trace('node end )');return \"NODE_DEND\";\nbreak;\ncase 29:this.popState();yy.getLogger().trace('node end ...',yy_.yytext);return \"NODE_DEND\";\nbreak;\ncase 30:this.popState();yy.getLogger().trace('node end ((');return \"NODE_DEND\";\nbreak;\ncase 31:this.popState();yy.getLogger().trace('node end (-');return \"NODE_DEND\";\nbreak;\ncase 32:this.popState();yy.getLogger().trace('node end (-');return \"NODE_DEND\";\nbreak;\ncase 33:this.popState();yy.getLogger().trace('node end ((');return \"NODE_DEND\";\nbreak;\ncase 34:this.popState();yy.getLogger().trace('node end ((');return \"NODE_DEND\";\nbreak;\ncase 35: yy.getLogger().trace('Long description:', yy_.yytext); return 20;\nbreak;\ncase 36: yy.getLogger().trace('Long description:', yy_.yytext); return 20;\nbreak;\n}\n},\nrules: [/^(?:\\s*%%.*)/i,/^(?:mindmap\\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\\n)/i,/^(?:::icon\\()/i,/^(?:[\\s]+[\\n])/i,/^(?:[\\n]+)/i,/^(?:[^\\)]+)/i,/^(?:\\))/i,/^(?:-\\))/i,/^(?:\\(-)/i,/^(?:\\)\\))/i,/^(?:\\))/i,/^(?:\\(\\()/i,/^(?:\\{\\{)/i,/^(?:\\()/i,/^(?:\\[)/i,/^(?:[\\s]+)/i,/^(?:[^\\(\\[\\n\\)\\{\\}]+)/i,/^(?:$)/i,/^(?:[\"][`])/i,/^(?:[^`\"]+)/i,/^(?:[`][\"])/i,/^(?:[\"])/i,/^(?:[^\"]+)/i,/^(?:[\"])/i,/^(?:[\\)]\\))/i,/^(?:[\\)])/i,/^(?:[\\]])/i,/^(?:\\}\\})/i,/^(?:\\(-)/i,/^(?:-\\))/i,/^(?:\\(\\()/i,/^(?:\\()/i,/^(?:[^\\)\\]\\(\\}]+)/i,/^(?:.+(?!\\(\\())/i],\nconditions: {\"CLASS\":{\"rules\":[3,4],\"inclusive\":false},\"ICON\":{\"rules\":[8,9],\"inclusive\":false},\"NSTR2\":{\"rules\":[22,23],\"inclusive\":false},\"NSTR\":{\"rules\":[25,26],\"inclusive\":false},\"NODE\":{\"rules\":[21,24,27,28,29,30,31,32,33,34,35,36],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})(); \n\tparser.parser = parser;\n\texport { parser };\n\texport default parser;\n\t", "import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n", "let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n", "const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n", "import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n", "export { default as MAX } from './max.js';\nexport { default as NIL } from './nil.js';\nexport { default as parse } from './parse.js';\nexport { default as stringify } from './stringify.js';\nexport { default as v1 } from './v1.js';\nexport { default as v1ToV6 } from './v1ToV6.js';\nexport { default as v3 } from './v3.js';\nexport { default as v4 } from './v4.js';\nexport { default as v5 } from './v5.js';\nexport { default as v6 } from './v6.js';\nexport { default as v6ToV1 } from './v6ToV1.js';\nexport { default as v7 } from './v7.js';\nexport { default as validate } from './validate.js';\nexport { default as version } from './version.js';\n", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { v4 } from 'uuid';\nimport type { D3Element } from '../../types.js';\nimport { sanitizeText } from '../../diagrams/common/common.js';\nimport { log } from '../../logger.js';\nimport type { MindmapNode } from './mindmapTypes.js';\nimport defaultConfig from '../../defaultConfig.js';\nimport type { LayoutData, Node, Edge } from '../../rendering-util/types.js';\nimport { getUserDefinedConfig } from '../../config.js';\n\n// Extend Node type for mindmap-specific properties\nexport type MindmapLayoutNode = Node & {\n level: number;\n nodeId: string;\n type: number;\n section?: number;\n};\n\n// Extend Edge type for mindmap-specific properties\nexport type MindmapLayoutEdge = Edge & {\n depth: number;\n section?: number;\n};\n\nconst nodeType = {\n DEFAULT: 0,\n NO_BORDER: 0,\n ROUNDED_RECT: 1,\n RECT: 2,\n CIRCLE: 3,\n CLOUD: 4,\n BANG: 5,\n HEXAGON: 6,\n} as const;\n\nexport class MindmapDB {\n private nodes: MindmapNode[] = [];\n private count = 0;\n private elements: Record = {};\n private baseLevel?: number;\n public readonly nodeType: typeof nodeType;\n\n constructor() {\n this.getLogger = this.getLogger.bind(this);\n this.nodeType = nodeType;\n this.clear();\n this.getType = this.getType.bind(this);\n this.getElementById = this.getElementById.bind(this);\n this.getParent = this.getParent.bind(this);\n this.getMindmap = this.getMindmap.bind(this);\n this.addNode = this.addNode.bind(this);\n this.decorateNode = this.decorateNode.bind(this);\n }\n public clear() {\n this.nodes = [];\n this.count = 0;\n this.elements = {};\n this.baseLevel = undefined;\n }\n\n public getParent(level: number): MindmapNode | null {\n for (let i = this.nodes.length - 1; i >= 0; i--) {\n if (this.nodes[i].level < level) {\n return this.nodes[i];\n }\n }\n return null;\n }\n\n public getMindmap(): MindmapNode | null {\n return this.nodes.length > 0 ? this.nodes[0] : null;\n }\n\n public addNode(level: number, id: string, descr: string, type: number): void {\n log.info('addNode', level, id, descr, type);\n\n let isRoot = false;\n\n if (this.nodes.length === 0) {\n this.baseLevel = level;\n level = 0;\n isRoot = true;\n } else if (this.baseLevel !== undefined) {\n level = level - this.baseLevel;\n isRoot = false;\n }\n\n const conf = getConfig();\n let padding = conf.mindmap?.padding ?? defaultConfig.mindmap.padding;\n\n switch (type) {\n case this.nodeType.ROUNDED_RECT:\n case this.nodeType.RECT:\n case this.nodeType.HEXAGON:\n padding *= 2;\n break;\n }\n\n const node: MindmapNode = {\n id: this.count++,\n nodeId: sanitizeText(id, conf),\n level,\n descr: sanitizeText(descr, conf),\n type,\n children: [],\n width: conf.mindmap?.maxNodeWidth ?? defaultConfig.mindmap.maxNodeWidth,\n padding,\n isRoot,\n };\n\n const parent = this.getParent(level);\n if (parent) {\n parent.children.push(node);\n this.nodes.push(node);\n } else {\n if (isRoot) {\n this.nodes.push(node);\n } else {\n throw new Error(\n `There can be only one root. No parent could be found for (\"${node.descr}\")`\n );\n }\n }\n }\n\n public getType(startStr: string, endStr: string) {\n log.debug('In get type', startStr, endStr);\n switch (startStr) {\n case '[':\n return this.nodeType.RECT;\n case '(':\n return endStr === ')' ? this.nodeType.ROUNDED_RECT : this.nodeType.CLOUD;\n case '((':\n return this.nodeType.CIRCLE;\n case ')':\n return this.nodeType.CLOUD;\n case '))':\n return this.nodeType.BANG;\n case '{{':\n return this.nodeType.HEXAGON;\n default:\n return this.nodeType.DEFAULT;\n }\n }\n\n public setElementForId(id: number, element: D3Element): void {\n this.elements[id] = element;\n }\n public getElementById(id: number) {\n return this.elements[id];\n }\n\n public decorateNode(decoration?: { class?: string; icon?: string }): void {\n if (!decoration) {\n return;\n }\n\n const config = getConfig();\n const node = this.nodes[this.nodes.length - 1];\n if (decoration.icon) {\n node.icon = sanitizeText(decoration.icon, config);\n }\n if (decoration.class) {\n node.class = sanitizeText(decoration.class, config);\n }\n }\n\n type2Str(type: number): string {\n switch (type) {\n case this.nodeType.DEFAULT:\n return 'no-border';\n case this.nodeType.RECT:\n return 'rect';\n case this.nodeType.ROUNDED_RECT:\n return 'rounded-rect';\n case this.nodeType.CIRCLE:\n return 'circle';\n case this.nodeType.CLOUD:\n return 'cloud';\n case this.nodeType.BANG:\n return 'bang';\n case this.nodeType.HEXAGON:\n return 'hexgon'; // cspell: disable-line\n default:\n return 'no-border';\n }\n }\n\n /**\n * Assign section numbers to nodes based on their position relative to root\n * @param node - The mindmap node to process\n * @param sectionNumber - The section number to assign (undefined for root)\n */\n public assignSections(node: MindmapNode, sectionNumber?: number): void {\n // For root node, section should be undefined (not -1)\n if (node.level === 0) {\n node.section = undefined;\n } else {\n // For non-root nodes, assign the section number\n node.section = sectionNumber;\n }\n // For root node's children, assign section numbers based on their index\n // For other nodes, inherit parent's section number\n if (node.children) {\n for (const [index, child] of node.children.entries()) {\n const childSectionNumber = node.level === 0 ? index : sectionNumber;\n this.assignSections(child, childSectionNumber);\n }\n }\n }\n\n /**\n * Convert mindmap tree structure to flat array of nodes\n * @param node - The mindmap node to process\n * @param processedNodes - Array to collect processed nodes\n */\n public flattenNodes(node: MindmapNode, processedNodes: MindmapLayoutNode[]): void {\n // Build CSS classes for the node\n const cssClasses = ['mindmap-node'];\n\n if (node.isRoot === true) {\n // Root node gets special classes\n cssClasses.push('section-root', 'section--1');\n } else if (node.section !== undefined) {\n // Child nodes get section class based on their section number\n cssClasses.push(`section-${node.section}`);\n }\n\n // Add any custom classes from the node\n if (node.class) {\n cssClasses.push(node.class);\n }\n\n const classes = cssClasses.join(' ');\n\n // Map mindmap node type to valid shape name\n const getShapeFromType = (type: number) => {\n switch (type) {\n case nodeType.CIRCLE:\n return 'mindmapCircle';\n case nodeType.RECT:\n return 'rect';\n case nodeType.ROUNDED_RECT:\n return 'rounded';\n case nodeType.CLOUD:\n return 'cloud';\n case nodeType.BANG:\n return 'bang';\n case nodeType.HEXAGON:\n return 'hexagon';\n case nodeType.DEFAULT:\n return 'defaultMindmapNode';\n case nodeType.NO_BORDER:\n default:\n return 'rect';\n }\n };\n\n const processedNode: MindmapLayoutNode = {\n id: node.id.toString(),\n domId: 'node_' + node.id.toString(),\n label: node.descr,\n isGroup: false,\n shape: getShapeFromType(node.type),\n width: node.width,\n height: node.height ?? 0,\n padding: node.padding,\n cssClasses: classes,\n cssStyles: [],\n look: 'default',\n icon: node.icon,\n x: node.x,\n y: node.y,\n // Mindmap-specific properties\n level: node.level,\n nodeId: node.nodeId,\n type: node.type,\n section: node.section,\n };\n\n processedNodes.push(processedNode);\n\n // Recursively process children\n if (node.children) {\n for (const child of node.children) {\n this.flattenNodes(child, processedNodes);\n }\n }\n }\n\n /**\n * Generate edges from parent-child relationships in mindmap tree\n * @param node - The mindmap node to process\n * @param edges - Array to collect edges\n */\n public generateEdges(node: MindmapNode, edges: MindmapLayoutEdge[]): void {\n if (!node.children) {\n return;\n }\n for (const child of node.children) {\n // Build CSS classes for the edge\n let edgeClasses = 'edge';\n\n // Add section-specific classes based on the child's section\n if (child.section !== undefined) {\n edgeClasses += ` section-edge-${child.section}`;\n }\n\n // Add depth class based on the parent's level + 1 (depth of the edge)\n const edgeDepth = node.level + 1;\n edgeClasses += ` edge-depth-${edgeDepth}`;\n\n const edge: MindmapLayoutEdge = {\n id: `edge_${node.id}_${child.id}`,\n start: node.id.toString(),\n end: child.id.toString(),\n type: 'normal',\n curve: 'basis',\n thickness: 'normal',\n look: 'default',\n classes: edgeClasses,\n // Store mindmap-specific data\n depth: node.level,\n section: child.section,\n };\n\n edges.push(edge);\n\n // Recursively process child edges\n this.generateEdges(child, edges);\n }\n }\n\n /**\n * Get structured data for layout algorithms\n * Following the pattern established by ER diagrams\n * @returns Structured data containing nodes, edges, and config\n */\n public getData(): LayoutData {\n const mindmapRoot = this.getMindmap();\n const config = getConfig();\n\n const userDefinedConfig = getUserDefinedConfig();\n const hasUserDefinedLayout = userDefinedConfig.layout !== undefined;\n\n const finalConfig = config;\n if (!hasUserDefinedLayout) {\n finalConfig.layout = 'cose-bilkent';\n }\n\n if (!mindmapRoot) {\n return {\n nodes: [],\n edges: [],\n config: finalConfig,\n };\n }\n log.debug('getData: mindmapRoot', mindmapRoot, config);\n\n // Assign section numbers to all nodes based on their position relative to root\n this.assignSections(mindmapRoot);\n\n // Convert tree structure to flat arrays\n const processedNodes: MindmapLayoutNode[] = [];\n const processedEdges: MindmapLayoutEdge[] = [];\n\n this.flattenNodes(mindmapRoot, processedNodes);\n this.generateEdges(mindmapRoot, processedEdges);\n\n log.debug(\n `getData: processed ${processedNodes.length} nodes and ${processedEdges.length} edges`\n );\n\n // Create shapes map for ELK compatibility\n const shapes = new Map();\n for (const node of processedNodes) {\n shapes.set(node.id, {\n shape: node.shape,\n width: node.width,\n height: node.height,\n padding: node.padding,\n });\n }\n\n return {\n nodes: processedNodes,\n edges: processedEdges,\n config: finalConfig,\n // Store the root node for mindmap-specific layout algorithms\n rootNode: mindmapRoot,\n // Properties required by dagre layout algorithm\n markers: ['point'], // Mindmaps don't use markers\n direction: 'TB', // Top-to-bottom direction for mindmaps\n nodeSpacing: 50, // Default spacing between nodes\n rankSpacing: 50, // Default spacing between ranks\n // Add shapes for ELK compatibility\n shapes: Object.fromEntries(shapes),\n // Additional properties that layout algorithms might expect\n type: 'mindmap',\n diagramId: 'mindmap-' + v4(),\n };\n }\n\n // Expose logger to grammar\n public getLogger() {\n return log;\n }\n}\n", "import type { DrawDefinition } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport { getDiagramElement } from '../../rendering-util/insertElementsForSize.js';\nimport { getRegisteredLayoutAlgorithm, render } from '../../rendering-util/render.js';\nimport { setupViewPortForSVG } from '../../rendering-util/setupViewPortForSVG.js';\nimport type { LayoutData } from '../../rendering-util/types.js';\nimport type { FilledMindMapNode } from './mindmapTypes.js';\nimport defaultConfig from '../../defaultConfig.js';\nimport type { MindmapDB } from './mindmapDb.js';\n\n/**\n * Update the layout data with actual node dimensions after drawing\n */\nfunction _updateNodeDimensions(data4Layout: LayoutData, mindmapRoot: FilledMindMapNode) {\n const updateNode = (node: FilledMindMapNode) => {\n // Find the corresponding node in the layout data\n const layoutNode = data4Layout.nodes.find((n) => n.id === node.id.toString());\n if (layoutNode) {\n // Update with the actual dimensions calculated by drawNode\n layoutNode.width = node.width;\n layoutNode.height = node.height;\n log.debug('Updated node dimensions:', node.id, 'width:', node.width, 'height:', node.height);\n }\n\n // Recursively update children\n node.children?.forEach(updateNode);\n };\n\n updateNode(mindmapRoot);\n}\n\nexport const draw: DrawDefinition = async (text, id, _version, diagObj) => {\n log.debug('Rendering mindmap diagram\\n' + text);\n\n // Draw the nodes first to get their dimensions, then update the layout data\n const db = diagObj.db as MindmapDB;\n\n // The getData method provided in all supported diagrams is used to extract the data from the parsed structure\n // into the Layout data format\n const data4Layout = db.getData();\n\n // Create the root SVG - the element is the div containing the SVG element\n const svg = getDiagramElement(id, data4Layout.config.securityLevel);\n\n data4Layout.type = diagObj.type;\n data4Layout.layoutAlgorithm = getRegisteredLayoutAlgorithm(data4Layout.config.layout, {\n fallback: 'cose-bilkent',\n });\n\n data4Layout.diagramId = id;\n\n const mm = db.getMindmap();\n if (!mm) {\n return;\n }\n\n data4Layout.nodes.forEach((node) => {\n if (node.shape === 'rounded') {\n node.radius = 15;\n node.taper = 15;\n node.stroke = 'none';\n node.width = 0;\n node.padding = 15;\n } else if (node.shape === 'circle') {\n node.padding = 10;\n } else if (node.shape === 'rect') {\n node.width = 0;\n node.padding = 10;\n }\n });\n\n // Use the unified rendering system\n await render(data4Layout, svg);\n\n // Setup the view box and size of the svg element using config from data4Layout\n setupViewPortForSVG(\n svg,\n data4Layout.config.mindmap?.padding ?? defaultConfig.mindmap.padding,\n 'mindmapDiagram',\n data4Layout.config.mindmap?.useMaxWidth ?? defaultConfig.mindmap.useMaxWidth\n );\n};\n\nexport default {\n draw,\n};\n", "// @ts-expect-error Incorrect khroma types\nimport { darken, lighten, isDark } from 'khroma';\nimport type { DiagramStylesProvider } from '../../diagram-api/types.js';\n\nconst genSections: DiagramStylesProvider = (options) => {\n let sections = '';\n\n for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {\n options['lineColor' + i] = options['lineColor' + i] || options['cScaleInv' + i];\n if (isDark(options['lineColor' + i])) {\n options['lineColor' + i] = lighten(options['lineColor' + i], 20);\n } else {\n options['lineColor' + i] = darken(options['lineColor' + i], 20);\n }\n }\n\n for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {\n const sw = '' + (17 - 3 * i);\n sections += `\n .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${\n i - 1\n } polygon, .section-${i - 1} path {\n fill: ${options['cScale' + i]};\n }\n .section-${i - 1} text {\n fill: ${options['cScaleLabel' + i]};\n }\n .node-icon-${i - 1} {\n font-size: 40px;\n color: ${options['cScaleLabel' + i]};\n }\n .section-edge-${i - 1}{\n stroke: ${options['cScale' + i]};\n }\n .edge-depth-${i - 1}{\n stroke-width: ${sw};\n }\n .section-${i - 1} line {\n stroke: ${options['cScaleInv' + i]} ;\n stroke-width: 3;\n }\n\n .disabled, .disabled circle, .disabled text {\n fill: lightgray;\n }\n .disabled text {\n fill: #efefef;\n }\n `;\n }\n return sections;\n};\n\n// TODO: These options seem incorrect.\nconst getStyles: DiagramStylesProvider = (options) =>\n `\n .edge {\n stroke-width: 3;\n }\n ${genSections(options)}\n .section-root rect, .section-root path, .section-root circle, .section-root polygon {\n fill: ${options.git0};\n }\n .section-root text {\n fill: ${options.gitBranchLabel0};\n }\n .section-root span {\n color: ${options.gitBranchLabel0};\n }\n .section-2 span {\n color: ${options.gitBranchLabel0};\n }\n .icon-container {\n height:100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .edge {\n fill: none;\n }\n .mindmap-node-label {\n dy: 1em;\n alignment-baseline: middle;\n text-anchor: middle;\n dominant-baseline: middle;\n text-align: center;\n }\n`;\nexport default getStyles;\n", "// @ts-ignore: JISON doesn't support types\nimport parser from './parser/mindmap.jison';\nimport { MindmapDB } from './mindmapDb.js';\nimport renderer from './mindmapRenderer.js';\nimport styles from './styles.js';\nimport type { DiagramDefinition } from '../../diagram-api/types.js';\n\nexport const diagram: DiagramDefinition = {\n get db() {\n return new MindmapDB();\n },\n renderer,\n parser,\n styles,\n};\n", "/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,4],$V1=[1,13],$V2=[1,12],$V3=[1,15],$V4=[1,16],$V5=[1,20],$V6=[1,19],$V7=[6,7,8],$V8=[1,26],$V9=[1,24],$Va=[1,25],$Vb=[6,7,11],$Vc=[1,31],$Vd=[6,7,11,24],$Ve=[1,6,13,16,17,20,23],$Vf=[1,35],$Vg=[1,36],$Vh=[1,6,7,11,13,16,17,20,23],$Vi=[1,38];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"mindMap\":4,\"spaceLines\":5,\"SPACELINE\":6,\"NL\":7,\"KANBAN\":8,\"document\":9,\"stop\":10,\"EOF\":11,\"statement\":12,\"SPACELIST\":13,\"node\":14,\"shapeData\":15,\"ICON\":16,\"CLASS\":17,\"nodeWithId\":18,\"nodeWithoutId\":19,\"NODE_DSTART\":20,\"NODE_DESCR\":21,\"NODE_DEND\":22,\"NODE_ID\":23,\"SHAPE_DATA\":24,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",6:\"SPACELINE\",7:\"NL\",8:\"KANBAN\",11:\"EOF\",13:\"SPACELIST\",16:\"ICON\",17:\"CLASS\",20:\"NODE_DSTART\",21:\"NODE_DESCR\",22:\"NODE_DEND\",23:\"NODE_ID\",24:\"SHAPE_DATA\"},\nproductions_: [0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,3],[12,2],[12,2],[12,2],[12,1],[12,2],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[19,3],[18,1],[18,4],[15,2],[15,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 6: case 7:\n return yy; \nbreak;\ncase 8:\nyy.getLogger().trace('Stop NL ');\nbreak;\ncase 9:\nyy.getLogger().trace('Stop EOF ');\nbreak;\ncase 11:\nyy.getLogger().trace('Stop NL2 ');\nbreak;\ncase 12:\nyy.getLogger().trace('Stop EOF2 ');\nbreak;\ncase 15:\n yy.getLogger().info('Node: ',$$[$0-1].id);yy.addNode($$[$0-2].length, $$[$0-1].id, $$[$0-1].descr, $$[$0-1].type, $$[$0]); \nbreak;\ncase 16:\n yy.getLogger().info('Node: ',$$[$0].id);yy.addNode($$[$0-1].length, $$[$0].id, $$[$0].descr, $$[$0].type); \nbreak;\ncase 17:\n yy.getLogger().trace('Icon: ',$$[$0]);yy.decorateNode({icon: $$[$0]}); \nbreak;\ncase 18: case 23:\n yy.decorateNode({class: $$[$0]}); \nbreak;\ncase 19:\n yy.getLogger().trace('SPACELIST');\nbreak;\ncase 20:\n yy.getLogger().trace('Node: ',$$[$0-1].id);yy.addNode(0, $$[$0-1].id, $$[$0-1].descr, $$[$0-1].type, $$[$0]); \nbreak;\ncase 21:\n yy.getLogger().trace('Node: ',$$[$0].id);yy.addNode(0, $$[$0].id, $$[$0].descr, $$[$0].type); \nbreak;\ncase 22:\n yy.decorateNode({icon: $$[$0]}); \nbreak;\ncase 27:\n yy.getLogger().trace(\"node found ..\", $$[$0-2]); this.$ = { id: $$[$0-1], descr: $$[$0-1], type: yy.getType($$[$0-2], $$[$0]) }; \nbreak;\ncase 28:\n this.$ = { id: $$[$0], descr: $$[$0], type: 0 }; \nbreak;\ncase 29:\n yy.getLogger().trace(\"node found ..\", $$[$0-3]); this.$ = { id: $$[$0-3], descr: $$[$0-1], type: yy.getType($$[$0-2], $$[$0]) }; \nbreak;\ncase 30:\n this.$ = $$[$0-1] + $$[$0]; \nbreak;\ncase 31:\n this.$ = $$[$0]; \nbreak;\n}\n},\ntable: [{3:1,4:2,5:3,6:[1,5],8:$V0},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:$V0},{6:$V1,7:[1,10],9:9,12:11,13:$V2,14:14,16:$V3,17:$V4,18:17,19:18,20:$V5,23:$V6},o($V7,[2,3]),{1:[2,2]},o($V7,[2,4]),o($V7,[2,5]),{1:[2,6],6:$V1,12:21,13:$V2,14:14,16:$V3,17:$V4,18:17,19:18,20:$V5,23:$V6},{6:$V1,9:22,12:11,13:$V2,14:14,16:$V3,17:$V4,18:17,19:18,20:$V5,23:$V6},{6:$V8,7:$V9,10:23,11:$Va},o($Vb,[2,24],{18:17,19:18,14:27,16:[1,28],17:[1,29],20:$V5,23:$V6}),o($Vb,[2,19]),o($Vb,[2,21],{15:30,24:$Vc}),o($Vb,[2,22]),o($Vb,[2,23]),o($Vd,[2,25]),o($Vd,[2,26]),o($Vd,[2,28],{20:[1,32]}),{21:[1,33]},{6:$V8,7:$V9,10:34,11:$Va},{1:[2,7],6:$V1,12:21,13:$V2,14:14,16:$V3,17:$V4,18:17,19:18,20:$V5,23:$V6},o($Ve,[2,14],{7:$Vf,11:$Vg}),o($Vh,[2,8]),o($Vh,[2,9]),o($Vh,[2,10]),o($Vb,[2,16],{15:37,24:$Vc}),o($Vb,[2,17]),o($Vb,[2,18]),o($Vb,[2,20],{24:$Vi}),o($Vd,[2,31]),{21:[1,39]},{22:[1,40]},o($Ve,[2,13],{7:$Vf,11:$Vg}),o($Vh,[2,11]),o($Vh,[2,12]),o($Vb,[2,15],{24:$Vi}),o($Vd,[2,30]),{22:[1,41]},o($Vd,[2,27]),o($Vd,[2,29])],\ndefaultActions: {2:[2,1],6:[2,2]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// 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.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n 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(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\n\t// Pre-lexer code can go here\n\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:\n // console.log('=> shapeData', yy_.yytext);\n this.pushState(\"shapeData\"); yy_.yytext=\"\"; return 24 \nbreak;\ncase 1:\n // console.log('=> shapeDataStr', yy_.yytext);\n this.pushState(\"shapeDataStr\");\n return 24;\n \nbreak;\ncase 2:\n // console.log('shapeData <==', yy_.yytext);\n this.popState(); return 24\nbreak;\ncase 3:\n // console.log('shapeData', yy_.yytext);\n const re = /\\n\\s*/g;\n yy_.yytext = yy_.yytext.replace(re,\"
    \");\n return 24\nbreak;\ncase 4:\n // console.log('shapeData', yy_.yytext);\n return 24;\n \nbreak;\ncase 5:\n // console.log('<== root', yy_.yytext)\n this.popState();\n \nbreak;\ncase 6:yy.getLogger().trace('Found comment',yy_.yytext); return 6;\nbreak;\ncase 7:return 8;\nbreak;\ncase 8: this.begin('CLASS'); \nbreak;\ncase 9: this.popState();return 17; \nbreak;\ncase 10: this.popState();\nbreak;\ncase 11: yy.getLogger().trace('Begin icon');this.begin('ICON'); \nbreak;\ncase 12:yy.getLogger().trace('SPACELINE');return 6 /* skip all whitespace */ ;\nbreak;\ncase 13:return 7;\nbreak;\ncase 14: return 16; \nbreak;\ncase 15:yy.getLogger().trace('end icon');this.popState();\nbreak;\ncase 16: yy.getLogger().trace('Exploding node'); this.begin('NODE');return 20; \nbreak;\ncase 17: yy.getLogger().trace('Cloud'); this.begin('NODE');return 20; \nbreak;\ncase 18: yy.getLogger().trace('Explosion Bang'); this.begin('NODE');return 20; \nbreak;\ncase 19: yy.getLogger().trace('Cloud Bang'); this.begin('NODE');return 20; \nbreak;\ncase 20: this.begin('NODE');return 20; \nbreak;\ncase 21: this.begin('NODE');return 20; \nbreak;\ncase 22: this.begin('NODE');return 20; \nbreak;\ncase 23: this.begin('NODE');return 20; \nbreak;\ncase 24:return 13 /* skip all whitespace */ ;\nbreak;\ncase 25:return 23;\nbreak;\ncase 26:return 11;\nbreak;\ncase 27: this.begin(\"NSTR2\");\nbreak;\ncase 28: return \"NODE_DESCR\";\nbreak;\ncase 29: this.popState();\nbreak;\ncase 30: yy.getLogger().trace('Starting NSTR');this.begin(\"NSTR\");\nbreak;\ncase 31: yy.getLogger().trace('description:', yy_.yytext); return \"NODE_DESCR\";\nbreak;\ncase 32:this.popState();\nbreak;\ncase 33:this.popState();yy.getLogger().trace('node end ))');return \"NODE_DEND\";\nbreak;\ncase 34:this.popState();yy.getLogger().trace('node end )');return \"NODE_DEND\";\nbreak;\ncase 35:this.popState();yy.getLogger().trace('node end ...',yy_.yytext);return \"NODE_DEND\";\nbreak;\ncase 36:this.popState();yy.getLogger().trace('node end ((');return \"NODE_DEND\";\nbreak;\ncase 37:this.popState();yy.getLogger().trace('node end (-');return \"NODE_DEND\";\nbreak;\ncase 38:this.popState();yy.getLogger().trace('node end (-');return \"NODE_DEND\";\nbreak;\ncase 39:this.popState();yy.getLogger().trace('node end ((');return \"NODE_DEND\";\nbreak;\ncase 40:this.popState();yy.getLogger().trace('node end ((');return \"NODE_DEND\";\nbreak;\ncase 41: yy.getLogger().trace('Long description:', yy_.yytext); return 21;\nbreak;\ncase 42: yy.getLogger().trace('Long description:', yy_.yytext); return 21;\nbreak;\n}\n},\nrules: [/^(?:@\\{)/i,/^(?:[\"])/i,/^(?:[\"])/i,/^(?:[^\\\"]+)/i,/^(?:[^}^\"]+)/i,/^(?:\\})/i,/^(?:\\s*%%.*)/i,/^(?:kanban\\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\\n)/i,/^(?:::icon\\()/i,/^(?:[\\s]+[\\n])/i,/^(?:[\\n]+)/i,/^(?:[^\\)]+)/i,/^(?:\\))/i,/^(?:-\\))/i,/^(?:\\(-)/i,/^(?:\\)\\))/i,/^(?:\\))/i,/^(?:\\(\\()/i,/^(?:\\{\\{)/i,/^(?:\\()/i,/^(?:\\[)/i,/^(?:[\\s]+)/i,/^(?:[^\\(\\[\\n\\)\\{\\}@]+)/i,/^(?:$)/i,/^(?:[\"][`])/i,/^(?:[^`\"]+)/i,/^(?:[`][\"])/i,/^(?:[\"])/i,/^(?:[^\"]+)/i,/^(?:[\"])/i,/^(?:[\\)]\\))/i,/^(?:[\\)])/i,/^(?:[\\]])/i,/^(?:\\}\\})/i,/^(?:\\(-)/i,/^(?:-\\))/i,/^(?:\\(\\()/i,/^(?:\\()/i,/^(?:[^\\)\\]\\(\\}]+)/i,/^(?:.+(?!\\(\\())/i],\nconditions: {\"shapeDataEndBracket\":{\"rules\":[],\"inclusive\":false},\"shapeDataStr\":{\"rules\":[2,3],\"inclusive\":false},\"shapeData\":{\"rules\":[1,4,5],\"inclusive\":false},\"CLASS\":{\"rules\":[9,10],\"inclusive\":false},\"ICON\":{\"rules\":[14,15],\"inclusive\":false},\"NSTR2\":{\"rules\":[28,29],\"inclusive\":false},\"NSTR\":{\"rules\":[31,32],\"inclusive\":false},\"NODE\":{\"rules\":[27,30,33,34,35,36,37,38,39,40,41,42],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,6,7,8,11,12,13,16,17,18,19,20,21,22,23,24,25,26],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})(); \n\tparser.parser = parser;\n\texport { parser };\n\texport default parser;\n\t", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport type { D3Element } from '../../types.js';\nimport { sanitizeText } from '../../diagrams/common/common.js';\nimport { log } from '../../logger.js';\nimport type { Edge, KanbanNode } from '../../rendering-util/types.js';\nimport defaultConfig from '../../defaultConfig.js';\nimport type { NodeMetaData } from '../../types.js';\nimport * as yaml from 'js-yaml';\n\nlet nodes: KanbanNode[] = [];\nlet sections: KanbanNode[] = [];\nlet cnt = 0;\nlet elements: Record = {};\n\nconst clear = () => {\n nodes = [];\n sections = [];\n cnt = 0;\n elements = {};\n};\n/*\n * if your level is the section level return null - then you do not belong to a level\n * otherwise return the current section\n */\nconst getSection = (level: number) => {\n if (nodes.length === 0) {\n // console.log('No nodes');\n return null;\n }\n const sectionLevel = nodes[0].level;\n let lastSection = null;\n for (let i = nodes.length - 1; i >= 0; i--) {\n if (nodes[i].level === sectionLevel && !lastSection) {\n lastSection = nodes[i];\n // console.log('lastSection found', lastSection);\n }\n // console.log('HERE', nodes[i].id, level, nodes[i].level, sectionLevel);\n if (nodes[i].level < sectionLevel) {\n throw new Error('Items without section detected, found section (\"' + nodes[i].label + '\")');\n }\n }\n if (level === lastSection?.level) {\n return null;\n }\n\n // No found\n return lastSection;\n};\n\nconst getSections = function () {\n return sections;\n};\n\nconst getData = function () {\n const edges = [] as Edge[];\n const _nodes: KanbanNode[] = [];\n\n const sections = getSections();\n const conf = getConfig();\n\n for (const section of sections) {\n const node = {\n id: section.id,\n label: sanitizeText(section.label ?? '', conf),\n isGroup: true,\n ticket: section.ticket,\n shape: 'kanbanSection',\n level: section.level,\n look: conf.look,\n } satisfies KanbanNode;\n _nodes.push(node);\n const children = nodes.filter((n) => n.parentId === section.id);\n\n for (const item of children) {\n const childNode = {\n id: item.id,\n parentId: section.id,\n label: sanitizeText(item.label ?? '', conf),\n isGroup: false,\n ticket: item?.ticket,\n priority: item?.priority,\n assigned: item?.assigned,\n icon: item?.icon,\n shape: 'kanbanItem',\n level: item.level,\n rx: 5,\n ry: 5,\n cssStyles: ['text-align: left'],\n } satisfies KanbanNode;\n _nodes.push(childNode);\n }\n }\n\n return { nodes: _nodes, edges, other: {}, config: getConfig() };\n};\n\nconst addNode = (level: number, id: string, descr: string, type: number, shapeData: string) => {\n const conf = getConfig();\n let padding: number = conf.mindmap?.padding ?? defaultConfig.mindmap.padding;\n switch (type) {\n case nodeType.ROUNDED_RECT:\n case nodeType.RECT:\n case nodeType.HEXAGON:\n padding *= 2;\n }\n\n const node: KanbanNode = {\n id: sanitizeText(id, conf) || 'kbn' + cnt++,\n level,\n label: sanitizeText(descr, conf),\n width: conf.mindmap?.maxNodeWidth ?? defaultConfig.mindmap.maxNodeWidth,\n padding,\n isGroup: false,\n } satisfies KanbanNode;\n\n if (shapeData !== undefined) {\n let yamlData;\n // detect if shapeData contains a newline character\n // console.log('shapeData', shapeData);\n if (!shapeData.includes('\\n')) {\n // console.log('yamlData shapeData has no new lines', shapeData);\n yamlData = '{\\n' + shapeData + '\\n}';\n } else {\n // console.log('yamlData shapeData has new lines', shapeData);\n yamlData = shapeData + '\\n';\n }\n const doc = yaml.load(yamlData, { schema: yaml.JSON_SCHEMA }) as NodeMetaData;\n // console.log('yamlData', doc);\n if (doc.shape && (doc.shape !== doc.shape.toLowerCase() || doc.shape.includes('_'))) {\n throw new Error(`No such shape: ${doc.shape}. Shape names should be lowercase.`);\n }\n\n // if shape is defined in the yaml data, use it if it is a valid shape kanbanItem\n if (doc?.shape && doc.shape === 'kanbanItem') {\n node.shape = doc?.shape;\n }\n if (doc?.label) {\n node.label = doc?.label;\n }\n if (doc?.icon) {\n node.icon = doc?.icon.toString();\n }\n if (doc?.assigned) {\n node.assigned = doc?.assigned.toString();\n }\n if (doc?.ticket) {\n node.ticket = doc?.ticket.toString();\n }\n\n if (doc?.priority) {\n node.priority = doc?.priority;\n }\n }\n\n const section = getSection(level);\n if (section) {\n // @ts-ignore false positive for section.id\n node.parentId = section.id || 'kbn' + cnt++;\n } else {\n sections.push(node);\n }\n nodes.push(node);\n};\n\nconst nodeType = {\n DEFAULT: 0,\n NO_BORDER: 0,\n ROUNDED_RECT: 1,\n RECT: 2,\n CIRCLE: 3,\n CLOUD: 4,\n BANG: 5,\n HEXAGON: 6,\n};\n\nconst getType = (startStr: string, endStr: string): number => {\n log.debug('In get type', startStr, endStr);\n switch (startStr) {\n case '[':\n return nodeType.RECT;\n case '(':\n return endStr === ')' ? nodeType.ROUNDED_RECT : nodeType.CLOUD;\n case '((':\n return nodeType.CIRCLE;\n case ')':\n return nodeType.CLOUD;\n case '))':\n return nodeType.BANG;\n case '{{':\n return nodeType.HEXAGON;\n default:\n return nodeType.DEFAULT;\n }\n};\n\nconst setElementForId = (id: number, element: D3Element) => {\n elements[id] = element;\n};\n\nconst decorateNode = (decoration?: { class?: string; icon?: string }) => {\n if (!decoration) {\n return;\n }\n const config = getConfig();\n const node = nodes[nodes.length - 1];\n if (decoration.icon) {\n node.icon = sanitizeText(decoration.icon, config);\n }\n if (decoration.class) {\n node.cssClasses = sanitizeText(decoration.class, config);\n }\n};\n\nconst type2Str = (type: number) => {\n switch (type) {\n case nodeType.DEFAULT:\n return 'no-border';\n case nodeType.RECT:\n return 'rect';\n case nodeType.ROUNDED_RECT:\n return 'rounded-rect';\n case nodeType.CIRCLE:\n return 'circle';\n case nodeType.CLOUD:\n return 'cloud';\n case nodeType.BANG:\n return 'bang';\n case nodeType.HEXAGON:\n return 'hexgon'; // cspell: disable-line\n default:\n return 'no-border';\n }\n};\n\n// Expose logger to grammar\nconst getLogger = () => log;\nconst getElementById = (id: number) => elements[id];\n\nconst db = {\n clear,\n addNode,\n getSections,\n getData,\n nodeType,\n getType,\n setElementForId,\n decorateNode,\n type2Str,\n getLogger,\n getElementById,\n} as const;\n\nexport default db;\n", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport type { DrawDefinition } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport { selectSvgElement } from '../../rendering-util/selectSvgElement.js';\nimport { setupGraphViewbox } from '../../setupGraphViewbox.js';\nimport type { KanbanDB } from './kanbanTypes.js';\nimport defaultConfig from '../../defaultConfig.js';\nimport { insertCluster } from '../../rendering-util/rendering-elements/clusters.js';\nimport { insertNode, positionNode } from '../../rendering-util/rendering-elements/nodes.js';\nimport type { ClusterNode } from '../../rendering-util/types.js';\n\nexport const draw: DrawDefinition = async (text, id, _version, diagObj) => {\n log.debug('Rendering kanban diagram\\n' + text);\n\n const db = diagObj.db as KanbanDB;\n const data4Layout = db.getData();\n\n const conf = getConfig();\n conf.htmlLabels = false;\n\n const svg = selectSvgElement(id);\n\n // Draw the graph and start with drawing the nodes without proper position\n // this gives us the size of the nodes and we can set the positions later\n\n const sectionsElem = svg.append('g');\n sectionsElem.attr('class', 'sections');\n const nodesElem = svg.append('g');\n nodesElem.attr('class', 'items');\n const sections = data4Layout.nodes.filter(\n // TODO: TypeScript 5.5 will infer this predicate automatically\n (node): node is typeof node & ClusterNode => node.isGroup\n );\n let cnt = 0;\n // TODO set padding\n const padding = 10;\n\n const sectionObjects = [];\n let maxLabelHeight = 25;\n for (const section of sections) {\n const WIDTH = conf?.kanban?.sectionWidth || 200;\n // const top = (-WIDTH * 3) / 2 + 25;\n // let y = top;\n cnt = cnt + 1;\n section.x = WIDTH * cnt + ((cnt - 1) * padding) / 2;\n section.width = WIDTH;\n section.y = 0;\n section.height = WIDTH * 3;\n section.rx = 5;\n section.ry = 5;\n\n // Todo, use theme variable THEME_COLOR_LIMIT instead of 10\n section.cssClasses = section.cssClasses + ' section-' + cnt;\n const sectionObj = await insertCluster(sectionsElem, section);\n maxLabelHeight = Math.max(maxLabelHeight, sectionObj?.labelBBox?.height);\n sectionObjects.push(sectionObj);\n }\n let i = 0;\n for (const section of sections) {\n const sectionObj = sectionObjects[i];\n i = i + 1;\n const WIDTH = conf?.kanban?.sectionWidth || 200;\n const top = (-WIDTH * 3) / 2 + maxLabelHeight;\n let y = top;\n const sectionItems = data4Layout.nodes.filter((node) => node.parentId === section.id);\n for (const item of sectionItems) {\n if (item.isGroup) {\n // Kanban diagrams should not have groups within groups\n // this should never happen\n throw new Error('Groups within groups are not allowed in Kanban diagrams');\n }\n item.x = section.x;\n item.width = WIDTH - 1.5 * padding;\n const nodeEl = await insertNode(nodesElem, item, { config: conf });\n const bbox = nodeEl.node()!.getBBox();\n item.y = y + bbox.height / 2;\n await positionNode(item);\n y = item.y + bbox.height / 2 + padding / 2;\n }\n const rect = sectionObj.cluster.select('rect');\n const height = Math.max(y - top + 3 * padding, 50) + (maxLabelHeight - 25);\n rect.attr('height', height);\n }\n\n // Setup the view box and size of the svg element\n setupGraphViewbox(\n undefined,\n svg,\n conf.mindmap?.padding ?? defaultConfig.kanban.padding,\n conf.mindmap?.useMaxWidth ?? defaultConfig.kanban.useMaxWidth\n );\n};\n\nexport default {\n draw,\n};\n", "// @ts-expect-error Incorrect khroma types\nimport { darken, lighten, isDark } from 'khroma';\nimport type { DiagramStylesProvider } from '../../diagram-api/types.js';\nimport { getIconStyles } from '../globalStyles.js';\n\nconst genSections: DiagramStylesProvider = (options) => {\n let sections = '';\n\n for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {\n options['lineColor' + i] = options['lineColor' + i] || options['cScaleInv' + i];\n if (isDark(options['lineColor' + i])) {\n options['lineColor' + i] = lighten(options['lineColor' + i], 20);\n } else {\n options['lineColor' + i] = darken(options['lineColor' + i], 20);\n }\n }\n\n const adjuster = (color: string, level: number) =>\n options.darkMode ? darken(color, level) : lighten(color, level);\n\n for (let i = 0; i < options.THEME_COLOR_LIMIT; i++) {\n const sw = '' + (17 - 3 * i);\n sections += `\n .section-${i - 1} rect, .section-${i - 1} path, .section-${i - 1} circle, .section-${\n i - 1\n } polygon, .section-${i - 1} path {\n fill: ${adjuster(options['cScale' + i], 10)};\n stroke: ${adjuster(options['cScale' + i], 10)};\n\n }\n .section-${i - 1} text {\n fill: ${options['cScaleLabel' + i]};\n }\n .node-icon-${i - 1} {\n font-size: 40px;\n color: ${options['cScaleLabel' + i]};\n }\n .section-edge-${i - 1}{\n stroke: ${options['cScale' + i]};\n }\n .edge-depth-${i - 1}{\n stroke-width: ${sw};\n }\n .section-${i - 1} line {\n stroke: ${options['cScaleInv' + i]} ;\n stroke-width: 3;\n }\n\n .disabled, .disabled circle, .disabled text {\n fill: lightgray;\n }\n .disabled text {\n fill: #efefef;\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${options.background};\n stroke: ${options.nodeBorder};\n stroke-width: 1px;\n }\n\n .kanban-ticket-link {\n fill: ${options.background};\n stroke: ${options.nodeBorder};\n text-decoration: underline;\n }\n `;\n }\n return sections;\n};\n\n// TODO: These options seem incorrect.\nconst getStyles: DiagramStylesProvider = (options) =>\n `\n .edge {\n stroke-width: 3;\n }\n ${genSections(options)}\n .section-root rect, .section-root path, .section-root circle, .section-root polygon {\n fill: ${options.git0};\n }\n .section-root text {\n fill: ${options.gitBranchLabel0};\n }\n .icon-container {\n height:100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .edge {\n fill: none;\n }\n .cluster-label, .label {\n color: ${options.textColor};\n fill: ${options.textColor};\n }\n .kanban-label {\n dy: 1em;\n alignment-baseline: middle;\n text-anchor: middle;\n dominant-baseline: middle;\n text-align: center;\n }\n ${getIconStyles()}\n`;\nexport default getStyles;\n", "// @ts-ignore: JISON doesn't support types\nimport parser from './parser/kanban.jison';\nimport db from './kanbanDb.js';\nimport renderer from './kanbanRenderer.js';\nimport styles from './styles.js';\nimport type { DiagramDefinition } from '../../diagram-api/types.js';\n\nexport const diagram: DiagramDefinition = {\n db,\n renderer,\n parser,\n styles,\n};\n", "/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,9],$V1=[1,10],$V2=[1,5,10,12];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"SANKEY\":4,\"NEWLINE\":5,\"csv\":6,\"opt_eof\":7,\"record\":8,\"csv_tail\":9,\"EOF\":10,\"field[source]\":11,\"COMMA\":12,\"field[target]\":13,\"field[value]\":14,\"field\":15,\"escaped\":16,\"non_escaped\":17,\"DQUOTE\":18,\"ESCAPED_TEXT\":19,\"NON_ESCAPED_TEXT\":20,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"SANKEY\",5:\"NEWLINE\",10:\"EOF\",11:\"field[source]\",12:\"COMMA\",13:\"field[target]\",14:\"field[value]\",18:\"DQUOTE\",19:\"ESCAPED_TEXT\",20:\"NON_ESCAPED_TEXT\"},\nproductions_: [0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 7:\n\n const source = yy.findOrCreateNode($$[$0-4].trim().replaceAll('\"\"', '\"'));\n const target = yy.findOrCreateNode($$[$0-2].trim().replaceAll('\"\"', '\"'));\n const value = parseFloat($$[$0].trim());\n yy.addLink(source,target,value);\n \nbreak;\ncase 8: case 9: case 11:\n this.$=$$[$0]; \nbreak;\ncase 10:\n this.$=$$[$0-1]; \nbreak;\n}\n},\ntable: [{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:$V0,20:$V1},{1:[2,6],7:11,10:[1,12]},o($V1,[2,4],{9:13,5:[1,14]}),{12:[1,15]},o($V2,[2,8]),o($V2,[2,9]),{19:[1,16]},o($V2,[2,11]),{1:[2,1]},{1:[2,5]},o($V1,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:$V0,20:$V1},{15:18,16:7,17:8,18:$V0,20:$V1},{18:[1,19]},o($V1,[2,3]),{12:[1,20]},o($V2,[2,10]),{15:21,16:7,17:8,18:$V0,20:$V1},o([1,5,10],[2,7])],\ndefaultActions: {11:[2,1],12:[2,5]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// 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.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n 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(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0: this.pushState('csv'); return 4; \nbreak;\ncase 1: this.pushState('csv'); return 4; \nbreak;\ncase 2: return 10 \nbreak;\ncase 3: return 5 \nbreak;\ncase 4: return 12 \nbreak;\ncase 5: this.pushState('escaped_text'); return 18; \nbreak;\ncase 6: return 20 \nbreak;\ncase 7:this.popState('escaped_text'); return 18; \nbreak;\ncase 8: return 19; \nbreak;\n}\n},\nrules: [/^(?:sankey-beta\\b)/i,/^(?:sankey\\b)/i,/^(?:$)/i,/^(?:((\\u000D\\u000A)|(\\u000A)))/i,/^(?:(\\u002C))/i,/^(?:(\\u0022))/i,/^(?:([\\u0020-\\u0021\\u0023-\\u002B\\u002D-\\u007E])*)/i,/^(?:(\\u0022)(?!(\\u0022)))/i,/^(?:(([\\u0020-\\u0021\\u0023-\\u002B\\u002D-\\u007E])|(\\u002C)|(\\u000D)|(\\u000A)|(\\u0022)(\\u0022))*)/i],\nconditions: {\"csv\":{\"rules\":[2,3,4,5,6,7,8],\"inclusive\":false},\"escaped_text\":{\"rules\":[7,8],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})(); \n\tparser.parser = parser;\n\texport { parser };\n\texport default parser;\n\t", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport common from '../common/common.js';\nimport {\n setAccTitle,\n getAccTitle,\n getAccDescription,\n setAccDescription,\n setDiagramTitle,\n getDiagramTitle,\n clear as commonClear,\n} from '../common/commonDb.js';\n\n// Sankey diagram represented by nodes and links between those nodes\nlet links: SankeyLink[] = [];\n// Array of nodes guarantees their order\nlet nodes: SankeyNode[] = [];\n// We also have to track nodes uniqueness (by ID)\nlet nodesMap = new Map();\n\nconst clear = (): void => {\n links = [];\n nodes = [];\n nodesMap = new Map();\n commonClear();\n};\n\nclass SankeyLink {\n constructor(\n public source: SankeyNode,\n public target: SankeyNode,\n public value = 0\n ) {}\n}\n\n/**\n * @param source - Node where the link starts\n * @param target - Node where the link ends\n * @param value - Describes the amount to be passed\n */\nconst addLink = (source: SankeyNode, target: SankeyNode, value: number): void => {\n links.push(new SankeyLink(source, target, value));\n};\n\nclass SankeyNode {\n constructor(public ID: string) {}\n}\n\nconst findOrCreateNode = (ID: string): SankeyNode => {\n ID = common.sanitizeText(ID, getConfig());\n\n let node = nodesMap.get(ID);\n if (node === undefined) {\n node = new SankeyNode(ID);\n nodesMap.set(ID, node);\n nodes.push(node);\n }\n return node;\n};\n\nconst getNodes = () => nodes;\nconst getLinks = () => links;\n\nconst getGraph = () => ({\n nodes: nodes.map((node) => ({ id: node.ID })),\n links: links.map((link) => ({\n source: link.source.ID,\n target: link.target.ID,\n value: link.value,\n })),\n});\n\nexport default {\n nodesMap,\n getConfig: () => getConfig().sankey,\n getNodes,\n getLinks,\n getGraph,\n addLink,\n findOrCreateNode,\n getAccTitle,\n setAccTitle,\n getAccDescription,\n setAccDescription,\n getDiagramTitle,\n setDiagramTitle,\n clear,\n};\n", "export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n", "export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n", "export default function sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n", "export {default as bisect, bisectRight, bisectLeft, bisectCenter} from \"./bisect.js\";\nexport {default as ascending} from \"./ascending.js\";\nexport {default as bisector} from \"./bisector.js\";\nexport {default as count} from \"./count.js\";\nexport {default as cross} from \"./cross.js\";\nexport {default as cumsum} from \"./cumsum.js\";\nexport {default as descending} from \"./descending.js\";\nexport {default as deviation} from \"./deviation.js\";\nexport {default as extent} from \"./extent.js\";\nexport {Adder, fsum, fcumsum} from \"./fsum.js\";\nexport {default as group, groups, index, indexes, rollup, rollups} from \"./group.js\";\nexport {default as groupSort} from \"./groupSort.js\";\nexport {default as bin, default as histogram} from \"./bin.js\"; // Deprecated; use bin.\nexport {default as thresholdFreedmanDiaconis} from \"./threshold/freedmanDiaconis.js\";\nexport {default as thresholdScott} from \"./threshold/scott.js\";\nexport {default as thresholdSturges} from \"./threshold/sturges.js\";\nexport {default as max} from \"./max.js\";\nexport {default as maxIndex} from \"./maxIndex.js\";\nexport {default as mean} from \"./mean.js\";\nexport {default as median} from \"./median.js\";\nexport {default as merge} from \"./merge.js\";\nexport {default as min} from \"./min.js\";\nexport {default as minIndex} from \"./minIndex.js\";\nexport {default as nice} from \"./nice.js\";\nexport {default as pairs} from \"./pairs.js\";\nexport {default as permute} from \"./permute.js\";\nexport {default as quantile, quantileSorted} from \"./quantile.js\";\nexport {default as quickselect} from \"./quickselect.js\";\nexport {default as range} from \"./range.js\";\nexport {default as least} from \"./least.js\";\nexport {default as leastIndex} from \"./leastIndex.js\";\nexport {default as greatest} from \"./greatest.js\";\nexport {default as greatestIndex} from \"./greatestIndex.js\";\nexport {default as scan} from \"./scan.js\"; // Deprecated; use leastIndex.\nexport {default as shuffle, shuffler} from \"./shuffle.js\";\nexport {default as sum} from \"./sum.js\";\nexport {default as ticks, tickIncrement, tickStep} from \"./ticks.js\";\nexport {default as transpose} from \"./transpose.js\";\nexport {default as variance} from \"./variance.js\";\nexport {default as zip} from \"./zip.js\";\nexport {default as every} from \"./every.js\";\nexport {default as some} from \"./some.js\";\nexport {default as filter} from \"./filter.js\";\nexport {default as map} from \"./map.js\";\nexport {default as reduce} from \"./reduce.js\";\nexport {default as reverse} from \"./reverse.js\";\nexport {default as sort} from \"./sort.js\";\nexport {default as difference} from \"./difference.js\";\nexport {default as disjoint} from \"./disjoint.js\";\nexport {default as intersection} from \"./intersection.js\";\nexport {default as subset} from \"./subset.js\";\nexport {default as superset} from \"./superset.js\";\nexport {default as union} from \"./union.js\";\nexport {InternMap, InternSet} from \"internmap\";\n", "import {min} from \"d3-array\";\n\nfunction targetDepth(d) {\n return d.target.depth;\n}\n\nexport function left(node) {\n return node.depth;\n}\n\nexport function right(node, n) {\n return n - 1 - node.height;\n}\n\nexport function justify(node, n) {\n return node.sourceLinks.length ? node.depth : n - 1;\n}\n\nexport function center(node) {\n return node.targetLinks.length ? node.depth\n : node.sourceLinks.length ? min(node.sourceLinks, targetDepth) - 1\n : 0;\n}\n", "export default function constant(x) {\n return function() {\n return x;\n };\n}\n", "import {max, min, sum} from \"d3-array\";\nimport {justify} from \"./align.js\";\nimport constant from \"./constant.js\";\n\nfunction ascendingSourceBreadth(a, b) {\n return ascendingBreadth(a.source, b.source) || a.index - b.index;\n}\n\nfunction ascendingTargetBreadth(a, b) {\n return ascendingBreadth(a.target, b.target) || a.index - b.index;\n}\n\nfunction ascendingBreadth(a, b) {\n return a.y0 - b.y0;\n}\n\nfunction value(d) {\n return d.value;\n}\n\nfunction defaultId(d) {\n return d.index;\n}\n\nfunction defaultNodes(graph) {\n return graph.nodes;\n}\n\nfunction defaultLinks(graph) {\n return graph.links;\n}\n\nfunction find(nodeById, id) {\n const node = nodeById.get(id);\n if (!node) throw new Error(\"missing: \" + id);\n return node;\n}\n\nfunction computeLinkBreadths({nodes}) {\n for (const node of nodes) {\n let y0 = node.y0;\n let y1 = y0;\n for (const link of node.sourceLinks) {\n link.y0 = y0 + link.width / 2;\n y0 += link.width;\n }\n for (const link of node.targetLinks) {\n link.y1 = y1 + link.width / 2;\n y1 += link.width;\n }\n }\n}\n\nexport default function Sankey() {\n let x0 = 0, y0 = 0, x1 = 1, y1 = 1; // extent\n let dx = 24; // nodeWidth\n let dy = 8, py; // nodePadding\n let id = defaultId;\n let align = justify;\n let sort;\n let linkSort;\n let nodes = defaultNodes;\n let links = defaultLinks;\n let iterations = 6;\n\n function sankey() {\n const graph = {nodes: nodes.apply(null, arguments), links: links.apply(null, arguments)};\n computeNodeLinks(graph);\n computeNodeValues(graph);\n computeNodeDepths(graph);\n computeNodeHeights(graph);\n computeNodeBreadths(graph);\n computeLinkBreadths(graph);\n return graph;\n }\n\n sankey.update = function(graph) {\n computeLinkBreadths(graph);\n return graph;\n };\n\n sankey.nodeId = function(_) {\n return arguments.length ? (id = typeof _ === \"function\" ? _ : constant(_), sankey) : id;\n };\n\n sankey.nodeAlign = function(_) {\n return arguments.length ? (align = typeof _ === \"function\" ? _ : constant(_), sankey) : align;\n };\n\n sankey.nodeSort = function(_) {\n return arguments.length ? (sort = _, sankey) : sort;\n };\n\n sankey.nodeWidth = function(_) {\n return arguments.length ? (dx = +_, sankey) : dx;\n };\n\n sankey.nodePadding = function(_) {\n return arguments.length ? (dy = py = +_, sankey) : dy;\n };\n\n sankey.nodes = function(_) {\n return arguments.length ? (nodes = typeof _ === \"function\" ? _ : constant(_), sankey) : nodes;\n };\n\n sankey.links = function(_) {\n return arguments.length ? (links = typeof _ === \"function\" ? _ : constant(_), sankey) : links;\n };\n\n sankey.linkSort = function(_) {\n return arguments.length ? (linkSort = _, sankey) : linkSort;\n };\n\n sankey.size = function(_) {\n return arguments.length ? (x0 = y0 = 0, x1 = +_[0], y1 = +_[1], sankey) : [x1 - x0, y1 - y0];\n };\n\n sankey.extent = function(_) {\n return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], sankey) : [[x0, y0], [x1, y1]];\n };\n\n sankey.iterations = function(_) {\n return arguments.length ? (iterations = +_, sankey) : iterations;\n };\n\n function computeNodeLinks({nodes, links}) {\n for (const [i, node] of nodes.entries()) {\n node.index = i;\n node.sourceLinks = [];\n node.targetLinks = [];\n }\n const nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d]));\n for (const [i, link] of links.entries()) {\n link.index = i;\n let {source, target} = link;\n if (typeof source !== \"object\") source = link.source = find(nodeById, source);\n if (typeof target !== \"object\") target = link.target = find(nodeById, target);\n source.sourceLinks.push(link);\n target.targetLinks.push(link);\n }\n if (linkSort != null) {\n for (const {sourceLinks, targetLinks} of nodes) {\n sourceLinks.sort(linkSort);\n targetLinks.sort(linkSort);\n }\n }\n }\n\n function computeNodeValues({nodes}) {\n for (const node of nodes) {\n node.value = node.fixedValue === undefined\n ? Math.max(sum(node.sourceLinks, value), sum(node.targetLinks, value))\n : node.fixedValue;\n }\n }\n\n function computeNodeDepths({nodes}) {\n const n = nodes.length;\n let current = new Set(nodes);\n let next = new Set;\n let x = 0;\n while (current.size) {\n for (const node of current) {\n node.depth = x;\n for (const {target} of node.sourceLinks) {\n next.add(target);\n }\n }\n if (++x > n) throw new Error(\"circular link\");\n current = next;\n next = new Set;\n }\n }\n\n function computeNodeHeights({nodes}) {\n const n = nodes.length;\n let current = new Set(nodes);\n let next = new Set;\n let x = 0;\n while (current.size) {\n for (const node of current) {\n node.height = x;\n for (const {source} of node.targetLinks) {\n next.add(source);\n }\n }\n if (++x > n) throw new Error(\"circular link\");\n current = next;\n next = new Set;\n }\n }\n\n function computeNodeLayers({nodes}) {\n const x = max(nodes, d => d.depth) + 1;\n const kx = (x1 - x0 - dx) / (x - 1);\n const columns = new Array(x);\n for (const node of nodes) {\n const i = Math.max(0, Math.min(x - 1, Math.floor(align.call(null, node, x))));\n node.layer = i;\n node.x0 = x0 + i * kx;\n node.x1 = node.x0 + dx;\n if (columns[i]) columns[i].push(node);\n else columns[i] = [node];\n }\n if (sort) for (const column of columns) {\n column.sort(sort);\n }\n return columns;\n }\n\n function initializeNodeBreadths(columns) {\n const ky = min(columns, c => (y1 - y0 - (c.length - 1) * py) / sum(c, value));\n for (const nodes of columns) {\n let y = y0;\n for (const node of nodes) {\n node.y0 = y;\n node.y1 = y + node.value * ky;\n y = node.y1 + py;\n for (const link of node.sourceLinks) {\n link.width = link.value * ky;\n }\n }\n y = (y1 - y + py) / (nodes.length + 1);\n for (let i = 0; i < nodes.length; ++i) {\n const node = nodes[i];\n node.y0 += y * (i + 1);\n node.y1 += y * (i + 1);\n }\n reorderLinks(nodes);\n }\n }\n\n function computeNodeBreadths(graph) {\n const columns = computeNodeLayers(graph);\n py = Math.min(dy, (y1 - y0) / (max(columns, c => c.length) - 1));\n initializeNodeBreadths(columns);\n for (let i = 0; i < iterations; ++i) {\n const alpha = Math.pow(0.99, i);\n const beta = Math.max(1 - alpha, (i + 1) / iterations);\n relaxRightToLeft(columns, alpha, beta);\n relaxLeftToRight(columns, alpha, beta);\n }\n }\n\n // Reposition each node based on its incoming (target) links.\n function relaxLeftToRight(columns, alpha, beta) {\n for (let i = 1, n = columns.length; i < n; ++i) {\n const column = columns[i];\n for (const target of column) {\n let y = 0;\n let w = 0;\n for (const {source, value} of target.targetLinks) {\n let v = value * (target.layer - source.layer);\n y += targetTop(source, target) * v;\n w += v;\n }\n if (!(w > 0)) continue;\n let dy = (y / w - target.y0) * alpha;\n target.y0 += dy;\n target.y1 += dy;\n reorderNodeLinks(target);\n }\n if (sort === undefined) column.sort(ascendingBreadth);\n resolveCollisions(column, beta);\n }\n }\n\n // Reposition each node based on its outgoing (source) links.\n function relaxRightToLeft(columns, alpha, beta) {\n for (let n = columns.length, i = n - 2; i >= 0; --i) {\n const column = columns[i];\n for (const source of column) {\n let y = 0;\n let w = 0;\n for (const {target, value} of source.sourceLinks) {\n let v = value * (target.layer - source.layer);\n y += sourceTop(source, target) * v;\n w += v;\n }\n if (!(w > 0)) continue;\n let dy = (y / w - source.y0) * alpha;\n source.y0 += dy;\n source.y1 += dy;\n reorderNodeLinks(source);\n }\n if (sort === undefined) column.sort(ascendingBreadth);\n resolveCollisions(column, beta);\n }\n }\n\n function resolveCollisions(nodes, alpha) {\n const i = nodes.length >> 1;\n const subject = nodes[i];\n resolveCollisionsBottomToTop(nodes, subject.y0 - py, i - 1, alpha);\n resolveCollisionsTopToBottom(nodes, subject.y1 + py, i + 1, alpha);\n resolveCollisionsBottomToTop(nodes, y1, nodes.length - 1, alpha);\n resolveCollisionsTopToBottom(nodes, y0, 0, alpha);\n }\n\n // Push any overlapping nodes down.\n function resolveCollisionsTopToBottom(nodes, y, i, alpha) {\n for (; i < nodes.length; ++i) {\n const node = nodes[i];\n const dy = (y - node.y0) * alpha;\n if (dy > 1e-6) node.y0 += dy, node.y1 += dy;\n y = node.y1 + py;\n }\n }\n\n // Push any overlapping nodes up.\n function resolveCollisionsBottomToTop(nodes, y, i, alpha) {\n for (; i >= 0; --i) {\n const node = nodes[i];\n const dy = (node.y1 - y) * alpha;\n if (dy > 1e-6) node.y0 -= dy, node.y1 -= dy;\n y = node.y0 - py;\n }\n }\n\n function reorderNodeLinks({sourceLinks, targetLinks}) {\n if (linkSort === undefined) {\n for (const {source: {sourceLinks}} of targetLinks) {\n sourceLinks.sort(ascendingTargetBreadth);\n }\n for (const {target: {targetLinks}} of sourceLinks) {\n targetLinks.sort(ascendingSourceBreadth);\n }\n }\n }\n\n function reorderLinks(nodes) {\n if (linkSort === undefined) {\n for (const {sourceLinks, targetLinks} of nodes) {\n sourceLinks.sort(ascendingTargetBreadth);\n targetLinks.sort(ascendingSourceBreadth);\n }\n }\n }\n\n // Returns the target.y0 that would produce an ideal link from source to target.\n function targetTop(source, target) {\n let y = source.y0 - (source.sourceLinks.length - 1) * py / 2;\n for (const {target: node, width} of source.sourceLinks) {\n if (node === target) break;\n y += width + py;\n }\n for (const {source: node, width} of target.targetLinks) {\n if (node === source) break;\n y -= width;\n }\n return y;\n }\n\n // Returns the source.y0 that would produce an ideal link from source to target.\n function sourceTop(source, target) {\n let y = target.y0 - (target.targetLinks.length - 1) * py / 2;\n for (const {source: node, width} of target.targetLinks) {\n if (node === source) break;\n y += width + py;\n }\n for (const {target: node, width} of source.sourceLinks) {\n if (node === target) break;\n y -= width;\n }\n return y;\n }\n\n return sankey;\n}\n", "var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We\u2019re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n", "export {default as path} from \"./path.js\";\n", "export default function(x) {\n return function constant() {\n return x;\n };\n}\n", "export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n", "export var slice = Array.prototype.slice;\n", "import {path} from \"d3-path\";\nimport {slice} from \"../array.js\";\nimport constant from \"../constant.js\";\nimport {x as pointX, y as pointY} from \"../point.js\";\nimport pointRadial from \"../pointRadial.js\";\n\nfunction linkSource(d) {\n return d.source;\n}\n\nfunction linkTarget(d) {\n return d.target;\n}\n\nfunction link(curve) {\n var source = linkSource,\n target = linkTarget,\n x = pointX,\n y = pointY,\n context = null;\n\n function link() {\n var buffer, argv = slice.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);\n if (!context) context = buffer = path();\n curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n link.source = function(_) {\n return arguments.length ? (source = _, link) : source;\n };\n\n link.target = function(_) {\n return arguments.length ? (target = _, link) : target;\n };\n\n link.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), link) : x;\n };\n\n link.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), link) : y;\n };\n\n link.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), link) : context;\n };\n\n return link;\n}\n\nfunction curveHorizontal(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);\n}\n\nfunction curveVertical(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);\n}\n\nfunction curveRadial(context, x0, y0, x1, y1) {\n var p0 = pointRadial(x0, y0),\n p1 = pointRadial(x0, y0 = (y0 + y1) / 2),\n p2 = pointRadial(x1, y0),\n p3 = pointRadial(x1, y1);\n context.moveTo(p0[0], p0[1]);\n context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n}\n\nexport function linkHorizontal() {\n return link(curveHorizontal);\n}\n\nexport function linkVertical() {\n return link(curveVertical);\n}\n\nexport function linkRadial() {\n var l = link(curveRadial);\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n return l;\n}\n", "export {default as arc} from \"./arc.js\";\nexport {default as area} from \"./area.js\";\nexport {default as line} from \"./line.js\";\nexport {default as pie} from \"./pie.js\";\nexport {default as areaRadial, default as radialArea} from \"./areaRadial.js\"; // Note: radialArea is deprecated!\nexport {default as lineRadial, default as radialLine} from \"./lineRadial.js\"; // Note: radialLine is deprecated!\nexport {default as pointRadial} from \"./pointRadial.js\";\nexport {linkHorizontal, linkVertical, linkRadial} from \"./link/index.js\";\n\nexport {default as symbol, symbols} from \"./symbol.js\";\nexport {default as symbolCircle} from \"./symbol/circle.js\";\nexport {default as symbolCross} from \"./symbol/cross.js\";\nexport {default as symbolDiamond} from \"./symbol/diamond.js\";\nexport {default as symbolSquare} from \"./symbol/square.js\";\nexport {default as symbolStar} from \"./symbol/star.js\";\nexport {default as symbolTriangle} from \"./symbol/triangle.js\";\nexport {default as symbolWye} from \"./symbol/wye.js\";\n\nexport {default as curveBasisClosed} from \"./curve/basisClosed.js\";\nexport {default as curveBasisOpen} from \"./curve/basisOpen.js\";\nexport {default as curveBasis} from \"./curve/basis.js\";\nexport {default as curveBundle} from \"./curve/bundle.js\";\nexport {default as curveCardinalClosed} from \"./curve/cardinalClosed.js\";\nexport {default as curveCardinalOpen} from \"./curve/cardinalOpen.js\";\nexport {default as curveCardinal} from \"./curve/cardinal.js\";\nexport {default as curveCatmullRomClosed} from \"./curve/catmullRomClosed.js\";\nexport {default as curveCatmullRomOpen} from \"./curve/catmullRomOpen.js\";\nexport {default as curveCatmullRom} from \"./curve/catmullRom.js\";\nexport {default as curveLinearClosed} from \"./curve/linearClosed.js\";\nexport {default as curveLinear} from \"./curve/linear.js\";\nexport {monotoneX as curveMonotoneX, monotoneY as curveMonotoneY} from \"./curve/monotone.js\";\nexport {default as curveNatural} from \"./curve/natural.js\";\nexport {default as curveStep, stepAfter as curveStepAfter, stepBefore as curveStepBefore} from \"./curve/step.js\";\n\nexport {default as stack} from \"./stack.js\";\nexport {default as stackOffsetExpand} from \"./offset/expand.js\";\nexport {default as stackOffsetDiverging} from \"./offset/diverging.js\";\nexport {default as stackOffsetNone} from \"./offset/none.js\";\nexport {default as stackOffsetSilhouette} from \"./offset/silhouette.js\";\nexport {default as stackOffsetWiggle} from \"./offset/wiggle.js\";\nexport {default as stackOrderAppearance} from \"./order/appearance.js\";\nexport {default as stackOrderAscending} from \"./order/ascending.js\";\nexport {default as stackOrderDescending} from \"./order/descending.js\";\nexport {default as stackOrderInsideOut} from \"./order/insideOut.js\";\nexport {default as stackOrderNone} from \"./order/none.js\";\nexport {default as stackOrderReverse} from \"./order/reverse.js\";\n", "import {linkHorizontal} from \"d3-shape\";\n\nfunction horizontalSource(d) {\n return [d.source.x1, d.y0];\n}\n\nfunction horizontalTarget(d) {\n return [d.target.x0, d.y1];\n}\n\nexport default function() {\n return linkHorizontal()\n .source(horizontalSource)\n .target(horizontalTarget);\n}\n", "export {default as sankey} from \"./sankey.js\";\nexport {center as sankeyCenter, left as sankeyLeft, right as sankeyRight, justify as sankeyJustify} from \"./align.js\";\nexport {default as sankeyLinkHorizontal} from \"./sankeyLinkHorizontal.js\";\n", "export class Uid {\n private static count = 0;\n id: string;\n href: string;\n\n public static next(name: string): Uid {\n return new Uid(name + ++Uid.count);\n }\n\n constructor(id: string) {\n this.id = id;\n this.href = `#${id}`;\n }\n\n toString(): string {\n return 'url(' + this.href + ')';\n }\n}\n", "import type { Diagram } from '../../Diagram.js';\nimport { getConfig, defaultConfig } from '../../diagram-api/diagramAPI.js';\nimport {\n select as d3select,\n scaleOrdinal as d3scaleOrdinal,\n schemeTableau10 as d3schemeTableau10,\n} from 'd3';\nimport type { SankeyNode as d3SankeyNode } from 'd3-sankey';\nimport {\n sankey as d3Sankey,\n sankeyLinkHorizontal as d3SankeyLinkHorizontal,\n sankeyLeft as d3SankeyLeft,\n sankeyRight as d3SankeyRight,\n sankeyCenter as d3SankeyCenter,\n sankeyJustify as d3SankeyJustify,\n} from 'd3-sankey';\nimport { setupGraphViewbox } from '../../setupGraphViewbox.js';\nimport { Uid } from '../../rendering-util/uid.js';\nimport type { SankeyNodeAlignment } from '../../config.type.js';\n\n// Map config options to alignment functions\nconst alignmentsMap: Record<\n SankeyNodeAlignment,\n (node: d3SankeyNode, n: number) => number\n> = {\n left: d3SankeyLeft,\n right: d3SankeyRight,\n center: d3SankeyCenter,\n justify: d3SankeyJustify,\n};\n\n/**\n * Draws Sankey diagram.\n *\n * @param text - The text of the diagram\n * @param id - The id of the diagram which will be used as a DOM element id\u00A8\n * @param _version - Mermaid version from package.json\n * @param diagObj - A standard diagram containing the db and the text and type etc of the diagram\n */\nexport const draw = function (text: string, id: string, _version: string, diagObj: Diagram): void {\n // Get Sankey config\n const { securityLevel, sankey: conf } = getConfig();\n const defaultSankeyConfig = defaultConfig.sankey!;\n\n // TODO:\n // This code repeats for every diagram\n // Figure out what is happening there, probably it should be separated\n // The main thing is svg object that is a d3 wrapper for svg operations\n //\n let sandboxElement: any;\n if (securityLevel === 'sandbox') {\n sandboxElement = d3select('#i' + id);\n }\n const root =\n securityLevel === 'sandbox'\n ? d3select(sandboxElement.nodes()[0].contentDocument.body)\n : d3select('body');\n // @ts-ignore TODO root.select is not callable\n const svg = securityLevel === 'sandbox' ? root.select(`[id=\"${id}\"]`) : d3select(`[id=\"${id}\"]`);\n\n // Establish svg dimensions and get width and height\n //\n const width = conf?.width ?? defaultSankeyConfig.width!;\n const height = conf?.height ?? defaultSankeyConfig.width!;\n const useMaxWidth = conf?.useMaxWidth ?? defaultSankeyConfig.useMaxWidth!;\n const nodeAlignment = conf?.nodeAlignment ?? defaultSankeyConfig.nodeAlignment!;\n const prefix = conf?.prefix ?? defaultSankeyConfig.prefix!;\n const suffix = conf?.suffix ?? defaultSankeyConfig.suffix!;\n const showValues = conf?.showValues ?? defaultSankeyConfig.showValues!;\n\n // Prepare data for construction based on diagObj.db\n // This must be a mutable object with `nodes` and `links` properties:\n //\n // {\n // \"nodes\": [ { \"id\": \"Alice\" }, { \"id\": \"Bob\" }, { \"id\": \"Carol\" } ],\n // \"links\": [ { \"source\": \"Alice\", \"target\": \"Bob\", \"value\": 23 }, { \"source\": \"Bob\", \"target\": \"Carol\", \"value\": 43 } ]\n // }\n //\n // @ts-ignore TODO: db should be coerced to sankey DB type\n const graph = diagObj.db.getGraph();\n\n // Get alignment function\n const nodeAlign = alignmentsMap[nodeAlignment];\n\n // Construct and configure a Sankey generator\n // That will be a function that calculates nodes and links dimensions\n //\n const nodeWidth = 10;\n const sankey = d3Sankey()\n .nodeId((d: any) => d.id) // we use 'id' property to identify node\n .nodeWidth(nodeWidth)\n .nodePadding(10 + (showValues ? 15 : 0))\n .nodeAlign(nodeAlign)\n .extent([\n [0, 0],\n [width, height],\n ]);\n\n // Compute the Sankey layout: calculate nodes and links positions\n // Our `graph` object will be mutated by this and enriched with other properties\n //\n sankey(graph);\n\n // Get color scheme for the graph\n const colorScheme = d3scaleOrdinal(d3schemeTableau10);\n\n // Create rectangles for nodes\n svg\n .append('g')\n .attr('class', 'nodes')\n .selectAll('.node')\n .data(graph.nodes)\n .join('g')\n .attr('class', 'node')\n .attr('id', (d: any) => (d.uid = Uid.next('node-')).id)\n .attr('transform', function (d: any) {\n return 'translate(' + d.x0 + ',' + d.y0 + ')';\n })\n .attr('x', (d: any) => d.x0)\n .attr('y', (d: any) => d.y0)\n .append('rect')\n .attr('height', (d: any) => {\n return d.y1 - d.y0;\n })\n .attr('width', (d: any) => d.x1 - d.x0)\n .attr('fill', (d: any) => colorScheme(d.id));\n\n const getText = ({ id, value }: { id: string; value: number }) => {\n if (!showValues) {\n return id;\n }\n return `${id}\\n${prefix}${Math.round(value * 100) / 100}${suffix}`;\n };\n\n // Create labels for nodes\n svg\n .append('g')\n .attr('class', 'node-labels')\n .attr('font-size', 14)\n .selectAll('text')\n .data(graph.nodes)\n .join('text')\n .attr('x', (d: any) => (d.x0 < width / 2 ? d.x1 + 6 : d.x0 - 6))\n .attr('y', (d: any) => (d.y1 + d.y0) / 2)\n .attr('dy', `${showValues ? '0' : '0.35'}em`)\n .attr('text-anchor', (d: any) => (d.x0 < width / 2 ? 'start' : 'end'))\n .text(getText);\n\n // Creates the paths that represent the links.\n const link = svg\n .append('g')\n .attr('class', 'links')\n .attr('fill', 'none')\n .attr('stroke-opacity', 0.5)\n .selectAll('.link')\n .data(graph.links)\n .join('g')\n .attr('class', 'link')\n .style('mix-blend-mode', 'multiply');\n\n const linkColor = conf?.linkColor ?? 'gradient';\n\n if (linkColor === 'gradient') {\n const gradient = link\n .append('linearGradient')\n .attr('id', (d: any) => (d.uid = Uid.next('linearGradient-')).id)\n .attr('gradientUnits', 'userSpaceOnUse')\n .attr('x1', (d: any) => d.source.x1)\n .attr('x2', (d: any) => d.target.x0);\n\n gradient\n .append('stop')\n .attr('offset', '0%')\n .attr('stop-color', (d: any) => colorScheme(d.source.id));\n\n gradient\n .append('stop')\n .attr('offset', '100%')\n .attr('stop-color', (d: any) => colorScheme(d.target.id));\n }\n\n let coloring: any;\n switch (linkColor) {\n case 'gradient':\n coloring = (d: any) => d.uid;\n break;\n case 'source':\n coloring = (d: any) => colorScheme(d.source.id);\n break;\n case 'target':\n coloring = (d: any) => colorScheme(d.target.id);\n break;\n default:\n coloring = linkColor;\n }\n\n link\n .append('path')\n .attr('d', d3SankeyLinkHorizontal())\n .attr('stroke', coloring)\n .attr('stroke-width', (d: any) => Math.max(1, d.width));\n\n setupGraphViewbox(undefined, svg, 0, useMaxWidth);\n};\n\nexport default {\n draw,\n};\n", "export const prepareTextForParsing = (text: string): string => {\n const textToParse = text\n .replaceAll(/^[^\\S\\n\\r]+|[^\\S\\n\\r]+$/g, '') // remove all trailing spaces for each row\n .replaceAll(/([\\n\\r])+/g, '\\n') // remove empty lines duplicated\n .trim();\n\n return textToParse;\n};\n", "const getStyles = (options) =>\n `.label {\n font-family: ${options.fontFamily};\n }`;\n\nexport default getStyles;\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\n// @ts-ignore: jison doesn't export types\nimport parser from './parser/sankey.jison';\nimport db from './sankeyDB.js';\nimport renderer from './sankeyRenderer.js';\nimport { prepareTextForParsing } from './sankeyUtils.js';\nimport sankeyStyles from './styles.js';\n\nconst originalParse = parser.parse.bind(parser);\nparser.parse = (text: string) => originalParse(prepareTextForParsing(text));\n\nexport const diagram: DiagramDefinition = {\n styles: sankeyStyles,\n parser,\n db,\n renderer,\n};\n", "import { getConfig as commonGetConfig } from '../../config.js';\nimport type { PacketDiagramConfig } from '../../config.type.js';\nimport DEFAULT_CONFIG from '../../defaultConfig.js';\nimport type { DiagramDB } from '../../diagram-api/types.js';\nimport { cleanAndMerge } from '../../utils.js';\nimport {\n clear as commonClear,\n getAccDescription,\n getAccTitle,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle,\n} from '../common/commonDb.js';\nimport type { PacketWord } from './types.js';\nconst DEFAULT_PACKET_CONFIG: Required = DEFAULT_CONFIG.packet;\n\nexport class PacketDB implements DiagramDB {\n private packet: PacketWord[] = [];\n\n public getConfig() {\n const config = cleanAndMerge({\n ...DEFAULT_PACKET_CONFIG,\n ...commonGetConfig().packet,\n });\n if (config.showBits) {\n config.paddingY += 10;\n }\n return config;\n }\n\n public getPacket() {\n return this.packet;\n }\n\n public pushWord(word: PacketWord) {\n if (word.length > 0) {\n this.packet.push(word);\n }\n }\n\n public clear() {\n commonClear();\n this.packet = [];\n }\n\n public setAccTitle = setAccTitle;\n public getAccTitle = getAccTitle;\n public setDiagramTitle = setDiagramTitle;\n public getDiagramTitle = getDiagramTitle;\n public getAccDescription = getAccDescription;\n public setAccDescription = setAccDescription;\n}\n", "import type { Packet } from '@mermaid-js/parser';\nimport { parse } from '@mermaid-js/parser';\nimport type { ParserDefinition } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport { populateCommonDb } from '../common/populateCommonDb.js';\nimport { PacketDB } from './db.js';\nimport type { PacketBlock, PacketWord } from './types.js';\n\nconst maxPacketSize = 10_000;\n\nconst populate = (ast: Packet, db: PacketDB) => {\n populateCommonDb(ast, db);\n let lastBit = -1;\n let word: PacketWord = [];\n let row = 1;\n const { bitsPerRow } = db.getConfig();\n\n for (let { start, end, bits, label } of ast.blocks) {\n if (start !== undefined && end !== undefined && end < start) {\n throw new Error(`Packet block ${start} - ${end} is invalid. End must be greater than start.`);\n }\n start ??= lastBit + 1;\n if (start !== lastBit + 1) {\n throw new Error(\n `Packet block ${start} - ${end ?? start} is not contiguous. It should start from ${\n lastBit + 1\n }.`\n );\n }\n if (bits === 0) {\n throw new Error(`Packet block ${start} is invalid. Cannot have a zero bit field.`);\n }\n end ??= start + (bits ?? 1) - 1;\n bits ??= end - start + 1;\n lastBit = end;\n log.debug(`Packet block ${start} - ${lastBit} with label ${label}`);\n\n while (word.length <= bitsPerRow + 1 && db.getPacket().length < maxPacketSize) {\n const [block, nextBlock] = getNextFittingBlock({ start, end, bits, label }, row, bitsPerRow);\n word.push(block);\n if (block.end + 1 === row * bitsPerRow) {\n db.pushWord(word);\n word = [];\n row++;\n }\n if (!nextBlock) {\n break;\n }\n ({ start, end, bits, label } = nextBlock);\n }\n }\n db.pushWord(word);\n};\n\nconst getNextFittingBlock = (\n block: PacketBlock,\n row: number,\n bitsPerRow: number\n): [Required, PacketBlock | undefined] => {\n if (block.start === undefined) {\n throw new Error('start should have been set during first phase');\n }\n if (block.end === undefined) {\n throw new Error('end should have been set during first phase');\n }\n\n if (block.start > block.end) {\n throw new Error(`Block start ${block.start} is greater than block end ${block.end}.`);\n }\n\n if (block.end + 1 <= row * bitsPerRow) {\n return [block as Required, undefined];\n }\n\n const rowEnd = row * bitsPerRow - 1;\n const rowStart = row * bitsPerRow;\n return [\n {\n start: block.start,\n end: rowEnd,\n label: block.label,\n bits: rowEnd - block.start,\n },\n {\n start: rowStart,\n end: block.end,\n label: block.label,\n bits: block.end - rowStart,\n },\n ];\n};\n\nexport const parser: ParserDefinition = {\n // @ts-expect-error - PacketDB is not assignable to DiagramDB\n parser: { yy: undefined },\n parse: async (input: string): Promise => {\n const ast: Packet = await parse('packet', input);\n const db = parser.parser?.yy;\n if (!(db instanceof PacketDB)) {\n throw new Error(\n 'parser.parser?.yy was not a PacketDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.'\n );\n }\n log.debug(ast);\n populate(ast, db);\n },\n};\n", "import type { Diagram } from '../../Diagram.js';\nimport type { PacketDiagramConfig } from '../../config.type.js';\nimport type { DiagramRenderer, DrawDefinition, SVG, SVGGroup } from '../../diagram-api/types.js';\nimport { selectSvgElement } from '../../rendering-util/selectSvgElement.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\nimport type { PacketDB, PacketWord } from './types.js';\n\nconst draw: DrawDefinition = (_text, id, _version, diagram: Diagram) => {\n const db = diagram.db as PacketDB;\n const config = db.getConfig();\n const { rowHeight, paddingY, bitWidth, bitsPerRow } = config;\n const words = db.getPacket();\n const title = db.getDiagramTitle();\n const totalRowHeight = rowHeight + paddingY;\n const svgHeight = totalRowHeight * (words.length + 1) - (title ? 0 : rowHeight);\n const svgWidth = bitWidth * bitsPerRow + 2;\n const svg: SVG = selectSvgElement(id);\n\n svg.attr('viewbox', `0 0 ${svgWidth} ${svgHeight}`);\n configureSvgSize(svg, svgHeight, svgWidth, config.useMaxWidth);\n\n for (const [word, packet] of words.entries()) {\n drawWord(svg, packet, word, config);\n }\n\n svg\n .append('text')\n .text(title)\n .attr('x', svgWidth / 2)\n .attr('y', svgHeight - totalRowHeight / 2)\n .attr('dominant-baseline', 'middle')\n .attr('text-anchor', 'middle')\n .attr('class', 'packetTitle');\n};\n\nconst drawWord = (\n svg: SVG,\n word: PacketWord,\n rowNumber: number,\n { rowHeight, paddingX, paddingY, bitWidth, bitsPerRow, showBits }: Required\n) => {\n const group: SVGGroup = svg.append('g');\n const wordY = rowNumber * (rowHeight + paddingY) + paddingY;\n for (const block of word) {\n const blockX = (block.start % bitsPerRow) * bitWidth + 1;\n const width = (block.end - block.start + 1) * bitWidth - paddingX;\n // Block rectangle\n group\n .append('rect')\n .attr('x', blockX)\n .attr('y', wordY)\n .attr('width', width)\n .attr('height', rowHeight)\n .attr('class', 'packetBlock');\n\n // Block label\n group\n .append('text')\n .attr('x', blockX + width / 2)\n .attr('y', wordY + rowHeight / 2)\n .attr('class', 'packetLabel')\n .attr('dominant-baseline', 'middle')\n .attr('text-anchor', 'middle')\n .text(block.label);\n\n if (!showBits) {\n continue;\n }\n // Start byte count\n const isSingleBlock = block.end === block.start;\n const bitNumberY = wordY - 2;\n group\n .append('text')\n .attr('x', blockX + (isSingleBlock ? width / 2 : 0))\n .attr('y', bitNumberY)\n .attr('class', 'packetByte start')\n .attr('dominant-baseline', 'auto')\n .attr('text-anchor', isSingleBlock ? 'middle' : 'start')\n .text(block.start);\n\n // Draw end byte count if it is not the same as start byte count\n if (!isSingleBlock) {\n group\n .append('text')\n .attr('x', blockX + width)\n .attr('y', bitNumberY)\n .attr('class', 'packetByte end')\n .attr('dominant-baseline', 'auto')\n .attr('text-anchor', 'end')\n .text(block.end);\n }\n }\n};\nexport const renderer: DiagramRenderer = { draw };\n", "import type { DiagramStylesProvider } from '../../diagram-api/types.js';\nimport { cleanAndMerge } from '../../utils.js';\nimport type { PacketStyleOptions } from './types.js';\n\nconst defaultPacketStyleOptions: PacketStyleOptions = {\n byteFontSize: '10px',\n startByteColor: 'black',\n endByteColor: 'black',\n labelColor: 'black',\n labelFontSize: '12px',\n titleColor: 'black',\n titleFontSize: '14px',\n blockStrokeColor: 'black',\n blockStrokeWidth: '1',\n blockFillColor: '#efefef',\n};\n\nexport const styles: DiagramStylesProvider = ({ packet }: { packet?: PacketStyleOptions } = {}) => {\n const options = cleanAndMerge(defaultPacketStyleOptions, packet);\n\n return `\n\t.packetByte {\n\t\tfont-size: ${options.byteFontSize};\n\t}\n\t.packetByte.start {\n\t\tfill: ${options.startByteColor};\n\t}\n\t.packetByte.end {\n\t\tfill: ${options.endByteColor};\n\t}\n\t.packetLabel {\n\t\tfill: ${options.labelColor};\n\t\tfont-size: ${options.labelFontSize};\n\t}\n\t.packetTitle {\n\t\tfill: ${options.titleColor};\n\t\tfont-size: ${options.titleFontSize};\n\t}\n\t.packetBlock {\n\t\tstroke: ${options.blockStrokeColor};\n\t\tstroke-width: ${options.blockStrokeWidth};\n\t\tfill: ${options.blockFillColor};\n\t}\n\t`;\n};\n\nexport default styles;\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\nimport { PacketDB } from './db.js';\nimport { parser } from './parser.js';\nimport { renderer } from './renderer.js';\nimport { styles } from './styles.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n get db() {\n return new PacketDB();\n },\n renderer,\n styles,\n};\n", "import { getConfig as commonGetConfig } from '../../config.js';\nimport type { RadarDiagramConfig } from '../../config.type.js';\nimport DEFAULT_CONFIG from '../../defaultConfig.js';\nimport { cleanAndMerge } from '../../utils.js';\nimport {\n clear as commonClear,\n getAccDescription,\n getAccTitle,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle,\n} from '../common/commonDb.js';\nimport type {\n Axis,\n Curve,\n Option,\n Entry,\n} from '../../../../parser/dist/src/language/generated/ast.js';\nimport type { RadarAxis, RadarCurve, RadarOptions, RadarDB, RadarData } from './types.js';\n\nconst defaultOptions: RadarOptions = {\n showLegend: true,\n ticks: 5,\n max: null,\n min: 0,\n graticule: 'circle',\n};\n\nconst defaultRadarData: RadarData = {\n axes: [],\n curves: [],\n options: defaultOptions,\n};\n\nlet data: RadarData = structuredClone(defaultRadarData);\n\nconst DEFAULT_RADAR_CONFIG: Required = DEFAULT_CONFIG.radar;\n\nconst getConfig = (): Required => {\n const config = cleanAndMerge({\n ...DEFAULT_RADAR_CONFIG,\n ...commonGetConfig().radar,\n });\n return config;\n};\n\nconst getAxes = (): RadarAxis[] => data.axes;\nconst getCurves = (): RadarCurve[] => data.curves;\nconst getOptions = (): RadarOptions => data.options;\n\nconst setAxes = (axes: Axis[]) => {\n data.axes = axes.map((axis) => {\n return {\n name: axis.name,\n label: axis.label ?? axis.name,\n };\n });\n};\n\nconst setCurves = (curves: Curve[]) => {\n data.curves = curves.map((curve) => {\n return {\n name: curve.name,\n label: curve.label ?? curve.name,\n entries: computeCurveEntries(curve.entries),\n };\n });\n};\n\nconst computeCurveEntries = (entries: Entry[]): number[] => {\n // If entries have axis reference, we must order them according to the axes\n if (entries[0].axis == undefined) {\n return entries.map((entry) => entry.value);\n }\n const axes = getAxes();\n if (axes.length === 0) {\n throw new Error('Axes must be populated before curves for reference entries');\n }\n return axes.map((axis) => {\n const entry = entries.find((entry) => entry.axis?.$refText === axis.name);\n if (entry === undefined) {\n throw new Error('Missing entry for axis ' + axis.label);\n }\n return entry.value;\n });\n};\n\nconst setOptions = (options: Option[]) => {\n // Create a map from option names to option objects for quick lookup\n const optionMap = options.reduce(\n (acc, option) => {\n acc[option.name] = option;\n return acc;\n },\n {} as Record\n );\n\n data.options = {\n showLegend: (optionMap.showLegend?.value as boolean) ?? defaultOptions.showLegend,\n ticks: (optionMap.ticks?.value as number) ?? defaultOptions.ticks,\n max: (optionMap.max?.value as number) ?? defaultOptions.max,\n min: (optionMap.min?.value as number) ?? defaultOptions.min,\n graticule: (optionMap.graticule?.value as 'circle' | 'polygon') ?? defaultOptions.graticule,\n };\n};\n\nconst clear = () => {\n commonClear();\n data = structuredClone(defaultRadarData);\n};\n\nexport const db: RadarDB = {\n getAxes,\n getCurves,\n getOptions,\n setAxes,\n setCurves,\n setOptions,\n getConfig,\n clear,\n setAccTitle,\n getAccTitle,\n setDiagramTitle,\n getDiagramTitle,\n getAccDescription,\n setAccDescription,\n};\n", "import type { Radar } from '@mermaid-js/parser';\nimport { parse } from '@mermaid-js/parser';\nimport type { ParserDefinition } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport { populateCommonDb } from '../common/populateCommonDb.js';\nimport { db } from './db.js';\n\nconst populate = (ast: Radar) => {\n populateCommonDb(ast, db);\n const { axes, curves, options } = ast;\n // Here we can add specific logic between the AST and the DB\n db.setAxes(axes);\n db.setCurves(curves);\n db.setOptions(options);\n};\n\nexport const parser: ParserDefinition = {\n parse: async (input: string): Promise => {\n const ast: Radar = await parse('radar', input);\n log.debug(ast);\n populate(ast);\n },\n};\n", "import type { Diagram } from '../../Diagram.js';\nimport type { RadarDiagramConfig } from '../../config.type.js';\nimport type { DiagramRenderer, DrawDefinition, SVG, SVGGroup } from '../../diagram-api/types.js';\nimport { selectSvgElement } from '../../rendering-util/selectSvgElement.js';\nimport type { RadarDB, RadarAxis, RadarCurve } from './types.js';\n\nconst draw: DrawDefinition = (_text, id, _version, diagram: Diagram) => {\n const db = diagram.db as RadarDB;\n const axes = db.getAxes();\n const curves = db.getCurves();\n const options = db.getOptions();\n const config = db.getConfig();\n const title = db.getDiagramTitle();\n\n const svg: SVG = selectSvgElement(id);\n\n // \uD83D\uDDBC\uFE0F Draw the main frame\n const g = drawFrame(svg, config);\n\n // The maximum value for the radar chart is the 'max' option if it exists,\n // otherwise it is the maximum value of the curves\n const maxValue: number =\n options.max ?? Math.max(...curves.map((curve) => Math.max(...curve.entries)));\n const minValue: number = options.min;\n const radius = Math.min(config.width, config.height) / 2;\n\n // \uD83D\uDD78\uFE0F Draw graticule\n drawGraticule(g, axes, radius, options.ticks, options.graticule);\n\n // \uD83E\uDE93 Draw the axes\n drawAxes(g, axes, radius, config);\n\n // \uD83D\uDCCA Draw the curves\n drawCurves(g, axes, curves, minValue, maxValue, options.graticule, config);\n\n // \uD83C\uDFF7 Draw Legend\n drawLegend(g, curves, options.showLegend, config);\n\n // \uD83C\uDFF7 Draw Title\n g.append('text')\n .attr('class', 'radarTitle')\n .text(title)\n .attr('x', 0)\n .attr('y', -config.height / 2 - config.marginTop);\n};\n\n// Returns a g element to center the radar chart\n// it is of type SVGElement\nconst drawFrame = (svg: SVG, config: Required): SVGGroup => {\n const totalWidth = config.width + config.marginLeft + config.marginRight;\n const totalHeight = config.height + config.marginTop + config.marginBottom;\n const center = {\n x: config.marginLeft + config.width / 2,\n y: config.marginTop + config.height / 2,\n };\n // Initialize the SVG\n svg\n .attr('viewbox', `0 0 ${totalWidth} ${totalHeight}`)\n .attr('width', totalWidth)\n .attr('height', totalHeight);\n // g element to center the radar chart\n return svg.append('g').attr('transform', `translate(${center.x}, ${center.y})`);\n};\n\nconst drawGraticule = (\n g: SVGGroup,\n axes: RadarAxis[],\n radius: number,\n ticks: number,\n graticule: string\n) => {\n if (graticule === 'circle') {\n // Draw a circle for each tick\n for (let i = 0; i < ticks; i++) {\n const r = (radius * (i + 1)) / ticks;\n g.append('circle').attr('r', r).attr('class', 'radarGraticule');\n }\n } else if (graticule === 'polygon') {\n // Draw a polygon\n const numAxes = axes.length;\n for (let i = 0; i < ticks; i++) {\n const r = (radius * (i + 1)) / ticks;\n const points = axes\n .map((_, j) => {\n const angle = (2 * j * Math.PI) / numAxes - Math.PI / 2;\n const x = r * Math.cos(angle);\n const y = r * Math.sin(angle);\n return `${x},${y}`;\n })\n .join(' ');\n g.append('polygon').attr('points', points).attr('class', 'radarGraticule');\n }\n }\n};\n\nconst drawAxes = (\n g: SVGGroup,\n axes: RadarAxis[],\n radius: number,\n config: Required\n) => {\n const numAxes = axes.length;\n\n for (let i = 0; i < numAxes; i++) {\n const label = axes[i].label;\n const angle = (2 * i * Math.PI) / numAxes - Math.PI / 2;\n g.append('line')\n .attr('x1', 0)\n .attr('y1', 0)\n .attr('x2', radius * config.axisScaleFactor * Math.cos(angle))\n .attr('y2', radius * config.axisScaleFactor * Math.sin(angle))\n .attr('class', 'radarAxisLine');\n g.append('text')\n .text(label)\n .attr('x', radius * config.axisLabelFactor * Math.cos(angle))\n .attr('y', radius * config.axisLabelFactor * Math.sin(angle))\n .attr('class', 'radarAxisLabel');\n }\n};\n\nfunction drawCurves(\n g: SVGGroup,\n axes: RadarAxis[],\n curves: RadarCurve[],\n minValue: number,\n maxValue: number,\n graticule: string,\n config: Required\n) {\n const numAxes = axes.length;\n const radius = Math.min(config.width, config.height) / 2;\n\n curves.forEach((curve, index) => {\n if (curve.entries.length !== numAxes) {\n // Skip curves that do not have an entry for each axis.\n return;\n }\n // Compute points for the curve.\n const points = curve.entries.map((entry, i) => {\n const angle = (2 * Math.PI * i) / numAxes - Math.PI / 2;\n const r = relativeRadius(entry, minValue, maxValue, radius);\n const x = r * Math.cos(angle);\n const y = r * Math.sin(angle);\n return { x, y };\n });\n\n if (graticule === 'circle') {\n // Draw a closed curve through the points.\n g.append('path')\n .attr('d', closedRoundCurve(points, config.curveTension))\n .attr('class', `radarCurve-${index}`);\n } else if (graticule === 'polygon') {\n // Draw a polygon for each curve.\n g.append('polygon')\n .attr('points', points.map((p) => `${p.x},${p.y}`).join(' '))\n .attr('class', `radarCurve-${index}`);\n }\n });\n}\n\nexport function relativeRadius(\n value: number,\n minValue: number,\n maxValue: number,\n radius: number\n): number {\n const clippedValue = Math.min(Math.max(value, minValue), maxValue);\n return (radius * (clippedValue - minValue)) / (maxValue - minValue);\n}\n\nexport function closedRoundCurve(points: { x: number; y: number }[], tension: number): string {\n // Catmull-Rom spline helper function\n const numPoints = points.length;\n let d = `M${points[0].x},${points[0].y}`;\n // For each segment from point i to point (i+1) mod n, compute control points.\n for (let i = 0; i < numPoints; i++) {\n const p0 = points[(i - 1 + numPoints) % numPoints];\n const p1 = points[i];\n const p2 = points[(i + 1) % numPoints];\n const p3 = points[(i + 2) % numPoints];\n // Calculate the control points for the cubic Bezier segment\n const cp1 = {\n x: p1.x + (p2.x - p0.x) * tension,\n y: p1.y + (p2.y - p0.y) * tension,\n };\n const cp2 = {\n x: p2.x - (p3.x - p1.x) * tension,\n y: p2.y - (p3.y - p1.y) * tension,\n };\n d += ` C${cp1.x},${cp1.y} ${cp2.x},${cp2.y} ${p2.x},${p2.y}`;\n }\n return `${d} Z`;\n}\n\nfunction drawLegend(\n g: SVGGroup,\n curves: RadarCurve[],\n showLegend: boolean,\n config: Required\n) {\n if (!showLegend) {\n return;\n }\n\n // Create a legend group and position it in the top-right corner of the chart.\n const legendX = ((config.width / 2 + config.marginRight) * 3) / 4;\n const legendY = (-(config.height / 2 + config.marginTop) * 3) / 4;\n const lineHeight = 20;\n\n curves.forEach((curve, index) => {\n const itemGroup = g\n .append('g')\n .attr('transform', `translate(${legendX}, ${legendY + index * lineHeight})`);\n\n // Draw a square marker for this curve.\n itemGroup\n .append('rect')\n .attr('width', 12)\n .attr('height', 12)\n .attr('class', `radarLegendBox-${index}`);\n\n // Draw the label text next to the marker.\n itemGroup\n .append('text')\n .attr('x', 16)\n .attr('y', 0)\n .attr('class', 'radarLegendText')\n .text(curve.label);\n });\n}\n\nexport const renderer: DiagramRenderer = { draw };\n", "import type { DiagramStylesProvider } from '../../diagram-api/types.js';\nimport { cleanAndMerge } from '../../utils.js';\nimport type { RadarStyleOptions } from './types.js';\nimport { getThemeVariables } from '../../themes/theme-default.js';\nimport { getConfig as getConfigAPI } from '../../config.js';\n\nconst genIndexStyles = (\n themeVariables: ReturnType,\n radarOptions: RadarStyleOptions\n) => {\n let sections = '';\n for (let i = 0; i < themeVariables.THEME_COLOR_LIMIT; i++) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const indexColor = (themeVariables as any)[`cScale${i}`];\n sections += `\n\t\t.radarCurve-${i} {\n\t\t\tcolor: ${indexColor};\n\t\t\tfill: ${indexColor};\n\t\t\tfill-opacity: ${radarOptions.curveOpacity};\n\t\t\tstroke: ${indexColor};\n\t\t\tstroke-width: ${radarOptions.curveStrokeWidth};\n\t\t}\n\t\t.radarLegendBox-${i} {\n\t\t\tfill: ${indexColor};\n\t\t\tfill-opacity: ${radarOptions.curveOpacity};\n\t\t\tstroke: ${indexColor};\n\t\t}\n\t\t`;\n }\n return sections;\n};\n\nexport const buildRadarStyleOptions = (radar?: RadarStyleOptions) => {\n const defaultThemeVariables = getThemeVariables();\n const currentConfig = getConfigAPI();\n\n const themeVariables = cleanAndMerge(defaultThemeVariables, currentConfig.themeVariables);\n const radarOptions: RadarStyleOptions = cleanAndMerge(themeVariables.radar, radar);\n\n return { themeVariables, radarOptions };\n};\n\nexport const styles: DiagramStylesProvider = ({ radar }: { radar?: RadarStyleOptions } = {}) => {\n const { themeVariables, radarOptions } = buildRadarStyleOptions(radar);\n return `\n\t.radarTitle {\n\t\tfont-size: ${themeVariables.fontSize};\n\t\tcolor: ${themeVariables.titleColor};\n\t\tdominant-baseline: hanging;\n\t\ttext-anchor: middle;\n\t}\n\t.radarAxisLine {\n\t\tstroke: ${radarOptions.axisColor};\n\t\tstroke-width: ${radarOptions.axisStrokeWidth};\n\t}\n\t.radarAxisLabel {\n\t\tdominant-baseline: middle;\n\t\ttext-anchor: middle;\n\t\tfont-size: ${radarOptions.axisLabelFontSize}px;\n\t\tcolor: ${radarOptions.axisColor};\n\t}\n\t.radarGraticule {\n\t\tfill: ${radarOptions.graticuleColor};\n\t\tfill-opacity: ${radarOptions.graticuleOpacity};\n\t\tstroke: ${radarOptions.graticuleColor};\n\t\tstroke-width: ${radarOptions.graticuleStrokeWidth};\n\t}\n\t.radarLegendText {\n\t\ttext-anchor: start;\n\t\tfont-size: ${radarOptions.legendFontSize}px;\n\t\tdominant-baseline: hanging;\n\t}\n\t${genIndexStyles(themeVariables, radarOptions)}\n\t`;\n};\n\nexport default styles;\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\nimport { db } from './db.js';\nimport { parser } from './parser.js';\nimport { renderer } from './renderer.js';\nimport { styles } from './styles.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n db,\n renderer,\n styles,\n};\n", "/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,15],$V1=[1,7],$V2=[1,13],$V3=[1,14],$V4=[1,19],$V5=[1,16],$V6=[1,17],$V7=[1,18],$V8=[8,30],$V9=[8,10,21,28,29,30,31,39,43,46],$Va=[1,23],$Vb=[1,24],$Vc=[8,10,15,16,21,28,29,30,31,39,43,46],$Vd=[8,10,15,16,21,27,28,29,30,31,39,43,46],$Ve=[1,49];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"spaceLines\":3,\"SPACELINE\":4,\"NL\":5,\"separator\":6,\"SPACE\":7,\"EOF\":8,\"start\":9,\"BLOCK_DIAGRAM_KEY\":10,\"document\":11,\"stop\":12,\"statement\":13,\"link\":14,\"LINK\":15,\"START_LINK\":16,\"LINK_LABEL\":17,\"STR\":18,\"nodeStatement\":19,\"columnsStatement\":20,\"SPACE_BLOCK\":21,\"blockStatement\":22,\"classDefStatement\":23,\"cssClassStatement\":24,\"styleStatement\":25,\"node\":26,\"SIZE\":27,\"COLUMNS\":28,\"id-block\":29,\"end\":30,\"NODE_ID\":31,\"nodeShapeNLabel\":32,\"dirList\":33,\"DIR\":34,\"NODE_DSTART\":35,\"NODE_DEND\":36,\"BLOCK_ARROW_START\":37,\"BLOCK_ARROW_END\":38,\"classDef\":39,\"CLASSDEF_ID\":40,\"CLASSDEF_STYLEOPTS\":41,\"DEFAULT\":42,\"class\":43,\"CLASSENTITY_IDS\":44,\"STYLECLASS\":45,\"style\":46,\"STYLE_ENTITY_IDS\":47,\"STYLE_DEFINITION_DATA\":48,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"SPACELINE\",5:\"NL\",7:\"SPACE\",8:\"EOF\",10:\"BLOCK_DIAGRAM_KEY\",15:\"LINK\",16:\"START_LINK\",17:\"LINK_LABEL\",18:\"STR\",21:\"SPACE_BLOCK\",27:\"SIZE\",28:\"COLUMNS\",29:\"id-block\",30:\"end\",31:\"NODE_ID\",34:\"DIR\",35:\"NODE_DSTART\",36:\"NODE_DEND\",37:\"BLOCK_ARROW_START\",38:\"BLOCK_ARROW_END\",39:\"classDef\",40:\"CLASSDEF_ID\",41:\"CLASSDEF_STYLEOPTS\",42:\"DEFAULT\",43:\"class\",44:\"CLASSENTITY_IDS\",45:\"STYLECLASS\",46:\"style\",47:\"STYLE_ENTITY_IDS\",48:\"STYLE_DEFINITION_DATA\"},\nproductions_: [0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[33,1],[33,2],[32,3],[32,4],[23,3],[23,3],[24,3],[25,3]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 4:\nyy.getLogger().debug('Rule: separator (NL) ');\nbreak;\ncase 5:\nyy.getLogger().debug('Rule: separator (Space) ');\nbreak;\ncase 6:\nyy.getLogger().debug('Rule: separator (EOF) ');\nbreak;\ncase 7:\n yy.getLogger().debug(\"Rule: hierarchy: \", $$[$0-1]); yy.setHierarchy($$[$0-1]); \nbreak;\ncase 8:\nyy.getLogger().debug('Stop NL ');\nbreak;\ncase 9:\nyy.getLogger().debug('Stop EOF ');\nbreak;\ncase 10:\nyy.getLogger().debug('Stop NL2 ');\nbreak;\ncase 11:\nyy.getLogger().debug('Stop EOF2 ');\nbreak;\ncase 12:\n yy.getLogger().debug(\"Rule: statement: \", $$[$0]); typeof $$[$0].length === 'number'?this.$ = $$[$0]:this.$ = [$$[$0]]; \nbreak;\ncase 13:\n yy.getLogger().debug(\"Rule: statement #2: \", $$[$0-1]); this.$ = [$$[$0-1]].concat($$[$0]); \nbreak;\ncase 14:\n yy.getLogger().debug(\"Rule: link: \", $$[$0], yytext); this.$={edgeTypeStr: $$[$0], label:''}; \nbreak;\ncase 15:\n yy.getLogger().debug(\"Rule: LABEL link: \", $$[$0-3], $$[$0-1], $$[$0]); this.$={edgeTypeStr: $$[$0], label:$$[$0-1]}; \nbreak;\ncase 18:\n const num=parseInt($$[$0]); const spaceId = yy.generateId(); this.$ = { id: spaceId, type:'space', label:'', width: num, children: [] }\nbreak;\ncase 23:\n\n yy.getLogger().debug('Rule: (nodeStatement link node) ', $$[$0-2], $$[$0-1], $$[$0], ' typestr: ',$$[$0-1].edgeTypeStr);\n const edgeData = yy.edgeStrToEdgeData($$[$0-1].edgeTypeStr)\n this.$ = [\n {id: $$[$0-2].id, label: $$[$0-2].label, type:$$[$0-2].type, directions: $$[$0-2].directions},\n {id: $$[$0-2].id + '-' + $$[$0].id, start: $$[$0-2].id, end: $$[$0].id, label: $$[$0-1].label, type: 'edge', directions: $$[$0].directions, arrowTypeEnd: edgeData, arrowTypeStart: 'arrow_open' },\n {id: $$[$0].id, label: $$[$0].label, type: yy.typeStr2Type($$[$0].typeStr), directions: $$[$0].directions}\n ];\n \nbreak;\ncase 24:\n yy.getLogger().debug('Rule: nodeStatement (abc88 node size) ', $$[$0-1], $$[$0]); this.$ = {id: $$[$0-1].id, label: $$[$0-1].label, type: yy.typeStr2Type($$[$0-1].typeStr), directions: $$[$0-1].directions, widthInColumns: parseInt($$[$0],10)}; \nbreak;\ncase 25:\n yy.getLogger().debug('Rule: nodeStatement (node) ', $$[$0]); this.$ = {id: $$[$0].id, label: $$[$0].label, type: yy.typeStr2Type($$[$0].typeStr), directions: $$[$0].directions, widthInColumns:1}; \nbreak;\ncase 26:\n yy.getLogger().debug('APA123', this? this:'na'); yy.getLogger().debug(\"COLUMNS: \", $$[$0]); this.$ = {type: 'column-setting', columns: $$[$0] === 'auto'?-1:parseInt($$[$0]) } \nbreak;\ncase 27:\n yy.getLogger().debug('Rule: id-block statement : ', $$[$0-2], $$[$0-1]); const id2 = yy.generateId(); this.$ = { ...$$[$0-2], type:'composite', children: $$[$0-1] }; \nbreak;\ncase 28:\n yy.getLogger().debug('Rule: blockStatement : ', $$[$0-2], $$[$0-1], $$[$0]); const id = yy.generateId(); this.$ = { id, type:'composite', label:'', children: $$[$0-1] }; \nbreak;\ncase 29:\n yy.getLogger().debug(\"Rule: node (NODE_ID separator): \", $$[$0]); this.$ = { id: $$[$0] }; \nbreak;\ncase 30:\n\n yy.getLogger().debug(\"Rule: node (NODE_ID nodeShapeNLabel separator): \", $$[$0-1], $$[$0]);\n this.$ = { id: $$[$0-1], label: $$[$0].label, typeStr: $$[$0].typeStr, directions: $$[$0].directions };\n \nbreak;\ncase 31:\n yy.getLogger().debug(\"Rule: dirList: \", $$[$0]); this.$ = [$$[$0]]; \nbreak;\ncase 32:\n yy.getLogger().debug(\"Rule: dirList: \", $$[$0-1], $$[$0]); this.$ = [$$[$0-1]].concat($$[$0]); \nbreak;\ncase 33:\n yy.getLogger().debug(\"Rule: nodeShapeNLabel: \", $$[$0-2], $$[$0-1], $$[$0]); this.$ = { typeStr: $$[$0-2] + $$[$0], label: $$[$0-1] }; \nbreak;\ncase 34:\n yy.getLogger().debug(\"Rule: BLOCK_ARROW nodeShapeNLabel: \", $$[$0-3], $$[$0-2], \" #3:\",$$[$0-1], $$[$0]); this.$ = { typeStr: $$[$0-3] + $$[$0], label: $$[$0-2], directions: $$[$0-1]}; \nbreak;\ncase 35: case 36:\n\n this.$ = { type: 'classDef', id: $$[$0-1].trim(), css: $$[$0].trim() };\n \nbreak;\ncase 37:\n\n //log.debug('apply class: id(s): ',$$[$0-1], ' style class: ', $$[$0]);\n this.$={ type: 'applyClass', id: $$[$0-1].trim(), styleClass: $$[$0].trim() };\n \nbreak;\ncase 38:\n\n this.$={ type: 'applyStyles', id: $$[$0-1].trim(), stylesStr: $$[$0].trim() };\n \nbreak;\n}\n},\ntable: [{9:1,10:[1,2]},{1:[3]},{10:$V0,11:3,13:4,19:5,20:6,21:$V1,22:8,23:9,24:10,25:11,26:12,28:$V2,29:$V3,31:$V4,39:$V5,43:$V6,46:$V7},{8:[1,20]},o($V8,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,10:$V0,21:$V1,28:$V2,29:$V3,31:$V4,39:$V5,43:$V6,46:$V7}),o($V9,[2,16],{14:22,15:$Va,16:$Vb}),o($V9,[2,17]),o($V9,[2,18]),o($V9,[2,19]),o($V9,[2,20]),o($V9,[2,21]),o($V9,[2,22]),o($Vc,[2,25],{27:[1,25]}),o($V9,[2,26]),{19:26,26:12,31:$V4},{10:$V0,11:27,13:4,19:5,20:6,21:$V1,22:8,23:9,24:10,25:11,26:12,28:$V2,29:$V3,31:$V4,39:$V5,43:$V6,46:$V7},{40:[1,28],42:[1,29]},{44:[1,30]},{47:[1,31]},o($Vd,[2,29],{32:32,35:[1,33],37:[1,34]}),{1:[2,7]},o($V8,[2,13]),{26:35,31:$V4},{31:[2,14]},{17:[1,36]},o($Vc,[2,24]),{10:$V0,11:37,13:4,14:22,15:$Va,16:$Vb,19:5,20:6,21:$V1,22:8,23:9,24:10,25:11,26:12,28:$V2,29:$V3,31:$V4,39:$V5,43:$V6,46:$V7},{30:[1,38]},{41:[1,39]},{41:[1,40]},{45:[1,41]},{48:[1,42]},o($Vd,[2,30]),{18:[1,43]},{18:[1,44]},o($Vc,[2,23]),{18:[1,45]},{30:[1,46]},o($V9,[2,28]),o($V9,[2,35]),o($V9,[2,36]),o($V9,[2,37]),o($V9,[2,38]),{36:[1,47]},{33:48,34:$Ve},{15:[1,50]},o($V9,[2,27]),o($Vd,[2,33]),{38:[1,51]},{33:52,34:$Ve,38:[2,31]},{31:[2,15]},o($Vd,[2,34]),{38:[2,32]}],\ndefaultActions: {20:[2,7],23:[2,14],50:[2,15],52:[2,32]},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = tstack.pop() || lexer.lex() || EOF;\n if (typeof token !== 'number') {\n if (token instanceof Array) {\n tstack = token;\n token = tstack.pop();\n }\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// 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.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n 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(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0: yy.getLogger().debug('Found block-beta'); return 10; \nbreak;\ncase 1: yy.getLogger().debug('Found id-block'); return 29; \nbreak;\ncase 2: yy.getLogger().debug('Found block'); return 10; \nbreak;\ncase 3: yy.getLogger().debug('.', yy_.yytext); /* skip all whitespace */ \nbreak;\ncase 4:yy.getLogger().debug('_', yy_.yytext); /* skip all whitespace */ \nbreak;\ncase 5: return 5 \nbreak;\ncase 6: yy_.yytext=-1; return 28; \nbreak;\ncase 7: yy_.yytext = yy_.yytext.replace(/columns\\s+/,''); yy.getLogger().debug('COLUMNS (LEX)', yy_.yytext); return 28; \nbreak;\ncase 8: this.pushState(\"md_string\");\nbreak;\ncase 9: return \"MD_STR\";\nbreak;\ncase 10: this.popState();\nbreak;\ncase 11:this.pushState(\"string\");\nbreak;\ncase 12: yy.getLogger().debug('LEX: POPPING STR:', yy_.yytext);this.popState();\nbreak;\ncase 13: yy.getLogger().debug('LEX: STR end:', yy_.yytext); return \"STR\";\nbreak;\ncase 14: yy_.yytext = yy_.yytext.replace(/space\\:/,'');yy.getLogger().debug('SPACE NUM (LEX)', yy_.yytext); return 21; \nbreak;\ncase 15: yy_.yytext = '1'; yy.getLogger().debug('COLUMNS (LEX)', yy_.yytext); return 21; \nbreak;\ncase 16:return 42;\nbreak;\ncase 17:return 'LINKSTYLE';\nbreak;\ncase 18:return 'INTERPOLATE';\nbreak;\ncase 19: this.pushState('CLASSDEF'); return 39; \nbreak;\ncase 20: this.popState(); this.pushState('CLASSDEFID'); return 'DEFAULT_CLASSDEF_ID' \nbreak;\ncase 21: this.popState(); this.pushState('CLASSDEFID'); return 40 \nbreak;\ncase 22: this.popState(); return 41 \nbreak;\ncase 23: this.pushState('CLASS'); return 43; \nbreak;\ncase 24: this.popState(); this.pushState('CLASS_STYLE'); return 44 \nbreak;\ncase 25: this.popState(); return 45 \nbreak;\ncase 26: this.pushState('STYLE_STMNT'); return 46; \nbreak;\ncase 27: this.popState(); this.pushState('STYLE_DEFINITION'); return 47 \nbreak;\ncase 28: this.popState(); return 48 \nbreak;\ncase 29: this.pushState(\"acc_title\");return 'acc_title'; \nbreak;\ncase 30: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 31: this.pushState(\"acc_descr\");return 'acc_descr'; \nbreak;\ncase 32: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 33: this.pushState(\"acc_descr_multiline\");\nbreak;\ncase 34: this.popState(); \nbreak;\ncase 35:return \"acc_descr_multiline_value\";\nbreak;\ncase 36:return 30;\nbreak;\ncase 37: this.popState();yy.getLogger().debug('Lex: (('); return \"NODE_DEND\"; \nbreak;\ncase 38: this.popState();yy.getLogger().debug('Lex: (('); return \"NODE_DEND\"; \nbreak;\ncase 39: this.popState();yy.getLogger().debug('Lex: ))'); return \"NODE_DEND\"; \nbreak;\ncase 40: this.popState();yy.getLogger().debug('Lex: (('); return \"NODE_DEND\"; \nbreak;\ncase 41: this.popState();yy.getLogger().debug('Lex: (('); return \"NODE_DEND\"; \nbreak;\ncase 42: this.popState();yy.getLogger().debug('Lex: (-'); return \"NODE_DEND\"; \nbreak;\ncase 43: this.popState();yy.getLogger().debug('Lex: -)'); return \"NODE_DEND\"; \nbreak;\ncase 44: this.popState();yy.getLogger().debug('Lex: (('); return \"NODE_DEND\"; \nbreak;\ncase 45: this.popState();yy.getLogger().debug('Lex: ]]'); return \"NODE_DEND\"; \nbreak;\ncase 46: this.popState();yy.getLogger().debug('Lex: ('); return \"NODE_DEND\"; \nbreak;\ncase 47: this.popState();yy.getLogger().debug('Lex: ])'); return \"NODE_DEND\"; \nbreak;\ncase 48: this.popState();yy.getLogger().debug('Lex: /]'); return \"NODE_DEND\"; \nbreak;\ncase 49: this.popState();yy.getLogger().debug('Lex: /]'); return \"NODE_DEND\"; \nbreak;\ncase 50: this.popState();yy.getLogger().debug('Lex: )]'); return \"NODE_DEND\"; \nbreak;\ncase 51: this.popState();yy.getLogger().debug('Lex: )'); return \"NODE_DEND\"; \nbreak;\ncase 52: this.popState();yy.getLogger().debug('Lex: ]>'); return \"NODE_DEND\"; \nbreak;\ncase 53: this.popState();yy.getLogger().debug('Lex: ]'); return \"NODE_DEND\"; \nbreak;\ncase 54: yy.getLogger().debug('Lexa: -)'); this.pushState('NODE');return 35; \nbreak;\ncase 55: yy.getLogger().debug('Lexa: (-'); this.pushState('NODE');return 35; \nbreak;\ncase 56: yy.getLogger().debug('Lexa: ))'); this.pushState('NODE');return 35; \nbreak;\ncase 57: yy.getLogger().debug('Lexa: )'); this.pushState('NODE');return 35; \nbreak;\ncase 58: yy.getLogger().debug('Lex: ((('); this.pushState('NODE');return 35; \nbreak;\ncase 59: yy.getLogger().debug('Lexa: )'); this.pushState('NODE');return 35; \nbreak;\ncase 60: yy.getLogger().debug('Lexa: )'); this.pushState('NODE');return 35; \nbreak;\ncase 61: yy.getLogger().debug('Lexa: )'); this.pushState('NODE');return 35; \nbreak;\ncase 62: yy.getLogger().debug('Lexc: >'); this.pushState('NODE');return 35; \nbreak;\ncase 63: yy.getLogger().debug('Lexa: (['); this.pushState('NODE');return 35; \nbreak;\ncase 64: yy.getLogger().debug('Lexa: )'); this.pushState('NODE');return 35; \nbreak;\ncase 65: this.pushState('NODE');return 35; \nbreak;\ncase 66: this.pushState('NODE');return 35; \nbreak;\ncase 67: this.pushState('NODE');return 35; \nbreak;\ncase 68: this.pushState('NODE');return 35; \nbreak;\ncase 69: this.pushState('NODE');return 35; \nbreak;\ncase 70: this.pushState('NODE');return 35; \nbreak;\ncase 71: this.pushState('NODE');return 35; \nbreak;\ncase 72: yy.getLogger().debug('Lexa: ['); this.pushState('NODE');return 35; \nbreak;\ncase 73: this.pushState('BLOCK_ARROW');yy.getLogger().debug('LEX ARR START');return 37; \nbreak;\ncase 74: yy.getLogger().debug('Lex: NODE_ID', yy_.yytext);return 31; \nbreak;\ncase 75: yy.getLogger().debug('Lex: EOF', yy_.yytext);return 8; \nbreak;\ncase 76: this.pushState(\"md_string\");\nbreak;\ncase 77: this.pushState(\"md_string\");\nbreak;\ncase 78: return \"NODE_DESCR\";\nbreak;\ncase 79: this.popState();\nbreak;\ncase 80: yy.getLogger().debug('Lex: Starting string');this.pushState(\"string\");\nbreak;\ncase 81: yy.getLogger().debug('LEX ARR: Starting string');this.pushState(\"string\");\nbreak;\ncase 82: yy.getLogger().debug('LEX: NODE_DESCR:', yy_.yytext); return \"NODE_DESCR\";\nbreak;\ncase 83:yy.getLogger().debug('LEX POPPING');this.popState();\nbreak;\ncase 84: yy.getLogger().debug('Lex: =>BAE'); this.pushState('ARROW_DIR'); \nbreak;\ncase 85: yy_.yytext = yy_.yytext.replace(/^,\\s*/, ''); yy.getLogger().debug('Lex (right): dir:',yy_.yytext);return \"DIR\"; \nbreak;\ncase 86: yy_.yytext = yy_.yytext.replace(/^,\\s*/, ''); yy.getLogger().debug('Lex (left):',yy_.yytext);return \"DIR\"; \nbreak;\ncase 87: yy_.yytext = yy_.yytext.replace(/^,\\s*/, ''); yy.getLogger().debug('Lex (x):',yy_.yytext); return \"DIR\"; \nbreak;\ncase 88: yy_.yytext = yy_.yytext.replace(/^,\\s*/, ''); yy.getLogger().debug('Lex (y):',yy_.yytext); return \"DIR\"; \nbreak;\ncase 89: yy_.yytext = yy_.yytext.replace(/^,\\s*/, ''); yy.getLogger().debug('Lex (up):',yy_.yytext); return \"DIR\"; \nbreak;\ncase 90: yy_.yytext = yy_.yytext.replace(/^,\\s*/, ''); yy.getLogger().debug('Lex (down):',yy_.yytext); return \"DIR\"; \nbreak;\ncase 91: yy_.yytext=']>';yy.getLogger().debug('Lex (ARROW_DIR end):',yy_.yytext);this.popState();this.popState();return \"BLOCK_ARROW_END\"; \nbreak;\ncase 92: yy.getLogger().debug('Lex: LINK', '#'+yy_.yytext+'#'); return 15; \nbreak;\ncase 93: yy.getLogger().debug('Lex: LINK', yy_.yytext); return 15; \nbreak;\ncase 94: yy.getLogger().debug('Lex: LINK', yy_.yytext); return 15; \nbreak;\ncase 95: yy.getLogger().debug('Lex: LINK', yy_.yytext); return 15; \nbreak;\ncase 96: yy.getLogger().debug('Lex: START_LINK', yy_.yytext);this.pushState(\"LLABEL\");return 16; \nbreak;\ncase 97: yy.getLogger().debug('Lex: START_LINK', yy_.yytext);this.pushState(\"LLABEL\");return 16; \nbreak;\ncase 98: yy.getLogger().debug('Lex: START_LINK', yy_.yytext);this.pushState(\"LLABEL\");return 16; \nbreak;\ncase 99: this.pushState(\"md_string\");\nbreak;\ncase 100: yy.getLogger().debug('Lex: Starting string');this.pushState(\"string\"); return \"LINK_LABEL\";\nbreak;\ncase 101: this.popState(); yy.getLogger().debug('Lex: LINK', '#'+yy_.yytext+'#'); return 15; \nbreak;\ncase 102: this.popState(); yy.getLogger().debug('Lex: LINK', yy_.yytext); return 15; \nbreak;\ncase 103: this.popState(); yy.getLogger().debug('Lex: LINK', yy_.yytext); return 15; \nbreak;\ncase 104: yy.getLogger().debug('Lex: COLON', yy_.yytext); yy_.yytext=yy_.yytext.slice(1);return 27; \nbreak;\n}\n},\nrules: [/^(?:block-beta\\b)/,/^(?:block:)/,/^(?:block\\b)/,/^(?:[\\s]+)/,/^(?:[\\n]+)/,/^(?:((\\u000D\\u000A)|(\\u000A)))/,/^(?:columns\\s+auto\\b)/,/^(?:columns\\s+[\\d]+)/,/^(?:[\"][`])/,/^(?:[^`\"]+)/,/^(?:[`][\"])/,/^(?:[\"])/,/^(?:[\"])/,/^(?:[^\"]*)/,/^(?:space[:]\\d+)/,/^(?:space\\b)/,/^(?:default\\b)/,/^(?:linkStyle\\b)/,/^(?:interpolate\\b)/,/^(?:classDef\\s+)/,/^(?:DEFAULT\\s+)/,/^(?:\\w+\\s+)/,/^(?:[^\\n]*)/,/^(?:class\\s+)/,/^(?:(\\w+)+((,\\s*\\w+)*))/,/^(?:[^\\n]*)/,/^(?:style\\s+)/,/^(?:(\\w+)+((,\\s*\\w+)*))/,/^(?:[^\\n]*)/,/^(?:accTitle\\s*:\\s*)/,/^(?:(?!\\n||)*[^\\n]*)/,/^(?:accDescr\\s*:\\s*)/,/^(?:(?!\\n||)*[^\\n]*)/,/^(?:accDescr\\s*\\{\\s*)/,/^(?:[\\}])/,/^(?:[^\\}]*)/,/^(?:end\\b\\s*)/,/^(?:\\(\\(\\()/,/^(?:\\)\\)\\))/,/^(?:[\\)]\\))/,/^(?:\\}\\})/,/^(?:\\})/,/^(?:\\(-)/,/^(?:-\\))/,/^(?:\\(\\()/,/^(?:\\]\\])/,/^(?:\\()/,/^(?:\\]\\))/,/^(?:\\\\\\])/,/^(?:\\/\\])/,/^(?:\\)\\])/,/^(?:[\\)])/,/^(?:\\]>)/,/^(?:[\\]])/,/^(?:-\\))/,/^(?:\\(-)/,/^(?:\\)\\))/,/^(?:\\))/,/^(?:\\(\\(\\()/,/^(?:\\(\\()/,/^(?:\\{\\{)/,/^(?:\\{)/,/^(?:>)/,/^(?:\\(\\[)/,/^(?:\\()/,/^(?:\\[\\[)/,/^(?:\\[\\|)/,/^(?:\\[\\()/,/^(?:\\)\\)\\))/,/^(?:\\[\\\\)/,/^(?:\\[\\/)/,/^(?:\\[\\\\)/,/^(?:\\[)/,/^(?:<\\[)/,/^(?:[^\\(\\[\\n\\-\\)\\{\\}\\s\\<\\>:]+)/,/^(?:$)/,/^(?:[\"][`])/,/^(?:[\"][`])/,/^(?:[^`\"]+)/,/^(?:[`][\"])/,/^(?:[\"])/,/^(?:[\"])/,/^(?:[^\"]+)/,/^(?:[\"])/,/^(?:\\]>\\s*\\()/,/^(?:,?\\s*right\\s*)/,/^(?:,?\\s*left\\s*)/,/^(?:,?\\s*x\\s*)/,/^(?:,?\\s*y\\s*)/,/^(?:,?\\s*up\\s*)/,/^(?:,?\\s*down\\s*)/,/^(?:\\)\\s*)/,/^(?:\\s*[xo<]?--+[-xo>]\\s*)/,/^(?:\\s*[xo<]?==+[=xo>]\\s*)/,/^(?:\\s*[xo<]?-?\\.+-[xo>]?\\s*)/,/^(?:\\s*~~[\\~]+\\s*)/,/^(?:\\s*[xo<]?--\\s*)/,/^(?:\\s*[xo<]?==\\s*)/,/^(?:\\s*[xo<]?-\\.\\s*)/,/^(?:[\"][`])/,/^(?:[\"])/,/^(?:\\s*[xo<]?--+[-xo>]\\s*)/,/^(?:\\s*[xo<]?==+[=xo>]\\s*)/,/^(?:\\s*[xo<]?-?\\.+-[xo>]?\\s*)/,/^(?::\\d+)/],\nconditions: {\"STYLE_DEFINITION\":{\"rules\":[28],\"inclusive\":false},\"STYLE_STMNT\":{\"rules\":[27],\"inclusive\":false},\"CLASSDEFID\":{\"rules\":[22],\"inclusive\":false},\"CLASSDEF\":{\"rules\":[20,21],\"inclusive\":false},\"CLASS_STYLE\":{\"rules\":[25],\"inclusive\":false},\"CLASS\":{\"rules\":[24],\"inclusive\":false},\"LLABEL\":{\"rules\":[99,100,101,102,103],\"inclusive\":false},\"ARROW_DIR\":{\"rules\":[85,86,87,88,89,90,91],\"inclusive\":false},\"BLOCK_ARROW\":{\"rules\":[76,81,84],\"inclusive\":false},\"NODE\":{\"rules\":[37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,77,80],\"inclusive\":false},\"md_string\":{\"rules\":[9,10,78,79],\"inclusive\":false},\"space\":{\"rules\":[],\"inclusive\":false},\"string\":{\"rules\":[12,13,82,83],\"inclusive\":false},\"acc_descr_multiline\":{\"rules\":[34,35],\"inclusive\":false},\"acc_descr\":{\"rules\":[32],\"inclusive\":false},\"acc_title\":{\"rules\":[30],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,11,14,15,16,17,18,19,23,26,29,31,33,36,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,92,93,94,95,96,97,98,104],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})(); \n\tparser.parser = parser;\n\texport { parser };\n\texport default parser;\n\t", "import clone from 'lodash-es/clone.js';\nimport * as configApi from '../../config.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport type { DiagramDB } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport common from '../common/common.js';\nimport { clear as commonClear } from '../common/commonDb.js';\nimport type { Block, ClassDef } from './blockTypes.js';\n\n// Initialize the node database for simple lookups\nlet blockDatabase = new Map();\nlet edgeList: Block[] = [];\nlet edgeCount = new Map();\n\nconst COLOR_KEYWORD = 'color';\nconst FILL_KEYWORD = 'fill';\nconst BG_FILL = 'bgFill';\nconst STYLECLASS_SEP = ',';\nconst config = getConfig();\n\nlet classes = new Map();\n\nconst sanitizeText = (txt: string) => common.sanitizeText(txt, config);\n\n/**\n * Called when the parser comes across a (style) class definition\n * @example classDef my-style fill:#f96;\n *\n * @param id - the id of this (style) class\n * @param styleAttributes - the string with 1 or more style attributes (each separated by a comma)\n */\nexport const addStyleClass = function (id: string, styleAttributes = '') {\n // create a new style class object with this id\n let foundClass = classes.get(id);\n if (!foundClass) {\n foundClass = { id: id, styles: [], textStyles: [] };\n classes.set(id, foundClass); // This is a classDef\n }\n if (styleAttributes !== undefined && styleAttributes !== null) {\n styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => {\n // remove any trailing ;\n const fixedAttrib = attrib.replace(/([^;]*);/, '$1').trim();\n\n // replace some style keywords\n if (RegExp(COLOR_KEYWORD).exec(attrib)) {\n const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL);\n const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD);\n foundClass.textStyles.push(newStyle2);\n }\n foundClass.styles.push(fixedAttrib);\n });\n }\n};\n\n/**\n * Called when the parser comes across a style definition\n * @example style my-block-id fill:#f96;\n *\n * @param id - the id of the block to style\n * @param styles - the string with 1 or more style attributes (each separated by a comma)\n */\nexport const addStyle2Node = function (id: string, styles = '') {\n const foundBlock = blockDatabase.get(id)!;\n if (styles !== undefined && styles !== null) {\n foundBlock.styles = styles.split(STYLECLASS_SEP);\n }\n};\n\n/**\n * Add a CSS/style class to the block with the given id.\n * If the block isn't already in the list of known blocks, add it.\n * Might be called by parser when a CSS/style class should be applied to a block\n *\n * @param itemIds - The id or a list of ids of the item(s) to apply the css class to\n * @param cssClassName - CSS class name\n */\nexport const setCssClass = function (itemIds: string, cssClassName: string) {\n itemIds.split(',').forEach(function (id: string) {\n let foundBlock = blockDatabase.get(id);\n if (foundBlock === undefined) {\n const trimmedId = id.trim();\n foundBlock = { id: trimmedId, type: 'na', children: [] } as Block;\n blockDatabase.set(trimmedId, foundBlock);\n }\n if (!foundBlock.classes) {\n foundBlock.classes = [];\n }\n foundBlock.classes.push(cssClassName);\n });\n};\n\nconst populateBlockDatabase = (_blockList: Block[], parent: Block): void => {\n const blockList = _blockList.flat();\n const children = [];\n const columnSettingBlock = blockList.find((b) => b?.type === 'column-setting');\n const column = columnSettingBlock?.columns ?? -1;\n for (const block of blockList) {\n if (\n typeof column === 'number' &&\n column > 0 &&\n block.type !== 'column-setting' &&\n typeof block.widthInColumns === 'number' &&\n block.widthInColumns > column\n ) {\n log.warn(\n `Block ${block.id} width ${block.widthInColumns} exceeds configured column width ${column}`\n );\n }\n if (block.label) {\n block.label = sanitizeText(block.label);\n }\n if (block.type === 'classDef') {\n addStyleClass(block.id, block.css);\n continue;\n }\n if (block.type === 'applyClass') {\n setCssClass(block.id, block?.styleClass ?? '');\n continue;\n }\n if (block.type === 'applyStyles') {\n if (block?.stylesStr) {\n addStyle2Node(block.id, block?.stylesStr);\n }\n continue;\n }\n if (block.type === 'column-setting') {\n parent.columns = block.columns ?? -1;\n } else if (block.type === 'edge') {\n const count = (edgeCount.get(block.id) ?? 0) + 1;\n edgeCount.set(block.id, count);\n block.id = count + '-' + block.id;\n edgeList.push(block);\n } else {\n if (!block.label) {\n if (block.type === 'composite') {\n block.label = '';\n // log.debug('abc89 composite', block);\n } else {\n block.label = block.id;\n }\n }\n const existingBlock = blockDatabase.get(block.id);\n\n if (existingBlock === undefined) {\n blockDatabase.set(block.id, block);\n } else {\n // Add newer relevant data to aggregated node\n if (block.type !== 'na') {\n existingBlock.type = block.type;\n }\n if (block.label !== block.id) {\n existingBlock.label = block.label;\n }\n }\n\n if (block.children) {\n populateBlockDatabase(block.children, block);\n }\n if (block.type === 'space') {\n // log.debug('abc95 space', block);\n const w = block.width ?? 1;\n for (let j = 0; j < w; j++) {\n const newBlock = clone(block);\n newBlock.id = newBlock.id + '-' + j;\n blockDatabase.set(newBlock.id, newBlock);\n children.push(newBlock);\n }\n } else if (existingBlock === undefined) {\n children.push(block);\n }\n }\n }\n parent.children = children;\n};\n\nlet blocks: Block[] = [];\nlet rootBlock = { id: 'root', type: 'composite', children: [], columns: -1 } as Block;\n\nconst clear = (): void => {\n log.debug('Clear called');\n commonClear();\n rootBlock = { id: 'root', type: 'composite', children: [], columns: -1 } as Block;\n blockDatabase = new Map([['root', rootBlock]]);\n blocks = [];\n classes = new Map();\n\n edgeList = [];\n edgeCount = new Map();\n};\n\nexport function typeStr2Type(typeStr: string) {\n log.debug('typeStr2Type', typeStr);\n switch (typeStr) {\n case '[]':\n return 'square';\n case '()':\n log.debug('we have a round');\n return 'round';\n case '(())':\n return 'circle';\n case '>]':\n return 'rect_left_inv_arrow';\n case '{}':\n return 'diamond';\n case '{{}}':\n return 'hexagon';\n case '([])':\n return 'stadium';\n case '[[]]':\n return 'subroutine';\n case '[()]':\n return 'cylinder';\n case '((()))':\n return 'doublecircle';\n case '[//]':\n return 'lean_right';\n case '[\\\\\\\\]':\n return 'lean_left';\n case '[/\\\\]':\n return 'trapezoid';\n case '[\\\\/]':\n return 'inv_trapezoid';\n case '<[]>':\n return 'block_arrow';\n default:\n return 'na';\n }\n}\n\nexport function edgeTypeStr2Type(typeStr: string): string {\n log.debug('typeStr2Type', typeStr);\n switch (typeStr) {\n case '==':\n return 'thick';\n default:\n return 'normal';\n }\n}\n\nexport function edgeStrToEdgeData(typeStr: string): string {\n switch (typeStr.replace(/^[\\s-]+|[\\s-]+$/g, '')) {\n case 'x':\n return 'arrow_cross';\n case 'o':\n return 'arrow_circle';\n case '>':\n return 'arrow_point';\n default:\n return '';\n }\n}\n\nlet cnt = 0;\nexport const generateId = () => {\n cnt++;\n return 'id-' + Math.random().toString(36).substr(2, 12) + '-' + cnt;\n};\n\nconst setHierarchy = (block: Block[]): void => {\n rootBlock.children = block;\n populateBlockDatabase(block, rootBlock);\n blocks = rootBlock.children;\n};\n\nconst getColumns = (blockId: string): number => {\n const block = blockDatabase.get(blockId);\n if (!block) {\n return -1;\n }\n if (block.columns) {\n return block.columns;\n }\n if (!block.children) {\n return -1;\n }\n return block.children.length;\n};\n\n/**\n * Returns all the blocks as a flat array\n * @returns\n */\nconst getBlocksFlat = () => {\n return [...blockDatabase.values()];\n};\n/**\n * Returns the hierarchy of blocks\n * @returns\n */\nconst getBlocks = () => {\n return blocks || [];\n};\n\nconst getEdges = () => {\n return edgeList;\n};\nconst getBlock = (id: string) => {\n return blockDatabase.get(id);\n};\n\nconst setBlock = (block: Block) => {\n blockDatabase.set(block.id, block);\n};\n\nconst getLogger = () => log;\n\n/**\n * Return all of the style classes\n */\nexport const getClasses = function () {\n return classes;\n};\n\nconst db = {\n getConfig: () => configApi.getConfig().block,\n typeStr2Type: typeStr2Type,\n edgeTypeStr2Type: edgeTypeStr2Type,\n edgeStrToEdgeData,\n getLogger,\n getBlocksFlat,\n getBlocks,\n getEdges,\n setHierarchy,\n getBlock,\n setBlock,\n getColumns,\n getClasses,\n clear,\n generateId,\n} as const;\n\nexport type BlockDB = typeof db & DiagramDB;\nexport default db;\n", "import * as khroma from 'khroma';\nimport { getIconStyles } from '../globalStyles.js';\n\n/** Returns the styles given options */\nexport interface BlockChartStyleOptions {\n arrowheadColor: string;\n border2: string;\n clusterBkg: string;\n clusterBorder: string;\n edgeLabelBackground: string;\n fontFamily: string;\n lineColor: string;\n mainBkg: string;\n nodeBorder: string;\n nodeTextColor: string;\n tertiaryColor: string;\n textColor: string;\n titleColor: string;\n}\n\nconst fade = (color: string, opacity: number) => {\n // @ts-ignore TODO: incorrect types from khroma\n const channel = khroma.channel;\n\n const r = channel(color, 'r');\n const g = channel(color, 'g');\n const b = channel(color, 'b');\n\n // @ts-ignore incorrect types from khroma\n return khroma.rgba(r, g, b, opacity);\n};\n\nconst getStyles = (options: BlockChartStyleOptions) =>\n `.label {\n font-family: ${options.fontFamily};\n color: ${options.nodeTextColor || options.textColor};\n }\n .cluster-label text {\n fill: ${options.titleColor};\n }\n .cluster-label span,p {\n color: ${options.titleColor};\n }\n\n\n\n .label text,span,p {\n fill: ${options.nodeTextColor || options.textColor};\n color: ${options.nodeTextColor || options.textColor};\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n stroke-width: 1px;\n }\n .flowchart-label text {\n text-anchor: middle;\n }\n // .flowchart-label .text-outer-tspan {\n // text-anchor: middle;\n // }\n // .flowchart-label .text-inner-tspan {\n // text-anchor: start;\n // }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ${options.arrowheadColor};\n }\n\n .edgePath .path {\n stroke: ${options.lineColor};\n stroke-width: 2.0px;\n }\n\n .flowchart-link {\n stroke: ${options.lineColor};\n fill: none;\n }\n\n .edgeLabel {\n background-color: ${options.edgeLabelBackground};\n rect {\n opacity: 0.5;\n background-color: ${options.edgeLabelBackground};\n fill: ${options.edgeLabelBackground};\n }\n text-align: center;\n }\n\n /* For html labels only */\n .labelBkg {\n background-color: ${fade(options.edgeLabelBackground, 0.5)};\n // background-color:\n }\n\n .node .cluster {\n // fill: ${fade(options.mainBkg, 0.5)};\n fill: ${fade(options.clusterBkg, 0.5)};\n stroke: ${fade(options.clusterBorder, 0.2)};\n box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px;\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ${options.titleColor};\n }\n\n .cluster span,p {\n color: ${options.titleColor};\n }\n /* .cluster div {\n color: ${options.titleColor};\n } */\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ${options.fontFamily};\n font-size: 12px;\n background: ${options.tertiaryColor};\n border: 1px solid ${options.border2};\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .flowchartTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n }\n ${getIconStyles()}\n`;\n\nexport default getStyles;\n", "/** Setup arrow head and define the marker. The result is appended to the svg. */\n\nimport { log } from '../logger.js';\n\n// Only add the number of markers that the diagram needs\nconst insertMarkers = (elem, markerArray, type, id) => {\n markerArray.forEach((markerName) => {\n markers[markerName](elem, type, id);\n });\n};\n\nconst extension = (elem, type, id) => {\n log.trace('Making markers for ', id);\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-extensionStart')\n .attr('class', 'marker extension ' + type)\n .attr('refX', 18)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 1,7 L18,13 V 1 Z');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-extensionEnd')\n .attr('class', 'marker extension ' + type)\n .attr('refX', 1)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 1,1 V 13 L18,7 Z'); // this is actual shape for arrowhead\n};\n\nconst composition = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-compositionStart')\n .attr('class', 'marker composition ' + type)\n .attr('refX', 18)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-compositionEnd')\n .attr('class', 'marker composition ' + type)\n .attr('refX', 1)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n};\nconst aggregation = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-aggregationStart')\n .attr('class', 'marker aggregation ' + type)\n .attr('refX', 18)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-aggregationEnd')\n .attr('class', 'marker aggregation ' + type)\n .attr('refX', 1)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n};\nconst dependency = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-dependencyStart')\n .attr('class', 'marker dependency ' + type)\n .attr('refX', 6)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 5,7 L9,13 L1,7 L9,1 Z');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-dependencyEnd')\n .attr('class', 'marker dependency ' + type)\n .attr('refX', 13)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L14,7 L9,1 Z');\n};\nconst lollipop = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-lollipopStart')\n .attr('class', 'marker lollipop ' + type)\n .attr('refX', 13)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('circle')\n .attr('stroke', 'black')\n .attr('fill', 'transparent')\n .attr('cx', 7)\n .attr('cy', 7)\n .attr('r', 6);\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-lollipopEnd')\n .attr('class', 'marker lollipop ' + type)\n .attr('refX', 1)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('circle')\n .attr('stroke', 'black')\n .attr('fill', 'transparent')\n .attr('cx', 7)\n .attr('cy', 7)\n .attr('r', 6);\n};\nconst point = (elem, type, id) => {\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-pointEnd')\n .attr('class', 'marker ' + type)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 6)\n .attr('refY', 5)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 12)\n .attr('markerHeight', 12)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 0 0 L 10 5 L 0 10 z')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 1)\n .style('stroke-dasharray', '1,0');\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-pointStart')\n .attr('class', 'marker ' + type)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 4.5)\n .attr('refY', 5)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 12)\n .attr('markerHeight', 12)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 0 5 L 10 10 L 10 0 z')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 1)\n .style('stroke-dasharray', '1,0');\n};\nconst circle = (elem, type, id) => {\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-circleEnd')\n .attr('class', 'marker ' + type)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', 11)\n .attr('refY', 5)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 11)\n .attr('markerHeight', 11)\n .attr('orient', 'auto')\n .append('circle')\n .attr('cx', '5')\n .attr('cy', '5')\n .attr('r', '5')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 1)\n .style('stroke-dasharray', '1,0');\n\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-circleStart')\n .attr('class', 'marker ' + type)\n .attr('viewBox', '0 0 10 10')\n .attr('refX', -1)\n .attr('refY', 5)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 11)\n .attr('markerHeight', 11)\n .attr('orient', 'auto')\n .append('circle')\n .attr('cx', '5')\n .attr('cy', '5')\n .attr('r', '5')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 1)\n .style('stroke-dasharray', '1,0');\n};\nconst cross = (elem, type, id) => {\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-crossEnd')\n .attr('class', 'marker cross ' + type)\n .attr('viewBox', '0 0 11 11')\n .attr('refX', 12)\n .attr('refY', 5.2)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 11)\n .attr('markerHeight', 11)\n .attr('orient', 'auto')\n .append('path')\n // .attr('stroke', 'black')\n .attr('d', 'M 1,1 l 9,9 M 10,1 l -9,9')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 2)\n .style('stroke-dasharray', '1,0');\n\n elem\n .append('marker')\n .attr('id', id + '_' + type + '-crossStart')\n .attr('class', 'marker cross ' + type)\n .attr('viewBox', '0 0 11 11')\n .attr('refX', -1)\n .attr('refY', 5.2)\n .attr('markerUnits', 'userSpaceOnUse')\n .attr('markerWidth', 11)\n .attr('markerHeight', 11)\n .attr('orient', 'auto')\n .append('path')\n // .attr('stroke', 'black')\n .attr('d', 'M 1,1 l 9,9 M 10,1 l -9,9')\n .attr('class', 'arrowMarkerPath')\n .style('stroke-width', 2)\n .style('stroke-dasharray', '1,0');\n};\nconst barb = (elem, type, id) => {\n elem\n .append('defs')\n .append('marker')\n .attr('id', id + '_' + type + '-barbEnd')\n .attr('refX', 19)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 14)\n .attr('markerUnits', 'strokeWidth')\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 19,7 L9,13 L14,7 L9,1 Z');\n};\n\n// TODO rename the class diagram markers to something shape descriptive and semantic free\nconst markers = {\n extension,\n composition,\n aggregation,\n dependency,\n lollipop,\n point,\n circle,\n cross,\n barb,\n};\nexport default insertMarkers;\n", "import type { BlockDB } from './blockDB.js';\nimport type { Block } from './blockTypes.js';\nimport { log } from '../../logger.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\n// TODO: This means the number we provide in diagram's config will never be used. Should fix.\nconst padding = getConfig()?.block?.padding ?? 8;\n\ninterface BlockPosition {\n px: number;\n py: number;\n}\n\nexport function calculateBlockPosition(columns: number, position: number): BlockPosition {\n // log.debug('calculateBlockPosition abc89', columns, position);\n // Ensure that columns is a positive integer\n if (columns === 0 || !Number.isInteger(columns)) {\n throw new Error('Columns must be an integer !== 0.');\n }\n\n // Ensure that position is a non-negative integer\n if (position < 0 || !Number.isInteger(position)) {\n throw new Error('Position must be a non-negative integer.' + position);\n }\n\n if (columns < 0) {\n // Auto columns is set\n return { px: position, py: 0 };\n }\n if (columns === 1) {\n // Auto columns is set\n return { px: 0, py: position };\n }\n // Calculate posX and posY\n const px = position % columns;\n const py = Math.floor(position / columns);\n // log.debug('calculateBlockPosition abc89', columns, position, '=> (', px, py, ')');\n return { px, py };\n}\n\nconst getMaxChildSize = (block: Block) => {\n let maxWidth = 0;\n let maxHeight = 0;\n // find max width of children\n // log.debug('getMaxChildSize abc95 (start) parent:', block.id);\n for (const child of block.children) {\n const { width, height, x, y } = child.size ?? { width: 0, height: 0, x: 0, y: 0 };\n log.debug(\n 'getMaxChildSize abc95 child:',\n child.id,\n 'width:',\n width,\n 'height:',\n height,\n 'x:',\n x,\n 'y:',\n y,\n child.type\n );\n if (child.type === 'space') {\n continue;\n }\n if (width > maxWidth) {\n maxWidth = width / (block.widthInColumns ?? 1);\n }\n if (height > maxHeight) {\n maxHeight = height;\n }\n }\n return { width: maxWidth, height: maxHeight };\n};\n\nfunction setBlockSizes(block: Block, db: BlockDB, siblingWidth = 0, siblingHeight = 0) {\n log.debug(\n 'setBlockSizes abc95 (start)',\n block.id,\n block?.size?.x,\n 'block width =',\n block?.size,\n 'siblingWidth',\n siblingWidth\n );\n if (!block?.size?.width) {\n block.size = {\n width: siblingWidth,\n height: siblingHeight,\n x: 0,\n y: 0,\n };\n }\n let maxWidth = 0;\n let maxHeight = 0;\n\n if (block.children?.length > 0) {\n for (const child of block.children) {\n setBlockSizes(child, db);\n }\n // find max width of children\n const childSize = getMaxChildSize(block);\n maxWidth = childSize.width;\n maxHeight = childSize.height;\n log.debug('setBlockSizes abc95 maxWidth of', block.id, ':s children is ', maxWidth, maxHeight);\n\n // set width of block to max width of children\n for (const child of block.children) {\n if (child.size) {\n log.debug(\n `abc95 Setting size of children of ${block.id} id=${child.id} ${maxWidth} ${maxHeight} ${JSON.stringify(child.size)}`\n );\n child.size.width =\n maxWidth * (child.widthInColumns ?? 1) + padding * ((child.widthInColumns ?? 1) - 1);\n child.size.height = maxHeight;\n child.size.x = 0;\n child.size.y = 0;\n\n log.debug(\n `abc95 updating size of ${block.id} children child:${child.id} maxWidth:${maxWidth} maxHeight:${maxHeight}`\n );\n }\n }\n for (const child of block.children) {\n setBlockSizes(child, db, maxWidth, maxHeight);\n }\n\n const columns = block.columns ?? -1;\n let numItems = 0;\n for (const child of block.children) {\n numItems += child.widthInColumns ?? 1;\n }\n\n // The width and height in number blocks\n let xSize = block.children.length;\n if (columns > 0 && columns < numItems) {\n xSize = columns;\n }\n\n const ySize = Math.ceil(numItems / xSize);\n\n let width = xSize * (maxWidth + padding) + padding;\n let height = ySize * (maxHeight + padding) + padding;\n // If maxWidth\n if (width < siblingWidth) {\n log.debug(\n `Detected to small sibling: abc95 ${block.id} siblingWidth ${siblingWidth} siblingHeight ${siblingHeight} width ${width}`\n );\n width = siblingWidth;\n height = siblingHeight;\n const childWidth = (siblingWidth - xSize * padding - padding) / xSize;\n const childHeight = (siblingHeight - ySize * padding - padding) / ySize;\n // cspell:ignore indata\n log.debug('Size indata abc88', block.id, 'childWidth', childWidth, 'maxWidth', maxWidth);\n log.debug('Size indata abc88', block.id, 'childHeight', childHeight, 'maxHeight', maxHeight);\n log.debug('Size indata abc88 xSize', xSize, 'padding', padding);\n\n // set width of block to max width of children\n for (const child of block.children) {\n if (child.size) {\n child.size.width = childWidth;\n child.size.height = childHeight;\n child.size.x = 0;\n child.size.y = 0;\n }\n }\n }\n\n log.debug(\n `abc95 (finale calc) ${block.id} xSize ${xSize} ySize ${ySize} columns ${columns}${\n block.children.length\n } width=${Math.max(width, block.size?.width || 0)}`\n );\n if (width < (block?.size?.width || 0)) {\n width = block?.size?.width || 0;\n\n // Grow children to fit\n const num = columns > 0 ? Math.min(block.children.length, columns) : block.children.length;\n if (num > 0) {\n const childWidth = (width - num * padding - padding) / num;\n log.debug('abc95 (growing to fit) width', block.id, width, block.size?.width, childWidth);\n for (const child of block.children) {\n if (child.size) {\n child.size.width = childWidth;\n }\n }\n }\n }\n block.size = {\n width,\n height,\n x: 0,\n y: 0,\n };\n }\n\n log.debug(\n 'setBlockSizes abc94 (done)',\n block.id,\n block?.size?.x,\n block?.size?.width,\n block?.size?.y,\n block?.size?.height\n );\n}\n\nfunction layoutBlocks(block: Block, db: BlockDB) {\n log.debug(\n `abc85 layout blocks (=>layoutBlocks) ${block.id} x: ${block?.size?.x} y: ${block?.size?.y} width: ${block?.size?.width}`\n );\n const columns = block.columns ?? -1;\n log.debug('layoutBlocks columns abc95', block.id, '=>', columns, block);\n if (\n block.children && // find max width of children\n block.children.length > 0\n ) {\n const width = block?.children[0]?.size?.width ?? 0;\n const widthOfChildren = block.children.length * width + (block.children.length - 1) * padding;\n\n log.debug('widthOfChildren 88', widthOfChildren, 'posX');\n\n // let first = true;\n let columnPos = 0;\n log.debug('abc91 block?.size?.x', block.id, block?.size?.x);\n let startingPosX = block?.size?.x ? block?.size?.x + (-block?.size?.width / 2 || 0) : -padding;\n let rowPos = 0;\n for (const child of block.children) {\n const parent = block;\n\n if (!child.size) {\n continue;\n }\n const { width, height } = child.size;\n const { px, py } = calculateBlockPosition(columns, columnPos);\n if (py != rowPos) {\n rowPos = py;\n startingPosX = block?.size?.x ? block?.size?.x + (-block?.size?.width / 2 || 0) : -padding;\n log.debug('New row in layout for block', block.id, ' and child ', child.id, rowPos);\n }\n log.debug(\n `abc89 layout blocks (child) id: ${child.id} Pos: ${columnPos} (px, py) ${px},${py} (${parent?.size?.x},${parent?.size?.y}) parent: ${parent.id} width: ${width}${padding}`\n );\n if (parent.size) {\n const halfWidth = width / 2;\n child.size.x = startingPosX + padding + halfWidth;\n\n // cspell:ignore pyid\n log.debug(\n `abc91 layout blocks (calc) px, pyid:${\n child.id\n } startingPos=X${startingPosX} new startingPosX${\n child.size.x\n } ${halfWidth} padding=${padding} width=${width} halfWidth=${halfWidth} => x:${\n child.size.x\n } y:${child.size.y} ${child.widthInColumns} (width * (child?.w || 1)) / 2 ${\n (width * (child?.widthInColumns ?? 1)) / 2\n }`\n );\n\n startingPosX = child.size.x + halfWidth;\n\n child.size.y =\n parent.size.y - parent.size.height / 2 + py * (height + padding) + height / 2 + padding;\n\n log.debug(\n `abc88 layout blocks (calc) px, pyid:${\n child.id\n }startingPosX${startingPosX}${padding}${halfWidth}=>x:${child.size.x}y:${child.size.y}${\n child.widthInColumns\n }(width * (child?.w || 1)) / 2${(width * (child?.widthInColumns ?? 1)) / 2}`\n );\n }\n if (child.children) {\n layoutBlocks(child, db);\n }\n let columnsFilled = child?.widthInColumns ?? 1;\n if (columns > 0) {\n // Make sure overflowing lines do not affect later lines\n columnsFilled = Math.min(columnsFilled, columns - (columnPos % columns));\n }\n columnPos += columnsFilled;\n log.debug('abc88 columnsPos', child, columnPos);\n }\n }\n log.debug(\n `layout blocks (<==layoutBlocks) ${block.id} x: ${block?.size?.x} y: ${block?.size?.y} width: ${block?.size?.width}`\n );\n}\n\nfunction findBounds(\n block: Block,\n { minX, minY, maxX, maxY } = { minX: 0, minY: 0, maxX: 0, maxY: 0 }\n) {\n if (block.size && block.id !== 'root') {\n const { x, y, width, height } = block.size;\n if (x - width / 2 < minX) {\n minX = x - width / 2;\n }\n if (y - height / 2 < minY) {\n minY = y - height / 2;\n }\n if (x + width / 2 > maxX) {\n maxX = x + width / 2;\n }\n if (y + height / 2 > maxY) {\n maxY = y + height / 2;\n }\n }\n if (block.children) {\n for (const child of block.children) {\n ({ minX, minY, maxX, maxY } = findBounds(child, { minX, minY, maxX, maxY }));\n }\n }\n return { minX, minY, maxX, maxY };\n}\n\nexport function layout(db: BlockDB) {\n const root = db.getBlock('root');\n if (!root) {\n return;\n }\n\n setBlockSizes(root, db, 0, 0);\n layoutBlocks(root, db);\n // Position blocks relative to parents\n // positionBlock(root, root, db);\n log.debug('getBlocks', JSON.stringify(root, null, 2));\n\n const { minX, minY, maxX, maxY } = findBounds(root);\n\n const height = maxY - minY;\n const width = maxX - minX;\n return { x: minX, y: minY, width, height };\n}\n", "import { select } from 'd3';\nimport { getConfig } from '../diagram-api/diagramAPI.js';\nimport { evaluate, sanitizeText } from '../diagrams/common/common.js';\nimport { log } from '../logger.js';\nimport { replaceIconSubstring } from '../rendering-util/createText.js';\nimport { decodeEntities } from '../utils.js';\n\n/**\n * @param dom\n * @param styleFn\n */\nfunction applyStyle(dom, styleFn) {\n if (styleFn) {\n dom.attr('style', styleFn);\n }\n}\n\n/**\n * @param {any} node\n * @returns {SVGForeignObjectElement} Node\n */\nfunction addHtmlLabel(node, config) {\n const fo = select(document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject'));\n const div = fo.append('xhtml:div');\n\n const label = node.label;\n const labelClass = node.isNode ? 'nodeLabel' : 'edgeLabel';\n const span = div.append('span');\n span.html(sanitizeText(label, config));\n applyStyle(span, node.labelStyle);\n span.attr('class', labelClass);\n\n applyStyle(div, node.labelStyle);\n div.style('display', 'inline-block');\n // Fix for firefox\n div.style('white-space', 'nowrap');\n div.attr('xmlns', 'http://www.w3.org/1999/xhtml');\n return fo.node();\n}\n/**\n * @param _vertexText\n * @param style\n * @param isTitle\n * @param isNode\n * @deprecated svg-util/createText instead\n */\nconst createLabel = async (_vertexText, style, isTitle, isNode) => {\n let vertexText = _vertexText || '';\n if (typeof vertexText === 'object') {\n vertexText = vertexText[0];\n }\n const config = getConfig();\n if (evaluate(config.flowchart.htmlLabels)) {\n // TODO: addHtmlLabel accepts a labelStyle. Do we possibly have that?\n vertexText = vertexText.replace(/\\\\n|\\n/g, '
    ');\n log.debug('vertexText' + vertexText);\n const label = await replaceIconSubstring(decodeEntities(vertexText));\n const node = {\n isNode,\n label,\n labelStyle: style.replace('fill:', 'color:'),\n };\n let vertexNode = addHtmlLabel(node, config);\n // vertexNode.parentNode.removeChild(vertexNode);\n return vertexNode;\n } else {\n const svgLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n svgLabel.setAttribute('style', style.replace('color:', 'fill:'));\n let rows = [];\n if (typeof vertexText === 'string') {\n rows = vertexText.split(/\\\\n|\\n|/gi);\n } else if (Array.isArray(vertexText)) {\n rows = vertexText;\n } else {\n rows = [];\n }\n\n for (const row of rows) {\n const tspan = document.createElementNS('http://www.w3.org/2000/svg', 'tspan');\n tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n tspan.setAttribute('dy', '1em');\n tspan.setAttribute('x', '0');\n if (isTitle) {\n tspan.setAttribute('class', 'title-row');\n } else {\n tspan.setAttribute('class', 'row');\n }\n tspan.textContent = row.trim();\n svgLabel.appendChild(tspan);\n }\n return svgLabel;\n }\n};\n\nexport default createLabel;\n", "import type { SVG } from '../diagram-api/types.js';\nimport { log } from '../logger.js';\nimport type { EdgeData } from '../types.js';\n/**\n * Adds SVG markers to a path element based on the arrow types specified in the edge.\n *\n * @param svgPath - The SVG path element to add markers to.\n * @param edge - The edge data object containing the arrow types.\n * @param url - The URL of the SVG marker definitions.\n * @param id - The ID prefix for the SVG marker definitions.\n * @param diagramType - The type of diagram being rendered.\n */\nexport const addEdgeMarkers = (\n svgPath: SVG,\n edge: Pick,\n url: string,\n id: string,\n diagramType: string\n) => {\n if (edge.arrowTypeStart) {\n addEdgeMarker(svgPath, 'start', edge.arrowTypeStart, url, id, diagramType);\n }\n if (edge.arrowTypeEnd) {\n addEdgeMarker(svgPath, 'end', edge.arrowTypeEnd, url, id, diagramType);\n }\n};\n\nconst arrowTypesMap = {\n arrow_cross: 'cross',\n arrow_point: 'point',\n arrow_barb: 'barb',\n arrow_circle: 'circle',\n aggregation: 'aggregation',\n extension: 'extension',\n composition: 'composition',\n dependency: 'dependency',\n lollipop: 'lollipop',\n} as const;\n\nconst addEdgeMarker = (\n svgPath: SVG,\n position: 'start' | 'end',\n arrowType: string,\n url: string,\n id: string,\n diagramType: string\n) => {\n const endMarkerType = arrowTypesMap[arrowType as keyof typeof arrowTypesMap];\n\n if (!endMarkerType) {\n log.warn(`Unknown arrow type: ${arrowType}`);\n return; // unknown arrow type, ignore\n }\n\n const suffix = position === 'start' ? 'Start' : 'End';\n svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`);\n};\n", "import { log } from '../logger.js';\nimport createLabel from './createLabel.js';\nimport { createText } from '../rendering-util/createText.js';\nimport { line, curveBasis, select } from 'd3';\nimport { getConfig } from '../diagram-api/diagramAPI.js';\nimport utils from '../utils.js';\nimport { evaluate, getUrl } from '../diagrams/common/common.js';\nimport { getLineFunctionsWithOffset } from '../utils/lineWithOffset.js';\nimport { getSubGraphTitleMargins } from '../utils/subGraphTitleMargins.js';\nimport { addEdgeMarkers } from './edgeMarker.js';\n\nlet edgeLabels = {};\nlet terminalLabels = {};\n\nexport const clear = () => {\n edgeLabels = {};\n terminalLabels = {};\n};\n\nexport const insertEdgeLabel = async (elem, edge) => {\n const config = getConfig();\n const useHtmlLabels = evaluate(config.flowchart.htmlLabels);\n // Create the actual text element\n const labelElement =\n edge.labelType === 'markdown'\n ? createText(\n elem,\n edge.label,\n {\n style: edge.labelStyle,\n useHtmlLabels,\n addSvgBackground: true,\n },\n config\n )\n : await createLabel(edge.label, edge.labelStyle);\n\n // Create outer g, edgeLabel, this will be positioned after graph layout\n const edgeLabel = elem.insert('g').attr('class', 'edgeLabel');\n\n // Create inner g, label, this will be positioned now for centering the text\n const label = edgeLabel.insert('g').attr('class', 'label');\n label.node().appendChild(labelElement);\n\n // Center the label\n let bbox = labelElement.getBBox();\n if (useHtmlLabels) {\n const div = labelElement.children[0];\n const dv = select(labelElement);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n label.attr('transform', 'translate(' + -bbox.width / 2 + ', ' + -bbox.height / 2 + ')');\n\n // Make element accessible by id for positioning\n edgeLabels[edge.id] = edgeLabel;\n\n // Update the abstract data of the edge with the new information about its width and height\n edge.width = bbox.width;\n edge.height = bbox.height;\n\n let fo;\n if (edge.startLabelLeft) {\n // Create the actual text element\n const startLabelElement = await createLabel(edge.startLabelLeft, edge.labelStyle);\n const startEdgeLabelLeft = elem.insert('g').attr('class', 'edgeTerminals');\n const inner = startEdgeLabelLeft.insert('g').attr('class', 'inner');\n fo = inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')');\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].startLeft = startEdgeLabelLeft;\n setTerminalWidth(fo, edge.startLabelLeft);\n }\n if (edge.startLabelRight) {\n // Create the actual text element\n const startLabelElement = await createLabel(edge.startLabelRight, edge.labelStyle);\n const startEdgeLabelRight = elem.insert('g').attr('class', 'edgeTerminals');\n const inner = startEdgeLabelRight.insert('g').attr('class', 'inner');\n fo = startEdgeLabelRight.node().appendChild(startLabelElement);\n inner.node().appendChild(startLabelElement);\n const slBox = startLabelElement.getBBox();\n inner.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')');\n\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].startRight = startEdgeLabelRight;\n setTerminalWidth(fo, edge.startLabelRight);\n }\n if (edge.endLabelLeft) {\n // Create the actual text element\n const endLabelElement = await createLabel(edge.endLabelLeft, edge.labelStyle);\n const endEdgeLabelLeft = elem.insert('g').attr('class', 'edgeTerminals');\n const inner = endEdgeLabelLeft.insert('g').attr('class', 'inner');\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')');\n\n endEdgeLabelLeft.node().appendChild(endLabelElement);\n\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].endLeft = endEdgeLabelLeft;\n setTerminalWidth(fo, edge.endLabelLeft);\n }\n if (edge.endLabelRight) {\n // Create the actual text element\n const endLabelElement = await createLabel(edge.endLabelRight, edge.labelStyle);\n const endEdgeLabelRight = elem.insert('g').attr('class', 'edgeTerminals');\n const inner = endEdgeLabelRight.insert('g').attr('class', 'inner');\n\n fo = inner.node().appendChild(endLabelElement);\n const slBox = endLabelElement.getBBox();\n inner.attr('transform', 'translate(' + -slBox.width / 2 + ', ' + -slBox.height / 2 + ')');\n\n endEdgeLabelRight.node().appendChild(endLabelElement);\n if (!terminalLabels[edge.id]) {\n terminalLabels[edge.id] = {};\n }\n terminalLabels[edge.id].endRight = endEdgeLabelRight;\n setTerminalWidth(fo, edge.endLabelRight);\n }\n return labelElement;\n};\n\n/**\n * @param {any} fo\n * @param {any} value\n */\nfunction setTerminalWidth(fo, value) {\n if (getConfig().flowchart.htmlLabels && fo) {\n fo.style.width = value.length * 9 + 'px';\n fo.style.height = '12px';\n }\n}\n\nexport const positionEdgeLabel = (edge, paths) => {\n log.debug('Moving label abc88 ', edge.id, edge.label, edgeLabels[edge.id], paths);\n let path = paths.updatedPath ? paths.updatedPath : paths.originalPath;\n const siteConfig = getConfig();\n const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig);\n if (edge.label) {\n const el = edgeLabels[edge.id];\n let x = edge.x;\n let y = edge.y;\n if (path) {\n // // debugger;\n const pos = utils.calcLabelPosition(path);\n log.debug(\n 'Moving label ' + edge.label + ' from (',\n x,\n ',',\n y,\n ') to (',\n pos.x,\n ',',\n pos.y,\n ') abc88'\n );\n if (paths.updatedPath) {\n x = pos.x;\n y = pos.y;\n }\n }\n el.attr('transform', `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`);\n }\n\n //let path = paths.updatedPath ? paths.updatedPath : paths.originalPath;\n if (edge.startLabelLeft) {\n const el = terminalLabels[edge.id].startLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n // debugger;\n const pos = utils.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, 'start_left', path);\n x = pos.x;\n y = pos.y;\n }\n el.attr('transform', `translate(${x}, ${y})`);\n }\n if (edge.startLabelRight) {\n const el = terminalLabels[edge.id].startRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n // debugger;\n const pos = utils.calcTerminalLabelPosition(\n edge.arrowTypeStart ? 10 : 0,\n 'start_right',\n path\n );\n x = pos.x;\n y = pos.y;\n }\n el.attr('transform', `translate(${x}, ${y})`);\n }\n if (edge.endLabelLeft) {\n const el = terminalLabels[edge.id].endLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n // debugger;\n const pos = utils.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, 'end_left', path);\n x = pos.x;\n y = pos.y;\n }\n el.attr('transform', `translate(${x}, ${y})`);\n }\n if (edge.endLabelRight) {\n const el = terminalLabels[edge.id].endRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n // debugger;\n const pos = utils.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, 'end_right', path);\n x = pos.x;\n y = pos.y;\n }\n el.attr('transform', `translate(${x}, ${y})`);\n }\n};\n\nconst outsideNode = (node, point) => {\n const x = node.x;\n const y = node.y;\n const dx = Math.abs(point.x - x);\n const dy = Math.abs(point.y - y);\n const w = node.width / 2;\n const h = node.height / 2;\n if (dx >= w || dy >= h) {\n return true;\n }\n return false;\n};\n\nexport const intersection = (node, outsidePoint, insidePoint) => {\n log.debug(`intersection calc abc89:\n outsidePoint: ${JSON.stringify(outsidePoint)}\n insidePoint : ${JSON.stringify(insidePoint)}\n node : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`);\n const x = node.x;\n const y = node.y;\n\n const dx = Math.abs(x - insidePoint.x);\n // const dy = Math.abs(y - insidePoint.y);\n const w = node.width / 2;\n let r = insidePoint.x < outsidePoint.x ? w - dx : w + dx;\n const h = node.height / 2;\n\n const Q = Math.abs(outsidePoint.y - insidePoint.y);\n const R = Math.abs(outsidePoint.x - insidePoint.x);\n\n if (Math.abs(y - outsidePoint.y) * w > Math.abs(x - outsidePoint.x) * h) {\n // Intersection is top or bottom of rect.\n let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y;\n r = (R * q) / Q;\n const res = {\n x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r,\n y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q,\n };\n\n if (r === 0) {\n res.x = outsidePoint.x;\n res.y = outsidePoint.y;\n }\n if (R === 0) {\n res.x = outsidePoint.x;\n }\n if (Q === 0) {\n res.y = outsidePoint.y;\n }\n\n log.debug(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res); // cspell: disable-line\n\n return res;\n } else {\n // Intersection on sides of rect\n if (insidePoint.x < outsidePoint.x) {\n r = outsidePoint.x - w - x;\n } else {\n // r = outsidePoint.x - w - x;\n r = x - w - outsidePoint.x;\n }\n let q = (Q * r) / R;\n // OK let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x + dx - w;\n // OK let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : outsidePoint.x + r;\n let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r;\n // let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : outsidePoint.x + r;\n let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q;\n log.debug(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y });\n if (r === 0) {\n _x = outsidePoint.x;\n _y = outsidePoint.y;\n }\n if (R === 0) {\n _x = outsidePoint.x;\n }\n if (Q === 0) {\n _y = outsidePoint.y;\n }\n\n return { x: _x, y: _y };\n }\n};\n/**\n * This function will page a path and node where the last point(s) in the path is inside the node\n * and return an update path ending by the border of the node.\n *\n * @param {Array} _points\n * @param {any} boundaryNode\n * @returns {Array} Points\n */\nconst cutPathAtIntersect = (_points, boundaryNode) => {\n log.debug('abc88 cutPathAtIntersect', _points, boundaryNode);\n let points = [];\n let lastPointOutside = _points[0];\n let isInside = false;\n _points.forEach((point) => {\n // check if point is inside the boundary rect\n if (!outsideNode(boundaryNode, point) && !isInside) {\n // First point inside the rect found\n // Calc the intersection coord between the point and the last point outside the rect\n const inter = intersection(boundaryNode, lastPointOutside, point);\n\n // // Check case where the intersection is the same as the last point\n let pointPresent = false;\n points.forEach((p) => {\n pointPresent = pointPresent || (p.x === inter.x && p.y === inter.y);\n });\n // // if (!pointPresent) {\n if (!points.some((e) => e.x === inter.x && e.y === inter.y)) {\n points.push(inter);\n }\n\n isInside = true;\n } else {\n // Outside\n lastPointOutside = point;\n // points.push(point);\n if (!isInside) {\n points.push(point);\n }\n }\n });\n return points;\n};\n\nexport const insertEdge = function (elem, e, edge, clusterDb, diagramType, graph, id) {\n let points = edge.points;\n log.debug('abc88 InsertEdge: edge=', edge, 'e=', e);\n let pointsHasChanged = false;\n const tail = graph.node(e.v);\n var head = graph.node(e.w);\n\n if (head?.intersect && tail?.intersect) {\n points = points.slice(1, edge.points.length - 1);\n points.unshift(tail.intersect(points[0]));\n points.push(head.intersect(points[points.length - 1]));\n }\n\n if (edge.toCluster) {\n log.debug('to cluster abc88', clusterDb[edge.toCluster]);\n points = cutPathAtIntersect(edge.points, clusterDb[edge.toCluster].node);\n\n pointsHasChanged = true;\n }\n\n if (edge.fromCluster) {\n log.debug('from cluster abc88', clusterDb[edge.fromCluster]);\n points = cutPathAtIntersect(points.reverse(), clusterDb[edge.fromCluster].node).reverse();\n\n pointsHasChanged = true;\n }\n\n // The data for our line\n const lineData = points.filter((p) => !Number.isNaN(p.y));\n\n // This is the accessor function we talked about above\n let curve = curveBasis;\n // Currently only flowcharts get the curve from the settings, perhaps this should\n // be expanded to a common setting? Restricting it for now in order not to cause side-effects that\n // have not been thought through\n if (edge.curve && (diagramType === 'graph' || diagramType === 'flowchart')) {\n curve = edge.curve;\n }\n\n const { x, y } = getLineFunctionsWithOffset(edge);\n const lineFunction = line().x(x).y(y).curve(curve);\n\n // Construct stroke classes based on properties\n let strokeClasses;\n switch (edge.thickness) {\n case 'normal':\n strokeClasses = 'edge-thickness-normal';\n break;\n case 'thick':\n strokeClasses = 'edge-thickness-thick';\n break;\n case 'invisible':\n strokeClasses = 'edge-thickness-thick';\n break;\n default:\n strokeClasses = '';\n }\n switch (edge.pattern) {\n case 'solid':\n strokeClasses += ' edge-pattern-solid';\n break;\n case 'dotted':\n strokeClasses += ' edge-pattern-dotted';\n break;\n case 'dashed':\n strokeClasses += ' edge-pattern-dashed';\n break;\n }\n\n const svgPath = elem\n .append('path')\n .attr('d', lineFunction(lineData))\n .attr('id', edge.id)\n .attr('class', ' ' + strokeClasses + (edge.classes ? ' ' + edge.classes : ''))\n .attr('style', edge.style);\n\n // DEBUG code, adds a red circle at each edge coordinate\n // edge.points.forEach((point) => {\n // elem\n // .append('circle')\n // .style('stroke', 'red')\n // .style('fill', 'red')\n // .attr('r', 1)\n // .attr('cx', point.x)\n // .attr('cy', point.y);\n // });\n\n let url = '';\n // // TODO: Can we load this config only from the rendered graph type?\n if (getConfig().flowchart.arrowMarkerAbsolute || getConfig().state.arrowMarkerAbsolute) {\n url = getUrl(true);\n }\n\n addEdgeMarkers(svgPath, edge, url, id, diagramType);\n\n let paths = {};\n if (pointsHasChanged) {\n paths.updatedPath = points;\n }\n paths.originalPath = edge.points;\n return paths;\n};\n", "import type { Direction } from '../../src/diagrams/block/blockTypes.js';\n\nconst expandAndDeduplicateDirections = (directions: Direction[]) => {\n const uniqueDirections = new Set();\n\n for (const direction of directions) {\n switch (direction) {\n case 'x':\n uniqueDirections.add('right');\n uniqueDirections.add('left');\n break;\n case 'y':\n uniqueDirections.add('up');\n uniqueDirections.add('down');\n break;\n default:\n uniqueDirections.add(direction);\n break;\n }\n }\n\n return uniqueDirections;\n};\nexport const getArrowPoints = (\n duplicatedDirections: Direction[],\n bbox: { width: number; height: number },\n node: any\n) => {\n // Expand and deduplicate the provided directions.\n // for instance: x, right => right, left\n const directions = expandAndDeduplicateDirections(duplicatedDirections);\n\n // Factor to divide height for some calculations.\n const f = 2;\n\n // Calculated height of the bounding box, accounting for node padding.\n const height = bbox.height + 2 * node.padding;\n // Midpoint calculation based on height.\n const midpoint = height / f;\n // Calculated width of the bounding box, accounting for additional width and node padding.\n const width = bbox.width + 2 * midpoint + node.padding;\n // Padding to use, half of the node padding.\n const padding = node.padding / 2;\n\n if (\n directions.has('right') &&\n directions.has('left') &&\n directions.has('up') &&\n directions.has('down')\n ) {\n // SQUARE\n return [\n // Bottom\n { x: 0, y: 0 },\n { x: midpoint, y: 0 },\n { x: width / 2, y: 2 * padding },\n { x: width - midpoint, y: 0 },\n { x: width, y: 0 },\n\n // Right\n { x: width, y: -height / 3 },\n { x: width + 2 * padding, y: -height / 2 },\n { x: width, y: (-2 * height) / 3 },\n { x: width, y: -height },\n\n // Top\n { x: width - midpoint, y: -height },\n { x: width / 2, y: -height - 2 * padding },\n { x: midpoint, y: -height },\n\n // Left\n { x: 0, y: -height },\n { x: 0, y: (-2 * height) / 3 },\n { x: -2 * padding, y: -height / 2 },\n { x: 0, y: -height / 3 },\n ];\n }\n if (directions.has('right') && directions.has('left') && directions.has('up')) {\n // RECTANGLE_VERTICAL (Top Open)\n return [\n { x: midpoint, y: 0 },\n { x: width - midpoint, y: 0 },\n { x: width, y: -height / 2 },\n { x: width - midpoint, y: -height },\n { x: midpoint, y: -height },\n { x: 0, y: -height / 2 },\n ];\n }\n if (directions.has('right') && directions.has('left') && directions.has('down')) {\n // RECTANGLE_VERTICAL (Bottom Open)\n return [\n { x: 0, y: 0 },\n { x: midpoint, y: -height },\n { x: width - midpoint, y: -height },\n { x: width, y: 0 },\n ];\n }\n if (directions.has('right') && directions.has('up') && directions.has('down')) {\n // RECTANGLE_HORIZONTAL (Right Open)\n return [\n { x: 0, y: 0 },\n { x: width, y: -midpoint },\n { x: width, y: -height + midpoint },\n { x: 0, y: -height },\n ];\n }\n if (directions.has('left') && directions.has('up') && directions.has('down')) {\n // RECTANGLE_HORIZONTAL (Left Open)\n return [\n { x: width, y: 0 },\n { x: 0, y: -midpoint },\n { x: 0, y: -height + midpoint },\n { x: width, y: -height },\n ];\n }\n if (directions.has('right') && directions.has('left')) {\n // HORIZONTAL_LINE\n return [\n { x: midpoint, y: 0 },\n { x: midpoint, y: -padding },\n { x: width - midpoint, y: -padding },\n { x: width - midpoint, y: 0 },\n { x: width, y: -height / 2 },\n { x: width - midpoint, y: -height },\n { x: width - midpoint, y: -height + padding },\n { x: midpoint, y: -height + padding },\n { x: midpoint, y: -height },\n { x: 0, y: -height / 2 },\n ];\n }\n if (directions.has('up') && directions.has('down')) {\n // VERTICAL_LINE\n return [\n // Bottom center\n { x: width / 2, y: 0 },\n // Left pont of bottom arrow\n { x: 0, y: -padding },\n { x: midpoint, y: -padding },\n // Left top over vertical section\n { x: midpoint, y: -height + padding },\n { x: 0, y: -height + padding },\n // Top of arrow\n { x: width / 2, y: -height },\n { x: width, y: -height + padding },\n // Top of right vertical bar\n { x: width - midpoint, y: -height + padding },\n { x: width - midpoint, y: -padding },\n { x: width, y: -padding },\n ];\n }\n if (directions.has('right') && directions.has('up')) {\n // ANGLE_RT\n return [\n { x: 0, y: 0 },\n { x: width, y: -midpoint },\n { x: 0, y: -height },\n ];\n }\n if (directions.has('right') && directions.has('down')) {\n // ANGLE_RB\n return [\n { x: 0, y: 0 },\n { x: width, y: 0 },\n { x: 0, y: -height },\n ];\n }\n if (directions.has('left') && directions.has('up')) {\n // ANGLE_LT\n return [\n { x: width, y: 0 },\n { x: 0, y: -midpoint },\n { x: width, y: -height },\n ];\n }\n if (directions.has('left') && directions.has('down')) {\n // ANGLE_LB\n return [\n { x: width, y: 0 },\n { x: 0, y: 0 },\n { x: width, y: -height },\n ];\n }\n if (directions.has('right')) {\n // ARROW_RIGHT\n return [\n { x: midpoint, y: -padding },\n { x: midpoint, y: -padding },\n { x: width - midpoint, y: -padding },\n { x: width - midpoint, y: 0 },\n { x: width, y: -height / 2 },\n { x: width - midpoint, y: -height },\n { x: width - midpoint, y: -height + padding },\n // top left corner of arrow\n { x: midpoint, y: -height + padding },\n { x: midpoint, y: -height + padding },\n ];\n }\n if (directions.has('left')) {\n // ARROW_LEFT\n return [\n { x: midpoint, y: 0 },\n { x: midpoint, y: -padding },\n // Two points, the right corners\n { x: width - midpoint, y: -padding },\n { x: width - midpoint, y: -height + padding },\n { x: midpoint, y: -height + padding },\n { x: midpoint, y: -height },\n { x: 0, y: -height / 2 },\n ];\n }\n if (directions.has('up')) {\n // ARROW_TOP\n return [\n // Bottom center\n { x: midpoint, y: -padding },\n // Left top over vertical section\n { x: midpoint, y: -height + padding },\n { x: 0, y: -height + padding },\n // Top of arrow\n { x: width / 2, y: -height },\n { x: width, y: -height + padding },\n // Top of right vertical bar\n { x: width - midpoint, y: -height + padding },\n { x: width - midpoint, y: -padding },\n ];\n }\n if (directions.has('down')) {\n // ARROW_BOTTOM\n return [\n // Bottom center\n { x: width / 2, y: 0 },\n // Left pont of bottom arrow\n { x: 0, y: -padding },\n { x: midpoint, y: -padding },\n // Left top over vertical section\n { x: midpoint, y: -height + padding },\n { x: width - midpoint, y: -height + padding },\n { x: width - midpoint, y: -padding },\n { x: width, y: -padding },\n ];\n }\n\n // POINT\n return [{ x: 0, y: 0 }];\n};\n", "/**\n * @param node\n * @param point\n */\nfunction intersectNode(node, point) {\n // console.info('Intersect Node');\n return node.intersect(point);\n}\n\nexport default intersectNode;\n", "/**\n * @param node\n * @param rx\n * @param ry\n * @param point\n */\nfunction intersectEllipse(node, rx, ry, point) {\n // Formulae from: https://mathworld.wolfram.com/Ellipse-LineIntersection.html\n\n var cx = node.x;\n var cy = node.y;\n\n var px = cx - point.x;\n var py = cy - point.y;\n\n var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);\n\n var dx = Math.abs((rx * ry * px) / det);\n if (point.x < cx) {\n dx = -dx;\n }\n var dy = Math.abs((rx * ry * py) / det);\n if (point.y < cy) {\n dy = -dy;\n }\n\n return { x: cx + dx, y: cy + dy };\n}\n\nexport default intersectEllipse;\n", "import intersectEllipse from './intersect-ellipse.js';\n\n/**\n * @param node\n * @param rx\n * @param point\n */\nfunction intersectCircle(node, rx, point) {\n return intersectEllipse(node, rx, rx, point);\n}\n\nexport default intersectCircle;\n", "/**\n * Returns the point at which two lines, p and q, intersect or returns undefined if they do not intersect.\n *\n * @param p1\n * @param p2\n * @param q1\n * @param q2\n */\nfunction intersectLine(p1, p2, q1, q2) {\n // Algorithm from J. Avro, (ed.) Graphics Gems, No 2, Morgan Kaufmann, 1994,\n // p7 and p473.\n\n var a1, a2, b1, b2, c1, c2;\n var r1, r2, r3, r4;\n var denom, offset, num;\n var x, y;\n\n // Compute a1, b1, c1, where line joining points 1 and 2 is F(x,y) = a1 x +\n // b1 y + c1 = 0.\n a1 = p2.y - p1.y;\n b1 = p1.x - p2.x;\n c1 = p2.x * p1.y - p1.x * p2.y;\n\n // Compute r3 and r4.\n r3 = a1 * q1.x + b1 * q1.y + c1;\n r4 = a1 * q2.x + b1 * q2.y + c1;\n\n // Check signs of r3 and r4. If both point 3 and point 4 lie on\n // same side of line 1, the line segments do not intersect.\n if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) {\n return /*DON'T_INTERSECT*/;\n }\n\n // Compute a2, b2, c2 where line joining points 3 and 4 is G(x,y) = a2 x + b2 y + c2 = 0\n a2 = q2.y - q1.y;\n b2 = q1.x - q2.x;\n c2 = q2.x * q1.y - q1.x * q2.y;\n\n // Compute r1 and r2\n r1 = a2 * p1.x + b2 * p1.y + c2;\n r2 = a2 * p2.x + b2 * p2.y + c2;\n\n // Check signs of r1 and r2. If both point 1 and point 2 lie\n // on same side of second line segment, the line segments do\n // not intersect.\n if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) {\n return /*DON'T_INTERSECT*/;\n }\n\n // Line segments intersect: compute intersection point.\n denom = a1 * b2 - a2 * b1;\n if (denom === 0) {\n return /*COLLINEAR*/;\n }\n\n offset = Math.abs(denom / 2);\n\n // The denom/2 is to get rounding instead of truncating. It\n // is added or subtracted to the numerator, depending upon the\n // sign of the numerator.\n num = b1 * c2 - b2 * c1;\n x = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n\n num = a2 * c1 - a1 * c2;\n y = num < 0 ? (num - offset) / denom : (num + offset) / denom;\n\n return { x: x, y: y };\n}\n\n/**\n * @param r1\n * @param r2\n */\nfunction sameSign(r1, r2) {\n return r1 * r2 > 0;\n}\n\nexport default intersectLine;\n", "/* eslint \"no-console\": off */\n\nimport intersectLine from './intersect-line.js';\n\nexport default intersectPolygon;\n\n/**\n * Returns the point ({x, y}) at which the point argument intersects with the node argument assuming\n * that it has the shape specified by polygon.\n *\n * @param node\n * @param polyPoints\n * @param point\n */\nfunction intersectPolygon(node, polyPoints, point) {\n var x1 = node.x;\n var y1 = node.y;\n\n var intersections = [];\n\n var minX = Number.POSITIVE_INFINITY;\n var minY = Number.POSITIVE_INFINITY;\n if (typeof polyPoints.forEach === 'function') {\n polyPoints.forEach(function (entry) {\n minX = Math.min(minX, entry.x);\n minY = Math.min(minY, entry.y);\n });\n } else {\n minX = Math.min(minX, polyPoints.x);\n minY = Math.min(minY, polyPoints.y);\n }\n\n var left = x1 - node.width / 2 - minX;\n var top = y1 - node.height / 2 - minY;\n\n for (var i = 0; i < polyPoints.length; i++) {\n var p1 = polyPoints[i];\n var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0];\n var intersect = intersectLine(\n node,\n point,\n { x: left + p1.x, y: top + p1.y },\n { x: left + p2.x, y: top + p2.y }\n );\n if (intersect) {\n intersections.push(intersect);\n }\n }\n\n if (!intersections.length) {\n // console.log('NO INTERSECTION FOUND, RETURN NODE CENTER', node);\n return node;\n }\n\n if (intersections.length > 1) {\n // More intersections, find the one nearest to edge end point\n intersections.sort(function (p, q) {\n var pdx = p.x - point.x;\n var pdy = p.y - point.y;\n var distp = Math.sqrt(pdx * pdx + pdy * pdy);\n\n var qdx = q.x - point.x;\n var qdy = q.y - point.y;\n var distq = Math.sqrt(qdx * qdx + qdy * qdy);\n\n return distp < distq ? -1 : distp === distq ? 0 : 1;\n });\n }\n return intersections[0];\n}\n", "const intersectRect = (node, point) => {\n var x = node.x;\n var y = node.y;\n\n // Rectangle intersection algorithm from:\n // https://math.stackexchange.com/questions/108113/find-edge-between-two-boxes\n var dx = point.x - x;\n var dy = point.y - y;\n var w = node.width / 2;\n var h = node.height / 2;\n\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n // Intersection is top or bottom of rect.\n if (dy < 0) {\n h = -h;\n }\n sx = dy === 0 ? 0 : (h * dx) / dy;\n sy = h;\n } else {\n // Intersection is left or right of rect.\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = dx === 0 ? 0 : (w * dy) / dx;\n }\n\n return { x: x + sx, y: y + sy };\n};\n\nexport default intersectRect;\n", "/*\n * Borrowed with love from dagre-d3. Many thanks to cpettitt!\n */\n\nimport node from './intersect-node.js';\nimport circle from './intersect-circle.js';\nimport ellipse from './intersect-ellipse.js';\nimport polygon from './intersect-polygon.js';\nimport rect from './intersect-rect.js';\n\nexport default {\n node,\n circle,\n ellipse,\n polygon,\n rect,\n};\n", "import createLabel from '../createLabel.js';\nimport { createText } from '../../rendering-util/createText.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { select } from 'd3';\nimport { evaluate, sanitizeText } from '../../diagrams/common/common.js';\nimport { decodeEntities } from '../../utils.js';\n\nexport const labelHelper = async (parent, node, _classes, isNode) => {\n const config = getConfig();\n let classes;\n const useHtmlLabels = node.useHtmlLabels || evaluate(config.flowchart.htmlLabels);\n if (!_classes) {\n classes = 'node default';\n } else {\n classes = _classes;\n }\n\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', classes)\n .attr('id', node.domId || node.id);\n\n // Create the label and insert it after the rect\n const label = shapeSvg.insert('g').attr('class', 'label').attr('style', node.labelStyle);\n\n // Replace labelText with default value if undefined\n let labelText;\n if (node.labelText === undefined) {\n labelText = '';\n } else {\n labelText = typeof node.labelText === 'string' ? node.labelText : node.labelText[0];\n }\n\n const textNode = label.node();\n let text;\n if (node.labelType === 'markdown') {\n // text = textNode;\n text = createText(\n label,\n sanitizeText(decodeEntities(labelText), config),\n {\n useHtmlLabels,\n width: node.width || config.flowchart.wrappingWidth,\n classes: 'markdown-node-label',\n },\n config\n );\n } else {\n text = textNode.appendChild(\n await createLabel(\n sanitizeText(decodeEntities(labelText), config),\n node.labelStyle,\n false,\n isNode\n )\n );\n }\n // Get the size of the label\n let bbox = text.getBBox();\n const halfPadding = node.padding / 2;\n\n if (evaluate(config.flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n\n // if there are images, need to wait for them to load before getting the bounding box\n const images = div.getElementsByTagName('img');\n if (images) {\n const noImgText = labelText.replace(/]*>/g, '').trim() === '';\n\n await Promise.all(\n [...images].map(\n (img) =>\n new Promise((res) => {\n /**\n *\n */\n function setupImage() {\n img.style.display = 'flex';\n img.style.flexDirection = 'column';\n\n if (noImgText) {\n // default size if no text\n const bodyFontSize = config.fontSize\n ? config.fontSize\n : window.getComputedStyle(document.body).fontSize;\n const enlargingFactor = 5;\n const width = parseInt(bodyFontSize, 10) * enlargingFactor + 'px';\n img.style.minWidth = width;\n img.style.maxWidth = width;\n } else {\n img.style.width = '100%';\n }\n res(img);\n }\n setTimeout(() => {\n if (img.complete) {\n setupImage();\n }\n });\n img.addEventListener('error', setupImage);\n img.addEventListener('load', setupImage);\n })\n )\n );\n }\n\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n\n // Center the label\n if (useHtmlLabels) {\n label.attr('transform', 'translate(' + -bbox.width / 2 + ', ' + -bbox.height / 2 + ')');\n } else {\n label.attr('transform', 'translate(' + 0 + ', ' + -bbox.height / 2 + ')');\n }\n if (node.centerLabel) {\n label.attr('transform', 'translate(' + -bbox.width / 2 + ', ' + -bbox.height / 2 + ')');\n }\n label.insert('rect', ':first-child');\n\n return { shapeSvg, bbox, halfPadding, label };\n};\n\nexport const updateNodeBounds = (node, element) => {\n const bbox = element.node().getBBox();\n node.width = bbox.width;\n node.height = bbox.height;\n};\n\n/**\n * @param parent\n * @param w\n * @param h\n * @param points\n */\nexport function insertPolygonShape(parent, w, h, points) {\n return parent\n .insert('polygon', ':first-child')\n .attr(\n 'points',\n points\n .map(function (d) {\n return d.x + ',' + d.y;\n })\n .join(' ')\n )\n .attr('class', 'label-container')\n .attr('transform', 'translate(' + -w / 2 + ',' + h / 2 + ')');\n}\n", "import { updateNodeBounds, labelHelper } from './util.js';\nimport { log } from '../../logger.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport intersect from '../intersect/index.js';\n\nconst note = async (parent, node) => {\n const useHtmlLabels = node.useHtmlLabels || getConfig().flowchart.htmlLabels;\n if (!useHtmlLabels) {\n node.centerLabel = true;\n }\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n 'node ' + node.classes,\n true\n );\n\n log.info('Classes = ', node.classes);\n // add the rect\n const rect = shapeSvg.insert('rect', ':first-child');\n\n rect\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('x', -bbox.width / 2 - halfPadding)\n .attr('y', -bbox.height / 2 - halfPadding)\n .attr('width', bbox.width + node.padding)\n .attr('height', bbox.height + node.padding);\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n};\n\nexport default note;\n", "import { select } from 'd3';\nimport { getConfig } from '../diagram-api/diagramAPI.js';\nimport { evaluate } from '../diagrams/common/common.js';\nimport { log } from '../logger.js';\nimport { getArrowPoints } from './blockArrowHelper.js';\nimport createLabel from './createLabel.js';\nimport intersect from './intersect/index.js';\nimport note from './shapes/note.js';\nimport { insertPolygonShape, labelHelper, updateNodeBounds } from './shapes/util.js';\n\nconst formatClass = (str) => {\n if (str) {\n return ' ' + str;\n }\n return '';\n};\nconst getClassesFromNode = (node, otherClasses) => {\n return `${otherClasses ? otherClasses : 'node default'}${formatClass(node.classes)} ${formatClass(\n node.class\n )}`;\n};\n\nconst question = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const s = w + h;\n\n const points = [\n { x: s / 2, y: 0 },\n { x: s, y: -s / 2 },\n { x: s / 2, y: -s },\n { x: 0, y: -s / 2 },\n ];\n\n log.info('Question main (Circle)');\n\n const questionElem = insertPolygonShape(shapeSvg, s, s, points);\n questionElem.attr('style', node.style);\n updateNodeBounds(node, questionElem);\n\n node.intersect = function (point) {\n log.warn('Intersect called');\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nconst choice = (parent, node) => {\n const shapeSvg = parent\n .insert('g')\n .attr('class', 'node default')\n .attr('id', node.domId || node.id);\n\n const s = 28;\n const points = [\n { x: 0, y: s / 2 },\n { x: s / 2, y: 0 },\n { x: 0, y: -s / 2 },\n { x: -s / 2, y: 0 },\n ];\n\n const choice = shapeSvg.insert('polygon', ':first-child').attr(\n 'points',\n points\n .map(function (d) {\n return d.x + ',' + d.y;\n })\n .join(' ')\n );\n // center the circle around its coordinate\n choice.attr('class', 'state-start').attr('r', 7).attr('width', 28).attr('height', 28);\n node.width = 28;\n node.height = 28;\n\n node.intersect = function (point) {\n return intersect.circle(node, 14, point);\n };\n\n return shapeSvg;\n};\n\nconst hexagon = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n\n const f = 4;\n const h = bbox.height + node.padding;\n const m = h / f;\n const w = bbox.width + 2 * m + node.padding;\n const points = [\n { x: m, y: 0 },\n { x: w - m, y: 0 },\n { x: w, y: -h / 2 },\n { x: w - m, y: -h },\n { x: m, y: -h },\n { x: 0, y: -h / 2 },\n ];\n\n const hex = insertPolygonShape(shapeSvg, w, h, points);\n hex.attr('style', node.style);\n updateNodeBounds(node, hex);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nconst block_arrow = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, undefined, true);\n\n const f = 2;\n const h = bbox.height + 2 * node.padding;\n const m = h / f;\n const w = bbox.width + 2 * m + node.padding;\n\n const points = getArrowPoints(node.directions, bbox, node);\n\n const blockArrow = insertPolygonShape(shapeSvg, w, h, points);\n blockArrow.attr('style', node.style);\n updateNodeBounds(node, blockArrow);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nconst rect_left_inv_arrow = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: -h / 2, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: -h / 2, y: -h },\n { x: 0, y: -h / 2 },\n ];\n\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr('style', node.style);\n\n node.width = w + h;\n node.height = h;\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nconst lean_right = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(parent, node, getClassesFromNode(node), true);\n\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: (-2 * h) / 6, y: 0 },\n { x: w - h / 6, y: 0 },\n { x: w + (2 * h) / 6, y: -h },\n { x: h / 6, y: -h },\n ];\n\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr('style', node.style);\n updateNodeBounds(node, el);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nconst lean_left = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: (2 * h) / 6, y: 0 },\n { x: w + h / 6, y: 0 },\n { x: w - (2 * h) / 6, y: -h },\n { x: -h / 6, y: -h },\n ];\n\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr('style', node.style);\n updateNodeBounds(node, el);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nconst trapezoid = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: (-2 * h) / 6, y: 0 },\n { x: w + (2 * h) / 6, y: 0 },\n { x: w - h / 6, y: -h },\n { x: h / 6, y: -h },\n ];\n\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr('style', node.style);\n updateNodeBounds(node, el);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nconst inv_trapezoid = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: h / 6, y: 0 },\n { x: w - h / 6, y: 0 },\n { x: w + (2 * h) / 6, y: -h },\n { x: (-2 * h) / 6, y: -h },\n ];\n\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr('style', node.style);\n updateNodeBounds(node, el);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nconst rect_right_inv_arrow = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 0, y: 0 },\n { x: w + h / 2, y: 0 },\n { x: w, y: -h / 2 },\n { x: w + h / 2, y: -h },\n { x: 0, y: -h },\n ];\n\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr('style', node.style);\n updateNodeBounds(node, el);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nconst cylinder = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n\n const w = bbox.width + node.padding;\n const rx = w / 2;\n const ry = rx / (2.5 + w / 50);\n const h = bbox.height + ry + node.padding;\n\n const shape =\n 'M 0,' +\n ry +\n ' a ' +\n rx +\n ',' +\n ry +\n ' 0,0,0 ' +\n w +\n ' 0 a ' +\n rx +\n ',' +\n ry +\n ' 0,0,0 ' +\n -w +\n ' 0 l 0,' +\n h +\n ' a ' +\n rx +\n ',' +\n ry +\n ' 0,0,0 ' +\n w +\n ' 0 l 0,' +\n -h;\n\n const el = shapeSvg\n .attr('label-offset-y', ry)\n .insert('path', ':first-child')\n .attr('style', node.style)\n .attr('d', shape)\n .attr('transform', 'translate(' + -w / 2 + ',' + -(h / 2 + ry) + ')');\n\n updateNodeBounds(node, el);\n\n node.intersect = function (point) {\n const pos = intersect.rect(node, point);\n const x = pos.x - node.x;\n\n if (\n rx != 0 &&\n (Math.abs(x) < node.width / 2 ||\n (Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry))\n ) {\n // ellipsis equation: x*x / a*a + y*y / b*b = 1\n // solve for y to get adjusted value for pos.y\n let y = ry * ry * (1 - (x * x) / (rx * rx));\n if (y != 0) {\n y = Math.sqrt(y);\n }\n y = ry - y;\n if (point.y - node.y > 0) {\n y = -y;\n }\n\n pos.y += y;\n }\n\n return pos;\n };\n\n return shapeSvg;\n};\n\nconst rect = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n 'node ' + node.classes + ' ' + node.class,\n true\n );\n\n // add the rect\n const rect = shapeSvg.insert('rect', ':first-child');\n\n // console.log('Rect node:', node, 'bbox:', bbox, 'halfPadding:', halfPadding, 'node.padding:', node.padding);\n // const totalWidth = bbox.width + node.padding * 2;\n // const totalHeight = bbox.height + node.padding * 2;\n const totalWidth = node.positioned ? node.width : bbox.width + node.padding;\n const totalHeight = node.positioned ? node.height : bbox.height + node.padding;\n const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding;\n const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding;\n rect\n .attr('class', 'basic label-container')\n .attr('style', node.style)\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('x', x)\n .attr('y', y)\n .attr('width', totalWidth)\n .attr('height', totalHeight);\n\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect, node.props.borders, totalWidth, totalHeight);\n propKeys.delete('borders');\n }\n propKeys.forEach((propKey) => {\n log.warn(`Unknown node property ${propKey}`);\n });\n }\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n};\n\nconst composite = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n 'node ' + node.classes,\n true\n );\n\n // add the rect\n const rect = shapeSvg.insert('rect', ':first-child');\n\n // const totalWidth = bbox.width + node.padding * 2;\n // const totalHeight = bbox.height + node.padding * 2;\n const totalWidth = node.positioned ? node.width : bbox.width + node.padding;\n const totalHeight = node.positioned ? node.height : bbox.height + node.padding;\n const x = node.positioned ? -totalWidth / 2 : -bbox.width / 2 - halfPadding;\n const y = node.positioned ? -totalHeight / 2 : -bbox.height / 2 - halfPadding;\n rect\n .attr('class', 'basic cluster composite label-container')\n .attr('style', node.style)\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('x', x)\n .attr('y', y)\n .attr('width', totalWidth)\n .attr('height', totalHeight);\n\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect, node.props.borders, totalWidth, totalHeight);\n propKeys.delete('borders');\n }\n propKeys.forEach((propKey) => {\n log.warn(`Unknown node property ${propKey}`);\n });\n }\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n};\n\nconst labelRect = async (parent, node) => {\n const { shapeSvg } = await labelHelper(parent, node, 'label', true);\n\n log.trace('Classes = ', node.class);\n // add the rect\n const rect = shapeSvg.insert('rect', ':first-child');\n\n // Hide the rect we are only after the label\n const totalWidth = 0;\n const totalHeight = 0;\n rect.attr('width', totalWidth).attr('height', totalHeight);\n shapeSvg.attr('class', 'label edgeLabel');\n\n if (node.props) {\n const propKeys = new Set(Object.keys(node.props));\n if (node.props.borders) {\n applyNodePropertyBorders(rect, node.props.borders, totalWidth, totalHeight);\n propKeys.delete('borders');\n }\n propKeys.forEach((propKey) => {\n log.warn(`Unknown node property ${propKey}`);\n });\n }\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n};\n\n/**\n * @param rect\n * @param borders\n * @param totalWidth\n * @param totalHeight\n */\nfunction applyNodePropertyBorders(rect, borders, totalWidth, totalHeight) {\n const strokeDashArray = [];\n const addBorder = (length) => {\n strokeDashArray.push(length, 0);\n };\n const skipBorder = (length) => {\n strokeDashArray.push(0, length);\n };\n if (borders.includes('t')) {\n log.debug('add top border');\n addBorder(totalWidth);\n } else {\n skipBorder(totalWidth);\n }\n if (borders.includes('r')) {\n log.debug('add right border');\n addBorder(totalHeight);\n } else {\n skipBorder(totalHeight);\n }\n if (borders.includes('b')) {\n log.debug('add bottom border');\n addBorder(totalWidth);\n } else {\n skipBorder(totalWidth);\n }\n if (borders.includes('l')) {\n log.debug('add left border');\n addBorder(totalHeight);\n } else {\n skipBorder(totalHeight);\n }\n rect.attr('stroke-dasharray', strokeDashArray.join(' '));\n}\n\nconst rectWithTitle = async (parent, node) => {\n // const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, 'node ' + node.classes);\n\n let classes;\n if (!node.classes) {\n classes = 'node default';\n } else {\n classes = 'node ' + node.classes;\n }\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', classes)\n .attr('id', node.domId || node.id);\n\n // Create the title label and insert it after the rect\n const rect = shapeSvg.insert('rect', ':first-child');\n // const innerRect = shapeSvg.insert('rect');\n const innerLine = shapeSvg.insert('line');\n\n const label = shapeSvg.insert('g').attr('class', 'label');\n\n const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText;\n // const text2 = typeof text2prim === 'object' ? text2prim[0] : text2prim;\n\n let title = '';\n if (typeof text2 === 'object') {\n title = text2[0];\n } else {\n title = text2;\n }\n log.info('Label text abc79', title, text2, typeof text2 === 'object');\n\n const text = label.node().appendChild(await createLabel(title, node.labelStyle, true, true));\n let bbox = { width: 0, height: 0 };\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = text.children[0];\n const dv = select(text);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n log.info('Text 2', text2);\n const textRows = text2.slice(1, text2.length);\n let titleBox = text.getBBox();\n const descr = label\n .node()\n .appendChild(\n await createLabel(\n textRows.join ? textRows.join('
    ') : textRows,\n node.labelStyle,\n true,\n true\n )\n );\n\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = descr.children[0];\n const dv = select(descr);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n // bbox = label.getBBox();\n // log.info(descr);\n const halfPadding = node.padding / 2;\n select(descr).attr(\n 'transform',\n 'translate( ' +\n // (titleBox.width - bbox.width) / 2 +\n (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) +\n ', ' +\n (titleBox.height + halfPadding + 5) +\n ')'\n );\n select(text).attr(\n 'transform',\n 'translate( ' +\n // (titleBox.width - bbox.width) / 2 +\n (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) +\n ', ' +\n 0 +\n ')'\n );\n // Get the size of the label\n\n // Bounding box for title and text\n bbox = label.node().getBBox();\n\n // Center the label\n label.attr(\n 'transform',\n 'translate(' + -bbox.width / 2 + ', ' + (-bbox.height / 2 - halfPadding + 3) + ')'\n );\n\n rect\n .attr('class', 'outer title-state')\n .attr('x', -bbox.width / 2 - halfPadding)\n .attr('y', -bbox.height / 2 - halfPadding)\n .attr('width', bbox.width + node.padding)\n .attr('height', bbox.height + node.padding);\n\n innerLine\n .attr('class', 'divider')\n .attr('x1', -bbox.width / 2 - halfPadding)\n .attr('x2', bbox.width / 2 + halfPadding)\n .attr('y1', -bbox.height / 2 - halfPadding + titleBox.height + halfPadding)\n .attr('y2', -bbox.height / 2 - halfPadding + titleBox.height + halfPadding);\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n};\n\nconst stadium = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n\n const h = bbox.height + node.padding;\n const w = bbox.width + h / 4 + node.padding;\n\n // add the rect\n const rect = shapeSvg\n .insert('rect', ':first-child')\n .attr('style', node.style)\n .attr('rx', h / 2)\n .attr('ry', h / 2)\n .attr('x', -w / 2)\n .attr('y', -h / 2)\n .attr('width', w)\n .attr('height', h);\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n};\n\nconst circle = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n const circle = shapeSvg.insert('circle', ':first-child');\n\n // center the circle around its coordinate\n circle\n .attr('style', node.style)\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('r', bbox.width / 2 + halfPadding)\n .attr('width', bbox.width + node.padding)\n .attr('height', bbox.height + node.padding);\n\n log.info('Circle main');\n\n updateNodeBounds(node, circle);\n\n node.intersect = function (point) {\n log.info('Circle intersect', node, bbox.width / 2 + halfPadding, point);\n return intersect.circle(node, bbox.width / 2 + halfPadding, point);\n };\n\n return shapeSvg;\n};\n\nconst doublecircle = async (parent, node) => {\n const { shapeSvg, bbox, halfPadding } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n const gap = 5;\n const circleGroup = shapeSvg.insert('g', ':first-child');\n const outerCircle = circleGroup.insert('circle');\n const innerCircle = circleGroup.insert('circle');\n\n circleGroup.attr('class', node.class);\n\n // center the circle around its coordinate\n outerCircle\n .attr('style', node.style)\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('r', bbox.width / 2 + halfPadding + gap)\n .attr('width', bbox.width + node.padding + gap * 2)\n .attr('height', bbox.height + node.padding + gap * 2);\n\n innerCircle\n .attr('style', node.style)\n .attr('rx', node.rx)\n .attr('ry', node.ry)\n .attr('r', bbox.width / 2 + halfPadding)\n .attr('width', bbox.width + node.padding)\n .attr('height', bbox.height + node.padding);\n\n log.info('DoubleCircle main');\n\n updateNodeBounds(node, outerCircle);\n\n node.intersect = function (point) {\n log.info('DoubleCircle intersect', node, bbox.width / 2 + halfPadding + gap, point);\n return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point);\n };\n\n return shapeSvg;\n};\n\nconst subroutine = async (parent, node) => {\n const { shapeSvg, bbox } = await labelHelper(\n parent,\n node,\n getClassesFromNode(node, undefined),\n true\n );\n\n const w = bbox.width + node.padding;\n const h = bbox.height + node.padding;\n const points = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: w, y: -h },\n { x: 0, y: -h },\n { x: 0, y: 0 },\n { x: -8, y: 0 },\n { x: w + 8, y: 0 },\n { x: w + 8, y: -h },\n { x: -8, y: -h },\n { x: -8, y: 0 },\n ];\n\n const el = insertPolygonShape(shapeSvg, w, h, points);\n el.attr('style', node.style);\n updateNodeBounds(node, el);\n\n node.intersect = function (point) {\n return intersect.polygon(node, points, point);\n };\n\n return shapeSvg;\n};\n\nconst start = (parent, node) => {\n const shapeSvg = parent\n .insert('g')\n .attr('class', 'node default')\n .attr('id', node.domId || node.id);\n const circle = shapeSvg.insert('circle', ':first-child');\n\n // center the circle around its coordinate\n circle.attr('class', 'state-start').attr('r', 7).attr('width', 14).attr('height', 14);\n\n updateNodeBounds(node, circle);\n\n node.intersect = function (point) {\n return intersect.circle(node, 7, point);\n };\n\n return shapeSvg;\n};\n\nconst forkJoin = (parent, node, dir) => {\n const shapeSvg = parent\n .insert('g')\n .attr('class', 'node default')\n .attr('id', node.domId || node.id);\n\n let width = 70;\n let height = 10;\n\n if (dir === 'LR') {\n width = 10;\n height = 70;\n }\n\n const shape = shapeSvg\n .append('rect')\n .attr('x', (-1 * width) / 2)\n .attr('y', (-1 * height) / 2)\n .attr('width', width)\n .attr('height', height)\n .attr('class', 'fork-join');\n\n updateNodeBounds(node, shape);\n node.height = node.height + node.padding / 2;\n node.width = node.width + node.padding / 2;\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n};\n\nconst end = (parent, node) => {\n const shapeSvg = parent\n .insert('g')\n .attr('class', 'node default')\n .attr('id', node.domId || node.id);\n const innerCircle = shapeSvg.insert('circle', ':first-child');\n const circle = shapeSvg.insert('circle', ':first-child');\n\n circle.attr('class', 'state-start').attr('r', 7).attr('width', 14).attr('height', 14);\n\n innerCircle.attr('class', 'state-end').attr('r', 5).attr('width', 10).attr('height', 10);\n\n updateNodeBounds(node, circle);\n\n node.intersect = function (point) {\n return intersect.circle(node, 7, point);\n };\n\n return shapeSvg;\n};\n\nconst class_box = async (parent, node) => {\n const halfPadding = node.padding / 2;\n const rowPadding = 4;\n const lineHeight = 8;\n\n let classes;\n if (!node.classes) {\n classes = 'node default';\n } else {\n classes = 'node ' + node.classes;\n }\n // Add outer g element\n const shapeSvg = parent\n .insert('g')\n .attr('class', classes)\n .attr('id', node.domId || node.id);\n\n // Create the title label and insert it after the rect\n const rect = shapeSvg.insert('rect', ':first-child');\n const topLine = shapeSvg.insert('line');\n const bottomLine = shapeSvg.insert('line');\n let maxWidth = 0;\n let maxHeight = rowPadding;\n\n const labelContainer = shapeSvg.insert('g').attr('class', 'label');\n let verticalPos = 0;\n const hasInterface = node.classData.annotations?.[0];\n\n // 1. Create the labels\n const interfaceLabelText = node.classData.annotations[0]\n ? '\u00AB' + node.classData.annotations[0] + '\u00BB'\n : '';\n const interfaceLabel = labelContainer\n .node()\n .appendChild(await createLabel(interfaceLabelText, node.labelStyle, true, true));\n let interfaceBBox = interfaceLabel.getBBox();\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = interfaceLabel.children[0];\n const dv = select(interfaceLabel);\n interfaceBBox = div.getBoundingClientRect();\n dv.attr('width', interfaceBBox.width);\n dv.attr('height', interfaceBBox.height);\n }\n if (node.classData.annotations[0]) {\n maxHeight += interfaceBBox.height + rowPadding;\n maxWidth += interfaceBBox.width;\n }\n\n let classTitleString = node.classData.label;\n\n if (node.classData.type !== undefined && node.classData.type !== '') {\n if (getConfig().flowchart.htmlLabels) {\n classTitleString += '<' + node.classData.type + '>';\n } else {\n classTitleString += '<' + node.classData.type + '>';\n }\n }\n const classTitleLabel = labelContainer\n .node()\n .appendChild(await createLabel(classTitleString, node.labelStyle, true, true));\n select(classTitleLabel).attr('class', 'classTitle');\n let classTitleBBox = classTitleLabel.getBBox();\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = classTitleLabel.children[0];\n const dv = select(classTitleLabel);\n classTitleBBox = div.getBoundingClientRect();\n dv.attr('width', classTitleBBox.width);\n dv.attr('height', classTitleBBox.height);\n }\n maxHeight += classTitleBBox.height + rowPadding;\n if (classTitleBBox.width > maxWidth) {\n maxWidth = classTitleBBox.width;\n }\n const classAttributes = [];\n node.classData.members.forEach(async (member) => {\n const parsedInfo = member.getDisplayDetails();\n let parsedText = parsedInfo.displayText;\n if (getConfig().flowchart.htmlLabels) {\n parsedText = parsedText.replace(//g, '>');\n }\n const lbl = labelContainer\n .node()\n .appendChild(\n await createLabel(\n parsedText,\n parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle,\n true,\n true\n )\n );\n let bbox = lbl.getBBox();\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = lbl.children[0];\n const dv = select(lbl);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n if (bbox.width > maxWidth) {\n maxWidth = bbox.width;\n }\n maxHeight += bbox.height + rowPadding;\n classAttributes.push(lbl);\n });\n\n maxHeight += lineHeight;\n\n const classMethods = [];\n node.classData.methods.forEach(async (member) => {\n const parsedInfo = member.getDisplayDetails();\n let displayText = parsedInfo.displayText;\n if (getConfig().flowchart.htmlLabels) {\n displayText = displayText.replace(//g, '>');\n }\n const lbl = labelContainer\n .node()\n .appendChild(\n await createLabel(\n displayText,\n parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle,\n true,\n true\n )\n );\n let bbox = lbl.getBBox();\n if (evaluate(getConfig().flowchart.htmlLabels)) {\n const div = lbl.children[0];\n const dv = select(lbl);\n bbox = div.getBoundingClientRect();\n dv.attr('width', bbox.width);\n dv.attr('height', bbox.height);\n }\n if (bbox.width > maxWidth) {\n maxWidth = bbox.width;\n }\n maxHeight += bbox.height + rowPadding;\n\n classMethods.push(lbl);\n });\n\n maxHeight += lineHeight;\n\n // 2. Position the labels\n\n // position the interface label\n if (hasInterface) {\n let diffX = (maxWidth - interfaceBBox.width) / 2;\n select(interfaceLabel).attr(\n 'transform',\n 'translate( ' + ((-1 * maxWidth) / 2 + diffX) + ', ' + (-1 * maxHeight) / 2 + ')'\n );\n verticalPos = interfaceBBox.height + rowPadding;\n }\n // Position the class title label\n let diffX = (maxWidth - classTitleBBox.width) / 2;\n select(classTitleLabel).attr(\n 'transform',\n 'translate( ' +\n ((-1 * maxWidth) / 2 + diffX) +\n ', ' +\n ((-1 * maxHeight) / 2 + verticalPos) +\n ')'\n );\n verticalPos += classTitleBBox.height + rowPadding;\n\n topLine\n .attr('class', 'divider')\n .attr('x1', -maxWidth / 2 - halfPadding)\n .attr('x2', maxWidth / 2 + halfPadding)\n .attr('y1', -maxHeight / 2 - halfPadding + lineHeight + verticalPos)\n .attr('y2', -maxHeight / 2 - halfPadding + lineHeight + verticalPos);\n\n verticalPos += lineHeight;\n\n classAttributes.forEach((lbl) => {\n select(lbl).attr(\n 'transform',\n 'translate( ' +\n -maxWidth / 2 +\n ', ' +\n ((-1 * maxHeight) / 2 + verticalPos + lineHeight / 2) +\n ')'\n );\n //get the height of the bounding box of each member if exists\n const memberBBox = lbl?.getBBox();\n verticalPos += (memberBBox?.height ?? 0) + rowPadding;\n });\n\n verticalPos += lineHeight;\n bottomLine\n .attr('class', 'divider')\n .attr('x1', -maxWidth / 2 - halfPadding)\n .attr('x2', maxWidth / 2 + halfPadding)\n .attr('y1', -maxHeight / 2 - halfPadding + lineHeight + verticalPos)\n .attr('y2', -maxHeight / 2 - halfPadding + lineHeight + verticalPos);\n\n verticalPos += lineHeight;\n\n classMethods.forEach((lbl) => {\n select(lbl).attr(\n 'transform',\n 'translate( ' + -maxWidth / 2 + ', ' + ((-1 * maxHeight) / 2 + verticalPos) + ')'\n );\n const memberBBox = lbl?.getBBox();\n verticalPos += (memberBBox?.height ?? 0) + rowPadding;\n });\n\n rect\n .attr('style', node.style)\n .attr('class', 'outer title-state')\n .attr('x', -maxWidth / 2 - halfPadding)\n .attr('y', -(maxHeight / 2) - halfPadding)\n .attr('width', maxWidth + node.padding)\n .attr('height', maxHeight + node.padding);\n\n updateNodeBounds(node, rect);\n\n node.intersect = function (point) {\n return intersect.rect(node, point);\n };\n\n return shapeSvg;\n};\n\nconst shapes = {\n rhombus: question,\n composite,\n question,\n rect,\n labelRect,\n rectWithTitle,\n choice,\n circle,\n doublecircle,\n stadium,\n hexagon,\n block_arrow,\n rect_left_inv_arrow,\n lean_right,\n lean_left,\n trapezoid,\n inv_trapezoid,\n rect_right_inv_arrow,\n cylinder,\n start,\n end,\n note,\n subroutine,\n fork: forkJoin,\n join: forkJoin,\n class_box,\n};\n\nlet nodeElems = {};\n\nexport const insertNode = async (elem, node, renderOptions) => {\n let newEl;\n let el;\n\n // Add link when appropriate\n if (node.link) {\n let target;\n if (getConfig().securityLevel === 'sandbox') {\n target = '_top';\n } else if (node.linkTarget) {\n target = node.linkTarget || '_blank';\n }\n newEl = elem.insert('svg:a').attr('xlink:href', node.link).attr('target', target);\n el = await shapes[node.shape](newEl, node, renderOptions);\n } else {\n el = await shapes[node.shape](elem, node, renderOptions);\n newEl = el;\n }\n if (node.tooltip) {\n el.attr('title', node.tooltip);\n }\n if (node.class) {\n el.attr('class', 'node default ' + node.class);\n }\n\n nodeElems[node.id] = newEl;\n\n if (node.haveCallback) {\n nodeElems[node.id].attr('class', nodeElems[node.id].attr('class') + ' clickable');\n }\n return newEl;\n};\nexport const setNodeElem = (elem, node) => {\n nodeElems[node.id] = elem;\n};\nexport const clear = () => {\n nodeElems = {};\n};\n\nexport const positionNode = (node) => {\n const el = nodeElems[node.id];\n log.trace(\n 'Transforming node',\n node.diff,\n node,\n 'translate(' + (node.x - node.width / 2 - 5) + ', ' + node.width / 2 + ')'\n );\n const padding = 8;\n const diff = node.diff || 0;\n if (node.clusterNode) {\n el.attr(\n 'transform',\n 'translate(' +\n (node.x + diff - node.width / 2) +\n ', ' +\n (node.y - node.height / 2 - padding) +\n ')'\n );\n } else {\n el.attr('transform', 'translate(' + node.x + ', ' + node.y + ')');\n }\n return diff;\n};\n", "import * as graphlib from 'dagre-d3-es/src/graphlib/index.js';\nimport { getConfig } from '../../config.js';\nimport { insertEdge, insertEdgeLabel, positionEdgeLabel } from '../../dagre-wrapper/edges.js';\nimport { insertNode, positionNode } from '../../dagre-wrapper/nodes.js';\nimport { getStylesFromArray } from '../../utils.js';\nimport type { BlockDB } from './blockDB.js';\nimport type { Block } from './blockTypes.js';\n\nfunction getNodeFromBlock(block: Block, db: BlockDB, positioned = false) {\n const vertex = block;\n\n let classStr = 'default';\n if ((vertex?.classes?.length || 0) > 0) {\n classStr = (vertex?.classes ?? []).join(' ');\n }\n classStr = classStr + ' flowchart-label';\n\n // We create a SVG label, either by delegating to addHtmlLabel or manually\n let radius = 0;\n let shape = '';\n let padding;\n // Set the shape based parameters\n switch (vertex.type) {\n case 'round':\n radius = 5;\n shape = 'rect';\n break;\n case 'composite':\n radius = 0;\n shape = 'composite';\n padding = 0;\n break;\n case 'square':\n shape = 'rect';\n break;\n case 'diamond':\n shape = 'question';\n break;\n case 'hexagon':\n shape = 'hexagon';\n break;\n case 'block_arrow':\n shape = 'block_arrow';\n break;\n case 'odd':\n shape = 'rect_left_inv_arrow';\n break;\n case 'lean_right':\n shape = 'lean_right';\n break;\n case 'lean_left':\n shape = 'lean_left';\n break;\n case 'trapezoid':\n shape = 'trapezoid';\n break;\n case 'inv_trapezoid':\n shape = 'inv_trapezoid';\n break;\n case 'rect_left_inv_arrow':\n shape = 'rect_left_inv_arrow';\n break;\n case 'circle':\n shape = 'circle';\n break;\n case 'ellipse':\n shape = 'ellipse';\n break;\n case 'stadium':\n shape = 'stadium';\n break;\n case 'subroutine':\n shape = 'subroutine';\n break;\n case 'cylinder':\n shape = 'cylinder';\n break;\n case 'group':\n shape = 'rect';\n break;\n case 'doublecircle':\n shape = 'doublecircle';\n break;\n default:\n shape = 'rect';\n }\n\n const styles = getStylesFromArray(vertex?.styles ?? []);\n\n // Use vertex id as text in the box if no text is provided by the graph definition\n const vertexText = vertex.label;\n\n const bounds = vertex.size ?? { width: 0, height: 0, x: 0, y: 0 };\n // Add the node\n const node = {\n labelStyle: styles.labelStyle,\n shape: shape,\n labelText: vertexText,\n rx: radius,\n ry: radius,\n class: classStr,\n style: styles.style,\n id: vertex.id,\n directions: vertex.directions,\n width: bounds.width,\n height: bounds.height,\n x: bounds.x,\n y: bounds.y,\n positioned,\n intersect: undefined,\n type: vertex.type,\n padding: padding ?? getConfig()?.block?.padding ?? 0,\n };\n return node;\n}\nasync function calculateBlockSize(\n elem: d3.Selection,\n block: any,\n db: any\n) {\n const node = getNodeFromBlock(block, db, false);\n if (node.type === 'group') {\n return;\n }\n\n // Add the element to the DOM to size it\n const config = getConfig();\n const nodeEl = await insertNode(elem, node, { config });\n const boundingBox = nodeEl.node().getBBox();\n const obj = db.getBlock(node.id);\n obj.size = { width: boundingBox.width, height: boundingBox.height, x: 0, y: 0, node: nodeEl };\n db.setBlock(obj);\n nodeEl.remove();\n}\ntype ActionFun = typeof calculateBlockSize;\n\nexport async function insertBlockPositioned(elem: any, block: Block, db: any) {\n const node = getNodeFromBlock(block, db, true);\n // Add the element to the DOM to size it\n const obj = db.getBlock(node.id);\n if (obj.type !== 'space') {\n const config = getConfig();\n await insertNode(elem, node, { config });\n block.intersect = node?.intersect;\n positionNode(node);\n }\n}\n\nexport async function performOperations(\n elem: d3.Selection,\n blocks: Block[],\n db: BlockDB,\n operation: ActionFun\n) {\n for (const block of blocks) {\n await operation(elem, block, db);\n if (block.children) {\n await performOperations(elem, block.children, db, operation);\n }\n }\n}\n\nexport async function calculateBlockSizes(elem: any, blocks: Block[], db: BlockDB) {\n await performOperations(elem, blocks, db, calculateBlockSize);\n}\n\nexport async function insertBlocks(\n elem: d3.Selection,\n blocks: Block[],\n db: BlockDB\n) {\n await performOperations(elem, blocks, db, insertBlockPositioned);\n}\n\nexport async function insertEdges(\n elem: any,\n edges: Block[],\n blocks: Block[],\n db: BlockDB,\n id: string\n) {\n const g = new graphlib.Graph({\n multigraph: true,\n compound: true,\n });\n g.setGraph({\n rankdir: 'TB',\n nodesep: 10,\n ranksep: 10,\n marginx: 8,\n marginy: 8,\n });\n\n for (const block of blocks) {\n if (block.size) {\n g.setNode(block.id, {\n width: block.size.width,\n height: block.size.height,\n intersect: block.intersect,\n });\n }\n }\n\n for (const edge of edges) {\n // elem, e, edge, clusterDb, diagramType, graph;\n if (edge.start && edge.end) {\n const startBlock = db.getBlock(edge.start);\n const endBlock = db.getBlock(edge.end);\n\n if (startBlock?.size && endBlock?.size) {\n const start = startBlock.size;\n const end = endBlock.size;\n const points = [\n { x: start.x, y: start.y },\n { x: start.x + (end.x - start.x) / 2, y: start.y + (end.y - start.y) / 2 },\n { x: end.x, y: end.y },\n ];\n // edge.points = points;\n insertEdge(\n elem,\n { v: edge.start, w: edge.end, name: edge.id },\n {\n ...edge,\n arrowTypeEnd: edge.arrowTypeEnd,\n arrowTypeStart: edge.arrowTypeStart,\n points,\n classes: 'edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1',\n },\n undefined,\n 'block',\n g,\n id\n );\n if (edge.label) {\n await insertEdgeLabel(elem, {\n ...edge,\n label: edge.label,\n labelStyle: 'stroke: #333; stroke-width: 1.5px;fill:none;',\n arrowTypeEnd: edge.arrowTypeEnd,\n arrowTypeStart: edge.arrowTypeStart,\n points,\n classes: 'edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1',\n });\n positionEdgeLabel(\n { ...edge, x: points[1].x, y: points[1].y },\n {\n originalPath: points,\n }\n );\n }\n }\n }\n }\n}\n", "import { select as d3select } from 'd3';\nimport type { Diagram } from '../../Diagram.js';\nimport * as configApi from '../../config.js';\nimport insertMarkers from '../../dagre-wrapper/markers.js';\nimport { log } from '../../logger.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\nimport type { BlockDB } from './blockDB.js';\nimport { layout } from './layout.js';\nimport { calculateBlockSizes, insertBlocks, insertEdges } from './renderHelpers.js';\n\nexport const getClasses = function (text: any, diagObj: any) {\n return diagObj.db.getClasses();\n};\n\nexport const draw = async function (\n text: string,\n id: string,\n _version: string,\n diagObj: Diagram\n): Promise {\n const { securityLevel, block: conf } = configApi.getConfig();\n const db = diagObj.db as BlockDB;\n let sandboxElement: any;\n if (securityLevel === 'sandbox') {\n sandboxElement = d3select('#i' + id);\n }\n const root =\n securityLevel === 'sandbox'\n ? d3select(sandboxElement.nodes()[0].contentDocument.body)\n : d3select('body');\n\n const svg =\n securityLevel === 'sandbox'\n ? root.select(`[id=\"${id}\"]`)\n : d3select(`[id=\"${id}\"]`);\n\n // Define the supported markers for the diagram\n const markers = ['point', 'circle', 'cross'];\n\n // Add the marker definitions to the svg as marker tags\n insertMarkers(svg, markers, diagObj.type, id);\n\n const bl = db.getBlocks();\n const blArr = db.getBlocksFlat();\n const edges = db.getEdges();\n\n const nodes = svg.insert('g').attr('class', 'block');\n await calculateBlockSizes(nodes, bl, db);\n const bounds = layout(db);\n await insertBlocks(nodes, bl, db);\n await insertEdges(nodes, edges, blArr, db, id);\n\n // Establish svg dimensions and get width and height\n // Why, oh why ????\n if (bounds) {\n const bounds2 = bounds;\n const magicFactor = Math.max(1, Math.round(0.125 * (bounds2.width / bounds2.height)));\n const height = bounds2.height + magicFactor + 10;\n const width = bounds2.width + 10;\n const { useMaxWidth } = conf!;\n configureSvgSize(svg, height, width, !!useMaxWidth);\n log.debug('Here Bounds', bounds, bounds2);\n svg.attr(\n 'viewBox',\n `${bounds2.x - 5} ${bounds2.y - 5} ${bounds2.width + 10} ${bounds2.height + 10}`\n );\n }\n};\n\nexport default {\n draw,\n getClasses,\n};\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\n// @ts-ignore: jison doesn't export types\nimport parser from './parser/block.jison';\nimport db from './blockDB.js';\nimport flowStyles from './styles.js';\nimport renderer from './blockRenderer.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n db,\n renderer,\n styles: flowStyles,\n};\n", "import type { DiagramDBBase } from '../../diagram-api/types.js';\nimport type { ArchitectureDiagramConfig } from '../../config.type.js';\nimport type { D3Element } from '../../types.js';\nimport type cytoscape from 'cytoscape';\n\n/*=======================================*\\\n| Architecture Diagram Types |\n\\*=======================================*/\n\nexport type ArchitectureAlignment = 'vertical' | 'horizontal' | 'bend';\n\nexport type ArchitectureDirection = 'L' | 'R' | 'T' | 'B';\nexport type ArchitectureDirectionX = Extract;\nexport type ArchitectureDirectionY = Extract;\n\n/**\n * Contains LL, RR, TT, BB which are impossible connections\n */\nexport type InvalidArchitectureDirectionPair = `${ArchitectureDirection}${ArchitectureDirection}`;\nexport type ArchitectureDirectionPair = Exclude<\n InvalidArchitectureDirectionPair,\n 'LL' | 'RR' | 'TT' | 'BB'\n>;\nexport type ArchitectureDirectionPairXY = Exclude<\n InvalidArchitectureDirectionPair,\n 'LL' | 'RR' | 'TT' | 'BB' | 'LR' | 'RL' | 'TB' | 'BT'\n>;\n\nexport const ArchitectureDirectionName = {\n L: 'left',\n R: 'right',\n T: 'top',\n B: 'bottom',\n} as const;\n\nexport const ArchitectureDirectionArrow = {\n L: (scale: number) => `${scale},${scale / 2} 0,${scale} 0,0`,\n R: (scale: number) => `0,${scale / 2} ${scale},0 ${scale},${scale}`,\n T: (scale: number) => `0,0 ${scale},0 ${scale / 2},${scale}`,\n B: (scale: number) => `${scale / 2},0 ${scale},${scale} 0,${scale}`,\n} as const;\n\nexport const ArchitectureDirectionArrowShift = {\n L: (orig: number, arrowSize: number) => orig - arrowSize + 2,\n R: (orig: number, _arrowSize: number) => orig - 2,\n T: (orig: number, arrowSize: number) => orig - arrowSize + 2,\n B: (orig: number, _arrowSize: number) => orig - 2,\n} as const;\n\nexport const getOppositeArchitectureDirection = function (\n x: ArchitectureDirection\n): ArchitectureDirection {\n if (isArchitectureDirectionX(x)) {\n return x === 'L' ? 'R' : 'L';\n } else {\n return x === 'T' ? 'B' : 'T';\n }\n};\n\nexport const isArchitectureDirection = function (x: unknown): x is ArchitectureDirection {\n const temp = x as ArchitectureDirection;\n return temp === 'L' || temp === 'R' || temp === 'T' || temp === 'B';\n};\n\nexport const isArchitectureDirectionX = function (\n x: ArchitectureDirection\n): x is ArchitectureDirectionX {\n const temp = x as ArchitectureDirectionX;\n return temp === 'L' || temp === 'R';\n};\n\nexport const isArchitectureDirectionY = function (\n x: ArchitectureDirection\n): x is ArchitectureDirectionY {\n const temp = x as ArchitectureDirectionY;\n return temp === 'T' || temp === 'B';\n};\n\nexport const isArchitectureDirectionXY = function (\n a: ArchitectureDirection,\n b: ArchitectureDirection\n) {\n const aX_bY = isArchitectureDirectionX(a) && isArchitectureDirectionY(b);\n const aY_bX = isArchitectureDirectionY(a) && isArchitectureDirectionX(b);\n return aX_bY || aY_bX;\n};\n\nexport const isArchitecturePairXY = function (\n pair: ArchitectureDirectionPair\n): pair is ArchitectureDirectionPairXY {\n const lhs = pair[0] as ArchitectureDirection;\n const rhs = pair[1] as ArchitectureDirection;\n const aX_bY = isArchitectureDirectionX(lhs) && isArchitectureDirectionY(rhs);\n const aY_bX = isArchitectureDirectionY(lhs) && isArchitectureDirectionX(rhs);\n return aX_bY || aY_bX;\n};\n\n/**\n * Verifies that the architecture direction pair does not contain an invalid match (LL, RR, TT, BB)\n * @param x - architecture direction pair which could potentially be invalid\n * @returns true if the pair is not LL, RR, TT, or BB\n */\nexport const isValidArchitectureDirectionPair = function (\n x: InvalidArchitectureDirectionPair\n): x is ArchitectureDirectionPair {\n return x !== 'LL' && x !== 'RR' && x !== 'TT' && x !== 'BB';\n};\n\nexport type ArchitectureDirectionPairMap = Partial>;\n\n/**\n * Creates a pair of the directions of each side of an edge. This function should be used instead of manually creating it to ensure that the source is always the first character.\n *\n * Note: Undefined is returned when sourceDir and targetDir are the same. In theory this should never happen since the diagram parser throws an error if a user defines it as such.\n * @param sourceDir - source direction\n * @param targetDir - target direction\n * @returns\n */\nexport const getArchitectureDirectionPair = function (\n sourceDir: ArchitectureDirection,\n targetDir: ArchitectureDirection\n): ArchitectureDirectionPair | undefined {\n const pair: `${ArchitectureDirection}${ArchitectureDirection}` = `${sourceDir}${targetDir}`;\n return isValidArchitectureDirectionPair(pair) ? pair : undefined;\n};\n\n/**\n * Given an x,y position for an arrow and the direction of the edge it belongs to, return a factor for slightly shifting the edge\n * @param param0 - [x, y] coordinate pair\n * @param pair - architecture direction pair\n * @returns a new [x, y] coordinate pair\n */\nexport const shiftPositionByArchitectureDirectionPair = function (\n [x, y]: number[],\n pair: ArchitectureDirectionPair\n): number[] {\n const lhs = pair[0] as ArchitectureDirection;\n const rhs = pair[1] as ArchitectureDirection;\n if (isArchitectureDirectionX(lhs)) {\n if (isArchitectureDirectionY(rhs)) {\n return [x + (lhs === 'L' ? -1 : 1), y + (rhs === 'T' ? 1 : -1)];\n } else {\n return [x + (lhs === 'L' ? -1 : 1), y];\n }\n } else {\n if (isArchitectureDirectionX(rhs)) {\n return [x + (rhs === 'L' ? 1 : -1), y + (lhs === 'T' ? 1 : -1)];\n } else {\n return [x, y + (lhs === 'T' ? 1 : -1)];\n }\n }\n};\n\n/**\n * Given the directional pair of an XY edge, get the scale factors necessary to shift the coordinates inwards towards the edge\n * @param pair - XY pair of an edge\n * @returns - number[] containing [+/- 1, +/- 1]\n */\nexport const getArchitectureDirectionXYFactors = function (\n pair: ArchitectureDirectionPairXY\n): number[] {\n if (pair === 'LT' || pair === 'TL') {\n return [1, 1];\n } else if (pair === 'BL' || pair === 'LB') {\n return [1, -1];\n } else if (pair === 'BR' || pair === 'RB') {\n return [-1, -1];\n } else {\n return [-1, 1];\n }\n};\n\nexport const getArchitectureDirectionAlignment = function (\n a: ArchitectureDirection,\n b: ArchitectureDirection\n): ArchitectureAlignment {\n if (isArchitectureDirectionXY(a, b)) {\n return 'bend';\n } else if (isArchitectureDirectionX(a)) {\n return 'horizontal';\n }\n return 'vertical';\n};\n\nexport interface ArchitectureStyleOptions {\n archEdgeColor: string;\n archEdgeArrowColor: string;\n archEdgeWidth: string;\n archGroupBorderColor: string;\n archGroupBorderWidth: string;\n}\n\nexport interface ArchitectureService {\n id: string;\n type: 'service';\n edges: ArchitectureEdge[];\n icon?: string;\n iconText?: string;\n title?: string;\n in?: string;\n width?: number;\n height?: number;\n}\n\nexport interface ArchitectureJunction {\n id: string;\n type: 'junction';\n edges: ArchitectureEdge[];\n in?: string;\n width?: number;\n height?: number;\n}\n\nexport type ArchitectureNode = ArchitectureService | ArchitectureJunction;\n\nexport const isArchitectureService = function (x: ArchitectureNode): x is ArchitectureService {\n const temp = x as ArchitectureService;\n return temp.type === 'service';\n};\n\nexport const isArchitectureJunction = function (x: ArchitectureNode): x is ArchitectureJunction {\n const temp = x as ArchitectureJunction;\n return temp.type === 'junction';\n};\n\nexport interface ArchitectureGroup {\n id: string;\n icon?: string;\n title?: string;\n in?: string;\n}\n\nexport interface ArchitectureEdge
    {\n lhsId: string;\n lhsDir: DT;\n lhsInto?: boolean;\n lhsGroup?: boolean;\n rhsId: string;\n rhsDir: DT;\n rhsInto?: boolean;\n rhsGroup?: boolean;\n title?: string;\n}\n\nexport interface ArchitectureDB extends DiagramDBBase {\n clear: () => void;\n addService: (service: Omit) => void;\n getServices: () => ArchitectureService[];\n addJunction: (service: Omit) => void;\n getJunctions: () => ArchitectureJunction[];\n getNodes: () => ArchitectureNode[];\n getNode: (id: string) => ArchitectureNode | null;\n addGroup: (group: ArchitectureGroup) => void;\n getGroups: () => ArchitectureGroup[];\n addEdge: (edge: ArchitectureEdge) => void;\n getEdges: () => ArchitectureEdge[];\n setElementForId: (id: string, element: D3Element) => void;\n getElementById: (id: string) => D3Element;\n getDataStructures: () => ArchitectureDataStructures;\n}\n\nexport type ArchitectureAdjacencyList = Record;\nexport type ArchitectureSpatialMap = Record;\n\n/**\n * Maps the direction that groups connect from.\n *\n * **Outer key**: ID of group A\n *\n * **Inner key**: ID of group B\n *\n * **Value**: 'vertical' or 'horizontal'\n *\n * Note: tmp[groupA][groupB] == tmp[groupB][groupA]\n */\nexport type ArchitectureGroupAlignments = Record<\n string,\n Record>\n>;\n\nexport interface ArchitectureDataStructures {\n adjList: ArchitectureAdjacencyList;\n spatialMaps: ArchitectureSpatialMap[];\n groupAlignments: ArchitectureGroupAlignments;\n}\n\nexport interface ArchitectureState extends Record {\n nodes: Record;\n groups: Record;\n edges: ArchitectureEdge[];\n registeredIds: Record;\n dataStructures?: ArchitectureDataStructures;\n elements: Record;\n config: ArchitectureDiagramConfig;\n}\n\n/*=======================================*\\\n| Cytoscape Override Types |\n\\*=======================================*/\n\nexport interface EdgeSingularData {\n id: string;\n label?: string;\n source: string;\n sourceDir: ArchitectureDirection;\n sourceArrow?: boolean;\n sourceGroup?: boolean;\n target: string;\n targetDir: ArchitectureDirection;\n targetArrow?: boolean;\n targetGroup?: boolean;\n [key: string]: any;\n}\n\nexport const edgeData = (edge: cytoscape.EdgeSingular) => {\n return edge.data() as EdgeSingularData;\n};\n\nexport interface EdgeSingular extends cytoscape.EdgeSingular {\n _private: {\n bodyBounds: unknown;\n rscratch: {\n startX: number;\n startY: number;\n midX: number;\n midY: number;\n endX: number;\n endY: number;\n };\n };\n data(): EdgeSingularData;\n data(key: T): EdgeSingularData[T];\n}\n\nexport type NodeSingularData =\n | {\n type: 'service';\n id: string;\n icon?: string;\n label?: string;\n parent?: string;\n width: number;\n height: number;\n [key: string]: any;\n }\n | {\n type: 'junction';\n id: string;\n parent?: string;\n width: number;\n height: number;\n [key: string]: any;\n }\n | {\n type: 'group';\n id: string;\n icon?: string;\n label?: string;\n parent?: string;\n [key: string]: any;\n };\n\nexport const nodeData = (node: cytoscape.NodeSingular) => {\n return node.data() as NodeSingularData;\n};\n\nexport interface NodeSingular extends cytoscape.NodeSingular {\n _private: {\n bodyBounds: {\n h: number;\n w: number;\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n };\n children: cytoscape.NodeSingular[];\n };\n data(): NodeSingularData;\n data(key: T): NodeSingularData[T];\n}\n", "import { getConfig as commonGetConfig } from '../../config.js';\nimport type { ArchitectureDiagramConfig } from '../../config.type.js';\nimport DEFAULT_CONFIG from '../../defaultConfig.js';\nimport type { DiagramDB } from '../../diagram-api/types.js';\nimport type { D3Element } from '../../types.js';\nimport { cleanAndMerge } from '../../utils.js';\nimport {\n clear as commonClear,\n getAccDescription,\n getAccTitle,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle,\n} from '../common/commonDb.js';\nimport type {\n ArchitectureAlignment,\n ArchitectureDirectionPair,\n ArchitectureDirectionPairMap,\n ArchitectureEdge,\n ArchitectureGroup,\n ArchitectureJunction,\n ArchitectureNode,\n ArchitectureService,\n ArchitectureSpatialMap,\n ArchitectureState,\n} from './architectureTypes.js';\nimport {\n getArchitectureDirectionAlignment,\n getArchitectureDirectionPair,\n isArchitectureDirection,\n isArchitectureJunction,\n isArchitectureService,\n shiftPositionByArchitectureDirectionPair,\n} from './architectureTypes.js';\n\nconst DEFAULT_ARCHITECTURE_CONFIG: Required =\n DEFAULT_CONFIG.architecture;\nexport class ArchitectureDB implements DiagramDB {\n private nodes: Record = {};\n private groups: Record = {};\n private edges: ArchitectureEdge[] = [];\n private registeredIds: Record = {};\n private dataStructures?: ArchitectureState['dataStructures'];\n private elements: Record = {};\n\n constructor() {\n this.clear();\n }\n\n public clear(): void {\n this.nodes = {};\n this.groups = {};\n this.edges = [];\n this.registeredIds = {};\n this.dataStructures = undefined;\n this.elements = {};\n commonClear();\n }\n\n public addService({\n id,\n icon,\n in: parent,\n title,\n iconText,\n }: Omit): void {\n if (this.registeredIds[id] !== undefined) {\n throw new Error(\n `The service id [${id}] is already in use by another ${this.registeredIds[id]}`\n );\n }\n if (parent !== undefined) {\n if (id === parent) {\n throw new Error(`The service [${id}] cannot be placed within itself`);\n }\n if (this.registeredIds[parent] === undefined) {\n throw new Error(\n `The service [${id}]'s parent does not exist. Please make sure the parent is created before this service`\n );\n }\n if (this.registeredIds[parent] === 'node') {\n throw new Error(`The service [${id}]'s parent is not a group`);\n }\n }\n\n this.registeredIds[id] = 'node';\n\n this.nodes[id] = {\n id,\n type: 'service',\n icon,\n iconText,\n title,\n edges: [],\n in: parent,\n };\n }\n\n public getServices(): ArchitectureService[] {\n return Object.values(this.nodes).filter(isArchitectureService);\n }\n\n public addJunction({ id, in: parent }: Omit): void {\n this.registeredIds[id] = 'node';\n\n this.nodes[id] = {\n id,\n type: 'junction',\n edges: [],\n in: parent,\n };\n }\n\n public getJunctions(): ArchitectureJunction[] {\n return Object.values(this.nodes).filter(isArchitectureJunction);\n }\n\n public getNodes(): ArchitectureNode[] {\n return Object.values(this.nodes);\n }\n\n public getNode(id: string): ArchitectureNode | null {\n return this.nodes[id] ?? null;\n }\n\n public addGroup({ id, icon, in: parent, title }: ArchitectureGroup): void {\n if (this.registeredIds?.[id] !== undefined) {\n throw new Error(\n `The group id [${id}] is already in use by another ${this.registeredIds[id]}`\n );\n }\n if (parent !== undefined) {\n if (id === parent) {\n throw new Error(`The group [${id}] cannot be placed within itself`);\n }\n if (this.registeredIds?.[parent] === undefined) {\n throw new Error(\n `The group [${id}]'s parent does not exist. Please make sure the parent is created before this group`\n );\n }\n if (this.registeredIds?.[parent] === 'node') {\n throw new Error(`The group [${id}]'s parent is not a group`);\n }\n }\n\n this.registeredIds[id] = 'group';\n\n this.groups[id] = {\n id,\n icon,\n title,\n in: parent,\n };\n }\n public getGroups(): ArchitectureGroup[] {\n return Object.values(this.groups);\n }\n public addEdge({\n lhsId,\n rhsId,\n lhsDir,\n rhsDir,\n lhsInto,\n rhsInto,\n lhsGroup,\n rhsGroup,\n title,\n }: ArchitectureEdge): void {\n if (!isArchitectureDirection(lhsDir)) {\n throw new Error(\n `Invalid direction given for left hand side of edge ${lhsId}--${rhsId}. Expected (L,R,T,B) got ${String(lhsDir)}`\n );\n }\n if (!isArchitectureDirection(rhsDir)) {\n throw new Error(\n `Invalid direction given for right hand side of edge ${lhsId}--${rhsId}. Expected (L,R,T,B) got ${String(rhsDir)}`\n );\n }\n\n if (this.nodes[lhsId] === undefined && this.groups[lhsId] === undefined) {\n throw new Error(\n `The left-hand id [${lhsId}] does not yet exist. Please create the service/group before declaring an edge to it.`\n );\n }\n if (this.nodes[rhsId] === undefined && this.groups[rhsId] === undefined) {\n throw new Error(\n `The right-hand id [${rhsId}] does not yet exist. Please create the service/group before declaring an edge to it.`\n );\n }\n\n const lhsGroupId = this.nodes[lhsId].in;\n const rhsGroupId = this.nodes[rhsId].in;\n if (lhsGroup && lhsGroupId && rhsGroupId && lhsGroupId == rhsGroupId) {\n throw new Error(\n `The left-hand id [${lhsId}] is modified to traverse the group boundary, but the edge does not pass through two groups.`\n );\n }\n if (rhsGroup && lhsGroupId && rhsGroupId && lhsGroupId == rhsGroupId) {\n throw new Error(\n `The right-hand id [${rhsId}] is modified to traverse the group boundary, but the edge does not pass through two groups.`\n );\n }\n\n const edge = {\n lhsId,\n lhsDir,\n lhsInto,\n lhsGroup,\n rhsId,\n rhsDir,\n rhsInto,\n rhsGroup,\n title,\n };\n\n this.edges.push(edge);\n if (this.nodes[lhsId] && this.nodes[rhsId]) {\n this.nodes[lhsId].edges.push(this.edges[this.edges.length - 1]);\n this.nodes[rhsId].edges.push(this.edges[this.edges.length - 1]);\n }\n }\n\n public getEdges(): ArchitectureEdge[] {\n return this.edges;\n }\n\n /**\n * Returns the current diagram's adjacency list, spatial map, & group alignments.\n * If they have not been created, run the algorithms to generate them.\n * @returns\n */\n public getDataStructures() {\n if (this.dataStructures === undefined) {\n // Tracks how groups are aligned with one another. Generated while creating the adj list\n const groupAlignments: Record<\n string,\n Record>\n > = {};\n\n // Create an adjacency list of the diagram to perform BFS on\n // Outer reduce applied on all services\n // Inner reduce applied on the edges for a service\n const adjList = Object.entries(this.nodes).reduce<\n Record\n >((prevOuter, [id, service]) => {\n prevOuter[id] = service.edges.reduce((prevInner, edge) => {\n // track the direction groups connect to one another\n const lhsGroupId = this.getNode(edge.lhsId)?.in;\n const rhsGroupId = this.getNode(edge.rhsId)?.in;\n if (lhsGroupId && rhsGroupId && lhsGroupId !== rhsGroupId) {\n const alignment = getArchitectureDirectionAlignment(edge.lhsDir, edge.rhsDir);\n if (alignment !== 'bend') {\n groupAlignments[lhsGroupId] ??= {};\n groupAlignments[lhsGroupId][rhsGroupId] = alignment;\n groupAlignments[rhsGroupId] ??= {};\n groupAlignments[rhsGroupId][lhsGroupId] = alignment;\n }\n }\n\n if (edge.lhsId === id) {\n // source is LHS\n const pair = getArchitectureDirectionPair(edge.lhsDir, edge.rhsDir);\n if (pair) {\n prevInner[pair] = edge.rhsId;\n }\n } else {\n // source is RHS\n const pair = getArchitectureDirectionPair(edge.rhsDir, edge.lhsDir);\n if (pair) {\n prevInner[pair] = edge.lhsId;\n }\n }\n return prevInner;\n }, {});\n return prevOuter;\n }, {});\n\n // Configuration for the initial pass of BFS\n const firstId = Object.keys(adjList)[0];\n const visited = { [firstId]: 1 };\n // If a key is present in this object, it has not been visited\n const notVisited = Object.keys(adjList).reduce(\n (prev, id) => (id === firstId ? prev : { ...prev, [id]: 1 }),\n {} as Record\n );\n\n // Perform BFS on the adjacency list\n const BFS = (startingId: string): ArchitectureSpatialMap => {\n const spatialMap = { [startingId]: [0, 0] };\n const queue = [startingId];\n while (queue.length > 0) {\n const id = queue.shift();\n if (id) {\n visited[id] = 1;\n delete notVisited[id];\n const adj = adjList[id];\n const [posX, posY] = spatialMap[id];\n Object.entries(adj).forEach(([dir, rhsId]) => {\n if (!visited[rhsId]) {\n spatialMap[rhsId] = shiftPositionByArchitectureDirectionPair(\n [posX, posY],\n dir as ArchitectureDirectionPair\n );\n queue.push(rhsId);\n }\n });\n }\n }\n return spatialMap;\n };\n const spatialMaps = [BFS(firstId)];\n\n // If our diagram is disconnected, keep adding additional spatial maps until all disconnected graphs have been found\n while (Object.keys(notVisited).length > 0) {\n spatialMaps.push(BFS(Object.keys(notVisited)[0]));\n }\n this.dataStructures = {\n adjList,\n spatialMaps,\n groupAlignments,\n };\n }\n return this.dataStructures;\n }\n\n public setElementForId(id: string, element: D3Element): void {\n this.elements[id] = element;\n }\n\n public getElementById(id: string): D3Element {\n return this.elements[id];\n }\n\n public getConfig(): Required {\n return cleanAndMerge({\n ...DEFAULT_ARCHITECTURE_CONFIG,\n ...commonGetConfig().architecture,\n });\n }\n\n public getConfigField(\n field: T\n ): Required[T] {\n return this.getConfig()[field];\n }\n\n public setAccTitle = setAccTitle;\n public getAccTitle = getAccTitle;\n public setDiagramTitle = setDiagramTitle;\n public getDiagramTitle = getDiagramTitle;\n public getAccDescription = getAccDescription;\n public setAccDescription = setAccDescription;\n}\n\n/**\n * Typed wrapper for resolving an architecture diagram's config fields. Returns the default value if undefined\n * @param field - the config field to access\n * @returns\n */\n// export function getConfigField(\n// field: T\n// ): Required[T] {\n// return db.getConfig()[field];\n// }\n", "import type { Architecture } from '@mermaid-js/parser';\nimport { parse } from '@mermaid-js/parser';\nimport type { ParserDefinition } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport { populateCommonDb } from '../common/populateCommonDb.js';\nimport { ArchitectureDB } from './architectureDb.js';\n\nconst populateDb = (ast: Architecture, db: ArchitectureDB) => {\n populateCommonDb(ast, db);\n ast.groups.map((group) => db.addGroup(group));\n ast.services.map((service) => db.addService({ ...service, type: 'service' }));\n ast.junctions.map((service) => db.addJunction({ ...service, type: 'junction' }));\n // @ts-ignore TODO our parser guarantees the type is L/R/T/B and not string. How to change to union type?\n ast.edges.map((edge) => db.addEdge(edge));\n};\n\nexport const parser: ParserDefinition = {\n parser: {\n // @ts-expect-error - ArchitectureDB is not assignable to DiagramDB\n yy: undefined,\n },\n parse: async (input: string): Promise => {\n const ast: Architecture = await parse('architecture', input);\n log.debug(ast);\n const db = parser.parser?.yy;\n if (!(db instanceof ArchitectureDB)) {\n throw new Error(\n 'parser.parser?.yy was not a ArchitectureDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.'\n );\n }\n populateDb(ast, db);\n },\n};\n", "import type { DiagramStylesProvider } from '../../diagram-api/types.js';\nimport type { ArchitectureStyleOptions } from './architectureTypes.js';\n\nconst getStyles: DiagramStylesProvider = (options: ArchitectureStyleOptions) =>\n `\n .edge {\n stroke-width: ${options.archEdgeWidth};\n stroke: ${options.archEdgeColor};\n fill: none;\n }\n\n .arrow {\n fill: ${options.archEdgeArrowColor};\n }\n\n .node-bkg {\n fill: none;\n stroke: ${options.archGroupBorderColor};\n stroke-width: ${options.archGroupBorderWidth};\n stroke-dasharray: 8;\n }\n .node-icon-text {\n display: flex; \n align-items: center;\n }\n \n .node-icon-text > div {\n color: #fff;\n margin: 1px;\n height: fit-content;\n text-align: center;\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n }\n`;\n\nexport default getStyles;\n", "(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"layoutBase\"] = factory();\n\telse\n\t\troot[\"layoutBase\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 28);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction LayoutConstants() {}\n\n/**\r\n * Layout Quality: 0:draft, 1:default, 2:proof\r\n */\nLayoutConstants.QUALITY = 1;\n\n/**\r\n * Default parameters\r\n */\nLayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED = false;\nLayoutConstants.DEFAULT_INCREMENTAL = false;\nLayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT = true;\nLayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT = false;\nLayoutConstants.DEFAULT_ANIMATION_PERIOD = 50;\nLayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = false;\n\n// -----------------------------------------------------------------------------\n// Section: General other constants\n// -----------------------------------------------------------------------------\n/*\r\n * Margins of a graph to be applied on bouding rectangle of its contents. We\r\n * assume margins on all four sides to be uniform.\r\n */\nLayoutConstants.DEFAULT_GRAPH_MARGIN = 15;\n\n/*\r\n * Whether to consider labels in node dimensions or not\r\n */\nLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = false;\n\n/*\r\n * Default dimension of a non-compound node.\r\n */\nLayoutConstants.SIMPLE_NODE_SIZE = 40;\n\n/*\r\n * Default dimension of a non-compound node.\r\n */\nLayoutConstants.SIMPLE_NODE_HALF_SIZE = LayoutConstants.SIMPLE_NODE_SIZE / 2;\n\n/*\r\n * Empty compound node size. When a compound node is empty, its both\r\n * dimensions should be of this value.\r\n */\nLayoutConstants.EMPTY_COMPOUND_NODE_SIZE = 40;\n\n/*\r\n * Minimum length that an edge should take during layout\r\n */\nLayoutConstants.MIN_EDGE_LENGTH = 1;\n\n/*\r\n * World boundaries that layout operates on\r\n */\nLayoutConstants.WORLD_BOUNDARY = 1000000;\n\n/*\r\n * World boundaries that random positioning can be performed with\r\n */\nLayoutConstants.INITIAL_WORLD_BOUNDARY = LayoutConstants.WORLD_BOUNDARY / 1000;\n\n/*\r\n * Coordinates of the world center\r\n */\nLayoutConstants.WORLD_CENTER_X = 1200;\nLayoutConstants.WORLD_CENTER_Y = 900;\n\nmodule.exports = LayoutConstants;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar IGeometry = __webpack_require__(8);\nvar IMath = __webpack_require__(9);\n\nfunction LEdge(source, target, vEdge) {\n LGraphObject.call(this, vEdge);\n\n this.isOverlapingSourceAndTarget = false;\n this.vGraphObject = vEdge;\n this.bendpoints = [];\n this.source = source;\n this.target = target;\n}\n\nLEdge.prototype = Object.create(LGraphObject.prototype);\n\nfor (var prop in LGraphObject) {\n LEdge[prop] = LGraphObject[prop];\n}\n\nLEdge.prototype.getSource = function () {\n return this.source;\n};\n\nLEdge.prototype.getTarget = function () {\n return this.target;\n};\n\nLEdge.prototype.isInterGraph = function () {\n return this.isInterGraph;\n};\n\nLEdge.prototype.getLength = function () {\n return this.length;\n};\n\nLEdge.prototype.isOverlapingSourceAndTarget = function () {\n return this.isOverlapingSourceAndTarget;\n};\n\nLEdge.prototype.getBendpoints = function () {\n return this.bendpoints;\n};\n\nLEdge.prototype.getLca = function () {\n return this.lca;\n};\n\nLEdge.prototype.getSourceInLca = function () {\n return this.sourceInLca;\n};\n\nLEdge.prototype.getTargetInLca = function () {\n return this.targetInLca;\n};\n\nLEdge.prototype.getOtherEnd = function (node) {\n if (this.source === node) {\n return this.target;\n } else if (this.target === node) {\n return this.source;\n } else {\n throw \"Node is not incident with this edge\";\n }\n};\n\nLEdge.prototype.getOtherEndInGraph = function (node, graph) {\n var otherEnd = this.getOtherEnd(node);\n var root = graph.getGraphManager().getRoot();\n\n while (true) {\n if (otherEnd.getOwner() == graph) {\n return otherEnd;\n }\n\n if (otherEnd.getOwner() == root) {\n break;\n }\n\n otherEnd = otherEnd.getOwner().getParent();\n }\n\n return null;\n};\n\nLEdge.prototype.updateLength = function () {\n var clipPointCoordinates = new Array(4);\n\n this.isOverlapingSourceAndTarget = IGeometry.getIntersection(this.target.getRect(), this.source.getRect(), clipPointCoordinates);\n\n if (!this.isOverlapingSourceAndTarget) {\n this.lengthX = clipPointCoordinates[0] - clipPointCoordinates[2];\n this.lengthY = clipPointCoordinates[1] - clipPointCoordinates[3];\n\n if (Math.abs(this.lengthX) < 1.0) {\n this.lengthX = IMath.sign(this.lengthX);\n }\n\n if (Math.abs(this.lengthY) < 1.0) {\n this.lengthY = IMath.sign(this.lengthY);\n }\n\n this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY);\n }\n};\n\nLEdge.prototype.updateLengthSimple = function () {\n this.lengthX = this.target.getCenterX() - this.source.getCenterX();\n this.lengthY = this.target.getCenterY() - this.source.getCenterY();\n\n if (Math.abs(this.lengthX) < 1.0) {\n this.lengthX = IMath.sign(this.lengthX);\n }\n\n if (Math.abs(this.lengthY) < 1.0) {\n this.lengthY = IMath.sign(this.lengthY);\n }\n\n this.length = Math.sqrt(this.lengthX * this.lengthX + this.lengthY * this.lengthY);\n};\n\nmodule.exports = LEdge;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction LGraphObject(vGraphObject) {\n this.vGraphObject = vGraphObject;\n}\n\nmodule.exports = LGraphObject;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar Integer = __webpack_require__(10);\nvar RectangleD = __webpack_require__(13);\nvar LayoutConstants = __webpack_require__(0);\nvar RandomSeed = __webpack_require__(16);\nvar PointD = __webpack_require__(5);\n\nfunction LNode(gm, loc, size, vNode) {\n //Alternative constructor 1 : LNode(LGraphManager gm, Point loc, Dimension size, Object vNode)\n if (size == null && vNode == null) {\n vNode = loc;\n }\n\n LGraphObject.call(this, vNode);\n\n //Alternative constructor 2 : LNode(Layout layout, Object vNode)\n if (gm.graphManager != null) gm = gm.graphManager;\n\n this.estimatedSize = Integer.MIN_VALUE;\n this.inclusionTreeDepth = Integer.MAX_VALUE;\n this.vGraphObject = vNode;\n this.edges = [];\n this.graphManager = gm;\n\n if (size != null && loc != null) this.rect = new RectangleD(loc.x, loc.y, size.width, size.height);else this.rect = new RectangleD();\n}\n\nLNode.prototype = Object.create(LGraphObject.prototype);\nfor (var prop in LGraphObject) {\n LNode[prop] = LGraphObject[prop];\n}\n\nLNode.prototype.getEdges = function () {\n return this.edges;\n};\n\nLNode.prototype.getChild = function () {\n return this.child;\n};\n\nLNode.prototype.getOwner = function () {\n // if (this.owner != null) {\n // if (!(this.owner == null || this.owner.getNodes().indexOf(this) > -1)) {\n // throw \"assert failed\";\n // }\n // }\n\n return this.owner;\n};\n\nLNode.prototype.getWidth = function () {\n return this.rect.width;\n};\n\nLNode.prototype.setWidth = function (width) {\n this.rect.width = width;\n};\n\nLNode.prototype.getHeight = function () {\n return this.rect.height;\n};\n\nLNode.prototype.setHeight = function (height) {\n this.rect.height = height;\n};\n\nLNode.prototype.getCenterX = function () {\n return this.rect.x + this.rect.width / 2;\n};\n\nLNode.prototype.getCenterY = function () {\n return this.rect.y + this.rect.height / 2;\n};\n\nLNode.prototype.getCenter = function () {\n return new PointD(this.rect.x + this.rect.width / 2, this.rect.y + this.rect.height / 2);\n};\n\nLNode.prototype.getLocation = function () {\n return new PointD(this.rect.x, this.rect.y);\n};\n\nLNode.prototype.getRect = function () {\n return this.rect;\n};\n\nLNode.prototype.getDiagonal = function () {\n return Math.sqrt(this.rect.width * this.rect.width + this.rect.height * this.rect.height);\n};\n\n/**\n * This method returns half the diagonal length of this node.\n */\nLNode.prototype.getHalfTheDiagonal = function () {\n return Math.sqrt(this.rect.height * this.rect.height + this.rect.width * this.rect.width) / 2;\n};\n\nLNode.prototype.setRect = function (upperLeft, dimension) {\n this.rect.x = upperLeft.x;\n this.rect.y = upperLeft.y;\n this.rect.width = dimension.width;\n this.rect.height = dimension.height;\n};\n\nLNode.prototype.setCenter = function (cx, cy) {\n this.rect.x = cx - this.rect.width / 2;\n this.rect.y = cy - this.rect.height / 2;\n};\n\nLNode.prototype.setLocation = function (x, y) {\n this.rect.x = x;\n this.rect.y = y;\n};\n\nLNode.prototype.moveBy = function (dx, dy) {\n this.rect.x += dx;\n this.rect.y += dy;\n};\n\nLNode.prototype.getEdgeListToNode = function (to) {\n var edgeList = [];\n var edge;\n var self = this;\n\n self.edges.forEach(function (edge) {\n\n if (edge.target == to) {\n if (edge.source != self) throw \"Incorrect edge source!\";\n\n edgeList.push(edge);\n }\n });\n\n return edgeList;\n};\n\nLNode.prototype.getEdgesBetween = function (other) {\n var edgeList = [];\n var edge;\n\n var self = this;\n self.edges.forEach(function (edge) {\n\n if (!(edge.source == self || edge.target == self)) throw \"Incorrect edge source and/or target\";\n\n if (edge.target == other || edge.source == other) {\n edgeList.push(edge);\n }\n });\n\n return edgeList;\n};\n\nLNode.prototype.getNeighborsList = function () {\n var neighbors = new Set();\n\n var self = this;\n self.edges.forEach(function (edge) {\n\n if (edge.source == self) {\n neighbors.add(edge.target);\n } else {\n if (edge.target != self) {\n throw \"Incorrect incidency!\";\n }\n\n neighbors.add(edge.source);\n }\n });\n\n return neighbors;\n};\n\nLNode.prototype.withChildren = function () {\n var withNeighborsList = new Set();\n var childNode;\n var children;\n\n withNeighborsList.add(this);\n\n if (this.child != null) {\n var nodes = this.child.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n childNode = nodes[i];\n children = childNode.withChildren();\n children.forEach(function (node) {\n withNeighborsList.add(node);\n });\n }\n }\n\n return withNeighborsList;\n};\n\nLNode.prototype.getNoOfChildren = function () {\n var noOfChildren = 0;\n var childNode;\n\n if (this.child == null) {\n noOfChildren = 1;\n } else {\n var nodes = this.child.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n childNode = nodes[i];\n\n noOfChildren += childNode.getNoOfChildren();\n }\n }\n\n if (noOfChildren == 0) {\n noOfChildren = 1;\n }\n return noOfChildren;\n};\n\nLNode.prototype.getEstimatedSize = function () {\n if (this.estimatedSize == Integer.MIN_VALUE) {\n throw \"assert failed\";\n }\n return this.estimatedSize;\n};\n\nLNode.prototype.calcEstimatedSize = function () {\n if (this.child == null) {\n return this.estimatedSize = (this.rect.width + this.rect.height) / 2;\n } else {\n this.estimatedSize = this.child.calcEstimatedSize();\n this.rect.width = this.estimatedSize;\n this.rect.height = this.estimatedSize;\n\n return this.estimatedSize;\n }\n};\n\nLNode.prototype.scatter = function () {\n var randomCenterX;\n var randomCenterY;\n\n var minX = -LayoutConstants.INITIAL_WORLD_BOUNDARY;\n var maxX = LayoutConstants.INITIAL_WORLD_BOUNDARY;\n randomCenterX = LayoutConstants.WORLD_CENTER_X + RandomSeed.nextDouble() * (maxX - minX) + minX;\n\n var minY = -LayoutConstants.INITIAL_WORLD_BOUNDARY;\n var maxY = LayoutConstants.INITIAL_WORLD_BOUNDARY;\n randomCenterY = LayoutConstants.WORLD_CENTER_Y + RandomSeed.nextDouble() * (maxY - minY) + minY;\n\n this.rect.x = randomCenterX;\n this.rect.y = randomCenterY;\n};\n\nLNode.prototype.updateBounds = function () {\n if (this.getChild() == null) {\n throw \"assert failed\";\n }\n if (this.getChild().getNodes().length != 0) {\n // wrap the children nodes by re-arranging the boundaries\n var childGraph = this.getChild();\n childGraph.updateBounds(true);\n\n this.rect.x = childGraph.getLeft();\n this.rect.y = childGraph.getTop();\n\n this.setWidth(childGraph.getRight() - childGraph.getLeft());\n this.setHeight(childGraph.getBottom() - childGraph.getTop());\n\n // Update compound bounds considering its label properties \n if (LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS) {\n\n var width = childGraph.getRight() - childGraph.getLeft();\n var height = childGraph.getBottom() - childGraph.getTop();\n\n if (this.labelWidth) {\n if (this.labelPosHorizontal == \"left\") {\n this.rect.x -= this.labelWidth;\n this.setWidth(width + this.labelWidth);\n } else if (this.labelPosHorizontal == \"center\" && this.labelWidth > width) {\n this.rect.x -= (this.labelWidth - width) / 2;\n this.setWidth(this.labelWidth);\n } else if (this.labelPosHorizontal == \"right\") {\n this.setWidth(width + this.labelWidth);\n }\n }\n\n if (this.labelHeight) {\n if (this.labelPosVertical == \"top\") {\n this.rect.y -= this.labelHeight;\n this.setHeight(height + this.labelHeight);\n } else if (this.labelPosVertical == \"center\" && this.labelHeight > height) {\n this.rect.y -= (this.labelHeight - height) / 2;\n this.setHeight(this.labelHeight);\n } else if (this.labelPosVertical == \"bottom\") {\n this.setHeight(height + this.labelHeight);\n }\n }\n }\n }\n};\n\nLNode.prototype.getInclusionTreeDepth = function () {\n if (this.inclusionTreeDepth == Integer.MAX_VALUE) {\n throw \"assert failed\";\n }\n return this.inclusionTreeDepth;\n};\n\nLNode.prototype.transform = function (trans) {\n var left = this.rect.x;\n\n if (left > LayoutConstants.WORLD_BOUNDARY) {\n left = LayoutConstants.WORLD_BOUNDARY;\n } else if (left < -LayoutConstants.WORLD_BOUNDARY) {\n left = -LayoutConstants.WORLD_BOUNDARY;\n }\n\n var top = this.rect.y;\n\n if (top > LayoutConstants.WORLD_BOUNDARY) {\n top = LayoutConstants.WORLD_BOUNDARY;\n } else if (top < -LayoutConstants.WORLD_BOUNDARY) {\n top = -LayoutConstants.WORLD_BOUNDARY;\n }\n\n var leftTop = new PointD(left, top);\n var vLeftTop = trans.inverseTransformPoint(leftTop);\n\n this.setLocation(vLeftTop.x, vLeftTop.y);\n};\n\nLNode.prototype.getLeft = function () {\n return this.rect.x;\n};\n\nLNode.prototype.getRight = function () {\n return this.rect.x + this.rect.width;\n};\n\nLNode.prototype.getTop = function () {\n return this.rect.y;\n};\n\nLNode.prototype.getBottom = function () {\n return this.rect.y + this.rect.height;\n};\n\nLNode.prototype.getParent = function () {\n if (this.owner == null) {\n return null;\n }\n\n return this.owner.getParent();\n};\n\nmodule.exports = LNode;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LayoutConstants = __webpack_require__(0);\n\nfunction FDLayoutConstants() {}\n\n//FDLayoutConstants inherits static props in LayoutConstants\nfor (var prop in LayoutConstants) {\n FDLayoutConstants[prop] = LayoutConstants[prop];\n}\n\nFDLayoutConstants.MAX_ITERATIONS = 2500;\n\nFDLayoutConstants.DEFAULT_EDGE_LENGTH = 50;\nFDLayoutConstants.DEFAULT_SPRING_STRENGTH = 0.45;\nFDLayoutConstants.DEFAULT_REPULSION_STRENGTH = 4500.0;\nFDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = 0.4;\nFDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = 1.0;\nFDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = 3.8;\nFDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = 1.5;\nFDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION = true;\nFDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION = true;\nFDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = 0.3;\nFDLayoutConstants.COOLING_ADAPTATION_FACTOR = 0.33;\nFDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT = 1000;\nFDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT = 5000;\nFDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL = 100.0;\nFDLayoutConstants.MAX_NODE_DISPLACEMENT = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL * 3;\nFDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10.0;\nFDLayoutConstants.CONVERGENCE_CHECK_PERIOD = 100;\nFDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = 0.1;\nFDLayoutConstants.MIN_EDGE_LENGTH = 1;\nFDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD = 10;\n\nmodule.exports = FDLayoutConstants;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction PointD(x, y) {\n if (x == null && y == null) {\n this.x = 0;\n this.y = 0;\n } else {\n this.x = x;\n this.y = y;\n }\n}\n\nPointD.prototype.getX = function () {\n return this.x;\n};\n\nPointD.prototype.getY = function () {\n return this.y;\n};\n\nPointD.prototype.setX = function (x) {\n this.x = x;\n};\n\nPointD.prototype.setY = function (y) {\n this.y = y;\n};\n\nPointD.prototype.getDifference = function (pt) {\n return new DimensionD(this.x - pt.x, this.y - pt.y);\n};\n\nPointD.prototype.getCopy = function () {\n return new PointD(this.x, this.y);\n};\n\nPointD.prototype.translate = function (dim) {\n this.x += dim.width;\n this.y += dim.height;\n return this;\n};\n\nmodule.exports = PointD;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraphObject = __webpack_require__(2);\nvar Integer = __webpack_require__(10);\nvar LayoutConstants = __webpack_require__(0);\nvar LGraphManager = __webpack_require__(7);\nvar LNode = __webpack_require__(3);\nvar LEdge = __webpack_require__(1);\nvar RectangleD = __webpack_require__(13);\nvar Point = __webpack_require__(12);\nvar LinkedList = __webpack_require__(11);\n\nfunction LGraph(parent, obj2, vGraph) {\n LGraphObject.call(this, vGraph);\n this.estimatedSize = Integer.MIN_VALUE;\n this.margin = LayoutConstants.DEFAULT_GRAPH_MARGIN;\n this.edges = [];\n this.nodes = [];\n this.isConnected = false;\n this.parent = parent;\n\n if (obj2 != null && obj2 instanceof LGraphManager) {\n this.graphManager = obj2;\n } else if (obj2 != null && obj2 instanceof Layout) {\n this.graphManager = obj2.graphManager;\n }\n}\n\nLGraph.prototype = Object.create(LGraphObject.prototype);\nfor (var prop in LGraphObject) {\n LGraph[prop] = LGraphObject[prop];\n}\n\nLGraph.prototype.getNodes = function () {\n return this.nodes;\n};\n\nLGraph.prototype.getEdges = function () {\n return this.edges;\n};\n\nLGraph.prototype.getGraphManager = function () {\n return this.graphManager;\n};\n\nLGraph.prototype.getParent = function () {\n return this.parent;\n};\n\nLGraph.prototype.getLeft = function () {\n return this.left;\n};\n\nLGraph.prototype.getRight = function () {\n return this.right;\n};\n\nLGraph.prototype.getTop = function () {\n return this.top;\n};\n\nLGraph.prototype.getBottom = function () {\n return this.bottom;\n};\n\nLGraph.prototype.isConnected = function () {\n return this.isConnected;\n};\n\nLGraph.prototype.add = function (obj1, sourceNode, targetNode) {\n if (sourceNode == null && targetNode == null) {\n var newNode = obj1;\n if (this.graphManager == null) {\n throw \"Graph has no graph mgr!\";\n }\n if (this.getNodes().indexOf(newNode) > -1) {\n throw \"Node already in graph!\";\n }\n newNode.owner = this;\n this.getNodes().push(newNode);\n\n return newNode;\n } else {\n var newEdge = obj1;\n if (!(this.getNodes().indexOf(sourceNode) > -1 && this.getNodes().indexOf(targetNode) > -1)) {\n throw \"Source or target not in graph!\";\n }\n\n if (!(sourceNode.owner == targetNode.owner && sourceNode.owner == this)) {\n throw \"Both owners must be this graph!\";\n }\n\n if (sourceNode.owner != targetNode.owner) {\n return null;\n }\n\n // set source and target\n newEdge.source = sourceNode;\n newEdge.target = targetNode;\n\n // set as intra-graph edge\n newEdge.isInterGraph = false;\n\n // add to graph edge list\n this.getEdges().push(newEdge);\n\n // add to incidency lists\n sourceNode.edges.push(newEdge);\n\n if (targetNode != sourceNode) {\n targetNode.edges.push(newEdge);\n }\n\n return newEdge;\n }\n};\n\nLGraph.prototype.remove = function (obj) {\n var node = obj;\n if (obj instanceof LNode) {\n if (node == null) {\n throw \"Node is null!\";\n }\n if (!(node.owner != null && node.owner == this)) {\n throw \"Owner graph is invalid!\";\n }\n if (this.graphManager == null) {\n throw \"Owner graph manager is invalid!\";\n }\n // remove incident edges first (make a copy to do it safely)\n var edgesToBeRemoved = node.edges.slice();\n var edge;\n var s = edgesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n edge = edgesToBeRemoved[i];\n\n if (edge.isInterGraph) {\n this.graphManager.remove(edge);\n } else {\n edge.source.owner.remove(edge);\n }\n }\n\n // now the node itself\n var index = this.nodes.indexOf(node);\n if (index == -1) {\n throw \"Node not in owner node list!\";\n }\n\n this.nodes.splice(index, 1);\n } else if (obj instanceof LEdge) {\n var edge = obj;\n if (edge == null) {\n throw \"Edge is null!\";\n }\n if (!(edge.source != null && edge.target != null)) {\n throw \"Source and/or target is null!\";\n }\n if (!(edge.source.owner != null && edge.target.owner != null && edge.source.owner == this && edge.target.owner == this)) {\n throw \"Source and/or target owner is invalid!\";\n }\n\n var sourceIndex = edge.source.edges.indexOf(edge);\n var targetIndex = edge.target.edges.indexOf(edge);\n if (!(sourceIndex > -1 && targetIndex > -1)) {\n throw \"Source and/or target doesn't know this edge!\";\n }\n\n edge.source.edges.splice(sourceIndex, 1);\n\n if (edge.target != edge.source) {\n edge.target.edges.splice(targetIndex, 1);\n }\n\n var index = edge.source.owner.getEdges().indexOf(edge);\n if (index == -1) {\n throw \"Not in owner's edge list!\";\n }\n\n edge.source.owner.getEdges().splice(index, 1);\n }\n};\n\nLGraph.prototype.updateLeftTop = function () {\n var top = Integer.MAX_VALUE;\n var left = Integer.MAX_VALUE;\n var nodeTop;\n var nodeLeft;\n var margin;\n\n var nodes = this.getNodes();\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n nodeTop = lNode.getTop();\n nodeLeft = lNode.getLeft();\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n }\n\n // Do we have any nodes in this graph?\n if (top == Integer.MAX_VALUE) {\n return null;\n }\n\n if (nodes[0].getParent().paddingLeft != undefined) {\n margin = nodes[0].getParent().paddingLeft;\n } else {\n margin = this.margin;\n }\n\n this.left = left - margin;\n this.top = top - margin;\n\n // Apply the margins and return the result\n return new Point(this.left, this.top);\n};\n\nLGraph.prototype.updateBounds = function (recursive) {\n // calculate bounds\n var left = Integer.MAX_VALUE;\n var right = -Integer.MAX_VALUE;\n var top = Integer.MAX_VALUE;\n var bottom = -Integer.MAX_VALUE;\n var nodeLeft;\n var nodeRight;\n var nodeTop;\n var nodeBottom;\n var margin;\n\n var nodes = this.nodes;\n var s = nodes.length;\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n\n if (recursive && lNode.child != null) {\n lNode.updateBounds();\n }\n nodeLeft = lNode.getLeft();\n nodeRight = lNode.getRight();\n nodeTop = lNode.getTop();\n nodeBottom = lNode.getBottom();\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n\n if (right < nodeRight) {\n right = nodeRight;\n }\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (bottom < nodeBottom) {\n bottom = nodeBottom;\n }\n }\n\n var boundingRect = new RectangleD(left, top, right - left, bottom - top);\n if (left == Integer.MAX_VALUE) {\n this.left = this.parent.getLeft();\n this.right = this.parent.getRight();\n this.top = this.parent.getTop();\n this.bottom = this.parent.getBottom();\n }\n\n if (nodes[0].getParent().paddingLeft != undefined) {\n margin = nodes[0].getParent().paddingLeft;\n } else {\n margin = this.margin;\n }\n\n this.left = boundingRect.x - margin;\n this.right = boundingRect.x + boundingRect.width + margin;\n this.top = boundingRect.y - margin;\n this.bottom = boundingRect.y + boundingRect.height + margin;\n};\n\nLGraph.calculateBounds = function (nodes) {\n var left = Integer.MAX_VALUE;\n var right = -Integer.MAX_VALUE;\n var top = Integer.MAX_VALUE;\n var bottom = -Integer.MAX_VALUE;\n var nodeLeft;\n var nodeRight;\n var nodeTop;\n var nodeBottom;\n\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n nodeLeft = lNode.getLeft();\n nodeRight = lNode.getRight();\n nodeTop = lNode.getTop();\n nodeBottom = lNode.getBottom();\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n\n if (right < nodeRight) {\n right = nodeRight;\n }\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (bottom < nodeBottom) {\n bottom = nodeBottom;\n }\n }\n\n var boundingRect = new RectangleD(left, top, right - left, bottom - top);\n\n return boundingRect;\n};\n\nLGraph.prototype.getInclusionTreeDepth = function () {\n if (this == this.graphManager.getRoot()) {\n return 1;\n } else {\n return this.parent.getInclusionTreeDepth();\n }\n};\n\nLGraph.prototype.getEstimatedSize = function () {\n if (this.estimatedSize == Integer.MIN_VALUE) {\n throw \"assert failed\";\n }\n return this.estimatedSize;\n};\n\nLGraph.prototype.calcEstimatedSize = function () {\n var size = 0;\n var nodes = this.nodes;\n var s = nodes.length;\n\n for (var i = 0; i < s; i++) {\n var lNode = nodes[i];\n size += lNode.calcEstimatedSize();\n }\n\n if (size == 0) {\n this.estimatedSize = LayoutConstants.EMPTY_COMPOUND_NODE_SIZE;\n } else {\n this.estimatedSize = size / Math.sqrt(this.nodes.length);\n }\n\n return this.estimatedSize;\n};\n\nLGraph.prototype.updateConnected = function () {\n var self = this;\n if (this.nodes.length == 0) {\n this.isConnected = true;\n return;\n }\n\n var queue = new LinkedList();\n var visited = new Set();\n var currentNode = this.nodes[0];\n var neighborEdges;\n var currentNeighbor;\n var childrenOfNode = currentNode.withChildren();\n childrenOfNode.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n });\n\n while (queue.length !== 0) {\n currentNode = queue.shift();\n\n // Traverse all neighbors of this node\n neighborEdges = currentNode.getEdges();\n var size = neighborEdges.length;\n for (var i = 0; i < size; i++) {\n var neighborEdge = neighborEdges[i];\n currentNeighbor = neighborEdge.getOtherEndInGraph(currentNode, this);\n\n // Add unvisited neighbors to the list to visit\n if (currentNeighbor != null && !visited.has(currentNeighbor)) {\n var childrenOfNeighbor = currentNeighbor.withChildren();\n\n childrenOfNeighbor.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n });\n }\n }\n }\n\n this.isConnected = false;\n\n if (visited.size >= this.nodes.length) {\n var noOfVisitedInThisGraph = 0;\n\n visited.forEach(function (visitedNode) {\n if (visitedNode.owner == self) {\n noOfVisitedInThisGraph++;\n }\n });\n\n if (noOfVisitedInThisGraph == this.nodes.length) {\n this.isConnected = true;\n }\n }\n};\n\nmodule.exports = LGraph;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LGraph;\nvar LEdge = __webpack_require__(1);\n\nfunction LGraphManager(layout) {\n LGraph = __webpack_require__(6); // It may be better to initilize this out of this function but it gives an error (Right-hand side of 'instanceof' is not callable) now.\n this.layout = layout;\n\n this.graphs = [];\n this.edges = [];\n}\n\nLGraphManager.prototype.addRoot = function () {\n var ngraph = this.layout.newGraph();\n var nnode = this.layout.newNode(null);\n var root = this.add(ngraph, nnode);\n this.setRootGraph(root);\n return this.rootGraph;\n};\n\nLGraphManager.prototype.add = function (newGraph, parentNode, newEdge, sourceNode, targetNode) {\n //there are just 2 parameters are passed then it adds an LGraph else it adds an LEdge\n if (newEdge == null && sourceNode == null && targetNode == null) {\n if (newGraph == null) {\n throw \"Graph is null!\";\n }\n if (parentNode == null) {\n throw \"Parent node is null!\";\n }\n if (this.graphs.indexOf(newGraph) > -1) {\n throw \"Graph already in this graph mgr!\";\n }\n\n this.graphs.push(newGraph);\n\n if (newGraph.parent != null) {\n throw \"Already has a parent!\";\n }\n if (parentNode.child != null) {\n throw \"Already has a child!\";\n }\n\n newGraph.parent = parentNode;\n parentNode.child = newGraph;\n\n return newGraph;\n } else {\n //change the order of the parameters\n targetNode = newEdge;\n sourceNode = parentNode;\n newEdge = newGraph;\n var sourceGraph = sourceNode.getOwner();\n var targetGraph = targetNode.getOwner();\n\n if (!(sourceGraph != null && sourceGraph.getGraphManager() == this)) {\n throw \"Source not in this graph mgr!\";\n }\n if (!(targetGraph != null && targetGraph.getGraphManager() == this)) {\n throw \"Target not in this graph mgr!\";\n }\n\n if (sourceGraph == targetGraph) {\n newEdge.isInterGraph = false;\n return sourceGraph.add(newEdge, sourceNode, targetNode);\n } else {\n newEdge.isInterGraph = true;\n\n // set source and target\n newEdge.source = sourceNode;\n newEdge.target = targetNode;\n\n // add edge to inter-graph edge list\n if (this.edges.indexOf(newEdge) > -1) {\n throw \"Edge already in inter-graph edge list!\";\n }\n\n this.edges.push(newEdge);\n\n // add edge to source and target incidency lists\n if (!(newEdge.source != null && newEdge.target != null)) {\n throw \"Edge source and/or target is null!\";\n }\n\n if (!(newEdge.source.edges.indexOf(newEdge) == -1 && newEdge.target.edges.indexOf(newEdge) == -1)) {\n throw \"Edge already in source and/or target incidency list!\";\n }\n\n newEdge.source.edges.push(newEdge);\n newEdge.target.edges.push(newEdge);\n\n return newEdge;\n }\n }\n};\n\nLGraphManager.prototype.remove = function (lObj) {\n if (lObj instanceof LGraph) {\n var graph = lObj;\n if (graph.getGraphManager() != this) {\n throw \"Graph not in this graph mgr\";\n }\n if (!(graph == this.rootGraph || graph.parent != null && graph.parent.graphManager == this)) {\n throw \"Invalid parent node!\";\n }\n\n // first the edges (make a copy to do it safely)\n var edgesToBeRemoved = [];\n\n edgesToBeRemoved = edgesToBeRemoved.concat(graph.getEdges());\n\n var edge;\n var s = edgesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n edge = edgesToBeRemoved[i];\n graph.remove(edge);\n }\n\n // then the nodes (make a copy to do it safely)\n var nodesToBeRemoved = [];\n\n nodesToBeRemoved = nodesToBeRemoved.concat(graph.getNodes());\n\n var node;\n s = nodesToBeRemoved.length;\n for (var i = 0; i < s; i++) {\n node = nodesToBeRemoved[i];\n graph.remove(node);\n }\n\n // check if graph is the root\n if (graph == this.rootGraph) {\n this.setRootGraph(null);\n }\n\n // now remove the graph itself\n var index = this.graphs.indexOf(graph);\n this.graphs.splice(index, 1);\n\n // also reset the parent of the graph\n graph.parent = null;\n } else if (lObj instanceof LEdge) {\n edge = lObj;\n if (edge == null) {\n throw \"Edge is null!\";\n }\n if (!edge.isInterGraph) {\n throw \"Not an inter-graph edge!\";\n }\n if (!(edge.source != null && edge.target != null)) {\n throw \"Source and/or target is null!\";\n }\n\n // remove edge from source and target nodes' incidency lists\n\n if (!(edge.source.edges.indexOf(edge) != -1 && edge.target.edges.indexOf(edge) != -1)) {\n throw \"Source and/or target doesn't know this edge!\";\n }\n\n var index = edge.source.edges.indexOf(edge);\n edge.source.edges.splice(index, 1);\n index = edge.target.edges.indexOf(edge);\n edge.target.edges.splice(index, 1);\n\n // remove edge from owner graph manager's inter-graph edge list\n\n if (!(edge.source.owner != null && edge.source.owner.getGraphManager() != null)) {\n throw \"Edge owner graph or owner graph manager is null!\";\n }\n if (edge.source.owner.getGraphManager().edges.indexOf(edge) == -1) {\n throw \"Not in owner graph manager's edge list!\";\n }\n\n var index = edge.source.owner.getGraphManager().edges.indexOf(edge);\n edge.source.owner.getGraphManager().edges.splice(index, 1);\n }\n};\n\nLGraphManager.prototype.updateBounds = function () {\n this.rootGraph.updateBounds(true);\n};\n\nLGraphManager.prototype.getGraphs = function () {\n return this.graphs;\n};\n\nLGraphManager.prototype.getAllNodes = function () {\n if (this.allNodes == null) {\n var nodeList = [];\n var graphs = this.getGraphs();\n var s = graphs.length;\n for (var i = 0; i < s; i++) {\n nodeList = nodeList.concat(graphs[i].getNodes());\n }\n this.allNodes = nodeList;\n }\n return this.allNodes;\n};\n\nLGraphManager.prototype.resetAllNodes = function () {\n this.allNodes = null;\n};\n\nLGraphManager.prototype.resetAllEdges = function () {\n this.allEdges = null;\n};\n\nLGraphManager.prototype.resetAllNodesToApplyGravitation = function () {\n this.allNodesToApplyGravitation = null;\n};\n\nLGraphManager.prototype.getAllEdges = function () {\n if (this.allEdges == null) {\n var edgeList = [];\n var graphs = this.getGraphs();\n var s = graphs.length;\n for (var i = 0; i < graphs.length; i++) {\n edgeList = edgeList.concat(graphs[i].getEdges());\n }\n\n edgeList = edgeList.concat(this.edges);\n\n this.allEdges = edgeList;\n }\n return this.allEdges;\n};\n\nLGraphManager.prototype.getAllNodesToApplyGravitation = function () {\n return this.allNodesToApplyGravitation;\n};\n\nLGraphManager.prototype.setAllNodesToApplyGravitation = function (nodeList) {\n if (this.allNodesToApplyGravitation != null) {\n throw \"assert failed\";\n }\n\n this.allNodesToApplyGravitation = nodeList;\n};\n\nLGraphManager.prototype.getRoot = function () {\n return this.rootGraph;\n};\n\nLGraphManager.prototype.setRootGraph = function (graph) {\n if (graph.getGraphManager() != this) {\n throw \"Root not in this graph mgr!\";\n }\n\n this.rootGraph = graph;\n // root graph must have a root node associated with it for convenience\n if (graph.parent == null) {\n graph.parent = this.layout.newNode(\"Root node\");\n }\n};\n\nLGraphManager.prototype.getLayout = function () {\n return this.layout;\n};\n\nLGraphManager.prototype.isOneAncestorOfOther = function (firstNode, secondNode) {\n if (!(firstNode != null && secondNode != null)) {\n throw \"assert failed\";\n }\n\n if (firstNode == secondNode) {\n return true;\n }\n // Is second node an ancestor of the first one?\n var ownerGraph = firstNode.getOwner();\n var parentNode;\n\n do {\n parentNode = ownerGraph.getParent();\n\n if (parentNode == null) {\n break;\n }\n\n if (parentNode == secondNode) {\n return true;\n }\n\n ownerGraph = parentNode.getOwner();\n if (ownerGraph == null) {\n break;\n }\n } while (true);\n // Is first node an ancestor of the second one?\n ownerGraph = secondNode.getOwner();\n\n do {\n parentNode = ownerGraph.getParent();\n\n if (parentNode == null) {\n break;\n }\n\n if (parentNode == firstNode) {\n return true;\n }\n\n ownerGraph = parentNode.getOwner();\n if (ownerGraph == null) {\n break;\n }\n } while (true);\n\n return false;\n};\n\nLGraphManager.prototype.calcLowestCommonAncestors = function () {\n var edge;\n var sourceNode;\n var targetNode;\n var sourceAncestorGraph;\n var targetAncestorGraph;\n\n var edges = this.getAllEdges();\n var s = edges.length;\n for (var i = 0; i < s; i++) {\n edge = edges[i];\n\n sourceNode = edge.source;\n targetNode = edge.target;\n edge.lca = null;\n edge.sourceInLca = sourceNode;\n edge.targetInLca = targetNode;\n\n if (sourceNode == targetNode) {\n edge.lca = sourceNode.getOwner();\n continue;\n }\n\n sourceAncestorGraph = sourceNode.getOwner();\n\n while (edge.lca == null) {\n edge.targetInLca = targetNode;\n targetAncestorGraph = targetNode.getOwner();\n\n while (edge.lca == null) {\n if (targetAncestorGraph == sourceAncestorGraph) {\n edge.lca = targetAncestorGraph;\n break;\n }\n\n if (targetAncestorGraph == this.rootGraph) {\n break;\n }\n\n if (edge.lca != null) {\n throw \"assert failed\";\n }\n edge.targetInLca = targetAncestorGraph.getParent();\n targetAncestorGraph = edge.targetInLca.getOwner();\n }\n\n if (sourceAncestorGraph == this.rootGraph) {\n break;\n }\n\n if (edge.lca == null) {\n edge.sourceInLca = sourceAncestorGraph.getParent();\n sourceAncestorGraph = edge.sourceInLca.getOwner();\n }\n }\n\n if (edge.lca == null) {\n throw \"assert failed\";\n }\n }\n};\n\nLGraphManager.prototype.calcLowestCommonAncestor = function (firstNode, secondNode) {\n if (firstNode == secondNode) {\n return firstNode.getOwner();\n }\n var firstOwnerGraph = firstNode.getOwner();\n\n do {\n if (firstOwnerGraph == null) {\n break;\n }\n var secondOwnerGraph = secondNode.getOwner();\n\n do {\n if (secondOwnerGraph == null) {\n break;\n }\n\n if (secondOwnerGraph == firstOwnerGraph) {\n return secondOwnerGraph;\n }\n secondOwnerGraph = secondOwnerGraph.getParent().getOwner();\n } while (true);\n\n firstOwnerGraph = firstOwnerGraph.getParent().getOwner();\n } while (true);\n\n return firstOwnerGraph;\n};\n\nLGraphManager.prototype.calcInclusionTreeDepths = function (graph, depth) {\n if (graph == null && depth == null) {\n graph = this.rootGraph;\n depth = 1;\n }\n var node;\n\n var nodes = graph.getNodes();\n var s = nodes.length;\n for (var i = 0; i < s; i++) {\n node = nodes[i];\n node.inclusionTreeDepth = depth;\n\n if (node.child != null) {\n this.calcInclusionTreeDepths(node.child, depth + 1);\n }\n }\n};\n\nLGraphManager.prototype.includesInvalidEdge = function () {\n var edge;\n var edgesToRemove = [];\n\n var s = this.edges.length;\n for (var i = 0; i < s; i++) {\n edge = this.edges[i];\n\n if (this.isOneAncestorOfOther(edge.source, edge.target)) {\n edgesToRemove.push(edge);\n }\n }\n\n // Remove invalid edges from graph manager\n for (var i = 0; i < edgesToRemove.length; i++) {\n this.remove(edgesToRemove[i]);\n }\n\n // Invalid edges are cleared, so return false\n return false;\n};\n\nmodule.exports = LGraphManager;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * This class maintains a list of static geometry related utility methods.\n *\n *\n * Copyright: i-Vis Research Group, Bilkent University, 2007 - present\n */\n\nvar Point = __webpack_require__(12);\n\nfunction IGeometry() {}\n\n/**\n * This method calculates *half* the amount in x and y directions of the two\n * input rectangles needed to separate them keeping their respective\n * positioning, and returns the result in the input array. An input\n * separation buffer added to the amount in both directions. We assume that\n * the two rectangles do intersect.\n */\nIGeometry.calcSeparationAmount = function (rectA, rectB, overlapAmount, separationBuffer) {\n if (!rectA.intersects(rectB)) {\n throw \"assert failed\";\n }\n\n var directions = new Array(2);\n\n this.decideDirectionsForOverlappingNodes(rectA, rectB, directions);\n\n overlapAmount[0] = Math.min(rectA.getRight(), rectB.getRight()) - Math.max(rectA.x, rectB.x);\n overlapAmount[1] = Math.min(rectA.getBottom(), rectB.getBottom()) - Math.max(rectA.y, rectB.y);\n\n // update the overlapping amounts for the following cases:\n if (rectA.getX() <= rectB.getX() && rectA.getRight() >= rectB.getRight()) {\n /* Case x.1:\n *\n * rectA\n * \t| |\n * \t| _________ |\n * \t| | | |\n * \t|________|_______|______|\n * \t\t\t | |\n * | |\n * rectB\n */\n overlapAmount[0] += Math.min(rectB.getX() - rectA.getX(), rectA.getRight() - rectB.getRight());\n } else if (rectB.getX() <= rectA.getX() && rectB.getRight() >= rectA.getRight()) {\n /* Case x.2:\n *\n * rectB\n * \t| |\n * \t| _________ |\n * \t| | | |\n * \t|________|_______|______|\n * \t\t\t | |\n * | |\n * rectA\n */\n overlapAmount[0] += Math.min(rectA.getX() - rectB.getX(), rectB.getRight() - rectA.getRight());\n }\n if (rectA.getY() <= rectB.getY() && rectA.getBottom() >= rectB.getBottom()) {\n /* Case y.1:\n * ________ rectA\n * |\n * |\n * ______|____ rectB\n * | |\n * | |\n * ______|____|\n * |\n * |\n * |________\n *\n */\n overlapAmount[1] += Math.min(rectB.getY() - rectA.getY(), rectA.getBottom() - rectB.getBottom());\n } else if (rectB.getY() <= rectA.getY() && rectB.getBottom() >= rectA.getBottom()) {\n /* Case y.2:\n * ________ rectB\n * |\n * |\n * ______|____ rectA\n * | |\n * | |\n * ______|____|\n * |\n * |\n * |________\n *\n */\n overlapAmount[1] += Math.min(rectA.getY() - rectB.getY(), rectB.getBottom() - rectA.getBottom());\n }\n\n // find slope of the line passes two centers\n var slope = Math.abs((rectB.getCenterY() - rectA.getCenterY()) / (rectB.getCenterX() - rectA.getCenterX()));\n // if centers are overlapped\n if (rectB.getCenterY() === rectA.getCenterY() && rectB.getCenterX() === rectA.getCenterX()) {\n // assume the slope is 1 (45 degree)\n slope = 1.0;\n }\n\n var moveByY = slope * overlapAmount[0];\n var moveByX = overlapAmount[1] / slope;\n if (overlapAmount[0] < moveByX) {\n moveByX = overlapAmount[0];\n } else {\n moveByY = overlapAmount[1];\n }\n // return half the amount so that if each rectangle is moved by these\n // amounts in opposite directions, overlap will be resolved\n overlapAmount[0] = -1 * directions[0] * (moveByX / 2 + separationBuffer);\n overlapAmount[1] = -1 * directions[1] * (moveByY / 2 + separationBuffer);\n};\n\n/**\n * This method decides the separation direction of overlapping nodes\n *\n * if directions[0] = -1, then rectA goes left\n * if directions[0] = 1, then rectA goes right\n * if directions[1] = -1, then rectA goes up\n * if directions[1] = 1, then rectA goes down\n */\nIGeometry.decideDirectionsForOverlappingNodes = function (rectA, rectB, directions) {\n if (rectA.getCenterX() < rectB.getCenterX()) {\n directions[0] = -1;\n } else {\n directions[0] = 1;\n }\n\n if (rectA.getCenterY() < rectB.getCenterY()) {\n directions[1] = -1;\n } else {\n directions[1] = 1;\n }\n};\n\n/**\n * This method calculates the intersection (clipping) points of the two\n * input rectangles with line segment defined by the centers of these two\n * rectangles. The clipping points are saved in the input double array and\n * whether or not the two rectangles overlap is returned.\n */\nIGeometry.getIntersection2 = function (rectA, rectB, result) {\n //result[0-1] will contain clipPoint of rectA, result[2-3] will contain clipPoint of rectB\n var p1x = rectA.getCenterX();\n var p1y = rectA.getCenterY();\n var p2x = rectB.getCenterX();\n var p2y = rectB.getCenterY();\n\n //if two rectangles intersect, then clipping points are centers\n if (rectA.intersects(rectB)) {\n result[0] = p1x;\n result[1] = p1y;\n result[2] = p2x;\n result[3] = p2y;\n return true;\n }\n //variables for rectA\n var topLeftAx = rectA.getX();\n var topLeftAy = rectA.getY();\n var topRightAx = rectA.getRight();\n var bottomLeftAx = rectA.getX();\n var bottomLeftAy = rectA.getBottom();\n var bottomRightAx = rectA.getRight();\n var halfWidthA = rectA.getWidthHalf();\n var halfHeightA = rectA.getHeightHalf();\n //variables for rectB\n var topLeftBx = rectB.getX();\n var topLeftBy = rectB.getY();\n var topRightBx = rectB.getRight();\n var bottomLeftBx = rectB.getX();\n var bottomLeftBy = rectB.getBottom();\n var bottomRightBx = rectB.getRight();\n var halfWidthB = rectB.getWidthHalf();\n var halfHeightB = rectB.getHeightHalf();\n\n //flag whether clipping points are found\n var clipPointAFound = false;\n var clipPointBFound = false;\n\n // line is vertical\n if (p1x === p2x) {\n if (p1y > p2y) {\n result[0] = p1x;\n result[1] = topLeftAy;\n result[2] = p2x;\n result[3] = bottomLeftBy;\n return false;\n } else if (p1y < p2y) {\n result[0] = p1x;\n result[1] = bottomLeftAy;\n result[2] = p2x;\n result[3] = topLeftBy;\n return false;\n } else {\n //not line, return null;\n }\n }\n // line is horizontal\n else if (p1y === p2y) {\n if (p1x > p2x) {\n result[0] = topLeftAx;\n result[1] = p1y;\n result[2] = topRightBx;\n result[3] = p2y;\n return false;\n } else if (p1x < p2x) {\n result[0] = topRightAx;\n result[1] = p1y;\n result[2] = topLeftBx;\n result[3] = p2y;\n return false;\n } else {\n //not valid line, return null;\n }\n } else {\n //slopes of rectA's and rectB's diagonals\n var slopeA = rectA.height / rectA.width;\n var slopeB = rectB.height / rectB.width;\n\n //slope of line between center of rectA and center of rectB\n var slopePrime = (p2y - p1y) / (p2x - p1x);\n var cardinalDirectionA = void 0;\n var cardinalDirectionB = void 0;\n var tempPointAx = void 0;\n var tempPointAy = void 0;\n var tempPointBx = void 0;\n var tempPointBy = void 0;\n\n //determine whether clipping point is the corner of nodeA\n if (-slopeA === slopePrime) {\n if (p1x > p2x) {\n result[0] = bottomLeftAx;\n result[1] = bottomLeftAy;\n clipPointAFound = true;\n } else {\n result[0] = topRightAx;\n result[1] = topLeftAy;\n clipPointAFound = true;\n }\n } else if (slopeA === slopePrime) {\n if (p1x > p2x) {\n result[0] = topLeftAx;\n result[1] = topLeftAy;\n clipPointAFound = true;\n } else {\n result[0] = bottomRightAx;\n result[1] = bottomLeftAy;\n clipPointAFound = true;\n }\n }\n\n //determine whether clipping point is the corner of nodeB\n if (-slopeB === slopePrime) {\n if (p2x > p1x) {\n result[2] = bottomLeftBx;\n result[3] = bottomLeftBy;\n clipPointBFound = true;\n } else {\n result[2] = topRightBx;\n result[3] = topLeftBy;\n clipPointBFound = true;\n }\n } else if (slopeB === slopePrime) {\n if (p2x > p1x) {\n result[2] = topLeftBx;\n result[3] = topLeftBy;\n clipPointBFound = true;\n } else {\n result[2] = bottomRightBx;\n result[3] = bottomLeftBy;\n clipPointBFound = true;\n }\n }\n\n //if both clipping points are corners\n if (clipPointAFound && clipPointBFound) {\n return false;\n }\n\n //determine Cardinal Direction of rectangles\n if (p1x > p2x) {\n if (p1y > p2y) {\n cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 4);\n cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 2);\n } else {\n cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 3);\n cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 1);\n }\n } else {\n if (p1y > p2y) {\n cardinalDirectionA = this.getCardinalDirection(-slopeA, slopePrime, 1);\n cardinalDirectionB = this.getCardinalDirection(-slopeB, slopePrime, 3);\n } else {\n cardinalDirectionA = this.getCardinalDirection(slopeA, slopePrime, 2);\n cardinalDirectionB = this.getCardinalDirection(slopeB, slopePrime, 4);\n }\n }\n //calculate clipping Point if it is not found before\n if (!clipPointAFound) {\n switch (cardinalDirectionA) {\n case 1:\n tempPointAy = topLeftAy;\n tempPointAx = p1x + -halfHeightA / slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 2:\n tempPointAx = bottomRightAx;\n tempPointAy = p1y + halfWidthA * slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 3:\n tempPointAy = bottomLeftAy;\n tempPointAx = p1x + halfHeightA / slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n case 4:\n tempPointAx = bottomLeftAx;\n tempPointAy = p1y + -halfWidthA * slopePrime;\n result[0] = tempPointAx;\n result[1] = tempPointAy;\n break;\n }\n }\n if (!clipPointBFound) {\n switch (cardinalDirectionB) {\n case 1:\n tempPointBy = topLeftBy;\n tempPointBx = p2x + -halfHeightB / slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 2:\n tempPointBx = bottomRightBx;\n tempPointBy = p2y + halfWidthB * slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 3:\n tempPointBy = bottomLeftBy;\n tempPointBx = p2x + halfHeightB / slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n case 4:\n tempPointBx = bottomLeftBx;\n tempPointBy = p2y + -halfWidthB * slopePrime;\n result[2] = tempPointBx;\n result[3] = tempPointBy;\n break;\n }\n }\n }\n return false;\n};\n\n/**\n * This method returns in which cardinal direction does input point stays\n * 1: North\n * 2: East\n * 3: South\n * 4: West\n */\nIGeometry.getCardinalDirection = function (slope, slopePrime, line) {\n if (slope > slopePrime) {\n return line;\n } else {\n return 1 + line % 4;\n }\n};\n\n/**\n * This method calculates the intersection of the two lines defined by\n * point pairs (s1,s2) and (f1,f2).\n */\nIGeometry.getIntersection = function (s1, s2, f1, f2) {\n if (f2 == null) {\n return this.getIntersection2(s1, s2, f1);\n }\n\n var x1 = s1.x;\n var y1 = s1.y;\n var x2 = s2.x;\n var y2 = s2.y;\n var x3 = f1.x;\n var y3 = f1.y;\n var x4 = f2.x;\n var y4 = f2.y;\n var x = void 0,\n y = void 0; // intersection point\n var a1 = void 0,\n a2 = void 0,\n b1 = void 0,\n b2 = void 0,\n c1 = void 0,\n c2 = void 0; // coefficients of line eqns.\n var denom = void 0;\n\n a1 = y2 - y1;\n b1 = x1 - x2;\n c1 = x2 * y1 - x1 * y2; // { a1*x + b1*y + c1 = 0 is line 1 }\n\n a2 = y4 - y3;\n b2 = x3 - x4;\n c2 = x4 * y3 - x3 * y4; // { a2*x + b2*y + c2 = 0 is line 2 }\n\n denom = a1 * b2 - a2 * b1;\n\n if (denom === 0) {\n return null;\n }\n\n x = (b1 * c2 - b2 * c1) / denom;\n y = (a2 * c1 - a1 * c2) / denom;\n\n return new Point(x, y);\n};\n\n/**\n * This method finds and returns the angle of the vector from the + x-axis\n * in clockwise direction (compatible w/ Java coordinate system!).\n */\nIGeometry.angleOfVector = function (Cx, Cy, Nx, Ny) {\n var C_angle = void 0;\n\n if (Cx !== Nx) {\n C_angle = Math.atan((Ny - Cy) / (Nx - Cx));\n\n if (Nx < Cx) {\n C_angle += Math.PI;\n } else if (Ny < Cy) {\n C_angle += this.TWO_PI;\n }\n } else if (Ny < Cy) {\n C_angle = this.ONE_AND_HALF_PI; // 270 degrees\n } else {\n C_angle = this.HALF_PI; // 90 degrees\n }\n\n return C_angle;\n};\n\n/**\n * This method checks whether the given two line segments (one with point\n * p1 and p2, the other with point p3 and p4) intersect at a point other\n * than these points.\n */\nIGeometry.doIntersect = function (p1, p2, p3, p4) {\n var a = p1.x;\n var b = p1.y;\n var c = p2.x;\n var d = p2.y;\n var p = p3.x;\n var q = p3.y;\n var r = p4.x;\n var s = p4.y;\n var det = (c - a) * (s - q) - (r - p) * (d - b);\n\n if (det === 0) {\n return false;\n } else {\n var lambda = ((s - q) * (r - a) + (p - r) * (s - b)) / det;\n var gamma = ((b - d) * (r - a) + (c - a) * (s - b)) / det;\n return 0 < lambda && lambda < 1 && 0 < gamma && gamma < 1;\n }\n};\n\n/**\n * This method checks and calculates the intersection of \n * a line segment and a circle.\n */\nIGeometry.findCircleLineIntersections = function (Ex, Ey, Lx, Ly, Cx, Cy, r) {\n\n // E is the starting point of the ray,\n // L is the end point of the ray,\n // C is the center of sphere you're testing against\n // r is the radius of that sphere\n\n // Compute:\n // d = L - E ( Direction vector of ray, from start to end )\n // f = E - C ( Vector from center sphere to ray start )\n\n // Then the intersection is found by..\n // P = E + t * d\n // This is a parametric equation:\n // Px = Ex + tdx\n // Py = Ey + tdy\n\n // get a, b, c values\n var a = (Lx - Ex) * (Lx - Ex) + (Ly - Ey) * (Ly - Ey);\n var b = 2 * ((Ex - Cx) * (Lx - Ex) + (Ey - Cy) * (Ly - Ey));\n var c = (Ex - Cx) * (Ex - Cx) + (Ey - Cy) * (Ey - Cy) - r * r;\n\n // get discriminant\n var disc = b * b - 4 * a * c;\n if (disc >= 0) {\n // insert into quadratic formula\n var t1 = (-b + Math.sqrt(b * b - 4 * a * c)) / (2 * a);\n var t2 = (-b - Math.sqrt(b * b - 4 * a * c)) / (2 * a);\n var intersections = null;\n if (t1 >= 0 && t1 <= 1) {\n // t1 is the intersection, and it's closer than t2\n // (since t1 uses -b - discriminant)\n // Impale, Poke\n return [t1];\n }\n\n // here t1 didn't intersect so we are either started\n // inside the sphere or completely past it\n if (t2 >= 0 && t2 <= 1) {\n // ExitWound\n return [t2];\n }\n\n return intersections;\n } else return null;\n};\n\n// -----------------------------------------------------------------------------\n// Section: Class Constants\n// -----------------------------------------------------------------------------\n/**\n * Some useful pre-calculated constants\n */\nIGeometry.HALF_PI = 0.5 * Math.PI;\nIGeometry.ONE_AND_HALF_PI = 1.5 * Math.PI;\nIGeometry.TWO_PI = 2.0 * Math.PI;\nIGeometry.THREE_PI = 3.0 * Math.PI;\n\nmodule.exports = IGeometry;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction IMath() {}\n\n/**\n * This method returns the sign of the input value.\n */\nIMath.sign = function (value) {\n if (value > 0) {\n return 1;\n } else if (value < 0) {\n return -1;\n } else {\n return 0;\n }\n};\n\nIMath.floor = function (value) {\n return value < 0 ? Math.ceil(value) : Math.floor(value);\n};\n\nIMath.ceil = function (value) {\n return value < 0 ? Math.floor(value) : Math.ceil(value);\n};\n\nmodule.exports = IMath;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction Integer() {}\n\nInteger.MAX_VALUE = 2147483647;\nInteger.MIN_VALUE = -2147483648;\n\nmodule.exports = Integer;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar nodeFrom = function nodeFrom(value) {\n return { value: value, next: null, prev: null };\n};\n\nvar add = function add(prev, node, next, list) {\n if (prev !== null) {\n prev.next = node;\n } else {\n list.head = node;\n }\n\n if (next !== null) {\n next.prev = node;\n } else {\n list.tail = node;\n }\n\n node.prev = prev;\n node.next = next;\n\n list.length++;\n\n return node;\n};\n\nvar _remove = function _remove(node, list) {\n var prev = node.prev,\n next = node.next;\n\n\n if (prev !== null) {\n prev.next = next;\n } else {\n list.head = next;\n }\n\n if (next !== null) {\n next.prev = prev;\n } else {\n list.tail = prev;\n }\n\n node.prev = node.next = null;\n\n list.length--;\n\n return node;\n};\n\nvar LinkedList = function () {\n function LinkedList(vals) {\n var _this = this;\n\n _classCallCheck(this, LinkedList);\n\n this.length = 0;\n this.head = null;\n this.tail = null;\n\n if (vals != null) {\n vals.forEach(function (v) {\n return _this.push(v);\n });\n }\n }\n\n _createClass(LinkedList, [{\n key: \"size\",\n value: function size() {\n return this.length;\n }\n }, {\n key: \"insertBefore\",\n value: function insertBefore(val, otherNode) {\n return add(otherNode.prev, nodeFrom(val), otherNode, this);\n }\n }, {\n key: \"insertAfter\",\n value: function insertAfter(val, otherNode) {\n return add(otherNode, nodeFrom(val), otherNode.next, this);\n }\n }, {\n key: \"insertNodeBefore\",\n value: function insertNodeBefore(newNode, otherNode) {\n return add(otherNode.prev, newNode, otherNode, this);\n }\n }, {\n key: \"insertNodeAfter\",\n value: function insertNodeAfter(newNode, otherNode) {\n return add(otherNode, newNode, otherNode.next, this);\n }\n }, {\n key: \"push\",\n value: function push(val) {\n return add(this.tail, nodeFrom(val), null, this);\n }\n }, {\n key: \"unshift\",\n value: function unshift(val) {\n return add(null, nodeFrom(val), this.head, this);\n }\n }, {\n key: \"remove\",\n value: function remove(node) {\n return _remove(node, this);\n }\n }, {\n key: \"pop\",\n value: function pop() {\n return _remove(this.tail, this).value;\n }\n }, {\n key: \"popNode\",\n value: function popNode() {\n return _remove(this.tail, this);\n }\n }, {\n key: \"shift\",\n value: function shift() {\n return _remove(this.head, this).value;\n }\n }, {\n key: \"shiftNode\",\n value: function shiftNode() {\n return _remove(this.head, this);\n }\n }, {\n key: \"get_object_at\",\n value: function get_object_at(index) {\n if (index <= this.length()) {\n var i = 1;\n var current = this.head;\n while (i < index) {\n current = current.next;\n i++;\n }\n return current.value;\n }\n }\n }, {\n key: \"set_object_at\",\n value: function set_object_at(index, value) {\n if (index <= this.length()) {\n var i = 1;\n var current = this.head;\n while (i < index) {\n current = current.next;\n i++;\n }\n current.value = value;\n }\n }\n }]);\n\n return LinkedList;\n}();\n\nmodule.exports = LinkedList;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/*\r\n *This class is the javascript implementation of the Point.java class in jdk\r\n */\nfunction Point(x, y, p) {\n this.x = null;\n this.y = null;\n if (x == null && y == null && p == null) {\n this.x = 0;\n this.y = 0;\n } else if (typeof x == 'number' && typeof y == 'number' && p == null) {\n this.x = x;\n this.y = y;\n } else if (x.constructor.name == 'Point' && y == null && p == null) {\n p = x;\n this.x = p.x;\n this.y = p.y;\n }\n}\n\nPoint.prototype.getX = function () {\n return this.x;\n};\n\nPoint.prototype.getY = function () {\n return this.y;\n};\n\nPoint.prototype.getLocation = function () {\n return new Point(this.x, this.y);\n};\n\nPoint.prototype.setLocation = function (x, y, p) {\n if (x.constructor.name == 'Point' && y == null && p == null) {\n p = x;\n this.setLocation(p.x, p.y);\n } else if (typeof x == 'number' && typeof y == 'number' && p == null) {\n //if both parameters are integer just move (x,y) location\n if (parseInt(x) == x && parseInt(y) == y) {\n this.move(x, y);\n } else {\n this.x = Math.floor(x + 0.5);\n this.y = Math.floor(y + 0.5);\n }\n }\n};\n\nPoint.prototype.move = function (x, y) {\n this.x = x;\n this.y = y;\n};\n\nPoint.prototype.translate = function (dx, dy) {\n this.x += dx;\n this.y += dy;\n};\n\nPoint.prototype.equals = function (obj) {\n if (obj.constructor.name == \"Point\") {\n var pt = obj;\n return this.x == pt.x && this.y == pt.y;\n }\n return this == obj;\n};\n\nPoint.prototype.toString = function () {\n return new Point().constructor.name + \"[x=\" + this.x + \",y=\" + this.y + \"]\";\n};\n\nmodule.exports = Point;\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction RectangleD(x, y, width, height) {\n this.x = 0;\n this.y = 0;\n this.width = 0;\n this.height = 0;\n\n if (x != null && y != null && width != null && height != null) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n}\n\nRectangleD.prototype.getX = function () {\n return this.x;\n};\n\nRectangleD.prototype.setX = function (x) {\n this.x = x;\n};\n\nRectangleD.prototype.getY = function () {\n return this.y;\n};\n\nRectangleD.prototype.setY = function (y) {\n this.y = y;\n};\n\nRectangleD.prototype.getWidth = function () {\n return this.width;\n};\n\nRectangleD.prototype.setWidth = function (width) {\n this.width = width;\n};\n\nRectangleD.prototype.getHeight = function () {\n return this.height;\n};\n\nRectangleD.prototype.setHeight = function (height) {\n this.height = height;\n};\n\nRectangleD.prototype.getRight = function () {\n return this.x + this.width;\n};\n\nRectangleD.prototype.getBottom = function () {\n return this.y + this.height;\n};\n\nRectangleD.prototype.intersects = function (a) {\n if (this.getRight() < a.x) {\n return false;\n }\n\n if (this.getBottom() < a.y) {\n return false;\n }\n\n if (a.getRight() < this.x) {\n return false;\n }\n\n if (a.getBottom() < this.y) {\n return false;\n }\n\n return true;\n};\n\nRectangleD.prototype.getCenterX = function () {\n return this.x + this.width / 2;\n};\n\nRectangleD.prototype.getMinX = function () {\n return this.getX();\n};\n\nRectangleD.prototype.getMaxX = function () {\n return this.getX() + this.width;\n};\n\nRectangleD.prototype.getCenterY = function () {\n return this.y + this.height / 2;\n};\n\nRectangleD.prototype.getMinY = function () {\n return this.getY();\n};\n\nRectangleD.prototype.getMaxY = function () {\n return this.getY() + this.height;\n};\n\nRectangleD.prototype.getWidthHalf = function () {\n return this.width / 2;\n};\n\nRectangleD.prototype.getHeightHalf = function () {\n return this.height / 2;\n};\n\nmodule.exports = RectangleD;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction UniqueIDGeneretor() {}\n\nUniqueIDGeneretor.lastID = 0;\n\nUniqueIDGeneretor.createID = function (obj) {\n if (UniqueIDGeneretor.isPrimitive(obj)) {\n return obj;\n }\n if (obj.uniqueID != null) {\n return obj.uniqueID;\n }\n obj.uniqueID = UniqueIDGeneretor.getString();\n UniqueIDGeneretor.lastID++;\n return obj.uniqueID;\n};\n\nUniqueIDGeneretor.getString = function (id) {\n if (id == null) id = UniqueIDGeneretor.lastID;\n return \"Object#\" + id + \"\";\n};\n\nUniqueIDGeneretor.isPrimitive = function (arg) {\n var type = typeof arg === \"undefined\" ? \"undefined\" : _typeof(arg);\n return arg == null || type != \"object\" && type != \"function\";\n};\n\nmodule.exports = UniqueIDGeneretor;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar LayoutConstants = __webpack_require__(0);\nvar LGraphManager = __webpack_require__(7);\nvar LNode = __webpack_require__(3);\nvar LEdge = __webpack_require__(1);\nvar LGraph = __webpack_require__(6);\nvar PointD = __webpack_require__(5);\nvar Transform = __webpack_require__(17);\nvar Emitter = __webpack_require__(29);\n\nfunction Layout(isRemoteUse) {\n Emitter.call(this);\n\n //Layout Quality: 0:draft, 1:default, 2:proof\n this.layoutQuality = LayoutConstants.QUALITY;\n //Whether layout should create bendpoints as needed or not\n this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n //Whether layout should be incremental or not\n this.incremental = LayoutConstants.DEFAULT_INCREMENTAL;\n //Whether we animate from before to after layout node positions\n this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT;\n //Whether we animate the layout process or not\n this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT;\n //Number iterations that should be done between two successive animations\n this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD;\n /**\r\n * Whether or not leaf nodes (non-compound nodes) are of uniform sizes. When\r\n * they are, both spring and repulsion forces between two leaf nodes can be\r\n * calculated without the expensive clipping point calculations, resulting\r\n * in major speed-up.\r\n */\n this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES;\n /**\r\n * This is used for creation of bendpoints by using dummy nodes and edges.\r\n * Maps an LEdge to its dummy bendpoint path.\r\n */\n this.edgeToDummyNodes = new Map();\n this.graphManager = new LGraphManager(this);\n this.isLayoutFinished = false;\n this.isSubLayout = false;\n this.isRemoteUse = false;\n\n if (isRemoteUse != null) {\n this.isRemoteUse = isRemoteUse;\n }\n}\n\nLayout.RANDOM_SEED = 1;\n\nLayout.prototype = Object.create(Emitter.prototype);\n\nLayout.prototype.getGraphManager = function () {\n return this.graphManager;\n};\n\nLayout.prototype.getAllNodes = function () {\n return this.graphManager.getAllNodes();\n};\n\nLayout.prototype.getAllEdges = function () {\n return this.graphManager.getAllEdges();\n};\n\nLayout.prototype.getAllNodesToApplyGravitation = function () {\n return this.graphManager.getAllNodesToApplyGravitation();\n};\n\nLayout.prototype.newGraphManager = function () {\n var gm = new LGraphManager(this);\n this.graphManager = gm;\n return gm;\n};\n\nLayout.prototype.newGraph = function (vGraph) {\n return new LGraph(null, this.graphManager, vGraph);\n};\n\nLayout.prototype.newNode = function (vNode) {\n return new LNode(this.graphManager, vNode);\n};\n\nLayout.prototype.newEdge = function (vEdge) {\n return new LEdge(null, null, vEdge);\n};\n\nLayout.prototype.checkLayoutSuccess = function () {\n return this.graphManager.getRoot() == null || this.graphManager.getRoot().getNodes().length == 0 || this.graphManager.includesInvalidEdge();\n};\n\nLayout.prototype.runLayout = function () {\n this.isLayoutFinished = false;\n\n if (this.tilingPreLayout) {\n this.tilingPreLayout();\n }\n\n this.initParameters();\n var isLayoutSuccessfull;\n\n if (this.checkLayoutSuccess()) {\n isLayoutSuccessfull = false;\n } else {\n isLayoutSuccessfull = this.layout();\n }\n\n if (LayoutConstants.ANIMATE === 'during') {\n // If this is a 'during' layout animation. Layout is not finished yet. \n // We need to perform these in index.js when layout is really finished.\n return false;\n }\n\n if (isLayoutSuccessfull) {\n if (!this.isSubLayout) {\n this.doPostLayout();\n }\n }\n\n if (this.tilingPostLayout) {\n this.tilingPostLayout();\n }\n\n this.isLayoutFinished = true;\n\n return isLayoutSuccessfull;\n};\n\n/**\r\n * This method performs the operations required after layout.\r\n */\nLayout.prototype.doPostLayout = function () {\n //assert !isSubLayout : \"Should not be called on sub-layout!\";\n // Propagate geometric changes to v-level objects\n if (!this.incremental) {\n this.transform();\n }\n this.update();\n};\n\n/**\r\n * This method updates the geometry of the target graph according to\r\n * calculated layout.\r\n */\nLayout.prototype.update2 = function () {\n // update bend points\n if (this.createBendsAsNeeded) {\n this.createBendpointsFromDummyNodes();\n\n // reset all edges, since the topology has changed\n this.graphManager.resetAllEdges();\n }\n\n // perform edge, node and root updates if layout is not called\n // remotely\n if (!this.isRemoteUse) {\n // update all edges\n var edge;\n var allEdges = this.graphManager.getAllEdges();\n for (var i = 0; i < allEdges.length; i++) {\n edge = allEdges[i];\n // this.update(edge);\n }\n\n // recursively update nodes\n var node;\n var nodes = this.graphManager.getRoot().getNodes();\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n // this.update(node);\n }\n\n // update root graph\n this.update(this.graphManager.getRoot());\n }\n};\n\nLayout.prototype.update = function (obj) {\n if (obj == null) {\n this.update2();\n } else if (obj instanceof LNode) {\n var node = obj;\n if (node.getChild() != null) {\n // since node is compound, recursively update child nodes\n var nodes = node.getChild().getNodes();\n for (var i = 0; i < nodes.length; i++) {\n update(nodes[i]);\n }\n }\n\n // if the l-level node is associated with a v-level graph object,\n // then it is assumed that the v-level node implements the\n // interface Updatable.\n if (node.vGraphObject != null) {\n // cast to Updatable without any type check\n var vNode = node.vGraphObject;\n\n // call the update method of the interface\n vNode.update(node);\n }\n } else if (obj instanceof LEdge) {\n var edge = obj;\n // if the l-level edge is associated with a v-level graph object,\n // then it is assumed that the v-level edge implements the\n // interface Updatable.\n\n if (edge.vGraphObject != null) {\n // cast to Updatable without any type check\n var vEdge = edge.vGraphObject;\n\n // call the update method of the interface\n vEdge.update(edge);\n }\n } else if (obj instanceof LGraph) {\n var graph = obj;\n // if the l-level graph is associated with a v-level graph object,\n // then it is assumed that the v-level object implements the\n // interface Updatable.\n\n if (graph.vGraphObject != null) {\n // cast to Updatable without any type check\n var vGraph = graph.vGraphObject;\n\n // call the update method of the interface\n vGraph.update(graph);\n }\n }\n};\n\n/**\r\n * This method is used to set all layout parameters to default values\r\n * determined at compile time.\r\n */\nLayout.prototype.initParameters = function () {\n if (!this.isSubLayout) {\n this.layoutQuality = LayoutConstants.QUALITY;\n this.animationDuringLayout = LayoutConstants.DEFAULT_ANIMATION_DURING_LAYOUT;\n this.animationPeriod = LayoutConstants.DEFAULT_ANIMATION_PERIOD;\n this.animationOnLayout = LayoutConstants.DEFAULT_ANIMATION_ON_LAYOUT;\n this.incremental = LayoutConstants.DEFAULT_INCREMENTAL;\n this.createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n this.uniformLeafNodeSizes = LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES;\n }\n\n if (this.animationDuringLayout) {\n this.animationOnLayout = false;\n }\n};\n\nLayout.prototype.transform = function (newLeftTop) {\n if (newLeftTop == undefined) {\n this.transform(new PointD(0, 0));\n } else {\n // create a transformation object (from Eclipse to layout). When an\n // inverse transform is applied, we get upper-left coordinate of the\n // drawing or the root graph at given input coordinate (some margins\n // already included in calculation of left-top).\n\n var trans = new Transform();\n var leftTop = this.graphManager.getRoot().updateLeftTop();\n\n if (leftTop != null) {\n trans.setWorldOrgX(newLeftTop.x);\n trans.setWorldOrgY(newLeftTop.y);\n\n trans.setDeviceOrgX(leftTop.x);\n trans.setDeviceOrgY(leftTop.y);\n\n var nodes = this.getAllNodes();\n var node;\n\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n node.transform(trans);\n }\n }\n }\n};\n\nLayout.prototype.positionNodesRandomly = function (graph) {\n\n if (graph == undefined) {\n //assert !this.incremental;\n this.positionNodesRandomly(this.getGraphManager().getRoot());\n this.getGraphManager().getRoot().updateBounds(true);\n } else {\n var lNode;\n var childGraph;\n\n var nodes = graph.getNodes();\n for (var i = 0; i < nodes.length; i++) {\n lNode = nodes[i];\n childGraph = lNode.getChild();\n\n if (childGraph == null) {\n lNode.scatter();\n } else if (childGraph.getNodes().length == 0) {\n lNode.scatter();\n } else {\n this.positionNodesRandomly(childGraph);\n lNode.updateBounds();\n }\n }\n }\n};\n\n/**\r\n * This method returns a list of trees where each tree is represented as a\r\n * list of l-nodes. The method returns a list of size 0 when:\r\n * - The graph is not flat or\r\n * - One of the component(s) of the graph is not a tree.\r\n */\nLayout.prototype.getFlatForest = function () {\n var flatForest = [];\n var isForest = true;\n\n // Quick reference for all nodes in the graph manager associated with\n // this layout. The list should not be changed.\n var allNodes = this.graphManager.getRoot().getNodes();\n\n // First be sure that the graph is flat\n var isFlat = true;\n\n for (var i = 0; i < allNodes.length; i++) {\n if (allNodes[i].getChild() != null) {\n isFlat = false;\n }\n }\n\n // Return empty forest if the graph is not flat.\n if (!isFlat) {\n return flatForest;\n }\n\n // Run BFS for each component of the graph.\n\n var visited = new Set();\n var toBeVisited = [];\n var parents = new Map();\n var unProcessedNodes = [];\n\n unProcessedNodes = unProcessedNodes.concat(allNodes);\n\n // Each iteration of this loop finds a component of the graph and\n // decides whether it is a tree or not. If it is a tree, adds it to the\n // forest and continued with the next component.\n\n while (unProcessedNodes.length > 0 && isForest) {\n toBeVisited.push(unProcessedNodes[0]);\n\n // Start the BFS. Each iteration of this loop visits a node in a\n // BFS manner.\n while (toBeVisited.length > 0 && isForest) {\n //pool operation\n var currentNode = toBeVisited[0];\n toBeVisited.splice(0, 1);\n visited.add(currentNode);\n\n // Traverse all neighbors of this node\n var neighborEdges = currentNode.getEdges();\n\n for (var i = 0; i < neighborEdges.length; i++) {\n var currentNeighbor = neighborEdges[i].getOtherEnd(currentNode);\n\n // If BFS is not growing from this neighbor.\n if (parents.get(currentNode) != currentNeighbor) {\n // We haven't previously visited this neighbor.\n if (!visited.has(currentNeighbor)) {\n toBeVisited.push(currentNeighbor);\n parents.set(currentNeighbor, currentNode);\n }\n // Since we have previously visited this neighbor and\n // this neighbor is not parent of currentNode, given\n // graph contains a component that is not tree, hence\n // it is not a forest.\n else {\n isForest = false;\n break;\n }\n }\n }\n }\n\n // The graph contains a component that is not a tree. Empty\n // previously found trees. The method will end.\n if (!isForest) {\n flatForest = [];\n }\n // Save currently visited nodes as a tree in our forest. Reset\n // visited and parents lists. Continue with the next component of\n // the graph, if any.\n else {\n var temp = [].concat(_toConsumableArray(visited));\n flatForest.push(temp);\n //flatForest = flatForest.concat(temp);\n //unProcessedNodes.removeAll(visited);\n for (var i = 0; i < temp.length; i++) {\n var value = temp[i];\n var index = unProcessedNodes.indexOf(value);\n if (index > -1) {\n unProcessedNodes.splice(index, 1);\n }\n }\n visited = new Set();\n parents = new Map();\n }\n }\n\n return flatForest;\n};\n\n/**\r\n * This method creates dummy nodes (an l-level node with minimal dimensions)\r\n * for the given edge (one per bendpoint). The existing l-level structure\r\n * is updated accordingly.\r\n */\nLayout.prototype.createDummyNodesForBendpoints = function (edge) {\n var dummyNodes = [];\n var prev = edge.source;\n\n var graph = this.graphManager.calcLowestCommonAncestor(edge.source, edge.target);\n\n for (var i = 0; i < edge.bendpoints.length; i++) {\n // create new dummy node\n var dummyNode = this.newNode(null);\n dummyNode.setRect(new Point(0, 0), new Dimension(1, 1));\n\n graph.add(dummyNode);\n\n // create new dummy edge between prev and dummy node\n var dummyEdge = this.newEdge(null);\n this.graphManager.add(dummyEdge, prev, dummyNode);\n\n dummyNodes.add(dummyNode);\n prev = dummyNode;\n }\n\n var dummyEdge = this.newEdge(null);\n this.graphManager.add(dummyEdge, prev, edge.target);\n\n this.edgeToDummyNodes.set(edge, dummyNodes);\n\n // remove real edge from graph manager if it is inter-graph\n if (edge.isInterGraph()) {\n this.graphManager.remove(edge);\n }\n // else, remove the edge from the current graph\n else {\n graph.remove(edge);\n }\n\n return dummyNodes;\n};\n\n/**\r\n * This method creates bendpoints for edges from the dummy nodes\r\n * at l-level.\r\n */\nLayout.prototype.createBendpointsFromDummyNodes = function () {\n var edges = [];\n edges = edges.concat(this.graphManager.getAllEdges());\n edges = [].concat(_toConsumableArray(this.edgeToDummyNodes.keys())).concat(edges);\n\n for (var k = 0; k < edges.length; k++) {\n var lEdge = edges[k];\n\n if (lEdge.bendpoints.length > 0) {\n var path = this.edgeToDummyNodes.get(lEdge);\n\n for (var i = 0; i < path.length; i++) {\n var dummyNode = path[i];\n var p = new PointD(dummyNode.getCenterX(), dummyNode.getCenterY());\n\n // update bendpoint's location according to dummy node\n var ebp = lEdge.bendpoints.get(i);\n ebp.x = p.x;\n ebp.y = p.y;\n\n // remove the dummy node, dummy edges incident with this\n // dummy node is also removed (within the remove method)\n dummyNode.getOwner().remove(dummyNode);\n }\n\n // add the real edge to graph\n this.graphManager.add(lEdge, lEdge.source, lEdge.target);\n }\n }\n};\n\nLayout.transform = function (sliderValue, defaultValue, minDiv, maxMul) {\n if (minDiv != undefined && maxMul != undefined) {\n var value = defaultValue;\n\n if (sliderValue <= 50) {\n var minValue = defaultValue / minDiv;\n value -= (defaultValue - minValue) / 50 * (50 - sliderValue);\n } else {\n var maxValue = defaultValue * maxMul;\n value += (maxValue - defaultValue) / 50 * (sliderValue - 50);\n }\n\n return value;\n } else {\n var a, b;\n\n if (sliderValue <= 50) {\n a = 9.0 * defaultValue / 500.0;\n b = defaultValue / 10.0;\n } else {\n a = 9.0 * defaultValue / 50.0;\n b = -8 * defaultValue;\n }\n\n return a * sliderValue + b;\n }\n};\n\n/**\r\n * This method finds and returns the center of the given nodes, assuming\r\n * that the given nodes form a tree in themselves.\r\n */\nLayout.findCenterOfTree = function (nodes) {\n var list = [];\n list = list.concat(nodes);\n\n var removedNodes = [];\n var remainingDegrees = new Map();\n var foundCenter = false;\n var centerNode = null;\n\n if (list.length == 1 || list.length == 2) {\n foundCenter = true;\n centerNode = list[0];\n }\n\n for (var i = 0; i < list.length; i++) {\n var node = list[i];\n var degree = node.getNeighborsList().size;\n remainingDegrees.set(node, node.getNeighborsList().size);\n\n if (degree == 1) {\n removedNodes.push(node);\n }\n }\n\n var tempList = [];\n tempList = tempList.concat(removedNodes);\n\n while (!foundCenter) {\n var tempList2 = [];\n tempList2 = tempList2.concat(tempList);\n tempList = [];\n\n for (var i = 0; i < list.length; i++) {\n var node = list[i];\n\n var index = list.indexOf(node);\n if (index >= 0) {\n list.splice(index, 1);\n }\n\n var neighbours = node.getNeighborsList();\n\n neighbours.forEach(function (neighbour) {\n if (removedNodes.indexOf(neighbour) < 0) {\n var otherDegree = remainingDegrees.get(neighbour);\n var newDegree = otherDegree - 1;\n\n if (newDegree == 1) {\n tempList.push(neighbour);\n }\n\n remainingDegrees.set(neighbour, newDegree);\n }\n });\n }\n\n removedNodes = removedNodes.concat(tempList);\n\n if (list.length == 1 || list.length == 2) {\n foundCenter = true;\n centerNode = list[0];\n }\n }\n\n return centerNode;\n};\n\n/**\r\n * During the coarsening process, this layout may be referenced by two graph managers\r\n * this setter function grants access to change the currently being used graph manager\r\n */\nLayout.prototype.setGraphManager = function (gm) {\n this.graphManager = gm;\n};\n\nmodule.exports = Layout;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction RandomSeed() {}\n// adapted from: https://stackoverflow.com/a/19303725\nRandomSeed.seed = 1;\nRandomSeed.x = 0;\n\nRandomSeed.nextDouble = function () {\n RandomSeed.x = Math.sin(RandomSeed.seed++) * 10000;\n return RandomSeed.x - Math.floor(RandomSeed.x);\n};\n\nmodule.exports = RandomSeed;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar PointD = __webpack_require__(5);\n\nfunction Transform(x, y) {\n this.lworldOrgX = 0.0;\n this.lworldOrgY = 0.0;\n this.ldeviceOrgX = 0.0;\n this.ldeviceOrgY = 0.0;\n this.lworldExtX = 1.0;\n this.lworldExtY = 1.0;\n this.ldeviceExtX = 1.0;\n this.ldeviceExtY = 1.0;\n}\n\nTransform.prototype.getWorldOrgX = function () {\n return this.lworldOrgX;\n};\n\nTransform.prototype.setWorldOrgX = function (wox) {\n this.lworldOrgX = wox;\n};\n\nTransform.prototype.getWorldOrgY = function () {\n return this.lworldOrgY;\n};\n\nTransform.prototype.setWorldOrgY = function (woy) {\n this.lworldOrgY = woy;\n};\n\nTransform.prototype.getWorldExtX = function () {\n return this.lworldExtX;\n};\n\nTransform.prototype.setWorldExtX = function (wex) {\n this.lworldExtX = wex;\n};\n\nTransform.prototype.getWorldExtY = function () {\n return this.lworldExtY;\n};\n\nTransform.prototype.setWorldExtY = function (wey) {\n this.lworldExtY = wey;\n};\n\n/* Device related */\n\nTransform.prototype.getDeviceOrgX = function () {\n return this.ldeviceOrgX;\n};\n\nTransform.prototype.setDeviceOrgX = function (dox) {\n this.ldeviceOrgX = dox;\n};\n\nTransform.prototype.getDeviceOrgY = function () {\n return this.ldeviceOrgY;\n};\n\nTransform.prototype.setDeviceOrgY = function (doy) {\n this.ldeviceOrgY = doy;\n};\n\nTransform.prototype.getDeviceExtX = function () {\n return this.ldeviceExtX;\n};\n\nTransform.prototype.setDeviceExtX = function (dex) {\n this.ldeviceExtX = dex;\n};\n\nTransform.prototype.getDeviceExtY = function () {\n return this.ldeviceExtY;\n};\n\nTransform.prototype.setDeviceExtY = function (dey) {\n this.ldeviceExtY = dey;\n};\n\nTransform.prototype.transformX = function (x) {\n var xDevice = 0.0;\n var worldExtX = this.lworldExtX;\n if (worldExtX != 0.0) {\n xDevice = this.ldeviceOrgX + (x - this.lworldOrgX) * this.ldeviceExtX / worldExtX;\n }\n\n return xDevice;\n};\n\nTransform.prototype.transformY = function (y) {\n var yDevice = 0.0;\n var worldExtY = this.lworldExtY;\n if (worldExtY != 0.0) {\n yDevice = this.ldeviceOrgY + (y - this.lworldOrgY) * this.ldeviceExtY / worldExtY;\n }\n\n return yDevice;\n};\n\nTransform.prototype.inverseTransformX = function (x) {\n var xWorld = 0.0;\n var deviceExtX = this.ldeviceExtX;\n if (deviceExtX != 0.0) {\n xWorld = this.lworldOrgX + (x - this.ldeviceOrgX) * this.lworldExtX / deviceExtX;\n }\n\n return xWorld;\n};\n\nTransform.prototype.inverseTransformY = function (y) {\n var yWorld = 0.0;\n var deviceExtY = this.ldeviceExtY;\n if (deviceExtY != 0.0) {\n yWorld = this.lworldOrgY + (y - this.ldeviceOrgY) * this.lworldExtY / deviceExtY;\n }\n return yWorld;\n};\n\nTransform.prototype.inverseTransformPoint = function (inPoint) {\n var outPoint = new PointD(this.inverseTransformX(inPoint.x), this.inverseTransformY(inPoint.y));\n return outPoint;\n};\n\nmodule.exports = Transform;\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar Layout = __webpack_require__(15);\nvar FDLayoutConstants = __webpack_require__(4);\nvar LayoutConstants = __webpack_require__(0);\nvar IGeometry = __webpack_require__(8);\nvar IMath = __webpack_require__(9);\n\nfunction FDLayout() {\n Layout.call(this);\n\n this.useSmartIdealEdgeLengthCalculation = FDLayoutConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION;\n this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH;\n this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH;\n this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR;\n this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR;\n this.displacementThresholdPerNode = 3.0 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100;\n this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n this.initialCoolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n this.totalDisplacement = 0.0;\n this.oldTotalDisplacement = 0.0;\n this.maxIterations = FDLayoutConstants.MAX_ITERATIONS;\n}\n\nFDLayout.prototype = Object.create(Layout.prototype);\n\nfor (var prop in Layout) {\n FDLayout[prop] = Layout[prop];\n}\n\nFDLayout.prototype.initParameters = function () {\n Layout.prototype.initParameters.call(this, arguments);\n\n this.totalIterations = 0;\n this.notAnimatedIterations = 0;\n\n this.useFRGridVariant = FDLayoutConstants.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION;\n\n this.grid = [];\n};\n\nFDLayout.prototype.calcIdealEdgeLengths = function () {\n var edge;\n var originalIdealLength;\n var lcaDepth;\n var source;\n var target;\n var sizeOfSourceInLca;\n var sizeOfTargetInLca;\n\n var allEdges = this.getGraphManager().getAllEdges();\n for (var i = 0; i < allEdges.length; i++) {\n edge = allEdges[i];\n\n originalIdealLength = edge.idealLength;\n\n if (edge.isInterGraph) {\n source = edge.getSource();\n target = edge.getTarget();\n\n sizeOfSourceInLca = edge.getSourceInLca().getEstimatedSize();\n sizeOfTargetInLca = edge.getTargetInLca().getEstimatedSize();\n\n if (this.useSmartIdealEdgeLengthCalculation) {\n edge.idealLength += sizeOfSourceInLca + sizeOfTargetInLca - 2 * LayoutConstants.SIMPLE_NODE_SIZE;\n }\n\n lcaDepth = edge.getLca().getInclusionTreeDepth();\n\n edge.idealLength += originalIdealLength * FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR * (source.getInclusionTreeDepth() + target.getInclusionTreeDepth() - 2 * lcaDepth);\n }\n }\n};\n\nFDLayout.prototype.initSpringEmbedder = function () {\n\n var s = this.getAllNodes().length;\n if (this.incremental) {\n if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) {\n this.coolingFactor = Math.max(this.coolingFactor * FDLayoutConstants.COOLING_ADAPTATION_FACTOR, this.coolingFactor - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * this.coolingFactor * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR));\n }\n this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT_INCREMENTAL;\n } else {\n if (s > FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) {\n this.coolingFactor = Math.max(FDLayoutConstants.COOLING_ADAPTATION_FACTOR, 1.0 - (s - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) / (FDLayoutConstants.ADAPTATION_UPPER_NODE_LIMIT - FDLayoutConstants.ADAPTATION_LOWER_NODE_LIMIT) * (1 - FDLayoutConstants.COOLING_ADAPTATION_FACTOR));\n } else {\n this.coolingFactor = 1.0;\n }\n this.initialCoolingFactor = this.coolingFactor;\n this.maxNodeDisplacement = FDLayoutConstants.MAX_NODE_DISPLACEMENT;\n }\n\n this.maxIterations = Math.max(this.getAllNodes().length * 5, this.maxIterations);\n\n // Reassign this attribute by using new constant value\n this.displacementThresholdPerNode = 3.0 * FDLayoutConstants.DEFAULT_EDGE_LENGTH / 100;\n this.totalDisplacementThreshold = this.displacementThresholdPerNode * this.getAllNodes().length;\n\n this.repulsionRange = this.calcRepulsionRange();\n};\n\nFDLayout.prototype.calcSpringForces = function () {\n var lEdges = this.getAllEdges();\n var edge;\n\n for (var i = 0; i < lEdges.length; i++) {\n edge = lEdges[i];\n\n this.calcSpringForce(edge, edge.idealLength);\n }\n};\n\nFDLayout.prototype.calcRepulsionForces = function () {\n var gridUpdateAllowed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var forceToNodeSurroundingUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var i, j;\n var nodeA, nodeB;\n var lNodes = this.getAllNodes();\n var processedNodeSet;\n\n if (this.useFRGridVariant) {\n if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed) {\n this.updateGrid();\n }\n\n processedNodeSet = new Set();\n\n // calculate repulsion forces between each nodes and its surrounding\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n this.calculateRepulsionForceOfANode(nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate);\n processedNodeSet.add(nodeA);\n }\n } else {\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n\n for (j = i + 1; j < lNodes.length; j++) {\n nodeB = lNodes[j];\n\n // If both nodes are not members of the same graph, skip.\n if (nodeA.getOwner() != nodeB.getOwner()) {\n continue;\n }\n\n this.calcRepulsionForce(nodeA, nodeB);\n }\n }\n }\n};\n\nFDLayout.prototype.calcGravitationalForces = function () {\n var node;\n var lNodes = this.getAllNodesToApplyGravitation();\n\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n this.calcGravitationalForce(node);\n }\n};\n\nFDLayout.prototype.moveNodes = function () {\n var lNodes = this.getAllNodes();\n var node;\n\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n node.move();\n }\n};\n\nFDLayout.prototype.calcSpringForce = function (edge, idealLength) {\n var sourceNode = edge.getSource();\n var targetNode = edge.getTarget();\n\n var length;\n var springForce;\n var springForceX;\n var springForceY;\n\n // Update edge length\n if (this.uniformLeafNodeSizes && sourceNode.getChild() == null && targetNode.getChild() == null) {\n edge.updateLengthSimple();\n } else {\n edge.updateLength();\n\n if (edge.isOverlapingSourceAndTarget) {\n return;\n }\n }\n\n length = edge.getLength();\n\n if (length == 0) return;\n\n // Calculate spring forces\n springForce = edge.edgeElasticity * (length - idealLength);\n\n // Project force onto x and y axes\n springForceX = springForce * (edge.lengthX / length);\n springForceY = springForce * (edge.lengthY / length);\n\n // Apply forces on the end nodes\n sourceNode.springForceX += springForceX;\n sourceNode.springForceY += springForceY;\n targetNode.springForceX -= springForceX;\n targetNode.springForceY -= springForceY;\n};\n\nFDLayout.prototype.calcRepulsionForce = function (nodeA, nodeB) {\n var rectA = nodeA.getRect();\n var rectB = nodeB.getRect();\n var overlapAmount = new Array(2);\n var clipPoints = new Array(4);\n var distanceX;\n var distanceY;\n var distanceSquared;\n var distance;\n var repulsionForce;\n var repulsionForceX;\n var repulsionForceY;\n\n if (rectA.intersects(rectB)) // two nodes overlap\n {\n // calculate separation amount in x and y directions\n IGeometry.calcSeparationAmount(rectA, rectB, overlapAmount, FDLayoutConstants.DEFAULT_EDGE_LENGTH / 2.0);\n\n repulsionForceX = 2 * overlapAmount[0];\n repulsionForceY = 2 * overlapAmount[1];\n\n var childrenConstant = nodeA.noOfChildren * nodeB.noOfChildren / (nodeA.noOfChildren + nodeB.noOfChildren);\n\n // Apply forces on the two nodes\n nodeA.repulsionForceX -= childrenConstant * repulsionForceX;\n nodeA.repulsionForceY -= childrenConstant * repulsionForceY;\n nodeB.repulsionForceX += childrenConstant * repulsionForceX;\n nodeB.repulsionForceY += childrenConstant * repulsionForceY;\n } else // no overlap\n {\n // calculate distance\n\n if (this.uniformLeafNodeSizes && nodeA.getChild() == null && nodeB.getChild() == null) // simply base repulsion on distance of node centers\n {\n distanceX = rectB.getCenterX() - rectA.getCenterX();\n distanceY = rectB.getCenterY() - rectA.getCenterY();\n } else // use clipping points\n {\n IGeometry.getIntersection(rectA, rectB, clipPoints);\n\n distanceX = clipPoints[2] - clipPoints[0];\n distanceY = clipPoints[3] - clipPoints[1];\n }\n\n // No repulsion range. FR grid variant should take care of this.\n if (Math.abs(distanceX) < FDLayoutConstants.MIN_REPULSION_DIST) {\n distanceX = IMath.sign(distanceX) * FDLayoutConstants.MIN_REPULSION_DIST;\n }\n\n if (Math.abs(distanceY) < FDLayoutConstants.MIN_REPULSION_DIST) {\n distanceY = IMath.sign(distanceY) * FDLayoutConstants.MIN_REPULSION_DIST;\n }\n\n distanceSquared = distanceX * distanceX + distanceY * distanceY;\n distance = Math.sqrt(distanceSquared);\n\n // Here we use half of the nodes' repulsion values for backward compatibility\n repulsionForce = (nodeA.nodeRepulsion / 2 + nodeB.nodeRepulsion / 2) * nodeA.noOfChildren * nodeB.noOfChildren / distanceSquared;\n\n // Project force onto x and y axes\n repulsionForceX = repulsionForce * distanceX / distance;\n repulsionForceY = repulsionForce * distanceY / distance;\n\n // Apply forces on the two nodes \n nodeA.repulsionForceX -= repulsionForceX;\n nodeA.repulsionForceY -= repulsionForceY;\n nodeB.repulsionForceX += repulsionForceX;\n nodeB.repulsionForceY += repulsionForceY;\n }\n};\n\nFDLayout.prototype.calcGravitationalForce = function (node) {\n var ownerGraph;\n var ownerCenterX;\n var ownerCenterY;\n var distanceX;\n var distanceY;\n var absDistanceX;\n var absDistanceY;\n var estimatedSize;\n ownerGraph = node.getOwner();\n\n ownerCenterX = (ownerGraph.getRight() + ownerGraph.getLeft()) / 2;\n ownerCenterY = (ownerGraph.getTop() + ownerGraph.getBottom()) / 2;\n distanceX = node.getCenterX() - ownerCenterX;\n distanceY = node.getCenterY() - ownerCenterY;\n absDistanceX = Math.abs(distanceX) + node.getWidth() / 2;\n absDistanceY = Math.abs(distanceY) + node.getHeight() / 2;\n\n if (node.getOwner() == this.graphManager.getRoot()) // in the root graph\n {\n estimatedSize = ownerGraph.getEstimatedSize() * this.gravityRangeFactor;\n\n if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) {\n node.gravitationForceX = -this.gravityConstant * distanceX;\n node.gravitationForceY = -this.gravityConstant * distanceY;\n }\n } else // inside a compound\n {\n estimatedSize = ownerGraph.getEstimatedSize() * this.compoundGravityRangeFactor;\n\n if (absDistanceX > estimatedSize || absDistanceY > estimatedSize) {\n node.gravitationForceX = -this.gravityConstant * distanceX * this.compoundGravityConstant;\n node.gravitationForceY = -this.gravityConstant * distanceY * this.compoundGravityConstant;\n }\n }\n};\n\nFDLayout.prototype.isConverged = function () {\n var converged;\n var oscilating = false;\n\n if (this.totalIterations > this.maxIterations / 3) {\n oscilating = Math.abs(this.totalDisplacement - this.oldTotalDisplacement) < 2;\n }\n\n converged = this.totalDisplacement < this.totalDisplacementThreshold;\n\n this.oldTotalDisplacement = this.totalDisplacement;\n\n return converged || oscilating;\n};\n\nFDLayout.prototype.animate = function () {\n if (this.animationDuringLayout && !this.isSubLayout) {\n if (this.notAnimatedIterations == this.animationPeriod) {\n this.update();\n this.notAnimatedIterations = 0;\n } else {\n this.notAnimatedIterations++;\n }\n }\n};\n\n//This method calculates the number of children (weight) for all nodes\nFDLayout.prototype.calcNoOfChildrenForAllNodes = function () {\n var node;\n var allNodes = this.graphManager.getAllNodes();\n\n for (var i = 0; i < allNodes.length; i++) {\n node = allNodes[i];\n node.noOfChildren = node.getNoOfChildren();\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: FR-Grid Variant Repulsion Force Calculation\n// -----------------------------------------------------------------------------\n\nFDLayout.prototype.calcGrid = function (graph) {\n\n var sizeX = 0;\n var sizeY = 0;\n\n sizeX = parseInt(Math.ceil((graph.getRight() - graph.getLeft()) / this.repulsionRange));\n sizeY = parseInt(Math.ceil((graph.getBottom() - graph.getTop()) / this.repulsionRange));\n\n var grid = new Array(sizeX);\n\n for (var i = 0; i < sizeX; i++) {\n grid[i] = new Array(sizeY);\n }\n\n for (var i = 0; i < sizeX; i++) {\n for (var j = 0; j < sizeY; j++) {\n grid[i][j] = new Array();\n }\n }\n\n return grid;\n};\n\nFDLayout.prototype.addNodeToGrid = function (v, left, top) {\n\n var startX = 0;\n var finishX = 0;\n var startY = 0;\n var finishY = 0;\n\n startX = parseInt(Math.floor((v.getRect().x - left) / this.repulsionRange));\n finishX = parseInt(Math.floor((v.getRect().width + v.getRect().x - left) / this.repulsionRange));\n startY = parseInt(Math.floor((v.getRect().y - top) / this.repulsionRange));\n finishY = parseInt(Math.floor((v.getRect().height + v.getRect().y - top) / this.repulsionRange));\n\n for (var i = startX; i <= finishX; i++) {\n for (var j = startY; j <= finishY; j++) {\n this.grid[i][j].push(v);\n v.setGridCoordinates(startX, finishX, startY, finishY);\n }\n }\n};\n\nFDLayout.prototype.updateGrid = function () {\n var i;\n var nodeA;\n var lNodes = this.getAllNodes();\n\n this.grid = this.calcGrid(this.graphManager.getRoot());\n\n // put all nodes to proper grid cells\n for (i = 0; i < lNodes.length; i++) {\n nodeA = lNodes[i];\n this.addNodeToGrid(nodeA, this.graphManager.getRoot().getLeft(), this.graphManager.getRoot().getTop());\n }\n};\n\nFDLayout.prototype.calculateRepulsionForceOfANode = function (nodeA, processedNodeSet, gridUpdateAllowed, forceToNodeSurroundingUpdate) {\n\n if (this.totalIterations % FDLayoutConstants.GRID_CALCULATION_CHECK_PERIOD == 1 && gridUpdateAllowed || forceToNodeSurroundingUpdate) {\n var surrounding = new Set();\n nodeA.surrounding = new Array();\n var nodeB;\n var grid = this.grid;\n\n for (var i = nodeA.startX - 1; i < nodeA.finishX + 2; i++) {\n for (var j = nodeA.startY - 1; j < nodeA.finishY + 2; j++) {\n if (!(i < 0 || j < 0 || i >= grid.length || j >= grid[0].length)) {\n for (var k = 0; k < grid[i][j].length; k++) {\n nodeB = grid[i][j][k];\n\n // If both nodes are not members of the same graph, \n // or both nodes are the same, skip.\n if (nodeA.getOwner() != nodeB.getOwner() || nodeA == nodeB) {\n continue;\n }\n\n // check if the repulsion force between\n // nodeA and nodeB has already been calculated\n if (!processedNodeSet.has(nodeB) && !surrounding.has(nodeB)) {\n var distanceX = Math.abs(nodeA.getCenterX() - nodeB.getCenterX()) - (nodeA.getWidth() / 2 + nodeB.getWidth() / 2);\n var distanceY = Math.abs(nodeA.getCenterY() - nodeB.getCenterY()) - (nodeA.getHeight() / 2 + nodeB.getHeight() / 2);\n\n // if the distance between nodeA and nodeB \n // is less then calculation range\n if (distanceX <= this.repulsionRange && distanceY <= this.repulsionRange) {\n //then add nodeB to surrounding of nodeA\n surrounding.add(nodeB);\n }\n }\n }\n }\n }\n }\n\n nodeA.surrounding = [].concat(_toConsumableArray(surrounding));\n }\n for (i = 0; i < nodeA.surrounding.length; i++) {\n this.calcRepulsionForce(nodeA, nodeA.surrounding[i]);\n }\n};\n\nFDLayout.prototype.calcRepulsionRange = function () {\n return 0.0;\n};\n\nmodule.exports = FDLayout;\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LEdge = __webpack_require__(1);\nvar FDLayoutConstants = __webpack_require__(4);\n\nfunction FDLayoutEdge(source, target, vEdge) {\n LEdge.call(this, source, target, vEdge);\n\n // Ideal length and elasticity value for this edge\n this.idealLength = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\n this.edgeElasticity = FDLayoutConstants.DEFAULT_SPRING_STRENGTH;\n}\n\nFDLayoutEdge.prototype = Object.create(LEdge.prototype);\n\nfor (var prop in LEdge) {\n FDLayoutEdge[prop] = LEdge[prop];\n}\n\nmodule.exports = FDLayoutEdge;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar LNode = __webpack_require__(3);\nvar FDLayoutConstants = __webpack_require__(4);\n\nfunction FDLayoutNode(gm, loc, size, vNode) {\n // alternative constructor is handled inside LNode\n LNode.call(this, gm, loc, size, vNode);\n\n // Repulsion value of this node\n this.nodeRepulsion = FDLayoutConstants.DEFAULT_REPULSION_STRENGTH;\n\n //Spring, repulsion and gravitational forces acting on this node\n this.springForceX = 0;\n this.springForceY = 0;\n this.repulsionForceX = 0;\n this.repulsionForceY = 0;\n this.gravitationForceX = 0;\n this.gravitationForceY = 0;\n //Amount by which this node is to be moved in this iteration\n this.displacementX = 0;\n this.displacementY = 0;\n\n //Start and finish grid coordinates that this node is fallen into\n this.startX = 0;\n this.finishX = 0;\n this.startY = 0;\n this.finishY = 0;\n\n //Geometric neighbors of this node\n this.surrounding = [];\n}\n\nFDLayoutNode.prototype = Object.create(LNode.prototype);\n\nfor (var prop in LNode) {\n FDLayoutNode[prop] = LNode[prop];\n}\n\nFDLayoutNode.prototype.setGridCoordinates = function (_startX, _finishX, _startY, _finishY) {\n this.startX = _startX;\n this.finishX = _finishX;\n this.startY = _startY;\n this.finishY = _finishY;\n};\n\nmodule.exports = FDLayoutNode;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction DimensionD(width, height) {\n this.width = 0;\n this.height = 0;\n if (width !== null && height !== null) {\n this.height = height;\n this.width = width;\n }\n}\n\nDimensionD.prototype.getWidth = function () {\n return this.width;\n};\n\nDimensionD.prototype.setWidth = function (width) {\n this.width = width;\n};\n\nDimensionD.prototype.getHeight = function () {\n return this.height;\n};\n\nDimensionD.prototype.setHeight = function (height) {\n this.height = height;\n};\n\nmodule.exports = DimensionD;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar UniqueIDGeneretor = __webpack_require__(14);\n\nfunction HashMap() {\n this.map = {};\n this.keys = [];\n}\n\nHashMap.prototype.put = function (key, value) {\n var theId = UniqueIDGeneretor.createID(key);\n if (!this.contains(theId)) {\n this.map[theId] = value;\n this.keys.push(key);\n }\n};\n\nHashMap.prototype.contains = function (key) {\n var theId = UniqueIDGeneretor.createID(key);\n return this.map[key] != null;\n};\n\nHashMap.prototype.get = function (key) {\n var theId = UniqueIDGeneretor.createID(key);\n return this.map[theId];\n};\n\nHashMap.prototype.keySet = function () {\n return this.keys;\n};\n\nmodule.exports = HashMap;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar UniqueIDGeneretor = __webpack_require__(14);\n\nfunction HashSet() {\n this.set = {};\n}\n;\n\nHashSet.prototype.add = function (obj) {\n var theId = UniqueIDGeneretor.createID(obj);\n if (!this.contains(theId)) this.set[theId] = obj;\n};\n\nHashSet.prototype.remove = function (obj) {\n delete this.set[UniqueIDGeneretor.createID(obj)];\n};\n\nHashSet.prototype.clear = function () {\n this.set = {};\n};\n\nHashSet.prototype.contains = function (obj) {\n return this.set[UniqueIDGeneretor.createID(obj)] == obj;\n};\n\nHashSet.prototype.isEmpty = function () {\n return this.size() === 0;\n};\n\nHashSet.prototype.size = function () {\n return Object.keys(this.set).length;\n};\n\n//concats this.set to the given list\nHashSet.prototype.addAllTo = function (list) {\n var keys = Object.keys(this.set);\n var length = keys.length;\n for (var i = 0; i < length; i++) {\n list.push(this.set[keys[i]]);\n }\n};\n\nHashSet.prototype.size = function () {\n return Object.keys(this.set).length;\n};\n\nHashSet.prototype.addAll = function (list) {\n var s = list.length;\n for (var i = 0; i < s; i++) {\n var v = list[i];\n this.add(v);\n }\n};\n\nmodule.exports = HashSet;\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Some matrix (1d and 2d array) operations\nfunction Matrix() {}\n\n/**\n * matrix multiplication\n * array1, array2 and result are 2d arrays\n */\nMatrix.multMat = function (array1, array2) {\n var result = [];\n\n for (var i = 0; i < array1.length; i++) {\n result[i] = [];\n for (var j = 0; j < array2[0].length; j++) {\n result[i][j] = 0;\n for (var k = 0; k < array1[0].length; k++) {\n result[i][j] += array1[i][k] * array2[k][j];\n }\n }\n }\n return result;\n};\n\n/**\n * matrix transpose\n * array and result are 2d arrays\n */\nMatrix.transpose = function (array) {\n var result = [];\n\n for (var i = 0; i < array[0].length; i++) {\n result[i] = [];\n for (var j = 0; j < array.length; j++) {\n result[i][j] = array[j][i];\n }\n }\n\n return result;\n};\n\n/**\n * multiply array with constant\n * array and result are 1d arrays\n */\nMatrix.multCons = function (array, constant) {\n var result = [];\n\n for (var i = 0; i < array.length; i++) {\n result[i] = array[i] * constant;\n }\n\n return result;\n};\n\n/**\n * substract two arrays\n * array1, array2 and result are 1d arrays\n */\nMatrix.minusOp = function (array1, array2) {\n var result = [];\n\n for (var i = 0; i < array1.length; i++) {\n result[i] = array1[i] - array2[i];\n }\n\n return result;\n};\n\n/**\n * dot product of two arrays with same size\n * array1 and array2 are 1d arrays\n */\nMatrix.dotProduct = function (array1, array2) {\n var product = 0;\n\n for (var i = 0; i < array1.length; i++) {\n product += array1[i] * array2[i];\n }\n\n return product;\n};\n\n/**\n * magnitude of an array\n * array is 1d array\n */\nMatrix.mag = function (array) {\n return Math.sqrt(this.dotProduct(array, array));\n};\n\n/**\n * normalization of an array\n * array and result are 1d array\n */\nMatrix.normalize = function (array) {\n var result = [];\n var magnitude = this.mag(array);\n\n for (var i = 0; i < array.length; i++) {\n result[i] = array[i] / magnitude;\n }\n\n return result;\n};\n\n/**\n * multiply an array with centering matrix\n * array and result are 1d array\n */\nMatrix.multGamma = function (array) {\n var result = [];\n var sum = 0;\n\n for (var i = 0; i < array.length; i++) {\n sum += array[i];\n }\n\n sum *= -1 / array.length;\n\n for (var _i = 0; _i < array.length; _i++) {\n result[_i] = sum + array[_i];\n }\n return result;\n};\n\n/**\n * a special matrix multiplication\n * result = 0.5 * C * INV * C^T * array\n * array and result are 1d, C and INV are 2d arrays\n */\nMatrix.multL = function (array, C, INV) {\n var result = [];\n var temp1 = [];\n var temp2 = [];\n\n // multiply by C^T\n for (var i = 0; i < C[0].length; i++) {\n var sum = 0;\n for (var j = 0; j < C.length; j++) {\n sum += -0.5 * C[j][i] * array[j];\n }\n temp1[i] = sum;\n }\n // multiply the result by INV\n for (var _i2 = 0; _i2 < INV.length; _i2++) {\n var _sum = 0;\n for (var _j = 0; _j < INV.length; _j++) {\n _sum += INV[_i2][_j] * temp1[_j];\n }\n temp2[_i2] = _sum;\n }\n // multiply the result by C\n for (var _i3 = 0; _i3 < C.length; _i3++) {\n var _sum2 = 0;\n for (var _j2 = 0; _j2 < C[0].length; _j2++) {\n _sum2 += C[_i3][_j2] * temp2[_j2];\n }\n result[_i3] = _sum2;\n }\n\n return result;\n};\n\nmodule.exports = Matrix;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * A classic Quicksort algorithm with Hoare's partition\n * - Works also on LinkedList objects\n *\n * Copyright: i-Vis Research Group, Bilkent University, 2007 - present\n */\n\nvar LinkedList = __webpack_require__(11);\n\nvar Quicksort = function () {\n function Quicksort(A, compareFunction) {\n _classCallCheck(this, Quicksort);\n\n if (compareFunction !== null || compareFunction !== undefined) this.compareFunction = this._defaultCompareFunction;\n\n var length = void 0;\n if (A instanceof LinkedList) length = A.size();else length = A.length;\n\n this._quicksort(A, 0, length - 1);\n }\n\n _createClass(Quicksort, [{\n key: '_quicksort',\n value: function _quicksort(A, p, r) {\n if (p < r) {\n var q = this._partition(A, p, r);\n this._quicksort(A, p, q);\n this._quicksort(A, q + 1, r);\n }\n }\n }, {\n key: '_partition',\n value: function _partition(A, p, r) {\n var x = this._get(A, p);\n var i = p;\n var j = r;\n while (true) {\n while (this.compareFunction(x, this._get(A, j))) {\n j--;\n }while (this.compareFunction(this._get(A, i), x)) {\n i++;\n }if (i < j) {\n this._swap(A, i, j);\n i++;\n j--;\n } else return j;\n }\n }\n }, {\n key: '_get',\n value: function _get(object, index) {\n if (object instanceof LinkedList) return object.get_object_at(index);else return object[index];\n }\n }, {\n key: '_set',\n value: function _set(object, index, value) {\n if (object instanceof LinkedList) object.set_object_at(index, value);else object[index] = value;\n }\n }, {\n key: '_swap',\n value: function _swap(A, i, j) {\n var temp = this._get(A, i);\n this._set(A, i, this._get(A, j));\n this._set(A, j, temp);\n }\n }, {\n key: '_defaultCompareFunction',\n value: function _defaultCompareFunction(a, b) {\n return b > a;\n }\n }]);\n\n return Quicksort;\n}();\n\nmodule.exports = Quicksort;\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// Singular Value Decomposition implementation\nfunction SVD() {};\n\n/* Below singular value decomposition (svd) code including hypot function is adopted from https://github.com/dragonfly-ai/JamaJS\n Some changes are applied to make the code compatible with the fcose code and to make it independent from Jama.\n Input matrix is changed to a 2D array instead of Jama matrix. Matrix dimensions are taken according to 2D array instead of using Jama functions.\n An object that includes singular value components is created for return. \n The types of input parameters of the hypot function are removed. \n let is used instead of var for the variable initialization.\n*/\n/*\n Apache License\n Version 2.0, January 2004\n http://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n 1. Definitions.\n\n \"License\" shall mean the terms and conditions for use, reproduction,\n and distribution as defined by Sections 1 through 9 of this document.\n\n \"Licensor\" shall mean the copyright owner or entity authorized by\n the copyright owner that is granting the License.\n\n \"Legal Entity\" shall mean the union of the acting entity and all\n other entities that control, are controlled by, or are under common\n control with that entity. For the purposes of this definition,\n \"control\" means (i) the power, direct or indirect, to cause the\n direction or management of such entity, whether by contract or\n otherwise, or (ii) ownership of fifty percent (50%) or more of the\n outstanding shares, or (iii) beneficial ownership of such entity.\n\n \"You\" (or \"Your\") shall mean an individual or Legal Entity\n exercising permissions granted by this License.\n\n \"Source\" form shall mean the preferred form for making modifications,\n including but not limited to software source code, documentation\n source, and configuration files.\n\n \"Object\" form shall mean any form resulting from mechanical\n transformation or translation of a Source form, including but\n not limited to compiled object code, generated documentation,\n and conversions to other media types.\n\n \"Work\" shall mean the work of authorship, whether in Source or\n Object form, made available under the License, as indicated by a\n copyright notice that is included in or attached to the work\n (an example is provided in the Appendix below).\n\n \"Derivative Works\" shall mean any work, whether in Source or Object\n form, that is based on (or derived from) the Work and for which the\n editorial revisions, annotations, elaborations, or other modifications\n represent, as a whole, an original work of authorship. For the purposes\n of this License, Derivative Works shall not include works that remain\n separable from, or merely link (or bind by name) to the interfaces of,\n the Work and Derivative Works thereof.\n\n \"Contribution\" shall mean any work of authorship, including\n the original version of the Work and any modifications or additions\n to that Work or Derivative Works thereof, that is intentionally\n submitted to Licensor for inclusion in the Work by the copyright owner\n or by an individual or Legal Entity authorized to submit on behalf of\n the copyright owner. For the purposes of this definition, \"submitted\"\n means any form of electronic, verbal, or written communication sent\n to the Licensor or its representatives, including but not limited to\n communication on electronic mailing lists, source code control systems,\n and issue tracking systems that are managed by, or on behalf of, the\n Licensor for the purpose of discussing and improving the Work, but\n excluding communication that is conspicuously marked or otherwise\n designated in writing by the copyright owner as \"Not a Contribution.\"\n\n \"Contributor\" shall mean Licensor and any individual or Legal Entity\n on behalf of whom a Contribution has been received by Licensor and\n subsequently incorporated within the Work.\n\n 2. Grant of Copyright License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n copyright license to reproduce, prepare Derivative Works of,\n publicly display, publicly perform, sublicense, and distribute the\n Work and such Derivative Works in Source or Object form.\n\n 3. Grant of Patent License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n (except as stated in this section) patent license to make, have made,\n use, offer to sell, sell, import, and otherwise transfer the Work,\n where such license applies only to those patent claims licensable\n by such Contributor that are necessarily infringed by their\n Contribution(s) alone or by combination of their Contribution(s)\n with the Work to which such Contribution(s) was submitted. If You\n institute patent litigation against any entity (including a\n cross-claim or counterclaim in a lawsuit) alleging that the Work\n or a Contribution incorporated within the Work constitutes direct\n or contributory patent infringement, then any patent licenses\n granted to You under this License for that Work shall terminate\n as of the date such litigation is filed.\n\n 4. Redistribution. You may reproduce and distribute copies of the\n Work or Derivative Works thereof in any medium, with or without\n modifications, and in Source or Object form, provided that You\n meet the following conditions:\n\n (a) You must give any other recipients of the Work or\n Derivative Works a copy of this License; and\n\n (b) You must cause any modified files to carry prominent notices\n stating that You changed the files; and\n\n (c) You must retain, in the Source form of any Derivative Works\n that You distribute, all copyright, patent, trademark, and\n attribution notices from the Source form of the Work,\n excluding those notices that do not pertain to any part of\n the Derivative Works; and\n\n (d) If the Work includes a \"NOTICE\" text file as part of its\n distribution, then any Derivative Works that You distribute must\n include a readable copy of the attribution notices contained\n within such NOTICE file, excluding those notices that do not\n pertain to any part of the Derivative Works, in at least one\n of the following places: within a NOTICE text file distributed\n as part of the Derivative Works; within the Source form or\n documentation, if provided along with the Derivative Works; or,\n within a display generated by the Derivative Works, if and\n wherever such third-party notices normally appear. The contents\n of the NOTICE file are for informational purposes only and\n do not modify the License. You may add Your own attribution\n notices within Derivative Works that You distribute, alongside\n or as an addendum to the NOTICE text from the Work, provided\n that such additional attribution notices cannot be construed\n as modifying the License.\n\n You may add Your own copyright statement to Your modifications and\n may provide additional or different license terms and conditions\n for use, reproduction, or distribution of Your modifications, or\n for any such Derivative Works as a whole, provided Your use,\n reproduction, and distribution of the Work otherwise complies with\n the conditions stated in this License.\n\n 5. Submission of Contributions. Unless You explicitly state otherwise,\n any Contribution intentionally submitted for inclusion in the Work\n by You to the Licensor shall be under the terms and conditions of\n this License, without any additional terms or conditions.\n Notwithstanding the above, nothing herein shall supersede or modify\n the terms of any separate license agreement you may have executed\n with Licensor regarding such Contributions.\n\n 6. Trademarks. This License does not grant permission to use the trade\n names, trademarks, service marks, or product names of the Licensor,\n except as required for reasonable and customary use in describing the\n origin of the Work and reproducing the content of the NOTICE file.\n\n 7. Disclaimer of Warranty. Unless required by applicable law or\n agreed to in writing, Licensor provides the Work (and each\n Contributor provides its Contributions) on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n implied, including, without limitation, any warranties or conditions\n of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n PARTICULAR PURPOSE. You are solely responsible for determining the\n appropriateness of using or redistributing the Work and assume any\n risks associated with Your exercise of permissions under this License.\n\n 8. Limitation of Liability. In no event and under no legal theory,\n whether in tort (including negligence), contract, or otherwise,\n unless required by applicable law (such as deliberate and grossly\n negligent acts) or agreed to in writing, shall any Contributor be\n liable to You for damages, including any direct, indirect, special,\n incidental, or consequential damages of any character arising as a\n result of this License or out of the use or inability to use the\n Work (including but not limited to damages for loss of goodwill,\n work stoppage, computer failure or malfunction, or any and all\n other commercial damages or losses), even if such Contributor\n has been advised of the possibility of such damages.\n\n 9. Accepting Warranty or Additional Liability. While redistributing\n the Work or Derivative Works thereof, You may choose to offer,\n and charge a fee for, acceptance of support, warranty, indemnity,\n or other liability obligations and/or rights consistent with this\n License. However, in accepting such obligations, You may act only\n on Your own behalf and on Your sole responsibility, not on behalf\n of any other Contributor, and only if You agree to indemnify,\n defend, and hold each Contributor harmless for any liability\n incurred by, or claims asserted against, such Contributor by reason\n of your accepting any such warranty or additional liability.\n\n END OF TERMS AND CONDITIONS\n\n APPENDIX: How to apply the Apache License to your work.\n\n To apply the Apache License to your work, attach the following\n boilerplate notice, with the fields enclosed by brackets \"{}\"\n replaced with your own identifying information. (Don't include\n the brackets!) The text should be enclosed in the appropriate\n comment syntax for the file format. We also recommend that a\n file or class name and description of purpose be included on the\n same \"printed page\" as the copyright notice for easier\n identification within third-party archives.\n\n Copyright {yyyy} {name of copyright owner}\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\n\nSVD.svd = function (A) {\n this.U = null;\n this.V = null;\n this.s = null;\n this.m = 0;\n this.n = 0;\n this.m = A.length;\n this.n = A[0].length;\n var nu = Math.min(this.m, this.n);\n this.s = function (s) {\n var a = [];\n while (s-- > 0) {\n a.push(0);\n }return a;\n }(Math.min(this.m + 1, this.n));\n this.U = function (dims) {\n var allocate = function allocate(dims) {\n if (dims.length == 0) {\n return 0;\n } else {\n var array = [];\n for (var i = 0; i < dims[0]; i++) {\n array.push(allocate(dims.slice(1)));\n }\n return array;\n }\n };\n return allocate(dims);\n }([this.m, nu]);\n this.V = function (dims) {\n var allocate = function allocate(dims) {\n if (dims.length == 0) {\n return 0;\n } else {\n var array = [];\n for (var i = 0; i < dims[0]; i++) {\n array.push(allocate(dims.slice(1)));\n }\n return array;\n }\n };\n return allocate(dims);\n }([this.n, this.n]);\n var e = function (s) {\n var a = [];\n while (s-- > 0) {\n a.push(0);\n }return a;\n }(this.n);\n var work = function (s) {\n var a = [];\n while (s-- > 0) {\n a.push(0);\n }return a;\n }(this.m);\n var wantu = true;\n var wantv = true;\n var nct = Math.min(this.m - 1, this.n);\n var nrt = Math.max(0, Math.min(this.n - 2, this.m));\n for (var k = 0; k < Math.max(nct, nrt); k++) {\n if (k < nct) {\n this.s[k] = 0;\n for (var i = k; i < this.m; i++) {\n this.s[k] = SVD.hypot(this.s[k], A[i][k]);\n }\n ;\n if (this.s[k] !== 0.0) {\n if (A[k][k] < 0.0) {\n this.s[k] = -this.s[k];\n }\n for (var _i = k; _i < this.m; _i++) {\n A[_i][k] /= this.s[k];\n }\n ;\n A[k][k] += 1.0;\n }\n this.s[k] = -this.s[k];\n }\n for (var j = k + 1; j < this.n; j++) {\n if (function (lhs, rhs) {\n return lhs && rhs;\n }(k < nct, this.s[k] !== 0.0)) {\n var t = 0;\n for (var _i2 = k; _i2 < this.m; _i2++) {\n t += A[_i2][k] * A[_i2][j];\n }\n ;\n t = -t / A[k][k];\n for (var _i3 = k; _i3 < this.m; _i3++) {\n A[_i3][j] += t * A[_i3][k];\n }\n ;\n }\n e[j] = A[k][j];\n }\n ;\n if (function (lhs, rhs) {\n return lhs && rhs;\n }(wantu, k < nct)) {\n for (var _i4 = k; _i4 < this.m; _i4++) {\n this.U[_i4][k] = A[_i4][k];\n }\n ;\n }\n if (k < nrt) {\n e[k] = 0;\n for (var _i5 = k + 1; _i5 < this.n; _i5++) {\n e[k] = SVD.hypot(e[k], e[_i5]);\n }\n ;\n if (e[k] !== 0.0) {\n if (e[k + 1] < 0.0) {\n e[k] = -e[k];\n }\n for (var _i6 = k + 1; _i6 < this.n; _i6++) {\n e[_i6] /= e[k];\n }\n ;\n e[k + 1] += 1.0;\n }\n e[k] = -e[k];\n if (function (lhs, rhs) {\n return lhs && rhs;\n }(k + 1 < this.m, e[k] !== 0.0)) {\n for (var _i7 = k + 1; _i7 < this.m; _i7++) {\n work[_i7] = 0.0;\n }\n ;\n for (var _j = k + 1; _j < this.n; _j++) {\n for (var _i8 = k + 1; _i8 < this.m; _i8++) {\n work[_i8] += e[_j] * A[_i8][_j];\n }\n ;\n }\n ;\n for (var _j2 = k + 1; _j2 < this.n; _j2++) {\n var _t = -e[_j2] / e[k + 1];\n for (var _i9 = k + 1; _i9 < this.m; _i9++) {\n A[_i9][_j2] += _t * work[_i9];\n }\n ;\n }\n ;\n }\n if (wantv) {\n for (var _i10 = k + 1; _i10 < this.n; _i10++) {\n this.V[_i10][k] = e[_i10];\n };\n }\n }\n };\n var p = Math.min(this.n, this.m + 1);\n if (nct < this.n) {\n this.s[nct] = A[nct][nct];\n }\n if (this.m < p) {\n this.s[p - 1] = 0.0;\n }\n if (nrt + 1 < p) {\n e[nrt] = A[nrt][p - 1];\n }\n e[p - 1] = 0.0;\n if (wantu) {\n for (var _j3 = nct; _j3 < nu; _j3++) {\n for (var _i11 = 0; _i11 < this.m; _i11++) {\n this.U[_i11][_j3] = 0.0;\n }\n ;\n this.U[_j3][_j3] = 1.0;\n };\n for (var _k = nct - 1; _k >= 0; _k--) {\n if (this.s[_k] !== 0.0) {\n for (var _j4 = _k + 1; _j4 < nu; _j4++) {\n var _t2 = 0;\n for (var _i12 = _k; _i12 < this.m; _i12++) {\n _t2 += this.U[_i12][_k] * this.U[_i12][_j4];\n };\n _t2 = -_t2 / this.U[_k][_k];\n for (var _i13 = _k; _i13 < this.m; _i13++) {\n this.U[_i13][_j4] += _t2 * this.U[_i13][_k];\n };\n };\n for (var _i14 = _k; _i14 < this.m; _i14++) {\n this.U[_i14][_k] = -this.U[_i14][_k];\n };\n this.U[_k][_k] = 1.0 + this.U[_k][_k];\n for (var _i15 = 0; _i15 < _k - 1; _i15++) {\n this.U[_i15][_k] = 0.0;\n };\n } else {\n for (var _i16 = 0; _i16 < this.m; _i16++) {\n this.U[_i16][_k] = 0.0;\n };\n this.U[_k][_k] = 1.0;\n }\n };\n }\n if (wantv) {\n for (var _k2 = this.n - 1; _k2 >= 0; _k2--) {\n if (function (lhs, rhs) {\n return lhs && rhs;\n }(_k2 < nrt, e[_k2] !== 0.0)) {\n for (var _j5 = _k2 + 1; _j5 < nu; _j5++) {\n var _t3 = 0;\n for (var _i17 = _k2 + 1; _i17 < this.n; _i17++) {\n _t3 += this.V[_i17][_k2] * this.V[_i17][_j5];\n };\n _t3 = -_t3 / this.V[_k2 + 1][_k2];\n for (var _i18 = _k2 + 1; _i18 < this.n; _i18++) {\n this.V[_i18][_j5] += _t3 * this.V[_i18][_k2];\n };\n };\n }\n for (var _i19 = 0; _i19 < this.n; _i19++) {\n this.V[_i19][_k2] = 0.0;\n };\n this.V[_k2][_k2] = 1.0;\n };\n }\n var pp = p - 1;\n var iter = 0;\n var eps = Math.pow(2.0, -52.0);\n var tiny = Math.pow(2.0, -966.0);\n while (p > 0) {\n var _k3 = void 0;\n var kase = void 0;\n for (_k3 = p - 2; _k3 >= -1; _k3--) {\n if (_k3 === -1) {\n break;\n }\n if (Math.abs(e[_k3]) <= tiny + eps * (Math.abs(this.s[_k3]) + Math.abs(this.s[_k3 + 1]))) {\n e[_k3] = 0.0;\n break;\n }\n };\n if (_k3 === p - 2) {\n kase = 4;\n } else {\n var ks = void 0;\n for (ks = p - 1; ks >= _k3; ks--) {\n if (ks === _k3) {\n break;\n }\n var _t4 = (ks !== p ? Math.abs(e[ks]) : 0.0) + (ks !== _k3 + 1 ? Math.abs(e[ks - 1]) : 0.0);\n if (Math.abs(this.s[ks]) <= tiny + eps * _t4) {\n this.s[ks] = 0.0;\n break;\n }\n };\n if (ks === _k3) {\n kase = 3;\n } else if (ks === p - 1) {\n kase = 1;\n } else {\n kase = 2;\n _k3 = ks;\n }\n }\n _k3++;\n switch (kase) {\n case 1:\n {\n var f = e[p - 2];\n e[p - 2] = 0.0;\n for (var _j6 = p - 2; _j6 >= _k3; _j6--) {\n var _t5 = SVD.hypot(this.s[_j6], f);\n var cs = this.s[_j6] / _t5;\n var sn = f / _t5;\n this.s[_j6] = _t5;\n if (_j6 !== _k3) {\n f = -sn * e[_j6 - 1];\n e[_j6 - 1] = cs * e[_j6 - 1];\n }\n if (wantv) {\n for (var _i20 = 0; _i20 < this.n; _i20++) {\n _t5 = cs * this.V[_i20][_j6] + sn * this.V[_i20][p - 1];\n this.V[_i20][p - 1] = -sn * this.V[_i20][_j6] + cs * this.V[_i20][p - 1];\n this.V[_i20][_j6] = _t5;\n };\n }\n };\n };\n break;\n case 2:\n {\n var _f = e[_k3 - 1];\n e[_k3 - 1] = 0.0;\n for (var _j7 = _k3; _j7 < p; _j7++) {\n var _t6 = SVD.hypot(this.s[_j7], _f);\n var _cs = this.s[_j7] / _t6;\n var _sn = _f / _t6;\n this.s[_j7] = _t6;\n _f = -_sn * e[_j7];\n e[_j7] = _cs * e[_j7];\n if (wantu) {\n for (var _i21 = 0; _i21 < this.m; _i21++) {\n _t6 = _cs * this.U[_i21][_j7] + _sn * this.U[_i21][_k3 - 1];\n this.U[_i21][_k3 - 1] = -_sn * this.U[_i21][_j7] + _cs * this.U[_i21][_k3 - 1];\n this.U[_i21][_j7] = _t6;\n };\n }\n };\n };\n break;\n case 3:\n {\n var scale = Math.max(Math.max(Math.max(Math.max(Math.abs(this.s[p - 1]), Math.abs(this.s[p - 2])), Math.abs(e[p - 2])), Math.abs(this.s[_k3])), Math.abs(e[_k3]));\n var sp = this.s[p - 1] / scale;\n var spm1 = this.s[p - 2] / scale;\n var epm1 = e[p - 2] / scale;\n var sk = this.s[_k3] / scale;\n var ek = e[_k3] / scale;\n var b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2.0;\n var c = sp * epm1 * (sp * epm1);\n var shift = 0.0;\n if (function (lhs, rhs) {\n return lhs || rhs;\n }(b !== 0.0, c !== 0.0)) {\n shift = Math.sqrt(b * b + c);\n if (b < 0.0) {\n shift = -shift;\n }\n shift = c / (b + shift);\n }\n var _f2 = (sk + sp) * (sk - sp) + shift;\n var g = sk * ek;\n for (var _j8 = _k3; _j8 < p - 1; _j8++) {\n var _t7 = SVD.hypot(_f2, g);\n var _cs2 = _f2 / _t7;\n var _sn2 = g / _t7;\n if (_j8 !== _k3) {\n e[_j8 - 1] = _t7;\n }\n _f2 = _cs2 * this.s[_j8] + _sn2 * e[_j8];\n e[_j8] = _cs2 * e[_j8] - _sn2 * this.s[_j8];\n g = _sn2 * this.s[_j8 + 1];\n this.s[_j8 + 1] = _cs2 * this.s[_j8 + 1];\n if (wantv) {\n for (var _i22 = 0; _i22 < this.n; _i22++) {\n _t7 = _cs2 * this.V[_i22][_j8] + _sn2 * this.V[_i22][_j8 + 1];\n this.V[_i22][_j8 + 1] = -_sn2 * this.V[_i22][_j8] + _cs2 * this.V[_i22][_j8 + 1];\n this.V[_i22][_j8] = _t7;\n };\n }\n _t7 = SVD.hypot(_f2, g);\n _cs2 = _f2 / _t7;\n _sn2 = g / _t7;\n this.s[_j8] = _t7;\n _f2 = _cs2 * e[_j8] + _sn2 * this.s[_j8 + 1];\n this.s[_j8 + 1] = -_sn2 * e[_j8] + _cs2 * this.s[_j8 + 1];\n g = _sn2 * e[_j8 + 1];\n e[_j8 + 1] = _cs2 * e[_j8 + 1];\n if (wantu && _j8 < this.m - 1) {\n for (var _i23 = 0; _i23 < this.m; _i23++) {\n _t7 = _cs2 * this.U[_i23][_j8] + _sn2 * this.U[_i23][_j8 + 1];\n this.U[_i23][_j8 + 1] = -_sn2 * this.U[_i23][_j8] + _cs2 * this.U[_i23][_j8 + 1];\n this.U[_i23][_j8] = _t7;\n };\n }\n };\n e[p - 2] = _f2;\n iter = iter + 1;\n };\n break;\n case 4:\n {\n if (this.s[_k3] <= 0.0) {\n this.s[_k3] = this.s[_k3] < 0.0 ? -this.s[_k3] : 0.0;\n if (wantv) {\n for (var _i24 = 0; _i24 <= pp; _i24++) {\n this.V[_i24][_k3] = -this.V[_i24][_k3];\n };\n }\n }\n while (_k3 < pp) {\n if (this.s[_k3] >= this.s[_k3 + 1]) {\n break;\n }\n var _t8 = this.s[_k3];\n this.s[_k3] = this.s[_k3 + 1];\n this.s[_k3 + 1] = _t8;\n if (wantv && _k3 < this.n - 1) {\n for (var _i25 = 0; _i25 < this.n; _i25++) {\n _t8 = this.V[_i25][_k3 + 1];\n this.V[_i25][_k3 + 1] = this.V[_i25][_k3];\n this.V[_i25][_k3] = _t8;\n };\n }\n if (wantu && _k3 < this.m - 1) {\n for (var _i26 = 0; _i26 < this.m; _i26++) {\n _t8 = this.U[_i26][_k3 + 1];\n this.U[_i26][_k3 + 1] = this.U[_i26][_k3];\n this.U[_i26][_k3] = _t8;\n };\n }\n _k3++;\n };\n iter = 0;\n p--;\n };\n break;\n }\n };\n var result = { U: this.U, V: this.V, S: this.s };\n return result;\n};\n\n// sqrt(a^2 + b^2) without under/overflow.\nSVD.hypot = function (a, b) {\n var r = void 0;\n if (Math.abs(a) > Math.abs(b)) {\n r = b / a;\n r = Math.abs(a) * Math.sqrt(1 + r * r);\n } else if (b != 0) {\n r = a / b;\n r = Math.abs(b) * Math.sqrt(1 + r * r);\n } else {\n r = 0.0;\n }\n return r;\n};\n\nmodule.exports = SVD;\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Needleman-Wunsch algorithm is an procedure to compute the optimal global alignment of two string\n * sequences by S.B.Needleman and C.D.Wunsch (1970).\n *\n * Aside from the inputs, you can assign the scores for,\n * - Match: The two characters at the current index are same.\n * - Mismatch: The two characters at the current index are different.\n * - Insertion/Deletion(gaps): The best alignment involves one letter aligning to a gap in the other string.\n */\n\nvar NeedlemanWunsch = function () {\n function NeedlemanWunsch(sequence1, sequence2) {\n var match_score = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n var mismatch_penalty = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1;\n var gap_penalty = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1;\n\n _classCallCheck(this, NeedlemanWunsch);\n\n this.sequence1 = sequence1;\n this.sequence2 = sequence2;\n this.match_score = match_score;\n this.mismatch_penalty = mismatch_penalty;\n this.gap_penalty = gap_penalty;\n\n // Just the remove redundancy\n this.iMax = sequence1.length + 1;\n this.jMax = sequence2.length + 1;\n\n // Grid matrix of scores\n this.grid = new Array(this.iMax);\n for (var i = 0; i < this.iMax; i++) {\n this.grid[i] = new Array(this.jMax);\n\n for (var j = 0; j < this.jMax; j++) {\n this.grid[i][j] = 0;\n }\n }\n\n // Traceback matrix (2D array, each cell is an array of boolean values for [`Diag`, `Up`, `Left`] positions)\n this.tracebackGrid = new Array(this.iMax);\n for (var _i = 0; _i < this.iMax; _i++) {\n this.tracebackGrid[_i] = new Array(this.jMax);\n\n for (var _j = 0; _j < this.jMax; _j++) {\n this.tracebackGrid[_i][_j] = [null, null, null];\n }\n }\n\n // The aligned sequences (return multiple possibilities)\n this.alignments = [];\n\n // Final alignment score\n this.score = -1;\n\n // Calculate scores and tracebacks\n this.computeGrids();\n }\n\n _createClass(NeedlemanWunsch, [{\n key: \"getScore\",\n value: function getScore() {\n return this.score;\n }\n }, {\n key: \"getAlignments\",\n value: function getAlignments() {\n return this.alignments;\n }\n\n // Main dynamic programming procedure\n\n }, {\n key: \"computeGrids\",\n value: function computeGrids() {\n // Fill in the first row\n for (var j = 1; j < this.jMax; j++) {\n this.grid[0][j] = this.grid[0][j - 1] + this.gap_penalty;\n this.tracebackGrid[0][j] = [false, false, true];\n }\n\n // Fill in the first column\n for (var i = 1; i < this.iMax; i++) {\n this.grid[i][0] = this.grid[i - 1][0] + this.gap_penalty;\n this.tracebackGrid[i][0] = [false, true, false];\n }\n\n // Fill the rest of the grid\n for (var _i2 = 1; _i2 < this.iMax; _i2++) {\n for (var _j2 = 1; _j2 < this.jMax; _j2++) {\n // Find the max score(s) among [`Diag`, `Up`, `Left`]\n var diag = void 0;\n if (this.sequence1[_i2 - 1] === this.sequence2[_j2 - 1]) diag = this.grid[_i2 - 1][_j2 - 1] + this.match_score;else diag = this.grid[_i2 - 1][_j2 - 1] + this.mismatch_penalty;\n\n var up = this.grid[_i2 - 1][_j2] + this.gap_penalty;\n var left = this.grid[_i2][_j2 - 1] + this.gap_penalty;\n\n // If there exists multiple max values, capture them for multiple paths\n var maxOf = [diag, up, left];\n var indices = this.arrayAllMaxIndexes(maxOf);\n\n // Update Grids\n this.grid[_i2][_j2] = maxOf[indices[0]];\n this.tracebackGrid[_i2][_j2] = [indices.includes(0), indices.includes(1), indices.includes(2)];\n }\n }\n\n // Update alignment score\n this.score = this.grid[this.iMax - 1][this.jMax - 1];\n }\n\n // Gets all possible valid sequence combinations\n\n }, {\n key: \"alignmentTraceback\",\n value: function alignmentTraceback() {\n var inProcessAlignments = [];\n\n inProcessAlignments.push({ pos: [this.sequence1.length, this.sequence2.length],\n seq1: \"\",\n seq2: \"\"\n });\n\n while (inProcessAlignments[0]) {\n var current = inProcessAlignments[0];\n var directions = this.tracebackGrid[current.pos[0]][current.pos[1]];\n\n if (directions[0]) {\n inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1] - 1],\n seq1: this.sequence1[current.pos[0] - 1] + current.seq1,\n seq2: this.sequence2[current.pos[1] - 1] + current.seq2\n });\n }\n if (directions[1]) {\n inProcessAlignments.push({ pos: [current.pos[0] - 1, current.pos[1]],\n seq1: this.sequence1[current.pos[0] - 1] + current.seq1,\n seq2: '-' + current.seq2\n });\n }\n if (directions[2]) {\n inProcessAlignments.push({ pos: [current.pos[0], current.pos[1] - 1],\n seq1: '-' + current.seq1,\n seq2: this.sequence2[current.pos[1] - 1] + current.seq2\n });\n }\n\n if (current.pos[0] === 0 && current.pos[1] === 0) this.alignments.push({ sequence1: current.seq1,\n sequence2: current.seq2\n });\n\n inProcessAlignments.shift();\n }\n\n return this.alignments;\n }\n\n // Helper Functions\n\n }, {\n key: \"getAllIndexes\",\n value: function getAllIndexes(arr, val) {\n var indexes = [],\n i = -1;\n while ((i = arr.indexOf(val, i + 1)) !== -1) {\n indexes.push(i);\n }\n return indexes;\n }\n }, {\n key: \"arrayAllMaxIndexes\",\n value: function arrayAllMaxIndexes(array) {\n return this.getAllIndexes(array, Math.max.apply(null, array));\n }\n }]);\n\n return NeedlemanWunsch;\n}();\n\nmodule.exports = NeedlemanWunsch;\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar layoutBase = function layoutBase() {\n return;\n};\n\nlayoutBase.FDLayout = __webpack_require__(18);\nlayoutBase.FDLayoutConstants = __webpack_require__(4);\nlayoutBase.FDLayoutEdge = __webpack_require__(19);\nlayoutBase.FDLayoutNode = __webpack_require__(20);\nlayoutBase.DimensionD = __webpack_require__(21);\nlayoutBase.HashMap = __webpack_require__(22);\nlayoutBase.HashSet = __webpack_require__(23);\nlayoutBase.IGeometry = __webpack_require__(8);\nlayoutBase.IMath = __webpack_require__(9);\nlayoutBase.Integer = __webpack_require__(10);\nlayoutBase.Point = __webpack_require__(12);\nlayoutBase.PointD = __webpack_require__(5);\nlayoutBase.RandomSeed = __webpack_require__(16);\nlayoutBase.RectangleD = __webpack_require__(13);\nlayoutBase.Transform = __webpack_require__(17);\nlayoutBase.UniqueIDGeneretor = __webpack_require__(14);\nlayoutBase.Quicksort = __webpack_require__(25);\nlayoutBase.LinkedList = __webpack_require__(11);\nlayoutBase.LGraphObject = __webpack_require__(2);\nlayoutBase.LGraph = __webpack_require__(6);\nlayoutBase.LEdge = __webpack_require__(1);\nlayoutBase.LGraphManager = __webpack_require__(7);\nlayoutBase.LNode = __webpack_require__(3);\nlayoutBase.Layout = __webpack_require__(15);\nlayoutBase.LayoutConstants = __webpack_require__(0);\nlayoutBase.NeedlemanWunsch = __webpack_require__(27);\nlayoutBase.Matrix = __webpack_require__(24);\nlayoutBase.SVD = __webpack_require__(26);\n\nmodule.exports = layoutBase;\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction Emitter() {\n this.listeners = [];\n}\n\nvar p = Emitter.prototype;\n\np.addListener = function (event, callback) {\n this.listeners.push({\n event: event,\n callback: callback\n });\n};\n\np.removeListener = function (event, callback) {\n for (var i = this.listeners.length; i >= 0; i--) {\n var l = this.listeners[i];\n\n if (l.event === event && l.callback === callback) {\n this.listeners.splice(i, 1);\n }\n }\n};\n\np.emit = function (event, data) {\n for (var i = 0; i < this.listeners.length; i++) {\n var l = this.listeners[i];\n\n if (event === l.event) {\n l.callback(data);\n }\n }\n};\n\nmodule.exports = Emitter;\n\n/***/ })\n/******/ ]);\n});", "(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"layout-base\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"layout-base\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"coseBase\"] = factory(require(\"layout-base\"));\n\telse\n\t\troot[\"coseBase\"] = factory(root[\"layoutBase\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE__551__) {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 45:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar coseBase = {};\n\ncoseBase.layoutBase = __webpack_require__(551);\ncoseBase.CoSEConstants = __webpack_require__(806);\ncoseBase.CoSEEdge = __webpack_require__(767);\ncoseBase.CoSEGraph = __webpack_require__(880);\ncoseBase.CoSEGraphManager = __webpack_require__(578);\ncoseBase.CoSELayout = __webpack_require__(765);\ncoseBase.CoSENode = __webpack_require__(991);\ncoseBase.ConstraintHandler = __webpack_require__(902);\n\nmodule.exports = coseBase;\n\n/***/ }),\n\n/***/ 806:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar FDLayoutConstants = __webpack_require__(551).FDLayoutConstants;\n\nfunction CoSEConstants() {}\n\n//CoSEConstants inherits static props in FDLayoutConstants\nfor (var prop in FDLayoutConstants) {\n CoSEConstants[prop] = FDLayoutConstants[prop];\n}\n\nCoSEConstants.DEFAULT_USE_MULTI_LEVEL_SCALING = false;\nCoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\nCoSEConstants.DEFAULT_COMPONENT_SEPERATION = 60;\nCoSEConstants.TILE = true;\nCoSEConstants.TILING_PADDING_VERTICAL = 10;\nCoSEConstants.TILING_PADDING_HORIZONTAL = 10;\nCoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = true;\nCoSEConstants.ENFORCE_CONSTRAINTS = true;\nCoSEConstants.APPLY_LAYOUT = true;\nCoSEConstants.RELAX_MOVEMENT_ON_CONSTRAINTS = true;\nCoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = true; // this should be set to false if there will be a constraint\n// This constant is for differentiating whether actual layout algorithm that uses cose-base wants to apply only incremental layout or \n// an incremental layout on top of a randomized layout. If it is only incremental layout, then this constant should be true.\nCoSEConstants.PURE_INCREMENTAL = CoSEConstants.DEFAULT_INCREMENTAL;\n\nmodule.exports = CoSEConstants;\n\n/***/ }),\n\n/***/ 767:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar FDLayoutEdge = __webpack_require__(551).FDLayoutEdge;\n\nfunction CoSEEdge(source, target, vEdge) {\n FDLayoutEdge.call(this, source, target, vEdge);\n}\n\nCoSEEdge.prototype = Object.create(FDLayoutEdge.prototype);\nfor (var prop in FDLayoutEdge) {\n CoSEEdge[prop] = FDLayoutEdge[prop];\n}\n\nmodule.exports = CoSEEdge;\n\n/***/ }),\n\n/***/ 880:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar LGraph = __webpack_require__(551).LGraph;\n\nfunction CoSEGraph(parent, graphMgr, vGraph) {\n LGraph.call(this, parent, graphMgr, vGraph);\n}\n\nCoSEGraph.prototype = Object.create(LGraph.prototype);\nfor (var prop in LGraph) {\n CoSEGraph[prop] = LGraph[prop];\n}\n\nmodule.exports = CoSEGraph;\n\n/***/ }),\n\n/***/ 578:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar LGraphManager = __webpack_require__(551).LGraphManager;\n\nfunction CoSEGraphManager(layout) {\n LGraphManager.call(this, layout);\n}\n\nCoSEGraphManager.prototype = Object.create(LGraphManager.prototype);\nfor (var prop in LGraphManager) {\n CoSEGraphManager[prop] = LGraphManager[prop];\n}\n\nmodule.exports = CoSEGraphManager;\n\n/***/ }),\n\n/***/ 765:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar FDLayout = __webpack_require__(551).FDLayout;\nvar CoSEGraphManager = __webpack_require__(578);\nvar CoSEGraph = __webpack_require__(880);\nvar CoSENode = __webpack_require__(991);\nvar CoSEEdge = __webpack_require__(767);\nvar CoSEConstants = __webpack_require__(806);\nvar ConstraintHandler = __webpack_require__(902);\nvar FDLayoutConstants = __webpack_require__(551).FDLayoutConstants;\nvar LayoutConstants = __webpack_require__(551).LayoutConstants;\nvar Point = __webpack_require__(551).Point;\nvar PointD = __webpack_require__(551).PointD;\nvar DimensionD = __webpack_require__(551).DimensionD;\nvar Layout = __webpack_require__(551).Layout;\nvar Integer = __webpack_require__(551).Integer;\nvar IGeometry = __webpack_require__(551).IGeometry;\nvar LGraph = __webpack_require__(551).LGraph;\nvar Transform = __webpack_require__(551).Transform;\nvar LinkedList = __webpack_require__(551).LinkedList;\n\nfunction CoSELayout() {\n FDLayout.call(this);\n\n this.toBeTiled = {}; // Memorize if a node is to be tiled or is tiled\n this.constraints = {}; // keep layout constraints\n}\n\nCoSELayout.prototype = Object.create(FDLayout.prototype);\n\nfor (var prop in FDLayout) {\n CoSELayout[prop] = FDLayout[prop];\n}\n\nCoSELayout.prototype.newGraphManager = function () {\n var gm = new CoSEGraphManager(this);\n this.graphManager = gm;\n return gm;\n};\n\nCoSELayout.prototype.newGraph = function (vGraph) {\n return new CoSEGraph(null, this.graphManager, vGraph);\n};\n\nCoSELayout.prototype.newNode = function (vNode) {\n return new CoSENode(this.graphManager, vNode);\n};\n\nCoSELayout.prototype.newEdge = function (vEdge) {\n return new CoSEEdge(null, null, vEdge);\n};\n\nCoSELayout.prototype.initParameters = function () {\n FDLayout.prototype.initParameters.call(this, arguments);\n if (!this.isSubLayout) {\n if (CoSEConstants.DEFAULT_EDGE_LENGTH < 10) {\n this.idealEdgeLength = 10;\n } else {\n this.idealEdgeLength = CoSEConstants.DEFAULT_EDGE_LENGTH;\n }\n\n this.useSmartIdealEdgeLengthCalculation = CoSEConstants.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION;\n this.gravityConstant = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH;\n this.compoundGravityConstant = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH;\n this.gravityRangeFactor = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR;\n this.compoundGravityRangeFactor = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR;\n\n // variables for tree reduction support\n this.prunedNodesAll = [];\n this.growTreeIterations = 0;\n this.afterGrowthIterations = 0;\n this.isTreeGrowing = false;\n this.isGrowthFinished = false;\n }\n};\n\n// This method is used to set CoSE related parameters used by spring embedder.\nCoSELayout.prototype.initSpringEmbedder = function () {\n FDLayout.prototype.initSpringEmbedder.call(this);\n\n // variables for cooling\n this.coolingCycle = 0;\n this.maxCoolingCycle = this.maxIterations / FDLayoutConstants.CONVERGENCE_CHECK_PERIOD;\n this.finalTemperature = 0.04;\n this.coolingAdjuster = 1;\n};\n\nCoSELayout.prototype.layout = function () {\n var createBendsAsNeeded = LayoutConstants.DEFAULT_CREATE_BENDS_AS_NEEDED;\n if (createBendsAsNeeded) {\n this.createBendpoints();\n this.graphManager.resetAllEdges();\n }\n\n this.level = 0;\n return this.classicLayout();\n};\n\nCoSELayout.prototype.classicLayout = function () {\n this.nodesWithGravity = this.calculateNodesToApplyGravitationTo();\n this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity);\n this.calcNoOfChildrenForAllNodes();\n this.graphManager.calcLowestCommonAncestors();\n this.graphManager.calcInclusionTreeDepths();\n this.graphManager.getRoot().calcEstimatedSize();\n this.calcIdealEdgeLengths();\n\n if (!this.incremental) {\n var forest = this.getFlatForest();\n\n // The graph associated with this layout is flat and a forest\n if (forest.length > 0) {\n this.positionNodesRadially(forest);\n }\n // The graph associated with this layout is not flat or a forest\n else {\n // Reduce the trees when incremental mode is not enabled and graph is not a forest \n this.reduceTrees();\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n\n this.positionNodesRandomly();\n }\n } else {\n if (CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL) {\n // Reduce the trees in incremental mode if only this constant is set to true \n this.reduceTrees();\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n }\n }\n\n if (Object.keys(this.constraints).length > 0) {\n ConstraintHandler.handleConstraints(this);\n this.initConstraintVariables();\n }\n\n this.initSpringEmbedder();\n if (CoSEConstants.APPLY_LAYOUT) {\n this.runSpringEmbedder();\n }\n\n return true;\n};\n\nCoSELayout.prototype.tick = function () {\n this.totalIterations++;\n\n if (this.totalIterations === this.maxIterations && !this.isTreeGrowing && !this.isGrowthFinished) {\n if (this.prunedNodesAll.length > 0) {\n this.isTreeGrowing = true;\n } else {\n return true;\n }\n }\n\n if (this.totalIterations % FDLayoutConstants.CONVERGENCE_CHECK_PERIOD == 0 && !this.isTreeGrowing && !this.isGrowthFinished) {\n if (this.isConverged()) {\n if (this.prunedNodesAll.length > 0) {\n this.isTreeGrowing = true;\n } else {\n return true;\n }\n }\n\n this.coolingCycle++;\n\n if (this.layoutQuality == 0) {\n // quality - \"draft\"\n this.coolingAdjuster = this.coolingCycle;\n } else if (this.layoutQuality == 1) {\n // quality - \"default\"\n this.coolingAdjuster = this.coolingCycle / 3;\n }\n\n // cooling schedule is based on http://www.btluke.com/simanf1.html -> cooling schedule 3\n this.coolingFactor = Math.max(this.initialCoolingFactor - Math.pow(this.coolingCycle, Math.log(100 * (this.initialCoolingFactor - this.finalTemperature)) / Math.log(this.maxCoolingCycle)) / 100 * this.coolingAdjuster, this.finalTemperature);\n this.animationPeriod = Math.ceil(this.initialAnimationPeriod * Math.sqrt(this.coolingFactor));\n }\n // Operations while tree is growing again \n if (this.isTreeGrowing) {\n if (this.growTreeIterations % 10 == 0) {\n if (this.prunedNodesAll.length > 0) {\n this.graphManager.updateBounds();\n this.updateGrid();\n this.growTree(this.prunedNodesAll);\n // Update nodes that gravity will be applied\n this.graphManager.resetAllNodesToApplyGravitation();\n var allNodes = new Set(this.getAllNodes());\n var intersection = this.nodesWithGravity.filter(function (x) {\n return allNodes.has(x);\n });\n this.graphManager.setAllNodesToApplyGravitation(intersection);\n\n this.graphManager.updateBounds();\n this.updateGrid();\n if (CoSEConstants.PURE_INCREMENTAL) this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL / 2;else this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL;\n } else {\n this.isTreeGrowing = false;\n this.isGrowthFinished = true;\n }\n }\n this.growTreeIterations++;\n }\n // Operations after growth is finished\n if (this.isGrowthFinished) {\n if (this.isConverged()) {\n return true;\n }\n if (this.afterGrowthIterations % 10 == 0) {\n this.graphManager.updateBounds();\n this.updateGrid();\n }\n if (CoSEConstants.PURE_INCREMENTAL) this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL / 2 * ((100 - this.afterGrowthIterations) / 100);else this.coolingFactor = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL * ((100 - this.afterGrowthIterations) / 100);\n this.afterGrowthIterations++;\n }\n\n var gridUpdateAllowed = !this.isTreeGrowing && !this.isGrowthFinished;\n var forceToNodeSurroundingUpdate = this.growTreeIterations % 10 == 1 && this.isTreeGrowing || this.afterGrowthIterations % 10 == 1 && this.isGrowthFinished;\n\n this.totalDisplacement = 0;\n this.graphManager.updateBounds();\n this.calcSpringForces();\n this.calcRepulsionForces(gridUpdateAllowed, forceToNodeSurroundingUpdate);\n this.calcGravitationalForces();\n this.moveNodes();\n this.animate();\n\n return false; // Layout is not ended yet return false\n};\n\nCoSELayout.prototype.getPositionsData = function () {\n var allNodes = this.graphManager.getAllNodes();\n var pData = {};\n for (var i = 0; i < allNodes.length; i++) {\n var rect = allNodes[i].rect;\n var id = allNodes[i].id;\n pData[id] = {\n id: id,\n x: rect.getCenterX(),\n y: rect.getCenterY(),\n w: rect.width,\n h: rect.height\n };\n }\n\n return pData;\n};\n\nCoSELayout.prototype.runSpringEmbedder = function () {\n this.initialAnimationPeriod = 25;\n this.animationPeriod = this.initialAnimationPeriod;\n var layoutEnded = false;\n\n // If aminate option is 'during' signal that layout is supposed to start iterating\n if (FDLayoutConstants.ANIMATE === 'during') {\n this.emit('layoutstarted');\n } else {\n // If aminate option is 'during' tick() function will be called on index.js\n while (!layoutEnded) {\n layoutEnded = this.tick();\n }\n\n this.graphManager.updateBounds();\n }\n};\n\n// overrides moveNodes method in FDLayout\nCoSELayout.prototype.moveNodes = function () {\n var lNodes = this.getAllNodes();\n var node;\n\n // calculate displacement for each node \n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n node.calculateDisplacement();\n }\n\n if (Object.keys(this.constraints).length > 0) {\n this.updateDisplacements();\n }\n\n // move each node\n for (var i = 0; i < lNodes.length; i++) {\n node = lNodes[i];\n node.move();\n }\n};\n\n// constraint related methods: initConstraintVariables and updateDisplacements\n\n// initialize constraint related variables\nCoSELayout.prototype.initConstraintVariables = function () {\n var self = this;\n this.idToNodeMap = new Map();\n this.fixedNodeSet = new Set();\n\n var allNodes = this.graphManager.getAllNodes();\n\n // fill idToNodeMap\n for (var i = 0; i < allNodes.length; i++) {\n var node = allNodes[i];\n this.idToNodeMap.set(node.id, node);\n }\n\n // calculate fixed node weight for given compound node\n var calculateCompoundWeight = function calculateCompoundWeight(compoundNode) {\n var nodes = compoundNode.getChild().getNodes();\n var node;\n var fixedNodeWeight = 0;\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n if (node.getChild() == null) {\n if (self.fixedNodeSet.has(node.id)) {\n fixedNodeWeight += 100;\n }\n } else {\n fixedNodeWeight += calculateCompoundWeight(node);\n }\n }\n return fixedNodeWeight;\n };\n\n if (this.constraints.fixedNodeConstraint) {\n // fill fixedNodeSet\n this.constraints.fixedNodeConstraint.forEach(function (nodeData) {\n self.fixedNodeSet.add(nodeData.nodeId);\n });\n\n // assign fixed node weights to compounds if they contain fixed nodes\n var allNodes = this.graphManager.getAllNodes();\n var node;\n\n for (var i = 0; i < allNodes.length; i++) {\n node = allNodes[i];\n if (node.getChild() != null) {\n var fixedNodeWeight = calculateCompoundWeight(node);\n if (fixedNodeWeight > 0) {\n node.fixedNodeWeight = fixedNodeWeight;\n }\n }\n }\n }\n\n if (this.constraints.relativePlacementConstraint) {\n var nodeToDummyForVerticalAlignment = new Map();\n var nodeToDummyForHorizontalAlignment = new Map();\n this.dummyToNodeForVerticalAlignment = new Map();\n this.dummyToNodeForHorizontalAlignment = new Map();\n this.fixedNodesOnHorizontal = new Set();\n this.fixedNodesOnVertical = new Set();\n\n // fill maps and sets\n this.fixedNodeSet.forEach(function (nodeId) {\n self.fixedNodesOnHorizontal.add(nodeId);\n self.fixedNodesOnVertical.add(nodeId);\n });\n\n if (this.constraints.alignmentConstraint) {\n if (this.constraints.alignmentConstraint.vertical) {\n var verticalAlignment = this.constraints.alignmentConstraint.vertical;\n for (var i = 0; i < verticalAlignment.length; i++) {\n this.dummyToNodeForVerticalAlignment.set(\"dummy\" + i, []);\n verticalAlignment[i].forEach(function (nodeId) {\n nodeToDummyForVerticalAlignment.set(nodeId, \"dummy\" + i);\n self.dummyToNodeForVerticalAlignment.get(\"dummy\" + i).push(nodeId);\n if (self.fixedNodeSet.has(nodeId)) {\n self.fixedNodesOnHorizontal.add(\"dummy\" + i);\n }\n });\n }\n }\n if (this.constraints.alignmentConstraint.horizontal) {\n var horizontalAlignment = this.constraints.alignmentConstraint.horizontal;\n for (var i = 0; i < horizontalAlignment.length; i++) {\n this.dummyToNodeForHorizontalAlignment.set(\"dummy\" + i, []);\n horizontalAlignment[i].forEach(function (nodeId) {\n nodeToDummyForHorizontalAlignment.set(nodeId, \"dummy\" + i);\n self.dummyToNodeForHorizontalAlignment.get(\"dummy\" + i).push(nodeId);\n if (self.fixedNodeSet.has(nodeId)) {\n self.fixedNodesOnVertical.add(\"dummy\" + i);\n }\n });\n }\n }\n }\n\n if (CoSEConstants.RELAX_MOVEMENT_ON_CONSTRAINTS) {\n\n this.shuffle = function (array) {\n var j, x, i;\n for (i = array.length - 1; i >= 2 * array.length / 3; i--) {\n j = Math.floor(Math.random() * (i + 1));\n x = array[i];\n array[i] = array[j];\n array[j] = x;\n }\n return array;\n };\n\n this.nodesInRelativeHorizontal = [];\n this.nodesInRelativeVertical = [];\n this.nodeToRelativeConstraintMapHorizontal = new Map();\n this.nodeToRelativeConstraintMapVertical = new Map();\n this.nodeToTempPositionMapHorizontal = new Map();\n this.nodeToTempPositionMapVertical = new Map();\n\n // fill arrays and maps\n this.constraints.relativePlacementConstraint.forEach(function (constraint) {\n if (constraint.left) {\n var nodeIdLeft = nodeToDummyForVerticalAlignment.has(constraint.left) ? nodeToDummyForVerticalAlignment.get(constraint.left) : constraint.left;\n var nodeIdRight = nodeToDummyForVerticalAlignment.has(constraint.right) ? nodeToDummyForVerticalAlignment.get(constraint.right) : constraint.right;\n\n if (!self.nodesInRelativeHorizontal.includes(nodeIdLeft)) {\n self.nodesInRelativeHorizontal.push(nodeIdLeft);\n self.nodeToRelativeConstraintMapHorizontal.set(nodeIdLeft, []);\n if (self.dummyToNodeForVerticalAlignment.has(nodeIdLeft)) {\n self.nodeToTempPositionMapHorizontal.set(nodeIdLeft, self.idToNodeMap.get(self.dummyToNodeForVerticalAlignment.get(nodeIdLeft)[0]).getCenterX());\n } else {\n self.nodeToTempPositionMapHorizontal.set(nodeIdLeft, self.idToNodeMap.get(nodeIdLeft).getCenterX());\n }\n }\n if (!self.nodesInRelativeHorizontal.includes(nodeIdRight)) {\n self.nodesInRelativeHorizontal.push(nodeIdRight);\n self.nodeToRelativeConstraintMapHorizontal.set(nodeIdRight, []);\n if (self.dummyToNodeForVerticalAlignment.has(nodeIdRight)) {\n self.nodeToTempPositionMapHorizontal.set(nodeIdRight, self.idToNodeMap.get(self.dummyToNodeForVerticalAlignment.get(nodeIdRight)[0]).getCenterX());\n } else {\n self.nodeToTempPositionMapHorizontal.set(nodeIdRight, self.idToNodeMap.get(nodeIdRight).getCenterX());\n }\n }\n\n self.nodeToRelativeConstraintMapHorizontal.get(nodeIdLeft).push({ right: nodeIdRight, gap: constraint.gap });\n self.nodeToRelativeConstraintMapHorizontal.get(nodeIdRight).push({ left: nodeIdLeft, gap: constraint.gap });\n } else {\n var nodeIdTop = nodeToDummyForHorizontalAlignment.has(constraint.top) ? nodeToDummyForHorizontalAlignment.get(constraint.top) : constraint.top;\n var nodeIdBottom = nodeToDummyForHorizontalAlignment.has(constraint.bottom) ? nodeToDummyForHorizontalAlignment.get(constraint.bottom) : constraint.bottom;\n\n if (!self.nodesInRelativeVertical.includes(nodeIdTop)) {\n self.nodesInRelativeVertical.push(nodeIdTop);\n self.nodeToRelativeConstraintMapVertical.set(nodeIdTop, []);\n if (self.dummyToNodeForHorizontalAlignment.has(nodeIdTop)) {\n self.nodeToTempPositionMapVertical.set(nodeIdTop, self.idToNodeMap.get(self.dummyToNodeForHorizontalAlignment.get(nodeIdTop)[0]).getCenterY());\n } else {\n self.nodeToTempPositionMapVertical.set(nodeIdTop, self.idToNodeMap.get(nodeIdTop).getCenterY());\n }\n }\n if (!self.nodesInRelativeVertical.includes(nodeIdBottom)) {\n self.nodesInRelativeVertical.push(nodeIdBottom);\n self.nodeToRelativeConstraintMapVertical.set(nodeIdBottom, []);\n if (self.dummyToNodeForHorizontalAlignment.has(nodeIdBottom)) {\n self.nodeToTempPositionMapVertical.set(nodeIdBottom, self.idToNodeMap.get(self.dummyToNodeForHorizontalAlignment.get(nodeIdBottom)[0]).getCenterY());\n } else {\n self.nodeToTempPositionMapVertical.set(nodeIdBottom, self.idToNodeMap.get(nodeIdBottom).getCenterY());\n }\n }\n self.nodeToRelativeConstraintMapVertical.get(nodeIdTop).push({ bottom: nodeIdBottom, gap: constraint.gap });\n self.nodeToRelativeConstraintMapVertical.get(nodeIdBottom).push({ top: nodeIdTop, gap: constraint.gap });\n }\n });\n } else {\n var subGraphOnHorizontal = new Map(); // subgraph from vertical RP constraints\n var subGraphOnVertical = new Map(); // subgraph from vertical RP constraints\n\n // construct subgraphs from relative placement constraints \n this.constraints.relativePlacementConstraint.forEach(function (constraint) {\n if (constraint.left) {\n var left = nodeToDummyForVerticalAlignment.has(constraint.left) ? nodeToDummyForVerticalAlignment.get(constraint.left) : constraint.left;\n var right = nodeToDummyForVerticalAlignment.has(constraint.right) ? nodeToDummyForVerticalAlignment.get(constraint.right) : constraint.right;\n if (subGraphOnHorizontal.has(left)) {\n subGraphOnHorizontal.get(left).push(right);\n } else {\n subGraphOnHorizontal.set(left, [right]);\n }\n if (subGraphOnHorizontal.has(right)) {\n subGraphOnHorizontal.get(right).push(left);\n } else {\n subGraphOnHorizontal.set(right, [left]);\n }\n } else {\n var top = nodeToDummyForHorizontalAlignment.has(constraint.top) ? nodeToDummyForHorizontalAlignment.get(constraint.top) : constraint.top;\n var bottom = nodeToDummyForHorizontalAlignment.has(constraint.bottom) ? nodeToDummyForHorizontalAlignment.get(constraint.bottom) : constraint.bottom;\n if (subGraphOnVertical.has(top)) {\n subGraphOnVertical.get(top).push(bottom);\n } else {\n subGraphOnVertical.set(top, [bottom]);\n }\n if (subGraphOnVertical.has(bottom)) {\n subGraphOnVertical.get(bottom).push(top);\n } else {\n subGraphOnVertical.set(bottom, [top]);\n }\n }\n });\n\n // function to construct components from a given graph \n // also returns an array that keeps whether each component contains fixed node\n var constructComponents = function constructComponents(graph, fixedNodes) {\n var components = [];\n var isFixed = [];\n var queue = new LinkedList();\n var visited = new Set();\n var count = 0;\n\n graph.forEach(function (value, key) {\n if (!visited.has(key)) {\n components[count] = [];\n isFixed[count] = false;\n var currentNode = key;\n queue.push(currentNode);\n visited.add(currentNode);\n components[count].push(currentNode);\n\n while (queue.length != 0) {\n currentNode = queue.shift();\n if (fixedNodes.has(currentNode)) {\n isFixed[count] = true;\n }\n var neighbors = graph.get(currentNode);\n neighbors.forEach(function (neighbor) {\n if (!visited.has(neighbor)) {\n queue.push(neighbor);\n visited.add(neighbor);\n components[count].push(neighbor);\n }\n });\n }\n count++;\n }\n });\n\n return { components: components, isFixed: isFixed };\n };\n\n var resultOnHorizontal = constructComponents(subGraphOnHorizontal, self.fixedNodesOnHorizontal);\n this.componentsOnHorizontal = resultOnHorizontal.components;\n this.fixedComponentsOnHorizontal = resultOnHorizontal.isFixed;\n var resultOnVertical = constructComponents(subGraphOnVertical, self.fixedNodesOnVertical);\n this.componentsOnVertical = resultOnVertical.components;\n this.fixedComponentsOnVertical = resultOnVertical.isFixed;\n }\n }\n};\n\n// updates node displacements based on constraints\nCoSELayout.prototype.updateDisplacements = function () {\n var self = this;\n if (this.constraints.fixedNodeConstraint) {\n this.constraints.fixedNodeConstraint.forEach(function (nodeData) {\n var fixedNode = self.idToNodeMap.get(nodeData.nodeId);\n fixedNode.displacementX = 0;\n fixedNode.displacementY = 0;\n });\n }\n\n if (this.constraints.alignmentConstraint) {\n if (this.constraints.alignmentConstraint.vertical) {\n var allVerticalAlignments = this.constraints.alignmentConstraint.vertical;\n for (var i = 0; i < allVerticalAlignments.length; i++) {\n var totalDisplacementX = 0;\n for (var j = 0; j < allVerticalAlignments[i].length; j++) {\n if (this.fixedNodeSet.has(allVerticalAlignments[i][j])) {\n totalDisplacementX = 0;\n break;\n }\n totalDisplacementX += this.idToNodeMap.get(allVerticalAlignments[i][j]).displacementX;\n }\n var averageDisplacementX = totalDisplacementX / allVerticalAlignments[i].length;\n for (var j = 0; j < allVerticalAlignments[i].length; j++) {\n this.idToNodeMap.get(allVerticalAlignments[i][j]).displacementX = averageDisplacementX;\n }\n }\n }\n if (this.constraints.alignmentConstraint.horizontal) {\n var allHorizontalAlignments = this.constraints.alignmentConstraint.horizontal;\n for (var i = 0; i < allHorizontalAlignments.length; i++) {\n var totalDisplacementY = 0;\n for (var j = 0; j < allHorizontalAlignments[i].length; j++) {\n if (this.fixedNodeSet.has(allHorizontalAlignments[i][j])) {\n totalDisplacementY = 0;\n break;\n }\n totalDisplacementY += this.idToNodeMap.get(allHorizontalAlignments[i][j]).displacementY;\n }\n var averageDisplacementY = totalDisplacementY / allHorizontalAlignments[i].length;\n for (var j = 0; j < allHorizontalAlignments[i].length; j++) {\n this.idToNodeMap.get(allHorizontalAlignments[i][j]).displacementY = averageDisplacementY;\n }\n }\n }\n }\n\n if (this.constraints.relativePlacementConstraint) {\n\n if (CoSEConstants.RELAX_MOVEMENT_ON_CONSTRAINTS) {\n // shuffle array to randomize node processing order\n if (this.totalIterations % 10 == 0) {\n this.shuffle(this.nodesInRelativeHorizontal);\n this.shuffle(this.nodesInRelativeVertical);\n }\n\n this.nodesInRelativeHorizontal.forEach(function (nodeId) {\n if (!self.fixedNodesOnHorizontal.has(nodeId)) {\n var displacement = 0;\n if (self.dummyToNodeForVerticalAlignment.has(nodeId)) {\n displacement = self.idToNodeMap.get(self.dummyToNodeForVerticalAlignment.get(nodeId)[0]).displacementX;\n } else {\n displacement = self.idToNodeMap.get(nodeId).displacementX;\n }\n self.nodeToRelativeConstraintMapHorizontal.get(nodeId).forEach(function (constraint) {\n if (constraint.right) {\n var diff = self.nodeToTempPositionMapHorizontal.get(constraint.right) - self.nodeToTempPositionMapHorizontal.get(nodeId) - displacement;\n if (diff < constraint.gap) {\n displacement -= constraint.gap - diff;\n }\n } else {\n var diff = self.nodeToTempPositionMapHorizontal.get(nodeId) - self.nodeToTempPositionMapHorizontal.get(constraint.left) + displacement;\n if (diff < constraint.gap) {\n displacement += constraint.gap - diff;\n }\n }\n });\n self.nodeToTempPositionMapHorizontal.set(nodeId, self.nodeToTempPositionMapHorizontal.get(nodeId) + displacement);\n if (self.dummyToNodeForVerticalAlignment.has(nodeId)) {\n self.dummyToNodeForVerticalAlignment.get(nodeId).forEach(function (nodeId) {\n self.idToNodeMap.get(nodeId).displacementX = displacement;\n });\n } else {\n self.idToNodeMap.get(nodeId).displacementX = displacement;\n }\n }\n });\n\n this.nodesInRelativeVertical.forEach(function (nodeId) {\n if (!self.fixedNodesOnHorizontal.has(nodeId)) {\n var displacement = 0;\n if (self.dummyToNodeForHorizontalAlignment.has(nodeId)) {\n displacement = self.idToNodeMap.get(self.dummyToNodeForHorizontalAlignment.get(nodeId)[0]).displacementY;\n } else {\n displacement = self.idToNodeMap.get(nodeId).displacementY;\n }\n self.nodeToRelativeConstraintMapVertical.get(nodeId).forEach(function (constraint) {\n if (constraint.bottom) {\n var diff = self.nodeToTempPositionMapVertical.get(constraint.bottom) - self.nodeToTempPositionMapVertical.get(nodeId) - displacement;\n if (diff < constraint.gap) {\n displacement -= constraint.gap - diff;\n }\n } else {\n var diff = self.nodeToTempPositionMapVertical.get(nodeId) - self.nodeToTempPositionMapVertical.get(constraint.top) + displacement;\n if (diff < constraint.gap) {\n displacement += constraint.gap - diff;\n }\n }\n });\n self.nodeToTempPositionMapVertical.set(nodeId, self.nodeToTempPositionMapVertical.get(nodeId) + displacement);\n if (self.dummyToNodeForHorizontalAlignment.has(nodeId)) {\n self.dummyToNodeForHorizontalAlignment.get(nodeId).forEach(function (nodeId) {\n self.idToNodeMap.get(nodeId).displacementY = displacement;\n });\n } else {\n self.idToNodeMap.get(nodeId).displacementY = displacement;\n }\n }\n });\n } else {\n for (var i = 0; i < this.componentsOnHorizontal.length; i++) {\n var component = this.componentsOnHorizontal[i];\n if (this.fixedComponentsOnHorizontal[i]) {\n for (var j = 0; j < component.length; j++) {\n if (this.dummyToNodeForVerticalAlignment.has(component[j])) {\n this.dummyToNodeForVerticalAlignment.get(component[j]).forEach(function (nodeId) {\n self.idToNodeMap.get(nodeId).displacementX = 0;\n });\n } else {\n this.idToNodeMap.get(component[j]).displacementX = 0;\n }\n }\n } else {\n var sum = 0;\n var count = 0;\n for (var j = 0; j < component.length; j++) {\n if (this.dummyToNodeForVerticalAlignment.has(component[j])) {\n var actualNodes = this.dummyToNodeForVerticalAlignment.get(component[j]);\n sum += actualNodes.length * this.idToNodeMap.get(actualNodes[0]).displacementX;\n count += actualNodes.length;\n } else {\n sum += this.idToNodeMap.get(component[j]).displacementX;\n count++;\n }\n }\n var averageDisplacement = sum / count;\n for (var j = 0; j < component.length; j++) {\n if (this.dummyToNodeForVerticalAlignment.has(component[j])) {\n this.dummyToNodeForVerticalAlignment.get(component[j]).forEach(function (nodeId) {\n self.idToNodeMap.get(nodeId).displacementX = averageDisplacement;\n });\n } else {\n this.idToNodeMap.get(component[j]).displacementX = averageDisplacement;\n }\n }\n }\n }\n\n for (var i = 0; i < this.componentsOnVertical.length; i++) {\n var component = this.componentsOnVertical[i];\n if (this.fixedComponentsOnVertical[i]) {\n for (var j = 0; j < component.length; j++) {\n if (this.dummyToNodeForHorizontalAlignment.has(component[j])) {\n this.dummyToNodeForHorizontalAlignment.get(component[j]).forEach(function (nodeId) {\n self.idToNodeMap.get(nodeId).displacementY = 0;\n });\n } else {\n this.idToNodeMap.get(component[j]).displacementY = 0;\n }\n }\n } else {\n var sum = 0;\n var count = 0;\n for (var j = 0; j < component.length; j++) {\n if (this.dummyToNodeForHorizontalAlignment.has(component[j])) {\n var actualNodes = this.dummyToNodeForHorizontalAlignment.get(component[j]);\n sum += actualNodes.length * this.idToNodeMap.get(actualNodes[0]).displacementY;\n count += actualNodes.length;\n } else {\n sum += this.idToNodeMap.get(component[j]).displacementY;\n count++;\n }\n }\n var averageDisplacement = sum / count;\n for (var j = 0; j < component.length; j++) {\n if (this.dummyToNodeForHorizontalAlignment.has(component[j])) {\n this.dummyToNodeForHorizontalAlignment.get(component[j]).forEach(function (nodeId) {\n self.idToNodeMap.get(nodeId).displacementY = averageDisplacement;\n });\n } else {\n this.idToNodeMap.get(component[j]).displacementY = averageDisplacement;\n }\n }\n }\n }\n }\n }\n};\n\nCoSELayout.prototype.calculateNodesToApplyGravitationTo = function () {\n var nodeList = [];\n var graph;\n\n var graphs = this.graphManager.getGraphs();\n var size = graphs.length;\n var i;\n for (i = 0; i < size; i++) {\n graph = graphs[i];\n\n graph.updateConnected();\n\n if (!graph.isConnected) {\n nodeList = nodeList.concat(graph.getNodes());\n }\n }\n\n return nodeList;\n};\n\nCoSELayout.prototype.createBendpoints = function () {\n var edges = [];\n edges = edges.concat(this.graphManager.getAllEdges());\n var visited = new Set();\n var i;\n for (i = 0; i < edges.length; i++) {\n var edge = edges[i];\n\n if (!visited.has(edge)) {\n var source = edge.getSource();\n var target = edge.getTarget();\n\n if (source == target) {\n edge.getBendpoints().push(new PointD());\n edge.getBendpoints().push(new PointD());\n this.createDummyNodesForBendpoints(edge);\n visited.add(edge);\n } else {\n var edgeList = [];\n\n edgeList = edgeList.concat(source.getEdgeListToNode(target));\n edgeList = edgeList.concat(target.getEdgeListToNode(source));\n\n if (!visited.has(edgeList[0])) {\n if (edgeList.length > 1) {\n var k;\n for (k = 0; k < edgeList.length; k++) {\n var multiEdge = edgeList[k];\n multiEdge.getBendpoints().push(new PointD());\n this.createDummyNodesForBendpoints(multiEdge);\n }\n }\n edgeList.forEach(function (edge) {\n visited.add(edge);\n });\n }\n }\n }\n\n if (visited.size == edges.length) {\n break;\n }\n }\n};\n\nCoSELayout.prototype.positionNodesRadially = function (forest) {\n // We tile the trees to a grid row by row; first tree starts at (0,0)\n var currentStartingPoint = new Point(0, 0);\n var numberOfColumns = Math.ceil(Math.sqrt(forest.length));\n var height = 0;\n var currentY = 0;\n var currentX = 0;\n var point = new PointD(0, 0);\n\n for (var i = 0; i < forest.length; i++) {\n if (i % numberOfColumns == 0) {\n // Start of a new row, make the x coordinate 0, increment the\n // y coordinate with the max height of the previous row\n currentX = 0;\n currentY = height;\n\n if (i != 0) {\n currentY += CoSEConstants.DEFAULT_COMPONENT_SEPERATION;\n }\n\n height = 0;\n }\n\n var tree = forest[i];\n\n // Find the center of the tree\n var centerNode = Layout.findCenterOfTree(tree);\n\n // Set the staring point of the next tree\n currentStartingPoint.x = currentX;\n currentStartingPoint.y = currentY;\n\n // Do a radial layout starting with the center\n point = CoSELayout.radialLayout(tree, centerNode, currentStartingPoint);\n\n if (point.y > height) {\n height = Math.floor(point.y);\n }\n\n currentX = Math.floor(point.x + CoSEConstants.DEFAULT_COMPONENT_SEPERATION);\n }\n\n this.transform(new PointD(LayoutConstants.WORLD_CENTER_X - point.x / 2, LayoutConstants.WORLD_CENTER_Y - point.y / 2));\n};\n\nCoSELayout.radialLayout = function (tree, centerNode, startingPoint) {\n var radialSep = Math.max(this.maxDiagonalInTree(tree), CoSEConstants.DEFAULT_RADIAL_SEPARATION);\n CoSELayout.branchRadialLayout(centerNode, null, 0, 359, 0, radialSep);\n var bounds = LGraph.calculateBounds(tree);\n\n var transform = new Transform();\n transform.setDeviceOrgX(bounds.getMinX());\n transform.setDeviceOrgY(bounds.getMinY());\n transform.setWorldOrgX(startingPoint.x);\n transform.setWorldOrgY(startingPoint.y);\n\n for (var i = 0; i < tree.length; i++) {\n var node = tree[i];\n node.transform(transform);\n }\n\n var bottomRight = new PointD(bounds.getMaxX(), bounds.getMaxY());\n\n return transform.inverseTransformPoint(bottomRight);\n};\n\nCoSELayout.branchRadialLayout = function (node, parentOfNode, startAngle, endAngle, distance, radialSeparation) {\n // First, position this node by finding its angle.\n var halfInterval = (endAngle - startAngle + 1) / 2;\n\n if (halfInterval < 0) {\n halfInterval += 180;\n }\n\n var nodeAngle = (halfInterval + startAngle) % 360;\n var teta = nodeAngle * IGeometry.TWO_PI / 360;\n\n // Make polar to java cordinate conversion.\n var cos_teta = Math.cos(teta);\n var x_ = distance * Math.cos(teta);\n var y_ = distance * Math.sin(teta);\n\n node.setCenter(x_, y_);\n\n // Traverse all neighbors of this node and recursively call this\n // function.\n var neighborEdges = [];\n neighborEdges = neighborEdges.concat(node.getEdges());\n var childCount = neighborEdges.length;\n\n if (parentOfNode != null) {\n childCount--;\n }\n\n var branchCount = 0;\n\n var incEdgesCount = neighborEdges.length;\n var startIndex;\n\n var edges = node.getEdgesBetween(parentOfNode);\n\n // If there are multiple edges, prune them until there remains only one\n // edge.\n while (edges.length > 1) {\n //neighborEdges.remove(edges.remove(0));\n var temp = edges[0];\n edges.splice(0, 1);\n var index = neighborEdges.indexOf(temp);\n if (index >= 0) {\n neighborEdges.splice(index, 1);\n }\n incEdgesCount--;\n childCount--;\n }\n\n if (parentOfNode != null) {\n //assert edges.length == 1;\n startIndex = (neighborEdges.indexOf(edges[0]) + 1) % incEdgesCount;\n } else {\n startIndex = 0;\n }\n\n var stepAngle = Math.abs(endAngle - startAngle) / childCount;\n\n for (var i = startIndex; branchCount != childCount; i = ++i % incEdgesCount) {\n var currentNeighbor = neighborEdges[i].getOtherEnd(node);\n\n // Don't back traverse to root node in current tree.\n if (currentNeighbor == parentOfNode) {\n continue;\n }\n\n var childStartAngle = (startAngle + branchCount * stepAngle) % 360;\n var childEndAngle = (childStartAngle + stepAngle) % 360;\n\n CoSELayout.branchRadialLayout(currentNeighbor, node, childStartAngle, childEndAngle, distance + radialSeparation, radialSeparation);\n\n branchCount++;\n }\n};\n\nCoSELayout.maxDiagonalInTree = function (tree) {\n var maxDiagonal = Integer.MIN_VALUE;\n\n for (var i = 0; i < tree.length; i++) {\n var node = tree[i];\n var diagonal = node.getDiagonal();\n\n if (diagonal > maxDiagonal) {\n maxDiagonal = diagonal;\n }\n }\n\n return maxDiagonal;\n};\n\nCoSELayout.prototype.calcRepulsionRange = function () {\n // formula is 2 x (level + 1) x idealEdgeLength\n return 2 * (this.level + 1) * this.idealEdgeLength;\n};\n\n// Tiling methods\n\n// Group zero degree members whose parents are not to be tiled, create dummy parents where needed and fill memberGroups by their dummp parent id's\nCoSELayout.prototype.groupZeroDegreeMembers = function () {\n var self = this;\n // array of [parent_id x oneDegreeNode_id]\n var tempMemberGroups = {}; // A temporary map of parent node and its zero degree members\n this.memberGroups = {}; // A map of dummy parent node and its zero degree members whose parents are not to be tiled\n this.idToDummyNode = {}; // A map of id to dummy node \n\n var zeroDegree = []; // List of zero degree nodes whose parents are not to be tiled\n var allNodes = this.graphManager.getAllNodes();\n\n // Fill zero degree list\n for (var i = 0; i < allNodes.length; i++) {\n var node = allNodes[i];\n var parent = node.getParent();\n // If a node has zero degree and its parent is not to be tiled if exists add that node to zeroDegres list\n if (this.getNodeDegreeWithChildren(node) === 0 && (parent.id == undefined || !this.getToBeTiled(parent))) {\n zeroDegree.push(node);\n }\n }\n\n // Create a map of parent node and its zero degree members\n for (var i = 0; i < zeroDegree.length; i++) {\n var node = zeroDegree[i]; // Zero degree node itself\n var p_id = node.getParent().id; // Parent id\n\n if (typeof tempMemberGroups[p_id] === \"undefined\") tempMemberGroups[p_id] = [];\n\n tempMemberGroups[p_id] = tempMemberGroups[p_id].concat(node); // Push node to the list belongs to its parent in tempMemberGroups\n }\n\n // If there are at least two nodes at a level, create a dummy compound for them\n Object.keys(tempMemberGroups).forEach(function (p_id) {\n if (tempMemberGroups[p_id].length > 1) {\n var dummyCompoundId = \"DummyCompound_\" + p_id; // The id of dummy compound which will be created soon\n self.memberGroups[dummyCompoundId] = tempMemberGroups[p_id]; // Add dummy compound to memberGroups\n\n var parent = tempMemberGroups[p_id][0].getParent(); // The parent of zero degree nodes will be the parent of new dummy compound\n\n // Create a dummy compound with calculated id\n var dummyCompound = new CoSENode(self.graphManager);\n dummyCompound.id = dummyCompoundId;\n dummyCompound.paddingLeft = parent.paddingLeft || 0;\n dummyCompound.paddingRight = parent.paddingRight || 0;\n dummyCompound.paddingBottom = parent.paddingBottom || 0;\n dummyCompound.paddingTop = parent.paddingTop || 0;\n\n self.idToDummyNode[dummyCompoundId] = dummyCompound;\n\n var dummyParentGraph = self.getGraphManager().add(self.newGraph(), dummyCompound);\n var parentGraph = parent.getChild();\n\n // Add dummy compound to parent the graph\n parentGraph.add(dummyCompound);\n\n // For each zero degree node in this level remove it from its parent graph and add it to the graph of dummy parent\n for (var i = 0; i < tempMemberGroups[p_id].length; i++) {\n var node = tempMemberGroups[p_id][i];\n\n parentGraph.remove(node);\n dummyParentGraph.add(node);\n }\n }\n });\n};\n\nCoSELayout.prototype.clearCompounds = function () {\n var childGraphMap = {};\n var idToNode = {};\n\n // Get compound ordering by finding the inner one first\n this.performDFSOnCompounds();\n\n for (var i = 0; i < this.compoundOrder.length; i++) {\n\n idToNode[this.compoundOrder[i].id] = this.compoundOrder[i];\n childGraphMap[this.compoundOrder[i].id] = [].concat(this.compoundOrder[i].getChild().getNodes());\n\n // Remove children of compounds\n this.graphManager.remove(this.compoundOrder[i].getChild());\n this.compoundOrder[i].child = null;\n }\n\n this.graphManager.resetAllNodes();\n\n // Tile the removed children\n this.tileCompoundMembers(childGraphMap, idToNode);\n};\n\nCoSELayout.prototype.clearZeroDegreeMembers = function () {\n var self = this;\n var tiledZeroDegreePack = this.tiledZeroDegreePack = [];\n\n Object.keys(this.memberGroups).forEach(function (id) {\n var compoundNode = self.idToDummyNode[id]; // Get the dummy compound\n\n tiledZeroDegreePack[id] = self.tileNodes(self.memberGroups[id], compoundNode.paddingLeft + compoundNode.paddingRight);\n\n // Set the width and height of the dummy compound as calculated\n compoundNode.rect.width = tiledZeroDegreePack[id].width;\n compoundNode.rect.height = tiledZeroDegreePack[id].height;\n compoundNode.setCenter(tiledZeroDegreePack[id].centerX, tiledZeroDegreePack[id].centerY);\n\n // compound left and top margings for labels\n // when node labels are included, these values may be set to different values below and are used in tilingPostLayout,\n // otherwise they stay as zero\n compoundNode.labelMarginLeft = 0;\n compoundNode.labelMarginTop = 0;\n\n // Update compound bounds considering its label properties and set label margins for left and top\n if (CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS) {\n\n var width = compoundNode.rect.width;\n var height = compoundNode.rect.height;\n\n if (compoundNode.labelWidth) {\n if (compoundNode.labelPosHorizontal == \"left\") {\n compoundNode.rect.x -= compoundNode.labelWidth;\n compoundNode.setWidth(width + compoundNode.labelWidth);\n compoundNode.labelMarginLeft = compoundNode.labelWidth;\n } else if (compoundNode.labelPosHorizontal == \"center\" && compoundNode.labelWidth > width) {\n compoundNode.rect.x -= (compoundNode.labelWidth - width) / 2;\n compoundNode.setWidth(compoundNode.labelWidth);\n compoundNode.labelMarginLeft = (compoundNode.labelWidth - width) / 2;\n } else if (compoundNode.labelPosHorizontal == \"right\") {\n compoundNode.setWidth(width + compoundNode.labelWidth);\n }\n }\n\n if (compoundNode.labelHeight) {\n if (compoundNode.labelPosVertical == \"top\") {\n compoundNode.rect.y -= compoundNode.labelHeight;\n compoundNode.setHeight(height + compoundNode.labelHeight);\n compoundNode.labelMarginTop = compoundNode.labelHeight;\n } else if (compoundNode.labelPosVertical == \"center\" && compoundNode.labelHeight > height) {\n compoundNode.rect.y -= (compoundNode.labelHeight - height) / 2;\n compoundNode.setHeight(compoundNode.labelHeight);\n compoundNode.labelMarginTop = (compoundNode.labelHeight - height) / 2;\n } else if (compoundNode.labelPosVertical == \"bottom\") {\n compoundNode.setHeight(height + compoundNode.labelHeight);\n }\n }\n }\n });\n};\n\nCoSELayout.prototype.repopulateCompounds = function () {\n for (var i = this.compoundOrder.length - 1; i >= 0; i--) {\n var lCompoundNode = this.compoundOrder[i];\n var id = lCompoundNode.id;\n var horizontalMargin = lCompoundNode.paddingLeft;\n var verticalMargin = lCompoundNode.paddingTop;\n var labelMarginLeft = lCompoundNode.labelMarginLeft;\n var labelMarginTop = lCompoundNode.labelMarginTop;\n\n this.adjustLocations(this.tiledMemberPack[id], lCompoundNode.rect.x, lCompoundNode.rect.y, horizontalMargin, verticalMargin, labelMarginLeft, labelMarginTop);\n }\n};\n\nCoSELayout.prototype.repopulateZeroDegreeMembers = function () {\n var self = this;\n var tiledPack = this.tiledZeroDegreePack;\n\n Object.keys(tiledPack).forEach(function (id) {\n var compoundNode = self.idToDummyNode[id]; // Get the dummy compound by its id\n var horizontalMargin = compoundNode.paddingLeft;\n var verticalMargin = compoundNode.paddingTop;\n var labelMarginLeft = compoundNode.labelMarginLeft;\n var labelMarginTop = compoundNode.labelMarginTop;\n\n // Adjust the positions of nodes wrt its compound\n self.adjustLocations(tiledPack[id], compoundNode.rect.x, compoundNode.rect.y, horizontalMargin, verticalMargin, labelMarginLeft, labelMarginTop);\n });\n};\n\nCoSELayout.prototype.getToBeTiled = function (node) {\n var id = node.id;\n //firstly check the previous results\n if (this.toBeTiled[id] != null) {\n return this.toBeTiled[id];\n }\n\n //only compound nodes are to be tiled\n var childGraph = node.getChild();\n if (childGraph == null) {\n this.toBeTiled[id] = false;\n return false;\n }\n\n var children = childGraph.getNodes(); // Get the children nodes\n\n //a compound node is not to be tiled if all of its compound children are not to be tiled\n for (var i = 0; i < children.length; i++) {\n var theChild = children[i];\n\n if (this.getNodeDegree(theChild) > 0) {\n this.toBeTiled[id] = false;\n return false;\n }\n\n //pass the children not having the compound structure\n if (theChild.getChild() == null) {\n this.toBeTiled[theChild.id] = false;\n continue;\n }\n\n if (!this.getToBeTiled(theChild)) {\n this.toBeTiled[id] = false;\n return false;\n }\n }\n this.toBeTiled[id] = true;\n return true;\n};\n\n// Get degree of a node depending of its edges and independent of its children\nCoSELayout.prototype.getNodeDegree = function (node) {\n var id = node.id;\n var edges = node.getEdges();\n var degree = 0;\n\n // For the edges connected\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n if (edge.getSource().id !== edge.getTarget().id) {\n degree = degree + 1;\n }\n }\n return degree;\n};\n\n// Get degree of a node with its children\nCoSELayout.prototype.getNodeDegreeWithChildren = function (node) {\n var degree = this.getNodeDegree(node);\n if (node.getChild() == null) {\n return degree;\n }\n var children = node.getChild().getNodes();\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n degree += this.getNodeDegreeWithChildren(child);\n }\n return degree;\n};\n\nCoSELayout.prototype.performDFSOnCompounds = function () {\n this.compoundOrder = [];\n this.fillCompexOrderByDFS(this.graphManager.getRoot().getNodes());\n};\n\nCoSELayout.prototype.fillCompexOrderByDFS = function (children) {\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child.getChild() != null) {\n this.fillCompexOrderByDFS(child.getChild().getNodes());\n }\n if (this.getToBeTiled(child)) {\n this.compoundOrder.push(child);\n }\n }\n};\n\n/**\n* This method places each zero degree member wrt given (x,y) coordinates (top left).\n*/\nCoSELayout.prototype.adjustLocations = function (organization, x, y, compoundHorizontalMargin, compoundVerticalMargin, compoundLabelMarginLeft, compoundLabelMarginTop) {\n x += compoundHorizontalMargin + compoundLabelMarginLeft;\n y += compoundVerticalMargin + compoundLabelMarginTop;\n\n var left = x;\n\n for (var i = 0; i < organization.rows.length; i++) {\n var row = organization.rows[i];\n x = left;\n var maxHeight = 0;\n\n for (var j = 0; j < row.length; j++) {\n var lnode = row[j];\n\n lnode.rect.x = x; // + lnode.rect.width / 2;\n lnode.rect.y = y; // + lnode.rect.height / 2;\n\n x += lnode.rect.width + organization.horizontalPadding;\n\n if (lnode.rect.height > maxHeight) maxHeight = lnode.rect.height;\n }\n\n y += maxHeight + organization.verticalPadding;\n }\n};\n\nCoSELayout.prototype.tileCompoundMembers = function (childGraphMap, idToNode) {\n var self = this;\n this.tiledMemberPack = [];\n\n Object.keys(childGraphMap).forEach(function (id) {\n // Get the compound node\n var compoundNode = idToNode[id];\n\n self.tiledMemberPack[id] = self.tileNodes(childGraphMap[id], compoundNode.paddingLeft + compoundNode.paddingRight);\n\n compoundNode.rect.width = self.tiledMemberPack[id].width;\n compoundNode.rect.height = self.tiledMemberPack[id].height;\n compoundNode.setCenter(self.tiledMemberPack[id].centerX, self.tiledMemberPack[id].centerY);\n\n // compound left and top margings for labels\n // when node labels are included, these values may be set to different values below and are used in tilingPostLayout,\n // otherwise they stay as zero\n compoundNode.labelMarginLeft = 0;\n compoundNode.labelMarginTop = 0;\n\n // Update compound bounds considering its label properties and set label margins for left and top\n if (CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS) {\n\n var width = compoundNode.rect.width;\n var height = compoundNode.rect.height;\n\n if (compoundNode.labelWidth) {\n if (compoundNode.labelPosHorizontal == \"left\") {\n compoundNode.rect.x -= compoundNode.labelWidth;\n compoundNode.setWidth(width + compoundNode.labelWidth);\n compoundNode.labelMarginLeft = compoundNode.labelWidth;\n } else if (compoundNode.labelPosHorizontal == \"center\" && compoundNode.labelWidth > width) {\n compoundNode.rect.x -= (compoundNode.labelWidth - width) / 2;\n compoundNode.setWidth(compoundNode.labelWidth);\n compoundNode.labelMarginLeft = (compoundNode.labelWidth - width) / 2;\n } else if (compoundNode.labelPosHorizontal == \"right\") {\n compoundNode.setWidth(width + compoundNode.labelWidth);\n }\n }\n\n if (compoundNode.labelHeight) {\n if (compoundNode.labelPosVertical == \"top\") {\n compoundNode.rect.y -= compoundNode.labelHeight;\n compoundNode.setHeight(height + compoundNode.labelHeight);\n compoundNode.labelMarginTop = compoundNode.labelHeight;\n } else if (compoundNode.labelPosVertical == \"center\" && compoundNode.labelHeight > height) {\n compoundNode.rect.y -= (compoundNode.labelHeight - height) / 2;\n compoundNode.setHeight(compoundNode.labelHeight);\n compoundNode.labelMarginTop = (compoundNode.labelHeight - height) / 2;\n } else if (compoundNode.labelPosVertical == \"bottom\") {\n compoundNode.setHeight(height + compoundNode.labelHeight);\n }\n }\n }\n });\n};\n\nCoSELayout.prototype.tileNodes = function (nodes, minWidth) {\n var horizontalOrg = this.tileNodesByFavoringDim(nodes, minWidth, true);\n var verticalOrg = this.tileNodesByFavoringDim(nodes, minWidth, false);\n\n var horizontalRatio = this.getOrgRatio(horizontalOrg);\n var verticalRatio = this.getOrgRatio(verticalOrg);\n var bestOrg;\n\n // the best ratio is the one that is closer to 1 since the ratios are already normalized\n // and the best organization is the one that has the best ratio\n if (verticalRatio < horizontalRatio) {\n bestOrg = verticalOrg;\n } else {\n bestOrg = horizontalOrg;\n }\n\n return bestOrg;\n};\n\n// get the width/height ratio of the organization that is normalized so that it will not be less than 1\nCoSELayout.prototype.getOrgRatio = function (organization) {\n // get dimensions and calculate the initial ratio\n var width = organization.width;\n var height = organization.height;\n var ratio = width / height;\n\n // if the initial ratio is less then 1 then inverse it\n if (ratio < 1) {\n ratio = 1 / ratio;\n }\n\n // return the normalized ratio\n return ratio;\n};\n\n/*\n * Calculates the ideal width for the rows. This method assumes that\n * each node has the same sizes and calculates the ideal row width that\n * approximates a square shaped complex accordingly. However, since nodes would\n * have different sizes some rows would have different sizes and the resulting\n * shape would not be an exact square.\n */\nCoSELayout.prototype.calcIdealRowWidth = function (members, favorHorizontalDim) {\n // To approximate a square shaped complex we need to make complex width equal to complex height.\n // To achieve this we need to solve the following equation system for hc:\n // (x + bx) * hc - bx = (y + by) * vc - by, hc * vc = n\n // where x is the avarage width of the nodes, y is the avarage height of nodes\n // bx and by are the buffer sizes in horizontal and vertical dimensions accordingly,\n // hc and vc are the number of rows in horizontal and vertical dimensions\n // n is number of members.\n\n var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL;\n var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL;\n\n // number of members\n var membersSize = members.length;\n\n // sum of the width of all members\n var totalWidth = 0;\n\n // sum of the height of all members\n var totalHeight = 0;\n\n var maxWidth = 0;\n\n // traverse all members to calculate total width and total height and get the maximum members width\n members.forEach(function (node) {\n totalWidth += node.getWidth();\n totalHeight += node.getHeight();\n\n if (node.getWidth() > maxWidth) {\n maxWidth = node.getWidth();\n }\n });\n\n // average width of the members\n var averageWidth = totalWidth / membersSize;\n\n // average height of the members\n var averageHeight = totalHeight / membersSize;\n\n // solving the initial equation system for the hc yields the following second degree equation:\n // hc^2 * (x+bx) + hc * (by - bx) - n * (y + by) = 0\n\n // the delta value to solve the equation above for hc\n var delta = Math.pow(verticalPadding - horizontalPadding, 2) + 4 * (averageWidth + horizontalPadding) * (averageHeight + verticalPadding) * membersSize;\n\n // solve the equation using delta value to calculate the horizontal count\n // that represents the number of nodes in an ideal row\n var horizontalCountDouble = (horizontalPadding - verticalPadding + Math.sqrt(delta)) / (2 * (averageWidth + horizontalPadding));\n // round the calculated horizontal count up or down according to the favored dimension\n var horizontalCount;\n\n if (favorHorizontalDim) {\n horizontalCount = Math.ceil(horizontalCountDouble);\n // if horizontalCount count is not a float value then both of rounding to floor and ceil\n // will yield the same values. Instead of repeating the same calculation try going up\n // while favoring horizontal dimension in such cases\n if (horizontalCount == horizontalCountDouble) {\n horizontalCount++;\n }\n } else {\n horizontalCount = Math.floor(horizontalCountDouble);\n }\n\n // ideal width to be calculated\n var idealWidth = horizontalCount * (averageWidth + horizontalPadding) - horizontalPadding;\n\n // if max width is bigger than calculated ideal width reset ideal width to it\n if (maxWidth > idealWidth) {\n idealWidth = maxWidth;\n }\n\n // add the left-right margins to the ideal row width\n idealWidth += horizontalPadding * 2;\n\n // return the ideal row width1\n return idealWidth;\n};\n\nCoSELayout.prototype.tileNodesByFavoringDim = function (nodes, minWidth, favorHorizontalDim) {\n var verticalPadding = CoSEConstants.TILING_PADDING_VERTICAL;\n var horizontalPadding = CoSEConstants.TILING_PADDING_HORIZONTAL;\n var tilingCompareBy = CoSEConstants.TILING_COMPARE_BY;\n var organization = {\n rows: [],\n rowWidth: [],\n rowHeight: [],\n width: 0,\n height: minWidth, // assume minHeight equals to minWidth\n verticalPadding: verticalPadding,\n horizontalPadding: horizontalPadding,\n centerX: 0,\n centerY: 0\n };\n\n if (tilingCompareBy) {\n organization.idealRowWidth = this.calcIdealRowWidth(nodes, favorHorizontalDim);\n }\n\n var getNodeArea = function getNodeArea(n) {\n return n.rect.width * n.rect.height;\n };\n\n var areaCompareFcn = function areaCompareFcn(n1, n2) {\n return getNodeArea(n2) - getNodeArea(n1);\n };\n\n // Sort the nodes in descending order of their areas\n nodes.sort(function (n1, n2) {\n var cmpBy = areaCompareFcn;\n if (organization.idealRowWidth) {\n cmpBy = tilingCompareBy;\n return cmpBy(n1.id, n2.id);\n }\n return cmpBy(n1, n2);\n });\n\n // Create the organization -> calculate compound center\n var sumCenterX = 0;\n var sumCenterY = 0;\n for (var i = 0; i < nodes.length; i++) {\n var lNode = nodes[i];\n\n sumCenterX += lNode.getCenterX();\n sumCenterY += lNode.getCenterY();\n }\n\n organization.centerX = sumCenterX / nodes.length;\n organization.centerY = sumCenterY / nodes.length;\n\n // Create the organization -> tile members\n for (var i = 0; i < nodes.length; i++) {\n var lNode = nodes[i];\n\n if (organization.rows.length == 0) {\n this.insertNodeToRow(organization, lNode, 0, minWidth);\n } else if (this.canAddHorizontal(organization, lNode.rect.width, lNode.rect.height)) {\n var rowIndex = organization.rows.length - 1;\n if (!organization.idealRowWidth) {\n rowIndex = this.getShortestRowIndex(organization);\n }\n this.insertNodeToRow(organization, lNode, rowIndex, minWidth);\n } else {\n this.insertNodeToRow(organization, lNode, organization.rows.length, minWidth);\n }\n\n this.shiftToLastRow(organization);\n }\n\n return organization;\n};\n\nCoSELayout.prototype.insertNodeToRow = function (organization, node, rowIndex, minWidth) {\n var minCompoundSize = minWidth;\n\n // Add new row if needed\n if (rowIndex == organization.rows.length) {\n var secondDimension = [];\n\n organization.rows.push(secondDimension);\n organization.rowWidth.push(minCompoundSize);\n organization.rowHeight.push(0);\n }\n\n // Update row width\n var w = organization.rowWidth[rowIndex] + node.rect.width;\n\n if (organization.rows[rowIndex].length > 0) {\n w += organization.horizontalPadding;\n }\n\n organization.rowWidth[rowIndex] = w;\n // Update compound width\n if (organization.width < w) {\n organization.width = w;\n }\n\n // Update height\n var h = node.rect.height;\n if (rowIndex > 0) h += organization.verticalPadding;\n\n var extraHeight = 0;\n if (h > organization.rowHeight[rowIndex]) {\n extraHeight = organization.rowHeight[rowIndex];\n organization.rowHeight[rowIndex] = h;\n extraHeight = organization.rowHeight[rowIndex] - extraHeight;\n }\n\n organization.height += extraHeight;\n\n // Insert node\n organization.rows[rowIndex].push(node);\n};\n\n//Scans the rows of an organization and returns the one with the min width\nCoSELayout.prototype.getShortestRowIndex = function (organization) {\n var r = -1;\n var min = Number.MAX_VALUE;\n\n for (var i = 0; i < organization.rows.length; i++) {\n if (organization.rowWidth[i] < min) {\n r = i;\n min = organization.rowWidth[i];\n }\n }\n return r;\n};\n\n//Scans the rows of an organization and returns the one with the max width\nCoSELayout.prototype.getLongestRowIndex = function (organization) {\n var r = -1;\n var max = Number.MIN_VALUE;\n\n for (var i = 0; i < organization.rows.length; i++) {\n\n if (organization.rowWidth[i] > max) {\n r = i;\n max = organization.rowWidth[i];\n }\n }\n\n return r;\n};\n\n/**\n* This method checks whether adding extra width to the organization violates\n* the aspect ratio(1) or not.\n*/\nCoSELayout.prototype.canAddHorizontal = function (organization, extraWidth, extraHeight) {\n\n // if there is an ideal row width specified use it instead of checking the aspect ratio\n if (organization.idealRowWidth) {\n var lastRowIndex = organization.rows.length - 1;\n var lastRowWidth = organization.rowWidth[lastRowIndex];\n\n // check and return if ideal row width will be exceed if the node is added to the row\n return lastRowWidth + extraWidth + organization.horizontalPadding <= organization.idealRowWidth;\n }\n\n var sri = this.getShortestRowIndex(organization);\n\n if (sri < 0) {\n return true;\n }\n\n var min = organization.rowWidth[sri];\n\n if (min + organization.horizontalPadding + extraWidth <= organization.width) return true;\n\n var hDiff = 0;\n\n // Adding to an existing row\n if (organization.rowHeight[sri] < extraHeight) {\n if (sri > 0) hDiff = extraHeight + organization.verticalPadding - organization.rowHeight[sri];\n }\n\n var add_to_row_ratio;\n if (organization.width - min >= extraWidth + organization.horizontalPadding) {\n add_to_row_ratio = (organization.height + hDiff) / (min + extraWidth + organization.horizontalPadding);\n } else {\n add_to_row_ratio = (organization.height + hDiff) / organization.width;\n }\n\n // Adding a new row for this node\n hDiff = extraHeight + organization.verticalPadding;\n var add_new_row_ratio;\n if (organization.width < extraWidth) {\n add_new_row_ratio = (organization.height + hDiff) / extraWidth;\n } else {\n add_new_row_ratio = (organization.height + hDiff) / organization.width;\n }\n\n if (add_new_row_ratio < 1) add_new_row_ratio = 1 / add_new_row_ratio;\n\n if (add_to_row_ratio < 1) add_to_row_ratio = 1 / add_to_row_ratio;\n\n return add_to_row_ratio < add_new_row_ratio;\n};\n\n//If moving the last node from the longest row and adding it to the last\n//row makes the bounding box smaller, do it.\nCoSELayout.prototype.shiftToLastRow = function (organization) {\n var longest = this.getLongestRowIndex(organization);\n var last = organization.rowWidth.length - 1;\n var row = organization.rows[longest];\n var node = row[row.length - 1];\n\n var diff = node.width + organization.horizontalPadding;\n\n // Check if there is enough space on the last row\n if (organization.width - organization.rowWidth[last] > diff && longest != last) {\n // Remove the last element of the longest row\n row.splice(-1, 1);\n\n // Push it to the last row\n organization.rows[last].push(node);\n\n organization.rowWidth[longest] = organization.rowWidth[longest] - diff;\n organization.rowWidth[last] = organization.rowWidth[last] + diff;\n organization.width = organization.rowWidth[instance.getLongestRowIndex(organization)];\n\n // Update heights of the organization\n var maxHeight = Number.MIN_VALUE;\n for (var i = 0; i < row.length; i++) {\n if (row[i].height > maxHeight) maxHeight = row[i].height;\n }\n if (longest > 0) maxHeight += organization.verticalPadding;\n\n var prevTotal = organization.rowHeight[longest] + organization.rowHeight[last];\n\n organization.rowHeight[longest] = maxHeight;\n if (organization.rowHeight[last] < node.height + organization.verticalPadding) organization.rowHeight[last] = node.height + organization.verticalPadding;\n\n var finalTotal = organization.rowHeight[longest] + organization.rowHeight[last];\n organization.height += finalTotal - prevTotal;\n\n this.shiftToLastRow(organization);\n }\n};\n\nCoSELayout.prototype.tilingPreLayout = function () {\n if (CoSEConstants.TILE) {\n // Find zero degree nodes and create a compound for each level\n this.groupZeroDegreeMembers();\n // Tile and clear children of each compound\n this.clearCompounds();\n // Separately tile and clear zero degree nodes for each level\n this.clearZeroDegreeMembers();\n }\n};\n\nCoSELayout.prototype.tilingPostLayout = function () {\n if (CoSEConstants.TILE) {\n this.repopulateZeroDegreeMembers();\n this.repopulateCompounds();\n }\n};\n\n// -----------------------------------------------------------------------------\n// Section: Tree Reduction methods\n// -----------------------------------------------------------------------------\n// Reduce trees \nCoSELayout.prototype.reduceTrees = function () {\n var prunedNodesAll = [];\n var containsLeaf = true;\n var node;\n\n while (containsLeaf) {\n var allNodes = this.graphManager.getAllNodes();\n var prunedNodesInStepTemp = [];\n containsLeaf = false;\n\n for (var i = 0; i < allNodes.length; i++) {\n node = allNodes[i];\n if (node.getEdges().length == 1 && !node.getEdges()[0].isInterGraph && node.getChild() == null) {\n if (CoSEConstants.PURE_INCREMENTAL) {\n var otherEnd = node.getEdges()[0].getOtherEnd(node);\n var relativePosition = new DimensionD(node.getCenterX() - otherEnd.getCenterX(), node.getCenterY() - otherEnd.getCenterY());\n prunedNodesInStepTemp.push([node, node.getEdges()[0], node.getOwner(), relativePosition]);\n } else {\n prunedNodesInStepTemp.push([node, node.getEdges()[0], node.getOwner()]);\n }\n containsLeaf = true;\n }\n }\n if (containsLeaf == true) {\n var prunedNodesInStep = [];\n for (var j = 0; j < prunedNodesInStepTemp.length; j++) {\n if (prunedNodesInStepTemp[j][0].getEdges().length == 1) {\n prunedNodesInStep.push(prunedNodesInStepTemp[j]);\n prunedNodesInStepTemp[j][0].getOwner().remove(prunedNodesInStepTemp[j][0]);\n }\n }\n prunedNodesAll.push(prunedNodesInStep);\n this.graphManager.resetAllNodes();\n this.graphManager.resetAllEdges();\n }\n }\n this.prunedNodesAll = prunedNodesAll;\n};\n\n// Grow tree one step \nCoSELayout.prototype.growTree = function (prunedNodesAll) {\n var lengthOfPrunedNodesInStep = prunedNodesAll.length;\n var prunedNodesInStep = prunedNodesAll[lengthOfPrunedNodesInStep - 1];\n\n var nodeData;\n for (var i = 0; i < prunedNodesInStep.length; i++) {\n nodeData = prunedNodesInStep[i];\n\n this.findPlaceforPrunedNode(nodeData);\n\n nodeData[2].add(nodeData[0]);\n nodeData[2].add(nodeData[1], nodeData[1].source, nodeData[1].target);\n }\n\n prunedNodesAll.splice(prunedNodesAll.length - 1, 1);\n this.graphManager.resetAllNodes();\n this.graphManager.resetAllEdges();\n};\n\n// Find an appropriate position to replace pruned node, this method can be improved\nCoSELayout.prototype.findPlaceforPrunedNode = function (nodeData) {\n\n var gridForPrunedNode;\n var nodeToConnect;\n var prunedNode = nodeData[0];\n if (prunedNode == nodeData[1].source) {\n nodeToConnect = nodeData[1].target;\n } else {\n nodeToConnect = nodeData[1].source;\n }\n\n if (CoSEConstants.PURE_INCREMENTAL) {\n prunedNode.setCenter(nodeToConnect.getCenterX() + nodeData[3].getWidth(), nodeToConnect.getCenterY() + nodeData[3].getHeight());\n } else {\n var startGridX = nodeToConnect.startX;\n var finishGridX = nodeToConnect.finishX;\n var startGridY = nodeToConnect.startY;\n var finishGridY = nodeToConnect.finishY;\n\n var upNodeCount = 0;\n var downNodeCount = 0;\n var rightNodeCount = 0;\n var leftNodeCount = 0;\n var controlRegions = [upNodeCount, rightNodeCount, downNodeCount, leftNodeCount];\n\n if (startGridY > 0) {\n for (var i = startGridX; i <= finishGridX; i++) {\n controlRegions[0] += this.grid[i][startGridY - 1].length + this.grid[i][startGridY].length - 1;\n }\n }\n if (finishGridX < this.grid.length - 1) {\n for (var i = startGridY; i <= finishGridY; i++) {\n controlRegions[1] += this.grid[finishGridX + 1][i].length + this.grid[finishGridX][i].length - 1;\n }\n }\n if (finishGridY < this.grid[0].length - 1) {\n for (var i = startGridX; i <= finishGridX; i++) {\n controlRegions[2] += this.grid[i][finishGridY + 1].length + this.grid[i][finishGridY].length - 1;\n }\n }\n if (startGridX > 0) {\n for (var i = startGridY; i <= finishGridY; i++) {\n controlRegions[3] += this.grid[startGridX - 1][i].length + this.grid[startGridX][i].length - 1;\n }\n }\n var min = Integer.MAX_VALUE;\n var minCount;\n var minIndex;\n for (var j = 0; j < controlRegions.length; j++) {\n if (controlRegions[j] < min) {\n min = controlRegions[j];\n minCount = 1;\n minIndex = j;\n } else if (controlRegions[j] == min) {\n minCount++;\n }\n }\n\n if (minCount == 3 && min == 0) {\n if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[2] == 0) {\n gridForPrunedNode = 1;\n } else if (controlRegions[0] == 0 && controlRegions[1] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 0;\n } else if (controlRegions[0] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 3;\n } else if (controlRegions[1] == 0 && controlRegions[2] == 0 && controlRegions[3] == 0) {\n gridForPrunedNode = 2;\n }\n } else if (minCount == 2 && min == 0) {\n var random = Math.floor(Math.random() * 2);\n if (controlRegions[0] == 0 && controlRegions[1] == 0) {\n ;\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 1;\n }\n } else if (controlRegions[0] == 0 && controlRegions[2] == 0) {\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 2;\n }\n } else if (controlRegions[0] == 0 && controlRegions[3] == 0) {\n if (random == 0) {\n gridForPrunedNode = 0;\n } else {\n gridForPrunedNode = 3;\n }\n } else if (controlRegions[1] == 0 && controlRegions[2] == 0) {\n if (random == 0) {\n gridForPrunedNode = 1;\n } else {\n gridForPrunedNode = 2;\n }\n } else if (controlRegions[1] == 0 && controlRegions[3] == 0) {\n if (random == 0) {\n gridForPrunedNode = 1;\n } else {\n gridForPrunedNode = 3;\n }\n } else {\n if (random == 0) {\n gridForPrunedNode = 2;\n } else {\n gridForPrunedNode = 3;\n }\n }\n } else if (minCount == 4 && min == 0) {\n var random = Math.floor(Math.random() * 4);\n gridForPrunedNode = random;\n } else {\n gridForPrunedNode = minIndex;\n }\n\n if (gridForPrunedNode == 0) {\n prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() - nodeToConnect.getHeight() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getHeight() / 2);\n } else if (gridForPrunedNode == 1) {\n prunedNode.setCenter(nodeToConnect.getCenterX() + nodeToConnect.getWidth() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getWidth() / 2, nodeToConnect.getCenterY());\n } else if (gridForPrunedNode == 2) {\n prunedNode.setCenter(nodeToConnect.getCenterX(), nodeToConnect.getCenterY() + nodeToConnect.getHeight() / 2 + FDLayoutConstants.DEFAULT_EDGE_LENGTH + prunedNode.getHeight() / 2);\n } else {\n prunedNode.setCenter(nodeToConnect.getCenterX() - nodeToConnect.getWidth() / 2 - FDLayoutConstants.DEFAULT_EDGE_LENGTH - prunedNode.getWidth() / 2, nodeToConnect.getCenterY());\n }\n }\n};\n\nmodule.exports = CoSELayout;\n\n/***/ }),\n\n/***/ 991:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar FDLayoutNode = __webpack_require__(551).FDLayoutNode;\nvar IMath = __webpack_require__(551).IMath;\n\nfunction CoSENode(gm, loc, size, vNode) {\n FDLayoutNode.call(this, gm, loc, size, vNode);\n}\n\nCoSENode.prototype = Object.create(FDLayoutNode.prototype);\nfor (var prop in FDLayoutNode) {\n CoSENode[prop] = FDLayoutNode[prop];\n}\n\nCoSENode.prototype.calculateDisplacement = function () {\n var layout = this.graphManager.getLayout();\n // this check is for compound nodes that contain fixed nodes\n if (this.getChild() != null && this.fixedNodeWeight) {\n this.displacementX += layout.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.fixedNodeWeight;\n this.displacementY += layout.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.fixedNodeWeight;\n } else {\n this.displacementX += layout.coolingFactor * (this.springForceX + this.repulsionForceX + this.gravitationForceX) / this.noOfChildren;\n this.displacementY += layout.coolingFactor * (this.springForceY + this.repulsionForceY + this.gravitationForceY) / this.noOfChildren;\n }\n\n if (Math.abs(this.displacementX) > layout.coolingFactor * layout.maxNodeDisplacement) {\n this.displacementX = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementX);\n }\n\n if (Math.abs(this.displacementY) > layout.coolingFactor * layout.maxNodeDisplacement) {\n this.displacementY = layout.coolingFactor * layout.maxNodeDisplacement * IMath.sign(this.displacementY);\n }\n\n // non-empty compound node, propogate movement to children as well\n if (this.child && this.child.getNodes().length > 0) {\n this.propogateDisplacementToChildren(this.displacementX, this.displacementY);\n }\n};\n\nCoSENode.prototype.propogateDisplacementToChildren = function (dX, dY) {\n var nodes = this.getChild().getNodes();\n var node;\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n if (node.getChild() == null) {\n node.displacementX += dX;\n node.displacementY += dY;\n } else {\n node.propogateDisplacementToChildren(dX, dY);\n }\n }\n};\n\nCoSENode.prototype.move = function () {\n var layout = this.graphManager.getLayout();\n\n // a simple node or an empty compound node, move it\n if (this.child == null || this.child.getNodes().length == 0) {\n this.moveBy(this.displacementX, this.displacementY);\n\n layout.totalDisplacement += Math.abs(this.displacementX) + Math.abs(this.displacementY);\n }\n\n this.springForceX = 0;\n this.springForceY = 0;\n this.repulsionForceX = 0;\n this.repulsionForceY = 0;\n this.gravitationForceX = 0;\n this.gravitationForceY = 0;\n this.displacementX = 0;\n this.displacementY = 0;\n};\n\nCoSENode.prototype.setPred1 = function (pred1) {\n this.pred1 = pred1;\n};\n\nCoSENode.prototype.getPred1 = function () {\n return pred1;\n};\n\nCoSENode.prototype.getPred2 = function () {\n return pred2;\n};\n\nCoSENode.prototype.setNext = function (next) {\n this.next = next;\n};\n\nCoSENode.prototype.getNext = function () {\n return next;\n};\n\nCoSENode.prototype.setProcessed = function (processed) {\n this.processed = processed;\n};\n\nCoSENode.prototype.isProcessed = function () {\n return processed;\n};\n\nmodule.exports = CoSENode;\n\n/***/ }),\n\n/***/ 902:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar CoSEConstants = __webpack_require__(806);\nvar LinkedList = __webpack_require__(551).LinkedList;\nvar Matrix = __webpack_require__(551).Matrix;\nvar SVD = __webpack_require__(551).SVD;\n\nfunction ConstraintHandler() {}\n\nConstraintHandler.handleConstraints = function (layout) {\n // let layout = this.graphManager.getLayout();\n\n // get constraints from layout\n var constraints = {};\n constraints.fixedNodeConstraint = layout.constraints.fixedNodeConstraint;\n constraints.alignmentConstraint = layout.constraints.alignmentConstraint;\n constraints.relativePlacementConstraint = layout.constraints.relativePlacementConstraint;\n\n var idToNodeMap = new Map();\n var nodeIndexes = new Map();\n var xCoords = [];\n var yCoords = [];\n\n var allNodes = layout.getAllNodes();\n var index = 0;\n // fill index map and coordinates\n for (var i = 0; i < allNodes.length; i++) {\n var node = allNodes[i];\n if (node.getChild() == null) {\n nodeIndexes.set(node.id, index++);\n xCoords.push(node.getCenterX());\n yCoords.push(node.getCenterY());\n idToNodeMap.set(node.id, node);\n }\n }\n\n // if there exists relative placement constraint without gap value, set it to default \n if (constraints.relativePlacementConstraint) {\n constraints.relativePlacementConstraint.forEach(function (constraint) {\n if (!constraint.gap && constraint.gap != 0) {\n if (constraint.left) {\n constraint.gap = CoSEConstants.DEFAULT_EDGE_LENGTH + idToNodeMap.get(constraint.left).getWidth() / 2 + idToNodeMap.get(constraint.right).getWidth() / 2;\n } else {\n constraint.gap = CoSEConstants.DEFAULT_EDGE_LENGTH + idToNodeMap.get(constraint.top).getHeight() / 2 + idToNodeMap.get(constraint.bottom).getHeight() / 2;\n }\n }\n });\n }\n\n /* auxiliary functions */\n\n // calculate difference between two position objects\n var calculatePositionDiff = function calculatePositionDiff(pos1, pos2) {\n return { x: pos1.x - pos2.x, y: pos1.y - pos2.y };\n };\n\n // calculate average position of the nodes\n var calculateAvgPosition = function calculateAvgPosition(nodeIdSet) {\n var xPosSum = 0;\n var yPosSum = 0;\n nodeIdSet.forEach(function (nodeId) {\n xPosSum += xCoords[nodeIndexes.get(nodeId)];\n yPosSum += yCoords[nodeIndexes.get(nodeId)];\n });\n\n return { x: xPosSum / nodeIdSet.size, y: yPosSum / nodeIdSet.size };\n };\n\n // find an appropriate positioning for the nodes in a given graph according to relative placement constraints\n // this function also takes the fixed nodes and alignment constraints into account\n // graph: dag to be evaluated, direction: \"horizontal\" or \"vertical\", \n // fixedNodes: set of fixed nodes to consider during evaluation, dummyPositions: appropriate coordinates of the dummy nodes \n var findAppropriatePositionForRelativePlacement = function findAppropriatePositionForRelativePlacement(graph, direction, fixedNodes, dummyPositions, componentSources) {\n\n // find union of two sets\n function setUnion(setA, setB) {\n var union = new Set(setA);\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = setB[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var elem = _step.value;\n\n union.add(elem);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return union;\n }\n\n // find indegree count for each node\n var inDegrees = new Map();\n\n graph.forEach(function (value, key) {\n inDegrees.set(key, 0);\n });\n graph.forEach(function (value, key) {\n value.forEach(function (adjacent) {\n inDegrees.set(adjacent.id, inDegrees.get(adjacent.id) + 1);\n });\n });\n\n var positionMap = new Map(); // keeps the position for each node\n var pastMap = new Map(); // keeps the predecessors(past) of a node\n var queue = new LinkedList();\n inDegrees.forEach(function (value, key) {\n if (value == 0) {\n queue.push(key);\n if (!fixedNodes) {\n if (direction == \"horizontal\") {\n positionMap.set(key, nodeIndexes.has(key) ? xCoords[nodeIndexes.get(key)] : dummyPositions.get(key));\n } else {\n positionMap.set(key, nodeIndexes.has(key) ? yCoords[nodeIndexes.get(key)] : dummyPositions.get(key));\n }\n }\n } else {\n positionMap.set(key, Number.NEGATIVE_INFINITY);\n }\n if (fixedNodes) {\n pastMap.set(key, new Set([key]));\n }\n });\n\n // align sources of each component in enforcement phase\n if (fixedNodes) {\n componentSources.forEach(function (component) {\n var fixedIds = [];\n component.forEach(function (nodeId) {\n if (fixedNodes.has(nodeId)) {\n fixedIds.push(nodeId);\n }\n });\n if (fixedIds.length > 0) {\n var position = 0;\n fixedIds.forEach(function (fixedId) {\n if (direction == \"horizontal\") {\n positionMap.set(fixedId, nodeIndexes.has(fixedId) ? xCoords[nodeIndexes.get(fixedId)] : dummyPositions.get(fixedId));\n position += positionMap.get(fixedId);\n } else {\n positionMap.set(fixedId, nodeIndexes.has(fixedId) ? yCoords[nodeIndexes.get(fixedId)] : dummyPositions.get(fixedId));\n position += positionMap.get(fixedId);\n }\n });\n position = position / fixedIds.length;\n component.forEach(function (nodeId) {\n if (!fixedNodes.has(nodeId)) {\n positionMap.set(nodeId, position);\n }\n });\n } else {\n var _position = 0;\n component.forEach(function (nodeId) {\n if (direction == \"horizontal\") {\n _position += nodeIndexes.has(nodeId) ? xCoords[nodeIndexes.get(nodeId)] : dummyPositions.get(nodeId);\n } else {\n _position += nodeIndexes.has(nodeId) ? yCoords[nodeIndexes.get(nodeId)] : dummyPositions.get(nodeId);\n }\n });\n _position = _position / component.length;\n component.forEach(function (nodeId) {\n positionMap.set(nodeId, _position);\n });\n }\n });\n }\n\n // calculate positions of the nodes\n\n var _loop = function _loop() {\n var currentNode = queue.shift();\n var neighbors = graph.get(currentNode);\n neighbors.forEach(function (neighbor) {\n if (positionMap.get(neighbor.id) < positionMap.get(currentNode) + neighbor.gap) {\n if (fixedNodes && fixedNodes.has(neighbor.id)) {\n var fixedPosition = void 0;\n if (direction == \"horizontal\") {\n fixedPosition = nodeIndexes.has(neighbor.id) ? xCoords[nodeIndexes.get(neighbor.id)] : dummyPositions.get(neighbor.id);\n } else {\n fixedPosition = nodeIndexes.has(neighbor.id) ? yCoords[nodeIndexes.get(neighbor.id)] : dummyPositions.get(neighbor.id);\n }\n positionMap.set(neighbor.id, fixedPosition); // TODO: may do unnecessary work\n if (fixedPosition < positionMap.get(currentNode) + neighbor.gap) {\n var diff = positionMap.get(currentNode) + neighbor.gap - fixedPosition;\n pastMap.get(currentNode).forEach(function (nodeId) {\n positionMap.set(nodeId, positionMap.get(nodeId) - diff);\n });\n }\n } else {\n positionMap.set(neighbor.id, positionMap.get(currentNode) + neighbor.gap);\n }\n }\n inDegrees.set(neighbor.id, inDegrees.get(neighbor.id) - 1);\n if (inDegrees.get(neighbor.id) == 0) {\n queue.push(neighbor.id);\n }\n if (fixedNodes) {\n pastMap.set(neighbor.id, setUnion(pastMap.get(currentNode), pastMap.get(neighbor.id)));\n }\n });\n };\n\n while (queue.length != 0) {\n _loop();\n }\n\n // readjust position of the nodes after enforcement\n if (fixedNodes) {\n // find indegree count for each node\n var sinkNodes = new Set();\n\n graph.forEach(function (value, key) {\n if (value.length == 0) {\n sinkNodes.add(key);\n }\n });\n\n var _components = [];\n pastMap.forEach(function (value, key) {\n if (sinkNodes.has(key)) {\n var isFixedComponent = false;\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = value[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var nodeId = _step2.value;\n\n if (fixedNodes.has(nodeId)) {\n isFixedComponent = true;\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n if (!isFixedComponent) {\n var isExist = false;\n var existAt = void 0;\n _components.forEach(function (component, index) {\n if (component.has([].concat(_toConsumableArray(value))[0])) {\n isExist = true;\n existAt = index;\n }\n });\n if (!isExist) {\n _components.push(new Set(value));\n } else {\n value.forEach(function (ele) {\n _components[existAt].add(ele);\n });\n }\n }\n }\n });\n\n _components.forEach(function (component, index) {\n var minBefore = Number.POSITIVE_INFINITY;\n var minAfter = Number.POSITIVE_INFINITY;\n var maxBefore = Number.NEGATIVE_INFINITY;\n var maxAfter = Number.NEGATIVE_INFINITY;\n\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = component[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var nodeId = _step3.value;\n\n var posBefore = void 0;\n if (direction == \"horizontal\") {\n posBefore = nodeIndexes.has(nodeId) ? xCoords[nodeIndexes.get(nodeId)] : dummyPositions.get(nodeId);\n } else {\n posBefore = nodeIndexes.has(nodeId) ? yCoords[nodeIndexes.get(nodeId)] : dummyPositions.get(nodeId);\n }\n var posAfter = positionMap.get(nodeId);\n if (posBefore < minBefore) {\n minBefore = posBefore;\n }\n if (posBefore > maxBefore) {\n maxBefore = posBefore;\n }\n if (posAfter < minAfter) {\n minAfter = posAfter;\n }\n if (posAfter > maxAfter) {\n maxAfter = posAfter;\n }\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n\n var diff = (minBefore + maxBefore) / 2 - (minAfter + maxAfter) / 2;\n\n var _iteratorNormalCompletion4 = true;\n var _didIteratorError4 = false;\n var _iteratorError4 = undefined;\n\n try {\n for (var _iterator4 = component[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n var _nodeId = _step4.value;\n\n positionMap.set(_nodeId, positionMap.get(_nodeId) + diff);\n }\n } catch (err) {\n _didIteratorError4 = true;\n _iteratorError4 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion4 && _iterator4.return) {\n _iterator4.return();\n }\n } finally {\n if (_didIteratorError4) {\n throw _iteratorError4;\n }\n }\n }\n });\n }\n\n return positionMap;\n };\n\n // find transformation based on rel. placement constraints if there are both alignment and rel. placement constraints\n // or if there are only rel. placement contraints where the largest component isn't sufficiently large\n var applyReflectionForRelativePlacement = function applyReflectionForRelativePlacement(relativePlacementConstraints) {\n // variables to count votes\n var reflectOnY = 0,\n notReflectOnY = 0;\n var reflectOnX = 0,\n notReflectOnX = 0;\n\n relativePlacementConstraints.forEach(function (constraint) {\n if (constraint.left) {\n xCoords[nodeIndexes.get(constraint.left)] - xCoords[nodeIndexes.get(constraint.right)] >= 0 ? reflectOnY++ : notReflectOnY++;\n } else {\n yCoords[nodeIndexes.get(constraint.top)] - yCoords[nodeIndexes.get(constraint.bottom)] >= 0 ? reflectOnX++ : notReflectOnX++;\n }\n });\n\n if (reflectOnY > notReflectOnY && reflectOnX > notReflectOnX) {\n for (var _i = 0; _i < nodeIndexes.size; _i++) {\n xCoords[_i] = -1 * xCoords[_i];\n yCoords[_i] = -1 * yCoords[_i];\n }\n } else if (reflectOnY > notReflectOnY) {\n for (var _i2 = 0; _i2 < nodeIndexes.size; _i2++) {\n xCoords[_i2] = -1 * xCoords[_i2];\n }\n } else if (reflectOnX > notReflectOnX) {\n for (var _i3 = 0; _i3 < nodeIndexes.size; _i3++) {\n yCoords[_i3] = -1 * yCoords[_i3];\n }\n }\n };\n\n // find weakly connected components in undirected graph\n var findComponents = function findComponents(graph) {\n // find weakly connected components in dag\n var components = [];\n var queue = new LinkedList();\n var visited = new Set();\n var count = 0;\n\n graph.forEach(function (value, key) {\n if (!visited.has(key)) {\n components[count] = [];\n var _currentNode = key;\n queue.push(_currentNode);\n visited.add(_currentNode);\n components[count].push(_currentNode);\n\n while (queue.length != 0) {\n _currentNode = queue.shift();\n var neighbors = graph.get(_currentNode);\n neighbors.forEach(function (neighbor) {\n if (!visited.has(neighbor.id)) {\n queue.push(neighbor.id);\n visited.add(neighbor.id);\n components[count].push(neighbor.id);\n }\n });\n }\n count++;\n }\n });\n return components;\n };\n\n // return undirected version of given dag\n var dagToUndirected = function dagToUndirected(dag) {\n var undirected = new Map();\n\n dag.forEach(function (value, key) {\n undirected.set(key, []);\n });\n\n dag.forEach(function (value, key) {\n value.forEach(function (adjacent) {\n undirected.get(key).push(adjacent);\n undirected.get(adjacent.id).push({ id: key, gap: adjacent.gap, direction: adjacent.direction });\n });\n });\n\n return undirected;\n };\n\n // return reversed (directions inverted) version of given dag\n var dagToReversed = function dagToReversed(dag) {\n var reversed = new Map();\n\n dag.forEach(function (value, key) {\n reversed.set(key, []);\n });\n\n dag.forEach(function (value, key) {\n value.forEach(function (adjacent) {\n reversed.get(adjacent.id).push({ id: key, gap: adjacent.gap, direction: adjacent.direction });\n });\n });\n\n return reversed;\n };\n\n /**** apply transformation to the initial draft layout to better align with constrained nodes ****/\n // solve the Orthogonal Procrustean Problem to rotate and/or reflect initial draft layout\n // here we follow the solution in Chapter 20.2 of Borg, I. & Groenen, P. (2005) Modern Multidimensional Scaling: Theory and Applications \n\n /* construct source and target configurations */\n\n var targetMatrix = []; // A - target configuration\n var sourceMatrix = []; // B - source configuration \n var standardTransformation = false; // false for no transformation, true for standart (Procrustes) transformation (rotation and/or reflection)\n var reflectionType = false; // false/true for reflection check, 'reflectOnX', 'reflectOnY' or 'reflectOnBoth' for reflection type if necessary\n var fixedNodes = new Set();\n var dag = new Map(); // adjacency list to keep directed acyclic graph (dag) that consists of relative placement constraints\n var dagUndirected = new Map(); // undirected version of the dag\n var components = []; // weakly connected components\n\n // fill fixedNodes collection to use later\n if (constraints.fixedNodeConstraint) {\n constraints.fixedNodeConstraint.forEach(function (nodeData) {\n fixedNodes.add(nodeData.nodeId);\n });\n }\n\n // construct dag from relative placement constraints \n if (constraints.relativePlacementConstraint) {\n // construct both directed and undirected version of the dag\n constraints.relativePlacementConstraint.forEach(function (constraint) {\n if (constraint.left) {\n if (dag.has(constraint.left)) {\n dag.get(constraint.left).push({ id: constraint.right, gap: constraint.gap, direction: \"horizontal\" });\n } else {\n dag.set(constraint.left, [{ id: constraint.right, gap: constraint.gap, direction: \"horizontal\" }]);\n }\n if (!dag.has(constraint.right)) {\n dag.set(constraint.right, []);\n }\n } else {\n if (dag.has(constraint.top)) {\n dag.get(constraint.top).push({ id: constraint.bottom, gap: constraint.gap, direction: \"vertical\" });\n } else {\n dag.set(constraint.top, [{ id: constraint.bottom, gap: constraint.gap, direction: \"vertical\" }]);\n }\n if (!dag.has(constraint.bottom)) {\n dag.set(constraint.bottom, []);\n }\n }\n });\n\n dagUndirected = dagToUndirected(dag);\n components = findComponents(dagUndirected);\n }\n\n if (CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING) {\n // first check fixed node constraint\n if (constraints.fixedNodeConstraint && constraints.fixedNodeConstraint.length > 1) {\n constraints.fixedNodeConstraint.forEach(function (nodeData, i) {\n targetMatrix[i] = [nodeData.position.x, nodeData.position.y];\n sourceMatrix[i] = [xCoords[nodeIndexes.get(nodeData.nodeId)], yCoords[nodeIndexes.get(nodeData.nodeId)]];\n });\n standardTransformation = true;\n } else if (constraints.alignmentConstraint) {\n (function () {\n // then check alignment constraint\n var count = 0;\n if (constraints.alignmentConstraint.vertical) {\n var verticalAlign = constraints.alignmentConstraint.vertical;\n\n var _loop2 = function _loop2(_i4) {\n var alignmentSet = new Set();\n verticalAlign[_i4].forEach(function (nodeId) {\n alignmentSet.add(nodeId);\n });\n var intersection = new Set([].concat(_toConsumableArray(alignmentSet)).filter(function (x) {\n return fixedNodes.has(x);\n }));\n var xPos = void 0;\n if (intersection.size > 0) xPos = xCoords[nodeIndexes.get(intersection.values().next().value)];else xPos = calculateAvgPosition(alignmentSet).x;\n\n verticalAlign[_i4].forEach(function (nodeId) {\n targetMatrix[count] = [xPos, yCoords[nodeIndexes.get(nodeId)]];\n sourceMatrix[count] = [xCoords[nodeIndexes.get(nodeId)], yCoords[nodeIndexes.get(nodeId)]];\n count++;\n });\n };\n\n for (var _i4 = 0; _i4 < verticalAlign.length; _i4++) {\n _loop2(_i4);\n }\n standardTransformation = true;\n }\n if (constraints.alignmentConstraint.horizontal) {\n var horizontalAlign = constraints.alignmentConstraint.horizontal;\n\n var _loop3 = function _loop3(_i5) {\n var alignmentSet = new Set();\n horizontalAlign[_i5].forEach(function (nodeId) {\n alignmentSet.add(nodeId);\n });\n var intersection = new Set([].concat(_toConsumableArray(alignmentSet)).filter(function (x) {\n return fixedNodes.has(x);\n }));\n var yPos = void 0;\n if (intersection.size > 0) yPos = xCoords[nodeIndexes.get(intersection.values().next().value)];else yPos = calculateAvgPosition(alignmentSet).y;\n\n horizontalAlign[_i5].forEach(function (nodeId) {\n targetMatrix[count] = [xCoords[nodeIndexes.get(nodeId)], yPos];\n sourceMatrix[count] = [xCoords[nodeIndexes.get(nodeId)], yCoords[nodeIndexes.get(nodeId)]];\n count++;\n });\n };\n\n for (var _i5 = 0; _i5 < horizontalAlign.length; _i5++) {\n _loop3(_i5);\n }\n standardTransformation = true;\n }\n if (constraints.relativePlacementConstraint) {\n reflectionType = true;\n }\n })();\n } else if (constraints.relativePlacementConstraint) {\n // finally check relative placement constraint\n // find largest component in dag\n var largestComponentSize = 0;\n var largestComponentIndex = 0;\n for (var _i6 = 0; _i6 < components.length; _i6++) {\n if (components[_i6].length > largestComponentSize) {\n largestComponentSize = components[_i6].length;\n largestComponentIndex = _i6;\n }\n }\n // if largest component isn't dominant, then take the votes for reflection\n if (largestComponentSize < dagUndirected.size / 2) {\n applyReflectionForRelativePlacement(constraints.relativePlacementConstraint);\n standardTransformation = false;\n reflectionType = false;\n } else {\n // use largest component for transformation\n // construct horizontal and vertical subgraphs in the largest component\n var subGraphOnHorizontal = new Map();\n var subGraphOnVertical = new Map();\n var constraintsInlargestComponent = [];\n\n components[largestComponentIndex].forEach(function (nodeId) {\n dag.get(nodeId).forEach(function (adjacent) {\n if (adjacent.direction == \"horizontal\") {\n if (subGraphOnHorizontal.has(nodeId)) {\n subGraphOnHorizontal.get(nodeId).push(adjacent);\n } else {\n subGraphOnHorizontal.set(nodeId, [adjacent]);\n }\n if (!subGraphOnHorizontal.has(adjacent.id)) {\n subGraphOnHorizontal.set(adjacent.id, []);\n }\n constraintsInlargestComponent.push({ left: nodeId, right: adjacent.id });\n } else {\n if (subGraphOnVertical.has(nodeId)) {\n subGraphOnVertical.get(nodeId).push(adjacent);\n } else {\n subGraphOnVertical.set(nodeId, [adjacent]);\n }\n if (!subGraphOnVertical.has(adjacent.id)) {\n subGraphOnVertical.set(adjacent.id, []);\n }\n constraintsInlargestComponent.push({ top: nodeId, bottom: adjacent.id });\n }\n });\n });\n\n applyReflectionForRelativePlacement(constraintsInlargestComponent);\n reflectionType = false;\n\n // calculate appropriate positioning for subgraphs\n var positionMapHorizontal = findAppropriatePositionForRelativePlacement(subGraphOnHorizontal, \"horizontal\");\n var positionMapVertical = findAppropriatePositionForRelativePlacement(subGraphOnVertical, \"vertical\");\n\n // construct source and target configuration\n components[largestComponentIndex].forEach(function (nodeId, i) {\n sourceMatrix[i] = [xCoords[nodeIndexes.get(nodeId)], yCoords[nodeIndexes.get(nodeId)]];\n targetMatrix[i] = [];\n if (positionMapHorizontal.has(nodeId)) {\n targetMatrix[i][0] = positionMapHorizontal.get(nodeId);\n } else {\n targetMatrix[i][0] = xCoords[nodeIndexes.get(nodeId)];\n }\n if (positionMapVertical.has(nodeId)) {\n targetMatrix[i][1] = positionMapVertical.get(nodeId);\n } else {\n targetMatrix[i][1] = yCoords[nodeIndexes.get(nodeId)];\n }\n });\n\n standardTransformation = true;\n }\n }\n\n // if transformation is required, then calculate and apply transformation matrix\n if (standardTransformation) {\n /* calculate transformation matrix */\n var transformationMatrix = void 0;\n var targetMatrixTranspose = Matrix.transpose(targetMatrix); // A'\n var sourceMatrixTranspose = Matrix.transpose(sourceMatrix); // B'\n\n // centralize transpose matrices\n for (var _i7 = 0; _i7 < targetMatrixTranspose.length; _i7++) {\n targetMatrixTranspose[_i7] = Matrix.multGamma(targetMatrixTranspose[_i7]);\n sourceMatrixTranspose[_i7] = Matrix.multGamma(sourceMatrixTranspose[_i7]);\n }\n\n // do actual calculation for transformation matrix\n var tempMatrix = Matrix.multMat(targetMatrixTranspose, Matrix.transpose(sourceMatrixTranspose)); // tempMatrix = A'B\n var SVDResult = SVD.svd(tempMatrix); // SVD(A'B) = USV', svd function returns U, S and V \n transformationMatrix = Matrix.multMat(SVDResult.V, Matrix.transpose(SVDResult.U)); // transformationMatrix = T = VU'\n\n /* apply found transformation matrix to obtain final draft layout */\n for (var _i8 = 0; _i8 < nodeIndexes.size; _i8++) {\n var temp1 = [xCoords[_i8], yCoords[_i8]];\n var temp2 = [transformationMatrix[0][0], transformationMatrix[1][0]];\n var temp3 = [transformationMatrix[0][1], transformationMatrix[1][1]];\n xCoords[_i8] = Matrix.dotProduct(temp1, temp2);\n yCoords[_i8] = Matrix.dotProduct(temp1, temp3);\n }\n\n // applied only both alignment and rel. placement constraints exist\n if (reflectionType) {\n applyReflectionForRelativePlacement(constraints.relativePlacementConstraint);\n }\n }\n }\n\n if (CoSEConstants.ENFORCE_CONSTRAINTS) {\n /**** enforce constraints on the transformed draft layout ****/\n\n /* first enforce fixed node constraint */\n\n if (constraints.fixedNodeConstraint && constraints.fixedNodeConstraint.length > 0) {\n var translationAmount = { x: 0, y: 0 };\n constraints.fixedNodeConstraint.forEach(function (nodeData, i) {\n var posInTheory = { x: xCoords[nodeIndexes.get(nodeData.nodeId)], y: yCoords[nodeIndexes.get(nodeData.nodeId)] };\n var posDesired = nodeData.position;\n var posDiff = calculatePositionDiff(posDesired, posInTheory);\n translationAmount.x += posDiff.x;\n translationAmount.y += posDiff.y;\n });\n translationAmount.x /= constraints.fixedNodeConstraint.length;\n translationAmount.y /= constraints.fixedNodeConstraint.length;\n\n xCoords.forEach(function (value, i) {\n xCoords[i] += translationAmount.x;\n });\n\n yCoords.forEach(function (value, i) {\n yCoords[i] += translationAmount.y;\n });\n\n constraints.fixedNodeConstraint.forEach(function (nodeData) {\n xCoords[nodeIndexes.get(nodeData.nodeId)] = nodeData.position.x;\n yCoords[nodeIndexes.get(nodeData.nodeId)] = nodeData.position.y;\n });\n }\n\n /* then enforce alignment constraint */\n\n if (constraints.alignmentConstraint) {\n if (constraints.alignmentConstraint.vertical) {\n var xAlign = constraints.alignmentConstraint.vertical;\n\n var _loop4 = function _loop4(_i9) {\n var alignmentSet = new Set();\n xAlign[_i9].forEach(function (nodeId) {\n alignmentSet.add(nodeId);\n });\n var intersection = new Set([].concat(_toConsumableArray(alignmentSet)).filter(function (x) {\n return fixedNodes.has(x);\n }));\n var xPos = void 0;\n if (intersection.size > 0) xPos = xCoords[nodeIndexes.get(intersection.values().next().value)];else xPos = calculateAvgPosition(alignmentSet).x;\n\n alignmentSet.forEach(function (nodeId) {\n if (!fixedNodes.has(nodeId)) xCoords[nodeIndexes.get(nodeId)] = xPos;\n });\n };\n\n for (var _i9 = 0; _i9 < xAlign.length; _i9++) {\n _loop4(_i9);\n }\n }\n if (constraints.alignmentConstraint.horizontal) {\n var yAlign = constraints.alignmentConstraint.horizontal;\n\n var _loop5 = function _loop5(_i10) {\n var alignmentSet = new Set();\n yAlign[_i10].forEach(function (nodeId) {\n alignmentSet.add(nodeId);\n });\n var intersection = new Set([].concat(_toConsumableArray(alignmentSet)).filter(function (x) {\n return fixedNodes.has(x);\n }));\n var yPos = void 0;\n if (intersection.size > 0) yPos = yCoords[nodeIndexes.get(intersection.values().next().value)];else yPos = calculateAvgPosition(alignmentSet).y;\n\n alignmentSet.forEach(function (nodeId) {\n if (!fixedNodes.has(nodeId)) yCoords[nodeIndexes.get(nodeId)] = yPos;\n });\n };\n\n for (var _i10 = 0; _i10 < yAlign.length; _i10++) {\n _loop5(_i10);\n }\n }\n }\n\n /* finally enforce relative placement constraint */\n\n if (constraints.relativePlacementConstraint) {\n (function () {\n var nodeToDummyForVerticalAlignment = new Map();\n var nodeToDummyForHorizontalAlignment = new Map();\n var dummyToNodeForVerticalAlignment = new Map();\n var dummyToNodeForHorizontalAlignment = new Map();\n var dummyPositionsForVerticalAlignment = new Map();\n var dummyPositionsForHorizontalAlignment = new Map();\n var fixedNodesOnHorizontal = new Set();\n var fixedNodesOnVertical = new Set();\n\n // fill maps and sets \n fixedNodes.forEach(function (nodeId) {\n fixedNodesOnHorizontal.add(nodeId);\n fixedNodesOnVertical.add(nodeId);\n });\n\n if (constraints.alignmentConstraint) {\n if (constraints.alignmentConstraint.vertical) {\n var verticalAlignment = constraints.alignmentConstraint.vertical;\n\n var _loop6 = function _loop6(_i11) {\n dummyToNodeForVerticalAlignment.set(\"dummy\" + _i11, []);\n verticalAlignment[_i11].forEach(function (nodeId) {\n nodeToDummyForVerticalAlignment.set(nodeId, \"dummy\" + _i11);\n dummyToNodeForVerticalAlignment.get(\"dummy\" + _i11).push(nodeId);\n if (fixedNodes.has(nodeId)) {\n fixedNodesOnHorizontal.add(\"dummy\" + _i11);\n }\n });\n dummyPositionsForVerticalAlignment.set(\"dummy\" + _i11, xCoords[nodeIndexes.get(verticalAlignment[_i11][0])]);\n };\n\n for (var _i11 = 0; _i11 < verticalAlignment.length; _i11++) {\n _loop6(_i11);\n }\n }\n if (constraints.alignmentConstraint.horizontal) {\n var horizontalAlignment = constraints.alignmentConstraint.horizontal;\n\n var _loop7 = function _loop7(_i12) {\n dummyToNodeForHorizontalAlignment.set(\"dummy\" + _i12, []);\n horizontalAlignment[_i12].forEach(function (nodeId) {\n nodeToDummyForHorizontalAlignment.set(nodeId, \"dummy\" + _i12);\n dummyToNodeForHorizontalAlignment.get(\"dummy\" + _i12).push(nodeId);\n if (fixedNodes.has(nodeId)) {\n fixedNodesOnVertical.add(\"dummy\" + _i12);\n }\n });\n dummyPositionsForHorizontalAlignment.set(\"dummy\" + _i12, yCoords[nodeIndexes.get(horizontalAlignment[_i12][0])]);\n };\n\n for (var _i12 = 0; _i12 < horizontalAlignment.length; _i12++) {\n _loop7(_i12);\n }\n }\n }\n\n // construct horizontal and vertical dags (subgraphs) from overall dag\n var dagOnHorizontal = new Map();\n var dagOnVertical = new Map();\n\n var _loop8 = function _loop8(nodeId) {\n dag.get(nodeId).forEach(function (adjacent) {\n var sourceId = void 0;\n var targetNode = void 0;\n if (adjacent[\"direction\"] == \"horizontal\") {\n sourceId = nodeToDummyForVerticalAlignment.get(nodeId) ? nodeToDummyForVerticalAlignment.get(nodeId) : nodeId;\n if (nodeToDummyForVerticalAlignment.get(adjacent.id)) {\n targetNode = { id: nodeToDummyForVerticalAlignment.get(adjacent.id), gap: adjacent.gap, direction: adjacent.direction };\n } else {\n targetNode = adjacent;\n }\n if (dagOnHorizontal.has(sourceId)) {\n dagOnHorizontal.get(sourceId).push(targetNode);\n } else {\n dagOnHorizontal.set(sourceId, [targetNode]);\n }\n if (!dagOnHorizontal.has(targetNode.id)) {\n dagOnHorizontal.set(targetNode.id, []);\n }\n } else {\n sourceId = nodeToDummyForHorizontalAlignment.get(nodeId) ? nodeToDummyForHorizontalAlignment.get(nodeId) : nodeId;\n if (nodeToDummyForHorizontalAlignment.get(adjacent.id)) {\n targetNode = { id: nodeToDummyForHorizontalAlignment.get(adjacent.id), gap: adjacent.gap, direction: adjacent.direction };\n } else {\n targetNode = adjacent;\n }\n if (dagOnVertical.has(sourceId)) {\n dagOnVertical.get(sourceId).push(targetNode);\n } else {\n dagOnVertical.set(sourceId, [targetNode]);\n }\n if (!dagOnVertical.has(targetNode.id)) {\n dagOnVertical.set(targetNode.id, []);\n }\n }\n });\n };\n\n var _iteratorNormalCompletion5 = true;\n var _didIteratorError5 = false;\n var _iteratorError5 = undefined;\n\n try {\n for (var _iterator5 = dag.keys()[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n var nodeId = _step5.value;\n\n _loop8(nodeId);\n }\n\n // find source nodes of each component in horizontal and vertical dags\n } catch (err) {\n _didIteratorError5 = true;\n _iteratorError5 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion5 && _iterator5.return) {\n _iterator5.return();\n }\n } finally {\n if (_didIteratorError5) {\n throw _iteratorError5;\n }\n }\n }\n\n var undirectedOnHorizontal = dagToUndirected(dagOnHorizontal);\n var undirectedOnVertical = dagToUndirected(dagOnVertical);\n var componentsOnHorizontal = findComponents(undirectedOnHorizontal);\n var componentsOnVertical = findComponents(undirectedOnVertical);\n var reversedDagOnHorizontal = dagToReversed(dagOnHorizontal);\n var reversedDagOnVertical = dagToReversed(dagOnVertical);\n var componentSourcesOnHorizontal = [];\n var componentSourcesOnVertical = [];\n\n componentsOnHorizontal.forEach(function (component, index) {\n componentSourcesOnHorizontal[index] = [];\n component.forEach(function (nodeId) {\n if (reversedDagOnHorizontal.get(nodeId).length == 0) {\n componentSourcesOnHorizontal[index].push(nodeId);\n }\n });\n });\n\n componentsOnVertical.forEach(function (component, index) {\n componentSourcesOnVertical[index] = [];\n component.forEach(function (nodeId) {\n if (reversedDagOnVertical.get(nodeId).length == 0) {\n componentSourcesOnVertical[index].push(nodeId);\n }\n });\n });\n\n // calculate appropriate positioning for subgraphs\n var positionMapHorizontal = findAppropriatePositionForRelativePlacement(dagOnHorizontal, \"horizontal\", fixedNodesOnHorizontal, dummyPositionsForVerticalAlignment, componentSourcesOnHorizontal);\n var positionMapVertical = findAppropriatePositionForRelativePlacement(dagOnVertical, \"vertical\", fixedNodesOnVertical, dummyPositionsForHorizontalAlignment, componentSourcesOnVertical);\n\n // update positions of the nodes based on relative placement constraints\n\n var _loop9 = function _loop9(key) {\n if (dummyToNodeForVerticalAlignment.get(key)) {\n dummyToNodeForVerticalAlignment.get(key).forEach(function (nodeId) {\n xCoords[nodeIndexes.get(nodeId)] = positionMapHorizontal.get(key);\n });\n } else {\n xCoords[nodeIndexes.get(key)] = positionMapHorizontal.get(key);\n }\n };\n\n var _iteratorNormalCompletion6 = true;\n var _didIteratorError6 = false;\n var _iteratorError6 = undefined;\n\n try {\n for (var _iterator6 = positionMapHorizontal.keys()[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n var key = _step6.value;\n\n _loop9(key);\n }\n } catch (err) {\n _didIteratorError6 = true;\n _iteratorError6 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion6 && _iterator6.return) {\n _iterator6.return();\n }\n } finally {\n if (_didIteratorError6) {\n throw _iteratorError6;\n }\n }\n }\n\n var _loop10 = function _loop10(key) {\n if (dummyToNodeForHorizontalAlignment.get(key)) {\n dummyToNodeForHorizontalAlignment.get(key).forEach(function (nodeId) {\n yCoords[nodeIndexes.get(nodeId)] = positionMapVertical.get(key);\n });\n } else {\n yCoords[nodeIndexes.get(key)] = positionMapVertical.get(key);\n }\n };\n\n var _iteratorNormalCompletion7 = true;\n var _didIteratorError7 = false;\n var _iteratorError7 = undefined;\n\n try {\n for (var _iterator7 = positionMapVertical.keys()[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n var key = _step7.value;\n\n _loop10(key);\n }\n } catch (err) {\n _didIteratorError7 = true;\n _iteratorError7 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion7 && _iterator7.return) {\n _iterator7.return();\n }\n } finally {\n if (_didIteratorError7) {\n throw _iteratorError7;\n }\n }\n }\n })();\n }\n }\n\n // assign new coordinates to nodes after constraint handling\n for (var _i13 = 0; _i13 < allNodes.length; _i13++) {\n var _node = allNodes[_i13];\n if (_node.getChild() == null) {\n _node.setCenter(xCoords[nodeIndexes.get(_node.id)], yCoords[nodeIndexes.get(_node.id)]);\n }\n }\n};\n\nmodule.exports = ConstraintHandler;\n\n/***/ }),\n\n/***/ 551:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__551__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module is referenced by other modules so it can't be inlined\n/******/ \tvar __webpack_exports__ = __webpack_require__(45);\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});", "(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"cose-base\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"cose-base\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"cytoscapeFcose\"] = factory(require(\"cose-base\"));\n\telse\n\t\troot[\"cytoscapeFcose\"] = factory(root[\"coseBase\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE__140__) {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 658:\n/***/ ((module) => {\n\n\n\n// Simple, internal Object.assign() polyfill for options objects etc.\n\nmodule.exports = Object.assign != null ? Object.assign.bind(Object) : function (tgt) {\n for (var _len = arguments.length, srcs = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n srcs[_key - 1] = arguments[_key];\n }\n\n srcs.forEach(function (src) {\n Object.keys(src).forEach(function (k) {\n return tgt[k] = src[k];\n });\n });\n\n return tgt;\n};\n\n/***/ }),\n\n/***/ 548:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\n/*\n * Auxiliary functions\n */\n\nvar LinkedList = __webpack_require__(140).layoutBase.LinkedList;\n\nvar auxiliary = {};\n\n// get the top most nodes\nauxiliary.getTopMostNodes = function (nodes) {\n var nodesMap = {};\n for (var i = 0; i < nodes.length; i++) {\n nodesMap[nodes[i].id()] = true;\n }\n var roots = nodes.filter(function (ele, i) {\n if (typeof ele === \"number\") {\n ele = i;\n }\n var parent = ele.parent()[0];\n while (parent != null) {\n if (nodesMap[parent.id()]) {\n return false;\n }\n parent = parent.parent()[0];\n }\n return true;\n });\n\n return roots;\n};\n\n// find disconnected components and create dummy nodes that connect them\nauxiliary.connectComponents = function (cy, eles, topMostNodes, dummyNodes) {\n var queue = new LinkedList();\n var visited = new Set();\n var visitedTopMostNodes = [];\n var currentNeighbor = void 0;\n var minDegreeNode = void 0;\n var minDegree = void 0;\n\n var isConnected = false;\n var count = 1;\n var nodesConnectedToDummy = [];\n var components = [];\n\n var _loop = function _loop() {\n var cmpt = cy.collection();\n components.push(cmpt);\n\n var currentNode = topMostNodes[0];\n var childrenOfCurrentNode = cy.collection();\n childrenOfCurrentNode.merge(currentNode).merge(currentNode.descendants().intersection(eles));\n visitedTopMostNodes.push(currentNode);\n\n childrenOfCurrentNode.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n cmpt.merge(node);\n });\n\n var _loop2 = function _loop2() {\n currentNode = queue.shift();\n\n // Traverse all neighbors of this node\n var neighborNodes = cy.collection();\n currentNode.neighborhood().nodes().forEach(function (node) {\n if (eles.intersection(currentNode.edgesWith(node)).length > 0) {\n neighborNodes.merge(node);\n }\n });\n\n for (var i = 0; i < neighborNodes.length; i++) {\n var neighborNode = neighborNodes[i];\n currentNeighbor = topMostNodes.intersection(neighborNode.union(neighborNode.ancestors()));\n if (currentNeighbor != null && !visited.has(currentNeighbor[0])) {\n var childrenOfNeighbor = currentNeighbor.union(currentNeighbor.descendants());\n\n childrenOfNeighbor.forEach(function (node) {\n queue.push(node);\n visited.add(node);\n cmpt.merge(node);\n if (topMostNodes.has(node)) {\n visitedTopMostNodes.push(node);\n }\n });\n }\n }\n };\n\n while (queue.length != 0) {\n _loop2();\n }\n\n cmpt.forEach(function (node) {\n eles.intersection(node.connectedEdges()).forEach(function (e) {\n // connectedEdges() usually cached\n if (cmpt.has(e.source()) && cmpt.has(e.target())) {\n // has() is cheap\n cmpt.merge(e);\n }\n });\n });\n\n if (visitedTopMostNodes.length == topMostNodes.length) {\n isConnected = true;\n }\n\n if (!isConnected || isConnected && count > 1) {\n minDegreeNode = visitedTopMostNodes[0];\n minDegree = minDegreeNode.connectedEdges().length;\n visitedTopMostNodes.forEach(function (node) {\n if (node.connectedEdges().length < minDegree) {\n minDegree = node.connectedEdges().length;\n minDegreeNode = node;\n }\n });\n nodesConnectedToDummy.push(minDegreeNode.id());\n // TO DO: Check efficiency of this part\n var temp = cy.collection();\n temp.merge(visitedTopMostNodes[0]);\n visitedTopMostNodes.forEach(function (node) {\n temp.merge(node);\n });\n visitedTopMostNodes = [];\n topMostNodes = topMostNodes.difference(temp);\n count++;\n }\n };\n\n do {\n _loop();\n } while (!isConnected);\n\n if (dummyNodes) {\n if (nodesConnectedToDummy.length > 0) {\n dummyNodes.set('dummy' + (dummyNodes.size + 1), nodesConnectedToDummy);\n }\n }\n return components;\n};\n\n// relocates componentResult to originalCenter if there is no fixedNodeConstraint\nauxiliary.relocateComponent = function (originalCenter, componentResult, options) {\n if (!options.fixedNodeConstraint) {\n var minXCoord = Number.POSITIVE_INFINITY;\n var maxXCoord = Number.NEGATIVE_INFINITY;\n var minYCoord = Number.POSITIVE_INFINITY;\n var maxYCoord = Number.NEGATIVE_INFINITY;\n if (options.quality == \"draft\") {\n // calculate current bounding box\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = componentResult.nodeIndexes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var _ref = _step.value;\n\n var _ref2 = _slicedToArray(_ref, 2);\n\n var key = _ref2[0];\n var value = _ref2[1];\n\n var cyNode = options.cy.getElementById(key);\n if (cyNode) {\n var nodeBB = cyNode.boundingBox();\n var leftX = componentResult.xCoords[value] - nodeBB.w / 2;\n var rightX = componentResult.xCoords[value] + nodeBB.w / 2;\n var topY = componentResult.yCoords[value] - nodeBB.h / 2;\n var bottomY = componentResult.yCoords[value] + nodeBB.h / 2;\n\n if (leftX < minXCoord) minXCoord = leftX;\n if (rightX > maxXCoord) maxXCoord = rightX;\n if (topY < minYCoord) minYCoord = topY;\n if (bottomY > maxYCoord) maxYCoord = bottomY;\n }\n }\n // find difference between current and original center\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n var diffOnX = originalCenter.x - (maxXCoord + minXCoord) / 2;\n var diffOnY = originalCenter.y - (maxYCoord + minYCoord) / 2;\n // move component to original center\n componentResult.xCoords = componentResult.xCoords.map(function (x) {\n return x + diffOnX;\n });\n componentResult.yCoords = componentResult.yCoords.map(function (y) {\n return y + diffOnY;\n });\n } else {\n // calculate current bounding box\n Object.keys(componentResult).forEach(function (item) {\n var node = componentResult[item];\n var leftX = node.getRect().x;\n var rightX = node.getRect().x + node.getRect().width;\n var topY = node.getRect().y;\n var bottomY = node.getRect().y + node.getRect().height;\n\n if (leftX < minXCoord) minXCoord = leftX;\n if (rightX > maxXCoord) maxXCoord = rightX;\n if (topY < minYCoord) minYCoord = topY;\n if (bottomY > maxYCoord) maxYCoord = bottomY;\n });\n // find difference between current and original center\n var _diffOnX = originalCenter.x - (maxXCoord + minXCoord) / 2;\n var _diffOnY = originalCenter.y - (maxYCoord + minYCoord) / 2;\n // move component to original center\n Object.keys(componentResult).forEach(function (item) {\n var node = componentResult[item];\n node.setCenter(node.getCenterX() + _diffOnX, node.getCenterY() + _diffOnY);\n });\n }\n }\n};\n\nauxiliary.calcBoundingBox = function (parentNode, xCoords, yCoords, nodeIndexes) {\n // calculate bounds\n var left = Number.MAX_SAFE_INTEGER;\n var right = Number.MIN_SAFE_INTEGER;\n var top = Number.MAX_SAFE_INTEGER;\n var bottom = Number.MIN_SAFE_INTEGER;\n var nodeLeft = void 0;\n var nodeRight = void 0;\n var nodeTop = void 0;\n var nodeBottom = void 0;\n\n var nodes = parentNode.descendants().not(\":parent\");\n var s = nodes.length;\n for (var i = 0; i < s; i++) {\n var node = nodes[i];\n\n nodeLeft = xCoords[nodeIndexes.get(node.id())] - node.width() / 2;\n nodeRight = xCoords[nodeIndexes.get(node.id())] + node.width() / 2;\n nodeTop = yCoords[nodeIndexes.get(node.id())] - node.height() / 2;\n nodeBottom = yCoords[nodeIndexes.get(node.id())] + node.height() / 2;\n\n if (left > nodeLeft) {\n left = nodeLeft;\n }\n\n if (right < nodeRight) {\n right = nodeRight;\n }\n\n if (top > nodeTop) {\n top = nodeTop;\n }\n\n if (bottom < nodeBottom) {\n bottom = nodeBottom;\n }\n }\n\n var boundingBox = {};\n boundingBox.topLeftX = left;\n boundingBox.topLeftY = top;\n boundingBox.width = right - left;\n boundingBox.height = bottom - top;\n return boundingBox;\n};\n\n// This function finds and returns parent nodes whose all children are hidden\nauxiliary.calcParentsWithoutChildren = function (cy, eles) {\n var parentsWithoutChildren = cy.collection();\n eles.nodes(':parent').forEach(function (parent) {\n var check = false;\n parent.children().forEach(function (child) {\n if (child.css('display') != 'none') {\n check = true;\n }\n });\n if (!check) {\n parentsWithoutChildren.merge(parent);\n }\n });\n\n return parentsWithoutChildren;\n};\n\nmodule.exports = auxiliary;\n\n/***/ }),\n\n/***/ 816:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\n/**\n The implementation of the postprocessing part that applies CoSE layout over the spectral layout\n*/\n\nvar aux = __webpack_require__(548);\nvar CoSELayout = __webpack_require__(140).CoSELayout;\nvar CoSENode = __webpack_require__(140).CoSENode;\nvar PointD = __webpack_require__(140).layoutBase.PointD;\nvar DimensionD = __webpack_require__(140).layoutBase.DimensionD;\nvar LayoutConstants = __webpack_require__(140).layoutBase.LayoutConstants;\nvar FDLayoutConstants = __webpack_require__(140).layoutBase.FDLayoutConstants;\nvar CoSEConstants = __webpack_require__(140).CoSEConstants;\n\n// main function that cose layout is processed\nvar coseLayout = function coseLayout(options, spectralResult) {\n\n var cy = options.cy;\n var eles = options.eles;\n var nodes = eles.nodes();\n var edges = eles.edges();\n\n var nodeIndexes = void 0;\n var xCoords = void 0;\n var yCoords = void 0;\n var idToLNode = {};\n\n if (options.randomize) {\n nodeIndexes = spectralResult[\"nodeIndexes\"];\n xCoords = spectralResult[\"xCoords\"];\n yCoords = spectralResult[\"yCoords\"];\n }\n\n var isFn = function isFn(fn) {\n return typeof fn === 'function';\n };\n\n var optFn = function optFn(opt, ele) {\n if (isFn(opt)) {\n return opt(ele);\n } else {\n return opt;\n }\n };\n\n /**** Postprocessing functions ****/\n\n var parentsWithoutChildren = aux.calcParentsWithoutChildren(cy, eles);\n\n // transfer cytoscape nodes to cose nodes\n var processChildrenList = function processChildrenList(parent, children, layout, options) {\n var size = children.length;\n for (var i = 0; i < size; i++) {\n var theChild = children[i];\n var children_of_children = null;\n if (theChild.intersection(parentsWithoutChildren).length == 0) {\n children_of_children = theChild.children();\n }\n var theNode = void 0;\n\n var dimensions = theChild.layoutDimensions({\n nodeDimensionsIncludeLabels: options.nodeDimensionsIncludeLabels\n });\n\n if (theChild.outerWidth() != null && theChild.outerHeight() != null) {\n if (options.randomize) {\n if (!theChild.isParent()) {\n theNode = parent.add(new CoSENode(layout.graphManager, new PointD(xCoords[nodeIndexes.get(theChild.id())] - dimensions.w / 2, yCoords[nodeIndexes.get(theChild.id())] - dimensions.h / 2), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h))));\n } else {\n var parentInfo = aux.calcBoundingBox(theChild, xCoords, yCoords, nodeIndexes);\n if (theChild.intersection(parentsWithoutChildren).length == 0) {\n theNode = parent.add(new CoSENode(layout.graphManager, new PointD(parentInfo.topLeftX, parentInfo.topLeftY), new DimensionD(parentInfo.width, parentInfo.height)));\n } else {\n // for the parentsWithoutChildren\n theNode = parent.add(new CoSENode(layout.graphManager, new PointD(parentInfo.topLeftX, parentInfo.topLeftY), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h))));\n }\n }\n } else {\n theNode = parent.add(new CoSENode(layout.graphManager, new PointD(theChild.position('x') - dimensions.w / 2, theChild.position('y') - dimensions.h / 2), new DimensionD(parseFloat(dimensions.w), parseFloat(dimensions.h))));\n }\n } else {\n theNode = parent.add(new CoSENode(this.graphManager));\n }\n // Attach id to the layout node and repulsion value\n theNode.id = theChild.data(\"id\");\n theNode.nodeRepulsion = optFn(options.nodeRepulsion, theChild);\n // Attach the paddings of cy node to layout node\n theNode.paddingLeft = parseInt(theChild.css('padding'));\n theNode.paddingTop = parseInt(theChild.css('padding'));\n theNode.paddingRight = parseInt(theChild.css('padding'));\n theNode.paddingBottom = parseInt(theChild.css('padding'));\n\n //Attach the label properties to both compound and simple nodes if labels will be included in node dimensions\n //These properties will be used while updating bounds of compounds during iterations or tiling\n //and will be used for simple nodes while transferring final positions to cytoscape\n if (options.nodeDimensionsIncludeLabels) {\n theNode.labelWidth = theChild.boundingBox({ includeLabels: true, includeNodes: false, includeOverlays: false }).w;\n theNode.labelHeight = theChild.boundingBox({ includeLabels: true, includeNodes: false, includeOverlays: false }).h;\n theNode.labelPosVertical = theChild.css(\"text-valign\");\n theNode.labelPosHorizontal = theChild.css(\"text-halign\");\n }\n\n // Map the layout node\n idToLNode[theChild.data(\"id\")] = theNode;\n\n if (isNaN(theNode.rect.x)) {\n theNode.rect.x = 0;\n }\n\n if (isNaN(theNode.rect.y)) {\n theNode.rect.y = 0;\n }\n\n if (children_of_children != null && children_of_children.length > 0) {\n var theNewGraph = void 0;\n theNewGraph = layout.getGraphManager().add(layout.newGraph(), theNode);\n processChildrenList(theNewGraph, children_of_children, layout, options);\n }\n }\n };\n\n // transfer cytoscape edges to cose edges\n var processEdges = function processEdges(layout, gm, edges) {\n var idealLengthTotal = 0;\n var edgeCount = 0;\n for (var i = 0; i < edges.length; i++) {\n var edge = edges[i];\n var sourceNode = idToLNode[edge.data(\"source\")];\n var targetNode = idToLNode[edge.data(\"target\")];\n if (sourceNode && targetNode && sourceNode !== targetNode && sourceNode.getEdgesBetween(targetNode).length == 0) {\n var e1 = gm.add(layout.newEdge(), sourceNode, targetNode);\n e1.id = edge.id();\n e1.idealLength = optFn(options.idealEdgeLength, edge);\n e1.edgeElasticity = optFn(options.edgeElasticity, edge);\n idealLengthTotal += e1.idealLength;\n edgeCount++;\n }\n }\n // we need to update the ideal edge length constant with the avg. ideal length value after processing edges\n // in case there is no edge, use other options\n if (options.idealEdgeLength != null) {\n if (edgeCount > 0) CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = idealLengthTotal / edgeCount;else if (!isFn(options.idealEdgeLength)) // in case there is no edge, but option gives a value to use\n CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = options.idealEdgeLength;else // in case there is no edge and we cannot get a value from option (because it's a function)\n CoSEConstants.DEFAULT_EDGE_LENGTH = FDLayoutConstants.DEFAULT_EDGE_LENGTH = 50;\n // we need to update these constant values based on the ideal edge length constant\n CoSEConstants.MIN_REPULSION_DIST = FDLayoutConstants.MIN_REPULSION_DIST = FDLayoutConstants.DEFAULT_EDGE_LENGTH / 10.0;\n CoSEConstants.DEFAULT_RADIAL_SEPARATION = FDLayoutConstants.DEFAULT_EDGE_LENGTH;\n }\n };\n\n // transfer cytoscape constraints to cose layout\n var processConstraints = function processConstraints(layout, options) {\n // get nodes to be fixed\n if (options.fixedNodeConstraint) {\n layout.constraints[\"fixedNodeConstraint\"] = options.fixedNodeConstraint;\n }\n // get nodes to be aligned\n if (options.alignmentConstraint) {\n layout.constraints[\"alignmentConstraint\"] = options.alignmentConstraint;\n }\n // get nodes to be relatively placed\n if (options.relativePlacementConstraint) {\n layout.constraints[\"relativePlacementConstraint\"] = options.relativePlacementConstraint;\n }\n };\n\n /**** Apply postprocessing ****/\n if (options.nestingFactor != null) CoSEConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = FDLayoutConstants.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR = options.nestingFactor;\n if (options.gravity != null) CoSEConstants.DEFAULT_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_GRAVITY_STRENGTH = options.gravity;\n if (options.numIter != null) CoSEConstants.MAX_ITERATIONS = FDLayoutConstants.MAX_ITERATIONS = options.numIter;\n if (options.gravityRange != null) CoSEConstants.DEFAULT_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_GRAVITY_RANGE_FACTOR = options.gravityRange;\n if (options.gravityCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_STRENGTH = options.gravityCompound;\n if (options.gravityRangeCompound != null) CoSEConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = FDLayoutConstants.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR = options.gravityRangeCompound;\n if (options.initialEnergyOnIncremental != null) CoSEConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = FDLayoutConstants.DEFAULT_COOLING_FACTOR_INCREMENTAL = options.initialEnergyOnIncremental;\n\n if (options.tilingCompareBy != null) CoSEConstants.TILING_COMPARE_BY = options.tilingCompareBy;\n\n if (options.quality == 'proof') LayoutConstants.QUALITY = 2;else LayoutConstants.QUALITY = 0;\n\n CoSEConstants.NODE_DIMENSIONS_INCLUDE_LABELS = FDLayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = LayoutConstants.NODE_DIMENSIONS_INCLUDE_LABELS = options.nodeDimensionsIncludeLabels;\n CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = !options.randomize;\n CoSEConstants.ANIMATE = FDLayoutConstants.ANIMATE = LayoutConstants.ANIMATE = options.animate;\n CoSEConstants.TILE = options.tile;\n CoSEConstants.TILING_PADDING_VERTICAL = typeof options.tilingPaddingVertical === 'function' ? options.tilingPaddingVertical.call() : options.tilingPaddingVertical;\n CoSEConstants.TILING_PADDING_HORIZONTAL = typeof options.tilingPaddingHorizontal === 'function' ? options.tilingPaddingHorizontal.call() : options.tilingPaddingHorizontal;\n\n CoSEConstants.DEFAULT_INCREMENTAL = FDLayoutConstants.DEFAULT_INCREMENTAL = LayoutConstants.DEFAULT_INCREMENTAL = true;\n CoSEConstants.PURE_INCREMENTAL = !options.randomize;\n LayoutConstants.DEFAULT_UNIFORM_LEAF_NODE_SIZES = options.uniformNodeDimensions;\n\n // This part is for debug/demo purpose\n if (options.step == \"transformed\") {\n CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = true;\n CoSEConstants.ENFORCE_CONSTRAINTS = false;\n CoSEConstants.APPLY_LAYOUT = false;\n }\n if (options.step == \"enforced\") {\n CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = false;\n CoSEConstants.ENFORCE_CONSTRAINTS = true;\n CoSEConstants.APPLY_LAYOUT = false;\n }\n if (options.step == \"cose\") {\n CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = false;\n CoSEConstants.ENFORCE_CONSTRAINTS = false;\n CoSEConstants.APPLY_LAYOUT = true;\n }\n if (options.step == \"all\") {\n if (options.randomize) CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = true;else CoSEConstants.TRANSFORM_ON_CONSTRAINT_HANDLING = false;\n CoSEConstants.ENFORCE_CONSTRAINTS = true;\n CoSEConstants.APPLY_LAYOUT = true;\n }\n\n if (options.fixedNodeConstraint || options.alignmentConstraint || options.relativePlacementConstraint) {\n CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = false;\n } else {\n CoSEConstants.TREE_REDUCTION_ON_INCREMENTAL = true;\n }\n\n var coseLayout = new CoSELayout();\n var gm = coseLayout.newGraphManager();\n\n processChildrenList(gm.addRoot(), aux.getTopMostNodes(nodes), coseLayout, options);\n processEdges(coseLayout, gm, edges);\n processConstraints(coseLayout, options);\n\n coseLayout.runLayout();\n\n return idToLNode;\n};\n\nmodule.exports = { coseLayout: coseLayout };\n\n/***/ }),\n\n/***/ 212:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n The implementation of the fcose layout algorithm\n*/\n\nvar assign = __webpack_require__(658);\nvar aux = __webpack_require__(548);\n\nvar _require = __webpack_require__(657),\n spectralLayout = _require.spectralLayout;\n\nvar _require2 = __webpack_require__(816),\n coseLayout = _require2.coseLayout;\n\nvar defaults = Object.freeze({\n\n // 'draft', 'default' or 'proof' \n // - 'draft' only applies spectral layout \n // - 'default' improves the quality with subsequent CoSE layout (fast cooling rate)\n // - 'proof' improves the quality with subsequent CoSE layout (slow cooling rate) \n quality: \"default\",\n // Use random node positions at beginning of layout\n // if this is set to false, then quality option must be \"proof\"\n randomize: true,\n // Whether or not to animate the layout\n animate: true,\n // Duration of animation in ms, if enabled\n animationDuration: 1000,\n // Easing of animation, if enabled\n animationEasing: undefined,\n // Fit the viewport to the repositioned nodes\n fit: true,\n // Padding around layout\n padding: 30,\n // Whether to include labels in node dimensions. Valid in \"proof\" quality\n nodeDimensionsIncludeLabels: false,\n // Whether or not simple nodes (non-compound nodes) are of uniform dimensions\n uniformNodeDimensions: false,\n // Whether to pack disconnected components - valid only if randomize: true\n packComponents: true,\n // Layout step - all, transformed, enforced, cose - for debug purpose only\n step: \"all\",\n\n /* spectral layout options */\n\n // False for random, true for greedy\n samplingType: true,\n // Sample size to construct distance matrix\n sampleSize: 25,\n // Separation amount between nodes\n nodeSeparation: 75,\n // Power iteration tolerance\n piTol: 0.0000001,\n\n /* CoSE layout options */\n\n // Node repulsion (non overlapping) multiplier\n nodeRepulsion: function nodeRepulsion(node) {\n return 4500;\n },\n // Ideal edge (non nested) length\n idealEdgeLength: function idealEdgeLength(edge) {\n return 50;\n },\n // Divisor to compute edge forces\n edgeElasticity: function edgeElasticity(edge) {\n return 0.45;\n },\n // Nesting factor (multiplier) to compute ideal edge length for nested edges\n nestingFactor: 0.1,\n // Gravity force (constant)\n gravity: 0.25,\n // Maximum number of iterations to perform\n numIter: 2500,\n // For enabling tiling\n tile: true,\n // The function that specifies the criteria for comparing nodes while sorting them during tiling operation.\n // Takes the node id as a parameter and the default tiling operation is perfomed when this option is not set.\n tilingCompareBy: undefined,\n // Represents the amount of the vertical space to put between the zero degree members during the tiling operation(can also be a function)\n tilingPaddingVertical: 10,\n // Represents the amount of the horizontal space to put between the zero degree members during the tiling operation(can also be a function)\n tilingPaddingHorizontal: 10,\n // Gravity range (constant) for compounds\n gravityRangeCompound: 1.5,\n // Gravity force (constant) for compounds\n gravityCompound: 1.0,\n // Gravity range (constant)\n gravityRange: 3.8,\n // Initial cooling factor for incremental layout \n initialEnergyOnIncremental: 0.3,\n\n /* constraint options */\n\n // Fix required nodes to predefined positions\n // [{nodeId: 'n1', position: {x: 100, y: 200}, {...}]\n fixedNodeConstraint: undefined,\n // Align required nodes in vertical/horizontal direction\n // {vertical: [['n1', 'n2')], ['n3', 'n4']], horizontal: ['n2', 'n4']}\n alignmentConstraint: undefined,\n // Place two nodes relatively in vertical/horizontal direction \n // [{top: 'n1', bottom: 'n2', gap: 100}, {left: 'n3', right: 'n4', gap: 75}]\n relativePlacementConstraint: undefined,\n\n /* layout event callbacks */\n ready: function ready() {}, // on layoutready\n stop: function stop() {} // on layoutstop\n});\n\nvar Layout = function () {\n function Layout(options) {\n _classCallCheck(this, Layout);\n\n this.options = assign({}, defaults, options);\n }\n\n _createClass(Layout, [{\n key: 'run',\n value: function run() {\n var layout = this;\n var options = this.options;\n var cy = options.cy;\n var eles = options.eles;\n\n var spectralResult = [];\n var xCoords = void 0;\n var yCoords = void 0;\n var coseResult = [];\n var components = void 0;\n var componentCenters = [];\n\n // basic validity check for constraint inputs \n if (options.fixedNodeConstraint && (!Array.isArray(options.fixedNodeConstraint) || options.fixedNodeConstraint.length == 0)) {\n options.fixedNodeConstraint = undefined;\n }\n\n if (options.alignmentConstraint) {\n if (options.alignmentConstraint.vertical && (!Array.isArray(options.alignmentConstraint.vertical) || options.alignmentConstraint.vertical.length == 0)) {\n options.alignmentConstraint.vertical = undefined;\n }\n if (options.alignmentConstraint.horizontal && (!Array.isArray(options.alignmentConstraint.horizontal) || options.alignmentConstraint.horizontal.length == 0)) {\n options.alignmentConstraint.horizontal = undefined;\n }\n }\n\n if (options.relativePlacementConstraint && (!Array.isArray(options.relativePlacementConstraint) || options.relativePlacementConstraint.length == 0)) {\n options.relativePlacementConstraint = undefined;\n }\n\n // if any constraint exists, set some options\n var constraintExist = options.fixedNodeConstraint || options.alignmentConstraint || options.relativePlacementConstraint;\n if (constraintExist) {\n // constraints work with these options\n options.tile = false;\n options.packComponents = false;\n }\n\n // decide component packing is enabled or not\n var layUtil = void 0;\n var packingEnabled = false;\n if (cy.layoutUtilities && options.packComponents) {\n layUtil = cy.layoutUtilities(\"get\");\n if (!layUtil) layUtil = cy.layoutUtilities();\n packingEnabled = true;\n }\n\n if (eles.nodes().length > 0) {\n // if packing is not enabled, perform layout on the whole graph\n if (!packingEnabled) {\n // store component center\n var boundingBox = options.eles.boundingBox();\n componentCenters.push({ x: boundingBox.x1 + boundingBox.w / 2, y: boundingBox.y1 + boundingBox.h / 2 });\n // apply spectral layout\n if (options.randomize) {\n var result = spectralLayout(options);\n spectralResult.push(result);\n }\n // apply cose layout as postprocessing\n if (options.quality == \"default\" || options.quality == \"proof\") {\n coseResult.push(coseLayout(options, spectralResult[0]));\n aux.relocateComponent(componentCenters[0], coseResult[0], options); // relocate center to original position\n } else {\n aux.relocateComponent(componentCenters[0], spectralResult[0], options); // relocate center to original position\n }\n } else {\n // packing is enabled\n var topMostNodes = aux.getTopMostNodes(options.eles.nodes());\n components = aux.connectComponents(cy, options.eles, topMostNodes);\n // store component centers\n components.forEach(function (component) {\n var boundingBox = component.boundingBox();\n componentCenters.push({ x: boundingBox.x1 + boundingBox.w / 2, y: boundingBox.y1 + boundingBox.h / 2 });\n });\n\n //send each component to spectral layout if randomized\n if (options.randomize) {\n components.forEach(function (component) {\n options.eles = component;\n spectralResult.push(spectralLayout(options));\n });\n }\n\n if (options.quality == \"default\" || options.quality == \"proof\") {\n var toBeTiledNodes = cy.collection();\n if (options.tile) {\n // behave nodes to be tiled as one component\n var nodeIndexes = new Map();\n var _xCoords = [];\n var _yCoords = [];\n var count = 0;\n var tempSpectralResult = { nodeIndexes: nodeIndexes, xCoords: _xCoords, yCoords: _yCoords };\n var indexesToBeDeleted = [];\n components.forEach(function (component, index) {\n if (component.edges().length == 0) {\n component.nodes().forEach(function (node, i) {\n toBeTiledNodes.merge(component.nodes()[i]);\n if (!node.isParent()) {\n tempSpectralResult.nodeIndexes.set(component.nodes()[i].id(), count++);\n tempSpectralResult.xCoords.push(component.nodes()[0].position().x);\n tempSpectralResult.yCoords.push(component.nodes()[0].position().y);\n }\n });\n indexesToBeDeleted.push(index);\n }\n });\n if (toBeTiledNodes.length > 1) {\n var _boundingBox = toBeTiledNodes.boundingBox();\n componentCenters.push({ x: _boundingBox.x1 + _boundingBox.w / 2, y: _boundingBox.y1 + _boundingBox.h / 2 });\n components.push(toBeTiledNodes);\n spectralResult.push(tempSpectralResult);\n for (var i = indexesToBeDeleted.length - 1; i >= 0; i--) {\n components.splice(indexesToBeDeleted[i], 1);\n spectralResult.splice(indexesToBeDeleted[i], 1);\n componentCenters.splice(indexesToBeDeleted[i], 1);\n };\n }\n }\n components.forEach(function (component, index) {\n // send each component to cose layout\n options.eles = component;\n coseResult.push(coseLayout(options, spectralResult[index]));\n aux.relocateComponent(componentCenters[index], coseResult[index], options); // relocate center to original position\n });\n } else {\n components.forEach(function (component, index) {\n aux.relocateComponent(componentCenters[index], spectralResult[index], options); // relocate center to original position\n });\n }\n\n // packing\n var componentsEvaluated = new Set();\n if (components.length > 1) {\n var subgraphs = [];\n var hiddenEles = eles.filter(function (ele) {\n return ele.css('display') == 'none';\n });\n components.forEach(function (component, index) {\n var nodeIndexes = void 0;\n if (options.quality == \"draft\") {\n nodeIndexes = spectralResult[index].nodeIndexes;\n }\n\n if (component.nodes().not(hiddenEles).length > 0) {\n var subgraph = {};\n subgraph.edges = [];\n subgraph.nodes = [];\n var nodeIndex = void 0;\n component.nodes().not(hiddenEles).forEach(function (node) {\n if (options.quality == \"draft\") {\n if (!node.isParent()) {\n nodeIndex = nodeIndexes.get(node.id());\n subgraph.nodes.push({ x: spectralResult[index].xCoords[nodeIndex] - node.boundingbox().w / 2, y: spectralResult[index].yCoords[nodeIndex] - node.boundingbox().h / 2, width: node.boundingbox().w, height: node.boundingbox().h });\n } else {\n var parentInfo = aux.calcBoundingBox(node, spectralResult[index].xCoords, spectralResult[index].yCoords, nodeIndexes);\n subgraph.nodes.push({ x: parentInfo.topLeftX, y: parentInfo.topLeftY, width: parentInfo.width, height: parentInfo.height });\n }\n } else {\n if (coseResult[index][node.id()]) {\n subgraph.nodes.push({ x: coseResult[index][node.id()].getLeft(), y: coseResult[index][node.id()].getTop(), width: coseResult[index][node.id()].getWidth(), height: coseResult[index][node.id()].getHeight() });\n }\n }\n });\n component.edges().forEach(function (edge) {\n var source = edge.source();\n var target = edge.target();\n if (source.css(\"display\") != \"none\" && target.css(\"display\") != \"none\") {\n if (options.quality == \"draft\") {\n var sourceNodeIndex = nodeIndexes.get(source.id());\n var targetNodeIndex = nodeIndexes.get(target.id());\n var sourceCenter = [];\n var targetCenter = [];\n if (source.isParent()) {\n var parentInfo = aux.calcBoundingBox(source, spectralResult[index].xCoords, spectralResult[index].yCoords, nodeIndexes);\n sourceCenter.push(parentInfo.topLeftX + parentInfo.width / 2);\n sourceCenter.push(parentInfo.topLeftY + parentInfo.height / 2);\n } else {\n sourceCenter.push(spectralResult[index].xCoords[sourceNodeIndex]);\n sourceCenter.push(spectralResult[index].yCoords[sourceNodeIndex]);\n }\n if (target.isParent()) {\n var _parentInfo = aux.calcBoundingBox(target, spectralResult[index].xCoords, spectralResult[index].yCoords, nodeIndexes);\n targetCenter.push(_parentInfo.topLeftX + _parentInfo.width / 2);\n targetCenter.push(_parentInfo.topLeftY + _parentInfo.height / 2);\n } else {\n targetCenter.push(spectralResult[index].xCoords[targetNodeIndex]);\n targetCenter.push(spectralResult[index].yCoords[targetNodeIndex]);\n }\n subgraph.edges.push({ startX: sourceCenter[0], startY: sourceCenter[1], endX: targetCenter[0], endY: targetCenter[1] });\n } else {\n if (coseResult[index][source.id()] && coseResult[index][target.id()]) {\n subgraph.edges.push({ startX: coseResult[index][source.id()].getCenterX(), startY: coseResult[index][source.id()].getCenterY(), endX: coseResult[index][target.id()].getCenterX(), endY: coseResult[index][target.id()].getCenterY() });\n }\n }\n }\n });\n if (subgraph.nodes.length > 0) {\n subgraphs.push(subgraph);\n componentsEvaluated.add(index);\n }\n }\n });\n var shiftResult = layUtil.packComponents(subgraphs, options.randomize).shifts;\n if (options.quality == \"draft\") {\n spectralResult.forEach(function (result, index) {\n var newXCoords = result.xCoords.map(function (x) {\n return x + shiftResult[index].dx;\n });\n var newYCoords = result.yCoords.map(function (y) {\n return y + shiftResult[index].dy;\n });\n result.xCoords = newXCoords;\n result.yCoords = newYCoords;\n });\n } else {\n var _count = 0;\n componentsEvaluated.forEach(function (index) {\n Object.keys(coseResult[index]).forEach(function (item) {\n var nodeRectangle = coseResult[index][item];\n nodeRectangle.setCenter(nodeRectangle.getCenterX() + shiftResult[_count].dx, nodeRectangle.getCenterY() + shiftResult[_count].dy);\n });\n _count++;\n });\n }\n }\n }\n }\n\n // get each element's calculated position\n var getPositions = function getPositions(ele, i) {\n if (options.quality == \"default\" || options.quality == \"proof\") {\n if (typeof ele === \"number\") {\n ele = i;\n }\n var pos = void 0;\n var node = void 0;\n var theId = ele.data('id');\n coseResult.forEach(function (result) {\n if (theId in result) {\n pos = { x: result[theId].getRect().getCenterX(), y: result[theId].getRect().getCenterY() };\n node = result[theId];\n }\n });\n if (options.nodeDimensionsIncludeLabels) {\n if (node.labelWidth) {\n if (node.labelPosHorizontal == \"left\") {\n pos.x += node.labelWidth / 2;\n } else if (node.labelPosHorizontal == \"right\") {\n pos.x -= node.labelWidth / 2;\n }\n }\n if (node.labelHeight) {\n if (node.labelPosVertical == \"top\") {\n pos.y += node.labelHeight / 2;\n } else if (node.labelPosVertical == \"bottom\") {\n pos.y -= node.labelHeight / 2;\n }\n }\n }\n if (pos == undefined) pos = { x: ele.position(\"x\"), y: ele.position(\"y\") };\n return {\n x: pos.x,\n y: pos.y\n };\n } else {\n var _pos = void 0;\n spectralResult.forEach(function (result) {\n var index = result.nodeIndexes.get(ele.id());\n if (index != undefined) {\n _pos = { x: result.xCoords[index], y: result.yCoords[index] };\n }\n });\n if (_pos == undefined) _pos = { x: ele.position(\"x\"), y: ele.position(\"y\") };\n return {\n x: _pos.x,\n y: _pos.y\n };\n }\n };\n\n // quality = \"draft\" and randomize = false are contradictive so in that case positions don't change\n if (options.quality == \"default\" || options.quality == \"proof\" || options.randomize) {\n // transfer calculated positions to nodes (positions of only simple nodes are evaluated, compounds are positioned automatically)\n var parentsWithoutChildren = aux.calcParentsWithoutChildren(cy, eles);\n var _hiddenEles = eles.filter(function (ele) {\n return ele.css('display') == 'none';\n });\n options.eles = eles.not(_hiddenEles);\n\n eles.nodes().not(\":parent\").not(_hiddenEles).layoutPositions(layout, options, getPositions);\n\n if (parentsWithoutChildren.length > 0) {\n parentsWithoutChildren.forEach(function (ele) {\n ele.position(getPositions(ele));\n });\n }\n } else {\n console.log(\"If randomize option is set to false, then quality option must be 'default' or 'proof'.\");\n }\n }\n }]);\n\n return Layout;\n}();\n\nmodule.exports = Layout;\n\n/***/ }),\n\n/***/ 657:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\n/**\n The implementation of the spectral layout that is the first part of the fcose layout algorithm\n*/\n\nvar aux = __webpack_require__(548);\nvar Matrix = __webpack_require__(140).layoutBase.Matrix;\nvar SVD = __webpack_require__(140).layoutBase.SVD;\n\n// main function that spectral layout is processed\nvar spectralLayout = function spectralLayout(options) {\n\n var cy = options.cy;\n var eles = options.eles;\n var nodes = eles.nodes();\n var parentNodes = eles.nodes(\":parent\");\n\n var dummyNodes = new Map(); // map to keep dummy nodes and their neighbors\n var nodeIndexes = new Map(); // map to keep indexes to nodes\n var parentChildMap = new Map(); // mapping btw. compound and its representative node \n var allNodesNeighborhood = []; // array to keep neighborhood of all nodes\n var xCoords = [];\n var yCoords = [];\n\n var samplesColumn = []; // sampled vertices\n var minDistancesColumn = [];\n var C = []; // column sampling matrix\n var PHI = []; // intersection of column and row sampling matrices \n var INV = []; // inverse of PHI \n\n var firstSample = void 0; // the first sampled node\n var nodeSize = void 0;\n\n var infinity = 100000000;\n var small = 0.000000001;\n\n var piTol = options.piTol;\n var samplingType = options.samplingType; // false for random, true for greedy\n var nodeSeparation = options.nodeSeparation;\n var sampleSize = void 0;\n\n /**** Spectral-preprocessing functions ****/\n\n /**** Spectral layout functions ****/\n\n // determine which columns to be sampled\n var randomSampleCR = function randomSampleCR() {\n var sample = 0;\n var count = 0;\n var flag = false;\n\n while (count < sampleSize) {\n sample = Math.floor(Math.random() * nodeSize);\n\n flag = false;\n for (var i = 0; i < count; i++) {\n if (samplesColumn[i] == sample) {\n flag = true;\n break;\n }\n }\n\n if (!flag) {\n samplesColumn[count] = sample;\n count++;\n } else {\n continue;\n }\n }\n };\n\n // takes the index of the node(pivot) to initiate BFS as a parameter\n var BFS = function BFS(pivot, index, samplingMethod) {\n var path = []; // the front of the path\n var front = 0; // the back of the path\n var back = 0;\n var current = 0;\n var temp = void 0;\n var distance = [];\n\n var max_dist = 0; // the furthest node to be returned\n var max_ind = 1;\n\n for (var i = 0; i < nodeSize; i++) {\n distance[i] = infinity;\n }\n\n path[back] = pivot;\n distance[pivot] = 0;\n\n while (back >= front) {\n current = path[front++];\n var neighbors = allNodesNeighborhood[current];\n for (var _i = 0; _i < neighbors.length; _i++) {\n temp = nodeIndexes.get(neighbors[_i]);\n if (distance[temp] == infinity) {\n distance[temp] = distance[current] + 1;\n path[++back] = temp;\n }\n }\n C[current][index] = distance[current] * nodeSeparation;\n }\n\n if (samplingMethod) {\n for (var _i2 = 0; _i2 < nodeSize; _i2++) {\n if (C[_i2][index] < minDistancesColumn[_i2]) minDistancesColumn[_i2] = C[_i2][index];\n }\n\n for (var _i3 = 0; _i3 < nodeSize; _i3++) {\n if (minDistancesColumn[_i3] > max_dist) {\n max_dist = minDistancesColumn[_i3];\n max_ind = _i3;\n }\n }\n }\n return max_ind;\n };\n\n // apply BFS to all nodes or selected samples\n var allBFS = function allBFS(samplingMethod) {\n\n var sample = void 0;\n\n if (!samplingMethod) {\n randomSampleCR();\n\n // call BFS\n for (var i = 0; i < sampleSize; i++) {\n BFS(samplesColumn[i], i, samplingMethod, false);\n }\n } else {\n sample = Math.floor(Math.random() * nodeSize);\n firstSample = sample;\n\n for (var _i4 = 0; _i4 < nodeSize; _i4++) {\n minDistancesColumn[_i4] = infinity;\n }\n\n for (var _i5 = 0; _i5 < sampleSize; _i5++) {\n samplesColumn[_i5] = sample;\n sample = BFS(sample, _i5, samplingMethod);\n }\n }\n\n // form the squared distances for C\n for (var _i6 = 0; _i6 < nodeSize; _i6++) {\n for (var j = 0; j < sampleSize; j++) {\n C[_i6][j] *= C[_i6][j];\n }\n }\n\n // form PHI\n for (var _i7 = 0; _i7 < sampleSize; _i7++) {\n PHI[_i7] = [];\n }\n\n for (var _i8 = 0; _i8 < sampleSize; _i8++) {\n for (var _j = 0; _j < sampleSize; _j++) {\n PHI[_i8][_j] = C[samplesColumn[_j]][_i8];\n }\n }\n };\n\n // perform the SVD algorithm and apply a regularization step\n var sample = function sample() {\n\n var SVDResult = SVD.svd(PHI);\n\n var a_q = SVDResult.S;\n var a_u = SVDResult.U;\n var a_v = SVDResult.V;\n\n var max_s = a_q[0] * a_q[0] * a_q[0];\n\n var a_Sig = [];\n\n // regularization\n for (var i = 0; i < sampleSize; i++) {\n a_Sig[i] = [];\n for (var j = 0; j < sampleSize; j++) {\n a_Sig[i][j] = 0;\n if (i == j) {\n a_Sig[i][j] = a_q[i] / (a_q[i] * a_q[i] + max_s / (a_q[i] * a_q[i]));\n }\n }\n }\n\n INV = Matrix.multMat(Matrix.multMat(a_v, a_Sig), Matrix.transpose(a_u));\n };\n\n // calculate final coordinates \n var powerIteration = function powerIteration() {\n // two largest eigenvalues\n var theta1 = void 0;\n var theta2 = void 0;\n\n // initial guesses for eigenvectors\n var Y1 = [];\n var Y2 = [];\n\n var V1 = [];\n var V2 = [];\n\n for (var i = 0; i < nodeSize; i++) {\n Y1[i] = Math.random();\n Y2[i] = Math.random();\n }\n\n Y1 = Matrix.normalize(Y1);\n Y2 = Matrix.normalize(Y2);\n\n var count = 0;\n // to keep track of the improvement ratio in power iteration\n var current = small;\n var previous = small;\n\n var temp = void 0;\n\n while (true) {\n count++;\n\n for (var _i9 = 0; _i9 < nodeSize; _i9++) {\n V1[_i9] = Y1[_i9];\n }\n\n Y1 = Matrix.multGamma(Matrix.multL(Matrix.multGamma(V1), C, INV));\n theta1 = Matrix.dotProduct(V1, Y1);\n Y1 = Matrix.normalize(Y1);\n\n current = Matrix.dotProduct(V1, Y1);\n\n temp = Math.abs(current / previous);\n\n if (temp <= 1 + piTol && temp >= 1) {\n break;\n }\n\n previous = current;\n }\n\n for (var _i10 = 0; _i10 < nodeSize; _i10++) {\n V1[_i10] = Y1[_i10];\n }\n\n count = 0;\n previous = small;\n while (true) {\n count++;\n\n for (var _i11 = 0; _i11 < nodeSize; _i11++) {\n V2[_i11] = Y2[_i11];\n }\n\n V2 = Matrix.minusOp(V2, Matrix.multCons(V1, Matrix.dotProduct(V1, V2)));\n Y2 = Matrix.multGamma(Matrix.multL(Matrix.multGamma(V2), C, INV));\n theta2 = Matrix.dotProduct(V2, Y2);\n Y2 = Matrix.normalize(Y2);\n\n current = Matrix.dotProduct(V2, Y2);\n\n temp = Math.abs(current / previous);\n\n if (temp <= 1 + piTol && temp >= 1) {\n break;\n }\n\n previous = current;\n }\n\n for (var _i12 = 0; _i12 < nodeSize; _i12++) {\n V2[_i12] = Y2[_i12];\n }\n\n // theta1 now contains dominant eigenvalue\n // theta2 now contains the second-largest eigenvalue\n // V1 now contains theta1's eigenvector\n // V2 now contains theta2's eigenvector\n\n //populate the two vectors\n xCoords = Matrix.multCons(V1, Math.sqrt(Math.abs(theta1)));\n yCoords = Matrix.multCons(V2, Math.sqrt(Math.abs(theta2)));\n };\n\n /**** Preparation for spectral layout (Preprocessing) ****/\n\n // connect disconnected components (first top level, then inside of each compound node)\n aux.connectComponents(cy, eles, aux.getTopMostNodes(nodes), dummyNodes);\n\n parentNodes.forEach(function (ele) {\n aux.connectComponents(cy, eles, aux.getTopMostNodes(ele.descendants().intersection(eles)), dummyNodes);\n });\n\n // assign indexes to nodes (first real, then dummy nodes)\n var index = 0;\n for (var i = 0; i < nodes.length; i++) {\n if (!nodes[i].isParent()) {\n nodeIndexes.set(nodes[i].id(), index++);\n }\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = dummyNodes.keys()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var key = _step.value;\n\n nodeIndexes.set(key, index++);\n }\n\n // instantiate the neighborhood matrix\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n for (var _i13 = 0; _i13 < nodeIndexes.size; _i13++) {\n allNodesNeighborhood[_i13] = [];\n }\n\n // form a parent-child map to keep representative node of each compound node \n parentNodes.forEach(function (ele) {\n var children = ele.children().intersection(eles);\n\n // let random = 0;\n while (children.nodes(\":childless\").length == 0) {\n // random = Math.floor(Math.random() * children.nodes().length); // if all children are compound then proceed randomly\n children = children.nodes()[0].children().intersection(eles);\n }\n // select the representative node - we can apply different methods here\n // random = Math.floor(Math.random() * children.nodes(\":childless\").length);\n var index = 0;\n var min = children.nodes(\":childless\")[0].connectedEdges().length;\n children.nodes(\":childless\").forEach(function (ele2, i) {\n if (ele2.connectedEdges().length < min) {\n min = ele2.connectedEdges().length;\n index = i;\n }\n });\n parentChildMap.set(ele.id(), children.nodes(\":childless\")[index].id());\n });\n\n // add neighborhood relations (first real, then dummy nodes)\n nodes.forEach(function (ele) {\n var eleIndex = void 0;\n\n if (ele.isParent()) eleIndex = nodeIndexes.get(parentChildMap.get(ele.id()));else eleIndex = nodeIndexes.get(ele.id());\n\n ele.neighborhood().nodes().forEach(function (node) {\n if (eles.intersection(ele.edgesWith(node)).length > 0) {\n if (node.isParent()) allNodesNeighborhood[eleIndex].push(parentChildMap.get(node.id()));else allNodesNeighborhood[eleIndex].push(node.id());\n }\n });\n });\n\n var _loop = function _loop(_key) {\n var eleIndex = nodeIndexes.get(_key);\n var disconnectedId = void 0;\n dummyNodes.get(_key).forEach(function (id) {\n if (cy.getElementById(id).isParent()) disconnectedId = parentChildMap.get(id);else disconnectedId = id;\n\n allNodesNeighborhood[eleIndex].push(disconnectedId);\n allNodesNeighborhood[nodeIndexes.get(disconnectedId)].push(_key);\n });\n };\n\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = dummyNodes.keys()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _key = _step2.value;\n\n _loop(_key);\n }\n\n // nodeSize now only considers the size of transformed graph\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n nodeSize = nodeIndexes.size;\n\n var spectralResult = void 0;\n\n // If number of nodes in transformed graph is 1 or 2, either SVD or powerIteration causes problem\n // So skip spectral and layout the graph with cose\n if (nodeSize > 2) {\n // if # of nodes in transformed graph is smaller than sample size,\n // then use # of nodes as sample size\n sampleSize = nodeSize < options.sampleSize ? nodeSize : options.sampleSize;\n\n // instantiates the partial matrices that will be used in spectral layout\n for (var _i14 = 0; _i14 < nodeSize; _i14++) {\n C[_i14] = [];\n }\n for (var _i15 = 0; _i15 < sampleSize; _i15++) {\n INV[_i15] = [];\n }\n\n /**** Apply spectral layout ****/\n\n if (options.quality == \"draft\" || options.step == \"all\") {\n allBFS(samplingType);\n sample();\n powerIteration();\n\n spectralResult = { nodeIndexes: nodeIndexes, xCoords: xCoords, yCoords: yCoords };\n } else {\n nodeIndexes.forEach(function (value, key) {\n xCoords.push(cy.getElementById(key).position(\"x\"));\n yCoords.push(cy.getElementById(key).position(\"y\"));\n });\n spectralResult = { nodeIndexes: nodeIndexes, xCoords: xCoords, yCoords: yCoords };\n }\n return spectralResult;\n } else {\n var iterator = nodeIndexes.keys();\n var firstNode = cy.getElementById(iterator.next().value);\n var firstNodePos = firstNode.position();\n var firstNodeWidth = firstNode.outerWidth();\n xCoords.push(firstNodePos.x);\n yCoords.push(firstNodePos.y);\n if (nodeSize == 2) {\n var secondNode = cy.getElementById(iterator.next().value);\n var secondNodeWidth = secondNode.outerWidth();\n xCoords.push(firstNodePos.x + firstNodeWidth / 2 + secondNodeWidth / 2 + options.idealEdgeLength);\n yCoords.push(firstNodePos.y);\n }\n\n spectralResult = { nodeIndexes: nodeIndexes, xCoords: xCoords, yCoords: yCoords };\n return spectralResult;\n }\n};\n\nmodule.exports = { spectralLayout: spectralLayout };\n\n/***/ }),\n\n/***/ 579:\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\n\nvar impl = __webpack_require__(212);\n\n// registers the extension on a cytoscape lib ref\nvar register = function register(cytoscape) {\n if (!cytoscape) {\n return;\n } // can't register if cytoscape unspecified\n\n cytoscape('layout', 'fcose', impl); // register with cytoscape.js\n};\n\nif (typeof cytoscape !== 'undefined') {\n // expose to global cytoscape (i.e. window.cytoscape)\n register(cytoscape);\n}\n\nmodule.exports = register;\n\n/***/ }),\n\n/***/ 140:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__140__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module is referenced by other modules so it can't be inlined\n/******/ \tvar __webpack_exports__ = __webpack_require__(579);\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});", "import { unknownIcon } from '../../rendering-util/icons.js';\nimport type { IconifyJSON } from '@iconify/types';\n\nconst wrapIcon = (icon: string) => {\n return `${icon}`;\n};\n\nexport const architectureIcons: IconifyJSON = {\n prefix: 'mermaid-architecture',\n height: 80,\n width: 80,\n icons: {\n database: {\n body: wrapIcon(\n ''\n ),\n },\n server: {\n body: wrapIcon(\n ''\n ),\n },\n disk: {\n body: wrapIcon(\n ''\n ),\n },\n internet: {\n body: wrapIcon(\n ''\n ),\n },\n cloud: {\n body: wrapIcon(\n ''\n ),\n },\n unknown: unknownIcon,\n blank: {\n body: wrapIcon(''),\n },\n },\n};\n", "import type cytoscape from 'cytoscape';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { createText } from '../../rendering-util/createText.js';\nimport { getIconSVG } from '../../rendering-util/icons.js';\nimport type { D3Element } from '../../types.js';\nimport { sanitizeText } from '../common/common.js';\nimport type { ArchitectureDB } from './architectureDb.js';\nimport { architectureIcons } from './architectureIcons.js';\nimport {\n ArchitectureDirectionArrow,\n ArchitectureDirectionArrowShift,\n edgeData,\n getArchitectureDirectionPair,\n getArchitectureDirectionXYFactors,\n isArchitectureDirectionX,\n isArchitectureDirectionXY,\n isArchitectureDirectionY,\n isArchitecturePairXY,\n nodeData,\n type ArchitectureJunction,\n type ArchitectureService,\n} from './architectureTypes.js';\nimport { getEdgeId } from '../../utils.js';\n\nexport const drawEdges = async function (\n edgesEl: D3Element,\n cy: cytoscape.Core,\n db: ArchitectureDB\n) {\n const padding = db.getConfigField('padding');\n const iconSize = db.getConfigField('iconSize');\n const halfIconSize = iconSize / 2;\n const arrowSize = iconSize / 6;\n const halfArrowSize = arrowSize / 2;\n\n await Promise.all(\n cy.edges().map(async (edge) => {\n const {\n source,\n sourceDir,\n sourceArrow,\n sourceGroup,\n target,\n targetDir,\n targetArrow,\n targetGroup,\n label,\n } = edgeData(edge);\n let { x: startX, y: startY } = edge[0].sourceEndpoint();\n const { x: midX, y: midY } = edge[0].midpoint();\n let { x: endX, y: endY } = edge[0].targetEndpoint();\n\n // Adjust the edge distance if it has the {group} modifier\n const groupEdgeShift = padding + 4;\n // +18 comes from the service label height that extends the padding on the bottom side of each group\n if (sourceGroup) {\n if (isArchitectureDirectionX(sourceDir)) {\n startX += sourceDir === 'L' ? -groupEdgeShift : groupEdgeShift;\n } else {\n startY += sourceDir === 'T' ? -groupEdgeShift : groupEdgeShift + 18;\n }\n }\n\n if (targetGroup) {\n if (isArchitectureDirectionX(targetDir)) {\n endX += targetDir === 'L' ? -groupEdgeShift : groupEdgeShift;\n } else {\n endY += targetDir === 'T' ? -groupEdgeShift : groupEdgeShift + 18;\n }\n }\n\n // Adjust the edge distance if it doesn't have the {group} modifier and the endpoint is a junction node\n if (!sourceGroup && db.getNode(source)?.type === 'junction') {\n if (isArchitectureDirectionX(sourceDir)) {\n startX += sourceDir === 'L' ? halfIconSize : -halfIconSize;\n } else {\n startY += sourceDir === 'T' ? halfIconSize : -halfIconSize;\n }\n }\n if (!targetGroup && db.getNode(target)?.type === 'junction') {\n if (isArchitectureDirectionX(targetDir)) {\n endX += targetDir === 'L' ? halfIconSize : -halfIconSize;\n } else {\n endY += targetDir === 'T' ? halfIconSize : -halfIconSize;\n }\n }\n\n if (edge[0]._private.rscratch) {\n // const bounds = edge[0]._private.rscratch;\n\n const g = edgesEl.insert('g');\n\n g.insert('path')\n .attr('d', `M ${startX},${startY} L ${midX},${midY} L${endX},${endY} `)\n .attr('class', 'edge')\n .attr('id', getEdgeId(source, target, { prefix: 'L' }));\n\n if (sourceArrow) {\n const xShift = isArchitectureDirectionX(sourceDir)\n ? ArchitectureDirectionArrowShift[sourceDir](startX, arrowSize)\n : startX - halfArrowSize;\n const yShift = isArchitectureDirectionY(sourceDir)\n ? ArchitectureDirectionArrowShift[sourceDir](startY, arrowSize)\n : startY - halfArrowSize;\n\n g.insert('polygon')\n .attr('points', ArchitectureDirectionArrow[sourceDir](arrowSize))\n .attr('transform', `translate(${xShift},${yShift})`)\n .attr('class', 'arrow');\n }\n if (targetArrow) {\n const xShift = isArchitectureDirectionX(targetDir)\n ? ArchitectureDirectionArrowShift[targetDir](endX, arrowSize)\n : endX - halfArrowSize;\n const yShift = isArchitectureDirectionY(targetDir)\n ? ArchitectureDirectionArrowShift[targetDir](endY, arrowSize)\n : endY - halfArrowSize;\n\n g.insert('polygon')\n .attr('points', ArchitectureDirectionArrow[targetDir](arrowSize))\n .attr('transform', `translate(${xShift},${yShift})`)\n .attr('class', 'arrow');\n }\n\n if (label) {\n const axis = !isArchitectureDirectionXY(sourceDir, targetDir)\n ? isArchitectureDirectionX(sourceDir)\n ? 'X'\n : 'Y'\n : 'XY';\n\n let width = 0;\n if (axis === 'X') {\n width = Math.abs(startX - endX);\n } else if (axis === 'Y') {\n // Reduce width by a factor of 1.5 to avoid overlapping service labels\n width = Math.abs(startY - endY) / 1.5;\n } else {\n width = Math.abs(startX - endX) / 2;\n }\n\n const textElem = g.append('g');\n await createText(\n textElem,\n label,\n {\n useHtmlLabels: false,\n width,\n classes: 'architecture-service-label',\n },\n getConfig()\n );\n\n textElem\n .attr('dy', '1em')\n .attr('alignment-baseline', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('text-anchor', 'middle');\n\n if (axis === 'X') {\n textElem.attr('transform', 'translate(' + midX + ', ' + midY + ')');\n } else if (axis === 'Y') {\n textElem.attr('transform', 'translate(' + midX + ', ' + midY + ') rotate(-90)');\n } else if (axis === 'XY') {\n const pair = getArchitectureDirectionPair(sourceDir, targetDir);\n if (pair && isArchitecturePairXY(pair)) {\n const bboxOrig = textElem.node().getBoundingClientRect();\n const [x, y] = getArchitectureDirectionXYFactors(pair);\n\n textElem\n .attr('dominant-baseline', 'auto')\n .attr('transform', `rotate(${-1 * x * y * 45})`);\n\n // Calculate the new width/height with the rotation applied, and transform to the proper position\n const bboxNew = textElem.node().getBoundingClientRect();\n textElem.attr(\n 'transform',\n `\n translate(${midX}, ${midY - bboxOrig.height / 2})\n translate(${(x * bboxNew.width) / 2}, ${(y * bboxNew.height) / 2})\n rotate(${-1 * x * y * 45}, 0, ${bboxOrig.height / 2})\n `\n );\n }\n }\n }\n }\n })\n );\n};\n\nexport const drawGroups = async function (\n groupsEl: D3Element,\n cy: cytoscape.Core,\n db: ArchitectureDB\n) {\n const padding = db.getConfigField('padding');\n const groupIconSize = padding * 0.75;\n\n const fontSize = db.getConfigField('fontSize');\n\n const iconSize = db.getConfigField('iconSize');\n const halfIconSize = iconSize / 2;\n\n await Promise.all(\n cy.nodes().map(async (node) => {\n const data = nodeData(node);\n if (data.type === 'group') {\n const { h, w, x1, y1 } = node.boundingBox();\n\n const groupsNode = groupsEl.append('rect');\n groupsNode\n .attr('id', `group-${data.id}`)\n .attr('x', x1 + halfIconSize)\n .attr('y', y1 + halfIconSize)\n .attr('width', w)\n .attr('height', h)\n .attr('class', 'node-bkg');\n\n const groupLabelContainer = groupsEl.append('g');\n let shiftedX1 = x1;\n let shiftedY1 = y1;\n if (data.icon) {\n const bkgElem = groupLabelContainer.append('g');\n bkgElem.html(\n `${await getIconSVG(data.icon, { height: groupIconSize, width: groupIconSize, fallbackPrefix: architectureIcons.prefix })}`\n );\n bkgElem.attr(\n 'transform',\n 'translate(' +\n (shiftedX1 + halfIconSize + 1) +\n ', ' +\n (shiftedY1 + halfIconSize + 1) +\n ')'\n );\n shiftedX1 += groupIconSize;\n // TODO: test with more values\n // - 1 - 2 comes from the Y axis transform of the icon and label\n shiftedY1 += fontSize / 2 - 1 - 2;\n }\n if (data.label) {\n const textElem = groupLabelContainer.append('g');\n await createText(\n textElem,\n data.label,\n {\n useHtmlLabels: false,\n width: w,\n classes: 'architecture-service-label',\n },\n getConfig()\n );\n textElem\n .attr('dy', '1em')\n .attr('alignment-baseline', 'middle')\n .attr('dominant-baseline', 'start')\n .attr('text-anchor', 'start');\n\n textElem.attr(\n 'transform',\n 'translate(' +\n (shiftedX1 + halfIconSize + 4) +\n ', ' +\n (shiftedY1 + halfIconSize + 2) +\n ')'\n );\n }\n db.setElementForId(data.id, groupsNode);\n }\n })\n );\n};\n\nexport const drawServices = async function (\n db: ArchitectureDB,\n elem: D3Element,\n services: ArchitectureService[]\n): Promise {\n const config = getConfig();\n for (const service of services) {\n const serviceElem = elem.append('g');\n const iconSize = db.getConfigField('iconSize');\n\n if (service.title) {\n const textElem = serviceElem.append('g');\n await createText(\n textElem,\n service.title,\n {\n useHtmlLabels: false,\n width: iconSize * 1.5,\n classes: 'architecture-service-label',\n },\n config\n );\n\n textElem\n .attr('dy', '1em')\n .attr('alignment-baseline', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('text-anchor', 'middle');\n\n textElem.attr('transform', 'translate(' + iconSize / 2 + ', ' + iconSize + ')');\n }\n\n const bkgElem = serviceElem.append('g');\n if (service.icon) {\n // TODO: should a warning be given to end-users saying which icon names are available?\n // if (!isIconNameInUse(service.icon)) {\n // throw new Error(`Invalid SVG Icon name: \"${service.icon}\"`);\n // }\n bkgElem.html(\n `${await getIconSVG(service.icon, { height: iconSize, width: iconSize, fallbackPrefix: architectureIcons.prefix })}`\n );\n } else if (service.iconText) {\n bkgElem.html(\n `${await getIconSVG('blank', { height: iconSize, width: iconSize, fallbackPrefix: architectureIcons.prefix })}`\n );\n const textElemContainer = bkgElem.append('g');\n const fo = textElemContainer\n .append('foreignObject')\n .attr('width', iconSize)\n .attr('height', iconSize);\n const divElem = fo\n .append('div')\n .attr('class', 'node-icon-text')\n .attr('style', `height: ${iconSize}px;`)\n .append('div')\n .html(sanitizeText(service.iconText, config));\n const fontSize =\n parseInt(\n window\n .getComputedStyle(divElem.node(), null)\n .getPropertyValue('font-size')\n .replace(/\\D/g, '')\n ) ?? 16;\n divElem.attr('style', `-webkit-line-clamp: ${Math.floor((iconSize - 2) / fontSize)};`);\n } else {\n bkgElem\n .append('path')\n .attr('class', 'node-bkg')\n .attr('id', 'node-' + service.id)\n .attr(\n 'd',\n `M0 ${iconSize} v${-iconSize} q0,-5 5,-5 h${iconSize} q5,0 5,5 v${iconSize} H0 Z`\n );\n }\n\n serviceElem.attr('id', `service-${service.id}`).attr('class', 'architecture-service');\n\n const { width, height } = serviceElem.node().getBBox();\n service.width = width;\n service.height = height;\n db.setElementForId(service.id, serviceElem);\n }\n return 0;\n};\n\nexport const drawJunctions = function (\n db: ArchitectureDB,\n elem: D3Element,\n junctions: ArchitectureJunction[]\n) {\n junctions.forEach((junction) => {\n const junctionElem = elem.append('g');\n const iconSize = db.getConfigField('iconSize');\n\n const bkgElem = junctionElem.append('g');\n bkgElem\n .append('rect')\n .attr('id', 'node-' + junction.id)\n .attr('fill-opacity', '0')\n .attr('width', iconSize)\n .attr('height', iconSize);\n\n junctionElem.attr('class', 'architecture-junction');\n\n const { width, height } = junctionElem._groups[0][0].getBBox();\n junctionElem.width = width;\n junctionElem.height = height;\n db.setElementForId(junction.id, junctionElem);\n });\n};\n", "import type { LayoutOptions, Position } from 'cytoscape';\nimport cytoscape from 'cytoscape';\nimport fcose from 'cytoscape-fcose';\nimport { select } from 'd3';\nimport type { DrawDefinition, SVG } from '../../diagram-api/types.js';\nimport type { Diagram } from '../../Diagram.js';\nimport { log } from '../../logger.js';\nimport { registerIconPacks } from '../../rendering-util/icons.js';\nimport { selectSvgElement } from '../../rendering-util/selectSvgElement.js';\nimport { setupGraphViewbox } from '../../setupGraphViewbox.js';\nimport type { ArchitectureDB } from './architectureDb.js';\nimport { architectureIcons } from './architectureIcons.js';\nimport type {\n ArchitectureAlignment,\n ArchitectureDataStructures,\n ArchitectureGroupAlignments,\n ArchitectureJunction,\n ArchitectureSpatialMap,\n EdgeSingular,\n EdgeSingularData,\n NodeSingularData,\n} from './architectureTypes.js';\nimport {\n type ArchitectureDirection,\n type ArchitectureEdge,\n type ArchitectureGroup,\n type ArchitectureService,\n ArchitectureDirectionName,\n edgeData,\n getOppositeArchitectureDirection,\n isArchitectureDirectionXY,\n isArchitectureDirectionY,\n nodeData,\n} from './architectureTypes.js';\nimport { drawEdges, drawGroups, drawJunctions, drawServices } from './svgDraw.js';\n\nregisterIconPacks([\n {\n name: architectureIcons.prefix,\n icons: architectureIcons,\n },\n]);\ncytoscape.use(fcose as any);\n\nfunction addServices(services: ArchitectureService[], cy: cytoscape.Core, db: ArchitectureDB) {\n services.forEach((service) => {\n cy.add({\n group: 'nodes',\n data: {\n type: 'service',\n id: service.id,\n icon: service.icon,\n label: service.title,\n parent: service.in,\n width: db.getConfigField('iconSize'),\n height: db.getConfigField('iconSize'),\n } as NodeSingularData,\n classes: 'node-service',\n });\n });\n}\n\nfunction addJunctions(junctions: ArchitectureJunction[], cy: cytoscape.Core, db: ArchitectureDB) {\n junctions.forEach((junction) => {\n cy.add({\n group: 'nodes',\n data: {\n type: 'junction',\n id: junction.id,\n parent: junction.in,\n width: db.getConfigField('iconSize'),\n height: db.getConfigField('iconSize'),\n } as NodeSingularData,\n classes: 'node-junction',\n });\n });\n}\n\nfunction positionNodes(db: ArchitectureDB, cy: cytoscape.Core) {\n cy.nodes().map((node) => {\n const data = nodeData(node);\n if (data.type === 'group') {\n return;\n }\n data.x = node.position().x;\n data.y = node.position().y;\n\n const nodeElem = db.getElementById(data.id);\n nodeElem.attr('transform', 'translate(' + (data.x || 0) + ',' + (data.y || 0) + ')');\n });\n}\n\nfunction addGroups(groups: ArchitectureGroup[], cy: cytoscape.Core) {\n groups.forEach((group) => {\n cy.add({\n group: 'nodes',\n data: {\n type: 'group',\n id: group.id,\n icon: group.icon,\n label: group.title,\n parent: group.in,\n } as NodeSingularData,\n classes: 'node-group',\n });\n });\n}\n\nfunction addEdges(edges: ArchitectureEdge[], cy: cytoscape.Core) {\n edges.forEach((parsedEdge) => {\n const { lhsId, rhsId, lhsInto, lhsGroup, rhsInto, lhsDir, rhsDir, rhsGroup, title } =\n parsedEdge;\n const edgeType = isArchitectureDirectionXY(parsedEdge.lhsDir, parsedEdge.rhsDir)\n ? 'segments'\n : 'straight';\n const edge: EdgeSingularData = {\n id: `${lhsId}-${rhsId}`,\n label: title,\n source: lhsId,\n sourceDir: lhsDir,\n sourceArrow: lhsInto,\n sourceGroup: lhsGroup,\n sourceEndpoint:\n lhsDir === 'L'\n ? '0 50%'\n : lhsDir === 'R'\n ? '100% 50%'\n : lhsDir === 'T'\n ? '50% 0'\n : '50% 100%',\n target: rhsId,\n targetDir: rhsDir,\n targetArrow: rhsInto,\n targetGroup: rhsGroup,\n targetEndpoint:\n rhsDir === 'L'\n ? '0 50%'\n : rhsDir === 'R'\n ? '100% 50%'\n : rhsDir === 'T'\n ? '50% 0'\n : '50% 100%',\n };\n cy.add({\n group: 'edges',\n data: edge,\n classes: edgeType,\n });\n });\n}\n\nfunction getAlignments(\n db: ArchitectureDB,\n spatialMaps: ArchitectureSpatialMap[],\n groupAlignments: ArchitectureGroupAlignments\n): fcose.FcoseAlignmentConstraint {\n /**\n * Flattens the alignment object so nodes in different groups will be in the same alignment array IFF their groups don't connect in a conflicting alignment\n *\n * i.e., two groups which connect horizontally should not have nodes with vertical alignments to one another\n *\n * See: #5952\n *\n * @param alignmentObj - alignment object with the outer key being the row/col # and the inner key being the group name mapped to the nodes on that axis in the group\n * @param alignmentDir - alignment direction\n * @returns flattened alignment object with an arbitrary key mapping to nodes in the same row/col\n */\n const flattenAlignments = (\n alignmentObj: Record>,\n alignmentDir: ArchitectureAlignment\n ): Record => {\n return Object.entries(alignmentObj).reduce(\n (prev, [dir, alignments]) => {\n // prev is the mapping of x/y coordinate to an array of the nodes in that row/column\n let cnt = 0;\n const arr = Object.entries(alignments); // [group name, array of nodes within the group on axis dir]\n if (arr.length === 1) {\n // If only one group exists in the row/column, we don't need to do anything else\n prev[dir] = arr[0][1];\n return prev;\n }\n for (let i = 0; i < arr.length - 1; i++) {\n for (let j = i + 1; j < arr.length; j++) {\n const [aGroupId, aNodeIds] = arr[i];\n const [bGroupId, bNodeIds] = arr[j];\n const alignment = groupAlignments[aGroupId]?.[bGroupId]; // Get how the two groups are intended to align (undefined if they aren't)\n\n if (alignment === alignmentDir) {\n // If the intended alignment between the two groups is the same as the alignment we are parsing\n prev[dir] ??= [];\n prev[dir] = [...prev[dir], ...aNodeIds, ...bNodeIds]; // add the node ids of both groups to the axis array in prev\n } else if (aGroupId === 'default' || bGroupId === 'default') {\n // If either of the groups are in the default space (not in a group), use the same behavior as above\n prev[dir] ??= [];\n prev[dir] = [...prev[dir], ...aNodeIds, ...bNodeIds];\n } else {\n // Otherwise, the nodes in the two groups are not intended to align\n const keyA = `${dir}-${cnt++}`;\n prev[keyA] = aNodeIds;\n const keyB = `${dir}-${cnt++}`;\n prev[keyB] = bNodeIds;\n }\n }\n }\n\n return prev;\n },\n {} as Record\n );\n };\n\n const alignments = spatialMaps.map((spatialMap) => {\n const horizontalAlignments: Record> = {};\n const verticalAlignments: Record> = {};\n\n // Group service ids in an object with their x and y coordinate as the key\n Object.entries(spatialMap).forEach(([id, [x, y]]) => {\n const nodeGroup = db.getNode(id)?.in ?? 'default';\n\n horizontalAlignments[y] ??= {};\n horizontalAlignments[y][nodeGroup] ??= [];\n horizontalAlignments[y][nodeGroup].push(id);\n\n verticalAlignments[x] ??= {};\n verticalAlignments[x][nodeGroup] ??= [];\n verticalAlignments[x][nodeGroup].push(id);\n });\n\n // Merge the values of each object into a list if the inner list has at least 2 elements\n return {\n horiz: Object.values(flattenAlignments(horizontalAlignments, 'horizontal')).filter(\n (arr) => arr.length > 1\n ),\n vert: Object.values(flattenAlignments(verticalAlignments, 'vertical')).filter(\n (arr) => arr.length > 1\n ),\n };\n });\n\n // Merge the alignment lists for each spatial map into one 2d array per axis\n const [horizontal, vertical] = alignments.reduce(\n ([prevHoriz, prevVert], { horiz, vert }) => {\n return [\n [...prevHoriz, ...horiz],\n [...prevVert, ...vert],\n ];\n },\n [[] as string[][], [] as string[][]]\n );\n\n return {\n horizontal,\n vertical,\n };\n}\n\nfunction getRelativeConstraints(\n spatialMaps: ArchitectureSpatialMap[],\n db: ArchitectureDB\n): fcose.FcoseRelativePlacementConstraint[] {\n const relativeConstraints: fcose.FcoseRelativePlacementConstraint[] = [];\n const posToStr = (pos: number[]) => `${pos[0]},${pos[1]}`;\n const strToPos = (pos: string) => pos.split(',').map((p) => parseInt(p));\n\n spatialMaps.forEach((spatialMap) => {\n const invSpatialMap = Object.fromEntries(\n Object.entries(spatialMap).map(([id, pos]) => [posToStr(pos), id])\n );\n\n // perform BFS\n const queue = [posToStr([0, 0])];\n const visited: Record = {};\n const directions: Record = {\n L: [-1, 0],\n R: [1, 0],\n T: [0, 1],\n B: [0, -1],\n };\n while (queue.length > 0) {\n const curr = queue.shift();\n if (curr) {\n visited[curr] = 1;\n const currId = invSpatialMap[curr];\n if (currId) {\n const currPos = strToPos(curr);\n Object.entries(directions).forEach(([dir, shift]) => {\n const newPos = posToStr([currPos[0] + shift[0], currPos[1] + shift[1]]);\n const newId = invSpatialMap[newPos];\n // If there is an adjacent service to the current one and it has not yet been visited\n if (newId && !visited[newPos]) {\n queue.push(newPos);\n // @ts-ignore cannot determine if left/right or top/bottom are paired together\n relativeConstraints.push({\n [ArchitectureDirectionName[dir as ArchitectureDirection]]: newId,\n [ArchitectureDirectionName[\n getOppositeArchitectureDirection(dir as ArchitectureDirection)\n ]]: currId,\n gap: 1.5 * db.getConfigField('iconSize'),\n });\n }\n });\n }\n }\n }\n });\n return relativeConstraints;\n}\n\nfunction layoutArchitecture(\n services: ArchitectureService[],\n junctions: ArchitectureJunction[],\n groups: ArchitectureGroup[],\n edges: ArchitectureEdge[],\n db: ArchitectureDB,\n { spatialMaps, groupAlignments }: ArchitectureDataStructures\n): Promise {\n return new Promise((resolve) => {\n const renderEl = select('body').append('div').attr('id', 'cy').attr('style', 'display:none');\n const cy = cytoscape({\n container: document.getElementById('cy'),\n style: [\n {\n selector: 'edge',\n style: {\n 'curve-style': 'straight',\n label: 'data(label)',\n 'source-endpoint': 'data(sourceEndpoint)',\n 'target-endpoint': 'data(targetEndpoint)',\n },\n },\n {\n selector: 'edge.segments',\n style: {\n 'curve-style': 'segments',\n 'segment-weights': '0',\n 'segment-distances': [0.5],\n // @ts-ignore Incorrect library types\n 'edge-distances': 'endpoints',\n 'source-endpoint': 'data(sourceEndpoint)',\n 'target-endpoint': 'data(targetEndpoint)',\n },\n },\n {\n selector: 'node',\n style: {\n // @ts-ignore Incorrect library types\n 'compound-sizing-wrt-labels': 'include',\n },\n },\n {\n selector: 'node[label]',\n style: {\n 'text-valign': 'bottom',\n 'text-halign': 'center',\n 'font-size': `${db.getConfigField('fontSize')}px`,\n },\n },\n {\n selector: '.node-service',\n style: {\n label: 'data(label)',\n width: 'data(width)',\n height: 'data(height)',\n },\n },\n {\n selector: '.node-junction',\n style: {\n width: 'data(width)',\n height: 'data(height)',\n },\n },\n {\n selector: '.node-group',\n style: {\n // @ts-ignore Incorrect library types\n padding: `${db.getConfigField('padding')}px`,\n },\n },\n ],\n layout: {\n name: 'grid',\n boundingBox: {\n x1: 0,\n x2: 100,\n y1: 0,\n y2: 100,\n },\n },\n });\n // Remove element after layout\n renderEl.remove();\n\n addGroups(groups, cy);\n addServices(services, cy, db);\n addJunctions(junctions, cy, db);\n addEdges(edges, cy);\n // Use the spatial map to create alignment arrays for fcose\n const alignmentConstraint = getAlignments(db, spatialMaps, groupAlignments);\n\n // Create the relative constraints for fcose by using an inverse of the spatial map and performing BFS on it\n const relativePlacementConstraint = getRelativeConstraints(spatialMaps, db);\n\n const layout = cy.layout({\n name: 'fcose',\n quality: 'proof',\n styleEnabled: false,\n animate: false,\n nodeDimensionsIncludeLabels: false,\n // Adjust the edge parameters if it passes through the border of a group\n // Hacky fix for: https://github.com/iVis-at-Bilkent/cytoscape.js-fcose/issues/67\n idealEdgeLength(edge: EdgeSingular) {\n const [nodeA, nodeB] = edge.connectedNodes();\n const { parent: parentA } = nodeData(nodeA);\n const { parent: parentB } = nodeData(nodeB);\n const elasticity =\n parentA === parentB\n ? 1.5 * db.getConfigField('iconSize')\n : 0.5 * db.getConfigField('iconSize');\n return elasticity;\n },\n edgeElasticity(edge: EdgeSingular) {\n const [nodeA, nodeB] = edge.connectedNodes();\n const { parent: parentA } = nodeData(nodeA);\n const { parent: parentB } = nodeData(nodeB);\n const elasticity = parentA === parentB ? 0.45 : 0.001;\n return elasticity;\n },\n alignmentConstraint,\n relativePlacementConstraint,\n } as LayoutOptions);\n\n // Once the diagram has been generated and the service's position cords are set, adjust the XY edges to have a 90deg bend\n layout.one('layoutstop', () => {\n function getSegmentWeights(\n source: Position,\n target: Position,\n pointX: number,\n pointY: number\n ) {\n let W, D;\n const { x: sX, y: sY } = source;\n const { x: tX, y: tY } = target;\n\n D =\n (pointY - sY + ((sX - pointX) * (sY - tY)) / (sX - tX)) /\n Math.sqrt(1 + Math.pow((sY - tY) / (sX - tX), 2));\n W = Math.sqrt(Math.pow(pointY - sY, 2) + Math.pow(pointX - sX, 2) - Math.pow(D, 2));\n\n const distAB = Math.sqrt(Math.pow(tX - sX, 2) + Math.pow(tY - sY, 2));\n W = W / distAB;\n\n //check whether the point (pointX, pointY) is on right or left of the line src to tgt. for instance : a point C(X, Y) and line (AB). d=(xB-xA)(yC-yA)-(yB-yA)(xC-xA). if d>0, then C is on left of the line. if d<0, it is on right. if d=0, it is on the line.\n let delta1 = (tX - sX) * (pointY - sY) - (tY - sY) * (pointX - sX);\n switch (true) {\n case delta1 >= 0:\n delta1 = 1;\n break;\n case delta1 < 0:\n delta1 = -1;\n break;\n }\n //check whether the point (pointX, pointY) is \"behind\" the line src to tgt\n let delta2 = (tX - sX) * (pointX - sX) + (tY - sY) * (pointY - sY);\n switch (true) {\n case delta2 >= 0:\n delta2 = 1;\n break;\n case delta2 < 0:\n delta2 = -1;\n break;\n }\n\n D = Math.abs(D) * delta1; //ensure that sign of D is same as sign of delta1. Hence we need to take absolute value of D and multiply by delta1\n W = W * delta2;\n\n return {\n distances: D,\n weights: W,\n };\n }\n cy.startBatch();\n for (const edge of Object.values(cy.edges())) {\n if (edge.data?.()) {\n const { x: sX, y: sY } = edge.source().position();\n const { x: tX, y: tY } = edge.target().position();\n if (sX !== tX && sY !== tY) {\n const sEP = edge.sourceEndpoint();\n const tEP = edge.targetEndpoint();\n const { sourceDir } = edgeData(edge);\n const [pointX, pointY] = isArchitectureDirectionY(sourceDir)\n ? [sEP.x, tEP.y]\n : [tEP.x, sEP.y];\n const { weights, distances } = getSegmentWeights(sEP, tEP, pointX, pointY);\n edge.style('segment-distances', distances);\n edge.style('segment-weights', weights);\n }\n }\n }\n cy.endBatch();\n layout.run();\n });\n layout.run();\n\n cy.ready((e) => {\n log.info('Ready', e);\n resolve(cy);\n });\n });\n}\n\nexport const draw: DrawDefinition = async (text, id, _version, diagObj: Diagram) => {\n // TODO: Add title support for architecture diagrams\n\n const db = diagObj.db as ArchitectureDB;\n\n const services = db.getServices();\n const junctions = db.getJunctions();\n const groups = db.getGroups();\n const edges = db.getEdges();\n const ds = db.getDataStructures();\n\n const svg: SVG = selectSvgElement(id);\n\n const edgesElem = svg.append('g');\n edgesElem.attr('class', 'architecture-edges');\n\n const servicesElem = svg.append('g');\n servicesElem.attr('class', 'architecture-services');\n\n const groupElem = svg.append('g');\n groupElem.attr('class', 'architecture-groups');\n\n await drawServices(db, servicesElem, services);\n drawJunctions(db, servicesElem, junctions);\n\n const cy = await layoutArchitecture(services, junctions, groups, edges, db, ds);\n\n await drawEdges(edgesElem, cy, db);\n await drawGroups(groupElem, cy, db);\n positionNodes(db, cy);\n\n setupGraphViewbox(undefined, svg, db.getConfigField('padding'), db.getConfigField('useMaxWidth'));\n};\n\nexport const renderer = { draw };\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\nimport { parser } from './architectureParser.js';\nimport { ArchitectureDB } from './architectureDb.js';\nimport styles from './architectureStyles.js';\nimport { renderer } from './architectureRenderer.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n get db() {\n return new ArchitectureDB();\n },\n renderer,\n styles,\n};\n", "import type { DiagramDB } from '../../diagram-api/types.js';\nimport type { DiagramStyleClassDef } from '../../diagram-api/types.js';\nimport type { TreemapDiagramConfig, TreemapNode } from './types.js';\nimport DEFAULT_CONFIG from '../../defaultConfig.js';\nimport { getConfig as commonGetConfig } from '../../config.js';\nimport { cleanAndMerge } from '../../utils.js';\nimport { isLabelStyle } from '../../rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js';\nimport {\n clear as commonClear,\n getAccDescription,\n getAccTitle,\n getDiagramTitle,\n setAccDescription,\n setAccTitle,\n setDiagramTitle,\n} from '../common/commonDb.js';\nexport class TreeMapDB implements DiagramDB {\n private nodes: TreemapNode[] = [];\n private levels: Map = new Map();\n private outerNodes: TreemapNode[] = [];\n private classes: Map = new Map();\n private root?: TreemapNode;\n\n public getNodes() {\n return this.nodes;\n }\n\n public getConfig() {\n const defaultConfig = DEFAULT_CONFIG as unknown as { treemap: Required };\n const userConfig = commonGetConfig() as unknown as { treemap?: Partial };\n return cleanAndMerge({\n ...defaultConfig.treemap,\n ...(userConfig.treemap ?? {}),\n }) as Required;\n }\n\n public addNode(node: TreemapNode, level: number) {\n this.nodes.push(node);\n this.levels.set(node, level);\n if (level === 0) {\n this.outerNodes.push(node);\n this.root ??= node;\n }\n }\n\n public getRoot() {\n return { name: '', children: this.outerNodes };\n }\n\n public addClass(id: string, _style: string) {\n const styleClass = this.classes.get(id) ?? { id, styles: [], textStyles: [] };\n const styles = _style.replace(/\\\\,/g, '\u00A7\u00A7\u00A7').replace(/,/g, ';').replace(/\u00A7\u00A7\u00A7/g, ',').split(';');\n if (styles) {\n styles.forEach((s) => {\n if (isLabelStyle(s)) {\n if (styleClass?.textStyles) {\n styleClass.textStyles.push(s);\n } else {\n styleClass.textStyles = [s];\n }\n }\n if (styleClass?.styles) {\n styleClass.styles.push(s);\n } else {\n styleClass.styles = [s];\n }\n });\n }\n this.classes.set(id, styleClass);\n }\n\n public getClasses() {\n return this.classes;\n }\n\n public getStylesForClass(classSelector: string): string[] {\n return this.classes.get(classSelector)?.styles ?? [];\n }\n\n public clear() {\n commonClear();\n this.nodes = [];\n this.levels = new Map();\n this.outerNodes = [];\n this.classes = new Map();\n this.root = undefined;\n }\n\n public setAccTitle = setAccTitle;\n public getAccTitle = getAccTitle;\n public setDiagramTitle = setDiagramTitle;\n public getDiagramTitle = getDiagramTitle;\n public getAccDescription = getAccDescription;\n public setAccDescription = setAccDescription;\n}\n", "import type { TreemapNode } from './types.js';\n\n/**\n * Converts a flat array of treemap items into a hierarchical structure\n * @param items - Array of flat treemap items with level, name, type, and optional value\n * @returns A hierarchical tree structure\n */\nexport function buildHierarchy(\n items: {\n level: number;\n name: string;\n type: string;\n value?: number;\n classSelector?: string;\n cssCompiledStyles?: string;\n }[]\n): TreemapNode[] {\n if (!items.length) {\n return [];\n }\n\n const root: TreemapNode[] = [];\n const stack: { node: TreemapNode; level: number }[] = [];\n\n items.forEach((item) => {\n const node: TreemapNode = {\n name: item.name,\n children: item.type === 'Leaf' ? undefined : [],\n };\n node.classSelector = item?.classSelector;\n if (item?.cssCompiledStyles) {\n node.cssCompiledStyles = [item.cssCompiledStyles];\n }\n\n if (item.type === 'Leaf' && item.value !== undefined) {\n node.value = item.value;\n }\n\n // Find the right parent for this node\n while (stack.length > 0 && stack[stack.length - 1].level >= item.level) {\n stack.pop();\n }\n\n if (stack.length === 0) {\n // This is a root node\n root.push(node);\n } else {\n // Add as child to the parent\n const parent = stack[stack.length - 1].node;\n if (parent.children) {\n parent.children.push(node);\n } else {\n parent.children = [node];\n }\n }\n\n // Only add to stack if it can have children\n if (item.type !== 'Leaf') {\n stack.push({ node, level: item.level });\n }\n });\n\n return root;\n}\n", "import { parse } from '@mermaid-js/parser';\nimport type { ParserDefinition } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport { populateCommonDb } from '../common/populateCommonDb.js';\nimport type { TreemapNode, TreemapAst, TreemapDB } from './types.js';\nimport { buildHierarchy } from './utils.js';\nimport { TreeMapDB } from './db.js';\n\n/**\n * Populates the database with data from the Treemap AST\n * @param ast - The Treemap AST\n */\nconst populate = (ast: TreemapAst, db: TreemapDB) => {\n // We need to bypass the type checking for populateCommonDb\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n populateCommonDb(ast as any, db);\n\n const items: {\n level: number;\n name: string;\n type: string;\n value?: number;\n classSelector?: string;\n cssCompiledStyles?: string;\n }[] = [];\n\n // Extract classes and styles from the treemap\n for (const row of ast.TreemapRows ?? []) {\n if (row.$type === 'ClassDefStatement') {\n db.addClass(row.className ?? '', row.styleText ?? '');\n }\n }\n\n // Extract data from each row in the treemap\n for (const row of ast.TreemapRows ?? []) {\n const item = row.item;\n\n if (!item) {\n continue;\n }\n\n const level = row.indent ? parseInt(row.indent) : 0;\n const name = getItemName(item);\n\n // Get styles as a string if they exist\n const styles = item.classSelector ? db.getStylesForClass(item.classSelector) : [];\n const cssCompiledStyles = styles.length > 0 ? styles.join(';') : undefined;\n\n const itemData = {\n level,\n name,\n type: item.$type,\n value: item.value,\n classSelector: item.classSelector,\n cssCompiledStyles,\n };\n\n items.push(itemData);\n }\n\n // Convert flat structure to hierarchical\n const hierarchyNodes = buildHierarchy(items);\n\n // Add all nodes to the database\n const addNodesRecursively = (nodes: TreemapNode[], level: number) => {\n for (const node of nodes) {\n db.addNode(node, level);\n if (node.children && node.children.length > 0) {\n addNodesRecursively(node.children, level + 1);\n }\n }\n };\n\n addNodesRecursively(hierarchyNodes, 0);\n};\n\n/**\n * Gets the name of a treemap item\n * @param item - The treemap item\n * @returns The name of the item\n */\nconst getItemName = (item: { name?: string | number }): string => {\n return item.name ? String(item.name) : '';\n};\n\nexport const parser: ParserDefinition = {\n // @ts-expect-error - TreeMapDB is not assignable to DiagramDB\n parser: { yy: undefined },\n parse: async (text: string): Promise => {\n try {\n // Use a generic parse that accepts any diagram type\n\n const parseFunc = parse as (diagramType: string, text: string) => Promise;\n const ast = await parseFunc('treemap', text);\n log.debug('Treemap AST:', ast);\n const db = parser.parser?.yy;\n if (!(db instanceof TreeMapDB)) {\n throw new Error(\n 'parser.parser?.yy was not a TreemapDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.'\n );\n }\n populate(ast, db);\n } catch (error) {\n log.error('Error parsing treemap:', error);\n throw error;\n }\n },\n};\n", "import type { Diagram } from '../../Diagram.js';\nimport type {\n DiagramRenderer,\n DiagramStyleClassDef,\n DrawDefinition,\n} from '../../diagram-api/types.js';\nimport { selectSvgElement } from '../../rendering-util/selectSvgElement.js';\nimport { setupViewPortForSVG } from '../../rendering-util/setupViewPortForSVG.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\nimport type { TreemapDB, TreemapNode } from './types.js';\nimport { scaleOrdinal, treemap, hierarchy, format, select } from 'd3';\nimport { styles2String } from '../../rendering-util/rendering-elements/shapes/handDrawnShapeStyles.js';\nimport { getConfig } from '../../config.js';\nimport { log } from '../../logger.js';\nimport type { Node } from '../../rendering-util/types.js';\n\nconst DEFAULT_INNER_PADDING = 10; // Default for inner padding between cells/sections\nconst SECTION_INNER_PADDING = 10; // Default for inner padding between cells/sections\nconst SECTION_HEADER_HEIGHT = 25;\n\n/**\n * Draws the treemap diagram\n */\nconst draw: DrawDefinition = (_text, id, _version, diagram: Diagram) => {\n const treemapDb = diagram.db as TreemapDB;\n const config = treemapDb.getConfig();\n const treemapInnerPadding = config.padding ?? DEFAULT_INNER_PADDING;\n const title = treemapDb.getDiagramTitle();\n const root = treemapDb.getRoot();\n const { themeVariables } = getConfig();\n if (!root) {\n return;\n }\n\n // Define dimensions\n const titleHeight = title ? 30 : 0;\n\n const svg = selectSvgElement(id);\n // Use config dimensions or defaults\n const width = config.nodeWidth ? config.nodeWidth * SECTION_INNER_PADDING : 960;\n const height = config.nodeHeight ? config.nodeHeight * SECTION_INNER_PADDING : 500;\n\n const svgWidth = width;\n const svgHeight = height + titleHeight;\n\n // Set the SVG size\n svg.attr('viewBox', `0 0 ${svgWidth} ${svgHeight}`);\n configureSvgSize(svg, svgHeight, svgWidth, config.useMaxWidth);\n\n // Format for displaying values\n let valueFormat;\n try {\n // Handle special format patterns\n const formatStr = config.valueFormat || ',';\n\n // Handle special cases that aren't directly supported by D3 format\n if (formatStr === '$0,0') {\n // Currency with thousands separator\n valueFormat = (value: number) => '$' + format(',')(value);\n } else if (formatStr.startsWith('$') && formatStr.includes(',')) {\n // Other dollar formats with commas\n const precision = /\\.\\d+/.exec(formatStr);\n const precisionStr = precision ? precision[0] : '';\n valueFormat = (value: number) => '$' + format(',' + precisionStr)(value);\n } else if (formatStr.startsWith('$')) {\n // Simple dollar sign prefix\n const restOfFormat = formatStr.substring(1);\n valueFormat = (value: number) => '$' + format(restOfFormat || '')(value);\n } else {\n // Standard D3 format\n valueFormat = format(formatStr);\n }\n } catch (error) {\n log.error('Error creating format function:', error);\n // Fallback to default format\n valueFormat = format(',');\n }\n\n // Create color scale\n const colorScale = scaleOrdinal().range([\n 'transparent',\n themeVariables.cScale0,\n themeVariables.cScale1,\n themeVariables.cScale2,\n themeVariables.cScale3,\n themeVariables.cScale4,\n themeVariables.cScale5,\n themeVariables.cScale6,\n themeVariables.cScale7,\n themeVariables.cScale8,\n themeVariables.cScale9,\n themeVariables.cScale10,\n themeVariables.cScale11,\n ]);\n const colorScalePeer = scaleOrdinal().range([\n 'transparent',\n themeVariables.cScalePeer0,\n themeVariables.cScalePeer1,\n themeVariables.cScalePeer2,\n themeVariables.cScalePeer3,\n themeVariables.cScalePeer4,\n themeVariables.cScalePeer5,\n themeVariables.cScalePeer6,\n themeVariables.cScalePeer7,\n themeVariables.cScalePeer8,\n themeVariables.cScalePeer9,\n themeVariables.cScalePeer10,\n themeVariables.cScalePeer11,\n ]);\n const colorScaleLabel = scaleOrdinal().range([\n themeVariables.cScaleLabel0,\n themeVariables.cScaleLabel1,\n themeVariables.cScaleLabel2,\n themeVariables.cScaleLabel3,\n themeVariables.cScaleLabel4,\n themeVariables.cScaleLabel5,\n themeVariables.cScaleLabel6,\n themeVariables.cScaleLabel7,\n themeVariables.cScaleLabel8,\n themeVariables.cScaleLabel9,\n themeVariables.cScaleLabel10,\n themeVariables.cScaleLabel11,\n ]);\n\n // Draw the title if it exists\n if (title) {\n svg\n .append('text')\n .attr('x', svgWidth / 2)\n .attr('y', titleHeight / 2)\n .attr('class', 'treemapTitle')\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .text(title);\n }\n\n // Create a main container for the treemap, translated below the title\n const g = svg\n .append('g')\n .attr('transform', `translate(0, ${titleHeight})`)\n .attr('class', 'treemapContainer');\n\n // Create the hierarchical structure\n const hierarchyRoot = hierarchy(root)\n .sum((d) => d.value ?? 0)\n .sort((a, b) => (b.value ?? 0) - (a.value ?? 0));\n\n // Create treemap layout\n const treemapLayout = treemap()\n .size([width, height])\n .paddingTop((d) =>\n d.children && d.children.length > 0 ? SECTION_HEADER_HEIGHT + SECTION_INNER_PADDING : 0\n )\n .paddingInner(treemapInnerPadding)\n .paddingLeft((d) => (d.children && d.children.length > 0 ? SECTION_INNER_PADDING : 0))\n .paddingRight((d) => (d.children && d.children.length > 0 ? SECTION_INNER_PADDING : 0))\n .paddingBottom((d) => (d.children && d.children.length > 0 ? SECTION_INNER_PADDING : 0))\n .round(true);\n\n // Apply the treemap layout to the hierarchy\n const treemapData = treemapLayout(hierarchyRoot);\n\n // Draw section nodes (branches - nodes with children)\n const branchNodes = treemapData.descendants().filter((d) => d.children && d.children.length > 0);\n const sections = g\n .selectAll('.treemapSection')\n .data(branchNodes)\n .enter()\n .append('g')\n .attr('class', 'treemapSection')\n .attr('transform', (d) => `translate(${d.x0},${d.y0})`);\n\n // Add section header background\n sections\n .append('rect')\n .attr('width', (d) => d.x1 - d.x0)\n .attr('height', SECTION_HEADER_HEIGHT)\n .attr('class', 'treemapSectionHeader')\n .attr('fill', 'none')\n .attr('fill-opacity', 0.6)\n .attr('stroke-width', 0.6)\n .attr('style', (d) => {\n // Hide the label for the root section\n if (d.depth === 0) {\n return 'display: none;';\n }\n return '';\n });\n\n // Add clip paths for section headers to prevent text overflow\n sections\n .append('clipPath')\n .attr('id', (_d, i) => `clip-section-${id}-${i}`)\n .append('rect')\n .attr('width', (d) => Math.max(0, d.x1 - d.x0 - 12)) // 6px padding on each side\n .attr('height', SECTION_HEADER_HEIGHT);\n\n sections\n .append('rect')\n .attr('width', (d) => d.x1 - d.x0)\n .attr('height', (d) => d.y1 - d.y0)\n .attr('class', (_d, i) => {\n return `treemapSection section${i}`;\n })\n .attr('fill', (d) => colorScale(d.data.name))\n .attr('fill-opacity', 0.6)\n .attr('stroke', (d) => colorScalePeer(d.data.name))\n .attr('stroke-width', 2.0)\n .attr('stroke-opacity', 0.4)\n .attr('style', (d) => {\n // Hide the label for the root section\n if (d.depth === 0) {\n return 'display: none;';\n }\n const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles } as Node);\n return styles.nodeStyles + ';' + styles.borderStyles.join(';');\n });\n // Add section labels\n sections\n .append('text')\n .attr('class', 'treemapSectionLabel')\n .attr('x', 6) // Keep original left padding\n .attr('y', SECTION_HEADER_HEIGHT / 2)\n .attr('dominant-baseline', 'middle')\n .text((d) => (d.depth === 0 ? '' : d.data.name)) // Skip label for root section\n .attr('font-weight', 'bold')\n .attr('style', (d) => {\n // Hide the label for the root section\n if (d.depth === 0) {\n return 'display: none;';\n }\n const labelStyles =\n 'dominant-baseline: middle; font-size: 12px; fill:' +\n colorScaleLabel(d.data.name) +\n '; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;';\n const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles } as Node);\n return labelStyles + styles.labelStyles.replace('color:', 'fill:');\n })\n .each(function (d) {\n // Skip processing for root section\n if (d.depth === 0) {\n return;\n }\n const self = select(this);\n const originalText = d.data.name;\n self.text(originalText);\n const totalHeaderWidth = d.x1 - d.x0;\n const labelXPosition = 6;\n let spaceForTextContent;\n if (config.showValues !== false && d.value) {\n const valueEndsAtXRelative = totalHeaderWidth - 10;\n const estimatedValueTextActualWidth = 30;\n const gapBetweenLabelAndValue = 10;\n const labelMustEndBeforeX =\n valueEndsAtXRelative - estimatedValueTextActualWidth - gapBetweenLabelAndValue;\n spaceForTextContent = labelMustEndBeforeX - labelXPosition;\n } else {\n const labelOwnRightPadding = 6;\n spaceForTextContent = totalHeaderWidth - labelXPosition - labelOwnRightPadding;\n }\n const minimumWidthToDisplay = 15;\n const actualAvailableWidth = Math.max(minimumWidthToDisplay, spaceForTextContent);\n const textNode = self.node()!;\n const currentTextContentLength = textNode.getComputedTextLength();\n if (currentTextContentLength > actualAvailableWidth) {\n const ellipsis = '...';\n let currentTruncatedText = originalText;\n while (currentTruncatedText.length > 0) {\n currentTruncatedText = originalText.substring(0, currentTruncatedText.length - 1);\n if (currentTruncatedText.length === 0) {\n self.text(ellipsis);\n if (textNode.getComputedTextLength() > actualAvailableWidth) {\n self.text('');\n }\n break;\n }\n self.text(currentTruncatedText + ellipsis);\n if (textNode.getComputedTextLength() <= actualAvailableWidth) {\n break;\n }\n }\n }\n });\n\n // Add section values if enabled\n if (config.showValues !== false) {\n sections\n .append('text')\n .attr('class', 'treemapSectionValue')\n .attr('x', (d) => d.x1 - d.x0 - 10)\n .attr('y', SECTION_HEADER_HEIGHT / 2)\n .attr('text-anchor', 'end')\n .attr('dominant-baseline', 'middle')\n .text((d) => (d.value ? valueFormat(d.value) : ''))\n .attr('font-style', 'italic')\n .attr('style', (d) => {\n // Hide the value for the root section\n if (d.depth === 0) {\n return 'display: none;';\n }\n const labelStyles =\n 'text-anchor: end; dominant-baseline: middle; font-size: 10px; fill:' +\n colorScaleLabel(d.data.name) +\n '; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;';\n const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles } as Node);\n return labelStyles + styles.labelStyles.replace('color:', 'fill:');\n });\n }\n\n // Draw the leaf nodes\n const leafNodes = treemapData.leaves();\n const cell = g\n .selectAll('.treemapLeafGroup')\n .data(leafNodes)\n .enter()\n .append('g')\n .attr('class', (d, i) => {\n return `treemapNode treemapLeafGroup leaf${i}${d.data.classSelector ? ` ${d.data.classSelector}` : ''}x`;\n })\n .attr('transform', (d) => `translate(${d.x0},${d.y0})`);\n\n // Add rectangle for each leaf node\n cell\n .append('rect')\n .attr('width', (d) => d.x1 - d.x0)\n .attr('height', (d) => d.y1 - d.y0)\n .attr('class', 'treemapLeaf')\n .attr('fill', (d) => {\n // Leaves inherit color from their immediate parent section's name.\n // If a leaf is the root itself (no parent), it uses its own name.\n return d.parent ? colorScale(d.parent.data.name) : colorScale(d.data.name);\n })\n .attr('style', (d) => {\n const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles } as Node);\n return styles.nodeStyles;\n })\n .attr('fill-opacity', 0.3)\n .attr('stroke', (d) => {\n // Leaves inherit color from their immediate parent section's name.\n // If a leaf is the root itself (no parent), it uses its own name.\n return d.parent ? colorScale(d.parent.data.name) : colorScale(d.data.name);\n })\n .attr('stroke-width', 3.0);\n\n // Add clip paths to prevent text from extending outside nodes\n cell\n .append('clipPath')\n .attr('id', (_d, i) => `clip-${id}-${i}`)\n .append('rect')\n .attr('width', (d) => Math.max(0, d.x1 - d.x0 - 4))\n .attr('height', (d) => Math.max(0, d.y1 - d.y0 - 4));\n\n // Add node labels with clipping\n const leafLabels = cell\n .append('text')\n .attr('class', 'treemapLabel')\n .attr('x', (d) => (d.x1 - d.x0) / 2)\n .attr('y', (d) => (d.y1 - d.y0) / 2)\n // .style('fill', (d) => colorScaleLabel(d.data.name))\n .attr('style', (d) => {\n const labelStyles =\n 'text-anchor: middle; dominant-baseline: middle; font-size: 38px;fill:' +\n colorScaleLabel(d.data.name) +\n ';';\n const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles } as Node);\n return labelStyles + styles.labelStyles.replace('color:', 'fill:');\n })\n .attr('clip-path', (_d, i) => `url(#clip-${id}-${i})`)\n .text((d) => d.data.name);\n\n leafLabels.each(function (d) {\n const self = select(this);\n const nodeWidth = d.x1 - d.x0;\n const nodeHeight = d.y1 - d.y0;\n const textNode = self.node()!;\n\n const padding = 4;\n const availableWidth = nodeWidth - 2 * padding;\n const availableHeight = nodeHeight - 2 * padding;\n\n if (availableWidth < 10 || availableHeight < 10) {\n self.style('display', 'none');\n return;\n }\n\n let currentLabelFontSize = parseInt(self.style('font-size'), 10);\n const minLabelFontSize = 8;\n const originalValueRelFontSize = 28; // Original font size of value, for max cap\n const valueScaleFactor = 0.6; // Value font size as a factor of label font size\n const minValueFontSize = 6;\n const spacingBetweenLabelAndValue = 2;\n\n // 1. Adjust label font size to fit width\n while (\n textNode.getComputedTextLength() > availableWidth &&\n currentLabelFontSize > minLabelFontSize\n ) {\n currentLabelFontSize--;\n self.style('font-size', `${currentLabelFontSize}px`);\n }\n\n // 2. Adjust both label and prospective value font size to fit combined height\n let prospectiveValueFontSize = Math.max(\n minValueFontSize,\n Math.min(originalValueRelFontSize, Math.round(currentLabelFontSize * valueScaleFactor))\n );\n let combinedHeight =\n currentLabelFontSize + spacingBetweenLabelAndValue + prospectiveValueFontSize;\n\n while (combinedHeight > availableHeight && currentLabelFontSize > minLabelFontSize) {\n currentLabelFontSize--;\n prospectiveValueFontSize = Math.max(\n minValueFontSize,\n Math.min(originalValueRelFontSize, Math.round(currentLabelFontSize * valueScaleFactor))\n );\n if (\n prospectiveValueFontSize < minValueFontSize &&\n currentLabelFontSize === minLabelFontSize\n ) {\n break;\n } // Avoid shrinking label if value is already at min\n self.style('font-size', `${currentLabelFontSize}px`);\n combinedHeight =\n currentLabelFontSize + spacingBetweenLabelAndValue + prospectiveValueFontSize;\n if (prospectiveValueFontSize <= minValueFontSize && combinedHeight > availableHeight) {\n // If value is at min and still doesn't fit, label might need to shrink more alone\n // This might lead to label being too small for its own text, checked next\n }\n }\n\n // Update label font size based on height adjustment\n self.style('font-size', `${currentLabelFontSize}px`);\n\n // 3. Final visibility check for the label\n if (\n textNode.getComputedTextLength() > availableWidth ||\n currentLabelFontSize < minLabelFontSize ||\n availableHeight < currentLabelFontSize\n ) {\n self.style('display', 'none');\n // If label is hidden, value will be hidden by its own .each() loop\n }\n });\n\n // Add node values with clipping\n if (config.showValues !== false) {\n const leafValues = cell\n .append('text')\n .attr('class', 'treemapValue')\n .attr('x', (d) => (d.x1 - d.x0) / 2)\n .attr('y', function (d) {\n // Y position calculated dynamically in leafValues.each based on final label metrics\n return (d.y1 - d.y0) / 2; // Placeholder, will be overwritten\n })\n .attr('style', (d) => {\n const labelStyles =\n 'text-anchor: middle; dominant-baseline: hanging; font-size: 28px;fill:' +\n colorScaleLabel(d.data.name) +\n ';';\n const styles = styles2String({ cssCompiledStyles: d.data.cssCompiledStyles } as Node);\n return labelStyles + styles.labelStyles.replace('color:', 'fill:');\n })\n\n .attr('clip-path', (_d, i) => `url(#clip-${id}-${i})`)\n .text((d) => (d.value ? valueFormat(d.value) : ''));\n\n leafValues.each(function (d) {\n const valueTextElement = select(this);\n const parentCellNode = this.parentNode as SVGGElement | null;\n\n if (!parentCellNode) {\n valueTextElement.style('display', 'none');\n return;\n }\n\n const labelElement = select(parentCellNode).select('.treemapLabel');\n\n if (labelElement.empty() || labelElement.style('display') === 'none') {\n valueTextElement.style('display', 'none');\n return;\n }\n\n const finalLabelFontSize = parseFloat(labelElement.style('font-size'));\n const originalValueFontSize = 28; // From initial style setting\n const valueScaleFactor = 0.6;\n const minValueFontSize = 6;\n const spacingBetweenLabelAndValue = 2;\n\n const actualValueFontSize = Math.max(\n minValueFontSize,\n Math.min(originalValueFontSize, Math.round(finalLabelFontSize * valueScaleFactor))\n );\n valueTextElement.style('font-size', `${actualValueFontSize}px`);\n\n const labelCenterY = (d.y1 - d.y0) / 2;\n const valueTopActualY = labelCenterY + finalLabelFontSize / 2 + spacingBetweenLabelAndValue;\n valueTextElement.attr('y', valueTopActualY);\n\n const nodeWidth = d.x1 - d.x0;\n const nodeTotalHeight = d.y1 - d.y0;\n const cellBottomPadding = 4;\n const maxValueBottomY = nodeTotalHeight - cellBottomPadding;\n const availableWidthForValue = nodeWidth - 2 * 4; // padding for value text\n\n if (\n valueTextElement.node()!.getComputedTextLength() > availableWidthForValue ||\n valueTopActualY + actualValueFontSize > maxValueBottomY ||\n actualValueFontSize < minValueFontSize\n ) {\n valueTextElement.style('display', 'none');\n } else {\n valueTextElement.style('display', null);\n }\n });\n }\n const diagramPadding = config.diagramPadding ?? 8;\n setupViewPortForSVG(svg, diagramPadding, 'flowchart', config?.useMaxWidth || false);\n};\n\nconst getClasses = function (\n _text: string,\n diagramObj: Pick\n): Map {\n return (diagramObj.db as TreemapDB).getClasses();\n};\nexport const renderer: DiagramRenderer = { draw, getClasses };\n", "import type { DiagramStylesProvider } from '../../diagram-api/types.js';\nimport { cleanAndMerge } from '../../utils.js';\nimport type { TreemapStyleOptions } from './types.js';\n\nconst defaultTreemapStyleOptions: TreemapStyleOptions = {\n sectionStrokeColor: 'black',\n sectionStrokeWidth: '1',\n sectionFillColor: '#efefef',\n leafStrokeColor: 'black',\n leafStrokeWidth: '1',\n leafFillColor: '#efefef',\n labelColor: 'black',\n labelFontSize: '12px',\n valueFontSize: '10px',\n valueColor: 'black',\n titleColor: 'black',\n titleFontSize: '14px',\n};\n\nexport const getStyles: DiagramStylesProvider = ({\n treemap,\n}: { treemap?: TreemapStyleOptions } = {}) => {\n const options = cleanAndMerge(defaultTreemapStyleOptions, treemap);\n\n return `\n .treemapNode.section {\n stroke: ${options.sectionStrokeColor};\n stroke-width: ${options.sectionStrokeWidth};\n fill: ${options.sectionFillColor};\n }\n .treemapNode.leaf {\n stroke: ${options.leafStrokeColor};\n stroke-width: ${options.leafStrokeWidth};\n fill: ${options.leafFillColor};\n }\n .treemapLabel {\n fill: ${options.labelColor};\n font-size: ${options.labelFontSize};\n }\n .treemapValue {\n fill: ${options.valueColor};\n font-size: ${options.valueFontSize};\n }\n .treemapTitle {\n fill: ${options.titleColor};\n font-size: ${options.titleFontSize};\n }\n `;\n};\n\nexport default getStyles;\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\nimport { TreeMapDB } from './db.js';\nimport { parser } from './parser.js';\nimport { renderer } from './renderer.js';\nimport styles from './styles.js';\n\nexport const diagram: DiagramDefinition = {\n parser,\n get db() {\n return new TreeMapDB();\n },\n renderer,\n styles,\n};\n", "/**\n * Web page integration module for the mermaid framework. It uses the mermaidAPI for mermaid\n * functionality and to render the diagrams to svg code!\n */\nimport { registerIconPacks } from './rendering-util/icons.js';\nimport { dedent } from 'ts-dedent';\nimport type { MermaidConfig } from './config.type.js';\nimport { detectType, detectors, registerLazyLoadedDiagrams } from './diagram-api/detectType.js';\nimport { addDiagrams } from './diagram-api/diagram-orchestration.js';\nimport { loadRegisteredDiagrams } from './diagram-api/loadDiagram.js';\nimport type { ExternalDiagramDefinition, SVG, SVGGroup } from './diagram-api/types.js';\nimport type { ParseErrorFunction } from './Diagram.js';\nimport type { UnknownDiagramError } from './errors.js';\nimport type { InternalHelpers } from './internals.js';\nimport { log } from './logger.js';\nimport { mermaidAPI } from './mermaidAPI.js';\nimport type { LayoutLoaderDefinition, RenderOptions } from './rendering-util/render.js';\nimport { registerLayoutLoaders } from './rendering-util/render.js';\nimport type { LayoutData } from './rendering-util/types.js';\nimport type { ParseOptions, ParseResult, RenderResult } from './types.js';\nimport type { DetailedError } from './utils.js';\nimport utils, { isDetailedError } from './utils.js';\n\nexport type {\n DetailedError,\n ExternalDiagramDefinition,\n InternalHelpers,\n LayoutData,\n LayoutLoaderDefinition,\n MermaidConfig,\n ParseErrorFunction,\n ParseOptions,\n ParseResult,\n RenderOptions,\n RenderResult,\n SVG,\n SVGGroup,\n UnknownDiagramError,\n};\n\nexport interface RunOptions {\n /**\n * The query selector to use when finding elements to render. Default: `\".mermaid\"`.\n */\n querySelector?: string;\n /**\n * The nodes to render. If this is set, `querySelector` will be ignored.\n */\n nodes?: ArrayLike;\n /**\n * A callback to call after each diagram is rendered.\n */\n postRenderCallback?: (id: string) => unknown;\n /**\n * If `true`, errors will be logged to the console, but not thrown. Default: `false`\n */\n suppressErrors?: boolean;\n}\n\nconst handleError = (error: unknown, errors: DetailedError[], parseError?: ParseErrorFunction) => {\n log.warn(error);\n if (isDetailedError(error)) {\n // handle case where error string and hash were\n // wrapped in object like`const error = { str, hash };`\n if (parseError) {\n parseError(error.str, error.hash);\n }\n errors.push({ ...error, message: error.str, error });\n } else {\n // assume it is just error string and pass it on\n if (parseError) {\n parseError(error);\n }\n if (error instanceof Error) {\n errors.push({\n str: error.message,\n message: error.message,\n hash: error.name,\n error,\n });\n }\n }\n};\n\n/**\n * ## run\n *\n * Function that goes through the document to find the chart definitions in there and render them.\n *\n * The function tags the processed attributes with the attribute data-processed and ignores found\n * elements with the attribute already set. This way the init function can be triggered several\n * times.\n *\n * ```mermaid\n * graph LR;\n * a(Find elements)-->b{Processed}\n * b-->|Yes|c(Leave element)\n * b-->|No |d(Transform)\n * ```\n *\n * Renders the mermaid diagrams\n *\n * @param options - Optional runtime configs\n */\nconst run = async function (\n options: RunOptions = {\n querySelector: '.mermaid',\n }\n) {\n try {\n await runThrowsErrors(options);\n } catch (e) {\n if (isDetailedError(e)) {\n log.error(e.str);\n }\n if (mermaid.parseError) {\n mermaid.parseError(e as string);\n }\n if (!options.suppressErrors) {\n log.error('Use the suppressErrors option to suppress these errors');\n throw e;\n }\n }\n};\n\nconst runThrowsErrors = async function (\n { postRenderCallback, querySelector, nodes }: Omit = {\n querySelector: '.mermaid',\n }\n) {\n const conf = mermaidAPI.getConfig();\n\n log.debug(`${!postRenderCallback ? 'No ' : ''}Callback function found`);\n\n let nodesToProcess: ArrayLike;\n if (nodes) {\n nodesToProcess = nodes;\n } else if (querySelector) {\n nodesToProcess = document.querySelectorAll(querySelector);\n } else {\n throw new Error('Nodes and querySelector are both undefined');\n }\n\n log.debug(`Found ${nodesToProcess.length} diagrams`);\n if (conf?.startOnLoad !== undefined) {\n log.debug('Start On Load: ' + conf?.startOnLoad);\n mermaidAPI.updateSiteConfig({ startOnLoad: conf?.startOnLoad });\n }\n\n // generate the id of the diagram\n const idGenerator = new utils.InitIDGenerator(conf.deterministicIds, conf.deterministicIDSeed);\n\n let txt: string;\n const errors: DetailedError[] = [];\n\n // element is the current div with mermaid class\n // eslint-disable-next-line unicorn/prefer-spread\n for (const element of Array.from(nodesToProcess)) {\n log.info('Rendering diagram: ' + element.id);\n /*! Check if previously processed */\n if (element.getAttribute('data-processed')) {\n continue;\n }\n element.setAttribute('data-processed', 'true');\n\n const id = `mermaid-${idGenerator.next()}`;\n\n // Fetch the graph definition including tags\n txt = element.innerHTML;\n\n // transforms the html to pure text\n txt = dedent(utils.entityDecode(txt)) // removes indentation, required for YAML parsing\n .trim()\n .replace(//gi, '
    ');\n\n const init = utils.detectInit(txt);\n if (init) {\n log.debug('Detected early reinit: ', init);\n }\n try {\n const { svg, bindFunctions } = await render(id, txt, element);\n element.innerHTML = svg;\n if (postRenderCallback) {\n await postRenderCallback(id);\n }\n if (bindFunctions) {\n bindFunctions(element);\n }\n } catch (error) {\n handleError(error, errors, mermaid.parseError);\n }\n }\n if (errors.length > 0) {\n // TODO: We should be throwing an error object.\n throw errors[0];\n }\n};\n\n/**\n * Used to set configurations for mermaid.\n * This function should be called before the run function.\n * @param config - Configuration object for mermaid.\n */\n\nconst initialize = function (config: MermaidConfig) {\n mermaidAPI.initialize(config);\n};\n\n/**\n * ## init\n *\n * @deprecated Use {@link initialize} and {@link run} instead.\n *\n * Renders the mermaid diagrams\n *\n * @param config - **Deprecated**, please set configuration in {@link initialize}.\n * @param nodes - **Default**: `.mermaid`. One of the following:\n * - A DOM Node\n * - An array of DOM nodes (as would come from a jQuery selector)\n * - A W3C selector, a la `.mermaid`\n * @param callback - Called once for each rendered diagram's id.\n */\nconst init = async function (\n config?: MermaidConfig,\n nodes?: string | HTMLElement | NodeListOf,\n callback?: (id: string) => unknown\n) {\n log.warn('mermaid.init is deprecated. Please use run instead.');\n if (config) {\n initialize(config);\n }\n const runOptions: RunOptions = { postRenderCallback: callback, querySelector: '.mermaid' };\n if (typeof nodes === 'string') {\n runOptions.querySelector = nodes;\n } else if (nodes) {\n if (nodes instanceof HTMLElement) {\n runOptions.nodes = [nodes];\n } else {\n runOptions.nodes = nodes;\n }\n }\n await run(runOptions);\n};\n\n/**\n * Used to register external diagram types.\n * @param diagrams - Array of {@link ExternalDiagramDefinition}.\n * @param opts - If opts.lazyLoad is false, the diagrams will be loaded immediately.\n */\nconst registerExternalDiagrams = async (\n diagrams: ExternalDiagramDefinition[],\n {\n lazyLoad = true,\n }: {\n lazyLoad?: boolean;\n } = {}\n) => {\n addDiagrams();\n registerLazyLoadedDiagrams(...diagrams);\n if (lazyLoad === false) {\n await loadRegisteredDiagrams();\n }\n};\n\n/**\n * ##contentLoaded Callback function that is called when page is loaded. This functions fetches\n * configuration for mermaid rendering and calls init for rendering the mermaid diagrams on the\n * page.\n */\nconst contentLoaded = function () {\n if (mermaid.startOnLoad) {\n const { startOnLoad } = mermaidAPI.getConfig();\n if (startOnLoad) {\n mermaid.run().catch((err) => log.error('Mermaid failed to initialize', err));\n }\n }\n};\n\nif (typeof document !== 'undefined') {\n /*!\n * Wait for document loaded before starting the execution\n */\n window.addEventListener('load', contentLoaded, false);\n}\n\n/**\n * ## setParseErrorHandler Alternative to directly setting parseError using:\n *\n * ```js\n * mermaid.parseError = function(err,hash) {\n * forExampleDisplayErrorInGui(err); // do something with the error\n * };\n * ```\n *\n * This is provided for environments where the mermaid object can't directly have a new member added\n * to it (eg. dart interop wrapper). (Initially there is no parseError member of mermaid).\n *\n * @param parseErrorHandler - New parseError() callback.\n */\nconst setParseErrorHandler = function (parseErrorHandler: (err: any, hash: any) => void) {\n mermaid.parseError = parseErrorHandler;\n};\n\nconst executionQueue: (() => Promise)[] = [];\nlet executionQueueRunning = false;\nconst executeQueue = async () => {\n if (executionQueueRunning) {\n return;\n }\n executionQueueRunning = true;\n while (executionQueue.length > 0) {\n const f = executionQueue.shift();\n if (f) {\n try {\n await f();\n } catch (e) {\n log.error('Error executing queue', e);\n }\n }\n }\n executionQueueRunning = false;\n};\n\n/**\n * Parse the text and validate the syntax.\n * @param text - The mermaid diagram definition.\n * @param parseOptions - Options for parsing. @see {@link ParseOptions}\n * @returns If valid, {@link ParseResult} otherwise `false` if parseOptions.suppressErrors is `true`.\n * @throws Error if the diagram is invalid and parseOptions.suppressErrors is false or not set.\n *\n * @example\n * ```js\n * console.log(await mermaid.parse('flowchart \\n a --> b'));\n * // { diagramType: 'flowchart-v2' }\n * console.log(await mermaid.parse('wrong \\n a --> b', { suppressErrors: true }));\n * // false\n * console.log(await mermaid.parse('wrong \\n a --> b', { suppressErrors: false }));\n * // throws Error\n * console.log(await mermaid.parse('wrong \\n a --> b'));\n * // throws Error\n * ```\n */\nconst parse: typeof mermaidAPI.parse = async (text, parseOptions) => {\n return new Promise((resolve, reject) => {\n // This promise will resolve when the render call is done.\n // It will be queued first and will be executed when it is first in line\n const performCall = () =>\n new Promise((res, rej) => {\n mermaidAPI.parse(text, parseOptions).then(\n (r) => {\n // This resolves for the promise for the queue handling\n res(r);\n // This fulfills the promise sent to the value back to the original caller\n resolve(r);\n },\n (e) => {\n log.error('Error parsing', e);\n mermaid.parseError?.(e);\n rej(e);\n reject(e);\n }\n );\n });\n executionQueue.push(performCall);\n executeQueue().catch(reject);\n });\n};\n\n/**\n * Function that renders an SVG with a graph from a chart definition. Usage example below.\n *\n * ```javascript\n * element = document.querySelector('#graphDiv');\n * const graphDefinition = 'graph TB\\na-->b';\n * const { svg, bindFunctions } = await mermaid.render('graphDiv', graphDefinition);\n * element.innerHTML = svg;\n * bindFunctions?.(element);\n * ```\n *\n * @remarks\n * Multiple calls to this function will be enqueued to run serially.\n *\n * @param id - The id for the SVG element (the element to be rendered)\n * @param text - The text for the graph definition\n * @param container - HTML element where the svg will be inserted. (Is usually element with the .mermaid class)\n * If no svgContainingElement is provided then the SVG element will be appended to the body.\n * Selector to element in which a div with the graph temporarily will be\n * inserted. If one is provided a hidden div will be inserted in the body of the page instead. The\n * element will be removed when rendering is completed.\n * @returns Returns the SVG Definition and BindFunctions.\n */\nconst render: typeof mermaidAPI.render = (id, text, container) => {\n return new Promise((resolve, reject) => {\n // This promise will resolve when the mermaidAPI.render call is done.\n // It will be queued first and will be executed when it is first in line\n const performCall = () =>\n new Promise((res, rej) => {\n mermaidAPI.render(id, text, container).then(\n (r) => {\n // This resolves for the promise for the queue handling\n res(r);\n // This fulfills the promise sent to the value back to the original caller\n resolve(r);\n },\n (e) => {\n log.error('Error parsing', e);\n mermaid.parseError?.(e);\n rej(e);\n reject(e);\n }\n );\n });\n executionQueue.push(performCall);\n executeQueue().catch(reject);\n });\n};\n\n/**\n * Gets the metadata for all registered diagrams.\n * Currently only the id is returned.\n * @returns An array of objects with the id of the diagram.\n */\nconst getRegisteredDiagramsMetadata = (): Pick[] => {\n return Object.keys(detectors).map((id) => ({\n id,\n }));\n};\n\nexport interface Mermaid {\n startOnLoad: boolean;\n parseError?: ParseErrorFunction;\n /**\n * @deprecated Use {@link parse} and {@link render} instead. Please [open a discussion](https://github.com/mermaid-js/mermaid/discussions) if your use case does not fit the new API.\n * @internal\n */\n mermaidAPI: typeof mermaidAPI;\n parse: typeof parse;\n render: typeof render;\n /**\n * @deprecated Use {@link initialize} and {@link run} instead.\n */\n init: typeof init;\n run: typeof run;\n registerLayoutLoaders: typeof registerLayoutLoaders;\n registerExternalDiagrams: typeof registerExternalDiagrams;\n initialize: typeof initialize;\n contentLoaded: typeof contentLoaded;\n setParseErrorHandler: typeof setParseErrorHandler;\n detectType: typeof detectType;\n registerIconPacks: typeof registerIconPacks;\n getRegisteredDiagramsMetadata: typeof getRegisteredDiagramsMetadata;\n}\n\nconst mermaid: Mermaid = {\n startOnLoad: true,\n mermaidAPI,\n parse,\n render,\n init,\n run,\n registerExternalDiagrams,\n registerLayoutLoaders,\n initialize,\n parseError: undefined,\n contentLoaded,\n setParseErrorHandler,\n detectType,\n registerIconPacks,\n getRegisteredDiagramsMetadata,\n};\n\nexport default mermaid;\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'c4';\n\nconst detector: DiagramDetector = (txt) => {\n return /^\\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./c4Diagram.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'flowchart';\n\nconst detector: DiagramDetector = (txt, config) => {\n // If we have conferred to only use new flow charts this function should always return false\n // as in not signalling true for a legacy flowchart\n if (\n config?.flowchart?.defaultRenderer === 'dagre-wrapper' ||\n config?.flowchart?.defaultRenderer === 'elk'\n ) {\n return false;\n }\n return /^\\s*graph/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./flowDiagram.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'flowchart-v2';\n\nconst detector: DiagramDetector = (txt, config) => {\n if (config?.flowchart?.defaultRenderer === 'dagre-d3') {\n return false;\n }\n\n if (config?.flowchart?.defaultRenderer === 'elk') {\n config.layout = 'elk';\n }\n\n // If we have configured to use dagre-wrapper then we should return true in this function for graph code thus making it use the new flowchart diagram\n if (/^\\s*graph/.test(txt) && config?.flowchart?.defaultRenderer === 'dagre-wrapper') {\n return true;\n }\n return /^\\s*flowchart/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./flowDiagram.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'er';\n\nconst detector: DiagramDetector = (txt) => {\n return /^\\s*erDiagram/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./erDiagram.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type { DiagramDetector, DiagramLoader } from '../../diagram-api/types.js';\nimport type { ExternalDiagramDefinition } from '../../diagram-api/types.js';\n\nconst id = 'gitGraph';\n\nconst detector: DiagramDetector = (txt) => {\n return /^\\s*gitGraph/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./gitGraphDiagram.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'gantt';\n\nconst detector: DiagramDetector = (txt) => {\n return /^\\s*gantt/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./ganttDiagram.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'info';\n\nconst detector: DiagramDetector = (txt) => {\n return /^\\s*info/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./infoDiagram.js');\n return { id, diagram };\n};\n\nexport const info: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'pie';\n\nconst detector: DiagramDetector = (txt) => {\n return /^\\s*pie/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./pieDiagram.js');\n return { id, diagram };\n};\n\nexport const pie: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'quadrantChart';\n\nconst detector: DiagramDetector = (txt) => {\n return /^\\s*quadrantChart/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./quadrantDiagram.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'xychart';\n\nconst detector: DiagramDetector = (txt) => {\n return /^\\s*xychart(-beta)?/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./xychartDiagram.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'requirement';\n\nconst detector: DiagramDetector = (txt) => {\n return /^\\s*requirement(Diagram)?/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./requirementDiagram.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'sequence';\n\nconst detector: DiagramDetector = (txt) => {\n return /^\\s*sequenceDiagram/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./sequenceDiagram.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'class';\n\nconst detector: DiagramDetector = (txt, config) => {\n // If we have configured to use dagre-wrapper then we should never return true in this function\n if (config?.class?.defaultRenderer === 'dagre-wrapper') {\n return false;\n }\n // We have not opted to use the new renderer so we should return true if we detect a class diagram\n return /^\\s*classDiagram/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./classDiagram.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'classDiagram';\n\nconst detector: DiagramDetector = (txt, config) => {\n // If we have configured to use dagre-wrapper then we should return true in this function for classDiagram code thus making it use the new class diagram\n if (/^\\s*classDiagram/.test(txt) && config?.class?.defaultRenderer === 'dagre-wrapper') {\n return true;\n }\n // We have not opted to use the new renderer so we should return true if we detect a class diagram\n return /^\\s*classDiagram-v2/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./classDiagram-v2.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'state';\n\nconst detector: DiagramDetector = (txt, config) => {\n // If we have confirmed to only use new state diagrams this function should always return false\n // as in not signalling true for a legacy state diagram\n if (config?.state?.defaultRenderer === 'dagre-wrapper') {\n return false;\n }\n return /^\\s*stateDiagram/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./stateDiagram.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'stateDiagram';\n\nconst detector: DiagramDetector = (txt, config) => {\n if (/^\\s*stateDiagram-v2/.test(txt)) {\n return true;\n }\n if (/^\\s*stateDiagram/.test(txt) && config?.state?.defaultRenderer === 'dagre-wrapper') {\n return true;\n }\n return false;\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./stateDiagram-v2.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'journey';\n\nconst detector: DiagramDetector = (txt) => {\n return /^\\s*journey/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./journeyDiagram.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type { SVG, SVGGroup } from '../../diagram-api/types.js';\nimport { log } from '../../logger.js';\nimport { selectSvgElement } from '../../rendering-util/selectSvgElement.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\n\n/**\n * Draws an info picture in the tag with id: id based on the graph definition in text.\n *\n * @param _text - Mermaid graph definition.\n * @param id - The text for the error\n * @param version - The version\n */\nexport const draw = (_text: string, id: string, version: string) => {\n log.debug('rendering svg for syntax error\\n');\n const svg: SVG = selectSvgElement(id);\n const g: SVGGroup = svg.append('g');\n\n svg.attr('viewBox', '0 0 2412 512');\n configureSvgSize(svg, 100, 512, true);\n\n g.append('path')\n .attr('class', 'error-icon')\n .attr(\n 'd',\n 'm411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z'\n );\n\n g.append('path')\n .attr('class', 'error-icon')\n .attr(\n 'd',\n 'm459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z'\n );\n\n g.append('path')\n .attr('class', 'error-icon')\n .attr(\n 'd',\n 'm340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z'\n );\n\n g.append('path')\n .attr('class', 'error-icon')\n .attr(\n 'd',\n 'm400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z'\n );\n\n g.append('path')\n .attr('class', 'error-icon')\n .attr(\n 'd',\n 'm496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z'\n );\n\n g.append('path')\n .attr('class', 'error-icon')\n .attr(\n 'd',\n 'm436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z'\n );\n\n g.append('text') // text label for the x axis\n .attr('class', 'error-text')\n .attr('x', 1440)\n .attr('y', 250)\n .attr('font-size', '150px')\n .style('text-anchor', 'middle')\n .text('Syntax error in text');\n g.append('text') // text label for the x axis\n .attr('class', 'error-text')\n .attr('x', 1250)\n .attr('y', 400)\n .attr('font-size', '100px')\n .style('text-anchor', 'middle')\n .text(`mermaid version ${version}`);\n};\n\nexport const renderer = { draw };\n\nexport default renderer;\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\nimport { renderer } from './errorRenderer.js';\n\nconst diagram: DiagramDefinition = {\n db: {},\n renderer,\n parser: {\n parse: (): void => {\n return;\n },\n },\n};\n\nexport default diagram;\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../../diagram-api/types.js';\n\nconst id = 'flowchart-elk';\n\nconst detector: DiagramDetector = (txt, config = {}): boolean => {\n if (\n // If diagram explicitly states flowchart-elk\n /^\\s*flowchart-elk/.test(txt) ||\n // If a flowchart/graph diagram has their default renderer set to elk\n (/^\\s*(flowchart|graph)/.test(txt) && config?.flowchart?.defaultRenderer === 'elk')\n ) {\n config.layout = 'elk';\n return true;\n }\n return false;\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('../flowDiagram.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'timeline';\n\nconst detector: DiagramDetector = (txt) => {\n return /^\\s*timeline/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./timeline-definition.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\nconst id = 'mindmap';\n\nconst detector: DiagramDetector = (txt) => {\n return /^\\s*mindmap/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./mindmap-definition.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\nconst id = 'kanban';\n\nconst detector: DiagramDetector = (txt) => {\n return /^\\s*kanban/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./kanban-definition.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type { DiagramDetector, ExternalDiagramDefinition } from '../../diagram-api/types.js';\n\nconst id = 'sankey';\n\nconst detector: DiagramDetector = (txt) => {\n return /^\\s*sankey(-beta)?/.test(txt);\n};\n\nconst loader = async () => {\n const { diagram } = await import('./sankeyDiagram.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'packet';\n\nconst detector: DiagramDetector = (txt) => {\n return /^\\s*packet(-beta)?/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./diagram.js');\n return { id, diagram };\n};\n\nexport const packet: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'radar';\n\nconst detector: DiagramDetector = (txt) => {\n return /^\\s*radar-beta/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./diagram.js');\n return { id, diagram };\n};\n\nexport const radar: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n", "import type { DiagramDetector, ExternalDiagramDefinition } from '../../diagram-api/types.js';\n\nconst id = 'block';\n\nconst detector: DiagramDetector = (txt) => {\n return /^\\s*block(-beta)?/.test(txt);\n};\n\nconst loader = async () => {\n const { diagram } = await import('./blockDiagram.js');\n return { id, diagram };\n};\n\nconst plugin: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default plugin;\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'architecture';\n\nconst detector: DiagramDetector = (txt) => {\n return /^\\s*architecture/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./architectureDiagram.js');\n return { id, diagram };\n};\n\nconst architecture: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n\nexport default architecture;\n", "import c4 from '../diagrams/c4/c4Detector.js';\nimport flowchart from '../diagrams/flowchart/flowDetector.js';\nimport flowchartV2 from '../diagrams/flowchart/flowDetector-v2.js';\nimport er from '../diagrams/er/erDetector.js';\nimport git from '../diagrams/git/gitGraphDetector.js';\nimport gantt from '../diagrams/gantt/ganttDetector.js';\nimport { info } from '../diagrams/info/infoDetector.js';\nimport { pie } from '../diagrams/pie/pieDetector.js';\nimport quadrantChart from '../diagrams/quadrant-chart/quadrantDetector.js';\nimport xychart from '../diagrams/xychart/xychartDetector.js';\nimport requirement from '../diagrams/requirement/requirementDetector.js';\nimport sequence from '../diagrams/sequence/sequenceDetector.js';\nimport classDiagram from '../diagrams/class/classDetector.js';\nimport classDiagramV2 from '../diagrams/class/classDetector-V2.js';\nimport state from '../diagrams/state/stateDetector.js';\nimport stateV2 from '../diagrams/state/stateDetector-V2.js';\nimport journey from '../diagrams/user-journey/journeyDetector.js';\nimport errorDiagram from '../diagrams/error/errorDiagram.js';\nimport flowchartElk from '../diagrams/flowchart/elk/detector.js';\nimport timeline from '../diagrams/timeline/detector.js';\nimport mindmap from '../diagrams/mindmap/detector.js';\nimport kanban from '../diagrams/kanban/detector.js';\nimport sankey from '../diagrams/sankey/sankeyDetector.js';\nimport { packet } from '../diagrams/packet/detector.js';\nimport { radar } from '../diagrams/radar/detector.js';\nimport block from '../diagrams/block/blockDetector.js';\nimport architecture from '../diagrams/architecture/architectureDetector.js';\nimport { registerLazyLoadedDiagrams } from './detectType.js';\nimport { registerDiagram } from './diagramAPI.js';\nimport { treemap } from '../diagrams/treemap/detector.js';\nimport '../type.d.ts';\n\nlet hasLoadedDiagrams = false;\nexport const addDiagrams = () => {\n if (hasLoadedDiagrams) {\n return;\n }\n // This is added here to avoid race-conditions.\n // We could optimize the loading logic somehow.\n hasLoadedDiagrams = true;\n registerDiagram('error', errorDiagram, (text) => {\n return text.toLowerCase().trim() === 'error';\n });\n registerDiagram(\n '---',\n // --- diagram type may appear if YAML front-matter is not parsed correctly\n {\n db: {\n clear: () => {\n // Quite ok, clear needs to be there for --- to work as a regular diagram\n },\n },\n styles: {}, // should never be used\n renderer: {\n draw: () => {\n // should never be used\n },\n },\n parser: {\n parse: () => {\n throw new Error(\n 'Diagrams beginning with --- are not valid. ' +\n 'If you were trying to use a YAML front-matter, please ensure that ' +\n \"you've correctly opened and closed the YAML front-matter with un-indented `---` blocks\"\n );\n },\n },\n init: () => null, // no op\n },\n (text) => {\n return text.toLowerCase().trimStart().startsWith('---');\n }\n );\n\n if (includeLargeFeatures) {\n registerLazyLoadedDiagrams(flowchartElk, mindmap, architecture);\n }\n\n // Ordering of detectors is important. The first one to return true will be used.\n registerLazyLoadedDiagrams(\n c4,\n kanban,\n classDiagramV2,\n classDiagram,\n er,\n gantt,\n info,\n pie,\n requirement,\n sequence,\n flowchartV2,\n flowchart,\n timeline,\n git,\n stateV2,\n state,\n journey,\n quadrantChart,\n sankey,\n packet,\n xychart,\n block,\n radar,\n treemap\n );\n};\n", "import type {\n DiagramDetector,\n DiagramLoader,\n ExternalDiagramDefinition,\n} from '../../diagram-api/types.js';\n\nconst id = 'treemap';\n\nconst detector: DiagramDetector = (txt) => {\n return /^\\s*treemap/.test(txt);\n};\n\nconst loader: DiagramLoader = async () => {\n const { diagram } = await import('./diagram.js');\n return { id, diagram };\n};\n\nexport const treemap: ExternalDiagramDefinition = {\n id,\n detector,\n loader,\n};\n", "import { log } from '../logger.js';\nimport { detectors } from './detectType.js';\nimport { getDiagram, registerDiagram } from './diagramAPI.js';\n\nexport const loadRegisteredDiagrams = async () => {\n log.debug(`Loading registered diagrams`);\n // Load all lazy loaded diagrams in parallel\n const results = await Promise.allSettled(\n Object.entries(detectors).map(async ([key, { detector, loader }]) => {\n if (!loader) {\n return;\n }\n try {\n getDiagram(key);\n } catch {\n try {\n // Register diagram if it is not already registered\n const { diagram, id } = await loader();\n registerDiagram(id, diagram, detector);\n } catch (err) {\n // Remove failed diagram from detectors\n log.error(`Failed to load external diagram with key ${key}. Removing from detectors.`);\n delete detectors[key];\n throw err;\n }\n }\n })\n );\n const failed = results.filter((result) => result.status === 'rejected');\n if (failed.length > 0) {\n log.error(`Failed to load ${failed.length} external diagrams`);\n for (const res of failed) {\n log.error(res);\n }\n throw new Error(`Failed to load ${failed.length} external diagrams`);\n }\n};\n", "/**\n * This file contains functions that are used internally by mermaid\n * and is not intended to be used by the end user.\n */\n// @ts-ignore TODO: Investigate D3 issue\nimport { select } from 'd3';\nimport { compile, serialize, stringify } from 'stylis';\nimport DOMPurify from 'dompurify';\nimport isEmpty from 'lodash-es/isEmpty.js';\nimport packageJson from '../package.json' assert { type: 'json' };\nimport { addSVGa11yTitleDescription, setA11yDiagramInfo } from './accessibility.js';\nimport assignWithDepth from './assignWithDepth.js';\nimport * as configApi from './config.js';\nimport type { MermaidConfig } from './config.type.js';\nimport { addDiagrams } from './diagram-api/diagram-orchestration.js';\nimport type { DiagramMetadata, DiagramStyleClassDef } from './diagram-api/types.js';\nimport { Diagram } from './Diagram.js';\nimport { evaluate } from './diagrams/common/common.js';\nimport errorRenderer from './diagrams/error/errorRenderer.js';\nimport { attachFunctions } from './interactionDb.js';\nimport { log, setLogLevel } from './logger.js';\nimport { preprocessDiagram } from './preprocess.js';\nimport getStyles from './styles.js';\nimport theme from './themes/index.js';\nimport type { D3Element, ParseOptions, ParseResult, RenderResult } from './types.js';\nimport { decodeEntities } from './utils.js';\nimport { toBase64 } from './utils/base64.js';\n\nconst MAX_TEXTLENGTH = 50_000;\nconst MAX_TEXTLENGTH_EXCEEDED_MSG =\n 'graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa';\n\nconst SECURITY_LVL_SANDBOX = 'sandbox';\nconst SECURITY_LVL_LOOSE = 'loose';\n\nconst XMLNS_SVG_STD = 'http://www.w3.org/2000/svg';\nconst XMLNS_XLINK_STD = 'http://www.w3.org/1999/xlink';\nconst XMLNS_XHTML_STD = 'http://www.w3.org/1999/xhtml';\n\n// ------------------------------\n// iFrame\nconst IFRAME_WIDTH = '100%';\nconst IFRAME_HEIGHT = '100%';\nconst IFRAME_STYLES = 'border:0;margin:0;';\nconst IFRAME_BODY_STYLE = 'margin:0';\nconst IFRAME_SANDBOX_OPTS = 'allow-top-navigation-by-user-activation allow-popups';\nconst IFRAME_NOT_SUPPORTED_MSG = 'The \"iframe\" tag is not supported by your browser.';\n\n// DOMPurify settings for svgCode\nconst DOMPURIFY_TAGS = ['foreignobject'];\nconst DOMPURIFY_ATTR = ['dominant-baseline'];\n\nfunction processAndSetConfigs(text: string) {\n const processed = preprocessDiagram(text);\n configApi.reset();\n configApi.addDirective(processed.config ?? {});\n return processed;\n}\n\n/**\n * Parse the text and validate the syntax.\n * @param text - The mermaid diagram definition.\n * @param parseOptions - Options for parsing. @see {@link ParseOptions}\n * @returns An object with the `diagramType` set to type of the diagram if valid. Otherwise `false` if parseOptions.suppressErrors is `true`.\n * @throws Error if the diagram is invalid and parseOptions.suppressErrors is false or not set.\n */\nasync function parse(\n text: string,\n parseOptions: ParseOptions & { suppressErrors: true }\n): Promise;\nasync function parse(text: string, parseOptions?: ParseOptions): Promise;\nasync function parse(text: string, parseOptions?: ParseOptions): Promise {\n addDiagrams();\n try {\n const { code, config } = processAndSetConfigs(text);\n const diagram = await getDiagramFromText(code);\n return { diagramType: diagram.type, config };\n } catch (error) {\n if (parseOptions?.suppressErrors) {\n return false;\n }\n throw error;\n }\n}\n\n/**\n * Create a CSS style that starts with the given class name, then the element,\n * with an enclosing block that has each of the cssClasses followed by !important;\n * @param cssClass - CSS class name\n * @param element - CSS element\n * @param cssClasses - list of CSS styles to append after the element\n * @returns - the constructed string\n */\nexport const cssImportantStyles = (\n cssClass: string,\n element: string,\n cssClasses: string[] = []\n): string => {\n return `\\n.${cssClass} ${element} { ${cssClasses.join(' !important; ')} !important; }`;\n};\n\n/**\n * Create the user styles\n * @internal\n * @param config - configuration that has style and theme settings to use\n * @param classDefs - the classDefs in the diagram text. Might be null if none were defined. Usually is the result of a call to getClasses(...)\n * @returns the string with all the user styles\n */\nexport const createCssStyles = (\n config: MermaidConfig,\n classDefs: Map | null | undefined = new Map()\n): string => {\n let cssStyles = '';\n\n // user provided theme CSS info\n // If you add more configuration driven data into the user styles make sure that the value is\n // sanitized by the sanitize CSS function TODO where is this method? what should be used to replace it? refactor so that it's always sanitized\n if (config.themeCSS !== undefined) {\n cssStyles += `\\n${config.themeCSS}`;\n }\n\n if (config.fontFamily !== undefined) {\n cssStyles += `\\n:root { --mermaid-font-family: ${config.fontFamily}}`;\n }\n if (config.altFontFamily !== undefined) {\n cssStyles += `\\n:root { --mermaid-alt-font-family: ${config.altFontFamily}}`;\n }\n\n // classDefs defined in the diagram text\n if (classDefs instanceof Map) {\n const htmlLabels = config.htmlLabels ?? config.flowchart?.htmlLabels; // TODO why specifically check the Flowchart diagram config?\n\n const cssHtmlElements = ['> *', 'span']; // TODO make a constant\n const cssShapeElements = ['rect', 'polygon', 'ellipse', 'circle', 'path']; // TODO make a constant\n\n const cssElements = htmlLabels ? cssHtmlElements : cssShapeElements;\n\n // create the CSS styles needed for each styleClass definition and css element\n classDefs.forEach((styleClassDef) => {\n // create the css styles for each cssElement and the styles (only if there are styles)\n if (!isEmpty(styleClassDef.styles)) {\n cssElements.forEach((cssElement) => {\n cssStyles += cssImportantStyles(styleClassDef.id, cssElement, styleClassDef.styles);\n });\n }\n // create the css styles for the tspan element and the text styles (only if there are textStyles)\n if (!isEmpty(styleClassDef.textStyles)) {\n cssStyles += cssImportantStyles(\n styleClassDef.id,\n 'tspan',\n (styleClassDef?.textStyles || []).map((s) => s.replace('color', 'fill'))\n );\n }\n });\n }\n return cssStyles;\n};\n\nexport const createUserStyles = (\n config: MermaidConfig,\n graphType: string,\n classDefs: Map | undefined,\n svgId: string\n): string => {\n const userCSSstyles = createCssStyles(config, classDefs);\n const allStyles = getStyles(graphType, userCSSstyles, config.themeVariables);\n\n // Now turn all of the styles into a (compiled) string that starts with the id\n // use the stylis library to compile the css, turn the results into a valid CSS string (serialize(...., stringify))\n // @see https://github.com/thysultan/stylis\n return serialize(compile(`${svgId}{${allStyles}}`), stringify);\n};\n\n/**\n * Clean up svgCode. Do replacements needed\n *\n * @param svgCode - the code to clean up\n * @param inSandboxMode - security level\n * @param useArrowMarkerUrls - should arrow marker's use full urls? (vs. just the anchors)\n * @returns the cleaned up svgCode\n */\nexport const cleanUpSvgCode = (\n svgCode = '',\n inSandboxMode: boolean,\n useArrowMarkerUrls: boolean\n): string => {\n let cleanedUpSvg = svgCode;\n\n // Replace marker-end urls with just the # anchor (remove the preceding part of the URL)\n if (!useArrowMarkerUrls && !inSandboxMode) {\n cleanedUpSvg = cleanedUpSvg.replace(\n /marker-end=\"url\\([\\d+./:=?A-Za-z-]*?#/g,\n 'marker-end=\"url(#'\n );\n }\n\n cleanedUpSvg = decodeEntities(cleanedUpSvg);\n\n // replace old br tags with newer style\n cleanedUpSvg = cleanedUpSvg.replace(/
    /g, '
    ');\n\n return cleanedUpSvg;\n};\n\n/**\n * Put the svgCode into an iFrame. Return the iFrame code\n *\n * @param svgCode - the svg code to put inside the iFrame\n * @param svgElement - the d3 node that has the current svgElement so we can get the height from it\n * @returns - the code with the iFrame that now contains the svgCode\n */\nexport const putIntoIFrame = (svgCode = '', svgElement?: D3Element): string => {\n const height = svgElement?.viewBox?.baseVal?.height\n ? svgElement.viewBox.baseVal.height + 'px'\n : IFRAME_HEIGHT;\n const base64encodedSrc = toBase64(`${svgCode}`);\n return ``;\n};\n\n/**\n * Append an enclosing div, then svg, then g (group) to the d3 parentRoot. Set attributes.\n * Only set the style attribute on the enclosing div if divStyle is given.\n * Only set the xmlns:xlink attribute on svg if svgXlink is given.\n * Return the last node appended\n *\n * @param parentRoot - the d3 node to append things to\n * @param id - the value to set the id attr to\n * @param enclosingDivId - the id to set the enclosing div to\n * @param divStyle - if given, the style to set the enclosing div to\n * @param svgXlink - if given, the link to set the new svg element to\n * @returns - returns the parentRoot that had nodes appended\n */\nexport const appendDivSvgG = (\n parentRoot: D3Element,\n id: string,\n enclosingDivId: string,\n divStyle?: string,\n svgXlink?: string\n): D3Element => {\n const enclosingDiv = parentRoot.append('div');\n enclosingDiv.attr('id', enclosingDivId);\n if (divStyle) {\n enclosingDiv.attr('style', divStyle);\n }\n\n const svgNode = enclosingDiv\n .append('svg')\n .attr('id', id)\n .attr('width', '100%')\n .attr('xmlns', XMLNS_SVG_STD);\n if (svgXlink) {\n svgNode.attr('xmlns:xlink', svgXlink);\n }\n\n svgNode.append('g');\n return parentRoot;\n};\n\n/**\n * Append an iFrame node to the given parentNode and set the id, style, and 'sandbox' attributes\n * Return the appended iframe d3 node\n *\n * @param parentNode - the d3 node to append the iFrame node to\n * @param iFrameId - id to use for the iFrame\n * @returns the appended iframe d3 node\n */\nfunction sandboxedIframe(parentNode: D3Element, iFrameId: string): D3Element {\n return parentNode\n .append('iframe')\n .attr('id', iFrameId)\n .attr('style', 'width: 100%; height: 100%;')\n .attr('sandbox', '');\n}\n\n/**\n * Remove any existing elements from the given document\n *\n * @param doc - the document to removed elements from\n * @param id - id for any existing SVG element\n * @param divSelector - selector for any existing enclosing div element\n * @param iFrameSelector - selector for any existing iFrame element\n */\nexport const removeExistingElements = (\n doc: Document,\n id: string,\n divId: string,\n iFrameId: string\n) => {\n // Remove existing SVG element if it exists\n doc.getElementById(id)?.remove();\n // Remove previous temporary element if it exists\n // Both div and iframe needs to be cleared in case there is a config change happening between renders.\n doc.getElementById(divId)?.remove();\n doc.getElementById(iFrameId)?.remove();\n};\n\n/**\n * @deprecated - use the `mermaid.render` function instead of `mermaid.mermaidAPI.render`\n *\n * Deprecated for external use.\n */\n\nconst render = async function (\n id: string,\n text: string,\n svgContainingElement?: Element\n): Promise {\n addDiagrams();\n\n const processed = processAndSetConfigs(text);\n text = processed.code;\n\n const config = configApi.getConfig();\n log.debug(config);\n\n // Check the maximum allowed text size\n if (text.length > (config?.maxTextSize ?? MAX_TEXTLENGTH)) {\n text = MAX_TEXTLENGTH_EXCEEDED_MSG;\n }\n\n const idSelector = '#' + id;\n const iFrameID = 'i' + id;\n const iFrameID_selector = '#' + iFrameID;\n const enclosingDivID = 'd' + id;\n const enclosingDivID_selector = '#' + enclosingDivID;\n\n const removeTempElements = () => {\n // -------------------------------------------------------------------------------\n // Remove the temporary HTML element if appropriate\n const tmpElementSelector = isSandboxed ? iFrameID_selector : enclosingDivID_selector;\n const node = select(tmpElementSelector).node();\n if (node && 'remove' in node) {\n node.remove();\n }\n };\n\n let root: any = select('body');\n\n const isSandboxed = config.securityLevel === SECURITY_LVL_SANDBOX;\n const isLooseSecurityLevel = config.securityLevel === SECURITY_LVL_LOOSE;\n\n const fontFamily = config.fontFamily;\n\n // -------------------------------------------------------------------------------\n // Define the root d3 node\n // In regular execution the svgContainingElement will be the element with a mermaid class\n\n if (svgContainingElement !== undefined) {\n if (svgContainingElement) {\n svgContainingElement.innerHTML = '';\n }\n\n if (isSandboxed) {\n // If we are in sandboxed mode, we do everything mermaid related in a (sandboxed )iFrame\n const iframe = sandboxedIframe(select(svgContainingElement), iFrameID);\n root = select(iframe.nodes()[0]!.contentDocument!.body);\n root.node().style.margin = 0;\n } else {\n root = select(svgContainingElement);\n }\n appendDivSvgG(root, id, enclosingDivID, `font-family: ${fontFamily}`, XMLNS_XLINK_STD);\n } else {\n // No svgContainingElement was provided\n\n // If there is an existing element with the id, we remove it. This likely a previously rendered diagram\n removeExistingElements(document, id, enclosingDivID, iFrameID);\n\n // Add the temporary div used for rendering with the enclosingDivID.\n // This temporary div will contain a svg with the id == id\n\n if (isSandboxed) {\n // If we are in sandboxed mode, we do everything mermaid related in a (sandboxed) iFrame\n const iframe = sandboxedIframe(select('body'), iFrameID);\n root = select(iframe.nodes()[0]!.contentDocument!.body);\n root.node().style.margin = 0;\n } else {\n root = select('body');\n }\n\n appendDivSvgG(root, id, enclosingDivID);\n }\n\n // -------------------------------------------------------------------------------\n // Create the diagram\n\n // Important that we do not create the diagram until after the directives have been included\n let diag: Diagram;\n let parseEncounteredException;\n\n try {\n diag = await Diagram.fromText(text, { title: processed.title });\n } catch (error) {\n if (config.suppressErrorRendering) {\n removeTempElements();\n throw error;\n }\n diag = await Diagram.fromText('error');\n parseEncounteredException = error;\n }\n\n // Get the temporary div element containing the svg\n const element = root.select(enclosingDivID_selector).node();\n const diagramType = diag.type;\n\n // -------------------------------------------------------------------------------\n // Create and insert the styles (user styles, theme styles, config styles)\n\n // Insert an element into svg. This is where we put the styles\n const svg = element.firstChild;\n const firstChild = svg.firstChild;\n const diagramClassDefs = diag.renderer.getClasses?.(text, diag);\n\n const rules = createUserStyles(config, diagramType, diagramClassDefs, idSelector);\n\n const style1 = document.createElement('style');\n style1.innerHTML = rules;\n svg.insertBefore(style1, firstChild);\n\n // -------------------------------------------------------------------------------\n // Draw the diagram with the renderer\n try {\n await diag.renderer.draw(text, id, packageJson.version, diag);\n } catch (e) {\n if (config.suppressErrorRendering) {\n removeTempElements();\n } else {\n errorRenderer.draw(text, id, packageJson.version);\n }\n throw e;\n }\n\n // This is the d3 node for the svg element\n const svgNode = root.select(`${enclosingDivID_selector} svg`);\n const a11yTitle: string | undefined = diag.db.getAccTitle?.();\n const a11yDescr: string | undefined = diag.db.getAccDescription?.();\n addA11yInfo(diagramType, svgNode, a11yTitle, a11yDescr);\n // -------------------------------------------------------------------------------\n // Clean up SVG code\n root.select(`[id=\"${id}\"]`).selectAll('foreignobject > *').attr('xmlns', XMLNS_XHTML_STD);\n\n // Fix for when the base tag is used\n let svgCode: string = root.select(enclosingDivID_selector).node().innerHTML;\n\n log.debug('config.arrowMarkerAbsolute', config.arrowMarkerAbsolute);\n svgCode = cleanUpSvgCode(svgCode, isSandboxed, evaluate(config.arrowMarkerAbsolute));\n\n if (isSandboxed) {\n const svgEl = root.select(enclosingDivID_selector + ' svg').node();\n svgCode = putIntoIFrame(svgCode, svgEl);\n } else if (!isLooseSecurityLevel) {\n // Sanitize the svgCode using DOMPurify\n svgCode = DOMPurify.sanitize(svgCode, {\n ADD_TAGS: DOMPURIFY_TAGS,\n ADD_ATTR: DOMPURIFY_ATTR,\n HTML_INTEGRATION_POINTS: { foreignobject: true },\n });\n }\n\n attachFunctions();\n\n if (parseEncounteredException) {\n throw parseEncounteredException;\n }\n\n removeTempElements();\n\n return {\n diagramType,\n svg: svgCode,\n bindFunctions: diag.db.bindFunctions,\n };\n};\n\n/**\n * @param userOptions - Initial Mermaid options\n */\nfunction initialize(userOptions: MermaidConfig = {}) {\n const options: MermaidConfig = assignWithDepth({}, userOptions);\n // Handle legacy location of font-family configuration\n if (options?.fontFamily && !options.themeVariables?.fontFamily) {\n if (!options.themeVariables) {\n options.themeVariables = {};\n }\n options.themeVariables.fontFamily = options.fontFamily;\n }\n\n // Set default options\n configApi.saveConfigFromInitialize(options);\n\n if (options?.theme && options.theme in theme) {\n // Todo merge with user options\n options.themeVariables = theme[options.theme as keyof typeof theme].getThemeVariables(\n options.themeVariables\n );\n } else if (options) {\n options.themeVariables = theme.default.getThemeVariables(options.themeVariables);\n }\n\n const config =\n typeof options === 'object' ? configApi.setSiteConfig(options) : configApi.getSiteConfig();\n\n setLogLevel(config.logLevel);\n addDiagrams();\n}\n\nconst getDiagramFromText = (text: string, metadata: Pick = {}) => {\n const { code } = preprocessDiagram(text);\n return Diagram.fromText(code, metadata);\n};\n\n/**\n * Add accessibility (a11y) information to the diagram.\n *\n * @param diagramType - diagram type\n * @param svgNode - d3 node to insert the a11y title and desc info\n * @param a11yTitle - a11y title\n * @param a11yDescr - a11y description\n */\nfunction addA11yInfo(\n diagramType: string,\n svgNode: D3Element,\n a11yTitle?: string,\n a11yDescr?: string\n): void {\n setA11yDiagramInfo(svgNode, diagramType);\n addSVGa11yTitleDescription(svgNode, a11yTitle, a11yDescr, svgNode.attr('id'));\n}\n\n/**\n * @internal - Use mermaid.function instead of mermaid.mermaidAPI.function\n */\nexport const mermaidAPI = Object.freeze({\n render,\n parse,\n getDiagramFromText,\n initialize,\n getConfig: configApi.getConfig,\n setConfig: configApi.setConfig,\n getSiteConfig: configApi.getSiteConfig,\n updateSiteConfig: configApi.updateSiteConfig,\n reset: () => {\n configApi.reset();\n },\n globalReset: () => {\n configApi.reset(configApi.defaultConfig);\n },\n defaultConfig: configApi.defaultConfig,\n});\n\nsetLogLevel(configApi.getConfig().logLevel);\nconfigApi.reset(configApi.getConfig());\nexport default mermaidAPI;\n", "export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\nexport var SCOPE = '@scope'\n", "/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @param {number} position\n * @return {number}\n */\nexport function indexof (value, search, position) {\n\treturn value.indexOf(search, position)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n\n/**\n * @param {string[]} array\n * @param {RegExp} pattern\n * @return {string[]}\n */\nexport function filter (array, pattern) {\n\treturn array.filter(function (value) { return !match(value, pattern) })\n}\n", "import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {object[]} siblings\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length, siblings) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: '', siblings: siblings}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0, root.siblings), root, {length: -root.length}, props)\n}\n\n/**\n * @param {object} root\n */\nexport function lift (root) {\n\twhile (root.root)\n\t\troot = copy(root.root, {children: [root]})\n\n\tappend(root, root.siblings)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n", "import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, token, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f', abs(index ? points[index - 1] : 0)) != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent, declarations), declarations)\n\t\t\t\t\t\tif ((token(previous || 1) == 5 || token(peek() || 1) == 5) && strlen(characters) && substr(characters, -1, void 0) !== ' ') characters += ' '\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length || (variable === 0 && previous === 47)))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1, declarations) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2, declarations), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length, rulesets), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tswitch (atrule) {\n\t\t\t\t\t\t\t\t\t// c(ontainer)\n\t\t\t\t\t\t\t\t\tcase 99:\n\t\t\t\t\t\t\t\t\t\tif (charat(characters, 3) === 110) break\n\t\t\t\t\t\t\t\t\t// l(ayer)\n\t\t\t\t\t\t\t\t\tcase 108:\n\t\t\t\t\t\t\t\t\t\tif (charat(characters, 2) === 97) break\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\toffset = 0\n\t\t\t\t\t\t\t\t\t// d(ocument) m(edia) s(upports)\n\t\t\t\t\t\t\t\t\tcase 100: case 109: case 115:\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (offset) parse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length, children), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\telse parse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length, siblings) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length, siblings)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @param {object[]} siblings\n * @return {object}\n */\nexport function comment (value, root, parent, siblings) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0, siblings)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @param {object[]} siblings\n * @return {object}\n */\nexport function declaration (value, root, parent, length, siblings) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length, siblings)\n}\n", "import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES, NAMESPACE} from './Enum.js'\nimport {strlen} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\n\tfor (var i = 0; i < children.length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case NAMESPACE: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: if (!strlen(element.value = element.props.join(','))) return ''\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n", "/**\n * Accessibility (a11y) functions, types, helpers.\n *\n * @see https://www.w3.org/WAI/\n * @see https://www.w3.org/TR/wai-aria-1.1/\n * @see https://www.w3.org/TR/svg-aam-1.0/\n */\nimport type { D3Element } from './types.js';\n\n/**\n * SVG element role:\n * The SVG element role _should_ be set to 'graphics-document' per SVG standard\n * but in practice is not always done by browsers, etc. (As of 2022-12-08).\n * A fallback role of 'document' should be set for those browsers, etc., that only support ARIA 1.0.\n *\n * @see https://www.w3.org/TR/svg-aam-1.0/#roleMappingGeneralRules\n * @see https://www.w3.org/TR/graphics-aria-1.0/#graphics-document\n */\nconst SVG_ROLE = 'graphics-document document';\n\n/**\n * Add role and aria-roledescription to the svg element.\n *\n * @param svg - d3 object that contains the SVG HTML element\n * @param diagramType - diagram name for to the aria-roledescription\n */\nexport function setA11yDiagramInfo(svg: D3Element, diagramType: string) {\n svg.attr('role', SVG_ROLE);\n if (diagramType !== '') {\n svg.attr('aria-roledescription', diagramType);\n }\n}\n\n/**\n * Add an accessible title and/or description element to a chart.\n * The title is usually not displayed and the description is never displayed.\n *\n * The following charts display their title as a visual and accessibility element: gantt.\n *\n * @param svg - d3 node to insert the a11y title and desc info\n * @param a11yTitle - a11y title. undefined or empty strings mean to skip them\n * @param a11yDesc - a11y description. undefined or empty strings mean to skip them\n * @param baseId - id used to construct the a11y title and description id\n */\nexport function addSVGa11yTitleDescription(\n svg: D3Element,\n a11yTitle: string | undefined,\n a11yDesc: string | undefined,\n baseId: string\n): void {\n if (svg.insert === undefined) {\n return;\n }\n\n if (a11yDesc) {\n const descId = `chart-desc-${baseId}`;\n svg.attr('aria-describedby', descId);\n svg.insert('desc', ':first-child').attr('id', descId).text(a11yDesc);\n }\n if (a11yTitle) {\n const titleId = `chart-title-${baseId}`;\n svg.attr('aria-labelledby', titleId);\n svg.insert('title', ':first-child').attr('id', titleId).text(a11yTitle);\n }\n}\n", "import * as configApi from './config.js';\nimport { getDiagram, registerDiagram } from './diagram-api/diagramAPI.js';\nimport { detectType, getDiagramLoader } from './diagram-api/detectType.js';\nimport { UnknownDiagramError } from './errors.js';\nimport { encodeEntities } from './utils.js';\nimport type { DetailedError } from './utils.js';\nimport type { DiagramDefinition, DiagramMetadata } from './diagram-api/types.js';\n\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport type ParseErrorFunction = (err: string | DetailedError | unknown, hash?: any) => void;\n\n/**\n * An object representing a parsed mermaid diagram definition.\n * @privateRemarks This is exported as part of the public mermaidAPI.\n */\nexport class Diagram {\n public static async fromText(text: string, metadata: Pick = {}) {\n const config = configApi.getConfig();\n const type = detectType(text, config);\n text = encodeEntities(text) + '\\n';\n try {\n getDiagram(type);\n } catch {\n const loader = getDiagramLoader(type);\n if (!loader) {\n throw new UnknownDiagramError(`Diagram ${type} not found.`);\n }\n // Diagram not available, loading it.\n // new diagram will try getDiagram again and if fails then it is a valid throw\n const { id, diagram } = await loader();\n registerDiagram(id, diagram);\n }\n const { db, parser, renderer, init } = getDiagram(type);\n if (parser.parser) {\n // The parser.parser.yy is only present in JISON parsers. So, we'll only set if required.\n parser.parser.yy = db;\n }\n db.clear?.();\n init?.(config);\n // This block was added for legacy compatibility. Use frontmatter instead of adding more special cases.\n if (metadata.title) {\n db.setDiagramTitle?.(metadata.title);\n }\n await parser.parse(text);\n return new Diagram(type, text, db, parser, renderer);\n }\n\n private constructor(\n public type: string,\n public text: string,\n public db: DiagramDefinition['db'],\n public parser: DiagramDefinition['parser'],\n public renderer: DiagramDefinition['renderer']\n ) {}\n\n async render(id: string, version: string) {\n await this.renderer.draw(this.text, id, version, this);\n }\n\n getParser() {\n return this.parser;\n }\n\n getType() {\n return this.type;\n }\n}\n", "let interactionFunctions: (() => void)[] = [];\nexport const addFunction = (func: () => void) => {\n interactionFunctions.push(func);\n};\nexport const attachFunctions = () => {\n interactionFunctions.forEach((f) => {\n f();\n });\n interactionFunctions = [];\n};\n", "/**\n * Remove all lines starting with `%%` from the text that don't contain a `%%{`\n * @param text - The text to remove comments from\n * @returns cleaned text\n */\nexport const cleanupComments = (text: string): string => {\n return text.replace(/^\\s*%%(?!{)[^\\n]+\\n?/gm, '').trimStart();\n};\n", "import type { GanttDiagramConfig, MermaidConfig } from '../config.type.js';\nimport { frontMatterRegex } from './regexes.js';\n// The \"* as yaml\" part is necessary for tree-shaking\nimport * as yaml from 'js-yaml';\n\ninterface FrontMatterMetadata {\n title?: string;\n // Allows custom display modes. Currently used for compact mode in gantt charts.\n displayMode?: GanttDiagramConfig['displayMode'];\n config?: MermaidConfig;\n}\n\nexport interface FrontMatterResult {\n text: string;\n metadata: FrontMatterMetadata;\n}\n\n/**\n * Extract and parse frontmatter from text, if present, and sets appropriate\n * properties in the provided db.\n * @param text - The text that may have a YAML frontmatter.\n * @returns text with frontmatter stripped out\n */\nexport function extractFrontMatter(text: string): FrontMatterResult {\n const matches = text.match(frontMatterRegex);\n if (!matches) {\n return {\n text,\n metadata: {},\n };\n }\n\n let parsed: FrontMatterMetadata =\n yaml.load(matches[1], {\n // To support config, we need JSON schema.\n // https://www.yaml.org/spec/1.2/spec.html#id2803231\n schema: yaml.JSON_SCHEMA,\n }) ?? {};\n\n // To handle runtime data type changes\n parsed = typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : {};\n\n const metadata: FrontMatterMetadata = {};\n\n // Only add properties that are explicitly supported, if they exist\n if (parsed.displayMode) {\n metadata.displayMode = parsed.displayMode.toString() as GanttDiagramConfig['displayMode'];\n }\n if (parsed.title) {\n metadata.title = parsed.title.toString();\n }\n if (parsed.config) {\n metadata.config = parsed.config;\n }\n\n return {\n text: text.slice(matches[0].length),\n metadata,\n };\n}\n", "import { cleanupComments } from './diagram-api/comments.js';\nimport { extractFrontMatter } from './diagram-api/frontmatter.js';\nimport type { DiagramMetadata } from './diagram-api/types.js';\nimport utils, { cleanAndMerge, removeDirectives } from './utils.js';\n\nconst cleanupText = (code: string) => {\n return (\n code\n // parser problems on CRLF ignore all CR and leave LF;;\n .replace(/\\r\\n?/g, '\\n')\n // clean up html tags so that all attributes use single quotes, parser throws error on double quotes\n .replace(\n /<(\\w+)([^>]*)>/g,\n (match, tag, attributes) => '<' + tag + attributes.replace(/=\"([^\"]*)\"/g, \"='$1'\") + '>'\n )\n );\n};\n\nconst processFrontmatter = (code: string) => {\n const { text, metadata } = extractFrontMatter(code);\n const { displayMode, title, config = {} } = metadata;\n if (displayMode) {\n // Needs to be supported for legacy reasons\n if (!config.gantt) {\n config.gantt = {};\n }\n config.gantt.displayMode = displayMode;\n }\n\n return { title, config, text };\n};\n\nconst processDirectives = (code: string) => {\n const initDirective = utils.detectInit(code) ?? {};\n const wrapDirectives = utils.detectDirective(code, 'wrap');\n if (Array.isArray(wrapDirectives)) {\n initDirective.wrap = wrapDirectives.some(({ type }) => type === 'wrap');\n } else if (wrapDirectives?.type === 'wrap') {\n initDirective.wrap = true;\n }\n return {\n text: removeDirectives(code),\n directive: initDirective,\n };\n};\n\n/**\n * Preprocess the given code by cleaning it up, extracting front matter and directives,\n * cleaning and merging configuration, and removing comments.\n * @param code - The code to preprocess.\n * @returns The object containing the preprocessed code, title, and configuration.\n */\nexport function preprocessDiagram(code: string) {\n const cleanedCode = cleanupText(code);\n const frontMatterResult = processFrontmatter(cleanedCode);\n const directiveResult = processDirectives(frontMatterResult.text);\n const config = cleanAndMerge(frontMatterResult.config, directiveResult.directive);\n code = cleanupComments(directiveResult.text);\n return {\n code,\n title: frontMatterResult.title,\n config,\n } satisfies DiagramMetadata & { code: string };\n}\n", "export function toBase64(str: string) {\n // ref: https://developer.mozilla.org/en-US/docs/Glossary/Base64#the_unicode_problem\n const utf8Bytes = new TextEncoder().encode(str);\n const utf8Str = Array.from(utf8Bytes, (byte) => String.fromCodePoint(byte)).join('');\n return btoa(utf8Str);\n}\n"], + "mappings": "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AAY,GACZ,gBAAmB,GACnB,oBAAuB,EACvB,WAAc,WACd,QAAW,GACX,YAAe,GACf,QAAW,QACb,EACA,QAAW,CACT,YAAe,GACf,eAAkB,GAClB,eAAkB,GAClB,WAAc,IACd,cAAiB,IACjB,MAAS,IACT,OAAU,GACV,UAAa,GACb,cAAiB,EACjB,WAAc,GACd,cAAiB,GACjB,aAAgB,SAChB,gBAAmB,EACnB,YAAe,GACf,aAAgB,GAChB,eAAkB,0BAClB,WAAc,GACd,gBAAmB,GACnB,cAAiB,KACjB,aAAgB,CACd,UACA,UACA,UACA,UACA,UACA,SACF,EACA,aAAgB,CACd,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,eAAkB,CAChB,MACF,EACA,WAAc,GACd,gBAAmB,6CACnB,cAAiB,KACnB,EACA,MAAS,CACP,YAAe,GACf,eAAkB,GAClB,oBAAuB,GACvB,cAAiB,GACjB,QAAW,EACX,WAAc,GACd,gBAAmB,gBACnB,WAAc,GACd,oBAAuB,EACzB,EACA,MAAS,CACP,YAAe,GACf,eAAkB,GAClB,cAAiB,GACjB,SAAY,EACZ,QAAW,EACX,WAAc,GACd,WAAc,IACd,WAAc,GACd,UAAa,GACb,WAAc,EACd,YAAe,EACf,eAAkB,KAClB,SAAY,GACZ,YAAe,GACf,iBAAoB,KACpB,kBAAqB,GACrB,OAAU,EACV,gBAAmB,eACrB,EACA,GAAM,CACJ,YAAe,GACf,eAAkB,GAClB,eAAkB,GAClB,gBAAmB,KACnB,eAAkB,IAClB,gBAAmB,GACnB,cAAiB,GACjB,YAAe,IACf,YAAe,GACf,OAAU,OACV,KAAQ,WACR,SAAY,EACd,EACA,IAAO,CACL,YAAe,GACf,aAAgB,GAClB,EACA,cAAiB,CACf,YAAe,GACf,WAAc,IACd,YAAe,IACf,cAAiB,GACjB,aAAgB,GAChB,gBAAmB,EACnB,kBAAqB,EACrB,kBAAqB,EACrB,mBAAsB,GACtB,mBAAsB,GACtB,sBAAyB,GACzB,uBAA0B,EAC1B,iBAAoB,EACpB,mBAAsB,GACtB,YAAe,EACf,cAAiB,MACjB,cAAiB,OACjB,kCAAqC,EACrC,kCAAqC,CACvC,EACA,QAAW,CACT,YAAe,GACf,MAAS,IACT,OAAU,IACV,cAAiB,GACjB,aAAgB,GAChB,cAAiB,GACjB,UAAa,GACb,MAAS,CACP,KAAQ,4BACR,UAAa,GACb,cAAiB,GACjB,aAAgB,EAChB,UAAa,GACb,cAAiB,GACjB,aAAgB,EAChB,SAAY,GACZ,WAAc,EACd,UAAa,EACb,aAAgB,GAChB,cAAiB,CACnB,EACA,MAAS,CACP,KAAQ,4BACR,UAAa,GACb,cAAiB,GACjB,aAAgB,EAChB,UAAa,GACb,cAAiB,GACjB,aAAgB,EAChB,SAAY,GACZ,WAAc,EACd,UAAa,EACb,aAAgB,GAChB,cAAiB,CACnB,EACA,iBAAoB,WACpB,yBAA4B,EAC9B,EACA,YAAe,CACb,YAAe,GACf,UAAa,UACb,WAAc,OACd,iBAAoB,QACpB,kBAAqB,OACrB,eAAkB,IAClB,gBAAmB,IACnB,SAAY,GACZ,aAAgB,GAChB,YAAe,EACjB,EACA,QAAW,CACT,YAAe,GACf,QAAW,GACX,aAAgB,IAChB,gBAAmB,cACrB,EACA,OAAU,CACR,YAAe,GACf,QAAW,EACX,aAAgB,IAChB,cAAiB,EACnB,EACA,SAAY,CACV,YAAe,GACf,eAAkB,GAClB,eAAkB,GAClB,WAAc,IACd,MAAS,IACT,OAAU,GACV,UAAa,GACb,cAAiB,EACjB,WAAc,GACd,cAAiB,GACjB,aAAgB,SAChB,gBAAmB,EACnB,YAAe,GACf,aAAgB,GAChB,eAAkB,0BAClB,WAAc,GACd,gBAAmB,GACnB,cAAiB,KACjB,aAAgB,CACd,UACA,UACA,UACA,UACA,UACA,SACF,EACA,aAAgB,CACd,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,eAAkB,CAChB,MACF,EACA,kBAAqB,EACvB,EACA,SAAY,CACV,YAAe,GACf,eAAkB,GAClB,eAAkB,EAClB,UAAa,CACX,MAAS,GACT,OAAU,IACV,EAAK,IACL,EAAK,CACP,EACA,eAAkB,OAClB,gBAAmB,EACnB,gBAAmB,GACnB,aAAgB,GAChB,kBAAqB,GACrB,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2P,IAAI,EAE1CvS,GAAuB5B,GAAQsC,OAAOkC,UAAU4P,cAAc,EAE9DrF,GAAa/O,GAAQG,OAAOqE,UAAU6P,IAAI,EAE1CnJ,GAAkBtK,IAAY0T,SAAS,EAQpCtU,EAAAA,GAAAA,WAkBAY,EAAAA,IAAAA,eAYAI,EAAAA,GAAAA,YAuCAU,EAAAA,IAAAA,cAkBAG,EAAAA,GAAAA,SA+BAU,EAAAA,GAAAA,gBClLIiI,GAAOa,GAAO,CACzB,IACA,OACA,UACA,UACA,OACA,UACA,QACA,QACA,IACA,MACA,MACA,MACA,QACA,aACA,OACA,KACA,SACA,SACA,UACA,SACA,OACA,OACA,MACA,WACA,UACA,OACA,WACA,KACA,YACA,MACA,UACA,MACA,SACA,MACA,MACA,KACA,KACA,UACA,KACA,WACA,aACA,SACA,OACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,OACA,SACA,SACA,KACA,OACA,IACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,MACA,OACA,UACA,OACA,WACA,QACA,MACA,OACA,KACA,WACA,SACA,SACA,IACA,UACA,MACA,WACA,IACA,KACA,KACA,OACA,IACA,OACA,UACA,SACA,SACA,QACA,SACA,SACA,OACA,SACA,SACA,QACA,MACA,UACA,MACA,QACA,QACA,KACA,WACA,WACA,QACA,KACA,QACA,OACA,KACA,QACA,KACA,IACA,KACA,MACA,QACA,KAAK,CACG,EAEGZ,GAAMY,GAAO,CACxB,MACA,IACA,WACA,cACA,eACA,eACA,gBACA,mBACA,SACA,WACA,OACA,OACA,UACA,SACA,OACA,IACA,QACA,WACA,QACA,QACA,OACA,iBACA,SACA,OACA,WACA,QACA,OACA,UACA,UACA,WACA,iBACA,OACA,OACA,QACA,SACA,SACA,OACA,WACA,QACA,OACA,QACA,OACA,OAAO,CACC,EAEGX,GAAaW,GAAO,CAC/B,UACA,gBACA,sBACA,cACA,mBACA,oBACA,oBACA,iBACA,eACA,UACA,UACA,UACA,UACA,UACA,iBACA,UACA,UACA,cACA,eACA,WACA,eACA,qBACA,cACA,SACA,cAAc,CACN,EAMG2H,IAAgB3H,GAAO,CAClC,UACA,gBACA,SACA,UACA,YACA,mBACA,iBACA,gBACA,gBACA,gBACA,QACA,YACA,OACA,eACA,YACA,UACA,gBACA,SACA,MACA,aACA,UACA,KAAK,CACG,EAEGV,GAASU,GAAO,CAC3B,OACA,WACA,SACA,UACA,QACA,SACA,KACA,aACA,gBACA,KACA,KACA,QACA,UACA,WACA,QACA,OACA,KACA,SACA,QACA,SACA,OACA,OACA,UACA,SACA,MACA,QACA,MACA,SACA,aACA,aAAa,CACL,EAIG4H,IAAmB5H,GAAO,CACrC,UACA,cACA,aACA,WACA,YACA,UACA,UACA,SACA,SACA,QACA,YACA,aACA,iBACA,cACA,MAAM,CACE,EAEGmE,GAAOnE,GAAO,CAAC,OAAO,CAAU,ECpRhCb,GAAOa,GAAO,CACzB,SACA,SACA,QACA,MACA,iBACA,eACA,uBACA,WACA,aACA,UACA,SACA,UACA,cACA,cACA,UACA,OACA,QACA,QACA,QACA,OACA,UACA,WACA,eACA,SACA,cACA,WACA,WACA,UACA,MACA,WACA,0BACA,wBACA,WACA,YACA,UACA,eACA,OACA,MACA,UACA,SACA,SACA,OACA,OACA,WACA,KACA,YACA,YACA,QACA,OACA,QACA,OACA,OACA,UACA,OACA,MACA,MACA,YACA,QACA,SACA,MACA,YACA,WACA,QACA,OACA,QACA,UACA,aACA,SACA,OACA,UACA,UACA,cACA,cACA,UACA,gBACA,sBACA,SACA,UACA,UACA,aACA,WACA,MACA,WACA,MACA,WACA,OACA,OACA,UACA,aACA,QACA,WACA,QACA,OACA,QACA,OACA,UACA,QACA,MACA,SACA,OACA,QACA,UACA,WACA,QACA,YACA,OACA,SACA,SACA,QACA,QACA,OACA,QACA,MAAM,CACE,EAEGZ,GAAMY,GAAO,CACxB,gBACA,aACA,WACA,qBACA,YACA,SACA,gBACA,gBACA,UACA,gBACA,iBACA,QACA,OACA,KACA,QACA,OACA,gBACA,YACA,YACA,QACA,sBACA,8BACA,gBACA,kBACA,KACA,KACA,IACA,KACA,KACA,kBACA,YACA,UACA,UACA,MACA,WACA,YACA,MACA,WACA,OACA,eACA,YACA,SACA,cACA,cACA,gBACA,cACA,YACA,mBACA,eACA,aACA,eACA,cACA,KACA,KACA,KACA,KACA,aACA,WACA,gBACA,oBACA,SACA,OACA,KACA,kBACA,KACA,MACA,YACA,IACA,KACA,KACA,KACA,KACA,UACA,YACA,aACA,WACA,OACA,eACA,iBACA,eACA,mBACA,iBACA,QACA,aACA,aACA,eACA,eACA,cACA,cACA,mBACA,YACA,MACA,OACA,QACA,SACA,OACA,MACA,OACA,aACA,SACA,WACA,UACA,QACA,SACA,cACA,SACA,WACA,cACA,OACA,aACA,sBACA,mBACA,eACA,SACA,gBACA,sBACA,iBACA,IACA,KACA,KACA,SACA,OACA,OACA,cACA,YACA,UACA,SACA,SACA,QACA,OACA,kBACA,QACA,mBACA,mBACA,eACA,cACA,eACA,cACA,aACA,eACA,mBACA,oBACA,iBACA,kBACA,oBACA,iBACA,SACA,eACA,QACA,eACA,iBACA,WACA,cACA,UACA,UACA,YACA,mBACA,cACA,kBACA,iBACA,aACA,OACA,KACA,KACA,UACA,SACA,UACA,aACA,UACA,aACA,gBACA,gBACA,QACA,eACA,OACA,eACA,mBACA,mBACA,IACA,KACA,KACA,QACA,IACA,KACA,KACA,IACA,YAAY,CACJ,EAEGV,GAASU,GAAO,CAC3B,SACA,cACA,QACA,WACA,QACA,eACA,cACA,aACA,aACA,QACA,MACA,UACA,eACA,WACA,QACA,QACA,SACA,OACA,KACA,UACA,SACA,gBACA,SACA,SACA,iBACA,YACA,WACA,cACA,UACA,UACA,gBACA,WACA,WACA,OACA,WACA,WACA,aACA,UACA,SACA,SACA,cACA,gBACA,uBACA,YACA,YACA,aACA,WACA,iBACA,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AAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACpC,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACpC,GAAM,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACpC,GAAM,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACpC,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,OAAS,EAAG,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,GAAM,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC9B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACrC,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACrC,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACrC,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACrC,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACrC,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACrC,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACrC,IAAO,CAAC,OAAS,OAAS,EAAG,EAAG,IAAK,EACrC,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,EACzB,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,OAAS,EAAG,EAAG,EAAG,IAAK,EAC/B,IAAO,CAAC,EAAG,OAAS,EAAG,EAAG,IAAK,EAC/B,IAAO,CA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ACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,gBACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,gBACL,OAAK,UACL,OAAK,gBACL,OAAK,gBACL,OAAK,gBACL,OAAK,UACL,OAAK,gBACL,OAAK,gBACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,gBACL,OAAK,gBACL,OAAK,gBACL,OAAK,UACL,OAAK,gBACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,gBACL,OAAK,UACL,OAAK,gBACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,gBACL,OAAK,gBACL,OAAK,gBACL,OAAK,gBACL,OAAK,UACL,OAAK,gBACL,OAAK,UACL,OAAK,gBACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,gBACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,gBACL,OAAK,gBACL,OAAK,gBACL,OAAK,UACL,OAAK,UACL,OAAK,gBACL,OAAK,gBACL,OAAK,gBACL,OAAK,UACL,OAAK,gBACL,OAAK,UACL,OAAK,gBACL,OAAK,UACL,OAAK,UACL,OAAK,gBACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,gBACL,OAAK,gBACL,OAAK,UACL,OAAK,gBACL,OAAK,UACL,OAAK,UACL,OAAK,gBACL,OAAK,gBACL,OAAK,gBACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,gBACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,gBACL,OAAK,UACL,OAAK,gBACL,OAAK,gBACL,OAAK,gBACL,OAAK,UACL,OAAK,gBACL,OAAK,gBACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,gBACL,OAAK,gBACL,OAAK,gBACL,OAAK,UACL,OAAK,gBACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,gBACL,OAAK,UACL,OAAK,gBACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,UACL,OAAK,gBACL,OAAK,gBACL,OAAK,g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AAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG/D,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAI,GAAGC,EAAI,GAAGC,GAAI,GAAGC,CAAG,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG1C,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAI,GAAGC,EAAI,GAAGC,GAAI,GAAGC,CAAG,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG1C,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAI,GAAGC,EAAI,GAAGC,GAAI,GAAGC,CAAG,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG1C,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAI,GAAGC,EAAI,GAAGC,GAAI,GAAGC,CAAG,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG1C,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAA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CAAC,EAAE,EAAE,CAAC,EAAEzD,EAAEyD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEzD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAAEuD,GAAI,CAAC,EAAE,EAAE,CAAC,EAAEvD,EAA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CAC,MACAC,MACAC,MACAC,MACAC,MACAC,MACAC,MACAC,MACAC,MACAC,MACAC,MACAC,MACAC,MACAC,MACAC,MACAC,MACAC,MAwBanE,IAAa,CACxB,CACE,aAAc,UACd,KAAM,YACN,UAAW,OACX,YAAa,yBACb,QAAS,CAAC,OAAQ,UAAW,WAAW,EACxC,gBAAiB,CAAC,YAAY,EAC9B,QAASoE,GACX,EACA,CACE,aAAc,QACd,KAAM,oBACN,UAAW,UACX,YAAa,sBACb,QAAS,CAAC,OAAO,EACjB,gBAAiB,CAAC,aAAa,EAC/B,QAASC,GACX,EACA,CACE,aAAc,iBACd,KAAM,UACN,UAAW,UACX,YAAa,iBACb,QAAS,CAAC,WAAY,MAAM,EAC5B,QAASC,GACX,EACA,CACE,aAAc,aACd,KAAM,mBACN,UAAW,UACX,YAAa,aACb,QAAS,CAAC,aAAc,UAAW,mBAAoB,YAAY,EACnE,QAASC,GACX,EACA,CACE,aAAc,WACd,KAAM,WACN,UAAW,MACX,YAAa,mBACb,QAAS,CAAC,KAAM,WAAY,UAAU,EACtC,QAASC,EACX,EACA,CACE,aAAc,QACd,KAAM,SACN,UAAW,SACX,YAAa,iBACb,QAAS,CAAC,MAAM,EAChB,QAASC,EACX,EACA,CACE,aAAc,OACd,KAAM,OACN,UAAW,OACX,YAAa,OACb,QAAS,CAAC,MAAM,EAChB,QAASC,GACX,EACA,CACE,aAAc,QACd,KAAM,QACN,UAAW,QACX,YAAa,QACb,QAAS,CAAC,OAAO,EACjB,QAASC,GACX,EACA,CACE,aAAc,WACd,KAAM,UACN,UAAW,OACX,YAAa,uBACb,QAAS,CAAC,WAAY,UAAW,UAAU,EAC3C,QAASC,GACX,EACA,CACE,aAAc,sBACd,KAAM,UACN,UAAW,MACX,YAAa,gCACb,QAAS,CAAC,UAAW,SAAS,EAC9B,QAASC,EACX,EACA,CACE,aAAc,oBACd,KAAM,aACN,UAAW,SACX,YAAa,6BACb,QAAS,CAAC,aAAc,QAAQ,EAChC,gBAAiB,CAAC,YAAY,EAC9B,QAASC,GACX,EACA,CACE,aAAc,oBACd,KAAM,YACN,UAAW,SACX,YAAa,6BACb,QAAS,CAAC,YAAa,QAAQ,EAC/B,gBAAiB,CAAC,WAAW,EAC7B,QAASC,GACX,EACA,CACE,aAAc,kBACd,KAAM,wBACN,UAAW,SACX,YAAa,kBACb,QAAS,CAAC,WAAY,mBAAoB,WAAW,EACrD,QAASC,GACX,EACA,CACE,aAAc,mBACd,KAAM,qBACN,UAAW,SACX,YAAa,2BACb,QAAS,CAAC,SAAU,gBAAiB,eAAe,EACpD,gBAAiB,CAAC,eAAe,EACjC,QAASC,GACX,EACA,CACE,aAAc,OACd,KAAM,gBACN,UAAW,WACX,YAAa,0BACb,QAAS,CAAC,eAAe,EACzB,gBAAiB,CAAC,cAAc,EAChC,QAASC,EACX,EACA,CACE,aAAc,aACd,KAAM,aACN,UAAW,OACX,YAAa,aACb,QAASC,GACX,EACA,CACE,aAAc,OACd,KAAM,oBACN,UAAW,aACX,YAAa,oBACb,QAAS,CAAC,OAAQ,mBAAmB,EACrC,QAASC,EACX,EACA,CACE,aAAc,uBACd,KAAM,kBACN,UAAW,WACX,YAAa,sBACb,QAAS,CAAC,kBAAmB,gBAAiB,WAAY,gBAAgB,EAC1E,QAASC,GACX,EACA,CACE,aAAc,QACd,KAAM,eACN,UAAW,UACX,YAAa,uBACb,QAAS,CAAC,QAAS,cAAc,EACjC,gBAAiB,CAAC,YAAY,EAC9B,QAASC,GACX,EACA,CACE,aAAc,OACd,KAAM,gBACN,UAAW,UACX,YAAa,aACb,QAAS,CAAC,OAAQ,eAAe,EACjC,gBAAiB,CAAC,UAAU,EAC5B,QAASC,GACX,EACA,CACE,aAAc,YACd,KAAM,mBACN,UAAW,OACX,YAAa,+BACb,QAAS,CAAC,MAAM,EAChB,gBAAiB,CAAC,UAAU,EAC5B,QAASC,EACX,EACA,CACE,aAAc,UACd,KAAM,YACN,UAAW,YACX,YAAa,iCACb,QAAS,CAAC,YAAa,SAAS,EAChC,QAASC,GACX,EACA,CACE,aAAc,UACd,KAAM,cACN,UAAW,QACX,YAAa,iBACb,QAAS,CAAC,UAAW,SAAS,EAC9B,QAASC,EACX,EACA,CACE,aAAc,gBACd,KAAM,cACN,UAAW,UACX,YAAa,iBACb,QAASC,EACX,EACA,CACE,aAAc,oCACd,KAAM,eACN,UAAW,SACX,YAAa,iBACb,QAASC,EACX,EACA,CACE,aAAc,WACd,KAAM,iBACN,UAAW,OACX,YAAa,qBACb,QAAS,CAAC,WAAY,gBAAgB,EACtC,QAASC,GACX,EACA,CACE,aAAc,WACd,KAAM,WACN,UAAW,MACX,YAAa,wBACb,QAAS,CAAC,MAAO,UAAU,EAC3B,QAASC,GACX,EACA,CACE,aAAc,QACd,KAAM,yBACN,UAAW,QACX,YAAa,qBACb,QAAS,CAAC,wBAAwB,EAClC,QAASC,EACX,EACA,CACE,aAAc,wBACd,KAAM,sBACN,UAAW,QACX,YAAa,wBACb,QAAS,CAAC,MAAO,qBAAqB,EACtC,QAASC,GACX,EACA,CACE,aAAc,eACd,KAAM,iBACN,UAAW,UACX,YAAa,eACb,QAAS,CAAC,OAAQ,gBAAgB,EAClC,QAASC,GACX,EACA,CACE,aAAc,UACd,KAAM,mBACN,UAAW,YACX,YAAa,uBACb,QAAS,CAAC,mBAAoB,SAAS,EACvC,QAASC,EACX,EACA,CACE,aAAc,kBACd,KAAM,oBACN,UAAW,WACX,YAAa,wBACb,QAAS,CAAC,WAAY,oBAAqB,iBAAiB,EAC5D,QAASC,EACX,EACA,CACE,aAAc,UACd,KAAM,WACN,UAAW,MACX,YAAa,qBACb,QAAS,CAAC,UAAW,UAAU,EAC/B,QAASC,GACX,EACA,CACE,aAAc,mBACd,KAAM,cACN,UAAW,WACX,YAAa,mBACb,QAAS,CAAC,mBAAoB,aAAa,EAC3C,QAASC,GACX,EACA,CACE,aAAc,WACd,KAAM,gBACN,UAAW,SACX,YAAa,iBACb,QAAS,CAAC,WAAY,eAAe,EACrC,QAASC,EACX,EACA,CACE,aAAc,aACd,KAAM,uBACN,UAAW,aACX,YAAa,kBACb,QAAS,CAAC,aAAc,kBAAkB,EAC1C,QAASC,GACX,EACA,CACE,aAAc,cACd,KAAM,mBACN,UAAW,WACX,YAAa,wBACb,QAAS,CAAC,cAAe,kBAAkB,EAC3C,QAASC,EACX,EACA,CACE,aAAc,eACd,KAAM,mB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AE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAEC,GAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAEC,GAAI,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,EAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,EAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,EAAE,EAAE,EAAEC,GAAK,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAEC,GAAK,CAAC,EAAE,GAAG,EAAE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,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG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AAC,EAAhE,KAAkEK,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,GAAG,GAAG,GAAG,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAEC,EAAI,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,E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AI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,CAAG,EAAE7B,EAAEK,EAAI,CAAC,EAAE,CAAC,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,CAAC,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,CAAC,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,CAAC,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEL,EAAEK,EAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,E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GAAG,MAAM,GAAG,YAAY,EAClpB,aAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAA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C,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,GAAG,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAEC,EAAI,CAAC,GAAG,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,GAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAEC,EAAI,CAAC,GAAG,EAAE,EAAEC,GAAI,CAAC,EAAE,GAAG,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GA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AE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EA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AAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GA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AAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAC1iB,cAAeA,EAAA,SAAmB8C,EAAQC,EAAQC,GAAUC,EAAIC,GAAyBC,GAAiBC,GAAiB,CAG3H,IAAIC,EAAKF,GAAG,OAAS,EACrB,OAAQD,GAAS,CACjB,IAAK,GACJ,OAAAD,EAAG,MAAME,GAAGE,CAAE,CAAC,EAASF,GAAGE,CAAE,EAC9B,MACA,IAAK,GAAG,IAAK,GACZ,KAAK,EAAI,CAAC,EACX,MACA,IAAK,GAAG,IAAK,IACbF,GAAGE,EAAG,CAAC,EAAE,KAAKF,GAAGE,CAAE,CAAC,EAAE,KAAK,EAAIF,GAAGE,EAAG,CAAC,EACtC,MACA,IAAK,GAAG,IAAK,GAAG,IAAK,IAAI,IAAK,IAC7B,KAAK,EAAIF,GAAGE,CAAE,EACf,MACA,IAAK,GAAG,IAAK,IACZ,KAAK,EAAE,CAAC,EACT,MACA,IAAK,IACLF,GAAGE,CAAE,EAAE,KAAK,oBAAqB,KAAK,EAAEF,GAAGE,CAAE,EAC7C,MACA,IAAK,IAEHF,GAAGE,EAAG,CAAC,EAAE,QAAQ,CAAC,KAAM,WAAY,QAAQJ,EAAG,aAAaE,GAAGE,EAAG,CAAC,CAAC,CAAE,CAAC,EACvEF,GAAGE,EAAG,CAAC,EAAE,KAAK,CAAC,KAAM,SAAU,QAAQF,GAAGE,EAAG,CAAC,CAAC,CAAC,EAChD,KAAK,EAAEF,GAAGE,EAAG,CAAC,EAChB,MACA,IAAK,IACJ,KAAK,EAAG,CAAC,KAAK,gBAAgB,cAAe,OAAOF,GAAGE,EAAG,CAAC,CAAC,EAAG,kBAAkB,OAAOF,GAAGE,EAAG,CAAC,CAAC,EAAG,gBAAgB,GAAM,WAAWJ,EAAG,SAAS,UAAU,EAC3J,MACA,IAAK,IACJ,KAAK,EAAI,CAAC,KAAK,gBAAgB,cAAe,OAAOE,GAAGE,EAAG,CAAC,CAAC,EAAG,kBAAkB,EAAG,gBAAgB,GAAM,WAAWJ,EAAG,SAAS,UAAU,EAC7I,MACA,IAAK,IACJ,KAAK,EAAI,CAAC,KAAK,gBAAiB,gBAAgB,GAAO,WAAWA,EAAG,SAAS,UAAU,EACzF,MACA,IAAK,IACL,KAAK,EAAI,CAAC,KAAK,gBAAiB,gBAAgB,GAAM,WAAWA,EAAG,SAAS,UAAU,EACvF,MACA,IAAK,IACL,KAAK,EAAE,CAAC,KAAM,cAAe,WAAYA,EAAG,SAAS,aAAc,MAAOE,GAAGE,EAAG,CAAC,EAAE,KAAK,EACxF,MACA,IAAK,IACL,KAAK,EAAE,CAAC,KAAM,YAAa,WAAYJ,EAAG,SAAS,WAAY,MAAOE,GAAGE,EAAG,CAAC,EAAE,KAAK,EACpF,MACA,IAAK,IACLJ,EAAG,gBAAgBE,GAAGE,CAAE,EAAE,UAAU,CAAC,CAAC,EAAE,KAAK,EAAEF,GAAGE,CAAE,EAAE,UAAU,CAAC,EACjE,MACA,IAAK,IACLJ,EAAG,gBAAgBE,GAAGE,CAAE,EAAE,UAAU,CAAC,CAAC,EAAE,KAAK,EAAEF,GAAGE,CAAE,EAAE,UAAU,CAAC,EACjE,MACA,IAAK,IACJ,KAAK,EAAEF,GAAGE,CAAE,EAAE,KAAK,EAAEJ,EAAG,YAAY,KAAK,CAAC,EAC3C,MACA,IAAK,IAAI,IAAK,IACb,KAAK,EAAEE,GAAGE,CAAE,EAAE,KAAK,EAAEJ,EAAG,kBAAkB,KAAK,CAAC,EACjD,MACA,IAAK,IAEHE,GAAGE,EAAG,CAAC,EAAE,QAAQ,CAAC,KAAM,YAAa,SAASJ,EAAG,aAAaE,GAAGE,EAAG,CAAC,CAAC,EAAG,WAAYJ,EAAG,SAAS,UAAU,CAAC,EAC5GE,GAAGE,EAAG,CAAC,EAAE,KAAK,CAAC,KAAM,UAAW,SAASF,GAAGE,EAAG,CAAC,EAAG,WAAYJ,EAAG,SAAS,QAAQ,CAAC,EACpF,KAAK,EAAEE,GAAGE,EAAG,CAAC,EAChB,MACA,IAAK,IAEHF,GAAGE,EAAG,CAAC,EAAE,QAAQ,CAAC,KAAM,YAAa,MAAMJ,EAAG,aAAaE,GAAGE,EAAG,CAAC,CAAC,EAAG,WAAYJ,EAAG,SAAS,UAAW,CAAC,EAC1GE,GAAGE,EAAG,CAAC,EAAE,KAAK,CAAC,KAAM,UAAW,MAAMJ,EAAG,aAAaE,GAAGE,EAAG,CAAC,CAAC,EAAG,WAAYJ,EAAG,SAAS,QAAS,CAAC,EACnG,KAAK,EAAEE,GAAGE,EAAG,CAAC,EAChB,MACA,IAAK,IAEHF,GAAGE,EAAG,CAAC,EAAE,QAAQ,CAAC,KAAM,WAAY,QAAQJ,EAAG,aAAaE,GAAGE,EAAG,CAAC,CAAC,EAAG,WAAYJ,EAAG,SAAS,SAAS,CAAC,EACzGE,GAAGE,EAAG,CAAC,EAAE,KAAK,CAAC,KAAM,SAAU,QAAQJ,EAAG,aAAaE,GAAGE,EAAG,CAAC,CAAC,EAAG,WAAYJ,EAAG,SAAS,OAAO,CAAC,EAClG,KAAK,EAAEE,GAAGE,EAAG,CAAC,EAChB,MACA,IAAK,IAGHF,GAAGE,EAAG,CAAC,EAAE,QAAQ,CAAC,KAAM,WAAY,QAAQJ,EAAG,aAAaE,GAAGE,EAAG,CAAC,CAAC,EAAG,WAAYJ,EAAG,SAAS,SAAS,CAAC,EAGzGE,GAAGE,EAAG,CAAC,EAAE,KAAK,CAAC,KAAM,SAAU,WAAYJ,EAAG,SAAS,OAAO,CAAC,EAC/D,KAAK,EAAEE,GAAGE,EAAG,CAAC,EAChB,MACA,IAAK,IAGHF,GAAGE,EAAG,CAAC,EAAE,QAAQ,CAAC,KAAM,WAAY,QAAQJ,EAAG,aAAaE,GAAGE,EAAG,CAAC,CAAC,EAAG,WAAYJ,EAAG,SAAS,SAAS,CAAC,EAGzGE,GAAGE,EAAG,CAAC,EAAE,KAAK,CAAC,KAAM,SAAU,WAAYJ,EAAG,SAAS,OAAO,CAAC,EAC/D,KAAK,EAAEE,GAAGE,EAAG,CAAC,EAChB,MACA,IAAK,IAGHF,GAAGE,EAAG,CAAC,EAAE,QAAQ,CAAC,KAAM,WAAY,QAAQJ,EAAG,aAAaE,GAAGE,EAAG,CAAC,CAAC,EAAG,WAAYJ,EAAG,SAAS,cAAc,CAAC,EAG9GE,GAAGE,EAAG,CAAC,EAAE,KAAK,CAAC,KAAM,SAAU,WAAYJ,EAAG,SAAS,OAAO,CAAC,EAC/D,KAAK,EAAEE,GAAGE,EAAG,CAAC,EAChB,MACA,IAAK,IAGHF,GAAGE,EAAG,CAAC,EAAE,QAAQ,CAAC,KAAM,gBAAiB,aAAaJ,EAAG,aAAaE,GAAGE,EAAG,CAAC,CAAC,EAAG,WAAYJ,EAAG,SAAS,cAAc,CAAC,EAGxHE,GAAGE,EAAG,CAAC,EAAE,KAAK,CAAC,KAAM,cAAe,WAAYJ,EAAG,SAAS,YAAY,CAAC,EACzE,KAAK,EAAEE,GAAGE,EAAG,CAAC,EAChB,MACA,IAAK,IAEHF,GAAGE,EAAG,CAAC,EAAE,QAAQ,CAAC,KAAM,aAAc,UAAUJ,EAAG,aAAaE,GAAGE,EAAG,CAAC,CAAC,EAAG,WAAYJ,EAAG,SAAS,WAAW,CAAC,EAC/GE,GAAGE,EAAG,CAAC,EAAE,KAAK,CAAC,KAAM,WAAY,QAAQJ,EAAG,aAAaE,GAAGE,EAAG,CAAC,CAAC,EAAG,WAAYJ,EAAG,SAAS,SAAS,CAAC,EACtG,KAAK,EAAEE,GAAGE,EAAG,CAAC,EAChB,MACA,IAAK,IACJ,KAAK,EAAIF,GAAGE,EAAG,CAAC,EAAE,OAAO,CAAC,CAAC,KAAM,SAAU,WAAWJ,EAAG,aAAaE,GAAGE,EAAG,CAAC,CAAC,EAAG,WAAYJ,EAAG,SAAS,eAAe,EAAGE,GAAGE,CAAE,CAAC,CAAC,EACnI,MACA,IAAK,IACJ,KAAK,EAAIF,GAAGE,EAAG,CAAC,EAAE,OAAO,CAAC,CAAC,KAAM,MAAO,QAAQJ,EAAG,aAAaE,GAAGE,EAAG,CAAC,CAAC,EAAG,WAAYJ,EAAG,SAAS,OAAO,EAAGE,GAAGE,CAAE,CAAC,CAAC,EACrH,MACA,IAAK,IACJ,KAAK,EAAIF,GAAGE,EAAG,CAAC,EAAE,OAAO,CAAC,CAAC,KAAM,OAAQ,QAAQJ,EAAG,aAAaE,GAAGE,EAAG,CAAC,CAAC,EAAG,WAAYJ,EAAG,SAAS,QAAQ,EAAGE,GAAGE,CAAE,CAAC,CAAC,EACvH,MACA,IAAK,IACLF,GAAGE,EAAG,CAAC,EAAE,KAAK,cAAeF,GAAGE,EAAG,CAAC,EAAE,KAAK,iBAAiBF,GAAGE,EAAG,CAAC,EAAE,YAAYJ,EAAG,aAAaE,GAAGE,EAAG,CAAC,CAAC,EAAG,KAAK,EAAEF,GAAGE,EAAG,CAAC,EAC1H,MACA,IAAK,IACLF,GAAGE,EAAG,CAAC,EAAE,KAAK,cAAeF,GAAGE,EAAG,CAAC,EAAE,KAAK,iBAAiB,KAAK,EAAEF,GAAGE,EAAG,CAAC,EAC1E,MACA,IAAK,IACLF,GAAGE,EAAG,CAAC,EAAE,KAAK,QAASF,GAAGE,EAAG,CAAC,EAAE,KAAK,iBAAiBF,GAAGE,EAAG,CAAC,EAAE,YAAYJ,EAAG,aAAaE,GAAGE,EAAG,CAAC,CAAC,EAAG,KAAK,EAAEF,GAAGE,EAAG,CAAC,EACpH,MACA,IAAK,IACLF,GAAGE,EAAG,CAAC,EAAE,KAAK,QAASF,GAAGE,EAAG,CAAC,EAAE,KAAK,iBAAkB,KAAK,EAAEF,GAAGE,EAAG,CAAC,EACrE,MACA,IAAK,IACLF,GAAGE,EAAG,CAAC,EAAE,KAAK,qBAAsB,KAAK,EAAEF,GAAGE,EAAG,CAAC,EAClD,MACA,IAAK,IACLF,GAAGE,EAAG,CAAC,EAAE,KAAK,cAAeF,GAAGE,EAAG,CAAC,EAAE,KAAK,iBAAkB,KAAK,EAAEF,GAAGE,EAAG,CAAC,EAC3E,MACA,IAAK,IAEH,KAAK,EAAI,CAACF,GAAGE,EAAG,CAAC,EAAG,CAAC,KAAK,UAAW,UAAUF,GAAGE,EAAG,CAAC,EAAG,MAAMF,GAAGE,EAAG,CAAC,EAAE,MAAO,KAAKF,GAAGE,CAAE,CAAC,CAAC,EAC7F,MACA,IAAK,IAGHF,GAAGE,EAAG,CAAC,EAAI,CAAC,EAAE,OAAOF,GAAGE,EAAG,CAAC,EAAGF,GAAGE,EAAG,CAAC,CAAC,EAAE,MAAM,EAAG,CAAC,EACnDF,GAAGE,EAAG,CAAC,EAAE,CAAC,EAAIF,GAAGE,EAAG,CAAC,EAAE,CAAC,EAAE,MAC1BF,GAAGE,EAAG,CAAC,EAAE,CAAC,EAAIF,GAAGE,EAAG,CAAC,EAAE,CAAC,EAAE,MAC1B,KAAK,EAAI,CAACF,GAAGE,EAAG,CAAC,EAAG,CAAC,KAAK,UAAW,UAAUJ,EAAG,UAAU,KAAM,MAAME,GAAGE,EAAG,CAAC,EAAE,MAAM,EAAG,CAAC,EAAG,KAAKF,GAAGE,CAAE,CAAC,CAAC,EAC5G,MACA,IAAK,IAEH,KAAK,EAAI,CAACF,GAAGE,EAAG,CAAC,EAAG,CAAC,KAAK,WAAY,MAAMF,GAAGE,EAAG,CAAC,EAAE,MAAO,KAAKF,GAAGE,CAAE,CAAC,CAAC,EAE1E,MACA,IAAK,IAEH,KAAK,EAAI,CAACF,GAAGE,EAAG,CAAC,EAAG,CAAC,KAAK,WAAY,MAAMF,GAAGE,EAAG,CAAC,EAAE,MAAO,KAAKF,GAAGE,CAAE,CAAC,CAAC,EAE1E,MACA,IAAK,IAEH,KAAK,EAAI,CAACF,GAAGE,EAAG,CAAC,EAAG,CAAC,KAAK,gBAAiB,MAAMF,GAAGE,EAAG,CAAC,EAAE,MAAO,KAAKF,GAAGE,CAAE,CAAC,CAAC,EAE/E,MACA,IAAK,IAEH,KAAK,EAAI,CAACF,GAAGE,EAAG,CAAC,EAAG,CAAC,KAAK,aAAc,MAAMF,GAAGE,EAAG,CAAC,EAAE,MAAO,KAAKF,GAAGE,CAAE,CAAC,CAAC,EAE5E,MACA,IAAK,IACJ,KAAK,EAAI,CAACF,GAAGE,EAAG,CAAC,EAAGF,GAAGE,CAAE,CAAC,EAC3B,MACA,IAAK,IACJ,KAAK,EAAIF,GAAGE,CAAE,EACf,MACA,IAAK,IACJ,KAAK,EAAIJ,EAAG,UAAU,OACvB,MACA,IAAK,IACJ,KAAK,EAAIA,EAAG,UAAU,QACvB,MACA,IAAK,IACJ,KAAK,EAAI,CAACE,GAAGE,EAAG,CAAC,EAAEF,GAAGE,EAAG,CAAC,EAAE,CAAC,KAAM,aAAc,KAAKF,GAAGE,EAAG,CAAC,EAAE,MAAO,GAAGF,GAAGE,EAAG,CAAC,EAAE,MAAO,WAAWF,GAAGE,EAAG,CAAC,EAAG,IAAIF,GAAGE,CAAE,EAAG,SAAU,EAAI,EAC1H,CAAC,KAAM,cAAe,WAAYJ,EAAG,SAAS,aAAc,MAAOE,GAAGE,EAAG,CAAC,EAAE,KAAK,CAClF,EACd,MACA,IAAK,IACJ,KAAK,EAAI,CAACF,GAAGE,EAAG,CAAC,EAAEF,GAAGE,EAAG,CAAC,EAAE,CAAC,KAAM,aAAc,KAAKF,GAAGE,EAAG,CAAC,EAAE,MAAO,GAAGF,GAAGE,EAAG,CAAC,EAAE,MAAO,WAAWF,GAAGE,EAAG,CAAC,EAAG,IAAIF,GAAGE,CAAE,CAAC,EAC3G,CAAC,KAAM,YAAa,WAAYJ,EAAG,SAAS,WAAY,MAAOE,GAAGE,EAAG,CAAC,EAAE,KAAK,CAC7E,EACd,MACA,IAAK,IACJ,KAAK,EAAI,CAACF,GAAGE,EAAG,CAAC,EAAEF,GAAGE,EAAG,CAAC,EAAE,CAAC,KAAM,aAAc,KAAKF,GAAGE,EAAG,CAAC,EAAE,MAAO,GAAGF,GAAGE,EAAG,CAAC,EAAE,MAAO,WAAWF,GAAGE,EAAG,CAAC,EAAG,IAAIF,GAAGE,CAAE,CAAC,CAAC,EAC1H,MACA,IAAK,IAEG,KAAK,EAAI,CACP,KAAM,iBACN,MAAOF,GAAGE,EAAG,CAAC,EACd,OAAQF,GAAGE,CAAE,CACf,EAER,MACA,IAAK,IAEG,KAAK,EAAIF,GAAGE,EAAG,CAAC,EAAE,KAAK,EAE/B,MACA,IAAK,IACL,KAAK,EAAE,CAAE,KAAM,iBAAkB,MAAMF,GAAGE,CAAE,CAAC,EAC7C,MACA,IAAK,IACJ,KAAK,EAAIJ,EAAG,SAAS,WACtB,MACA,IAAK,IACJ,KAAK,EAAIA,EAAG,SAAS,YACtB,MACA,IAAK,IACJ,KAAK,EAAIA,EAAG,SAAS,MACtB,MACA,IAAK,IACJ,KAAK,EAAIA,EAAG,SAAS,oBACtB,MACA,IAAK,IACJ,KAAK,EAAIA,EAAG,SAAS,OACtB,MACA,IAAK,IACJ,KAAK,EAAIA,EAAG,SAAS,qBACtB,MACA,IAAK,IACJ,KAAK,EAAIA,EAAG,SAAS,YACtB,MACA,IAAK,IACJ,KAAK,EAAIA,EAAG,SAAS,aACtB,MACA,IAAK,IACJ,KAAK,EAAIA,EAAG,SAAS,YACtB,MACA,IAAK,IACJ,KAAK,EAAIA,EAAG,SAAS,aACtB,MACA,IAAK,IACL,KAAK,EAAIA,EAAG,aAAaE,GAAGE,CAAE,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,EACnD,KACA,CACA,EA9Pe,aA+Pf,MAAO,CAAC,CAAC,EAAE,EAAE,EAAEjD,EAAI,EAAEC,EAAI,EAAEC,CAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAEF,EAAI,EAAEC,EAAI,EAAEC,CAAG,EAAE,CAAC,EAAE,EAAE,EAAEF,EAAI,EAAEC,EAAI,EAAEC,CAAG,EAAEP,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAEQ,EAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAEC,EAAI,EAAEC,EAAI,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,CAAG,EAAErC,EAAEsC,EAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG3B,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,CAAG,EAAErC,EAAEsC,EAAI,CAAC,EAAE,CAAC,CAAC,EAAEtC,EAAEsC,EAAI,CAAC,EAAE,CAAC,CAAC,EAAEtC,EAAEsC,EAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAGT,EAAI,GAAGC,EAAI,GAAGC,CAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAGM,CAAG,EAAE,CAAC,GAAG,GAAG,GAAGA,CAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAErC,EAAEsC,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEtC,EAAEsC,EAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAEtC,EAAEsC,EAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAGD,CAAG,EAAE,CAAC,GAAG,GAAG,GAAGA,CAAG,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAGA,CAAG,EAAE,CAAC,GAAG,GAAG,GAAGA,CAAG,EAAE,CAAC,GAAG,GAAG,GAAGA,CAAG,EAAE,CAAC,GAAG,GAAG,GAAGA,CAAG,EAAErC,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAEuC,CAAG,EAAEvC,EAAEsC,EAAI,CAAC,EAAE,CAAC,CAAC,EAAEtC,EAAEsC,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEtC,EAAEwC,EAAI,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAExC,EAAEsC,EAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAEtC,EAAEsC,EAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAEtC,EAAEsC,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEtC,EAAEsC,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEtC,EAAEsC,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEtC,EAAEsC,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEtC,EAAEsC,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEtC,EAAEsC,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEtC,EAAEsC,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEtC,EAAEyC,EAAIjC,EAAI,CAAC,EAAE,GAAG,CAAC,EAAER,EAAEyC,EAAIjC,EAAI,CAAC,EAAE,GAAG,CAAC,EAAER,EAAEyC,EAAIjC,EAAI,CAAC,EAAE,GAAG,CAAC,EAAER,EAAE0C,EAAIlC,EAAI,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAER,EAAE2C,EAAInC,EAAI,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAER,EAAE2C,EAAInC,EAAI,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,EAAER,EAAE4C,GAAIpC,EAAI,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAER,EAAEyC,EAAIjC,EAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAER,EAAE,CAAC,EAAE,EAAE,EAAEuC,EAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAGF,CAAG,EAAErC,EAAE6C,EAAI,CAAC,EAAE,EAAE,CAAC,EAAE7C,EAAE6C,EAAI,CAAC,EAAE,EAAE,CAAC,EAAE7C,EAAE6C,EAAI,CAAC,EAAE,EAAE,CAAC,EAAE7C,EAAE6C,EAAI,CAAC,EAAE,EAAE,CAAC,EAAE7C,EAAE6C,EAAI,CAAC,EAAE,EAAE,CAAC,EAAE7C,EAAE6C,EAAI,CAAC,EAAE,EAAE,CAAC,EAAE7C,EAAE6C,EAAI,CAAC,EAAE,EAAE,CAAC,EAAE7C,EAAE6C,EAAI,CAAC,EAAE,EAAE,CAAC,EAAE7C,EAAE6C,EAAI,CAAC,EAAE,EAAE,CAAC,EAAE7C,EAAE6C,EAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,GAAGR,CAAG,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,GAAGA,CAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,GAAGS,EAAG,EAAE,CAAC,GAAG,IAAI,GAAGA,EAAG,EAAE,CAAC,GAAG,IAAI,GAAGA,EAAG,EAAE,CAAC,GAAG,IAAI,GAAGA,EAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,GAAGjB,EAAI,GAAGC,EAAI,GAAGC,CAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE/B,EAAEsC,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEtC,EAAEsC,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEtC,EAAEsC,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEtC,EAAEsC,EAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE7B,EAAI,EAAEC,EAAI,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,CAAG,EAAE,CAAC,EAAE5B,EAAI,EAAEC,EAAI,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,CAAG,EAAE,CAAC,EAAE5B,EAAI,EAAEC,EAAI,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,CAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE5B,EAAI,EAAEC,EAAI,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,GAAG,EAAE,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,CAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE5B,EAAI,EAAEC,EAAI,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,GAAG,EAAE,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,CAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE5B,EAAI,EAAEC,EAAI,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,GAAG,EAAE,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,CAAG,EAAE,CAAC,EAAE5B,EAAI,EAAEC,EAAI,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,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AC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CA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G,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,UAAY,EAAK,EAAE,UAAY,CAAC,MAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,UAAY,EAAK,EAAE,UAAY,CAAC,MAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,UAAY,EAAK,EAAE,cAAgB,CAAC,MAAQ,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,UAAY,EAAK,EAAE,cAAgB,CAAC,MAAQ,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,E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", + "names": ["defaultIconDimensions", "defaultIconTransformations", "defaultIconProps", "defaultExtendedIconProps", "init_defaults", "__esmMin", "defaultIconSizeCustomisations", "defaultIconCustomisations", "init_defaults", "__esmMin", "defaultIconTransformations", "stringToIcon", "validateIconName", "init_name", "__esmMin", "__name", "value", "validate", "allowSimpleName", "provider", "colonSeparated", "name$1", "prefix", "result", "name", "dashSeparated", "icon", "mergeIconTransformations", "obj1", "obj2", "result", "rotate", "init_transformations", "__esmMin", "__name", "mergeIconData", "parent", "child", "result", "mergeIconTransformations", "key", "defaultExtendedIconProps", "defaultIconTransformations", "init_merge", "__esmMin", "init_defaults", "init_transformations", "__name", "getIconsTree", "data", "names", "icons", "aliases", "resolved", "resolve", "name", "parent", "value", "__name", "init_tree", "__esmMin", "internalGetIconData", "data", "name", "tree", "icons", "aliases", "currentProps", "parse", "name$1", "mergeIconData", "__name", "getIconData", "getIconsTree", "init_get_icon", "__esmMin", "init_merge", "init_tree", "calculateSize", "size", "ratio", "precision", "oldParts", "unitsSplit", "newParts", "code", "isNumber", "unitsTest", "num", "init_size", "__esmMin", "__name", "splitSVGDefs", "content", "tag", "defs", "index", "start", "end", "endEnd", "mergeDefsAndContent", "wrapSVGContent", "body", "split", "init_defs", "__esmMin", "__name", "iconToSVG", "icon", "customisations", "fullIcon", "defaultIconProps", "fullCustomisations", "defaultIconCustomisations", "box", "body", "props", "transformations", "hFlip", "vFlip", "rotation", "tempValue", "wrapSVGContent", "customisationsWidth", "customisationsHeight", "boxWidth", "boxHeight", "width", "height", "calculateSize", "attributes", "setAttr", "__name", "prop", "value", "isUnsetKeyword", "viewBox", "init_build", "__esmMin", "init_defaults", "init_size", "init_defs", "replaceIDs", "body", "prefix", "randomPrefix", "ids", "match", "regex", "suffix", "id", "newID", "counter", "escapedID", "init_id", "__esmMin", "__name", "iconToHTML", "body", "attributes", "renderAttribsHTML", "attr", "init_html", "__esmMin", "__name", "init_lib", "__esmMin", "init_name", "init_get_icon", "init_build", "init_id", "init_html", "assignWithDepth", "assignWithDepth_default", "init_assignWithDepth", "__esmMin", "__name", "dst", "src", "depth", "clobber", "config", "s", "key", "require_dayjs_min", "__commonJSMin", "exports", "module", "n", "r", "s", "u", "a", "o", "c", "h", "d", "l", "$", "M", "__name", "t", "e", "m", "v", "i", "g", "D", "p", "S", "_", "w", "O", "b", "f", "y", "k", "import_dayjs", "LEVELS", "log", "setLogLevel", "format", "init_logger", "__esmMin", "__name", "_args", "level", "numericLevel", "dayjs", "Channel", "channel_default", "init_channel", "__esmMin", "__name", "r", "g", "b", "h", "s", "l", "a", "c", "n", "p", "q", "t", "channel", "max", "min", "d", "Lang", "lang_default", "init_lang", "__esmMin", "__name", "number", "lower", "upper", "Unit", "unit_default", "init_unit", "__esmMin", "__name", "dec", "hex", "Utils", "utils_default", "init_utils", "__esmMin", "init_channel", "init_lang", "init_unit", "channel_default", "lang_default", "unit_default", "DEC2HEX", "TYPE", "init_constants", "__esmMin", "init_utils", "i", "utils_default", "Type", "type_default", "init_type", "__esmMin", "init_constants", "__name", "TYPE", "type", "Channels", "channels_default", "init_channels", "__esmMin", "init_utils", "init_type", "init_constants", "__name", "data", "color", "type_default", "TYPE", "h", "s", "l", "utils_default", "g", "b", "r", "a", "channels", "reusable_default", "init_reusable", "__esmMin", "init_channels", "channels_default", "Hex", "hex_default", "init_hex", "__esmMin", "init_reusable", "init_constants", "__name", "color", "match", "hex", "dec", "length", "hasAlpha", "isFullLength", "multiplier", "bits", "bitsOffset", "mask", "reusable_default", "channels", "r", "g", "b", "a", "DEC2HEX", "HSL", "hsl_default", "init_hsl", "__esmMin", "init_utils", "init_reusable", "__name", "hue", "match", "number", "unit", "utils_default", "color", "charCode", "h", "s", "l", "a", "isAlphaPercentage", "reusable_default", "channels", "Keyword", "keyword_default", "init_keyword", "__esmMin", "init_hex", "__name", "color", "hex", "hex_default", "channels", "name", "RGB", "rgb_default", "init_rgb", "__esmMin", "init_utils", "init_reusable", "__name", "color", "charCode", "match", "r", "isRedPercentage", "g", "isGreenPercentage", "b", "isBluePercentage", "a", "isAlphaPercentage", "reusable_default", "utils_default", "channels", "Color", "color_default", "init_color", "__esmMin", "init_hex", "init_hsl", "init_keyword", "init_rgb", "init_constants", "keyword_default", "hex_default", "rgb_default", "hsl_default", "__name", "color", "channels", "TYPE", "change", "change_default", "init_change", "__esmMin", "init_utils", "init_color", "__name", "color", "channels", "ch", "color_default", "c", "utils_default", "rgba", "rgba_default", "init_rgba", "__esmMin", "init_utils", "init_reusable", "init_color", "init_change", "__name", "r", "g", "b", "a", "change_default", "channels", "reusable_default", "utils_default", "color_default", "channel", "channel_default", "init_channel", "__esmMin", "init_utils", "init_color", "__name", "color", "utils_default", "color_default", "luminance", "luminance_default", "init_luminance", "__esmMin", "init_utils", "init_color", "__name", "color", "r", "g", "b", "color_default", "utils_default", "isLight", "is_light_default", "init_is_light", "__esmMin", "init_luminance", "__name", "color", "luminance_default", "isDark", "is_dark_default", "init_is_dark", "__esmMin", "init_is_light", "__name", "color", "is_light_default", "adjustChannel", "adjust_channel_default", "init_adjust_channel", "__esmMin", "init_utils", "init_color", "__name", "color", "channel", "amount", "channels", "color_default", "amountCurrent", "amountNext", "utils_default", "lighten", "lighten_default", "init_lighten", "__esmMin", "init_adjust_channel", "__name", "color", "amount", "adjust_channel_default", "darken", "darken_default", "init_darken", "__esmMin", "init_adjust_channel", "__name", "color", "amount", "adjust_channel_default", "adjust", "adjust_default", "init_adjust", "__esmMin", "init_color", "init_change", "__name", "color", "channels", "ch", "color_default", "changes", "c", "change_default", "mix", "mix_default", "init_mix", "__esmMin", "init_color", "init_rgba", "__name", "color1", "color2", "weight", "r1", "g1", "b1", "a1", "color_default", "r2", "g2", "b2", "a2", "weightScale", "weightNormalized", "alphaDelta", "weight1", "weight2", "r", "g", "b", "a", "rgba_default", "invert", "invert_default", "init_invert", "__esmMin", "init_color", "init_mix", "__name", "color", "weight", "inverse", "color_default", "mix_default", "init_methods", "__esmMin", "init_rgba", "init_channel", "init_is_dark", "init_lighten", "init_darken", "init_adjust", "init_invert", "init_dist", "__esmMin", "init_methods", "oldAttributeBackgroundColorOdd", "oldAttributeBackgroundColorEven", "init_erDiagram_oldHardcodedValues", "__esmMin", "mkBorder", "init_theme_helpers", "__esmMin", "init_dist", "__name", "col", "darkMode", "adjust_default", "Theme", "getThemeVariables", "init_theme_base", "__esmMin", "init_dist", "init_erDiagram_oldHardcodedValues", "init_theme_helpers", "__name", "adjust_default", "mkBorder", "invert_default", "darken_default", "lighten_default", "i", "multiplier", "is_dark_default", "oldAttributeBackgroundColorOdd", "oldAttributeBackgroundColorEven", "overrides", "keys", "k", "userOverrides", "theme", "Theme", "getThemeVariables", "init_theme_dark", "__esmMin", "init_dist", "init_theme_helpers", "__name", "lighten_default", "adjust_default", "invert_default", "mkBorder", "rgba_default", "darken_default", "i", "is_dark_default", "overrides", "keys", "k", "userOverrides", "theme", "Theme", "getThemeVariables", "init_theme_default", "__esmMin", "init_dist", "init_theme_helpers", "init_erDiagram_oldHardcodedValues", "__name", "adjust_default", "mkBorder", "invert_default", "rgba_default", "darken_default", "i", "lighten_default", "is_dark_default", "oldAttributeBackgroundColorOdd", "oldAttributeBackgroundColorEven", "overrides", "k", "keys", "userOverrides", "theme", "Theme", "getThemeVariables", "init_theme_forest", "__esmMin", "init_dist", "init_erDiagram_oldHardcodedValues", "init_theme_helpers", "__name", "lighten_default", "mkBorder", "invert_default", "darken_default", "adjust_default", "i", "is_dark_default", "oldAttributeBackgroundColorOdd", "oldAttributeBackgroundColorEven", "overrides", "keys", "k", "userOverrides", "theme", "Theme", "getThemeVariables", "init_theme_neutral", "__esmMin", "init_dist", "init_theme_helpers", "init_erDiagram_oldHardcodedValues", "__name", "lighten_default", "adjust_default", "mkBorder", "invert_default", "i", "darken_default", "is_dark_default", "oldAttributeBackgroundColorOdd", "oldAttributeBackgroundColorEven", "overrides", "keys", "k", "userOverrides", "theme", "themes_default", "init_themes", "__esmMin", "init_theme_base", "init_theme_dark", "init_theme_default", "init_theme_forest", "init_theme_neutral", "getThemeVariables", "config_schema_default", "init_config_schema", "__esmMin", "config", "keyify", "configKeys", "defaultConfig_default", "init_defaultConfig", "__esmMin", "init_themes", "init_config_schema", "config_schema_default", "themes_default", "__name", "obj", "prefix", "res", "el", "sanitizeDirective", "sanitizeCss", "init_sanitizeDirective", "__esmMin", "init_defaultConfig", "init_logger", "__name", "args", "log", "arg", "key", "configKeys", "cssMatchers", "cssKey", "k", "val", "str", "startCnt", "endCnt", "element", "defaultConfig", "siteConfig", "configFromInitialize", "directives", "currentConfig", "updateCurrentConfig", "setSiteConfig", "saveConfigFromInitialize", "updateSiteConfig", "getSiteConfig", "setConfig", "getConfig", "sanitize", "addDirective", "reset", "ConfigWarning", "issuedWarnings", "issueWarning", "checkConfig", "getUserDefinedConfig", "init_config", "__esmMin", "init_assignWithDepth", "init_logger", "init_themes", "init_defaultConfig", "init_sanitizeDirective", "defaultConfig_default", "assignWithDepth_default", "__name", "siteCfg", "_directives", "cfg", "sumOfDirectives", "d", "themes_default", "tmpConfigFromInitialize", "themeVariables", "conf", "options", "key", "log", "directive", "sanitizeDirective", "config", "warning", "userConfig", "unapply", "func", "thisArg", "RegExp", "lastIndex", "_len", "arguments", "length", "args", "Array", "_key", "apply", "unconstruct", "_len2", "_key2", "construct", "addToSet", "set", "array", "transformCaseFunc", "stringToLowerCase", "setPrototypeOf", "l", "element", "lcElement", "isFrozen", "cleanArray", "index", "objectHasOwnProperty", "clone", "object", "newObject", "create", "property", "value", "entries", "isArray", "constructor", "Object", "lookupGetter", "prop", "desc", "getOwnPropertyDescriptor", "get", "getPrototypeOf", "fallbackValue", "createDOMPurify", "window", "undefined", "getGlobal", "DOMPurify", "root", "version", "VERSION", "removed", "document", "nodeType", "NODE_TYPE", "Element", "isSupported", "originalDocument", "currentScript", "DocumentFragment", "HTMLTemplateElement", "Node", "NodeFilter", "NamedNodeMap", "MozNamedAttrMap", "HTMLFormElement", "DOMParser", "trustedTypes", "ElementPrototype", "prototype", "cloneNode", "remove", "getNextSibling", "getChildNodes", "getParentNode", "template", "createElement", "content", "ownerDocument", "trustedTypesPolicy", "emptyHTML", "implementation", "createNodeIterator", "createDocumentFragment", "getElementsByTagName", "importNode", "hooks", "_createHooksMap", "createHTMLDocument", "MUSTACHE_EXPR", "ERB_EXPR", "TMPLIT_EXPR", "DATA_ATTR", "ARIA_ATTR", "IS_SCRIPT_OR_DATA", "ATTR_WHITESPACE", "CUSTOM_ELEMENT", "EXPRESSIONS", "IS_ALLOWED_URI", "ALLOWED_TAGS", "DEFAULT_ALLOWED_TAGS", "TAGS", "ALLOWED_ATTR", "DEFAULT_ALLOWED_ATTR", "ATTRS", "CUSTOM_ELEMENT_HANDLING", "seal", "tagNameCheck", "writable", "configurable", "enumerable", "attributeNameCheck", "allowCustomizedBuiltInElements", "FORBID_TAGS", "FORBID_ATTR", "ALLOW_ARIA_ATTR", "ALLOW_DATA_ATTR", "ALLOW_UNKNOWN_PROTOCOLS", "ALLOW_SELF_CLOSE_IN_ATTR", "SAFE_FOR_TEMPLATES", "SAFE_FOR_XML", "WHOLE_DOCUMENT", "SET_CONFIG", "FORCE_BODY", "RETURN_DOM", "RETURN_DOM_FRAGMENT", "RETURN_TRUSTED_TYPE", "SANITIZE_DOM", "SANITIZE_NAMED_PROPS", "SANITIZE_NAMED_PROPS_PREFIX", "KEEP_CONTENT", "IN_PLACE", "USE_PROFILES", "FORBID_CONTENTS", "DEFAULT_FORBID_CONTENTS", "DATA_URI_TAGS", "DEFAULT_DATA_URI_TAGS", "URI_SAFE_ATTRIBUTES", "DEFAULT_URI_SAFE_ATTRIBUTES", "MATHML_NAMESPACE", "SVG_NAMESPACE", "HTML_NAMESPACE", "NAMESPACE", "IS_EMPTY_INPUT", "ALLOWED_NAMESPACES", "DEFAULT_ALLOWED_NAMESPACES", "stringToString", "MATHML_TEXT_INTEGRATION_POINTS", "HTML_INTEGRATION_POINTS", "COMMON_SVG_AND_HTML_ELEMENTS", "PARSER_MEDIA_TYPE", "SUPPORTED_PARSER_MEDIA_TYPES", "DEFAULT_PARSER_MEDIA_TYPE", "CONFIG", "formElement", "isRegexOrFunction", "__name", "testValue", "Function", "_parseConfig", "cfg", "indexOf", "ADD_URI_SAFE_ATTR", "ADD_DATA_URI_TAGS", "ALLOWED_URI_REGEXP", "html", "svg", "svgFilters", "mathMl", "ADD_TAGS", "ADD_ATTR", "table", "tbody", "TRUSTED_TYPES_POLICY", "createHTML", "typeErrorCreate", "createScriptURL", "_createTrustedTypesPolicy", "freeze", "ALL_SVG_TAGS", "ALL_MATHML_TAGS", "_checkValidNamespace", "parent", "tagName", "namespaceURI", "parentTagName", "Boolean", "_forceRemove", "node", "arrayPush", "removeChild", "_removeAttribute", "name", "attribute", "getAttributeNode", "from", "removeAttribute", "setAttribute", "_initDocument", "dirty", "doc", "leadingWhitespace", "matches", "stringMatch", "dirtyPayload", "parseFromString", "documentElement", "createDocument", "innerHTML", "body", "insertBefore", "createTextNode", "childNodes", "call", "_createNodeIterator", "SHOW_ELEMENT", "SHOW_COMMENT", "SHOW_TEXT", "SHOW_PROCESSING_INSTRUCTION", "SHOW_CDATA_SECTION", "_isClobbered", "nodeName", "textContent", "attributes", "hasChildNodes", "_isNode", "_executeHooks", "currentNode", "data", "arrayForEach", "hook", "_sanitizeElements", "beforeSanitizeElements", "uponSanitizeElement", "allowedTags", "firstElementChild", "regExpTest", "progressingInstruction", "comment", "_isBasicCustomElement", "parentNode", "childCount", "i", "childClone", "__removalCount", "text", "expr", "stringReplace", "afterSanitizeElements", "_isValidAttribute", "lcTag", "lcName", "stringIndexOf", "_sanitizeAttributes", "beforeSanitizeAttributes", "hookEvent", "attrName", "attrValue", "keepAttr", "allowedAttributes", "forceKeepAttr", "attr", "initValue", "stringTrim", "uponSanitizeAttribute", "getAttributeType", "setAttributeNS", "arrayPop", "afterSanitizeAttributes", "_sanitizeShadowDOM", "fragment", "shadowNode", "shadowIterator", "beforeSanitizeShadowDOM", "nextNode", "uponSanitizeShadowNode", "afterSanitizeShadowDOM", "sanitize", "importedNode", "returnNode", "toString", "appendChild", "firstChild", "nodeIterator", "shadowroot", "shadowrootmode", "serializedHTML", "outerHTML", "doctype", "setConfig", "clearConfig", "isValidAttribute", "tag", "addHook", "entryPoint", "hookFunction", "removeHook", "arrayLastIndexOf", "arraySplice", "removeHooks", "removeAllHooks", "svgDisallowed", "mathMlDisallowed", "xml", "DOCTYPE_NAME", "purify", "Reflect", "x", "fun", "thisValue", "Func", "forEach", "lastIndexOf", "pop", "push", "splice", "String", "toLowerCase", "match", "replace", "trim", "hasOwnProperty", "test", "TypeError", "cdataSection", "entityReference", "entityNode", "documentType", "documentFragment", "notation", "purifyHostElement", "createPolicy", "suffix", "ATTR_NAME", "hasAttribute", "getAttribute", "policyName", "scriptUrl", "console", "warn", "katex_exports", "__export", "ParseError", "SETTINGS_SCHEMA", "defineFunction", "defineMacro", "defineSymbol", "__domTree", "generateParseTree", "renderToDomTree", "renderToHTMLTree", "setFontMetrics", "katex", "render", "renderToString", "version", "escape", "text", "ESCAPE_REGEX", "match", "ESCAPE_LOOKUP", "getDefaultValue", "schema", "type", "defaultType", "scriptFromCodepoint", "codepoint", "i", "scriptData", "script", "_i", "block", "supportedCodepoint", "allBlocks", "fontName", "metrics", "fontMetricsData", "getCharacterMetrics", "character", "font", "mode", "ch", "extraCharacterMap", "getGlobalMetrics", "size", "sizeIndex", "fontMetricsBySizeIndex", "sigmasAndXis", "key", "assertSymbolDomNode", "group", "SymbolNode", "assertSpan", "Span", "replace", "name", "acceptUnicodeChar", "symbols", "_ref", "names", "props", "handler", "htmlBuilder", "mathmlBuilder", "data", "_functions", "_htmlGroupBuilders", "_mathmlGroupBuilders", "defineFunctionBuilders", "_ref2", "buildHTMLUnbreakable", "children", "options", "body", "makeSpan$1", "strut", "makeEm", "buildHTML", "tree", "tag", "expression", "buildExpression$1", "eqnNum", "parts", "nobreak", "tagChild", "htmlNode", "newDocumentFragment", "DocumentFragment", "isNumberPunctuation", "child", "TextNode", "_child", "buildMathML", "texExpression", "isDisplayMode", "forMathmlOnly", "buildExpression", "wrapper", "MathNode", "utils", "mathMLTree", "annotation", "semantics", "math", "wrapperClass", "buildCommon", "assertNodeType", "node", "assertSymbolNodeType", "typedNode", "checkSymbolNodeType", "NON_ATOMS", "htmlBuilder$9", "elements", "makeSpan", "mathmlBuilder$8", "inner", "cdArrow", "arrowChar", "labels", "parser", "funcName", "cdArrowFunctionName", "leftLabel", "bareArrow", "sizedArrow", "rightLabel", "arrowGroup", "arrow", "parseCD", "parsedRows", "next", "row", "rowNodes", "cell", "newCell", "j", "isStartOfArrow", "labelNum", "inLabel", "k", "isLabelEnd", "wrappedArrow", "cols", "checkDelimiter", "delim", "context", "symDelim", "delimiters", "assertParsed", "defineEnvironment", "_environments", "_macros", "getHLines", "hlineInfo", "nxt", "getAutoTag", "parseArray", "style", "hskipBeforeAndAfter", "addJot", "arraystretch", "colSeparationType", "autoTag", "singleRow", "emptySingleRow", "maxNumCols", "leqno", "stretch", "rowGaps", "hLinesBeforeRow", "tags", "beginRow", "__name", "endRow", "Token", "dCellStyle", "envName", "sizingGroup", "value", "baseOptions", "multiplier", "pos", "SourceLocation", "contains", "deflt", "uppercase", "hyphenate", "getBaseElem", "isCharacterBox", "assert", "protocolFromUrl", "Settings", "Style", "D", "Dc", "T", "Tc", "S", "Sc", "SS", "SSc", "styles", "sup", "sub", "fracNum", "fracDen", "cramp", "text$1", "Style$1", "hLinePad", "sqrtMain", "sqrtSize1", "sqrtSize2", "sqrtSize3", "sqrtSize4", "phasePath", "sqrtTall", "sqrtPath", "innerPath", "path", "tallDelim", "sizeStyleMap", "sizeMultipliers", "sizeAtStyle", "Options", "ptPerUnit", "relativeUnit", "validUnit", "calculateSize", "createClass", "initNode", "toNode", "invalidAttributeNameRegex", "toMarkup", "Anchor", "Img", "iCombinations", "SvgNode", "PathNode", "LineNode", "ATOMS", "main", "ams", "accent", "bin", "close", "mathord", "op", "open", "punct", "rel", "spacing", "textord", "ligatures", "mathTextSymbols", "textSymbols", "_ch", "letters", "_ch2", "_i2", "wideChar", "_ch3", "_i3", "_ch4", "_i4", "extraLatin", "_ch5", "_i5", "wideLatinLetterData", "wideNumeralData", "wideCharacterFont", "lookupSymbol", "makeSymbol", "mathsym", "boldsymbol", "makeOrd", "canCombine", "tryCombineChars", "sizeElementFromChildren", "makeSpan$2", "makeSvgSpan", "makeLineSpan", "makeAnchor", "makeFragment", "wrapFragment", "getVListChildrenAndDepth", "makeVList", "makeGlue", "retrieveTextFontName", "fontMap", "svgData", "staticSvg", "thinspace", "mediumspace", "thickspace", "spacings", "tightSpacings", "normalizeArgument", "ordargument", "binLeftCanceller", "binRightCanceller", "styleMap$1", "DomEnum", "traverseNonSpaceNodes", "checkPartialGroup", "getOutermostNode", "getTypeOfDomTree", "makeNullDelimiter", "buildGroup$1", "SpaceNode", "makeText", "makeRow", "getVariant", "buildExpressionRow", "buildGroup", "optionsFromSettings", "displayWrap", "buildTree", "buildHTMLTree", "stretchyCodePoint", "mathMLnode", "katexImagesData", "groupLength", "svgSpan", "encloseSpan", "stretchy", "htmlBuilder$a", "mathmlBuilder$9", "NON_STRETCHY_ACCENT_REGEX", "paddedNode", "binrelClass", "htmlBuilder$8", "mathmlBuilder$7", "globalMap", "checkControlSequence", "getRHS", "letCommand", "getMetrics", "styleWrap", "centerSpan", "makeSmallDelim", "mathrmSize", "makeLargeDelim", "makeGlyphSpan", "makeInner", "lapInEms", "lap", "verts", "doubleVerts", "makeStackedDelim", "vbPad", "emPad", "sqrtSvg", "makeSqrtImage", "stackLargeDelimiters", "stackAlwaysDelimiters", "stackNeverDelimiters", "sizeToMaxHeight", "makeSizedDelim", "stackNeverDelimiterSequence", "stackAlwaysDelimiterSequence", "stackLargeDelimiterSequence", "delimTypeToFont", "traverseSequence", "makeCustomSizedDelim", "makeLeftRightDelim", "delimiter", "delimiterSizes", "htmlBuilder$7", "mathmlBuilder$6", "validateAmsEnvironmentContext", "htmlBuilder$6", "alignMap", "mathmlBuilder$5", "alignedHandler", "environments", "htmlBuilder$5", "mathmlBuilder$4", "fontAliases", "adjustStyle", "htmlBuilder$4", "mathmlBuilder$3", "stylArray", "delimFromValue", "htmlBuilder$3", "mathmlBuilder$2", "sizeData", "chooseMathStyle", "assembleSupSub", "noSuccessor", "htmlBuilder$2", "mathmlBuilder$1", "singleCharBigOps", "singleCharIntegrals", "htmlBuilder$1", "sizeFuncs", "styleMap", "htmlBuilderDelegate", "defaultVariant", "cssSpace", "regularSpace", "pad", "textFontFamilies", "textFontWeights", "textFontShapes", "optionsWithFont", "makeVerb", "functions", "spaceRegexString", "controlWordRegexString", "controlSymbolRegexString", "controlWordWhitespaceRegexString", "controlSpaceRegexString", "combiningDiacriticalMarkString", "combiningDiacriticalMarksEndRegex", "tokenRegexString", "Lexer", "Namespace", "macros", "digitToNumber", "newcommand", "dotsByToken", "spaceAfterDots", "latexRaiseA", "braketHelper", "implicitCommands", "MacroExpander", "unicodeSubRegEx", "uSubsAndSups", "unicodeAccents", "unicodeSymbols", "Parser", "parseTree", "renderError", "init_katex", "__esmMin", "_SourceLocation", "lexer", "start", "end", "first", "second", "_Token", "loc", "endToken", "_ParseError", "message", "token", "error", "input", "underlined", "left", "right", "self", "list", "elem", "setting", "defaultIfUndefined", "str", "baseElem", "url", "protocol", "color", "def", "defs", "s", "n", "prop", "errorCode", "errorMsg", "strict", "trust", "id", "cramped", "b", "extraVinculum", "y", "x", "viewBoxHeight", "vertSegment", "height", "label", "midHeight", "className", "frag", "markup", "toText", "_Options", "extension", "wantSize", "fontFamily", "fontWeight", "fontShape", "oldOptions", "unit", "sizeValue", "scale", "unitOptions", "classes", "cls", "tagName", "attr", "attribute", "href", "src", "alt", "depth", "italic", "skew", "width", "span", "needsSpan", "escaped", "attributes", "svgNS", "pathName", "alternate", "H", "L", "codePoint", "lookup", "symbolNode", "isFont", "fontOrFamily", "wideFontName", "wideFontClass", "fontClasses", "fontData", "_fontName", "_fontName2", "_fontName3", "prev", "_style", "chars", "maxFontSize", "thickness", "line", "anchor", "fragment", "params", "oldChildren", "_depth", "currPos", "diff", "bottom", "firstChild", "pstrutSize", "pstrut", "realChildren", "minPos", "maxPos", "_elem", "childWrap", "vlist", "rows", "emptySpan", "depthStrut", "topStrut", "vtable", "measurement", "rule", "baseFontName", "fontStylesName", "svgNode", "arg", "isRealGroup", "surrounding", "groups", "output", "glueOptions", "dummyPrev", "dummyNext", "isRoot", "prevType", "space", "nodes", "callback", "partialGroup", "nonspace", "result", "index", "side", "moreClasses", "groupNode", "isOrdgroup", "lastGroup", "_group", "base", "lastChild", "settings", "katexNode", "mathMLNode", "_htmlNode", "buildSvgSpan_", "viewBoxWidth", "grp", "numChars", "_height", "imgIndex", "spans", "paths", "_minWidth", "_viewBoxHeight", "_height2", "numSvgChildren", "widthClasses", "aligns", "align1", "_path", "_svgNode", "_span", "minWidth", "topPad", "bottomPad", "img", "totalHeight", "lines", "supSubGroup", "mustShift", "baseChar", "baseGroup", "accentBelow", "clearance", "accentBody", "accentFull", "accentWrap", "accentNode", "args", "isStretchy", "isShifty", "innerGroup", "kern", "optArgs", "newOptions", "upperGroup", "arrowPrefix", "lowerGroup", "arrowBody", "arrowShift", "upperShift", "lowerShift", "arrowNode", "upperNode", "lowerNode", "_lowerNode", "atom", "_ref3", "baseArg", "shiftedArg", "mclass", "baseOp", "supsub", "endChar", "parent", "number", "code", "breakOnTokenText", "newLine", "tok", "global", "macro", "numArgs", "insert", "tokens", "_ref4", "middle", "symbol", "toStyle", "delimSizeMultiplier", "shift", "center", "sizeClass", "corner", "heightTotal", "top", "repeat", "svgLabel", "topMetrics", "topHeightTotal", "repeatMetrics", "repeatHeightTotal", "bottomMetrics", "bottomHeightTotal", "middleHeightTotal", "middleFactor", "middleMetrics", "minHeight", "repeatCount", "realHeightTotal", "axisHeight", "stack", "pathStr", "svg", "innerHeight", "_innerHeight", "sqrtName", "pathNode", "sizeMultiplier", "spanHeight", "texHeight", "advanceWidth", "sequence", "heightDepth", "delimType", "delimiterFactor", "delimiterExtend", "maxDistFromAxis", "innerDepth", "hadMiddle", "leftDelim", "middleDelim", "isMiddle", "rightDelim", "colorOptions", "leftNode", "rightNode", "textNode", "middleNode", "imgShift", "isSingleChar", "lineWeight", "angleHeight", "ruleThickness", "fboxsep", "thk", "borderColor", "backgroundColor", "_ref5", "r", "c", "nr", "nc", "hlines", "pt", "arraycolsep", "localMultiplier", "baselineskip", "jot", "arrayskip", "arstrutHeight", "arstrutDepth", "setHLinePos", "hlinesInGap", "inrow", "outrow", "elt", "rowGap", "gap", "offset", "colDescriptions", "colSep", "colDescrNum", "tagSpans", "rw", "tagSpan", "colDescr", "firstSeparator", "lineType", "separator", "_shift", "sepwidth", "col", "_shift2", "dashes", "vListElems", "hline", "lineShift", "eqnNumCol", "tbl", "glue", "table", "menclose", "align", "columnLines", "prevTypeWasAlign", "iStart", "iEnd", "_cols", "rowLines", "separationType", "isSplit", "res", "numMaths", "numCols", "emptyGroup", "arg0", "isAligned", "styling", "ordgroup", "curMaths", "pregap", "symNode", "colalign", "nde", "ca", "colAlign", "payload", "nameGroup", "env", "_args", "endNameToken", "func", "originalStyle", "nstyle", "dstyle", "numerm", "hStrut", "dStrut", "denomm", "ruleWidth", "ruleSpacing", "numShift", "denomShift", "frac", "midShift", "candidateClearance", "delimSize", "isDisplay", "withDelims", "leftOp", "rightOp", "numer", "denom", "hasBarLine", "replaceWith", "delimString", "barNode", "barSize", "styl", "textOrd", "_ref6", "braceBody", "vSpan", "trustContext", "keyVal", "totalheight", "attributeStr", "mathFunction", "muUnit", "dimension", "fix", "outerMode", "supGroup", "subGroup", "slant", "baseShift", "subIsSingleCharacter", "finalGroup", "_bottom", "spacer", "hasLimits", "large", "stash", "oval", "operator", "fName", "childText", "isAllString", "word", "identifier", "defaultRuleThickness", "phantom", "amount", "dy", "smashHeight", "smashDepth", "tbArg", "letter", "smashedNode", "theta", "phi", "lineClearance", "minDelimiterHeight", "delimDepth", "rootm", "toShift", "rootVList", "rootVListWrap", "newStyle", "styleAttributes", "delegate", "_delegate", "isSup", "builderDelegate", "valueBase", "valueSup", "valueSub", "supm", "subm", "supShift", "subShift", "_newOptions", "minSupShift", "marginRight", "marginLeft", "isOiint", "maxWidth", "psi", "vlistElem", "_vlistElem", "isBrace", "isOver", "nodeType", "_base2", "_base", "variant", "ord", "padNode", "char", "nlIndex", "builtins", "globalMacros", "undefs", "undef", "t", "nextToken", "digit", "existsOK", "nonexistsOK", "skipIfExists", "exists", "argText", "thedots", "one", "middleDouble", "oldMiddle", "oldMiddleDouble", "midMacro", "double", "doubled", "expanded", "newMode", "isOptional", "delims", "isDelimited", "expandableOnly", "topToken", "expansion", "oldStackLength", "definition", "catcode", "stripped", "bodyLexer", "_Parser", "consume", "parse", "oldToken", "breakOnInfix", "lex", "overIndex", "numerNode", "denomNode", "numerBody", "denomBody", "symbolToken", "textordArray", "colorNode", "superscript", "subscript", "limits", "prime", "primes", "isSub", "subsupTokens", "funcData", "totalArgs", "argType", "optional", "_group2", "modeName", "argToken", "regex", "firstToken", "lastToken", "isBlank", "groupEnd", "a", "v", "nucleus", "star", "family", "command", "toParse", "baseNode", "setupDompurifyHooks", "TEMPORARY_ATTRIBUTE", "purify", "node", "lineBreakRegex", "getRows", "setupDompurifyHooksIfNotSetup", "removeScript", "sanitizeMore", "sanitizeText", "sanitizeTextOrArray", "hasBreaks", "splitBreaks", "placeholderToBreak", "breakToPlaceholder", "getUrl", "evaluate", "getMax", "getMin", "parseGenericTypes", "countOccurrence", "shouldCombineSets", "processSet", "isMathMLSupported", "katexRegex", "hasKatex", "calculateMathMLDimensions", "renderKatexUnsanitized", "renderKatexSanitized", "common_default", "init_common", "__esmMin", "init_purify_es", "__name", "s", "setup", "txt", "text", "config", "level", "a", "x", "useAbsolute", "url", "val", "values", "newValues", "value", "input", "inputSets", "output", "i", "thisSet", "previousSet", "nextSet", "string", "substring", "prevCount", "nextCount", "tildeCount", "hasStartingTilde", "chars", "first", "last", "divElem", "dim", "katex", "outputMode", "line", "_", "c", "unknownIcon", "iconsStore", "loaderStore", "registerIconPacks", "getRegisteredIconData", "isIconAvailable", "getIconSVG", "init_icons", "__esmMin", "init_lib", "init_config", "init_common", "init_logger", "__name", "iconLoaders", "iconLoader", "log", "iconName", "fallbackPrefix", "data", "stringToIcon", "prefix", "icons", "loader", "e", "iconData", "getIconData", "customisations", "extraAttributes", "renderData", "iconToSVG", "svg", "iconToHTML", "replaceIDs", "sanitizeText", "getConfig", "dedent", "templ", "values", "_i", "strings", "indentLengths", "arr", "str", "matches", "match", "_a", "_b", "pattern_1", "string", "value", "i", "endentations", "endentation", "indentedValue", "init_esm", "__esmMin", "__name", "frontMatterRegex", "directiveRegex", "anyCommentRegex", "init_regexes", "__esmMin", "UnknownDiagramError", "init_errors", "__esmMin", "__name", "message", "detectors", "detectType", "registerLazyLoadedDiagrams", "addDetector", "getDiagramLoader", "init_detectType", "__esmMin", "init_logger", "init_regexes", "init_errors", "__name", "text", "config", "frontMatterRegex", "directiveRegex", "anyCommentRegex", "key", "detector", "UnknownDiagramError", "diagrams", "id", "loader", "log", "parser", "c4Diagram_default", "init_c4Diagram", "__esmMin", "o", "__name", "k", "v", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "$Vd", "$Ve", "$Vf", "$Vg", "$Vh", "$Vi", "$Vj", "$Vk", "$Vl", "$Vm", "$Vn", "$Vo", "$Vp", "$Vq", "$Vr", "$Vs", "$Vt", "$Vu", "$Vv", "$Vw", "$Vx", "$Vy", "$Vz", "$VA", "$VB", "$VC", "$VD", "$VE", "$VF", "$VG", "$VH", "$VI", "$VJ", "$VK", "$VL", "$VM", "$VN", "$VO", "$VP", "$VQ", "$VR", "$VS", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "kv", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "args", "lexer", "sharedState", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "YYSTATE", "Parser", "d3Attrs", "calculateSvgSizeAttrs", "configureSvgSize", "setupGraphViewbox", "init_setupGraphViewbox", "__esmMin", "init_logger", "__name", "d3Elem", "attrs", "attr", "height", "width", "useMaxWidth", "svgElem", "graph", "padding", "svgBounds", "sWidth", "sHeight", "log", "vBox", "themes", "getStyles", "addStylesForDiagram", "styles_default", "init_styles", "__esmMin", "init_logger", "__name", "type", "userStyles", "options", "diagramStyles", "log", "diagramTheme", "commonDb_exports", "__export", "clear", "getAccDescription", "getAccTitle", "getDiagramTitle", "setAccDescription", "setAccTitle", "setDiagramTitle", "accTitle", "diagramTitle", "accDescription", "sanitizeText", "init_commonDb", "__esmMin", "init_common", "init_config", "__name", "txt", "getConfig", "log", "setLogLevel", "getConfig", "setConfig", "defaultConfig", "sanitizeText", "setupGraphViewbox", "getCommonDb", "diagrams", "registerDiagram", "getDiagram", "DiagramNotFoundError", "init_diagramAPI", "__esmMin", "init_detectType", "init_logger", "init_config", "init_common", "init_setupGraphViewbox", "init_styles", "init_commonDb", "__name", "text", "commonDb_exports", "id", "diagram", "detector", "addDetector", "addStylesForDiagram", "name", "c4ShapeArray", "boundaryParseStack", "currentBoundaryParse", "parentBoundaryParse", "boundaries", "rels", "title", "wrapEnabled", "c4ShapeInRow", "c4BoundaryInRow", "c4Type", "getC4Type", "setC4Type", "addRel", "addPersonOrSystem", "addContainer", "addComponent", "addPersonOrSystemBoundary", "addContainerBoundary", "addDeploymentNode", "popBoundaryParseStack", "updateElStyle", "updateRelStyle", "updateLayoutConfig", "getC4ShapeInRow", "getC4BoundaryInRow", "getCurrentBoundaryParse", "getParentBoundaryParse", "getC4ShapeArray", "getC4Shape", "getC4ShapeKeys", "getBoundaries", "getBoundarys", "getRels", "getTitle", "setWrap", "autoWrap", "clear", "LINETYPE", "ARROWTYPE", "PLACEMENT", "setTitle", "c4Db_default", "init_c4Db", "__esmMin", "init_diagramAPI", "init_common", "init_commonDb", "__name", "c4TypeParam", "sanitizeText", "getConfig", "type", "from", "to", "label", "techn", "descr", "sprite", "tags", "link", "rel", "old", "key", "value", "typeC4Shape", "alias", "personOrSystem", "container", "component", "boundary", "nodeType", "elementName", "bgColor", "fontColor", "borderColor", "shadowing", "shape", "legendText", "legendSprite", "element", "textColor", "lineColor", "offsetX", "offsetY", "c4ShapeInRowParam", "c4BoundaryInRowParam", "c4ShapeInRowValue", "c4BoundaryInRowValue", "parentBoundary", "wrapSetting", "txt", "setAccTitle", "getAccTitle", "getAccDescription", "setAccDescription", "ascending", "a", "b", "init_ascending", "__esmMin", "__name", "descending", "a", "b", "init_descending", "__esmMin", "__name", "bisector", "f", "compare1", "compare2", "delta", "ascending", "__name", "d", "x", "descending", "zero", "left", "a", "lo", "hi", "mid", "right", "center", "i", "init_bisector", "__esmMin", "init_ascending", "init_descending", "number", "x", "init_number", "__esmMin", "__name", "ascendingBisect", "bisectRight", "bisectLeft", "bisectCenter", "bisect_default", "init_bisect", "__esmMin", "init_ascending", "init_bisector", "init_number", "bisector", "ascending", "number", "intern_get", "_intern", "_key", "value", "key", "intern_set", "intern_delete", "keyof", "InternMap", "init_src", "__esmMin", "__name", "entries", "tickSpec", "start", "stop", "count", "step", "power", "error", "factor", "e10", "e5", "e2", "i1", "i2", "inc", "ticks", "reverse", "n", "i", "tickIncrement", "tickStep", "init_ticks", "__esmMin", "__name", "max", "values", "valueof", "value", "index", "init_max", "__esmMin", "__name", "min", "values", "valueof", "value", "index", "init_min", "__esmMin", "__name", "range", "start", "stop", "step", "n", "i", "init_range", "__esmMin", "__name", "init_src", "__esmMin", "init_bisect", "init_bisector", "init_max", "init_min", "init_range", "init_ticks", "identity_default", "x", "init_identity", "__esmMin", "__name", "translateX", "x", "translateY", "y", "number", "scale", "d", "center", "offset", "entering", "axis", "orient", "tickArguments", "tickValues", "tickFormat", "tickSizeInner", "tickSizeOuter", "tickPadding", "k", "top", "left", "right", "transform", "bottom", "context", "values", "format", "identity_default", "spacing", "range", "range0", "range1", "position", "selection", "path", "tick", "tickExit", "tickEnter", "line", "text", "epsilon", "p", "__name", "_", "axisTop", "axisBottom", "init_axis", "__esmMin", "init_identity", "init_src", "__esmMin", "init_axis", "dispatch", "i", "n", "_", "t", "Dispatch", "parseTypenames", "typenames", "types", "name", "get", "type", "c", "set", "callback", "noop", "dispatch_default", "init_dispatch", "__esmMin", "__name", "typename", "T", "copy", "that", "args", "init_src", "__esmMin", "init_dispatch", "xhtml", "namespaces_default", "init_namespaces", "__esmMin", "namespace_default", "name", "prefix", "i", "namespaces_default", "init_namespace", "__esmMin", "init_namespaces", "__name", "creatorInherit", "name", "document", "uri", "xhtml", "creatorFixed", "fullname", "creator_default", "namespace_default", "init_creator", "__esmMin", "init_namespace", "init_namespaces", "__name", "none", "selector_default", "selector", "init_selector", "__esmMin", "__name", "select_default", "select", "selector_default", "groups", "m", "subgroups", "j", "group", "n", "subgroup", "node", "subnode", "i", "Selection", "init_select", "__esmMin", "init_selection", "init_selector", "__name", "array", "x", "init_array", "__esmMin", "__name", "empty", "selectorAll_default", "selector", "init_selectorAll", "__esmMin", "__name", "arrayAll", "select", "array", "selectAll_default", "selectorAll_default", "groups", "m", "subgroups", "parents", "j", "group", "n", "node", "i", "Selection", "init_selectAll", "__esmMin", "init_selection", "init_array", "init_selectorAll", "__name", "matcher_default", "selector", "childMatcher", "node", "init_matcher", "__esmMin", "__name", "childFind", "match", "find", "childFirst", "selectChild_default", "childMatcher", "init_selectChild", "__esmMin", "init_matcher", "__name", "children", "childrenFilter", "match", "filter", "selectChildren_default", "childMatcher", "init_selectChildren", "__esmMin", "init_matcher", "__name", "filter_default", "match", "matcher_default", "groups", "m", "subgroups", "j", "group", "n", "subgroup", "node", "i", "Selection", "init_filter", "__esmMin", "init_selection", "init_matcher", "__name", "sparse_default", "update", "init_sparse", "__esmMin", "__name", "enter_default", "Selection", "sparse_default", "EnterNode", "parent", "datum", "init_enter", "__esmMin", "init_sparse", "init_selection", "__name", "child", "next", "selector", "constant_default", "x", "init_constant", "__esmMin", "__name", "bindIndex", "parent", "group", "enter", "update", "exit", "data", "i", "node", "groupLength", "dataLength", "EnterNode", "bindKey", "key", "nodeByKeyValue", "keyValues", "keyValue", "datum", "data_default", "value", "bind", "parents", "groups", "constant_default", "m", "j", "arraylike", "enterGroup", "updateGroup", "exitGroup", "i0", "i1", "previous", "next", "Selection", "init_data", "__esmMin", "init_selection", "init_enter", "init_constant", "__name", "exit_default", "Selection", "sparse_default", "init_exit", "__esmMin", "init_sparse", "init_selection", "__name", "join_default", "onenter", "onupdate", "onexit", "enter", "update", "exit", "init_join", "__esmMin", "__name", "merge_default", "context", "selection", "groups0", "groups1", "m0", "m1", "m", "merges", "j", "group0", "group1", "n", "merge", "node", "i", "Selection", "init_merge", "__esmMin", "init_selection", "__name", "order_default", "groups", "j", "m", "group", "next", "node", "init_order", "__esmMin", "__name", "sort_default", "compare", "ascending", "compareNode", "a", "b", "__name", "groups", "m", "sortgroups", "j", "group", "n", "sortgroup", "node", "i", "Selection", "init_sort", "__esmMin", "init_selection", "call_default", "callback", "init_call", "__esmMin", "__name", "nodes_default", "init_nodes", "__esmMin", "__name", "node_default", "groups", "j", "m", "group", "n", "node", "init_node", "__esmMin", "__name", "size_default", "size", "node", "init_size", "__esmMin", "__name", "empty_default", "init_empty", "__esmMin", "__name", "each_default", "callback", "groups", "j", "m", "group", "i", "n", "node", "init_each", "__esmMin", "__name", "attrRemove", "name", "attrRemoveNS", "fullname", "attrConstant", "value", "attrConstantNS", "attrFunction", "v", "attrFunctionNS", "attr_default", "namespace_default", "node", "init_attr", "__esmMin", "init_namespace", "__name", "window_default", "node", "init_window", "__esmMin", "__name", "styleRemove", "name", "styleConstant", "value", "priority", "styleFunction", "v", "style_default", "styleValue", "node", "window_default", "init_style", "__esmMin", "init_window", "__name", "propertyRemove", "name", "propertyConstant", "value", "propertyFunction", "v", "property_default", "init_property", "__esmMin", "__name", "classArray", "string", "classList", "node", "ClassList", "classedAdd", "names", "list", "i", "n", "classedRemove", "classedTrue", "classedFalse", "classedFunction", "value", "classed_default", "name", "init_classed", "__esmMin", "__name", "textRemove", "textConstant", "value", "textFunction", "v", "text_default", "init_text", "__esmMin", "__name", "htmlRemove", "htmlConstant", "value", "htmlFunction", "v", "html_default", "init_html", "__esmMin", "__name", "raise", "raise_default", "init_raise", "__esmMin", "__name", "lower", "lower_default", "init_lower", "__esmMin", "__name", "append_default", "name", "create", "creator_default", "init_append", "__esmMin", "init_creator", "__name", "constantNull", "insert_default", "name", "before", "create", "creator_default", "select", "selector_default", "init_insert", "__esmMin", "init_creator", "init_selector", "__name", "remove", "parent", "remove_default", "init_remove", "__esmMin", "__name", "selection_cloneShallow", "clone", "parent", "selection_cloneDeep", "clone_default", "deep", "init_clone", "__esmMin", "__name", "datum_default", "value", "init_datum", "__esmMin", "__name", "contextListener", "listener", "event", "parseTypenames", "typenames", "t", "name", "i", "onRemove", "typename", "on", "j", "m", "o", "onAdd", "value", "options", "on_default", "n", "init_on", "__esmMin", "__name", "dispatchEvent", "node", "type", "params", "window", "window_default", "event", "dispatchConstant", "dispatchFunction", "dispatch_default", "init_dispatch", "__esmMin", "init_window", "__name", "iterator_default", "groups", "j", "m", "group", "n", "node", "init_iterator", "__esmMin", "__name", "Selection", "groups", "parents", "selection", "root", "selection_selection", "selection_default", "init_selection", "__esmMin", "init_select", "init_selectAll", "init_selectChild", "init_selectChildren", "init_filter", "init_data", "init_enter", "init_exit", "init_join", "init_merge", "init_order", "init_sort", "init_call", "init_nodes", "init_node", "init_size", "init_empty", "init_each", "init_attr", "init_style", "init_property", "init_classed", "init_text", "init_html", "init_raise", "init_lower", "init_append", "init_insert", "init_remove", "init_clone", "init_datum", "init_on", "init_dispatch", "init_iterator", "__name", "select_default", "selectAll_default", "selectChild_default", "selectChildren_default", "filter_default", "data_default", "enter_default", "exit_default", "join_default", "merge_default", "order_default", "sort_default", "call_default", "nodes_default", "node_default", "size_default", "empty_default", "each_default", "attr_default", "style_default", "property_default", "classed_default", "text_default", "html_default", "raise_default", "lower_default", "append_default", "insert_default", "remove_default", "clone_default", "datum_default", "on_default", "dispatch_default", "iterator_default", "select_default", "selector", "Selection", "root", "init_select", "__esmMin", "init_selection", "__name", "init_src", "__esmMin", "init_matcher", "init_namespace", "init_select", "init_selection", "init_selector", "init_selectorAll", "init_style", "init_src", "__esmMin", "define_default", "constructor", "factory", "prototype", "extend", "parent", "definition", "key", "init_define", "__esmMin", "__name", "Color", "color_formatHex", "color_formatHex8", "color_formatHsl", "hslConvert", "color_formatRgb", "color", "format", "m", "l", "reHex", "rgbn", "Rgb", "rgba", "reRgbInteger", "reRgbPercent", "reRgbaInteger", "reRgbaPercent", "reHslPercent", "hsla", "reHslaPercent", "named", "n", "r", "g", "b", "a", "rgbConvert", "o", "rgb", "opacity", "rgb_formatHex", "hex", "rgb_formatHex8", "rgb_formatRgb", "clampa", "clampi", "value", "h", "s", "Hsl", "min", "max", "hsl", "clamph", "clampt", "hsl2rgb", "m1", "m2", "darker", "brighter", "reI", "reN", "reP", "init_color", "__esmMin", "init_define", "__name", "define_default", "channels", "extend", "k", "radians", "degrees", "init_math", "__esmMin", "labConvert", "o", "Lab", "Hcl", "hcl2lab", "Rgb", "rgbConvert", "r", "rgb2lrgb", "g", "b", "y", "xyz2lab", "Yn", "x", "z", "Xn", "Zn", "lab", "l", "a", "opacity", "t3", "t2", "t0", "lab2xyz", "t1", "lrgb2rgb", "hclConvert", "h", "degrees", "hcl", "c", "radians", "K", "init_lab", "__esmMin", "init_define", "init_color", "init_math", "__name", "define_default", "extend", "Color", "k", "init_src", "__esmMin", "init_color", "init_lab", "basis", "t1", "v0", "v1", "v2", "v3", "t2", "t3", "basis_default", "values", "n", "t", "i", "init_basis", "__esmMin", "__name", "basisClosed_default", "values", "n", "t", "i", "v0", "v1", "v2", "v3", "basis", "init_basisClosed", "__esmMin", "init_basis", "__name", "constant_default", "init_constant", "__esmMin", "__name", "x", "linear", "a", "d", "t", "exponential", "b", "y", "hue", "constant_default", "gamma", "nogamma", "init_color", "__esmMin", "init_constant", "__name", "rgbSpline", "spline", "colors", "n", "r", "g", "b", "i", "color", "rgb", "t", "rgb_default", "rgbBasis", "rgbBasisClosed", "init_rgb", "__esmMin", "init_src", "init_basis", "init_basisClosed", "init_color", "__name", "rgbGamma", "y", "gamma", "start", "end", "opacity", "nogamma", "basis_default", "basisClosed_default", "numberArray_default", "a", "b", "n", "c", "t", "isNumberArray", "x", "init_numberArray", "__esmMin", "__name", "genericArray", "a", "b", "nb", "na", "x", "c", "i", "value_default", "t", "init_array", "__esmMin", "init_value", "__name", "date_default", "a", "b", "d", "t", "init_date", "__esmMin", "__name", "number_default", "a", "b", "t", "init_number", "__esmMin", "__name", "object_default", "a", "b", "i", "c", "k", "value_default", "t", "init_object", "__esmMin", "init_value", "__name", "zero", "b", "one", "t", "string_default", "a", "bi", "reA", "reB", "am", "bm", "bs", "i", "s", "q", "number_default", "o", "init_string", "__esmMin", "init_number", "__name", "value_default", "a", "b", "t", "c", "constant_default", "number_default", "color", "rgb_default", "string_default", "date_default", "isNumberArray", "numberArray_default", "genericArray", "object_default", "init_value", "__esmMin", "init_src", "init_rgb", "init_array", "init_date", "init_number", "init_object", "init_string", "init_constant", "init_numberArray", "__name", "round_default", "a", "b", "t", "init_round", "__esmMin", "__name", "decompose_default", "a", "b", "c", "d", "e", "f", "scaleX", "scaleY", "skewX", "degrees", "identity", "init_decompose", "__esmMin", "__name", "parseCss", "value", "m", "identity", "decompose_default", "parseSvg", "svgNode", "init_parse", "__esmMin", "init_decompose", "__name", "interpolateTransform", "parse", "pxComma", "pxParen", "degParen", "pop", "s", "__name", "translate", "xa", "ya", "xb", "yb", "q", "i", "number_default", "rotate", "a", "b", "skewX", "scale", "t", "n", "o", "interpolateTransformCss", "interpolateTransformSvg", "init_transform", "__esmMin", "init_number", "init_parse", "parseCss", "parseSvg", "hcl", "hue", "start", "end", "h", "c", "nogamma", "l", "opacity", "t", "hcl_default", "hclLong", "init_hcl", "__esmMin", "init_src", "init_color", "__name", "init_src", "__esmMin", "init_value", "init_number", "init_round", "init_string", "init_transform", "init_rgb", "init_hcl", "now", "clockNow", "setFrame", "clearNow", "clock", "clockSkew", "Timer", "timer", "callback", "delay", "time", "t", "timerFlush", "frame", "taskHead", "wake", "clockLast", "timeout", "nap", "poke", "pokeDelay", "t0", "t1", "t2", "taskTail", "sleep", "interval", "init_timer", "__esmMin", "f", "__name", "timeout_default", "callback", "delay", "time", "t", "Timer", "elapsed", "init_timeout", "__esmMin", "init_timer", "__name", "init_src", "__esmMin", "init_timer", "init_timeout", "schedule_default", "node", "name", "id", "index", "group", "timing", "schedules", "create", "emptyOn", "emptyTween", "CREATED", "init", "schedule", "get", "set", "STARTED", "self", "tween", "timer", "elapsed", "SCHEDULED", "start", "__name", "i", "j", "n", "o", "stop", "timeout_default", "RUNNING", "ENDED", "tick", "STARTING", "t", "ENDING", "init_schedule", "__esmMin", "init_src", "dispatch_default", "interrupt_default", "node", "name", "schedules", "schedule", "active", "empty", "i", "STARTING", "ENDING", "ENDED", "init_interrupt", "__esmMin", "init_schedule", "__name", "interrupt_default", "name", "init_interrupt", "__esmMin", "__name", "tweenRemove", "id", "name", "tween0", "tween1", "schedule", "set", "tween", "i", "n", "tweenFunction", "value", "t", "tween_default", "get", "tweenValue", "transition", "node", "init_tween", "__esmMin", "init_schedule", "__name", "interpolate_default", "a", "b", "c", "number_default", "color", "rgb_default", "string_default", "init_interpolate", "__esmMin", "init_src", "__name", "attrRemove", "name", "attrRemoveNS", "fullname", "attrConstant", "interpolate", "value1", "string00", "string1", "interpolate0", "string0", "attrConstantNS", "attrFunction", "value", "string10", "attrFunctionNS", "attr_default", "namespace_default", "i", "interpolateTransformSvg", "interpolate_default", "tweenValue", "init_attr", "__esmMin", "init_src", "init_tween", "init_interpolate", "__name", "attrInterpolate", "name", "i", "t", "attrInterpolateNS", "fullname", "attrTweenNS", "value", "t0", "i0", "tween", "__name", "attrTween", "attrTween_default", "key", "namespace_default", "init_attrTween", "__esmMin", "init_src", "delayFunction", "id", "value", "init", "delayConstant", "delay_default", "get", "init_delay", "__esmMin", "init_schedule", "__name", "durationFunction", "id", "value", "set", "durationConstant", "duration_default", "get", "init_duration", "__esmMin", "init_schedule", "__name", "easeConstant", "id", "value", "set", "ease_default", "get", "init_ease", "__esmMin", "init_schedule", "__name", "easeVarying", "id", "value", "v", "set", "easeVarying_default", "init_easeVarying", "__esmMin", "init_schedule", "__name", "filter_default", "match", "matcher_default", "groups", "m", "subgroups", "j", "group", "n", "subgroup", "node", "i", "Transition", "init_filter", "__esmMin", "init_src", "init_transition", "__name", "merge_default", "transition", "groups0", "groups1", "m0", "m1", "m", "merges", "j", "group0", "group1", "n", "merge", "node", "i", "Transition", "init_merge", "__esmMin", "init_transition", "__name", "start", "name", "t", "i", "onFunction", "id", "listener", "on0", "on1", "sit", "init", "set", "schedule", "on", "on_default", "get", "init_on", "__esmMin", "init_schedule", "__name", "removeFunction", "id", "parent", "i", "remove_default", "init_remove", "__esmMin", "__name", "select_default", "select", "name", "id", "selector_default", "groups", "m", "subgroups", "j", "group", "n", "subgroup", "node", "subnode", "i", "schedule_default", "get", "Transition", "init_select", "__esmMin", "init_src", "init_transition", "init_schedule", "__name", "selectAll_default", "select", "name", "id", "selectorAll_default", "groups", "m", "subgroups", "parents", "j", "group", "n", "node", "i", "children", "child", "inherit", "get", "k", "l", "schedule_default", "Transition", "init_selectAll", "__esmMin", "init_src", "init_transition", "init_schedule", "__name", "selection_default", "Selection", "init_selection", "__esmMin", "init_src", "__name", "styleNull", "name", "interpolate", "string00", "string10", "interpolate0", "string0", "styleValue", "string1", "styleRemove", "styleConstant", "value1", "styleFunction", "value", "styleMaybeRemove", "id", "on0", "on1", "listener0", "key", "event", "remove", "schedule", "set", "on", "listener", "style_default", "priority", "i", "interpolateTransformCss", "interpolate_default", "tweenValue", "init_style", "__esmMin", "init_src", "init_schedule", "init_tween", "init_interpolate", "__name", "styleInterpolate", "name", "i", "priority", "t", "styleTween", "value", "i0", "tween", "__name", "styleTween_default", "key", "init_styleTween", "__esmMin", "textConstant", "value", "textFunction", "value1", "text_default", "tweenValue", "init_text", "__esmMin", "init_tween", "__name", "textInterpolate", "i", "t", "textTween", "value", "t0", "i0", "tween", "__name", "textTween_default", "key", "init_textTween", "__esmMin", "transition_default", "name", "id0", "id1", "newId", "groups", "m", "j", "group", "n", "node", "i", "inherit", "get", "schedule_default", "Transition", "init_transition", "__esmMin", "init_schedule", "__name", "end_default", "on0", "on1", "that", "id", "size", "resolve", "reject", "cancel", "end", "__name", "schedule", "set", "on", "init_end", "__esmMin", "init_schedule", "Transition", "groups", "parents", "name", "id", "transition", "selection_default", "newId", "selection_prototype", "init_transition", "__esmMin", "init_src", "init_attr", "init_attrTween", "init_delay", "init_duration", "init_ease", "init_easeVarying", "init_filter", "init_merge", "init_on", "init_remove", "init_select", "init_selectAll", "init_selection", "init_style", "init_styleTween", "init_text", "init_textTween", "init_tween", "init_end", "__name", "select_default", "selectAll_default", "filter_default", "merge_default", "transition_default", "on_default", "attr_default", "attrTween_default", "style_default", "styleTween_default", "text_default", "textTween_default", "remove_default", "tween_default", "delay_default", "duration_default", "ease_default", "easeVarying_default", "end_default", "cubicInOut", "init_cubic", "__esmMin", "__name", "init_src", "__esmMin", "init_cubic", "inherit", "node", "id", "timing", "transition_default", "name", "Transition", "newId", "defaultTiming", "now", "groups", "m", "j", "group", "n", "i", "schedule_default", "init_transition", "__esmMin", "init_schedule", "init_src", "cubicInOut", "__name", "init_selection", "__esmMin", "init_src", "init_interrupt", "init_transition", "selection_default", "interrupt_default", "transition_default", "init_src", "__esmMin", "init_selection", "init_constant", "__esmMin", "init_event", "__esmMin", "init_noevent", "__esmMin", "number1", "e", "number2", "type", "abs", "max", "min", "X", "Y", "XY", "init_brush", "__esmMin", "init_src", "init_constant", "init_event", "init_noevent", "__name", "x", "xy", "y", "init_src", "__esmMin", "init_brush", "append", "strings", "i", "n", "appendRound", "digits", "d", "k", "path", "Path", "pi", "tau", "epsilon", "tauEpsilon", "init_path", "__esmMin", "__name", "x", "y", "x1", "y1", "x2", "y2", "r", "x0", "y0", "x21", "y21", "x01", "y01", "l01_2", "x20", "y20", "l21_2", "l20_2", "l21", "l01", "l", "t01", "t21", "a0", "a1", "ccw", "dx", "dy", "cw", "da", "w", "h", "init_src", "__esmMin", "init_path", "init_src", "__esmMin", "init_src", "__esmMin", "init_src", "__esmMin", "init_src", "__esmMin", "init_src", "__esmMin", "init_src", "__esmMin", "init_src", "__esmMin", "formatDecimal_default", "x", "formatDecimalParts", "p", "i", "coefficient", "init_formatDecimal", "__esmMin", "__name", "exponent_default", "x", "formatDecimalParts", "init_exponent", "__esmMin", "init_formatDecimal", "__name", "formatGroup_default", "grouping", "thousands", "value", "width", "t", "j", "g", "length", "init_formatGroup", "__esmMin", "__name", "formatNumerals_default", "numerals", "value", "i", "init_formatNumerals", "__esmMin", "__name", "formatSpecifier", "specifier", "match", "re", "FormatSpecifier", "init_formatSpecifier", "__esmMin", "__name", "formatTrim_default", "s", "out", "n", "i", "i0", "i1", "init_formatTrim", "__esmMin", "__name", "formatPrefixAuto_default", "x", "p", "d", "formatDecimalParts", "coefficient", "exponent", "i", "prefixExponent", "n", "init_formatPrefixAuto", "__esmMin", "init_formatDecimal", "__name", "formatRounded_default", "x", "p", "d", "formatDecimalParts", "coefficient", "exponent", "init_formatRounded", "__esmMin", "init_formatDecimal", "__name", "formatTypes_default", "init_formatTypes", "__esmMin", "init_formatDecimal", "init_formatPrefixAuto", "init_formatRounded", "__name", "x", "p", "formatDecimal_default", "formatRounded_default", "formatPrefixAuto_default", "identity_default", "x", "init_identity", "__esmMin", "__name", "locale_default", "locale", "group", "identity_default", "formatGroup_default", "map", "currencyPrefix", "currencySuffix", "decimal", "numerals", "formatNumerals_default", "percent", "minus", "nan", "newFormat", "specifier", "formatSpecifier", "fill", "align", "sign", "symbol", "zero", "width", "comma", "precision", "trim", "type", "formatTypes_default", "prefix", "suffix", "formatType", "maybeSuffix", "format", "value", "valuePrefix", "valueSuffix", "i", "n", "c", "valueNegative", "formatTrim_default", "prefixes", "prefixExponent", "length", "padding", "__name", "formatPrefix", "f", "e", "exponent_default", "k", "init_locale", "__esmMin", "init_exponent", "init_formatGroup", "init_formatNumerals", "init_formatSpecifier", "init_formatTrim", "init_formatTypes", "init_formatPrefixAuto", "init_identity", "defaultLocale", "definition", "locale", "locale_default", "format", "formatPrefix", "init_defaultLocale", "__esmMin", "init_locale", "__name", "precisionFixed_default", "step", "exponent_default", "init_precisionFixed", "__esmMin", "init_exponent", "__name", "precisionPrefix_default", "step", "value", "exponent_default", "init_precisionPrefix", "__esmMin", "init_exponent", "__name", "precisionRound_default", "step", "max", "exponent_default", "init_precisionRound", "__esmMin", "init_exponent", "__name", "init_src", "__esmMin", "init_defaultLocale", "init_formatSpecifier", "init_precisionFixed", "init_precisionPrefix", "init_precisionRound", "init_src", "__esmMin", "count", "node", "sum", "children", "i", "count_default", "init_count", "__esmMin", "__name", "each_default", "callback", "that", "index", "node", "init_each", "__esmMin", "__name", "eachBefore_default", "callback", "that", "node", "nodes", "children", "i", "index", "init_eachBefore", "__esmMin", "__name", "eachAfter_default", "callback", "that", "node", "nodes", "next", "children", "i", "n", "index", "init_eachAfter", "__esmMin", "__name", "find_default", "callback", "that", "index", "node", "init_find", "__esmMin", "__name", "sum_default", "value", "node", "sum", "children", "init_sum", "__esmMin", "__name", "sort_default", "compare", "node", "init_sort", "__esmMin", "__name", "path_default", "end", "start", "ancestor", "leastCommonAncestor", "nodes", "k", "a", "b", "aNodes", "bNodes", "c", "init_path", "__esmMin", "__name", "ancestors_default", "node", "nodes", "init_ancestors", "__esmMin", "__name", "descendants_default", "init_descendants", "__esmMin", "__name", "leaves_default", "leaves", "node", "init_leaves", "__esmMin", "__name", "links_default", "root", "links", "node", "init_links", "__esmMin", "__name", "iterator_default", "node", "current", "next", "children", "n", "init_iterator", "__esmMin", "__name", "hierarchy", "data", "children", "mapChildren", "objectChildren", "root", "Node", "node", "nodes", "child", "childs", "i", "n", "computeHeight", "node_copy", "copyData", "d", "height", "init_hierarchy", "__esmMin", "init_count", "init_each", "init_eachBefore", "init_eachAfter", "init_find", "init_sum", "init_sort", "init_path", "init_ancestors", "init_descendants", "init_leaves", "init_links", "init_iterator", "__name", "count_default", "each_default", "eachAfter_default", "eachBefore_default", "find_default", "sum_default", "sort_default", "path_default", "ancestors_default", "descendants_default", "leaves_default", "links_default", "iterator_default", "required", "f", "init_accessors", "__esmMin", "__name", "constantZero", "constant_default", "x", "init_constant", "__esmMin", "__name", "round_default", "node", "init_round", "__esmMin", "__name", "dice_default", "parent", "x0", "y0", "x1", "y1", "nodes", "node", "i", "n", "k", "init_dice", "__esmMin", "__name", "slice_default", "parent", "x0", "y0", "x1", "y1", "nodes", "node", "i", "n", "k", "init_slice", "__esmMin", "__name", "squarifyRatio", "ratio", "parent", "x0", "y0", "x1", "y1", "rows", "nodes", "row", "nodeValue", "i0", "i1", "n", "dx", "dy", "value", "sumValue", "minValue", "maxValue", "newRatio", "minRatio", "alpha", "beta", "dice_default", "slice_default", "phi", "squarify_default", "init_squarify", "__esmMin", "init_dice", "init_slice", "__name", "custom", "squarify", "x", "treemap_default", "tile", "squarify_default", "round", "dx", "dy", "paddingStack", "paddingInner", "constantZero", "paddingTop", "paddingRight", "paddingBottom", "paddingLeft", "treemap", "root", "positionNode", "round_default", "__name", "node", "p", "x0", "y0", "x1", "y1", "x", "required", "constant_default", "init_treemap", "__esmMin", "init_round", "init_squarify", "init_accessors", "init_constant", "init_src", "__esmMin", "init_hierarchy", "init_treemap", "init_src", "__esmMin", "init_src", "__esmMin", "initRange", "domain", "range", "init_init", "__esmMin", "__name", "ordinal", "index", "InternMap", "domain", "range", "unknown", "implicit", "scale", "d", "i", "__name", "_", "value", "initRange", "init_ordinal", "__esmMin", "init_src", "init_init", "band", "scale", "ordinal", "domain", "ordinalRange", "r0", "r1", "step", "bandwidth", "round", "paddingInner", "paddingOuter", "align", "rescale", "n", "reverse", "start", "stop", "values", "range", "i", "__name", "_", "initRange", "init_band", "__esmMin", "init_src", "init_init", "init_ordinal", "constants", "x", "init_constant", "__esmMin", "__name", "number", "x", "init_number", "__esmMin", "__name", "identity", "x", "normalize", "a", "b", "constants", "clamper", "t", "bimap", "domain", "range", "interpolate", "d0", "d1", "r0", "r1", "polymap", "j", "d", "r", "i", "bisect_default", "copy", "source", "target", "transformer", "unit", "value_default", "transform", "untransform", "unknown", "clamp", "piecewise", "output", "input", "rescale", "n", "scale", "__name", "y", "number_default", "_", "number", "round_default", "u", "continuous", "init_continuous", "__esmMin", "init_src", "init_constant", "init_number", "tickFormat", "start", "stop", "count", "specifier", "step", "tickStep", "precision", "formatSpecifier", "value", "precisionPrefix_default", "formatPrefix", "precisionRound_default", "precisionFixed_default", "format", "init_tickFormat", "__esmMin", "init_src", "__name", "linearish", "scale", "domain", "count", "d", "ticks", "specifier", "tickFormat", "i0", "i1", "start", "stop", "prestep", "step", "maxIter", "tickIncrement", "linear", "continuous", "copy", "initRange", "init_linear", "__esmMin", "init_src", "init_continuous", "init_init", "init_tickFormat", "__name", "nice", "domain", "interval", "i0", "i1", "x0", "x1", "t", "init_nice", "__esmMin", "__name", "timeInterval", "floori", "offseti", "count", "field", "interval", "date", "__name", "d0", "d1", "step", "start", "stop", "range", "previous", "test", "end", "t0", "t1", "d", "init_interval", "__esmMin", "millisecond", "milliseconds", "init_millisecond", "__esmMin", "init_interval", "timeInterval", "date", "step", "start", "end", "k", "second", "seconds", "init_second", "__esmMin", "init_interval", "timeInterval", "date", "step", "start", "end", "timeMinute", "timeMinutes", "utcMinute", "utcMinutes", "init_minute", "__esmMin", "init_interval", "timeInterval", "date", "step", "start", "end", "timeHour", "timeHours", "utcHour", "utcHours", "init_hour", "__esmMin", "init_interval", "timeInterval", "date", "step", "start", "end", "timeDay", "timeDays", "utcDay", "utcDays", "unixDay", "unixDays", "init_day", "__esmMin", "init_interval", "timeInterval", "date", "step", "start", "end", "timeWeekday", "i", "timeInterval", "date", "step", "start", "end", "utcWeekday", "timeSunday", "timeMonday", "timeTuesday", "timeWednesday", "timeThursday", "timeFriday", "timeSaturday", "timeSundays", "timeMondays", "timeTuesdays", "timeWednesdays", "timeThursdays", "timeFridays", "timeSaturdays", "utcSunday", "utcMonday", "utcTuesday", "utcWednesday", "utcThursday", "utcFriday", "utcSaturday", "utcSundays", "utcMondays", "utcTuesdays", "utcWednesdays", "utcThursdays", "utcFridays", "utcSaturdays", "init_week", "__esmMin", "init_interval", "__name", "timeMonth", "timeMonths", "utcMonth", "utcMonths", "init_month", "__esmMin", "init_interval", "timeInterval", "date", "step", "start", "end", "timeYear", "timeYears", "utcYear", "utcYears", "init_year", "__esmMin", "init_interval", "timeInterval", "date", "step", "start", "end", "k", "ticker", "year", "month", "week", "day", "hour", "minute", "tickIntervals", "second", "ticks", "start", "stop", "count", "reverse", "interval", "tickInterval", "__name", "target", "i", "bisector", "step", "tickStep", "millisecond", "t", "utcTicks", "utcTickInterval", "timeTicks", "timeTickInterval", "init_ticks", "__esmMin", "init_src", "init_millisecond", "init_second", "init_minute", "init_hour", "init_day", "init_week", "init_month", "init_year", "utcYear", "utcMonth", "utcSunday", "unixDay", "utcHour", "utcMinute", "timeYear", "timeMonth", "timeSunday", "timeDay", "timeHour", "timeMinute", "init_src", "__esmMin", "init_millisecond", "init_second", "init_minute", "init_hour", "init_day", "init_week", "init_month", "init_year", "init_ticks", "localDate", "d", "date", "utcDate", "newDate", "y", "m", "formatLocale", "locale", "locale_dateTime", "locale_date", "locale_time", "locale_periods", "locale_weekdays", "locale_shortWeekdays", "locale_months", "locale_shortMonths", "periodRe", "formatRe", "periodLookup", "formatLookup", "weekdayRe", "weekdayLookup", "shortWeekdayRe", "shortWeekdayLookup", "monthRe", "monthLookup", "shortMonthRe", "shortMonthLookup", "formats", "formatShortWeekday", "formatWeekday", "formatShortMonth", "formatMonth", "formatDayOfMonth", "formatMicroseconds", "formatYearISO", "formatFullYearISO", "formatHour24", "formatHour12", "formatDayOfYear", "formatMilliseconds", "formatMonthNumber", "formatMinutes", "formatPeriod", "formatQuarter", "formatUnixTimestamp", "formatUnixTimestampSeconds", "formatSeconds", "formatWeekdayNumberMonday", "formatWeekNumberSunday", "formatWeekNumberISO", "formatWeekdayNumberSunday", "formatWeekNumberMonday", "formatYear", "formatFullYear", "formatZone", "formatLiteralPercent", "utcFormats", "formatUTCShortWeekday", "formatUTCWeekday", "formatUTCShortMonth", "formatUTCMonth", "formatUTCDayOfMonth", "formatUTCMicroseconds", "formatUTCYearISO", "formatUTCFullYearISO", "formatUTCHour24", "formatUTCHour12", "formatUTCDayOfYear", "formatUTCMilliseconds", "formatUTCMonthNumber", "formatUTCMinutes", "formatUTCPeriod", "formatUTCQuarter", "formatUTCSeconds", "formatUTCWeekdayNumberMonday", "formatUTCWeekNumberSunday", "formatUTCWeekNumberISO", "formatUTCWeekdayNumberSunday", "formatUTCWeekNumberMonday", "formatUTCYear", "formatUTCFullYear", "formatUTCZone", "parses", "parseShortWeekday", "parseWeekday", "parseShortMonth", "parseMonth", "parseLocaleDateTime", "parseDayOfMonth", "parseMicroseconds", "parseYear", "parseFullYear", "parseHour24", "parseDayOfYear", "parseMilliseconds", "parseMonthNumber", "parseMinutes", "parsePeriod", "parseQuarter", "parseUnixTimestamp", "parseUnixTimestampSeconds", "parseSeconds", "parseWeekdayNumberMonday", "parseWeekNumberSunday", "parseWeekNumberISO", "parseWeekdayNumberSunday", "parseWeekNumberMonday", "parseLocaleDate", "parseLocaleTime", "parseZone", "parseLiteralPercent", "newFormat", "specifier", "string", "i", "j", "n", "c", "pad", "format", "pads", "__name", "newParse", "Z", "parseSpecifier", "week", "day", "utcMonday", "utcDay", "timeMonday", "timeDay", "parse", "f", "p", "value", "fill", "width", "sign", "length", "requote", "s", "requoteRe", "names", "name", "numberRe", "percentRe", "timeYear", "timeSunday", "dISO", "timeThursday", "z", "utcYear", "dow", "utcSunday", "UTCdISO", "utcThursday", "init_locale", "__esmMin", "init_src", "defaultLocale", "definition", "locale", "formatLocale", "timeFormat", "timeParse", "utcFormat", "utcParse", "init_defaultLocale", "__esmMin", "init_locale", "__name", "init_src", "__esmMin", "init_defaultLocale", "date", "number", "calendar", "ticks", "tickInterval", "year", "month", "week", "day", "hour", "minute", "second", "format", "scale", "continuous", "invert", "domain", "formatMillisecond", "formatSecond", "formatMinute", "formatHour", "formatDay", "formatWeek", "formatMonth", "formatYear", "tickFormat", "__name", "y", "_", "interval", "d", "count", "specifier", "nice", "copy", "time", "initRange", "timeTicks", "timeTickInterval", "timeYear", "timeMonth", "timeSunday", "timeDay", "timeHour", "timeMinute", "timeFormat", "init_time", "__esmMin", "init_src", "init_continuous", "init_init", "init_nice", "init_src", "__esmMin", "init_band", "init_linear", "init_ordinal", "init_time", "colors_default", "specifier", "n", "colors", "i", "init_colors", "__esmMin", "__name", "Tableau10_default", "init_Tableau10", "__esmMin", "init_colors", "colors_default", "init_src", "__esmMin", "init_Tableau10", "constant_default", "x", "__name", "init_constant", "__esmMin", "acos", "x", "pi", "asin", "halfPi", "abs", "atan2", "cos", "max", "min", "sin", "sqrt", "epsilon", "tau", "init_math", "__esmMin", "__name", "withPath", "shape", "digits", "_", "d", "Path", "init_path", "__esmMin", "init_src", "__name", "arcInnerRadius", "d", "arcOuterRadius", "arcStartAngle", "arcEndAngle", "arcPadAngle", "intersect", "x0", "y0", "x1", "y1", "x2", "y2", "x3", "y3", "x10", "y10", "x32", "y32", "t", "epsilon", "cornerTangents", "r1", "rc", "cw", "x01", "y01", "lo", "sqrt", "ox", "oy", "x11", "y11", "x00", "y00", "dx", "dy", "d2", "r", "D", "max", "cx0", "cy0", "cx1", "cy1", "dx0", "dy0", "dx1", "dy1", "arc_default", "innerRadius", "outerRadius", "cornerRadius", "constant_default", "padRadius", "startAngle", "endAngle", "padAngle", "context", "path", "withPath", "arc", "buffer", "r0", "a0", "halfPi", "a1", "da", "abs", "tau", "cos", "sin", "a01", "a11", "a00", "a10", "da0", "da1", "ap", "rp", "min", "rc0", "rc1", "t0", "t1", "p0", "asin", "p1", "oc", "pi", "ax", "ay", "bx", "by", "kc", "acos", "lc", "atan2", "__name", "a", "_", "init_arc", "__esmMin", "init_constant", "init_math", "init_path", "array_default", "x", "slice", "init_array", "__esmMin", "__name", "Linear", "context", "linear_default", "init_linear", "__esmMin", "__name", "x", "y", "x", "p", "y", "init_point", "__esmMin", "__name", "line_default", "x", "y", "defined", "constant_default", "context", "curve", "linear_default", "output", "path", "withPath", "line", "data", "i", "n", "array_default", "defined0", "buffer", "__name", "_", "init_line", "__esmMin", "init_array", "init_constant", "init_linear", "init_path", "init_point", "descending_default", "a", "b", "init_descending", "__esmMin", "__name", "identity_default", "d", "init_identity", "__esmMin", "__name", "pie_default", "value", "identity_default", "sortValues", "descending_default", "sort", "startAngle", "constant_default", "endAngle", "tau", "padAngle", "pie", "data", "i", "n", "array_default", "j", "k", "sum", "index", "arcs", "a0", "da", "a1", "p", "pa", "v", "__name", "_", "init_pie", "__esmMin", "init_array", "init_constant", "init_descending", "init_identity", "init_math", "bumpX", "context", "Bump", "bumpY", "init_bump", "__esmMin", "__name", "x", "y", "noop_default", "init_noop", "__esmMin", "__name", "point", "that", "x", "y", "Basis", "context", "basis_default", "init_basis", "__esmMin", "__name", "BasisClosed", "context", "basisClosed_default", "init_basisClosed", "__esmMin", "init_noop", "init_basis", "__name", "noop_default", "x", "y", "point", "BasisOpen", "context", "basisOpen_default", "init_basisOpen", "__esmMin", "init_basis", "__name", "x", "y", "x0", "y0", "point", "Bundle", "context", "beta", "Basis", "bundle_default", "init_bundle", "__esmMin", "init_basis", "__name", "x", "y", "j", "x0", "y0", "dx", "dy", "i", "t", "custom", "bundle", "point", "that", "x", "y", "Cardinal", "context", "tension", "cardinal_default", "init_cardinal", "__esmMin", "__name", "custom", "cardinal", "CardinalClosed", "context", "tension", "cardinalClosed_default", "init_cardinalClosed", "__esmMin", "init_noop", "init_cardinal", "__name", "noop_default", "x", "y", "point", "custom", "cardinal", "CardinalOpen", "context", "tension", "cardinalOpen_default", "init_cardinalOpen", "__esmMin", "init_cardinal", "__name", "x", "y", "point", "custom", "cardinal", "point", "that", "x", "y", "x1", "y1", "x2", "y2", "epsilon", "a", "n", "b", "m", "CatmullRom", "context", "alpha", "catmullRom_default", "init_catmullRom", "__esmMin", "init_math", "init_cardinal", "__name", "x23", "y23", "custom", "catmullRom", "Cardinal", "CatmullRomClosed", "context", "alpha", "catmullRomClosed_default", "init_catmullRomClosed", "__esmMin", "init_cardinalClosed", "init_noop", "init_catmullRom", "__name", "noop_default", "x", "y", "x23", "y23", "point", "custom", "catmullRom", "CardinalClosed", "CatmullRomOpen", "context", "alpha", "catmullRomOpen_default", "init_catmullRomOpen", "__esmMin", "init_cardinalOpen", "init_catmullRom", "__name", "x", "y", "x23", "y23", "point", "custom", "catmullRom", "CardinalOpen", "LinearClosed", "context", "linearClosed_default", "init_linearClosed", "__esmMin", "init_noop", "__name", "noop_default", "x", "y", "sign", "x", "slope3", "that", "x2", "y2", "h0", "h1", "s0", "s1", "p", "slope2", "t", "h", "point", "t0", "t1", "x0", "y0", "x1", "y1", "dx", "MonotoneX", "context", "MonotoneY", "ReflectContext", "monotoneX", "monotoneY", "init_monotone", "__esmMin", "__name", "y", "Natural", "context", "controlPoints", "x", "i", "n", "m", "a", "b", "r", "natural_default", "init_natural", "__esmMin", "__name", "y", "px", "py", "i0", "i1", "Step", "context", "t", "step_default", "stepBefore", "stepAfter", "init_step", "__esmMin", "__name", "x", "y", "x1", "init_src", "__esmMin", "init_arc", "init_line", "init_pie", "init_basisClosed", "init_basisOpen", "init_basis", "init_bump", "init_bundle", "init_cardinalClosed", "init_cardinalOpen", "init_cardinal", "init_catmullRomClosed", "init_catmullRomOpen", "init_catmullRom", "init_linearClosed", "init_linear", "init_monotone", "init_natural", "init_step", "init_constant", "__esmMin", "init_event", "__esmMin", "Transform", "k", "x", "y", "transform", "node", "identity", "init_transform", "__esmMin", "__name", "point", "location", "init_noevent", "__esmMin", "init_zoom", "__esmMin", "init_src", "init_constant", "init_event", "init_transform", "init_noevent", "init_src", "__esmMin", "init_zoom", "init_transform", "init_src", "__esmMin", "require_constants", "__commonJSMin", "exports", "require_dist", "__commonJSMin", "exports", "constants_1", "isRelativeUrlWithoutProtocol", "url", "__name", "decodeHtmlCharacters", "str", "removedNullByte", "match", "dec", "isValidUrl", "decodeURI", "uri", "sanitizeUrl", "charsToDecode", "decodedUrl", "sanitizedUrl", "trimmedUrl", "urlSchemeParseResults", "urlScheme", "backSanitized", "url_1", "import_sanitize_url", "drawRect", "drawBackgroundRect", "drawText", "drawImage", "drawEmbeddedImage", "getNoteRect", "getTextObj", "init_svgDrawCommon", "__esmMin", "init_common", "__name", "element", "rectData", "rectElement", "attrKey", "bounds", "textData", "nText", "lineBreakRegex", "textElem", "tspan", "elem", "x", "y", "link", "imageElement", "sanitizedLink", "import_sanitize_url", "drawRect", "drawImage", "drawRels", "drawBoundary", "drawC4Shape", "insertDatabaseIcon", "insertComputerIcon", "insertClockIcon", "insertArrowHead", "insertArrowEnd", "insertArrowFilledHead", "insertDynamicNumber", "insertArrowCrossHead", "getC4ShapeFont", "_drawTextCandidateFunc", "svgDraw_default", "init_svgDraw", "__esmMin", "init_common", "init_svgDrawCommon", "__name", "elem", "rectData", "width", "height", "x", "y", "link", "imageElem", "sanitizedLink", "rels", "conf", "relsElem", "rel", "textColor", "strokeColor", "offsetX", "offsetY", "url", "line", "messageConf", "boundary", "boundaryElem", "fillColor", "fontColor", "attrsValue", "boundaryConf", "c4Shape", "personImg", "c4ShapeElem", "rect", "getNoteRect", "c4ShapeFontConf", "textFontConf", "marker", "cnf", "typeC4Shape", "byText", "content", "g", "textAttrs", "text", "_setTextAttrs", "byTspan", "fontSize", "fontFamily", "fontWeight", "lines", "common_default", "i", "dy", "byFo", "s", "toText", "fromTextAttrsDict", "key", "freeGlobal", "freeGlobal_default", "init_freeGlobal", "__esmMin", "freeSelf", "root", "root_default", "init_root", "__esmMin", "init_freeGlobal", "freeGlobal_default", "Symbol", "Symbol_default", "init_Symbol", "__esmMin", "init_root", "root_default", "getRawTag", "value", "isOwn", "hasOwnProperty", "symToStringTag", "tag", "unmasked", "result", "nativeObjectToString", "objectProto", "getRawTag_default", "init_getRawTag", "__esmMin", "init_Symbol", "Symbol_default", "__name", "objectToString", "value", "nativeObjectToString", "objectProto", "objectToString_default", "init_objectToString", "__esmMin", "__name", "baseGetTag", "value", "undefinedTag", "nullTag", "symToStringTag", "getRawTag_default", "objectToString_default", "baseGetTag_default", "init_baseGetTag", "__esmMin", "init_Symbol", "init_getRawTag", "init_objectToString", "Symbol_default", "__name", "isObject", "value", "type", "isObject_default", "init_isObject", "__esmMin", "__name", "isFunction", "value", "isObject_default", "tag", "baseGetTag_default", "funcTag", "genTag", "asyncTag", "proxyTag", "isFunction_default", "init_isFunction", "__esmMin", "init_baseGetTag", "init_isObject", "__name", "coreJsData", "coreJsData_default", "init_coreJsData", "__esmMin", "init_root", "root_default", "isMasked", "func", "maskSrcKey", "isMasked_default", "init_isMasked", "__esmMin", "init_coreJsData", "uid", "coreJsData_default", "__name", "toSource", "func", "funcToString", "funcProto", "toSource_default", "init_toSource", "__esmMin", "__name", "baseIsNative", "value", "isObject_default", "isMasked_default", "pattern", "isFunction_default", "reIsNative", "reIsHostCtor", "toSource_default", "reRegExpChar", "funcProto", "objectProto", "funcToString", "hasOwnProperty", "baseIsNative_default", "init_baseIsNative", "__esmMin", "init_isFunction", "init_isMasked", "init_isObject", "init_toSource", "__name", "getValue", "object", "key", "getValue_default", "init_getValue", "__esmMin", "__name", "getNative", "object", "key", "value", "getValue_default", "baseIsNative_default", "getNative_default", "init_getNative", "__esmMin", "init_baseIsNative", "init_getValue", "__name", "nativeCreate", "nativeCreate_default", "init_nativeCreate", "__esmMin", "init_getNative", "getNative_default", "hashClear", "nativeCreate_default", "hashClear_default", "init_hashClear", "__esmMin", "init_nativeCreate", "__name", "hashDelete", "key", "result", "hashDelete_default", "init_hashDelete", "__esmMin", "__name", "hashGet", "key", "data", "nativeCreate_default", "result", "HASH_UNDEFINED", "hasOwnProperty", "objectProto", "hashGet_default", "init_hashGet", "__esmMin", "init_nativeCreate", "__name", "hashHas", "key", "data", "nativeCreate_default", "hasOwnProperty", "objectProto", "hashHas_default", "init_hashHas", "__esmMin", "init_nativeCreate", "__name", "hashSet", "key", "value", "data", "nativeCreate_default", "HASH_UNDEFINED", "hashSet_default", "init_hashSet", "__esmMin", "init_nativeCreate", "__name", "Hash", "entries", "index", "length", "entry", "Hash_default", "init_Hash", "__esmMin", "init_hashClear", "init_hashDelete", "init_hashGet", "init_hashHas", "init_hashSet", "__name", "hashClear_default", "hashDelete_default", "hashGet_default", "hashHas_default", "hashSet_default", "listCacheClear", "listCacheClear_default", "init_listCacheClear", "__esmMin", "__name", "eq", "value", "other", "eq_default", "init_eq", "__esmMin", "__name", "assocIndexOf", "array", "key", "length", "eq_default", "assocIndexOf_default", "init_assocIndexOf", "__esmMin", "init_eq", "__name", "listCacheDelete", "key", "data", "index", "assocIndexOf_default", "lastIndex", "splice", "arrayProto", "listCacheDelete_default", "init_listCacheDelete", "__esmMin", "init_assocIndexOf", "__name", "listCacheGet", "key", "data", "index", "assocIndexOf_default", "listCacheGet_default", "init_listCacheGet", "__esmMin", "init_assocIndexOf", "__name", "listCacheHas", "key", "assocIndexOf_default", "listCacheHas_default", "init_listCacheHas", "__esmMin", "init_assocIndexOf", "__name", "listCacheSet", "key", "value", "data", "index", "assocIndexOf_default", "listCacheSet_default", "init_listCacheSet", "__esmMin", "init_assocIndexOf", "__name", "ListCache", "entries", "index", "length", "entry", "ListCache_default", "init_ListCache", "__esmMin", "init_listCacheClear", "init_listCacheDelete", "init_listCacheGet", "init_listCacheHas", "init_listCacheSet", "__name", "listCacheClear_default", "listCacheDelete_default", "listCacheGet_default", "listCacheHas_default", "listCacheSet_default", "Map", "Map_default", "init_Map", "__esmMin", "init_getNative", "init_root", "getNative_default", "root_default", "mapCacheClear", "Hash_default", "Map_default", "ListCache_default", "mapCacheClear_default", "init_mapCacheClear", "__esmMin", "init_Hash", "init_ListCache", "init_Map", "__name", "isKeyable", "value", "type", "isKeyable_default", "init_isKeyable", "__esmMin", "__name", "getMapData", "map", "key", "data", "isKeyable_default", "getMapData_default", "init_getMapData", "__esmMin", "init_isKeyable", "__name", "mapCacheDelete", "key", "result", "getMapData_default", "mapCacheDelete_default", "init_mapCacheDelete", "__esmMin", "init_getMapData", "__name", "mapCacheGet", "key", "getMapData_default", "mapCacheGet_default", "init_mapCacheGet", "__esmMin", "init_getMapData", "__name", "mapCacheHas", "key", "getMapData_default", "mapCacheHas_default", "init_mapCacheHas", "__esmMin", "init_getMapData", "__name", "mapCacheSet", "key", "value", "data", "getMapData_default", "size", "mapCacheSet_default", "init_mapCacheSet", "__esmMin", "init_getMapData", "__name", "MapCache", "entries", "index", "length", "entry", "MapCache_default", "init_MapCache", "__esmMin", "init_mapCacheClear", "init_mapCacheDelete", "init_mapCacheGet", "init_mapCacheHas", "init_mapCacheSet", "__name", "mapCacheClear_default", "mapCacheDelete_default", "mapCacheGet_default", "mapCacheHas_default", "mapCacheSet_default", "memoize", "func", "resolver", "FUNC_ERROR_TEXT", "memoized", "__name", "args", "key", "cache", "result", "MapCache_default", "memoize_default", "init_memoize", "__esmMin", "init_MapCache", "stackClear", "ListCache_default", "stackClear_default", "init_stackClear", "__esmMin", "init_ListCache", "__name", "stackDelete", "key", "data", "result", "stackDelete_default", "init_stackDelete", "__esmMin", "__name", "stackGet", "key", "stackGet_default", "init_stackGet", "__esmMin", "__name", "stackHas", "key", "stackHas_default", "init_stackHas", "__esmMin", "__name", "stackSet", "key", "value", "data", "ListCache_default", "pairs", "Map_default", "LARGE_ARRAY_SIZE", "MapCache_default", "stackSet_default", "init_stackSet", "__esmMin", "init_ListCache", "init_Map", "init_MapCache", "__name", "Stack", "entries", "data", "ListCache_default", "Stack_default", "init_Stack", "__esmMin", "init_ListCache", "init_stackClear", "init_stackDelete", "init_stackGet", "init_stackHas", "init_stackSet", "__name", "stackClear_default", "stackDelete_default", "stackGet_default", "stackHas_default", "stackSet_default", "defineProperty", "defineProperty_default", "init_defineProperty", "__esmMin", "init_getNative", "func", "getNative_default", "baseAssignValue", "object", "key", "value", "defineProperty_default", "baseAssignValue_default", "init_baseAssignValue", "__esmMin", "init_defineProperty", "__name", "assignMergeValue", "object", "key", "value", "eq_default", "baseAssignValue_default", "assignMergeValue_default", "init_assignMergeValue", "__esmMin", "init_baseAssignValue", "init_eq", "__name", "createBaseFor", "fromRight", "object", "iteratee", "keysFunc", "index", "iterable", "props", "length", "key", "createBaseFor_default", "init_createBaseFor", "__esmMin", "__name", "baseFor", "baseFor_default", "init_baseFor", "__esmMin", "init_createBaseFor", "createBaseFor_default", "cloneBuffer", "buffer", "isDeep", "length", "result", "allocUnsafe", "freeExports", "freeModule", "moduleExports", "Buffer", "cloneBuffer_default", "init_cloneBuffer", "__esmMin", "init_root", "root_default", "__name", "Uint8Array", "Uint8Array_default", "init_Uint8Array", "__esmMin", "init_root", "root_default", "cloneArrayBuffer", "arrayBuffer", "result", "Uint8Array_default", "cloneArrayBuffer_default", "init_cloneArrayBuffer", "__esmMin", "init_Uint8Array", "__name", "cloneTypedArray", "typedArray", "isDeep", "buffer", "cloneArrayBuffer_default", "cloneTypedArray_default", "init_cloneTypedArray", "__esmMin", "init_cloneArrayBuffer", "__name", "copyArray", "source", "array", "index", "length", "copyArray_default", "init_copyArray", "__esmMin", "__name", "objectCreate", "baseCreate", "baseCreate_default", "init_baseCreate", "__esmMin", "init_isObject", "object", "__name", "proto", "isObject_default", "result", "overArg", "func", "transform", "arg", "overArg_default", "init_overArg", "__esmMin", "__name", "getPrototype", "getPrototype_default", "init_getPrototype", "__esmMin", "init_overArg", "overArg_default", "isPrototype", "value", "Ctor", "proto", "objectProto", "isPrototype_default", "init_isPrototype", "__esmMin", "__name", "initCloneObject", "object", "isPrototype_default", "baseCreate_default", "getPrototype_default", "initCloneObject_default", "init_initCloneObject", "__esmMin", "init_baseCreate", "init_getPrototype", "init_isPrototype", "__name", "isObjectLike", "value", "isObjectLike_default", "init_isObjectLike", "__esmMin", "__name", "baseIsArguments", "value", "isObjectLike_default", "baseGetTag_default", "argsTag", "baseIsArguments_default", "init_baseIsArguments", "__esmMin", "init_baseGetTag", "init_isObjectLike", "__name", "objectProto", "hasOwnProperty", "propertyIsEnumerable", "isArguments", "isArguments_default", "init_isArguments", "__esmMin", "init_baseIsArguments", "init_isObjectLike", "baseIsArguments_default", "value", "isObjectLike_default", "isArray", "isArray_default", "init_isArray", "__esmMin", "isLength", "value", "MAX_SAFE_INTEGER", "isLength_default", "init_isLength", "__esmMin", "__name", "isArrayLike", "value", "isLength_default", "isFunction_default", "isArrayLike_default", "init_isArrayLike", "__esmMin", "init_isFunction", "init_isLength", "__name", "isArrayLikeObject", "value", "isObjectLike_default", "isArrayLike_default", "isArrayLikeObject_default", "init_isArrayLikeObject", "__esmMin", "init_isArrayLike", "init_isObjectLike", "__name", "stubFalse", "stubFalse_default", "init_stubFalse", "__esmMin", "__name", "freeExports", "freeModule", "moduleExports", "Buffer", "nativeIsBuffer", "isBuffer", "isBuffer_default", "init_isBuffer", "__esmMin", "init_root", "init_stubFalse", "root_default", "stubFalse_default", "isPlainObject", "value", "isObjectLike_default", "baseGetTag_default", "objectTag", "proto", "getPrototype_default", "Ctor", "hasOwnProperty", "funcToString", "objectCtorString", "funcProto", "objectProto", "isPlainObject_default", "init_isPlainObject", "__esmMin", "init_baseGetTag", "init_getPrototype", "init_isObjectLike", "__name", "baseIsTypedArray", "value", "isObjectLike_default", "isLength_default", "typedArrayTags", "baseGetTag_default", "argsTag", "arrayTag", "boolTag", "dateTag", "errorTag", "funcTag", "mapTag", "numberTag", "objectTag", "regexpTag", "setTag", "stringTag", "weakMapTag", "arrayBufferTag", "dataViewTag", "float32Tag", "float64Tag", "int8Tag", "int16Tag", "int32Tag", "uint8Tag", "uint8ClampedTag", "uint16Tag", "uint32Tag", "baseIsTypedArray_default", "init_baseIsTypedArray", "__esmMin", "init_baseGetTag", "init_isLength", "init_isObjectLike", "__name", "baseUnary", "func", "value", "baseUnary_default", "init_baseUnary", "__esmMin", "__name", "freeExports", "freeModule", "moduleExports", "freeProcess", "nodeUtil", "nodeUtil_default", "init_nodeUtil", "__esmMin", "init_freeGlobal", "freeGlobal_default", "types", "nodeIsTypedArray", "isTypedArray", "isTypedArray_default", "init_isTypedArray", "__esmMin", "init_baseIsTypedArray", "init_baseUnary", "init_nodeUtil", "nodeUtil_default", "baseUnary_default", "baseIsTypedArray_default", "safeGet", "object", "key", "safeGet_default", "init_safeGet", "__esmMin", "__name", "assignValue", "object", "key", "value", "objValue", "hasOwnProperty", "eq_default", "baseAssignValue_default", "objectProto", "assignValue_default", "init_assignValue", "__esmMin", "init_baseAssignValue", "init_eq", "__name", "copyObject", "source", "props", "object", "customizer", "isNew", "index", "length", "key", "newValue", "baseAssignValue_default", "assignValue_default", "copyObject_default", "init_copyObject", "__esmMin", "init_assignValue", "init_baseAssignValue", "__name", "baseTimes", "n", "iteratee", "index", "result", "baseTimes_default", "init_baseTimes", "__esmMin", "__name", "isIndex", "value", "length", "type", "MAX_SAFE_INTEGER", "reIsUint", "isIndex_default", "init_isIndex", "__esmMin", "__name", "arrayLikeKeys", "value", "inherited", "isArr", "isArray_default", "isArg", "isArguments_default", "isBuff", "isBuffer_default", "isType", "isTypedArray_default", "skipIndexes", "result", "baseTimes_default", "length", "key", "hasOwnProperty", "isIndex_default", "objectProto", "arrayLikeKeys_default", "init_arrayLikeKeys", "__esmMin", "init_baseTimes", "init_isArguments", "init_isArray", "init_isBuffer", "init_isIndex", "init_isTypedArray", "__name", "nativeKeysIn", "object", "result", "key", "nativeKeysIn_default", "init_nativeKeysIn", "__esmMin", "__name", "baseKeysIn", "object", "isObject_default", "nativeKeysIn_default", "isProto", "isPrototype_default", "result", "key", "hasOwnProperty", "objectProto", "baseKeysIn_default", "init_baseKeysIn", "__esmMin", "init_isObject", "init_isPrototype", "init_nativeKeysIn", "__name", "keysIn", "object", "isArrayLike_default", "arrayLikeKeys_default", "baseKeysIn_default", "keysIn_default", "init_keysIn", "__esmMin", "init_arrayLikeKeys", "init_baseKeysIn", "init_isArrayLike", "__name", "toPlainObject", "value", "copyObject_default", "keysIn_default", "toPlainObject_default", "init_toPlainObject", "__esmMin", "init_copyObject", "init_keysIn", "__name", "baseMergeDeep", "object", "source", "key", "srcIndex", "mergeFunc", "customizer", "stack", "objValue", "safeGet_default", "srcValue", "stacked", "assignMergeValue_default", "newValue", "isCommon", "isArr", "isArray_default", "isBuff", "isBuffer_default", "isTyped", "isTypedArray_default", "isArrayLikeObject_default", "copyArray_default", "cloneBuffer_default", "cloneTypedArray_default", "isPlainObject_default", "isArguments_default", "toPlainObject_default", "isObject_default", "isFunction_default", "initCloneObject_default", "baseMergeDeep_default", "init_baseMergeDeep", "__esmMin", "init_assignMergeValue", "init_cloneBuffer", "init_cloneTypedArray", "init_copyArray", "init_initCloneObject", "init_isArguments", "init_isArray", "init_isArrayLikeObject", "init_isBuffer", "init_isFunction", "init_isObject", "init_isPlainObject", "init_isTypedArray", "init_safeGet", "init_toPlainObject", "__name", "baseMerge", "object", "source", "srcIndex", "customizer", "stack", "baseFor_default", "srcValue", "key", "Stack_default", "isObject_default", "baseMergeDeep_default", "newValue", "safeGet_default", "assignMergeValue_default", "keysIn_default", "baseMerge_default", "init_baseMerge", "__esmMin", "init_Stack", "init_assignMergeValue", "init_baseFor", "init_baseMergeDeep", "init_isObject", "init_keysIn", "init_safeGet", "__name", "identity", "value", "identity_default", "init_identity", "__esmMin", "__name", "apply", "func", "thisArg", "args", "apply_default", "init_apply", "__esmMin", "__name", "overRest", "func", "start", "transform", "nativeMax", "args", "index", "length", "array", "otherArgs", "apply_default", "overRest_default", "init_overRest", "__esmMin", "init_apply", "__name", "constant", "value", "constant_default", "init_constant", "__esmMin", "__name", "baseSetToString", "baseSetToString_default", "init_baseSetToString", "__esmMin", "init_constant", "init_defineProperty", "init_identity", "defineProperty_default", "func", "string", "constant_default", "identity_default", "shortOut", "func", "count", "lastCalled", "stamp", "nativeNow", "remaining", "HOT_SPAN", "HOT_COUNT", "shortOut_default", "init_shortOut", "__esmMin", "__name", "setToString", "setToString_default", "init_setToString", "__esmMin", "init_baseSetToString", "init_shortOut", "shortOut_default", "baseSetToString_default", "baseRest", "func", "start", "setToString_default", "overRest_default", "identity_default", "baseRest_default", "init_baseRest", "__esmMin", "init_identity", "init_overRest", "init_setToString", "__name", "isIterateeCall", "value", "index", "object", "isObject_default", "type", "isArrayLike_default", "isIndex_default", "eq_default", "isIterateeCall_default", "init_isIterateeCall", "__esmMin", "init_eq", "init_isArrayLike", "init_isIndex", "init_isObject", "__name", "createAssigner", "assigner", "baseRest_default", "object", "sources", "index", "length", "customizer", "guard", "isIterateeCall_default", "source", "createAssigner_default", "init_createAssigner", "__esmMin", "init_baseRest", "init_isIterateeCall", "__name", "merge", "merge_default", "init_merge", "__esmMin", "init_baseMerge", "init_createAssigner", "createAssigner_default", "object", "source", "srcIndex", "baseMerge_default", "interpolateToCurve", "interpolate", "defaultCurve", "curveName", "d3CurveTypes", "formatUrl", "linkStr", "config", "url", "distance", "p1", "p2", "traverseEdge", "points", "prevPoint", "totalDistance", "point", "remainingDistance", "calculatePoint", "calcLabelPosition", "calcTerminalLabelPosition", "terminalMarkerSize", "position", "_points", "log", "distanceToCardinalityPoint", "center", "d", "angle", "cardinalityPosition", "getStylesFromArray", "arr", "style", "labelStyle", "element", "makeRandomHex", "length", "result", "characters", "charactersLength", "calculateTextHeight", "text", "calculateTextDimensions", "calculateTextWidth", "isDetailedError", "error", "cleanAndMerge", "defaultData", "data", "merge_default", "handleUndefinedAttr", "attrValue", "isLabelCoordinateInPath", "dAttr", "roundedX", "roundedY", "sanitizedD", "match", "import_sanitize_url", "ZERO_WIDTH_SPACE", "directiveWithoutOpen", "detectInit", "detectDirective", "removeDirectives", "isSubstringInArray", "runFunc", "roundNumber", "calcCardinalityPosition", "cnt", "generateId", "random", "getTextObj", "drawSimpleText", "wrapLabel", "breakString", "InitIDGenerator", "decoder", "entityDecode", "insertTitle", "parseFontSize", "utils_default", "encodeEntities", "decodeEntities", "getEdgeId", "init_utils", "__esmMin", "init_src", "init_common", "init_sanitizeDirective", "init_logger", "init_detectType", "init_assignWithDepth", "init_memoize", "init_merge", "init_regexes", "basis_default", "basisClosed_default", "basisOpen_default", "bumpX", "bumpY", "bundle_default", "cardinalClosed_default", "cardinalOpen_default", "cardinal_default", "catmullRomClosed_default", "catmullRomOpen_default", "catmullRom_default", "linear_default", "linearClosed_default", "monotoneX", "monotoneY", "natural_default", "step_default", "stepAfter", "stepBefore", "__name", "inits", "results", "args", "init", "sanitizeDirective", "assignWithDepth_default", "type", "detectType", "prop", "commentWithoutDirectives", "directiveRegex", "str", "i", "functionName", "params", "arrPaths", "len", "fnName", "obj", "num", "precision", "factor", "distanceToTraverse", "vectorDistance", "distanceRatio", "isRelationTypePresent", "initialPosition", "options", "elem", "textData", "nText", "common_default", "_fontSizePx", "textElem", "span", "memoize_default", "label", "maxWidth", "words", "completedLines", "nextLine", "word", "index", "wordLength", "nextLineLength", "hyphenatedStrings", "remainingWord", "line", "hyphenCharacter", "lines", "currentLine", "character", "currentCharacter", "isLastLine", "hyphenatedNextLine", "fontSize", "fontFamily", "fontWeight", "fontFamilies", "dims", "body", "select_default", "g", "cHeight", "dim", "textObj", "bBox", "deterministic", "seed", "html", "parent", "cssClass", "titleTopMargin", "title", "bounds", "fontSizeNumber", "txt", "s", "innerTxt", "from", "to", "counter", "prefix", "suffix", "id", "calcC4ShapeTextWH", "textType", "c4Shape", "c4ShapeTextWrap", "textConf", "textLimitWidth", "wrapLabel", "common_default", "calculateTextHeight", "lines", "lineHeight", "line", "calculateTextWidth", "drawInsideBoundary", "diagram", "parentBoundaryAlias", "parentBounds", "currentBoundaries", "diagObj", "currentBounds", "Bounds", "c4BoundaryInRow", "i", "currentBoundary", "Y", "currentBoundaryTextWrap", "conf", "currentBoundaryLabelConf", "boundaryFont", "currentBoundaryTypeConf", "currentBoundaryDescrConf", "_x", "_y", "currentPersonOrSystemArray", "currentPersonOrSystemKeys", "drawC4ShapeArray", "nextCurrentBoundaries", "drawBoundary", "globalBoundaryMaxX", "globalBoundaryMaxY", "c4ShapeInRow", "setConf", "c4ShapeFont", "messageFont", "Point", "getIntersectPoint", "getIntersectPoints", "drawRels", "draw", "c4Renderer_default", "init_c4Renderer", "__esmMin", "init_src", "init_svgDraw", "init_logger", "init_c4Diagram", "init_common", "init_c4Db", "init_diagramAPI", "init_assignWithDepth", "init_utils", "init_setupGraphViewbox", "parser", "c4Db_default", "__name", "startx", "stopx", "starty", "stopy", "obj", "key", "val", "fun", "_startx", "_stopx", "_starty", "_stopy", "margin", "cnf", "assignWithDepth_default", "typeC4Shape", "boundary", "bounds", "boundaryTextWrap", "boundaryLabelConf", "svgDraw_default", "c4ShapeArray", "c4ShapeKeys", "c4ShapeKey", "c4ShapeTypeConf", "c4ShapeLabelConf", "c4ShapeTechnConf", "rectHeight", "rectWidth", "c4ShapeDescrConf", "x", "y", "fromNode", "endPoint", "x1", "y1", "x2", "y2", "fromCenterX", "fromCenterY", "dx", "dy", "tanDYX", "fromDYX", "returnPoint", "endNode", "endIntersectPoint", "startPoint", "rels", "getC4ShapeObj", "rel", "relTextWrap", "relConf", "points", "_text", "id", "_version", "getConfig", "securityLevel", "sandboxElement", "select_default", "root", "db", "log", "screenBounds", "title", "box", "height", "width", "configureSvgSize", "extraVertForTitle", "getStyles", "styles_default", "init_styles", "__esmMin", "__name", "options", "c4Diagram_exports", "__export", "diagram", "init_c4Diagram", "__esmMin", "init_c4Db", "init_c4Renderer", "init_styles", "c4Diagram_default", "c4Db_default", "c4Renderer_default", "styles_default", "__name", "c4", "wrap", "isNothing", "subject", "isObject", "toArray", "sequence", "extend", "target", "source", "index", "length", "key", "sourceKeys", "repeat", "string", "count", "result", "cycle", "isNegativeZero", "number", "formatError", "exception", "compact", "where", "message", "YAMLException$1", "reason", "mark", "getLine", "buffer", "lineStart", "lineEnd", "position", "maxLineLength", "head", "tail", "maxHalfLength", "padStart", "max", "common", "makeSnippet", "options", "re", "lineStarts", "lineEnds", "match", "foundLineNo", "i", "line", "lineNoLength", "compileStyleAliases", "map", "style", "alias", "Type$1", "tag", "name", "TYPE_CONSTRUCTOR_OPTIONS", "data", "YAML_NODE_KINDS", "compileList", "schema", "currentType", "newIndex", "previousType", "previousIndex", "compileMap", "collectType", "type", "__name", "Schema$1", "definition", "resolveYamlNull", "constructYamlNull", "isNull", "object", "resolveYamlBoolean", "constructYamlBoolean", "isBoolean", "isHexCode", "c", "isOctCode", "isDecCode", "resolveYamlInteger", "hasDigits", "ch", "constructYamlInteger", "value", "sign", "isInteger", "resolveYamlFloat", "YAML_FLOAT_PATTERN", "constructYamlFloat", "representYamlFloat", "res", "SCIENTIFIC_WITHOUT_DOT", "isFloat", "resolveYamlTimestamp", "YAML_DATE_REGEXP", "YAML_TIMESTAMP_REGEXP", "constructYamlTimestamp", "year", "month", "day", "hour", "minute", "second", "fraction", "delta", "tz_hour", "tz_minute", "date", "representYamlTimestamp", "resolveYamlMerge", "resolveYamlBinary", "code", "idx", "bitlen", "BASE64_MAP", "constructYamlBinary", "tailbits", "input", "bits", "representYamlBinary", "isBinary", "obj", "resolveYamlOmap", "objectKeys", "pair", "pairKey", "pairHasKey", "_toString$2", "_hasOwnProperty$3", "constructYamlOmap", "resolveYamlPairs", "keys", "_toString$1", "constructYamlPairs", "resolveYamlSet", "_hasOwnProperty$2", "constructYamlSet", "_class", "is_EOL", "is_WHITE_SPACE", "is_WS_OR_EOL", "is_FLOW_INDICATOR", "fromHexCode", "lc", "escapedHexLen", "fromDecimalCode", "simpleEscapeSequence", "charFromCodepoint", "State$1", "_default", "generateError", "state", "snippet", "throwError", "throwWarning", "captureSegment", "start", "end", "checkJson", "_position", "_length", "_character", "_result", "PATTERN_NON_PRINTABLE", "mergeMappings", "destination", "overridableKeys", "quantity", "_hasOwnProperty$1", "storeMappingPair", "keyTag", "keyNode", "valueNode", "startLine", "startLineStart", "startPos", "readLineBreak", "skipSeparationSpace", "allowComments", "checkIndent", "lineBreaks", "testDocumentSeparator", "writeFoldedLines", "readPlainScalar", "nodeIndent", "withinFlowCollection", "preceding", "following", "captureStart", "captureEnd", "hasPendingContent", "_line", "_lineStart", "_lineIndent", "_kind", "readSingleQuotedScalar", "readDoubleQuotedScalar", "hexLength", "hexResult", "tmp", "simpleEscapeCheck", "simpleEscapeMap", "readFlowCollection", "readNext", "_pos", "_tag", "_anchor", "terminator", "isPair", "isExplicitPair", "isMapping", "composeNode", "CONTEXT_FLOW_IN", "readBlockScalar", "folding", "chomping", "CHOMPING_CLIP", "didReadContent", "detectedIndent", "textIndent", "emptyLines", "atMoreIndented", "CHOMPING_KEEP", "CHOMPING_STRIP", "readBlockSequence", "detected", "CONTEXT_BLOCK_IN", "readBlockMapping", "flowIndent", "allowCompact", "_keyLine", "_keyLineStart", "_keyPos", "atExplicitKey", "CONTEXT_FLOW_OUT", "CONTEXT_BLOCK_OUT", "readTagProperty", "isVerbatim", "isNamed", "tagHandle", "tagName", "PATTERN_TAG_HANDLE", "PATTERN_FLOW_INDICATORS", "PATTERN_TAG_URI", "readAnchorProperty", "readAlias", "parentIndent", "nodeContext", "allowToSeek", "allowBlockStyles", "allowBlockScalars", "allowBlockCollections", "indentStatus", "atNewLine", "hasContent", "typeIndex", "typeQuantity", "typeList", "blockIndent", "readDocument", "documentStart", "directiveName", "directiveArgs", "hasDirectives", "directiveHandlers", "PATTERN_NON_ASCII_LINE_BREAKS", "loadDocuments", "nullpos", "loadAll$1", "iterator", "documents", "load$1", "compileStyleMap", "_hasOwnProperty", "encodeHex", "character", "handle", "State", "QUOTING_TYPE_DOUBLE", "QUOTING_TYPE_SINGLE", "indentString", "spaces", "ind", "next", "generateNextLine", "level", "testImplicitResolving", "str", "isWhitespace", "CHAR_SPACE", "CHAR_TAB", "isPrintable", "CHAR_BOM", "isNsCharOrWhitespace", "CHAR_CARRIAGE_RETURN", "CHAR_LINE_FEED", "isPlainSafe", "prev", "inblock", "cIsNsCharOrWhitespace", "cIsNsChar", "CHAR_COMMA", "CHAR_LEFT_SQUARE_BRACKET", "CHAR_RIGHT_SQUARE_BRACKET", "CHAR_LEFT_CURLY_BRACKET", "CHAR_RIGHT_CURLY_BRACKET", "CHAR_SHARP", "CHAR_COLON", "isPlainSafeFirst", "CHAR_MINUS", "CHAR_QUESTION", "CHAR_AMPERSAND", "CHAR_ASTERISK", "CHAR_EXCLAMATION", "CHAR_VERTICAL_LINE", "CHAR_EQUALS", "CHAR_GREATER_THAN", "CHAR_SINGLE_QUOTE", "CHAR_DOUBLE_QUOTE", "CHAR_PERCENT", "CHAR_COMMERCIAL_AT", "CHAR_GRAVE_ACCENT", "isPlainSafeLast", "codePointAt", "pos", "first", "needIndentIndicator", "leadingSpaceRe", "chooseScalarStyle", "singleLineOnly", "indentPerLevel", "lineWidth", "testAmbiguousType", "quotingType", "forceQuotes", "char", "prevChar", "hasLineBreak", "hasFoldableLine", "shouldTrackWidth", "previousLineBreak", "plain", "STYLE_DOUBLE", "STYLE_PLAIN", "STYLE_SINGLE", "STYLE_FOLDED", "STYLE_LITERAL", "writeScalar", "iskey", "DEPRECATED_BOOLEANS_SYNTAX", "DEPRECATED_BASE60_SYNTAX", "indent", "testAmbiguity", "blockHeader", "dropEndingNewline", "foldString", "escapeString", "indentIndicator", "clip", "keep", "chomp", "width", "lineRe", "nextLF", "foldLine", "prevMoreIndented", "moreIndented", "prefix", "breakRe", "curr", "escapeSeq", "ESCAPE_SEQUENCES", "writeFlowSequence", "writeNode", "writeBlockSequence", "writeFlowMapping", "objectKeyList", "objectKey", "objectValue", "pairBuffer", "writeBlockMapping", "explicitPair", "detectType", "explicit", "_toString", "block", "isblockseq", "tagStr", "objectOrArray", "duplicateIndex", "duplicate", "getDuplicateReferences", "objects", "duplicatesIndexes", "inspectNode", "dump$1", "renamed", "from", "to", "isNothing_1", "isObject_1", "toArray_1", "repeat_1", "isNegativeZero_1", "extend_1", "seq", "failsafe", "_null", "bool", "int", "float", "json", "core", "timestamp", "merge", "binary", "omap", "pairs", "set", "loadAll_1", "load_1", "loader", "dump_1", "dumper", "JSON_SCHEMA", "load", "loadAll", "dump", "safeLoad", "safeLoadAll", "safeDump", "init_js_yaml", "__esmMin", "implicit", "type$1", "args", "major", "minor", "_getDefaults", "changeDefaults", "newDefaults", "_defaults", "edit", "regex", "opt", "source", "obj", "__name", "name", "val", "valSource", "other", "escape", "html", "encode", "getEscapeReplacement", "cleanUrl", "href", "splitCells", "tableRow", "count", "row", "match", "offset", "str", "escaped", "curr", "cells", "i", "rtrim", "c", "invert", "l", "suffLen", "currChar", "findClosingBracket", "b", "level", "outputLink", "cap", "link", "raw", "lexer", "rules", "title", "text", "token", "indentCodeCompensation", "matchIndentToCode", "indentToCode", "node", "matchIndentInNode", "indentInNode", "marked", "src", "markedInstance", "noopTest", "newline", "blockCode", "fences", "hr", "heading", "bullet", "lheadingCore", "lheading", "lheadingGfm", "_paragraph", "blockText", "_blockLabel", "def", "list", "_tag", "_comment", "paragraph", "blockquote", "blockNormal", "gfmTable", "blockGfm", "blockPedantic", "inlineCode", "br", "inlineText", "_punctuation", "_punctuationOrSpace", "_notPunctuationOrSpace", "punctuation", "_punctuationGfmStrongEm", "_punctuationOrSpaceGfmStrongEm", "_notPunctuationOrSpaceGfmStrongEm", "blockSkip", "emStrongLDelimCore", "emStrongLDelim", "emStrongLDelimGfm", "emStrongRDelimAstCore", "emStrongRDelimAst", "emStrongRDelimAstGfm", "emStrongRDelimUnd", "anyPunctuation", "autolink", "_inlineComment", "tag", "_inlineLabel", "reflink", "nolink", "reflinkSearch", "inlineNormal", "inlinePedantic", "inlineGfm", "inlineBreaks", "block", "inline", "escapeReplacements", "_Tokenizer", "_Lexer", "_Renderer", "_TextRenderer", "_Parser", "_Hooks", "Marked", "options", "setOptions", "use", "walkTokens", "parseInline", "parser", "bull", "indent", "ch", "trimmed", "lines", "tokens", "inBlockquote", "currentLines", "currentRaw", "currentText", "top", "lastToken", "oldToken", "newText", "newToken", "isordered", "itemRegex", "endsWithBlankLine", "endEarly", "itemContents", "line", "t", "nextLine", "blankLine", "nextBulletRegex", "hrRegex", "fencesBeginRegex", "headingBeginRegex", "htmlBeginRegex", "rawLine", "nextLineWithoutTabs", "istask", "ischecked", "lastItem", "spacers", "hasMultipleLineBreaks", "headers", "aligns", "rows", "item", "align", "cell", "trimmedUrl", "rtrimSlash", "lastParenIndex", "linkLen", "links", "linkString", "maskedSrc", "prevChar", "lLength", "rDelim", "rLength", "delimTotal", "midDelimTotal", "endReg", "lastCharLength", "hasNonSpaceChars", "hasSpaceCharsOnBothEnds", "prevCapZero", "__Lexer", "next", "lastParagraphClipped", "extTokenizer", "cutSrc", "startIndex", "tempSrc", "tempStart", "getStartIndex", "errMsg", "keepPrevChar", "lang", "langString", "code", "depth", "ordered", "start", "body", "j", "type", "startAttr", "itemBody", "checkbox", "checked", "header", "k", "content", "cleanHref", "out", "__Parser", "anyToken", "genericToken", "ret", "textToken", "renderer", "markdown", "args", "callback", "values", "tableToken", "listToken", "childTokens", "extensions", "pack", "opts", "ext", "prevRenderer", "extLevel", "prop", "rendererProp", "rendererFunc", "tokenizer", "tokenizerProp", "tokenizerFunc", "prevTokenizer", "hooks", "hooksProp", "hooksFunc", "prevHook", "arg", "packWalktokens", "blockType", "origOpt", "throwError", "e", "silent", "async", "msg", "preprocessMarkdown", "markdown", "markdownAutoWrap", "withoutMultipleNewlines", "withoutExtraSpaces", "dedent", "markdownToLines", "config", "preprocessedMarkdown", "nodes", "d", "lines", "currentLine", "processNode", "node", "parentType", "textLine", "index", "word", "contentNode", "__name", "treeNode", "markdownToHTML", "output", "log", "init_handle_markdown_text", "__esmMin", "init_marked_esm", "init_esm", "init_logger", "splitTextToChars", "text", "s", "splitWordToFitWidth", "checkFit", "word", "characters", "splitWordToFitWidthRecursion", "usedChars", "remainingChars", "type", "nextChar", "rest", "newWord", "splitLineToFitWidth", "line", "content", "splitLineToFitWidthRecursion", "words", "lines", "newLine", "joiner", "nextWord", "lineWithNextWord", "init_splitText", "__esmMin", "__name", "applyStyle", "dom", "styleFn", "addHtmlSpan", "element", "node", "width", "classes", "addBackground", "config", "getConfig", "fo", "div", "sanitizedLabel", "hasKatex", "renderKatexSanitized", "common_default", "sanitizeText", "labelClass", "span", "bbox", "createTspan", "textElement", "lineIndex", "lineHeight", "computeWidthOfText", "parentNode", "line", "testElement", "testSpan", "updateTextContentAndStyles", "textLength", "computeDimensionOfText", "text", "textDimension", "createFormattedText", "g", "structuredText", "labelGroup", "bkg", "checkWidth", "__name", "linesUnderWidth", "splitLineToFitWidth", "preparedLine", "tspan", "padding", "wrappedLine", "word", "index", "innerTspan", "replaceIconSubstring", "pendingReplacements", "fullMatch", "prefix", "iconName", "registeredIconName", "isIconAvailable", "getIconSVG", "replacements", "createText", "init_createText", "__esmMin", "init_src", "init_common", "init_logger", "init_handle_markdown_text", "init_utils", "init_icons", "init_splitText", "init_config", "el", "style", "isTitle", "useHtmlLabels", "isNode", "addSvgBackground", "log", "htmlText", "markdownToHTML", "decodedReplacedText", "decodeEntities", "inputForKatex", "sanitizeBR", "markdownToLines", "svgLabel", "nodeLabelTextStyle", "select_default", "edgeLabelRectStyle", "edgeLabelTextStyle", "createPathFromPoints", "points", "pointStrings", "p", "i", "generateFullSineWavePoints", "x1", "y1", "x2", "y2", "amplitude", "numCycles", "deltaX", "deltaY", "cycleLength", "frequency", "midY", "t", "x", "y", "generateCirclePoints", "centerX", "centerY", "radius", "numPoints", "startAngle", "endAngle", "startAngleRad", "angleStep", "angle", "labelHelper", "insertLabel", "updateNodeBounds", "getNodeClasses", "init_util", "__esmMin", "init_createText", "init_diagramAPI", "init_src", "init_defaultConfig", "init_common", "init_utils", "__name", "parent", "node", "_classes", "cssClasses", "useHtmlLabels", "evaluate", "getConfig", "shapeSvg", "labelEl", "handleUndefinedAttr", "label", "text", "createText", "sanitizeText", "decodeEntities", "bbox", "halfPadding", "div", "dv", "select_default", "images", "noImgText", "img", "res", "setupImage", "bodyFontSize", "enlargingFactor", "parsedBodyFontSize", "defaultConfig_default", "parseFontSize", "width", "options", "element", "extra", "intersectNode", "node", "point", "intersect_node_default", "init_intersect_node", "__esmMin", "__name", "intersectEllipse", "node", "rx", "ry", "point", "cx", "cy", "px", "py", "det", "dx", "dy", "intersect_ellipse_default", "init_intersect_ellipse", "__esmMin", "__name", "intersectCircle", "node", "rx", "point", "intersect_ellipse_default", "intersect_circle_default", "init_intersect_circle", "__esmMin", "init_intersect_ellipse", "__name", "intersectLine", "p1", "p2", "q1", "q2", "a1", "b1", "c1", "r3", "r4", "epsilon", "sameSign", "a2", "b2", "c2", "r1", "r2", "denom", "offset", "num", "x", "y", "intersect_line_default", "init_intersect_line", "__esmMin", "__name", "intersectPolygon", "node", "polyPoints", "point", "x1", "y1", "intersections", "minX", "minY", "entry", "left", "top", "i", "p1", "p2", "intersect", "intersect_line_default", "p", "q", "pdx", "pdy", "distp", "qdx", "qdy", "distq", "intersect_polygon_default", "init_intersect_polygon", "__esmMin", "init_intersect_line", "__name", "intersectRect", "intersect_rect_default", "init_intersect_rect", "__esmMin", "__name", "node", "point", "x", "y", "dx", "dy", "w", "h", "sx", "sy", "intersect_default", "init_intersect", "__esmMin", "init_intersect_node", "init_intersect_circle", "init_intersect_ellipse", "init_intersect_polygon", "init_intersect_rect", "intersect_node_default", "intersect_circle_default", "intersect_ellipse_default", "intersect_polygon_default", "intersect_rect_default", "solidStateFill", "compileStyles", "styles2Map", "isLabelStyle", "styles2String", "userNodeOverrides", "getStrokeDashArray", "init_handDrawnShapeStyles", "__esmMin", "init_diagramAPI", "__name", "color", "handDrawnSeed", "getConfig", "node", "stylesMap", "styles", "styleMap", "style", "key", "value", "stylesArray", "labelStyles", "nodeStyles", "borderStyles", "backgroundStyles", "options", "themeVariables", "nodeBorder", "mainBkg", "strokeDasharrayStyle", "dashArray", "val", "first", "second", "t", "s", "o", "h", "r", "e", "n", "a", "i", "c", "l", "k", "b", "f", "d", "g", "M", "y", "m", "u", "p", "x", "w", "P", "v", "S", "O", "T", "D", "A", "$", "L", "j", "z", "G", "F", "E", "q", "V", "_", "Z", "I", "C", "W", "R", "__name", "Q", "H", "N", "B", "J", "K", "U", "X", "Y", "tt", "et", "st", "nt", "ot", "at", "init_rough_esm", "__esmMin", "anchor", "parent", "node", "labelStyles", "styles2String", "classes", "getNodeClasses", "cssClasses", "shapeSvg", "radius", "cssStyles", "rc", "at", "options", "userNodeOverrides", "roughNode", "circleElem", "handleUndefinedAttr", "updateNodeBounds", "point", "log", "intersect_default", "init_anchor", "__esmMin", "init_logger", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "init_utils", "__name", "generateArcPoints", "x1", "y1", "x2", "y2", "rx", "ry", "clockwise", "midX", "midY", "angle", "dx", "dy", "transformedX", "transformedY", "distance", "scaledCenterDistance", "centerX", "centerY", "startAngle", "angleRange", "points", "i", "t", "x", "y", "bowTieRect", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "cssStyles", "rc", "at", "options", "userNodeOverrides", "bowTieRectPath", "createPathFromPoints", "bowTieRectShapePath", "bowTieRectShape", "updateNodeBounds", "point", "intersect_default", "init_bowTieRect", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "__name", "insertPolygonShape", "parent", "w", "h", "points", "d", "init_insertPolygonShape", "__esmMin", "__name", "card", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "h", "padding", "w", "left", "right", "top", "bottom", "points", "polygon", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "insertPolygonShape", "updateNodeBounds", "point", "intersect_default", "init_card", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "init_insertPolygonShape", "__name", "choice", "parent", "node", "nodeStyles", "styles2String", "shapeSvg", "getNodeClasses", "cssStyles", "s", "points", "rc", "at", "options", "userNodeOverrides", "choicePath", "createPathFromPoints", "roughNode", "choiceShape", "point", "intersect_default", "init_choice", "__esmMin", "init_intersect", "init_rough_esm", "init_handDrawnShapeStyles", "init_util", "__name", "circle", "parent", "node", "options", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "halfPadding", "labelHelper", "getNodeClasses", "padding", "radius", "circleElem", "cssStyles", "rc", "at", "userNodeOverrides", "roughNode", "handleUndefinedAttr", "updateNodeBounds", "bounds", "point", "intersect_default", "log", "init_circle", "__esmMin", "init_rough_esm", "init_logger", "init_utils", "init_intersect", "init_handDrawnShapeStyles", "init_util", "__name", "createLine", "r", "xAxis45", "yAxis45", "lineLength", "pointQ1", "pointQ2", "pointQ3", "pointQ4", "crossedCircle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "getNodeClasses", "radius", "cssStyles", "rc", "at", "options", "userNodeOverrides", "circleNode", "linePath", "lineNode", "updateNodeBounds", "point", "log", "intersect_default", "init_crossedCircle", "__esmMin", "init_logger", "init_util", "init_handDrawnShapeStyles", "init_rough_esm", "init_intersect", "__name", "generateCirclePoints", "centerX", "centerY", "radius", "numPoints", "startAngle", "endAngle", "points", "startAngleRad", "angleStep", "i", "angle", "x", "y", "curlyBraceLeft", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "cssStyles", "rectPoints", "rc", "at", "options", "userNodeOverrides", "newCurlyBracePath", "createPathFromPoints", "curlyBraceLeftNode", "rectPath", "rectShape", "curlyBraceLeftShape", "updateNodeBounds", "point", "intersect_default", "init_curlyBraceLeft", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "__name", "generateCirclePoints", "centerX", "centerY", "radius", "numPoints", "startAngle", "endAngle", "points", "startAngleRad", "angleStep", "i", "angle", "x", "y", "curlyBraceRight", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "cssStyles", "rectPoints", "rc", "at", "options", "userNodeOverrides", "newCurlyBracePath", "createPathFromPoints", "curlyBraceRightNode", "rectPath", "rectShape", "curlyBraceRightShape", "updateNodeBounds", "point", "intersect_default", "init_curlyBraceRight", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "__name", "generateCirclePoints", "centerX", "centerY", "radius", "numPoints", "startAngle", "endAngle", "points", "startAngleRad", "angleStep", "i", "angle", "x", "y", "curlyBraces", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "cssStyles", "leftCurlyBracePoints", "rightCurlyBracePoints", "rectPoints", "rc", "at", "options", "userNodeOverrides", "newLeftCurlyBracePath", "createPathFromPoints", "leftCurlyBraceNode", "newRightCurlyBracePath", "rightCurlyBraceNode", "rectPath", "rectShape", "curlyBracesShape", "updateNodeBounds", "point", "intersect_default", "init_curlyBraces", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "__name", "curvedTrapezoid", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "minWidth", "minHeight", "w", "radius", "cssStyles", "rc", "at", "options", "userNodeOverrides", "totalWidth", "totalHeight", "rw", "tw", "points", "generateCirclePoints", "pathData", "createPathFromPoints", "shapeNode", "polygon", "updateNodeBounds", "point", "intersect_default", "init_curvedTrapezoid", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "__name", "cylinder", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "rx", "ry", "h", "cssStyles", "rc", "at", "outerPathData", "createOuterCylinderPathD", "innerPathData", "createInnerCylinderPathD", "outerNode", "userNodeOverrides", "innerLine", "pathData", "createCylinderPathD", "handleUndefinedAttr", "updateNodeBounds", "point", "pos", "intersect_default", "x", "y", "init_cylinder", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "init_utils", "__name", "width", "height", "dividedRectangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "rectOffset", "x", "y", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pts", "poly", "p", "polygon", "updateNodeBounds", "point", "intersect_default", "init_dividedRect", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "__name", "doublecircle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "halfPadding", "labelHelper", "getNodeClasses", "outerRadius", "innerRadius", "circleGroup", "cssStyles", "rc", "at", "outerOptions", "userNodeOverrides", "innerOptions", "outerRoughNode", "innerRoughNode", "handleUndefinedAttr", "outerCircle", "innerCircle", "updateNodeBounds", "point", "log", "intersect_default", "init_doubleCircle", "__esmMin", "init_logger", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "init_utils", "__name", "filledCircle", "parent", "node", "themeVariables", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "getNodeClasses", "radius", "cssStyles", "rc", "at", "nodeBorder", "options", "userNodeOverrides", "circleNode", "updateNodeBounds", "point", "log", "intersect_default", "init_filledCircle", "__esmMin", "init_rough_esm", "init_logger", "init_intersect", "init_handDrawnShapeStyles", "init_util", "__name", "flippedTriangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "tw", "points", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "updateNodeBounds", "point", "log", "intersect_default", "init_flippedTriangle", "__esmMin", "init_logger", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "__name", "forkJoin", "parent", "node", "dir", "state", "themeVariables", "nodeStyles", "styles2String", "shapeSvg", "getNodeClasses", "cssStyles", "width", "height", "x", "y", "rc", "at", "options", "userNodeOverrides", "roughNode", "shape", "updateNodeBounds", "padding", "point", "intersect_default", "init_forkJoin", "__esmMin", "init_rough_esm", "init_intersect", "init_handDrawnShapeStyles", "init_util", "__name", "halfRoundedRectangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "minWidth", "minHeight", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "radius", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "generateCirclePoints", "pathData", "createPathFromPoints", "shapeNode", "polygon", "updateNodeBounds", "point", "log", "intersect_default", "init_halfRoundedRectangle", "__esmMin", "init_logger", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "__name", "hexagon", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "h", "w", "cssStyles", "rc", "at", "options", "userNodeOverrides", "halfWidth", "m", "halfHeight", "fixedLength", "deducedWidth", "points", "pathData", "createPathFromPoints", "shapeNode", "polygon", "updateNodeBounds", "point", "intersect_default", "init_hexagon", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "__name", "hourglass", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "labelHelper", "getNodeClasses", "w", "h", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "pathData", "createPathFromPoints", "shapeNode", "polygon", "updateNodeBounds", "point", "log", "intersect_default", "init_hourglass", "__esmMin", "init_logger", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "__name", "icon", "parent", "node", "themeVariables", "flowchart", "labelStyles", "styles2String", "assetHeight", "assetWidth", "iconSize", "defaultWidth", "shapeSvg", "bbox", "label", "labelHelper", "topLabel", "height", "width", "nodeBorder", "stylesMap", "compileStyles", "y", "labelPadding", "rc", "at", "options", "userNodeOverrides", "iconNode", "outerWidth", "outerHeight", "outerNode", "iconShape", "outerShape", "iconElem", "getIconSVG", "iconBBox", "iconWidth", "iconHeight", "iconX", "iconY", "updateNodeBounds", "point", "log", "intersect_default", "dx", "dy", "nodeHeight", "points", "init_icon", "__esmMin", "init_rough_esm", "init_logger", "init_icons", "init_intersect", "init_handDrawnShapeStyles", "init_util", "__name", "iconCircle", "parent", "node", "themeVariables", "flowchart", "labelStyles", "styles2String", "assetHeight", "assetWidth", "iconSize", "defaultWidth", "shapeSvg", "bbox", "label", "labelHelper", "padding", "labelPadding", "topLabel", "nodeBorder", "mainBkg", "stylesMap", "compileStyles", "rc", "at", "options", "userNodeOverrides", "fill", "iconElem", "getIconSVG", "iconBBox", "iconWidth", "iconHeight", "iconX", "iconY", "diameter", "iconNode", "outerWidth", "outerHeight", "outerNode", "iconShape", "outerShape", "updateNodeBounds", "point", "log", "intersect_default", "init_iconCircle", "__esmMin", "init_rough_esm", "init_logger", "init_icons", "init_intersect", "init_handDrawnShapeStyles", "init_util", "__name", "createRoundedRectPathD", "init_roundedRectPath", "__esmMin", "__name", "x", "y", "totalWidth", "totalHeight", "radius", "iconRounded", "parent", "node", "themeVariables", "flowchart", "labelStyles", "styles2String", "assetHeight", "assetWidth", "iconSize", "defaultWidth", "shapeSvg", "bbox", "halfPadding", "label", "labelHelper", "topLabel", "height", "width", "nodeBorder", "mainBkg", "stylesMap", "compileStyles", "x", "y", "labelPadding", "rc", "at", "options", "userNodeOverrides", "fill", "iconNode", "createRoundedRectPathD", "outerWidth", "outerHeight", "outerNode", "iconShape", "outerShape", "iconElem", "getIconSVG", "iconBBox", "iconWidth", "iconHeight", "iconX", "iconY", "updateNodeBounds", "point", "log", "intersect_default", "dx", "dy", "nodeHeight", "points", "init_iconRounded", "__esmMin", "init_rough_esm", "init_logger", "init_icons", "init_intersect", "init_handDrawnShapeStyles", "init_roundedRectPath", "init_util", "__name", "iconSquare", "parent", "node", "themeVariables", "flowchart", "labelStyles", "styles2String", "assetHeight", "assetWidth", "iconSize", "defaultWidth", "shapeSvg", "bbox", "halfPadding", "label", "labelHelper", "topLabel", "height", "width", "nodeBorder", "mainBkg", "stylesMap", "compileStyles", "x", "y", "labelPadding", "rc", "at", "options", "userNodeOverrides", "fill", "iconNode", "createRoundedRectPathD", "outerWidth", "outerHeight", "outerNode", "iconShape", "outerShape", "iconElem", "getIconSVG", "iconBBox", "iconWidth", "iconHeight", "iconX", "iconY", "updateNodeBounds", "point", "log", "intersect_default", "dx", "dy", "nodeHeight", "points", "init_iconSquare", "__esmMin", "init_rough_esm", "init_logger", "init_icons", "init_intersect", "init_roundedRectPath", "init_handDrawnShapeStyles", "init_util", "__name", "imageSquare", "parent", "node", "flowchart", "img", "imageNaturalWidth", "imageNaturalHeight", "labelStyles", "styles2String", "defaultWidth", "imageRawWidth", "imageWidth", "imageHeight", "shapeSvg", "bbox", "label", "labelHelper", "topLabel", "x", "y", "labelPadding", "rc", "at", "options", "userNodeOverrides", "imageNode", "outerWidth", "outerHeight", "outerNode", "iconShape", "outerShape", "image", "updateNodeBounds", "point", "log", "intersect_default", "dx", "dy", "nodeHeight", "points", "init_imageSquare", "__esmMin", "init_rough_esm", "init_logger", "init_intersect", "init_handDrawnShapeStyles", "init_util", "__name", "inv_trapezoid", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "points", "polygon", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "insertPolygonShape", "updateNodeBounds", "point", "intersect_default", "init_invertedTrapezoid", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "init_insertPolygonShape", "__name", "drawRect", "parent", "node", "options", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "totalWidth", "totalHeight", "x", "y", "rect", "rx", "ry", "cssStyles", "rc", "at", "userNodeOverrides", "roughNode", "createRoundedRectPathD", "handleUndefinedAttr", "updateNodeBounds", "bounds", "point", "intersect_default", "init_drawRect", "__esmMin", "init_util", "init_intersect", "init_roundedRectPath", "init_handDrawnShapeStyles", "init_rough_esm", "init_utils", "__name", "labelRect", "parent", "node", "shapeSvg", "bbox", "label", "labelHelper", "rect", "updateNodeBounds", "point", "intersect_default", "init_labelRect", "__esmMin", "init_drawRect", "init_util", "init_intersect", "__name", "lean_left", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "points", "polygon", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "insertPolygonShape", "updateNodeBounds", "point", "intersect_default", "init_leanLeft", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "init_insertPolygonShape", "__name", "lean_right", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "points", "polygon", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "insertPolygonShape", "updateNodeBounds", "point", "intersect_default", "init_leanRight", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "init_insertPolygonShape", "__name", "lightningBolt", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "getNodeClasses", "cssStyles", "width", "height", "gap", "points", "rc", "at", "options", "userNodeOverrides", "linePath", "createPathFromPoints", "lineNode", "updateNodeBounds", "point", "log", "intersect_default", "init_lightningBolt", "__esmMin", "init_logger", "init_util", "init_handDrawnShapeStyles", "init_rough_esm", "init_intersect", "__name", "linedCylinder", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "rx", "ry", "h", "outerOffset", "cylinder", "cssStyles", "rc", "at", "outerPathData", "createOuterCylinderPathD", "innerPathData", "createInnerCylinderPathD", "options", "userNodeOverrides", "outerNode", "innerLine", "pathData", "createCylinderPathD", "handleUndefinedAttr", "updateNodeBounds", "point", "pos", "intersect_default", "x", "y", "init_linedCylinder", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "init_utils", "__name", "width", "height", "linedWaveEdgedRect", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "waveAmplitude", "finalH", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "generateFullSineWavePoints", "poly", "p", "waveEdgeRect", "updateNodeBounds", "point", "intersect_default", "init_linedWaveEdgedRect", "__esmMin", "init_util", "init_intersect", "init_rough_esm", "init_handDrawnShapeStyles", "__name", "multiRect", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "rectOffset", "x", "y", "cssStyles", "rc", "at", "options", "userNodeOverrides", "outerPathPoints", "innerPathPoints", "outerPath", "createPathFromPoints", "outerNode", "innerPath", "innerNode", "updateNodeBounds", "point", "intersect_default", "init_multiRect", "__esmMin", "init_util", "init_handDrawnShapeStyles", "init_rough_esm", "init_intersect", "__name", "multiWaveEdgedRectangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "waveAmplitude", "finalH", "x", "y", "rectOffset", "cssStyles", "wavePoints", "generateFullSineWavePoints", "lastWavePoint", "outerPathPoints", "innerPathPoints", "rc", "at", "options", "userNodeOverrides", "outerPath", "createPathFromPoints", "outerNode", "innerPath", "innerNode", "shape", "updateNodeBounds", "point", "intersect_default", "init_multiWaveEdgedRectangle", "__esmMin", "init_util", "init_intersect", "init_rough_esm", "init_handDrawnShapeStyles", "__name", "note", "parent", "node", "themeVariables", "labelStyles", "nodeStyles", "styles2String", "getConfig", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "totalWidth", "totalHeight", "x", "y", "cssStyles", "rc", "at", "options", "userNodeOverrides", "noteShapeNode", "rect", "updateNodeBounds", "point", "intersect_default", "init_note", "__esmMin", "init_rough_esm", "init_intersect", "init_handDrawnShapeStyles", "init_util", "init_config", "__name", "question", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "s", "adjustment", "points", "polygon", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createDecisionBoxPathD", "roughNode", "insertPolygonShape", "updateNodeBounds", "bounds", "point", "res", "intersect_default", "init_question", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "init_insertPolygonShape", "__name", "x", "y", "size", "rect_left_inv_arrow", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "x", "y", "notch", "points", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "polygon", "updateNodeBounds", "point", "intersect_default", "init_rectLeftInvArrow", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "__name", "applyStyle", "dom", "styleFn", "addHtmlLabel", "node", "fo", "select_default", "div", "config", "getConfig", "label", "hasKatex", "renderKatexSanitized", "common_default", "labelSpan", "sanitizeText", "createLabel", "createLabel_default", "init_createLabel", "__esmMin", "init_src", "init_diagramAPI", "init_common", "init_logger", "init_utils", "__name", "_vertexText", "style", "isTitle", "isNode", "vertexText", "evaluate", "log", "decodeEntities", "s", "svgLabel", "rows", "row", "tspan", "rectWithTitle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "classes", "shapeSvg", "g", "label", "description", "title", "text", "createLabel_default", "bbox", "evaluate", "getConfig", "div", "dv", "select_default", "log", "textRows", "titleBox", "descr", "halfPadding", "totalWidth", "totalHeight", "x", "y", "rect", "innerLine", "rc", "at", "options", "userNodeOverrides", "roughNode", "createRoundedRectPathD", "roughLine", "updateNodeBounds", "point", "intersect_default", "init_rectWithTitle", "__esmMin", "init_src", "init_common", "init_util", "init_createLabel", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "init_diagramAPI", "init_roundedRectPath", "init_logger", "__name", "generateArcPoints", "x1", "y1", "x2", "y2", "rx", "ry", "clockwise", "midX", "midY", "angle", "dx", "dy", "transformedX", "transformedY", "distance", "scaledCenterDistance", "centerX", "centerY", "startAngle", "angleRange", "points", "i", "t", "x", "y", "roundedRect", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "labelPaddingX", "labelPaddingY", "w", "radius", "taper", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "shapeNode", "polygon", "updateNodeBounds", "point", "intersect_default", "init_roundedRect", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "__name", "shadedProcess", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "halfPadding", "w", "x", "y", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "roughNode", "p", "rect", "handleUndefinedAttr", "updateNodeBounds", "point", "intersect_default", "init_shadedProcess", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "init_utils", "__name", "slopedRect", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "x", "y", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "pathData", "createPathFromPoints", "shapeNode", "polygon", "updateNodeBounds", "point", "intersect_default", "init_slopedRect", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "__name", "squareRect", "parent", "node", "options", "drawRect", "init_squareRect", "__esmMin", "init_drawRect", "__name", "stadium", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "h", "w", "radius", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "generateCirclePoints", "pathData", "createPathFromPoints", "shapeNode", "polygon", "updateNodeBounds", "point", "intersect_default", "init_stadium", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "__name", "state", "parent", "node", "drawRect", "init_state", "__esmMin", "init_drawRect", "__name", "stateEnd", "parent", "node", "themeVariables", "labelStyles", "nodeStyles", "styles2String", "cssStyles", "lineColor", "stateBorder", "nodeBorder", "shapeSvg", "rc", "at", "options", "userNodeOverrides", "roughNode", "innerFill", "roughInnerNode", "circle", "updateNodeBounds", "point", "intersect_default", "init_stateEnd", "__esmMin", "init_rough_esm", "init_intersect", "init_handDrawnShapeStyles", "init_util", "__name", "stateStart", "parent", "node", "themeVariables", "lineColor", "shapeSvg", "circle", "roughNode", "at", "solidStateFill", "updateNodeBounds", "point", "intersect_default", "init_stateStart", "__esmMin", "init_rough_esm", "init_intersect", "init_handDrawnShapeStyles", "init_util", "__name", "subroutine", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "halfPadding", "w", "h", "x", "y", "points", "rc", "at", "options", "userNodeOverrides", "roughNode", "l1", "l2", "rect", "cssStyles", "handleUndefinedAttr", "updateNodeBounds", "el", "insertPolygonShape", "point", "intersect_default", "init_subroutine", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "init_insertPolygonShape", "init_utils", "__name", "taggedRect", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "x", "y", "tagWidth", "tagHeight", "cssStyles", "rc", "at", "options", "userNodeOverrides", "rectPoints", "tagPoints", "rectPath", "createPathFromPoints", "rectNode", "tagPath", "tagNode", "updateNodeBounds", "point", "intersect_default", "init_taggedRect", "__esmMin", "init_util", "init_handDrawnShapeStyles", "init_rough_esm", "init_intersect", "__name", "taggedWaveEdgedRectangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "waveAmplitude", "tagWidth", "tagHeight", "finalH", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "generateFullSineWavePoints", "y", "tagPoints", "waveEdgeRectPath", "createPathFromPoints", "waveEdgeRectNode", "taggedWaveEdgeRectPath", "taggedWaveEdgeRectNode", "waveEdgeRect", "updateNodeBounds", "point", "intersect_default", "init_taggedWaveEdgedRectangle", "__esmMin", "init_util", "init_intersect", "init_rough_esm", "init_handDrawnShapeStyles", "__name", "text", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "totalWidth", "totalHeight", "x", "y", "rect", "updateNodeBounds", "point", "intersect_default", "init_text", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "__name", "tiltedCylinder", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "halfPadding", "labelHelper", "getNodeClasses", "labelPadding", "ry", "rx", "w", "cssStyles", "cylinder", "rc", "at", "outerPathData", "createOuterCylinderPathD", "innerPathData", "createInnerCylinderPathD", "outerNode", "userNodeOverrides", "innerLine", "pathData", "createCylinderPathD", "handleUndefinedAttr", "updateNodeBounds", "point", "pos", "intersect_default", "y", "x", "init_tiltedCylinder", "__esmMin", "init_util", "init_handDrawnShapeStyles", "init_rough_esm", "init_intersect", "init_utils", "__name", "width", "height", "trapezoid", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "w", "h", "points", "polygon", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "insertPolygonShape", "updateNodeBounds", "point", "intersect_default", "init_trapezoid", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "init_insertPolygonShape", "__name", "trapezoidalPentagon", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "minWidth", "minHeight", "w", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "pathData", "createPathFromPoints", "shapeNode", "polygon", "updateNodeBounds", "point", "intersect_default", "init_trapezoidalPentagon", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "__name", "triangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "useHtmlLabels", "evaluate", "getConfig", "w", "tw", "points", "cssStyles", "rc", "at", "options", "userNodeOverrides", "pathData", "createPathFromPoints", "roughNode", "polygon", "updateNodeBounds", "point", "log", "intersect_default", "init_triangle", "__esmMin", "init_logger", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "init_common", "init_diagramAPI", "__name", "waveEdgedRectangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "waveAmplitude", "finalH", "cssStyles", "widthDif", "extraW", "rc", "at", "options", "userNodeOverrides", "points", "generateFullSineWavePoints", "waveEdgeRectPath", "createPathFromPoints", "waveEdgeRectNode", "waveEdgeRect", "updateNodeBounds", "point", "intersect_default", "init_waveEdgedRectangle", "__esmMin", "init_util", "init_intersect", "init_rough_esm", "init_handDrawnShapeStyles", "__name", "waveRectangle", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "labelHelper", "getNodeClasses", "minWidth", "minHeight", "baseWidth", "baseHeight", "aspectRatio", "w", "h", "waveAmplitude", "finalH", "cssStyles", "rc", "at", "options", "userNodeOverrides", "points", "generateFullSineWavePoints", "waveRectPath", "createPathFromPoints", "waveRectNode", "waveRect", "updateNodeBounds", "point", "intersect_default", "init_waveRectangle", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "__name", "windowPane", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "label", "labelHelper", "getNodeClasses", "w", "h", "rectOffset", "x", "y", "cssStyles", "rc", "at", "options", "userNodeOverrides", "outerPathPoints", "path", "no", "updateNodeBounds", "point", "intersect_default", "init_windowPane", "__esmMin", "init_util", "init_handDrawnShapeStyles", "init_rough_esm", "init_intersect", "__name", "erBox", "parent", "node", "entityNode", "themeVariables", "getConfig", "background", "backgroundNode", "config", "PADDING", "TEXT_PADDING", "cssStyles", "labelStyles", "nodeStyles", "styles2String", "options", "calculateTextWidth", "shapeSvg", "drawRect", "evaluate", "textElement", "bbox", "cssClasses", "getNodeClasses", "nameBBox", "addText", "yOffset", "yOffsets", "rows", "maxTypeWidth", "maxNameWidth", "maxKeysWidth", "maxCommentWidth", "keysPresent", "commentPresent", "attribute", "typeBBox", "keysBBox", "commentBBox", "rowHeight", "totalWidthSections", "shapeBBox", "difference", "maxWidth", "rc", "at", "userNodeOverrides", "totalShapeBBoxHeight", "sum", "row", "w", "h", "x", "y", "_", "i", "nodes", "text", "select_default", "transform", "translateX", "translateY", "translate", "roughRect", "rect", "rowEven", "rowOdd", "nodeBorder", "isEven", "roughLine", "updateNodeBounds", "strokeStyles", "e", "s", "point", "intersect_default", "labelText", "classes", "style", "label", "parseGenericTypes", "createText", "child", "div", "dv", "init_erBox", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "init_drawRect", "init_config", "init_createText", "init_common", "init_src", "init_utils", "__name", "textHelper", "parent", "node", "config", "useHtmlLabels", "GAP", "TEXT_PADDING", "shapeSvg", "getNodeClasses", "annotationGroup", "labelGroup", "membersGroup", "methodsGroup", "annotationGroupHeight", "labelGroupHeight", "membersGroupHeight", "annotation", "addText", "labelGroupBBox", "yOffset", "member", "height", "methodsYOffset", "method", "bbox", "annotationGroupBBox", "parentGroup", "styles", "textEl", "getConfig", "evaluate", "textContent", "hasKatex", "text", "createText", "sanitizeText", "decodeEntities", "calculateTextWidth", "numberOfLines", "div", "dv", "select_default", "images", "noImgText", "img", "res", "setupImage", "bodyFontSize", "width", "__name", "textChild", "init_shapeUtil", "__esmMin", "init_src", "init_config", "init_util", "init_utils", "init_diagramAPI", "init_createText", "init_common", "classBox", "parent", "node", "config", "getConfig", "PADDING", "GAP", "useHtmlLabels", "evaluate", "classNode", "shapeSvg", "bbox", "textHelper", "labelStyles", "nodeStyles", "styles2String", "styles", "renderExtraBox", "rc", "at", "options", "userNodeOverrides", "w", "h", "y", "roughRect", "rect", "rectBBox", "_", "i", "nodes", "text", "select_default", "transform", "translateY", "translate", "newTranslateY", "newTranslateX", "annotationGroupHeight", "labelGroupHeight", "membersGroupHeight", "roughLine", "colorRegex", "match", "colorStyle", "updateNodeBounds", "point", "intersect_default", "init_classBox", "__esmMin", "init_util", "init_diagramAPI", "init_src", "init_rough_esm", "init_handDrawnShapeStyles", "init_intersect", "init_shapeUtil", "init_common", "__name", "requirementBox", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "requirementNode", "elementNode", "padding", "gap", "isRequirementNode", "classes", "getNodeClasses", "shapeSvg", "typeHeight", "addText", "accumulativeHeight", "nameHeight", "idHeight", "textHeight", "riskHeight", "totalWidth", "totalHeight", "x", "y", "rc", "at", "options", "userNodeOverrides", "roughRect", "rect", "_", "i", "nodes", "text", "select_default", "transform", "translateX", "translateY", "translate", "newTranslateY", "newTranslateX", "roughLine", "updateNodeBounds", "point", "intersect_default", "parentGroup", "inputText", "yOffset", "style", "textEl", "config", "getConfig", "useHtmlLabels", "createText", "sanitizeText", "decodeEntities", "calculateTextWidth", "bbox", "div", "dv", "textChild", "child", "init_requirementBox", "__esmMin", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "init_utils", "init_diagramAPI", "init_createText", "init_src", "__name", "kanbanItem", "parent", "kanbanNode", "config", "labelStyles", "nodeStyles", "styles2String", "labelPaddingX", "orgWidth", "shapeSvg", "bbox", "labelElTitle", "labelHelper", "getNodeClasses", "padding", "ticketUrl", "link", "options", "labelEl", "bbox2", "insertLabel", "labelElAssigned", "bboxAssigned", "labelPaddingY", "totalWidth", "heightAdj", "totalHeight", "x", "y", "rect", "rx", "ry", "cssStyles", "rc", "at", "userNodeOverrides", "roughNode", "createRoundedRectPathD", "priority", "line", "lineX", "y1", "y2", "colorFromPriority", "updateNodeBounds", "point", "intersect_default", "init_kanbanItem", "__esmMin", "init_util", "init_intersect", "init_roundedRectPath", "init_handDrawnShapeStyles", "init_rough_esm", "__name", "bang", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "halfPadding", "label", "labelHelper", "getNodeClasses", "w", "r", "cssStyles", "minWidth", "minHeight", "effectiveWidth", "effectiveHeight", "bangElem", "path", "rc", "at", "options", "userNodeOverrides", "roughNode", "handleUndefinedAttr", "updateNodeBounds", "bounds", "point", "intersect_default", "log", "init_bang", "__esmMin", "init_logger", "init_util", "init_intersect", "init_handDrawnShapeStyles", "init_rough_esm", "init_utils", "__name", "cloud", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "halfPadding", "label", "labelHelper", "getNodeClasses", "w", "r1", "r2", "r3", "r4", "cssStyles", "cloudElem", "path", "rc", "at", "options", "userNodeOverrides", "roughNode", "handleUndefinedAttr", "updateNodeBounds", "bounds", "point", "intersect_default", "log", "init_cloud", "__esmMin", "init_rough_esm", "init_logger", "init_utils", "init_intersect", "init_handDrawnShapeStyles", "init_util", "__name", "defaultMindmapNode", "parent", "node", "labelStyles", "nodeStyles", "styles2String", "shapeSvg", "bbox", "halfPadding", "label", "labelHelper", "getNodeClasses", "w", "rd", "rectPath", "bg", "updateNodeBounds", "bounds", "point", "intersect_default", "init_defaultMindmapNode", "__esmMin", "init_intersect", "init_handDrawnShapeStyles", "init_util", "__name", "mindmapCircle", "parent", "node", "options", "circle", "init_mindmapCircle", "__esmMin", "init_circle", "__name", "isValidShape", "shape", "shapes", "shapesDefs", "generateShapeMap", "init_shapes", "__esmMin", "init_anchor", "init_bowTieRect", "init_card", "init_choice", "init_circle", "init_crossedCircle", "init_curlyBraceLeft", "init_curlyBraceRight", "init_curlyBraces", "init_curvedTrapezoid", "init_cylinder", "init_dividedRect", "init_doubleCircle", "init_filledCircle", "init_flippedTriangle", "init_forkJoin", "init_halfRoundedRectangle", "init_hexagon", "init_hourglass", "init_icon", "init_iconCircle", "init_iconRounded", "init_iconSquare", "init_imageSquare", "init_invertedTrapezoid", "init_labelRect", "init_leanLeft", "init_leanRight", "init_lightningBolt", "init_linedCylinder", "init_linedWaveEdgedRect", "init_multiRect", "init_multiWaveEdgedRectangle", "init_note", "init_question", "init_rectLeftInvArrow", "init_rectWithTitle", "init_roundedRect", "init_shadedProcess", "init_slopedRect", "init_squareRect", "init_stadium", "init_state", "init_stateEnd", "init_stateStart", "init_subroutine", "init_taggedRect", "init_taggedWaveEdgedRectangle", "init_text", "init_tiltedCylinder", "init_trapezoid", "init_trapezoidalPentagon", "init_triangle", "init_waveEdgedRectangle", "init_waveRectangle", "init_windowPane", "init_erBox", "init_classBox", "init_requirementBox", "init_kanbanItem", "init_bang", "init_cloud", "init_defaultMindmapNode", "init_mindmapCircle", "squareRect", "roundedRect", "stadium", "subroutine", "cylinder", "circle", "bang", "cloud", "question", "hexagon", "lean_right", "lean_left", "trapezoid", "inv_trapezoid", "doublecircle", "text", "card", "shadedProcess", "stateStart", "stateEnd", "forkJoin", "hourglass", "curlyBraceLeft", "curlyBraceRight", "curlyBraces", "lightningBolt", "waveEdgedRectangle", "halfRoundedRectangle", "tiltedCylinder", "linedCylinder", "curvedTrapezoid", "dividedRectangle", "triangle", "windowPane", "filledCircle", "trapezoidalPentagon", "flippedTriangle", "slopedRect", "multiWaveEdgedRectangle", "multiRect", "bowTieRect", "crossedCircle", "taggedWaveEdgedRectangle", "taggedRect", "waveRectangle", "rect_left_inv_arrow", "linedWaveEdgedRect", "__name", "entries", "state", "choice", "note", "rectWithTitle", "labelRect", "iconSquare", "iconCircle", "icon", "iconRounded", "imageSquare", "anchor", "kanbanItem", "mindmapCircle", "defaultMindmapNode", "classBox", "erBox", "requirementBox", "alias", "MERMAID_DOM_ID_PREFIX", "FlowDB", "init_flowDb", "__esmMin", "init_src", "init_js_yaml", "init_diagramAPI", "init_logger", "init_shapes", "init_utils", "init_common", "init_commonDb", "getConfig", "setAccTitle", "setAccDescription", "setDiagramTitle", "getAccTitle", "getAccDescription", "getDiagramTitle", "__name", "txt", "common_default", "id", "vertex", "textObj", "type", "style", "classes", "dir", "props", "metadata", "doc", "yamlData", "load", "JSON_SCHEMA", "edge", "e", "edgeDoc", "s", "isValidShape", "_start", "_end", "log", "linkTextObj", "existingLinks", "getEdgeId", "value", "linkData", "start", "end", "isLastStart", "isFirstEnd", "positions", "interpolate", "pos", "ids", "_style", "classNode", "newStyle", "className", "subGraph", "tooltip", "functionName", "functionArgs", "domId", "argList", "i", "item", "elem", "utils_default", "linkStr", "target", "element", "fun", "tooltipElem", "select_default", "el", "rect", "ver", "clear", "_id", "list", "_title", "title", "result", "a", "prims", "objs", "nodeList", "flowchartConfig", "nodes", "count", "posCount", "childPos", "res", "_str", "str", "stroke", "char", "length", "line", "dots", "_startStr", "info", "startInfo", "allSgs", "sg", "allSubgraphs", "node", "arrowTypeStart", "arrowTypeEnd", "parentDB", "subGraphDB", "config", "look", "parentId", "isGroup", "baseNode", "classDefs", "compiledStyles", "customClass", "cssClass", "edges", "subGraphs", "rawEdge", "index", "styles", "defaultConfig", "getDiagramElement", "init_insertElementsForSize", "__esmMin", "init_src", "__name", "id", "securityLevel", "sandboxElement", "select_default", "getSubGraphTitleMargins", "init_subGraphTitleMargins", "__esmMin", "__name", "flowchart", "subGraphTitleTopMargin", "subGraphTitleBottomMargin", "subGraphTitleTotalMargin", "rect", "noteGroup", "roundedWithTitle", "kanbanSection", "divider", "squareRect", "shapes", "clusterElems", "insertCluster", "clear", "init_clusters", "__esmMin", "init_diagramAPI", "init_common", "init_logger", "init_subGraphTitleMargins", "init_src", "init_rough_esm", "init_createText", "init_intersect_rect", "init_createLabel", "init_roundedRectPath", "init_handDrawnShapeStyles", "__name", "parent", "node", "log", "siteConfig", "getConfig", "themeVariables", "handDrawnSeed", "clusterBkg", "clusterBorder", "labelStyles", "nodeStyles", "borderStyles", "backgroundStyles", "styles2String", "shapeSvg", "useHtmlLabels", "evaluate", "labelEl", "text", "createText", "bbox", "div", "dv", "select_default", "width", "height", "x", "y", "rc", "at", "options", "userNodeOverrides", "roughNode", "createRoundedRectPathD", "subGraphTitleTopMargin", "getSubGraphTitleMargins", "span", "rectBox", "point", "intersect_rect_default", "padding", "halfPadding", "altBackground", "compositeBackground", "compositeTitleBackground", "nodeBorder", "outerRectG", "label", "innerRect", "createLabel_default", "innerHeight", "innerY", "isAlt", "roughOuterNode", "roughInnerNode", "elem", "shape", "cluster", "calculateDeltaAndAngle", "point1", "point2", "pointTransformer", "x1", "y1", "x2", "y2", "deltaX", "deltaY", "markerOffsets", "markerOffsets2", "getLineFunctionsWithOffset", "init_lineWithOffset", "__esmMin", "__name", "data", "edge", "d", "i", "offset", "DIRECTION", "angle", "differenceToEnd", "differenceInYEnd", "differenceToStart", "differenceInYStart", "startMarkerHeight", "endMarkerHeight", "extraRoom", "adjustment", "differenceInXEnd", "differenceInXStart", "addEdgeMarkers", "arrowTypesMap", "addEdgeMarker", "init_edgeMarker", "__esmMin", "init_logger", "__name", "svgPath", "edge", "url", "id", "diagramType", "strokeColor", "position", "arrowType", "arrowTypeInfo", "log", "endMarkerType", "originalMarkerId", "colorId", "coloredMarkerId", "originalMarker", "coloredMarker", "path", "setTerminalWidth", "fo", "value", "getConfig", "extractCornerPoints", "points", "cornerPoints", "cornerPointPositions", "i", "prev", "curr", "next", "generateRoundedPath", "radius", "path", "size", "epsilon", "currPoint", "prevPoint", "nextPoint", "dx1", "dy1", "dx2", "dy2", "len1", "len2", "nx1", "ny1", "nx2", "ny2", "dot", "clampedDot", "angle", "cutLen", "startX", "startY", "endX", "endY", "calculateDeltaAndAngle", "point1", "point2", "deltaX", "deltaY", "applyMarkerOffsetsToPoints", "edge", "newPoints", "point", "markerOffsets", "offsetValue", "offsetX", "offsetY", "edgeLabels", "terminalLabels", "clear", "getLabelStyles", "insertEdgeLabel", "positionEdgeLabel", "outsideNode", "intersection", "cutPathAtIntersect", "findAdjacentPoint", "fixCorners", "generateDashArray", "insertEdge", "init_edges", "__esmMin", "init_diagramAPI", "init_common", "init_logger", "init_createText", "init_utils", "init_lineWithOffset", "init_subGraphTitleMargins", "init_src", "init_rough_esm", "init_createLabel", "init_edgeMarker", "init_handDrawnShapeStyles", "__name", "styleArray", "acc", "style", "elem", "useHtmlLabels", "evaluate", "labelStyles", "styles2String", "labelElement", "createText", "log", "edgeLabel", "label", "bbox", "div", "dv", "select_default", "startLabelElement", "createLabel_default", "startEdgeLabelLeft", "inner", "slBox", "startEdgeLabelRight", "endLabelElement", "endEdgeLabelLeft", "endEdgeLabelRight", "paths", "siteConfig", "subGraphTitleTotalMargin", "getSubGraphTitleMargins", "el", "x", "y", "pos", "utils_default", "node", "dx", "dy", "w", "h", "outsidePoint", "insidePoint", "r", "Q", "R", "q", "res", "_x", "_y", "_points", "boundaryNode", "lastPointOutside", "isInside", "inter", "pointPresent", "p", "e", "pointA", "pointB", "distance", "xDiff", "yDiff", "length", "ratio", "lineData", "newLineData", "cornerPoint", "newPrevPoint", "newNextPoint", "a", "newCornerPoint", "len", "oValueS", "oValueE", "middleLength", "dashLength", "gapLength", "dashGapPairLength", "numberOfPairs", "middlePattern", "clusterDb", "diagramType", "startNode", "endNode", "id", "skipIntersect", "handDrawnSeed", "pointsHasChanged", "tail", "head", "edgeClassStyles", "key", "isLabelStyle", "pointsStr", "curve", "basis_default", "linear_default", "cardinal_default", "bumpX", "bumpY", "catmullRom_default", "monotoneX", "monotoneY", "natural_default", "step_default", "stepAfter", "stepBefore", "getLineFunctionsWithOffset", "lineFunction", "line_default", "strokeClasses", "svgPath", "linePath", "edgeStyles", "strokeColor", "animatedEdge", "rc", "at", "svgPathNode", "d", "stylesFromClasses", "styles", "animationClass", "pathStyle", "pathNode", "markerOffsets2", "mOffset", "url", "addEdgeMarkers", "midIndex", "insertMarkers", "extension", "composition", "aggregation", "dependency", "lollipop", "point", "circle", "cross", "barb", "only_one", "zero_or_one", "one_or_more", "zero_or_more", "requirement_arrow", "requirement_contains", "markers", "markers_default", "init_markers", "__esmMin", "init_logger", "__name", "elem", "markerArray", "type", "id", "markerName", "log", "startMarker", "endMarker", "containsNode", "insertNode", "elem", "node", "renderOptions", "newEl", "el", "shapeHandler", "shapes", "target", "nodeElems", "setNodeElem", "clear", "positionNode", "init_nodes", "__esmMin", "init_logger", "init_shapes", "__name", "log", "padding", "diff", "internalHelpers", "init_internals", "__esmMin", "init_config", "init_common", "init_logger", "init_clusters", "init_edges", "init_markers", "init_nodes", "init_util", "init_utils", "common_default", "getConfig", "insertCluster", "insertEdge", "insertEdgeLabel", "markers_default", "insertNode", "interpolateToCurve", "labelHelper", "log", "positionEdgeLabel", "isSymbol", "value", "isObjectLike_default", "baseGetTag_default", "symbolTag", "isSymbol_default", "init_isSymbol", "__esmMin", "init_baseGetTag", "init_isObjectLike", "__name", "arrayMap", "array", "iteratee", "index", "length", "result", "arrayMap_default", "init_arrayMap", "__esmMin", "__name", "baseToString", "value", "isArray_default", "arrayMap_default", "isSymbol_default", "symbolToString", "result", "INFINITY", "symbolProto", "baseToString_default", "init_baseToString", "__esmMin", "init_Symbol", "init_arrayMap", "init_isArray", "init_isSymbol", "Symbol_default", "__name", "trimmedEndIndex", "string", "index", "reWhitespace", "trimmedEndIndex_default", "init_trimmedEndIndex", "__esmMin", "__name", "baseTrim", "string", "trimmedEndIndex_default", "reTrimStart", "baseTrim_default", "init_baseTrim", "__esmMin", "init_trimmedEndIndex", "__name", "toNumber", "value", "isSymbol_default", "NAN", "isObject_default", "other", "baseTrim_default", "isBinary", "reIsBinary", "reIsOctal", "freeParseInt", "reIsBadHex", "toNumber_default", "init_toNumber", "__esmMin", "init_baseTrim", "init_isObject", "init_isSymbol", "__name", "toFinite", "value", "toNumber_default", "INFINITY", "sign", "MAX_INTEGER", "toFinite_default", "init_toFinite", "__esmMin", "init_toNumber", "__name", "toInteger", "value", "result", "toFinite_default", "remainder", "toInteger_default", "init_toInteger", "__esmMin", "init_toFinite", "__name", "WeakMap", "WeakMap_default", "init_WeakMap", "__esmMin", "init_getNative", "init_root", "getNative_default", "root_default", "noop", "noop_default", "init_noop", "__esmMin", "__name", "arrayEach", "array", "iteratee", "index", "length", "arrayEach_default", "init_arrayEach", "__esmMin", "__name", "baseFindIndex", "array", "predicate", "fromIndex", "fromRight", "length", "index", "baseFindIndex_default", "init_baseFindIndex", "__esmMin", "__name", "baseIsNaN", "value", "baseIsNaN_default", "init_baseIsNaN", "__esmMin", "__name", "strictIndexOf", "array", "value", "fromIndex", "index", "length", "strictIndexOf_default", "init_strictIndexOf", "__esmMin", "__name", "baseIndexOf", "array", "value", "fromIndex", "strictIndexOf_default", "baseFindIndex_default", "baseIsNaN_default", "baseIndexOf_default", "init_baseIndexOf", "__esmMin", "init_baseFindIndex", "init_baseIsNaN", "init_strictIndexOf", "__name", "arrayIncludes", "array", "value", "length", "baseIndexOf_default", "arrayIncludes_default", "init_arrayIncludes", "__esmMin", "init_baseIndexOf", "__name", "nativeKeys", "nativeKeys_default", "init_nativeKeys", "__esmMin", "init_overArg", "overArg_default", "baseKeys", "object", "isPrototype_default", "nativeKeys_default", "result", "key", "hasOwnProperty", "objectProto", "baseKeys_default", "init_baseKeys", "__esmMin", "init_isPrototype", "init_nativeKeys", "__name", "keys", "object", "isArrayLike_default", "arrayLikeKeys_default", "baseKeys_default", "keys_default", "init_keys", "__esmMin", "init_arrayLikeKeys", "init_baseKeys", "init_isArrayLike", "__name", "objectProto", "hasOwnProperty", "assign", "assign_default", "init_assign", "__esmMin", "init_assignValue", "init_copyObject", "init_createAssigner", "init_isArrayLike", "init_isPrototype", "init_keys", "createAssigner_default", "object", "source", "isPrototype_default", "isArrayLike_default", "copyObject_default", "keys_default", "key", "assignValue_default", "isKey", "value", "object", "isArray_default", "type", "isSymbol_default", "reIsPlainProp", "reIsDeepProp", "isKey_default", "init_isKey", "__esmMin", "init_isArray", "init_isSymbol", "__name", "memoizeCapped", "func", "result", "memoize_default", "key", "cache", "MAX_MEMOIZE_SIZE", "memoizeCapped_default", "init_memoizeCapped", "__esmMin", "init_memoize", "__name", "rePropName", "reEscapeChar", "stringToPath", "stringToPath_default", "init_stringToPath", "__esmMin", "init_memoizeCapped", "memoizeCapped_default", "string", "result", "match", "number", "quote", "subString", "toString", "value", "baseToString_default", "toString_default", "init_toString", "__esmMin", "init_baseToString", "__name", "castPath", "value", "object", "isArray_default", "isKey_default", "stringToPath_default", "toString_default", "castPath_default", "init_castPath", "__esmMin", "init_isArray", "init_isKey", "init_stringToPath", "init_toString", "__name", "toKey", "value", "isSymbol_default", "result", "INFINITY", "toKey_default", "init_toKey", "__esmMin", "init_isSymbol", "__name", "baseGet", "object", "path", "castPath_default", "index", "length", "toKey_default", "baseGet_default", "init_baseGet", "__esmMin", "init_castPath", "init_toKey", "__name", "get", "object", "path", "defaultValue", "result", "baseGet_default", "get_default", "init_get", "__esmMin", "init_baseGet", "__name", "arrayPush", "array", "values", "index", "length", "offset", "arrayPush_default", "init_arrayPush", "__esmMin", "__name", "isFlattenable", "value", "isArray_default", "isArguments_default", "spreadableSymbol", "isFlattenable_default", "init_isFlattenable", "__esmMin", "init_Symbol", "init_isArguments", "init_isArray", "Symbol_default", "__name", "baseFlatten", "array", "depth", "predicate", "isStrict", "result", "index", "length", "isFlattenable_default", "value", "arrayPush_default", "baseFlatten_default", "init_baseFlatten", "__esmMin", "init_arrayPush", "init_isFlattenable", "__name", "flatten", "array", "length", "baseFlatten_default", "flatten_default", "init_flatten", "__esmMin", "init_baseFlatten", "__name", "flatRest", "func", "setToString_default", "overRest_default", "flatten_default", "flatRest_default", "init_flatRest", "__esmMin", "init_flatten", "init_overRest", "init_setToString", "__name", "baseSlice", "array", "start", "end", "index", "length", "result", "baseSlice_default", "init_baseSlice", "__esmMin", "__name", "hasUnicode", "string", "reHasUnicode", "rsAstralRange", "rsComboMarksRange", "reComboHalfMarksRange", "rsComboSymbolsRange", "rsComboRange", "rsVarRange", "rsZWJ", "hasUnicode_default", "init_hasUnicode", "__esmMin", "__name", "arrayReduce", "array", "iteratee", "accumulator", "initAccum", "index", "length", "arrayReduce_default", "init_arrayReduce", "__esmMin", "__name", "baseAssign", "object", "source", "copyObject_default", "keys_default", "baseAssign_default", "init_baseAssign", "__esmMin", "init_copyObject", "init_keys", "__name", "baseAssignIn", "object", "source", "copyObject_default", "keysIn_default", "baseAssignIn_default", "init_baseAssignIn", "__esmMin", "init_copyObject", "init_keysIn", "__name", "arrayFilter", "array", "predicate", "index", "length", "resIndex", "result", "value", "arrayFilter_default", "init_arrayFilter", "__esmMin", "__name", "stubArray", "stubArray_default", "init_stubArray", "__esmMin", "__name", "objectProto", "propertyIsEnumerable", "nativeGetSymbols", "getSymbols", "getSymbols_default", "init_getSymbols", "__esmMin", "init_arrayFilter", "init_stubArray", "object", "arrayFilter_default", "symbol", "stubArray_default", "copySymbols", "source", "object", "copyObject_default", "getSymbols_default", "copySymbols_default", "init_copySymbols", "__esmMin", "init_copyObject", "init_getSymbols", "__name", "nativeGetSymbols", "getSymbolsIn", "getSymbolsIn_default", "init_getSymbolsIn", "__esmMin", "init_arrayPush", "init_getPrototype", "init_getSymbols", "init_stubArray", "object", "result", "arrayPush_default", "getSymbols_default", "getPrototype_default", "stubArray_default", "copySymbolsIn", "source", "object", "copyObject_default", "getSymbolsIn_default", "copySymbolsIn_default", "init_copySymbolsIn", "__esmMin", "init_copyObject", "init_getSymbolsIn", "__name", "baseGetAllKeys", "object", "keysFunc", "symbolsFunc", "result", "isArray_default", "arrayPush_default", "baseGetAllKeys_default", "init_baseGetAllKeys", "__esmMin", "init_arrayPush", "init_isArray", "__name", "getAllKeys", "object", "baseGetAllKeys_default", "keys_default", "getSymbols_default", "getAllKeys_default", "init_getAllKeys", "__esmMin", "init_baseGetAllKeys", "init_getSymbols", "init_keys", "__name", "getAllKeysIn", "object", "baseGetAllKeys_default", "keysIn_default", "getSymbolsIn_default", "getAllKeysIn_default", "init_getAllKeysIn", "__esmMin", "init_baseGetAllKeys", "init_getSymbolsIn", "init_keysIn", "__name", "DataView", "DataView_default", "init_DataView", "__esmMin", "init_getNative", "init_root", "getNative_default", "root_default", "Promise", "Promise_default", "init_Promise", "__esmMin", "init_getNative", "init_root", "getNative_default", "root_default", "Set", "Set_default", "init_Set", "__esmMin", "init_getNative", "init_root", "getNative_default", "root_default", "mapTag", "objectTag", "promiseTag", "setTag", "weakMapTag", "dataViewTag", "dataViewCtorString", "mapCtorString", "promiseCtorString", "setCtorString", "weakMapCtorString", "getTag", "getTag_default", "init_getTag", "__esmMin", "init_DataView", "init_Map", "init_Promise", "init_Set", "init_WeakMap", "init_baseGetTag", "init_toSource", "toSource_default", "DataView_default", "Map_default", "Promise_default", "Set_default", "WeakMap_default", "baseGetTag_default", "__name", "value", "result", "Ctor", "ctorString", "initCloneArray", "array", "length", "result", "hasOwnProperty", "objectProto", "initCloneArray_default", "init_initCloneArray", "__esmMin", "__name", "cloneDataView", "dataView", "isDeep", "buffer", "cloneArrayBuffer_default", "cloneDataView_default", "init_cloneDataView", "__esmMin", "init_cloneArrayBuffer", "__name", "cloneRegExp", "regexp", "result", "reFlags", "cloneRegExp_default", "init_cloneRegExp", "__esmMin", "__name", "cloneSymbol", "symbol", "symbolValueOf", "symbolProto", "cloneSymbol_default", "init_cloneSymbol", "__esmMin", "init_Symbol", "Symbol_default", "__name", "initCloneByTag", "object", "tag", "isDeep", "Ctor", "arrayBufferTag", "cloneArrayBuffer_default", "boolTag", "dateTag", "dataViewTag", "cloneDataView_default", "float32Tag", "float64Tag", "int8Tag", "int16Tag", "int32Tag", "uint8Tag", "uint8ClampedTag", "uint16Tag", "uint32Tag", "cloneTypedArray_default", "mapTag", "numberTag", "stringTag", "regexpTag", "cloneRegExp_default", "setTag", "symbolTag", "cloneSymbol_default", "initCloneByTag_default", "init_initCloneByTag", "__esmMin", "init_cloneArrayBuffer", "init_cloneDataView", "init_cloneRegExp", "init_cloneSymbol", "init_cloneTypedArray", "__name", "baseIsMap", "value", "isObjectLike_default", "getTag_default", "mapTag", "baseIsMap_default", "init_baseIsMap", "__esmMin", "init_getTag", "init_isObjectLike", "__name", "nodeIsMap", "isMap", "isMap_default", "init_isMap", "__esmMin", "init_baseIsMap", "init_baseUnary", "init_nodeUtil", "nodeUtil_default", "baseUnary_default", "baseIsMap_default", "baseIsSet", "value", "isObjectLike_default", "getTag_default", "setTag", "baseIsSet_default", "init_baseIsSet", "__esmMin", "init_getTag", "init_isObjectLike", "__name", "nodeIsSet", "isSet", "isSet_default", "init_isSet", "__esmMin", "init_baseIsSet", "init_baseUnary", "init_nodeUtil", "nodeUtil_default", "baseUnary_default", "baseIsSet_default", "baseClone", "value", "bitmask", "customizer", "key", "object", "stack", "result", "isDeep", "CLONE_DEEP_FLAG", "isFlat", "CLONE_FLAT_FLAG", "isFull", "CLONE_SYMBOLS_FLAG", "isObject_default", "isArr", "isArray_default", "initCloneArray_default", "copyArray_default", "tag", "getTag_default", "isFunc", "funcTag", "genTag", "isBuffer_default", "cloneBuffer_default", "objectTag", "argsTag", "initCloneObject_default", "copySymbolsIn_default", "baseAssignIn_default", "copySymbols_default", "baseAssign_default", "cloneableTags", "initCloneByTag_default", "Stack_default", "stacked", "isSet_default", "subValue", "isMap_default", "keysFunc", "getAllKeysIn_default", "getAllKeys_default", "keysIn_default", "keys_default", "props", "arrayEach_default", "assignValue_default", "arrayTag", "boolTag", "dateTag", "errorTag", "mapTag", "numberTag", "regexpTag", "setTag", "stringTag", "symbolTag", "weakMapTag", "arrayBufferTag", "dataViewTag", "float32Tag", "float64Tag", "int8Tag", "int16Tag", "int32Tag", "uint8Tag", "uint8ClampedTag", "uint16Tag", "uint32Tag", "baseClone_default", "init_baseClone", "__esmMin", "init_Stack", "init_arrayEach", "init_assignValue", "init_baseAssign", "init_baseAssignIn", "init_cloneBuffer", "init_copyArray", "init_copySymbols", "init_copySymbolsIn", "init_getAllKeys", "init_getAllKeysIn", "init_getTag", "init_initCloneArray", "init_initCloneByTag", "init_initCloneObject", "init_isArray", "init_isBuffer", "init_isMap", "init_isObject", "init_isSet", "init_keys", "init_keysIn", "__name", "clone", "value", "baseClone_default", "CLONE_SYMBOLS_FLAG", "clone_default", "init_clone", "__esmMin", "init_baseClone", "__name", "cloneDeep", "value", "baseClone_default", "CLONE_DEEP_FLAG", "CLONE_SYMBOLS_FLAG", "cloneDeep_default", "init_cloneDeep", "__esmMin", "init_baseClone", "__name", "compact", "array", "index", "length", "resIndex", "result", "value", "compact_default", "init_compact", "__esmMin", "__name", "setCacheAdd", "value", "HASH_UNDEFINED", "setCacheAdd_default", "init_setCacheAdd", "__esmMin", "__name", "setCacheHas", "value", "setCacheHas_default", "init_setCacheHas", "__esmMin", "__name", "SetCache", "values", "index", "length", "MapCache_default", "SetCache_default", "init_SetCache", "__esmMin", "init_MapCache", "init_setCacheAdd", "init_setCacheHas", "__name", "setCacheAdd_default", "setCacheHas_default", "arraySome", "array", "predicate", "index", "length", "arraySome_default", "init_arraySome", "__esmMin", "__name", "cacheHas", "cache", "key", "cacheHas_default", "init_cacheHas", "__esmMin", "__name", "equalArrays", "array", "other", "bitmask", "customizer", "equalFunc", "stack", "isPartial", "COMPARE_PARTIAL_FLAG", "arrLength", "othLength", "arrStacked", "othStacked", "index", "result", "seen", "COMPARE_UNORDERED_FLAG", "SetCache_default", "arrValue", "othValue", "compared", "arraySome_default", "othIndex", "cacheHas_default", "equalArrays_default", "init_equalArrays", "__esmMin", "init_SetCache", "init_arraySome", "init_cacheHas", "__name", "mapToArray", "map", "index", "result", "value", "key", "mapToArray_default", "init_mapToArray", "__esmMin", "__name", "setToArray", "set", "index", "result", "value", "setToArray_default", "init_setToArray", "__esmMin", "__name", "equalByTag", "object", "other", "tag", "bitmask", "customizer", "equalFunc", "stack", "dataViewTag", "arrayBufferTag", "Uint8Array_default", "boolTag", "dateTag", "numberTag", "eq_default", "errorTag", "regexpTag", "stringTag", "mapTag", "convert", "mapToArray_default", "setTag", "isPartial", "COMPARE_PARTIAL_FLAG", "setToArray_default", "stacked", "COMPARE_UNORDERED_FLAG", "result", "equalArrays_default", "symbolTag", "symbolValueOf", "symbolProto", "equalByTag_default", "init_equalByTag", "__esmMin", "init_Symbol", "init_Uint8Array", "init_eq", "init_equalArrays", "init_mapToArray", "init_setToArray", "Symbol_default", "__name", "equalObjects", "object", "other", "bitmask", "customizer", "equalFunc", "stack", "isPartial", "COMPARE_PARTIAL_FLAG", "objProps", "getAllKeys_default", "objLength", "othProps", "othLength", "index", "key", "hasOwnProperty", "objStacked", "othStacked", "result", "skipCtor", "objValue", "othValue", "compared", "objCtor", "othCtor", "objectProto", "equalObjects_default", "init_equalObjects", "__esmMin", "init_getAllKeys", "__name", "baseIsEqualDeep", "object", "other", "bitmask", "customizer", "equalFunc", "stack", "objIsArr", "isArray_default", "othIsArr", "objTag", "arrayTag", "getTag_default", "othTag", "argsTag", "objectTag", "objIsObj", "othIsObj", "isSameTag", "isBuffer_default", "Stack_default", "isTypedArray_default", "equalArrays_default", "equalByTag_default", "COMPARE_PARTIAL_FLAG", "objIsWrapped", "hasOwnProperty", "othIsWrapped", "objUnwrapped", "othUnwrapped", "equalObjects_default", "objectProto", "baseIsEqualDeep_default", "init_baseIsEqualDeep", "__esmMin", "init_Stack", "init_equalArrays", "init_equalByTag", "init_equalObjects", "init_getTag", "init_isArray", "init_isBuffer", "init_isTypedArray", "__name", "baseIsEqual", "value", "other", "bitmask", "customizer", "stack", "isObjectLike_default", "baseIsEqualDeep_default", "baseIsEqual_default", "init_baseIsEqual", "__esmMin", "init_baseIsEqualDeep", "init_isObjectLike", "__name", "baseIsMatch", "object", "source", "matchData", "customizer", "index", "length", "noCustomizer", "data", "key", "objValue", "srcValue", "stack", "Stack_default", "result", "baseIsEqual_default", "COMPARE_PARTIAL_FLAG", "COMPARE_UNORDERED_FLAG", "baseIsMatch_default", "init_baseIsMatch", "__esmMin", "init_Stack", "init_baseIsEqual", "__name", "isStrictComparable", "value", "isObject_default", "isStrictComparable_default", "init_isStrictComparable", "__esmMin", "init_isObject", "__name", "getMatchData", "object", "result", "keys_default", "length", "key", "value", "isStrictComparable_default", "getMatchData_default", "init_getMatchData", "__esmMin", "init_isStrictComparable", "init_keys", "__name", "matchesStrictComparable", "key", "srcValue", "object", "matchesStrictComparable_default", "init_matchesStrictComparable", "__esmMin", "__name", "baseMatches", "source", "matchData", "getMatchData_default", "matchesStrictComparable_default", "object", "baseIsMatch_default", "baseMatches_default", "init_baseMatches", "__esmMin", "init_baseIsMatch", "init_getMatchData", "init_matchesStrictComparable", "__name", "baseHasIn", "object", "key", "baseHasIn_default", "init_baseHasIn", "__esmMin", "__name", "hasPath", "object", "path", "hasFunc", "castPath_default", "index", "length", "result", "key", "toKey_default", "isLength_default", "isIndex_default", "isArray_default", "isArguments_default", "hasPath_default", "init_hasPath", "__esmMin", "init_castPath", "init_isArguments", "init_isArray", "init_isIndex", "init_isLength", "init_toKey", "__name", "hasIn", "object", "path", "hasPath_default", "baseHasIn_default", "hasIn_default", "init_hasIn", "__esmMin", "init_baseHasIn", "init_hasPath", "__name", "baseMatchesProperty", "path", "srcValue", "isKey_default", "isStrictComparable_default", "matchesStrictComparable_default", "toKey_default", "object", "objValue", "get_default", "hasIn_default", "baseIsEqual_default", "COMPARE_PARTIAL_FLAG", "COMPARE_UNORDERED_FLAG", "baseMatchesProperty_default", "init_baseMatchesProperty", "__esmMin", "init_baseIsEqual", "init_get", "init_hasIn", "init_isKey", "init_isStrictComparable", "init_matchesStrictComparable", "init_toKey", "__name", "baseProperty", "key", "object", "baseProperty_default", "init_baseProperty", "__esmMin", "__name", "basePropertyDeep", "path", "object", "baseGet_default", "basePropertyDeep_default", "init_basePropertyDeep", "__esmMin", "init_baseGet", "__name", "property", "path", "isKey_default", "baseProperty_default", "toKey_default", "basePropertyDeep_default", "property_default", "init_property", "__esmMin", "init_baseProperty", "init_basePropertyDeep", "init_isKey", "init_toKey", "__name", "baseIteratee", "value", "identity_default", "isArray_default", "baseMatchesProperty_default", "baseMatches_default", "property_default", "baseIteratee_default", "init_baseIteratee", "__esmMin", "init_baseMatches", "init_baseMatchesProperty", "init_identity", "init_isArray", "init_property", "__name", "arrayAggregator", "array", "setter", "iteratee", "accumulator", "index", "length", "value", "arrayAggregator_default", "init_arrayAggregator", "__esmMin", "__name", "baseForOwn", "object", "iteratee", "baseFor_default", "keys_default", "baseForOwn_default", "init_baseForOwn", "__esmMin", "init_baseFor", "init_keys", "__name", "createBaseEach", "eachFunc", "fromRight", "collection", "iteratee", "isArrayLike_default", "length", "index", "iterable", "createBaseEach_default", "init_createBaseEach", "__esmMin", "init_isArrayLike", "__name", "baseEach", "baseEach_default", "init_baseEach", "__esmMin", "init_baseForOwn", "init_createBaseEach", "createBaseEach_default", "baseForOwn_default", "baseAggregator", "collection", "setter", "iteratee", "accumulator", "baseEach_default", "value", "key", "baseAggregator_default", "init_baseAggregator", "__esmMin", "init_baseEach", "__name", "createAggregator", "setter", "initializer", "collection", "iteratee", "func", "isArray_default", "arrayAggregator_default", "baseAggregator_default", "accumulator", "baseIteratee_default", "createAggregator_default", "init_createAggregator", "__esmMin", "init_arrayAggregator", "init_baseAggregator", "init_baseIteratee", "init_isArray", "__name", "now", "now_default", "init_now", "__esmMin", "init_root", "__name", "root_default", "objectProto", "hasOwnProperty", "defaults", "defaults_default", "init_defaults", "__esmMin", "init_baseRest", "init_eq", "init_isIterateeCall", "init_keysIn", "baseRest_default", "object", "sources", "index", "length", "guard", "isIterateeCall_default", "source", "props", "keysIn_default", "propsIndex", "propsLength", "key", "value", "eq_default", "arrayIncludesWith", "array", "value", "comparator", "index", "length", "arrayIncludesWith_default", "init_arrayIncludesWith", "__esmMin", "__name", "baseDifference", "array", "values", "iteratee", "comparator", "index", "includes", "arrayIncludes_default", "isCommon", "length", "result", "valuesLength", "arrayMap_default", "baseUnary_default", "arrayIncludesWith_default", "LARGE_ARRAY_SIZE", "cacheHas_default", "SetCache_default", "outer", "value", "computed", "valuesIndex", "baseDifference_default", "init_baseDifference", "__esmMin", "init_SetCache", "init_arrayIncludes", "init_arrayIncludesWith", "init_arrayMap", "init_baseUnary", "init_cacheHas", "__name", "difference", "difference_default", "init_difference", "__esmMin", "init_baseDifference", "init_baseFlatten", "init_baseRest", "init_isArrayLikeObject", "baseRest_default", "array", "values", "isArrayLikeObject_default", "baseDifference_default", "baseFlatten_default", "last", "array", "length", "last_default", "init_last", "__esmMin", "__name", "drop", "array", "n", "guard", "length", "toInteger_default", "baseSlice_default", "drop_default", "init_drop", "__esmMin", "init_baseSlice", "init_toInteger", "__name", "dropRight", "array", "n", "guard", "length", "toInteger_default", "baseSlice_default", "dropRight_default", "init_dropRight", "__esmMin", "init_baseSlice", "init_toInteger", "__name", "castFunction", "value", "identity_default", "castFunction_default", "init_castFunction", "__esmMin", "init_identity", "__name", "forEach", "collection", "iteratee", "func", "isArray_default", "arrayEach_default", "baseEach_default", "castFunction_default", "forEach_default", "init_forEach", "__esmMin", "init_arrayEach", "init_baseEach", "init_castFunction", "init_isArray", "__name", "init_each", "__esmMin", "init_forEach", "arrayEvery", "array", "predicate", "index", "length", "arrayEvery_default", "init_arrayEvery", "__esmMin", "__name", "baseEvery", "collection", "predicate", "result", "baseEach_default", "value", "index", "baseEvery_default", "init_baseEvery", "__esmMin", "init_baseEach", "__name", "every", "collection", "predicate", "guard", "func", "isArray_default", "arrayEvery_default", "baseEvery_default", "isIterateeCall_default", "baseIteratee_default", "every_default", "init_every", "__esmMin", "init_arrayEvery", "init_baseEvery", "init_baseIteratee", "init_isArray", "init_isIterateeCall", "__name", "baseFilter", "collection", "predicate", "result", "baseEach_default", "value", "index", "baseFilter_default", "init_baseFilter", "__esmMin", "init_baseEach", "__name", "filter", "collection", "predicate", "func", "isArray_default", "arrayFilter_default", "baseFilter_default", "baseIteratee_default", "filter_default", "init_filter", "__esmMin", "init_arrayFilter", "init_baseFilter", "init_baseIteratee", "init_isArray", "__name", "createFind", "findIndexFunc", "collection", "predicate", "fromIndex", "iterable", "isArrayLike_default", "iteratee", "baseIteratee_default", "keys_default", "__name", "key", "index", "createFind_default", "init_createFind", "__esmMin", "init_baseIteratee", "init_isArrayLike", "init_keys", "findIndex", "array", "predicate", "fromIndex", "length", "index", "toInteger_default", "nativeMax", "baseFindIndex_default", "baseIteratee_default", "findIndex_default", "init_findIndex", "__esmMin", "init_baseFindIndex", "init_baseIteratee", "init_toInteger", "__name", "find", "find_default", "init_find", "__esmMin", "init_createFind", "init_findIndex", "createFind_default", "findIndex_default", "head", "array", "head_default", "init_head", "__esmMin", "__name", "init_first", "__esmMin", "init_head", "baseMap", "collection", "iteratee", "index", "result", "isArrayLike_default", "baseEach_default", "value", "key", "baseMap_default", "init_baseMap", "__esmMin", "init_baseEach", "init_isArrayLike", "__name", "map", "collection", "iteratee", "func", "isArray_default", "arrayMap_default", "baseMap_default", "baseIteratee_default", "map_default", "init_map", "__esmMin", "init_arrayMap", "init_baseIteratee", "init_baseMap", "init_isArray", "__name", "flatMap", "collection", "iteratee", "baseFlatten_default", "map_default", "flatMap_default", "init_flatMap", "__esmMin", "init_baseFlatten", "init_map", "__name", "forIn", "object", "iteratee", "baseFor_default", "castFunction_default", "keysIn_default", "forIn_default", "init_forIn", "__esmMin", "init_baseFor", "init_castFunction", "init_keysIn", "__name", "forOwn", "object", "iteratee", "baseForOwn_default", "castFunction_default", "forOwn_default", "init_forOwn", "__esmMin", "init_baseForOwn", "init_castFunction", "__name", "objectProto", "hasOwnProperty", "groupBy", "groupBy_default", "init_groupBy", "__esmMin", "init_baseAssignValue", "init_createAggregator", "createAggregator_default", "result", "value", "key", "baseAssignValue_default", "baseGt", "value", "other", "baseGt_default", "init_baseGt", "__esmMin", "__name", "baseHas", "object", "key", "hasOwnProperty", "objectProto", "baseHas_default", "init_baseHas", "__esmMin", "__name", "has", "object", "path", "hasPath_default", "baseHas_default", "has_default", "init_has", "__esmMin", "init_baseHas", "init_hasPath", "__name", "isString", "value", "isArray_default", "isObjectLike_default", "baseGetTag_default", "stringTag", "isString_default", "init_isString", "__esmMin", "init_baseGetTag", "init_isArray", "init_isObjectLike", "__name", "baseValues", "object", "props", "arrayMap_default", "key", "baseValues_default", "init_baseValues", "__esmMin", "init_arrayMap", "__name", "values", "object", "baseValues_default", "keys_default", "values_default", "init_values", "__esmMin", "init_baseValues", "init_keys", "__name", "includes", "collection", "value", "fromIndex", "guard", "isArrayLike_default", "values_default", "toInteger_default", "length", "nativeMax", "isString_default", "baseIndexOf_default", "includes_default", "init_includes", "__esmMin", "init_baseIndexOf", "init_isArrayLike", "init_isString", "init_toInteger", "init_values", "__name", "indexOf", "array", "value", "fromIndex", "length", "index", "toInteger_default", "nativeMax", "baseIndexOf_default", "indexOf_default", "init_indexOf", "__esmMin", "init_baseIndexOf", "init_toInteger", "__name", "isEmpty", "value", "isArrayLike_default", "isArray_default", "isBuffer_default", "isTypedArray_default", "isArguments_default", "tag", "getTag_default", "mapTag", "setTag", "isPrototype_default", "baseKeys_default", "key", "hasOwnProperty", "objectProto", "isEmpty_default", "init_isEmpty", "__esmMin", "init_baseKeys", "init_getTag", "init_isArguments", "init_isArray", "init_isArrayLike", "init_isBuffer", "init_isPrototype", "init_isTypedArray", "__name", "baseIsRegExp", "value", "isObjectLike_default", "baseGetTag_default", "regexpTag", "baseIsRegExp_default", "init_baseIsRegExp", "__esmMin", "init_baseGetTag", "init_isObjectLike", "__name", "nodeIsRegExp", "isRegExp", "isRegExp_default", "init_isRegExp", "__esmMin", "init_baseIsRegExp", "init_baseUnary", "init_nodeUtil", "nodeUtil_default", "baseUnary_default", "baseIsRegExp_default", "isUndefined", "value", "isUndefined_default", "init_isUndefined", "__esmMin", "__name", "baseLt", "value", "other", "baseLt_default", "init_baseLt", "__esmMin", "__name", "mapValues", "object", "iteratee", "result", "baseIteratee_default", "baseForOwn_default", "value", "key", "baseAssignValue_default", "mapValues_default", "init_mapValues", "__esmMin", "init_baseAssignValue", "init_baseForOwn", "init_baseIteratee", "__name", "baseExtremum", "array", "iteratee", "comparator", "index", "length", "value", "current", "computed", "isSymbol_default", "result", "baseExtremum_default", "init_baseExtremum", "__esmMin", "init_isSymbol", "__name", "max", "array", "baseExtremum_default", "identity_default", "baseGt_default", "max_default", "init_max", "__esmMin", "init_baseExtremum", "init_baseGt", "init_identity", "__name", "min", "array", "baseExtremum_default", "identity_default", "baseLt_default", "min_default", "init_min", "__esmMin", "init_baseExtremum", "init_baseLt", "init_identity", "__name", "minBy", "array", "iteratee", "baseExtremum_default", "baseIteratee_default", "baseLt_default", "minBy_default", "init_minBy", "__esmMin", "init_baseExtremum", "init_baseIteratee", "init_baseLt", "__name", "negate", "predicate", "FUNC_ERROR_TEXT", "args", "negate_default", "init_negate", "__esmMin", "__name", "baseSet", "object", "path", "value", "customizer", "isObject_default", "castPath_default", "index", "length", "lastIndex", "nested", "key", "toKey_default", "newValue", "objValue", "isIndex_default", "assignValue_default", "baseSet_default", "init_baseSet", "__esmMin", "init_assignValue", "init_castPath", "init_isIndex", "init_isObject", "init_toKey", "__name", "basePickBy", "object", "paths", "predicate", "index", "length", "result", "path", "value", "baseGet_default", "baseSet_default", "castPath_default", "basePickBy_default", "init_basePickBy", "__esmMin", "init_baseGet", "init_baseSet", "init_castPath", "__name", "pickBy", "object", "predicate", "props", "arrayMap_default", "getAllKeysIn_default", "prop", "baseIteratee_default", "basePickBy_default", "value", "path", "pickBy_default", "init_pickBy", "__esmMin", "init_arrayMap", "init_baseIteratee", "init_basePickBy", "init_getAllKeysIn", "__name", "baseSortBy", "array", "comparer", "length", "baseSortBy_default", "init_baseSortBy", "__esmMin", "__name", "compareAscending", "value", "other", "valIsDefined", "valIsNull", "valIsReflexive", "valIsSymbol", "isSymbol_default", "othIsDefined", "othIsNull", "othIsReflexive", "othIsSymbol", "compareAscending_default", "init_compareAscending", "__esmMin", "init_isSymbol", "__name", "compareMultiple", "object", "other", "orders", "index", "objCriteria", "othCriteria", "length", "ordersLength", "result", "compareAscending_default", "order", "compareMultiple_default", "init_compareMultiple", "__esmMin", "init_compareAscending", "__name", "baseOrderBy", "collection", "iteratees", "orders", "arrayMap_default", "iteratee", "isArray_default", "value", "baseGet_default", "identity_default", "index", "baseUnary_default", "baseIteratee_default", "result", "baseMap_default", "key", "criteria", "baseSortBy_default", "object", "other", "compareMultiple_default", "baseOrderBy_default", "init_baseOrderBy", "__esmMin", "init_arrayMap", "init_baseGet", "init_baseIteratee", "init_baseMap", "init_baseSortBy", "init_baseUnary", "init_compareMultiple", "init_identity", "init_isArray", "__name", "asciiSize", "asciiSize_default", "init_asciiSize", "__esmMin", "init_baseProperty", "baseProperty_default", "unicodeSize", "string", "result", "reUnicode", "rsAstralRange", "rsComboMarksRange", "reComboHalfMarksRange", "rsComboSymbolsRange", "rsComboRange", "rsVarRange", "rsAstral", "rsCombo", "rsFitz", "rsModifier", "rsNonAstral", "rsRegional", "rsSurrPair", "rsZWJ", "reOptMod", "rsOptVar", "rsOptJoin", "rsSeq", "rsSymbol", "unicodeSize_default", "init_unicodeSize", "__esmMin", "__name", "stringSize", "string", "hasUnicode_default", "unicodeSize_default", "asciiSize_default", "stringSize_default", "init_stringSize", "__esmMin", "init_asciiSize", "init_hasUnicode", "init_unicodeSize", "__name", "basePick", "object", "paths", "basePickBy_default", "value", "path", "hasIn_default", "basePick_default", "init_basePick", "__esmMin", "init_basePickBy", "init_hasIn", "__name", "pick", "pick_default", "init_pick", "__esmMin", "init_basePick", "init_flatRest", "flatRest_default", "object", "paths", "basePick_default", "baseRange", "start", "end", "step", "fromRight", "index", "length", "nativeMax", "nativeCeil", "result", "baseRange_default", "init_baseRange", "__esmMin", "__name", "createRange", "fromRight", "start", "end", "step", "isIterateeCall_default", "toFinite_default", "baseRange_default", "createRange_default", "init_createRange", "__esmMin", "init_baseRange", "init_isIterateeCall", "init_toFinite", "__name", "range", "range_default", "init_range", "__esmMin", "init_createRange", "createRange_default", "baseReduce", "collection", "iteratee", "accumulator", "initAccum", "eachFunc", "value", "index", "baseReduce_default", "init_baseReduce", "__esmMin", "__name", "reduce", "collection", "iteratee", "accumulator", "func", "isArray_default", "arrayReduce_default", "baseReduce_default", "initAccum", "baseIteratee_default", "baseEach_default", "reduce_default", "init_reduce", "__esmMin", "init_arrayReduce", "init_baseEach", "init_baseIteratee", "init_baseReduce", "init_isArray", "__name", "reject", "collection", "predicate", "func", "isArray_default", "arrayFilter_default", "baseFilter_default", "negate_default", "baseIteratee_default", "reject_default", "init_reject", "__esmMin", "init_arrayFilter", "init_baseFilter", "init_baseIteratee", "init_isArray", "init_negate", "__name", "size", "collection", "isArrayLike_default", "isString_default", "stringSize_default", "tag", "getTag_default", "mapTag", "setTag", "baseKeys_default", "size_default", "init_size", "__esmMin", "init_baseKeys", "init_getTag", "init_isArrayLike", "init_isString", "init_stringSize", "__name", "baseSome", "collection", "predicate", "result", "baseEach_default", "value", "index", "baseSome_default", "init_baseSome", "__esmMin", "init_baseEach", "__name", "some", "collection", "predicate", "guard", "func", "isArray_default", "arraySome_default", "baseSome_default", "isIterateeCall_default", "baseIteratee_default", "some_default", "init_some", "__esmMin", "init_arraySome", "init_baseIteratee", "init_baseSome", "init_isArray", "init_isIterateeCall", "__name", "sortBy", "sortBy_default", "init_sortBy", "__esmMin", "init_baseFlatten", "init_baseOrderBy", "init_baseRest", "init_isIterateeCall", "baseRest_default", "collection", "iteratees", "length", "isIterateeCall_default", "baseOrderBy_default", "baseFlatten_default", "INFINITY", "createSet", "createSet_default", "init_createSet", "__esmMin", "init_Set", "init_noop", "init_setToArray", "Set_default", "setToArray_default", "values", "noop_default", "baseUniq", "array", "iteratee", "comparator", "index", "includes", "arrayIncludes_default", "length", "isCommon", "result", "seen", "arrayIncludesWith_default", "LARGE_ARRAY_SIZE", "set", "createSet_default", "setToArray_default", "cacheHas_default", "SetCache_default", "outer", "value", "computed", "seenIndex", "baseUniq_default", "init_baseUniq", "__esmMin", "init_SetCache", "init_arrayIncludes", "init_arrayIncludesWith", "init_cacheHas", "init_createSet", "init_setToArray", "__name", "union", "union_default", "init_union", "__esmMin", "init_baseFlatten", "init_baseRest", "init_baseUniq", "init_isArrayLikeObject", "baseRest_default", "arrays", "baseUniq_default", "baseFlatten_default", "isArrayLikeObject_default", "uniq", "array", "baseUniq_default", "uniq_default", "init_uniq", "__esmMin", "init_baseUniq", "__name", "uniqBy", "array", "iteratee", "baseUniq_default", "baseIteratee_default", "uniqBy_default", "init_uniqBy", "__esmMin", "init_baseIteratee", "init_baseUniq", "__name", "uniqueId", "prefix", "id", "idCounter", "toString_default", "uniqueId_default", "init_uniqueId", "__esmMin", "init_toString", "__name", "baseZipObject", "props", "values", "assignFunc", "index", "length", "valsLength", "result", "value", "baseZipObject_default", "init_baseZipObject", "__esmMin", "__name", "zipObject", "props", "values", "baseZipObject_default", "assignValue_default", "zipObject_default", "init_zipObject", "__esmMin", "init_assignValue", "init_baseZipObject", "__name", "init_lodash", "__esmMin", "init_assign", "init_clone", "init_cloneDeep", "init_compact", "init_constant", "init_defaults", "init_difference", "init_drop", "init_dropRight", "init_each", "init_every", "init_filter", "init_find", "init_first", "init_flatMap", "init_flatten", "init_forEach", "init_forIn", "init_forOwn", "init_groupBy", "init_has", "init_identity", "init_includes", "init_indexOf", "init_isArray", "init_isEmpty", "init_isFunction", "init_isObject", "init_isRegExp", "init_isString", "init_isUndefined", "init_keys", "init_last", "init_map", "init_mapValues", "init_max", "init_merge", "init_min", "init_minBy", "init_noop", "init_now", "init_pick", "init_pickBy", "init_range", "init_reduce", "init_reject", "init_size", "init_some", "init_sortBy", "init_union", "init_uniq", "init_uniqueId", "init_values", "init_zipObject", "incrementOrInitEntry", "map", "k", "decrementOrRemoveEntry", "edgeArgsToId", "isDirected", "v_", "w_", "name", "v", "w", "tmp", "EDGE_KEY_DELIM", "isUndefined_default", "DEFAULT_EDGE_NAME", "edgeArgsToObj", "edgeObj", "edgeObjToId", "GRAPH_NODE", "Graph", "init_graph", "__esmMin", "init_lodash", "__name", "opts", "constant_default", "label", "newDefault", "isFunction_default", "keys_default", "self", "filter_default", "isEmpty_default", "vs", "value", "args", "forEach_default", "removeEdge", "e", "child", "parent", "ancestor", "children", "predsV", "sucsV", "preds", "union_default", "neighbors", "filter", "copy", "parents", "findParent", "values_default", "reduce_default", "valueSpecified", "arg0", "edge", "u", "inV", "edges", "outV", "inEdges", "init_graphlib", "__esmMin", "init_graph", "unlink", "entry", "filterOutLinks", "k", "v", "List", "init_list", "__esmMin", "__name", "sentinel", "strs", "curr", "greedyFAS", "g", "weightFn", "state", "buildState", "DEFAULT_WEIGHT_FN", "results", "doGreedyFAS", "flatten_default", "map_default", "e", "buckets", "zeroIdx", "sources", "sinks", "entry", "removeNode", "i", "collectPredecessors", "forEach_default", "edge", "weight", "uEntry", "assignBucket", "w", "wEntry", "fasGraph", "Graph", "maxIn", "maxOut", "v", "prevWeight", "edgeWeight", "range_default", "List", "init_greedy_fas", "__esmMin", "init_lodash", "init_graphlib", "init_list", "constant_default", "__name", "run", "g", "fas", "greedyFAS", "weightFn", "dfsFAS", "forEach_default", "e", "label", "uniqueId_default", "__name", "stack", "visited", "dfs", "v", "undo", "forwardName", "init_acyclic", "__esmMin", "init_lodash", "init_greedy_fas", "addDummyNode", "g", "type", "attrs", "name", "v", "uniqueId_default", "simplify", "simplified", "Graph", "forEach_default", "e", "simpleLabel", "label", "asNonCompoundGraph", "intersectRect", "rect", "point", "x", "y", "dx", "dy", "w", "h", "sx", "sy", "buildLayerMatrix", "layering", "map_default", "range_default", "maxRank", "node", "rank", "isUndefined_default", "normalizeRanks", "min", "min_default", "has_default", "removeEmptyRanks", "offset", "layers", "delta", "nodeRankFactor", "vs", "i", "addBorderNode", "prefix", "order", "max_default", "partition", "collection", "fn", "result", "value", "time", "start", "now_default", "notime", "init_util", "__esmMin", "init_lodash", "init_graphlib", "__name", "addBorderSegments", "g", "dfs", "v", "children", "node", "forEach_default", "rank", "maxRank", "addBorderNode", "__name", "prop", "prefix", "sg", "sgNode", "label", "prev", "curr", "addDummyNode", "init_add_border_segments", "__esmMin", "init_lodash", "init_util", "adjust", "g", "rankDir", "swapWidthHeight", "undo", "reverseY", "swapXY", "forEach_default", "v", "swapWidthHeightOne", "attrs", "w", "reverseYOne", "edge", "swapXYOne", "x", "init_coordinate_system", "__esmMin", "init_lodash", "__name", "run", "g", "forEach_default", "edge", "normalizeEdge", "v", "vRank", "w", "wRank", "name", "edgeLabel", "labelRank", "attrs", "dummy", "i", "addDummyNode", "undo", "node", "origLabel", "init_normalize", "__esmMin", "init_lodash", "init_util", "__name", "longestPath", "g", "visited", "dfs", "v", "label", "rank", "min_default", "map_default", "e", "__name", "forEach_default", "slack", "init_util", "__esmMin", "init_lodash", "feasibleTree", "g", "t", "Graph", "start", "size", "edge", "delta", "tightTree", "findMinSlackEdge", "slack", "shiftRanks", "dfs", "v", "forEach_default", "e", "edgeV", "w", "__name", "minBy_default", "init_feasible_tree", "__esmMin", "init_lodash", "init_graphlib", "init_util", "init_components", "__esmMin", "init_priority_queue", "__esmMin", "DEFAULT_WEIGHT_FUNC", "init_dijkstra", "__esmMin", "init_lodash", "init_priority_queue", "constant_default", "init_dijkstra_all", "__esmMin", "init_dijkstra", "init_tarjan", "__esmMin", "init_find_cycles", "__esmMin", "init_tarjan", "DEFAULT_WEIGHT_FUNC", "init_floyd_warshall", "__esmMin", "init_lodash", "constant_default", "topsort", "g", "visited", "stack", "results", "visit", "node", "CycleException", "forEach_default", "__name", "size_default", "init_topsort", "__esmMin", "init_lodash", "init_is_acyclic", "__esmMin", "init_topsort", "dfs", "g", "vs", "order", "isArray_default", "navigation", "acc", "visited", "forEach_default", "v", "doDfs", "postorder", "w", "init_dfs", "__esmMin", "init_lodash", "__name", "postorder", "g", "vs", "dfs", "init_postorder", "__esmMin", "init_dfs", "__name", "preorder", "g", "vs", "dfs", "init_preorder", "__esmMin", "init_dfs", "__name", "init_prim", "__esmMin", "init_priority_queue", "init_graph", "init_alg", "__esmMin", "init_components", "init_dijkstra", "init_dijkstra_all", "init_find_cycles", "init_floyd_warshall", "init_is_acyclic", "init_postorder", "init_preorder", "init_prim", "init_tarjan", "init_topsort", "networkSimplex", "g", "simplify", "longestPath", "t", "feasibleTree", "initLowLimValues", "initCutValues", "e", "f", "leaveEdge", "enterEdge", "exchangeEdges", "vs", "postorder", "forEach_default", "v", "assignCutValue", "child", "childLab", "parent", "calcCutValue", "childIsTail", "graphEdge", "cutValue", "isOutEdge", "other", "pointsToHead", "otherWeight", "isTreeEdge", "otherCutValue", "tree", "root", "dfsAssignLowLim", "visited", "nextLim", "low", "label", "w", "find_default", "edge", "vLabel", "wLabel", "tailLabel", "flip", "candidates", "filter_default", "isDescendant", "minBy_default", "slack", "updateRanks", "preorder", "flipped", "u", "rootLabel", "init_network_simplex", "__esmMin", "init_lodash", "init_alg", "init_util", "init_feasible_tree", "__name", "rank", "g", "networkSimplexRanker", "tightTreeRanker", "longestPathRanker", "longestPath", "feasibleTree", "networkSimplex", "init_rank", "__esmMin", "init_feasible_tree", "init_network_simplex", "init_util", "__name", "run", "g", "root", "addDummyNode", "depths", "treeDepths", "height", "max_default", "values_default", "nodeSep", "forEach_default", "e", "weight", "sumWeights", "child", "dfs", "v", "children", "top", "addBorderNode", "bottom", "label", "childNode", "childTop", "childBottom", "thisWeight", "minlen", "depth", "__name", "reduce_default", "acc", "cleanup", "graphLabel", "edge", "init_nesting_graph", "__esmMin", "init_lodash", "init_util", "addSubgraphConstraints", "g", "cg", "vs", "prev", "rootPrev", "forEach_default", "v", "child", "parent", "prevChild", "init_add_subgraph_constraints", "__esmMin", "init_lodash", "__name", "buildLayerGraph", "g", "rank", "relationship", "root", "createRootNode", "result", "Graph", "v", "forEach_default", "node", "parent", "e", "u", "edge", "weight", "isUndefined_default", "uniqueId_default", "init_build_layer_graph", "__esmMin", "init_lodash", "init_graphlib", "__name", "crossCount", "g", "layering", "cc", "i", "twoLayerCrossCount", "northLayer", "southLayer", "southPos", "zipObject_default", "map_default", "v", "southEntries", "flatten_default", "sortBy_default", "e", "firstIndex", "treeSize", "tree", "forEach_default", "entry", "index", "weightSum", "init_cross_count", "__esmMin", "init_lodash", "__name", "initOrder", "g", "visited", "simpleNodes", "filter_default", "v", "maxRank", "max_default", "map_default", "layers", "range_default", "dfs", "has_default", "node", "forEach_default", "__name", "orderedVs", "sortBy_default", "init_init_order", "__esmMin", "init_lodash", "barycenter", "g", "movable", "map_default", "v", "inV", "result", "reduce_default", "acc", "e", "edge", "nodeU", "init_barycenter", "__esmMin", "init_lodash", "__name", "resolveConflicts", "entries", "cg", "mappedEntries", "forEach_default", "entry", "i", "tmp", "isUndefined_default", "e", "entryV", "entryW", "sourceSet", "filter_default", "doResolveConflicts", "handleIn", "vEntry", "uEntry", "mergeEntries", "__name", "handleOut", "wEntry", "map_default", "pick_default", "target", "source", "sum", "weight", "init_resolve_conflicts", "__esmMin", "init_lodash", "sort", "entries", "biasRight", "parts", "partition", "entry", "sortable", "unsortable", "sortBy_default", "vs", "sum", "weight", "vsIndex", "compareWithBias", "consumeUnsortable", "forEach_default", "result", "flatten_default", "index", "last", "last_default", "bias", "entryV", "entryW", "init_sort", "__esmMin", "init_lodash", "init_util", "__name", "sortSubgraph", "g", "v", "cg", "biasRight", "movable", "node", "bl", "br", "subgraphs", "filter_default", "w", "barycenters", "barycenter", "forEach_default", "entry", "subgraphResult", "mergeBarycenters", "entries", "resolveConflicts", "expandSubgraphs", "result", "sort", "flatten_default", "blPred", "brPred", "target", "other", "isUndefined_default", "init_sort_subgraph", "__esmMin", "init_lodash", "init_barycenter", "init_resolve_conflicts", "init_sort", "__name", "order", "g", "maxRank", "downLayerGraphs", "buildLayerGraphs", "range_default", "upLayerGraphs", "layering", "initOrder", "assignOrder", "bestCC", "best", "i", "lastBest", "sweepLayerGraphs", "buildLayerMatrix", "cc", "crossCount", "cloneDeep_default", "ranks", "relationship", "map_default", "rank", "buildLayerGraph", "layerGraphs", "biasRight", "cg", "Graph", "forEach_default", "lg", "root", "sorted", "sortSubgraph", "v", "addSubgraphConstraints", "layer", "init_order", "__esmMin", "init_lodash", "init_graphlib", "init_util", "init_add_subgraph_constraints", "init_build_layer_graph", "init_cross_count", "init_init_order", "init_sort_subgraph", "__name", "parentDummyChains", "g", "postorderNums", "postorder", "forEach_default", "v", "node", "edgeObj", "pathData", "findPath", "path", "lca", "pathIdx", "pathV", "ascending", "w", "vPath", "wPath", "low", "lim", "parent", "result", "dfs", "__name", "init_parent_dummy_chains", "__esmMin", "init_lodash", "findType1Conflicts", "g", "layering", "conflicts", "visitLayer", "prevLayer", "layer", "k0", "scanPos", "prevLayerLength", "lastNode", "last_default", "forEach_default", "v", "i", "w", "findOtherInnerSegmentNode", "k1", "scanNode", "u", "uLabel", "uPos", "addConflict", "__name", "reduce_default", "findType2Conflicts", "scan", "south", "southPos", "southEnd", "prevNorthBorder", "nextNorthBorder", "range_default", "uNode", "north", "prevNorthPos", "nextNorthPos", "southLookahead", "predecessors", "find_default", "tmp", "conflictsV", "hasConflict", "verticalAlignment", "neighborFn", "root", "align", "pos", "order", "prevIdx", "ws", "sortBy_default", "mp", "il", "horizontalCompaction", "reverseSep", "xs", "blockG", "buildBlockGraph", "borderType", "iterate", "setXsFunc", "nextNodesFunc", "stack", "elem", "visited", "pass1", "acc", "e", "pass2", "min", "node", "blockGraph", "Graph", "graphLabel", "sepFn", "sep", "vRoot", "uRoot", "prevMax", "findSmallestWidthAlignment", "xss", "minBy_default", "values_default", "max", "forIn_default", "x", "halfWidth", "width", "alignCoordinates", "alignTo", "alignToVals", "alignToMin", "min_default", "alignToMax", "max_default", "vert", "horiz", "alignment", "delta", "xsVals", "mapValues_default", "balance", "ignore", "map_default", "positionX", "buildLayerMatrix", "merge_default", "adjustedLayering", "inner", "smallestWidth", "nodeSep", "edgeSep", "vLabel", "wLabel", "sum", "init_bk", "__esmMin", "init_lodash", "init_graphlib", "init_util", "position", "g", "asNonCompoundGraph", "positionY", "forOwn_default", "positionX", "x", "v", "layering", "buildLayerMatrix", "rankSep", "prevY", "forEach_default", "layer", "maxHeight", "max_default", "map_default", "init_position", "__esmMin", "init_lodash", "init_util", "init_bk", "__name", "layout", "g", "opts", "time", "notime", "layoutGraph", "buildLayoutGraph", "runLayout", "updateInputGraph", "makeSpaceForEdgeLabels", "removeSelfEdges", "run", "rank", "asNonCompoundGraph", "injectEdgeLabelProxies", "removeEmptyRanks", "cleanup", "normalizeRanks", "assignRankMinMax", "removeEdgeLabelProxies", "parentDummyChains", "addBorderSegments", "order", "insertSelfEdges", "adjust", "position", "positionSelfEdges", "removeBorderNodes", "undo", "fixupEdgeLabelCoords", "translateGraph", "assignNodeIntersects", "reversePointsForReversedEdges", "inputGraph", "forEach_default", "v", "inputLabel", "layoutLabel", "e", "Graph", "graph", "canonicalize", "merge_default", "graphDefaults", "selectNumberAttrs", "graphNumAttrs", "pick_default", "graphAttrs", "node", "defaults_default", "nodeNumAttrs", "nodeDefaults", "edge", "edgeDefaults", "edgeNumAttrs", "edgeAttrs", "w", "label", "addDummyNode", "maxRank", "max_default", "minX", "maxX", "minY", "maxY", "graphLabel", "marginX", "marginY", "getExtremes", "attrs", "x", "y", "h", "__name", "p", "nodeV", "nodeW", "p1", "p2", "intersectRect", "t", "b", "l", "last_default", "r", "layers", "buildLayerMatrix", "layer", "orderShift", "i", "selfEdge", "selfNode", "dx", "dy", "obj", "mapValues_default", "newAttrs", "k", "init_layout", "__esmMin", "init_lodash", "init_graphlib", "init_add_border_segments", "init_coordinate_system", "init_acyclic", "init_normalize", "init_rank", "init_nesting_graph", "init_order", "init_parent_dummy_chains", "init_position", "init_util", "init_dagre", "__esmMin", "init_acyclic", "init_layout", "init_normalize", "init_rank", "write", "g", "json", "writeNodes", "writeEdges", "isUndefined_default", "clone_default", "map_default", "v", "nodeValue", "parent", "node", "edgeValue", "edge", "init_json", "__esmMin", "init_lodash", "init_graph", "__name", "clusterDb", "descendants", "parents", "clear", "isDescendant", "edgeInCluster", "copy", "extractDescendants", "findCommonEdges", "findNonClusterChild", "getAnchorId", "adjustClustersAndEdges", "extractor", "sorter", "sortNodesByHierarchy", "init_mermaid_graphlib", "__esmMin", "init_logger", "init_graphlib", "init_json", "__name", "id", "ancestorId", "ancestorDescendants", "log", "edge", "clusterId", "clusterDescendants", "graph", "newGraph", "rootId", "nodes", "node", "data", "edges", "e", "children", "res", "child", "id1", "id2", "edges1", "edges2", "edges1Prim", "edges2Prim", "edgeIn1", "reserve", "_id", "commonEdges", "depth", "d1", "d2", "nonClusterChild", "parent", "v", "w", "write", "hasChildren", "dir", "clusterGraph", "Graph", "result", "sorted", "dagre_exports", "__export", "render", "recursiveRender", "init_dagre", "__esmMin", "init_json", "init_graphlib", "init_markers", "init_util", "init_mermaid_graphlib", "init_nodes", "init_clusters", "init_edges", "init_logger", "init_subGraphTitleMargins", "init_diagramAPI", "__name", "_elem", "graph", "diagramType", "id", "parentCluster", "siteConfig", "log", "write", "dir", "elem", "clusters", "edgePaths", "edgeLabels", "nodes", "v", "node", "data", "ranksep", "nodesep", "o", "newEl", "updateNodeBounds", "setNodeElem", "findNonClusterChild", "clusterDb", "insertNode", "edgePromises", "e", "edge", "insertEdgeLabel", "layout", "diff", "subGraphTitleTotalMargin", "getSubGraphTitleMargins", "sortNodesByHierarchy", "positionNode", "halfPadding", "labelHeight", "offsetY", "insertCluster", "parent", "point", "startNode", "endNode", "paths", "insertEdge", "positionEdgeLabel", "n", "data4Layout", "svg", "Graph", "element", "markers_default", "clear", "nodeId", "specialId1", "specialId2", "edge1", "edgeMid", "edge2", "adjustClustersAndEdges", "getConfig", "_arrayLikeToArray", "r", "a", "e", "_arrayWithHoles", "_arrayWithoutHoles", "_classCallCheck", "n", "_defineProperties", "t", "o", "_toPropertyKey", "_createClass", "_createForOfIteratorHelper", "_unsupportedIterableToArray", "F", "__name", "u", "_defineProperty$1", "_iterableToArray", "_iterableToArrayLimit", "l", "i", "f", "_nonIterableRest", "_nonIterableSpread", "_slicedToArray", "_toConsumableArray", "_toPrimitive", "_typeof", "getDefaultExportFromCjs", "x", "requireIsObject", "hasRequiredIsObject", "isObject_1", "isObject", "value", "type", "require_freeGlobal", "hasRequired_freeGlobal", "_freeGlobal", "freeGlobal", "commonjsGlobal", "require_root", "hasRequired_root", "_root", "freeSelf", "root", "requireNow", "hasRequiredNow", "now_1", "now", "require_trimmedEndIndex", "hasRequired_trimmedEndIndex", "_trimmedEndIndex", "reWhitespace", "trimmedEndIndex", "string", "index", "require_baseTrim", "hasRequired_baseTrim", "_baseTrim", "reTrimStart", "baseTrim", "require_Symbol", "hasRequired_Symbol", "_Symbol", "Symbol", "require_getRawTag", "hasRequired_getRawTag", "_getRawTag", "objectProto", "hasOwnProperty", "nativeObjectToString", "symToStringTag", "getRawTag", "isOwn", "tag", "unmasked", "result", "require_objectToString", "hasRequired_objectToString", "_objectToString", "objectToString", "require_baseGetTag", "hasRequired_baseGetTag", "_baseGetTag", "nullTag", "undefinedTag", "baseGetTag", "requireIsObjectLike", "hasRequiredIsObjectLike", "isObjectLike_1", "isObjectLike", "requireIsSymbol", "hasRequiredIsSymbol", "isSymbol_1", "symbolTag", "isSymbol", "requireToNumber", "hasRequiredToNumber", "toNumber_1", "NAN", "reIsBadHex", "reIsBinary", "reIsOctal", "freeParseInt", "toNumber", "other", "isBinary", "requireDebounce", "hasRequiredDebounce", "debounce_1", "FUNC_ERROR_TEXT", "nativeMax", "nativeMin", "debounce", "func", "wait", "options", "lastArgs", "lastThis", "maxWait", "timerId", "lastCallTime", "lastInvokeTime", "leading", "maxing", "trailing", "invokeFunc", "time", "args", "thisArg", "leadingEdge", "timerExpired", "remainingWait", "timeSinceLastCall", "timeSinceLastInvoke", "timeWaiting", "shouldInvoke", "trailingEdge", "cancel", "flush", "debounced", "isInvoking", "rotatePoint", "y", "centerX", "centerY", "angleDegrees", "angleRadians", "rotatedX", "rotatedY", "rotatePosAndSkewByBox", "pos", "box", "skewX", "skewY", "rotated", "skewed", "movePointByBoxAspect", "requireHeap$1", "hasRequiredHeap$1", "module", "exports", "Heap", "defaultCmp", "floor", "heapify", "heappop", "heappush", "heappushpop", "heapreplace", "insort", "min", "nlargest", "nsmallest", "updateItem", "_siftdown", "_siftup", "lo", "hi", "cmp", "mid", "array", "item", "lastelt", "returnitem", "_ref", "_i", "_len", "_ref1", "_results", "_results1", "_j", "elem", "los", "startpos", "newitem", "parent", "parentpos", "childpos", "endpos", "rightpos", "heap", "factory", "heap$1", "heap$2", "requireHeap", "hasRequiredHeap", "inflatePolygon", "polygon", "d", "add", "b", "sub", "scale", "v", "s", "cross", "normalize", "len", "hypot", "signedArea", "pts", "A", "p", "q", "intersectLines", "p1", "p2", "p3", "p4", "denom", "normals", "edge", "out", "offsetEdges", "nrm", "inflated", "_i2", "prevEdge", "currEdge", "ip", "miterBox", "width", "height", "strokeWidth", "tpts", "transformPoints", "offsetPoints", "bb", "makeBoundingBox", "pt", "expandBoundingBoxByPoint", "satPolygonIntersection", "poly1", "poly2", "getAxes", "axes", "normal", "length", "project", "axis", "max", "_iterator", "_step", "point", "projection", "err", "overlaps", "proj1", "proj2", "_iterator2", "_step2", "clusteringDistance", "method", "getP", "getQ", "nodeP", "nodeQ", "impl", "fn$6", "distances", "requireIsArray", "hasRequiredIsArray", "isArray_1", "isArray", "require_isKey", "hasRequired_isKey", "_isKey", "reIsDeepProp", "reIsPlainProp", "isKey", "object", "requireIsFunction", "hasRequiredIsFunction", "isFunction_1", "asyncTag", "funcTag", "genTag", "proxyTag", "isFunction", "require_coreJsData", "hasRequired_coreJsData", "_coreJsData", "coreJsData", "require_isMasked", "hasRequired_isMasked", "_isMasked", "maskSrcKey", "uid", "isMasked", "require_toSource", "hasRequired_toSource", "_toSource", "funcProto", "funcToString", "toSource", "require_baseIsNative", "hasRequired_baseIsNative", "_baseIsNative", "reRegExpChar", "reIsHostCtor", "reIsNative", "baseIsNative", "pattern", "require_getValue", "hasRequired_getValue", "_getValue", "getValue", "key", "require_getNative", "hasRequired_getNative", "_getNative", "getNative", "require_nativeCreate", "hasRequired_nativeCreate", "_nativeCreate", "nativeCreate", "require_hashClear", "hasRequired_hashClear", "_hashClear", "hashClear", "require_hashDelete", "hasRequired_hashDelete", "_hashDelete", "hashDelete", "require_hashGet", "hasRequired_hashGet", "_hashGet", "HASH_UNDEFINED", "hashGet", "data", "require_hashHas", "hasRequired_hashHas", "_hashHas", "hashHas", "require_hashSet", "hasRequired_hashSet", "_hashSet", "hashSet", "require_Hash", "hasRequired_Hash", "_Hash", "Hash", "entries", "entry", "require_listCacheClear", "hasRequired_listCacheClear", "_listCacheClear", "listCacheClear", "requireEq", "hasRequiredEq", "eq_1", "eq", "require_assocIndexOf", "hasRequired_assocIndexOf", "_assocIndexOf", "assocIndexOf", "require_listCacheDelete", "hasRequired_listCacheDelete", "_listCacheDelete", "arrayProto", "splice", "listCacheDelete", "lastIndex", "require_listCacheGet", "hasRequired_listCacheGet", "_listCacheGet", "listCacheGet", "require_listCacheHas", "hasRequired_listCacheHas", "_listCacheHas", "listCacheHas", "require_listCacheSet", "hasRequired_listCacheSet", "_listCacheSet", "listCacheSet", "require_ListCache", "hasRequired_ListCache", "_ListCache", "ListCache", "require_Map", "hasRequired_Map", "_Map", "Map", "require_mapCacheClear", "hasRequired_mapCacheClear", "_mapCacheClear", "mapCacheClear", "require_isKeyable", "hasRequired_isKeyable", "_isKeyable", "isKeyable", "require_getMapData", "hasRequired_getMapData", "_getMapData", "getMapData", "map", "require_mapCacheDelete", "hasRequired_mapCacheDelete", "_mapCacheDelete", "mapCacheDelete", "require_mapCacheGet", "hasRequired_mapCacheGet", "_mapCacheGet", "mapCacheGet", "require_mapCacheHas", "hasRequired_mapCacheHas", "_mapCacheHas", "mapCacheHas", "require_mapCacheSet", "hasRequired_mapCacheSet", "_mapCacheSet", "mapCacheSet", "size", "require_MapCache", "hasRequired_MapCache", "_MapCache", "MapCache", "requireMemoize", "hasRequiredMemoize", "memoize_1", "memoize", "resolver", "memoized", "cache", "require_memoizeCapped", "hasRequired_memoizeCapped", "_memoizeCapped", "MAX_MEMOIZE_SIZE", "memoizeCapped", "require_stringToPath", "hasRequired_stringToPath", "_stringToPath", "rePropName", "reEscapeChar", "stringToPath", "match", "number", "quote", "subString", "require_arrayMap", "hasRequired_arrayMap", "_arrayMap", "arrayMap", "iteratee", "require_baseToString", "hasRequired_baseToString", "_baseToString", "symbolProto", "symbolToString", "baseToString", "requireToString", "hasRequiredToString", "toString_1", "toString", "require_castPath", "hasRequired_castPath", "_castPath", "castPath", "require_toKey", "hasRequired_toKey", "_toKey", "toKey", "require_baseGet", "hasRequired_baseGet", "_baseGet", "baseGet", "path", "requireGet", "hasRequiredGet", "get_1", "get", "defaultValue", "require_defineProperty", "hasRequired_defineProperty", "_defineProperty", "defineProperty", "require_baseAssignValue", "hasRequired_baseAssignValue", "_baseAssignValue", "baseAssignValue", "require_assignValue", "hasRequired_assignValue", "_assignValue", "assignValue", "objValue", "require_isIndex", "hasRequired_isIndex", "_isIndex", "MAX_SAFE_INTEGER", "reIsUint", "isIndex", "require_baseSet", "hasRequired_baseSet", "_baseSet", "baseSet", "customizer", "nested", "newValue", "requireSet", "hasRequiredSet", "set_1", "set", "require_copyArray", "hasRequired_copyArray", "_copyArray", "copyArray", "source", "requireToPath", "hasRequiredToPath", "toPath_1", "toPath", "forEachCompound", "eles", "fn", "includeSelf", "recursiveStep", "did", "Set$1", "cy", "hasCompounds", "ele", "_ele", "addChildren", "children", "child", "addParent", "addParentAndChildren", "defineDegreeFunction", "callback", "includeLoops", "self", "degree", "node", "connectedEdges", "defineDegreeBoundsFunction", "degreeFn", "ret", "nodes", "returnFalse", "returnTrue", "Emitter", "opts", "emptyOpts", "context", "defaultsKeys", "defaults$8", "styleCache", "_p", "val", "cacheStyleFunction", "hashString", "cachePrototypeStyleFunction", "selfFn", "checkCompound", "parentOk", "parents", "defineDerivedStateFunction", "specs", "ok", "edgeOkViaNode", "hasCompoundNodes", "src", "tgt", "defineSwitchFunction", "params", "changedEles", "handler", "_handler", "addlEvents", "able", "changed", "overrideAble", "changedColl", "defineSwitchSet", "elesfn$3", "defineSourceFunction", "selector", "sources", "defineEdgesWithFunction", "otherNodes", "elements", "h", "edges", "edgeData", "thisToOther", "otherToThis", "edgeConnectsThisAndOther", "defineParallelEdgesFunction", "defaults", "extend", "edge1", "edge1_p", "src1", "srcid1", "tgtid1", "srcEdges1", "j", "edge2", "edge2data", "tgtid2", "srcid2", "codirected", "oppdirected", "generateCubicBezier", "mX1", "mY1", "mX2", "mY2", "NEWTON_ITERATIONS", "NEWTON_MIN_SLOPE", "SUBDIVISION_PRECISION", "SUBDIVISION_MAX_ITERATIONS", "kSplineTableSize", "kSampleStepSize", "float32ArraySupported", "mSampleValues", "aA1", "aA2", "B", "C", "calcBezier", "aT", "getSlope", "newtonRaphsonIterate", "aX", "aGuessT", "currentSlope", "currentX", "calcSampleValues", "binarySubdivide", "aA", "aB", "currentT", "getTForX", "intervalStart", "currentSample", "lastSample", "dist", "guessForT", "initialSlope", "_precomputed", "precompute", "str", "getEasedValue", "start", "end", "percent", "easingFn", "prop", "spec", "ease", "startProp", "endProp", "propSpec", "number$1", "easedArr", "si", "ei", "step$1", "ani", "isCore", "isEles", "ani_p", "pEasing", "startTime", "style", "easings", "easingVals", "easingProp", "name", "easing", "startPos", "endPos", "newPos", "valid", "startPan", "endPan", "pan", "animatingPan", "startZoom", "endZoom", "animatingZoom", "bound", "props", "_name", "easedVal", "startAnimation", "stepAll", "doneEles", "stepOne", "current", "queue", "ranAnis", "next", "callbacks", "_callbacks", "cb", "ranEleAni", "handledThisEle", "ranCoreAni", "BreadthFirstLayout", "defaults$7", "deprecatedOptionDefaults", "CircleLayout", "defaults$6", "ConcentricLayout", "defaults$5", "CoseLayout", "defaults$4", "notEdges", "sourceId", "targetId", "hasSource", "hasTarget", "GridLayout", "defaults$3", "NullLayout", "defaults$2", "PresetLayout", "defaults$1", "RandomLayout", "NullRenderer", "drawPreparedRoundCorner", "ctx", "roundCorner", "getRoundCorner", "previousPoint", "currentPoint", "nextPoint", "radiusMax", "isArcRadius", "calcCornerArc", "cRadius", "startX", "startY", "stopX", "stopY", "v1", "radDirection", "v2", "drawDirection", "getPts", "retPts", "pushBezierPts", "qbezierAt$1", "qbezierAt", "bpts", "points", "triangleBackcurve", "controlPoint", "firstPt", "triangleTee", "trianglePoints", "teePoints", "triPts", "teePts", "firstTeePt", "circleTriangle", "rx", "ry", "firstTrPt", "circle$1", "circle", "diameter", "radius", "roundRect", "compileShader", "gl", "shader", "createProgram", "vertexSource", "fragementSource", "vertexShader", "fragmentShader", "program", "createTextureCanvas", "canvas", "getEffectivePanZoom", "pixelRatio", "zoom", "getEffectiveZoom", "modelToRenderedPosition", "isSimpleShape", "arrayEqual", "a1", "a2", "toWebGLColor", "color", "opacity", "outArray", "g", "arr", "indexToVec4", "vec4ToIndex", "vec4", "createTexture", "debugID", "texture", "offscreenCanvas", "getTypeInfo", "glslType", "createTypedArray", "glType", "dataOrSize", "createTypedArrayView", "stride", "createBufferStaticDraw", "attributeLoc", "dataArray", "_getTypeInfo", "_getTypeInfo2", "buffer", "createBufferDynamicDraw", "instances", "_getTypeInfo3", "_getTypeInfo4", "bytes", "views", "view", "count", "create3x3MatrixBufferDynamicDraw", "matrixSize", "matrixData", "matrixViews", "byteOffset", "loc", "matrix", "createPickingFrameBuffer", "fb", "targetTexture", "create", "ARRAY_TYPE", "identity", "multiply", "a00", "a01", "a02", "a10", "a11", "a12", "a20", "a21", "a22", "b00", "b01", "b02", "b10", "b11", "b12", "b20", "b21", "b22", "translate", "rotate", "rad", "c", "intersection", "set1", "set2", "getBGColor", "container", "cssColor", "color2tuple", "getLabelLines", "prefix", "rs", "getPrefixedProperty", "overrideCanvasRendererFunctions", "renderCanvas", "maxZoom$1", "clearWebgl", "clearCanvas", "renderWebgl", "RENDER_TARGET", "baseFunc", "interactiveElementsOnly", "isTouch", "findNearestElementsWebgl", "_baseFunc", "_baseFunc2", "eventName", "clear", "createPanZoomMatrix", "_util$getEffectivePan", "transform", "projection$1", "product", "setContextTransform", "_util$getEffectivePan2", "drawSelectionRectangle", "drawAxes", "drawAtlases", "draw", "drawing", "row", "collection", "atlases", "atlas", "w", "getPickingIndexes", "_util$getEffectivePan3", "_util$modelToRendered", "_util$modelToRendered2", "cX1", "cY1", "indexes", "pixel", "drawEle", "renderTarget", "eleCount", "panZoomMatrix", "_i3", "compact", "debugInfo", "report", "atlasInfo", "info", "b64ToBlob", "b64", "mimeType", "buff", "buffUint8", "b64UriToB64", "b64uri", "output", "getB64Uri", "Promise$1", "resolve", "reject", "blob", "CanvasRenderer", "containerWindow", "document", "CRp", "tapHlOffAttr", "tapHlOffStyle", "containerStyle", "styleMap", "ms", "error", "k", "emptyBb", "getBoxCenter", "getCenterOffset", "backgroundTimestampHasChanged", "same", "getStyleKey", "getLabelKey", "getSourceLabelKey", "getTargetLabelKey", "drawElement", "scaledLabelShown", "useEleOpacity", "drawLabel", "drawSourceLabel", "drawTargetLabel", "getElementBox", "getLabelBox", "getSourceLabelBox", "getTargetLabelBox", "isLabelVisibleAtScale", "getElementRotationPoint", "addTextMargin", "pre", "getRsPt", "getLabelRotationPoint", "getSourceLabelRotationPoint", "getTargetLabelRotationPoint", "getElementRotationOffset", "getSourceLabelRotationOffset", "getTargetLabelRotationOffset", "getLabelRotationOffset", "eleTxrCache", "ElementTextureCache", "lblTxrCache", "slbTxrCache", "tlbTxrCache", "lyrTxrCache", "LayeredTextureCache", "willDraw", "refineInLayers", "reqs", "setExtension", "registrant", "ext", "overrideErr", "field", "warn", "Core", "Collection", "Layout", "plainObject", "layoutProto", "optLayoutFns", "fnName", "regStop", "anis", "getCy", "layout", "emitterOpts", "evt", "define", "BaseRenderer", "getExtension", "bProto", "RegistrantRenderer", "rProto", "Renderer", "proto", "pName", "pVal", "existsInR", "_pName", "setMap", "extensions", "getMap", "setModule", "moduleType", "moduleName", "modules", "getModule", "_window", "navigator", "typeofstr", "typeofobj", "typeoffn", "typeofhtmlele", "instanceStr", "integer", "htmlElement", "elementOrCollection", "element", "core", "stylesheet", "event", "emptyString", "domElement", "boundingBox", "promise", "camel2dash", "dash2camel", "prependCamel", "capitalize", "endsWith", "rgba", "rgbaNoBackRefs", "hsla", "hslaNoBackRefs", "hex3", "hex6", "ascending", "descending", "hex2tuple", "hsl2tuple", "rgb2tuple", "colorname2tuple", "colors", "debounceExports", "performance$1", "pnow", "raf", "requestAnimationFrame", "performanceNow", "DEFAULT_HASH_SEED", "K", "DEFAULT_HASH_SEED_ALT", "hashIterableInts", "hashInt", "hashIntAlt", "combineHashes", "combineHashesArray", "hashArrays", "hashIntsArray", "hashStrings", "hashStringsArray", "warningsEnabled", "warnSupported", "traceSupported", "MAX_INT$1", "trueify", "falsify", "zeroify", "noop$1", "warnings", "clone", "copy", "uuid", "_staticEmptyObject", "staticEmptyObject", "defaults$g", "removeFromArray", "clearArray", "push", "setPrefixedProperty", "ObjectMap", "Map$1", "undef", "ObjectSet", "Element", "defineSearch", "elesfn$v", "heapExports", "dijkstraDefaults", "elesfn$u", "elesfn$t", "aStarDefaults", "elesfn$s", "floydWarshallDefaults", "elesfn$r", "bellmanFordDefaults", "elesfn$q", "sqrt2", "collapse", "contractUntil", "elesfn$p", "_Math$hypot", "copyPosition", "modelToRenderedPosition$1", "renderedToModelPosition", "array2point", "mean", "median", "deg2rad", "getAngleFromDisp", "log2", "signum", "sqdist", "inPlaceSumNormalize", "qbezierPtAt", "lineAt", "copyBoundingBox", "clearBoundingBox", "updateBoundingBox", "expandBoundingBox", "expandBoundingBoxSides", "assignBoundingBox", "boundingBoxesIntersect", "inBoundingBox", "pointInBoundingBox", "boundingBoxInBoundingBox", "roundRectangleIntersectLine", "inLineVicinity", "inBezierVicinity", "solveQuadratic", "solveCubic", "sqdistToQuadraticBezier", "sqdistToFiniteLine", "pointInsidePolygonPoints", "pointInsidePolygon", "pointInsideRoundPolygon", "joinLines", "expandPolygon", "intersectLineEllipse", "checkInEllipse", "intersectLineCircle", "midOfThree", "finiteLinesIntersect", "polygonIntersectLine", "roundPolygonIntersectLine", "shortenIntersection", "generateUnitNgonPointsFitToSquare", "fitPolygonToSquare", "generateUnitNgonPoints", "getRoundRectangleRadius", "getRoundPolygonRadius", "getCutRectangleCornerLength", "bezierPtsToQuadCoeff", "getBarrelCurveConstants", "pageRankDefaults", "elesfn$o", "defaults$f", "elesfn$n", "defaults$e", "elesfn$m", "defaults$d", "elesfn$l", "defaults$c", "setOptions$3", "getSimilarity$1", "addLoops", "mmult", "expand", "inflate", "hasConverged", "assign$2", "isDuplicate", "removeDuplicates", "markovClustering", "markovClustering$1", "identity$1", "absDiff", "addAbsDiff", "addSquaredDiff", "sqrt", "maxAbsDiff", "getDistance", "defaults$b", "setOptions$2", "getDist", "randomCentroids", "classify", "buildCluster", "haveValuesConverged", "haveMatricesConverged", "seenBefore", "randomMedoids", "findCost", "kMeans", "kMedoids", "updateCentroids", "updateMembership", "assign$1", "fuzzyCMeans", "kClustering", "defaults$a", "linkageAliases", "setOptions$1", "mergeClosest", "_getAllChildren", "_buildDendrogram", "_buildClustersFromTree", "hierarchicalClustering", "hierarchicalClustering$1", "defaults$9", "setOptions", "getSimilarity", "getPreference", "findExemplars", "assignClusters", "assign", "affinityPropagation", "affinityPropagation$1", "hierholzerDefaults", "elesfn$k", "hopcroftTarjanBiconnected", "hopcroftTarjanBiconnected$1", "tarjanStronglyConnected", "tarjanStronglyConnected$1", "elesfn$j", "STATE_PENDING", "STATE_FULFILLED", "STATE_REJECTED", "_api", "deliver", "execute", "execute_handlers", "_resolve", "Animation", "anifn", "define$3", "getExports", "setExports", "toPathExports", "define$2", "define$1", "elesfn$i", "elesfn$h", "tokens", "newQuery", "Type", "stateSelectors", "lookup", "stateSelectorMatches", "stateSelectorRegex", "cleanMetaChars", "replaceLastQuery", "exprs", "consumeExpr", "consumeWhitespace", "parse", "parse$1", "valCmp", "boolCmp", "existCmp", "data$1", "meta", "matches$1", "filter", "matches", "matching", "Selector", "selfn", "elesfn$g", "elesfn$f", "fn$5", "elesfn$e", "elesfn$d", "fn$4", "elesfn$c", "beforePositionSet", "positionDef", "position", "fn$3", "elesfn$b", "noninf", "updateBounds", "updateBoundsFromBox", "prefixedProperty", "updateBoundsFromArrow", "updateBoundsFromLabel", "updateBoundsFromOutline", "updateBoundsFromMiter", "updateBoundsFromMiterBorder", "boundingBoxImpl", "getKey", "getBoundingBoxPosKey", "cachedBoundingBoxImpl", "defBbOpts", "defBbOptsKey", "filledBbOpts", "bounds", "fn$2", "elesfn$a", "defineDimFns", "widthHeight", "ifEdge", "ifEdgeRenderedPosition", "ifEdgeRenderedPositions", "controlPoints", "segmentPoints", "sourceEndpoint", "targetEndpoint", "midpoint", "renderedName", "edgePoints", "dimensions", "Event", "eventRegex", "universalNamespace", "forEachEvent", "makeEventObj", "forEachEventObj", "emitterOptions$1", "argSelector$1", "elesfn$9", "elesfn$8", "fn$1", "elesfn$7", "zIndexSort", "elesfn$6", "defineSymbolIterator", "getLayoutDimensionOptions", "elesfn$5", "elesfn$4", "eleTakesUpSpace", "eleInteractive", "parentInteractive", "eleVisible", "edgeVisibleViaNode", "elesfn$2", "defineDagExtremity", "defineDagOneHop", "defineDagAllHops", "elesfn$1", "corefn$9", "generateSpringRK4", "cubicBezier", "corefn$8", "emitterOptions", "argSelector", "elesfn", "corefn$7", "corefn$6", "corefn$5", "rendererDefaults", "corefn$4", "corefn$3", "styfn$8", "TRUE", "FALSE", "styfn$7", "styfn$6", "styfn$5", "styfn$4", "styfn$3", "styfn$2", "styfn$1", "_Style", "styfn", "corefn$2", "defaultSelectionType", "corefn$1", "corefn", "getInfo", "setInfo", "DEBUG", "createLayoutInfo", "findLCA", "_findLCA_aux", "printLayoutInfo", "randomizePositions", "getScaleInBoundsFn", "refreshPositions", "step", "calculateNodeForces", "randomDistance", "nodeRepulsion", "nodesOverlap", "findClippingPoint", "calculateEdgeForces", "calculateGravityForces", "propagateForces", "updatePositions", "limitForce", "_updateAncestryBoundaries", "separateComponents", "noop", "throwImgErr", "BRp$f", "BRp$e", "BRp$d", "sinA", "sinA90", "angle", "halfAngle", "lenOut", "limit", "lastPoint", "asVec", "invertVec", "AVOID_IMPOSSIBLE_BEZIER_CONSTANT", "AVOID_IMPOSSIBLE_BEZIER_CONSTANT_L", "BRp$c", "BRp$b", "BRp$a", "BRp$9", "lineAngleFromDelta", "lineAngle", "bezierAngle", "BRp$8", "TOO_SMALL_CUT_RECT", "warnedCutRect", "BRp$7", "BRp$6", "BRp$5", "BRp$4", "BRp$3", "BRp$2", "BRp$1", "beforeRenderCallbacks", "BR", "BRp", "fullFpsTime", "defs", "ElementTextureCacheLookup", "minTxrH", "txrStepH", "minLvl$1", "maxLvl$1", "eleTxrSpacing", "defTxrWidth", "maxTxrW", "maxTxrH", "minUtility", "maxFullness", "maxFullnessChecks", "deqCost$1", "deqAvgCost$1", "deqNoDrawCost$1", "deqFastCost$1", "deqRedrawThreshold$1", "maxDeqSize$1", "getTxrReasons", "initDefaults", "ETCp", "defNumLayers", "minLvl", "maxLvl", "maxZoom", "deqRedrawThreshold", "refineEleDebounceTime", "deqCost", "deqAvgCost", "deqNoDrawCost", "deqFastCost", "maxDeqSize", "invalidThreshold", "maxLayerArea", "maxLayerDim", "useHighQualityEleTxrReqs", "LTCp", "layerIdPool", "MAX_INT", "CRp$b", "CRp$a", "getZeroRotation", "getLabelRotation", "getSourceLabelRotation", "getTargetLabelRotation", "getOpacity", "getTextOpacity", "CRp$9", "drawEdgeOverlayUnderlay", "CRp$8", "CRp$7", "CRp$6", "drawNodeOverlayUnderlay", "CRp$5", "motionBlurDelay", "fpsHeight", "Atlas", "AtlasCollection", "AtlasManager", "AtlasBatchManager", "circleSD", "rectangleSD", "roundRectangleSD", "ellipseSD", "TEX_PICKING_MODE", "TEXTURE", "EDGE_STRAIGHT", "EDGE_CURVE_SEGMENT", "EDGE_ARROW", "RECTANGLE", "ROUND_RECTANGLE", "BOTTOM_ROUND_RECTANGLE", "ELLIPSE", "ElementDrawingWebGL", "CRp$4", "getStyleKeysForLabel", "getBoundingBoxForLabel", "CRp$3", "sin0", "cos0", "sin", "cos", "ellipseStepSize", "CRp$2", "CRp$1", "CR", "pathsImpld", "renderer", "incExts", "extension", "_Stylesheet", "sheetfn", "version", "cytoscape", "init_cytoscape_esm", "__esmMin", "obj", "keyFn", "_memoizedFn", "suffix", "keys", "hex", "shortHex", "base", "hsl", "hue2rgb", "m", "rgb", "isPct", "channel", "atLeastOneIsPct", "allArePct", "alpha", "iterator", "seed", "hash", "num", "hash1", "hash2", "hashes", "hashes1", "hashes2", "ints", "strs", "boxX", "boxY", "msg", "enabled", "_defaults", "filledOpts", "optVal", "oneCopy", "otherArr", "el", "propName", "arrayOrObjectSet", "_this", "restore", "group", "rpos", "classes", "cls", "bypass", "roots", "directed", "Q", "connectedNodes", "connectedBy", "id2depth", "V", "found", "_this$byGroup", "vi", "viId", "_loop", "vId", "depth", "prevNode", "vwEdges", "wId", "_ret", "connectedEles", "_dijkstraDefaults", "weight", "weightFn", "prev", "knownDist", "setDist", "distBetween", "uvs", "smallestDistance", "smallestEdge", "_weight", "smalletsDist", "neighbors", "vid", "vDist", "alt", "target", "S", "numNodes", "forest", "findSetIndex", "setUIndex", "setVIndex", "setU", "setV", "_aStarDefaults", "goal", "heuristic", "sid", "tid", "gScore", "fScore", "closedSetIds", "openSet", "openSetIds", "cameFrom", "cameFromEdge", "addToOpenSet", "id", "cMin", "cMinId", "popFromOpenSet", "isInOpenSet", "steps", "pathNode", "pathNodeId", "pathEdge", "wSrc", "wTgt", "wid", "tempScore", "_floydWarshallDefault", "N", "Nsq", "indexOf", "atIndex", "edgeNext", "st", "ts", "ik", "ij", "kj", "getArgEle", "indexOfArgEle", "res", "from", "to", "fromNode", "_bellmanFordDefaults", "infoMap", "hasNegativeWeightCycle", "negativeWeightCycles", "numEdges", "getNodeFromTo", "distanceTo", "pathTo", "thisStart", "_getInfo", "pred", "replacedEdge", "checkForEdgeReplacement", "node1", "node2", "info1", "info2", "srcInfo", "tgtInfo", "negativeWeightCycleIds", "_e", "_edge", "_src", "_tgt", "_weight2", "srcDist", "tgtDist", "negativeNodes", "numNegativeNodes", "cycle", "_node", "smallestId", "smallestIndex", "cycleId", "edgeIndex", "nodeMap", "remainingEdges", "edgeInfo", "sourceIn", "targetIn", "partition1", "partition2", "newEdges", "metaNodeMap", "sizeLimit", "numIter", "stopSize", "edgeIndexes", "minCutSize", "minCutEdgeIndexes", "minCutNodeMap", "metaNodeMap2", "copyNodesMap", "iter", "_i4", "edgesState", "edgesState2", "res1", "res2", "cut", "witnessNodePartition", "_i5", "partitionId", "constructComponent", "subset", "component", "components", "begin", "total", "sort", "includeHoles", "off", "deg", "dispX", "dispY", "dx", "dy", "p0", "vec", "vecDist", "normVec", "bb1", "bb2", "padding", "top", "right", "bottom", "left", "_padding", "nodeX", "nodeY", "cornerRadius", "halfWidth", "halfHeight", "doWidth", "doHeight", "straightLineIntersections", "topStartX", "topStartY", "topEndX", "topEndY", "rightStartX", "rightStartY", "rightEndX", "rightEndY", "bottomStartX", "bottomStartY", "bottomEndX", "bottomEndY", "leftStartX", "leftStartY", "leftEndX", "leftEndY", "arcIntersections", "topLeftCenterX", "topLeftCenterY", "topRightCenterX", "topRightCenterY", "bottomRightCenterX", "bottomRightCenterY", "bottomLeftCenterX", "bottomLeftCenterY", "lx1", "ly1", "lx2", "ly2", "tolerance", "x1", "x2", "y1", "y2", "x3", "y3", "sqrtR", "root1", "root2", "epsilon", "discriminant", "dum1", "term1", "r13", "zeroThreshold", "minDistanceSquared", "curX", "curY", "distSquared", "offset", "line", "lineSq", "hypSq", "dotProduct", "adjSq", "up", "basePoints", "direction", "transformedPoints", "expandedLineSet", "corners", "cutPolygonPoints", "corner", "squaredDistance", "lineSet", "vertices", "currentLineStartX", "currentLineStartY", "currentLineEndX", "currentLineEndY", "nextLineStartX", "nextLineStartY", "nextLineEndX", "nextLineEndY", "pad", "currentPointX", "currentPointY", "nextPointX", "nextPointY", "offsetX", "offsetY", "offsetLength", "normalizedOffsetX", "normalizedOffsetY", "ellipseWradius", "ellipseHradius", "newLength", "lenProportion", "t1", "t2", "tMin", "tMax", "inRangeParams", "nearIntersectionX", "nearIntersectionY", "farIntersectionX", "farIntersectionY", "x4", "y4", "infiniteLines", "dx13", "dx21", "dx43", "dy13", "dy21", "dy43", "ua_t", "ub_t", "u_b", "ua", "ub", "flptThreshold", "_min", "_max", "halfW", "halfH", "intersections", "doTransform", "currentY", "nextX", "nextY", "lines", "lowestIntersection", "lowestSquaredDistance", "amount", "disp", "lenRatio", "sides", "rotationRadians", "minX", "minY", "maxX", "maxY", "sx", "sy", "_i6", "increment", "startAngle", "currentAngle", "_pageRankDefaults", "dampingFactor", "precision", "iterations", "numNodesSqd", "columnSum", "additionalProb", "srcId", "tgtId", "_n", "_n2", "_n3", "eigenvector", "temp", "previous", "_j2", "_n4", "diff", "_i7", "delta", "indegrees", "outdegrees", "maxIndegree", "maxOutdegree", "_currDegree", "degrees", "maxDegree", "currDegree", "callingEles", "_options", "incoming", "outgoing", "k_in", "k_out", "s_in", "s_out", "connEdges", "harmonic", "closenesses", "maxCloseness", "fw", "currCloseness", "node_i", "_defaults2", "dijkstra", "totalDistance", "weighted", "_C", "P", "_vid", "_v", "vEle", "edgeWeight", "_w", "_w2", "_v2", "attributes", "M", "sum", "col", "_row", "expandFactor", "_M", "inflateFactor", "n2", "roundFactor", "clusters", "cluster", "c1", "c2", "id2position", "sim", "isStillMoving", "currentMax", "init", "visit", "post", "dim", "centroid", "mode", "noNodeP", "ndim", "centroids", "distance", "assignment", "sensitivityThreshold", "medoids", "potentialNewMedoid", "cost", "newCentroid", "curCost", "minCosts", "U", "numerator", "denominator", "_c", "_U", "pow", "_c2", "_c3", "preferredAlias", "dists", "mins", "minKey", "attrs", "n1", "_dist", "merged", "cur", "key1", "key2", "leftStr", "rightStr", "leaves", "retClusters", "dmp", "pref", "validPrefs", "attr", "preference", "R", "indices", "exemplars", "_ei", "ii", "maxI", "maxSum", "old", "Rp", "se", "_i8", "max2", "AS", "_i9", "_j3", "_j4", "_i10", "E", "_sum", "_i11", "_j5", "exemplarsIndices", "clusterIndices", "_i12", "clusterIndex", "_hierholzerDefaults", "dflag", "oddIn", "oddOut", "startVertex", "ind", "outd", "d1", "d2", "walk", "currentNode", "subtour", "adj", "adjTail", "adjHead", "trail", "edgeCount", "stack", "visitedEdges", "buildComponent", "cutset", "nodeId", "_biconnectedSearch", "otherNodeId", "edgeId", "cutVertices", "_stronglyConnectedSearch", "sourceNodeId", "targetNodeId", "componentNodes", "componentEdges", "executor", "onFulfilled", "onRejected", "curr", "state", "handlers", "then", "resolved", "ps", "resolveAll", "rejectAll", "vals", "doneCount", "fulfill", "isPromise", "opts2", "isEle", "tAni", "wasPlaying", "swap", "_pa", "startStyleProp", "selfIsArrayLike", "all", "complete", "properties", "propertiesEmpty", "panBy", "cyPan", "center", "centerPan", "fit", "fitVp", "vp", "clearQueue", "jumpToEnd", "single", "isPathLike", "change", "_valid", "names", "i_a", "l_a", "_i_a", "_l_a", "_privateFields", "_keys", "_key", "validKeyToDelete", "events", "offArgs", "onArgs", "_classes", "classesSet", "eleClasses", "changedEle", "eleHasClass", "className", "toggle", "toggleUndefd", "il", "hasClass", "changedNow", "duration", "ops", "op", "selToFn", "sel", "$1", "examiningQuery", "replacementQuery", "query", "_ref2", "_ref3", "_ref4", "_ref5", "_ref6", "_ref7", "_ref8", "_ref9", "_ref10", "variable", "_ref11", "_ref12", "comparatorOp", "valueIsString", "_ref13", "_ref14", "boolOp", "_ref15", "_ref16", "currentSubject", "compoundCount", "lastQ", "nextQuery", "edgeQuery", "srcTgtQ", "_source", "_target", "nhoodQ", "neighbor", "parentChildQuery", "compound", "subject", "_child", "_parent", "_parent2", "_child2", "pcQChecks", "ancChQuery", "descendant", "ancestor", "_descendant", "_ancestor", "_ancestor2", "_descendant2", "adQChecks", "topQ", "topChk", "topType", "remaining", "expr", "consumed", "currentQuery", "exprInfo", "clean", "cleanVal", "space", "checkToString", "check", "operator", "_operator", "_field", "_field2", "_operator2", "_field3", "queryToString", "lhs", "rhs", "chk", "fieldVal", "isFieldStr", "isFieldNum", "isValStr", "fieldStr", "valStr", "caseInsensitive", "notExpr", "isIneqCmp", "stateSelector", "qA", "qB", "selectorFunction", "otherSel", "selObj", "thisLength", "collectionLength", "nhood", "arg1", "arg2", "arg3", "arg4", "selectorOrEles", "tch", "ch", "cacheHit", "ancestors", "eleChildren", "silent", "oldPos", "_fn", "_pos", "setting", "ppos", "_ele2", "hasParent", "relativeToParent", "origin", "_hasParent", "_relativeToParent", "_origin", "force", "update", "includeLabels", "computeBiasValues", "propDiff", "propBias", "propBiasComplement", "biasDiff", "biasComplementDiff", "biasTotal", "computePaddingValues", "paddingObject", "relativeTo", "leftVal", "rightVal", "topVal", "bottomVal", "widthBiasDiffs", "diffLeft", "diffRight", "heightBiasDiffs", "diffTop", "diffBottom", "b2", "rstyle", "halfArW", "arrowType", "bbs", "prefixDash", "label", "halign", "valign", "labelWidth", "labelHeight", "labelX", "labelY", "marginX", "marginY", "isEdge", "rotation", "outlineWidth", "borderWidth", "halfBorderWidth", "marginOfError", "lh", "lw", "lw_2", "lh_2", "leftPad", "rightPad", "topPad", "botPad", "bbPrefix", "isAutorotate", "isPfValue", "theta", "xo", "yo", "px1y1", "px1y2", "px2y1", "px2y2", "bbPrefixRot", "bbRot", "outlineOpacity", "outlineOffset", "expansion", "expansionSize", "expansionPosition", "useFallbackValue", "shape", "rshape", "_ele$position", "mbb", "borderOpacity", "borderPosition", "styleEnabled", "headless", "isNode", "ex1", "ex2", "ey1", "ey2", "manualExpansion", "isDisplayed", "displayed", "overlayOpacity", "overlayPadding", "underlayOpacity", "underlayPadding", "wHalf", "curveStyle", "hpts", "_temp", "n1pos", "n2pos", "_temp2", "_temp3", "ghost", "gx", "gy", "bbBody", "bbOverlay", "bbLabels", "tf", "usingDefOpts", "useCache", "isDirty", "storeOldPos", "getOldPos", "borderPos", "border", "od", "getPoint", "getPoints", "rName", "q1", "q2", "qualifier", "conf", "confOverrides", "eventList", "namespace", "eventObj", "listeners", "listener", "extraParams", "manualCallback", "numListenersBeforeEmit", "_loop2", "selector1", "selector2", "arg", "argSel", "_filter", "filterEles", "include", "toRemove", "remove", "col1", "col2", "col1Smaller", "colS", "colL", "inOther", "both", "retEles", "toAdd", "toAddEle", "unmergedLastEle", "lastEleI", "lastEle", "lastEleId", "toRmFn", "mapFn", "initialValue", "valFn", "maxEle", "minEle", "getDepth", "depthDiff", "getEleDepth", "eleDiff", "zDiff", "thisSize", "sortFn", "sorted", "srcDepth", "tgtDepth", "typeofUndef", "isIteratorSupported", "dims", "bbDim", "layoutEles", "getMemoizeKey", "fnMem", "calculateSpacing", "spacing", "nodesBb", "spacingVector", "useSpacingFactor", "spacingBb", "getFinalPos", "animateNode", "fitAni", "zoomPanAni", "dirty", "notifyRenderer", "bEles", "updatedEles", "property", "includeNonDefault", "overriddenStyle", "pstyle", "updateTransitions", "parentOpacity", "disqualified", "oEles", "sEles", "sElesIds", "newNext", "nid", "otherNode", "visited", "unvisited", "visitInComponent", "cmpt", "unique", "removed", "createdElements", "elesIds", "json", "_data", "_l", "element$1", "_data2", "move", "newParentValSpecd", "checkSwitch", "trueFnName", "falseFnName", "obj_k", "jsons", "elesArr", "addToPool", "cy_p", "removeFromElements", "_private", "_data3", "fields", "fieldsLength", "badSourceOrTarget", "_data4", "parentId", "specifiedParent", "selfAsParent", "restored", "_ele3", "toUpdateStyle", "removeFromPool", "elesToRemove", "elesToRemoveIds", "addConnectedEdges", "alreadyAdded", "removeEdgeRef", "removeParallelRef", "pllEdge", "alteredParents", "removeChildRef", "pid", "_ele4", "pllEdges", "elesStillInside", "_ele5", "removedElements", "_ele6", "struct", "modifyPool", "srcExists", "tgtExists", "_data5", "parentExists", "pidToAssign", "updated", "_data6", "_jsons", "elesByGroup", "_jsons2", "grs", "elesArray", "jl", "_json", "springAccelerationForState", "springEvaluateStateWithDerivative", "initialState", "dt", "derivative", "springIntegrateState", "dxdt", "dvdt", "springRK4Factory", "tension", "friction", "initState", "time_lapsed", "DT", "have_duration", "last_state", "percentComplete", "bezier", "spring", "headlessStep", "eventEles", "bool", "ids", "pxRatio", "RendererProto", "rOpts", "domEle", "ie", "cxtMeta", "cxtStyle", "app", "hintsDiff", "oldCxtKey", "newCxtKey", "dualCxtKey", "cachedVal", "diffProps", "addedProp", "cxt", "oldHasCxt", "newHasCxt", "cxtHasDiffed", "cxtHasMappedProps", "laterCxtOverrides", "laterCxt", "hasLaterCxt", "cxtKey", "prevKey", "contextSelectorMatches", "cxtStyles", "hasCxt", "retDiffProps", "types", "diffPropName", "cxtProp", "eleProp", "mapping", "fnValue", "retDiffProp", "propNames", "propGrKeys", "propHash", "seedKey", "oldStyleKey", "overriddenStyles", "grKey", "updateGrKey1", "updateGrKey2", "updateGrKey", "updateGrKeyWStr", "strVal", "cleanNum", "parsedProp", "propInfo", "_grKey", "normalizedNumberVal", "numberVal", "haveNormNum", "haveUnitedNum", "haveNum", "units", "_grKey2", "grHash", "sk", "labelKeys", "sourceLabelKeys", "targetLabelKeys", "_p$styleKeys", "nodeBody", "nodeBorder", "nodeOutline", "backgroundImage", "pie", "stripe", "nodeKeys", "flatProp", "propIsBypass", "origProp", "origPropIsBypass", "flatPropMapping", "getVal", "checkTriggers", "fromVal", "toVal", "printMappingErr", "fieldWidth", "r1", "r2", "g1", "g2", "b1", "clr", "calcValue", "_fields", "_fieldVal", "fnRetVal", "keepBypasses", "delay", "anyPrev", "styProp", "diffProp", "prevProp", "fromProp", "toProp", "initVal", "initDt", "fromValue", "toValue", "getTrigger", "onTrigger", "triggerCheck", "isBypass", "_parsedProp", "specifiedProps", "_name2", "_value", "_parsedProp2", "_prop", "isColor", "isMulti", "oldValue", "px", "isRenderedVal", "subproperty", "styleProp", "strValue", "getRenderedValue", "getValueStringWithUnits", "isArrayValue", "haveUnits", "aniProps", "aniProp", "propsObj", "chVal", "css", "selAndBlockStr", "blockRem", "propAndValStr", "removeSelAndBlockFromRemaining", "removePropAndValFromRem", "nothingLeftToParse", "selAndBlock", "selectorStr", "blockStr", "invalidBlock", "_nothingLeftToParse", "propAndVal", "propStr", "hex3$1", "hex6$1", "mapData", "mapArg", "urlRegexes", "valArr", "unitsArr", "val1", "val2", "str1", "str2", "empty1", "empty2", "mainLabel", "sourceLabel", "targetLabel", "labelDimensions", "commonLabel", "behavior", "visibility", "overlay", "underlay", "transition", "nodeSizeHashOverride", "edgeLine", "edgeArrow", "arrowPrefixes", "triggersBounds", "propGroups", "propGroupNames", "propGroupKeys", "aliases", "alias", "pointsToProp", "aliasProp", "rawProps", "parsedProps", "propIsFlat", "flatKey", "bypassKey", "valueKey", "argHash", "propCache", "passedValue", "mapped", "_mapped", "valueMin", "valueMax", "pfValArr", "hasEnum", "checkEnums", "en", "implicitUnits", "unitsRegex", "propsStr", "propsSplit", "tuple", "enumProp", "regexes", "regex", "ele_p", "mapVal", "currentSelectorIsCore", "newStyle", "selType", "arg0", "viewportState", "bbe", "currentPan", "currentZoom", "bail", "pan1", "zoom1", "zoom2", "pan2", "zoomDefd", "panDefd", "zoomFailed", "panFailed", "z", "rb", "_int", "reg", "readies", "head", "defVal", "def", "altVal", "loadExtData", "extData", "anyIsPromise", "rendererOptions", "setElesAndLayout", "onload", "ondone", "oldEles", "layoutOpts", "thens", "initStyle", "initEles", "ownerDocument", "getFreshRef", "idInJson", "updateEles", "gr", "toMod", "_toMod$_i", "parentsToRemove", "flat", "graph", "maximal", "hasBoundingBox", "rootsArray", "comp", "compRoots", "depths", "foundByBfs", "addToDepth", "changeDepth", "newDepth", "pNode", "orphanNodes", "assignDepthsAt", "adjustMaximally", "shifted", "eInfo", "incomers", "maxDepth", "incmr", "iInfo", "enqueue", "dequeue", "didShift", "minDistance", "nbb", "cachedWeightedPercent", "getWeightedPercent", "eleDepth", "samples", "bf", "nDepth", "apct", "bpct", "depthsLen", "orphanDepth", "assignDepths", "biggestDepthSize", "aveNodeSize", "acc", "distanceY", "maxDepthSize", "getPositionTopBottom", "_getInfo2", "radiusStepSize", "depthSize", "distanceX", "epos", "rotateDegrees", "getPosition", "clockwise", "sweep", "dTheta", "dcos", "dsin", "rMin", "getPos", "nodeValues", "maxNodeSize", "levelWidth", "levels", "currentLevel", "minDist", "firstLvlHasMulti", "maxR", "rStep", "level", "rDeltaMax", "_r", "_level", "rDelta", "_level2", "_level3", "_dTheta", "_r2", "_val", "layoutInfo", "refresh", "mainLoop", "done", "getScaledPos", "loopRet", "_frame", "id2cmptId", "tempNode", "tempGraph", "p_id", "node_id", "node_ix", "tempEdge", "idealLength", "elasticity", "sourceIx", "targetIx", "sourceGraph", "targetGraph", "lca", "lcaGraph", "graphIx", "nodeIx", "childGraphIx", "coseBB", "lnode", "pctX", "pctY", "cmptId1", "cmptId2", "directionX", "directionY", "maxRandDist", "overlap", "forceX", "forceY", "point1", "point2", "distanceSqr", "dX", "dY", "overlapX", "overlapY", "X", "Y", "H", "W", "dirSlope", "nodeSlope", "lx", "ly", "distThreshold", "fx", "fy", "nodeIndex", "offX", "offY", "childNode", "tempForce", "flag", "cid", "totalA", "usedW", "rowH", "maxRowW", "cells", "splits", "rows", "cols", "small", "large", "oRows", "oCols", "sm", "lg", "_sm", "_lg", "cellWidth", "cellHeight", "cellUsed", "used", "use", "moveToNextCell", "id2manPos", "rcPos", "posIsFn", "arrowShapes", "bbCollide", "translation", "edgeWidth", "inside", "xRotated", "yRotated", "xScaled", "yScaled", "xTranslated", "yTranslated", "pointsToArr", "standardGap", "defineArrowShape", "defn", "ptsTrans", "ctrlPt", "ctrlPtTrans", "circleInside", "shiftFactor", "y0", "crossLinePts", "clientX", "clientY", "offsets", "offsetLeft", "offsetTop", "rect", "styleValue", "clientWidth", "clientHeight", "paddingHor", "paddingVer", "borderHor", "unscaledW", "unscaledH", "near", "edgeThreshold", "nodeThreshold", "labelThreshold", "minSqDist", "nearEdge", "nearNode", "addEle", "sqDist", "checkNode", "hw", "hh", "checkEdge", "styleWidth", "widthSq", "width2", "arSize", "arrows", "ar", "preprop", "checkLabel", "th", "text", "eventsEnabled", "ox", "oy", "x1c", "x2c", "y1c", "y2c", "boxBb", "selectionBox", "boxEdges", "getRotatedLabelBox", "doLinesIntersect", "ccw", "textEvents", "nodeBoxSelectMode", "labelBoxSelectEnabled", "nodeBb", "selected", "rotatedLabelBox", "nodeBodyBb", "nodeBodyCorners", "_rotatedLabelBox", "edgeBoxSelectMode", "allInside", "_selected", "haystackPts", "_pts", "segStart", "segEnd", "_boxEdges$b", "boxStart", "boxEnd", "isHaystack", "isBezier", "isMultibezier", "isSegments", "isCompound", "isSelf", "endX", "endY", "midX", "midY", "bX", "bY", "i2", "i1", "cpts", "bp0x", "bp0y", "bp1x", "bp1y", "ic", "i3", "pp", "originalV", "invertedV", "pairInfo", "posPts", "intersectionPts", "vectorNormInverse", "midptPts", "srcManEndpt", "tgtManEndpt", "haveManualEndPts", "recalcVectorNormInverse", "edgeDistances", "_this$manualEndptToPx", "_this$manualEndptToPx2", "_this$manualEndptToPx3", "_this$manualEndptToPx4", "endPts", "srcPos", "tgtPos", "srcW", "tgtW", "srcH", "tgtH", "halfRadius", "segmentWs", "segmentDs", "segmentRs", "segmentTs", "segmentsN", "lastRadius", "lastRadiusType", "w1", "w2", "_this$findMidptPtsEtc", "adjustedMidpt", "edgeIsUnbundled", "dirCounts", "ctrlptDists", "ctrlptDist", "loopDir", "loopSwp", "stepSize", "loopDist", "loopAngle", "outAngle", "inAngle", "dc", "loopW", "loopaPos", "loopbPos", "loopPos", "minCompoundStretch", "compoundStretchA", "compoundStretchB", "edgeIsSwapped", "ctrlptWs", "bezierN", "ctrlptWeight", "multi", "normctrlptDist", "manctrlptDist", "sign", "distanceFromMidpoint", "_this$findMidptPtsEtc2", "VERTICAL", "HORIZONTAL", "LEFTWARD", "RIGHTWARD", "DOWNWARD", "UPWARD", "AUTO", "dIncludesNodeBody", "taxiDir", "rawTaxiDir", "taxiTurn", "turnIsPercent", "taxiTurnPfVal", "turnIsNegative", "minD", "dw", "dh", "pdx", "pdy", "subDWH", "dxy", "dwh", "isExplicitDir", "isVert", "pl", "sgnL", "forcedDir", "getIsTooClose", "isTooCloseSrc", "isTooCloseTgt", "isTooClose", "lShapeInsideSrc", "lShapeInsideTgt", "_lShapeInsideSrc", "_lShapeInsideTgt", "_y", "_x", "_x2", "_x3", "_y2", "_y3", "_y4", "_x4", "_x5", "_x6", "_y5", "_y6", "srcShape", "tgtShape", "srcCornerRadius", "tgtCornerRadius", "srcRs", "tgtRs", "badStart", "badAStart", "badEnd", "badAEnd", "minCpADistFactor", "arrowW", "minCpADist", "startACpDist", "closeStartACp", "endACpDist", "closeEndACp", "overlapping", "cpD", "cpL", "cpM", "cpProj", "srcCtrlPtIntn", "_cpD", "_cpL", "_cpM", "_radius", "_cpProj", "tgtCtrlPtIntn", "mt", "factor", "hashTable", "pairId", "pairIds", "haystackEdges", "edgeIsBezier", "srcIndex", "tgtIndex", "tableEntry", "_pairIds$p", "swappedpairInfo", "firstEdge", "_curveStyle", "_edgeIsUnbundled", "srcOutside", "srcIntn", "tgtOutside", "tgtIntn", "vector", "vectorNorm", "passedPairInfo", "npos", "_tgtManEndpt$pfValue", "_srcManEndpt$pfValue", "intersect", "tgtArShape", "srcArShape", "et", "taxi", "segments", "hasEndpts", "overrideEndpts", "srcManEndptVal", "tgtManEndptVal", "p1_i", "p2_i", "tgtManEndptPt", "srcManEndptPt", "cpStart", "cpEnd", "srcArrowFromPt", "tgtArrowFromPt", "trs", "lw2", "lh2", "va", "ha", "labelIntersect", "refPt", "intSqdist", "labIntSqdist", "labInt2SqDist", "arrowEnd", "edgeEnd", "srs", "_lw", "_lh", "_lx", "_ly", "_lw2", "_lh2", "_va", "_ha", "_labelIntersect", "_refPt", "_intSqdist", "_labIntSqdist", "_minSqDist", "_labInt2SqDist", "arrowStart", "edgeStart", "lpts", "content", "textX", "textY", "nodeWidth", "nodeHeight", "nodePos", "textHalign", "textValign", "t0", "lp0", "lp1", "setRs", "midAngle", "_createControlPointInfo", "ctrlpts", "nProjs", "addSegment", "cp", "prevSegment", "segment", "prevCp", "calculateEndProjection", "isSrc", "cps", "startDist", "totalDist", "_cp", "_seg", "lastSeg", "seg", "tSegment", "segDt", "di", "d0", "pD", "_t", "cacheKey", "labelDims", "lineHeight", "textWrap", "numLines", "normPerLineHeight", "labelLineHeight", "pfd", "textTransform", "rscratch", "wrapStyle", "labelKey", "zwsp", "maxW", "overflow", "overflowAny", "wrappedLines", "separatorRegex", "lineDims", "lineW", "processedLine", "separatorMatches", "subline", "previousIndex", "separatorMatch", "wordSeparator", "word", "testLine", "testDims", "testW", "_maxW", "ellipsized", "ellipsis", "incLastCh", "widthWithNextCh", "justification", "fStyle", "family", "c2d", "ds", "metrics", "rot", "rotStr", "elesToUpdate", "dirtyStyleCaches", "updateEleCalcs", "fns", "isCleanConnected", "_p2", "_rstyle", "_p3", "_rstyle2", "grabTargets", "forceRecalc", "url", "crossOrigin", "onLoad", "imageCache", "image", "dataUriPrefix", "isDataUri", "useCapture", "tgtIsDom", "supportsPassive", "on", "isSelected", "getShadowRoot", "rootNode", "triggerEvents", "isMultSelKeyDown", "allowPanningPassthrough", "down", "downs", "allowPassthrough", "setGrabbed", "setFreed", "setInDragLayer", "setOutDragLayer", "setGrabTarget", "removeGrabTarget", "addToDragList", "list", "listHasEle", "addDescendantsToDrag", "innerNodes", "addNodesToDrag", "updateAncestorsInDragLayer", "addNodeToDrag", "freeDraggedElements", "grabbedEles", "blurActiveDomElement", "haveMutationsApi", "haveResizeObserverApi", "mutns", "mutn", "rNodes", "rNode", "onResize", "forEachUp", "invalidateCoords", "inBoxSelection", "eventInContainer", "containerPageCoords", "positions", "atLeastOnePosInside", "tParent", "containerIsTarget", "gpos", "select", "nears", "draggedElements", "makeEvent", "checkForTaphold", "cxtEvt", "triggerGrab", "selectedNodes", "shadowRoot", "capture", "preventDefault", "mdownPos", "mdownGPos", "last", "isOverThresholdDrag", "dx2", "dy2", "dist2", "multSelKeyDown", "updateDragDelta", "dragDelta", "goIntoBoxMode", "deltaP", "mdPos", "justStartedDrag", "totalShift", "clickTimeout", "didDoubleClick", "prevClickTimeStamp", "cxtTap", "eleWouldBeSelected", "downWasGrabbed", "wheelDeltas", "wheelDeltaN", "inaccurateScrollDevice", "inaccurateScrollFactor", "allAreDivisibleBy", "allAreSameMagnitude", "firstMag", "wheelHandler", "clamp", "wds", "needsWheelFix", "newZoom", "f1x1", "f1y1", "f2x1", "f2y1", "distance1", "distance1Sq", "center1", "modelCenter1", "containerWidth", "containerHeight", "twoFingersStartInside", "distanceSq", "touchstartHandler", "earlier", "cxtDistThreshold", "cxtDistThresholdSq", "near1", "near2", "draggedEles", "sPos", "touch0", "touchmoveHandler", "startGPos", "f1x2", "f1y2", "f2x2", "f2y2", "distance2Sq", "factorSq", "distThresholdSq", "factorThreshold", "factorThresholdSq", "de_p", "_start", "distance2", "df1x", "df1y", "df2x", "df2y", "tx", "ty", "ctrx", "ctry", "touchcancelHandler", "touchendHandler", "didDoubleTouch", "touchTimeout", "prevTouchTimeStamp", "ctxTapend", "ctxTap", "startWasGrabbed", "rdist2", "pointers", "makeTouch", "makePointer", "addPointer", "removePointer", "updatePointer", "addTouchesToEvent", "pointerIsMouse", "strokePosition", "diam", "cl", "xBegin", "xEnd", "yBegin", "yEnd", "cPts", "cutTrianglePts", "bPts", "approximateBarrelCurvePts", "m0", "m1", "m2", "curveConstants", "hOffset", "wOffset", "ctrlPtXOffset", "barrelCurvePts", "getCurveT", "curvePts", "x0", "xMin", "xMax", "yMin", "yMax", "coeff", "validRoots", "curveRegions", "cornerPts", "bezY", "topIntersections", "outerWidth", "outerHeight", "nodeShapes", "diamondPoints", "star5Points", "outerPoints", "innerPoints", "innerRadius", "tagPoints", "priority", "cbs", "_renderFn", "requestTime", "endTime", "ctr", "stylesheetId", "stylesheetAlreadyExists", "computedStyle", "binding", "queueRedraw", "frameStartTime", "avgRenderTime", "renderTime", "deqd", "extent", "frameDuration", "timeAvailable", "thisDeqd", "doesEleInvalidateKey", "idsByKey", "currKey", "newKey", "lvl", "cachesByLvl", "lvls", "caches", "entireKeyInvalidated", "initOptions", "txrH", "rtxtrQs", "rtxtrQ", "k2q", "reason", "eleScaledH", "eleScaledW", "eleCache", "txrQ", "txr", "addNewTxr", "scalableFrom", "otherCache", "deqing", "highQualityReq", "downscaleReq", "higherCache", "oneUpCache", "downscale", "lowerCache", "_l2", "invalid", "noOtherElesUseCache", "_cache", "eleCaches", "minW", "existingReq", "req", "dequeued", "cacheExists", "qSort", "layer", "firstGet", "layersByLvl", "layers", "lvlComplete", "tmpLayers", "checkTempLevels", "canUseAsTmpLvl", "checkLvls", "dir", "getBb", "makeLayer", "after", "area", "maxElesPerLayer", "allowLazyQueueing", "existingLayer", "numElesInLayers", "haveLayers", "rLyr", "elesQ", "hasId", "eleDeqs", "layersInLevel", "replaced", "shiftToOriginWithBb", "showLabel", "showOverlay", "showOpacity", "getRotation", "smooth", "rotPt", "oldGlobalAlpha", "requestHighQuality", "_r$data", "badLine", "shouldDrawOverlay", "shouldDrawOpacity", "lineOpacity", "lineStyle", "lineCap", "lineOutlineWidth", "lineOutlineColor", "effectiveLineOpacity", "effectiveArrowOpacity", "drawLine", "strokeOpacity", "drawLineOutline", "drawOverlay", "drawUnderlay", "drawArrows", "arrowOpacity", "drawText", "ghostOpacity", "effectiveGhostOpacity", "overlayOrUnderlay", "usePaths", "canvasCxt", "pathCacheHit", "lineDashPattern", "lineDashOffset", "pathCacheKey", "keyMatches", "triangleHead", "arrowShape", "arrowClearFill", "arrowFill", "pArrowWidth", "arrowWidth", "edgeOpacity", "gco", "fill", "shapeWidth", "canvasContext", "shapeImpl", "cachedPath", "img", "ix", "iy", "iw", "ih", "nodeOpacity", "styleObj", "getIndexedStyle", "repeat", "nodeW", "nodeH", "paddingX2", "nodeTW", "nodeTH", "clip", "shouldClip", "imgOpacity", "imgW", "imgH", "posXUnits", "posXPfVal", "offXUnits", "offXPfVal", "posYUnits", "posYPfVal", "offYUnits", "offYPfVal", "gAlpha", "smoothingEnabled", "isSmoothingSwitched", "computedSize", "minSize", "_label", "srcLabel", "tgtLabel", "applyRotation", "labelStyle", "labelSize", "labelFamily", "labelWeight", "outlineColor", "pdash", "textAngle", "orgTextX", "orgTextY", "textW", "textH", "backgroundOpacity", "textBorderWidth", "backgroundPadding", "styleShape", "rounded", "circled", "roundRadius", "textFill", "textStroke", "textLineWidth", "textBackgroundColor", "textBorderColor", "textBorderStyle", "doFill", "doStroke", "bgX", "bgY", "bgW", "bgH", "whiteWidth", "lineWidth", "halfTextW", "eleOpacity", "bgImgProp", "urls", "urlDefined", "numImages", "defd", "bgImgCrossOrigin", "darkness", "bgOpacity", "borderColor", "borderStyle", "borderJoin", "borderCap", "borderPattern", "borderOffset", "outlineStyle", "setupShapeColor", "bgOpy", "setupBorderColor", "bdrOpy", "setupOutlineColor", "otlnOpy", "getPath", "pathCache", "shapePts", "shapePath", "drawShape", "drawImages", "prevBging", "totalCompleted", "bgContainment", "drawPie", "redrawShape", "pieOpacity", "drawStripe", "stripeOpacity", "darken", "darkenOpacity", "drawBorder", "region", "drawOutline", "bWidth", "scaleX", "scaleY", "sWidth", "sHeight", "_path", "outlinePath", "sMult", "_pad", "effGhostOpacity", "cyStyle", "pieSize", "hole", "overallStartAngle", "holeRadius", "lastPercent", "angleStart", "angleDelta", "angleEnd", "stripeSize", "stripeW", "stripeH", "backingStore", "needToCreateCache", "shapeStyleName", "gradientStyle", "_end", "_width", "_height", "hasPositions", "backgroundFill", "backgroundColor", "lineFill", "lineColor", "mbPxRatio", "canvasWidth", "canvasHeight", "canvasContainer", "forcedContext", "drawAllLayers", "drawOnlyNodeLayer", "forcedZoom", "forcedPan", "needDraw", "textureDraw", "motionBlur", "inNodeDragGesture", "motionBlurFadeEffect", "effectiveZoom", "effectivePan", "prevVp", "viewportIsDiff", "mbclear", "ePan", "eZoom", "outsideBgColor", "outsideBgOpacity", "vpManip", "hideEdges", "needMbClear", "useBuffer", "cxtNode", "txtNode", "cxtDrag", "txtDrag", "drawMotionBlur", "txt", "needClear", "pxr", "timeToRender", "fps", "maxFps", "texSize", "texRows", "texHeight", "maxTexWidth", "texW", "texH", "doDrawing", "_this$getScale", "drawAt", "location", "xOffset", "yOffset", "locations", "drawNormal", "drawWrapped", "scratch", "firstTexW", "secondTexW", "_dy", "moveToStartOfNextRow", "_this$getScale2", "_this2", "markedKeys", "newAtlases", "newStyleKeyToAtlas", "newAtlas", "keysToCollect", "_atlas$getOffsets", "_atlas$getOffsets2", "s1", "s2", "oldAtlas", "_oldAtlas$getOffsets", "_oldAtlas$getOffsets2", "globalOptions", "collectionName", "atlasCollectionOptions", "_this$globalOptions", "webglTexSize", "cachedCreateTextureCanvas", "atlasCollection", "renderTypeOptions", "prevW", "prevH", "scratchCanvas", "renderType", "_this3", "_ref2$forceRedraw", "forceRedraw", "_ref2$filterEle", "filterEle", "_ref2$filterType", "filterType", "needGC", "runGCNow", "_iterator3", "_step3", "_iterator4", "_step4", "keyArray", "mapKey", "oldKeyArray", "oldKey", "_iterator5", "_step5", "styleKey", "drawn", "_this4", "_atlas$getOffsets3", "_atlas$getOffsets4", "tex1", "tex2", "_iterator6", "_step6", "_step6$value", "_collection$getCounts", "keyCount", "atlasCount", "atlasID", "typeName", "atlasManager", "vertexShaderSource", "idxs", "fragmentShaderSource", "unitSquare", "vao", "eleIndex", "batchManager", "atlasInfoArray", "atlasIndex", "_arr", "_arr$_i", "tex", "first", "instance", "indexView", "atlasIdView", "texView", "matrixView", "ratio", "adjBB", "_bb", "_adjBB", "_opts$getRotationPoin", "adjW", "colorView", "vertType", "radiusView", "lineWidthView", "borderColorView", "shapeProp", "radiusProp", "baseOpacity", "scale$1", "lineWidthBuffer", "sourceTargetView", "_instance", "_indexView", "_colorView", "_lineWidthBuffer", "pAx", "pAy", "pBx", "pBy", "pCx", "pCy", "pDx", "pDy", "pointABView", "pointCDView", "numSegments", "curvePoints", "cpi", "newpoints", "vertexCount", "webglBgColor", "totalAtlases", "batchInfo", "totalInstances", "isLabelVisible", "isLayerVisible", "getTexPickingMode", "getBBForSimpleShape", "_node$position", "setGCFlag", "gcNeeded", "getBoundingBox", "ui", "lineIndex", "cornerLength", "barrelCurveConstants", "xPos", "yPos", "rw", "rh", "ctrRect", "specdMaxDims", "maxScaleW", "maxScaleH", "buffCanvas", "buffCxt", "zsortedEles", "require_layout_base", "__commonJSMin", "exports", "module", "__name", "root", "factory", "modules", "installedModules", "__webpack_require__", "moduleId", "value", "name", "getter", "object", "property", "LayoutConstants", "LGraphObject", "IGeometry", "IMath", "LEdge", "source", "target", "vEdge", "prop", "node", "graph", "otherEnd", "clipPointCoordinates", "vGraphObject", "Integer", "RectangleD", "RandomSeed", "PointD", "LNode", "gm", "loc", "size", "vNode", "width", "height", "upperLeft", "dimension", "cx", "cy", "x", "y", "dx", "dy", "to", "edgeList", "edge", "self", "other", "neighbors", "withNeighborsList", "childNode", "children", "nodes", "i", "noOfChildren", "randomCenterX", "randomCenterY", "minX", "maxX", "minY", "maxY", "childGraph", "trans", "left", "top", "leftTop", "vLeftTop", "pt", "dim", "LGraphManager", "Point", "LinkedList", "LGraph", "parent", "obj2", "vGraph", "obj1", "sourceNode", "targetNode", "newNode", "newEdge", "obj", "edgesToBeRemoved", "s", "index", "sourceIndex", "targetIndex", "nodeTop", "nodeLeft", "margin", "lNode", "recursive", "right", "bottom", "nodeRight", "nodeBottom", "boundingRect", "queue", "visited", "currentNode", "neighborEdges", "currentNeighbor", "childrenOfNode", "neighborEdge", "childrenOfNeighbor", "noOfVisitedInThisGraph", "visitedNode", "layout", "ngraph", "nnode", "newGraph", "parentNode", "sourceGraph", "targetGraph", "lObj", "nodesToBeRemoved", "nodeList", "graphs", "firstNode", "secondNode", "ownerGraph", "sourceAncestorGraph", "targetAncestorGraph", "edges", "firstOwnerGraph", "secondOwnerGraph", "depth", "FDLayoutConstants", "rectA", "rectB", "overlapAmount", "separationBuffer", "directions", "slope", "moveByY", "moveByX", "result", "p1x", "p1y", "p2x", "p2y", "topLeftAx", "topLeftAy", "topRightAx", "bottomLeftAx", "bottomLeftAy", "bottomRightAx", "halfWidthA", "halfHeightA", "topLeftBx", "topLeftBy", "topRightBx", "bottomLeftBx", "bottomLeftBy", "bottomRightBx", "halfWidthB", "halfHeightB", "clipPointAFound", "clipPointBFound", "slopeA", "slopeB", "slopePrime", "cardinalDirectionA", "cardinalDirectionB", "tempPointAx", "tempPointAy", "tempPointBx", "tempPointBy", "line", "s1", "s2", "f1", "f2", "x1", "y1", "x2", "y2", "x3", "y3", "x4", "y4", "a1", "a2", "b1", "b2", "c1", "c2", "denom", "Cx", "Cy", "Nx", "Ny", "C_angle", "p1", "p2", "p3", "p4", "a", "b", "c", "d", "p", "q", "r", "det", "lambda", "gamma", "_createClass", "defineProperties", "props", "descriptor", "Constructor", "protoProps", "staticProps", "_classCallCheck", "instance", "nodeFrom", "add", "prev", "next", "list", "_remove", "vals", "_this", "v", "val", "otherNode", "current", "_typeof", "UniqueIDGeneretor", "id", "arg", "type", "_toConsumableArray", "arr", "arr2", "Transform", "Emitter", "Layout", "isRemoteUse", "isLayoutSuccessfull", "allEdges", "newLeftTop", "flatForest", "isForest", "allNodes", "isFlat", "toBeVisited", "parents", "unProcessedNodes", "temp", "dummyNodes", "dummyNode", "dummyEdge", "k", "lEdge", "path", "ebp", "sliderValue", "defaultValue", "minDiv", "maxMul", "minValue", "maxValue", "removedNodes", "remainingDegrees", "foundCenter", "centerNode", "degree", "tempList", "tempList2", "neighbours", "neighbour", "otherDegree", "newDegree", "wox", "woy", "wex", "wey", "dox", "doy", "dex", "dey", "xDevice", "worldExtX", "yDevice", "worldExtY", "xWorld", "deviceExtX", "yWorld", "deviceExtY", "inPoint", "outPoint", "FDLayout", "lcaDepth", "sizeOfSourceInLca", "sizeOfTargetInLca", "lEdges", "gridUpdateAllowed", "forceToNodeSurroundingUpdate", "j", "nodeA", "nodeB", "lNodes", "processedNodeSet", "idealLength", "length", "springForce", "springForceX", "springForceY", "clipPoints", "distanceX", "distanceY", "distanceSquared", "distance", "repulsionForce", "repulsionForceX", "repulsionForceY", "childrenConstant", "ownerCenterX", "ownerCenterY", "absDistanceX", "absDistanceY", "estimatedSize", "converged", "oscilating", "sizeX", "sizeY", "grid", "startX", "finishX", "startY", "finishY", "surrounding", "FDLayoutEdge", "FDLayoutNode", "_startX", "_finishX", "_startY", "_finishY", "DimensionD", "HashMap", "key", "theId", "HashSet", "keys", "Quicksort", "A", "compareFunction", "NeedlemanWunsch", "sequence1", "sequence2", "match_score", "mismatch_penalty", "gap_penalty", "_i", "_j", "_i2", "_j2", "diag", "up", "maxOf", "indices", "inProcessAlignments", "indexes", "array", "layoutBase", "event", "callback", "l", "data", "require_cose_base", "__commonJSMin", "exports", "module", "__name", "root", "factory", "__WEBPACK_EXTERNAL_MODULE_0__", "modules", "installedModules", "__webpack_require__", "moduleId", "value", "name", "getter", "object", "property", "FDLayoutConstants", "CoSEConstants", "prop", "FDLayoutEdge", "CoSEEdge", "source", "target", "vEdge", "LGraph", "CoSEGraph", "parent", "graphMgr", "vGraph", "LGraphManager", "CoSEGraphManager", "layout", "FDLayoutNode", "IMath", "CoSENode", "gm", "loc", "size", "vNode", "dX", "dY", "nodes", "node", "i", "pred1", "next", "processed", "FDLayout", "LayoutConstants", "Point", "PointD", "Layout", "Integer", "IGeometry", "Transform", "CoSELayout", "createBendsAsNeeded", "allNodes", "intersection", "x", "forest", "gridUpdateAllowed", "forceToNodeSurroundingUpdate", "pData", "rect", "id", "layoutEnded", "nodeList", "graph", "graphs", "edges", "visited", "edge", "edgeList", "k", "multiEdge", "currentStartingPoint", "numberOfColumns", "height", "currentY", "currentX", "point", "tree", "centerNode", "startingPoint", "radialSep", "bounds", "transform", "bottomRight", "parentOfNode", "startAngle", "endAngle", "distance", "radialSeparation", "halfInterval", "nodeAngle", "teta", "cos_teta", "x_", "y_", "neighborEdges", "childCount", "branchCount", "incEdgesCount", "startIndex", "temp", "index", "stepAngle", "currentNeighbor", "childStartAngle", "childEndAngle", "maxDiagonal", "diagonal", "self", "tempMemberGroups", "zeroDegree", "p_id", "dummyCompoundId", "dummyCompound", "dummyParentGraph", "parentGraph", "childGraphMap", "idToNode", "tiledZeroDegreePack", "compoundNode", "lCompoundNode", "horizontalMargin", "verticalMargin", "tiledPack", "childGraph", "children", "theChild", "degree", "child", "organization", "y", "compoundHorizontalMargin", "compoundVerticalMargin", "left", "row", "maxHeight", "j", "lnode", "minWidth", "verticalPadding", "horizontalPadding", "n1", "n2", "lNode", "rowIndex", "minCompoundSize", "secondDimension", "w", "h", "extraHeight", "r", "min", "max", "extraWidth", "sri", "hDiff", "add_to_row_ratio", "add_new_row_ratio", "longest", "last", "diff", "prevTotal", "finalTotal", "prunedNodesAll", "containsLeaf", "prunedNodesInStepTemp", "prunedNodesInStep", "lengthOfPrunedNodesInStep", "nodeData", "gridForPrunedNode", "nodeToConnect", "prunedNode", "startGridX", "finishGridX", "startGridY", "finishGridY", "upNodeCount", "downNodeCount", "rightNodeCount", "leftNodeCount", "controlRegions", "minCount", "minIndex", "random", "coseBase", "require_cytoscape_cose_bilkent", "__commonJSMin", "exports", "module", "__name", "root", "factory", "__WEBPACK_EXTERNAL_MODULE_0__", "modules", "installedModules", "__webpack_require__", "moduleId", "value", "name", "getter", "object", "property", "LayoutConstants", "FDLayoutConstants", "CoSEConstants", "CoSELayout", "CoSENode", "PointD", "DimensionD", "defaults", "extend", "options", "obj", "i", "_CoSELayout", "_options", "getUserOptions", "ready", "frameId", "idToLNode", "layout", "self", "gm", "nodes", "edges", "edge", "sourceNode", "targetNode", "e1", "getPositions", "ele", "theId", "lNode", "iterateAnimated", "afterReposition", "ticksPerFrame", "isDone", "animationData", "pNode", "temp", "nodesMap", "roots", "parent", "children", "size", "theChild", "children_of_children", "theNode", "dimensions", "labelWidth", "labelHeight", "labelPos", "theNewGraph", "register", "cytoscape", "addNodes", "nodes", "cy", "node", "nodeData", "key", "addEdges", "edges", "edge", "edgeData", "createCytoscapeInstance", "data", "resolve", "renderEl", "select_default", "cytoscape", "n", "layoutConfig", "e", "log", "extractPositionedNodes", "position", "positionedNode", "extractPositionedEdges", "rscratch", "positionedEdge", "import_cytoscape_cose_bilkent", "init_cytoscape_setup", "__esmMin", "init_cytoscape_esm", "init_src", "init_logger", "coseBilkent", "__name", "executeCoseBilkentLayout", "data", "_config", "log", "validateLayoutData", "cy", "createCytoscapeInstance", "positionedNodes", "extractPositionedNodes", "positionedEdges", "extractPositionedEdges", "error", "init_layout", "__esmMin", "init_logger", "init_cytoscape_setup", "__name", "render", "init_render", "__esmMin", "init_layout", "__name", "data4Layout", "svg", "insertCluster", "insertEdge", "insertEdgeLabel", "insertMarkers", "insertNode", "log", "positionEdgeLabel", "_algorithm", "nodeDb", "clusterDb", "element", "subGraphsEl", "edgePaths", "edgeLabels", "nodes", "node", "clusterNode", "nodeWithPosition", "nodeEl", "boundingBox", "updatedLayoutData", "nodeWithDimensions", "layoutResult", "executeCoseBilkentLayout", "positionedNode", "positionedEdge", "edge", "e", "_edgeLabel", "startNode", "endNode", "edgeWithPath", "paths", "cose_bilkent_exports", "__export", "render", "init_cose_bilkent", "__esmMin", "init_render", "layoutAlgorithms", "registerLayoutLoaders", "registerDefaultLayoutLoaders", "render", "getRegisteredLayoutAlgorithm", "init_render", "__esmMin", "init_internals", "init_logger", "__name", "loaders", "loader", "data4Layout", "svg", "layoutDefinition", "internalHelpers", "algorithm", "fallback", "log", "setupViewPortForSVG", "calculateDimensionsWithPadding", "createViewBox", "init_setupViewPortForSVG", "__esmMin", "init_setupGraphViewbox", "init_logger", "__name", "svg", "padding", "cssDiagram", "useMaxWidth", "width", "height", "x", "y", "configureSvgSize", "viewBox", "log", "bounds", "getClasses", "draw", "flowRenderer_v3_unified_default", "init_flowRenderer_v3_unified", "__esmMin", "init_src", "init_diagramAPI", "init_logger", "init_insertElementsForSize", "init_render", "init_setupViewPortForSVG", "init_utils", "__name", "text", "diagramObj", "id", "_version", "diag", "log", "securityLevel", "conf", "layout", "getConfig", "sandboxElement", "select_default", "doc", "data4Layout", "svg", "getDiagramElement", "direction", "getRegisteredLayoutAlgorithm", "render", "padding", "utils_default", "setupViewPortForSVG", "vertex", "node", "link", "linkNode", "shape", "label", "parser", "flow_default", "init_flow", "__esmMin", "o", "__name", "k", "v", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "$Vd", "$Ve", "$Vf", "$Vg", "$Vh", "$Vi", "$Vj", "$Vk", "$Vl", "$Vm", "$Vn", "$Vo", "$Vp", "$Vq", "$Vr", "$Vs", "$Vt", "$Vu", "$Vv", "$Vw", "$Vx", "$Vy", "$Vz", "$VA", "$VB", "$VC", "$VD", "$VE", "$VF", "$VG", "$VH", "$VI", "$VJ", "$VK", "$VL", "$VM", "$VN", "$VO", "$VP", "$VQ", "$VR", "$VS", "$VT", "$VU", "$VV", "$VW", "$VX", "$VY", "$VZ", "$V_", "$V$", "$V01", "$V11", "$V21", "$V31", "$V41", "$V51", "$V61", "$V71", "$V81", "$V91", "$Va1", "$Vb1", "$Vc1", "$Vd1", "$Ve1", "$Vf1", "$Vg1", "$Vh1", "$Vi1", "$Vj1", "$Vk1", "$Vl1", "$Vm1", "$Vn1", "$Vo1", "$Vp1", "$Vq1", "$Vr1", "$Vs1", "$Vt1", "$Vu1", "$Vv1", "$Vw1", "$Vx1", "$Vy1", "$Vz1", "$VA1", "$VB1", "$VC1", "$VD1", "$VE1", "$VF1", "$VG1", "$VH1", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "inf", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "args", "lexer", "sharedState", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "YYSTATE", "re", "Parser", "newParser", "flowParser_default", "init_flowParser", "__esmMin", "init_flow", "flow_default", "src", "newSrc", "getIconStyles", "init_globalStyles", "__esmMin", "__name", "fade", "getStyles", "styles_default", "init_styles", "__esmMin", "init_dist", "init_globalStyles", "__name", "color", "opacity", "channel", "channel_default", "r", "g", "b", "rgba_default", "options", "getIconStyles", "flowDiagram_exports", "__export", "diagram", "init_flowDiagram", "__esmMin", "init_diagramAPI", "init_flowDb", "init_flowRenderer_v3_unified", "init_flowParser", "init_styles", "flowParser_default", "FlowDB", "flowRenderer_v3_unified_default", "styles_default", "__name", "cnf", "setConfig", "parser", "erDiagram_default", "init_erDiagram", "__esmMin", "o", "__name", "k", "v", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "$Vd", "$Ve", "$Vf", "$Vg", "$Vh", "$Vi", "$Vj", "$Vk", "$Vl", "$Vm", "$Vn", "$Vo", "$Vp", "$Vq", "$Vr", "$Vs", "$Vt", "$Vu", "$Vv", "$Vw", "$Vx", "$Vy", "$Vz", "$VA", "$VB", "$VC", "$VD", "$VE", "$VF", "$VG", "$VH", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "args", "lexer", "sharedState", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "YYSTATE", "Parser", "ErDB", "init_erDb", "__esmMin", "init_logger", "init_diagramAPI", "init_commonDb", "init_utils", "setAccTitle", "getAccTitle", "setAccDescription", "getAccDescription", "setDiagramTitle", "getDiagramTitle", "__name", "getConfig", "name", "alias", "log", "entityName", "attribs", "entity", "entA", "rolA", "entB", "rSpec", "entityA", "entityB", "rel", "dir", "classDefs", "compiledStyles", "customClass", "cssClass", "s", "ids", "styles", "id", "style", "classNode", "newStyle", "classNames", "className", "clear", "nodes", "edges", "config", "entityKey", "entityNode", "count", "relationship", "edge", "getEdgeId", "erRenderer_unified_exports", "__export", "draw", "init_erRenderer_unified", "__esmMin", "init_diagramAPI", "init_logger", "init_insertElementsForSize", "init_render", "init_setupViewPortForSVG", "init_utils", "init_src", "__name", "text", "id", "_version", "diag", "log", "securityLevel", "conf", "layout", "getConfig", "data4Layout", "svg", "getDiagramElement", "getRegisteredLayoutAlgorithm", "render", "backgroundNodes", "backgroundNode", "select_default", "nonBackgroundId", "nonBackgroundNode", "transform", "padding", "utils_default", "setupViewPortForSVG", "fade", "getStyles", "styles_default", "init_styles", "__esmMin", "init_dist", "__name", "color", "opacity", "channel", "channel_default", "r", "g", "b", "rgba_default", "options", "erDiagram_exports", "__export", "diagram", "init_erDiagram", "__esmMin", "init_erDb", "init_erRenderer_unified", "init_styles", "erDiagram_default", "ErDB", "erRenderer_unified_exports", "styles_default", "isAstNode", "obj", "isReference", "isAstNodeDescription", "isLinkingError", "isCompositeCstNode", "node", "isLeafCstNode", "isRootCstNode", "AbstractAstReflection", "init_syntax_tree", "__esmMin", "__name", "type", "subtype", "supertype", "nested", "existing", "result", "allTypes", "types", "possibleSubType", "toString", "item", "isIterable", "obj", "stream", "collections", "collection", "StreamImpl", "iterator", "state", "DONE_RESULT", "next", "EMPTY_STREAM", "TreeStreamImpl", "Reduction", "init_stream", "__esmMin", "_StreamImpl", "__name", "startFn", "nextFn", "count", "result", "keyFn", "valueFn", "entryStream", "element", "other", "separator", "value", "addSeparator", "searchElement", "fromIndex", "index", "predicate", "callbackfn", "done", "initialValue", "previousValue", "mapped", "depth", "skipCount", "i", "maxSize", "by", "key", "otherKeySet", "e", "ownKey", "root", "children", "options", "sum", "a", "b", "product", "min", "max", "cst_utils_exports", "__export", "DefaultNameRegexp", "RangeComparison", "compareRange", "findCommentNode", "findDeclarationNodeAtOffset", "findLeafNodeAtOffset", "findLeafNodeBeforeOffset", "flattenCst", "getInteriorNodes", "getNextNode", "getPreviousNode", "getStartlineNode", "inRange", "isChildNode", "isCommentNode", "streamCst", "toDocumentSegment", "tokenToRange", "node", "TreeStreamImpl", "element", "isCompositeCstNode", "isLeafCstNode", "child", "parent", "token", "offset", "end", "range", "to", "startInside", "endInside", "cstNode", "nameRegexp", "localOffset", "textAtOffset", "commentNames", "previous", "isRootCstNode", "endIndex", "e", "searchResult", "binarySearch", "closest", "left", "right", "closestNode", "middle", "middleNode", "hidden", "index", "last", "next", "line", "selfIndex", "start", "commonParent", "getCommonParent", "a", "b", "aParents", "getParentChain", "bParents", "current", "i", "aParent", "bParent", "chain", "init_cst_utils", "__esmMin", "init_syntax_tree", "init_stream", "__name", "assertUnreachable", "_", "ErrorWithLocation", "init_errors", "__esmMin", "__name", "node", "message", "ast_exports", "__export", "AbstractElement", "AbstractRule", "AbstractType", "Action", "Alternatives", "ArrayLiteral", "ArrayType", "Assignment", "BooleanLiteral", "CharacterRange", "Condition", "Conjunction", "CrossReference", "Disjunction", "EndOfFile", "Grammar", "GrammarImport", "Group", "InferredType", "Interface", "Keyword", "LangiumGrammarAstReflection", "LangiumGrammarTerminals", "NamedArgument", "NegatedToken", "Negation", "NumberLiteral", "Parameter", "ParameterReference", "ParserRule", "ReferenceType", "RegexToken", "ReturnType", "RuleCall", "SimpleType", "StringLiteral", "TerminalAlternatives", "TerminalGroup", "TerminalRule", "TerminalRuleCall", "Type", "TypeAttribute", "TypeDefinition", "UnionType", "UnorderedGroup", "UntilToken", "ValueLiteral", "Wildcard", "isAbstractElement", "isAbstractRule", "isAbstractType", "isAction", "isAlternatives", "isArrayLiteral", "isArrayType", "isAssignment", "isBooleanLiteral", "isCharacterRange", "isCondition", "isConjunction", "isCrossReference", "isDisjunction", "isEndOfFile", "isFeatureName", "isGrammar", "isGrammarImport", "isGroup", "isInferredType", "isInterface", "isKeyword", "isNamedArgument", "isNegatedToken", "isNegation", "isNumberLiteral", "isParameter", "isParameterReference", "isParserRule", "isPrimitiveType", "isReferenceType", "isRegexToken", "isReturnType", "isRuleCall", "isSimpleType", "isStringLiteral", "isTerminalAlternatives", "isTerminalGroup", "isTerminalRule", "isTerminalRuleCall", "isType", "isTypeAttribute", "isTypeDefinition", "isUnionType", "isUnorderedGroup", "isUntilToken", "isValueLiteral", "isWildcard", "reflection", "item", "init_ast", "__esmMin", "init_syntax_tree", "__name", "AbstractAstReflection", "subtype", "supertype", "refInfo", "referenceId", "type", "ast_utils_exports", "__export", "assignMandatoryProperties", "copyAstNode", "findLocalReferences", "findRootNode", "getContainerOfType", "getDocument", "hasContainerOfType", "linkContentToContainer", "streamAllContents", "streamAst", "streamContents", "streamReferences", "node", "name", "value", "item", "index", "isAstNode", "typePredicate", "predicate", "result", "options", "range", "StreamImpl", "state", "property", "isAstNodeInRange", "element", "DONE_RESULT", "root", "TreeStreamImpl", "astNode", "nodeRange", "_a", "inRange", "isReference", "targetNode", "lookup", "refs", "refInfo", "stream", "reflection", "typeMetaData", "genericNode", "copyDefaultValue", "propertyType", "buildReference", "copy", "copiedArray", "init_ast_utils", "__esmMin", "init_syntax_tree", "init_stream", "init_cst_utils", "__name", "cc", "char", "insertToSet", "item", "set", "subItem", "addFlag", "flagObj", "flagKey", "x", "ASSERT_EXISTS", "obj", "ASSERT_NEVER_REACH_HERE", "isCharacter", "init_utils", "__esmMin", "__name", "digitsCharCodes", "wordCharCodes", "whitespaceCodes", "init_character_classes", "__esmMin", "init_utils", "i", "cc", "hexDigitPattern", "decimalPattern", "decimalPatternNoZero", "RegExpParser", "init_regexp_parser", "__esmMin", "init_utils", "init_character_classes", "__name", "newState", "input", "value", "flags", "addFlag", "alts", "begin", "terms", "type", "ASSERT_EXISTS", "disjunction", "ASSERT_NEVER_REACH_HERE", "isBacktracking", "range", "atLeast", "atMost", "atom", "cc", "set", "complement", "digitsCharCodes", "whitespaceCodes", "wordCharCodes", "escapeCode", "letter", "escapedChar", "nextChar", "from", "isFromSingleChar", "isCharacter", "to", "isToSingleChar", "insertToSet", "capturing", "groupAst", "number", "howMuch", "prevState", "howMany", "hexString", "hexChar", "char", "BaseRegExpVisitor", "init_base_regexp_visitor", "__esmMin", "__name", "node", "key", "child", "subChild", "init_api", "__esmMin", "init_regexp_parser", "init_base_regexp_visitor", "regexp_utils_exports", "__export", "NEWLINE_REGEXP", "escapeRegExp", "getCaseInsensitivePattern", "getTerminalParts", "isMultilineComment", "isWhitespace", "partialMatches", "partialRegExp", "whitespaceCharacters", "regexp", "pattern", "regexpParser", "parts", "alternative", "visitor", "value", "ws", "keyword", "letter", "regex", "input", "partial", "match", "re", "source", "i", "process", "result", "tmp", "appendRaw", "nbChars", "__name", "appendOptional", "TerminalRegExpVisitor", "init_regexp_utils", "__esmMin", "init_api", "RegExpParser", "BaseRegExpVisitor", "node", "char", "escapedChar", "set", "grammar_utils_exports", "__export", "findAssignment", "findNameAssignment", "findNodeForKeyword", "findNodeForProperty", "findNodesForKeyword", "findNodesForKeywordInternal", "findNodesForProperty", "getActionAtElement", "getActionType", "getAllReachableRules", "getCrossReferenceTerminal", "getEntryRule", "getExplicitRuleType", "getHiddenRules", "getRuleType", "getRuleTypeName", "getTypeName", "isArrayCardinality", "isArrayOperator", "isCommentTerminal", "isDataType", "isDataTypeRule", "isOptionalCardinality", "terminalRegex", "grammar", "isParserRule", "isTerminalRule", "allTerminals", "ruleNames", "entryRule", "topMostRules", "rule", "ruleDfs", "rules", "visitedSet", "streamAllContents", "node", "isRuleCall", "isTerminalRuleCall", "refRule", "crossRef", "nameAssigment", "terminalRule", "isWhitespace", "property", "findNodesForPropertyInternal", "index", "nodes", "element", "first", "nodeFeature", "getContainerOfType", "isAssignment", "isCompositeCstNode", "e", "keyword", "isKeyword", "treeIterator", "streamCst", "result", "keywordNodes", "childNode", "cstNode", "astNode", "_a", "assignment", "type", "startNode", "isInferredType", "isAction", "assertUnreachable", "findNameAssignmentInternal", "cache", "go", "refType", "childAssignment", "__name", "isSimpleType", "parent", "isGroup", "elements", "item", "action", "isAbstractElement", "cardinality", "operator", "isDataTypeRuleInternal", "visited", "isDataTypeInternal", "isArrayType", "isReferenceType", "isUnionType", "ref", "isType", "isInterface", "isReturnType", "actionType", "_b", "_c", "flags", "source", "abstractElementToRegex", "flagText", "value", "name", "isTerminalAlternatives", "terminalAlternativesToRegex", "isTerminalGroup", "terminalGroupToRegex", "isCharacterRange", "characterRangeToRegex", "withCardinality", "isNegatedToken", "negateTokenToRegex", "isUntilToken", "untilTokenToRegex", "isRegexToken", "lastSlash", "regexFlags", "isWildcard", "WILDCARD", "alternatives", "group", "until", "negate", "range", "keywordToRegex", "escapeRegExp", "regex", "options", "init_grammar_utils", "__esmMin", "init_errors", "init_ast", "init_syntax_tree", "init_ast_utils", "init_cst_utils", "init_regexp_utils", "createGrammarConfig", "services", "rules", "grammar", "rule", "isTerminalRule", "isCommentTerminal", "isMultilineComment", "terminalRegex", "DefaultNameRegexp", "init_grammar_config", "__esmMin", "init_cst_utils", "init_grammar_utils", "init_regexp_utils", "init_ast", "__name", "init_version", "__esmMin", "PRINT_ERROR", "msg", "PRINT_WARNING", "init_print", "__esmMin", "__name", "timer", "func", "start", "val", "init_timer", "__esmMin", "__name", "toFastProperties", "toBecomeFast", "FakeConstructor", "__name", "fakeInstance", "fakeAccess", "init_to_fast_properties", "__esmMin", "init_api", "__esmMin", "init_print", "init_timer", "init_to_fast_properties", "tokenLabel", "tokType", "hasTokenLabel", "obj", "isString_default", "serializeGrammar", "topRules", "map_default", "serializeProduction", "node", "convertDefinition", "definition", "__name", "NonTerminal", "serializedNonTerminal", "Alternative", "Option", "RepetitionMandatory", "RepetitionMandatoryWithSeparator", "Terminal", "RepetitionWithSeparator", "Repetition", "Alternation", "serializedTerminal", "pattern", "isRegExp_default", "Rule", "AbstractProduction", "init_model", "__esmMin", "init_lodash", "value", "_definition", "visitor", "forEach_default", "prod", "options", "assign_default", "pickBy_default", "v", "GAstVisitor", "init_visitor", "__esmMin", "init_model", "__name", "node", "nodeAny", "NonTerminal", "Alternative", "Option", "RepetitionMandatory", "RepetitionMandatoryWithSeparator", "RepetitionWithSeparator", "Repetition", "Alternation", "Terminal", "Rule", "isSequenceProd", "prod", "Alternative", "Option", "Repetition", "RepetitionMandatory", "RepetitionMandatoryWithSeparator", "RepetitionWithSeparator", "Terminal", "Rule", "isOptionalProd", "alreadyVisited", "Alternation", "some_default", "subProd", "NonTerminal", "includes_default", "AbstractProduction", "every_default", "isBranchingProd", "getProductionDslName", "init_helpers", "__esmMin", "init_lodash", "init_model", "__name", "init_api", "__esmMin", "init_model", "init_visitor", "init_helpers", "restForRepetitionWithSeparator", "repSepProd", "currRest", "prevRest", "Option", "Terminal", "RestWalker", "init_rest", "__esmMin", "init_lodash", "init_api", "__name", "prod", "forEach_default", "subProd", "index", "drop_default", "NonTerminal", "Alternative", "RepetitionMandatory", "RepetitionMandatoryWithSeparator", "RepetitionWithSeparator", "Repetition", "Alternation", "terminal", "refProd", "flatProd", "fullOrRest", "optionProd", "atLeastOneProd", "fullAtLeastOneRest", "atLeastOneSepProd", "fullAtLeastOneSepRest", "manyProd", "fullManyRest", "manySepProd", "fullManySepRest", "orProd", "alt", "prodWrapper", "first", "prod", "NonTerminal", "Terminal", "firstForTerminal", "isSequenceProd", "firstForSequence", "isBranchingProd", "firstForBranching", "firstSet", "seq", "nextSubProdIdx", "hasInnerProdsRemaining", "currSubProd", "isLastInnerProdOptional", "isOptionalProd", "uniq_default", "allAlternativesFirsts", "map_default", "innerProd", "flatten_default", "terminal", "init_first", "__esmMin", "init_lodash", "init_api", "__name", "IN", "init_constants", "__esmMin", "computeAllProdsFollows", "topProductions", "reSyncFollows", "forEach_default", "topProd", "currRefsFollow", "ResyncFollowsWalker", "assign_default", "buildBetweenProdsFollowPrefix", "inner", "occurenceInParent", "IN", "init_follow", "__esmMin", "init_rest", "init_first", "init_lodash", "init_constants", "init_api", "RestWalker", "__name", "terminal", "currRest", "prevRest", "refProd", "followName", "fullRest", "restProd", "Alternative", "t_in_topProd_follows", "first", "getRegExpAst", "regExp", "regExpStr", "regExpAstCache", "regExpAst", "regExpParser", "clearRegExpParserCache", "init_reg_exp_parser", "__esmMin", "init_api", "RegExpParser", "__name", "getOptimizedStartCodesIndices", "regExp", "ensureOptimizations", "ast", "getRegExpAst", "firstCharOptimizedIndices", "e", "complementErrorMessage", "PRINT_WARNING", "failedOptimizationPrefixMsg", "msgSuffix", "PRINT_ERROR", "result", "ignoreCase", "terms", "term", "atom", "addOptimizedIdxToResult", "forEach_default", "code", "range", "rangeCode", "minOptimizationVal", "minUnOptVal", "maxUnOptVal", "minOptIdx", "charCodeToOptimizedIndex", "maxOptIdx", "currOptIdx", "isOptionalQuantifier", "isWholeOptional", "values_default", "optimizedCharIdx", "handleIgnoreCase", "char", "upperChar", "lowerChar", "findCode", "setNode", "targetCharCodes", "find_default", "codeOrRange", "includes_default", "targetCode", "quantifier", "isArray_default", "every_default", "canMatchCharCode", "charCodes", "pattern", "charCodeFinder", "CharCodeFinder", "init_reg_exp", "__esmMin", "init_api", "init_lodash", "init_reg_exp_parser", "init_lexer", "__name", "BaseRegExpVisitor", "node", "analyzeTokenTypes", "tokenTypes", "options", "defaults_default", "SUPPORT_STICKY", "__name", "msg", "action", "tracer", "initCharCodeToOptimizedIndexMap", "onlyRelevantTypes", "reject_default", "currType", "PATTERN", "Lexer", "hasCustom", "allTransformedPatterns", "map_default", "currPattern", "isRegExp_default", "regExpSource", "includes_default", "addStickyFlag", "addStartOfInput", "isFunction_default", "escapedRegExpString", "wrappedRegExp", "patternIdxToType", "patternIdxToGroup", "patternIdxToLongerAltIdxArr", "patternIdxToPushMode", "patternIdxToPopMode", "clazz", "groupName", "isString_default", "isUndefined_default", "longerAltType", "isArray_default", "type", "indexOf_default", "has_default", "patternIdxToCanLineTerminator", "lineTerminatorCharCodes", "getCharCodes", "tokType", "checkLineBreaksIssues", "canMatchCharCode", "patternIdxToIsCustom", "patternIdxToShort", "emptyGroups", "patternIdxToConfig", "isCustomPattern", "isShortPattern", "reduce_default", "acc", "x", "idx", "canBeOptimized", "charCodeToPatternIdxToConfig", "result", "currTokType", "charCode", "optimizedIdx", "charCodeToOptimizedIndex", "addToMapOfArrays", "lastOptimizedIdx", "forEach_default", "charOrInt", "currOptimizedIdx", "PRINT_ERROR", "failedOptimizationPrefixMsg", "optimizedCodes", "getOptimizedStartCodesIndices", "isEmpty_default", "code", "validatePatterns", "validModesNames", "errors", "missingResult", "findMissingPatterns", "invalidResult", "findInvalidPatterns", "validTokenTypes", "validateRegExpPattern", "findInvalidGroupType", "findModesThatDoNotExist", "findUnreachablePatterns", "withRegExpPatterns", "filter_default", "findEndOfInputAnchor", "findStartOfInputAnchor", "findUnsupportedFlags", "findDuplicatePatterns", "findEmptyMatchRegExps", "tokenTypesWithMissingPattern", "LexerDefinitionErrorType", "valid", "difference_default", "tokenTypesWithInvalidPattern", "pattern", "EndAnchorFinder", "BaseRegExpVisitor", "node", "invalidRegex", "regexpAst", "getRegExpAst", "endAnchorVisitor", "end_of_input", "matchesEmptyString", "StartAnchorFinder", "startAnchorVisitor", "start_of_input", "invalidFlags", "found", "identicalPatterns", "outerType", "innerType", "compact_default", "duplicatePatterns", "currIdenticalSet", "setOfIdentical", "tokenTypeNames", "head_default", "invalidTypes", "group", "validModes", "invalidModes", "canBeTested", "noMetaChar", "testIdx", "str", "tokenType", "testTokenType", "regExpArray", "regExp", "find_default", "char", "flags", "performRuntimeChecks", "lexerDefinition", "trackLines", "lineTerminatorCharacters", "DEFAULT_MODE", "MODES", "currModeValue", "currModeName", "currIdx", "longerAlt", "currLongerAlt", "performWarningRuntimeChecks", "warnings", "hasAnyLineBreak", "allTokenTypes", "flatten_default", "values_default", "concreteTokenTypes", "terminatorCharCodes", "currIssue", "warningDescriptor", "buildLineBreakIssueMessage", "cloneEmptyGroups", "clonedResult", "groupKeys", "keys_default", "currKey", "currGroupValue", "e", "details", "charsOrCodes", "numOrString", "map", "key", "value", "minOptimizationVal", "charCodeToOptimizedIdxMap", "i", "LineTerminatorOptimizedTester", "init_lexer", "__esmMin", "init_api", "init_lexer_public", "init_lodash", "init_reg_exp", "init_reg_exp_parser", "text", "len", "c", "tokenStructuredMatcher", "tokInstance", "tokConstructor", "instanceType", "tokenStructuredMatcherNoCategories", "token", "tokType", "augmentTokenTypes", "tokenTypes", "tokenTypesAndParents", "expandCategories", "assignTokenDefaultProps", "assignCategoriesMapProp", "assignCategoriesTokensProp", "forEach_default", "result", "clone_default", "categories", "searching", "compact_default", "flatten_default", "map_default", "currTokType", "newCategories", "difference_default", "isEmpty_default", "hasShortKeyProperty", "tokenIdxToClass", "tokenShortNameIdx", "hasCategoriesProperty", "isArray_default", "hasExtendingTokensTypesProperty", "hasExtendingTokensTypesMapProperty", "val", "key", "singleAssignCategoriesToksMap", "path", "nextNode", "pathNode", "nextCategory", "newPath", "includes_default", "has_default", "isTokenType", "init_tokens", "__esmMin", "init_lodash", "__name", "defaultLexerErrorProvider", "init_lexer_errors_public", "__esmMin", "token", "fullText", "startOffset", "length", "line", "column", "LexerDefinitionErrorType", "DEFAULT_LEXER_CONFIG", "Lexer", "init_lexer_public", "__esmMin", "init_lexer", "init_lodash", "init_api", "init_tokens", "init_lexer_errors_public", "init_reg_exp_parser", "defaultLexerErrorProvider", "__name", "lexerDefinition", "config", "phaseDesc", "phaseImpl", "indent", "time", "value", "timer", "traceMethod", "assign_default", "traceInitVal", "actualDefinition", "hasOnlySingleMode", "LineTerminatorOptimizedTester", "isArray_default", "clone_default", "DEFAULT_MODE", "performRuntimeChecks", "performWarningRuntimeChecks", "forEach_default", "currModeValue", "currModeName", "reject_default", "currTokType", "isUndefined_default", "allModeNames", "keys_default", "currModDef", "currModName", "validatePatterns", "isEmpty_default", "augmentTokenTypes", "currAnalyzeResult", "analyzeTokenTypes", "allErrMessagesString", "map_default", "error", "warningDescriptor", "PRINT_WARNING", "SUPPORT_STICKY", "identity_default", "noop_default", "unOptimizedModes", "reduce_default", "cannotBeOptimized", "canBeOptimized", "modeName", "clearRegExpParserCache", "toFastProperties", "text", "initialMode", "i", "j", "k", "matchAltImage", "longerAlt", "matchedImage", "payload", "altPayload", "imageLength", "group", "tokType", "newToken", "errLength", "droppedChar", "msg", "match", "orgText", "orgLength", "offset", "matchedTokensIndex", "guessedNumberOfTokens", "matchedTokens", "errors", "line", "column", "groups", "cloneEmptyGroups", "trackLines", "lineTerminatorPattern", "currModePatternsLength", "patternIdxToConfig", "currCharCodeToPatternIdxToConfig", "modeStack", "emptyArray", "getPossiblePatterns", "getPossiblePatternsSlow", "getPossiblePatternsOptimized", "charCode", "optimizedCharIdx", "charCodeToOptimizedIndex", "possiblePatterns", "pop_mode", "popToken", "newMode", "last_default", "modeCanBeOptimized", "push_mode", "currConfig", "recoveryEnabled", "nextCharCode", "chosenPatternIdxToConfig", "chosenPatternsLength", "currPattern", "singleCharCode", "longerAltLength", "longerAltConfig", "longerAltPattern", "numOfLTsInMatch", "foundTerminator", "lastLTEndOffset", "errorStartOffset", "errorLine", "errorColumn", "foundResyncPoint", "pushMode", "length", "regExp", "newLastIndex", "lastLTIdx", "lastCharIsLT", "fixForEndingInLT", "oldColumn", "image", "startOffset", "tokenTypeIdx", "tokenType", "startLine", "startColumn", "tokenVector", "index", "tokenToAdd", "token", "pattern", "regExpArray", "tokenLabel", "tokType", "hasTokenLabel", "obj", "isString_default", "createToken", "config", "createTokenInternal", "pattern", "tokenType", "isUndefined_default", "has_default", "PARENT", "CATEGORIES", "augmentTokenTypes", "LABEL", "GROUP", "POP_MODE", "PUSH_MODE", "LONGER_ALT", "LINE_BREAKS", "START_CHARS_HINT", "createTokenInstance", "image", "startOffset", "endOffset", "startLine", "endLine", "startColumn", "endColumn", "tokenMatcher", "token", "tokenStructuredMatcher", "EOF", "init_tokens_public", "__esmMin", "init_lodash", "init_lexer_public", "init_tokens", "__name", "Lexer", "defaultParserErrorProvider", "defaultGrammarResolverErrorProvider", "defaultGrammarValidatorErrorProvider", "init_errors_public", "__esmMin", "init_tokens_public", "init_lodash", "init_api", "expected", "actual", "previous", "ruleName", "hasTokenLabel", "tokenLabel", "firstRedundant", "expectedPathsPerAlt", "customUserDescription", "errPrefix", "errSuffix", "head_default", "allLookAheadPaths", "reduce_default", "result", "currAltPaths", "nextValidTokenSequences", "map_default", "currPath", "currTokenType", "calculatedDescription", "itemMsg", "idx", "expectedIterationPaths", "topLevelRule", "undefinedRule", "duplicateProds", "getExtraProductionArgument", "prod", "Terminal", "NonTerminal", "__name", "topLevelName", "duplicateProd", "index", "dslName", "getProductionDslName", "extraArgument", "hasExplicitIndex", "msg", "rule", "options", "pathMsg", "currTok", "occurrence", "currtok", "currMessage", "pathNames", "currRule", "leftRecursivePath", "Rule", "resolveGrammar", "topLevels", "errMsgProvider", "refResolver", "GastRefResolverVisitor", "init_resolver", "__esmMin", "init_parser", "init_lodash", "init_api", "__name", "GAstVisitor", "nameToTopRule", "forEach_default", "values_default", "prod", "node", "ref", "msg", "ParserDefinitionErrorType", "possiblePathsFrom", "targetDef", "maxLength", "currPath", "clone_default", "result", "remainingPathWith", "nextDef", "drop_default", "__name", "getAlternativesForProd", "definition", "alternatives", "prod", "Alternative", "NonTerminal", "Option", "RepetitionMandatory", "newDef", "Repetition", "RepetitionMandatoryWithSeparator", "Terminal", "RepetitionWithSeparator", "Alternation", "forEach_default", "currAlt", "isEmpty_default", "nextPossibleTokensAfter", "initialDef", "tokenVector", "tokMatcher", "maxLookAhead", "EXIT_NON_TERMINAL", "EXIT_NON_TERMINAL_ARR", "EXIT_ALTERNATIVE", "foundCompletePath", "tokenVectorLength", "minimalAlternativesIndex", "possiblePaths", "last_default", "currDef", "currIdx", "currRuleStack", "currOccurrenceStack", "nextPath", "dropRight_default", "nextIdx", "actualToken", "newRuleStack", "newOccurrenceStack", "nextPathWithout", "nextPathWith", "secondIteration", "separatorGast", "nthRepetition", "i", "currAltPath", "Rule", "expandTopLevelRule", "topRule", "newCurrOccurrenceStack", "AbstractNextPossibleTokensWalker", "NextAfterTokenWalker", "AbstractNextTerminalAfterProductionWalker", "NextTerminalAfterManyWalker", "NextTerminalAfterManySepWalker", "NextTerminalAfterAtLeastOneWalker", "NextTerminalAfterAtLeastOneSepWalker", "init_interpreter", "__esmMin", "init_lodash", "init_first", "init_rest", "init_api", "RestWalker", "topProd", "path", "prevRest", "refProd", "currRest", "fullRest", "terminal", "restProd", "first", "occurrence", "manyProd", "firstAfterMany", "head_default", "manySepProd", "firstAfterManySep", "atLeastOneProd", "firstAfterAtLeastOne", "atleastOneSepProd", "firstAfterfirstAfterAtLeastOneSep", "getProdType", "prod", "Option", "PROD_TYPE", "Repetition", "RepetitionMandatory", "RepetitionMandatoryWithSeparator", "RepetitionWithSeparator", "Alternation", "getLookaheadPaths", "options", "occurrence", "rule", "prodType", "maxLookahead", "type", "getLookaheadPathsForOr", "getLookaheadPathsForOptionalProd", "buildLookaheadFuncForOr", "ruleGrammar", "hasPredicates", "dynamicTokensEnabled", "laFuncBuilder", "lookAheadPaths", "tokenMatcher", "areTokenCategoriesNotUsed", "tokenStructuredMatcherNoCategories", "tokenStructuredMatcher", "buildLookaheadFuncForOptionalProd", "k", "lookaheadBuilder", "buildAlternativesLookAheadFunc", "alts", "numOfAlts", "areAllOneTokenLookahead", "every_default", "currAlt", "currPath", "orAlts", "predicates", "map_default", "t", "currNumOfPaths", "currPredicate", "nextPath", "j", "currPathLength", "i", "nextToken", "singleTokenAlts", "flatten_default", "choiceToAlt", "reduce_default", "result", "idx", "forEach_default", "currTokType", "has_default", "currExtendingType", "buildSingleAlternativeLookaheadFunction", "alt", "numOfPaths", "singleTokensTypes", "isEmpty_default", "expectedTokenUniqueKey", "initializeArrayOfArrays", "size", "pathToHashKeys", "path", "keys", "tokType", "longerKeys", "currShorterKey", "categoriesKeySuffix", "isUniquePrefixHash", "altKnownPathsKeys", "searchPathKeys", "currAltIdx", "otherAltKnownPathsKeys", "searchIdx", "searchKey", "lookAheadSequenceFromAlternatives", "altsDefs", "partialAlts", "possiblePathsFrom", "finalResult", "altsHashes", "currAltPaths", "dict", "item", "currKey", "newData", "pathLength", "currDataset", "altIdx", "currAltPathsAndSuffixes", "currPathIdx", "currPathPrefix", "suffixDef", "prefixKeys", "currAltResult", "containsPath", "newPartialPathsAndSuffixes", "key", "orProd", "visitor", "InsideDefinitionFinderVisitor", "insideDefVisitor", "insideDef", "afterDef", "RestDefinitionFinderWalker", "insideFlat", "Alternative", "afterFlat", "alternative", "searchPath", "compareOtherPath", "otherPath", "searchTok", "otherTok", "isStrictPrefixOfPath", "prefix", "other", "otherTokType", "singleAltPaths", "singlePath", "token", "init_lookahead", "__esmMin", "init_lodash", "init_interpreter", "init_rest", "init_tokens", "init_api", "__name", "RestWalker", "topProd", "targetOccurrence", "targetProdType", "node", "expectedProdType", "currRest", "prevRest", "optionProd", "atLeastOneProd", "atLeastOneSepProd", "manyProd", "manySepProd", "GAstVisitor", "targetRef", "expectedProdName", "validateLookahead", "options", "lookaheadValidationErrorMessages", "map_default", "errorMessage", "ParserDefinitionErrorType", "validateGrammar", "topLevels", "tokenTypes", "errMsgProvider", "grammarName", "duplicateErrors", "flatMap_default", "currTopLevel", "validateDuplicateProductions", "termsNamespaceConflictErrors", "checkTerminalAndNoneTerminalsNameSpace", "tooManyAltsErrors", "curRule", "validateTooManyAlts", "duplicateRulesError", "validateRuleDoesNotAlreadyExist", "topLevelRule", "collectorVisitor", "OccurrenceValidationCollector", "allRuleProductions", "productionGroups", "groupBy_default", "identifyProductionForDuplicates", "duplicates", "pickBy_default", "currGroup", "values_default", "currDuplicates", "firstProd", "head_default", "msg", "dslName", "getProductionDslName", "defError", "param", "getExtraProductionArgument", "prod", "Terminal", "NonTerminal", "rule", "allRules", "className", "errors", "reduce_default", "result", "errMsg", "validateRuleIsOverridden", "ruleName", "definedRulesNames", "includes_default", "validateNoLeftRecursion", "topRule", "currRule", "path", "nextNonTerminals", "getFirstNoneTerminal", "isEmpty_default", "validNextSteps", "difference_default", "errorsFromNextSteps", "currRefRule", "newPath", "clone_default", "definition", "Alternative", "Option", "RepetitionMandatory", "RepetitionMandatoryWithSeparator", "RepetitionWithSeparator", "Repetition", "Alternation", "flatten_default", "currSubDef", "isFirstOptional", "isOptionalProd", "hasMore", "rest", "drop_default", "validateEmptyOrAlternative", "orCollector", "OrCollector", "ors", "currOr", "exceptLast", "dropRight_default", "currAlternative", "currAltIdx", "possibleFirstInAlt", "nextPossibleTokensAfter", "tokenStructuredMatcher", "validateAmbiguousAlternationAlternatives", "globalMaxLookahead", "reject_default", "currOccurrence", "actualMaxLookahead", "alternatives", "getLookaheadPathsForOr", "altsAmbiguityErrors", "checkAlternativesAmbiguities", "altsPrefixAmbiguityErrors", "checkPrefixAlternativesAmbiguities", "validateSomeNonEmptyLookaheadPath", "topLevelRules", "maxLookahead", "forEach_default", "currTopRule", "RepetitionCollector", "currProd", "prodType", "getProdType", "pathsInsideProduction", "getLookaheadPathsForOptionalProd", "alternation", "foundAmbiguousPaths", "identicalAmbiguities", "currAlt", "currPath", "altsCurrPathAppearsIn", "currOtherAlt", "currOtherAltIdx", "containsPath", "currAmbDescriptor", "ambgIndices", "pathsAndIndices", "idx", "currPathsAndIdx", "compact_default", "currPathAndIdx", "targetIdx", "targetPath", "prefixAmbiguitiesPathsAndIndices", "filter_default", "searchPathAndIdx", "isStrictPrefixOfPath", "currAmbPathAndIdx", "occurrence", "tokenNames", "currToken", "currRuleName", "init_checks", "__esmMin", "init_lodash", "init_parser", "init_api", "init_lookahead", "init_interpreter", "init_tokens", "__name", "GAstVisitor", "subrule", "option", "manySep", "atLeastOne", "atLeastOneSep", "many", "or", "terminal", "node", "resolveGrammar", "options", "actualOptions", "defaults_default", "defaultGrammarResolverErrorProvider", "topRulesTable", "forEach_default", "rule", "validateGrammar", "defaultGrammarValidatorErrorProvider", "init_gast_resolver_public", "__esmMin", "init_lodash", "init_resolver", "init_checks", "init_errors_public", "__name", "isRecognitionException", "error", "includes_default", "RECOGNITION_EXCEPTION_NAMES", "MISMATCHED_TOKEN_EXCEPTION", "NO_VIABLE_ALT_EXCEPTION", "EARLY_EXIT_EXCEPTION", "NOT_ALL_INPUT_PARSED_EXCEPTION", "RecognitionException", "MismatchedTokenException", "NoViableAltException", "NotAllInputParsedException", "EarlyExitException", "init_exceptions_public", "__esmMin", "init_lodash", "__name", "message", "token", "previousToken", "attemptInRepetitionRecovery", "prodFunc", "args", "lookaheadFunc", "dslMethodIdx", "prodOccurrence", "nextToksWalker", "notStuck", "key", "firstAfterRepInfo", "currRuleName", "ruleGrammar", "expectTokAfterLastMatch", "nextTokIdx", "isEndOfRule", "EOF", "EOF_FOLLOW_KEY", "IN_RULE_RECOVERY_EXCEPTION", "InRuleRecoveryException", "Recoverable", "init_recoverable", "__esmMin", "init_tokens_public", "init_lodash", "init_exceptions_public", "init_constants", "init_parser", "__name", "message", "config", "has_default", "DEFAULT_PARSER_CONFIG", "tokType", "tokToInsert", "createTokenInstance", "grammarRule", "grammarRuleArgs", "lookAheadFunc", "expectedTokType", "reSyncTokType", "savedLexerState", "resyncedTokens", "passedResyncPoint", "nextTokenWithoutResync", "currToken", "generateErrorMessage", "previousToken", "msg", "error", "MismatchedTokenException", "dropRight_default", "tokIdxInRule", "grammarPath", "follows", "nextTok", "expectedToken", "isEmpty_default", "mismatchedTok", "find_default", "possibleFollowsTokType", "tokenTypeIdx", "followKey", "currentRuleReSyncSet", "includes_default", "allPossibleReSyncTokTypes", "nextToken", "k", "foundMatch", "resyncTokType", "tokenMatcher", "currRuleShortName", "currRuleIdx", "prevRuleShortName", "explicitRuleStack", "explicitOccurrenceStack", "map_default", "ruleName", "idx", "followStack", "currKey", "flatten_default", "followName", "IN", "token", "resyncTokens", "pathRuleStack", "pathOccurrenceStack", "clone_default", "currShortName", "getKeyForAutomaticLookahead", "ruleIdx", "dslMethodIdx", "occurrence", "init_keys", "__esmMin", "__name", "LLkLookaheadStrategy", "init_llk_lookahead", "__esmMin", "init_lodash", "init_errors_public", "init_parser", "init_checks", "init_lookahead", "__name", "options", "_a", "DEFAULT_PARSER_CONFIG", "leftRecursionErrors", "isEmpty_default", "emptyAltErrors", "ambiguousAltsErrors", "emptyRepetitionErrors", "rules", "flatMap_default", "currTopRule", "validateNoLeftRecursion", "defaultGrammarValidatorErrorProvider", "validateEmptyOrAlternative", "maxLookahead", "validateAmbiguousAlternationAlternatives", "validateSomeNonEmptyLookaheadPath", "buildLookaheadFuncForOr", "buildAlternativesLookAheadFunc", "buildLookaheadFuncForOptionalProd", "getProdType", "buildSingleAlternativeLookaheadFunction", "collectMethods", "rule", "collectorVisitor", "dslMethods", "LooksAhead", "DslMethodsCollectorVisitor", "init_looksahead", "__esmMin", "init_lodash", "init_parser", "init_keys", "init_api", "init_llk_lookahead", "__name", "config", "has_default", "DEFAULT_PARSER_CONFIG", "LLkLookaheadStrategy", "rules", "forEach_default", "currRule", "alternation", "repetition", "option", "repetitionMandatory", "repetitionMandatoryWithSeparator", "repetitionWithSeparator", "currProd", "prodIdx", "getProductionDslName", "laFunc", "key", "getKeyForAutomaticLookahead", "prodOccurrence", "prodKey", "prodType", "prodMaxLookahead", "dslMethodName", "dslMethodIdx", "occurrence", "currRuleShortName", "value", "GAstVisitor", "manySep", "atLeastOne", "atLeastOneSep", "many", "or", "setNodeLocationOnlyOffset", "currNodeLocation", "newLocationInfo", "setNodeLocationFull", "addTerminalToCst", "node", "token", "tokenTypeName", "addNoneTerminalToCst", "ruleName", "ruleResult", "init_cst", "__esmMin", "__name", "defineNameProp", "obj", "nameValue", "NAME", "init_lang_extensions", "__esmMin", "__name", "defaultVisit", "ctx", "param", "childrenNames", "keys_default", "childrenNamesLength", "currChildName", "currChildArray", "currChildArrayLength", "j", "currChild", "createBaseSemanticVisitorConstructor", "grammarName", "ruleNames", "derivedConstructor", "__name", "defineNameProp", "semanticProto", "cstNode", "isArray_default", "isUndefined_default", "semanticDefinitionErrors", "validateVisitor", "isEmpty_default", "errorMessages", "map_default", "currDefError", "createBaseVisitorConstructorWithDefaults", "baseConstructor", "withDefaultsProto", "forEach_default", "ruleName", "visitorInstance", "validateMissingCstMethods", "missingRuleNames", "filter_default", "currRuleName", "isFunction_default", "errors", "CstVisitorDefinitionError", "compact_default", "init_cst_visitor", "__esmMin", "init_lodash", "init_lang_extensions", "TreeBuilder", "init_tree_builder", "__esmMin", "init_cst", "init_lodash", "init_cst_visitor", "init_parser", "__name", "config", "has_default", "DEFAULT_PARSER_CONFIG", "noop_default", "setNodeLocationFull", "setNodeLocationOnlyOffset", "cstNode", "nextToken", "fullRuleName", "ruleCstNode", "prevToken", "loc", "key", "consumedToken", "rootCst", "addTerminalToCst", "ruleCstResult", "ruleName", "preCstNode", "addNoneTerminalToCst", "isUndefined_default", "newBaseCstVisitorConstructor", "createBaseSemanticVisitorConstructor", "keys_default", "newConstructor", "createBaseVisitorConstructorWithDefaults", "ruleStack", "occurrenceStack", "LexerAdapter", "init_lexer_adapter", "__esmMin", "init_parser", "__name", "newInput", "END_OF_FILE", "howMuch", "soughtIdx", "newState", "RecognizerApi", "init_recognizer_api", "__esmMin", "init_lodash", "init_exceptions_public", "init_parser", "init_errors_public", "init_checks", "init_api", "__name", "impl", "idx", "tokType", "options", "ruleToCall", "actionORMethodDef", "altsOrOpts", "name", "implementation", "config", "DEFAULT_RULE_CONFIG", "includes_default", "error", "defaultGrammarValidatorErrorProvider", "ParserDefinitionErrorType", "ruleImplementation", "ruleErrors", "validateRuleIsOverridden", "grammarRule", "args", "orgState", "e", "isRecognitionException", "serializeGrammar", "values_default", "RecognizerEngine", "init_recognizer_engine", "__esmMin", "init_lodash", "init_keys", "init_exceptions_public", "init_lookahead", "init_interpreter", "init_parser", "init_recoverable", "init_tokens_public", "init_tokens", "__name", "tokenVocabulary", "config", "tokenStructuredMatcherNoCategories", "has_default", "isArray_default", "isEmpty_default", "reduce_default", "acc", "tokType", "every_default", "flatten_default", "values_default", "isTokenType", "allTokenTypes", "uniqueTokens", "uniq_default", "isObject_default", "clone_default", "EOF", "noTokenCategoriesUsed", "tokenConstructor", "tokenStructuredMatcher", "augmentTokenTypes", "ruleName", "impl", "resyncEnabled", "DEFAULT_RULE_CONFIG", "recoveryValueFunc", "shortName", "invokeRuleWithTry", "args", "cst", "e", "resyncEnabledConfig", "isFirstInvokedRule", "reSyncEnabled", "isRecognitionException", "recogError", "reSyncTokType", "partialCstResult", "actionORMethodDef", "occurrence", "key", "lookAheadFunc", "action", "predicate", "orgLookaheadFunction", "prodOccurrence", "laKey", "notStuck", "PROD_TYPE", "NextTerminalAfterAtLeastOneWalker", "options", "separator", "separatorLookAheadFunc", "NextTerminalAfterAtLeastOneSepWalker", "lookaheadFunction", "NextTerminalAfterManyWalker", "NextTerminalAfterManySepWalker", "nextTerminalAfterWalker", "beforeIteration", "altsOrOpts", "alts", "altIdxToTake", "firstRedundantTok", "errMsg", "NotAllInputParsedException", "ruleToCall", "idx", "ruleResult", "consumedToken", "nextToken", "eFromConsumption", "msg", "previousToken", "MismatchedTokenException", "follows", "eFromInRuleRecovery", "IN_RULE_RECOVERY_EXCEPTION", "savedErrors", "savedRuleStack", "newState", "fullName", "idxInCallingRule", "ErrorHandler", "init_error_handler", "__esmMin", "init_exceptions_public", "init_lodash", "init_lookahead", "init_parser", "__name", "config", "has_default", "DEFAULT_PARSER_CONFIG", "error", "isRecognitionException", "clone_default", "newErrors", "occurrence", "prodType", "userDefinedErrMsg", "ruleName", "ruleGrammar", "insideProdPaths", "getLookaheadPathsForOptionalProd", "actualTokens", "i", "msg", "EarlyExitException", "errMsgTypes", "lookAheadPathsPerAlternative", "getLookaheadPathsForOr", "previousToken", "errMsg", "NoViableAltException", "ContentAssist", "init_context_assist", "__esmMin", "init_interpreter", "init_lodash", "__name", "startRuleName", "precedingInput", "startRuleGast", "isUndefined_default", "nextPossibleTokensAfter", "grammarPath", "topRuleName", "head_default", "topProduction", "NextAfterTokenWalker", "recordProd", "prodConstructor", "mainProdArg", "occurrence", "handleSep", "assertMethodIdxIsValid", "prevProd", "last_default", "grammarAction", "isFunction_default", "newProd", "has_default", "RECORDING_NULL_OBJECT", "recordOrProd", "hasOptions", "isArray_default", "alts", "newOrProd", "Alternation", "hasPredicates", "some_default", "currAlt", "forEach_default", "currAltFlat", "Alternative", "getIdxSuffix", "idx", "MAX_METHOD_IDX", "error", "HANDLE_SEPARATOR", "RFT", "RECORDING_PHASE_TOKEN", "RECORDING_PHASE_CSTNODE", "GastRecorder", "init_gast_recorder", "__esmMin", "init_lodash", "init_api", "init_lexer_public", "init_tokens", "init_tokens_public", "init_parser", "init_keys", "createToken", "Lexer", "augmentTokenTypes", "createTokenInstance", "__name", "config", "i", "arg1", "arg2", "that", "impl", "grammarRule", "args", "howMuch", "END_OF_FILE", "name", "def", "newTopLevelRule", "Rule", "originalError", "actionORMethodDef", "Option", "RepetitionMandatory", "options", "RepetitionMandatoryWithSeparator", "Repetition", "RepetitionWithSeparator", "altsOrOpts", "ruleToCall", "ruleName", "newNoneTerminal", "NonTerminal", "tokType", "hasShortKeyProperty", "Terminal", "PerformanceTracer", "init_perf_tracer", "__esmMin", "init_lodash", "init_api", "init_parser", "__name", "config", "has_default", "userTraceInitPerf", "traceIsNumber", "DEFAULT_PARSER_CONFIG", "phaseDesc", "phaseImpl", "indent", "time", "value", "timer", "traceMethod", "applyMixins", "derivedCtor", "baseCtors", "baseCtor", "baseProto", "propName", "basePropDescriptor", "init_apply_mixins", "__esmMin", "__name", "EMPTY_ALT", "value", "END_OF_FILE", "DEFAULT_PARSER_CONFIG", "DEFAULT_RULE_CONFIG", "ParserDefinitionErrorType", "Parser", "EmbeddedActionsParser", "init_parser", "__esmMin", "init_lodash", "init_api", "init_follow", "init_tokens_public", "init_errors_public", "init_gast_resolver_public", "init_recoverable", "init_looksahead", "init_tree_builder", "init_lexer_adapter", "init_recognizer_api", "init_recognizer_engine", "init_error_handler", "init_context_assist", "init_gast_recorder", "init_perf_tracer", "init_apply_mixins", "init_checks", "createTokenInstance", "EOF", "defaultParserErrorProvider", "__name", "_Parser", "parserInstance", "defErrorsMsgs", "className", "toFastProperties", "forEach_default", "currRuleName", "originalGrammarAction", "recordedRuleGast", "resolverErrors", "resolveGrammar", "values_default", "isEmpty_default", "validationErrors", "validateGrammar", "defaultGrammarValidatorErrorProvider", "lookaheadValidationErrors", "validateLookahead", "allFollows", "computeAllProdsFollows", "_b", "_a", "map_default", "defError", "tokenVocabulary", "config", "that", "has_default", "applyMixins", "Recoverable", "LooksAhead", "TreeBuilder", "LexerAdapter", "RecognizerEngine", "RecognizerApi", "ErrorHandler", "ContentAssist", "GastRecorder", "PerformanceTracer", "configClone", "clone_default", "init_model", "__esmMin", "init_api", "init_generate", "__esmMin", "init_api", "__esmMin", "init_model", "init_generate", "init_render_public", "__esmMin", "init_version", "init_api", "__esmMin", "init_version", "init_parser", "init_lexer_public", "init_tokens_public", "init_lookahead", "init_llk_lookahead", "init_errors_public", "init_exceptions_public", "init_lexer_errors_public", "init_render_public", "buildATNKey", "rule", "type", "occurrence", "createATN", "rules", "atn", "createRuleStartAndStopATNStates", "ruleLength", "i", "ruleBlock", "block", "buildRuleHandle", "start", "newState", "ATN_RULE_START", "stop", "ATN_RULE_STOP", "atom", "production", "Terminal", "tokenRef", "NonTerminal", "ruleRef", "Alternation", "alternation", "Option", "option", "Repetition", "repetition", "RepetitionWithSeparator", "repetitionSep", "RepetitionMandatory", "repetitionMandatory", "RepetitionMandatoryWithSeparator", "repetitionMandatorySep", "starState", "ATN_STAR_BLOCK_START", "defineDecisionState", "handle", "makeAlts", "star", "sep", "plusState", "ATN_PLUS_BLOCK_START", "plus", "ATN_BASIC", "alts", "map_default", "e", "optional", "handles", "filter_default", "makeBlock", "blkStart", "blkEnd", "loop", "ATN_PLUS_LOOP_BACK", "end", "ATN_LOOP_END", "epsilon", "entry", "ATN_STAR_LOOP_ENTRY", "loopEnd", "ATN_STAR_LOOP_BACK", "state", "ATN_BLOCK_END", "alt", "getProdType", "altsLength", "transition", "isRuleTransition", "RuleTransition", "ruleTransition", "next", "removeState", "first", "last", "tokenType", "left", "right", "addTransition", "AtomTransition", "currentRule", "nonTerminal", "call", "a", "b", "EpsilonTransition", "partial", "t", "AbstractTransition", "init_atn", "__esmMin", "init_map", "init_filter", "init_api", "__name", "target", "ruleStart", "followState", "getATNConfigKey", "config", "alt", "e", "DFA_ERROR", "ATNConfigSet", "init_dfa", "__esmMin", "init_map", "__name", "key", "map_default", "value", "k", "createDFACache", "startState", "decision", "map", "predicateSet", "key", "existing", "isLL1Sequence", "sequences", "allowEmpty", "fullSet", "alt", "altSet", "tokType", "indices", "index", "initATNSimulator", "atn", "decisionLength", "decisionToDFA", "i", "adaptivePredict", "dfaCaches", "logging", "dfa", "start", "closure", "computeStartState", "addDFAState", "newDFAState", "performLookahead", "s0", "previousD", "path", "t", "d", "getExistingTargetState", "computeLookaheadTarget", "DFA_ERROR", "buildAdaptivePredictError", "token", "lookahead", "reach", "computeReachSet", "addDFAEdge", "newState", "predictedAlt", "getUniqueAlt", "hasConflictTerminatingPrediction", "prediction", "min_default", "reportLookaheadAmbiguity", "ambiguityIndices", "prefixPath", "atnState", "topLevelRule", "production", "message", "buildAmbiguityError", "options", "pathMsg", "map_default", "currtok", "tokenLabel", "occurrence", "currMessage", "getProductionDslName", "prod", "NonTerminal", "Option", "Alternation", "RepetitionMandatory", "RepetitionMandatoryWithSeparator", "RepetitionWithSeparator", "Repetition", "Terminal", "previous", "current", "nextTransitions", "flatMap_default", "e", "nextTokenTypes", "uniqBy_default", "AtomTransition", "state", "configs", "intermediate", "ATNConfigSet", "skippedStopStates", "c", "ATN_RULE_STOP", "transitionLength", "transition", "target", "getReachableTarget", "hasConfigInRuleStopState", "tokenMatcher", "from", "to", "mapKey", "numberOfTransitions", "config", "p", "atnStack", "followConfig", "getEpsilonTarget", "EpsilonTransition", "RuleTransition", "stack", "allConfigsInRuleStopStates", "altSets", "getConflictingAltSets", "hasConflictingAltSet", "hasStateAssociatedWithOneAlt", "configToAlts", "getATNConfigKey", "alts", "value", "PredicateSet", "EMPTY_PREDICATES", "LLStarLookaheadStrategy", "init_all_star_lookahead", "__esmMin", "init_api", "init_atn", "init_dfa", "init_min", "init_flatMap", "init_uniqBy", "init_map", "init_flatten", "init_forEach", "init_isEmpty", "init_reduce", "__name", "size", "LLkLookaheadStrategy", "_a", "createATN", "prodOccurrence", "rule", "hasPredicates", "dynamicTokensEnabled", "dfas", "buildATNKey", "decisionIndex", "partialAlts", "getLookaheadPaths", "currAlt", "choiceToAlt", "reduce_default", "result", "idx", "forEach_default", "currTokType", "currExtendingType", "orAlts", "nextToken", "gate", "predicates", "length", "prodType", "g", "singleTokensTypes", "flatten_default", "isEmpty_default", "expectedTokenUniqueKey", "init_lib", "__esmMin", "init_all_star_lookahead", "DocumentUri", "URI", "integer", "uinteger", "Position", "Range", "Location", "LocationLink", "Color", "ColorInformation", "ColorPresentation", "FoldingRangeKind", "FoldingRange", "DiagnosticRelatedInformation", "DiagnosticSeverity", "DiagnosticTag", "CodeDescription", "Diagnostic", "Command", "TextEdit", "ChangeAnnotation", "ChangeAnnotationIdentifier", "AnnotatedTextEdit", "TextDocumentEdit", "CreateFile", "RenameFile", "DeleteFile", "WorkspaceEdit", "TextDocumentIdentifier", "VersionedTextDocumentIdentifier", "OptionalVersionedTextDocumentIdentifier", "TextDocumentItem", "MarkupKind", "MarkupContent", "CompletionItemKind", "InsertTextFormat", "CompletionItemTag", "InsertReplaceEdit", "InsertTextMode", "CompletionItemLabelDetails", "CompletionItem", "CompletionList", "MarkedString", "Hover", "ParameterInformation", "SignatureInformation", "DocumentHighlightKind", "DocumentHighlight", "SymbolKind", "SymbolTag", "SymbolInformation", "WorkspaceSymbol", "DocumentSymbol", "CodeActionKind", "CodeActionTriggerKind", "CodeActionContext", "CodeAction", "CodeLens", "FormattingOptions", "DocumentLink", "SelectionRange", "SemanticTokenTypes", "SemanticTokenModifiers", "SemanticTokens", "InlineValueText", "InlineValueVariableLookup", "InlineValueEvaluatableExpression", "InlineValueContext", "InlayHintKind", "InlayHintLabelPart", "InlayHint", "StringValue", "InlineCompletionItem", "InlineCompletionList", "InlineCompletionTriggerKind", "SelectedCompletionInfo", "InlineCompletionContext", "WorkspaceFolder", "TextDocument", "FullTextDocument", "Is", "init_main", "__esmMin", "is", "value", "__name", "create", "line", "character", "candidate", "one", "two", "three", "four", "uri", "range", "targetUri", "targetRange", "targetSelectionRange", "originSelectionRange", "red", "green", "blue", "alpha", "color", "label", "textEdit", "additionalTextEdits", "startLine", "endLine", "startCharacter", "endCharacter", "kind", "collapsedText", "result", "location", "message", "severity", "code", "source", "relatedInformation", "_a", "title", "command", "args", "replace", "newText", "insert", "position", "del", "needsConfirmation", "description", "annotation", "textDocument", "edits", "options", "oldUri", "newUri", "change", "version", "languageId", "text", "items", "isIncomplete", "fromPlainText", "plainText", "documentation", "parameters", "name", "containerName", "detail", "selectionRange", "children", "diagnostics", "only", "triggerKind", "kindOrCommandOrEdit", "checkKind", "data", "tabSize", "insertSpaces", "target", "parent", "variableName", "caseSensitiveLookup", "expression", "frameId", "stoppedLocation", "createSnippet", "insertText", "filterText", "selectedCompletionInfo", "content", "applyEdits", "document", "sortedEdits", "mergeSort", "a", "b", "diff", "lastModifiedOffset", "i", "e", "startOffset", "endOffset", "compare", "p", "left", "right", "leftIdx", "rightIdx", "start", "end", "event", "lineOffsets", "isLineStart", "ch", "offset", "low", "high", "mid", "lineOffset", "nextLineOffset", "toString", "defined", "undefined", "boolean", "string", "number", "numberRange", "min", "max", "func", "objectLiteral", "typedArray", "check", "CstNodeBuilder", "AbstractCstNode", "LeafCstNodeImpl", "CompositeCstNodeImpl", "CstNodeContainer", "RootCstNodeImpl", "init_cst_node_builder", "__esmMin", "init_main", "init_cst_utils", "__name", "_a", "input", "feature", "compositeNode", "token", "leafNode", "tokenToRange", "node", "parent", "index", "tokens", "nodes", "current", "added", "item", "_b", "value", "offset", "length", "range", "tokenType", "hidden", "firstNode", "lastNode", "firstRange", "lastRange", "Position", "child", "i", "_CstNodeContainer", "items", "start", "count", "isDataTypeNode", "node", "DatatypeSymbol", "ruleSuffix", "withRuleSuffix", "AbstractLangiumParser", "LangiumParser", "AbstractParserErrorMessageProvider", "LangiumParserErrorMessageProvider", "LangiumCompletionParser", "defaultConfig", "ChevrotainWrapper", "init_langium_parser", "__esmMin", "init_api", "init_lib", "init_ast", "init_grammar_utils", "init_ast_utils", "init_cst_node_builder", "__name", "name", "services", "tokens", "production", "idx", "choices", "callback", "CstNodeBuilder", "rule", "impl", "type", "ruleMethod", "isDataTypeRule", "explicit", "getExplicitRuleType", "input", "options", "lexerResult", "result", "$type", "implementation", "args", "createNode", "token", "hiddenTokens", "offset", "tokenType", "feature", "leafNode", "assignment", "isCrossRef", "current", "convertedValue", "isKeyword", "text", "fragment", "cstNode", "subruleResult", "newItem", "action", "last", "obj", "linkContentToContainer", "assignMandatoryProperties", "getContainerOfType", "isAssignment", "isCrossReference", "operator", "value", "item", "target", "source", "existingValue", "newValue", "targetCstNode", "defaultParserErrorProvider", "expected", "actual", "firstRedundant", "size", "element", "index", "EmbeddedActionsParser", "config", "useDefaultLookahead", "LLkLookaheadStrategy", "LLStarLookaheadStrategy", "createParser", "grammar", "parser", "tokens", "buildRules", "parserContext", "reachable", "getAllReachableRules", "parserRules", "stream", "isParserRule", "rule", "ctx", "buildElement", "element", "ignoreGuard", "method", "isKeyword", "buildKeyword", "isAction", "buildAction", "isAssignment", "isCrossReference", "buildCrossReference", "isRuleCall", "buildRuleCall", "isAlternatives", "buildAlternatives", "isUnorderedGroup", "buildUnorderedGroup", "isGroup", "buildGroup", "isEndOfFile", "idx", "__name", "EOF", "ErrorWithLocation", "wrap", "getGuardCondition", "action", "actionType", "getTypeName", "ruleCall", "fragment", "predicate", "buildRuleCallPredicate", "args", "getRule", "isTerminalRule", "getToken", "assertUnreachable", "namedArgs", "predicates", "e", "buildPredicate", "ruleArgs", "i", "ruleTarget", "condition", "isDisjunction", "left", "right", "isConjunction", "isNegation", "value", "isParameterReference", "name", "isBooleanLiteral", "alternatives", "methods", "predicatedMethod", "guard", "alt", "gate", "group", "orIdx", "idFunc", "groupIdx", "lParser", "stackId", "key", "groupState", "trackedAlternatives", "wrapped", "crossRef", "terminal", "terminalRule", "keyword", "assignment", "findNameAssignment", "assignTerminal", "token", "cardinality", "EMPTY_ALT", "getRuleName", "item", "parent", "ruleName", "init_parser_builder_base", "__esmMin", "init_api", "init_ast", "init_errors", "init_stream", "init_grammar_utils", "createCompletionParser", "services", "grammar", "lexer", "parser", "LangiumCompletionParser", "createParser", "init_completion_parser_builder", "__esmMin", "init_langium_parser", "init_parser_builder_base", "__name", "createLangiumParser", "services", "parser", "prepareLangiumParser", "grammar", "lexer", "LangiumParser", "createParser", "init_langium_parser_builder", "__esmMin", "init_langium_parser", "init_parser_builder_base", "__name", "DefaultTokenBuilder", "init_token_builder", "__esmMin", "init_api", "init_ast", "init_ast_utils", "init_grammar_utils", "init_regexp_utils", "init_stream", "__name", "grammar", "options", "reachableRules", "stream", "getAllReachableRules", "terminalTokens", "tokens", "terminalToken", "pattern", "isWhitespace", "text", "diagnostics", "rules", "isTerminalRule", "e", "terminal", "regex", "terminalRegex", "tokenType", "Lexer", "stickyRegex", "offset", "isParserRule", "rule", "streamAllContents", "isKeyword", "a", "b", "keyword", "caseInsensitive", "keywordPattern", "getCaseInsensitivePattern", "longerAlts", "token", "partialMatches", "DefaultValueConverter", "ValueConverter", "init_value_converter", "__esmMin", "init_ast", "init_grammar_utils", "__name", "input", "cstNode", "feature", "isCrossReference", "getCrossReferenceTerminal", "isRuleCall", "rule", "_a", "getRuleType", "convertString", "result", "i", "c", "c1", "convertEscapeCharacter", "char", "convertID", "convertInt", "convertBigint", "convertDate", "convertNumber", "convertBoolean", "require_ral", "__commonJSMin", "exports", "_ral", "RAL", "__name", "install", "ral", "require_is", "__commonJSMin", "exports", "boolean", "value", "__name", "string", "number", "error", "func", "array", "stringArray", "elem", "require_events", "__commonJSMin", "exports", "ral_1", "Event", "_disposable", "CallbackList", "__name", "callback", "context", "bucket", "foundCallbackWithDifferentContext", "len", "args", "ret", "callbacks", "contexts", "i", "e", "Emitter", "_Emitter", "_options", "listener", "thisArgs", "disposables", "result", "event", "require_cancellation", "__commonJSMin", "exports", "ral_1", "Is", "events_1", "CancellationToken", "is", "value", "candidate", "__name", "shortcutEvent", "callback", "context", "handle", "MutableToken", "CancellationTokenSource", "cancellation_exports", "init_cancellation", "__esmMin", "__reExport", "delayNextTick", "resolve", "startCancelableOperation", "lastTick", "setInterruptionPeriod", "period", "globalInterruptionPeriod", "isOperationCancelled", "err", "OperationCancelled", "interruptAndCheck", "token", "current", "Deferred", "init_promise_utils", "__esmMin", "init_cancellation", "__name", "reject", "arg", "mergeSort", "data", "compare", "p", "left", "right", "leftIdx", "rightIdx", "i", "computeLineOffsets", "text", "isAtLineStart", "textOffset", "result", "ch", "isEOL", "char", "getWellformedRange", "range", "start", "end", "getWellformedEdit", "textEdit", "FullTextDocument", "TextDocument", "init_main", "__esmMin", "_FullTextDocument", "__name", "uri", "languageId", "version", "content", "changes", "change", "startOffset", "endOffset", "startLine", "endLine", "lineOffsets", "addedLineOffsets", "len", "diff", "offset", "low", "high", "mid", "line", "position", "lineOffset", "nextLineOffset", "event", "candidate", "create", "update", "document", "applyEdits", "edits", "sortedEdits", "a", "b", "lastModifiedOffset", "spans", "e", "URI", "Utils", "assertPath", "path", "TypeError", "JSON", "stringify", "normalizeStringPosix", "allowAboveRoot", "code", "res", "lastSegmentLength", "lastSlash", "dots", "i", "length", "charCodeAt", "lastSlashIndex", "lastIndexOf", "slice", "posix", "resolve", "__name", "cwd", "resolvedPath", "resolvedAbsolute", "arguments", "process", "normalize", "isAbsolute", "trailingSeparator", "join", "joined", "arg", "relative", "from", "to", "fromStart", "fromEnd", "fromLen", "toStart", "toLen", "lastCommonSep", "fromCode", "out", "_makeLong", "dirname", "hasRoot", "end", "matchedSlash", "basename", "ext", "start", "extIdx", "firstNonSlashEnd", "extname", "startDot", "startPart", "preDotState", "format", "pathObject", "sep", "dir", "root", "base", "name", "parse", "ret", "delimiter", "win32", "module", "exports", "__webpack_module_cache__", "__webpack_require__", "moduleId", "cachedModule", "__webpack_modules__", "d", "definition", "key", "o", "Object", "defineProperty", "enumerable", "get", "obj", "prop", "prototype", "hasOwnProperty", "call", "r", "Symbol", "toStringTag", "value", "isWindows", "f", "P", "platform", "navigator", "userAgent", "indexOf", "_schemePattern", "_singleSlashStart", "_doubleSlashStart", "_validateUri", "_strict", "scheme", "Error", "authority", "query", "fragment", "test", "_empty", "_slash", "_regexp", "thing", "fsPath", "with", "toString", "schemeOrData", "this", "uriToFsPath", "change", "Uri", "match", "exec", "percentDecode", "replace", "idx", "substring", "components", "result", "skipEncoding", "_asFormatted", "toJSON", "data", "_formatted", "external", "_fsPath", "_sep", "_pathSepMarker", "$mid", "encodeTable", "encodeURIComponentFast", "uriComponent", "isPath", "isAuthority", "nativeEncodePos", "pos", "encodeURIComponent", "charAt", "substr", "escaped", "encodeURIComponentMinimal", "uri", "keepDriveLetterCasing", "toLowerCase", "encoder", "userinfo", "String", "fromCharCode", "decodeURIComponentGraceful", "str", "decodeURIComponent", "_rEncodedAsHex", "A", "posixPath", "slash", "t", "joinPath", "paths", "resolvePath", "slashAdded", "LIB", "UriUtils", "init_uri_utils", "__esmMin", "init_esm", "Utils", "equals", "a", "b", "__name", "relative", "from", "to", "fromPath", "toPath", "fromParts", "e", "toParts", "i", "backPart", "toPart", "normalize", "uri", "URI", "DocumentState", "DefaultLangiumDocumentFactory", "DefaultLangiumDocuments", "init_documents", "__esmMin", "init_main", "init_cancellation", "init_stream", "init_uri_utils", "__name", "services", "uri", "cancellationToken", "content", "textDocument", "token", "URI", "text", "model", "options", "parseResult", "cancelToken", "document", "textDocumentGetter", "oldText", "_a", "_b", "serviceRegistry", "textDoc", "TextDocument", "stream", "uriString", "langiumDoc", "ref_resolving", "DefaultLinker", "init_linker", "__esmMin", "init_cancellation", "init_syntax_tree", "init_ast_utils", "init_promise_utils", "init_documents", "__name", "services", "document", "cancelToken", "node", "streamAst", "interruptAndCheck", "streamReferences", "ref", "refInfo", "description", "isLinkingError", "linkedNode", "err", "errorMessage", "_a", "property", "refNode", "refText", "linker", "reference", "isAstNode", "isAstNodeDescription", "findRootNode", "refData", "DocumentState", "nodeDescription", "doc", "targetDescription", "referenceType", "isNamed", "node", "DefaultNameProvider", "init_name_provider", "__esmMin", "init_grammar_utils", "__name", "findNodeForProperty", "DefaultReferences", "init_references", "__esmMin", "init_grammar_utils", "init_syntax_tree", "init_ast_utils", "init_cst_utils", "init_stream", "init_uri_utils", "__name", "services", "sourceCstNode", "assignment", "findAssignment", "nodeElem", "reference", "isReference", "ref", "nameNode", "isChildNode", "astNode", "targetNode", "options", "refs", "indexReferences", "UriUtils", "stream", "doc", "getDocument", "path", "toDocumentSegment", "MultiMap", "BiMap", "init_collections", "__esmMin", "init_stream", "__name", "elements", "key", "value", "Reduction", "stream", "a", "values", "index", "_a", "callbackfn", "array", "DefaultScopeComputation", "init_scope_computation", "__esmMin", "init_cancellation", "init_ast_utils", "init_collections", "init_promise_utils", "__name", "services", "document", "cancelToken", "parentNode", "children", "streamContents", "exports", "node", "interruptAndCheck", "name", "rootNode", "scopes", "MultiMap", "streamAllContents", "container", "StreamScope", "MapScope", "EMPTY_SCOPE", "init_scope", "__esmMin", "init_stream", "__name", "elements", "outerScope", "options", "_a", "name", "local", "e", "element", "localName", "elementStream", "stream", "EMPTY_STREAM", "DisposableCache", "SimpleCache", "ContextCache", "DocumentCache", "WorkspaceCache", "init_caching", "__esmMin", "__name", "disposable", "key", "value", "provider", "converter", "contextKey", "contextCache", "mapKey", "documentCache", "sharedServices", "state", "uri", "document", "_changed", "deleted", "changed", "allUris", "DefaultScopeProvider", "init_scope_provider", "__esmMin", "init_scope", "init_ast_utils", "init_stream", "init_caching", "__name", "services", "WorkspaceCache", "context", "scopes", "referenceType", "precomputed", "getDocument", "currentNode", "allDescriptions", "stream", "desc", "result", "i", "elements", "outerScope", "options", "StreamScope", "s", "e", "name", "_context", "MapScope", "isAstNodeWithComment", "node", "isIntermediateReference", "obj", "DefaultJsonSerializer", "init_json_serializer", "__esmMin", "init_esm", "init_syntax_tree", "init_ast_utils", "init_grammar_utils", "__name", "services", "options", "serializeOptions", "specificReplacer", "defaultReplacer", "key", "value", "replacer", "getDocument", "content", "deserializeOptions", "root", "refText", "sourceText", "textRegions", "comments", "uriConverter", "isReference", "refValue", "$refText", "targetDocument", "targetUri", "targetPath", "_b", "_a", "isAstNode", "astNode", "_c", "_d", "comment", "createDocumentSegment", "cstNode", "textRegion", "assignments", "propertyAssignments", "findNodesForProperty", "container", "containerProperty", "containerIndex", "propertyName", "item", "index", "element", "mutable", "property", "reference", "error", "ref", "uri", "fragmentIndex", "documentUri", "URI", "document", "err", "DefaultServiceRegistry", "init_service_registry", "__esmMin", "init_uri_utils", "__name", "services", "language", "data", "ext", "uri", "languageId", "_b", "_a", "UriUtils", "diagnosticData", "code", "ValidationCategory", "ValidationRegistry", "init_validation_registry", "__esmMin", "init_lib", "init_collections", "init_promise_utils", "init_stream", "__name", "services", "MultiMap", "checksRecord", "thisObj", "category", "type", "ch", "callbacks", "check", "entry", "assertUnreachable", "node", "accept", "cancelToken", "functionality", "messageContext", "err", "isOperationCancelled", "messageDetails", "subtype", "categories", "checks", "stream", "checkBefore", "checkAfter", "rootNode", "getDiagnosticRange", "info", "cstNode", "findNodeForProperty", "findNodeForKeyword", "toDiagnosticSeverity", "severity", "toDiagnosticData", "diagnosticData", "DocumentValidator", "DefaultDocumentValidator", "init_document_validator", "__esmMin", "init_cancellation", "init_grammar_utils", "init_ast_utils", "init_cst_utils", "init_promise_utils", "init_validation_registry", "__name", "services", "document", "options", "cancelToken", "parseResult", "diagnostics", "interruptAndCheck", "d", "_a", "err", "isOperationCancelled", "_options", "lexerDiagnostics", "_b", "lexerDiagnostic", "_c", "diagnostic", "parserError", "range", "token", "position", "tokenToRange", "reference", "linkingError", "rootNode", "validationItems", "acceptor", "message", "checksBefore", "checkBefore", "streamAst", "node", "checks", "check", "checksAfter", "checkAfter", "DefaultAstNodeDescriptionProvider", "DefaultReferenceDescriptionProvider", "init_ast_descriptions", "__esmMin", "init_cancellation", "init_syntax_tree", "init_ast_utils", "init_cst_utils", "init_promise_utils", "init_uri_utils", "__name", "services", "node", "name", "document", "doc", "getDocument", "path", "nameNodeSegment", "nameSegmentGetter", "_a", "toDocumentSegment", "cancelToken", "descr", "rootNode", "astNode", "streamAst", "interruptAndCheck", "streamReferences", "refInfo", "isLinkingError", "description", "targetNodeDescr", "refCstNode", "docUri", "UriUtils", "DefaultAstNodeLocator", "init_ast_node_locator", "__esmMin", "__name", "node", "containerPath", "newSegment", "$containerProperty", "$containerIndex", "path", "previousValue", "currentValue", "propertyIndex", "property", "arrayIndex", "array", "event_exports", "init_event", "__esmMin", "__reExport", "DefaultConfigurationProvider", "init_configuration", "__esmMin", "init_event", "init_promise_utils", "__name", "services", "Deferred", "params", "_b", "_a", "languages", "lang", "configToUpdate", "configs", "conf", "idx", "change", "section", "configuration", "language", "sectionName", "languageId", "Disposable", "init_disposable", "__esmMin", "create", "callback", "__name", "DefaultDocumentBuilder", "init_document_builder", "__esmMin", "init_cancellation", "init_disposable", "init_collections", "init_promise_utils", "init_stream", "init_validation_registry", "init_documents", "__name", "services", "MultiMap", "DocumentState", "documents", "options", "cancelToken", "document", "key", "buildState", "previousCategories", "_a", "categories", "_b", "ValidationCategory", "c", "e", "changed", "deleted", "deletedUri", "changedUri", "newDocument", "allChangedUris", "stream", "uri", "doc", "interruptAndCheck", "rebuildDocuments", "listener", "left", "right", "changedUris", "ref", "callback", "Disposable", "index", "scopeComputation", "toBeValidated", "state", "targetState", "filtered", "targetStateDocs", "uriOrToken", "OperationCancelled", "resolve", "reject", "buildDisposable", "cancelDisposable", "listenersCopy", "err", "isOperationCancelled", "validator", "validationSetting", "diagnostics", "newCategories", "DefaultIndexManager", "init_index_manager", "__esmMin", "init_ast_utils", "init_caching", "init_cancellation", "init_stream", "init_uri_utils", "__name", "services", "ContextCache", "targetNode", "astNodePath", "targetDocUri", "getDocument", "result", "docRefs", "refDescr", "UriUtils", "stream", "nodeType", "uris", "documentUris", "uri", "_a", "e", "uriString", "document", "cancelToken", "exports", "indexData", "changedUris", "references", "ref", "DefaultWorkspaceManager", "init_workspace_manager", "__esmMin", "init_cancellation", "init_promise_utils", "init_uri_utils", "__name", "services", "Deferred", "params", "_a", "_params", "token", "folders", "cancelToken", "documents", "interruptAndCheck", "fileExtensions", "e", "collector", "document", "wf", "entry", "_folders", "_collector", "workspaceFolder", "URI", "folderPath", "content", "_workspaceFolder", "name", "UriUtils", "extname", "isTokenTypeArray", "tokenVocabulary", "isIMultiModeLexerDefinition", "isTokenTypeDictionary", "DefaultLexerErrorMessageProvider", "DEFAULT_TOKENIZE_OPTIONS", "DefaultLexer", "init_lexer", "__esmMin", "init_api", "__name", "fullText", "startOffset", "length", "line", "column", "defaultLexerErrorProvider", "token", "services", "tokens", "lexerTokens", "production", "Lexer", "text", "_options", "chevrotainResult", "_a", "_c", "_b", "buildTokens", "res", "parseJSDoc", "node", "start", "options", "opts", "position", "Position", "lines", "getLines", "normalizedOptions", "normalizeOptions", "tokens", "tokenize", "parseJSDocComment", "isJSDoc", "first", "last", "firstRegex", "lastRegex", "content", "NEWLINE_REGEXP", "context", "currentLine", "currentCharacter", "i", "line", "index", "match", "_a", "_b", "_c", "lastCharacter", "skipWhitespace", "Range", "tagRegex", "tagMatch", "fullMatch", "value", "end", "rest", "inlineTagMatches", "inlineTagRegex", "buildInlineTokens", "tags", "lineIndex", "characterIndex", "lastIndex", "matchIndex", "startContent", "offset", "tagName", "endContent", "nonWhitespaceRegex", "whitespaceEndRegex", "startPosition", "JSDocCommentImpl", "elements", "element", "parseJSDocElement", "_d", "next", "parseJSDocTag", "parseJSDocText", "appendEmptyLine", "token", "JSDocLineImpl", "firstToken", "lastToken", "parseJSDocInline", "JSDocTextImpl", "parseJSDocLine", "inline", "tagToken", "name", "nextToken", "docLine", "JSDocTagImpl", "textDoc", "range", "normalizeOption", "option", "escaped", "escapeRegExp", "renderInlineTag", "tag", "display", "displayStart", "renderLinkDefault", "URI", "fillNewlines", "text", "init_jsdoc", "__esmMin", "init_main", "init_regexp_utils", "init_uri_utils", "__name", "e", "rendered", "marker", "JSDocDocumentationProvider", "init_documentation_provider", "__esmMin", "init_ast_utils", "init_jsdoc", "__name", "services", "node", "comment", "isJSDoc", "parseJSDoc", "link", "display", "tag", "name", "description", "_a", "line", "character", "uri", "_node", "_tag", "precomputed", "getDocument", "currentNode", "e", "DefaultCommentProvider", "init_comment_provider", "__esmMin", "init_json_serializer", "init_cst_utils", "__name", "services", "node", "isAstNodeWithComment", "_a", "findCommentNode", "DefaultAsyncParser", "AbstractThreadedAsyncParser", "ParserWorker", "init_async_parser", "__esmMin", "init_promise_utils", "init_event", "__name", "services", "text", "_cancelToken", "worker", "deferred", "cancelToken", "Deferred", "timeout", "cancellation", "result", "hydrated", "err", "index", "OperationCancelled", "sendMessage", "onMessage", "onError", "terminate", "parseResult", "error", "DefaultWorkspaceLock", "init_workspace_lock", "__esmMin", "init_cancellation", "init_promise_utils", "__name", "action", "tokenSource", "startCancelableOperation", "queue", "cancellationToken", "deferred", "Deferred", "entry", "entries", "result", "err", "isOperationCancelled", "DefaultHydrator", "init_hydrator", "__esmMin", "init_cst_node_builder", "init_ast", "init_syntax_tree", "init_ast_utils", "init_collections", "init_cst_utils", "__name", "services", "BiMap", "result", "e", "lexerReport", "node", "astNodes", "cstNodes", "astNode", "streamAst", "cstNode", "streamCst", "context", "obj", "name", "value", "arr", "item", "isAstNode", "isReference", "reference", "isRootCstNode", "isCompositeCstNode", "child", "isLeafCstNode", "root", "cst", "RootCstNodeImpl", "CompositeCstNodeImpl", "parent", "num", "cstNodeObj", "hydrated", "tokenType", "offset", "length", "startLine", "startColumn", "endLine", "endColumn", "hidden", "LeafCstNodeImpl", "id", "element", "isAbstractElement", "createDefaultCoreModule", "context", "__name", "services", "DefaultCommentProvider", "JSDocDocumentationProvider", "DefaultAsyncParser", "createGrammarConfig", "createLangiumParser", "createCompletionParser", "DefaultValueConverter", "DefaultTokenBuilder", "DefaultLexer", "LangiumParserErrorMessageProvider", "DefaultLexerErrorMessageProvider", "DefaultAstNodeLocator", "DefaultAstNodeDescriptionProvider", "DefaultReferenceDescriptionProvider", "DefaultLinker", "DefaultNameProvider", "DefaultScopeProvider", "DefaultScopeComputation", "DefaultReferences", "DefaultHydrator", "DefaultJsonSerializer", "DefaultDocumentValidator", "ValidationRegistry", "createDefaultSharedCoreModule", "DefaultServiceRegistry", "DefaultLangiumDocuments", "DefaultLangiumDocumentFactory", "DefaultDocumentBuilder", "DefaultIndexManager", "DefaultWorkspaceManager", "DefaultWorkspaceLock", "DefaultConfigurationProvider", "init_default_module", "__esmMin", "init_grammar_config", "init_completion_parser_builder", "init_langium_parser_builder", "init_token_builder", "init_value_converter", "init_linker", "init_name_provider", "init_references", "init_scope_computation", "init_scope_provider", "init_json_serializer", "init_service_registry", "init_document_validator", "init_validation_registry", "init_ast_descriptions", "init_ast_node_locator", "init_configuration", "init_document_builder", "init_documents", "init_index_manager", "init_workspace_manager", "init_lexer", "init_documentation_provider", "init_comment_provider", "init_langium_parser", "init_async_parser", "init_workspace_lock", "init_hydrator", "inject", "module1", "module2", "module3", "module4", "module5", "module6", "module7", "module8", "module9", "module", "_merge", "_inject", "eagerLoad", "item", "isProxy", "value", "injector", "proxy", "__name", "obj", "prop", "_resolve", "_", "__requested__", "error", "target", "source", "key", "value2", "value1", "Module", "init_dependency_injection", "__esmMin", "m1", "m2", "init_services", "__esmMin", "init_documentation", "__esmMin", "init_comment_provider", "init_documentation_provider", "init_jsdoc", "init_language_meta_data", "__esmMin", "init_languages", "__esmMin", "init_grammar_config", "init_language_meta_data", "indentationBuilderDefaultOptions", "LexingMode", "IndentationAwareTokenBuilder", "IndentationAwareLexer", "init_indentation_aware", "__esmMin", "init_api", "init_token_builder", "init_lexer", "DefaultTokenBuilder", "__name", "options", "createToken", "grammar", "tokenTypes", "isTokenTypeArray", "indentTokenName", "dedentTokenName", "whitespaceTokenName", "ignoreIndentationDelimiters", "dedent", "indent", "ws", "otherTokens", "tokenType", "begin", "end", "text", "result", "offset", "tokens", "groups", "match", "_a", "image", "lineNumber", "createTokenInstance", "currIndentLevel", "prevIndentLevel", "matchIndentIndex", "_b", "numberOfDedents", "newlinesBeforeDedent", "_d", "_c", "i", "token", "terminal", "Lexer", "remainingDedents", "DefaultLexer", "services", "DEFAULT_TOKENIZE_OPTIONS", "report", "indentTokenType", "dedentTokenType", "indentTokenIdx", "dedentTokenIdx", "cleanTokens", "length", "nextToken", "init_parser_config", "__esmMin", "init_parser", "__esmMin", "init_async_parser", "init_completion_parser_builder", "init_cst_node_builder", "init_indentation_aware", "init_langium_parser_builder", "init_langium_parser", "init_lexer", "init_parser_builder_base", "init_parser_config", "init_token_builder", "init_value_converter", "init_references", "__esmMin", "init_linker", "init_name_provider", "init_scope", "init_scope_computation", "init_scope_provider", "init_serializer", "__esmMin", "init_hydrator", "init_json_serializer", "EmptyFileSystemProvider", "EmptyFileSystem", "init_file_system_provider", "__esmMin", "__name", "createMinimalGrammarServices", "shared", "inject", "createDefaultSharedCoreModule", "EmptyFileSystem", "minimalSharedGrammarModule", "grammar", "createDefaultCoreModule", "minimalGrammarModule", "loadGrammarFromJson", "json", "services", "astNode", "URI", "_a", "init_grammar_loader", "__esmMin", "init_default_module", "init_dependency_injection", "init_ast", "init_file_system_provider", "init_uri_utils", "__name", "LangiumGrammarAstReflection", "utils_exports", "__export", "ast_utils_exports", "BiMap", "cancellation_exports", "ContextCache", "cst_utils_exports", "DONE_RESULT", "Deferred", "Disposable", "DisposableCache", "DocumentCache", "EMPTY_STREAM", "ErrorWithLocation", "grammar_utils_exports", "MultiMap", "OperationCancelled", "Reduction", "regexp_utils_exports", "SimpleCache", "StreamImpl", "TreeStreamImpl", "URI", "UriUtils", "WorkspaceCache", "assertUnreachable", "delayNextTick", "interruptAndCheck", "isOperationCancelled", "loadGrammarFromJson", "setInterruptionPeriod", "startCancelableOperation", "stream", "init_utils", "__esmMin", "init_caching", "init_event", "__reExport", "event_exports", "init_collections", "init_disposable", "init_errors", "init_grammar_loader", "init_promise_utils", "init_stream", "init_uri_utils", "init_ast_utils", "init_cancellation", "init_cst_utils", "init_grammar_utils", "init_regexp_utils", "init_validation", "__esmMin", "init_document_validator", "init_validation_registry", "init_workspace", "__esmMin", "init_ast_descriptions", "init_ast_node_locator", "init_configuration", "init_document_builder", "init_documents", "init_file_system_provider", "init_index_manager", "init_workspace_lock", "init_workspace_manager", "lib_exports", "__export", "AbstractAstReflection", "AbstractCstNode", "AbstractLangiumParser", "AbstractParserErrorMessageProvider", "AbstractThreadedAsyncParser", "ast_utils_exports", "BiMap", "cancellation_exports", "CompositeCstNodeImpl", "ContextCache", "CstNodeBuilder", "cst_utils_exports", "DEFAULT_TOKENIZE_OPTIONS", "DONE_RESULT", "DatatypeSymbol", "DefaultAstNodeDescriptionProvider", "DefaultAstNodeLocator", "DefaultAsyncParser", "DefaultCommentProvider", "DefaultConfigurationProvider", "DefaultDocumentBuilder", "DefaultDocumentValidator", "DefaultHydrator", "DefaultIndexManager", "DefaultJsonSerializer", "DefaultLangiumDocumentFactory", "DefaultLangiumDocuments", "DefaultLexer", "DefaultLexerErrorMessageProvider", "DefaultLinker", "DefaultNameProvider", "DefaultReferenceDescriptionProvider", "DefaultReferences", "DefaultScopeComputation", "DefaultScopeProvider", "DefaultServiceRegistry", "DefaultTokenBuilder", "DefaultValueConverter", "DefaultWorkspaceLock", "DefaultWorkspaceManager", "Deferred", "Disposable", "DisposableCache", "DocumentCache", "DocumentState", "DocumentValidator", "EMPTY_SCOPE", "EMPTY_STREAM", "EmptyFileSystem", "EmptyFileSystemProvider", "ErrorWithLocation", "ast_exports", "grammar_utils_exports", "IndentationAwareLexer", "IndentationAwareTokenBuilder", "JSDocDocumentationProvider", "LangiumCompletionParser", "LangiumParser", "LangiumParserErrorMessageProvider", "LeafCstNodeImpl", "LexingMode", "MapScope", "Module", "MultiMap", "OperationCancelled", "ParserWorker", "Reduction", "regexp_utils_exports", "RootCstNodeImpl", "SimpleCache", "StreamImpl", "StreamScope", "TextDocument", "TreeStreamImpl", "URI", "UriUtils", "ValidationCategory", "ValidationRegistry", "ValueConverter", "WorkspaceCache", "assertUnreachable", "createCompletionParser", "createDefaultCoreModule", "createDefaultSharedCoreModule", "createGrammarConfig", "createLangiumParser", "createParser", "delayNextTick", "diagnosticData", "eagerLoad", "getDiagnosticRange", "indentationBuilderDefaultOptions", "inject", "interruptAndCheck", "isAstNode", "isAstNodeDescription", "isAstNodeWithComment", "isCompositeCstNode", "isIMultiModeLexerDefinition", "isJSDoc", "isLeafCstNode", "isLinkingError", "isNamed", "isOperationCancelled", "isReference", "isRootCstNode", "isTokenTypeArray", "isTokenTypeDictionary", "loadGrammarFromJson", "parseJSDoc", "prepareLangiumParser", "setInterruptionPeriod", "startCancelableOperation", "stream", "toDiagnosticData", "toDiagnosticSeverity", "init_lib", "__esmMin", "init_default_module", "init_dependency_injection", "init_service_registry", "init_services", "init_syntax_tree", "init_documentation", "init_languages", "init_parser", "init_references", "init_serializer", "init_utils", "__reExport", "utils_exports", "init_validation", "init_workspace", "init_ast", "isArchitecture", "item", "reflection", "Architecture", "isBranch", "Branch", "isCommit", "Commit", "isGitGraph", "GitGraph", "isInfo", "Info", "isMerge", "Merge", "isPacket", "Packet", "isPacketBlock", "PacketBlock", "isPie", "Pie", "isPieSection", "PieSection", "isTreemap", "Treemap", "__defProp", "__name", "Statement", "Axis", "Checkout", "CherryPicking", "ClassDefStatement", "Curve", "Edge", "Entry", "Group", "Item", "Junction", "Option", "Radar", "Service", "TreemapRow", "Direction", "Leaf", "Section", "MermaidAstReflection", "loadedInfoGrammar", "InfoGrammar", "loadedPacketGrammar", "PacketGrammar", "loadedPieGrammar", "PieGrammar", "loadedArchitectureGrammar", "ArchitectureGrammar", "loadedGitGraphGrammar", "GitGraphGrammar", "loadedRadarGrammar", "RadarGrammar", "loadedTreemapGrammar", "TreemapGrammar", "InfoLanguageMetaData", "PacketLanguageMetaData", "PieLanguageMetaData", "ArchitectureLanguageMetaData", "GitGraphLanguageMetaData", "RadarLanguageMetaData", "TreemapLanguageMetaData", "MermaidGeneratedSharedModule", "InfoGeneratedModule", "PacketGeneratedModule", "PieGeneratedModule", "ArchitectureGeneratedModule", "GitGraphGeneratedModule", "RadarGeneratedModule", "TreemapGeneratedModule", "accessibilityDescrRegex", "accessibilityTitleRegex", "titleRegex", "rulesRegexes", "AbstractMermaidValueConverter", "CommonValueConverter", "AbstractMermaidTokenBuilder", "CommonTokenBuilder", "init_chunk_FPAJGGOC", "__esmMin", "init_lib", "target", "value", "AbstractAstReflection", "subtype", "supertype", "refInfo", "referenceId", "type", "loadGrammarFromJson", "DefaultValueConverter", "rule", "input", "cstNode", "_cstNode", "regex", "match", "_rule", "_input", "DefaultTokenBuilder", "keywords", "rules", "terminalTokens", "options", "tokenTypes", "tokenType", "createGitGraphServices", "context", "EmptyFileSystem", "shared", "inject", "createDefaultSharedCoreModule", "MermaidGeneratedSharedModule", "GitGraph", "createDefaultCoreModule", "GitGraphGeneratedModule", "GitGraphModule", "GitGraphTokenBuilder", "init_chunk_S6J4BHB3", "__esmMin", "init_chunk_FPAJGGOC", "init_lib", "AbstractMermaidTokenBuilder", "__name", "CommonValueConverter", "createInfoServices", "context", "EmptyFileSystem", "shared", "inject", "createDefaultSharedCoreModule", "MermaidGeneratedSharedModule", "Info", "createDefaultCoreModule", "InfoGeneratedModule", "InfoModule", "InfoTokenBuilder", "init_chunk_LBM3YZW2", "__esmMin", "init_chunk_FPAJGGOC", "init_lib", "AbstractMermaidTokenBuilder", "__name", "CommonValueConverter", "createPacketServices", "context", "EmptyFileSystem", "shared", "inject", "createDefaultSharedCoreModule", "MermaidGeneratedSharedModule", "Packet", "createDefaultCoreModule", "PacketGeneratedModule", "PacketModule", "PacketTokenBuilder", "init_chunk_76Q3JFCE", "__esmMin", "init_chunk_FPAJGGOC", "init_lib", "AbstractMermaidTokenBuilder", "__name", "CommonValueConverter", "createPieServices", "context", "EmptyFileSystem", "shared", "inject", "createDefaultSharedCoreModule", "MermaidGeneratedSharedModule", "Pie", "createDefaultCoreModule", "PieGeneratedModule", "PieModule", "PieTokenBuilder", "PieValueConverter", "init_chunk_T53DSG4Q", "__esmMin", "init_chunk_FPAJGGOC", "init_lib", "AbstractMermaidTokenBuilder", "__name", "AbstractMermaidValueConverter", "rule", "input", "_cstNode", "createArchitectureServices", "context", "EmptyFileSystem", "shared", "inject", "createDefaultSharedCoreModule", "MermaidGeneratedSharedModule", "Architecture", "createDefaultCoreModule", "ArchitectureGeneratedModule", "ArchitectureModule", "ArchitectureTokenBuilder", "ArchitectureValueConverter", "init_chunk_O7ZBX7Z2", "__esmMin", "init_chunk_FPAJGGOC", "init_lib", "AbstractMermaidTokenBuilder", "__name", "AbstractMermaidValueConverter", "rule", "input", "_cstNode", "createRadarServices", "context", "EmptyFileSystem", "shared", "inject", "createDefaultSharedCoreModule", "MermaidGeneratedSharedModule", "Radar", "createDefaultCoreModule", "RadarGeneratedModule", "RadarModule", "RadarTokenBuilder", "init_chunk_LHMN2FUI", "__esmMin", "init_chunk_FPAJGGOC", "init_lib", "AbstractMermaidTokenBuilder", "__name", "CommonValueConverter", "registerValidationChecks", "services", "validator", "registry", "checks", "createTreemapServices", "context", "EmptyFileSystem", "shared", "inject", "createDefaultSharedCoreModule", "MermaidGeneratedSharedModule", "Treemap", "createDefaultCoreModule", "TreemapGeneratedModule", "TreemapModule", "TreemapTokenBuilder", "classDefRegex", "TreemapValueConverter", "TreemapValidator", "init_chunk_FWNWRKHM", "__esmMin", "init_chunk_FPAJGGOC", "init_lib", "AbstractMermaidTokenBuilder", "__name", "AbstractMermaidValueConverter", "rule", "input", "_cstNode", "match", "doc", "accept", "rootNodeIndentation", "row", "info_NVLQJR56_exports", "__export", "InfoModule", "createInfoServices", "init_info_NVLQJR56", "__esmMin", "init_chunk_LBM3YZW2", "init_chunk_FPAJGGOC", "packet_BFZMPI3H_exports", "__export", "PacketModule", "createPacketServices", "init_packet_BFZMPI3H", "__esmMin", "init_chunk_76Q3JFCE", "init_chunk_FPAJGGOC", "pie_7BOR55EZ_exports", "__export", "PieModule", "createPieServices", "init_pie_7BOR55EZ", "__esmMin", "init_chunk_T53DSG4Q", "init_chunk_FPAJGGOC", "architecture_U656AL7Q_exports", "__export", "ArchitectureModule", "createArchitectureServices", "init_architecture_U656AL7Q", "__esmMin", "init_chunk_O7ZBX7Z2", "init_chunk_FPAJGGOC", "gitGraph_F6HP7TQM_exports", "__export", "GitGraphModule", "createGitGraphServices", "init_gitGraph_F6HP7TQM", "__esmMin", "init_chunk_S6J4BHB3", "init_chunk_FPAJGGOC", "radar_NHE76QYJ_exports", "__export", "RadarModule", "createRadarServices", "init_radar_NHE76QYJ", "__esmMin", "init_chunk_LHMN2FUI", "init_chunk_FPAJGGOC", "treemap_KMMF4GRG_exports", "__export", "TreemapModule", "createTreemapServices", "init_treemap_KMMF4GRG", "__esmMin", "init_chunk_FWNWRKHM", "init_chunk_FPAJGGOC", "parse", "diagramType", "text", "initializer", "initializers", "parsers", "result", "MermaidParseError", "init_mermaid_parser_core", "__esmMin", "init_chunk_S6J4BHB3", "init_chunk_LBM3YZW2", "init_chunk_76Q3JFCE", "init_chunk_T53DSG4Q", "init_chunk_O7ZBX7Z2", "init_chunk_LHMN2FUI", "init_chunk_FWNWRKHM", "init_chunk_FPAJGGOC", "__name", "createInfoServices2", "parser", "createPacketServices2", "createPieServices2", "createArchitectureServices2", "createGitGraphServices2", "createRadarServices2", "createTreemapServices2", "lexerErrors", "err", "parserErrors", "populateCommonDb", "ast", "db", "init_populateCommonDb", "__esmMin", "__name", "commitType", "init_gitGraphTypes", "__esmMin", "ImperativeState", "init_imperativeState", "__esmMin", "init", "__name", "getID", "random", "uniqBy", "list", "fn", "recordMap", "out", "item", "key", "upsert", "arr", "newVal", "index", "prettyPrintCommitHistory", "commitArr", "commit", "line", "c", "label", "branch", "state", "log", "newCommit", "DEFAULT_GITGRAPH_CONFIG", "getConfig", "setDirection", "setOptions", "getOptions", "merge", "cherryPick", "checkout", "prettyPrint", "clear", "getBranchesAsObjArray", "getBranches", "getCommits", "getCommitsArray", "getCurrentBranch", "getDirection", "getHead", "db", "init_gitGraphAst", "__esmMin", "init_logger", "init_utils", "init_config", "init_common", "init_commonDb", "init_gitGraphTypes", "init_imperativeState", "init_defaultConfig", "defaultConfig_default", "__name", "cleanAndMerge", "ImperativeState", "config", "mainBranchName", "mainBranchOrder", "dir", "rawOptString", "commitDB", "msg", "id", "type", "tags", "common_default", "tag", "commitType", "branchDB", "name", "order", "mergeDB", "otherBranch", "customId", "overrideType", "customTags", "currentBranchCheck", "otherBranchCheck", "currentCommit", "otherCommit", "error", "verifiedBranch", "cherryPickDB", "sourceId", "targetId", "parentCommitId", "sourceCommit", "sourceCommitBranch", "currentCommitId", "node", "branchConfig", "i", "a", "b", "o", "setAccTitle", "getAccTitle", "getAccDescription", "setAccDescription", "setDiagramTitle", "getDiagramTitle", "populate", "parseStatement", "parseCommit", "parseBranch", "parseMerge", "parseCheckout", "parseCherryPicking", "parser", "init_gitGraphParser", "__esmMin", "init_mermaid_parser_core", "init_logger", "init_populateCommonDb", "init_gitGraphAst", "init_gitGraphTypes", "__name", "ast", "db", "populateCommonDb", "statement", "stmt", "log", "commit", "commitType", "branch", "merge", "checkout", "cherryPicking", "input", "parse", "DEFAULT_CONFIG", "DEFAULT_GITGRAPH_CONFIG", "LAYOUT_OFFSET", "COMMIT_STEP", "PX", "PY", "THEME_COLOR_LIMIT", "branchPos", "commitPos", "defaultPos", "allCommitsDict", "lanes", "maxPos", "dir", "clear", "drawText", "findClosestParent", "findClosestParentBT", "setParallelBTPos", "findClosestParentPos", "calculateCommitPosition", "setCommitPosition", "setRootPosition", "drawCommitBullet", "drawCommitLabel", "drawCommitTags", "getCommitClassType", "calculatePosition", "getCommitPosition", "drawCommits", "shouldRerouteArrow", "findLane", "drawArrow", "drawArrows", "drawBranches", "setBranchPosition", "draw", "gitGraphRenderer_default", "init_gitGraphRenderer", "__esmMin", "init_src", "init_diagramAPI", "init_logger", "init_utils", "init_gitGraphTypes", "getConfig", "__name", "txt", "svgLabel", "row", "tspan", "parents", "closestParent", "comparisonFunc", "targetPosition", "a", "b", "parent", "parentPosition", "maxPosition", "sortedKeys", "commits", "curPos", "roots", "key", "commit", "x", "y", "p", "closestParentPos", "branch", "gBullets", "commitPosition", "typeClass", "branchIndex", "commitSymbolType", "commitType", "circle", "circle2", "gLabels", "pos", "wrapper", "labelBkg", "text", "bbox", "r_x", "r_y", "yOffset", "maxTagBboxWidth", "maxTagBboxHeight", "tagElements", "tagValue", "rect", "hole", "tag", "tagBbox", "h2", "ly", "yOrigin", "defaultCommitPosition", "isParallelCommits", "posWithOffset", "svg", "modifyGraph", "keys", "sortKeys", "seqA", "seqB", "commitA", "commitB", "p1", "p2", "allCommits", "branchToGetCurve", "isOnBranchToGetCurve", "isBetweenCommits", "commitX", "y1", "y2", "depth", "candidate", "lane", "diff", "arrowNeedsRerouting", "arc", "arc2", "radius", "offset", "colorClassNum", "lineDef", "lineY", "lineX", "gArrows", "branches", "g", "index", "adjustIndexForTheme", "line", "name", "labelElement", "bkg", "label", "rotateCommitLabel", "id", "ver", "diagObj", "log", "db", "diagram", "select_default", "branchLabel", "utils_default", "setupGraphViewbox", "getStyles", "styles_default", "init_styles", "__esmMin", "__name", "options", "i", "gitGraphDiagram_exports", "__export", "diagram", "init_gitGraphDiagram", "__esmMin", "init_gitGraphParser", "init_gitGraphAst", "init_gitGraphRenderer", "init_styles", "parser", "db", "gitGraphRenderer_default", "styles_default", "parser", "gantt_default", "init_gantt", "__esmMin", "o", "__name", "k", "v", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "$Vd", "$Ve", "$Vf", "$Vg", "$Vh", "$Vi", "$Vj", "$Vk", "$Vl", "$Vm", "$Vn", "$Vo", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "args", "lexer", "sharedState", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "YYSTATE", "Parser", "require_isoWeek", "__commonJSMin", "exports", "module", "e", "t", "i", "s", "a", "__name", "d", "n", "o", "r", "u", "require_customParseFormat", "__commonJSMin", "exports", "module", "e", "t", "n", "r", "o", "a", "__name", "f", "u", "i", "c", "l", "h", "d", "s", "m", "M", "Y", "p", "v", "D", "w", "g", "y", "L", "require_advancedFormat", "__commonJSMin", "exports", "module", "e", "t", "r", "s", "a", "getTaskTags", "data", "task", "tags", "matchFound", "t", "pattern", "regex", "import_sanitize_url", "import_dayjs", "import_isoWeek", "import_customParseFormat", "import_advancedFormat", "WEEKEND_START_DAY", "dateFormat", "axisFormat", "tickInterval", "todayMarker", "includes", "excludes", "links", "sections", "tasks", "currentSection", "displayMode", "funs", "inclusiveEndDates", "topAxis", "weekday", "weekend", "lastOrder", "clear", "setAxisFormat", "getAxisFormat", "setTickInterval", "getTickInterval", "setTodayMarker", "getTodayMarker", "setDateFormat", "enableInclusiveEndDates", "endDatesAreInclusive", "enableTopAxis", "topAxisEnabled", "setDisplayMode", "getDisplayMode", "getDateFormat", "setIncludes", "getIncludes", "setExcludes", "getExcludes", "getLinks", "addSection", "getSections", "getTasks", "isInvalidDate", "setWeekday", "getWeekday", "setWeekend", "checkTaskDates", "fixTaskDates", "getStartDate", "parseDuration", "getEndDate", "taskCnt", "parseId", "compileData", "parseData", "lastTask", "lastTaskID", "rawTasks", "taskDb", "addTask", "findTaskById", "addTaskOrg", "compileTasks", "setLink", "setClass", "setClickFun", "pushFun", "setClickEvent", "bindFunctions", "ganttDb_default", "init_ganttDb", "__esmMin", "init_logger", "init_diagramAPI", "init_utils", "init_commonDb", "dayjs", "dayjsIsoWeek", "dayjsCustomParseFormat", "dayjsAdvancedFormat", "__name", "txt", "allItemsProcessed", "maxDepth", "iterationCount", "date", "formattedDate", "dateOnly", "startDay", "startTime", "originalEndTime", "fixedEndTime", "renderEndTime", "endTime", "invalid", "prevTime", "str", "format", "trimmedFormat", "afterStatement", "latestTask", "id", "today", "mDate", "log", "d", "statement", "inclusive", "untilStatement", "earliestTask", "parsedDate", "durationValue", "durationUnit", "newEndTime", "idStr", "prevTask", "dataStr", "ds", "i", "endTimeData", "prevTaskId", "descr", "rawTask", "taskInfo", "pos", "newTask", "compileTask", "allProcessed", "ids", "_linkStr", "linkStr", "getConfig", "className", "functionName", "functionArgs", "argList", "item", "utils_default", "callbackFunction", "elem", "element", "fun", "setAccTitle", "getAccTitle", "setDiagramTitle", "getDiagramTitle", "setAccDescription", "getAccDescription", "require_duration", "__commonJSMin", "exports", "module", "s", "n", "i", "e", "r", "o", "u", "d", "a", "h", "c", "__name", "t", "g", "f", "l", "$", "y", "v", "p", "import_dayjs", "import_duration", "setConf", "mapWeekdayToTimeFunction", "getMaxIntersections", "w", "MAX_TICK_COUNT", "draw", "ganttRenderer_default", "init_ganttRenderer", "__esmMin", "init_logger", "init_src", "init_common", "init_diagramAPI", "init_setupGraphViewbox", "dayjs", "dayjsDuration", "__name", "log", "timeMonday", "timeTuesday", "timeWednesday", "timeThursday", "timeFriday", "timeSaturday", "timeSunday", "tasks", "orderOffset", "timeline", "sorted", "b", "maxIntersections", "element", "j", "text", "id", "version", "diagObj", "conf", "getConfig", "securityLevel", "sandboxElement", "select_default", "root", "doc", "elem", "taskArray", "categories", "checkUnique", "categoryHeights", "h", "categoryElements", "intersections", "category", "categoryHeight", "task", "svg", "timeScale", "time", "min", "d", "max", "taskCompare", "a", "taskA", "taskB", "result", "makeGantt", "configureSvgSize", "pageWidth", "pageHeight", "barHeight", "gap", "topPadding", "leftPadding", "colorScale", "linear", "hcl_default", "drawExcludeDays", "makeGrid", "drawRects", "vertLabels", "drawToday", "theArray", "theGap", "theTopPad", "theSidePad", "theBarHeight", "theColorScale", "uniqueTasks", "item", "i", "rectangles", "links", "res", "classStr", "secNum", "taskClass", "startX", "endX", "textWidth", "taskType", "o", "taskRect", "taskText", "oldParent", "Link", "excludes", "includes", "minTime", "maxTime", "startTime", "endTime", "dateFormat", "excludeRanges", "range", "getEstimatedTickCount", "every", "interval", "timeDiffMs", "intervalMs", "userAxisFormat", "axisFormat", "bottomXAxis", "axisBottom", "timeFormat", "resultTickInterval", "weekday", "domain", "estimatedTicks", "millisecond", "second", "timeMinute", "timeHour", "timeDay", "timeMonth", "topXAxis", "axisTop", "prevGap", "numOccurrences", "rows", "common_default", "dy", "svgLabel", "row", "tspan", "todayMarker", "todayG", "today", "todayLine", "arr", "hash", "l", "getStyles", "styles_default", "init_styles", "__esmMin", "__name", "options", "ganttDiagram_exports", "__export", "diagram", "init_ganttDiagram", "__esmMin", "init_gantt", "init_ganttDb", "init_ganttRenderer", "init_styles", "gantt_default", "ganttDb_default", "ganttRenderer_default", "styles_default", "parser", "init_infoParser", "__esmMin", "init_mermaid_parser_core", "init_logger", "__name", "input", "ast", "parse", "log", "package_default", "init_package", "__esmMin", "DEFAULT_INFO_DB", "getVersion", "db", "init_infoDb", "__esmMin", "init_package", "package_default", "__name", "selectSvgElement", "init_selectSvgElement", "__esmMin", "init_src", "init_diagramAPI", "__name", "id", "securityLevel", "getConfig", "root", "select_default", "doc", "draw", "renderer", "init_infoRenderer", "__esmMin", "init_logger", "init_selectSvgElement", "init_setupGraphViewbox", "__name", "text", "id", "version", "log", "svg", "selectSvgElement", "configureSvgSize", "infoDiagram_exports", "__export", "diagram", "init_infoDiagram", "__esmMin", "init_infoParser", "init_infoDb", "init_infoRenderer", "parser", "db", "renderer", "DEFAULT_PIE_CONFIG", "DEFAULT_PIE_DB", "sections", "showData", "config", "getConfig", "clear", "addSection", "getSections", "setShowData", "getShowData", "db", "init_pieDb", "__esmMin", "init_logger", "init_commonDb", "init_defaultConfig", "defaultConfig_default", "__name", "label", "value", "log", "toggle", "setDiagramTitle", "getDiagramTitle", "setAccTitle", "getAccTitle", "setAccDescription", "getAccDescription", "populateDb", "parser", "init_pieParser", "__esmMin", "init_mermaid_parser_core", "init_logger", "init_populateCommonDb", "init_pieDb", "__name", "ast", "db", "populateCommonDb", "input", "parse", "log", "getStyles", "pieStyles_default", "init_pieStyles", "__esmMin", "__name", "options", "createPieArcs", "draw", "renderer", "init_pieRenderer", "__esmMin", "init_src", "init_diagramAPI", "init_logger", "init_selectSvgElement", "init_setupGraphViewbox", "init_utils", "__name", "sections", "sum", "acc", "val", "pieData", "label", "value", "d", "a", "b", "pie_default", "text", "id", "_version", "diagObj", "log", "db", "globalConfig", "getConfig", "pieConfig", "cleanAndMerge", "MARGIN", "LEGEND_RECT_SIZE", "LEGEND_SPACING", "height", "pieWidth", "svg", "selectSvgElement", "group", "themeVariables", "outerStrokeWidth", "parseFontSize", "textPosition", "radius", "arcGenerator", "arc_default", "labelArcGenerator", "arcs", "myGeneratedColors", "section", "filteredArcs", "datum", "color", "ordinal", "allSectionData", "legend", "_datum", "index", "offset", "horizontal", "vertical", "longestTextWidth", "node", "totalWidth", "configureSvgSize", "pieDiagram_exports", "__export", "diagram", "init_pieDiagram", "__esmMin", "init_pieParser", "init_pieDb", "init_pieStyles", "init_pieRenderer", "parser", "db", "renderer", "pieStyles_default", "parser", "quadrant_default", "init_quadrant", "__esmMin", "o", "__name", "k", "v", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "$Vd", "$Ve", "$Vf", "$Vg", "$Vh", "$Vi", "$Vj", "$Vk", "$Vl", "$Vm", "$Vn", "$Vo", "$Vp", "$Vq", "$Vr", "$Vs", "$Vt", "$Vu", "$Vv", "$Vw", "$Vx", "$Vy", "$Vz", "$VA", "$VB", "$VC", "$VD", "$VE", "$VF", "$VG", "$VH", "$VI", "$VJ", "$VK", "$VL", "$VM", "$VN", "$VO", "$VP", "$VQ", "$VR", "$VS", "$VT", "$VU", "$VV", "$VW", "$VX", "$VY", "$VZ", "$V_", "$V$", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "args", "lexer", "sharedState", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "YYSTATE", "Parser", "defaultThemeVariables", "QuadrantBuilder", "init_quadrantBuilder", "__esmMin", "init_src", "init_defaultConfig", "init_logger", "init_theme_default", "getThemeVariables", "__name", "defaultConfig_default", "log", "data", "points", "className", "styles", "config", "themeConfig", "xAxisPosition", "showXAxis", "showYAxis", "showTitle", "xAxisSpaceCalculation", "xAxisSpace", "yAxisSpaceCalculation", "yAxisSpace", "titleSpaceCalculation", "titleSpace", "quadrantLeft", "quadrantTop", "quadrantWidth", "quadrantHeight", "quadrantHalfWidth", "quadrantHalfHeight", "spaceData", "quadrantSpace", "drawXAxisLabelsInMiddle", "drawYAxisLabelsInMiddle", "axisLabels", "quadrants", "quadrant", "xAxis", "linear", "yAxis", "point", "classStyles", "halfExternalBorderWidth", "calculatedSpace", "validateHexCode", "value", "validateNumber", "validateSizeInPixels", "InvalidStyleError", "init_utils", "__esmMin", "__name", "style", "type", "textSanitizer", "text", "sanitizeText", "config", "setQuadrant1Text", "textObj", "quadrantBuilder", "setQuadrant2Text", "setQuadrant3Text", "setQuadrant4Text", "setXAxisLeftText", "setXAxisRightText", "setYAxisTopText", "setYAxisBottomText", "parseStyles", "styles", "stylesObject", "style", "key", "value", "validateNumber", "InvalidStyleError", "validateHexCode", "validateSizeInPixels", "addPoint", "className", "x", "y", "addClass", "setWidth", "width", "setHeight", "height", "getQuadrantData", "getConfig", "themeVariables", "quadrantChartConfig", "getDiagramTitle", "clear", "quadrantDb_default", "init_quadrantDb", "__esmMin", "init_diagramAPI", "init_common", "init_commonDb", "init_quadrantBuilder", "init_utils", "__name", "QuadrantBuilder", "setAccTitle", "getAccTitle", "setDiagramTitle", "getAccDescription", "setAccDescription", "draw", "quadrantRenderer_default", "init_quadrantRenderer", "__esmMin", "init_src", "init_diagramAPI", "init_logger", "init_setupGraphViewbox", "__name", "txt", "id", "_version", "diagObj", "getDominantBaseLine", "horizontalPos", "getTextAnchor", "verticalPos", "getTransformation", "data", "conf", "getConfig", "log", "securityLevel", "sandboxElement", "select_default", "svg", "group", "width", "height", "configureSvgSize", "quadrantData", "quadrantsGroup", "borderGroup", "dataPointGroup", "labelGroup", "titleGroup", "quadrants", "dataPoints", "quadrantDiagram_exports", "__export", "diagram", "init_quadrantDiagram", "__esmMin", "init_quadrant", "init_quadrantDb", "init_quadrantRenderer", "quadrant_default", "quadrantDb_default", "quadrantRenderer_default", "__name", "parser", "xychart_default", "init_xychart", "__esmMin", "o", "__name", "k", "v", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "$Vd", "$Ve", "$Vf", "$Vg", "$Vh", "$Vi", "$Vj", "$Vk", "$Vl", "$Vm", "$Vn", "$Vo", "$Vp", "$Vq", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "args", "lexer", "sharedState", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "YYSTATE", "Parser", "isBarPlot", "data", "isBandAxisData", "isLinearAxisData", "init_interfaces", "__esmMin", "__name", "TextDimensionCalculatorWithFont", "init_textDimensionCalculator", "__esmMin", "init_createText", "parentGroup", "__name", "texts", "fontSize", "acc", "cur", "dimension", "elem", "t", "bbox", "computeDimensionOfText", "width", "height", "BaseAxis", "init_baseAxis", "__esmMin", "axisConfig", "title", "textDimensionCalculator", "axisThemeConfig", "__name", "range", "axisPosition", "tick", "availableSpace", "availableHeight", "spaceRequired", "maxPadding", "heightRequired", "availableWidth", "widthRequired", "point", "drawableElement", "x", "y", "BandAxis", "init_bandAxis", "__esmMin", "init_src", "init_logger", "init_baseAxis", "BaseAxis", "__name", "axisConfig", "axisThemeConfig", "categories", "title", "textDimensionCalculator", "band", "range", "log", "value", "LinearAxis", "init_linearAxis", "__esmMin", "init_src", "init_baseAxis", "BaseAxis", "__name", "axisConfig", "axisThemeConfig", "domain", "title", "textDimensionCalculator", "linear", "value", "getAxis", "data", "axisConfig", "axisThemeConfig", "tmpSVGGroup", "textDimensionCalculator", "TextDimensionCalculatorWithFont", "isBandAxisData", "BandAxis", "LinearAxis", "init_axis", "__esmMin", "init_interfaces", "init_textDimensionCalculator", "init_bandAxis", "init_linearAxis", "__name", "getChartTitleComponent", "chartConfig", "chartData", "chartThemeConfig", "tmpSVGGroup", "textDimensionCalculator", "TextDimensionCalculatorWithFont", "ChartTitle", "init_chartTitle", "__esmMin", "init_textDimensionCalculator", "__name", "point", "availableSpace", "titleDimension", "widthRequired", "heightRequired", "drawableElem", "LinePlot", "init_linePlot", "__esmMin", "init_src", "plotData", "xAxis", "yAxis", "orientation", "plotIndex", "__name", "finalData", "d", "path", "line_default", "BarPlot", "init_barPlot", "__esmMin", "barData", "boundingRect", "xAxis", "yAxis", "orientation", "plotIndex", "__name", "finalData", "d", "barWidth", "barWidthHalf", "data", "getPlotComponent", "chartConfig", "chartData", "chartThemeConfig", "BasePlot", "init_plot", "__esmMin", "init_linePlot", "init_barPlot", "__name", "xAxis", "yAxis", "point", "availableSpace", "drawableElem", "i", "plot", "linePlot", "LinePlot", "barPlot", "BarPlot", "Orchestrator", "init_orchestrator", "__esmMin", "init_axis", "init_chartTitle", "init_plot", "init_interfaces", "chartConfig", "chartData", "chartThemeConfig", "tmpSVGGroup", "getChartTitleComponent", "getPlotComponent", "getAxis", "__name", "availableWidth", "availableHeight", "plotX", "plotY", "chartWidth", "chartHeight", "spaceUsed", "p", "isBarPlot", "titleYEnd", "drawableElem", "component", "XYChartBuilder", "init_chartBuilder", "__esmMin", "init_orchestrator", "__name", "config", "chartData", "chartThemeConfig", "tmpSVGGroup", "Orchestrator", "getChartDefaultThemeConfig", "defaultThemeVariables", "getThemeVariables", "config", "getConfig", "cleanAndMerge", "getChartDefaultConfig", "defaultConfig_default", "getChartDefaultData", "textSanitizer", "text", "sanitizeText", "setTmpSVGG", "SVGG", "tmpSVGGroup", "setOrientation", "orientation", "xyChartConfig", "setXAxisTitle", "title", "xyChartData", "setXAxisRangeData", "min", "max", "hasSetXAxis", "setXAxisBand", "categories", "c", "setYAxisTitle", "setYAxisRangeData", "hasSetYAxis", "setYAxisRangeFromPlotData", "data", "minValue", "maxValue", "prevMinValue", "isLinearAxisData", "prevMaxValue", "transformDataWithoutCategory", "retData", "isBandAxisData", "i", "step", "getPlotColorFromPalette", "plotIndex", "plotColorPalette", "setLineData", "plotData", "setBarData", "getDrawableElem", "getDiagramTitle", "XYChartBuilder", "xyChartThemeConfig", "getChartThemeConfig", "getChartConfig", "getXYChartData", "clear", "xychartDb_default", "init_xychartDb", "__esmMin", "init_config", "init_defaultConfig", "init_theme_default", "init_utils", "init_common", "init_commonDb", "init_chartBuilder", "init_interfaces", "color", "__name", "setAccTitle", "getAccTitle", "setDiagramTitle", "getAccDescription", "setAccDescription", "draw", "xychartRenderer_default", "init_xychartRenderer", "__esmMin", "init_logger", "init_selectSvgElement", "init_setupGraphViewbox", "__name", "txt", "id", "_version", "diagObj", "db", "themeConfig", "chartConfig", "labelData", "data", "getDominantBaseLine", "horizontalPos", "getTextAnchor", "verticalPos", "getTextTransformation", "log", "svg", "selectSvgElement", "group", "background", "configureSvgSize", "shapes", "groups", "getGroup", "gList", "elem", "prefix", "i", "parent", "shape", "shapeGroup", "fitsHorizontally", "item", "fontSize", "label", "charWidthFactor", "validItems", "d", "candidateFontSizes", "uniformFontSize", "fitsInBar", "yOffset", "textWidth", "centerX", "leftEdge", "rightEdge", "horizontalFits", "verticalFits", "xychartDiagram_exports", "__export", "diagram", "init_xychartDiagram", "__esmMin", "init_xychart", "init_xychartDb", "init_xychartRenderer", "xychart_default", "xychartDb_default", "xychartRenderer_default", "parser", "requirementDiagram_default", "init_requirementDiagram", "__esmMin", "o", "__name", "k", "v", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "$Vd", "$Ve", "$Vf", "$Vg", "$Vh", "$Vi", "$Vj", "$Vk", "$Vl", "$Vm", "$Vn", "$Vo", "$Vp", "$Vq", "$Vr", "$Vs", "$Vt", "$Vu", "$Vv", "$Vw", "$Vx", "$Vy", "$Vz", "$VA", "$VB", "$VC", "$VD", "$VE", "$VF", "$VG", "$VH", "$VI", "$VJ", "$VK", "$VL", "$VM", "$VN", "$VO", "$VP", "$VQ", "$VR", "$VS", "$VT", "$VU", "$VV", "$VW", "$VX", "$VY", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "args", "lexer", "sharedState", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "YYSTATE", "Parser", "RequirementDB", "init_requirementDb", "__esmMin", "init_diagramAPI", "init_logger", "init_commonDb", "setAccTitle", "getAccTitle", "setAccDescription", "getAccDescription", "setDiagramTitle", "getDiagramTitle", "__name", "getConfig", "dir", "name", "type", "id", "text", "risk", "verifyMethod", "log", "docRef", "src", "dst", "clear", "ids", "styles", "node", "s", "classNames", "_class", "style", "styleClass", "newStyle", "value", "config", "nodes", "edges", "requirement", "element", "relation", "counter", "isContains", "edge", "getStyles", "styles_default", "init_styles", "__esmMin", "__name", "options", "requirementRenderer_exports", "__export", "draw", "init_requirementRenderer", "__esmMin", "init_diagramAPI", "init_logger", "init_insertElementsForSize", "init_render", "init_setupViewPortForSVG", "init_utils", "__name", "text", "id", "_version", "diag", "log", "securityLevel", "conf", "layout", "getConfig", "data4Layout", "svg", "getDiagramElement", "getRegisteredLayoutAlgorithm", "render", "padding", "utils_default", "setupViewPortForSVG", "requirementDiagram_exports", "__export", "diagram", "init_requirementDiagram", "__esmMin", "init_requirementDb", "init_styles", "init_requirementRenderer", "requirementDiagram_default", "RequirementDB", "requirementRenderer_exports", "styles_default", "parser", "sequenceDiagram_default", "init_sequenceDiagram", "__esmMin", "o", "__name", "k", "v", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "$Vd", "$Ve", "$Vf", "$Vg", "$Vh", "$Vi", "$Vj", "$Vk", "$Vl", "$Vm", "$Vn", "$Vo", "$Vp", "$Vq", "$Vr", "$Vs", "$Vt", "$Vu", "$Vv", "$Vw", "$Vx", "$Vy", "$Vz", "$VA", "$VB", "$VC", "$VD", "$VE", "$VF", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "args", "lexer", "sharedState", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "YYSTATE", "Parser", "LINETYPE", "ARROWTYPE", "PLACEMENT", "PARTICIPANT_TYPE", "SequenceDB", "init_sequenceDb", "__esmMin", "init_diagramAPI", "init_js_yaml", "init_logger", "init_imperativeState", "init_common", "init_commonDb", "ImperativeState", "setAccTitle", "setAccDescription", "setDiagramTitle", "getAccTitle", "getAccDescription", "getDiagramTitle", "getConfig", "__name", "data", "id", "name", "description", "type", "metadata", "assignedBox", "doc", "yamlData", "load", "JSON_SCHEMA", "old", "prevActorInRecords", "part", "i", "count", "idFrom", "idTo", "message", "answer", "messageType", "activate", "error", "b", "wrapSetting", "text", "wrap", "clear", "str", "trimmedStr", "cleanedText", "log", "match", "color", "title", "style", "sanitizeText", "actor", "placement", "note", "actors", "actorId", "sanitizedText", "links", "e", "sep", "label", "link", "key", "properties", "elem", "details", "param", "item", "getStyles", "styles_default", "init_styles", "__esmMin", "__name", "options", "import_sanitize_url", "ACTOR_TYPE_WIDTH", "TOP_ACTOR_CLASS", "BOTTOM_ACTOR_CLASS", "ACTOR_BOX_CLASS", "ACTOR_MAN_FIGURE_CLASS", "drawRect", "drawPopup", "popupMenuToggle", "drawKatex", "drawText", "drawLabel", "actorCnt", "fixLifeLineHeights", "drawActorTypeParticipant", "drawActorTypeCollections", "drawActorTypeQueue", "drawActorTypeControl", "drawActorTypeEntity", "drawActorTypeDatabase", "drawActorTypeBoundary", "drawActorTypeActor", "drawActor", "drawBox", "anchorElement", "drawActivation", "drawLoop", "drawBackgroundRect", "insertDatabaseIcon", "insertComputerIcon", "insertClockIcon", "insertArrowHead", "insertArrowFilledHead", "insertSequenceNumber", "insertArrowCrossHead", "getTextObj", "getNoteRect", "_drawTextCandidateFunc", "_drawMenuItemTextCandidateFunc", "svgDraw_default", "init_svgDraw", "__esmMin", "init_config", "init_utils", "init_common", "init_svgDrawCommon", "__name", "elem", "rectData", "actor", "minMenuWidth", "textAttrs", "forceMenus", "links", "displayValue", "g", "actorClass", "menuWidth", "rectElem", "linkY", "key", "linkElem", "sanitizedLink", "popId", "textData", "msgModel", "textElem", "linesSanitized", "renderKatexSanitized", "getConfig", "dim", "rectDim", "startx", "stopx", "starty", "temp", "prevTextHeight", "textHeight", "lines", "common_default", "_textFontSize", "_textFontSizePx", "parseFontSize", "textElems", "dy", "yfunc", "i", "line", "text", "ZERO_WIDTH_SPACE", "span", "txtObject", "genPoints", "x", "y", "width", "height", "cut", "polygon", "diagram", "actors", "actorKeys", "conf", "actorKey", "actorDOM", "isFooter", "actorY", "center", "centerY", "boxplusLineGroup", "rect", "cssclass", "iconSrc", "drawEmbeddedImage", "drawImage", "hasKatex", "bounds", "offset", "shadowRect", "ry", "rx", "cylinderGroup", "cylinderArc", "iconX", "iconY", "lastPath", "actElem", "cssClass", "cx", "cy", "r", "w", "h", "d", "radius", "circle", "box", "verticalPos", "actorActivations", "loopModel", "labelText", "boxMargin", "boxTextMargin", "labelBoxHeight", "labelBoxWidth", "fontFamily", "fontSize", "fontWeight", "drawLoopLine", "stopy", "item", "txt", "idx", "sectionHeight", "te", "acc", "curr", "byText", "content", "_setTextAttrs", "byTspan", "actorFontSize", "actorFontFamily", "actorFontWeight", "_actorFontSize", "_actorFontSizePx", "byFo", "s", "byKatex", "calculateMathMLDimensions", "toText", "fromTextAttrsDict", "boundMessage", "_diagram", "msgModel", "bounds", "startx", "stopx", "message", "lines", "common_default", "isKatexMsg", "hasKatex", "textDims", "calculateMathMLDimensions", "getConfig", "utils_default", "messageFont", "conf", "lineHeight", "lineStartY", "totalOffset", "textWidth", "dx", "adjustLoopHeightForWrap", "loopWidths", "msg", "preMargin", "postMargin", "addLoopFn", "heightAdjust", "loopWidth", "textConf", "log", "adjustCreatedDestroyedData", "index", "actors", "createdActors", "destroyedActors", "receiverAdjustment", "actor", "adjustment", "__name", "senderAdjustment", "actorArray", "PARTICIPANT_TYPE", "ACTOR_TYPE_WIDTH", "getMaxMessageWidthPerActor", "messages", "diagObj", "maxMessageWidthPerActor", "isNote", "isMessage", "textFont", "noteFont", "wrappedMessage", "messageWidth", "calculateActorMargins", "actorToMessageWidth", "boxes", "maxHeight", "prop", "actorFont", "actDims", "actorKey", "nextActor", "actorWidth", "maxBoxHeight", "box", "totalWidth", "total", "aKey", "standardBoxPadding", "boxMsgDimensions", "minWidth", "missing", "drawNote", "drawMessage", "addActorRenderingData", "drawActors", "drawActorsPopup", "setConf", "actorActivations", "activationBounds", "draw", "getRequiredPopupWidth", "buildNoteModel", "buildMessageModel", "calculateLoopBounds", "sequenceRenderer_default", "init_sequenceRenderer", "__esmMin", "init_src", "init_svgDraw", "init_logger", "init_common", "init_svgDrawCommon", "init_diagramAPI", "init_assignWithDepth", "init_utils", "init_setupGraphViewbox", "init_sequenceDb", "it", "acc", "h", "boxModel", "actorModel", "loopModel", "noteModel", "obj", "key", "val", "fun", "starty", "stopy", "_self", "cnt", "updateFn", "type", "item", "n", "_startx", "_stopx", "_starty", "_stopy", "diagram", "actorRect", "stackedSize", "x", "svgDraw_default", "lastActorActivationIdx", "activation", "title", "fill", "loop", "bump", "elem", "rect", "getNoteRect", "g", "rectElem", "textObj", "getTextObj", "textElem", "drawKatex", "drawText", "textHeight", "te", "curr", "cnf", "sequenceIndex", "sequenceVisible", "line", "url", "getUrl", "actorKeys", "verticalPos", "isFooter", "prevWidth", "prevMargin", "prevBox", "height", "doc", "maxWidth", "minMenuWidth", "menuDimensions", "assignWithDepth_default", "actorObj", "activations", "left", "right", "_text", "id", "_version", "securityLevel", "sequence", "sandboxElement", "select_default", "root", "hasBoxes", "hasBoxTitles", "newActors", "activeEnd", "activationData", "sequenceIndexStep", "messagesToDraw", "backgrounds", "e", "fixLifeLineHeights", "boxPadding", "requiredBoxSize", "boxHeight", "boxWidth", "width", "configureSvgSize", "extraVertForTitle", "requiredPopupWidth", "labelWidth", "fromActor", "toActor", "shouldWrap", "textDimensions", "fromLeft", "fromRight", "toLeft", "toRight", "isArrowToRight", "isArrowToActivation", "adjustValue", "value", "allBounds", "boundedWidth", "msgDims", "_maxWidthPerActor", "loops", "stack", "current", "toAdd", "a", "stk", "from", "to", "sequenceDiagram_exports", "__export", "diagram", "init_sequenceDiagram", "__esmMin", "init_sequenceDb", "init_styles", "init_diagramAPI", "init_sequenceRenderer", "sequenceDiagram_default", "SequenceDB", "sequenceRenderer_default", "styles_default", "__name", "cnf", "setConfig", "parser", "classDiagram_default", "init_classDiagram", "__esmMin", "o", "__name", "k", "v", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "$Vd", "$Ve", "$Vf", "$Vg", "$Vh", "$Vi", "$Vj", "$Vk", "$Vl", "$Vm", "$Vn", "$Vo", "$Vp", "$Vq", "$Vr", "$Vs", "$Vt", "$Vu", "$Vv", "$Vw", "$Vx", "$Vy", "$Vz", "$VA", "$VB", "$VC", "$VD", "$VE", "$VF", "$VG", "$VH", "$VI", "$VJ", "$VK", "$VL", "$VM", "$VN", "$VO", "$VP", "$VQ", "$VR", "$VS", "$VT", "$VU", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "args", "lexer", "sharedState", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "YYSTATE", "Parser", "visibilityValues", "ClassMember", "init_classTypes", "__esmMin", "init_diagramAPI", "init_common", "__name", "input", "memberType", "sanitizedInput", "sanitizeText", "getConfig", "displayText", "parseGenericTypes", "cssStyle", "potentialClassifier", "match", "detectedVisibility", "lastChar", "length", "firstChar", "combinedText", "MERMAID_DOM_ID_PREFIX", "classCounter", "sanitizeText", "ClassDB", "init_classDb", "__esmMin", "init_src", "init_logger", "init_diagramAPI", "init_common", "init_utils", "init_commonDb", "init_classTypes", "__name", "txt", "common_default", "getConfig", "element", "tooltipElem", "select_default", "event", "el", "rect", "setAccTitle", "getAccTitle", "setAccDescription", "getAccDescription", "setDiagramTitle", "getDiagramTitle", "_id", "id", "genericType", "className", "split", "label", "type", "name", "classId", "classInterface", "clear", "classRelation", "log", "invalidTypes", "annotation", "validatedClassName", "member", "theClass", "memberString", "ClassMember", "members", "text", "note", "ids", "classNode", "style", "styleClass", "s", "newStyle", "value", "tooltip", "namespace", "linkStr", "target", "config", "utils_default", "functionName", "functionArgs", "_domId", "domId", "elemId", "argList", "i", "item", "elem", "fun", "dir", "classNames", "styles", "thisClass", "marker", "nodes", "edges", "namespaceKey", "node", "classKey", "cnt", "noteNode", "noteClassId", "edge", "_interface", "interfaceNode", "getEdgeId", "getStyles", "styles_default", "init_styles", "__esmMin", "init_globalStyles", "__name", "options", "getIconStyles", "getDir", "getClasses", "draw", "classRenderer_v3_unified_default", "init_classRenderer_v3_unified", "__esmMin", "init_diagramAPI", "init_logger", "init_insertElementsForSize", "init_render", "init_setupViewPortForSVG", "init_utils", "__name", "parsedItem", "defaultDir", "dir", "parsedItemDoc", "text", "diagramObj", "id", "_version", "diag", "log", "securityLevel", "conf", "layout", "getConfig", "data4Layout", "svg", "getDiagramElement", "getRegisteredLayoutAlgorithm", "render", "padding", "utils_default", "setupViewPortForSVG", "classDiagram_exports", "__export", "diagram", "init_classDiagram", "__esmMin", "init_classDb", "init_styles", "init_classRenderer_v3_unified", "classDiagram_default", "ClassDB", "classRenderer_v3_unified_default", "styles_default", "__name", "cnf", "classDiagram_v2_exports", "__export", "diagram", "init_classDiagram_v2", "__esmMin", "init_classDiagram", "init_classDb", "init_styles", "init_classRenderer_v3_unified", "classDiagram_default", "ClassDB", "classRenderer_v3_unified_default", "styles_default", "__name", "cnf", "parser", "stateDiagram_default", "init_stateDiagram", "__esmMin", "o", "__name", "k", "v", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "$Vd", "$Ve", "$Vf", "$Vg", "$Vh", "$Vi", "$Vj", "$Vk", "$Vl", "$Vm", "$Vn", "$Vo", "$Vp", "$Vq", "$Vr", "$Vs", "$Vt", "$Vu", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "stateStmt", "relDescription", "id", "description", "parts", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "args", "lexer", "sharedState", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "YYSTATE", "Parser", "STMT_STATE", "STMT_ROOT", "STMT_RELATION", "STMT_CLASSDEF", "STMT_STYLEDEF", "STMT_APPLYCLASS", "DEFAULT_STATE_TYPE", "DIVIDER_TYPE", "G_EDGE_STYLE", "G_EDGE_ARROWHEADSTYLE", "G_EDGE_LABELTYPE", "G_EDGE_THICKNESS", "SHAPE_STATE", "SHAPE_STATE_WITH_DESC", "SHAPE_START", "SHAPE_END", "SHAPE_DIVIDER", "SHAPE_GROUP", "SHAPE_NOTE", "SHAPE_NOTEGROUP", "CSS_DIAGRAM", "CSS_STATE", "CSS_DIAGRAM_STATE", "CSS_EDGE", "CSS_NOTE", "CSS_NOTE_EDGE", "CSS_EDGE_NOTE_EDGE", "CSS_DIAGRAM_NOTE", "CSS_CLUSTER", "CSS_DIAGRAM_CLUSTER", "CSS_CLUSTER_ALT", "CSS_DIAGRAM_CLUSTER_ALT", "PARENT", "NOTE", "DOMID_STATE", "DOMID_TYPE_SPACER", "NOTE_ID", "PARENT_ID", "init_stateCommon", "__esmMin", "stateDomId", "itemId", "counter", "type", "typeSpacer", "DOMID_TYPE_SPACER", "typeStr", "DOMID_STATE", "insertOrUpdateNode", "nodes", "nodeData", "classes", "cssClass", "classDef", "existingNodeData", "node", "getClassesFromDbInfo", "dbInfoItem", "getStylesFromDbInfo", "nodeDb", "graphItemCount", "setupDoc", "getDir", "dataFetcher", "reset", "init_dataFetcher", "__esmMin", "init_diagramAPI", "init_logger", "init_common", "init_stateCommon", "__name", "parentParsedItem", "doc", "diagramStates", "edges", "altFlag", "look", "log", "item", "STMT_STATE", "DEFAULT_STATE_TYPE", "STMT_RELATION", "edgeData", "G_EDGE_STYLE", "common_default", "getConfig", "G_EDGE_ARROWHEADSTYLE", "G_EDGE_LABELTYPE", "G_EDGE_THICKNESS", "CSS_EDGE", "parsedItem", "defaultDir", "dir", "parsedItemDoc", "parent", "dbState", "classStr", "style", "config", "shape", "SHAPE_STATE", "SHAPE_START", "SHAPE_END", "CSS_DIAGRAM_STATE", "newNode", "SHAPE_STATE_WITH_DESC", "SHAPE_GROUP", "DIVIDER_TYPE", "SHAPE_DIVIDER", "CSS_DIAGRAM_CLUSTER", "CSS_DIAGRAM_CLUSTER_ALT", "noteData", "SHAPE_NOTE", "CSS_DIAGRAM_NOTE", "NOTE_ID", "NOTE", "parentNodeId", "PARENT_ID", "groupData", "SHAPE_NOTEGROUP", "PARENT", "from", "to", "CSS_EDGE_NOTE_EDGE", "getDir", "getClasses", "draw", "stateRenderer_v3_unified_default", "init_stateRenderer_v3_unified", "__esmMin", "init_diagramAPI", "init_logger", "init_insertElementsForSize", "init_render", "init_setupViewPortForSVG", "init_utils", "init_stateCommon", "__name", "parsedItem", "defaultDir", "dir", "parsedItemDoc", "text", "diagramObj", "id", "_version", "diag", "log", "securityLevel", "conf", "layout", "getConfig", "data4Layout", "svg", "getDiagramElement", "render", "padding", "linkInfo", "key", "stateId", "allNodes", "matchedElem", "g", "parent", "a", "cleanedUrl", "tooltip", "err", "utils_default", "setupViewPortForSVG", "CSS_DIAGRAM", "CONSTANTS", "newClassesList", "newDoc", "clone", "StateDB", "init_stateDb", "__esmMin", "init_diagramAPI", "init_logger", "init_utils", "init_common", "init_commonDb", "init_dataFetcher", "init_stateRenderer_v3_unified", "init_stateCommon", "__name", "o", "version", "getAccTitle", "setAccTitle", "getAccDescription", "setAccDescription", "setDiagramTitle", "getDiagramTitle", "statements", "item", "STMT_STATE", "STMT_RELATION", "STMT_CLASSDEF", "STMT_STYLEDEF", "STMT_APPLYCLASS", "diagramStates", "config", "getConfig", "reset", "dataFetcher", "node", "ids", "styles", "id", "state", "trimmedId", "log", "parent", "first", "STMT_ROOT", "doc", "currentDoc", "stmt", "DIVIDER_TYPE", "newNode", "generateId", "docNode", "type", "DEFAULT_STATE_TYPE", "descr", "note", "classes", "textStyles", "des", "doc2", "common_default", "cssClass", "style", "textStyle", "saveCommon", "clear", "stateId", "url", "tooltip", "item1", "item2", "relationTitle", "id1", "type1", "id2", "type2", "title", "theState", "_descr", "label", "styleAttributes", "foundClass", "attrib", "fixedAttrib", "newStyle2", "itemIds", "cssClassName", "foundState", "itemId", "styleText", "dir", "str", "getDir", "getStyles", "styles_default", "init_styles", "__esmMin", "__name", "options", "drawStartState", "drawDivider", "drawSimpleState", "drawDescrState", "addTitleAndBox", "drawEndState", "drawForkJoinState", "_drawLongText", "drawNote", "drawState", "edgeCount", "drawEdge", "init_shapes", "__esmMin", "init_src", "init_stateDb", "init_utils", "init_common", "init_diagramAPI", "init_logger", "__name", "g", "getConfig", "stateDef", "state", "classBox", "addTspan", "textEl", "txt", "isFirst", "tSpan", "titleBox", "titleHeight", "description", "isSecond", "descr", "descrLine", "descrBox", "width", "altBkg", "pad", "dblPad", "orgBox", "orgWidth", "orgX", "title", "titleWidth", "startX", "graphBox", "lineY", "height", "tmp", "_text", "x", "y", "textHeight", "textElem", "text", "lines", "common_default", "tHeight", "line", "span", "textBounds", "note", "rectElem", "textWidth", "elem", "id", "stateInfo", "stateBox", "path", "relation", "getRelationType", "type", "StateDB", "p", "lineData", "lineFunction", "line_default", "d", "basis_default", "svgPath", "url", "getUrl", "label", "utils_default", "rows", "titleRows", "maxWidth", "minX", "i", "boundsTmp", "log", "boxHeight", "heightAdj", "bounds", "conf", "transformationLog", "setConf", "insertMarkers", "draw", "getLabelWidth", "renderDoc", "stateRenderer_default", "init_stateRenderer", "__esmMin", "init_src", "init_dagre", "init_graphlib", "init_logger", "init_common", "init_shapes", "init_diagramAPI", "init_setupGraphViewbox", "__name", "elem", "text", "id", "_version", "diagObj", "getConfig", "securityLevel", "sandboxElement", "select_default", "root", "doc", "log", "diagram", "rootDoc", "padding", "bounds", "width", "height", "svgWidth", "configureSvgSize", "parentId", "altBkg", "domDocument", "graph", "Graph", "i", "edgeFreeDoc", "states", "relations", "keys", "first", "key", "stateDef", "node", "sub", "addTitleAndBox", "boxBounds", "drawState", "noteDef", "note", "cnt", "relation", "common_default", "layout", "svgElem", "v", "divider", "parent", "pWidth", "pShift", "stateBox", "e", "drawEdge", "stateInfo", "stateDiagram_exports", "__export", "diagram", "init_stateDiagram", "__esmMin", "init_stateDb", "init_styles", "init_stateRenderer", "stateDiagram_default", "StateDB", "stateRenderer_default", "styles_default", "__name", "cnf", "stateDiagram_v2_exports", "__export", "diagram", "init_stateDiagram_v2", "__esmMin", "init_stateDiagram", "init_stateDb", "init_styles", "init_stateRenderer_v3_unified", "stateDiagram_default", "StateDB", "stateRenderer_v3_unified_default", "styles_default", "__name", "cnf", "parser", "journey_default", "init_journey", "__esmMin", "o", "__name", "k", "v", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "args", "lexer", "sharedState", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "YYSTATE", "Parser", "currentSection", "sections", "tasks", "rawTasks", "clear", "addSection", "getSections", "getTasks", "updateActors", "addTask", "addTaskOrg", "compileTasks", "getActors", "journeyDb_default", "init_journeyDb", "__esmMin", "init_diagramAPI", "init_commonDb", "__name", "txt", "allItemsProcessed", "maxDepth", "iterationCount", "tempActors", "task", "descr", "taskData", "pieces", "score", "peeps", "peopleList", "s", "rawTask", "newTask", "compileTask", "pos", "allProcessed", "i", "getConfig", "setDiagramTitle", "getDiagramTitle", "setAccTitle", "getAccTitle", "setAccDescription", "getAccDescription", "getStyles", "styles_default", "init_styles", "__esmMin", "init_globalStyles", "__name", "options", "getIconStyles", "drawRect", "drawFace", "drawCircle", "drawText", "drawLabel", "drawSection", "taskCount", "drawTask", "drawBackgroundRect", "_drawTextCandidateFunc", "initGraphics", "svgDraw_default", "init_svgDraw", "__esmMin", "init_src", "init_svgDrawCommon", "__name", "elem", "rectData", "element", "faceData", "circleElement", "face", "smile", "arc", "arc_default", "sad", "ambivalent", "circleData", "textData", "txtObject", "genPoints", "x", "y", "width", "height", "cut", "polygon", "section", "conf", "g", "rect", "getNoteRect", "task", "center", "xPos", "person", "colour", "circle", "bounds", "byText", "content", "textAttrs", "text", "_setTextAttrs", "byTspan", "taskFontSize", "taskFontFamily", "lines", "i", "dy", "byFo", "body", "toText", "fromTextAttrsDict", "key", "graphics", "drawActorLegend", "diagram", "conf", "getConfig", "maxLabelWidth", "maxWidth", "yPos", "actors", "person", "colour", "circleData", "svgDraw_default", "measureText", "fullTextWidth", "lines", "words", "currentLine", "word", "testLine", "brokenWord", "char", "line", "index", "labelData", "lineWidth", "setConf", "leftMargin", "draw", "bounds", "fills", "textColours", "drawTasks", "journeyRenderer_default", "init_journeyRenderer", "__esmMin", "init_src", "init_svgDraw", "init_diagramAPI", "init_setupGraphViewbox", "__name", "cnf", "key", "text", "id", "version", "diagObj", "configObject", "titleColor", "titleFontSize", "titleFontFamily", "securityLevel", "sandboxElement", "select_default", "root", "tasks", "title", "actorNames", "member", "actorPos", "actorName", "box", "height", "width", "configureSvgSize", "extraVertForTitle", "obj", "val", "fun", "startx", "starty", "stopx", "stopy", "_self", "cnt", "updateFn", "type", "item", "n", "_startx", "_stopx", "_starty", "_stopy", "bump", "verticalPos", "lastSection", "sectionVHeight", "taskPos", "sectionNumber", "fill", "num", "i", "task", "taskInSectionCount", "currentSection", "taskIndex", "section", "taskActors", "acc", "journeyDiagram_exports", "__export", "diagram", "init_journeyDiagram", "__esmMin", "init_journey", "init_journeyDb", "init_styles", "init_journeyRenderer", "journey_default", "journeyDb_default", "journeyRenderer_default", "styles_default", "__name", "cnf", "parser", "timeline_default", "init_timeline", "__esmMin", "o", "__name", "k", "v", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "args", "lexer", "sharedState", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "YYSTATE", "Parser", "timelineDb_exports", "__export", "addEvent", "addSection", "addTask", "addTaskOrg", "clear", "timelineDb_default", "getCommonDb", "getSections", "getTasks", "currentSection", "currentTaskId", "sections", "tasks", "rawTasks", "compileTasks", "init_timelineDb", "__esmMin", "init_commonDb", "__name", "commonDb_exports", "txt", "allItemsProcessed", "maxDepth", "iterationCount", "period", "length", "event", "rawTask", "task", "descr", "newTask", "compileTask", "pos", "allProcessed", "i", "wrap", "text", "width", "select_default", "words", "word", "line", "lineHeight", "y", "dy", "tspan", "j", "MAX_SECTIONS", "drawRect", "drawFace", "drawCircle", "drawText", "drawLabel", "drawSection", "taskCount", "drawTask", "drawBackgroundRect", "getTextObj", "getNoteRect", "_drawTextCandidateFunc", "initGraphics", "drawNode", "getVirtualNodeHeight", "defaultBkg", "svgDraw_default", "init_svgDraw", "__esmMin", "init_src", "__name", "elem", "rectData", "rectElem", "element", "faceData", "circleElement", "face", "smile", "arc", "arc_default", "sad", "ambivalent", "circleData", "textData", "nText", "textElem", "span", "txtObject", "genPoints", "x", "height", "cut", "polygon", "section", "conf", "g", "rect", "task", "center", "bounds", "byText", "content", "textAttrs", "colour", "_setTextAttrs", "byTspan", "taskFontSize", "taskFontFamily", "lines", "i", "byFo", "body", "toText", "fromTextAttrsDict", "key", "graphics", "node", "fullSection", "nodeElem", "bkgElem", "bbox", "fontSize", "draw", "drawTasks", "drawEvents", "timelineRenderer_default", "init_timelineRenderer", "__esmMin", "init_src", "init_svgDraw", "init_logger", "init_diagramAPI", "init_setupGraphViewbox", "__name", "text", "id", "version", "diagObj", "conf", "getConfig", "LEFT_MARGIN", "log", "securityLevel", "sandboxElement", "select_default", "svg", "tasks", "title", "svgDraw_default", "sections", "maxSectionHeight", "maxTaskHeight", "depthY", "sectionBeginY", "masterX", "masterY", "sectionNumber", "hasSections", "section", "sectionNode", "sectionHeight", "maxEventCount", "maxEventLineLength", "i", "task", "taskNode", "taskHeight", "maxEventLineLengthTemp", "event", "eventNode", "tasksForSection", "sectionNodeWrapper", "node", "box", "setupGraphViewbox", "diagram", "sectionColor", "isWithoutSections", "taskWrapper", "lineWrapper", "lineLength", "events", "maxEventHeight", "eventBeginY", "eventWrapper", "eventHeight", "genSections", "getStyles", "styles_default", "init_styles", "__esmMin", "init_dist", "__name", "options", "sections", "i", "is_dark_default", "lighten_default", "darken_default", "sw", "timeline_definition_exports", "__export", "diagram", "init_timeline_definition", "__esmMin", "init_timeline", "init_timelineDb", "init_timelineRenderer", "init_styles", "timelineDb_exports", "timelineRenderer_default", "timeline_default", "styles_default", "parser", "mindmap_default", "init_mindmap", "__esmMin", "o", "__name", "k", "v", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "$Vd", "$Ve", "$Vf", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "args", "lexer", "sharedState", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "YYSTATE", "Parser", "unsafeStringify", "arr", "offset", "byteToHex", "init_stringify", "__esmMin", "i", "__name", "rng", "getRandomValues", "rnds8", "init_rng", "__esmMin", "__name", "randomUUID", "native_default", "init_native", "__esmMin", "v4", "options", "buf", "offset", "native_default", "rnds", "rng", "unsafeStringify", "v4_default", "init_v4", "__esmMin", "init_native", "init_rng", "init_stringify", "__name", "init_esm_browser", "__esmMin", "init_v4", "nodeType", "MindmapDB", "init_mindmapDb", "__esmMin", "init_diagramAPI", "init_esm_browser", "init_common", "init_logger", "init_defaultConfig", "init_config", "__name", "level", "i", "id", "descr", "type", "log", "isRoot", "conf", "getConfig", "padding", "defaultConfig_default", "node", "sanitizeText", "parent", "startStr", "endStr", "element", "decoration", "config", "sectionNumber", "index", "child", "childSectionNumber", "processedNodes", "cssClasses", "classes", "getShapeFromType", "processedNode", "edges", "edgeClasses", "edgeDepth", "edge", "mindmapRoot", "hasUserDefinedLayout", "getUserDefinedConfig", "finalConfig", "processedEdges", "shapes", "v4_default", "draw", "mindmapRenderer_default", "init_mindmapRenderer", "__esmMin", "init_logger", "init_insertElementsForSize", "init_render", "init_setupViewPortForSVG", "init_defaultConfig", "__name", "text", "id", "_version", "diagObj", "log", "db", "data4Layout", "svg", "getDiagramElement", "getRegisteredLayoutAlgorithm", "node", "render", "setupViewPortForSVG", "defaultConfig_default", "genSections", "getStyles", "styles_default", "init_styles", "__esmMin", "init_dist", "__name", "options", "sections", "i", "is_dark_default", "lighten_default", "darken_default", "sw", "mindmap_definition_exports", "__export", "diagram", "init_mindmap_definition", "__esmMin", "init_mindmap", "init_mindmapDb", "init_mindmapRenderer", "init_styles", "MindmapDB", "mindmapRenderer_default", "mindmap_default", "styles_default", "parser", "kanban_default", "init_kanban", "__esmMin", "o", "__name", "k", "v", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "$Vd", "$Ve", "$Vf", "$Vg", "$Vh", "$Vi", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "args", "lexer", "sharedState", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "YYSTATE", "re", "Parser", "nodes", "sections", "cnt", "elements", "clear", "getSection", "getSections", "getData", "addNode", "nodeType", "getType", "setElementForId", "decorateNode", "type2Str", "getLogger", "getElementById", "db", "kanbanDb_default", "init_kanbanDb", "__esmMin", "init_diagramAPI", "init_common", "init_logger", "init_defaultConfig", "init_js_yaml", "__name", "level", "sectionLevel", "lastSection", "i", "edges", "_nodes", "conf", "getConfig", "section", "node", "sanitizeText", "children", "n", "item", "childNode", "id", "descr", "type", "shapeData", "padding", "defaultConfig_default", "yamlData", "doc", "load", "JSON_SCHEMA", "startStr", "endStr", "log", "element", "decoration", "config", "draw", "kanbanRenderer_default", "init_kanbanRenderer", "__esmMin", "init_diagramAPI", "init_logger", "init_selectSvgElement", "init_setupGraphViewbox", "init_defaultConfig", "init_clusters", "init_nodes", "__name", "text", "id", "_version", "diagObj", "log", "data4Layout", "conf", "getConfig", "svg", "selectSvgElement", "sectionsElem", "nodesElem", "sections", "node", "cnt", "padding", "sectionObjects", "maxLabelHeight", "section", "WIDTH", "sectionObj", "insertCluster", "i", "top", "y", "sectionItems", "item", "bbox", "insertNode", "positionNode", "rect", "height", "setupGraphViewbox", "defaultConfig_default", "genSections", "getStyles", "styles_default", "init_styles", "__esmMin", "init_dist", "init_globalStyles", "__name", "options", "sections", "i", "is_dark_default", "lighten_default", "darken_default", "adjuster", "color", "level", "sw", "getIconStyles", "kanban_definition_exports", "__export", "diagram", "init_kanban_definition", "__esmMin", "init_kanban", "init_kanbanDb", "init_kanbanRenderer", "init_styles", "kanbanDb_default", "kanbanRenderer_default", "kanban_default", "styles_default", "parser", "sankey_default", "init_sankey", "__esmMin", "o", "__name", "k", "v", "l", "$V0", "$V1", "$V2", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "source", "target", "value", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "args", "lexer", "sharedState", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "YYSTATE", "Parser", "links", "nodes", "nodesMap", "clear", "SankeyLink", "addLink", "SankeyNode", "findOrCreateNode", "getNodes", "getLinks", "getGraph", "sankeyDB_default", "init_sankeyDB", "__esmMin", "init_diagramAPI", "init_common", "init_commonDb", "__name", "source", "target", "value", "ID", "common_default", "getConfig", "node", "link", "getAccTitle", "setAccTitle", "getAccDescription", "setAccDescription", "getDiagramTitle", "setDiagramTitle", "max", "values", "valueof", "value", "index", "init_max", "__esmMin", "__name", "min", "values", "valueof", "value", "index", "init_min", "__esmMin", "__name", "sum", "values", "valueof", "value", "index", "init_sum", "__esmMin", "__name", "init_src", "__esmMin", "init_max", "init_min", "init_sum", "targetDepth", "d", "left", "node", "right", "n", "justify", "center", "min", "init_align", "__esmMin", "init_src", "__name", "constant", "x", "init_constant", "__esmMin", "__name", "ascendingSourceBreadth", "a", "b", "ascendingBreadth", "ascendingTargetBreadth", "value", "d", "defaultId", "defaultNodes", "graph", "defaultLinks", "find", "nodeById", "id", "node", "computeLinkBreadths", "nodes", "y0", "y1", "link", "Sankey", "x0", "x1", "dx", "dy", "py", "align", "justify", "sort", "linkSort", "links", "iterations", "sankey", "computeNodeLinks", "computeNodeValues", "computeNodeDepths", "computeNodeHeights", "computeNodeBreadths", "__name", "_", "constant", "i", "source", "target", "sourceLinks", "targetLinks", "sum", "n", "current", "next", "x", "computeNodeLayers", "max", "kx", "columns", "column", "initializeNodeBreadths", "ky", "min", "c", "y", "reorderLinks", "alpha", "beta", "relaxRightToLeft", "relaxLeftToRight", "w", "v", "targetTop", "reorderNodeLinks", "resolveCollisions", "sourceTop", "subject", "resolveCollisionsBottomToTop", "resolveCollisionsTopToBottom", "width", "init_sankey", "__esmMin", "init_src", "init_align", "init_constant", "Path", "path", "pi", "tau", "epsilon", "tauEpsilon", "path_default", "init_path", "__esmMin", "__name", "x", "y", "x1", "y1", "x2", "y2", "r", "x0", "y0", "x21", "y21", "x01", "y01", "l01_2", "x20", "y20", "l21_2", "l20_2", "l21", "l01", "l", "t01", "t21", "a0", "a1", "ccw", "dx", "dy", "cw", "da", "w", "h", "init_src", "__esmMin", "init_path", "constant_default", "x", "__name", "init_constant", "__esmMin", "x", "p", "y", "init_point", "__esmMin", "__name", "slice", "init_array", "__esmMin", "linkSource", "d", "linkTarget", "link", "curve", "source", "target", "x", "y", "context", "buffer", "argv", "slice", "s", "t", "path_default", "__name", "_", "constant_default", "curveHorizontal", "x0", "y0", "x1", "y1", "linkHorizontal", "init_link", "__esmMin", "init_src", "init_array", "init_constant", "init_point", "init_src", "__esmMin", "init_link", "horizontalSource", "d", "horizontalTarget", "sankeyLinkHorizontal_default", "linkHorizontal", "init_sankeyLinkHorizontal", "__esmMin", "init_src", "__name", "init_src", "__esmMin", "init_sankey", "init_align", "init_sankeyLinkHorizontal", "Uid", "init_uid", "__esmMin", "_Uid", "__name", "name", "id", "alignmentsMap", "draw", "sankeyRenderer_default", "init_sankeyRenderer", "__esmMin", "init_diagramAPI", "init_src", "init_setupGraphViewbox", "init_uid", "left", "right", "center", "justify", "__name", "text", "id", "_version", "diagObj", "securityLevel", "conf", "getConfig", "defaultSankeyConfig", "defaultConfig", "sandboxElement", "select_default", "root", "svg", "width", "height", "useMaxWidth", "nodeAlignment", "prefix", "suffix", "showValues", "graph", "nodeAlign", "Sankey", "d", "colorScheme", "ordinal", "Tableau10_default", "Uid", "getText", "value", "link", "linkColor", "gradient", "coloring", "sankeyLinkHorizontal_default", "setupGraphViewbox", "prepareTextForParsing", "init_sankeyUtils", "__esmMin", "__name", "text", "getStyles", "styles_default", "init_styles", "__esmMin", "__name", "options", "sankeyDiagram_exports", "__export", "diagram", "originalParse", "init_sankeyDiagram", "__esmMin", "init_sankey", "init_sankeyDB", "init_sankeyRenderer", "init_sankeyUtils", "init_styles", "sankey_default", "text", "prepareTextForParsing", "styles_default", "sankeyDB_default", "sankeyRenderer_default", "DEFAULT_PACKET_CONFIG", "PacketDB", "init_db", "__esmMin", "init_config", "init_defaultConfig", "init_utils", "init_commonDb", "defaultConfig_default", "setAccTitle", "getAccTitle", "setDiagramTitle", "getDiagramTitle", "getAccDescription", "setAccDescription", "__name", "config", "cleanAndMerge", "getConfig", "word", "clear", "maxPacketSize", "populate", "getNextFittingBlock", "parser", "init_parser", "__esmMin", "init_mermaid_parser_core", "init_logger", "init_populateCommonDb", "init_db", "__name", "ast", "db", "populateCommonDb", "lastBit", "word", "row", "bitsPerRow", "start", "end", "bits", "label", "log", "block", "nextBlock", "rowEnd", "rowStart", "input", "parse", "PacketDB", "draw", "drawWord", "renderer", "init_renderer", "__esmMin", "init_selectSvgElement", "init_setupGraphViewbox", "__name", "_text", "id", "_version", "diagram", "db", "config", "rowHeight", "paddingY", "bitWidth", "bitsPerRow", "words", "title", "totalRowHeight", "svgHeight", "svgWidth", "svg", "selectSvgElement", "configureSvgSize", "word", "packet", "rowNumber", "paddingX", "showBits", "group", "wordY", "block", "blockX", "width", "isSingleBlock", "bitNumberY", "defaultPacketStyleOptions", "styles", "init_styles", "__esmMin", "init_utils", "__name", "packet", "options", "cleanAndMerge", "diagram_exports", "__export", "diagram", "init_diagram", "__esmMin", "init_db", "init_parser", "init_renderer", "init_styles", "parser", "PacketDB", "renderer", "styles", "defaultOptions", "defaultRadarData", "data", "DEFAULT_RADAR_CONFIG", "getConfig", "getAxes", "getCurves", "getOptions", "setAxes", "setCurves", "computeCurveEntries", "setOptions", "clear", "db", "init_db", "__esmMin", "init_config", "init_defaultConfig", "init_utils", "init_commonDb", "defaultConfig_default", "__name", "cleanAndMerge", "axes", "axis", "curves", "curve", "entries", "entry", "options", "optionMap", "acc", "option", "setAccTitle", "getAccTitle", "setDiagramTitle", "getDiagramTitle", "getAccDescription", "setAccDescription", "populate", "parser", "init_parser", "__esmMin", "init_mermaid_parser_core", "init_logger", "init_populateCommonDb", "init_db", "__name", "ast", "populateCommonDb", "db", "axes", "curves", "options", "input", "parse", "log", "drawCurves", "g", "axes", "curves", "minValue", "maxValue", "graticule", "config", "numAxes", "radius", "curve", "index", "points", "entry", "i", "angle", "r", "relativeRadius", "x", "y", "closedRoundCurve", "value", "clippedValue", "tension", "numPoints", "d", "p0", "p1", "p2", "p3", "cp1", "cp2", "drawLegend", "showLegend", "legendX", "legendY", "lineHeight", "itemGroup", "draw", "drawFrame", "drawGraticule", "drawAxes", "renderer", "init_renderer", "__esmMin", "init_selectSvgElement", "__name", "_text", "id", "_version", "diagram", "db", "options", "title", "svg", "selectSvgElement", "totalWidth", "totalHeight", "center", "ticks", "_", "j", "label", "genIndexStyles", "buildRadarStyleOptions", "styles", "init_styles", "__esmMin", "init_utils", "init_theme_default", "init_config", "__name", "themeVariables", "radarOptions", "sections", "i", "indexColor", "radar", "defaultThemeVariables", "getThemeVariables", "currentConfig", "getConfig", "cleanAndMerge", "diagram_exports", "__export", "diagram", "init_diagram", "__esmMin", "init_db", "init_parser", "init_renderer", "init_styles", "parser", "db", "renderer", "styles", "parser", "block_default", "init_block", "__esmMin", "o", "__name", "k", "v", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "$Vd", "$Ve", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "num", "spaceId", "edgeData", "id2", "id", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "args", "lexer", "sharedState", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "YYSTATE", "Parser", "typeStr2Type", "typeStr", "log", "edgeTypeStr2Type", "edgeStrToEdgeData", "blockDatabase", "edgeList", "edgeCount", "COLOR_KEYWORD", "FILL_KEYWORD", "BG_FILL", "STYLECLASS_SEP", "config", "classes", "sanitizeText", "addStyleClass", "addStyle2Node", "setCssClass", "populateBlockDatabase", "blocks", "rootBlock", "clear", "cnt", "generateId", "setHierarchy", "getColumns", "getBlocksFlat", "getBlocks", "getEdges", "getBlock", "setBlock", "getLogger", "getClasses", "db", "blockDB_default", "init_blockDB", "__esmMin", "init_clone", "init_config", "init_diagramAPI", "init_logger", "init_common", "init_commonDb", "getConfig", "__name", "txt", "common_default", "id", "styleAttributes", "foundClass", "attrib", "fixedAttrib", "newStyle2", "styles", "foundBlock", "itemIds", "cssClassName", "trimmedId", "_blockList", "parent", "blockList", "children", "column", "b", "block", "count", "existingBlock", "w", "j", "newBlock", "clone_default", "blockId", "fade", "getStyles", "styles_default", "init_styles", "__esmMin", "init_dist", "init_globalStyles", "__name", "color", "opacity", "channel", "channel_default", "r", "g", "b", "rgba_default", "options", "getIconStyles", "insertMarkers", "extension", "composition", "aggregation", "dependency", "lollipop", "point", "circle", "cross", "barb", "markers", "markers_default", "init_markers", "__esmMin", "init_logger", "__name", "elem", "markerArray", "type", "id", "markerName", "log", "calculateBlockPosition", "columns", "position", "px", "py", "setBlockSizes", "block", "db", "siblingWidth", "siblingHeight", "log", "maxWidth", "maxHeight", "child", "childSize", "getMaxChildSize", "padding", "numItems", "xSize", "ySize", "width", "height", "childWidth", "childHeight", "num", "layoutBlocks", "widthOfChildren", "columnPos", "startingPosX", "rowPos", "parent", "halfWidth", "columnsFilled", "findBounds", "minX", "minY", "maxX", "maxY", "x", "y", "layout", "root", "init_layout", "__esmMin", "init_logger", "init_diagramAPI", "getConfig", "__name", "applyStyle", "dom", "styleFn", "addHtmlLabel", "node", "config", "fo", "select_default", "div", "label", "labelClass", "span", "sanitizeText", "createLabel", "createLabel_default", "init_createLabel", "__esmMin", "init_src", "init_diagramAPI", "init_common", "init_logger", "init_createText", "init_utils", "__name", "_vertexText", "style", "isTitle", "isNode", "vertexText", "getConfig", "evaluate", "log", "replaceIconSubstring", "decodeEntities", "svgLabel", "rows", "row", "tspan", "addEdgeMarkers", "arrowTypesMap", "addEdgeMarker", "init_edgeMarker", "__esmMin", "init_logger", "__name", "svgPath", "edge", "url", "id", "diagramType", "position", "arrowType", "endMarkerType", "log", "suffix", "setTerminalWidth", "fo", "value", "getConfig", "edgeLabels", "terminalLabels", "insertEdgeLabel", "positionEdgeLabel", "outsideNode", "intersection", "cutPathAtIntersect", "insertEdge", "init_edges", "__esmMin", "init_logger", "init_createLabel", "init_createText", "init_src", "init_diagramAPI", "init_utils", "init_common", "init_lineWithOffset", "init_subGraphTitleMargins", "init_edgeMarker", "__name", "elem", "edge", "config", "useHtmlLabels", "evaluate", "labelElement", "createText", "createLabel_default", "edgeLabel", "label", "bbox", "div", "dv", "select_default", "startLabelElement", "startEdgeLabelLeft", "inner", "slBox", "startEdgeLabelRight", "endLabelElement", "endEdgeLabelLeft", "endEdgeLabelRight", "paths", "log", "path", "siteConfig", "subGraphTitleTotalMargin", "getSubGraphTitleMargins", "el", "x", "y", "pos", "utils_default", "node", "point", "dx", "dy", "w", "h", "outsidePoint", "insidePoint", "r", "Q", "R", "q", "res", "_x", "_y", "_points", "boundaryNode", "points", "lastPointOutside", "isInside", "inter", "pointPresent", "p", "e", "clusterDb", "diagramType", "graph", "id", "pointsHasChanged", "tail", "head", "lineData", "curve", "basis_default", "getLineFunctionsWithOffset", "lineFunction", "line_default", "strokeClasses", "svgPath", "url", "getUrl", "addEdgeMarkers", "expandAndDeduplicateDirections", "getArrowPoints", "init_blockArrowHelper", "__esmMin", "__name", "directions", "uniqueDirections", "direction", "duplicatedDirections", "bbox", "node", "f", "height", "midpoint", "width", "padding", "intersectNode", "node", "point", "intersect_node_default", "init_intersect_node", "__esmMin", "__name", "intersectEllipse", "node", "rx", "ry", "point", "cx", "cy", "px", "py", "det", "dx", "dy", "intersect_ellipse_default", "init_intersect_ellipse", "__esmMin", "__name", "intersectCircle", "node", "rx", "point", "intersect_ellipse_default", "intersect_circle_default", "init_intersect_circle", "__esmMin", "init_intersect_ellipse", "__name", "intersectLine", "p1", "p2", "q1", "q2", "a1", "a2", "b1", "b2", "c1", "c2", "r1", "r2", "r3", "r4", "denom", "offset", "num", "y", "sameSign", "intersect_line_default", "init_intersect_line", "__esmMin", "__name", "intersectPolygon", "node", "polyPoints", "point", "x1", "y1", "intersections", "minX", "minY", "entry", "left", "top", "i", "p1", "p2", "intersect", "intersect_line_default", "p", "q", "pdx", "pdy", "distp", "qdx", "qdy", "distq", "intersect_polygon_default", "init_intersect_polygon", "__esmMin", "init_intersect_line", "__name", "intersectRect", "intersect_rect_default", "init_intersect_rect", "__esmMin", "__name", "node", "point", "x", "y", "dx", "dy", "w", "h", "sx", "sy", "intersect_default", "init_intersect", "__esmMin", "init_intersect_node", "init_intersect_circle", "init_intersect_ellipse", "init_intersect_polygon", "init_intersect_rect", "intersect_node_default", "intersect_circle_default", "intersect_ellipse_default", "intersect_polygon_default", "intersect_rect_default", "insertPolygonShape", "parent", "w", "h", "points", "d", "labelHelper", "updateNodeBounds", "init_util", "__esmMin", "init_createLabel", "init_createText", "init_diagramAPI", "init_src", "init_common", "init_utils", "__name", "node", "_classes", "isNode", "config", "getConfig", "classes", "useHtmlLabels", "evaluate", "shapeSvg", "label", "labelText", "textNode", "text", "createText", "sanitizeText", "decodeEntities", "createLabel_default", "bbox", "halfPadding", "div", "dv", "select_default", "images", "noImgText", "img", "res", "setupImage", "bodyFontSize", "width", "element", "note", "note_default", "init_note", "__esmMin", "init_util", "init_logger", "init_diagramAPI", "init_intersect", "__name", "parent", "node", "getConfig", "shapeSvg", "bbox", "halfPadding", "labelHelper", "log", "rect", "updateNodeBounds", "point", "intersect_default", "applyNodePropertyBorders", "rect", "borders", "totalWidth", "totalHeight", "strokeDashArray", "addBorder", "__name", "length", "skipBorder", "log", "formatClass", "getClassesFromNode", "question", "choice", "hexagon", "block_arrow", "rect_left_inv_arrow", "lean_right", "lean_left", "trapezoid", "inv_trapezoid", "rect_right_inv_arrow", "cylinder", "composite", "labelRect", "rectWithTitle", "stadium", "circle", "doublecircle", "subroutine", "start", "forkJoin", "end", "class_box", "shapes", "nodeElems", "insertNode", "positionNode", "init_nodes", "__esmMin", "init_src", "init_diagramAPI", "init_common", "init_logger", "init_blockArrowHelper", "init_createLabel", "init_intersect", "init_note", "init_util", "str", "node", "otherClasses", "parent", "shapeSvg", "bbox", "labelHelper", "w", "h", "points", "questionElem", "insertPolygonShape", "updateNodeBounds", "point", "intersect_default", "s", "d", "f", "m", "hex", "getArrowPoints", "blockArrow", "el", "rx", "ry", "shape", "pos", "x", "y", "halfPadding", "propKeys", "propKey", "classes", "innerLine", "label", "text2", "title", "text", "createLabel_default", "evaluate", "getConfig", "div", "dv", "select_default", "textRows", "titleBox", "descr", "gap", "circleGroup", "outerCircle", "innerCircle", "dir", "width", "height", "rowPadding", "lineHeight", "topLine", "bottomLine", "maxWidth", "maxHeight", "labelContainer", "verticalPos", "hasInterface", "interfaceLabelText", "interfaceLabel", "interfaceBBox", "classTitleString", "classTitleLabel", "classTitleBBox", "classAttributes", "member", "parsedInfo", "parsedText", "lbl", "classMethods", "displayText", "diffX", "memberBBox", "note_default", "elem", "renderOptions", "newEl", "target", "padding", "diff", "getNodeFromBlock", "block", "db", "positioned", "vertex", "classStr", "radius", "shape", "padding", "styles", "getStylesFromArray", "vertexText", "bounds", "getConfig", "calculateBlockSize", "elem", "node", "config", "nodeEl", "insertNode", "boundingBox", "obj", "insertBlockPositioned", "positionNode", "performOperations", "blocks", "operation", "calculateBlockSizes", "insertBlocks", "insertEdges", "edges", "id", "g", "Graph", "edge", "startBlock", "endBlock", "start", "end", "points", "insertEdge", "insertEdgeLabel", "positionEdgeLabel", "init_renderHelpers", "__esmMin", "init_graphlib", "init_config", "init_edges", "init_nodes", "init_utils", "__name", "getClasses", "draw", "blockRenderer_default", "init_blockRenderer", "__esmMin", "init_src", "init_config", "init_markers", "init_logger", "init_setupGraphViewbox", "init_layout", "init_renderHelpers", "__name", "text", "diagObj", "id", "_version", "securityLevel", "conf", "getConfig", "db", "sandboxElement", "select_default", "root", "svg", "markers_default", "bl", "blArr", "edges", "nodes", "calculateBlockSizes", "bounds", "layout", "insertBlocks", "insertEdges", "bounds2", "magicFactor", "height", "width", "useMaxWidth", "configureSvgSize", "log", "blockDiagram_exports", "__export", "diagram", "init_blockDiagram", "__esmMin", "init_block", "init_blockDB", "init_styles", "init_blockRenderer", "block_default", "blockDB_default", "blockRenderer_default", "styles_default", "ArchitectureDirectionName", "ArchitectureDirectionArrow", "ArchitectureDirectionArrowShift", "getOppositeArchitectureDirection", "isArchitectureDirection", "isArchitectureDirectionX", "isArchitectureDirectionY", "isArchitectureDirectionXY", "isArchitecturePairXY", "isValidArchitectureDirectionPair", "getArchitectureDirectionPair", "shiftPositionByArchitectureDirectionPair", "getArchitectureDirectionXYFactors", "getArchitectureDirectionAlignment", "isArchitectureService", "isArchitectureJunction", "edgeData", "nodeData", "init_architectureTypes", "__esmMin", "__name", "scale", "orig", "arrowSize", "_arrowSize", "x", "temp", "a", "b", "aX_bY", "aY_bX", "pair", "lhs", "rhs", "sourceDir", "targetDir", "y", "edge", "node", "DEFAULT_ARCHITECTURE_CONFIG", "ArchitectureDB", "init_architectureDb", "__esmMin", "init_config", "init_defaultConfig", "init_utils", "init_commonDb", "init_architectureTypes", "defaultConfig_default", "setAccTitle", "getAccTitle", "setDiagramTitle", "getDiagramTitle", "getAccDescription", "setAccDescription", "__name", "clear", "id", "icon", "parent", "title", "iconText", "isArchitectureService", "isArchitectureJunction", "lhsId", "rhsId", "lhsDir", "rhsDir", "lhsInto", "rhsInto", "lhsGroup", "rhsGroup", "isArchitectureDirection", "lhsGroupId", "rhsGroupId", "edge", "groupAlignments", "adjList", "prevOuter", "service", "prevInner", "alignment", "getArchitectureDirectionAlignment", "pair", "getArchitectureDirectionPair", "firstId", "visited", "notVisited", "prev", "BFS", "startingId", "spatialMap", "queue", "adj", "posX", "posY", "dir", "shiftPositionByArchitectureDirectionPair", "spatialMaps", "element", "cleanAndMerge", "getConfig", "field", "populateDb", "parser", "init_architectureParser", "__esmMin", "init_mermaid_parser_core", "init_logger", "init_populateCommonDb", "init_architectureDb", "__name", "ast", "db", "populateCommonDb", "group", "service", "edge", "input", "parse", "log", "ArchitectureDB", "getStyles", "architectureStyles_default", "init_architectureStyles", "__esmMin", "__name", "options", "require_layout_base", "__commonJSMin", "exports", "module", "__name", "root", "factory", "modules", "installedModules", "__webpack_require__", "moduleId", "value", "name", "getter", "object", "property", "LayoutConstants", "LGraphObject", "IGeometry", "IMath", "LEdge", "source", "target", "vEdge", "prop", "node", "graph", "otherEnd", "clipPointCoordinates", "vGraphObject", "Integer", "RectangleD", "RandomSeed", "PointD", "LNode", "gm", "loc", "size", "vNode", "width", "height", "upperLeft", "dimension", "cx", "cy", "x", "y", "dx", "dy", "to", "edgeList", "edge", "self", "other", "neighbors", "withNeighborsList", "childNode", "children", "nodes", "i", "noOfChildren", "randomCenterX", "randomCenterY", "minX", "maxX", "minY", "maxY", "childGraph", "trans", "left", "top", "leftTop", "vLeftTop", "FDLayoutConstants", "pt", "dim", "LGraphManager", "Point", "LinkedList", "LGraph", "parent", "obj2", "vGraph", "obj1", "sourceNode", "targetNode", "newNode", "newEdge", "obj", "edgesToBeRemoved", "s", "index", "sourceIndex", "targetIndex", "nodeTop", "nodeLeft", "margin", "lNode", "recursive", "right", "bottom", "nodeRight", "nodeBottom", "boundingRect", "queue", "visited", "currentNode", "neighborEdges", "currentNeighbor", "childrenOfNode", "neighborEdge", "childrenOfNeighbor", "noOfVisitedInThisGraph", "visitedNode", "layout", "ngraph", "nnode", "newGraph", "parentNode", "sourceGraph", "targetGraph", "lObj", "nodesToBeRemoved", "nodeList", "graphs", "firstNode", "secondNode", "ownerGraph", "sourceAncestorGraph", "targetAncestorGraph", "edges", "firstOwnerGraph", "secondOwnerGraph", "depth", "edgesToRemove", "rectA", "rectB", "overlapAmount", "separationBuffer", "directions", "slope", "moveByY", "moveByX", "result", "p1x", "p1y", "p2x", "p2y", "topLeftAx", "topLeftAy", "topRightAx", "bottomLeftAx", "bottomLeftAy", "bottomRightAx", "halfWidthA", "halfHeightA", "topLeftBx", "topLeftBy", "topRightBx", "bottomLeftBx", "bottomLeftBy", "bottomRightBx", "halfWidthB", "halfHeightB", "clipPointAFound", "clipPointBFound", "slopeA", "slopeB", "slopePrime", "cardinalDirectionA", "cardinalDirectionB", "tempPointAx", "tempPointAy", "tempPointBx", "tempPointBy", "line", "s1", "s2", "f1", "f2", "x1", "y1", "x2", "y2", "x3", "y3", "x4", "y4", "a1", "a2", "b1", "b2", "c1", "c2", "denom", "Cx", "Cy", "Nx", "Ny", "C_angle", "p1", "p2", "p3", "p4", "a", "b", "c", "d", "p", "q", "r", "det", "lambda", "gamma", "Ex", "Ey", "Lx", "Ly", "disc", "t1", "t2", "intersections", "_createClass", "defineProperties", "props", "descriptor", "Constructor", "protoProps", "staticProps", "_classCallCheck", "instance", "nodeFrom", "add", "prev", "next", "list", "_remove", "vals", "_this", "v", "val", "otherNode", "current", "_typeof", "UniqueIDGeneretor", "id", "arg", "type", "_toConsumableArray", "arr", "arr2", "Transform", "Emitter", "Layout", "isRemoteUse", "isLayoutSuccessfull", "allEdges", "newLeftTop", "flatForest", "isForest", "allNodes", "isFlat", "toBeVisited", "parents", "unProcessedNodes", "temp", "dummyNodes", "dummyNode", "dummyEdge", "k", "lEdge", "path", "ebp", "sliderValue", "defaultValue", "minDiv", "maxMul", "minValue", "maxValue", "removedNodes", "remainingDegrees", "foundCenter", "centerNode", "degree", "tempList", "tempList2", "neighbours", "neighbour", "otherDegree", "newDegree", "wox", "woy", "wex", "wey", "dox", "doy", "dex", "dey", "xDevice", "worldExtX", "yDevice", "worldExtY", "xWorld", "deviceExtX", "yWorld", "deviceExtY", "inPoint", "outPoint", "FDLayout", "originalIdealLength", "lcaDepth", "sizeOfSourceInLca", "sizeOfTargetInLca", "lEdges", "gridUpdateAllowed", "forceToNodeSurroundingUpdate", "j", "nodeA", "nodeB", "lNodes", "processedNodeSet", "idealLength", "length", "springForce", "springForceX", "springForceY", "clipPoints", "distanceX", "distanceY", "distanceSquared", "distance", "repulsionForce", "repulsionForceX", "repulsionForceY", "childrenConstant", "ownerCenterX", "ownerCenterY", "absDistanceX", "absDistanceY", "estimatedSize", "converged", "oscilating", "sizeX", "sizeY", "grid", "startX", "finishX", "startY", "finishY", "surrounding", "FDLayoutEdge", "FDLayoutNode", "_startX", "_finishX", "_startY", "_finishY", "DimensionD", "HashMap", "key", "theId", "HashSet", "keys", "Matrix", "array1", "array2", "array", "constant", "product", "magnitude", "sum", "_i", "C", "INV", "temp1", "temp2", "_i2", "_sum", "_j", "_i3", "_sum2", "_j2", "Quicksort", "A", "compareFunction", "SVD", "nu", "dims", "allocate", "e", "work", "wantu", "wantv", "nct", "nrt", "lhs", "rhs", "t", "_i4", "_i5", "_i6", "_i7", "_i8", "_t", "_i9", "_i10", "_j3", "_i11", "_k", "_j4", "_t2", "_i12", "_i13", "_i14", "_i15", "_i16", "_k2", "_j5", "_t3", "_i17", "_i18", "_i19", "pp", "iter", "eps", "tiny", "_k3", "kase", "ks", "_t4", "f", "_j6", "_t5", "cs", "sn", "_i20", "_f", "_j7", "_t6", "_cs", "_sn", "_i21", "scale", "sp", "spm1", "epm1", "sk", "ek", "shift", "_f2", "g", "_j8", "_t7", "_cs2", "_sn2", "_i22", "_i23", "_i24", "_t8", "_i25", "_i26", "NeedlemanWunsch", "sequence1", "sequence2", "match_score", "mismatch_penalty", "gap_penalty", "diag", "up", "maxOf", "indices", "inProcessAlignments", "indexes", "layoutBase", "event", "callback", "l", "data", "require_cose_base", "__commonJSMin", "exports", "module", "__name", "root", "factory", "__WEBPACK_EXTERNAL_MODULE__551__", "__webpack_modules__", "__unused_webpack_exports", "__webpack_require__", "coseBase", "FDLayoutConstants", "CoSEConstants", "prop", "FDLayoutEdge", "CoSEEdge", "source", "target", "vEdge", "LGraph", "CoSEGraph", "parent", "graphMgr", "vGraph", "LGraphManager", "CoSEGraphManager", "layout", "FDLayout", "CoSENode", "ConstraintHandler", "LayoutConstants", "Point", "PointD", "DimensionD", "Layout", "Integer", "IGeometry", "Transform", "LinkedList", "CoSELayout", "gm", "vNode", "createBendsAsNeeded", "allNodes", "intersection", "x", "forest", "gridUpdateAllowed", "forceToNodeSurroundingUpdate", "pData", "i", "rect", "id", "layoutEnded", "lNodes", "node", "self", "calculateCompoundWeight", "compoundNode", "nodes", "fixedNodeWeight", "nodeData", "nodeToDummyForVerticalAlignment", "nodeToDummyForHorizontalAlignment", "nodeId", "verticalAlignment", "horizontalAlignment", "array", "j", "constraint", "nodeIdLeft", "nodeIdRight", "nodeIdTop", "nodeIdBottom", "subGraphOnHorizontal", "subGraphOnVertical", "left", "right", "top", "bottom", "constructComponents", "graph", "fixedNodes", "components", "isFixed", "queue", "visited", "count", "value", "key", "currentNode", "neighbors", "neighbor", "resultOnHorizontal", "resultOnVertical", "fixedNode", "allVerticalAlignments", "totalDisplacementX", "averageDisplacementX", "allHorizontalAlignments", "totalDisplacementY", "averageDisplacementY", "displacement", "diff", "component", "sum", "actualNodes", "averageDisplacement", "nodeList", "graphs", "size", "edges", "edge", "edgeList", "k", "multiEdge", "currentStartingPoint", "numberOfColumns", "height", "currentY", "currentX", "point", "tree", "centerNode", "startingPoint", "radialSep", "bounds", "transform", "bottomRight", "parentOfNode", "startAngle", "endAngle", "distance", "radialSeparation", "halfInterval", "nodeAngle", "teta", "cos_teta", "x_", "y_", "neighborEdges", "childCount", "branchCount", "incEdgesCount", "startIndex", "temp", "index", "stepAngle", "currentNeighbor", "childStartAngle", "childEndAngle", "maxDiagonal", "diagonal", "tempMemberGroups", "zeroDegree", "p_id", "dummyCompoundId", "dummyCompound", "dummyParentGraph", "parentGraph", "childGraphMap", "idToNode", "tiledZeroDegreePack", "width", "lCompoundNode", "horizontalMargin", "verticalMargin", "labelMarginLeft", "labelMarginTop", "tiledPack", "childGraph", "children", "theChild", "degree", "child", "organization", "y", "compoundHorizontalMargin", "compoundVerticalMargin", "compoundLabelMarginLeft", "compoundLabelMarginTop", "row", "maxHeight", "lnode", "minWidth", "horizontalOrg", "verticalOrg", "horizontalRatio", "verticalRatio", "bestOrg", "ratio", "members", "favorHorizontalDim", "verticalPadding", "horizontalPadding", "membersSize", "totalWidth", "totalHeight", "maxWidth", "averageWidth", "averageHeight", "delta", "horizontalCountDouble", "horizontalCount", "idealWidth", "tilingCompareBy", "getNodeArea", "n", "areaCompareFcn", "n1", "n2", "cmpBy", "sumCenterX", "sumCenterY", "lNode", "rowIndex", "minCompoundSize", "secondDimension", "w", "h", "extraHeight", "r", "min", "max", "extraWidth", "lastRowIndex", "lastRowWidth", "sri", "hDiff", "add_to_row_ratio", "add_new_row_ratio", "longest", "last", "prevTotal", "finalTotal", "prunedNodesAll", "containsLeaf", "prunedNodesInStepTemp", "otherEnd", "relativePosition", "prunedNodesInStep", "lengthOfPrunedNodesInStep", "gridForPrunedNode", "nodeToConnect", "prunedNode", "startGridX", "finishGridX", "startGridY", "finishGridY", "upNodeCount", "downNodeCount", "rightNodeCount", "leftNodeCount", "controlRegions", "minCount", "minIndex", "random", "FDLayoutNode", "IMath", "loc", "dX", "dY", "pred1", "next", "processed", "_toConsumableArray", "arr", "arr2", "Matrix", "SVD", "constraints", "idToNodeMap", "nodeIndexes", "xCoords", "yCoords", "calculatePositionDiff", "pos1", "pos2", "calculateAvgPosition", "nodeIdSet", "xPosSum", "yPosSum", "findAppropriatePositionForRelativePlacement", "direction", "dummyPositions", "componentSources", "setUnion", "setA", "setB", "union", "_iteratorNormalCompletion", "_didIteratorError", "_iteratorError", "_iterator", "_step", "elem", "err", "inDegrees", "adjacent", "positionMap", "pastMap", "fixedIds", "position", "fixedId", "_position", "_loop", "fixedPosition", "sinkNodes", "_components", "isFixedComponent", "_iteratorNormalCompletion2", "_didIteratorError2", "_iteratorError2", "_iterator2", "_step2", "isExist", "existAt", "ele", "minBefore", "minAfter", "maxBefore", "maxAfter", "_iteratorNormalCompletion3", "_didIteratorError3", "_iteratorError3", "_iterator3", "_step3", "posBefore", "posAfter", "_iteratorNormalCompletion4", "_didIteratorError4", "_iteratorError4", "_iterator4", "_step4", "_nodeId", "applyReflectionForRelativePlacement", "relativePlacementConstraints", "reflectOnY", "notReflectOnY", "reflectOnX", "notReflectOnX", "_i", "_i2", "_i3", "findComponents", "_currentNode", "dagToUndirected", "dag", "undirected", "dagToReversed", "reversed", "targetMatrix", "sourceMatrix", "standardTransformation", "reflectionType", "dagUndirected", "verticalAlign", "_loop2", "_i4", "alignmentSet", "xPos", "horizontalAlign", "_loop3", "_i5", "yPos", "largestComponentSize", "largestComponentIndex", "_i6", "constraintsInlargestComponent", "positionMapHorizontal", "positionMapVertical", "transformationMatrix", "targetMatrixTranspose", "sourceMatrixTranspose", "_i7", "tempMatrix", "SVDResult", "_i8", "temp1", "temp2", "temp3", "translationAmount", "posInTheory", "posDesired", "posDiff", "xAlign", "_loop4", "_i9", "yAlign", "_loop5", "_i10", "dummyToNodeForVerticalAlignment", "dummyToNodeForHorizontalAlignment", "dummyPositionsForVerticalAlignment", "dummyPositionsForHorizontalAlignment", "fixedNodesOnHorizontal", "fixedNodesOnVertical", "_loop6", "_i11", "_loop7", "_i12", "dagOnHorizontal", "dagOnVertical", "_loop8", "sourceId", "targetNode", "_iteratorNormalCompletion5", "_didIteratorError5", "_iteratorError5", "_iterator5", "_step5", "undirectedOnHorizontal", "undirectedOnVertical", "componentsOnHorizontal", "componentsOnVertical", "reversedDagOnHorizontal", "reversedDagOnVertical", "componentSourcesOnHorizontal", "componentSourcesOnVertical", "_loop9", "_iteratorNormalCompletion6", "_didIteratorError6", "_iteratorError6", "_iterator6", "_step6", "_loop10", "_iteratorNormalCompletion7", "_didIteratorError7", "_iteratorError7", "_iterator7", "_step7", "_i13", "_node", "__webpack_module_cache__", "moduleId", "cachedModule", "__webpack_exports__", "require_cytoscape_fcose", "__commonJSMin", "exports", "module", "__name", "root", "factory", "__WEBPACK_EXTERNAL_MODULE__140__", "__webpack_modules__", "tgt", "_len", "srcs", "_key", "src", "k", "__unused_webpack_exports", "__webpack_require__", "_slicedToArray", "sliceIterator", "arr", "i", "_arr", "_n", "_d", "_e", "_i", "_s", "err", "LinkedList", "auxiliary", "nodes", "nodesMap", "roots", "ele", "parent", "cy", "eles", "topMostNodes", "dummyNodes", "queue", "visited", "visitedTopMostNodes", "currentNeighbor", "minDegreeNode", "minDegree", "isConnected", "count", "nodesConnectedToDummy", "components", "_loop", "cmpt", "currentNode", "childrenOfCurrentNode", "node", "_loop2", "neighborNodes", "neighborNode", "childrenOfNeighbor", "e", "temp", "originalCenter", "componentResult", "options", "minXCoord", "maxXCoord", "minYCoord", "maxYCoord", "_iteratorNormalCompletion", "_didIteratorError", "_iteratorError", "_iterator", "_step", "_ref", "_ref2", "key", "value", "cyNode", "nodeBB", "leftX", "rightX", "topY", "bottomY", "diffOnX", "diffOnY", "x", "y", "item", "_diffOnX", "_diffOnY", "parentNode", "xCoords", "yCoords", "nodeIndexes", "left", "right", "top", "bottom", "nodeLeft", "nodeRight", "nodeTop", "nodeBottom", "s", "boundingBox", "parentsWithoutChildren", "check", "child", "aux", "CoSELayout", "CoSENode", "PointD", "DimensionD", "LayoutConstants", "FDLayoutConstants", "CoSEConstants", "coseLayout", "spectralResult", "edges", "idToLNode", "isFn", "fn", "optFn", "opt", "processChildrenList", "children", "layout", "size", "theChild", "children_of_children", "theNode", "dimensions", "parentInfo", "theNewGraph", "processEdges", "gm", "idealLengthTotal", "edgeCount", "edge", "sourceNode", "targetNode", "e1", "processConstraints", "_createClass", "defineProperties", "target", "props", "descriptor", "Constructor", "protoProps", "staticProps", "_classCallCheck", "instance", "assign", "_require", "spectralLayout", "_require2", "defaults", "Layout", "coseResult", "componentCenters", "constraintExist", "layUtil", "packingEnabled", "component", "toBeTiledNodes", "_xCoords", "_yCoords", "tempSpectralResult", "indexesToBeDeleted", "index", "_boundingBox", "componentsEvaluated", "subgraphs", "hiddenEles", "subgraph", "nodeIndex", "source", "sourceNodeIndex", "targetNodeIndex", "sourceCenter", "targetCenter", "_parentInfo", "shiftResult", "result", "newXCoords", "newYCoords", "_count", "nodeRectangle", "getPositions", "pos", "theId", "_pos", "_hiddenEles", "Matrix", "SVD", "parentNodes", "parentChildMap", "allNodesNeighborhood", "samplesColumn", "minDistancesColumn", "C", "PHI", "INV", "firstSample", "nodeSize", "infinity", "small", "piTol", "samplingType", "nodeSeparation", "sampleSize", "randomSampleCR", "sample", "flag", "BFS", "pivot", "samplingMethod", "path", "front", "back", "current", "distance", "max_dist", "max_ind", "neighbors", "_i2", "_i3", "allBFS", "_i4", "_i5", "_i6", "j", "_i7", "_i8", "_j", "SVDResult", "a_q", "a_u", "a_v", "max_s", "a_Sig", "powerIteration", "theta1", "theta2", "Y1", "Y2", "V1", "V2", "previous", "_i9", "_i10", "_i11", "_i12", "_i13", "min", "ele2", "eleIndex", "disconnectedId", "id", "_iteratorNormalCompletion2", "_didIteratorError2", "_iteratorError2", "_iterator2", "_step2", "_i14", "_i15", "iterator", "firstNode", "firstNodePos", "firstNodeWidth", "secondNode", "secondNodeWidth", "impl", "register", "cytoscape", "__webpack_module_cache__", "moduleId", "cachedModule", "__webpack_exports__", "wrapIcon", "architectureIcons", "init_architectureIcons", "__esmMin", "init_icons", "__name", "icon", "unknownIcon", "drawEdges", "drawGroups", "drawServices", "drawJunctions", "init_svgDraw", "__esmMin", "init_diagramAPI", "init_createText", "init_icons", "init_common", "init_architectureIcons", "init_architectureTypes", "init_utils", "__name", "edgesEl", "cy", "db", "padding", "iconSize", "halfIconSize", "arrowSize", "halfArrowSize", "edge", "source", "sourceDir", "sourceArrow", "sourceGroup", "target", "targetDir", "targetArrow", "targetGroup", "label", "edgeData", "startX", "startY", "midX", "midY", "endX", "endY", "groupEdgeShift", "isArchitectureDirectionX", "g", "getEdgeId", "xShift", "ArchitectureDirectionArrowShift", "yShift", "isArchitectureDirectionY", "ArchitectureDirectionArrow", "axis", "isArchitectureDirectionXY", "width", "textElem", "createText", "getConfig", "pair", "getArchitectureDirectionPair", "isArchitecturePairXY", "bboxOrig", "x", "y", "getArchitectureDirectionXYFactors", "bboxNew", "groupsEl", "groupIconSize", "fontSize", "node", "data", "nodeData", "h", "w", "x1", "y1", "groupsNode", "groupLabelContainer", "shiftedX1", "shiftedY1", "bkgElem", "getIconSVG", "architectureIcons", "elem", "services", "config", "service", "serviceElem", "divElem", "sanitizeText", "height", "junctions", "junction", "junctionElem", "addServices", "services", "cy", "db", "service", "addJunctions", "junctions", "junction", "positionNodes", "node", "data", "nodeData", "addGroups", "groups", "group", "addEdges", "edges", "parsedEdge", "lhsId", "rhsId", "lhsInto", "lhsGroup", "rhsInto", "lhsDir", "rhsDir", "rhsGroup", "title", "edgeType", "isArchitectureDirectionXY", "edge", "getAlignments", "spatialMaps", "groupAlignments", "flattenAlignments", "__name", "alignmentObj", "alignmentDir", "prev", "dir", "alignments", "cnt", "arr", "i", "j", "aGroupId", "aNodeIds", "bGroupId", "bNodeIds", "keyA", "keyB", "spatialMap", "horizontalAlignments", "verticalAlignments", "id", "x", "y", "nodeGroup", "horizontal", "vertical", "prevHoriz", "prevVert", "horiz", "vert", "getRelativeConstraints", "relativeConstraints", "posToStr", "pos", "strToPos", "p", "invSpatialMap", "queue", "visited", "directions", "curr", "currId", "currPos", "shift", "newPos", "newId", "ArchitectureDirectionName", "getOppositeArchitectureDirection", "layoutArchitecture", "resolve", "renderEl", "select_default", "cytoscape", "alignmentConstraint", "relativePlacementConstraint", "layout", "nodeA", "nodeB", "parentA", "parentB", "getSegmentWeights", "source", "target", "pointX", "pointY", "W", "D", "sX", "sY", "tX", "tY", "distAB", "delta1", "delta2", "sEP", "tEP", "sourceDir", "edgeData", "isArchitectureDirectionY", "weights", "distances", "e", "log", "import_cytoscape_fcose", "draw", "renderer", "init_architectureRenderer", "__esmMin", "init_cytoscape_esm", "init_src", "init_logger", "init_icons", "init_selectSvgElement", "init_setupGraphViewbox", "init_architectureIcons", "init_architectureTypes", "init_svgDraw", "registerIconPacks", "architectureIcons", "fcose", "text", "_version", "diagObj", "ds", "svg", "selectSvgElement", "edgesElem", "servicesElem", "groupElem", "drawServices", "drawJunctions", "drawEdges", "drawGroups", "setupGraphViewbox", "architectureDiagram_exports", "__export", "diagram", "init_architectureDiagram", "__esmMin", "init_architectureParser", "init_architectureDb", "init_architectureStyles", "init_architectureRenderer", "parser", "ArchitectureDB", "renderer", "architectureStyles_default", "TreeMapDB", "init_db", "__esmMin", "init_defaultConfig", "init_config", "init_utils", "init_handDrawnShapeStyles", "init_commonDb", "setAccTitle", "getAccTitle", "setDiagramTitle", "getDiagramTitle", "getAccDescription", "setAccDescription", "__name", "defaultConfig", "defaultConfig_default", "userConfig", "getConfig", "cleanAndMerge", "node", "level", "id", "_style", "styleClass", "styles", "s", "isLabelStyle", "classSelector", "clear", "buildHierarchy", "items", "root", "stack", "item", "node", "parent", "init_utils", "__esmMin", "__name", "populate", "getItemName", "parser", "init_parser", "__esmMin", "init_mermaid_parser_core", "init_logger", "init_populateCommonDb", "init_utils", "init_db", "__name", "ast", "db", "populateCommonDb", "items", "row", "item", "level", "name", "styles", "cssCompiledStyles", "itemData", "hierarchyNodes", "buildHierarchy", "addNodesRecursively", "nodes", "node", "text", "parse", "log", "TreeMapDB", "error", "DEFAULT_INNER_PADDING", "SECTION_INNER_PADDING", "SECTION_HEADER_HEIGHT", "draw", "getClasses", "renderer", "init_renderer", "__esmMin", "init_selectSvgElement", "init_setupViewPortForSVG", "init_setupGraphViewbox", "init_src", "init_handDrawnShapeStyles", "init_config", "init_logger", "__name", "_text", "id", "_version", "diagram", "treemapDb", "config", "treemapInnerPadding", "title", "root", "themeVariables", "getConfig", "titleHeight", "svg", "selectSvgElement", "width", "height", "svgWidth", "svgHeight", "configureSvgSize", "valueFormat", "formatStr", "value", "format", "precision", "precisionStr", "restOfFormat", "error", "log", "colorScale", "ordinal", "colorScalePeer", "colorScaleLabel", "g", "hierarchyRoot", "hierarchy", "d", "a", "b", "treemapData", "treemap_default", "branchNodes", "sections", "_d", "i", "styles", "styles2String", "labelStyles", "self", "select_default", "originalText", "totalHeaderWidth", "labelXPosition", "spaceForTextContent", "actualAvailableWidth", "textNode", "currentTruncatedText", "leafNodes", "cell", "nodeWidth", "nodeHeight", "padding", "availableWidth", "availableHeight", "currentLabelFontSize", "minLabelFontSize", "originalValueRelFontSize", "valueScaleFactor", "minValueFontSize", "spacingBetweenLabelAndValue", "prospectiveValueFontSize", "combinedHeight", "valueTextElement", "parentCellNode", "labelElement", "finalLabelFontSize", "originalValueFontSize", "actualValueFontSize", "valueTopActualY", "maxValueBottomY", "availableWidthForValue", "diagramPadding", "setupViewPortForSVG", "diagramObj", "defaultTreemapStyleOptions", "getStyles", "styles_default", "init_styles", "__esmMin", "init_utils", "__name", "treemap", "options", "cleanAndMerge", "diagram_exports", "__export", "diagram", "init_diagram", "__esmMin", "init_db", "init_parser", "init_renderer", "init_styles", "parser", "TreeMapDB", "renderer", "styles_default", "mermaid_exports", "__export", "mermaid_default", "init_icons", "init_esm", "init_detectType", "detector", "__name", "txt", "loader", "diagram", "plugin", "c4Detector_default", "id", "detector", "__name", "txt", "config", "loader", "diagram", "plugin", "flowDetector_default", "id", "detector", "__name", "txt", "config", "loader", "diagram", "plugin", "flowDetector_v2_default", "detector", "__name", "txt", "loader", "diagram", "plugin", "erDetector_default", "id", "detector", "__name", "txt", "loader", "diagram", "plugin", "gitGraphDetector_default", "id", "detector", "__name", "txt", "loader", "diagram", "plugin", "ganttDetector_default", "id", "detector", "__name", "txt", "loader", "diagram", "info", "detector", "__name", "txt", "loader", "diagram", "pie", "id", "detector", "__name", "txt", "loader", "diagram", "plugin", "quadrantDetector_default", "id", "detector", "__name", "txt", "loader", "diagram", "plugin", "xychartDetector_default", "id", "detector", "__name", "txt", "loader", "diagram", "plugin", "requirementDetector_default", "id", "detector", "__name", "txt", "loader", "diagram", "plugin", "sequenceDetector_default", "id", "detector", "__name", "txt", "config", "loader", "diagram", "plugin", "classDetector_default", "id", "detector", "__name", "txt", "config", "loader", "diagram", "plugin", "classDetector_V2_default", "id", "detector", "__name", "txt", "config", "loader", "diagram", "plugin", "stateDetector_default", "id", "detector", "__name", "txt", "config", "loader", "diagram", "plugin", "stateDetector_V2_default", "id", "detector", "__name", "txt", "loader", "diagram", "plugin", "journeyDetector_default", "init_logger", "init_selectSvgElement", "init_setupGraphViewbox", "draw", "__name", "_text", "id", "version", "log", "svg", "selectSvgElement", "g", "configureSvgSize", "renderer", "errorRenderer_default", "diagram", "renderer", "__name", "errorDiagram_default", "id", "detector", "__name", "txt", "config", "loader", "diagram", "plugin", "detector_default", "id", "detector", "__name", "txt", "loader", "diagram", "plugin", "detector_default", "id", "detector", "__name", "txt", "loader", "diagram", "plugin", "detector_default", "id", "detector", "__name", "txt", "loader", "diagram", "plugin", "detector_default", "id", "detector", "__name", "txt", "loader", "diagram", "plugin", "sankeyDetector_default", "id", "detector", "__name", "txt", "loader", "diagram", "packet", "id", "detector", "__name", "txt", "loader", "diagram", "radar", "id", "detector", "__name", "txt", "loader", "diagram", "plugin", "blockDetector_default", "id", "detector", "__name", "txt", "loader", "diagram", "architecture", "architectureDetector_default", "init_detectType", "init_diagramAPI", "id", "detector", "__name", "txt", "loader", "diagram", "treemap", "hasLoadedDiagrams", "addDiagrams", "__name", "registerDiagram", "errorDiagram_default", "text", "registerLazyLoadedDiagrams", "detector_default", "architectureDetector_default", "c4Detector_default", "classDetector_V2_default", "classDetector_default", "erDetector_default", "ganttDetector_default", "info", "pie", "requirementDetector_default", "sequenceDetector_default", "flowDetector_v2_default", "flowDetector_default", "gitGraphDetector_default", "stateDetector_V2_default", "stateDetector_default", "journeyDetector_default", "quadrantDetector_default", "sankeyDetector_default", "packet", "xychartDetector_default", "blockDetector_default", "radar", "treemap", "init_logger", "init_detectType", "init_diagramAPI", "loadRegisteredDiagrams", "__name", "log", "failed", "detectors", "key", "detector", "loader", "getDiagram", "diagram", "id", "registerDiagram", "err", "result", "res", "init_logger", "init_src", "COMMENT", "RULESET", "DECLARATION", "IMPORT", "NAMESPACE", "KEYFRAMES", "LAYER", "abs", "from", "trim", "value", "__name", "replace", "value", "pattern", "replacement", "__name", "indexof", "search", "position", "charat", "index", "substr", "begin", "end", "strlen", "sizeof", "append", "array", "line", "column", "length", "position", "character", "characters", "node", "value", "root", "parent", "type", "props", "children", "siblings", "__name", "char", "character", "__name", "prev", "position", "charat", "characters", "column", "line", "next", "length", "peek", "caret", "slice", "begin", "end", "substr", "token", "type", "alloc", "value", "strlen", "dealloc", "delimit", "trim", "delimiter", "whitespace", "type", "character", "peek", "next", "token", "__name", "escaping", "index", "count", "next", "character", "slice", "caret", "peek", "__name", "delimiter", "type", "position", "commenter", "from", "identifier", "token", "compile", "value", "dealloc", "parse", "alloc", "__name", "root", "parent", "rule", "rules", "rulesets", "pseudo", "points", "declarations", "index", "offset", "length", "atrule", "property", "previous", "variable", "scanning", "ampersand", "character", "type", "props", "children", "reference", "characters", "next", "charat", "indexof", "replace", "delimit", "abs", "whitespace", "escaping", "caret", "peek", "append", "comment", "commenter", "token", "strlen", "substr", "declaration", "ruleset", "prev", "from", "identifier", "siblings", "post", "size", "sizeof", "i", "j", "k", "x", "y", "z", "trim", "node", "RULESET", "COMMENT", "char", "DECLARATION", "serialize", "children", "callback", "output", "i", "__name", "stringify", "element", "index", "LAYER", "IMPORT", "NAMESPACE", "DECLARATION", "COMMENT", "KEYFRAMES", "RULESET", "strlen", "init_purify_es", "init_isEmpty", "init_package", "SVG_ROLE", "setA11yDiagramInfo", "svg", "diagramType", "__name", "addSVGa11yTitleDescription", "a11yTitle", "a11yDesc", "baseId", "descId", "titleId", "init_assignWithDepth", "init_config", "init_config", "init_diagramAPI", "init_detectType", "init_errors", "init_utils", "Diagram", "_Diagram", "type", "text", "db", "parser", "renderer", "__name", "metadata", "config", "getConfig", "detectType", "encodeEntities", "getDiagram", "loader", "getDiagramLoader", "UnknownDiagramError", "id", "diagram", "registerDiagram", "init", "version", "init_common", "interactionFunctions", "attachFunctions", "__name", "interactionFunctions", "f", "init_logger", "cleanupComments", "__name", "text", "init_regexes", "init_js_yaml", "extractFrontMatter", "text", "matches", "frontMatterRegex", "parsed", "load", "JSON_SCHEMA", "metadata", "__name", "init_utils", "cleanupText", "__name", "code", "match", "tag", "attributes", "processFrontmatter", "text", "metadata", "extractFrontMatter", "displayMode", "title", "config", "processDirectives", "initDirective", "utils_default", "wrapDirectives", "type", "removeDirectives", "preprocessDiagram", "cleanedCode", "frontMatterResult", "directiveResult", "cleanAndMerge", "cleanupComments", "init_styles", "init_themes", "init_utils", "toBase64", "str", "utf8Bytes", "utf8Str", "byte", "__name", "MAX_TEXTLENGTH", "MAX_TEXTLENGTH_EXCEEDED_MSG", "SECURITY_LVL_SANDBOX", "SECURITY_LVL_LOOSE", "XMLNS_SVG_STD", "XMLNS_XLINK_STD", "XMLNS_XHTML_STD", "IFRAME_WIDTH", "IFRAME_HEIGHT", "IFRAME_STYLES", "IFRAME_BODY_STYLE", "IFRAME_SANDBOX_OPTS", "IFRAME_NOT_SUPPORTED_MSG", "DOMPURIFY_TAGS", "DOMPURIFY_ATTR", "processAndSetConfigs", "text", "processed", "preprocessDiagram", "reset", "addDirective", "__name", "parse", "parseOptions", "addDiagrams", "code", "config", "getDiagramFromText", "error", "cssImportantStyles", "cssClass", "element", "cssClasses", "createCssStyles", "classDefs", "cssStyles", "cssElements", "styleClassDef", "isEmpty_default", "cssElement", "s", "createUserStyles", "graphType", "svgId", "userCSSstyles", "allStyles", "styles_default", "serialize", "compile", "stringify", "cleanUpSvgCode", "svgCode", "inSandboxMode", "useArrowMarkerUrls", "cleanedUpSvg", "decodeEntities", "putIntoIFrame", "svgElement", "height", "base64encodedSrc", "toBase64", "appendDivSvgG", "parentRoot", "id", "enclosingDivId", "divStyle", "svgXlink", "enclosingDiv", "svgNode", "sandboxedIframe", "parentNode", "iFrameId", "removeExistingElements", "doc", "divId", "render", "svgContainingElement", "getConfig", "log", "idSelector", "iFrameID", "iFrameID_selector", "enclosingDivID", "enclosingDivID_selector", "removeTempElements", "node", "select_default", "isSandboxed", "root", "isLooseSecurityLevel", "fontFamily", "iframe", "diag", "parseEncounteredException", "Diagram", "diagramType", "svg", "firstChild", "diagramClassDefs", "rules", "style1", "package_default", "e", "errorRenderer_default", "a11yTitle", "a11yDescr", "addA11yInfo", "evaluate", "svgEl", "purify", "attachFunctions", "initialize", "userOptions", "options", "assignWithDepth_default", "saveConfigFromInitialize", "themes_default", "setSiteConfig", "getSiteConfig", "setLogLevel", "metadata", "setA11yDiagramInfo", "addSVGa11yTitleDescription", "mermaidAPI", "setConfig", "updateSiteConfig", "defaultConfig", "init_render", "init_utils", "handleError", "__name", "error", "errors", "parseError", "log", "isDetailedError", "run", "options", "runThrowsErrors", "mermaid", "postRenderCallback", "querySelector", "nodes", "conf", "mermaidAPI", "nodesToProcess", "idGenerator", "utils_default", "txt", "element", "id", "dedent", "init", "svg", "bindFunctions", "render", "initialize", "config", "callback", "runOptions", "registerExternalDiagrams", "diagrams", "lazyLoad", "addDiagrams", "registerLazyLoadedDiagrams", "loadRegisteredDiagrams", "contentLoaded", "startOnLoad", "err", "setParseErrorHandler", "parseErrorHandler", "executionQueue", "executionQueueRunning", "executeQueue", "f", "parse", "text", "parseOptions", "resolve", "reject", "performCall", "res", "rej", "r", "e", "container", "getRegisteredDiagramsMetadata", "detectors", "registerLayoutLoaders", "detectType", "registerIconPacks", "mermaid_default"] +} diff --git a/perlite/.js/perlite.js b/perlite/.js/perlite.js index 226c8b23..fe3488ca 100644 --- a/perlite/.js/perlite.js +++ b/perlite/.js/perlite.js @@ -9,19 +9,21 @@ //// load default settings -// define perlite location on webserver -//var uriPath = '/perlite/' -var uriPath = '/' - // define home file var homeFile = "README"; if ($('#index').data('option')) { - homeFile = $('#index').data('option'); } +// define uri path +var uriPath = '/' + +if ($('#uri_path').data('option')) { + uriPath = $('#uri_path').data('option'); +} + // disable pophovers if ($('#disablePopHovers').data('option') == true && localStorage.getItem("disablePopUp") === null) { @@ -235,16 +237,16 @@ function getContent(str, home = false, popHover = false, anchor = "") { } // add Tag section - $('#tags').html("") + $('#mytags').html("") $('.tag').each(function (index) { const count = index + 1; const originalHTML = $(this).prop('outerHTML'); const countTag = '
    ' + count + '
    '; - $('#tags').append(originalHTML); + $('#mytags').append(originalHTML); }); // hide them when no tags are found - if ($('#tags').html() == "") { + if ($('#mytags').html() == "") { $('#tags_container').css('display', 'none') } else { $('#tags_container').css('display', 'block') @@ -375,7 +377,13 @@ function getContent(str, home = false, popHover = false, anchor = "") { var target = urlParams.get('link'); target = encodeURIComponent(target); } else { - target = unslugURL(window.location.pathname) + target = unslugURL(this.pathname) + target = encodeURIComponent(target); + } + + + if (this.href.split('#').length > 1) { + return; } // get content of link @@ -394,15 +402,19 @@ function getContent(str, home = false, popHover = false, anchor = "") { } mdContent = $("#mdContent")[0] - // handle pop up and hover + // handle pop up and hover } else { + + if (result.trim() == "") { + return; + } // set content $("#mdHoverContent").html(result); $("#popUpContent").html(result); // set title - var title = $("div.mdTitleHide")[1].innerText; + var title = $("div.mdTitleHide").eq(1).text() || ""; title = title.substring(1) titleElements = title.split('/') title = titleElements.splice(-1) @@ -448,6 +460,47 @@ function getContent(str, home = false, popHover = false, anchor = "") { } + // Add copyable anchors to all headings (h1–h6) + document.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach((heading) => { + + // Skip if heading already has a copy icon + if (heading.querySelector(".copy-icon")) return; + + // Ensure each heading has an ID (generate one if missing) + if (!heading.id) { + heading.id = heading.textContent + .trim() + .toLowerCase() + .replace(/\s+/g, "-") + .replace(/[^\w-]/g, ""); + } + + // Create the copy icon + const copyLink = document.createElement("span"); + copyLink.className = "copy-icon"; + copyLink.textContent = "#"; + copyLink.title = "Copy link to clipboard"; + + // Append the icon to the heading + heading.appendChild(copyLink); + + // Add click event to copy link + copyLink.addEventListener("click", (event) => { + event.preventDefault(); + const url = `${window.location.origin}${window.location.pathname}#${heading.id}`; + navigator.clipboard.writeText(url); + + // Visual feedback + copyLink.classList.add("copied"); + copyLink.textContent = "✅"; + setTimeout(() => { + copyLink.textContent = "#"; + copyLink.classList.remove("copied"); + }, 1000); + }); + }); + + // run mobile settings isMobile(); @@ -526,6 +579,7 @@ function renderGraph(modal, path = "", filter_emptyNodes = false, show_tags = tr // no graph found exit if ($("#allGraphNodes").length == 0 || $("#allGraphNodes").text == '[]') { console.log("Graph: no data found") + document.getElementById("random_note").style.display = "none"; return; } @@ -1052,10 +1106,11 @@ function openNavMenu(target, openAll = false) { // open nav menu to target var navId = decodeURIComponent(target); - linkname = navId.match(/([^\/]*)\/*$/)[1] - + // search and open tree reverse navId = navId.replace(/[^a-zA-Z0-9\-]/g, '_'); + + navId = 'fileid-' + navId; var next = $('#' + navId).parent().closest('.collapse'); do { @@ -1067,13 +1122,9 @@ function openNavMenu(target, openAll = false) { } while (next.length != 0); + // mark active + $('#' + navId).addClass('perlite-link-active is-active'); - // set focus to link - var searchText = linkname; - - $("div").filter(function () { - return $(this).text() === searchText; - }).parent().addClass('perlite-link-active is-active'); }; diff --git a/perlite/.js/vis-network.min.js b/perlite/.js/vis-network.min.js index 513a4fdb..1e9c02d2 100644 --- a/perlite/.js/vis-network.min.js +++ b/perlite/.js/vis-network.min.js @@ -4,8 +4,8 @@ * * A dynamic, browser-based visualization library. * - * @version 9.1.9 - * @date 2023-11-03T01:44:38.007Z + * @version 9.1.13 + * @date 2025-06-28T12:44:34.651Z * * @copyright (c) 2011-2017 Almende B.V, http://almende.com * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs @@ -23,5 +23,5 @@ * * vis.js may be distributed under either license. */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).vis=t.vis||{})}(this,(function(t){"use strict";var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function i(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var n=function(t){return t&&t.Math===Math&&t},o=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||function(){return this}()||e||Function("return this")(),r=function(t){try{return!!t()}catch(t){return!0}},s=!r((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")})),a=s,h=Function.prototype,l=h.apply,d=h.call,c="object"==typeof Reflect&&Reflect.apply||(a?d.bind(l):function(){return d.apply(l,arguments)}),u=s,f=Function.prototype,p=f.call,v=u&&f.bind.bind(p,p),g=u?v:function(t){return function(){return p.apply(t,arguments)}},y=g,m=y({}.toString),b=y("".slice),w=function(t){return b(m(t),8,-1)},k=w,_=g,x=function(t){if("Function"===k(t))return _(t)},E="object"==typeof document&&document.all,O={all:E,IS_HTMLDDA:void 0===E&&void 0!==E},C=O.all,S=O.IS_HTMLDDA?function(t){return"function"==typeof t||t===C}:function(t){return"function"==typeof t},T={},M=!r((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]})),P=s,D=Function.prototype.call,I=P?D.bind(D):function(){return D.apply(D,arguments)},B={},N={}.propertyIsEnumerable,F=Object.getOwnPropertyDescriptor,z=F&&!N.call({1:2},1);B.f=z?function(t){var e=F(this,t);return!!e&&e.enumerable}:N;var A,j,R=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},L=r,H=w,W=Object,q=g("".split),V=L((function(){return!W("z").propertyIsEnumerable(0)}))?function(t){return"String"===H(t)?q(t,""):W(t)}:W,U=function(t){return null==t},Y=U,X=TypeError,G=function(t){if(Y(t))throw new X("Can't call method on "+t);return t},K=V,$=G,Z=function(t){return K($(t))},Q=S,J=O.all,tt=O.IS_HTMLDDA?function(t){return"object"==typeof t?null!==t:Q(t)||t===J}:function(t){return"object"==typeof t?null!==t:Q(t)},et={},it=et,nt=o,ot=S,rt=function(t){return ot(t)?t:void 0},st=function(t,e){return arguments.length<2?rt(it[t])||rt(nt[t]):it[t]&&it[t][e]||nt[t]&&nt[t][e]},at=g({}.isPrototypeOf),ht="undefined"!=typeof navigator&&String(navigator.userAgent)||"",lt=o,dt=ht,ct=lt.process,ut=lt.Deno,ft=ct&&ct.versions||ut&&ut.version,pt=ft&&ft.v8;pt&&(j=(A=pt.split("."))[0]>0&&A[0]<4?1:+(A[0]+A[1])),!j&&dt&&(!(A=dt.match(/Edge\/(\d+)/))||A[1]>=74)&&(A=dt.match(/Chrome\/(\d+)/))&&(j=+A[1]);var vt=j,gt=vt,yt=r,mt=o.String,bt=!!Object.getOwnPropertySymbols&&!yt((function(){var t=Symbol("symbol detection");return!mt(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&>&><41})),wt=bt&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,kt=st,_t=S,xt=at,Et=Object,Ot=wt?function(t){return"symbol"==typeof t}:function(t){var e=kt("Symbol");return _t(e)&&xt(e.prototype,Et(t))},Ct=String,St=function(t){try{return Ct(t)}catch(t){return"Object"}},Tt=S,Mt=St,Pt=TypeError,Dt=function(t){if(Tt(t))return t;throw new Pt(Mt(t)+" is not a function")},It=Dt,Bt=U,Nt=function(t,e){var i=t[e];return Bt(i)?void 0:It(i)},Ft=I,zt=S,At=tt,jt=TypeError,Rt={exports:{}},Lt=o,Ht=Object.defineProperty,Wt=function(t,e){try{Ht(Lt,t,{value:e,configurable:!0,writable:!0})}catch(i){Lt[t]=e}return e},qt="__core-js_shared__",Vt=o[qt]||Wt(qt,{}),Ut=Vt;(Rt.exports=function(t,e){return Ut[t]||(Ut[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.33.0",mode:"pure",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.0/LICENSE",source:"https://github.com/zloirock/core-js"});var Yt=Rt.exports,Xt=G,Gt=Object,Kt=function(t){return Gt(Xt(t))},$t=Kt,Zt=g({}.hasOwnProperty),Qt=Object.hasOwn||function(t,e){return Zt($t(t),e)},Jt=g,te=0,ee=Math.random(),ie=Jt(1..toString),ne=function(t){return"Symbol("+(void 0===t?"":t)+")_"+ie(++te+ee,36)},oe=Yt,re=Qt,se=ne,ae=bt,he=wt,le=o.Symbol,de=oe("wks"),ce=he?le.for||le:le&&le.withoutSetter||se,ue=function(t){return re(de,t)||(de[t]=ae&&re(le,t)?le[t]:ce("Symbol."+t)),de[t]},fe=I,pe=tt,ve=Ot,ge=Nt,ye=function(t,e){var i,n;if("string"===e&&zt(i=t.toString)&&!At(n=Ft(i,t)))return n;if(zt(i=t.valueOf)&&!At(n=Ft(i,t)))return n;if("string"!==e&&zt(i=t.toString)&&!At(n=Ft(i,t)))return n;throw new jt("Can't convert object to primitive value")},me=TypeError,be=ue("toPrimitive"),we=function(t,e){if(!pe(t)||ve(t))return t;var i,n=ge(t,be);if(n){if(void 0===e&&(e="default"),i=fe(n,t,e),!pe(i)||ve(i))return i;throw new me("Can't convert object to primitive value")}return void 0===e&&(e="number"),ye(t,e)},ke=Ot,_e=function(t){var e=we(t,"string");return ke(e)?e:e+""},xe=tt,Ee=o.document,Oe=xe(Ee)&&xe(Ee.createElement),Ce=function(t){return Oe?Ee.createElement(t):{}},Se=Ce,Te=!M&&!r((function(){return 7!==Object.defineProperty(Se("div"),"a",{get:function(){return 7}}).a})),Me=M,Pe=I,De=B,Ie=R,Be=Z,Ne=_e,Fe=Qt,ze=Te,Ae=Object.getOwnPropertyDescriptor;T.f=Me?Ae:function(t,e){if(t=Be(t),e=Ne(e),ze)try{return Ae(t,e)}catch(t){}if(Fe(t,e))return Ie(!Pe(De.f,t,e),t[e])};var je=r,Re=S,Le=/#|\.prototype\./,He=function(t,e){var i=qe[We(t)];return i===Ue||i!==Ve&&(Re(e)?je(e):!!e)},We=He.normalize=function(t){return String(t).replace(Le,".").toLowerCase()},qe=He.data={},Ve=He.NATIVE="N",Ue=He.POLYFILL="P",Ye=He,Xe=Dt,Ge=s,Ke=x(x.bind),$e=function(t,e){return Xe(t),void 0===e?t:Ge?Ke(t,e):function(){return t.apply(e,arguments)}},Ze={},Qe=M&&r((function(){return 42!==Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),Je=tt,ti=String,ei=TypeError,ii=function(t){if(Je(t))return t;throw new ei(ti(t)+" is not an object")},ni=M,oi=Te,ri=Qe,si=ii,ai=_e,hi=TypeError,li=Object.defineProperty,di=Object.getOwnPropertyDescriptor,ci="enumerable",ui="configurable",fi="writable";Ze.f=ni?ri?function(t,e,i){if(si(t),e=ai(e),si(i),"function"==typeof t&&"prototype"===e&&"value"in i&&fi in i&&!i[fi]){var n=di(t,e);n&&n[fi]&&(t[e]=i.value,i={configurable:ui in i?i[ui]:n[ui],enumerable:ci in i?i[ci]:n[ci],writable:!1})}return li(t,e,i)}:li:function(t,e,i){if(si(t),e=ai(e),si(i),oi)try{return li(t,e,i)}catch(t){}if("get"in i||"set"in i)throw new hi("Accessors not supported");return"value"in i&&(t[e]=i.value),t};var pi=Ze,vi=R,gi=M?function(t,e,i){return pi.f(t,e,vi(1,i))}:function(t,e,i){return t[e]=i,t},yi=o,mi=c,bi=x,wi=S,ki=T.f,_i=Ye,xi=et,Ei=$e,Oi=gi,Ci=Qt,Si=function(t){var e=function(i,n,o){if(this instanceof e){switch(arguments.length){case 0:return new t;case 1:return new t(i);case 2:return new t(i,n)}return new t(i,n,o)}return mi(t,this,arguments)};return e.prototype=t.prototype,e},Ti=function(t,e){var i,n,o,r,s,a,h,l,d,c=t.target,u=t.global,f=t.stat,p=t.proto,v=u?yi:f?yi[c]:(yi[c]||{}).prototype,g=u?xi:xi[c]||Oi(xi,c,{})[c],y=g.prototype;for(r in e)n=!(i=_i(u?r:c+(f?".":"#")+r,t.forced))&&v&&Ci(v,r),a=g[r],n&&(h=t.dontCallGetSet?(d=ki(v,r))&&d.value:v[r]),s=n&&h?h:e[r],n&&typeof a==typeof s||(l=t.bind&&n?Ei(s,yi):t.wrap&&n?Si(s):p&&wi(s)?bi(s):s,(t.sham||s&&s.sham||a&&a.sham)&&Oi(l,"sham",!0),Oi(g,r,l),p&&(Ci(xi,o=c+"Prototype")||Oi(xi,o,{}),Oi(xi[o],r,s),t.real&&y&&(i||!y[r])&&Oi(y,r,s)))},Mi=Math.ceil,Pi=Math.floor,Di=Math.trunc||function(t){var e=+t;return(e>0?Pi:Mi)(e)},Ii=function(t){var e=+t;return e!=e||0===e?0:Di(e)},Bi=Ii,Ni=Math.max,Fi=Math.min,zi=function(t,e){var i=Bi(t);return i<0?Ni(i+e,0):Fi(i,e)},Ai=Ii,ji=Math.min,Ri=function(t){return t>0?ji(Ai(t),9007199254740991):0},Li=function(t){return Ri(t.length)},Hi=Z,Wi=zi,qi=Li,Vi=function(t){return function(e,i,n){var o,r=Hi(e),s=qi(r),a=Wi(n,s);if(t&&i!=i){for(;s>a;)if((o=r[a++])!=o)return!0}else for(;s>a;a++)if((t||a in r)&&r[a]===i)return t||a||0;return!t&&-1}},Ui={includes:Vi(!0),indexOf:Vi(!1)},Yi={},Xi=Qt,Gi=Z,Ki=Ui.indexOf,$i=Yi,Zi=g([].push),Qi=function(t,e){var i,n=Gi(t),o=0,r=[];for(i in n)!Xi($i,i)&&Xi(n,i)&&Zi(r,i);for(;e.length>o;)Xi(n,i=e[o++])&&(~Ki(r,i)||Zi(r,i));return r},Ji=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],tn=Qi,en=Ji,nn=Object.keys||function(t){return tn(t,en)},on={};on.f=Object.getOwnPropertySymbols;var rn=M,sn=g,an=I,hn=r,ln=nn,dn=on,cn=B,un=Kt,fn=V,pn=Object.assign,vn=Object.defineProperty,gn=sn([].concat),yn=!pn||hn((function(){if(rn&&1!==pn({b:1},pn(vn({},"a",{enumerable:!0,get:function(){vn(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},i=Symbol("assign detection"),n="abcdefghijklmnopqrst";return t[i]=7,n.split("").forEach((function(t){e[t]=t})),7!==pn({},t)[i]||ln(pn({},e)).join("")!==n}))?function(t,e){for(var i=un(t),n=arguments.length,o=1,r=dn.f,s=cn.f;n>o;)for(var a,h=fn(arguments[o++]),l=r?gn(ln(h),r(h)):ln(h),d=l.length,c=0;d>c;)a=l[c++],rn&&!an(s,h,a)||(i[a]=h[a]);return i}:pn,mn=yn;Ti({target:"Object",stat:!0,arity:2,forced:Object.assign!==mn},{assign:mn});var bn=i(et.Object.assign),wn=g([].slice),kn=g,_n=Dt,xn=tt,En=Qt,On=wn,Cn=s,Sn=Function,Tn=kn([].concat),Mn=kn([].join),Pn={},Dn=Cn?Sn.bind:function(t){var e=_n(this),i=e.prototype,n=On(arguments,1),o=function(){var i=Tn(n,On(arguments));return this instanceof o?function(t,e,i){if(!En(Pn,e)){for(var n=[],o=0;o=.1;)(p=+r[c++%s])>d&&(p=d),f=Math.sqrt(p*p/(1+l*l)),e+=f=a<0?-f:f,i+=l*f,!0===u?t.lineTo(e,i):t.moveTo(e,i),d-=p,u=!u}var Xn={circle:Wn,dashedLine:Yn,database:Un,diamond:function(t,e,i,n){t.beginPath(),t.lineTo(e,i+n),t.lineTo(e+n,i),t.lineTo(e,i-n),t.lineTo(e-n,i),t.closePath()},ellipse:Vn,ellipse_vis:Vn,hexagon:function(t,e,i,n){t.beginPath();var o=2*Math.PI/6;t.moveTo(e+n,i);for(var r=1;r<6;r++)t.lineTo(e+n*Math.cos(o*r),i+n*Math.sin(o*r));t.closePath()},roundRect:qn,square:function(t,e,i,n){t.beginPath(),t.rect(e-n,i-n,2*n,2*n),t.closePath()},star:function(t,e,i,n){t.beginPath(),i+=.1*(n*=.82);for(var o=0;o<10;o++){var r=o%2==0?1.3*n:.5*n;t.lineTo(e+r*Math.sin(2*o*Math.PI/10),i-r*Math.cos(2*o*Math.PI/10))}t.closePath()},triangle:function(t,e,i,n){t.beginPath(),i+=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i-(a-s)),t.lineTo(e+r,i+s),t.lineTo(e-r,i+s),t.lineTo(e,i-(a-s)),t.closePath()},triangleDown:function(t,e,i,n){t.beginPath(),i-=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i+(a-s)),t.lineTo(e+r,i-s),t.lineTo(e-r,i-s),t.lineTo(e,i+(a-s)),t.closePath()}};var Gn={exports:{}};!function(t){function e(t){if(t)return function(t){for(var i in e.prototype)t[i]=e.prototype[i];return t}(t)}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},e.prototype.once=function(t,e){function i(){this.off(t,i),e.apply(this,arguments)}return i.fn=e,this.on(t,i),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i,n=this._callbacks["$"+t];if(!n)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var o=0;o=a?t?"":void 0:(n=yo(r,s))<55296||n>56319||s+1===a||(o=yo(r,s+1))<56320||o>57343?t?go(r,s):n:t?mo(r,s,s+2):o-56320+(n-55296<<10)+65536}},wo={codeAt:bo(!1),charAt:bo(!0)},ko=S,_o=o.WeakMap,xo=ko(_o)&&/native code/.test(String(_o)),Eo=ne,Oo=Yt("keys"),Co=function(t){return Oo[t]||(Oo[t]=Eo(t))},So=xo,To=o,Mo=tt,Po=gi,Do=Qt,Io=Vt,Bo=Co,No=Yi,Fo="Object already initialized",zo=To.TypeError,Ao=To.WeakMap;if(So||Io.state){var jo=Io.state||(Io.state=new Ao);jo.get=jo.get,jo.has=jo.has,jo.set=jo.set,Zn=function(t,e){if(jo.has(t))throw new zo(Fo);return e.facade=t,jo.set(t,e),e},Qn=function(t){return jo.get(t)||{}},Jn=function(t){return jo.has(t)}}else{var Ro=Bo("state");No[Ro]=!0,Zn=function(t,e){if(Do(t,Ro))throw new zo(Fo);return e.facade=t,Po(t,Ro,e),e},Qn=function(t){return Do(t,Ro)?t[Ro]:{}},Jn=function(t){return Do(t,Ro)}}var Lo={set:Zn,get:Qn,has:Jn,enforce:function(t){return Jn(t)?Qn(t):Zn(t,{})},getterFor:function(t){return function(e){var i;if(!Mo(e)||(i=Qn(e)).type!==t)throw new zo("Incompatible receiver, "+t+" required");return i}}},Ho=M,Wo=Qt,qo=Function.prototype,Vo=Ho&&Object.getOwnPropertyDescriptor,Uo=Wo(qo,"name"),Yo={EXISTS:Uo,PROPER:Uo&&"something"===function(){}.name,CONFIGURABLE:Uo&&(!Ho||Ho&&Vo(qo,"name").configurable)},Xo={},Go=M,Ko=Qe,$o=Ze,Zo=ii,Qo=Z,Jo=nn;Xo.f=Go&&!Ko?Object.defineProperties:function(t,e){Zo(t);for(var i,n=Qo(e),o=Jo(e),r=o.length,s=0;r>s;)$o.f(t,i=o[s++],n[i]);return t};var tr,er=st("document","documentElement"),ir=ii,nr=Xo,or=Ji,rr=Yi,sr=er,ar=Ce,hr="prototype",lr="script",dr=Co("IE_PROTO"),cr=function(){},ur=function(t){return"<"+lr+">"+t+""},fr=function(t){t.write(ur("")),t.close();var e=t.parentWindow.Object;return t=null,e},pr=function(){try{tr=new ActiveXObject("htmlfile")}catch(t){}var t,e,i;pr="undefined"!=typeof document?document.domain&&tr?fr(tr):(e=ar("iframe"),i="java"+lr+":",e.style.display="none",sr.appendChild(e),e.src=String(i),(t=e.contentWindow.document).open(),t.write(ur("document.F=Object")),t.close(),t.F):fr(tr);for(var n=or.length;n--;)delete pr[hr][or[n]];return pr()};rr[dr]=!0;var vr,gr,yr,mr=Object.create||function(t,e){var i;return null!==t?(cr[hr]=ir(t),i=new cr,cr[hr]=null,i[dr]=t):i=pr(),void 0===e?i:nr.f(i,e)},br=!r((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype})),wr=Qt,kr=S,_r=Kt,xr=br,Er=Co("IE_PROTO"),Or=Object,Cr=Or.prototype,Sr=xr?Or.getPrototypeOf:function(t){var e=_r(t);if(wr(e,Er))return e[Er];var i=e.constructor;return kr(i)&&e instanceof i?i.prototype:e instanceof Or?Cr:null},Tr=gi,Mr=function(t,e,i,n){return n&&n.enumerable?t[e]=i:Tr(t,e,i),t},Pr=r,Dr=S,Ir=tt,Br=mr,Nr=Sr,Fr=Mr,zr=ue("iterator"),Ar=!1;[].keys&&("next"in(yr=[].keys())?(gr=Nr(Nr(yr)))!==Object.prototype&&(vr=gr):Ar=!0);var jr=!Ir(vr)||Pr((function(){var t={};return vr[zr].call(t)!==t}));Dr((vr=jr?{}:Br(vr))[zr])||Fr(vr,zr,(function(){return this}));var Rr={IteratorPrototype:vr,BUGGY_SAFARI_ITERATORS:Ar},Lr=ao,Hr=to?{}.toString:function(){return"[object "+Lr(this)+"]"},Wr=to,qr=Ze.f,Vr=gi,Ur=Qt,Yr=Hr,Xr=ue("toStringTag"),Gr=function(t,e,i,n){if(t){var o=i?t:t.prototype;Ur(o,Xr)||qr(o,Xr,{configurable:!0,value:e}),n&&!Wr&&Vr(o,"toString",Yr)}},Kr={},$r=Rr.IteratorPrototype,Zr=mr,Qr=R,Jr=Gr,ts=Kr,es=function(){return this},is=g,ns=Dt,os=S,rs=String,ss=TypeError,as=function(t,e,i){try{return is(ns(Object.getOwnPropertyDescriptor(t,e)[i]))}catch(t){}},hs=ii,ls=function(t){if("object"==typeof t||os(t))return t;throw new ss("Can't set "+rs(t)+" as a prototype")},ds=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,i={};try{(t=as(Object.prototype,"__proto__","set"))(i,[]),e=i instanceof Array}catch(t){}return function(i,n){return hs(i),ls(n),e?t(i,n):i.__proto__=n,i}}():void 0),cs=Ti,us=I,fs=Yo,ps=function(t,e,i,n){var o=e+" Iterator";return t.prototype=Zr($r,{next:Qr(+!n,i)}),Jr(t,o,!1,!0),ts[o]=es,t},vs=Sr,gs=Gr,ys=Mr,ms=Kr,bs=Rr,ws=fs.PROPER,ks=bs.BUGGY_SAFARI_ITERATORS,_s=ue("iterator"),xs="keys",Es="values",Os="entries",Cs=function(){return this},Ss=function(t,e,i,n,o,r,s){ps(i,e,n);var a,h,l,d=function(t){if(t===o&&v)return v;if(!ks&&t&&t in f)return f[t];switch(t){case xs:case Es:case Os:return function(){return new i(this,t)}}return function(){return new i(this)}},c=e+" Iterator",u=!1,f=t.prototype,p=f[_s]||f["@@iterator"]||o&&f[o],v=!ks&&p||d(o),g="Array"===e&&f.entries||p;if(g&&(a=vs(g.call(new t)))!==Object.prototype&&a.next&&(gs(a,c,!0,!0),ms[c]=Cs),ws&&o===Es&&p&&p.name!==Es&&(u=!0,v=function(){return us(p,this)}),o)if(h={values:d(Es),keys:r?v:d(xs),entries:d(Os)},s)for(l in h)(ks||u||!(l in f))&&ys(f,l,h[l]);else cs({target:e,proto:!0,forced:ks||u},h);return s&&f[_s]!==v&&ys(f,_s,v,{name:o}),ms[e]=v,h},Ts=function(t,e){return{value:t,done:e}},Ms=wo.charAt,Ps=co,Ds=Lo,Is=Ss,Bs=Ts,Ns="String Iterator",Fs=Ds.set,zs=Ds.getterFor(Ns);Is(String,"String",(function(t){Fs(this,{type:Ns,string:Ps(t),index:0})}),(function(){var t,e=zs(this),i=e.string,n=e.index;return n>=i.length?Bs(void 0,!0):(t=Ms(i,n),e.index+=t.length,Bs(t,!1))}));var As=I,js=ii,Rs=Nt,Ls=function(t,e,i){var n,o;js(t);try{if(!(n=Rs(t,"return"))){if("throw"===e)throw i;return i}n=As(n,t)}catch(t){o=!0,n=t}if("throw"===e)throw i;if(o)throw n;return js(n),i},Hs=ii,Ws=Ls,qs=Kr,Vs=ue("iterator"),Us=Array.prototype,Ys=function(t){return void 0!==t&&(qs.Array===t||Us[Vs]===t)},Xs=S,Gs=Vt,Ks=g(Function.toString);Xs(Gs.inspectSource)||(Gs.inspectSource=function(t){return Ks(t)});var $s=Gs.inspectSource,Zs=g,Qs=r,Js=S,ta=ao,ea=$s,ia=function(){},na=[],oa=st("Reflect","construct"),ra=/^\s*(?:class|function)\b/,sa=Zs(ra.exec),aa=!ra.test(ia),ha=function(t){if(!Js(t))return!1;try{return oa(ia,na,t),!0}catch(t){return!1}},la=function(t){if(!Js(t))return!1;switch(ta(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return aa||!!sa(ra,ea(t))}catch(t){return!0}};la.sham=!0;var da=!oa||Qs((function(){var t;return ha(ha.call)||!ha(Object)||!ha((function(){t=!0}))||t}))?la:ha,ca=_e,ua=Ze,fa=R,pa=function(t,e,i){var n=ca(e);n in t?ua.f(t,n,fa(0,i)):t[n]=i},va=ao,ga=Nt,ya=U,ma=Kr,ba=ue("iterator"),wa=function(t){if(!ya(t))return ga(t,ba)||ga(t,"@@iterator")||ma[va(t)]},ka=I,_a=Dt,xa=ii,Ea=St,Oa=wa,Ca=TypeError,Sa=function(t,e){var i=arguments.length<2?Oa(t):e;if(_a(i))return xa(ka(i,t));throw new Ca(Ea(t)+" is not iterable")},Ta=$e,Ma=I,Pa=Kt,Da=function(t,e,i,n){try{return n?e(Hs(i)[0],i[1]):e(i)}catch(e){Ws(t,"throw",e)}},Ia=Ys,Ba=da,Na=Li,Fa=pa,za=Sa,Aa=wa,ja=Array,Ra=ue("iterator"),La=!1;try{var Ha=0,Wa={next:function(){return{done:!!Ha++}},return:function(){La=!0}};Wa[Ra]=function(){return this},Array.from(Wa,(function(){throw 2}))}catch(t){}var qa=function(t,e){try{if(!e&&!La)return!1}catch(t){return!1}var i=!1;try{var n={};n[Ra]=function(){return{next:function(){return{done:i=!0}}}},t(n)}catch(t){}return i},Va=function(t){var e=Pa(t),i=Ba(this),n=arguments.length,o=n>1?arguments[1]:void 0,r=void 0!==o;r&&(o=Ta(o,n>2?arguments[2]:void 0));var s,a,h,l,d,c,u=Aa(e),f=0;if(!u||this===ja&&Ia(u))for(s=Na(e),a=i?new this(s):ja(s);s>f;f++)c=r?o(e[f],f):e[f],Fa(a,f,c);else for(d=(l=za(e,u)).next,a=i?new this:[];!(h=Ma(d,l)).done;f++)c=r?Da(l,o,[h.value,f],!0):h.value,Fa(a,f,c);return a.length=f,a};Ti({target:"Array",stat:!0,forced:!qa((function(t){Array.from(t)}))},{from:Va});var Ua=et.Array.from,Ya=i(Ua),Xa=Z,Ga=Kr,Ka=Lo;Ze.f;var $a=Ss,Za=Ts,Qa="Array Iterator",Ja=Ka.set,th=Ka.getterFor(Qa);$a(Array,"Array",(function(t,e){Ja(this,{type:Qa,target:Xa(t),index:0,kind:e})}),(function(){var t=th(this),e=t.target,i=t.kind,n=t.index++;if(!e||n>=e.length)return t.target=void 0,Za(void 0,!0);switch(i){case"keys":return Za(n,!1);case"values":return Za(e[n],!1)}return Za([n,e[n]],!1)}),"values"),Ga.Arguments=Ga.Array;var eh=wa,ih={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},nh=o,oh=ao,rh=gi,sh=Kr,ah=ue("toStringTag");for(var hh in ih){var lh=nh[hh],dh=lh&&lh.prototype;dh&&oh(dh)!==ah&&rh(dh,ah,hh),sh[hh]=sh.Array}var ch=eh,uh=i(ch),fh=i(ch);function ph(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var vh={exports:{}},gh=Ti,yh=M,mh=Ze.f;gh({target:"Object",stat:!0,forced:Object.defineProperty!==mh,sham:!yh},{defineProperty:mh});var bh=et.Object,wh=vh.exports=function(t,e,i){return bh.defineProperty(t,e,i)};bh.defineProperty.sham&&(wh.sham=!0);var kh=vh.exports,_h=kh,xh=i(_h),Eh=w,Oh=Array.isArray||function(t){return"Array"===Eh(t)},Ch=TypeError,Sh=function(t){if(t>9007199254740991)throw Ch("Maximum allowed index exceeded");return t},Th=Oh,Mh=da,Ph=tt,Dh=ue("species"),Ih=Array,Bh=function(t){var e;return Th(t)&&(e=t.constructor,(Mh(e)&&(e===Ih||Th(e.prototype))||Ph(e)&&null===(e=e[Dh]))&&(e=void 0)),void 0===e?Ih:e},Nh=function(t,e){return new(Bh(t))(0===e?0:e)},Fh=r,zh=vt,Ah=ue("species"),jh=function(t){return zh>=51||!Fh((function(){var e=[];return(e.constructor={})[Ah]=function(){return{foo:1}},1!==e[t](Boolean).foo}))},Rh=Ti,Lh=r,Hh=Oh,Wh=tt,qh=Kt,Vh=Li,Uh=Sh,Yh=pa,Xh=Nh,Gh=jh,Kh=vt,$h=ue("isConcatSpreadable"),Zh=Kh>=51||!Lh((function(){var t=[];return t[$h]=!1,t.concat()[0]!==t})),Qh=function(t){if(!Wh(t))return!1;var e=t[$h];return void 0!==e?!!e:Hh(t)};Rh({target:"Array",proto:!0,arity:1,forced:!Zh||!Gh("concat")},{concat:function(t){var e,i,n,o,r,s=qh(this),a=Xh(s,0),h=0;for(e=-1,n=arguments.length;em;m++)if((a||m in v)&&(f=g(u=v[m],m,p),t))if(e)w[m]=f;else if(f)switch(t){case 3:return!0;case 5:return u;case 6:return m;case 2:Bl(w,u)}else switch(t){case 4:return!1;case 7:Bl(w,u)}return r?-1:n||o?o:w}},Fl={forEach:Nl(0),map:Nl(1),filter:Nl(2),some:Nl(3),every:Nl(4),find:Nl(5),findIndex:Nl(6),filterReject:Nl(7)},zl=Ti,Al=o,jl=I,Rl=g,Ll=M,Hl=bt,Wl=r,ql=Qt,Vl=at,Ul=ii,Yl=Z,Xl=_e,Gl=co,Kl=R,$l=mr,Zl=nn,Ql=Jh,Jl=il,td=on,ed=T,id=Ze,nd=Xo,od=B,rd=Mr,sd=vl,ad=Yt,hd=Yi,ld=ne,dd=ue,cd=gl,ud=_l,fd=Sl,pd=Gr,vd=Lo,gd=Fl.forEach,yd=Co("hidden"),md="Symbol",bd="prototype",wd=vd.set,kd=vd.getterFor(md),_d=Object[bd],xd=Al.Symbol,Ed=xd&&xd[bd],Od=Al.RangeError,Cd=Al.TypeError,Sd=Al.QObject,Td=ed.f,Md=id.f,Pd=Jl.f,Dd=od.f,Id=Rl([].push),Bd=ad("symbols"),Nd=ad("op-symbols"),Fd=ad("wks"),zd=!Sd||!Sd[bd]||!Sd[bd].findChild,Ad=function(t,e,i){var n=Td(_d,e);n&&delete _d[e],Md(t,e,i),n&&t!==_d&&Md(_d,e,n)},jd=Ll&&Wl((function(){return 7!==$l(Md({},"a",{get:function(){return Md(this,"a",{value:7}).a}})).a}))?Ad:Md,Rd=function(t,e){var i=Bd[t]=$l(Ed);return wd(i,{type:md,tag:t,description:e}),Ll||(i.description=e),i},Ld=function(t,e,i){t===_d&&Ld(Nd,e,i),Ul(t);var n=Xl(e);return Ul(i),ql(Bd,n)?(i.enumerable?(ql(t,yd)&&t[yd][n]&&(t[yd][n]=!1),i=$l(i,{enumerable:Kl(0,!1)})):(ql(t,yd)||Md(t,yd,Kl(1,{})),t[yd][n]=!0),jd(t,n,i)):Md(t,n,i)},Hd=function(t,e){Ul(t);var i=Yl(e),n=Zl(i).concat(Ud(i));return gd(n,(function(e){Ll&&!jl(Wd,i,e)||Ld(t,e,i[e])})),t},Wd=function(t){var e=Xl(t),i=jl(Dd,this,e);return!(this===_d&&ql(Bd,e)&&!ql(Nd,e))&&(!(i||!ql(this,e)||!ql(Bd,e)||ql(this,yd)&&this[yd][e])||i)},qd=function(t,e){var i=Yl(t),n=Xl(e);if(i!==_d||!ql(Bd,n)||ql(Nd,n)){var o=Td(i,n);return!o||!ql(Bd,n)||ql(i,yd)&&i[yd][n]||(o.enumerable=!0),o}},Vd=function(t){var e=Pd(Yl(t)),i=[];return gd(e,(function(t){ql(Bd,t)||ql(hd,t)||Id(i,t)})),i},Ud=function(t){var e=t===_d,i=Pd(e?Nd:Yl(t)),n=[];return gd(i,(function(t){!ql(Bd,t)||e&&!ql(_d,t)||Id(n,Bd[t])})),n};Hl||(xd=function(){if(Vl(Ed,this))throw new Cd("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?Gl(arguments[0]):void 0,e=ld(t),i=function(t){this===_d&&jl(i,Nd,t),ql(this,yd)&&ql(this[yd],e)&&(this[yd][e]=!1);var n=Kl(1,t);try{jd(this,e,n)}catch(t){if(!(t instanceof Od))throw t;Ad(this,e,n)}};return Ll&&zd&&jd(_d,e,{configurable:!0,set:i}),Rd(e,t)},rd(Ed=xd[bd],"toString",(function(){return kd(this).tag})),rd(xd,"withoutSetter",(function(t){return Rd(ld(t),t)})),od.f=Wd,id.f=Ld,nd.f=Hd,ed.f=qd,Ql.f=Jl.f=Vd,td.f=Ud,cd.f=function(t){return Rd(dd(t),t)},Ll&&sd(Ed,"description",{configurable:!0,get:function(){return kd(this).description}})),zl({global:!0,constructor:!0,wrap:!0,forced:!Hl,sham:!Hl},{Symbol:xd}),gd(Zl(Fd),(function(t){ud(t)})),zl({target:md,stat:!0,forced:!Hl},{useSetter:function(){zd=!0},useSimple:function(){zd=!1}}),zl({target:"Object",stat:!0,forced:!Hl,sham:!Ll},{create:function(t,e){return void 0===e?$l(t):Hd($l(t),e)},defineProperty:Ld,defineProperties:Hd,getOwnPropertyDescriptor:qd}),zl({target:"Object",stat:!0,forced:!Hl},{getOwnPropertyNames:Vd}),fd(),pd(xd,md),hd[yd]=!0;var Yd=bt&&!!Symbol.for&&!!Symbol.keyFor,Xd=Ti,Gd=st,Kd=Qt,$d=co,Zd=Yt,Qd=Yd,Jd=Zd("string-to-symbol-registry"),tc=Zd("symbol-to-string-registry");Xd({target:"Symbol",stat:!0,forced:!Qd},{for:function(t){var e=$d(t);if(Kd(Jd,e))return Jd[e];var i=Gd("Symbol")(e);return Jd[e]=i,tc[i]=e,i}});var ec=Ti,ic=Qt,nc=Ot,oc=St,rc=Yd,sc=Yt("symbol-to-string-registry");ec({target:"Symbol",stat:!0,forced:!rc},{keyFor:function(t){if(!nc(t))throw new TypeError(oc(t)+" is not a symbol");if(ic(sc,t))return sc[t]}});var ac=Oh,hc=S,lc=w,dc=co,cc=g([].push),uc=Ti,fc=st,pc=c,vc=I,gc=g,yc=r,mc=S,bc=Ot,wc=wn,kc=function(t){if(hc(t))return t;if(ac(t)){for(var e=t.length,i=[],n=0;nt.length)&&(e=t.length);for(var i=0,n=new Array(e);i1?arguments[1]:void 0)}});var Bf=Nn("Array").map,Nf=at,Ff=Bf,zf=Array.prototype,Af=function(t){var e=t.map;return t===zf||Nf(zf,t)&&e===zf.map?Ff:e},jf=i(Af),Rf=Kt,Lf=nn;Ti({target:"Object",stat:!0,forced:r((function(){Lf(1)}))},{keys:function(t){return Lf(Rf(t))}});var Hf=i(et.Object.keys),Wf=Ti,qf=Date,Vf=g(qf.prototype.getTime);Wf({target:"Date",stat:!0},{now:function(){return Vf(new qf)}});var Uf=i(et.Date.now),Yf=r,Xf=function(t,e){var i=[][t];return!!i&&Yf((function(){i.call(null,e||function(){return 1},1)}))},Gf=Fl.forEach,Kf=Xf("forEach")?[].forEach:function(t){return Gf(this,t,arguments.length>1?arguments[1]:void 0)};Ti({target:"Array",proto:!0,forced:[].forEach!==Kf},{forEach:Kf});var $f=Nn("Array").forEach,Zf=ao,Qf=Qt,Jf=at,tp=$f,ep=Array.prototype,ip={DOMTokenList:!0,NodeList:!0},np=function(t){var e=t.forEach;return t===ep||Jf(ep,t)&&e===ep.forEach||Qf(ip,Zf(t))?tp:e},op=i(np),rp=Ti,sp=Oh,ap=g([].reverse),hp=[1,2];rp({target:"Array",proto:!0,forced:String(hp)===String(hp.reverse())},{reverse:function(){return sp(this)&&(this.length=this.length),ap(this)}});var lp=Nn("Array").reverse,dp=at,cp=lp,up=Array.prototype,fp=function(t){var e=t.reverse;return t===up||dp(up,t)&&e===up.reverse?cp:e},pp=fp,vp=i(pp),gp=St,yp=TypeError,mp=function(t,e){if(!delete t[e])throw new yp("Cannot delete property "+gp(e)+" of "+gp(t))},bp=Ti,wp=Kt,kp=zi,_p=Ii,xp=Li,Ep=Pu,Op=Sh,Cp=Nh,Sp=pa,Tp=mp,Mp=jh("splice"),Pp=Math.max,Dp=Math.min;bp({target:"Array",proto:!0,forced:!Mp},{splice:function(t,e){var i,n,o,r,s,a,h=wp(this),l=xp(h),d=kp(t,l),c=arguments.length;for(0===c?i=n=0:1===c?(i=0,n=l-d):(i=c-2,n=Dp(Pp(_p(e),0),l-d)),Op(l+i-n),o=Cp(h,n),r=0;rl-n+i;r--)Tp(h,r-1)}else if(i>n)for(r=l-n;r>d;r--)a=r+i-1,(s=r+n-1)in h?h[a]=h[s]:Tp(h,a);for(r=0;r1?arguments[1]:void 0)}});var Rp=Nn("Array").includes,Lp=tt,Hp=w,Wp=ue("match"),qp=function(t){var e;return Lp(t)&&(void 0!==(e=t[Wp])?!!e:"RegExp"===Hp(t))},Vp=TypeError,Up=ue("match"),Yp=Ti,Xp=function(t){if(qp(t))throw new Vp("The method doesn't accept regular expressions");return t},Gp=G,Kp=co,$p=function(t){var e=/./;try{"/./"[t](e)}catch(i){try{return e[Up]=!1,"/./"[t](e)}catch(t){}}return!1},Zp=g("".indexOf);Yp({target:"String",proto:!0,forced:!$p("includes")},{includes:function(t){return!!~Zp(Kp(Gp(this)),Kp(Xp(t)),arguments.length>1?arguments[1]:void 0)}});var Qp=Nn("String").includes,Jp=at,tv=Rp,ev=Qp,iv=Array.prototype,nv=String.prototype,ov=function(t){var e=t.includes;return t===iv||Jp(iv,t)&&e===iv.includes?tv:"string"==typeof t||t===nv||Jp(nv,t)&&e===nv.includes?ev:e},rv=i(ov),sv=Kt,av=Sr,hv=br;Ti({target:"Object",stat:!0,forced:r((function(){av(1)})),sham:!hv},{getPrototypeOf:function(t){return av(sv(t))}});var lv=et.Object.getPrototypeOf,dv=i(lv),cv=Fl.filter;Ti({target:"Array",proto:!0,forced:!jh("filter")},{filter:function(t){return cv(this,t,arguments.length>1?arguments[1]:void 0)}});var uv=Nn("Array").filter,fv=at,pv=uv,vv=Array.prototype,gv=function(t){var e=t.filter;return t===vv||fv(vv,t)&&e===vv.filter?pv:e},yv=i(gv),mv=M,bv=r,wv=g,kv=Sr,_v=nn,xv=Z,Ev=wv(B.f),Ov=wv([].push),Cv=mv&&bv((function(){var t=Object.create(null);return t[2]=2,!Ev(t,2)})),Sv=function(t){return function(e){for(var i,n=xv(e),o=_v(n),r=Cv&&null===kv(n),s=o.length,a=0,h=[];s>a;)i=o[a++],mv&&!(r?i in n:Ev(n,i))||Ov(h,t?[i,n[i]]:n[i]);return h}},Tv={entries:Sv(!0),values:Sv(!1)},Mv=Tv.values;Ti({target:"Object",stat:!0},{values:function(t){return Mv(t)}});var Pv=i(et.Object.values),Dv="\t\n\v\f\r                 \u2028\u2029\ufeff",Iv=G,Bv=co,Nv=Dv,Fv=g("".replace),zv=RegExp("^["+Nv+"]+"),Av=RegExp("(^|[^"+Nv+"])["+Nv+"]+$"),jv=function(t){return function(e){var i=Bv(Iv(e));return 1&t&&(i=Fv(i,zv,"")),2&t&&(i=Fv(i,Av,"$1")),i}},Rv={start:jv(1),end:jv(2),trim:jv(3)},Lv=o,Hv=r,Wv=g,qv=co,Vv=Rv.trim,Uv=Dv,Yv=Lv.parseInt,Xv=Lv.Symbol,Gv=Xv&&Xv.iterator,Kv=/^[+-]?0x/i,$v=Wv(Kv.exec),Zv=8!==Yv(Uv+"08")||22!==Yv(Uv+"0x16")||Gv&&!Hv((function(){Yv(Object(Gv))}))?function(t,e){var i=Vv(qv(t));return Yv(i,e>>>0||($v(Kv,i)?16:10))}:Yv;Ti({global:!0,forced:parseInt!==Zv},{parseInt:Zv});var Qv=i(et.parseInt),Jv=Ti,tg=Ui.indexOf,eg=Xf,ig=x([].indexOf),ng=!!ig&&1/ig([1],1,-0)<0;Jv({target:"Array",proto:!0,forced:ng||!eg("indexOf")},{indexOf:function(t){var e=arguments.length>1?arguments[1]:void 0;return ng?ig(this,t,e)||0:tg(this,t,e)}});var og=Nn("Array").indexOf,rg=at,sg=og,ag=Array.prototype,hg=function(t){var e=t.indexOf;return t===ag||rg(ag,t)&&e===ag.indexOf?sg:e},lg=i(hg),dg=Tv.entries;Ti({target:"Object",stat:!0},{entries:function(t){return dg(t)}});var cg=i(et.Object.entries);Ti({target:"Object",stat:!0,sham:!M},{create:mr});var ug=et.Object,fg=function(t,e){return ug.create(t,e)},pg=i(fg),vg=et,gg=c;vg.JSON||(vg.JSON={stringify:JSON.stringify});var yg=function(t,e,i){return gg(vg.JSON.stringify,null,arguments)},mg=i(yg),bg="function"==typeof Bun&&Bun&&"string"==typeof Bun.version,wg=TypeError,kg=function(t,e){if(ti,s=Eg(n)?n:Mg(n),a=r?Sg(arguments,i):[],h=r?function(){xg(s,this,a)}:s;return e?t(h,o):t(h)}:t},Ig=Ti,Bg=o,Ng=Dg(Bg.setInterval,!0);Ig({global:!0,bind:!0,forced:Bg.setInterval!==Ng},{setInterval:Ng});var Fg=Ti,zg=o,Ag=Dg(zg.setTimeout,!0);Fg({global:!0,bind:!0,forced:zg.setTimeout!==Ag},{setTimeout:Ag});var jg=i(et.setTimeout),Rg=Kt,Lg=zi,Hg=Li,Wg=function(t){for(var e=Rg(this),i=Hg(e),n=arguments.length,o=Lg(n>1?arguments[1]:void 0,i),r=n>2?arguments[2]:void 0,s=void 0===r?i:Lg(r,i);s>o;)e[o++]=t;return e};Ti({target:"Array",proto:!0},{fill:Wg});var qg,Vg=Nn("Array").fill,Ug=at,Yg=Vg,Xg=Array.prototype,Gg=function(t){var e=t.fill;return t===Xg||Ug(Xg,t)&&e===Xg.fill?Yg:e},Kg=i(Gg);function $g(){return $g=Object.assign||function(t){for(var e=1;e-1}var jy=function(){function t(t,e){this.manager=t,this.set(e)}var e=t.prototype;return e.set=function(t){t===ly&&(t=this.compute()),hy&&this.manager.element.style&&vy[t]&&(this.manager.element.style[ay]=t),this.actions=t.toLowerCase().trim()},e.update=function(){this.set(this.manager.options.touchAction)},e.compute=function(){var t=[];return Fy(this.manager.recognizers,(function(e){zy(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))})),function(t){if(Ay(t,uy))return uy;var e=Ay(t,fy),i=Ay(t,py);return e&&i?uy:e||i?e?fy:py:Ay(t,cy)?cy:dy}(t.join(" "))},e.preventDefaults=function(t){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)e.preventDefault();else{var n=this.actions,o=Ay(n,uy)&&!vy[uy],r=Ay(n,py)&&!vy[py],s=Ay(n,fy)&&!vy[fy];if(o){var a=1===t.pointers.length,h=t.distance<2,l=t.deltaTime<250;if(a&&h&&l)return}if(!s||!r)return o||r&&i&Py||s&&i&Dy?this.preventSrc(e):void 0}},e.preventSrc=function(t){this.manager.session.prevented=!0,t.preventDefault()},t}();function Ry(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}function Ly(t){var e=t.length;if(1===e)return{x:ny(t[0].clientX),y:ny(t[0].clientY)};for(var i=0,n=0,o=0;o=oy(e)?t<0?Cy:Sy:e<0?Ty:My}function Uy(t,e,i){return{x:e/t||0,y:i/t||0}}function Yy(t,e){var i=t.session,n=e.pointers,o=n.length;i.firstInput||(i.firstInput=Hy(e)),o>1&&!i.firstMultiple?i.firstMultiple=Hy(e):1===o&&(i.firstMultiple=!1);var r=i.firstInput,s=i.firstMultiple,a=s?s.center:r.center,h=e.center=Ly(n);e.timeStamp=ry(),e.deltaTime=e.timeStamp-r.timeStamp,e.angle=qy(a,h),e.distance=Wy(a,h),function(t,e){var i=e.center,n=t.offsetDelta||{},o=t.prevDelta||{},r=t.prevInput||{};e.eventType!==_y&&r.eventType!==xy||(o=t.prevDelta={x:r.deltaX||0,y:r.deltaY||0},n=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=o.x+(i.x-n.x),e.deltaY=o.y+(i.y-n.y)}(i,e),e.offsetDirection=Vy(e.deltaX,e.deltaY);var l,d,c=Uy(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=c.x,e.overallVelocityY=c.y,e.overallVelocity=oy(c.x)>oy(c.y)?c.x:c.y,e.scale=s?(l=s.pointers,Wy((d=n)[0],d[1],Ny)/Wy(l[0],l[1],Ny)):1,e.rotation=s?function(t,e){return qy(e[1],e[0],Ny)+qy(t[1],t[0],Ny)}(s.pointers,n):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,function(t,e){var i,n,o,r,s=t.lastInterval||e,a=e.timeStamp-s.timeStamp;if(e.eventType!==Ey&&(a>ky||void 0===s.velocity)){var h=e.deltaX-s.deltaX,l=e.deltaY-s.deltaY,d=Uy(a,h,l);n=d.x,o=d.y,i=oy(d.x)>oy(d.y)?d.x:d.y,r=Vy(h,l),t.lastInterval=e}else i=s.velocity,n=s.velocityX,o=s.velocityY,r=s.direction;e.velocity=i,e.velocityX=n,e.velocityY=o,e.direction=r}(i,e);var u,f=t.element,p=e.srcEvent;Ry(u=p.composedPath?p.composedPath()[0]:p.path?p.path[0]:p.target,f)&&(f=u),e.target=f}function Xy(t,e,i){var n=i.pointers.length,o=i.changedPointers.length,r=e&_y&&n-o==0,s=e&(xy|Ey)&&n-o==0;i.isFirst=!!r,i.isFinal=!!s,r&&(t.session={}),i.eventType=e,Yy(t,i),t.emit("hammer.input",i),t.recognize(i),t.session.prevInput=i}function Gy(t){return t.trim().split(/\s+/g)}function Ky(t,e,i){Fy(Gy(e),(function(e){t.addEventListener(e,i,!1)}))}function $y(t,e,i){Fy(Gy(e),(function(e){t.removeEventListener(e,i,!1)}))}function Zy(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||window}var Qy=function(){function t(t,e){var i=this;this.manager=t,this.callback=e,this.element=t.element,this.target=t.options.inputTarget,this.domHandler=function(e){zy(t.options.enable,[t])&&i.handler(e)},this.init()}var e=t.prototype;return e.handler=function(){},e.init=function(){this.evEl&&Ky(this.element,this.evEl,this.domHandler),this.evTarget&&Ky(this.target,this.evTarget,this.domHandler),this.evWin&&Ky(Zy(this.element),this.evWin,this.domHandler)},e.destroy=function(){this.evEl&&$y(this.element,this.evEl,this.domHandler),this.evTarget&&$y(this.target,this.evTarget,this.domHandler),this.evWin&&$y(Zy(this.element),this.evWin,this.domHandler)},t}();function Jy(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var n=0;ni[e]})):n.sort()),n}var am={touchstart:_y,touchmove:2,touchend:xy,touchcancel:Ey},hm=function(t){function e(){var i;return e.prototype.evTarget="touchstart touchmove touchend touchcancel",(i=t.apply(this,arguments)||this).targetIds={},i}return Zg(e,t),e.prototype.handler=function(t){var e=am[t.type],i=lm.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:by,srcEvent:t})},e}(Qy);function lm(t,e){var i,n,o=rm(t.touches),r=this.targetIds;if(e&(2|_y)&&1===o.length)return r[o[0].identifier]=!0,[o,o];var s=rm(t.changedTouches),a=[],h=this.target;if(n=o.filter((function(t){return Ry(t.target,h)})),e===_y)for(i=0;i-1&&n.splice(t,1)}),um)}}function pm(t,e){t&_y?(this.primaryTouch=e.changedPointers[0].identifier,fm.call(this,e)):t&(xy|Ey)&&fm.call(this,e)}function vm(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,n=0;n-1&&this.requireFail.splice(e,1),this},e.hasRequireFailures=function(){return this.requireFail.length>0},e.canRecognizeWith=function(t){return!!this.simultaneous[t.id]},e.emit=function(t){var e=this,i=this.state;function n(i){e.manager.emit(i,t)}i<8&&n(e.options.event+km(i)),n(e.options.event),t.additionalEvent&&n(t.additionalEvent),i>=8&&n(e.options.event+km(i))},e.tryEmit=function(t){if(this.canEmit())return this.emit(t);this.state=mm},e.canEmit=function(){for(var t=0;te.threshold&&o&e.direction},i.attrTest=function(t){return Em.prototype.attrTest.call(this,t)&&(2&this.state||!(2&this.state)&&this.directionTest(t))},i.emit=function(e){this.pX=e.deltaX,this.pY=e.deltaY;var i=Om(e.direction);i&&(e.additionalEvent=this.options.event+i),t.prototype.emit.call(this,e)},e}(Em),Sm=function(t){function e(e){return void 0===e&&(e={}),t.call(this,$g({event:"swipe",threshold:10,velocity:.3,direction:Py|Dy,pointers:1},e))||this}Zg(e,t);var i=e.prototype;return i.getTouchAction=function(){return Cm.prototype.getTouchAction.call(this)},i.attrTest=function(e){var i,n=this.options.direction;return n&(Py|Dy)?i=e.overallVelocity:n&Py?i=e.overallVelocityX:n&Dy&&(i=e.overallVelocityY),t.prototype.attrTest.call(this,e)&&n&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers===this.options.pointers&&oy(i)>this.options.velocity&&e.eventType&xy},i.emit=function(t){var e=Om(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)},e}(Em),Tm=function(t){function e(e){return void 0===e&&(e={}),t.call(this,$g({event:"pinch",threshold:0,pointers:2},e))||this}Zg(e,t);var i=e.prototype;return i.getTouchAction=function(){return[uy]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||2&this.state)},i.emit=function(e){if(1!==e.scale){var i=e.scale<1?"in":"out";e.additionalEvent=this.options.event+i}t.prototype.emit.call(this,e)},e}(Em),Mm=function(t){function e(e){return void 0===e&&(e={}),t.call(this,$g({event:"rotate",threshold:0,pointers:2},e))||this}Zg(e,t);var i=e.prototype;return i.getTouchAction=function(){return[uy]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||2&this.state)},e}(Em),Pm=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,$g({event:"press",pointers:1,time:251,threshold:9},e))||this)._timer=null,i._input=null,i}Zg(e,t);var i=e.prototype;return i.getTouchAction=function(){return[dy]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distancei.time;if(this._input=t,!o||!n||t.eventType&(xy|Ey)&&!r)this.reset();else if(t.eventType&_y)this.reset(),this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.time);else if(t.eventType&xy)return 8;return mm},i.reset=function(){clearTimeout(this._timer)},i.emit=function(t){8===this.state&&(t&&t.eventType&xy?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=ry(),this.manager.emit(this.options.event,this._input)))},e}(_m),Dm={domEvents:!1,touchAction:ly,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},Im=[[Mm,{enable:!1}],[Tm,{enable:!1},["rotate"]],[Sm,{direction:Py}],[Cm,{direction:Py},["swipe"]],[xm],[xm,{event:"doubletap",taps:2},["tap"]],[Pm]];function Bm(t,e){var i,n=t.element;n.style&&(Fy(t.options.cssProps,(function(o,r){i=sy(n.style,r),e?(t.oldCssProps[i]=n.style[i],n.style[i]=o):n.style[i]=t.oldCssProps[i]||""})),e||(t.oldCssProps={}))}var Nm=function(){function t(t,e){var i,n=this;this.options=ty({},Dm,e||{}),this.options.inputTarget=this.options.inputTarget||t,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=t,this.input=new((i=this).options.inputClass||(yy?om:my?hm:gy?gm:cm))(i,Xy),this.touchAction=new jy(this,this.options.touchAction),Bm(this,!0),Fy(this.options.recognizers,(function(t){var e=n.add(new t[0](t[1]));t[2]&&e.recognizeWith(t[2]),t[3]&&e.requireFailure(t[3])}),this)}var e=t.prototype;return e.set=function(t){return ty(this.options,t),t.touchAction&&this.touchAction.update(),t.inputTarget&&(this.input.destroy(),this.input.target=t.inputTarget,this.input.init()),this},e.stop=function(t){this.session.stopped=t?2:1},e.recognize=function(t){var e=this.session;if(!e.stopped){var i;this.touchAction.preventDefaults(t);var n=this.recognizers,o=e.curRecognizer;(!o||o&&8&o.state)&&(e.curRecognizer=null,o=null);for(var r=0;r\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",o=window.console&&(window.console.warn||window.console.log);return o&&o.call(window.console,n,i),t.apply(this,arguments)}}var Rm=jm((function(t,e,i){for(var n=Object.keys(e),o=0;o=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Ym(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i1?i-1:0),o=1;o2)return $m.apply(void 0,_f(n=[Km(e[0],e[1])]).call(n,vf(xf(e).call(e,2))));var o=e[0],r=e[1];if(o instanceof Date&&r instanceof Date)return o.setTime(r.getTime()),o;var s,a=Um(Pf(r));try{for(a.s();!(s=a.n()).done;){var h=s.value;Object.prototype.propertyIsEnumerable.call(r,h)&&(r[h]===Xm?delete o[h]:null===o[h]||null===r[h]||"object"!==bu(o[h])||"object"!==bu(r[h])||Df(o[h])||Df(r[h])?o[h]=Zm(r[h]):o[h]=$m(o[h],r[h]))}}catch(t){a.e(t)}finally{a.f()}return o}function Zm(t){return Df(t)?jf(t).call(t,(function(t){return Zm(t)})):"object"===bu(t)&&null!==t?t instanceof Date?new Date(t.getTime()):$m({},t):t}function Qm(t){for(var e=0,i=Hf(t);e>>0,t=(o*=t)>>>0,t+=4294967296*(o-=t)}return 2.3283064365386963e-10*(t>>>0)}}(),e=t(" "),i=t(" "),n=t(" "),o=0;o2&&void 0!==arguments[2]&&arguments[2];for(var n in t)if(void 0!==e[n])if(null===e[n]||"object"!==bu(e[n]))cb(t,e,n,i);else{var o=t[n],r=e[n];db(o)&&db(r)&&ub(o,r,i)}}var fb=bn;function pb(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(Df(i))throw new TypeError("Arrays are not supported by deepExtend");for(var o=0;o3&&void 0!==arguments[3]&&arguments[3];if(Df(i))throw new TypeError("Arrays are not supported by deepExtend");for(var o in i)if(Object.prototype.hasOwnProperty.call(i,o)&&!rv(t).call(t,o))if(i[o]&&i[o].constructor===Object)void 0===e[o]&&(e[o]={}),e[o].constructor===Object?gb(e[o],i[o]):cb(e,i,o,n);else if(Df(i[o])){e[o]=[];for(var r=0;r2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)||!0===i)if("object"===bu(e[o])&&null!==e[o]&&dv(e[o])===Object.prototype)void 0===t[o]?t[o]=gb({},e[o],i):"object"===bu(t[o])&&null!==t[o]&&dv(t[o])===Object.prototype?gb(t[o],e[o],i):cb(t,e,o,n);else if(Df(e[o])){var r;t[o]=xf(r=e[o]).call(r)}else cb(t,e,o,n);return t}function yb(t,e){var i;return _f(i=[]).call(i,vf(t),[e])}function mb(t){return xf(t).call(t)}function bb(t){return t.getBoundingClientRect().left}function wb(t){return t.getBoundingClientRect().top}function kb(t,e){if(Df(t))for(var i=t.length,n=0;n3&&void 0!==arguments[3]?arguments[3]:{},o=function(t){return null!=t},r=function(t){return null!==t&&"object"===bu(t)};if(!r(t))throw new Error("Parameter mergeTarget must be an object");if(!r(e))throw new Error("Parameter options must be an object");if(!o(i))throw new Error("Parameter option must have a value");if(!r(n))throw new Error("Parameter globalOptions must be an object");var s=e[i],a=r(n)&&!function(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e))return!1;return!0}(n)?n[i]:void 0,h=a?a.enabled:void 0;if(void 0!==s){if("boolean"==typeof s)return r(t[i])||(t[i]={}),void(t[i].enabled=s);if(null===s&&!r(t[i])){if(!o(a))return;t[i]=pg(a)}if(r(s)){var l=!0;void 0!==s.enabled?l=s.enabled:void 0!==h&&(l=a.enabled),function(t,e,i){r(t[i])||(t[i]={});var n=e[i],o=t[i];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[s]=n[s])}(t,e,i),t[i].enabled=l}}}var jb={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}};function Rb(t,e){var i;Df(e)||(e=[e]);var n,o=Um(t);try{for(o.s();!(n=o.n()).done;){var r=n.value;if(r){i=r[e[0]];for(var s=1;s0&&void 0!==arguments[0]?arguments[0]:1;ph(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return xu(t,[{key:"insertTo",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:"setUpdateCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker update callback is not a function.");this.updateCallback=t}},{key:"setCloseCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker closing callback is not a function.");this.closeCallback=t}},{key:"_isColorString",value:function(t){if("string"==typeof t)return Lb[t]}},{key:"setColor",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("none"!==t){var i,n=this._isColorString(t);if(void 0!==n&&(t=n),!0===lb(t)){if(!0===Nb(t)){var o=t.substr(4).substr(0,t.length-5).split(",");i={r:o[0],g:o[1],b:o[2],a:1}}else if(!0===Fb(t)){var r=t.substr(5).substr(0,t.length-6).split(",");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(!0===Bb(t)){var s=Eb(t);i={r:s.r,g:s.g,b:s.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var a=void 0!==t.a?t.a:"1.0";i={r:t.r,g:t.g,b:t.b,a:a}}if(void 0===i)throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: "+mg(t));this._setColor(i,e)}}},{key:"show",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display="block",this._generateHueCircle()}},{key:"_hide",value:function(){var t=this;!0===(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&(this.previousColor=bn({},this.color)),!0===this.applied&&this.updateCallback(this.initialColor),this.frame.style.display="none",jg((function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)}),0)}},{key:"_save",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:"_apply",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:"_loadLast",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert("There is no last color to load...")}},{key:"_setColor",value:function(t){!0===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])&&(this.initialColor=bn({},t)),this.color=t;var e=Tb(t.r,t.g,t.b),i=2*Math.PI,n=this.r*e.s,o=this.centerCoordinates.x+n*Math.sin(i*e.h),r=this.centerCoordinates.y+n*Math.cos(i*e.h);this.colorPickerSelector.style.left=o-.5*this.colorPickerSelector.clientWidth+"px",this.colorPickerSelector.style.top=r-.5*this.colorPickerSelector.clientHeight+"px",this._updatePicker(t)}},{key:"_setOpacity",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:"_setBrightness",value:function(t){var e=Tb(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=Pb(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:"_updatePicker",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=Tb(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var n=this.colorPickerCanvas.clientWidth,o=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,n,o),i.putImageData(this.hueCircle,0,0),i.fillStyle="rgba(0,0,0,"+(1-e.v)+")",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),Kg(i).call(i),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,this.initialColorDiv.style.backgroundColor="rgba("+this.initialColor.r+","+this.initialColor.g+","+this.initialColor.b+","+this.initialColor.a+")",this.newColorDiv.style.backgroundColor="rgba("+this.color.r+","+this.color.g+","+this.color.b+","+this.color.a+")"}},{key:"_setSize",value:function(){this.colorPickerCanvas.style.width="100%",this.colorPickerCanvas.style.height="100%",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:"_create",value:function(){var t,e,i,n;if(this.frame=document.createElement("div"),this.frame.className="vis-color-picker",this.colorPickerDiv=document.createElement("div"),this.colorPickerSelector=document.createElement("div"),this.colorPickerSelector.className="vis-selector",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement("canvas"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var o=this.colorPickerCanvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(o.webkitBackingStorePixelRatio||o.mozBackingStorePixelRatio||o.msBackingStorePixelRatio||o.oBackingStorePixelRatio||o.backingStorePixelRatio||1),this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var r=document.createElement("DIV");r.style.color="red",r.style.fontWeight="bold",r.style.padding="10px",r.innerText="Error: your browser does not support HTML canvas",this.colorPickerCanvas.appendChild(r)}this.colorPickerDiv.className="vis-color",this.opacityDiv=document.createElement("div"),this.opacityDiv.className="vis-opacity",this.brightnessDiv=document.createElement("div"),this.brightnessDiv.className="vis-brightness",this.arrowDiv=document.createElement("div"),this.arrowDiv.className="vis-arrow",this.opacityRange=document.createElement("input");try{this.opacityRange.type="range",this.opacityRange.min="0",this.opacityRange.max="100"}catch(t){}this.opacityRange.value="100",this.opacityRange.className="vis-range",this.brightnessRange=document.createElement("input");try{this.brightnessRange.type="range",this.brightnessRange.min="0",this.brightnessRange.max="100"}catch(t){}this.brightnessRange.value="100",this.brightnessRange.className="vis-range",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var s=this;this.opacityRange.onchange=function(){s._setOpacity(this.value)},this.opacityRange.oninput=function(){s._setOpacity(this.value)},this.brightnessRange.onchange=function(){s._setBrightness(this.value)},this.brightnessRange.oninput=function(){s._setBrightness(this.value)},this.brightnessLabel=document.createElement("div"),this.brightnessLabel.className="vis-label vis-brightness",this.brightnessLabel.innerText="brightness:",this.opacityLabel=document.createElement("div"),this.opacityLabel.className="vis-label vis-opacity",this.opacityLabel.innerText="opacity:",this.newColorDiv=document.createElement("div"),this.newColorDiv.className="vis-new-color",this.newColorDiv.innerText="new",this.initialColorDiv=document.createElement("div"),this.initialColorDiv.className="vis-initial-color",this.initialColorDiv.innerText="initial",this.cancelButton=document.createElement("div"),this.cancelButton.className="vis-button vis-cancel",this.cancelButton.innerText="cancel",this.cancelButton.onclick=Hn(t=this._hide).call(t,this,!1),this.applyButton=document.createElement("div"),this.applyButton.className="vis-button vis-apply",this.applyButton.innerText="apply",this.applyButton.onclick=Hn(e=this._apply).call(e,this),this.saveButton=document.createElement("div"),this.saveButton.className="vis-button vis-save",this.saveButton.innerText="save",this.saveButton.onclick=Hn(i=this._save).call(i,this),this.loadButton=document.createElement("div"),this.loadButton.className="vis-button vis-load",this.loadButton.innerText="load last",this.loadButton.onclick=Hn(n=this._loadLast).call(n,this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:"_bindHammer",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new tb(this.colorPickerCanvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.on("hammer.input",(function(e){e.isFirst&&t._moveSelector(e)})),this.hammer.on("tap",(function(e){t._moveSelector(e)})),this.hammer.on("panstart",(function(e){t._moveSelector(e)})),this.hammer.on("panmove",(function(e){t._moveSelector(e)})),this.hammer.on("panend",(function(e){t._moveSelector(e)}))}},{key:"_generateHueCircle",value:function(){if(!1===this.generated){var t=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var e,i,n,o,r=this.colorPickerCanvas.clientWidth,s=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,r,s),this.centerCoordinates={x:.5*r,y:.5*s},this.r=.49*r;var a,h=2*Math.PI/360,l=1/this.r;for(n=0;n<360;n++)for(o=0;o3&&void 0!==arguments[3]?arguments[3]:1,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(){return!1};ph(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.hideOption=r,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},bn(this.options,this.defaultOptions),this.configureOptions=n,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new Hb(o),this.wrapper=void 0}return xu(t,[{key:"setOptions",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;if("string"==typeof t)this.options.filter=t;else if(Df(t))this.options.filter=t.join();else if("object"===bu(t)){if(null==t)throw new TypeError("options cannot be null");void 0!==t.container&&(this.options.container=t.container),void 0!==yv(t)&&(this.options.filter=yv(t)),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)}else"boolean"==typeof t?(this.options.filter=!0,e=t):"function"==typeof t&&(this.options.filter=t,e=!0);!1===yv(this.options)&&(e=!1),this.options.enabled=e}this._clean()}},{key:"setModuleOptions",value:function(t){this.moduleOptions=t,!0===this.options.enabled&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:"_create",value:function(){this._clean(),this.changedOptions=[];var t=yv(this.options),e=0,i=!1;for(var n in this.configureOptions)Object.prototype.hasOwnProperty.call(this.configureOptions,n)&&(this.allowCreation=!1,i=!1,"function"==typeof t?i=(i=t(n,[]))||this._handleObject(this.configureOptions[n],[n],!0):!0!==t&&-1===lg(t).call(t,n)||(i=!0),!1!==i&&(this.allowCreation=!0,e>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),e++);this._makeButton(),this._push()}},{key:"_push",value:function(){this.wrapper=document.createElement("div"),this.wrapper.className="vis-configuration-wrapper",this.container.appendChild(this.wrapper);for(var t=0;t1?i-1:0),o=1;o2&&void 0!==arguments[2]&&arguments[2],n=document.createElement("div");if(n.className="vis-configuration vis-config-label vis-config-s"+e.length,!0===i){for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(Wb("i","b",t))}else n.innerText=t+":";return n}},{key:"_makeDropdown",value:function(t,e,i){var n=document.createElement("select");n.className="vis-configuration vis-config-select";var o=0;void 0!==e&&-1!==lg(t).call(t,e)&&(o=lg(t).call(t,e));for(var r=0;rr&&1!==r&&(a.max=Math.ceil(e*d),l=a.max,h="range increased"),a.value=e}else a.value=n;var c=document.createElement("input");c.className="vis-configuration vis-config-rangeinput",c.value=a.value;var u=this;a.onchange=function(){c.value=this.value,u._update(Number(this.value),i)},a.oninput=function(){c.value=this.value};var f=this._makeLabel(i[i.length-1],i),p=this._makeItem(i,f,a,c);""!==h&&this.popupHistory[p]!==l&&(this.popupHistory[p]=l,this._setupPopup(h,p))}},{key:"_makeButton",value:function(){var t=this;if(!0===this.options.showButton){var e=document.createElement("div");e.className="vis-configuration vis-config-button",e.innerText="generate options",e.onclick=function(){t._printOptions()},e.onmouseover=function(){e.className="vis-configuration vis-config-button hover"},e.onmouseout=function(){e.className="vis-configuration vis-config-button"},this.optionsContainer=document.createElement("div"),this.optionsContainer.className="vis-configuration vis-config-option-container",this.domElements.push(this.optionsContainer),this.domElements.push(e)}}},{key:"_setupPopup",value:function(t,e){var i=this;if(!0===this.initialized&&!0===this.allowCreation&&this.popupCounter1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!1,o=yv(this.options),r=!1;for(var s in t)if(Object.prototype.hasOwnProperty.call(t,s)){n=!0;var a=t[s],h=yb(e,s);if("function"==typeof o&&!1===(n=o(s,e))&&!Df(a)&&"string"!=typeof a&&"boolean"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,n=this._handleObject(a,h,!0),this.allowCreation=!1===i),!1!==n){r=!0;var l=this._getValue(h);if(Df(a))this._handleArray(a,l,h);else if("string"==typeof a)this._makeTextInput(a,l,h);else if("boolean"==typeof a)this._makeCheckbox(a,l,h);else if(a instanceof Object){if(!this.hideOption(e,s,this.moduleOptions))if(void 0!==a.enabled){var d=yb(h,"enabled"),c=this._getValue(d);if(!0===c){var u=this._makeLabel(s,h,!0);this._makeItem(h,u),r=this._handleObject(a,h)||r}else this._makeCheckbox(a,c,h)}else{var f=this._makeLabel(s,h,!0);this._makeItem(h,f),r=this._handleObject(a,h)||r}}else console.error("dont know how to handle",a,s,h)}}return r}},{key:"_handleArray",value:function(t,e,i){"string"==typeof t[0]&&"color"===t[0]?(this._makeColorField(t,e,i),t[1]!==e&&this.changedOptions.push({path:i,value:e})):"string"==typeof t[0]?(this._makeDropdown(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:e})):"number"==typeof t[0]&&(this._makeRange(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:Number(e)}))}},{key:"_update",value:function(t,e){var i=this._constructOptions(t,e);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit("configChange",i),this.initialized=!0,this.parent.setOptions(i)}},{key:"_constructOptions",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i;t="false"!==(t="true"===t||t)&&t;for(var o=0;oo-this.padding&&(a=!0),r=a?this.x-i:this.x,s=h?this.y-e:this.y}else(s=this.y-e)+e+this.padding>n&&(s=n-e-this.padding),so&&(r=o-i-this.padding),rs.distance?" in "+t.printLocation(r.path,e,"")+"Perhaps it was misplaced? Matching option found at: "+t.printLocation(s.path,s.closestMatch,""):r.distance<=8?'. Did you mean "'+r.closestMatch+'"?'+t.printLocation(r.path,e):". Did you mean one of these: "+t.print(Hf(i))+t.printLocation(n,e),console.error('%cUnknown option detected: "'+e+'"'+o,Xb),Yb=!0}},{key:"findInOptions",value:function(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=1e9,s="",a=[],h=e.toLowerCase(),l=void 0;for(var d in i){var c=void 0;if(void 0!==i[d].__type__&&!0===o){var u=t.findInOptions(e,i[d],yb(n,d));r>u.distance&&(s=u.closestMatch,a=u.path,r=u.distance,l=u.indexMatch)}else{var f;-1!==lg(f=d.toLowerCase()).call(f,h)&&(l=d),r>(c=t.levenshteinDistance(e,d))&&(s=d,a=mb(n),r=c)}}return{closestMatch:s,path:a,distance:r,indexMatch:l}}},{key:"printLocation",value:function(t,e){for(var i="\n\n"+(arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Problem value found at: \n")+"options = {\n",n=0;n0)return"before"==n?Math.max(0,h-1):h;if(o(s,e)<0&&o(a,e)>0)return"before"==n?h:Math.min(t.length-1,h+1);o(s,e)<0?d=h+1:c=h-1,l++}return-1},bridgeObject:zb,copyAndExtendArray:yb,copyArray:mb,deepExtend:gb,deepObjectAssign:Km,easingFunctions:jb,equalArray:function(t,e){if(t.length!==e.length)return!1;for(var i=0,n=t.length;i0&&void 0!==arguments[0]?arguments[0]:window.event,e=null;return t&&(t.target?e=t.target:t.srcElement&&(e=t.srcElement)),e instanceof Element&&(null==e.nodeType||3!=e.nodeType||(e=e.parentNode)instanceof Element)?e:null},getType:function(t){var e=bu(t);return"object"===e?null===t?"null":t instanceof Boolean?"Boolean":t instanceof Number?"Number":t instanceof String?"String":Df(t)?"Array":t instanceof Date?"Date":"Object":"number"===e?"Number":"boolean"===e?"Boolean":"string"===e?"String":void 0===e?"undefined":e},hasParent:function(t,e){for(var i=t;i;){if(i===e)return!0;if(!i.parentNode)return!1;i=i.parentNode}return!1},hexToHSV:Ib,hexToRGB:Eb,insertSort:function(t,e){for(var i=0;i0&&e(n,t[o-1])<0;o--)t[o]=t[o-1];t[o]=n}return t},isDate:function(t){if(t instanceof Date)return!0;if(lb(t)){if(ib.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},isNumber:ab,isObject:db,isString:lb,isValidHex:Bb,isValidRGB:Nb,isValidRGBA:Fb,mergeOptions:Ab,option:xb,overrideOpacity:Ob,parseColor:Sb,preventDefault:function(t){t||(t=window.event),t&&(t.preventDefault?t.preventDefault():t.returnValue=!1)},pureDeepObjectAssign:Gm,recursiveDOMDelete:hb,removeClassName:function(t,e){var i=t.className.split(" "),n=e.split(" ");i=yv(i).call(i,(function(t){return!rv(n).call(n,t)})),t.className=i.join(" ")},removeCssText:function(t,e){for(var i=Mb(e),n=0,o=Hf(i);n2?i-2:0),o=2;o":!0,"--":!0},hw="",lw=0,dw="",cw="",uw=sw.NULL;function fw(){lw++,dw=hw.charAt(lw)}function pw(){return hw.charAt(lw+1)}function vw(t){var e=t.charCodeAt(0);return e<47?35===e||46===e:e<59?e>47:e<91?e>64:e<96?95===e:e<123&&e>96}function gw(t,e){if(t||(t={}),e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function yw(t,e,i){for(var n=e.split("."),o=t;n.length;){var r=n.shift();n.length?(o[r]||(o[r]={}),o=o[r]):o[r]=i}}function mw(t,e){for(var i,n,o=null,r=[t],s=t;s.parent;)r.push(s.parent),s=s.parent;if(s.nodes)for(i=0,n=s.nodes.length;i=0;i--){var a,h=r[i];h.nodes||(h.nodes=[]),-1===lg(a=h.nodes).call(a,o)&&h.nodes.push(o)}e.attr&&(o.attr=gw(o.attr,e.attr))}function bw(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=gw({},t.edge);e.attr=gw(i,e.attr)}}function ww(t,e,i,n,o){var r={from:e,to:i,type:n};return t.edge&&(r.attr=gw({},t.edge)),r.attr=gw(r.attr||{},o),null!=o&&o.hasOwnProperty("arrows")&&null!=o.arrows&&(r.arrows={to:{enabled:!0,type:o.arrows.type}},o.arrows=null),r}function kw(){for(uw=sw.NULL,cw="";" "===dw||"\t"===dw||"\n"===dw||"\r"===dw;)fw();do{var t=!1;if("#"===dw){for(var e=lw-1;" "===hw.charAt(e)||"\t"===hw.charAt(e);)e--;if("\n"===hw.charAt(e)||""===hw.charAt(e)){for(;""!=dw&&"\n"!=dw;)fw();t=!0}}if("/"===dw&&"/"===pw()){for(;""!=dw&&"\n"!=dw;)fw();t=!0}if("/"===dw&&"*"===pw()){for(;""!=dw;){if("*"===dw&&"/"===pw()){fw(),fw();break}fw()}t=!0}for(;" "===dw||"\t"===dw||"\n"===dw||"\r"===dw;)fw()}while(t);if(""!==dw){var i=dw+pw();if(aw[i])return uw=sw.DELIMITER,cw=i,fw(),void fw();if(aw[dw])return uw=sw.DELIMITER,cw=dw,void fw();if(vw(dw)||"-"===dw){for(cw+=dw,fw();vw(dw);)cw+=dw,fw();return"false"===cw?cw=!1:"true"===cw?cw=!0:isNaN(Number(cw))||(cw=Number(cw)),void(uw=sw.IDENTIFIER)}if('"'===dw){for(fw();""!=dw&&('"'!=dw||'"'===dw&&'"'===pw());)'"'===dw?(cw+=dw,fw()):"\\"===dw&&"n"===pw()?(cw+="\n",fw()):cw+=dw,fw();if('"'!=dw)throw Sw('End of string " expected');return fw(),void(uw=sw.IDENTIFIER)}for(uw=sw.UNKNOWN;""!=dw;)cw+=dw,fw();throw new SyntaxError('Syntax error in part "'+Tw(cw,30)+'"')}uw=sw.DELIMITER}function _w(t){for(;""!==cw&&"}"!=cw;)xw(t),";"===cw&&kw()}function xw(t){var e=Ew(t);if(e)Ow(t,e);else{var i=function(t){if("node"===cw)return kw(),t.node=Cw(),"node";if("edge"===cw)return kw(),t.edge=Cw(),"edge";if("graph"===cw)return kw(),t.graph=Cw(),"graph";return null}(t);if(!i){if(uw!=sw.IDENTIFIER)throw Sw("Identifier expected");var n=cw;if(kw(),"="===cw){if(kw(),uw!=sw.IDENTIFIER)throw Sw("Identifier expected");t[n]=cw,kw()}else!function(t,e){var i={id:e},n=Cw();n&&(i.attr=n);mw(t,i),Ow(t,e)}(t,n)}}}function Ew(t){var e=null;if("subgraph"===cw&&((e={}).type="subgraph",kw(),uw===sw.IDENTIFIER&&(e.id=cw,kw())),"{"===cw){if(kw(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,_w(e),"}"!=cw)throw Sw("Angle bracket } expected");kw(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function Ow(t,e){for(;"->"===cw||"--"===cw;){var i,n=cw;kw();var o=Ew(t);if(o)i=o;else{if(uw!=sw.IDENTIFIER)throw Sw("Identifier or subgraph expected");mw(t,{id:i=cw}),kw()}bw(t,ww(t,e,i,n,Cw())),e=i}}function Cw(){for(var t,e,i=null,n={dashed:!0,solid:!1,dotted:[1,5]},o={dot:"circle",box:"box",crow:"crow",curve:"curve",icurve:"inv_curve",normal:"triangle",inv:"inv_triangle",diamond:"diamond",tee:"bar",vee:"vee"},r=new Array,s=new Array;"["===cw;){for(kw(),i={};""!==cw&&"]"!=cw;){if(uw!=sw.IDENTIFIER)throw Sw("Attribute name expected");var a=cw;if(kw(),"="!=cw)throw Sw("Equal sign = expected");if(kw(),uw!=sw.IDENTIFIER)throw Sw("Attribute value expected");var h=cw;"style"===a&&(h=n[h]),"arrowhead"===a&&(a="arrows",h={to:{enabled:!0,type:o[h]}}),"arrowtail"===a&&(a="arrows",h={from:{enabled:!0,type:o[h]}}),r.push({attr:i,name:a,value:h}),s.push(a),kw(),","==cw&&kw()}if("]"!=cw)throw Sw("Bracket ] expected");kw()}if(rv(s).call(s,"dir")){var l={arrows:{}};for(t=0;t"===t.type&&(e.arrows="to"),e};op(o=i.edges).call(o,(function(t){var e,i,o,s,a,h,l;(e=t.from instanceof Object?t.from.nodes:{id:t.from},i=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges)&&op(o=t.from.edges).call(o,(function(t){var e=r(t);n.edges.push(e)}));(a=i,h=function(e,i){var o=ww(n,e.id,i.id,t.type,t.attr),s=r(o);n.edges.push(s)},Df(s=e)?op(s).call(s,(function(t){Df(a)?op(a).call(a,(function(e){h(t,e)})):h(t,a)})):Df(a)?op(a).call(a,(function(t){h(s,t)})):h(s,a),t.to instanceof Object&&t.to.edges)&&op(l=t.to.edges).call(l,(function(t){var e=r(t);n.edges.push(e)}))}))}return i.attr&&(n.options=i.attr),n}var Iw=Object.freeze({__proto__:null,DOTToGraph:Dw,parseDOT:nw});function Bw(t,e){var i,n={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};null!=e&&(null!=e.fixed&&(n.nodes.fixed=e.fixed),null!=e.parseColor&&(n.nodes.parseColor=e.parseColor),null!=e.inheritColor&&(n.edges.inheritColor=e.inheritColor));var o=t.edges,r=jf(o).call(o,(function(t){var e={from:t.source,id:t.id,to:t.target};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),"Directed"===t.type&&(e.arrows="to"),t.color&&!1===n.edges.inheritColor&&(e.color=t.color),e}));return{nodes:jf(i=t.nodes).call(i,(function(t){var e={id:t.id,fixed:n.nodes.fixed&&null!=t.x&&null!=t.y};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.size&&(e.size=t.size),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),null!=t.title&&(e.title=t.title),null!=t.x&&(e.x=t.x),null!=t.y&&(e.y=t.y),null!=t.color&&(!0===n.nodes.parseColor?e.color=t.color:e.color={background:t.color,border:t.color,highlight:{background:t.color,border:t.color},hover:{background:t.color,border:t.color}}),e})),edges:r}}var Nw=Object.freeze({__proto__:null,parseGephi:Bw}),Fw=Object.freeze({__proto__:null,cn:{addDescription:"单击空白处放置新节点。",addEdge:"添加连接线",addNode:"添加节点",back:"返回",close:"關閉",createEdgeError:"无法将连接线连接到群集。",del:"删除选定",deleteClusterError:"无法删除群集。",edgeDescription:"单击某个节点并将该连接线拖动到另一个节点以连接它们。",edit:"编辑",editClusterError:"无法编辑群集。",editEdge:"编辑连接线",editEdgeDescription:"单击控制节点并将它们拖到节点上连接。",editNode:"编辑节点"},cs:{addDescription:"Kluknutím do prázdného prostoru můžete přidat nový vrchol.",addEdge:"Přidat hranu",addNode:"Přidat vrchol",back:"Zpět",close:"Zavřít",createEdgeError:"Nelze připojit hranu ke shluku.",del:"Smazat výběr",deleteClusterError:"Nelze mazat shluky.",edgeDescription:"Přetažením z jednoho vrcholu do druhého můžete spojit tyto vrcholy novou hranou.",edit:"Upravit",editClusterError:"Nelze upravovat shluky.",editEdge:"Upravit hranu",editEdgeDescription:"Přetažením kontrolního vrcholu hrany ji můžete připojit k jinému vrcholu.",editNode:"Upravit vrchol"},de:{addDescription:"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.",addEdge:"Kante hinzufügen",addNode:"Knoten hinzufügen",back:"Zurück",close:"Schließen",createEdgeError:"Es ist nicht möglich, Kanten mit Clustern zu verbinden.",del:"Lösche Auswahl",deleteClusterError:"Cluster können nicht gelöscht werden.",edgeDescription:"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.",edit:"Editieren",editClusterError:"Cluster können nicht editiert werden.",editEdge:"Kante editieren",editEdgeDescription:"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.",editNode:"Knoten editieren"},en:{addDescription:"Click in an empty space to place a new node.",addEdge:"Add Edge",addNode:"Add Node",back:"Back",close:"Close",createEdgeError:"Cannot link edges to a cluster.",del:"Delete selected",deleteClusterError:"Clusters cannot be deleted.",edgeDescription:"Click on a node and drag the edge to another node to connect them.",edit:"Edit",editClusterError:"Clusters cannot be edited.",editEdge:"Edit Edge",editEdgeDescription:"Click on the control points and drag them to a node to connect to it.",editNode:"Edit Node"},es:{addDescription:"Haga clic en un lugar vacío para colocar un nuevo nodo.",addEdge:"Añadir arista",addNode:"Añadir nodo",back:"Atrás",close:"Cerrar",createEdgeError:"No se puede conectar una arista a un grupo.",del:"Eliminar selección",deleteClusterError:"No es posible eliminar grupos.",edgeDescription:"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.",edit:"Editar",editClusterError:"No es posible editar grupos.",editEdge:"Editar arista",editEdgeDescription:"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.",editNode:"Editar nodo"},fr:{addDescription:"Cliquez dans un endroit vide pour placer un nœud.",addEdge:"Ajouter un lien",addNode:"Ajouter un nœud",back:"Retour",close:"Fermer",createEdgeError:"Impossible de créer un lien vers un cluster.",del:"Effacer la sélection",deleteClusterError:"Les clusters ne peuvent pas être effacés.",edgeDescription:"Cliquez sur un nœud et glissez le lien vers un autre nœud pour les connecter.",edit:"Éditer",editClusterError:"Les clusters ne peuvent pas être édités.",editEdge:"Éditer le lien",editEdgeDescription:"Cliquez sur les points de contrôle et glissez-les pour connecter un nœud.",editNode:"Éditer le nœud"},it:{addDescription:"Clicca per aggiungere un nuovo nodo",addEdge:"Aggiungi un vertice",addNode:"Aggiungi un nodo",back:"Indietro",close:"Chiudere",createEdgeError:"Non si possono collegare vertici ad un cluster",del:"Cancella la selezione",deleteClusterError:"I cluster non possono essere cancellati",edgeDescription:"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.",edit:"Modifica",editClusterError:"I clusters non possono essere modificati.",editEdge:"Modifica il vertice",editEdgeDescription:"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.",editNode:"Modifica il nodo"},nl:{addDescription:"Klik op een leeg gebied om een nieuwe node te maken.",addEdge:"Link toevoegen",addNode:"Node toevoegen",back:"Terug",close:"Sluiten",createEdgeError:"Kan geen link maken naar een cluster.",del:"Selectie verwijderen",deleteClusterError:"Clusters kunnen niet worden verwijderd.",edgeDescription:"Klik op een node en sleep de link naar een andere node om ze te verbinden.",edit:"Wijzigen",editClusterError:"Clusters kunnen niet worden aangepast.",editEdge:"Link wijzigen",editEdgeDescription:"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.",editNode:"Node wijzigen"},pt:{addDescription:"Clique em um espaço em branco para adicionar um novo nó",addEdge:"Adicionar aresta",addNode:"Adicionar nó",back:"Voltar",close:"Fechar",createEdgeError:"Não foi possível linkar arestas a um cluster.",del:"Remover selecionado",deleteClusterError:"Clusters não puderam ser removidos.",edgeDescription:"Clique em um nó e arraste a aresta até outro nó para conectá-los",edit:"Editar",editClusterError:"Clusters não puderam ser editados.",editEdge:"Editar aresta",editEdgeDescription:"Clique nos pontos de controle e os arraste para um nó para conectá-los",editNode:"Editar nó"},ru:{addDescription:"Кликните в свободное место, чтобы добавить новый узел.",addEdge:"Добавить ребро",addNode:"Добавить узел",back:"Назад",close:"Закрывать",createEdgeError:"Невозможно соединить ребра в кластер.",del:"Удалить выбранное",deleteClusterError:"Кластеры не могут быть удалены",edgeDescription:"Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.",edit:"Редактировать",editClusterError:"Кластеры недоступны для редактирования.",editEdge:"Редактировать ребро",editEdgeDescription:"Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.",editNode:"Редактировать узел"},uk:{addDescription:"Kлікніть на вільне місце, щоб додати новий вузол.",addEdge:"Додати край",addNode:"Додати вузол",back:"Назад",close:"Закрити",createEdgeError:"Не можливо об'єднати краї в групу.",del:"Видалити обране",deleteClusterError:"Групи не можуть бути видалені.",edgeDescription:"Клікніть на вузол і перетягніть край до іншого вузла, щоб їх з'єднати.",edit:"Редагувати",editClusterError:"Групи недоступні для редагування.",editEdge:"Редагувати край",editEdgeDescription:"Клікніть на контрольні точки і перетягніть їх у вузол, щоб підключитися до нього.",editNode:"Редагувати вузол"}});var zw=function(){function t(){ph(this,t),this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement("canvas")}return xu(t,[{key:"init",value:function(){if(!this.initialized()){this.src=this.image.src;var t=this.image.width,e=this.image.height;this.width=t,this.height=e;var i=Math.floor(e/2),n=Math.floor(e/4),o=Math.floor(e/8),r=Math.floor(e/16),s=Math.floor(t/2),a=Math.floor(t/4),h=Math.floor(t/8),l=Math.floor(t/16);this.canvas.width=3*a,this.canvas.height=i,this.coordinates=[[0,0,s,i],[s,0,a,n],[s,n,h,o],[5*h,n,l,r]],this._fillMipMap()}}},{key:"initialized",value:function(){return void 0!==this.coordinates}},{key:"_fillMipMap",value:function(){var t=this.canvas.getContext("2d"),e=this.coordinates[0];t.drawImage(this.image,e[0],e[1],e[2],e[3]);for(var i=1;i2){e*=.5;for(var s=0;e>2&&s=this.NUM_ITERATIONS&&(s=this.NUM_ITERATIONS-1);var a=this.coordinates[s];t.drawImage(this.canvas,a[0],a[1],a[2],a[3],i,n,o,r)}else t.drawImage(this.image,i,n,o,r)}}]),t}(),Aw=function(){function t(e){ph(this,t),this.images={},this.imageBroken={},this.callback=e}return xu(t,[{key:"_tryloadBrokenUrl",value:function(t,e,i){void 0!==t&&void 0!==i&&(void 0!==e?(i.image.onerror=function(){console.error("Could not load brokenImage:",e)},i.image.src=e):console.warn("No broken url image defined"))}},{key:"_redrawWithImage",value:function(t){this.callback&&this.callback(t)}},{key:"load",value:function(t,e){var i=this,n=this.images[t];if(n)return n;var o=new zw;return this.images[t]=o,o.image.onload=function(){i._fixImageCoordinates(o.image),o.init(),i._redrawWithImage(o)},o.image.onerror=function(){console.error("Could not load image:",t),i._tryloadBrokenUrl(t,e,o)},o.image.src=t,o}},{key:"_fixImageCoordinates",value:function(t){0===t.width&&(document.body.appendChild(t),t.width=t.offsetWidth,t.height=t.offsetHeight,document.body.removeChild(t))}}]),t}(),jw={exports:{}},Rw=r((function(){if("function"==typeof ArrayBuffer){var t=new ArrayBuffer(8);Object.isExtensible(t)&&Object.defineProperty(t,"a",{value:8})}})),Lw=r,Hw=tt,Ww=w,qw=Rw,Vw=Object.isExtensible,Uw=Lw((function(){Vw(1)}))||qw?function(t){return!!Hw(t)&&((!qw||"ArrayBuffer"!==Ww(t))&&(!Vw||Vw(t)))}:Vw,Yw=!r((function(){return Object.isExtensible(Object.preventExtensions({}))})),Xw=Ti,Gw=g,Kw=Yi,$w=tt,Zw=Qt,Qw=Ze.f,Jw=Jh,tk=il,ek=Uw,ik=Yw,nk=!1,ok=ne("meta"),rk=0,sk=function(t){Qw(t,ok,{value:{objectID:"O"+rk++,weakData:{}}})},ak=jw.exports={enable:function(){ak.enable=function(){},nk=!0;var t=Jw.f,e=Gw([].splice),i={};i[ok]=1,t(i).length&&(Jw.f=function(i){for(var n=t(i),o=0,r=n.length;or;r++)if((a=y(t[r]))&&vk(kk,a))return a;return new wk(!1)}n=gk(t,o)}for(h=u?t.next:n.next;!(l=dk(h,n)).done;){try{a=y(l.value)}catch(t){mk(n,"throw",t)}if("object"==typeof a&&a&&vk(kk,a))return a}return new wk(!1)},xk=at,Ek=TypeError,Ok=function(t,e){if(xk(e,t))return t;throw new Ek("Incorrect invocation")},Ck=Ti,Sk=o,Tk=hk,Mk=r,Pk=gi,Dk=_k,Ik=Ok,Bk=S,Nk=tt,Fk=U,zk=Gr,Ak=Ze.f,jk=Fl.forEach,Rk=M,Lk=Lo.set,Hk=Lo.getterFor,Wk=function(t,e,i){var n,o=-1!==t.indexOf("Map"),r=-1!==t.indexOf("Weak"),s=o?"set":"add",a=Sk[t],h=a&&a.prototype,l={};if(Rk&&Bk(a)&&(r||h.forEach&&!Mk((function(){(new a).entries().next()})))){var d=(n=e((function(e,i){Lk(Ik(e,d),{type:t,collection:new a}),Fk(i)||Dk(i,e[s],{that:e,AS_ENTRIES:o})}))).prototype,c=Hk(t);jk(["add","clear","delete","forEach","get","has","set","keys","values","entries"],(function(t){var e="add"===t||"set"===t;!(t in h)||r&&"clear"===t||Pk(d,t,(function(i,n){var o=c(this).collection;if(!e&&r&&!Nk(i))return"get"===t&&void 0;var s=o[t](0===i?0:i,n);return e?this:s}))})),r||Ak(d,"size",{configurable:!0,get:function(){return c(this).collection.size}})}else n=i.getConstructor(e,t,o,s),Tk.enable();return zk(n,t,!1,!0),l[t]=n,Ck({global:!0,forced:!0},l),r||i.setStrong(n,t,o),n},qk=Mr,Vk=function(t,e,i){for(var n in e)i&&i.unsafe&&t[n]?t[n]=e[n]:qk(t,n,e[n],i);return t},Uk=st,Yk=vl,Xk=M,Gk=ue("species"),Kk=function(t){var e=Uk(t);Xk&&e&&!e[Gk]&&Yk(e,Gk,{configurable:!0,get:function(){return this}})},$k=mr,Zk=vl,Qk=Vk,Jk=$e,t_=Ok,e_=U,i_=_k,n_=Ss,o_=Ts,r_=Kk,s_=M,a_=hk.fastKey,h_=Lo.set,l_=Lo.getterFor,d_={getConstructor:function(t,e,i,n){var o=t((function(t,o){t_(t,r),h_(t,{type:e,index:$k(null),first:void 0,last:void 0,size:0}),s_||(t.size=0),e_(o)||i_(o,t[n],{that:t,AS_ENTRIES:i})})),r=o.prototype,s=l_(e),a=function(t,e,i){var n,o,r=s(t),a=h(t,e);return a?a.value=i:(r.last=a={index:o=a_(e,!0),key:e,value:i,previous:n=r.last,next:void 0,removed:!1},r.first||(r.first=a),n&&(n.next=a),s_?r.size++:t.size++,"F"!==o&&(r.index[o]=a)),t},h=function(t,e){var i,n=s(t),o=a_(e);if("F"!==o)return n.index[o];for(i=n.first;i;i=i.next)if(i.key===e)return i};return Qk(r,{clear:function(){for(var t=s(this),e=t.index,i=t.first;i;)i.removed=!0,i.previous&&(i.previous=i.previous.next=void 0),delete e[i.index],i=i.next;t.first=t.last=void 0,s_?t.size=0:this.size=0},delete:function(t){var e=this,i=s(e),n=h(e,t);if(n){var o=n.next,r=n.previous;delete i.index[n.index],n.removed=!0,r&&(r.next=o),o&&(o.previous=r),i.first===n&&(i.first=o),i.last===n&&(i.last=r),s_?i.size--:e.size--}return!!n},forEach:function(t){for(var e,i=s(this),n=Jk(t,arguments.length>1?arguments[1]:void 0);e=e?e.next:i.first;)for(n(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!h(this,t)}}),Qk(r,i?{get:function(t){var e=h(this,t);return e&&e.value},set:function(t,e){return a(this,0===t?0:t,e)}}:{add:function(t){return a(this,t=0===t?0:t,t)}}),s_&&Zk(r,"size",{configurable:!0,get:function(){return s(this).size}}),o},setStrong:function(t,e,i){var n=e+" Iterator",o=l_(e),r=l_(n);n_(t,e,(function(t,e){h_(this,{type:n,target:t,state:o(t),kind:e,last:void 0})}),(function(){for(var t=r(this),e=t.kind,i=t.last;i&&i.removed;)i=i.previous;return t.target&&(t.last=i=i?i.next:t.state.first)?o_("keys"===e?i.key:"values"===e?i.value:[i.key,i.value],!1):(t.target=void 0,o_(void 0,!0))}),i?"entries":"values",!i,!0),r_(e)}};Wk("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),d_);var c_=i(et.Map),u_=function(){function t(){ph(this,t),this.clear(),this._defaultIndex=0,this._groupIndex=0,this._defaultGroups=[{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},{border:"#FFA500",background:"#FFFF00",highlight:{border:"#FFA500",background:"#FFFFA3"},hover:{border:"#FFA500",background:"#FFFFA3"}},{border:"#FA0A10",background:"#FB7E81",highlight:{border:"#FA0A10",background:"#FFAFB1"},hover:{border:"#FA0A10",background:"#FFAFB1"}},{border:"#41A906",background:"#7BE141",highlight:{border:"#41A906",background:"#A1EC76"},hover:{border:"#41A906",background:"#A1EC76"}},{border:"#E129F0",background:"#EB7DF4",highlight:{border:"#E129F0",background:"#F0B3F5"},hover:{border:"#E129F0",background:"#F0B3F5"}},{border:"#7C29F0",background:"#AD85E4",highlight:{border:"#7C29F0",background:"#D3BDF0"},hover:{border:"#7C29F0",background:"#D3BDF0"}},{border:"#C37F00",background:"#FFA807",highlight:{border:"#C37F00",background:"#FFCA66"},hover:{border:"#C37F00",background:"#FFCA66"}},{border:"#4220FB",background:"#6E6EFD",highlight:{border:"#4220FB",background:"#9B9BFD"},hover:{border:"#4220FB",background:"#9B9BFD"}},{border:"#FD5A77",background:"#FFC0CB",highlight:{border:"#FD5A77",background:"#FFD1D9"},hover:{border:"#FD5A77",background:"#FFD1D9"}},{border:"#4AD63A",background:"#C2FABC",highlight:{border:"#4AD63A",background:"#E6FFE3"},hover:{border:"#4AD63A",background:"#E6FFE3"}},{border:"#990000",background:"#EE0000",highlight:{border:"#BB0000",background:"#FF3333"},hover:{border:"#BB0000",background:"#FF3333"}},{border:"#FF6000",background:"#FF6000",highlight:{border:"#FF6000",background:"#FF6000"},hover:{border:"#FF6000",background:"#FF6000"}},{border:"#97C2FC",background:"#2B7CE9",highlight:{border:"#D2E5FF",background:"#2B7CE9"},hover:{border:"#D2E5FF",background:"#2B7CE9"}},{border:"#399605",background:"#255C03",highlight:{border:"#399605",background:"#255C03"},hover:{border:"#399605",background:"#255C03"}},{border:"#B70054",background:"#FF007E",highlight:{border:"#B70054",background:"#FF007E"},hover:{border:"#B70054",background:"#FF007E"}},{border:"#AD85E4",background:"#7C29F0",highlight:{border:"#D3BDF0",background:"#7C29F0"},hover:{border:"#D3BDF0",background:"#7C29F0"}},{border:"#4557FA",background:"#000EA1",highlight:{border:"#6E6EFD",background:"#000EA1"},hover:{border:"#6E6EFD",background:"#000EA1"}},{border:"#FFC0CB",background:"#FD5A77",highlight:{border:"#FFD1D9",background:"#FD5A77"},hover:{border:"#FFD1D9",background:"#FD5A77"}},{border:"#C2FABC",background:"#74D66A",highlight:{border:"#E6FFE3",background:"#74D66A"},hover:{border:"#E6FFE3",background:"#74D66A"}},{border:"#EE0000",background:"#990000",highlight:{border:"#FF3333",background:"#BB0000"},hover:{border:"#FF3333",background:"#BB0000"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},bn(this.options,this.defaultOptions)}return xu(t,[{key:"setOptions",value:function(t){var e=["useDefaultGroups"];if(void 0!==t)for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&-1===lg(e).call(e,i)){var n=t[i];this.add(i,n)}}},{key:"clear",value:function(){this._groups=new c_,this._groupNames=[]}},{key:"get",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._groups.get(t);if(void 0===i&&e)if(!1===this.options.useDefaultGroups&&this._groupNames.length>0){var n=this._groupIndex%this._groupNames.length;++this._groupIndex,(i={}).color=this._groups.get(this._groupNames[n]),this._groups.set(t,i)}else{var o=this._defaultIndex%this._defaultGroups.length;this._defaultIndex++,(i={}).color=this._defaultGroups[o],this._groups.set(t,i)}return i}},{key:"add",value:function(t,e){return this._groups.has(t)||this._groupNames.push(t),this._groups.set(t,e),e}}]),t}();Ti({target:"Number",stat:!0},{isNaN:function(t){return t!=t}});var f_=i(et.Number.isNaN),p_=o.isFinite,v_=Number.isFinite||function(t){return"number"==typeof t&&p_(t)};Ti({target:"Number",stat:!0},{isFinite:v_});var g_=i(et.Number.isFinite),y_=Fl.some;Ti({target:"Array",proto:!0,forced:!Xf("some")},{some:function(t){return y_(this,t,arguments.length>1?arguments[1]:void 0)}});var m_=Nn("Array").some,b_=at,w_=m_,k_=Array.prototype,__=function(t){var e=t.some;return t===k_||b_(k_,t)&&e===k_.some?w_:e},x_=i(__);function E_(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}var O_=fg,C_=i(O_);Ti({target:"Object",stat:!0},{setPrototypeOf:ds});var S_=et.Object.setPrototypeOf,T_=i(S_),M_=i(Ln);function P_(t,e){var i;return P_=T_?M_(i=T_).call(i):function(t,e){return t.__proto__=e,t},P_(t,e)}function D_(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=C_(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),xh(t,"prototype",{writable:!1}),e&&P_(t,e)}function I_(t,e){if(e&&("object"===bu(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return E_(t)}var B_=lv,N_=i(B_);function F_(t){var e;return F_=T_?M_(e=N_).call(e):function(t){return t.__proto__||N_(t)},F_(t)}function z_(t,e,i){return(e=ku(e))in t?xh(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}var A_={exports:{}},j_={exports:{}};!function(t){var e=pu,i=yu;function n(o){return t.exports=n="function"==typeof e&&"symbol"==typeof i?function(t){return typeof t}:function(t){return t&&"function"==typeof e&&t.constructor===e&&t!==e.prototype?"symbol":typeof t},t.exports.__esModule=!0,t.exports.default=t.exports,n(o)}t.exports=n,t.exports.__esModule=!0,t.exports.default=t.exports}(j_);var R_=j_.exports,L_=np,H_=Qt,W_=Mf,q_=T,V_=Ze,U_=tt,Y_=gi,X_=Error,G_=g("".replace),K_=String(new X_("zxcasd").stack),$_=/\n\s*at [^:]*:[^\n]*/,Z_=$_.test(K_),Q_=R,J_=!r((function(){var t=new Error("a");return!("stack"in t)||(Object.defineProperty(t,"stack",Q_(1,7)),7!==t.stack)})),tx=gi,ex=function(t,e){if(Z_&&"string"==typeof t&&!X_.prepareStackTrace)for(;e--;)t=G_(t,$_,"");return t},ix=J_,nx=Error.captureStackTrace,ox=co,rx=Ti,sx=at,ax=Sr,hx=ds,lx=function(t,e,i){for(var n=W_(e),o=V_.f,r=q_.f,s=0;s2&&fx(i,arguments[2]);var o=[];return vx(t,bx,{that:o}),cx(i,"errors",o),i};hx?hx(wx,mx):lx(wx,mx,{name:!0});var kx=wx.prototype=dx(mx.prototype,{constructor:ux(1,wx),message:ux(1,""),name:ux(1,"AggregateError")});rx({global:!0,constructor:!0,arity:2},{AggregateError:wx});var _x,xx,Ex,Ox,Cx="process"===w(o.process),Sx=da,Tx=St,Mx=TypeError,Px=function(t){if(Sx(t))return t;throw new Mx(Tx(t)+" is not a constructor")},Dx=ii,Ix=Px,Bx=U,Nx=ue("species"),Fx=function(t,e){var i,n=Dx(t).constructor;return void 0===n||Bx(i=Dx(n)[Nx])?e:Ix(i)},zx=/(?:ipad|iphone|ipod).*applewebkit/i.test(ht),Ax=o,jx=c,Rx=$e,Lx=S,Hx=Qt,Wx=r,qx=er,Vx=wn,Ux=Ce,Yx=kg,Xx=zx,Gx=Cx,Kx=Ax.setImmediate,$x=Ax.clearImmediate,Zx=Ax.process,Qx=Ax.Dispatch,Jx=Ax.Function,tE=Ax.MessageChannel,eE=Ax.String,iE=0,nE={},oE="onreadystatechange";Wx((function(){_x=Ax.location}));var rE=function(t){if(Hx(nE,t)){var e=nE[t];delete nE[t],e()}},sE=function(t){return function(){rE(t)}},aE=function(t){rE(t.data)},hE=function(t){Ax.postMessage(eE(t),_x.protocol+"//"+_x.host)};Kx&&$x||(Kx=function(t){Yx(arguments.length,1);var e=Lx(t)?t:Jx(t),i=Vx(arguments,1);return nE[++iE]=function(){jx(e,void 0,i)},xx(iE),iE},$x=function(t){delete nE[t]},Gx?xx=function(t){Zx.nextTick(sE(t))}:Qx&&Qx.now?xx=function(t){Qx.now(sE(t))}:tE&&!Xx?(Ox=(Ex=new tE).port2,Ex.port1.onmessage=aE,xx=Rx(Ox.postMessage,Ox)):Ax.addEventListener&&Lx(Ax.postMessage)&&!Ax.importScripts&&_x&&"file:"!==_x.protocol&&!Wx(hE)?(xx=hE,Ax.addEventListener("message",aE,!1)):xx=oE in Ux("script")?function(t){qx.appendChild(Ux("script"))[oE]=function(){qx.removeChild(this),rE(t)}}:function(t){setTimeout(sE(t),0)});var lE={set:Kx,clear:$x},dE=function(){this.head=null,this.tail=null};dE.prototype={add:function(t){var e={item:t,next:null},i=this.tail;i?i.next=e:this.head=e,this.tail=e},get:function(){var t=this.head;if(t)return null===(this.head=t.next)&&(this.tail=null),t.item}};var cE,uE,fE,pE,vE,gE=dE,yE=/ipad|iphone|ipod/i.test(ht)&&"undefined"!=typeof Pebble,mE=/web0s(?!.*chrome)/i.test(ht),bE=o,wE=$e,kE=T.f,_E=lE.set,xE=gE,EE=zx,OE=yE,CE=mE,SE=Cx,TE=bE.MutationObserver||bE.WebKitMutationObserver,ME=bE.document,PE=bE.process,DE=bE.Promise,IE=kE(bE,"queueMicrotask"),BE=IE&&IE.value;if(!BE){var NE=new xE,FE=function(){var t,e;for(SE&&(t=PE.domain)&&t.exit();e=NE.get();)try{e()}catch(t){throw NE.head&&cE(),t}t&&t.enter()};EE||SE||CE||!TE||!ME?!OE&&DE&&DE.resolve?((pE=DE.resolve(void 0)).constructor=DE,vE=wE(pE.then,pE),cE=function(){vE(FE)}):SE?cE=function(){PE.nextTick(FE)}:(_E=wE(_E,bE),cE=function(){_E(FE)}):(uE=!0,fE=ME.createTextNode(""),new TE(FE).observe(fE,{characterData:!0}),cE=function(){fE.data=uE=!uE}),BE=function(t){NE.head||cE(),NE.add(t)}}var zE=BE,AE=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}},jE=o.Promise,RE="object"==typeof Deno&&Deno&&"object"==typeof Deno.version,LE=!RE&&!Cx&&"object"==typeof window&&"object"==typeof document,HE=o,WE=jE,qE=S,VE=Ye,UE=$s,YE=ue,XE=LE,GE=RE,KE=vt,$E=WE&&WE.prototype,ZE=YE("species"),QE=!1,JE=qE(HE.PromiseRejectionEvent),tO=VE("Promise",(function(){var t=UE(WE),e=t!==String(WE);if(!e&&66===KE)return!0;if(!$E.catch||!$E.finally)return!0;if(!KE||KE<51||!/native code/.test(t)){var i=new WE((function(t){t(1)})),n=function(t){t((function(){}),(function(){}))};if((i.constructor={})[ZE]=n,!(QE=i.then((function(){}))instanceof n))return!0}return!e&&(XE||GE)&&!JE})),eO={CONSTRUCTOR:tO,REJECTION_EVENT:JE,SUBCLASSING:QE},iO={},nO=Dt,oO=TypeError,rO=function(t){var e,i;this.promise=new t((function(t,n){if(void 0!==e||void 0!==i)throw new oO("Bad Promise constructor");e=t,i=n})),this.resolve=nO(e),this.reject=nO(i)};iO.f=function(t){return new rO(t)};var sO,aO,hO=Ti,lO=Cx,dO=o,cO=I,uO=Mr,fO=Gr,pO=Kk,vO=Dt,gO=S,yO=tt,mO=Ok,bO=Fx,wO=lE.set,kO=zE,_O=function(t,e){try{1===arguments.length?console.error(t):console.error(t,e)}catch(t){}},xO=AE,EO=gE,OO=Lo,CO=jE,SO=eO,TO=iO,MO="Promise",PO=SO.CONSTRUCTOR,DO=SO.REJECTION_EVENT,IO=OO.getterFor(MO),BO=OO.set,NO=CO&&CO.prototype,FO=CO,zO=NO,AO=dO.TypeError,jO=dO.document,RO=dO.process,LO=TO.f,HO=LO,WO=!!(jO&&jO.createEvent&&dO.dispatchEvent),qO="unhandledrejection",VO=function(t){var e;return!(!yO(t)||!gO(e=t.then))&&e},UO=function(t,e){var i,n,o,r=e.value,s=1===e.state,a=s?t.ok:t.fail,h=t.resolve,l=t.reject,d=t.domain;try{a?(s||(2===e.rejection&&$O(e),e.rejection=1),!0===a?i=r:(d&&d.enter(),i=a(r),d&&(d.exit(),o=!0)),i===t.promise?l(new AO("Promise-chain cycle")):(n=VO(i))?cO(n,i,h,l):h(i)):l(r)}catch(t){d&&!o&&d.exit(),l(t)}},YO=function(t,e){t.notified||(t.notified=!0,kO((function(){for(var i,n=t.reactions;i=n.get();)UO(i,t);t.notified=!1,e&&!t.rejection&&GO(t)})))},XO=function(t,e,i){var n,o;WO?((n=jO.createEvent("Event")).promise=e,n.reason=i,n.initEvent(t,!1,!0),dO.dispatchEvent(n)):n={promise:e,reason:i},!DO&&(o=dO["on"+t])?o(n):t===qO&&_O("Unhandled promise rejection",i)},GO=function(t){cO(wO,dO,(function(){var e,i=t.facade,n=t.value;if(KO(t)&&(e=xO((function(){lO?RO.emit("unhandledRejection",n,i):XO(qO,i,n)})),t.rejection=lO||KO(t)?2:1,e.error))throw e.value}))},KO=function(t){return 1!==t.rejection&&!t.parent},$O=function(t){cO(wO,dO,(function(){var e=t.facade;lO?RO.emit("rejectionHandled",e):XO("rejectionhandled",e,t.value)}))},ZO=function(t,e,i){return function(n){t(e,n,i)}},QO=function(t,e,i){t.done||(t.done=!0,i&&(t=i),t.value=e,t.state=2,YO(t,!0))},JO=function(t,e,i){if(!t.done){t.done=!0,i&&(t=i);try{if(t.facade===e)throw new AO("Promise can't be resolved itself");var n=VO(e);n?kO((function(){var i={done:!1};try{cO(n,e,ZO(JO,i,t),ZO(QO,i,t))}catch(e){QO(i,e,t)}})):(t.value=e,t.state=1,YO(t,!1))}catch(e){QO({done:!1},e,t)}}};PO&&(zO=(FO=function(t){mO(this,zO),vO(t),cO(sO,this);var e=IO(this);try{t(ZO(JO,e),ZO(QO,e))}catch(t){QO(e,t)}}).prototype,(sO=function(t){BO(this,{type:MO,done:!1,notified:!1,parent:!1,reactions:new EO,rejection:!1,state:0,value:void 0})}).prototype=uO(zO,"then",(function(t,e){var i=IO(this),n=LO(bO(this,FO));return i.parent=!0,n.ok=!gO(t)||t,n.fail=gO(e)&&e,n.domain=lO?RO.domain:void 0,0===i.state?i.reactions.add(n):kO((function(){UO(n,i)})),n.promise})),aO=function(){var t=new sO,e=IO(t);this.promise=t,this.resolve=ZO(JO,e),this.reject=ZO(QO,e)},TO.f=LO=function(t){return t===FO||undefined===t?new aO(t):HO(t)}),hO({global:!0,constructor:!0,wrap:!0,forced:PO},{Promise:FO}),fO(FO,MO,!1,!0),pO(MO);var tC=jE,eC=eO.CONSTRUCTOR||!qa((function(t){tC.all(t).then(void 0,(function(){}))})),iC=I,nC=Dt,oC=iO,rC=AE,sC=_k;Ti({target:"Promise",stat:!0,forced:eC},{all:function(t){var e=this,i=oC.f(e),n=i.resolve,o=i.reject,r=rC((function(){var i=nC(e.resolve),r=[],s=0,a=1;sC(t,(function(t){var h=s++,l=!1;a++,iC(i,e,t).then((function(t){l||(l=!0,r[h]=t,--a||n(r))}),o)})),--a||n(r)}));return r.error&&o(r.value),i.promise}});var aC=Ti,hC=eO.CONSTRUCTOR;jE&&jE.prototype,aC({target:"Promise",proto:!0,forced:hC,real:!0},{catch:function(t){return this.then(void 0,t)}});var lC=I,dC=Dt,cC=iO,uC=AE,fC=_k;Ti({target:"Promise",stat:!0,forced:eC},{race:function(t){var e=this,i=cC.f(e),n=i.reject,o=uC((function(){var o=dC(e.resolve);fC(t,(function(t){lC(o,e,t).then(i.resolve,n)}))}));return o.error&&n(o.value),i.promise}});var pC=I,vC=iO;Ti({target:"Promise",stat:!0,forced:eO.CONSTRUCTOR},{reject:function(t){var e=vC.f(this);return pC(e.reject,void 0,t),e.promise}});var gC=ii,yC=tt,mC=iO,bC=function(t,e){if(gC(t),yC(e)&&e.constructor===t)return e;var i=mC.f(t);return(0,i.resolve)(e),i.promise},wC=Ti,kC=jE,_C=eO.CONSTRUCTOR,xC=bC,EC=st("Promise"),OC=!_C;wC({target:"Promise",stat:!0,forced:true},{resolve:function(t){return xC(OC&&this===EC?kC:this,t)}});var CC=I,SC=Dt,TC=iO,MC=AE,PC=_k;Ti({target:"Promise",stat:!0,forced:eC},{allSettled:function(t){var e=this,i=TC.f(e),n=i.resolve,o=i.reject,r=MC((function(){var i=SC(e.resolve),o=[],r=0,s=1;PC(t,(function(t){var a=r++,h=!1;s++,CC(i,e,t).then((function(t){h||(h=!0,o[a]={status:"fulfilled",value:t},--s||n(o))}),(function(t){h||(h=!0,o[a]={status:"rejected",reason:t},--s||n(o))}))})),--s||n(o)}));return r.error&&o(r.value),i.promise}});var DC=I,IC=Dt,BC=st,NC=iO,FC=AE,zC=_k,AC="No one promise resolved";Ti({target:"Promise",stat:!0,forced:eC},{any:function(t){var e=this,i=BC("AggregateError"),n=NC.f(e),o=n.resolve,r=n.reject,s=FC((function(){var n=IC(e.resolve),s=[],a=0,h=1,l=!1;zC(t,(function(t){var d=a++,c=!1;h++,DC(n,e,t).then((function(t){c||l||(l=!0,o(t))}),(function(t){c||l||(c=!0,s[d]=t,--h||r(new i(s,AC)))}))})),--h||r(new i(s,AC))}));return s.error&&r(s.value),n.promise}});var jC=Ti,RC=jE,LC=r,HC=st,WC=S,qC=Fx,VC=bC,UC=RC&&RC.prototype;jC({target:"Promise",proto:!0,real:!0,forced:!!RC&&LC((function(){UC.finally.call({then:function(){}},(function(){}))}))},{finally:function(t){var e=qC(this,HC("Promise")),i=WC(t);return this.then(i?function(i){return VC(e,t()).then((function(){return i}))}:t,i?function(i){return VC(e,t()).then((function(){throw i}))}:t)}});var YC=et.Promise,XC=iO;Ti({target:"Promise",stat:!0},{withResolvers:function(){var t=XC.f(this);return{promise:t.promise,resolve:t.resolve,reject:t.reject}}});var GC=YC,KC=iO,$C=AE;Ti({target:"Promise",stat:!0,forced:!0},{try:function(t){var e=KC.f(this),i=$C(t);return(i.error?e.reject:e.resolve)(i.value),e.promise}});var ZC=GC,QC=pp;!function(t){var e=R_.default,i=_h,n=pu,o=O_,r=B_,s=L_,a=Lu,h=S_,l=ZC,d=QC,c=lf;function u(){t.exports=u=function(){return p},t.exports.__esModule=!0,t.exports.default=t.exports;var f,p={},v=Object.prototype,g=v.hasOwnProperty,y=i||function(t,e,i){t[e]=i.value},m="function"==typeof n?n:{},b=m.iterator||"@@iterator",w=m.asyncIterator||"@@asyncIterator",k=m.toStringTag||"@@toStringTag";function _(t,e,n){return i(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{_({},"")}catch(f){_=function(t,e,i){return t[e]=i}}function x(t,e,i,n){var r=e&&e.prototype instanceof P?e:P,s=o(r.prototype),a=new W(n||[]);return y(s,"_invoke",{value:j(t,i,a)}),s}function E(t,e,i){try{return{type:"normal",arg:t.call(e,i)}}catch(t){return{type:"throw",arg:t}}}p.wrap=x;var O="suspendedStart",C="suspendedYield",S="executing",T="completed",M={};function P(){}function D(){}function I(){}var B={};_(B,b,(function(){return this}));var N=r&&r(r(q([])));N&&N!==v&&g.call(N,b)&&(B=N);var F=I.prototype=P.prototype=o(B);function z(t){var e;s(e=["next","throw","return"]).call(e,(function(e){_(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,i){function n(o,r,s,a){var h=E(t[o],t,r);if("throw"!==h.type){var l=h.arg,d=l.value;return d&&"object"==e(d)&&g.call(d,"__await")?i.resolve(d.__await).then((function(t){n("next",t,s,a)}),(function(t){n("throw",t,s,a)})):i.resolve(d).then((function(t){l.value=t,s(l)}),(function(t){return n("throw",t,s,a)}))}a(h.arg)}var o;y(this,"_invoke",{value:function(t,e){function r(){return new i((function(i,o){n(t,e,i,o)}))}return o=o?o.then(r,r):r()}})}function j(t,e,i){var n=O;return function(o,r){if(n===S)throw new Error("Generator is already running");if(n===T){if("throw"===o)throw r;return{value:f,done:!0}}for(i.method=o,i.arg=r;;){var s=i.delegate;if(s){var a=R(s,i);if(a){if(a===M)continue;return a}}if("next"===i.method)i.sent=i._sent=i.arg;else if("throw"===i.method){if(n===O)throw n=T,i.arg;i.dispatchException(i.arg)}else"return"===i.method&&i.abrupt("return",i.arg);n=S;var h=E(t,e,i);if("normal"===h.type){if(n=i.done?T:C,h.arg===M)continue;return{value:h.arg,done:i.done}}"throw"===h.type&&(n=T,i.method="throw",i.arg=h.arg)}}}function R(t,e){var i=e.method,n=t.iterator[i];if(n===f)return e.delegate=null,"throw"===i&&t.iterator.return&&(e.method="return",e.arg=f,R(t,e),"throw"===e.method)||"return"!==i&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+i+"' method")),M;var o=E(n,t.iterator,e.arg);if("throw"===o.type)return e.method="throw",e.arg=o.arg,e.delegate=null,M;var r=o.arg;return r?r.done?(e[t.resultName]=r.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=f),e.delegate=null,M):r:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,M)}function L(t){var e,i={tryLoc:t[0]};1 in t&&(i.catchLoc=t[1]),2 in t&&(i.finallyLoc=t[2],i.afterLoc=t[3]),a(e=this.tryEntries).call(e,i)}function H(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function W(t){this.tryEntries=[{tryLoc:"root"}],s(t).call(t,L,this),this.reset(!0)}function q(t){if(t||""===t){var i=t[b];if(i)return i.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function e(){for(;++n=0;--n){var o=this.tryEntries[n],r=o.completion;if("root"===o.tryLoc)return i("end");if(o.tryLoc<=this.prev){var s=g.call(o,"catchLoc"),a=g.call(o,"finallyLoc");if(s&&a){if(this.prev=0;--i){var n=this.tryEntries[i];if(n.tryLoc<=this.prev&&g.call(n,"finallyLoc")&&this.prev=0;--e){var i=this.tryEntries[e];if(i.finallyLoc===t)return this.complete(i.completion,i.afterLoc),H(i),M}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.tryLoc===t){var n=i.completion;if("throw"===n.type){var o=n.arg;H(i)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,i){return this.delegate={iterator:q(t),resultName:e,nextLoc:i},"next"===this.method&&(this.arg=f),M}},p}t.exports=u,t.exports.__esModule=!0,t.exports.default=t.exports}(A_);var JC=(0,A_.exports)(),tS=JC;try{regeneratorRuntime=JC}catch(t){"object"==typeof globalThis?globalThis.regeneratorRuntime=JC:Function("r","regeneratorRuntime = r")(JC)}var eS=i(tS),iS=Dt,nS=Kt,oS=V,rS=Li,sS=TypeError,aS=function(t){return function(e,i,n,o){iS(i);var r=nS(e),s=oS(r),a=rS(r),h=t?a-1:0,l=t?-1:1;if(n<2)for(;;){if(h in s){o=s[h],h+=l;break}if(h+=l,t?h<0:a<=h)throw new sS("Reduce of empty array with no initial value")}for(;t?h>=0:a>h;h+=l)h in s&&(o=i(o,s[h],h,r));return o}},hS={left:aS(!1),right:aS(!0)}.left;Ti({target:"Array",proto:!0,forced:!Cx&&vt>79&&vt<83||!Xf("reduce")},{reduce:function(t){var e=arguments.length;return hS(this,t,e,e>1?arguments[1]:void 0)}});var lS=Nn("Array").reduce,dS=at,cS=lS,uS=Array.prototype,fS=function(t){var e=t.reduce;return t===uS||dS(uS,t)&&e===uS.reduce?cS:e},pS=i(fS),vS=Oh,gS=Li,yS=Sh,mS=$e,bS=function(t,e,i,n,o,r,s,a){for(var h,l,d=o,c=0,u=!!s&&mS(s,a);c0&&vS(h)?(l=gS(h),d=bS(t,e,h,l,d,r-1)-1):(yS(d+1),t[d]=h),d++),c++;return d},wS=bS,kS=Dt,_S=Kt,xS=Li,ES=Nh;Ti({target:"Array",proto:!0},{flatMap:function(t){var e,i=_S(this),n=xS(i);return kS(t),(e=ES(i,0)).length=wS(e,i,i,n,0,1,t,arguments.length>1?arguments[1]:void 0),e}});var OS=Nn("Array").flatMap,CS=at,SS=OS,TS=Array.prototype,MS=function(t){var e=t.flatMap;return t===TS||CS(TS,t)&&e===TS.flatMap?SS:e},PS=i(MS);Wk("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),d_);var DS=i(et.Set),IS=i(gu),BS=i(Sa),NS=hl,FS=Math.floor,zS=function(t,e){var i=t.length,n=FS(i/2);return i<8?AS(t,e):jS(t,zS(NS(t,0,n),e),zS(NS(t,n),e),e)},AS=function(t,e){for(var i,n,o=t.length,r=1;r0;)t[n]=t[--n];n!==r++&&(t[n]=i)}return t},jS=function(t,e,i,n){for(var o=e.length,r=i.length,s=0,a=0;s3)){if(iT)return!0;if(oT)return oT<603;var t,e,i,n,o="";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:i=3;break;case 68:case 71:i=4;break;default:i=2}for(n=0;n<47;n++)rT.push({k:e+n,v:i})}for(rT.sort((function(t,e){return e.v-t.v})),n=0;nZS(i)?1:-1}}(t)),i=KS(o),n=0;na;)void 0!==(i=o(n,e=r[a++]))&&kM(s,e,i);return s}});var _M=i(et.Object.getOwnPropertyDescriptors),xM={exports:{}},EM=Ti,OM=M,CM=Xo.f;EM({target:"Object",stat:!0,forced:Object.defineProperties!==CM,sham:!OM},{defineProperties:CM});var SM=et.Object,TM=xM.exports=function(t,e){return SM.defineProperties(t,e)};SM.defineProperties.sham&&(TM.sham=!0);var MM=i(xM.exports);let PM;const DM=new Uint8Array(16);function IM(){if(!PM&&(PM="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!PM))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return PM(DM)}const BM=[];for(let t=0;t<256;++t)BM.push((t+256).toString(16).slice(1));var NM,FM={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function zM(t,e,i){if(FM.randomUUID&&!e&&!t)return FM.randomUUID();const n=(t=t||{}).random||(t.rng||IM)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,e){i=i||0;for(let t=0;t<16;++t)e[i+t]=n[t];return e}return function(t,e=0){return BM[t[e+0]]+BM[t[e+1]]+BM[t[e+2]]+BM[t[e+3]]+"-"+BM[t[e+4]]+BM[t[e+5]]+"-"+BM[t[e+6]]+BM[t[e+7]]+"-"+BM[t[e+8]]+BM[t[e+9]]+"-"+BM[t[e+10]]+BM[t[e+11]]+BM[t[e+12]]+BM[t[e+13]]+BM[t[e+14]]+BM[t[e+15]]}(n)}function AM(t,e){var i=Hf(t);if(aM){var n=aM(t);e&&(n=yv(n).call(n,(function(e){return yM(t,e).enumerable}))),i.push.apply(i,n)}return i}function jM(t){for(var e=1;e=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function HM(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);ithis.max&&this.flush(),null!=this._timeout&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&"number"==typeof this.delay&&(this._timeout=jg((function(){t.flush()}),this.delay))}},{key:"flush",value:function(){var t,e;op(t=Ap(e=this._queue).call(e,0)).call(t,(function(t){t.fn.apply(t.context||t.fn,t.args||[])}))}}],[{key:"extend",value:function(e,i){var n=new t(i);if(void 0!==e.flush)throw new Error("Target object already has a property flush");e.flush=function(){n.flush()};var o=[{name:"flush",original:void 0}];if(i&&i.replace)for(var r=0;ro&&(o=h,n=a)}return n}},{key:"min",value:function(t){var e=BS(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=pf(i.value,2),s=r[0],a=r[1],h=t(a,s);ho?1:no)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:"min",value:function(t){var e,i,n=null,o=null,r=LM(FT(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];"number"==typeof a&&(null==o||ae.x&&t.tope.y}function mP(t){return"string"==typeof t&&""!==t}function bP(t,e,i,n){var o=n.x,r=n.y;if("function"==typeof n.distanceToBorder){var s=n.distanceToBorder(t,e),a=Math.sin(e)*s,h=Math.cos(e)*s;h===s?(o+=s,r=n.y):a===s?(o=n.x,r-=s):(o+=h,r-=a)}else n.shape.width>n.shape.height?(o=n.x+.5*n.shape.width,r=n.y-i):(o=n.x+i,r=n.y-.5*n.shape.height);return{x:o,y:r}}var wP=function(){function t(e){ph(this,t),this.measureText=e,this.current=0,this.width=0,this.height=0,this.lines=[]}return xu(t,[{key:"_add",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"normal";void 0===this.lines[t]&&(this.lines[t]={width:0,height:0,blocks:[]});var n=e;void 0!==e&&""!==e||(n=" ");var o=this.measureText(n,i),r=bn({},FT(o));r.text=e,r.width=o.width,r.mod=i,void 0!==e&&""!==e||(r.width=0),this.lines[t].blocks.push(r),this.lines[t].width+=r.width}},{key:"curWidth",value:function(){var t=this.lines[this.current];return void 0===t?0:t.width}},{key:"append",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal";this._add(this.current,t,e)}},{key:"newLine",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal";this._add(this.current,t,e),this.current++}},{key:"determineLineHeights",value:function(){for(var t=0;tt&&(t=n.width),e+=n.height}this.width=t,this.height=e}},{key:"removeEmptyBlocks",value:function(){for(var t=[],e=0;e"://,""://,""://,"":/<\/b>/,"":/<\/i>/,"":/<\/code>/,"*":/\*/,_:/_/,"`":/`/,afterBold:/[^*]/,afterItal:/[^_]/,afterMono:/[^`]/},_P=function(){function t(e){ph(this,t),this.text=e,this.bold=!1,this.ital=!1,this.mono=!1,this.spacing=!1,this.position=0,this.buffer="",this.modStack=[],this.blocks=[]}return xu(t,[{key:"mod",value:function(){return 0===this.modStack.length?"normal":this.modStack[0]}},{key:"modName",value:function(){return 0===this.modStack.length?"normal":"mono"===this.modStack[0]?"mono":this.bold&&this.ital?"boldital":this.bold?"bold":this.ital?"ital":void 0}},{key:"emitBlock",value:function(){this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(this.blocks.push({text:this.buffer,mod:this.modName()}),this.buffer="")}},{key:"add",value:function(t){" "===t&&(this.spacing=!0),this.spacing&&(this.buffer+=" ",this.spacing=!1)," "!=t&&(this.buffer+=t)}},{key:"parseWS",value:function(t){return!!/[ \t]/.test(t)&&(this.mono?this.add(t):this.spacing=!0,!0)}},{key:"setTag",value:function(t){this.emitBlock(),this[t]=!0,this.modStack.unshift(t)}},{key:"unsetTag",value:function(t){this.emitBlock(),this[t]=!1,this.modStack.shift()}},{key:"parseStartTag",value:function(t,e){return!(this.mono||this[t]||!this.match(e))&&(this.setTag(t),!0)}},{key:"match",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=pf(this.prepareRegExp(t),2),n=i[0],o=i[1],r=n.test(this.text.substr(this.position,o));return r&&e&&(this.position+=o-1),r}},{key:"parseEndTag",value:function(t,e,i){var n=this.mod()===t;return!(!(n="mono"===t?n&&this.mono:n&&!this.mono)||!this.match(e))&&(void 0!==i?(this.position===this.text.length-1||this.match(i,!1))&&this.unsetTag(t):this.unsetTag(t),!0)}},{key:"replace",value:function(t,e){return!!this.match(t)&&(this.add(e),this.position+=length-1,!0)}},{key:"prepareRegExp",value:function(t){var e,i;if(t instanceof RegExp)i=t,e=1;else{var n=kP[t];i=void 0!==n?n:new RegExp(t),e=t.length}return[i,e]}}]),t}(),xP=function(){function t(e,i,n,o){var r=this;ph(this,t),this.ctx=e,this.parent=i,this.selected=n,this.hover=o;this.lines=new wP((function(t,i){if(void 0===t)return 0;var s=r.parent.getFormattingValues(e,n,o,i),a=0;""!==t&&(a=r.ctx.measureText(t).width);return{width:a,values:s}}))}return xu(t,[{key:"process",value:function(t){if(!mP(t))return this.lines.finalize();var e=this.parent.fontOptions;t=(t=t.replace(/\r\n/g,"\n")).replace(/\r/g,"\n");var i=String(t).split("\n"),n=i.length;if(e.multi)for(var o=0;o0)for(var s=0;s0)for(var u=0;u")||e.parseStartTag("ital","")||e.parseStartTag("mono","")||e.parseEndTag("bold","")||e.parseEndTag("ital","")||e.parseEndTag("mono",""))||i(n)||e.add(n),e.position++}return e.emitBlock(),e.blocks}},{key:"splitMarkdownBlocks",value:function(t){for(var e=this,i=new _P(t),n=!0,o=function(t){return!!/\\/.test(t)&&(i.positionthis.parent.fontOptions.maxWdt}},{key:"getLongestFit",value:function(t){for(var e="",i=0;i1&&void 0!==arguments[1]?arguments[1]:"normal",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.parent.getFormattingValues(this.ctx,this.selected,this.hover,e);for(var n=(t=(t=t.replace(/^( +)/g,"$1\r")).replace(/([^\r][^ ]*)( +)/g,"$1\r$2\r")).split("\r");n.length>0;){var o=this.getLongestFit(n);if(0===o){var r=n[0],s=this.getLongestFitWord(r);this.lines.newLine(xf(r).call(r,0,s),e),n[0]=xf(r).call(r,s)}else{var a=o;" "===n[o-1]?o--:" "===n[a]&&a++;var h=xf(n).call(n,0,o).join("");o==n.length&&i?this.lines.append(h,e):this.lines.newLine(h,e),n=xf(n).call(n,a)}}}}]),t}(),EP=["bold","ital","boldital","mono"],OP=function(){function t(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];ph(this,t),this.body=e,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(i),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=n}return xu(t,[{key:"setOptions",value:function(t){if(this.elementOptions=t,this.initFontOptions(t.font),mP(t.label)?this.labelDirty=!0:t.label=void 0,void 0!==t.font&&null!==t.font)if("string"==typeof t.font)this.baseSize=this.fontOptions.size;else if("object"===bu(t.font)){var e=t.font.size;void 0!==e&&(this.baseSize=e)}}},{key:"initFontOptions",value:function(e){var i=this;kb(EP,(function(t){i.fontOptions[t]={}})),t.parseFontString(this.fontOptions,e)?this.fontOptions.vadjust=0:kb(e,(function(t,e){null!=t&&"object"!==bu(t)&&(i.fontOptions[e]=t)}))}},{key:"constrain",value:function(t){var e={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:"middle"},i=Rb(t,"widthConstraint");if("number"==typeof i)e.maxWdt=Number(i),e.minWdt=Number(i);else if("object"===bu(i)){var n=Rb(t,["widthConstraint","maximum"]);"number"==typeof n&&(e.maxWdt=Number(n));var o=Rb(t,["widthConstraint","minimum"]);"number"==typeof o&&(e.minWdt=Number(o))}var r=Rb(t,"heightConstraint");if("number"==typeof r)e.minHgt=Number(r);else if("object"===bu(r)){var s=Rb(t,["heightConstraint","minimum"]);"number"==typeof s&&(e.minHgt=Number(s));var a=Rb(t,["heightConstraint","valign"]);"string"==typeof a&&("top"!==a&&"bottom"!==a||(e.valign=a))}return e}},{key:"update",value:function(t,e){this.setOptions(t,!0),this.propagateFonts(e),gb(this.fontOptions,this.constrain(e)),this.fontOptions.chooser=gP("label",e)}},{key:"adjustSizes",value:function(t){var e=t?t.right+t.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=e,this.fontOptions.minWdt-=e);var i=t?t.top+t.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=i)}},{key:"addFontOptionsToPile",value:function(t,e){for(var i=0;i5&&void 0!==arguments[5]?arguments[5]:"middle";if(void 0!==this.elementOptions.label){var s=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&s=this.elementOptions.scaling.label.maxVisible&&(s=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(t,n,o,e,i,r),this._drawBackground(t),this._drawText(t,e,this.size.yLine,r,s))}}},{key:"_drawBackground",value:function(t){if(void 0!==this.fontOptions.background&&"none"!==this.fontOptions.background){t.fillStyle=this.fontOptions.background;var e=this.getSize();t.fillRect(e.left,e.top,e.width,e.height)}}},{key:"_drawText",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"middle",o=arguments.length>4?arguments[4]:void 0,r=pf(this._setAlignment(t,e,i,n),2);e=r[0],i=r[1],t.textAlign="left",e-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&("top"===this.fontOptions.valign&&(i-=(this.size.height-this.size.labelHeight)/2),"bottom"===this.fontOptions.valign&&(i+=(this.size.height-this.size.labelHeight)/2));for(var s=0;s0&&(t.lineWidth=d.strokeWidth,t.strokeStyle=f,t.lineJoin="round"),t.fillStyle=u,d.strokeWidth>0&&t.strokeText(d.text,e+h,i+d.vadjust),t.fillText(d.text,e+h,i+d.vadjust),h+=d.width}i+=a.height}}}},{key:"_setAlignment",value:function(t,e,i,n){if(this.isEdgeLabel&&"horizontal"!==this.fontOptions.align&&!1===this.pointToSelf){e=0,i=0;"top"===this.fontOptions.align?(t.textBaseline="alphabetic",i-=4):"bottom"===this.fontOptions.align?(t.textBaseline="hanging",i+=4):t.textBaseline="middle"}else t.textBaseline=n;return[e,i]}},{key:"_getColor",value:function(t,e,i){var n=t||"#000000",o=i||"#ffffff";if(e<=this.elementOptions.scaling.label.drawThreshold){var r=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-e)));n=Ob(n,r),o=Ob(o,r)}return[n,o]}},{key:"getTextSize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(t,e,i),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:"getSize",value:function(){var t=this.size.left,e=this.size.top-1;if(this.isEdgeLabel){var i=.5*-this.size.width;switch(this.fontOptions.align){case"middle":t=i,e=.5*-this.size.height;break;case"top":t=i,e=-(this.size.height+2);break;case"bottom":t=i,e=2}}return{left:t,top:e,width:this.size.width,height:this.size.height}}},{key:"calculateLabelSize",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"middle";this._processLabel(t,e,i),this.size.left=n-.5*this.size.width,this.size.top=o-.5*this.size.height,this.size.yLine=o+.5*(1-this.lineCount)*this.fontOptions.size,"hanging"===r&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}},{key:"getFormattingValues",value:function(t,e,i,n){var o=function(t,e,i){return"normal"===e?"mod"===i?"":t[i]:void 0!==t[e][i]?t[e][i]:t[i]},r={color:o(this.fontOptions,n,"color"),size:o(this.fontOptions,n,"size"),face:o(this.fontOptions,n,"face"),mod:o(this.fontOptions,n,"mod"),vadjust:o(this.fontOptions,n,"vadjust"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(e||i)&&("normal"===n&&!0===this.fontOptions.chooser&&this.elementOptions.labelHighlightBold?r.mod="bold":"function"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(r,this.elementOptions.id,e,i));var s="";return void 0!==r.mod&&""!==r.mod&&(s+=r.mod+" "),s+=r.size+"px "+r.face,t.font=s.replace(/"/g,""),r.font=t.font,r.height=r.size,r}},{key:"differentState",value:function(t,e){return t!==this.selectedState||e!==this.hoverState}},{key:"_processLabelText",value:function(t,e,i,n){return new xP(t,this,e,i).process(n)}},{key:"_processLabel",value:function(t,e,i){if(!1!==this.labelDirty||this.differentState(e,i)){var n=this._processLabelText(t,e,i,this.elementOptions.label);this.fontOptions.minWdt>0&&n.width0&&n.height0&&(this.enableBorderDashes(t,e),t.stroke(),this.disableBorderDashes(t,e)),t.restore()}},{key:"performFill",value:function(t,e){t.save(),t.fillStyle=e.color,this.enableShadow(t,e),Kg(t).call(t),this.disableShadow(t,e),t.restore(),this.performStroke(t,e)}},{key:"_addBoundingBoxMargin",value:function(t){this.boundingBox.left-=t,this.boundingBox.top-=t,this.boundingBox.bottom+=t,this.boundingBox.right+=t}},{key:"_updateBoundingBox",value:function(t,e,i,n,o){void 0!==i&&this.resize(i,n,o),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:"updateBoundingBox",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o)}},{key:"getDimensionsFromLabel",value:function(t,e,i){this.textSize=this.labelModule.getTextSize(t,e,i);var n=this.textSize.width,o=this.textSize.height;return 0===n&&(n=14,o=14),{width:n,height:o}}}]),t}();function SP(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var TP=function(t){D_(i,t);var e=SP(i);function i(t,n,o){var r;return ph(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return xu(i,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.width=n.width+this.margin.right+this.margin.left,this.height=n.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}},{key:"draw",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),qn(t,this.left,this.top,this.width,this.height,r.borderRadius),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:"updateBoundingBox",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o);var r=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(r)}},{key:"distanceToBorder",value:function(t,e){t&&this.resize(t);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}}]),i}(CP);function MP(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var PP=function(t){D_(i,t);var e=MP(i);function i(t,n,o){var r;return ph(this,i),(r=e.call(this,t,n,o)).labelOffset=0,r.selected=!1,r}return xu(i,[{key:"setOptions",value:function(t,e,i){this.options=t,void 0===e&&void 0===i||this.setImages(e,i)}},{key:"setImages",value:function(t,e){e&&this.selected?(this.imageObj=e,this.imageObjAlt=t):(this.imageObj=t,this.imageObjAlt=e)}},{key:"switchImages",value:function(t){var e=t&&!this.selected||!t&&this.selected;if(this.selected=t,void 0!==this.imageObjAlt&&e){var i=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=i}}},{key:"_getImagePadding",value:function(){var t={top:0,right:0,bottom:0,left:0};if(this.options.imagePadding){var e=this.options.imagePadding;"object"==bu(e)?(t.top=e.top,t.right=e.right,t.bottom=e.bottom,t.left=e.left):(t.top=e,t.right=e,t.bottom=e,t.left=e)}return t}},{key:"_resizeImage",value:function(){var t,e;if(!1===this.options.shapeProperties.useImageSize){var i=1,n=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?i=this.imageObj.width/this.imageObj.height:n=this.imageObj.height/this.imageObj.width),t=2*this.options.size*i,e=2*this.options.size*n}else{var o=this._getImagePadding();t=this.imageObj.width+o.left+o.right,e=this.imageObj.height+o.top+o.bottom}this.width=t,this.height=e,this.radius=.5*this.width}},{key:"_drawRawCircle",value:function(t,e,i,n){this.initContextForDraw(t,n),Wn(t,e,i,n.size),this.performFill(t,n)}},{key:"_drawImageAtPosition",value:function(t,e){if(0!=this.imageObj.width){t.globalAlpha=void 0!==e.opacity?e.opacity:1,this.enableShadow(t,e);var i=1;!0===this.options.shapeProperties.interpolation&&(i=this.imageObj.width/this.width/this.body.view.scale);var n=this._getImagePadding(),o=this.left+n.left,r=this.top+n.top,s=this.width-n.left-n.right,a=this.height-n.top-n.bottom;this.imageObj.drawImageAtPosition(t,i,o,r,s,a),this.disableShadow(t,e)}}},{key:"_drawImageLabel",value:function(t,e,i,n,o){var r=0;if(void 0!==this.height){r=.5*this.height;var s=this.labelModule.getTextSize(t,n,o);s.lineCount>=1&&(r+=s.height/2)}var a=i+r;this.options.label&&(this.labelOffset=r),this.labelModule.draw(t,e,a,n,o,"hanging")}}]),i}(CP);function DP(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var IP=function(t){D_(i,t);var e=DP(i);function i(t,n,o){var r;return ph(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return xu(i,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i),o=Math.max(n.width+this.margin.right+this.margin.left,n.height+this.margin.top+this.margin.bottom);this.options.size=o/2,this.width=o,this.height=o,this.radius=this.width/2}}},{key:"draw",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,r),this.updateBoundingBox(e,i),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,i,n,o)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size}},{key:"distanceToBorder",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(PP);function BP(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var NP=function(t){D_(i,t);var e=BP(i);function i(t,n,o,r,s){var a;return ph(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return xu(i,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height){var n=2*this.options.size;return this.width=n,this.height=n,void(this.radius=.5*this.width)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:"draw",value:function(t,e,i,n,o,r){this.switchImages(n),this.resize();var s=e,a=i;"top-left"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),this._drawRawCircle(t,s,a,r),t.save(),t.clip(),this._drawImageAtPosition(t,r),t.restore(),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){"top-left"===this.options.shapeProperties.coordinateOrigin?(this.boundingBox.top=e,this.boundingBox.left=t,this.boundingBox.right=t+2*this.options.size,this.boundingBox.bottom=e+2*this.options.size):(this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size),this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:"distanceToBorder",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(PP);function FP(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var zP=function(t){D_(i,t);var e=FP(i);function i(t,n,o){return ph(this,i),e.call(this,t,n,o)}return xu(i,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{size:this.options.size};if(this.needsRefresh(e,i)){var o,r;this.labelModule.getTextSize(t,e,i);var s=2*n.size;this.width=null!==(o=this.customSizeWidth)&&void 0!==o?o:s,this.height=null!==(r=this.customSizeHeight)&&void 0!==r?r:s,this.radius=.5*this.width}}},{key:"_drawShape",value:function(t,e,i,n,o,r,s,a){var h,l=this;return this.resize(t,r,s,a),this.left=n-this.width/2,this.top=o-this.height/2,this.initContextForDraw(t,a),(h=e,Object.prototype.hasOwnProperty.call(Xn,h)?Xn[h]:function(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),n=1;n0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),i}(CP);function AP(t,e){var i=Hf(t);if(aM){var n=aM(t);e&&(n=yv(n).call(n,(function(e){return yM(t,e).enumerable}))),i.push.apply(i,n)}return i}function jP(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.height=2*n.height,this.width=n.width+n.height,this.radius=.5*this.width}}},{key:"draw",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-.5*this.width,this.top=i-.5*this.height,this.initContextForDraw(t,r),Vn(t,this.left,this.top,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,e,i,n,o)}},{key:"distanceToBorder",value:function(t,e){t&&this.resize(t);var i=.5*this.width,n=.5*this.height,o=Math.sin(e)*i,r=Math.cos(e)*n;return i*n/Math.sqrt(o*o+r*r)}}]),i}(CP);function KP(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var $P=function(t){D_(i,t);var e=KP(i);function i(t,n,o){var r;return ph(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return xu(i,[{key:"resize",value:function(t,e,i){this.needsRefresh(e,i)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(t,e,i,n,o,r){var s=this;return this.resize(t,n,o),this.options.icon.size=this.options.icon.size||50,this.left=e-this.width/2,this.top=i-this.height/2,this._icon(t,e,i,n,o,r),{drawExternalLabel:function(){if(void 0!==s.options.label){s.labelModule.draw(t,s.left+s.iconSize.width/2+s.margin.left,i+s.height/2+5,n)}s.updateBoundingBox(e,i)}}}},{key:"updateBoundingBox",value:function(t,e){if(this.boundingBox.top=e-.5*this.options.icon.size,this.boundingBox.left=t-.5*this.options.icon.size,this.boundingBox.right=t+.5*this.options.icon.size,this.boundingBox.bottom=e+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5)}}},{key:"_icon",value:function(t,e,i,n,o,r){var s=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=[null!=this.options.icon.weight?this.options.icon.weight:n?"bold":"",(null!=this.options.icon.weight&&n?5:0)+s+"px",this.options.icon.face].join(" "),t.fillStyle=this.options.icon.color||"black",t.textAlign="center",t.textBaseline="middle",this.enableShadow(t,r),t.fillText(this.options.icon.code,e,i),this.disableShadow(t,r)):console.error("When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.")}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(CP);function ZP(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var QP=function(t){D_(i,t);var e=ZP(i);function i(t,n,o,r,s){var a;return ph(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return xu(i,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height){var n=2*this.options.size;return this.width=n,void(this.height=n)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:"draw",value:function(t,e,i,n,o,r){t.save(),this.switchImages(n),this.resize();var s=e,a=i;if("top-left"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),!0===this.options.shapeProperties.useBorderWithImage){var h=this.options.borderWidth,l=this.options.borderWidthSelected||2*this.options.borderWidth,d=(n?l:h)/this.body.view.scale;t.lineWidth=Math.min(this.width,d),t.beginPath();var c=n?this.options.color.highlight.border:o?this.options.color.hover.border:this.options.color.border,u=n?this.options.color.highlight.background:o?this.options.color.hover.background:this.options.color.background;void 0!==r.opacity&&(c=Ob(c,r.opacity),u=Ob(u,r.opacity)),t.strokeStyle=c,t.fillStyle=u,t.rect(this.left-.5*t.lineWidth,this.top-.5*t.lineWidth,this.width+t.lineWidth,this.height+t.lineWidth),Kg(t).call(t),this.performStroke(t,r),t.closePath()}this._drawImageAtPosition(t,r),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i),t.restore()}},{key:"updateBoundingBox",value:function(t,e){this.resize(),"top-left"===this.options.shapeProperties.coordinateOrigin?(this.left=t,this.top=e):(this.left=t-this.width/2,this.top=e-this.height/2),this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(PP);function JP(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var tD=function(t){D_(i,t);var e=JP(i);function i(t,n,o){return ph(this,i),e.call(this,t,n,o)}return xu(i,[{key:"draw",value:function(t,e,i,n,o,r){return this._drawShape(t,"square",2,e,i,n,o,r)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(zP);function eD(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var iD=function(t){D_(i,t);var e=eD(i);function i(t,n,o){return ph(this,i),e.call(this,t,n,o)}return xu(i,[{key:"draw",value:function(t,e,i,n,o,r){return this._drawShape(t,"hexagon",4,e,i,n,o,r)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(zP);function nD(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var oD=function(t){D_(i,t);var e=nD(i);function i(t,n,o){return ph(this,i),e.call(this,t,n,o)}return xu(i,[{key:"draw",value:function(t,e,i,n,o,r){return this._drawShape(t,"star",4,e,i,n,o,r)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(zP);function rD(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var sD=function(t){D_(i,t);var e=rD(i);function i(t,n,o){var r;return ph(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return xu(i,[{key:"resize",value:function(t,e,i){this.needsRefresh(e,i)&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.enableShadow(t,r),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o),this.disableShadow(t,r),this.updateBoundingBox(e,i,t,n,o)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(CP);function aD(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var hD=function(t){D_(i,t);var e=aD(i);function i(t,n,o){return ph(this,i),e.call(this,t,n,o)}return xu(i,[{key:"draw",value:function(t,e,i,n,o,r){return this._drawShape(t,"triangle",3,e,i,n,o,r)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(zP);function lD(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var dD=function(t){D_(i,t);var e=lD(i);function i(t,n,o){return ph(this,i),e.call(this,t,n,o)}return xu(i,[{key:"draw",value:function(t,e,i,n,o,r){return this._drawShape(t,"triangleDown",3,e,i,n,o,r)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(zP);function cD(t,e){var i=Hf(t);if(aM){var n=aM(t);e&&(n=yv(n).call(n,(function(e){return yM(t,e).enumerable}))),i.push.apply(i,n)}return i}function uD(t){for(var e=1;et.left&&this.shape.topt.top}},{key:"isBoundingBoxOverlappingWith",value:function(t){return this.shape.boundingBox.leftt.left&&this.shape.boundingBox.topt.top}}],[{key:"checkOpacity",value:function(t){return 0<=t&&t<=1}},{key:"checkCoordinateOrigin",value:function(t){return void 0===t||"center"===t||"top-left"===t}},{key:"updateGroupOptions",value:function(e,i,n){var o;if(void 0!==n){var r=e.group;if(void 0!==i&&void 0!==i.group&&r!==i.group)throw new Error("updateGroupOptions: group values in options don't match.");if("number"==typeof r||"string"==typeof r&&""!=r){var s=n.get(r);void 0!==s.opacity&&void 0===i.opacity&&(t.checkOpacity(s.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+s.opacity),s.opacity=void 0));var a=yv(o=vP(i)).call(o,(function(t){return null!=i[t]}));a.push("font"),vb(a,e,s),e.color=Sb(e.color)}}}},{key:"parseOptions",value:function(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},r=arguments.length>4?arguments[4]:void 0;if(vb(["color","fixed","shadow"],e,i,n),t.checkMass(i),void 0!==e.opacity&&(t.checkOpacity(e.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+e.opacity),e.opacity=void 0)),void 0!==i.opacity&&(t.checkOpacity(i.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+i.opacity),i.opacity=void 0)),i.shapeProperties&&!t.checkCoordinateOrigin(i.shapeProperties.coordinateOrigin)&&console.error("Invalid option for node coordinateOrigin, found: "+i.shapeProperties.coordinateOrigin),Ab(e,i,"shadow",o),void 0!==i.color&&null!==i.color){var s=Sb(i.color);ub(e.color,s)}else!0===n&&null===i.color&&(e.color=zb(o.color));void 0!==i.fixed&&null!==i.fixed&&("boolean"==typeof i.fixed?(e.fixed.x=i.fixed,e.fixed.y=i.fixed):(void 0!==i.fixed.x&&"boolean"==typeof i.fixed.x&&(e.fixed.x=i.fixed.x),void 0!==i.fixed.y&&"boolean"==typeof i.fixed.y&&(e.fixed.y=i.fixed.y))),!0===n&&null===i.font&&(e.font=zb(o.font)),t.updateGroupOptions(e,i,r),void 0!==i.scaling&&Ab(e.scaling,i.scaling,"label",o.scaling)}},{key:"checkMass",value:function(t,e){if(void 0!==t.mass&&t.mass<=0){var i="";void 0!==e&&(i=" in node id: "+e),console.error("%cNegative or zero mass disallowed"+i+", setting mass to 1.",tw),t.mass=1}}}]),t}();function pD(t,e){var i=void 0!==gf&&fh(t)||t["@@iterator"];if(!i){if(Df(t)||(i=function(t,e){var i;if(!t)return;if("string"==typeof t)return vD(t,e);var n=xf(i=Object.prototype.toString.call(t)).call(i,8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Ya(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return vD(t,e)}(t))||e&&t&&"number"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function vD(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i1?console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+t.opacity):this.options.opacity=t.opacity),void 0!==t.shape)for(var e in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&this.body.nodes[e].updateShape();if(void 0!==t.font||void 0!==t.widthConstraint||void 0!==t.heightConstraint)for(var i=0,n=Hf(this.body.nodes);i1&&void 0!==arguments[1]&&arguments[1],i=this.body.data.nodes;if(ZM("id",t))this.body.data.nodes=t;else if(Df(t))this.body.data.nodes=new GM,this.body.data.nodes.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.body.data.nodes=new GM}if(i&&kb(this.nodesListeners,(function(t,e){i.off(e,t)})),this.body.nodes={},this.body.data.nodes){var n=this;kb(this.nodesListeners,(function(t,e){n.body.data.nodes.on(e,t)}));var o=this.body.data.nodes.getIds();this.add(o,!0)}!1===e&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(t){for(var e,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],o=0;o1&&void 0!==arguments[1]?arguments[1]:fD)(t,this.body,this.images,this.groups,this.options,this.defaultOptions)}},{key:"refresh",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];kb(this.body.nodes,(function(i,n){var o=t.body.data.nodes.get(n);void 0!==o&&(!0===e&&i.setOptions({x:null,y:null}),i.setOptions({fixed:!1}),i.setOptions(o))}))}},{key:"getPositions",value:function(t){var e={};if(void 0!==t){if(!0===Df(t)){for(var i=0;i0?(n=i/a)*n:i;return a===1/0?1/0:a*PD(o)}});var DD=i(et.Math.hypot);function ID(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var BD=function(){function t(){ph(this,t)}return xu(t,null,[{key:"transform",value:function(t,e){Df(t)||(t=[t]);for(var i=e.point.x,n=e.point.y,o=e.angle,r=e.length,s=0;s4&&void 0!==arguments[4]?arguments[4]:this.getViaNode();t.strokeStyle=this.getColor(t,e),t.lineWidth=e.width,!1!==e.dashes?this._drawDashedLine(t,e,o):this._drawLine(t,e,o)}},{key:"_drawLine",value:function(t,e,i,n,o){if(this.from!=this.to)this._line(t,e,i,n,o);else{var r=pf(this._getCircleData(t),3),s=r[0],a=r[1],h=r[2];this._circle(t,e,s,a,h)}}},{key:"_drawDashedLine",value:function(t,e,i,n,o){t.lineCap="round";var r=Df(e.dashes)?e.dashes:[5,5];if(void 0!==t.setLineDash){if(t.save(),t.setLineDash(r),t.lineDashOffset=0,this.from!=this.to)this._line(t,e,i);else{var s=pf(this._getCircleData(t),3),a=s[0],h=s[1],l=s[2];this._circle(t,e,a,h,l)}t.setLineDash([0]),t.lineDashOffset=0,t.restore()}else{if(this.from!=this.to)Yn(t,this.from.x,this.from.y,this.to.x,this.to.y,r);else{var d=pf(this._getCircleData(t),3),c=d[0],u=d[1],f=d[2];this._circle(t,e,c,u,f)}this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}}},{key:"findBorderPosition",value:function(t,e,i){return this.from!=this.to?this._findBorderPosition(t,e,i):this._findBorderPositionCircle(t,e,i)}},{key:"findBorderPositions",value:function(t){if(this.from!=this.to)return{from:this._findBorderPosition(this.from,t),to:this._findBorderPosition(this.to,t)};var e,i=pf(xf(e=this._getCircleData(t)).call(e,0,2),2),n=i[0],o=i[1];return{from:this._findBorderPositionCircle(this.from,t,{x:n,y:o,low:.25,high:.6,direction:-1}),to:this._findBorderPositionCircle(this.from,t,{x:n,y:o,low:.6,high:.8,direction:1})}}},{key:"_getCircleData",value:function(t){var e=this.options.selfReference.size;void 0!==t&&void 0===this.from.shape.width&&this.from.shape.resize(t);var i=bP(t,this.options.selfReference.angle,e,this.from);return[i.x,i.y,e]}},{key:"_pointOnCircle",value:function(t,e,i,n){var o=2*n*Math.PI;return{x:t+i*Math.cos(o),y:e-i*Math.sin(o)}}},{key:"_findBorderPositionCircle",value:function(t,e,i){var n,o=i.x,r=i.y,s=i.low,a=i.high,h=i.direction,l=this.options.selfReference.size,d=.5*(s+a),c=0;!0===this.options.arrowStrikethrough&&(-1===h?c=this.options.endPointOffset.from:1===h&&(c=this.options.endPointOffset.to));var u=0;do{d=.5*(s+a),n=this._pointOnCircle(o,r,l,d);var f=Math.atan2(t.y-n.y,t.x-n.x),p=t.distanceToBorder(e,f)+c-Math.sqrt(Math.pow(n.x-t.x,2)+Math.pow(n.y-t.y,2));if(Math.abs(p)<.05)break;p>0?h>0?s=d:a=d:h>0?a=d:s=d,++u}while(s<=a&&u<10);return GD(GD({},n),{},{t:d})}},{key:"getLineWidth",value:function(t,e){return!0===t?Math.max(this.selectionWidth,.3/this._body.view.scale):!0===e?Math.max(this.hoverWidth,.3/this._body.view.scale):Math.max(this.options.width,.3/this._body.view.scale)}},{key:"getColor",value:function(t,e){if(!1!==e.inheritsColor){if("both"===e.inheritsColor&&this.from.id!==this.to.id){var i=t.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),n=this.from.options.color.highlight.border,o=this.to.options.color.highlight.border;return!1===this.from.selected&&!1===this.to.selected?(n=Ob(this.from.options.color.border,e.opacity),o=Ob(this.to.options.color.border,e.opacity)):!0===this.from.selected&&!1===this.to.selected?o=this.to.options.color.border:!1===this.from.selected&&!0===this.to.selected&&(n=this.from.options.color.border),i.addColorStop(0,n),i.addColorStop(1,o),i}return"to"===e.inheritsColor?Ob(this.to.options.color.border,e.opacity):Ob(this.from.options.color.border,e.opacity)}return Ob(e.color,e.opacity)}},{key:"_circle",value:function(t,e,i,n,o){this.enableShadow(t,e);var r=0,s=2*Math.PI;if(!this.options.selfReference.renderBehindTheNode){var a=this.options.selfReference.angle,h=this.options.selfReference.angle+Math.PI,l=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:-1}),d=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:1});r=Math.atan2(l.y-n,l.x-i),s=Math.atan2(d.y-n,d.x-i)}t.beginPath(),t.arc(i,n,o,r,s,!1),t.stroke(),this.disableShadow(t,e)}},{key:"getDistanceToEdge",value:function(t,e,i,n,o,r){if(this.from!=this.to)return this._getDistanceToEdge(t,e,i,n,o,r);var s=pf(this._getCircleData(void 0),3),a=s[0],h=s[1],l=s[2],d=a-o,c=h-r;return Math.abs(Math.sqrt(d*d+c*c)-l)}},{key:"_getDistanceToLine",value:function(t,e,i,n,o,r){var s=i-t,a=n-e,h=((o-t)*s+(r-e)*a)/(s*s+a*a);h>1?h=1:h<0&&(h=0);var l=t+h*s-o,d=e+h*a-r;return Math.sqrt(l*l+d*d)}},{key:"getArrowData",value:function(t,e,i,n,o,r){var s,a,h,l,d,c,u,f=r.width;"from"===e?(h=this.from,l=this.to,d=r.fromArrowScale<0,c=Math.abs(r.fromArrowScale),u=r.fromArrowType):"to"===e?(h=this.to,l=this.from,d=r.toArrowScale<0,c=Math.abs(r.toArrowScale),u=r.toArrowType):(h=this.to,l=this.from,d=r.middleArrowScale<0,c=Math.abs(r.middleArrowScale),u=r.middleArrowType);var p=15*c+3*f;if(h!=l){var v=p/DD(h.x-l.x,h.y-l.y);if("middle"!==e)if(!0===this.options.smooth.enabled){var g=this._findBorderPosition(h,t,{via:i}),y=this.getPoint(g.t+v*("from"===e?1:-1),i);s=Math.atan2(g.y-y.y,g.x-y.x),a=g}else s=Math.atan2(h.y-l.y,h.x-l.x),a=this._findBorderPosition(h,t);else{var m=(d?-v:v)/2,b=this.getPoint(.5+m,i),w=this.getPoint(.5-m,i);s=Math.atan2(b.y-w.y,b.x-w.x),a=this.getPoint(.5,i)}}else{var k=pf(this._getCircleData(t),3),_=k[0],x=k[1],E=k[2];if("from"===e){var O=this.options.selfReference.angle,C=this.options.selfReference.angle+Math.PI,S=this._findBorderPositionCircle(this.from,t,{x:_,y:x,low:O,high:C,direction:-1});s=-2*S.t*Math.PI+1.5*Math.PI+.1*Math.PI,a=S}else if("to"===e){var T=this.options.selfReference.angle,M=this.options.selfReference.angle+Math.PI,P=this._findBorderPositionCircle(this.from,t,{x:_,y:x,low:T,high:M,direction:1});s=-2*P.t*Math.PI+1.5*Math.PI-1.1*Math.PI,a=P}else{var D=this.options.selfReference.angle/(2*Math.PI);a=this._pointOnCircle(_,x,E,D),s=-2*D*Math.PI+1.5*Math.PI+.1*Math.PI}}return{point:a,core:{x:a.x-.9*p*Math.cos(s),y:a.y-.9*p*Math.sin(s)},angle:s,length:p,type:u}}},{key:"drawArrowHead",value:function(t,e,i,n,o){t.strokeStyle=this.getColor(t,e),t.fillStyle=t.strokeStyle,t.lineWidth=e.width,YD.draw(t,o)&&(this.enableShadow(t,e),Kg(t).call(t),this.disableShadow(t,e))}},{key:"enableShadow",value:function(t,e){!0===e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:"disableShadow",value:function(t,e){!0===e.shadow&&(t.shadowColor="rgba(0,0,0,0)",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:"drawBackground",value:function(t,e){if(!1!==e.background){var i={strokeStyle:t.strokeStyle,lineWidth:t.lineWidth,dashes:t.dashes};t.strokeStyle=e.backgroundColor,t.lineWidth=e.backgroundSize,this.setStrokeDashed(t,e.backgroundDashes),t.stroke(),t.strokeStyle=i.strokeStyle,t.lineWidth=i.lineWidth,t.dashes=i.dashes,this.setStrokeDashed(t,e.dashes)}}},{key:"setStrokeDashed",value:function(t,e){if(!1!==e)if(void 0!==t.setLineDash){var i=Df(e)?e:[5,5];t.setLineDash(i)}else console.warn("setLineDash is not supported in this browser. The dashed stroke cannot be used.");else void 0!==t.setLineDash?t.setLineDash([]):console.warn("setLineDash is not supported in this browser. The dashed stroke cannot be used.")}}]),t}();function $D(t,e){var i=Hf(t);if(aM){var n=aM(t);e&&(n=yv(n).call(n,(function(e){return yM(t,e).enumerable}))),i.push.apply(i,n)}return i}function ZD(t){for(var e=1;e2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates(),r=!1,s=1,a=0,h=this.to,l=this.options.endPointOffset?this.options.endPointOffset.to:0;t.id===this.from.id&&(h=this.from,r=!0,l=this.options.endPointOffset?this.options.endPointOffset.from:0),!1===this.options.arrowStrikethrough&&(l=0);var d=0;do{n=.5*(a+s),i=this.getPoint(n,o);var c=Math.atan2(h.y-i.y,h.x-i.x),u=h.distanceToBorder(e,c)+l-Math.sqrt(Math.pow(i.x-h.x,2)+Math.pow(i.y-h.y,2));if(Math.abs(u)<.2)break;u<0?!1===r?a=n:s=n:!1===r?s=n:a=n,++d}while(a<=s&&d<10);return ZD(ZD({},i),{},{t:n})}},{key:"_getDistanceToBezierEdge",value:function(t,e,i,n,o,r,s){var a,h,l,d,c,u=1e9,f=t,p=e;for(h=1;h<10;h++)l=.1*h,d=Math.pow(1-l,2)*t+2*l*(1-l)*s.x+Math.pow(l,2)*i,c=Math.pow(1-l,2)*e+2*l*(1-l)*s.y+Math.pow(l,2)*n,h>0&&(u=(a=this._getDistanceToLine(f,p,d,c,o,r))1&&void 0!==arguments[1]?arguments[1]:this.via;if(this.from===this.to){var i=pf(this._getCircleData(),3),n=i[0],o=i[1],r=i[2],s=2*Math.PI*(1-t);return{x:n+r*Math.sin(s),y:o+r-r*(1-Math.cos(s))}}return{x:Math.pow(1-t,2)*this.fromPoint.x+2*t*(1-t)*e.x+Math.pow(t,2)*this.toPoint.x,y:Math.pow(1-t,2)*this.fromPoint.y+2*t*(1-t)*e.y+Math.pow(t,2)*this.toPoint.y}}},{key:"_findBorderPosition",value:function(t,e){return this._findBorderPositionBezier(t,e,this.via)}},{key:"_getDistanceToEdge",value:function(t,e,i,n,o,r){return this._getDistanceToBezierEdge(t,e,i,n,o,r,this.via)}}]),i}(JD);function iI(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var nI=function(t){D_(i,t);var e=iI(i);function i(t,n,o){return ph(this,i),e.call(this,t,n,o)}return xu(i,[{key:"_line",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_getViaCoordinates",value:function(){var t,e,i=this.options.smooth.roundness,n=this.options.smooth.type,o=Math.abs(this.from.x-this.to.x),r=Math.abs(this.from.y-this.to.y);if("discrete"===n||"diagonalCross"===n){var s,a;s=a=o<=r?i*r:i*o,this.from.x>this.to.x&&(s=-s),this.from.y>=this.to.y&&(a=-a);var h=this.from.x+s,l=this.from.y+a;return"discrete"===n&&(o<=r?h=othis.to.x&&(t=-t),this.from.y>=this.to.y&&(e=-e);var w=this.from.x+t,k=this.from.y+e;return o<=r?w=this.from.x<=this.to.x?this.to.xw?this.to.x:w:k=this.from.y>=this.to.y?this.to.y>k?this.to.y:k:this.to.y2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(t,e,i.via)}},{key:"_getDistanceToEdge",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(t,e,i,n,o,r,s)}},{key:"getPoint",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=t;return{x:Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,y:Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y}}}]),i}(JD);function oI(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var rI=function(t){D_(i,t);var e=oI(i);function i(t,n,o){return ph(this,i),e.call(this,t,n,o)}return xu(i,[{key:"_getDistanceToBezierEdge2",value:function(t,e,i,n,o,r,s,a){for(var h=1e9,l=t,d=e,c=[0,0,0,0],u=1;u<10;u++){var f=.1*u;c[0]=Math.pow(1-f,3),c[1]=3*f*Math.pow(1-f,2),c[2]=3*Math.pow(f,2)*(1-f),c[3]=Math.pow(f,3);var p=c[0]*t+c[1]*s.x+c[2]*a.x+c[3]*i,v=c[0]*e+c[1]*s.y+c[2]*a.y+c[3]*n;if(u>0){var g=this._getDistanceToLine(l,d,p,v,o,r);h=gMath.abs(r)||!0===this.options.smooth.forceDirection||"horizontal"===this.options.smooth.forceDirection)&&"vertical"!==this.options.smooth.forceDirection?(e=this.from.y,n=this.to.y,t=this.from.x-s*o,i=this.to.x+s*o):(e=this.from.y-s*r,n=this.to.y+s*r,t=this.from.x,i=this.to.x),[{x:t,y:e},{x:i,y:n}]}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_findBorderPosition",value:function(t,e){return this._findBorderPositionBezier(t,e)}},{key:"_getDistanceToEdge",value:function(t,e,i,n,o,r){var s=pf(arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates(),2),a=s[0],h=s[1];return this._getDistanceToBezierEdge2(t,e,i,n,o,r,a,h)}},{key:"getPoint",value:function(t){var e=pf(arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),2),i=e[0],n=e[1],o=t,r=[Math.pow(1-o,3),3*o*Math.pow(1-o,2),3*Math.pow(o,2)*(1-o),Math.pow(o,3)];return{x:r[0]*this.fromPoint.x+r[1]*i.x+r[2]*n.x+r[3]*this.toPoint.x,y:r[0]*this.fromPoint.y+r[1]*i.y+r[2]*n.y+r[3]*this.toPoint.y}}}]),i}(rI);function hI(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var lI=function(t){D_(i,t);var e=hI(i);function i(t,n,o){return ph(this,i),e.call(this,t,n,o)}return xu(i,[{key:"_line",value:function(t,e){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:"getViaNode",value:function(){}},{key:"getPoint",value:function(t){return{x:(1-t)*this.fromPoint.x+t*this.toPoint.x,y:(1-t)*this.fromPoint.y+t*this.toPoint.y}}},{key:"_findBorderPosition",value:function(t,e){var i=this.to,n=this.from;t.id===this.from.id&&(i=this.from,n=this.to);var o=Math.atan2(i.y-n.y,i.x-n.x),r=i.x-n.x,s=i.y-n.y,a=Math.sqrt(r*r+s*s),h=(a-t.distanceToBorder(e,o))/a;return{x:(1-h)*n.x+h*i.x,y:(1-h)*n.y+h*i.y,t:0}}},{key:"_getDistanceToEdge",value:function(t,e,i,n,o,r){return this._getDistanceToLine(t,e,i,n,o,r)}}]),i}(KD),dI=function(){function t(e,i,n,o,r){if(ph(this,t),void 0===i)throw new Error("No body provided");this.options=zb(o),this.globalOptions=o,this.defaultOptions=r,this.body=i,this.imagelist=n,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new OP(this.body,this.options,!0),this.setOptions(e)}return xu(t,[{key:"setOptions",value:function(e){if(e){var i=void 0!==e.physics&&this.options.physics!==e.physics||void 0!==e.hidden&&(this.options.hidden||!1)!==(e.hidden||!1)||void 0!==e.from&&this.options.from!==e.from||void 0!==e.to&&this.options.to!==e.to;t.parseOptions(this.options,e,!0,this.globalOptions),void 0!==e.id&&(this.id=e.id),void 0!==e.from&&(this.fromId=e.from),void 0!==e.to&&(this.toId=e.to),void 0!==e.title&&(this.title=e.title),void 0!==e.value&&(e.value=lP(e.value));var n=[e,this.options,this.defaultOptions];return this.chooser=gP("edge",n),this.updateLabelModule(e),i=this.updateEdgeType()||i,this._setInteractionWidths(),this.connect(),i}}},{key:"getFormattingValues",value:function(){var t=!0===this.options.arrows.to||!0===this.options.arrows.to.enabled,e=!0===this.options.arrows.from||!0===this.options.arrows.from.enabled,i=!0===this.options.arrows.middle||!0===this.options.arrows.middle.enabled,n=this.options.color.inherit,o={toArrow:t,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,toArrowSrc:this.options.arrows.to.src,toArrowImageWidth:this.options.arrows.to.imageWidth,toArrowImageHeight:this.options.arrows.to.imageHeight,middleArrow:i,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,middleArrowSrc:this.options.arrows.middle.src,middleArrowImageWidth:this.options.arrows.middle.imageWidth,middleArrowImageHeight:this.options.arrows.middle.imageHeight,fromArrow:e,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,fromArrowSrc:this.options.arrows.from.src,fromArrowImageWidth:this.options.arrows.from.imageWidth,fromArrowImageHeight:this.options.arrows.from.imageHeight,arrowStrikethrough:this.options.arrowStrikethrough,color:n?void 0:this.options.color.color,inheritsColor:n,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width,background:this.options.background.enabled,backgroundColor:this.options.background.color,backgroundSize:this.options.background.size,backgroundDashes:this.options.background.dashes};if(this.selected||this.hover)if(!0===this.chooser){if(this.selected){var r=this.options.selectionWidth;"function"==typeof r?o.width=r(o.width):"number"==typeof r&&(o.width+=r),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.highlight,o.shadow=this.options.shadow.enabled}else if(this.hover){var s=this.options.hoverWidth;"function"==typeof s?o.width=s(o.width):"number"==typeof s&&(o.width+=s),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.hover,o.shadow=this.options.shadow.enabled}}else"function"==typeof this.chooser&&(this.chooser(o,this.options.id,this.selected,this.hover),void 0!==o.color&&(o.inheritsColor=!1),!1===o.shadow&&(o.shadowColor===this.options.shadow.color&&o.shadowSize===this.options.shadow.size&&o.shadowX===this.options.shadow.x&&o.shadowY===this.options.shadow.y||(o.shadow=!0)));else o.shadow=this.options.shadow.enabled,o.width=Math.max(o.width,.3/this.body.view.scale);return o}},{key:"updateLabelModule",value:function(t){var e=[t,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,e),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:"updateEdgeType",value:function(){var t=this.options.smooth,e=!1,i=!0;return void 0!==this.edgeType&&((this.edgeType instanceof eI&&!0===t.enabled&&"dynamic"===t.type||this.edgeType instanceof aI&&!0===t.enabled&&"cubicBezier"===t.type||this.edgeType instanceof nI&&!0===t.enabled&&"dynamic"!==t.type&&"cubicBezier"!==t.type||this.edgeType instanceof lI&&!1===t.type.enabled)&&(i=!1),!0===i&&(e=this.cleanup())),!0===i?!0===t.enabled?"dynamic"===t.type?(e=!0,this.edgeType=new eI(this.options,this.body,this.labelModule)):"cubicBezier"===t.type?this.edgeType=new aI(this.options,this.body,this.labelModule):this.edgeType=new nI(this.options,this.body,this.labelModule):this.edgeType=new lI(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),e}},{key:"connect",value:function(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=void 0!==this.from&&void 0!==this.to,!0===this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}},{key:"disconnect",value:function(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}},{key:"getTitle",value:function(){return this.title}},{key:"isSelected",value:function(){return this.selected}},{key:"getValue",value:function(){return this.options.value}},{key:"setValueRange",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.width=this.options.scaling.min+n*o}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}},{key:"_setInteractionWidths",value:function(){"function"==typeof this.options.hoverWidth?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,"function"==typeof this.options.selectionWidth?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}},{key:"draw",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode();this.edgeType.drawLine(t,e,this.selected,this.hover,i),this.drawLabel(t,i)}}},{key:"drawArrows",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode(),n={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,e.fromArrow&&(n.from=this.edgeType.getArrowData(t,"from",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.fromPoint=n.from.core),e.fromArrowSrc&&(n.from.image=this.imagelist.load(e.fromArrowSrc)),e.fromArrowImageWidth&&(n.from.imageWidth=e.fromArrowImageWidth),e.fromArrowImageHeight&&(n.from.imageHeight=e.fromArrowImageHeight)),e.toArrow&&(n.to=this.edgeType.getArrowData(t,"to",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.toPoint=n.to.core),e.toArrowSrc&&(n.to.image=this.imagelist.load(e.toArrowSrc)),e.toArrowImageWidth&&(n.to.imageWidth=e.toArrowImageWidth),e.toArrowImageHeight&&(n.to.imageHeight=e.toArrowImageHeight)),e.middleArrow&&(n.middle=this.edgeType.getArrowData(t,"middle",i,this.selected,this.hover,e),e.middleArrowSrc&&(n.middle.image=this.imagelist.load(e.middleArrowSrc)),e.middleArrowImageWidth&&(n.middle.imageWidth=e.middleArrowImageWidth),e.middleArrowImageHeight&&(n.middle.imageHeight=e.middleArrowImageHeight)),e.fromArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.from),e.middleArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.middle),e.toArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.to)}}},{key:"drawLabel",value:function(t,e){if(void 0!==this.options.label){var i,n=this.from,o=this.to;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(t,this.selected,this.hover),n.id!=o.id){this.labelModule.pointToSelf=!1,i=this.edgeType.getPoint(.5,e),t.save();var r=this._getRotation(t);0!=r.angle&&(t.translate(r.x,r.y),t.rotate(r.angle)),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover),t.restore()}else{this.labelModule.pointToSelf=!0;var s=bP(t,this.options.selfReference.angle,this.options.selfReference.size,n);i=this._pointOnCircle(s.x,s.y,this.options.selfReference.size,this.options.selfReference.angle),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover)}}}},{key:"getItemsOnPoint",value:function(t){var e=[];if(this.labelModule.visible()){var i=this._getRotation();yP(this.labelModule.getSize(),t,i)&&e.push({edgeId:this.id,labelId:0})}var n={left:t.x,top:t.y};return this.isOverlappingWith(n)&&e.push({edgeId:this.id}),e}},{key:"isOverlappingWith",value:function(t){if(this.connected){var e=this.from.x,i=this.from.y,n=this.to.x,o=this.to.y,r=t.left,s=t.top;return this.edgeType.getDistanceToEdge(e,i,n,o,r,s)<10}return!1}},{key:"_getRotation",value:function(t){var e=this.edgeType.getViaNode(),i=this.edgeType.getPoint(.5,e);void 0!==t&&this.labelModule.calculateLabelSize(t,this.selected,this.hover,i.x,i.y);var n={x:i.x,y:this.labelModule.size.yLine,angle:0};if(!this.labelModule.visible())return n;if("horizontal"===this.options.font.align)return n;var o=this.from.y-this.to.y,r=this.from.x-this.to.x,s=Math.atan2(o,r);return(s<-1&&r<0||s>0&&r<0)&&(s+=Math.PI),n.angle=s,n}},{key:"_pointOnCircle",value:function(t,e,i,n){return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:"select",value:function(){this.selected=!0}},{key:"unselect",value:function(){this.selected=!1}},{key:"cleanup",value:function(){return this.edgeType.cleanup()}},{key:"remove",value:function(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}},{key:"endPointsValid",value:function(){return void 0!==this.body.nodes[this.fromId]&&void 0!==this.body.nodes[this.toId]}}],[{key:"parseOptions",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];if(pb(["endPointOffset","arrowStrikethrough","id","from","hidden","hoverWidth","labelHighlightBold","length","line","opacity","physics","scaling","selectionWidth","selfReferenceSize","selfReference","to","title","value","width","font","chosen","widthConstraint"],t,e,i),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.from&&(g_(e.endPointOffset.from)?t.endPointOffset.from=e.endPointOffset.from:(t.endPointOffset.from=void 0!==n.endPointOffset.from?n.endPointOffset.from:0,console.error("endPointOffset.from is not a valid number"))),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.to&&(g_(e.endPointOffset.to)?t.endPointOffset.to=e.endPointOffset.to:(t.endPointOffset.to=void 0!==n.endPointOffset.to?n.endPointOffset.to:0,console.error("endPointOffset.to is not a valid number"))),mP(e.label)?t.label=e.label:mP(t.label)||(t.label=void 0),Ab(t,e,"smooth",n),Ab(t,e,"shadow",n),Ab(t,e,"background",n),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:!0===i&&null===e.dashes&&(t.dashes=pg(n.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),Ab(t.scaling,e.scaling,"label",n.scaling)):!0===i&&null===e.scaling&&(t.scaling=pg(n.scaling)),void 0!==e.arrows&&null!==e.arrows)if("string"==typeof e.arrows){var r=e.arrows.toLowerCase();t.arrows.to.enabled=-1!=lg(r).call(r,"to"),t.arrows.middle.enabled=-1!=lg(r).call(r,"middle"),t.arrows.from.enabled=-1!=lg(r).call(r,"from")}else{if("object"!==bu(e.arrows))throw new Error("The arrow newOptions can only be an object or a string. Refer to the documentation. You used:"+mg(e.arrows));Ab(t.arrows,e.arrows,"to",n.arrows),Ab(t.arrows,e.arrows,"middle",n.arrows),Ab(t.arrows,e.arrows,"from",n.arrows)}else!0===i&&null===e.arrows&&(t.arrows=pg(n.arrows));if(void 0!==e.color&&null!==e.color){var s=lb(e.color)?{color:e.color,highlight:e.color,hover:e.color,inherit:!1,opacity:1}:e.color,a=t.color;if(o)gb(a,n.color,!1,i);else for(var h in a)Object.prototype.hasOwnProperty.call(a,h)&&delete a[h];if(lb(a))a.color=a,a.highlight=a,a.hover=a,a.inherit=!1,void 0===s.opacity&&(a.opacity=1);else{var l=!1;void 0!==s.color&&(a.color=s.color,l=!0),void 0!==s.highlight&&(a.highlight=s.highlight,l=!0),void 0!==s.hover&&(a.hover=s.hover,l=!0),void 0!==s.inherit&&(a.inherit=s.inherit),void 0!==s.opacity&&(a.opacity=Math.min(1,Math.max(0,s.opacity))),!0===l?a.inherit=!1:void 0===a.inherit&&(a.inherit="from")}}else!0===i&&null===e.color&&(t.color=zb(n.color));!0===i&&null===e.font&&(t.font=zb(n.font)),Object.prototype.hasOwnProperty.call(e,"selfReferenceSize")&&(console.warn("The selfReferenceSize property has been deprecated. Please use selfReference property instead. The selfReference can be set like thise selfReference:{size:30, angle:Math.PI / 4}"),t.selfReference.size=e.selfReferenceSize)}}]),t}(),cI=function(){function t(e,i,n){var o,r=this;ph(this,t),this.body=e,this.images=i,this.groups=n,this.body.functions.createEdge=Hn(o=this.create).call(o,this),this.edgesListeners={add:function(t,e){r.add(e.items)},update:function(t,e){r.update(e.items)},remove:function(t,e){r.remove(e.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:"arrow"},middle:{enabled:!1,scaleFactor:1,type:"arrow"},from:{enabled:!1,scaleFactor:1,type:"arrow"}},endPointOffset:{from:0,to:0},arrowStrikethrough:!0,color:{color:"#848484",highlight:"#848484",hover:"#848484",inherit:"from",opacity:1},dashes:!1,font:{color:"#343434",size:14,face:"arial",background:"none",strokeWidth:2,strokeColor:"#ffffff",align:"horizontal",multi:!1,vadjust:0,bold:{mod:"bold"},boldital:{mod:"bold italic"},ital:{mod:"italic"},mono:{mod:"",size:15,face:"courier new",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},selectionWidth:1.5,selfReference:{size:20,angle:Math.PI/4,renderBehindTheNode:!0},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:10,x:5,y:5},background:{enabled:!1,color:"rgba(111,111,111,1)",size:10,dashes:!1},smooth:{enabled:!0,type:"dynamic",forceDirection:"none",roundness:.5},title:void 0,width:1,value:void 0},gb(this.options,this.defaultOptions),this.bindEventListeners()}return xu(t,[{key:"bindEventListeners",value:function(){var t,e,i=this;this.body.emitter.on("_forceDisableDynamicCurves",(function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];"dynamic"===t&&(t="continuous");var n=!1;for(var o in i.body.edges)if(Object.prototype.hasOwnProperty.call(i.body.edges,o)){var r=i.body.edges[o],s=i.body.data.edges.get(o);if(null!=s){var a=s.smooth;void 0!==a&&!0===a.enabled&&"dynamic"===a.type&&(void 0===t?r.setOptions({smooth:!1}):r.setOptions({smooth:{type:t}}),n=!0)}}!0===e&&!0===n&&i.body.emitter.emit("_dataChanged")})),this.body.emitter.on("_dataUpdated",(function(){i.reconnectEdges()})),this.body.emitter.on("refreshEdges",Hn(t=this.refresh).call(t,this)),this.body.emitter.on("refresh",Hn(e=this.refresh).call(e,this)),this.body.emitter.on("destroy",(function(){kb(i.edgesListeners,(function(t,e){i.body.data.edges&&i.body.data.edges.off(e,t)})),delete i.body.functions.createEdge,delete i.edgesListeners.add,delete i.edgesListeners.update,delete i.edgesListeners.remove,delete i.edgesListeners}))}},{key:"setOptions",value:function(t){if(void 0!==t){dI.parseOptions(this.options,t,!0,this.defaultOptions,!0);var e=!1;if(void 0!==t.smooth)for(var i in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,i)&&(e=this.body.edges[i].updateEdgeType()||e);if(void 0!==t.font)for(var n in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,n)&&this.body.edges[n].updateLabelModule();void 0===t.hidden&&void 0===t.physics&&!0!==e||this.body.emitter.emit("_dataChanged")}}},{key:"setData",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.body.data.edges;if(ZM("id",t))this.body.data.edges=t;else if(Df(t))this.body.data.edges=new GM,this.body.data.edges.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.body.data.edges=new GM}if(n&&kb(this.edgesListeners,(function(t,e){n.off(e,t)})),this.body.edges={},this.body.data.edges){kb(this.edgesListeners,(function(t,i){e.body.data.edges.on(i,t)}));var o=this.body.data.edges.getIds();this.add(o,!0)}this.body.emitter.emit("_adjustEdgesForHierarchicalLayout"),!1===i&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.edges,n=this.body.data.edges,o=0;o1&&void 0!==arguments[1])||arguments[1];if(0!==t.length){var i=this.body.edges;kb(t,(function(t){var e=i[t];void 0!==e&&e.remove()})),e&&this.body.emitter.emit("_dataChanged")}}},{key:"refresh",value:function(){var t=this;kb(this.body.edges,(function(e,i){var n=t.body.data.edges.get(i);void 0!==n&&e.setOptions(n)}))}},{key:"create",value:function(t){return new dI(t,this.body,this.images,this.options,this.defaultOptions)}},{key:"reconnectEdges",value:function(){var t,e=this.body.nodes,i=this.body.edges;for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&(e[t].edges=[]);for(t in i)if(Object.prototype.hasOwnProperty.call(i,t)){var n=i[t];n.from=null,n.to=null,n.connect()}}},{key:"getConnectedNodes",value:function(t){var e=[];if(void 0!==this.body.edges[t]){var i=this.body.edges[t];void 0!==i.fromId&&e.push(i.fromId),void 0!==i.toId&&e.push(i.toId)}return e}},{key:"_updateState",value:function(){this._addMissingEdges(),this._removeInvalidEdges()}},{key:"_removeInvalidEdges",value:function(){var t=this,e=[];kb(this.body.edges,(function(i,n){var o=t.body.nodes[i.toId],r=t.body.nodes[i.fromId];void 0!==o&&!0===o.isCluster||void 0!==r&&!0===r.isCluster||void 0!==o&&void 0!==r||e.push(n)})),this.remove(e,!1)}},{key:"_addMissingEdges",value:function(){var t=this.body.data.edges;if(null!=t){var e=this.body.edges,i=[];op(t).call(t,(function(t,n){void 0===e[n]&&i.push(n)})),this.add(i,!0)}}}]),t}(),uI=function(){function t(e,i,n){ph(this,t),this.body=e,this.physicsBody=i,this.barnesHutTree,this.setOptions(n),this._rng=Jm("BARNES HUT SOLVER")}return xu(t,[{key:"setOptions",value:function(t){this.options=t,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}},{key:"solve",value:function(){if(0!==this.options.gravitationalConstant&&this.physicsBody.physicsNodeIndices.length>0){var t,e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,n=i.length,o=this._formBarnesHutTree(e,i);this.barnesHutTree=o;for(var r=0;r0&&this._getForceContributions(o.root,t)}}},{key:"_getForceContributions",value:function(t,e){this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e)}},{key:"_getForceContribution",value:function(t,e){if(t.childrenCount>0){var i=t.centerOfMass.x-e.x,n=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+n*n);o*t.calcSize>this.thetaInversed?this._calculateForces(o,i,n,e,t):4===t.childrenCount?this._getForceContributions(t,e):t.children.data.id!=e.id&&this._calculateForces(o,i,n,e,t)}}},{key:"_calculateForces",value:function(t,e,i,n,o){0===t&&(e=t=.1),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=this.options.gravitationalConstant*o.mass*n.options.mass/Math.pow(t,3),s=e*r,a=i*r;this.physicsBody.forces[n.id].x+=s,this.physicsBody.forces[n.id].y+=a}},{key:"_formBarnesHutTree",value:function(t,e){for(var i,n=e.length,o=t[e[0]].x,r=t[e[0]].y,s=t[e[0]].x,a=t[e[0]].y,h=1;h0&&(ds&&(s=d),ca&&(a=c))}var u=Math.abs(s-o)-Math.abs(a-r);u>0?(r-=.5*u,a+=.5*u):(o+=.5*u,s-=.5*u);var f=Math.max(1e-5,Math.abs(s-o)),p=.5*f,v=.5*(o+s),g=.5*(r+a),y={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:v-p,maxX:v+p,minY:g-p,maxY:g+p},size:f,calcSize:1/f,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(y.root);for(var m=0;m0&&this._placeInTree(y.root,i);return y}},{key:"_updateBranchMass",value:function(t,e){var i=t.centerOfMass,n=t.mass+e.options.mass,o=1/n;i.x=i.x*t.mass+e.x*e.options.mass,i.x*=o,i.y=i.y*t.mass+e.y*e.options.mass,i.y*=o,t.mass=n;var r=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidthe.x?o.maxY>e.y?"NW":"SW":o.maxY>e.y?"NE":"SE",this._placeInRegion(t,e,n)}},{key:"_placeInRegion",value:function(t,e,i){var n=t.children[i];switch(n.childrenCount){case 0:n.children.data=e,n.childrenCount=1,this._updateBranchMass(n,e);break;case 1:n.children.data.x===e.x&&n.children.data.y===e.y?(e.x+=this._rng(),e.y+=this._rng()):(this._splitBranch(n),this._placeInTree(n,e));break;case 4:this._placeInTree(n,e)}}},{key:"_splitBranch",value:function(t){var e=null;1===t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,"NW"),this._insertRegion(t,"NE"),this._insertRegion(t,"SW"),this._insertRegion(t,"SE"),null!=e&&this._placeInTree(t,e)}},{key:"_insertRegion",value:function(t,e){var i,n,o,r,s=.5*t.size;switch(e){case"NW":i=t.range.minX,n=t.range.minX+s,o=t.range.minY,r=t.range.minY+s;break;case"NE":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY,r=t.range.minY+s;break;case"SW":i=t.range.minX,n=t.range.minX+s,o=t.range.minY+s,r=t.range.maxY;break;case"SE":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY+s,r=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:n,minY:o,maxY:r},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}}},{key:"_debug",value:function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))}},{key:"_drawBranch",value:function(t,e,i){void 0===i&&(i="#FF0000"),4===t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}}]),t}(),fI=function(){function t(e,i,n){ph(this,t),this._rng=Jm("REPULSION SOLVER"),this.body=e,this.physicsBody=i,this.setOptions(n)}return xu(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"solve",value:function(){for(var t,e,i,n,o,r,s,a,h=this.body.nodes,l=this.physicsBody.physicsNodeIndices,d=this.physicsBody.forces,c=this.options.nodeDistance,u=-2/3/c,f=0;f0){var r=o.edges.length+1,s=this.options.centralGravity*r*o.options.mass;n[o.id].x=e*s,n[o.id].y=i*s}}}]),i}(yI),_I=function(){function t(e){ph(this,t),this.body=e,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:"barnesHut",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0,wind:{x:0,y:0}},bn(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return xu(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("initPhysics",(function(){t.initPhysics()})),this.body.emitter.on("_layoutFailed",(function(){t.layoutFailed=!0})),this.body.emitter.on("resetPhysics",(function(){t.stopSimulation(),t.ready=!1})),this.body.emitter.on("disablePhysics",(function(){t.physicsEnabled=!1,t.stopSimulation()})),this.body.emitter.on("restorePhysics",(function(){t.setOptions(t.options),!0===t.ready&&t.startSimulation()})),this.body.emitter.on("startSimulation",(function(){!0===t.ready&&t.startSimulation()})),this.body.emitter.on("stopSimulation",(function(){t.stopSimulation()})),this.body.emitter.on("destroy",(function(){t.stopSimulation(!1),t.body.emitter.off()})),this.body.emitter.on("_dataChanged",(function(){t.updatePhysicsData()}))}},{key:"setOptions",value:function(t){if(void 0!==t)if(!1===t)this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation();else if(!0===t)this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation();else{this.physicsEnabled=!0,vb(["stabilization"],this.options,t),Ab(this.options,t,"stabilization"),void 0===t.enabled&&(this.options.enabled=!0),!1===this.options.enabled&&(this.physicsEnabled=!1,this.stopSimulation());var e=this.options.wind;e&&(("number"!=typeof e.x||f_(e.x))&&(e.x=0),("number"!=typeof e.y||f_(e.y))&&(e.y=0)),this.timestep=this.options.timestep}this.init()}},{key:"init",value:function(){var t;"forceAtlas2Based"===this.options.solver?(t=this.options.forceAtlas2Based,this.nodesSolver=new bI(this.body,this.physicsBody,t),this.edgesSolver=new vI(this.body,this.physicsBody,t),this.gravitySolver=new kI(this.body,this.physicsBody,t)):"repulsion"===this.options.solver?(t=this.options.repulsion,this.nodesSolver=new fI(this.body,this.physicsBody,t),this.edgesSolver=new vI(this.body,this.physicsBody,t),this.gravitySolver=new yI(this.body,this.physicsBody,t)):"hierarchicalRepulsion"===this.options.solver?(t=this.options.hierarchicalRepulsion,this.nodesSolver=new pI(this.body,this.physicsBody,t),this.edgesSolver=new gI(this.body,this.physicsBody,t),this.gravitySolver=new yI(this.body,this.physicsBody,t)):(t=this.options.barnesHut,this.nodesSolver=new uI(this.body,this.physicsBody,t),this.edgesSolver=new vI(this.body,this.physicsBody,t),this.gravitySolver=new yI(this.body,this.physicsBody,t)),this.modelOptions=t}},{key:"initPhysics",value:function(){!0===this.physicsEnabled&&!0===this.options.enabled?!0===this.options.stabilization.enabled?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit("fit",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit("fit"))}},{key:"startSimulation",value:function(){var t;!0===this.physicsEnabled&&!0===this.options.enabled?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit("_resizeNodes"),void 0===this.viewFunction&&(this.viewFunction=Hn(t=this.simulationStep).call(t,this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))):this.body.emitter.emit("_redraw")}},{key:"stopSimulation",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,!0===t&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.viewFunction=void 0,!0===t&&this.body.emitter.emit("_stopRendering"))}},{key:"simulationStep",value:function(){var t=Uf();this.physicsTick(),(Uf()-t<.4*this.simulationInterval||!0===this.runDoubleSpeed)&&!1===this.stabilized&&(this.physicsTick(),this.runDoubleSpeed=!0),!0===this.stabilized&&this.stopSimulation()}},{key:"_emitStabilized",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||!0===this.startedStabilization)&&jg((function(){t.body.emitter.emit("stabilized",{iterations:e}),t.startedStabilization=!1,t.stabilizationIterations=0}),0)}},{key:"physicsStep",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}},{key:"adjustTimeStep",value:function(){!0===this._evaluateStepQuality()?this.timestep=1.2*this.timestep:this.timestep/1.2.3))return!1;return!0}},{key:"moveNodes",value:function(){for(var t=this.physicsBody.physicsNodeIndices,e=0,i=0,n=0;nn&&(t=t>0?n:-n),t}},{key:"_performStep",value:function(t){var e=this.body.nodes[t],i=this.physicsBody.forces[t];this.options.wind&&(i.x+=this.options.wind.x,i.y+=this.options.wind.y);var n=this.physicsBody.velocities[t];return this.previousStates[t]={x:e.x,y:e.y,vx:n.x,vy:n.y},!1===e.options.fixed.x?(n.x=this.calculateComponentVelocity(n.x,i.x,e.options.mass),e.x+=n.x*this.timestep):(i.x=0,n.x=0),!1===e.options.fixed.y?(n.y=this.calculateComponentVelocity(n.y,i.y,e.options.mass),e.y+=n.y*this.timestep):(i.y=0,n.y=0),Math.sqrt(Math.pow(n.x,2)+Math.pow(n.y,2))}},{key:"_freezeNodes",value:function(){var t=this.body.nodes;for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].x&&t[e].y){var i=t[e].options.fixed;this.freezeCache[e]={x:i.x,y:i.y},i.x=!0,i.y=!0}}},{key:"_restoreFrozenNodes",value:function(){var t=this.body.nodes;for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&void 0!==this.freezeCache[e]&&(t[e].options.fixed.x=this.freezeCache[e].x,t[e].options.fixed.y=this.freezeCache[e].y);this.freezeCache={}}},{key:"stabilize",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.stabilization.iterations;"number"!=typeof e&&(e=this.options.stabilization.iterations,console.error("The stabilize method needs a numeric amount of iterations. Switching to default: ",e)),0!==this.physicsBody.physicsNodeIndices.length?(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit("_resizeNodes"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit("_blockRedraw"),this.targetIterations=e,!0===this.options.stabilization.onlyDynamicEdges&&this._freezeNodes(),this.stabilizationIterations=0,jg((function(){return t._stabilizationBatch()}),0)):this.ready=!0}},{key:"_startStabilizing",value:function(){return!0!==this.startedStabilization&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0,!0)}},{key:"_stabilizationBatch",value:function(){var t=this,e=function(){return!1===t.stabilized&&t.stabilizationIterations1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a(e=t[i[a]]).shape.boundingBox.left&&(r=e.shape.boundingBox.left),se.shape.boundingBox.top&&(n=e.shape.boundingBox.top),o1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a(e=t[i[a]]).x&&(r=e.x),se.y&&(n=e.y),o=t&&i.push(o.id)}for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===e.joinCondition)throw new Error("Cannot call clusterByNodeData without a joinCondition function in the options.");e=this._checkOptions(e);var n={},o={};kb(this.body.nodes,(function(i,r){i.options&&!0===e.joinCondition(i.options)&&(n[r]=i,kb(i.edges,(function(e){void 0===t.clusteredEdges[e.id]&&(o[e.id]=e)})))})),this._cluster(n,o,e,i)}},{key:"clusterByEdgeCount",value:function(t,e){var i=this,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];e=this._checkOptions(e);for(var o,r,s,a=[],h={},l=function(){var n={},l={},c=i.body.nodeIndices[d],u=i.body.nodes[c];if(void 0===h[c]){s=0,r=[];for(var f=0;f0&&Hf(l).length>0&&!0===v){var m=function(){for(var t=0;t1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,t,e)}},{key:"clusterBridges",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,t,e)}},{key:"clusterByConnection",value:function(t,e){var i,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error("No nodeId supplied to clusterByConnection!");if(void 0===this.body.nodes[t])throw new Error("The nodeId given to clusterByConnection does not exist!");var o=this.body.nodes[t];void 0===(e=this._checkOptions(e,o)).clusterNodeProperties.x&&(e.clusterNodeProperties.x=o.x),void 0===e.clusterNodeProperties.y&&(e.clusterNodeProperties.y=o.y),void 0===e.clusterNodeProperties.fixed&&(e.clusterNodeProperties.fixed={},e.clusterNodeProperties.fixed.x=o.options.fixed.x,e.clusterNodeProperties.fixed.y=o.options.fixed.y);var r={},s={},a=o.id,h=xI.cloneOptions(o);r[a]=o;for(var l=0;l-1&&(s[y.id]=y)}this._cluster(r,s,e,n)}},{key:"_createClusterEdges",value:function(t,e,i,n){for(var o,r,s,a,h,l,d=Hf(t),c=[],u=0;u0&&void 0!==arguments[0]?arguments[0]:{};return void 0===t.clusterEdgeProperties&&(t.clusterEdgeProperties={}),void 0===t.clusterNodeProperties&&(t.clusterNodeProperties={}),t}},{key:"_cluster",value:function(t,e,i){var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&void 0!==this.clusteredNodes[r]&&o.push(r);for(var s=0;so?e.x:o,r=e.ys?e.y:s;return{x:.5*(n+o),y:.5*(r+s)}}},{key:"openCluster",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error("No clusterNodeId supplied to openCluster.");var n=this.body.nodes[t];if(void 0===n)throw new Error("The clusterNodeId supplied to openCluster does not exist.");if(!0!==n.isCluster||void 0===n.containedNodes||void 0===n.containedEdges)throw new Error("The node:"+t+" is not a valid cluster.");var o=this.findNode(t),r=lg(o).call(o,t)-1;if(r>=0){var s=o[r];return this.body.nodes[s]._openChildCluster(t),delete this.body.nodes[t],void(!0===i&&this.body.emitter.emit("_dataChanged"))}var a=n.containedNodes,h=n.containedEdges;if(void 0!==e&&void 0!==e.releaseFunction&&"function"==typeof e.releaseFunction){var l={},d={x:n.x,y:n.y};for(var c in a)if(Object.prototype.hasOwnProperty.call(a,c)){var u=this.body.nodes[c];l[c]={x:u.x,y:u.y}}var f=e.releaseFunction(d,l);for(var p in a)if(Object.prototype.hasOwnProperty.call(a,p)){var v=this.body.nodes[p];void 0!==f[p]&&(v.x=void 0===f[p].x?n.x:f[p].x,v.y=void 0===f[p].y?n.y:f[p].y)}}else kb(a,(function(t){!1===t.options.fixed.x&&(t.x=n.x),!1===t.options.fixed.y&&(t.y=n.y)}));for(var g in a)if(Object.prototype.hasOwnProperty.call(a,g)){var y=this.body.nodes[g];y.vx=n.vx,y.vy=n.vy,y.setOptions({physics:!0}),delete this.clusteredNodes[g]}for(var m=[],b=0;b0&&o<100;){var r=e.pop();if(void 0!==r){var s=this.body.edges[r];if(void 0!==s){o++;var a=s.clusteringEdgeReplacingIds;if(void 0===a)n.push(r);else for(var h=0;hn&&(n=r.edges.length),t+=r.edges.length,e+=Math.pow(r.edges.length,2),i+=1}t/=i;var s=(e/=i)-Math.pow(t,2),a=Math.sqrt(s),h=Math.floor(t+2*a);return h>n&&(h=n),h}},{key:"_createClusteredEdge",value:function(t,e,i,n,o){var r=xI.cloneOptions(i,"edge");gb(r,n),r.from=t,r.to=e,r.id="clusterEdge:"+zM(),void 0!==o&&gb(r,o);var s=this.body.functions.createEdge(r);return s.clusteringEdgeReplacingIds=[i.id],s.connect(),this.body.edges[s.id]=s,s}},{key:"_clusterEdges",value:function(t,e,i,n){if(e instanceof dI){var o=e,r={};r[o.id]=o,e=r}if(t instanceof fD){var s=t,a={};a[s.id]=s,t=a}if(null==i)throw new Error("_clusterEdges: parameter clusterNode required");for(var h in void 0===n&&(n=i.clusterEdgeProperties),this._createClusterEdges(t,e,i,n),e)if(Object.prototype.hasOwnProperty.call(e,h)&&void 0!==this.body.edges[h]){var l=this.body.edges[h];this._backupEdgeOptions(l),l.setOptions({physics:!1})}for(var d in t)Object.prototype.hasOwnProperty.call(t,d)&&(this.clusteredNodes[d]={clusterId:i.id,node:this.body.nodes[d]},this.body.nodes[d].setOptions({physics:!1}))}},{key:"_getClusterNodeForNode",value:function(t){if(void 0!==t){var e=this.clusteredNodes[t];if(void 0!==e){var i=e.clusterId;if(void 0!==i)return this.body.nodes[i]}}}},{key:"_filter",value:function(t,e){var i=[];return kb(t,(function(t){e(t)&&i.push(t)})),i}},{key:"_updateState",value:function(){var t,e=this,i=[],n={},o=function(t){kb(e.body.nodes,(function(e){!0===e.isCluster&&t(e)}))};for(t in this.clusteredNodes){if(Object.prototype.hasOwnProperty.call(this.clusteredNodes,t))void 0===this.body.nodes[t]&&i.push(t)}o((function(t){for(var e=0;e0}t.endPointsValid()&&o||(n[i]=i)})),o((function(t){kb(n,(function(i){delete t.containedEdges[i],kb(t.edges,(function(o,r){o.id!==i?o.clusteringEdgeReplacingIds=e._filter(o.clusteringEdgeReplacingIds,(function(t){return!n[t]})):t.edges[r]=null})),t.edges=e._filter(t.edges,(function(t){return null!==t}))}))})),kb(n,(function(t){delete e.clusteredEdges[t]})),kb(n,(function(t){delete e.body.edges[t]})),kb(Hf(this.body.edges),(function(t){var i=e.body.edges[t],n=e._isClusteredNode(i.fromId)||e._isClusteredNode(i.toId);if(n!==e._isClusteredEdge(i.id))if(n){var o=e._getClusterNodeForNode(i.fromId);void 0!==o&&e._clusterEdges(e.body.nodes[i.fromId],i,o);var r=e._getClusterNodeForNode(i.toId);void 0!==r&&e._clusterEdges(e.body.nodes[i.toId],i,r)}else delete e._clusterEdges[t],e._restoreEdge(i)}));for(var s=!1,a=!0,h=function(){var t=[];o((function(e){var i=Hf(e.containedNodes).length,n=!0===e.options.allowSingleNodeCluster;(n&&i<1||!n&&i<2)&&t.push(e.id)}));for(var i=0;i0,s=s||a};a;)h();s&&this._updateState()}},{key:"_isClusteredNode",value:function(t){return void 0!==this.clusteredNodes[t]}},{key:"_isClusteredEdge",value:function(t){return void 0!==this.clusteredEdges[t]}}]),t}();var SI=function(){function t(e,i){var n;ph(this,t),void 0!==window&&(n=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),window.requestAnimationFrame=void 0===n?function(t){t()}:n,this.body=e,this.canvas=i,this.redrawRequested=!1,this.renderTimer=void 0,this.requiresTimeout=!0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.zooming=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1},bn(this.options,this.defaultOptions),this._determineBrowserMethod(),this.bindEventListeners()}return xu(t,[{key:"bindEventListeners",value:function(){var t,e=this;this.body.emitter.on("dragStart",(function(){e.dragging=!0})),this.body.emitter.on("dragEnd",(function(){e.dragging=!1})),this.body.emitter.on("zoom",(function(){e.zooming=!0,window.clearTimeout(e.zoomTimeoutId),e.zoomTimeoutId=jg((function(){var t;e.zooming=!1,Hn(t=e._requestRedraw).call(t,e)()}),250)})),this.body.emitter.on("_resizeNodes",(function(){e._resizeNodes()})),this.body.emitter.on("_redraw",(function(){!1===e.renderingActive&&e._redraw()})),this.body.emitter.on("_blockRedraw",(function(){e.allowRedraw=!1})),this.body.emitter.on("_allowRedraw",(function(){e.allowRedraw=!0,e.redrawRequested=!1})),this.body.emitter.on("_requestRedraw",Hn(t=this._requestRedraw).call(t,this)),this.body.emitter.on("_startRendering",(function(){e.renderRequests+=1,e.renderingActive=!0,e._startRendering()})),this.body.emitter.on("_stopRendering",(function(){e.renderRequests-=1,e.renderingActive=e.renderRequests>0,e.renderTimer=void 0})),this.body.emitter.on("destroy",(function(){e.renderRequests=0,e.allowRedraw=!1,e.renderingActive=!1,!0===e.requiresTimeout?clearTimeout(e.renderTimer):window.cancelAnimationFrame(e.renderTimer),e.body.emitter.off()}))}},{key:"setOptions",value:function(t){if(void 0!==t){pb(["hideEdgesOnDrag","hideEdgesOnZoom","hideNodesOnDrag"],this.options,t)}}},{key:"_requestNextFrame",value:function(t,e){if("undefined"!=typeof window){var i,n=window;return!0===this.requiresTimeout?i=jg(t,e):n.requestAnimationFrame&&(i=n.requestAnimationFrame(t)),i}}},{key:"_startRendering",value:function(){var t;!0===this.renderingActive&&(void 0===this.renderTimer&&(this.renderTimer=this._requestNextFrame(Hn(t=this._renderStep).call(t,this),this.simulationInterval)))}},{key:"_renderStep",value:function(){!0===this.renderingActive&&(this.renderTimer=void 0,!0===this.requiresTimeout&&this._startRendering(),this._redraw(),!1===this.requiresTimeout&&this._startRendering())}},{key:"redraw",value:function(){this.body.emitter.emit("setSize"),this._redraw()}},{key:"_requestRedraw",value:function(){var t=this;!0!==this.redrawRequested&&!1===this.renderingActive&&!0===this.allowRedraw&&(this.redrawRequested=!0,this._requestNextFrame((function(){t._redraw(!1)}),0))}},{key:"_redraw",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!0===this.allowRedraw){this.body.emitter.emit("initRedraw"),this.redrawRequested=!1;var e={drawExternalLabels:null};0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.canvas.setTransform();var i=this.canvas.getContext(),n=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;if(i.clearRect(0,0,n,o),0===this.canvas.frame.clientWidth)return;if(i.save(),i.translate(this.body.view.translation.x,this.body.view.translation.y),i.scale(this.body.view.scale,this.body.view.scale),i.beginPath(),this.body.emitter.emit("beforeDrawing",i),i.closePath(),!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawEdges(i),!1===this.dragging||!0===this.dragging&&!1===this.options.hideNodesOnDrag){var r=this._drawNodes(i,t).drawExternalLabels;e.drawExternalLabels=r}!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawArrows(i),null!=e.drawExternalLabels&&e.drawExternalLabels(),!1===t&&this._drawSelectionBox(i),i.beginPath(),this.body.emitter.emit("afterDrawing",i),i.closePath(),i.restore(),!0===t&&i.clearRect(0,0,n,o)}}},{key:"_resizeNodes",value:function(){this.canvas.setTransform();var t=this.canvas.getContext();t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);var e,i=this.body.nodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&((e=i[n]).resize(t),e.updateBoundingBox(t,e.selected));t.restore()}},{key:"_drawNodes",value:function(t){for(var e,i,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=this.body.nodes,r=this.body.nodeIndices,s=[],a=[],h=this.canvas.DOMtoCanvas({x:-20,y:-20}),l=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+20,y:this.canvas.frame.canvas.clientHeight+20}),d={top:h.y,left:h.x,bottom:l.y,right:l.x},c=[],u=0;u0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;!0===this.initialized&&(this.cameraState.previousWidth=this.frame.canvas.width/t,this.cameraState.previousHeight=this.frame.canvas.height/t,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/t,y:.5*this.frame.canvas.height/t}))}},{key:"_setCameraState",value:function(){if(void 0!==this.cameraState.scale&&0!==this.frame.canvas.clientWidth&&0!==this.frame.canvas.clientHeight&&0!==this.pixelRatio&&this.cameraState.previousWidth>0&&this.cameraState.previousHeight>0){var t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;var n=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),o={x:n.x-this.cameraState.position.x,y:n.y-this.cameraState.position.y};this.body.view.translation.x+=o.x*this.body.view.scale,this.body.view.translation.y+=o.y*this.body.view.scale}}},{key:"_prepareValue",value:function(t){if("number"==typeof t)return t+"px";if("string"==typeof t){if(-1!==lg(t).call(t,"%")||-1!==lg(t).call(t,"px"))return t;if(-1===lg(t).call(t,"%"))return t+"px"}throw new Error("Could not use the value supplied for width or height:"+t)}},{key:"_create",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement("div"),this.frame.className="vis-network",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.tabIndex=0,this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{var t=document.createElement("DIV");t.style.color="red",t.style.fontWeight="bold",t.style.padding="10px",t.innerText="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(t)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:"_bindHammer",value:function(){var t=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new Qb(this.frame.canvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.get("pan").set({threshold:5,direction:Qb.DIRECTION_ALL}),MI(this.hammer,(function(e){t.body.eventListeners.onTouch(e)})),this.hammer.on("tap",(function(e){t.body.eventListeners.onTap(e)})),this.hammer.on("doubletap",(function(e){t.body.eventListeners.onDoubleTap(e)})),this.hammer.on("press",(function(e){t.body.eventListeners.onHold(e)})),this.hammer.on("panstart",(function(e){t.body.eventListeners.onDragStart(e)})),this.hammer.on("panmove",(function(e){t.body.eventListeners.onDrag(e)})),this.hammer.on("panend",(function(e){t.body.eventListeners.onDragEnd(e)})),this.hammer.on("pinch",(function(e){t.body.eventListeners.onPinch(e)})),this.frame.canvas.addEventListener("wheel",(function(e){t.body.eventListeners.onMouseWheel(e)})),this.frame.canvas.addEventListener("mousemove",(function(e){t.body.eventListeners.onMouseMove(e)})),this.frame.canvas.addEventListener("contextmenu",(function(e){t.body.eventListeners.onContext(e)})),this.hammerFrame=new Qb(this.frame),PI(this.hammerFrame,(function(e){t.body.eventListeners.onRelease(e)}))}},{key:"setSize",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;t=this._prepareValue(t),e=this._prepareValue(e);var i=!1,n=this.frame.canvas.width,o=this.frame.canvas.height,r=this.pixelRatio;if(this._setPixelRatio(),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e)this._getCameraState(r),this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},i=!0;else{var s=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),a=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===s&&this.frame.canvas.height===a||this._getCameraState(r),this.frame.canvas.width!==s&&(this.frame.canvas.width=s,i=!0),this.frame.canvas.height!==a&&(this.frame.canvas.height=a,i=!0)}return!0===i&&(this.body.emitter.emit("resize",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(n/this.pixelRatio),oldHeight:Math.round(o/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}},{key:"getContext",value:function(){return this.frame.canvas.getContext("2d")}},{key:"_determinePixelRatio",value:function(){var t=this.getContext();if(void 0===t)throw new Error("Could not get canvax context");var e=1;return"undefined"!=typeof window&&(e=window.devicePixelRatio||1),e/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)}},{key:"_setPixelRatio",value:function(){this.pixelRatio=this._determinePixelRatio()}},{key:"setTransform",value:function(){var t=this.getContext();if(void 0===t)throw new Error("Could not get canvax context");t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}},{key:"_XconvertDOMtoCanvas",value:function(t){return(t-this.body.view.translation.x)/this.body.view.scale}},{key:"_XconvertCanvasToDOM",value:function(t){return t*this.body.view.scale+this.body.view.translation.x}},{key:"_YconvertDOMtoCanvas",value:function(t){return(t-this.body.view.translation.y)/this.body.view.scale}},{key:"_YconvertCanvasToDOM",value:function(t){return t*this.body.view.scale+this.body.view.translation.y}},{key:"canvasToDOM",value:function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}},{key:"DOMtoCanvas",value:function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}]),t}();var II=function(){function t(e,i){var n,o,r=this;ph(this,t),this.body=e,this.canvas=i,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction="easeInOutQuint",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on("fit",Hn(n=this.fit).call(n,this)),this.body.emitter.on("animationFinished",(function(){r.body.emitter.emit("_stopRendering")})),this.body.emitter.on("unlockNode",Hn(o=this.releaseNode).call(o,this))}return xu(t,[{key:"setOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t}},{key:"fit",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t=function(t,e){var i=bn({nodes:e,minZoomLevel:Number.MIN_VALUE,maxZoomLevel:1},null!=t?t:{});if(!Df(i.nodes))throw new TypeError("Nodes has to be an array of ids.");if(0===i.nodes.length&&(i.nodes=e),!("number"==typeof i.minZoomLevel&&i.minZoomLevel>0))throw new TypeError("Min zoom level has to be a number higher than zero.");if(!("number"==typeof i.maxZoomLevel&&i.minZoomLevel<=i.maxZoomLevel))throw new TypeError("Max zoom level has to be a number higher than min zoom level.");return i}(t,this.body.nodeIndices);var i,n,o=this.canvas.frame.canvas.clientWidth,r=this.canvas.frame.canvas.clientHeight;if(0===o||0===r)n=1,i=xI.getRange(this.body.nodes,t.nodes);else if(!0===e){var s=0;for(var a in this.body.nodes){if(Object.prototype.hasOwnProperty.call(this.body.nodes,a))!0===this.body.nodes[a].predefinedPosition&&(s+=1)}if(s>.5*this.body.nodeIndices.length)return void this.fit(t,!1);i=xI.getRange(this.body.nodes,t.nodes),n=12.662/(this.body.nodeIndices.length+7.4147)+.0964822,n*=Math.min(o/600,r/600)}else{this.body.emitter.emit("_resizeNodes"),i=xI.getRange(this.body.nodes,t.nodes);var h=o/(1.1*Math.abs(i.maxX-i.minX)),l=r/(1.1*Math.abs(i.maxY-i.minY));n=h<=l?h:l}n>t.maxZoomLevel?n=t.maxZoomLevel:n1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==this.body.nodes[t]){var i={x:this.body.nodes[t].x,y:this.body.nodes[t].y};e.position=i,e.lockedOnNode=t,this.moveTo(e)}else console.error("Node: "+t+" cannot be found.")}},{key:"moveTo",value:function(t){if(void 0!==t){if(null!=t.offset){if(null!=t.offset.x){if(t.offset.x=+t.offset.x,!g_(t.offset.x))throw new TypeError('The option "offset.x" has to be a finite number.')}else t.offset.x=0;if(null!=t.offset.y){if(t.offset.y=+t.offset.y,!g_(t.offset.y))throw new TypeError('The option "offset.y" has to be a finite number.')}else t.offset.x=0}else t.offset={x:0,y:0};if(null!=t.position){if(null!=t.position.x){if(t.position.x=+t.position.x,!g_(t.position.x))throw new TypeError('The option "position.x" has to be a finite number.')}else t.position.x=0;if(null!=t.position.y){if(t.position.y=+t.position.y,!g_(t.position.y))throw new TypeError('The option "position.y" has to be a finite number.')}else t.position.x=0}else t.position=this.getViewPosition();if(null!=t.scale){if(t.scale=+t.scale,!(t.scale>0))throw new TypeError('The option "scale" has to be a number greater than zero.')}else t.scale=this.body.view.scale;void 0===t.animation&&(t.animation={duration:0}),!1===t.animation&&(t.animation={duration:0}),!0===t.animation&&(t.animation={}),void 0===t.animation.duration&&(t.animation.duration=1e3),void 0===t.animation.easingFunction&&(t.animation.easingFunction="easeInOutQuad"),this.animateView(t)}else t={}}},{key:"animateView",value:function(t){if(void 0!==t){this.animationEasingFunction=t.animation.easingFunction,this.releaseNode(),!0===t.locked&&(this.lockedOnNodeId=t.lockedOnNode,this.lockedOnNodeOffset=t.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=t.scale,this.body.view.scale=this.targetScale;var e,i,n=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),o=n.x-t.position.x,r=n.y-t.position.y;if(this.targetTranslation={x:this.sourceTranslation.x+o*this.targetScale+t.offset.x,y:this.sourceTranslation.y+r*this.targetScale+t.offset.y},0===t.animation.duration)if(null!=this.lockedOnNodeId)this.viewFunction=Hn(e=this._lockedRedraw).call(e,this),this.body.emitter.on("initRedraw",this.viewFunction);else this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit("_requestRedraw");else this.animationSpeed=1/(60*t.animation.duration*.001)||1/60,this.animationEasingFunction=t.animation.easingFunction,this.viewFunction=Hn(i=this._transitionRedraw).call(i,this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering")}}},{key:"_lockedRedraw",value:function(){var t=this.body.nodes[this.lockedOnNodeId].x,e=this.body.nodes[this.lockedOnNodeId].y,i=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),n=i.x-t,o=i.y-e,r=this.body.view.translation,s={x:r.x+n*this.body.view.scale+this.lockedOnNodeOffset.x,y:r.y+o*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=s}},{key:"releaseNode",value:function(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:"_transitionRedraw",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=!0===t?1:this.easingTime;var e=jb[this.animationEasingFunction](this.easingTime);if(this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*e,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*e,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*e},this.easingTime>=1){var i;if(this.body.emitter.off("initRedraw",this.viewFunction),this.easingTime=0,null!=this.lockedOnNodeId)this.viewFunction=Hn(i=this._lockedRedraw).call(i,this),this.body.emitter.on("initRedraw",this.viewFunction);this.body.emitter.emit("animationFinished")}}},{key:"getScale",value:function(){return this.body.view.scale}},{key:"getViewPosition",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),t}();function BI(t){var e,i=t&&t.preventDefault||!1,n=t&&t.container||window,o={},r={keydown:{},keyup:{}},s={};for(e=97;e<=122;e++)s[String.fromCharCode(e)]={code:e-97+65,shift:!1};for(e=65;e<=90;e++)s[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;e<=9;e++)s[""+e]={code:48+e,shift:!1};for(e=1;e<=12;e++)s["F"+e]={code:111+e,shift:!1};for(e=0;e<=9;e++)s["num"+e]={code:96+e,shift:!1};s["num*"]={code:106,shift:!1},s["num+"]={code:107,shift:!1},s["num-"]={code:109,shift:!1},s["num/"]={code:111,shift:!1},s["num."]={code:110,shift:!1},s.left={code:37,shift:!1},s.up={code:38,shift:!1},s.right={code:39,shift:!1},s.down={code:40,shift:!1},s.space={code:32,shift:!1},s.enter={code:13,shift:!1},s.shift={code:16,shift:void 0},s.esc={code:27,shift:!1},s.backspace={code:8,shift:!1},s.tab={code:9,shift:!1},s.ctrl={code:17,shift:!1},s.alt={code:18,shift:!1},s.delete={code:46,shift:!1},s.pageup={code:33,shift:!1},s.pagedown={code:34,shift:!1},s["="]={code:187,shift:!1},s["-"]={code:189,shift:!1},s["]"]={code:221,shift:!1},s["["]={code:219,shift:!1};var a=function(t){l(t,"keydown")},h=function(t){l(t,"keyup")},l=function(t,e){if(void 0!==r[e][t.keyCode]){for(var n=r[e][t.keyCode],o=0;o700&&(this.body.emitter.emit("fit",{duration:700}),this.touchTime=(new Date).valueOf())}},{key:"_stopMovement",value:function(){for(var t in this.boundFunctions)Object.prototype.hasOwnProperty.call(this.boundFunctions,t)&&(this.body.emitter.off("initRedraw",this.boundFunctions[t]),this.body.emitter.emit("_stopRendering"));this.boundFunctions={}}},{key:"_moveUp",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:"_moveDown",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:"_moveLeft",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:"_moveRight",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:"_zoomIn",value:function(){var t=this.body.view.scale,e=this.body.view.scale*(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale,pointer:null})}},{key:"_zoomOut",value:function(){var t=this.body.view.scale,e=this.body.view.scale/(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale,pointer:null})}},{key:"configureKeyboardBindings",value:function(){var t,e,i,n,o,r,s,a,h,l,d,c,u,f,p,v,g,y,m,b,w,k,_,x,E=this;(void 0!==this.keycharm&&this.keycharm.destroy(),!0===this.options.keyboard.enabled)&&(!0===this.options.keyboard.bindToWindow?this.keycharm=BI({container:window,preventDefault:!0}):this.keycharm=BI({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),!0===this.activated&&(Hn(t=this.keycharm).call(t,"up",(function(){E.bindToRedraw("_moveUp")}),"keydown"),Hn(e=this.keycharm).call(e,"down",(function(){E.bindToRedraw("_moveDown")}),"keydown"),Hn(i=this.keycharm).call(i,"left",(function(){E.bindToRedraw("_moveLeft")}),"keydown"),Hn(n=this.keycharm).call(n,"right",(function(){E.bindToRedraw("_moveRight")}),"keydown"),Hn(o=this.keycharm).call(o,"=",(function(){E.bindToRedraw("_zoomIn")}),"keydown"),Hn(r=this.keycharm).call(r,"num+",(function(){E.bindToRedraw("_zoomIn")}),"keydown"),Hn(s=this.keycharm).call(s,"num-",(function(){E.bindToRedraw("_zoomOut")}),"keydown"),Hn(a=this.keycharm).call(a,"-",(function(){E.bindToRedraw("_zoomOut")}),"keydown"),Hn(h=this.keycharm).call(h,"[",(function(){E.bindToRedraw("_zoomOut")}),"keydown"),Hn(l=this.keycharm).call(l,"]",(function(){E.bindToRedraw("_zoomIn")}),"keydown"),Hn(d=this.keycharm).call(d,"pageup",(function(){E.bindToRedraw("_zoomIn")}),"keydown"),Hn(c=this.keycharm).call(c,"pagedown",(function(){E.bindToRedraw("_zoomOut")}),"keydown"),Hn(u=this.keycharm).call(u,"up",(function(){E.unbindFromRedraw("_moveUp")}),"keyup"),Hn(f=this.keycharm).call(f,"down",(function(){E.unbindFromRedraw("_moveDown")}),"keyup"),Hn(p=this.keycharm).call(p,"left",(function(){E.unbindFromRedraw("_moveLeft")}),"keyup"),Hn(v=this.keycharm).call(v,"right",(function(){E.unbindFromRedraw("_moveRight")}),"keyup"),Hn(g=this.keycharm).call(g,"=",(function(){E.unbindFromRedraw("_zoomIn")}),"keyup"),Hn(y=this.keycharm).call(y,"num+",(function(){E.unbindFromRedraw("_zoomIn")}),"keyup"),Hn(m=this.keycharm).call(m,"num-",(function(){E.unbindFromRedraw("_zoomOut")}),"keyup"),Hn(b=this.keycharm).call(b,"-",(function(){E.unbindFromRedraw("_zoomOut")}),"keyup"),Hn(w=this.keycharm).call(w,"[",(function(){E.unbindFromRedraw("_zoomOut")}),"keyup"),Hn(k=this.keycharm).call(k,"]",(function(){E.unbindFromRedraw("_zoomIn")}),"keyup"),Hn(_=this.keycharm).call(_,"pageup",(function(){E.unbindFromRedraw("_zoomIn")}),"keyup"),Hn(x=this.keycharm).call(x,"pagedown",(function(){E.unbindFromRedraw("_zoomOut")}),"keyup")))}}]),t}();function zI(t,e){var i=void 0!==gf&&fh(t)||t["@@iterator"];if(!i){if(Df(t)||(i=function(t,e){var i;if(!t)return;if("string"==typeof t)return AI(t,e);var n=xf(i=Object.prototype.toString.call(t)).call(i,8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Ya(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return AI(t,e)}(t))||e&&t&&"number"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function AI(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i50&&(this.drag.pointer=this.getPointer(t.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=(new Date).valueOf())}},{key:"onTap",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect&&(t.changedPointers[0].ctrlKey||t.changedPointers[0].metaKey);this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent("click",t,e)}},{key:"onDoubleTap",value:function(t){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent("doubleClick",t,e)}},{key:"onHold",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect;this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent("click",t,e),this.selectionHandler.generateClickEvent("hold",t,e)}},{key:"onRelease",value:function(t){if((new Date).valueOf()-this.touchTime>10){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent("release",t,e),this.touchTime=(new Date).valueOf()}}},{key:"onContext",value:function(t){var e=this.getPointer({x:t.clientX,y:t.clientY});this.selectionHandler.generateClickEvent("oncontext",t,e)}},{key:"checkSelectionChanges",value:function(t){!0===(arguments.length>1&&void 0!==arguments[1]&&arguments[1])?this.selectionHandler.selectAdditionalOnPoint(t):this.selectionHandler.selectOnPoint(t)}},{key:"_determineDifference",value:function(t,e){var i=function(t,e){for(var i=[],n=0;n=o.minX&&i.x<=o.maxX&&i.y>=o.minY&&i.y<=o.maxY}));op(r).call(r,(function(t){return e.selectionHandler.selectObject(e.body.nodes[t])}));var s=this.getPointer(t.center);this.selectionHandler.commitAndEmit(s,t),this.selectionHandler.generateClickEvent("dragEnd",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit("_requestRedraw")}else{var a=this.drag.selection;a&&a.length?(op(a).call(a,(function(t){t.node.options.fixed.x=t.xFixed,t.node.options.fixed.y=t.yFixed})),this.selectionHandler.generateClickEvent("dragEnd",t,this.getPointer(t.center)),this.body.emitter.emit("startSimulation")):(this.selectionHandler.generateClickEvent("dragEnd",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit("_requestRedraw"))}}},{key:"onPinch",value:function(t){var e=this.getPointer(t.center);this.drag.pinched=!0,void 0===this.pinch.scale&&(this.pinch.scale=1);var i=this.pinch.scale*t.scale;this.zoom(i,e)}},{key:"zoom",value:function(t,e){if(!0===this.options.zoomView){var i=this.body.view.scale;t<1e-5&&(t=1e-5),t>10&&(t=10);var n=void 0;void 0!==this.drag&&!0===this.drag.dragging&&(n=this.canvas.DOMtoCanvas(this.drag.pointer));var o=this.body.view.translation,r=t/i,s=(1-r)*e.x+o.x*r,a=(1-r)*e.y+o.y*r;if(this.body.view.scale=t,this.body.view.translation={x:s,y:a},null!=n){var h=this.canvas.canvasToDOM(n);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}this.body.emitter.emit("_requestRedraw"),i0&&(this.popupObj=l[d[d.length-1]],r=!0)}if(void 0===this.popupObj&&!1===r){for(var u,f=this.body.edgeIndices,p=this.body.edges,v=[],g=0;g0&&(this.popupObj=p[v[v.length-1]],s="edge")}void 0!==this.popupObj?this.popupObj.id!==o&&(void 0===this.popup&&(this.popup=new Jb(this.canvas.frame)),this.popup.popupTargetType=s,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(t.x+3,t.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit("showPopup",this.popupObj.id)):void 0!==this.popup&&(this.popup.hide(),this.body.emitter.emit("hidePopup"))}},{key:"_checkHidePopup",value:function(t){var e=this.selectionHandler._pointerToPositionObject(t),i=!1;if("node"===this.popup.popupTargetType){if(void 0!==this.body.nodes[this.popup.popupTargetId]&&!0===(i=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(e))){var n=this.selectionHandler.getNodeAt(t);i=void 0!==n&&n.id===this.popup.popupTargetId}}else void 0===this.selectionHandler.getNodeAt(t)&&void 0!==this.body.edges[this.popup.popupTargetId]&&(i=this.body.edges[this.popup.popupTargetId].isOverlappingWith(e));!1===i&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit("hidePopup"))}}]),t}(),RI=g,LI=Vk,HI=hk.getWeakData,WI=Ok,qI=ii,VI=U,UI=tt,YI=_k,XI=Qt,GI=Lo.set,KI=Lo.getterFor,$I=Fl.find,ZI=Fl.findIndex,QI=RI([].splice),JI=0,tB=function(t){return t.frozen||(t.frozen=new eB)},eB=function(){this.entries=[]},iB=function(t,e){return $I(t.entries,(function(t){return t[0]===e}))};eB.prototype={get:function(t){var e=iB(this,t);if(e)return e[1]},has:function(t){return!!iB(this,t)},set:function(t,e){var i=iB(this,t);i?i[1]=e:this.entries.push([t,e])},delete:function(t){var e=ZI(this.entries,(function(e){return e[0]===t}));return~e&&QI(this.entries,e,1),!!~e}};var nB,oB={getConstructor:function(t,e,i,n){var o=t((function(t,o){WI(t,r),GI(t,{type:e,id:JI++,frozen:void 0}),VI(o)||YI(o,t[n],{that:t,AS_ENTRIES:i})})),r=o.prototype,s=KI(e),a=function(t,e,i){var n=s(t),o=HI(qI(e),!0);return!0===o?tB(n).set(e,i):o[n.id]=i,t};return LI(r,{delete:function(t){var e=s(this);if(!UI(t))return!1;var i=HI(t);return!0===i?tB(e).delete(t):i&&XI(i,e.id)&&delete i[e.id]},has:function(t){var e=s(this);if(!UI(t))return!1;var i=HI(t);return!0===i?tB(e).has(t):i&&XI(i,e.id)}}),LI(r,i?{get:function(t){var e=s(this);if(UI(t)){var i=HI(t);return!0===i?tB(e).get(t):i?i[e.id]:void 0}},set:function(t,e){return a(this,t,e)}}:{add:function(t){return a(this,t,!0)}}),o}},rB=Yw,sB=o,aB=g,hB=Vk,lB=hk,dB=Wk,cB=oB,uB=tt,fB=Lo.enforce,pB=r,vB=xo,gB=Object,yB=Array.isArray,mB=gB.isExtensible,bB=gB.isFrozen,wB=gB.isSealed,kB=gB.freeze,_B=gB.seal,xB={},EB={},OB=!sB.ActiveXObject&&"ActiveXObject"in sB,CB=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},SB=dB("WeakMap",CB,cB),TB=SB.prototype,MB=aB(TB.set);if(vB)if(OB){nB=cB.getConstructor(CB,"WeakMap",!0),lB.enable();var PB=aB(TB.delete),DB=aB(TB.has),IB=aB(TB.get);hB(TB,{delete:function(t){if(uB(t)&&!mB(t)){var e=fB(this);return e.frozen||(e.frozen=new nB),PB(this,t)||e.frozen.delete(t)}return PB(this,t)},has:function(t){if(uB(t)&&!mB(t)){var e=fB(this);return e.frozen||(e.frozen=new nB),DB(this,t)||e.frozen.has(t)}return DB(this,t)},get:function(t){if(uB(t)&&!mB(t)){var e=fB(this);return e.frozen||(e.frozen=new nB),DB(this,t)?IB(this,t):e.frozen.get(t)}return IB(this,t)},set:function(t,e){if(uB(t)&&!mB(t)){var i=fB(this);i.frozen||(i.frozen=new nB),DB(this,t)?MB(this,t,e):i.frozen.set(t,e)}else MB(this,t,e);return this}})}else rB&&pB((function(){var t=kB([]);return MB(new SB,t,1),!bB(t)}))&&hB(TB,{set:function(t,e){var i;return yB(t)&&(bB(t)?i=xB:wB(t)&&(i=EB)),MB(this,t,e),i===xB&&kB(t),i===EB&&_B(t),this}});var BB,NB,FB,zB,AB,jB=i(et.WeakMap);function RB(t,e,i,n){if("a"===i&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?n:"a"===i?n.call(t):n?n.value:e.get(t)}function LB(t,e,i,n,o){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?o.call(t,i):o?o.value=i:e.set(t,i),i}function HB(t,e){var i=void 0!==gf&&fh(t)||t["@@iterator"];if(!i){if(Df(t)||(i=function(t,e){var i;if(!t)return;if("string"==typeof t)return WB(t,e);var n=xf(i=Object.prototype.toString.call(t)).call(i,8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Ya(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return WB(t,e)}(t))||e&&t&&"number"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function WB(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i0&&void 0!==arguments[0]?arguments[0]:function(){};ph(this,t),FB.set(this,new VB),zB.set(this,new VB),AB.set(this,void 0),LB(this,AB,e,"f")}return xu(t,[{key:"sizeNodes",get:function(){return RB(this,FB,"f").size}},{key:"sizeEdges",get:function(){return RB(this,zB,"f").size}},{key:"getNodes",value:function(){return RB(this,FB,"f").getSelection()}},{key:"getEdges",value:function(){return RB(this,zB,"f").getSelection()}},{key:"addNodes",value:function(){var t;(t=RB(this,FB,"f")).add.apply(t,arguments)}},{key:"addEdges",value:function(){var t;(t=RB(this,zB,"f")).add.apply(t,arguments)}},{key:"deleteNodes",value:function(t){RB(this,FB,"f").delete(t)}},{key:"deleteEdges",value:function(t){RB(this,zB,"f").delete(t)}},{key:"clear",value:function(){RB(this,FB,"f").clear(),RB(this,zB,"f").clear()}},{key:"commit",value:function(){for(var t,e,i={nodes:RB(this,FB,"f").commit(),edges:RB(this,zB,"f").commit()},n=arguments.length,o=new Array(n),r=0;r=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function XB(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i4&&void 0!==arguments[4]&&arguments[4],r=this._initBaseEvent(e,i);if(!0===o)r.nodes=[],r.edges=[];else{var s=this.getSelection();r.nodes=s.nodes,r.edges=s.edges}void 0!==n&&(r.previousSelection=n),"click"==t&&(r.items=this.getClickedItems(i)),void 0!==e.controlEdge&&(r.controlEdge=e.controlEdge),this.body.emitter.emit(t,r)}},{key:"selectObject",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;if(void 0!==t){if(t instanceof fD){var i;if(!0===e)(i=this._selectionAccumulator).addEdges.apply(i,vf(t.edges));this._selectionAccumulator.addNodes(t)}else this._selectionAccumulator.addEdges(t);return!0}return!1}},{key:"deselectObject",value:function(t){!0===t.isSelected()&&(t.selected=!1,this._removeFromSelection(t))}},{key:"_getAllNodesOverlappingWith",value:function(t){for(var e=[],i=this.body.nodes,n=0;n1&&void 0!==arguments[1])||arguments[1],i=this._pointerToPositionObject(t),n=this._getAllNodesOverlappingWith(i);return n.length>0?!0===e?this.body.nodes[n[n.length-1]]:n[n.length-1]:void 0}},{key:"_getEdgesOverlappingWith",value:function(t,e){for(var i=this.body.edges,n=0;n1&&void 0!==arguments[1])||arguments[1],i=this.canvas.DOMtoCanvas(t),n=10,o=null,r=this.body.edges,s=0;s0&&(this.generateClickEvent("deselectEdge",e,t,o),i=!0),n.nodes.deleted.length>0&&(this.generateClickEvent("deselectNode",e,t,o),i=!0),n.nodes.added.length>0&&(this.generateClickEvent("selectNode",e,t),i=!0),n.edges.added.length>0&&(this.generateClickEvent("selectEdge",e,t),i=!0),!0===i&&this.generateClickEvent("select",e,t)}},{key:"getSelection",value:function(){return{nodes:this.getSelectedNodeIds(),edges:this.getSelectedEdgeIds()}}},{key:"getSelectedNodes",value:function(){return this._selectionAccumulator.getNodes()}},{key:"getSelectedEdges",value:function(){return this._selectionAccumulator.getEdges()}},{key:"getSelectedNodeIds",value:function(){var t;return jf(t=this._selectionAccumulator.getNodes()).call(t,(function(t){return t.id}))}},{key:"getSelectedEdgeIds",value:function(){var t;return jf(t=this._selectionAccumulator.getEdges()).call(t,(function(t){return t.id}))}},{key:"setSelection",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t||!t.nodes&&!t.edges)throw new TypeError("Selection must be an object with nodes and/or edges properties");if((e.unselectAll||void 0===e.unselectAll)&&this.unselectAll(),t.nodes){var i,n=YB(t.nodes);try{for(n.s();!(i=n.n()).done;){var o=i.value,r=this.body.nodes[o];if(!r)throw new RangeError('Node with id "'+o+'" not found');this.selectObject(r,e.highlightEdges)}}catch(t){n.e(t)}finally{n.f()}}if(t.edges){var s,a=YB(t.edges);try{for(a.s();!(s=a.n()).done;){var h=s.value,l=this.body.edges[h];if(!l)throw new RangeError('Edge with id "'+h+'" not found');this.selectObject(l)}}catch(t){a.e(t)}finally{a.f()}}this.body.emitter.emit("_requestRedraw"),this._selectionAccumulator.commit()}},{key:"selectNodes",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t||void 0===t.length)throw"Selection must be an array with ids";this.setSelection({nodes:t},{highlightEdges:e})}},{key:"selectEdges",value:function(t){if(!t||void 0===t.length)throw"Selection must be an array with ids";this.setSelection({edges:t})}},{key:"updateSelection",value:function(){for(var t in this._selectionAccumulator.getNodes())Object.prototype.hasOwnProperty.call(this.body.nodes,t.id)||this._selectionAccumulator.deleteNodes(t);for(var e in this._selectionAccumulator.getEdges())Object.prototype.hasOwnProperty.call(this.body.edges,e.id)||this._selectionAccumulator.deleteEdges(e)}},{key:"getClickedItems",value:function(t){for(var e=this.canvas.DOMtoCanvas(t),i=[],n=this.body.nodeIndices,o=this.body.nodes,r=n.length-1;r>=0;r--){var s=o[n[r]].getItemsOnPoint(e);i.push.apply(i,s)}for(var a=this.body.edgeIndices,h=this.body.edges,l=a.length-1;l>=0;l--){var d=h[a[l]].getItemsOnPoint(e);i.push.apply(i,d)}return i}}]),t}();function KB(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var $B=function(){function t(){ph(this,t)}return xu(t,[{key:"abstract",value:function(){throw new Error("Can't instantiate abstract class!")}},{key:"fake_use",value:function(){}},{key:"curveType",value:function(){return this.abstract()}},{key:"getPosition",value:function(t){return this.fake_use(t),this.abstract()}},{key:"setPosition",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;this.fake_use(t,e,i),this.abstract()}},{key:"getTreeSize",value:function(t){return this.fake_use(t),this.abstract()}},{key:"sort",value:function(t){this.fake_use(t),this.abstract()}},{key:"fix",value:function(t,e){this.fake_use(t,e),this.abstract()}},{key:"shift",value:function(t,e){this.fake_use(t,e),this.abstract()}}]),t}(),ZB=function(t){D_(i,t);var e=KB(i);function i(t){var n;return ph(this,i),(n=e.call(this)).layout=t,n}return xu(i,[{key:"curveType",value:function(){return"horizontal"}},{key:"getPosition",value:function(t){return t.x}},{key:"setPosition",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.x=e}},{key:"getTreeSize",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_x,max:e.max_x}}},{key:"sort",value:function(t){yT(t).call(t,(function(t,e){return t.x-e.x}))}},{key:"fix",value:function(t,e){t.y=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.y=!0}},{key:"shift",value:function(t,e){this.layout.body.nodes[t].x+=e}}]),i}($B),QB=function(t){D_(i,t);var e=KB(i);function i(t){var n;return ph(this,i),(n=e.call(this)).layout=t,n}return xu(i,[{key:"curveType",value:function(){return"vertical"}},{key:"getPosition",value:function(t){return t.y}},{key:"setPosition",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.y=e}},{key:"getTreeSize",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_y,max:e.max_y}}},{key:"sort",value:function(t){yT(t).call(t,(function(t,e){return t.y-e.y}))}},{key:"fix",value:function(t,e){t.x=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.x=!0}},{key:"shift",value:function(t,e){this.layout.body.nodes[t].y+=e}}]),i}($B),JB=Fl.every;Ti({target:"Array",proto:!0,forced:!Xf("every")},{every:function(t){return JB(this,t,arguments.length>1?arguments[1]:void 0)}});var tN=Nn("Array").every,eN=at,iN=tN,nN=Array.prototype,oN=function(t){var e=t.every;return t===nN||eN(nN,t)&&e===nN.every?iN:e},rN=i(oN);function sN(t,e){var i=void 0!==gf&&fh(t)||t["@@iterator"];if(!i){if(Df(t)||(i=function(t,e){var i;if(!t)return;if("string"==typeof t)return aN(t,e);var n=xf(i=Object.prototype.toString.call(t)).call(i,8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Ya(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return aN(t,e)}(t))||e&&t&&"number"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function aN(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i=e[n])&&(e[n]=e[i]+1)})),e}function lN(t,e,i,n){var o,r,s=pg(null),a=pS(o=vf(FT(n).call(n))).call(o,(function(t,e){return t+1+e.edges.length}),0),h=i+"Id",l="to"===i?1:-1,d=sN(n);try{var c,u=function(){var o=pf(r.value,2),d=o[0],c=o[1];if(!n.has(d)||!t(c))return 0;s[d]=0;for(var u,f,p=[c],v=0,g=function(){var t,o;if(!n.has(d))return 0;var r=s[u.id]+l;if(op(t=yv(o=u.edges).call(o,(function(t){return t.connected&&t.to!==t.from&&t[i]!==u&&n.has(t.toId)&&n.has(t.fromId)}))).call(t,(function(t){var n=t[h],o=s[n];(null==o||e(r,o))&&(s[n]=r,p.push(t[i]))})),v>a)return{v:{v:hN(n,s)}};++v};u=p.pop();)if(0!==(f=g())&&f)return f.v};for(d.s();!(r=d.n()).done;)if(0!==(c=u())&&c)return c.v}catch(t){d.e(t)}finally{d.f()}return s}var dN=function(){function t(){ph(this,t),this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}return xu(t,[{key:"addRelation",value:function(t,e){void 0===this.childrenReference[t]&&(this.childrenReference[t]=[]),this.childrenReference[t].push(e),void 0===this.parentReference[e]&&(this.parentReference[e]=[]),this.parentReference[e].push(t)}},{key:"checkIfTree",value:function(){for(var t in this.parentReference)if(this.parentReference[t].length>1)return void(this.isTree=!1);this.isTree=!0}},{key:"numTrees",value:function(){return this.treeIndex+1}},{key:"setTreeIndex",value:function(t,e){void 0!==e&&void 0===this.trees[t.id]&&(this.trees[t.id]=e,this.treeIndex=Math.max(e,this.treeIndex))}},{key:"ensureLevel",value:function(t){void 0===this.levels[t]&&(this.levels[t]=0)}},{key:"getMaxLevel",value:function(t){var e=this,i={};return function t(n){if(void 0!==i[n])return i[n];var o=e.levels[n];if(e.childrenReference[n]){var r=e.childrenReference[n];if(r.length>0)for(var s=0;s0&&(i.levelSeparation*=-1):i.levelSeparation<0&&(i.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit("_resetHierarchicalLayout"),this.adaptAllOptionsForHierarchicalLayout(e);if(!0===n)return this.body.emitter.emit("refresh"),gb(e,this.optionsBackup)}return e}},{key:"_resetRNG",value:function(t){this.initialRandomSeed=t,this._rng=Jm(this.initialRandomSeed)}},{key:"adaptAllOptionsForHierarchicalLayout",value:function(t){if(!0===this.options.hierarchical.enabled){var e=this.optionsBackup.physics;void 0===t.physics||!0===t.physics?(t.physics={enabled:void 0===e.enabled||e.enabled,solver:"hierarchicalRepulsion"},e.enabled=void 0===e.enabled||e.enabled,e.solver=e.solver||"barnesHut"):"object"===bu(t.physics)?(e.enabled=void 0===t.physics.enabled||t.physics.enabled,e.solver=t.physics.solver||"barnesHut",t.physics.solver="hierarchicalRepulsion"):!1!==t.physics&&(e.solver="barnesHut",t.physics={solver:"hierarchicalRepulsion"});var i=this.direction.curveType();if(void 0===t.edges)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges={smooth:!1};else if(void 0===t.edges.smooth)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges.smooth=!1;else if("boolean"==typeof t.edges.smooth)this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:i};else{var n=t.edges.smooth;void 0!==n.type&&"dynamic"!==n.type&&(i=n.type),this.optionsBackup.edges={smooth:{enabled:void 0===n.enabled||n.enabled,type:void 0===n.type?"dynamic":n.type,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}},t.edges.smooth={enabled:void 0===n.enabled||n.enabled,type:i,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}}this.body.emitter.emit("_forceDisableDynamicCurves",i)}return t}},{key:"positionInitially",value:function(t){if(!0!==this.options.hierarchical.enabled){this._resetRNG(this.initialRandomSeed);for(var e=t.length+50,i=0;io){for(var s=t.length;t.length>o&&n<=10;){n+=1;var a=t.length;if(n%3==0?this.body.modules.clustering.clusterBridges(r):this.body.modules.clustering.clusterOutliers(r),a==t.length&&n%3!=0)return this._declusterAll(),this.body.emitter.emit("_layoutFailed"),void console.info("This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*s)})}n>10&&console.info("The clustering didn't succeed within the amount of interations allowed, progressing with partial result."),this.body.modules.kamadaKawai.solve(t,this.body.edgeIndices,!0),this._shiftToCenter();for(var h=0;h0){var t,e,i=!1,n=!1;for(e in this.lastNodeOnLevel={},this.hierarchical=new dN,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&(void 0!==(t=this.body.nodes[e]).options.level?(i=!0,this.hierarchical.levels[e]=t.options.level):n=!0);if(!0===n&&!0===i)throw new Error("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.");if(!0===n){var o=this.options.hierarchical.sortMethod;"hubsize"===o?this._determineLevelsByHubsize():"directed"===o?this._determineLevelsDirected():"custom"===o&&this._determineLevelsCustomCallback()}for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.hierarchical.ensureLevel(r);var s=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(s),this._condenseHierarchy(),this._shiftToCenter()}}},{key:"_condenseHierarchy",value:function(){var t=this,e=!1,i={},n=function(e,i){var n=t.hierarchical.trees;for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&n[o]===e&&t.direction.shift(o,i)},o=function(){for(var e=[],i=0;i0)for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:1e9,n=1e9,o=1e9,r=1e9,s=-1e9;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var h=t.body.nodes[a],l=t.hierarchical.levels[h.id],d=t.direction.getPosition(h),c=pf(t._getSpaceAroundNode(h,e),2),u=c[0],f=c[1];n=Math.min(u,n),o=Math.min(f,o),l<=i&&(r=Math.min(d,r),s=Math.max(d,s))}return[r,s,n,o]},a=function(e,i,n){for(var o=t.hierarchical,r=0;r1)for(var h=0;h2&&void 0!==arguments[2]&&arguments[2],a=t.direction.getPosition(i),h=t.direction.getPosition(n),l=Math.abs(h-a),d=t.options.hierarchical.nodeSpacing;if(l>d){var c={},u={};r(i,c),r(n,u);var f=function(e,i){var n=t.hierarchical.getMaxLevel(e.id),o=t.hierarchical.getMaxLevel(i.id);return Math.min(n,o)}(i,n),p=s(c,f),v=s(u,f),g=p[1],y=v[0],m=v[2];if(Math.abs(g-y)>d){var b=g-y+d;b<-m+d&&(b=-m+d),b<0&&(t._shiftBlock(n.id,b),e=!0,!0===o&&t._centerParent(n))}}},l=function(n,o){for(var a=o.id,h=o.edges,l=t.hierarchical.levels[o.id],d=t.options.hierarchical.levelSeparation*t.options.hierarchical.levelSeparation,c={},u=[],f=0;f0?f=Math.min(u,c-t.options.hierarchical.nodeSpacing):u<0&&(f=-Math.min(-u,d-t.options.hierarchical.nodeSpacing)),0!=f&&(t._shiftBlock(o.id,f),e=!0)}(b),function(i){var n=t.direction.getPosition(o),r=pf(t._getSpaceAroundNode(o),2),s=r[0],a=r[1],h=i-n,l=n;h>0?l=Math.min(n+(a-t.options.hierarchical.nodeSpacing),i):h<0&&(l=Math.max(n-(s-t.options.hierarchical.nodeSpacing),i)),l!==n&&(t.direction.setPosition(o,l),e=!0)}(b=m(n,h))};!0===this.options.hierarchical.blockShifting&&(function(i){var n=t.hierarchical.getLevels();n=vp(n).call(n);for(var o=0;o0&&Math.abs(c)0&&(h=this.direction.getPosition(n[r-1])+a),this.direction.setPosition(s,h,e),this._validatePositionAndContinue(s,e,h),o++}}}}},{key:"_placeBranchNodes",value:function(t,e){var i,n=this.hierarchical.childrenReference[t];if(void 0!==n){for(var o=[],r=0;re&&void 0===this.positionedNodes[a.id]))return;var l=this.options.hierarchical.nodeSpacing,d=void 0;d=0===s?this.direction.getPosition(this.body.nodes[t]):this.direction.getPosition(o[s-1])+l,this.direction.setPosition(a,d,h),this._validatePositionAndContinue(a,h,d)}var c=this._getCenterPosition(o);this.direction.setPosition(this.body.nodes[t],c,e)}}},{key:"_validatePositionAndContinue",value:function(t,e,i){if(this.hierarchical.isTree){if(void 0!==this.lastNodeOnLevel[e]){var n=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[e]]);if(i-nt}),"from",t)}(i),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:"_generateMap",value:function(){var t=this;this._crawlNetwork((function(e,i){t.hierarchical.levels[i.id]>t.hierarchical.levels[e.id]&&t.hierarchical.addRelation(e.id,i.id)})),this.hierarchical.checkIfTree()}},{key:"_crawlNetwork",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},i=arguments.length>1?arguments[1]:void 0,n={},o=function i(o,r){if(void 0===n[o.id]){var s;t.hierarchical.setTreeIndex(o,r),n[o.id]=!0;for(var a=t._getActiveEdges(o),h=0;h=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function fN(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i0&&!1!==this.options.deleteNode||0===i&&!1!==this.options.deleteEdge)&&(!0===s&&this._createSeperator(4),this._createDeleteButton(r)),this._bindElementEvents(this.closeDiv,Hn(t=this.toggleEditMode).call(t,this)),this._temporaryBindEvent("select",Hn(e=this.showManipulatorToolbar).call(e,this))}this.body.emitter.emit("_redraw")}},{key:"addNodeMode",value:function(){var t;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="addNode",!0===this.guiEnabled){var e,i=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(i),this._createSeperator(),this._createDescription(i.addDescription||this.options.locales.en.addDescription),this._bindElementEvents(this.closeDiv,Hn(e=this.toggleEditMode).call(e,this))}this._temporaryBindEvent("click",Hn(t=this._performAddNode).call(t,this))}},{key:"editNode",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean();var e=this.selectionHandler.getSelectedNodes()[0];if(void 0!==e){if(this.inMode="editNode","function"!=typeof this.options.editNode)throw new Error("No function has been configured to handle the editing of nodes.");if(!0!==e.isCluster){var i=gb({},e.options,!1);if(i.x=e.x,i.y=e.y,2!==this.options.editNode.length)throw new Error("The function for edit does not support two arguments (data, callback)");this.options.editNode(i,(function(e){null!=e&&"editNode"===t.inMode&&t.body.data.nodes.getDataSet().update(e),t.showManipulatorToolbar()}))}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:"addEdgeMode",value:function(){var t,e,i,n,o;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="addEdge",!0===this.guiEnabled){var r,s=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(s),this._createSeperator(),this._createDescription(s.edgeDescription||this.options.locales.en.edgeDescription),this._bindElementEvents(this.closeDiv,Hn(r=this.toggleEditMode).call(r,this))}this._temporaryBindUI("onTouch",Hn(t=this._handleConnect).call(t,this)),this._temporaryBindUI("onDragEnd",Hn(e=this._finishConnect).call(e,this)),this._temporaryBindUI("onDrag",Hn(i=this._dragControlNode).call(i,this)),this._temporaryBindUI("onRelease",Hn(n=this._finishConnect).call(n,this)),this._temporaryBindUI("onDragStart",Hn(o=this._dragStartEdge).call(o,this)),this._temporaryBindUI("onHold",(function(){}))}},{key:"editEdgeMode",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="editEdge","object"!==bu(this.options.editEdge)||"function"!=typeof this.options.editEdge.editWithoutDrag||(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0===this.edgeBeingEditedId)){if(!0===this.guiEnabled){var t,e=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(e),this._createSeperator(),this._createDescription(e.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindElementEvents(this.closeDiv,Hn(t=this.toggleEditMode).call(t,this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0!==this.edgeBeingEditedId){var i,n,o,r,s=this.body.edges[this.edgeBeingEditedId],a=this._getNewTargetNode(s.from.x,s.from.y),h=this._getNewTargetNode(s.to.x,s.to.y);this.temporaryIds.nodes.push(a.id),this.temporaryIds.nodes.push(h.id),this.body.nodes[a.id]=a,this.body.nodeIndices.push(a.id),this.body.nodes[h.id]=h,this.body.nodeIndices.push(h.id),this._temporaryBindUI("onTouch",Hn(i=this._controlNodeTouch).call(i,this)),this._temporaryBindUI("onTap",(function(){})),this._temporaryBindUI("onHold",(function(){})),this._temporaryBindUI("onDragStart",Hn(n=this._controlNodeDragStart).call(n,this)),this._temporaryBindUI("onDrag",Hn(o=this._controlNodeDrag).call(o,this)),this._temporaryBindUI("onDragEnd",Hn(r=this._controlNodeDragEnd).call(r,this)),this._temporaryBindUI("onMouseMove",(function(){})),this._temporaryBindEvent("beforeDrawing",(function(t){var e=s.edgeType.findBorderPositions(t);!1===a.selected&&(a.x=e.from.x,a.y=e.from.y),!1===h.selected&&(h.x=e.to.x,h.y=e.to.y)})),this.body.emitter.emit("_redraw")}else this.showManipulatorToolbar()}else{var l=this.body.edges[this.edgeBeingEditedId];this._performEditEdge(l.from.id,l.to.id)}}},{key:"deleteSelected",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="delete";var e=this.selectionHandler.getSelectedNodeIds(),i=this.selectionHandler.getSelectedEdgeIds(),n=void 0;if(e.length>0){for(var o=0;o0&&"function"==typeof this.options.deleteEdge&&(n=this.options.deleteEdge);if("function"==typeof n){var r={nodes:e,edges:i};if(2!==n.length)throw new Error("The function for delete does not support two arguments (data, callback)");n(r,(function(e){null!=e&&"delete"===t.inMode?(t.body.data.edges.getDataSet().remove(e.edges),t.body.data.nodes.getDataSet().remove(e.nodes),t.body.emitter.emit("startSimulation"),t.showManipulatorToolbar()):(t.body.emitter.emit("startSimulation"),t.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().remove(i),this.body.data.nodes.getDataSet().remove(e),this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar()}},{key:"_setup",value:function(){!0===this.options.enabled?(this.guiEnabled=!0,this._createWrappers(),!1===this.editMode?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:"_createWrappers",value:function(){var t,e;(void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement("div"),this.manipulationDiv.className="vis-manipulation",!0===this.editMode?this.manipulationDiv.style.display="block":this.manipulationDiv.style.display="none",this.canvas.frame.appendChild(this.manipulationDiv)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement("div"),this.editModeDiv.className="vis-edit-mode",!0===this.editMode?this.editModeDiv.style.display="none":this.editModeDiv.style.display="block",this.canvas.frame.appendChild(this.editModeDiv)),void 0===this.closeDiv)&&(this.closeDiv=document.createElement("button"),this.closeDiv.className="vis-close",this.closeDiv.setAttribute("aria-label",null!==(t=null===(e=this.options.locales[this.options.locale])||void 0===e?void 0:e.close)&&void 0!==t?t:this.options.locales.en.close),this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:"_getNewTargetNode",value:function(t,e){var i=gb({},this.options.controlNodeStyle);i.id="targetNode"+zM(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;var n=this.body.functions.createNode(i);return n.shape.boundingBox={left:t,right:t,top:e,bottom:e},n}},{key:"_createEditButton",value:function(){var t;this._clean(),this.manipulationDOM={},hb(this.editModeDiv);var e=this.options.locales[this.options.locale],i=this._createButton("editMode","vis-edit vis-edit-mode",e.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(i),this._bindElementEvents(i,Hn(t=this.toggleEditMode).call(t,this))}},{key:"_clean",value:function(){this.inMode=!1,!0===this.guiEnabled&&(hb(this.editModeDiv),hb(this.manipulationDiv),this._cleanupDOMEventListeners()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit("restorePhysics")}},{key:"_cleanupDOMEventListeners",value:function(){var t,e,i=uN(Ap(t=this._domEventListenerCleanupQueue).call(t,0));try{for(i.s();!(e=i.n()).done;){(0,e.value)()}}catch(t){i.e(t)}finally{i.f()}}},{key:"_removeManipulationDOM",value:function(){this._clean(),hb(this.manipulationDiv),hb(this.editModeDiv),hb(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}},{key:"_createSeperator",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM["seperatorLineDiv"+t]=document.createElement("div"),this.manipulationDOM["seperatorLineDiv"+t].className="vis-separator-line",this.manipulationDiv.appendChild(this.manipulationDOM["seperatorLineDiv"+t])}},{key:"_createAddNodeButton",value:function(t){var e,i=this._createButton("addNode","vis-add",t.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Hn(e=this.addNodeMode).call(e,this))}},{key:"_createAddEdgeButton",value:function(t){var e,i=this._createButton("addEdge","vis-connect",t.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Hn(e=this.addEdgeMode).call(e,this))}},{key:"_createEditNodeButton",value:function(t){var e,i=this._createButton("editNode","vis-edit",t.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Hn(e=this.editNode).call(e,this))}},{key:"_createEditEdgeButton",value:function(t){var e,i=this._createButton("editEdge","vis-edit",t.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Hn(e=this.editEdgeMode).call(e,this))}},{key:"_createDeleteButton",value:function(t){var e,i;i=this.options.rtl?"vis-delete-rtl":"vis-delete";var n=this._createButton("delete",i,t.del||this.options.locales.en.del);this.manipulationDiv.appendChild(n),this._bindElementEvents(n,Hn(e=this.deleteSelected).call(e,this))}},{key:"_createBackButton",value:function(t){var e,i=this._createButton("back","vis-back",t.back||this.options.locales.en.back);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Hn(e=this.showManipulatorToolbar).call(e,this))}},{key:"_createButton",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"vis-label";return this.manipulationDOM[t+"Div"]=document.createElement("button"),this.manipulationDOM[t+"Div"].className="vis-button "+e,this.manipulationDOM[t+"Label"]=document.createElement("div"),this.manipulationDOM[t+"Label"].className=n,this.manipulationDOM[t+"Label"].innerText=i,this.manipulationDOM[t+"Div"].appendChild(this.manipulationDOM[t+"Label"]),this.manipulationDOM[t+"Div"]}},{key:"_createDescription",value:function(t){this.manipulationDOM.descriptionLabel=document.createElement("div"),this.manipulationDOM.descriptionLabel.className="vis-none",this.manipulationDOM.descriptionLabel.innerText=t,this.manipulationDiv.appendChild(this.manipulationDOM.descriptionLabel)}},{key:"_temporaryBindEvent",value:function(t,e){this.temporaryEventFunctions.push({event:t,boundFunction:e}),this.body.emitter.on(t,e)}},{key:"_temporaryBindUI",value:function(t,e){if(void 0===this.body.eventListeners[t])throw new Error("This UI function does not exist. Typo? You tried: "+t+" possible are: "+mg(Hf(this.body.eventListeners)));this.temporaryUIFunctions[t]=this.body.eventListeners[t],this.body.eventListeners[t]=e}},{key:"_unbindTemporaryUIs",value:function(){for(var t in this.temporaryUIFunctions)Object.prototype.hasOwnProperty.call(this.temporaryUIFunctions,t)&&(this.body.eventListeners[t]=this.temporaryUIFunctions[t],delete this.temporaryUIFunctions[t]);this.temporaryUIFunctions={}}},{key:"_unbindTemporaryEvents",value:function(){for(var t=0;t=0;s--)if(o[s]!==this.selectedControlNode.id){r=this.body.nodes[o[s]];break}if(void 0!==r&&void 0!==this.selectedControlNode)if(!0===r.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var a=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===a.id?this._performEditEdge(r.id,n.to.id):this._performEditEdge(n.from.id,r.id)}else n.updateEdgeType(),this.body.emitter.emit("restorePhysics");this.body.emitter.emit("_redraw")}}},{key:"_handleConnect",value:function(t){if((new Date).valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=bn({},this.body.view.translation),this.interactionHandler.drag.pointer=this.lastTouch,this.interactionHandler.drag.translation=this.lastTouch.translation;var e=this.lastTouch,i=this.selectionHandler.getNodeAt(e);if(void 0!==i)if(!0===i.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var n=this._getNewTargetNode(i.x,i.y);this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id);var o=this.body.functions.createEdge({id:"connectionEdge"+zM(),from:i.id,to:n.id,physics:!1,smooth:{enabled:!0,type:"continuous",roundness:.5}});this.body.edges[o.id]=o,this.body.edgeIndices.push(o.id),this.temporaryIds.nodes.push(n.id),this.temporaryIds.edges.push(o.id)}this.touchTime=(new Date).valueOf()}}},{key:"_dragControlNode",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===lg(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}if(t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent("controlNodeDragging",t,e),void 0!==this.temporaryIds.nodes[0]){var h=this.body.nodes[this.temporaryIds.nodes[0]];h.x=this.canvas._XconvertDOMtoCanvas(e.x),h.y=this.canvas._YconvertDOMtoCanvas(e.y),this.body.emitter.emit("_redraw")}else this.interactionHandler.onDrag(t)}},{key:"_finishConnect",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===lg(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}this._cleanupTemporaryNodesAndEdges(),void 0!==r&&(!0===r.isCluster?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):void 0!==this.body.nodes[n]&&void 0!==this.body.nodes[r.id]&&this._performAddEdge(n,r.id)),t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent("controlNodeDragEnd",t,e),this.body.emitter.emit("_redraw")}},{key:"_dragStartEdge",value:function(t){var e=this.lastTouch;this.selectionHandler.generateClickEvent("dragStart",t,e,void 0,!0)}},{key:"_performAddNode",value:function(t){var e=this,i={id:zM(),x:t.pointer.canvas.x,y:t.pointer.canvas.y,label:"new"};if("function"==typeof this.options.addNode){if(2!==this.options.addNode.length)throw this.showManipulatorToolbar(),new Error("The function for add does not support two arguments (data,callback)");this.options.addNode(i,(function(t){null!=t&&"addNode"===e.inMode&&e.body.data.nodes.getDataSet().add(t),e.showManipulatorToolbar()}))}else this.body.data.nodes.getDataSet().add(i),this.showManipulatorToolbar()}},{key:"_performAddEdge",value:function(t,e){var i=this,n={from:t,to:e};if("function"==typeof this.options.addEdge){if(2!==this.options.addEdge.length)throw new Error("The function for connect does not support two arguments (data,callback)");this.options.addEdge(n,(function(t){null!=t&&"addEdge"===i.inMode&&(i.body.data.edges.getDataSet().add(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().add(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:"_performEditEdge",value:function(t,e){var i=this,n={id:this.edgeBeingEditedId,from:t,to:e,label:this.body.data.edges.get(this.edgeBeingEditedId).label},o=this.options.editEdge;if("object"===bu(o)&&(o=o.editWithoutDrag),"function"==typeof o){if(2!==o.length)throw new Error("The function for edit does not support two arguments (data, callback)");o(n,(function(t){null==t||"editEdge"!==i.inMode?(i.body.edges[n.id].updateEdgeType(),i.body.emitter.emit("_redraw"),i.showManipulatorToolbar()):(i.body.data.edges.getDataSet().update(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().update(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),t}(),vN="string",gN="boolean",yN="number",mN="array",bN="object",wN=["arrow","bar","box","circle","crow","curve","diamond","image","inv_curve","inv_triangle","triangle","vee"],kN={borderWidth:{number:yN},borderWidthSelected:{number:yN,undefined:"undefined"},brokenImage:{string:vN,undefined:"undefined"},chosen:{label:{boolean:gN,function:"function"},node:{boolean:gN,function:"function"},__type__:{object:bN,boolean:gN}},color:{border:{string:vN},background:{string:vN},highlight:{border:{string:vN},background:{string:vN},__type__:{object:bN,string:vN}},hover:{border:{string:vN},background:{string:vN},__type__:{object:bN,string:vN}},__type__:{object:bN,string:vN}},opacity:{number:yN,undefined:"undefined"},fixed:{x:{boolean:gN},y:{boolean:gN},__type__:{object:bN,boolean:gN}},font:{align:{string:vN},color:{string:vN},size:{number:yN},face:{string:vN},background:{string:vN},strokeWidth:{number:yN},strokeColor:{string:vN},vadjust:{number:yN},multi:{boolean:gN,string:vN},bold:{color:{string:vN},size:{number:yN},face:{string:vN},mod:{string:vN},vadjust:{number:yN},__type__:{object:bN,string:vN}},boldital:{color:{string:vN},size:{number:yN},face:{string:vN},mod:{string:vN},vadjust:{number:yN},__type__:{object:bN,string:vN}},ital:{color:{string:vN},size:{number:yN},face:{string:vN},mod:{string:vN},vadjust:{number:yN},__type__:{object:bN,string:vN}},mono:{color:{string:vN},size:{number:yN},face:{string:vN},mod:{string:vN},vadjust:{number:yN},__type__:{object:bN,string:vN}},__type__:{object:bN,string:vN}},group:{string:vN,number:yN,undefined:"undefined"},heightConstraint:{minimum:{number:yN},valign:{string:vN},__type__:{object:bN,boolean:gN,number:yN}},hidden:{boolean:gN},icon:{face:{string:vN},code:{string:vN},size:{number:yN},color:{string:vN},weight:{string:vN,number:yN},__type__:{object:bN}},id:{string:vN,number:yN},image:{selected:{string:vN,undefined:"undefined"},unselected:{string:vN,undefined:"undefined"},__type__:{object:bN,string:vN}},imagePadding:{top:{number:yN},right:{number:yN},bottom:{number:yN},left:{number:yN},__type__:{object:bN,number:yN}},label:{string:vN,undefined:"undefined"},labelHighlightBold:{boolean:gN},level:{number:yN,undefined:"undefined"},margin:{top:{number:yN},right:{number:yN},bottom:{number:yN},left:{number:yN},__type__:{object:bN,number:yN}},mass:{number:yN},physics:{boolean:gN},scaling:{min:{number:yN},max:{number:yN},label:{enabled:{boolean:gN},min:{number:yN},max:{number:yN},maxVisible:{number:yN},drawThreshold:{number:yN},__type__:{object:bN,boolean:gN}},customScalingFunction:{function:"function"},__type__:{object:bN}},shadow:{enabled:{boolean:gN},color:{string:vN},size:{number:yN},x:{number:yN},y:{number:yN},__type__:{object:bN,boolean:gN}},shape:{string:["custom","ellipse","circle","database","box","text","image","circularImage","diamond","dot","star","triangle","triangleDown","square","icon","hexagon"]},ctxRenderer:{function:"function"},shapeProperties:{borderDashes:{boolean:gN,array:mN},borderRadius:{number:yN},interpolation:{boolean:gN},useImageSize:{boolean:gN},useBorderWithImage:{boolean:gN},coordinateOrigin:{string:["center","top-left"]},__type__:{object:bN}},size:{number:yN},title:{string:vN,dom:"dom",undefined:"undefined"},value:{number:yN,undefined:"undefined"},widthConstraint:{minimum:{number:yN},maximum:{number:yN},__type__:{object:bN,boolean:gN,number:yN}},x:{number:yN},y:{number:yN},__type__:{object:bN}},_N={configure:{enabled:{boolean:gN},filter:{boolean:gN,string:vN,array:mN,function:"function"},container:{dom:"dom"},showButton:{boolean:gN},__type__:{object:bN,boolean:gN,string:vN,array:mN,function:"function"}},edges:{arrows:{to:{enabled:{boolean:gN},scaleFactor:{number:yN},type:{string:wN},imageHeight:{number:yN},imageWidth:{number:yN},src:{string:vN},__type__:{object:bN,boolean:gN}},middle:{enabled:{boolean:gN},scaleFactor:{number:yN},type:{string:wN},imageWidth:{number:yN},imageHeight:{number:yN},src:{string:vN},__type__:{object:bN,boolean:gN}},from:{enabled:{boolean:gN},scaleFactor:{number:yN},type:{string:wN},imageWidth:{number:yN},imageHeight:{number:yN},src:{string:vN},__type__:{object:bN,boolean:gN}},__type__:{string:["from","to","middle"],object:bN}},endPointOffset:{from:{number:yN},to:{number:yN},__type__:{object:bN,number:yN}},arrowStrikethrough:{boolean:gN},background:{enabled:{boolean:gN},color:{string:vN},size:{number:yN},dashes:{boolean:gN,array:mN},__type__:{object:bN,boolean:gN}},chosen:{label:{boolean:gN,function:"function"},edge:{boolean:gN,function:"function"},__type__:{object:bN,boolean:gN}},color:{color:{string:vN},highlight:{string:vN},hover:{string:vN},inherit:{string:["from","to","both"],boolean:gN},opacity:{number:yN},__type__:{object:bN,string:vN}},dashes:{boolean:gN,array:mN},font:{color:{string:vN},size:{number:yN},face:{string:vN},background:{string:vN},strokeWidth:{number:yN},strokeColor:{string:vN},align:{string:["horizontal","top","middle","bottom"]},vadjust:{number:yN},multi:{boolean:gN,string:vN},bold:{color:{string:vN},size:{number:yN},face:{string:vN},mod:{string:vN},vadjust:{number:yN},__type__:{object:bN,string:vN}},boldital:{color:{string:vN},size:{number:yN},face:{string:vN},mod:{string:vN},vadjust:{number:yN},__type__:{object:bN,string:vN}},ital:{color:{string:vN},size:{number:yN},face:{string:vN},mod:{string:vN},vadjust:{number:yN},__type__:{object:bN,string:vN}},mono:{color:{string:vN},size:{number:yN},face:{string:vN},mod:{string:vN},vadjust:{number:yN},__type__:{object:bN,string:vN}},__type__:{object:bN,string:vN}},hidden:{boolean:gN},hoverWidth:{function:"function",number:yN},label:{string:vN,undefined:"undefined"},labelHighlightBold:{boolean:gN},length:{number:yN,undefined:"undefined"},physics:{boolean:gN},scaling:{min:{number:yN},max:{number:yN},label:{enabled:{boolean:gN},min:{number:yN},max:{number:yN},maxVisible:{number:yN},drawThreshold:{number:yN},__type__:{object:bN,boolean:gN}},customScalingFunction:{function:"function"},__type__:{object:bN}},selectionWidth:{function:"function",number:yN},selfReferenceSize:{number:yN},selfReference:{size:{number:yN},angle:{number:yN},renderBehindTheNode:{boolean:gN},__type__:{object:bN}},shadow:{enabled:{boolean:gN},color:{string:vN},size:{number:yN},x:{number:yN},y:{number:yN},__type__:{object:bN,boolean:gN}},smooth:{enabled:{boolean:gN},type:{string:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"]},roundness:{number:yN},forceDirection:{string:["horizontal","vertical","none"],boolean:gN},__type__:{object:bN,boolean:gN}},title:{string:vN,undefined:"undefined"},width:{number:yN},widthConstraint:{maximum:{number:yN},__type__:{object:bN,boolean:gN,number:yN}},value:{number:yN,undefined:"undefined"},__type__:{object:bN}},groups:{useDefaultGroups:{boolean:gN},__any__:kN,__type__:{object:bN}},interaction:{dragNodes:{boolean:gN},dragView:{boolean:gN},hideEdgesOnDrag:{boolean:gN},hideEdgesOnZoom:{boolean:gN},hideNodesOnDrag:{boolean:gN},hover:{boolean:gN},keyboard:{enabled:{boolean:gN},speed:{x:{number:yN},y:{number:yN},zoom:{number:yN},__type__:{object:bN}},bindToWindow:{boolean:gN},autoFocus:{boolean:gN},__type__:{object:bN,boolean:gN}},multiselect:{boolean:gN},navigationButtons:{boolean:gN},selectable:{boolean:gN},selectConnectedEdges:{boolean:gN},hoverConnectedEdges:{boolean:gN},tooltipDelay:{number:yN},zoomView:{boolean:gN},zoomSpeed:{number:yN},__type__:{object:bN}},layout:{randomSeed:{undefined:"undefined",number:yN,string:vN},improvedLayout:{boolean:gN},clusterThreshold:{number:yN},hierarchical:{enabled:{boolean:gN},levelSeparation:{number:yN},nodeSpacing:{number:yN},treeSpacing:{number:yN},blockShifting:{boolean:gN},edgeMinimization:{boolean:gN},parentCentralization:{boolean:gN},direction:{string:["UD","DU","LR","RL"]},sortMethod:{string:["hubsize","directed"]},shakeTowards:{string:["leaves","roots"]},__type__:{object:bN,boolean:gN}},__type__:{object:bN}},manipulation:{enabled:{boolean:gN},initiallyActive:{boolean:gN},addNode:{boolean:gN,function:"function"},addEdge:{boolean:gN,function:"function"},editNode:{function:"function"},editEdge:{editWithoutDrag:{function:"function"},__type__:{object:bN,boolean:gN,function:"function"}},deleteNode:{boolean:gN,function:"function"},deleteEdge:{boolean:gN,function:"function"},controlNodeStyle:kN,__type__:{object:bN,boolean:gN}},nodes:kN,physics:{enabled:{boolean:gN},barnesHut:{theta:{number:yN},gravitationalConstant:{number:yN},centralGravity:{number:yN},springLength:{number:yN},springConstant:{number:yN},damping:{number:yN},avoidOverlap:{number:yN},__type__:{object:bN}},forceAtlas2Based:{theta:{number:yN},gravitationalConstant:{number:yN},centralGravity:{number:yN},springLength:{number:yN},springConstant:{number:yN},damping:{number:yN},avoidOverlap:{number:yN},__type__:{object:bN}},repulsion:{centralGravity:{number:yN},springLength:{number:yN},springConstant:{number:yN},nodeDistance:{number:yN},damping:{number:yN},__type__:{object:bN}},hierarchicalRepulsion:{centralGravity:{number:yN},springLength:{number:yN},springConstant:{number:yN},nodeDistance:{number:yN},damping:{number:yN},avoidOverlap:{number:yN},__type__:{object:bN}},maxVelocity:{number:yN},minVelocity:{number:yN},solver:{string:["barnesHut","repulsion","hierarchicalRepulsion","forceAtlas2Based"]},stabilization:{enabled:{boolean:gN},iterations:{number:yN},updateInterval:{number:yN},onlyDynamicEdges:{boolean:gN},fit:{boolean:gN},__type__:{object:bN,boolean:gN}},timestep:{number:yN},adaptiveTimestep:{boolean:gN},wind:{x:{number:yN},y:{number:yN},__type__:{object:bN}},__type__:{object:bN,boolean:gN}},autoResize:{boolean:gN},clickToUse:{boolean:gN},locale:{string:vN},locales:{__any__:{any:"any"},__type__:{object:bN}},height:{string:vN},width:{string:vN},__type__:{object:bN}},xN={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:["color","#2B7CE9"],background:["color","#97C2FC"],highlight:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]},hover:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]}},opacity:[0,0,1,.1],fixed:{x:!1,y:!1},font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[0,0,50,1],strokeColor:["color","#ffffff"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:["ellipse","box","circle","database","diamond","dot","square","star","text","triangle","triangleDown","hexagon"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"}},endPointOffset:{from:[0,-10,10,1],to:[0,-10,10,1]},arrowStrikethrough:!0,color:{color:["color","#848484"],highlight:["color","#848484"],hover:["color","#848484"],inherit:["from","to","both",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[2,0,50,1],strokeColor:["color","#ffffff"],align:["horizontal","top","middle","bottom"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],selfReference:{size:[20,0,200,1],angle:[Math.PI/2,-6*Math.PI,6*Math.PI,Math.PI/8],renderBehindTheNode:!0},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"],forceDirection:["horizontal","vertical","none"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:["UD","DU","LR","RL"],sortMethod:["hubsize","directed"],shakeTowards:["leaves","roots"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0,autoFocus:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0,zoomSpeed:[1,.1,2,.1]},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{theta:[.5,.1,1,.05],gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{theta:[.5,.1,1,.05],gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:["barnesHut","forceAtlas2Based","repulsion","hierarchicalRepulsion"],timestep:[.5,.01,1,.01],wind:{x:[0,-10,10,.1],y:[0,-10,10,.1]}}},EN=function(t,e,i){var n;return!(!rv(t).call(t,"physics")||!rv(n=xN.physics.solver).call(n,e)||i.physics.solver===e||"wind"===e)},ON=Object.freeze({__proto__:null,allOptions:_N,configuratorHideOption:EN,configureOptions:xN}),CN=function(){function t(){ph(this,t)}return xu(t,[{key:"getDistances",value:function(t,e,i){for(var n={},o=t.edges,r=0;r2&&void 0!==arguments[2]&&arguments[2],n=this.distanceSolver.getDistances(this.body,t,e);this._createL_matrix(n),this._createK_matrix(n),this._createE_matrix();for(var o=0,r=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),s=1e9,a=0,h=0,l=0,d=0,c=0;s>.01&&o1&&c<5;){c+=1,this._moveNode(a,h,l);var f=pf(this._getEnergy(a),3);d=f[0],h=f[1],l=f[2]}}}},{key:"_getHighestEnergyNode",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=0,o=e[0],r=0,s=0,a=0;a0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(n)):(n=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(n)),e[t].used.push(n),n}Kn(TN.prototype),TN.prototype.setOptions=function(t){var e=this;if(null===t&&(t=void 0),void 0!==t){!0===ew.validate(t,_N)&&console.error("%cErrors have been found in the supplied options object.",tw);if(pb(["locale","locales","clickToUse"],this.options,t),void 0!==t.locale&&(t.locale=function(t,e){try{var i=pf(e.split(/[-_ /]/,2),2),n=i[0],o=i[1],r=null!=n?n.toLowerCase():null,s=null!=o?o.toUpperCase():null;if(r&&s){var a,h=r+"-"+s;if(Object.prototype.hasOwnProperty.call(t,h))return h;console.warn(_f(a="Unknown variant ".concat(s," of language ")).call(a,r,"."))}if(r){var l=r;if(Object.prototype.hasOwnProperty.call(t,l))return l;console.warn("Unknown language ".concat(r))}return console.warn("Unknown locale ".concat(e,", falling back to English.")),"en"}catch(t){return console.error(t),console.warn("Unexpected error while normalizing locale ".concat(e,", falling back to English.")),"en"}}(t.locales||this.options.locales,t.locale)),t=this.layoutEngine.setOptions(t.layout,t),this.canvas.setOptions(t),this.groups.setOptions(t.groups),this.nodesHandler.setOptions(t.nodes),this.edgesHandler.setOptions(t.edges),this.physics.setOptions(t.physics),this.manipulation.setOptions(t.manipulation,t,this.options),this.interactionHandler.setOptions(t.interaction),this.renderer.setOptions(t.interaction),this.selectionHandler.setOptions(t.interaction),void 0!==t.groups&&this.body.emitter.emit("refreshNodes"),"configure"in t&&(this.configurator||(this.configurator=new Zb(this,this.body.container,xN,this.canvas.pixelRatio,EN)),this.configurator.setOptions(t.configure)),this.configurator&&!0===this.configurator.options.enabled){var i={nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};gb(i.nodes,this.nodesHandler.options),gb(i.edges,this.edgesHandler.options),gb(i.layout,this.layoutEngine.options),gb(i.interaction,this.selectionHandler.options),gb(i.interaction,this.renderer.options),gb(i.interaction,this.interactionHandler.options),gb(i.manipulation,this.manipulation.options),gb(i.physics,this.physics.options),gb(i.global,this.canvas.options),gb(i.global,this.options),this.configurator.setModuleOptions(i)}void 0!==t.clickToUse?!0===t.clickToUse?void 0===this.activator&&(this.activator=new Kb(this.canvas.frame),this.activator.on("change",(function(){e.body.emitter.emit("activate")}))):(void 0!==this.activator&&(this.activator.destroy(),delete this.activator),this.body.emitter.emit("activate")):this.body.emitter.emit("activate"),this.canvas.setSize(),this.body.emitter.emit("startSimulation")}},TN.prototype._updateVisibleIndices=function(){var t=this.body.nodes,e=this.body.edges;for(var i in this.body.nodeIndices=[],this.body.edgeIndices=[],t)Object.prototype.hasOwnProperty.call(t,i)&&(this.clustering._isClusteredNode(i)||!1!==t[i].options.hidden||this.body.nodeIndices.push(t[i].id));for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var o=e[n],r=t[o.fromId],s=t[o.toId],a=void 0!==r&&void 0!==s;!this.clustering._isClusteredEdge(n)&&!1===o.options.hidden&&a&&!1===r.options.hidden&&!1===s.options.hidden&&this.body.edgeIndices.push(o.id)}},TN.prototype.bindEventListeners=function(){var t=this;this.body.emitter.on("_dataChanged",(function(){t.edgesHandler._updateState(),t.body.emitter.emit("_dataUpdated")})),this.body.emitter.on("_dataUpdated",(function(){t.clustering._updateState(),t._updateVisibleIndices(),t._updateValueRange(t.body.nodes),t._updateValueRange(t.body.edges),t.body.emitter.emit("startSimulation"),t.body.emitter.emit("_requestRedraw")}))},TN.prototype.setData=function(t){if(this.body.emitter.emit("resetPhysics"),this.body.emitter.emit("_resetData"),this.selectionHandler.unselectAll(),t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter "dot" or parameter pair "nodes" and "edges", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){console.warn("The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);");var e=Dw(t.dot);this.setData(e)}else if(t&&t.gephi){console.warn("The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);");var i=Bw(t.gephi);this.setData(i)}else this.nodesHandler.setData(t&&t.nodes,!0),this.edgesHandler.setData(t&&t.edges,!0),this.body.emitter.emit("_dataChanged"),this.body.emitter.emit("_dataLoaded"),this.body.emitter.emit("initPhysics")},TN.prototype.destroy=function(){for(var t in this.body.emitter.emit("destroy"),this.body.emitter.off(),this.off(),delete this.groups,delete this.canvas,delete this.selectionHandler,delete this.interactionHandler,delete this.view,delete this.renderer,delete this.physics,delete this.layoutEngine,delete this.clustering,delete this.manipulation,delete this.nodesHandler,delete this.edgesHandler,delete this.configurator,delete this.images,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,t)&&delete this.body.nodes[t];for(var e in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,e)&&delete this.body.edges[e];hb(this.body.container)},TN.prototype._updateValueRange=function(t){var e,i=void 0,n=void 0,o=0;for(e in t)if(Object.prototype.hasOwnProperty.call(t,e)){var r=t[e].getValue();void 0!==r&&(i=void 0===i?r:Math.min(r,i),n=void 0===n?r:Math.max(r,n),o+=r)}if(void 0!==i&&void 0!==n)for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&t[e].setValueRange(i,n,o)},TN.prototype.isActive=function(){return!this.activator||this.activator.active},TN.prototype.setSize=function(){return this.canvas.setSize.apply(this.canvas,arguments)},TN.prototype.canvasToDOM=function(){return this.canvas.canvasToDOM.apply(this.canvas,arguments)},TN.prototype.DOMtoCanvas=function(){return this.canvas.DOMtoCanvas.apply(this.canvas,arguments)},TN.prototype.findNode=function(){return this.clustering.findNode.apply(this.clustering,arguments)},TN.prototype.isCluster=function(){return this.clustering.isCluster.apply(this.clustering,arguments)},TN.prototype.openCluster=function(){return this.clustering.openCluster.apply(this.clustering,arguments)},TN.prototype.cluster=function(){return this.clustering.cluster.apply(this.clustering,arguments)},TN.prototype.getNodesInCluster=function(){return this.clustering.getNodesInCluster.apply(this.clustering,arguments)},TN.prototype.clusterByConnection=function(){return this.clustering.clusterByConnection.apply(this.clustering,arguments)},TN.prototype.clusterByHubsize=function(){return this.clustering.clusterByHubsize.apply(this.clustering,arguments)},TN.prototype.updateClusteredNode=function(){return this.clustering.updateClusteredNode.apply(this.clustering,arguments)},TN.prototype.getClusteredEdges=function(){return this.clustering.getClusteredEdges.apply(this.clustering,arguments)},TN.prototype.getBaseEdge=function(){return this.clustering.getBaseEdge.apply(this.clustering,arguments)},TN.prototype.getBaseEdges=function(){return this.clustering.getBaseEdges.apply(this.clustering,arguments)},TN.prototype.updateEdge=function(){return this.clustering.updateEdge.apply(this.clustering,arguments)},TN.prototype.clusterOutliers=function(){return this.clustering.clusterOutliers.apply(this.clustering,arguments)},TN.prototype.getSeed=function(){return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments)},TN.prototype.enableEditMode=function(){return this.manipulation.enableEditMode.apply(this.manipulation,arguments)},TN.prototype.disableEditMode=function(){return this.manipulation.disableEditMode.apply(this.manipulation,arguments)},TN.prototype.addNodeMode=function(){return this.manipulation.addNodeMode.apply(this.manipulation,arguments)},TN.prototype.editNode=function(){return this.manipulation.editNode.apply(this.manipulation,arguments)},TN.prototype.editNodeMode=function(){return console.warn("Deprecated: Please use editNode instead of editNodeMode."),this.manipulation.editNode.apply(this.manipulation,arguments)},TN.prototype.addEdgeMode=function(){return this.manipulation.addEdgeMode.apply(this.manipulation,arguments)},TN.prototype.editEdgeMode=function(){return this.manipulation.editEdgeMode.apply(this.manipulation,arguments)},TN.prototype.deleteSelected=function(){return this.manipulation.deleteSelected.apply(this.manipulation,arguments)},TN.prototype.getPositions=function(){return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments)},TN.prototype.getPosition=function(){return this.nodesHandler.getPosition.apply(this.nodesHandler,arguments)},TN.prototype.storePositions=function(){return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments)},TN.prototype.moveNode=function(){return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments)},TN.prototype.getBoundingBox=function(){return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments)},TN.prototype.getConnectedNodes=function(t){return void 0!==this.body.nodes[t]?this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments):this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments)},TN.prototype.getConnectedEdges=function(){return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments)},TN.prototype.startSimulation=function(){return this.physics.startSimulation.apply(this.physics,arguments)},TN.prototype.stopSimulation=function(){return this.physics.stopSimulation.apply(this.physics,arguments)},TN.prototype.stabilize=function(){return this.physics.stabilize.apply(this.physics,arguments)},TN.prototype.getSelection=function(){return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments)},TN.prototype.setSelection=function(){return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments)},TN.prototype.getSelectedNodes=function(){return this.selectionHandler.getSelectedNodeIds.apply(this.selectionHandler,arguments)},TN.prototype.getSelectedEdges=function(){return this.selectionHandler.getSelectedEdgeIds.apply(this.selectionHandler,arguments)},TN.prototype.getNodeAt=function(){var t=this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},TN.prototype.getEdgeAt=function(){var t=this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},TN.prototype.selectNodes=function(){return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments)},TN.prototype.selectEdges=function(){return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments)},TN.prototype.unselectAll=function(){this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments),this.selectionHandler.commitWithoutEmitting.apply(this.selectionHandler),this.redraw()},TN.prototype.redraw=function(){return this.renderer.redraw.apply(this.renderer,arguments)},TN.prototype.getScale=function(){return this.view.getScale.apply(this.view,arguments)},TN.prototype.getViewPosition=function(){return this.view.getViewPosition.apply(this.view,arguments)},TN.prototype.fit=function(){return this.view.fit.apply(this.view,arguments)},TN.prototype.moveTo=function(){return this.view.moveTo.apply(this.view,arguments)},TN.prototype.focus=function(){return this.view.focus.apply(this.view,arguments)},TN.prototype.releaseNode=function(){return this.view.releaseNode.apply(this.view,arguments)},TN.prototype.getOptionsFromConfigurator=function(){var t={};return this.configurator&&(t=this.configurator.getOptions.apply(this.configurator)),t};var IN=Object.freeze({__proto__:null,cleanupElements:PN,drawBar:function(t,e,i,n,o,r,s,a){if(0!=n){n<0&&(e-=n*=-1);var h=DN("rect",r,s);h.setAttributeNS(null,"x",t-.5*i),h.setAttributeNS(null,"y",e),h.setAttributeNS(null,"width",i),h.setAttributeNS(null,"height",n),h.setAttributeNS(null,"class",o),a&&h.setAttributeNS(null,"style",a)}},drawPoint:function(t,e,i,n,o,r){var s;if("circle"==i.style?((s=DN("circle",n,o)).setAttributeNS(null,"cx",t),s.setAttributeNS(null,"cy",e),s.setAttributeNS(null,"r",.5*i.size)):((s=DN("rect",n,o)).setAttributeNS(null,"x",t-.5*i.size),s.setAttributeNS(null,"y",e-.5*i.size),s.setAttributeNS(null,"width",i.size),s.setAttributeNS(null,"height",i.size)),void 0!==i.styles&&s.setAttributeNS(null,"style",i.styles),s.setAttributeNS(null,"class",i.className+" vis-point"),r){var a=DN("text",n,o);r.xOffset&&(t+=r.xOffset),r.yOffset&&(e+=r.yOffset),r.content&&(a.textContent=r.content),r.className&&a.setAttributeNS(null,"class",r.className+" vis-label"),a.setAttributeNS(null,"x",t),a.setAttributeNS(null,"y",e)}return s},getDOMElement:function(t,e,i,n){var o;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElement(t),void 0!==n?i.insertBefore(o,n):i.appendChild(o)):(o=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==n?i.insertBefore(o,n):i.appendChild(o)),e[t].used.push(o),o},getSVGElement:DN,prepareElements:MN,resetElements:function(t){MN(t),PN(t),MN(t)}}),BN={Images:Aw,dotparser:Iw,gephiParser:Nw,allOptions:ON,convertDot:Dw,convertGephi:Bw},NN=Object.freeze({__proto__:null,DOMutil:IN,DataSet:GM,DataView:KM,Hammer:Qb,Network:TN,Queue:UM,data:QM,keycharm:NI,network:BN,util:iw});t.DOMutil=IN,t.DataSet=GM,t.DataView=KM,t.Hammer=Qb,t.Network=TN,t.Queue=UM,t.data=QM,t.default=NN,t.keycharm=NI,t.network=BN,t.util=iw,Object.defineProperty(t,"__esModule",{value:!0})})); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).vis=t.vis||{})}(this,(function(t){"use strict";var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function i(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var o=function(t){return t&&t.Math===Math&&t},s=o("object"==typeof globalThis&&globalThis)||o("object"==typeof window&&window)||o("object"==typeof self&&self)||o("object"==typeof e&&e)||function(){return this}()||e||Function("return this")(),n=function(t){try{return!!t()}catch(t){return!0}},r=!n((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")})),a=r,h=Function.prototype,d=h.apply,l=h.call,c="object"==typeof Reflect&&Reflect.apply||(a?l.bind(d):function(){return l.apply(d,arguments)}),u=r,p=Function.prototype,f=p.call,g=u&&p.bind.bind(f,f),m=u?g:function(t){return function(){return f.apply(t,arguments)}},y=m,b=y({}.toString),v=y("".slice),w=function(t){return v(b(t),8,-1)},_=w,x=m,E=function(t){if("Function"===_(t))return x(t)},O="object"==typeof document&&document.all,C={all:O,IS_HTMLDDA:void 0===O&&void 0!==O},k=C.all,S=C.IS_HTMLDDA?function(t){return"function"==typeof t||t===k}:function(t){return"function"==typeof t},T={},D=!n((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]})),M=r,I=Function.prototype.call,P=M?I.bind(I):function(){return I.apply(I,arguments)},B={},N={}.propertyIsEnumerable,z=Object.getOwnPropertyDescriptor,F=z&&!N.call({1:2},1);B.f=F?function(t){var e=z(this,t);return!!e&&e.enumerable}:N;var A,j,R=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},L=n,H=w,W=Object,V=m("".split),q=L((function(){return!W("z").propertyIsEnumerable(0)}))?function(t){return"String"===H(t)?V(t,""):W(t)}:W,U=function(t){return null==t},Y=U,X=TypeError,G=function(t){if(Y(t))throw new X("Can't call method on "+t);return t},K=q,Z=G,Q=function(t){return K(Z(t))},$=S,J=C.all,tt=C.IS_HTMLDDA?function(t){return"object"==typeof t?null!==t:$(t)||t===J}:function(t){return"object"==typeof t?null!==t:$(t)},et={},it=et,ot=s,st=S,nt=function(t){return st(t)?t:void 0},rt=function(t,e){return arguments.length<2?nt(it[t])||nt(ot[t]):it[t]&&it[t][e]||ot[t]&&ot[t][e]},at=m({}.isPrototypeOf),ht="undefined"!=typeof navigator&&String(navigator.userAgent)||"",dt=s,lt=ht,ct=dt.process,ut=dt.Deno,pt=ct&&ct.versions||ut&&ut.version,ft=pt&&pt.v8;ft&&(j=(A=ft.split("."))[0]>0&&A[0]<4?1:+(A[0]+A[1])),!j&<&&(!(A=lt.match(/Edge\/(\d+)/))||A[1]>=74)&&(A=lt.match(/Chrome\/(\d+)/))&&(j=+A[1]);var gt=j,mt=gt,yt=n,bt=s.String,vt=!!Object.getOwnPropertySymbols&&!yt((function(){var t=Symbol("symbol detection");return!bt(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&mt&&mt<41})),wt=vt&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,_t=rt,xt=S,Et=at,Ot=Object,Ct=wt?function(t){return"symbol"==typeof t}:function(t){var e=_t("Symbol");return xt(e)&&Et(e.prototype,Ot(t))},kt=String,St=function(t){try{return kt(t)}catch(t){return"Object"}},Tt=S,Dt=St,Mt=TypeError,It=function(t){if(Tt(t))return t;throw new Mt(Dt(t)+" is not a function")},Pt=It,Bt=U,Nt=function(t,e){var i=t[e];return Bt(i)?void 0:Pt(i)},zt=P,Ft=S,At=tt,jt=TypeError,Rt={exports:{}},Lt=s,Ht=Object.defineProperty,Wt=function(t,e){try{Ht(Lt,t,{value:e,configurable:!0,writable:!0})}catch(i){Lt[t]=e}return e},Vt="__core-js_shared__",qt=s[Vt]||Wt(Vt,{}),Ut=qt;(Rt.exports=function(t,e){return Ut[t]||(Ut[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.33.0",mode:"pure",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.0/LICENSE",source:"https://github.com/zloirock/core-js"});var Yt=Rt.exports,Xt=G,Gt=Object,Kt=function(t){return Gt(Xt(t))},Zt=Kt,Qt=m({}.hasOwnProperty),$t=Object.hasOwn||function(t,e){return Qt(Zt(t),e)},Jt=m,te=0,ee=Math.random(),ie=Jt(1..toString),oe=function(t){return"Symbol("+(void 0===t?"":t)+")_"+ie(++te+ee,36)},se=Yt,ne=$t,re=oe,ae=vt,he=wt,de=s.Symbol,le=se("wks"),ce=he?de.for||de:de&&de.withoutSetter||re,ue=function(t){return ne(le,t)||(le[t]=ae&&ne(de,t)?de[t]:ce("Symbol."+t)),le[t]},pe=P,fe=tt,ge=Ct,me=Nt,ye=function(t,e){var i,o;if("string"===e&&Ft(i=t.toString)&&!At(o=zt(i,t)))return o;if(Ft(i=t.valueOf)&&!At(o=zt(i,t)))return o;if("string"!==e&&Ft(i=t.toString)&&!At(o=zt(i,t)))return o;throw new jt("Can't convert object to primitive value")},be=TypeError,ve=ue("toPrimitive"),we=function(t,e){if(!fe(t)||ge(t))return t;var i,o=me(t,ve);if(o){if(void 0===e&&(e="default"),i=pe(o,t,e),!fe(i)||ge(i))return i;throw new be("Can't convert object to primitive value")}return void 0===e&&(e="number"),ye(t,e)},_e=Ct,xe=function(t){var e=we(t,"string");return _e(e)?e:e+""},Ee=tt,Oe=s.document,Ce=Ee(Oe)&&Ee(Oe.createElement),ke=function(t){return Ce?Oe.createElement(t):{}},Se=ke,Te=!D&&!n((function(){return 7!==Object.defineProperty(Se("div"),"a",{get:function(){return 7}}).a})),De=D,Me=P,Ie=B,Pe=R,Be=Q,Ne=xe,ze=$t,Fe=Te,Ae=Object.getOwnPropertyDescriptor;T.f=De?Ae:function(t,e){if(t=Be(t),e=Ne(e),Fe)try{return Ae(t,e)}catch(t){}if(ze(t,e))return Pe(!Me(Ie.f,t,e),t[e])};var je=n,Re=S,Le=/#|\.prototype\./,He=function(t,e){var i=Ve[We(t)];return i===Ue||i!==qe&&(Re(e)?je(e):!!e)},We=He.normalize=function(t){return String(t).replace(Le,".").toLowerCase()},Ve=He.data={},qe=He.NATIVE="N",Ue=He.POLYFILL="P",Ye=He,Xe=It,Ge=r,Ke=E(E.bind),Ze=function(t,e){return Xe(t),void 0===e?t:Ge?Ke(t,e):function(){return t.apply(e,arguments)}},Qe={},$e=D&&n((function(){return 42!==Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),Je=tt,ti=String,ei=TypeError,ii=function(t){if(Je(t))return t;throw new ei(ti(t)+" is not an object")},oi=D,si=Te,ni=$e,ri=ii,ai=xe,hi=TypeError,di=Object.defineProperty,li=Object.getOwnPropertyDescriptor,ci="enumerable",ui="configurable",pi="writable";Qe.f=oi?ni?function(t,e,i){if(ri(t),e=ai(e),ri(i),"function"==typeof t&&"prototype"===e&&"value"in i&&pi in i&&!i[pi]){var o=li(t,e);o&&o[pi]&&(t[e]=i.value,i={configurable:ui in i?i[ui]:o[ui],enumerable:ci in i?i[ci]:o[ci],writable:!1})}return di(t,e,i)}:di:function(t,e,i){if(ri(t),e=ai(e),ri(i),si)try{return di(t,e,i)}catch(t){}if("get"in i||"set"in i)throw new hi("Accessors not supported");return"value"in i&&(t[e]=i.value),t};var fi=Qe,gi=R,mi=D?function(t,e,i){return fi.f(t,e,gi(1,i))}:function(t,e,i){return t[e]=i,t},yi=s,bi=c,vi=E,wi=S,_i=T.f,xi=Ye,Ei=et,Oi=Ze,Ci=mi,ki=$t,Si=function(t){var e=function(i,o,s){if(this instanceof e){switch(arguments.length){case 0:return new t;case 1:return new t(i);case 2:return new t(i,o)}return new t(i,o,s)}return bi(t,this,arguments)};return e.prototype=t.prototype,e},Ti=function(t,e){var i,o,s,n,r,a,h,d,l,c=t.target,u=t.global,p=t.stat,f=t.proto,g=u?yi:p?yi[c]:(yi[c]||{}).prototype,m=u?Ei:Ei[c]||Ci(Ei,c,{})[c],y=m.prototype;for(n in e)o=!(i=xi(u?n:c+(p?".":"#")+n,t.forced))&&g&&ki(g,n),a=m[n],o&&(h=t.dontCallGetSet?(l=_i(g,n))&&l.value:g[n]),r=o&&h?h:e[n],o&&typeof a==typeof r||(d=t.bind&&o?Oi(r,yi):t.wrap&&o?Si(r):f&&wi(r)?vi(r):r,(t.sham||r&&r.sham||a&&a.sham)&&Ci(d,"sham",!0),Ci(m,n,d),f&&(ki(Ei,s=c+"Prototype")||Ci(Ei,s,{}),Ci(Ei[s],n,r),t.real&&y&&(i||!y[n])&&Ci(y,n,r)))},Di=Math.ceil,Mi=Math.floor,Ii=Math.trunc||function(t){var e=+t;return(e>0?Mi:Di)(e)},Pi=function(t){var e=+t;return e!=e||0===e?0:Ii(e)},Bi=Pi,Ni=Math.max,zi=Math.min,Fi=function(t,e){var i=Bi(t);return i<0?Ni(i+e,0):zi(i,e)},Ai=Pi,ji=Math.min,Ri=function(t){return t>0?ji(Ai(t),9007199254740991):0},Li=function(t){return Ri(t.length)},Hi=Q,Wi=Fi,Vi=Li,qi=function(t){return function(e,i,o){var s,n=Hi(e),r=Vi(n),a=Wi(o,r);if(t&&i!=i){for(;r>a;)if((s=n[a++])!=s)return!0}else for(;r>a;a++)if((t||a in n)&&n[a]===i)return t||a||0;return!t&&-1}},Ui={includes:qi(!0),indexOf:qi(!1)},Yi={},Xi=$t,Gi=Q,Ki=Ui.indexOf,Zi=Yi,Qi=m([].push),$i=function(t,e){var i,o=Gi(t),s=0,n=[];for(i in o)!Xi(Zi,i)&&Xi(o,i)&&Qi(n,i);for(;e.length>s;)Xi(o,i=e[s++])&&(~Ki(n,i)||Qi(n,i));return n},Ji=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],to=$i,eo=Ji,io=Object.keys||function(t){return to(t,eo)},oo={};oo.f=Object.getOwnPropertySymbols;var so=D,no=m,ro=P,ao=n,ho=io,lo=oo,co=B,uo=Kt,po=q,fo=Object.assign,go=Object.defineProperty,mo=no([].concat),yo=!fo||ao((function(){if(so&&1!==fo({b:1},fo(go({},"a",{enumerable:!0,get:function(){go(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},i=Symbol("assign detection"),o="abcdefghijklmnopqrst";return t[i]=7,o.split("").forEach((function(t){e[t]=t})),7!==fo({},t)[i]||ho(fo({},e)).join("")!==o}))?function(t,e){for(var i=uo(t),o=arguments.length,s=1,n=lo.f,r=co.f;o>s;)for(var a,h=po(arguments[s++]),d=n?mo(ho(h),n(h)):ho(h),l=d.length,c=0;l>c;)a=d[c++],so&&!ro(r,h,a)||(i[a]=h[a]);return i}:fo,bo=yo;Ti({target:"Object",stat:!0,arity:2,forced:Object.assign!==bo},{assign:bo});var vo=i(et.Object.assign),wo=m([].slice),_o=m,xo=It,Eo=tt,Oo=$t,Co=wo,ko=r,So=Function,To=_o([].concat),Do=_o([].join),Mo={},Io=ko?So.bind:function(t){var e=xo(this),i=e.prototype,o=Co(arguments,1),s=function(){var i=To(o,Co(arguments));return this instanceof s?function(t,e,i){if(!Oo(Mo,e)){for(var o=[],s=0;s=.1;)f=+n[c++%r],f>l&&(f=l),p=Math.sqrt(f*f/(1+d*d)),p=a<0?-p:p,e+=p,i+=d*p,!0===u?t.lineTo(e,i):t.moveTo(e,i),l-=f,u=!u}const Yo={circle:Ho,dashedLine:Uo,database:qo,diamond:function(t,e,i,o){t.beginPath(),t.lineTo(e,i+o),t.lineTo(e+o,i),t.lineTo(e,i-o),t.lineTo(e-o,i),t.closePath()},ellipse:Vo,ellipse_vis:Vo,hexagon:function(t,e,i,o){t.beginPath();const s=2*Math.PI/6;t.moveTo(e+o,i);for(let n=1;n<6;n++)t.lineTo(e+o*Math.cos(s*n),i+o*Math.sin(s*n));t.closePath()},roundRect:Wo,square:function(t,e,i,o){t.beginPath(),t.rect(e-o,i-o,2*o,2*o),t.closePath()},star:function(t,e,i,o){t.beginPath(),i+=.1*(o*=.82);for(let s=0;s<10;s++){const n=s%2==0?1.3*o:.5*o;t.lineTo(e+n*Math.sin(2*s*Math.PI/10),i-n*Math.cos(2*s*Math.PI/10))}t.closePath()},triangle:function(t,e,i,o){t.beginPath(),i+=.275*(o*=1.15);const s=2*o,n=s/2,r=Math.sqrt(3)/6*s,a=Math.sqrt(s*s-n*n);t.moveTo(e,i-(a-r)),t.lineTo(e+n,i+r),t.lineTo(e-n,i+r),t.lineTo(e,i-(a-r)),t.closePath()},triangleDown:function(t,e,i,o){t.beginPath(),i-=.275*(o*=1.15);const s=2*o,n=s/2,r=Math.sqrt(3)/6*s,a=Math.sqrt(s*s-n*n);t.moveTo(e,i+(a-r)),t.lineTo(e+n,i-r),t.lineTo(e-n,i-r),t.lineTo(e,i+(a-r)),t.closePath()}};var Xo={exports:{}};!function(t){function e(t){if(t)return function(t){for(var i in e.prototype)t[i]=e.prototype[i];return t}(t)}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},e.prototype.once=function(t,e){function i(){this.off(t,i),e.apply(this,arguments)}return i.fn=e,this.on(t,i),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i,o=this._callbacks["$"+t];if(!o)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var s=0;s9007199254740991)throw Qo("Maximum allowed index exceeded");return t},Jo=xe,ts=Qe,es=R,is=function(t,e,i){var o=Jo(e);o in t?ts.f(t,o,es(0,i)):t[o]=i},os={};os[ue("toStringTag")]="z";var ss="[object z]"===String(os),ns=ss,rs=S,as=w,hs=ue("toStringTag"),ds=Object,ls="Arguments"===as(function(){return arguments}()),cs=ns?as:function(t){var e,i,o;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(i=function(t,e){try{return t[e]}catch(t){}}(e=ds(t),hs))?i:ls?as(e):"Object"===(o=as(e))&&rs(e.callee)?"Arguments":o},us=S,ps=qt,fs=m(Function.toString);us(ps.inspectSource)||(ps.inspectSource=function(t){return fs(t)});var gs=ps.inspectSource,ms=m,ys=n,bs=S,vs=cs,ws=gs,_s=function(){},xs=[],Es=rt("Reflect","construct"),Os=/^\s*(?:class|function)\b/,Cs=ms(Os.exec),ks=!Os.test(_s),Ss=function(t){if(!bs(t))return!1;try{return Es(_s,xs,t),!0}catch(t){return!1}},Ts=function(t){if(!bs(t))return!1;switch(vs(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return ks||!!Cs(Os,ws(t))}catch(t){return!0}};Ts.sham=!0;var Ds=!Es||ys((function(){var t;return Ss(Ss.call)||!Ss(Object)||!Ss((function(){t=!0}))||t}))?Ts:Ss,Ms=Zo,Is=Ds,Ps=tt,Bs=ue("species"),Ns=Array,zs=function(t){var e;return Ms(t)&&(e=t.constructor,(Is(e)&&(e===Ns||Ms(e.prototype))||Ps(e)&&null===(e=e[Bs]))&&(e=void 0)),void 0===e?Ns:e},Fs=function(t,e){return new(zs(t))(0===e?0:e)},As=n,js=gt,Rs=ue("species"),Ls=function(t){return js>=51||!As((function(){var e=[];return(e.constructor={})[Rs]=function(){return{foo:1}},1!==e[t](Boolean).foo}))},Hs=Ti,Ws=n,Vs=Zo,qs=tt,Us=Kt,Ys=Li,Xs=$o,Gs=is,Ks=Fs,Zs=Ls,Qs=gt,$s=ue("isConcatSpreadable"),Js=Qs>=51||!Ws((function(){var t=[];return t[$s]=!1,t.concat()[0]!==t})),tn=function(t){if(!qs(t))return!1;var e=t[$s];return void 0!==e?!!e:Vs(t)};Hs({target:"Array",proto:!0,arity:1,forced:!Js||!Zs("concat")},{concat:function(t){var e,i,o,s,n,r=Us(this),a=Ks(r,0),h=0;for(e=-1,o=arguments.length;er;)hn.f(t,i=s[r++],o[i]);return t};var un,pn=rt("document","documentElement"),fn=oe,gn=Yt("keys"),mn=function(t){return gn[t]||(gn[t]=fn(t))},yn=ii,bn=nn,vn=Ji,wn=Yi,_n=pn,xn=ke,En="prototype",On="script",Cn=mn("IE_PROTO"),kn=function(){},Sn=function(t){return"<"+On+">"+t+""},Tn=function(t){t.write(Sn("")),t.close();var e=t.parentWindow.Object;return t=null,e},Dn=function(){try{un=new ActiveXObject("htmlfile")}catch(t){}var t,e,i;Dn="undefined"!=typeof document?document.domain&&un?Tn(un):(e=xn("iframe"),i="java"+On+":",e.style.display="none",_n.appendChild(e),e.src=String(i),(t=e.contentWindow.document).open(),t.write(Sn("document.F=Object")),t.close(),t.F):Tn(un);for(var o=vn.length;o--;)delete Dn[En][vn[o]];return Dn()};wn[Cn]=!0;var Mn=Object.create||function(t,e){var i;return null!==t?(kn[En]=yn(t),i=new kn,kn[En]=null,i[Cn]=t):i=Dn(),void 0===e?i:bn.f(i,e)},In={},Pn=$i,Bn=Ji.concat("length","prototype");In.f=Object.getOwnPropertyNames||function(t){return Pn(t,Bn)};var Nn={},zn=Fi,Fn=Li,An=is,jn=Array,Rn=Math.max,Ln=function(t,e,i){for(var o=Fn(t),s=zn(e,o),n=zn(void 0===i?o:i,o),r=jn(Rn(n-s,0)),a=0;sb;b++)if((a||b in g)&&(p=m(u=g[b],b,f),t))if(e)w[b]=p;else if(p)switch(t){case 3:return!0;case 5:return u;case 6:return b;case 2:Wr(w,u)}else switch(t){case 4:return!1;case 7:Wr(w,u)}return n?-1:o||s?s:w}},qr={forEach:Vr(0),map:Vr(1),filter:Vr(2),some:Vr(3),every:Vr(4),find:Vr(5),findIndex:Vr(6),filterReject:Vr(7)},Ur=Ti,Yr=s,Xr=P,Gr=m,Kr=D,Zr=vt,Qr=n,$r=$t,Jr=at,ta=ii,ea=Q,ia=xe,oa=sn,sa=R,na=Mn,ra=io,aa=In,ha=Nn,da=oo,la=T,ca=Qe,ua=nn,pa=B,fa=Xn,ga=Kn,ma=Yt,ya=Yi,ba=oe,va=ue,wa=Zn,_a=nr,xa=lr,Ea=vr,Oa=Fr,Ca=qr.forEach,ka=mn("hidden"),Sa="Symbol",Ta="prototype",Da=Oa.set,Ma=Oa.getterFor(Sa),Ia=Object[Ta],Pa=Yr.Symbol,Ba=Pa&&Pa[Ta],Na=Yr.RangeError,za=Yr.TypeError,Fa=Yr.QObject,Aa=la.f,ja=ca.f,Ra=ha.f,La=pa.f,Ha=Gr([].push),Wa=ma("symbols"),Va=ma("op-symbols"),qa=ma("wks"),Ua=!Fa||!Fa[Ta]||!Fa[Ta].findChild,Ya=function(t,e,i){var o=Aa(Ia,e);o&&delete Ia[e],ja(t,e,i),o&&t!==Ia&&ja(Ia,e,o)},Xa=Kr&&Qr((function(){return 7!==na(ja({},"a",{get:function(){return ja(this,"a",{value:7}).a}})).a}))?Ya:ja,Ga=function(t,e){var i=Wa[t]=na(Ba);return Da(i,{type:Sa,tag:t,description:e}),Kr||(i.description=e),i},Ka=function(t,e,i){t===Ia&&Ka(Va,e,i),ta(t);var o=ia(e);return ta(i),$r(Wa,o)?(i.enumerable?($r(t,ka)&&t[ka][o]&&(t[ka][o]=!1),i=na(i,{enumerable:sa(0,!1)})):($r(t,ka)||ja(t,ka,sa(1,{})),t[ka][o]=!0),Xa(t,o,i)):ja(t,o,i)},Za=function(t,e){ta(t);var i=ea(e),o=ra(i).concat(th(i));return Ca(o,(function(e){Kr&&!Xr(Qa,i,e)||Ka(t,e,i[e])})),t},Qa=function(t){var e=ia(t),i=Xr(La,this,e);return!(this===Ia&&$r(Wa,e)&&!$r(Va,e))&&(!(i||!$r(this,e)||!$r(Wa,e)||$r(this,ka)&&this[ka][e])||i)},$a=function(t,e){var i=ea(t),o=ia(e);if(i!==Ia||!$r(Wa,o)||$r(Va,o)){var s=Aa(i,o);return!s||!$r(Wa,o)||$r(i,ka)&&i[ka][o]||(s.enumerable=!0),s}},Ja=function(t){var e=Ra(ea(t)),i=[];return Ca(e,(function(t){$r(Wa,t)||$r(ya,t)||Ha(i,t)})),i},th=function(t){var e=t===Ia,i=Ra(e?Va:ea(t)),o=[];return Ca(i,(function(t){!$r(Wa,t)||e&&!$r(Ia,t)||Ha(o,Wa[t])})),o};Zr||(Pa=function(){if(Jr(Ba,this))throw new za("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?oa(arguments[0]):void 0,e=ba(t),i=function(t){this===Ia&&Xr(i,Va,t),$r(this,ka)&&$r(this[ka],e)&&(this[ka][e]=!1);var o=sa(1,t);try{Xa(this,e,o)}catch(t){if(!(t instanceof Na))throw t;Ya(this,e,o)}};return Kr&&Ua&&Xa(Ia,e,{configurable:!0,set:i}),Ga(e,t)},fa(Ba=Pa[Ta],"toString",(function(){return Ma(this).tag})),fa(Pa,"withoutSetter",(function(t){return Ga(ba(t),t)})),pa.f=Qa,ca.f=Ka,ua.f=Za,la.f=$a,aa.f=ha.f=Ja,da.f=th,wa.f=function(t){return Ga(va(t),t)},Kr&&ga(Ba,"description",{configurable:!0,get:function(){return Ma(this).description}})),Ur({global:!0,constructor:!0,wrap:!0,forced:!Zr,sham:!Zr},{Symbol:Pa}),Ca(ra(qa),(function(t){_a(t)})),Ur({target:Sa,stat:!0,forced:!Zr},{useSetter:function(){Ua=!0},useSimple:function(){Ua=!1}}),Ur({target:"Object",stat:!0,forced:!Zr,sham:!Kr},{create:function(t,e){return void 0===e?na(t):Za(na(t),e)},defineProperty:Ka,defineProperties:Za,getOwnPropertyDescriptor:$a}),Ur({target:"Object",stat:!0,forced:!Zr},{getOwnPropertyNames:Ja}),xa(),Ea(Pa,Sa),ya[ka]=!0;var eh=vt&&!!Symbol.for&&!!Symbol.keyFor,ih=Ti,oh=rt,sh=$t,nh=sn,rh=Yt,ah=eh,hh=rh("string-to-symbol-registry"),dh=rh("symbol-to-string-registry");ih({target:"Symbol",stat:!0,forced:!ah},{for:function(t){var e=nh(t);if(sh(hh,e))return hh[e];var i=oh("Symbol")(e);return hh[e]=i,dh[i]=e,i}});var lh=Ti,ch=$t,uh=Ct,ph=St,fh=eh,gh=Yt("symbol-to-string-registry");lh({target:"Symbol",stat:!0,forced:!fh},{keyFor:function(t){if(!uh(t))throw new TypeError(ph(t)+" is not a symbol");if(ch(gh,t))return gh[t]}});var mh=Zo,yh=S,bh=w,vh=sn,wh=m([].push),_h=Ti,xh=rt,Eh=c,Oh=P,Ch=m,kh=n,Sh=S,Th=Ct,Dh=wo,Mh=function(t){if(yh(t))return t;if(mh(t)){for(var e=t.length,i=[],o=0;o=e.length)return t.target=void 0,el(void 0,!0);switch(i){case"keys":return el(o,!1);case"values":return el(e[o],!1)}return el([o,e[o]],!1)}),"values"),$d.Arguments=$d.Array;var nl={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},rl=s,al=cs,hl=mi,dl=ed,ll=ue("toStringTag");for(var cl in nl){var ul=rl[cl],pl=ul&&ul.prototype;pl&&al(pl)!==ll&&hl(pl,ll,cl),dl[cl]=dl.Array}var fl=td,gl=i(fl),ml=Ti,yl=Zo,bl=Ds,vl=tt,wl=Fi,_l=Li,xl=Q,El=is,Ol=ue,Cl=wo,kl=Ls("slice"),Sl=Ol("species"),Tl=Array,Dl=Math.max;ml({target:"Array",proto:!0,forced:!kl},{slice:function(t,e){var i,o,s,n=xl(this),r=_l(n),a=wl(t,r),h=wl(void 0===e?r:e,r);if(yl(n)&&(i=n.constructor,(bl(i)&&(i===Tl||yl(i.prototype))||vl(i)&&null===(i=i[Sl]))&&(i=void 0),i===Tl||void 0===i))return Cl(n,a,h);for(o=new(void 0===i?Tl:i)(Dl(h-a,0)),s=0;a1?arguments[1]:void 0)}});var Ul=No("Array").map,Yl=at,Xl=Ul,Gl=Array.prototype,Kl=function(t){var e=t.map;return t===Gl||Yl(Gl,t)&&e===Gl.map?Xl:e},Zl=i(Kl),Ql=Kt,$l=io;Ti({target:"Object",stat:!0,forced:n((function(){$l(1)}))},{keys:function(t){return $l(Ql(t))}});var Jl=i(et.Object.keys),tc=Ti,ec=Date,ic=m(ec.prototype.getTime);tc({target:"Date",stat:!0},{now:function(){return ic(new ec)}});var oc=i(et.Date.now),sc=n,nc=function(t,e){var i=[][t];return!!i&&sc((function(){i.call(null,e||function(){return 1},1)}))},rc=qr.forEach,ac=nc("forEach")?[].forEach:function(t){return rc(this,t,arguments.length>1?arguments[1]:void 0)};Ti({target:"Array",proto:!0,forced:[].forEach!==ac},{forEach:ac});var hc=No("Array").forEach,dc=cs,lc=$t,cc=at,uc=hc,pc=Array.prototype,fc={DOMTokenList:!0,NodeList:!0},gc=function(t){var e=t.forEach;return t===pc||cc(pc,t)&&e===pc.forEach||lc(fc,dc(t))?uc:e},mc=i(gc),yc=Ti,bc=Zo,vc=m([].reverse),wc=[1,2];yc({target:"Array",proto:!0,forced:String(wc)===String(wc.reverse())},{reverse:function(){return bc(this)&&(this.length=this.length),vc(this)}});var _c=No("Array").reverse,xc=at,Ec=_c,Oc=Array.prototype,Cc=function(t){var e=t.reverse;return t===Oc||xc(Oc,t)&&e===Oc.reverse?Ec:e},kc=i(Cc),Sc=D,Tc=Zo,Dc=TypeError,Mc=Object.getOwnPropertyDescriptor,Ic=Sc&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(t){return t instanceof TypeError}}(),Pc=St,Bc=TypeError,Nc=function(t,e){if(!delete t[e])throw new Bc("Cannot delete property "+Pc(e)+" of "+Pc(t))},zc=Ti,Fc=Kt,Ac=Fi,jc=Pi,Rc=Li,Lc=Ic?function(t,e){if(Tc(t)&&!Mc(t,"length").writable)throw new Dc("Cannot set read only .length");return t.length=e}:function(t,e){return t.length=e},Hc=$o,Wc=Fs,Vc=is,qc=Nc,Uc=Ls("splice"),Yc=Math.max,Xc=Math.min;zc({target:"Array",proto:!0,forced:!Uc},{splice:function(t,e){var i,o,s,n,r,a,h=Fc(this),d=Rc(h),l=Ac(t,d),c=arguments.length;for(0===c?i=o=0:1===c?(i=0,o=d-l):(i=c-2,o=Xc(Yc(jc(e),0),d-l)),Hc(d+i-o),s=Wc(h,o),n=0;nd-o+i;n--)qc(h,n-1)}else if(i>o)for(n=d-o;n>l;n--)a=n+i-1,(r=n+o-1)in h?h[a]=h[r]:qc(h,a);for(n=0;n1?arguments[1]:void 0)}});var eu=No("Array").includes,iu=tt,ou=w,su=ue("match"),nu=function(t){var e;return iu(t)&&(void 0!==(e=t[su])?!!e:"RegExp"===ou(t))},ru=TypeError,au=ue("match"),hu=Ti,du=function(t){if(nu(t))throw new ru("The method doesn't accept regular expressions");return t},lu=G,cu=sn,uu=function(t){var e=/./;try{"/./"[t](e)}catch(i){try{return e[au]=!1,"/./"[t](e)}catch(t){}}return!1},pu=m("".indexOf);hu({target:"String",proto:!0,forced:!uu("includes")},{includes:function(t){return!!~pu(cu(lu(this)),cu(du(t)),arguments.length>1?arguments[1]:void 0)}});var fu=No("String").includes,gu=at,mu=eu,yu=fu,bu=Array.prototype,vu=String.prototype,wu=function(t){var e=t.includes;return t===bu||gu(bu,t)&&e===bu.includes?mu:"string"==typeof t||t===vu||gu(vu,t)&&e===vu.includes?yu:e},_u=i(wu),xu=Kt,Eu=md,Ou=hd;Ti({target:"Object",stat:!0,forced:n((function(){Eu(1)})),sham:!Ou},{getPrototypeOf:function(t){return Eu(xu(t))}});var Cu=i(et.Object.getPrototypeOf),ku=No("Array").concat,Su=at,Tu=ku,Du=Array.prototype,Mu=function(t){var e=t.concat;return t===Du||Su(Du,t)&&e===Du.concat?Tu:e},Iu=i(Mu),Pu=qr.filter;Ti({target:"Array",proto:!0,forced:!Ls("filter")},{filter:function(t){return Pu(this,t,arguments.length>1?arguments[1]:void 0)}});var Bu=No("Array").filter,Nu=at,zu=Bu,Fu=Array.prototype,Au=function(t){var e=t.filter;return t===Fu||Nu(Fu,t)&&e===Fu.filter?zu:e},ju=i(Au),Ru=D,Lu=n,Hu=m,Wu=md,Vu=io,qu=Q,Uu=Hu(B.f),Yu=Hu([].push),Xu=Ru&&Lu((function(){var t=Object.create(null);return t[2]=2,!Uu(t,2)})),Gu=function(t){return function(e){for(var i,o=qu(e),s=Vu(o),n=Xu&&null===Wu(o),r=s.length,a=0,h=[];r>a;)i=s[a++],Ru&&!(n?i in o:Uu(o,i))||Yu(h,t?[i,o[i]]:o[i]);return h}},Ku={entries:Gu(!0),values:Gu(!1)},Zu=Ku.values;Ti({target:"Object",stat:!0},{values:function(t){return Zu(t)}});var Qu=i(et.Object.values),$u="\t\n\v\f\r                 \u2028\u2029\ufeff",Ju=G,tp=sn,ep=$u,ip=m("".replace),op=RegExp("^["+ep+"]+"),sp=RegExp("(^|[^"+ep+"])["+ep+"]+$"),np=function(t){return function(e){var i=tp(Ju(e));return 1&t&&(i=ip(i,op,"")),2&t&&(i=ip(i,sp,"$1")),i}},rp={start:np(1),end:np(2),trim:np(3)},ap=s,hp=n,dp=m,lp=sn,cp=rp.trim,up=$u,pp=ap.parseInt,fp=ap.Symbol,gp=fp&&fp.iterator,mp=/^[+-]?0x/i,yp=dp(mp.exec),bp=8!==pp(up+"08")||22!==pp(up+"0x16")||gp&&!hp((function(){pp(Object(gp))}))?function(t,e){var i=cp(lp(t));return pp(i,e>>>0||(yp(mp,i)?16:10))}:pp;Ti({global:!0,forced:parseInt!==bp},{parseInt:bp});var vp=i(et.parseInt),wp=Ti,_p=Ui.indexOf,xp=nc,Ep=E([].indexOf),Op=!!Ep&&1/Ep([1],1,-0)<0;wp({target:"Array",proto:!0,forced:Op||!xp("indexOf")},{indexOf:function(t){var e=arguments.length>1?arguments[1]:void 0;return Op?Ep(this,t,e)||0:_p(this,t,e)}});var Cp=No("Array").indexOf,kp=at,Sp=Cp,Tp=Array.prototype,Dp=function(t){var e=t.indexOf;return t===Tp||kp(Tp,t)&&e===Tp.indexOf?Sp:e},Mp=i(Dp),Ip=Ku.entries;Ti({target:"Object",stat:!0},{entries:function(t){return Ip(t)}});var Pp=i(et.Object.entries);Ti({target:"Object",stat:!0,sham:!D},{create:Mn});var Bp=et.Object,Np=i((function(t,e){return Bp.create(t,e)})),zp=et,Fp=c;zp.JSON||(zp.JSON={stringify:JSON.stringify});var Ap=function(t,e,i){return Fp(zp.JSON.stringify,null,arguments)},jp=i(Ap),Rp="function"==typeof Bun&&Bun&&"string"==typeof Bun.version,Lp=TypeError,Hp=s,Wp=c,Vp=S,qp=Rp,Up=ht,Yp=wo,Xp=function(t,e){if(ti,r=Vp(o)?o:Gp(o),a=n?Yp(arguments,i):[],h=n?function(){Wp(r,this,a)}:r;return e?t(h,s):t(h)}:t},Qp=Ti,$p=s,Jp=Zp($p.setInterval,!0);Qp({global:!0,bind:!0,forced:$p.setInterval!==Jp},{setInterval:Jp});var tf=Ti,ef=s,of=Zp(ef.setTimeout,!0);tf({global:!0,bind:!0,forced:ef.setTimeout!==of},{setTimeout:of});var sf=i(et.setTimeout),nf=Kt,rf=Fi,af=Li,hf=function(t){for(var e=nf(this),i=af(e),o=arguments.length,s=rf(o>1?arguments[1]:void 0,i),n=o>2?arguments[2]:void 0,r=void 0===n?i:rf(n,i);r>s;)e[s++]=t;return e};Ti({target:"Array",proto:!0},{fill:hf});var df,lf=No("Array").fill,cf=at,uf=lf,pf=Array.prototype,ff=function(t){var e=t.fill;return t===pf||cf(pf,t)&&e===pf.fill?uf:e},gf=i(ff);function mf(){return mf=Object.assign||function(t){for(var e=1;e-1}var sg=function(){function t(t,e){this.manager=t,this.set(e)}var e=t.prototype;return e.set=function(t){t===Df&&(t=this.compute()),Tf&&this.manager.element.style&&zf[t]&&(this.manager.element.style[Sf]=t),this.actions=t.toLowerCase().trim()},e.update=function(){this.set(this.manager.options.touchAction)},e.compute=function(){var t=[];return eg(this.manager.recognizers,(function(e){ig(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))})),function(t){if(og(t,Pf))return Pf;var e=og(t,Bf),i=og(t,Nf);return e&&i?Pf:e||i?e?Bf:Nf:og(t,If)?If:Mf}(t.join(" "))},e.preventDefaults=function(t){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)e.preventDefault();else{var o=this.actions,s=og(o,Pf)&&!zf[Pf],n=og(o,Nf)&&!zf[Nf],r=og(o,Bf)&&!zf[Bf];if(s){var a=1===t.pointers.length,h=t.distance<2,d=t.deltaTime<250;if(a&&h&&d)return}if(!r||!n)return s||n&&i&Zf||r&&i&Qf?this.preventSrc(e):void 0}},e.preventSrc=function(t){this.manager.session.prevented=!0,t.preventDefault()},t}();function ng(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}function rg(t){var e=t.length;if(1===e)return{x:Ef(t[0].clientX),y:Ef(t[0].clientY)};for(var i=0,o=0,s=0;s=Of(e)?t<0?Yf:Xf:e<0?Gf:Kf}function cg(t,e,i){return{x:e/t||0,y:i/t||0}}function ug(t,e){var i=t.session,o=e.pointers,s=o.length;i.firstInput||(i.firstInput=ag(e)),s>1&&!i.firstMultiple?i.firstMultiple=ag(e):1===s&&(i.firstMultiple=!1);var n=i.firstInput,r=i.firstMultiple,a=r?r.center:n.center,h=e.center=rg(o);e.timeStamp=Cf(),e.deltaTime=e.timeStamp-n.timeStamp,e.angle=dg(a,h),e.distance=hg(a,h),function(t,e){var i=e.center,o=t.offsetDelta||{},s=t.prevDelta||{},n=t.prevInput||{};e.eventType!==Wf&&n.eventType!==Vf||(s=t.prevDelta={x:n.deltaX||0,y:n.deltaY||0},o=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=s.x+(i.x-o.x),e.deltaY=s.y+(i.y-o.y)}(i,e),e.offsetDirection=lg(e.deltaX,e.deltaY);var d,l,c=cg(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=c.x,e.overallVelocityY=c.y,e.overallVelocity=Of(c.x)>Of(c.y)?c.x:c.y,e.scale=r?(d=r.pointers,hg((l=o)[0],l[1],tg)/hg(d[0],d[1],tg)):1,e.rotation=r?function(t,e){return dg(e[1],e[0],tg)+dg(t[1],t[0],tg)}(r.pointers,o):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,function(t,e){var i,o,s,n,r=t.lastInterval||e,a=e.timeStamp-r.timeStamp;if(e.eventType!==qf&&(a>Hf||void 0===r.velocity)){var h=e.deltaX-r.deltaX,d=e.deltaY-r.deltaY,l=cg(a,h,d);o=l.x,s=l.y,i=Of(l.x)>Of(l.y)?l.x:l.y,n=lg(h,d),t.lastInterval=e}else i=r.velocity,o=r.velocityX,s=r.velocityY,n=r.direction;e.velocity=i,e.velocityX=o,e.velocityY=s,e.direction=n}(i,e);var u,p=t.element,f=e.srcEvent;ng(u=f.composedPath?f.composedPath()[0]:f.path?f.path[0]:f.target,p)&&(p=u),e.target=p}function pg(t,e,i){var o=i.pointers.length,s=i.changedPointers.length,n=e&Wf&&o-s==0,r=e&(Vf|qf)&&o-s==0;i.isFirst=!!n,i.isFinal=!!r,n&&(t.session={}),i.eventType=e,ug(t,i),t.emit("hammer.input",i),t.recognize(i),t.session.prevInput=i}function fg(t){return t.trim().split(/\s+/g)}function gg(t,e,i){eg(fg(e),(function(e){t.addEventListener(e,i,!1)}))}function mg(t,e,i){eg(fg(e),(function(e){t.removeEventListener(e,i,!1)}))}function yg(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||window}var bg=function(){function t(t,e){var i=this;this.manager=t,this.callback=e,this.element=t.element,this.target=t.options.inputTarget,this.domHandler=function(e){ig(t.options.enable,[t])&&i.handler(e)},this.init()}var e=t.prototype;return e.handler=function(){},e.init=function(){this.evEl&&gg(this.element,this.evEl,this.domHandler),this.evTarget&&gg(this.target,this.evTarget,this.domHandler),this.evWin&&gg(yg(this.element),this.evWin,this.domHandler)},e.destroy=function(){this.evEl&&mg(this.element,this.evEl,this.domHandler),this.evTarget&&mg(this.target,this.evTarget,this.domHandler),this.evWin&&mg(yg(this.element),this.evWin,this.domHandler)},t}();function vg(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var o=0;oi[e]})):o.sort()),o}var Sg={touchstart:Wf,touchmove:2,touchend:Vf,touchcancel:qf},Tg=function(t){function e(){var i;return e.prototype.evTarget="touchstart touchmove touchend touchcancel",(i=t.apply(this,arguments)||this).targetIds={},i}return yf(e,t),e.prototype.handler=function(t){var e=Sg[t.type],i=Dg.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Rf,srcEvent:t})},e}(bg);function Dg(t,e){var i,o,s=Cg(t.touches),n=this.targetIds;if(e&(2|Wf)&&1===s.length)return n[s[0].identifier]=!0,[s,s];var r=Cg(t.changedTouches),a=[],h=this.target;if(o=s.filter((function(t){return ng(t.target,h)})),e===Wf)for(i=0;i-1&&o.splice(t,1)}),Pg)}}function Ng(t,e){t&Wf?(this.primaryTouch=e.changedPointers[0].identifier,Bg.call(this,e)):t&(Vf|qf)&&Bg.call(this,e)}function zg(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,o=0;o-1&&this.requireFail.splice(e,1),this},e.hasRequireFailures=function(){return this.requireFail.length>0},e.canRecognizeWith=function(t){return!!this.simultaneous[t.id]},e.emit=function(t){var e=this,i=this.state;function o(i){e.manager.emit(i,t)}i<8&&o(e.options.event+Hg(i)),o(e.options.event),t.additionalEvent&&o(t.additionalEvent),i>=8&&o(e.options.event+Hg(i))},e.tryEmit=function(t){if(this.canEmit())return this.emit(t);this.state=jg},e.canEmit=function(){for(var t=0;te.threshold&&s&e.direction},i.attrTest=function(t){return qg.prototype.attrTest.call(this,t)&&(2&this.state||!(2&this.state)&&this.directionTest(t))},i.emit=function(e){this.pX=e.deltaX,this.pY=e.deltaY;var i=Ug(e.direction);i&&(e.additionalEvent=this.options.event+i),t.prototype.emit.call(this,e)},e}(qg),Xg=function(t){function e(e){return void 0===e&&(e={}),t.call(this,mf({event:"swipe",threshold:10,velocity:.3,direction:Zf|Qf,pointers:1},e))||this}yf(e,t);var i=e.prototype;return i.getTouchAction=function(){return Yg.prototype.getTouchAction.call(this)},i.attrTest=function(e){var i,o=this.options.direction;return o&(Zf|Qf)?i=e.overallVelocity:o&Zf?i=e.overallVelocityX:o&Qf&&(i=e.overallVelocityY),t.prototype.attrTest.call(this,e)&&o&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers===this.options.pointers&&Of(i)>this.options.velocity&&e.eventType&Vf},i.emit=function(t){var e=Ug(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)},e}(qg),Gg=function(t){function e(e){return void 0===e&&(e={}),t.call(this,mf({event:"pinch",threshold:0,pointers:2},e))||this}yf(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Pf]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||2&this.state)},i.emit=function(e){if(1!==e.scale){var i=e.scale<1?"in":"out";e.additionalEvent=this.options.event+i}t.prototype.emit.call(this,e)},e}(qg),Kg=function(t){function e(e){return void 0===e&&(e={}),t.call(this,mf({event:"rotate",threshold:0,pointers:2},e))||this}yf(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Pf]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||2&this.state)},e}(qg),Zg=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,mf({event:"press",pointers:1,time:251,threshold:9},e))||this)._timer=null,i._input=null,i}yf(e,t);var i=e.prototype;return i.getTouchAction=function(){return[Mf]},i.process=function(t){var e=this,i=this.options,o=t.pointers.length===i.pointers,s=t.distancei.time;if(this._input=t,!s||!o||t.eventType&(Vf|qf)&&!n)this.reset();else if(t.eventType&Wf)this.reset(),this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.time);else if(t.eventType&Vf)return 8;return jg},i.reset=function(){clearTimeout(this._timer)},i.emit=function(t){8===this.state&&(t&&t.eventType&Vf?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=Cf(),this.manager.emit(this.options.event,this._input)))},e}(Wg),Qg={domEvents:!1,touchAction:Df,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},$g=[[Kg,{enable:!1}],[Gg,{enable:!1},["rotate"]],[Xg,{direction:Zf}],[Yg,{direction:Zf},["swipe"]],[Vg],[Vg,{event:"doubletap",taps:2},["tap"]],[Zg]];function Jg(t,e){var i,o=t.element;o.style&&(eg(t.options.cssProps,(function(s,n){i=kf(o.style,n),e?(t.oldCssProps[i]=o.style[i],o.style[i]=s):o.style[i]=t.oldCssProps[i]||""})),e||(t.oldCssProps={}))}var tm=function(){function t(t,e){var i,o=this;this.options=wf({},Qg,e||{}),this.options.inputTarget=this.options.inputTarget||t,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=t,this.input=new((i=this).options.inputClass||(Af?Og:jf?Tg:Ff?Fg:Ig))(i,pg),this.touchAction=new sg(this,this.options.touchAction),Jg(this,!0),eg(this.options.recognizers,(function(t){var e=o.add(new t[0](t[1]));t[2]&&e.recognizeWith(t[2]),t[3]&&e.requireFailure(t[3])}),this)}var e=t.prototype;return e.set=function(t){return wf(this.options,t),t.touchAction&&this.touchAction.update(),t.inputTarget&&(this.input.destroy(),this.input.target=t.inputTarget,this.input.init()),this},e.stop=function(t){this.session.stopped=t?2:1},e.recognize=function(t){var e=this.session;if(!e.stopped){var i;this.touchAction.preventDefaults(t);var o=this.recognizers,s=e.curRecognizer;(!s||s&&8&s.state)&&(e.curRecognizer=null,s=null);for(var n=0;n\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",s=window.console&&(window.console.warn||window.console.log);return s&&s.call(window.console,o,i),t.apply(this,arguments)}}var nm=sm((function(t,e,i){for(var o=Object.keys(e),s=0;s1?e-1:0),o=1;o2)return fm(pm(e[0],e[1]),...zl(e).call(e,2));const o=e[0],s=e[1];if(o instanceof Date&&s instanceof Date)return o.setTime(s.getTime()),o;for(const t of Wl(s))Object.prototype.propertyIsEnumerable.call(s,t)&&(s[t]===cm?delete o[t]:null===o[t]||null===s[t]||"object"!=typeof o[t]||"object"!=typeof s[t]||Vl(o[t])||Vl(s[t])?o[t]=gm(s[t]):o[t]=fm(o[t],s[t]));return o}function gm(t){return Vl(t)?Zl(t).call(t,(t=>gm(t))):"object"==typeof t&&null!==t?t instanceof Date?new Date(t.getTime()):fm({},t):t}function mm(t){for(const e of Jl(t))t[e]===cm?delete t[e]:"object"==typeof t[e]&&null!==t[e]&&mm(t[e])}function ym(){for(var t=arguments.length,e=new Array(t),i=0;i>>0,o-=t,o*=t,t=o>>>0,o-=t,t+=4294967296*o}return 2.3283064365386963e-10*(t>>>0)}}();let e=t(" "),i=t(" "),o=t(" ");for(let s=0;s{const t=2091639*e+2.3283064365386963e-10*s;return e=i,i=o,o=t-(s=0|t)};return n.uint32=()=>4294967296*n(),n.fract53=()=>n()+11102230246251565e-32*(2097152*n()|0),n.algorithm="Alea",n.seed=t,n.version="0.9",n}(e.length?e:[oc()])}const bm="undefined"!=typeof window?window.Hammer||lm:function(){return function(){const t=()=>{};return{on:t,off:t,destroy:t,emit:t,get:()=>({set:t})}}()};function vm(t){var e;this._cleanupQueue=[],this.active=!1,this._dom={container:t,overlay:document.createElement("div")},this._dom.overlay.classList.add("vis-overlay"),this._dom.container.appendChild(this._dom.overlay),this._cleanupQueue.push((()=>{this._dom.overlay.parentNode.removeChild(this._dom.overlay)}));const i=bm(this._dom.overlay);i.on("tap",Lo(e=this._onTapOverlay).call(e,this)),this._cleanupQueue.push((()=>{i.destroy()}));const o=["tap","doubletap","press","pinch","pan","panstart","panmove","panend"];mc(o).call(o,(t=>{i.on(t,(t=>{t.srcEvent.stopPropagation()}))})),document&&document.body&&(this._onClick=e=>{(function(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1})(e.target,t)||this.deactivate()},document.body.addEventListener("click",this._onClick),this._cleanupQueue.push((()=>{document.body.removeEventListener("click",this._onClick)}))),this._escListener=t=>{("key"in t?"Escape"===t.key:27===t.keyCode)&&this.deactivate()}}Go(vm.prototype),vm.current=null,vm.prototype.destroy=function(){this.deactivate();for(const i of kc(t=Jc(e=this._cleanupQueue).call(e,0)).call(t)){var t,e;i()}},vm.prototype.activate=function(){vm.current&&vm.current.deactivate(),vm.current=this,this.active=!0,this._dom.overlay.style.display="none",this._dom.container.classList.add("vis-active"),this.emit("change"),this.emit("activate"),document.body.addEventListener("keydown",this._escListener)},vm.prototype.deactivate=function(){this.active=!1,this._dom.overlay.style.display="block",this._dom.container.classList.remove("vis-active"),document.body.removeEventListener("keydown",this._escListener),this.emit("change"),this.emit("deactivate")},vm.prototype._onTapOverlay=function(t){this.activate(),t.srcEvent.stopPropagation()};const wm=/^\/?Date\((-?\d+)/i,_m=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,xm=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,Em=/^rgb\( *(1?\d{1,2}|2[0-4]\d|25[0-5]) *, *(1?\d{1,2}|2[0-4]\d|25[0-5]) *, *(1?\d{1,2}|2[0-4]\d|25[0-5]) *\)$/i,Om=/^rgba\( *(1?\d{1,2}|2[0-4]\d|25[0-5]) *, *(1?\d{1,2}|2[0-4]\d|25[0-5]) *, *(1?\d{1,2}|2[0-4]\d|25[0-5]) *, *([01]|0?\.\d+) *\)$/i;function Cm(t){return t instanceof Number||"number"==typeof t}function km(t){if(t)for(;!0===t.hasChildNodes();){const e=t.firstChild;e&&(km(e),t.removeChild(e))}}function Sm(t){return t instanceof String||"string"==typeof t}function Tm(t){return"object"==typeof t&&null!==t}function Dm(t,e,i,o){let s=!1;!0===o&&(s=null===e[i]&&void 0!==t[i]),s?delete t[i]:t[i]=e[i]}function Mm(t,e){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(const o in t)if(void 0!==e[o])if(null===e[o]||"object"!=typeof e[o])Dm(t,e,o,i);else{const s=t[o],n=e[o];Tm(s)&&Tm(n)&&Mm(s,n,i)}}const Im=vo;function Pm(t,e,i){let o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(Vl(i))throw new TypeError("Arrays are not supported by deepExtend");for(let s=0;s3&&void 0!==arguments[3]&&arguments[3];if(Vl(i))throw new TypeError("Arrays are not supported by deepExtend");for(const s in i)if(Object.prototype.hasOwnProperty.call(i,s)&&!_u(t).call(t,s))if(i[s]&&i[s].constructor===Object)void 0===e[s]&&(e[s]={}),e[s].constructor===Object?Nm(e[s],i[s]):Dm(e,i,s,o);else if(Vl(i[s])){e[s]=[];for(let t=0;t2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)||!0===i)if("object"==typeof e[n]&&null!==e[n]&&Cu(e[n])===Object.prototype)void 0===t[n]?t[n]=Nm({},e[n],i):"object"==typeof t[n]&&null!==t[n]&&Cu(t[n])===Object.prototype?Nm(t[n],e[n],i):Dm(t,e,n,o);else if(Vl(e[n])){var s;t[n]=zl(s=e[n]).call(s)}else Dm(t,e,n,o);return t}function zm(t,e){return[...t,e]}function Fm(t){return zl(t).call(t)}function Am(t){return t.getBoundingClientRect().left}function jm(t){return t.getBoundingClientRect().top}function Rm(t,e){if(Vl(t)){const i=t.length;for(let o=0;o("function"==typeof t&&(t=t()),null!=t?0!=t:e||null),asNumber:(t,e)=>("function"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null),asString:(t,e)=>("function"==typeof t&&(t=t()),null!=t?String(t):e||null),asSize:(t,e)=>("function"==typeof t&&(t=t()),Sm(t)?t:Cm(t)?t+"px":e||null),asElement:(t,e)=>("function"==typeof t&&(t=t()),t||e||null)};function Wm(t){let e;switch(t.length){case 3:case 4:return e=xm.exec(t),e?{r:vp(e[1]+e[1],16),g:vp(e[2]+e[2],16),b:vp(e[3]+e[3],16)}:null;case 6:case 7:return e=_m.exec(t),e?{r:vp(e[1],16),g:vp(e[2],16),b:vp(e[3],16)}:null;default:return null}}function Vm(t,e){if(_u(t).call(t,"rgba"))return t;if(_u(t).call(t,"rgb")){const i=t.substr(Mp(t).call(t,"(")+1).replace(")","").split(",");return"rgba("+i[0]+","+i[1]+","+i[2]+","+e+")"}{const i=Wm(t);return null==i?t:"rgba("+i.r+","+i.g+","+i.b+","+e+")"}}function qm(t,e,i){var o;return"#"+zl(o=((1<<24)+(t<<16)+(e<<8)+i).toString(16)).call(o,1)}function Um(t,e){if(Sm(t)){let e=t;if($m(e)){var i;const t=Zl(i=e.substr(4).substr(0,e.length-5).split(",")).call(i,(function(t){return vp(t)}));e=qm(t[0],t[1],t[2])}if(!0===Qm(e)){const t=Zm(e),i={h:t.h,s:.8*t.s,v:Math.min(1,1.02*t.v)},o={h:t.h,s:Math.min(1,1.25*t.s),v:.8*t.v},s=Km(o.h,o.s,o.v),n=Km(i.h,i.s,i.v);return{background:e,border:s,highlight:{background:n,border:s},hover:{background:n,border:s}}}return{background:e,border:e,highlight:{background:e,border:e},hover:{background:e,border:e}}}if(e){return{background:t.background||e.background,border:t.border||e.border,highlight:Sm(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||e.highlight.background,border:t.highlight&&t.highlight.border||e.highlight.border},hover:Sm(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||e.hover.border,background:t.hover&&t.hover.background||e.hover.background}}}return{background:t.background||void 0,border:t.border||void 0,highlight:Sm(t.highlight)?{border:t.highlight,background:t.highlight}:{background:t.highlight&&t.highlight.background||void 0,border:t.highlight&&t.highlight.border||void 0},hover:Sm(t.hover)?{border:t.hover,background:t.hover}:{border:t.hover&&t.hover.border||void 0,background:t.hover&&t.hover.background||void 0}}}function Ym(t,e,i){t/=255,e/=255,i/=255;const o=Math.min(t,Math.min(e,i)),s=Math.max(t,Math.max(e,i));if(o===s)return{h:0,s:0,v:o};return{h:60*((t===o?3:i===o?1:5)-(t===o?e-i:i===o?t-e:i-t)/(s-o))/360,s:(s-o)/s,v:s}}function Xm(t){const e=document.createElement("div"),i={};e.style.cssText=t;for(let t=0;t3&&void 0!==arguments[3]?arguments[3]:{};const s=function(t){return null!=t},n=function(t){return null!==t&&"object"==typeof t};if(!n(t))throw new Error("Parameter mergeTarget must be an object");if(!n(e))throw new Error("Parameter options must be an object");if(!s(i))throw new Error("Parameter option must have a value");if(!n(o))throw new Error("Parameter globalOptions must be an object");const r=e[i],a=n(o)&&!function(t){for(const e in t)if(Object.prototype.hasOwnProperty.call(t,e))return!1;return!0}(o)?o[i]:void 0,h=a?a.enabled:void 0;if(void 0===r)return;if("boolean"==typeof r)return n(t[i])||(t[i]={}),void(t[i].enabled=r);if(null===r&&!n(t[i])){if(!s(a))return;t[i]=Np(a)}if(!n(r))return;let d=!0;void 0!==r.enabled?d=r.enabled:void 0!==h&&(d=a.enabled),function(t,e,i){n(t[i])||(t[i]={});const o=e[i],s=t[i];for(const t in o)Object.prototype.hasOwnProperty.call(o,t)&&(s[t]=o[t])}(t,e,i),t[i].enabled=d}const iy={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>t*(2-t),easeInOutQuad:t=>t<.5?2*t*t:(4-2*t)*t-1,easeInCubic:t=>t*t*t,easeOutCubic:t=>--t*t*t+1,easeInOutCubic:t=>t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1,easeInQuart:t=>t*t*t*t,easeOutQuart:t=>1- --t*t*t*t,easeInOutQuart:t=>t<.5?8*t*t*t*t:1-8*--t*t*t*t,easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>1+--t*t*t*t*t,easeInOutQuint:t=>t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t};function oy(t,e){let i;Vl(e)||(e=[e]);for(const o of t)if(o){i=o[e[0]];for(let t=1;t0&&void 0!==arguments[0]?arguments[0]:1;this.pixelRatio=t,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=()=>{},this.closeCallback=()=>{},this._create()}insertTo(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}setUpdateCallback(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker update callback is not a function.");this.updateCallback=t}setCloseCallback(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker closing callback is not a function.");this.closeCallback=t}_isColorString(t){if("string"==typeof t)return sy[t]}setColor(t){let e,i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("none"===t)return;const o=this._isColorString(t);if(void 0!==o&&(t=o),!0===Sm(t)){if(!0===$m(t)){const i=t.substr(4).substr(0,t.length-5).split(",");e={r:i[0],g:i[1],b:i[2],a:1}}else if(!0===Jm(t)){const i=t.substr(5).substr(0,t.length-6).split(",");e={r:i[0],g:i[1],b:i[2],a:i[3]}}else if(!0===Qm(t)){const i=Wm(t);e={r:i.r,g:i.g,b:i.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){const i=void 0!==t.a?t.a:"1.0";e={r:t.r,g:t.g,b:t.b,a:i}}if(void 0===e)throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: "+jp(t));this._setColor(e,i)}show(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display="block",this._generateHueCircle()}_hide(){!0===(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&(this.previousColor=vo({},this.color)),!0===this.applied&&this.updateCallback(this.initialColor),this.frame.style.display="none",sf((()=>{void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0)}),0)}_save(){this.updateCallback(this.color),this.applied=!1,this._hide()}_apply(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}_loadLast(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert("There is no last color to load...")}_setColor(t){!0===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])&&(this.initialColor=vo({},t)),this.color=t;const e=Ym(t.r,t.g,t.b),i=2*Math.PI,o=this.r*e.s,s=this.centerCoordinates.x+o*Math.sin(i*e.h),n=this.centerCoordinates.y+o*Math.cos(i*e.h);this.colorPickerSelector.style.left=s-.5*this.colorPickerSelector.clientWidth+"px",this.colorPickerSelector.style.top=n-.5*this.colorPickerSelector.clientHeight+"px",this._updatePicker(t)}_setOpacity(t){this.color.a=t/100,this._updatePicker(this.color)}_setBrightness(t){const e=Ym(this.color.r,this.color.g,this.color.b);e.v=t/100;const i=Gm(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}_updatePicker(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color;const e=Ym(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);const o=this.colorPickerCanvas.clientWidth,s=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,o,s),i.putImageData(this.hueCircle,0,0),i.fillStyle="rgba(0,0,0,"+(1-e.v)+")",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),gf(i).call(i),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,this.initialColorDiv.style.backgroundColor="rgba("+this.initialColor.r+","+this.initialColor.g+","+this.initialColor.b+","+this.initialColor.a+")",this.newColorDiv.style.backgroundColor="rgba("+this.color.r+","+this.color.g+","+this.color.b+","+this.color.a+")"}_setSize(){this.colorPickerCanvas.style.width="100%",this.colorPickerCanvas.style.height="100%",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}_create(){var t,e,i,o;if(this.frame=document.createElement("div"),this.frame.className="vis-color-picker",this.colorPickerDiv=document.createElement("div"),this.colorPickerSelector=document.createElement("div"),this.colorPickerSelector.className="vis-selector",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement("canvas"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){const t=this.colorPickerCanvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{const t=document.createElement("DIV");t.style.color="red",t.style.fontWeight="bold",t.style.padding="10px",t.innerText="Error: your browser does not support HTML canvas",this.colorPickerCanvas.appendChild(t)}this.colorPickerDiv.className="vis-color",this.opacityDiv=document.createElement("div"),this.opacityDiv.className="vis-opacity",this.brightnessDiv=document.createElement("div"),this.brightnessDiv.className="vis-brightness",this.arrowDiv=document.createElement("div"),this.arrowDiv.className="vis-arrow",this.opacityRange=document.createElement("input");try{this.opacityRange.type="range",this.opacityRange.min="0",this.opacityRange.max="100"}catch(t){}this.opacityRange.value="100",this.opacityRange.className="vis-range",this.brightnessRange=document.createElement("input");try{this.brightnessRange.type="range",this.brightnessRange.min="0",this.brightnessRange.max="100"}catch(t){}this.brightnessRange.value="100",this.brightnessRange.className="vis-range",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);const s=this;this.opacityRange.onchange=function(){s._setOpacity(this.value)},this.opacityRange.oninput=function(){s._setOpacity(this.value)},this.brightnessRange.onchange=function(){s._setBrightness(this.value)},this.brightnessRange.oninput=function(){s._setBrightness(this.value)},this.brightnessLabel=document.createElement("div"),this.brightnessLabel.className="vis-label vis-brightness",this.brightnessLabel.innerText="brightness:",this.opacityLabel=document.createElement("div"),this.opacityLabel.className="vis-label vis-opacity",this.opacityLabel.innerText="opacity:",this.newColorDiv=document.createElement("div"),this.newColorDiv.className="vis-new-color",this.newColorDiv.innerText="new",this.initialColorDiv=document.createElement("div"),this.initialColorDiv.className="vis-initial-color",this.initialColorDiv.innerText="initial",this.cancelButton=document.createElement("div"),this.cancelButton.className="vis-button vis-cancel",this.cancelButton.innerText="cancel",this.cancelButton.onclick=Lo(t=this._hide).call(t,this,!1),this.applyButton=document.createElement("div"),this.applyButton.className="vis-button vis-apply",this.applyButton.innerText="apply",this.applyButton.onclick=Lo(e=this._apply).call(e,this),this.saveButton=document.createElement("div"),this.saveButton.className="vis-button vis-save",this.saveButton.innerText="save",this.saveButton.onclick=Lo(i=this._save).call(i,this),this.loadButton=document.createElement("div"),this.loadButton.className="vis-button vis-load",this.loadButton.innerText="load last",this.loadButton.onclick=Lo(o=this._loadLast).call(o,this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}_bindHammer(){this.drag={},this.pinch={},this.hammer=new bm(this.colorPickerCanvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.on("hammer.input",(t=>{t.isFirst&&this._moveSelector(t)})),this.hammer.on("tap",(t=>{this._moveSelector(t)})),this.hammer.on("panstart",(t=>{this._moveSelector(t)})),this.hammer.on("panmove",(t=>{this._moveSelector(t)})),this.hammer.on("panend",(t=>{this._moveSelector(t)}))}_generateHueCircle(){if(!1===this.generated){const t=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);const e=this.colorPickerCanvas.clientWidth,i=this.colorPickerCanvas.clientHeight;let o,s,n,r;t.clearRect(0,0,e,i),this.centerCoordinates={x:.5*e,y:.5*i},this.r=.49*e;const a=2*Math.PI/360,h=1/360,d=1/this.r;let l;for(n=0;n<360;n++)for(r=0;r3&&void 0!==arguments[3]?arguments[3]:1,s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:()=>!1;this.parent=t,this.changedOptions=[],this.container=e,this.allowCreation=!1,this.hideOption=s,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},vo(this.options,this.defaultOptions),this.configureOptions=i,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new ny(o),this.wrapper=void 0}setOptions(t){if(void 0!==t){this.popupHistory={},this._removePopup();let e=!0;if("string"==typeof t)this.options.filter=t;else if(Vl(t))this.options.filter=t.join();else if("object"==typeof t){if(null==t)throw new TypeError("options cannot be null");void 0!==t.container&&(this.options.container=t.container),void 0!==ju(t)&&(this.options.filter=ju(t)),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)}else"boolean"==typeof t?(this.options.filter=!0,e=t):"function"==typeof t&&(this.options.filter=t,e=!0);!1===ju(this.options)&&(e=!1),this.options.enabled=e}this._clean()}setModuleOptions(t){this.moduleOptions=t,!0===this.options.enabled&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}_create(){this._clean(),this.changedOptions=[];const t=ju(this.options);let e=0,i=!1;for(const o in this.configureOptions)Object.prototype.hasOwnProperty.call(this.configureOptions,o)&&(this.allowCreation=!1,i=!1,"function"==typeof t?(i=t(o,[]),i=i||this._handleObject(this.configureOptions[o],[o],!0)):!0!==t&&-1===Mp(t).call(t,o)||(i=!0),!1!==i&&(this.allowCreation=!0,e>0&&this._makeItem([]),this._makeHeader(o),this._handleObject(this.configureOptions[o],[o])),e++);this._makeButton(),this._push()}_push(){this.wrapper=document.createElement("div"),this.wrapper.className="vis-configuration-wrapper",this.container.appendChild(this.wrapper);for(let t=0;t1?e-1:0),o=1;o{s.appendChild(t)})),this.domElements.push(s),this.domElements.length}return 0}_makeHeader(t){const e=document.createElement("div");e.className="vis-configuration vis-config-header",e.innerText=t,this._makeItem([],e)}_makeLabel(t,e){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const o=document.createElement("div");if(o.className="vis-configuration vis-config-label vis-config-s"+e.length,!0===i){for(;o.firstChild;)o.removeChild(o.firstChild);o.appendChild(ry("i","b",t))}else o.innerText=t+":";return o}_makeDropdown(t,e,i){const o=document.createElement("select");o.className="vis-configuration vis-config-select";let s=0;void 0!==e&&-1!==Mp(t).call(t,e)&&(s=Mp(t).call(t,e));for(let e=0;en&&1!==n&&(a.max=Math.ceil(e*t),d=a.max,h="range increased"),a.value=e}else a.value=o;const l=document.createElement("input");l.className="vis-configuration vis-config-rangeinput",l.value=a.value;const c=this;a.onchange=function(){l.value=this.value,c._update(Number(this.value),i)},a.oninput=function(){l.value=this.value};const u=this._makeLabel(i[i.length-1],i),p=this._makeItem(i,u,a,l);""!==h&&this.popupHistory[p]!==d&&(this.popupHistory[p]=d,this._setupPopup(h,p))}_makeButton(){if(!0===this.options.showButton){const t=document.createElement("div");t.className="vis-configuration vis-config-button",t.innerText="generate options",t.onclick=()=>{this._printOptions()},t.onmouseover=()=>{t.className="vis-configuration vis-config-button hover"},t.onmouseout=()=>{t.className="vis-configuration vis-config-button"},this.optionsContainer=document.createElement("div"),this.optionsContainer.className="vis-configuration vis-config-option-container",this.domElements.push(this.optionsContainer),this.domElements.push(t)}}_setupPopup(t,e){if(!0===this.initialized&&!0===this.allowCreation&&this.popupCounter{this._removePopup()},this.popupCounter+=1,this.popupDiv={html:i,index:e}}}_removePopup(){void 0!==this.popupDiv.html&&(this.popupDiv.html.parentNode.removeChild(this.popupDiv.html),clearTimeout(this.popupDiv.hideTimeout),clearTimeout(this.popupDiv.deleteTimeout),this.popupDiv={})}_showPopupIfNeeded(){if(void 0!==this.popupDiv.html){const t=this.domElements[this.popupDiv.index].getBoundingClientRect();this.popupDiv.html.style.left=t.left+"px",this.popupDiv.html.style.top=t.top-30+"px",document.body.appendChild(this.popupDiv.html),this.popupDiv.hideTimeout=sf((()=>{this.popupDiv.html.style.opacity=0}),1500),this.popupDiv.deleteTimeout=sf((()=>{this._removePopup()}),1800)}}_makeCheckbox(t,e,i){const o=document.createElement("input");o.type="checkbox",o.className="vis-configuration vis-config-checkbox",o.checked=t,void 0!==e&&(o.checked=e,e!==t&&("object"==typeof t?e!==t.enabled&&this.changedOptions.push({path:i,value:e}):this.changedOptions.push({path:i,value:e})));const s=this;o.onchange=function(){s._update(this.checked,i)};const n=this._makeLabel(i[i.length-1],i);this._makeItem(i,n,o)}_makeTextInput(t,e,i){const o=document.createElement("input");o.type="text",o.className="vis-configuration vis-config-text",o.value=e,e!==t&&this.changedOptions.push({path:i,value:e});const s=this;o.onchange=function(){s._update(this.value,i)};const n=this._makeLabel(i[i.length-1],i);this._makeItem(i,n,o)}_makeColorField(t,e,i){const o=t[1],s=document.createElement("div");"none"!==(e=void 0===e?o:e)?(s.className="vis-configuration vis-config-colorBlock",s.style.backgroundColor=e):s.className="vis-configuration vis-config-colorBlock none",e=void 0===e?o:e,s.onclick=()=>{this._showColorPicker(e,s,i)};const n=this._makeLabel(i[i.length-1],i);this._makeItem(i,n,s)}_showColorPicker(t,e,i){e.onclick=function(){},this.colorPicker.insertTo(e),this.colorPicker.show(),this.colorPicker.setColor(t),this.colorPicker.setUpdateCallback((t=>{const o="rgba("+t.r+","+t.g+","+t.b+","+t.a+")";e.style.backgroundColor=o,this._update(o,i)})),this.colorPicker.setCloseCallback((()=>{e.onclick=()=>{this._showColorPicker(t,e,i)}}))}_handleObject(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=!1;const s=ju(this.options);let n=!1;for(const r in t)if(Object.prototype.hasOwnProperty.call(t,r)){o=!0;const a=t[r],h=zm(e,r);if("function"==typeof s&&(o=s(r,e),!1===o&&!Vl(a)&&"string"!=typeof a&&"boolean"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,o=this._handleObject(a,h,!0),this.allowCreation=!1===i)),!1!==o){n=!0;const t=this._getValue(h);if(Vl(a))this._handleArray(a,t,h);else if("string"==typeof a)this._makeTextInput(a,t,h);else if("boolean"==typeof a)this._makeCheckbox(a,t,h);else if(a instanceof Object){if(!this.hideOption(e,r,this.moduleOptions))if(void 0!==a.enabled){const t=zm(h,"enabled"),e=this._getValue(t);if(!0===e){const t=this._makeLabel(r,h,!0);this._makeItem(h,t),n=this._handleObject(a,h)||n}else this._makeCheckbox(a,e,h)}else{const t=this._makeLabel(r,h,!0);this._makeItem(h,t),n=this._handleObject(a,h)||n}}else console.error("dont know how to handle",a,r,h)}}return n}_handleArray(t,e,i){"string"==typeof t[0]&&"color"===t[0]?(this._makeColorField(t,e,i),t[1]!==e&&this.changedOptions.push({path:i,value:e})):"string"==typeof t[0]?(this._makeDropdown(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:e})):"number"==typeof t[0]&&(this._makeRange(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:Number(e)}))}_update(t,e){const i=this._constructOptions(t,e);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit("configChange",i),this.initialized=!0,this.parent.setOptions(i)}_constructOptions(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=i;t="false"!==(t="true"===t||t)&&t;for(let i=0;io-this.padding&&(i=!0),s=i?this.x-e:this.x,n=r?this.y-t:this.y}else n=this.y-t,n+t+this.padding>i&&(n=i-t-this.padding),no&&(s=o-e-this.padding),sn.distance?" in "+t.printLocation(s.path,e,"")+"Perhaps it was misplaced? Matching option found at: "+t.printLocation(n.path,n.closestMatch,""):s.distance<=8?'. Did you mean "'+s.closestMatch+'"?'+t.printLocation(s.path,e):". Did you mean one of these: "+t.print(Jl(i))+t.printLocation(o,e),console.error('%cUnknown option detected: "'+e+'"'+r,dy),hy=!0}static findInOptions(e,i,o){let s=arguments.length>3&&void 0!==arguments[3]&&arguments[3],n=1e9,r="",a=[];const h=e.toLowerCase();let d;for(const c in i){let u;if(void 0!==i[c].__type__&&!0===s){const s=t.findInOptions(e,i[c],zm(o,c));n>s.distance&&(r=s.closestMatch,a=s.path,n=s.distance,d=s.indexMatch)}else{var l;-1!==Mp(l=c.toLowerCase()).call(l,h)&&(d=c),u=t.levenshteinDistance(e,c),n>u&&(r=c,a=Fm(o),n=u)}}return{closestMatch:r,path:a,distance:n,indexMatch:d}}static printLocation(t,e){let i="\n\n"+(arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Problem value found at: \n")+"options = {\n";for(let e=0;e0)return"before"==o?Math.max(0,h-1):h;if(s(r,e)<0&&s(a,e)>0)return"before"==o?h:Math.min(t.length-1,h+1);s(r,e)<0?l=h+1:c=h-1,d++}return-1},bridgeObject:ty,copyAndExtendArray:zm,copyArray:Fm,deepExtend:Nm,deepObjectAssign:pm,easingFunctions:iy,equalArray:function(t,e){if(t.length!==e.length)return!1;for(let i=0,o=t.length;i0&&void 0!==arguments[0]?arguments[0]:window.event,e=null;return t&&(t.target?e=t.target:t.srcElement&&(e=t.srcElement)),e instanceof Element&&(null==e.nodeType||3!=e.nodeType||(e=e.parentNode,e instanceof Element))?e:null},getType:function(t){const e=typeof t;return"object"===e?null===t?"null":t instanceof Boolean?"Boolean":t instanceof Number?"Number":t instanceof String?"String":Vl(t)?"Array":t instanceof Date?"Date":"Object":"number"===e?"Number":"boolean"===e?"Boolean":"string"===e?"String":void 0===e?"undefined":e},hasParent:function(t,e){let i=t;for(;i;){if(i===e)return!0;if(!i.parentNode)return!1;i=i.parentNode}return!1},hexToHSV:Zm,hexToRGB:Wm,insertSort:function(t,e){for(let i=0;i0&&e(o,t[s-1])<0;s--)t[s]=t[s-1];t[s]=o}return t},isDate:function(t){if(t instanceof Date)return!0;if(Sm(t)){if(wm.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},isNumber:Cm,isObject:Tm,isString:Sm,isValidHex:Qm,isValidRGB:$m,isValidRGBA:Jm,mergeOptions:ey,option:Hm,overrideOpacity:Vm,parseColor:Um,preventDefault:function(t){t||(t=window.event),t&&(t.preventDefault?t.preventDefault():t.returnValue=!1)},pureDeepObjectAssign:um,recursiveDOMDelete:km,removeClassName:function(t,e){let i=t.className.split(" ");const o=e.split(" ");i=ju(i).call(i,(function(t){return!_u(o).call(o,t)})),t.className=i.join(" ")},removeCssText:function(t,e){const i=Xm(e);for(const e of Jl(i))t.style.removeProperty(e)},selectiveBridgeObject:function(t,e){if(null!==e&&"object"==typeof e){const i=Np(e);for(let o=0;o2?i-2:0),s=2;s{e||(e=!0,requestAnimationFrame((()=>{e=!1,t()})))}},toArray:Lm,topMost:oy,updateProperty:function(t,e,i){return t[e]!==i&&(t[e]=i,!0)}});function by(t){return Ey=t,function(){var t={};Oy=0,void(Cy=Ey.charAt(0)),Fy(),"strict"===ky&&(t.strict=!0,Fy());"graph"!==ky&&"digraph"!==ky||(t.type=ky,Fy());Sy===_y.IDENTIFIER&&(t.id=ky,Fy());if("{"!=ky)throw Wy("Angle bracket { expected");if(Fy(),Ay(t),"}"!=ky)throw Wy("Angle bracket } expected");if(Fy(),""!==ky)throw Wy("End of file expected");return Fy(),delete t.node,delete t.edge,delete t.graph,t}()}var vy={fontsize:"font.size",fontcolor:"font.color",labelfontcolor:"font.color",fontname:"font.face",color:["color.border","color.background"],fillcolor:"color.background",tooltip:"title",labeltooltip:"title"},wy=Np(vy);wy.color="color.color",wy.style="dashes";var _y={NULL:0,DELIMITER:1,IDENTIFIER:2,UNKNOWN:3},xy={"{":!0,"}":!0,"[":!0,"]":!0,";":!0,"=":!0,",":!0,"->":!0,"--":!0},Ey="",Oy=0,Cy="",ky="",Sy=_y.NULL;function Ty(){Oy++,Cy=Ey.charAt(Oy)}function Dy(){return Ey.charAt(Oy+1)}function My(t){var e=t.charCodeAt(0);return e<47?35===e||46===e:e<59?e>47:e<91?e>64:e<96?95===e:e<123&&e>96}function Iy(t,e){if(t||(t={}),e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function Py(t,e,i){for(var o=e.split("."),s=t;o.length;){var n=o.shift();o.length?(s[n]||(s[n]={}),s=s[n]):s[n]=i}}function By(t,e){for(var i,o,s=null,n=[t],r=t;r.parent;)n.push(r.parent),r=r.parent;if(r.nodes)for(i=0,o=r.nodes.length;i=0;i--){var a,h=n[i];h.nodes||(h.nodes=[]),-1===Mp(a=h.nodes).call(a,s)&&h.nodes.push(s)}e.attr&&(s.attr=Iy(s.attr,e.attr))}function Ny(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=Iy({},t.edge);e.attr=Iy(i,e.attr)}}function zy(t,e,i,o,s){var n={from:e,to:i,type:o};return t.edge&&(n.attr=Iy({},t.edge)),n.attr=Iy(n.attr||{},s),null!=s&&s.hasOwnProperty("arrows")&&null!=s.arrows&&(n.arrows={to:{enabled:!0,type:s.arrows.type}},s.arrows=null),n}function Fy(){for(Sy=_y.NULL,ky="";" "===Cy||"\t"===Cy||"\n"===Cy||"\r"===Cy;)Ty();do{var t=!1;if("#"===Cy){for(var e=Oy-1;" "===Ey.charAt(e)||"\t"===Ey.charAt(e);)e--;if("\n"===Ey.charAt(e)||""===Ey.charAt(e)){for(;""!=Cy&&"\n"!=Cy;)Ty();t=!0}}if("/"===Cy&&"/"===Dy()){for(;""!=Cy&&"\n"!=Cy;)Ty();t=!0}if("/"===Cy&&"*"===Dy()){for(;""!=Cy;){if("*"===Cy&&"/"===Dy()){Ty(),Ty();break}Ty()}t=!0}for(;" "===Cy||"\t"===Cy||"\n"===Cy||"\r"===Cy;)Ty()}while(t);if(""!==Cy){var i=Cy+Dy();if(xy[i])return Sy=_y.DELIMITER,ky=i,Ty(),void Ty();if(xy[Cy])return Sy=_y.DELIMITER,ky=Cy,void Ty();if(My(Cy)||"-"===Cy){for(ky+=Cy,Ty();My(Cy);)ky+=Cy,Ty();return"false"===ky?ky=!1:"true"===ky?ky=!0:isNaN(Number(ky))||(ky=Number(ky)),void(Sy=_y.IDENTIFIER)}if('"'===Cy){for(Ty();""!=Cy&&('"'!=Cy||'"'===Cy&&'"'===Dy());)'"'===Cy?(ky+=Cy,Ty()):"\\"===Cy&&"n"===Dy()?(ky+="\n",Ty()):ky+=Cy,Ty();if('"'!=Cy)throw Wy('End of string " expected');return Ty(),void(Sy=_y.IDENTIFIER)}for(Sy=_y.UNKNOWN;""!=Cy;)ky+=Cy,Ty();throw new SyntaxError('Syntax error in part "'+Vy(ky,30)+'"')}Sy=_y.DELIMITER}function Ay(t){for(;""!==ky&&"}"!=ky;)jy(t),";"===ky&&Fy()}function jy(t){var e=Ry(t);if(e)Ly(t,e);else{var i=function(t){if("node"===ky)return Fy(),t.node=Hy(),"node";if("edge"===ky)return Fy(),t.edge=Hy(),"edge";if("graph"===ky)return Fy(),t.graph=Hy(),"graph";return null}(t);if(!i){if(Sy!=_y.IDENTIFIER)throw Wy("Identifier expected");var o=ky;if(Fy(),"="===ky){if(Fy(),Sy!=_y.IDENTIFIER)throw Wy("Identifier expected");t[o]=ky,Fy()}else!function(t,e){var i={id:e},o=Hy();o&&(i.attr=o);By(t,i),Ly(t,e)}(t,o)}}}function Ry(t){var e=null;if("subgraph"===ky&&((e={}).type="subgraph",Fy(),Sy===_y.IDENTIFIER&&(e.id=ky,Fy())),"{"===ky){if(Fy(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,Ay(e),"}"!=ky)throw Wy("Angle bracket } expected");Fy(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function Ly(t,e){for(;"->"===ky||"--"===ky;){var i,o=ky;Fy();var s=Ry(t);if(s)i=s;else{if(Sy!=_y.IDENTIFIER)throw Wy("Identifier or subgraph expected");By(t,{id:i=ky}),Fy()}Ny(t,zy(t,e,i,o,Hy())),e=i}}function Hy(){for(var t,e,i=null,o={dashed:!0,solid:!1,dotted:[1,5]},s={dot:"circle",box:"box",crow:"crow",curve:"curve",icurve:"inv_curve",normal:"triangle",inv:"inv_triangle",diamond:"diamond",tee:"bar",vee:"vee"},n=new Array,r=new Array;"["===ky;){for(Fy(),i={};""!==ky&&"]"!=ky;){if(Sy!=_y.IDENTIFIER)throw Wy("Attribute name expected");var a=ky;if(Fy(),"="!=ky)throw Wy("Equal sign = expected");if(Fy(),Sy!=_y.IDENTIFIER)throw Wy("Attribute value expected");var h=ky;"style"===a&&(h=o[h]),"arrowhead"===a&&(a="arrows",h={to:{enabled:!0,type:s[h]}}),"arrowtail"===a&&(a="arrows",h={from:{enabled:!0,type:s[h]}}),n.push({attr:i,name:a,value:h}),r.push(a),Fy(),","==ky&&Fy()}if("]"!=ky)throw Wy("Bracket ] expected");Fy()}if(_u(r).call(r,"dir")){var d={arrows:{}};for(t=0;t"===t.type&&(e.arrows="to"),e};mc(s=i.edges).call(s,(function(t){var e,i,s,r,a,h,d;(e=t.from instanceof Object?t.from.nodes:{id:t.from},i=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges)&&mc(s=t.from.edges).call(s,(function(t){var e=n(t);o.edges.push(e)}));(a=i,h=function(e,i){var s=zy(o,e.id,i.id,t.type,t.attr),r=n(s);o.edges.push(r)},Vl(r=e)?mc(r).call(r,(function(t){Vl(a)?mc(a).call(a,(function(e){h(t,e)})):h(t,a)})):Vl(a)?mc(a).call(a,(function(t){h(r,t)})):h(r,a),t.to instanceof Object&&t.to.edges)&&mc(d=t.to.edges).call(d,(function(t){var e=n(t);o.edges.push(e)}))}))}return i.attr&&(o.options=i.attr),o}var Xy=Object.freeze({__proto__:null,DOTToGraph:Yy,parseDOT:by});function Gy(t,e){var i;const o={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};null!=e&&(null!=e.fixed&&(o.nodes.fixed=e.fixed),null!=e.parseColor&&(o.nodes.parseColor=e.parseColor),null!=e.inheritColor&&(o.edges.inheritColor=e.inheritColor));const s=t.edges,n=Zl(s).call(s,(t=>{const e={from:t.source,id:t.id,to:t.target};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),"Directed"===t.type&&(e.arrows="to"),t.color&&!1===o.edges.inheritColor&&(e.color=t.color),e}));return{nodes:Zl(i=t.nodes).call(i,(t=>{const e={id:t.id,fixed:o.nodes.fixed&&null!=t.x&&null!=t.y};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.size&&(e.size=t.size),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),null!=t.title&&(e.title=t.title),null!=t.x&&(e.x=t.x),null!=t.y&&(e.y=t.y),null!=t.color&&(!0===o.nodes.parseColor?e.color=t.color:e.color={background:t.color,border:t.color,highlight:{background:t.color,border:t.color},hover:{background:t.color,border:t.color}}),e})),edges:n}}var Ky=Object.freeze({__proto__:null,parseGephi:Gy});var Zy=Object.freeze({__proto__:null,cn:{addDescription:"单击空白处放置新节点。",addEdge:"添加连接线",addNode:"添加节点",back:"返回",close:"關閉",createEdgeError:"无法将连接线连接到群集。",del:"删除选定",deleteClusterError:"无法删除群集。",edgeDescription:"单击某个节点并将该连接线拖动到另一个节点以连接它们。",edit:"编辑",editClusterError:"无法编辑群集。",editEdge:"编辑连接线",editEdgeDescription:"单击控制节点并将它们拖到节点上连接。",editNode:"编辑节点"},cs:{addDescription:"Kluknutím do prázdného prostoru můžete přidat nový vrchol.",addEdge:"Přidat hranu",addNode:"Přidat vrchol",back:"Zpět",close:"Zavřít",createEdgeError:"Nelze připojit hranu ke shluku.",del:"Smazat výběr",deleteClusterError:"Nelze mazat shluky.",edgeDescription:"Přetažením z jednoho vrcholu do druhého můžete spojit tyto vrcholy novou hranou.",edit:"Upravit",editClusterError:"Nelze upravovat shluky.",editEdge:"Upravit hranu",editEdgeDescription:"Přetažením kontrolního vrcholu hrany ji můžete připojit k jinému vrcholu.",editNode:"Upravit vrchol"},de:{addDescription:"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.",addEdge:"Kante hinzufügen",addNode:"Knoten hinzufügen",back:"Zurück",close:"Schließen",createEdgeError:"Es ist nicht möglich, Kanten mit Clustern zu verbinden.",del:"Lösche Auswahl",deleteClusterError:"Cluster können nicht gelöscht werden.",edgeDescription:"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.",edit:"Editieren",editClusterError:"Cluster können nicht editiert werden.",editEdge:"Kante editieren",editEdgeDescription:"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.",editNode:"Knoten editieren"},en:{addDescription:"Click in an empty space to place a new node.",addEdge:"Add Edge",addNode:"Add Node",back:"Back",close:"Close",createEdgeError:"Cannot link edges to a cluster.",del:"Delete selected",deleteClusterError:"Clusters cannot be deleted.",edgeDescription:"Click on a node and drag the edge to another node to connect them.",edit:"Edit",editClusterError:"Clusters cannot be edited.",editEdge:"Edit Edge",editEdgeDescription:"Click on the control points and drag them to a node to connect to it.",editNode:"Edit Node"},es:{addDescription:"Haga clic en un lugar vacío para colocar un nuevo nodo.",addEdge:"Añadir arista",addNode:"Añadir nodo",back:"Atrás",close:"Cerrar",createEdgeError:"No se puede conectar una arista a un grupo.",del:"Eliminar selección",deleteClusterError:"No es posible eliminar grupos.",edgeDescription:"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.",edit:"Editar",editClusterError:"No es posible editar grupos.",editEdge:"Editar arista",editEdgeDescription:"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.",editNode:"Editar nodo"},fr:{addDescription:"Cliquez dans un endroit vide pour placer un nœud.",addEdge:"Ajouter un lien",addNode:"Ajouter un nœud",back:"Retour",close:"Fermer",createEdgeError:"Impossible de créer un lien vers un cluster.",del:"Effacer la sélection",deleteClusterError:"Les clusters ne peuvent pas être effacés.",edgeDescription:"Cliquez sur un nœud et glissez le lien vers un autre nœud pour les connecter.",edit:"Éditer",editClusterError:"Les clusters ne peuvent pas être édités.",editEdge:"Éditer le lien",editEdgeDescription:"Cliquez sur les points de contrôle et glissez-les pour connecter un nœud.",editNode:"Éditer le nœud"},it:{addDescription:"Clicca per aggiungere un nuovo nodo",addEdge:"Aggiungi un vertice",addNode:"Aggiungi un nodo",back:"Indietro",close:"Chiudere",createEdgeError:"Non si possono collegare vertici ad un cluster",del:"Cancella la selezione",deleteClusterError:"I cluster non possono essere cancellati",edgeDescription:"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.",edit:"Modifica",editClusterError:"I clusters non possono essere modificati.",editEdge:"Modifica il vertice",editEdgeDescription:"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.",editNode:"Modifica il nodo"},nl:{addDescription:"Klik op een leeg gebied om een nieuwe node te maken.",addEdge:"Link toevoegen",addNode:"Node toevoegen",back:"Terug",close:"Sluiten",createEdgeError:"Kan geen link maken naar een cluster.",del:"Selectie verwijderen",deleteClusterError:"Clusters kunnen niet worden verwijderd.",edgeDescription:"Klik op een node en sleep de link naar een andere node om ze te verbinden.",edit:"Wijzigen",editClusterError:"Clusters kunnen niet worden aangepast.",editEdge:"Link wijzigen",editEdgeDescription:"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.",editNode:"Node wijzigen"},pt:{addDescription:"Clique em um espaço em branco para adicionar um novo nó",addEdge:"Adicionar aresta",addNode:"Adicionar nó",back:"Voltar",close:"Fechar",createEdgeError:"Não foi possível linkar arestas a um cluster.",del:"Remover selecionado",deleteClusterError:"Clusters não puderam ser removidos.",edgeDescription:"Clique em um nó e arraste a aresta até outro nó para conectá-los",edit:"Editar",editClusterError:"Clusters não puderam ser editados.",editEdge:"Editar aresta",editEdgeDescription:"Clique nos pontos de controle e os arraste para um nó para conectá-los",editNode:"Editar nó"},ru:{addDescription:"Кликните в свободное место, чтобы добавить новый узел.",addEdge:"Добавить ребро",addNode:"Добавить узел",back:"Назад",close:"Закрывать",createEdgeError:"Невозможно соединить ребра в кластер.",del:"Удалить выбранное",deleteClusterError:"Кластеры не могут быть удалены",edgeDescription:"Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.",edit:"Редактировать",editClusterError:"Кластеры недоступны для редактирования.",editEdge:"Редактировать ребро",editEdgeDescription:"Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.",editNode:"Редактировать узел"},uk:{addDescription:"Kлікніть на вільне місце, щоб додати новий вузол.",addEdge:"Додати край",addNode:"Додати вузол",back:"Назад",close:"Закрити",createEdgeError:"Не можливо об'єднати краї в групу.",del:"Видалити обране",deleteClusterError:"Групи не можуть бути видалені.",edgeDescription:"Клікніть на вузол і перетягніть край до іншого вузла, щоб їх з'єднати.",edit:"Редагувати",editClusterError:"Групи недоступні для редагування.",editEdge:"Редагувати край",editEdgeDescription:"Клікніть на контрольні точки і перетягніть їх у вузол, щоб підключитися до нього.",editNode:"Редагувати вузол"}});class Qy{constructor(){this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement("canvas")}init(){if(this.initialized())return;this.src=this.image.src;const t=this.image.width,e=this.image.height;this.width=t,this.height=e;const i=Math.floor(e/2),o=Math.floor(e/4),s=Math.floor(e/8),n=Math.floor(e/16),r=Math.floor(t/2),a=Math.floor(t/4),h=Math.floor(t/8),d=Math.floor(t/16);this.canvas.width=3*a,this.canvas.height=i,this.coordinates=[[0,0,r,i],[r,0,a,o],[r,o,h,s],[5*h,o,d,n]],this._fillMipMap()}initialized(){return void 0!==this.coordinates}_fillMipMap(){const t=this.canvas.getContext("2d"),e=this.coordinates[0];t.drawImage(this.image,e[0],e[1],e[2],e[3]);for(let e=1;e2){e*=.5;let r=0;for(;e>2&&r=this.NUM_ITERATIONS&&(r=this.NUM_ITERATIONS-1);const a=this.coordinates[r];t.drawImage(this.canvas,a[0],a[1],a[2],a[3],i,o,s,n)}else t.drawImage(this.image,i,o,s,n)}}class $y{constructor(t){this.images={},this.imageBroken={},this.callback=t}_tryloadBrokenUrl(t,e,i){void 0!==t&&void 0!==i&&(void 0!==e?(i.image.onerror=()=>{console.error("Could not load brokenImage:",e)},i.image.src=e):console.warn("No broken url image defined"))}_redrawWithImage(t){this.callback&&this.callback(t)}load(t,e){const i=this.images[t];if(i)return i;const o=new Qy;return this.images[t]=o,o.image.onload=()=>{this._fixImageCoordinates(o.image),o.init(),this._redrawWithImage(o)},o.image.onerror=()=>{console.error("Could not load image:",t),this._tryloadBrokenUrl(t,e,o)},o.image.src=t,o}_fixImageCoordinates(t){0===t.width&&(document.body.appendChild(t),t.width=t.offsetWidth,t.height=t.offsetHeight,document.body.removeChild(t))}}var Jy={exports:{}},tb=n((function(){if("function"==typeof ArrayBuffer){var t=new ArrayBuffer(8);Object.isExtensible(t)&&Object.defineProperty(t,"a",{value:8})}})),eb=n,ib=tt,ob=w,sb=tb,nb=Object.isExtensible,rb=eb((function(){nb(1)}))||sb?function(t){return!!ib(t)&&((!sb||"ArrayBuffer"!==ob(t))&&(!nb||nb(t)))}:nb,ab=!n((function(){return Object.isExtensible(Object.preventExtensions({}))})),hb=Ti,db=m,lb=Yi,cb=tt,ub=$t,pb=Qe.f,fb=In,gb=Nn,mb=rb,yb=ab,bb=!1,vb=oe("meta"),wb=0,_b=function(t){pb(t,vb,{value:{objectID:"O"+wb++,weakData:{}}})},xb=Jy.exports={enable:function(){xb.enable=function(){},bb=!0;var t=fb.f,e=db([].splice),i={};i[vb]=1,t(i).length&&(fb.f=function(i){for(var o=t(i),s=0,n=o.length;sn;n++)if((a=y(t[n]))&&Kb(ev,a))return a;return new tv(!1)}o=Zb(t,s)}for(h=u?t.next:o.next;!(d=qb(h,o)).done;){try{a=y(d.value)}catch(t){$b(o,"throw",t)}if("object"==typeof a&&a&&Kb(ev,a))return a}return new tv(!1)},ov=at,sv=TypeError,nv=function(t,e){if(ov(e,t))return t;throw new sv("Incorrect invocation")},rv=Ti,av=s,hv=Eb,dv=n,lv=mi,cv=iv,uv=nv,pv=S,fv=tt,gv=U,mv=vr,yv=Qe.f,bv=qr.forEach,vv=D,wv=Fr.set,_v=Fr.getterFor,xv=function(t,e,i){var o,s=-1!==t.indexOf("Map"),n=-1!==t.indexOf("Weak"),r=s?"set":"add",a=av[t],h=a&&a.prototype,d={};if(vv&&pv(a)&&(n||h.forEach&&!dv((function(){(new a).entries().next()})))){var l=(o=e((function(e,i){wv(uv(e,l),{type:t,collection:new a}),gv(i)||cv(i,e[r],{that:e,AS_ENTRIES:s})}))).prototype,c=_v(t);bv(["add","clear","delete","forEach","get","has","set","keys","values","entries"],(function(t){var e="add"===t||"set"===t;!(t in h)||n&&"clear"===t||lv(l,t,(function(i,o){var s=c(this).collection;if(!e&&n&&!fv(i))return"get"===t&&void 0;var r=s[t](0===i?0:i,o);return e?this:r}))})),n||yv(l,"size",{configurable:!0,get:function(){return c(this).collection.size}})}else o=i.getConstructor(e,t,s,r),hv.enable();return mv(o,t,!1,!0),d[t]=o,rv({global:!0,forced:!0},d),n||i.setStrong(o,t,s),o},Ev=Xn,Ov=function(t,e,i){for(var o in e)i&&i.unsafe&&t[o]?t[o]=e[o]:Ev(t,o,e[o],i);return t},Cv=rt,kv=Kn,Sv=D,Tv=ue("species"),Dv=Mn,Mv=Kn,Iv=Ov,Pv=Ze,Bv=nv,Nv=U,zv=iv,Fv=Kd,Av=Zd,jv=function(t){var e=Cv(t);Sv&&e&&!e[Tv]&&kv(e,Tv,{configurable:!0,get:function(){return this}})},Rv=D,Lv=Eb.fastKey,Hv=Fr.set,Wv=Fr.getterFor,Vv={getConstructor:function(t,e,i,o){var s=t((function(t,s){Bv(t,n),Hv(t,{type:e,index:Dv(null),first:void 0,last:void 0,size:0}),Rv||(t.size=0),Nv(s)||zv(s,t[o],{that:t,AS_ENTRIES:i})})),n=s.prototype,r=Wv(e),a=function(t,e,i){var o,s,n=r(t),a=h(t,e);return a?a.value=i:(n.last=a={index:s=Lv(e,!0),key:e,value:i,previous:o=n.last,next:void 0,removed:!1},n.first||(n.first=a),o&&(o.next=a),Rv?n.size++:t.size++,"F"!==s&&(n.index[s]=a)),t},h=function(t,e){var i,o=r(t),s=Lv(e);if("F"!==s)return o.index[s];for(i=o.first;i;i=i.next)if(i.key===e)return i};return Iv(n,{clear:function(){for(var t=r(this),e=t.index,i=t.first;i;)i.removed=!0,i.previous&&(i.previous=i.previous.next=void 0),delete e[i.index],i=i.next;t.first=t.last=void 0,Rv?t.size=0:this.size=0},delete:function(t){var e=this,i=r(e),o=h(e,t);if(o){var s=o.next,n=o.previous;delete i.index[o.index],o.removed=!0,n&&(n.next=s),s&&(s.previous=n),i.first===o&&(i.first=s),i.last===o&&(i.last=n),Rv?i.size--:e.size--}return!!o},forEach:function(t){for(var e,i=r(this),o=Pv(t,arguments.length>1?arguments[1]:void 0);e=e?e.next:i.first;)for(o(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!h(this,t)}}),Iv(n,i?{get:function(t){var e=h(this,t);return e&&e.value},set:function(t,e){return a(this,0===t?0:t,e)}}:{add:function(t){return a(this,t=0===t?0:t,t)}}),Rv&&Mv(n,"size",{configurable:!0,get:function(){return r(this).size}}),s},setStrong:function(t,e,i){var o=e+" Iterator",s=Wv(e),n=Wv(o);Fv(t,e,(function(t,e){Hv(this,{type:o,target:t,state:s(t),kind:e,last:void 0})}),(function(){for(var t=n(this),e=t.kind,i=t.last;i&&i.removed;)i=i.previous;return t.target&&(t.last=i=i?i.next:t.state.first)?Av("keys"===e?i.key:"values"===e?i.value:[i.key,i.value],!1):(t.target=void 0,Av(void 0,!0))}),i?"entries":"values",!i,!0),jv(e)}};xv("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),Vv);var qv=m,Uv=Pi,Yv=sn,Xv=G,Gv=qv("".charAt),Kv=qv("".charCodeAt),Zv=qv("".slice),Qv=function(t){return function(e,i){var o,s,n=Yv(Xv(e)),r=Uv(i),a=n.length;return r<0||r>=a?t?"":void 0:(o=Kv(n,r))<55296||o>56319||r+1===a||(s=Kv(n,r+1))<56320||s>57343?t?Gv(n,r):o:t?Zv(n,r,r+2):s-56320+(o-55296<<10)+65536}},$v={codeAt:Qv(!1),charAt:Qv(!0)}.charAt,Jv=sn,tw=Fr,ew=Kd,iw=Zd,ow="String Iterator",sw=tw.set,nw=tw.getterFor(ow);ew(String,"String",(function(t){sw(this,{type:ow,string:Jv(t),index:0})}),(function(){var t,e=nw(this),i=e.string,o=e.index;return o>=i.length?iw(void 0,!0):(t=$v(i,o),e.index+=t.length,iw(t,!1))}));var rw=i(et.Map);class aw{constructor(){this.clear(),this._defaultIndex=0,this._groupIndex=0,this._defaultGroups=[{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},{border:"#FFA500",background:"#FFFF00",highlight:{border:"#FFA500",background:"#FFFFA3"},hover:{border:"#FFA500",background:"#FFFFA3"}},{border:"#FA0A10",background:"#FB7E81",highlight:{border:"#FA0A10",background:"#FFAFB1"},hover:{border:"#FA0A10",background:"#FFAFB1"}},{border:"#41A906",background:"#7BE141",highlight:{border:"#41A906",background:"#A1EC76"},hover:{border:"#41A906",background:"#A1EC76"}},{border:"#E129F0",background:"#EB7DF4",highlight:{border:"#E129F0",background:"#F0B3F5"},hover:{border:"#E129F0",background:"#F0B3F5"}},{border:"#7C29F0",background:"#AD85E4",highlight:{border:"#7C29F0",background:"#D3BDF0"},hover:{border:"#7C29F0",background:"#D3BDF0"}},{border:"#C37F00",background:"#FFA807",highlight:{border:"#C37F00",background:"#FFCA66"},hover:{border:"#C37F00",background:"#FFCA66"}},{border:"#4220FB",background:"#6E6EFD",highlight:{border:"#4220FB",background:"#9B9BFD"},hover:{border:"#4220FB",background:"#9B9BFD"}},{border:"#FD5A77",background:"#FFC0CB",highlight:{border:"#FD5A77",background:"#FFD1D9"},hover:{border:"#FD5A77",background:"#FFD1D9"}},{border:"#4AD63A",background:"#C2FABC",highlight:{border:"#4AD63A",background:"#E6FFE3"},hover:{border:"#4AD63A",background:"#E6FFE3"}},{border:"#990000",background:"#EE0000",highlight:{border:"#BB0000",background:"#FF3333"},hover:{border:"#BB0000",background:"#FF3333"}},{border:"#FF6000",background:"#FF6000",highlight:{border:"#FF6000",background:"#FF6000"},hover:{border:"#FF6000",background:"#FF6000"}},{border:"#97C2FC",background:"#2B7CE9",highlight:{border:"#D2E5FF",background:"#2B7CE9"},hover:{border:"#D2E5FF",background:"#2B7CE9"}},{border:"#399605",background:"#255C03",highlight:{border:"#399605",background:"#255C03"},hover:{border:"#399605",background:"#255C03"}},{border:"#B70054",background:"#FF007E",highlight:{border:"#B70054",background:"#FF007E"},hover:{border:"#B70054",background:"#FF007E"}},{border:"#AD85E4",background:"#7C29F0",highlight:{border:"#D3BDF0",background:"#7C29F0"},hover:{border:"#D3BDF0",background:"#7C29F0"}},{border:"#4557FA",background:"#000EA1",highlight:{border:"#6E6EFD",background:"#000EA1"},hover:{border:"#6E6EFD",background:"#000EA1"}},{border:"#FFC0CB",background:"#FD5A77",highlight:{border:"#FFD1D9",background:"#FD5A77"},hover:{border:"#FFD1D9",background:"#FD5A77"}},{border:"#C2FABC",background:"#74D66A",highlight:{border:"#E6FFE3",background:"#74D66A"},hover:{border:"#E6FFE3",background:"#74D66A"}},{border:"#EE0000",background:"#990000",highlight:{border:"#FF3333",background:"#BB0000"},hover:{border:"#FF3333",background:"#BB0000"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},vo(this.options,this.defaultOptions)}setOptions(t){const e=["useDefaultGroups"];if(void 0!==t)for(const i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&-1===Mp(e).call(e,i)){const e=t[i];this.add(i,e)}}clear(){this._groups=new rw,this._groupNames=[]}get(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._groups.get(t);if(void 0===i&&e)if(!1===this.options.useDefaultGroups&&this._groupNames.length>0){const e=this._groupIndex%this._groupNames.length;++this._groupIndex,i={},i.color=this._groups.get(this._groupNames[e]),this._groups.set(t,i)}else{const e=this._defaultIndex%this._defaultGroups.length;this._defaultIndex++,i={},i.color=this._defaultGroups[e],this._groups.set(t,i)}return i}add(t,e){return this._groups.has(t)||this._groupNames.push(t),this._groups.set(t,e),e}}Ti({target:"Number",stat:!0},{isNaN:function(t){return t!=t}});var hw=i(et.Number.isNaN),dw=s.isFinite,lw=Number.isFinite||function(t){return"number"==typeof t&&dw(t)};Ti({target:"Number",stat:!0},{isFinite:lw});var cw=i(et.Number.isFinite),uw=qr.some;Ti({target:"Array",proto:!0,forced:!nc("some")},{some:function(t){return uw(this,t,arguments.length>1?arguments[1]:void 0)}});var pw=No("Array").some,fw=at,gw=pw,mw=Array.prototype,yw=function(t){var e=t.some;return t===mw||fw(mw,t)&&e===mw.some?gw:e},bw=i(yw),vw=i(et.Object.getOwnPropertySymbols),ww={exports:{}},_w=Ti,xw=n,Ew=Q,Ow=T.f,Cw=D;_w({target:"Object",stat:!0,forced:!Cw||xw((function(){Ow(1)})),sham:!Cw},{getOwnPropertyDescriptor:function(t,e){return Ow(Ew(t),e)}});var kw=et.Object,Sw=ww.exports=function(t,e){return kw.getOwnPropertyDescriptor(t,e)};kw.getOwnPropertyDescriptor.sham&&(Sw.sham=!0);var Tw=i(ww.exports),Dw=Hl,Mw=Q,Iw=T,Pw=is;Ti({target:"Object",stat:!0,sham:!D},{getOwnPropertyDescriptors:function(t){for(var e,i,o=Mw(t),s=Iw.f,n=Dw(o),r={},a=0;n.length>a;)void 0!==(i=s(o,e=n[a++]))&&Pw(r,e,i);return r}});var Bw=i(et.Object.getOwnPropertyDescriptors),Nw={exports:{}},zw=Ti,Fw=D,Aw=nn.f;zw({target:"Object",stat:!0,forced:Object.defineProperties!==Aw,sham:!Fw},{defineProperties:Aw});var jw=et.Object,Rw=Nw.exports=function(t,e){return jw.defineProperties(t,e)};jw.defineProperties.sham&&(Rw.sham=!0);var Lw=i(Nw.exports),Hw={exports:{}},Ww=Ti,Vw=D,qw=Qe.f;Ww({target:"Object",stat:!0,forced:Object.defineProperty!==qw,sham:!Vw},{defineProperty:qw});var Uw=et.Object,Yw=Hw.exports=function(t,e,i){return Uw.defineProperty(t,e,i)};Uw.defineProperty.sham&&(Yw.sham=!0);var Xw=Hw.exports,Gw=i(Xw),Kw=ue,Zw=Qe.f,Qw=Kw("metadata"),$w=Function.prototype;void 0===$w[Qw]&&Zw($w,Qw,{value:null}),nr("asyncDispose"),nr("dispose"),nr("metadata");var Jw=fl,t_=m,e_=rt("Symbol"),i_=e_.keyFor,o_=t_(e_.prototype.valueOf),s_=e_.isRegisteredSymbol||function(t){try{return void 0!==i_(o_(t))}catch(t){return!1}};Ti({target:"Symbol",stat:!0},{isRegisteredSymbol:s_});for(var n_=Yt,r_=rt,a_=m,h_=Ct,d_=ue,l_=r_("Symbol"),c_=l_.isWellKnownSymbol,u_=r_("Object","getOwnPropertyNames"),p_=a_(l_.prototype.valueOf),f_=n_("wks"),g_=0,m_=u_(l_),y_=m_.length;g_=0:a>h;h+=d)h in r&&(s=i(s,r[h],h,n));return s}},B_={left:P_(!1),right:P_(!0)},N_="process"===w(s.process),z_=B_.left;Ti({target:"Array",proto:!0,forced:!N_&>>79&><83||!nc("reduce")},{reduce:function(t){var e=arguments.length;return z_(this,t,e,e>1?arguments[1]:void 0)}});var F_=No("Array").reduce,A_=at,j_=F_,R_=Array.prototype,L_=function(t){var e=t.reduce;return t===R_||A_(R_,t)&&e===R_.reduce?j_:e},H_=i(L_),W_=Zo,V_=Li,q_=$o,U_=Ze,Y_=function(t,e,i,o,s,n,r,a){for(var h,d,l=s,c=0,u=!!r&&U_(r,a);c0&&W_(h)?(d=V_(h),l=Y_(t,e,h,d,l,n-1)-1):(q_(l+1),t[l]=h),l++),c++;return l},X_=Y_,G_=It,K_=Kt,Z_=Li,Q_=Fs;Ti({target:"Array",proto:!0},{flatMap:function(t){var e,i=K_(this),o=Z_(i);return G_(t),(e=Q_(i,0)).length=X_(e,i,i,o,0,1,t,arguments.length>1?arguments[1]:void 0),e}});var $_=No("Array").flatMap,J_=at,tx=$_,ex=Array.prototype,ix=function(t){var e=t.flatMap;return t===ex||J_(ex,t)&&e===ex.flatMap?tx:e},ox=i(ix),sx=i(__);xv("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),Vv);var nx=i(et.Set),rx=i(Rb),ax=Ln,hx=Math.floor,dx=function(t,e){var i=t.length,o=hx(i/2);return i<8?lx(t,e):cx(t,dx(ax(t,0,o),e),dx(ax(t,o),e),e)},lx=function(t,e){for(var i,o,s=t.length,n=1;n0;)t[o]=t[--o];o!==n++&&(t[o]=i)}return t},cx=function(t,e,i,o){for(var s=e.length,n=i.length,r=0,a=0;r3)){if(Dx)return!0;if(Ix)return Ix<603;var t,e,i,o,s="";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:i=3;break;case 68:case 71:i=4;break;default:i=2}for(o=0;o<47;o++)Px.push({k:e+o,v:i})}for(Px.sort((function(t,e){return e.v-t.v})),o=0;oOx(i)?1:-1}}(t)),i=xx(s),o=0;oe(t)),t)}_add(t,e){null!=e&&this._target.add(this._transformItems(this._source.get(e.items)))}_update(t,e){null!=e&&this._target.update(this._transformItems(this._source.get(e.items)))}_remove(t,e){null!=e&&this._target.remove(this._transformItems(e.oldData))}}class TE{constructor(t){k_(this,"_source",void 0),k_(this,"_transformers",[]),this._source=t}filter(t){return this._transformers.push((e=>ju(e).call(e,t))),this}map(t){return this._transformers.push((e=>Zl(e).call(e,t))),this}flatMap(t){return this._transformers.push((e=>ox(e).call(e,t))),this}to(t){return new SE(this._source,this._transformers,t)}}function DE(t){return"string"==typeof t||"number"==typeof t}class ME{constructor(t){k_(this,"delay",void 0),k_(this,"max",void 0),k_(this,"_queue",[]),k_(this,"_timeout",null),k_(this,"_extended",null),this.delay=null,this.max=1/0,this.setOptions(t)}setOptions(t){t&&void 0!==t.delay&&(this.delay=t.delay),t&&void 0!==t.max&&(this.max=t.max),this._flushIfNeeded()}static extend(t,e){const i=new ME(e);if(void 0!==t.flush)throw new Error("Target object already has a property flush");t.flush=()=>{i.flush()};const o=[{name:"flush",original:void 0}];if(e&&e.replace)for(let s=0;sthis.max&&this.flush(),null!=this._timeout&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&"number"==typeof this.delay&&(this._timeout=sf((()=>{this.flush()}),this.delay))}flush(){var t,e;mc(t=Jc(e=this._queue).call(e,0)).call(t,(t=>{t.fn.apply(t.context||t.fn,t.args||[])}))}}class IE{constructor(){k_(this,"_subscribers",{"*":[],add:[],remove:[],update:[]}),k_(this,"subscribe",IE.prototype.on),k_(this,"unsubscribe",IE.prototype.off)}_trigger(t,e,i){var o;if("*"===t)throw new Error("Cannot trigger event *");mc(o=[...this._subscribers[t],...this._subscribers["*"]]).call(o,(o=>{o(t,e,null!=i?i:null)}))}on(t,e){"function"==typeof e&&this._subscribers[t].push(e)}off(t,e){var i;this._subscribers[t]=ju(i=this._subscribers[t]).call(i,(t=>t!==e))}}class PE{constructor(t){k_(this,"_pairs",void 0),this._pairs=t}*[sx](){for(const[t,e]of this._pairs)yield[t,e]}*entries(){for(const[t,e]of this._pairs)yield[t,e]}*keys(){for(const[t]of this._pairs)yield t}*values(){for(const[,t]of this._pairs)yield t}toIdArray(){var t;return Zl(t=[...this._pairs]).call(t,(t=>t[0]))}toItemArray(){var t;return Zl(t=[...this._pairs]).call(t,(t=>t[1]))}toEntryArray(){return[...this._pairs]}toObjectMap(){const t=Np(null);for(const[e,i]of this._pairs)t[e]=i;return t}toMap(){return new rw(this._pairs)}toIdSet(){return new nx(this.toIdArray())}toItemSet(){return new nx(this.toItemArray())}cache(){return new PE([...this._pairs])}distinct(t){const e=new nx;for(const[i,o]of this._pairs)e.add(t(o,i));return e}filter(t){const e=this._pairs;return new PE({*[sx](){for(const[i,o]of e)t(o,i)&&(yield[i,o])}})}forEach(t){for(const[e,i]of this._pairs)t(i,e)}map(t){const e=this._pairs;return new PE({*[sx](){for(const[i,o]of e)yield[i,t(o,i)]}})}max(t){const e=rx(this._pairs);let i=e.next();if(i.done)return null;let o=i.value[1],s=t(i.value[1],i.value[0]);for(;!(i=e.next()).done;){const[e,n]=i.value,r=t(n,e);r>s&&(s=r,o=n)}return o}min(t){const e=rx(this._pairs);let i=e.next();if(i.done)return null;let o=i.value[1],s=t(i.value[1],i.value[0]);for(;!(i=e.next()).done;){const[e,n]=i.value,r=t(n,e);r{var e;return rx(qx(e=[...this._pairs]).call(e,((e,i)=>{let[o,s]=e,[n,r]=i;return t(s,r,o,n)})))}})}}class BE extends IE{get idProp(){return this._idProp}constructor(t,e){super(),k_(this,"flush",void 0),k_(this,"length",void 0),k_(this,"_options",void 0),k_(this,"_data",void 0),k_(this,"_idProp",void 0),k_(this,"_queue",null),t&&!Vl(t)&&(e=t,t=[]),this._options=e||{},this._data=new rw,this.length=0,this._idProp=this._options.fieldId||"id",t&&t.length&&this.add(t),this.setOptions(e)}setOptions(t){t&&void 0!==t.queue&&(!1===t.queue?this._queue&&(this._queue.destroy(),this._queue=null):(this._queue||(this._queue=ME.extend(this,{replace:["add","update","remove"]})),t.queue&&"object"==typeof t.queue&&this._queue.setOptions(t.queue)))}add(t,e){const i=[];let o;if(Vl(t)){const e=Zl(t).call(t,(t=>t[this._idProp]));if(bw(e).call(e,(t=>this._data.has(t))))throw new Error("A duplicate id was found in the parameter array.");for(let e=0,s=t.length;e{const e=t[r];if(null!=e&&this._data.has(e)){const i=t,r=vo({},this._data.get(e)),a=this._updateItem(i);o.push(a),n.push(i),s.push(r)}else{const e=this._addItem(t);i.push(e)}};if(Vl(t))for(let e=0,i=t.length;e{const e=this._data.get(t[this._idProp]);if(null==e)throw new Error("Updating non-existent items is not allowed.");return{oldData:e,update:t}}))).call(i,(t=>{let{oldData:e,update:i}=t;const o=e[this._idProp],s=um(e,i);return this._data.set(o,s),{id:o,oldData:e,updatedData:s}}));if(o.length){const t={items:Zl(o).call(o,(t=>t.id)),oldData:Zl(o).call(o,(t=>t.oldData)),data:Zl(o).call(o,(t=>t.updatedData))};return this._trigger("update",t,e),t.items}return[]}get(t,e){let i,o,s;DE(t)?(i=t,s=e):Vl(t)?(o=t,s=e):s=t;const n=s&&"Object"===s.returnType?"Object":"Array",r=s&&ju(s),a=[];let h,d,l;if(null!=i)h=this._data.get(i),h&&r&&!r(h)&&(h=void 0);else if(null!=o)for(let t=0,e=o.length;t(e[i]=t[i],e)),{}):t}_sort(t,e){if("string"==typeof e){const i=e;qx(t).call(t,((t,e)=>{const o=t[i],s=e[i];return o>s?1:oi)&&(e=s,i=n)}return e||null}min(t){let e=null,i=null;for(const s of hE(o=this._data).call(o)){var o;const n=s[t];"number"==typeof n&&(null==i||nn(t)&&r(t)),null==o?this._data.get(s):this._data.get(o,s)}getIds(t){if(this._data.length){const e=ju(this._options),i=null!=t?ju(t):null;let o;return o=i?e?t=>e(t)&&i(t):i:e,this._data.getIds({filter:o,order:t&&t.order})}return[]}forEach(t,e){if(this._data){var i;const o=ju(this._options),s=e&&ju(e);let n;n=s?o?function(t){return o(t)&&s(t)}:s:o,mc(i=this._data).call(i,t,{filter:n,order:e&&e.order})}}map(t,e){if(this._data){var i;const o=ju(this._options),s=e&&ju(e);let n;return n=s?o?t=>o(t)&&s(t):s:o,Zl(i=this._data).call(i,t,{filter:n,order:e&&e.order})}return[]}getDataSet(){return this._data.getDataSet()}stream(t){var e;return this._data.stream(t||{[sx]:Lo(e=Jx(this._ids)).call(e,this._ids)})}dispose(){var t;null!==(t=this._data)&&void 0!==t&&t.off&&this._data.off("*",this._listener);const e="This data view has already been disposed of.",i={get:()=>{throw new Error(e)},set:()=>{throw new Error(e)},configurable:!1};for(const t of Wl(NE.prototype))bE(this,t,i)}_onEvent(t,e,i){if(!e||!e.items||!this._data)return;const o=e.items,s=[],n=[],r=[],a=[],h=[],d=[];switch(t){case"add":for(let t=0,e=o.length;te.x&&t.tope.y}function oO(t){return"string"==typeof t&&""!==t}function sO(t,e,i,o){let s=o.x,n=o.y;if("function"==typeof o.distanceToBorder){const i=o.distanceToBorder(t,e),r=Math.sin(e)*i,a=Math.cos(e)*i;a===i?(s+=i,n=o.y):r===i?(s=o.x,n-=i):(s+=a,n-=r)}else o.shape.width>o.shape.height?(s=o.x+.5*o.shape.width,n=o.y-i):(s=o.x+i,n=o.y-.5*o.shape.height);return{x:s,y:n}}class nO{constructor(t){this.measureText=t,this.current=0,this.width=0,this.height=0,this.lines=[]}_add(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"normal";void 0===this.lines[t]&&(this.lines[t]={width:0,height:0,blocks:[]});let o=e;void 0!==e&&""!==e||(o=" ");const s=this.measureText(o,i),n=vo({},hE(s));n.text=e,n.width=s.width,n.mod=i,void 0!==e&&""!==e||(n.width=0),this.lines[t].blocks.push(n),this.lines[t].width+=n.width}curWidth(){const t=this.lines[this.current];return void 0===t?0:t.width}append(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal";this._add(this.current,t,e)}newLine(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal";this._add(this.current,t,e),this.current++}determineLineHeights(){for(let t=0;tt&&(t=o.width),e+=o.height}this.width=t,this.height=e}removeEmptyBlocks(){const t=[];for(let e=0;e"://,""://,""://,"":/<\/b>/,"":/<\/i>/,"":/<\/code>/,"*":/\*/,_:/_/,"`":/`/,afterBold:/[^*]/,afterItal:/[^_]/,afterMono:/[^`]/};class aO{constructor(t){this.text=t,this.bold=!1,this.ital=!1,this.mono=!1,this.spacing=!1,this.position=0,this.buffer="",this.modStack=[],this.blocks=[]}mod(){return 0===this.modStack.length?"normal":this.modStack[0]}modName(){return 0===this.modStack.length?"normal":"mono"===this.modStack[0]?"mono":this.bold&&this.ital?"boldital":this.bold?"bold":this.ital?"ital":void 0}emitBlock(){this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(this.blocks.push({text:this.buffer,mod:this.modName()}),this.buffer="")}add(t){" "===t&&(this.spacing=!0),this.spacing&&(this.buffer+=" ",this.spacing=!1)," "!=t&&(this.buffer+=t)}parseWS(t){return!!/[ \t]/.test(t)&&(this.mono?this.add(t):this.spacing=!0,!0)}setTag(t){this.emitBlock(),this[t]=!0,this.modStack.unshift(t)}unsetTag(t){this.emitBlock(),this[t]=!1,this.modStack.shift()}parseStartTag(t,e){return!(this.mono||this[t]||!this.match(e))&&(this.setTag(t),!0)}match(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const[i,o]=this.prepareRegExp(t),s=i.test(this.text.substr(this.position,o));return s&&e&&(this.position+=o-1),s}parseEndTag(t,e,i){let o=this.mod()===t;return o="mono"===t?o&&this.mono:o&&!this.mono,!(!o||!this.match(e))&&(void 0!==i?(this.position===this.text.length-1||this.match(i,!1))&&this.unsetTag(t):this.unsetTag(t),!0)}replace(t,e){return!!this.match(t)&&(this.add(e),this.position+=length-1,!0)}prepareRegExp(t){let e,i;if(t instanceof RegExp)i=t,e=1;else{const o=rO[t];i=void 0!==o?o:new RegExp(t),e=t.length}return[i,e]}}class hO{constructor(t,e,i,o){this.ctx=t,this.parent=e,this.selected=i,this.hover=o;this.lines=new nO(((e,s)=>{if(void 0===e)return 0;const n=this.parent.getFormattingValues(t,i,o,s);let r=0;if(""!==e){r=this.ctx.measureText(e).width}return{width:r,values:n}}))}process(t){if(!oO(t))return this.lines.finalize();const e=this.parent.fontOptions;t=(t=t.replace(/\r\n/g,"\n")).replace(/\r/g,"\n");const i=String(t).split("\n"),o=i.length;if(e.multi)for(let t=0;t0)for(let t=0;t0)for(let t=0;t{if(/&/.test(t)){return e.replace(e.text,"<","<")||e.replace(e.text,"&","&")||e.add("&"),!0}return!1};for(;e.position")||e.parseStartTag("ital","")||e.parseStartTag("mono","")||e.parseEndTag("bold","")||e.parseEndTag("ital","")||e.parseEndTag("mono",""))||i(t)||e.add(t),e.position++}return e.emitBlock(),e.blocks}splitMarkdownBlocks(t){const e=new aO(t);let i=!0;const o=t=>!!/\\/.test(t)&&(e.positionthis.parent.fontOptions.maxWdt}getLongestFit(t){let e="",i=0;for(;i1&&void 0!==arguments[1]?arguments[1]:"normal",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.parent.getFormattingValues(this.ctx,this.selected,this.hover,e);let o=(t=(t=t.replace(/^( +)/g,"$1\r")).replace(/([^\r][^ ]*)( +)/g,"$1\r$2\r")).split("\r");for(;o.length>0;){let t=this.getLongestFit(o);if(0===t){const t=o[0],i=this.getLongestFitWord(t);this.lines.newLine(zl(t).call(t,0,i),e),o[0]=zl(t).call(t,i)}else{let s=t;" "===o[t-1]?t--:" "===o[s]&&s++;const n=zl(o).call(o,0,t).join("");t==o.length&&i?this.lines.append(n,e):this.lines.newLine(n,e),o=zl(o).call(o,s)}}}}const dO=["bold","ital","boldital","mono"];class lO{constructor(t,e){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.body=t,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(e),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=i}setOptions(t){if(this.elementOptions=t,this.initFontOptions(t.font),oO(t.label)?this.labelDirty=!0:t.label=void 0,void 0!==t.font&&null!==t.font)if("string"==typeof t.font)this.baseSize=this.fontOptions.size;else if("object"==typeof t.font){const e=t.font.size;void 0!==e&&(this.baseSize=e)}}initFontOptions(t){Rm(dO,(t=>{this.fontOptions[t]={}})),lO.parseFontString(this.fontOptions,t)?this.fontOptions.vadjust=0:Rm(t,((t,e)=>{null!=t&&"object"!=typeof t&&(this.fontOptions[e]=t)}))}static parseFontString(t,e){if(!e||"string"!=typeof e)return!1;const i=e.split(" ");return t.size=+i[0].replace("px",""),t.face=i[1],t.color=i[2],!0}constrain(t){const e={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:"middle"},i=oy(t,"widthConstraint");if("number"==typeof i)e.maxWdt=Number(i),e.minWdt=Number(i);else if("object"==typeof i){const i=oy(t,["widthConstraint","maximum"]);"number"==typeof i&&(e.maxWdt=Number(i));const o=oy(t,["widthConstraint","minimum"]);"number"==typeof o&&(e.minWdt=Number(o))}const o=oy(t,"heightConstraint");if("number"==typeof o)e.minHgt=Number(o);else if("object"==typeof o){const i=oy(t,["heightConstraint","minimum"]);"number"==typeof i&&(e.minHgt=Number(i));const o=oy(t,["heightConstraint","valign"]);"string"==typeof o&&("top"!==o&&"bottom"!==o||(e.valign=o))}return e}update(t,e){this.setOptions(t,!0),this.propagateFonts(e),Nm(this.fontOptions,this.constrain(e)),this.fontOptions.chooser=eO("label",e)}adjustSizes(t){const e=t?t.right+t.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=e,this.fontOptions.minWdt-=e);const i=t?t.top+t.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=i)}addFontOptionsToPile(t,e){for(let i=0;i{void 0!==t&&(Object.prototype.hasOwnProperty.call(e,i)||(-1!==Mp(dO).call(dO,i)?e[i]={}:e[i]=t))}))}return e}getFontOption(t,e,i){let o;for(let s=0;s{o[e]=t})),o.size=Number(o.size),o.vadjust=Number(o.vadjust)}}draw(t,e,i,o,s){let n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"middle";if(void 0===this.elementOptions.label)return;let r=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&r=this.elementOptions.scaling.label.maxVisible&&(r=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(t,o,s,e,i,n),this._drawBackground(t),this._drawText(t,e,this.size.yLine,n,r))}_drawBackground(t){if(void 0!==this.fontOptions.background&&"none"!==this.fontOptions.background){t.fillStyle=this.fontOptions.background;const e=this.getSize();t.fillRect(e.left,e.top,e.width,e.height)}}_drawText(t,e,i){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"middle",s=arguments.length>4?arguments[4]:void 0;[e,i]=this._setAlignment(t,e,i,o),t.textAlign="left",e-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&("top"===this.fontOptions.valign&&(i-=(this.size.height-this.size.labelHeight)/2),"bottom"===this.fontOptions.valign&&(i+=(this.size.height-this.size.labelHeight)/2));for(let o=0;o0&&(t.lineWidth=a.strokeWidth,t.strokeStyle=d,t.lineJoin="round"),t.fillStyle=h,a.strokeWidth>0&&t.strokeText(a.text,e+o,i+a.vadjust),t.fillText(a.text,e+o,i+a.vadjust),o+=a.width}i+=n.height}}}_setAlignment(t,e,i,o){if(this.isEdgeLabel&&"horizontal"!==this.fontOptions.align&&!1===this.pointToSelf){e=0,i=0;const o=2;"top"===this.fontOptions.align?(t.textBaseline="alphabetic",i-=2*o):"bottom"===this.fontOptions.align?(t.textBaseline="hanging",i+=2*o):t.textBaseline="middle"}else t.textBaseline=o;return[e,i]}_getColor(t,e,i){let o=t||"#000000",s=i||"#ffffff";if(e<=this.elementOptions.scaling.label.drawThreshold){const t=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-e)));o=Vm(o,t),s=Vm(s,t)}return[o,s]}getTextSize(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(t,e,i),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}getSize(){let t=this.size.left,e=this.size.top-1;if(this.isEdgeLabel){const i=.5*-this.size.width;switch(this.fontOptions.align){case"middle":t=i,e=.5*-this.size.height;break;case"top":t=i,e=-(this.size.height+2);break;case"bottom":t=i,e=2}}return{left:t,top:e,width:this.size.width,height:this.size.height}}calculateLabelSize(t,e,i){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"middle";this._processLabel(t,e,i),this.size.left=o-.5*this.size.width,this.size.top=s-.5*this.size.height,this.size.yLine=s+.5*(1-this.lineCount)*this.fontOptions.size,"hanging"===n&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}getFormattingValues(t,e,i,o){const s=function(t,e,i){return"normal"===e?"mod"===i?"":t[i]:void 0!==t[e][i]?t[e][i]:t[i]},n={color:s(this.fontOptions,o,"color"),size:s(this.fontOptions,o,"size"),face:s(this.fontOptions,o,"face"),mod:s(this.fontOptions,o,"mod"),vadjust:s(this.fontOptions,o,"vadjust"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(e||i)&&("normal"===o&&!0===this.fontOptions.chooser&&this.elementOptions.labelHighlightBold?n.mod="bold":"function"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(n,this.elementOptions.id,e,i));let r="";return void 0!==n.mod&&""!==n.mod&&(r+=n.mod+" "),r+=n.size+"px "+n.face,t.font=r.replace(/"/g,""),n.font=t.font,n.height=n.size,n}differentState(t,e){return t!==this.selectedState||e!==this.hoverState}_processLabelText(t,e,i,o){return new hO(t,this,e,i).process(o)}_processLabel(t,e,i){if(!1===this.labelDirty&&!this.differentState(e,i))return;const o=this._processLabelText(t,e,i,this.elementOptions.label);this.fontOptions.minWdt>0&&o.width0&&o.height0&&(this.enableBorderDashes(t,e),t.stroke(),this.disableBorderDashes(t,e)),t.restore()}performFill(t,e){t.save(),t.fillStyle=e.color,this.enableShadow(t,e),gf(t).call(t),this.disableShadow(t,e),t.restore(),this.performStroke(t,e)}_addBoundingBoxMargin(t){this.boundingBox.left-=t,this.boundingBox.top-=t,this.boundingBox.bottom+=t,this.boundingBox.right+=t}_updateBoundingBox(t,e,i,o,s){void 0!==i&&this.resize(i,o,s),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}updateBoundingBox(t,e,i,o,s){this._updateBoundingBox(t,e,i,o,s)}getDimensionsFromLabel(t,e,i){this.textSize=this.labelModule.getTextSize(t,e,i);let o=this.textSize.width,s=this.textSize.height;return 0===o&&(o=14,s=14),{width:o,height:s}}}let uO=class extends cO{constructor(t,e,i){super(t,e,i),this._setMargins(i)}resize(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){const o=this.getDimensionsFromLabel(t,e,i);this.width=o.width+this.margin.right+this.margin.left,this.height=o.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}draw(t,e,i,o,s,n){this.resize(t,o,s),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,n),Wo(t,this.left,this.top,this.width,this.height,n.borderRadius),this.performFill(t,n),this.updateBoundingBox(e,i,t,o,s),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,s)}updateBoundingBox(t,e,i,o,s){this._updateBoundingBox(t,e,i,o,s);const n=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(n)}distanceToBorder(t,e){t&&this.resize(t);const i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}};class pO extends cO{constructor(t,e,i){super(t,e,i),this.labelOffset=0,this.selected=!1}setOptions(t,e,i){this.options=t,void 0===e&&void 0===i||this.setImages(e,i)}setImages(t,e){e&&this.selected?(this.imageObj=e,this.imageObjAlt=t):(this.imageObj=t,this.imageObjAlt=e)}switchImages(t){const e=t&&!this.selected||!t&&this.selected;if(this.selected=t,void 0!==this.imageObjAlt&&e){const t=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=t}}_getImagePadding(){const t={top:0,right:0,bottom:0,left:0};if(this.options.imagePadding){const e=this.options.imagePadding;"object"==typeof e?(t.top=e.top,t.right=e.right,t.bottom=e.bottom,t.left=e.left):(t.top=e,t.right=e,t.bottom=e,t.left=e)}return t}_resizeImage(){let t,e;if(!1===this.options.shapeProperties.useImageSize){let i=1,o=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?i=this.imageObj.width/this.imageObj.height:o=this.imageObj.height/this.imageObj.width),t=2*this.options.size*i,e=2*this.options.size*o}else{const i=this._getImagePadding();t=this.imageObj.width+i.left+i.right,e=this.imageObj.height+i.top+i.bottom}this.width=t,this.height=e,this.radius=.5*this.width}_drawRawCircle(t,e,i,o){this.initContextForDraw(t,o),Ho(t,e,i,o.size),this.performFill(t,o)}_drawImageAtPosition(t,e){if(0!=this.imageObj.width){t.globalAlpha=void 0!==e.opacity?e.opacity:1,this.enableShadow(t,e);let i=1;!0===this.options.shapeProperties.interpolation&&(i=this.imageObj.width/this.width/this.body.view.scale);const o=this._getImagePadding(),s=this.left+o.left,n=this.top+o.top,r=this.width-o.left-o.right,a=this.height-o.top-o.bottom;this.imageObj.drawImageAtPosition(t,i,s,n,r,a),this.disableShadow(t,e)}}_drawImageLabel(t,e,i,o,s){let n=0;if(void 0!==this.height){n=.5*this.height;const e=this.labelModule.getTextSize(t,o,s);e.lineCount>=1&&(n+=e.height/2)}const r=i+n;this.options.label&&(this.labelOffset=n),this.labelModule.draw(t,e,r,o,s,"hanging")}}let fO=class extends pO{constructor(t,e,i){super(t,e,i),this._setMargins(i)}resize(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){const o=this.getDimensionsFromLabel(t,e,i),s=Math.max(o.width+this.margin.right+this.margin.left,o.height+this.margin.top+this.margin.bottom);this.options.size=s/2,this.width=s,this.height=s,this.radius=this.width/2}}draw(t,e,i,o,s,n){this.resize(t,o,s),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,n),this.updateBoundingBox(e,i),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,i,o,s)}updateBoundingBox(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size}distanceToBorder(t){return t&&this.resize(t),.5*this.width}};class gO extends pO{constructor(t,e,i,o,s){super(t,e,i),this.setImages(o,s)}resize(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height){const t=2*this.options.size;return this.width=t,this.height=t,void(this.radius=.5*this.width)}this.needsRefresh(e,i)&&this._resizeImage()}draw(t,e,i,o,s,n){this.switchImages(o),this.resize();let r=e,a=i;"top-left"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,r+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),this._drawRawCircle(t,r,a,n),t.save(),t.clip(),this._drawImageAtPosition(t,n),t.restore(),this._drawImageLabel(t,r,a,o,s),this.updateBoundingBox(e,i)}updateBoundingBox(t,e){"top-left"===this.options.shapeProperties.coordinateOrigin?(this.boundingBox.top=e,this.boundingBox.left=t,this.boundingBox.right=t+2*this.options.size,this.boundingBox.bottom=e+2*this.options.size):(this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size),this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}distanceToBorder(t){return t&&this.resize(t),.5*this.width}}class mO extends cO{constructor(t,e,i){super(t,e,i)}resize(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{size:this.options.size};if(this.needsRefresh(e,i)){var s,n;this.labelModule.getTextSize(t,e,i);const r=2*o.size;this.width=null!==(s=this.customSizeWidth)&&void 0!==s?s:r,this.height=null!==(n=this.customSizeHeight)&&void 0!==n?n:r,this.radius=.5*this.width}}_drawShape(t,e,i,o,s,n,r,a){var h;return this.resize(t,n,r,a),this.left=o-this.width/2,this.top=s-this.height/2,this.initContextForDraw(t,a),(h=e,Object.prototype.hasOwnProperty.call(Yo,h)?Yo[h]:function(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),o=1;o{if(void 0!==this.options.label){this.labelModule.calculateLabelSize(t,n,r,o,s,"hanging");const e=s+.5*this.height+.5*this.labelModule.size.height;this.labelModule.draw(t,o,e,n,r,"hanging")}this.updateBoundingBox(o,s)}}}updateBoundingBox(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}function yO(t,e){var i=Jl(t);if(vw){var o=vw(t);e&&(o=ju(o).call(o,(function(e){return Tw(t,e).enumerable}))),i.push.apply(i,o)}return i}function bO(t){for(var e=1;e{t.save(),e(),t.restore()}}return r.nodeDimensions&&(this.customSizeWidth=r.nodeDimensions.width,this.customSizeHeight=r.nodeDimensions.height),r}distanceToBorder(t,e){return this._distanceToBorder(t,e)}}class wO extends cO{constructor(t,e,i){super(t,e,i),this._setMargins(i)}resize(t,e,i){if(this.needsRefresh(e,i)){const o=this.getDimensionsFromLabel(t,e,i).width+this.margin.right+this.margin.left;this.width=o,this.height=o,this.radius=this.width/2}}draw(t,e,i,o,s,n){this.resize(t,o,s),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,n),qo(t,e-this.width/2,i-this.height/2,this.width,this.height),this.performFill(t,n),this.updateBoundingBox(e,i,t,o,s),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,s)}distanceToBorder(t,e){return this._distanceToBorder(t,e)}}let _O=class extends mO{constructor(t,e,i){super(t,e,i)}draw(t,e,i,o,s,n){return this._drawShape(t,"diamond",4,e,i,o,s,n)}distanceToBorder(t,e){return this._distanceToBorder(t,e)}};class xO extends mO{constructor(t,e,i){super(t,e,i)}draw(t,e,i,o,s,n){return this._drawShape(t,"circle",2,e,i,o,s,n)}distanceToBorder(t){return t&&this.resize(t),this.options.size}}class EO extends cO{constructor(t,e,i){super(t,e,i)}resize(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){const o=this.getDimensionsFromLabel(t,e,i);this.height=2*o.height,this.width=o.width+o.height,this.radius=.5*this.width}}draw(t,e,i,o,s,n){this.resize(t,o,s),this.left=e-.5*this.width,this.top=i-.5*this.height,this.initContextForDraw(t,n),Vo(t,this.left,this.top,this.width,this.height),this.performFill(t,n),this.updateBoundingBox(e,i,t,o,s),this.labelModule.draw(t,e,i,o,s)}distanceToBorder(t,e){t&&this.resize(t);const i=.5*this.width,o=.5*this.height,s=Math.sin(e)*i,n=Math.cos(e)*o;return i*o/Math.sqrt(s*s+n*n)}}class OO extends cO{constructor(t,e,i){super(t,e,i),this._setMargins(i)}resize(t,e,i){this.needsRefresh(e,i)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}draw(t,e,i,o,s,n){return this.resize(t,o,s),this.options.icon.size=this.options.icon.size||50,this.left=e-this.width/2,this.top=i-this.height/2,this._icon(t,e,i,o,s,n),{drawExternalLabel:()=>{if(void 0!==this.options.label){const e=5;this.labelModule.draw(t,this.left+this.iconSize.width/2+this.margin.left,i+this.height/2+e,o)}this.updateBoundingBox(e,i)}}}updateBoundingBox(t,e){if(this.boundingBox.top=e-.5*this.options.icon.size,this.boundingBox.left=t-.5*this.options.icon.size,this.boundingBox.right=t+.5*this.options.icon.size,this.boundingBox.bottom=e+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){const t=5;this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+t)}}_icon(t,e,i,o,s,n){const r=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=[null!=this.options.icon.weight?this.options.icon.weight:o?"bold":"",(null!=this.options.icon.weight&&o?5:0)+r+"px",this.options.icon.face].join(" "),t.fillStyle=this.options.icon.color||"black",t.textAlign="center",t.textBaseline="middle",this.enableShadow(t,n),t.fillText(this.options.icon.code,e,i),this.disableShadow(t,n)):console.error("When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.")}distanceToBorder(t,e){return this._distanceToBorder(t,e)}}let CO=class extends pO{constructor(t,e,i,o,s){super(t,e,i),this.setImages(o,s)}resize(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height){const t=2*this.options.size;return this.width=t,void(this.height=t)}this.needsRefresh(e,i)&&this._resizeImage()}draw(t,e,i,o,s,n){t.save(),this.switchImages(o),this.resize();let r=e,a=i;if("top-left"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,r+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),!0===this.options.shapeProperties.useBorderWithImage){const e=this.options.borderWidth,i=this.options.borderWidthSelected||2*this.options.borderWidth,r=(o?i:e)/this.body.view.scale;t.lineWidth=Math.min(this.width,r),t.beginPath();let a=o?this.options.color.highlight.border:s?this.options.color.hover.border:this.options.color.border,h=o?this.options.color.highlight.background:s?this.options.color.hover.background:this.options.color.background;void 0!==n.opacity&&(a=Vm(a,n.opacity),h=Vm(h,n.opacity)),t.strokeStyle=a,t.fillStyle=h,t.rect(this.left-.5*t.lineWidth,this.top-.5*t.lineWidth,this.width+t.lineWidth,this.height+t.lineWidth),gf(t).call(t),this.performStroke(t,n),t.closePath()}this._drawImageAtPosition(t,n),this._drawImageLabel(t,r,a,o,s),this.updateBoundingBox(e,i),t.restore()}updateBoundingBox(t,e){this.resize(),"top-left"===this.options.shapeProperties.coordinateOrigin?(this.left=t,this.top=e):(this.left=t-this.width/2,this.top=e-this.height/2),this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}distanceToBorder(t,e){return this._distanceToBorder(t,e)}};class kO extends mO{constructor(t,e,i){super(t,e,i)}draw(t,e,i,o,s,n){return this._drawShape(t,"square",2,e,i,o,s,n)}distanceToBorder(t,e){return this._distanceToBorder(t,e)}}class SO extends mO{constructor(t,e,i){super(t,e,i)}draw(t,e,i,o,s,n){return this._drawShape(t,"hexagon",4,e,i,o,s,n)}distanceToBorder(t,e){return this._distanceToBorder(t,e)}}class TO extends mO{constructor(t,e,i){super(t,e,i)}draw(t,e,i,o,s,n){return this._drawShape(t,"star",4,e,i,o,s,n)}distanceToBorder(t,e){return this._distanceToBorder(t,e)}}class DO extends cO{constructor(t,e,i){super(t,e,i),this._setMargins(i)}resize(t,e,i){this.needsRefresh(e,i)&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}draw(t,e,i,o,s,n){this.resize(t,o,s),this.left=e-this.width/2,this.top=i-this.height/2,this.enableShadow(t,n),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,s),this.disableShadow(t,n),this.updateBoundingBox(e,i,t,o,s)}distanceToBorder(t,e){return this._distanceToBorder(t,e)}}let MO=class extends mO{constructor(t,e,i){super(t,e,i)}draw(t,e,i,o,s,n){return this._drawShape(t,"triangle",3,e,i,o,s,n)}distanceToBorder(t,e){return this._distanceToBorder(t,e)}};class IO extends mO{constructor(t,e,i){super(t,e,i)}draw(t,e,i,o,s,n){return this._drawShape(t,"triangleDown",3,e,i,o,s,n)}distanceToBorder(t,e){return this._distanceToBorder(t,e)}}function PO(t,e){var i=Jl(t);if(vw){var o=vw(t);e&&(o=ju(o).call(o,(function(e){return Tw(t,e).enumerable}))),i.push.apply(i,o)}return i}function BO(t){for(var e=1;enull!=e[t]));r.push("font"),Bm(r,t,n),t.color=Um(t.color)}static parseOptions(t,e){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},s=arguments.length>4?arguments[4]:void 0;if(Bm(["color","fixed","shadow"],t,e,i),NO.checkMass(e),void 0!==t.opacity&&(NO.checkOpacity(t.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+t.opacity),t.opacity=void 0)),void 0!==e.opacity&&(NO.checkOpacity(e.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+e.opacity),e.opacity=void 0)),e.shapeProperties&&!NO.checkCoordinateOrigin(e.shapeProperties.coordinateOrigin)&&console.error("Invalid option for node coordinateOrigin, found: "+e.shapeProperties.coordinateOrigin),ey(t,e,"shadow",o),void 0!==e.color&&null!==e.color){const i=Um(e.color);Mm(t.color,i)}else!0===i&&null===e.color&&(t.color=ty(o.color));void 0!==e.fixed&&null!==e.fixed&&("boolean"==typeof e.fixed?(t.fixed.x=e.fixed,t.fixed.y=e.fixed):(void 0!==e.fixed.x&&"boolean"==typeof e.fixed.x&&(t.fixed.x=e.fixed.x),void 0!==e.fixed.y&&"boolean"==typeof e.fixed.y&&(t.fixed.y=e.fixed.y))),!0===i&&null===e.font&&(t.font=ty(o.font)),NO.updateGroupOptions(t,e,s),void 0!==e.scaling&&ey(t.scaling,e.scaling,"label",o.scaling)}getFormattingValues(){const t={color:this.options.color.background,opacity:this.options.opacity,borderWidth:this.options.borderWidth,borderColor:this.options.color.border,size:this.options.size,borderDashes:this.options.shapeProperties.borderDashes,borderRadius:this.options.shapeProperties.borderRadius,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y};if(this.selected||this.hover?!0===this.chooser?this.selected?(null!=this.options.borderWidthSelected?t.borderWidth=this.options.borderWidthSelected:t.borderWidth*=2,t.color=this.options.color.highlight.background,t.borderColor=this.options.color.highlight.border,t.shadow=this.options.shadow.enabled):this.hover&&(t.color=this.options.color.hover.background,t.borderColor=this.options.color.hover.border,t.shadow=this.options.shadow.enabled):"function"==typeof this.chooser&&(this.chooser(t,this.options.id,this.selected,this.hover),!1===t.shadow&&(t.shadowColor===this.options.shadow.color&&t.shadowSize===this.options.shadow.size&&t.shadowX===this.options.shadow.x&&t.shadowY===this.options.shadow.y||(t.shadow=!0))):t.shadow=this.options.shadow.enabled,void 0!==this.options.opacity){const e=this.options.opacity;t.borderColor=Vm(t.borderColor,e),t.color=Vm(t.color,e),t.shadowColor=Vm(t.shadowColor,e)}return t}updateLabelModule(t){void 0!==this.options.label&&null!==this.options.label||(this.options.label=""),NO.updateGroupOptions(this.options,BO(BO({},t),{},{color:t&&t.color||this._localColor||void 0}),this.grouplist);const e=this.grouplist.get(this.options.group,!1),i=[t,this.options,e,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,i),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}updateShape(t){if(t===this.options.shape&&this.shape)this.shape.setOptions(this.options,this.imageObj,this.imageObjAlt);else switch(this.options.shape){case"box":this.shape=new uO(this.options,this.body,this.labelModule);break;case"circle":this.shape=new fO(this.options,this.body,this.labelModule);break;case"circularImage":this.shape=new gO(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case"custom":this.shape=new vO(this.options,this.body,this.labelModule,this.options.ctxRenderer);break;case"database":this.shape=new wO(this.options,this.body,this.labelModule);break;case"diamond":this.shape=new _O(this.options,this.body,this.labelModule);break;case"dot":this.shape=new xO(this.options,this.body,this.labelModule);break;case"ellipse":default:this.shape=new EO(this.options,this.body,this.labelModule);break;case"icon":this.shape=new OO(this.options,this.body,this.labelModule);break;case"image":this.shape=new CO(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case"square":this.shape=new kO(this.options,this.body,this.labelModule);break;case"hexagon":this.shape=new SO(this.options,this.body,this.labelModule);break;case"star":this.shape=new TO(this.options,this.body,this.labelModule);break;case"text":this.shape=new DO(this.options,this.body,this.labelModule);break;case"triangle":this.shape=new MO(this.options,this.body,this.labelModule);break;case"triangleDown":this.shape=new IO(this.options,this.body,this.labelModule)}this.needsRefresh()}select(){this.selected=!0,this.needsRefresh()}unselect(){this.selected=!1,this.needsRefresh()}needsRefresh(){this.shape.refreshNeeded=!0}getTitle(){return this.options.title}distanceToBorder(t,e){return this.shape.distanceToBorder(t,e)}isFixed(){return this.options.fixed.x&&this.options.fixed.y}isSelected(){return this.selected}getValue(){return this.options.value}getLabelSize(){return this.labelModule.size()}setValueRange(t,e,i){if(void 0!==this.options.value){const o=this.options.scaling.customScalingFunction(t,e,i,this.options.value),s=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){const t=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+o*t}this.options.size=this.options.scaling.min+o*s}else this.options.size=this.baseSize,this.options.font.size=this.baseFontSize;this.updateLabelModule()}draw(t){const e=this.getFormattingValues();return this.shape.draw(t,this.x,this.y,this.selected,this.hover,e)||{}}updateBoundingBox(t){this.shape.updateBoundingBox(this.x,this.y,t)}resize(t){const e=this.getFormattingValues();this.shape.resize(t,this.selected,this.hover,e)}getItemsOnPoint(t){const e=[];return this.labelModule.visible()&&iO(this.labelModule.getSize(),t)&&e.push({nodeId:this.id,labelId:0}),iO(this.shape.boundingBox,t)&&e.push({nodeId:this.id}),e}isOverlappingWith(t){return this.shape.leftt.left&&this.shape.topt.top}isBoundingBoxOverlappingWith(t){return this.shape.boundingBox.leftt.left&&this.shape.boundingBox.topt.top}static checkMass(t,e){if(void 0!==t.mass&&t.mass<=0){let i="";void 0!==e&&(i=" in node id: "+e),console.error("%cNegative or zero mass disallowed"+i+", setting mass to 1.",gy),t.mass=1}}}class zO{constructor(t,e,i,o){var s;if(this.body=t,this.images=e,this.groups=i,this.layoutEngine=o,this.body.functions.createNode=Lo(s=this.create).call(s,this),this.nodesListeners={add:(t,e)=>{this.add(e.items)},update:(t,e)=>{this.update(e.items,e.data,e.oldData)},remove:(t,e)=>{this.remove(e.items)}},this.defaultOptions={borderWidth:1,borderWidthSelected:void 0,brokenImage:void 0,color:{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},opacity:void 0,fixed:{x:!1,y:!1},font:{color:"#343434",size:14,face:"arial",background:"none",strokeWidth:0,strokeColor:"#ffffff",align:"center",vadjust:0,multi:!1,bold:{mod:"bold"},boldital:{mod:"bold italic"},ital:{mod:"italic"},mono:{mod:"",size:15,face:"monospace",vadjust:2}},group:void 0,hidden:!1,icon:{face:"FontAwesome",code:void 0,size:50,color:"#2B7CE9"},image:void 0,imagePadding:{top:0,right:0,bottom:0,left:0},label:void 0,labelHighlightBold:!0,level:void 0,margin:{top:5,right:5,bottom:5,left:5},mass:1,physics:!0,scaling:{min:10,max:30,label:{enabled:!1,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,o){if(e===t)return.5;{const i=1/(e-t);return Math.max(0,(o-t)*i)}}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:10,x:5,y:5},shape:"ellipse",shapeProperties:{borderDashes:!1,borderRadius:6,interpolation:!0,useImageSize:!1,useBorderWithImage:!1,coordinateOrigin:"center"},size:25,title:void 0,value:void 0,x:void 0,y:void 0},this.defaultOptions.mass<=0)throw"Internal error: mass in defaultOptions of NodesHandler may not be zero or negative";this.options=ty(this.defaultOptions),this.bindEventListeners()}bindEventListeners(){var t,e;this.body.emitter.on("refreshNodes",Lo(t=this.refresh).call(t,this)),this.body.emitter.on("refresh",Lo(e=this.refresh).call(e,this)),this.body.emitter.on("destroy",(()=>{Rm(this.nodesListeners,((t,e)=>{this.body.data.nodes&&this.body.data.nodes.off(e,t)})),delete this.body.functions.createNode,delete this.nodesListeners.add,delete this.nodesListeners.update,delete this.nodesListeners.remove,delete this.nodesListeners}))}setOptions(t){if(void 0!==t){if(NO.parseOptions(this.options,t),void 0!==t.opacity&&(hw(t.opacity)||!cw(t.opacity)||t.opacity<0||t.opacity>1?console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+t.opacity):this.options.opacity=t.opacity),void 0!==t.shape)for(const t in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,t)&&this.body.nodes[t].updateShape();if(void 0!==t.font||void 0!==t.widthConstraint||void 0!==t.heightConstraint)for(const t of Jl(this.body.nodes))this.body.nodes[t].updateLabelModule(),this.body.nodes[t].needsRefresh();if(void 0!==t.size)for(const t in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,t)&&this.body.nodes[t].needsRefresh();void 0===t.hidden&&void 0===t.physics||this.body.emitter.emit("_dataChanged")}}setData(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.body.data.nodes;if(FE("id",t))this.body.data.nodes=t;else if(Vl(t))this.body.data.nodes=new BE,this.body.data.nodes.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.body.data.nodes=new BE}if(i&&Rm(this.nodesListeners,(function(t,e){i.off(e,t)})),this.body.nodes={},this.body.data.nodes){const t=this;Rm(this.nodesListeners,(function(e,i){t.body.data.nodes.on(i,e)}));const e=this.body.data.nodes.getIds();this.add(e,!0)}!1===e&&this.body.emitter.emit("_dataChanged")}add(t){let e,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const o=[];for(let i=0;i1&&void 0!==arguments[1]?arguments[1]:NO)(t,this.body,this.images,this.groups,this.options,this.defaultOptions)}refresh(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Rm(this.body.nodes,((e,i)=>{const o=this.body.data.nodes.get(i);void 0!==o&&(!0===t&&e.setOptions({x:null,y:null}),e.setOptions({fixed:!1}),e.setOptions(o))}))}getPositions(t){const e={};if(void 0!==t){if(!0===Vl(t)){for(let i=0;i{this.body.emitter.emit("startSimulation")}),0)):console.error("Node id supplied to moveNode does not exist. Provided: ",t)}}var FO=Ti,AO=Math.hypot,jO=Math.abs,RO=Math.sqrt;FO({target:"Math",stat:!0,arity:2,forced:!!AO&&AO(1/0,NaN)!==1/0},{hypot:function(t,e){for(var i,o,s=0,n=0,r=arguments.length,a=0;n0?(o=i/a)*o:i;return a===1/0?1/0:a*RO(s)}});var LO=i(et.Math.hypot);class HO{static transform(t,e){Vl(t)||(t=[t]);const i=e.point.x,o=e.point.y,s=e.angle,n=e.length;for(let e=0;e4&&void 0!==arguments[4]?arguments[4]:this.getViaNode();t.strokeStyle=this.getColor(t,e),t.lineWidth=e.width,!1!==e.dashes?this._drawDashedLine(t,e,s):this._drawLine(t,e,s)}_drawLine(t,e,i,o,s){if(this.from!=this.to)this._line(t,e,i,o,s);else{const[i,o,s]=this._getCircleData(t);this._circle(t,e,i,o,s)}}_drawDashedLine(t,e,i,o,s){t.lineCap="round";const n=Vl(e.dashes)?e.dashes:[5,5];if(void 0!==t.setLineDash){if(t.save(),t.setLineDash(n),t.lineDashOffset=0,this.from!=this.to)this._line(t,e,i);else{const[i,o,s]=this._getCircleData(t);this._circle(t,e,i,o,s)}t.setLineDash([0]),t.lineDashOffset=0,t.restore()}else{if(this.from!=this.to)Uo(t,this.from.x,this.from.y,this.to.x,this.to.y,n);else{const[i,o,s]=this._getCircleData(t);this._circle(t,e,i,o,s)}this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}}findBorderPosition(t,e,i){return this.from!=this.to?this._findBorderPosition(t,e,i):this._findBorderPositionCircle(t,e,i)}findBorderPositions(t){if(this.from!=this.to)return{from:this._findBorderPosition(this.from,t),to:this._findBorderPosition(this.to,t)};{var e;const[i,o]=zl(e=this._getCircleData(t)).call(e,0,2);return{from:this._findBorderPositionCircle(this.from,t,{x:i,y:o,low:.25,high:.6,direction:-1}),to:this._findBorderPositionCircle(this.from,t,{x:i,y:o,low:.6,high:.8,direction:1})}}}_getCircleData(t){const e=this.options.selfReference.size;void 0!==t&&void 0===this.from.shape.width&&this.from.shape.resize(t);const i=sO(t,this.options.selfReference.angle,e,this.from);return[i.x,i.y,e]}_pointOnCircle(t,e,i,o){const s=2*o*Math.PI;return{x:t+i*Math.cos(s),y:e-i*Math.sin(s)}}_findBorderPositionCircle(t,e,i){const o=i.x,s=i.y;let n=i.low,r=i.high;const a=i.direction,h=this.options.selfReference.size;let d,l=.5*(n+r),c=0;!0===this.options.arrowStrikethrough&&(-1===a?c=this.options.endPointOffset.from:1===a&&(c=this.options.endPointOffset.to));let u=0;do{l=.5*(n+r),d=this._pointOnCircle(o,s,h,l);const i=Math.atan2(t.y-d.y,t.x-d.x),p=t.distanceToBorder(e,i)+c-Math.sqrt(Math.pow(d.x-t.x,2)+Math.pow(d.y-t.y,2));if(Math.abs(p)<.05)break;p>0?a>0?n=l:r=l:a>0?r=l:n=l,++u}while(n<=r&&u<10);return iC(iC({},d),{},{t:l})}getLineWidth(t,e){return!0===t?Math.max(this.selectionWidth,.3/this._body.view.scale):!0===e?Math.max(this.hoverWidth,.3/this._body.view.scale):Math.max(this.options.width,.3/this._body.view.scale)}getColor(t,e){if(!1!==e.inheritsColor){if("both"===e.inheritsColor&&this.from.id!==this.to.id){const i=t.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y);let o=this.from.options.color.highlight.border,s=this.to.options.color.highlight.border;return!1===this.from.selected&&!1===this.to.selected?(o=Vm(this.from.options.color.border,e.opacity),s=Vm(this.to.options.color.border,e.opacity)):!0===this.from.selected&&!1===this.to.selected?s=this.to.options.color.border:!1===this.from.selected&&!0===this.to.selected&&(o=this.from.options.color.border),i.addColorStop(0,o),i.addColorStop(1,s),i}return"to"===e.inheritsColor?Vm(this.to.options.color.border,e.opacity):Vm(this.from.options.color.border,e.opacity)}return Vm(e.color,e.opacity)}_circle(t,e,i,o,s){this.enableShadow(t,e);let n=0,r=2*Math.PI;if(!this.options.selfReference.renderBehindTheNode){const e=this.options.selfReference.angle,s=this.options.selfReference.angle+Math.PI,a=this._findBorderPositionCircle(this.from,t,{x:i,y:o,low:e,high:s,direction:-1}),h=this._findBorderPositionCircle(this.from,t,{x:i,y:o,low:e,high:s,direction:1});n=Math.atan2(a.y-o,a.x-i),r=Math.atan2(h.y-o,h.x-i)}t.beginPath(),t.arc(i,o,s,n,r,!1),t.stroke(),this.disableShadow(t,e)}getDistanceToEdge(t,e,i,o,s,n){if(this.from!=this.to)return this._getDistanceToEdge(t,e,i,o,s,n);{const[t,e,i]=this._getCircleData(void 0),o=t-s,r=e-n;return Math.abs(Math.sqrt(o*o+r*r)-i)}}_getDistanceToLine(t,e,i,o,s,n){const r=i-t,a=o-e;let h=((s-t)*r+(n-e)*a)/(r*r+a*a);h>1?h=1:h<0&&(h=0);const d=t+h*r-s,l=e+h*a-n;return Math.sqrt(d*d+l*l)}getArrowData(t,e,i,o,s,n){let r,a,h,d,l,c,u;const p=n.width;"from"===e?(h=this.from,d=this.to,l=n.fromArrowScale<0,c=Math.abs(n.fromArrowScale),u=n.fromArrowType):"to"===e?(h=this.to,d=this.from,l=n.toArrowScale<0,c=Math.abs(n.toArrowScale),u=n.toArrowType):(h=this.to,d=this.from,l=n.middleArrowScale<0,c=Math.abs(n.middleArrowScale),u=n.middleArrowType);const f=15*c+3*p;if(h!=d){const o=f/LO(h.x-d.x,h.y-d.y);if("middle"!==e)if(!0===this.options.smooth.enabled){const s=this._findBorderPosition(h,t,{via:i}),n=this.getPoint(s.t+o*("from"===e?1:-1),i);r=Math.atan2(s.y-n.y,s.x-n.x),a=s}else r=Math.atan2(h.y-d.y,h.x-d.x),a=this._findBorderPosition(h,t);else{const t=(l?-o:o)/2,e=this.getPoint(.5+t,i),s=this.getPoint(.5-t,i);r=Math.atan2(e.y-s.y,e.x-s.x),a=this.getPoint(.5,i)}}else{const[i,o,s]=this._getCircleData(t);if("from"===e){const e=this.options.selfReference.angle,s=this.options.selfReference.angle+Math.PI,n=this._findBorderPositionCircle(this.from,t,{x:i,y:o,low:e,high:s,direction:-1});r=-2*n.t*Math.PI+1.5*Math.PI+.1*Math.PI,a=n}else if("to"===e){const e=this.options.selfReference.angle,s=this.options.selfReference.angle+Math.PI,n=this._findBorderPositionCircle(this.from,t,{x:i,y:o,low:e,high:s,direction:1});r=-2*n.t*Math.PI+1.5*Math.PI-1.1*Math.PI,a=n}else{const t=this.options.selfReference.angle/(2*Math.PI);a=this._pointOnCircle(i,o,s,t),r=-2*t*Math.PI+1.5*Math.PI+.1*Math.PI}}return{point:a,core:{x:a.x-.9*f*Math.cos(r),y:a.y-.9*f*Math.sin(r)},angle:r,length:f,type:u}}drawArrowHead(t,e,i,o,s){t.strokeStyle=this.getColor(t,e),t.fillStyle=t.strokeStyle,t.lineWidth=e.width;tC.draw(t,s)&&(this.enableShadow(t,e),gf(t).call(t),this.disableShadow(t,e))}enableShadow(t,e){!0===e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}disableShadow(t,e){!0===e.shadow&&(t.shadowColor="rgba(0,0,0,0)",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}drawBackground(t,e){if(!1!==e.background){const i={strokeStyle:t.strokeStyle,lineWidth:t.lineWidth,dashes:t.dashes};t.strokeStyle=e.backgroundColor,t.lineWidth=e.backgroundSize,this.setStrokeDashed(t,e.backgroundDashes),t.stroke(),t.strokeStyle=i.strokeStyle,t.lineWidth=i.lineWidth,t.dashes=i.dashes,this.setStrokeDashed(t,e.dashes)}}setStrokeDashed(t,e){if(!1!==e)if(void 0!==t.setLineDash){const i=Vl(e)?e:[5,5];t.setLineDash(i)}else console.warn("setLineDash is not supported in this browser. The dashed stroke cannot be used.");else void 0!==t.setLineDash?t.setLineDash([]):console.warn("setLineDash is not supported in this browser. The dashed stroke cannot be used.")}}function sC(t,e){var i=Jl(t);if(vw){var o=vw(t);e&&(o=ju(o).call(o,(function(e){return Tw(t,e).enumerable}))),i.push.apply(i,o)}return i}function nC(t){for(var e=1;e2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates();let o,s,n=!1,r=1,a=0,h=this.to,d=this.options.endPointOffset?this.options.endPointOffset.to:0;t.id===this.from.id&&(h=this.from,n=!0,d=this.options.endPointOffset?this.options.endPointOffset.from:0),!1===this.options.arrowStrikethrough&&(d=0);let l=0;do{s=.5*(a+r),o=this.getPoint(s,i);const t=Math.atan2(h.y-o.y,h.x-o.x),c=h.distanceToBorder(e,t)+d-Math.sqrt(Math.pow(o.x-h.x,2)+Math.pow(o.y-h.y,2));if(Math.abs(c)<.2)break;c<0?!1===n?a=s:r=s:!1===n?r=s:a=s,++l}while(a<=r&&l<10);return nC(nC({},o),{},{t:s})}_getDistanceToBezierEdge(t,e,i,o,s,n,r){let a,h,d,l,c,u=1e9,p=t,f=e;for(h=1;h<10;h++)d=.1*h,l=Math.pow(1-d,2)*t+2*d*(1-d)*r.x+Math.pow(d,2)*i,c=Math.pow(1-d,2)*e+2*d*(1-d)*r.y+Math.pow(d,2)*o,h>0&&(a=this._getDistanceToLine(p,f,l,c,s,n),u=a{this.positionBezierNode()},this._body.emitter.on("_repositionBezierNodes",this._boundFunction)}setOptions(t){super.setOptions(t);let e=!1;this.options.physics!==t.physics&&(e=!0),this.options=t,this.id=this.options.id,this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],this.setupSupportNode(),this.connect(),!0===e&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}connect(){this.from=this._body.nodes[this.options.from],this.to=this._body.nodes[this.options.to],void 0===this.from||void 0===this.to||!1===this.options.physics||this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}cleanup(){return this._body.emitter.off("_repositionBezierNodes",this._boundFunction),void 0!==this.via&&(delete this._body.nodes[this.via.id],this.via=void 0,!0)}setupSupportNode(){if(void 0===this.via){const t="edgeId:"+this.id,e=this._body.functions.createNode({id:t,shape:"circle",physics:!0,hidden:!0});this._body.nodes[t]=e,this.via=e,this.via.parentEdgeId=this.id,this.positionBezierNode()}}positionBezierNode(){void 0!==this.via&&void 0!==this.from&&void 0!==this.to?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):void 0!==this.via&&(this.via.x=0,this.via.y=0)}_line(t,e,i){this._bezierCurve(t,e,i)}_getViaCoordinates(){return this.via}getViaNode(){return this.via}getPoint(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.via;if(this.from===this.to){const[e,i,o]=this._getCircleData(),s=2*Math.PI*(1-t);return{x:e+o*Math.sin(s),y:i+o-o*(1-Math.cos(s))}}return{x:Math.pow(1-t,2)*this.fromPoint.x+2*t*(1-t)*e.x+Math.pow(t,2)*this.toPoint.x,y:Math.pow(1-t,2)*this.fromPoint.y+2*t*(1-t)*e.y+Math.pow(t,2)*this.toPoint.y}}_findBorderPosition(t,e){return this._findBorderPositionBezier(t,e,this.via)}_getDistanceToEdge(t,e,i,o,s,n){return this._getDistanceToBezierEdge(t,e,i,o,s,n,this.via)}}class hC extends rC{constructor(t,e,i){super(t,e,i)}_line(t,e,i){this._bezierCurve(t,e,i)}getViaNode(){return this._getViaCoordinates()}_getViaCoordinates(){const t=this.options.smooth.roundness,e=this.options.smooth.type;let i=Math.abs(this.from.x-this.to.x),o=Math.abs(this.from.y-this.to.y);if("discrete"===e||"diagonalCross"===e){let s,n;s=n=i<=o?t*o:t*i,this.from.x>this.to.x&&(s=-s),this.from.y>=this.to.y&&(n=-n);let r=this.from.x+s,a=this.from.y+n;return"discrete"===e&&(i<=o?r=ithis.to.x&&(e=-e),this.from.y>=this.to.y&&(s=-s);let n=this.from.x+e,r=this.from.y+s;return i<=o?n=this.from.x<=this.to.x?this.to.xn?this.to.x:n:r=this.from.y>=this.to.y?this.to.y>r?this.to.y:r:this.to.y2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(t,e,i.via)}_getDistanceToEdge(t,e,i,o,s,n){let r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(t,e,i,o,s,n,r)}getPoint(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates();const i=t;return{x:Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,y:Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y}}}class dC extends rC{constructor(t,e,i){super(t,e,i)}_getDistanceToBezierEdge2(t,e,i,o,s,n,r,a){let h=1e9,d=t,l=e;const c=[0,0,0,0];for(let u=1;u<10;u++){const p=.1*u;c[0]=Math.pow(1-p,3),c[1]=3*p*Math.pow(1-p,2),c[2]=3*Math.pow(p,2)*(1-p),c[3]=Math.pow(p,3);const f=c[0]*t+c[1]*r.x+c[2]*a.x+c[3]*i,g=c[0]*e+c[1]*r.y+c[2]*a.y+c[3]*o;if(u>0){const t=this._getDistanceToLine(d,l,f,g,s,n);h=tMath.abs(e)||!0===this.options.smooth.forceDirection||"horizontal"===this.options.smooth.forceDirection)&&"vertical"!==this.options.smooth.forceDirection?(o=this.from.y,n=this.to.y,i=this.from.x-r*t,s=this.to.x+r*t):(o=this.from.y-r*e,n=this.to.y+r*e,i=this.from.x,s=this.to.x),[{x:i,y:o},{x:s,y:n}]}getViaNode(){return this._getViaCoordinates()}_findBorderPosition(t,e){return this._findBorderPositionBezier(t,e)}_getDistanceToEdge(t,e,i,o,s,n){let[r,a]=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge2(t,e,i,o,s,n,r,a)}getPoint(t){let[e,i]=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates();const o=t,s=[Math.pow(1-o,3),3*o*Math.pow(1-o,2),3*Math.pow(o,2)*(1-o),Math.pow(o,3)];return{x:s[0]*this.fromPoint.x+s[1]*e.x+s[2]*i.x+s[3]*this.toPoint.x,y:s[0]*this.fromPoint.y+s[1]*e.y+s[2]*i.y+s[3]*this.toPoint.y}}}class cC extends oC{constructor(t,e,i){super(t,e,i)}_line(t,e){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}getViaNode(){}getPoint(t){return{x:(1-t)*this.fromPoint.x+t*this.toPoint.x,y:(1-t)*this.fromPoint.y+t*this.toPoint.y}}_findBorderPosition(t,e){let i=this.to,o=this.from;t.id===this.from.id&&(i=this.from,o=this.to);const s=Math.atan2(i.y-o.y,i.x-o.x),n=i.x-o.x,r=i.y-o.y,a=Math.sqrt(n*n+r*r),h=(a-t.distanceToBorder(e,s))/a;return{x:(1-h)*o.x+h*i.x,y:(1-h)*o.y+h*i.y,t:0}}_getDistanceToEdge(t,e,i,o,s,n){return this._getDistanceToLine(t,e,i,o,s,n)}}class uC{constructor(t,e,i,o,s){if(void 0===e)throw new Error("No body provided");this.options=ty(o),this.globalOptions=o,this.defaultOptions=s,this.body=e,this.imagelist=i,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new lO(this.body,this.options,!0),this.setOptions(t)}setOptions(t){if(!t)return;let e=void 0!==t.physics&&this.options.physics!==t.physics||void 0!==t.hidden&&(this.options.hidden||!1)!==(t.hidden||!1)||void 0!==t.from&&this.options.from!==t.from||void 0!==t.to&&this.options.to!==t.to;uC.parseOptions(this.options,t,!0,this.globalOptions),void 0!==t.id&&(this.id=t.id),void 0!==t.from&&(this.fromId=t.from),void 0!==t.to&&(this.toId=t.to),void 0!==t.title&&(this.title=t.title),void 0!==t.value&&(t.value=GE(t.value));const i=[t,this.options,this.defaultOptions];return this.chooser=eO("edge",i),this.updateLabelModule(t),e=this.updateEdgeType()||e,this._setInteractionWidths(),this.connect(),e}static parseOptions(t,e){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];if(Pm(["endPointOffset","arrowStrikethrough","id","from","hidden","hoverWidth","labelHighlightBold","length","line","opacity","physics","scaling","selectionWidth","selfReferenceSize","selfReference","to","title","value","width","font","chosen","widthConstraint"],t,e,i),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.from&&(cw(e.endPointOffset.from)?t.endPointOffset.from=e.endPointOffset.from:(t.endPointOffset.from=void 0!==o.endPointOffset.from?o.endPointOffset.from:0,console.error("endPointOffset.from is not a valid number"))),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.to&&(cw(e.endPointOffset.to)?t.endPointOffset.to=e.endPointOffset.to:(t.endPointOffset.to=void 0!==o.endPointOffset.to?o.endPointOffset.to:0,console.error("endPointOffset.to is not a valid number"))),oO(e.label)?t.label=e.label:oO(t.label)||(t.label=void 0),ey(t,e,"smooth",o),ey(t,e,"shadow",o),ey(t,e,"background",o),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:!0===i&&null===e.dashes&&(t.dashes=Np(o.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),ey(t.scaling,e.scaling,"label",o.scaling)):!0===i&&null===e.scaling&&(t.scaling=Np(o.scaling)),void 0!==e.arrows&&null!==e.arrows)if("string"==typeof e.arrows){const i=e.arrows.toLowerCase();t.arrows.to.enabled=-1!=Mp(i).call(i,"to"),t.arrows.middle.enabled=-1!=Mp(i).call(i,"middle"),t.arrows.from.enabled=-1!=Mp(i).call(i,"from")}else{if("object"!=typeof e.arrows)throw new Error("The arrow newOptions can only be an object or a string. Refer to the documentation. You used:"+jp(e.arrows));ey(t.arrows,e.arrows,"to",o.arrows),ey(t.arrows,e.arrows,"middle",o.arrows),ey(t.arrows,e.arrows,"from",o.arrows)}else!0===i&&null===e.arrows&&(t.arrows=Np(o.arrows));if(void 0!==e.color&&null!==e.color){const n=Sm(e.color)?{color:e.color,highlight:e.color,hover:e.color,inherit:!1,opacity:1}:e.color,r=t.color;if(s)Nm(r,o.color,!1,i);else for(const t in r)Object.prototype.hasOwnProperty.call(r,t)&&delete r[t];if(Sm(r))r.color=r,r.highlight=r,r.hover=r,r.inherit=!1,void 0===n.opacity&&(r.opacity=1);else{let t=!1;void 0!==n.color&&(r.color=n.color,t=!0),void 0!==n.highlight&&(r.highlight=n.highlight,t=!0),void 0!==n.hover&&(r.hover=n.hover,t=!0),void 0!==n.inherit&&(r.inherit=n.inherit),void 0!==n.opacity&&(r.opacity=Math.min(1,Math.max(0,n.opacity))),!0===t?r.inherit=!1:void 0===r.inherit&&(r.inherit="from")}}else!0===i&&null===e.color&&(t.color=ty(o.color));!0===i&&null===e.font&&(t.font=ty(o.font)),Object.prototype.hasOwnProperty.call(e,"selfReferenceSize")&&(console.warn("The selfReferenceSize property has been deprecated. Please use selfReference property instead. The selfReference can be set like thise selfReference:{size:30, angle:Math.PI / 4}"),t.selfReference.size=e.selfReferenceSize)}getFormattingValues(){const t=!0===this.options.arrows.to||!0===this.options.arrows.to.enabled,e=!0===this.options.arrows.from||!0===this.options.arrows.from.enabled,i=!0===this.options.arrows.middle||!0===this.options.arrows.middle.enabled,o=this.options.color.inherit,s={toArrow:t,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,toArrowSrc:this.options.arrows.to.src,toArrowImageWidth:this.options.arrows.to.imageWidth,toArrowImageHeight:this.options.arrows.to.imageHeight,middleArrow:i,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,middleArrowSrc:this.options.arrows.middle.src,middleArrowImageWidth:this.options.arrows.middle.imageWidth,middleArrowImageHeight:this.options.arrows.middle.imageHeight,fromArrow:e,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,fromArrowSrc:this.options.arrows.from.src,fromArrowImageWidth:this.options.arrows.from.imageWidth,fromArrowImageHeight:this.options.arrows.from.imageHeight,arrowStrikethrough:this.options.arrowStrikethrough,color:o?void 0:this.options.color.color,inheritsColor:o,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width,background:this.options.background.enabled,backgroundColor:this.options.background.color,backgroundSize:this.options.background.size,backgroundDashes:this.options.background.dashes};if(this.selected||this.hover)if(!0===this.chooser){if(this.selected){const t=this.options.selectionWidth;"function"==typeof t?s.width=t(s.width):"number"==typeof t&&(s.width+=t),s.width=Math.max(s.width,.3/this.body.view.scale),s.color=this.options.color.highlight,s.shadow=this.options.shadow.enabled}else if(this.hover){const t=this.options.hoverWidth;"function"==typeof t?s.width=t(s.width):"number"==typeof t&&(s.width+=t),s.width=Math.max(s.width,.3/this.body.view.scale),s.color=this.options.color.hover,s.shadow=this.options.shadow.enabled}}else"function"==typeof this.chooser&&(this.chooser(s,this.options.id,this.selected,this.hover),void 0!==s.color&&(s.inheritsColor=!1),!1===s.shadow&&(s.shadowColor===this.options.shadow.color&&s.shadowSize===this.options.shadow.size&&s.shadowX===this.options.shadow.x&&s.shadowY===this.options.shadow.y||(s.shadow=!0)));else s.shadow=this.options.shadow.enabled,s.width=Math.max(s.width,.3/this.body.view.scale);return s}updateLabelModule(t){const e=[t,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,e),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}updateEdgeType(){const t=this.options.smooth;let e=!1,i=!0;return void 0!==this.edgeType&&((this.edgeType instanceof aC&&!0===t.enabled&&"dynamic"===t.type||this.edgeType instanceof lC&&!0===t.enabled&&"cubicBezier"===t.type||this.edgeType instanceof hC&&!0===t.enabled&&"dynamic"!==t.type&&"cubicBezier"!==t.type||this.edgeType instanceof cC&&!1===t.type.enabled)&&(i=!1),!0===i&&(e=this.cleanup())),!0===i?!0===t.enabled?"dynamic"===t.type?(e=!0,this.edgeType=new aC(this.options,this.body,this.labelModule)):"cubicBezier"===t.type?this.edgeType=new lC(this.options,this.body,this.labelModule):this.edgeType=new hC(this.options,this.body,this.labelModule):this.edgeType=new cC(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),e}connect(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=void 0!==this.from&&void 0!==this.to,!0===this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}disconnect(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}getTitle(){return this.title}isSelected(){return this.selected}getValue(){return this.options.value}setValueRange(t,e,i){if(void 0!==this.options.value){const o=this.options.scaling.customScalingFunction(t,e,i,this.options.value),s=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){const t=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+o*t}this.options.width=this.options.scaling.min+o*s}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}_setInteractionWidths(){"function"==typeof this.options.hoverWidth?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,"function"==typeof this.options.selectionWidth?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}draw(t){const e=this.getFormattingValues();if(e.hidden)return;const i=this.edgeType.getViaNode();this.edgeType.drawLine(t,e,this.selected,this.hover,i),this.drawLabel(t,i)}drawArrows(t){const e=this.getFormattingValues();if(e.hidden)return;const i=this.edgeType.getViaNode(),o={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,e.fromArrow&&(o.from=this.edgeType.getArrowData(t,"from",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.fromPoint=o.from.core),e.fromArrowSrc&&(o.from.image=this.imagelist.load(e.fromArrowSrc)),e.fromArrowImageWidth&&(o.from.imageWidth=e.fromArrowImageWidth),e.fromArrowImageHeight&&(o.from.imageHeight=e.fromArrowImageHeight)),e.toArrow&&(o.to=this.edgeType.getArrowData(t,"to",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.toPoint=o.to.core),e.toArrowSrc&&(o.to.image=this.imagelist.load(e.toArrowSrc)),e.toArrowImageWidth&&(o.to.imageWidth=e.toArrowImageWidth),e.toArrowImageHeight&&(o.to.imageHeight=e.toArrowImageHeight)),e.middleArrow&&(o.middle=this.edgeType.getArrowData(t,"middle",i,this.selected,this.hover,e),e.middleArrowSrc&&(o.middle.image=this.imagelist.load(e.middleArrowSrc)),e.middleArrowImageWidth&&(o.middle.imageWidth=e.middleArrowImageWidth),e.middleArrowImageHeight&&(o.middle.imageHeight=e.middleArrowImageHeight)),e.fromArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,o.from),e.middleArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,o.middle),e.toArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,o.to)}drawLabel(t,e){if(void 0!==this.options.label){const i=this.from,o=this.to;let s;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(t,this.selected,this.hover),i.id!=o.id){this.labelModule.pointToSelf=!1,s=this.edgeType.getPoint(.5,e),t.save();const i=this._getRotation(t);0!=i.angle&&(t.translate(i.x,i.y),t.rotate(i.angle)),this.labelModule.draw(t,s.x,s.y,this.selected,this.hover),t.restore()}else{this.labelModule.pointToSelf=!0;const e=sO(t,this.options.selfReference.angle,this.options.selfReference.size,i);s=this._pointOnCircle(e.x,e.y,this.options.selfReference.size,this.options.selfReference.angle),this.labelModule.draw(t,s.x,s.y,this.selected,this.hover)}}}getItemsOnPoint(t){const e=[];if(this.labelModule.visible()){const i=this._getRotation();iO(this.labelModule.getSize(),t,i)&&e.push({edgeId:this.id,labelId:0})}const i={left:t.x,top:t.y};return this.isOverlappingWith(i)&&e.push({edgeId:this.id}),e}isOverlappingWith(t){if(this.connected){const e=10,i=this.from.x,o=this.from.y,s=this.to.x,n=this.to.y,r=t.left,a=t.top;return this.edgeType.getDistanceToEdge(i,o,s,n,r,a)0&&n<0)&&(r+=Math.PI),o.angle=r,o}_pointOnCircle(t,e,i,o){return{x:t+i*Math.cos(o),y:e-i*Math.sin(o)}}select(){this.selected=!0}unselect(){this.selected=!1}cleanup(){return this.edgeType.cleanup()}remove(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}endPointsValid(){return void 0!==this.body.nodes[this.fromId]&&void 0!==this.body.nodes[this.toId]}}class pC{constructor(t,e,i){var o;this.body=t,this.images=e,this.groups=i,this.body.functions.createEdge=Lo(o=this.create).call(o,this),this.edgesListeners={add:(t,e)=>{this.add(e.items)},update:(t,e)=>{this.update(e.items)},remove:(t,e)=>{this.remove(e.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:"arrow"},middle:{enabled:!1,scaleFactor:1,type:"arrow"},from:{enabled:!1,scaleFactor:1,type:"arrow"}},endPointOffset:{from:0,to:0},arrowStrikethrough:!0,color:{color:"#848484",highlight:"#848484",hover:"#848484",inherit:"from",opacity:1},dashes:!1,font:{color:"#343434",size:14,face:"arial",background:"none",strokeWidth:2,strokeColor:"#ffffff",align:"horizontal",multi:!1,vadjust:0,bold:{mod:"bold"},boldital:{mod:"bold italic"},ital:{mod:"italic"},mono:{mod:"",size:15,face:"courier new",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,o){if(e===t)return.5;{const i=1/(e-t);return Math.max(0,(o-t)*i)}}},selectionWidth:1.5,selfReference:{size:20,angle:Math.PI/4,renderBehindTheNode:!0},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:10,x:5,y:5},background:{enabled:!1,color:"rgba(111,111,111,1)",size:10,dashes:!1},smooth:{enabled:!0,type:"dynamic",forceDirection:"none",roundness:.5},title:void 0,width:1,value:void 0},Nm(this.options,this.defaultOptions),this.bindEventListeners()}bindEventListeners(){var t,e,i=this;this.body.emitter.on("_forceDisableDynamicCurves",(function(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];"dynamic"===t&&(t="continuous");let o=!1;for(const e in i.body.edges)if(Object.prototype.hasOwnProperty.call(i.body.edges,e)){const s=i.body.edges[e],n=i.body.data.edges.get(e);if(null!=n){const e=n.smooth;void 0!==e&&!0===e.enabled&&"dynamic"===e.type&&(void 0===t?s.setOptions({smooth:!1}):s.setOptions({smooth:{type:t}}),o=!0)}}!0===e&&!0===o&&i.body.emitter.emit("_dataChanged")})),this.body.emitter.on("_dataUpdated",(()=>{this.reconnectEdges()})),this.body.emitter.on("refreshEdges",Lo(t=this.refresh).call(t,this)),this.body.emitter.on("refresh",Lo(e=this.refresh).call(e,this)),this.body.emitter.on("destroy",(()=>{Rm(this.edgesListeners,((t,e)=>{this.body.data.edges&&this.body.data.edges.off(e,t)})),delete this.body.functions.createEdge,delete this.edgesListeners.add,delete this.edgesListeners.update,delete this.edgesListeners.remove,delete this.edgesListeners}))}setOptions(t){if(void 0!==t){uC.parseOptions(this.options,t,!0,this.defaultOptions,!0);let e=!1;if(void 0!==t.smooth)for(const t in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,t)&&(e=this.body.edges[t].updateEdgeType()||e);if(void 0!==t.font)for(const t in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,t)&&this.body.edges[t].updateLabelModule();void 0===t.hidden&&void 0===t.physics&&!0!==e||this.body.emitter.emit("_dataChanged")}}setData(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.body.data.edges;if(FE("id",t))this.body.data.edges=t;else if(Vl(t))this.body.data.edges=new BE,this.body.data.edges.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.body.data.edges=new BE}if(i&&Rm(this.edgesListeners,((t,e)=>{i.off(e,t)})),this.body.edges={},this.body.data.edges){Rm(this.edgesListeners,((t,e)=>{this.body.data.edges.on(e,t)}));const t=this.body.data.edges.getIds();this.add(t,!0)}this.body.emitter.emit("_adjustEdgesForHierarchicalLayout"),!1===e&&this.body.emitter.emit("_dataChanged")}add(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.body.edges,o=this.body.data.edges;for(let e=0;e1&&void 0!==arguments[1])||arguments[1];if(0===t.length)return;const i=this.body.edges;Rm(t,(t=>{const e=i[t];void 0!==e&&e.remove()})),e&&this.body.emitter.emit("_dataChanged")}refresh(){Rm(this.body.edges,((t,e)=>{const i=this.body.data.edges.get(e);void 0!==i&&t.setOptions(i)}))}create(t){return new uC(t,this.body,this.images,this.options,this.defaultOptions)}reconnectEdges(){let t;const e=this.body.nodes,i=this.body.edges;for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&(e[t].edges=[]);for(t in i)if(Object.prototype.hasOwnProperty.call(i,t)){const e=i[t];e.from=null,e.to=null,e.connect()}}getConnectedNodes(t){const e=[];if(void 0!==this.body.edges[t]){const i=this.body.edges[t];void 0!==i.fromId&&e.push(i.fromId),void 0!==i.toId&&e.push(i.toId)}return e}_updateState(){this._addMissingEdges(),this._removeInvalidEdges()}_removeInvalidEdges(){const t=[];Rm(this.body.edges,((e,i)=>{const o=this.body.nodes[e.toId],s=this.body.nodes[e.fromId];void 0!==o&&!0===o.isCluster||void 0!==s&&!0===s.isCluster||void 0!==o&&void 0!==s||t.push(i)})),this.remove(t,!1)}_addMissingEdges(){const t=this.body.data.edges;if(null==t)return;const e=this.body.edges,i=[];mc(t).call(t,((t,o)=>{void 0===e[o]&&i.push(o)})),this.add(i,!0)}}class fC{constructor(t,e,i){this.body=t,this.physicsBody=e,this.barnesHutTree,this.setOptions(i),this._rng=ym("BARNES HUT SOLVER")}setOptions(t){this.options=t,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}solve(){if(0!==this.options.gravitationalConstant&&this.physicsBody.physicsNodeIndices.length>0){let t;const e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,o=i.length,s=this._formBarnesHutTree(e,i);this.barnesHutTree=s;for(let n=0;n0&&this._getForceContributions(s.root,t)}}_getForceContributions(t,e){this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e)}_getForceContribution(t,e){if(t.childrenCount>0){const i=t.centerOfMass.x-e.x,o=t.centerOfMass.y-e.y,s=Math.sqrt(i*i+o*o);s*t.calcSize>this.thetaInversed?this._calculateForces(s,i,o,e,t):4===t.childrenCount?this._getForceContributions(t,e):t.children.data.id!=e.id&&this._calculateForces(s,i,o,e,t)}}_calculateForces(t,e,i,o,s){0===t&&(e=t=.1),this.overlapAvoidanceFactor<1&&o.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*o.shape.radius,t-o.shape.radius));const n=this.options.gravitationalConstant*s.mass*o.options.mass/Math.pow(t,3),r=e*n,a=i*n;this.physicsBody.forces[o.id].x+=r,this.physicsBody.forces[o.id].y+=a}_formBarnesHutTree(t,e){let i;const o=e.length;let s=t[e[0]].x,n=t[e[0]].y,r=t[e[0]].x,a=t[e[0]].y;for(let i=1;i0&&(hr&&(r=h),da&&(a=d))}const h=Math.abs(r-s)-Math.abs(a-n);h>0?(n-=.5*h,a+=.5*h):(s+=.5*h,r-=.5*h);const d=Math.max(1e-5,Math.abs(r-s)),l=.5*d,c=.5*(s+r),u=.5*(n+a),p={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:c-l,maxX:c+l,minY:u-l,maxY:u+l},size:d,calcSize:1/d,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(p.root);for(let s=0;s0&&this._placeInTree(p.root,i);return p}_updateBranchMass(t,e){const i=t.centerOfMass,o=t.mass+e.options.mass,s=1/o;i.x=i.x*t.mass+e.x*e.options.mass,i.x*=s,i.y=i.y*t.mass+e.y*e.options.mass,i.y*=s,t.mass=o;const n=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidthe.x?o.maxY>e.y?"NW":"SW":o.maxY>e.y?"NE":"SE",this._placeInRegion(t,e,s)}_placeInRegion(t,e,i){const o=t.children[i];switch(o.childrenCount){case 0:o.children.data=e,o.childrenCount=1,this._updateBranchMass(o,e);break;case 1:o.children.data.x===e.x&&o.children.data.y===e.y?(e.x+=this._rng(),e.y+=this._rng()):(this._splitBranch(o),this._placeInTree(o,e));break;case 4:this._placeInTree(o,e)}}_splitBranch(t){let e=null;1===t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,"NW"),this._insertRegion(t,"NE"),this._insertRegion(t,"SW"),this._insertRegion(t,"SE"),null!=e&&this._placeInTree(t,e)}_insertRegion(t,e){let i,o,s,n;const r=.5*t.size;switch(e){case"NW":i=t.range.minX,o=t.range.minX+r,s=t.range.minY,n=t.range.minY+r;break;case"NE":i=t.range.minX+r,o=t.range.maxX,s=t.range.minY,n=t.range.minY+r;break;case"SW":i=t.range.minX,o=t.range.minX+r,s=t.range.minY+r,n=t.range.maxY;break;case"SE":i=t.range.minX+r,o=t.range.maxX,s=t.range.minY+r,n=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:o,minY:s,maxY:n},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}}_debug(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))}_drawBranch(t,e,i){void 0===i&&(i="#FF0000"),4===t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}}class gC{constructor(t,e,i){this._rng=ym("REPULSION SOLVER"),this.body=t,this.physicsBody=e,this.setOptions(i)}setOptions(t){this.options=t}solve(){let t,e,i,o,s,n,r,a;const h=this.body.nodes,d=this.physicsBody.physicsNodeIndices,l=this.physicsBody.forces,c=this.options.nodeDistance,u=-2/3/c;for(let p=0;p0){const t=s.edges.length+1,n=this.options.centralGravity*t*s.options.mass;o[s.id].x=e*n,o[s.id].y=i*n}}}class xC{constructor(t){this.body=t,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:"barnesHut",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0,wind:{x:0,y:0}},vo(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}bindEventListeners(){this.body.emitter.on("initPhysics",(()=>{this.initPhysics()})),this.body.emitter.on("_layoutFailed",(()=>{this.layoutFailed=!0})),this.body.emitter.on("resetPhysics",(()=>{this.stopSimulation(),this.ready=!1})),this.body.emitter.on("disablePhysics",(()=>{this.physicsEnabled=!1,this.stopSimulation()})),this.body.emitter.on("restorePhysics",(()=>{this.setOptions(this.options),!0===this.ready&&this.startSimulation()})),this.body.emitter.on("startSimulation",(()=>{!0===this.ready&&this.startSimulation()})),this.body.emitter.on("stopSimulation",(()=>{this.stopSimulation()})),this.body.emitter.on("destroy",(()=>{this.stopSimulation(!1),this.body.emitter.off()})),this.body.emitter.on("_dataChanged",(()=>{this.updatePhysicsData()}))}setOptions(t){if(void 0!==t)if(!1===t)this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation();else if(!0===t)this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation();else{this.physicsEnabled=!0,Bm(["stabilization"],this.options,t),ey(this.options,t,"stabilization"),void 0===t.enabled&&(this.options.enabled=!0),!1===this.options.enabled&&(this.physicsEnabled=!1,this.stopSimulation());const e=this.options.wind;e&&(("number"!=typeof e.x||hw(e.x))&&(e.x=0),("number"!=typeof e.y||hw(e.y))&&(e.y=0)),this.timestep=this.options.timestep}this.init()}init(){let t;"forceAtlas2Based"===this.options.solver?(t=this.options.forceAtlas2Based,this.nodesSolver=new wC(this.body,this.physicsBody,t),this.edgesSolver=new yC(this.body,this.physicsBody,t),this.gravitySolver=new _C(this.body,this.physicsBody,t)):"repulsion"===this.options.solver?(t=this.options.repulsion,this.nodesSolver=new gC(this.body,this.physicsBody,t),this.edgesSolver=new yC(this.body,this.physicsBody,t),this.gravitySolver=new vC(this.body,this.physicsBody,t)):"hierarchicalRepulsion"===this.options.solver?(t=this.options.hierarchicalRepulsion,this.nodesSolver=new mC(this.body,this.physicsBody,t),this.edgesSolver=new bC(this.body,this.physicsBody,t),this.gravitySolver=new vC(this.body,this.physicsBody,t)):(t=this.options.barnesHut,this.nodesSolver=new fC(this.body,this.physicsBody,t),this.edgesSolver=new yC(this.body,this.physicsBody,t),this.gravitySolver=new vC(this.body,this.physicsBody,t)),this.modelOptions=t}initPhysics(){!0===this.physicsEnabled&&!0===this.options.enabled?!0===this.options.stabilization.enabled?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit("fit",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit("fit"))}startSimulation(){var t;!0===this.physicsEnabled&&!0===this.options.enabled?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit("_resizeNodes"),void 0===this.viewFunction&&(this.viewFunction=Lo(t=this.simulationStep).call(t,this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))):this.body.emitter.emit("_redraw")}stopSimulation(){let t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,!0===t&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.viewFunction=void 0,!0===t&&this.body.emitter.emit("_stopRendering"))}simulationStep(){const t=oc();this.physicsTick();(oc()-t<.4*this.simulationInterval||!0===this.runDoubleSpeed)&&!1===this.stabilized&&(this.physicsTick(),this.runDoubleSpeed=!0),!0===this.stabilized&&this.stopSimulation()}_emitStabilized(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||!0===this.startedStabilization)&&sf((()=>{this.body.emitter.emit("stabilized",{iterations:t}),this.startedStabilization=!1,this.stabilizationIterations=0}),0)}physicsStep(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}adjustTimeStep(){!0===this._evaluateStepQuality()?this.timestep=1.2*this.timestep:this.timestep/1.2.3))return!1;return!0}moveNodes(){const t=this.physicsBody.physicsNodeIndices;let e=0,i=0;for(let o=0;oo&&(t=t>0?o:-o),t}_performStep(t){const e=this.body.nodes[t],i=this.physicsBody.forces[t];this.options.wind&&(i.x+=this.options.wind.x,i.y+=this.options.wind.y);const o=this.physicsBody.velocities[t];this.previousStates[t]={x:e.x,y:e.y,vx:o.x,vy:o.y},!1===e.options.fixed.x?(o.x=this.calculateComponentVelocity(o.x,i.x,e.options.mass),e.x+=o.x*this.timestep):(i.x=0,o.x=0),!1===e.options.fixed.y?(o.y=this.calculateComponentVelocity(o.y,i.y,e.options.mass),e.y+=o.y*this.timestep):(i.y=0,o.y=0);return Math.sqrt(Math.pow(o.x,2)+Math.pow(o.y,2))}_freezeNodes(){const t=this.body.nodes;for(const e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].x&&t[e].y){const i=t[e].options.fixed;this.freezeCache[e]={x:i.x,y:i.y},i.x=!0,i.y=!0}}_restoreFrozenNodes(){const t=this.body.nodes;for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&void 0!==this.freezeCache[e]&&(t[e].options.fixed.x=this.freezeCache[e].x,t[e].options.fixed.y=this.freezeCache[e].y);this.freezeCache={}}stabilize(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.stabilization.iterations;"number"!=typeof t&&(t=this.options.stabilization.iterations,console.error("The stabilize method needs a numeric amount of iterations. Switching to default: ",t)),0!==this.physicsBody.physicsNodeIndices.length?(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit("_resizeNodes"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit("_blockRedraw"),this.targetIterations=t,!0===this.options.stabilization.onlyDynamicEdges&&this._freezeNodes(),this.stabilizationIterations=0,sf((()=>this._stabilizationBatch()),0)):this.ready=!0}_startStabilizing(){return!0!==this.startedStabilization&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0,!0)}_stabilizationBatch(){const t=()=>!1===this.stabilized&&this.stabilizationIterations{this.body.emitter.emit("stabilizationProgress",{iterations:this.stabilizationIterations,total:this.targetIterations})};this._startStabilizing()&&e();let i=0;for(;t()&&i1&&void 0!==arguments[1]?arguments[1]:[],o=1e9,s=-1e9,n=1e9,r=-1e9;if(i.length>0)for(let a=0;ae.shape.boundingBox.left&&(n=e.shape.boundingBox.left),re.shape.boundingBox.top&&(o=e.shape.boundingBox.top),s1&&void 0!==arguments[1]?arguments[1]:[],o=1e9,s=-1e9,n=1e9,r=-1e9;if(i.length>0)for(let a=0;ae.x&&(n=e.x),re.y&&(o=e.y),s{delete this.containedEdges[t.id]})),Rm(e.containedNodes,((t,e)=>{this.containedNodes[e]=t})),e.containedNodes={},Rm(e.containedEdges,((t,e)=>{this.containedEdges[e]=t})),e.containedEdges={},Rm(e.edges,(t=>{Rm(this.edges,(e=>{var i,o;const s=Mp(i=e.clusteringEdgeReplacingIds).call(i,t.id);-1!==s&&(Rm(t.clusteringEdgeReplacingIds,(t=>{e.clusteringEdgeReplacingIds.push(t),this.body.edges[t].edgeReplacedById=e.id})),Jc(o=e.clusteringEdgeReplacingIds).call(o,s,1))}))})),e.edges=[]}}class CC{constructor(t){this.body=t,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},vo(this.options,this.defaultOptions),this.body.emitter.on("_resetData",(()=>{this.clusteredNodes={},this.clusteredEdges={}}))}clusterByHubsize(t,e){void 0===t?t=this._getHubSize():"object"==typeof t&&(e=this._checkOptions(t),t=this._getHubSize());const i=[];for(let e=0;e=t&&i.push(o.id)}for(let t=0;t0&&void 0!==arguments[0]?arguments[0]:{},e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===t.joinCondition)throw new Error("Cannot call clusterByNodeData without a joinCondition function in the options.");t=this._checkOptions(t);const i={},o={};Rm(this.body.nodes,((e,s)=>{e.options&&!0===t.joinCondition(e.options)&&(i[s]=e,Rm(e.edges,(t=>{void 0===this.clusteredEdges[t.id]&&(o[t.id]=t)})))})),this._cluster(i,o,t,e)}clusterByEdgeCount(t,e){let i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];e=this._checkOptions(e);const o=[],s={};let n,r,a;for(let i=0;i0&&Jl(d).length>0&&!0===i){const t=function(){for(let t=0;t1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,t,e)}clusterBridges(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,t,e)}clusterByConnection(t,e){var i;let o=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error("No nodeId supplied to clusterByConnection!");if(void 0===this.body.nodes[t])throw new Error("The nodeId given to clusterByConnection does not exist!");const s=this.body.nodes[t];void 0===(e=this._checkOptions(e,s)).clusterNodeProperties.x&&(e.clusterNodeProperties.x=s.x),void 0===e.clusterNodeProperties.y&&(e.clusterNodeProperties.y=s.y),void 0===e.clusterNodeProperties.fixed&&(e.clusterNodeProperties.fixed={},e.clusterNodeProperties.fixed.x=s.options.fixed.x,e.clusterNodeProperties.fixed.y=s.options.fixed.y);const n={},r={},a=s.id,h=EC.cloneOptions(s);n[a]=s;for(let t=0;t-1&&(r[i.id]=i)}}this._cluster(n,r,e,o)}_createClusterEdges(t,e,i,o){let s,n,r,a,h,d;const l=Jl(t),c=[];for(let o=0;o0&&void 0!==arguments[0]?arguments[0]:{};return void 0===t.clusterEdgeProperties&&(t.clusterEdgeProperties={}),void 0===t.clusterNodeProperties&&(t.clusterNodeProperties={}),t}_cluster(t,e,i){let o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];const s=[];for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&void 0!==this.clusteredNodes[e]&&s.push(e);for(let e=0;es?i.x:s,n=i.yr?i.y:r;return{x:.5*(o+s),y:.5*(n+r)}}openCluster(t,e){let i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error("No clusterNodeId supplied to openCluster.");const o=this.body.nodes[t];if(void 0===o)throw new Error("The clusterNodeId supplied to openCluster does not exist.");if(!0!==o.isCluster||void 0===o.containedNodes||void 0===o.containedEdges)throw new Error("The node:"+t+" is not a valid cluster.");const s=this.findNode(t),n=Mp(s).call(s,t)-1;if(n>=0){const e=s[n];return this.body.nodes[e]._openChildCluster(t),delete this.body.nodes[t],void(!0===i&&this.body.emitter.emit("_dataChanged"))}const r=o.containedNodes,a=o.containedEdges;if(void 0!==e&&void 0!==e.releaseFunction&&"function"==typeof e.releaseFunction){const t={},i={x:o.x,y:o.y};for(const e in r)if(Object.prototype.hasOwnProperty.call(r,e)){const i=this.body.nodes[e];t[e]={x:i.x,y:i.y}}const s=e.releaseFunction(i,t);for(const t in r)if(Object.prototype.hasOwnProperty.call(r,t)){const e=this.body.nodes[t];void 0!==s[t]&&(e.x=void 0===s[t].x?o.x:s[t].x,e.y=void 0===s[t].y?o.y:s[t].y)}}else Rm(r,(function(t){!1===t.options.fixed.x&&(t.x=o.x),!1===t.options.fixed.y&&(t.y=o.y)}));for(const t in r)if(Object.prototype.hasOwnProperty.call(r,t)){const e=this.body.nodes[t];e.vx=o.vx,e.vy=o.vy,e.setOptions({physics:!0}),delete this.clusteredNodes[t]}const h=[];for(let t=0;t0&&s<100;){const t=e.pop();if(void 0===t)continue;const n=this.body.edges[t];if(void 0===n)continue;s++;const r=n.clusteringEdgeReplacingIds;if(void 0===r)o.push(t);else for(let t=0;to&&(o=n.edges.length),t+=n.edges.length,e+=Math.pow(n.edges.length,2),i+=1}t/=i,e/=i;const s=e-Math.pow(t,2),n=Math.sqrt(s);let r=Math.floor(t+2*n);return r>o&&(r=o),r}_createClusteredEdge(t,e,i,o,s){const n=EC.cloneOptions(i,"edge");Nm(n,o),n.from=t,n.to=e,n.id="clusterEdge:"+OE(),void 0!==s&&Nm(n,s);const r=this.body.functions.createEdge(n);return r.clusteringEdgeReplacingIds=[i.id],r.connect(),this.body.edges[r.id]=r,r}_clusterEdges(t,e,i,o){if(e instanceof uC){const t=e,i={};i[t.id]=t,e=i}if(t instanceof NO){const e=t,i={};i[e.id]=e,t=i}if(null==i)throw new Error("_clusterEdges: parameter clusterNode required");void 0===o&&(o=i.clusterEdgeProperties),this._createClusterEdges(t,e,i,o);for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t)&&void 0!==this.body.edges[t]){const e=this.body.edges[t];this._backupEdgeOptions(e),e.setOptions({physics:!1})}for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(this.clusteredNodes[e]={clusterId:i.id,node:this.body.nodes[e]},this.body.nodes[e].setOptions({physics:!1}))}_getClusterNodeForNode(t){if(void 0===t)return;const e=this.clusteredNodes[t];if(void 0===e)return;const i=e.clusterId;return void 0!==i?this.body.nodes[i]:void 0}_filter(t,e){const i=[];return Rm(t,(t=>{e(t)&&i.push(t)})),i}_updateState(){let t;const e=[],i={},o=t=>{Rm(this.body.nodes,(e=>{!0===e.isCluster&&t(e)}))};for(t in this.clusteredNodes){if(!Object.prototype.hasOwnProperty.call(this.clusteredNodes,t))continue;void 0===this.body.nodes[t]&&e.push(t)}o((function(t){for(let i=0;i{const e=this.body.edges[t];void 0!==e&&e.endPointsValid()||(i[t]=t)})),o((function(t){Rm(t.containedEdges,((t,e)=>{t.endPointsValid()||i[e]||(i[e]=e)}))})),Rm(this.body.edges,((t,e)=>{let o=!0;const s=t.clusteringEdgeReplacingIds;if(void 0!==s){let t=0;Rm(s,(e=>{const i=this.body.edges[e];void 0!==i&&i.endPointsValid()&&(t+=1)})),o=t>0}t.endPointsValid()&&o||(i[e]=e)})),o((t=>{Rm(i,(e=>{delete t.containedEdges[e],Rm(t.edges,((o,s)=>{o.id!==e?o.clusteringEdgeReplacingIds=this._filter(o.clusteringEdgeReplacingIds,(function(t){return!i[t]})):t.edges[s]=null})),t.edges=this._filter(t.edges,(function(t){return null!==t}))}))})),Rm(i,(t=>{delete this.clusteredEdges[t]})),Rm(i,(t=>{delete this.body.edges[t]}));Rm(Jl(this.body.edges),(t=>{const e=this.body.edges[t],i=this._isClusteredNode(e.fromId)||this._isClusteredNode(e.toId);if(i!==this._isClusteredEdge(e.id))if(i){const t=this._getClusterNodeForNode(e.fromId);void 0!==t&&this._clusterEdges(this.body.nodes[e.fromId],e,t);const i=this._getClusterNodeForNode(e.toId);void 0!==i&&this._clusterEdges(this.body.nodes[e.toId],e,i)}else delete this._clusterEdges[t],this._restoreEdge(e)}));let s=!1,n=!0;for(;n;){const t=[];o((function(e){const i=Jl(e.containedNodes).length,o=!0===e.options.allowSingleNodeCluster;(o&&i<1||!o&&i<2)&&t.push(e.id)}));for(let e=0;e0,s=s||n}s&&this._updateState()}_isClusteredNode(t){return void 0!==this.clusteredNodes[t]}_isClusteredEdge(t){return void 0!==this.clusteredEdges[t]}}class kC{constructor(t,e){this.body=t,this.canvas=e,this.redrawRequested=!1,this.requestAnimationFrameRequestId=void 0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.zooming=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1},vo(this.options,this.defaultOptions),this.bindEventListeners()}bindEventListeners(){var t;this.body.emitter.on("dragStart",(()=>{this.dragging=!0})),this.body.emitter.on("dragEnd",(()=>{this.dragging=!1})),this.body.emitter.on("zoom",(()=>{this.zooming=!0,window.clearTimeout(this.zoomTimeoutId),this.zoomTimeoutId=sf((()=>{var t;this.zooming=!1,Lo(t=this._requestRedraw).call(t,this)()}),250)})),this.body.emitter.on("_resizeNodes",(()=>{this._resizeNodes()})),this.body.emitter.on("_redraw",(()=>{!1===this.renderingActive&&this._redraw()})),this.body.emitter.on("_blockRedraw",(()=>{this.allowRedraw=!1})),this.body.emitter.on("_allowRedraw",(()=>{this.allowRedraw=!0,this.redrawRequested=!1})),this.body.emitter.on("_requestRedraw",Lo(t=this._requestRedraw).call(t,this)),this.body.emitter.on("_startRendering",(()=>{this.renderRequests+=1,this.renderingActive=!0,this._startRendering()})),this.body.emitter.on("_stopRendering",(()=>{this.renderRequests-=1,this.renderingActive=this.renderRequests>0,this.requestAnimationFrameRequestId=void 0})),this.body.emitter.on("destroy",(()=>{this.renderRequests=0,this.allowRedraw=!1,this.renderingActive=!1,window.cancelAnimationFrame(this.requestAnimationFrameRequestId),this.body.emitter.off()}))}setOptions(t){if(void 0!==t){Pm(["hideEdgesOnDrag","hideEdgesOnZoom","hideNodesOnDrag"],this.options,t)}}_startRendering(){var t;!0===this.renderingActive&&(void 0===this.requestAnimationFrameRequestId&&(this.requestAnimationFrameRequestId=window.requestAnimationFrame(Lo(t=this._renderStep).call(t,this),this.simulationInterval)))}_renderStep(){!0===this.renderingActive&&(this.requestAnimationFrameRequestId=void 0,this._startRendering(),this._redraw())}redraw(){this.body.emitter.emit("setSize"),this._redraw()}_requestRedraw(){!0!==this.redrawRequested&&!1===this.renderingActive&&!0===this.allowRedraw&&(this.redrawRequested=!0,window.requestAnimationFrame((()=>{this._redraw(!1)})))}_redraw(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!0===this.allowRedraw){this.body.emitter.emit("initRedraw"),this.redrawRequested=!1;const e={drawExternalLabels:null};0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.canvas.setTransform();const i=this.canvas.getContext(),o=this.canvas.frame.canvas.clientWidth,s=this.canvas.frame.canvas.clientHeight;if(i.clearRect(0,0,o,s),0===this.canvas.frame.clientWidth)return;if(i.save(),i.translate(this.body.view.translation.x,this.body.view.translation.y),i.scale(this.body.view.scale,this.body.view.scale),i.beginPath(),this.body.emitter.emit("beforeDrawing",i),i.closePath(),!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawEdges(i),!1===this.dragging||!0===this.dragging&&!1===this.options.hideNodesOnDrag){const{drawExternalLabels:o}=this._drawNodes(i,t);e.drawExternalLabels=o}!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawArrows(i),null!=e.drawExternalLabels&&e.drawExternalLabels(),!1===t&&this._drawSelectionBox(i),i.beginPath(),this.body.emitter.emit("afterDrawing",i),i.closePath(),i.restore(),!0===t&&i.clearRect(0,0,o,s)}}_resizeNodes(){this.canvas.setTransform();const t=this.canvas.getContext();t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);const e=this.body.nodes;let i;for(const o in e)Object.prototype.hasOwnProperty.call(e,o)&&(i=e[o],i.resize(t),i.updateBoundingBox(t,i.selected));t.restore()}_drawNodes(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=this.body.nodes,o=this.body.nodeIndices;let s;const n=[],r=[],a=this.canvas.DOMtoCanvas({x:-20,y:-20}),h=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+20,y:this.canvas.frame.canvas.clientHeight+20}),d={top:a.y,left:a.x,bottom:h.y,right:h.x},l=[];for(let a=0;a{for(const t of l)t()}}}_drawEdges(t){const e=this.body.edges,i=this.body.edgeIndices;for(let o=0;o{0!==t.width&&(this.body.view.translation.x=.5*t.width),0!==t.height&&(this.body.view.translation.y=.5*t.height)})),this.body.emitter.on("setSize",Lo(t=this.setSize).call(t,this)),this.body.emitter.on("destroy",(()=>{this.hammerFrame.destroy(),this.hammer.destroy(),this._cleanUp()}))}setOptions(t){if(void 0!==t){Pm(["width","height","autoResize"],this.options,t)}if(this._cleanUp(),!0===this.options.autoResize){var e;if(window.ResizeObserver){const t=new ResizeObserver((()=>{!0===this.setSize()&&this.body.emitter.emit("_requestRedraw")})),{frame:e}=this;t.observe(e),this._cleanupCallbacks.push((()=>{t.unobserve(e)}))}else{const t=SC((()=>{!0===this.setSize()&&this.body.emitter.emit("_requestRedraw")}),1e3);this._cleanupCallbacks.push((()=>{clearInterval(t)}))}const t=Lo(e=this._onResize).call(e,this);window.addEventListener("resize",t),this._cleanupCallbacks.push((()=>{window.removeEventListener("resize",t)}))}}_cleanUp(){var t,e,i;mc(t=kc(e=Jc(i=this._cleanupCallbacks).call(i,0)).call(e)).call(t,(t=>{try{t()}catch(t){console.error(t)}}))}_onResize(){this.setSize(),this.body.emitter.emit("_redraw")}_getCameraState(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;!0===this.initialized&&(this.cameraState.previousWidth=this.frame.canvas.width/t,this.cameraState.previousHeight=this.frame.canvas.height/t,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/t,y:.5*this.frame.canvas.height/t}))}_setCameraState(){if(void 0!==this.cameraState.scale&&0!==this.frame.canvas.clientWidth&&0!==this.frame.canvas.clientHeight&&0!==this.pixelRatio&&this.cameraState.previousWidth>0&&this.cameraState.previousHeight>0){const t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight;let i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;const o=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),s={x:o.x-this.cameraState.position.x,y:o.y-this.cameraState.position.y};this.body.view.translation.x+=s.x*this.body.view.scale,this.body.view.translation.y+=s.y*this.body.view.scale}}_prepareValue(t){if("number"==typeof t)return t+"px";if("string"==typeof t){if(-1!==Mp(t).call(t,"%")||-1!==Mp(t).call(t,"px"))return t;if(-1===Mp(t).call(t,"%"))return t+"px"}throw new Error("Could not use the value supplied for width or height:"+t)}_create(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement("div"),this.frame.className="vis-network",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.tabIndex=0,this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{const t=document.createElement("DIV");t.style.color="red",t.style.fontWeight="bold",t.style.padding="10px",t.innerText="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(t)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}_bindHammer(){void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new py(this.frame.canvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.get("pan").set({threshold:5,direction:py.DIRECTION_ALL}),TC(this.hammer,(t=>{this.body.eventListeners.onTouch(t)})),this.hammer.on("tap",(t=>{this.body.eventListeners.onTap(t)})),this.hammer.on("doubletap",(t=>{this.body.eventListeners.onDoubleTap(t)})),this.hammer.on("press",(t=>{this.body.eventListeners.onHold(t)})),this.hammer.on("panstart",(t=>{this.body.eventListeners.onDragStart(t)})),this.hammer.on("panmove",(t=>{this.body.eventListeners.onDrag(t)})),this.hammer.on("panend",(t=>{this.body.eventListeners.onDragEnd(t)})),this.hammer.on("pinch",(t=>{this.body.eventListeners.onPinch(t)})),this.frame.canvas.addEventListener("wheel",(t=>{this.body.eventListeners.onMouseWheel(t)})),this.frame.canvas.addEventListener("mousemove",(t=>{this.body.eventListeners.onMouseMove(t)})),this.frame.canvas.addEventListener("contextmenu",(t=>{this.body.eventListeners.onContext(t)})),this.hammerFrame=new py(this.frame),DC(this.hammerFrame,(t=>{this.body.eventListeners.onRelease(t)}))}setSize(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;t=this._prepareValue(t),e=this._prepareValue(e);let i=!1;const o=this.frame.canvas.width,s=this.frame.canvas.height,n=this.pixelRatio;if(this._setPixelRatio(),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e)this._getCameraState(n),this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},i=!0;else{const t=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),e=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===t&&this.frame.canvas.height===e||this._getCameraState(n),this.frame.canvas.width!==t&&(this.frame.canvas.width=t,i=!0),this.frame.canvas.height!==e&&(this.frame.canvas.height=e,i=!0)}return!0===i&&(this.body.emitter.emit("resize",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(o/this.pixelRatio),oldHeight:Math.round(s/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}getContext(){return this.frame.canvas.getContext("2d")}_determinePixelRatio(){const t=this.getContext();if(void 0===t)throw new Error("Could not get canvax context");let e=1;"undefined"!=typeof window&&(e=window.devicePixelRatio||1);return e/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)}_setPixelRatio(){this.pixelRatio=this._determinePixelRatio()}setTransform(){const t=this.getContext();if(void 0===t)throw new Error("Could not get canvax context");t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}_XconvertDOMtoCanvas(t){return(t-this.body.view.translation.x)/this.body.view.scale}_XconvertCanvasToDOM(t){return t*this.body.view.scale+this.body.view.translation.x}_YconvertDOMtoCanvas(t){return(t-this.body.view.translation.y)/this.body.view.scale}_YconvertCanvasToDOM(t){return t*this.body.view.scale+this.body.view.translation.y}canvasToDOM(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}DOMtoCanvas(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}class IC{constructor(t,e){var i,o;this.body=t,this.canvas=e,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction="easeInOutQuint",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on("fit",Lo(i=this.fit).call(i,this)),this.body.emitter.on("animationFinished",(()=>{this.body.emitter.emit("_stopRendering")})),this.body.emitter.on("unlockNode",Lo(o=this.releaseNode).call(o,this))}setOptions(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t}fit(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t=function(t,e){const i=vo({nodes:e,minZoomLevel:Number.MIN_VALUE,maxZoomLevel:1},null!=t?t:{});if(!Vl(i.nodes))throw new TypeError("Nodes has to be an array of ids.");if(0===i.nodes.length&&(i.nodes=e),!("number"==typeof i.minZoomLevel&&i.minZoomLevel>0))throw new TypeError("Min zoom level has to be a number higher than zero.");if(!("number"==typeof i.maxZoomLevel&&i.minZoomLevel<=i.maxZoomLevel))throw new TypeError("Max zoom level has to be a number higher than min zoom level.");return i}(t,this.body.nodeIndices);const i=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;let s,n;if(0===i||0===o)n=1,s=EC.getRange(this.body.nodes,t.nodes);else if(!0===e){let e=0;for(const t in this.body.nodes)if(Object.prototype.hasOwnProperty.call(this.body.nodes,t)){!0===this.body.nodes[t].predefinedPosition&&(e+=1)}if(e>.5*this.body.nodeIndices.length)return void this.fit(t,!1);s=EC.getRange(this.body.nodes,t.nodes);n=12.662/(this.body.nodeIndices.length+7.4147)+.0964822;n*=Math.min(i/600,o/600)}else{this.body.emitter.emit("_resizeNodes"),s=EC.getRange(this.body.nodes,t.nodes);const e=i/(1.1*Math.abs(s.maxX-s.minX)),r=o/(1.1*Math.abs(s.maxY-s.minY));n=e<=r?e:r}n>t.maxZoomLevel?n=t.maxZoomLevel:n1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==this.body.nodes[t]){const i={x:this.body.nodes[t].x,y:this.body.nodes[t].y};e.position=i,e.lockedOnNode=t,this.moveTo(e)}else console.error("Node: "+t+" cannot be found.")}moveTo(t){if(void 0!==t){if(null!=t.offset){if(null!=t.offset.x){if(t.offset.x=+t.offset.x,!cw(t.offset.x))throw new TypeError('The option "offset.x" has to be a finite number.')}else t.offset.x=0;if(null!=t.offset.y){if(t.offset.y=+t.offset.y,!cw(t.offset.y))throw new TypeError('The option "offset.y" has to be a finite number.')}else t.offset.x=0}else t.offset={x:0,y:0};if(null!=t.position){if(null!=t.position.x){if(t.position.x=+t.position.x,!cw(t.position.x))throw new TypeError('The option "position.x" has to be a finite number.')}else t.position.x=0;if(null!=t.position.y){if(t.position.y=+t.position.y,!cw(t.position.y))throw new TypeError('The option "position.y" has to be a finite number.')}else t.position.x=0}else t.position=this.getViewPosition();if(null!=t.scale){if(t.scale=+t.scale,!(t.scale>0))throw new TypeError('The option "scale" has to be a number greater than zero.')}else t.scale=this.body.view.scale;void 0===t.animation&&(t.animation={duration:0}),!1===t.animation&&(t.animation={duration:0}),!0===t.animation&&(t.animation={}),void 0===t.animation.duration&&(t.animation.duration=1e3),void 0===t.animation.easingFunction&&(t.animation.easingFunction="easeInOutQuad"),this.animateView(t)}else t={}}animateView(t){if(void 0===t)return;this.animationEasingFunction=t.animation.easingFunction,this.releaseNode(),!0===t.locked&&(this.lockedOnNodeId=t.lockedOnNode,this.lockedOnNodeOffset=t.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=t.scale,this.body.view.scale=this.targetScale;const e=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),i=e.x-t.position.x,o=e.y-t.position.y;var s,n;(this.targetTranslation={x:this.sourceTranslation.x+i*this.targetScale+t.offset.x,y:this.sourceTranslation.y+o*this.targetScale+t.offset.y},0===t.animation.duration)?null!=this.lockedOnNodeId?(this.viewFunction=Lo(s=this._lockedRedraw).call(s,this),this.body.emitter.on("initRedraw",this.viewFunction)):(this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit("_requestRedraw")):(this.animationSpeed=1/(60*t.animation.duration*.001)||1/60,this.animationEasingFunction=t.animation.easingFunction,this.viewFunction=Lo(n=this._transitionRedraw).call(n,this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))}_lockedRedraw(){const t=this.body.nodes[this.lockedOnNodeId].x,e=this.body.nodes[this.lockedOnNodeId].y,i=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),o=i.x-t,s=i.y-e,n=this.body.view.translation,r={x:n.x+o*this.body.view.scale+this.lockedOnNodeOffset.x,y:n.y+s*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=r}releaseNode(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}_transitionRedraw(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=!0===t?1:this.easingTime;const e=iy[this.animationEasingFunction](this.easingTime);if(this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*e,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*e,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*e},this.easingTime>=1){var i;if(this.body.emitter.off("initRedraw",this.viewFunction),this.easingTime=0,null!=this.lockedOnNodeId)this.viewFunction=Lo(i=this._lockedRedraw).call(i,this),this.body.emitter.on("initRedraw",this.viewFunction);this.body.emitter.emit("animationFinished")}}getScale(){return this.body.view.scale}getViewPosition(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}function PC(t){var e,i=t&&t.preventDefault||!1,o=t&&t.container||window,s={},n={keydown:{},keyup:{}},r={};for(e=97;e<=122;e++)r[String.fromCharCode(e)]={code:e-97+65,shift:!1};for(e=65;e<=90;e++)r[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;e<=9;e++)r[""+e]={code:48+e,shift:!1};for(e=1;e<=12;e++)r["F"+e]={code:111+e,shift:!1};for(e=0;e<=9;e++)r["num"+e]={code:96+e,shift:!1};r["num*"]={code:106,shift:!1},r["num+"]={code:107,shift:!1},r["num-"]={code:109,shift:!1},r["num/"]={code:111,shift:!1},r["num."]={code:110,shift:!1},r.left={code:37,shift:!1},r.up={code:38,shift:!1},r.right={code:39,shift:!1},r.down={code:40,shift:!1},r.space={code:32,shift:!1},r.enter={code:13,shift:!1},r.shift={code:16,shift:void 0},r.esc={code:27,shift:!1},r.backspace={code:8,shift:!1},r.tab={code:9,shift:!1},r.ctrl={code:17,shift:!1},r.alt={code:18,shift:!1},r.delete={code:46,shift:!1},r.pageup={code:33,shift:!1},r.pagedown={code:34,shift:!1},r["="]={code:187,shift:!1},r["-"]={code:189,shift:!1},r["]"]={code:221,shift:!1},r["["]={code:219,shift:!1};var a=function(t){d(t,"keydown")},h=function(t){d(t,"keyup")},d=function(t,e){if(void 0!==n[e][t.keyCode]){for(var o=n[e][t.keyCode],s=0;s{this.activated=!0,this.configureKeyboardBindings()})),this.body.emitter.on("deactivate",(()=>{this.activated=!1,this.configureKeyboardBindings()})),this.body.emitter.on("destroy",(()=>{void 0!==this.keycharm&&this.keycharm.destroy()})),this.options={}}setOptions(t){void 0!==t&&(this.options=t,this.create())}create(){!0===this.options.navigationButtons?!1===this.iconsCreated&&this.loadNavigationElements():!0===this.iconsCreated&&this.cleanNavigation(),this.configureKeyboardBindings()}cleanNavigation(){if(0!=this.navigationHammers.length){for(let t=0;t{this._stopMovement()})),this.navigationHammers.push(s),this.iconsCreated=!0}bindToRedraw(t){var e;void 0===this.boundFunctions[t]&&(this.boundFunctions[t]=Lo(e=this[t]).call(e,this),this.body.emitter.on("initRedraw",this.boundFunctions[t]),this.body.emitter.emit("_startRendering"))}unbindFromRedraw(t){void 0!==this.boundFunctions[t]&&(this.body.emitter.off("initRedraw",this.boundFunctions[t]),this.body.emitter.emit("_stopRendering"),delete this.boundFunctions[t])}_fit(){(new Date).valueOf()-this.touchTime>700&&(this.body.emitter.emit("fit",{duration:700}),this.touchTime=(new Date).valueOf())}_stopMovement(){for(const t in this.boundFunctions)Object.prototype.hasOwnProperty.call(this.boundFunctions,t)&&(this.body.emitter.off("initRedraw",this.boundFunctions[t]),this.body.emitter.emit("_stopRendering"));this.boundFunctions={}}_moveUp(){this.body.view.translation.y+=this.options.keyboard.speed.y}_moveDown(){this.body.view.translation.y-=this.options.keyboard.speed.y}_moveLeft(){this.body.view.translation.x+=this.options.keyboard.speed.x}_moveRight(){this.body.view.translation.x-=this.options.keyboard.speed.x}_zoomIn(){const t=this.body.view.scale,e=this.body.view.scale*(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,o=e/t,s=(1-o)*this.canvas.canvasViewCenter.x+i.x*o,n=(1-o)*this.canvas.canvasViewCenter.y+i.y*o;this.body.view.scale=e,this.body.view.translation={x:s,y:n},this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale,pointer:null})}_zoomOut(){const t=this.body.view.scale,e=this.body.view.scale/(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,o=e/t,s=(1-o)*this.canvas.canvasViewCenter.x+i.x*o,n=(1-o)*this.canvas.canvasViewCenter.y+i.y*o;this.body.view.scale=e,this.body.view.translation={x:s,y:n},this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale,pointer:null})}configureKeyboardBindings(){var t,e,i,o,s,n,r,a,h,d,l,c,u,p,f,g,m,y,b,v,w,_,x,E;(void 0!==this.keycharm&&this.keycharm.destroy(),!0===this.options.keyboard.enabled)&&(!0===this.options.keyboard.bindToWindow?this.keycharm=PC({container:window,preventDefault:!0}):this.keycharm=PC({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),!0===this.activated&&(Lo(t=this.keycharm).call(t,"up",(()=>{this.bindToRedraw("_moveUp")}),"keydown"),Lo(e=this.keycharm).call(e,"down",(()=>{this.bindToRedraw("_moveDown")}),"keydown"),Lo(i=this.keycharm).call(i,"left",(()=>{this.bindToRedraw("_moveLeft")}),"keydown"),Lo(o=this.keycharm).call(o,"right",(()=>{this.bindToRedraw("_moveRight")}),"keydown"),Lo(s=this.keycharm).call(s,"=",(()=>{this.bindToRedraw("_zoomIn")}),"keydown"),Lo(n=this.keycharm).call(n,"num+",(()=>{this.bindToRedraw("_zoomIn")}),"keydown"),Lo(r=this.keycharm).call(r,"num-",(()=>{this.bindToRedraw("_zoomOut")}),"keydown"),Lo(a=this.keycharm).call(a,"-",(()=>{this.bindToRedraw("_zoomOut")}),"keydown"),Lo(h=this.keycharm).call(h,"[",(()=>{this.bindToRedraw("_zoomOut")}),"keydown"),Lo(d=this.keycharm).call(d,"]",(()=>{this.bindToRedraw("_zoomIn")}),"keydown"),Lo(l=this.keycharm).call(l,"pageup",(()=>{this.bindToRedraw("_zoomIn")}),"keydown"),Lo(c=this.keycharm).call(c,"pagedown",(()=>{this.bindToRedraw("_zoomOut")}),"keydown"),Lo(u=this.keycharm).call(u,"up",(()=>{this.unbindFromRedraw("_moveUp")}),"keyup"),Lo(p=this.keycharm).call(p,"down",(()=>{this.unbindFromRedraw("_moveDown")}),"keyup"),Lo(f=this.keycharm).call(f,"left",(()=>{this.unbindFromRedraw("_moveLeft")}),"keyup"),Lo(g=this.keycharm).call(g,"right",(()=>{this.unbindFromRedraw("_moveRight")}),"keyup"),Lo(m=this.keycharm).call(m,"=",(()=>{this.unbindFromRedraw("_zoomIn")}),"keyup"),Lo(y=this.keycharm).call(y,"num+",(()=>{this.unbindFromRedraw("_zoomIn")}),"keyup"),Lo(b=this.keycharm).call(b,"num-",(()=>{this.unbindFromRedraw("_zoomOut")}),"keyup"),Lo(v=this.keycharm).call(v,"-",(()=>{this.unbindFromRedraw("_zoomOut")}),"keyup"),Lo(w=this.keycharm).call(w,"[",(()=>{this.unbindFromRedraw("_zoomOut")}),"keyup"),Lo(_=this.keycharm).call(_,"]",(()=>{this.unbindFromRedraw("_zoomIn")}),"keyup"),Lo(x=this.keycharm).call(x,"pageup",(()=>{this.unbindFromRedraw("_zoomIn")}),"keyup"),Lo(E=this.keycharm).call(E,"pagedown",(()=>{this.unbindFromRedraw("_zoomOut")}),"keyup")))}}class zC{constructor(t,e,i){var o,s,n,r,a,h,d,l,c,u,p,f,g;this.body=t,this.canvas=e,this.selectionHandler=i,this.navigationHandler=new NC(t,e),this.body.eventListeners.onTap=Lo(o=this.onTap).call(o,this),this.body.eventListeners.onTouch=Lo(s=this.onTouch).call(s,this),this.body.eventListeners.onDoubleTap=Lo(n=this.onDoubleTap).call(n,this),this.body.eventListeners.onHold=Lo(r=this.onHold).call(r,this),this.body.eventListeners.onDragStart=Lo(a=this.onDragStart).call(a,this),this.body.eventListeners.onDrag=Lo(h=this.onDrag).call(h,this),this.body.eventListeners.onDragEnd=Lo(d=this.onDragEnd).call(d,this),this.body.eventListeners.onMouseWheel=Lo(l=this.onMouseWheel).call(l,this),this.body.eventListeners.onPinch=Lo(c=this.onPinch).call(c,this),this.body.eventListeners.onMouseMove=Lo(u=this.onMouseMove).call(u,this),this.body.eventListeners.onRelease=Lo(p=this.onRelease).call(p,this),this.body.eventListeners.onContext=Lo(f=this.onContext).call(f,this),this.touchTime=0,this.drag={},this.pinch={},this.popup=void 0,this.popupObj=void 0,this.popupTimer=void 0,this.body.functions.getPointer=Lo(g=this.getPointer).call(g,this),this.options={},this.defaultOptions={dragNodes:!0,dragView:!0,hover:!1,keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02},bindToWindow:!0,autoFocus:!0},navigationButtons:!1,tooltipDelay:300,zoomView:!0,zoomSpeed:1},vo(this.options,this.defaultOptions),this.bindEventListeners()}bindEventListeners(){this.body.emitter.on("destroy",(()=>{clearTimeout(this.popupTimer),delete this.body.functions.getPointer}))}setOptions(t){if(void 0!==t){Bm(["hideEdgesOnDrag","hideEdgesOnZoom","hideNodesOnDrag","keyboard","multiselect","selectable","selectConnectedEdges"],this.options,t),ey(this.options,t,"keyboard"),t.tooltip&&(vo(this.options.tooltip,t.tooltip),t.tooltip.color&&(this.options.tooltip.color=Um(t.tooltip.color)))}this.navigationHandler.setOptions(this.options)}getPointer(t){return{x:t.x-Am(this.canvas.frame.canvas),y:t.y-jm(this.canvas.frame.canvas)}}onTouch(t){(new Date).valueOf()-this.touchTime>50&&(this.drag.pointer=this.getPointer(t.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=(new Date).valueOf())}onTap(t){const e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect&&(t.changedPointers[0].ctrlKey||t.changedPointers[0].metaKey);this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent("click",t,e)}onDoubleTap(t){const e=this.getPointer(t.center);this.selectionHandler.generateClickEvent("doubleClick",t,e)}onHold(t){const e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect;this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent("click",t,e),this.selectionHandler.generateClickEvent("hold",t,e)}onRelease(t){if((new Date).valueOf()-this.touchTime>10){const e=this.getPointer(t.center);this.selectionHandler.generateClickEvent("release",t,e),this.touchTime=(new Date).valueOf()}}onContext(t){const e=this.getPointer({x:t.clientX,y:t.clientY});this.selectionHandler.generateClickEvent("oncontext",t,e)}checkSelectionChanges(t){!0===(arguments.length>1&&void 0!==arguments[1]&&arguments[1])?this.selectionHandler.selectAdditionalOnPoint(t):this.selectionHandler.selectOnPoint(t)}_determineDifference(t,e){const i=function(t,e){const i=[];for(let o=0;o{const e=t.node;!1===t.xFixed&&(e.x=this.canvas._XconvertDOMtoCanvas(this.canvas._XconvertCanvasToDOM(t.x)+o)),!1===t.yFixed&&(e.y=this.canvas._YconvertDOMtoCanvas(this.canvas._YconvertCanvasToDOM(t.y)+s))})),this.body.emitter.emit("startSimulation")}else{if(t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent("dragging",t,e,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);this.body.selectionBox.position.end={x:this.canvas._XconvertDOMtoCanvas(e.x),y:this.canvas._YconvertDOMtoCanvas(e.y)},this.body.emitter.emit("_requestRedraw")}if(!0===this.options.dragView&&!t.srcEvent.shiftKey){if(this.selectionHandler.generateClickEvent("dragging",t,e,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);const i=e.x-this.drag.pointer.x,o=e.y-this.drag.pointer.y;this.body.view.translation={x:this.drag.translation.x+i,y:this.drag.translation.y+o},this.body.emitter.emit("_requestRedraw")}}}onDragEnd(t){if(this.drag.dragging=!1,this.body.selectionBox.show){var e;this.body.selectionBox.show=!1;const i=this.body.selectionBox.position,o={minX:Math.min(i.start.x,i.end.x),minY:Math.min(i.start.y,i.end.y),maxX:Math.max(i.start.x,i.end.x),maxY:Math.max(i.start.y,i.end.y)},s=ju(e=this.body.nodeIndices).call(e,(t=>{const e=this.body.nodes[t];return e.x>=o.minX&&e.x<=o.maxX&&e.y>=o.minY&&e.y<=o.maxY}));mc(s).call(s,(t=>this.selectionHandler.selectObject(this.body.nodes[t])));const n=this.getPointer(t.center);this.selectionHandler.commitAndEmit(n,t),this.selectionHandler.generateClickEvent("dragEnd",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit("_requestRedraw")}else{const e=this.drag.selection;e&&e.length?(mc(e).call(e,(function(t){t.node.options.fixed.x=t.xFixed,t.node.options.fixed.y=t.yFixed})),this.selectionHandler.generateClickEvent("dragEnd",t,this.getPointer(t.center)),this.body.emitter.emit("startSimulation")):(this.selectionHandler.generateClickEvent("dragEnd",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit("_requestRedraw"))}}onPinch(t){const e=this.getPointer(t.center);this.drag.pinched=!0,void 0===this.pinch.scale&&(this.pinch.scale=1);const i=this.pinch.scale*t.scale;this.zoom(i,e)}zoom(t,e){if(!0===this.options.zoomView){const i=this.body.view.scale;let o;t<1e-5&&(t=1e-5),t>10&&(t=10),void 0!==this.drag&&!0===this.drag.dragging&&(o=this.canvas.DOMtoCanvas(this.drag.pointer));const s=this.body.view.translation,n=t/i,r=(1-n)*e.x+s.x*n,a=(1-n)*e.y+s.y*n;if(this.body.view.scale=t,this.body.view.translation={x:r,y:a},null!=o){const t=this.canvas.canvasToDOM(o);this.drag.pointer.x=t.x,this.drag.pointer.y=t.y}this.body.emitter.emit("_requestRedraw"),ithis._checkShowPopup(e)),this.options.tooltipDelay))),!0===this.options.hover&&this.selectionHandler.hoverObject(t,e)}_checkShowPopup(t){const e=this.canvas._XconvertDOMtoCanvas(t.x),i=this.canvas._YconvertDOMtoCanvas(t.y),o={left:e,top:i,right:e,bottom:i},s=void 0===this.popupObj?void 0:this.popupObj.id;let n=!1,r="node";if(void 0===this.popupObj){const t=this.body.nodeIndices,e=this.body.nodes;let i;const s=[];for(let r=0;r0&&(this.popupObj=e[s[s.length-1]],n=!0)}if(void 0===this.popupObj&&!1===n){const t=this.body.edgeIndices,e=this.body.edges;let i;const s=[];for(let n=0;n0&&(this.popupObj=e[s[s.length-1]],r="edge")}void 0!==this.popupObj?this.popupObj.id!==s&&(void 0===this.popup&&(this.popup=new fy(this.canvas.frame)),this.popup.popupTargetType=r,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(t.x+3,t.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit("showPopup",this.popupObj.id)):void 0!==this.popup&&(this.popup.hide(),this.body.emitter.emit("hidePopup"))}_checkHidePopup(t){const e=this.selectionHandler._pointerToPositionObject(t);let i=!1;if("node"===this.popup.popupTargetType){if(void 0!==this.body.nodes[this.popup.popupTargetId]&&(i=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(e),!0===i)){const e=this.selectionHandler.getNodeAt(t);i=void 0!==e&&e.id===this.popup.popupTargetId}}else void 0===this.selectionHandler.getNodeAt(t)&&void 0!==this.body.edges[this.popup.popupTargetId]&&(i=this.body.edges[this.popup.popupTargetId].isOverlappingWith(e));!1===i&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit("hidePopup"))}}var FC=m,AC=Ov,jC=Eb.getWeakData,RC=nv,LC=ii,HC=U,WC=tt,VC=iv,qC=$t,UC=Fr.set,YC=Fr.getterFor,XC=qr.find,GC=qr.findIndex,KC=FC([].splice),ZC=0,QC=function(t){return t.frozen||(t.frozen=new $C)},$C=function(){this.entries=[]},JC=function(t,e){return XC(t.entries,(function(t){return t[0]===e}))};$C.prototype={get:function(t){var e=JC(this,t);if(e)return e[1]},has:function(t){return!!JC(this,t)},set:function(t,e){var i=JC(this,t);i?i[1]=e:this.entries.push([t,e])},delete:function(t){var e=GC(this.entries,(function(e){return e[0]===t}));return~e&&KC(this.entries,e,1),!!~e}};var tk,ek={getConstructor:function(t,e,i,o){var s=t((function(t,s){RC(t,n),UC(t,{type:e,id:ZC++,frozen:void 0}),HC(s)||VC(s,t[o],{that:t,AS_ENTRIES:i})})),n=s.prototype,r=YC(e),a=function(t,e,i){var o=r(t),s=jC(LC(e),!0);return!0===s?QC(o).set(e,i):s[o.id]=i,t};return AC(n,{delete:function(t){var e=r(this);if(!WC(t))return!1;var i=jC(t);return!0===i?QC(e).delete(t):i&&qC(i,e.id)&&delete i[e.id]},has:function(t){var e=r(this);if(!WC(t))return!1;var i=jC(t);return!0===i?QC(e).has(t):i&&qC(i,e.id)}}),AC(n,i?{get:function(t){var e=r(this);if(WC(t)){var i=jC(t);return!0===i?QC(e).get(t):i?i[e.id]:void 0}},set:function(t,e){return a(this,t,e)}}:{add:function(t){return a(this,t,!0)}}),s}},ik=ab,ok=s,sk=m,nk=Ov,rk=Eb,ak=xv,hk=ek,dk=tt,lk=Fr.enforce,ck=n,uk=xr,pk=Object,fk=Array.isArray,gk=pk.isExtensible,mk=pk.isFrozen,yk=pk.isSealed,bk=pk.freeze,vk=pk.seal,wk={},_k={},xk=!ok.ActiveXObject&&"ActiveXObject"in ok,Ek=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},Ok=ak("WeakMap",Ek,hk),Ck=Ok.prototype,kk=sk(Ck.set);if(uk)if(xk){tk=hk.getConstructor(Ek,"WeakMap",!0),rk.enable();var Sk=sk(Ck.delete),Tk=sk(Ck.has),Dk=sk(Ck.get);nk(Ck,{delete:function(t){if(dk(t)&&!gk(t)){var e=lk(this);return e.frozen||(e.frozen=new tk),Sk(this,t)||e.frozen.delete(t)}return Sk(this,t)},has:function(t){if(dk(t)&&!gk(t)){var e=lk(this);return e.frozen||(e.frozen=new tk),Tk(this,t)||e.frozen.has(t)}return Tk(this,t)},get:function(t){if(dk(t)&&!gk(t)){var e=lk(this);return e.frozen||(e.frozen=new tk),Tk(this,t)?Dk(this,t):e.frozen.get(t)}return Dk(this,t)},set:function(t,e){if(dk(t)&&!gk(t)){var i=lk(this);i.frozen||(i.frozen=new tk),Tk(this,t)?kk(this,t,e):i.frozen.set(t,e)}else kk(this,t,e);return this}})}else ik&&ck((function(){var t=bk([]);return kk(new Ok,t,1),!mk(t)}))&&nk(Ck,{set:function(t,e){var i;return fk(t)&&(mk(t)?i=wk:yk(t)&&(i=_k)),kk(this,t,e),i===wk&&bk(t),i===_k&&vk(t),this}});var Mk,Ik,Pk,Bk,Nk,zk=i(et.WeakMap);function Fk(t,e,i,o){if("a"===i&&!o)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?o:"a"===i?o.call(t):o?o.value:e.get(t)}function Ak(t,e,i,o,s){if("m"===o)throw new TypeError("Private method is not writable");if("a"===o&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===o?s.call(t,i):s?s.value=i:e.set(t,i),i}function jk(t,e){const i=new nx;for(const o of e)t.has(o)||i.add(o);return i}"function"==typeof SuppressedError&&SuppressedError;class Rk{constructor(){Mk.set(this,new nx),Ik.set(this,new nx)}get size(){return Fk(this,Ik,"f").size}add(){for(var t=arguments.length,e=new Array(t),i=0;i0&&void 0!==arguments[0]?arguments[0]:()=>{};Pk.set(this,new Rk),Bk.set(this,new Rk),Nk.set(this,void 0),Ak(this,Nk,t,"f")}get sizeNodes(){return Fk(this,Pk,"f").size}get sizeEdges(){return Fk(this,Bk,"f").size}getNodes(){return Fk(this,Pk,"f").getSelection()}getEdges(){return Fk(this,Bk,"f").getSelection()}addNodes(){Fk(this,Pk,"f").add(...arguments)}addEdges(){Fk(this,Bk,"f").add(...arguments)}deleteNodes(t){Fk(this,Pk,"f").delete(t)}deleteEdges(t){Fk(this,Bk,"f").delete(t)}clear(){Fk(this,Pk,"f").clear(),Fk(this,Bk,"f").clear()}commit(){const t={nodes:Fk(this,Pk,"f").commit(),edges:Fk(this,Bk,"f").commit()};for(var e=arguments.length,i=new Array(e),o=0;o{this.updateSelection()}))}setOptions(t){if(void 0!==t){Pm(["multiselect","hoverConnectedEdges","selectable","selectConnectedEdges"],this.options,t)}}selectOnPoint(t){let e=!1;if(!0===this.options.selectable){const i=this.getNodeAt(t)||this.getEdgeAt(t);this.unselectAll(),void 0!==i&&(e=this.selectObject(i)),this.body.emitter.emit("_requestRedraw")}return e}selectAdditionalOnPoint(t){let e=!1;if(!0===this.options.selectable){const i=this.getNodeAt(t)||this.getEdgeAt(t);void 0!==i&&(e=!0,!0===i.isSelected()?this.deselectObject(i):this.selectObject(i),this.body.emitter.emit("_requestRedraw"))}return e}_initBaseEvent(t,e){const i={};return i.pointer={DOM:{x:e.x,y:e.y},canvas:this.canvas.DOMtoCanvas(e)},i.event=t,i}generateClickEvent(t,e,i,o){let s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];const n=this._initBaseEvent(e,i);if(!0===s)n.nodes=[],n.edges=[];else{const t=this.getSelection();n.nodes=t.nodes,n.edges=t.edges}void 0!==o&&(n.previousSelection=o),"click"==t&&(n.items=this.getClickedItems(i)),void 0!==e.controlEdge&&(n.controlEdge=e.controlEdge),this.body.emitter.emit(t,n)}selectObject(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;return void 0!==t&&(t instanceof NO?(!0===e&&this._selectionAccumulator.addEdges(...t.edges),this._selectionAccumulator.addNodes(t)):this._selectionAccumulator.addEdges(t),!0)}deselectObject(t){!0===t.isSelected()&&(t.selected=!1,this._removeFromSelection(t))}_getAllNodesOverlappingWith(t){const e=[],i=this.body.nodes;for(let o=0;o1&&void 0!==arguments[1])||arguments[1];const i=this._pointerToPositionObject(t),o=this._getAllNodesOverlappingWith(i);return o.length>0?!0===e?this.body.nodes[o[o.length-1]]:o[o.length-1]:void 0}_getEdgesOverlappingWith(t,e){const i=this.body.edges;for(let o=0;o1&&void 0!==arguments[1])||arguments[1];const i=this.canvas.DOMtoCanvas(t);let o=10,s=null;const n=this.body.edges;for(let t=0;t0&&(this.generateClickEvent("deselectEdge",e,t,s),i=!0),o.nodes.deleted.length>0&&(this.generateClickEvent("deselectNode",e,t,s),i=!0),o.nodes.added.length>0&&(this.generateClickEvent("selectNode",e,t),i=!0),o.edges.added.length>0&&(this.generateClickEvent("selectEdge",e,t),i=!0),!0===i&&this.generateClickEvent("select",e,t)}getSelection(){return{nodes:this.getSelectedNodeIds(),edges:this.getSelectedEdgeIds()}}getSelectedNodes(){return this._selectionAccumulator.getNodes()}getSelectedEdges(){return this._selectionAccumulator.getEdges()}getSelectedNodeIds(){var t;return Zl(t=this._selectionAccumulator.getNodes()).call(t,(t=>t.id))}getSelectedEdgeIds(){var t;return Zl(t=this._selectionAccumulator.getEdges()).call(t,(t=>t.id))}setSelection(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t||!t.nodes&&!t.edges)throw new TypeError("Selection must be an object with nodes and/or edges properties");if((e.unselectAll||void 0===e.unselectAll)&&this.unselectAll(),t.nodes)for(const i of t.nodes){const t=this.body.nodes[i];if(!t)throw new RangeError('Node with id "'+i+'" not found');this.selectObject(t,e.highlightEdges)}if(t.edges)for(const e of t.edges){const t=this.body.edges[e];if(!t)throw new RangeError('Edge with id "'+e+'" not found');this.selectObject(t)}this.body.emitter.emit("_requestRedraw"),this._selectionAccumulator.commit()}selectNodes(t){let e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t||void 0===t.length)throw"Selection must be an array with ids";this.setSelection({nodes:t},{highlightEdges:e})}selectEdges(t){if(!t||void 0===t.length)throw"Selection must be an array with ids";this.setSelection({edges:t})}updateSelection(){for(const t in this._selectionAccumulator.getNodes())Object.prototype.hasOwnProperty.call(this.body.nodes,t.id)||this._selectionAccumulator.deleteNodes(t);for(const t in this._selectionAccumulator.getEdges())Object.prototype.hasOwnProperty.call(this.body.edges,t.id)||this._selectionAccumulator.deleteEdges(t)}getClickedItems(t){const e=this.canvas.DOMtoCanvas(t),i=[],o=this.body.nodeIndices,s=this.body.nodes;for(let t=o.length-1;t>=0;t--){const n=s[o[t]].getItemsOnPoint(e);i.push.apply(i,n)}const n=this.body.edgeIndices,r=this.body.edges;for(let t=n.length-1;t>=0;t--){const o=r[n[t]].getItemsOnPoint(e);i.push.apply(i,o)}return i}}class Wk{abstract(){throw new Error("Can't instantiate abstract class!")}fake_use(){}curveType(){return this.abstract()}getPosition(t){return this.fake_use(t),this.abstract()}setPosition(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;this.fake_use(t,e,i),this.abstract()}getTreeSize(t){return this.fake_use(t),this.abstract()}sort(t){this.fake_use(t),this.abstract()}fix(t,e){this.fake_use(t,e),this.abstract()}shift(t,e){this.fake_use(t,e),this.abstract()}}class Vk extends Wk{constructor(t){super(),this.layout=t}curveType(){return"horizontal"}getPosition(t){return t.x}setPosition(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.x=e}getTreeSize(t){const e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_x,max:e.max_x}}sort(t){qx(t).call(t,(function(t,e){return t.x-e.x}))}fix(t,e){t.y=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.y=!0}shift(t,e){this.layout.body.nodes[t].x+=e}}class qk extends Wk{constructor(t){super(),this.layout=t}curveType(){return"vertical"}getPosition(t){return t.y}setPosition(t,e){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.y=e}getTreeSize(t){const e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_y,max:e.max_y}}sort(t){qx(t).call(t,(function(t,e){return t.y-e.y}))}fix(t,e){t.x=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.x=!0}shift(t,e){this.layout.body.nodes[t].y+=e}}var Uk=qr.every;Ti({target:"Array",proto:!0,forced:!nc("every")},{every:function(t){return Uk(this,t,arguments.length>1?arguments[1]:void 0)}});var Yk=No("Array").every,Xk=at,Gk=Yk,Kk=Array.prototype,Zk=function(t){var e=t.every;return t===Kk||Xk(Kk,t)&&e===Kk.every?Gk:e},Qk=i(Zk);function $k(t,e){const i=new nx;return mc(t).call(t,(t=>{var e;mc(e=t.edges).call(e,(t=>{t.connected&&i.add(t)}))})),mc(i).call(i,(t=>{const i=t.from.id,o=t.to.id;null==e[i]&&(e[i]=0),(null==e[o]||e[i]>=e[o])&&(e[o]=e[i]+1)})),e}function Jk(t,e,i,o){var s;const n=Np(null),r=H_(s=[...hE(o).call(o)]).call(s,((t,e)=>t+1+e.edges.length),0),a=i+"Id",h="to"===i?1:-1;for(const[s,c]of o){if(!o.has(s)||!t(c))continue;n[s]=0;const u=[c];let p,f=0;for(;p=u.pop();){var d,l;if(!o.has(s))continue;const t=n[p.id]+h;if(mc(d=ju(l=p.edges).call(l,(t=>t.connected&&t.to!==t.from&&t[i]!==p&&o.has(t.toId)&&o.has(t.fromId)))).call(d,(o=>{const s=o[a],r=n[s];(null==r||e(t,r))&&(n[s]=t,u.push(o[i]))})),f>r)return $k(o,n);++f}}return n}class tS{constructor(){this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}addRelation(t,e){void 0===this.childrenReference[t]&&(this.childrenReference[t]=[]),this.childrenReference[t].push(e),void 0===this.parentReference[e]&&(this.parentReference[e]=[]),this.parentReference[e].push(t)}checkIfTree(){for(const t in this.parentReference)if(this.parentReference[t].length>1)return void(this.isTree=!1);this.isTree=!0}numTrees(){return this.treeIndex+1}setTreeIndex(t,e){void 0!==e&&void 0===this.trees[t.id]&&(this.trees[t.id]=e,this.treeIndex=Math.max(e,this.treeIndex))}ensureLevel(t){void 0===this.levels[t]&&(this.levels[t]=0)}getMaxLevel(t){const e={},i=t=>{if(void 0!==e[t])return e[t];let o=this.levels[t];if(this.childrenReference[t]){const e=this.childrenReference[t];if(e.length>0)for(let t=0;tt-e));for(const t of o)e.set(t,i++);for(const t in this.levels)Object.prototype.hasOwnProperty.call(this.levels,t)&&(this.levels[t]=e.get(this.levels[t]))}getTreeSize(t,e){let i=1e9,o=-1e9,s=1e9,n=-1e9;for(const r in this.trees)if(Object.prototype.hasOwnProperty.call(this.trees,r)&&this.trees[r]===e){const e=t[r];i=Math.min(e.x,i),o=Math.max(e.x,o),s=Math.min(e.y,s),n=Math.max(e.y,n)}return{min_x:i,max_x:o,min_y:s,max_y:n}}hasSameParent(t,e){const i=this.parentReference[t.id],o=this.parentReference[e.id];if(void 0===i||void 0===o)return!1;for(let t=0;t{this.setupHierarchicalLayout()})),this.body.emitter.on("_dataLoaded",(()=>{this.layoutNetwork()})),this.body.emitter.on("_resetHierarchicalLayout",(()=>{this.setupHierarchicalLayout()})),this.body.emitter.on("_adjustEdgesForHierarchicalLayout",(()=>{if(!0!==this.options.hierarchical.enabled)return;const t=this.direction.curveType();this.body.emitter.emit("_forceDisableDynamicCurves",t,!1)}))}setOptions(t,e){if(void 0!==t){const i=this.options.hierarchical,o=i.enabled;if(Pm(["randomSeed","improvedLayout","clusterThreshold"],this.options,t),ey(this.options,t,"hierarchical"),void 0!==t.randomSeed&&this._resetRNG(t.randomSeed),!0===i.enabled)return!0===o&&this.body.emitter.emit("refresh",!0),"RL"===i.direction||"DU"===i.direction?i.levelSeparation>0&&(i.levelSeparation*=-1):i.levelSeparation<0&&(i.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit("_resetHierarchicalLayout"),this.adaptAllOptionsForHierarchicalLayout(e);if(!0===o)return this.body.emitter.emit("refresh"),Nm(e,this.optionsBackup)}return e}_resetRNG(t){this.initialRandomSeed=t,this._rng=ym(this.initialRandomSeed)}adaptAllOptionsForHierarchicalLayout(t){if(!0===this.options.hierarchical.enabled){const e=this.optionsBackup.physics;void 0===t.physics||!0===t.physics?(t.physics={enabled:void 0===e.enabled||e.enabled,solver:"hierarchicalRepulsion"},e.enabled=void 0===e.enabled||e.enabled,e.solver=e.solver||"barnesHut"):"object"==typeof t.physics?(e.enabled=void 0===t.physics.enabled||t.physics.enabled,e.solver=t.physics.solver||"barnesHut",t.physics.solver="hierarchicalRepulsion"):!1!==t.physics&&(e.solver="barnesHut",t.physics={solver:"hierarchicalRepulsion"});let i=this.direction.curveType();if(void 0===t.edges)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges={smooth:!1};else if(void 0===t.edges.smooth)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges.smooth=!1;else if("boolean"==typeof t.edges.smooth)this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:i};else{const e=t.edges.smooth;void 0!==e.type&&"dynamic"!==e.type&&(i=e.type),this.optionsBackup.edges={smooth:{enabled:void 0===e.enabled||e.enabled,type:void 0===e.type?"dynamic":e.type,roundness:void 0===e.roundness?.5:e.roundness,forceDirection:void 0!==e.forceDirection&&e.forceDirection}},t.edges.smooth={enabled:void 0===e.enabled||e.enabled,type:i,roundness:void 0===e.roundness?.5:e.roundness,forceDirection:void 0!==e.forceDirection&&e.forceDirection}}this.body.emitter.emit("_forceDisableDynamicCurves",i)}return t}positionInitially(t){if(!0!==this.options.hierarchical.enabled){this._resetRNG(this.initialRandomSeed);const e=t.length+50;for(let i=0;io){const n=t.length;for(;t.length>o&&i<=e;){i+=1;const e=t.length;i%3==0?this.body.modules.clustering.clusterBridges(s):this.body.modules.clustering.clusterOutliers(s);if(e==t.length&&i%3!=0)return this._declusterAll(),this.body.emitter.emit("_layoutFailed"),void console.info("This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*n)})}i>e&&console.info("The clustering didn't succeed within the amount of interations allowed, progressing with partial result."),this.body.modules.kamadaKawai.solve(t,this.body.edgeIndices,!0),this._shiftToCenter();const n=70;for(let e=0;e0){let t,e,i=!1,o=!1;for(e in this.lastNodeOnLevel={},this.hierarchical=new tS,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&(t=this.body.nodes[e],void 0!==t.options.level?(i=!0,this.hierarchical.levels[e]=t.options.level):o=!0);if(!0===o&&!0===i)throw new Error("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.");{if(!0===o){const t=this.options.hierarchical.sortMethod;"hubsize"===t?this._determineLevelsByHubsize():"directed"===t?this._determineLevelsDirected():"custom"===t&&this._determineLevelsCustomCallback()}for(const t in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,t)&&this.hierarchical.ensureLevel(t);const t=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(t),this._condenseHierarchy(),this._shiftToCenter()}}}_condenseHierarchy(){var t=this;let e=!1;const i={},o=(t,e)=>{const i=this.hierarchical.trees;for(const o in i)Object.prototype.hasOwnProperty.call(i,o)&&i[o]===t&&this.direction.shift(o,e)},s=()=>{const t=[];for(let e=0;e{if(!e[t.id]&&(e[t.id]=!0,this.hierarchical.childrenReference[t.id])){const i=this.hierarchical.childrenReference[t.id];if(i.length>0)for(let t=0;t1&&void 0!==arguments[1]?arguments[1]:1e9,o=1e9,s=1e9,n=1e9,r=-1e9;for(const a in e)if(Object.prototype.hasOwnProperty.call(e,a)){const h=t.body.nodes[a],d=t.hierarchical.levels[h.id],l=t.direction.getPosition(h),[c,u]=t._getSpaceAroundNode(h,e);o=Math.min(c,o),s=Math.min(u,s),d<=i&&(n=Math.min(l,n),r=Math.max(l,r))}return[n,r,o,s]},a=(t,e)=>{const i=this.hierarchical.getMaxLevel(t.id),o=this.hierarchical.getMaxLevel(e.id);return Math.min(i,o)},h=(t,e,i)=>{const o=this.hierarchical;for(let s=0;s1)for(let e=0;e2&&void 0!==arguments[2]&&arguments[2];const h=t.direction.getPosition(i),d=t.direction.getPosition(o),l=Math.abs(d-h),c=t.options.hierarchical.nodeSpacing;if(l>c){const h={},d={};n(i,h),n(o,d);const l=a(i,o),u=r(h,l),p=r(d,l),f=u[1],g=p[0],m=p[2];if(Math.abs(f-g)>c){let i=f-g+c;i<-m+c&&(i=-m+c),i<0&&(t._shiftBlock(o.id,i),e=!0,!0===s&&t._centerParent(o))}}},l=(t,o)=>{const s=o.id,a=o.edges,h=this.hierarchical.levels[o.id],d=this.options.hierarchical.levelSeparation*this.options.hierarchical.levelSeparation,l={},c=[];for(let t=0;t{let i=0;for(let o=0;o{let i=0;for(let o=0;o{let i=this.direction.getPosition(o);const s={};for(let o=0;o{const s=this.direction.getPosition(o);if(void 0===i[o.id]){const t={};n(o,t),i[o.id]=t}const a=r(i[o.id]),h=a[2],d=a[3],l=t-s;let c=0;l>0?c=Math.min(l,d-this.options.hierarchical.nodeSpacing):l<0&&(c=-Math.min(-l,h-this.options.hierarchical.nodeSpacing)),0!=c&&(this._shiftBlock(o.id,c),e=!0)})(g),g=f(t,a),(t=>{const i=this.direction.getPosition(o),[s,n]=this._getSpaceAroundNode(o),r=t-i;let a=i;r>0?a=Math.min(i+(n-this.options.hierarchical.nodeSpacing),t):r<0&&(a=Math.max(i-(s-this.options.hierarchical.nodeSpacing),t)),a!==i&&(this.direction.setPosition(o,a),e=!0)})(g)},c=t=>{let i=this.hierarchical.getLevels();i=kc(i).call(i);for(let o=0;o{let i=this.hierarchical.getLevels();i=kc(i).call(i);for(let o=0;o{for(const t in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,t)&&this._centerParent(this.body.nodes[t])},f=()=>{let t=this.hierarchical.getLevels();t=kc(t).call(t);for(let e=0;e{const t=s();let e=0;for(let i=0;i0&&Math.abs(r)0&&(r=this.direction.getPosition(o[t-1])+n),this.direction.setPosition(e,r,i),this._validatePositionAndContinue(e,i,r),s++}}}}_placeBranchNodes(t,e){var i;const o=this.hierarchical.childrenReference[t];if(void 0===o)return;const s=[];for(let t=0;te&&void 0===this.positionedNodes[o.id]))return;{const e=this.options.hierarchical.nodeSpacing;let r;r=0===i?this.direction.getPosition(this.body.nodes[t]):this.direction.getPosition(s[i-1])+e,this.direction.setPosition(o,r,n),this._validatePositionAndContinue(o,n,r)}}const n=this._getCenterPosition(s);this.direction.setPosition(this.body.nodes[t],n,e)}_validatePositionAndContinue(t,e,i){if(this.hierarchical.isTree){if(void 0!==this.lastNodeOnLevel[e]){const o=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[e]]);if(i-o{var i;-1!==Mp(i=this.body.edgeIndices).call(i,t.id)&&e.push(t)})),e}_getHubSizes(){const t={};Rm(this.body.nodeIndices,(e=>{const i=this.body.nodes[e],o=this._getActiveEdges(i).length;t[o]=!0}));const e=[];return Rm(t,(t=>{e.push(Number(t))})),qx(e).call(e,(function(t,e){return e-t})),e}_determineLevelsByHubsize(){const t=(t,e)=>{this.hierarchical.levelDownstream(t,e)},e=this._getHubSizes();for(let i=0;i{const i=this.body.nodes[e];o===this._getActiveEdges(i).length&&this._crawlNetwork(t,e)}))}}_determineLevelsCustomCallback(){this._crawlNetwork(((t,e,i)=>{let o=this.hierarchical.levels[t.id];void 0===o&&(o=this.hierarchical.levels[t.id]=1e5);const s=(EC.cloneOptions(t,"node"),EC.cloneOptions(e,"node"),void EC.cloneOptions(i,"edge"));this.hierarchical.levels[e.id]=o+s})),this.hierarchical.setMinLevelToZero()}_determineLevelsDirected(){var t;const e=H_(t=this.body.nodeIndices).call(t,((t,e)=>(t.set(e,this.body.nodes[e]),t)),new rw);"roots"===this.options.hierarchical.shakeTowards?this.hierarchical.levels=function(t){return Jk((e=>{var i,o;return Qk(i=ju(o=e.edges).call(o,(e=>t.has(e.toId)))).call(i,(t=>t.from===e))}),((t,e)=>e{var i,o;return Qk(i=ju(o=e.edges).call(o,(e=>t.has(e.toId)))).call(i,(t=>t.to===e))}),((t,e)=>e>t),"from",t)}(e),this.hierarchical.setMinLevelToZero()}_generateMap(){this._crawlNetwork(((t,e)=>{this.hierarchical.levels[e.id]>this.hierarchical.levels[t.id]&&this.hierarchical.addRelation(t.id,e.id)})),this.hierarchical.checkIfTree()}_crawlNetwork(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},e=arguments.length>1?arguments[1]:void 0;const i={},o=(e,s)=>{if(void 0===i[e.id]){let n;this.hierarchical.setTreeIndex(e,s),i[e.id]=!0;const r=this._getActiveEdges(e);for(let i=0;i{if(i[t])return;i[t]=!0,this.direction.shift(t,e);const s=this.hierarchical.childrenReference[t];if(void 0!==s)for(let t=0;t{const i=this.hierarchical.parentReference[e];if(void 0!==i)for(let e=0;e{const i=this.hierarchical.parentReference[e];if(void 0!==i)for(let o=0;o{this._clean()})),this.body.emitter.on("_dataChanged",Lo(s=this._restore).call(s,this)),this.body.emitter.on("_resetData",Lo(n=this._restore).call(n,this))}_restore(){!1!==this.inMode&&(!0===this.options.initiallyActive?this.enableEditMode():this.disableEditMode())}setOptions(t,e,i){void 0!==e&&(void 0!==e.locale?this.options.locale=e.locale:this.options.locale=i.locale,void 0!==e.locales?this.options.locales=e.locales:this.options.locales=i.locales),void 0!==t&&("boolean"==typeof t?this.options.enabled=t:(this.options.enabled=!0,Nm(this.options,t)),!0===this.options.initiallyActive&&(this.editMode=!0),this._setup())}toggleEditMode(){!0===this.editMode?this.disableEditMode():this.enableEditMode()}enableEditMode(){this.editMode=!0,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display="block",this.closeDiv.style.display="block",this.editModeDiv.style.display="none",this.showManipulatorToolbar())}disableEditMode(){this.editMode=!1,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display="none",this.closeDiv.style.display="none",this.editModeDiv.style.display="block",this._createEditButton())}showManipulatorToolbar(){if(this._clean(),this.manipulationDOM={},!0===this.guiEnabled){var t,e;this.editMode=!0,this.manipulationDiv.style.display="block",this.closeDiv.style.display="block";const i=this.selectionHandler.getSelectedNodeCount(),o=this.selectionHandler.getSelectedEdgeCount(),s=i+o,n=this.options.locales[this.options.locale];let r=!1;!1!==this.options.addNode&&(this._createAddNodeButton(n),r=!0),!1!==this.options.addEdge&&(!0===r?this._createSeperator(1):r=!0,this._createAddEdgeButton(n)),1===i&&"function"==typeof this.options.editNode?(!0===r?this._createSeperator(2):r=!0,this._createEditNodeButton(n)):1===o&&0===i&&!1!==this.options.editEdge&&(!0===r?this._createSeperator(3):r=!0,this._createEditEdgeButton(n)),0!==s&&(i>0&&!1!==this.options.deleteNode||0===i&&!1!==this.options.deleteEdge)&&(!0===r&&this._createSeperator(4),this._createDeleteButton(n)),this._bindElementEvents(this.closeDiv,Lo(t=this.toggleEditMode).call(t,this)),this._temporaryBindEvent("select",Lo(e=this.showManipulatorToolbar).call(e,this))}this.body.emitter.emit("_redraw")}addNodeMode(){var t;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="addNode",!0===this.guiEnabled){var e;const t=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(t),this._createSeperator(),this._createDescription(t.addDescription||this.options.locales.en.addDescription),this._bindElementEvents(this.closeDiv,Lo(e=this.toggleEditMode).call(e,this))}this._temporaryBindEvent("click",Lo(t=this._performAddNode).call(t,this))}editNode(){!0!==this.editMode&&this.enableEditMode(),this._clean();const t=this.selectionHandler.getSelectedNodes()[0];if(void 0!==t){if(this.inMode="editNode","function"!=typeof this.options.editNode)throw new Error("No function has been configured to handle the editing of nodes.");if(!0!==t.isCluster){const e=Nm({},t.options,!1);if(e.x=t.x,e.y=t.y,2!==this.options.editNode.length)throw new Error("The function for edit does not support two arguments (data, callback)");this.options.editNode(e,(t=>{null!=t&&"editNode"===this.inMode&&this.body.data.nodes.getDataSet().update(t),this.showManipulatorToolbar()}))}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}addEdgeMode(){var t,e,i,o,s;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="addEdge",!0===this.guiEnabled){var n;const t=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(t),this._createSeperator(),this._createDescription(t.edgeDescription||this.options.locales.en.edgeDescription),this._bindElementEvents(this.closeDiv,Lo(n=this.toggleEditMode).call(n,this))}this._temporaryBindUI("onTouch",Lo(t=this._handleConnect).call(t,this)),this._temporaryBindUI("onDragEnd",Lo(e=this._finishConnect).call(e,this)),this._temporaryBindUI("onDrag",Lo(i=this._dragControlNode).call(i,this)),this._temporaryBindUI("onRelease",Lo(o=this._finishConnect).call(o,this)),this._temporaryBindUI("onDragStart",Lo(s=this._dragStartEdge).call(s,this)),this._temporaryBindUI("onHold",(()=>{}))}editEdgeMode(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="editEdge","object"!=typeof this.options.editEdge||"function"!=typeof this.options.editEdge.editWithoutDrag||(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0===this.edgeBeingEditedId)){if(!0===this.guiEnabled){var t;const e=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(e),this._createSeperator(),this._createDescription(e.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindElementEvents(this.closeDiv,Lo(t=this.toggleEditMode).call(t,this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0!==this.edgeBeingEditedId){var e,i,o,s;const t=this.body.edges[this.edgeBeingEditedId],n=this._getNewTargetNode(t.from.x,t.from.y),r=this._getNewTargetNode(t.to.x,t.to.y);this.temporaryIds.nodes.push(n.id),this.temporaryIds.nodes.push(r.id),this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id),this.body.nodes[r.id]=r,this.body.nodeIndices.push(r.id),this._temporaryBindUI("onTouch",Lo(e=this._controlNodeTouch).call(e,this)),this._temporaryBindUI("onTap",(()=>{})),this._temporaryBindUI("onHold",(()=>{})),this._temporaryBindUI("onDragStart",Lo(i=this._controlNodeDragStart).call(i,this)),this._temporaryBindUI("onDrag",Lo(o=this._controlNodeDrag).call(o,this)),this._temporaryBindUI("onDragEnd",Lo(s=this._controlNodeDragEnd).call(s,this)),this._temporaryBindUI("onMouseMove",(()=>{})),this._temporaryBindEvent("beforeDrawing",(e=>{const i=t.edgeType.findBorderPositions(e);!1===n.selected&&(n.x=i.from.x,n.y=i.from.y),!1===r.selected&&(r.x=i.to.x,r.y=i.to.y)})),this.body.emitter.emit("_redraw")}else this.showManipulatorToolbar()}else{const t=this.body.edges[this.edgeBeingEditedId];this._performEditEdge(t.from.id,t.to.id)}}deleteSelected(){!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="delete";const t=this.selectionHandler.getSelectedNodeIds(),e=this.selectionHandler.getSelectedEdgeIds();let i;if(t.length>0){for(let e=0;e0&&"function"==typeof this.options.deleteEdge&&(i=this.options.deleteEdge);if("function"==typeof i){const o={nodes:t,edges:e};if(2!==i.length)throw new Error("The function for delete does not support two arguments (data, callback)");i(o,(t=>{null!=t&&"delete"===this.inMode?(this.body.data.edges.getDataSet().remove(t.edges),this.body.data.nodes.getDataSet().remove(t.nodes),this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar()):(this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().remove(e),this.body.data.nodes.getDataSet().remove(t),this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar()}_setup(){!0===this.options.enabled?(this.guiEnabled=!0,this._createWrappers(),!1===this.editMode?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}_createWrappers(){var t,e;(void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement("div"),this.manipulationDiv.className="vis-manipulation",!0===this.editMode?this.manipulationDiv.style.display="block":this.manipulationDiv.style.display="none",this.canvas.frame.appendChild(this.manipulationDiv)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement("div"),this.editModeDiv.className="vis-edit-mode",!0===this.editMode?this.editModeDiv.style.display="none":this.editModeDiv.style.display="block",this.canvas.frame.appendChild(this.editModeDiv)),void 0===this.closeDiv)&&(this.closeDiv=document.createElement("button"),this.closeDiv.className="vis-close",this.closeDiv.setAttribute("aria-label",null!==(t=null===(e=this.options.locales[this.options.locale])||void 0===e?void 0:e.close)&&void 0!==t?t:this.options.locales.en.close),this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}_getNewTargetNode(t,e){const i=Nm({},this.options.controlNodeStyle);i.id="targetNode"+OE(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;const o=this.body.functions.createNode(i);return o.shape.boundingBox={left:t,right:t,top:e,bottom:e},o}_createEditButton(){var t;this._clean(),this.manipulationDOM={},km(this.editModeDiv);const e=this.options.locales[this.options.locale],i=this._createButton("editMode","vis-edit vis-edit-mode",e.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(i),this._bindElementEvents(i,Lo(t=this.toggleEditMode).call(t,this))}_clean(){this.inMode=!1,!0===this.guiEnabled&&(km(this.editModeDiv),km(this.manipulationDiv),this._cleanupDOMEventListeners()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit("restorePhysics")}_cleanupDOMEventListeners(){for(const e of Jc(t=this._domEventListenerCleanupQueue).call(t,0)){var t;e()}}_removeManipulationDOM(){this._clean(),km(this.manipulationDiv),km(this.editModeDiv),km(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}_createSeperator(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM["seperatorLineDiv"+t]=document.createElement("div"),this.manipulationDOM["seperatorLineDiv"+t].className="vis-separator-line",this.manipulationDiv.appendChild(this.manipulationDOM["seperatorLineDiv"+t])}_createAddNodeButton(t){var e;const i=this._createButton("addNode","vis-add",t.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Lo(e=this.addNodeMode).call(e,this))}_createAddEdgeButton(t){var e;const i=this._createButton("addEdge","vis-connect",t.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Lo(e=this.addEdgeMode).call(e,this))}_createEditNodeButton(t){var e;const i=this._createButton("editNode","vis-edit",t.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Lo(e=this.editNode).call(e,this))}_createEditEdgeButton(t){var e;const i=this._createButton("editEdge","vis-edit",t.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Lo(e=this.editEdgeMode).call(e,this))}_createDeleteButton(t){var e;let i;i=this.options.rtl?"vis-delete-rtl":"vis-delete";const o=this._createButton("delete",i,t.del||this.options.locales.en.del);this.manipulationDiv.appendChild(o),this._bindElementEvents(o,Lo(e=this.deleteSelected).call(e,this))}_createBackButton(t){var e;const i=this._createButton("back","vis-back",t.back||this.options.locales.en.back);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Lo(e=this.showManipulatorToolbar).call(e,this))}_createButton(t,e,i){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"vis-label";return this.manipulationDOM[t+"Div"]=document.createElement("button"),this.manipulationDOM[t+"Div"].className="vis-button "+e,this.manipulationDOM[t+"Label"]=document.createElement("div"),this.manipulationDOM[t+"Label"].className=o,this.manipulationDOM[t+"Label"].innerText=i,this.manipulationDOM[t+"Div"].appendChild(this.manipulationDOM[t+"Label"]),this.manipulationDOM[t+"Div"]}_createDescription(t){this.manipulationDOM.descriptionLabel=document.createElement("div"),this.manipulationDOM.descriptionLabel.className="vis-none",this.manipulationDOM.descriptionLabel.innerText=t,this.manipulationDiv.appendChild(this.manipulationDOM.descriptionLabel)}_temporaryBindEvent(t,e){this.temporaryEventFunctions.push({event:t,boundFunction:e}),this.body.emitter.on(t,e)}_temporaryBindUI(t,e){if(void 0===this.body.eventListeners[t])throw new Error("This UI function does not exist. Typo? You tried: "+t+" possible are: "+jp(Jl(this.body.eventListeners)));this.temporaryUIFunctions[t]=this.body.eventListeners[t],this.body.eventListeners[t]=e}_unbindTemporaryUIs(){for(const t in this.temporaryUIFunctions)Object.prototype.hasOwnProperty.call(this.temporaryUIFunctions,t)&&(this.body.eventListeners[t]=this.temporaryUIFunctions[t],delete this.temporaryUIFunctions[t]);this.temporaryUIFunctions={}}_unbindTemporaryEvents(){for(let t=0;t{i.destroy()}));const o=t=>{let{keyCode:i,key:o}=t;"Enter"!==o&&" "!==o&&13!==i&&32!==i||e()};t.addEventListener("keyup",o,!1),this._domEventListenerCleanupQueue.push((()=>{t.removeEventListener("keyup",o,!1)}))}_cleanupTemporaryNodesAndEdges(){for(let i=0;i=0;t--)if(s[t]!==this.selectedControlNode.id){n=this.body.nodes[s[t]];break}if(void 0!==n&&void 0!==this.selectedControlNode)if(!0===n.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{const t=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===t.id?this._performEditEdge(n.id,o.to.id):this._performEditEdge(o.from.id,n.id)}else o.updateEdgeType(),this.body.emitter.emit("restorePhysics");this.body.emitter.emit("_redraw")}_handleConnect(t){if((new Date).valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=vo({},this.body.view.translation),this.interactionHandler.drag.pointer=this.lastTouch,this.interactionHandler.drag.translation=this.lastTouch.translation;const e=this.lastTouch,i=this.selectionHandler.getNodeAt(e);if(void 0!==i)if(!0===i.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{const t=this._getNewTargetNode(i.x,i.y);this.body.nodes[t.id]=t,this.body.nodeIndices.push(t.id);const e=this.body.functions.createEdge({id:"connectionEdge"+OE(),from:i.id,to:t.id,physics:!1,smooth:{enabled:!0,type:"continuous",roundness:.5}});this.body.edges[e.id]=e,this.body.edgeIndices.push(e.id),this.temporaryIds.nodes.push(t.id),this.temporaryIds.edges.push(e.id)}this.touchTime=(new Date).valueOf()}}_dragControlNode(t){const e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e);let o;void 0!==this.temporaryIds.edges[0]&&(o=this.body.edges[this.temporaryIds.edges[0]].fromId);const s=this.selectionHandler._getAllNodesOverlappingWith(i);let n;for(let t=s.length-1;t>=0;t--){var r;if(-1===Mp(r=this.temporaryIds.nodes).call(r,s[t])){n=this.body.nodes[s[t]];break}}if(t.controlEdge={from:o,to:n?n.id:void 0},this.selectionHandler.generateClickEvent("controlNodeDragging",t,e),void 0!==this.temporaryIds.nodes[0]){const t=this.body.nodes[this.temporaryIds.nodes[0]];t.x=this.canvas._XconvertDOMtoCanvas(e.x),t.y=this.canvas._YconvertDOMtoCanvas(e.y),this.body.emitter.emit("_redraw")}else this.interactionHandler.onDrag(t)}_finishConnect(t){const e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e);let o;void 0!==this.temporaryIds.edges[0]&&(o=this.body.edges[this.temporaryIds.edges[0]].fromId);const s=this.selectionHandler._getAllNodesOverlappingWith(i);let n;for(let t=s.length-1;t>=0;t--){var r;if(-1===Mp(r=this.temporaryIds.nodes).call(r,s[t])){n=this.body.nodes[s[t]];break}}this._cleanupTemporaryNodesAndEdges(),void 0!==n&&(!0===n.isCluster?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):void 0!==this.body.nodes[o]&&void 0!==this.body.nodes[n.id]&&this._performAddEdge(o,n.id)),t.controlEdge={from:o,to:n?n.id:void 0},this.selectionHandler.generateClickEvent("controlNodeDragEnd",t,e),this.body.emitter.emit("_redraw")}_dragStartEdge(t){const e=this.lastTouch;this.selectionHandler.generateClickEvent("dragStart",t,e,void 0,!0)}_performAddNode(t){const e={id:OE(),x:t.pointer.canvas.x,y:t.pointer.canvas.y,label:"new"};if("function"==typeof this.options.addNode){if(2!==this.options.addNode.length)throw this.showManipulatorToolbar(),new Error("The function for add does not support two arguments (data,callback)");this.options.addNode(e,(t=>{null!=t&&"addNode"===this.inMode&&this.body.data.nodes.getDataSet().add(t),this.showManipulatorToolbar()}))}else this.body.data.nodes.getDataSet().add(e),this.showManipulatorToolbar()}_performAddEdge(t,e){const i={from:t,to:e};if("function"==typeof this.options.addEdge){if(2!==this.options.addEdge.length)throw new Error("The function for connect does not support two arguments (data,callback)");this.options.addEdge(i,(t=>{null!=t&&"addEdge"===this.inMode&&(this.body.data.edges.getDataSet().add(t),this.selectionHandler.unselectAll(),this.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().add(i),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}_performEditEdge(t,e){const i={id:this.edgeBeingEditedId,from:t,to:e,label:this.body.data.edges.get(this.edgeBeingEditedId).label};let o=this.options.editEdge;if("object"==typeof o&&(o=o.editWithoutDrag),"function"==typeof o){if(2!==o.length)throw new Error("The function for edit does not support two arguments (data, callback)");o(i,(t=>{null==t||"editEdge"!==this.inMode?(this.body.edges[i.id].updateEdgeType(),this.body.emitter.emit("_redraw"),this.showManipulatorToolbar()):(this.body.data.edges.getDataSet().update(t),this.selectionHandler.unselectAll(),this.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().update(i),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}const oS="string",sS="boolean",nS="number",rS="array",aS="object",hS=["arrow","bar","box","circle","crow","curve","diamond","image","inv_curve","inv_triangle","triangle","vee"],dS={borderWidth:{number:nS},borderWidthSelected:{number:nS,undefined:"undefined"},brokenImage:{string:oS,undefined:"undefined"},chosen:{label:{boolean:sS,function:"function"},node:{boolean:sS,function:"function"},__type__:{object:aS,boolean:sS}},color:{border:{string:oS},background:{string:oS},highlight:{border:{string:oS},background:{string:oS},__type__:{object:aS,string:oS}},hover:{border:{string:oS},background:{string:oS},__type__:{object:aS,string:oS}},__type__:{object:aS,string:oS}},opacity:{number:nS,undefined:"undefined"},fixed:{x:{boolean:sS},y:{boolean:sS},__type__:{object:aS,boolean:sS}},font:{align:{string:oS},color:{string:oS},size:{number:nS},face:{string:oS},background:{string:oS},strokeWidth:{number:nS},strokeColor:{string:oS},vadjust:{number:nS},multi:{boolean:sS,string:oS},bold:{color:{string:oS},size:{number:nS},face:{string:oS},mod:{string:oS},vadjust:{number:nS},__type__:{object:aS,string:oS}},boldital:{color:{string:oS},size:{number:nS},face:{string:oS},mod:{string:oS},vadjust:{number:nS},__type__:{object:aS,string:oS}},ital:{color:{string:oS},size:{number:nS},face:{string:oS},mod:{string:oS},vadjust:{number:nS},__type__:{object:aS,string:oS}},mono:{color:{string:oS},size:{number:nS},face:{string:oS},mod:{string:oS},vadjust:{number:nS},__type__:{object:aS,string:oS}},__type__:{object:aS,string:oS}},group:{string:oS,number:nS,undefined:"undefined"},heightConstraint:{minimum:{number:nS},valign:{string:oS},__type__:{object:aS,boolean:sS,number:nS}},hidden:{boolean:sS},icon:{face:{string:oS},code:{string:oS},size:{number:nS},color:{string:oS},weight:{string:oS,number:nS},__type__:{object:aS}},id:{string:oS,number:nS},image:{selected:{string:oS,undefined:"undefined"},unselected:{string:oS,undefined:"undefined"},__type__:{object:aS,string:oS}},imagePadding:{top:{number:nS},right:{number:nS},bottom:{number:nS},left:{number:nS},__type__:{object:aS,number:nS}},label:{string:oS,undefined:"undefined"},labelHighlightBold:{boolean:sS},level:{number:nS,undefined:"undefined"},margin:{top:{number:nS},right:{number:nS},bottom:{number:nS},left:{number:nS},__type__:{object:aS,number:nS}},mass:{number:nS},physics:{boolean:sS},scaling:{min:{number:nS},max:{number:nS},label:{enabled:{boolean:sS},min:{number:nS},max:{number:nS},maxVisible:{number:nS},drawThreshold:{number:nS},__type__:{object:aS,boolean:sS}},customScalingFunction:{function:"function"},__type__:{object:aS}},shadow:{enabled:{boolean:sS},color:{string:oS},size:{number:nS},x:{number:nS},y:{number:nS},__type__:{object:aS,boolean:sS}},shape:{string:["custom","ellipse","circle","database","box","text","image","circularImage","diamond","dot","star","triangle","triangleDown","square","icon","hexagon"]},ctxRenderer:{function:"function"},shapeProperties:{borderDashes:{boolean:sS,array:rS},borderRadius:{number:nS},interpolation:{boolean:sS},useImageSize:{boolean:sS},useBorderWithImage:{boolean:sS},coordinateOrigin:{string:["center","top-left"]},__type__:{object:aS}},size:{number:nS},title:{string:oS,dom:"dom",undefined:"undefined"},value:{number:nS,undefined:"undefined"},widthConstraint:{minimum:{number:nS},maximum:{number:nS},__type__:{object:aS,boolean:sS,number:nS}},x:{number:nS},y:{number:nS},__type__:{object:aS}},lS={configure:{enabled:{boolean:sS},filter:{boolean:sS,string:oS,array:rS,function:"function"},container:{dom:"dom"},showButton:{boolean:sS},__type__:{object:aS,boolean:sS,string:oS,array:rS,function:"function"}},edges:{arrows:{to:{enabled:{boolean:sS},scaleFactor:{number:nS},type:{string:hS},imageHeight:{number:nS},imageWidth:{number:nS},src:{string:oS},__type__:{object:aS,boolean:sS}},middle:{enabled:{boolean:sS},scaleFactor:{number:nS},type:{string:hS},imageWidth:{number:nS},imageHeight:{number:nS},src:{string:oS},__type__:{object:aS,boolean:sS}},from:{enabled:{boolean:sS},scaleFactor:{number:nS},type:{string:hS},imageWidth:{number:nS},imageHeight:{number:nS},src:{string:oS},__type__:{object:aS,boolean:sS}},__type__:{string:["from","to","middle"],object:aS}},endPointOffset:{from:{number:nS},to:{number:nS},__type__:{object:aS,number:nS}},arrowStrikethrough:{boolean:sS},background:{enabled:{boolean:sS},color:{string:oS},size:{number:nS},dashes:{boolean:sS,array:rS},__type__:{object:aS,boolean:sS}},chosen:{label:{boolean:sS,function:"function"},edge:{boolean:sS,function:"function"},__type__:{object:aS,boolean:sS}},color:{color:{string:oS},highlight:{string:oS},hover:{string:oS},inherit:{string:["from","to","both"],boolean:sS},opacity:{number:nS},__type__:{object:aS,string:oS}},dashes:{boolean:sS,array:rS},font:{color:{string:oS},size:{number:nS},face:{string:oS},background:{string:oS},strokeWidth:{number:nS},strokeColor:{string:oS},align:{string:["horizontal","top","middle","bottom"]},vadjust:{number:nS},multi:{boolean:sS,string:oS},bold:{color:{string:oS},size:{number:nS},face:{string:oS},mod:{string:oS},vadjust:{number:nS},__type__:{object:aS,string:oS}},boldital:{color:{string:oS},size:{number:nS},face:{string:oS},mod:{string:oS},vadjust:{number:nS},__type__:{object:aS,string:oS}},ital:{color:{string:oS},size:{number:nS},face:{string:oS},mod:{string:oS},vadjust:{number:nS},__type__:{object:aS,string:oS}},mono:{color:{string:oS},size:{number:nS},face:{string:oS},mod:{string:oS},vadjust:{number:nS},__type__:{object:aS,string:oS}},__type__:{object:aS,string:oS}},hidden:{boolean:sS},hoverWidth:{function:"function",number:nS},label:{string:oS,undefined:"undefined"},labelHighlightBold:{boolean:sS},length:{number:nS,undefined:"undefined"},physics:{boolean:sS},scaling:{min:{number:nS},max:{number:nS},label:{enabled:{boolean:sS},min:{number:nS},max:{number:nS},maxVisible:{number:nS},drawThreshold:{number:nS},__type__:{object:aS,boolean:sS}},customScalingFunction:{function:"function"},__type__:{object:aS}},selectionWidth:{function:"function",number:nS},selfReferenceSize:{number:nS},selfReference:{size:{number:nS},angle:{number:nS},renderBehindTheNode:{boolean:sS},__type__:{object:aS}},shadow:{enabled:{boolean:sS},color:{string:oS},size:{number:nS},x:{number:nS},y:{number:nS},__type__:{object:aS,boolean:sS}},smooth:{enabled:{boolean:sS},type:{string:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"]},roundness:{number:nS},forceDirection:{string:["horizontal","vertical","none"],boolean:sS},__type__:{object:aS,boolean:sS}},title:{string:oS,undefined:"undefined"},width:{number:nS},widthConstraint:{maximum:{number:nS},__type__:{object:aS,boolean:sS,number:nS}},value:{number:nS,undefined:"undefined"},__type__:{object:aS}},groups:{useDefaultGroups:{boolean:sS},__any__:dS,__type__:{object:aS}},interaction:{dragNodes:{boolean:sS},dragView:{boolean:sS},hideEdgesOnDrag:{boolean:sS},hideEdgesOnZoom:{boolean:sS},hideNodesOnDrag:{boolean:sS},hover:{boolean:sS},keyboard:{enabled:{boolean:sS},speed:{x:{number:nS},y:{number:nS},zoom:{number:nS},__type__:{object:aS}},bindToWindow:{boolean:sS},autoFocus:{boolean:sS},__type__:{object:aS,boolean:sS}},multiselect:{boolean:sS},navigationButtons:{boolean:sS},selectable:{boolean:sS},selectConnectedEdges:{boolean:sS},hoverConnectedEdges:{boolean:sS},tooltipDelay:{number:nS},zoomView:{boolean:sS},zoomSpeed:{number:nS},__type__:{object:aS}},layout:{randomSeed:{undefined:"undefined",number:nS,string:oS},improvedLayout:{boolean:sS},clusterThreshold:{number:nS},hierarchical:{enabled:{boolean:sS},levelSeparation:{number:nS},nodeSpacing:{number:nS},treeSpacing:{number:nS},blockShifting:{boolean:sS},edgeMinimization:{boolean:sS},parentCentralization:{boolean:sS},direction:{string:["UD","DU","LR","RL"]},sortMethod:{string:["hubsize","directed"]},shakeTowards:{string:["leaves","roots"]},__type__:{object:aS,boolean:sS}},__type__:{object:aS}},manipulation:{enabled:{boolean:sS},initiallyActive:{boolean:sS},addNode:{boolean:sS,function:"function"},addEdge:{boolean:sS,function:"function"},editNode:{function:"function"},editEdge:{editWithoutDrag:{function:"function"},__type__:{object:aS,boolean:sS,function:"function"}},deleteNode:{boolean:sS,function:"function"},deleteEdge:{boolean:sS,function:"function"},controlNodeStyle:dS,__type__:{object:aS,boolean:sS}},nodes:dS,physics:{enabled:{boolean:sS},barnesHut:{theta:{number:nS},gravitationalConstant:{number:nS},centralGravity:{number:nS},springLength:{number:nS},springConstant:{number:nS},damping:{number:nS},avoidOverlap:{number:nS},__type__:{object:aS}},forceAtlas2Based:{theta:{number:nS},gravitationalConstant:{number:nS},centralGravity:{number:nS},springLength:{number:nS},springConstant:{number:nS},damping:{number:nS},avoidOverlap:{number:nS},__type__:{object:aS}},repulsion:{centralGravity:{number:nS},springLength:{number:nS},springConstant:{number:nS},nodeDistance:{number:nS},damping:{number:nS},__type__:{object:aS}},hierarchicalRepulsion:{centralGravity:{number:nS},springLength:{number:nS},springConstant:{number:nS},nodeDistance:{number:nS},damping:{number:nS},avoidOverlap:{number:nS},__type__:{object:aS}},maxVelocity:{number:nS},minVelocity:{number:nS},solver:{string:["barnesHut","repulsion","hierarchicalRepulsion","forceAtlas2Based"]},stabilization:{enabled:{boolean:sS},iterations:{number:nS},updateInterval:{number:nS},onlyDynamicEdges:{boolean:sS},fit:{boolean:sS},__type__:{object:aS,boolean:sS}},timestep:{number:nS},adaptiveTimestep:{boolean:sS},wind:{x:{number:nS},y:{number:nS},__type__:{object:aS}},__type__:{object:aS,boolean:sS}},autoResize:{boolean:sS},clickToUse:{boolean:sS},locale:{string:oS},locales:{__any__:{any:"any"},__type__:{object:aS}},height:{string:oS},width:{string:oS},__type__:{object:aS}},cS={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:["color","#2B7CE9"],background:["color","#97C2FC"],highlight:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]},hover:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]}},opacity:[0,0,1,.1],fixed:{x:!1,y:!1},font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[0,0,50,1],strokeColor:["color","#ffffff"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:["ellipse","box","circle","database","diamond","dot","square","star","text","triangle","triangleDown","hexagon"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"}},endPointOffset:{from:[0,-10,10,1],to:[0,-10,10,1]},arrowStrikethrough:!0,color:{color:["color","#848484"],highlight:["color","#848484"],hover:["color","#848484"],inherit:["from","to","both",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[2,0,50,1],strokeColor:["color","#ffffff"],align:["horizontal","top","middle","bottom"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],selfReference:{size:[20,0,200,1],angle:[Math.PI/2,-6*Math.PI,6*Math.PI,Math.PI/8],renderBehindTheNode:!0},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"],forceDirection:["horizontal","vertical","none"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:["UD","DU","LR","RL"],sortMethod:["hubsize","directed"],shakeTowards:["leaves","roots"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0,autoFocus:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0,zoomSpeed:[1,.1,2,.1]},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{theta:[.5,.1,1,.05],gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{theta:[.5,.1,1,.05],gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:["barnesHut","forceAtlas2Based","repulsion","hierarchicalRepulsion"],timestep:[.5,.01,1,.01],wind:{x:[0,-10,10,.1],y:[0,-10,10,.1]}}},uS=(t,e,i)=>{var o;return!(!_u(t).call(t,"physics")||!_u(o=cS.physics.solver).call(o,e)||i.physics.solver===e||"wind"===e)};var pS=Object.freeze({__proto__:null,allOptions:lS,configuratorHideOption:uS,configureOptions:cS});class fS{constructor(){}getDistances(t,e,i){const o={},s=t.edges;for(let t=0;t2&&void 0!==arguments[2]&&arguments[2];const o=this.distanceSolver.getDistances(this.body,t,e);this._createL_matrix(o),this._createK_matrix(o),this._createE_matrix();let s=0;const n=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3));let r=1e9,a=0,h=0,d=0,l=0,c=0;for(;r>.01&&s1&&c<5;)c+=1,this._moveNode(a,h,d),[l,h,d]=this._getEnergy(a)}_getHighestEnergyNode(t){const e=this.body.nodeIndices,i=this.body.nodes;let o=0,s=e[0],n=0,r=0;for(let a=0;athis.body.emitter.emit("_requestRedraw"))),this.groups=new aw,this.canvas=new MC(this.body),this.selectionHandler=new Hk(this.body,this.canvas),this.interactionHandler=new zC(this.body,this.canvas,this.selectionHandler),this.view=new IC(this.body,this.canvas),this.renderer=new kC(this.body,this.canvas),this.physics=new xC(this.body),this.layoutEngine=new eS(this.body),this.clustering=new CC(this.body),this.manipulation=new iS(this.body,this.canvas,this.selectionHandler,this.interactionHandler),this.nodesHandler=new zO(this.body,this.images,this.groups,this.layoutEngine),this.edgesHandler=new pC(this.body,this.images,this.groups),this.body.modules.kamadaKawai=new gS(this.body,150,.05),this.body.modules.clustering=this.clustering,this.canvas._create(),this.setOptions(i),this.setData(e)}function yS(t){for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(t[e].redundant=t[e].used,t[e].used=[])}function bS(t){for(const e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].redundant){for(let i=0;i0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(o)):(o=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(o)),e[t].used.push(o),o}Go(mS.prototype),mS.prototype.setOptions=function(t){if(null===t&&(t=void 0),void 0!==t){!0===my.validate(t,lS)&&console.error("%cErrors have been found in the supplied options object.",gy);if(Pm(["locale","locales","clickToUse"],this.options,t),void 0!==t.locale&&(t.locale=function(t,e){try{const[o,s]=e.split(/[-_ /]/,2),n=null!=o?o.toLowerCase():null,r=null!=s?s.toUpperCase():null;if(n&&r){const e=n+"-"+r;if(Object.prototype.hasOwnProperty.call(t,e))return e;var i;console.warn(Iu(i="Unknown variant ".concat(r," of language ")).call(i,n,"."))}if(n){const e=n;if(Object.prototype.hasOwnProperty.call(t,e))return e;console.warn("Unknown language ".concat(n))}return console.warn("Unknown locale ".concat(e,", falling back to English.")),"en"}catch(t){return console.error(t),console.warn("Unexpected error while normalizing locale ".concat(e,", falling back to English.")),"en"}}(t.locales||this.options.locales,t.locale)),t=this.layoutEngine.setOptions(t.layout,t),this.canvas.setOptions(t),this.groups.setOptions(t.groups),this.nodesHandler.setOptions(t.nodes),this.edgesHandler.setOptions(t.edges),this.physics.setOptions(t.physics),this.manipulation.setOptions(t.manipulation,t,this.options),this.interactionHandler.setOptions(t.interaction),this.renderer.setOptions(t.interaction),this.selectionHandler.setOptions(t.interaction),void 0!==t.groups&&this.body.emitter.emit("refreshNodes"),"configure"in t&&(this.configurator||(this.configurator=new uy(this,this.body.container,cS,this.canvas.pixelRatio,uS)),this.configurator.setOptions(t.configure)),this.configurator&&!0===this.configurator.options.enabled){const t={nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};Nm(t.nodes,this.nodesHandler.options),Nm(t.edges,this.edgesHandler.options),Nm(t.layout,this.layoutEngine.options),Nm(t.interaction,this.selectionHandler.options),Nm(t.interaction,this.renderer.options),Nm(t.interaction,this.interactionHandler.options),Nm(t.manipulation,this.manipulation.options),Nm(t.physics,this.physics.options),Nm(t.global,this.canvas.options),Nm(t.global,this.options),this.configurator.setModuleOptions(t)}void 0!==t.clickToUse?!0===t.clickToUse?void 0===this.activator&&(this.activator=new ly(this.canvas.frame),this.activator.on("change",(()=>{this.body.emitter.emit("activate")}))):(void 0!==this.activator&&(this.activator.destroy(),delete this.activator),this.body.emitter.emit("activate")):this.body.emitter.emit("activate"),this.canvas.setSize(),this.body.emitter.emit("startSimulation")}},mS.prototype._updateVisibleIndices=function(){const t=this.body.nodes,e=this.body.edges;this.body.nodeIndices=[],this.body.edgeIndices=[];for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(this.clustering._isClusteredNode(e)||!1!==t[e].options.hidden||this.body.nodeIndices.push(t[e].id));for(const i in e)if(Object.prototype.hasOwnProperty.call(e,i)){const o=e[i],s=t[o.fromId],n=t[o.toId],r=void 0!==s&&void 0!==n;!this.clustering._isClusteredEdge(i)&&!1===o.options.hidden&&r&&!1===s.options.hidden&&!1===n.options.hidden&&this.body.edgeIndices.push(o.id)}},mS.prototype.bindEventListeners=function(){this.body.emitter.on("_dataChanged",(()=>{this.edgesHandler._updateState(),this.body.emitter.emit("_dataUpdated")})),this.body.emitter.on("_dataUpdated",(()=>{this.clustering._updateState(),this._updateVisibleIndices(),this._updateValueRange(this.body.nodes),this._updateValueRange(this.body.edges),this.body.emitter.emit("startSimulation"),this.body.emitter.emit("_requestRedraw")}))},mS.prototype.setData=function(t){if(this.body.emitter.emit("resetPhysics"),this.body.emitter.emit("_resetData"),this.selectionHandler.unselectAll(),t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter "dot" or parameter pair "nodes" and "edges", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){console.warn("The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);");const e=Yy(t.dot);this.setData(e)}else if(t&&t.gephi){console.warn("The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);");const e=Gy(t.gephi);this.setData(e)}else this.nodesHandler.setData(t&&t.nodes,!0),this.edgesHandler.setData(t&&t.edges,!0),this.body.emitter.emit("_dataChanged"),this.body.emitter.emit("_dataLoaded"),this.body.emitter.emit("initPhysics")},mS.prototype.destroy=function(){this.body.emitter.emit("destroy"),this.body.emitter.off(),this.off(),delete this.groups,delete this.canvas,delete this.selectionHandler,delete this.interactionHandler,delete this.view,delete this.renderer,delete this.physics,delete this.layoutEngine,delete this.clustering,delete this.manipulation,delete this.nodesHandler,delete this.edgesHandler,delete this.configurator,delete this.images;for(const t in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,t)&&delete this.body.nodes[t];for(const t in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,t)&&delete this.body.edges[t];km(this.body.container)},mS.prototype._updateValueRange=function(t){let e,i,o,s=0;for(e in t)if(Object.prototype.hasOwnProperty.call(t,e)){const n=t[e].getValue();void 0!==n&&(i=void 0===i?n:Math.min(n,i),o=void 0===o?n:Math.max(n,o),s+=n)}if(void 0!==i&&void 0!==o)for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&t[e].setValueRange(i,o,s)},mS.prototype.isActive=function(){return!this.activator||this.activator.active},mS.prototype.setSize=function(){return this.canvas.setSize.apply(this.canvas,arguments)},mS.prototype.canvasToDOM=function(){return this.canvas.canvasToDOM.apply(this.canvas,arguments)},mS.prototype.DOMtoCanvas=function(){return this.canvas.DOMtoCanvas.apply(this.canvas,arguments)},mS.prototype.findNode=function(){return this.clustering.findNode.apply(this.clustering,arguments)},mS.prototype.isCluster=function(){return this.clustering.isCluster.apply(this.clustering,arguments)},mS.prototype.openCluster=function(){return this.clustering.openCluster.apply(this.clustering,arguments)},mS.prototype.cluster=function(){return this.clustering.cluster.apply(this.clustering,arguments)},mS.prototype.getNodesInCluster=function(){return this.clustering.getNodesInCluster.apply(this.clustering,arguments)},mS.prototype.clusterByConnection=function(){return this.clustering.clusterByConnection.apply(this.clustering,arguments)},mS.prototype.clusterByHubsize=function(){return this.clustering.clusterByHubsize.apply(this.clustering,arguments)},mS.prototype.updateClusteredNode=function(){return this.clustering.updateClusteredNode.apply(this.clustering,arguments)},mS.prototype.getClusteredEdges=function(){return this.clustering.getClusteredEdges.apply(this.clustering,arguments)},mS.prototype.getBaseEdge=function(){return this.clustering.getBaseEdge.apply(this.clustering,arguments)},mS.prototype.getBaseEdges=function(){return this.clustering.getBaseEdges.apply(this.clustering,arguments)},mS.prototype.updateEdge=function(){return this.clustering.updateEdge.apply(this.clustering,arguments)},mS.prototype.clusterOutliers=function(){return this.clustering.clusterOutliers.apply(this.clustering,arguments)},mS.prototype.getSeed=function(){return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments)},mS.prototype.enableEditMode=function(){return this.manipulation.enableEditMode.apply(this.manipulation,arguments)},mS.prototype.disableEditMode=function(){return this.manipulation.disableEditMode.apply(this.manipulation,arguments)},mS.prototype.addNodeMode=function(){return this.manipulation.addNodeMode.apply(this.manipulation,arguments)},mS.prototype.editNode=function(){return this.manipulation.editNode.apply(this.manipulation,arguments)},mS.prototype.editNodeMode=function(){return console.warn("Deprecated: Please use editNode instead of editNodeMode."),this.manipulation.editNode.apply(this.manipulation,arguments)},mS.prototype.addEdgeMode=function(){return this.manipulation.addEdgeMode.apply(this.manipulation,arguments)},mS.prototype.editEdgeMode=function(){return this.manipulation.editEdgeMode.apply(this.manipulation,arguments)},mS.prototype.deleteSelected=function(){return this.manipulation.deleteSelected.apply(this.manipulation,arguments)},mS.prototype.getPositions=function(){return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments)},mS.prototype.getPosition=function(){return this.nodesHandler.getPosition.apply(this.nodesHandler,arguments)},mS.prototype.storePositions=function(){return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments)},mS.prototype.moveNode=function(){return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments)},mS.prototype.getBoundingBox=function(){return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments)},mS.prototype.getConnectedNodes=function(t){return void 0!==this.body.nodes[t]?this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments):this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments)},mS.prototype.getConnectedEdges=function(){return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments)},mS.prototype.startSimulation=function(){return this.physics.startSimulation.apply(this.physics,arguments)},mS.prototype.stopSimulation=function(){return this.physics.stopSimulation.apply(this.physics,arguments)},mS.prototype.stabilize=function(){return this.physics.stabilize.apply(this.physics,arguments)},mS.prototype.getSelection=function(){return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments)},mS.prototype.setSelection=function(){return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments)},mS.prototype.getSelectedNodes=function(){return this.selectionHandler.getSelectedNodeIds.apply(this.selectionHandler,arguments)},mS.prototype.getSelectedEdges=function(){return this.selectionHandler.getSelectedEdgeIds.apply(this.selectionHandler,arguments)},mS.prototype.getNodeAt=function(){const t=this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},mS.prototype.getEdgeAt=function(){const t=this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},mS.prototype.selectNodes=function(){return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments)},mS.prototype.selectEdges=function(){return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments)},mS.prototype.unselectAll=function(){this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments),this.selectionHandler.commitWithoutEmitting.apply(this.selectionHandler),this.redraw()},mS.prototype.redraw=function(){return this.renderer.redraw.apply(this.renderer,arguments)},mS.prototype.getScale=function(){return this.view.getScale.apply(this.view,arguments)},mS.prototype.getViewPosition=function(){return this.view.getViewPosition.apply(this.view,arguments)},mS.prototype.fit=function(){return this.view.fit.apply(this.view,arguments)},mS.prototype.moveTo=function(){return this.view.moveTo.apply(this.view,arguments)},mS.prototype.focus=function(){return this.view.focus.apply(this.view,arguments)},mS.prototype.releaseNode=function(){return this.view.releaseNode.apply(this.view,arguments)},mS.prototype.getOptionsFromConfigurator=function(){let t={};return this.configurator&&(t=this.configurator.getOptions.apply(this.configurator)),t};var wS=Object.freeze({__proto__:null,cleanupElements:bS,drawBar:function(t,e,i,o,s,n,r,a){if(0!=o){o<0&&(e-=o*=-1);const h=vS("rect",n,r);h.setAttributeNS(null,"x",t-.5*i),h.setAttributeNS(null,"y",e),h.setAttributeNS(null,"width",i),h.setAttributeNS(null,"height",o),h.setAttributeNS(null,"class",s),a&&h.setAttributeNS(null,"style",a)}},drawPoint:function(t,e,i,o,s,n){let r;if("circle"==i.style?(r=vS("circle",o,s),r.setAttributeNS(null,"cx",t),r.setAttributeNS(null,"cy",e),r.setAttributeNS(null,"r",.5*i.size)):(r=vS("rect",o,s),r.setAttributeNS(null,"x",t-.5*i.size),r.setAttributeNS(null,"y",e-.5*i.size),r.setAttributeNS(null,"width",i.size),r.setAttributeNS(null,"height",i.size)),void 0!==i.styles&&r.setAttributeNS(null,"style",i.styles),r.setAttributeNS(null,"class",i.className+" vis-point"),n){const i=vS("text",o,s);n.xOffset&&(t+=n.xOffset),n.yOffset&&(e+=n.yOffset),n.content&&(i.textContent=n.content),n.className&&i.setAttributeNS(null,"class",n.className+" vis-label"),i.setAttributeNS(null,"x",t),i.setAttributeNS(null,"y",e)}return r},getDOMElement:function(t,e,i,o){let s;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(s=e[t].redundant[0],e[t].redundant.shift()):(s=document.createElement(t),void 0!==o?i.insertBefore(s,o):i.appendChild(s)):(s=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==o?i.insertBefore(s,o):i.appendChild(s)),e[t].used.push(s),s},getSVGElement:vS,prepareElements:yS,resetElements:function(t){yS(t),bS(t),yS(t)}});const _S={Images:$y,dotparser:Xy,gephiParser:Ky,allOptions:pS,convertDot:Yy,convertGephi:Gy};var xS=Object.freeze({__proto__:null,DOMutil:wS,DataSet:BE,DataView:NE,Hammer:py,Network:mS,Queue:ME,data:AE,keycharm:BC,network:_S,util:yy});t.DOMutil=wS,t.DataSet=BE,t.DataView=NE,t.Hammer=py,t.Network=mS,t.Queue=ME,t.data=AE,t.default=xS,t.keycharm=BC,t.network=_S,t.util=yy,Object.defineProperty(t,"__esModule",{value:!0})})); //# sourceMappingURL=vis-network.min.js.map diff --git a/perlite/.js/vis-network.min.js.map b/perlite/.js/vis-network.min.js.map index 9304f309..88f3ac00 100644 --- a/perlite/.js/vis-network.min.js.map +++ b/perlite/.js/vis-network.min.js.map @@ -1 +1 @@ -{"version":3,"file":"vis-network.min.js","sources":["../node_modules/core-js-pure/internals/global.js","../node_modules/core-js-pure/internals/fails.js","../node_modules/core-js-pure/internals/function-bind-native.js","../node_modules/core-js-pure/internals/function-apply.js","../node_modules/core-js-pure/internals/function-uncurry-this.js","../node_modules/core-js-pure/internals/classof-raw.js","../node_modules/core-js-pure/internals/function-uncurry-this-clause.js","../node_modules/core-js-pure/internals/document-all.js","../node_modules/core-js-pure/internals/is-callable.js","../node_modules/core-js-pure/internals/descriptors.js","../node_modules/core-js-pure/internals/function-call.js","../node_modules/core-js-pure/internals/object-property-is-enumerable.js","../node_modules/core-js-pure/internals/create-property-descriptor.js","../node_modules/core-js-pure/internals/engine-v8-version.js","../node_modules/core-js-pure/internals/indexed-object.js","../node_modules/core-js-pure/internals/is-null-or-undefined.js","../node_modules/core-js-pure/internals/require-object-coercible.js","../node_modules/core-js-pure/internals/to-indexed-object.js","../node_modules/core-js-pure/internals/is-object.js","../node_modules/core-js-pure/internals/path.js","../node_modules/core-js-pure/internals/get-built-in.js","../node_modules/core-js-pure/internals/object-is-prototype-of.js","../node_modules/core-js-pure/internals/engine-user-agent.js","../node_modules/core-js-pure/internals/symbol-constructor-detection.js","../node_modules/core-js-pure/internals/use-symbol-as-uid.js","../node_modules/core-js-pure/internals/is-symbol.js","../node_modules/core-js-pure/internals/try-to-string.js","../node_modules/core-js-pure/internals/a-callable.js","../node_modules/core-js-pure/internals/get-method.js","../node_modules/core-js-pure/internals/ordinary-to-primitive.js","../node_modules/core-js-pure/internals/define-global-property.js","../node_modules/core-js-pure/internals/shared-store.js","../node_modules/core-js-pure/internals/shared.js","../node_modules/core-js-pure/internals/to-object.js","../node_modules/core-js-pure/internals/has-own-property.js","../node_modules/core-js-pure/internals/uid.js","../node_modules/core-js-pure/internals/well-known-symbol.js","../node_modules/core-js-pure/internals/to-primitive.js","../node_modules/core-js-pure/internals/to-property-key.js","../node_modules/core-js-pure/internals/document-create-element.js","../node_modules/core-js-pure/internals/ie8-dom-define.js","../node_modules/core-js-pure/internals/object-get-own-property-descriptor.js","../node_modules/core-js-pure/internals/is-forced.js","../node_modules/core-js-pure/internals/function-bind-context.js","../node_modules/core-js-pure/internals/v8-prototype-define-bug.js","../node_modules/core-js-pure/internals/an-object.js","../node_modules/core-js-pure/internals/object-define-property.js","../node_modules/core-js-pure/internals/create-non-enumerable-property.js","../node_modules/core-js-pure/internals/export.js","../node_modules/core-js-pure/internals/math-trunc.js","../node_modules/core-js-pure/internals/to-integer-or-infinity.js","../node_modules/core-js-pure/internals/to-absolute-index.js","../node_modules/core-js-pure/internals/to-length.js","../node_modules/core-js-pure/internals/length-of-array-like.js","../node_modules/core-js-pure/internals/array-includes.js","../node_modules/core-js-pure/internals/hidden-keys.js","../node_modules/core-js-pure/internals/object-keys-internal.js","../node_modules/core-js-pure/internals/enum-bug-keys.js","../node_modules/core-js-pure/internals/object-keys.js","../node_modules/core-js-pure/internals/object-get-own-property-symbols.js","../node_modules/core-js-pure/internals/object-assign.js","../node_modules/core-js-pure/modules/es.object.assign.js","../node_modules/core-js-pure/es/object/assign.js","../node_modules/core-js-pure/internals/array-slice.js","../node_modules/core-js-pure/internals/function-bind.js","../node_modules/core-js-pure/modules/es.function.bind.js","../node_modules/core-js-pure/internals/entry-virtual.js","../node_modules/core-js-pure/es/function/virtual/bind.js","../node_modules/core-js-pure/es/instance/bind.js","../node_modules/core-js-pure/stable/instance/bind.js","../node_modules/@babel/runtime-corejs3/core-js-stable/instance/bind.js","../lib/network/shapes.ts","../node_modules/component-emitter/index.js","../node_modules/core-js-pure/internals/to-string-tag-support.js","../node_modules/core-js-pure/internals/internal-state.js","../node_modules/core-js-pure/internals/classof.js","../node_modules/core-js-pure/internals/to-string.js","../node_modules/core-js-pure/internals/string-multibyte.js","../node_modules/core-js-pure/internals/weak-map-basic-detection.js","../node_modules/core-js-pure/internals/shared-key.js","../node_modules/core-js-pure/internals/function-name.js","../node_modules/core-js-pure/internals/object-define-properties.js","../node_modules/core-js-pure/internals/html.js","../node_modules/core-js-pure/internals/object-create.js","../node_modules/core-js-pure/internals/iterators-core.js","../node_modules/core-js-pure/internals/correct-prototype-getter.js","../node_modules/core-js-pure/internals/object-get-prototype-of.js","../node_modules/core-js-pure/internals/define-built-in.js","../node_modules/core-js-pure/internals/object-to-string.js","../node_modules/core-js-pure/internals/set-to-string-tag.js","../node_modules/core-js-pure/internals/iterators.js","../node_modules/core-js-pure/internals/iterator-create-constructor.js","../node_modules/core-js-pure/internals/function-uncurry-this-accessor.js","../node_modules/core-js-pure/internals/a-possible-prototype.js","../node_modules/core-js-pure/internals/object-set-prototype-of.js","../node_modules/core-js-pure/internals/iterator-define.js","../node_modules/core-js-pure/internals/create-iter-result-object.js","../node_modules/core-js-pure/modules/es.string.iterator.js","../node_modules/core-js-pure/internals/iterator-close.js","../node_modules/core-js-pure/internals/call-with-safe-iteration-closing.js","../node_modules/core-js-pure/internals/is-array-iterator-method.js","../node_modules/core-js-pure/internals/inspect-source.js","../node_modules/core-js-pure/internals/is-constructor.js","../node_modules/core-js-pure/internals/create-property.js","../node_modules/core-js-pure/internals/get-iterator-method.js","../node_modules/core-js-pure/internals/get-iterator.js","../node_modules/core-js-pure/internals/array-from.js","../node_modules/core-js-pure/internals/check-correctness-of-iteration.js","../node_modules/core-js-pure/modules/es.array.from.js","../node_modules/core-js-pure/es/array/from.js","../node_modules/core-js-pure/stable/array/from.js","../node_modules/@babel/runtime-corejs3/core-js-stable/array/from.js","../node_modules/core-js-pure/modules/es.array.iterator.js","../node_modules/core-js-pure/es/get-iterator-method.js","../node_modules/core-js-pure/modules/web.dom-collections.iterator.js","../node_modules/core-js-pure/internals/dom-iterables.js","../node_modules/core-js-pure/stable/get-iterator-method.js","../node_modules/core-js-pure/features/get-iterator-method.js","../node_modules/@babel/runtime-corejs3/core-js/get-iterator-method.js","../node_modules/@babel/runtime-corejs3/helpers/esm/classCallCheck.js","../node_modules/core-js-pure/modules/es.object.define-property.js","../node_modules/core-js-pure/es/object/define-property.js","../node_modules/core-js-pure/stable/object/define-property.js","../node_modules/core-js-pure/features/object/define-property.js","../node_modules/core-js-pure/actual/object/define-property.js","../node_modules/core-js-pure/internals/is-array.js","../node_modules/core-js-pure/internals/does-not-exceed-safe-integer.js","../node_modules/core-js-pure/internals/array-species-constructor.js","../node_modules/core-js-pure/internals/array-species-create.js","../node_modules/core-js-pure/internals/array-method-has-species-support.js","../node_modules/core-js-pure/modules/es.array.concat.js","../node_modules/core-js-pure/internals/object-get-own-property-names.js","../node_modules/core-js-pure/internals/array-slice-simple.js","../node_modules/core-js-pure/internals/object-get-own-property-names-external.js","../node_modules/core-js-pure/internals/define-built-in-accessor.js","../node_modules/core-js-pure/internals/well-known-symbol-wrapped.js","../node_modules/core-js-pure/internals/well-known-symbol-define.js","../node_modules/core-js-pure/internals/symbol-define-to-primitive.js","../node_modules/core-js-pure/internals/array-iteration.js","../node_modules/core-js-pure/modules/es.symbol.constructor.js","../node_modules/core-js-pure/internals/symbol-registry-detection.js","../node_modules/core-js-pure/modules/es.symbol.for.js","../node_modules/core-js-pure/modules/es.symbol.key-for.js","../node_modules/core-js-pure/internals/get-json-replacer-function.js","../node_modules/core-js-pure/modules/es.json.stringify.js","../node_modules/core-js-pure/modules/es.object.get-own-property-symbols.js","../node_modules/core-js-pure/modules/es.symbol.async-iterator.js","../node_modules/core-js-pure/modules/es.symbol.has-instance.js","../node_modules/core-js-pure/modules/es.symbol.is-concat-spreadable.js","../node_modules/core-js-pure/modules/es.symbol.iterator.js","../node_modules/core-js-pure/modules/es.symbol.match.js","../node_modules/core-js-pure/modules/es.symbol.match-all.js","../node_modules/core-js-pure/modules/es.symbol.replace.js","../node_modules/core-js-pure/modules/es.symbol.search.js","../node_modules/core-js-pure/modules/es.symbol.species.js","../node_modules/core-js-pure/modules/es.symbol.split.js","../node_modules/core-js-pure/modules/es.symbol.to-primitive.js","../node_modules/core-js-pure/modules/es.symbol.to-string-tag.js","../node_modules/core-js-pure/modules/es.symbol.unscopables.js","../node_modules/core-js-pure/modules/es.json.to-string-tag.js","../node_modules/core-js-pure/es/symbol/index.js","../node_modules/core-js-pure/stable/symbol/index.js","../node_modules/core-js-pure/modules/esnext.function.metadata.js","../node_modules/core-js-pure/modules/esnext.symbol.async-dispose.js","../node_modules/core-js-pure/modules/esnext.symbol.dispose.js","../node_modules/core-js-pure/modules/esnext.symbol.metadata.js","../node_modules/core-js-pure/actual/symbol/index.js","../node_modules/core-js-pure/internals/symbol-is-registered.js","../node_modules/core-js-pure/modules/esnext.symbol.is-registered-symbol.js","../node_modules/core-js-pure/internals/symbol-is-well-known.js","../node_modules/core-js-pure/modules/esnext.symbol.is-well-known-symbol.js","../node_modules/core-js-pure/modules/esnext.symbol.matcher.js","../node_modules/core-js-pure/modules/esnext.symbol.observable.js","../node_modules/core-js-pure/modules/esnext.symbol.is-registered.js","../node_modules/core-js-pure/modules/esnext.symbol.is-well-known.js","../node_modules/core-js-pure/modules/esnext.symbol.metadata-key.js","../node_modules/core-js-pure/modules/esnext.symbol.pattern-match.js","../node_modules/core-js-pure/modules/esnext.symbol.replace-all.js","../node_modules/core-js-pure/full/symbol/index.js","../node_modules/core-js-pure/features/symbol/index.js","../node_modules/core-js-pure/stable/symbol/iterator.js","../node_modules/core-js-pure/es/symbol/iterator.js","../node_modules/core-js-pure/features/symbol/iterator.js","../node_modules/core-js-pure/actual/symbol/iterator.js","../node_modules/@babel/runtime-corejs3/helpers/esm/typeof.js","../node_modules/core-js-pure/es/symbol/to-primitive.js","../node_modules/@babel/runtime-corejs3/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime-corejs3/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime-corejs3/helpers/esm/createClass.js","../node_modules/core-js-pure/modules/es.array.is-array.js","../node_modules/core-js-pure/es/array/is-array.js","../node_modules/core-js-pure/stable/array/is-array.js","../node_modules/core-js-pure/actual/array/is-array.js","../node_modules/core-js-pure/internals/array-set-length.js","../node_modules/core-js-pure/modules/es.array.push.js","../node_modules/core-js-pure/es/array/virtual/push.js","../node_modules/core-js-pure/es/instance/push.js","../node_modules/core-js-pure/stable/instance/push.js","../node_modules/core-js-pure/features/instance/push.js","../node_modules/core-js-pure/modules/es.array.slice.js","../node_modules/core-js-pure/es/array/virtual/slice.js","../node_modules/core-js-pure/es/instance/slice.js","../node_modules/core-js-pure/stable/instance/slice.js","../node_modules/core-js-pure/features/instance/slice.js","../node_modules/core-js-pure/actual/instance/slice.js","../node_modules/core-js-pure/actual/array/from.js","../node_modules/@babel/runtime-corejs3/helpers/esm/arrayLikeToArray.js","../node_modules/@babel/runtime-corejs3/helpers/esm/unsupportedIterableToArray.js","../node_modules/@babel/runtime-corejs3/helpers/esm/slicedToArray.js","../node_modules/@babel/runtime-corejs3/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime-corejs3/helpers/esm/iterableToArrayLimit.js","../node_modules/@babel/runtime-corejs3/helpers/esm/nonIterableRest.js","../node_modules/@babel/runtime-corejs3/helpers/esm/toConsumableArray.js","../node_modules/@babel/runtime-corejs3/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime-corejs3/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime-corejs3/helpers/esm/nonIterableSpread.js","../node_modules/@babel/runtime-corejs3/core-js-stable/symbol.js","../node_modules/core-js-pure/es/array/virtual/concat.js","../node_modules/core-js-pure/es/instance/concat.js","../node_modules/core-js-pure/stable/instance/concat.js","../node_modules/@babel/runtime-corejs3/core-js-stable/instance/slice.js","../node_modules/core-js-pure/internals/own-keys.js","../node_modules/core-js-pure/modules/es.reflect.own-keys.js","../node_modules/core-js-pure/es/reflect/own-keys.js","../node_modules/@babel/runtime-corejs3/core-js-stable/array/is-array.js","../node_modules/core-js-pure/modules/es.array.map.js","../node_modules/core-js-pure/es/array/virtual/map.js","../node_modules/core-js-pure/es/instance/map.js","../node_modules/core-js-pure/stable/instance/map.js","../node_modules/core-js-pure/modules/es.object.keys.js","../node_modules/core-js-pure/es/object/keys.js","../node_modules/core-js-pure/modules/es.date.now.js","../node_modules/core-js-pure/es/date/now.js","../node_modules/core-js-pure/internals/array-method-is-strict.js","../node_modules/core-js-pure/internals/array-for-each.js","../node_modules/core-js-pure/modules/es.array.for-each.js","../node_modules/core-js-pure/es/array/virtual/for-each.js","../node_modules/core-js-pure/stable/instance/for-each.js","../node_modules/core-js-pure/stable/array/virtual/for-each.js","../node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js","../node_modules/core-js-pure/modules/es.array.reverse.js","../node_modules/core-js-pure/es/array/virtual/reverse.js","../node_modules/core-js-pure/es/instance/reverse.js","../node_modules/core-js-pure/stable/instance/reverse.js","../node_modules/@babel/runtime-corejs3/core-js-stable/instance/reverse.js","../node_modules/core-js-pure/internals/delete-property-or-throw.js","../node_modules/core-js-pure/modules/es.array.splice.js","../node_modules/core-js-pure/es/array/virtual/splice.js","../node_modules/core-js-pure/es/instance/splice.js","../node_modules/core-js-pure/stable/instance/splice.js","../node_modules/core-js-pure/modules/es.array.includes.js","../node_modules/core-js-pure/es/array/virtual/includes.js","../node_modules/core-js-pure/internals/is-regexp.js","../node_modules/core-js-pure/internals/not-a-regexp.js","../node_modules/core-js-pure/internals/correct-is-regexp-logic.js","../node_modules/core-js-pure/modules/es.string.includes.js","../node_modules/core-js-pure/es/string/virtual/includes.js","../node_modules/core-js-pure/es/instance/includes.js","../node_modules/core-js-pure/stable/instance/includes.js","../node_modules/core-js-pure/modules/es.object.get-prototype-of.js","../node_modules/core-js-pure/es/object/get-prototype-of.js","../node_modules/core-js-pure/stable/object/get-prototype-of.js","../node_modules/@babel/runtime-corejs3/core-js-stable/object/get-prototype-of.js","../node_modules/core-js-pure/modules/es.array.filter.js","../node_modules/core-js-pure/es/array/virtual/filter.js","../node_modules/core-js-pure/es/instance/filter.js","../node_modules/core-js-pure/stable/instance/filter.js","../node_modules/core-js-pure/internals/object-to-array.js","../node_modules/core-js-pure/modules/es.object.values.js","../node_modules/core-js-pure/es/object/values.js","../node_modules/core-js-pure/internals/whitespaces.js","../node_modules/core-js-pure/internals/string-trim.js","../node_modules/core-js-pure/internals/number-parse-int.js","../node_modules/core-js-pure/modules/es.parse-int.js","../node_modules/core-js-pure/es/parse-int.js","../node_modules/core-js-pure/modules/es.array.index-of.js","../node_modules/core-js-pure/es/array/virtual/index-of.js","../node_modules/core-js-pure/es/instance/index-of.js","../node_modules/core-js-pure/stable/instance/index-of.js","../node_modules/core-js-pure/modules/es.object.entries.js","../node_modules/core-js-pure/es/object/entries.js","../node_modules/core-js-pure/modules/es.object.create.js","../node_modules/core-js-pure/es/object/create.js","../node_modules/core-js-pure/stable/object/create.js","../node_modules/@babel/runtime-corejs3/core-js-stable/object/create.js","../node_modules/core-js-pure/es/json/stringify.js","../node_modules/core-js-pure/stable/json/stringify.js","../node_modules/core-js-pure/internals/engine-is-bun.js","../node_modules/core-js-pure/internals/validate-arguments-length.js","../node_modules/core-js-pure/internals/schedulers-fix.js","../node_modules/core-js-pure/modules/web.set-interval.js","../node_modules/core-js-pure/modules/web.set-timeout.js","../node_modules/core-js-pure/stable/set-timeout.js","../node_modules/core-js-pure/internals/array-fill.js","../node_modules/core-js-pure/modules/es.array.fill.js","../node_modules/core-js-pure/es/array/virtual/fill.js","../node_modules/@egjs/hammerjs/dist/hammer.esm.js","../node_modules/core-js-pure/es/instance/fill.js","../node_modules/core-js-pure/stable/instance/fill.js","../node_modules/vis-util/esnext/esm/vis-util.js","../lib/network/dotparser.js","../lib/network/gephiParser.ts","../lib/network/locales.ts","../lib/network/CachedImage.js","../lib/network/Images.js","../node_modules/core-js-pure/internals/array-buffer-non-extensible.js","../node_modules/core-js-pure/internals/object-is-extensible.js","../node_modules/core-js-pure/internals/freezing.js","../node_modules/core-js-pure/internals/internal-metadata.js","../node_modules/core-js-pure/internals/iterate.js","../node_modules/core-js-pure/internals/an-instance.js","../node_modules/core-js-pure/internals/collection.js","../node_modules/core-js-pure/internals/define-built-ins.js","../node_modules/core-js-pure/internals/set-species.js","../node_modules/core-js-pure/internals/collection-strong.js","../node_modules/core-js-pure/modules/es.map.constructor.js","../node_modules/core-js-pure/es/map/index.js","../lib/network/modules/Groups.js","../node_modules/core-js-pure/modules/es.number.is-nan.js","../node_modules/core-js-pure/es/number/is-nan.js","../node_modules/core-js-pure/internals/number-is-finite.js","../node_modules/core-js-pure/modules/es.number.is-finite.js","../node_modules/core-js-pure/es/number/is-finite.js","../node_modules/core-js-pure/modules/es.array.some.js","../node_modules/core-js-pure/es/array/virtual/some.js","../node_modules/core-js-pure/es/instance/some.js","../node_modules/core-js-pure/stable/instance/some.js","../node_modules/@babel/runtime-corejs3/helpers/esm/assertThisInitialized.js","../node_modules/core-js-pure/actual/object/create.js","../node_modules/core-js-pure/features/object/create.js","../node_modules/core-js-pure/modules/es.object.set-prototype-of.js","../node_modules/core-js-pure/es/object/set-prototype-of.js","../node_modules/core-js-pure/features/object/set-prototype-of.js","../node_modules/core-js-pure/actual/instance/bind.js","../node_modules/@babel/runtime-corejs3/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime-corejs3/helpers/esm/inherits.js","../node_modules/@babel/runtime-corejs3/helpers/esm/possibleConstructorReturn.js","../node_modules/core-js-pure/actual/object/get-prototype-of.js","../node_modules/core-js-pure/features/object/get-prototype-of.js","../node_modules/@babel/runtime-corejs3/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime-corejs3/helpers/esm/defineProperty.js","../node_modules/@babel/runtime-corejs3/helpers/typeof.js","../node_modules/core-js-pure/features/instance/for-each.js","../node_modules/core-js-pure/actual/instance/for-each.js","../node_modules/core-js-pure/internals/copy-constructor-properties.js","../node_modules/core-js-pure/internals/install-error-cause.js","../node_modules/core-js-pure/internals/error-stack-clear.js","../node_modules/core-js-pure/internals/error-stack-installable.js","../node_modules/core-js-pure/internals/error-stack-install.js","../node_modules/core-js-pure/internals/normalize-string-argument.js","../node_modules/core-js-pure/modules/es.aggregate-error.constructor.js","../node_modules/core-js-pure/internals/engine-is-node.js","../node_modules/core-js-pure/internals/task.js","../node_modules/core-js-pure/internals/a-constructor.js","../node_modules/core-js-pure/internals/species-constructor.js","../node_modules/core-js-pure/internals/engine-is-ios.js","../node_modules/core-js-pure/internals/queue.js","../node_modules/core-js-pure/internals/microtask.js","../node_modules/core-js-pure/internals/engine-is-ios-pebble.js","../node_modules/core-js-pure/internals/engine-is-webos-webkit.js","../node_modules/core-js-pure/internals/perform.js","../node_modules/core-js-pure/internals/promise-native-constructor.js","../node_modules/core-js-pure/internals/engine-is-deno.js","../node_modules/core-js-pure/internals/engine-is-browser.js","../node_modules/core-js-pure/internals/promise-constructor-detection.js","../node_modules/core-js-pure/internals/new-promise-capability.js","../node_modules/core-js-pure/modules/es.promise.constructor.js","../node_modules/core-js-pure/internals/host-report-errors.js","../node_modules/core-js-pure/internals/promise-statics-incorrect-iteration.js","../node_modules/core-js-pure/modules/es.promise.all.js","../node_modules/core-js-pure/modules/es.promise.catch.js","../node_modules/core-js-pure/modules/es.promise.race.js","../node_modules/core-js-pure/modules/es.promise.reject.js","../node_modules/core-js-pure/internals/promise-resolve.js","../node_modules/core-js-pure/modules/es.promise.resolve.js","../node_modules/core-js-pure/internals/is-pure.js","../node_modules/core-js-pure/modules/es.promise.all-settled.js","../node_modules/core-js-pure/modules/es.promise.any.js","../node_modules/core-js-pure/modules/es.promise.finally.js","../node_modules/core-js-pure/es/promise/index.js","../node_modules/core-js-pure/stable/promise/index.js","../node_modules/core-js-pure/modules/esnext.promise.with-resolvers.js","../node_modules/core-js-pure/actual/promise/index.js","../node_modules/core-js-pure/modules/esnext.promise.try.js","../node_modules/core-js-pure/full/promise/index.js","../node_modules/core-js-pure/features/promise/index.js","../node_modules/core-js-pure/features/instance/reverse.js","../node_modules/core-js-pure/actual/instance/reverse.js","../node_modules/@babel/runtime-corejs3/helpers/regeneratorRuntime.js","../node_modules/@babel/runtime-corejs3/regenerator/index.js","../node_modules/core-js-pure/internals/array-reduce.js","../node_modules/core-js-pure/modules/es.array.reduce.js","../node_modules/core-js-pure/es/array/virtual/reduce.js","../node_modules/core-js-pure/es/instance/reduce.js","../node_modules/core-js-pure/stable/instance/reduce.js","../node_modules/core-js-pure/internals/flatten-into-array.js","../node_modules/core-js-pure/modules/es.array.flat-map.js","../node_modules/core-js-pure/es/array/virtual/flat-map.js","../node_modules/core-js-pure/es/instance/flat-map.js","../node_modules/core-js-pure/stable/instance/flat-map.js","../node_modules/core-js-pure/modules/es.set.constructor.js","../node_modules/core-js-pure/es/set/index.js","../node_modules/@babel/runtime-corejs3/core-js-stable/symbol/iterator.js","../node_modules/core-js-pure/es/get-iterator.js","../node_modules/core-js-pure/internals/array-sort.js","../node_modules/core-js-pure/internals/engine-ff-version.js","../node_modules/core-js-pure/internals/engine-is-ie-or-edge.js","../node_modules/core-js-pure/internals/engine-webkit-version.js","../node_modules/core-js-pure/modules/es.array.sort.js","../node_modules/core-js-pure/es/array/virtual/sort.js","../node_modules/core-js-pure/es/instance/sort.js","../node_modules/core-js-pure/stable/instance/sort.js","../node_modules/core-js-pure/es/array/virtual/keys.js","../node_modules/core-js-pure/stable/instance/keys.js","../node_modules/core-js-pure/stable/array/virtual/keys.js","../node_modules/@babel/runtime-corejs3/core-js-stable/instance/keys.js","../node_modules/core-js-pure/es/array/virtual/values.js","../node_modules/core-js-pure/stable/instance/values.js","../node_modules/core-js-pure/stable/array/virtual/values.js","../node_modules/@babel/runtime-corejs3/core-js-stable/instance/values.js","../node_modules/core-js-pure/es/array/virtual/entries.js","../node_modules/core-js-pure/stable/instance/entries.js","../node_modules/core-js-pure/stable/array/virtual/entries.js","../node_modules/@babel/runtime-corejs3/core-js-stable/instance/entries.js","../node_modules/@babel/runtime-corejs3/core-js-stable/object/define-property.js","../node_modules/core-js-pure/modules/es.reflect.construct.js","../node_modules/core-js-pure/es/reflect/construct.js","../node_modules/core-js-pure/es/object/get-own-property-symbols.js","../node_modules/core-js-pure/modules/es.object.get-own-property-descriptor.js","../node_modules/core-js-pure/es/object/get-own-property-descriptor.js","../node_modules/core-js-pure/stable/object/get-own-property-descriptor.js","../node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor.js","../node_modules/core-js-pure/modules/es.object.get-own-property-descriptors.js","../node_modules/core-js-pure/es/object/get-own-property-descriptors.js","../node_modules/core-js-pure/modules/es.object.define-properties.js","../node_modules/core-js-pure/es/object/define-properties.js","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/native.js","../node_modules/uuid/dist/esm-browser/v4.js","../node_modules/vis-data/esnext/esm/vis-data.js","../node_modules/core-js-pure/internals/number-parse-float.js","../node_modules/core-js-pure/modules/es.parse-float.js","../node_modules/core-js-pure/es/parse-float.js","../node_modules/core-js-pure/modules/es.object.get-own-property-names.js","../node_modules/core-js-pure/es/object/get-own-property-names.js","../node_modules/core-js-pure/stable/object/get-own-property-names.js","../lib/network/modules/components/shared/ComponentUtil.js","../lib/network/modules/components/shared/LabelAccumulator.js","../lib/network/modules/components/shared/LabelSplitter.js","../lib/network/modules/components/shared/Label.js","../lib/network/modules/components/nodes/util/NodeBase.js","../lib/network/modules/components/nodes/shapes/Box.js","../lib/network/modules/components/nodes/util/CircleImageBase.js","../lib/network/modules/components/nodes/shapes/Circle.js","../lib/network/modules/components/nodes/shapes/CircularImage.js","../lib/network/modules/components/nodes/util/ShapeBase.js","../lib/network/modules/components/nodes/shapes/CustomShape.js","../lib/network/modules/components/nodes/shapes/Database.js","../lib/network/modules/components/nodes/shapes/Diamond.js","../lib/network/modules/components/nodes/shapes/Dot.js","../lib/network/modules/components/nodes/shapes/Ellipse.js","../lib/network/modules/components/nodes/shapes/Icon.js","../lib/network/modules/components/nodes/shapes/Image.js","../lib/network/modules/components/nodes/shapes/Square.js","../lib/network/modules/components/nodes/shapes/Hexagon.js","../lib/network/modules/components/nodes/shapes/Star.js","../lib/network/modules/components/nodes/shapes/Text.js","../lib/network/modules/components/nodes/shapes/Triangle.js","../lib/network/modules/components/nodes/shapes/TriangleDown.js","../lib/network/modules/components/Node.js","../lib/network/modules/NodesHandler.js","../node_modules/core-js-pure/internals/is-data-descriptor.js","../node_modules/core-js-pure/modules/es.reflect.get.js","../node_modules/core-js-pure/es/reflect/get.js","../node_modules/core-js-pure/actual/object/get-own-property-descriptor.js","../node_modules/@babel/runtime-corejs3/helpers/esm/get.js","../node_modules/@babel/runtime-corejs3/helpers/esm/superPropBase.js","../node_modules/core-js-pure/modules/es.math.hypot.js","../node_modules/core-js-pure/es/math/hypot.js","../lib/network/modules/components/edges/util/end-points.ts","../lib/network/modules/components/edges/util/edge-base.ts","../lib/network/modules/components/edges/util/bezier-edge-base.ts","../lib/network/modules/components/edges/bezier-edge-dynamic.ts","../lib/network/modules/components/edges/bezier-edge-static.ts","../lib/network/modules/components/edges/util/cubic-bezier-edge-base.ts","../lib/network/modules/components/edges/cubic-bezier-edge.ts","../lib/network/modules/components/edges/straight-edge.ts","../lib/network/modules/components/Edge.js","../lib/network/modules/EdgesHandler.js","../lib/network/modules/components/physics/BarnesHutSolver.js","../lib/network/modules/components/physics/RepulsionSolver.js","../lib/network/modules/components/physics/HierarchicalRepulsionSolver.js","../lib/network/modules/components/physics/SpringSolver.js","../lib/network/modules/components/physics/HierarchicalSpringSolver.js","../lib/network/modules/components/physics/CentralGravitySolver.js","../lib/network/modules/components/physics/FA2BasedRepulsionSolver.js","../lib/network/modules/components/physics/FA2BasedCentralGravitySolver.js","../lib/network/modules/PhysicsEngine.js","../lib/network/NetworkUtil.js","../lib/network/modules/components/nodes/Cluster.js","../lib/network/modules/Clustering.js","../lib/network/modules/CanvasRenderer.js","../node_modules/core-js-pure/stable/set-interval.js","../lib/hammerUtil.js","../lib/network/modules/Canvas.js","../lib/network/modules/View.js","../lib/network/modules/view-handler/index.ts","../node_modules/keycharm/src/keycharm.js","../lib/network/modules/components/NavigationHandler.js","../lib/network/modules/InteractionHandler.js","../node_modules/core-js-pure/internals/collection-weak.js","../node_modules/core-js-pure/modules/es.weak-map.constructor.js","../node_modules/core-js-pure/es/weak-map/index.js","../lib/network/modules/selection/selection-accumulator.ts","../lib/network/modules/SelectionHandler.js","../lib/network/modules/components/DirectionStrategy.js","../node_modules/core-js-pure/modules/es.array.every.js","../node_modules/core-js-pure/es/array/virtual/every.js","../node_modules/core-js-pure/es/instance/every.js","../node_modules/core-js-pure/stable/instance/every.js","../lib/network/modules/layout-engine/index.ts","../lib/network/modules/LayoutEngine.js","../lib/network/modules/ManipulationSystem.js","../lib/network/options.ts","../lib/network/modules/components/algorithms/FloydWarshall.js","../lib/network/modules/KamadaKawai.js","../lib/network/Network.js","../lib/DOMutil.js","../lib/network/locale-utils.ts","../lib/index-legacy.ts"],"sourcesContent":["'use strict';\nvar check = function (it) {\n return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || this || Function('return this')();\n","'use strict';\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","'use strict';\nvar classofRaw = require('../internals/classof-raw');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = function (fn) {\n // Nashorn bug:\n // https://github.com/zloirock/core-js/issues/1128\n // https://github.com/zloirock/core-js/issues/1130\n if (classofRaw(fn) === 'Function') return uncurryThis(fn);\n};\n","'use strict';\nvar documentAll = typeof document == 'object' && document.all;\n\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nvar IS_HTMLDDA = typeof documentAll == 'undefined' && documentAll !== undefined;\n\nmodule.exports = {\n all: documentAll,\n IS_HTMLDDA: IS_HTMLDDA\n};\n","'use strict';\nvar $documentAll = require('../internals/document-all');\n\nvar documentAll = $documentAll.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = $documentAll.IS_HTMLDDA ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","'use strict';\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) === 'String' ? split(it, '') : $Object(it);\n} : $Object;\n","'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n","'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar $documentAll = require('../internals/document-all');\n\nvar documentAll = $documentAll.all;\n\nmodule.exports = $documentAll.IS_HTMLDDA ? function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it) || it === documentAll;\n} : function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar path = require('../internals/path');\nvar global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (variable) {\n return isCallable(variable) ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","'use strict';\nmodule.exports = typeof navigator != 'undefined' && String(navigator.userAgent) || '';\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\nvar global = require('../internals/global');\n\nvar $String = global.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol('symbol detection');\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n // of course, fail.\n return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw new $TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nvar global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","'use strict';\nvar global = require('../internals/global');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || defineGlobalProperty(SHARED, {});\n\nmodule.exports = store;\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.33.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2023 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.33.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","'use strict';\nvar global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = global.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw new $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","'use strict';\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a !== 7;\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value === POLYFILL ? true\n : value === NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype !== 42;\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw new $TypeError($String(argument) + ' is not an object');\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","'use strict';\nvar global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar isCallable = require('../internals/is-callable');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar isForced = require('../internals/is-forced');\nvar path = require('../internals/path');\nvar bind = require('../internals/function-bind-context');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\n\nvar wrapConstructor = function (NativeConstructor) {\n var Wrapper = function (a, b, c) {\n if (this instanceof Wrapper) {\n switch (arguments.length) {\n case 0: return new NativeConstructor();\n case 1: return new NativeConstructor(a);\n case 2: return new NativeConstructor(a, b);\n } return new NativeConstructor(a, b, c);\n } return apply(NativeConstructor, this, arguments);\n };\n Wrapper.prototype = NativeConstructor.prototype;\n return Wrapper;\n};\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.dontCallGetSet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var PROTO = options.proto;\n\n var nativeSource = GLOBAL ? global : STATIC ? global[TARGET] : (global[TARGET] || {}).prototype;\n\n var target = GLOBAL ? path : path[TARGET] || createNonEnumerableProperty(path, TARGET, {})[TARGET];\n var targetPrototype = target.prototype;\n\n var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE;\n var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor;\n\n for (key in source) {\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contains in native\n USE_NATIVE = !FORCED && nativeSource && hasOwn(nativeSource, key);\n\n targetProperty = target[key];\n\n if (USE_NATIVE) if (options.dontCallGetSet) {\n descriptor = getOwnPropertyDescriptor(nativeSource, key);\n nativeProperty = descriptor && descriptor.value;\n } else nativeProperty = nativeSource[key];\n\n // export native or implementation\n sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key];\n\n if (USE_NATIVE && typeof targetProperty == typeof sourceProperty) continue;\n\n // bind methods to global for calling from export context\n if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, global);\n // wrap global constructors for prevent changes in this version\n else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty);\n // make static versions for prototype methods\n else if (PROTO && isCallable(sourceProperty)) resultProperty = uncurryThis(sourceProperty);\n // default case\n else resultProperty = sourceProperty;\n\n // add a flag to not completely full polyfills\n if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(resultProperty, 'sham', true);\n }\n\n createNonEnumerableProperty(target, key, resultProperty);\n\n if (PROTO) {\n VIRTUAL_PROTOTYPE = TARGET + 'Prototype';\n if (!hasOwn(path, VIRTUAL_PROTOTYPE)) {\n createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {});\n }\n // export virtual prototype methods\n createNonEnumerableProperty(path[VIRTUAL_PROTOTYPE], key, sourceProperty);\n // export real prototype methods\n if (options.real && targetPrototype && (FORCED || !targetPrototype[key])) {\n createNonEnumerableProperty(targetPrototype, key, sourceProperty);\n }\n }\n }\n};\n","'use strict';\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n var n = +x;\n return (n > 0 ? floor : ceil)(n);\n};\n","'use strict';\nvar trunc = require('../internals/math-trunc');\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- NaN check\n return number !== number || number === 0 ? 0 : trunc(number);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","'use strict';\nvar toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el !== el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value !== value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","'use strict';\n// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar call = require('../internals/function-call');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\nvar concat = uncurryThis([].concat);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol('assign detection');\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] !== 7 || objectKeys($assign({}, B)).join('') !== alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","'use strict';\nvar $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, arity: 2, forced: Object.assign !== assign }, {\n assign: assign\n});\n","'use strict';\nrequire('../../modules/es.object.assign');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.assign;\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar arraySlice = require('../internals/array-slice');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar $Function = Function;\nvar concat = uncurryThis([].concat);\nvar join = uncurryThis([].join);\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n if (!hasOwn(factories, argsLength)) {\n var list = [];\n var i = 0;\n for (; i < argsLength; i++) list[i] = 'a[' + i + ']';\n factories[argsLength] = $Function('C,a', 'return new C(' + join(list, ',') + ')');\n } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.es/ecma262/#sec-function.prototype.bind\n// eslint-disable-next-line es/no-function-prototype-bind -- detection\nmodule.exports = NATIVE_BIND ? $Function.bind : function bind(that /* , ...args */) {\n var F = aCallable(this);\n var Prototype = F.prototype;\n var partArgs = arraySlice(arguments, 1);\n var boundFunction = function bound(/* args... */) {\n var args = concat(partArgs, arraySlice(arguments));\n return this instanceof boundFunction ? construct(F, args.length, args) : F.apply(that, args);\n };\n if (isObject(Prototype)) boundFunction.prototype = Prototype;\n return boundFunction;\n};\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar bind = require('../internals/function-bind');\n\n// `Function.prototype.bind` method\n// https://tc39.es/ecma262/#sec-function.prototype.bind\n// eslint-disable-next-line es/no-function-prototype-bind -- detection\n$({ target: 'Function', proto: true, forced: Function.bind !== bind }, {\n bind: bind\n});\n","'use strict';\nvar path = require('../internals/path');\n\nmodule.exports = function (CONSTRUCTOR) {\n return path[CONSTRUCTOR + 'Prototype'];\n};\n","'use strict';\nrequire('../../../modules/es.function.bind');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Function').bind;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../function/virtual/bind');\n\nvar FunctionPrototype = Function.prototype;\n\nmodule.exports = function (it) {\n var own = it.bind;\n return it === FunctionPrototype || (isPrototypeOf(FunctionPrototype, it) && own === FunctionPrototype.bind) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/bind');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/instance/bind\");","/**\n * Draw a circle.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - The radius of the circle.\n */\nexport function drawCircle(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n ctx.beginPath();\n ctx.arc(x, y, r, 0, 2 * Math.PI, false);\n ctx.closePath();\n}\n\n/**\n * Draw a square.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - Half of the width and height of the square.\n */\nexport function drawSquare(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n ctx.beginPath();\n ctx.rect(x - r, y - r, r * 2, r * 2);\n ctx.closePath();\n}\n\n/**\n * Draw an equilateral triangle standing on a side.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - Half of the length of the sides.\n * @remarks\n * http://en.wikipedia.org/wiki/Equilateral_triangle\n */\nexport function drawTriangle(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n ctx.beginPath();\n\n // the change in radius and the offset is here to center the shape\n r *= 1.15;\n y += 0.275 * r;\n\n const s = r * 2;\n const s2 = s / 2;\n const ir = (Math.sqrt(3) / 6) * s; // radius of inner circle\n const h = Math.sqrt(s * s - s2 * s2); // height\n\n ctx.moveTo(x, y - (h - ir));\n ctx.lineTo(x + s2, y + ir);\n ctx.lineTo(x - s2, y + ir);\n ctx.lineTo(x, y - (h - ir));\n ctx.closePath();\n}\n\n/**\n * Draw an equilateral triangle standing on a vertex.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - Half of the length of the sides.\n * @remarks\n * http://en.wikipedia.org/wiki/Equilateral_triangle\n */\nexport function drawTriangleDown(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n ctx.beginPath();\n\n // the change in radius and the offset is here to center the shape\n r *= 1.15;\n y -= 0.275 * r;\n\n const s = r * 2;\n const s2 = s / 2;\n const ir = (Math.sqrt(3) / 6) * s; // radius of inner circle\n const h = Math.sqrt(s * s - s2 * s2); // height\n\n ctx.moveTo(x, y + (h - ir));\n ctx.lineTo(x + s2, y - ir);\n ctx.lineTo(x - s2, y - ir);\n ctx.lineTo(x, y + (h - ir));\n ctx.closePath();\n}\n\n/**\n * Draw a star.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - The outer radius of the star.\n */\nexport function drawStar(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/\n ctx.beginPath();\n\n // the change in radius and the offset is here to center the shape\n r *= 0.82;\n y += 0.1 * r;\n\n for (let n = 0; n < 10; n++) {\n const radius = n % 2 === 0 ? r * 1.3 : r * 0.5;\n ctx.lineTo(\n x + radius * Math.sin((n * 2 * Math.PI) / 10),\n y - radius * Math.cos((n * 2 * Math.PI) / 10)\n );\n }\n\n ctx.closePath();\n}\n\n/**\n * Draw a diamond.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - Half of the width and height of the diamond.\n * @remarks\n * http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/\n */\nexport function drawDiamond(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n ctx.beginPath();\n\n ctx.lineTo(x, y + r);\n ctx.lineTo(x + r, y);\n ctx.lineTo(x, y - r);\n ctx.lineTo(x - r, y);\n\n ctx.closePath();\n}\n\n/**\n * Draw a rectangle with rounded corners.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param w - The width of the rectangle.\n * @param h - The height of the rectangle.\n * @param r - The radius of the corners.\n * @remarks\n * http://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-on-html-canvas\n */\nexport function drawRoundRect(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n w: number,\n h: number,\n r: number\n): void {\n const r2d = Math.PI / 180;\n if (w - 2 * r < 0) {\n r = w / 2;\n } //ensure that the radius isn't too large for x\n if (h - 2 * r < 0) {\n r = h / 2;\n } //ensure that the radius isn't too large for y\n ctx.beginPath();\n ctx.moveTo(x + r, y);\n ctx.lineTo(x + w - r, y);\n ctx.arc(x + w - r, y + r, r, r2d * 270, r2d * 360, false);\n ctx.lineTo(x + w, y + h - r);\n ctx.arc(x + w - r, y + h - r, r, 0, r2d * 90, false);\n ctx.lineTo(x + r, y + h);\n ctx.arc(x + r, y + h - r, r, r2d * 90, r2d * 180, false);\n ctx.lineTo(x, y + r);\n ctx.arc(x + r, y + r, r, r2d * 180, r2d * 270, false);\n ctx.closePath();\n}\n\n/**\n * Draw an ellipse.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param w - The width of the ellipse.\n * @param h - The height of the ellipse.\n * @remarks\n * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas\n *\n * Postfix '_vis' added to discern it from standard method ellipse().\n */\nexport function drawEllipse(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n w: number,\n h: number\n): void {\n const kappa = 0.5522848,\n ox = (w / 2) * kappa, // control point offset horizontal\n oy = (h / 2) * kappa, // control point offset vertical\n xe = x + w, // x-end\n ye = y + h, // y-end\n xm = x + w / 2, // x-middle\n ym = y + h / 2; // y-middle\n\n ctx.beginPath();\n ctx.moveTo(x, ym);\n ctx.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\n ctx.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\n ctx.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\n ctx.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\n ctx.closePath();\n}\n\n/**\n * Draw an isometric cylinder.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param w - The width of the database.\n * @param h - The height of the database.\n * @remarks\n * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas\n */\nexport function drawDatabase(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n w: number,\n h: number\n): void {\n const f = 1 / 3;\n const wEllipse = w;\n const hEllipse = h * f;\n\n const kappa = 0.5522848,\n ox = (wEllipse / 2) * kappa, // control point offset horizontal\n oy = (hEllipse / 2) * kappa, // control point offset vertical\n xe = x + wEllipse, // x-end\n ye = y + hEllipse, // y-end\n xm = x + wEllipse / 2, // x-middle\n ym = y + hEllipse / 2, // y-middle\n ymb = y + (h - hEllipse / 2), // y-midlle, bottom ellipse\n yeb = y + h; // y-end, bottom ellipse\n\n ctx.beginPath();\n ctx.moveTo(xe, ym);\n\n ctx.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\n ctx.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\n\n ctx.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\n ctx.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\n\n ctx.lineTo(xe, ymb);\n\n ctx.bezierCurveTo(xe, ymb + oy, xm + ox, yeb, xm, yeb);\n ctx.bezierCurveTo(xm - ox, yeb, x, ymb + oy, x, ymb);\n\n ctx.lineTo(x, ym);\n}\n\n/**\n * Draw a dashed line.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The start position on the x axis.\n * @param y - The start position on the y axis.\n * @param x2 - The end position on the x axis.\n * @param y2 - The end position on the y axis.\n * @param pattern - List of lengths starting with line and then alternating between space and line.\n * @author David Jordan\n * @remarks\n * date 2012-08-08\n * http://stackoverflow.com/questions/4576724/dotted-stroke-in-canvas\n */\nexport function drawDashedLine(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n x2: number,\n y2: number,\n pattern: number[]\n): void {\n ctx.beginPath();\n ctx.moveTo(x, y);\n\n const patternLength = pattern.length;\n const dx = x2 - x;\n const dy = y2 - y;\n const slope = dy / dx;\n let distRemaining = Math.sqrt(dx * dx + dy * dy);\n let patternIndex = 0;\n let draw = true;\n let xStep = 0;\n let dashLength = +pattern[0];\n\n while (distRemaining >= 0.1) {\n dashLength = +pattern[patternIndex++ % patternLength];\n if (dashLength > distRemaining) {\n dashLength = distRemaining;\n }\n\n xStep = Math.sqrt((dashLength * dashLength) / (1 + slope * slope));\n xStep = dx < 0 ? -xStep : xStep;\n x += xStep;\n y += slope * xStep;\n\n if (draw === true) {\n ctx.lineTo(x, y);\n } else {\n ctx.moveTo(x, y);\n }\n\n distRemaining -= dashLength;\n draw = !draw;\n }\n}\n\n/**\n * Draw a hexagon.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - The radius of the hexagon.\n */\nexport function drawHexagon(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n ctx.beginPath();\n const sides = 6;\n const a = (Math.PI * 2) / sides;\n ctx.moveTo(x + r, y);\n for (let i = 1; i < sides; i++) {\n ctx.lineTo(x + r * Math.cos(a * i), y + r * Math.sin(a * i));\n }\n ctx.closePath();\n}\n\nconst shapeMap = {\n circle: drawCircle,\n dashedLine: drawDashedLine,\n database: drawDatabase,\n diamond: drawDiamond,\n ellipse: drawEllipse,\n ellipse_vis: drawEllipse,\n hexagon: drawHexagon,\n roundRect: drawRoundRect,\n square: drawSquare,\n star: drawStar,\n triangle: drawTriangle,\n triangleDown: drawTriangleDown,\n};\n\n/**\n * Returns either custom or native drawing function base on supplied name.\n *\n * @param name - The name of the function. Either the name of a\n * CanvasRenderingContext2D property or an export from shapes.ts without the\n * draw prefix.\n * @returns The function that can be used for rendering. In case of native\n * CanvasRenderingContext2D function the API is normalized to\n * `(ctx: CanvasRenderingContext2D, ...originalArgs) => void`.\n */\nexport function getShape(\n name: keyof CanvasRenderingContext2D | keyof typeof shapeMap\n): any {\n if (Object.prototype.hasOwnProperty.call(shapeMap, name)) {\n return (shapeMap as any)[name];\n } else {\n return function (ctx: CanvasRenderingContext2D, ...args: any[]): void {\n (CanvasRenderingContext2D.prototype as any)[name].call(ctx, args);\n };\n }\n}\n","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n for (var key in Emitter.prototype) {\r\n obj[key] = Emitter.prototype[key];\r\n }\r\n return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n .push(fn);\r\n return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n function on() {\r\n this.off(event, on);\r\n fn.apply(this, arguments);\r\n }\r\n\r\n on.fn = fn;\r\n this.on(event, on);\r\n return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n\r\n // all\r\n if (0 == arguments.length) {\r\n this._callbacks = {};\r\n return this;\r\n }\r\n\r\n // specific event\r\n var callbacks = this._callbacks['$' + event];\r\n if (!callbacks) return this;\r\n\r\n // remove all handlers\r\n if (1 == arguments.length) {\r\n delete this._callbacks['$' + event];\r\n return this;\r\n }\r\n\r\n // remove specific handler\r\n var cb;\r\n for (var i = 0; i < callbacks.length; i++) {\r\n cb = callbacks[i];\r\n if (cb === fn || cb.fn === fn) {\r\n callbacks.splice(i, 1);\r\n break;\r\n }\r\n }\r\n\r\n // Remove event specific arrays for event types that no\r\n // one is subscribed for to avoid memory leak.\r\n if (callbacks.length === 0) {\r\n delete this._callbacks['$' + event];\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n this._callbacks = this._callbacks || {};\r\n\r\n var args = new Array(arguments.length - 1)\r\n , callbacks = this._callbacks['$' + event];\r\n\r\n for (var i = 1; i < arguments.length; i++) {\r\n args[i - 1] = arguments[i];\r\n }\r\n\r\n if (callbacks) {\r\n callbacks = callbacks.slice(0);\r\n for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n callbacks[i].apply(this, args);\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n this._callbacks = this._callbacks || {};\r\n return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n return !! this.listeners(event).length;\r\n};\r\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get = store.get;\n store.has = store.has;\n store.set = store.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set = function (it, metadata) {\n if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n store.set(it, metadata);\n return metadata;\n };\n get = function (it) {\n return store.get(it) || {};\n };\n has = function (it) {\n return store.has(it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","'use strict';\nvar classof = require('../internals/classof');\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string');\n return $String(argument);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\nvar global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","'use strict';\n/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n// eslint-disable-next-line es/no-object-create -- safe\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n defineBuiltIn(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar $Object = Object;\nvar ObjectPrototype = $Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof $Object ? ObjectPrototype : null;\n};\n","'use strict';\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (target, key, value, options) {\n if (options && options.enumerable) target[key] = value;\n else createNonEnumerableProperty(target, key, value);\n return target;\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar defineProperty = require('../internals/object-define-property').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar toString = require('../internals/object-to-string');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC, SET_METHOD) {\n if (it) {\n var target = STATIC ? it : it.prototype;\n if (!hasOwn(target, TO_STRING_TAG)) {\n defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n if (SET_METHOD && !TO_STRING_TAG_SUPPORT) {\n createNonEnumerableProperty(target, 'toString', toString);\n }\n }\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nmodule.exports = function (object, key, method) {\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));\n } catch (error) { /* empty */ }\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument)) return argument;\n throw new $TypeError(\"Can't set \" + $String(argument) + ' as a prototype');\n};\n","'use strict';\n/* eslint-disable no-proto -- safe */\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/iterator-create-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND];\n\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n }\n\n return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME === 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n defineBuiltIn(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","'use strict';\n// `CreateIterResultObject` abstract operation\n// https://tc39.es/ecma262/#sec-createiterresultobject\nmodule.exports = function (value, done) {\n return { value: value, done: done };\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: toString(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return createIterResultObject(undefined, true);\n point = charAt(string, index);\n state.index += point.length;\n return createIterResultObject(point, false);\n});\n","'use strict';\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n innerResult = getMethod(iterator, 'return');\n if (!innerResult) {\n if (kind === 'throw') throw value;\n return value;\n }\n innerResult = call(innerResult, iterator);\n } catch (error) {\n innerError = true;\n innerResult = error;\n }\n if (kind === 'throw') throw value;\n if (innerError) throw innerResult;\n anObject(innerResult);\n return value;\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\nvar iteratorClose = require('../internals/iterator-close');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.test(noop);\n\nvar isConstructorModern = function isConstructor(argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, empty, argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy = function isConstructor(argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n }\n try {\n // we can't check .prototype since constructors produced by .bind haven't it\n // `Function#toString` throws on some built-it function in some legacy engines\n // (for example, `DOMQuad` and similar in FF41-)\n return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n } catch (error) {\n return true;\n }\n};\n\nisConstructorLegacy.sham = true;\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called = true; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","'use strict';\nvar classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR)\n || getMethod(it, '@@iterator')\n || Iterators[classof(it)];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n throw new $TypeError(tryToString(argument) + ' is not iterable');\n};\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar isConstructor = require('../internals/is-constructor');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar $Array = Array;\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var IS_CONSTRUCTOR = isConstructor(this);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined);\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod && !(this === $Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = getIterator(O, iteratorMethod);\n next = iterator.next;\n result = IS_CONSTRUCTOR ? new this() : [];\n for (;!(step = call(next, iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = lengthOfArrayLike(O);\n result = IS_CONSTRUCTOR ? new this(length) : $Array(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n try {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n } catch (error) { return false; } // workaround of old WebKit + `eval` bug\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n // eslint-disable-next-line es/no-array-from -- required for testing\n Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.es/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n from: from\n});\n","'use strict';\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/es.array.from');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Array.from;\n","'use strict';\nvar parent = require('../../es/array/from');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/array/from\");","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineProperty = require('../internals/object-define-property').f;\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return createIterResultObject(undefined, true);\n }\n switch (kind) {\n case 'keys': return createIterResultObject(index, false);\n case 'values': return createIterResultObject(target[index], false);\n } return createIterResultObject([index, target[index]], false);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nvar values = Iterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n// V8 ~ Chrome 45- bug\nif (!IS_PURE && DESCRIPTORS && values.name !== 'values') try {\n defineProperty(values, 'name', { value: 'values' });\n} catch (error) { /* empty */ }\n","'use strict';\nrequire('../modules/es.array.iterator');\nrequire('../modules/es.string.iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nmodule.exports = getIteratorMethod;\n","'use strict';\nrequire('../modules/es.array.iterator');\nvar DOMIterables = require('../internals/dom-iterables');\nvar global = require('../internals/global');\nvar classof = require('../internals/classof');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n if (CollectionPrototype && classof(CollectionPrototype) !== TO_STRING_TAG) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n Iterators[COLLECTION_NAME] = Iterators.Array;\n}\n","'use strict';\n// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","'use strict';\nvar parent = require('../es/get-iterator-method');\nrequire('../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n","'use strict';\nmodule.exports = require('../full/get-iterator-method');\n","module.exports = require(\"core-js-pure/features/get-iterator-method\");","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineProperty = require('../internals/object-define-property').f;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\n// eslint-disable-next-line es/no-object-defineproperty -- safe\n$({ target: 'Object', stat: true, forced: Object.defineProperty !== defineProperty, sham: !DESCRIPTORS }, {\n defineProperty: defineProperty\n});\n","'use strict';\nrequire('../../modules/es.object.define-property');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nvar defineProperty = module.exports = function defineProperty(it, key, desc) {\n return Object.defineProperty(it, key, desc);\n};\n\nif (Object.defineProperty.sham) defineProperty.sham = true;\n","'use strict';\nvar parent = require('../../es/object/define-property');\n\nmodule.exports = parent;\n","'use strict';\nmodule.exports = require('../../full/object/define-property');\n","'use strict';\nvar parent = require('../../stable/object/define-property');\n\nmodule.exports = parent;\n","'use strict';\nvar classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n return classof(argument) === 'Array';\n};\n","'use strict';\nvar $TypeError = TypeError;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991\n\nmodule.exports = function (it) {\n if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded');\n return it;\n};\n","'use strict';\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar $Array = Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? $Array : C;\n};\n","'use strict';\nvar arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !arrayMethodHasSpeciesSupport('concat');\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n concat: function concat(arg) {\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = lengthOfArrayLike(E);\n doesNotExceedSafeInteger(n + len);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n doesNotExceedSafeInteger(n + 1);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","'use strict';\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\n\nvar $Array = Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = $Array(max(fin - k, 0));\n var n = 0;\n for (; k < fin; k++, n++) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n};\n","'use strict';\n/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice-simple');\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return arraySlice(windowNames);\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && classof(it) === 'Window'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n return defineProperty.f(target, name, descriptor);\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","'use strict';\nvar path = require('../internals/path');\nvar hasOwn = require('../internals/has-own-property');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar getBuiltIn = require('../internals/get-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar defineBuiltIn = require('../internals/define-built-in');\n\nmodule.exports = function () {\n var Symbol = getBuiltIn('Symbol');\n var SymbolPrototype = Symbol && Symbol.prototype;\n var valueOf = SymbolPrototype && SymbolPrototype.valueOf;\n var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) {\n // `Symbol.prototype[@@toPrimitive]` method\n // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\n // eslint-disable-next-line no-unused-vars -- required for .length\n defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function (hint) {\n return call(valueOf, this);\n }, { arity: 1 });\n }\n};\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE === 1;\n var IS_FILTER = TYPE === 2;\n var IS_SOME = TYPE === 3;\n var IS_EVERY = TYPE === 4;\n var IS_FIND_INDEX = TYPE === 6;\n var IS_FILTER_REJECT = TYPE === 7;\n var NO_HOLES = TYPE === 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var length = lengthOfArrayLike(self);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar $toString = require('../internals/to-string');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\nvar defineSymbolToPrimitive = require('../internals/symbol-define-to-primitive');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\n\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];\nvar RangeError = global.RangeError;\nvar TypeError = global.TypeError;\nvar QObject = global.QObject;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar push = uncurryThis([].push);\n\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar WellKnownSymbolsStore = shared('wks');\n\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar fallbackDefineProperty = function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n};\n\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a !== 7;\n}) ? fallbackDefineProperty : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPropertyKey(P);\n anObject(Attributes);\n if (hasOwn(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPropertyKey(V);\n var enumerable = call(nativePropertyIsEnumerable, this, P);\n if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]\n ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPropertyKey(P);\n if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function (O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {\n push(result, AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (isPrototypeOf(SymbolPrototype, this)) throw new TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);\n if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n var descriptor = createPropertyDescriptor(1, value);\n try {\n setSymbolDescriptor(this, tag, descriptor);\n } catch (error) {\n if (!(error instanceof RangeError)) throw error;\n fallbackDefineProperty(this, tag, descriptor);\n }\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n SymbolPrototype = $Symbol[PROTOTYPE];\n\n defineBuiltIn(SymbolPrototype, 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n defineBuiltIn($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n definePropertiesModule.f = $defineProperties;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n defineBuiltInAccessor(SymbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n defineBuiltIn(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.es/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.es/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.es/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.es/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames\n});\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\ndefineSymbolToPrimitive();\n\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","'use strict';\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\n/* eslint-disable es/no-symbol -- safe */\nmodule.exports = NATIVE_SYMBOL && !!Symbol['for'] && !!Symbol.keyFor;\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar hasOwn = require('../internals/has-own-property');\nvar toString = require('../internals/to-string');\nvar shared = require('../internals/shared');\nvar NATIVE_SYMBOL_REGISTRY = require('../internals/symbol-registry-detection');\n\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\n\n// `Symbol.for` method\n// https://tc39.es/ecma262/#sec-symbol.for\n$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {\n 'for': function (key) {\n var string = toString(key);\n if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = getBuiltIn('Symbol')(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar hasOwn = require('../internals/has-own-property');\nvar isSymbol = require('../internals/is-symbol');\nvar tryToString = require('../internals/try-to-string');\nvar shared = require('../internals/shared');\nvar NATIVE_SYMBOL_REGISTRY = require('../internals/symbol-registry-detection');\n\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\n\n// `Symbol.keyFor` method\n// https://tc39.es/ecma262/#sec-symbol.keyfor\n$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw new TypeError(tryToString(sym) + ' is not a symbol');\n if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n }\n});\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isArray = require('../internals/is-array');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar toString = require('../internals/to-string');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (replacer) {\n if (isCallable(replacer)) return replacer;\n if (!isArray(replacer)) return;\n var rawLength = replacer.length;\n var keys = [];\n for (var i = 0; i < rawLength; i++) {\n var element = replacer[i];\n if (typeof element == 'string') push(keys, element);\n else if (typeof element == 'number' || classof(element) === 'Number' || classof(element) === 'String') push(keys, toString(element));\n }\n var keysLength = keys.length;\n var root = true;\n return function (key, value) {\n if (root) {\n root = false;\n return value;\n }\n if (isArray(this)) return value;\n for (var j = 0; j < keysLength; j++) if (keys[j] === key) return value;\n };\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isSymbol = require('../internals/is-symbol');\nvar arraySlice = require('../internals/array-slice');\nvar getReplacerFunction = require('../internals/get-json-replacer-function');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nvar $String = String;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar exec = uncurryThis(/./.exec);\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar replace = uncurryThis(''.replace);\nvar numberToString = uncurryThis(1.0.toString);\n\nvar tester = /[\\uD800-\\uDFFF]/g;\nvar low = /^[\\uD800-\\uDBFF]$/;\nvar hi = /^[\\uDC00-\\uDFFF]$/;\n\nvar WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function () {\n var symbol = getBuiltIn('Symbol')('stringify detection');\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) !== '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) !== '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) !== '{}';\n});\n\n// https://github.com/tc39/proposal-well-formed-stringify\nvar ILL_FORMED_UNICODE = fails(function () {\n return $stringify('\\uDF06\\uD834') !== '\"\\\\udf06\\\\ud834\"'\n || $stringify('\\uDEAD') !== '\"\\\\udead\"';\n});\n\nvar stringifyWithSymbolsFix = function (it, replacer) {\n var args = arraySlice(arguments);\n var $replacer = getReplacerFunction(replacer);\n if (!isCallable($replacer) && (it === undefined || isSymbol(it))) return; // IE8 returns string on undefined\n args[1] = function (key, value) {\n // some old implementations (like WebKit) could pass numbers as keys\n if (isCallable($replacer)) value = call($replacer, this, $String(key), value);\n if (!isSymbol(value)) return value;\n };\n return apply($stringify, null, args);\n};\n\nvar fixIllFormed = function (match, offset, string) {\n var prev = charAt(string, offset - 1);\n var next = charAt(string, offset + 1);\n if ((exec(low, match) && !exec(hi, next)) || (exec(hi, match) && !exec(low, prev))) {\n return '\\\\u' + numberToString(charCodeAt(match, 0), 16);\n } return match;\n};\n\nif ($stringify) {\n // `JSON.stringify` method\n // https://tc39.es/ecma262/#sec-json.stringify\n $({ target: 'JSON', stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n stringify: function stringify(it, replacer, space) {\n var args = arraySlice(arguments);\n var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args);\n return ILL_FORMED_UNICODE && typeof result == 'string' ? replace(result, tester, fixIllFormed) : result;\n }\n });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar fails = require('../internals/fails');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar toObject = require('../internals/to-object');\n\n// V8 ~ Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FORCED = !NATIVE_SYMBOL || fails(function () { getOwnPropertySymbolsModule.f(1); });\n\n// `Object.getOwnPropertySymbols` method\n// https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n$({ target: 'Object', stat: true, forced: FORCED }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : [];\n }\n});\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.hasInstance` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.hasinstance\ndefineWellKnownSymbol('hasInstance');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.isConcatSpreadable` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.isconcatspreadable\ndefineWellKnownSymbol('isConcatSpreadable');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.match` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.match\ndefineWellKnownSymbol('match');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.matchAll` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.matchall\ndefineWellKnownSymbol('matchAll');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.replace` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.replace\ndefineWellKnownSymbol('replace');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.search` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.search\ndefineWellKnownSymbol('search');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.species` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.species\ndefineWellKnownSymbol('species');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.split` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.split\ndefineWellKnownSymbol('split');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\nvar defineSymbolToPrimitive = require('../internals/symbol-define-to-primitive');\n\n// `Symbol.toPrimitive` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.toprimitive\ndefineWellKnownSymbol('toPrimitive');\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\ndefineSymbolToPrimitive();\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag(getBuiltIn('Symbol'), 'Symbol');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.unscopables` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.unscopables\ndefineWellKnownSymbol('unscopables');\n","'use strict';\nvar global = require('../internals/global');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n","'use strict';\nrequire('../../modules/es.array.concat');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.symbol');\nrequire('../../modules/es.symbol.async-iterator');\nrequire('../../modules/es.symbol.description');\nrequire('../../modules/es.symbol.has-instance');\nrequire('../../modules/es.symbol.is-concat-spreadable');\nrequire('../../modules/es.symbol.iterator');\nrequire('../../modules/es.symbol.match');\nrequire('../../modules/es.symbol.match-all');\nrequire('../../modules/es.symbol.replace');\nrequire('../../modules/es.symbol.search');\nrequire('../../modules/es.symbol.species');\nrequire('../../modules/es.symbol.split');\nrequire('../../modules/es.symbol.to-primitive');\nrequire('../../modules/es.symbol.to-string-tag');\nrequire('../../modules/es.symbol.unscopables');\nrequire('../../modules/es.json.to-string-tag');\nrequire('../../modules/es.math.to-string-tag');\nrequire('../../modules/es.reflect.to-string-tag');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Symbol;\n","'use strict';\nvar parent = require('../../es/symbol');\nrequire('../../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar METADATA = wellKnownSymbol('metadata');\nvar FunctionPrototype = Function.prototype;\n\n// Function.prototype[@@metadata]\n// https://github.com/tc39/proposal-decorator-metadata\nif (FunctionPrototype[METADATA] === undefined) {\n defineProperty(FunctionPrototype, METADATA, {\n value: null\n });\n}\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.asyncDispose` well-known symbol\n// https://github.com/tc39/proposal-async-explicit-resource-management\ndefineWellKnownSymbol('asyncDispose');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.dispose` well-known symbol\n// https://github.com/tc39/proposal-explicit-resource-management\ndefineWellKnownSymbol('dispose');\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.metadata` well-known symbol\n// https://github.com/tc39/proposal-decorators\ndefineWellKnownSymbol('metadata');\n","'use strict';\nvar parent = require('../../stable/symbol');\n\nrequire('../../modules/esnext.function.metadata');\nrequire('../../modules/esnext.symbol.async-dispose');\nrequire('../../modules/esnext.symbol.dispose');\nrequire('../../modules/esnext.symbol.metadata');\n\nmodule.exports = parent;\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar Symbol = getBuiltIn('Symbol');\nvar keyFor = Symbol.keyFor;\nvar thisSymbolValue = uncurryThis(Symbol.prototype.valueOf);\n\n// `Symbol.isRegisteredSymbol` method\n// https://tc39.es/proposal-symbol-predicates/#sec-symbol-isregisteredsymbol\nmodule.exports = Symbol.isRegisteredSymbol || function isRegisteredSymbol(value) {\n try {\n return keyFor(thisSymbolValue(value)) !== undefined;\n } catch (error) {\n return false;\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isRegisteredSymbol = require('../internals/symbol-is-registered');\n\n// `Symbol.isRegisteredSymbol` method\n// https://tc39.es/proposal-symbol-predicates/#sec-symbol-isregisteredsymbol\n$({ target: 'Symbol', stat: true }, {\n isRegisteredSymbol: isRegisteredSymbol\n});\n","'use strict';\nvar shared = require('../internals/shared');\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isSymbol = require('../internals/is-symbol');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar Symbol = getBuiltIn('Symbol');\nvar $isWellKnownSymbol = Symbol.isWellKnownSymbol;\nvar getOwnPropertyNames = getBuiltIn('Object', 'getOwnPropertyNames');\nvar thisSymbolValue = uncurryThis(Symbol.prototype.valueOf);\nvar WellKnownSymbolsStore = shared('wks');\n\nfor (var i = 0, symbolKeys = getOwnPropertyNames(Symbol), symbolKeysLength = symbolKeys.length; i < symbolKeysLength; i++) {\n // some old engines throws on access to some keys like `arguments` or `caller`\n try {\n var symbolKey = symbolKeys[i];\n if (isSymbol(Symbol[symbolKey])) wellKnownSymbol(symbolKey);\n } catch (error) { /* empty */ }\n}\n\n// `Symbol.isWellKnownSymbol` method\n// https://tc39.es/proposal-symbol-predicates/#sec-symbol-iswellknownsymbol\n// We should patch it for newly added well-known symbols. If it's not required, this module just will not be injected\nmodule.exports = function isWellKnownSymbol(value) {\n if ($isWellKnownSymbol && $isWellKnownSymbol(value)) return true;\n try {\n var symbol = thisSymbolValue(value);\n for (var j = 0, keys = getOwnPropertyNames(WellKnownSymbolsStore), keysLength = keys.length; j < keysLength; j++) {\n // eslint-disable-next-line eqeqeq -- polyfilled symbols case\n if (WellKnownSymbolsStore[keys[j]] == symbol) return true;\n }\n } catch (error) { /* empty */ }\n return false;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isWellKnownSymbol = require('../internals/symbol-is-well-known');\n\n// `Symbol.isWellKnownSymbol` method\n// https://tc39.es/proposal-symbol-predicates/#sec-symbol-iswellknownsymbol\n// We should patch it for newly added well-known symbols. If it's not required, this module just will not be injected\n$({ target: 'Symbol', stat: true, forced: true }, {\n isWellKnownSymbol: isWellKnownSymbol\n});\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.matcher` well-known symbol\n// https://github.com/tc39/proposal-pattern-matching\ndefineWellKnownSymbol('matcher');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.observable` well-known symbol\n// https://github.com/tc39/proposal-observable\ndefineWellKnownSymbol('observable');\n","'use strict';\nvar $ = require('../internals/export');\nvar isRegisteredSymbol = require('../internals/symbol-is-registered');\n\n// `Symbol.isRegistered` method\n// obsolete version of https://tc39.es/proposal-symbol-predicates/#sec-symbol-isregisteredsymbol\n$({ target: 'Symbol', stat: true, name: 'isRegisteredSymbol' }, {\n isRegistered: isRegisteredSymbol\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isWellKnownSymbol = require('../internals/symbol-is-well-known');\n\n// `Symbol.isWellKnown` method\n// obsolete version of https://tc39.es/proposal-symbol-predicates/#sec-symbol-iswellknownsymbol\n// We should patch it for newly added well-known symbols. If it's not required, this module just will not be injected\n$({ target: 'Symbol', stat: true, name: 'isWellKnownSymbol', forced: true }, {\n isWellKnown: isWellKnownSymbol\n});\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.metadataKey` well-known symbol\n// https://github.com/tc39/proposal-decorator-metadata\ndefineWellKnownSymbol('metadataKey');\n","'use strict';\n// TODO: remove from `core-js@4`\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.patternMatch` well-known symbol\n// https://github.com/tc39/proposal-pattern-matching\ndefineWellKnownSymbol('patternMatch');\n","'use strict';\n// TODO: remove from `core-js@4`\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\ndefineWellKnownSymbol('replaceAll');\n","'use strict';\nvar parent = require('../../actual/symbol');\nrequire('../../modules/esnext.symbol.is-registered-symbol');\nrequire('../../modules/esnext.symbol.is-well-known-symbol');\nrequire('../../modules/esnext.symbol.matcher');\nrequire('../../modules/esnext.symbol.observable');\n// TODO: Remove from `core-js@4`\nrequire('../../modules/esnext.symbol.is-registered');\nrequire('../../modules/esnext.symbol.is-well-known');\nrequire('../../modules/esnext.symbol.metadata-key');\nrequire('../../modules/esnext.symbol.pattern-match');\nrequire('../../modules/esnext.symbol.replace-all');\n\nmodule.exports = parent;\n","'use strict';\nmodule.exports = require('../../full/symbol');\n","'use strict';\nvar parent = require('../../es/symbol/iterator');\nrequire('../../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n","'use strict';\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/es.symbol.iterator');\nvar WrappedWellKnownSymbolModule = require('../../internals/well-known-symbol-wrapped');\n\nmodule.exports = WrappedWellKnownSymbolModule.f('iterator');\n","'use strict';\nmodule.exports = require('../../full/symbol/iterator');\n","'use strict';\nvar parent = require('../../stable/symbol/iterator');\n\nmodule.exports = parent;\n","import _Symbol from \"core-js-pure/features/symbol/index.js\";\nimport _Symbol$iterator from \"core-js-pure/features/symbol/iterator.js\";\nexport default function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof _Symbol && \"symbol\" == typeof _Symbol$iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof _Symbol && o.constructor === _Symbol && o !== _Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}","'use strict';\nrequire('../../modules/es.date.to-primitive');\nrequire('../../modules/es.symbol.to-primitive');\nvar WrappedWellKnownSymbolModule = require('../../internals/well-known-symbol-wrapped');\n\nmodule.exports = WrappedWellKnownSymbolModule.f('toPrimitive');\n","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nimport _Symbol$toPrimitive from \"core-js-pure/features/symbol/to-primitive.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[_Symbol$toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import _Object$defineProperty from \"core-js-pure/features/object/define-property.js\";\nimport toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n _Object$defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n _Object$defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","'use strict';\nvar $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\n\n// `Array.isArray` method\n// https://tc39.es/ecma262/#sec-array.isarray\n$({ target: 'Array', stat: true }, {\n isArray: isArray\n});\n","'use strict';\nrequire('../../modules/es.array.is-array');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Array.isArray;\n","'use strict';\nvar parent = require('../../es/array/is-array');\n\nmodule.exports = parent;\n","'use strict';\nvar parent = require('../../stable/array/is-array');\n\nmodule.exports = parent;\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar isArray = require('../internals/is-array');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Safari < 13 does not throw an error in this case\nvar SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function () {\n // makes no sense without proper strict mode support\n if (this !== undefined) return true;\n try {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty([], 'length', { writable: false }).length = 1;\n } catch (error) {\n return error instanceof TypeError;\n }\n}();\n\nmodule.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) {\n if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) {\n throw new $TypeError('Cannot set read only .length');\n } return O.length = length;\n} : function (O, length) {\n return O.length = length;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar setArrayLength = require('../internals/array-set-length');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar fails = require('../internals/fails');\n\nvar INCORRECT_TO_LENGTH = fails(function () {\n return [].push.call({ length: 0x100000000 }, 1) !== 4294967297;\n});\n\n// V8 and Safari <= 15.4, FF < 23 throws InternalError\n// https://bugs.chromium.org/p/v8/issues/detail?id=12681\nvar properErrorOnNonWritableLength = function () {\n try {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty([], 'length', { writable: false }).push();\n } catch (error) {\n return error instanceof TypeError;\n }\n};\n\nvar FORCED = INCORRECT_TO_LENGTH || !properErrorOnNonWritableLength();\n\n// `Array.prototype.push` method\n// https://tc39.es/ecma262/#sec-array.prototype.push\n$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n push: function push(item) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var argCount = arguments.length;\n doesNotExceedSafeInteger(len + argCount);\n for (var i = 0; i < argCount; i++) {\n O[len] = arguments[i];\n len++;\n }\n setArrayLength(O, len);\n return len;\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.push');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').push;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/push');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.push;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.push) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/push');\n\nmodule.exports = parent;\n","'use strict';\nmodule.exports = require('../../full/instance/push');\n","'use strict';\nvar $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar nativeSlice = require('../internals/array-slice');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar $Array = Array;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (isConstructor(Constructor) && (Constructor === $Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === $Array || Constructor === undefined) {\n return nativeSlice(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? $Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.slice');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').slice;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/slice');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.slice;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.slice) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/slice');\n\nmodule.exports = parent;\n","'use strict';\nmodule.exports = require('../../full/instance/slice');\n","'use strict';\nvar parent = require('../../stable/instance/slice');\n\nmodule.exports = parent;\n","'use strict';\nvar parent = require('../../stable/array/from');\n\nmodule.exports = parent;\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}","import _sliceInstanceProperty from \"core-js-pure/features/instance/slice.js\";\nimport _Array$from from \"core-js-pure/features/array/from.js\";\nimport arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n var _context;\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = _sliceInstanceProperty(_context = Object.prototype.toString.call(o)).call(_context, 8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return _Array$from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","import _Array$isArray from \"core-js-pure/features/array/is-array.js\";\nexport default function _arrayWithHoles(arr) {\n if (_Array$isArray(arr)) return arr;\n}","import _Symbol from \"core-js-pure/features/symbol/index.js\";\nimport _getIteratorMethod from \"core-js-pure/features/get-iterator-method.js\";\nimport _pushInstanceProperty from \"core-js-pure/features/instance/push.js\";\nexport default function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof _Symbol && _getIteratorMethod(r) || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (_pushInstanceProperty(a).call(a, e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import _Array$isArray from \"core-js-pure/features/array/is-array.js\";\nimport arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (_Array$isArray(arr)) return arrayLikeToArray(arr);\n}","import _Symbol from \"core-js-pure/features/symbol/index.js\";\nimport _getIteratorMethod from \"core-js-pure/features/get-iterator-method.js\";\nimport _Array$from from \"core-js-pure/features/array/from.js\";\nexport default function _iterableToArray(iter) {\n if (typeof _Symbol !== \"undefined\" && _getIteratorMethod(iter) != null || iter[\"@@iterator\"] != null) return _Array$from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","module.exports = require(\"core-js-pure/stable/symbol\");","'use strict';\nrequire('../../../modules/es.array.concat');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').concat;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/concat');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.concat;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.concat) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/concat');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/instance/slice\");","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar ownKeys = require('../internals/own-keys');\n\n// `Reflect.ownKeys` method\n// https://tc39.es/ecma262/#sec-reflect.ownkeys\n$({ target: 'Reflect', stat: true }, {\n ownKeys: ownKeys\n});\n","'use strict';\nrequire('../../modules/es.reflect.own-keys');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Reflect.ownKeys;\n","module.exports = require(\"core-js-pure/stable/array/is-array\");","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.map');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').map;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/map');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.map;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.map) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/map');\n\nmodule.exports = parent;\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n","'use strict';\nrequire('../../modules/es.object.keys');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.keys;\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar $Date = Date;\nvar thisTimeValue = uncurryThis($Date.prototype.getTime);\n\n// `Date.now` method\n// https://tc39.es/ecma262/#sec-date.now\n$({ target: 'Date', stat: true }, {\n now: function now() {\n return thisTimeValue(new $Date());\n }\n});\n","'use strict';\nrequire('../../modules/es.date.now');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Date.now;\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call -- required for testing\n method.call(null, argument || function () { return 1; }, 1);\n });\n};\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n","'use strict';\nvar $ = require('../internals/export');\nvar forEach = require('../internals/array-for-each');\n\n// `Array.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n$({ target: 'Array', proto: true, forced: [].forEach !== forEach }, {\n forEach: forEach\n});\n","'use strict';\nrequire('../../../modules/es.array.for-each');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').forEach;\n","'use strict';\nrequire('../../modules/web.dom-collections.iterator');\nvar classof = require('../../internals/classof');\nvar hasOwn = require('../../internals/has-own-property');\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/for-each');\n\nvar ArrayPrototype = Array.prototype;\n\nvar DOMIterables = {\n DOMTokenList: true,\n NodeList: true\n};\n\nmodule.exports = function (it) {\n var own = it.forEach;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.forEach)\n || hasOwn(DOMIterables, classof(it)) ? method : own;\n};\n","'use strict';\nvar parent = require('../../../es/array/virtual/for-each');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/instance/for-each\");","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isArray = require('../internals/is-array');\n\nvar nativeReverse = uncurryThis([].reverse);\nvar test = [1, 2];\n\n// `Array.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-array.prototype.reverse\n// fix for Safari 12.0 bug\n// https://bugs.webkit.org/show_bug.cgi?id=188794\n$({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {\n reverse: function reverse() {\n // eslint-disable-next-line no-self-assign -- dirty hack\n if (isArray(this)) this.length = this.length;\n return nativeReverse(this);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.reverse');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').reverse;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/reverse');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.reverse;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.reverse) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/reverse');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/instance/reverse\");","'use strict';\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (O, P) {\n if (!delete O[P]) throw new $TypeError('Cannot delete property ' + tryToString(P) + ' of ' + tryToString(O));\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar setArrayLength = require('../internals/array-set-length');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar deletePropertyOrThrow = require('../internals/delete-property-or-throw');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart);\n }\n doesNotExceedSafeInteger(len + insertCount - actualDeleteCount);\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else deletePropertyOrThrow(O, to);\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) deletePropertyOrThrow(O, k - 1);\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else deletePropertyOrThrow(O, to);\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n setArrayLength(O, len - actualDeleteCount + insertCount);\n return A;\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.splice');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').splice;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/splice');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.splice;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.splice) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/splice');\n\nmodule.exports = parent;\n","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar fails = require('../internals/fails');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// FF99+ bug\nvar BROKEN_ON_SPARSE = fails(function () {\n // eslint-disable-next-line es/no-array-prototype-includes -- detection\n return !Array(1).includes();\n});\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true, forced: BROKEN_ON_SPARSE }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","'use strict';\nrequire('../../../modules/es.array.includes');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').includes;\n","'use strict';\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp');\n};\n","'use strict';\nvar isRegExp = require('../internals/is-regexp');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw new $TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (error1) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (error2) { /* empty */ }\n } return false;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\nvar stringIndexOf = uncurryThis(''.indexOf);\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~stringIndexOf(\n toString(requireObjectCoercible(this)),\n toString(notARegExp(searchString)),\n arguments.length > 1 ? arguments[1] : undefined\n );\n }\n});\n","'use strict';\nrequire('../../../modules/es.string.includes');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('String').includes;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar arrayMethod = require('../array/virtual/includes');\nvar stringMethod = require('../string/virtual/includes');\n\nvar ArrayPrototype = Array.prototype;\nvar StringPrototype = String.prototype;\n\nmodule.exports = function (it) {\n var own = it.includes;\n if (it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.includes)) return arrayMethod;\n if (typeof it == 'string' || it === StringPrototype || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.includes)) {\n return stringMethod;\n } return own;\n};\n","'use strict';\nvar parent = require('../../es/instance/includes');\n\nmodule.exports = parent;\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar nativeGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n getPrototypeOf: function getPrototypeOf(it) {\n return nativeGetPrototypeOf(toObject(it));\n }\n});\n\n","'use strict';\nrequire('../../modules/es.object.get-prototype-of');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.getPrototypeOf;\n","'use strict';\nvar parent = require('../../es/object/get-prototype-of');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/object/get-prototype-of\");","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.filter');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').filter;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/filter');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.filter;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.filter) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/filter');\n\nmodule.exports = parent;\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar objectGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// in some IE versions, `propertyIsEnumerable` returns incorrect result on integer keys\n// of `null` prototype objects\nvar IE_BUG = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-create -- safe\n var O = Object.create(null);\n O[2] = 2;\n return !propertyIsEnumerable(O, 2);\n});\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var IE_WORKAROUND = IE_BUG && objectGetPrototypeOf(O) === null;\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || (IE_WORKAROUND ? key in O : propertyIsEnumerable(O, key))) {\n push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.es/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.es/ecma262/#sec-object.values\n values: createMethod(false)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n values: function values(O) {\n return $values(O);\n }\n});\n","'use strict';\nrequire('../../modules/es.object.values');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.values;\n","'use strict';\n// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar ltrim = RegExp('^[' + whitespaces + ']+');\nvar rtrim = RegExp('(^|[^' + whitespaces + '])[' + whitespaces + ']+$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = replace(string, ltrim, '');\n if (TYPE & 2) string = replace(string, rtrim, '$1');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","'use strict';\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseInt = global.parseInt;\nvar Symbol = global.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar hex = /^[+-]?0x/i;\nvar exec = uncurryThis(hex.exec);\nvar FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22\n // MS Edge 18- broken with boxed symbols\n || (ITERATOR && !fails(function () { $parseInt(Object(ITERATOR)); }));\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\nmodule.exports = FORCED ? function parseInt(string, radix) {\n var S = trim(toString(string));\n return $parseInt(S, (radix >>> 0) || (exec(hex, S) ? 16 : 10));\n} : $parseInt;\n","'use strict';\nvar $ = require('../internals/export');\nvar $parseInt = require('../internals/number-parse-int');\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\n$({ global: true, forced: parseInt !== $parseInt }, {\n parseInt: $parseInt\n});\n","'use strict';\nrequire('../modules/es.parse-int');\nvar path = require('../internals/path');\n\nmodule.exports = path.parseInt;\n","'use strict';\n/* eslint-disable es/no-array-prototype-indexof -- required for testing */\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar $indexOf = require('../internals/array-includes').indexOf;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar nativeIndexOf = uncurryThis([].indexOf);\n\nvar NEGATIVE_ZERO = !!nativeIndexOf && 1 / nativeIndexOf([1], 1, -0) < 0;\nvar FORCED = NEGATIVE_ZERO || !arrayMethodIsStrict('indexOf');\n\n// `Array.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-array.prototype.indexof\n$({ target: 'Array', proto: true, forced: FORCED }, {\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n var fromIndex = arguments.length > 1 ? arguments[1] : undefined;\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? nativeIndexOf(this, searchElement, fromIndex) || 0\n : $indexOf(this, searchElement, fromIndex);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.index-of');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').indexOf;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/index-of');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.indexOf;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.indexOf) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/index-of');\n\nmodule.exports = parent;\n","'use strict';\nvar $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\n});\n","'use strict';\nrequire('../../modules/es.object.entries');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.entries;\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar create = require('../internals/object-create');\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n create: create\n});\n","'use strict';\nrequire('../../modules/es.object.create');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nmodule.exports = function create(P, D) {\n return Object.create(P, D);\n};\n","'use strict';\nvar parent = require('../../es/object/create');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/object/create\");","'use strict';\nrequire('../../modules/es.json.stringify');\nvar path = require('../../internals/path');\nvar apply = require('../../internals/function-apply');\n\n// eslint-disable-next-line es/no-json -- safe\nif (!path.JSON) path.JSON = { stringify: JSON.stringify };\n\n// eslint-disable-next-line no-unused-vars -- required for `.length`\nmodule.exports = function stringify(it, replacer, space) {\n return apply(path.JSON.stringify, null, arguments);\n};\n","'use strict';\nvar parent = require('../../es/json/stringify');\n\nmodule.exports = parent;\n","'use strict';\n/* global Bun -- Deno case */\nmodule.exports = typeof Bun == 'function' && Bun && typeof Bun.version == 'string';\n","'use strict';\nvar $TypeError = TypeError;\n\nmodule.exports = function (passed, required) {\n if (passed < required) throw new $TypeError('Not enough arguments');\n return passed;\n};\n","'use strict';\nvar global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar isCallable = require('../internals/is-callable');\nvar ENGINE_IS_BUN = require('../internals/engine-is-bun');\nvar USER_AGENT = require('../internals/engine-user-agent');\nvar arraySlice = require('../internals/array-slice');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\n\nvar Function = global.Function;\n// dirty IE9- and Bun 0.3.0- checks\nvar WRAP = /MSIE .\\./.test(USER_AGENT) || ENGINE_IS_BUN && (function () {\n var version = global.Bun.version.split('.');\n return version.length < 3 || version[0] === '0' && (version[1] < 3 || version[1] === '3' && version[2] === '0');\n})();\n\n// IE9- / Bun 0.3.0- setTimeout / setInterval / setImmediate additional parameters fix\n// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers\n// https://github.com/oven-sh/bun/issues/1633\nmodule.exports = function (scheduler, hasTimeArg) {\n var firstParamIndex = hasTimeArg ? 2 : 1;\n return WRAP ? function (handler, timeout /* , ...arguments */) {\n var boundArgs = validateArgumentsLength(arguments.length, 1) > firstParamIndex;\n var fn = isCallable(handler) ? handler : Function(handler);\n var params = boundArgs ? arraySlice(arguments, firstParamIndex) : [];\n var callback = boundArgs ? function () {\n apply(fn, this, params);\n } : fn;\n return hasTimeArg ? scheduler(callback, timeout) : scheduler(callback);\n } : scheduler;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar schedulersFix = require('../internals/schedulers-fix');\n\nvar setInterval = schedulersFix(global.setInterval, true);\n\n// Bun / IE9- setInterval additional parameters fix\n// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval\n$({ global: true, bind: true, forced: global.setInterval !== setInterval }, {\n setInterval: setInterval\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar schedulersFix = require('../internals/schedulers-fix');\n\nvar setTimeout = schedulersFix(global.setTimeout, true);\n\n// Bun / IE9- setTimeout additional parameters fix\n// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout\n$({ global: true, bind: true, forced: global.setTimeout !== setTimeout }, {\n setTimeout: setTimeout\n});\n","'use strict';\nrequire('../modules/web.timers');\nvar path = require('../internals/path');\n\nmodule.exports = path.setTimeout;\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.fill` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = lengthOfArrayLike(O);\n var argumentsLength = arguments.length;\n var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n var end = argumentsLength > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar fill = require('../internals/array-fill');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.fill` method\n// https://tc39.es/ecma262/#sec-array.prototype.fill\n$({ target: 'Array', proto: true }, {\n fill: fill\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('fill');\n","'use strict';\nrequire('../../../modules/es.array.fill');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').fill;\n","/*! Hammer.JS - v2.0.17-rc - 2019-12-16\n * http://naver.github.io/egjs\n *\n * Forked By Naver egjs\n * Copyright (c) hammerjs\n * Licensed under the MIT license */\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\n/**\n * @private\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\n\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\nvar assign$1 = assign;\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = typeof document === \"undefined\" ? {\n style: {}\n} : document.createElement('div');\nvar TYPE_FUNCTION = 'function';\nvar round = Math.round,\n abs = Math.abs;\nvar now = Date.now;\n\n/**\n * @private\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\n\nfunction prefixed(obj, property) {\n var prefix;\n var prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n var i = 0;\n\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = prefix ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n\n i++;\n }\n\n return undefined;\n}\n\n/* eslint-disable no-new-func, no-nested-ternary */\nvar win;\n\nif (typeof window === \"undefined\") {\n // window is undefined in node.js\n win = {};\n} else {\n win = window;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n\n var touchMap = {};\n var cssSupports = win.CSS && win.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function (val) {\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n return touchMap[val] = cssSupports ? win.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\n\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\nvar SUPPORT_TOUCH = 'ontouchstart' in win;\nvar SUPPORT_POINTER_EVENTS = prefixed(win, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\nvar COMPUTE_INTERVAL = 25;\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * @private\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * @private\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\n\nfunction boolOrFn(val, args) {\n if (typeof val === TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n\n return val;\n}\n\n/**\n * @private\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * @private\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\n\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n } // pan-x OR pan-y\n\n\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n } // manipulation\n\n\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\n/**\n * @private\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\n\nvar TouchAction =\n/*#__PURE__*/\nfunction () {\n function TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n }\n /**\n * @private\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n\n\n var _proto = TouchAction.prototype;\n\n _proto.set = function set(value) {\n // find out the touch-action by the event handlers\n if (value === TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n\n this.actions = value.toLowerCase().trim();\n };\n /**\n * @private\n * just re-set the touchAction value\n */\n\n\n _proto.update = function update() {\n this.set(this.manager.options.touchAction);\n };\n /**\n * @private\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n\n\n _proto.compute = function compute() {\n var actions = [];\n each(this.manager.recognizers, function (recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n };\n /**\n * @private\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n\n\n _proto.preventDefaults = function preventDefaults(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection; // if the touch action did prevented once this session\n\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n // do not prevent defaults if this is a tap gesture\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone || hasPanY && direction & DIRECTION_HORIZONTAL || hasPanX && direction & DIRECTION_VERTICAL) {\n return this.preventSrc(srcEvent);\n }\n };\n /**\n * @private\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n\n\n _proto.preventSrc = function preventSrc(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n };\n\n return TouchAction;\n}();\n\n/**\n * @private\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node === parent) {\n return true;\n }\n\n node = node.parentNode;\n }\n\n return false;\n}\n\n/**\n * @private\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\n\nfunction getCenter(pointers) {\n var pointersLength = pointers.length; // no need to loop when only one touch\n\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0;\n var y = 0;\n var i = 0;\n\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * @private\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\n\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * @private\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\n\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n\n var x = p2[props[0]] - p1[props[0]];\n var y = p2[props[1]] - p1[props[1]];\n return Math.sqrt(x * x + y * y);\n}\n\n/**\n * @private\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\n\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n\n var x = p2[props[0]] - p1[props[0]];\n var y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * @private\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\n\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center; // let { offsetDelta:offset = {}, prevDelta = {}, prevInput = {} } = session;\n // jscs throwing error on defalut destructured values and without defaults tests fail\n\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * @private\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * @private\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\n\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\n/**\n * @private\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\n\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * @private\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\n\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input;\n var deltaTime = input.timeStamp - last.timeStamp;\n var velocity;\n var velocityX;\n var velocityY;\n var direction;\n\n if (input.eventType !== INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = abs(v.x) > abs(v.y) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n* @private\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\n\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length; // store the first input to calculate the distance and direction\n\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n } // to compute scale and rotation we need to store the multiple touches\n\n\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput,\n firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = abs(overallVelocity.x) > abs(overallVelocity.y) ? overallVelocity.x : overallVelocity.y;\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n input.maxPointers = !session.prevInput ? input.pointers.length : input.pointers.length > session.prevInput.maxPointers ? input.pointers.length : session.prevInput.maxPointers;\n computeIntervalInputData(session, input); // find the correct target\n\n var target = manager.element;\n var srcEvent = input.srcEvent;\n var srcEventTarget;\n\n if (srcEvent.composedPath) {\n srcEventTarget = srcEvent.composedPath()[0];\n } else if (srcEvent.path) {\n srcEventTarget = srcEvent.path[0];\n } else {\n srcEventTarget = srcEvent.target;\n }\n\n if (hasParent(srcEventTarget, target)) {\n target = srcEventTarget;\n }\n\n input.target = target;\n}\n\n/**\n * @private\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\n\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = eventType & INPUT_START && pointersLen - changedPointersLen === 0;\n var isFinal = eventType & (INPUT_END | INPUT_CANCEL) && pointersLen - changedPointersLen === 0;\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n } // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n\n\n input.eventType = eventType; // compute scale, rotation etc\n\n computeInputData(manager, input); // emit secret event\n\n manager.emit('hammer.input', input);\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * @private\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * @private\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function (type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * @private\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function (type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * @private\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return doc.defaultView || doc.parentWindow || window;\n}\n\n/**\n * @private\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\n\nvar Input =\n/*#__PURE__*/\nfunction () {\n function Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget; // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n\n this.domHandler = function (ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n }\n /**\n * @private\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n\n\n var _proto = Input.prototype;\n\n _proto.handler = function handler() {};\n /**\n * @private\n * bind the events\n */\n\n\n _proto.init = function init() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n };\n /**\n * @private\n * unbind the events\n */\n\n\n _proto.destroy = function destroy() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n };\n\n return Input;\n}();\n\n/**\n * @private\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n\n while (i < src.length) {\n if (findByKey && src[i][findByKey] == find || !findByKey && src[i] === find) {\n // do not use === here, test fails\n return i;\n }\n\n i++;\n }\n\n return -1;\n }\n}\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n}; // in IE10 the pointer types is defined as an enum\n\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n\n};\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; // IE10 has prefixed support, and case-sensitive\n\nif (win.MSPointerEvent && !win.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n/**\n * @private\n * Pointer events input\n * @constructor\n * @extends Input\n */\n\n\nvar PointerEventInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(PointerEventInput, _Input);\n\n function PointerEventInput() {\n var _this;\n\n var proto = PointerEventInput.prototype;\n proto.evEl = POINTER_ELEMENT_EVENTS;\n proto.evWin = POINTER_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.store = _this.manager.session.pointerEvents = [];\n return _this;\n }\n /**\n * @private\n * handle mouse events\n * @param {Object} ev\n */\n\n\n var _proto = PointerEventInput.prototype;\n\n _proto.handler = function handler(ev) {\n var store = this.store;\n var removePointer = false;\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n var isTouch = pointerType === INPUT_TYPE_TOUCH; // get index of the event in the store\n\n var storeIndex = inArray(store, ev.pointerId, 'pointerId'); // start and mouse must be down\n\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n } // it not found, so the pointer hasn't been down (so it's probably a hover)\n\n\n if (storeIndex < 0) {\n return;\n } // update the event in the store\n\n\n store[storeIndex] = ev;\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n };\n\n return PointerEventInput;\n}(Input);\n\n/**\n * @private\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * @private\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\n\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function (a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n/**\n * @private\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\n\nvar TouchInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(TouchInput, _Input);\n\n function TouchInput() {\n var _this;\n\n TouchInput.prototype.evTarget = TOUCH_TARGET_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.targetIds = {}; // this.evTarget = TOUCH_TARGET_EVENTS;\n\n return _this;\n }\n\n var _proto = TouchInput.prototype;\n\n _proto.handler = function handler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n };\n\n return TouchInput;\n}(Input);\n\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds; // when there is only one touch, the process can be simplified\n\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i;\n var targetTouches;\n var changedTouches = toArray(ev.changedTouches);\n var changedTargetTouches = [];\n var target = this.target; // get target touches from touches\n\n targetTouches = allTouches.filter(function (touch) {\n return hasParent(touch.target, target);\n }); // collect touches\n\n if (type === INPUT_START) {\n i = 0;\n\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n } // filter changed touches to only contain touches that exist in the collected target ids\n\n\n i = 0;\n\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n } // cleanup removed touches\n\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [// merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), changedTargetTouches];\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n/**\n * @private\n * Mouse events input\n * @constructor\n * @extends Input\n */\n\nvar MouseInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(MouseInput, _Input);\n\n function MouseInput() {\n var _this;\n\n var proto = MouseInput.prototype;\n proto.evEl = MOUSE_ELEMENT_EVENTS;\n proto.evWin = MOUSE_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.pressed = false; // mousedown state\n\n return _this;\n }\n /**\n * @private\n * handle mouse events\n * @param {Object} ev\n */\n\n\n var _proto = MouseInput.prototype;\n\n _proto.handler = function handler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type]; // on start we want to have the left mouse button down\n\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n } // mouse must be down\n\n\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n };\n\n return MouseInput;\n}(Input);\n\n/**\n * @private\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction setLastTouch(eventData) {\n var _eventData$changedPoi = eventData.changedPointers,\n touch = _eventData$changedPoi[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {\n x: touch.clientX,\n y: touch.clientY\n };\n var lts = this.lastTouches;\n this.lastTouches.push(lastTouch);\n\n var removeLastTouch = function removeLastTouch() {\n var i = lts.indexOf(lastTouch);\n\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX;\n var y = eventData.srcEvent.clientY;\n\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x);\n var dy = Math.abs(y - t.y);\n\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n\n return false;\n}\n\nvar TouchMouseInput =\n/*#__PURE__*/\nfunction () {\n var TouchMouseInput =\n /*#__PURE__*/\n function (_Input) {\n _inheritsLoose(TouchMouseInput, _Input);\n\n function TouchMouseInput(_manager, callback) {\n var _this;\n\n _this = _Input.call(this, _manager, callback) || this;\n\n _this.handler = function (manager, inputEvent, inputData) {\n var isTouch = inputData.pointerType === INPUT_TYPE_TOUCH;\n var isMouse = inputData.pointerType === INPUT_TYPE_MOUSE;\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n } // when we're in a touch event, record touches to de-dupe synthetic mouse event\n\n\n if (isTouch) {\n recordTouches.call(_assertThisInitialized(_assertThisInitialized(_this)), inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(_assertThisInitialized(_assertThisInitialized(_this)), inputData)) {\n return;\n }\n\n _this.callback(manager, inputEvent, inputData);\n };\n\n _this.touch = new TouchInput(_this.manager, _this.handler);\n _this.mouse = new MouseInput(_this.manager, _this.handler);\n _this.primaryTouch = null;\n _this.lastTouches = [];\n return _this;\n }\n /**\n * @private\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n\n\n var _proto = TouchMouseInput.prototype;\n\n /**\n * @private\n * remove the event listeners\n */\n _proto.destroy = function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n };\n\n return TouchMouseInput;\n }(Input);\n\n return TouchMouseInput;\n}();\n\n/**\n * @private\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\n\nfunction createInputInstance(manager) {\n var Type; // let inputClass = manager.options.inputClass;\n\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n\n return new Type(manager, inputHandler);\n}\n\n/**\n * @private\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\n\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n\n return false;\n}\n\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * @private\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * @private\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n\n if (manager) {\n return manager.get(otherRecognizer);\n }\n\n return otherRecognizer;\n}\n\n/**\n * @private\n * get a usable string, used as event postfix\n * @param {constant} state\n * @returns {String} state\n */\n\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n\n return '';\n}\n\n/**\n * @private\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\n\n/**\n * @private\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\n\nvar Recognizer =\n/*#__PURE__*/\nfunction () {\n function Recognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n this.options = _extends({\n enable: true\n }, options);\n this.id = uniqueId();\n this.manager = null; // default is enable true\n\n this.state = STATE_POSSIBLE;\n this.simultaneous = {};\n this.requireFail = [];\n }\n /**\n * @private\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n\n\n var _proto = Recognizer.prototype;\n\n _proto.set = function set(options) {\n assign$1(this.options, options); // also update the touchAction, in case something changed about the directions/enabled state\n\n this.manager && this.manager.touchAction.update();\n return this;\n };\n /**\n * @private\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.recognizeWith = function recognizeWith(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n\n return this;\n };\n /**\n * @private\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.dropRecognizeWith = function dropRecognizeWith(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n };\n /**\n * @private\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.requireFailure = function requireFailure(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n\n return this;\n };\n /**\n * @private\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.dropRequireFailure = function dropRequireFailure(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n\n return this;\n };\n /**\n * @private\n * has require failures boolean\n * @returns {boolean}\n */\n\n\n _proto.hasRequireFailures = function hasRequireFailures() {\n return this.requireFail.length > 0;\n };\n /**\n * @private\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n\n\n _proto.canRecognizeWith = function canRecognizeWith(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n };\n /**\n * @private\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n\n\n _proto.emit = function emit(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n } // 'panstart' and 'panmove'\n\n\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) {\n // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n } // panend and pancancel\n\n\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n };\n /**\n * @private\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n\n\n _proto.tryEmit = function tryEmit(input) {\n if (this.canEmit()) {\n return this.emit(input);\n } // it's failing anyway\n\n\n this.state = STATE_FAILED;\n };\n /**\n * @private\n * can we emit?\n * @returns {boolean}\n */\n\n\n _proto.canEmit = function canEmit() {\n var i = 0;\n\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n\n i++;\n }\n\n return true;\n };\n /**\n * @private\n * update the recognizer\n * @param {Object} inputData\n */\n\n\n _proto.recognize = function recognize(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign$1({}, inputData); // is is enabled and allow recognizing?\n\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n } // reset when we've reached the end\n\n\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone); // the recognizer has recognized a gesture\n // so trigger an event\n\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n };\n /**\n * @private\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {constant} STATE\n */\n\n /* jshint ignore:start */\n\n\n _proto.process = function process(inputData) {};\n /* jshint ignore:end */\n\n /**\n * @private\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n\n\n _proto.getTouchAction = function getTouchAction() {};\n /**\n * @private\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n\n\n _proto.reset = function reset() {};\n\n return Recognizer;\n}();\n\n/**\n * @private\n * A tap is recognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\n\nvar TapRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n _inheritsLoose(TapRecognizer, _Recognizer);\n\n function TapRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _Recognizer.call(this, _extends({\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300,\n // max time between the multi-tap taps\n time: 250,\n // max time of the pointer to be down (like finger on the screen)\n threshold: 9,\n // a minimal movement is ok, but keep it low\n posThreshold: 10\n }, options)) || this; // previous time and center,\n // used for tap counting\n\n _this.pTime = false;\n _this.pCenter = false;\n _this._timer = null;\n _this._input = null;\n _this.count = 0;\n return _this;\n }\n\n var _proto = TapRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_MANIPULATION];\n };\n\n _proto.process = function process(input) {\n var _this2 = this;\n\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n this.reset();\n\n if (input.eventType & INPUT_START && this.count === 0) {\n return this.failTimeout();\n } // we only allow little movement\n // and we've reached an end event, so a tap is possible\n\n\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType !== INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? input.timeStamp - this.pTime < options.interval : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input; // if tap count matches we have recognized it,\n // else it has began recognizing...\n\n var tapCount = this.count % options.taps;\n\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeout(function () {\n _this2.state = STATE_RECOGNIZED;\n\n _this2.tryEmit();\n }, options.interval);\n return STATE_BEGAN;\n }\n }\n }\n\n return STATE_FAILED;\n };\n\n _proto.failTimeout = function failTimeout() {\n var _this3 = this;\n\n this._timer = setTimeout(function () {\n _this3.state = STATE_FAILED;\n }, this.options.interval);\n return STATE_FAILED;\n };\n\n _proto.reset = function reset() {\n clearTimeout(this._timer);\n };\n\n _proto.emit = function emit() {\n if (this.state === STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n };\n\n return TapRecognizer;\n}(Recognizer);\n\n/**\n * @private\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\n\nvar AttrRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n _inheritsLoose(AttrRecognizer, _Recognizer);\n\n function AttrRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _Recognizer.call(this, _extends({\n pointers: 1\n }, options)) || this;\n }\n /**\n * @private\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n\n\n var _proto = AttrRecognizer.prototype;\n\n _proto.attrTest = function attrTest(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n };\n /**\n * @private\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n\n\n _proto.process = function process(input) {\n var state = this.state;\n var eventType = input.eventType;\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input); // on cancel input and we've recognized before, return STATE_CANCELLED\n\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n\n return state | STATE_CHANGED;\n }\n\n return STATE_FAILED;\n };\n\n return AttrRecognizer;\n}(Recognizer);\n\n/**\n * @private\n * direction cons to string\n * @param {constant} direction\n * @returns {String}\n */\n\nfunction directionStr(direction) {\n if (direction === DIRECTION_DOWN) {\n return 'down';\n } else if (direction === DIRECTION_UP) {\n return 'up';\n } else if (direction === DIRECTION_LEFT) {\n return 'left';\n } else if (direction === DIRECTION_RIGHT) {\n return 'right';\n }\n\n return '';\n}\n\n/**\n * @private\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar PanRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(PanRecognizer, _AttrRecognizer);\n\n function PanRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _AttrRecognizer.call(this, _extends({\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n }, options)) || this;\n _this.pX = null;\n _this.pY = null;\n return _this;\n }\n\n var _proto = PanRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n var direction = this.options.direction;\n var actions = [];\n\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n\n return actions;\n };\n\n _proto.directionTest = function directionTest(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY; // lock to axis?\n\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = x === 0 ? DIRECTION_NONE : x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x !== this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = y === 0 ? DIRECTION_NONE : y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y !== this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n };\n\n _proto.attrTest = function attrTest(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) && ( // replace with a super call\n this.state & STATE_BEGAN || !(this.state & STATE_BEGAN) && this.directionTest(input));\n };\n\n _proto.emit = function emit(input) {\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n\n _AttrRecognizer.prototype.emit.call(this, input);\n };\n\n return PanRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar SwipeRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(SwipeRecognizer, _AttrRecognizer);\n\n function SwipeRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n }, options)) || this;\n }\n\n var _proto = SwipeRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n };\n\n _proto.attrTest = function attrTest(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return _AttrRecognizer.prototype.attrTest.call(this, input) && direction & input.offsetDirection && input.distance > this.options.threshold && input.maxPointers === this.options.pointers && abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n };\n\n _proto.emit = function emit(input) {\n var direction = directionStr(input.offsetDirection);\n\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n };\n\n return SwipeRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar PinchRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(PinchRecognizer, _AttrRecognizer);\n\n function PinchRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'pinch',\n threshold: 0,\n pointers: 2\n }, options)) || this;\n }\n\n var _proto = PinchRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_NONE];\n };\n\n _proto.attrTest = function attrTest(input) {\n return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n };\n\n _proto.emit = function emit(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n\n _AttrRecognizer.prototype.emit.call(this, input);\n };\n\n return PinchRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar RotateRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(RotateRecognizer, _AttrRecognizer);\n\n function RotateRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'rotate',\n threshold: 0,\n pointers: 2\n }, options)) || this;\n }\n\n var _proto = RotateRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_NONE];\n };\n\n _proto.attrTest = function attrTest(input) {\n return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n };\n\n return RotateRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\n\nvar PressRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n _inheritsLoose(PressRecognizer, _Recognizer);\n\n function PressRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _Recognizer.call(this, _extends({\n event: 'press',\n pointers: 1,\n time: 251,\n // minimal time of the pointer to be pressed\n threshold: 9\n }, options)) || this;\n _this._timer = null;\n _this._input = null;\n return _this;\n }\n\n var _proto = PressRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_AUTO];\n };\n\n _proto.process = function process(input) {\n var _this2 = this;\n\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n this._input = input; // we only allow little movement\n // and we've reached an end event, so a tap is possible\n\n if (!validMovement || !validPointers || input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeout(function () {\n _this2.state = STATE_RECOGNIZED;\n\n _this2.tryEmit();\n }, options.time);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n\n return STATE_FAILED;\n };\n\n _proto.reset = function reset() {\n clearTimeout(this._timer);\n };\n\n _proto.emit = function emit(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && input.eventType & INPUT_END) {\n this.manager.emit(this.options.event + \"up\", input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n };\n\n return PressRecognizer;\n}(Recognizer);\n\nvar defaults = {\n /**\n * @private\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * @private\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @private\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * @private\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * @private\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * @private\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * @private\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: \"none\",\n\n /**\n * @private\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: \"none\",\n\n /**\n * @private\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: \"none\",\n\n /**\n * @private\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: \"none\",\n\n /**\n * @private\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: \"none\",\n\n /**\n * @private\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: \"rgba(0,0,0,0)\"\n }\n};\n/**\n * @private\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * This is separated with other defaults because of tree-shaking.\n * @type {Array}\n */\n\nvar preset = [[RotateRecognizer, {\n enable: false\n}], [PinchRecognizer, {\n enable: false\n}, ['rotate']], [SwipeRecognizer, {\n direction: DIRECTION_HORIZONTAL\n}], [PanRecognizer, {\n direction: DIRECTION_HORIZONTAL\n}, ['swipe']], [TapRecognizer], [TapRecognizer, {\n event: 'doubletap',\n taps: 2\n}, ['tap']], [PressRecognizer]];\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n/**\n * @private\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\n\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n\n if (!element.style) {\n return;\n }\n\n var prop;\n each(manager.options.cssProps, function (value, name) {\n prop = prefixed(element.style, name);\n\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || \"\";\n }\n });\n\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n/**\n * @private\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\n\n\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent(\"Event\");\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n/**\n* @private\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\n\nvar Manager =\n/*#__PURE__*/\nfunction () {\n function Manager(element, options) {\n var _this = this;\n\n this.options = assign$1({}, defaults, options || {});\n this.options.inputTarget = this.options.inputTarget || element;\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n toggleCssProps(this, true);\n each(this.options.recognizers, function (item) {\n var recognizer = _this.add(new item[0](item[1]));\n\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n }\n /**\n * @private\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n\n\n var _proto = Manager.prototype;\n\n _proto.set = function set(options) {\n assign$1(this.options, options); // Options that need a little more setup\n\n if (options.touchAction) {\n this.touchAction.update();\n }\n\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n\n return this;\n };\n /**\n * @private\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n\n\n _proto.stop = function stop(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n };\n /**\n * @private\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n\n\n _proto.recognize = function recognize(inputData) {\n var session = this.session;\n\n if (session.stopped) {\n return;\n } // run the touch-action polyfill\n\n\n this.touchAction.preventDefaults(inputData);\n var recognizer;\n var recognizers = this.recognizers; // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n\n var curRecognizer = session.curRecognizer; // reset when the last recognizer is recognized\n // or when we're in a new session\n\n if (!curRecognizer || curRecognizer && curRecognizer.state & STATE_RECOGNIZED) {\n session.curRecognizer = null;\n curRecognizer = null;\n }\n\n var i = 0;\n\n while (i < recognizers.length) {\n recognizer = recognizers[i]; // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer === curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) {\n // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n } // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n\n\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n session.curRecognizer = recognizer;\n curRecognizer = recognizer;\n }\n\n i++;\n }\n };\n /**\n * @private\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n\n\n _proto.get = function get(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event === recognizer) {\n return recognizers[i];\n }\n }\n\n return null;\n };\n /**\n * @private add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n\n\n _proto.add = function add(recognizer) {\n if (invokeArrayArg(recognizer, \"add\", this)) {\n return this;\n } // remove existing\n\n\n var existing = this.get(recognizer.options.event);\n\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n this.touchAction.update();\n return recognizer;\n };\n /**\n * @private\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n\n\n _proto.remove = function remove(recognizer) {\n if (invokeArrayArg(recognizer, \"remove\", this)) {\n return this;\n }\n\n var targetRecognizer = this.get(recognizer); // let's make sure this recognizer exists\n\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, targetRecognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n };\n /**\n * @private\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n\n\n _proto.on = function on(events, handler) {\n if (events === undefined || handler === undefined) {\n return this;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function (event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n };\n /**\n * @private unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n\n\n _proto.off = function off(events, handler) {\n if (events === undefined) {\n return this;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function (event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n };\n /**\n * @private emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n\n\n _proto.emit = function emit(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n } // no handlers, so skip it all\n\n\n var handlers = this.handlers[event] && this.handlers[event].slice();\n\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n\n data.preventDefault = function () {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n };\n /**\n * @private\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n\n\n _proto.destroy = function destroy() {\n this.element && toggleCssProps(this, false);\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n };\n\n return Manager;\n}();\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n/**\n * @private\n * Touch events input\n * @constructor\n * @extends Input\n */\n\nvar SingleTouchInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(SingleTouchInput, _Input);\n\n function SingleTouchInput() {\n var _this;\n\n var proto = SingleTouchInput.prototype;\n proto.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n proto.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.started = false;\n return _this;\n }\n\n var _proto = SingleTouchInput.prototype;\n\n _proto.handler = function handler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; // should we handle the touch events?\n\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type); // when done, reset the started state\n\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n };\n\n return SingleTouchInput;\n}(Input);\n\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\n/**\n * @private\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = \"DEPRECATED METHOD: \" + name + \"\\n\" + message + \" AT \\n\";\n return function () {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '').replace(/^\\s+at\\s+/gm, '').replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n var log = window.console && (window.console.warn || window.console.log);\n\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n\n return method.apply(this, arguments);\n };\n}\n\n/**\n * @private\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\n\nvar extend = deprecate(function (dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n\n while (i < keys.length) {\n if (!merge || merge && dest[keys[i]] === undefined) {\n dest[keys[i]] = src[keys[i]];\n }\n\n i++;\n }\n\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * @private\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\n\nvar merge = deprecate(function (dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * @private\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\n\nfunction inherit(child, base, properties) {\n var baseP = base.prototype;\n var childP;\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign$1(childP, properties);\n }\n}\n\n/**\n * @private\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * @private\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\nvar Hammer =\n/*#__PURE__*/\nfunction () {\n var Hammer =\n /**\n * @private\n * @const {string}\n */\n function Hammer(element, options) {\n if (options === void 0) {\n options = {};\n }\n\n return new Manager(element, _extends({\n recognizers: preset.concat()\n }, options));\n };\n\n Hammer.VERSION = \"2.0.17-rc\";\n Hammer.DIRECTION_ALL = DIRECTION_ALL;\n Hammer.DIRECTION_DOWN = DIRECTION_DOWN;\n Hammer.DIRECTION_LEFT = DIRECTION_LEFT;\n Hammer.DIRECTION_RIGHT = DIRECTION_RIGHT;\n Hammer.DIRECTION_UP = DIRECTION_UP;\n Hammer.DIRECTION_HORIZONTAL = DIRECTION_HORIZONTAL;\n Hammer.DIRECTION_VERTICAL = DIRECTION_VERTICAL;\n Hammer.DIRECTION_NONE = DIRECTION_NONE;\n Hammer.DIRECTION_DOWN = DIRECTION_DOWN;\n Hammer.INPUT_START = INPUT_START;\n Hammer.INPUT_MOVE = INPUT_MOVE;\n Hammer.INPUT_END = INPUT_END;\n Hammer.INPUT_CANCEL = INPUT_CANCEL;\n Hammer.STATE_POSSIBLE = STATE_POSSIBLE;\n Hammer.STATE_BEGAN = STATE_BEGAN;\n Hammer.STATE_CHANGED = STATE_CHANGED;\n Hammer.STATE_ENDED = STATE_ENDED;\n Hammer.STATE_RECOGNIZED = STATE_RECOGNIZED;\n Hammer.STATE_CANCELLED = STATE_CANCELLED;\n Hammer.STATE_FAILED = STATE_FAILED;\n Hammer.Manager = Manager;\n Hammer.Input = Input;\n Hammer.TouchAction = TouchAction;\n Hammer.TouchInput = TouchInput;\n Hammer.MouseInput = MouseInput;\n Hammer.PointerEventInput = PointerEventInput;\n Hammer.TouchMouseInput = TouchMouseInput;\n Hammer.SingleTouchInput = SingleTouchInput;\n Hammer.Recognizer = Recognizer;\n Hammer.AttrRecognizer = AttrRecognizer;\n Hammer.Tap = TapRecognizer;\n Hammer.Pan = PanRecognizer;\n Hammer.Swipe = SwipeRecognizer;\n Hammer.Pinch = PinchRecognizer;\n Hammer.Rotate = RotateRecognizer;\n Hammer.Press = PressRecognizer;\n Hammer.on = addEventListeners;\n Hammer.off = removeEventListeners;\n Hammer.each = each;\n Hammer.merge = merge;\n Hammer.extend = extend;\n Hammer.bindFn = bindFn;\n Hammer.assign = assign$1;\n Hammer.inherit = inherit;\n Hammer.bindFn = bindFn;\n Hammer.prefixed = prefixed;\n Hammer.toArray = toArray;\n Hammer.inArray = inArray;\n Hammer.uniqueArray = uniqueArray;\n Hammer.splitStr = splitStr;\n Hammer.boolOrFn = boolOrFn;\n Hammer.hasParent = hasParent;\n Hammer.addEventListeners = addEventListeners;\n Hammer.removeEventListeners = removeEventListeners;\n Hammer.defaults = assign$1({}, defaults, {\n preset: preset\n });\n return Hammer;\n}();\n\n// style loader but by script tag, not by the loader.\n\nvar defaults$1 = Hammer.defaults;\n\nexport default Hammer;\nexport { INPUT_START, INPUT_MOVE, INPUT_END, INPUT_CANCEL, STATE_POSSIBLE, STATE_BEGAN, STATE_CHANGED, STATE_ENDED, STATE_RECOGNIZED, STATE_CANCELLED, STATE_FAILED, DIRECTION_NONE, DIRECTION_LEFT, DIRECTION_RIGHT, DIRECTION_UP, DIRECTION_DOWN, DIRECTION_HORIZONTAL, DIRECTION_VERTICAL, DIRECTION_ALL, Manager, Input, TouchAction, TouchInput, MouseInput, PointerEventInput, TouchMouseInput, SingleTouchInput, Recognizer, AttrRecognizer, TapRecognizer as Tap, PanRecognizer as Pan, SwipeRecognizer as Swipe, PinchRecognizer as Pinch, RotateRecognizer as Rotate, PressRecognizer as Press, addEventListeners as on, removeEventListeners as off, each, merge, extend, assign$1 as assign, inherit, bindFn, prefixed, toArray, inArray, uniqueArray, splitStr, boolOrFn, hasParent, addEventListeners, removeEventListeners, defaults$1 as defaults };\n//# sourceMappingURL=hammer.esm.js.map\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/fill');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.fill;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.fill) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/fill');\n\nmodule.exports = parent;\n","/**\n * vis-util\n * https://github.com/visjs/vis-util\n *\n * utilitie collection for visjs\n *\n * @version 5.0.5\n * @date 2023-10-03T18:47:58.061Z\n *\n * @copyright (c) 2011-2017 Almende B.V, http://almende.com\n * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n *\n * @license\n * vis.js is dual licensed under both\n *\n * 1. The Apache 2.0 License\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * and\n *\n * 2. The MIT License\n * http://opensource.org/licenses/MIT\n *\n * vis.js may be distributed under either license.\n */\n\nimport Emitter from 'component-emitter';\nimport RealHammer from '@egjs/hammerjs';\n\n/**\r\n * Use this symbol to delete properies in deepObjectAssign.\r\n */\r\nconst DELETE = Symbol(\"DELETE\");\r\n/**\r\n * Pure version of deepObjectAssign, it doesn't modify any of it's arguments.\r\n *\r\n * @param base - The base object that fullfils the whole interface T.\r\n * @param updates - Updates that may change or delete props.\r\n * @returns A brand new instance with all the supplied objects deeply merged.\r\n */\r\nfunction pureDeepObjectAssign(base, ...updates) {\r\n return deepObjectAssign({}, base, ...updates);\r\n}\r\n/**\r\n * Deep version of object assign with additional deleting by the DELETE symbol.\r\n *\r\n * @param values - Objects to be deeply merged.\r\n * @returns The first object from values.\r\n */\r\nfunction deepObjectAssign(...values) {\r\n const merged = deepObjectAssignNonentry(...values);\r\n stripDelete(merged);\r\n return merged;\r\n}\r\n/**\r\n * Deep version of object assign with additional deleting by the DELETE symbol.\r\n *\r\n * @remarks\r\n * This doesn't strip the DELETE symbols so they may end up in the final object.\r\n * @param values - Objects to be deeply merged.\r\n * @returns The first object from values.\r\n */\r\nfunction deepObjectAssignNonentry(...values) {\r\n if (values.length < 2) {\r\n return values[0];\r\n }\r\n else if (values.length > 2) {\r\n return deepObjectAssignNonentry(deepObjectAssign(values[0], values[1]), ...values.slice(2));\r\n }\r\n const a = values[0];\r\n const b = values[1];\r\n if (a instanceof Date && b instanceof Date) {\r\n a.setTime(b.getTime());\r\n return a;\r\n }\r\n for (const prop of Reflect.ownKeys(b)) {\r\n if (!Object.prototype.propertyIsEnumerable.call(b, prop)) ;\r\n else if (b[prop] === DELETE) {\r\n delete a[prop];\r\n }\r\n else if (a[prop] !== null &&\r\n b[prop] !== null &&\r\n typeof a[prop] === \"object\" &&\r\n typeof b[prop] === \"object\" &&\r\n !Array.isArray(a[prop]) &&\r\n !Array.isArray(b[prop])) {\r\n a[prop] = deepObjectAssignNonentry(a[prop], b[prop]);\r\n }\r\n else {\r\n a[prop] = clone(b[prop]);\r\n }\r\n }\r\n return a;\r\n}\r\n/**\r\n * Deep clone given object or array. In case of primitive simply return.\r\n *\r\n * @param a - Anything.\r\n * @returns Deep cloned object/array or unchanged a.\r\n */\r\nfunction clone(a) {\r\n if (Array.isArray(a)) {\r\n return a.map((value) => clone(value));\r\n }\r\n else if (typeof a === \"object\" && a !== null) {\r\n if (a instanceof Date) {\r\n return new Date(a.getTime());\r\n }\r\n return deepObjectAssignNonentry({}, a);\r\n }\r\n else {\r\n return a;\r\n }\r\n}\r\n/**\r\n * Strip DELETE from given object.\r\n *\r\n * @param a - Object which may contain DELETE but won't after this is executed.\r\n */\r\nfunction stripDelete(a) {\r\n for (const prop of Object.keys(a)) {\r\n if (a[prop] === DELETE) {\r\n delete a[prop];\r\n }\r\n else if (typeof a[prop] === \"object\" && a[prop] !== null) {\r\n stripDelete(a[prop]);\r\n }\r\n }\r\n}\n\n/**\r\n * Seedable, fast and reasonably good (not crypto but more than okay for our\r\n * needs) random number generator.\r\n *\r\n * @remarks\r\n * Adapted from {@link https://web.archive.org/web/20110429100736/http://baagoe.com:80/en/RandomMusings/javascript}.\r\n * Original algorithm created by Johannes Baagøe \\ in 2010.\r\n */\r\n/**\r\n * Create a seeded pseudo random generator based on Alea by Johannes Baagøe.\r\n *\r\n * @param seed - All supplied arguments will be used as a seed. In case nothing\r\n * is supplied the current time will be used to seed the generator.\r\n * @returns A ready to use seeded generator.\r\n */\r\nfunction Alea(...seed) {\r\n return AleaImplementation(seed.length ? seed : [Date.now()]);\r\n}\r\n/**\r\n * An implementation of [[Alea]] without user input validation.\r\n *\r\n * @param seed - The data that will be used to seed the generator.\r\n * @returns A ready to use seeded generator.\r\n */\r\nfunction AleaImplementation(seed) {\r\n let [s0, s1, s2] = mashSeed(seed);\r\n let c = 1;\r\n const random = () => {\r\n const t = 2091639 * s0 + c * 2.3283064365386963e-10; // 2^-32\r\n s0 = s1;\r\n s1 = s2;\r\n return (s2 = t - (c = t | 0));\r\n };\r\n random.uint32 = () => random() * 0x100000000; // 2^32\r\n random.fract53 = () => random() + ((random() * 0x200000) | 0) * 1.1102230246251565e-16; // 2^-53\r\n random.algorithm = \"Alea\";\r\n random.seed = seed;\r\n random.version = \"0.9\";\r\n return random;\r\n}\r\n/**\r\n * Turn arbitrary data into values [[AleaImplementation]] can use to generate\r\n * random numbers.\r\n *\r\n * @param seed - Arbitrary data that will be used as the seed.\r\n * @returns Three numbers to use as initial values for [[AleaImplementation]].\r\n */\r\nfunction mashSeed(...seed) {\r\n const mash = Mash();\r\n let s0 = mash(\" \");\r\n let s1 = mash(\" \");\r\n let s2 = mash(\" \");\r\n for (let i = 0; i < seed.length; i++) {\r\n s0 -= mash(seed[i]);\r\n if (s0 < 0) {\r\n s0 += 1;\r\n }\r\n s1 -= mash(seed[i]);\r\n if (s1 < 0) {\r\n s1 += 1;\r\n }\r\n s2 -= mash(seed[i]);\r\n if (s2 < 0) {\r\n s2 += 1;\r\n }\r\n }\r\n return [s0, s1, s2];\r\n}\r\n/**\r\n * Create a new mash function.\r\n *\r\n * @returns A nonpure function that takes arbitrary [[Mashable]] data and turns\r\n * them into numbers.\r\n */\r\nfunction Mash() {\r\n let n = 0xefc8249d;\r\n return function (data) {\r\n const string = data.toString();\r\n for (let i = 0; i < string.length; i++) {\r\n n += string.charCodeAt(i);\r\n let h = 0.02519603282416938 * n;\r\n n = h >>> 0;\r\n h -= n;\r\n h *= n;\r\n n = h >>> 0;\r\n h -= n;\r\n n += h * 0x100000000; // 2^32\r\n }\r\n return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\r\n };\r\n}\n\n/**\n * Setup a mock hammer.js object, for unit testing.\n *\n * Inspiration: https://github.com/uber/deck.gl/pull/658\n *\n * @returns {{on: noop, off: noop, destroy: noop, emit: noop, get: get}}\n */\nfunction hammerMock() {\n const noop = () => {};\n\n return {\n on: noop,\n off: noop,\n destroy: noop,\n emit: noop,\n\n get() {\n return {\n set: noop,\n };\n },\n };\n}\n\nconst Hammer$1 =\n typeof window !== \"undefined\"\n ? window.Hammer || RealHammer\n : function () {\n // hammer.js is only available in a browser, not in node.js. Replacing it with a mock object.\n return hammerMock();\n };\n\n/**\n * Turn an element into an clickToUse element.\n * When not active, the element has a transparent overlay. When the overlay is\n * clicked, the mode is changed to active.\n * When active, the element is displayed with a blue border around it, and\n * the interactive contents of the element can be used. When clicked outside\n * the element, the elements mode is changed to inactive.\n *\n * @param {Element} container\n * @class Activator\n */\nfunction Activator$1(container) {\n this._cleanupQueue = [];\n\n this.active = false;\n\n this._dom = {\n container,\n overlay: document.createElement(\"div\"),\n };\n\n this._dom.overlay.classList.add(\"vis-overlay\");\n\n this._dom.container.appendChild(this._dom.overlay);\n this._cleanupQueue.push(() => {\n this._dom.overlay.parentNode.removeChild(this._dom.overlay);\n });\n\n const hammer = Hammer$1(this._dom.overlay);\n hammer.on(\"tap\", this._onTapOverlay.bind(this));\n this._cleanupQueue.push(() => {\n hammer.destroy();\n // FIXME: cleaning up hammer instances doesn't work (Timeline not removed\n // from memory)\n });\n\n // block all touch events (except tap)\n const events = [\n \"tap\",\n \"doubletap\",\n \"press\",\n \"pinch\",\n \"pan\",\n \"panstart\",\n \"panmove\",\n \"panend\",\n ];\n events.forEach((event) => {\n hammer.on(event, (event) => {\n event.srcEvent.stopPropagation();\n });\n });\n\n // attach a click event to the window, in order to deactivate when clicking outside the timeline\n if (document && document.body) {\n this._onClick = (event) => {\n if (!_hasParent(event.target, container)) {\n this.deactivate();\n }\n };\n document.body.addEventListener(\"click\", this._onClick);\n this._cleanupQueue.push(() => {\n document.body.removeEventListener(\"click\", this._onClick);\n });\n }\n\n // prepare escape key listener for deactivating when active\n this._escListener = (event) => {\n if (\n \"key\" in event\n ? event.key === \"Escape\"\n : event.keyCode === 27 /* the keyCode is for IE11 */\n ) {\n this.deactivate();\n }\n };\n}\n\n// turn into an event emitter\nEmitter(Activator$1.prototype);\n\n// The currently active activator\nActivator$1.current = null;\n\n/**\n * Destroy the activator. Cleans up all created DOM and event listeners\n */\nActivator$1.prototype.destroy = function () {\n this.deactivate();\n\n for (const callback of this._cleanupQueue.splice(0).reverse()) {\n callback();\n }\n};\n\n/**\n * Activate the element\n * Overlay is hidden, element is decorated with a blue shadow border\n */\nActivator$1.prototype.activate = function () {\n // we allow only one active activator at a time\n if (Activator$1.current) {\n Activator$1.current.deactivate();\n }\n Activator$1.current = this;\n\n this.active = true;\n this._dom.overlay.style.display = \"none\";\n this._dom.container.classList.add(\"vis-active\");\n\n this.emit(\"change\");\n this.emit(\"activate\");\n\n // ugly hack: bind ESC after emitting the events, as the Network rebinds all\n // keyboard events on a 'change' event\n document.body.addEventListener(\"keydown\", this._escListener);\n};\n\n/**\n * Deactivate the element\n * Overlay is displayed on top of the element\n */\nActivator$1.prototype.deactivate = function () {\n this.active = false;\n this._dom.overlay.style.display = \"block\";\n this._dom.container.classList.remove(\"vis-active\");\n document.body.removeEventListener(\"keydown\", this._escListener);\n\n this.emit(\"change\");\n this.emit(\"deactivate\");\n};\n\n/**\n * Handle a tap event: activate the container\n *\n * @param {Event} event The event\n * @private\n */\nActivator$1.prototype._onTapOverlay = function (event) {\n // activate the container\n this.activate();\n event.srcEvent.stopPropagation();\n};\n\n/**\n * Test whether the element has the requested parent element somewhere in\n * its chain of parent nodes.\n *\n * @param {HTMLElement} element\n * @param {HTMLElement} parent\n * @returns {boolean} Returns true when the parent is found somewhere in the\n * chain of parent nodes.\n * @private\n */\nfunction _hasParent(element, parent) {\n while (element) {\n if (element === parent) {\n return true;\n }\n element = element.parentNode;\n }\n return false;\n}\n\n// utility functions\r\n// parse ASP.Net Date pattern,\r\n// for example '/Date(1198908717056)/' or '/Date(1198908717056-0700)/'\r\n// code from http://momentjs.com/\r\nconst ASPDateRegex = /^\\/?Date\\((-?\\d+)/i;\r\n// Color REs\r\nconst fullHexRE = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\r\nconst shortHexRE = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\r\nconst rgbRE = /^rgb\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *\\)$/i;\r\nconst rgbaRE = /^rgba\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *([01]|0?\\.\\d+) *\\)$/i;\r\n/**\r\n * Test whether given object is a number.\r\n *\r\n * @param value - Input value of unknown type.\r\n * @returns True if number, false otherwise.\r\n */\r\nfunction isNumber(value) {\r\n return value instanceof Number || typeof value === \"number\";\r\n}\r\n/**\r\n * Remove everything in the DOM object.\r\n *\r\n * @param DOMobject - Node whose child nodes will be recursively deleted.\r\n */\r\nfunction recursiveDOMDelete(DOMobject) {\r\n if (DOMobject) {\r\n while (DOMobject.hasChildNodes() === true) {\r\n const child = DOMobject.firstChild;\r\n if (child) {\r\n recursiveDOMDelete(child);\r\n DOMobject.removeChild(child);\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Test whether given object is a string.\r\n *\r\n * @param value - Input value of unknown type.\r\n * @returns True if string, false otherwise.\r\n */\r\nfunction isString(value) {\r\n return value instanceof String || typeof value === \"string\";\r\n}\r\n/**\r\n * Test whether given object is a object (not primitive or null).\r\n *\r\n * @param value - Input value of unknown type.\r\n * @returns True if not null object, false otherwise.\r\n */\r\nfunction isObject(value) {\r\n return typeof value === \"object\" && value !== null;\r\n}\r\n/**\r\n * Test whether given object is a Date, or a String containing a Date.\r\n *\r\n * @param value - Input value of unknown type.\r\n * @returns True if Date instance or string date representation, false otherwise.\r\n */\r\nfunction isDate(value) {\r\n if (value instanceof Date) {\r\n return true;\r\n }\r\n else if (isString(value)) {\r\n // test whether this string contains a date\r\n const match = ASPDateRegex.exec(value);\r\n if (match) {\r\n return true;\r\n }\r\n else if (!isNaN(Date.parse(value))) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n/**\r\n * Copy property from b to a if property present in a.\r\n * If property in b explicitly set to null, delete it if `allowDeletion` set.\r\n *\r\n * Internal helper routine, should not be exported. Not added to `exports` for that reason.\r\n *\r\n * @param a - Target object.\r\n * @param b - Source object.\r\n * @param prop - Name of property to copy from b to a.\r\n * @param allowDeletion - If true, delete property in a if explicitly set to null in b.\r\n */\r\nfunction copyOrDelete(a, b, prop, allowDeletion) {\r\n let doDeletion = false;\r\n if (allowDeletion === true) {\r\n doDeletion = b[prop] === null && a[prop] !== undefined;\r\n }\r\n if (doDeletion) {\r\n delete a[prop];\r\n }\r\n else {\r\n a[prop] = b[prop]; // Remember, this is a reference copy!\r\n }\r\n}\r\n/**\r\n * Fill an object with a possibly partially defined other object.\r\n *\r\n * Only copies values for the properties already present in a.\r\n * That means an object is not created on a property if only the b object has it.\r\n *\r\n * @param a - The object that will have it's properties updated.\r\n * @param b - The object with property updates.\r\n * @param allowDeletion - If true, delete properties in a that are explicitly set to null in b.\r\n */\r\nfunction fillIfDefined(a, b, allowDeletion = false) {\r\n // NOTE: iteration of properties of a\r\n // NOTE: prototype properties iterated over as well\r\n for (const prop in a) {\r\n if (b[prop] !== undefined) {\r\n if (b[prop] === null || typeof b[prop] !== \"object\") {\r\n // Note: typeof null === 'object'\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n else {\r\n const aProp = a[prop];\r\n const bProp = b[prop];\r\n if (isObject(aProp) && isObject(bProp)) {\r\n fillIfDefined(aProp, bProp, allowDeletion);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Copy the values of all of the enumerable own properties from one or more source objects to a\r\n * target object. Returns the target object.\r\n *\r\n * @param target - The target object to copy to.\r\n * @param source - The source object from which to copy properties.\r\n * @returns The target object.\r\n */\r\nconst extend = Object.assign;\r\n/**\r\n * Extend object a with selected properties of object b or a series of objects.\r\n *\r\n * @remarks\r\n * Only properties with defined values are copied.\r\n * @param props - Properties to be copied to a.\r\n * @param a - The target.\r\n * @param others - The sources.\r\n * @returns Argument a.\r\n */\r\nfunction selectiveExtend(props, a, ...others) {\r\n if (!Array.isArray(props)) {\r\n throw new Error(\"Array with property names expected as first argument\");\r\n }\r\n for (const other of others) {\r\n for (let p = 0; p < props.length; p++) {\r\n const prop = props[p];\r\n if (other && Object.prototype.hasOwnProperty.call(other, prop)) {\r\n a[prop] = other[prop];\r\n }\r\n }\r\n }\r\n return a;\r\n}\r\n/**\r\n * Extend object a with selected properties of object b.\r\n * Only properties with defined values are copied.\r\n *\r\n * @remarks\r\n * Previous version of this routine implied that multiple source objects could\r\n * be used; however, the implementation was **wrong**. Since multiple (\\>1)\r\n * sources weren't used anywhere in the `vis.js` code, this has been removed\r\n * @param props - Names of first-level properties to copy over.\r\n * @param a - Target object.\r\n * @param b - Source object.\r\n * @param allowDeletion - If true, delete property in a if explicitly set to null in b.\r\n * @returns Argument a.\r\n */\r\nfunction selectiveDeepExtend(props, a, b, allowDeletion = false) {\r\n // TODO: add support for Arrays to deepExtend\r\n if (Array.isArray(b)) {\r\n throw new TypeError(\"Arrays are not supported by deepExtend\");\r\n }\r\n for (let p = 0; p < props.length; p++) {\r\n const prop = props[p];\r\n if (Object.prototype.hasOwnProperty.call(b, prop)) {\r\n if (b[prop] && b[prop].constructor === Object) {\r\n if (a[prop] === undefined) {\r\n a[prop] = {};\r\n }\r\n if (a[prop].constructor === Object) {\r\n deepExtend(a[prop], b[prop], false, allowDeletion);\r\n }\r\n else {\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n }\r\n else if (Array.isArray(b[prop])) {\r\n throw new TypeError(\"Arrays are not supported by deepExtend\");\r\n }\r\n else {\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n }\r\n }\r\n return a;\r\n}\r\n/**\r\n * Extend object `a` with properties of object `b`, ignoring properties which\r\n * are explicitly specified to be excluded.\r\n *\r\n * @remarks\r\n * The properties of `b` are considered for copying. Properties which are\r\n * themselves objects are are also extended. Only properties with defined\r\n * values are copied.\r\n * @param propsToExclude - Names of properties which should *not* be copied.\r\n * @param a - Object to extend.\r\n * @param b - Object to take properties from for extension.\r\n * @param allowDeletion - If true, delete properties in a that are explicitly\r\n * set to null in b.\r\n * @returns Argument a.\r\n */\r\nfunction selectiveNotDeepExtend(propsToExclude, a, b, allowDeletion = false) {\r\n // TODO: add support for Arrays to deepExtend\r\n // NOTE: array properties have an else-below; apparently, there is a problem here.\r\n if (Array.isArray(b)) {\r\n throw new TypeError(\"Arrays are not supported by deepExtend\");\r\n }\r\n for (const prop in b) {\r\n if (!Object.prototype.hasOwnProperty.call(b, prop)) {\r\n continue;\r\n } // Handle local properties only\r\n if (propsToExclude.includes(prop)) {\r\n continue;\r\n } // In exclusion list, skip\r\n if (b[prop] && b[prop].constructor === Object) {\r\n if (a[prop] === undefined) {\r\n a[prop] = {};\r\n }\r\n if (a[prop].constructor === Object) {\r\n deepExtend(a[prop], b[prop]); // NOTE: allowDeletion not propagated!\r\n }\r\n else {\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n }\r\n else if (Array.isArray(b[prop])) {\r\n a[prop] = [];\r\n for (let i = 0; i < b[prop].length; i++) {\r\n a[prop].push(b[prop][i]);\r\n }\r\n }\r\n else {\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n }\r\n return a;\r\n}\r\n/**\r\n * Deep extend an object a with the properties of object b.\r\n *\r\n * @param a - Target object.\r\n * @param b - Source object.\r\n * @param protoExtend - If true, the prototype values will also be extended.\r\n * (That is the options objects that inherit from others will also get the\r\n * inherited options).\r\n * @param allowDeletion - If true, the values of fields that are null will be deleted.\r\n * @returns Argument a.\r\n */\r\nfunction deepExtend(a, b, protoExtend = false, allowDeletion = false) {\r\n for (const prop in b) {\r\n if (Object.prototype.hasOwnProperty.call(b, prop) || protoExtend === true) {\r\n if (typeof b[prop] === \"object\" &&\r\n b[prop] !== null &&\r\n Object.getPrototypeOf(b[prop]) === Object.prototype) {\r\n if (a[prop] === undefined) {\r\n a[prop] = deepExtend({}, b[prop], protoExtend); // NOTE: allowDeletion not propagated!\r\n }\r\n else if (typeof a[prop] === \"object\" &&\r\n a[prop] !== null &&\r\n Object.getPrototypeOf(a[prop]) === Object.prototype) {\r\n deepExtend(a[prop], b[prop], protoExtend); // NOTE: allowDeletion not propagated!\r\n }\r\n else {\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n }\r\n else if (Array.isArray(b[prop])) {\r\n a[prop] = b[prop].slice();\r\n }\r\n else {\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n }\r\n }\r\n return a;\r\n}\r\n/**\r\n * Test whether all elements in two arrays are equal.\r\n *\r\n * @param a - First array.\r\n * @param b - Second array.\r\n * @returns True if both arrays have the same length and same elements (1 = '1').\r\n */\r\nfunction equalArray(a, b) {\r\n if (a.length !== b.length) {\r\n return false;\r\n }\r\n for (let i = 0, len = a.length; i < len; i++) {\r\n if (a[i] != b[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n/**\r\n * Get the type of an object, for example exports.getType([]) returns 'Array'.\r\n *\r\n * @param object - Input value of unknown type.\r\n * @returns Detected type.\r\n */\r\nfunction getType(object) {\r\n const type = typeof object;\r\n if (type === \"object\") {\r\n if (object === null) {\r\n return \"null\";\r\n }\r\n if (object instanceof Boolean) {\r\n return \"Boolean\";\r\n }\r\n if (object instanceof Number) {\r\n return \"Number\";\r\n }\r\n if (object instanceof String) {\r\n return \"String\";\r\n }\r\n if (Array.isArray(object)) {\r\n return \"Array\";\r\n }\r\n if (object instanceof Date) {\r\n return \"Date\";\r\n }\r\n return \"Object\";\r\n }\r\n if (type === \"number\") {\r\n return \"Number\";\r\n }\r\n if (type === \"boolean\") {\r\n return \"Boolean\";\r\n }\r\n if (type === \"string\") {\r\n return \"String\";\r\n }\r\n if (type === undefined) {\r\n return \"undefined\";\r\n }\r\n return type;\r\n}\r\n/**\r\n * Used to extend an array and copy it. This is used to propagate paths recursively.\r\n *\r\n * @param arr - First part.\r\n * @param newValue - The value to be aadded into the array.\r\n * @returns A new array with all items from arr and newValue (which is last).\r\n */\r\nfunction copyAndExtendArray(arr, newValue) {\r\n return [...arr, newValue];\r\n}\r\n/**\r\n * Used to extend an array and copy it. This is used to propagate paths recursively.\r\n *\r\n * @param arr - The array to be copied.\r\n * @returns Shallow copy of arr.\r\n */\r\nfunction copyArray(arr) {\r\n return arr.slice();\r\n}\r\n/**\r\n * Retrieve the absolute left value of a DOM element.\r\n *\r\n * @param elem - A dom element, for example a div.\r\n * @returns The absolute left position of this element in the browser page.\r\n */\r\nfunction getAbsoluteLeft(elem) {\r\n return elem.getBoundingClientRect().left;\r\n}\r\n/**\r\n * Retrieve the absolute right value of a DOM element.\r\n *\r\n * @param elem - A dom element, for example a div.\r\n * @returns The absolute right position of this element in the browser page.\r\n */\r\nfunction getAbsoluteRight(elem) {\r\n return elem.getBoundingClientRect().right;\r\n}\r\n/**\r\n * Retrieve the absolute top value of a DOM element.\r\n *\r\n * @param elem - A dom element, for example a div.\r\n * @returns The absolute top position of this element in the browser page.\r\n */\r\nfunction getAbsoluteTop(elem) {\r\n return elem.getBoundingClientRect().top;\r\n}\r\n/**\r\n * Add a className to the given elements style.\r\n *\r\n * @param elem - The element to which the classes will be added.\r\n * @param classNames - Space separated list of classes.\r\n */\r\nfunction addClassName(elem, classNames) {\r\n let classes = elem.className.split(\" \");\r\n const newClasses = classNames.split(\" \");\r\n classes = classes.concat(newClasses.filter(function (className) {\r\n return !classes.includes(className);\r\n }));\r\n elem.className = classes.join(\" \");\r\n}\r\n/**\r\n * Remove a className from the given elements style.\r\n *\r\n * @param elem - The element from which the classes will be removed.\r\n * @param classNames - Space separated list of classes.\r\n */\r\nfunction removeClassName(elem, classNames) {\r\n let classes = elem.className.split(\" \");\r\n const oldClasses = classNames.split(\" \");\r\n classes = classes.filter(function (className) {\r\n return !oldClasses.includes(className);\r\n });\r\n elem.className = classes.join(\" \");\r\n}\r\n/**\r\n * For each method for both arrays and objects.\r\n * In case of an array, the built-in Array.forEach() is applied (**No, it's not!**).\r\n * In case of an Object, the method loops over all properties of the object.\r\n *\r\n * @param object - An Object or Array to be iterated over.\r\n * @param callback - Array.forEach-like callback.\r\n */\r\nfunction forEach(object, callback) {\r\n if (Array.isArray(object)) {\r\n // array\r\n const len = object.length;\r\n for (let i = 0; i < len; i++) {\r\n callback(object[i], i, object);\r\n }\r\n }\r\n else {\r\n // object\r\n for (const key in object) {\r\n if (Object.prototype.hasOwnProperty.call(object, key)) {\r\n callback(object[key], key, object);\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Convert an object into an array: all objects properties are put into the array. The resulting array is unordered.\r\n *\r\n * @param o - Object that contains the properties and methods.\r\n * @returns An array of unordered values.\r\n */\r\nconst toArray = Object.values;\r\n/**\r\n * Update a property in an object.\r\n *\r\n * @param object - The object whose property will be updated.\r\n * @param key - Name of the property to be updated.\r\n * @param value - The new value to be assigned.\r\n * @returns Whether the value was updated (true) or already strictly the same in the original object (false).\r\n */\r\nfunction updateProperty(object, key, value) {\r\n if (object[key] !== value) {\r\n object[key] = value;\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Throttle the given function to be only executed once per animation frame.\r\n *\r\n * @param fn - The original function.\r\n * @returns The throttled function.\r\n */\r\nfunction throttle(fn) {\r\n let scheduled = false;\r\n return () => {\r\n if (!scheduled) {\r\n scheduled = true;\r\n requestAnimationFrame(() => {\r\n scheduled = false;\r\n fn();\r\n });\r\n }\r\n };\r\n}\r\n/**\r\n * Add and event listener. Works for all browsers.\r\n *\r\n * @param element - The element to bind the event listener to.\r\n * @param action - Same as Element.addEventListener(action, —, —).\r\n * @param listener - Same as Element.addEventListener(—, listener, —).\r\n * @param useCapture - Same as Element.addEventListener(—, —, useCapture).\r\n */\r\nfunction addEventListener(element, action, listener, useCapture) {\r\n if (element.addEventListener) {\r\n if (useCapture === undefined) {\r\n useCapture = false;\r\n }\r\n if (action === \"mousewheel\" && navigator.userAgent.includes(\"Firefox\")) {\r\n action = \"DOMMouseScroll\"; // For Firefox\r\n }\r\n element.addEventListener(action, listener, useCapture);\r\n }\r\n else {\r\n // @TODO: IE types? Does anyone care?\r\n element.attachEvent(\"on\" + action, listener); // IE browsers\r\n }\r\n}\r\n/**\r\n * Remove an event listener from an element.\r\n *\r\n * @param element - The element to bind the event listener to.\r\n * @param action - Same as Element.removeEventListener(action, —, —).\r\n * @param listener - Same as Element.removeEventListener(—, listener, —).\r\n * @param useCapture - Same as Element.removeEventListener(—, —, useCapture).\r\n */\r\nfunction removeEventListener(element, action, listener, useCapture) {\r\n if (element.removeEventListener) {\r\n // non-IE browsers\r\n if (useCapture === undefined) {\r\n useCapture = false;\r\n }\r\n if (action === \"mousewheel\" && navigator.userAgent.includes(\"Firefox\")) {\r\n action = \"DOMMouseScroll\"; // For Firefox\r\n }\r\n element.removeEventListener(action, listener, useCapture);\r\n }\r\n else {\r\n // @TODO: IE types? Does anyone care?\r\n element.detachEvent(\"on\" + action, listener); // IE browsers\r\n }\r\n}\r\n/**\r\n * Cancels the event's default action if it is cancelable, without stopping further propagation of the event.\r\n *\r\n * @param event - The event whose default action should be prevented.\r\n */\r\nfunction preventDefault(event) {\r\n if (!event) {\r\n event = window.event;\r\n }\r\n if (!event) ;\r\n else if (event.preventDefault) {\r\n event.preventDefault(); // non-IE browsers\r\n }\r\n else {\r\n // @TODO: IE types? Does anyone care?\r\n event.returnValue = false; // IE browsers\r\n }\r\n}\r\n/**\r\n * Get HTML element which is the target of the event.\r\n *\r\n * @param event - The event.\r\n * @returns The element or null if not obtainable.\r\n */\r\nfunction getTarget(event = window.event) {\r\n // code from http://www.quirksmode.org/js/events_properties.html\r\n // @TODO: EventTarget can be almost anything, is it okay to return only Elements?\r\n let target = null;\r\n if (!event) ;\r\n else if (event.target) {\r\n target = event.target;\r\n }\r\n else if (event.srcElement) {\r\n target = event.srcElement;\r\n }\r\n if (!(target instanceof Element)) {\r\n return null;\r\n }\r\n if (target.nodeType != null && target.nodeType == 3) {\r\n // defeat Safari bug\r\n target = target.parentNode;\r\n if (!(target instanceof Element)) {\r\n return null;\r\n }\r\n }\r\n return target;\r\n}\r\n/**\r\n * Check if given element contains given parent somewhere in the DOM tree.\r\n *\r\n * @param element - The element to be tested.\r\n * @param parent - The ancestor (not necessarily parent) of the element.\r\n * @returns True if parent is an ancestor of the element, false otherwise.\r\n */\r\nfunction hasParent(element, parent) {\r\n let elem = element;\r\n while (elem) {\r\n if (elem === parent) {\r\n return true;\r\n }\r\n else if (elem.parentNode) {\r\n elem = elem.parentNode;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n return false;\r\n}\r\nconst option = {\r\n /**\r\n * Convert a value into a boolean.\r\n *\r\n * @param value - Value to be converted intoboolean, a function will be executed as `(() => unknown)`.\r\n * @param defaultValue - If the value or the return value of the function == null then this will be returned.\r\n * @returns Corresponding boolean value, if none then the default value, if none then null.\r\n */\r\n asBoolean(value, defaultValue) {\r\n if (typeof value == \"function\") {\r\n value = value();\r\n }\r\n if (value != null) {\r\n return value != false;\r\n }\r\n return defaultValue || null;\r\n },\r\n /**\r\n * Convert a value into a number.\r\n *\r\n * @param value - Value to be converted intonumber, a function will be executed as `(() => unknown)`.\r\n * @param defaultValue - If the value or the return value of the function == null then this will be returned.\r\n * @returns Corresponding **boxed** number value, if none then the default value, if none then null.\r\n */\r\n asNumber(value, defaultValue) {\r\n if (typeof value == \"function\") {\r\n value = value();\r\n }\r\n if (value != null) {\r\n return Number(value) || defaultValue || null;\r\n }\r\n return defaultValue || null;\r\n },\r\n /**\r\n * Convert a value into a string.\r\n *\r\n * @param value - Value to be converted intostring, a function will be executed as `(() => unknown)`.\r\n * @param defaultValue - If the value or the return value of the function == null then this will be returned.\r\n * @returns Corresponding **boxed** string value, if none then the default value, if none then null.\r\n */\r\n asString(value, defaultValue) {\r\n if (typeof value == \"function\") {\r\n value = value();\r\n }\r\n if (value != null) {\r\n return String(value);\r\n }\r\n return defaultValue || null;\r\n },\r\n /**\r\n * Convert a value into a size.\r\n *\r\n * @param value - Value to be converted intosize, a function will be executed as `(() => unknown)`.\r\n * @param defaultValue - If the value or the return value of the function == null then this will be returned.\r\n * @returns Corresponding string value (number + 'px'), if none then the default value, if none then null.\r\n */\r\n asSize(value, defaultValue) {\r\n if (typeof value == \"function\") {\r\n value = value();\r\n }\r\n if (isString(value)) {\r\n return value;\r\n }\r\n else if (isNumber(value)) {\r\n return value + \"px\";\r\n }\r\n else {\r\n return defaultValue || null;\r\n }\r\n },\r\n /**\r\n * Convert a value into a DOM Element.\r\n *\r\n * @param value - Value to be converted into DOM Element, a function will be executed as `(() => unknown)`.\r\n * @param defaultValue - If the value or the return value of the function == null then this will be returned.\r\n * @returns The DOM Element, if none then the default value, if none then null.\r\n */\r\n asElement(value, defaultValue) {\r\n if (typeof value == \"function\") {\r\n value = value();\r\n }\r\n return value || defaultValue || null;\r\n },\r\n};\r\n/**\r\n * Convert hex color string into RGB color object.\r\n *\r\n * @remarks\r\n * {@link http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb}\r\n * @param hex - Hex color string (3 or 6 digits, with or without #).\r\n * @returns RGB color object.\r\n */\r\nfunction hexToRGB(hex) {\r\n let result;\r\n switch (hex.length) {\r\n case 3:\r\n case 4:\r\n result = shortHexRE.exec(hex);\r\n return result\r\n ? {\r\n r: parseInt(result[1] + result[1], 16),\r\n g: parseInt(result[2] + result[2], 16),\r\n b: parseInt(result[3] + result[3], 16),\r\n }\r\n : null;\r\n case 6:\r\n case 7:\r\n result = fullHexRE.exec(hex);\r\n return result\r\n ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16),\r\n }\r\n : null;\r\n default:\r\n return null;\r\n }\r\n}\r\n/**\r\n * This function takes string color in hex or RGB format and adds the opacity, RGBA is passed through unchanged.\r\n *\r\n * @param color - The color string (hex, RGB, RGBA).\r\n * @param opacity - The new opacity.\r\n * @returns RGBA string, for example 'rgba(255, 0, 127, 0.3)'.\r\n */\r\nfunction overrideOpacity(color, opacity) {\r\n if (color.includes(\"rgba\")) {\r\n return color;\r\n }\r\n else if (color.includes(\"rgb\")) {\r\n const rgb = color\r\n .substr(color.indexOf(\"(\") + 1)\r\n .replace(\")\", \"\")\r\n .split(\",\");\r\n return \"rgba(\" + rgb[0] + \",\" + rgb[1] + \",\" + rgb[2] + \",\" + opacity + \")\";\r\n }\r\n else {\r\n const rgb = hexToRGB(color);\r\n if (rgb == null) {\r\n return color;\r\n }\r\n else {\r\n return \"rgba(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \",\" + opacity + \")\";\r\n }\r\n }\r\n}\r\n/**\r\n * Convert RGB \\<0, 255\\> into hex color string.\r\n *\r\n * @param red - Red channel.\r\n * @param green - Green channel.\r\n * @param blue - Blue channel.\r\n * @returns Hex color string (for example: '#0acdc0').\r\n */\r\nfunction RGBToHex(red, green, blue) {\r\n return (\"#\" + ((1 << 24) + (red << 16) + (green << 8) + blue).toString(16).slice(1));\r\n}\r\n/**\r\n * Parse a color property into an object with border, background, and highlight colors.\r\n *\r\n * @param inputColor - Shorthand color string or input color object.\r\n * @param defaultColor - Full color object to fill in missing values in inputColor.\r\n * @returns Color object.\r\n */\r\nfunction parseColor(inputColor, defaultColor) {\r\n if (isString(inputColor)) {\r\n let colorStr = inputColor;\r\n if (isValidRGB(colorStr)) {\r\n const rgb = colorStr\r\n .substr(4)\r\n .substr(0, colorStr.length - 5)\r\n .split(\",\")\r\n .map(function (value) {\r\n return parseInt(value);\r\n });\r\n colorStr = RGBToHex(rgb[0], rgb[1], rgb[2]);\r\n }\r\n if (isValidHex(colorStr) === true) {\r\n const hsv = hexToHSV(colorStr);\r\n const lighterColorHSV = {\r\n h: hsv.h,\r\n s: hsv.s * 0.8,\r\n v: Math.min(1, hsv.v * 1.02),\r\n };\r\n const darkerColorHSV = {\r\n h: hsv.h,\r\n s: Math.min(1, hsv.s * 1.25),\r\n v: hsv.v * 0.8,\r\n };\r\n const darkerColorHex = HSVToHex(darkerColorHSV.h, darkerColorHSV.s, darkerColorHSV.v);\r\n const lighterColorHex = HSVToHex(lighterColorHSV.h, lighterColorHSV.s, lighterColorHSV.v);\r\n return {\r\n background: colorStr,\r\n border: darkerColorHex,\r\n highlight: {\r\n background: lighterColorHex,\r\n border: darkerColorHex,\r\n },\r\n hover: {\r\n background: lighterColorHex,\r\n border: darkerColorHex,\r\n },\r\n };\r\n }\r\n else {\r\n return {\r\n background: colorStr,\r\n border: colorStr,\r\n highlight: {\r\n background: colorStr,\r\n border: colorStr,\r\n },\r\n hover: {\r\n background: colorStr,\r\n border: colorStr,\r\n },\r\n };\r\n }\r\n }\r\n else {\r\n if (defaultColor) {\r\n const color = {\r\n background: inputColor.background || defaultColor.background,\r\n border: inputColor.border || defaultColor.border,\r\n highlight: isString(inputColor.highlight)\r\n ? {\r\n border: inputColor.highlight,\r\n background: inputColor.highlight,\r\n }\r\n : {\r\n background: (inputColor.highlight && inputColor.highlight.background) ||\r\n defaultColor.highlight.background,\r\n border: (inputColor.highlight && inputColor.highlight.border) ||\r\n defaultColor.highlight.border,\r\n },\r\n hover: isString(inputColor.hover)\r\n ? {\r\n border: inputColor.hover,\r\n background: inputColor.hover,\r\n }\r\n : {\r\n border: (inputColor.hover && inputColor.hover.border) ||\r\n defaultColor.hover.border,\r\n background: (inputColor.hover && inputColor.hover.background) ||\r\n defaultColor.hover.background,\r\n },\r\n };\r\n return color;\r\n }\r\n else {\r\n const color = {\r\n background: inputColor.background || undefined,\r\n border: inputColor.border || undefined,\r\n highlight: isString(inputColor.highlight)\r\n ? {\r\n border: inputColor.highlight,\r\n background: inputColor.highlight,\r\n }\r\n : {\r\n background: (inputColor.highlight && inputColor.highlight.background) ||\r\n undefined,\r\n border: (inputColor.highlight && inputColor.highlight.border) ||\r\n undefined,\r\n },\r\n hover: isString(inputColor.hover)\r\n ? {\r\n border: inputColor.hover,\r\n background: inputColor.hover,\r\n }\r\n : {\r\n border: (inputColor.hover && inputColor.hover.border) || undefined,\r\n background: (inputColor.hover && inputColor.hover.background) || undefined,\r\n },\r\n };\r\n return color;\r\n }\r\n }\r\n}\r\n/**\r\n * Convert RGB \\<0, 255\\> into HSV object.\r\n *\r\n * @remarks\r\n * {@link http://www.javascripter.net/faq/rgb2hsv.htm}\r\n * @param red - Red channel.\r\n * @param green - Green channel.\r\n * @param blue - Blue channel.\r\n * @returns HSV color object.\r\n */\r\nfunction RGBToHSV(red, green, blue) {\r\n red = red / 255;\r\n green = green / 255;\r\n blue = blue / 255;\r\n const minRGB = Math.min(red, Math.min(green, blue));\r\n const maxRGB = Math.max(red, Math.max(green, blue));\r\n // Black-gray-white\r\n if (minRGB === maxRGB) {\r\n return { h: 0, s: 0, v: minRGB };\r\n }\r\n // Colors other than black-gray-white:\r\n const d = red === minRGB ? green - blue : blue === minRGB ? red - green : blue - red;\r\n const h = red === minRGB ? 3 : blue === minRGB ? 1 : 5;\r\n const hue = (60 * (h - d / (maxRGB - minRGB))) / 360;\r\n const saturation = (maxRGB - minRGB) / maxRGB;\r\n const value = maxRGB;\r\n return { h: hue, s: saturation, v: value };\r\n}\r\n/**\r\n * Split a string with css styles into an object with key/values.\r\n *\r\n * @param cssText - CSS source code to split into key/value object.\r\n * @returns Key/value object corresponding to {@link cssText}.\r\n */\r\nfunction splitCSSText(cssText) {\r\n const tmpEllement = document.createElement(\"div\");\r\n const styles = {};\r\n tmpEllement.style.cssText = cssText;\r\n for (let i = 0; i < tmpEllement.style.length; ++i) {\r\n styles[tmpEllement.style[i]] = tmpEllement.style.getPropertyValue(tmpEllement.style[i]);\r\n }\r\n return styles;\r\n}\r\n/**\r\n * Append a string with css styles to an element.\r\n *\r\n * @param element - The element that will receive new styles.\r\n * @param cssText - The styles to be appended.\r\n */\r\nfunction addCssText(element, cssText) {\r\n const cssStyle = splitCSSText(cssText);\r\n for (const [key, value] of Object.entries(cssStyle)) {\r\n element.style.setProperty(key, value);\r\n }\r\n}\r\n/**\r\n * Remove a string with css styles from an element.\r\n *\r\n * @param element - The element from which styles should be removed.\r\n * @param cssText - The styles to be removed.\r\n */\r\nfunction removeCssText(element, cssText) {\r\n const cssStyle = splitCSSText(cssText);\r\n for (const key of Object.keys(cssStyle)) {\r\n element.style.removeProperty(key);\r\n }\r\n}\r\n/**\r\n * Convert HSV \\<0, 1\\> into RGB color object.\r\n *\r\n * @remarks\r\n * {@link https://gist.github.com/mjijackson/5311256}\r\n * @param h - Hue.\r\n * @param s - Saturation.\r\n * @param v - Value.\r\n * @returns RGB color object.\r\n */\r\nfunction HSVToRGB(h, s, v) {\r\n let r;\r\n let g;\r\n let b;\r\n const i = Math.floor(h * 6);\r\n const f = h * 6 - i;\r\n const p = v * (1 - s);\r\n const q = v * (1 - f * s);\r\n const t = v * (1 - (1 - f) * s);\r\n switch (i % 6) {\r\n case 0:\r\n (r = v), (g = t), (b = p);\r\n break;\r\n case 1:\r\n (r = q), (g = v), (b = p);\r\n break;\r\n case 2:\r\n (r = p), (g = v), (b = t);\r\n break;\r\n case 3:\r\n (r = p), (g = q), (b = v);\r\n break;\r\n case 4:\r\n (r = t), (g = p), (b = v);\r\n break;\r\n case 5:\r\n (r = v), (g = p), (b = q);\r\n break;\r\n }\r\n return {\r\n r: Math.floor(r * 255),\r\n g: Math.floor(g * 255),\r\n b: Math.floor(b * 255),\r\n };\r\n}\r\n/**\r\n * Convert HSV \\<0, 1\\> into hex color string.\r\n *\r\n * @param h - Hue.\r\n * @param s - Saturation.\r\n * @param v - Value.\r\n * @returns Hex color string.\r\n */\r\nfunction HSVToHex(h, s, v) {\r\n const rgb = HSVToRGB(h, s, v);\r\n return RGBToHex(rgb.r, rgb.g, rgb.b);\r\n}\r\n/**\r\n * Convert hex color string into HSV \\<0, 1\\>.\r\n *\r\n * @param hex - Hex color string.\r\n * @returns HSV color object.\r\n */\r\nfunction hexToHSV(hex) {\r\n const rgb = hexToRGB(hex);\r\n if (!rgb) {\r\n throw new TypeError(`'${hex}' is not a valid color.`);\r\n }\r\n return RGBToHSV(rgb.r, rgb.g, rgb.b);\r\n}\r\n/**\r\n * Validate hex color string.\r\n *\r\n * @param hex - Unknown string that may contain a color.\r\n * @returns True if the string is valid, false otherwise.\r\n */\r\nfunction isValidHex(hex) {\r\n const isOk = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(hex);\r\n return isOk;\r\n}\r\n/**\r\n * Validate RGB color string.\r\n *\r\n * @param rgb - Unknown string that may contain a color.\r\n * @returns True if the string is valid, false otherwise.\r\n */\r\nfunction isValidRGB(rgb) {\r\n return rgbRE.test(rgb);\r\n}\r\n/**\r\n * Validate RGBA color string.\r\n *\r\n * @param rgba - Unknown string that may contain a color.\r\n * @returns True if the string is valid, false otherwise.\r\n */\r\nfunction isValidRGBA(rgba) {\r\n return rgbaRE.test(rgba);\r\n}\r\n/**\r\n * This recursively redirects the prototype of JSON objects to the referenceObject.\r\n * This is used for default options.\r\n *\r\n * @param fields - Names of properties to be bridged.\r\n * @param referenceObject - The original object.\r\n * @returns A new object inheriting from the referenceObject.\r\n */\r\nfunction selectiveBridgeObject(fields, referenceObject) {\r\n if (referenceObject !== null && typeof referenceObject === \"object\") {\r\n // !!! typeof null === 'object'\r\n const objectTo = Object.create(referenceObject);\r\n for (let i = 0; i < fields.length; i++) {\r\n if (Object.prototype.hasOwnProperty.call(referenceObject, fields[i])) {\r\n if (typeof referenceObject[fields[i]] == \"object\") {\r\n objectTo[fields[i]] = bridgeObject(referenceObject[fields[i]]);\r\n }\r\n }\r\n }\r\n return objectTo;\r\n }\r\n else {\r\n return null;\r\n }\r\n}\r\n/**\r\n * This recursively redirects the prototype of JSON objects to the referenceObject.\r\n * This is used for default options.\r\n *\r\n * @param referenceObject - The original object.\r\n * @returns The Element if the referenceObject is an Element, or a new object inheriting from the referenceObject.\r\n */\r\nfunction bridgeObject(referenceObject) {\r\n if (referenceObject === null || typeof referenceObject !== \"object\") {\r\n return null;\r\n }\r\n if (referenceObject instanceof Element) {\r\n // Avoid bridging DOM objects\r\n return referenceObject;\r\n }\r\n const objectTo = Object.create(referenceObject);\r\n for (const i in referenceObject) {\r\n if (Object.prototype.hasOwnProperty.call(referenceObject, i)) {\r\n if (typeof referenceObject[i] == \"object\") {\r\n objectTo[i] = bridgeObject(referenceObject[i]);\r\n }\r\n }\r\n }\r\n return objectTo;\r\n}\r\n/**\r\n * This method provides a stable sort implementation, very fast for presorted data.\r\n *\r\n * @param a - The array to be sorted (in-place).\r\n * @param compare - An order comparator.\r\n * @returns The argument a.\r\n */\r\nfunction insertSort(a, compare) {\r\n for (let i = 0; i < a.length; i++) {\r\n const k = a[i];\r\n let j;\r\n for (j = i; j > 0 && compare(k, a[j - 1]) < 0; j--) {\r\n a[j] = a[j - 1];\r\n }\r\n a[j] = k;\r\n }\r\n return a;\r\n}\r\n/**\r\n * This is used to set the options of subobjects in the options object.\r\n *\r\n * A requirement of these subobjects is that they have an 'enabled' element\r\n * which is optional for the user but mandatory for the program.\r\n *\r\n * The added value here of the merge is that option 'enabled' is set as required.\r\n *\r\n * @param mergeTarget - Either this.options or the options used for the groups.\r\n * @param options - Options.\r\n * @param option - Option key in the options argument.\r\n * @param globalOptions - Global options, passed in to determine value of option 'enabled'.\r\n */\r\nfunction mergeOptions(mergeTarget, options, option, globalOptions = {}) {\r\n // Local helpers\r\n const isPresent = function (obj) {\r\n return obj !== null && obj !== undefined;\r\n };\r\n const isObject = function (obj) {\r\n return obj !== null && typeof obj === \"object\";\r\n };\r\n // https://stackoverflow.com/a/34491287/1223531\r\n const isEmpty = function (obj) {\r\n for (const x in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, x)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n // Guards\r\n if (!isObject(mergeTarget)) {\r\n throw new Error(\"Parameter mergeTarget must be an object\");\r\n }\r\n if (!isObject(options)) {\r\n throw new Error(\"Parameter options must be an object\");\r\n }\r\n if (!isPresent(option)) {\r\n throw new Error(\"Parameter option must have a value\");\r\n }\r\n if (!isObject(globalOptions)) {\r\n throw new Error(\"Parameter globalOptions must be an object\");\r\n }\r\n //\r\n // Actual merge routine, separated from main logic\r\n // Only a single level of options is merged. Deeper levels are ref'd. This may actually be an issue.\r\n //\r\n const doMerge = function (target, options, option) {\r\n if (!isObject(target[option])) {\r\n target[option] = {};\r\n }\r\n const src = options[option];\r\n const dst = target[option];\r\n for (const prop in src) {\r\n if (Object.prototype.hasOwnProperty.call(src, prop)) {\r\n dst[prop] = src[prop];\r\n }\r\n }\r\n };\r\n // Local initialization\r\n const srcOption = options[option];\r\n const globalPassed = isObject(globalOptions) && !isEmpty(globalOptions);\r\n const globalOption = globalPassed ? globalOptions[option] : undefined;\r\n const globalEnabled = globalOption ? globalOption.enabled : undefined;\r\n /////////////////////////////////////////\r\n // Main routine\r\n /////////////////////////////////////////\r\n if (srcOption === undefined) {\r\n return; // Nothing to do\r\n }\r\n if (typeof srcOption === \"boolean\") {\r\n if (!isObject(mergeTarget[option])) {\r\n mergeTarget[option] = {};\r\n }\r\n mergeTarget[option].enabled = srcOption;\r\n return;\r\n }\r\n if (srcOption === null && !isObject(mergeTarget[option])) {\r\n // If possible, explicit copy from globals\r\n if (isPresent(globalOption)) {\r\n mergeTarget[option] = Object.create(globalOption);\r\n }\r\n else {\r\n return; // Nothing to do\r\n }\r\n }\r\n if (!isObject(srcOption)) {\r\n return;\r\n }\r\n //\r\n // Ensure that 'enabled' is properly set. It is required internally\r\n // Note that the value from options will always overwrite the existing value\r\n //\r\n let enabled = true; // default value\r\n if (srcOption.enabled !== undefined) {\r\n enabled = srcOption.enabled;\r\n }\r\n else {\r\n // Take from globals, if present\r\n if (globalEnabled !== undefined) {\r\n enabled = globalOption.enabled;\r\n }\r\n }\r\n doMerge(mergeTarget, options, option);\r\n mergeTarget[option].enabled = enabled;\r\n}\r\n/**\r\n * This function does a binary search for a visible item in a sorted list. If we find a visible item, the code that uses\r\n * this function will then iterate in both directions over this sorted list to find all visible items.\r\n *\r\n * @param orderedItems - Items ordered by start.\r\n * @param comparator - -1 is lower, 0 is equal, 1 is higher.\r\n * @param field - Property name on an item (That is item[field]).\r\n * @param field2 - Second property name on an item (That is item[field][field2]).\r\n * @returns Index of the found item or -1 if nothing was found.\r\n */\r\nfunction binarySearchCustom(orderedItems, comparator, field, field2) {\r\n const maxIterations = 10000;\r\n let iteration = 0;\r\n let low = 0;\r\n let high = orderedItems.length - 1;\r\n while (low <= high && iteration < maxIterations) {\r\n const middle = Math.floor((low + high) / 2);\r\n const item = orderedItems[middle];\r\n const value = field2 === undefined ? item[field] : item[field][field2];\r\n const searchResult = comparator(value);\r\n if (searchResult == 0) {\r\n // jihaa, found a visible item!\r\n return middle;\r\n }\r\n else if (searchResult == -1) {\r\n // it is too small --> increase low\r\n low = middle + 1;\r\n }\r\n else {\r\n // it is too big --> decrease high\r\n high = middle - 1;\r\n }\r\n iteration++;\r\n }\r\n return -1;\r\n}\r\n/**\r\n * This function does a binary search for a specific value in a sorted array.\r\n * If it does not exist but is in between of two values, we return either the\r\n * one before or the one after, depending on user input If it is found, we\r\n * return the index, else -1.\r\n *\r\n * @param orderedItems - Sorted array.\r\n * @param target - The searched value.\r\n * @param field - Name of the property in items to be searched.\r\n * @param sidePreference - If the target is between two values, should the index of the before or the after be returned?\r\n * @param comparator - An optional comparator, returning -1, 0, 1 for \\<, ===, \\>.\r\n * @returns The index of found value or -1 if nothing was found.\r\n */\r\nfunction binarySearchValue(orderedItems, target, field, sidePreference, comparator) {\r\n const maxIterations = 10000;\r\n let iteration = 0;\r\n let low = 0;\r\n let high = orderedItems.length - 1;\r\n let prevValue;\r\n let value;\r\n let nextValue;\r\n let middle;\r\n comparator =\r\n comparator != undefined\r\n ? comparator\r\n : function (a, b) {\r\n return a == b ? 0 : a < b ? -1 : 1;\r\n };\r\n while (low <= high && iteration < maxIterations) {\r\n // get a new guess\r\n middle = Math.floor(0.5 * (high + low));\r\n prevValue = orderedItems[Math.max(0, middle - 1)][field];\r\n value = orderedItems[middle][field];\r\n nextValue =\r\n orderedItems[Math.min(orderedItems.length - 1, middle + 1)][field];\r\n if (comparator(value, target) == 0) {\r\n // we found the target\r\n return middle;\r\n }\r\n else if (comparator(prevValue, target) < 0 &&\r\n comparator(value, target) > 0) {\r\n // target is in between of the previous and the current\r\n return sidePreference == \"before\" ? Math.max(0, middle - 1) : middle;\r\n }\r\n else if (comparator(value, target) < 0 &&\r\n comparator(nextValue, target) > 0) {\r\n // target is in between of the current and the next\r\n return sidePreference == \"before\"\r\n ? middle\r\n : Math.min(orderedItems.length - 1, middle + 1);\r\n }\r\n else {\r\n // didnt find the target, we need to change our boundaries.\r\n if (comparator(value, target) < 0) {\r\n // it is too small --> increase low\r\n low = middle + 1;\r\n }\r\n else {\r\n // it is too big --> decrease high\r\n high = middle - 1;\r\n }\r\n }\r\n iteration++;\r\n }\r\n // didnt find anything. Return -1.\r\n return -1;\r\n}\r\n/*\r\n * Easing Functions.\r\n * Only considering the t value for the range [0, 1] => [0, 1].\r\n *\r\n * Inspiration: from http://gizma.com/easing/\r\n * https://gist.github.com/gre/1650294\r\n */\r\nconst easingFunctions = {\r\n /**\r\n * Provides no easing and no acceleration.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n linear(t) {\r\n return t;\r\n },\r\n /**\r\n * Accelerate from zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInQuad(t) {\r\n return t * t;\r\n },\r\n /**\r\n * Decelerate to zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeOutQuad(t) {\r\n return t * (2 - t);\r\n },\r\n /**\r\n * Accelerate until halfway, then decelerate.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInOutQuad(t) {\r\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\r\n },\r\n /**\r\n * Accelerate from zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInCubic(t) {\r\n return t * t * t;\r\n },\r\n /**\r\n * Decelerate to zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeOutCubic(t) {\r\n return --t * t * t + 1;\r\n },\r\n /**\r\n * Accelerate until halfway, then decelerate.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInOutCubic(t) {\r\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\r\n },\r\n /**\r\n * Accelerate from zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInQuart(t) {\r\n return t * t * t * t;\r\n },\r\n /**\r\n * Decelerate to zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeOutQuart(t) {\r\n return 1 - --t * t * t * t;\r\n },\r\n /**\r\n * Accelerate until halfway, then decelerate.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInOutQuart(t) {\r\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\r\n },\r\n /**\r\n * Accelerate from zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInQuint(t) {\r\n return t * t * t * t * t;\r\n },\r\n /**\r\n * Decelerate to zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeOutQuint(t) {\r\n return 1 + --t * t * t * t * t;\r\n },\r\n /**\r\n * Accelerate until halfway, then decelerate.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInOutQuint(t) {\r\n return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\r\n },\r\n};\r\n/**\r\n * Experimentaly compute the width of the scrollbar for this browser.\r\n *\r\n * @returns The width in pixels.\r\n */\r\nfunction getScrollBarWidth() {\r\n const inner = document.createElement(\"p\");\r\n inner.style.width = \"100%\";\r\n inner.style.height = \"200px\";\r\n const outer = document.createElement(\"div\");\r\n outer.style.position = \"absolute\";\r\n outer.style.top = \"0px\";\r\n outer.style.left = \"0px\";\r\n outer.style.visibility = \"hidden\";\r\n outer.style.width = \"200px\";\r\n outer.style.height = \"150px\";\r\n outer.style.overflow = \"hidden\";\r\n outer.appendChild(inner);\r\n document.body.appendChild(outer);\r\n const w1 = inner.offsetWidth;\r\n outer.style.overflow = \"scroll\";\r\n let w2 = inner.offsetWidth;\r\n if (w1 == w2) {\r\n w2 = outer.clientWidth;\r\n }\r\n document.body.removeChild(outer);\r\n return w1 - w2;\r\n}\r\n// @TODO: This doesn't work properly.\r\n// It works only for single property objects,\r\n// otherwise it combines all of the types in a union.\r\n// export function topMost (\r\n// pile: Record[],\r\n// accessors: K1 | [K1]\r\n// ): undefined | V1\r\n// export function topMost (\r\n// pile: Record>[],\r\n// accessors: [K1, K2]\r\n// ): undefined | V1 | V2\r\n// export function topMost (\r\n// pile: Record>>[],\r\n// accessors: [K1, K2, K3]\r\n// ): undefined | V1 | V2 | V3\r\n/**\r\n * Get the top most property value from a pile of objects.\r\n *\r\n * @param pile - Array of objects, no required format.\r\n * @param accessors - Array of property names.\r\n * For example `object['foo']['bar']` → `['foo', 'bar']`.\r\n * @returns Value of the property with given accessors path from the first pile item where it's not undefined.\r\n */\r\nfunction topMost(pile, accessors) {\r\n let candidate;\r\n if (!Array.isArray(accessors)) {\r\n accessors = [accessors];\r\n }\r\n for (const member of pile) {\r\n if (member) {\r\n candidate = member[accessors[0]];\r\n for (let i = 1; i < accessors.length; i++) {\r\n if (candidate) {\r\n candidate = candidate[accessors[i]];\r\n }\r\n }\r\n if (typeof candidate !== \"undefined\") {\r\n break;\r\n }\r\n }\r\n }\r\n return candidate;\r\n}\n\nconst htmlColors = {\n black: \"#000000\",\n navy: \"#000080\",\n darkblue: \"#00008B\",\n mediumblue: \"#0000CD\",\n blue: \"#0000FF\",\n darkgreen: \"#006400\",\n green: \"#008000\",\n teal: \"#008080\",\n darkcyan: \"#008B8B\",\n deepskyblue: \"#00BFFF\",\n darkturquoise: \"#00CED1\",\n mediumspringgreen: \"#00FA9A\",\n lime: \"#00FF00\",\n springgreen: \"#00FF7F\",\n aqua: \"#00FFFF\",\n cyan: \"#00FFFF\",\n midnightblue: \"#191970\",\n dodgerblue: \"#1E90FF\",\n lightseagreen: \"#20B2AA\",\n forestgreen: \"#228B22\",\n seagreen: \"#2E8B57\",\n darkslategray: \"#2F4F4F\",\n limegreen: \"#32CD32\",\n mediumseagreen: \"#3CB371\",\n turquoise: \"#40E0D0\",\n royalblue: \"#4169E1\",\n steelblue: \"#4682B4\",\n darkslateblue: \"#483D8B\",\n mediumturquoise: \"#48D1CC\",\n indigo: \"#4B0082\",\n darkolivegreen: \"#556B2F\",\n cadetblue: \"#5F9EA0\",\n cornflowerblue: \"#6495ED\",\n mediumaquamarine: \"#66CDAA\",\n dimgray: \"#696969\",\n slateblue: \"#6A5ACD\",\n olivedrab: \"#6B8E23\",\n slategray: \"#708090\",\n lightslategray: \"#778899\",\n mediumslateblue: \"#7B68EE\",\n lawngreen: \"#7CFC00\",\n chartreuse: \"#7FFF00\",\n aquamarine: \"#7FFFD4\",\n maroon: \"#800000\",\n purple: \"#800080\",\n olive: \"#808000\",\n gray: \"#808080\",\n skyblue: \"#87CEEB\",\n lightskyblue: \"#87CEFA\",\n blueviolet: \"#8A2BE2\",\n darkred: \"#8B0000\",\n darkmagenta: \"#8B008B\",\n saddlebrown: \"#8B4513\",\n darkseagreen: \"#8FBC8F\",\n lightgreen: \"#90EE90\",\n mediumpurple: \"#9370D8\",\n darkviolet: \"#9400D3\",\n palegreen: \"#98FB98\",\n darkorchid: \"#9932CC\",\n yellowgreen: \"#9ACD32\",\n sienna: \"#A0522D\",\n brown: \"#A52A2A\",\n darkgray: \"#A9A9A9\",\n lightblue: \"#ADD8E6\",\n greenyellow: \"#ADFF2F\",\n paleturquoise: \"#AFEEEE\",\n lightsteelblue: \"#B0C4DE\",\n powderblue: \"#B0E0E6\",\n firebrick: \"#B22222\",\n darkgoldenrod: \"#B8860B\",\n mediumorchid: \"#BA55D3\",\n rosybrown: \"#BC8F8F\",\n darkkhaki: \"#BDB76B\",\n silver: \"#C0C0C0\",\n mediumvioletred: \"#C71585\",\n indianred: \"#CD5C5C\",\n peru: \"#CD853F\",\n chocolate: \"#D2691E\",\n tan: \"#D2B48C\",\n lightgrey: \"#D3D3D3\",\n palevioletred: \"#D87093\",\n thistle: \"#D8BFD8\",\n orchid: \"#DA70D6\",\n goldenrod: \"#DAA520\",\n crimson: \"#DC143C\",\n gainsboro: \"#DCDCDC\",\n plum: \"#DDA0DD\",\n burlywood: \"#DEB887\",\n lightcyan: \"#E0FFFF\",\n lavender: \"#E6E6FA\",\n darksalmon: \"#E9967A\",\n violet: \"#EE82EE\",\n palegoldenrod: \"#EEE8AA\",\n lightcoral: \"#F08080\",\n khaki: \"#F0E68C\",\n aliceblue: \"#F0F8FF\",\n honeydew: \"#F0FFF0\",\n azure: \"#F0FFFF\",\n sandybrown: \"#F4A460\",\n wheat: \"#F5DEB3\",\n beige: \"#F5F5DC\",\n whitesmoke: \"#F5F5F5\",\n mintcream: \"#F5FFFA\",\n ghostwhite: \"#F8F8FF\",\n salmon: \"#FA8072\",\n antiquewhite: \"#FAEBD7\",\n linen: \"#FAF0E6\",\n lightgoldenrodyellow: \"#FAFAD2\",\n oldlace: \"#FDF5E6\",\n red: \"#FF0000\",\n fuchsia: \"#FF00FF\",\n magenta: \"#FF00FF\",\n deeppink: \"#FF1493\",\n orangered: \"#FF4500\",\n tomato: \"#FF6347\",\n hotpink: \"#FF69B4\",\n coral: \"#FF7F50\",\n darkorange: \"#FF8C00\",\n lightsalmon: \"#FFA07A\",\n orange: \"#FFA500\",\n lightpink: \"#FFB6C1\",\n pink: \"#FFC0CB\",\n gold: \"#FFD700\",\n peachpuff: \"#FFDAB9\",\n navajowhite: \"#FFDEAD\",\n moccasin: \"#FFE4B5\",\n bisque: \"#FFE4C4\",\n mistyrose: \"#FFE4E1\",\n blanchedalmond: \"#FFEBCD\",\n papayawhip: \"#FFEFD5\",\n lavenderblush: \"#FFF0F5\",\n seashell: \"#FFF5EE\",\n cornsilk: \"#FFF8DC\",\n lemonchiffon: \"#FFFACD\",\n floralwhite: \"#FFFAF0\",\n snow: \"#FFFAFA\",\n yellow: \"#FFFF00\",\n lightyellow: \"#FFFFE0\",\n ivory: \"#FFFFF0\",\n white: \"#FFFFFF\",\n};\n\n/**\n * @param {number} [pixelRatio=1]\n */\nlet ColorPicker$1 = class ColorPicker {\n /**\n * @param {number} [pixelRatio=1]\n */\n constructor(pixelRatio = 1) {\n this.pixelRatio = pixelRatio;\n this.generated = false;\n this.centerCoordinates = { x: 289 / 2, y: 289 / 2 };\n this.r = 289 * 0.49;\n this.color = { r: 255, g: 255, b: 255, a: 1.0 };\n this.hueCircle = undefined;\n this.initialColor = { r: 255, g: 255, b: 255, a: 1.0 };\n this.previousColor = undefined;\n this.applied = false;\n\n // bound by\n this.updateCallback = () => {};\n this.closeCallback = () => {};\n\n // create all DOM elements\n this._create();\n }\n\n /**\n * this inserts the colorPicker into a div from the DOM\n *\n * @param {Element} container\n */\n insertTo(container) {\n if (this.hammer !== undefined) {\n this.hammer.destroy();\n this.hammer = undefined;\n }\n this.container = container;\n this.container.appendChild(this.frame);\n this._bindHammer();\n\n this._setSize();\n }\n\n /**\n * the callback is executed on apply and save. Bind it to the application\n *\n * @param {Function} callback\n */\n setUpdateCallback(callback) {\n if (typeof callback === \"function\") {\n this.updateCallback = callback;\n } else {\n throw new Error(\n \"Function attempted to set as colorPicker update callback is not a function.\"\n );\n }\n }\n\n /**\n * the callback is executed on apply and save. Bind it to the application\n *\n * @param {Function} callback\n */\n setCloseCallback(callback) {\n if (typeof callback === \"function\") {\n this.closeCallback = callback;\n } else {\n throw new Error(\n \"Function attempted to set as colorPicker closing callback is not a function.\"\n );\n }\n }\n\n /**\n *\n * @param {string} color\n * @returns {string}\n * @private\n */\n _isColorString(color) {\n if (typeof color === \"string\") {\n return htmlColors[color];\n }\n }\n\n /**\n * Set the color of the colorPicker\n * Supported formats:\n * 'red' --> HTML color string\n * '#ffffff' --> hex string\n * 'rgb(255,255,255)' --> rgb string\n * 'rgba(255,255,255,1.0)' --> rgba string\n * {r:255,g:255,b:255} --> rgb object\n * {r:255,g:255,b:255,a:1.0} --> rgba object\n *\n * @param {string | object} color\n * @param {boolean} [setInitial=true]\n */\n setColor(color, setInitial = true) {\n if (color === \"none\") {\n return;\n }\n\n let rgba;\n\n // if a html color shorthand is used, convert to hex\n const htmlColor = this._isColorString(color);\n if (htmlColor !== undefined) {\n color = htmlColor;\n }\n\n // check format\n if (isString(color) === true) {\n if (isValidRGB(color) === true) {\n const rgbaArray = color\n .substr(4)\n .substr(0, color.length - 5)\n .split(\",\");\n rgba = { r: rgbaArray[0], g: rgbaArray[1], b: rgbaArray[2], a: 1.0 };\n } else if (isValidRGBA(color) === true) {\n const rgbaArray = color\n .substr(5)\n .substr(0, color.length - 6)\n .split(\",\");\n rgba = {\n r: rgbaArray[0],\n g: rgbaArray[1],\n b: rgbaArray[2],\n a: rgbaArray[3],\n };\n } else if (isValidHex(color) === true) {\n const rgbObj = hexToRGB(color);\n rgba = { r: rgbObj.r, g: rgbObj.g, b: rgbObj.b, a: 1.0 };\n }\n } else {\n if (color instanceof Object) {\n if (\n color.r !== undefined &&\n color.g !== undefined &&\n color.b !== undefined\n ) {\n const alpha = color.a !== undefined ? color.a : \"1.0\";\n rgba = { r: color.r, g: color.g, b: color.b, a: alpha };\n }\n }\n }\n\n // set color\n if (rgba === undefined) {\n throw new Error(\n \"Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: \" +\n JSON.stringify(color)\n );\n } else {\n this._setColor(rgba, setInitial);\n }\n }\n\n /**\n * this shows the color picker.\n * The hue circle is constructed once and stored.\n */\n show() {\n if (this.closeCallback !== undefined) {\n this.closeCallback();\n this.closeCallback = undefined;\n }\n\n this.applied = false;\n this.frame.style.display = \"block\";\n this._generateHueCircle();\n }\n\n // ------------------------------------------ PRIVATE ----------------------------- //\n\n /**\n * Hide the picker. Is called by the cancel button.\n * Optional boolean to store the previous color for easy access later on.\n *\n * @param {boolean} [storePrevious=true]\n * @private\n */\n _hide(storePrevious = true) {\n // store the previous color for next time;\n if (storePrevious === true) {\n this.previousColor = Object.assign({}, this.color);\n }\n\n if (this.applied === true) {\n this.updateCallback(this.initialColor);\n }\n\n this.frame.style.display = \"none\";\n\n // call the closing callback, restoring the onclick method.\n // this is in a setTimeout because it will trigger the show again before the click is done.\n setTimeout(() => {\n if (this.closeCallback !== undefined) {\n this.closeCallback();\n this.closeCallback = undefined;\n }\n }, 0);\n }\n\n /**\n * bound to the save button. Saves and hides.\n *\n * @private\n */\n _save() {\n this.updateCallback(this.color);\n this.applied = false;\n this._hide();\n }\n\n /**\n * Bound to apply button. Saves but does not close. Is undone by the cancel button.\n *\n * @private\n */\n _apply() {\n this.applied = true;\n this.updateCallback(this.color);\n this._updatePicker(this.color);\n }\n\n /**\n * load the color from the previous session.\n *\n * @private\n */\n _loadLast() {\n if (this.previousColor !== undefined) {\n this.setColor(this.previousColor, false);\n } else {\n alert(\"There is no last color to load...\");\n }\n }\n\n /**\n * set the color, place the picker\n *\n * @param {object} rgba\n * @param {boolean} [setInitial=true]\n * @private\n */\n _setColor(rgba, setInitial = true) {\n // store the initial color\n if (setInitial === true) {\n this.initialColor = Object.assign({}, rgba);\n }\n\n this.color = rgba;\n const hsv = RGBToHSV(rgba.r, rgba.g, rgba.b);\n\n const angleConvert = 2 * Math.PI;\n const radius = this.r * hsv.s;\n const x =\n this.centerCoordinates.x + radius * Math.sin(angleConvert * hsv.h);\n const y =\n this.centerCoordinates.y + radius * Math.cos(angleConvert * hsv.h);\n\n this.colorPickerSelector.style.left =\n x - 0.5 * this.colorPickerSelector.clientWidth + \"px\";\n this.colorPickerSelector.style.top =\n y - 0.5 * this.colorPickerSelector.clientHeight + \"px\";\n\n this._updatePicker(rgba);\n }\n\n /**\n * bound to opacity control\n *\n * @param {number} value\n * @private\n */\n _setOpacity(value) {\n this.color.a = value / 100;\n this._updatePicker(this.color);\n }\n\n /**\n * bound to brightness control\n *\n * @param {number} value\n * @private\n */\n _setBrightness(value) {\n const hsv = RGBToHSV(this.color.r, this.color.g, this.color.b);\n hsv.v = value / 100;\n const rgba = HSVToRGB(hsv.h, hsv.s, hsv.v);\n rgba[\"a\"] = this.color.a;\n this.color = rgba;\n this._updatePicker();\n }\n\n /**\n * update the color picker. A black circle overlays the hue circle to mimic the brightness decreasing.\n *\n * @param {object} rgba\n * @private\n */\n _updatePicker(rgba = this.color) {\n const hsv = RGBToHSV(rgba.r, rgba.g, rgba.b);\n const ctx = this.colorPickerCanvas.getContext(\"2d\");\n if (this.pixelRation === undefined) {\n this.pixelRatio =\n (window.devicePixelRatio || 1) /\n (ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio ||\n 1);\n }\n ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n // clear the canvas\n const w = this.colorPickerCanvas.clientWidth;\n const h = this.colorPickerCanvas.clientHeight;\n ctx.clearRect(0, 0, w, h);\n\n ctx.putImageData(this.hueCircle, 0, 0);\n ctx.fillStyle = \"rgba(0,0,0,\" + (1 - hsv.v) + \")\";\n ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);\n ctx.fill();\n\n this.brightnessRange.value = 100 * hsv.v;\n this.opacityRange.value = 100 * rgba.a;\n\n this.initialColorDiv.style.backgroundColor =\n \"rgba(\" +\n this.initialColor.r +\n \",\" +\n this.initialColor.g +\n \",\" +\n this.initialColor.b +\n \",\" +\n this.initialColor.a +\n \")\";\n this.newColorDiv.style.backgroundColor =\n \"rgba(\" +\n this.color.r +\n \",\" +\n this.color.g +\n \",\" +\n this.color.b +\n \",\" +\n this.color.a +\n \")\";\n }\n\n /**\n * used by create to set the size of the canvas.\n *\n * @private\n */\n _setSize() {\n this.colorPickerCanvas.style.width = \"100%\";\n this.colorPickerCanvas.style.height = \"100%\";\n\n this.colorPickerCanvas.width = 289 * this.pixelRatio;\n this.colorPickerCanvas.height = 289 * this.pixelRatio;\n }\n\n /**\n * create all dom elements\n * TODO: cleanup, lots of similar dom elements\n *\n * @private\n */\n _create() {\n this.frame = document.createElement(\"div\");\n this.frame.className = \"vis-color-picker\";\n\n this.colorPickerDiv = document.createElement(\"div\");\n this.colorPickerSelector = document.createElement(\"div\");\n this.colorPickerSelector.className = \"vis-selector\";\n this.colorPickerDiv.appendChild(this.colorPickerSelector);\n\n this.colorPickerCanvas = document.createElement(\"canvas\");\n this.colorPickerDiv.appendChild(this.colorPickerCanvas);\n\n if (!this.colorPickerCanvas.getContext) {\n const noCanvas = document.createElement(\"DIV\");\n noCanvas.style.color = \"red\";\n noCanvas.style.fontWeight = \"bold\";\n noCanvas.style.padding = \"10px\";\n noCanvas.innerText = \"Error: your browser does not support HTML canvas\";\n this.colorPickerCanvas.appendChild(noCanvas);\n } else {\n const ctx = this.colorPickerCanvas.getContext(\"2d\");\n this.pixelRatio =\n (window.devicePixelRatio || 1) /\n (ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio ||\n 1);\n this.colorPickerCanvas\n .getContext(\"2d\")\n .setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n }\n\n this.colorPickerDiv.className = \"vis-color\";\n\n this.opacityDiv = document.createElement(\"div\");\n this.opacityDiv.className = \"vis-opacity\";\n\n this.brightnessDiv = document.createElement(\"div\");\n this.brightnessDiv.className = \"vis-brightness\";\n\n this.arrowDiv = document.createElement(\"div\");\n this.arrowDiv.className = \"vis-arrow\";\n\n this.opacityRange = document.createElement(\"input\");\n try {\n this.opacityRange.type = \"range\"; // Not supported on IE9\n this.opacityRange.min = \"0\";\n this.opacityRange.max = \"100\";\n } catch (err) {\n // TODO: Add some error handling.\n }\n this.opacityRange.value = \"100\";\n this.opacityRange.className = \"vis-range\";\n\n this.brightnessRange = document.createElement(\"input\");\n try {\n this.brightnessRange.type = \"range\"; // Not supported on IE9\n this.brightnessRange.min = \"0\";\n this.brightnessRange.max = \"100\";\n } catch (err) {\n // TODO: Add some error handling.\n }\n this.brightnessRange.value = \"100\";\n this.brightnessRange.className = \"vis-range\";\n\n this.opacityDiv.appendChild(this.opacityRange);\n this.brightnessDiv.appendChild(this.brightnessRange);\n\n const me = this;\n this.opacityRange.onchange = function () {\n me._setOpacity(this.value);\n };\n this.opacityRange.oninput = function () {\n me._setOpacity(this.value);\n };\n this.brightnessRange.onchange = function () {\n me._setBrightness(this.value);\n };\n this.brightnessRange.oninput = function () {\n me._setBrightness(this.value);\n };\n\n this.brightnessLabel = document.createElement(\"div\");\n this.brightnessLabel.className = \"vis-label vis-brightness\";\n this.brightnessLabel.innerText = \"brightness:\";\n\n this.opacityLabel = document.createElement(\"div\");\n this.opacityLabel.className = \"vis-label vis-opacity\";\n this.opacityLabel.innerText = \"opacity:\";\n\n this.newColorDiv = document.createElement(\"div\");\n this.newColorDiv.className = \"vis-new-color\";\n this.newColorDiv.innerText = \"new\";\n\n this.initialColorDiv = document.createElement(\"div\");\n this.initialColorDiv.className = \"vis-initial-color\";\n this.initialColorDiv.innerText = \"initial\";\n\n this.cancelButton = document.createElement(\"div\");\n this.cancelButton.className = \"vis-button vis-cancel\";\n this.cancelButton.innerText = \"cancel\";\n this.cancelButton.onclick = this._hide.bind(this, false);\n\n this.applyButton = document.createElement(\"div\");\n this.applyButton.className = \"vis-button vis-apply\";\n this.applyButton.innerText = \"apply\";\n this.applyButton.onclick = this._apply.bind(this);\n\n this.saveButton = document.createElement(\"div\");\n this.saveButton.className = \"vis-button vis-save\";\n this.saveButton.innerText = \"save\";\n this.saveButton.onclick = this._save.bind(this);\n\n this.loadButton = document.createElement(\"div\");\n this.loadButton.className = \"vis-button vis-load\";\n this.loadButton.innerText = \"load last\";\n this.loadButton.onclick = this._loadLast.bind(this);\n\n this.frame.appendChild(this.colorPickerDiv);\n this.frame.appendChild(this.arrowDiv);\n this.frame.appendChild(this.brightnessLabel);\n this.frame.appendChild(this.brightnessDiv);\n this.frame.appendChild(this.opacityLabel);\n this.frame.appendChild(this.opacityDiv);\n this.frame.appendChild(this.newColorDiv);\n this.frame.appendChild(this.initialColorDiv);\n\n this.frame.appendChild(this.cancelButton);\n this.frame.appendChild(this.applyButton);\n this.frame.appendChild(this.saveButton);\n this.frame.appendChild(this.loadButton);\n }\n\n /**\n * bind hammer to the color picker\n *\n * @private\n */\n _bindHammer() {\n this.drag = {};\n this.pinch = {};\n this.hammer = new Hammer$1(this.colorPickerCanvas);\n this.hammer.get(\"pinch\").set({ enable: true });\n\n this.hammer.on(\"hammer.input\", (event) => {\n if (event.isFirst) {\n this._moveSelector(event);\n }\n });\n this.hammer.on(\"tap\", (event) => {\n this._moveSelector(event);\n });\n this.hammer.on(\"panstart\", (event) => {\n this._moveSelector(event);\n });\n this.hammer.on(\"panmove\", (event) => {\n this._moveSelector(event);\n });\n this.hammer.on(\"panend\", (event) => {\n this._moveSelector(event);\n });\n }\n\n /**\n * generate the hue circle. This is relatively heavy (200ms) and is done only once on the first time it is shown.\n *\n * @private\n */\n _generateHueCircle() {\n if (this.generated === false) {\n const ctx = this.colorPickerCanvas.getContext(\"2d\");\n if (this.pixelRation === undefined) {\n this.pixelRatio =\n (window.devicePixelRatio || 1) /\n (ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio ||\n 1);\n }\n ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n // clear the canvas\n const w = this.colorPickerCanvas.clientWidth;\n const h = this.colorPickerCanvas.clientHeight;\n ctx.clearRect(0, 0, w, h);\n\n // draw hue circle\n let x, y, hue, sat;\n this.centerCoordinates = { x: w * 0.5, y: h * 0.5 };\n this.r = 0.49 * w;\n const angleConvert = (2 * Math.PI) / 360;\n const hfac = 1 / 360;\n const sfac = 1 / this.r;\n let rgb;\n for (hue = 0; hue < 360; hue++) {\n for (sat = 0; sat < this.r; sat++) {\n x = this.centerCoordinates.x + sat * Math.sin(angleConvert * hue);\n y = this.centerCoordinates.y + sat * Math.cos(angleConvert * hue);\n rgb = HSVToRGB(hue * hfac, sat * sfac, 1);\n ctx.fillStyle = \"rgb(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \")\";\n ctx.fillRect(x - 0.5, y - 0.5, 2, 2);\n }\n }\n ctx.strokeStyle = \"rgba(0,0,0,1)\";\n ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);\n ctx.stroke();\n\n this.hueCircle = ctx.getImageData(0, 0, w, h);\n }\n this.generated = true;\n }\n\n /**\n * move the selector. This is called by hammer functions.\n *\n * @param {Event} event The event\n * @private\n */\n _moveSelector(event) {\n const rect = this.colorPickerDiv.getBoundingClientRect();\n const left = event.center.x - rect.left;\n const top = event.center.y - rect.top;\n\n const centerY = 0.5 * this.colorPickerDiv.clientHeight;\n const centerX = 0.5 * this.colorPickerDiv.clientWidth;\n\n const x = left - centerX;\n const y = top - centerY;\n\n const angle = Math.atan2(x, y);\n const radius = 0.98 * Math.min(Math.sqrt(x * x + y * y), centerX);\n\n const newTop = Math.cos(angle) * radius + centerY;\n const newLeft = Math.sin(angle) * radius + centerX;\n\n this.colorPickerSelector.style.top =\n newTop - 0.5 * this.colorPickerSelector.clientHeight + \"px\";\n this.colorPickerSelector.style.left =\n newLeft - 0.5 * this.colorPickerSelector.clientWidth + \"px\";\n\n // set color\n let h = angle / (2 * Math.PI);\n h = h < 0 ? h + 1 : h;\n const s = radius / this.r;\n const hsv = RGBToHSV(this.color.r, this.color.g, this.color.b);\n hsv.h = h;\n hsv.s = s;\n const rgba = HSVToRGB(hsv.h, hsv.s, hsv.v);\n rgba[\"a\"] = this.color.a;\n this.color = rgba;\n\n // update previews\n this.initialColorDiv.style.backgroundColor =\n \"rgba(\" +\n this.initialColor.r +\n \",\" +\n this.initialColor.g +\n \",\" +\n this.initialColor.b +\n \",\" +\n this.initialColor.a +\n \")\";\n this.newColorDiv.style.backgroundColor =\n \"rgba(\" +\n this.color.r +\n \",\" +\n this.color.g +\n \",\" +\n this.color.b +\n \",\" +\n this.color.a +\n \")\";\n }\n};\n\n/**\n * Wrap given text (last argument) in HTML elements (all preceding arguments).\n *\n * @param {...any} rest - List of tag names followed by inner text.\n * @returns An element or a text node.\n */\nfunction wrapInTag(...rest) {\n if (rest.length < 1) {\n throw new TypeError(\"Invalid arguments.\");\n } else if (rest.length === 1) {\n return document.createTextNode(rest[0]);\n } else {\n const element = document.createElement(rest[0]);\n element.appendChild(wrapInTag(...rest.slice(1)));\n return element;\n }\n}\n\n/**\n * The way this works is for all properties of this.possible options, you can supply the property name in any form to list the options.\n * Boolean options are recognised as Boolean\n * Number options should be written as array: [default value, min value, max value, stepsize]\n * Colors should be written as array: ['color', '#ffffff']\n * Strings with should be written as array: [option1, option2, option3, ..]\n *\n * The options are matched with their counterparts in each of the modules and the values used in the configuration are\n */\nlet Configurator$1 = class Configurator {\n /**\n * @param {object} parentModule | the location where parentModule.setOptions() can be called\n * @param {object} defaultContainer | the default container of the module\n * @param {object} configureOptions | the fully configured and predefined options set found in allOptions.js\n * @param {number} pixelRatio | canvas pixel ratio\n * @param {Function} hideOption | custom logic to dynamically hide options\n */\n constructor(\n parentModule,\n defaultContainer,\n configureOptions,\n pixelRatio = 1,\n hideOption = () => false\n ) {\n this.parent = parentModule;\n this.changedOptions = [];\n this.container = defaultContainer;\n this.allowCreation = false;\n this.hideOption = hideOption;\n\n this.options = {};\n this.initialized = false;\n this.popupCounter = 0;\n this.defaultOptions = {\n enabled: false,\n filter: true,\n container: undefined,\n showButton: true,\n };\n Object.assign(this.options, this.defaultOptions);\n\n this.configureOptions = configureOptions;\n this.moduleOptions = {};\n this.domElements = [];\n this.popupDiv = {};\n this.popupLimit = 5;\n this.popupHistory = {};\n this.colorPicker = new ColorPicker$1(pixelRatio);\n this.wrapper = undefined;\n }\n\n /**\n * refresh all options.\n * Because all modules parse their options by themselves, we just use their options. We copy them here.\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n // reset the popup history because the indices may have been changed.\n this.popupHistory = {};\n this._removePopup();\n\n let enabled = true;\n if (typeof options === \"string\") {\n this.options.filter = options;\n } else if (Array.isArray(options)) {\n this.options.filter = options.join();\n } else if (typeof options === \"object\") {\n if (options == null) {\n throw new TypeError(\"options cannot be null\");\n }\n if (options.container !== undefined) {\n this.options.container = options.container;\n }\n if (options.filter !== undefined) {\n this.options.filter = options.filter;\n }\n if (options.showButton !== undefined) {\n this.options.showButton = options.showButton;\n }\n if (options.enabled !== undefined) {\n enabled = options.enabled;\n }\n } else if (typeof options === \"boolean\") {\n this.options.filter = true;\n enabled = options;\n } else if (typeof options === \"function\") {\n this.options.filter = options;\n enabled = true;\n }\n if (this.options.filter === false) {\n enabled = false;\n }\n\n this.options.enabled = enabled;\n }\n this._clean();\n }\n\n /**\n *\n * @param {object} moduleOptions\n */\n setModuleOptions(moduleOptions) {\n this.moduleOptions = moduleOptions;\n if (this.options.enabled === true) {\n this._clean();\n if (this.options.container !== undefined) {\n this.container = this.options.container;\n }\n this._create();\n }\n }\n\n /**\n * Create all DOM elements\n *\n * @private\n */\n _create() {\n this._clean();\n this.changedOptions = [];\n\n const filter = this.options.filter;\n let counter = 0;\n let show = false;\n for (const option in this.configureOptions) {\n if (Object.prototype.hasOwnProperty.call(this.configureOptions, option)) {\n this.allowCreation = false;\n show = false;\n if (typeof filter === \"function\") {\n show = filter(option, []);\n show =\n show ||\n this._handleObject(this.configureOptions[option], [option], true);\n } else if (filter === true || filter.indexOf(option) !== -1) {\n show = true;\n }\n\n if (show !== false) {\n this.allowCreation = true;\n\n // linebreak between categories\n if (counter > 0) {\n this._makeItem([]);\n }\n // a header for the category\n this._makeHeader(option);\n\n // get the sub options\n this._handleObject(this.configureOptions[option], [option]);\n }\n counter++;\n }\n }\n this._makeButton();\n this._push();\n //~ this.colorPicker.insertTo(this.container);\n }\n\n /**\n * draw all DOM elements on the screen\n *\n * @private\n */\n _push() {\n this.wrapper = document.createElement(\"div\");\n this.wrapper.className = \"vis-configuration-wrapper\";\n this.container.appendChild(this.wrapper);\n for (let i = 0; i < this.domElements.length; i++) {\n this.wrapper.appendChild(this.domElements[i]);\n }\n\n this._showPopupIfNeeded();\n }\n\n /**\n * delete all DOM elements\n *\n * @private\n */\n _clean() {\n for (let i = 0; i < this.domElements.length; i++) {\n this.wrapper.removeChild(this.domElements[i]);\n }\n\n if (this.wrapper !== undefined) {\n this.container.removeChild(this.wrapper);\n this.wrapper = undefined;\n }\n this.domElements = [];\n\n this._removePopup();\n }\n\n /**\n * get the value from the actualOptions if it exists\n *\n * @param {Array} path | where to look for the actual option\n * @returns {*}\n * @private\n */\n _getValue(path) {\n let base = this.moduleOptions;\n for (let i = 0; i < path.length; i++) {\n if (base[path[i]] !== undefined) {\n base = base[path[i]];\n } else {\n base = undefined;\n break;\n }\n }\n return base;\n }\n\n /**\n * all option elements are wrapped in an item\n *\n * @param {Array} path | where to look for the actual option\n * @param {Array.} domElements\n * @returns {number}\n * @private\n */\n _makeItem(path, ...domElements) {\n if (this.allowCreation === true) {\n const item = document.createElement(\"div\");\n item.className =\n \"vis-configuration vis-config-item vis-config-s\" + path.length;\n domElements.forEach((element) => {\n item.appendChild(element);\n });\n this.domElements.push(item);\n return this.domElements.length;\n }\n return 0;\n }\n\n /**\n * header for major subjects\n *\n * @param {string} name\n * @private\n */\n _makeHeader(name) {\n const div = document.createElement(\"div\");\n div.className = \"vis-configuration vis-config-header\";\n div.innerText = name;\n this._makeItem([], div);\n }\n\n /**\n * make a label, if it is an object label, it gets different styling.\n *\n * @param {string} name\n * @param {Array} path | where to look for the actual option\n * @param {string} objectLabel\n * @returns {HTMLElement}\n * @private\n */\n _makeLabel(name, path, objectLabel = false) {\n const div = document.createElement(\"div\");\n div.className =\n \"vis-configuration vis-config-label vis-config-s\" + path.length;\n if (objectLabel === true) {\n while (div.firstChild) {\n div.removeChild(div.firstChild);\n }\n div.appendChild(wrapInTag(\"i\", \"b\", name));\n } else {\n div.innerText = name + \":\";\n }\n return div;\n }\n\n /**\n * make a dropdown list for multiple possible string optoins\n *\n * @param {Array.} arr\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _makeDropdown(arr, value, path) {\n const select = document.createElement(\"select\");\n select.className = \"vis-configuration vis-config-select\";\n let selectedValue = 0;\n if (value !== undefined) {\n if (arr.indexOf(value) !== -1) {\n selectedValue = arr.indexOf(value);\n }\n }\n\n for (let i = 0; i < arr.length; i++) {\n const option = document.createElement(\"option\");\n option.value = arr[i];\n if (i === selectedValue) {\n option.selected = \"selected\";\n }\n option.innerText = arr[i];\n select.appendChild(option);\n }\n\n const me = this;\n select.onchange = function () {\n me._update(this.value, path);\n };\n\n const label = this._makeLabel(path[path.length - 1], path);\n this._makeItem(path, label, select);\n }\n\n /**\n * make a range object for numeric options\n *\n * @param {Array.} arr\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _makeRange(arr, value, path) {\n const defaultValue = arr[0];\n const min = arr[1];\n const max = arr[2];\n const step = arr[3];\n const range = document.createElement(\"input\");\n range.className = \"vis-configuration vis-config-range\";\n try {\n range.type = \"range\"; // not supported on IE9\n range.min = min;\n range.max = max;\n } catch (err) {\n // TODO: Add some error handling.\n }\n range.step = step;\n\n // set up the popup settings in case they are needed.\n let popupString = \"\";\n let popupValue = 0;\n\n if (value !== undefined) {\n const factor = 1.2;\n if (value < 0 && value * factor < min) {\n range.min = Math.ceil(value * factor);\n popupValue = range.min;\n popupString = \"range increased\";\n } else if (value / factor < min) {\n range.min = Math.ceil(value / factor);\n popupValue = range.min;\n popupString = \"range increased\";\n }\n if (value * factor > max && max !== 1) {\n range.max = Math.ceil(value * factor);\n popupValue = range.max;\n popupString = \"range increased\";\n }\n range.value = value;\n } else {\n range.value = defaultValue;\n }\n\n const input = document.createElement(\"input\");\n input.className = \"vis-configuration vis-config-rangeinput\";\n input.value = range.value;\n\n const me = this;\n range.onchange = function () {\n input.value = this.value;\n me._update(Number(this.value), path);\n };\n range.oninput = function () {\n input.value = this.value;\n };\n\n const label = this._makeLabel(path[path.length - 1], path);\n const itemIndex = this._makeItem(path, label, range, input);\n\n // if a popup is needed AND it has not been shown for this value, show it.\n if (popupString !== \"\" && this.popupHistory[itemIndex] !== popupValue) {\n this.popupHistory[itemIndex] = popupValue;\n this._setupPopup(popupString, itemIndex);\n }\n }\n\n /**\n * make a button object\n *\n * @private\n */\n _makeButton() {\n if (this.options.showButton === true) {\n const generateButton = document.createElement(\"div\");\n generateButton.className = \"vis-configuration vis-config-button\";\n generateButton.innerText = \"generate options\";\n generateButton.onclick = () => {\n this._printOptions();\n };\n generateButton.onmouseover = () => {\n generateButton.className = \"vis-configuration vis-config-button hover\";\n };\n generateButton.onmouseout = () => {\n generateButton.className = \"vis-configuration vis-config-button\";\n };\n\n this.optionsContainer = document.createElement(\"div\");\n this.optionsContainer.className =\n \"vis-configuration vis-config-option-container\";\n\n this.domElements.push(this.optionsContainer);\n this.domElements.push(generateButton);\n }\n }\n\n /**\n * prepare the popup\n *\n * @param {string} string\n * @param {number} index\n * @private\n */\n _setupPopup(string, index) {\n if (\n this.initialized === true &&\n this.allowCreation === true &&\n this.popupCounter < this.popupLimit\n ) {\n const div = document.createElement(\"div\");\n div.id = \"vis-configuration-popup\";\n div.className = \"vis-configuration-popup\";\n div.innerText = string;\n div.onclick = () => {\n this._removePopup();\n };\n this.popupCounter += 1;\n this.popupDiv = { html: div, index: index };\n }\n }\n\n /**\n * remove the popup from the dom\n *\n * @private\n */\n _removePopup() {\n if (this.popupDiv.html !== undefined) {\n this.popupDiv.html.parentNode.removeChild(this.popupDiv.html);\n clearTimeout(this.popupDiv.hideTimeout);\n clearTimeout(this.popupDiv.deleteTimeout);\n this.popupDiv = {};\n }\n }\n\n /**\n * Show the popup if it is needed.\n *\n * @private\n */\n _showPopupIfNeeded() {\n if (this.popupDiv.html !== undefined) {\n const correspondingElement = this.domElements[this.popupDiv.index];\n const rect = correspondingElement.getBoundingClientRect();\n this.popupDiv.html.style.left = rect.left + \"px\";\n this.popupDiv.html.style.top = rect.top - 30 + \"px\"; // 30 is the height;\n document.body.appendChild(this.popupDiv.html);\n this.popupDiv.hideTimeout = setTimeout(() => {\n this.popupDiv.html.style.opacity = 0;\n }, 1500);\n this.popupDiv.deleteTimeout = setTimeout(() => {\n this._removePopup();\n }, 1800);\n }\n }\n\n /**\n * make a checkbox for boolean options.\n *\n * @param {number} defaultValue\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _makeCheckbox(defaultValue, value, path) {\n const checkbox = document.createElement(\"input\");\n checkbox.type = \"checkbox\";\n checkbox.className = \"vis-configuration vis-config-checkbox\";\n checkbox.checked = defaultValue;\n if (value !== undefined) {\n checkbox.checked = value;\n if (value !== defaultValue) {\n if (typeof defaultValue === \"object\") {\n if (value !== defaultValue.enabled) {\n this.changedOptions.push({ path: path, value: value });\n }\n } else {\n this.changedOptions.push({ path: path, value: value });\n }\n }\n }\n\n const me = this;\n checkbox.onchange = function () {\n me._update(this.checked, path);\n };\n\n const label = this._makeLabel(path[path.length - 1], path);\n this._makeItem(path, label, checkbox);\n }\n\n /**\n * make a text input field for string options.\n *\n * @param {number} defaultValue\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _makeTextInput(defaultValue, value, path) {\n const checkbox = document.createElement(\"input\");\n checkbox.type = \"text\";\n checkbox.className = \"vis-configuration vis-config-text\";\n checkbox.value = value;\n if (value !== defaultValue) {\n this.changedOptions.push({ path: path, value: value });\n }\n\n const me = this;\n checkbox.onchange = function () {\n me._update(this.value, path);\n };\n\n const label = this._makeLabel(path[path.length - 1], path);\n this._makeItem(path, label, checkbox);\n }\n\n /**\n * make a color field with a color picker for color fields\n *\n * @param {Array.} arr\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _makeColorField(arr, value, path) {\n const defaultColor = arr[1];\n const div = document.createElement(\"div\");\n value = value === undefined ? defaultColor : value;\n\n if (value !== \"none\") {\n div.className = \"vis-configuration vis-config-colorBlock\";\n div.style.backgroundColor = value;\n } else {\n div.className = \"vis-configuration vis-config-colorBlock none\";\n }\n\n value = value === undefined ? defaultColor : value;\n div.onclick = () => {\n this._showColorPicker(value, div, path);\n };\n\n const label = this._makeLabel(path[path.length - 1], path);\n this._makeItem(path, label, div);\n }\n\n /**\n * used by the color buttons to call the color picker.\n *\n * @param {number} value\n * @param {HTMLElement} div\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _showColorPicker(value, div, path) {\n // clear the callback from this div\n div.onclick = function () {};\n\n this.colorPicker.insertTo(div);\n this.colorPicker.show();\n\n this.colorPicker.setColor(value);\n this.colorPicker.setUpdateCallback((color) => {\n const colorString =\n \"rgba(\" + color.r + \",\" + color.g + \",\" + color.b + \",\" + color.a + \")\";\n div.style.backgroundColor = colorString;\n this._update(colorString, path);\n });\n\n // on close of the colorpicker, restore the callback.\n this.colorPicker.setCloseCallback(() => {\n div.onclick = () => {\n this._showColorPicker(value, div, path);\n };\n });\n }\n\n /**\n * parse an object and draw the correct items\n *\n * @param {object} obj\n * @param {Array} [path=[]] | where to look for the actual option\n * @param {boolean} [checkOnly=false]\n * @returns {boolean}\n * @private\n */\n _handleObject(obj, path = [], checkOnly = false) {\n let show = false;\n const filter = this.options.filter;\n let visibleInSet = false;\n for (const subObj in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, subObj)) {\n show = true;\n const item = obj[subObj];\n const newPath = copyAndExtendArray(path, subObj);\n if (typeof filter === \"function\") {\n show = filter(subObj, path);\n\n // if needed we must go deeper into the object.\n if (show === false) {\n if (\n !Array.isArray(item) &&\n typeof item !== \"string\" &&\n typeof item !== \"boolean\" &&\n item instanceof Object\n ) {\n this.allowCreation = false;\n show = this._handleObject(item, newPath, true);\n this.allowCreation = checkOnly === false;\n }\n }\n }\n\n if (show !== false) {\n visibleInSet = true;\n const value = this._getValue(newPath);\n\n if (Array.isArray(item)) {\n this._handleArray(item, value, newPath);\n } else if (typeof item === \"string\") {\n this._makeTextInput(item, value, newPath);\n } else if (typeof item === \"boolean\") {\n this._makeCheckbox(item, value, newPath);\n } else if (item instanceof Object) {\n // skip the options that are not enabled\n if (!this.hideOption(path, subObj, this.moduleOptions)) {\n // initially collapse options with an disabled enabled option.\n if (item.enabled !== undefined) {\n const enabledPath = copyAndExtendArray(newPath, \"enabled\");\n const enabledValue = this._getValue(enabledPath);\n if (enabledValue === true) {\n const label = this._makeLabel(subObj, newPath, true);\n this._makeItem(newPath, label);\n visibleInSet =\n this._handleObject(item, newPath) || visibleInSet;\n } else {\n this._makeCheckbox(item, enabledValue, newPath);\n }\n } else {\n const label = this._makeLabel(subObj, newPath, true);\n this._makeItem(newPath, label);\n visibleInSet =\n this._handleObject(item, newPath) || visibleInSet;\n }\n }\n } else {\n console.error(\"dont know how to handle\", item, subObj, newPath);\n }\n }\n }\n }\n return visibleInSet;\n }\n\n /**\n * handle the array type of option\n *\n * @param {Array.} arr\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _handleArray(arr, value, path) {\n if (typeof arr[0] === \"string\" && arr[0] === \"color\") {\n this._makeColorField(arr, value, path);\n if (arr[1] !== value) {\n this.changedOptions.push({ path: path, value: value });\n }\n } else if (typeof arr[0] === \"string\") {\n this._makeDropdown(arr, value, path);\n if (arr[0] !== value) {\n this.changedOptions.push({ path: path, value: value });\n }\n } else if (typeof arr[0] === \"number\") {\n this._makeRange(arr, value, path);\n if (arr[0] !== value) {\n this.changedOptions.push({ path: path, value: Number(value) });\n }\n }\n }\n\n /**\n * called to update the network with the new settings.\n *\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _update(value, path) {\n const options = this._constructOptions(value, path);\n\n if (\n this.parent.body &&\n this.parent.body.emitter &&\n this.parent.body.emitter.emit\n ) {\n this.parent.body.emitter.emit(\"configChange\", options);\n }\n this.initialized = true;\n this.parent.setOptions(options);\n }\n\n /**\n *\n * @param {string | boolean} value\n * @param {Array.} path\n * @param {{}} optionsObj\n * @returns {{}}\n * @private\n */\n _constructOptions(value, path, optionsObj = {}) {\n let pointer = optionsObj;\n\n // when dropdown boxes can be string or boolean, we typecast it into correct types\n value = value === \"true\" ? true : value;\n value = value === \"false\" ? false : value;\n\n for (let i = 0; i < path.length; i++) {\n if (path[i] !== \"global\") {\n if (pointer[path[i]] === undefined) {\n pointer[path[i]] = {};\n }\n if (i !== path.length - 1) {\n pointer = pointer[path[i]];\n } else {\n pointer[path[i]] = value;\n }\n }\n }\n return optionsObj;\n }\n\n /**\n * @private\n */\n _printOptions() {\n const options = this.getOptions();\n\n while (this.optionsContainer.firstChild) {\n this.optionsContainer.removeChild(this.optionsContainer.firstChild);\n }\n this.optionsContainer.appendChild(\n wrapInTag(\"pre\", \"const options = \" + JSON.stringify(options, null, 2))\n );\n }\n\n /**\n *\n * @returns {{}} options\n */\n getOptions() {\n const options = {};\n for (let i = 0; i < this.changedOptions.length; i++) {\n this._constructOptions(\n this.changedOptions[i].value,\n this.changedOptions[i].path,\n options\n );\n }\n return options;\n }\n};\n\n/**\n * Popup is a class to create a popup window with some text\n */\nlet Popup$1 = class Popup {\n /**\n * @param {Element} container The container object.\n * @param {string} overflowMethod How the popup should act to overflowing ('flip' or 'cap')\n */\n constructor(container, overflowMethod) {\n this.container = container;\n this.overflowMethod = overflowMethod || \"cap\";\n\n this.x = 0;\n this.y = 0;\n this.padding = 5;\n this.hidden = false;\n\n // create the frame\n this.frame = document.createElement(\"div\");\n this.frame.className = \"vis-tooltip\";\n this.container.appendChild(this.frame);\n }\n\n /**\n * @param {number} x Horizontal position of the popup window\n * @param {number} y Vertical position of the popup window\n */\n setPosition(x, y) {\n this.x = parseInt(x);\n this.y = parseInt(y);\n }\n\n /**\n * Set the content for the popup window. This can be HTML code or text.\n *\n * @param {string | Element} content\n */\n setText(content) {\n if (content instanceof Element) {\n while (this.frame.firstChild) {\n this.frame.removeChild(this.frame.firstChild);\n }\n this.frame.appendChild(content);\n } else {\n // String containing literal text, element has to be used for HTML due to\n // XSS risks associated with innerHTML (i.e. prevent XSS by accident).\n this.frame.innerText = content;\n }\n }\n\n /**\n * Show the popup window\n *\n * @param {boolean} [doShow] Show or hide the window\n */\n show(doShow) {\n if (doShow === undefined) {\n doShow = true;\n }\n\n if (doShow === true) {\n const height = this.frame.clientHeight;\n const width = this.frame.clientWidth;\n const maxHeight = this.frame.parentNode.clientHeight;\n const maxWidth = this.frame.parentNode.clientWidth;\n\n let left = 0,\n top = 0;\n\n if (this.overflowMethod == \"flip\") {\n let isLeft = false,\n isTop = true; // Where around the position it's located\n\n if (this.y - height < this.padding) {\n isTop = false;\n }\n\n if (this.x + width > maxWidth - this.padding) {\n isLeft = true;\n }\n\n if (isLeft) {\n left = this.x - width;\n } else {\n left = this.x;\n }\n\n if (isTop) {\n top = this.y - height;\n } else {\n top = this.y;\n }\n } else {\n top = this.y - height;\n if (top + height + this.padding > maxHeight) {\n top = maxHeight - height - this.padding;\n }\n if (top < this.padding) {\n top = this.padding;\n }\n\n left = this.x;\n if (left + width + this.padding > maxWidth) {\n left = maxWidth - width - this.padding;\n }\n if (left < this.padding) {\n left = this.padding;\n }\n }\n\n this.frame.style.left = left + \"px\";\n this.frame.style.top = top + \"px\";\n this.frame.style.visibility = \"visible\";\n this.hidden = false;\n } else {\n this.hide();\n }\n }\n\n /**\n * Hide the popup window\n */\n hide() {\n this.hidden = true;\n this.frame.style.left = \"0\";\n this.frame.style.top = \"0\";\n this.frame.style.visibility = \"hidden\";\n }\n\n /**\n * Remove the popup window\n */\n destroy() {\n this.frame.parentNode.removeChild(this.frame); // Remove element from DOM\n }\n};\n\nlet errorFound = false;\nlet allOptions;\n\nconst VALIDATOR_PRINT_STYLE$1 = \"background: #FFeeee; color: #dd0000\";\n\n/**\n * Used to validate options.\n */\nlet Validator$1 = class Validator {\n /**\n * Main function to be called\n *\n * @param {object} options\n * @param {object} referenceOptions\n * @param {object} subObject\n * @returns {boolean}\n * @static\n */\n static validate(options, referenceOptions, subObject) {\n errorFound = false;\n allOptions = referenceOptions;\n let usedOptions = referenceOptions;\n if (subObject !== undefined) {\n usedOptions = referenceOptions[subObject];\n }\n Validator.parse(options, usedOptions, []);\n return errorFound;\n }\n\n /**\n * Will traverse an object recursively and check every value\n *\n * @param {object} options\n * @param {object} referenceOptions\n * @param {Array} path | where to look for the actual option\n * @static\n */\n static parse(options, referenceOptions, path) {\n for (const option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option)) {\n Validator.check(option, options, referenceOptions, path);\n }\n }\n }\n\n /**\n * Check every value. If the value is an object, call the parse function on that object.\n *\n * @param {string} option\n * @param {object} options\n * @param {object} referenceOptions\n * @param {Array} path | where to look for the actual option\n * @static\n */\n static check(option, options, referenceOptions, path) {\n if (\n referenceOptions[option] === undefined &&\n referenceOptions.__any__ === undefined\n ) {\n Validator.getSuggestion(option, referenceOptions, path);\n return;\n }\n\n let referenceOption = option;\n let is_object = true;\n\n if (\n referenceOptions[option] === undefined &&\n referenceOptions.__any__ !== undefined\n ) {\n // NOTE: This only triggers if the __any__ is in the top level of the options object.\n // THAT'S A REALLY BAD PLACE TO ALLOW IT!!!!\n // TODO: Examine if needed, remove if possible\n\n // __any__ is a wildcard. Any value is accepted and will be further analysed by reference.\n referenceOption = \"__any__\";\n\n // if the any-subgroup is not a predefined object in the configurator,\n // we do not look deeper into the object.\n is_object = Validator.getType(options[option]) === \"object\";\n }\n\n let refOptionObj = referenceOptions[referenceOption];\n if (is_object && refOptionObj.__type__ !== undefined) {\n refOptionObj = refOptionObj.__type__;\n }\n\n Validator.checkFields(\n option,\n options,\n referenceOptions,\n referenceOption,\n refOptionObj,\n path\n );\n }\n\n /**\n *\n * @param {string} option | the option property\n * @param {object} options | The supplied options object\n * @param {object} referenceOptions | The reference options containing all options and their allowed formats\n * @param {string} referenceOption | Usually this is the same as option, except when handling an __any__ tag.\n * @param {string} refOptionObj | This is the type object from the reference options\n * @param {Array} path | where in the object is the option\n * @static\n */\n static checkFields(\n option,\n options,\n referenceOptions,\n referenceOption,\n refOptionObj,\n path\n ) {\n const log = function (message) {\n console.error(\n \"%c\" + message + Validator.printLocation(path, option),\n VALIDATOR_PRINT_STYLE$1\n );\n };\n\n const optionType = Validator.getType(options[option]);\n const refOptionType = refOptionObj[optionType];\n\n if (refOptionType !== undefined) {\n // if the type is correct, we check if it is supposed to be one of a few select values\n if (\n Validator.getType(refOptionType) === \"array\" &&\n refOptionType.indexOf(options[option]) === -1\n ) {\n log(\n 'Invalid option detected in \"' +\n option +\n '\".' +\n \" Allowed values are:\" +\n Validator.print(refOptionType) +\n ' not \"' +\n options[option] +\n '\". '\n );\n errorFound = true;\n } else if (optionType === \"object\" && referenceOption !== \"__any__\") {\n path = copyAndExtendArray(path, option);\n Validator.parse(\n options[option],\n referenceOptions[referenceOption],\n path\n );\n }\n } else if (refOptionObj[\"any\"] === undefined) {\n // type of the field is incorrect and the field cannot be any\n log(\n 'Invalid type received for \"' +\n option +\n '\". Expected: ' +\n Validator.print(Object.keys(refOptionObj)) +\n \". Received [\" +\n optionType +\n '] \"' +\n options[option] +\n '\"'\n );\n errorFound = true;\n }\n }\n\n /**\n *\n * @param {object | boolean | number | string | Array. | Date | Node | Moment | undefined | null} object\n * @returns {string}\n * @static\n */\n static getType(object) {\n const type = typeof object;\n\n if (type === \"object\") {\n if (object === null) {\n return \"null\";\n }\n if (object instanceof Boolean) {\n return \"boolean\";\n }\n if (object instanceof Number) {\n return \"number\";\n }\n if (object instanceof String) {\n return \"string\";\n }\n if (Array.isArray(object)) {\n return \"array\";\n }\n if (object instanceof Date) {\n return \"date\";\n }\n if (object.nodeType !== undefined) {\n return \"dom\";\n }\n if (object._isAMomentObject === true) {\n return \"moment\";\n }\n return \"object\";\n } else if (type === \"number\") {\n return \"number\";\n } else if (type === \"boolean\") {\n return \"boolean\";\n } else if (type === \"string\") {\n return \"string\";\n } else if (type === undefined) {\n return \"undefined\";\n }\n return type;\n }\n\n /**\n * @param {string} option\n * @param {object} options\n * @param {Array.} path\n * @static\n */\n static getSuggestion(option, options, path) {\n const localSearch = Validator.findInOptions(option, options, path, false);\n const globalSearch = Validator.findInOptions(option, allOptions, [], true);\n\n const localSearchThreshold = 8;\n const globalSearchThreshold = 4;\n\n let msg;\n if (localSearch.indexMatch !== undefined) {\n msg =\n \" in \" +\n Validator.printLocation(localSearch.path, option, \"\") +\n 'Perhaps it was incomplete? Did you mean: \"' +\n localSearch.indexMatch +\n '\"?\\n\\n';\n } else if (\n globalSearch.distance <= globalSearchThreshold &&\n localSearch.distance > globalSearch.distance\n ) {\n msg =\n \" in \" +\n Validator.printLocation(localSearch.path, option, \"\") +\n \"Perhaps it was misplaced? Matching option found at: \" +\n Validator.printLocation(\n globalSearch.path,\n globalSearch.closestMatch,\n \"\"\n );\n } else if (localSearch.distance <= localSearchThreshold) {\n msg =\n '. Did you mean \"' +\n localSearch.closestMatch +\n '\"?' +\n Validator.printLocation(localSearch.path, option);\n } else {\n msg =\n \". Did you mean one of these: \" +\n Validator.print(Object.keys(options)) +\n Validator.printLocation(path, option);\n }\n\n console.error(\n '%cUnknown option detected: \"' + option + '\"' + msg,\n VALIDATOR_PRINT_STYLE$1\n );\n errorFound = true;\n }\n\n /**\n * traverse the options in search for a match.\n *\n * @param {string} option\n * @param {object} options\n * @param {Array} path | where to look for the actual option\n * @param {boolean} [recursive=false]\n * @returns {{closestMatch: string, path: Array, distance: number}}\n * @static\n */\n static findInOptions(option, options, path, recursive = false) {\n let min = 1e9;\n let closestMatch = \"\";\n let closestMatchPath = [];\n const lowerCaseOption = option.toLowerCase();\n let indexMatch = undefined;\n for (const op in options) {\n let distance;\n if (options[op].__type__ !== undefined && recursive === true) {\n const result = Validator.findInOptions(\n option,\n options[op],\n copyAndExtendArray(path, op)\n );\n if (min > result.distance) {\n closestMatch = result.closestMatch;\n closestMatchPath = result.path;\n min = result.distance;\n indexMatch = result.indexMatch;\n }\n } else {\n if (op.toLowerCase().indexOf(lowerCaseOption) !== -1) {\n indexMatch = op;\n }\n distance = Validator.levenshteinDistance(option, op);\n if (min > distance) {\n closestMatch = op;\n closestMatchPath = copyArray(path);\n min = distance;\n }\n }\n }\n return {\n closestMatch: closestMatch,\n path: closestMatchPath,\n distance: min,\n indexMatch: indexMatch,\n };\n }\n\n /**\n * @param {Array.} path\n * @param {object} option\n * @param {string} prefix\n * @returns {string}\n * @static\n */\n static printLocation(path, option, prefix = \"Problem value found at: \\n\") {\n let str = \"\\n\\n\" + prefix + \"options = {\\n\";\n for (let i = 0; i < path.length; i++) {\n for (let j = 0; j < i + 1; j++) {\n str += \" \";\n }\n str += path[i] + \": {\\n\";\n }\n for (let j = 0; j < path.length + 1; j++) {\n str += \" \";\n }\n str += option + \"\\n\";\n for (let i = 0; i < path.length + 1; i++) {\n for (let j = 0; j < path.length - i; j++) {\n str += \" \";\n }\n str += \"}\\n\";\n }\n return str + \"\\n\\n\";\n }\n\n /**\n * @param {object} options\n * @returns {string}\n * @static\n */\n static print(options) {\n return JSON.stringify(options)\n .replace(/(\")|(\\[)|(\\])|(,\"__type__\")/g, \"\")\n .replace(/(,)/g, \", \");\n }\n\n /**\n * Compute the edit distance between the two given strings\n * http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#JavaScript\n *\n * Copyright (c) 2011 Andrei Mackenzie\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @param {string} a\n * @param {string} b\n * @returns {Array.>}}\n * @static\n */\n static levenshteinDistance(a, b) {\n if (a.length === 0) return b.length;\n if (b.length === 0) return a.length;\n\n const matrix = [];\n\n // increment along the first column of each row\n let i;\n for (i = 0; i <= b.length; i++) {\n matrix[i] = [i];\n }\n\n // increment each column in the first row\n let j;\n for (j = 0; j <= a.length; j++) {\n matrix[0][j] = j;\n }\n\n // Fill in the rest of the matrix\n for (i = 1; i <= b.length; i++) {\n for (j = 1; j <= a.length; j++) {\n if (b.charAt(i - 1) == a.charAt(j - 1)) {\n matrix[i][j] = matrix[i - 1][j - 1];\n } else {\n matrix[i][j] = Math.min(\n matrix[i - 1][j - 1] + 1, // substitution\n Math.min(\n matrix[i][j - 1] + 1, // insertion\n matrix[i - 1][j] + 1\n )\n ); // deletion\n }\n }\n }\n\n return matrix[b.length][a.length];\n }\n};\n\nconst Activator = Activator$1;\r\nconst ColorPicker = ColorPicker$1;\r\nconst Configurator = Configurator$1;\r\nconst Hammer = Hammer$1;\r\nconst Popup = Popup$1;\r\nconst VALIDATOR_PRINT_STYLE = VALIDATOR_PRINT_STYLE$1;\r\nconst Validator = Validator$1;\n\nexport { Activator, Alea, ColorPicker, Configurator, DELETE, HSVToHex, HSVToRGB, Hammer, Popup, RGBToHSV, RGBToHex, VALIDATOR_PRINT_STYLE, Validator, addClassName, addCssText, addEventListener, binarySearchCustom, binarySearchValue, bridgeObject, copyAndExtendArray, copyArray, deepExtend, deepObjectAssign, easingFunctions, equalArray, extend, fillIfDefined, forEach, getAbsoluteLeft, getAbsoluteRight, getAbsoluteTop, getScrollBarWidth, getTarget, getType, hasParent, hexToHSV, hexToRGB, insertSort, isDate, isNumber, isObject, isString, isValidHex, isValidRGB, isValidRGBA, mergeOptions, option, overrideOpacity, parseColor, preventDefault, pureDeepObjectAssign, recursiveDOMDelete, removeClassName, removeCssText, removeEventListener, selectiveBridgeObject, selectiveDeepExtend, selectiveExtend, selectiveNotDeepExtend, throttle, toArray, topMost, updateProperty };\n//# sourceMappingURL=vis-util.js.map\n","/* eslint-disable no-prototype-builtins */\n/* eslint-disable no-unused-vars */\n/* eslint-disable no-var */\n\n/**\n * Parse a text source containing data in DOT language into a JSON object.\n * The object contains two lists: one with nodes and one with edges.\n *\n * DOT language reference: http://www.graphviz.org/doc/info/lang.html\n *\n * DOT language attributes: http://graphviz.org/content/attrs\n *\n * @param {string} data Text containing a graph in DOT-notation\n * @returns {object} graph An object containing two parameters:\n * {Object[]} nodes\n * {Object[]} edges\n *\n * -------------------------------------------\n * TODO\n * ====\n *\n * For label handling, this is an incomplete implementation. From docs (quote #3015):\n *\n * > the escape sequences \"\\n\", \"\\l\" and \"\\r\" divide the label into lines, centered,\n * > left-justified, and right-justified, respectively.\n *\n * Source: http://www.graphviz.org/content/attrs#kescString\n *\n * > As another aid for readability, dot allows double-quoted strings to span multiple physical\n * > lines using the standard C convention of a backslash immediately preceding a newline\n * > character\n * > In addition, double-quoted strings can be concatenated using a '+' operator.\n * > As HTML strings can contain newline characters, which are used solely for formatting,\n * > the language does not allow escaped newlines or concatenation operators to be used\n * > within them.\n *\n * - Currently, only '\\\\n' is handled\n * - Note that text explicitly says 'labels'; the dot parser currently handles escape\n * sequences in **all** strings.\n */\nexport function parseDOT(data) {\n dot = data;\n return parseGraph();\n}\n\n// mapping of attributes from DOT (the keys) to vis.js (the values)\nvar NODE_ATTR_MAPPING = {\n fontsize: \"font.size\",\n fontcolor: \"font.color\",\n labelfontcolor: \"font.color\",\n fontname: \"font.face\",\n color: [\"color.border\", \"color.background\"],\n fillcolor: \"color.background\",\n tooltip: \"title\",\n labeltooltip: \"title\",\n};\nvar EDGE_ATTR_MAPPING = Object.create(NODE_ATTR_MAPPING);\nEDGE_ATTR_MAPPING.color = \"color.color\";\nEDGE_ATTR_MAPPING.style = \"dashes\";\n\n// token types enumeration\nvar TOKENTYPE = {\n NULL: 0,\n DELIMITER: 1,\n IDENTIFIER: 2,\n UNKNOWN: 3,\n};\n\n// map with all delimiters\nvar DELIMITERS = {\n \"{\": true,\n \"}\": true,\n \"[\": true,\n \"]\": true,\n \";\": true,\n \"=\": true,\n \",\": true,\n\n \"->\": true,\n \"--\": true,\n};\n\nvar dot = \"\"; // current dot file\nvar index = 0; // current index in dot file\nvar c = \"\"; // current token character in expr\nvar token = \"\"; // current token\nvar tokenType = TOKENTYPE.NULL; // type of the token\n\n/**\n * Get the first character from the dot file.\n * The character is stored into the char c. If the end of the dot file is\n * reached, the function puts an empty string in c.\n */\nfunction first() {\n index = 0;\n c = dot.charAt(0);\n}\n\n/**\n * Get the next character from the dot file.\n * The character is stored into the char c. If the end of the dot file is\n * reached, the function puts an empty string in c.\n */\nfunction next() {\n index++;\n c = dot.charAt(index);\n}\n\n/**\n * Preview the next character from the dot file.\n *\n * @returns {string} cNext\n */\nfunction nextPreview() {\n return dot.charAt(index + 1);\n}\n\n/**\n * Test whether given character is alphabetic or numeric ( a-zA-Z_0-9.:# )\n *\n * @param {string} c\n * @returns {boolean} isAlphaNumeric\n */\nfunction isAlphaNumeric(c) {\n var charCode = c.charCodeAt(0);\n\n if (charCode < 47) {\n // #.\n return charCode === 35 || charCode === 46;\n }\n if (charCode < 59) {\n // 0-9 and :\n return charCode > 47;\n }\n if (charCode < 91) {\n // A-Z\n return charCode > 64;\n }\n if (charCode < 96) {\n // _\n return charCode === 95;\n }\n if (charCode < 123) {\n // a-z\n return charCode > 96;\n }\n\n return false;\n}\n\n/**\n * Merge all options of object b into object b\n *\n * @param {object} a\n * @param {object} b\n * @returns {object} a\n */\nfunction merge(a, b) {\n if (!a) {\n a = {};\n }\n\n if (b) {\n for (var name in b) {\n if (b.hasOwnProperty(name)) {\n a[name] = b[name];\n }\n }\n }\n return a;\n}\n\n/**\n * Set a value in an object, where the provided parameter name can be a\n * path with nested parameters. For example:\n *\n * var obj = {a: 2};\n * setValue(obj, 'b.c', 3); // obj = {a: 2, b: {c: 3}}\n *\n * @param {object} obj\n * @param {string} path A parameter name or dot-separated parameter path,\n * like \"color.highlight.border\".\n * @param {*} value\n */\nfunction setValue(obj, path, value) {\n var keys = path.split(\".\");\n var o = obj;\n while (keys.length) {\n var key = keys.shift();\n if (keys.length) {\n // this isn't the end point\n if (!o[key]) {\n o[key] = {};\n }\n o = o[key];\n } else {\n // this is the end point\n o[key] = value;\n }\n }\n}\n\n/**\n * Add a node to a graph object. If there is already a node with\n * the same id, their attributes will be merged.\n *\n * @param {object} graph\n * @param {object} node\n */\nfunction addNode(graph, node) {\n var i, len;\n var current = null;\n\n // find root graph (in case of subgraph)\n var graphs = [graph]; // list with all graphs from current graph to root graph\n var root = graph;\n while (root.parent) {\n graphs.push(root.parent);\n root = root.parent;\n }\n\n // find existing node (at root level) by its id\n if (root.nodes) {\n for (i = 0, len = root.nodes.length; i < len; i++) {\n if (node.id === root.nodes[i].id) {\n current = root.nodes[i];\n break;\n }\n }\n }\n\n if (!current) {\n // this is a new node\n current = {\n id: node.id,\n };\n if (graph.node) {\n // clone default attributes\n current.attr = merge(current.attr, graph.node);\n }\n }\n\n // add node to this (sub)graph and all its parent graphs\n for (i = graphs.length - 1; i >= 0; i--) {\n var g = graphs[i];\n\n if (!g.nodes) {\n g.nodes = [];\n }\n if (g.nodes.indexOf(current) === -1) {\n g.nodes.push(current);\n }\n }\n\n // merge attributes\n if (node.attr) {\n current.attr = merge(current.attr, node.attr);\n }\n}\n\n/**\n * Add an edge to a graph object\n *\n * @param {object} graph\n * @param {object} edge\n */\nfunction addEdge(graph, edge) {\n if (!graph.edges) {\n graph.edges = [];\n }\n graph.edges.push(edge);\n if (graph.edge) {\n var attr = merge({}, graph.edge); // clone default attributes\n edge.attr = merge(attr, edge.attr); // merge attributes\n }\n}\n\n/**\n * Create an edge to a graph object\n *\n * @param {object} graph\n * @param {string | number | object} from\n * @param {string | number | object} to\n * @param {string} type\n * @param {object | null} attr\n * @returns {object} edge\n */\nfunction createEdge(graph, from, to, type, attr) {\n var edge = {\n from: from,\n to: to,\n type: type,\n };\n\n if (graph.edge) {\n edge.attr = merge({}, graph.edge); // clone default attributes\n }\n edge.attr = merge(edge.attr || {}, attr); // merge attributes\n\n // Move arrows attribute from attr to edge temporally created in\n // parseAttributeList().\n if (attr != null) {\n if (attr.hasOwnProperty(\"arrows\") && attr[\"arrows\"] != null) {\n edge[\"arrows\"] = { to: { enabled: true, type: attr.arrows.type } };\n attr[\"arrows\"] = null;\n }\n }\n return edge;\n}\n\n/**\n * Get next token in the current dot file.\n * The token and token type are available as token and tokenType\n */\nfunction getToken() {\n tokenType = TOKENTYPE.NULL;\n token = \"\";\n\n // skip over whitespaces\n while (c === \" \" || c === \"\\t\" || c === \"\\n\" || c === \"\\r\") {\n // space, tab, enter\n next();\n }\n\n do {\n var isComment = false;\n\n // skip comment\n if (c === \"#\") {\n // find the previous non-space character\n var i = index - 1;\n while (dot.charAt(i) === \" \" || dot.charAt(i) === \"\\t\") {\n i--;\n }\n if (dot.charAt(i) === \"\\n\" || dot.charAt(i) === \"\") {\n // the # is at the start of a line, this is indeed a line comment\n while (c != \"\" && c != \"\\n\") {\n next();\n }\n isComment = true;\n }\n }\n if (c === \"/\" && nextPreview() === \"/\") {\n // skip line comment\n while (c != \"\" && c != \"\\n\") {\n next();\n }\n isComment = true;\n }\n if (c === \"/\" && nextPreview() === \"*\") {\n // skip block comment\n while (c != \"\") {\n if (c === \"*\" && nextPreview() === \"/\") {\n // end of block comment found. skip these last two characters\n next();\n next();\n break;\n } else {\n next();\n }\n }\n isComment = true;\n }\n\n // skip over whitespaces\n while (c === \" \" || c === \"\\t\" || c === \"\\n\" || c === \"\\r\") {\n // space, tab, enter\n next();\n }\n } while (isComment);\n\n // check for end of dot file\n if (c === \"\") {\n // token is still empty\n tokenType = TOKENTYPE.DELIMITER;\n return;\n }\n\n // check for delimiters consisting of 2 characters\n var c2 = c + nextPreview();\n if (DELIMITERS[c2]) {\n tokenType = TOKENTYPE.DELIMITER;\n token = c2;\n next();\n next();\n return;\n }\n\n // check for delimiters consisting of 1 character\n if (DELIMITERS[c]) {\n tokenType = TOKENTYPE.DELIMITER;\n token = c;\n next();\n return;\n }\n\n // check for an identifier (number or string)\n // TODO: more precise parsing of numbers/strings (and the port separator ':')\n if (isAlphaNumeric(c) || c === \"-\") {\n token += c;\n next();\n\n while (isAlphaNumeric(c)) {\n token += c;\n next();\n }\n if (token === \"false\") {\n token = false; // convert to boolean\n } else if (token === \"true\") {\n token = true; // convert to boolean\n } else if (!isNaN(Number(token))) {\n token = Number(token); // convert to number\n }\n tokenType = TOKENTYPE.IDENTIFIER;\n return;\n }\n\n // check for a string enclosed by double quotes\n if (c === '\"') {\n next();\n while (c != \"\" && (c != '\"' || (c === '\"' && nextPreview() === '\"'))) {\n if (c === '\"') {\n // skip the escape character\n token += c;\n next();\n } else if (c === \"\\\\\" && nextPreview() === \"n\") {\n // Honor a newline escape sequence\n token += \"\\n\";\n next();\n } else {\n token += c;\n }\n next();\n }\n if (c != '\"') {\n throw newSyntaxError('End of string \" expected');\n }\n next();\n tokenType = TOKENTYPE.IDENTIFIER;\n return;\n }\n\n // something unknown is found, wrong characters, a syntax error\n tokenType = TOKENTYPE.UNKNOWN;\n while (c != \"\") {\n token += c;\n next();\n }\n throw new SyntaxError('Syntax error in part \"' + chop(token, 30) + '\"');\n}\n\n/**\n * Parse a graph.\n *\n * @returns {object} graph\n */\nfunction parseGraph() {\n var graph = {};\n\n first();\n getToken();\n\n // optional strict keyword\n if (token === \"strict\") {\n graph.strict = true;\n getToken();\n }\n\n // graph or digraph keyword\n if (token === \"graph\" || token === \"digraph\") {\n graph.type = token;\n getToken();\n }\n\n // optional graph id\n if (tokenType === TOKENTYPE.IDENTIFIER) {\n graph.id = token;\n getToken();\n }\n\n // open angle bracket\n if (token != \"{\") {\n throw newSyntaxError(\"Angle bracket { expected\");\n }\n getToken();\n\n // statements\n parseStatements(graph);\n\n // close angle bracket\n if (token != \"}\") {\n throw newSyntaxError(\"Angle bracket } expected\");\n }\n getToken();\n\n // end of file\n if (token !== \"\") {\n throw newSyntaxError(\"End of file expected\");\n }\n getToken();\n\n // remove temporary default options\n delete graph.node;\n delete graph.edge;\n delete graph.graph;\n\n return graph;\n}\n\n/**\n * Parse a list with statements.\n *\n * @param {object} graph\n */\nfunction parseStatements(graph) {\n while (token !== \"\" && token != \"}\") {\n parseStatement(graph);\n if (token === \";\") {\n getToken();\n }\n }\n}\n\n/**\n * Parse a single statement. Can be a an attribute statement, node\n * statement, a series of node statements and edge statements, or a\n * parameter.\n *\n * @param {object} graph\n */\nfunction parseStatement(graph) {\n // parse subgraph\n var subgraph = parseSubgraph(graph);\n if (subgraph) {\n // edge statements\n parseEdge(graph, subgraph);\n\n return;\n }\n\n // parse an attribute statement\n var attr = parseAttributeStatement(graph);\n if (attr) {\n return;\n }\n\n // parse node\n if (tokenType != TOKENTYPE.IDENTIFIER) {\n throw newSyntaxError(\"Identifier expected\");\n }\n var id = token; // id can be a string or a number\n getToken();\n\n if (token === \"=\") {\n // id statement\n getToken();\n if (tokenType != TOKENTYPE.IDENTIFIER) {\n throw newSyntaxError(\"Identifier expected\");\n }\n graph[id] = token;\n getToken();\n // TODO: implement comma separated list with \"a_list: ID=ID [','] [a_list] \"\n } else {\n parseNodeStatement(graph, id);\n }\n}\n\n/**\n * Parse a subgraph\n *\n * @param {object} graph parent graph object\n * @returns {object | null} subgraph\n */\nfunction parseSubgraph(graph) {\n var subgraph = null;\n\n // optional subgraph keyword\n if (token === \"subgraph\") {\n subgraph = {};\n subgraph.type = \"subgraph\";\n getToken();\n\n // optional graph id\n if (tokenType === TOKENTYPE.IDENTIFIER) {\n subgraph.id = token;\n getToken();\n }\n }\n\n // open angle bracket\n if (token === \"{\") {\n getToken();\n\n if (!subgraph) {\n subgraph = {};\n }\n subgraph.parent = graph;\n subgraph.node = graph.node;\n subgraph.edge = graph.edge;\n subgraph.graph = graph.graph;\n\n // statements\n parseStatements(subgraph);\n\n // close angle bracket\n if (token != \"}\") {\n throw newSyntaxError(\"Angle bracket } expected\");\n }\n getToken();\n\n // remove temporary default options\n delete subgraph.node;\n delete subgraph.edge;\n delete subgraph.graph;\n delete subgraph.parent;\n\n // register at the parent graph\n if (!graph.subgraphs) {\n graph.subgraphs = [];\n }\n graph.subgraphs.push(subgraph);\n }\n\n return subgraph;\n}\n\n/**\n * parse an attribute statement like \"node [shape=circle fontSize=16]\".\n * Available keywords are 'node', 'edge', 'graph'.\n * The previous list with default attributes will be replaced\n *\n * @param {object} graph\n * @returns {string | null} keyword Returns the name of the parsed attribute\n * (node, edge, graph), or null if nothing\n * is parsed.\n */\nfunction parseAttributeStatement(graph) {\n // attribute statements\n if (token === \"node\") {\n getToken();\n\n // node attributes\n graph.node = parseAttributeList();\n return \"node\";\n } else if (token === \"edge\") {\n getToken();\n\n // edge attributes\n graph.edge = parseAttributeList();\n return \"edge\";\n } else if (token === \"graph\") {\n getToken();\n\n // graph attributes\n graph.graph = parseAttributeList();\n return \"graph\";\n }\n\n return null;\n}\n\n/**\n * parse a node statement\n *\n * @param {object} graph\n * @param {string | number} id\n */\nfunction parseNodeStatement(graph, id) {\n // node statement\n var node = {\n id: id,\n };\n var attr = parseAttributeList();\n if (attr) {\n node.attr = attr;\n }\n addNode(graph, node);\n\n // edge statements\n parseEdge(graph, id);\n}\n\n/**\n * Parse an edge or a series of edges\n *\n * @param {object} graph\n * @param {string | number} from Id of the from node\n */\nfunction parseEdge(graph, from) {\n while (token === \"->\" || token === \"--\") {\n var to;\n var type = token;\n getToken();\n\n var subgraph = parseSubgraph(graph);\n if (subgraph) {\n to = subgraph;\n } else {\n if (tokenType != TOKENTYPE.IDENTIFIER) {\n throw newSyntaxError(\"Identifier or subgraph expected\");\n }\n to = token;\n addNode(graph, {\n id: to,\n });\n getToken();\n }\n\n // parse edge attributes\n var attr = parseAttributeList();\n\n // create edge\n var edge = createEdge(graph, from, to, type, attr);\n addEdge(graph, edge);\n\n from = to;\n }\n}\n\n/**\n * As explained in [1], graphviz has limitations for combination of\n * arrow[head|tail] and dir. If attribute list includes 'dir',\n * following cases just be supported.\n * 1. both or none + arrowhead, arrowtail\n * 2. forward + arrowhead (arrowtail is not affedted)\n * 3. back + arrowtail (arrowhead is not affected)\n * [1] https://www.graphviz.org/doc/info/attrs.html#h:undir_note\n *\n * This function is called from parseAttributeList() to parse 'dir'\n * attribute with given 'attr_names' and 'attr_list'.\n *\n * @param {object} attr_names Array of attribute names\n * @param {object} attr_list Array of objects of attribute set\n * @returns {object} attr_list Updated attr_list\n */\nfunction parseDirAttribute(attr_names, attr_list) {\n var i;\n if (attr_names.includes(\"dir\")) {\n var idx = {}; // get index of 'arrows' and 'dir'\n idx.arrows = {};\n for (i = 0; i < attr_list.length; i++) {\n if (attr_list[i].name === \"arrows\") {\n if (attr_list[i].value.to != null) {\n idx.arrows.to = i;\n } else if (attr_list[i].value.from != null) {\n idx.arrows.from = i;\n } else {\n throw newSyntaxError(\"Invalid value of arrows\");\n }\n } else if (attr_list[i].name === \"dir\") {\n idx.dir = i;\n }\n }\n\n // first, add default arrow shape if it is not assigned to avoid error\n var dir_type = attr_list[idx.dir].value;\n if (!attr_names.includes(\"arrows\")) {\n if (dir_type === \"both\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { to: { enabled: true } },\n });\n idx.arrows.to = attr_list.length - 1;\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { from: { enabled: true } },\n });\n idx.arrows.from = attr_list.length - 1;\n } else if (dir_type === \"forward\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { to: { enabled: true } },\n });\n idx.arrows.to = attr_list.length - 1;\n } else if (dir_type === \"back\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { from: { enabled: true } },\n });\n idx.arrows.from = attr_list.length - 1;\n } else if (dir_type === \"none\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: \"\",\n });\n idx.arrows.to = attr_list.length - 1;\n } else {\n throw newSyntaxError('Invalid dir type \"' + dir_type + '\"');\n }\n }\n\n var from_type;\n var to_type;\n // update 'arrows' attribute from 'dir'.\n if (dir_type === \"both\") {\n // both of shapes of 'from' and 'to' are given\n if (idx.arrows.to && idx.arrows.from) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n attr_list.splice(idx.arrows.from, 1);\n\n // shape of 'to' is assigned and use default to 'from'\n } else if (idx.arrows.to) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = \"arrow\";\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // only shape of 'from' is assigned and use default for 'to'\n } else if (idx.arrows.from) {\n to_type = \"arrow\";\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n }\n } else if (dir_type === \"back\") {\n // given both of shapes, but use only 'from'\n if (idx.arrows.to && idx.arrows.from) {\n to_type = \"\";\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // given shape of 'to', but does not use it\n } else if (idx.arrows.to) {\n to_type = \"\";\n from_type = \"arrow\";\n idx.arrows.from = idx.arrows.to;\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // assign given 'from' shape\n } else if (idx.arrows.from) {\n to_type = \"\";\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n }\n\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n from: {\n enabled: true,\n type: attr_list[idx.arrows.from].value.from.type,\n },\n },\n };\n } else if (dir_type === \"none\") {\n var idx_arrow;\n if (idx.arrows.to) {\n idx_arrow = idx.arrows.to;\n } else {\n idx_arrow = idx.arrows.from;\n }\n\n attr_list[idx_arrow] = {\n attr: attr_list[idx_arrow].attr,\n name: attr_list[idx_arrow].name,\n value: \"\",\n };\n } else if (dir_type === \"forward\") {\n // given both of shapes, but use only 'to'\n if (idx.arrows.to && idx.arrows.from) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = \"\";\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // assign given 'to' shape\n } else if (idx.arrows.to) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = \"\";\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // given shape of 'from', but does not use it\n } else if (idx.arrows.from) {\n to_type = \"arrow\";\n from_type = \"\";\n idx.arrows.to = idx.arrows.from;\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n }\n\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: {\n enabled: true,\n type: attr_list[idx.arrows.to].value.to.type,\n },\n },\n };\n } else {\n throw newSyntaxError('Invalid dir type \"' + dir_type + '\"');\n }\n\n // remove 'dir' attribute no need anymore\n attr_list.splice(idx.dir, 1);\n }\n return attr_list;\n}\n\n/**\n * Parse a set with attributes,\n * for example [label=\"1.000\", shape=solid]\n *\n * @returns {object | null} attr\n */\nfunction parseAttributeList() {\n var i;\n var attr = null;\n\n // edge styles of dot and vis\n var edgeStyles = {\n dashed: true,\n solid: false,\n dotted: [1, 5],\n };\n\n /**\n * Define arrow types.\n * vis currently supports types defined in 'arrowTypes'.\n * Details of arrow shapes are described in\n * http://www.graphviz.org/content/arrow-shapes\n */\n var arrowTypes = {\n dot: \"circle\",\n box: \"box\",\n crow: \"crow\",\n curve: \"curve\",\n icurve: \"inv_curve\",\n normal: \"triangle\",\n inv: \"inv_triangle\",\n diamond: \"diamond\",\n tee: \"bar\",\n vee: \"vee\",\n };\n\n /**\n * 'attr_list' contains attributes for checking if some of them are affected\n * later. For instance, both of 'arrowhead' and 'dir' (edge style defined\n * in DOT) make changes to 'arrows' attribute in vis.\n */\n var attr_list = new Array();\n var attr_names = new Array(); // used for checking the case.\n\n // parse attributes\n while (token === \"[\") {\n getToken();\n attr = {};\n while (token !== \"\" && token != \"]\") {\n if (tokenType != TOKENTYPE.IDENTIFIER) {\n throw newSyntaxError(\"Attribute name expected\");\n }\n var name = token;\n\n getToken();\n if (token != \"=\") {\n throw newSyntaxError(\"Equal sign = expected\");\n }\n getToken();\n\n if (tokenType != TOKENTYPE.IDENTIFIER) {\n throw newSyntaxError(\"Attribute value expected\");\n }\n var value = token;\n\n // convert from dot style to vis\n if (name === \"style\") {\n value = edgeStyles[value];\n }\n\n var arrowType;\n if (name === \"arrowhead\") {\n arrowType = arrowTypes[value];\n name = \"arrows\";\n value = { to: { enabled: true, type: arrowType } };\n }\n\n if (name === \"arrowtail\") {\n arrowType = arrowTypes[value];\n name = \"arrows\";\n value = { from: { enabled: true, type: arrowType } };\n }\n\n attr_list.push({ attr: attr, name: name, value: value });\n attr_names.push(name);\n\n getToken();\n if (token == \",\") {\n getToken();\n }\n }\n\n if (token != \"]\") {\n throw newSyntaxError(\"Bracket ] expected\");\n }\n getToken();\n }\n\n /**\n * As explained in [1], graphviz has limitations for combination of\n * arrow[head|tail] and dir. If attribute list includes 'dir',\n * following cases just be supported.\n * 1. both or none + arrowhead, arrowtail\n * 2. forward + arrowhead (arrowtail is not affedted)\n * 3. back + arrowtail (arrowhead is not affected)\n * [1] https://www.graphviz.org/doc/info/attrs.html#h:undir_note\n */\n if (attr_names.includes(\"dir\")) {\n var idx = {}; // get index of 'arrows' and 'dir'\n idx.arrows = {};\n for (i = 0; i < attr_list.length; i++) {\n if (attr_list[i].name === \"arrows\") {\n if (attr_list[i].value.to != null) {\n idx.arrows.to = i;\n } else if (attr_list[i].value.from != null) {\n idx.arrows.from = i;\n } else {\n throw newSyntaxError(\"Invalid value of arrows\");\n }\n } else if (attr_list[i].name === \"dir\") {\n idx.dir = i;\n }\n }\n\n // first, add default arrow shape if it is not assigned to avoid error\n var dir_type = attr_list[idx.dir].value;\n if (!attr_names.includes(\"arrows\")) {\n if (dir_type === \"both\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { to: { enabled: true } },\n });\n idx.arrows.to = attr_list.length - 1;\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { from: { enabled: true } },\n });\n idx.arrows.from = attr_list.length - 1;\n } else if (dir_type === \"forward\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { to: { enabled: true } },\n });\n idx.arrows.to = attr_list.length - 1;\n } else if (dir_type === \"back\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { from: { enabled: true } },\n });\n idx.arrows.from = attr_list.length - 1;\n } else if (dir_type === \"none\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: \"\",\n });\n idx.arrows.to = attr_list.length - 1;\n } else {\n throw newSyntaxError('Invalid dir type \"' + dir_type + '\"');\n }\n }\n\n var from_type;\n var to_type;\n // update 'arrows' attribute from 'dir'.\n if (dir_type === \"both\") {\n // both of shapes of 'from' and 'to' are given\n if (idx.arrows.to && idx.arrows.from) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n attr_list.splice(idx.arrows.from, 1);\n\n // shape of 'to' is assigned and use default to 'from'\n } else if (idx.arrows.to) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = \"arrow\";\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // only shape of 'from' is assigned and use default for 'to'\n } else if (idx.arrows.from) {\n to_type = \"arrow\";\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n }\n } else if (dir_type === \"back\") {\n // given both of shapes, but use only 'from'\n if (idx.arrows.to && idx.arrows.from) {\n to_type = \"\";\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // given shape of 'to', but does not use it\n } else if (idx.arrows.to) {\n to_type = \"\";\n from_type = \"arrow\";\n idx.arrows.from = idx.arrows.to;\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // assign given 'from' shape\n } else if (idx.arrows.from) {\n to_type = \"\";\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n }\n\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n from: {\n enabled: true,\n type: attr_list[idx.arrows.from].value.from.type,\n },\n },\n };\n } else if (dir_type === \"none\") {\n var idx_arrow;\n if (idx.arrows.to) {\n idx_arrow = idx.arrows.to;\n } else {\n idx_arrow = idx.arrows.from;\n }\n\n attr_list[idx_arrow] = {\n attr: attr_list[idx_arrow].attr,\n name: attr_list[idx_arrow].name,\n value: \"\",\n };\n } else if (dir_type === \"forward\") {\n // given both of shapes, but use only 'to'\n if (idx.arrows.to && idx.arrows.from) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = \"\";\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // assign given 'to' shape\n } else if (idx.arrows.to) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = \"\";\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // given shape of 'from', but does not use it\n } else if (idx.arrows.from) {\n to_type = \"arrow\";\n from_type = \"\";\n idx.arrows.to = idx.arrows.from;\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n }\n\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: attr_list[idx.arrows.to].value.to.type },\n },\n };\n } else {\n throw newSyntaxError('Invalid dir type \"' + dir_type + '\"');\n }\n\n // remove 'dir' attribute no need anymore\n attr_list.splice(idx.dir, 1);\n }\n\n // parse 'penwidth'\n var nof_attr_list;\n if (attr_names.includes(\"penwidth\")) {\n var tmp_attr_list = [];\n\n nof_attr_list = attr_list.length;\n for (i = 0; i < nof_attr_list; i++) {\n // exclude 'width' from attr_list if 'penwidth' exists\n if (attr_list[i].name !== \"width\") {\n if (attr_list[i].name === \"penwidth\") {\n attr_list[i].name = \"width\";\n }\n tmp_attr_list.push(attr_list[i]);\n }\n }\n attr_list = tmp_attr_list;\n }\n\n nof_attr_list = attr_list.length;\n for (i = 0; i < nof_attr_list; i++) {\n setValue(attr_list[i].attr, attr_list[i].name, attr_list[i].value);\n }\n\n return attr;\n}\n\n/**\n * Create a syntax error with extra information on current token and index.\n *\n * @param {string} message\n * @returns {SyntaxError} err\n */\nfunction newSyntaxError(message) {\n return new SyntaxError(\n message + ', got \"' + chop(token, 30) + '\" (char ' + index + \")\"\n );\n}\n\n/**\n * Chop off text after a maximum length\n *\n * @param {string} text\n * @param {number} maxLength\n * @returns {string}\n */\nfunction chop(text, maxLength) {\n return text.length <= maxLength ? text : text.substr(0, 27) + \"...\";\n}\n\n/**\n * Execute a function fn for each pair of elements in two arrays\n *\n * @param {Array | *} array1\n * @param {Array | *} array2\n * @param {Function} fn\n */\nfunction forEach2(array1, array2, fn) {\n if (Array.isArray(array1)) {\n array1.forEach(function (elem1) {\n if (Array.isArray(array2)) {\n array2.forEach(function (elem2) {\n fn(elem1, elem2);\n });\n } else {\n fn(elem1, array2);\n }\n });\n } else {\n if (Array.isArray(array2)) {\n array2.forEach(function (elem2) {\n fn(array1, elem2);\n });\n } else {\n fn(array1, array2);\n }\n }\n}\n\n/**\n * Set a nested property on an object\n * When nested objects are missing, they will be created.\n * For example setProp({}, 'font.color', 'red') will return {font: {color: 'red'}}\n *\n * @param {object} object\n * @param {string} path A dot separated string like 'font.color'\n * @param {*} value Value for the property\n * @returns {object} Returns the original object, allows for chaining.\n */\nfunction setProp(object, path, value) {\n var names = path.split(\".\");\n var prop = names.pop();\n\n // traverse over the nested objects\n var obj = object;\n for (var i = 0; i < names.length; i++) {\n var name = names[i];\n if (!(name in obj)) {\n obj[name] = {};\n }\n obj = obj[name];\n }\n\n // set the property value\n obj[prop] = value;\n\n return object;\n}\n\n/**\n * Convert an object with DOT attributes to their vis.js equivalents.\n *\n * @param {object} attr Object with DOT attributes\n * @param {object} mapping\n * @returns {object} Returns an object with vis.js attributes\n */\nfunction convertAttr(attr, mapping) {\n var converted = {};\n\n for (var prop in attr) {\n if (attr.hasOwnProperty(prop)) {\n var visProp = mapping[prop];\n if (Array.isArray(visProp)) {\n visProp.forEach(function (visPropI) {\n setProp(converted, visPropI, attr[prop]);\n });\n } else if (typeof visProp === \"string\") {\n setProp(converted, visProp, attr[prop]);\n } else {\n setProp(converted, prop, attr[prop]);\n }\n }\n }\n\n return converted;\n}\n\n/**\n * Convert a string containing a graph in DOT language into a map containing\n * with nodes and edges in the format of graph.\n *\n * @param {string} data Text containing a graph in DOT-notation\n * @returns {object} graphData\n */\nexport function DOTToGraph(data) {\n // parse the DOT file\n var dotData = parseDOT(data);\n var graphData = {\n nodes: [],\n edges: [],\n options: {},\n };\n\n // copy the nodes\n if (dotData.nodes) {\n dotData.nodes.forEach(function (dotNode) {\n var graphNode = {\n id: dotNode.id,\n label: String(dotNode.label || dotNode.id),\n };\n merge(graphNode, convertAttr(dotNode.attr, NODE_ATTR_MAPPING));\n if (graphNode.image) {\n graphNode.shape = \"image\";\n }\n graphData.nodes.push(graphNode);\n });\n }\n\n // copy the edges\n if (dotData.edges) {\n /**\n * Convert an edge in DOT format to an edge with VisGraph format\n *\n * @param {object} dotEdge\n * @returns {object} graphEdge\n */\n var convertEdge = function (dotEdge) {\n var graphEdge = {\n from: dotEdge.from,\n to: dotEdge.to,\n };\n merge(graphEdge, convertAttr(dotEdge.attr, EDGE_ATTR_MAPPING));\n\n // Add arrows attribute to default styled arrow.\n // The reason why default style is not added in parseAttributeList() is\n // because only default is cleared before here.\n if (graphEdge.arrows == null && dotEdge.type === \"->\") {\n graphEdge.arrows = \"to\";\n }\n\n return graphEdge;\n };\n\n dotData.edges.forEach(function (dotEdge) {\n var from, to;\n if (dotEdge.from instanceof Object) {\n from = dotEdge.from.nodes;\n } else {\n from = {\n id: dotEdge.from,\n };\n }\n\n if (dotEdge.to instanceof Object) {\n to = dotEdge.to.nodes;\n } else {\n to = {\n id: dotEdge.to,\n };\n }\n\n if (dotEdge.from instanceof Object && dotEdge.from.edges) {\n dotEdge.from.edges.forEach(function (subEdge) {\n var graphEdge = convertEdge(subEdge);\n graphData.edges.push(graphEdge);\n });\n }\n\n forEach2(from, to, function (from, to) {\n var subEdge = createEdge(\n graphData,\n from.id,\n to.id,\n dotEdge.type,\n dotEdge.attr\n );\n var graphEdge = convertEdge(subEdge);\n graphData.edges.push(graphEdge);\n });\n\n if (dotEdge.to instanceof Object && dotEdge.to.edges) {\n dotEdge.to.edges.forEach(function (subEdge) {\n var graphEdge = convertEdge(subEdge);\n graphData.edges.push(graphEdge);\n });\n }\n });\n }\n\n // copy the options\n if (dotData.attr) {\n graphData.options = dotData.attr;\n }\n\n return graphData;\n}\n\n/* eslint-enable no-var */\n/* eslint-enable no-unused-vars */\n/* eslint-enable no-prototype-builtins */\n","export type Id = number | string;\n\nexport interface ColorObject {\n background: string;\n border: string;\n highlight: {\n background: string;\n border: string;\n };\n hover: {\n background: string;\n border: string;\n };\n}\n\nexport interface GephiData {\n nodes: GephiNode[];\n edges: GephiEdge[];\n}\nexport interface GephiParseOptions {\n fixed?: boolean;\n inheritColor?: boolean;\n parseColor?: boolean;\n}\n\nexport interface GephiNode {\n id: Id;\n\n attributes?: { title?: string };\n color?: string;\n label?: string;\n size?: number;\n title?: string;\n x?: number;\n y?: number;\n}\nexport interface GephiEdge {\n id: Id;\n source: Id;\n target: Id;\n\n attributes?: { title?: string };\n color?: string;\n label?: string;\n type?: string;\n}\n\nexport interface VisData {\n nodes: VisNode[];\n edges: VisEdge[];\n}\n\nexport interface VisNode {\n id: Id;\n fixed: boolean;\n\n color?: string | ColorObject;\n label?: string;\n size?: number;\n title?: string;\n x?: number;\n y?: number;\n\n attributes?: unknown;\n}\nexport interface VisEdge {\n id: Id;\n from: Id;\n to: Id;\n\n arrows?: \"to\";\n color?: string;\n label?: string;\n title?: string;\n\n attributes?: unknown;\n}\n\n/**\n * Convert Gephi to Vis.\n *\n * @param gephiJSON - The parsed JSON data in Gephi format.\n * @param optionsObj - Additional options.\n * @returns The converted data ready to be used in Vis.\n */\nexport function parseGephi(\n gephiJSON: GephiData,\n optionsObj?: GephiParseOptions\n): VisData {\n const options = {\n edges: {\n inheritColor: false,\n },\n nodes: {\n fixed: false,\n parseColor: false,\n },\n };\n\n if (optionsObj != null) {\n if (optionsObj.fixed != null) {\n options.nodes.fixed = optionsObj.fixed;\n }\n if (optionsObj.parseColor != null) {\n options.nodes.parseColor = optionsObj.parseColor;\n }\n if (optionsObj.inheritColor != null) {\n options.edges.inheritColor = optionsObj.inheritColor;\n }\n }\n\n const gEdges = gephiJSON.edges;\n const vEdges = gEdges.map((gEdge): VisEdge => {\n const vEdge: VisEdge = {\n from: gEdge.source,\n id: gEdge.id,\n to: gEdge.target,\n };\n\n if (gEdge.attributes != null) {\n vEdge.attributes = gEdge.attributes;\n }\n if (gEdge.label != null) {\n vEdge.label = gEdge.label;\n }\n if (gEdge.attributes != null && gEdge.attributes.title != null) {\n vEdge.title = gEdge.attributes.title;\n }\n if (gEdge.type === \"Directed\") {\n vEdge.arrows = \"to\";\n }\n // edge['value'] = gEdge.attributes != null ? gEdge.attributes.Weight : undefined;\n // edge['width'] = edge['value'] != null ? undefined : edgegEdge.size;\n if (gEdge.color && options.edges.inheritColor === false) {\n vEdge.color = gEdge.color;\n }\n\n return vEdge;\n });\n\n const vNodes = gephiJSON.nodes.map((gNode): VisNode => {\n const vNode: VisNode = {\n id: gNode.id,\n fixed: options.nodes.fixed && gNode.x != null && gNode.y != null,\n };\n\n if (gNode.attributes != null) {\n vNode.attributes = gNode.attributes;\n }\n if (gNode.label != null) {\n vNode.label = gNode.label;\n }\n if (gNode.size != null) {\n vNode.size = gNode.size;\n }\n if (gNode.attributes != null && gNode.attributes.title != null) {\n vNode.title = gNode.attributes.title;\n }\n if (gNode.title != null) {\n vNode.title = gNode.title;\n }\n if (gNode.x != null) {\n vNode.x = gNode.x;\n }\n if (gNode.y != null) {\n vNode.y = gNode.y;\n }\n if (gNode.color != null) {\n if (options.nodes.parseColor === true) {\n vNode.color = gNode.color;\n } else {\n vNode.color = {\n background: gNode.color,\n border: gNode.color,\n highlight: {\n background: gNode.color,\n border: gNode.color,\n },\n hover: {\n background: gNode.color,\n border: gNode.color,\n },\n };\n }\n }\n\n return vNode;\n });\n\n return { nodes: vNodes, edges: vEdges };\n}\n","export interface Locale {\n addDescription: string;\n addEdge: string;\n addNode: string;\n back: string;\n close: string;\n createEdgeError: string;\n del: string;\n deleteClusterError: string;\n edgeDescription: string;\n edit: string;\n editClusterError: string;\n editEdge: string;\n editEdgeDescription: string;\n editNode: string;\n}\nexport type Locales = Record;\n\n// English\nexport const en: Locale = {\n addDescription: \"Click in an empty space to place a new node.\",\n addEdge: \"Add Edge\",\n addNode: \"Add Node\",\n back: \"Back\",\n close: \"Close\",\n createEdgeError: \"Cannot link edges to a cluster.\",\n del: \"Delete selected\",\n deleteClusterError: \"Clusters cannot be deleted.\",\n edgeDescription:\n \"Click on a node and drag the edge to another node to connect them.\",\n edit: \"Edit\",\n editClusterError: \"Clusters cannot be edited.\",\n editEdge: \"Edit Edge\",\n editEdgeDescription:\n \"Click on the control points and drag them to a node to connect to it.\",\n editNode: \"Edit Node\",\n};\n\n// German\nexport const de: Locale = {\n addDescription:\n \"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.\",\n addEdge: \"Kante hinzuf\\u00fcgen\",\n addNode: \"Knoten hinzuf\\u00fcgen\",\n back: \"Zur\\u00fcck\",\n close: \"Schließen\",\n createEdgeError:\n \"Es ist nicht m\\u00f6glich, Kanten mit Clustern zu verbinden.\",\n del: \"L\\u00f6sche Auswahl\",\n deleteClusterError: \"Cluster k\\u00f6nnen nicht gel\\u00f6scht werden.\",\n edgeDescription:\n \"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.\",\n edit: \"Editieren\",\n editClusterError: \"Cluster k\\u00f6nnen nicht editiert werden.\",\n editEdge: \"Kante editieren\",\n editEdgeDescription:\n \"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.\",\n editNode: \"Knoten editieren\",\n};\n\n// Spanish\nexport const es: Locale = {\n addDescription:\n \"Haga clic en un lugar vac\\u00edo para colocar un nuevo nodo.\",\n addEdge: \"A\\u00f1adir arista\",\n addNode: \"A\\u00f1adir nodo\",\n back: \"Atr\\u00e1s\",\n close: \"Cerrar\",\n createEdgeError: \"No se puede conectar una arista a un grupo.\",\n del: \"Eliminar selecci\\u00f3n\",\n deleteClusterError: \"No es posible eliminar grupos.\",\n edgeDescription:\n \"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.\",\n edit: \"Editar\",\n editClusterError: \"No es posible editar grupos.\",\n editEdge: \"Editar arista\",\n editEdgeDescription:\n \"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.\",\n editNode: \"Editar nodo\",\n};\n\n//Italiano\nexport const it: Locale = {\n addDescription: \"Clicca per aggiungere un nuovo nodo\",\n addEdge: \"Aggiungi un vertice\",\n addNode: \"Aggiungi un nodo\",\n back: \"Indietro\",\n close: \"Chiudere\",\n createEdgeError: \"Non si possono collegare vertici ad un cluster\",\n del: \"Cancella la selezione\",\n deleteClusterError: \"I cluster non possono essere cancellati\",\n edgeDescription:\n \"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.\",\n edit: \"Modifica\",\n editClusterError: \"I clusters non possono essere modificati.\",\n editEdge: \"Modifica il vertice\",\n editEdgeDescription:\n \"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.\",\n editNode: \"Modifica il nodo\",\n};\n\n// Dutch\nexport const nl: Locale = {\n addDescription: \"Klik op een leeg gebied om een nieuwe node te maken.\",\n addEdge: \"Link toevoegen\",\n addNode: \"Node toevoegen\",\n back: \"Terug\",\n close: \"Sluiten\",\n createEdgeError: \"Kan geen link maken naar een cluster.\",\n del: \"Selectie verwijderen\",\n deleteClusterError: \"Clusters kunnen niet worden verwijderd.\",\n edgeDescription:\n \"Klik op een node en sleep de link naar een andere node om ze te verbinden.\",\n edit: \"Wijzigen\",\n editClusterError: \"Clusters kunnen niet worden aangepast.\",\n editEdge: \"Link wijzigen\",\n editEdgeDescription:\n \"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.\",\n editNode: \"Node wijzigen\",\n};\n\n// Portuguese Brazil\nexport const pt: Locale = {\n addDescription: \"Clique em um espaço em branco para adicionar um novo nó\",\n addEdge: \"Adicionar aresta\",\n addNode: \"Adicionar nó\",\n back: \"Voltar\",\n close: \"Fechar\",\n createEdgeError: \"Não foi possível linkar arestas a um cluster.\",\n del: \"Remover selecionado\",\n deleteClusterError: \"Clusters não puderam ser removidos.\",\n edgeDescription:\n \"Clique em um nó e arraste a aresta até outro nó para conectá-los\",\n edit: \"Editar\",\n editClusterError: \"Clusters não puderam ser editados.\",\n editEdge: \"Editar aresta\",\n editEdgeDescription:\n \"Clique nos pontos de controle e os arraste para um nó para conectá-los\",\n editNode: \"Editar nó\",\n};\n\n// Russian\nexport const ru: Locale = {\n addDescription: \"Кликните в свободное место, чтобы добавить новый узел.\",\n addEdge: \"Добавить ребро\",\n addNode: \"Добавить узел\",\n back: \"Назад\",\n close: \"Закрывать\",\n createEdgeError: \"Невозможно соединить ребра в кластер.\",\n del: \"Удалить выбранное\",\n deleteClusterError: \"Кластеры не могут быть удалены\",\n edgeDescription:\n \"Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.\",\n edit: \"Редактировать\",\n editClusterError: \"Кластеры недоступны для редактирования.\",\n editEdge: \"Редактировать ребро\",\n editEdgeDescription:\n \"Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.\",\n editNode: \"Редактировать узел\",\n};\n\n// Chinese\nexport const cn: Locale = {\n addDescription: \"单击空白处放置新节点。\",\n addEdge: \"添加连接线\",\n addNode: \"添加节点\",\n back: \"返回\",\n close: \"關閉\",\n createEdgeError: \"无法将连接线连接到群集。\",\n del: \"删除选定\",\n deleteClusterError: \"无法删除群集。\",\n edgeDescription: \"单击某个节点并将该连接线拖动到另一个节点以连接它们。\",\n edit: \"编辑\",\n editClusterError: \"无法编辑群集。\",\n editEdge: \"编辑连接线\",\n editEdgeDescription: \"单击控制节点并将它们拖到节点上连接。\",\n editNode: \"编辑节点\",\n};\n\n// Ukrainian\nexport const uk: Locale = {\n addDescription: \"Kлікніть на вільне місце, щоб додати новий вузол.\",\n addEdge: \"Додати край\",\n addNode: \"Додати вузол\",\n back: \"Назад\",\n close: \"Закрити\",\n createEdgeError: \"Не можливо об'єднати краї в групу.\",\n del: \"Видалити обране\",\n deleteClusterError: \"Групи не можуть бути видалені.\",\n edgeDescription:\n \"Клікніть на вузол і перетягніть край до іншого вузла, щоб їх з'єднати.\",\n edit: \"Редагувати\",\n editClusterError: \"Групи недоступні для редагування.\",\n editEdge: \"Редагувати край\",\n editEdgeDescription:\n \"Клікніть на контрольні точки і перетягніть їх у вузол, щоб підключитися до нього.\",\n editNode: \"Редагувати вузол\",\n};\n\n// French\nexport const fr: Locale = {\n addDescription: \"Cliquez dans un endroit vide pour placer un nœud.\",\n addEdge: \"Ajouter un lien\",\n addNode: \"Ajouter un nœud\",\n back: \"Retour\",\n close: \"Fermer\",\n createEdgeError: \"Impossible de créer un lien vers un cluster.\",\n del: \"Effacer la sélection\",\n deleteClusterError: \"Les clusters ne peuvent pas être effacés.\",\n edgeDescription:\n \"Cliquez sur un nœud et glissez le lien vers un autre nœud pour les connecter.\",\n edit: \"Éditer\",\n editClusterError: \"Les clusters ne peuvent pas être édités.\",\n editEdge: \"Éditer le lien\",\n editEdgeDescription:\n \"Cliquez sur les points de contrôle et glissez-les pour connecter un nœud.\",\n editNode: \"Éditer le nœud\",\n};\n\n// Czech\nexport const cs: Locale = {\n addDescription: \"Kluknutím do prázdného prostoru můžete přidat nový vrchol.\",\n addEdge: \"Přidat hranu\",\n addNode: \"Přidat vrchol\",\n back: \"Zpět\",\n close: \"Zavřít\",\n createEdgeError: \"Nelze připojit hranu ke shluku.\",\n del: \"Smazat výběr\",\n deleteClusterError: \"Nelze mazat shluky.\",\n edgeDescription:\n \"Přetažením z jednoho vrcholu do druhého můžete spojit tyto vrcholy novou hranou.\",\n edit: \"Upravit\",\n editClusterError: \"Nelze upravovat shluky.\",\n editEdge: \"Upravit hranu\",\n editEdgeDescription:\n \"Přetažením kontrolního vrcholu hrany ji můžete připojit k jinému vrcholu.\",\n editNode: \"Upravit vrchol\",\n};\n","/**\n * Associates a canvas to a given image, containing a number of renderings\n * of the image at various sizes.\n *\n * This technique is known as 'mipmapping'.\n *\n * NOTE: Images can also be of type 'data:svg+xml`. This code also works\n * for svg, but the mipmapping may not be necessary.\n *\n * @param {Image} image\n */\nclass CachedImage {\n /**\n * @ignore\n */\n constructor() {\n this.NUM_ITERATIONS = 4; // Number of items in the coordinates array\n\n this.image = new Image();\n this.canvas = document.createElement(\"canvas\");\n }\n\n /**\n * Called when the image has been successfully loaded.\n */\n init() {\n if (this.initialized()) return;\n\n this.src = this.image.src; // For same interface with Image\n const w = this.image.width;\n const h = this.image.height;\n\n // Ease external access\n this.width = w;\n this.height = h;\n\n const h2 = Math.floor(h / 2);\n const h4 = Math.floor(h / 4);\n const h8 = Math.floor(h / 8);\n const h16 = Math.floor(h / 16);\n\n const w2 = Math.floor(w / 2);\n const w4 = Math.floor(w / 4);\n const w8 = Math.floor(w / 8);\n const w16 = Math.floor(w / 16);\n\n // Make canvas as small as possible\n this.canvas.width = 3 * w4;\n this.canvas.height = h2;\n\n // Coordinates and sizes of images contained in the canvas\n // Values per row: [top x, left y, width, height]\n\n this.coordinates = [\n [0, 0, w2, h2],\n [w2, 0, w4, h4],\n [w2, h4, w8, h8],\n [5 * w8, h4, w16, h16],\n ];\n\n this._fillMipMap();\n }\n\n /**\n * @returns {boolean} true if init() has been called, false otherwise.\n */\n initialized() {\n return this.coordinates !== undefined;\n }\n\n /**\n * Redraw main image in various sizes to the context.\n *\n * The rationale behind this is to reduce artefacts due to interpolation\n * at differing zoom levels.\n *\n * Source: http://stackoverflow.com/q/18761404/1223531\n *\n * This methods takes the resizing out of the drawing loop, in order to\n * reduce performance overhead.\n *\n * TODO: The code assumes that a 2D context can always be gotten. This is\n * not necessarily true! OTOH, if not true then usage of this class\n * is senseless.\n *\n * @private\n */\n _fillMipMap() {\n const ctx = this.canvas.getContext(\"2d\");\n\n // First zoom-level comes from the image\n const to = this.coordinates[0];\n ctx.drawImage(this.image, to[0], to[1], to[2], to[3]);\n\n // The rest are copy actions internal to the canvas/context\n for (let iterations = 1; iterations < this.NUM_ITERATIONS; iterations++) {\n const from = this.coordinates[iterations - 1];\n const to = this.coordinates[iterations];\n\n ctx.drawImage(\n this.canvas,\n from[0],\n from[1],\n from[2],\n from[3],\n to[0],\n to[1],\n to[2],\n to[3]\n );\n }\n }\n\n /**\n * Draw the image, using the mipmap if necessary.\n *\n * MipMap is only used if param factor > 2; otherwise, original bitmap\n * is resized. This is also used to skip mipmap usage, e.g. by setting factor = 1\n *\n * Credits to 'Alex de Mulder' for original implementation.\n *\n * @param {CanvasRenderingContext2D} ctx context on which to draw zoomed image\n * @param {Float} factor scale factor at which to draw\n * @param {number} left\n * @param {number} top\n * @param {number} width\n * @param {number} height\n */\n drawImageAtPosition(ctx, factor, left, top, width, height) {\n if (!this.initialized()) return; //can't draw image yet not intialized\n\n if (factor > 2) {\n // Determine which zoomed image to use\n factor *= 0.5;\n let iterations = 0;\n while (factor > 2 && iterations < this.NUM_ITERATIONS) {\n factor *= 0.5;\n iterations += 1;\n }\n\n if (iterations >= this.NUM_ITERATIONS) {\n iterations = this.NUM_ITERATIONS - 1;\n }\n //console.log(\"iterations: \" + iterations);\n\n const from = this.coordinates[iterations];\n ctx.drawImage(\n this.canvas,\n from[0],\n from[1],\n from[2],\n from[3],\n left,\n top,\n width,\n height\n );\n } else {\n // Draw image directly\n ctx.drawImage(this.image, left, top, width, height);\n }\n }\n}\n\nexport default CachedImage;\n","import CachedImage from \"./CachedImage\";\n\n/**\n * This callback is a callback that accepts an Image.\n *\n * @callback ImageCallback\n * @param {Image} image\n */\n\n/**\n * This class loads images and keeps them stored.\n *\n * @param {ImageCallback} callback\n */\nclass Images {\n /**\n * @param {ImageCallback} callback\n */\n constructor(callback) {\n this.images = {};\n this.imageBroken = {};\n this.callback = callback;\n }\n\n /**\n * @param {string} url The original Url that failed to load, if the broken image is successfully loaded it will be added to the cache using this Url as the key so that subsequent requests for this Url will return the broken image\n * @param {string} brokenUrl Url the broken image to try and load\n * @param {Image} imageToLoadBrokenUrlOn The image object\n */\n _tryloadBrokenUrl(url, brokenUrl, imageToLoadBrokenUrlOn) {\n //If these parameters aren't specified then exit the function because nothing constructive can be done\n if (url === undefined || imageToLoadBrokenUrlOn === undefined) return;\n if (brokenUrl === undefined) {\n console.warn(\"No broken url image defined\");\n return;\n }\n\n //Clear the old subscription to the error event and put a new in place that only handle errors in loading the brokenImageUrl\n imageToLoadBrokenUrlOn.image.onerror = () => {\n console.error(\"Could not load brokenImage:\", brokenUrl);\n // cache item will contain empty image, this should be OK for default\n };\n\n //Set the source of the image to the brokenUrl, this is actually what kicks off the loading of the broken image\n imageToLoadBrokenUrlOn.image.src = brokenUrl;\n }\n\n /**\n *\n * @param {vis.Image} imageToRedrawWith\n * @private\n */\n _redrawWithImage(imageToRedrawWith) {\n if (this.callback) {\n this.callback(imageToRedrawWith);\n }\n }\n\n /**\n * @param {string} url Url of the image\n * @param {string} brokenUrl Url of an image to use if the url image is not found\n * @returns {Image} img The image object\n */\n load(url, brokenUrl) {\n //Try and get the image from the cache, if successful then return the cached image\n const cachedImage = this.images[url];\n if (cachedImage) return cachedImage;\n\n //Create a new image\n const img = new CachedImage();\n\n // Need to add to cache here, otherwise final return will spawn different copies of the same image,\n // Also, there will be multiple loads of the same image.\n this.images[url] = img;\n\n //Subscribe to the event that is raised if the image loads successfully\n img.image.onload = () => {\n // Properly init the cached item and then request a redraw\n this._fixImageCoordinates(img.image);\n img.init();\n this._redrawWithImage(img);\n };\n\n //Subscribe to the event that is raised if the image fails to load\n img.image.onerror = () => {\n console.error(\"Could not load image:\", url);\n //Try and load the image specified by the brokenUrl using\n this._tryloadBrokenUrl(url, brokenUrl, img);\n };\n\n //Set the source of the image to the url, this is what actually kicks off the loading of the image\n img.image.src = url;\n\n //Return the new image\n return img;\n }\n\n /**\n * IE11 fix -- thanks dponch!\n *\n * Local helper function\n *\n * @param {vis.Image} imageToCache\n * @private\n */\n _fixImageCoordinates(imageToCache) {\n if (imageToCache.width === 0) {\n document.body.appendChild(imageToCache);\n imageToCache.width = imageToCache.offsetWidth;\n imageToCache.height = imageToCache.offsetHeight;\n document.body.removeChild(imageToCache);\n }\n }\n}\n\nexport default Images;\n","'use strict';\n// FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it\nvar fails = require('../internals/fails');\n\nmodule.exports = fails(function () {\n if (typeof ArrayBuffer == 'function') {\n var buffer = new ArrayBuffer(8);\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-defineproperty -- safe\n if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 });\n }\n});\n","'use strict';\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar ARRAY_BUFFER_NON_EXTENSIBLE = require('../internals/array-buffer-non-extensible');\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar $isExtensible = Object.isExtensible;\nvar FAILS_ON_PRIMITIVES = fails(function () { $isExtensible(1); });\n\n// `Object.isExtensible` method\n// https://tc39.es/ecma262/#sec-object.isextensible\nmodule.exports = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) {\n if (!isObject(it)) return false;\n if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === 'ArrayBuffer') return false;\n return $isExtensible ? $isExtensible(it) : true;\n} : $isExtensible;\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n return Object.isExtensible(Object.preventExtensions({}));\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternalModule = require('../internals/object-get-own-property-names-external');\nvar isExtensible = require('../internals/object-is-extensible');\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar REQUIRED = false;\nvar METADATA = uid('meta');\nvar id = 0;\n\nvar setMetadata = function (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + id++, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey = function (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar enable = function () {\n meta.enable = function () { /* empty */ };\n REQUIRED = true;\n var getOwnPropertyNames = getOwnPropertyNamesModule.f;\n var splice = uncurryThis([].splice);\n var test = {};\n test[METADATA] = 1;\n\n // prevent exposing of metadata key\n if (getOwnPropertyNames(test).length) {\n getOwnPropertyNamesModule.f = function (it) {\n var result = getOwnPropertyNames(it);\n for (var i = 0, length = result.length; i < length; i++) {\n if (result[i] === METADATA) {\n splice(result, i, 1);\n break;\n }\n } return result;\n };\n\n $({ target: 'Object', stat: true, forced: true }, {\n getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n });\n }\n};\n\nvar meta = module.exports = {\n enable: enable,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar $TypeError = TypeError;\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_RECORD = !!(options && options.IS_RECORD);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator, 'normal', condition);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_RECORD) {\n iterator = iterable.iterator;\n } else if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (!iterFn) throw new $TypeError(tryToString(iterable) + ' is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n }\n iterator = getIterator(iterable, iterFn);\n }\n\n next = IS_RECORD ? iterable.next : iterator.next;\n while (!(step = call(next, iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n};\n","'use strict';\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it, Prototype) {\n if (isPrototypeOf(Prototype, it)) return it;\n throw new $TypeError('Incorrect invocation');\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar fails = require('../internals/fails');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar defineProperty = require('../internals/object-define-property').f;\nvar forEach = require('../internals/array-iteration').forEach;\nvar DESCRIPTORS = require('../internals/descriptors');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = global[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var exported = {};\n var Constructor;\n\n if (!DESCRIPTORS || !isCallable(NativeConstructor)\n || !(IS_WEAK || NativePrototype.forEach && !fails(function () { new NativeConstructor().entries().next(); }))\n ) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.enable();\n } else {\n Constructor = wrapper(function (target, iterable) {\n setInternalState(anInstance(target, Prototype), {\n type: CONSTRUCTOR_NAME,\n collection: new NativeConstructor()\n });\n if (!isNullOrUndefined(iterable)) iterate(iterable, target[ADDER], { that: target, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n forEach(['add', 'clear', 'delete', 'forEach', 'get', 'has', 'set', 'keys', 'values', 'entries'], function (KEY) {\n var IS_ADDER = KEY === 'add' || KEY === 'set';\n if (KEY in NativePrototype && !(IS_WEAK && KEY === 'clear')) {\n createNonEnumerableProperty(Prototype, KEY, function (a, b) {\n var collection = getInternalState(this).collection;\n if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY === 'get' ? undefined : false;\n var result = collection[KEY](a === 0 ? 0 : a, b);\n return IS_ADDER ? this : result;\n });\n }\n });\n\n IS_WEAK || defineProperty(Prototype, 'size', {\n configurable: true,\n get: function () {\n return getInternalState(this).collection.size;\n }\n });\n }\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME, false, true);\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, forced: true }, exported);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n","'use strict';\nvar defineBuiltIn = require('../internals/define-built-in');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) {\n if (options && options.unsafe && target[key]) target[key] = src[key];\n else defineBuiltIn(target, key, src[key], options);\n } return target;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineBuiltInAccessor(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","'use strict';\nvar create = require('../internals/object-create');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key === key) return entry;\n }\n };\n\n defineBuiltIns(Prototype, {\n // `{ Map, Set }.prototype.clear()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.clear\n // https://tc39.es/ecma262/#sec-set.prototype.clear\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // `{ Map, Set }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.delete\n // https://tc39.es/ecma262/#sec-set.prototype.delete\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first === entry) state.first = next;\n if (state.last === entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.foreach\n // https://tc39.es/ecma262/#sec-set.prototype.foreach\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // `{ Map, Set}.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.has\n // https://tc39.es/ecma262/#sec-set.prototype.has\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n defineBuiltIns(Prototype, IS_MAP ? {\n // `Map.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-map.prototype.get\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // `Map.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-map.prototype.set\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // `Set.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-set.prototype.add\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineBuiltInAccessor(Prototype, 'size', {\n configurable: true,\n get: function () {\n return getInternalState(this).size;\n }\n });\n return Constructor;\n },\n setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.entries\n // https://tc39.es/ecma262/#sec-map.prototype.keys\n // https://tc39.es/ecma262/#sec-map.prototype.values\n // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n // https://tc39.es/ecma262/#sec-set.prototype.entries\n // https://tc39.es/ecma262/#sec-set.prototype.keys\n // https://tc39.es/ecma262/#sec-set.prototype.values\n // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return createIterResultObject(undefined, true);\n }\n // return step by kind\n if (kind === 'keys') return createIterResultObject(entry.key, false);\n if (kind === 'values') return createIterResultObject(entry.value, false);\n return createIterResultObject([entry.key, entry.value], false);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // `{ Map, Set }.prototype[@@species]` accessors\n // https://tc39.es/ecma262/#sec-get-map-@@species\n // https://tc39.es/ecma262/#sec-get-set-@@species\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\ncollection('Map', function (init) {\n return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.map');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Map;\n","/**\n * This class can store groups and options specific for groups.\n */\nexport class Groups {\n /**\n * @ignore\n */\n constructor() {\n this.clear();\n this._defaultIndex = 0;\n this._groupIndex = 0;\n\n this._defaultGroups = [\n {\n border: \"#2B7CE9\",\n background: \"#97C2FC\",\n highlight: { border: \"#2B7CE9\", background: \"#D2E5FF\" },\n hover: { border: \"#2B7CE9\", background: \"#D2E5FF\" },\n }, // 0: blue\n {\n border: \"#FFA500\",\n background: \"#FFFF00\",\n highlight: { border: \"#FFA500\", background: \"#FFFFA3\" },\n hover: { border: \"#FFA500\", background: \"#FFFFA3\" },\n }, // 1: yellow\n {\n border: \"#FA0A10\",\n background: \"#FB7E81\",\n highlight: { border: \"#FA0A10\", background: \"#FFAFB1\" },\n hover: { border: \"#FA0A10\", background: \"#FFAFB1\" },\n }, // 2: red\n {\n border: \"#41A906\",\n background: \"#7BE141\",\n highlight: { border: \"#41A906\", background: \"#A1EC76\" },\n hover: { border: \"#41A906\", background: \"#A1EC76\" },\n }, // 3: green\n {\n border: \"#E129F0\",\n background: \"#EB7DF4\",\n highlight: { border: \"#E129F0\", background: \"#F0B3F5\" },\n hover: { border: \"#E129F0\", background: \"#F0B3F5\" },\n }, // 4: magenta\n {\n border: \"#7C29F0\",\n background: \"#AD85E4\",\n highlight: { border: \"#7C29F0\", background: \"#D3BDF0\" },\n hover: { border: \"#7C29F0\", background: \"#D3BDF0\" },\n }, // 5: purple\n {\n border: \"#C37F00\",\n background: \"#FFA807\",\n highlight: { border: \"#C37F00\", background: \"#FFCA66\" },\n hover: { border: \"#C37F00\", background: \"#FFCA66\" },\n }, // 6: orange\n {\n border: \"#4220FB\",\n background: \"#6E6EFD\",\n highlight: { border: \"#4220FB\", background: \"#9B9BFD\" },\n hover: { border: \"#4220FB\", background: \"#9B9BFD\" },\n }, // 7: darkblue\n {\n border: \"#FD5A77\",\n background: \"#FFC0CB\",\n highlight: { border: \"#FD5A77\", background: \"#FFD1D9\" },\n hover: { border: \"#FD5A77\", background: \"#FFD1D9\" },\n }, // 8: pink\n {\n border: \"#4AD63A\",\n background: \"#C2FABC\",\n highlight: { border: \"#4AD63A\", background: \"#E6FFE3\" },\n hover: { border: \"#4AD63A\", background: \"#E6FFE3\" },\n }, // 9: mint\n\n {\n border: \"#990000\",\n background: \"#EE0000\",\n highlight: { border: \"#BB0000\", background: \"#FF3333\" },\n hover: { border: \"#BB0000\", background: \"#FF3333\" },\n }, // 10:bright red\n\n {\n border: \"#FF6000\",\n background: \"#FF6000\",\n highlight: { border: \"#FF6000\", background: \"#FF6000\" },\n hover: { border: \"#FF6000\", background: \"#FF6000\" },\n }, // 12: real orange\n {\n border: \"#97C2FC\",\n background: \"#2B7CE9\",\n highlight: { border: \"#D2E5FF\", background: \"#2B7CE9\" },\n hover: { border: \"#D2E5FF\", background: \"#2B7CE9\" },\n }, // 13: blue\n {\n border: \"#399605\",\n background: \"#255C03\",\n highlight: { border: \"#399605\", background: \"#255C03\" },\n hover: { border: \"#399605\", background: \"#255C03\" },\n }, // 14: green\n {\n border: \"#B70054\",\n background: \"#FF007E\",\n highlight: { border: \"#B70054\", background: \"#FF007E\" },\n hover: { border: \"#B70054\", background: \"#FF007E\" },\n }, // 15: magenta\n {\n border: \"#AD85E4\",\n background: \"#7C29F0\",\n highlight: { border: \"#D3BDF0\", background: \"#7C29F0\" },\n hover: { border: \"#D3BDF0\", background: \"#7C29F0\" },\n }, // 16: purple\n {\n border: \"#4557FA\",\n background: \"#000EA1\",\n highlight: { border: \"#6E6EFD\", background: \"#000EA1\" },\n hover: { border: \"#6E6EFD\", background: \"#000EA1\" },\n }, // 17: darkblue\n {\n border: \"#FFC0CB\",\n background: \"#FD5A77\",\n highlight: { border: \"#FFD1D9\", background: \"#FD5A77\" },\n hover: { border: \"#FFD1D9\", background: \"#FD5A77\" },\n }, // 18: pink\n {\n border: \"#C2FABC\",\n background: \"#74D66A\",\n highlight: { border: \"#E6FFE3\", background: \"#74D66A\" },\n hover: { border: \"#E6FFE3\", background: \"#74D66A\" },\n }, // 19: mint\n\n {\n border: \"#EE0000\",\n background: \"#990000\",\n highlight: { border: \"#FF3333\", background: \"#BB0000\" },\n hover: { border: \"#FF3333\", background: \"#BB0000\" },\n }, // 20:bright red\n ];\n\n this.options = {};\n this.defaultOptions = {\n useDefaultGroups: true,\n };\n Object.assign(this.options, this.defaultOptions);\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n const optionFields = [\"useDefaultGroups\"];\n\n if (options !== undefined) {\n for (const groupName in options) {\n if (Object.prototype.hasOwnProperty.call(options, groupName)) {\n if (optionFields.indexOf(groupName) === -1) {\n const group = options[groupName];\n this.add(groupName, group);\n }\n }\n }\n }\n }\n\n /**\n * Clear all groups\n */\n clear() {\n this._groups = new Map();\n this._groupNames = [];\n }\n\n /**\n * Get group options of a groupname.\n * If groupname is not found, a new group may be created.\n *\n * @param {*} groupname Can be a number, string, Date, etc.\n * @param {boolean} [shouldCreate=true] If true, create a new group\n * @returns {object} The found or created group\n */\n get(groupname, shouldCreate = true) {\n let group = this._groups.get(groupname);\n\n if (group === undefined && shouldCreate) {\n if (\n this.options.useDefaultGroups === false &&\n this._groupNames.length > 0\n ) {\n // create new group\n const index = this._groupIndex % this._groupNames.length;\n ++this._groupIndex;\n group = {};\n group.color = this._groups.get(this._groupNames[index]);\n this._groups.set(groupname, group);\n } else {\n // create new group\n const index = this._defaultIndex % this._defaultGroups.length;\n this._defaultIndex++;\n group = {};\n group.color = this._defaultGroups[index];\n this._groups.set(groupname, group);\n }\n }\n\n return group;\n }\n\n /**\n * Add custom group style.\n *\n * @param {string} groupName - The name of the group, a new group will be\n * created if a group with the same name doesn't exist, otherwise the old\n * groups style will be overwritten.\n * @param {object} style - An object containing borderColor, backgroundColor,\n * etc.\n * @returns {object} The created group object.\n */\n add(groupName, style) {\n // Only push group name once to prevent duplicates which would consume more\n // RAM and also skew the distribution towards more often updated groups,\n // neither of which is desirable.\n if (!this._groups.has(groupName)) {\n this._groupNames.push(groupName);\n }\n this._groups.set(groupName, style);\n return style;\n }\n}\n","'use strict';\nvar $ = require('../internals/export');\n\n// `Number.isNaN` method\n// https://tc39.es/ecma262/#sec-number.isnan\n$({ target: 'Number', stat: true }, {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare -- NaN check\n return number !== number;\n }\n});\n","'use strict';\nrequire('../../modules/es.number.is-nan');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Number.isNaN;\n","'use strict';\nvar global = require('../internals/global');\n\nvar globalIsFinite = global.isFinite;\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n// eslint-disable-next-line es/no-number-isfinite -- safe\nmodule.exports = Number.isFinite || function isFinite(it) {\n return typeof it == 'number' && globalIsFinite(it);\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar numberIsFinite = require('../internals/number-is-finite');\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n$({ target: 'Number', stat: true }, { isFinite: numberIsFinite });\n","'use strict';\nrequire('../../modules/es.number.is-finite');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Number.isFinite;\n","'use strict';\nvar $ = require('../internals/export');\nvar $some = require('../internals/array-iteration').some;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('some');\n\n// `Array.prototype.some` method\n// https://tc39.es/ecma262/#sec-array.prototype.some\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, {\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.some');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').some;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/some');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.some;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.some) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/some');\n\nmodule.exports = parent;\n","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}","'use strict';\nvar parent = require('../../stable/object/create');\n\nmodule.exports = parent;\n","'use strict';\nmodule.exports = require('../../full/object/create');\n","'use strict';\nvar $ = require('../internals/export');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n$({ target: 'Object', stat: true }, {\n setPrototypeOf: setPrototypeOf\n});\n","'use strict';\nrequire('../../modules/es.object.set-prototype-of');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.setPrototypeOf;\n","'use strict';\nmodule.exports = require('../../full/object/set-prototype-of');\n","'use strict';\nvar parent = require('../../stable/instance/bind');\n\nmodule.exports = parent;\n","import _Object$setPrototypeOf from \"core-js-pure/features/object/set-prototype-of.js\";\nimport _bindInstanceProperty from \"core-js-pure/features/instance/bind.js\";\nexport default function _setPrototypeOf(o, p) {\n var _context;\n _setPrototypeOf = _Object$setPrototypeOf ? _bindInstanceProperty(_context = _Object$setPrototypeOf).call(_context) : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import _Object$create from \"core-js-pure/features/object/create.js\";\nimport _Object$defineProperty from \"core-js-pure/features/object/define-property.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = _Object$create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n _Object$defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n return assertThisInitialized(self);\n}","'use strict';\nvar parent = require('../../stable/object/get-prototype-of');\n\nmodule.exports = parent;\n","'use strict';\nmodule.exports = require('../../full/object/get-prototype-of');\n","import _Object$setPrototypeOf from \"core-js-pure/features/object/set-prototype-of.js\";\nimport _bindInstanceProperty from \"core-js-pure/features/instance/bind.js\";\nimport _Object$getPrototypeOf from \"core-js-pure/features/object/get-prototype-of.js\";\nexport default function _getPrototypeOf(o) {\n var _context;\n _getPrototypeOf = _Object$setPrototypeOf ? _bindInstanceProperty(_context = _Object$getPrototypeOf).call(_context) : function _getPrototypeOf(o) {\n return o.__proto__ || _Object$getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","import _Object$defineProperty from \"core-js-pure/features/object/define-property.js\";\nimport toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n _Object$defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","var _Symbol = require(\"core-js-pure/features/symbol/index.js\");\nvar _Symbol$iterator = require(\"core-js-pure/features/symbol/iterator.js\");\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof _Symbol && \"symbol\" == typeof _Symbol$iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof _Symbol && o.constructor === _Symbol && o !== _Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","'use strict';\nmodule.exports = require('../../full/instance/for-each');\n","'use strict';\nvar parent = require('../../stable/instance/for-each');\n\nmodule.exports = parent;\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n","'use strict';\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\n// `InstallErrorCause` abstract operation\n// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause\nmodule.exports = function (O, options) {\n if (isObject(options) && 'cause' in options) {\n createNonEnumerableProperty(O, 'cause', options.cause);\n }\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar $Error = Error;\nvar replace = uncurryThis(''.replace);\n\nvar TEST = (function (arg) { return String(new $Error(arg).stack); })('zxcasd');\n// eslint-disable-next-line redos/no-vulnerable -- safe\nvar V8_OR_CHAKRA_STACK_ENTRY = /\\n\\s*at [^:]*:[^\\n]*/;\nvar IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);\n\nmodule.exports = function (stack, dropEntries) {\n if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) {\n while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');\n } return stack;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = !fails(function () {\n var error = new Error('a');\n if (!('stack' in error)) return true;\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));\n return error.stack !== 7;\n});\n","'use strict';\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar clearErrorStack = require('../internals/error-stack-clear');\nvar ERROR_STACK_INSTALLABLE = require('../internals/error-stack-installable');\n\n// non-standard V8\nvar captureStackTrace = Error.captureStackTrace;\n\nmodule.exports = function (error, C, stack, dropEntries) {\n if (ERROR_STACK_INSTALLABLE) {\n if (captureStackTrace) captureStackTrace(error, C);\n else createNonEnumerableProperty(error, 'stack', clearErrorStack(stack, dropEntries));\n }\n};\n","'use strict';\nvar toString = require('../internals/to-string');\n\nmodule.exports = function (argument, $default) {\n return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar create = require('../internals/object-create');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar installErrorCause = require('../internals/install-error-cause');\nvar installErrorStack = require('../internals/error-stack-install');\nvar iterate = require('../internals/iterate');\nvar normalizeStringArgument = require('../internals/normalize-string-argument');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Error = Error;\nvar push = [].push;\n\nvar $AggregateError = function AggregateError(errors, message /* , options */) {\n var isInstance = isPrototypeOf(AggregateErrorPrototype, this);\n var that;\n if (setPrototypeOf) {\n that = setPrototypeOf(new $Error(), isInstance ? getPrototypeOf(this) : AggregateErrorPrototype);\n } else {\n that = isInstance ? this : create(AggregateErrorPrototype);\n createNonEnumerableProperty(that, TO_STRING_TAG, 'Error');\n }\n if (message !== undefined) createNonEnumerableProperty(that, 'message', normalizeStringArgument(message));\n installErrorStack(that, $AggregateError, that.stack, 1);\n if (arguments.length > 2) installErrorCause(that, arguments[2]);\n var errorsArray = [];\n iterate(errors, push, { that: errorsArray });\n createNonEnumerableProperty(that, 'errors', errorsArray);\n return that;\n};\n\nif (setPrototypeOf) setPrototypeOf($AggregateError, $Error);\nelse copyConstructorProperties($AggregateError, $Error, { name: true });\n\nvar AggregateErrorPrototype = $AggregateError.prototype = create($Error.prototype, {\n constructor: createPropertyDescriptor(1, $AggregateError),\n message: createPropertyDescriptor(1, ''),\n name: createPropertyDescriptor(1, 'AggregateError')\n});\n\n// `AggregateError` constructor\n// https://tc39.es/ecma262/#sec-aggregate-error-constructor\n$({ global: true, constructor: true, arity: 2 }, {\n AggregateError: $AggregateError\n});\n","'use strict';\nvar global = require('../internals/global');\nvar classof = require('../internals/classof-raw');\n\nmodule.exports = classof(global.process) === 'process';\n","'use strict';\nvar global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind-context');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar fails = require('../internals/fails');\nvar html = require('../internals/html');\nvar arraySlice = require('../internals/array-slice');\nvar createElement = require('../internals/document-create-element');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar Dispatch = global.Dispatch;\nvar Function = global.Function;\nvar MessageChannel = global.MessageChannel;\nvar String = global.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar $location, defer, channel, port;\n\nfails(function () {\n // Deno throws a ReferenceError on `location` access without `--location` flag\n $location = global.location;\n});\n\nvar run = function (id) {\n if (hasOwn(queue, id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar eventListener = function (event) {\n run(event.data);\n};\n\nvar globalPostMessageDefer = function (id) {\n // old engines have not location.origin\n global.postMessage(String(id), $location.protocol + '//' + $location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(handler) {\n validateArgumentsLength(arguments.length, 1);\n var fn = isCallable(handler) ? handler : Function(handler);\n var args = arraySlice(arguments, 1);\n queue[++counter] = function () {\n apply(fn, undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = eventListener;\n defer = bind(port.postMessage, port);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n isCallable(global.postMessage) &&\n !global.importScripts &&\n $location && $location.protocol !== 'file:' &&\n !fails(globalPostMessageDefer)\n ) {\n defer = globalPostMessageDefer;\n global.addEventListener('message', eventListener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n","'use strict';\nvar isConstructor = require('../internals/is-constructor');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n if (isConstructor(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a constructor');\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\nvar aConstructor = require('../internals/a-constructor');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || isNullOrUndefined(S = anObject(C)[SPECIES]) ? defaultConstructor : aConstructor(S);\n};\n","'use strict';\nvar userAgent = require('../internals/engine-user-agent');\n\n// eslint-disable-next-line redos/no-vulnerable -- safe\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n","'use strict';\nvar Queue = function () {\n this.head = null;\n this.tail = null;\n};\n\nQueue.prototype = {\n add: function (item) {\n var entry = { item: item, next: null };\n var tail = this.tail;\n if (tail) tail.next = entry;\n else this.head = entry;\n this.tail = entry;\n },\n get: function () {\n var entry = this.head;\n if (entry) {\n var next = this.head = entry.next;\n if (next === null) this.tail = null;\n return entry.item;\n }\n }\n};\n\nmodule.exports = Queue;\n","'use strict';\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar macrotask = require('../internals/task').set;\nvar Queue = require('../internals/queue');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_IOS_PEBBLE = require('../internals/engine-is-ios-pebble');\nvar IS_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar microtask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\nvar notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!microtask) {\n var queue = new Queue();\n\n var flush = function () {\n var parent, fn;\n if (IS_NODE && (parent = process.domain)) parent.exit();\n while (fn = queue.get()) try {\n fn();\n } catch (error) {\n if (queue.head) notify();\n throw error;\n }\n if (parent) parent.enter();\n };\n\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n toggle = true;\n node = document.createTextNode('');\n new MutationObserver(flush).observe(node, { characterData: true });\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n // workaround of WebKit ~ iOS Safari 10.1 bug\n promise.constructor = Promise;\n then = bind(promise.then, promise);\n notify = function () {\n then(flush);\n };\n // Node.js without promises\n } else if (IS_NODE) {\n notify = function () {\n process.nextTick(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessage\n // - onreadystatechange\n // - setTimeout\n } else {\n // `webpack` dev server bug on IE global methods - use bind(fn, global)\n macrotask = bind(macrotask, global);\n notify = function () {\n macrotask(flush);\n };\n }\n\n microtask = function (fn) {\n if (!queue.head) notify();\n queue.add(fn);\n };\n}\n\nmodule.exports = microtask;\n","'use strict';\nvar userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /ipad|iphone|ipod/i.test(userAgent) && typeof Pebble != 'undefined';\n","'use strict';\nvar userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n","'use strict';\nmodule.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n","'use strict';\nvar global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","'use strict';\n/* global Deno -- Deno case */\nmodule.exports = typeof Deno == 'object' && Deno && typeof Deno.version == 'object';\n","'use strict';\nvar IS_DENO = require('../internals/engine-is-deno');\nvar IS_NODE = require('../internals/engine-is-node');\n\nmodule.exports = !IS_DENO && !IS_NODE\n && typeof window == 'object'\n && typeof document == 'object';\n","'use strict';\nvar global = require('../internals/global');\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar isCallable = require('../internals/is-callable');\nvar isForced = require('../internals/is-forced');\nvar inspectSource = require('../internals/inspect-source');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_BROWSER = require('../internals/engine-is-browser');\nvar IS_DENO = require('../internals/engine-is-deno');\nvar IS_PURE = require('../internals/is-pure');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\nvar SPECIES = wellKnownSymbol('species');\nvar SUBCLASSING = false;\nvar NATIVE_PROMISE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent);\n\nvar FORCED_PROMISE_CONSTRUCTOR = isForced('Promise', function () {\n var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(NativePromiseConstructor);\n var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(NativePromiseConstructor);\n // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // We can't detect it synchronously, so just check versions\n if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;\n // We need Promise#{ catch, finally } in the pure version for preventing prototype pollution\n if (IS_PURE && !(NativePromisePrototype['catch'] && NativePromisePrototype['finally'])) return true;\n // We can't use @@species feature detection in V8 since it causes\n // deoptimization and performance degradation\n // https://github.com/zloirock/core-js/issues/679\n if (!V8_VERSION || V8_VERSION < 51 || !/native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) {\n // Detect correctness of subclassing with @@species support\n var promise = new NativePromiseConstructor(function (resolve) { resolve(1); });\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;\n if (!SUBCLASSING) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n } return !GLOBAL_CORE_JS_PROMISE && (IS_BROWSER || IS_DENO) && !NATIVE_PROMISE_REJECTION_EVENT;\n});\n\nmodule.exports = {\n CONSTRUCTOR: FORCED_PROMISE_CONSTRUCTOR,\n REJECTION_EVENT: NATIVE_PROMISE_REJECTION_EVENT,\n SUBCLASSING: SUBCLASSING\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\n\nvar $TypeError = TypeError;\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw new $TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aCallable(resolve);\n this.reject = aCallable(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar IS_NODE = require('../internals/engine-is-node');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar aCallable = require('../internals/a-callable');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar perform = require('../internals/perform');\nvar Queue = require('../internals/queue');\nvar InternalStateModule = require('../internals/internal-state');\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar PromiseConstructorDetection = require('../internals/promise-constructor-detection');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\n\nvar PROMISE = 'Promise';\nvar FORCED_PROMISE_CONSTRUCTOR = PromiseConstructorDetection.CONSTRUCTOR;\nvar NATIVE_PROMISE_REJECTION_EVENT = PromiseConstructorDetection.REJECTION_EVENT;\nvar NATIVE_PROMISE_SUBCLASSING = PromiseConstructorDetection.SUBCLASSING;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar setInternalState = InternalStateModule.set;\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\nvar PromiseConstructor = NativePromiseConstructor;\nvar PromisePrototype = NativePromisePrototype;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\n\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\n\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && isCallable(then = it.then) ? then : false;\n};\n\nvar callReaction = function (reaction, state) {\n var value = state.value;\n var ok = state.state === FULFILLED;\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n state.rejection = HANDLED;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // can throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(new TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n call(then, result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (error) {\n if (domain && !exited) domain.exit();\n reject(error);\n }\n};\n\nvar notify = function (state, isReject) {\n if (state.notified) return;\n state.notified = true;\n microtask(function () {\n var reactions = state.reactions;\n var reaction;\n while (reaction = reactions.get()) {\n callReaction(reaction, state);\n }\n state.notified = false;\n if (isReject && !state.rejection) onUnhandled(state);\n });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n event = document.createEvent('Event');\n event.promise = promise;\n event.reason = reason;\n event.initEvent(name, false, true);\n global.dispatchEvent(event);\n } else event = { promise: promise, reason: reason };\n if (!NATIVE_PROMISE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n var value = state.value;\n var IS_UNHANDLED = isUnhandled(state);\n var result;\n if (IS_UNHANDLED) {\n result = perform(function () {\n if (IS_NODE) {\n process.emit('unhandledRejection', value, promise);\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n if (result.error) throw result.value;\n }\n });\n};\n\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n if (IS_NODE) {\n process.emit('rejectionHandled', promise);\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\n\nvar bind = function (fn, state, unwrap) {\n return function (value) {\n fn(state, value, unwrap);\n };\n};\n\nvar internalReject = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n try {\n if (state.facade === value) throw new TypeError(\"Promise can't be resolved itself\");\n var then = isThenable(value);\n if (then) {\n microtask(function () {\n var wrapper = { done: false };\n try {\n call(then, value,\n bind(internalResolve, wrapper, state),\n bind(internalReject, wrapper, state)\n );\n } catch (error) {\n internalReject(wrapper, error, state);\n }\n });\n } else {\n state.value = value;\n state.state = FULFILLED;\n notify(state, false);\n }\n } catch (error) {\n internalReject({ done: false }, error, state);\n }\n};\n\n// constructor polyfill\nif (FORCED_PROMISE_CONSTRUCTOR) {\n // 25.4.3.1 Promise(executor)\n PromiseConstructor = function Promise(executor) {\n anInstance(this, PromisePrototype);\n aCallable(executor);\n call(Internal, this);\n var state = getInternalPromiseState(this);\n try {\n executor(bind(internalResolve, state), bind(internalReject, state));\n } catch (error) {\n internalReject(state, error);\n }\n };\n\n PromisePrototype = PromiseConstructor.prototype;\n\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n Internal = function Promise(executor) {\n setInternalState(this, {\n type: PROMISE,\n done: false,\n notified: false,\n parent: false,\n reactions: new Queue(),\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n\n // `Promise.prototype.then` method\n // https://tc39.es/ecma262/#sec-promise.prototype.then\n Internal.prototype = defineBuiltIn(PromisePrototype, 'then', function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n state.parent = true;\n reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;\n reaction.fail = isCallable(onRejected) && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n if (state.state === PENDING) state.reactions.add(reaction);\n else microtask(function () {\n callReaction(reaction, state);\n });\n return reaction.promise;\n });\n\n OwnPromiseCapability = function () {\n var promise = new Internal();\n var state = getInternalPromiseState(promise);\n this.promise = promise;\n this.resolve = bind(internalResolve, state);\n this.reject = bind(internalReject, state);\n };\n\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === PromiseConstructor || C === PromiseWrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n\n if (!IS_PURE && isCallable(NativePromiseConstructor) && NativePromisePrototype !== Object.prototype) {\n nativeThen = NativePromisePrototype.then;\n\n if (!NATIVE_PROMISE_SUBCLASSING) {\n // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs\n defineBuiltIn(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n call(nativeThen, that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n }\n\n // make `.constructor === Promise` work for native promise-based APIs\n try {\n delete NativePromisePrototype.constructor;\n } catch (error) { /* empty */ }\n\n // make `instanceof Promise` work for native promise-based APIs\n if (setPrototypeOf) {\n setPrototypeOf(NativePromisePrototype, PromisePrototype);\n }\n }\n}\n\n$({ global: true, constructor: true, wrap: true, forced: FORCED_PROMISE_CONSTRUCTOR }, {\n Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n","'use strict';\nmodule.exports = function (a, b) {\n try {\n // eslint-disable-next-line no-console -- safe\n arguments.length === 1 ? console.error(a) : console.error(a, b);\n } catch (error) { /* empty */ }\n};\n","'use strict';\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR;\n\nmodule.exports = FORCED_PROMISE_CONSTRUCTOR || !checkCorrectnessOfIteration(function (iterable) {\n NativePromiseConstructor.all(iterable).then(undefined, function () { /* empty */ });\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\nvar PROMISE_STATICS_INCORRECT_ITERATION = require('../internals/promise-statics-incorrect-iteration');\n\n// `Promise.all` method\n// https://tc39.es/ecma262/#sec-promise.all\n$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call($promiseResolve, C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR;\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar defineBuiltIn = require('../internals/define-built-in');\n\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\n\n// `Promise.prototype.catch` method\n// https://tc39.es/ecma262/#sec-promise.prototype.catch\n$({ target: 'Promise', proto: true, forced: FORCED_PROMISE_CONSTRUCTOR, real: true }, {\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n});\n\n// makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`\nif (!IS_PURE && isCallable(NativePromiseConstructor)) {\n var method = getBuiltIn('Promise').prototype['catch'];\n if (NativePromisePrototype['catch'] !== method) {\n defineBuiltIn(NativePromisePrototype, 'catch', method, { unsafe: true });\n }\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\nvar PROMISE_STATICS_INCORRECT_ITERATION = require('../internals/promise-statics-incorrect-iteration');\n\n// `Promise.race` method\n// https://tc39.es/ecma262/#sec-promise.race\n$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n iterate(iterable, function (promise) {\n call($promiseResolve, C, promise).then(capability.resolve, reject);\n });\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR;\n\n// `Promise.reject` method\n// https://tc39.es/ecma262/#sec-promise.reject\n$({ target: 'Promise', stat: true, forced: FORCED_PROMISE_CONSTRUCTOR }, {\n reject: function reject(r) {\n var capability = newPromiseCapabilityModule.f(this);\n call(capability.reject, undefined, r);\n return capability.promise;\n }\n});\n","'use strict';\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR;\nvar promiseResolve = require('../internals/promise-resolve');\n\nvar PromiseConstructorWrapper = getBuiltIn('Promise');\nvar CHECK_WRAPPER = IS_PURE && !FORCED_PROMISE_CONSTRUCTOR;\n\n// `Promise.resolve` method\n// https://tc39.es/ecma262/#sec-promise.resolve\n$({ target: 'Promise', stat: true, forced: IS_PURE || FORCED_PROMISE_CONSTRUCTOR }, {\n resolve: function resolve(x) {\n return promiseResolve(CHECK_WRAPPER && this === PromiseConstructorWrapper ? NativePromiseConstructor : this, x);\n }\n});\n","'use strict';\nmodule.exports = true;\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\nvar PROMISE_STATICS_INCORRECT_ITERATION = require('../internals/promise-statics-incorrect-iteration');\n\n// `Promise.allSettled` method\n// https://tc39.es/ecma262/#sec-promise.allsettled\n$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {\n allSettled: function allSettled(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call(promiseResolve, C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'fulfilled', value: value };\n --remaining || resolve(values);\n }, function (error) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'rejected', reason: error };\n --remaining || resolve(values);\n });\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar getBuiltIn = require('../internals/get-built-in');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\nvar PROMISE_STATICS_INCORRECT_ITERATION = require('../internals/promise-statics-incorrect-iteration');\n\nvar PROMISE_ANY_ERROR = 'No one promise resolved';\n\n// `Promise.any` method\n// https://tc39.es/ecma262/#sec-promise.any\n$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {\n any: function any(iterable) {\n var C = this;\n var AggregateError = getBuiltIn('AggregateError');\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aCallable(C.resolve);\n var errors = [];\n var counter = 0;\n var remaining = 1;\n var alreadyResolved = false;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyRejected = false;\n remaining++;\n call(promiseResolve, C, promise).then(function (value) {\n if (alreadyRejected || alreadyResolved) return;\n alreadyResolved = true;\n resolve(value);\n }, function (error) {\n if (alreadyRejected || alreadyResolved) return;\n alreadyRejected = true;\n errors[index] = error;\n --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n });\n });\n --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar fails = require('../internals/fails');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar speciesConstructor = require('../internals/species-constructor');\nvar promiseResolve = require('../internals/promise-resolve');\nvar defineBuiltIn = require('../internals/define-built-in');\n\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromiseConstructor && fails(function () {\n // eslint-disable-next-line unicorn/no-thenable -- required for testing\n NativePromisePrototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.es/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n 'finally': function (onFinally) {\n var C = speciesConstructor(this, getBuiltIn('Promise'));\n var isFunction = isCallable(onFinally);\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n }\n});\n\n// makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then`\nif (!IS_PURE && isCallable(NativePromiseConstructor)) {\n var method = getBuiltIn('Promise').prototype['finally'];\n if (NativePromisePrototype['finally'] !== method) {\n defineBuiltIn(NativePromisePrototype, 'finally', method, { unsafe: true });\n }\n}\n","'use strict';\nrequire('../../modules/es.aggregate-error');\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.promise');\nrequire('../../modules/es.promise.all-settled');\nrequire('../../modules/es.promise.any');\nrequire('../../modules/es.promise.finally');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Promise;\n","'use strict';\nvar parent = require('../../es/promise');\nrequire('../../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n","'use strict';\nvar $ = require('../internals/export');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\n\n// `Promise.withResolvers` method\n// https://github.com/tc39/proposal-promise-with-resolvers\n$({ target: 'Promise', stat: true }, {\n withResolvers: function withResolvers() {\n var promiseCapability = newPromiseCapabilityModule.f(this);\n return {\n promise: promiseCapability.promise,\n resolve: promiseCapability.resolve,\n reject: promiseCapability.reject\n };\n }\n});\n","'use strict';\nvar parent = require('../../stable/promise');\nrequire('../../modules/esnext.promise.with-resolvers');\n\nmodule.exports = parent;\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\n\n// `Promise.try` method\n// https://github.com/tc39/proposal-promise-try\n$({ target: 'Promise', stat: true, forced: true }, {\n 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapabilityModule.f(this);\n var result = perform(callbackfn);\n (result.error ? promiseCapability.reject : promiseCapability.resolve)(result.value);\n return promiseCapability.promise;\n }\n});\n","'use strict';\nvar parent = require('../../actual/promise');\n// TODO: Remove from `core-js@4`\nrequire('../../modules/esnext.aggregate-error');\nrequire('../../modules/esnext.promise.all-settled');\nrequire('../../modules/esnext.promise.try');\nrequire('../../modules/esnext.promise.any');\n\nmodule.exports = parent;\n","'use strict';\nmodule.exports = require('../../full/promise');\n","'use strict';\nmodule.exports = require('../../full/instance/reverse');\n","'use strict';\nvar parent = require('../../stable/instance/reverse');\n\nmodule.exports = parent;\n","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar _Object$defineProperty = require(\"core-js-pure/features/object/define-property.js\");\nvar _Symbol = require(\"core-js-pure/features/symbol/index.js\");\nvar _Object$create = require(\"core-js-pure/features/object/create.js\");\nvar _Object$getPrototypeOf = require(\"core-js-pure/features/object/get-prototype-of.js\");\nvar _forEachInstanceProperty = require(\"core-js-pure/features/instance/for-each.js\");\nvar _pushInstanceProperty = require(\"core-js-pure/features/instance/push.js\");\nvar _Object$setPrototypeOf = require(\"core-js-pure/features/object/set-prototype-of.js\");\nvar _Promise = require(\"core-js-pure/features/promise/index.js\");\nvar _reverseInstanceProperty = require(\"core-js-pure/features/instance/reverse.js\");\nvar _sliceInstanceProperty = require(\"core-js-pure/features/instance/slice.js\");\nfunction _regeneratorRuntime() {\n \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n return e;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n var t,\n e = {},\n r = Object.prototype,\n n = r.hasOwnProperty,\n o = _Object$defineProperty || function (t, e, r) {\n t[e] = r.value;\n },\n i = \"function\" == typeof _Symbol ? _Symbol : {},\n a = i.iterator || \"@@iterator\",\n c = i.asyncIterator || \"@@asyncIterator\",\n u = i.toStringTag || \"@@toStringTag\";\n function define(t, e, r) {\n return _Object$defineProperty(t, e, {\n value: r,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), t[e];\n }\n try {\n define({}, \"\");\n } catch (t) {\n define = function define(t, e, r) {\n return t[e] = r;\n };\n }\n function wrap(t, e, r, n) {\n var i = e && e.prototype instanceof Generator ? e : Generator,\n a = _Object$create(i.prototype),\n c = new Context(n || []);\n return o(a, \"_invoke\", {\n value: makeInvokeMethod(t, r, c)\n }), a;\n }\n function tryCatch(t, e, r) {\n try {\n return {\n type: \"normal\",\n arg: t.call(e, r)\n };\n } catch (t) {\n return {\n type: \"throw\",\n arg: t\n };\n }\n }\n e.wrap = wrap;\n var h = \"suspendedStart\",\n l = \"suspendedYield\",\n f = \"executing\",\n s = \"completed\",\n y = {};\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n var p = {};\n define(p, a, function () {\n return this;\n });\n var d = _Object$getPrototypeOf,\n v = d && d(d(values([])));\n v && v !== r && n.call(v, a) && (p = v);\n var g = GeneratorFunctionPrototype.prototype = Generator.prototype = _Object$create(p);\n function defineIteratorMethods(t) {\n var _context;\n _forEachInstanceProperty(_context = [\"next\", \"throw\", \"return\"]).call(_context, function (e) {\n define(t, e, function (t) {\n return this._invoke(e, t);\n });\n });\n }\n function AsyncIterator(t, e) {\n function invoke(r, o, i, a) {\n var c = tryCatch(t[r], t, o);\n if (\"throw\" !== c.type) {\n var u = c.arg,\n h = u.value;\n return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) {\n invoke(\"next\", t, i, a);\n }, function (t) {\n invoke(\"throw\", t, i, a);\n }) : e.resolve(h).then(function (t) {\n u.value = t, i(u);\n }, function (t) {\n return invoke(\"throw\", t, i, a);\n });\n }\n a(c.arg);\n }\n var r;\n o(this, \"_invoke\", {\n value: function value(t, n) {\n function callInvokeWithMethodAndArg() {\n return new e(function (e, r) {\n invoke(t, n, e, r);\n });\n }\n return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n }\n });\n }\n function makeInvokeMethod(e, r, n) {\n var o = h;\n return function (i, a) {\n if (o === f) throw new Error(\"Generator is already running\");\n if (o === s) {\n if (\"throw\" === i) throw a;\n return {\n value: t,\n done: !0\n };\n }\n for (n.method = i, n.arg = a;;) {\n var c = n.delegate;\n if (c) {\n var u = maybeInvokeDelegate(c, n);\n if (u) {\n if (u === y) continue;\n return u;\n }\n }\n if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) {\n if (o === h) throw o = s, n.arg;\n n.dispatchException(n.arg);\n } else \"return\" === n.method && n.abrupt(\"return\", n.arg);\n o = f;\n var p = tryCatch(e, r, n);\n if (\"normal\" === p.type) {\n if (o = n.done ? s : l, p.arg === y) continue;\n return {\n value: p.arg,\n done: n.done\n };\n }\n \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg);\n }\n };\n }\n function maybeInvokeDelegate(e, r) {\n var n = r.method,\n o = e.iterator[n];\n if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y;\n var i = tryCatch(o, e.iterator, r.arg);\n if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y;\n var a = i.arg;\n return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y);\n }\n function pushTryEntry(t) {\n var _context2;\n var e = {\n tryLoc: t[0]\n };\n 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), _pushInstanceProperty(_context2 = this.tryEntries).call(_context2, e);\n }\n function resetTryEntry(t) {\n var e = t.completion || {};\n e.type = \"normal\", delete e.arg, t.completion = e;\n }\n function Context(t) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], _forEachInstanceProperty(t).call(t, pushTryEntry, this), this.reset(!0);\n }\n function values(e) {\n if (e || \"\" === e) {\n var r = e[a];\n if (r) return r.call(e);\n if (\"function\" == typeof e.next) return e;\n if (!isNaN(e.length)) {\n var o = -1,\n i = function next() {\n for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;\n return next.value = t, next.done = !0, next;\n };\n return i.next = i;\n }\n }\n throw new TypeError(_typeof(e) + \" is not iterable\");\n }\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", {\n value: GeneratorFunctionPrototype,\n configurable: !0\n }), o(GeneratorFunctionPrototype, \"constructor\", {\n value: GeneratorFunction,\n configurable: !0\n }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) {\n var e = \"function\" == typeof t && t.constructor;\n return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name));\n }, e.mark = function (t) {\n return _Object$setPrototypeOf ? _Object$setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = _Object$create(g), t;\n }, e.awrap = function (t) {\n return {\n __await: t\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {\n return this;\n }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {\n void 0 === i && (i = _Promise);\n var a = new AsyncIterator(wrap(t, r, n, o), i);\n return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {\n return t.done ? t.value : a.next();\n });\n }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () {\n return this;\n }), define(g, \"toString\", function () {\n return \"[object Generator]\";\n }), e.keys = function (t) {\n var e = Object(t),\n r = [];\n for (var n in e) _pushInstanceProperty(r).call(r, n);\n return _reverseInstanceProperty(r).call(r), function next() {\n for (; r.length;) {\n var t = r.pop();\n if (t in e) return next.value = t, next.done = !1, next;\n }\n return next.done = !0, next;\n };\n }, e.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(e) {\n var _context3;\n if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, _forEachInstanceProperty(_context3 = this.tryEntries).call(_context3, resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+_sliceInstanceProperty(r).call(r, 1)) && (this[r] = t);\n },\n stop: function stop() {\n this.done = !0;\n var t = this.tryEntries[0].completion;\n if (\"throw\" === t.type) throw t.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(e) {\n if (this.done) throw e;\n var r = this;\n function handle(n, o) {\n return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o;\n }\n for (var o = this.tryEntries.length - 1; o >= 0; --o) {\n var i = this.tryEntries[o],\n a = i.completion;\n if (\"root\" === i.tryLoc) return handle(\"end\");\n if (i.tryLoc <= this.prev) {\n var c = n.call(i, \"catchLoc\"),\n u = n.call(i, \"finallyLoc\");\n if (c && u) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n } else if (c) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n } else {\n if (!u) throw new Error(\"try statement without catch or finally\");\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(t, e) {\n for (var r = this.tryEntries.length - 1; r >= 0; --r) {\n var o = this.tryEntries[r];\n if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) {\n var i = o;\n break;\n }\n }\n i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);\n var a = i ? i.completion : {};\n return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a);\n },\n complete: function complete(t, e) {\n if (\"throw\" === t.type) throw t.arg;\n return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y;\n },\n finish: function finish(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;\n }\n },\n \"catch\": function _catch(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.tryLoc === t) {\n var n = r.completion;\n if (\"throw\" === n.type) {\n var o = n.arg;\n resetTryEntry(r);\n }\n return o;\n }\n }\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(e, r, n) {\n return this.delegate = {\n iterator: values(e),\n resultName: r,\n nextLoc: n\n }, \"next\" === this.method && (this.arg = t), y;\n }\n }, e;\n}\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// TODO(Babel 8): Remove this file.\n\nvar runtime = require(\"../helpers/regeneratorRuntime\")();\nmodule.exports = runtime;\n\n// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nvar $TypeError = TypeError;\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n return function (that, callbackfn, argumentsLength, memo) {\n aCallable(callbackfn);\n var O = toObject(that);\n var self = IndexedObject(O);\n var length = lengthOfArrayLike(O);\n var index = IS_RIGHT ? length - 1 : 0;\n var i = IS_RIGHT ? -1 : 1;\n if (argumentsLength < 2) while (true) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (IS_RIGHT ? index < 0 : length <= index) {\n throw new $TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.reduce` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduce\n left: createMethod(false),\n // `Array.prototype.reduceRight` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n right: createMethod(true)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $reduce = require('../internals/array-reduce').left;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar CHROME_VERSION = require('../internals/engine-v8-version');\nvar IS_NODE = require('../internals/engine-is-node');\n\n// Chrome 80-82 has a critical bug\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982\nvar CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;\nvar FORCED = CHROME_BUG || !arrayMethodIsStrict('reduce');\n\n// `Array.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-array.prototype.reduce\n$({ target: 'Array', proto: true, forced: FORCED }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n var length = arguments.length;\n return $reduce(this, callbackfn, length, length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.reduce');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').reduce;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/reduce');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.reduce;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.reduce) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/reduce');\n\nmodule.exports = parent;\n","'use strict';\nvar isArray = require('../internals/is-array');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar bind = require('../internals/function-bind-context');\n\n// `FlattenIntoArray` abstract operation\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? bind(mapper, thisArg) : false;\n var element, elementLen;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n if (depth > 0 && isArray(element)) {\n elementLen = lengthOfArrayLike(element);\n targetIndex = flattenIntoArray(target, original, element, elementLen, targetIndex, depth - 1) - 1;\n } else {\n doesNotExceedSafeInteger(targetIndex + 1);\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n};\n\nmodule.exports = flattenIntoArray;\n","'use strict';\nvar $ = require('../internals/export');\nvar flattenIntoArray = require('../internals/flatten-into-array');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\n// `Array.prototype.flatMap` method\n// https://tc39.es/ecma262/#sec-array.prototype.flatmap\n$({ target: 'Array', proto: true }, {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen = lengthOfArrayLike(O);\n var A;\n aCallable(callbackfn);\n A = arraySpeciesCreate(O, 0);\n A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return A;\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.flat-map');\nrequire('../../../modules/es.array.unscopables.flat-map');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').flatMap;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/flat-map');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.flatMap;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.flatMap) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/flat-map');\n\nmodule.exports = parent;\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.es/ecma262/#sec-set-objects\ncollection('Set', function (init) {\n return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.set');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Set;\n","module.exports = require(\"core-js-pure/stable/symbol/iterator\");","'use strict';\nrequire('../modules/es.array.iterator');\nrequire('../modules/es.string.iterator');\nvar getIterator = require('../internals/get-iterator');\n\nmodule.exports = getIterator;\n","'use strict';\nvar arraySlice = require('../internals/array-slice-simple');\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n array,\n mergeSort(arraySlice(array, 0, middle), comparefn),\n mergeSort(arraySlice(array, middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n\n while (lindex < llength || rindex < rlength) {\n array[lindex + rindex] = (lindex < llength && rindex < rlength)\n ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n : lindex < llength ? left[lindex++] : right[rindex++];\n } return array;\n};\n\nmodule.exports = mergeSort;\n","'use strict';\nvar userAgent = require('../internals/engine-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n","'use strict';\nvar UA = require('../internals/engine-user-agent');\n\nmodule.exports = /MSIE|Trident/.test(UA);\n","'use strict';\nvar userAgent = require('../internals/engine-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar deletePropertyOrThrow = require('../internals/delete-property-or-throw');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar internalSort = require('../internals/array-sort');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar test = [];\nvar nativeSort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 70;\n if (FF && FF > 3) return;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 603;\n\n var result = '';\n var code, chr, value, index;\n\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n for (code = 65; code < 76; code++) {\n chr = String.fromCharCode(code);\n\n switch (code) {\n case 66: case 69: case 70: case 72: value = 3; break;\n case 68: case 71: value = 4; break;\n default: value = 2;\n }\n\n for (index = 0; index < 47; index++) {\n test.push({ k: chr + index, v: value });\n }\n }\n\n test.sort(function (a, b) { return b.v - a.v; });\n\n for (index = 0; index < test.length; index++) {\n chr = test[index].k.charAt(0);\n if (result.charAt(result.length - 1) !== chr) result += chr;\n }\n\n return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (y === undefined) return -1;\n if (x === undefined) return 1;\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n return toString(x) > toString(y) ? 1 : -1;\n };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n\n var array = toObject(this);\n\n if (STABLE_SORT) return comparefn === undefined ? nativeSort(array) : nativeSort(array, comparefn);\n\n var items = [];\n var arrayLength = lengthOfArrayLike(array);\n var itemsLength, index;\n\n for (index = 0; index < arrayLength; index++) {\n if (index in array) push(items, array[index]);\n }\n\n internalSort(items, getSortCompare(comparefn));\n\n itemsLength = lengthOfArrayLike(items);\n index = 0;\n\n while (index < itemsLength) array[index] = items[index++];\n while (index < arrayLength) deletePropertyOrThrow(array, index++);\n\n return array;\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.sort');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').sort;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/sort');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.sort;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.sort) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/sort');\n\nmodule.exports = parent;\n","'use strict';\nrequire('../../../modules/es.array.iterator');\nrequire('../../../modules/es.object.to-string');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').keys;\n","'use strict';\nrequire('../../modules/web.dom-collections.iterator');\nvar classof = require('../../internals/classof');\nvar hasOwn = require('../../internals/has-own-property');\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/keys');\n\nvar ArrayPrototype = Array.prototype;\n\nvar DOMIterables = {\n DOMTokenList: true,\n NodeList: true\n};\n\nmodule.exports = function (it) {\n var own = it.keys;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.keys)\n || hasOwn(DOMIterables, classof(it)) ? method : own;\n};\n","'use strict';\nvar parent = require('../../../es/array/virtual/keys');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/instance/keys\");","'use strict';\nrequire('../../../modules/es.array.iterator');\nrequire('../../../modules/es.object.to-string');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').values;\n","'use strict';\nrequire('../../modules/web.dom-collections.iterator');\nvar classof = require('../../internals/classof');\nvar hasOwn = require('../../internals/has-own-property');\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/values');\n\nvar ArrayPrototype = Array.prototype;\n\nvar DOMIterables = {\n DOMTokenList: true,\n NodeList: true\n};\n\nmodule.exports = function (it) {\n var own = it.values;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.values)\n || hasOwn(DOMIterables, classof(it)) ? method : own;\n};\n","'use strict';\nvar parent = require('../../../es/array/virtual/values');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/instance/values\");","'use strict';\nrequire('../../../modules/es.array.iterator');\nrequire('../../../modules/es.object.to-string');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').entries;\n","'use strict';\nrequire('../../modules/web.dom-collections.iterator');\nvar classof = require('../../internals/classof');\nvar hasOwn = require('../../internals/has-own-property');\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/entries');\n\nvar ArrayPrototype = Array.prototype;\n\nvar DOMIterables = {\n DOMTokenList: true,\n NodeList: true\n};\n\nmodule.exports = function (it) {\n var own = it.entries;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.entries)\n || hasOwn(DOMIterables, classof(it)) ? method : own;\n};\n","'use strict';\nvar parent = require('../../../es/array/virtual/entries');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/instance/entries\");","module.exports = require(\"core-js-pure/stable/object/define-property\");","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind');\nvar aConstructor = require('../internals/a-constructor');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar fails = require('../internals/fails');\n\nvar nativeConstruct = getBuiltIn('Reflect', 'construct');\nvar ObjectPrototype = Object.prototype;\nvar push = [].push;\n\n// `Reflect.construct` method\n// https://tc39.es/ecma262/#sec-reflect.construct\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\n\nvar ARGS_BUG = !fails(function () {\n nativeConstruct(function () { /* empty */ });\n});\n\nvar FORCED = NEW_TARGET_BUG || ARGS_BUG;\n\n$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {\n construct: function construct(Target, args /* , newTarget */) {\n aConstructor(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aConstructor(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);\n if (Target === newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n apply(push, $args, args);\n return new (apply(bind, Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : ObjectPrototype);\n var result = apply(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","'use strict';\nrequire('../../modules/es.reflect.construct');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Reflect.construct;\n","'use strict';\nrequire('../../modules/es.symbol');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.getOwnPropertySymbols;\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FORCED = !DESCRIPTORS || fails(function () { nativeGetOwnPropertyDescriptor(1); });\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n","'use strict';\nrequire('../../modules/es.object.get-own-property-descriptor');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nvar getOwnPropertyDescriptor = module.exports = function getOwnPropertyDescriptor(it, key) {\n return Object.getOwnPropertyDescriptor(it, key);\n};\n\nif (Object.getOwnPropertyDescriptor.sham) getOwnPropertyDescriptor.sham = true;\n","'use strict';\nvar parent = require('../../es/object/get-own-property-descriptor');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/object/get-own-property-descriptor\");","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n","'use strict';\nrequire('../../modules/es.object.get-own-property-descriptors');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.getOwnPropertyDescriptors;\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineProperties = require('../internals/object-define-properties').f;\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\n$({ target: 'Object', stat: true, forced: Object.defineProperties !== defineProperties, sham: !DESCRIPTORS }, {\n defineProperties: defineProperties\n});\n","'use strict';\nrequire('../../modules/es.object.define-properties');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nvar defineProperties = module.exports = function defineProperties(T, D) {\n return Object.defineProperties(T, D);\n};\n\nif (Object.defineProperties.sham) defineProperties.sham = true;\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","/**\n * vis-data\n * http://visjs.org/\n *\n * Manage unstructured data using DataSet. Add, update, and remove data, and listen for changes in the data.\n *\n * @version 7.1.7\n * @date 2023-09-13T18:13:28.258Z\n *\n * @copyright (c) 2011-2017 Almende B.V, http://almende.com\n * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n *\n * @license\n * vis.js is dual licensed under both\n *\n * 1. The Apache 2.0 License\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * and\n *\n * 2. The MIT License\n * http://opensource.org/licenses/MIT\n *\n * vis.js may be distributed under either license.\n */\n\nimport { pureDeepObjectAssign } from 'vis-util/esnext/esm/vis-util.js';\nexport { DELETE } from 'vis-util/esnext/esm/vis-util.js';\nimport { v4 } from 'uuid';\n\n/**\r\n * Create new data pipe.\r\n *\r\n * @param from - The source data set or data view.\r\n * @remarks\r\n * Example usage:\r\n * ```typescript\r\n * interface AppItem {\r\n * whoami: string;\r\n * appData: unknown;\r\n * visData: VisItem;\r\n * }\r\n * interface VisItem {\r\n * id: number;\r\n * label: string;\r\n * color: string;\r\n * x: number;\r\n * y: number;\r\n * }\r\n *\r\n * const ds1 = new DataSet([], { fieldId: \"whoami\" });\r\n * const ds2 = new DataSet();\r\n *\r\n * const pipe = createNewDataPipeFrom(ds1)\r\n * .filter((item): boolean => item.enabled === true)\r\n * .map((item): VisItem => item.visData)\r\n * .to(ds2);\r\n *\r\n * pipe.start();\r\n * ```\r\n * @returns A factory whose methods can be used to configure the pipe.\r\n */\r\nfunction createNewDataPipeFrom(from) {\r\n return new DataPipeUnderConstruction(from);\r\n}\r\n/**\r\n * Internal implementation of the pipe. This should be accessible only through\r\n * `createNewDataPipeFrom` from the outside.\r\n *\r\n * @typeParam SI - Source item type.\r\n * @typeParam SP - Source item type's id property name.\r\n * @typeParam TI - Target item type.\r\n * @typeParam TP - Target item type's id property name.\r\n */\r\nclass SimpleDataPipe {\r\n _source;\r\n _transformers;\r\n _target;\r\n /**\r\n * Bound listeners for use with `DataInterface['on' | 'off']`.\r\n */\r\n _listeners = {\r\n add: this._add.bind(this),\r\n remove: this._remove.bind(this),\r\n update: this._update.bind(this),\r\n };\r\n /**\r\n * Create a new data pipe.\r\n *\r\n * @param _source - The data set or data view that will be observed.\r\n * @param _transformers - An array of transforming functions to be used to\r\n * filter or transform the items in the pipe.\r\n * @param _target - The data set or data view that will receive the items.\r\n */\r\n constructor(_source, _transformers, _target) {\r\n this._source = _source;\r\n this._transformers = _transformers;\r\n this._target = _target;\r\n }\r\n /** @inheritDoc */\r\n all() {\r\n this._target.update(this._transformItems(this._source.get()));\r\n return this;\r\n }\r\n /** @inheritDoc */\r\n start() {\r\n this._source.on(\"add\", this._listeners.add);\r\n this._source.on(\"remove\", this._listeners.remove);\r\n this._source.on(\"update\", this._listeners.update);\r\n return this;\r\n }\r\n /** @inheritDoc */\r\n stop() {\r\n this._source.off(\"add\", this._listeners.add);\r\n this._source.off(\"remove\", this._listeners.remove);\r\n this._source.off(\"update\", this._listeners.update);\r\n return this;\r\n }\r\n /**\r\n * Apply the transformers to the items.\r\n *\r\n * @param items - The items to be transformed.\r\n * @returns The transformed items.\r\n */\r\n _transformItems(items) {\r\n return this._transformers.reduce((items, transform) => {\r\n return transform(items);\r\n }, items);\r\n }\r\n /**\r\n * Handle an add event.\r\n *\r\n * @param _name - Ignored.\r\n * @param payload - The payload containing the ids of the added items.\r\n */\r\n _add(_name, payload) {\r\n if (payload == null) {\r\n return;\r\n }\r\n this._target.add(this._transformItems(this._source.get(payload.items)));\r\n }\r\n /**\r\n * Handle an update event.\r\n *\r\n * @param _name - Ignored.\r\n * @param payload - The payload containing the ids of the updated items.\r\n */\r\n _update(_name, payload) {\r\n if (payload == null) {\r\n return;\r\n }\r\n this._target.update(this._transformItems(this._source.get(payload.items)));\r\n }\r\n /**\r\n * Handle a remove event.\r\n *\r\n * @param _name - Ignored.\r\n * @param payload - The payload containing the data of the removed items.\r\n */\r\n _remove(_name, payload) {\r\n if (payload == null) {\r\n return;\r\n }\r\n this._target.remove(this._transformItems(payload.oldData));\r\n }\r\n}\r\n/**\r\n * Internal implementation of the pipe factory. This should be accessible\r\n * only through `createNewDataPipeFrom` from the outside.\r\n *\r\n * @typeParam TI - Target item type.\r\n * @typeParam TP - Target item type's id property name.\r\n */\r\nclass DataPipeUnderConstruction {\r\n _source;\r\n /**\r\n * Array transformers used to transform items within the pipe. This is typed\r\n * as any for the sake of simplicity.\r\n */\r\n _transformers = [];\r\n /**\r\n * Create a new data pipe factory. This is an internal constructor that\r\n * should never be called from outside of this file.\r\n *\r\n * @param _source - The source data set or data view for this pipe.\r\n */\r\n constructor(_source) {\r\n this._source = _source;\r\n }\r\n /**\r\n * Filter the items.\r\n *\r\n * @param callback - A filtering function that returns true if given item\r\n * should be piped and false if not.\r\n * @returns This factory for further configuration.\r\n */\r\n filter(callback) {\r\n this._transformers.push((input) => input.filter(callback));\r\n return this;\r\n }\r\n /**\r\n * Map each source item to a new type.\r\n *\r\n * @param callback - A mapping function that takes a source item and returns\r\n * corresponding mapped item.\r\n * @typeParam TI - Target item type.\r\n * @typeParam TP - Target item type's id property name.\r\n * @returns This factory for further configuration.\r\n */\r\n map(callback) {\r\n this._transformers.push((input) => input.map(callback));\r\n return this;\r\n }\r\n /**\r\n * Map each source item to zero or more items of a new type.\r\n *\r\n * @param callback - A mapping function that takes a source item and returns\r\n * an array of corresponding mapped items.\r\n * @typeParam TI - Target item type.\r\n * @typeParam TP - Target item type's id property name.\r\n * @returns This factory for further configuration.\r\n */\r\n flatMap(callback) {\r\n this._transformers.push((input) => input.flatMap(callback));\r\n return this;\r\n }\r\n /**\r\n * Connect this pipe to given data set.\r\n *\r\n * @param target - The data set that will receive the items from this pipe.\r\n * @returns The pipe connected between given data sets and performing\r\n * configured transformation on the processed items.\r\n */\r\n to(target) {\r\n return new SimpleDataPipe(this._source, this._transformers, target);\r\n }\r\n}\n\n/**\r\n * Determine whether a value can be used as an id.\r\n *\r\n * @param value - Input value of unknown type.\r\n * @returns True if the value is valid id, false otherwise.\r\n */\r\nfunction isId(value) {\r\n return typeof value === \"string\" || typeof value === \"number\";\r\n}\n\n/**\r\n * A queue.\r\n *\r\n * @typeParam T - The type of method names to be replaced by queued versions.\r\n */\r\nclass Queue {\r\n /** Delay in milliseconds. If defined the queue will be periodically flushed. */\r\n delay;\r\n /** Maximum number of entries in the queue before it will be flushed. */\r\n max;\r\n _queue = [];\r\n _timeout = null;\r\n _extended = null;\r\n /**\r\n * Construct a new Queue.\r\n *\r\n * @param options - Queue configuration.\r\n */\r\n constructor(options) {\r\n // options\r\n this.delay = null;\r\n this.max = Infinity;\r\n this.setOptions(options);\r\n }\r\n /**\r\n * Update the configuration of the queue.\r\n *\r\n * @param options - Queue configuration.\r\n */\r\n setOptions(options) {\r\n if (options && typeof options.delay !== \"undefined\") {\r\n this.delay = options.delay;\r\n }\r\n if (options && typeof options.max !== \"undefined\") {\r\n this.max = options.max;\r\n }\r\n this._flushIfNeeded();\r\n }\r\n /**\r\n * Extend an object with queuing functionality.\r\n * The object will be extended with a function flush, and the methods provided in options.replace will be replaced with queued ones.\r\n *\r\n * @param object - The object to be extended.\r\n * @param options - Additional options.\r\n * @returns The created queue.\r\n */\r\n static extend(object, options) {\r\n const queue = new Queue(options);\r\n if (object.flush !== undefined) {\r\n throw new Error(\"Target object already has a property flush\");\r\n }\r\n object.flush = () => {\r\n queue.flush();\r\n };\r\n const methods = [\r\n {\r\n name: \"flush\",\r\n original: undefined,\r\n },\r\n ];\r\n if (options && options.replace) {\r\n for (let i = 0; i < options.replace.length; i++) {\r\n const name = options.replace[i];\r\n methods.push({\r\n name: name,\r\n // @TODO: better solution?\r\n original: object[name],\r\n });\r\n // @TODO: better solution?\r\n queue.replace(object, name);\r\n }\r\n }\r\n queue._extended = {\r\n object: object,\r\n methods: methods,\r\n };\r\n return queue;\r\n }\r\n /**\r\n * Destroy the queue. The queue will first flush all queued actions, and in case it has extended an object, will restore the original object.\r\n */\r\n destroy() {\r\n this.flush();\r\n if (this._extended) {\r\n const object = this._extended.object;\r\n const methods = this._extended.methods;\r\n for (let i = 0; i < methods.length; i++) {\r\n const method = methods[i];\r\n if (method.original) {\r\n // @TODO: better solution?\r\n object[method.name] = method.original;\r\n }\r\n else {\r\n // @TODO: better solution?\r\n delete object[method.name];\r\n }\r\n }\r\n this._extended = null;\r\n }\r\n }\r\n /**\r\n * Replace a method on an object with a queued version.\r\n *\r\n * @param object - Object having the method.\r\n * @param method - The method name.\r\n */\r\n replace(object, method) {\r\n /* eslint-disable-next-line @typescript-eslint/no-this-alias -- Function this is necessary in the function bellow, so class this has to be saved into a variable here. */\r\n const me = this;\r\n const original = object[method];\r\n if (!original) {\r\n throw new Error(\"Method \" + method + \" undefined\");\r\n }\r\n object[method] = function (...args) {\r\n // add this call to the queue\r\n me.queue({\r\n args: args,\r\n fn: original,\r\n context: this,\r\n });\r\n };\r\n }\r\n /**\r\n * Queue a call.\r\n *\r\n * @param entry - The function or entry to be queued.\r\n */\r\n queue(entry) {\r\n if (typeof entry === \"function\") {\r\n this._queue.push({ fn: entry });\r\n }\r\n else {\r\n this._queue.push(entry);\r\n }\r\n this._flushIfNeeded();\r\n }\r\n /**\r\n * Check whether the queue needs to be flushed.\r\n */\r\n _flushIfNeeded() {\r\n // flush when the maximum is exceeded.\r\n if (this._queue.length > this.max) {\r\n this.flush();\r\n }\r\n // flush after a period of inactivity when a delay is configured\r\n if (this._timeout != null) {\r\n clearTimeout(this._timeout);\r\n this._timeout = null;\r\n }\r\n if (this.queue.length > 0 && typeof this.delay === \"number\") {\r\n this._timeout = setTimeout(() => {\r\n this.flush();\r\n }, this.delay);\r\n }\r\n }\r\n /**\r\n * Flush all queued calls\r\n */\r\n flush() {\r\n this._queue.splice(0).forEach((entry) => {\r\n entry.fn.apply(entry.context || entry.fn, entry.args || []);\r\n });\r\n }\r\n}\n\n/**\r\n * {@link DataSet} code that can be reused in {@link DataView} or other similar implementations of {@link DataInterface}.\r\n *\r\n * @typeParam Item - Item type that may or may not have an id.\r\n * @typeParam IdProp - Name of the property that contains the id.\r\n */\r\nclass DataSetPart {\r\n _subscribers = {\r\n \"*\": [],\r\n add: [],\r\n remove: [],\r\n update: [],\r\n };\r\n /**\r\n * Trigger an event\r\n *\r\n * @param event - Event name.\r\n * @param payload - Event payload.\r\n * @param senderId - Id of the sender.\r\n */\r\n _trigger(event, payload, senderId) {\r\n if (event === \"*\") {\r\n throw new Error(\"Cannot trigger event *\");\r\n }\r\n [...this._subscribers[event], ...this._subscribers[\"*\"]].forEach((subscriber) => {\r\n subscriber(event, payload, senderId != null ? senderId : null);\r\n });\r\n }\r\n /**\r\n * Subscribe to an event, add an event listener.\r\n *\r\n * @remarks Non-function callbacks are ignored.\r\n * @param event - Event name.\r\n * @param callback - Callback method.\r\n */\r\n on(event, callback) {\r\n if (typeof callback === \"function\") {\r\n this._subscribers[event].push(callback);\r\n }\r\n // @TODO: Maybe throw for invalid callbacks?\r\n }\r\n /**\r\n * Unsubscribe from an event, remove an event listener.\r\n *\r\n * @remarks If the same callback was subscribed more than once **all** occurences will be removed.\r\n * @param event - Event name.\r\n * @param callback - Callback method.\r\n */\r\n off(event, callback) {\r\n this._subscribers[event] = this._subscribers[event].filter((subscriber) => subscriber !== callback);\r\n }\r\n /**\r\n * @deprecated Use on instead (PS: DataView.subscribe === DataView.on).\r\n */\r\n subscribe = DataSetPart.prototype.on;\r\n /**\r\n * @deprecated Use off instead (PS: DataView.unsubscribe === DataView.off).\r\n */\r\n unsubscribe = DataSetPart.prototype.off;\r\n}\n\n/**\r\n * Data stream\r\n *\r\n * @remarks\r\n * {@link DataStream} offers an always up to date stream of items from a {@link DataSet} or {@link DataView}.\r\n * That means that the stream is evaluated at the time of iteration, conversion to another data type or when {@link cache} is called, not when the {@link DataStream} was created.\r\n * Multiple invocations of for example {@link toItemArray} may yield different results (if the data source like for example {@link DataSet} gets modified).\r\n * @typeParam Item - The item type this stream is going to work with.\r\n */\r\nclass DataStream {\r\n _pairs;\r\n /**\r\n * Create a new data stream.\r\n *\r\n * @param pairs - The id, item pairs.\r\n */\r\n constructor(pairs) {\r\n this._pairs = pairs;\r\n }\r\n /**\r\n * Return an iterable of key, value pairs for every entry in the stream.\r\n */\r\n *[Symbol.iterator]() {\r\n for (const [id, item] of this._pairs) {\r\n yield [id, item];\r\n }\r\n }\r\n /**\r\n * Return an iterable of key, value pairs for every entry in the stream.\r\n */\r\n *entries() {\r\n for (const [id, item] of this._pairs) {\r\n yield [id, item];\r\n }\r\n }\r\n /**\r\n * Return an iterable of keys in the stream.\r\n */\r\n *keys() {\r\n for (const [id] of this._pairs) {\r\n yield id;\r\n }\r\n }\r\n /**\r\n * Return an iterable of values in the stream.\r\n */\r\n *values() {\r\n for (const [, item] of this._pairs) {\r\n yield item;\r\n }\r\n }\r\n /**\r\n * Return an array containing all the ids in this stream.\r\n *\r\n * @remarks\r\n * The array may contain duplicities.\r\n * @returns The array with all ids from this stream.\r\n */\r\n toIdArray() {\r\n return [...this._pairs].map((pair) => pair[0]);\r\n }\r\n /**\r\n * Return an array containing all the items in this stream.\r\n *\r\n * @remarks\r\n * The array may contain duplicities.\r\n * @returns The array with all items from this stream.\r\n */\r\n toItemArray() {\r\n return [...this._pairs].map((pair) => pair[1]);\r\n }\r\n /**\r\n * Return an array containing all the entries in this stream.\r\n *\r\n * @remarks\r\n * The array may contain duplicities.\r\n * @returns The array with all entries from this stream.\r\n */\r\n toEntryArray() {\r\n return [...this._pairs];\r\n }\r\n /**\r\n * Return an object map containing all the items in this stream accessible by ids.\r\n *\r\n * @remarks\r\n * In case of duplicate ids (coerced to string so `7 == '7'`) the last encoutered appears in the returned object.\r\n * @returns The object map of all id → item pairs from this stream.\r\n */\r\n toObjectMap() {\r\n const map = Object.create(null);\r\n for (const [id, item] of this._pairs) {\r\n map[id] = item;\r\n }\r\n return map;\r\n }\r\n /**\r\n * Return a map containing all the items in this stream accessible by ids.\r\n *\r\n * @returns The map of all id → item pairs from this stream.\r\n */\r\n toMap() {\r\n return new Map(this._pairs);\r\n }\r\n /**\r\n * Return a set containing all the (unique) ids in this stream.\r\n *\r\n * @returns The set of all ids from this stream.\r\n */\r\n toIdSet() {\r\n return new Set(this.toIdArray());\r\n }\r\n /**\r\n * Return a set containing all the (unique) items in this stream.\r\n *\r\n * @returns The set of all items from this stream.\r\n */\r\n toItemSet() {\r\n return new Set(this.toItemArray());\r\n }\r\n /**\r\n * Cache the items from this stream.\r\n *\r\n * @remarks\r\n * This method allows for items to be fetched immediatelly and used (possibly multiple times) later.\r\n * It can also be used to optimize performance as {@link DataStream} would otherwise reevaluate everything upon each iteration.\r\n *\r\n * ## Example\r\n * ```javascript\r\n * const ds = new DataSet([…])\r\n *\r\n * const cachedStream = ds.stream()\r\n * .filter(…)\r\n * .sort(…)\r\n * .map(…)\r\n * .cached(…) // Data are fetched, processed and cached here.\r\n *\r\n * ds.clear()\r\n * chachedStream // Still has all the items.\r\n * ```\r\n * @returns A new {@link DataStream} with cached items (detached from the original {@link DataSet}).\r\n */\r\n cache() {\r\n return new DataStream([...this._pairs]);\r\n }\r\n /**\r\n * Get the distinct values of given property.\r\n *\r\n * @param callback - The function that picks and possibly converts the property.\r\n * @typeParam T - The type of the distinct value.\r\n * @returns A set of all distinct properties.\r\n */\r\n distinct(callback) {\r\n const set = new Set();\r\n for (const [id, item] of this._pairs) {\r\n set.add(callback(item, id));\r\n }\r\n return set;\r\n }\r\n /**\r\n * Filter the items of the stream.\r\n *\r\n * @param callback - The function that decides whether an item will be included.\r\n * @returns A new data stream with the filtered items.\r\n */\r\n filter(callback) {\r\n const pairs = this._pairs;\r\n return new DataStream({\r\n *[Symbol.iterator]() {\r\n for (const [id, item] of pairs) {\r\n if (callback(item, id)) {\r\n yield [id, item];\r\n }\r\n }\r\n },\r\n });\r\n }\r\n /**\r\n * Execute a callback for each item of the stream.\r\n *\r\n * @param callback - The function that will be invoked for each item.\r\n */\r\n forEach(callback) {\r\n for (const [id, item] of this._pairs) {\r\n callback(item, id);\r\n }\r\n }\r\n /**\r\n * Map the items into a different type.\r\n *\r\n * @param callback - The function that does the conversion.\r\n * @typeParam Mapped - The type of the item after mapping.\r\n * @returns A new data stream with the mapped items.\r\n */\r\n map(callback) {\r\n const pairs = this._pairs;\r\n return new DataStream({\r\n *[Symbol.iterator]() {\r\n for (const [id, item] of pairs) {\r\n yield [id, callback(item, id)];\r\n }\r\n },\r\n });\r\n }\r\n /**\r\n * Get the item with the maximum value of given property.\r\n *\r\n * @param callback - The function that picks and possibly converts the property.\r\n * @returns The item with the maximum if found otherwise null.\r\n */\r\n max(callback) {\r\n const iter = this._pairs[Symbol.iterator]();\r\n let curr = iter.next();\r\n if (curr.done) {\r\n return null;\r\n }\r\n let maxItem = curr.value[1];\r\n let maxValue = callback(curr.value[1], curr.value[0]);\r\n while (!(curr = iter.next()).done) {\r\n const [id, item] = curr.value;\r\n const value = callback(item, id);\r\n if (value > maxValue) {\r\n maxValue = value;\r\n maxItem = item;\r\n }\r\n }\r\n return maxItem;\r\n }\r\n /**\r\n * Get the item with the minimum value of given property.\r\n *\r\n * @param callback - The function that picks and possibly converts the property.\r\n * @returns The item with the minimum if found otherwise null.\r\n */\r\n min(callback) {\r\n const iter = this._pairs[Symbol.iterator]();\r\n let curr = iter.next();\r\n if (curr.done) {\r\n return null;\r\n }\r\n let minItem = curr.value[1];\r\n let minValue = callback(curr.value[1], curr.value[0]);\r\n while (!(curr = iter.next()).done) {\r\n const [id, item] = curr.value;\r\n const value = callback(item, id);\r\n if (value < minValue) {\r\n minValue = value;\r\n minItem = item;\r\n }\r\n }\r\n return minItem;\r\n }\r\n /**\r\n * Reduce the items into a single value.\r\n *\r\n * @param callback - The function that does the reduction.\r\n * @param accumulator - The initial value of the accumulator.\r\n * @typeParam T - The type of the accumulated value.\r\n * @returns The reduced value.\r\n */\r\n reduce(callback, accumulator) {\r\n for (const [id, item] of this._pairs) {\r\n accumulator = callback(accumulator, item, id);\r\n }\r\n return accumulator;\r\n }\r\n /**\r\n * Sort the items.\r\n *\r\n * @param callback - Item comparator.\r\n * @returns A new stream with sorted items.\r\n */\r\n sort(callback) {\r\n return new DataStream({\r\n [Symbol.iterator]: () => [...this._pairs]\r\n .sort(([idA, itemA], [idB, itemB]) => callback(itemA, itemB, idA, idB))[Symbol.iterator](),\r\n });\r\n }\r\n}\n\n/**\r\n * Add an id to given item if it doesn't have one already.\r\n *\r\n * @remarks\r\n * The item will be modified.\r\n * @param item - The item that will have an id after a call to this function.\r\n * @param idProp - The key of the id property.\r\n * @typeParam Item - Item type that may or may not have an id.\r\n * @typeParam IdProp - Name of the property that contains the id.\r\n * @returns true\r\n */\r\nfunction ensureFullItem(item, idProp) {\r\n if (item[idProp] == null) {\r\n // generate an id\r\n item[idProp] = v4();\r\n }\r\n return item;\r\n}\r\n/**\r\n * # DataSet\r\n *\r\n * Vis.js comes with a flexible DataSet, which can be used to hold and\r\n * manipulate unstructured data and listen for changes in the data. The DataSet\r\n * is key/value based. Data items can be added, updated and removed from the\r\n * DataSet, and one can subscribe to changes in the DataSet. The data in the\r\n * DataSet can be filtered and ordered. Data can be normalized when appending it\r\n * to the DataSet as well.\r\n *\r\n * ## Example\r\n *\r\n * The following example shows how to use a DataSet.\r\n *\r\n * ```javascript\r\n * // create a DataSet\r\n * var options = {};\r\n * var data = new vis.DataSet(options);\r\n *\r\n * // add items\r\n * // note that the data items can contain different properties and data formats\r\n * data.add([\r\n * {id: 1, text: 'item 1', date: new Date(2013, 6, 20), group: 1, first: true},\r\n * {id: 2, text: 'item 2', date: '2013-06-23', group: 2},\r\n * {id: 3, text: 'item 3', date: '2013-06-25', group: 2},\r\n * {id: 4, text: 'item 4'}\r\n * ]);\r\n *\r\n * // subscribe to any change in the DataSet\r\n * data.on('*', function (event, properties, senderId) {\r\n * console.log('event', event, properties);\r\n * });\r\n *\r\n * // update an existing item\r\n * data.update({id: 2, group: 1});\r\n *\r\n * // remove an item\r\n * data.remove(4);\r\n *\r\n * // get all ids\r\n * var ids = data.getIds();\r\n * console.log('ids', ids);\r\n *\r\n * // get a specific item\r\n * var item1 = data.get(1);\r\n * console.log('item1', item1);\r\n *\r\n * // retrieve a filtered subset of the data\r\n * var items = data.get({\r\n * filter: function (item) {\r\n * return item.group == 1;\r\n * }\r\n * });\r\n * console.log('filtered items', items);\r\n * ```\r\n *\r\n * @typeParam Item - Item type that may or may not have an id.\r\n * @typeParam IdProp - Name of the property that contains the id.\r\n */\r\nclass DataSet extends DataSetPart {\r\n /** Flush all queued calls. */\r\n flush;\r\n /** @inheritDoc */\r\n length;\r\n /** @inheritDoc */\r\n get idProp() {\r\n return this._idProp;\r\n }\r\n _options;\r\n _data;\r\n _idProp;\r\n _queue = null;\r\n /**\r\n * Construct a new DataSet.\r\n *\r\n * @param data - Initial data or options.\r\n * @param options - Options (type error if data is also options).\r\n */\r\n constructor(data, options) {\r\n super();\r\n // correctly read optional arguments\r\n if (data && !Array.isArray(data)) {\r\n options = data;\r\n data = [];\r\n }\r\n this._options = options || {};\r\n this._data = new Map(); // map with data indexed by id\r\n this.length = 0; // number of items in the DataSet\r\n this._idProp = this._options.fieldId || \"id\"; // name of the field containing id\r\n // add initial data when provided\r\n if (data && data.length) {\r\n this.add(data);\r\n }\r\n this.setOptions(options);\r\n }\r\n /**\r\n * Set new options.\r\n *\r\n * @param options - The new options.\r\n */\r\n setOptions(options) {\r\n if (options && options.queue !== undefined) {\r\n if (options.queue === false) {\r\n // delete queue if loaded\r\n if (this._queue) {\r\n this._queue.destroy();\r\n this._queue = null;\r\n }\r\n }\r\n else {\r\n // create queue and update its options\r\n if (!this._queue) {\r\n this._queue = Queue.extend(this, {\r\n replace: [\"add\", \"update\", \"remove\"],\r\n });\r\n }\r\n if (options.queue && typeof options.queue === \"object\") {\r\n this._queue.setOptions(options.queue);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Add a data item or an array with items.\r\n *\r\n * After the items are added to the DataSet, the DataSet will trigger an event `add`. When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\r\n *\r\n * ## Example\r\n *\r\n * ```javascript\r\n * // create a DataSet\r\n * const data = new vis.DataSet()\r\n *\r\n * // add items\r\n * const ids = data.add([\r\n * { id: 1, text: 'item 1' },\r\n * { id: 2, text: 'item 2' },\r\n * { text: 'item without an id' }\r\n * ])\r\n *\r\n * console.log(ids) // [1, 2, '']\r\n * ```\r\n *\r\n * @param data - Items to be added (ids will be generated if missing).\r\n * @param senderId - Sender id.\r\n * @returns addedIds - Array with the ids (generated if not present) of the added items.\r\n * @throws When an item with the same id as any of the added items already exists.\r\n */\r\n add(data, senderId) {\r\n const addedIds = [];\r\n let id;\r\n if (Array.isArray(data)) {\r\n // Array\r\n const idsToAdd = data.map((d) => d[this._idProp]);\r\n if (idsToAdd.some((id) => this._data.has(id))) {\r\n throw new Error(\"A duplicate id was found in the parameter array.\");\r\n }\r\n for (let i = 0, len = data.length; i < len; i++) {\r\n id = this._addItem(data[i]);\r\n addedIds.push(id);\r\n }\r\n }\r\n else if (data && typeof data === \"object\") {\r\n // Single item\r\n id = this._addItem(data);\r\n addedIds.push(id);\r\n }\r\n else {\r\n throw new Error(\"Unknown dataType\");\r\n }\r\n if (addedIds.length) {\r\n this._trigger(\"add\", { items: addedIds }, senderId);\r\n }\r\n return addedIds;\r\n }\r\n /**\r\n * Update existing items. When an item does not exist, it will be created.\r\n *\r\n * @remarks\r\n * The provided properties will be merged in the existing item. When an item does not exist, it will be created.\r\n *\r\n * After the items are updated, the DataSet will trigger an event `add` for the added items, and an event `update`. When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\r\n *\r\n * ## Example\r\n *\r\n * ```javascript\r\n * // create a DataSet\r\n * const data = new vis.DataSet([\r\n * { id: 1, text: 'item 1' },\r\n * { id: 2, text: 'item 2' },\r\n * { id: 3, text: 'item 3' }\r\n * ])\r\n *\r\n * // update items\r\n * const ids = data.update([\r\n * { id: 2, text: 'item 2 (updated)' },\r\n * { id: 4, text: 'item 4 (new)' }\r\n * ])\r\n *\r\n * console.log(ids) // [2, 4]\r\n * ```\r\n *\r\n * ## Warning for TypeScript users\r\n * This method may introduce partial items into the data set. Use add or updateOnly instead for better type safety.\r\n * @param data - Items to be updated (if the id is already present) or added (if the id is missing).\r\n * @param senderId - Sender id.\r\n * @returns updatedIds - The ids of the added (these may be newly generated if there was no id in the item from the data) or updated items.\r\n * @throws When the supplied data is neither an item nor an array of items.\r\n */\r\n update(data, senderId) {\r\n const addedIds = [];\r\n const updatedIds = [];\r\n const oldData = [];\r\n const updatedData = [];\r\n const idProp = this._idProp;\r\n const addOrUpdate = (item) => {\r\n const origId = item[idProp];\r\n if (origId != null && this._data.has(origId)) {\r\n const fullItem = item; // it has an id, therefore it is a fullitem\r\n const oldItem = Object.assign({}, this._data.get(origId));\r\n // update item\r\n const id = this._updateItem(fullItem);\r\n updatedIds.push(id);\r\n updatedData.push(fullItem);\r\n oldData.push(oldItem);\r\n }\r\n else {\r\n // add new item\r\n const id = this._addItem(item);\r\n addedIds.push(id);\r\n }\r\n };\r\n if (Array.isArray(data)) {\r\n // Array\r\n for (let i = 0, len = data.length; i < len; i++) {\r\n if (data[i] && typeof data[i] === \"object\") {\r\n addOrUpdate(data[i]);\r\n }\r\n else {\r\n console.warn(\"Ignoring input item, which is not an object at index \" + i);\r\n }\r\n }\r\n }\r\n else if (data && typeof data === \"object\") {\r\n // Single item\r\n addOrUpdate(data);\r\n }\r\n else {\r\n throw new Error(\"Unknown dataType\");\r\n }\r\n if (addedIds.length) {\r\n this._trigger(\"add\", { items: addedIds }, senderId);\r\n }\r\n if (updatedIds.length) {\r\n const props = { items: updatedIds, oldData: oldData, data: updatedData };\r\n // TODO: remove deprecated property 'data' some day\r\n //Object.defineProperty(props, 'data', {\r\n // 'get': (function() {\r\n // console.warn('Property data is deprecated. Use DataSet.get(ids) to retrieve the new data, use the oldData property on this object to get the old data');\r\n // return updatedData;\r\n // }).bind(this)\r\n //});\r\n this._trigger(\"update\", props, senderId);\r\n }\r\n return addedIds.concat(updatedIds);\r\n }\r\n /**\r\n * Update existing items. When an item does not exist, an error will be thrown.\r\n *\r\n * @remarks\r\n * The provided properties will be deeply merged into the existing item.\r\n * When an item does not exist (id not present in the data set or absent), an error will be thrown and nothing will be changed.\r\n *\r\n * After the items are updated, the DataSet will trigger an event `update`.\r\n * When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\r\n *\r\n * ## Example\r\n *\r\n * ```javascript\r\n * // create a DataSet\r\n * const data = new vis.DataSet([\r\n * { id: 1, text: 'item 1' },\r\n * { id: 2, text: 'item 2' },\r\n * { id: 3, text: 'item 3' },\r\n * ])\r\n *\r\n * // update items\r\n * const ids = data.update([\r\n * { id: 2, text: 'item 2 (updated)' }, // works\r\n * // { id: 4, text: 'item 4 (new)' }, // would throw\r\n * // { text: 'item 4 (new)' }, // would also throw\r\n * ])\r\n *\r\n * console.log(ids) // [2]\r\n * ```\r\n * @param data - Updates (the id and optionally other props) to the items in this data set.\r\n * @param senderId - Sender id.\r\n * @returns updatedIds - The ids of the updated items.\r\n * @throws When the supplied data is neither an item nor an array of items, when the ids are missing.\r\n */\r\n updateOnly(data, senderId) {\r\n if (!Array.isArray(data)) {\r\n data = [data];\r\n }\r\n const updateEventData = data\r\n .map((update) => {\r\n const oldData = this._data.get(update[this._idProp]);\r\n if (oldData == null) {\r\n throw new Error(\"Updating non-existent items is not allowed.\");\r\n }\r\n return { oldData, update };\r\n })\r\n .map(({ oldData, update, }) => {\r\n const id = oldData[this._idProp];\r\n const updatedData = pureDeepObjectAssign(oldData, update);\r\n this._data.set(id, updatedData);\r\n return {\r\n id,\r\n oldData: oldData,\r\n updatedData,\r\n };\r\n });\r\n if (updateEventData.length) {\r\n const props = {\r\n items: updateEventData.map((value) => value.id),\r\n oldData: updateEventData.map((value) => value.oldData),\r\n data: updateEventData.map((value) => value.updatedData),\r\n };\r\n // TODO: remove deprecated property 'data' some day\r\n //Object.defineProperty(props, 'data', {\r\n // 'get': (function() {\r\n // console.warn('Property data is deprecated. Use DataSet.get(ids) to retrieve the new data, use the oldData property on this object to get the old data');\r\n // return updatedData;\r\n // }).bind(this)\r\n //});\r\n this._trigger(\"update\", props, senderId);\r\n return props.items;\r\n }\r\n else {\r\n return [];\r\n }\r\n }\r\n /** @inheritDoc */\r\n get(first, second) {\r\n // @TODO: Woudn't it be better to split this into multiple methods?\r\n // parse the arguments\r\n let id = undefined;\r\n let ids = undefined;\r\n let options = undefined;\r\n if (isId(first)) {\r\n // get(id [, options])\r\n id = first;\r\n options = second;\r\n }\r\n else if (Array.isArray(first)) {\r\n // get(ids [, options])\r\n ids = first;\r\n options = second;\r\n }\r\n else {\r\n // get([, options])\r\n options = first;\r\n }\r\n // determine the return type\r\n const returnType = options && options.returnType === \"Object\" ? \"Object\" : \"Array\";\r\n // @TODO: WTF is this? Or am I missing something?\r\n // var returnType\r\n // if (options && options.returnType) {\r\n // var allowedValues = ['Array', 'Object']\r\n // returnType =\r\n // allowedValues.indexOf(options.returnType) == -1\r\n // ? 'Array'\r\n // : options.returnType\r\n // } else {\r\n // returnType = 'Array'\r\n // }\r\n // build options\r\n const filter = options && options.filter;\r\n const items = [];\r\n let item = undefined;\r\n let itemIds = undefined;\r\n let itemId = undefined;\r\n // convert items\r\n if (id != null) {\r\n // return a single item\r\n item = this._data.get(id);\r\n if (item && filter && !filter(item)) {\r\n item = undefined;\r\n }\r\n }\r\n else if (ids != null) {\r\n // return a subset of items\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n item = this._data.get(ids[i]);\r\n if (item != null && (!filter || filter(item))) {\r\n items.push(item);\r\n }\r\n }\r\n }\r\n else {\r\n // return all items\r\n itemIds = [...this._data.keys()];\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n itemId = itemIds[i];\r\n item = this._data.get(itemId);\r\n if (item != null && (!filter || filter(item))) {\r\n items.push(item);\r\n }\r\n }\r\n }\r\n // order the results\r\n if (options && options.order && id == undefined) {\r\n this._sort(items, options.order);\r\n }\r\n // filter fields of the items\r\n if (options && options.fields) {\r\n const fields = options.fields;\r\n if (id != undefined && item != null) {\r\n item = this._filterFields(item, fields);\r\n }\r\n else {\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n items[i] = this._filterFields(items[i], fields);\r\n }\r\n }\r\n }\r\n // return the results\r\n if (returnType == \"Object\") {\r\n const result = {};\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n const resultant = items[i];\r\n // @TODO: Shoudn't this be this._fieldId?\r\n // result[resultant.id] = resultant\r\n const id = resultant[this._idProp];\r\n result[id] = resultant;\r\n }\r\n return result;\r\n }\r\n else {\r\n if (id != null) {\r\n // a single item\r\n return item ?? null;\r\n }\r\n else {\r\n // just return our array\r\n return items;\r\n }\r\n }\r\n }\r\n /** @inheritDoc */\r\n getIds(options) {\r\n const data = this._data;\r\n const filter = options && options.filter;\r\n const order = options && options.order;\r\n const itemIds = [...data.keys()];\r\n const ids = [];\r\n if (filter) {\r\n // get filtered items\r\n if (order) {\r\n // create ordered list\r\n const items = [];\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n const item = this._data.get(id);\r\n if (item != null && filter(item)) {\r\n items.push(item);\r\n }\r\n }\r\n this._sort(items, order);\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n ids.push(items[i][this._idProp]);\r\n }\r\n }\r\n else {\r\n // create unordered list\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n const item = this._data.get(id);\r\n if (item != null && filter(item)) {\r\n ids.push(item[this._idProp]);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n // get all items\r\n if (order) {\r\n // create an ordered list\r\n const items = [];\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n items.push(data.get(id));\r\n }\r\n this._sort(items, order);\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n ids.push(items[i][this._idProp]);\r\n }\r\n }\r\n else {\r\n // create unordered list\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n const item = data.get(id);\r\n if (item != null) {\r\n ids.push(item[this._idProp]);\r\n }\r\n }\r\n }\r\n }\r\n return ids;\r\n }\r\n /** @inheritDoc */\r\n getDataSet() {\r\n return this;\r\n }\r\n /** @inheritDoc */\r\n forEach(callback, options) {\r\n const filter = options && options.filter;\r\n const data = this._data;\r\n const itemIds = [...data.keys()];\r\n if (options && options.order) {\r\n // execute forEach on ordered list\r\n const items = this.get(options);\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n const item = items[i];\r\n const id = item[this._idProp];\r\n callback(item, id);\r\n }\r\n }\r\n else {\r\n // unordered\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n const item = this._data.get(id);\r\n if (item != null && (!filter || filter(item))) {\r\n callback(item, id);\r\n }\r\n }\r\n }\r\n }\r\n /** @inheritDoc */\r\n map(callback, options) {\r\n const filter = options && options.filter;\r\n const mappedItems = [];\r\n const data = this._data;\r\n const itemIds = [...data.keys()];\r\n // convert and filter items\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n const item = this._data.get(id);\r\n if (item != null && (!filter || filter(item))) {\r\n mappedItems.push(callback(item, id));\r\n }\r\n }\r\n // order items\r\n if (options && options.order) {\r\n this._sort(mappedItems, options.order);\r\n }\r\n return mappedItems;\r\n }\r\n /**\r\n * Filter the fields of an item.\r\n *\r\n * @param item - The item whose fields should be filtered.\r\n * @param fields - The names of the fields that will be kept.\r\n * @typeParam K - Field name type.\r\n * @returns The item without any additional fields.\r\n */\r\n _filterFields(item, fields) {\r\n if (!item) {\r\n // item is null\r\n return item;\r\n }\r\n return (Array.isArray(fields)\r\n ? // Use the supplied array\r\n fields\r\n : // Use the keys of the supplied object\r\n Object.keys(fields)).reduce((filteredItem, field) => {\r\n filteredItem[field] = item[field];\r\n return filteredItem;\r\n }, {});\r\n }\r\n /**\r\n * Sort the provided array with items.\r\n *\r\n * @param items - Items to be sorted in place.\r\n * @param order - A field name or custom sort function.\r\n * @typeParam T - The type of the items in the items array.\r\n */\r\n _sort(items, order) {\r\n if (typeof order === \"string\") {\r\n // order by provided field name\r\n const name = order; // field name\r\n items.sort((a, b) => {\r\n // @TODO: How to treat missing properties?\r\n const av = a[name];\r\n const bv = b[name];\r\n return av > bv ? 1 : av < bv ? -1 : 0;\r\n });\r\n }\r\n else if (typeof order === \"function\") {\r\n // order by sort function\r\n items.sort(order);\r\n }\r\n else {\r\n // TODO: extend order by an Object {field:string, direction:string}\r\n // where direction can be 'asc' or 'desc'\r\n throw new TypeError(\"Order must be a function or a string\");\r\n }\r\n }\r\n /**\r\n * Remove an item or multiple items by “reference” (only the id is used) or by id.\r\n *\r\n * The method ignores removal of non-existing items, and returns an array containing the ids of the items which are actually removed from the DataSet.\r\n *\r\n * After the items are removed, the DataSet will trigger an event `remove` for the removed items. When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\r\n *\r\n * ## Example\r\n * ```javascript\r\n * // create a DataSet\r\n * const data = new vis.DataSet([\r\n * { id: 1, text: 'item 1' },\r\n * { id: 2, text: 'item 2' },\r\n * { id: 3, text: 'item 3' }\r\n * ])\r\n *\r\n * // remove items\r\n * const ids = data.remove([2, { id: 3 }, 4])\r\n *\r\n * console.log(ids) // [2, 3]\r\n * ```\r\n *\r\n * @param id - One or more items or ids of items to be removed.\r\n * @param senderId - Sender id.\r\n * @returns The ids of the removed items.\r\n */\r\n remove(id, senderId) {\r\n const removedIds = [];\r\n const removedItems = [];\r\n // force everything to be an array for simplicity\r\n const ids = Array.isArray(id) ? id : [id];\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n const item = this._remove(ids[i]);\r\n if (item) {\r\n const itemId = item[this._idProp];\r\n if (itemId != null) {\r\n removedIds.push(itemId);\r\n removedItems.push(item);\r\n }\r\n }\r\n }\r\n if (removedIds.length) {\r\n this._trigger(\"remove\", { items: removedIds, oldData: removedItems }, senderId);\r\n }\r\n return removedIds;\r\n }\r\n /**\r\n * Remove an item by its id or reference.\r\n *\r\n * @param id - Id of an item or the item itself.\r\n * @returns The removed item if removed, null otherwise.\r\n */\r\n _remove(id) {\r\n // @TODO: It origianlly returned the item although the docs say id.\r\n // The code expects the item, so probably an error in the docs.\r\n let ident;\r\n // confirm the id to use based on the args type\r\n if (isId(id)) {\r\n ident = id;\r\n }\r\n else if (id && typeof id === \"object\") {\r\n ident = id[this._idProp]; // look for the identifier field using ._idProp\r\n }\r\n // do the removing if the item is found\r\n if (ident != null && this._data.has(ident)) {\r\n const item = this._data.get(ident) || null;\r\n this._data.delete(ident);\r\n --this.length;\r\n return item;\r\n }\r\n return null;\r\n }\r\n /**\r\n * Clear the entire data set.\r\n *\r\n * After the items are removed, the {@link DataSet} will trigger an event `remove` for all removed items. When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\r\n *\r\n * @param senderId - Sender id.\r\n * @returns removedIds - The ids of all removed items.\r\n */\r\n clear(senderId) {\r\n const ids = [...this._data.keys()];\r\n const items = [];\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n items.push(this._data.get(ids[i]));\r\n }\r\n this._data.clear();\r\n this.length = 0;\r\n this._trigger(\"remove\", { items: ids, oldData: items }, senderId);\r\n return ids;\r\n }\r\n /**\r\n * Find the item with maximum value of a specified field.\r\n *\r\n * @param field - Name of the property that should be searched for max value.\r\n * @returns Item containing max value, or null if no items.\r\n */\r\n max(field) {\r\n let max = null;\r\n let maxField = null;\r\n for (const item of this._data.values()) {\r\n const itemField = item[field];\r\n if (typeof itemField === \"number\" &&\r\n (maxField == null || itemField > maxField)) {\r\n max = item;\r\n maxField = itemField;\r\n }\r\n }\r\n return max || null;\r\n }\r\n /**\r\n * Find the item with minimum value of a specified field.\r\n *\r\n * @param field - Name of the property that should be searched for min value.\r\n * @returns Item containing min value, or null if no items.\r\n */\r\n min(field) {\r\n let min = null;\r\n let minField = null;\r\n for (const item of this._data.values()) {\r\n const itemField = item[field];\r\n if (typeof itemField === \"number\" &&\r\n (minField == null || itemField < minField)) {\r\n min = item;\r\n minField = itemField;\r\n }\r\n }\r\n return min || null;\r\n }\r\n /**\r\n * Find all distinct values of a specified field\r\n *\r\n * @param prop - The property name whose distinct values should be returned.\r\n * @returns Unordered array containing all distinct values. Items without specified property are ignored.\r\n */\r\n distinct(prop) {\r\n const data = this._data;\r\n const itemIds = [...data.keys()];\r\n const values = [];\r\n let count = 0;\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n const item = data.get(id);\r\n const value = item[prop];\r\n let exists = false;\r\n for (let j = 0; j < count; j++) {\r\n if (values[j] == value) {\r\n exists = true;\r\n break;\r\n }\r\n }\r\n if (!exists && value !== undefined) {\r\n values[count] = value;\r\n count++;\r\n }\r\n }\r\n return values;\r\n }\r\n /**\r\n * Add a single item. Will fail when an item with the same id already exists.\r\n *\r\n * @param item - A new item to be added.\r\n * @returns Added item's id. An id is generated when it is not present in the item.\r\n */\r\n _addItem(item) {\r\n const fullItem = ensureFullItem(item, this._idProp);\r\n const id = fullItem[this._idProp];\r\n // check whether this id is already taken\r\n if (this._data.has(id)) {\r\n // item already exists\r\n throw new Error(\"Cannot add item: item with id \" + id + \" already exists\");\r\n }\r\n this._data.set(id, fullItem);\r\n ++this.length;\r\n return id;\r\n }\r\n /**\r\n * Update a single item: merge with existing item.\r\n * Will fail when the item has no id, or when there does not exist an item with the same id.\r\n *\r\n * @param update - The new item\r\n * @returns The id of the updated item.\r\n */\r\n _updateItem(update) {\r\n const id = update[this._idProp];\r\n if (id == null) {\r\n throw new Error(\"Cannot update item: item has no id (item: \" +\r\n JSON.stringify(update) +\r\n \")\");\r\n }\r\n const item = this._data.get(id);\r\n if (!item) {\r\n // item doesn't exist\r\n throw new Error(\"Cannot update item: no item with id \" + id + \" found\");\r\n }\r\n this._data.set(id, { ...item, ...update });\r\n return id;\r\n }\r\n /** @inheritDoc */\r\n stream(ids) {\r\n if (ids) {\r\n const data = this._data;\r\n return new DataStream({\r\n *[Symbol.iterator]() {\r\n for (const id of ids) {\r\n const item = data.get(id);\r\n if (item != null) {\r\n yield [id, item];\r\n }\r\n }\r\n },\r\n });\r\n }\r\n else {\r\n return new DataStream({\r\n [Symbol.iterator]: this._data.entries.bind(this._data),\r\n });\r\n }\r\n }\r\n}\n\n/**\r\n * DataView\r\n *\r\n * A DataView offers a filtered and/or formatted view on a DataSet. One can subscribe to changes in a DataView, and easily get filtered or formatted data without having to specify filters and field types all the time.\r\n *\r\n * ## Example\r\n * ```javascript\r\n * // create a DataSet\r\n * var data = new vis.DataSet();\r\n * data.add([\r\n * {id: 1, text: 'item 1', date: new Date(2013, 6, 20), group: 1, first: true},\r\n * {id: 2, text: 'item 2', date: '2013-06-23', group: 2},\r\n * {id: 3, text: 'item 3', date: '2013-06-25', group: 2},\r\n * {id: 4, text: 'item 4'}\r\n * ]);\r\n *\r\n * // create a DataView\r\n * // the view will only contain items having a property group with value 1,\r\n * // and will only output fields id, text, and date.\r\n * var view = new vis.DataView(data, {\r\n * filter: function (item) {\r\n * return (item.group == 1);\r\n * },\r\n * fields: ['id', 'text', 'date']\r\n * });\r\n *\r\n * // subscribe to any change in the DataView\r\n * view.on('*', function (event, properties, senderId) {\r\n * console.log('event', event, properties);\r\n * });\r\n *\r\n * // update an item in the data set\r\n * data.update({id: 2, group: 1});\r\n *\r\n * // get all ids in the view\r\n * var ids = view.getIds();\r\n * console.log('ids', ids); // will output [1, 2]\r\n *\r\n * // get all items in the view\r\n * var items = view.get();\r\n * ```\r\n *\r\n * @typeParam Item - Item type that may or may not have an id.\r\n * @typeParam IdProp - Name of the property that contains the id.\r\n */\r\nclass DataView extends DataSetPart {\r\n /** @inheritDoc */\r\n length = 0;\r\n /** @inheritDoc */\r\n get idProp() {\r\n return this.getDataSet().idProp;\r\n }\r\n _listener;\r\n _data; // constructor → setData\r\n _ids = new Set(); // ids of the items currently in memory (just contains a boolean true)\r\n _options;\r\n /**\r\n * Create a DataView.\r\n *\r\n * @param data - The instance containing data (directly or indirectly).\r\n * @param options - Options to configure this data view.\r\n */\r\n constructor(data, options) {\r\n super();\r\n this._options = options || {};\r\n this._listener = this._onEvent.bind(this);\r\n this.setData(data);\r\n }\r\n // TODO: implement a function .config() to dynamically update things like configured filter\r\n // and trigger changes accordingly\r\n /**\r\n * Set a data source for the view.\r\n *\r\n * @param data - The instance containing data (directly or indirectly).\r\n * @remarks\r\n * Note that when the data view is bound to a data set it won't be garbage\r\n * collected unless the data set is too. Use `dataView.setData(null)` or\r\n * `dataView.dispose()` to enable garbage collection before you lose the last\r\n * reference.\r\n */\r\n setData(data) {\r\n if (this._data) {\r\n // unsubscribe from current dataset\r\n if (this._data.off) {\r\n this._data.off(\"*\", this._listener);\r\n }\r\n // trigger a remove of all items in memory\r\n const ids = this._data.getIds({ filter: this._options.filter });\r\n const items = this._data.get(ids);\r\n this._ids.clear();\r\n this.length = 0;\r\n this._trigger(\"remove\", { items: ids, oldData: items });\r\n }\r\n if (data != null) {\r\n this._data = data;\r\n // trigger an add of all added items\r\n const ids = this._data.getIds({ filter: this._options.filter });\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n const id = ids[i];\r\n this._ids.add(id);\r\n }\r\n this.length = ids.length;\r\n this._trigger(\"add\", { items: ids });\r\n }\r\n else {\r\n this._data = new DataSet();\r\n }\r\n // subscribe to new dataset\r\n if (this._data.on) {\r\n this._data.on(\"*\", this._listener);\r\n }\r\n }\r\n /**\r\n * Refresh the DataView.\r\n * Useful when the DataView has a filter function containing a variable parameter.\r\n */\r\n refresh() {\r\n const ids = this._data.getIds({\r\n filter: this._options.filter,\r\n });\r\n const oldIds = [...this._ids];\r\n const newIds = {};\r\n const addedIds = [];\r\n const removedIds = [];\r\n const removedItems = [];\r\n // check for additions\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n const id = ids[i];\r\n newIds[id] = true;\r\n if (!this._ids.has(id)) {\r\n addedIds.push(id);\r\n this._ids.add(id);\r\n }\r\n }\r\n // check for removals\r\n for (let i = 0, len = oldIds.length; i < len; i++) {\r\n const id = oldIds[i];\r\n const item = this._data.get(id);\r\n if (item == null) {\r\n // @TODO: Investigate.\r\n // Doesn't happen during tests or examples.\r\n // Is it really impossible or could it eventually happen?\r\n // How to handle it if it does? The types guarantee non-nullable items.\r\n console.error(\"If you see this, report it please.\");\r\n }\r\n else if (!newIds[id]) {\r\n removedIds.push(id);\r\n removedItems.push(item);\r\n this._ids.delete(id);\r\n }\r\n }\r\n this.length += addedIds.length - removedIds.length;\r\n // trigger events\r\n if (addedIds.length) {\r\n this._trigger(\"add\", { items: addedIds });\r\n }\r\n if (removedIds.length) {\r\n this._trigger(\"remove\", { items: removedIds, oldData: removedItems });\r\n }\r\n }\r\n /** @inheritDoc */\r\n get(first, second) {\r\n if (this._data == null) {\r\n return null;\r\n }\r\n // parse the arguments\r\n let ids = null;\r\n let options;\r\n if (isId(first) || Array.isArray(first)) {\r\n ids = first;\r\n options = second;\r\n }\r\n else {\r\n options = first;\r\n }\r\n // extend the options with the default options and provided options\r\n const viewOptions = Object.assign({}, this._options, options);\r\n // create a combined filter method when needed\r\n const thisFilter = this._options.filter;\r\n const optionsFilter = options && options.filter;\r\n if (thisFilter && optionsFilter) {\r\n viewOptions.filter = (item) => {\r\n return thisFilter(item) && optionsFilter(item);\r\n };\r\n }\r\n if (ids == null) {\r\n return this._data.get(viewOptions);\r\n }\r\n else {\r\n return this._data.get(ids, viewOptions);\r\n }\r\n }\r\n /** @inheritDoc */\r\n getIds(options) {\r\n if (this._data.length) {\r\n const defaultFilter = this._options.filter;\r\n const optionsFilter = options != null ? options.filter : null;\r\n let filter;\r\n if (optionsFilter) {\r\n if (defaultFilter) {\r\n filter = (item) => {\r\n return defaultFilter(item) && optionsFilter(item);\r\n };\r\n }\r\n else {\r\n filter = optionsFilter;\r\n }\r\n }\r\n else {\r\n filter = defaultFilter;\r\n }\r\n return this._data.getIds({\r\n filter: filter,\r\n order: options && options.order,\r\n });\r\n }\r\n else {\r\n return [];\r\n }\r\n }\r\n /** @inheritDoc */\r\n forEach(callback, options) {\r\n if (this._data) {\r\n const defaultFilter = this._options.filter;\r\n const optionsFilter = options && options.filter;\r\n let filter;\r\n if (optionsFilter) {\r\n if (defaultFilter) {\r\n filter = function (item) {\r\n return defaultFilter(item) && optionsFilter(item);\r\n };\r\n }\r\n else {\r\n filter = optionsFilter;\r\n }\r\n }\r\n else {\r\n filter = defaultFilter;\r\n }\r\n this._data.forEach(callback, {\r\n filter: filter,\r\n order: options && options.order,\r\n });\r\n }\r\n }\r\n /** @inheritDoc */\r\n map(callback, options) {\r\n if (this._data) {\r\n const defaultFilter = this._options.filter;\r\n const optionsFilter = options && options.filter;\r\n let filter;\r\n if (optionsFilter) {\r\n if (defaultFilter) {\r\n filter = (item) => {\r\n return defaultFilter(item) && optionsFilter(item);\r\n };\r\n }\r\n else {\r\n filter = optionsFilter;\r\n }\r\n }\r\n else {\r\n filter = defaultFilter;\r\n }\r\n return this._data.map(callback, {\r\n filter: filter,\r\n order: options && options.order,\r\n });\r\n }\r\n else {\r\n return [];\r\n }\r\n }\r\n /** @inheritDoc */\r\n getDataSet() {\r\n return this._data.getDataSet();\r\n }\r\n /** @inheritDoc */\r\n stream(ids) {\r\n return this._data.stream(ids || {\r\n [Symbol.iterator]: this._ids.keys.bind(this._ids),\r\n });\r\n }\r\n /**\r\n * Render the instance unusable prior to garbage collection.\r\n *\r\n * @remarks\r\n * The intention of this method is to help discover scenarios where the data\r\n * view is being used when the programmer thinks it has been garbage collected\r\n * already. It's stricter version of `dataView.setData(null)`.\r\n */\r\n dispose() {\r\n if (this._data?.off) {\r\n this._data.off(\"*\", this._listener);\r\n }\r\n const message = \"This data view has already been disposed of.\";\r\n const replacement = {\r\n get: () => {\r\n throw new Error(message);\r\n },\r\n set: () => {\r\n throw new Error(message);\r\n },\r\n configurable: false,\r\n };\r\n for (const key of Reflect.ownKeys(DataView.prototype)) {\r\n Object.defineProperty(this, key, replacement);\r\n }\r\n }\r\n /**\r\n * Event listener. Will propagate all events from the connected data set to the subscribers of the DataView, but will filter the items and only trigger when there are changes in the filtered data set.\r\n *\r\n * @param event - The name of the event.\r\n * @param params - Parameters of the event.\r\n * @param senderId - Id supplied by the sender.\r\n */\r\n _onEvent(event, params, senderId) {\r\n if (!params || !params.items || !this._data) {\r\n return;\r\n }\r\n const ids = params.items;\r\n const addedIds = [];\r\n const updatedIds = [];\r\n const removedIds = [];\r\n const oldItems = [];\r\n const updatedItems = [];\r\n const removedItems = [];\r\n switch (event) {\r\n case \"add\":\r\n // filter the ids of the added items\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n const id = ids[i];\r\n const item = this.get(id);\r\n if (item) {\r\n this._ids.add(id);\r\n addedIds.push(id);\r\n }\r\n }\r\n break;\r\n case \"update\":\r\n // determine the event from the views viewpoint: an updated\r\n // item can be added, updated, or removed from this view.\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n const id = ids[i];\r\n const item = this.get(id);\r\n if (item) {\r\n if (this._ids.has(id)) {\r\n updatedIds.push(id);\r\n updatedItems.push(params.data[i]);\r\n oldItems.push(params.oldData[i]);\r\n }\r\n else {\r\n this._ids.add(id);\r\n addedIds.push(id);\r\n }\r\n }\r\n else {\r\n if (this._ids.has(id)) {\r\n this._ids.delete(id);\r\n removedIds.push(id);\r\n removedItems.push(params.oldData[i]);\r\n }\r\n }\r\n }\r\n break;\r\n case \"remove\":\r\n // filter the ids of the removed items\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n const id = ids[i];\r\n if (this._ids.has(id)) {\r\n this._ids.delete(id);\r\n removedIds.push(id);\r\n removedItems.push(params.oldData[i]);\r\n }\r\n }\r\n break;\r\n }\r\n this.length += addedIds.length - removedIds.length;\r\n if (addedIds.length) {\r\n this._trigger(\"add\", { items: addedIds }, senderId);\r\n }\r\n if (updatedIds.length) {\r\n this._trigger(\"update\", { items: updatedIds, oldData: oldItems, data: updatedItems }, senderId);\r\n }\r\n if (removedIds.length) {\r\n this._trigger(\"remove\", { items: removedIds, oldData: removedItems }, senderId);\r\n }\r\n }\r\n}\n\n/**\r\n * Check that given value is compatible with Vis Data Set interface.\r\n *\r\n * @param idProp - The expected property to contain item id.\r\n * @param v - The value to be tested.\r\n * @returns True if all expected values and methods match, false otherwise.\r\n */\r\nfunction isDataSetLike(idProp, v) {\r\n return (typeof v === \"object\" &&\r\n v !== null &&\r\n idProp === v.idProp &&\r\n typeof v.add === \"function\" &&\r\n typeof v.clear === \"function\" &&\r\n typeof v.distinct === \"function\" &&\r\n typeof v.forEach === \"function\" &&\r\n typeof v.get === \"function\" &&\r\n typeof v.getDataSet === \"function\" &&\r\n typeof v.getIds === \"function\" &&\r\n typeof v.length === \"number\" &&\r\n typeof v.map === \"function\" &&\r\n typeof v.max === \"function\" &&\r\n typeof v.min === \"function\" &&\r\n typeof v.off === \"function\" &&\r\n typeof v.on === \"function\" &&\r\n typeof v.remove === \"function\" &&\r\n typeof v.setOptions === \"function\" &&\r\n typeof v.stream === \"function\" &&\r\n typeof v.update === \"function\" &&\r\n typeof v.updateOnly === \"function\");\r\n}\n\n/**\r\n * Check that given value is compatible with Vis Data View interface.\r\n *\r\n * @param idProp - The expected property to contain item id.\r\n * @param v - The value to be tested.\r\n * @returns True if all expected values and methods match, false otherwise.\r\n */\r\nfunction isDataViewLike(idProp, v) {\r\n return (typeof v === \"object\" &&\r\n v !== null &&\r\n idProp === v.idProp &&\r\n typeof v.forEach === \"function\" &&\r\n typeof v.get === \"function\" &&\r\n typeof v.getDataSet === \"function\" &&\r\n typeof v.getIds === \"function\" &&\r\n typeof v.length === \"number\" &&\r\n typeof v.map === \"function\" &&\r\n typeof v.off === \"function\" &&\r\n typeof v.on === \"function\" &&\r\n typeof v.stream === \"function\" &&\r\n isDataSetLike(idProp, v.getDataSet()));\r\n}\n\nexport { DataSet, DataStream, DataView, Queue, createNewDataPipeFrom, isDataSetLike, isDataViewLike };\n//# sourceMappingURL=vis-data.js.map\n","'use strict';\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar charAt = uncurryThis(''.charAt);\nvar $parseFloat = global.parseFloat;\nvar Symbol = global.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar FORCED = 1 / $parseFloat(whitespaces + '-0') !== -Infinity\n // MS Edge 18- broken with boxed symbols\n || (ITERATOR && !fails(function () { $parseFloat(Object(ITERATOR)); }));\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\nmodule.exports = FORCED ? function parseFloat(string) {\n var trimmedString = trim(toString(string));\n var result = $parseFloat(trimmedString);\n return result === 0 && charAt(trimmedString, 0) === '-' ? -0 : result;\n} : $parseFloat;\n","'use strict';\nvar $ = require('../internals/export');\nvar $parseFloat = require('../internals/number-parse-float');\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\n$({ global: true, forced: parseFloat !== $parseFloat }, {\n parseFloat: $parseFloat\n});\n","'use strict';\nrequire('../modules/es.parse-float');\nvar path = require('../internals/path');\n\nmodule.exports = path.parseFloat;\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names-external').f;\n\n// eslint-disable-next-line es/no-object-getownpropertynames -- required for testing\nvar FAILS_ON_PRIMITIVES = fails(function () { return !Object.getOwnPropertyNames(1); });\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n getOwnPropertyNames: getOwnPropertyNames\n});\n","'use strict';\nrequire('../../modules/es.object.get-own-property-names');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nmodule.exports = function getOwnPropertyNames(it) {\n return Object.getOwnPropertyNames(it);\n};\n","'use strict';\nvar parent = require('../../es/object/get-own-property-names');\n\nmodule.exports = parent;\n","import { topMost } from \"vis-util/esnext\";\n\n/**\n * Helper functions for components\n */\n\n/**\n * Determine values to use for (sub)options of 'chosen'.\n *\n * This option is either a boolean or an object whose values should be examined further.\n * The relevant structures are:\n *\n * - chosen: \n * - chosen: { subOption: }\n *\n * Where subOption is 'node', 'edge' or 'label'.\n *\n * The intention of this method appears to be to set a specific priority to the options;\n * Since most properties are either bridged or merged into the local options objects, there\n * is not much point in handling them separately.\n * TODO: examine if 'most' in previous sentence can be replaced with 'all'. In that case, we\n * should be able to get rid of this method.\n *\n * @param {string} subOption option within object 'chosen' to consider; either 'node', 'edge' or 'label'\n * @param {object} pile array of options objects to consider\n * @returns {boolean | Function} value for passed subOption of 'chosen' to use\n */\nexport function choosify(subOption, pile) {\n // allowed values for subOption\n const allowed = [\"node\", \"edge\", \"label\"];\n let value = true;\n\n const chosen = topMost(pile, \"chosen\");\n if (typeof chosen === \"boolean\") {\n value = chosen;\n } else if (typeof chosen === \"object\") {\n if (allowed.indexOf(subOption) === -1) {\n throw new Error(\n \"choosify: subOption '\" +\n subOption +\n \"' should be one of \" +\n \"'\" +\n allowed.join(\"', '\") +\n \"'\"\n );\n }\n\n const chosenEdge = topMost(pile, [\"chosen\", subOption]);\n if (typeof chosenEdge === \"boolean\" || typeof chosenEdge === \"function\") {\n value = chosenEdge;\n }\n }\n\n return value;\n}\n\n/**\n * Check if the point falls within the given rectangle.\n *\n * @param {rect} rect\n * @param {point} point\n * @param {rotationPoint} [rotationPoint] if specified, the rotation that applies to the rectangle.\n * @returns {boolean} true if point within rectangle, false otherwise\n */\nexport function pointInRect(rect, point, rotationPoint) {\n if (rect.width <= 0 || rect.height <= 0) {\n return false; // early out\n }\n\n if (rotationPoint !== undefined) {\n // Rotate the point the same amount as the rectangle\n const tmp = {\n x: point.x - rotationPoint.x,\n y: point.y - rotationPoint.y,\n };\n\n if (rotationPoint.angle !== 0) {\n // In order to get the coordinates the same, you need to\n // rotate in the reverse direction\n const angle = -rotationPoint.angle;\n\n const tmp2 = {\n x: Math.cos(angle) * tmp.x - Math.sin(angle) * tmp.y,\n y: Math.sin(angle) * tmp.x + Math.cos(angle) * tmp.y,\n };\n point = tmp2;\n } else {\n point = tmp;\n }\n\n // Note that if a rotation is specified, the rectangle coordinates\n // are **not* the full canvas coordinates. They are relative to the\n // rotationPoint. Hence, the point coordinates need not be translated\n // back in this case.\n }\n\n const right = rect.x + rect.width;\n const bottom = rect.y + rect.width;\n\n return (\n rect.left < point.x &&\n right > point.x &&\n rect.top < point.y &&\n bottom > point.y\n );\n}\n\n/**\n * Check if given value is acceptable as a label text.\n *\n * @param {*} text value to check; can be anything at this point\n * @returns {boolean} true if valid label value, false otherwise\n */\nexport function isValidLabel(text) {\n // Note that this is quite strict: types that *might* be converted to string are disallowed\n return typeof text === \"string\" && text !== \"\";\n}\n\n/**\n * Returns x, y of self reference circle based on provided angle\n *\n * @param {object} ctx\n * @param {number} angle\n * @param {number} radius\n * @param {VisNode} node\n * @returns {object} x and y coordinates\n */\nexport function getSelfRefCoordinates(ctx, angle, radius, node) {\n let x = node.x;\n let y = node.y;\n\n if (typeof node.distanceToBorder === \"function\") {\n //calculating opposite and adjacent\n //distaneToBorder becomes Hypotenuse.\n //Formulas sin(a) = Opposite / Hypotenuse and cos(a) = Adjacent / Hypotenuse\n const toBorderDist = node.distanceToBorder(ctx, angle);\n const yFromNodeCenter = Math.sin(angle) * toBorderDist;\n const xFromNodeCenter = Math.cos(angle) * toBorderDist;\n //xFromNodeCenter is basically x and if xFromNodeCenter equals to the distance to border then it means\n //that y does not need calculation because it is equal node.height / 2 or node.y\n //same thing with yFromNodeCenter and if yFromNodeCenter equals to the distance to border then it means\n //that x is equal node.width / 2 or node.x\n if (xFromNodeCenter === toBorderDist) {\n x += toBorderDist;\n y = node.y;\n } else if (yFromNodeCenter === toBorderDist) {\n x = node.x;\n y -= toBorderDist;\n } else {\n x += xFromNodeCenter;\n y -= yFromNodeCenter;\n }\n } else if (node.shape.width > node.shape.height) {\n x = node.x + node.shape.width * 0.5;\n y = node.y - radius;\n } else {\n x = node.x + radius;\n y = node.y - node.shape.height * 0.5;\n }\n\n return { x, y };\n}\n","/**\n * Callback to determine text dimensions, using the parent label settings.\n *\n * @callback MeasureText\n * @param {text} text\n * @param {text} mod\n * @returns {object} { width, values} width in pixels and font attributes\n */\n\n/**\n * Helper class for Label which collects results of splitting labels into lines and blocks.\n *\n * @private\n */\nclass LabelAccumulator {\n /**\n * @param {MeasureText} measureText\n */\n constructor(measureText) {\n this.measureText = measureText;\n this.current = 0;\n this.width = 0;\n this.height = 0;\n this.lines = [];\n }\n\n /**\n * Append given text to the given line.\n *\n * @param {number} l index of line to add to\n * @param {string} text string to append to line\n * @param {'bold'|'ital'|'boldital'|'mono'|'normal'} [mod='normal']\n * @private\n */\n _add(l, text, mod = \"normal\") {\n if (this.lines[l] === undefined) {\n this.lines[l] = {\n width: 0,\n height: 0,\n blocks: [],\n };\n }\n\n // We still need to set a block for undefined and empty texts, hence return at this point\n // This is necessary because we don't know at this point if we're at the\n // start of an empty line or not.\n // To compensate, empty blocks are removed in `finalize()`.\n //\n // Empty strings should still have a height\n let tmpText = text;\n if (text === undefined || text === \"\") tmpText = \" \";\n\n // Determine width and get the font properties\n const result = this.measureText(tmpText, mod);\n const block = Object.assign({}, result.values);\n block.text = text;\n block.width = result.width;\n block.mod = mod;\n\n if (text === undefined || text === \"\") {\n block.width = 0;\n }\n\n this.lines[l].blocks.push(block);\n\n // Update the line width. We need this for determining if a string goes over max width\n this.lines[l].width += block.width;\n }\n\n /**\n * Returns the width in pixels of the current line.\n *\n * @returns {number}\n */\n curWidth() {\n const line = this.lines[this.current];\n if (line === undefined) return 0;\n\n return line.width;\n }\n\n /**\n * Add text in block to current line\n *\n * @param {string} text\n * @param {'bold'|'ital'|'boldital'|'mono'|'normal'} [mod='normal']\n */\n append(text, mod = \"normal\") {\n this._add(this.current, text, mod);\n }\n\n /**\n * Add text in block to current line and start a new line\n *\n * @param {string} text\n * @param {'bold'|'ital'|'boldital'|'mono'|'normal'} [mod='normal']\n */\n newLine(text, mod = \"normal\") {\n this._add(this.current, text, mod);\n this.current++;\n }\n\n /**\n * Determine and set the heights of all the lines currently contained in this instance\n *\n * Note that width has already been set.\n *\n * @private\n */\n determineLineHeights() {\n for (let k = 0; k < this.lines.length; k++) {\n const line = this.lines[k];\n\n // Looking for max height of blocks in line\n let height = 0;\n\n if (line.blocks !== undefined) {\n // Can happen if text contains e.g. '\\n '\n for (let l = 0; l < line.blocks.length; l++) {\n const block = line.blocks[l];\n\n if (height < block.height) {\n height = block.height;\n }\n }\n }\n\n line.height = height;\n }\n }\n\n /**\n * Determine the full size of the label text, as determined by current lines and blocks\n *\n * @private\n */\n determineLabelSize() {\n let width = 0;\n let height = 0;\n for (let k = 0; k < this.lines.length; k++) {\n const line = this.lines[k];\n\n if (line.width > width) {\n width = line.width;\n }\n height += line.height;\n }\n\n this.width = width;\n this.height = height;\n }\n\n /**\n * Remove all empty blocks and empty lines we don't need\n *\n * This must be done after the width/height determination,\n * so that these are set properly for processing here.\n *\n * @returns {Array} Lines with empty blocks (and some empty lines) removed\n * @private\n */\n removeEmptyBlocks() {\n const tmpLines = [];\n for (let k = 0; k < this.lines.length; k++) {\n const line = this.lines[k];\n\n // Note: an empty line in between text has width zero but is still relevant to layout.\n // So we can't use width for testing empty line here\n if (line.blocks.length === 0) continue;\n\n // Discard final empty line always\n if (k === this.lines.length - 1) {\n if (line.width === 0) continue;\n }\n\n const tmpLine = {};\n Object.assign(tmpLine, line);\n tmpLine.blocks = [];\n\n let firstEmptyBlock;\n const tmpBlocks = [];\n for (let l = 0; l < line.blocks.length; l++) {\n const block = line.blocks[l];\n if (block.width !== 0) {\n tmpBlocks.push(block);\n } else {\n if (firstEmptyBlock === undefined) {\n firstEmptyBlock = block;\n }\n }\n }\n\n // Ensure that there is *some* text present\n if (tmpBlocks.length === 0 && firstEmptyBlock !== undefined) {\n tmpBlocks.push(firstEmptyBlock);\n }\n\n tmpLine.blocks = tmpBlocks;\n\n tmpLines.push(tmpLine);\n }\n\n return tmpLines;\n }\n\n /**\n * Set the sizes for all lines and the whole thing.\n *\n * @returns {{width: (number|*), height: (number|*), lines: Array}}\n */\n finalize() {\n //console.log(JSON.stringify(this.lines, null, 2));\n\n this.determineLineHeights();\n this.determineLabelSize();\n const tmpLines = this.removeEmptyBlocks();\n\n // Return a simple hash object for further processing.\n return {\n width: this.width,\n height: this.height,\n lines: tmpLines,\n };\n }\n}\n\nexport default LabelAccumulator;\n","import LabelAccumulator from \"./LabelAccumulator\";\nimport { isValidLabel } from \"./ComponentUtil\";\n\n// Hash of prepared regexp's for tags\nconst tagPattern = {\n // HTML\n \"\": //,\n \"\": //,\n \"\": //,\n \"\": /<\\/b>/,\n \"\": /<\\/i>/,\n \"\": /<\\/code>/,\n // Markdown\n \"*\": /\\*/, // bold\n _: /_/, // ital\n \"`\": /`/, // mono\n afterBold: /[^*]/,\n afterItal: /[^_]/,\n afterMono: /[^`]/,\n};\n\n/**\n * Internal helper class for parsing the markup tags for HTML and Markdown.\n *\n * NOTE: Sequences of tabs and spaces are reduced to single space.\n * Scan usage of `this.spacing` within method\n */\nclass MarkupAccumulator {\n /**\n * Create an instance\n *\n * @param {string} text text to parse for markup\n */\n constructor(text) {\n this.text = text;\n this.bold = false;\n this.ital = false;\n this.mono = false;\n this.spacing = false;\n this.position = 0;\n this.buffer = \"\";\n this.modStack = [];\n\n this.blocks = [];\n }\n\n /**\n * Return the mod label currently on the top of the stack\n *\n * @returns {string} label of topmost mod\n * @private\n */\n mod() {\n return this.modStack.length === 0 ? \"normal\" : this.modStack[0];\n }\n\n /**\n * Return the mod label currently active\n *\n * @returns {string} label of active mod\n * @private\n */\n modName() {\n if (this.modStack.length === 0) return \"normal\";\n else if (this.modStack[0] === \"mono\") return \"mono\";\n else {\n if (this.bold && this.ital) {\n return \"boldital\";\n } else if (this.bold) {\n return \"bold\";\n } else if (this.ital) {\n return \"ital\";\n }\n }\n }\n\n /**\n * @private\n */\n emitBlock() {\n if (this.spacing) {\n this.add(\" \");\n this.spacing = false;\n }\n if (this.buffer.length > 0) {\n this.blocks.push({ text: this.buffer, mod: this.modName() });\n this.buffer = \"\";\n }\n }\n\n /**\n * Output text to buffer\n *\n * @param {string} text text to add\n * @private\n */\n add(text) {\n if (text === \" \") {\n this.spacing = true;\n }\n if (this.spacing) {\n this.buffer += \" \";\n this.spacing = false;\n }\n if (text != \" \") {\n this.buffer += text;\n }\n }\n\n /**\n * Handle parsing of whitespace\n *\n * @param {string} ch the character to check\n * @returns {boolean} true if the character was processed as whitespace, false otherwise\n */\n parseWS(ch) {\n if (/[ \\t]/.test(ch)) {\n if (!this.mono) {\n this.spacing = true;\n } else {\n this.add(ch);\n }\n return true;\n }\n\n return false;\n }\n\n /**\n * @param {string} tagName label for block type to set\n * @private\n */\n setTag(tagName) {\n this.emitBlock();\n this[tagName] = true;\n this.modStack.unshift(tagName);\n }\n\n /**\n * @param {string} tagName label for block type to unset\n * @private\n */\n unsetTag(tagName) {\n this.emitBlock();\n this[tagName] = false;\n this.modStack.shift();\n }\n\n /**\n * @param {string} tagName label for block type we are currently processing\n * @param {string|RegExp} tag string to match in text\n * @returns {boolean} true if the tag was processed, false otherwise\n */\n parseStartTag(tagName, tag) {\n // Note: if 'mono' passed as tagName, there is a double check here. This is OK\n if (!this.mono && !this[tagName] && this.match(tag)) {\n this.setTag(tagName);\n return true;\n }\n\n return false;\n }\n\n /**\n * @param {string|RegExp} tag\n * @param {number} [advance=true] if set, advance current position in text\n * @returns {boolean} true if match at given position, false otherwise\n * @private\n */\n match(tag, advance = true) {\n const [regExp, length] = this.prepareRegExp(tag);\n const matched = regExp.test(this.text.substr(this.position, length));\n\n if (matched && advance) {\n this.position += length - 1;\n }\n\n return matched;\n }\n\n /**\n * @param {string} tagName label for block type we are currently processing\n * @param {string|RegExp} tag string to match in text\n * @param {RegExp} [nextTag] regular expression to match for characters *following* the current tag\n * @returns {boolean} true if the tag was processed, false otherwise\n */\n parseEndTag(tagName, tag, nextTag) {\n let checkTag = this.mod() === tagName;\n if (tagName === \"mono\") {\n // special handling for 'mono'\n checkTag = checkTag && this.mono;\n } else {\n checkTag = checkTag && !this.mono;\n }\n\n if (checkTag && this.match(tag)) {\n if (nextTag !== undefined) {\n // Purpose of the following match is to prevent a direct unset/set of a given tag\n // E.g. '*bold **still bold*' => '*bold still bold*'\n if (\n this.position === this.text.length - 1 ||\n this.match(nextTag, false)\n ) {\n this.unsetTag(tagName);\n }\n } else {\n this.unsetTag(tagName);\n }\n\n return true;\n }\n\n return false;\n }\n\n /**\n * @param {string|RegExp} tag string to match in text\n * @param {value} value string to replace tag with, if found at current position\n * @returns {boolean} true if the tag was processed, false otherwise\n */\n replace(tag, value) {\n if (this.match(tag)) {\n this.add(value);\n this.position += length - 1;\n return true;\n }\n\n return false;\n }\n\n /**\n * Create a regular expression for the tag if it isn't already one.\n *\n * The return value is an array `[RegExp, number]`, with exactly two value, where:\n * - RegExp is the regular expression to use\n * - number is the lenth of the input string to match\n *\n * @param {string|RegExp} tag string to match in text\n * @returns {Array} regular expression to use and length of input string to match\n * @private\n */\n prepareRegExp(tag) {\n let length;\n let regExp;\n if (tag instanceof RegExp) {\n regExp = tag;\n length = 1; // ASSUMPTION: regexp only tests one character\n } else {\n // use prepared regexp if present\n const prepared = tagPattern[tag];\n if (prepared !== undefined) {\n regExp = prepared;\n } else {\n regExp = new RegExp(tag);\n }\n\n length = tag.length;\n }\n\n return [regExp, length];\n }\n}\n\n/**\n * Helper class for Label which explodes the label text into lines and blocks within lines\n *\n * @private\n */\nclass LabelSplitter {\n /**\n * @param {CanvasRenderingContext2D} ctx Canvas rendering context\n * @param {Label} parent reference to the Label instance using current instance\n * @param {boolean} selected\n * @param {boolean} hover\n */\n constructor(ctx, parent, selected, hover) {\n this.ctx = ctx;\n this.parent = parent;\n this.selected = selected;\n this.hover = hover;\n\n /**\n * Callback to determine text width; passed to LabelAccumulator instance\n *\n * @param {string} text string to determine width of\n * @param {string} mod font type to use for this text\n * @returns {object} { width, values} width in pixels and font attributes\n */\n const textWidth = (text, mod) => {\n if (text === undefined) return 0;\n\n // TODO: This can be done more efficiently with caching\n // This will set the ctx.font correctly, depending on selected/hover and mod - so that ctx.measureText() will be accurate.\n const values = this.parent.getFormattingValues(ctx, selected, hover, mod);\n\n let width = 0;\n if (text !== \"\") {\n const measure = this.ctx.measureText(text);\n width = measure.width;\n }\n\n return { width, values: values };\n };\n\n this.lines = new LabelAccumulator(textWidth);\n }\n\n /**\n * Split passed text of a label into lines and blocks.\n *\n * # NOTE\n *\n * The handling of spacing is option dependent:\n *\n * - if `font.multi : false`, all spaces are retained\n * - if `font.multi : true`, every sequence of spaces is compressed to a single space\n *\n * This might not be the best way to do it, but this is as it has been working till now.\n * In order not to break existing functionality, for the time being this behaviour will\n * be retained in any code changes.\n *\n * @param {string} text text to split\n * @returns {Array}\n */\n process(text) {\n if (!isValidLabel(text)) {\n return this.lines.finalize();\n }\n\n const font = this.parent.fontOptions;\n\n // Normalize the end-of-line's to a single representation - order important\n text = text.replace(/\\r\\n/g, \"\\n\"); // Dos EOL's\n text = text.replace(/\\r/g, \"\\n\"); // Mac EOL's\n\n // Note that at this point, there can be no \\r's in the text.\n // This is used later on splitStringIntoLines() to split multifont texts.\n\n const nlLines = String(text).split(\"\\n\");\n const lineCount = nlLines.length;\n\n if (font.multi) {\n // Multi-font case: styling tags active\n for (let i = 0; i < lineCount; i++) {\n const blocks = this.splitBlocks(nlLines[i], font.multi);\n // Post: Sequences of tabs and spaces are reduced to single space\n\n if (blocks === undefined) continue;\n\n if (blocks.length === 0) {\n this.lines.newLine(\"\");\n continue;\n }\n\n if (font.maxWdt > 0) {\n // widthConstraint.maximum defined\n //console.log('Running widthConstraint multi, max: ' + this.fontOptions.maxWdt);\n for (let j = 0; j < blocks.length; j++) {\n const mod = blocks[j].mod;\n const text = blocks[j].text;\n this.splitStringIntoLines(text, mod, true);\n }\n } else {\n // widthConstraint.maximum NOT defined\n for (let j = 0; j < blocks.length; j++) {\n const mod = blocks[j].mod;\n const text = blocks[j].text;\n this.lines.append(text, mod);\n }\n }\n\n this.lines.newLine();\n }\n } else {\n // Single-font case\n if (font.maxWdt > 0) {\n // widthConstraint.maximum defined\n // console.log('Running widthConstraint normal, max: ' + this.fontOptions.maxWdt);\n for (let i = 0; i < lineCount; i++) {\n this.splitStringIntoLines(nlLines[i]);\n }\n } else {\n // widthConstraint.maximum NOT defined\n for (let i = 0; i < lineCount; i++) {\n this.lines.newLine(nlLines[i]);\n }\n }\n }\n\n return this.lines.finalize();\n }\n\n /**\n * normalize the markup system\n *\n * @param {boolean|'md'|'markdown'|'html'} markupSystem\n * @returns {string}\n */\n decodeMarkupSystem(markupSystem) {\n let system = \"none\";\n if (markupSystem === \"markdown\" || markupSystem === \"md\") {\n system = \"markdown\";\n } else if (markupSystem === true || markupSystem === \"html\") {\n system = \"html\";\n }\n return system;\n }\n\n /**\n *\n * @param {string} text\n * @returns {Array}\n */\n splitHtmlBlocks(text) {\n const s = new MarkupAccumulator(text);\n\n const parseEntities = (ch) => {\n if (/&/.test(ch)) {\n const parsed =\n s.replace(s.text, \"<\", \"<\") || s.replace(s.text, \"&\", \"&\");\n\n if (!parsed) {\n s.add(\"&\");\n }\n\n return true;\n }\n\n return false;\n };\n\n while (s.position < s.text.length) {\n const ch = s.text.charAt(s.position);\n\n const parsed =\n s.parseWS(ch) ||\n (/\") ||\n s.parseStartTag(\"ital\", \"\") ||\n s.parseStartTag(\"mono\", \"\") ||\n s.parseEndTag(\"bold\", \"\") ||\n s.parseEndTag(\"ital\", \"\") ||\n s.parseEndTag(\"mono\", \"\"))) ||\n parseEntities(ch);\n\n if (!parsed) {\n s.add(ch);\n }\n s.position++;\n }\n s.emitBlock();\n return s.blocks;\n }\n\n /**\n *\n * @param {string} text\n * @returns {Array}\n */\n splitMarkdownBlocks(text) {\n const s = new MarkupAccumulator(text);\n let beginable = true;\n\n const parseOverride = (ch) => {\n if (/\\\\/.test(ch)) {\n if (s.position < this.text.length + 1) {\n s.position++;\n ch = this.text.charAt(s.position);\n if (/ \\t/.test(ch)) {\n s.spacing = true;\n } else {\n s.add(ch);\n beginable = false;\n }\n }\n\n return true;\n }\n\n return false;\n };\n\n while (s.position < s.text.length) {\n const ch = s.text.charAt(s.position);\n\n const parsed =\n s.parseWS(ch) ||\n parseOverride(ch) ||\n ((beginable || s.spacing) &&\n (s.parseStartTag(\"bold\", \"*\") ||\n s.parseStartTag(\"ital\", \"_\") ||\n s.parseStartTag(\"mono\", \"`\"))) ||\n s.parseEndTag(\"bold\", \"*\", \"afterBold\") ||\n s.parseEndTag(\"ital\", \"_\", \"afterItal\") ||\n s.parseEndTag(\"mono\", \"`\", \"afterMono\");\n\n if (!parsed) {\n s.add(ch);\n beginable = false;\n }\n s.position++;\n }\n s.emitBlock();\n return s.blocks;\n }\n\n /**\n * Explodes a piece of text into single-font blocks using a given markup\n *\n * @param {string} text\n * @param {boolean|'md'|'markdown'|'html'} markupSystem\n * @returns {Array.<{text: string, mod: string}>}\n * @private\n */\n splitBlocks(text, markupSystem) {\n const system = this.decodeMarkupSystem(markupSystem);\n if (system === \"none\") {\n return [\n {\n text: text,\n mod: \"normal\",\n },\n ];\n } else if (system === \"markdown\") {\n return this.splitMarkdownBlocks(text);\n } else if (system === \"html\") {\n return this.splitHtmlBlocks(text);\n }\n }\n\n /**\n * @param {string} text\n * @returns {boolean} true if text length over the current max with\n * @private\n */\n overMaxWidth(text) {\n const width = this.ctx.measureText(text).width;\n return this.lines.curWidth() + width > this.parent.fontOptions.maxWdt;\n }\n\n /**\n * Determine the longest part of the sentence which still fits in the\n * current max width.\n *\n * @param {Array} words Array of strings signifying a text lines\n * @returns {number} index of first item in string making string go over max\n * @private\n */\n getLongestFit(words) {\n let text = \"\";\n let w = 0;\n\n while (w < words.length) {\n const pre = text === \"\" ? \"\" : \" \";\n const newText = text + pre + words[w];\n\n if (this.overMaxWidth(newText)) break;\n text = newText;\n w++;\n }\n\n return w;\n }\n\n /**\n * Determine the longest part of the string which still fits in the\n * current max width.\n *\n * @param {Array} words Array of strings signifying a text lines\n * @returns {number} index of first item in string making string go over max\n */\n getLongestFitWord(words) {\n let w = 0;\n\n while (w < words.length) {\n if (this.overMaxWidth(words.slice(0, w))) break;\n w++;\n }\n\n return w;\n }\n\n /**\n * Split the passed text into lines, according to width constraint (if any).\n *\n * The method assumes that the input string is a single line, i.e. without lines break.\n *\n * This method retains spaces, if still present (case `font.multi: false`).\n * A space which falls on an internal line break, will be replaced by a newline.\n * There is no special handling of tabs; these go along with the flow.\n *\n * @param {string} str\n * @param {string} [mod='normal']\n * @param {boolean} [appendLast=false]\n * @private\n */\n splitStringIntoLines(str, mod = \"normal\", appendLast = false) {\n // Set the canvas context font, based upon the current selected/hover state\n // and the provided mod, so the text measurement performed by getLongestFit\n // will be accurate - and not just use the font of whoever last used the canvas.\n this.parent.getFormattingValues(this.ctx, this.selected, this.hover, mod);\n\n // Still-present spaces are relevant, retain them\n str = str.replace(/^( +)/g, \"$1\\r\");\n str = str.replace(/([^\\r][^ ]*)( +)/g, \"$1\\r$2\\r\");\n let words = str.split(\"\\r\");\n\n while (words.length > 0) {\n let w = this.getLongestFit(words);\n\n if (w === 0) {\n // Special case: the first word is already larger than the max width.\n const word = words[0];\n\n // Break the word to the largest part that fits the line\n const x = this.getLongestFitWord(word);\n this.lines.newLine(word.slice(0, x), mod);\n\n // Adjust the word, so that the rest will be done next iteration\n words[0] = word.slice(x);\n } else {\n // skip any space that is replaced by a newline\n let newW = w;\n if (words[w - 1] === \" \") {\n w--;\n } else if (words[newW] === \" \") {\n newW++;\n }\n\n const text = words.slice(0, w).join(\"\");\n\n if (w == words.length && appendLast) {\n this.lines.append(text, mod);\n } else {\n this.lines.newLine(text, mod);\n }\n\n // Adjust the word, so that the rest will be done next iteration\n words = words.slice(newW);\n }\n }\n }\n}\n\nexport default LabelSplitter;\n","import { deepExtend, forEach, overrideOpacity, topMost } from \"vis-util/esnext\";\nimport { choosify, isValidLabel } from \"./ComponentUtil\";\nimport LabelSplitter from \"./LabelSplitter\";\n\n/**\n * List of special styles for multi-fonts\n *\n * @private\n */\nconst multiFontStyle = [\"bold\", \"ital\", \"boldital\", \"mono\"];\n\n/**\n * A Label to be used for Nodes or Edges.\n */\nclass Label {\n /**\n * @param {object} body\n * @param {object} options\n * @param {boolean} [edgelabel=false]\n */\n constructor(body, options, edgelabel = false) {\n this.body = body;\n this.pointToSelf = false;\n this.baseSize = undefined;\n this.fontOptions = {}; // instance variable containing the *instance-local* font options\n this.setOptions(options);\n this.size = { top: 0, left: 0, width: 0, height: 0, yLine: 0 };\n this.isEdgeLabel = edgelabel;\n }\n\n /**\n * @param {object} options the options of the parent Node-instance\n */\n setOptions(options) {\n this.elementOptions = options; // Reference to the options of the parent Node-instance\n\n this.initFontOptions(options.font);\n\n if (isValidLabel(options.label)) {\n this.labelDirty = true;\n } else {\n // Bad label! Change the option value to prevent bad stuff happening\n options.label = undefined;\n }\n\n if (options.font !== undefined && options.font !== null) {\n // font options can be deleted at various levels\n if (typeof options.font === \"string\") {\n this.baseSize = this.fontOptions.size;\n } else if (typeof options.font === \"object\") {\n const size = options.font.size;\n\n if (size !== undefined) {\n this.baseSize = size;\n }\n }\n }\n }\n\n /**\n * Init the font Options structure.\n *\n * Member fontOptions serves as an accumulator for the current font options.\n * As such, it needs to be completely separated from the node options.\n *\n * @param {object} newFontOptions the new font options to process\n * @private\n */\n initFontOptions(newFontOptions) {\n // Prepare the multi-font option objects.\n // These will be filled in propagateFonts(), if required\n forEach(multiFontStyle, (style) => {\n this.fontOptions[style] = {};\n });\n\n // Handle shorthand option, if present\n if (Label.parseFontString(this.fontOptions, newFontOptions)) {\n this.fontOptions.vadjust = 0;\n return;\n }\n\n // Copy over the non-multifont options, if specified\n forEach(newFontOptions, (prop, n) => {\n if (prop !== undefined && prop !== null && typeof prop !== \"object\") {\n this.fontOptions[n] = prop;\n }\n });\n }\n\n /**\n * If in-variable is a string, parse it as a font specifier.\n *\n * Note that following is not done here and have to be done after the call:\n * - Not all font options are set (vadjust, mod)\n *\n * @param {object} outOptions out-parameter, object in which to store the parse results (if any)\n * @param {object} inOptions font options to parse\n * @returns {boolean} true if font parsed as string, false otherwise\n * @static\n */\n static parseFontString(outOptions, inOptions) {\n if (!inOptions || typeof inOptions !== \"string\") return false;\n\n const newOptionsArray = inOptions.split(\" \");\n\n outOptions.size = +newOptionsArray[0].replace(\"px\", \"\");\n outOptions.face = newOptionsArray[1];\n outOptions.color = newOptionsArray[2];\n\n return true;\n }\n\n /**\n * Set the width and height constraints based on 'nearest' value\n *\n * @param {Array} pile array of option objects to consider\n * @returns {object} the actual constraint values to use\n * @private\n */\n constrain(pile) {\n // NOTE: constrainWidth and constrainHeight never set!\n // NOTE: for edge labels, only 'maxWdt' set\n // Node labels can set all the fields\n const fontOptions = {\n constrainWidth: false,\n maxWdt: -1,\n minWdt: -1,\n constrainHeight: false,\n minHgt: -1,\n valign: \"middle\",\n };\n\n const widthConstraint = topMost(pile, \"widthConstraint\");\n if (typeof widthConstraint === \"number\") {\n fontOptions.maxWdt = Number(widthConstraint);\n fontOptions.minWdt = Number(widthConstraint);\n } else if (typeof widthConstraint === \"object\") {\n const widthConstraintMaximum = topMost(pile, [\n \"widthConstraint\",\n \"maximum\",\n ]);\n if (typeof widthConstraintMaximum === \"number\") {\n fontOptions.maxWdt = Number(widthConstraintMaximum);\n }\n const widthConstraintMinimum = topMost(pile, [\n \"widthConstraint\",\n \"minimum\",\n ]);\n if (typeof widthConstraintMinimum === \"number\") {\n fontOptions.minWdt = Number(widthConstraintMinimum);\n }\n }\n\n const heightConstraint = topMost(pile, \"heightConstraint\");\n if (typeof heightConstraint === \"number\") {\n fontOptions.minHgt = Number(heightConstraint);\n } else if (typeof heightConstraint === \"object\") {\n const heightConstraintMinimum = topMost(pile, [\n \"heightConstraint\",\n \"minimum\",\n ]);\n if (typeof heightConstraintMinimum === \"number\") {\n fontOptions.minHgt = Number(heightConstraintMinimum);\n }\n const heightConstraintValign = topMost(pile, [\n \"heightConstraint\",\n \"valign\",\n ]);\n if (typeof heightConstraintValign === \"string\") {\n if (\n heightConstraintValign === \"top\" ||\n heightConstraintValign === \"bottom\"\n ) {\n fontOptions.valign = heightConstraintValign;\n }\n }\n }\n\n return fontOptions;\n }\n\n /**\n * Set options and update internal state\n *\n * @param {object} options options to set\n * @param {Array} pile array of option objects to consider for option 'chosen'\n */\n update(options, pile) {\n this.setOptions(options, true);\n this.propagateFonts(pile);\n deepExtend(this.fontOptions, this.constrain(pile));\n this.fontOptions.chooser = choosify(\"label\", pile);\n }\n\n /**\n * When margins are set in an element, adjust sizes is called to remove them\n * from the width/height constraints. This must be done prior to label sizing.\n *\n * @param {{top: number, right: number, bottom: number, left: number}} margins\n */\n adjustSizes(margins) {\n const widthBias = margins ? margins.right + margins.left : 0;\n if (this.fontOptions.constrainWidth) {\n this.fontOptions.maxWdt -= widthBias;\n this.fontOptions.minWdt -= widthBias;\n }\n const heightBias = margins ? margins.top + margins.bottom : 0;\n if (this.fontOptions.constrainHeight) {\n this.fontOptions.minHgt -= heightBias;\n }\n }\n\n /////////////////////////////////////////////////////////\n // Methods for handling options piles\n // Eventually, these will be moved to a separate class\n /////////////////////////////////////////////////////////\n\n /**\n * Add the font members of the passed list of option objects to the pile.\n *\n * @param {Pile} dstPile pile of option objects add to\n * @param {Pile} srcPile pile of option objects to take font options from\n * @private\n */\n addFontOptionsToPile(dstPile, srcPile) {\n for (let i = 0; i < srcPile.length; ++i) {\n this.addFontToPile(dstPile, srcPile[i]);\n }\n }\n\n /**\n * Add given font option object to the list of objects (the 'pile') to consider for determining\n * multi-font option values.\n *\n * @param {Pile} pile pile of option objects to use\n * @param {object} options instance to add to pile\n * @private\n */\n addFontToPile(pile, options) {\n if (options === undefined) return;\n if (options.font === undefined || options.font === null) return;\n\n const item = options.font;\n pile.push(item);\n }\n\n /**\n * Collect all own-property values from the font pile that aren't multi-font option objectss.\n *\n * @param {Pile} pile pile of option objects to use\n * @returns {object} object with all current own basic font properties\n * @private\n */\n getBasicOptions(pile) {\n const ret = {};\n\n // Scans the whole pile to get all options present\n for (let n = 0; n < pile.length; ++n) {\n let fontOptions = pile[n];\n\n // Convert shorthand if necessary\n const tmpShorthand = {};\n if (Label.parseFontString(tmpShorthand, fontOptions)) {\n fontOptions = tmpShorthand;\n }\n\n forEach(fontOptions, (opt, name) => {\n if (opt === undefined) return; // multi-font option need not be present\n if (Object.prototype.hasOwnProperty.call(ret, name)) return; // Keep first value we encounter\n\n if (multiFontStyle.indexOf(name) !== -1) {\n // Skip multi-font properties but we do need the structure\n ret[name] = {};\n } else {\n ret[name] = opt;\n }\n });\n }\n\n return ret;\n }\n\n /**\n * Return the value for given option for the given multi-font.\n *\n * All available option objects are trawled in the set order to construct the option values.\n *\n * ---------------------------------------------------------------------\n * ## Traversal of pile for multi-fonts\n *\n * The determination of multi-font option values is a special case, because any values not\n * present in the multi-font options should by definition be taken from the main font options,\n * i.e. from the current 'parent' object of the multi-font option.\n *\n * ### Search order for multi-fonts\n *\n * 'bold' used as example:\n *\n * - search in option group 'bold' in local properties\n * - search in main font option group in local properties\n *\n * ---------------------------------------------------------------------\n *\n * @param {Pile} pile pile of option objects to use\n * @param {MultiFontStyle} multiName sub path for the multi-font\n * @param {string} option the option to search for, for the given multi-font\n * @returns {string|number} the value for the given option\n * @private\n */\n getFontOption(pile, multiName, option) {\n let multiFont;\n\n // Search multi font in local properties\n for (let n = 0; n < pile.length; ++n) {\n const fontOptions = pile[n];\n\n if (Object.prototype.hasOwnProperty.call(fontOptions, multiName)) {\n multiFont = fontOptions[multiName];\n if (multiFont === undefined || multiFont === null) continue;\n\n // Convert shorthand if necessary\n // TODO: inefficient to do this conversion every time; find a better way.\n const tmpShorthand = {};\n if (Label.parseFontString(tmpShorthand, multiFont)) {\n multiFont = tmpShorthand;\n }\n\n if (Object.prototype.hasOwnProperty.call(multiFont, option)) {\n return multiFont[option];\n }\n }\n }\n\n // Option is not mentioned in the multi font options; take it from the parent font options.\n // These have already been converted with getBasicOptions(), so use the converted values.\n if (Object.prototype.hasOwnProperty.call(this.fontOptions, option)) {\n return this.fontOptions[option];\n }\n\n // A value **must** be found; you should never get here.\n throw new Error(\n \"Did not find value for multi-font for property: '\" + option + \"'\"\n );\n }\n\n /**\n * Return all options values for the given multi-font.\n *\n * All available option objects are trawled in the set order to construct the option values.\n *\n * @param {Pile} pile pile of option objects to use\n * @param {MultiFontStyle} multiName sub path for the mod-font\n * @returns {MultiFontOptions}\n * @private\n */\n getFontOptions(pile, multiName) {\n const result = {};\n const optionNames = [\"color\", \"size\", \"face\", \"mod\", \"vadjust\"]; // List of allowed options per multi-font\n\n for (let i = 0; i < optionNames.length; ++i) {\n const mod = optionNames[i];\n result[mod] = this.getFontOption(pile, multiName, mod);\n }\n\n return result;\n }\n\n /////////////////////////////////////////////////////////\n // End methods for handling options piles\n /////////////////////////////////////////////////////////\n\n /**\n * Collapse the font options for the multi-font to single objects, from\n * the chain of option objects passed (the 'pile').\n *\n * @param {Pile} pile sequence of option objects to consider.\n * First item in list assumed to be the newly set options.\n */\n propagateFonts(pile) {\n const fontPile = []; // sequence of font objects to consider, order important\n\n // Note that this.elementOptions is not used here.\n this.addFontOptionsToPile(fontPile, pile);\n this.fontOptions = this.getBasicOptions(fontPile);\n\n // We set multifont values even if multi === false, for consistency (things break otherwise)\n for (let i = 0; i < multiFontStyle.length; ++i) {\n const mod = multiFontStyle[i];\n const modOptions = this.fontOptions[mod];\n const tmpMultiFontOptions = this.getFontOptions(fontPile, mod);\n\n // Copy over found values\n forEach(tmpMultiFontOptions, (option, n) => {\n modOptions[n] = option;\n });\n\n modOptions.size = Number(modOptions.size);\n modOptions.vadjust = Number(modOptions.vadjust);\n }\n }\n\n /**\n * Main function. This is called from anything that wants to draw a label.\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x\n * @param {number} y\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {string} [baseline='middle']\n */\n draw(ctx, x, y, selected, hover, baseline = \"middle\") {\n // if no label, return\n if (this.elementOptions.label === undefined) return;\n\n // check if we have to render the label\n let viewFontSize = this.fontOptions.size * this.body.view.scale;\n if (\n this.elementOptions.label &&\n viewFontSize < this.elementOptions.scaling.label.drawThreshold - 1\n )\n return;\n\n // This ensures that there will not be HUGE letters on screen\n // by setting an upper limit on the visible text size (regardless of zoomLevel)\n if (viewFontSize >= this.elementOptions.scaling.label.maxVisible) {\n viewFontSize =\n Number(this.elementOptions.scaling.label.maxVisible) /\n this.body.view.scale;\n }\n\n // update the size cache if required\n this.calculateLabelSize(ctx, selected, hover, x, y, baseline);\n this._drawBackground(ctx);\n this._drawText(ctx, x, this.size.yLine, baseline, viewFontSize);\n }\n\n /**\n * Draws the label background\n *\n * @param {CanvasRenderingContext2D} ctx\n * @private\n */\n _drawBackground(ctx) {\n if (\n this.fontOptions.background !== undefined &&\n this.fontOptions.background !== \"none\"\n ) {\n ctx.fillStyle = this.fontOptions.background;\n const size = this.getSize();\n ctx.fillRect(size.left, size.top, size.width, size.height);\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x\n * @param {number} y\n * @param {string} [baseline='middle']\n * @param {number} viewFontSize\n * @private\n */\n _drawText(ctx, x, y, baseline = \"middle\", viewFontSize) {\n [x, y] = this._setAlignment(ctx, x, y, baseline);\n\n ctx.textAlign = \"left\";\n x = x - this.size.width / 2; // Shift label 1/2-distance to the left\n if (this.fontOptions.valign && this.size.height > this.size.labelHeight) {\n if (this.fontOptions.valign === \"top\") {\n y -= (this.size.height - this.size.labelHeight) / 2;\n }\n if (this.fontOptions.valign === \"bottom\") {\n y += (this.size.height - this.size.labelHeight) / 2;\n }\n }\n\n // draw the text\n for (let i = 0; i < this.lineCount; i++) {\n const line = this.lines[i];\n if (line && line.blocks) {\n let width = 0;\n if (this.isEdgeLabel || this.fontOptions.align === \"center\") {\n width += (this.size.width - line.width) / 2;\n } else if (this.fontOptions.align === \"right\") {\n width += this.size.width - line.width;\n }\n for (let j = 0; j < line.blocks.length; j++) {\n const block = line.blocks[j];\n ctx.font = block.font;\n const [fontColor, strokeColor] = this._getColor(\n block.color,\n viewFontSize,\n block.strokeColor\n );\n if (block.strokeWidth > 0) {\n ctx.lineWidth = block.strokeWidth;\n ctx.strokeStyle = strokeColor;\n ctx.lineJoin = \"round\";\n }\n ctx.fillStyle = fontColor;\n\n if (block.strokeWidth > 0) {\n ctx.strokeText(block.text, x + width, y + block.vadjust);\n }\n ctx.fillText(block.text, x + width, y + block.vadjust);\n width += block.width;\n }\n y += line.height;\n }\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x\n * @param {number} y\n * @param {string} baseline\n * @returns {Array.}\n * @private\n */\n _setAlignment(ctx, x, y, baseline) {\n // check for label alignment (for edges)\n // TODO: make alignment for nodes\n if (\n this.isEdgeLabel &&\n this.fontOptions.align !== \"horizontal\" &&\n this.pointToSelf === false\n ) {\n x = 0;\n y = 0;\n\n const lineMargin = 2;\n if (this.fontOptions.align === \"top\") {\n ctx.textBaseline = \"alphabetic\";\n y -= 2 * lineMargin; // distance from edge, required because we use alphabetic. Alphabetic has less difference between browsers\n } else if (this.fontOptions.align === \"bottom\") {\n ctx.textBaseline = \"hanging\";\n y += 2 * lineMargin; // distance from edge, required because we use hanging. Hanging has less difference between browsers\n } else {\n ctx.textBaseline = \"middle\";\n }\n } else {\n ctx.textBaseline = baseline;\n }\n return [x, y];\n }\n\n /**\n * fade in when relative scale is between threshold and threshold - 1.\n * If the relative scale would be smaller than threshold -1 the draw function would have returned before coming here.\n *\n * @param {string} color The font color to use\n * @param {number} viewFontSize\n * @param {string} initialStrokeColor\n * @returns {Array.} An array containing the font color and stroke color\n * @private\n */\n _getColor(color, viewFontSize, initialStrokeColor) {\n let fontColor = color || \"#000000\";\n let strokeColor = initialStrokeColor || \"#ffffff\";\n if (viewFontSize <= this.elementOptions.scaling.label.drawThreshold) {\n const opacity = Math.max(\n 0,\n Math.min(\n 1,\n 1 - (this.elementOptions.scaling.label.drawThreshold - viewFontSize)\n )\n );\n fontColor = overrideOpacity(fontColor, opacity);\n strokeColor = overrideOpacity(strokeColor, opacity);\n }\n return [fontColor, strokeColor];\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n * @returns {{width: number, height: number}}\n */\n getTextSize(ctx, selected = false, hover = false) {\n this._processLabel(ctx, selected, hover);\n return {\n width: this.size.width,\n height: this.size.height,\n lineCount: this.lineCount,\n };\n }\n\n /**\n * Get the current dimensions of the label\n *\n * @returns {rect}\n */\n getSize() {\n const lineMargin = 2;\n let x = this.size.left; // default values which might be overridden below\n let y = this.size.top - 0.5 * lineMargin; // idem\n\n if (this.isEdgeLabel) {\n const x2 = -this.size.width * 0.5;\n\n switch (this.fontOptions.align) {\n case \"middle\":\n x = x2;\n y = -this.size.height * 0.5;\n break;\n case \"top\":\n x = x2;\n y = -(this.size.height + lineMargin);\n break;\n case \"bottom\":\n x = x2;\n y = lineMargin;\n break;\n }\n }\n\n const ret = {\n left: x,\n top: y,\n width: this.size.width,\n height: this.size.height,\n };\n\n return ret;\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {number} [x=0]\n * @param {number} [y=0]\n * @param {'middle'|'hanging'} [baseline='middle']\n */\n calculateLabelSize(ctx, selected, hover, x = 0, y = 0, baseline = \"middle\") {\n this._processLabel(ctx, selected, hover);\n this.size.left = x - this.size.width * 0.5;\n this.size.top = y - this.size.height * 0.5;\n this.size.yLine = y + (1 - this.lineCount) * 0.5 * this.fontOptions.size;\n if (baseline === \"hanging\") {\n this.size.top += 0.5 * this.fontOptions.size;\n this.size.top += 4; // distance from node, required because we use hanging. Hanging has less difference between browsers\n this.size.yLine += 4; // distance from node\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {string} mod\n * @returns {{color, size, face, mod, vadjust, strokeWidth: *, strokeColor: (*|string|allOptions.edges.font.strokeColor|{string}|allOptions.nodes.font.strokeColor|Array)}}\n */\n getFormattingValues(ctx, selected, hover, mod) {\n const getValue = function (fontOptions, mod, option) {\n if (mod === \"normal\") {\n if (option === \"mod\") return \"\";\n return fontOptions[option];\n }\n\n if (fontOptions[mod][option] !== undefined) {\n // Grumbl leaving out test on undefined equals false for \"\"\n return fontOptions[mod][option];\n } else {\n // Take from parent font option\n return fontOptions[option];\n }\n };\n\n const values = {\n color: getValue(this.fontOptions, mod, \"color\"),\n size: getValue(this.fontOptions, mod, \"size\"),\n face: getValue(this.fontOptions, mod, \"face\"),\n mod: getValue(this.fontOptions, mod, \"mod\"),\n vadjust: getValue(this.fontOptions, mod, \"vadjust\"),\n strokeWidth: this.fontOptions.strokeWidth,\n strokeColor: this.fontOptions.strokeColor,\n };\n if (selected || hover) {\n if (\n mod === \"normal\" &&\n this.fontOptions.chooser === true &&\n this.elementOptions.labelHighlightBold\n ) {\n values.mod = \"bold\";\n } else {\n if (typeof this.fontOptions.chooser === \"function\") {\n this.fontOptions.chooser(\n values,\n this.elementOptions.id,\n selected,\n hover\n );\n }\n }\n }\n\n let fontString = \"\";\n if (values.mod !== undefined && values.mod !== \"\") {\n // safeguard for undefined - this happened\n fontString += values.mod + \" \";\n }\n fontString += values.size + \"px \" + values.face;\n\n ctx.font = fontString.replace(/\"/g, \"\");\n values.font = ctx.font;\n values.height = values.size;\n return values;\n }\n\n /**\n *\n * @param {boolean} selected\n * @param {boolean} hover\n * @returns {boolean}\n */\n differentState(selected, hover) {\n return selected !== this.selectedState || hover !== this.hoverState;\n }\n\n /**\n * This explodes the passed text into lines and determines the width, height and number of lines.\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {string} inText the text to explode\n * @returns {{width, height, lines}|*}\n * @private\n */\n _processLabelText(ctx, selected, hover, inText) {\n const splitter = new LabelSplitter(ctx, this, selected, hover);\n return splitter.process(inText);\n }\n\n /**\n * This explodes the label string into lines and sets the width, height and number of lines.\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n * @private\n */\n _processLabel(ctx, selected, hover) {\n if (this.labelDirty === false && !this.differentState(selected, hover))\n return;\n\n const state = this._processLabelText(\n ctx,\n selected,\n hover,\n this.elementOptions.label\n );\n\n if (this.fontOptions.minWdt > 0 && state.width < this.fontOptions.minWdt) {\n state.width = this.fontOptions.minWdt;\n }\n\n this.size.labelHeight = state.height;\n if (this.fontOptions.minHgt > 0 && state.height < this.fontOptions.minHgt) {\n state.height = this.fontOptions.minHgt;\n }\n\n this.lines = state.lines;\n this.lineCount = state.lines.length;\n this.size.width = state.width;\n this.size.height = state.height;\n this.selectedState = selected;\n this.hoverState = hover;\n\n this.labelDirty = false;\n }\n\n /**\n * Check if this label is visible\n *\n * @returns {boolean} true if this label will be show, false otherwise\n */\n visible() {\n if (\n this.size.width === 0 ||\n this.size.height === 0 ||\n this.elementOptions.label === undefined\n ) {\n return false; // nothing to display\n }\n\n const viewFontSize = this.fontOptions.size * this.body.view.scale;\n if (viewFontSize < this.elementOptions.scaling.label.drawThreshold - 1) {\n return false; // Too small or too far away to show\n }\n\n return true;\n }\n}\n\nexport default Label;\n","/**\n * The Base class for all Nodes.\n */\nclass NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n this.body = body;\n this.labelModule = labelModule;\n this.setOptions(options);\n this.top = undefined;\n this.left = undefined;\n this.height = undefined;\n this.width = undefined;\n this.radius = undefined;\n this.margin = undefined;\n this.refreshNeeded = true;\n this.boundingBox = { top: 0, left: 0, right: 0, bottom: 0 };\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n }\n\n /**\n *\n * @param {Label} labelModule\n * @private\n */\n _setMargins(labelModule) {\n this.margin = {};\n if (this.options.margin) {\n if (typeof this.options.margin == \"object\") {\n this.margin.top = this.options.margin.top;\n this.margin.right = this.options.margin.right;\n this.margin.bottom = this.options.margin.bottom;\n this.margin.left = this.options.margin.left;\n } else {\n this.margin.top = this.options.margin;\n this.margin.right = this.options.margin;\n this.margin.bottom = this.options.margin;\n this.margin.left = this.options.margin;\n }\n }\n labelModule.adjustSizes(this.margin);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n * @private\n */\n _distanceToBorder(ctx, angle) {\n const borderWidth = this.options.borderWidth;\n if (ctx) {\n this.resize(ctx);\n }\n return (\n Math.min(\n Math.abs(this.width / 2 / Math.cos(angle)),\n Math.abs(this.height / 2 / Math.sin(angle))\n ) + borderWidth\n );\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n enableShadow(ctx, values) {\n if (values.shadow) {\n ctx.shadowColor = values.shadowColor;\n ctx.shadowBlur = values.shadowSize;\n ctx.shadowOffsetX = values.shadowX;\n ctx.shadowOffsetY = values.shadowY;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n disableShadow(ctx, values) {\n if (values.shadow) {\n ctx.shadowColor = \"rgba(0,0,0,0)\";\n ctx.shadowBlur = 0;\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n enableBorderDashes(ctx, values) {\n if (values.borderDashes !== false) {\n if (ctx.setLineDash !== undefined) {\n let dashes = values.borderDashes;\n if (dashes === true) {\n dashes = [5, 15];\n }\n ctx.setLineDash(dashes);\n } else {\n console.warn(\n \"setLineDash is not supported in this browser. The dashed borders cannot be used.\"\n );\n this.options.shapeProperties.borderDashes = false;\n values.borderDashes = false;\n }\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n disableBorderDashes(ctx, values) {\n if (values.borderDashes !== false) {\n if (ctx.setLineDash !== undefined) {\n ctx.setLineDash([0]);\n } else {\n console.warn(\n \"setLineDash is not supported in this browser. The dashed borders cannot be used.\"\n );\n this.options.shapeProperties.borderDashes = false;\n values.borderDashes = false;\n }\n }\n }\n\n /**\n * Determine if the shape of a node needs to be recalculated.\n *\n * @param {boolean} selected\n * @param {boolean} hover\n * @returns {boolean}\n * @protected\n */\n needsRefresh(selected, hover) {\n if (this.refreshNeeded === true) {\n // This is probably not the best location to reset this member.\n // However, in the current logic, it is the most convenient one.\n this.refreshNeeded = false;\n return true;\n }\n\n return (\n this.width === undefined ||\n this.labelModule.differentState(selected, hover)\n );\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n initContextForDraw(ctx, values) {\n const borderWidth = values.borderWidth / this.body.view.scale;\n\n ctx.lineWidth = Math.min(this.width, borderWidth);\n ctx.strokeStyle = values.borderColor;\n ctx.fillStyle = values.color;\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n performStroke(ctx, values) {\n const borderWidth = values.borderWidth / this.body.view.scale;\n\n //draw dashed border if enabled, save and restore is required for firefox not to crash on unix.\n ctx.save();\n // if borders are zero width, they will be drawn with width 1 by default. This prevents that\n if (borderWidth > 0) {\n this.enableBorderDashes(ctx, values);\n //draw the border\n ctx.stroke();\n //disable dashed border for other elements\n this.disableBorderDashes(ctx, values);\n }\n ctx.restore();\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n performFill(ctx, values) {\n ctx.save();\n ctx.fillStyle = values.color;\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n // draw the background\n ctx.fill();\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n\n ctx.restore();\n this.performStroke(ctx, values);\n }\n\n /**\n *\n * @param {number} margin\n * @private\n */\n _addBoundingBoxMargin(margin) {\n this.boundingBox.left -= margin;\n this.boundingBox.top -= margin;\n this.boundingBox.bottom += margin;\n this.boundingBox.right += margin;\n }\n\n /**\n * Actual implementation of this method call.\n *\n * Doing it like this makes it easier to override\n * in the child classes.\n *\n * @param {number} x width\n * @param {number} y height\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n * @private\n */\n _updateBoundingBox(x, y, ctx, selected, hover) {\n if (ctx !== undefined) {\n this.resize(ctx, selected, hover);\n }\n\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n this.boundingBox.left = this.left;\n this.boundingBox.top = this.top;\n this.boundingBox.bottom = this.top + this.height;\n this.boundingBox.right = this.left + this.width;\n }\n\n /**\n * Default implementation of this method call.\n * This acts as a stub which can be overridden.\n *\n * @param {number} x width\n * @param {number} y height\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n */\n updateBoundingBox(x, y, ctx, selected, hover) {\n this._updateBoundingBox(x, y, ctx, selected, hover);\n }\n\n /**\n * Determine the dimensions to use for nodes with an internal label\n *\n * Currently, these are: Circle, Ellipse, Database, Box\n * The other nodes have external labels, and will not call this method\n *\n * If there is no label, decent default values are supplied.\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n * @returns {{width:number, height:number}}\n */\n getDimensionsFromLabel(ctx, selected, hover) {\n // NOTE: previously 'textSize' was not put in 'this' for Ellipse\n // TODO: examine the consequences.\n this.textSize = this.labelModule.getTextSize(ctx, selected, hover);\n let width = this.textSize.width;\n let height = this.textSize.height;\n\n const DEFAULT_SIZE = 14;\n if (width === 0) {\n // This happens when there is no label text set\n width = DEFAULT_SIZE; // use a decent default\n height = DEFAULT_SIZE; // if width zero, then height also always zero\n }\n\n return { width: width, height: height };\n }\n}\n\nexport default NodeBase;\n","\"use strict\";\n\nimport NodeBase from \"../util/NodeBase\";\nimport { drawRoundRect } from \"../util/shapes\";\n\n/**\n * A Box Node/Cluster shape.\n *\n * @augments NodeBase\n */\nclass Box extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n this._setMargins(labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n */\n resize(ctx, selected = this.selected, hover = this.hover) {\n if (this.needsRefresh(selected, hover)) {\n const dimensions = this.getDimensionsFromLabel(ctx, selected, hover);\n\n this.width = dimensions.width + this.margin.right + this.margin.left;\n this.height = dimensions.height + this.margin.top + this.margin.bottom;\n this.radius = this.width / 2;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover);\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n this.initContextForDraw(ctx, values);\n drawRoundRect(\n ctx,\n this.left,\n this.top,\n this.width,\n this.height,\n values.borderRadius\n );\n this.performFill(ctx, values);\n\n this.updateBoundingBox(x, y, ctx, selected, hover);\n this.labelModule.draw(\n ctx,\n this.left + this.textSize.width / 2 + this.margin.left,\n this.top + this.textSize.height / 2 + this.margin.top,\n selected,\n hover\n );\n }\n\n /**\n *\n * @param {number} x width\n * @param {number} y height\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n */\n updateBoundingBox(x, y, ctx, selected, hover) {\n this._updateBoundingBox(x, y, ctx, selected, hover);\n\n const borderRadius = this.options.shapeProperties.borderRadius; // only effective for box\n this._addBoundingBoxMargin(borderRadius);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n if (ctx) {\n this.resize(ctx);\n }\n const borderWidth = this.options.borderWidth;\n\n return (\n Math.min(\n Math.abs(this.width / 2 / Math.cos(angle)),\n Math.abs(this.height / 2 / Math.sin(angle))\n ) + borderWidth\n );\n }\n}\n\nexport default Box;\n","import NodeBase from \"./NodeBase\";\nimport { drawCircle } from \"./shapes\";\n\n/**\n * NOTE: This is a bad base class\n *\n * Child classes are:\n *\n * Image - uses *only* image methods\n * Circle - uses *only* _drawRawCircle\n * CircleImage - uses all\n *\n * TODO: Refactor, move _drawRawCircle to different module, derive Circle from NodeBase\n * Rename this to ImageBase\n * Consolidate common code in Image and CircleImage to base class\n *\n * @augments NodeBase\n */\nclass CircleImageBase extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n this.labelOffset = 0;\n this.selected = false;\n }\n\n /**\n *\n * @param {object} options\n * @param {object} [imageObj]\n * @param {object} [imageObjAlt]\n */\n setOptions(options, imageObj, imageObjAlt) {\n this.options = options;\n\n if (!(imageObj === undefined && imageObjAlt === undefined)) {\n this.setImages(imageObj, imageObjAlt);\n }\n }\n\n /**\n * Set the images for this node.\n *\n * The images can be updated after the initial setting of options;\n * therefore, this method needs to be reentrant.\n *\n * For correct working in error cases, it is necessary to properly set\n * field 'nodes.brokenImage' in the options.\n *\n * @param {Image} imageObj required; main image to show for this node\n * @param {Image|undefined} imageObjAlt optional; image to show when node is selected\n */\n setImages(imageObj, imageObjAlt) {\n if (imageObjAlt && this.selected) {\n this.imageObj = imageObjAlt;\n this.imageObjAlt = imageObj;\n } else {\n this.imageObj = imageObj;\n this.imageObjAlt = imageObjAlt;\n }\n }\n\n /**\n * Set selection and switch between the base and the selected image.\n *\n * Do the switch only if imageObjAlt exists.\n *\n * @param {boolean} selected value of new selected state for current node\n */\n switchImages(selected) {\n const selection_changed =\n (selected && !this.selected) || (!selected && this.selected);\n this.selected = selected; // Remember new selection\n\n if (this.imageObjAlt !== undefined && selection_changed) {\n const imageTmp = this.imageObj;\n this.imageObj = this.imageObjAlt;\n this.imageObjAlt = imageTmp;\n }\n }\n\n /**\n * Returns Image Padding from node options\n *\n * @returns {{top: number,left: number,bottom: number,right: number}} image padding inside this shape\n * @private\n */\n _getImagePadding() {\n const imgPadding = { top: 0, right: 0, bottom: 0, left: 0 };\n if (this.options.imagePadding) {\n const optImgPadding = this.options.imagePadding;\n if (typeof optImgPadding == \"object\") {\n imgPadding.top = optImgPadding.top;\n imgPadding.right = optImgPadding.right;\n imgPadding.bottom = optImgPadding.bottom;\n imgPadding.left = optImgPadding.left;\n } else {\n imgPadding.top = optImgPadding;\n imgPadding.right = optImgPadding;\n imgPadding.bottom = optImgPadding;\n imgPadding.left = optImgPadding;\n }\n }\n\n return imgPadding;\n }\n\n /**\n * Adjust the node dimensions for a loaded image.\n *\n * Pre: this.imageObj is valid\n */\n _resizeImage() {\n let width, height;\n\n if (this.options.shapeProperties.useImageSize === false) {\n // Use the size property\n let ratio_width = 1;\n let ratio_height = 1;\n\n // Only calculate the proper ratio if both width and height not zero\n if (this.imageObj.width && this.imageObj.height) {\n if (this.imageObj.width > this.imageObj.height) {\n ratio_width = this.imageObj.width / this.imageObj.height;\n } else {\n ratio_height = this.imageObj.height / this.imageObj.width;\n }\n }\n\n width = this.options.size * 2 * ratio_width;\n height = this.options.size * 2 * ratio_height;\n } else {\n // Use the image size with image padding\n const imgPadding = this._getImagePadding();\n width = this.imageObj.width + imgPadding.left + imgPadding.right;\n height = this.imageObj.height + imgPadding.top + imgPadding.bottom;\n }\n\n this.width = width;\n this.height = height;\n this.radius = 0.5 * this.width;\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {ArrowOptions} values\n * @private\n */\n _drawRawCircle(ctx, x, y, values) {\n this.initContextForDraw(ctx, values);\n drawCircle(ctx, x, y, values.size);\n this.performFill(ctx, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n * @private\n */\n _drawImageAtPosition(ctx, values) {\n if (this.imageObj.width != 0) {\n // draw the image\n ctx.globalAlpha = values.opacity !== undefined ? values.opacity : 1;\n\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n\n let factor = 1;\n if (this.options.shapeProperties.interpolation === true) {\n factor = this.imageObj.width / this.width / this.body.view.scale;\n }\n\n const imgPadding = this._getImagePadding();\n\n const imgPosLeft = this.left + imgPadding.left;\n const imgPosTop = this.top + imgPadding.top;\n const imgWidth = this.width - imgPadding.left - imgPadding.right;\n const imgHeight = this.height - imgPadding.top - imgPadding.bottom;\n this.imageObj.drawImageAtPosition(\n ctx,\n factor,\n imgPosLeft,\n imgPosTop,\n imgWidth,\n imgHeight\n );\n\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @private\n */\n _drawImageLabel(ctx, x, y, selected, hover) {\n let offset = 0;\n\n if (this.height !== undefined) {\n offset = this.height * 0.5;\n const labelDimensions = this.labelModule.getTextSize(\n ctx,\n selected,\n hover\n );\n if (labelDimensions.lineCount >= 1) {\n offset += labelDimensions.height / 2;\n }\n }\n\n const yLabel = y + offset;\n\n if (this.options.label) {\n this.labelOffset = offset;\n }\n this.labelModule.draw(ctx, x, yLabel, selected, hover, \"hanging\");\n }\n}\n\nexport default CircleImageBase;\n","\"use strict\";\n\nimport CircleImageBase from \"../util/CircleImageBase\";\n\n/**\n * A Circle Node/Cluster shape.\n *\n * @augments CircleImageBase\n */\nclass Circle extends CircleImageBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n this._setMargins(labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n */\n resize(ctx, selected = this.selected, hover = this.hover) {\n if (this.needsRefresh(selected, hover)) {\n const dimensions = this.getDimensionsFromLabel(ctx, selected, hover);\n\n const diameter = Math.max(\n dimensions.width + this.margin.right + this.margin.left,\n dimensions.height + this.margin.top + this.margin.bottom\n );\n\n this.options.size = diameter / 2; // NOTE: this size field only set here, not in Ellipse, Database, Box\n this.width = diameter;\n this.height = diameter;\n this.radius = this.width / 2;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover);\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n this._drawRawCircle(ctx, x, y, values);\n\n this.updateBoundingBox(x, y);\n this.labelModule.draw(\n ctx,\n this.left + this.textSize.width / 2 + this.margin.left,\n y,\n selected,\n hover\n );\n }\n\n /**\n *\n * @param {number} x width\n * @param {number} y height\n */\n updateBoundingBox(x, y) {\n this.boundingBox.top = y - this.options.size;\n this.boundingBox.left = x - this.options.size;\n this.boundingBox.right = x + this.options.size;\n this.boundingBox.bottom = y + this.options.size;\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @returns {number}\n */\n distanceToBorder(ctx) {\n if (ctx) {\n this.resize(ctx);\n }\n return this.width * 0.5;\n }\n}\n\nexport default Circle;\n","\"use strict\";\n\nimport CircleImageBase from \"../util/CircleImageBase\";\n\n/**\n * A CircularImage Node/Cluster shape.\n *\n * @augments CircleImageBase\n */\nclass CircularImage extends CircleImageBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n * @param {Image} imageObj\n * @param {Image} imageObjAlt\n */\n constructor(options, body, labelModule, imageObj, imageObjAlt) {\n super(options, body, labelModule);\n\n this.setImages(imageObj, imageObjAlt);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n */\n resize(ctx, selected = this.selected, hover = this.hover) {\n const imageAbsent =\n this.imageObj.src === undefined ||\n this.imageObj.width === undefined ||\n this.imageObj.height === undefined;\n\n if (imageAbsent) {\n const diameter = this.options.size * 2;\n this.width = diameter;\n this.height = diameter;\n this.radius = 0.5 * this.width;\n return;\n }\n\n // At this point, an image is present, i.e. this.imageObj is valid.\n if (this.needsRefresh(selected, hover)) {\n this._resizeImage();\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n this.switchImages(selected);\n this.resize();\n\n let labelX = x,\n labelY = y;\n\n if (this.options.shapeProperties.coordinateOrigin === \"top-left\") {\n this.left = x;\n this.top = y;\n labelX += this.width / 2;\n labelY += this.height / 2;\n } else {\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n }\n\n // draw the background circle. IMPORTANT: the stroke in this method is used by the clip method below.\n this._drawRawCircle(ctx, labelX, labelY, values);\n\n // now we draw in the circle, we save so we can revert the clip operation after drawing.\n ctx.save();\n // clip is used to use the stroke in drawRawCircle as an area that we can draw in.\n ctx.clip();\n // draw the image\n this._drawImageAtPosition(ctx, values);\n // restore so we can again draw on the full canvas\n ctx.restore();\n\n this._drawImageLabel(ctx, labelX, labelY, selected, hover);\n\n this.updateBoundingBox(x, y);\n }\n\n // TODO: compare with Circle.updateBoundingBox(), consolidate? More stuff is happening here\n /**\n *\n * @param {number} x width\n * @param {number} y height\n */\n updateBoundingBox(x, y) {\n if (this.options.shapeProperties.coordinateOrigin === \"top-left\") {\n this.boundingBox.top = y;\n this.boundingBox.left = x;\n this.boundingBox.right = x + this.options.size * 2;\n this.boundingBox.bottom = y + this.options.size * 2;\n } else {\n this.boundingBox.top = y - this.options.size;\n this.boundingBox.left = x - this.options.size;\n this.boundingBox.right = x + this.options.size;\n this.boundingBox.bottom = y + this.options.size;\n }\n\n // TODO: compare with Image.updateBoundingBox(), consolidate?\n this.boundingBox.left = Math.min(\n this.boundingBox.left,\n this.labelModule.size.left\n );\n this.boundingBox.right = Math.max(\n this.boundingBox.right,\n this.labelModule.size.left + this.labelModule.size.width\n );\n this.boundingBox.bottom = Math.max(\n this.boundingBox.bottom,\n this.boundingBox.bottom + this.labelOffset\n );\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @returns {number}\n */\n distanceToBorder(ctx) {\n if (ctx) {\n this.resize(ctx);\n }\n return this.width * 0.5;\n }\n}\n\nexport default CircularImage;\n","import NodeBase from \"../util/NodeBase\";\nimport { getShape } from \"./shapes\";\n\n/**\n * Base class for constructing Node/Cluster Shapes.\n *\n * @augments NodeBase\n */\nclass ShapeBase extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n * @param {object} [values={size: this.options.size}]\n */\n resize(\n ctx,\n selected = this.selected,\n hover = this.hover,\n values = { size: this.options.size }\n ) {\n if (this.needsRefresh(selected, hover)) {\n this.labelModule.getTextSize(ctx, selected, hover);\n const size = 2 * values.size;\n this.width = this.customSizeWidth ?? size;\n this.height = this.customSizeHeight ?? size;\n this.radius = 0.5 * this.width;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {string} shape\n * @param {number} sizeMultiplier - Unused! TODO: Remove next major release\n * @param {number} x\n * @param {number} y\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @private\n * @returns {object} Callbacks to draw later on higher layers.\n */\n _drawShape(ctx, shape, sizeMultiplier, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover, values);\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n this.initContextForDraw(ctx, values);\n getShape(shape)(ctx, x, y, values.size);\n this.performFill(ctx, values);\n\n if (this.options.icon !== undefined) {\n if (this.options.icon.code !== undefined) {\n ctx.font =\n (selected ? \"bold \" : \"\") +\n this.height / 2 +\n \"px \" +\n (this.options.icon.face || \"FontAwesome\");\n ctx.fillStyle = this.options.icon.color || \"black\";\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(this.options.icon.code, x, y);\n }\n }\n\n return {\n drawExternalLabel: () => {\n if (this.options.label !== undefined) {\n // Need to call following here in order to ensure value for\n // `this.labelModule.size.height`.\n this.labelModule.calculateLabelSize(\n ctx,\n selected,\n hover,\n x,\n y,\n \"hanging\"\n );\n const yLabel =\n y + 0.5 * this.height + 0.5 * this.labelModule.size.height;\n this.labelModule.draw(ctx, x, yLabel, selected, hover, \"hanging\");\n }\n\n this.updateBoundingBox(x, y);\n },\n };\n }\n\n /**\n *\n * @param {number} x\n * @param {number} y\n */\n updateBoundingBox(x, y) {\n this.boundingBox.top = y - this.options.size;\n this.boundingBox.left = x - this.options.size;\n this.boundingBox.right = x + this.options.size;\n this.boundingBox.bottom = y + this.options.size;\n\n if (this.options.label !== undefined && this.labelModule.size.width > 0) {\n this.boundingBox.left = Math.min(\n this.boundingBox.left,\n this.labelModule.size.left\n );\n this.boundingBox.right = Math.max(\n this.boundingBox.right,\n this.labelModule.size.left + this.labelModule.size.width\n );\n this.boundingBox.bottom = Math.max(\n this.boundingBox.bottom,\n this.boundingBox.bottom + this.labelModule.size.height\n );\n }\n }\n}\n\nexport default ShapeBase;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A CustomShape Node/Cluster shape.\n *\n * @augments ShapeBase\n */\nclass CustomShape extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n * @param {Function} ctxRenderer\n */\n constructor(options, body, labelModule, ctxRenderer) {\n super(options, body, labelModule, ctxRenderer);\n this.ctxRenderer = ctxRenderer;\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on different layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover, values);\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n // Guard right away because someone may just draw in the function itself.\n ctx.save();\n const drawLater = this.ctxRenderer({\n ctx,\n id: this.options.id,\n x,\n y,\n state: { selected, hover },\n style: { ...values },\n label: this.options.label,\n });\n // Render the node shape bellow arrows.\n if (drawLater.drawNode != null) {\n drawLater.drawNode();\n }\n ctx.restore();\n\n if (drawLater.drawExternalLabel) {\n // Guard the external label (above arrows) drawing function.\n const drawExternalLabel = drawLater.drawExternalLabel;\n drawLater.drawExternalLabel = () => {\n ctx.save();\n drawExternalLabel();\n ctx.restore();\n };\n }\n\n if (drawLater.nodeDimensions) {\n this.customSizeWidth = drawLater.nodeDimensions.width;\n this.customSizeHeight = drawLater.nodeDimensions.height;\n }\n\n return drawLater;\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default CustomShape;\n","\"use strict\";\n\nimport NodeBase from \"../util/NodeBase\";\nimport { drawDatabase } from \"../util/shapes\";\n\n/**\n * A Database Node/Cluster shape.\n *\n * @augments NodeBase\n */\nclass Database extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n this._setMargins(labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n */\n resize(ctx, selected, hover) {\n if (this.needsRefresh(selected, hover)) {\n const dimensions = this.getDimensionsFromLabel(ctx, selected, hover);\n const size = dimensions.width + this.margin.right + this.margin.left;\n\n this.width = size;\n this.height = size;\n this.radius = this.width / 2;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover);\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n this.initContextForDraw(ctx, values);\n drawDatabase(\n ctx,\n x - this.width / 2,\n y - this.height / 2,\n this.width,\n this.height\n );\n this.performFill(ctx, values);\n\n this.updateBoundingBox(x, y, ctx, selected, hover);\n this.labelModule.draw(\n ctx,\n this.left + this.textSize.width / 2 + this.margin.left,\n this.top + this.textSize.height / 2 + this.margin.top,\n selected,\n hover\n );\n }\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Database;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A Diamond Node/Cluster shape.\n *\n * @augments ShapeBase\n */\nclass Diamond extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(ctx, \"diamond\", 4, x, y, selected, hover, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Diamond;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A Dot Node/Cluster shape.\n *\n * @augments ShapeBase\n */\nclass Dot extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(ctx, \"circle\", 2, x, y, selected, hover, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @returns {number}\n */\n distanceToBorder(ctx) {\n if (ctx) {\n this.resize(ctx);\n }\n return this.options.size;\n }\n}\n\nexport default Dot;\n","\"use strict\";\n\nimport NodeBase from \"../util/NodeBase\";\nimport { drawEllipse } from \"../util/shapes\";\n\n/**\n * Am Ellipse Node/Cluster shape.\n *\n * @augments NodeBase\n */\nclass Ellipse extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n */\n resize(ctx, selected = this.selected, hover = this.hover) {\n if (this.needsRefresh(selected, hover)) {\n const dimensions = this.getDimensionsFromLabel(ctx, selected, hover);\n\n this.height = dimensions.height * 2;\n this.width = dimensions.width + dimensions.height;\n this.radius = 0.5 * this.width;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover);\n this.left = x - this.width * 0.5;\n this.top = y - this.height * 0.5;\n\n this.initContextForDraw(ctx, values);\n drawEllipse(ctx, this.left, this.top, this.width, this.height);\n this.performFill(ctx, values);\n\n this.updateBoundingBox(x, y, ctx, selected, hover);\n this.labelModule.draw(ctx, x, y, selected, hover);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n if (ctx) {\n this.resize(ctx);\n }\n const a = this.width * 0.5;\n const b = this.height * 0.5;\n const w = Math.sin(angle) * a;\n const h = Math.cos(angle) * b;\n return (a * b) / Math.sqrt(w * w + h * h);\n }\n}\n\nexport default Ellipse;\n","\"use strict\";\n\nimport NodeBase from \"../util/NodeBase\";\n\n/**\n * An icon replacement for the default Node shape.\n *\n * @augments NodeBase\n */\nclass Icon extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n this._setMargins(labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx - Unused.\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n */\n resize(ctx, selected, hover) {\n if (this.needsRefresh(selected, hover)) {\n this.iconSize = {\n width: Number(this.options.icon.size),\n height: Number(this.options.icon.size),\n };\n this.width = this.iconSize.width + this.margin.right + this.margin.left;\n this.height = this.iconSize.height + this.margin.top + this.margin.bottom;\n this.radius = 0.5 * this.width;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover);\n this.options.icon.size = this.options.icon.size || 50;\n\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n this._icon(ctx, x, y, selected, hover, values);\n\n return {\n drawExternalLabel: () => {\n if (this.options.label !== undefined) {\n const iconTextSpacing = 5;\n this.labelModule.draw(\n ctx,\n this.left + this.iconSize.width / 2 + this.margin.left,\n y + this.height / 2 + iconTextSpacing,\n selected\n );\n }\n\n this.updateBoundingBox(x, y);\n },\n };\n }\n\n /**\n *\n * @param {number} x\n * @param {number} y\n */\n updateBoundingBox(x, y) {\n this.boundingBox.top = y - this.options.icon.size * 0.5;\n this.boundingBox.left = x - this.options.icon.size * 0.5;\n this.boundingBox.right = x + this.options.icon.size * 0.5;\n this.boundingBox.bottom = y + this.options.icon.size * 0.5;\n\n if (this.options.label !== undefined && this.labelModule.size.width > 0) {\n const iconTextSpacing = 5;\n this.boundingBox.left = Math.min(\n this.boundingBox.left,\n this.labelModule.size.left\n );\n this.boundingBox.right = Math.max(\n this.boundingBox.right,\n this.labelModule.size.left + this.labelModule.size.width\n );\n this.boundingBox.bottom = Math.max(\n this.boundingBox.bottom,\n this.boundingBox.bottom + this.labelModule.size.height + iconTextSpacing\n );\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover - Unused\n * @param {ArrowOptions} values\n */\n _icon(ctx, x, y, selected, hover, values) {\n const iconSize = Number(this.options.icon.size);\n\n if (this.options.icon.code !== undefined) {\n ctx.font = [\n this.options.icon.weight != null\n ? this.options.icon.weight\n : selected\n ? \"bold\"\n : \"\",\n // If the weight is forced (for example to make Font Awesome 5 work\n // properly) substitute slightly bigger size for bold font face.\n (this.options.icon.weight != null && selected ? 5 : 0) +\n iconSize +\n \"px\",\n this.options.icon.face,\n ].join(\" \");\n\n // draw icon\n ctx.fillStyle = this.options.icon.color || \"black\";\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n ctx.fillText(this.options.icon.code, x, y);\n\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n } else {\n console.error(\n \"When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.\"\n );\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Icon;\n","\"use strict\";\n\nimport CircleImageBase from \"../util/CircleImageBase\";\nimport { overrideOpacity } from \"vis-util/esnext\";\n\n/**\n * An image-based replacement for the default Node shape.\n *\n * @augments CircleImageBase\n */\nclass Image extends CircleImageBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n * @param {Image} imageObj\n * @param {Image} imageObjAlt\n */\n constructor(options, body, labelModule, imageObj, imageObjAlt) {\n super(options, body, labelModule);\n\n this.setImages(imageObj, imageObjAlt);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx - Unused.\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n */\n resize(ctx, selected = this.selected, hover = this.hover) {\n const imageAbsent =\n this.imageObj.src === undefined ||\n this.imageObj.width === undefined ||\n this.imageObj.height === undefined;\n\n if (imageAbsent) {\n const side = this.options.size * 2;\n this.width = side;\n this.height = side;\n return;\n }\n\n if (this.needsRefresh(selected, hover)) {\n this._resizeImage();\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n ctx.save();\n this.switchImages(selected);\n this.resize();\n\n let labelX = x,\n labelY = y;\n\n if (this.options.shapeProperties.coordinateOrigin === \"top-left\") {\n this.left = x;\n this.top = y;\n labelX += this.width / 2;\n labelY += this.height / 2;\n } else {\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n }\n\n if (this.options.shapeProperties.useBorderWithImage === true) {\n const neutralborderWidth = this.options.borderWidth;\n const selectionLineWidth =\n this.options.borderWidthSelected || 2 * this.options.borderWidth;\n const borderWidth =\n (selected ? selectionLineWidth : neutralborderWidth) /\n this.body.view.scale;\n ctx.lineWidth = Math.min(this.width, borderWidth);\n\n ctx.beginPath();\n let strokeStyle = selected\n ? this.options.color.highlight.border\n : hover\n ? this.options.color.hover.border\n : this.options.color.border;\n let fillStyle = selected\n ? this.options.color.highlight.background\n : hover\n ? this.options.color.hover.background\n : this.options.color.background;\n\n if (values.opacity !== undefined) {\n strokeStyle = overrideOpacity(strokeStyle, values.opacity);\n fillStyle = overrideOpacity(fillStyle, values.opacity);\n }\n // setup the line properties.\n ctx.strokeStyle = strokeStyle;\n\n // set a fillstyle\n ctx.fillStyle = fillStyle;\n\n // draw a rectangle to form the border around. This rectangle is filled so the opacity of a picture (in future vis releases?) can be used to tint the image\n ctx.rect(\n this.left - 0.5 * ctx.lineWidth,\n this.top - 0.5 * ctx.lineWidth,\n this.width + ctx.lineWidth,\n this.height + ctx.lineWidth\n );\n ctx.fill();\n\n this.performStroke(ctx, values);\n\n ctx.closePath();\n }\n\n this._drawImageAtPosition(ctx, values);\n\n this._drawImageLabel(ctx, labelX, labelY, selected, hover);\n\n this.updateBoundingBox(x, y);\n ctx.restore();\n }\n\n /**\n *\n * @param {number} x\n * @param {number} y\n */\n updateBoundingBox(x, y) {\n this.resize();\n\n if (this.options.shapeProperties.coordinateOrigin === \"top-left\") {\n this.left = x;\n this.top = y;\n } else {\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n }\n\n this.boundingBox.left = this.left;\n this.boundingBox.top = this.top;\n this.boundingBox.bottom = this.top + this.height;\n this.boundingBox.right = this.left + this.width;\n\n if (this.options.label !== undefined && this.labelModule.size.width > 0) {\n this.boundingBox.left = Math.min(\n this.boundingBox.left,\n this.labelModule.size.left\n );\n this.boundingBox.right = Math.max(\n this.boundingBox.right,\n this.labelModule.size.left + this.labelModule.size.width\n );\n this.boundingBox.bottom = Math.max(\n this.boundingBox.bottom,\n this.boundingBox.bottom + this.labelOffset\n );\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Image;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A Square Node/Cluster shape.\n *\n * @augments ShapeBase\n */\nclass Square extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(ctx, \"square\", 2, x, y, selected, hover, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Square;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A Hexagon Node/Cluster shape.\n *\n * @augments ShapeBase\n */\nclass Hexagon extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(ctx, \"hexagon\", 4, x, y, selected, hover, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Hexagon;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A Star Node/Cluster shape.\n *\n * @augments ShapeBase\n */\nclass Star extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(ctx, \"star\", 4, x, y, selected, hover, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Star;\n","\"use strict\";\n\nimport NodeBase from \"../util/NodeBase\";\n\n/**\n * A text-based replacement for the default Node shape.\n *\n * @augments NodeBase\n */\nclass Text extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n this._setMargins(labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n */\n resize(ctx, selected, hover) {\n if (this.needsRefresh(selected, hover)) {\n this.textSize = this.labelModule.getTextSize(ctx, selected, hover);\n this.width = this.textSize.width + this.margin.right + this.margin.left;\n this.height = this.textSize.height + this.margin.top + this.margin.bottom;\n this.radius = 0.5 * this.width;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover);\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n this.labelModule.draw(\n ctx,\n this.left + this.textSize.width / 2 + this.margin.left,\n this.top + this.textSize.height / 2 + this.margin.top,\n selected,\n hover\n );\n\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n\n this.updateBoundingBox(x, y, ctx, selected, hover);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Text;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A Triangle Node/Cluster shape.\n *\n * @augments ShapeBase\n */\nclass Triangle extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x\n * @param {number} y\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(ctx, \"triangle\", 3, x, y, selected, hover, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Triangle;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A downward facing Triangle Node/Cluster shape.\n *\n * @augments ShapeBase\n */\nclass TriangleDown extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x\n * @param {number} y\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(\n ctx,\n \"triangleDown\",\n 3,\n x,\n y,\n selected,\n hover,\n values\n );\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default TriangleDown;\n","import {\n VALIDATOR_PRINT_STYLE,\n bridgeObject,\n fillIfDefined,\n mergeOptions,\n overrideOpacity,\n parseColor,\n selectiveNotDeepExtend,\n} from \"vis-util/esnext\";\n\nimport Label from \"./shared/Label\";\nimport { choosify, pointInRect } from \"./shared/ComponentUtil\";\nimport Box from \"./nodes/shapes/Box\";\nimport Circle from \"./nodes/shapes/Circle\";\nimport CircularImage from \"./nodes/shapes/CircularImage\";\nimport CustomShape from \"./nodes/shapes/CustomShape\";\nimport Database from \"./nodes/shapes/Database\";\nimport Diamond from \"./nodes/shapes/Diamond\";\nimport Dot from \"./nodes/shapes/Dot\";\nimport Ellipse from \"./nodes/shapes/Ellipse\";\nimport Icon from \"./nodes/shapes/Icon\";\nimport Image from \"./nodes/shapes/Image\";\nimport Square from \"./nodes/shapes/Square\";\nimport Hexagon from \"./nodes/shapes/Hexagon\";\nimport Star from \"./nodes/shapes/Star\";\nimport Text from \"./nodes/shapes/Text\";\nimport Triangle from \"./nodes/shapes/Triangle\";\nimport TriangleDown from \"./nodes/shapes/TriangleDown\";\n\n/**\n * A node. A node can be connected to other nodes via one or multiple edges.\n */\nclass Node {\n /**\n *\n * @param {object} options An object containing options for the node. All\n * options are optional, except for the id.\n * {number} id Id of the node. Required\n * {string} label Text label for the node\n * {number} x Horizontal position of the node\n * {number} y Vertical position of the node\n * {string} shape Node shape\n * {string} image An image url\n * {string} title A title text, can be HTML\n * {anytype} group A group name or number\n * @param {object} body Shared state of current network instance\n * @param {Network.Images} imagelist A list with images. Only needed when the node has an image\n * @param {Groups} grouplist A list with groups. Needed for retrieving group options\n * @param {object} globalOptions Current global node options; these serve as defaults for the node instance\n * @param {object} defaultOptions Global default options for nodes; note that this is also the prototype\n * for parameter `globalOptions`.\n */\n constructor(\n options,\n body,\n imagelist,\n grouplist,\n globalOptions,\n defaultOptions\n ) {\n this.options = bridgeObject(globalOptions);\n this.globalOptions = globalOptions;\n this.defaultOptions = defaultOptions;\n this.body = body;\n\n this.edges = []; // all edges connected to this node\n\n // set defaults for the options\n this.id = undefined;\n this.imagelist = imagelist;\n this.grouplist = grouplist;\n\n // state options\n this.x = undefined;\n this.y = undefined;\n this.baseSize = this.options.size;\n this.baseFontSize = this.options.font.size;\n this.predefinedPosition = false; // used to check if initial fit should just take the range or approximate\n this.selected = false;\n this.hover = false;\n\n this.labelModule = new Label(\n this.body,\n this.options,\n false /* Not edge label */\n );\n this.setOptions(options);\n }\n\n /**\n * Attach a edge to the node\n *\n * @param {Edge} edge\n */\n attachEdge(edge) {\n if (this.edges.indexOf(edge) === -1) {\n this.edges.push(edge);\n }\n }\n\n /**\n * Detach a edge from the node\n *\n * @param {Edge} edge\n */\n detachEdge(edge) {\n const index = this.edges.indexOf(edge);\n if (index != -1) {\n this.edges.splice(index, 1);\n }\n }\n\n /**\n * Set or overwrite options for the node\n *\n * @param {object} options an object with options\n * @returns {null|boolean}\n */\n setOptions(options) {\n const currentShape = this.options.shape;\n\n if (!options) {\n return; // Note that the return value will be 'undefined'! This is OK.\n }\n\n // Save the color for later.\n // This is necessary in order to prevent local color from being overwritten by group color.\n // TODO: To prevent such workarounds the way options are handled should be rewritten from scratch.\n // This is not the only problem with current options handling.\n if (typeof options.color !== \"undefined\") {\n this._localColor = options.color;\n }\n\n // basic options\n if (options.id !== undefined) {\n this.id = options.id;\n }\n\n if (this.id === undefined) {\n throw new Error(\"Node must have an id\");\n }\n\n Node.checkMass(options, this.id);\n\n // set these options locally\n // clear x and y positions\n if (options.x !== undefined) {\n if (options.x === null) {\n this.x = undefined;\n this.predefinedPosition = false;\n } else {\n this.x = parseInt(options.x);\n this.predefinedPosition = true;\n }\n }\n if (options.y !== undefined) {\n if (options.y === null) {\n this.y = undefined;\n this.predefinedPosition = false;\n } else {\n this.y = parseInt(options.y);\n this.predefinedPosition = true;\n }\n }\n if (options.size !== undefined) {\n this.baseSize = options.size;\n }\n if (options.value !== undefined) {\n options.value = parseFloat(options.value);\n }\n\n // this transforms all shorthands into fully defined options\n Node.parseOptions(\n this.options,\n options,\n true,\n this.globalOptions,\n this.grouplist\n );\n\n const pile = [options, this.options, this.defaultOptions];\n this.chooser = choosify(\"node\", pile);\n\n this._load_images();\n this.updateLabelModule(options);\n\n // Need to set local opacity after `this.updateLabelModule(options);` because `this.updateLabelModule(options);` overrites local opacity with group opacity\n if (options.opacity !== undefined && Node.checkOpacity(options.opacity)) {\n this.options.opacity = options.opacity;\n }\n\n this.updateShape(currentShape);\n\n return options.hidden !== undefined || options.physics !== undefined;\n }\n\n /**\n * Load the images from the options, for the nodes that need them.\n *\n * Images are always loaded, even if they are not used in the current shape.\n * The user may switch to an image shape later on.\n *\n * @private\n */\n _load_images() {\n if (\n this.options.shape === \"circularImage\" ||\n this.options.shape === \"image\"\n ) {\n if (this.options.image === undefined) {\n throw new Error(\n \"Option image must be defined for node type '\" +\n this.options.shape +\n \"'\"\n );\n }\n }\n\n if (this.options.image === undefined) {\n return;\n }\n\n if (this.imagelist === undefined) {\n throw new Error(\"Internal Error: No images provided\");\n }\n\n if (typeof this.options.image === \"string\") {\n this.imageObj = this.imagelist.load(\n this.options.image,\n this.options.brokenImage,\n this.id\n );\n } else {\n if (this.options.image.unselected === undefined) {\n throw new Error(\"No unselected image provided\");\n }\n\n this.imageObj = this.imagelist.load(\n this.options.image.unselected,\n this.options.brokenImage,\n this.id\n );\n\n if (this.options.image.selected !== undefined) {\n this.imageObjAlt = this.imagelist.load(\n this.options.image.selected,\n this.options.brokenImage,\n this.id\n );\n } else {\n this.imageObjAlt = undefined;\n }\n }\n }\n\n /**\n * Check that opacity is only between 0 and 1\n *\n * @param {number} opacity\n * @returns {boolean}\n */\n static checkOpacity(opacity) {\n return 0 <= opacity && opacity <= 1;\n }\n\n /**\n * Check that origin is 'center' or 'top-left'\n *\n * @param {string} origin\n * @returns {boolean}\n */\n static checkCoordinateOrigin(origin) {\n return origin === undefined || origin === \"center\" || origin === \"top-left\";\n }\n\n /**\n * Copy group option values into the node options.\n *\n * The group options override the global node options, so the copy of group options\n * must happen *after* the global node options have been set.\n *\n * This method must also be called also if the global node options have changed and the group options did not.\n *\n * @param {object} parentOptions\n * @param {object} newOptions new values for the options, currently only passed in for check\n * @param {object} groupList\n */\n static updateGroupOptions(parentOptions, newOptions, groupList) {\n if (groupList === undefined) return; // No groups, nothing to do\n\n const group = parentOptions.group;\n\n // paranoia: the selected group is already merged into node options, check.\n if (\n newOptions !== undefined &&\n newOptions.group !== undefined &&\n group !== newOptions.group\n ) {\n throw new Error(\n \"updateGroupOptions: group values in options don't match.\"\n );\n }\n\n const hasGroup =\n typeof group === \"number\" || (typeof group === \"string\" && group != \"\");\n if (!hasGroup) return; // current node has no group, no need to merge\n\n const groupObj = groupList.get(group);\n\n if (groupObj.opacity !== undefined && newOptions.opacity === undefined) {\n if (!Node.checkOpacity(groupObj.opacity)) {\n console.error(\n \"Invalid option for node opacity. Value must be between 0 and 1, found: \" +\n groupObj.opacity\n );\n groupObj.opacity = undefined;\n }\n }\n\n // Skip any new option to avoid them being overridden by the group options.\n const skipProperties = Object.getOwnPropertyNames(newOptions).filter(\n (p) => newOptions[p] != null\n );\n // Always skip merging group font options into parent; these are required to be distinct for labels\n skipProperties.push(\"font\");\n selectiveNotDeepExtend(skipProperties, parentOptions, groupObj);\n\n // the color object needs to be completely defined.\n // Since groups can partially overwrite the colors, we parse it again, just in case.\n parentOptions.color = parseColor(parentOptions.color);\n }\n\n /**\n * This process all possible shorthands in the new options and makes sure that the parentOptions are fully defined.\n * Static so it can also be used by the handler.\n *\n * @param {object} parentOptions\n * @param {object} newOptions\n * @param {boolean} [allowDeletion=false]\n * @param {object} [globalOptions={}]\n * @param {object} [groupList]\n * @static\n */\n static parseOptions(\n parentOptions,\n newOptions,\n allowDeletion = false,\n globalOptions = {},\n groupList\n ) {\n const fields = [\"color\", \"fixed\", \"shadow\"];\n selectiveNotDeepExtend(fields, parentOptions, newOptions, allowDeletion);\n\n Node.checkMass(newOptions);\n\n if (parentOptions.opacity !== undefined) {\n if (!Node.checkOpacity(parentOptions.opacity)) {\n console.error(\n \"Invalid option for node opacity. Value must be between 0 and 1, found: \" +\n parentOptions.opacity\n );\n parentOptions.opacity = undefined;\n }\n }\n\n if (newOptions.opacity !== undefined) {\n if (!Node.checkOpacity(newOptions.opacity)) {\n console.error(\n \"Invalid option for node opacity. Value must be between 0 and 1, found: \" +\n newOptions.opacity\n );\n newOptions.opacity = undefined;\n }\n }\n\n if (\n newOptions.shapeProperties &&\n !Node.checkCoordinateOrigin(newOptions.shapeProperties.coordinateOrigin)\n ) {\n console.error(\n \"Invalid option for node coordinateOrigin, found: \" +\n newOptions.shapeProperties.coordinateOrigin\n );\n }\n\n // merge the shadow options into the parent.\n mergeOptions(parentOptions, newOptions, \"shadow\", globalOptions);\n\n // individual shape newOptions\n if (newOptions.color !== undefined && newOptions.color !== null) {\n const parsedColor = parseColor(newOptions.color);\n fillIfDefined(parentOptions.color, parsedColor);\n } else if (allowDeletion === true && newOptions.color === null) {\n parentOptions.color = bridgeObject(globalOptions.color); // set the object back to the global options\n }\n\n // handle the fixed options\n if (newOptions.fixed !== undefined && newOptions.fixed !== null) {\n if (typeof newOptions.fixed === \"boolean\") {\n parentOptions.fixed.x = newOptions.fixed;\n parentOptions.fixed.y = newOptions.fixed;\n } else {\n if (\n newOptions.fixed.x !== undefined &&\n typeof newOptions.fixed.x === \"boolean\"\n ) {\n parentOptions.fixed.x = newOptions.fixed.x;\n }\n if (\n newOptions.fixed.y !== undefined &&\n typeof newOptions.fixed.y === \"boolean\"\n ) {\n parentOptions.fixed.y = newOptions.fixed.y;\n }\n }\n }\n\n if (allowDeletion === true && newOptions.font === null) {\n parentOptions.font = bridgeObject(globalOptions.font); // set the object back to the global options\n }\n\n Node.updateGroupOptions(parentOptions, newOptions, groupList);\n\n // handle the scaling options, specifically the label part\n if (newOptions.scaling !== undefined) {\n mergeOptions(\n parentOptions.scaling,\n newOptions.scaling,\n \"label\",\n globalOptions.scaling\n );\n }\n }\n\n /**\n *\n * @returns {{color: *, borderWidth: *, borderColor: *, size: *, borderDashes: (boolean|Array|allOptions.nodes.shapeProperties.borderDashes|{boolean, array}), borderRadius: (number|allOptions.nodes.shapeProperties.borderRadius|{number}|Array), shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *}}\n */\n getFormattingValues() {\n const values = {\n color: this.options.color.background,\n opacity: this.options.opacity,\n borderWidth: this.options.borderWidth,\n borderColor: this.options.color.border,\n size: this.options.size,\n borderDashes: this.options.shapeProperties.borderDashes,\n borderRadius: this.options.shapeProperties.borderRadius,\n shadow: this.options.shadow.enabled,\n shadowColor: this.options.shadow.color,\n shadowSize: this.options.shadow.size,\n shadowX: this.options.shadow.x,\n shadowY: this.options.shadow.y,\n };\n if (this.selected || this.hover) {\n if (this.chooser === true) {\n if (this.selected) {\n if (this.options.borderWidthSelected != null) {\n values.borderWidth = this.options.borderWidthSelected;\n } else {\n values.borderWidth *= 2;\n }\n values.color = this.options.color.highlight.background;\n values.borderColor = this.options.color.highlight.border;\n values.shadow = this.options.shadow.enabled;\n } else if (this.hover) {\n values.color = this.options.color.hover.background;\n values.borderColor = this.options.color.hover.border;\n values.shadow = this.options.shadow.enabled;\n }\n } else if (typeof this.chooser === \"function\") {\n this.chooser(values, this.options.id, this.selected, this.hover);\n if (values.shadow === false) {\n if (\n values.shadowColor !== this.options.shadow.color ||\n values.shadowSize !== this.options.shadow.size ||\n values.shadowX !== this.options.shadow.x ||\n values.shadowY !== this.options.shadow.y\n ) {\n values.shadow = true;\n }\n }\n }\n } else {\n values.shadow = this.options.shadow.enabled;\n }\n if (this.options.opacity !== undefined) {\n const opacity = this.options.opacity;\n values.borderColor = overrideOpacity(values.borderColor, opacity);\n values.color = overrideOpacity(values.color, opacity);\n values.shadowColor = overrideOpacity(values.shadowColor, opacity);\n }\n return values;\n }\n\n /**\n *\n * @param {object} options\n */\n updateLabelModule(options) {\n if (this.options.label === undefined || this.options.label === null) {\n this.options.label = \"\";\n }\n\n Node.updateGroupOptions(\n this.options,\n {\n ...options,\n color: (options && options.color) || this._localColor || undefined,\n },\n this.grouplist\n );\n\n //\n // Note:The prototype chain for this.options is:\n //\n // this.options -> NodesHandler.options -> NodesHandler.defaultOptions\n // (also: this.globalOptions)\n //\n // Note that the prototypes are mentioned explicitly in the pile list below;\n // WE DON'T WANT THE ORDER OF THE PROTOTYPES!!!! At least, not for font handling of labels.\n // This is a good indication that the prototype usage of options is deficient.\n //\n const currentGroup = this.grouplist.get(this.options.group, false);\n const pile = [\n options, // new options\n this.options, // current node options, see comment above for prototype\n currentGroup, // group options, if any\n this.globalOptions, // Currently set global node options\n this.defaultOptions, // Default global node options\n ];\n this.labelModule.update(this.options, pile);\n\n if (this.labelModule.baseSize !== undefined) {\n this.baseFontSize = this.labelModule.baseSize;\n }\n }\n\n /**\n *\n * @param {string} currentShape\n */\n updateShape(currentShape) {\n if (currentShape === this.options.shape && this.shape) {\n this.shape.setOptions(this.options, this.imageObj, this.imageObjAlt);\n } else {\n // choose draw method depending on the shape\n switch (this.options.shape) {\n case \"box\":\n this.shape = new Box(this.options, this.body, this.labelModule);\n break;\n case \"circle\":\n this.shape = new Circle(this.options, this.body, this.labelModule);\n break;\n case \"circularImage\":\n this.shape = new CircularImage(\n this.options,\n this.body,\n this.labelModule,\n this.imageObj,\n this.imageObjAlt\n );\n break;\n case \"custom\":\n this.shape = new CustomShape(\n this.options,\n this.body,\n this.labelModule,\n this.options.ctxRenderer\n );\n break;\n case \"database\":\n this.shape = new Database(this.options, this.body, this.labelModule);\n break;\n case \"diamond\":\n this.shape = new Diamond(this.options, this.body, this.labelModule);\n break;\n case \"dot\":\n this.shape = new Dot(this.options, this.body, this.labelModule);\n break;\n case \"ellipse\":\n this.shape = new Ellipse(this.options, this.body, this.labelModule);\n break;\n case \"icon\":\n this.shape = new Icon(this.options, this.body, this.labelModule);\n break;\n case \"image\":\n this.shape = new Image(\n this.options,\n this.body,\n this.labelModule,\n this.imageObj,\n this.imageObjAlt\n );\n break;\n case \"square\":\n this.shape = new Square(this.options, this.body, this.labelModule);\n break;\n case \"hexagon\":\n this.shape = new Hexagon(this.options, this.body, this.labelModule);\n break;\n case \"star\":\n this.shape = new Star(this.options, this.body, this.labelModule);\n break;\n case \"text\":\n this.shape = new Text(this.options, this.body, this.labelModule);\n break;\n case \"triangle\":\n this.shape = new Triangle(this.options, this.body, this.labelModule);\n break;\n case \"triangleDown\":\n this.shape = new TriangleDown(\n this.options,\n this.body,\n this.labelModule\n );\n break;\n default:\n this.shape = new Ellipse(this.options, this.body, this.labelModule);\n break;\n }\n }\n this.needsRefresh();\n }\n\n /**\n * select this node\n */\n select() {\n this.selected = true;\n this.needsRefresh();\n }\n\n /**\n * unselect this node\n */\n unselect() {\n this.selected = false;\n this.needsRefresh();\n }\n\n /**\n * Reset the calculated size of the node, forces it to recalculate its size\n */\n needsRefresh() {\n this.shape.refreshNeeded = true;\n }\n\n /**\n * get the title of this node.\n *\n * @returns {string} title The title of the node, or undefined when no title\n * has been set.\n */\n getTitle() {\n return this.options.title;\n }\n\n /**\n * Calculate the distance to the border of the Node\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle Angle in radians\n * @returns {number} distance Distance to the border in pixels\n */\n distanceToBorder(ctx, angle) {\n return this.shape.distanceToBorder(ctx, angle);\n }\n\n /**\n * Check if this node has a fixed x and y position\n *\n * @returns {boolean} true if fixed, false if not\n */\n isFixed() {\n return this.options.fixed.x && this.options.fixed.y;\n }\n\n /**\n * check if this node is selecte\n *\n * @returns {boolean} selected True if node is selected, else false\n */\n isSelected() {\n return this.selected;\n }\n\n /**\n * Retrieve the value of the node. Can be undefined\n *\n * @returns {number} value\n */\n getValue() {\n return this.options.value;\n }\n\n /**\n * Get the current dimensions of the label\n *\n * @returns {rect}\n */\n getLabelSize() {\n return this.labelModule.size();\n }\n\n /**\n * Adjust the value range of the node. The node will adjust it's size\n * based on its value.\n *\n * @param {number} min\n * @param {number} max\n * @param {number} total\n */\n setValueRange(min, max, total) {\n if (this.options.value !== undefined) {\n const scale = this.options.scaling.customScalingFunction(\n min,\n max,\n total,\n this.options.value\n );\n const sizeDiff = this.options.scaling.max - this.options.scaling.min;\n if (this.options.scaling.label.enabled === true) {\n const fontDiff =\n this.options.scaling.label.max - this.options.scaling.label.min;\n this.options.font.size =\n this.options.scaling.label.min + scale * fontDiff;\n }\n this.options.size = this.options.scaling.min + scale * sizeDiff;\n } else {\n this.options.size = this.baseSize;\n this.options.font.size = this.baseFontSize;\n }\n\n this.updateLabelModule();\n }\n\n /**\n * Draw this node in the given canvas\n * The 2d context of a HTML canvas can be retrieved by canvas.getContext(\"2d\");\n *\n * @param {CanvasRenderingContext2D} ctx\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx) {\n const values = this.getFormattingValues();\n return (\n this.shape.draw(ctx, this.x, this.y, this.selected, this.hover, values) ||\n {}\n );\n }\n\n /**\n * Update the bounding box of the shape\n *\n * @param {CanvasRenderingContext2D} ctx\n */\n updateBoundingBox(ctx) {\n this.shape.updateBoundingBox(this.x, this.y, ctx);\n }\n\n /**\n * Recalculate the size of this node in the given canvas\n * The 2d context of a HTML canvas can be retrieved by canvas.getContext(\"2d\");\n *\n * @param {CanvasRenderingContext2D} ctx\n */\n resize(ctx) {\n const values = this.getFormattingValues();\n this.shape.resize(ctx, this.selected, this.hover, values);\n }\n\n /**\n * Determine all visual elements of this node instance, in which the given\n * point falls within the bounding shape.\n *\n * @param {point} point\n * @returns {Array.} list with the items which are on the point\n */\n getItemsOnPoint(point) {\n const ret = [];\n\n if (this.labelModule.visible()) {\n if (pointInRect(this.labelModule.getSize(), point)) {\n ret.push({ nodeId: this.id, labelId: 0 });\n }\n }\n\n if (pointInRect(this.shape.boundingBox, point)) {\n ret.push({ nodeId: this.id });\n }\n\n return ret;\n }\n\n /**\n * Check if this object is overlapping with the provided object\n *\n * @param {object} obj an object with parameters left, top, right, bottom\n * @returns {boolean} True if location is located on node\n */\n isOverlappingWith(obj) {\n return (\n this.shape.left < obj.right &&\n this.shape.left + this.shape.width > obj.left &&\n this.shape.top < obj.bottom &&\n this.shape.top + this.shape.height > obj.top\n );\n }\n\n /**\n * Check if this object is overlapping with the provided object\n *\n * @param {object} obj an object with parameters left, top, right, bottom\n * @returns {boolean} True if location is located on node\n */\n isBoundingBoxOverlappingWith(obj) {\n return (\n this.shape.boundingBox.left < obj.right &&\n this.shape.boundingBox.right > obj.left &&\n this.shape.boundingBox.top < obj.bottom &&\n this.shape.boundingBox.bottom > obj.top\n );\n }\n\n /**\n * Check valid values for mass\n *\n * The mass may not be negative or zero. If it is, reset to 1\n *\n * @param {object} options\n * @param {Node.id} id\n * @static\n */\n static checkMass(options, id) {\n if (options.mass !== undefined && options.mass <= 0) {\n let strId = \"\";\n if (id !== undefined) {\n strId = \" in node id: \" + id;\n }\n console.error(\n \"%cNegative or zero mass disallowed\" + strId + \", setting mass to 1.\",\n VALIDATOR_PRINT_STYLE\n );\n options.mass = 1;\n }\n }\n}\n\nexport default Node;\n","import { bridgeObject, forEach } from \"vis-util/esnext\";\nimport { DataSet, isDataViewLike } from \"vis-data/esnext\";\nimport Node from \"./components/Node\";\n\n/**\n * Handler for Nodes\n */\nclass NodesHandler {\n /**\n * @param {object} body\n * @param {Images} images\n * @param {Array.} groups\n * @param {LayoutEngine} layoutEngine\n */\n constructor(body, images, groups, layoutEngine) {\n this.body = body;\n this.images = images;\n this.groups = groups;\n this.layoutEngine = layoutEngine;\n\n // create the node API in the body container\n this.body.functions.createNode = this.create.bind(this);\n\n this.nodesListeners = {\n add: (event, params) => {\n this.add(params.items);\n },\n update: (event, params) => {\n this.update(params.items, params.data, params.oldData);\n },\n remove: (event, params) => {\n this.remove(params.items);\n },\n };\n\n this.defaultOptions = {\n borderWidth: 1,\n borderWidthSelected: undefined,\n brokenImage: undefined,\n color: {\n border: \"#2B7CE9\",\n background: \"#97C2FC\",\n highlight: {\n border: \"#2B7CE9\",\n background: \"#D2E5FF\",\n },\n hover: {\n border: \"#2B7CE9\",\n background: \"#D2E5FF\",\n },\n },\n opacity: undefined, // number between 0 and 1\n fixed: {\n x: false,\n y: false,\n },\n font: {\n color: \"#343434\",\n size: 14, // px\n face: \"arial\",\n background: \"none\",\n strokeWidth: 0, // px\n strokeColor: \"#ffffff\",\n align: \"center\",\n vadjust: 0,\n multi: false,\n bold: {\n mod: \"bold\",\n },\n boldital: {\n mod: \"bold italic\",\n },\n ital: {\n mod: \"italic\",\n },\n mono: {\n mod: \"\",\n size: 15, // px\n face: \"monospace\",\n vadjust: 2,\n },\n },\n group: undefined,\n hidden: false,\n icon: {\n face: \"FontAwesome\", //'FontAwesome',\n code: undefined, //'\\uf007',\n size: 50, //50,\n color: \"#2B7CE9\", //'#aa00ff'\n },\n image: undefined, // --> URL\n imagePadding: {\n // only for image shape\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n },\n label: undefined,\n labelHighlightBold: true,\n level: undefined,\n margin: {\n top: 5,\n right: 5,\n bottom: 5,\n left: 5,\n },\n mass: 1,\n physics: true,\n scaling: {\n min: 10,\n max: 30,\n label: {\n enabled: false,\n min: 14,\n max: 30,\n maxVisible: 30,\n drawThreshold: 5,\n },\n customScalingFunction: function (min, max, total, value) {\n if (max === min) {\n return 0.5;\n } else {\n const scale = 1 / (max - min);\n return Math.max(0, (value - min) * scale);\n }\n },\n },\n shadow: {\n enabled: false,\n color: \"rgba(0,0,0,0.5)\",\n size: 10,\n x: 5,\n y: 5,\n },\n shape: \"ellipse\",\n shapeProperties: {\n borderDashes: false, // only for borders\n borderRadius: 6, // only for box shape\n interpolation: true, // only for image and circularImage shapes\n useImageSize: false, // only for image and circularImage shapes\n useBorderWithImage: false, // only for image shape\n coordinateOrigin: \"center\", // only for image and circularImage shapes\n },\n size: 25,\n title: undefined,\n value: undefined,\n x: undefined,\n y: undefined,\n };\n\n // Protect from idiocy\n if (this.defaultOptions.mass <= 0) {\n throw \"Internal error: mass in defaultOptions of NodesHandler may not be zero or negative\";\n }\n\n this.options = bridgeObject(this.defaultOptions);\n\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n // refresh the nodes. Used when reverting from hierarchical layout\n this.body.emitter.on(\"refreshNodes\", this.refresh.bind(this));\n this.body.emitter.on(\"refresh\", this.refresh.bind(this));\n this.body.emitter.on(\"destroy\", () => {\n forEach(this.nodesListeners, (callback, event) => {\n if (this.body.data.nodes) this.body.data.nodes.off(event, callback);\n });\n delete this.body.functions.createNode;\n delete this.nodesListeners.add;\n delete this.nodesListeners.update;\n delete this.nodesListeners.remove;\n delete this.nodesListeners;\n });\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n Node.parseOptions(this.options, options);\n\n // Need to set opacity here because Node.parseOptions is also used for groups,\n // if you set opacity in Node.parseOptions it overwrites group opacity.\n if (options.opacity !== undefined) {\n if (\n Number.isNaN(options.opacity) ||\n !Number.isFinite(options.opacity) ||\n options.opacity < 0 ||\n options.opacity > 1\n ) {\n console.error(\n \"Invalid option for node opacity. Value must be between 0 and 1, found: \" +\n options.opacity\n );\n } else {\n this.options.opacity = options.opacity;\n }\n }\n\n // update the shape in all nodes\n if (options.shape !== undefined) {\n for (const nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId)) {\n this.body.nodes[nodeId].updateShape();\n }\n }\n }\n\n // Update the labels of nodes if any relevant options changed.\n if (\n typeof options.font !== \"undefined\" ||\n typeof options.widthConstraint !== \"undefined\" ||\n typeof options.heightConstraint !== \"undefined\"\n ) {\n for (const nodeId of Object.keys(this.body.nodes)) {\n this.body.nodes[nodeId].updateLabelModule();\n this.body.nodes[nodeId].needsRefresh();\n }\n }\n\n // update the shape size in all nodes\n if (options.size !== undefined) {\n for (const nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId)) {\n this.body.nodes[nodeId].needsRefresh();\n }\n }\n }\n\n // update the state of the variables if needed\n if (options.hidden !== undefined || options.physics !== undefined) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n }\n\n /**\n * Set a data set with nodes for the network\n *\n * @param {Array | DataSet | DataView} nodes The data containing the nodes.\n * @param {boolean} [doNotEmit=false] - Suppress data changed event.\n * @private\n */\n setData(nodes, doNotEmit = false) {\n const oldNodesData = this.body.data.nodes;\n\n if (isDataViewLike(\"id\", nodes)) {\n this.body.data.nodes = nodes;\n } else if (Array.isArray(nodes)) {\n this.body.data.nodes = new DataSet();\n this.body.data.nodes.add(nodes);\n } else if (!nodes) {\n this.body.data.nodes = new DataSet();\n } else {\n throw new TypeError(\"Array or DataSet expected\");\n }\n\n if (oldNodesData) {\n // unsubscribe from old dataset\n forEach(this.nodesListeners, function (callback, event) {\n oldNodesData.off(event, callback);\n });\n }\n\n // remove drawn nodes\n this.body.nodes = {};\n\n if (this.body.data.nodes) {\n // subscribe to new dataset\n const me = this;\n forEach(this.nodesListeners, function (callback, event) {\n me.body.data.nodes.on(event, callback);\n });\n\n // draw all new nodes\n const ids = this.body.data.nodes.getIds();\n this.add(ids, true);\n }\n\n if (doNotEmit === false) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n * Add nodes\n *\n * @param {number[] | string[]} ids\n * @param {boolean} [doNotEmit=false]\n * @private\n */\n add(ids, doNotEmit = false) {\n let id;\n const newNodes = [];\n for (let i = 0; i < ids.length; i++) {\n id = ids[i];\n const properties = this.body.data.nodes.get(id);\n const node = this.create(properties);\n newNodes.push(node);\n this.body.nodes[id] = node; // note: this may replace an existing node\n }\n\n this.layoutEngine.positionInitially(newNodes);\n\n if (doNotEmit === false) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n * Update existing nodes, or create them when not yet existing\n *\n * @param {number[] | string[]} ids id's of changed nodes\n * @param {Array} changedData array with changed data\n * @param {Array|undefined} oldData optional; array with previous data\n * @private\n */\n update(ids, changedData, oldData) {\n const nodes = this.body.nodes;\n let dataChanged = false;\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n let node = nodes[id];\n const data = changedData[i];\n if (node !== undefined) {\n // update node\n if (node.setOptions(data)) {\n dataChanged = true;\n }\n } else {\n dataChanged = true;\n // create node\n node = this.create(data);\n nodes[id] = node;\n }\n }\n\n if (!dataChanged && oldData !== undefined) {\n // Check for any changes which should trigger a layout recalculation\n // For now, this is just 'level' for hierarchical layout\n // Assumption: old and new data arranged in same order; at time of writing, this holds.\n dataChanged = changedData.some(function (newValue, index) {\n const oldValue = oldData[index];\n return oldValue && oldValue.level !== newValue.level;\n });\n }\n\n if (dataChanged === true) {\n this.body.emitter.emit(\"_dataChanged\");\n } else {\n this.body.emitter.emit(\"_dataUpdated\");\n }\n }\n\n /**\n * Remove existing nodes. If nodes do not exist, the method will just ignore it.\n *\n * @param {number[] | string[]} ids\n * @private\n */\n remove(ids) {\n const nodes = this.body.nodes;\n\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n delete nodes[id];\n }\n\n this.body.emitter.emit(\"_dataChanged\");\n }\n\n /**\n * create a node\n *\n * @param {object} properties\n * @param {class} [constructorClass=Node.default]\n * @returns {*}\n */\n create(properties, constructorClass = Node) {\n return new constructorClass(\n properties,\n this.body,\n this.images,\n this.groups,\n this.options,\n this.defaultOptions\n );\n }\n\n /**\n *\n * @param {boolean} [clearPositions=false]\n */\n refresh(clearPositions = false) {\n forEach(this.body.nodes, (node, nodeId) => {\n const data = this.body.data.nodes.get(nodeId);\n if (data !== undefined) {\n if (clearPositions === true) {\n node.setOptions({ x: null, y: null });\n }\n node.setOptions({ fixed: false });\n node.setOptions(data);\n }\n });\n }\n\n /**\n * Returns the positions of the nodes.\n *\n * @param {Array. | string} [ids] --> optional, can be array of nodeIds, can be string\n * @returns {{}}\n */\n getPositions(ids) {\n const dataArray = {};\n if (ids !== undefined) {\n if (Array.isArray(ids) === true) {\n for (let i = 0; i < ids.length; i++) {\n if (this.body.nodes[ids[i]] !== undefined) {\n const node = this.body.nodes[ids[i]];\n dataArray[ids[i]] = {\n x: Math.round(node.x),\n y: Math.round(node.y),\n };\n }\n }\n } else {\n if (this.body.nodes[ids] !== undefined) {\n const node = this.body.nodes[ids];\n dataArray[ids] = { x: Math.round(node.x), y: Math.round(node.y) };\n }\n }\n } else {\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const node = this.body.nodes[this.body.nodeIndices[i]];\n dataArray[this.body.nodeIndices[i]] = {\n x: Math.round(node.x),\n y: Math.round(node.y),\n };\n }\n }\n return dataArray;\n }\n\n /**\n * Retrieves the x y position of a specific id.\n *\n * @param {string} id The id to retrieve.\n * @throws {TypeError} If no id is included.\n * @throws {ReferenceError} If an invalid id is provided.\n * @returns {{ x: number, y: number }} Returns X, Y canvas position of the node with given id.\n */\n getPosition(id) {\n if (id == undefined) {\n throw new TypeError(\"No id was specified for getPosition method.\");\n } else if (this.body.nodes[id] == undefined) {\n throw new ReferenceError(\n `NodeId provided for getPosition does not exist. Provided: ${id}`\n );\n } else {\n return {\n x: Math.round(this.body.nodes[id].x),\n y: Math.round(this.body.nodes[id].y),\n };\n }\n }\n\n /**\n * Load the XY positions of the nodes into the dataset.\n */\n storePositions() {\n // todo: add support for clusters and hierarchical.\n const dataArray = [];\n const dataset = this.body.data.nodes.getDataSet();\n\n for (const dsNode of dataset.get()) {\n const id = dsNode.id;\n const bodyNode = this.body.nodes[id];\n const x = Math.round(bodyNode.x);\n const y = Math.round(bodyNode.y);\n\n if (dsNode.x !== x || dsNode.y !== y) {\n dataArray.push({ id, x, y });\n }\n }\n\n dataset.update(dataArray);\n }\n\n /**\n * get the bounding box of a node.\n *\n * @param {Node.id} nodeId\n * @returns {j|*}\n */\n getBoundingBox(nodeId) {\n if (this.body.nodes[nodeId] !== undefined) {\n return this.body.nodes[nodeId].shape.boundingBox;\n }\n }\n\n /**\n * Get the Ids of nodes connected to this node.\n *\n * @param {Node.id} nodeId\n * @param {'to'|'from'|undefined} direction values 'from' and 'to' select respectively parent and child nodes only.\n * Any other value returns both parent and child nodes.\n * @returns {Array}\n */\n getConnectedNodes(nodeId, direction) {\n const nodeList = [];\n if (this.body.nodes[nodeId] !== undefined) {\n const node = this.body.nodes[nodeId];\n const nodeObj = {}; // used to quickly check if node already exists\n for (let i = 0; i < node.edges.length; i++) {\n const edge = node.edges[i];\n if (direction !== \"to\" && edge.toId == node.id) {\n // these are double equals since ids can be numeric or string\n if (nodeObj[edge.fromId] === undefined) {\n nodeList.push(edge.fromId);\n nodeObj[edge.fromId] = true;\n }\n } else if (direction !== \"from\" && edge.fromId == node.id) {\n // these are double equals since ids can be numeric or string\n if (nodeObj[edge.toId] === undefined) {\n nodeList.push(edge.toId);\n nodeObj[edge.toId] = true;\n }\n }\n }\n }\n return nodeList;\n }\n\n /**\n * Get the ids of the edges connected to this node.\n *\n * @param {Node.id} nodeId\n * @returns {*}\n */\n getConnectedEdges(nodeId) {\n const edgeList = [];\n if (this.body.nodes[nodeId] !== undefined) {\n const node = this.body.nodes[nodeId];\n for (let i = 0; i < node.edges.length; i++) {\n edgeList.push(node.edges[i].id);\n }\n } else {\n console.error(\n \"NodeId provided for getConnectedEdges does not exist. Provided: \",\n nodeId\n );\n }\n return edgeList;\n }\n\n /**\n * Move a node.\n *\n * @param {Node.id} nodeId\n * @param {number} x\n * @param {number} y\n */\n moveNode(nodeId, x, y) {\n if (this.body.nodes[nodeId] !== undefined) {\n this.body.nodes[nodeId].x = Number(x);\n this.body.nodes[nodeId].y = Number(y);\n setTimeout(() => {\n this.body.emitter.emit(\"startSimulation\");\n }, 0);\n } else {\n console.error(\n \"Node id supplied to moveNode does not exist. Provided: \",\n nodeId\n );\n }\n }\n}\n\nexport default NodesHandler;\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\n\nmodule.exports = function (descriptor) {\n return descriptor !== undefined && (hasOwn(descriptor, 'value') || hasOwn(descriptor, 'writable'));\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar isDataDescriptor = require('../internals/is-data-descriptor');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\n\n// `Reflect.get` method\n// https://tc39.es/ecma262/#sec-reflect.get\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var descriptor, prototype;\n if (anObject(target) === receiver) return target[propertyKey];\n descriptor = getOwnPropertyDescriptorModule.f(target, propertyKey);\n if (descriptor) return isDataDescriptor(descriptor)\n ? descriptor.value\n : descriptor.get === undefined ? undefined : call(descriptor.get, receiver);\n if (isObject(prototype = getPrototypeOf(target))) return get(prototype, propertyKey, receiver);\n}\n\n$({ target: 'Reflect', stat: true }, {\n get: get\n});\n","'use strict';\nrequire('../../modules/es.reflect.get');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Reflect.get;\n","'use strict';\nvar parent = require('../../stable/object/get-own-property-descriptor');\n\nmodule.exports = parent;\n","import _Reflect$get from \"core-js-pure/features/reflect/get.js\";\nimport _bindInstanceProperty from \"core-js-pure/features/instance/bind.js\";\nimport _Object$getOwnPropertyDescriptor from \"core-js-pure/features/object/get-own-property-descriptor.js\";\nimport superPropBase from \"./superPropBase.js\";\nexport default function _get() {\n if (typeof Reflect !== \"undefined\" && _Reflect$get) {\n var _context;\n _get = _bindInstanceProperty(_context = _Reflect$get).call(_context);\n } else {\n _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = _Object$getOwnPropertyDescriptor(base, property);\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n return desc.value;\n };\n }\n return _get.apply(this, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nexport default function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n return object;\n}","'use strict';\nvar $ = require('../internals/export');\n\n// eslint-disable-next-line es/no-math-hypot -- required for testing\nvar $hypot = Math.hypot;\nvar abs = Math.abs;\nvar sqrt = Math.sqrt;\n\n// Chrome 77 bug\n// https://bugs.chromium.org/p/v8/issues/detail?id=9546\nvar FORCED = !!$hypot && $hypot(Infinity, NaN) !== Infinity;\n\n// `Math.hypot` method\n// https://tc39.es/ecma262/#sec-math.hypot\n$({ target: 'Math', stat: true, arity: 2, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n hypot: function hypot(value1, value2) {\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * sqrt(sum);\n }\n});\n","'use strict';\nrequire('../../modules/es.math.hypot');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Math.hypot;\n","/**\n * ============================================================================\n * Location of all the endpoint drawing routines.\n *\n * Every endpoint has its own drawing routine, which contains an endpoint definition.\n *\n * The endpoint definitions must have the following properies:\n *\n * - (0,0) is the connection point to the node it attaches to\n * - The endpoints are orientated to the positive x-direction\n * - The length of the endpoint is at most 1\n *\n * As long as the endpoint classes remain simple and not too numerous, they will\n * be contained within this module.\n * All classes here except `EndPoints` should be considered as private to this module.\n *\n * -----------------------------------------------------------------------------\n * ### Further Actions\n *\n * After adding a new endpoint here, you also need to do the following things:\n *\n * - Add the new endpoint name to `network/options.js` in array `endPoints`.\n * - Add the new endpoint name to the documentation.\n * Scan for 'arrows.to.type` and add it to the description.\n * - Add the endpoint to the examples. At the very least, add it to example\n * `edgeStyles/arrowTypes`.\n * =============================================================================\n */\n\nimport { ArrowData, Point } from \"./types\";\nimport { drawCircle } from \"./shapes\";\n\n/**\n * Common methods for endpoints\n *\n * @class\n */\nclass EndPoint {\n /**\n * Apply transformation on points for display.\n *\n * The following is done:\n * - rotate by the specified angle\n * - multiply the (normalized) coordinates by the passed length\n * - offset by the target coordinates\n *\n * @param points - The point(s) to be transformed.\n * @param arrowData - The data determining the result of the transformation.\n */\n public static transform(points: Point | Point[], arrowData: ArrowData): void {\n if (!Array.isArray(points)) {\n points = [points];\n }\n\n const x = arrowData.point.x;\n const y = arrowData.point.y;\n const angle = arrowData.angle;\n const length = arrowData.length;\n\n for (let i = 0; i < points.length; ++i) {\n const p = points[i];\n const xt = p.x * Math.cos(angle) - p.y * Math.sin(angle);\n const yt = p.x * Math.sin(angle) + p.y * Math.cos(angle);\n\n p.x = x + length * xt;\n p.y = y + length * yt;\n }\n }\n\n /**\n * Draw a closed path using the given real coordinates.\n *\n * @param ctx - The path will be rendered into this context.\n * @param points - The points of the path.\n */\n public static drawPath(ctx: CanvasRenderingContext2D, points: Point[]): void {\n ctx.beginPath();\n ctx.moveTo(points[0].x, points[0].y);\n for (let i = 1; i < points.length; ++i) {\n ctx.lineTo(points[i].x, points[i].y);\n }\n ctx.closePath();\n }\n}\n\n/**\n * Drawing methods for the arrow endpoint.\n */\nclass Image extends EndPoint {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns False as there is no way to fill an image.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): false {\n if (arrowData.image) {\n ctx.save();\n\n ctx.translate(arrowData.point.x, arrowData.point.y);\n ctx.rotate(Math.PI / 2 + arrowData.angle);\n\n const width =\n arrowData.imageWidth != null\n ? arrowData.imageWidth\n : arrowData.image.width;\n const height =\n arrowData.imageHeight != null\n ? arrowData.imageHeight\n : arrowData.image.height;\n\n arrowData.image.drawImageAtPosition(\n ctx,\n 1, // scale\n -width / 2, // x\n 0, // y\n width,\n height\n );\n\n ctx.restore();\n }\n\n return false;\n }\n}\n\n/**\n * Drawing methods for the arrow endpoint.\n */\nclass Arrow extends EndPoint {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const points = [\n { x: 0, y: 0 },\n { x: -1, y: 0.3 },\n { x: -0.9, y: 0 },\n { x: -1, y: -0.3 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the crow endpoint.\n */\nclass Crow {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const points = [\n { x: -1, y: 0 },\n { x: 0, y: 0.3 },\n { x: -0.4, y: 0 },\n { x: 0, y: -0.3 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the curve endpoint.\n */\nclass Curve {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const point = { x: -0.4, y: 0 };\n EndPoint.transform(point, arrowData);\n\n // Update endpoint style for drawing transparent arc.\n ctx.strokeStyle = ctx.fillStyle;\n ctx.fillStyle = \"rgba(0, 0, 0, 0)\";\n\n // Define curve endpoint as semicircle.\n const pi = Math.PI;\n const startAngle = arrowData.angle - pi / 2;\n const endAngle = arrowData.angle + pi / 2;\n ctx.beginPath();\n ctx.arc(\n point.x,\n point.y,\n arrowData.length * 0.4,\n startAngle,\n endAngle,\n false\n );\n ctx.stroke();\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the inverted curve endpoint.\n */\nclass InvertedCurve {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const point = { x: -0.3, y: 0 };\n EndPoint.transform(point, arrowData);\n\n // Update endpoint style for drawing transparent arc.\n ctx.strokeStyle = ctx.fillStyle;\n ctx.fillStyle = \"rgba(0, 0, 0, 0)\";\n\n // Define inverted curve endpoint as semicircle.\n const pi = Math.PI;\n const startAngle = arrowData.angle + pi / 2;\n const endAngle = arrowData.angle + (3 * pi) / 2;\n ctx.beginPath();\n ctx.arc(\n point.x,\n point.y,\n arrowData.length * 0.4,\n startAngle,\n endAngle,\n false\n );\n ctx.stroke();\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the trinagle endpoint.\n */\nclass Triangle {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const points = [\n { x: 0.02, y: 0 },\n { x: -1, y: 0.3 },\n { x: -1, y: -0.3 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the inverted trinagle endpoint.\n */\nclass InvertedTriangle {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const points = [\n { x: 0, y: 0.3 },\n { x: 0, y: -0.3 },\n { x: -1, y: 0 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the circle endpoint.\n */\nclass Circle {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n const point = { x: -0.4, y: 0 };\n\n EndPoint.transform(point, arrowData);\n drawCircle(ctx, point.x, point.y, arrowData.length * 0.4);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the bar endpoint.\n */\nclass Bar {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n /*\n var points = [\n {x:0, y:0.5},\n {x:0, y:-0.5}\n ];\n\n EndPoint.transform(points, arrowData);\n ctx.beginPath();\n ctx.moveTo(points[0].x, points[0].y);\n ctx.lineTo(points[1].x, points[1].y);\n ctx.stroke();\n*/\n\n const points = [\n { x: 0, y: 0.5 },\n { x: 0, y: -0.5 },\n { x: -0.15, y: -0.5 },\n { x: -0.15, y: 0.5 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the box endpoint.\n */\nclass Box {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n const points = [\n { x: 0, y: 0.3 },\n { x: 0, y: -0.3 },\n { x: -0.6, y: -0.3 },\n { x: -0.6, y: 0.3 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the diamond endpoint.\n */\nclass Diamond {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n const points = [\n { x: 0, y: 0 },\n { x: -0.5, y: -0.3 },\n { x: -1, y: 0 },\n { x: -0.5, y: 0.3 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the vee endpoint.\n */\nclass Vee {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const points = [\n { x: -1, y: 0.3 },\n { x: -0.5, y: 0 },\n { x: -1, y: -0.3 },\n { x: 0, y: 0 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the endpoints.\n */\nexport class EndPoints {\n /**\n * Draw an endpoint.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True if ctx.fill() can be used to fill the arrow, false otherwise.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): boolean {\n let type;\n if (arrowData.type) {\n type = arrowData.type.toLowerCase();\n }\n\n switch (type) {\n case \"image\":\n return Image.draw(ctx, arrowData);\n case \"circle\":\n return Circle.draw(ctx, arrowData);\n case \"box\":\n return Box.draw(ctx, arrowData);\n case \"crow\":\n return Crow.draw(ctx, arrowData);\n case \"curve\":\n return Curve.draw(ctx, arrowData);\n case \"diamond\":\n return Diamond.draw(ctx, arrowData);\n case \"inv_curve\":\n return InvertedCurve.draw(ctx, arrowData);\n case \"triangle\":\n return Triangle.draw(ctx, arrowData);\n case \"inv_triangle\":\n return InvertedTriangle.draw(ctx, arrowData);\n case \"bar\":\n return Bar.draw(ctx, arrowData);\n case \"vee\":\n return Vee.draw(ctx, arrowData);\n case \"arrow\": // fall-through\n default:\n return Arrow.draw(ctx, arrowData);\n }\n }\n}\n","import { overrideOpacity } from \"vis-util/esnext\";\nimport { EndPoints } from \"./end-points\";\nimport {\n ArrowData,\n ArrowDataWithCore,\n ArrowType,\n EdgeFormattingValues,\n EdgeType,\n Id,\n Label,\n EdgeOptions,\n Point,\n PointT,\n SelectiveRequired,\n VBody,\n VNode,\n} from \"./types\";\nimport { drawDashedLine } from \"./shapes\";\nimport { getSelfRefCoordinates } from \"../../shared/ComponentUtil\";\n\nexport interface FindBorderPositionOptions {\n via: Via;\n}\nexport interface FindBorderPositionCircleOptions {\n x: number;\n y: number;\n low: number;\n high: number;\n direction: number;\n}\n\n/**\n * The Base Class for all edges.\n */\nexport abstract class EdgeBase implements EdgeType {\n public from!: VNode; // Initialized in setOptions\n public fromPoint: Point;\n public to!: VNode; // Initialized in setOptions\n public toPoint: Point;\n public via?: VNode;\n\n public color: unknown = {};\n public colorDirty = true;\n public id!: Id; // Initialized in setOptions\n public options!: EdgeOptions; // Initialized in setOptions\n public hoverWidth = 1.5;\n public selectionWidth = 2;\n\n /**\n * Create a new instance.\n *\n * @param options - The options object of given edge.\n * @param _body - The body of the network.\n * @param _labelModule - Label module.\n */\n public constructor(\n options: EdgeOptions,\n protected _body: VBody,\n protected _labelModule: Label\n ) {\n this.setOptions(options);\n\n this.fromPoint = this.from;\n this.toPoint = this.to;\n }\n\n /**\n * Find the intersection between the border of the node and the edge.\n *\n * @param node - The node (either from or to node of the edge).\n * @param ctx - The context that will be used for rendering.\n * @param options - Additional options.\n * @returns Cartesian coordinates of the intersection between the border of the node and the edge.\n */\n protected abstract _findBorderPosition(\n node: VNode,\n ctx: CanvasRenderingContext2D,\n options?: FindBorderPositionOptions\n ): PointT;\n\n /**\n * Return additional point(s) the edge passes through.\n *\n * @returns Cartesian coordinates of the point(s) the edge passes through.\n */\n public abstract getViaNode(): Via;\n\n /** @inheritDoc */\n public abstract getPoint(position: number, viaNode?: Via): Point;\n\n /** @inheritDoc */\n public connect(): void {\n this.from = this._body.nodes[this.options.from];\n this.to = this._body.nodes[this.options.to];\n }\n\n /** @inheritDoc */\n public cleanup(): boolean {\n return false;\n }\n\n /**\n * Set new edge options.\n *\n * @param options - The new edge options object.\n */\n public setOptions(options: EdgeOptions): void {\n this.options = options;\n\n this.from = this._body.nodes[this.options.from];\n this.to = this._body.nodes[this.options.to];\n this.id = this.options.id;\n }\n\n /** @inheritDoc */\n public drawLine(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n | \"color\"\n | \"opacity\"\n | \"shadowColor\"\n | \"shadowSize\"\n | \"shadowX\"\n | \"shadowY\"\n | \"width\"\n >,\n _selected?: boolean,\n _hover?: boolean,\n viaNode: Via = this.getViaNode()\n ): void {\n // set style\n ctx.strokeStyle = this.getColor(ctx, values);\n ctx.lineWidth = values.width;\n\n if (values.dashes !== false) {\n this._drawDashedLine(ctx, values, viaNode);\n } else {\n this._drawLine(ctx, values, viaNode);\n }\n }\n\n /**\n * Draw a line with given style between two nodes through supplied node(s).\n *\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values like color, opacity or shadow.\n * @param viaNode - Additional control point(s) for the edge.\n * @param fromPoint - TODO: Seems ignored, remove?\n * @param toPoint - TODO: Seems ignored, remove?\n */\n private _drawLine(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"shadowColor\" | \"shadowSize\" | \"shadowX\" | \"shadowY\"\n >,\n viaNode: Via,\n fromPoint?: Point,\n toPoint?: Point\n ): void {\n if (this.from != this.to) {\n // draw line\n this._line(ctx, values, viaNode, fromPoint, toPoint);\n } else {\n const [x, y, radius] = this._getCircleData(ctx);\n this._circle(ctx, values, x, y, radius);\n }\n }\n\n /**\n * Draw a dashed line with given style between two nodes through supplied node(s).\n *\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values like color, opacity or shadow.\n * @param viaNode - Additional control point(s) for the edge.\n * @param _fromPoint - Ignored (TODO: remove in the future).\n * @param _toPoint - Ignored (TODO: remove in the future).\n */\n private _drawDashedLine(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"shadowColor\" | \"shadowSize\" | \"shadowX\" | \"shadowY\"\n >,\n viaNode: Via,\n _fromPoint?: Point,\n _toPoint?: Point\n ): void {\n ctx.lineCap = \"round\";\n const pattern = Array.isArray(values.dashes) ? values.dashes : [5, 5];\n\n // only firefox and chrome support this method, else we use the legacy one.\n if (ctx.setLineDash !== undefined) {\n ctx.save();\n\n // set dash settings for chrome or firefox\n ctx.setLineDash(pattern);\n ctx.lineDashOffset = 0;\n\n // draw the line\n if (this.from != this.to) {\n // draw line\n this._line(ctx, values, viaNode);\n } else {\n const [x, y, radius] = this._getCircleData(ctx);\n this._circle(ctx, values, x, y, radius);\n }\n\n // restore the dash settings.\n ctx.setLineDash([0]);\n ctx.lineDashOffset = 0;\n ctx.restore();\n } else {\n // unsupporting smooth lines\n if (this.from != this.to) {\n // draw line\n drawDashedLine(\n ctx,\n this.from.x,\n this.from.y,\n this.to.x,\n this.to.y,\n pattern\n );\n } else {\n const [x, y, radius] = this._getCircleData(ctx);\n this._circle(ctx, values, x, y, radius);\n }\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n\n ctx.stroke();\n\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n }\n }\n\n /**\n * Draw a line with given style between two nodes through supplied node(s).\n *\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values like color, opacity or shadow.\n * @param viaNode - Additional control point(s) for the edge.\n * @param fromPoint - TODO: Seems ignored, remove?\n * @param toPoint - TODO: Seems ignored, remove?\n */\n protected abstract _line(\n ctx: CanvasRenderingContext2D,\n values: EdgeFormattingValues,\n viaNode: Via,\n fromPoint?: Point,\n toPoint?: Point\n ): void;\n\n /**\n * Find the intersection between the border of the node and the edge.\n *\n * @param node - The node (either from or to node of the edge).\n * @param ctx - The context that will be used for rendering.\n * @param options - Additional options.\n * @returns Cartesian coordinates of the intersection between the border of the node and the edge.\n */\n public findBorderPosition(\n node: VNode,\n ctx: CanvasRenderingContext2D,\n options?: FindBorderPositionOptions | FindBorderPositionCircleOptions\n ): PointT {\n if (this.from != this.to) {\n return this._findBorderPosition(node, ctx, options as any);\n } else {\n return this._findBorderPositionCircle(node, ctx, options as any);\n }\n }\n\n /** @inheritDoc */\n public findBorderPositions(ctx: CanvasRenderingContext2D): {\n from: Point;\n to: Point;\n } {\n if (this.from != this.to) {\n return {\n from: this._findBorderPosition(this.from, ctx),\n to: this._findBorderPosition(this.to, ctx),\n };\n } else {\n const [x, y] = this._getCircleData(ctx).slice(0, 2);\n\n return {\n from: this._findBorderPositionCircle(this.from, ctx, {\n x,\n y,\n low: 0.25,\n high: 0.6,\n direction: -1,\n }),\n to: this._findBorderPositionCircle(this.from, ctx, {\n x,\n y,\n low: 0.6,\n high: 0.8,\n direction: 1,\n }),\n };\n }\n }\n\n /**\n * Compute the center point and radius of an edge connected to the same node at both ends.\n *\n * @param ctx - The context that will be used for rendering.\n * @returns `[x, y, radius]`\n */\n protected _getCircleData(\n ctx?: CanvasRenderingContext2D\n ): [number, number, number] {\n const radius = this.options.selfReference.size;\n\n if (ctx !== undefined) {\n if (this.from.shape.width === undefined) {\n this.from.shape.resize(ctx);\n }\n }\n\n // get circle coordinates\n const coordinates = getSelfRefCoordinates(\n ctx,\n this.options.selfReference.angle,\n radius,\n this.from\n );\n\n return [coordinates.x, coordinates.y, radius];\n }\n\n /**\n * Get a point on a circle.\n *\n * @param x - Center of the circle on the x axis.\n * @param y - Center of the circle on the y axis.\n * @param radius - Radius of the circle.\n * @param position - Value between 0 (line start) and 1 (line end).\n * @returns Cartesian coordinates of requested point on the circle.\n */\n private _pointOnCircle(\n x: number,\n y: number,\n radius: number,\n position: number\n ): Point {\n const angle = position * 2 * Math.PI;\n return {\n x: x + radius * Math.cos(angle),\n y: y - radius * Math.sin(angle),\n };\n }\n\n /**\n * Find the intersection between the border of the node and the edge.\n *\n * @remarks\n * This function uses binary search to look for the point where the circle crosses the border of the node.\n * @param nearNode - The node (either from or to node of the edge).\n * @param ctx - The context that will be used for rendering.\n * @param options - Additional options.\n * @returns Cartesian coordinates of the intersection between the border of the node and the edge.\n */\n private _findBorderPositionCircle(\n nearNode: VNode,\n ctx: CanvasRenderingContext2D,\n options: FindBorderPositionCircleOptions\n ): PointT {\n const x = options.x;\n const y = options.y;\n let low = options.low;\n let high = options.high;\n const direction = options.direction;\n\n const maxIterations = 10;\n const radius = this.options.selfReference.size;\n const threshold = 0.05;\n let pos: Point;\n\n let middle = (low + high) * 0.5;\n\n let endPointOffset = 0;\n if (this.options.arrowStrikethrough === true) {\n if (direction === -1) {\n endPointOffset = this.options.endPointOffset.from;\n } else if (direction === 1) {\n endPointOffset = this.options.endPointOffset.to;\n }\n }\n\n let iteration = 0;\n do {\n middle = (low + high) * 0.5;\n\n pos = this._pointOnCircle(x, y, radius, middle);\n const angle = Math.atan2(nearNode.y - pos.y, nearNode.x - pos.x);\n\n const distanceToBorder =\n nearNode.distanceToBorder(ctx, angle) + endPointOffset;\n\n const distanceToPoint = Math.sqrt(\n Math.pow(pos.x - nearNode.x, 2) + Math.pow(pos.y - nearNode.y, 2)\n );\n const difference = distanceToBorder - distanceToPoint;\n if (Math.abs(difference) < threshold) {\n break; // found\n } else if (difference > 0) {\n // distance to nodes is larger than distance to border --> t needs to be bigger if we're looking at the to node.\n if (direction > 0) {\n low = middle;\n } else {\n high = middle;\n }\n } else {\n if (direction > 0) {\n high = middle;\n } else {\n low = middle;\n }\n }\n\n ++iteration;\n } while (low <= high && iteration < maxIterations);\n\n return {\n ...pos,\n t: middle,\n };\n }\n\n /**\n * Get the line width of the edge. Depends on width and whether one of the connected nodes is selected.\n *\n * @param selected - Determines wheter the line is selected.\n * @param hover - Determines wheter the line is being hovered, only applies if selected is false.\n * @returns The width of the line.\n */\n public getLineWidth(selected: boolean, hover: boolean): number {\n if (selected === true) {\n return Math.max(this.selectionWidth, 0.3 / this._body.view.scale);\n } else if (hover === true) {\n return Math.max(this.hoverWidth, 0.3 / this._body.view.scale);\n } else {\n return Math.max(this.options.width, 0.3 / this._body.view.scale);\n }\n }\n\n /**\n * Compute the color or gradient for given edge.\n *\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values like color, opacity or shadow.\n * @param _selected - Ignored (TODO: remove in the future).\n * @param _hover - Ignored (TODO: remove in the future).\n * @returns Color string if single color is inherited or gradient if two.\n */\n public getColor(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired\n ): string | CanvasGradient {\n if (values.inheritsColor !== false) {\n // when this is a loop edge, just use the 'from' method\n if (values.inheritsColor === \"both\" && this.from.id !== this.to.id) {\n const grd = ctx.createLinearGradient(\n this.from.x,\n this.from.y,\n this.to.x,\n this.to.y\n );\n let fromColor = this.from.options.color.highlight.border;\n let toColor = this.to.options.color.highlight.border;\n\n if (this.from.selected === false && this.to.selected === false) {\n fromColor = overrideOpacity(\n this.from.options.color.border,\n values.opacity\n );\n toColor = overrideOpacity(\n this.to.options.color.border,\n values.opacity\n );\n } else if (this.from.selected === true && this.to.selected === false) {\n toColor = this.to.options.color.border;\n } else if (this.from.selected === false && this.to.selected === true) {\n fromColor = this.from.options.color.border;\n }\n grd.addColorStop(0, fromColor);\n grd.addColorStop(1, toColor);\n\n // -------------------- this returns -------------------- //\n return grd;\n }\n\n if (values.inheritsColor === \"to\") {\n return overrideOpacity(this.to.options.color.border, values.opacity);\n } else {\n // \"from\"\n return overrideOpacity(this.from.options.color.border, values.opacity);\n }\n } else {\n return overrideOpacity(values.color, values.opacity);\n }\n }\n\n /**\n * Draw a line from a node to itself, a circle.\n *\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values like color, opacity or shadow.\n * @param x - Center of the circle on the x axis.\n * @param y - Center of the circle on the y axis.\n * @param radius - Radius of the circle.\n */\n private _circle(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"shadowColor\" | \"shadowSize\" | \"shadowX\" | \"shadowY\"\n >,\n x: number,\n y: number,\n radius: number\n ): void {\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n\n //full circle\n let angleFrom = 0;\n let angleTo = Math.PI * 2;\n\n if (!this.options.selfReference.renderBehindTheNode) {\n //render only parts which are not overlaping with parent node\n //need to find x,y of from point and x,y to point\n //calculating radians\n const low = this.options.selfReference.angle;\n const high = this.options.selfReference.angle + Math.PI;\n const pointTFrom = this._findBorderPositionCircle(this.from, ctx, {\n x,\n y,\n low,\n high,\n direction: -1,\n });\n const pointTTo = this._findBorderPositionCircle(this.from, ctx, {\n x,\n y,\n low,\n high,\n direction: 1,\n });\n angleFrom = Math.atan2(pointTFrom.y - y, pointTFrom.x - x);\n angleTo = Math.atan2(pointTTo.y - y, pointTTo.x - x);\n }\n\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, radius, angleFrom, angleTo, false);\n ctx.stroke();\n\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n }\n\n /**\n * @inheritDoc\n * @remarks\n * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment\n */\n public getDistanceToEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number\n ): number {\n if (this.from != this.to) {\n return this._getDistanceToEdge(x1, y1, x2, y2, x3, y3);\n } else {\n const [x, y, radius] = this._getCircleData(undefined);\n const dx = x - x3;\n const dy = y - y3;\n return Math.abs(Math.sqrt(dx * dx + dy * dy) - radius);\n }\n }\n\n /**\n * Calculate the distance between a point (x3, y3) and a line segment from (x1, y1) to (x2, y2).\n *\n * @remarks\n * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment\n * @param x1 - First end of the line segment on the x axis.\n * @param y1 - First end of the line segment on the y axis.\n * @param x2 - Second end of the line segment on the x axis.\n * @param y2 - Second end of the line segment on the y axis.\n * @param x3 - Position of the point on the x axis.\n * @param y3 - Position of the point on the y axis.\n * @param via - Additional control point(s) for the edge.\n * @returns The distance between the line segment and the point.\n */\n protected abstract _getDistanceToEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n via?: Via\n ): number;\n\n /**\n * Calculate the distance between a point (x3, y3) and a line segment from (x1, y1) to (x2, y2).\n *\n * @param x1 - First end of the line segment on the x axis.\n * @param y1 - First end of the line segment on the y axis.\n * @param x2 - Second end of the line segment on the x axis.\n * @param y2 - Second end of the line segment on the y axis.\n * @param x3 - Position of the point on the x axis.\n * @param y3 - Position of the point on the y axis.\n * @returns The distance between the line segment and the point.\n */\n protected _getDistanceToLine(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number\n ): number {\n const px = x2 - x1;\n const py = y2 - y1;\n const something = px * px + py * py;\n let u = ((x3 - x1) * px + (y3 - y1) * py) / something;\n\n if (u > 1) {\n u = 1;\n } else if (u < 0) {\n u = 0;\n }\n\n const x = x1 + u * px;\n const y = y1 + u * py;\n const dx = x - x3;\n const dy = y - y3;\n\n //# Note: If the actual distance does not matter,\n //# if you only want to compare what this function\n //# returns to other results of this function, you\n //# can just return the squared distance instead\n //# (i.e. remove the sqrt) to gain a little performance\n\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n /** @inheritDoc */\n public getArrowData(\n ctx: CanvasRenderingContext2D,\n position: \"middle\",\n viaNode: VNode,\n selected: boolean,\n hover: boolean,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"middleArrowType\" | \"middleArrowScale\" | \"width\"\n >\n ): ArrowDataWithCore;\n /** @inheritDoc */\n public getArrowData(\n ctx: CanvasRenderingContext2D,\n position: \"to\",\n viaNode: VNode,\n selected: boolean,\n hover: boolean,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"toArrowType\" | \"toArrowScale\" | \"width\"\n >\n ): ArrowDataWithCore;\n /** @inheritDoc */\n public getArrowData(\n ctx: CanvasRenderingContext2D,\n position: \"from\",\n viaNode: VNode,\n selected: boolean,\n hover: boolean,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"fromArrowType\" | \"fromArrowScale\" | \"width\"\n >\n ): ArrowDataWithCore;\n /** @inheritDoc */\n public getArrowData(\n ctx: CanvasRenderingContext2D,\n position: \"from\" | \"to\" | \"middle\",\n viaNode: VNode,\n _selected: boolean,\n _hover: boolean,\n values: SelectiveRequired\n ): ArrowDataWithCore {\n // set lets\n let angle: number;\n let arrowPoint: Point;\n let node1: VNode;\n let node2: VNode;\n let reversed: boolean;\n let scaleFactor: number;\n let type: ArrowType;\n const lineWidth: number = values.width;\n\n if (position === \"from\") {\n node1 = this.from;\n node2 = this.to;\n reversed = values.fromArrowScale! < 0;\n scaleFactor = Math.abs(values.fromArrowScale!);\n type = values.fromArrowType!;\n } else if (position === \"to\") {\n node1 = this.to;\n node2 = this.from;\n reversed = values.toArrowScale! < 0;\n scaleFactor = Math.abs(values.toArrowScale!);\n type = values.toArrowType!;\n } else {\n node1 = this.to;\n node2 = this.from;\n reversed = values.middleArrowScale! < 0;\n scaleFactor = Math.abs(values.middleArrowScale!);\n type = values.middleArrowType!;\n }\n\n const length = 15 * scaleFactor + 3 * lineWidth; // 3* lineWidth is the width of the edge.\n\n // if not connected to itself\n if (node1 != node2) {\n const approximateEdgeLength = Math.hypot(\n node1.x - node2.x,\n node1.y - node2.y\n );\n const relativeLength = length / approximateEdgeLength;\n\n if (position !== \"middle\") {\n // draw arrow head\n if (this.options.smooth.enabled === true) {\n const pointT = this._findBorderPosition(node1, ctx, { via: viaNode });\n const guidePos = this.getPoint(\n pointT.t + relativeLength * (position === \"from\" ? 1 : -1),\n viaNode\n );\n angle = Math.atan2(pointT.y - guidePos.y, pointT.x - guidePos.x);\n arrowPoint = pointT;\n } else {\n angle = Math.atan2(node1.y - node2.y, node1.x - node2.x);\n arrowPoint = this._findBorderPosition(node1, ctx);\n }\n } else {\n // Negative half length reverses arrow direction.\n const halfLength = (reversed ? -relativeLength : relativeLength) / 2;\n const guidePos1 = this.getPoint(0.5 + halfLength, viaNode);\n const guidePos2 = this.getPoint(0.5 - halfLength, viaNode);\n angle = Math.atan2(\n guidePos1.y - guidePos2.y,\n guidePos1.x - guidePos2.x\n );\n arrowPoint = this.getPoint(0.5, viaNode);\n }\n } else {\n // draw circle\n const [x, y, radius] = this._getCircleData(ctx);\n\n if (position === \"from\") {\n const low = this.options.selfReference.angle;\n const high = this.options.selfReference.angle + Math.PI;\n\n const pointT = this._findBorderPositionCircle(this.from, ctx, {\n x,\n y,\n low,\n high,\n direction: -1,\n });\n angle = pointT.t * -2 * Math.PI + 1.5 * Math.PI + 0.1 * Math.PI;\n arrowPoint = pointT;\n } else if (position === \"to\") {\n const low = this.options.selfReference.angle;\n const high = this.options.selfReference.angle + Math.PI;\n\n const pointT = this._findBorderPositionCircle(this.from, ctx, {\n x,\n y,\n low,\n high,\n direction: 1,\n });\n angle = pointT.t * -2 * Math.PI + 1.5 * Math.PI - 1.1 * Math.PI;\n arrowPoint = pointT;\n } else {\n const pos = this.options.selfReference.angle / (2 * Math.PI);\n arrowPoint = this._pointOnCircle(x, y, radius, pos);\n angle = pos * -2 * Math.PI + 1.5 * Math.PI + 0.1 * Math.PI;\n }\n }\n\n const xi = arrowPoint.x - length * 0.9 * Math.cos(angle);\n const yi = arrowPoint.y - length * 0.9 * Math.sin(angle);\n const arrowCore = { x: xi, y: yi };\n\n return {\n point: arrowPoint,\n core: arrowCore,\n angle: angle,\n length: length,\n type: type,\n };\n }\n\n /** @inheritDoc */\n public drawArrowHead(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n | \"color\"\n | \"opacity\"\n | \"shadowColor\"\n | \"shadowSize\"\n | \"shadowX\"\n | \"shadowY\"\n | \"width\"\n >,\n _selected: boolean,\n _hover: boolean,\n arrowData: ArrowData\n ): void {\n // set style\n ctx.strokeStyle = this.getColor(ctx, values);\n ctx.fillStyle = ctx.strokeStyle;\n ctx.lineWidth = values.width;\n\n const canFill = EndPoints.draw(ctx, arrowData);\n\n if (canFill) {\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n ctx.fill();\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n }\n }\n\n /**\n * Set the shadow formatting values in the context if enabled, do nothing otherwise.\n *\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values for the shadow.\n */\n public enableShadow(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"shadowColor\" | \"shadowSize\" | \"shadowX\" | \"shadowY\"\n >\n ): void {\n if (values.shadow === true) {\n ctx.shadowColor = values.shadowColor;\n ctx.shadowBlur = values.shadowSize;\n ctx.shadowOffsetX = values.shadowX;\n ctx.shadowOffsetY = values.shadowY;\n }\n }\n\n /**\n * Reset the shadow formatting values in the context if enabled, do nothing otherwise.\n *\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values for the shadow.\n */\n public disableShadow(\n ctx: CanvasRenderingContext2D,\n values: EdgeFormattingValues\n ): void {\n if (values.shadow === true) {\n ctx.shadowColor = \"rgba(0,0,0,0)\";\n ctx.shadowBlur = 0;\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n }\n }\n\n /**\n * Render the background according to the formatting values.\n *\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values for the background.\n */\n public drawBackground(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"backgroundColor\" | \"backgroundSize\"\n >\n ): void {\n if (values.background !== false) {\n // save original line attrs\n const origCtxAttr = {\n strokeStyle: ctx.strokeStyle,\n lineWidth: ctx.lineWidth,\n dashes: (ctx as any).dashes,\n };\n\n ctx.strokeStyle = values.backgroundColor;\n ctx.lineWidth = values.backgroundSize;\n this.setStrokeDashed(ctx, values.backgroundDashes);\n\n ctx.stroke();\n\n // restore original line attrs\n ctx.strokeStyle = origCtxAttr.strokeStyle;\n ctx.lineWidth = origCtxAttr.lineWidth;\n (ctx as any).dashes = origCtxAttr.dashes;\n this.setStrokeDashed(ctx, values.dashes);\n }\n }\n\n /**\n * Set the line dash pattern if supported. Logs a warning to the console if it isn't supported.\n *\n * @param ctx - The context that will be used for rendering.\n * @param dashes - The pattern [line, space, line…], true for default dashed line or false for normal line.\n */\n public setStrokeDashed(\n ctx: CanvasRenderingContext2D,\n dashes?: boolean | number[]\n ): void {\n if (dashes !== false) {\n if (ctx.setLineDash !== undefined) {\n const pattern = Array.isArray(dashes) ? dashes : [5, 5];\n ctx.setLineDash(pattern);\n } else {\n console.warn(\n \"setLineDash is not supported in this browser. The dashed stroke cannot be used.\"\n );\n }\n } else {\n if (ctx.setLineDash !== undefined) {\n ctx.setLineDash([]);\n } else {\n console.warn(\n \"setLineDash is not supported in this browser. The dashed stroke cannot be used.\"\n );\n }\n }\n }\n}\n","import { EdgeBase } from \"./edge-base\";\nimport {\n EdgeFormattingValues,\n Label,\n EdgeOptions,\n Point,\n PointT,\n SelectiveRequired,\n VBody,\n VNode,\n} from \"./types\";\n\n/**\n * The Base Class for all Bezier edges.\n * Bezier curves are used to model smooth gradual curves in paths between nodes.\n */\nexport abstract class BezierEdgeBase extends EdgeBase {\n /**\n * Create a new instance.\n *\n * @param options - The options object of given edge.\n * @param body - The body of the network.\n * @param labelModule - Label module.\n */\n public constructor(options: EdgeOptions, body: VBody, labelModule: Label) {\n super(options, body, labelModule);\n }\n\n /**\n * Compute additional point(s) the edge passes through.\n *\n * @returns Cartesian coordinates of the point(s) the edge passes through.\n */\n protected abstract _getViaCoordinates(): Via;\n\n /**\n * Find the intersection between the border of the node and the edge.\n *\n * @remarks\n * This function uses binary search to look for the point where the bezier curve crosses the border of the node.\n * @param nearNode - The node (either from or to node of the edge).\n * @param ctx - The context that will be used for rendering.\n * @param viaNode - Additional node(s) the edge passes through.\n * @returns Cartesian coordinates of the intersection between the border of the node and the edge.\n */\n protected _findBorderPositionBezier(\n nearNode: VNode,\n ctx: CanvasRenderingContext2D,\n viaNode: Via = this._getViaCoordinates()\n ): PointT {\n const maxIterations = 10;\n const threshold = 0.2;\n let from = false;\n let high = 1;\n let low = 0;\n let node = this.to;\n let pos: Point;\n let middle: number;\n\n let endPointOffset = this.options.endPointOffset\n ? this.options.endPointOffset.to\n : 0;\n\n if (nearNode.id === this.from.id) {\n node = this.from;\n from = true;\n\n endPointOffset = this.options.endPointOffset\n ? this.options.endPointOffset.from\n : 0;\n }\n\n if (this.options.arrowStrikethrough === false) {\n endPointOffset = 0;\n }\n\n let iteration = 0;\n do {\n middle = (low + high) * 0.5;\n\n pos = this.getPoint(middle, viaNode);\n const angle = Math.atan2(node.y - pos.y, node.x - pos.x);\n\n const distanceToBorder =\n node.distanceToBorder(ctx, angle) + endPointOffset;\n\n const distanceToPoint = Math.sqrt(\n Math.pow(pos.x - node.x, 2) + Math.pow(pos.y - node.y, 2)\n );\n const difference = distanceToBorder - distanceToPoint;\n if (Math.abs(difference) < threshold) {\n break; // found\n } else if (difference < 0) {\n // distance to nodes is larger than distance to border --> t needs to be bigger if we're looking at the to node.\n if (from === false) {\n low = middle;\n } else {\n high = middle;\n }\n } else {\n if (from === false) {\n high = middle;\n } else {\n low = middle;\n }\n }\n\n ++iteration;\n } while (low <= high && iteration < maxIterations);\n\n return {\n ...pos,\n t: middle,\n };\n }\n\n /**\n * Calculate the distance between a point (x3,y3) and a line segment from (x1,y1) to (x2,y2).\n *\n * @remarks\n * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment\n * @param x1 - First end of the line segment on the x axis.\n * @param y1 - First end of the line segment on the y axis.\n * @param x2 - Second end of the line segment on the x axis.\n * @param y2 - Second end of the line segment on the y axis.\n * @param x3 - Position of the point on the x axis.\n * @param y3 - Position of the point on the y axis.\n * @param via - The control point for the edge.\n * @returns The distance between the line segment and the point.\n */\n protected _getDistanceToBezierEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n via: Point\n ): number {\n // x3,y3 is the point\n let minDistance = 1e9;\n let distance;\n let i, t, x, y;\n let lastX = x1;\n let lastY = y1;\n for (i = 1; i < 10; i++) {\n t = 0.1 * i;\n x =\n Math.pow(1 - t, 2) * x1 + 2 * t * (1 - t) * via.x + Math.pow(t, 2) * x2;\n y =\n Math.pow(1 - t, 2) * y1 + 2 * t * (1 - t) * via.y + Math.pow(t, 2) * y2;\n if (i > 0) {\n distance = this._getDistanceToLine(lastX, lastY, x, y, x3, y3);\n minDistance = distance < minDistance ? distance : minDistance;\n }\n lastX = x;\n lastY = y;\n }\n\n return minDistance;\n }\n\n /**\n * Render a bezier curve between two nodes.\n *\n * @remarks\n * The method accepts zero, one or two control points.\n * Passing zero control points just draws a straight line.\n * @param ctx - The context that will be used for rendering.\n * @param values - Style options for edge drawing.\n * @param viaNode1 - First control point for curve drawing.\n * @param viaNode2 - Second control point for curve drawing.\n */\n protected _bezierCurve(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n | \"backgroundColor\"\n | \"backgroundSize\"\n | \"shadowColor\"\n | \"shadowSize\"\n | \"shadowX\"\n | \"shadowY\"\n >,\n viaNode1?: Point,\n viaNode2?: Point\n ): void {\n ctx.beginPath();\n ctx.moveTo(this.fromPoint.x, this.fromPoint.y);\n\n if (viaNode1 != null && viaNode1.x != null) {\n if (viaNode2 != null && viaNode2.x != null) {\n ctx.bezierCurveTo(\n viaNode1.x,\n viaNode1.y,\n viaNode2.x,\n viaNode2.y,\n this.toPoint.x,\n this.toPoint.y\n );\n } else {\n ctx.quadraticCurveTo(\n viaNode1.x,\n viaNode1.y,\n this.toPoint.x,\n this.toPoint.y\n );\n }\n } else {\n // fallback to normal straight edge\n ctx.lineTo(this.toPoint.x, this.toPoint.y);\n }\n\n // draw a background\n this.drawBackground(ctx, values);\n\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n ctx.stroke();\n this.disableShadow(ctx, values);\n }\n\n /** @inheritDoc */\n public getViaNode(): Via {\n return this._getViaCoordinates();\n }\n}\n","import { BezierEdgeBase } from \"./util/bezier-edge-base\";\nimport {\n EdgeFormattingValues,\n Label,\n EdgeOptions,\n Point,\n PointT,\n SelectiveRequired,\n VBody,\n VNode,\n} from \"./util/types\";\n\n/**\n * A Dynamic Bezier Edge. Bezier curves are used to model smooth gradual\n * curves in paths between nodes. The Dynamic piece refers to how the curve\n * reacts to physics changes.\n *\n * @augments BezierEdgeBase\n */\nexport class BezierEdgeDynamic extends BezierEdgeBase {\n public via: VNode = this.via; // constructor → super → super → setOptions → setupSupportNode\n private readonly _boundFunction: () => void;\n\n /**\n * Create a new instance.\n *\n * @param options - The options object of given edge.\n * @param body - The body of the network.\n * @param labelModule - Label module.\n */\n public constructor(options: EdgeOptions, body: VBody, labelModule: Label) {\n //this.via = undefined; // Here for completeness but not allowed to defined before super() is invoked.\n super(options, body, labelModule); // --> this calls the setOptions below\n this._boundFunction = (): void => {\n this.positionBezierNode();\n };\n this._body.emitter.on(\"_repositionBezierNodes\", this._boundFunction);\n }\n\n /** @inheritDoc */\n public setOptions(options: EdgeOptions): void {\n super.setOptions(options);\n\n // check if the physics has changed.\n let physicsChange = false;\n if (this.options.physics !== options.physics) {\n physicsChange = true;\n }\n\n // set the options and the to and from nodes\n this.options = options;\n this.id = this.options.id;\n this.from = this._body.nodes[this.options.from];\n this.to = this._body.nodes[this.options.to];\n\n // setup the support node and connect\n this.setupSupportNode();\n this.connect();\n\n // when we change the physics state of the edge, we reposition the support node.\n if (physicsChange === true) {\n this.via.setOptions({ physics: this.options.physics });\n this.positionBezierNode();\n }\n }\n\n /** @inheritDoc */\n public connect(): void {\n this.from = this._body.nodes[this.options.from];\n this.to = this._body.nodes[this.options.to];\n if (\n this.from === undefined ||\n this.to === undefined ||\n this.options.physics === false\n ) {\n this.via.setOptions({ physics: false });\n } else {\n // fix weird behaviour where a self referencing node has physics enabled\n if (this.from.id === this.to.id) {\n this.via.setOptions({ physics: false });\n } else {\n this.via.setOptions({ physics: true });\n }\n }\n }\n\n /** @inheritDoc */\n public cleanup(): boolean {\n this._body.emitter.off(\"_repositionBezierNodes\", this._boundFunction);\n if (this.via !== undefined) {\n delete this._body.nodes[this.via.id];\n this.via = undefined;\n return true;\n }\n return false;\n }\n\n /**\n * Create and add a support node if not already present.\n *\n * @remarks\n * Bezier curves require an anchor point to calculate the smooth flow.\n * These points are nodes.\n * These nodes are invisible but are used for the force calculation.\n *\n * The changed data is not called, if needed, it is returned by the main edge constructor.\n */\n public setupSupportNode(): void {\n if (this.via === undefined) {\n const nodeId = \"edgeId:\" + this.id;\n const node = this._body.functions.createNode({\n id: nodeId,\n shape: \"circle\",\n physics: true,\n hidden: true,\n });\n this._body.nodes[nodeId] = node;\n this.via = node;\n this.via.parentEdgeId = this.id;\n this.positionBezierNode();\n }\n }\n\n /**\n * Position bezier node.\n */\n public positionBezierNode(): void {\n if (\n this.via !== undefined &&\n this.from !== undefined &&\n this.to !== undefined\n ) {\n this.via.x = 0.5 * (this.from.x + this.to.x);\n this.via.y = 0.5 * (this.from.y + this.to.y);\n } else if (this.via !== undefined) {\n this.via.x = 0;\n this.via.y = 0;\n }\n }\n\n /** @inheritDoc */\n protected _line(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n | \"backgroundColor\"\n | \"backgroundSize\"\n | \"shadowColor\"\n | \"shadowSize\"\n | \"shadowX\"\n | \"shadowY\"\n >,\n viaNode: VNode\n ): void {\n this._bezierCurve(ctx, values, viaNode);\n }\n\n /** @inheritDoc */\n protected _getViaCoordinates(): Point {\n return this.via;\n }\n\n /** @inheritDoc */\n public getViaNode(): Point {\n return this.via;\n }\n\n /** @inheritDoc */\n public getPoint(position: number, viaNode: Point = this.via): Point {\n if (this.from === this.to) {\n const [cx, cy, cr] = this._getCircleData();\n const a = 2 * Math.PI * (1 - position);\n return {\n x: cx + cr * Math.sin(a),\n y: cy + cr - cr * (1 - Math.cos(a)),\n };\n } else {\n return {\n x:\n Math.pow(1 - position, 2) * this.fromPoint.x +\n 2 * position * (1 - position) * viaNode.x +\n Math.pow(position, 2) * this.toPoint.x,\n y:\n Math.pow(1 - position, 2) * this.fromPoint.y +\n 2 * position * (1 - position) * viaNode.y +\n Math.pow(position, 2) * this.toPoint.y,\n };\n }\n }\n\n /** @inheritDoc */\n protected _findBorderPosition(\n nearNode: VNode,\n ctx: CanvasRenderingContext2D\n ): PointT {\n return this._findBorderPositionBezier(nearNode, ctx, this.via);\n }\n\n /** @inheritDoc */\n protected _getDistanceToEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number\n ): number {\n // x3,y3 is the point\n return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, this.via);\n }\n}\n","import { BezierEdgeBase } from \"./util/bezier-edge-base\";\nimport {\n EdgeFormattingValues,\n Label,\n EdgeOptions,\n Point,\n PointT,\n SelectiveRequired,\n VBody,\n VNode,\n} from \"./util/types\";\n\n/**\n * A Static Bezier Edge. Bezier curves are used to model smooth gradual curves in paths between nodes.\n */\nexport class BezierEdgeStatic extends BezierEdgeBase {\n /**\n * Create a new instance.\n *\n * @param options - The options object of given edge.\n * @param body - The body of the network.\n * @param labelModule - Label module.\n */\n public constructor(options: EdgeOptions, body: VBody, labelModule: Label) {\n super(options, body, labelModule);\n }\n\n /** @inheritDoc */\n protected _line(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n | \"backgroundColor\"\n | \"backgroundSize\"\n | \"shadowColor\"\n | \"shadowSize\"\n | \"shadowX\"\n | \"shadowY\"\n >,\n viaNode: Point\n ): void {\n this._bezierCurve(ctx, values, viaNode);\n }\n\n /** @inheritDoc */\n public getViaNode(): Point {\n return this._getViaCoordinates();\n }\n\n /**\n * Compute the coordinates of the via node.\n *\n * @remarks\n * We do not use the to and fromPoints here to make the via nodes the same as edges without arrows.\n * @returns Cartesian coordinates of the via node.\n */\n protected _getViaCoordinates(): Point {\n // Assumption: x/y coordinates in from/to always defined\n const factor = this.options.smooth.roundness;\n const type = this.options.smooth.type;\n let dx = Math.abs(this.from.x - this.to.x);\n let dy = Math.abs(this.from.y - this.to.y);\n if (type === \"discrete\" || type === \"diagonalCross\") {\n let stepX;\n let stepY;\n\n if (dx <= dy) {\n stepX = stepY = factor * dy;\n } else {\n stepX = stepY = factor * dx;\n }\n\n if (this.from.x > this.to.x) {\n stepX = -stepX;\n }\n if (this.from.y >= this.to.y) {\n stepY = -stepY;\n }\n\n let xVia = this.from.x + stepX;\n let yVia = this.from.y + stepY;\n\n if (type === \"discrete\") {\n if (dx <= dy) {\n xVia = dx < factor * dy ? this.from.x : xVia;\n } else {\n yVia = dy < factor * dx ? this.from.y : yVia;\n }\n }\n\n return { x: xVia, y: yVia };\n } else if (type === \"straightCross\") {\n let stepX = (1 - factor) * dx;\n let stepY = (1 - factor) * dy;\n\n if (dx <= dy) {\n // up - down\n stepX = 0;\n if (this.from.y < this.to.y) {\n stepY = -stepY;\n }\n } else {\n // left - right\n if (this.from.x < this.to.x) {\n stepX = -stepX;\n }\n stepY = 0;\n }\n\n return {\n x: this.to.x + stepX,\n y: this.to.y + stepY,\n };\n } else if (type === \"horizontal\") {\n let stepX = (1 - factor) * dx;\n if (this.from.x < this.to.x) {\n stepX = -stepX;\n }\n\n return {\n x: this.to.x + stepX,\n y: this.from.y,\n };\n } else if (type === \"vertical\") {\n let stepY = (1 - factor) * dy;\n if (this.from.y < this.to.y) {\n stepY = -stepY;\n }\n\n return {\n x: this.from.x,\n y: this.to.y + stepY,\n };\n } else if (type === \"curvedCW\") {\n dx = this.to.x - this.from.x;\n dy = this.from.y - this.to.y;\n const radius = Math.sqrt(dx * dx + dy * dy);\n const pi = Math.PI;\n\n const originalAngle = Math.atan2(dy, dx);\n const myAngle = (originalAngle + (factor * 0.5 + 0.5) * pi) % (2 * pi);\n\n return {\n x: this.from.x + (factor * 0.5 + 0.5) * radius * Math.sin(myAngle),\n y: this.from.y + (factor * 0.5 + 0.5) * radius * Math.cos(myAngle),\n };\n } else if (type === \"curvedCCW\") {\n dx = this.to.x - this.from.x;\n dy = this.from.y - this.to.y;\n const radius = Math.sqrt(dx * dx + dy * dy);\n const pi = Math.PI;\n\n const originalAngle = Math.atan2(dy, dx);\n const myAngle = (originalAngle + (-factor * 0.5 + 0.5) * pi) % (2 * pi);\n\n return {\n x: this.from.x + (factor * 0.5 + 0.5) * radius * Math.sin(myAngle),\n y: this.from.y + (factor * 0.5 + 0.5) * radius * Math.cos(myAngle),\n };\n } else {\n // continuous\n let stepX;\n let stepY;\n\n if (dx <= dy) {\n stepX = stepY = factor * dy;\n } else {\n stepX = stepY = factor * dx;\n }\n\n if (this.from.x > this.to.x) {\n stepX = -stepX;\n }\n if (this.from.y >= this.to.y) {\n stepY = -stepY;\n }\n\n let xVia = this.from.x + stepX;\n let yVia = this.from.y + stepY;\n\n if (dx <= dy) {\n if (this.from.x <= this.to.x) {\n xVia = this.to.x < xVia ? this.to.x : xVia;\n } else {\n xVia = this.to.x > xVia ? this.to.x : xVia;\n }\n } else {\n if (this.from.y >= this.to.y) {\n yVia = this.to.y > yVia ? this.to.y : yVia;\n } else {\n yVia = this.to.y < yVia ? this.to.y : yVia;\n }\n }\n\n return { x: xVia, y: yVia };\n }\n }\n\n /** @inheritDoc */\n protected _findBorderPosition(\n nearNode: VNode,\n ctx: CanvasRenderingContext2D,\n options: { via?: Point } = {}\n ): PointT {\n return this._findBorderPositionBezier(nearNode, ctx, options.via);\n }\n\n /** @inheritDoc */\n protected _getDistanceToEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n viaNode = this._getViaCoordinates()\n ) {\n // x3,y3 is the point\n return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, viaNode);\n }\n\n /** @inheritDoc */\n public getPoint(\n position: number,\n viaNode: Point = this._getViaCoordinates()\n ): Point {\n const t = position;\n const x =\n Math.pow(1 - t, 2) * this.fromPoint.x +\n 2 * t * (1 - t) * viaNode.x +\n Math.pow(t, 2) * this.toPoint.x;\n const y =\n Math.pow(1 - t, 2) * this.fromPoint.y +\n 2 * t * (1 - t) * viaNode.y +\n Math.pow(t, 2) * this.toPoint.y;\n\n return { x: x, y: y };\n }\n}\n","import { BezierEdgeBase } from \"./bezier-edge-base\";\nimport { Label, EdgeOptions, Point, VBody } from \"./types\";\n\n/**\n * A Base Class for all Cubic Bezier Edges. Bezier curves are used to model\n * smooth gradual curves in paths between nodes.\n *\n * @augments BezierEdgeBase\n */\nexport abstract class CubicBezierEdgeBase extends BezierEdgeBase {\n /**\n * Create a new instance.\n *\n * @param options - The options object of given edge.\n * @param body - The body of the network.\n * @param labelModule - Label module.\n */\n public constructor(options: EdgeOptions, body: VBody, labelModule: Label) {\n super(options, body, labelModule);\n }\n\n /**\n * Calculate the distance between a point (x3,y3) and a line segment from (x1,y1) to (x2,y2).\n *\n * @remarks\n * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment\n * https://en.wikipedia.org/wiki/B%C3%A9zier_curve\n * @param x1 - First end of the line segment on the x axis.\n * @param y1 - First end of the line segment on the y axis.\n * @param x2 - Second end of the line segment on the x axis.\n * @param y2 - Second end of the line segment on the y axis.\n * @param x3 - Position of the point on the x axis.\n * @param y3 - Position of the point on the y axis.\n * @param via1 - The first point this edge passes through.\n * @param via2 - The second point this edge passes through.\n * @returns The distance between the line segment and the point.\n */\n protected _getDistanceToBezierEdge2(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n via1: Point,\n via2: Point\n ): number {\n // x3,y3 is the point\n let minDistance = 1e9;\n let lastX = x1;\n let lastY = y1;\n const vec = [0, 0, 0, 0];\n for (let i = 1; i < 10; i++) {\n const t = 0.1 * i;\n vec[0] = Math.pow(1 - t, 3);\n vec[1] = 3 * t * Math.pow(1 - t, 2);\n vec[2] = 3 * Math.pow(t, 2) * (1 - t);\n vec[3] = Math.pow(t, 3);\n const x = vec[0] * x1 + vec[1] * via1.x + vec[2] * via2.x + vec[3] * x2;\n const y = vec[0] * y1 + vec[1] * via1.y + vec[2] * via2.y + vec[3] * y2;\n if (i > 0) {\n const distance = this._getDistanceToLine(lastX, lastY, x, y, x3, y3);\n minDistance = distance < minDistance ? distance : minDistance;\n }\n lastX = x;\n lastY = y;\n }\n\n return minDistance;\n }\n}\n","import { CubicBezierEdgeBase } from \"./util/cubic-bezier-edge-base\";\nimport {\n EdgeFormattingValues,\n Label,\n EdgeOptions,\n Point,\n PointT,\n SelectiveRequired,\n VBody,\n VNode,\n} from \"./util/types\";\n\n/**\n * A Cubic Bezier Edge. Bezier curves are used to model smooth gradual curves in paths between nodes.\n */\nexport class CubicBezierEdge extends CubicBezierEdgeBase<[Point, Point]> {\n /**\n * Create a new instance.\n *\n * @param options - The options object of given edge.\n * @param body - The body of the network.\n * @param labelModule - Label module.\n */\n public constructor(options: EdgeOptions, body: VBody, labelModule: Label) {\n super(options, body, labelModule);\n }\n\n /** @inheritDoc */\n protected _line(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n | \"backgroundColor\"\n | \"backgroundSize\"\n | \"shadowColor\"\n | \"shadowSize\"\n | \"shadowX\"\n | \"shadowY\"\n >,\n viaNodes: [Point, Point]\n ): void {\n // get the coordinates of the support points.\n const via1 = viaNodes[0];\n const via2 = viaNodes[1];\n this._bezierCurve(ctx, values, via1, via2);\n }\n\n /**\n * Compute the additional points the edge passes through.\n *\n * @returns Cartesian coordinates of the points the edge passes through.\n */\n protected _getViaCoordinates(): [Point, Point] {\n const dx = this.from.x - this.to.x;\n const dy = this.from.y - this.to.y;\n\n let x1: number;\n let y1: number;\n let x2: number;\n let y2: number;\n const roundness = this.options.smooth.roundness;\n\n // horizontal if x > y or if direction is forced or if direction is horizontal\n if (\n (Math.abs(dx) > Math.abs(dy) ||\n this.options.smooth.forceDirection === true ||\n this.options.smooth.forceDirection === \"horizontal\") &&\n this.options.smooth.forceDirection !== \"vertical\"\n ) {\n y1 = this.from.y;\n y2 = this.to.y;\n x1 = this.from.x - roundness * dx;\n x2 = this.to.x + roundness * dx;\n } else {\n y1 = this.from.y - roundness * dy;\n y2 = this.to.y + roundness * dy;\n x1 = this.from.x;\n x2 = this.to.x;\n }\n\n return [\n { x: x1, y: y1 },\n { x: x2, y: y2 },\n ];\n }\n\n /** @inheritDoc */\n public getViaNode(): [Point, Point] {\n return this._getViaCoordinates();\n }\n\n /** @inheritDoc */\n protected _findBorderPosition(\n nearNode: VNode,\n ctx: CanvasRenderingContext2D\n ): PointT {\n return this._findBorderPositionBezier(nearNode, ctx);\n }\n\n /** @inheritDoc */\n protected _getDistanceToEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n [via1, via2]: [Point, Point] = this._getViaCoordinates()\n ): number {\n // x3,y3 is the point\n return this._getDistanceToBezierEdge2(x1, y1, x2, y2, x3, y3, via1, via2);\n }\n\n /** @inheritDoc */\n public getPoint(\n position: number,\n [via1, via2]: [Point, Point] = this._getViaCoordinates()\n ): Point {\n const t = position;\n const vec: [number, number, number, number] = [\n Math.pow(1 - t, 3),\n 3 * t * Math.pow(1 - t, 2),\n 3 * Math.pow(t, 2) * (1 - t),\n Math.pow(t, 3),\n ];\n const x =\n vec[0] * this.fromPoint.x +\n vec[1] * via1.x +\n vec[2] * via2.x +\n vec[3] * this.toPoint.x;\n const y =\n vec[0] * this.fromPoint.y +\n vec[1] * via1.y +\n vec[2] * via2.y +\n vec[3] * this.toPoint.y;\n\n return { x: x, y: y };\n }\n}\n","import { EdgeBase } from \"./util/edge-base\";\nimport {\n EdgeFormattingValues,\n Label,\n EdgeOptions,\n Point,\n PointT,\n SelectiveRequired,\n VBody,\n VNode,\n} from \"./util/types\";\n\n/**\n * A Straight Edge.\n */\nexport class StraightEdge extends EdgeBase {\n /**\n * Create a new instance.\n *\n * @param options - The options object of given edge.\n * @param body - The body of the network.\n * @param labelModule - Label module.\n */\n public constructor(options: EdgeOptions, body: VBody, labelModule: Label) {\n super(options, body, labelModule);\n }\n\n /** @inheritDoc */\n protected _line(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"shadowColor\" | \"shadowSize\" | \"shadowX\" | \"shadowY\"\n >\n ): void {\n // draw a straight line\n ctx.beginPath();\n ctx.moveTo(this.fromPoint.x, this.fromPoint.y);\n ctx.lineTo(this.toPoint.x, this.toPoint.y);\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n ctx.stroke();\n this.disableShadow(ctx, values);\n }\n\n /** @inheritDoc */\n public getViaNode(): undefined {\n return undefined;\n }\n\n /** @inheritDoc */\n public getPoint(position: number): Point {\n return {\n x: (1 - position) * this.fromPoint.x + position * this.toPoint.x,\n y: (1 - position) * this.fromPoint.y + position * this.toPoint.y,\n };\n }\n\n /** @inheritDoc */\n protected _findBorderPosition(\n nearNode: VNode,\n ctx: CanvasRenderingContext2D\n ): PointT {\n let node1 = this.to;\n let node2 = this.from;\n if (nearNode.id === this.from.id) {\n node1 = this.from;\n node2 = this.to;\n }\n\n const angle = Math.atan2(node1.y - node2.y, node1.x - node2.x);\n const dx = node1.x - node2.x;\n const dy = node1.y - node2.y;\n const edgeSegmentLength = Math.sqrt(dx * dx + dy * dy);\n const toBorderDist = nearNode.distanceToBorder(ctx, angle);\n const toBorderPoint =\n (edgeSegmentLength - toBorderDist) / edgeSegmentLength;\n\n return {\n x: (1 - toBorderPoint) * node2.x + toBorderPoint * node1.x,\n y: (1 - toBorderPoint) * node2.y + toBorderPoint * node1.y,\n t: 0,\n };\n }\n\n /** @inheritDoc */\n protected _getDistanceToEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number\n ): number {\n // x3,y3 is the point\n return this._getDistanceToLine(x1, y1, x2, y2, x3, y3);\n }\n}\n","import {\n bridgeObject,\n deepExtend,\n isString,\n mergeOptions,\n selectiveDeepExtend,\n} from \"vis-util/esnext\";\nimport Label from \"./shared/Label\";\nimport {\n choosify,\n getSelfRefCoordinates,\n isValidLabel,\n pointInRect,\n} from \"./shared/ComponentUtil\";\nimport {\n BezierEdgeDynamic,\n BezierEdgeStatic,\n CubicBezierEdge,\n StraightEdge,\n} from \"./edges\";\n\n/**\n * An edge connects two nodes and has a specific direction.\n */\nclass Edge {\n /**\n * @param {object} options values specific to this edge, must contain at least 'from' and 'to'\n * @param {object} body shared state from Network instance\n * @param {Network.Images} imagelist A list with images. Only needed when the edge has image arrows.\n * @param {object} globalOptions options from the EdgesHandler instance\n * @param {object} defaultOptions default options from the EdgeHandler instance. Value and reference are constant\n */\n constructor(options, body, imagelist, globalOptions, defaultOptions) {\n if (body === undefined) {\n throw new Error(\"No body provided\");\n }\n\n // Since globalOptions is constant in values as well as reference,\n // Following needs to be done only once.\n\n this.options = bridgeObject(globalOptions);\n this.globalOptions = globalOptions;\n this.defaultOptions = defaultOptions;\n this.body = body;\n this.imagelist = imagelist;\n\n // initialize variables\n this.id = undefined;\n this.fromId = undefined;\n this.toId = undefined;\n this.selected = false;\n this.hover = false;\n this.labelDirty = true;\n\n this.baseWidth = this.options.width;\n this.baseFontSize = this.options.font.size;\n\n this.from = undefined; // a node\n this.to = undefined; // a node\n\n this.edgeType = undefined;\n\n this.connected = false;\n\n this.labelModule = new Label(\n this.body,\n this.options,\n true /* It's an edge label */\n );\n this.setOptions(options);\n }\n\n /**\n * Set or overwrite options for the edge\n *\n * @param {object} options an object with options\n * @returns {undefined|boolean} undefined if no options, true if layout affecting data changed, false otherwise.\n */\n setOptions(options) {\n if (!options) {\n return;\n }\n\n // Following options if changed affect the layout.\n let affectsLayout =\n (typeof options.physics !== \"undefined\" &&\n this.options.physics !== options.physics) ||\n (typeof options.hidden !== \"undefined\" &&\n (this.options.hidden || false) !== (options.hidden || false)) ||\n (typeof options.from !== \"undefined\" &&\n this.options.from !== options.from) ||\n (typeof options.to !== \"undefined\" && this.options.to !== options.to);\n\n Edge.parseOptions(this.options, options, true, this.globalOptions);\n\n if (options.id !== undefined) {\n this.id = options.id;\n }\n if (options.from !== undefined) {\n this.fromId = options.from;\n }\n if (options.to !== undefined) {\n this.toId = options.to;\n }\n if (options.title !== undefined) {\n this.title = options.title;\n }\n if (options.value !== undefined) {\n options.value = parseFloat(options.value);\n }\n\n const pile = [options, this.options, this.defaultOptions];\n this.chooser = choosify(\"edge\", pile);\n\n // update label Module\n this.updateLabelModule(options);\n\n // Update edge type, this if changed affects the layout.\n affectsLayout = this.updateEdgeType() || affectsLayout;\n\n // if anything has been updates, reset the selection width and the hover width\n this._setInteractionWidths();\n\n // A node is connected when it has a from and to node that both exist in the network.body.nodes.\n this.connect();\n\n return affectsLayout;\n }\n\n /**\n *\n * @param {object} parentOptions\n * @param {object} newOptions\n * @param {boolean} [allowDeletion=false]\n * @param {object} [globalOptions={}]\n * @param {boolean} [copyFromGlobals=false]\n */\n static parseOptions(\n parentOptions,\n newOptions,\n allowDeletion = false,\n globalOptions = {},\n copyFromGlobals = false\n ) {\n const fields = [\n \"endPointOffset\",\n \"arrowStrikethrough\",\n \"id\",\n \"from\",\n \"hidden\",\n \"hoverWidth\",\n \"labelHighlightBold\",\n \"length\",\n \"line\",\n \"opacity\",\n \"physics\",\n \"scaling\",\n \"selectionWidth\",\n \"selfReferenceSize\",\n \"selfReference\",\n \"to\",\n \"title\",\n \"value\",\n \"width\",\n \"font\",\n \"chosen\",\n \"widthConstraint\",\n ];\n\n // only deep extend the items in the field array. These do not have shorthand.\n selectiveDeepExtend(fields, parentOptions, newOptions, allowDeletion);\n\n // Only use endPointOffset values (from and to) if it's valid values\n if (\n newOptions.endPointOffset !== undefined &&\n newOptions.endPointOffset.from !== undefined\n ) {\n if (Number.isFinite(newOptions.endPointOffset.from)) {\n parentOptions.endPointOffset.from = newOptions.endPointOffset.from;\n } else {\n parentOptions.endPointOffset.from =\n globalOptions.endPointOffset.from !== undefined\n ? globalOptions.endPointOffset.from\n : 0;\n console.error(\"endPointOffset.from is not a valid number\");\n }\n }\n\n if (\n newOptions.endPointOffset !== undefined &&\n newOptions.endPointOffset.to !== undefined\n ) {\n if (Number.isFinite(newOptions.endPointOffset.to)) {\n parentOptions.endPointOffset.to = newOptions.endPointOffset.to;\n } else {\n parentOptions.endPointOffset.to =\n globalOptions.endPointOffset.to !== undefined\n ? globalOptions.endPointOffset.to\n : 0;\n console.error(\"endPointOffset.to is not a valid number\");\n }\n }\n\n // Only copy label if it's a legal value.\n if (isValidLabel(newOptions.label)) {\n parentOptions.label = newOptions.label;\n } else if (!isValidLabel(parentOptions.label)) {\n parentOptions.label = undefined;\n }\n\n mergeOptions(parentOptions, newOptions, \"smooth\", globalOptions);\n mergeOptions(parentOptions, newOptions, \"shadow\", globalOptions);\n mergeOptions(parentOptions, newOptions, \"background\", globalOptions);\n\n if (newOptions.dashes !== undefined && newOptions.dashes !== null) {\n parentOptions.dashes = newOptions.dashes;\n } else if (allowDeletion === true && newOptions.dashes === null) {\n parentOptions.dashes = Object.create(globalOptions.dashes); // this sets the pointer of the option back to the global option.\n }\n\n // set the scaling newOptions\n if (newOptions.scaling !== undefined && newOptions.scaling !== null) {\n if (newOptions.scaling.min !== undefined) {\n parentOptions.scaling.min = newOptions.scaling.min;\n }\n if (newOptions.scaling.max !== undefined) {\n parentOptions.scaling.max = newOptions.scaling.max;\n }\n mergeOptions(\n parentOptions.scaling,\n newOptions.scaling,\n \"label\",\n globalOptions.scaling\n );\n } else if (allowDeletion === true && newOptions.scaling === null) {\n parentOptions.scaling = Object.create(globalOptions.scaling); // this sets the pointer of the option back to the global option.\n }\n\n // handle multiple input cases for arrows\n if (newOptions.arrows !== undefined && newOptions.arrows !== null) {\n if (typeof newOptions.arrows === \"string\") {\n const arrows = newOptions.arrows.toLowerCase();\n parentOptions.arrows.to.enabled = arrows.indexOf(\"to\") != -1;\n parentOptions.arrows.middle.enabled = arrows.indexOf(\"middle\") != -1;\n parentOptions.arrows.from.enabled = arrows.indexOf(\"from\") != -1;\n } else if (typeof newOptions.arrows === \"object\") {\n mergeOptions(\n parentOptions.arrows,\n newOptions.arrows,\n \"to\",\n globalOptions.arrows\n );\n mergeOptions(\n parentOptions.arrows,\n newOptions.arrows,\n \"middle\",\n globalOptions.arrows\n );\n mergeOptions(\n parentOptions.arrows,\n newOptions.arrows,\n \"from\",\n globalOptions.arrows\n );\n } else {\n throw new Error(\n \"The arrow newOptions can only be an object or a string. Refer to the documentation. You used:\" +\n JSON.stringify(newOptions.arrows)\n );\n }\n } else if (allowDeletion === true && newOptions.arrows === null) {\n parentOptions.arrows = Object.create(globalOptions.arrows); // this sets the pointer of the option back to the global option.\n }\n\n // handle multiple input cases for color\n if (newOptions.color !== undefined && newOptions.color !== null) {\n const fromColor = isString(newOptions.color)\n ? {\n color: newOptions.color,\n highlight: newOptions.color,\n hover: newOptions.color,\n inherit: false,\n opacity: 1,\n }\n : newOptions.color;\n const toColor = parentOptions.color;\n\n // If passed, fill in values from default options - required in the case of no prototype bridging\n if (copyFromGlobals) {\n deepExtend(toColor, globalOptions.color, false, allowDeletion);\n } else {\n // Clear local properties - need to do it like this in order to retain prototype bridges\n for (const i in toColor) {\n if (Object.prototype.hasOwnProperty.call(toColor, i)) {\n delete toColor[i];\n }\n }\n }\n\n if (isString(toColor)) {\n toColor.color = toColor;\n toColor.highlight = toColor;\n toColor.hover = toColor;\n toColor.inherit = false;\n if (fromColor.opacity === undefined) {\n toColor.opacity = 1.0; // set default\n }\n } else {\n let colorsDefined = false;\n if (fromColor.color !== undefined) {\n toColor.color = fromColor.color;\n colorsDefined = true;\n }\n if (fromColor.highlight !== undefined) {\n toColor.highlight = fromColor.highlight;\n colorsDefined = true;\n }\n if (fromColor.hover !== undefined) {\n toColor.hover = fromColor.hover;\n colorsDefined = true;\n }\n if (fromColor.inherit !== undefined) {\n toColor.inherit = fromColor.inherit;\n }\n if (fromColor.opacity !== undefined) {\n toColor.opacity = Math.min(1, Math.max(0, fromColor.opacity));\n }\n\n if (colorsDefined === true) {\n toColor.inherit = false;\n } else {\n if (toColor.inherit === undefined) {\n toColor.inherit = \"from\"; // Set default\n }\n }\n }\n } else if (allowDeletion === true && newOptions.color === null) {\n parentOptions.color = bridgeObject(globalOptions.color); // set the object back to the global options\n }\n\n if (allowDeletion === true && newOptions.font === null) {\n parentOptions.font = bridgeObject(globalOptions.font); // set the object back to the global options\n }\n\n if (Object.prototype.hasOwnProperty.call(newOptions, \"selfReferenceSize\")) {\n console.warn(\n \"The selfReferenceSize property has been deprecated. Please use selfReference property instead. The selfReference can be set like thise selfReference:{size:30, angle:Math.PI / 4}\"\n );\n parentOptions.selfReference.size = newOptions.selfReferenceSize;\n }\n }\n\n /**\n *\n * @returns {ArrowOptions}\n */\n getFormattingValues() {\n const toArrow =\n this.options.arrows.to === true ||\n this.options.arrows.to.enabled === true;\n const fromArrow =\n this.options.arrows.from === true ||\n this.options.arrows.from.enabled === true;\n const middleArrow =\n this.options.arrows.middle === true ||\n this.options.arrows.middle.enabled === true;\n const inheritsColor = this.options.color.inherit;\n const values = {\n toArrow: toArrow,\n toArrowScale: this.options.arrows.to.scaleFactor,\n toArrowType: this.options.arrows.to.type,\n toArrowSrc: this.options.arrows.to.src,\n toArrowImageWidth: this.options.arrows.to.imageWidth,\n toArrowImageHeight: this.options.arrows.to.imageHeight,\n middleArrow: middleArrow,\n middleArrowScale: this.options.arrows.middle.scaleFactor,\n middleArrowType: this.options.arrows.middle.type,\n middleArrowSrc: this.options.arrows.middle.src,\n middleArrowImageWidth: this.options.arrows.middle.imageWidth,\n middleArrowImageHeight: this.options.arrows.middle.imageHeight,\n fromArrow: fromArrow,\n fromArrowScale: this.options.arrows.from.scaleFactor,\n fromArrowType: this.options.arrows.from.type,\n fromArrowSrc: this.options.arrows.from.src,\n fromArrowImageWidth: this.options.arrows.from.imageWidth,\n fromArrowImageHeight: this.options.arrows.from.imageHeight,\n arrowStrikethrough: this.options.arrowStrikethrough,\n color: inheritsColor ? undefined : this.options.color.color,\n inheritsColor: inheritsColor,\n opacity: this.options.color.opacity,\n hidden: this.options.hidden,\n length: this.options.length,\n shadow: this.options.shadow.enabled,\n shadowColor: this.options.shadow.color,\n shadowSize: this.options.shadow.size,\n shadowX: this.options.shadow.x,\n shadowY: this.options.shadow.y,\n dashes: this.options.dashes,\n width: this.options.width,\n background: this.options.background.enabled,\n backgroundColor: this.options.background.color,\n backgroundSize: this.options.background.size,\n backgroundDashes: this.options.background.dashes,\n };\n if (this.selected || this.hover) {\n if (this.chooser === true) {\n if (this.selected) {\n const selectedWidth = this.options.selectionWidth;\n if (typeof selectedWidth === \"function\") {\n values.width = selectedWidth(values.width);\n } else if (typeof selectedWidth === \"number\") {\n values.width += selectedWidth;\n }\n values.width = Math.max(values.width, 0.3 / this.body.view.scale);\n values.color = this.options.color.highlight;\n values.shadow = this.options.shadow.enabled;\n } else if (this.hover) {\n const hoverWidth = this.options.hoverWidth;\n if (typeof hoverWidth === \"function\") {\n values.width = hoverWidth(values.width);\n } else if (typeof hoverWidth === \"number\") {\n values.width += hoverWidth;\n }\n values.width = Math.max(values.width, 0.3 / this.body.view.scale);\n values.color = this.options.color.hover;\n values.shadow = this.options.shadow.enabled;\n }\n } else if (typeof this.chooser === \"function\") {\n this.chooser(values, this.options.id, this.selected, this.hover);\n if (values.color !== undefined) {\n values.inheritsColor = false;\n }\n if (values.shadow === false) {\n if (\n values.shadowColor !== this.options.shadow.color ||\n values.shadowSize !== this.options.shadow.size ||\n values.shadowX !== this.options.shadow.x ||\n values.shadowY !== this.options.shadow.y\n ) {\n values.shadow = true;\n }\n }\n }\n } else {\n values.shadow = this.options.shadow.enabled;\n values.width = Math.max(values.width, 0.3 / this.body.view.scale);\n }\n return values;\n }\n\n /**\n * update the options in the label module\n *\n * @param {object} options\n */\n updateLabelModule(options) {\n const pile = [\n options,\n this.options,\n this.globalOptions, // Currently set global edge options\n this.defaultOptions,\n ];\n\n this.labelModule.update(this.options, pile);\n\n if (this.labelModule.baseSize !== undefined) {\n this.baseFontSize = this.labelModule.baseSize;\n }\n }\n\n /**\n * update the edge type, set the options\n *\n * @returns {boolean}\n */\n updateEdgeType() {\n const smooth = this.options.smooth;\n let dataChanged = false;\n let changeInType = true;\n if (this.edgeType !== undefined) {\n if (\n (this.edgeType instanceof BezierEdgeDynamic &&\n smooth.enabled === true &&\n smooth.type === \"dynamic\") ||\n (this.edgeType instanceof CubicBezierEdge &&\n smooth.enabled === true &&\n smooth.type === \"cubicBezier\") ||\n (this.edgeType instanceof BezierEdgeStatic &&\n smooth.enabled === true &&\n smooth.type !== \"dynamic\" &&\n smooth.type !== \"cubicBezier\") ||\n (this.edgeType instanceof StraightEdge && smooth.type.enabled === false)\n ) {\n changeInType = false;\n }\n if (changeInType === true) {\n dataChanged = this.cleanup();\n }\n }\n if (changeInType === true) {\n if (smooth.enabled === true) {\n if (smooth.type === \"dynamic\") {\n dataChanged = true;\n this.edgeType = new BezierEdgeDynamic(\n this.options,\n this.body,\n this.labelModule\n );\n } else if (smooth.type === \"cubicBezier\") {\n this.edgeType = new CubicBezierEdge(\n this.options,\n this.body,\n this.labelModule\n );\n } else {\n this.edgeType = new BezierEdgeStatic(\n this.options,\n this.body,\n this.labelModule\n );\n }\n } else {\n this.edgeType = new StraightEdge(\n this.options,\n this.body,\n this.labelModule\n );\n }\n } else {\n // if nothing changes, we just set the options.\n this.edgeType.setOptions(this.options);\n }\n return dataChanged;\n }\n\n /**\n * Connect an edge to its nodes\n */\n connect() {\n this.disconnect();\n\n this.from = this.body.nodes[this.fromId] || undefined;\n this.to = this.body.nodes[this.toId] || undefined;\n this.connected = this.from !== undefined && this.to !== undefined;\n\n if (this.connected === true) {\n this.from.attachEdge(this);\n this.to.attachEdge(this);\n } else {\n if (this.from) {\n this.from.detachEdge(this);\n }\n if (this.to) {\n this.to.detachEdge(this);\n }\n }\n\n this.edgeType.connect();\n }\n\n /**\n * Disconnect an edge from its nodes\n */\n disconnect() {\n if (this.from) {\n this.from.detachEdge(this);\n this.from = undefined;\n }\n if (this.to) {\n this.to.detachEdge(this);\n this.to = undefined;\n }\n\n this.connected = false;\n }\n\n /**\n * get the title of this edge.\n *\n * @returns {string} title The title of the edge, or undefined when no title\n * has been set.\n */\n getTitle() {\n return this.title;\n }\n\n /**\n * check if this node is selecte\n *\n * @returns {boolean} selected True if node is selected, else false\n */\n isSelected() {\n return this.selected;\n }\n\n /**\n * Retrieve the value of the edge. Can be undefined\n *\n * @returns {number} value\n */\n getValue() {\n return this.options.value;\n }\n\n /**\n * Adjust the value range of the edge. The edge will adjust it's width\n * based on its value.\n *\n * @param {number} min\n * @param {number} max\n * @param {number} total\n */\n setValueRange(min, max, total) {\n if (this.options.value !== undefined) {\n const scale = this.options.scaling.customScalingFunction(\n min,\n max,\n total,\n this.options.value\n );\n const widthDiff = this.options.scaling.max - this.options.scaling.min;\n if (this.options.scaling.label.enabled === true) {\n const fontDiff =\n this.options.scaling.label.max - this.options.scaling.label.min;\n this.options.font.size =\n this.options.scaling.label.min + scale * fontDiff;\n }\n this.options.width = this.options.scaling.min + scale * widthDiff;\n } else {\n this.options.width = this.baseWidth;\n this.options.font.size = this.baseFontSize;\n }\n\n this._setInteractionWidths();\n this.updateLabelModule();\n }\n\n /**\n *\n * @private\n */\n _setInteractionWidths() {\n if (typeof this.options.hoverWidth === \"function\") {\n this.edgeType.hoverWidth = this.options.hoverWidth(this.options.width);\n } else {\n this.edgeType.hoverWidth = this.options.hoverWidth + this.options.width;\n }\n if (typeof this.options.selectionWidth === \"function\") {\n this.edgeType.selectionWidth = this.options.selectionWidth(\n this.options.width\n );\n } else {\n this.edgeType.selectionWidth =\n this.options.selectionWidth + this.options.width;\n }\n }\n\n /**\n * Redraw a edge\n * Draw this edge in the given canvas\n * The 2d context of a HTML canvas can be retrieved by canvas.getContext(\"2d\");\n *\n * @param {CanvasRenderingContext2D} ctx\n */\n draw(ctx) {\n const values = this.getFormattingValues();\n if (values.hidden) {\n return;\n }\n\n // get the via node from the edge type\n const viaNode = this.edgeType.getViaNode();\n\n // draw line and label\n this.edgeType.drawLine(ctx, values, this.selected, this.hover, viaNode);\n this.drawLabel(ctx, viaNode);\n }\n\n /**\n * Redraw arrows\n * Draw this arrows in the given canvas\n * The 2d context of a HTML canvas can be retrieved by canvas.getContext(\"2d\");\n *\n * @param {CanvasRenderingContext2D} ctx\n */\n drawArrows(ctx) {\n const values = this.getFormattingValues();\n if (values.hidden) {\n return;\n }\n\n // get the via node from the edge type\n const viaNode = this.edgeType.getViaNode();\n const arrowData = {};\n\n // restore edge targets to defaults\n this.edgeType.fromPoint = this.edgeType.from;\n this.edgeType.toPoint = this.edgeType.to;\n\n // from and to arrows give a different end point for edges. we set them here\n if (values.fromArrow) {\n arrowData.from = this.edgeType.getArrowData(\n ctx,\n \"from\",\n viaNode,\n this.selected,\n this.hover,\n values\n );\n if (values.arrowStrikethrough === false)\n this.edgeType.fromPoint = arrowData.from.core;\n if (values.fromArrowSrc) {\n arrowData.from.image = this.imagelist.load(values.fromArrowSrc);\n }\n if (values.fromArrowImageWidth) {\n arrowData.from.imageWidth = values.fromArrowImageWidth;\n }\n if (values.fromArrowImageHeight) {\n arrowData.from.imageHeight = values.fromArrowImageHeight;\n }\n }\n if (values.toArrow) {\n arrowData.to = this.edgeType.getArrowData(\n ctx,\n \"to\",\n viaNode,\n this.selected,\n this.hover,\n values\n );\n if (values.arrowStrikethrough === false)\n this.edgeType.toPoint = arrowData.to.core;\n if (values.toArrowSrc) {\n arrowData.to.image = this.imagelist.load(values.toArrowSrc);\n }\n if (values.toArrowImageWidth) {\n arrowData.to.imageWidth = values.toArrowImageWidth;\n }\n if (values.toArrowImageHeight) {\n arrowData.to.imageHeight = values.toArrowImageHeight;\n }\n }\n\n // the middle arrow depends on the line, which can depend on the to and from arrows so we do this one lastly.\n if (values.middleArrow) {\n arrowData.middle = this.edgeType.getArrowData(\n ctx,\n \"middle\",\n viaNode,\n this.selected,\n this.hover,\n values\n );\n\n if (values.middleArrowSrc) {\n arrowData.middle.image = this.imagelist.load(values.middleArrowSrc);\n }\n if (values.middleArrowImageWidth) {\n arrowData.middle.imageWidth = values.middleArrowImageWidth;\n }\n if (values.middleArrowImageHeight) {\n arrowData.middle.imageHeight = values.middleArrowImageHeight;\n }\n }\n\n if (values.fromArrow) {\n this.edgeType.drawArrowHead(\n ctx,\n values,\n this.selected,\n this.hover,\n arrowData.from\n );\n }\n if (values.middleArrow) {\n this.edgeType.drawArrowHead(\n ctx,\n values,\n this.selected,\n this.hover,\n arrowData.middle\n );\n }\n if (values.toArrow) {\n this.edgeType.drawArrowHead(\n ctx,\n values,\n this.selected,\n this.hover,\n arrowData.to\n );\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {Node} viaNode\n */\n drawLabel(ctx, viaNode) {\n if (this.options.label !== undefined) {\n // set style\n const node1 = this.from;\n const node2 = this.to;\n\n if (this.labelModule.differentState(this.selected, this.hover)) {\n this.labelModule.getTextSize(ctx, this.selected, this.hover);\n }\n\n let point;\n if (node1.id != node2.id) {\n this.labelModule.pointToSelf = false;\n point = this.edgeType.getPoint(0.5, viaNode);\n ctx.save();\n\n const rotationPoint = this._getRotation(ctx);\n if (rotationPoint.angle != 0) {\n ctx.translate(rotationPoint.x, rotationPoint.y);\n ctx.rotate(rotationPoint.angle);\n }\n\n // draw the label\n this.labelModule.draw(ctx, point.x, point.y, this.selected, this.hover);\n\n /*\n // Useful debug code: draw a border around the label\n // This should **not** be enabled in production!\n var size = this.labelModule.getSize();; // ;; intentional so lint catches it\n ctx.strokeStyle = \"#ff0000\";\n ctx.strokeRect(size.left, size.top, size.width, size.height);\n // End debug code\n*/\n\n ctx.restore();\n } else {\n // Ignore the orientations.\n this.labelModule.pointToSelf = true;\n\n // get circle coordinates\n const coordinates = getSelfRefCoordinates(\n ctx,\n this.options.selfReference.angle,\n this.options.selfReference.size,\n node1\n );\n\n point = this._pointOnCircle(\n coordinates.x,\n coordinates.y,\n this.options.selfReference.size,\n this.options.selfReference.angle\n );\n\n this.labelModule.draw(ctx, point.x, point.y, this.selected, this.hover);\n }\n }\n }\n\n /**\n * Determine all visual elements of this edge instance, in which the given\n * point falls within the bounding shape.\n *\n * @param {point} point\n * @returns {Array.} list with the items which are on the point\n */\n getItemsOnPoint(point) {\n const ret = [];\n\n if (this.labelModule.visible()) {\n const rotationPoint = this._getRotation();\n if (pointInRect(this.labelModule.getSize(), point, rotationPoint)) {\n ret.push({ edgeId: this.id, labelId: 0 });\n }\n }\n\n const obj = {\n left: point.x,\n top: point.y,\n };\n\n if (this.isOverlappingWith(obj)) {\n ret.push({ edgeId: this.id });\n }\n\n return ret;\n }\n\n /**\n * Check if this object is overlapping with the provided object\n *\n * @param {object} obj an object with parameters left, top\n * @returns {boolean} True if location is located on the edge\n */\n isOverlappingWith(obj) {\n if (this.connected) {\n const distMax = 10;\n const xFrom = this.from.x;\n const yFrom = this.from.y;\n const xTo = this.to.x;\n const yTo = this.to.y;\n const xObj = obj.left;\n const yObj = obj.top;\n\n const dist = this.edgeType.getDistanceToEdge(\n xFrom,\n yFrom,\n xTo,\n yTo,\n xObj,\n yObj\n );\n\n return dist < distMax;\n } else {\n return false;\n }\n }\n\n /**\n * Determine the rotation point, if any.\n *\n * @param {CanvasRenderingContext2D} [ctx] if passed, do a recalculation of the label size\n * @returns {rotationPoint} the point to rotate around and the angle in radians to rotate\n * @private\n */\n _getRotation(ctx) {\n const viaNode = this.edgeType.getViaNode();\n const point = this.edgeType.getPoint(0.5, viaNode);\n\n if (ctx !== undefined) {\n this.labelModule.calculateLabelSize(\n ctx,\n this.selected,\n this.hover,\n point.x,\n point.y\n );\n }\n\n const ret = {\n x: point.x,\n y: this.labelModule.size.yLine,\n angle: 0,\n };\n\n if (!this.labelModule.visible()) {\n return ret; // Don't even bother doing the atan2, there's nothing to draw\n }\n\n if (this.options.font.align === \"horizontal\") {\n return ret; // No need to calculate angle\n }\n\n const dy = this.from.y - this.to.y;\n const dx = this.from.x - this.to.x;\n let angle = Math.atan2(dy, dx); // radians\n\n // rotate so that label is readable\n if ((angle < -1 && dx < 0) || (angle > 0 && dx < 0)) {\n angle += Math.PI;\n }\n ret.angle = angle;\n\n return ret;\n }\n\n /**\n * Get a point on a circle\n *\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} angle\n * @returns {object} point\n * @private\n */\n _pointOnCircle(x, y, radius, angle) {\n return {\n x: x + radius * Math.cos(angle),\n y: y - radius * Math.sin(angle),\n };\n }\n\n /**\n * Sets selected state to true\n */\n select() {\n this.selected = true;\n }\n\n /**\n * Sets selected state to false\n */\n unselect() {\n this.selected = false;\n }\n\n /**\n * cleans all required things on delete\n *\n * @returns {*}\n */\n cleanup() {\n return this.edgeType.cleanup();\n }\n\n /**\n * Remove edge from the list and perform necessary cleanup.\n */\n remove() {\n this.cleanup();\n this.disconnect();\n delete this.body.edges[this.id];\n }\n\n /**\n * Check if both connecting nodes exist\n *\n * @returns {boolean}\n */\n endPointsValid() {\n return (\n this.body.nodes[this.fromId] !== undefined &&\n this.body.nodes[this.toId] !== undefined\n );\n }\n}\n\nexport default Edge;\n","import { deepExtend, forEach } from \"vis-util/esnext\";\nimport { DataSet, isDataViewLike } from \"vis-data/esnext\";\nimport Edge from \"./components/Edge\";\n\n/**\n * Handler for Edges\n */\nclass EdgesHandler {\n /**\n * @param {object} body\n * @param {Array.} images\n * @param {Array.} groups\n */\n constructor(body, images, groups) {\n this.body = body;\n this.images = images;\n this.groups = groups;\n\n // create the edge API in the body container\n this.body.functions.createEdge = this.create.bind(this);\n\n this.edgesListeners = {\n add: (event, params) => {\n this.add(params.items);\n },\n update: (event, params) => {\n this.update(params.items);\n },\n remove: (event, params) => {\n this.remove(params.items);\n },\n };\n\n this.options = {};\n this.defaultOptions = {\n arrows: {\n to: { enabled: false, scaleFactor: 1, type: \"arrow\" }, // boolean / {arrowScaleFactor:1} / {enabled: false, arrowScaleFactor:1}\n middle: { enabled: false, scaleFactor: 1, type: \"arrow\" },\n from: { enabled: false, scaleFactor: 1, type: \"arrow\" },\n },\n endPointOffset: {\n from: 0,\n to: 0,\n },\n arrowStrikethrough: true,\n color: {\n color: \"#848484\",\n highlight: \"#848484\",\n hover: \"#848484\",\n inherit: \"from\",\n opacity: 1.0,\n },\n dashes: false,\n font: {\n color: \"#343434\",\n size: 14, // px\n face: \"arial\",\n background: \"none\",\n strokeWidth: 2, // px\n strokeColor: \"#ffffff\",\n align: \"horizontal\",\n multi: false,\n vadjust: 0,\n bold: {\n mod: \"bold\",\n },\n boldital: {\n mod: \"bold italic\",\n },\n ital: {\n mod: \"italic\",\n },\n mono: {\n mod: \"\",\n size: 15, // px\n face: \"courier new\",\n vadjust: 2,\n },\n },\n hidden: false,\n hoverWidth: 1.5,\n label: undefined,\n labelHighlightBold: true,\n length: undefined,\n physics: true,\n scaling: {\n min: 1,\n max: 15,\n label: {\n enabled: true,\n min: 14,\n max: 30,\n maxVisible: 30,\n drawThreshold: 5,\n },\n customScalingFunction: function (min, max, total, value) {\n if (max === min) {\n return 0.5;\n } else {\n const scale = 1 / (max - min);\n return Math.max(0, (value - min) * scale);\n }\n },\n },\n selectionWidth: 1.5,\n selfReference: {\n size: 20,\n angle: Math.PI / 4,\n renderBehindTheNode: true,\n },\n shadow: {\n enabled: false,\n color: \"rgba(0,0,0,0.5)\",\n size: 10,\n x: 5,\n y: 5,\n },\n background: {\n enabled: false,\n color: \"rgba(111,111,111,1)\",\n size: 10,\n dashes: false,\n },\n smooth: {\n enabled: true,\n type: \"dynamic\",\n forceDirection: \"none\",\n roundness: 0.5,\n },\n title: undefined,\n width: 1,\n value: undefined,\n };\n\n deepExtend(this.options, this.defaultOptions);\n\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n // this allows external modules to force all dynamic curves to turn static.\n this.body.emitter.on(\"_forceDisableDynamicCurves\", (type, emit = true) => {\n if (type === \"dynamic\") {\n type = \"continuous\";\n }\n let dataChanged = false;\n for (const edgeId in this.body.edges) {\n if (Object.prototype.hasOwnProperty.call(this.body.edges, edgeId)) {\n const edge = this.body.edges[edgeId];\n const edgeData = this.body.data.edges.get(edgeId);\n\n // only forcibly remove the smooth curve if the data has been set of the edge has the smooth curves defined.\n // this is because a change in the global would not affect these curves.\n if (edgeData != null) {\n const smoothOptions = edgeData.smooth;\n if (smoothOptions !== undefined) {\n if (\n smoothOptions.enabled === true &&\n smoothOptions.type === \"dynamic\"\n ) {\n if (type === undefined) {\n edge.setOptions({ smooth: false });\n } else {\n edge.setOptions({ smooth: { type: type } });\n }\n dataChanged = true;\n }\n }\n }\n }\n }\n if (emit === true && dataChanged === true) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n });\n\n // this is called when options of EXISTING nodes or edges have changed.\n //\n // NOTE: Not true, called when options have NOT changed, for both existing as well as new nodes.\n // See update() for logic.\n // TODO: Verify and examine the consequences of this. It might still trigger when\n // non-option fields have changed, but then reconnecting edges is still useless.\n // Alternatively, it might also be called when edges are removed.\n //\n this.body.emitter.on(\"_dataUpdated\", () => {\n this.reconnectEdges();\n });\n\n // refresh the edges. Used when reverting from hierarchical layout\n this.body.emitter.on(\"refreshEdges\", this.refresh.bind(this));\n this.body.emitter.on(\"refresh\", this.refresh.bind(this));\n this.body.emitter.on(\"destroy\", () => {\n forEach(this.edgesListeners, (callback, event) => {\n if (this.body.data.edges) this.body.data.edges.off(event, callback);\n });\n delete this.body.functions.createEdge;\n delete this.edgesListeners.add;\n delete this.edgesListeners.update;\n delete this.edgesListeners.remove;\n delete this.edgesListeners;\n });\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n // use the parser from the Edge class to fill in all shorthand notations\n Edge.parseOptions(this.options, options, true, this.defaultOptions, true);\n\n // update smooth settings in all edges\n let dataChanged = false;\n if (options.smooth !== undefined) {\n for (const edgeId in this.body.edges) {\n if (Object.prototype.hasOwnProperty.call(this.body.edges, edgeId)) {\n dataChanged =\n this.body.edges[edgeId].updateEdgeType() || dataChanged;\n }\n }\n }\n\n // update fonts in all edges\n if (options.font !== undefined) {\n for (const edgeId in this.body.edges) {\n if (Object.prototype.hasOwnProperty.call(this.body.edges, edgeId)) {\n this.body.edges[edgeId].updateLabelModule();\n }\n }\n }\n\n // update the state of the variables if needed\n if (\n options.hidden !== undefined ||\n options.physics !== undefined ||\n dataChanged === true\n ) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n }\n\n /**\n * Load edges by reading the data table\n *\n * @param {Array | DataSet | DataView} edges The data containing the edges.\n * @param {boolean} [doNotEmit=false] - Suppress data changed event.\n * @private\n */\n setData(edges, doNotEmit = false) {\n const oldEdgesData = this.body.data.edges;\n\n if (isDataViewLike(\"id\", edges)) {\n this.body.data.edges = edges;\n } else if (Array.isArray(edges)) {\n this.body.data.edges = new DataSet();\n this.body.data.edges.add(edges);\n } else if (!edges) {\n this.body.data.edges = new DataSet();\n } else {\n throw new TypeError(\"Array or DataSet expected\");\n }\n\n // TODO: is this null or undefined or false?\n if (oldEdgesData) {\n // unsubscribe from old dataset\n forEach(this.edgesListeners, (callback, event) => {\n oldEdgesData.off(event, callback);\n });\n }\n\n // remove drawn edges\n this.body.edges = {};\n\n // TODO: is this null or undefined or false?\n if (this.body.data.edges) {\n // subscribe to new dataset\n forEach(this.edgesListeners, (callback, event) => {\n this.body.data.edges.on(event, callback);\n });\n\n // draw all new nodes\n const ids = this.body.data.edges.getIds();\n this.add(ids, true);\n }\n\n this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\");\n if (doNotEmit === false) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n * Add edges\n *\n * @param {number[] | string[]} ids\n * @param {boolean} [doNotEmit=false]\n * @private\n */\n add(ids, doNotEmit = false) {\n const edges = this.body.edges;\n const edgesData = this.body.data.edges;\n\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n\n const oldEdge = edges[id];\n if (oldEdge) {\n oldEdge.disconnect();\n }\n\n const data = edgesData.get(id, { showInternalIds: true });\n edges[id] = this.create(data);\n }\n\n this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\");\n\n if (doNotEmit === false) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n * Update existing edges, or create them when not yet existing\n *\n * @param {number[] | string[]} ids\n * @private\n */\n update(ids) {\n const edges = this.body.edges;\n const edgesData = this.body.data.edges;\n let dataChanged = false;\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const data = edgesData.get(id);\n const edge = edges[id];\n if (edge !== undefined) {\n // update edge\n edge.disconnect();\n dataChanged = edge.setOptions(data) || dataChanged; // if a support node is added, data can be changed.\n edge.connect();\n } else {\n // create edge\n this.body.edges[id] = this.create(data);\n dataChanged = true;\n }\n }\n\n if (dataChanged === true) {\n this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\");\n this.body.emitter.emit(\"_dataChanged\");\n } else {\n this.body.emitter.emit(\"_dataUpdated\");\n }\n }\n\n /**\n * Remove existing edges. Non existing ids will be ignored\n *\n * @param {number[] | string[]} ids\n * @param {boolean} [emit=true]\n * @private\n */\n remove(ids, emit = true) {\n if (ids.length === 0) return; // early out\n\n const edges = this.body.edges;\n forEach(ids, (id) => {\n const edge = edges[id];\n if (edge !== undefined) {\n edge.remove();\n }\n });\n\n if (emit) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n * Refreshes Edge Handler\n */\n refresh() {\n forEach(this.body.edges, (edge, edgeId) => {\n const data = this.body.data.edges.get(edgeId);\n if (data !== undefined) {\n edge.setOptions(data);\n }\n });\n }\n\n /**\n *\n * @param {object} properties\n * @returns {Edge}\n */\n create(properties) {\n return new Edge(\n properties,\n this.body,\n this.images,\n this.options,\n this.defaultOptions\n );\n }\n\n /**\n * Reconnect all edges\n *\n * @private\n */\n reconnectEdges() {\n let id;\n const nodes = this.body.nodes;\n const edges = this.body.edges;\n\n for (id in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, id)) {\n nodes[id].edges = [];\n }\n }\n\n for (id in edges) {\n if (Object.prototype.hasOwnProperty.call(edges, id)) {\n const edge = edges[id];\n edge.from = null;\n edge.to = null;\n edge.connect();\n }\n }\n }\n\n /**\n *\n * @param {Edge.id} edgeId\n * @returns {Array}\n */\n getConnectedNodes(edgeId) {\n const nodeList = [];\n if (this.body.edges[edgeId] !== undefined) {\n const edge = this.body.edges[edgeId];\n if (edge.fromId !== undefined) {\n nodeList.push(edge.fromId);\n }\n if (edge.toId !== undefined) {\n nodeList.push(edge.toId);\n }\n }\n return nodeList;\n }\n\n /**\n * There is no direct relation between the nodes and the edges DataSet,\n * so the right place to do call this is in the handler for event `_dataUpdated`.\n */\n _updateState() {\n this._addMissingEdges();\n this._removeInvalidEdges();\n }\n\n /**\n * Scan for missing nodes and remove corresponding edges, if any.\n *\n * @private\n */\n _removeInvalidEdges() {\n const edgesToDelete = [];\n\n forEach(this.body.edges, (edge, id) => {\n const toNode = this.body.nodes[edge.toId];\n const fromNode = this.body.nodes[edge.fromId];\n\n // Skip clustering edges here, let the Clustering module handle those\n if (\n (toNode !== undefined && toNode.isCluster === true) ||\n (fromNode !== undefined && fromNode.isCluster === true)\n ) {\n return;\n }\n\n if (toNode === undefined || fromNode === undefined) {\n edgesToDelete.push(id);\n }\n });\n\n this.remove(edgesToDelete, false);\n }\n\n /**\n * add all edges from dataset that are not in the cached state\n *\n * @private\n */\n _addMissingEdges() {\n const edgesData = this.body.data.edges;\n if (edgesData === undefined || edgesData === null) {\n return; // No edges DataSet yet; can happen on startup\n }\n\n const edges = this.body.edges;\n const addIds = [];\n\n edgesData.forEach((edgeData, edgeId) => {\n const edge = edges[edgeId];\n if (edge === undefined) {\n addIds.push(edgeId);\n }\n });\n\n this.add(addIds, true);\n }\n}\n\nexport default EdgesHandler;\n","import { Alea } from \"vis-util/esnext\";\n\n/**\n * Barnes Hut Solver\n */\nclass BarnesHutSolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n this.body = body;\n this.physicsBody = physicsBody;\n this.barnesHutTree;\n this.setOptions(options);\n this._rng = Alea(\"BARNES HUT SOLVER\");\n\n // debug: show grid\n // this.body.emitter.on(\"afterDrawing\", (ctx) => {this._debug(ctx,'#ff0000')})\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n this.thetaInversed = 1 / this.options.theta;\n\n // if 1 then min distance = 0.5, if 0.5 then min distance = 0.5 + 0.5*node.shape.radius\n this.overlapAvoidanceFactor =\n 1 - Math.max(0, Math.min(1, this.options.avoidOverlap));\n }\n\n /**\n * This function calculates the forces the nodes apply on each other based on a gravitational model.\n * The Barnes Hut method is used to speed up this N-body simulation.\n *\n * @private\n */\n solve() {\n if (\n this.options.gravitationalConstant !== 0 &&\n this.physicsBody.physicsNodeIndices.length > 0\n ) {\n let node;\n const nodes = this.body.nodes;\n const nodeIndices = this.physicsBody.physicsNodeIndices;\n const nodeCount = nodeIndices.length;\n\n // create the tree\n const barnesHutTree = this._formBarnesHutTree(nodes, nodeIndices);\n\n // for debugging\n this.barnesHutTree = barnesHutTree;\n\n // place the nodes one by one recursively\n for (let i = 0; i < nodeCount; i++) {\n node = nodes[nodeIndices[i]];\n if (node.options.mass > 0) {\n // starting with root is irrelevant, it never passes the BarnesHutSolver condition\n this._getForceContributions(barnesHutTree.root, node);\n }\n }\n }\n }\n\n /**\n * @param {object} parentBranch\n * @param {Node} node\n * @private\n */\n _getForceContributions(parentBranch, node) {\n this._getForceContribution(parentBranch.children.NW, node);\n this._getForceContribution(parentBranch.children.NE, node);\n this._getForceContribution(parentBranch.children.SW, node);\n this._getForceContribution(parentBranch.children.SE, node);\n }\n\n /**\n * This function traverses the barnesHutTree. It checks when it can approximate distant nodes with their center of mass.\n * If a region contains a single node, we check if it is not itself, then we apply the force.\n *\n * @param {object} parentBranch\n * @param {Node} node\n * @private\n */\n _getForceContribution(parentBranch, node) {\n // we get no force contribution from an empty region\n if (parentBranch.childrenCount > 0) {\n // get the distance from the center of mass to the node.\n const dx = parentBranch.centerOfMass.x - node.x;\n const dy = parentBranch.centerOfMass.y - node.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n // BarnesHutSolver condition\n // original condition : s/d < theta = passed === d/s > 1/theta = passed\n // calcSize = 1/s --> d * 1/s > 1/theta = passed\n if (distance * parentBranch.calcSize > this.thetaInversed) {\n this._calculateForces(distance, dx, dy, node, parentBranch);\n } else {\n // Did not pass the condition, go into children if available\n if (parentBranch.childrenCount === 4) {\n this._getForceContributions(parentBranch, node);\n } else {\n // parentBranch must have only one node, if it was empty we wouldnt be here\n if (parentBranch.children.data.id != node.id) {\n // if it is not self\n this._calculateForces(distance, dx, dy, node, parentBranch);\n }\n }\n }\n }\n }\n\n /**\n * Calculate the forces based on the distance.\n *\n * @param {number} distance\n * @param {number} dx\n * @param {number} dy\n * @param {Node} node\n * @param {object} parentBranch\n * @private\n */\n _calculateForces(distance, dx, dy, node, parentBranch) {\n if (distance === 0) {\n distance = 0.1;\n dx = distance;\n }\n\n if (this.overlapAvoidanceFactor < 1 && node.shape.radius) {\n distance = Math.max(\n 0.1 + this.overlapAvoidanceFactor * node.shape.radius,\n distance - node.shape.radius\n );\n }\n\n // the dividing by the distance cubed instead of squared allows us to get the fx and fy components without sines and cosines\n // it is shorthand for gravityforce with distance squared and fx = dx/distance * gravityForce\n const gravityForce =\n (this.options.gravitationalConstant *\n parentBranch.mass *\n node.options.mass) /\n Math.pow(distance, 3);\n const fx = dx * gravityForce;\n const fy = dy * gravityForce;\n\n this.physicsBody.forces[node.id].x += fx;\n this.physicsBody.forces[node.id].y += fy;\n }\n\n /**\n * This function constructs the barnesHut tree recursively. It creates the root, splits it and starts placing the nodes.\n *\n * @param {Array.} nodes\n * @param {Array.} nodeIndices\n * @returns {{root: {centerOfMass: {x: number, y: number}, mass: number, range: {minX: number, maxX: number, minY: number, maxY: number}, size: number, calcSize: number, children: {data: null}, maxWidth: number, level: number, childrenCount: number}}} BarnesHutTree\n * @private\n */\n _formBarnesHutTree(nodes, nodeIndices) {\n let node;\n const nodeCount = nodeIndices.length;\n\n let minX = nodes[nodeIndices[0]].x;\n let minY = nodes[nodeIndices[0]].y;\n let maxX = nodes[nodeIndices[0]].x;\n let maxY = nodes[nodeIndices[0]].y;\n\n // get the range of the nodes\n for (let i = 1; i < nodeCount; i++) {\n const node = nodes[nodeIndices[i]];\n const x = node.x;\n const y = node.y;\n if (node.options.mass > 0) {\n if (x < minX) {\n minX = x;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n }\n // make the range a square\n const sizeDiff = Math.abs(maxX - minX) - Math.abs(maxY - minY); // difference between X and Y\n if (sizeDiff > 0) {\n minY -= 0.5 * sizeDiff;\n maxY += 0.5 * sizeDiff;\n } // xSize > ySize\n else {\n minX += 0.5 * sizeDiff;\n maxX -= 0.5 * sizeDiff;\n } // xSize < ySize\n\n const minimumTreeSize = 1e-5;\n const rootSize = Math.max(minimumTreeSize, Math.abs(maxX - minX));\n const halfRootSize = 0.5 * rootSize;\n const centerX = 0.5 * (minX + maxX),\n centerY = 0.5 * (minY + maxY);\n\n // construct the barnesHutTree\n const barnesHutTree = {\n root: {\n centerOfMass: { x: 0, y: 0 },\n mass: 0,\n range: {\n minX: centerX - halfRootSize,\n maxX: centerX + halfRootSize,\n minY: centerY - halfRootSize,\n maxY: centerY + halfRootSize,\n },\n size: rootSize,\n calcSize: 1 / rootSize,\n children: { data: null },\n maxWidth: 0,\n level: 0,\n childrenCount: 4,\n },\n };\n this._splitBranch(barnesHutTree.root);\n\n // place the nodes one by one recursively\n for (let i = 0; i < nodeCount; i++) {\n node = nodes[nodeIndices[i]];\n if (node.options.mass > 0) {\n this._placeInTree(barnesHutTree.root, node);\n }\n }\n\n // make global\n return barnesHutTree;\n }\n\n /**\n * this updates the mass of a branch. this is increased by adding a node.\n *\n * @param {object} parentBranch\n * @param {Node} node\n * @private\n */\n _updateBranchMass(parentBranch, node) {\n const centerOfMass = parentBranch.centerOfMass;\n const totalMass = parentBranch.mass + node.options.mass;\n const totalMassInv = 1 / totalMass;\n\n centerOfMass.x =\n centerOfMass.x * parentBranch.mass + node.x * node.options.mass;\n centerOfMass.x *= totalMassInv;\n\n centerOfMass.y =\n centerOfMass.y * parentBranch.mass + node.y * node.options.mass;\n centerOfMass.y *= totalMassInv;\n\n parentBranch.mass = totalMass;\n const biggestSize = Math.max(\n Math.max(node.height, node.radius),\n node.width\n );\n parentBranch.maxWidth =\n parentBranch.maxWidth < biggestSize ? biggestSize : parentBranch.maxWidth;\n }\n\n /**\n * determine in which branch the node will be placed.\n *\n * @param {object} parentBranch\n * @param {Node} node\n * @param {boolean} skipMassUpdate\n * @private\n */\n _placeInTree(parentBranch, node, skipMassUpdate) {\n if (skipMassUpdate != true || skipMassUpdate === undefined) {\n // update the mass of the branch.\n this._updateBranchMass(parentBranch, node);\n }\n\n const range = parentBranch.children.NW.range;\n let region;\n if (range.maxX > node.x) {\n // in NW or SW\n if (range.maxY > node.y) {\n region = \"NW\";\n } else {\n region = \"SW\";\n }\n } else {\n // in NE or SE\n if (range.maxY > node.y) {\n region = \"NE\";\n } else {\n region = \"SE\";\n }\n }\n\n this._placeInRegion(parentBranch, node, region);\n }\n\n /**\n * actually place the node in a region (or branch)\n *\n * @param {object} parentBranch\n * @param {Node} node\n * @param {'NW'| 'NE' | 'SW' | 'SE'} region\n * @private\n */\n _placeInRegion(parentBranch, node, region) {\n const children = parentBranch.children[region];\n\n switch (children.childrenCount) {\n case 0: // place node here\n children.children.data = node;\n children.childrenCount = 1;\n this._updateBranchMass(children, node);\n break;\n case 1: // convert into children\n // if there are two nodes exactly overlapping (on init, on opening of cluster etc.)\n // we move one node a little bit and we do not put it in the tree.\n if (\n children.children.data.x === node.x &&\n children.children.data.y === node.y\n ) {\n node.x += this._rng();\n node.y += this._rng();\n } else {\n this._splitBranch(children);\n this._placeInTree(children, node);\n }\n break;\n case 4: // place in branch\n this._placeInTree(children, node);\n break;\n }\n }\n\n /**\n * this function splits a branch into 4 sub branches. If the branch contained a node, we place it in the subbranch\n * after the split is complete.\n *\n * @param {object} parentBranch\n * @private\n */\n _splitBranch(parentBranch) {\n // if the branch is shaded with a node, replace the node in the new subset.\n let containedNode = null;\n if (parentBranch.childrenCount === 1) {\n containedNode = parentBranch.children.data;\n parentBranch.mass = 0;\n parentBranch.centerOfMass.x = 0;\n parentBranch.centerOfMass.y = 0;\n }\n parentBranch.childrenCount = 4;\n parentBranch.children.data = null;\n this._insertRegion(parentBranch, \"NW\");\n this._insertRegion(parentBranch, \"NE\");\n this._insertRegion(parentBranch, \"SW\");\n this._insertRegion(parentBranch, \"SE\");\n\n if (containedNode != null) {\n this._placeInTree(parentBranch, containedNode);\n }\n }\n\n /**\n * This function subdivides the region into four new segments.\n * Specifically, this inserts a single new segment.\n * It fills the children section of the parentBranch\n *\n * @param {object} parentBranch\n * @param {'NW'| 'NE' | 'SW' | 'SE'} region\n * @private\n */\n _insertRegion(parentBranch, region) {\n let minX, maxX, minY, maxY;\n const childSize = 0.5 * parentBranch.size;\n switch (region) {\n case \"NW\":\n minX = parentBranch.range.minX;\n maxX = parentBranch.range.minX + childSize;\n minY = parentBranch.range.minY;\n maxY = parentBranch.range.minY + childSize;\n break;\n case \"NE\":\n minX = parentBranch.range.minX + childSize;\n maxX = parentBranch.range.maxX;\n minY = parentBranch.range.minY;\n maxY = parentBranch.range.minY + childSize;\n break;\n case \"SW\":\n minX = parentBranch.range.minX;\n maxX = parentBranch.range.minX + childSize;\n minY = parentBranch.range.minY + childSize;\n maxY = parentBranch.range.maxY;\n break;\n case \"SE\":\n minX = parentBranch.range.minX + childSize;\n maxX = parentBranch.range.maxX;\n minY = parentBranch.range.minY + childSize;\n maxY = parentBranch.range.maxY;\n break;\n }\n\n parentBranch.children[region] = {\n centerOfMass: { x: 0, y: 0 },\n mass: 0,\n range: { minX: minX, maxX: maxX, minY: minY, maxY: maxY },\n size: 0.5 * parentBranch.size,\n calcSize: 2 * parentBranch.calcSize,\n children: { data: null },\n maxWidth: 0,\n level: parentBranch.level + 1,\n childrenCount: 0,\n };\n }\n\n //--------------------------- DEBUGGING BELOW ---------------------------//\n\n /**\n * This function is for debugging purposed, it draws the tree.\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {string} color\n * @private\n */\n _debug(ctx, color) {\n if (this.barnesHutTree !== undefined) {\n ctx.lineWidth = 1;\n\n this._drawBranch(this.barnesHutTree.root, ctx, color);\n }\n }\n\n /**\n * This function is for debugging purposes. It draws the branches recursively.\n *\n * @param {object} branch\n * @param {CanvasRenderingContext2D} ctx\n * @param {string} color\n * @private\n */\n _drawBranch(branch, ctx, color) {\n if (color === undefined) {\n color = \"#FF0000\";\n }\n\n if (branch.childrenCount === 4) {\n this._drawBranch(branch.children.NW, ctx);\n this._drawBranch(branch.children.NE, ctx);\n this._drawBranch(branch.children.SE, ctx);\n this._drawBranch(branch.children.SW, ctx);\n }\n ctx.strokeStyle = color;\n ctx.beginPath();\n ctx.moveTo(branch.range.minX, branch.range.minY);\n ctx.lineTo(branch.range.maxX, branch.range.minY);\n ctx.stroke();\n\n ctx.beginPath();\n ctx.moveTo(branch.range.maxX, branch.range.minY);\n ctx.lineTo(branch.range.maxX, branch.range.maxY);\n ctx.stroke();\n\n ctx.beginPath();\n ctx.moveTo(branch.range.maxX, branch.range.maxY);\n ctx.lineTo(branch.range.minX, branch.range.maxY);\n ctx.stroke();\n\n ctx.beginPath();\n ctx.moveTo(branch.range.minX, branch.range.maxY);\n ctx.lineTo(branch.range.minX, branch.range.minY);\n ctx.stroke();\n\n /*\n if (branch.mass > 0) {\n ctx.circle(branch.centerOfMass.x, branch.centerOfMass.y, 3*branch.mass);\n ctx.stroke();\n }\n */\n }\n}\n\nexport default BarnesHutSolver;\n","import { Alea } from \"vis-util/esnext\";\n\n/**\n * Repulsion Solver\n */\nclass RepulsionSolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n this._rng = Alea(\"REPULSION SOLVER\");\n\n this.body = body;\n this.physicsBody = physicsBody;\n this.setOptions(options);\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n }\n\n /**\n * Calculate the forces the nodes apply on each other based on a repulsion field.\n * This field is linearly approximated.\n *\n * @private\n */\n solve() {\n let dx, dy, distance, fx, fy, repulsingForce, node1, node2;\n\n const nodes = this.body.nodes;\n const nodeIndices = this.physicsBody.physicsNodeIndices;\n const forces = this.physicsBody.forces;\n\n // repulsing forces between nodes\n const nodeDistance = this.options.nodeDistance;\n\n // approximation constants\n const a = -2 / 3 / nodeDistance;\n const b = 4 / 3;\n\n // we loop from i over all but the last entree in the array\n // j loops from i+1 to the last. This way we do not double count any of the indices, nor i === j\n for (let i = 0; i < nodeIndices.length - 1; i++) {\n node1 = nodes[nodeIndices[i]];\n for (let j = i + 1; j < nodeIndices.length; j++) {\n node2 = nodes[nodeIndices[j]];\n\n dx = node2.x - node1.x;\n dy = node2.y - node1.y;\n distance = Math.sqrt(dx * dx + dy * dy);\n\n // same condition as BarnesHutSolver, making sure nodes are never 100% overlapping.\n if (distance === 0) {\n distance = 0.1 * this._rng();\n dx = distance;\n }\n\n if (distance < 2 * nodeDistance) {\n if (distance < 0.5 * nodeDistance) {\n repulsingForce = 1.0;\n } else {\n repulsingForce = a * distance + b; // linear approx of 1 / (1 + Math.exp((distance / nodeDistance - 1) * steepness))\n }\n repulsingForce = repulsingForce / distance;\n\n fx = dx * repulsingForce;\n fy = dy * repulsingForce;\n\n forces[node1.id].x -= fx;\n forces[node1.id].y -= fy;\n forces[node2.id].x += fx;\n forces[node2.id].y += fy;\n }\n }\n }\n }\n}\n\nexport default RepulsionSolver;\n","/**\n * Hierarchical Repulsion Solver\n */\nclass HierarchicalRepulsionSolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n this.body = body;\n this.physicsBody = physicsBody;\n this.setOptions(options);\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n this.overlapAvoidanceFactor = Math.max(\n 0,\n Math.min(1, this.options.avoidOverlap || 0)\n );\n }\n\n /**\n * Calculate the forces the nodes apply on each other based on a repulsion field.\n * This field is linearly approximated.\n *\n * @private\n */\n solve() {\n const nodes = this.body.nodes;\n const nodeIndices = this.physicsBody.physicsNodeIndices;\n const forces = this.physicsBody.forces;\n\n // repulsing forces between nodes\n const nodeDistance = this.options.nodeDistance;\n\n // we loop from i over all but the last entree in the array\n // j loops from i+1 to the last. This way we do not double count any of the indices, nor i === j\n for (let i = 0; i < nodeIndices.length - 1; i++) {\n const node1 = nodes[nodeIndices[i]];\n for (let j = i + 1; j < nodeIndices.length; j++) {\n const node2 = nodes[nodeIndices[j]];\n\n // nodes only affect nodes on their level\n if (node1.level === node2.level) {\n const theseNodesDistance =\n nodeDistance +\n this.overlapAvoidanceFactor *\n ((node1.shape.radius || 0) / 2 + (node2.shape.radius || 0) / 2);\n\n const dx = node2.x - node1.x;\n const dy = node2.y - node1.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n const steepness = 0.05;\n let repulsingForce;\n if (distance < theseNodesDistance) {\n repulsingForce =\n -Math.pow(steepness * distance, 2) +\n Math.pow(steepness * theseNodesDistance, 2);\n } else {\n repulsingForce = 0;\n }\n // normalize force with\n if (distance !== 0) {\n repulsingForce = repulsingForce / distance;\n }\n const fx = dx * repulsingForce;\n const fy = dy * repulsingForce;\n\n forces[node1.id].x -= fx;\n forces[node1.id].y -= fy;\n forces[node2.id].x += fx;\n forces[node2.id].y += fy;\n }\n }\n }\n }\n}\n\nexport default HierarchicalRepulsionSolver;\n","/**\n * Spring Solver\n */\nclass SpringSolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n this.body = body;\n this.physicsBody = physicsBody;\n this.setOptions(options);\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n }\n\n /**\n * This function calculates the springforces on the nodes, accounting for the support nodes.\n *\n * @private\n */\n solve() {\n let edgeLength, edge;\n const edgeIndices = this.physicsBody.physicsEdgeIndices;\n const edges = this.body.edges;\n let node1, node2, node3;\n\n // forces caused by the edges, modelled as springs\n for (let i = 0; i < edgeIndices.length; i++) {\n edge = edges[edgeIndices[i]];\n if (edge.connected === true && edge.toId !== edge.fromId) {\n // only calculate forces if nodes are in the same sector\n if (\n this.body.nodes[edge.toId] !== undefined &&\n this.body.nodes[edge.fromId] !== undefined\n ) {\n if (edge.edgeType.via !== undefined) {\n edgeLength =\n edge.options.length === undefined\n ? this.options.springLength\n : edge.options.length;\n node1 = edge.to;\n node2 = edge.edgeType.via;\n node3 = edge.from;\n\n this._calculateSpringForce(node1, node2, 0.5 * edgeLength);\n this._calculateSpringForce(node2, node3, 0.5 * edgeLength);\n } else {\n // the * 1.5 is here so the edge looks as large as a smooth edge. It does not initially because the smooth edges use\n // the support nodes which exert a repulsive force on the to and from nodes, making the edge appear larger.\n edgeLength =\n edge.options.length === undefined\n ? this.options.springLength * 1.5\n : edge.options.length;\n this._calculateSpringForce(edge.from, edge.to, edgeLength);\n }\n }\n }\n }\n }\n\n /**\n * This is the code actually performing the calculation for the function above.\n *\n * @param {Node} node1\n * @param {Node} node2\n * @param {number} edgeLength\n * @private\n */\n _calculateSpringForce(node1, node2, edgeLength) {\n const dx = node1.x - node2.x;\n const dy = node1.y - node2.y;\n const distance = Math.max(Math.sqrt(dx * dx + dy * dy), 0.01);\n\n // the 1/distance is so the fx and fy can be calculated without sine or cosine.\n const springForce =\n (this.options.springConstant * (edgeLength - distance)) / distance;\n\n const fx = dx * springForce;\n const fy = dy * springForce;\n\n // handle the case where one node is not part of the physcis\n if (this.physicsBody.forces[node1.id] !== undefined) {\n this.physicsBody.forces[node1.id].x += fx;\n this.physicsBody.forces[node1.id].y += fy;\n }\n\n if (this.physicsBody.forces[node2.id] !== undefined) {\n this.physicsBody.forces[node2.id].x -= fx;\n this.physicsBody.forces[node2.id].y -= fy;\n }\n }\n}\n\nexport default SpringSolver;\n","/**\n * Hierarchical Spring Solver\n */\nclass HierarchicalSpringSolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n this.body = body;\n this.physicsBody = physicsBody;\n this.setOptions(options);\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n }\n\n /**\n * This function calculates the springforces on the nodes, accounting for the support nodes.\n *\n * @private\n */\n solve() {\n let edgeLength, edge;\n let dx, dy, fx, fy, springForce, distance;\n const edges = this.body.edges;\n const factor = 0.5;\n\n const edgeIndices = this.physicsBody.physicsEdgeIndices;\n const nodeIndices = this.physicsBody.physicsNodeIndices;\n const forces = this.physicsBody.forces;\n\n // initialize the spring force counters\n for (let i = 0; i < nodeIndices.length; i++) {\n const nodeId = nodeIndices[i];\n forces[nodeId].springFx = 0;\n forces[nodeId].springFy = 0;\n }\n\n // forces caused by the edges, modelled as springs\n for (let i = 0; i < edgeIndices.length; i++) {\n edge = edges[edgeIndices[i]];\n if (edge.connected === true) {\n edgeLength =\n edge.options.length === undefined\n ? this.options.springLength\n : edge.options.length;\n\n dx = edge.from.x - edge.to.x;\n dy = edge.from.y - edge.to.y;\n distance = Math.sqrt(dx * dx + dy * dy);\n distance = distance === 0 ? 0.01 : distance;\n\n // the 1/distance is so the fx and fy can be calculated without sine or cosine.\n springForce =\n (this.options.springConstant * (edgeLength - distance)) / distance;\n\n fx = dx * springForce;\n fy = dy * springForce;\n\n if (edge.to.level != edge.from.level) {\n if (forces[edge.toId] !== undefined) {\n forces[edge.toId].springFx -= fx;\n forces[edge.toId].springFy -= fy;\n }\n if (forces[edge.fromId] !== undefined) {\n forces[edge.fromId].springFx += fx;\n forces[edge.fromId].springFy += fy;\n }\n } else {\n if (forces[edge.toId] !== undefined) {\n forces[edge.toId].x -= factor * fx;\n forces[edge.toId].y -= factor * fy;\n }\n if (forces[edge.fromId] !== undefined) {\n forces[edge.fromId].x += factor * fx;\n forces[edge.fromId].y += factor * fy;\n }\n }\n }\n }\n\n // normalize spring forces\n springForce = 1;\n let springFx, springFy;\n for (let i = 0; i < nodeIndices.length; i++) {\n const nodeId = nodeIndices[i];\n springFx = Math.min(\n springForce,\n Math.max(-springForce, forces[nodeId].springFx)\n );\n springFy = Math.min(\n springForce,\n Math.max(-springForce, forces[nodeId].springFy)\n );\n\n forces[nodeId].x += springFx;\n forces[nodeId].y += springFy;\n }\n\n // retain energy balance\n let totalFx = 0;\n let totalFy = 0;\n for (let i = 0; i < nodeIndices.length; i++) {\n const nodeId = nodeIndices[i];\n totalFx += forces[nodeId].x;\n totalFy += forces[nodeId].y;\n }\n const correctionFx = totalFx / nodeIndices.length;\n const correctionFy = totalFy / nodeIndices.length;\n\n for (let i = 0; i < nodeIndices.length; i++) {\n const nodeId = nodeIndices[i];\n forces[nodeId].x -= correctionFx;\n forces[nodeId].y -= correctionFy;\n }\n }\n}\n\nexport default HierarchicalSpringSolver;\n","/**\n * Central Gravity Solver\n */\nclass CentralGravitySolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n this.body = body;\n this.physicsBody = physicsBody;\n this.setOptions(options);\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n }\n\n /**\n * Calculates forces for each node\n */\n solve() {\n let dx, dy, distance, node;\n const nodes = this.body.nodes;\n const nodeIndices = this.physicsBody.physicsNodeIndices;\n const forces = this.physicsBody.forces;\n\n for (let i = 0; i < nodeIndices.length; i++) {\n const nodeId = nodeIndices[i];\n node = nodes[nodeId];\n dx = -node.x;\n dy = -node.y;\n distance = Math.sqrt(dx * dx + dy * dy);\n\n this._calculateForces(distance, dx, dy, forces, node);\n }\n }\n\n /**\n * Calculate the forces based on the distance.\n *\n * @param {number} distance\n * @param {number} dx\n * @param {number} dy\n * @param {Object} forces\n * @param {Node} node\n * @private\n */\n _calculateForces(distance, dx, dy, forces, node) {\n const gravityForce =\n distance === 0 ? 0 : this.options.centralGravity / distance;\n forces[node.id].x = dx * gravityForce;\n forces[node.id].y = dy * gravityForce;\n }\n}\n\nexport default CentralGravitySolver;\n","import BarnesHutSolver from \"./BarnesHutSolver\";\nimport { Alea } from \"vis-util/esnext\";\n\n/**\n * @augments BarnesHutSolver\n */\nclass ForceAtlas2BasedRepulsionSolver extends BarnesHutSolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n super(body, physicsBody, options);\n\n this._rng = Alea(\"FORCE ATLAS 2 BASED REPULSION SOLVER\");\n }\n\n /**\n * Calculate the forces based on the distance.\n *\n * @param {number} distance\n * @param {number} dx\n * @param {number} dy\n * @param {Node} node\n * @param {object} parentBranch\n * @private\n */\n _calculateForces(distance, dx, dy, node, parentBranch) {\n if (distance === 0) {\n distance = 0.1 * this._rng();\n dx = distance;\n }\n\n if (this.overlapAvoidanceFactor < 1 && node.shape.radius) {\n distance = Math.max(\n 0.1 + this.overlapAvoidanceFactor * node.shape.radius,\n distance - node.shape.radius\n );\n }\n\n const degree = node.edges.length + 1;\n // the dividing by the distance cubed instead of squared allows us to get the fx and fy components without sines and cosines\n // it is shorthand for gravityforce with distance squared and fx = dx/distance * gravityForce\n const gravityForce =\n (this.options.gravitationalConstant *\n parentBranch.mass *\n node.options.mass *\n degree) /\n Math.pow(distance, 2);\n const fx = dx * gravityForce;\n const fy = dy * gravityForce;\n\n this.physicsBody.forces[node.id].x += fx;\n this.physicsBody.forces[node.id].y += fy;\n }\n}\n\nexport default ForceAtlas2BasedRepulsionSolver;\n","import CentralGravitySolver from \"./CentralGravitySolver\";\n\n/**\n * @augments CentralGravitySolver\n */\nclass ForceAtlas2BasedCentralGravitySolver extends CentralGravitySolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n super(body, physicsBody, options);\n }\n\n /**\n * Calculate the forces based on the distance.\n *\n * @param {number} distance\n * @param {number} dx\n * @param {number} dy\n * @param {Object} forces\n * @param {Node} node\n * @private\n */\n _calculateForces(distance, dx, dy, forces, node) {\n if (distance > 0) {\n const degree = node.edges.length + 1;\n const gravityForce =\n this.options.centralGravity * degree * node.options.mass;\n forces[node.id].x = dx * gravityForce;\n forces[node.id].y = dy * gravityForce;\n }\n }\n}\n\nexport default ForceAtlas2BasedCentralGravitySolver;\n","import BarnesHutSolver from \"./components/physics/BarnesHutSolver\";\nimport Repulsion from \"./components/physics/RepulsionSolver\";\nimport HierarchicalRepulsion from \"./components/physics/HierarchicalRepulsionSolver\";\nimport SpringSolver from \"./components/physics/SpringSolver\";\nimport HierarchicalSpringSolver from \"./components/physics/HierarchicalSpringSolver\";\nimport CentralGravitySolver from \"./components/physics/CentralGravitySolver\";\nimport ForceAtlas2BasedRepulsionSolver from \"./components/physics/FA2BasedRepulsionSolver\";\nimport ForceAtlas2BasedCentralGravitySolver from \"./components/physics/FA2BasedCentralGravitySolver\";\nimport {\n HSVToHex,\n mergeOptions,\n selectiveNotDeepExtend,\n} from \"vis-util/esnext\";\nimport { EndPoints } from \"./components/edges\"; // for debugging with _drawForces()\n\n/**\n * The physics engine\n */\nclass PhysicsEngine {\n /**\n * @param {object} body\n */\n constructor(body) {\n this.body = body;\n this.physicsBody = {\n physicsNodeIndices: [],\n physicsEdgeIndices: [],\n forces: {},\n velocities: {},\n };\n\n this.physicsEnabled = true;\n this.simulationInterval = 1000 / 60;\n this.requiresTimeout = true;\n this.previousStates = {};\n this.referenceState = {};\n this.freezeCache = {};\n this.renderTimer = undefined;\n\n // parameters for the adaptive timestep\n this.adaptiveTimestep = false;\n this.adaptiveTimestepEnabled = false;\n this.adaptiveCounter = 0;\n this.adaptiveInterval = 3;\n\n this.stabilized = false;\n this.startedStabilization = false;\n this.stabilizationIterations = 0;\n this.ready = false; // will be set to true if the stabilize\n\n // default options\n this.options = {};\n this.defaultOptions = {\n enabled: true,\n barnesHut: {\n theta: 0.5,\n gravitationalConstant: -2000,\n centralGravity: 0.3,\n springLength: 95,\n springConstant: 0.04,\n damping: 0.09,\n avoidOverlap: 0,\n },\n forceAtlas2Based: {\n theta: 0.5,\n gravitationalConstant: -50,\n centralGravity: 0.01,\n springConstant: 0.08,\n springLength: 100,\n damping: 0.4,\n avoidOverlap: 0,\n },\n repulsion: {\n centralGravity: 0.2,\n springLength: 200,\n springConstant: 0.05,\n nodeDistance: 100,\n damping: 0.09,\n avoidOverlap: 0,\n },\n hierarchicalRepulsion: {\n centralGravity: 0.0,\n springLength: 100,\n springConstant: 0.01,\n nodeDistance: 120,\n damping: 0.09,\n },\n maxVelocity: 50,\n minVelocity: 0.75, // px/s\n solver: \"barnesHut\",\n stabilization: {\n enabled: true,\n iterations: 1000, // maximum number of iteration to stabilize\n updateInterval: 50,\n onlyDynamicEdges: false,\n fit: true,\n },\n timestep: 0.5,\n adaptiveTimestep: true,\n wind: { x: 0, y: 0 },\n };\n Object.assign(this.options, this.defaultOptions);\n this.timestep = 0.5;\n this.layoutFailed = false;\n\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n this.body.emitter.on(\"initPhysics\", () => {\n this.initPhysics();\n });\n this.body.emitter.on(\"_layoutFailed\", () => {\n this.layoutFailed = true;\n });\n this.body.emitter.on(\"resetPhysics\", () => {\n this.stopSimulation();\n this.ready = false;\n });\n this.body.emitter.on(\"disablePhysics\", () => {\n this.physicsEnabled = false;\n this.stopSimulation();\n });\n this.body.emitter.on(\"restorePhysics\", () => {\n this.setOptions(this.options);\n if (this.ready === true) {\n this.startSimulation();\n }\n });\n this.body.emitter.on(\"startSimulation\", () => {\n if (this.ready === true) {\n this.startSimulation();\n }\n });\n this.body.emitter.on(\"stopSimulation\", () => {\n this.stopSimulation();\n });\n this.body.emitter.on(\"destroy\", () => {\n this.stopSimulation(false);\n this.body.emitter.off();\n });\n this.body.emitter.on(\"_dataChanged\", () => {\n // Nodes and/or edges have been added or removed, update shortcut lists.\n this.updatePhysicsData();\n });\n\n // debug: show forces\n // this.body.emitter.on(\"afterDrawing\", (ctx) => {this._drawForces(ctx);});\n }\n\n /**\n * set the physics options\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n if (options === false) {\n this.options.enabled = false;\n this.physicsEnabled = false;\n this.stopSimulation();\n } else if (options === true) {\n this.options.enabled = true;\n this.physicsEnabled = true;\n this.startSimulation();\n } else {\n this.physicsEnabled = true;\n selectiveNotDeepExtend([\"stabilization\"], this.options, options);\n mergeOptions(this.options, options, \"stabilization\");\n\n if (options.enabled === undefined) {\n this.options.enabled = true;\n }\n\n if (this.options.enabled === false) {\n this.physicsEnabled = false;\n this.stopSimulation();\n }\n\n const wind = this.options.wind;\n if (wind) {\n if (typeof wind.x !== \"number\" || Number.isNaN(wind.x)) {\n wind.x = 0;\n }\n if (typeof wind.y !== \"number\" || Number.isNaN(wind.y)) {\n wind.y = 0;\n }\n }\n\n // set the timestep\n this.timestep = this.options.timestep;\n }\n }\n this.init();\n }\n\n /**\n * configure the engine.\n */\n init() {\n let options;\n if (this.options.solver === \"forceAtlas2Based\") {\n options = this.options.forceAtlas2Based;\n this.nodesSolver = new ForceAtlas2BasedRepulsionSolver(\n this.body,\n this.physicsBody,\n options\n );\n this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options);\n this.gravitySolver = new ForceAtlas2BasedCentralGravitySolver(\n this.body,\n this.physicsBody,\n options\n );\n } else if (this.options.solver === \"repulsion\") {\n options = this.options.repulsion;\n this.nodesSolver = new Repulsion(this.body, this.physicsBody, options);\n this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options);\n this.gravitySolver = new CentralGravitySolver(\n this.body,\n this.physicsBody,\n options\n );\n } else if (this.options.solver === \"hierarchicalRepulsion\") {\n options = this.options.hierarchicalRepulsion;\n this.nodesSolver = new HierarchicalRepulsion(\n this.body,\n this.physicsBody,\n options\n );\n this.edgesSolver = new HierarchicalSpringSolver(\n this.body,\n this.physicsBody,\n options\n );\n this.gravitySolver = new CentralGravitySolver(\n this.body,\n this.physicsBody,\n options\n );\n } else {\n // barnesHut\n options = this.options.barnesHut;\n this.nodesSolver = new BarnesHutSolver(\n this.body,\n this.physicsBody,\n options\n );\n this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options);\n this.gravitySolver = new CentralGravitySolver(\n this.body,\n this.physicsBody,\n options\n );\n }\n\n this.modelOptions = options;\n }\n\n /**\n * initialize the engine\n */\n initPhysics() {\n if (this.physicsEnabled === true && this.options.enabled === true) {\n if (this.options.stabilization.enabled === true) {\n this.stabilize();\n } else {\n this.stabilized = false;\n this.ready = true;\n this.body.emitter.emit(\"fit\", {}, this.layoutFailed); // if the layout failed, we use the approximation for the zoom\n this.startSimulation();\n }\n } else {\n this.ready = true;\n this.body.emitter.emit(\"fit\");\n }\n }\n\n /**\n * Start the simulation\n */\n startSimulation() {\n if (this.physicsEnabled === true && this.options.enabled === true) {\n this.stabilized = false;\n\n // when visible, adaptivity is disabled.\n this.adaptiveTimestep = false;\n\n // this sets the width of all nodes initially which could be required for the avoidOverlap\n this.body.emitter.emit(\"_resizeNodes\");\n if (this.viewFunction === undefined) {\n this.viewFunction = this.simulationStep.bind(this);\n this.body.emitter.on(\"initRedraw\", this.viewFunction);\n this.body.emitter.emit(\"_startRendering\");\n }\n } else {\n this.body.emitter.emit(\"_redraw\");\n }\n }\n\n /**\n * Stop the simulation, force stabilization.\n *\n * @param {boolean} [emit=true]\n */\n stopSimulation(emit = true) {\n this.stabilized = true;\n if (emit === true) {\n this._emitStabilized();\n }\n if (this.viewFunction !== undefined) {\n this.body.emitter.off(\"initRedraw\", this.viewFunction);\n this.viewFunction = undefined;\n if (emit === true) {\n this.body.emitter.emit(\"_stopRendering\");\n }\n }\n }\n\n /**\n * The viewFunction inserts this step into each render loop. It calls the physics tick and handles the cleanup at stabilized.\n *\n */\n simulationStep() {\n // check if the physics have settled\n const startTime = Date.now();\n this.physicsTick();\n const physicsTime = Date.now() - startTime;\n\n // run double speed if it is a little graph\n if (\n (physicsTime < 0.4 * this.simulationInterval ||\n this.runDoubleSpeed === true) &&\n this.stabilized === false\n ) {\n this.physicsTick();\n\n // this makes sure there is no jitter. The decision is taken once to run it at double speed.\n this.runDoubleSpeed = true;\n }\n\n if (this.stabilized === true) {\n this.stopSimulation();\n }\n }\n\n /**\n * trigger the stabilized event.\n *\n * @param {number} [amountOfIterations=this.stabilizationIterations]\n * @private\n */\n _emitStabilized(amountOfIterations = this.stabilizationIterations) {\n if (\n this.stabilizationIterations > 1 ||\n this.startedStabilization === true\n ) {\n setTimeout(() => {\n this.body.emitter.emit(\"stabilized\", {\n iterations: amountOfIterations,\n });\n this.startedStabilization = false;\n this.stabilizationIterations = 0;\n }, 0);\n }\n }\n\n /**\n * Calculate the forces for one physics iteration and move the nodes.\n *\n * @private\n */\n physicsStep() {\n this.gravitySolver.solve();\n this.nodesSolver.solve();\n this.edgesSolver.solve();\n this.moveNodes();\n }\n\n /**\n * Make dynamic adjustments to the timestep, based on current state.\n *\n * Helper function for physicsTick().\n *\n * @private\n */\n adjustTimeStep() {\n const factor = 1.2; // Factor for increasing the timestep on success.\n\n // we compare the two steps. if it is acceptable we double the step.\n if (this._evaluateStepQuality() === true) {\n this.timestep = factor * this.timestep;\n } else {\n // if not, we decrease the step to a minimum of the options timestep.\n // if the decreased timestep is smaller than the options step, we do not reset the counter\n // we assume that the options timestep is stable enough.\n if (this.timestep / factor < this.options.timestep) {\n this.timestep = this.options.timestep;\n } else {\n // if the timestep was larger than 2 times the option one we check the adaptivity again to ensure\n // that large instabilities do not form.\n this.adaptiveCounter = -1; // check again next iteration\n this.timestep = Math.max(this.options.timestep, this.timestep / factor);\n }\n }\n }\n\n /**\n * A single simulation step (or 'tick') in the physics simulation\n *\n * @private\n */\n physicsTick() {\n this._startStabilizing(); // this ensures that there is no start event when the network is already stable.\n if (this.stabilized === true) return;\n\n // adaptivity means the timestep adapts to the situation, only applicable for stabilization\n if (\n this.adaptiveTimestep === true &&\n this.adaptiveTimestepEnabled === true\n ) {\n // timestep remains stable for \"interval\" iterations.\n const doAdaptive = this.adaptiveCounter % this.adaptiveInterval === 0;\n\n if (doAdaptive) {\n // first the big step and revert.\n this.timestep = 2 * this.timestep;\n this.physicsStep();\n this.revert(); // saves the reference state\n\n // now the normal step. Since this is the last step, it is the more stable one and we will take this.\n this.timestep = 0.5 * this.timestep;\n\n // since it's half the step, we do it twice.\n this.physicsStep();\n this.physicsStep();\n\n this.adjustTimeStep();\n } else {\n this.physicsStep(); // normal step, keeping timestep constant\n }\n\n this.adaptiveCounter += 1;\n } else {\n // case for the static timestep, we reset it to the one in options and take a normal step.\n this.timestep = this.options.timestep;\n this.physicsStep();\n }\n\n if (this.stabilized === true) this.revert();\n this.stabilizationIterations++;\n }\n\n /**\n * Nodes and edges can have the physics toggles on or off. A collection of indices is created here so we can skip the check all the time.\n *\n * @private\n */\n updatePhysicsData() {\n this.physicsBody.forces = {};\n this.physicsBody.physicsNodeIndices = [];\n this.physicsBody.physicsEdgeIndices = [];\n const nodes = this.body.nodes;\n const edges = this.body.edges;\n\n // get node indices for physics\n for (const nodeId in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, nodeId)) {\n if (nodes[nodeId].options.physics === true) {\n this.physicsBody.physicsNodeIndices.push(nodes[nodeId].id);\n }\n }\n }\n\n // get edge indices for physics\n for (const edgeId in edges) {\n if (Object.prototype.hasOwnProperty.call(edges, edgeId)) {\n if (edges[edgeId].options.physics === true) {\n this.physicsBody.physicsEdgeIndices.push(edges[edgeId].id);\n }\n }\n }\n\n // get the velocity and the forces vector\n for (let i = 0; i < this.physicsBody.physicsNodeIndices.length; i++) {\n const nodeId = this.physicsBody.physicsNodeIndices[i];\n this.physicsBody.forces[nodeId] = { x: 0, y: 0 };\n\n // forces can be reset because they are recalculated. Velocities have to persist.\n if (this.physicsBody.velocities[nodeId] === undefined) {\n this.physicsBody.velocities[nodeId] = { x: 0, y: 0 };\n }\n }\n\n // clean deleted nodes from the velocity vector\n for (const nodeId in this.physicsBody.velocities) {\n if (nodes[nodeId] === undefined) {\n delete this.physicsBody.velocities[nodeId];\n }\n }\n }\n\n /**\n * Revert the simulation one step. This is done so after stabilization, every new start of the simulation will also say stabilized.\n */\n revert() {\n const nodeIds = Object.keys(this.previousStates);\n const nodes = this.body.nodes;\n const velocities = this.physicsBody.velocities;\n this.referenceState = {};\n\n for (let i = 0; i < nodeIds.length; i++) {\n const nodeId = nodeIds[i];\n if (nodes[nodeId] !== undefined) {\n if (nodes[nodeId].options.physics === true) {\n this.referenceState[nodeId] = {\n positions: { x: nodes[nodeId].x, y: nodes[nodeId].y },\n };\n velocities[nodeId].x = this.previousStates[nodeId].vx;\n velocities[nodeId].y = this.previousStates[nodeId].vy;\n nodes[nodeId].x = this.previousStates[nodeId].x;\n nodes[nodeId].y = this.previousStates[nodeId].y;\n }\n } else {\n delete this.previousStates[nodeId];\n }\n }\n }\n\n /**\n * This compares the reference state to the current state\n *\n * @returns {boolean}\n * @private\n */\n _evaluateStepQuality() {\n let dx, dy, dpos;\n const nodes = this.body.nodes;\n const reference = this.referenceState;\n const posThreshold = 0.3;\n\n for (const nodeId in this.referenceState) {\n if (\n Object.prototype.hasOwnProperty.call(this.referenceState, nodeId) &&\n nodes[nodeId] !== undefined\n ) {\n dx = nodes[nodeId].x - reference[nodeId].positions.x;\n dy = nodes[nodeId].y - reference[nodeId].positions.y;\n\n dpos = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));\n\n if (dpos > posThreshold) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * move the nodes one timestep and check if they are stabilized\n */\n moveNodes() {\n const nodeIndices = this.physicsBody.physicsNodeIndices;\n let maxNodeVelocity = 0;\n let averageNodeVelocity = 0;\n\n // the velocity threshold (energy in the system) for the adaptivity toggle\n const velocityAdaptiveThreshold = 5;\n\n for (let i = 0; i < nodeIndices.length; i++) {\n const nodeId = nodeIndices[i];\n const nodeVelocity = this._performStep(nodeId);\n // stabilized is true if stabilized is true and velocity is smaller than vmin --> all nodes must be stabilized\n maxNodeVelocity = Math.max(maxNodeVelocity, nodeVelocity);\n averageNodeVelocity += nodeVelocity;\n }\n\n // evaluating the stabilized and adaptiveTimestepEnabled conditions\n this.adaptiveTimestepEnabled =\n averageNodeVelocity / nodeIndices.length < velocityAdaptiveThreshold;\n this.stabilized = maxNodeVelocity < this.options.minVelocity;\n }\n\n /**\n * Calculate new velocity for a coordinate direction\n *\n * @param {number} v velocity for current coordinate\n * @param {number} f regular force for current coordinate\n * @param {number} m mass of current node\n * @returns {number} new velocity for current coordinate\n * @private\n */\n calculateComponentVelocity(v, f, m) {\n const df = this.modelOptions.damping * v; // damping force\n const a = (f - df) / m; // acceleration\n\n v += a * this.timestep;\n\n // Put a limit on the velocities if it is really high\n const maxV = this.options.maxVelocity || 1e9;\n if (Math.abs(v) > maxV) {\n v = v > 0 ? maxV : -maxV;\n }\n\n return v;\n }\n\n /**\n * Perform the actual step\n *\n * @param {Node.id} nodeId\n * @returns {number} the new velocity of given node\n * @private\n */\n _performStep(nodeId) {\n const node = this.body.nodes[nodeId];\n const force = this.physicsBody.forces[nodeId];\n\n if (this.options.wind) {\n force.x += this.options.wind.x;\n force.y += this.options.wind.y;\n }\n\n const velocity = this.physicsBody.velocities[nodeId];\n\n // store the state so we can revert\n this.previousStates[nodeId] = {\n x: node.x,\n y: node.y,\n vx: velocity.x,\n vy: velocity.y,\n };\n\n if (node.options.fixed.x === false) {\n velocity.x = this.calculateComponentVelocity(\n velocity.x,\n force.x,\n node.options.mass\n );\n node.x += velocity.x * this.timestep;\n } else {\n force.x = 0;\n velocity.x = 0;\n }\n\n if (node.options.fixed.y === false) {\n velocity.y = this.calculateComponentVelocity(\n velocity.y,\n force.y,\n node.options.mass\n );\n node.y += velocity.y * this.timestep;\n } else {\n force.y = 0;\n velocity.y = 0;\n }\n\n const totalVelocity = Math.sqrt(\n Math.pow(velocity.x, 2) + Math.pow(velocity.y, 2)\n );\n return totalVelocity;\n }\n\n /**\n * When initializing and stabilizing, we can freeze nodes with a predefined position.\n * This greatly speeds up stabilization because only the supportnodes for the smoothCurves have to settle.\n *\n * @private\n */\n _freezeNodes() {\n const nodes = this.body.nodes;\n for (const id in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, id)) {\n if (nodes[id].x && nodes[id].y) {\n const fixed = nodes[id].options.fixed;\n this.freezeCache[id] = { x: fixed.x, y: fixed.y };\n fixed.x = true;\n fixed.y = true;\n }\n }\n }\n }\n\n /**\n * Unfreezes the nodes that have been frozen by _freezeDefinedNodes.\n *\n * @private\n */\n _restoreFrozenNodes() {\n const nodes = this.body.nodes;\n for (const id in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, id)) {\n if (this.freezeCache[id] !== undefined) {\n nodes[id].options.fixed.x = this.freezeCache[id].x;\n nodes[id].options.fixed.y = this.freezeCache[id].y;\n }\n }\n }\n this.freezeCache = {};\n }\n\n /**\n * Find a stable position for all nodes\n *\n * @param {number} [iterations=this.options.stabilization.iterations]\n */\n stabilize(iterations = this.options.stabilization.iterations) {\n if (typeof iterations !== \"number\") {\n iterations = this.options.stabilization.iterations;\n console.error(\n \"The stabilize method needs a numeric amount of iterations. Switching to default: \",\n iterations\n );\n }\n\n if (this.physicsBody.physicsNodeIndices.length === 0) {\n this.ready = true;\n return;\n }\n\n // enable adaptive timesteps\n this.adaptiveTimestep = true && this.options.adaptiveTimestep;\n\n // this sets the width of all nodes initially which could be required for the avoidOverlap\n this.body.emitter.emit(\"_resizeNodes\");\n\n this.stopSimulation(); // stop the render loop\n this.stabilized = false;\n\n // block redraw requests\n this.body.emitter.emit(\"_blockRedraw\");\n this.targetIterations = iterations;\n\n // start the stabilization\n if (this.options.stabilization.onlyDynamicEdges === true) {\n this._freezeNodes();\n }\n this.stabilizationIterations = 0;\n\n setTimeout(() => this._stabilizationBatch(), 0);\n }\n\n /**\n * If not already stabilizing, start it and emit a start event.\n *\n * @returns {boolean} true if stabilization started with this call\n * @private\n */\n _startStabilizing() {\n if (this.startedStabilization === true) return false;\n\n this.body.emitter.emit(\"startStabilizing\");\n this.startedStabilization = true;\n return true;\n }\n\n /**\n * One batch of stabilization\n *\n * @private\n */\n _stabilizationBatch() {\n const running = () =>\n this.stabilized === false &&\n this.stabilizationIterations < this.targetIterations;\n\n const sendProgress = () => {\n this.body.emitter.emit(\"stabilizationProgress\", {\n iterations: this.stabilizationIterations,\n total: this.targetIterations,\n });\n };\n\n if (this._startStabilizing()) {\n sendProgress(); // Ensure that there is at least one start event.\n }\n\n let count = 0;\n while (running() && count < this.options.stabilization.updateInterval) {\n this.physicsTick();\n count++;\n }\n\n sendProgress();\n\n if (running()) {\n setTimeout(this._stabilizationBatch.bind(this), 0);\n } else {\n this._finalizeStabilization();\n }\n }\n\n /**\n * Wrap up the stabilization, fit and emit the events.\n *\n * @private\n */\n _finalizeStabilization() {\n this.body.emitter.emit(\"_allowRedraw\");\n if (this.options.stabilization.fit === true) {\n this.body.emitter.emit(\"fit\");\n }\n\n if (this.options.stabilization.onlyDynamicEdges === true) {\n this._restoreFrozenNodes();\n }\n\n this.body.emitter.emit(\"stabilizationIterationsDone\");\n this.body.emitter.emit(\"_requestRedraw\");\n\n if (this.stabilized === true) {\n this._emitStabilized();\n } else {\n this.startSimulation();\n }\n\n this.ready = true;\n }\n\n //--------------------------- DEBUGGING BELOW ---------------------------//\n\n /**\n * Debug function that display arrows for the forces currently active in the network.\n *\n * Use this when debugging only.\n *\n * @param {CanvasRenderingContext2D} ctx\n * @private\n */\n _drawForces(ctx) {\n for (let i = 0; i < this.physicsBody.physicsNodeIndices.length; i++) {\n const index = this.physicsBody.physicsNodeIndices[i];\n const node = this.body.nodes[index];\n const force = this.physicsBody.forces[index];\n const factor = 20;\n const colorFactor = 0.03;\n const forceSize = Math.sqrt(Math.pow(force.x, 2) + Math.pow(force.x, 2));\n\n const size = Math.min(Math.max(5, forceSize), 15);\n const arrowSize = 3 * size;\n\n const color = HSVToHex(\n (180 - Math.min(1, Math.max(0, colorFactor * forceSize)) * 180) / 360,\n 1,\n 1\n );\n\n const point = {\n x: node.x + factor * force.x,\n y: node.y + factor * force.y,\n };\n\n ctx.lineWidth = size;\n ctx.strokeStyle = color;\n ctx.beginPath();\n ctx.moveTo(node.x, node.y);\n ctx.lineTo(point.x, point.y);\n ctx.stroke();\n\n const angle = Math.atan2(force.y, force.x);\n ctx.fillStyle = color;\n EndPoints.draw(ctx, {\n type: \"arrow\",\n point: point,\n angle: angle,\n length: arrowSize,\n });\n ctx.fill();\n }\n }\n}\n\nexport default PhysicsEngine;\n","import { deepExtend } from \"vis-util/esnext\";\n\n/**\n * Utility Class\n */\nclass NetworkUtil {\n /**\n * @ignore\n */\n constructor() {}\n\n /**\n * Find the center position of the network considering the bounding boxes\n *\n * @param {Array.} allNodes\n * @param {Array.} [specificNodes=[]]\n * @returns {{minX: number, maxX: number, minY: number, maxY: number}}\n * @static\n */\n static getRange(allNodes, specificNodes = []) {\n let minY = 1e9,\n maxY = -1e9,\n minX = 1e9,\n maxX = -1e9,\n node;\n if (specificNodes.length > 0) {\n for (let i = 0; i < specificNodes.length; i++) {\n node = allNodes[specificNodes[i]];\n if (minX > node.shape.boundingBox.left) {\n minX = node.shape.boundingBox.left;\n }\n if (maxX < node.shape.boundingBox.right) {\n maxX = node.shape.boundingBox.right;\n }\n if (minY > node.shape.boundingBox.top) {\n minY = node.shape.boundingBox.top;\n } // top is negative, bottom is positive\n if (maxY < node.shape.boundingBox.bottom) {\n maxY = node.shape.boundingBox.bottom;\n } // top is negative, bottom is positive\n }\n }\n\n if (minX === 1e9 && maxX === -1e9 && minY === 1e9 && maxY === -1e9) {\n (minY = 0), (maxY = 0), (minX = 0), (maxX = 0);\n }\n return { minX: minX, maxX: maxX, minY: minY, maxY: maxY };\n }\n\n /**\n * Find the center position of the network\n *\n * @param {Array.} allNodes\n * @param {Array.} [specificNodes=[]]\n * @returns {{minX: number, maxX: number, minY: number, maxY: number}}\n * @static\n */\n static getRangeCore(allNodes, specificNodes = []) {\n let minY = 1e9,\n maxY = -1e9,\n minX = 1e9,\n maxX = -1e9,\n node;\n if (specificNodes.length > 0) {\n for (let i = 0; i < specificNodes.length; i++) {\n node = allNodes[specificNodes[i]];\n if (minX > node.x) {\n minX = node.x;\n }\n if (maxX < node.x) {\n maxX = node.x;\n }\n if (minY > node.y) {\n minY = node.y;\n } // top is negative, bottom is positive\n if (maxY < node.y) {\n maxY = node.y;\n } // top is negative, bottom is positive\n }\n }\n\n if (minX === 1e9 && maxX === -1e9 && minY === 1e9 && maxY === -1e9) {\n (minY = 0), (maxY = 0), (minX = 0), (maxX = 0);\n }\n return { minX: minX, maxX: maxX, minY: minY, maxY: maxY };\n }\n\n /**\n * @param {object} range = {minX: minX, maxX: maxX, minY: minY, maxY: maxY};\n * @returns {{x: number, y: number}}\n * @static\n */\n static findCenter(range) {\n return {\n x: 0.5 * (range.maxX + range.minX),\n y: 0.5 * (range.maxY + range.minY),\n };\n }\n\n /**\n * This returns a clone of the options or options of the edge or node to be used for construction of new edges or check functions for new nodes.\n *\n * @param {vis.Item} item\n * @param {'node'|undefined} type\n * @returns {{}}\n * @static\n */\n static cloneOptions(item, type) {\n const clonedOptions = {};\n if (type === undefined || type === \"node\") {\n deepExtend(clonedOptions, item.options, true);\n clonedOptions.x = item.x;\n clonedOptions.y = item.y;\n clonedOptions.amountOfConnections = item.edges.length;\n } else {\n deepExtend(clonedOptions, item.options, true);\n }\n return clonedOptions;\n }\n}\n\nexport default NetworkUtil;\n","import { forEach } from \"vis-util/esnext\";\nimport Node from \"../Node\";\n\n/**\n * A Cluster is a special Node that allows a group of Nodes positioned closely together\n * to be represented by a single Cluster Node.\n *\n * @augments Node\n */\nclass Cluster extends Node {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Array.}imagelist\n * @param {Array} grouplist\n * @param {object} globalOptions\n * @param {object} defaultOptions Global default options for nodes\n */\n constructor(\n options,\n body,\n imagelist,\n grouplist,\n globalOptions,\n defaultOptions\n ) {\n super(options, body, imagelist, grouplist, globalOptions, defaultOptions);\n\n this.isCluster = true;\n this.containedNodes = {};\n this.containedEdges = {};\n }\n\n /**\n * Transfer child cluster data to current and disconnect the child cluster.\n *\n * Please consult the header comment in 'Clustering.js' for the fields set here.\n *\n * @param {string|number} childClusterId id of child cluster to open\n */\n _openChildCluster(childClusterId) {\n const childCluster = this.body.nodes[childClusterId];\n if (this.containedNodes[childClusterId] === undefined) {\n throw new Error(\n \"node with id: \" + childClusterId + \" not in current cluster\"\n );\n }\n if (!childCluster.isCluster) {\n throw new Error(\"node with id: \" + childClusterId + \" is not a cluster\");\n }\n\n // Disconnect child cluster from current cluster\n delete this.containedNodes[childClusterId];\n forEach(childCluster.edges, (edge) => {\n delete this.containedEdges[edge.id];\n });\n\n // Transfer nodes and edges\n forEach(childCluster.containedNodes, (node, nodeId) => {\n this.containedNodes[nodeId] = node;\n });\n childCluster.containedNodes = {};\n\n forEach(childCluster.containedEdges, (edge, edgeId) => {\n this.containedEdges[edgeId] = edge;\n });\n childCluster.containedEdges = {};\n\n // Transfer edges within cluster edges which are clustered\n forEach(childCluster.edges, (clusterEdge) => {\n forEach(this.edges, (parentClusterEdge) => {\n // Assumption: a clustered edge can only be present in a single clustering edge\n // Not tested here\n const index = parentClusterEdge.clusteringEdgeReplacingIds.indexOf(\n clusterEdge.id\n );\n if (index === -1) return;\n\n forEach(clusterEdge.clusteringEdgeReplacingIds, (srcId) => {\n parentClusterEdge.clusteringEdgeReplacingIds.push(srcId);\n\n // Maintain correct bookkeeping for transferred edge\n this.body.edges[srcId].edgeReplacedById = parentClusterEdge.id;\n });\n\n // Remove cluster edge from parent cluster edge\n parentClusterEdge.clusteringEdgeReplacingIds.splice(index, 1);\n });\n });\n childCluster.edges = [];\n }\n}\n\nexport default Cluster;\n","/* ===========================================================================\n\n# TODO\n\n- `edgeReplacedById` not cleaned up yet on cluster edge removal\n- allowSingleNodeCluster could be a global option as well; currently needs to always\n be passed to clustering methods\n\n----------------------------------------------\n\n# State Model for Clustering\n\nThe total state for clustering is non-trivial. It is useful to have a model\navailable as to how it works. The following documents the relevant state items.\n\n\n## Network State\n\nThe following `network`-members are relevant to clustering:\n\n- `body.nodes` - all nodes actively participating in the network\n- `body.edges` - same for edges\n- `body.nodeIndices` - id's of nodes that are visible at a given moment\n- `body.edgeIndices` - same for edges\n\nThis includes:\n\n- helper nodes for dragging in `manipulation`\n- helper nodes for edge type `dynamic`\n- cluster nodes and edges\n- there may be more than this.\n\nA node/edge may be missing in the `Indices` member if:\n\n- it is a helper node\n- the node or edge state has option `hidden` set\n- It is not visible due to clustering\n\n\n## Clustering State\n\nFor the hashes, the id's of the nodes/edges are used as key.\n\nMember `network.clustering` contains the following items:\n\n- `clusteredNodes` - hash with values: { clusterId: , node: }\n- `clusteredEdges` - hash with values: restore information for given edge\n\n\nDue to nesting of clusters, these members can contain cluster nodes and edges as well.\n\nThe important thing to note here, is that the clustered nodes and edges also\nappear in the members of the cluster nodes. For data update, it is therefore\nimportant to scan these lists as well as the cluster nodes.\n\n\n### Cluster Node\n\nA cluster node has the following extra fields:\n\n- `isCluster : true` - indication that this is a cluster node\n- `containedNodes` - hash of nodes contained in this cluster\n- `containedEdges` - same for edges\n- `edges` - array of cluster edges for this node\n\n\n**NOTE:**\n\n- `containedEdges` can also contain edges which are not clustered; e.g. an edge\n connecting two nodes in the same cluster.\n\n\n### Cluster Edge\n\nThese are the items in the `edges` member of a clustered node. They have the\nfollowing relevant members:\n\n- 'clusteringEdgeReplacingIds` - array of id's of edges replaced by this edge\n\nNote that it's possible to nest clusters, so that `clusteringEdgeReplacingIds`\ncan contain edge id's of other clusters.\n\n\n### Clustered Edge\n\nThis is any edge contained by a cluster edge. It gets the following additional\nmember:\n\n- `edgeReplacedById` - id of the cluster edge in which current edge is clustered\n\n\n =========================================================================== */\nimport { deepExtend, forEach } from \"vis-util/esnext\";\nimport { v4 as randomUUID } from \"uuid\";\nimport NetworkUtil from \"../NetworkUtil\";\nimport Cluster from \"./components/nodes/Cluster\";\nimport Edge from \"./components/Edge\"; // Only needed for check on type!\nimport Node from \"./components/Node\"; // Only needed for check on type!\n\n/**\n * The clustering engine\n */\nclass ClusterEngine {\n /**\n * @param {object} body\n */\n constructor(body) {\n this.body = body;\n this.clusteredNodes = {}; // key: node id, value: { clusterId: , node: }\n this.clusteredEdges = {}; // key: edge id, value: restore information for given edge\n\n this.options = {};\n this.defaultOptions = {};\n Object.assign(this.options, this.defaultOptions);\n\n this.body.emitter.on(\"_resetData\", () => {\n this.clusteredNodes = {};\n this.clusteredEdges = {};\n });\n }\n\n /**\n *\n * @param {number} hubsize\n * @param {object} options\n */\n clusterByHubsize(hubsize, options) {\n if (hubsize === undefined) {\n hubsize = this._getHubSize();\n } else if (typeof hubsize === \"object\") {\n options = this._checkOptions(hubsize);\n hubsize = this._getHubSize();\n }\n\n const nodesToCluster = [];\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const node = this.body.nodes[this.body.nodeIndices[i]];\n if (node.edges.length >= hubsize) {\n nodesToCluster.push(node.id);\n }\n }\n\n for (let i = 0; i < nodesToCluster.length; i++) {\n this.clusterByConnection(nodesToCluster[i], options, true);\n }\n\n this.body.emitter.emit(\"_dataChanged\");\n }\n\n /**\n * loop over all nodes, check if they adhere to the condition and cluster if needed.\n *\n * @param {object} options\n * @param {boolean} [refreshData=true]\n */\n cluster(options = {}, refreshData = true) {\n if (options.joinCondition === undefined) {\n throw new Error(\n \"Cannot call clusterByNodeData without a joinCondition function in the options.\"\n );\n }\n\n // check if the options object is fine, append if needed\n options = this._checkOptions(options);\n\n const childNodesObj = {};\n const childEdgesObj = {};\n\n // collect the nodes that will be in the cluster\n forEach(this.body.nodes, (node, nodeId) => {\n if (node.options && options.joinCondition(node.options) === true) {\n childNodesObj[nodeId] = node;\n\n // collect the edges that will be in the cluster\n forEach(node.edges, (edge) => {\n if (this.clusteredEdges[edge.id] === undefined) {\n childEdgesObj[edge.id] = edge;\n }\n });\n }\n });\n\n this._cluster(childNodesObj, childEdgesObj, options, refreshData);\n }\n\n /**\n * Cluster all nodes in the network that have only X edges\n *\n * @param {number} edgeCount\n * @param {object} options\n * @param {boolean} [refreshData=true]\n */\n clusterByEdgeCount(edgeCount, options, refreshData = true) {\n options = this._checkOptions(options);\n const clusters = [];\n const usedNodes = {};\n let edge, edges, relevantEdgeCount;\n // collect the nodes that will be in the cluster\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const childNodesObj = {};\n const childEdgesObj = {};\n const nodeId = this.body.nodeIndices[i];\n const node = this.body.nodes[nodeId];\n\n // if this node is already used in another cluster this session, we do not have to re-evaluate it.\n if (usedNodes[nodeId] === undefined) {\n relevantEdgeCount = 0;\n edges = [];\n for (let j = 0; j < node.edges.length; j++) {\n edge = node.edges[j];\n if (this.clusteredEdges[edge.id] === undefined) {\n if (edge.toId !== edge.fromId) {\n relevantEdgeCount++;\n }\n edges.push(edge);\n }\n }\n\n // this node qualifies, we collect its neighbours to start the clustering process.\n if (relevantEdgeCount === edgeCount) {\n const checkJoinCondition = function (node) {\n if (\n options.joinCondition === undefined ||\n options.joinCondition === null\n ) {\n return true;\n }\n\n const clonedOptions = NetworkUtil.cloneOptions(node);\n return options.joinCondition(clonedOptions);\n };\n\n let gatheringSuccessful = true;\n for (let j = 0; j < edges.length; j++) {\n edge = edges[j];\n const childNodeId = this._getConnectedId(edge, nodeId);\n // add the nodes to the list by the join condition.\n if (checkJoinCondition(node)) {\n childEdgesObj[edge.id] = edge;\n childNodesObj[nodeId] = node;\n childNodesObj[childNodeId] = this.body.nodes[childNodeId];\n usedNodes[nodeId] = true;\n } else {\n // this node does not qualify after all.\n gatheringSuccessful = false;\n break;\n }\n }\n\n // add to the cluster queue\n if (\n Object.keys(childNodesObj).length > 0 &&\n Object.keys(childEdgesObj).length > 0 &&\n gatheringSuccessful === true\n ) {\n /**\n * Search for cluster data that contains any of the node id's\n *\n * @returns {boolean} true if no joinCondition, otherwise return value of joinCondition\n */\n const findClusterData = function () {\n for (let n = 0; n < clusters.length; ++n) {\n // Search for a cluster containing any of the node id's\n for (const m in childNodesObj) {\n if (clusters[n].nodes[m] !== undefined) {\n return clusters[n];\n }\n }\n }\n\n return undefined;\n };\n\n // If any of the found nodes is part of a cluster found in this method,\n // add the current values to that cluster\n const foundCluster = findClusterData();\n if (foundCluster !== undefined) {\n // Add nodes to found cluster if not present\n for (const m in childNodesObj) {\n if (foundCluster.nodes[m] === undefined) {\n foundCluster.nodes[m] = childNodesObj[m];\n }\n }\n\n // Add edges to found cluster, if not present\n for (const m in childEdgesObj) {\n if (foundCluster.edges[m] === undefined) {\n foundCluster.edges[m] = childEdgesObj[m];\n }\n }\n } else {\n // Create a new cluster group\n clusters.push({ nodes: childNodesObj, edges: childEdgesObj });\n }\n }\n }\n }\n }\n\n for (let i = 0; i < clusters.length; i++) {\n this._cluster(clusters[i].nodes, clusters[i].edges, options, false);\n }\n\n if (refreshData === true) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n * Cluster all nodes in the network that have only 1 edge\n *\n * @param {object} options\n * @param {boolean} [refreshData=true]\n */\n clusterOutliers(options, refreshData = true) {\n this.clusterByEdgeCount(1, options, refreshData);\n }\n\n /**\n * Cluster all nodes in the network that have only 2 edge\n *\n * @param {object} options\n * @param {boolean} [refreshData=true]\n */\n clusterBridges(options, refreshData = true) {\n this.clusterByEdgeCount(2, options, refreshData);\n }\n\n /**\n * suck all connected nodes of a node into the node.\n *\n * @param {Node.id} nodeId\n * @param {object} options\n * @param {boolean} [refreshData=true]\n */\n clusterByConnection(nodeId, options, refreshData = true) {\n // kill conditions\n if (nodeId === undefined) {\n throw new Error(\"No nodeId supplied to clusterByConnection!\");\n }\n if (this.body.nodes[nodeId] === undefined) {\n throw new Error(\n \"The nodeId given to clusterByConnection does not exist!\"\n );\n }\n\n const node = this.body.nodes[nodeId];\n options = this._checkOptions(options, node);\n if (options.clusterNodeProperties.x === undefined) {\n options.clusterNodeProperties.x = node.x;\n }\n if (options.clusterNodeProperties.y === undefined) {\n options.clusterNodeProperties.y = node.y;\n }\n if (options.clusterNodeProperties.fixed === undefined) {\n options.clusterNodeProperties.fixed = {};\n options.clusterNodeProperties.fixed.x = node.options.fixed.x;\n options.clusterNodeProperties.fixed.y = node.options.fixed.y;\n }\n\n const childNodesObj = {};\n const childEdgesObj = {};\n const parentNodeId = node.id;\n const parentClonedOptions = NetworkUtil.cloneOptions(node);\n childNodesObj[parentNodeId] = node;\n\n // collect the nodes that will be in the cluster\n for (let i = 0; i < node.edges.length; i++) {\n const edge = node.edges[i];\n if (this.clusteredEdges[edge.id] === undefined) {\n const childNodeId = this._getConnectedId(edge, parentNodeId);\n\n // if the child node is not in a cluster\n if (this.clusteredNodes[childNodeId] === undefined) {\n if (childNodeId !== parentNodeId) {\n if (options.joinCondition === undefined) {\n childEdgesObj[edge.id] = edge;\n childNodesObj[childNodeId] = this.body.nodes[childNodeId];\n } else {\n // clone the options and insert some additional parameters that could be interesting.\n const childClonedOptions = NetworkUtil.cloneOptions(\n this.body.nodes[childNodeId]\n );\n if (\n options.joinCondition(\n parentClonedOptions,\n childClonedOptions\n ) === true\n ) {\n childEdgesObj[edge.id] = edge;\n childNodesObj[childNodeId] = this.body.nodes[childNodeId];\n }\n }\n } else {\n // swallow the edge if it is self-referencing.\n childEdgesObj[edge.id] = edge;\n }\n }\n }\n }\n const childNodeIDs = Object.keys(childNodesObj).map(function (childNode) {\n return childNodesObj[childNode].id;\n });\n\n for (const childNodeKey in childNodesObj) {\n if (!Object.prototype.hasOwnProperty.call(childNodesObj, childNodeKey))\n continue;\n\n const childNode = childNodesObj[childNodeKey];\n for (let y = 0; y < childNode.edges.length; y++) {\n const childEdge = childNode.edges[y];\n if (\n childNodeIDs.indexOf(this._getConnectedId(childEdge, childNode.id)) >\n -1\n ) {\n childEdgesObj[childEdge.id] = childEdge;\n }\n }\n }\n this._cluster(childNodesObj, childEdgesObj, options, refreshData);\n }\n\n /**\n * This function creates the edges that will be attached to the cluster\n * It looks for edges that are connected to the nodes from the \"outside' of the cluster.\n *\n * @param {{Node.id: vis.Node}} childNodesObj\n * @param {{vis.Edge.id: vis.Edge}} childEdgesObj\n * @param {object} clusterNodeProperties\n * @param {object} clusterEdgeProperties\n * @private\n */\n _createClusterEdges(\n childNodesObj,\n childEdgesObj,\n clusterNodeProperties,\n clusterEdgeProperties\n ) {\n let edge, childNodeId, childNode, toId, fromId, otherNodeId;\n\n // loop over all child nodes and their edges to find edges going out of the cluster\n // these edges will be replaced by clusterEdges.\n const childKeys = Object.keys(childNodesObj);\n const createEdges = [];\n for (let i = 0; i < childKeys.length; i++) {\n childNodeId = childKeys[i];\n childNode = childNodesObj[childNodeId];\n\n // construct new edges from the cluster to others\n for (let j = 0; j < childNode.edges.length; j++) {\n edge = childNode.edges[j];\n // we only handle edges that are visible to the system, not the disabled ones from the clustering process.\n if (this.clusteredEdges[edge.id] === undefined) {\n // self-referencing edges will be added to the \"hidden\" list\n if (edge.toId == edge.fromId) {\n childEdgesObj[edge.id] = edge;\n } else {\n // set up the from and to.\n if (edge.toId == childNodeId) {\n // this is a double equals because ints and strings can be interchanged here.\n toId = clusterNodeProperties.id;\n fromId = edge.fromId;\n otherNodeId = fromId;\n } else {\n toId = edge.toId;\n fromId = clusterNodeProperties.id;\n otherNodeId = toId;\n }\n }\n\n // Only edges from the cluster outwards are being replaced.\n if (childNodesObj[otherNodeId] === undefined) {\n createEdges.push({ edge: edge, fromId: fromId, toId: toId });\n }\n }\n }\n }\n\n //\n // Here we actually create the replacement edges.\n //\n // We could not do this in the loop above as the creation process\n // would add an edge to the edges array we are iterating over.\n //\n // NOTE: a clustered edge can have multiple base edges!\n //\n const newEdges = [];\n\n /**\n * Find a cluster edge which matches the given created edge.\n *\n * @param {vis.Edge} createdEdge\n * @returns {vis.Edge}\n */\n const getNewEdge = function (createdEdge) {\n for (let j = 0; j < newEdges.length; j++) {\n const newEdge = newEdges[j];\n\n // We replace both to and from edges with a single cluster edge\n const matchToDirection =\n createdEdge.fromId === newEdge.fromId &&\n createdEdge.toId === newEdge.toId;\n const matchFromDirection =\n createdEdge.fromId === newEdge.toId &&\n createdEdge.toId === newEdge.fromId;\n\n if (matchToDirection || matchFromDirection) {\n return newEdge;\n }\n }\n\n return null;\n };\n\n for (let j = 0; j < createEdges.length; j++) {\n const createdEdge = createEdges[j];\n const edge = createdEdge.edge;\n let newEdge = getNewEdge(createdEdge);\n\n if (newEdge === null) {\n // Create a clustered edge for this connection\n newEdge = this._createClusteredEdge(\n createdEdge.fromId,\n createdEdge.toId,\n edge,\n clusterEdgeProperties\n );\n\n newEdges.push(newEdge);\n } else {\n newEdge.clusteringEdgeReplacingIds.push(edge.id);\n }\n\n // also reference the new edge in the old edge\n this.body.edges[edge.id].edgeReplacedById = newEdge.id;\n\n // hide the replaced edge\n this._backupEdgeOptions(edge);\n edge.setOptions({ physics: false });\n }\n }\n\n /**\n * This function checks the options that can be supplied to the different cluster functions\n * for certain fields and inserts defaults if needed\n *\n * @param {object} options\n * @returns {*}\n * @private\n */\n _checkOptions(options = {}) {\n if (options.clusterEdgeProperties === undefined) {\n options.clusterEdgeProperties = {};\n }\n if (options.clusterNodeProperties === undefined) {\n options.clusterNodeProperties = {};\n }\n\n return options;\n }\n\n /**\n *\n * @param {object} childNodesObj | object with node objects, id as keys, same as childNodes except it also contains a source node\n * @param {object} childEdgesObj | object with edge objects, id as keys\n * @param {Array} options | object with {clusterNodeProperties, clusterEdgeProperties, processProperties}\n * @param {boolean} refreshData | when true, do not wrap up\n * @private\n */\n _cluster(childNodesObj, childEdgesObj, options, refreshData = true) {\n // Remove nodes which are already clustered\n const tmpNodesToRemove = [];\n for (const nodeId in childNodesObj) {\n if (Object.prototype.hasOwnProperty.call(childNodesObj, nodeId)) {\n if (this.clusteredNodes[nodeId] !== undefined) {\n tmpNodesToRemove.push(nodeId);\n }\n }\n }\n\n for (let n = 0; n < tmpNodesToRemove.length; ++n) {\n delete childNodesObj[tmpNodesToRemove[n]];\n }\n\n // kill condition: no nodes don't bother\n if (Object.keys(childNodesObj).length == 0) {\n return;\n }\n\n // allow clusters of 1 if options allow\n if (\n Object.keys(childNodesObj).length == 1 &&\n options.clusterNodeProperties.allowSingleNodeCluster != true\n ) {\n return;\n }\n\n let clusterNodeProperties = deepExtend({}, options.clusterNodeProperties);\n\n // construct the clusterNodeProperties\n if (options.processProperties !== undefined) {\n // get the childNode options\n const childNodesOptions = [];\n for (const nodeId in childNodesObj) {\n if (Object.prototype.hasOwnProperty.call(childNodesObj, nodeId)) {\n const clonedOptions = NetworkUtil.cloneOptions(childNodesObj[nodeId]);\n childNodesOptions.push(clonedOptions);\n }\n }\n\n // get cluster properties based on childNodes\n const childEdgesOptions = [];\n for (const edgeId in childEdgesObj) {\n if (Object.prototype.hasOwnProperty.call(childEdgesObj, edgeId)) {\n // these cluster edges will be removed on creation of the cluster.\n if (edgeId.substr(0, 12) !== \"clusterEdge:\") {\n const clonedOptions = NetworkUtil.cloneOptions(\n childEdgesObj[edgeId],\n \"edge\"\n );\n childEdgesOptions.push(clonedOptions);\n }\n }\n }\n\n clusterNodeProperties = options.processProperties(\n clusterNodeProperties,\n childNodesOptions,\n childEdgesOptions\n );\n if (!clusterNodeProperties) {\n throw new Error(\n \"The processProperties function does not return properties!\"\n );\n }\n }\n\n // check if we have an unique id;\n if (clusterNodeProperties.id === undefined) {\n clusterNodeProperties.id = \"cluster:\" + randomUUID();\n }\n const clusterId = clusterNodeProperties.id;\n\n if (clusterNodeProperties.label === undefined) {\n clusterNodeProperties.label = \"cluster\";\n }\n\n // give the clusterNode a position if it does not have one.\n let pos = undefined;\n if (clusterNodeProperties.x === undefined) {\n pos = this._getClusterPosition(childNodesObj);\n clusterNodeProperties.x = pos.x;\n }\n if (clusterNodeProperties.y === undefined) {\n if (pos === undefined) {\n pos = this._getClusterPosition(childNodesObj);\n }\n clusterNodeProperties.y = pos.y;\n }\n\n // force the ID to remain the same\n clusterNodeProperties.id = clusterId;\n\n // create the cluster Node\n // Note that allowSingleNodeCluster, if present, is stored in the options as well\n const clusterNode = this.body.functions.createNode(\n clusterNodeProperties,\n Cluster\n );\n clusterNode.containedNodes = childNodesObj;\n clusterNode.containedEdges = childEdgesObj;\n // cache a copy from the cluster edge properties if we have to reconnect others later on\n clusterNode.clusterEdgeProperties = options.clusterEdgeProperties;\n\n // finally put the cluster node into global\n this.body.nodes[clusterNodeProperties.id] = clusterNode;\n\n this._clusterEdges(\n childNodesObj,\n childEdgesObj,\n clusterNodeProperties,\n options.clusterEdgeProperties\n );\n\n // set ID to undefined so no duplicates arise\n clusterNodeProperties.id = undefined;\n\n // wrap up\n if (refreshData === true) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n *\n * @param {Edge} edge\n * @private\n */\n _backupEdgeOptions(edge) {\n if (this.clusteredEdges[edge.id] === undefined) {\n this.clusteredEdges[edge.id] = { physics: edge.options.physics };\n }\n }\n\n /**\n *\n * @param {Edge} edge\n * @private\n */\n _restoreEdge(edge) {\n const originalOptions = this.clusteredEdges[edge.id];\n if (originalOptions !== undefined) {\n edge.setOptions({ physics: originalOptions.physics });\n delete this.clusteredEdges[edge.id];\n }\n }\n\n /**\n * Check if a node is a cluster.\n *\n * @param {Node.id} nodeId\n * @returns {*}\n */\n isCluster(nodeId) {\n if (this.body.nodes[nodeId] !== undefined) {\n return this.body.nodes[nodeId].isCluster === true;\n } else {\n console.error(\"Node does not exist.\");\n return false;\n }\n }\n\n /**\n * get the position of the cluster node based on what's inside\n *\n * @param {object} childNodesObj | object with node objects, id as keys\n * @returns {{x: number, y: number}}\n * @private\n */\n _getClusterPosition(childNodesObj) {\n const childKeys = Object.keys(childNodesObj);\n let minX = childNodesObj[childKeys[0]].x;\n let maxX = childNodesObj[childKeys[0]].x;\n let minY = childNodesObj[childKeys[0]].y;\n let maxY = childNodesObj[childKeys[0]].y;\n let node;\n for (let i = 1; i < childKeys.length; i++) {\n node = childNodesObj[childKeys[i]];\n minX = node.x < minX ? node.x : minX;\n maxX = node.x > maxX ? node.x : maxX;\n minY = node.y < minY ? node.y : minY;\n maxY = node.y > maxY ? node.y : maxY;\n }\n\n return { x: 0.5 * (minX + maxX), y: 0.5 * (minY + maxY) };\n }\n\n /**\n * Open a cluster by calling this function.\n *\n * @param {vis.Edge.id} clusterNodeId | the ID of the cluster node\n * @param {object} options\n * @param {boolean} refreshData | wrap up afterwards if not true\n */\n openCluster(clusterNodeId, options, refreshData = true) {\n // kill conditions\n if (clusterNodeId === undefined) {\n throw new Error(\"No clusterNodeId supplied to openCluster.\");\n }\n\n const clusterNode = this.body.nodes[clusterNodeId];\n\n if (clusterNode === undefined) {\n throw new Error(\n \"The clusterNodeId supplied to openCluster does not exist.\"\n );\n }\n if (\n clusterNode.isCluster !== true ||\n clusterNode.containedNodes === undefined ||\n clusterNode.containedEdges === undefined\n ) {\n throw new Error(\"The node:\" + clusterNodeId + \" is not a valid cluster.\");\n }\n\n // Check if current cluster is clustered itself\n const stack = this.findNode(clusterNodeId);\n const parentIndex = stack.indexOf(clusterNodeId) - 1;\n if (parentIndex >= 0) {\n // Current cluster is clustered; transfer contained nodes and edges to parent\n const parentClusterNodeId = stack[parentIndex];\n const parentClusterNode = this.body.nodes[parentClusterNodeId];\n\n // clustering.clusteredNodes and clustering.clusteredEdges remain unchanged\n parentClusterNode._openChildCluster(clusterNodeId);\n\n // All components of child cluster node have been transferred. It can die now.\n delete this.body.nodes[clusterNodeId];\n if (refreshData === true) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n\n return;\n }\n\n // main body\n const containedNodes = clusterNode.containedNodes;\n const containedEdges = clusterNode.containedEdges;\n\n // allow the user to position the nodes after release.\n if (\n options !== undefined &&\n options.releaseFunction !== undefined &&\n typeof options.releaseFunction === \"function\"\n ) {\n const positions = {};\n const clusterPosition = { x: clusterNode.x, y: clusterNode.y };\n for (const nodeId in containedNodes) {\n if (Object.prototype.hasOwnProperty.call(containedNodes, nodeId)) {\n const containedNode = this.body.nodes[nodeId];\n positions[nodeId] = { x: containedNode.x, y: containedNode.y };\n }\n }\n const newPositions = options.releaseFunction(clusterPosition, positions);\n\n for (const nodeId in containedNodes) {\n if (Object.prototype.hasOwnProperty.call(containedNodes, nodeId)) {\n const containedNode = this.body.nodes[nodeId];\n if (newPositions[nodeId] !== undefined) {\n containedNode.x =\n newPositions[nodeId].x === undefined\n ? clusterNode.x\n : newPositions[nodeId].x;\n containedNode.y =\n newPositions[nodeId].y === undefined\n ? clusterNode.y\n : newPositions[nodeId].y;\n }\n }\n }\n } else {\n // copy the position from the cluster\n forEach(containedNodes, function (containedNode) {\n // inherit position\n if (containedNode.options.fixed.x === false) {\n containedNode.x = clusterNode.x;\n }\n if (containedNode.options.fixed.y === false) {\n containedNode.y = clusterNode.y;\n }\n });\n }\n\n // release nodes\n for (const nodeId in containedNodes) {\n if (Object.prototype.hasOwnProperty.call(containedNodes, nodeId)) {\n const containedNode = this.body.nodes[nodeId];\n\n // inherit speed\n containedNode.vx = clusterNode.vx;\n containedNode.vy = clusterNode.vy;\n\n containedNode.setOptions({ physics: true });\n\n delete this.clusteredNodes[nodeId];\n }\n }\n\n // copy the clusterNode edges because we cannot iterate over an object that we add or remove from.\n const edgesToBeDeleted = [];\n for (let i = 0; i < clusterNode.edges.length; i++) {\n edgesToBeDeleted.push(clusterNode.edges[i]);\n }\n\n // actually handling the deleting.\n for (let i = 0; i < edgesToBeDeleted.length; i++) {\n const edge = edgesToBeDeleted[i];\n const otherNodeId = this._getConnectedId(edge, clusterNodeId);\n const otherNode = this.clusteredNodes[otherNodeId];\n\n for (let j = 0; j < edge.clusteringEdgeReplacingIds.length; j++) {\n const transferId = edge.clusteringEdgeReplacingIds[j];\n const transferEdge = this.body.edges[transferId];\n if (transferEdge === undefined) continue;\n\n // if the other node is in another cluster, we transfer ownership of this edge to the other cluster\n if (otherNode !== undefined) {\n // transfer ownership:\n const otherCluster = this.body.nodes[otherNode.clusterId];\n otherCluster.containedEdges[transferEdge.id] = transferEdge;\n\n // delete local reference\n delete containedEdges[transferEdge.id];\n\n // get to and from\n let fromId = transferEdge.fromId;\n let toId = transferEdge.toId;\n if (transferEdge.toId == otherNodeId) {\n toId = otherNode.clusterId;\n } else {\n fromId = otherNode.clusterId;\n }\n\n // create new cluster edge from the otherCluster\n this._createClusteredEdge(\n fromId,\n toId,\n transferEdge,\n otherCluster.clusterEdgeProperties,\n { hidden: false, physics: true }\n );\n } else {\n this._restoreEdge(transferEdge);\n }\n }\n\n edge.remove();\n }\n\n // handle the releasing of the edges\n for (const edgeId in containedEdges) {\n if (Object.prototype.hasOwnProperty.call(containedEdges, edgeId)) {\n this._restoreEdge(containedEdges[edgeId]);\n }\n }\n\n // remove clusterNode\n delete this.body.nodes[clusterNodeId];\n\n if (refreshData === true) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n *\n * @param {Cluster.id} clusterId\n * @returns {Array.}\n */\n getNodesInCluster(clusterId) {\n const nodesArray = [];\n if (this.isCluster(clusterId) === true) {\n const containedNodes = this.body.nodes[clusterId].containedNodes;\n for (const nodeId in containedNodes) {\n if (Object.prototype.hasOwnProperty.call(containedNodes, nodeId)) {\n nodesArray.push(this.body.nodes[nodeId].id);\n }\n }\n }\n\n return nodesArray;\n }\n\n /**\n * Get the stack clusterId's that a certain node resides in. cluster A -> cluster B -> cluster C -> node\n *\n * If a node can't be found in the chain, return an empty array.\n *\n * @param {string|number} nodeId\n * @returns {Array}\n */\n findNode(nodeId) {\n const stack = [];\n const max = 100;\n let counter = 0;\n let node;\n\n while (this.clusteredNodes[nodeId] !== undefined && counter < max) {\n node = this.body.nodes[nodeId];\n if (node === undefined) return [];\n stack.push(node.id);\n\n nodeId = this.clusteredNodes[nodeId].clusterId;\n counter++;\n }\n\n node = this.body.nodes[nodeId];\n if (node === undefined) return [];\n stack.push(node.id);\n\n stack.reverse();\n return stack;\n }\n\n /**\n * Using a clustered nodeId, update with the new options\n *\n * @param {Node.id} clusteredNodeId\n * @param {object} newOptions\n */\n updateClusteredNode(clusteredNodeId, newOptions) {\n if (clusteredNodeId === undefined) {\n throw new Error(\"No clusteredNodeId supplied to updateClusteredNode.\");\n }\n if (newOptions === undefined) {\n throw new Error(\"No newOptions supplied to updateClusteredNode.\");\n }\n if (this.body.nodes[clusteredNodeId] === undefined) {\n throw new Error(\n \"The clusteredNodeId supplied to updateClusteredNode does not exist.\"\n );\n }\n\n this.body.nodes[clusteredNodeId].setOptions(newOptions);\n this.body.emitter.emit(\"_dataChanged\");\n }\n\n /**\n * Using a base edgeId, update all related clustered edges with the new options\n *\n * @param {vis.Edge.id} startEdgeId\n * @param {object} newOptions\n */\n updateEdge(startEdgeId, newOptions) {\n if (startEdgeId === undefined) {\n throw new Error(\"No startEdgeId supplied to updateEdge.\");\n }\n if (newOptions === undefined) {\n throw new Error(\"No newOptions supplied to updateEdge.\");\n }\n if (this.body.edges[startEdgeId] === undefined) {\n throw new Error(\"The startEdgeId supplied to updateEdge does not exist.\");\n }\n\n const allEdgeIds = this.getClusteredEdges(startEdgeId);\n for (let i = 0; i < allEdgeIds.length; i++) {\n const edge = this.body.edges[allEdgeIds[i]];\n edge.setOptions(newOptions);\n }\n this.body.emitter.emit(\"_dataChanged\");\n }\n\n /**\n * Get a stack of clusterEdgeId's (+base edgeid) that a base edge is the same as. cluster edge C -> cluster edge B -> cluster edge A -> base edge(edgeId)\n *\n * @param {vis.Edge.id} edgeId\n * @returns {Array.}\n */\n getClusteredEdges(edgeId) {\n const stack = [];\n const max = 100;\n let counter = 0;\n\n while (\n edgeId !== undefined &&\n this.body.edges[edgeId] !== undefined &&\n counter < max\n ) {\n stack.push(this.body.edges[edgeId].id);\n edgeId = this.body.edges[edgeId].edgeReplacedById;\n counter++;\n }\n stack.reverse();\n return stack;\n }\n\n /**\n * Get the base edge id of clusterEdgeId. cluster edge (clusteredEdgeId) -> cluster edge B -> cluster edge C -> base edge\n *\n * @param {vis.Edge.id} clusteredEdgeId\n * @returns {vis.Edge.id} baseEdgeId\n *\n * TODO: deprecate in 5.0.0. Method getBaseEdges() is the correct one to use.\n */\n getBaseEdge(clusteredEdgeId) {\n // Just kludge this by returning the first base edge id found\n return this.getBaseEdges(clusteredEdgeId)[0];\n }\n\n /**\n * Get all regular edges for this clustered edge id.\n *\n * @param {vis.Edge.id} clusteredEdgeId\n * @returns {Array.} all baseEdgeId's under this clustered edge\n */\n getBaseEdges(clusteredEdgeId) {\n const IdsToHandle = [clusteredEdgeId];\n const doneIds = [];\n const foundIds = [];\n const max = 100;\n let counter = 0;\n\n while (IdsToHandle.length > 0 && counter < max) {\n const nextId = IdsToHandle.pop();\n if (nextId === undefined) continue; // Paranoia here and onwards\n const nextEdge = this.body.edges[nextId];\n if (nextEdge === undefined) continue;\n counter++;\n\n const replacingIds = nextEdge.clusteringEdgeReplacingIds;\n if (replacingIds === undefined) {\n // nextId is a base id\n foundIds.push(nextId);\n } else {\n // Another cluster edge, unravel this one as well\n for (let i = 0; i < replacingIds.length; ++i) {\n const replacingId = replacingIds[i];\n\n // Don't add if already handled\n // TODO: never triggers; find a test-case which does\n if (\n IdsToHandle.indexOf(replacingIds) !== -1 ||\n doneIds.indexOf(replacingIds) !== -1\n ) {\n continue;\n }\n\n IdsToHandle.push(replacingId);\n }\n }\n\n doneIds.push(nextId);\n }\n\n return foundIds;\n }\n\n /**\n * Get the Id the node is connected to\n *\n * @param {vis.Edge} edge\n * @param {Node.id} nodeId\n * @returns {*}\n * @private\n */\n _getConnectedId(edge, nodeId) {\n if (edge.toId != nodeId) {\n return edge.toId;\n } else if (edge.fromId != nodeId) {\n return edge.fromId;\n } else {\n return edge.fromId;\n }\n }\n\n /**\n * We determine how many connections denote an important hub.\n * We take the mean + 2*std as the important hub size. (Assuming a normal distribution of data, ~2.2%)\n *\n * @returns {number}\n * @private\n */\n _getHubSize() {\n let average = 0;\n let averageSquared = 0;\n let hubCounter = 0;\n let largestHub = 0;\n\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const node = this.body.nodes[this.body.nodeIndices[i]];\n if (node.edges.length > largestHub) {\n largestHub = node.edges.length;\n }\n average += node.edges.length;\n averageSquared += Math.pow(node.edges.length, 2);\n hubCounter += 1;\n }\n average = average / hubCounter;\n averageSquared = averageSquared / hubCounter;\n\n const variance = averageSquared - Math.pow(average, 2);\n const standardDeviation = Math.sqrt(variance);\n\n let hubThreshold = Math.floor(average + 2 * standardDeviation);\n\n // always have at least one to cluster\n if (hubThreshold > largestHub) {\n hubThreshold = largestHub;\n }\n\n return hubThreshold;\n }\n\n /**\n * Create an edge for the cluster representation.\n *\n * @param {Node.id} fromId\n * @param {Node.id} toId\n * @param {vis.Edge} baseEdge\n * @param {object} clusterEdgeProperties\n * @param {object} extraOptions\n * @returns {Edge} newly created clustered edge\n * @private\n */\n _createClusteredEdge(\n fromId,\n toId,\n baseEdge,\n clusterEdgeProperties,\n extraOptions\n ) {\n // copy the options of the edge we will replace\n const clonedOptions = NetworkUtil.cloneOptions(baseEdge, \"edge\");\n // make sure the properties of clusterEdges are superimposed on it\n deepExtend(clonedOptions, clusterEdgeProperties);\n\n // set up the edge\n clonedOptions.from = fromId;\n clonedOptions.to = toId;\n clonedOptions.id = \"clusterEdge:\" + randomUUID();\n\n // apply the edge specific options to it if specified\n if (extraOptions !== undefined) {\n deepExtend(clonedOptions, extraOptions);\n }\n\n const newEdge = this.body.functions.createEdge(clonedOptions);\n newEdge.clusteringEdgeReplacingIds = [baseEdge.id];\n newEdge.connect();\n\n // Register the new edge\n this.body.edges[newEdge.id] = newEdge;\n\n return newEdge;\n }\n\n /**\n * Add the passed child nodes and edges to the given cluster node.\n *\n * @param {object | Node} childNodes hash of nodes or single node to add in cluster\n * @param {object | Edge} childEdges hash of edges or single edge to take into account when clustering\n * @param {Node} clusterNode cluster node to add nodes and edges to\n * @param {object} [clusterEdgeProperties]\n * @private\n */\n _clusterEdges(childNodes, childEdges, clusterNode, clusterEdgeProperties) {\n if (childEdges instanceof Edge) {\n const edge = childEdges;\n const obj = {};\n obj[edge.id] = edge;\n childEdges = obj;\n }\n\n if (childNodes instanceof Node) {\n const node = childNodes;\n const obj = {};\n obj[node.id] = node;\n childNodes = obj;\n }\n\n if (clusterNode === undefined || clusterNode === null) {\n throw new Error(\"_clusterEdges: parameter clusterNode required\");\n }\n\n if (clusterEdgeProperties === undefined) {\n // Take the required properties from the cluster node\n clusterEdgeProperties = clusterNode.clusterEdgeProperties;\n }\n\n // create the new edges that will connect to the cluster.\n // All self-referencing edges will be added to childEdges here.\n this._createClusterEdges(\n childNodes,\n childEdges,\n clusterNode,\n clusterEdgeProperties\n );\n\n // disable the childEdges\n for (const edgeId in childEdges) {\n if (Object.prototype.hasOwnProperty.call(childEdges, edgeId)) {\n if (this.body.edges[edgeId] !== undefined) {\n const edge = this.body.edges[edgeId];\n // cache the options before changing\n this._backupEdgeOptions(edge);\n // disable physics and hide the edge\n edge.setOptions({ physics: false });\n }\n }\n }\n\n // disable the childNodes\n for (const nodeId in childNodes) {\n if (Object.prototype.hasOwnProperty.call(childNodes, nodeId)) {\n this.clusteredNodes[nodeId] = {\n clusterId: clusterNode.id,\n node: this.body.nodes[nodeId],\n };\n this.body.nodes[nodeId].setOptions({ physics: false });\n }\n }\n }\n\n /**\n * Determine in which cluster given nodeId resides.\n *\n * If not in cluster, return undefined.\n *\n * NOTE: If you know a cleaner way to do this, please enlighten me (wimrijnders).\n *\n * @param {Node.id} nodeId\n * @returns {Node|undefined} Node instance for cluster, if present\n * @private\n */\n _getClusterNodeForNode(nodeId) {\n if (nodeId === undefined) return undefined;\n const clusteredNode = this.clusteredNodes[nodeId];\n\n // NOTE: If no cluster info found, it should actually be an error\n if (clusteredNode === undefined) return undefined;\n const clusterId = clusteredNode.clusterId;\n if (clusterId === undefined) return undefined;\n\n return this.body.nodes[clusterId];\n }\n\n /**\n * Internal helper function for conditionally removing items in array\n *\n * Done like this because Array.filter() is not fully supported by all IE's.\n *\n * @param {Array} arr\n * @param {Function} callback\n * @returns {Array}\n * @private\n */\n _filter(arr, callback) {\n const ret = [];\n\n forEach(arr, (item) => {\n if (callback(item)) {\n ret.push(item);\n }\n });\n\n return ret;\n }\n\n /**\n * Scan all edges for changes in clustering and adjust this if necessary.\n *\n * Call this (internally) after there has been a change in node or edge data.\n *\n * Pre: States of this.body.nodes and this.body.edges consistent\n * Pre: this.clusteredNodes and this.clusteredEdge consistent with containedNodes and containedEdges\n * of cluster nodes.\n */\n _updateState() {\n let nodeId;\n const deletedNodeIds = [];\n const deletedEdgeIds = {};\n\n /**\n * Utility function to iterate over clustering nodes only\n *\n * @param {Function} callback function to call for each cluster node\n */\n const eachClusterNode = (callback) => {\n forEach(this.body.nodes, (node) => {\n if (node.isCluster === true) {\n callback(node);\n }\n });\n };\n\n //\n // Remove deleted regular nodes from clustering\n //\n\n // Determine the deleted nodes\n for (nodeId in this.clusteredNodes) {\n if (!Object.prototype.hasOwnProperty.call(this.clusteredNodes, nodeId))\n continue;\n const node = this.body.nodes[nodeId];\n\n if (node === undefined) {\n deletedNodeIds.push(nodeId);\n }\n }\n\n // Remove nodes from cluster nodes\n eachClusterNode(function (clusterNode) {\n for (let n = 0; n < deletedNodeIds.length; n++) {\n delete clusterNode.containedNodes[deletedNodeIds[n]];\n }\n });\n\n // Remove nodes from cluster list\n for (let n = 0; n < deletedNodeIds.length; n++) {\n delete this.clusteredNodes[deletedNodeIds[n]];\n }\n\n //\n // Remove deleted edges from clustering\n //\n\n // Add the deleted clustered edges to the list\n forEach(this.clusteredEdges, (edgeId) => {\n const edge = this.body.edges[edgeId];\n if (edge === undefined || !edge.endPointsValid()) {\n deletedEdgeIds[edgeId] = edgeId;\n }\n });\n\n // Cluster nodes can also contain edges which are not clustered,\n // i.e. nodes 1-2 within cluster with an edge in between.\n // So the cluster nodes also need to be scanned for invalid edges\n eachClusterNode(function (clusterNode) {\n forEach(clusterNode.containedEdges, (edge, edgeId) => {\n if (!edge.endPointsValid() && !deletedEdgeIds[edgeId]) {\n deletedEdgeIds[edgeId] = edgeId;\n }\n });\n });\n\n // Also scan for cluster edges which need to be removed in the active list.\n // Regular edges have been removed beforehand, so this only picks up the cluster edges.\n forEach(this.body.edges, (edge, edgeId) => {\n // Explicitly scan the contained edges for validity\n let isValid = true;\n const replacedIds = edge.clusteringEdgeReplacingIds;\n if (replacedIds !== undefined) {\n let numValid = 0;\n\n forEach(replacedIds, (containedEdgeId) => {\n const containedEdge = this.body.edges[containedEdgeId];\n\n if (containedEdge !== undefined && containedEdge.endPointsValid()) {\n numValid += 1;\n }\n });\n\n isValid = numValid > 0;\n }\n\n if (!edge.endPointsValid() || !isValid) {\n deletedEdgeIds[edgeId] = edgeId;\n }\n });\n\n // Remove edges from cluster nodes\n eachClusterNode((clusterNode) => {\n forEach(deletedEdgeIds, (deletedEdgeId) => {\n delete clusterNode.containedEdges[deletedEdgeId];\n\n forEach(clusterNode.edges, (edge, m) => {\n if (edge.id === deletedEdgeId) {\n clusterNode.edges[m] = null; // Don't want to directly delete here, because in the loop\n return;\n }\n\n edge.clusteringEdgeReplacingIds = this._filter(\n edge.clusteringEdgeReplacingIds,\n function (id) {\n return !deletedEdgeIds[id];\n }\n );\n });\n\n // Clean up the nulls\n clusterNode.edges = this._filter(clusterNode.edges, function (item) {\n return item !== null;\n });\n });\n });\n\n // Remove from cluster list\n forEach(deletedEdgeIds, (edgeId) => {\n delete this.clusteredEdges[edgeId];\n });\n\n // Remove cluster edges from active list (this.body.edges).\n // deletedEdgeIds still contains id of regular edges, but these should all\n // be gone when you reach here.\n forEach(deletedEdgeIds, (edgeId) => {\n delete this.body.edges[edgeId];\n });\n\n //\n // Check changed cluster state of edges\n //\n\n // Iterating over keys here, because edges may be removed in the loop\n const ids = Object.keys(this.body.edges);\n forEach(ids, (edgeId) => {\n const edge = this.body.edges[edgeId];\n\n const shouldBeClustered =\n this._isClusteredNode(edge.fromId) || this._isClusteredNode(edge.toId);\n if (shouldBeClustered === this._isClusteredEdge(edge.id)) {\n return; // all is well\n }\n\n if (shouldBeClustered) {\n // add edge to clustering\n const clusterFrom = this._getClusterNodeForNode(edge.fromId);\n if (clusterFrom !== undefined) {\n this._clusterEdges(this.body.nodes[edge.fromId], edge, clusterFrom);\n }\n\n const clusterTo = this._getClusterNodeForNode(edge.toId);\n if (clusterTo !== undefined) {\n this._clusterEdges(this.body.nodes[edge.toId], edge, clusterTo);\n }\n\n // TODO: check that it works for both edges clustered\n // (This might be paranoia)\n } else {\n delete this._clusterEdges[edgeId];\n this._restoreEdge(edge);\n // This should not be happening, the state should\n // be properly updated at this point.\n //\n // If it *is* reached during normal operation, then we have to implement\n // undo clustering for this edge here.\n // throw new Error('remove edge from clustering not implemented!')\n }\n });\n\n // Clusters may be nested to any level. Keep on opening until nothing to open\n let changed = false;\n let continueLoop = true;\n while (continueLoop) {\n const clustersToOpen = [];\n\n // Determine the id's of clusters that need opening\n eachClusterNode(function (clusterNode) {\n const numNodes = Object.keys(clusterNode.containedNodes).length;\n const allowSingle = clusterNode.options.allowSingleNodeCluster === true;\n if ((allowSingle && numNodes < 1) || (!allowSingle && numNodes < 2)) {\n clustersToOpen.push(clusterNode.id);\n }\n });\n\n // Open them\n for (let n = 0; n < clustersToOpen.length; ++n) {\n this.openCluster(\n clustersToOpen[n],\n {},\n false /* Don't refresh, we're in an refresh/update already */\n );\n }\n\n continueLoop = clustersToOpen.length > 0;\n changed = changed || continueLoop;\n }\n\n if (changed) {\n this._updateState(); // Redo this method (recursion possible! should be safe)\n }\n }\n\n /**\n * Determine if node with given id is part of a cluster.\n *\n * @param {Node.id} nodeId\n * @returns {boolean} true if part of a cluster.\n */\n _isClusteredNode(nodeId) {\n return this.clusteredNodes[nodeId] !== undefined;\n }\n\n /**\n * Determine if edge with given id is not visible due to clustering.\n *\n * An edge is considered clustered if:\n * - it is directly replaced by a clustering edge\n * - any of its connecting nodes is in a cluster\n *\n * @param {vis.Edge.id} edgeId\n * @returns {boolean} true if part of a cluster.\n */\n _isClusteredEdge(edgeId) {\n return this.clusteredEdges[edgeId] !== undefined;\n }\n}\n\nexport default ClusterEngine;\n","import { selectiveDeepExtend } from \"vis-util/esnext\";\n\n/**\n * Initializes window.requestAnimationFrame() to a usable form.\n *\n * Specifically, set up this method for the case of running on node.js with jsdom enabled.\n *\n * NOTES:\n *\n * On node.js, when calling this directly outside of this class, `window` is not defined.\n * This happens even if jsdom is used.\n * For node.js + jsdom, `window` is available at the moment the constructor is called.\n * For this reason, the called is placed within the constructor.\n * Even then, `window.requestAnimationFrame()` is not defined, so it still needs to be added.\n * During unit testing, it happens that the window object is reset during execution, causing\n * a runtime error due to missing `requestAnimationFrame()`. This needs to be compensated for,\n * see `_requestNextFrame()`.\n * Since this is a global object, it may affect other modules besides `Network`. With normal\n * usage, this does not cause any problems. During unit testing, errors may occur. These have\n * been compensated for, see comment block in _requestNextFrame().\n *\n * @private\n */\nfunction _initRequestAnimationFrame() {\n let func;\n\n if (window !== undefined) {\n func =\n window.requestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.msRequestAnimationFrame;\n }\n\n if (func === undefined) {\n // window or method not present, setting mock requestAnimationFrame\n window.requestAnimationFrame = function (callback) {\n //console.log(\"Called mock requestAnimationFrame\");\n callback();\n };\n } else {\n window.requestAnimationFrame = func;\n }\n}\n\n/**\n * The canvas renderer\n */\nclass CanvasRenderer {\n /**\n * @param {object} body\n * @param {Canvas} canvas\n */\n constructor(body, canvas) {\n _initRequestAnimationFrame();\n this.body = body;\n this.canvas = canvas;\n\n this.redrawRequested = false;\n this.renderTimer = undefined;\n this.requiresTimeout = true;\n this.renderingActive = false;\n this.renderRequests = 0;\n this.allowRedraw = true;\n\n this.dragging = false;\n this.zooming = false;\n this.options = {};\n this.defaultOptions = {\n hideEdgesOnDrag: false,\n hideEdgesOnZoom: false,\n hideNodesOnDrag: false,\n };\n Object.assign(this.options, this.defaultOptions);\n\n this._determineBrowserMethod();\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n this.body.emitter.on(\"dragStart\", () => {\n this.dragging = true;\n });\n this.body.emitter.on(\"dragEnd\", () => {\n this.dragging = false;\n });\n this.body.emitter.on(\"zoom\", () => {\n this.zooming = true;\n window.clearTimeout(this.zoomTimeoutId);\n this.zoomTimeoutId = window.setTimeout(() => {\n this.zooming = false;\n this._requestRedraw.bind(this)();\n }, 250);\n });\n this.body.emitter.on(\"_resizeNodes\", () => {\n this._resizeNodes();\n });\n this.body.emitter.on(\"_redraw\", () => {\n if (this.renderingActive === false) {\n this._redraw();\n }\n });\n this.body.emitter.on(\"_blockRedraw\", () => {\n this.allowRedraw = false;\n });\n this.body.emitter.on(\"_allowRedraw\", () => {\n this.allowRedraw = true;\n this.redrawRequested = false;\n });\n this.body.emitter.on(\"_requestRedraw\", this._requestRedraw.bind(this));\n this.body.emitter.on(\"_startRendering\", () => {\n this.renderRequests += 1;\n this.renderingActive = true;\n this._startRendering();\n });\n this.body.emitter.on(\"_stopRendering\", () => {\n this.renderRequests -= 1;\n this.renderingActive = this.renderRequests > 0;\n this.renderTimer = undefined;\n });\n this.body.emitter.on(\"destroy\", () => {\n this.renderRequests = 0;\n this.allowRedraw = false;\n this.renderingActive = false;\n if (this.requiresTimeout === true) {\n clearTimeout(this.renderTimer);\n } else {\n window.cancelAnimationFrame(this.renderTimer);\n }\n this.body.emitter.off();\n });\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n const fields = [\"hideEdgesOnDrag\", \"hideEdgesOnZoom\", \"hideNodesOnDrag\"];\n selectiveDeepExtend(fields, this.options, options);\n }\n }\n\n /**\n * Prepare the drawing of the next frame.\n *\n * Calls the callback when the next frame can or will be drawn.\n *\n * @param {Function} callback\n * @param {number} delay - timeout case only, wait this number of milliseconds\n * @returns {Function | undefined}\n * @private\n */\n _requestNextFrame(callback, delay) {\n // During unit testing, it happens that the mock window object is reset while\n // the next frame is still pending. Then, either 'window' is not present, or\n // 'requestAnimationFrame()' is not present because it is not defined on the\n // mock window object.\n //\n // As a consequence, unrelated unit tests may appear to fail, even if the problem\n // described happens in the current unit test.\n //\n // This is not something that will happen in normal operation, but we still need\n // to take it into account.\n //\n if (typeof window === \"undefined\") return; // Doing `if (window === undefined)` does not work here!\n\n let timer;\n\n const myWindow = window; // Grab a reference to reduce the possibility that 'window' is reset\n // while running this method.\n\n if (this.requiresTimeout === true) {\n // wait given number of milliseconds and perform the animation step function\n timer = myWindow.setTimeout(callback, delay);\n } else {\n if (myWindow.requestAnimationFrame) {\n timer = myWindow.requestAnimationFrame(callback);\n }\n }\n\n return timer;\n }\n\n /**\n *\n * @private\n */\n _startRendering() {\n if (this.renderingActive === true) {\n if (this.renderTimer === undefined) {\n this.renderTimer = this._requestNextFrame(\n this._renderStep.bind(this),\n this.simulationInterval\n );\n }\n }\n }\n\n /**\n *\n * @private\n */\n _renderStep() {\n if (this.renderingActive === true) {\n // reset the renderTimer so a new scheduled animation step can be set\n this.renderTimer = undefined;\n\n if (this.requiresTimeout === true) {\n // this schedules a new simulation step\n this._startRendering();\n }\n\n this._redraw();\n\n if (this.requiresTimeout === false) {\n // this schedules a new simulation step\n this._startRendering();\n }\n }\n }\n\n /**\n * Redraw the network with the current data\n * chart will be resized too.\n */\n redraw() {\n this.body.emitter.emit(\"setSize\");\n this._redraw();\n }\n\n /**\n * Redraw the network with the current data\n *\n * @private\n */\n _requestRedraw() {\n if (\n this.redrawRequested !== true &&\n this.renderingActive === false &&\n this.allowRedraw === true\n ) {\n this.redrawRequested = true;\n this._requestNextFrame(() => {\n this._redraw(false);\n }, 0);\n }\n }\n\n /**\n * Redraw the network with the current data\n *\n * @param {boolean} [hidden=false] | Used to get the first estimate of the node sizes.\n * Only the nodes are drawn after which they are quickly drawn over.\n * @private\n */\n _redraw(hidden = false) {\n if (this.allowRedraw === true) {\n this.body.emitter.emit(\"initRedraw\");\n\n this.redrawRequested = false;\n\n const drawLater = {\n drawExternalLabels: null,\n };\n\n // when the container div was hidden, this fixes it back up!\n if (\n this.canvas.frame.canvas.width === 0 ||\n this.canvas.frame.canvas.height === 0\n ) {\n this.canvas.setSize();\n }\n\n this.canvas.setTransform();\n\n const ctx = this.canvas.getContext();\n\n // clear the canvas\n const w = this.canvas.frame.canvas.clientWidth;\n const h = this.canvas.frame.canvas.clientHeight;\n ctx.clearRect(0, 0, w, h);\n\n // if the div is hidden, we stop the redraw here for performance.\n if (this.canvas.frame.clientWidth === 0) {\n return;\n }\n\n // set scaling and translation\n ctx.save();\n ctx.translate(this.body.view.translation.x, this.body.view.translation.y);\n ctx.scale(this.body.view.scale, this.body.view.scale);\n\n ctx.beginPath();\n this.body.emitter.emit(\"beforeDrawing\", ctx);\n ctx.closePath();\n\n if (hidden === false) {\n if (\n (this.dragging === false ||\n (this.dragging === true &&\n this.options.hideEdgesOnDrag === false)) &&\n (this.zooming === false ||\n (this.zooming === true && this.options.hideEdgesOnZoom === false))\n ) {\n this._drawEdges(ctx);\n }\n }\n\n if (\n this.dragging === false ||\n (this.dragging === true && this.options.hideNodesOnDrag === false)\n ) {\n const { drawExternalLabels } = this._drawNodes(ctx, hidden);\n drawLater.drawExternalLabels = drawExternalLabels;\n }\n\n // draw the arrows last so they will be at the top\n if (hidden === false) {\n if (\n (this.dragging === false ||\n (this.dragging === true &&\n this.options.hideEdgesOnDrag === false)) &&\n (this.zooming === false ||\n (this.zooming === true && this.options.hideEdgesOnZoom === false))\n ) {\n this._drawArrows(ctx);\n }\n }\n\n if (drawLater.drawExternalLabels != null) {\n drawLater.drawExternalLabels();\n }\n\n if (hidden === false) {\n this._drawSelectionBox(ctx);\n }\n\n ctx.beginPath();\n this.body.emitter.emit(\"afterDrawing\", ctx);\n ctx.closePath();\n\n // restore original scaling and translation\n ctx.restore();\n if (hidden === true) {\n ctx.clearRect(0, 0, w, h);\n }\n }\n }\n\n /**\n * Redraw all nodes\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [alwaysShow]\n * @private\n */\n _resizeNodes() {\n this.canvas.setTransform();\n const ctx = this.canvas.getContext();\n ctx.save();\n ctx.translate(this.body.view.translation.x, this.body.view.translation.y);\n ctx.scale(this.body.view.scale, this.body.view.scale);\n\n const nodes = this.body.nodes;\n let node;\n\n // resize all nodes\n for (const nodeId in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, nodeId)) {\n node = nodes[nodeId];\n node.resize(ctx);\n node.updateBoundingBox(ctx, node.selected);\n }\n }\n\n // restore original scaling and translation\n ctx.restore();\n }\n\n /**\n * Redraw all nodes\n *\n * @param {CanvasRenderingContext2D} ctx 2D context of a HTML canvas\n * @param {boolean} [alwaysShow]\n * @private\n * @returns {object} Callbacks to draw later on higher layers.\n */\n _drawNodes(ctx, alwaysShow = false) {\n const nodes = this.body.nodes;\n const nodeIndices = this.body.nodeIndices;\n let node;\n const selected = [];\n const hovered = [];\n const margin = 20;\n const topLeft = this.canvas.DOMtoCanvas({ x: -margin, y: -margin });\n const bottomRight = this.canvas.DOMtoCanvas({\n x: this.canvas.frame.canvas.clientWidth + margin,\n y: this.canvas.frame.canvas.clientHeight + margin,\n });\n const viewableArea = {\n top: topLeft.y,\n left: topLeft.x,\n bottom: bottomRight.y,\n right: bottomRight.x,\n };\n\n const drawExternalLabels = [];\n\n // draw unselected nodes;\n for (let i = 0; i < nodeIndices.length; i++) {\n node = nodes[nodeIndices[i]];\n // set selected and hovered nodes aside\n if (node.hover) {\n hovered.push(nodeIndices[i]);\n } else if (node.isSelected()) {\n selected.push(nodeIndices[i]);\n } else {\n if (alwaysShow === true) {\n const drawLater = node.draw(ctx);\n if (drawLater.drawExternalLabel != null) {\n drawExternalLabels.push(drawLater.drawExternalLabel);\n }\n } else if (node.isBoundingBoxOverlappingWith(viewableArea) === true) {\n const drawLater = node.draw(ctx);\n if (drawLater.drawExternalLabel != null) {\n drawExternalLabels.push(drawLater.drawExternalLabel);\n }\n } else {\n node.updateBoundingBox(ctx, node.selected);\n }\n }\n }\n\n let i;\n const selectedLength = selected.length;\n const hoveredLength = hovered.length;\n\n // draw the selected nodes on top\n for (i = 0; i < selectedLength; i++) {\n node = nodes[selected[i]];\n const drawLater = node.draw(ctx);\n if (drawLater.drawExternalLabel != null) {\n drawExternalLabels.push(drawLater.drawExternalLabel);\n }\n }\n\n // draw hovered nodes above everything else: fixes https://github.com/visjs/vis-network/issues/226\n for (i = 0; i < hoveredLength; i++) {\n node = nodes[hovered[i]];\n const drawLater = node.draw(ctx);\n if (drawLater.drawExternalLabel != null) {\n drawExternalLabels.push(drawLater.drawExternalLabel);\n }\n }\n\n return {\n drawExternalLabels: () => {\n for (const draw of drawExternalLabels) {\n draw();\n }\n },\n };\n }\n\n /**\n * Redraw all edges\n *\n * @param {CanvasRenderingContext2D} ctx 2D context of a HTML canvas\n * @private\n */\n _drawEdges(ctx) {\n const edges = this.body.edges;\n const edgeIndices = this.body.edgeIndices;\n\n for (let i = 0; i < edgeIndices.length; i++) {\n const edge = edges[edgeIndices[i]];\n if (edge.connected === true) {\n edge.draw(ctx);\n }\n }\n }\n\n /**\n * Redraw all arrows\n *\n * @param {CanvasRenderingContext2D} ctx 2D context of a HTML canvas\n * @private\n */\n _drawArrows(ctx) {\n const edges = this.body.edges;\n const edgeIndices = this.body.edgeIndices;\n\n for (let i = 0; i < edgeIndices.length; i++) {\n const edge = edges[edgeIndices[i]];\n if (edge.connected === true) {\n edge.drawArrows(ctx);\n }\n }\n }\n\n /**\n * Determine if the browser requires a setTimeout or a requestAnimationFrame. This was required because\n * some implementations (safari and IE9) did not support requestAnimationFrame\n *\n * @private\n */\n _determineBrowserMethod() {\n if (typeof window !== \"undefined\") {\n const browserType = navigator.userAgent.toLowerCase();\n this.requiresTimeout = false;\n if (browserType.indexOf(\"msie 9.0\") != -1) {\n // IE 9\n this.requiresTimeout = true;\n } else if (browserType.indexOf(\"safari\") != -1) {\n // safari\n if (browserType.indexOf(\"chrome\") <= -1) {\n this.requiresTimeout = true;\n }\n }\n } else {\n this.requiresTimeout = true;\n }\n }\n\n /**\n * Redraw selection box\n *\n * @param {CanvasRenderingContext2D} ctx 2D context of a HTML canvas\n * @private\n */\n _drawSelectionBox(ctx) {\n if (this.body.selectionBox.show) {\n ctx.beginPath();\n const width =\n this.body.selectionBox.position.end.x -\n this.body.selectionBox.position.start.x;\n const height =\n this.body.selectionBox.position.end.y -\n this.body.selectionBox.position.start.y;\n ctx.rect(\n this.body.selectionBox.position.start.x,\n this.body.selectionBox.position.start.y,\n width,\n height\n );\n ctx.fillStyle = \"rgba(151, 194, 252, 0.2)\";\n ctx.fillRect(\n this.body.selectionBox.position.start.x,\n this.body.selectionBox.position.start.y,\n width,\n height\n );\n ctx.strokeStyle = \"rgba(151, 194, 252, 1)\";\n ctx.stroke();\n } else {\n ctx.closePath();\n }\n }\n}\n\nexport default CanvasRenderer;\n","'use strict';\nrequire('../modules/web.timers');\nvar path = require('../internals/path');\n\nmodule.exports = path.setInterval;\n","/**\n * Register a touch event, taking place before a gesture\n *\n * @param {Hammer} hammer A hammer instance\n * @param {Function} callback Callback, called as callback(event)\n */\nexport function onTouch(hammer, callback) {\n callback.inputHandler = function (event) {\n if (event.isFirst) {\n callback(event);\n }\n };\n\n hammer.on(\"hammer.input\", callback.inputHandler);\n}\n\n/**\n * Register a release event, taking place after a gesture\n *\n * @param {Hammer} hammer A hammer instance\n * @param {Function} callback Callback, called as callback(event)\n * @returns {*}\n */\nexport function onRelease(hammer, callback) {\n callback.inputHandler = function (event) {\n if (event.isFinal) {\n callback(event);\n }\n };\n\n return hammer.on(\"hammer.input\", callback.inputHandler);\n}\n\n/**\n * Unregister a touch event, taking place before a gesture\n *\n * @param {Hammer} hammer A hammer instance\n * @param {Function} callback Callback, called as callback(event)\n */\nexport function offTouch(hammer, callback) {\n hammer.off(\"hammer.input\", callback.inputHandler);\n}\n\n/**\n * Unregister a release event, taking place before a gesture\n *\n * @param {Hammer} hammer A hammer instance\n * @param {Function} callback Callback, called as callback(event)\n */\nexport const offRelease = offTouch;\n\n/**\n * Hack the PinchRecognizer such that it doesn't prevent default behavior\n * for vertical panning.\n *\n * Yeah ... this is quite a hack ... see https://github.com/hammerjs/hammer.js/issues/932\n *\n * @param {Hammer.Pinch} pinchRecognizer\n * @returns {Hammer.Pinch} returns the pinchRecognizer\n */\nexport function disablePreventDefaultVertically(pinchRecognizer) {\n const TOUCH_ACTION_PAN_Y = \"pan-y\";\n\n pinchRecognizer.getTouchAction = function () {\n // default method returns [TOUCH_ACTION_NONE]\n return [TOUCH_ACTION_PAN_Y];\n };\n\n return pinchRecognizer;\n}\n","import { onRelease, onTouch } from \"../../hammerUtil\";\n\nimport { Hammer, selectiveDeepExtend } from \"vis-util/esnext\";\n\n/**\n * Create the main frame for the Network.\n * This function is executed once when a Network object is created. The frame\n * contains a canvas, and this canvas contains all objects like the axis and\n * nodes.\n */\nclass Canvas {\n /**\n * @param {object} body\n */\n constructor(body) {\n this.body = body;\n this.pixelRatio = 1;\n this.cameraState = {};\n this.initialized = false;\n this.canvasViewCenter = {};\n this._cleanupCallbacks = [];\n\n this.options = {};\n this.defaultOptions = {\n autoResize: true,\n height: \"100%\",\n width: \"100%\",\n };\n Object.assign(this.options, this.defaultOptions);\n\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n // bind the events\n this.body.emitter.once(\"resize\", (obj) => {\n if (obj.width !== 0) {\n this.body.view.translation.x = obj.width * 0.5;\n }\n if (obj.height !== 0) {\n this.body.view.translation.y = obj.height * 0.5;\n }\n });\n this.body.emitter.on(\"setSize\", this.setSize.bind(this));\n this.body.emitter.on(\"destroy\", () => {\n this.hammerFrame.destroy();\n this.hammer.destroy();\n this._cleanUp();\n });\n }\n\n /**\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n const fields = [\"width\", \"height\", \"autoResize\"];\n selectiveDeepExtend(fields, this.options, options);\n }\n\n // Automatically adapt to changing size of the container element.\n this._cleanUp();\n if (this.options.autoResize === true) {\n if (window.ResizeObserver) {\n // decent browsers, immediate reactions\n const observer = new ResizeObserver(() => {\n const changed = this.setSize();\n if (changed === true) {\n this.body.emitter.emit(\"_requestRedraw\");\n }\n });\n const { frame } = this;\n\n observer.observe(frame);\n this._cleanupCallbacks.push(() => {\n observer.unobserve(frame);\n });\n } else {\n // IE11, continous polling\n const resizeTimer = setInterval(() => {\n const changed = this.setSize();\n if (changed === true) {\n this.body.emitter.emit(\"_requestRedraw\");\n }\n }, 1000);\n this._cleanupCallbacks.push(() => {\n clearInterval(resizeTimer);\n });\n }\n\n // Automatically adapt to changing size of the browser.\n const resizeFunction = this._onResize.bind(this);\n window.addEventListener(\"resize\", resizeFunction);\n this._cleanupCallbacks.push(() => {\n window.removeEventListener(\"resize\", resizeFunction);\n });\n }\n }\n\n /**\n * @private\n */\n _cleanUp() {\n this._cleanupCallbacks\n .splice(0)\n .reverse()\n .forEach((callback) => {\n try {\n callback();\n } catch (error) {\n console.error(error);\n }\n });\n }\n\n /**\n * @private\n */\n _onResize() {\n this.setSize();\n this.body.emitter.emit(\"_redraw\");\n }\n\n /**\n * Get and store the cameraState\n *\n * @param {number} [pixelRatio=this.pixelRatio]\n * @private\n */\n _getCameraState(pixelRatio = this.pixelRatio) {\n if (this.initialized === true) {\n this.cameraState.previousWidth = this.frame.canvas.width / pixelRatio;\n this.cameraState.previousHeight = this.frame.canvas.height / pixelRatio;\n this.cameraState.scale = this.body.view.scale;\n this.cameraState.position = this.DOMtoCanvas({\n x: (0.5 * this.frame.canvas.width) / pixelRatio,\n y: (0.5 * this.frame.canvas.height) / pixelRatio,\n });\n }\n }\n\n /**\n * Set the cameraState\n *\n * @private\n */\n _setCameraState() {\n if (\n this.cameraState.scale !== undefined &&\n this.frame.canvas.clientWidth !== 0 &&\n this.frame.canvas.clientHeight !== 0 &&\n this.pixelRatio !== 0 &&\n this.cameraState.previousWidth > 0 &&\n this.cameraState.previousHeight > 0\n ) {\n const widthRatio =\n this.frame.canvas.width /\n this.pixelRatio /\n this.cameraState.previousWidth;\n const heightRatio =\n this.frame.canvas.height /\n this.pixelRatio /\n this.cameraState.previousHeight;\n let newScale = this.cameraState.scale;\n\n if (widthRatio != 1 && heightRatio != 1) {\n newScale = this.cameraState.scale * 0.5 * (widthRatio + heightRatio);\n } else if (widthRatio != 1) {\n newScale = this.cameraState.scale * widthRatio;\n } else if (heightRatio != 1) {\n newScale = this.cameraState.scale * heightRatio;\n }\n\n this.body.view.scale = newScale;\n // this comes from the view module.\n const currentViewCenter = this.DOMtoCanvas({\n x: 0.5 * this.frame.canvas.clientWidth,\n y: 0.5 * this.frame.canvas.clientHeight,\n });\n\n const distanceFromCenter = {\n // offset from view, distance view has to change by these x and y to center the node\n x: currentViewCenter.x - this.cameraState.position.x,\n y: currentViewCenter.y - this.cameraState.position.y,\n };\n this.body.view.translation.x +=\n distanceFromCenter.x * this.body.view.scale;\n this.body.view.translation.y +=\n distanceFromCenter.y * this.body.view.scale;\n }\n }\n\n /**\n *\n * @param {number|string} value\n * @returns {string}\n * @private\n */\n _prepareValue(value) {\n if (typeof value === \"number\") {\n return value + \"px\";\n } else if (typeof value === \"string\") {\n if (value.indexOf(\"%\") !== -1 || value.indexOf(\"px\") !== -1) {\n return value;\n } else if (value.indexOf(\"%\") === -1) {\n return value + \"px\";\n }\n }\n throw new Error(\n \"Could not use the value supplied for width or height:\" + value\n );\n }\n\n /**\n * Create the HTML\n */\n _create() {\n // remove all elements from the container element.\n while (this.body.container.hasChildNodes()) {\n this.body.container.removeChild(this.body.container.firstChild);\n }\n\n this.frame = document.createElement(\"div\");\n this.frame.className = \"vis-network\";\n this.frame.style.position = \"relative\";\n this.frame.style.overflow = \"hidden\";\n this.frame.tabIndex = 0; // tab index is required for keycharm to bind keystrokes to the div instead of the window\n\n //////////////////////////////////////////////////////////////////\n\n this.frame.canvas = document.createElement(\"canvas\");\n this.frame.canvas.style.position = \"relative\";\n this.frame.appendChild(this.frame.canvas);\n\n if (!this.frame.canvas.getContext) {\n const noCanvas = document.createElement(\"DIV\");\n noCanvas.style.color = \"red\";\n noCanvas.style.fontWeight = \"bold\";\n noCanvas.style.padding = \"10px\";\n noCanvas.innerText = \"Error: your browser does not support HTML canvas\";\n this.frame.canvas.appendChild(noCanvas);\n } else {\n this._setPixelRatio();\n this.setTransform();\n }\n\n // add the frame to the container element\n this.body.container.appendChild(this.frame);\n\n this.body.view.scale = 1;\n this.body.view.translation = {\n x: 0.5 * this.frame.canvas.clientWidth,\n y: 0.5 * this.frame.canvas.clientHeight,\n };\n\n this._bindHammer();\n }\n\n /**\n * This function binds hammer, it can be repeated over and over due to the uniqueness check.\n *\n * @private\n */\n _bindHammer() {\n if (this.hammer !== undefined) {\n this.hammer.destroy();\n }\n this.drag = {};\n this.pinch = {};\n\n // init hammer\n this.hammer = new Hammer(this.frame.canvas);\n this.hammer.get(\"pinch\").set({ enable: true });\n // enable to get better response, todo: test on mobile.\n this.hammer\n .get(\"pan\")\n .set({ threshold: 5, direction: Hammer.DIRECTION_ALL });\n\n onTouch(this.hammer, (event) => {\n this.body.eventListeners.onTouch(event);\n });\n this.hammer.on(\"tap\", (event) => {\n this.body.eventListeners.onTap(event);\n });\n this.hammer.on(\"doubletap\", (event) => {\n this.body.eventListeners.onDoubleTap(event);\n });\n this.hammer.on(\"press\", (event) => {\n this.body.eventListeners.onHold(event);\n });\n this.hammer.on(\"panstart\", (event) => {\n this.body.eventListeners.onDragStart(event);\n });\n this.hammer.on(\"panmove\", (event) => {\n this.body.eventListeners.onDrag(event);\n });\n this.hammer.on(\"panend\", (event) => {\n this.body.eventListeners.onDragEnd(event);\n });\n this.hammer.on(\"pinch\", (event) => {\n this.body.eventListeners.onPinch(event);\n });\n\n // TODO: neatly cleanup these handlers when re-creating the Canvas, IF these are done with hammer, event.stopPropagation will not work?\n this.frame.canvas.addEventListener(\"wheel\", (event) => {\n this.body.eventListeners.onMouseWheel(event);\n });\n\n this.frame.canvas.addEventListener(\"mousemove\", (event) => {\n this.body.eventListeners.onMouseMove(event);\n });\n this.frame.canvas.addEventListener(\"contextmenu\", (event) => {\n this.body.eventListeners.onContext(event);\n });\n\n this.hammerFrame = new Hammer(this.frame);\n onRelease(this.hammerFrame, (event) => {\n this.body.eventListeners.onRelease(event);\n });\n }\n\n /**\n * Set a new size for the network\n *\n * @param {string} width Width in pixels or percentage (for example '800px'\n * or '50%')\n * @param {string} height Height in pixels or percentage (for example '400px'\n * or '30%')\n * @returns {boolean}\n */\n setSize(width = this.options.width, height = this.options.height) {\n width = this._prepareValue(width);\n height = this._prepareValue(height);\n\n let emitEvent = false;\n const oldWidth = this.frame.canvas.width;\n const oldHeight = this.frame.canvas.height;\n\n // update the pixel ratio\n //\n // NOTE: Comment in following is rather inconsistent; this is the ONLY place in the code\n // where it is assumed that the pixel ratio could change at runtime.\n // The only way I can think of this happening is a rotating screen or tablet; but then\n // there should be a mechanism for reloading the data (TODO: check if this is present).\n //\n // If the assumption is true (i.e. pixel ratio can change at runtime), then *all* usage\n // of pixel ratio must be overhauled for this.\n //\n // For the time being, I will humor the assumption here, and in the rest of the code assume it is\n // constant.\n const previousRatio = this.pixelRatio; // we cache this because the camera state storage needs the old value\n this._setPixelRatio();\n\n if (\n width != this.options.width ||\n height != this.options.height ||\n this.frame.style.width != width ||\n this.frame.style.height != height\n ) {\n this._getCameraState(previousRatio);\n\n this.frame.style.width = width;\n this.frame.style.height = height;\n\n this.frame.canvas.style.width = \"100%\";\n this.frame.canvas.style.height = \"100%\";\n\n this.frame.canvas.width = Math.round(\n this.frame.canvas.clientWidth * this.pixelRatio\n );\n this.frame.canvas.height = Math.round(\n this.frame.canvas.clientHeight * this.pixelRatio\n );\n\n this.options.width = width;\n this.options.height = height;\n\n this.canvasViewCenter = {\n x: 0.5 * this.frame.clientWidth,\n y: 0.5 * this.frame.clientHeight,\n };\n\n emitEvent = true;\n } else {\n // this would adapt the width of the canvas to the width from 100% if and only if\n // there is a change.\n\n const newWidth = Math.round(\n this.frame.canvas.clientWidth * this.pixelRatio\n );\n const newHeight = Math.round(\n this.frame.canvas.clientHeight * this.pixelRatio\n );\n\n // store the camera if there is a change in size.\n if (\n this.frame.canvas.width !== newWidth ||\n this.frame.canvas.height !== newHeight\n ) {\n this._getCameraState(previousRatio);\n }\n\n if (this.frame.canvas.width !== newWidth) {\n this.frame.canvas.width = newWidth;\n emitEvent = true;\n }\n if (this.frame.canvas.height !== newHeight) {\n this.frame.canvas.height = newHeight;\n emitEvent = true;\n }\n }\n\n if (emitEvent === true) {\n this.body.emitter.emit(\"resize\", {\n width: Math.round(this.frame.canvas.width / this.pixelRatio),\n height: Math.round(this.frame.canvas.height / this.pixelRatio),\n oldWidth: Math.round(oldWidth / this.pixelRatio),\n oldHeight: Math.round(oldHeight / this.pixelRatio),\n });\n\n // restore the camera on change.\n this._setCameraState();\n }\n\n // set initialized so the get and set camera will work from now on.\n this.initialized = true;\n return emitEvent;\n }\n\n /**\n *\n * @returns {CanvasRenderingContext2D}\n */\n getContext() {\n return this.frame.canvas.getContext(\"2d\");\n }\n\n /**\n * Determine the pixel ratio for various browsers.\n *\n * @returns {number}\n * @private\n */\n _determinePixelRatio() {\n const ctx = this.getContext();\n if (ctx === undefined) {\n throw new Error(\"Could not get canvax context\");\n }\n\n let numerator = 1;\n if (typeof window !== \"undefined\") {\n // (window !== undefined) doesn't work here!\n // Protection during unit tests, where 'window' can be missing\n numerator = window.devicePixelRatio || 1;\n }\n\n const denominator =\n ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio ||\n 1;\n\n return numerator / denominator;\n }\n\n /**\n * Lazy determination of pixel ratio.\n *\n * @private\n */\n _setPixelRatio() {\n this.pixelRatio = this._determinePixelRatio();\n }\n\n /**\n * Set the transform in the contained context, based on its pixelRatio\n */\n setTransform() {\n const ctx = this.getContext();\n if (ctx === undefined) {\n throw new Error(\"Could not get canvax context\");\n }\n\n ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n }\n\n /**\n * Convert the X coordinate in DOM-space (coordinate point in browser relative to the container div) to\n * the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon)\n *\n * @param {number} x\n * @returns {number}\n * @private\n */\n _XconvertDOMtoCanvas(x) {\n return (x - this.body.view.translation.x) / this.body.view.scale;\n }\n\n /**\n * Convert the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to\n * the X coordinate in DOM-space (coordinate point in browser relative to the container div)\n *\n * @param {number} x\n * @returns {number}\n * @private\n */\n _XconvertCanvasToDOM(x) {\n return x * this.body.view.scale + this.body.view.translation.x;\n }\n\n /**\n * Convert the Y coordinate in DOM-space (coordinate point in browser relative to the container div) to\n * the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon)\n *\n * @param {number} y\n * @returns {number}\n * @private\n */\n _YconvertDOMtoCanvas(y) {\n return (y - this.body.view.translation.y) / this.body.view.scale;\n }\n\n /**\n * Convert the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to\n * the Y coordinate in DOM-space (coordinate point in browser relative to the container div)\n *\n * @param {number} y\n * @returns {number}\n * @private\n */\n _YconvertCanvasToDOM(y) {\n return y * this.body.view.scale + this.body.view.translation.y;\n }\n\n /**\n * @param {point} pos\n * @returns {point}\n */\n canvasToDOM(pos) {\n return {\n x: this._XconvertCanvasToDOM(pos.x),\n y: this._YconvertCanvasToDOM(pos.y),\n };\n }\n\n /**\n *\n * @param {point} pos\n * @returns {point}\n */\n DOMtoCanvas(pos) {\n return {\n x: this._XconvertDOMtoCanvas(pos.x),\n y: this._YconvertDOMtoCanvas(pos.y),\n };\n }\n}\n\nexport default Canvas;\n","import { easingFunctions } from \"vis-util/esnext\";\n\nimport NetworkUtil from \"../NetworkUtil\";\nimport { normalizeFitOptions } from \"./view-handler\";\n\n/**\n * The view\n */\nclass View {\n /**\n * @param {object} body\n * @param {Canvas} canvas\n */\n constructor(body, canvas) {\n this.body = body;\n this.canvas = canvas;\n\n this.animationSpeed = 1 / this.renderRefreshRate;\n this.animationEasingFunction = \"easeInOutQuint\";\n this.easingTime = 0;\n this.sourceScale = 0;\n this.targetScale = 0;\n this.sourceTranslation = 0;\n this.targetTranslation = 0;\n this.lockedOnNodeId = undefined;\n this.lockedOnNodeOffset = undefined;\n this.touchTime = 0;\n\n this.viewFunction = undefined;\n\n this.body.emitter.on(\"fit\", this.fit.bind(this));\n this.body.emitter.on(\"animationFinished\", () => {\n this.body.emitter.emit(\"_stopRendering\");\n });\n this.body.emitter.on(\"unlockNode\", this.releaseNode.bind(this));\n }\n\n /**\n *\n * @param {object} [options={}]\n */\n setOptions(options = {}) {\n this.options = options;\n }\n\n /**\n * This function zooms out to fit all data on screen based on amount of nodes\n *\n * @param {object} [options={{nodes=Array}}]\n * @param options\n * @param {boolean} [initialZoom=false] | zoom based on fitted formula or range, true = fitted, default = false;\n */\n fit(options, initialZoom = false) {\n options = normalizeFitOptions(options, this.body.nodeIndices);\n\n const canvasWidth = this.canvas.frame.canvas.clientWidth;\n const canvasHeight = this.canvas.frame.canvas.clientHeight;\n\n let range;\n let zoomLevel;\n if (canvasWidth === 0 || canvasHeight === 0) {\n // There's no point in trying to fit into zero sized canvas. This could\n // potentially even result in invalid values being computed. For example\n // for network without nodes and zero sized canvas the zoom level would\n // end up being computed as 0/0 which results in NaN. In any other case\n // this would be 0/something which is again pointless to compute.\n zoomLevel = 1;\n\n range = NetworkUtil.getRange(this.body.nodes, options.nodes);\n } else if (initialZoom === true) {\n // check if more than half of the nodes have a predefined position. If so, we use the range, not the approximation.\n let positionDefined = 0;\n for (const nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId)) {\n const node = this.body.nodes[nodeId];\n if (node.predefinedPosition === true) {\n positionDefined += 1;\n }\n }\n }\n if (positionDefined > 0.5 * this.body.nodeIndices.length) {\n this.fit(options, false);\n return;\n }\n\n range = NetworkUtil.getRange(this.body.nodes, options.nodes);\n\n const numberOfNodes = this.body.nodeIndices.length;\n zoomLevel = 12.662 / (numberOfNodes + 7.4147) + 0.0964822; // this is obtained from fitting a dataset from 5 points with scale levels that looked good.\n\n // correct for larger canvasses.\n const factor = Math.min(canvasWidth / 600, canvasHeight / 600);\n zoomLevel *= factor;\n } else {\n this.body.emitter.emit(\"_resizeNodes\");\n range = NetworkUtil.getRange(this.body.nodes, options.nodes);\n\n const xDistance = Math.abs(range.maxX - range.minX) * 1.1;\n const yDistance = Math.abs(range.maxY - range.minY) * 1.1;\n\n const xZoomLevel = canvasWidth / xDistance;\n const yZoomLevel = canvasHeight / yDistance;\n\n zoomLevel = xZoomLevel <= yZoomLevel ? xZoomLevel : yZoomLevel;\n }\n\n if (zoomLevel > options.maxZoomLevel) {\n zoomLevel = options.maxZoomLevel;\n } else if (zoomLevel < options.minZoomLevel) {\n zoomLevel = options.minZoomLevel;\n }\n\n const center = NetworkUtil.findCenter(range);\n const animationOptions = {\n position: center,\n scale: zoomLevel,\n animation: options.animation,\n };\n this.moveTo(animationOptions);\n }\n\n // animation\n\n /**\n * Center a node in view.\n *\n * @param {number} nodeId\n * @param {number} [options]\n */\n focus(nodeId, options = {}) {\n if (this.body.nodes[nodeId] !== undefined) {\n const nodePosition = {\n x: this.body.nodes[nodeId].x,\n y: this.body.nodes[nodeId].y,\n };\n options.position = nodePosition;\n options.lockedOnNode = nodeId;\n\n this.moveTo(options);\n } else {\n console.error(\"Node: \" + nodeId + \" cannot be found.\");\n }\n }\n\n /**\n *\n * @param {object} options | options.offset = {x:number, y:number} // offset from the center in DOM pixels\n * | options.scale = number // scale to move to\n * | options.position = {x:number, y:number} // position to move to\n * | options.animation = {duration:number, easingFunction:String} || Boolean // position to move to\n */\n moveTo(options) {\n if (options === undefined) {\n options = {};\n return;\n }\n\n if (options.offset != null) {\n if (options.offset.x != null) {\n // Coerce and verify that x is valid.\n options.offset.x = +options.offset.x;\n if (!Number.isFinite(options.offset.x)) {\n throw new TypeError(\n 'The option \"offset.x\" has to be a finite number.'\n );\n }\n } else {\n options.offset.x = 0;\n }\n\n if (options.offset.y != null) {\n // Coerce and verify that y is valid.\n options.offset.y = +options.offset.y;\n if (!Number.isFinite(options.offset.y)) {\n throw new TypeError(\n 'The option \"offset.y\" has to be a finite number.'\n );\n }\n } else {\n options.offset.x = 0;\n }\n } else {\n options.offset = {\n x: 0,\n y: 0,\n };\n }\n\n if (options.position != null) {\n if (options.position.x != null) {\n // Coerce and verify that x is valid.\n options.position.x = +options.position.x;\n if (!Number.isFinite(options.position.x)) {\n throw new TypeError(\n 'The option \"position.x\" has to be a finite number.'\n );\n }\n } else {\n options.position.x = 0;\n }\n\n if (options.position.y != null) {\n // Coerce and verify that y is valid.\n options.position.y = +options.position.y;\n if (!Number.isFinite(options.position.y)) {\n throw new TypeError(\n 'The option \"position.y\" has to be a finite number.'\n );\n }\n } else {\n options.position.x = 0;\n }\n } else {\n options.position = this.getViewPosition();\n }\n\n if (options.scale != null) {\n // Coerce and verify that the scale is valid.\n options.scale = +options.scale;\n if (!(options.scale > 0)) {\n throw new TypeError(\n 'The option \"scale\" has to be a number greater than zero.'\n );\n }\n } else {\n options.scale = this.body.view.scale;\n }\n\n if (options.animation === undefined) {\n options.animation = { duration: 0 };\n }\n if (options.animation === false) {\n options.animation = { duration: 0 };\n }\n if (options.animation === true) {\n options.animation = {};\n }\n if (options.animation.duration === undefined) {\n options.animation.duration = 1000;\n } // default duration\n if (options.animation.easingFunction === undefined) {\n options.animation.easingFunction = \"easeInOutQuad\";\n } // default easing function\n\n this.animateView(options);\n }\n\n /**\n *\n * @param {object} options | options.offset = {x:number, y:number} // offset from the center in DOM pixels\n * | options.time = number // animation time in milliseconds\n * | options.scale = number // scale to animate to\n * | options.position = {x:number, y:number} // position to animate to\n * | options.easingFunction = String // linear, easeInQuad, easeOutQuad, easeInOutQuad,\n * // easeInCubic, easeOutCubic, easeInOutCubic,\n * // easeInQuart, easeOutQuart, easeInOutQuart,\n * // easeInQuint, easeOutQuint, easeInOutQuint\n */\n animateView(options) {\n if (options === undefined) {\n return;\n }\n this.animationEasingFunction = options.animation.easingFunction;\n // release if something focussed on the node\n this.releaseNode();\n if (options.locked === true) {\n this.lockedOnNodeId = options.lockedOnNode;\n this.lockedOnNodeOffset = options.offset;\n }\n\n // forcefully complete the old animation if it was still running\n if (this.easingTime != 0) {\n this._transitionRedraw(true); // by setting easingtime to 1, we finish the animation.\n }\n\n this.sourceScale = this.body.view.scale;\n this.sourceTranslation = this.body.view.translation;\n this.targetScale = options.scale;\n\n // set the scale so the viewCenter is based on the correct zoom level. This is overridden in the transitionRedraw\n // but at least then we'll have the target transition\n this.body.view.scale = this.targetScale;\n const viewCenter = this.canvas.DOMtoCanvas({\n x: 0.5 * this.canvas.frame.canvas.clientWidth,\n y: 0.5 * this.canvas.frame.canvas.clientHeight,\n });\n\n const distanceFromCenter = {\n // offset from view, distance view has to change by these x and y to center the node\n x: viewCenter.x - options.position.x,\n y: viewCenter.y - options.position.y,\n };\n this.targetTranslation = {\n x:\n this.sourceTranslation.x +\n distanceFromCenter.x * this.targetScale +\n options.offset.x,\n y:\n this.sourceTranslation.y +\n distanceFromCenter.y * this.targetScale +\n options.offset.y,\n };\n\n // if the time is set to 0, don't do an animation\n if (options.animation.duration === 0) {\n if (this.lockedOnNodeId != undefined) {\n this.viewFunction = this._lockedRedraw.bind(this);\n this.body.emitter.on(\"initRedraw\", this.viewFunction);\n } else {\n this.body.view.scale = this.targetScale;\n this.body.view.translation = this.targetTranslation;\n this.body.emitter.emit(\"_requestRedraw\");\n }\n } else {\n this.animationSpeed =\n 1 / (60 * options.animation.duration * 0.001) || 1 / 60; // 60 for 60 seconds, 0.001 for milli's\n this.animationEasingFunction = options.animation.easingFunction;\n\n this.viewFunction = this._transitionRedraw.bind(this);\n this.body.emitter.on(\"initRedraw\", this.viewFunction);\n this.body.emitter.emit(\"_startRendering\");\n }\n }\n\n /**\n * used to animate smoothly by hijacking the redraw function.\n *\n * @private\n */\n _lockedRedraw() {\n const nodePosition = {\n x: this.body.nodes[this.lockedOnNodeId].x,\n y: this.body.nodes[this.lockedOnNodeId].y,\n };\n const viewCenter = this.canvas.DOMtoCanvas({\n x: 0.5 * this.canvas.frame.canvas.clientWidth,\n y: 0.5 * this.canvas.frame.canvas.clientHeight,\n });\n const distanceFromCenter = {\n // offset from view, distance view has to change by these x and y to center the node\n x: viewCenter.x - nodePosition.x,\n y: viewCenter.y - nodePosition.y,\n };\n const sourceTranslation = this.body.view.translation;\n const targetTranslation = {\n x:\n sourceTranslation.x +\n distanceFromCenter.x * this.body.view.scale +\n this.lockedOnNodeOffset.x,\n y:\n sourceTranslation.y +\n distanceFromCenter.y * this.body.view.scale +\n this.lockedOnNodeOffset.y,\n };\n\n this.body.view.translation = targetTranslation;\n }\n\n /**\n * Resets state of a locked on Node\n */\n releaseNode() {\n if (this.lockedOnNodeId !== undefined && this.viewFunction !== undefined) {\n this.body.emitter.off(\"initRedraw\", this.viewFunction);\n this.lockedOnNodeId = undefined;\n this.lockedOnNodeOffset = undefined;\n }\n }\n\n /**\n * @param {boolean} [finished=false]\n * @private\n */\n _transitionRedraw(finished = false) {\n this.easingTime += this.animationSpeed;\n this.easingTime = finished === true ? 1.0 : this.easingTime;\n\n const progress = easingFunctions[this.animationEasingFunction](\n this.easingTime\n );\n\n this.body.view.scale =\n this.sourceScale + (this.targetScale - this.sourceScale) * progress;\n this.body.view.translation = {\n x:\n this.sourceTranslation.x +\n (this.targetTranslation.x - this.sourceTranslation.x) * progress,\n y:\n this.sourceTranslation.y +\n (this.targetTranslation.y - this.sourceTranslation.y) * progress,\n };\n\n // cleanup\n if (this.easingTime >= 1.0) {\n this.body.emitter.off(\"initRedraw\", this.viewFunction);\n this.easingTime = 0;\n if (this.lockedOnNodeId != undefined) {\n this.viewFunction = this._lockedRedraw.bind(this);\n this.body.emitter.on(\"initRedraw\", this.viewFunction);\n }\n this.body.emitter.emit(\"animationFinished\");\n }\n }\n\n /**\n *\n * @returns {number}\n */\n getScale() {\n return this.body.view.scale;\n }\n\n /**\n *\n * @returns {{x: number, y: number}}\n */\n getViewPosition() {\n return this.canvas.DOMtoCanvas({\n x: 0.5 * this.canvas.frame.canvas.clientWidth,\n y: 0.5 * this.canvas.frame.canvas.clientHeight,\n });\n }\n}\n\nexport default View;\n","type IdType = string | number;\n\nexport interface ViewFitOptions {\n nodes: IdType[];\n minZoomLevel: number;\n maxZoomLevel: number;\n}\n\n/**\n * Validate the fit options, replace missing optional values by defaults etc.\n *\n * @param rawOptions - The raw options.\n * @param allNodeIds - All node ids that will be used if nodes are omitted in\n * the raw options.\n * @returns Options with everything filled in and validated.\n */\nexport function normalizeFitOptions(\n rawOptions: Partial,\n allNodeIds: IdType[]\n): ViewFitOptions {\n const options = Object.assign>(\n {\n nodes: allNodeIds,\n minZoomLevel: Number.MIN_VALUE,\n maxZoomLevel: 1,\n },\n rawOptions ?? {}\n );\n\n if (!Array.isArray(options.nodes)) {\n throw new TypeError(\"Nodes has to be an array of ids.\");\n }\n if (options.nodes.length === 0) {\n options.nodes = allNodeIds;\n }\n\n if (!(typeof options.minZoomLevel === \"number\" && options.minZoomLevel > 0)) {\n throw new TypeError(\"Min zoom level has to be a number higher than zero.\");\n }\n\n if (\n !(\n typeof options.maxZoomLevel === \"number\" &&\n options.minZoomLevel <= options.maxZoomLevel\n )\n ) {\n throw new TypeError(\n \"Max zoom level has to be a number higher than min zoom level.\"\n );\n }\n\n return options;\n}\n","/**\r\n * Created by Alex on 11/6/2014.\r\n */\r\nexport default function keycharm(options) {\r\n var preventDefault = options && options.preventDefault || false;\r\n\r\n var container = options && options.container || window;\r\n\r\n var _exportFunctions = {};\r\n var _bound = {keydown:{}, keyup:{}};\r\n var _keys = {};\r\n var i;\r\n\r\n // a - z\r\n for (i = 97; i <= 122; i++) {_keys[String.fromCharCode(i)] = {code:65 + (i - 97), shift: false};}\r\n // A - Z\r\n for (i = 65; i <= 90; i++) {_keys[String.fromCharCode(i)] = {code:i, shift: true};}\r\n // 0 - 9\r\n for (i = 0; i <= 9; i++) {_keys['' + i] = {code:48 + i, shift: false};}\r\n // F1 - F12\r\n for (i = 1; i <= 12; i++) {_keys['F' + i] = {code:111 + i, shift: false};}\r\n // num0 - num9\r\n for (i = 0; i <= 9; i++) {_keys['num' + i] = {code:96 + i, shift: false};}\r\n\r\n // numpad misc\r\n _keys['num*'] = {code:106, shift: false};\r\n _keys['num+'] = {code:107, shift: false};\r\n _keys['num-'] = {code:109, shift: false};\r\n _keys['num/'] = {code:111, shift: false};\r\n _keys['num.'] = {code:110, shift: false};\r\n // arrows\r\n _keys['left'] = {code:37, shift: false};\r\n _keys['up'] = {code:38, shift: false};\r\n _keys['right'] = {code:39, shift: false};\r\n _keys['down'] = {code:40, shift: false};\r\n // extra keys\r\n _keys['space'] = {code:32, shift: false};\r\n _keys['enter'] = {code:13, shift: false};\r\n _keys['shift'] = {code:16, shift: undefined};\r\n _keys['esc'] = {code:27, shift: false};\r\n _keys['backspace'] = {code:8, shift: false};\r\n _keys['tab'] = {code:9, shift: false};\r\n _keys['ctrl'] = {code:17, shift: false};\r\n _keys['alt'] = {code:18, shift: false};\r\n _keys['delete'] = {code:46, shift: false};\r\n _keys['pageup'] = {code:33, shift: false};\r\n _keys['pagedown'] = {code:34, shift: false};\r\n // symbols\r\n _keys['='] = {code:187, shift: false};\r\n _keys['-'] = {code:189, shift: false};\r\n _keys[']'] = {code:221, shift: false};\r\n _keys['['] = {code:219, shift: false};\r\n\r\n\r\n\r\n var down = function(event) {handleEvent(event,'keydown');};\r\n var up = function(event) {handleEvent(event,'keyup');};\r\n\r\n // handle the actualy bound key with the event\r\n var handleEvent = function(event,type) {\r\n if (_bound[type][event.keyCode] !== undefined) {\r\n var bound = _bound[type][event.keyCode];\r\n for (var i = 0; i < bound.length; i++) {\r\n if (bound[i].shift === undefined) {\r\n bound[i].fn(event);\r\n }\r\n else if (bound[i].shift == true && event.shiftKey == true) {\r\n bound[i].fn(event);\r\n }\r\n else if (bound[i].shift == false && event.shiftKey == false) {\r\n bound[i].fn(event);\r\n }\r\n }\r\n\r\n if (preventDefault == true) {\r\n event.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n // bind a key to a callback\r\n _exportFunctions.bind = function(key, callback, type) {\r\n if (type === undefined) {\r\n type = 'keydown';\r\n }\r\n if (_keys[key] === undefined) {\r\n throw new Error(\"unsupported key: \" + key);\r\n }\r\n if (_bound[type][_keys[key].code] === undefined) {\r\n _bound[type][_keys[key].code] = [];\r\n }\r\n _bound[type][_keys[key].code].push({fn:callback, shift:_keys[key].shift});\r\n };\r\n\r\n\r\n // bind all keys to a call back (demo purposes)\r\n _exportFunctions.bindAll = function(callback, type) {\r\n if (type === undefined) {\r\n type = 'keydown';\r\n }\r\n for (var key in _keys) {\r\n if (_keys.hasOwnProperty(key)) {\r\n _exportFunctions.bind(key,callback,type);\r\n }\r\n }\r\n };\r\n\r\n // get the key label from an event\r\n _exportFunctions.getKey = function(event) {\r\n for (var key in _keys) {\r\n if (_keys.hasOwnProperty(key)) {\r\n if (event.shiftKey == true && _keys[key].shift == true && event.keyCode == _keys[key].code) {\r\n return key;\r\n }\r\n else if (event.shiftKey == false && _keys[key].shift == false && event.keyCode == _keys[key].code) {\r\n return key;\r\n }\r\n else if (event.keyCode == _keys[key].code && key == 'shift') {\r\n return key;\r\n }\r\n }\r\n }\r\n return \"unknown key, currently not supported\";\r\n };\r\n\r\n // unbind either a specific callback from a key or all of them (by leaving callback undefined)\r\n _exportFunctions.unbind = function(key, callback, type) {\r\n if (type === undefined) {\r\n type = 'keydown';\r\n }\r\n if (_keys[key] === undefined) {\r\n throw new Error(\"unsupported key: \" + key);\r\n }\r\n if (callback !== undefined) {\r\n var newBindings = [];\r\n var bound = _bound[type][_keys[key].code];\r\n if (bound !== undefined) {\r\n for (var i = 0; i < bound.length; i++) {\r\n if (!(bound[i].fn == callback && bound[i].shift == _keys[key].shift)) {\r\n newBindings.push(_bound[type][_keys[key].code][i]);\r\n }\r\n }\r\n }\r\n _bound[type][_keys[key].code] = newBindings;\r\n }\r\n else {\r\n _bound[type][_keys[key].code] = [];\r\n }\r\n };\r\n\r\n // reset all bound variables.\r\n _exportFunctions.reset = function() {\r\n _bound = {keydown:{}, keyup:{}};\r\n };\r\n\r\n // unbind all listeners and reset all variables.\r\n _exportFunctions.destroy = function() {\r\n _bound = {keydown:{}, keyup:{}};\r\n container.removeEventListener('keydown', down, true);\r\n container.removeEventListener('keyup', up, true);\r\n };\r\n\r\n // create listeners.\r\n container.addEventListener('keydown',down,true);\r\n container.addEventListener('keyup',up,true);\r\n\r\n // return the public functions.\r\n return _exportFunctions;\r\n}\r\n","import \"./NavigationHandler.css\";\n\nimport { Hammer } from \"vis-util/esnext\";\nimport { onRelease, onTouch } from \"../../../hammerUtil\";\nimport keycharm from \"keycharm\";\n\n/**\n * Navigation Handler\n */\nclass NavigationHandler {\n /**\n * @param {object} body\n * @param {Canvas} canvas\n */\n constructor(body, canvas) {\n this.body = body;\n this.canvas = canvas;\n\n this.iconsCreated = false;\n this.navigationHammers = [];\n this.boundFunctions = {};\n this.touchTime = 0;\n this.activated = false;\n\n this.body.emitter.on(\"activate\", () => {\n this.activated = true;\n this.configureKeyboardBindings();\n });\n this.body.emitter.on(\"deactivate\", () => {\n this.activated = false;\n this.configureKeyboardBindings();\n });\n this.body.emitter.on(\"destroy\", () => {\n if (this.keycharm !== undefined) {\n this.keycharm.destroy();\n }\n });\n\n this.options = {};\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n this.options = options;\n this.create();\n }\n }\n\n /**\n * Creates or refreshes navigation and sets key bindings\n */\n create() {\n if (this.options.navigationButtons === true) {\n if (this.iconsCreated === false) {\n this.loadNavigationElements();\n }\n } else if (this.iconsCreated === true) {\n this.cleanNavigation();\n }\n\n this.configureKeyboardBindings();\n }\n\n /**\n * Cleans up previous navigation items\n */\n cleanNavigation() {\n // clean hammer bindings\n if (this.navigationHammers.length != 0) {\n for (let i = 0; i < this.navigationHammers.length; i++) {\n this.navigationHammers[i].destroy();\n }\n this.navigationHammers = [];\n }\n\n // clean up previous navigation items\n if (\n this.navigationDOM &&\n this.navigationDOM[\"wrapper\"] &&\n this.navigationDOM[\"wrapper\"].parentNode\n ) {\n this.navigationDOM[\"wrapper\"].parentNode.removeChild(\n this.navigationDOM[\"wrapper\"]\n );\n }\n\n this.iconsCreated = false;\n }\n\n /**\n * Creation of the navigation controls nodes. They are drawn over the rest of the nodes and are not affected by scale and translation\n * they have a triggerFunction which is called on click. If the position of the navigation controls is dependent\n * on this.frame.canvas.clientWidth or this.frame.canvas.clientHeight, we flag horizontalAlignLeft and verticalAlignTop false.\n * This means that the location will be corrected by the _relocateNavigation function on a size change of the canvas.\n *\n * @private\n */\n loadNavigationElements() {\n this.cleanNavigation();\n\n this.navigationDOM = {};\n const navigationDivs = [\n \"up\",\n \"down\",\n \"left\",\n \"right\",\n \"zoomIn\",\n \"zoomOut\",\n \"zoomExtends\",\n ];\n const navigationDivActions = [\n \"_moveUp\",\n \"_moveDown\",\n \"_moveLeft\",\n \"_moveRight\",\n \"_zoomIn\",\n \"_zoomOut\",\n \"_fit\",\n ];\n\n this.navigationDOM[\"wrapper\"] = document.createElement(\"div\");\n this.navigationDOM[\"wrapper\"].className = \"vis-navigation\";\n this.canvas.frame.appendChild(this.navigationDOM[\"wrapper\"]);\n\n for (let i = 0; i < navigationDivs.length; i++) {\n this.navigationDOM[navigationDivs[i]] = document.createElement(\"div\");\n this.navigationDOM[navigationDivs[i]].className =\n \"vis-button vis-\" + navigationDivs[i];\n this.navigationDOM[\"wrapper\"].appendChild(\n this.navigationDOM[navigationDivs[i]]\n );\n\n const hammer = new Hammer(this.navigationDOM[navigationDivs[i]]);\n if (navigationDivActions[i] === \"_fit\") {\n onTouch(hammer, this._fit.bind(this));\n } else {\n onTouch(hammer, this.bindToRedraw.bind(this, navigationDivActions[i]));\n }\n\n this.navigationHammers.push(hammer);\n }\n\n // use a hammer for the release so we do not require the one used in the rest of the network\n // the one the rest uses can be overloaded by the manipulation system.\n const hammerFrame = new Hammer(this.canvas.frame);\n onRelease(hammerFrame, () => {\n this._stopMovement();\n });\n this.navigationHammers.push(hammerFrame);\n\n this.iconsCreated = true;\n }\n\n /**\n *\n * @param {string} action\n */\n bindToRedraw(action) {\n if (this.boundFunctions[action] === undefined) {\n this.boundFunctions[action] = this[action].bind(this);\n this.body.emitter.on(\"initRedraw\", this.boundFunctions[action]);\n this.body.emitter.emit(\"_startRendering\");\n }\n }\n\n /**\n *\n * @param {string} action\n */\n unbindFromRedraw(action) {\n if (this.boundFunctions[action] !== undefined) {\n this.body.emitter.off(\"initRedraw\", this.boundFunctions[action]);\n this.body.emitter.emit(\"_stopRendering\");\n delete this.boundFunctions[action];\n }\n }\n\n /**\n * this stops all movement induced by the navigation buttons\n *\n * @private\n */\n _fit() {\n if (new Date().valueOf() - this.touchTime > 700) {\n // TODO: fix ugly hack to avoid hammer's double fireing of event (because we use release?)\n this.body.emitter.emit(\"fit\", { duration: 700 });\n this.touchTime = new Date().valueOf();\n }\n }\n\n /**\n * this stops all movement induced by the navigation buttons\n *\n * @private\n */\n _stopMovement() {\n for (const boundAction in this.boundFunctions) {\n if (\n Object.prototype.hasOwnProperty.call(this.boundFunctions, boundAction)\n ) {\n this.body.emitter.off(\"initRedraw\", this.boundFunctions[boundAction]);\n this.body.emitter.emit(\"_stopRendering\");\n }\n }\n this.boundFunctions = {};\n }\n /**\n *\n * @private\n */\n _moveUp() {\n this.body.view.translation.y += this.options.keyboard.speed.y;\n }\n /**\n *\n * @private\n */\n _moveDown() {\n this.body.view.translation.y -= this.options.keyboard.speed.y;\n }\n /**\n *\n * @private\n */\n _moveLeft() {\n this.body.view.translation.x += this.options.keyboard.speed.x;\n }\n /**\n *\n * @private\n */\n _moveRight() {\n this.body.view.translation.x -= this.options.keyboard.speed.x;\n }\n /**\n *\n * @private\n */\n _zoomIn() {\n const scaleOld = this.body.view.scale;\n const scale = this.body.view.scale * (1 + this.options.keyboard.speed.zoom);\n const translation = this.body.view.translation;\n const scaleFrac = scale / scaleOld;\n const tx =\n (1 - scaleFrac) * this.canvas.canvasViewCenter.x +\n translation.x * scaleFrac;\n const ty =\n (1 - scaleFrac) * this.canvas.canvasViewCenter.y +\n translation.y * scaleFrac;\n\n this.body.view.scale = scale;\n this.body.view.translation = { x: tx, y: ty };\n this.body.emitter.emit(\"zoom\", {\n direction: \"+\",\n scale: this.body.view.scale,\n pointer: null,\n });\n }\n\n /**\n *\n * @private\n */\n _zoomOut() {\n const scaleOld = this.body.view.scale;\n const scale = this.body.view.scale / (1 + this.options.keyboard.speed.zoom);\n const translation = this.body.view.translation;\n const scaleFrac = scale / scaleOld;\n const tx =\n (1 - scaleFrac) * this.canvas.canvasViewCenter.x +\n translation.x * scaleFrac;\n const ty =\n (1 - scaleFrac) * this.canvas.canvasViewCenter.y +\n translation.y * scaleFrac;\n\n this.body.view.scale = scale;\n this.body.view.translation = { x: tx, y: ty };\n this.body.emitter.emit(\"zoom\", {\n direction: \"-\",\n scale: this.body.view.scale,\n pointer: null,\n });\n }\n\n /**\n * bind all keys using keycharm.\n */\n configureKeyboardBindings() {\n if (this.keycharm !== undefined) {\n this.keycharm.destroy();\n }\n\n if (this.options.keyboard.enabled === true) {\n if (this.options.keyboard.bindToWindow === true) {\n this.keycharm = keycharm({ container: window, preventDefault: true });\n } else {\n this.keycharm = keycharm({\n container: this.canvas.frame,\n preventDefault: true,\n });\n }\n\n this.keycharm.reset();\n\n if (this.activated === true) {\n this.keycharm.bind(\n \"up\",\n () => {\n this.bindToRedraw(\"_moveUp\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"down\",\n () => {\n this.bindToRedraw(\"_moveDown\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"left\",\n () => {\n this.bindToRedraw(\"_moveLeft\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"right\",\n () => {\n this.bindToRedraw(\"_moveRight\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"=\",\n () => {\n this.bindToRedraw(\"_zoomIn\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"num+\",\n () => {\n this.bindToRedraw(\"_zoomIn\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"num-\",\n () => {\n this.bindToRedraw(\"_zoomOut\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"-\",\n () => {\n this.bindToRedraw(\"_zoomOut\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"[\",\n () => {\n this.bindToRedraw(\"_zoomOut\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"]\",\n () => {\n this.bindToRedraw(\"_zoomIn\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"pageup\",\n () => {\n this.bindToRedraw(\"_zoomIn\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"pagedown\",\n () => {\n this.bindToRedraw(\"_zoomOut\");\n },\n \"keydown\"\n );\n\n this.keycharm.bind(\n \"up\",\n () => {\n this.unbindFromRedraw(\"_moveUp\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"down\",\n () => {\n this.unbindFromRedraw(\"_moveDown\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"left\",\n () => {\n this.unbindFromRedraw(\"_moveLeft\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"right\",\n () => {\n this.unbindFromRedraw(\"_moveRight\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"=\",\n () => {\n this.unbindFromRedraw(\"_zoomIn\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"num+\",\n () => {\n this.unbindFromRedraw(\"_zoomIn\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"num-\",\n () => {\n this.unbindFromRedraw(\"_zoomOut\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"-\",\n () => {\n this.unbindFromRedraw(\"_zoomOut\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"[\",\n () => {\n this.unbindFromRedraw(\"_zoomOut\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"]\",\n () => {\n this.unbindFromRedraw(\"_zoomIn\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"pageup\",\n () => {\n this.unbindFromRedraw(\"_zoomIn\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"pagedown\",\n () => {\n this.unbindFromRedraw(\"_zoomOut\");\n },\n \"keyup\"\n );\n }\n }\n }\n}\n\nexport default NavigationHandler;\n","import {\n Popup,\n getAbsoluteLeft,\n getAbsoluteTop,\n mergeOptions,\n parseColor,\n selectiveNotDeepExtend,\n} from \"vis-util/esnext\";\nimport NavigationHandler from \"./components/NavigationHandler\";\n\n/**\n * Handler for interactions\n */\nclass InteractionHandler {\n /**\n * @param {object} body\n * @param {Canvas} canvas\n * @param {SelectionHandler} selectionHandler\n */\n constructor(body, canvas, selectionHandler) {\n this.body = body;\n this.canvas = canvas;\n this.selectionHandler = selectionHandler;\n this.navigationHandler = new NavigationHandler(body, canvas);\n\n // bind the events from hammer to functions in this object\n this.body.eventListeners.onTap = this.onTap.bind(this);\n this.body.eventListeners.onTouch = this.onTouch.bind(this);\n this.body.eventListeners.onDoubleTap = this.onDoubleTap.bind(this);\n this.body.eventListeners.onHold = this.onHold.bind(this);\n this.body.eventListeners.onDragStart = this.onDragStart.bind(this);\n this.body.eventListeners.onDrag = this.onDrag.bind(this);\n this.body.eventListeners.onDragEnd = this.onDragEnd.bind(this);\n this.body.eventListeners.onMouseWheel = this.onMouseWheel.bind(this);\n this.body.eventListeners.onPinch = this.onPinch.bind(this);\n this.body.eventListeners.onMouseMove = this.onMouseMove.bind(this);\n this.body.eventListeners.onRelease = this.onRelease.bind(this);\n this.body.eventListeners.onContext = this.onContext.bind(this);\n\n this.touchTime = 0;\n this.drag = {};\n this.pinch = {};\n this.popup = undefined;\n this.popupObj = undefined;\n this.popupTimer = undefined;\n\n this.body.functions.getPointer = this.getPointer.bind(this);\n\n this.options = {};\n this.defaultOptions = {\n dragNodes: true,\n dragView: true,\n hover: false,\n keyboard: {\n enabled: false,\n speed: { x: 10, y: 10, zoom: 0.02 },\n bindToWindow: true,\n autoFocus: true,\n },\n navigationButtons: false,\n tooltipDelay: 300,\n zoomView: true,\n zoomSpeed: 1,\n };\n Object.assign(this.options, this.defaultOptions);\n\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n this.body.emitter.on(\"destroy\", () => {\n clearTimeout(this.popupTimer);\n delete this.body.functions.getPointer;\n });\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n // extend all but the values in fields\n const fields = [\n \"hideEdgesOnDrag\",\n \"hideEdgesOnZoom\",\n \"hideNodesOnDrag\",\n \"keyboard\",\n \"multiselect\",\n \"selectable\",\n \"selectConnectedEdges\",\n ];\n selectiveNotDeepExtend(fields, this.options, options);\n\n // merge the keyboard options in.\n mergeOptions(this.options, options, \"keyboard\");\n\n if (options.tooltip) {\n Object.assign(this.options.tooltip, options.tooltip);\n if (options.tooltip.color) {\n this.options.tooltip.color = parseColor(options.tooltip.color);\n }\n }\n }\n\n this.navigationHandler.setOptions(this.options);\n }\n\n /**\n * Get the pointer location from a touch location\n *\n * @param {{x: number, y: number}} touch\n * @returns {{x: number, y: number}} pointer\n * @private\n */\n getPointer(touch) {\n return {\n x: touch.x - getAbsoluteLeft(this.canvas.frame.canvas),\n y: touch.y - getAbsoluteTop(this.canvas.frame.canvas),\n };\n }\n\n /**\n * On start of a touch gesture, store the pointer\n *\n * @param {Event} event The event\n * @private\n */\n onTouch(event) {\n if (new Date().valueOf() - this.touchTime > 50) {\n this.drag.pointer = this.getPointer(event.center);\n this.drag.pinched = false;\n this.pinch.scale = this.body.view.scale;\n // to avoid double fireing of this event because we have two hammer instances. (on canvas and on frame)\n this.touchTime = new Date().valueOf();\n }\n }\n\n /**\n * handle tap/click event: select/unselect a node\n *\n * @param {Event} event\n * @private\n */\n onTap(event) {\n const pointer = this.getPointer(event.center);\n const multiselect =\n this.selectionHandler.options.multiselect &&\n (event.changedPointers[0].ctrlKey || event.changedPointers[0].metaKey);\n\n this.checkSelectionChanges(pointer, multiselect);\n\n this.selectionHandler.commitAndEmit(pointer, event);\n this.selectionHandler.generateClickEvent(\"click\", event, pointer);\n }\n\n /**\n * handle doubletap event\n *\n * @param {Event} event\n * @private\n */\n onDoubleTap(event) {\n const pointer = this.getPointer(event.center);\n this.selectionHandler.generateClickEvent(\"doubleClick\", event, pointer);\n }\n\n /**\n * handle long tap event: multi select nodes\n *\n * @param {Event} event\n * @private\n */\n onHold(event) {\n const pointer = this.getPointer(event.center);\n const multiselect = this.selectionHandler.options.multiselect;\n\n this.checkSelectionChanges(pointer, multiselect);\n\n this.selectionHandler.commitAndEmit(pointer, event);\n this.selectionHandler.generateClickEvent(\"click\", event, pointer);\n this.selectionHandler.generateClickEvent(\"hold\", event, pointer);\n }\n\n /**\n * handle the release of the screen\n *\n * @param {Event} event\n * @private\n */\n onRelease(event) {\n if (new Date().valueOf() - this.touchTime > 10) {\n const pointer = this.getPointer(event.center);\n this.selectionHandler.generateClickEvent(\"release\", event, pointer);\n // to avoid double fireing of this event because we have two hammer instances. (on canvas and on frame)\n this.touchTime = new Date().valueOf();\n }\n }\n\n /**\n *\n * @param {Event} event\n */\n onContext(event) {\n const pointer = this.getPointer({ x: event.clientX, y: event.clientY });\n this.selectionHandler.generateClickEvent(\"oncontext\", event, pointer);\n }\n\n /**\n * Select and deselect nodes depending current selection change.\n *\n * @param {{x: number, y: number}} pointer\n * @param {boolean} [add=false]\n */\n checkSelectionChanges(pointer, add = false) {\n if (add === true) {\n this.selectionHandler.selectAdditionalOnPoint(pointer);\n } else {\n this.selectionHandler.selectOnPoint(pointer);\n }\n }\n\n /**\n * Remove all node and edge id's from the first set that are present in the second one.\n *\n * @param {{nodes: Array., edges: Array.}} firstSet\n * @param {{nodes: Array., edges: Array.}} secondSet\n * @returns {{nodes: Array., edges: Array.}}\n * @private\n */\n _determineDifference(firstSet, secondSet) {\n const arrayDiff = function (firstArr, secondArr) {\n const result = [];\n\n for (let i = 0; i < firstArr.length; i++) {\n const value = firstArr[i];\n if (secondArr.indexOf(value) === -1) {\n result.push(value);\n }\n }\n\n return result;\n };\n\n return {\n nodes: arrayDiff(firstSet.nodes, secondSet.nodes),\n edges: arrayDiff(firstSet.edges, secondSet.edges),\n };\n }\n\n /**\n * This function is called by onDragStart.\n * It is separated out because we can then overload it for the datamanipulation system.\n *\n * @param {Event} event\n * @private\n */\n onDragStart(event) {\n // if already dragging, do not start\n // this can happen on touch screens with multiple fingers\n if (this.drag.dragging) {\n return;\n }\n\n //in case the touch event was triggered on an external div, do the initial touch now.\n if (this.drag.pointer === undefined) {\n this.onTouch(event);\n }\n\n // note: drag.pointer is set in onTouch to get the initial touch location\n const node = this.selectionHandler.getNodeAt(this.drag.pointer);\n\n this.drag.dragging = true;\n this.drag.selection = [];\n this.drag.translation = Object.assign({}, this.body.view.translation); // copy the object\n this.drag.nodeId = undefined;\n\n if (event.srcEvent.shiftKey) {\n this.body.selectionBox.show = true;\n const pointer = this.getPointer(event.center);\n\n this.body.selectionBox.position.start = {\n x: this.canvas._XconvertDOMtoCanvas(pointer.x),\n y: this.canvas._YconvertDOMtoCanvas(pointer.y),\n };\n this.body.selectionBox.position.end = {\n x: this.canvas._XconvertDOMtoCanvas(pointer.x),\n y: this.canvas._YconvertDOMtoCanvas(pointer.y),\n };\n } else if (node !== undefined && this.options.dragNodes === true) {\n this.drag.nodeId = node.id;\n // select the clicked node if not yet selected\n if (node.isSelected() === false) {\n this.selectionHandler.setSelection({ nodes: [node.id] });\n }\n\n // after select to contain the node\n this.selectionHandler.generateClickEvent(\n \"dragStart\",\n event,\n this.drag.pointer\n );\n\n // create an array with the selected nodes and their original location and status\n for (const node of this.selectionHandler.getSelectedNodes()) {\n const s = {\n id: node.id,\n node: node,\n\n // store original x, y, xFixed and yFixed, make the node temporarily Fixed\n x: node.x,\n y: node.y,\n xFixed: node.options.fixed.x,\n yFixed: node.options.fixed.y,\n };\n\n node.options.fixed.x = true;\n node.options.fixed.y = true;\n\n this.drag.selection.push(s);\n }\n } else {\n // fallback if no node is selected and thus the view is dragged.\n this.selectionHandler.generateClickEvent(\n \"dragStart\",\n event,\n this.drag.pointer,\n undefined,\n true\n );\n }\n }\n\n /**\n * handle drag event\n *\n * @param {Event} event\n * @private\n */\n onDrag(event) {\n if (this.drag.pinched === true) {\n return;\n }\n\n // remove the focus on node if it is focussed on by the focusOnNode\n this.body.emitter.emit(\"unlockNode\");\n\n const pointer = this.getPointer(event.center);\n\n const selection = this.drag.selection;\n if (selection && selection.length && this.options.dragNodes === true) {\n this.selectionHandler.generateClickEvent(\"dragging\", event, pointer);\n\n // calculate delta's and new location\n const deltaX = pointer.x - this.drag.pointer.x;\n const deltaY = pointer.y - this.drag.pointer.y;\n\n // update position of all selected nodes\n selection.forEach((selection) => {\n const node = selection.node;\n // only move the node if it was not fixed initially\n if (selection.xFixed === false) {\n node.x = this.canvas._XconvertDOMtoCanvas(\n this.canvas._XconvertCanvasToDOM(selection.x) + deltaX\n );\n }\n // only move the node if it was not fixed initially\n if (selection.yFixed === false) {\n node.y = this.canvas._YconvertDOMtoCanvas(\n this.canvas._YconvertCanvasToDOM(selection.y) + deltaY\n );\n }\n });\n\n // start the simulation of the physics\n this.body.emitter.emit(\"startSimulation\");\n } else {\n // create selection box\n if (event.srcEvent.shiftKey) {\n this.selectionHandler.generateClickEvent(\n \"dragging\",\n event,\n pointer,\n undefined,\n true\n );\n\n // if the drag was not started properly because the click started outside the network div, start it now.\n if (this.drag.pointer === undefined) {\n this.onDragStart(event);\n return;\n }\n\n this.body.selectionBox.position.end = {\n x: this.canvas._XconvertDOMtoCanvas(pointer.x),\n y: this.canvas._YconvertDOMtoCanvas(pointer.y),\n };\n this.body.emitter.emit(\"_requestRedraw\");\n }\n\n // move the network\n if (this.options.dragView === true && !event.srcEvent.shiftKey) {\n this.selectionHandler.generateClickEvent(\n \"dragging\",\n event,\n pointer,\n undefined,\n true\n );\n\n // if the drag was not started properly because the click started outside the network div, start it now.\n if (this.drag.pointer === undefined) {\n this.onDragStart(event);\n return;\n }\n\n const diffX = pointer.x - this.drag.pointer.x;\n const diffY = pointer.y - this.drag.pointer.y;\n\n this.body.view.translation = {\n x: this.drag.translation.x + diffX,\n y: this.drag.translation.y + diffY,\n };\n this.body.emitter.emit(\"_requestRedraw\");\n }\n }\n }\n\n /**\n * handle drag start event\n *\n * @param {Event} event\n * @private\n */\n onDragEnd(event) {\n this.drag.dragging = false;\n\n if (this.body.selectionBox.show) {\n this.body.selectionBox.show = false;\n const selectionBoxPosition = this.body.selectionBox.position;\n const selectionBoxPositionMinMax = {\n minX: Math.min(\n selectionBoxPosition.start.x,\n selectionBoxPosition.end.x\n ),\n minY: Math.min(\n selectionBoxPosition.start.y,\n selectionBoxPosition.end.y\n ),\n maxX: Math.max(\n selectionBoxPosition.start.x,\n selectionBoxPosition.end.x\n ),\n maxY: Math.max(\n selectionBoxPosition.start.y,\n selectionBoxPosition.end.y\n ),\n };\n\n const toBeSelectedNodes = this.body.nodeIndices.filter((nodeId) => {\n const node = this.body.nodes[nodeId];\n return (\n node.x >= selectionBoxPositionMinMax.minX &&\n node.x <= selectionBoxPositionMinMax.maxX &&\n node.y >= selectionBoxPositionMinMax.minY &&\n node.y <= selectionBoxPositionMinMax.maxY\n );\n });\n\n toBeSelectedNodes.forEach((nodeId) =>\n this.selectionHandler.selectObject(this.body.nodes[nodeId])\n );\n\n const pointer = this.getPointer(event.center);\n this.selectionHandler.commitAndEmit(pointer, event);\n this.selectionHandler.generateClickEvent(\n \"dragEnd\",\n event,\n this.getPointer(event.center),\n undefined,\n true\n );\n this.body.emitter.emit(\"_requestRedraw\");\n } else {\n const selection = this.drag.selection;\n if (selection && selection.length) {\n selection.forEach(function (s) {\n // restore original xFixed and yFixed\n s.node.options.fixed.x = s.xFixed;\n s.node.options.fixed.y = s.yFixed;\n });\n this.selectionHandler.generateClickEvent(\n \"dragEnd\",\n event,\n this.getPointer(event.center)\n );\n this.body.emitter.emit(\"startSimulation\");\n } else {\n this.selectionHandler.generateClickEvent(\n \"dragEnd\",\n event,\n this.getPointer(event.center),\n undefined,\n true\n );\n this.body.emitter.emit(\"_requestRedraw\");\n }\n }\n }\n\n /**\n * Handle pinch event\n *\n * @param {Event} event The event\n * @private\n */\n onPinch(event) {\n const pointer = this.getPointer(event.center);\n\n this.drag.pinched = true;\n if (this.pinch[\"scale\"] === undefined) {\n this.pinch.scale = 1;\n }\n\n // TODO: enabled moving while pinching?\n const scale = this.pinch.scale * event.scale;\n this.zoom(scale, pointer);\n }\n\n /**\n * Zoom the network in or out\n *\n * @param {number} scale a number around 1, and between 0.01 and 10\n * @param {{x: number, y: number}} pointer Position on screen\n * @private\n */\n zoom(scale, pointer) {\n if (this.options.zoomView === true) {\n const scaleOld = this.body.view.scale;\n if (scale < 0.00001) {\n scale = 0.00001;\n }\n if (scale > 10) {\n scale = 10;\n }\n\n let preScaleDragPointer = undefined;\n if (this.drag !== undefined) {\n if (this.drag.dragging === true) {\n preScaleDragPointer = this.canvas.DOMtoCanvas(this.drag.pointer);\n }\n }\n // + this.canvas.frame.canvas.clientHeight / 2\n const translation = this.body.view.translation;\n\n const scaleFrac = scale / scaleOld;\n const tx = (1 - scaleFrac) * pointer.x + translation.x * scaleFrac;\n const ty = (1 - scaleFrac) * pointer.y + translation.y * scaleFrac;\n\n this.body.view.scale = scale;\n this.body.view.translation = { x: tx, y: ty };\n\n if (preScaleDragPointer != undefined) {\n const postScaleDragPointer =\n this.canvas.canvasToDOM(preScaleDragPointer);\n this.drag.pointer.x = postScaleDragPointer.x;\n this.drag.pointer.y = postScaleDragPointer.y;\n }\n\n this.body.emitter.emit(\"_requestRedraw\");\n\n if (scaleOld < scale) {\n this.body.emitter.emit(\"zoom\", {\n direction: \"+\",\n scale: this.body.view.scale,\n pointer: pointer,\n });\n } else {\n this.body.emitter.emit(\"zoom\", {\n direction: \"-\",\n scale: this.body.view.scale,\n pointer: pointer,\n });\n }\n }\n }\n\n /**\n * Event handler for mouse wheel event, used to zoom the timeline\n * See http://adomas.org/javascript-mouse-wheel/\n * https://github.com/EightMedia/hammer.js/issues/256\n *\n * @param {MouseEvent} event\n * @private\n */\n onMouseWheel(event) {\n if (this.options.zoomView === true) {\n // If delta is nonzero, handle it.\n // Basically, delta is now positive if wheel was scrolled up,\n // and negative, if wheel was scrolled down.\n if (event.deltaY !== 0) {\n // calculate the new scale\n let scale = this.body.view.scale;\n scale *=\n 1 + (event.deltaY < 0 ? 1 : -1) * (this.options.zoomSpeed * 0.1);\n\n // calculate the pointer location\n const pointer = this.getPointer({ x: event.clientX, y: event.clientY });\n\n // apply the new scale\n this.zoom(scale, pointer);\n }\n\n // Prevent default actions caused by mouse wheel.\n event.preventDefault();\n }\n }\n\n /**\n * Mouse move handler for checking whether the title moves over a node with a title.\n *\n * @param {Event} event\n * @private\n */\n onMouseMove(event) {\n const pointer = this.getPointer({ x: event.clientX, y: event.clientY });\n let popupVisible = false;\n\n // check if the previously selected node is still selected\n if (this.popup !== undefined) {\n if (this.popup.hidden === false) {\n this._checkHidePopup(pointer);\n }\n\n // if the popup was not hidden above\n if (this.popup.hidden === false) {\n popupVisible = true;\n this.popup.setPosition(pointer.x + 3, pointer.y - 5);\n this.popup.show();\n }\n }\n\n // if we bind the keyboard to the div, we have to highlight it to use it. This highlights it on mouse over.\n if (\n this.options.keyboard.autoFocus &&\n this.options.keyboard.bindToWindow === false &&\n this.options.keyboard.enabled === true\n ) {\n this.canvas.frame.focus();\n }\n\n // start a timeout that will check if the mouse is positioned above an element\n if (popupVisible === false) {\n if (this.popupTimer !== undefined) {\n clearInterval(this.popupTimer); // stop any running calculationTimer\n this.popupTimer = undefined;\n }\n if (!this.drag.dragging) {\n this.popupTimer = setTimeout(\n () => this._checkShowPopup(pointer),\n this.options.tooltipDelay\n );\n }\n }\n\n // adding hover highlights\n if (this.options.hover === true) {\n this.selectionHandler.hoverObject(event, pointer);\n }\n }\n\n /**\n * Check if there is an element on the given position in the network\n * (a node or edge). If so, and if this element has a title,\n * show a popup window with its title.\n *\n * @param {{x:number, y:number}} pointer\n * @private\n */\n _checkShowPopup(pointer) {\n const x = this.canvas._XconvertDOMtoCanvas(pointer.x);\n const y = this.canvas._YconvertDOMtoCanvas(pointer.y);\n const pointerObj = {\n left: x,\n top: y,\n right: x,\n bottom: y,\n };\n\n const previousPopupObjId =\n this.popupObj === undefined ? undefined : this.popupObj.id;\n let nodeUnderCursor = false;\n let popupType = \"node\";\n\n // check if a node is under the cursor.\n if (this.popupObj === undefined) {\n // search the nodes for overlap, select the top one in case of multiple nodes\n const nodeIndices = this.body.nodeIndices;\n const nodes = this.body.nodes;\n let node;\n const overlappingNodes = [];\n for (let i = 0; i < nodeIndices.length; i++) {\n node = nodes[nodeIndices[i]];\n if (node.isOverlappingWith(pointerObj) === true) {\n nodeUnderCursor = true;\n if (node.getTitle() !== undefined) {\n overlappingNodes.push(nodeIndices[i]);\n }\n }\n }\n\n if (overlappingNodes.length > 0) {\n // if there are overlapping nodes, select the last one, this is the one which is drawn on top of the others\n this.popupObj = nodes[overlappingNodes[overlappingNodes.length - 1]];\n // if you hover over a node, the title of the edge is not supposed to be shown.\n nodeUnderCursor = true;\n }\n }\n\n if (this.popupObj === undefined && nodeUnderCursor === false) {\n // search the edges for overlap\n const edgeIndices = this.body.edgeIndices;\n const edges = this.body.edges;\n let edge;\n const overlappingEdges = [];\n for (let i = 0; i < edgeIndices.length; i++) {\n edge = edges[edgeIndices[i]];\n if (edge.isOverlappingWith(pointerObj) === true) {\n if (edge.connected === true && edge.getTitle() !== undefined) {\n overlappingEdges.push(edgeIndices[i]);\n }\n }\n }\n\n if (overlappingEdges.length > 0) {\n this.popupObj = edges[overlappingEdges[overlappingEdges.length - 1]];\n popupType = \"edge\";\n }\n }\n\n if (this.popupObj !== undefined) {\n // show popup message window\n if (this.popupObj.id !== previousPopupObjId) {\n if (this.popup === undefined) {\n this.popup = new Popup(this.canvas.frame);\n }\n\n this.popup.popupTargetType = popupType;\n this.popup.popupTargetId = this.popupObj.id;\n\n // adjust a small offset such that the mouse cursor is located in the\n // bottom left location of the popup, and you can easily move over the\n // popup area\n this.popup.setPosition(pointer.x + 3, pointer.y - 5);\n this.popup.setText(this.popupObj.getTitle());\n this.popup.show();\n this.body.emitter.emit(\"showPopup\", this.popupObj.id);\n }\n } else {\n if (this.popup !== undefined) {\n this.popup.hide();\n this.body.emitter.emit(\"hidePopup\");\n }\n }\n }\n\n /**\n * Check if the popup must be hidden, which is the case when the mouse is no\n * longer hovering on the object\n *\n * @param {{x:number, y:number}} pointer\n * @private\n */\n _checkHidePopup(pointer) {\n const pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n\n let stillOnObj = false;\n if (this.popup.popupTargetType === \"node\") {\n if (this.body.nodes[this.popup.popupTargetId] !== undefined) {\n stillOnObj =\n this.body.nodes[this.popup.popupTargetId].isOverlappingWith(\n pointerObj\n );\n\n // if the mouse is still one the node, we have to check if it is not also on one that is drawn on top of it.\n // we initially only check stillOnObj because this is much faster.\n if (stillOnObj === true) {\n const overNode = this.selectionHandler.getNodeAt(pointer);\n stillOnObj =\n overNode === undefined\n ? false\n : overNode.id === this.popup.popupTargetId;\n }\n }\n } else {\n if (this.selectionHandler.getNodeAt(pointer) === undefined) {\n if (this.body.edges[this.popup.popupTargetId] !== undefined) {\n stillOnObj =\n this.body.edges[this.popup.popupTargetId].isOverlappingWith(\n pointerObj\n );\n }\n }\n }\n\n if (stillOnObj === false) {\n this.popupObj = undefined;\n this.popup.hide();\n this.body.emitter.emit(\"hidePopup\");\n }\n }\n}\n\nexport default InteractionHandler;\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar getWeakData = require('../internals/internal-metadata').getWeakData;\nvar anInstance = require('../internals/an-instance');\nvar anObject = require('../internals/an-object');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar isObject = require('../internals/is-object');\nvar iterate = require('../internals/iterate');\nvar ArrayIterationModule = require('../internals/array-iteration');\nvar hasOwn = require('../internals/has-own-property');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\nvar find = ArrayIterationModule.find;\nvar findIndex = ArrayIterationModule.findIndex;\nvar splice = uncurryThis([].splice);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (state) {\n return state.frozen || (state.frozen = new UncaughtFrozenStore());\n};\n\nvar UncaughtFrozenStore = function () {\n this.entries = [];\n};\n\nvar findUncaughtFrozen = function (store, key) {\n return find(store.entries, function (it) {\n return it[0] === key;\n });\n};\n\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.entries.push([key, value]);\n },\n 'delete': function (key) {\n var index = findIndex(this.entries, function (it) {\n return it[0] === key;\n });\n if (~index) splice(this.entries, index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n id: id++,\n frozen: undefined\n });\n if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var data = getWeakData(anObject(key), true);\n if (data === true) uncaughtFrozenStore(state).set(key, value);\n else data[state.id] = value;\n return that;\n };\n\n defineBuiltIns(Prototype, {\n // `{ WeakMap, WeakSet }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-weakmap.prototype.delete\n // https://tc39.es/ecma262/#sec-weakset.prototype.delete\n 'delete': function (key) {\n var state = getInternalState(this);\n if (!isObject(key)) return false;\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state)['delete'](key);\n return data && hasOwn(data, state.id) && delete data[state.id];\n },\n // `{ WeakMap, WeakSet }.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-weakmap.prototype.has\n // https://tc39.es/ecma262/#sec-weakset.prototype.has\n has: function has(key) {\n var state = getInternalState(this);\n if (!isObject(key)) return false;\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state).has(key);\n return data && hasOwn(data, state.id);\n }\n });\n\n defineBuiltIns(Prototype, IS_MAP ? {\n // `WeakMap.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-weakmap.prototype.get\n get: function get(key) {\n var state = getInternalState(this);\n if (isObject(key)) {\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state).get(key);\n return data ? data[state.id] : undefined;\n }\n },\n // `WeakMap.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-weakmap.prototype.set\n set: function set(key, value) {\n return define(this, key, value);\n }\n } : {\n // `WeakSet.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-weakset.prototype.add\n add: function add(value) {\n return define(this, value, true);\n }\n });\n\n return Constructor;\n }\n};\n","'use strict';\nvar FREEZING = require('../internals/freezing');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar collection = require('../internals/collection');\nvar collectionWeak = require('../internals/collection-weak');\nvar isObject = require('../internals/is-object');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar fails = require('../internals/fails');\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\n\nvar $Object = Object;\n// eslint-disable-next-line es/no-array-isarray -- safe\nvar isArray = Array.isArray;\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar isExtensible = $Object.isExtensible;\n// eslint-disable-next-line es/no-object-isfrozen -- safe\nvar isFrozen = $Object.isFrozen;\n// eslint-disable-next-line es/no-object-issealed -- safe\nvar isSealed = $Object.isSealed;\n// eslint-disable-next-line es/no-object-freeze -- safe\nvar freeze = $Object.freeze;\n// eslint-disable-next-line es/no-object-seal -- safe\nvar seal = $Object.seal;\n\nvar FROZEN = {};\nvar SEALED = {};\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar InternalWeakMap;\n\nvar wrapper = function (init) {\n return function WeakMap() {\n return init(this, arguments.length ? arguments[0] : undefined);\n };\n};\n\n// `WeakMap` constructor\n// https://tc39.es/ecma262/#sec-weakmap-constructor\nvar $WeakMap = collection('WeakMap', wrapper, collectionWeak);\nvar WeakMapPrototype = $WeakMap.prototype;\nvar nativeSet = uncurryThis(WeakMapPrototype.set);\n\n// Chakra Edge bug: adding frozen arrays to WeakMap unfreeze them\nvar hasMSEdgeFreezingBug = function () {\n return FREEZING && fails(function () {\n var frozenArray = freeze([]);\n nativeSet(new $WeakMap(), frozenArray, 1);\n return !isFrozen(frozenArray);\n });\n};\n\n// IE11 WeakMap frozen keys fix\n// We can't use feature detection because it crash some old IE builds\n// https://github.com/zloirock/core-js/issues/485\nif (NATIVE_WEAK_MAP) if (IS_IE11) {\n InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true);\n InternalMetadataModule.enable();\n var nativeDelete = uncurryThis(WeakMapPrototype['delete']);\n var nativeHas = uncurryThis(WeakMapPrototype.has);\n var nativeGet = uncurryThis(WeakMapPrototype.get);\n defineBuiltIns(WeakMapPrototype, {\n 'delete': function (key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeDelete(this, key) || state.frozen['delete'](key);\n } return nativeDelete(this, key);\n },\n has: function has(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas(this, key) || state.frozen.has(key);\n } return nativeHas(this, key);\n },\n get: function get(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas(this, key) ? nativeGet(this, key) : state.frozen.get(key);\n } return nativeGet(this, key);\n },\n set: function set(key, value) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n nativeHas(this, key) ? nativeSet(this, key, value) : state.frozen.set(key, value);\n } else nativeSet(this, key, value);\n return this;\n }\n });\n// Chakra Edge frozen keys fix\n} else if (hasMSEdgeFreezingBug()) {\n defineBuiltIns(WeakMapPrototype, {\n set: function set(key, value) {\n var arrayIntegrityLevel;\n if (isArray(key)) {\n if (isFrozen(key)) arrayIntegrityLevel = FROZEN;\n else if (isSealed(key)) arrayIntegrityLevel = SEALED;\n }\n nativeSet(this, key, value);\n if (arrayIntegrityLevel === FROZEN) freeze(key);\n if (arrayIntegrityLevel === SEALED) seal(key);\n return this;\n }\n });\n}\n","'use strict';\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.weak-map');\nvar path = require('../../internals/path');\n\nmodule.exports = path.WeakMap;\n","export interface Selectable {\n select(): void;\n unselect(): void;\n}\n\ninterface SingleTypeSelectionAccumulatorChanges {\n added: T[];\n deleted: T[];\n previous: T[];\n current: T[];\n}\n\n/**\n * @param prev\n * @param next\n */\nfunction diffSets(prev: ReadonlySet, next: ReadonlySet): Set {\n const diff = new Set();\n for (const item of next) {\n if (!prev.has(item)) {\n diff.add(item);\n }\n }\n return diff;\n}\n\nclass SingleTypeSelectionAccumulator {\n #previousSelection: ReadonlySet = new Set();\n #selection: Set = new Set();\n\n public get size(): number {\n return this.#selection.size;\n }\n\n public add(...items: readonly T[]): void {\n for (const item of items) {\n this.#selection.add(item);\n }\n }\n public delete(...items: readonly T[]): void {\n for (const item of items) {\n this.#selection.delete(item);\n }\n }\n public clear(): void {\n this.#selection.clear();\n }\n\n public getSelection(): T[] {\n return [...this.#selection];\n }\n\n public getChanges(): SingleTypeSelectionAccumulatorChanges {\n return {\n added: [...diffSets(this.#previousSelection, this.#selection)],\n deleted: [...diffSets(this.#selection, this.#previousSelection)],\n previous: [...new Set(this.#previousSelection)],\n current: [...new Set(this.#selection)],\n };\n }\n\n public commit(): SingleTypeSelectionAccumulatorChanges {\n const changes = this.getChanges();\n\n this.#previousSelection = this.#selection;\n this.#selection = new Set(this.#previousSelection);\n\n for (const item of changes.added) {\n item.select();\n }\n for (const item of changes.deleted) {\n item.unselect();\n }\n\n return changes;\n }\n}\n\n// TODO: These should be real types imported from node.ts and edge.ts that don't\n// exist yet.\ninterface Node extends Selectable {\n $: \"node\";\n}\ninterface Edge extends Selectable {\n $: \"edge\";\n}\n\nexport interface SelectionAccumulatorCommitSummary {\n nodes: SingleTypeSelectionAccumulatorChanges;\n edges: SingleTypeSelectionAccumulatorChanges;\n}\n\nexport type SelectionAccumulatorCommitHandler<\n CommitArgs extends readonly any[]\n> = (summary: SelectionAccumulatorCommitSummary, ...rest: CommitArgs) => void;\n\nexport class SelectionAccumulator {\n #nodes = new SingleTypeSelectionAccumulator();\n #edges = new SingleTypeSelectionAccumulator();\n\n readonly #commitHandler: SelectionAccumulatorCommitHandler;\n\n public constructor(\n commitHandler: SelectionAccumulatorCommitHandler = (): void => {}\n ) {\n this.#commitHandler = commitHandler;\n }\n\n public get sizeNodes(): number {\n return this.#nodes.size;\n }\n public get sizeEdges(): number {\n return this.#edges.size;\n }\n\n public getNodes(): Node[] {\n return this.#nodes.getSelection();\n }\n public getEdges(): Edge[] {\n return this.#edges.getSelection();\n }\n\n public addNodes(...nodes: readonly Node[]): void {\n this.#nodes.add(...nodes);\n }\n public addEdges(...edges: readonly Edge[]): void {\n this.#edges.add(...edges);\n }\n\n public deleteNodes(node: Node): void {\n this.#nodes.delete(node);\n }\n public deleteEdges(edge: Edge): void {\n this.#edges.delete(edge);\n }\n\n public clear(): void {\n this.#nodes.clear();\n this.#edges.clear();\n }\n\n public commit(...rest: CommitArgs): SelectionAccumulatorCommitSummary {\n const summary = {\n nodes: this.#nodes.commit(),\n edges: this.#edges.commit(),\n };\n this.#commitHandler(summary, ...rest);\n return summary;\n }\n}\n","import Node from \"./components/Node\";\nimport Edge from \"./components/Edge\";\nimport { SelectionAccumulator } from \"./selection\";\n\nimport { selectiveDeepExtend } from \"vis-util/esnext\";\n\n/**\n * The handler for selections\n */\nclass SelectionHandler {\n /**\n * @param {object} body\n * @param {Canvas} canvas\n */\n constructor(body, canvas) {\n this.body = body;\n this.canvas = canvas;\n // TODO: Consider firing an event on any change to the selection, not\n // only those caused by clicks and taps. It would be easy to implement\n // now and (at least to me) it seems like something that could be\n // quite useful.\n this._selectionAccumulator = new SelectionAccumulator();\n this.hoverObj = { nodes: {}, edges: {} };\n\n this.options = {};\n this.defaultOptions = {\n multiselect: false,\n selectable: true,\n selectConnectedEdges: true,\n hoverConnectedEdges: true,\n };\n Object.assign(this.options, this.defaultOptions);\n\n this.body.emitter.on(\"_dataChanged\", () => {\n this.updateSelection();\n });\n }\n\n /**\n *\n * @param {object} [options]\n */\n setOptions(options) {\n if (options !== undefined) {\n const fields = [\n \"multiselect\",\n \"hoverConnectedEdges\",\n \"selectable\",\n \"selectConnectedEdges\",\n ];\n selectiveDeepExtend(fields, this.options, options);\n }\n }\n\n /**\n * handles the selection part of the tap;\n *\n * @param {{x: number, y: number}} pointer\n * @returns {boolean}\n */\n selectOnPoint(pointer) {\n let selected = false;\n if (this.options.selectable === true) {\n const obj = this.getNodeAt(pointer) || this.getEdgeAt(pointer);\n\n // unselect after getting the objects in order to restore width and height.\n this.unselectAll();\n\n if (obj !== undefined) {\n selected = this.selectObject(obj);\n }\n this.body.emitter.emit(\"_requestRedraw\");\n }\n return selected;\n }\n\n /**\n *\n * @param {{x: number, y: number}} pointer\n * @returns {boolean}\n */\n selectAdditionalOnPoint(pointer) {\n let selectionChanged = false;\n if (this.options.selectable === true) {\n const obj = this.getNodeAt(pointer) || this.getEdgeAt(pointer);\n\n if (obj !== undefined) {\n selectionChanged = true;\n if (obj.isSelected() === true) {\n this.deselectObject(obj);\n } else {\n this.selectObject(obj);\n }\n\n this.body.emitter.emit(\"_requestRedraw\");\n }\n }\n return selectionChanged;\n }\n\n /**\n * Create an object containing the standard fields for an event.\n *\n * @param {Event} event\n * @param {{x: number, y: number}} pointer Object with the x and y screen coordinates of the mouse\n * @returns {{}}\n * @private\n */\n _initBaseEvent(event, pointer) {\n const properties = {};\n\n properties[\"pointer\"] = {\n DOM: { x: pointer.x, y: pointer.y },\n canvas: this.canvas.DOMtoCanvas(pointer),\n };\n properties[\"event\"] = event;\n\n return properties;\n }\n\n /**\n * Generate an event which the user can catch.\n *\n * This adds some extra data to the event with respect to cursor position and\n * selected nodes and edges.\n *\n * @param {string} eventType Name of event to send\n * @param {Event} event\n * @param {{x: number, y: number}} pointer Object with the x and y screen coordinates of the mouse\n * @param {object | undefined} oldSelection If present, selection state before event occured\n * @param {boolean|undefined} [emptySelection=false] Indicate if selection data should be passed\n */\n generateClickEvent(\n eventType,\n event,\n pointer,\n oldSelection,\n emptySelection = false\n ) {\n const properties = this._initBaseEvent(event, pointer);\n\n if (emptySelection === true) {\n properties.nodes = [];\n properties.edges = [];\n } else {\n const tmp = this.getSelection();\n properties.nodes = tmp.nodes;\n properties.edges = tmp.edges;\n }\n\n if (oldSelection !== undefined) {\n properties[\"previousSelection\"] = oldSelection;\n }\n\n if (eventType == \"click\") {\n // For the time being, restrict this functionality to\n // just the click event.\n properties.items = this.getClickedItems(pointer);\n }\n\n if (event.controlEdge !== undefined) {\n properties.controlEdge = event.controlEdge;\n }\n\n this.body.emitter.emit(eventType, properties);\n }\n\n /**\n *\n * @param {object} obj\n * @param {boolean} [highlightEdges=this.options.selectConnectedEdges]\n * @returns {boolean}\n */\n selectObject(obj, highlightEdges = this.options.selectConnectedEdges) {\n if (obj !== undefined) {\n if (obj instanceof Node) {\n if (highlightEdges === true) {\n this._selectionAccumulator.addEdges(...obj.edges);\n }\n this._selectionAccumulator.addNodes(obj);\n } else {\n this._selectionAccumulator.addEdges(obj);\n }\n return true;\n }\n return false;\n }\n\n /**\n *\n * @param {object} obj\n */\n deselectObject(obj) {\n if (obj.isSelected() === true) {\n obj.selected = false;\n this._removeFromSelection(obj);\n }\n }\n\n /**\n * retrieve all nodes overlapping with given object\n *\n * @param {object} object An object with parameters left, top, right, bottom\n * @returns {number[]} An array with id's of the overlapping nodes\n * @private\n */\n _getAllNodesOverlappingWith(object) {\n const overlappingNodes = [];\n const nodes = this.body.nodes;\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const nodeId = this.body.nodeIndices[i];\n if (nodes[nodeId].isOverlappingWith(object)) {\n overlappingNodes.push(nodeId);\n }\n }\n return overlappingNodes;\n }\n\n /**\n * Return a position object in canvasspace from a single point in screenspace\n *\n * @param {{x: number, y: number}} pointer\n * @returns {{left: number, top: number, right: number, bottom: number}}\n * @private\n */\n _pointerToPositionObject(pointer) {\n const canvasPos = this.canvas.DOMtoCanvas(pointer);\n return {\n left: canvasPos.x - 1,\n top: canvasPos.y + 1,\n right: canvasPos.x + 1,\n bottom: canvasPos.y - 1,\n };\n }\n\n /**\n * Get the top node at the passed point (like a click)\n *\n * @param {{x: number, y: number}} pointer\n * @param {boolean} [returnNode=true]\n * @returns {Node | undefined} node\n */\n getNodeAt(pointer, returnNode = true) {\n // we first check if this is an navigation controls element\n const positionObject = this._pointerToPositionObject(pointer);\n const overlappingNodes = this._getAllNodesOverlappingWith(positionObject);\n // if there are overlapping nodes, select the last one, this is the\n // one which is drawn on top of the others\n if (overlappingNodes.length > 0) {\n if (returnNode === true) {\n return this.body.nodes[overlappingNodes[overlappingNodes.length - 1]];\n } else {\n return overlappingNodes[overlappingNodes.length - 1];\n }\n } else {\n return undefined;\n }\n }\n\n /**\n * retrieve all edges overlapping with given object, selector is around center\n *\n * @param {object} object An object with parameters left, top, right, bottom\n * @param {number[]} overlappingEdges An array with id's of the overlapping nodes\n * @private\n */\n _getEdgesOverlappingWith(object, overlappingEdges) {\n const edges = this.body.edges;\n for (let i = 0; i < this.body.edgeIndices.length; i++) {\n const edgeId = this.body.edgeIndices[i];\n if (edges[edgeId].isOverlappingWith(object)) {\n overlappingEdges.push(edgeId);\n }\n }\n }\n\n /**\n * retrieve all nodes overlapping with given object\n *\n * @param {object} object An object with parameters left, top, right, bottom\n * @returns {number[]} An array with id's of the overlapping nodes\n * @private\n */\n _getAllEdgesOverlappingWith(object) {\n const overlappingEdges = [];\n this._getEdgesOverlappingWith(object, overlappingEdges);\n return overlappingEdges;\n }\n\n /**\n * Get the edges nearest to the passed point (like a click)\n *\n * @param {{x: number, y: number}} pointer\n * @param {boolean} [returnEdge=true]\n * @returns {Edge | undefined} node\n */\n getEdgeAt(pointer, returnEdge = true) {\n // Iterate over edges, pick closest within 10\n const canvasPos = this.canvas.DOMtoCanvas(pointer);\n let mindist = 10;\n let overlappingEdge = null;\n const edges = this.body.edges;\n for (let i = 0; i < this.body.edgeIndices.length; i++) {\n const edgeId = this.body.edgeIndices[i];\n const edge = edges[edgeId];\n if (edge.connected) {\n const xFrom = edge.from.x;\n const yFrom = edge.from.y;\n const xTo = edge.to.x;\n const yTo = edge.to.y;\n const dist = edge.edgeType.getDistanceToEdge(\n xFrom,\n yFrom,\n xTo,\n yTo,\n canvasPos.x,\n canvasPos.y\n );\n if (dist < mindist) {\n overlappingEdge = edgeId;\n mindist = dist;\n }\n }\n }\n if (overlappingEdge !== null) {\n if (returnEdge === true) {\n return this.body.edges[overlappingEdge];\n } else {\n return overlappingEdge;\n }\n } else {\n return undefined;\n }\n }\n\n /**\n * Add object to the selection array.\n *\n * @param {object} obj\n * @private\n */\n _addToHover(obj) {\n if (obj instanceof Node) {\n this.hoverObj.nodes[obj.id] = obj;\n } else {\n this.hoverObj.edges[obj.id] = obj;\n }\n }\n\n /**\n * Remove a single option from selection.\n *\n * @param {object} obj\n * @private\n */\n _removeFromSelection(obj) {\n if (obj instanceof Node) {\n this._selectionAccumulator.deleteNodes(obj);\n this._selectionAccumulator.deleteEdges(...obj.edges);\n } else {\n this._selectionAccumulator.deleteEdges(obj);\n }\n }\n\n /**\n * Unselect all nodes and edges.\n */\n unselectAll() {\n this._selectionAccumulator.clear();\n }\n\n /**\n * return the number of selected nodes\n *\n * @returns {number}\n */\n getSelectedNodeCount() {\n return this._selectionAccumulator.sizeNodes;\n }\n\n /**\n * return the number of selected edges\n *\n * @returns {number}\n */\n getSelectedEdgeCount() {\n return this._selectionAccumulator.sizeEdges;\n }\n\n /**\n * select the edges connected to the node that is being selected\n *\n * @param {Node} node\n * @private\n */\n _hoverConnectedEdges(node) {\n for (let i = 0; i < node.edges.length; i++) {\n const edge = node.edges[i];\n edge.hover = true;\n this._addToHover(edge);\n }\n }\n\n /**\n * Remove the highlight from a node or edge, in response to mouse movement\n *\n * @param {Event} event\n * @param {{x: number, y: number}} pointer object with the x and y screen coordinates of the mouse\n * @param {Node|vis.Edge} object\n * @private\n */\n emitBlurEvent(event, pointer, object) {\n const properties = this._initBaseEvent(event, pointer);\n\n if (object.hover === true) {\n object.hover = false;\n if (object instanceof Node) {\n properties.node = object.id;\n this.body.emitter.emit(\"blurNode\", properties);\n } else {\n properties.edge = object.id;\n this.body.emitter.emit(\"blurEdge\", properties);\n }\n }\n }\n\n /**\n * Create the highlight for a node or edge, in response to mouse movement\n *\n * @param {Event} event\n * @param {{x: number, y: number}} pointer object with the x and y screen coordinates of the mouse\n * @param {Node|vis.Edge} object\n * @returns {boolean} hoverChanged\n * @private\n */\n emitHoverEvent(event, pointer, object) {\n const properties = this._initBaseEvent(event, pointer);\n let hoverChanged = false;\n\n if (object.hover === false) {\n object.hover = true;\n this._addToHover(object);\n hoverChanged = true;\n if (object instanceof Node) {\n properties.node = object.id;\n this.body.emitter.emit(\"hoverNode\", properties);\n } else {\n properties.edge = object.id;\n this.body.emitter.emit(\"hoverEdge\", properties);\n }\n }\n\n return hoverChanged;\n }\n\n /**\n * Perform actions in response to a mouse movement.\n *\n * @param {Event} event\n * @param {{x: number, y: number}} pointer | object with the x and y screen coordinates of the mouse\n */\n hoverObject(event, pointer) {\n let object = this.getNodeAt(pointer);\n if (object === undefined) {\n object = this.getEdgeAt(pointer);\n }\n\n let hoverChanged = false;\n // remove all node hover highlights\n for (const nodeId in this.hoverObj.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.hoverObj.nodes, nodeId)) {\n if (\n object === undefined ||\n (object instanceof Node && object.id != nodeId) ||\n object instanceof Edge\n ) {\n this.emitBlurEvent(event, pointer, this.hoverObj.nodes[nodeId]);\n delete this.hoverObj.nodes[nodeId];\n hoverChanged = true;\n }\n }\n }\n\n // removing all edge hover highlights\n for (const edgeId in this.hoverObj.edges) {\n if (Object.prototype.hasOwnProperty.call(this.hoverObj.edges, edgeId)) {\n // if the hover has been changed here it means that the node has been hovered over or off\n // we then do not use the emitBlurEvent method here.\n if (hoverChanged === true) {\n this.hoverObj.edges[edgeId].hover = false;\n delete this.hoverObj.edges[edgeId];\n }\n // if the blur remains the same and the object is undefined (mouse off) or another\n // edge has been hovered, or another node has been hovered we blur the edge.\n else if (\n object === undefined ||\n (object instanceof Edge && object.id != edgeId) ||\n (object instanceof Node && !object.hover)\n ) {\n this.emitBlurEvent(event, pointer, this.hoverObj.edges[edgeId]);\n delete this.hoverObj.edges[edgeId];\n hoverChanged = true;\n }\n }\n }\n\n if (object !== undefined) {\n const hoveredEdgesCount = Object.keys(this.hoverObj.edges).length;\n const hoveredNodesCount = Object.keys(this.hoverObj.nodes).length;\n const newOnlyHoveredEdge =\n object instanceof Edge &&\n hoveredEdgesCount === 0 &&\n hoveredNodesCount === 0;\n const newOnlyHoveredNode =\n object instanceof Node &&\n hoveredEdgesCount === 0 &&\n hoveredNodesCount === 0;\n\n if (hoverChanged || newOnlyHoveredEdge || newOnlyHoveredNode) {\n hoverChanged = this.emitHoverEvent(event, pointer, object);\n }\n\n if (object instanceof Node && this.options.hoverConnectedEdges === true) {\n this._hoverConnectedEdges(object);\n }\n }\n\n if (hoverChanged === true) {\n this.body.emitter.emit(\"_requestRedraw\");\n }\n }\n\n /**\n * Commit the selection changes but don't emit any events.\n */\n commitWithoutEmitting() {\n this._selectionAccumulator.commit();\n }\n\n /**\n * Select and deselect nodes depending current selection change.\n *\n * For changing nodes, select/deselect events are fired.\n *\n * NOTE: For a given edge, if one connecting node is deselected and with the\n * same click the other node is selected, no events for the edge will fire. It\n * was selected and it will remain selected.\n *\n * @param {{x: number, y: number}} pointer - The x and y coordinates of the\n * click, tap, dragend… that triggered this.\n * @param {UIEvent} event - The event that triggered this.\n */\n commitAndEmit(pointer, event) {\n let selected = false;\n\n const selectionChanges = this._selectionAccumulator.commit();\n const previousSelection = {\n nodes: selectionChanges.nodes.previous,\n edges: selectionChanges.edges.previous,\n };\n\n if (selectionChanges.edges.deleted.length > 0) {\n this.generateClickEvent(\n \"deselectEdge\",\n event,\n pointer,\n previousSelection\n );\n selected = true;\n }\n\n if (selectionChanges.nodes.deleted.length > 0) {\n this.generateClickEvent(\n \"deselectNode\",\n event,\n pointer,\n previousSelection\n );\n selected = true;\n }\n\n if (selectionChanges.nodes.added.length > 0) {\n this.generateClickEvent(\"selectNode\", event, pointer);\n selected = true;\n }\n\n if (selectionChanges.edges.added.length > 0) {\n this.generateClickEvent(\"selectEdge\", event, pointer);\n selected = true;\n }\n\n // fire the select event if anything has been selected or deselected\n if (selected === true) {\n // select or unselect\n this.generateClickEvent(\"select\", event, pointer);\n }\n }\n\n /**\n * Retrieve the currently selected node and edge ids.\n *\n * @returns {{nodes: Array., edges: Array.}} Arrays with the\n * ids of the selected nodes and edges.\n */\n getSelection() {\n return {\n nodes: this.getSelectedNodeIds(),\n edges: this.getSelectedEdgeIds(),\n };\n }\n\n /**\n * Retrieve the currently selected nodes.\n *\n * @returns {Array} An array with selected nodes.\n */\n getSelectedNodes() {\n return this._selectionAccumulator.getNodes();\n }\n\n /**\n * Retrieve the currently selected edges.\n *\n * @returns {Array} An array with selected edges.\n */\n getSelectedEdges() {\n return this._selectionAccumulator.getEdges();\n }\n\n /**\n * Retrieve the currently selected node ids.\n *\n * @returns {Array} An array with the ids of the selected nodes.\n */\n getSelectedNodeIds() {\n return this._selectionAccumulator.getNodes().map((node) => node.id);\n }\n\n /**\n * Retrieve the currently selected edge ids.\n *\n * @returns {Array} An array with the ids of the selected edges.\n */\n getSelectedEdgeIds() {\n return this._selectionAccumulator.getEdges().map((edge) => edge.id);\n }\n\n /**\n * Updates the current selection\n *\n * @param {{nodes: Array., edges: Array.}} selection\n * @param {object} options Options\n */\n setSelection(selection, options = {}) {\n if (!selection || (!selection.nodes && !selection.edges)) {\n throw new TypeError(\n \"Selection must be an object with nodes and/or edges properties\"\n );\n }\n\n // first unselect any selected node, if option is true or undefined\n if (options.unselectAll || options.unselectAll === undefined) {\n this.unselectAll();\n }\n if (selection.nodes) {\n for (const id of selection.nodes) {\n const node = this.body.nodes[id];\n if (!node) {\n throw new RangeError('Node with id \"' + id + '\" not found');\n }\n // don't select edges with it\n this.selectObject(node, options.highlightEdges);\n }\n }\n\n if (selection.edges) {\n for (const id of selection.edges) {\n const edge = this.body.edges[id];\n if (!edge) {\n throw new RangeError('Edge with id \"' + id + '\" not found');\n }\n this.selectObject(edge);\n }\n }\n this.body.emitter.emit(\"_requestRedraw\");\n this._selectionAccumulator.commit();\n }\n\n /**\n * select zero or more nodes with the option to highlight edges\n *\n * @param {number[] | string[]} selection An array with the ids of the\n * selected nodes.\n * @param {boolean} [highlightEdges]\n */\n selectNodes(selection, highlightEdges = true) {\n if (!selection || selection.length === undefined)\n throw \"Selection must be an array with ids\";\n\n this.setSelection({ nodes: selection }, { highlightEdges: highlightEdges });\n }\n\n /**\n * select zero or more edges\n *\n * @param {number[] | string[]} selection An array with the ids of the\n * selected nodes.\n */\n selectEdges(selection) {\n if (!selection || selection.length === undefined)\n throw \"Selection must be an array with ids\";\n\n this.setSelection({ edges: selection });\n }\n\n /**\n * Validate the selection: remove ids of nodes which no longer exist\n *\n * @private\n */\n updateSelection() {\n for (const node in this._selectionAccumulator.getNodes()) {\n if (!Object.prototype.hasOwnProperty.call(this.body.nodes, node.id)) {\n this._selectionAccumulator.deleteNodes(node);\n }\n }\n for (const edge in this._selectionAccumulator.getEdges()) {\n if (!Object.prototype.hasOwnProperty.call(this.body.edges, edge.id)) {\n this._selectionAccumulator.deleteEdges(edge);\n }\n }\n }\n\n /**\n * Determine all the visual elements clicked which are on the given point.\n *\n * All elements are returned; this includes nodes, edges and their labels.\n * The order returned is from highest to lowest, i.e. element 0 of the return\n * value is the topmost item clicked on.\n *\n * The return value consists of an array of the following possible elements:\n *\n * - `{nodeId:number}` - node with given id clicked on\n * - `{nodeId:number, labelId:0}` - label of node with given id clicked on\n * - `{edgeId:number}` - edge with given id clicked on\n * - `{edge:number, labelId:0}` - label of edge with given id clicked on\n *\n * ## NOTES\n *\n * - Currently, there is only one label associated with a node or an edge,\n * but this is expected to change somewhere in the future.\n * - Since there is no z-indexing yet, it is not really possible to set the nodes and\n * edges in the correct order. For the time being, nodes come first.\n *\n * @param {point} pointer mouse position in screen coordinates\n * @returns {Array.}\n * @private\n */\n getClickedItems(pointer) {\n const point = this.canvas.DOMtoCanvas(pointer);\n const items = [];\n\n // Note reverse order; we want the topmost clicked items to be first in the array\n // Also note that selected nodes are disregarded here; these normally display on top\n const nodeIndices = this.body.nodeIndices;\n const nodes = this.body.nodes;\n for (let i = nodeIndices.length - 1; i >= 0; i--) {\n const node = nodes[nodeIndices[i]];\n const ret = node.getItemsOnPoint(point);\n items.push.apply(items, ret); // Append the return value to the running list.\n }\n\n const edgeIndices = this.body.edgeIndices;\n const edges = this.body.edges;\n for (let i = edgeIndices.length - 1; i >= 0; i--) {\n const edge = edges[edgeIndices[i]];\n const ret = edge.getItemsOnPoint(point);\n items.push.apply(items, ret); // Append the return value to the running list.\n }\n\n return items;\n }\n}\n\nexport default SelectionHandler;\n","/**\n * Helper classes for LayoutEngine.\n *\n * Strategy pattern for usage of direction methods for hierarchical layouts.\n */\n\n/**\n * Interface definition for direction strategy classes.\n *\n * This class describes the interface for the Strategy\n * pattern classes used to differentiate horizontal and vertical\n * direction of hierarchical results.\n *\n * For a given direction, one coordinate will be 'fixed', meaning that it is\n * determined by level.\n * The other coordinate is 'unfixed', meaning that the nodes on a given level\n * can still move along that coordinate. So:\n *\n * - `vertical` layout: `x` unfixed, `y` fixed per level\n * - `horizontal` layout: `x` fixed per level, `y` unfixed\n *\n * The local methods are stubs and should be regarded as abstract.\n * Derived classes **must** implement all the methods themselves.\n *\n * @private\n */\nclass DirectionInterface {\n /**\n * @ignore\n */\n abstract() {\n throw new Error(\"Can't instantiate abstract class!\");\n }\n\n /**\n * This is a dummy call which is used to suppress the jsdoc errors of type:\n *\n * \"'param' is assigned a value but never used\"\n *\n * @ignore\n */\n fake_use() {\n // Do nothing special\n }\n\n /**\n * Type to use to translate dynamic curves to, in the case of hierarchical layout.\n * Dynamic curves do not work for these.\n *\n * The value should be perpendicular to the actual direction of the layout.\n *\n * @returns {string} Direction, either 'vertical' or 'horizontal'\n */\n curveType() {\n return this.abstract();\n }\n\n /**\n * Return the value of the coordinate that is not fixed for this direction.\n *\n * @param {Node} node The node to read\n * @returns {number} Value of the unfixed coordinate\n */\n getPosition(node) {\n this.fake_use(node);\n return this.abstract();\n }\n\n /**\n * Set the value of the coordinate that is not fixed for this direction.\n *\n * @param {Node} node The node to adjust\n * @param {number} position\n * @param {number} [level] if specified, the hierarchy level that this node should be fixed to\n */\n setPosition(node, position, level = undefined) {\n this.fake_use(node, position, level);\n this.abstract();\n }\n\n /**\n * Get the width of a tree.\n *\n * A `tree` here is a subset of nodes within the network which are not connected to other nodes,\n * only among themselves. In essence, it is a sub-network.\n *\n * @param {number} index The index number of a tree\n * @returns {number} the width of a tree in the view coordinates\n */\n getTreeSize(index) {\n this.fake_use(index);\n return this.abstract();\n }\n\n /**\n * Sort array of nodes on the unfixed coordinates.\n *\n * Note:** chrome has non-stable sorting implementation, which\n * has a tendency to change the order of the array items,\n * even if the custom sort function returns 0.\n *\n * For this reason, an external sort implementation is used,\n * which has the added benefit of being faster than the standard\n * platforms implementation. This has been verified on `node.js`,\n * `firefox` and `chrome` (all linux).\n *\n * @param {Array.} nodeArray array of nodes to sort\n */\n sort(nodeArray) {\n this.fake_use(nodeArray);\n this.abstract();\n }\n\n /**\n * Assign the fixed coordinate of the node to the given level\n *\n * @param {Node} node The node to adjust\n * @param {number} level The level to fix to\n */\n fix(node, level) {\n this.fake_use(node, level);\n this.abstract();\n }\n\n /**\n * Add an offset to the unfixed coordinate of the given node.\n *\n * @param {NodeId} nodeId Id of the node to adjust\n * @param {number} diff Offset to add to the unfixed coordinate\n */\n shift(nodeId, diff) {\n this.fake_use(nodeId, diff);\n this.abstract();\n }\n}\n\n/**\n * Vertical Strategy\n *\n * Coordinate `y` is fixed on levels, coordinate `x` is unfixed.\n *\n * @augments DirectionInterface\n * @private\n */\nclass VerticalStrategy extends DirectionInterface {\n /**\n * Constructor\n *\n * @param {object} layout reference to the parent LayoutEngine instance.\n */\n constructor(layout) {\n super();\n this.layout = layout;\n }\n\n /** @inheritDoc */\n curveType() {\n return \"horizontal\";\n }\n\n /** @inheritDoc */\n getPosition(node) {\n return node.x;\n }\n\n /** @inheritDoc */\n setPosition(node, position, level = undefined) {\n if (level !== undefined) {\n this.layout.hierarchical.addToOrdering(node, level);\n }\n node.x = position;\n }\n\n /** @inheritDoc */\n getTreeSize(index) {\n const res = this.layout.hierarchical.getTreeSize(\n this.layout.body.nodes,\n index\n );\n return { min: res.min_x, max: res.max_x };\n }\n\n /** @inheritDoc */\n sort(nodeArray) {\n nodeArray.sort(function (a, b) {\n return a.x - b.x;\n });\n }\n\n /** @inheritDoc */\n fix(node, level) {\n node.y = this.layout.options.hierarchical.levelSeparation * level;\n node.options.fixed.y = true;\n }\n\n /** @inheritDoc */\n shift(nodeId, diff) {\n this.layout.body.nodes[nodeId].x += diff;\n }\n}\n\n/**\n * Horizontal Strategy\n *\n * Coordinate `x` is fixed on levels, coordinate `y` is unfixed.\n *\n * @augments DirectionInterface\n * @private\n */\nclass HorizontalStrategy extends DirectionInterface {\n /**\n * Constructor\n *\n * @param {object} layout reference to the parent LayoutEngine instance.\n */\n constructor(layout) {\n super();\n this.layout = layout;\n }\n\n /** @inheritDoc */\n curveType() {\n return \"vertical\";\n }\n\n /** @inheritDoc */\n getPosition(node) {\n return node.y;\n }\n\n /** @inheritDoc */\n setPosition(node, position, level = undefined) {\n if (level !== undefined) {\n this.layout.hierarchical.addToOrdering(node, level);\n }\n node.y = position;\n }\n\n /** @inheritDoc */\n getTreeSize(index) {\n const res = this.layout.hierarchical.getTreeSize(\n this.layout.body.nodes,\n index\n );\n return { min: res.min_y, max: res.max_y };\n }\n\n /** @inheritDoc */\n sort(nodeArray) {\n nodeArray.sort(function (a, b) {\n return a.y - b.y;\n });\n }\n\n /** @inheritDoc */\n fix(node, level) {\n node.x = this.layout.options.hierarchical.levelSeparation * level;\n node.options.fixed.x = true;\n }\n\n /** @inheritDoc */\n shift(nodeId, diff) {\n this.layout.body.nodes[nodeId].y += diff;\n }\n}\n\nexport { HorizontalStrategy, VerticalStrategy };\n","'use strict';\nvar $ = require('../internals/export');\nvar $every = require('../internals/array-iteration').every;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('every');\n\n// `Array.prototype.every` method\n// https://tc39.es/ecma262/#sec-array.prototype.every\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, {\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.every');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').every;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/every');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.every;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.every) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/every');\n\nmodule.exports = parent;\n","type Levels = Record;\ntype Id = string | number;\ninterface Edge {\n connected: boolean;\n from: Node;\n fromId: Id;\n to: Node;\n toId: Id;\n}\ninterface Node {\n id: Id;\n edges: Edge[];\n}\n\n/**\n * Try to assign levels to nodes according to their positions in the cyclic “hierarchy”.\n *\n * @param nodes - Visible nodes of the graph.\n * @param levels - If present levels will be added to it, if not a new object will be created.\n * @returns Populated node levels.\n */\nfunction fillLevelsByDirectionCyclic(\n nodes: Map,\n levels: Levels\n): Levels {\n const edges = new Set();\n nodes.forEach((node): void => {\n node.edges.forEach((edge): void => {\n if (edge.connected) {\n edges.add(edge);\n }\n });\n });\n\n edges.forEach((edge): void => {\n const fromId = edge.from.id;\n const toId = edge.to.id;\n\n if (levels[fromId] == null) {\n levels[fromId] = 0;\n }\n\n if (levels[toId] == null || levels[fromId] >= levels[toId]) {\n levels[toId] = levels[fromId] + 1;\n }\n });\n\n return levels;\n}\n\n/**\n * Assign levels to nodes according to their positions in the hierarchy. Leaves will be lined up at the bottom and all other nodes as close to their children as possible.\n *\n * @param nodes - Visible nodes of the graph.\n * @returns Populated node levels.\n */\nexport function fillLevelsByDirectionLeaves(nodes: Map): Levels {\n return fillLevelsByDirection(\n // Pick only leaves (nodes without children).\n (node): boolean =>\n node.edges\n // Take only visible nodes into account.\n .filter((edge): boolean => nodes.has(edge.toId))\n // Check that all edges lead to this node (leaf).\n .every((edge): boolean => edge.to === node),\n // Use the lowest level.\n (newLevel, oldLevel): boolean => oldLevel > newLevel,\n // Go against the direction of the edges.\n \"from\",\n nodes\n );\n}\n\n/**\n * Assign levels to nodes according to their positions in the hierarchy. Roots will be lined up at the top and all nodes as close to their parents as possible.\n *\n * @param nodes - Visible nodes of the graph.\n * @returns Populated node levels.\n */\nexport function fillLevelsByDirectionRoots(nodes: Map): Levels {\n return fillLevelsByDirection(\n // Pick only roots (nodes without parents).\n (node): boolean =>\n node.edges\n // Take only visible nodes into account.\n .filter((edge): boolean => nodes.has(edge.toId))\n // Check that all edges lead from this node (root).\n .every((edge): boolean => edge.from === node),\n // Use the highest level.\n (newLevel, oldLevel): boolean => oldLevel < newLevel,\n // Go in the direction of the edges.\n \"to\",\n nodes\n );\n}\n\n/**\n * Assign levels to nodes according to their positions in the hierarchy.\n *\n * @param isEntryNode - Checks and return true if the graph should be traversed from this node.\n * @param shouldLevelBeReplaced - Checks and returns true if the level of given node should be updated to the new value.\n * @param direction - Wheter the graph should be traversed in the direction of the edges `\"to\"` or in the other way `\"from\"`.\n * @param nodes - Visible nodes of the graph.\n * @returns Populated node levels.\n */\nfunction fillLevelsByDirection(\n isEntryNode: (node: Node) => boolean,\n shouldLevelBeReplaced: (newLevel: number, oldLevel: number) => boolean,\n direction: \"to\" | \"from\",\n nodes: Map\n): Levels {\n const levels = Object.create(null);\n\n // If acyclic, the graph can be walked through with (most likely way) fewer\n // steps than the number bellow. The exact value isn't too important as long\n // as it's quick to compute (doesn't impact acyclic graphs too much), is\n // higher than the number of steps actually needed (doesn't cut off before\n // acyclic graph is walked through) and prevents infinite loops (cuts off for\n // cyclic graphs).\n const limit = [...nodes.values()].reduce(\n (acc, node): number => acc + 1 + node.edges.length,\n 0\n );\n\n const edgeIdProp: \"fromId\" | \"toId\" = (direction + \"Id\") as \"fromId\" | \"toId\";\n const newLevelDiff = direction === \"to\" ? 1 : -1;\n\n for (const [entryNodeId, entryNode] of nodes) {\n if (\n // Skip if the node is not visible.\n !nodes.has(entryNodeId) ||\n // Skip if the node is not an entry node.\n !isEntryNode(entryNode)\n ) {\n continue;\n }\n\n // Line up all the entry nodes on level 0.\n levels[entryNodeId] = 0;\n\n const stack: Node[] = [entryNode];\n let done = 0;\n let node: Node | undefined;\n while ((node = stack.pop())) {\n if (!nodes.has(entryNodeId)) {\n // Skip if the node is not visible.\n continue;\n }\n\n const newLevel = levels[node.id] + newLevelDiff;\n\n node.edges\n .filter(\n (edge): boolean =>\n // Ignore disconnected edges.\n edge.connected &&\n // Ignore circular edges.\n edge.to !== edge.from &&\n // Ignore edges leading to the node that's currently being processed.\n edge[direction] !== node &&\n // Ignore edges connecting to an invisible node.\n nodes.has(edge.toId) &&\n // Ignore edges connecting from an invisible node.\n nodes.has(edge.fromId)\n )\n .forEach((edge): void => {\n const targetNodeId = edge[edgeIdProp];\n const oldLevel = levels[targetNodeId];\n\n if (oldLevel == null || shouldLevelBeReplaced(newLevel, oldLevel)) {\n levels[targetNodeId] = newLevel;\n stack.push(edge[direction]);\n }\n });\n\n if (done > limit) {\n // This would run forever on a cyclic graph.\n return fillLevelsByDirectionCyclic(nodes, levels);\n } else {\n ++done;\n }\n }\n }\n\n return levels;\n}\n","/**\n * There's a mix-up with terms in the code. Following are the formal definitions:\n *\n * tree - a strict hierarchical network, i.e. every node has at most one parent\n * forest - a collection of trees. These distinct trees are thus not connected.\n *\n * So:\n * - in a network that is not a tree, there exist nodes with multiple parents.\n * - a network consisting of unconnected sub-networks, of which at least one\n * is not a tree, is not a forest.\n *\n * In the code, the definitions are:\n *\n * tree - any disconnected sub-network, strict hierarchical or not.\n * forest - a bunch of these sub-networks\n *\n * The difference between tree and not-tree is important in the code, notably within\n * to the block-shifting algorithm. The algorithm assumes formal trees and fails\n * for not-trees, often in a spectacular manner (search for 'exploding network' in the issues).\n *\n * In order to distinguish the definitions in the following code, the adjective 'formal' is\n * used. If 'formal' is absent, you must assume the non-formal definition.\n *\n * ----------------------------------------------------------------------------------\n * NOTES\n * =====\n *\n * A hierarchical layout is a different thing from a hierarchical network.\n * The layout is a way to arrange the nodes in the view; this can be done\n * on non-hierarchical networks as well. The converse is also possible.\n */\n\"use strict\";\nimport {\n Alea,\n deepExtend,\n forEach,\n mergeOptions,\n selectiveDeepExtend,\n} from \"vis-util/esnext\";\nimport NetworkUtil from \"../NetworkUtil\";\nimport {\n HorizontalStrategy,\n VerticalStrategy,\n} from \"./components/DirectionStrategy.js\";\nimport {\n fillLevelsByDirectionLeaves,\n fillLevelsByDirectionRoots,\n} from \"./layout-engine\";\n\n/**\n * Container for derived data on current network, relating to hierarchy.\n *\n * @private\n */\nclass HierarchicalStatus {\n /**\n * @ignore\n */\n constructor() {\n this.childrenReference = {}; // child id's per node id\n this.parentReference = {}; // parent id's per node id\n this.trees = {}; // tree id per node id; i.e. to which tree does given node id belong\n\n this.distributionOrdering = {}; // The nodes per level, in the display order\n this.levels = {}; // hierarchy level per node id\n this.distributionIndex = {}; // The position of the node in the level sorting order, per node id.\n\n this.isTree = false; // True if current network is a formal tree\n this.treeIndex = -1; // Highest tree id in current network.\n }\n\n /**\n * Add the relation between given nodes to the current state.\n *\n * @param {Node.id} parentNodeId\n * @param {Node.id} childNodeId\n */\n addRelation(parentNodeId, childNodeId) {\n if (this.childrenReference[parentNodeId] === undefined) {\n this.childrenReference[parentNodeId] = [];\n }\n this.childrenReference[parentNodeId].push(childNodeId);\n\n if (this.parentReference[childNodeId] === undefined) {\n this.parentReference[childNodeId] = [];\n }\n this.parentReference[childNodeId].push(parentNodeId);\n }\n\n /**\n * Check if the current state is for a formal tree or formal forest.\n *\n * This is the case if every node has at most one parent.\n *\n * Pre: parentReference init'ed properly for current network\n */\n checkIfTree() {\n for (const i in this.parentReference) {\n if (this.parentReference[i].length > 1) {\n this.isTree = false;\n return;\n }\n }\n\n this.isTree = true;\n }\n\n /**\n * Return the number of separate trees in the current network.\n *\n * @returns {number}\n */\n numTrees() {\n return this.treeIndex + 1; // This assumes the indexes are assigned consecitively\n }\n\n /**\n * Assign a tree id to a node\n *\n * @param {Node} node\n * @param {string|number} treeId\n */\n setTreeIndex(node, treeId) {\n if (treeId === undefined) return; // Don't bother\n\n if (this.trees[node.id] === undefined) {\n this.trees[node.id] = treeId;\n this.treeIndex = Math.max(treeId, this.treeIndex);\n }\n }\n\n /**\n * Ensure level for given id is defined.\n *\n * Sets level to zero for given node id if not already present\n *\n * @param {Node.id} nodeId\n */\n ensureLevel(nodeId) {\n if (this.levels[nodeId] === undefined) {\n this.levels[nodeId] = 0;\n }\n }\n\n /**\n * get the maximum level of a branch.\n *\n * TODO: Never entered; find a test case to test this!\n *\n * @param {Node.id} nodeId\n * @returns {number}\n */\n getMaxLevel(nodeId) {\n const accumulator = {};\n\n const _getMaxLevel = (nodeId) => {\n if (accumulator[nodeId] !== undefined) {\n return accumulator[nodeId];\n }\n let level = this.levels[nodeId];\n if (this.childrenReference[nodeId]) {\n const children = this.childrenReference[nodeId];\n if (children.length > 0) {\n for (let i = 0; i < children.length; i++) {\n level = Math.max(level, _getMaxLevel(children[i]));\n }\n }\n }\n accumulator[nodeId] = level;\n return level;\n };\n\n return _getMaxLevel(nodeId);\n }\n\n /**\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n */\n levelDownstream(nodeA, nodeB) {\n if (this.levels[nodeB.id] === undefined) {\n // set initial level\n if (this.levels[nodeA.id] === undefined) {\n this.levels[nodeA.id] = 0;\n }\n // set level\n this.levels[nodeB.id] = this.levels[nodeA.id] + 1;\n }\n }\n\n /**\n * Small util method to set the minimum levels of the nodes to zero.\n *\n * @param {Array.} nodes\n */\n setMinLevelToZero(nodes) {\n let minLevel = 1e9;\n // get the minimum level\n for (const nodeId in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, nodeId)) {\n if (this.levels[nodeId] !== undefined) {\n minLevel = Math.min(this.levels[nodeId], minLevel);\n }\n }\n }\n\n // subtract the minimum from the set so we have a range starting from 0\n for (const nodeId in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, nodeId)) {\n if (this.levels[nodeId] !== undefined) {\n this.levels[nodeId] -= minLevel;\n }\n }\n }\n }\n\n /**\n * Get the min and max xy-coordinates of a given tree\n *\n * @param {Array.} nodes\n * @param {number} index\n * @returns {{min_x: number, max_x: number, min_y: number, max_y: number}}\n */\n getTreeSize(nodes, index) {\n let min_x = 1e9;\n let max_x = -1e9;\n let min_y = 1e9;\n let max_y = -1e9;\n\n for (const nodeId in this.trees) {\n if (Object.prototype.hasOwnProperty.call(this.trees, nodeId)) {\n if (this.trees[nodeId] === index) {\n const node = nodes[nodeId];\n min_x = Math.min(node.x, min_x);\n max_x = Math.max(node.x, max_x);\n min_y = Math.min(node.y, min_y);\n max_y = Math.max(node.y, max_y);\n }\n }\n }\n\n return {\n min_x: min_x,\n max_x: max_x,\n min_y: min_y,\n max_y: max_y,\n };\n }\n\n /**\n * Check if two nodes have the same parent(s)\n *\n * @param {Node} node1\n * @param {Node} node2\n * @returns {boolean} true if the two nodes have a same ancestor node, false otherwise\n */\n hasSameParent(node1, node2) {\n const parents1 = this.parentReference[node1.id];\n const parents2 = this.parentReference[node2.id];\n if (parents1 === undefined || parents2 === undefined) {\n return false;\n }\n\n for (let i = 0; i < parents1.length; i++) {\n for (let j = 0; j < parents2.length; j++) {\n if (parents1[i] == parents2[j]) {\n return true;\n }\n }\n }\n return false;\n }\n\n /**\n * Check if two nodes are in the same tree.\n *\n * @param {Node} node1\n * @param {Node} node2\n * @returns {boolean} true if this is so, false otherwise\n */\n inSameSubNetwork(node1, node2) {\n return this.trees[node1.id] === this.trees[node2.id];\n }\n\n /**\n * Get a list of the distinct levels in the current network\n *\n * @returns {Array}\n */\n getLevels() {\n return Object.keys(this.distributionOrdering);\n }\n\n /**\n * Add a node to the ordering per level\n *\n * @param {Node} node\n * @param {number} level\n */\n addToOrdering(node, level) {\n if (this.distributionOrdering[level] === undefined) {\n this.distributionOrdering[level] = [];\n }\n\n let isPresent = false;\n const curLevel = this.distributionOrdering[level];\n for (const n in curLevel) {\n //if (curLevel[n].id === node.id) {\n if (curLevel[n] === node) {\n isPresent = true;\n break;\n }\n }\n\n if (!isPresent) {\n this.distributionOrdering[level].push(node);\n this.distributionIndex[node.id] =\n this.distributionOrdering[level].length - 1;\n }\n }\n}\n\n/**\n * The Layout Engine\n */\nclass LayoutEngine {\n /**\n * @param {object} body\n */\n constructor(body) {\n this.body = body;\n\n // Make sure there always is some RNG because the setOptions method won't\n // set it unless there's a seed for it.\n this._resetRNG(Math.random() + \":\" + Date.now());\n\n this.setPhysics = false;\n this.options = {};\n this.optionsBackup = { physics: {} };\n\n this.defaultOptions = {\n randomSeed: undefined,\n improvedLayout: true,\n clusterThreshold: 150,\n hierarchical: {\n enabled: false,\n levelSeparation: 150,\n nodeSpacing: 100,\n treeSpacing: 200,\n blockShifting: true,\n edgeMinimization: true,\n parentCentralization: true,\n direction: \"UD\", // UD, DU, LR, RL\n sortMethod: \"hubsize\", // hubsize, directed\n },\n };\n Object.assign(this.options, this.defaultOptions);\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n this.body.emitter.on(\"_dataChanged\", () => {\n this.setupHierarchicalLayout();\n });\n this.body.emitter.on(\"_dataLoaded\", () => {\n this.layoutNetwork();\n });\n this.body.emitter.on(\"_resetHierarchicalLayout\", () => {\n this.setupHierarchicalLayout();\n });\n this.body.emitter.on(\"_adjustEdgesForHierarchicalLayout\", () => {\n if (this.options.hierarchical.enabled !== true) {\n return;\n }\n // get the type of static smooth curve in case it is required\n const type = this.direction.curveType();\n\n // force all edges into static smooth curves.\n this.body.emitter.emit(\"_forceDisableDynamicCurves\", type, false);\n });\n }\n\n /**\n *\n * @param {object} options\n * @param {object} allOptions\n * @returns {object}\n */\n setOptions(options, allOptions) {\n if (options !== undefined) {\n const hierarchical = this.options.hierarchical;\n const prevHierarchicalState = hierarchical.enabled;\n selectiveDeepExtend(\n [\"randomSeed\", \"improvedLayout\", \"clusterThreshold\"],\n this.options,\n options\n );\n mergeOptions(this.options, options, \"hierarchical\");\n\n if (options.randomSeed !== undefined) {\n this._resetRNG(options.randomSeed);\n }\n\n if (hierarchical.enabled === true) {\n if (prevHierarchicalState === true) {\n // refresh the overridden options for nodes and edges.\n this.body.emitter.emit(\"refresh\", true);\n }\n\n // make sure the level separation is the right way up\n if (\n hierarchical.direction === \"RL\" ||\n hierarchical.direction === \"DU\"\n ) {\n if (hierarchical.levelSeparation > 0) {\n hierarchical.levelSeparation *= -1;\n }\n } else {\n if (hierarchical.levelSeparation < 0) {\n hierarchical.levelSeparation *= -1;\n }\n }\n\n this.setDirectionStrategy();\n\n this.body.emitter.emit(\"_resetHierarchicalLayout\");\n // because the hierarchical system needs it's own physics and smooth curve settings,\n // we adapt the other options if needed.\n return this.adaptAllOptionsForHierarchicalLayout(allOptions);\n } else {\n if (prevHierarchicalState === true) {\n // refresh the overridden options for nodes and edges.\n this.body.emitter.emit(\"refresh\");\n return deepExtend(allOptions, this.optionsBackup);\n }\n }\n }\n return allOptions;\n }\n\n /**\n * Reset the random number generator with given seed.\n *\n * @param {any} seed - The seed that will be forwarded the the RNG.\n */\n _resetRNG(seed) {\n this.initialRandomSeed = seed;\n this._rng = Alea(this.initialRandomSeed);\n }\n\n /**\n *\n * @param {object} allOptions\n * @returns {object}\n */\n adaptAllOptionsForHierarchicalLayout(allOptions) {\n if (this.options.hierarchical.enabled === true) {\n const backupPhysics = this.optionsBackup.physics;\n\n // set the physics\n if (allOptions.physics === undefined || allOptions.physics === true) {\n allOptions.physics = {\n enabled:\n backupPhysics.enabled === undefined ? true : backupPhysics.enabled,\n solver: \"hierarchicalRepulsion\",\n };\n backupPhysics.enabled =\n backupPhysics.enabled === undefined ? true : backupPhysics.enabled;\n backupPhysics.solver = backupPhysics.solver || \"barnesHut\";\n } else if (typeof allOptions.physics === \"object\") {\n backupPhysics.enabled =\n allOptions.physics.enabled === undefined\n ? true\n : allOptions.physics.enabled;\n backupPhysics.solver = allOptions.physics.solver || \"barnesHut\";\n allOptions.physics.solver = \"hierarchicalRepulsion\";\n } else if (allOptions.physics !== false) {\n backupPhysics.solver = \"barnesHut\";\n allOptions.physics = { solver: \"hierarchicalRepulsion\" };\n }\n\n // get the type of static smooth curve in case it is required\n let type = this.direction.curveType();\n\n // disable smooth curves if nothing is defined. If smooth curves have been turned on,\n // turn them into static smooth curves.\n if (allOptions.edges === undefined) {\n this.optionsBackup.edges = {\n smooth: { enabled: true, type: \"dynamic\" },\n };\n allOptions.edges = { smooth: false };\n } else if (allOptions.edges.smooth === undefined) {\n this.optionsBackup.edges = {\n smooth: { enabled: true, type: \"dynamic\" },\n };\n allOptions.edges.smooth = false;\n } else {\n if (typeof allOptions.edges.smooth === \"boolean\") {\n this.optionsBackup.edges = { smooth: allOptions.edges.smooth };\n allOptions.edges.smooth = {\n enabled: allOptions.edges.smooth,\n type: type,\n };\n } else {\n const smooth = allOptions.edges.smooth;\n\n // allow custom types except for dynamic\n if (smooth.type !== undefined && smooth.type !== \"dynamic\") {\n type = smooth.type;\n }\n\n // TODO: this is options merging; see if the standard routines can be used here.\n this.optionsBackup.edges = {\n smooth: {\n enabled: smooth.enabled === undefined ? true : smooth.enabled,\n type: smooth.type === undefined ? \"dynamic\" : smooth.type,\n roundness:\n smooth.roundness === undefined ? 0.5 : smooth.roundness,\n forceDirection:\n smooth.forceDirection === undefined\n ? false\n : smooth.forceDirection,\n },\n };\n\n // NOTE: Copying an object to self; this is basically setting defaults for undefined variables\n allOptions.edges.smooth = {\n enabled: smooth.enabled === undefined ? true : smooth.enabled,\n type: type,\n roundness: smooth.roundness === undefined ? 0.5 : smooth.roundness,\n forceDirection:\n smooth.forceDirection === undefined\n ? false\n : smooth.forceDirection,\n };\n }\n }\n\n // Force all edges into static smooth curves.\n // Only applies to edges that do not use the global options for smooth.\n this.body.emitter.emit(\"_forceDisableDynamicCurves\", type);\n }\n\n return allOptions;\n }\n\n /**\n *\n * @param {Array.} nodesArray\n */\n positionInitially(nodesArray) {\n if (this.options.hierarchical.enabled !== true) {\n this._resetRNG(this.initialRandomSeed);\n const radius = nodesArray.length + 50;\n for (let i = 0; i < nodesArray.length; i++) {\n const node = nodesArray[i];\n const angle = 2 * Math.PI * this._rng();\n if (node.x === undefined) {\n node.x = radius * Math.cos(angle);\n }\n if (node.y === undefined) {\n node.y = radius * Math.sin(angle);\n }\n }\n }\n }\n\n /**\n * Use Kamada Kawai to position nodes. This is quite a heavy algorithm so if there are a lot of nodes we\n * cluster them first to reduce the amount.\n */\n layoutNetwork() {\n if (\n this.options.hierarchical.enabled !== true &&\n this.options.improvedLayout === true\n ) {\n const indices = this.body.nodeIndices;\n\n // first check if we should Kamada Kawai to layout. The threshold is if less than half of the visible\n // nodes have predefined positions we use this.\n let positionDefined = 0;\n for (let i = 0; i < indices.length; i++) {\n const node = this.body.nodes[indices[i]];\n if (node.predefinedPosition === true) {\n positionDefined += 1;\n }\n }\n\n // if less than half of the nodes have a predefined position we continue\n if (positionDefined < 0.5 * indices.length) {\n const MAX_LEVELS = 10;\n let level = 0;\n const clusterThreshold = this.options.clusterThreshold;\n\n //\n // Define the options for the hidden cluster nodes\n // These options don't propagate outside the clustering phase.\n //\n // Some options are explicitly disabled, because they may be set in group or default node options.\n // The clusters are never displayed, so most explicit settings here serve as performance optimizations.\n //\n // The explicit setting of 'shape' is to avoid `shape: 'image'`; images are not passed to the hidden\n // cluster nodes, leading to an exception on creation.\n //\n // All settings here are performance related, except when noted otherwise.\n //\n const clusterOptions = {\n clusterNodeProperties: {\n shape: \"ellipse\", // Bugfix: avoid type 'image', no images supplied\n label: \"\", // avoid label handling\n group: \"\", // avoid group handling\n font: { multi: false }, // avoid font propagation\n },\n clusterEdgeProperties: {\n label: \"\", // avoid label handling\n font: { multi: false }, // avoid font propagation\n smooth: {\n enabled: false, // avoid drawing penalty for complex edges\n },\n },\n };\n\n // if there are a lot of nodes, we cluster before we run the algorithm.\n // NOTE: this part fails to find clusters for large scale-free networks, which should\n // be easily clusterable.\n // TODO: examine why this is so\n if (indices.length > clusterThreshold) {\n const startLength = indices.length;\n while (indices.length > clusterThreshold && level <= MAX_LEVELS) {\n //console.time(\"clustering\")\n level += 1;\n const before = indices.length;\n // if there are many nodes we do a hubsize cluster\n if (level % 3 === 0) {\n this.body.modules.clustering.clusterBridges(clusterOptions);\n } else {\n this.body.modules.clustering.clusterOutliers(clusterOptions);\n }\n const after = indices.length;\n if (before == after && level % 3 !== 0) {\n this._declusterAll();\n this.body.emitter.emit(\"_layoutFailed\");\n console.info(\n \"This network could not be positioned by this version of the improved layout algorithm.\" +\n \" Please disable improvedLayout for better performance.\"\n );\n return;\n }\n //console.timeEnd(\"clustering\")\n //console.log(before,level,after);\n }\n // increase the size of the edges\n this.body.modules.kamadaKawai.setOptions({\n springLength: Math.max(150, 2 * startLength),\n });\n }\n if (level > MAX_LEVELS) {\n console.info(\n \"The clustering didn't succeed within the amount of interations allowed,\" +\n \" progressing with partial result.\"\n );\n }\n\n // position the system for these nodes and edges\n this.body.modules.kamadaKawai.solve(\n indices,\n this.body.edgeIndices,\n true\n );\n\n // shift to center point\n this._shiftToCenter();\n\n // perturb the nodes a little bit to force the physics to kick in\n const offset = 70;\n for (let i = 0; i < indices.length; i++) {\n // Only perturb the nodes that aren't fixed\n const node = this.body.nodes[indices[i]];\n if (node.predefinedPosition === false) {\n node.x += (0.5 - this._rng()) * offset;\n node.y += (0.5 - this._rng()) * offset;\n }\n }\n\n // uncluster all clusters\n this._declusterAll();\n\n // reposition all bezier nodes.\n this.body.emitter.emit(\"_repositionBezierNodes\");\n }\n }\n }\n\n /**\n * Move all the nodes towards to the center so gravitational pull wil not move the nodes away from view\n *\n * @private\n */\n _shiftToCenter() {\n const range = NetworkUtil.getRangeCore(\n this.body.nodes,\n this.body.nodeIndices\n );\n const center = NetworkUtil.findCenter(range);\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const node = this.body.nodes[this.body.nodeIndices[i]];\n node.x -= center.x;\n node.y -= center.y;\n }\n }\n\n /**\n * Expands all clusters\n *\n * @private\n */\n _declusterAll() {\n let clustersPresent = true;\n while (clustersPresent === true) {\n clustersPresent = false;\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n if (this.body.nodes[this.body.nodeIndices[i]].isCluster === true) {\n clustersPresent = true;\n this.body.modules.clustering.openCluster(\n this.body.nodeIndices[i],\n {},\n false\n );\n }\n }\n if (clustersPresent === true) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n }\n\n /**\n *\n * @returns {number|*}\n */\n getSeed() {\n return this.initialRandomSeed;\n }\n\n /**\n * This is the main function to layout the nodes in a hierarchical way.\n * It checks if the node details are supplied correctly\n *\n * @private\n */\n setupHierarchicalLayout() {\n if (\n this.options.hierarchical.enabled === true &&\n this.body.nodeIndices.length > 0\n ) {\n // get the size of the largest hubs and check if the user has defined a level for a node.\n let node, nodeId;\n let definedLevel = false;\n let undefinedLevel = false;\n this.lastNodeOnLevel = {};\n this.hierarchical = new HierarchicalStatus();\n\n for (nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId)) {\n node = this.body.nodes[nodeId];\n if (node.options.level !== undefined) {\n definedLevel = true;\n this.hierarchical.levels[nodeId] = node.options.level;\n } else {\n undefinedLevel = true;\n }\n }\n }\n\n // if the user defined some levels but not all, alert and run without hierarchical layout\n if (undefinedLevel === true && definedLevel === true) {\n throw new Error(\n \"To use the hierarchical layout, nodes require either no predefined levels\" +\n \" or levels have to be defined for all nodes.\"\n );\n } else {\n // define levels if undefined by the users. Based on hubsize.\n if (undefinedLevel === true) {\n const sortMethod = this.options.hierarchical.sortMethod;\n if (sortMethod === \"hubsize\") {\n this._determineLevelsByHubsize();\n } else if (sortMethod === \"directed\") {\n this._determineLevelsDirected();\n } else if (sortMethod === \"custom\") {\n this._determineLevelsCustomCallback();\n }\n }\n\n // fallback for cases where there are nodes but no edges\n for (const nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId)) {\n this.hierarchical.ensureLevel(nodeId);\n }\n }\n // check the distribution of the nodes per level.\n const distribution = this._getDistribution();\n\n // get the parent children relations.\n this._generateMap();\n\n // place the nodes on the canvas.\n this._placeNodesByHierarchy(distribution);\n\n // condense the whitespace.\n this._condenseHierarchy();\n\n // shift to center so gravity does not have to do much\n this._shiftToCenter();\n }\n }\n }\n\n /**\n * @private\n */\n _condenseHierarchy() {\n // Global var in this scope to define when the movement has stopped.\n let stillShifting = false;\n const branches = {};\n // first we have some methods to help shifting trees around.\n // the main method to shift the trees\n const shiftTrees = () => {\n const treeSizes = getTreeSizes();\n let shiftBy = 0;\n for (let i = 0; i < treeSizes.length - 1; i++) {\n const diff = treeSizes[i].max - treeSizes[i + 1].min;\n shiftBy += diff + this.options.hierarchical.treeSpacing;\n shiftTree(i + 1, shiftBy);\n }\n };\n\n // shift a single tree by an offset\n const shiftTree = (index, offset) => {\n const trees = this.hierarchical.trees;\n\n for (const nodeId in trees) {\n if (Object.prototype.hasOwnProperty.call(trees, nodeId)) {\n if (trees[nodeId] === index) {\n this.direction.shift(nodeId, offset);\n }\n }\n }\n };\n\n // get the width of all trees\n const getTreeSizes = () => {\n const treeWidths = [];\n for (let i = 0; i < this.hierarchical.numTrees(); i++) {\n treeWidths.push(this.direction.getTreeSize(i));\n }\n return treeWidths;\n };\n\n // get a map of all nodes in this branch\n const getBranchNodes = (source, map) => {\n if (map[source.id]) {\n return;\n }\n map[source.id] = true;\n if (this.hierarchical.childrenReference[source.id]) {\n const children = this.hierarchical.childrenReference[source.id];\n if (children.length > 0) {\n for (let i = 0; i < children.length; i++) {\n getBranchNodes(this.body.nodes[children[i]], map);\n }\n }\n }\n };\n\n // get a min max width as well as the maximum movement space it has on either sides\n // we use min max terminology because width and height can interchange depending on the direction of the layout\n const getBranchBoundary = (branchMap, maxLevel = 1e9) => {\n let minSpace = 1e9;\n let maxSpace = 1e9;\n let min = 1e9;\n let max = -1e9;\n for (const branchNode in branchMap) {\n if (Object.prototype.hasOwnProperty.call(branchMap, branchNode)) {\n const node = this.body.nodes[branchNode];\n const level = this.hierarchical.levels[node.id];\n const position = this.direction.getPosition(node);\n\n // get the space around the node.\n const [minSpaceNode, maxSpaceNode] = this._getSpaceAroundNode(\n node,\n branchMap\n );\n minSpace = Math.min(minSpaceNode, minSpace);\n maxSpace = Math.min(maxSpaceNode, maxSpace);\n\n // the width is only relevant for the levels two nodes have in common. This is why we filter on this.\n if (level <= maxLevel) {\n min = Math.min(position, min);\n max = Math.max(position, max);\n }\n }\n }\n\n return [min, max, minSpace, maxSpace];\n };\n\n // check what the maximum level is these nodes have in common.\n const getCollisionLevel = (node1, node2) => {\n const maxLevel1 = this.hierarchical.getMaxLevel(node1.id);\n const maxLevel2 = this.hierarchical.getMaxLevel(node2.id);\n return Math.min(maxLevel1, maxLevel2);\n };\n\n /**\n * Condense elements. These can be nodes or branches depending on the callback.\n *\n * @param {Function} callback\n * @param {Array.} levels\n * @param {*} centerParents\n */\n const shiftElementsCloser = (callback, levels, centerParents) => {\n const hier = this.hierarchical;\n\n for (let i = 0; i < levels.length; i++) {\n const level = levels[i];\n const levelNodes = hier.distributionOrdering[level];\n if (levelNodes.length > 1) {\n for (let j = 0; j < levelNodes.length - 1; j++) {\n const node1 = levelNodes[j];\n const node2 = levelNodes[j + 1];\n\n // NOTE: logic maintained as it was; if nodes have same ancestor,\n // then of course they are in the same sub-network.\n if (\n hier.hasSameParent(node1, node2) &&\n hier.inSameSubNetwork(node1, node2)\n ) {\n callback(node1, node2, centerParents);\n }\n }\n }\n }\n };\n\n // callback for shifting branches\n const branchShiftCallback = (node1, node2, centerParent = false) => {\n //window.CALLBACKS.push(() => {\n const pos1 = this.direction.getPosition(node1);\n const pos2 = this.direction.getPosition(node2);\n const diffAbs = Math.abs(pos2 - pos1);\n const nodeSpacing = this.options.hierarchical.nodeSpacing;\n //console.log(\"NOW CHECKING:\", node1.id, node2.id, diffAbs);\n if (diffAbs > nodeSpacing) {\n const branchNodes1 = {};\n const branchNodes2 = {};\n\n getBranchNodes(node1, branchNodes1);\n getBranchNodes(node2, branchNodes2);\n\n // check the largest distance between the branches\n const maxLevel = getCollisionLevel(node1, node2);\n const branchNodeBoundary1 = getBranchBoundary(branchNodes1, maxLevel);\n const branchNodeBoundary2 = getBranchBoundary(branchNodes2, maxLevel);\n const max1 = branchNodeBoundary1[1];\n const min2 = branchNodeBoundary2[0];\n const minSpace2 = branchNodeBoundary2[2];\n\n //console.log(node1.id, getBranchBoundary(branchNodes1, maxLevel), node2.id,\n // getBranchBoundary(branchNodes2, maxLevel), maxLevel);\n const diffBranch = Math.abs(max1 - min2);\n if (diffBranch > nodeSpacing) {\n let offset = max1 - min2 + nodeSpacing;\n if (offset < -minSpace2 + nodeSpacing) {\n offset = -minSpace2 + nodeSpacing;\n //console.log(\"RESETTING OFFSET\", max1 - min2 + this.options.hierarchical.nodeSpacing, -minSpace2, offset);\n }\n if (offset < 0) {\n //console.log(\"SHIFTING\", node2.id, offset);\n this._shiftBlock(node2.id, offset);\n stillShifting = true;\n\n if (centerParent === true) this._centerParent(node2);\n }\n }\n }\n //this.body.emitter.emit(\"_redraw\");})\n };\n\n const minimizeEdgeLength = (iterations, node) => {\n //window.CALLBACKS.push(() => {\n // console.log(\"ts\",node.id);\n const nodeId = node.id;\n const allEdges = node.edges;\n const nodeLevel = this.hierarchical.levels[node.id];\n\n // gather constants\n const C2 =\n this.options.hierarchical.levelSeparation *\n this.options.hierarchical.levelSeparation;\n const referenceNodes = {};\n const aboveEdges = [];\n for (let i = 0; i < allEdges.length; i++) {\n const edge = allEdges[i];\n if (edge.toId != edge.fromId) {\n const otherNode = edge.toId == nodeId ? edge.from : edge.to;\n referenceNodes[allEdges[i].id] = otherNode;\n if (this.hierarchical.levels[otherNode.id] < nodeLevel) {\n aboveEdges.push(edge);\n }\n }\n }\n\n // differentiated sum of lengths based on only moving one node over one axis\n const getFx = (point, edges) => {\n let sum = 0;\n for (let i = 0; i < edges.length; i++) {\n if (referenceNodes[edges[i].id] !== undefined) {\n const a =\n this.direction.getPosition(referenceNodes[edges[i].id]) - point;\n sum += a / Math.sqrt(a * a + C2);\n }\n }\n return sum;\n };\n\n // doubly differentiated sum of lengths based on only moving one node over one axis\n const getDFx = (point, edges) => {\n let sum = 0;\n for (let i = 0; i < edges.length; i++) {\n if (referenceNodes[edges[i].id] !== undefined) {\n const a =\n this.direction.getPosition(referenceNodes[edges[i].id]) - point;\n sum -= C2 * Math.pow(a * a + C2, -1.5);\n }\n }\n return sum;\n };\n\n const getGuess = (iterations, edges) => {\n let guess = this.direction.getPosition(node);\n // Newton's method for optimization\n const guessMap = {};\n for (let i = 0; i < iterations; i++) {\n const fx = getFx(guess, edges);\n const dfx = getDFx(guess, edges);\n\n // we limit the movement to avoid instability.\n const limit = 40;\n const ratio = Math.max(-limit, Math.min(limit, Math.round(fx / dfx)));\n guess = guess - ratio;\n // reduce duplicates\n if (guessMap[guess] !== undefined) {\n break;\n }\n guessMap[guess] = i;\n }\n return guess;\n };\n\n const moveBranch = (guess) => {\n // position node if there is space\n const nodePosition = this.direction.getPosition(node);\n\n // check movable area of the branch\n if (branches[node.id] === undefined) {\n const branchNodes = {};\n getBranchNodes(node, branchNodes);\n branches[node.id] = branchNodes;\n }\n const branchBoundary = getBranchBoundary(branches[node.id]);\n const minSpaceBranch = branchBoundary[2];\n const maxSpaceBranch = branchBoundary[3];\n\n const diff = guess - nodePosition;\n\n // check if we are allowed to move the node:\n let branchOffset = 0;\n if (diff > 0) {\n branchOffset = Math.min(\n diff,\n maxSpaceBranch - this.options.hierarchical.nodeSpacing\n );\n } else if (diff < 0) {\n branchOffset = -Math.min(\n -diff,\n minSpaceBranch - this.options.hierarchical.nodeSpacing\n );\n }\n\n if (branchOffset != 0) {\n //console.log(\"moving branch:\",branchOffset, maxSpaceBranch, minSpaceBranch)\n this._shiftBlock(node.id, branchOffset);\n //this.body.emitter.emit(\"_redraw\");\n stillShifting = true;\n }\n };\n\n const moveNode = (guess) => {\n const nodePosition = this.direction.getPosition(node);\n\n // position node if there is space\n const [minSpace, maxSpace] = this._getSpaceAroundNode(node);\n const diff = guess - nodePosition;\n // check if we are allowed to move the node:\n let newPosition = nodePosition;\n if (diff > 0) {\n newPosition = Math.min(\n nodePosition + (maxSpace - this.options.hierarchical.nodeSpacing),\n guess\n );\n } else if (diff < 0) {\n newPosition = Math.max(\n nodePosition - (minSpace - this.options.hierarchical.nodeSpacing),\n guess\n );\n }\n\n if (newPosition !== nodePosition) {\n //console.log(\"moving Node:\",diff, minSpace, maxSpace);\n this.direction.setPosition(node, newPosition);\n //this.body.emitter.emit(\"_redraw\");\n stillShifting = true;\n }\n };\n\n let guess = getGuess(iterations, aboveEdges);\n moveBranch(guess);\n guess = getGuess(iterations, allEdges);\n moveNode(guess);\n //})\n };\n\n // method to remove whitespace between branches. Because we do bottom up, we can center the parents.\n const minimizeEdgeLengthBottomUp = (iterations) => {\n let levels = this.hierarchical.getLevels();\n levels = levels.reverse();\n for (let i = 0; i < iterations; i++) {\n stillShifting = false;\n for (let j = 0; j < levels.length; j++) {\n const level = levels[j];\n const levelNodes = this.hierarchical.distributionOrdering[level];\n for (let k = 0; k < levelNodes.length; k++) {\n minimizeEdgeLength(1000, levelNodes[k]);\n }\n }\n if (stillShifting !== true) {\n //console.log(\"FINISHED minimizeEdgeLengthBottomUp IN \" + i);\n break;\n }\n }\n };\n\n // method to remove whitespace between branches. Because we do bottom up, we can center the parents.\n const shiftBranchesCloserBottomUp = (iterations) => {\n let levels = this.hierarchical.getLevels();\n levels = levels.reverse();\n for (let i = 0; i < iterations; i++) {\n stillShifting = false;\n shiftElementsCloser(branchShiftCallback, levels, true);\n if (stillShifting !== true) {\n //console.log(\"FINISHED shiftBranchesCloserBottomUp IN \" + (i+1));\n break;\n }\n }\n };\n\n // center all parents\n const centerAllParents = () => {\n for (const nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId))\n this._centerParent(this.body.nodes[nodeId]);\n }\n };\n\n // center all parents\n const centerAllParentsBottomUp = () => {\n let levels = this.hierarchical.getLevels();\n levels = levels.reverse();\n for (let i = 0; i < levels.length; i++) {\n const level = levels[i];\n const levelNodes = this.hierarchical.distributionOrdering[level];\n for (let j = 0; j < levelNodes.length; j++) {\n this._centerParent(levelNodes[j]);\n }\n }\n };\n\n // the actual work is done here.\n if (this.options.hierarchical.blockShifting === true) {\n shiftBranchesCloserBottomUp(5);\n centerAllParents();\n }\n\n // minimize edge length\n if (this.options.hierarchical.edgeMinimization === true) {\n minimizeEdgeLengthBottomUp(20);\n }\n\n if (this.options.hierarchical.parentCentralization === true) {\n centerAllParentsBottomUp();\n }\n\n shiftTrees();\n }\n\n /**\n * This gives the space around the node. IF a map is supplied, it will only check against nodes NOT in the map.\n * This is used to only get the distances to nodes outside of a branch.\n *\n * @param {Node} node\n * @param {{Node.id: vis.Node}} map\n * @returns {number[]}\n * @private\n */\n _getSpaceAroundNode(node, map) {\n let useMap = true;\n if (map === undefined) {\n useMap = false;\n }\n const level = this.hierarchical.levels[node.id];\n if (level !== undefined) {\n const index = this.hierarchical.distributionIndex[node.id];\n const position = this.direction.getPosition(node);\n const ordering = this.hierarchical.distributionOrdering[level];\n let minSpace = 1e9;\n let maxSpace = 1e9;\n if (index !== 0) {\n const prevNode = ordering[index - 1];\n if (\n (useMap === true && map[prevNode.id] === undefined) ||\n useMap === false\n ) {\n const prevPos = this.direction.getPosition(prevNode);\n minSpace = position - prevPos;\n }\n }\n\n if (index != ordering.length - 1) {\n const nextNode = ordering[index + 1];\n if (\n (useMap === true && map[nextNode.id] === undefined) ||\n useMap === false\n ) {\n const nextPos = this.direction.getPosition(nextNode);\n maxSpace = Math.min(maxSpace, nextPos - position);\n }\n }\n\n return [minSpace, maxSpace];\n } else {\n return [0, 0];\n }\n }\n\n /**\n * We use this method to center a parent node and check if it does not cross other nodes when it does.\n *\n * @param {Node} node\n * @private\n */\n _centerParent(node) {\n if (this.hierarchical.parentReference[node.id]) {\n const parents = this.hierarchical.parentReference[node.id];\n for (let i = 0; i < parents.length; i++) {\n const parentId = parents[i];\n const parentNode = this.body.nodes[parentId];\n const children = this.hierarchical.childrenReference[parentId];\n\n if (children !== undefined) {\n // get the range of the children\n const newPosition = this._getCenterPosition(children);\n\n const position = this.direction.getPosition(parentNode);\n const [minSpace, maxSpace] = this._getSpaceAroundNode(parentNode);\n const diff = position - newPosition;\n if (\n (diff < 0 &&\n Math.abs(diff) <\n maxSpace - this.options.hierarchical.nodeSpacing) ||\n (diff > 0 &&\n Math.abs(diff) < minSpace - this.options.hierarchical.nodeSpacing)\n ) {\n this.direction.setPosition(parentNode, newPosition);\n }\n }\n }\n }\n }\n\n /**\n * This function places the nodes on the canvas based on the hierarchial distribution.\n *\n * @param {object} distribution | obtained by the function this._getDistribution()\n * @private\n */\n _placeNodesByHierarchy(distribution) {\n this.positionedNodes = {};\n // start placing all the level 0 nodes first. Then recursively position their branches.\n for (const level in distribution) {\n if (Object.prototype.hasOwnProperty.call(distribution, level)) {\n // sort nodes in level by position:\n let nodeArray = Object.keys(distribution[level]);\n nodeArray = this._indexArrayToNodes(nodeArray);\n this.direction.sort(nodeArray);\n let handledNodeCount = 0;\n\n for (let i = 0; i < nodeArray.length; i++) {\n const node = nodeArray[i];\n if (this.positionedNodes[node.id] === undefined) {\n const spacing = this.options.hierarchical.nodeSpacing;\n let pos = spacing * handledNodeCount;\n // We get the X or Y values we need and store them in pos and previousPos.\n // The get and set make sure we get X or Y\n if (handledNodeCount > 0) {\n pos = this.direction.getPosition(nodeArray[i - 1]) + spacing;\n }\n this.direction.setPosition(node, pos, level);\n this._validatePositionAndContinue(node, level, pos);\n\n handledNodeCount++;\n }\n }\n }\n }\n }\n\n /**\n * This is a recursively called function to enumerate the branches from the largest hubs and place the nodes\n * on a X position that ensures there will be no overlap.\n *\n * @param {Node.id} parentId\n * @param {number} parentLevel\n * @private\n */\n _placeBranchNodes(parentId, parentLevel) {\n const childRef = this.hierarchical.childrenReference[parentId];\n\n // if this is not a parent, cancel the placing. This can happen with multiple parents to one child.\n if (childRef === undefined) {\n return;\n }\n\n // get a list of childNodes\n const childNodes = [];\n for (let i = 0; i < childRef.length; i++) {\n childNodes.push(this.body.nodes[childRef[i]]);\n }\n\n // use the positions to order the nodes.\n this.direction.sort(childNodes);\n\n // position the childNodes\n for (let i = 0; i < childNodes.length; i++) {\n const childNode = childNodes[i];\n const childNodeLevel = this.hierarchical.levels[childNode.id];\n // check if the child node is below the parent node and if it has already been positioned.\n if (\n childNodeLevel > parentLevel &&\n this.positionedNodes[childNode.id] === undefined\n ) {\n // get the amount of space required for this node. If parent the width is based on the amount of children.\n const spacing = this.options.hierarchical.nodeSpacing;\n let pos;\n\n // we get the X or Y values we need and store them in pos and previousPos.\n // The get and set make sure we get X or Y\n if (i === 0) {\n pos = this.direction.getPosition(this.body.nodes[parentId]);\n } else {\n pos = this.direction.getPosition(childNodes[i - 1]) + spacing;\n }\n this.direction.setPosition(childNode, pos, childNodeLevel);\n this._validatePositionAndContinue(childNode, childNodeLevel, pos);\n } else {\n return;\n }\n }\n\n // center the parent nodes.\n const center = this._getCenterPosition(childNodes);\n this.direction.setPosition(this.body.nodes[parentId], center, parentLevel);\n }\n\n /**\n * This method checks for overlap and if required shifts the branch. It also keeps records of positioned nodes.\n * Finally it will call _placeBranchNodes to place the branch nodes.\n *\n * @param {Node} node\n * @param {number} level\n * @param {number} pos\n * @private\n */\n _validatePositionAndContinue(node, level, pos) {\n // This method only works for formal trees and formal forests\n // Early exit if this is not the case\n if (!this.hierarchical.isTree) return;\n\n // if overlap has been detected, we shift the branch\n if (this.lastNodeOnLevel[level] !== undefined) {\n const previousPos = this.direction.getPosition(\n this.body.nodes[this.lastNodeOnLevel[level]]\n );\n if (pos - previousPos < this.options.hierarchical.nodeSpacing) {\n const diff = previousPos + this.options.hierarchical.nodeSpacing - pos;\n const sharedParent = this._findCommonParent(\n this.lastNodeOnLevel[level],\n node.id\n );\n this._shiftBlock(sharedParent.withChild, diff);\n }\n }\n\n this.lastNodeOnLevel[level] = node.id; // store change in position.\n this.positionedNodes[node.id] = true;\n this._placeBranchNodes(node.id, level);\n }\n\n /**\n * Receives an array with node indices and returns an array with the actual node references.\n * Used for sorting based on node properties.\n *\n * @param {Array.} idArray\n * @returns {Array.}\n */\n _indexArrayToNodes(idArray) {\n const array = [];\n for (let i = 0; i < idArray.length; i++) {\n array.push(this.body.nodes[idArray[i]]);\n }\n return array;\n }\n\n /**\n * This function get the distribution of levels based on hubsize\n *\n * @returns {object}\n * @private\n */\n _getDistribution() {\n const distribution = {};\n let nodeId, node;\n\n // we fix Y because the hierarchy is vertical,\n // we fix X so we do not give a node an x position for a second time.\n // the fix of X is removed after the x value has been set.\n for (nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId)) {\n node = this.body.nodes[nodeId];\n const level =\n this.hierarchical.levels[nodeId] === undefined\n ? 0\n : this.hierarchical.levels[nodeId];\n this.direction.fix(node, level);\n if (distribution[level] === undefined) {\n distribution[level] = {};\n }\n distribution[level][nodeId] = node;\n }\n }\n return distribution;\n }\n\n /**\n * Return the active (i.e. visible) edges for this node\n *\n * @param {Node} node\n * @returns {Array.} Array of edge instances\n * @private\n */\n _getActiveEdges(node) {\n const result = [];\n\n forEach(node.edges, (edge) => {\n if (this.body.edgeIndices.indexOf(edge.id) !== -1) {\n result.push(edge);\n }\n });\n\n return result;\n }\n\n /**\n * Get the hubsizes for all active nodes.\n *\n * @returns {number}\n * @private\n */\n _getHubSizes() {\n const hubSizes = {};\n const nodeIds = this.body.nodeIndices;\n\n forEach(nodeIds, (nodeId) => {\n const node = this.body.nodes[nodeId];\n const hubSize = this._getActiveEdges(node).length;\n hubSizes[hubSize] = true;\n });\n\n // Make an array of the size sorted descending\n const result = [];\n forEach(hubSizes, (size) => {\n result.push(Number(size));\n });\n\n result.sort(function (a, b) {\n return b - a;\n });\n\n return result;\n }\n\n /**\n * this function allocates nodes in levels based on the recursive branching from the largest hubs.\n *\n * @private\n */\n _determineLevelsByHubsize() {\n const levelDownstream = (nodeA, nodeB) => {\n this.hierarchical.levelDownstream(nodeA, nodeB);\n };\n\n const hubSizes = this._getHubSizes();\n\n for (let i = 0; i < hubSizes.length; ++i) {\n const hubSize = hubSizes[i];\n if (hubSize === 0) break;\n\n forEach(this.body.nodeIndices, (nodeId) => {\n const node = this.body.nodes[nodeId];\n\n if (hubSize === this._getActiveEdges(node).length) {\n this._crawlNetwork(levelDownstream, nodeId);\n }\n });\n }\n }\n\n /**\n * TODO: release feature\n * TODO: Determine if this feature is needed at all\n *\n * @private\n */\n _determineLevelsCustomCallback() {\n const minLevel = 100000;\n\n // TODO: this should come from options.\n // eslint-disable-next-line no-unused-vars -- This should eventually be implemented with these parameters used.\n const customCallback = function (nodeA, nodeB, edge) {};\n\n // TODO: perhaps move to HierarchicalStatus.\n // But I currently don't see the point, this method is not used.\n const levelByDirection = (nodeA, nodeB, edge) => {\n let levelA = this.hierarchical.levels[nodeA.id];\n // set initial level\n if (levelA === undefined) {\n levelA = this.hierarchical.levels[nodeA.id] = minLevel;\n }\n\n const diff = customCallback(\n NetworkUtil.cloneOptions(nodeA, \"node\"),\n NetworkUtil.cloneOptions(nodeB, \"node\"),\n NetworkUtil.cloneOptions(edge, \"edge\")\n );\n\n this.hierarchical.levels[nodeB.id] = levelA + diff;\n };\n\n this._crawlNetwork(levelByDirection);\n this.hierarchical.setMinLevelToZero(this.body.nodes);\n }\n\n /**\n * Allocate nodes in levels based on the direction of the edges.\n *\n * @private\n */\n _determineLevelsDirected() {\n const nodes = this.body.nodeIndices.reduce((acc, id) => {\n acc.set(id, this.body.nodes[id]);\n return acc;\n }, new Map());\n\n if (this.options.hierarchical.shakeTowards === \"roots\") {\n this.hierarchical.levels = fillLevelsByDirectionRoots(nodes);\n } else {\n this.hierarchical.levels = fillLevelsByDirectionLeaves(nodes);\n }\n\n this.hierarchical.setMinLevelToZero(this.body.nodes);\n }\n\n /**\n * Update the bookkeeping of parent and child.\n *\n * @private\n */\n _generateMap() {\n const fillInRelations = (parentNode, childNode) => {\n if (\n this.hierarchical.levels[childNode.id] >\n this.hierarchical.levels[parentNode.id]\n ) {\n this.hierarchical.addRelation(parentNode.id, childNode.id);\n }\n };\n\n this._crawlNetwork(fillInRelations);\n this.hierarchical.checkIfTree();\n }\n\n /**\n * Crawl over the entire network and use a callback on each node couple that is connected to each other.\n *\n * @param {Function} [callback=function(){}] | will receive nodeA, nodeB and the connecting edge. A and B are distinct.\n * @param {Node.id} startingNodeId\n * @private\n */\n _crawlNetwork(callback = function () {}, startingNodeId) {\n const progress = {};\n\n const crawler = (node, tree) => {\n if (progress[node.id] === undefined) {\n this.hierarchical.setTreeIndex(node, tree);\n\n progress[node.id] = true;\n let childNode;\n const edges = this._getActiveEdges(node);\n for (let i = 0; i < edges.length; i++) {\n const edge = edges[i];\n if (edge.connected === true) {\n if (edge.toId == node.id) {\n // Not '===' because id's can be string and numeric\n childNode = edge.from;\n } else {\n childNode = edge.to;\n }\n\n if (node.id != childNode.id) {\n // Not '!==' because id's can be string and numeric\n callback(node, childNode, edge);\n crawler(childNode, tree);\n }\n }\n }\n }\n };\n\n if (startingNodeId === undefined) {\n // Crawl over all nodes\n let treeIndex = 0; // Serves to pass a unique id for the current distinct tree\n\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const nodeId = this.body.nodeIndices[i];\n\n if (progress[nodeId] === undefined) {\n const node = this.body.nodes[nodeId];\n crawler(node, treeIndex);\n treeIndex += 1;\n }\n }\n } else {\n // Crawl from the given starting node\n const node = this.body.nodes[startingNodeId];\n if (node === undefined) {\n console.error(\"Node not found:\", startingNodeId);\n return;\n }\n crawler(node);\n }\n }\n\n /**\n * Shift a branch a certain distance\n *\n * @param {Node.id} parentId\n * @param {number} diff\n * @private\n */\n _shiftBlock(parentId, diff) {\n const progress = {};\n const shifter = (parentId) => {\n if (progress[parentId]) {\n return;\n }\n progress[parentId] = true;\n this.direction.shift(parentId, diff);\n\n const childRef = this.hierarchical.childrenReference[parentId];\n if (childRef !== undefined) {\n for (let i = 0; i < childRef.length; i++) {\n shifter(childRef[i]);\n }\n }\n };\n shifter(parentId);\n }\n\n /**\n * Find a common parent between branches.\n *\n * @param {Node.id} childA\n * @param {Node.id} childB\n * @returns {{foundParent, withChild}}\n * @private\n */\n _findCommonParent(childA, childB) {\n const parents = {};\n const iterateParents = (parents, child) => {\n const parentRef = this.hierarchical.parentReference[child];\n if (parentRef !== undefined) {\n for (let i = 0; i < parentRef.length; i++) {\n const parent = parentRef[i];\n parents[parent] = true;\n iterateParents(parents, parent);\n }\n }\n };\n const findParent = (parents, child) => {\n const parentRef = this.hierarchical.parentReference[child];\n if (parentRef !== undefined) {\n for (let i = 0; i < parentRef.length; i++) {\n const parent = parentRef[i];\n if (parents[parent] !== undefined) {\n return { foundParent: parent, withChild: child };\n }\n const branch = findParent(parents, parent);\n if (branch.foundParent !== null) {\n return branch;\n }\n }\n }\n return { foundParent: null, withChild: child };\n };\n\n iterateParents(parents, childA);\n return findParent(parents, childB);\n }\n\n /**\n * Set the strategy pattern for handling the coordinates given the current direction.\n *\n * The individual instances contain all the operations and data specific to a layout direction.\n *\n * @param {Node} node\n * @param {{x: number, y: number}} position\n * @param {number} level\n * @param {boolean} [doNotUpdate=false]\n * @private\n */\n setDirectionStrategy() {\n const isVertical =\n this.options.hierarchical.direction === \"UD\" ||\n this.options.hierarchical.direction === \"DU\";\n\n if (isVertical) {\n this.direction = new VerticalStrategy(this);\n } else {\n this.direction = new HorizontalStrategy(this);\n }\n }\n\n /**\n * Determine the center position of a branch from the passed list of child nodes\n *\n * This takes into account the positions of all the child nodes.\n *\n * @param {Array.} childNodes Array of either child nodes or node id's\n * @returns {number}\n * @private\n */\n _getCenterPosition(childNodes) {\n let minPos = 1e9;\n let maxPos = -1e9;\n\n for (let i = 0; i < childNodes.length; i++) {\n let childNode;\n if (childNodes[i].id !== undefined) {\n childNode = childNodes[i];\n } else {\n const childNodeId = childNodes[i];\n childNode = this.body.nodes[childNodeId];\n }\n\n const position = this.direction.getPosition(childNode);\n minPos = Math.min(minPos, position);\n maxPos = Math.max(maxPos, position);\n }\n\n return 0.5 * (minPos + maxPos);\n }\n}\n\nexport default LayoutEngine;\n","import \"./ManipulationSystem.css\";\n\nimport { Hammer, deepExtend, recursiveDOMDelete } from \"vis-util/esnext\";\nimport { v4 as randomUUID } from \"uuid\";\nimport { onTouch } from \"../../hammerUtil\";\n\n/**\n * Clears the toolbar div element of children\n *\n * @private\n */\nclass ManipulationSystem {\n /**\n * @param {object} body\n * @param {Canvas} canvas\n * @param {SelectionHandler} selectionHandler\n * @param {InteractionHandler} interactionHandler\n */\n constructor(body, canvas, selectionHandler, interactionHandler) {\n this.body = body;\n this.canvas = canvas;\n this.selectionHandler = selectionHandler;\n this.interactionHandler = interactionHandler;\n\n this.editMode = false;\n this.manipulationDiv = undefined;\n this.editModeDiv = undefined;\n this.closeDiv = undefined;\n\n this._domEventListenerCleanupQueue = [];\n this.temporaryUIFunctions = {};\n this.temporaryEventFunctions = [];\n\n this.touchTime = 0;\n this.temporaryIds = { nodes: [], edges: [] };\n this.guiEnabled = false;\n this.inMode = false;\n this.selectedControlNode = undefined;\n\n this.options = {};\n this.defaultOptions = {\n enabled: false,\n initiallyActive: false,\n addNode: true,\n addEdge: true,\n editNode: undefined,\n editEdge: true,\n deleteNode: true,\n deleteEdge: true,\n controlNodeStyle: {\n shape: \"dot\",\n size: 6,\n color: {\n background: \"#ff0000\",\n border: \"#3c3c3c\",\n highlight: { background: \"#07f968\", border: \"#3c3c3c\" },\n },\n borderWidth: 2,\n borderWidthSelected: 2,\n },\n };\n Object.assign(this.options, this.defaultOptions);\n\n this.body.emitter.on(\"destroy\", () => {\n this._clean();\n });\n this.body.emitter.on(\"_dataChanged\", this._restore.bind(this));\n this.body.emitter.on(\"_resetData\", this._restore.bind(this));\n }\n\n /**\n * If something changes in the data during editing, switch back to the initial datamanipulation state and close all edit modes.\n *\n * @private\n */\n _restore() {\n if (this.inMode !== false) {\n if (this.options.initiallyActive === true) {\n this.enableEditMode();\n } else {\n this.disableEditMode();\n }\n }\n }\n\n /**\n * Set the Options\n *\n * @param {object} options\n * @param {object} allOptions\n * @param {object} globalOptions\n */\n setOptions(options, allOptions, globalOptions) {\n if (allOptions !== undefined) {\n if (allOptions.locale !== undefined) {\n this.options.locale = allOptions.locale;\n } else {\n this.options.locale = globalOptions.locale;\n }\n if (allOptions.locales !== undefined) {\n this.options.locales = allOptions.locales;\n } else {\n this.options.locales = globalOptions.locales;\n }\n }\n\n if (options !== undefined) {\n if (typeof options === \"boolean\") {\n this.options.enabled = options;\n } else {\n this.options.enabled = true;\n deepExtend(this.options, options);\n }\n if (this.options.initiallyActive === true) {\n this.editMode = true;\n }\n this._setup();\n }\n }\n\n /**\n * Enable or disable edit-mode. Draws the DOM required and cleans up after itself.\n *\n * @private\n */\n toggleEditMode() {\n if (this.editMode === true) {\n this.disableEditMode();\n } else {\n this.enableEditMode();\n }\n }\n\n /**\n * Enables Edit Mode\n */\n enableEditMode() {\n this.editMode = true;\n\n this._clean();\n if (this.guiEnabled === true) {\n this.manipulationDiv.style.display = \"block\";\n this.closeDiv.style.display = \"block\";\n this.editModeDiv.style.display = \"none\";\n this.showManipulatorToolbar();\n }\n }\n\n /**\n * Disables Edit Mode\n */\n disableEditMode() {\n this.editMode = false;\n\n this._clean();\n if (this.guiEnabled === true) {\n this.manipulationDiv.style.display = \"none\";\n this.closeDiv.style.display = \"none\";\n this.editModeDiv.style.display = \"block\";\n this._createEditButton();\n }\n }\n\n /**\n * Creates the main toolbar. Removes functions bound to the select event. Binds all the buttons of the toolbar.\n *\n * @private\n */\n showManipulatorToolbar() {\n // restore the state of any bound functions or events, remove control nodes, restore physics\n this._clean();\n\n // reset global variables\n this.manipulationDOM = {};\n\n // if the gui is enabled, draw all elements.\n if (this.guiEnabled === true) {\n // a _restore will hide these menus\n this.editMode = true;\n this.manipulationDiv.style.display = \"block\";\n this.closeDiv.style.display = \"block\";\n\n const selectedNodeCount = this.selectionHandler.getSelectedNodeCount();\n const selectedEdgeCount = this.selectionHandler.getSelectedEdgeCount();\n const selectedTotalCount = selectedNodeCount + selectedEdgeCount;\n const locale = this.options.locales[this.options.locale];\n let needSeperator = false;\n\n if (this.options.addNode !== false) {\n this._createAddNodeButton(locale);\n needSeperator = true;\n }\n if (this.options.addEdge !== false) {\n if (needSeperator === true) {\n this._createSeperator(1);\n } else {\n needSeperator = true;\n }\n this._createAddEdgeButton(locale);\n }\n\n if (\n selectedNodeCount === 1 &&\n typeof this.options.editNode === \"function\"\n ) {\n if (needSeperator === true) {\n this._createSeperator(2);\n } else {\n needSeperator = true;\n }\n this._createEditNodeButton(locale);\n } else if (\n selectedEdgeCount === 1 &&\n selectedNodeCount === 0 &&\n this.options.editEdge !== false\n ) {\n if (needSeperator === true) {\n this._createSeperator(3);\n } else {\n needSeperator = true;\n }\n this._createEditEdgeButton(locale);\n }\n\n // remove buttons\n if (selectedTotalCount !== 0) {\n if (selectedNodeCount > 0 && this.options.deleteNode !== false) {\n if (needSeperator === true) {\n this._createSeperator(4);\n }\n this._createDeleteButton(locale);\n } else if (\n selectedNodeCount === 0 &&\n this.options.deleteEdge !== false\n ) {\n if (needSeperator === true) {\n this._createSeperator(4);\n }\n this._createDeleteButton(locale);\n }\n }\n\n // bind the close button\n this._bindElementEvents(this.closeDiv, this.toggleEditMode.bind(this));\n\n // refresh this bar based on what has been selected\n this._temporaryBindEvent(\n \"select\",\n this.showManipulatorToolbar.bind(this)\n );\n }\n\n // redraw to show any possible changes\n this.body.emitter.emit(\"_redraw\");\n }\n\n /**\n * Create the toolbar for adding Nodes\n */\n addNodeMode() {\n // when using the gui, enable edit mode if it wasnt already.\n if (this.editMode !== true) {\n this.enableEditMode();\n }\n\n // restore the state of any bound functions or events, remove control nodes, restore physics\n this._clean();\n\n this.inMode = \"addNode\";\n if (this.guiEnabled === true) {\n const locale = this.options.locales[this.options.locale];\n this.manipulationDOM = {};\n this._createBackButton(locale);\n this._createSeperator();\n this._createDescription(\n locale[\"addDescription\"] || this.options.locales[\"en\"][\"addDescription\"]\n );\n\n // bind the close button\n this._bindElementEvents(this.closeDiv, this.toggleEditMode.bind(this));\n }\n\n this._temporaryBindEvent(\"click\", this._performAddNode.bind(this));\n }\n\n /**\n * call the bound function to handle the editing of the node. The node has to be selected.\n */\n editNode() {\n // when using the gui, enable edit mode if it wasnt already.\n if (this.editMode !== true) {\n this.enableEditMode();\n }\n\n // restore the state of any bound functions or events, remove control nodes, restore physics\n this._clean();\n const node = this.selectionHandler.getSelectedNodes()[0];\n if (node !== undefined) {\n this.inMode = \"editNode\";\n if (typeof this.options.editNode === \"function\") {\n if (node.isCluster !== true) {\n const data = deepExtend({}, node.options, false);\n data.x = node.x;\n data.y = node.y;\n\n if (this.options.editNode.length === 2) {\n this.options.editNode(data, (finalizedData) => {\n if (\n finalizedData !== null &&\n finalizedData !== undefined &&\n this.inMode === \"editNode\"\n ) {\n // if for whatever reason the mode has changes (due to dataset change) disregard the callback) {\n this.body.data.nodes.getDataSet().update(finalizedData);\n }\n this.showManipulatorToolbar();\n });\n } else {\n throw new Error(\n \"The function for edit does not support two arguments (data, callback)\"\n );\n }\n } else {\n alert(\n this.options.locales[this.options.locale][\"editClusterError\"] ||\n this.options.locales[\"en\"][\"editClusterError\"]\n );\n }\n } else {\n throw new Error(\n \"No function has been configured to handle the editing of nodes.\"\n );\n }\n } else {\n this.showManipulatorToolbar();\n }\n }\n\n /**\n * create the toolbar to connect nodes\n */\n addEdgeMode() {\n // when using the gui, enable edit mode if it wasnt already.\n if (this.editMode !== true) {\n this.enableEditMode();\n }\n\n // restore the state of any bound functions or events, remove control nodes, restore physics\n this._clean();\n\n this.inMode = \"addEdge\";\n if (this.guiEnabled === true) {\n const locale = this.options.locales[this.options.locale];\n this.manipulationDOM = {};\n this._createBackButton(locale);\n this._createSeperator();\n this._createDescription(\n locale[\"edgeDescription\"] ||\n this.options.locales[\"en\"][\"edgeDescription\"]\n );\n\n // bind the close button\n this._bindElementEvents(this.closeDiv, this.toggleEditMode.bind(this));\n }\n\n // temporarily overload functions\n this._temporaryBindUI(\"onTouch\", this._handleConnect.bind(this));\n this._temporaryBindUI(\"onDragEnd\", this._finishConnect.bind(this));\n this._temporaryBindUI(\"onDrag\", this._dragControlNode.bind(this));\n this._temporaryBindUI(\"onRelease\", this._finishConnect.bind(this));\n this._temporaryBindUI(\"onDragStart\", this._dragStartEdge.bind(this));\n this._temporaryBindUI(\"onHold\", () => {});\n }\n\n /**\n * create the toolbar to edit edges\n */\n editEdgeMode() {\n // when using the gui, enable edit mode if it wasn't already.\n if (this.editMode !== true) {\n this.enableEditMode();\n }\n\n // restore the state of any bound functions or events, remove control nodes, restore physics\n this._clean();\n\n this.inMode = \"editEdge\";\n if (\n typeof this.options.editEdge === \"object\" &&\n typeof this.options.editEdge.editWithoutDrag === \"function\"\n ) {\n this.edgeBeingEditedId = this.selectionHandler.getSelectedEdgeIds()[0];\n if (this.edgeBeingEditedId !== undefined) {\n const edge = this.body.edges[this.edgeBeingEditedId];\n this._performEditEdge(edge.from.id, edge.to.id);\n return;\n }\n }\n if (this.guiEnabled === true) {\n const locale = this.options.locales[this.options.locale];\n this.manipulationDOM = {};\n this._createBackButton(locale);\n this._createSeperator();\n this._createDescription(\n locale[\"editEdgeDescription\"] ||\n this.options.locales[\"en\"][\"editEdgeDescription\"]\n );\n\n // bind the close button\n this._bindElementEvents(this.closeDiv, this.toggleEditMode.bind(this));\n }\n\n this.edgeBeingEditedId = this.selectionHandler.getSelectedEdgeIds()[0];\n if (this.edgeBeingEditedId !== undefined) {\n const edge = this.body.edges[this.edgeBeingEditedId];\n\n // create control nodes\n const controlNodeFrom = this._getNewTargetNode(edge.from.x, edge.from.y);\n const controlNodeTo = this._getNewTargetNode(edge.to.x, edge.to.y);\n\n this.temporaryIds.nodes.push(controlNodeFrom.id);\n this.temporaryIds.nodes.push(controlNodeTo.id);\n\n this.body.nodes[controlNodeFrom.id] = controlNodeFrom;\n this.body.nodeIndices.push(controlNodeFrom.id);\n this.body.nodes[controlNodeTo.id] = controlNodeTo;\n this.body.nodeIndices.push(controlNodeTo.id);\n\n // temporarily overload UI functions, cleaned up automatically because of _temporaryBindUI\n this._temporaryBindUI(\"onTouch\", this._controlNodeTouch.bind(this)); // used to get the position\n this._temporaryBindUI(\"onTap\", () => {}); // disabled\n this._temporaryBindUI(\"onHold\", () => {}); // disabled\n this._temporaryBindUI(\n \"onDragStart\",\n this._controlNodeDragStart.bind(this)\n ); // used to select control node\n this._temporaryBindUI(\"onDrag\", this._controlNodeDrag.bind(this)); // used to drag control node\n this._temporaryBindUI(\"onDragEnd\", this._controlNodeDragEnd.bind(this)); // used to connect or revert control nodes\n this._temporaryBindUI(\"onMouseMove\", () => {}); // disabled\n\n // create function to position control nodes correctly on movement\n // automatically cleaned up because we use the temporary bind\n this._temporaryBindEvent(\"beforeDrawing\", (ctx) => {\n const positions = edge.edgeType.findBorderPositions(ctx);\n if (controlNodeFrom.selected === false) {\n controlNodeFrom.x = positions.from.x;\n controlNodeFrom.y = positions.from.y;\n }\n if (controlNodeTo.selected === false) {\n controlNodeTo.x = positions.to.x;\n controlNodeTo.y = positions.to.y;\n }\n });\n\n this.body.emitter.emit(\"_redraw\");\n } else {\n this.showManipulatorToolbar();\n }\n }\n\n /**\n * delete everything in the selection\n */\n deleteSelected() {\n // when using the gui, enable edit mode if it wasnt already.\n if (this.editMode !== true) {\n this.enableEditMode();\n }\n\n // restore the state of any bound functions or events, remove control nodes, restore physics\n this._clean();\n\n this.inMode = \"delete\";\n const selectedNodes = this.selectionHandler.getSelectedNodeIds();\n const selectedEdges = this.selectionHandler.getSelectedEdgeIds();\n let deleteFunction = undefined;\n if (selectedNodes.length > 0) {\n for (let i = 0; i < selectedNodes.length; i++) {\n if (this.body.nodes[selectedNodes[i]].isCluster === true) {\n alert(\n this.options.locales[this.options.locale][\"deleteClusterError\"] ||\n this.options.locales[\"en\"][\"deleteClusterError\"]\n );\n return;\n }\n }\n\n if (typeof this.options.deleteNode === \"function\") {\n deleteFunction = this.options.deleteNode;\n }\n } else if (selectedEdges.length > 0) {\n if (typeof this.options.deleteEdge === \"function\") {\n deleteFunction = this.options.deleteEdge;\n }\n }\n\n if (typeof deleteFunction === \"function\") {\n const data = { nodes: selectedNodes, edges: selectedEdges };\n if (deleteFunction.length === 2) {\n deleteFunction(data, (finalizedData) => {\n if (\n finalizedData !== null &&\n finalizedData !== undefined &&\n this.inMode === \"delete\"\n ) {\n // if for whatever reason the mode has changes (due to dataset change) disregard the callback) {\n this.body.data.edges.getDataSet().remove(finalizedData.edges);\n this.body.data.nodes.getDataSet().remove(finalizedData.nodes);\n this.body.emitter.emit(\"startSimulation\");\n this.showManipulatorToolbar();\n } else {\n this.body.emitter.emit(\"startSimulation\");\n this.showManipulatorToolbar();\n }\n });\n } else {\n throw new Error(\n \"The function for delete does not support two arguments (data, callback)\"\n );\n }\n } else {\n this.body.data.edges.getDataSet().remove(selectedEdges);\n this.body.data.nodes.getDataSet().remove(selectedNodes);\n this.body.emitter.emit(\"startSimulation\");\n this.showManipulatorToolbar();\n }\n }\n\n //********************************************** PRIVATE ***************************************//\n\n /**\n * draw or remove the DOM\n *\n * @private\n */\n _setup() {\n if (this.options.enabled === true) {\n // Enable the GUI\n this.guiEnabled = true;\n\n this._createWrappers();\n if (this.editMode === false) {\n this._createEditButton();\n } else {\n this.showManipulatorToolbar();\n }\n } else {\n this._removeManipulationDOM();\n\n // disable the gui\n this.guiEnabled = false;\n }\n }\n\n /**\n * create the div overlays that contain the DOM\n *\n * @private\n */\n _createWrappers() {\n // load the manipulator HTML elements. All styling done in css.\n if (this.manipulationDiv === undefined) {\n this.manipulationDiv = document.createElement(\"div\");\n this.manipulationDiv.className = \"vis-manipulation\";\n if (this.editMode === true) {\n this.manipulationDiv.style.display = \"block\";\n } else {\n this.manipulationDiv.style.display = \"none\";\n }\n this.canvas.frame.appendChild(this.manipulationDiv);\n }\n\n // container for the edit button.\n if (this.editModeDiv === undefined) {\n this.editModeDiv = document.createElement(\"div\");\n this.editModeDiv.className = \"vis-edit-mode\";\n if (this.editMode === true) {\n this.editModeDiv.style.display = \"none\";\n } else {\n this.editModeDiv.style.display = \"block\";\n }\n this.canvas.frame.appendChild(this.editModeDiv);\n }\n\n // container for the close div button\n if (this.closeDiv === undefined) {\n this.closeDiv = document.createElement(\"button\");\n this.closeDiv.className = \"vis-close\";\n this.closeDiv.setAttribute(\n \"aria-label\",\n this.options.locales[this.options.locale]?.[\"close\"] ??\n this.options.locales[\"en\"][\"close\"]\n );\n this.closeDiv.style.display = this.manipulationDiv.style.display;\n this.canvas.frame.appendChild(this.closeDiv);\n }\n }\n\n /**\n * generate a new target node. Used for creating new edges and editing edges\n *\n * @param {number} x\n * @param {number} y\n * @returns {Node}\n * @private\n */\n _getNewTargetNode(x, y) {\n const controlNodeStyle = deepExtend({}, this.options.controlNodeStyle);\n\n controlNodeStyle.id = \"targetNode\" + randomUUID();\n controlNodeStyle.hidden = false;\n controlNodeStyle.physics = false;\n controlNodeStyle.x = x;\n controlNodeStyle.y = y;\n\n // we have to define the bounding box in order for the nodes to be drawn immediately\n const node = this.body.functions.createNode(controlNodeStyle);\n node.shape.boundingBox = { left: x, right: x, top: y, bottom: y };\n\n return node;\n }\n\n /**\n * Create the edit button\n */\n _createEditButton() {\n // restore everything to it's original state (if applicable)\n this._clean();\n\n // reset the manipulationDOM\n this.manipulationDOM = {};\n\n // empty the editModeDiv\n recursiveDOMDelete(this.editModeDiv);\n\n // create the contents for the editMode button\n const locale = this.options.locales[this.options.locale];\n const button = this._createButton(\n \"editMode\",\n \"vis-edit vis-edit-mode\",\n locale[\"edit\"] || this.options.locales[\"en\"][\"edit\"]\n );\n this.editModeDiv.appendChild(button);\n\n // bind a hammer listener to the button, calling the function toggleEditMode.\n this._bindElementEvents(button, this.toggleEditMode.bind(this));\n }\n\n /**\n * this function cleans up after everything this module does. Temporary elements, functions and events are removed, physics restored, hammers removed.\n *\n * @private\n */\n _clean() {\n // not in mode\n this.inMode = false;\n\n // _clean the divs\n if (this.guiEnabled === true) {\n recursiveDOMDelete(this.editModeDiv);\n recursiveDOMDelete(this.manipulationDiv);\n\n // removes all the bindings and overloads\n this._cleanupDOMEventListeners();\n }\n\n // remove temporary nodes and edges\n this._cleanupTemporaryNodesAndEdges();\n\n // restore overloaded UI functions\n this._unbindTemporaryUIs();\n\n // remove the temporaryEventFunctions\n this._unbindTemporaryEvents();\n\n // restore the physics if required\n this.body.emitter.emit(\"restorePhysics\");\n }\n\n /**\n * Each dom element has it's own hammer. They are stored in this.manipulationHammers. This cleans them up.\n *\n * @private\n */\n _cleanupDOMEventListeners() {\n // _clean DOM event listener bindings\n for (const callback of this._domEventListenerCleanupQueue.splice(0)) {\n callback();\n }\n }\n\n /**\n * Remove all DOM elements created by this module.\n *\n * @private\n */\n _removeManipulationDOM() {\n // removes all the bindings and overloads\n this._clean();\n\n // empty the manipulation divs\n recursiveDOMDelete(this.manipulationDiv);\n recursiveDOMDelete(this.editModeDiv);\n recursiveDOMDelete(this.closeDiv);\n\n // remove the manipulation divs\n if (this.manipulationDiv) {\n this.canvas.frame.removeChild(this.manipulationDiv);\n }\n if (this.editModeDiv) {\n this.canvas.frame.removeChild(this.editModeDiv);\n }\n if (this.closeDiv) {\n this.canvas.frame.removeChild(this.closeDiv);\n }\n\n // set the references to undefined\n this.manipulationDiv = undefined;\n this.editModeDiv = undefined;\n this.closeDiv = undefined;\n }\n\n /**\n * create a seperator line. the index is to differentiate in the manipulation dom\n *\n * @param {number} [index=1]\n * @private\n */\n _createSeperator(index = 1) {\n this.manipulationDOM[\"seperatorLineDiv\" + index] =\n document.createElement(\"div\");\n this.manipulationDOM[\"seperatorLineDiv\" + index].className =\n \"vis-separator-line\";\n this.manipulationDiv.appendChild(\n this.manipulationDOM[\"seperatorLineDiv\" + index]\n );\n }\n\n // ---------------------- DOM functions for buttons --------------------------//\n\n /**\n *\n * @param {Locale} locale\n * @private\n */\n _createAddNodeButton(locale) {\n const button = this._createButton(\n \"addNode\",\n \"vis-add\",\n locale[\"addNode\"] || this.options.locales[\"en\"][\"addNode\"]\n );\n this.manipulationDiv.appendChild(button);\n this._bindElementEvents(button, this.addNodeMode.bind(this));\n }\n\n /**\n *\n * @param {Locale} locale\n * @private\n */\n _createAddEdgeButton(locale) {\n const button = this._createButton(\n \"addEdge\",\n \"vis-connect\",\n locale[\"addEdge\"] || this.options.locales[\"en\"][\"addEdge\"]\n );\n this.manipulationDiv.appendChild(button);\n this._bindElementEvents(button, this.addEdgeMode.bind(this));\n }\n\n /**\n *\n * @param {Locale} locale\n * @private\n */\n _createEditNodeButton(locale) {\n const button = this._createButton(\n \"editNode\",\n \"vis-edit\",\n locale[\"editNode\"] || this.options.locales[\"en\"][\"editNode\"]\n );\n this.manipulationDiv.appendChild(button);\n this._bindElementEvents(button, this.editNode.bind(this));\n }\n\n /**\n *\n * @param {Locale} locale\n * @private\n */\n _createEditEdgeButton(locale) {\n const button = this._createButton(\n \"editEdge\",\n \"vis-edit\",\n locale[\"editEdge\"] || this.options.locales[\"en\"][\"editEdge\"]\n );\n this.manipulationDiv.appendChild(button);\n this._bindElementEvents(button, this.editEdgeMode.bind(this));\n }\n\n /**\n *\n * @param {Locale} locale\n * @private\n */\n _createDeleteButton(locale) {\n let deleteBtnClass;\n if (this.options.rtl) {\n deleteBtnClass = \"vis-delete-rtl\";\n } else {\n deleteBtnClass = \"vis-delete\";\n }\n const button = this._createButton(\n \"delete\",\n deleteBtnClass,\n locale[\"del\"] || this.options.locales[\"en\"][\"del\"]\n );\n this.manipulationDiv.appendChild(button);\n this._bindElementEvents(button, this.deleteSelected.bind(this));\n }\n\n /**\n *\n * @param {Locale} locale\n * @private\n */\n _createBackButton(locale) {\n const button = this._createButton(\n \"back\",\n \"vis-back\",\n locale[\"back\"] || this.options.locales[\"en\"][\"back\"]\n );\n this.manipulationDiv.appendChild(button);\n this._bindElementEvents(button, this.showManipulatorToolbar.bind(this));\n }\n\n /**\n *\n * @param {number|string} id\n * @param {string} className\n * @param {label} label\n * @param {string} labelClassName\n * @returns {HTMLElement}\n * @private\n */\n _createButton(id, className, label, labelClassName = \"vis-label\") {\n this.manipulationDOM[id + \"Div\"] = document.createElement(\"button\");\n this.manipulationDOM[id + \"Div\"].className = \"vis-button \" + className;\n this.manipulationDOM[id + \"Label\"] = document.createElement(\"div\");\n this.manipulationDOM[id + \"Label\"].className = labelClassName;\n this.manipulationDOM[id + \"Label\"].innerText = label;\n this.manipulationDOM[id + \"Div\"].appendChild(\n this.manipulationDOM[id + \"Label\"]\n );\n return this.manipulationDOM[id + \"Div\"];\n }\n\n /**\n *\n * @param {Label} label\n * @private\n */\n _createDescription(label) {\n this.manipulationDOM[\"descriptionLabel\"] = document.createElement(\"div\");\n this.manipulationDOM[\"descriptionLabel\"].className = \"vis-none\";\n this.manipulationDOM[\"descriptionLabel\"].innerText = label;\n this.manipulationDiv.appendChild(this.manipulationDOM[\"descriptionLabel\"]);\n }\n\n // -------------------------- End of DOM functions for buttons ------------------------------//\n\n /**\n * this binds an event until cleanup by the clean functions.\n *\n * @param {Event} event The event\n * @param {Function} newFunction\n * @private\n */\n _temporaryBindEvent(event, newFunction) {\n this.temporaryEventFunctions.push({\n event: event,\n boundFunction: newFunction,\n });\n this.body.emitter.on(event, newFunction);\n }\n\n /**\n * this overrides an UI function until cleanup by the clean function\n *\n * @param {string} UIfunctionName\n * @param {Function} newFunction\n * @private\n */\n _temporaryBindUI(UIfunctionName, newFunction) {\n if (this.body.eventListeners[UIfunctionName] !== undefined) {\n this.temporaryUIFunctions[UIfunctionName] =\n this.body.eventListeners[UIfunctionName];\n this.body.eventListeners[UIfunctionName] = newFunction;\n } else {\n throw new Error(\n \"This UI function does not exist. Typo? You tried: \" +\n UIfunctionName +\n \" possible are: \" +\n JSON.stringify(Object.keys(this.body.eventListeners))\n );\n }\n }\n\n /**\n * Restore the overridden UI functions to their original state.\n *\n * @private\n */\n _unbindTemporaryUIs() {\n for (const functionName in this.temporaryUIFunctions) {\n if (\n Object.prototype.hasOwnProperty.call(\n this.temporaryUIFunctions,\n functionName\n )\n ) {\n this.body.eventListeners[functionName] =\n this.temporaryUIFunctions[functionName];\n delete this.temporaryUIFunctions[functionName];\n }\n }\n this.temporaryUIFunctions = {};\n }\n\n /**\n * Unbind the events created by _temporaryBindEvent\n *\n * @private\n */\n _unbindTemporaryEvents() {\n for (let i = 0; i < this.temporaryEventFunctions.length; i++) {\n const eventName = this.temporaryEventFunctions[i].event;\n const boundFunction = this.temporaryEventFunctions[i].boundFunction;\n this.body.emitter.off(eventName, boundFunction);\n }\n this.temporaryEventFunctions = [];\n }\n\n /**\n * Bind an hammer instance to a DOM element.\n *\n * @param {Element} domElement\n * @param {Function} boundFunction\n */\n _bindElementEvents(domElement, boundFunction) {\n // Bind touch events.\n const hammer = new Hammer(domElement, {});\n onTouch(hammer, boundFunction);\n this._domEventListenerCleanupQueue.push(() => {\n hammer.destroy();\n });\n\n // Bind keyboard events.\n const keyupListener = ({ keyCode, key }) => {\n if (key === \"Enter\" || key === \" \" || keyCode === 13 || keyCode === 32) {\n boundFunction();\n }\n };\n domElement.addEventListener(\"keyup\", keyupListener, false);\n this._domEventListenerCleanupQueue.push(() => {\n domElement.removeEventListener(\"keyup\", keyupListener, false);\n });\n }\n\n /**\n * Neatly clean up temporary edges and nodes\n *\n * @private\n */\n _cleanupTemporaryNodesAndEdges() {\n // _clean temporary edges\n for (let i = 0; i < this.temporaryIds.edges.length; i++) {\n this.body.edges[this.temporaryIds.edges[i]].disconnect();\n delete this.body.edges[this.temporaryIds.edges[i]];\n const indexTempEdge = this.body.edgeIndices.indexOf(\n this.temporaryIds.edges[i]\n );\n if (indexTempEdge !== -1) {\n this.body.edgeIndices.splice(indexTempEdge, 1);\n }\n }\n\n // _clean temporary nodes\n for (let i = 0; i < this.temporaryIds.nodes.length; i++) {\n delete this.body.nodes[this.temporaryIds.nodes[i]];\n const indexTempNode = this.body.nodeIndices.indexOf(\n this.temporaryIds.nodes[i]\n );\n if (indexTempNode !== -1) {\n this.body.nodeIndices.splice(indexTempNode, 1);\n }\n }\n\n this.temporaryIds = { nodes: [], edges: [] };\n }\n\n // ------------------------------------------ EDIT EDGE FUNCTIONS -----------------------------------------//\n\n /**\n * the touch is used to get the position of the initial click\n *\n * @param {Event} event The event\n * @private\n */\n _controlNodeTouch(event) {\n this.selectionHandler.unselectAll();\n this.lastTouch = this.body.functions.getPointer(event.center);\n this.lastTouch.translation = Object.assign({}, this.body.view.translation); // copy the object\n }\n\n /**\n * the drag start is used to mark one of the control nodes as selected.\n *\n * @private\n */\n _controlNodeDragStart() {\n const pointer = this.lastTouch;\n const pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n const from = this.body.nodes[this.temporaryIds.nodes[0]];\n const to = this.body.nodes[this.temporaryIds.nodes[1]];\n const edge = this.body.edges[this.edgeBeingEditedId];\n this.selectedControlNode = undefined;\n\n const fromSelect = from.isOverlappingWith(pointerObj);\n const toSelect = to.isOverlappingWith(pointerObj);\n\n if (fromSelect === true) {\n this.selectedControlNode = from;\n edge.edgeType.from = from;\n } else if (toSelect === true) {\n this.selectedControlNode = to;\n edge.edgeType.to = to;\n }\n\n // we use the selection to find the node that is being dragged. We explicitly select it here.\n if (this.selectedControlNode !== undefined) {\n this.selectionHandler.selectObject(this.selectedControlNode);\n }\n\n this.body.emitter.emit(\"_redraw\");\n }\n\n /**\n * dragging the control nodes or the canvas\n *\n * @param {Event} event The event\n * @private\n */\n _controlNodeDrag(event) {\n this.body.emitter.emit(\"disablePhysics\");\n const pointer = this.body.functions.getPointer(event.center);\n const pos = this.canvas.DOMtoCanvas(pointer);\n if (this.selectedControlNode !== undefined) {\n this.selectedControlNode.x = pos.x;\n this.selectedControlNode.y = pos.y;\n } else {\n this.interactionHandler.onDrag(event);\n }\n this.body.emitter.emit(\"_redraw\");\n }\n\n /**\n * connecting or restoring the control nodes.\n *\n * @param {Event} event The event\n * @private\n */\n _controlNodeDragEnd(event) {\n const pointer = this.body.functions.getPointer(event.center);\n const pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n const edge = this.body.edges[this.edgeBeingEditedId];\n // if the node that was dragged is not a control node, return\n if (this.selectedControlNode === undefined) {\n return;\n }\n\n // we use the selection to find the node that is being dragged. We explicitly DEselect the control node here.\n this.selectionHandler.unselectAll();\n const overlappingNodeIds =\n this.selectionHandler._getAllNodesOverlappingWith(pointerObj);\n let node = undefined;\n for (let i = overlappingNodeIds.length - 1; i >= 0; i--) {\n if (overlappingNodeIds[i] !== this.selectedControlNode.id) {\n node = this.body.nodes[overlappingNodeIds[i]];\n break;\n }\n }\n // perform the connection\n if (node !== undefined && this.selectedControlNode !== undefined) {\n if (node.isCluster === true) {\n alert(\n this.options.locales[this.options.locale][\"createEdgeError\"] ||\n this.options.locales[\"en\"][\"createEdgeError\"]\n );\n } else {\n const from = this.body.nodes[this.temporaryIds.nodes[0]];\n if (this.selectedControlNode.id === from.id) {\n this._performEditEdge(node.id, edge.to.id);\n } else {\n this._performEditEdge(edge.from.id, node.id);\n }\n }\n } else {\n edge.updateEdgeType();\n this.body.emitter.emit(\"restorePhysics\");\n }\n\n this.body.emitter.emit(\"_redraw\");\n }\n\n // ------------------------------------ END OF EDIT EDGE FUNCTIONS -----------------------------------------//\n\n // ------------------------------------------- ADD EDGE FUNCTIONS -----------------------------------------//\n /**\n * the function bound to the selection event. It checks if you want to connect a cluster and changes the description\n * to walk the user through the process.\n *\n * @param {Event} event\n * @private\n */\n _handleConnect(event) {\n // check to avoid double fireing of this function.\n if (new Date().valueOf() - this.touchTime > 100) {\n this.lastTouch = this.body.functions.getPointer(event.center);\n this.lastTouch.translation = Object.assign(\n {},\n this.body.view.translation\n ); // copy the object\n\n this.interactionHandler.drag.pointer = this.lastTouch; // Drag pointer is not updated when adding edges\n this.interactionHandler.drag.translation = this.lastTouch.translation;\n\n const pointer = this.lastTouch;\n const node = this.selectionHandler.getNodeAt(pointer);\n\n if (node !== undefined) {\n if (node.isCluster === true) {\n alert(\n this.options.locales[this.options.locale][\"createEdgeError\"] ||\n this.options.locales[\"en\"][\"createEdgeError\"]\n );\n } else {\n // create a node the temporary line can look at\n const targetNode = this._getNewTargetNode(node.x, node.y);\n this.body.nodes[targetNode.id] = targetNode;\n this.body.nodeIndices.push(targetNode.id);\n\n // create a temporary edge\n const connectionEdge = this.body.functions.createEdge({\n id: \"connectionEdge\" + randomUUID(),\n from: node.id,\n to: targetNode.id,\n physics: false,\n smooth: {\n enabled: true,\n type: \"continuous\",\n roundness: 0.5,\n },\n });\n this.body.edges[connectionEdge.id] = connectionEdge;\n this.body.edgeIndices.push(connectionEdge.id);\n\n this.temporaryIds.nodes.push(targetNode.id);\n this.temporaryIds.edges.push(connectionEdge.id);\n }\n }\n this.touchTime = new Date().valueOf();\n }\n }\n\n /**\n *\n * @param {Event} event\n * @private\n */\n _dragControlNode(event) {\n const pointer = this.body.functions.getPointer(event.center);\n\n const pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n // remember the edge id\n let connectFromId = undefined;\n if (this.temporaryIds.edges[0] !== undefined) {\n connectFromId = this.body.edges[this.temporaryIds.edges[0]].fromId;\n }\n\n // get the overlapping node but NOT the temporary node;\n const overlappingNodeIds =\n this.selectionHandler._getAllNodesOverlappingWith(pointerObj);\n let node = undefined;\n for (let i = overlappingNodeIds.length - 1; i >= 0; i--) {\n // if the node id is NOT a temporary node, accept the node.\n if (this.temporaryIds.nodes.indexOf(overlappingNodeIds[i]) === -1) {\n node = this.body.nodes[overlappingNodeIds[i]];\n break;\n }\n }\n\n event.controlEdge = { from: connectFromId, to: node ? node.id : undefined };\n this.selectionHandler.generateClickEvent(\n \"controlNodeDragging\",\n event,\n pointer\n );\n\n if (this.temporaryIds.nodes[0] !== undefined) {\n const targetNode = this.body.nodes[this.temporaryIds.nodes[0]]; // there is only one temp node in the add edge mode.\n targetNode.x = this.canvas._XconvertDOMtoCanvas(pointer.x);\n targetNode.y = this.canvas._YconvertDOMtoCanvas(pointer.y);\n this.body.emitter.emit(\"_redraw\");\n } else {\n this.interactionHandler.onDrag(event);\n }\n }\n\n /**\n * Connect the new edge to the target if one exists, otherwise remove temp line\n *\n * @param {Event} event The event\n * @private\n */\n _finishConnect(event) {\n const pointer = this.body.functions.getPointer(event.center);\n const pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n\n // remember the edge id\n let connectFromId = undefined;\n if (this.temporaryIds.edges[0] !== undefined) {\n connectFromId = this.body.edges[this.temporaryIds.edges[0]].fromId;\n }\n\n // get the overlapping node but NOT the temporary node;\n const overlappingNodeIds =\n this.selectionHandler._getAllNodesOverlappingWith(pointerObj);\n let node = undefined;\n for (let i = overlappingNodeIds.length - 1; i >= 0; i--) {\n // if the node id is NOT a temporary node, accept the node.\n if (this.temporaryIds.nodes.indexOf(overlappingNodeIds[i]) === -1) {\n node = this.body.nodes[overlappingNodeIds[i]];\n break;\n }\n }\n\n // clean temporary nodes and edges.\n this._cleanupTemporaryNodesAndEdges();\n\n // perform the connection\n if (node !== undefined) {\n if (node.isCluster === true) {\n alert(\n this.options.locales[this.options.locale][\"createEdgeError\"] ||\n this.options.locales[\"en\"][\"createEdgeError\"]\n );\n } else {\n if (\n this.body.nodes[connectFromId] !== undefined &&\n this.body.nodes[node.id] !== undefined\n ) {\n this._performAddEdge(connectFromId, node.id);\n }\n }\n }\n\n event.controlEdge = { from: connectFromId, to: node ? node.id : undefined };\n this.selectionHandler.generateClickEvent(\n \"controlNodeDragEnd\",\n event,\n pointer\n );\n\n // No need to do _generateclickevent('dragEnd') here, the regular dragEnd event fires.\n this.body.emitter.emit(\"_redraw\");\n }\n\n /**\n *\n * @param {Event} event\n * @private\n */\n _dragStartEdge(event) {\n const pointer = this.lastTouch;\n this.selectionHandler.generateClickEvent(\n \"dragStart\",\n event,\n pointer,\n undefined,\n true\n );\n }\n\n // --------------------------------------- END OF ADD EDGE FUNCTIONS -------------------------------------//\n\n // ------------------------------ Performing all the actual data manipulation ------------------------//\n\n /**\n * Adds a node on the specified location\n *\n * @param {object} clickData\n * @private\n */\n _performAddNode(clickData) {\n const defaultData = {\n id: randomUUID(),\n x: clickData.pointer.canvas.x,\n y: clickData.pointer.canvas.y,\n label: \"new\",\n };\n\n if (typeof this.options.addNode === \"function\") {\n if (this.options.addNode.length === 2) {\n this.options.addNode(defaultData, (finalizedData) => {\n if (\n finalizedData !== null &&\n finalizedData !== undefined &&\n this.inMode === \"addNode\"\n ) {\n // if for whatever reason the mode has changes (due to dataset change) disregard the callback\n this.body.data.nodes.getDataSet().add(finalizedData);\n }\n this.showManipulatorToolbar();\n });\n } else {\n this.showManipulatorToolbar();\n throw new Error(\n \"The function for add does not support two arguments (data,callback)\"\n );\n }\n } else {\n this.body.data.nodes.getDataSet().add(defaultData);\n this.showManipulatorToolbar();\n }\n }\n\n /**\n * connect two nodes with a new edge.\n *\n * @param {Node.id} sourceNodeId\n * @param {Node.id} targetNodeId\n * @private\n */\n _performAddEdge(sourceNodeId, targetNodeId) {\n const defaultData = { from: sourceNodeId, to: targetNodeId };\n if (typeof this.options.addEdge === \"function\") {\n if (this.options.addEdge.length === 2) {\n this.options.addEdge(defaultData, (finalizedData) => {\n if (\n finalizedData !== null &&\n finalizedData !== undefined &&\n this.inMode === \"addEdge\"\n ) {\n // if for whatever reason the mode has changes (due to dataset change) disregard the callback\n this.body.data.edges.getDataSet().add(finalizedData);\n this.selectionHandler.unselectAll();\n this.showManipulatorToolbar();\n }\n });\n } else {\n throw new Error(\n \"The function for connect does not support two arguments (data,callback)\"\n );\n }\n } else {\n this.body.data.edges.getDataSet().add(defaultData);\n this.selectionHandler.unselectAll();\n this.showManipulatorToolbar();\n }\n }\n\n /**\n * connect two nodes with a new edge.\n *\n * @param {Node.id} sourceNodeId\n * @param {Node.id} targetNodeId\n * @private\n */\n _performEditEdge(sourceNodeId, targetNodeId) {\n const defaultData = {\n id: this.edgeBeingEditedId,\n from: sourceNodeId,\n to: targetNodeId,\n label: this.body.data.edges.get(this.edgeBeingEditedId).label,\n };\n let eeFunct = this.options.editEdge;\n if (typeof eeFunct === \"object\") {\n eeFunct = eeFunct.editWithoutDrag;\n }\n if (typeof eeFunct === \"function\") {\n if (eeFunct.length === 2) {\n eeFunct(defaultData, (finalizedData) => {\n if (\n finalizedData === null ||\n finalizedData === undefined ||\n this.inMode !== \"editEdge\"\n ) {\n // if for whatever reason the mode has changes (due to dataset change) disregard the callback) {\n this.body.edges[defaultData.id].updateEdgeType();\n this.body.emitter.emit(\"_redraw\");\n this.showManipulatorToolbar();\n } else {\n this.body.data.edges.getDataSet().update(finalizedData);\n this.selectionHandler.unselectAll();\n this.showManipulatorToolbar();\n }\n });\n } else {\n throw new Error(\n \"The function for edit does not support two arguments (data, callback)\"\n );\n }\n } else {\n this.body.data.edges.getDataSet().update(defaultData);\n this.selectionHandler.unselectAll();\n this.showManipulatorToolbar();\n }\n }\n}\n\nexport default ManipulationSystem;\n","import {\n ConfiguratorConfig,\n ConfiguratorHideOption,\n OptionsConfig,\n} from \"vis-util/esnext\";\n\n/**\n * This object contains all possible options. It will check if the types are correct, if required if the option is one\n * of the allowed values.\n *\n * __any__ means that the name of the property does not matter.\n * __type__ is a required field for all objects and contains the allowed types of all objects\n */\nconst string = \"string\";\nconst bool = \"boolean\";\nconst number = \"number\";\nconst array = \"array\";\nconst object = \"object\"; // should only be in a __type__ property\nconst dom = \"dom\";\nconst any = \"any\";\n\n// List of endpoints\nconst endPoints = [\n \"arrow\",\n \"bar\",\n \"box\",\n \"circle\",\n \"crow\",\n \"curve\",\n \"diamond\",\n \"image\",\n \"inv_curve\",\n \"inv_triangle\",\n \"triangle\",\n \"vee\",\n];\n\n/* eslint-disable @typescript-eslint/naming-convention -- The __*__ format is used to prevent collisions with actual option names. */\nconst nodeOptions: OptionsConfig = {\n borderWidth: { number },\n borderWidthSelected: { number, undefined: \"undefined\" },\n brokenImage: { string, undefined: \"undefined\" },\n chosen: {\n label: { boolean: bool, function: \"function\" },\n node: { boolean: bool, function: \"function\" },\n __type__: { object, boolean: bool },\n },\n color: {\n border: { string },\n background: { string },\n highlight: {\n border: { string },\n background: { string },\n __type__: { object, string },\n },\n hover: {\n border: { string },\n background: { string },\n __type__: { object, string },\n },\n __type__: { object, string },\n },\n opacity: { number, undefined: \"undefined\" },\n fixed: {\n x: { boolean: bool },\n y: { boolean: bool },\n __type__: { object, boolean: bool },\n },\n font: {\n align: { string },\n color: { string },\n size: { number }, // px\n face: { string },\n background: { string },\n strokeWidth: { number }, // px\n strokeColor: { string },\n vadjust: { number },\n multi: { boolean: bool, string },\n bold: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n boldital: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n ital: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n mono: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n __type__: { object, string },\n },\n group: { string, number, undefined: \"undefined\" },\n heightConstraint: {\n minimum: { number },\n valign: { string },\n __type__: { object, boolean: bool, number },\n },\n hidden: { boolean: bool },\n icon: {\n face: { string },\n code: { string }, //'\\uf007',\n size: { number }, //50,\n color: { string },\n weight: { string, number },\n __type__: { object },\n },\n id: { string, number },\n image: {\n selected: { string, undefined: \"undefined\" }, // --> URL\n unselected: { string, undefined: \"undefined\" }, // --> URL\n __type__: { object, string },\n },\n imagePadding: {\n top: { number },\n right: { number },\n bottom: { number },\n left: { number },\n __type__: { object, number },\n },\n label: { string, undefined: \"undefined\" },\n labelHighlightBold: { boolean: bool },\n level: { number, undefined: \"undefined\" },\n margin: {\n top: { number },\n right: { number },\n bottom: { number },\n left: { number },\n __type__: { object, number },\n },\n mass: { number },\n physics: { boolean: bool },\n scaling: {\n min: { number },\n max: { number },\n label: {\n enabled: { boolean: bool },\n min: { number },\n max: { number },\n maxVisible: { number },\n drawThreshold: { number },\n __type__: { object, boolean: bool },\n },\n customScalingFunction: { function: \"function\" },\n __type__: { object },\n },\n shadow: {\n enabled: { boolean: bool },\n color: { string },\n size: { number },\n x: { number },\n y: { number },\n __type__: { object, boolean: bool },\n },\n shape: {\n string: [\n \"custom\",\n \"ellipse\",\n \"circle\",\n \"database\",\n \"box\",\n \"text\",\n \"image\",\n \"circularImage\",\n \"diamond\",\n \"dot\",\n \"star\",\n \"triangle\",\n \"triangleDown\",\n \"square\",\n \"icon\",\n \"hexagon\",\n ],\n },\n ctxRenderer: { function: \"function\" },\n shapeProperties: {\n borderDashes: { boolean: bool, array },\n borderRadius: { number },\n interpolation: { boolean: bool },\n useImageSize: { boolean: bool },\n useBorderWithImage: { boolean: bool },\n coordinateOrigin: { string: [\"center\", \"top-left\"] },\n __type__: { object },\n },\n size: { number },\n title: { string, dom, undefined: \"undefined\" },\n value: { number, undefined: \"undefined\" },\n widthConstraint: {\n minimum: { number },\n maximum: { number },\n __type__: { object, boolean: bool, number },\n },\n x: { number },\n y: { number },\n __type__: { object },\n};\nconst allOptions: OptionsConfig = {\n configure: {\n enabled: { boolean: bool },\n filter: { boolean: bool, string, array, function: \"function\" },\n container: { dom },\n showButton: { boolean: bool },\n __type__: { object, boolean: bool, string, array, function: \"function\" },\n },\n edges: {\n arrows: {\n to: {\n enabled: { boolean: bool },\n scaleFactor: { number },\n type: { string: endPoints },\n imageHeight: { number },\n imageWidth: { number },\n src: { string },\n __type__: { object, boolean: bool },\n },\n middle: {\n enabled: { boolean: bool },\n scaleFactor: { number },\n type: { string: endPoints },\n imageWidth: { number },\n imageHeight: { number },\n src: { string },\n __type__: { object, boolean: bool },\n },\n from: {\n enabled: { boolean: bool },\n scaleFactor: { number },\n type: { string: endPoints },\n imageWidth: { number },\n imageHeight: { number },\n src: { string },\n __type__: { object, boolean: bool },\n },\n __type__: { string: [\"from\", \"to\", \"middle\"], object },\n },\n endPointOffset: {\n from: {\n number: number,\n },\n to: {\n number: number,\n },\n __type__: {\n object: object,\n number: number,\n },\n },\n arrowStrikethrough: { boolean: bool },\n background: {\n enabled: { boolean: bool },\n color: { string },\n size: { number },\n dashes: { boolean: bool, array },\n __type__: { object, boolean: bool },\n },\n chosen: {\n label: { boolean: bool, function: \"function\" },\n edge: { boolean: bool, function: \"function\" },\n __type__: { object, boolean: bool },\n },\n color: {\n color: { string },\n highlight: { string },\n hover: { string },\n inherit: { string: [\"from\", \"to\", \"both\"], boolean: bool },\n opacity: { number },\n __type__: { object, string },\n },\n dashes: { boolean: bool, array },\n font: {\n color: { string },\n size: { number }, // px\n face: { string },\n background: { string },\n strokeWidth: { number }, // px\n strokeColor: { string },\n align: { string: [\"horizontal\", \"top\", \"middle\", \"bottom\"] },\n vadjust: { number },\n multi: { boolean: bool, string },\n bold: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n boldital: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n ital: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n mono: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n __type__: { object, string },\n },\n hidden: { boolean: bool },\n hoverWidth: { function: \"function\", number },\n label: { string, undefined: \"undefined\" },\n labelHighlightBold: { boolean: bool },\n length: { number, undefined: \"undefined\" },\n physics: { boolean: bool },\n scaling: {\n min: { number },\n max: { number },\n label: {\n enabled: { boolean: bool },\n min: { number },\n max: { number },\n maxVisible: { number },\n drawThreshold: { number },\n __type__: { object, boolean: bool },\n },\n customScalingFunction: { function: \"function\" },\n __type__: { object },\n },\n selectionWidth: { function: \"function\", number },\n selfReferenceSize: { number },\n selfReference: {\n size: { number },\n angle: { number },\n renderBehindTheNode: { boolean: bool },\n __type__: { object },\n },\n shadow: {\n enabled: { boolean: bool },\n color: { string },\n size: { number },\n x: { number },\n y: { number },\n __type__: { object, boolean: bool },\n },\n smooth: {\n enabled: { boolean: bool },\n type: {\n string: [\n \"dynamic\",\n \"continuous\",\n \"discrete\",\n \"diagonalCross\",\n \"straightCross\",\n \"horizontal\",\n \"vertical\",\n \"curvedCW\",\n \"curvedCCW\",\n \"cubicBezier\",\n ],\n },\n roundness: { number },\n forceDirection: {\n string: [\"horizontal\", \"vertical\", \"none\"],\n boolean: bool,\n },\n __type__: { object, boolean: bool },\n },\n title: { string, undefined: \"undefined\" },\n width: { number },\n widthConstraint: {\n maximum: { number },\n __type__: { object, boolean: bool, number },\n },\n value: { number, undefined: \"undefined\" },\n __type__: { object },\n },\n groups: {\n useDefaultGroups: { boolean: bool },\n __any__: nodeOptions,\n __type__: { object },\n },\n interaction: {\n dragNodes: { boolean: bool },\n dragView: { boolean: bool },\n hideEdgesOnDrag: { boolean: bool },\n hideEdgesOnZoom: { boolean: bool },\n hideNodesOnDrag: { boolean: bool },\n hover: { boolean: bool },\n keyboard: {\n enabled: { boolean: bool },\n speed: {\n x: { number },\n y: { number },\n zoom: { number },\n __type__: { object },\n },\n bindToWindow: { boolean: bool },\n autoFocus: { boolean: bool },\n __type__: { object, boolean: bool },\n },\n multiselect: { boolean: bool },\n navigationButtons: { boolean: bool },\n selectable: { boolean: bool },\n selectConnectedEdges: { boolean: bool },\n hoverConnectedEdges: { boolean: bool },\n tooltipDelay: { number },\n zoomView: { boolean: bool },\n zoomSpeed: { number },\n __type__: { object },\n },\n layout: {\n randomSeed: { undefined: \"undefined\", number, string },\n improvedLayout: { boolean: bool },\n clusterThreshold: { number },\n hierarchical: {\n enabled: { boolean: bool },\n levelSeparation: { number },\n nodeSpacing: { number },\n treeSpacing: { number },\n blockShifting: { boolean: bool },\n edgeMinimization: { boolean: bool },\n parentCentralization: { boolean: bool },\n direction: { string: [\"UD\", \"DU\", \"LR\", \"RL\"] }, // UD, DU, LR, RL\n sortMethod: { string: [\"hubsize\", \"directed\"] }, // hubsize, directed\n shakeTowards: { string: [\"leaves\", \"roots\"] }, // leaves, roots\n __type__: { object, boolean: bool },\n },\n __type__: { object },\n },\n manipulation: {\n enabled: { boolean: bool },\n initiallyActive: { boolean: bool },\n addNode: { boolean: bool, function: \"function\" },\n addEdge: { boolean: bool, function: \"function\" },\n editNode: { function: \"function\" },\n editEdge: {\n editWithoutDrag: { function: \"function\" },\n __type__: { object, boolean: bool, function: \"function\" },\n },\n deleteNode: { boolean: bool, function: \"function\" },\n deleteEdge: { boolean: bool, function: \"function\" },\n controlNodeStyle: nodeOptions,\n __type__: { object, boolean: bool },\n },\n nodes: nodeOptions,\n physics: {\n enabled: { boolean: bool },\n barnesHut: {\n theta: { number },\n gravitationalConstant: { number },\n centralGravity: { number },\n springLength: { number },\n springConstant: { number },\n damping: { number },\n avoidOverlap: { number },\n __type__: { object },\n },\n forceAtlas2Based: {\n theta: { number },\n gravitationalConstant: { number },\n centralGravity: { number },\n springLength: { number },\n springConstant: { number },\n damping: { number },\n avoidOverlap: { number },\n __type__: { object },\n },\n repulsion: {\n centralGravity: { number },\n springLength: { number },\n springConstant: { number },\n nodeDistance: { number },\n damping: { number },\n __type__: { object },\n },\n hierarchicalRepulsion: {\n centralGravity: { number },\n springLength: { number },\n springConstant: { number },\n nodeDistance: { number },\n damping: { number },\n avoidOverlap: { number },\n __type__: { object },\n },\n maxVelocity: { number },\n minVelocity: { number }, // px/s\n solver: {\n string: [\n \"barnesHut\",\n \"repulsion\",\n \"hierarchicalRepulsion\",\n \"forceAtlas2Based\",\n ],\n },\n stabilization: {\n enabled: { boolean: bool },\n iterations: { number }, // maximum number of iteration to stabilize\n updateInterval: { number },\n onlyDynamicEdges: { boolean: bool },\n fit: { boolean: bool },\n __type__: { object, boolean: bool },\n },\n timestep: { number },\n adaptiveTimestep: { boolean: bool },\n wind: {\n x: { number },\n y: { number },\n __type__: { object },\n },\n __type__: { object, boolean: bool },\n },\n\n //globals :\n autoResize: { boolean: bool },\n clickToUse: { boolean: bool },\n locale: { string },\n locales: {\n __any__: { any },\n __type__: { object },\n },\n height: { string },\n width: { string },\n __type__: { object },\n};\n/* eslint-enable @typescript-eslint/naming-convention */\n\n/**\n * This provides ranges, initial values, steps and dropdown menu choices for the\n * configuration.\n *\n * @remarks\n * Checkbox: `boolean`\n * The value supllied will be used as the initial value.\n *\n * Text field: `string`\n * The passed text will be used as the initial value. Any text will be\n * accepted afterwards.\n *\n * Number range: `[number, number, number, number]`\n * The meanings are `[initial value, min, max, step]`.\n *\n * Dropdown: `[Exclude, ...(string | number | boolean)[]]`\n * Translations for people with poor understanding of TypeScript: the first\n * value always has to be a string but never `\"color\"`, the rest can be any\n * combination of strings, numbers and booleans.\n *\n * Color picker: `[\"color\", string]`\n * The first value says this will be a color picker not a dropdown menu. The\n * next value is the initial color.\n */\nconst configureOptions: ConfiguratorConfig = {\n nodes: {\n borderWidth: [1, 0, 10, 1],\n borderWidthSelected: [2, 0, 10, 1],\n color: {\n border: [\"color\", \"#2B7CE9\"],\n background: [\"color\", \"#97C2FC\"],\n highlight: {\n border: [\"color\", \"#2B7CE9\"],\n background: [\"color\", \"#D2E5FF\"],\n },\n hover: {\n border: [\"color\", \"#2B7CE9\"],\n background: [\"color\", \"#D2E5FF\"],\n },\n },\n opacity: [0, 0, 1, 0.1],\n fixed: {\n x: false,\n y: false,\n },\n font: {\n color: [\"color\", \"#343434\"],\n size: [14, 0, 100, 1], // px\n face: [\"arial\", \"verdana\", \"tahoma\"],\n background: [\"color\", \"none\"],\n strokeWidth: [0, 0, 50, 1], // px\n strokeColor: [\"color\", \"#ffffff\"],\n },\n //group: 'string',\n hidden: false,\n labelHighlightBold: true,\n //icon: {\n // face: 'string', //'FontAwesome',\n // code: 'string', //'\\uf007',\n // size: [50, 0, 200, 1], //50,\n // color: ['color','#2B7CE9'] //'#aa00ff'\n //},\n //image: 'string', // --> URL\n physics: true,\n scaling: {\n min: [10, 0, 200, 1],\n max: [30, 0, 200, 1],\n label: {\n enabled: false,\n min: [14, 0, 200, 1],\n max: [30, 0, 200, 1],\n maxVisible: [30, 0, 200, 1],\n drawThreshold: [5, 0, 20, 1],\n },\n },\n shadow: {\n enabled: false,\n color: \"rgba(0,0,0,0.5)\",\n size: [10, 0, 20, 1],\n x: [5, -30, 30, 1],\n y: [5, -30, 30, 1],\n },\n shape: [\n \"ellipse\",\n \"box\",\n \"circle\",\n \"database\",\n \"diamond\",\n \"dot\",\n \"square\",\n \"star\",\n \"text\",\n \"triangle\",\n \"triangleDown\",\n \"hexagon\",\n ],\n shapeProperties: {\n borderDashes: false,\n borderRadius: [6, 0, 20, 1],\n interpolation: true,\n useImageSize: false,\n },\n size: [25, 0, 200, 1],\n },\n edges: {\n arrows: {\n to: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: \"arrow\" },\n middle: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: \"arrow\" },\n from: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: \"arrow\" },\n },\n endPointOffset: {\n from: [0, -10, 10, 1],\n to: [0, -10, 10, 1],\n },\n arrowStrikethrough: true,\n color: {\n color: [\"color\", \"#848484\"],\n highlight: [\"color\", \"#848484\"],\n hover: [\"color\", \"#848484\"],\n inherit: [\"from\", \"to\", \"both\", true, false],\n opacity: [1, 0, 1, 0.05],\n },\n dashes: false,\n font: {\n color: [\"color\", \"#343434\"],\n size: [14, 0, 100, 1], // px\n face: [\"arial\", \"verdana\", \"tahoma\"],\n background: [\"color\", \"none\"],\n strokeWidth: [2, 0, 50, 1], // px\n strokeColor: [\"color\", \"#ffffff\"],\n align: [\"horizontal\", \"top\", \"middle\", \"bottom\"],\n },\n hidden: false,\n hoverWidth: [1.5, 0, 5, 0.1],\n labelHighlightBold: true,\n physics: true,\n scaling: {\n min: [1, 0, 100, 1],\n max: [15, 0, 100, 1],\n label: {\n enabled: true,\n min: [14, 0, 200, 1],\n max: [30, 0, 200, 1],\n maxVisible: [30, 0, 200, 1],\n drawThreshold: [5, 0, 20, 1],\n },\n },\n selectionWidth: [1.5, 0, 5, 0.1],\n selfReferenceSize: [20, 0, 200, 1],\n selfReference: {\n size: [20, 0, 200, 1],\n angle: [Math.PI / 2, -6 * Math.PI, 6 * Math.PI, Math.PI / 8],\n renderBehindTheNode: true,\n },\n shadow: {\n enabled: false,\n color: \"rgba(0,0,0,0.5)\",\n size: [10, 0, 20, 1],\n x: [5, -30, 30, 1],\n y: [5, -30, 30, 1],\n },\n smooth: {\n enabled: true,\n type: [\n \"dynamic\",\n \"continuous\",\n \"discrete\",\n \"diagonalCross\",\n \"straightCross\",\n \"horizontal\",\n \"vertical\",\n \"curvedCW\",\n \"curvedCCW\",\n \"cubicBezier\",\n ],\n forceDirection: [\"horizontal\", \"vertical\", \"none\"],\n roundness: [0.5, 0, 1, 0.05],\n },\n width: [1, 0, 30, 1],\n },\n layout: {\n //randomSeed: [0, 0, 500, 1],\n //improvedLayout: true,\n hierarchical: {\n enabled: false,\n levelSeparation: [150, 20, 500, 5],\n nodeSpacing: [100, 20, 500, 5],\n treeSpacing: [200, 20, 500, 5],\n blockShifting: true,\n edgeMinimization: true,\n parentCentralization: true,\n direction: [\"UD\", \"DU\", \"LR\", \"RL\"], // UD, DU, LR, RL\n sortMethod: [\"hubsize\", \"directed\"], // hubsize, directed\n shakeTowards: [\"leaves\", \"roots\"], // leaves, roots\n },\n },\n interaction: {\n dragNodes: true,\n dragView: true,\n hideEdgesOnDrag: false,\n hideEdgesOnZoom: false,\n hideNodesOnDrag: false,\n hover: false,\n keyboard: {\n enabled: false,\n speed: {\n x: [10, 0, 40, 1],\n y: [10, 0, 40, 1],\n zoom: [0.02, 0, 0.1, 0.005],\n },\n bindToWindow: true,\n autoFocus: true,\n },\n multiselect: false,\n navigationButtons: false,\n selectable: true,\n selectConnectedEdges: true,\n hoverConnectedEdges: true,\n tooltipDelay: [300, 0, 1000, 25],\n zoomView: true,\n zoomSpeed: [1, 0.1, 2, 0.1],\n },\n manipulation: {\n enabled: false,\n initiallyActive: false,\n },\n physics: {\n enabled: true,\n barnesHut: {\n theta: [0.5, 0.1, 1, 0.05],\n gravitationalConstant: [-2000, -30000, 0, 50],\n centralGravity: [0.3, 0, 10, 0.05],\n springLength: [95, 0, 500, 5],\n springConstant: [0.04, 0, 1.2, 0.005],\n damping: [0.09, 0, 1, 0.01],\n avoidOverlap: [0, 0, 1, 0.01],\n },\n forceAtlas2Based: {\n theta: [0.5, 0.1, 1, 0.05],\n gravitationalConstant: [-50, -500, 0, 1],\n centralGravity: [0.01, 0, 1, 0.005],\n springLength: [95, 0, 500, 5],\n springConstant: [0.08, 0, 1.2, 0.005],\n damping: [0.4, 0, 1, 0.01],\n avoidOverlap: [0, 0, 1, 0.01],\n },\n repulsion: {\n centralGravity: [0.2, 0, 10, 0.05],\n springLength: [200, 0, 500, 5],\n springConstant: [0.05, 0, 1.2, 0.005],\n nodeDistance: [100, 0, 500, 5],\n damping: [0.09, 0, 1, 0.01],\n },\n hierarchicalRepulsion: {\n centralGravity: [0.2, 0, 10, 0.05],\n springLength: [100, 0, 500, 5],\n springConstant: [0.01, 0, 1.2, 0.005],\n nodeDistance: [120, 0, 500, 5],\n damping: [0.09, 0, 1, 0.01],\n avoidOverlap: [0, 0, 1, 0.01],\n },\n maxVelocity: [50, 0, 150, 1],\n minVelocity: [0.1, 0.01, 0.5, 0.01],\n solver: [\n \"barnesHut\",\n \"forceAtlas2Based\",\n \"repulsion\",\n \"hierarchicalRepulsion\",\n ],\n timestep: [0.5, 0.01, 1, 0.01],\n wind: {\n x: [0, -10, 10, 0.1],\n y: [0, -10, 10, 0.1],\n },\n //adaptiveTimestep: true\n },\n} as const;\n\nexport const configuratorHideOption: ConfiguratorHideOption = (\n parentPath,\n optionName,\n options\n): boolean => {\n if (\n parentPath.includes(\"physics\") &&\n (configureOptions as any).physics.solver.includes(optionName) &&\n options.physics.solver !== optionName &&\n optionName !== \"wind\"\n ) {\n return true;\n }\n\n return false;\n};\n\nexport { allOptions, configureOptions };\n","/**\n * The Floyd–Warshall algorithm is an algorithm for finding shortest paths in\n * a weighted graph with positive or negative edge weights (but with no negative\n * cycles). - https://en.wikipedia.org/wiki/Floyd–Warshall_algorithm\n */\nclass FloydWarshall {\n /**\n * @ignore\n */\n constructor() {}\n\n /**\n *\n * @param {object} body\n * @param {Array.} nodesArray\n * @param {Array.} edgesArray\n * @returns {{}}\n */\n getDistances(body, nodesArray, edgesArray) {\n const D_matrix = {};\n const edges = body.edges;\n\n // prepare matrix with large numbers\n for (let i = 0; i < nodesArray.length; i++) {\n const node = nodesArray[i];\n const cell = {};\n D_matrix[node] = cell;\n for (let j = 0; j < nodesArray.length; j++) {\n cell[nodesArray[j]] = i == j ? 0 : 1e9;\n }\n }\n\n // put the weights for the edges in. This assumes unidirectionality.\n for (let i = 0; i < edgesArray.length; i++) {\n const edge = edges[edgesArray[i]];\n // edge has to be connected if it counts to the distances. If it is connected to inner clusters it will crash so we also check if it is in the D_matrix\n if (\n edge.connected === true &&\n D_matrix[edge.fromId] !== undefined &&\n D_matrix[edge.toId] !== undefined\n ) {\n D_matrix[edge.fromId][edge.toId] = 1;\n D_matrix[edge.toId][edge.fromId] = 1;\n }\n }\n\n const nodeCount = nodesArray.length;\n\n // Adapted FloydWarshall based on unidirectionality to greatly reduce complexity.\n for (let k = 0; k < nodeCount; k++) {\n const knode = nodesArray[k];\n const kcolm = D_matrix[knode];\n for (let i = 0; i < nodeCount - 1; i++) {\n const inode = nodesArray[i];\n const icolm = D_matrix[inode];\n for (let j = i + 1; j < nodeCount; j++) {\n const jnode = nodesArray[j];\n const jcolm = D_matrix[jnode];\n\n const val = Math.min(icolm[jnode], icolm[knode] + kcolm[jnode]);\n icolm[jnode] = val;\n jcolm[inode] = val;\n }\n }\n }\n\n return D_matrix;\n }\n}\n\nexport default FloydWarshall;\n","// distance finding algorithm\nimport FloydWarshall from \"./components/algorithms/FloydWarshall.js\";\n\n/**\n * KamadaKawai positions the nodes initially based on\n *\n * \"AN ALGORITHM FOR DRAWING GENERAL UNDIRECTED GRAPHS\"\n * -- Tomihisa KAMADA and Satoru KAWAI in 1989\n *\n * Possible optimizations in the distance calculation can be implemented.\n */\nclass KamadaKawai {\n /**\n * @param {object} body\n * @param {number} edgeLength\n * @param {number} edgeStrength\n */\n constructor(body, edgeLength, edgeStrength) {\n this.body = body;\n this.springLength = edgeLength;\n this.springConstant = edgeStrength;\n this.distanceSolver = new FloydWarshall();\n }\n\n /**\n * Not sure if needed but can be used to update the spring length and spring constant\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options) {\n if (options.springLength) {\n this.springLength = options.springLength;\n }\n if (options.springConstant) {\n this.springConstant = options.springConstant;\n }\n }\n }\n\n /**\n * Position the system\n *\n * @param {Array.} nodesArray\n * @param {Array.} edgesArray\n * @param {boolean} [ignoreClusters=false]\n */\n solve(nodesArray, edgesArray, ignoreClusters = false) {\n // get distance matrix\n const D_matrix = this.distanceSolver.getDistances(\n this.body,\n nodesArray,\n edgesArray\n ); // distance matrix\n\n // get the L Matrix\n this._createL_matrix(D_matrix);\n\n // get the K Matrix\n this._createK_matrix(D_matrix);\n\n // initial E Matrix\n this._createE_matrix();\n\n // calculate positions\n const threshold = 0.01;\n const innerThreshold = 1;\n let iterations = 0;\n const maxIterations = Math.max(\n 1000,\n Math.min(10 * this.body.nodeIndices.length, 6000)\n );\n const maxInnerIterations = 5;\n\n let maxEnergy = 1e9;\n let highE_nodeId = 0,\n dE_dx = 0,\n dE_dy = 0,\n delta_m = 0,\n subIterations = 0;\n\n while (maxEnergy > threshold && iterations < maxIterations) {\n iterations += 1;\n [highE_nodeId, maxEnergy, dE_dx, dE_dy] =\n this._getHighestEnergyNode(ignoreClusters);\n delta_m = maxEnergy;\n subIterations = 0;\n while (delta_m > innerThreshold && subIterations < maxInnerIterations) {\n subIterations += 1;\n this._moveNode(highE_nodeId, dE_dx, dE_dy);\n [delta_m, dE_dx, dE_dy] = this._getEnergy(highE_nodeId);\n }\n }\n }\n\n /**\n * get the node with the highest energy\n *\n * @param {boolean} ignoreClusters\n * @returns {number[]}\n * @private\n */\n _getHighestEnergyNode(ignoreClusters) {\n const nodesArray = this.body.nodeIndices;\n const nodes = this.body.nodes;\n let maxEnergy = 0;\n let maxEnergyNodeId = nodesArray[0];\n let dE_dx_max = 0,\n dE_dy_max = 0;\n\n for (let nodeIdx = 0; nodeIdx < nodesArray.length; nodeIdx++) {\n const m = nodesArray[nodeIdx];\n // by not evaluating nodes with predefined positions we should only move nodes that have no positions.\n if (\n nodes[m].predefinedPosition !== true ||\n (nodes[m].isCluster === true && ignoreClusters === true) ||\n nodes[m].options.fixed.x !== true ||\n nodes[m].options.fixed.y !== true\n ) {\n const [delta_m, dE_dx, dE_dy] = this._getEnergy(m);\n if (maxEnergy < delta_m) {\n maxEnergy = delta_m;\n maxEnergyNodeId = m;\n dE_dx_max = dE_dx;\n dE_dy_max = dE_dy;\n }\n }\n }\n\n return [maxEnergyNodeId, maxEnergy, dE_dx_max, dE_dy_max];\n }\n\n /**\n * calculate the energy of a single node\n *\n * @param {Node.id} m\n * @returns {number[]}\n * @private\n */\n _getEnergy(m) {\n const [dE_dx, dE_dy] = this.E_sums[m];\n const delta_m = Math.sqrt(dE_dx ** 2 + dE_dy ** 2);\n return [delta_m, dE_dx, dE_dy];\n }\n\n /**\n * move the node based on it's energy\n * the dx and dy are calculated from the linear system proposed by Kamada and Kawai\n *\n * @param {number} m\n * @param {number} dE_dx\n * @param {number} dE_dy\n * @private\n */\n _moveNode(m, dE_dx, dE_dy) {\n const nodesArray = this.body.nodeIndices;\n const nodes = this.body.nodes;\n let d2E_dx2 = 0;\n let d2E_dxdy = 0;\n let d2E_dy2 = 0;\n\n const x_m = nodes[m].x;\n const y_m = nodes[m].y;\n const km = this.K_matrix[m];\n const lm = this.L_matrix[m];\n\n for (let iIdx = 0; iIdx < nodesArray.length; iIdx++) {\n const i = nodesArray[iIdx];\n if (i !== m) {\n const x_i = nodes[i].x;\n const y_i = nodes[i].y;\n const kmat = km[i];\n const lmat = lm[i];\n const denominator = 1.0 / ((x_m - x_i) ** 2 + (y_m - y_i) ** 2) ** 1.5;\n d2E_dx2 += kmat * (1 - lmat * (y_m - y_i) ** 2 * denominator);\n d2E_dxdy += kmat * (lmat * (x_m - x_i) * (y_m - y_i) * denominator);\n d2E_dy2 += kmat * (1 - lmat * (x_m - x_i) ** 2 * denominator);\n }\n }\n // make the variable names easier to make the solving of the linear system easier to read\n const A = d2E_dx2,\n B = d2E_dxdy,\n C = dE_dx,\n D = d2E_dy2,\n E = dE_dy;\n\n // solve the linear system for dx and dy\n const dy = (C / A + E / B) / (B / A - D / B);\n const dx = -(B * dy + C) / A;\n\n // move the node\n nodes[m].x += dx;\n nodes[m].y += dy;\n\n // Recalculate E_matrix (should be incremental)\n this._updateE_matrix(m);\n }\n\n /**\n * Create the L matrix: edge length times shortest path\n *\n * @param {object} D_matrix\n * @private\n */\n _createL_matrix(D_matrix) {\n const nodesArray = this.body.nodeIndices;\n const edgeLength = this.springLength;\n\n this.L_matrix = [];\n for (let i = 0; i < nodesArray.length; i++) {\n this.L_matrix[nodesArray[i]] = {};\n for (let j = 0; j < nodesArray.length; j++) {\n this.L_matrix[nodesArray[i]][nodesArray[j]] =\n edgeLength * D_matrix[nodesArray[i]][nodesArray[j]];\n }\n }\n }\n\n /**\n * Create the K matrix: spring constants times shortest path\n *\n * @param {object} D_matrix\n * @private\n */\n _createK_matrix(D_matrix) {\n const nodesArray = this.body.nodeIndices;\n const edgeStrength = this.springConstant;\n\n this.K_matrix = [];\n for (let i = 0; i < nodesArray.length; i++) {\n this.K_matrix[nodesArray[i]] = {};\n for (let j = 0; j < nodesArray.length; j++) {\n this.K_matrix[nodesArray[i]][nodesArray[j]] =\n edgeStrength * D_matrix[nodesArray[i]][nodesArray[j]] ** -2;\n }\n }\n }\n\n /**\n * Create matrix with all energies between nodes\n *\n * @private\n */\n _createE_matrix() {\n const nodesArray = this.body.nodeIndices;\n const nodes = this.body.nodes;\n this.E_matrix = {};\n this.E_sums = {};\n for (let mIdx = 0; mIdx < nodesArray.length; mIdx++) {\n this.E_matrix[nodesArray[mIdx]] = [];\n }\n for (let mIdx = 0; mIdx < nodesArray.length; mIdx++) {\n const m = nodesArray[mIdx];\n const x_m = nodes[m].x;\n const y_m = nodes[m].y;\n let dE_dx = 0;\n let dE_dy = 0;\n for (let iIdx = mIdx; iIdx < nodesArray.length; iIdx++) {\n const i = nodesArray[iIdx];\n if (i !== m) {\n const x_i = nodes[i].x;\n const y_i = nodes[i].y;\n const denominator =\n 1.0 / Math.sqrt((x_m - x_i) ** 2 + (y_m - y_i) ** 2);\n this.E_matrix[m][iIdx] = [\n this.K_matrix[m][i] *\n (x_m - x_i - this.L_matrix[m][i] * (x_m - x_i) * denominator),\n this.K_matrix[m][i] *\n (y_m - y_i - this.L_matrix[m][i] * (y_m - y_i) * denominator),\n ];\n this.E_matrix[i][mIdx] = this.E_matrix[m][iIdx];\n dE_dx += this.E_matrix[m][iIdx][0];\n dE_dy += this.E_matrix[m][iIdx][1];\n }\n }\n //Store sum\n this.E_sums[m] = [dE_dx, dE_dy];\n }\n }\n\n /**\n * Update method, just doing single column (rows are auto-updated) (update all sums)\n *\n * @param {number} m\n * @private\n */\n _updateE_matrix(m) {\n const nodesArray = this.body.nodeIndices;\n const nodes = this.body.nodes;\n const colm = this.E_matrix[m];\n const kcolm = this.K_matrix[m];\n const lcolm = this.L_matrix[m];\n const x_m = nodes[m].x;\n const y_m = nodes[m].y;\n let dE_dx = 0;\n let dE_dy = 0;\n for (let iIdx = 0; iIdx < nodesArray.length; iIdx++) {\n const i = nodesArray[iIdx];\n if (i !== m) {\n //Keep old energy value for sum modification below\n const cell = colm[iIdx];\n const oldDx = cell[0];\n const oldDy = cell[1];\n\n //Calc new energy:\n const x_i = nodes[i].x;\n const y_i = nodes[i].y;\n const denominator =\n 1.0 / Math.sqrt((x_m - x_i) ** 2 + (y_m - y_i) ** 2);\n const dx =\n kcolm[i] * (x_m - x_i - lcolm[i] * (x_m - x_i) * denominator);\n const dy =\n kcolm[i] * (y_m - y_i - lcolm[i] * (y_m - y_i) * denominator);\n colm[iIdx] = [dx, dy];\n dE_dx += dx;\n dE_dy += dy;\n\n //add new energy to sum of each column\n const sum = this.E_sums[i];\n sum[0] += dx - oldDx;\n sum[1] += dy - oldDy;\n }\n }\n //Store sum at -1 index\n this.E_sums[m] = [dE_dx, dE_dy];\n }\n}\n\nexport default KamadaKawai;\n","// Load custom shapes into CanvasRenderingContext2D\nimport \"./shapes\";\n\nimport \"vis-util/esnext/styles/activator.css\";\nimport \"vis-util/esnext/styles/bootstrap.css\";\nimport \"vis-util/esnext/styles/color-picker.css\";\nimport \"vis-util/esnext/styles/configurator.css\";\nimport \"vis-util/esnext/styles/popup.css\";\n\nimport Emitter from \"component-emitter\";\nimport {\n Activator,\n Configurator,\n VALIDATOR_PRINT_STYLE,\n Validator,\n deepExtend,\n recursiveDOMDelete,\n selectiveDeepExtend,\n} from \"vis-util/esnext\";\nimport { DOTToGraph } from \"./dotparser\";\nimport { parseGephi } from \"./gephiParser\";\nimport * as locales from \"./locales\";\nimport { normalizeLanguageCode } from \"./locale-utils\";\n\nimport Images from \"./Images\";\nimport { Groups } from \"./modules/Groups\";\nimport NodesHandler from \"./modules/NodesHandler\";\nimport EdgesHandler from \"./modules/EdgesHandler\";\nimport PhysicsEngine from \"./modules/PhysicsEngine\";\nimport ClusterEngine from \"./modules/Clustering\";\nimport CanvasRenderer from \"./modules/CanvasRenderer\";\nimport Canvas from \"./modules/Canvas\";\nimport View from \"./modules/View\";\nimport InteractionHandler from \"./modules/InteractionHandler\";\nimport SelectionHandler from \"./modules/SelectionHandler\";\nimport LayoutEngine from \"./modules/LayoutEngine\";\nimport ManipulationSystem from \"./modules/ManipulationSystem\";\nimport {\n allOptions,\n configureOptions,\n configuratorHideOption,\n} from \"./options\";\nimport KamadaKawai from \"./modules/KamadaKawai.js\";\n\n/**\n * Create a network visualization, displaying nodes and edges.\n *\n * @param {Element} container The DOM element in which the Network will\n * be created. Normally a div element.\n * @param {object} data An object containing parameters\n * {Array} nodes\n * {Array} edges\n * @param {object} options Options\n * @class Network\n */\nexport function Network(container, data, options) {\n if (!(this instanceof Network)) {\n throw new SyntaxError(\"Constructor must be called with the new operator\");\n }\n\n // set constant values\n this.options = {};\n this.defaultOptions = {\n locale: \"en\",\n locales: locales,\n clickToUse: false,\n };\n Object.assign(this.options, this.defaultOptions);\n\n /**\n * Containers for nodes and edges.\n *\n * 'edges' and 'nodes' contain the full definitions of all the network elements.\n * 'nodeIndices' and 'edgeIndices' contain the id's of the active elements.\n *\n * The distinction is important, because a defined node need not be active, i.e.\n * visible on the canvas. This happens in particular when clusters are defined, in\n * that case there will be nodes and edges not displayed.\n * The bottom line is that all code with actions related to visibility, *must* use\n * 'nodeIndices' and 'edgeIndices', not 'nodes' and 'edges' directly.\n */\n this.body = {\n container: container,\n\n // See comment above for following fields\n nodes: {},\n nodeIndices: [],\n edges: {},\n edgeIndices: [],\n\n emitter: {\n on: this.on.bind(this),\n off: this.off.bind(this),\n emit: this.emit.bind(this),\n once: this.once.bind(this),\n },\n eventListeners: {\n onTap: function () {},\n onTouch: function () {},\n onDoubleTap: function () {},\n onHold: function () {},\n onDragStart: function () {},\n onDrag: function () {},\n onDragEnd: function () {},\n onMouseWheel: function () {},\n onPinch: function () {},\n onMouseMove: function () {},\n onRelease: function () {},\n onContext: function () {},\n },\n data: {\n nodes: null, // A DataSet or DataView\n edges: null, // A DataSet or DataView\n },\n functions: {\n createNode: function () {},\n createEdge: function () {},\n getPointer: function () {},\n },\n modules: {},\n view: {\n scale: 1,\n translation: { x: 0, y: 0 },\n },\n selectionBox: {\n show: false,\n position: {\n start: { x: 0, y: 0 },\n end: { x: 0, y: 0 },\n },\n },\n };\n\n // bind the event listeners\n this.bindEventListeners();\n\n // setting up all modules\n this.images = new Images(() => this.body.emitter.emit(\"_requestRedraw\")); // object with images\n this.groups = new Groups(); // object with groups\n this.canvas = new Canvas(this.body); // DOM handler\n this.selectionHandler = new SelectionHandler(this.body, this.canvas); // Selection handler\n this.interactionHandler = new InteractionHandler(\n this.body,\n this.canvas,\n this.selectionHandler\n ); // Interaction handler handles all the hammer bindings (that are bound by canvas), key\n this.view = new View(this.body, this.canvas); // camera handler, does animations and zooms\n this.renderer = new CanvasRenderer(this.body, this.canvas); // renderer, starts renderloop, has events that modules can hook into\n this.physics = new PhysicsEngine(this.body); // physics engine, does all the simulations\n this.layoutEngine = new LayoutEngine(this.body); // layout engine for inital layout and hierarchical layout\n this.clustering = new ClusterEngine(this.body); // clustering api\n this.manipulation = new ManipulationSystem(\n this.body,\n this.canvas,\n this.selectionHandler,\n this.interactionHandler\n ); // data manipulation system\n\n this.nodesHandler = new NodesHandler(\n this.body,\n this.images,\n this.groups,\n this.layoutEngine\n ); // Handle adding, deleting and updating of nodes as well as global options\n this.edgesHandler = new EdgesHandler(this.body, this.images, this.groups); // Handle adding, deleting and updating of edges as well as global options\n\n this.body.modules[\"kamadaKawai\"] = new KamadaKawai(this.body, 150, 0.05); // Layouting algorithm.\n this.body.modules[\"clustering\"] = this.clustering;\n\n // create the DOM elements\n this.canvas._create();\n\n // apply options\n this.setOptions(options);\n\n // load data (the disable start variable will be the same as the enabled clustering)\n this.setData(data);\n}\n\n// Extend Network with an Emitter mixin\nEmitter(Network.prototype);\n\n/**\n * Set options\n *\n * @param {object} options\n */\nNetwork.prototype.setOptions = function (options) {\n if (options === null) {\n options = undefined; // This ensures that options handling doesn't crash in the handling\n }\n\n if (options !== undefined) {\n const errorFound = Validator.validate(options, allOptions);\n if (errorFound === true) {\n console.error(\n \"%cErrors have been found in the supplied options object.\",\n VALIDATOR_PRINT_STYLE\n );\n }\n\n // copy the global fields over\n const fields = [\"locale\", \"locales\", \"clickToUse\"];\n selectiveDeepExtend(fields, this.options, options);\n\n // normalize the locale or use English\n if (options.locale !== undefined) {\n options.locale = normalizeLanguageCode(\n options.locales || this.options.locales,\n options.locale\n );\n }\n\n // the hierarchical system can adapt the edges and the physics to it's own options because not all combinations work with the hierarichical system.\n options = this.layoutEngine.setOptions(options.layout, options);\n\n this.canvas.setOptions(options); // options for canvas are in globals\n\n // pass the options to the modules\n this.groups.setOptions(options.groups);\n this.nodesHandler.setOptions(options.nodes);\n this.edgesHandler.setOptions(options.edges);\n this.physics.setOptions(options.physics);\n this.manipulation.setOptions(options.manipulation, options, this.options); // manipulation uses the locales in the globals\n\n this.interactionHandler.setOptions(options.interaction);\n this.renderer.setOptions(options.interaction); // options for rendering are in interaction\n this.selectionHandler.setOptions(options.interaction); // options for selection are in interaction\n\n // reload the settings of the nodes to apply changes in groups that are not referenced by pointer.\n if (options.groups !== undefined) {\n this.body.emitter.emit(\"refreshNodes\");\n }\n // these two do not have options at the moment, here for completeness\n //this.view.setOptions(options.view);\n //this.clustering.setOptions(options.clustering);\n\n if (\"configure\" in options) {\n if (!this.configurator) {\n this.configurator = new Configurator(\n this,\n this.body.container,\n configureOptions,\n this.canvas.pixelRatio,\n configuratorHideOption\n );\n }\n\n this.configurator.setOptions(options.configure);\n }\n\n // if the configuration system is enabled, copy all options and put them into the config system\n if (this.configurator && this.configurator.options.enabled === true) {\n const networkOptions = {\n nodes: {},\n edges: {},\n layout: {},\n interaction: {},\n manipulation: {},\n physics: {},\n global: {},\n };\n deepExtend(networkOptions.nodes, this.nodesHandler.options);\n deepExtend(networkOptions.edges, this.edgesHandler.options);\n deepExtend(networkOptions.layout, this.layoutEngine.options);\n // load the selectionHandler and render default options in to the interaction group\n deepExtend(networkOptions.interaction, this.selectionHandler.options);\n deepExtend(networkOptions.interaction, this.renderer.options);\n\n deepExtend(networkOptions.interaction, this.interactionHandler.options);\n deepExtend(networkOptions.manipulation, this.manipulation.options);\n deepExtend(networkOptions.physics, this.physics.options);\n\n // load globals into the global object\n deepExtend(networkOptions.global, this.canvas.options);\n deepExtend(networkOptions.global, this.options);\n\n this.configurator.setModuleOptions(networkOptions);\n }\n\n // handle network global options\n if (options.clickToUse !== undefined) {\n if (options.clickToUse === true) {\n if (this.activator === undefined) {\n this.activator = new Activator(this.canvas.frame);\n this.activator.on(\"change\", () => {\n this.body.emitter.emit(\"activate\");\n });\n }\n } else {\n if (this.activator !== undefined) {\n this.activator.destroy();\n delete this.activator;\n }\n this.body.emitter.emit(\"activate\");\n }\n } else {\n this.body.emitter.emit(\"activate\");\n }\n\n this.canvas.setSize();\n // start the physics simulation. Can be safely called multiple times.\n this.body.emitter.emit(\"startSimulation\");\n }\n};\n\n/**\n * Update the visible nodes and edges list with the most recent node state.\n *\n * Visible nodes are stored in this.body.nodeIndices.\n * Visible edges are stored in this.body.edgeIndices.\n * A node or edges is visible if it is not hidden or clustered.\n *\n * @private\n */\nNetwork.prototype._updateVisibleIndices = function () {\n const nodes = this.body.nodes;\n const edges = this.body.edges;\n this.body.nodeIndices = [];\n this.body.edgeIndices = [];\n\n for (const nodeId in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, nodeId)) {\n if (\n !this.clustering._isClusteredNode(nodeId) &&\n nodes[nodeId].options.hidden === false\n ) {\n this.body.nodeIndices.push(nodes[nodeId].id);\n }\n }\n }\n\n for (const edgeId in edges) {\n if (Object.prototype.hasOwnProperty.call(edges, edgeId)) {\n const edge = edges[edgeId];\n\n // It can happen that this is executed *after* a node edge has been removed,\n // but *before* the edge itself has been removed. Taking this into account.\n const fromNode = nodes[edge.fromId];\n const toNode = nodes[edge.toId];\n const edgeNodesPresent = fromNode !== undefined && toNode !== undefined;\n\n const isVisible =\n !this.clustering._isClusteredEdge(edgeId) &&\n edge.options.hidden === false &&\n edgeNodesPresent &&\n fromNode.options.hidden === false && // Also hidden if any of its connecting nodes are hidden\n toNode.options.hidden === false; // idem\n\n if (isVisible) {\n this.body.edgeIndices.push(edge.id);\n }\n }\n }\n};\n\n/**\n * Bind all events\n */\nNetwork.prototype.bindEventListeners = function () {\n // This event will trigger a rebuilding of the cache everything.\n // Used when nodes or edges have been added or removed.\n this.body.emitter.on(\"_dataChanged\", () => {\n this.edgesHandler._updateState();\n this.body.emitter.emit(\"_dataUpdated\");\n });\n\n // this is called when options of EXISTING nodes or edges have changed.\n this.body.emitter.on(\"_dataUpdated\", () => {\n // Order important in following block\n this.clustering._updateState();\n this._updateVisibleIndices();\n\n this._updateValueRange(this.body.nodes);\n this._updateValueRange(this.body.edges);\n // start simulation (can be called safely, even if already running)\n this.body.emitter.emit(\"startSimulation\");\n this.body.emitter.emit(\"_requestRedraw\");\n });\n};\n\n/**\n * Set nodes and edges, and optionally options as well.\n *\n * @param {object} data Object containing parameters:\n * {Array | DataSet | DataView} [nodes] Array with nodes\n * {Array | DataSet | DataView} [edges] Array with edges\n * {String} [dot] String containing data in DOT format\n * {String} [gephi] String containing data in gephi JSON format\n * {Options} [options] Object with options\n */\nNetwork.prototype.setData = function (data) {\n // reset the physics engine.\n this.body.emitter.emit(\"resetPhysics\");\n this.body.emitter.emit(\"_resetData\");\n\n // unselect all to ensure no selections from old data are carried over.\n this.selectionHandler.unselectAll();\n\n if (data && data.dot && (data.nodes || data.edges)) {\n throw new SyntaxError(\n 'Data must contain either parameter \"dot\" or ' +\n ' parameter pair \"nodes\" and \"edges\", but not both.'\n );\n }\n\n // set options\n this.setOptions(data && data.options);\n // set all data\n if (data && data.dot) {\n console.warn(\n \"The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);\"\n );\n // parse DOT file\n const dotData = DOTToGraph(data.dot);\n this.setData(dotData);\n return;\n } else if (data && data.gephi) {\n // parse DOT file\n console.warn(\n \"The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);\"\n );\n const gephiData = parseGephi(data.gephi);\n this.setData(gephiData);\n return;\n } else {\n this.nodesHandler.setData(data && data.nodes, true);\n this.edgesHandler.setData(data && data.edges, true);\n }\n\n // emit change in data\n this.body.emitter.emit(\"_dataChanged\");\n\n // emit data loaded\n this.body.emitter.emit(\"_dataLoaded\");\n\n // find a stable position or start animating to a stable position\n this.body.emitter.emit(\"initPhysics\");\n};\n\n/**\n * Cleans up all bindings of the network, removing it fully from the memory IF the variable is set to null after calling this function.\n * var network = new vis.Network(..);\n * network.destroy();\n * network = null;\n */\nNetwork.prototype.destroy = function () {\n this.body.emitter.emit(\"destroy\");\n // clear events\n this.body.emitter.off();\n this.off();\n\n // delete modules\n delete this.groups;\n delete this.canvas;\n delete this.selectionHandler;\n delete this.interactionHandler;\n delete this.view;\n delete this.renderer;\n delete this.physics;\n delete this.layoutEngine;\n delete this.clustering;\n delete this.manipulation;\n delete this.nodesHandler;\n delete this.edgesHandler;\n delete this.configurator;\n delete this.images;\n\n for (const nodeId in this.body.nodes) {\n if (!Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId))\n continue;\n delete this.body.nodes[nodeId];\n }\n\n for (const edgeId in this.body.edges) {\n if (!Object.prototype.hasOwnProperty.call(this.body.edges, edgeId))\n continue;\n delete this.body.edges[edgeId];\n }\n\n // remove the container and everything inside it recursively\n recursiveDOMDelete(this.body.container);\n};\n\n/**\n * Update the values of all object in the given array according to the current\n * value range of the objects in the array.\n *\n * @param {object} obj An object containing a set of Edges or Nodes\n * The objects must have a method getValue() and\n * setValueRange(min, max).\n * @private\n */\nNetwork.prototype._updateValueRange = function (obj) {\n let id;\n\n // determine the range of the objects\n let valueMin = undefined;\n let valueMax = undefined;\n let valueTotal = 0;\n for (id in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, id)) {\n const value = obj[id].getValue();\n if (value !== undefined) {\n valueMin = valueMin === undefined ? value : Math.min(value, valueMin);\n valueMax = valueMax === undefined ? value : Math.max(value, valueMax);\n valueTotal += value;\n }\n }\n }\n\n // adjust the range of all objects\n if (valueMin !== undefined && valueMax !== undefined) {\n for (id in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, id)) {\n obj[id].setValueRange(valueMin, valueMax, valueTotal);\n }\n }\n }\n};\n\n/**\n * Returns true when the Network is active.\n *\n * @returns {boolean}\n */\nNetwork.prototype.isActive = function () {\n return !this.activator || this.activator.active;\n};\n\nNetwork.prototype.setSize = function () {\n return this.canvas.setSize.apply(this.canvas, arguments);\n};\nNetwork.prototype.canvasToDOM = function () {\n return this.canvas.canvasToDOM.apply(this.canvas, arguments);\n};\nNetwork.prototype.DOMtoCanvas = function () {\n return this.canvas.DOMtoCanvas.apply(this.canvas, arguments);\n};\n\n/**\n * Nodes can be in clusters. Clusters can also be in clusters. This function returns and array of\n * nodeIds showing where the node is.\n *\n * If any nodeId in the chain, especially the first passed in as a parameter, is not present in\n * the current nodes list, an empty array is returned.\n *\n * Example:\n * cluster 'A' contains cluster 'B',\n * cluster 'B' contains cluster 'C',\n * cluster 'C' contains node 'fred'.\n * `jsnetwork.clustering.findNode('fred')` will return `['A','B','C','fred']`.\n *\n * @param {string|number} nodeId\n * @returns {Array}\n */\nNetwork.prototype.findNode = function () {\n return this.clustering.findNode.apply(this.clustering, arguments);\n};\n\nNetwork.prototype.isCluster = function () {\n return this.clustering.isCluster.apply(this.clustering, arguments);\n};\nNetwork.prototype.openCluster = function () {\n return this.clustering.openCluster.apply(this.clustering, arguments);\n};\nNetwork.prototype.cluster = function () {\n return this.clustering.cluster.apply(this.clustering, arguments);\n};\nNetwork.prototype.getNodesInCluster = function () {\n return this.clustering.getNodesInCluster.apply(this.clustering, arguments);\n};\nNetwork.prototype.clusterByConnection = function () {\n return this.clustering.clusterByConnection.apply(this.clustering, arguments);\n};\nNetwork.prototype.clusterByHubsize = function () {\n return this.clustering.clusterByHubsize.apply(this.clustering, arguments);\n};\nNetwork.prototype.updateClusteredNode = function () {\n return this.clustering.updateClusteredNode.apply(this.clustering, arguments);\n};\nNetwork.prototype.getClusteredEdges = function () {\n return this.clustering.getClusteredEdges.apply(this.clustering, arguments);\n};\nNetwork.prototype.getBaseEdge = function () {\n return this.clustering.getBaseEdge.apply(this.clustering, arguments);\n};\nNetwork.prototype.getBaseEdges = function () {\n return this.clustering.getBaseEdges.apply(this.clustering, arguments);\n};\nNetwork.prototype.updateEdge = function () {\n return this.clustering.updateEdge.apply(this.clustering, arguments);\n};\n\n/**\n * This method will cluster all nodes with 1 edge with their respective connected node.\n * The options object is explained in full
    below.\n *\n * @param {object} [options]\n * @returns {undefined}\n */\nNetwork.prototype.clusterOutliers = function () {\n return this.clustering.clusterOutliers.apply(this.clustering, arguments);\n};\n\nNetwork.prototype.getSeed = function () {\n return this.layoutEngine.getSeed.apply(this.layoutEngine, arguments);\n};\nNetwork.prototype.enableEditMode = function () {\n return this.manipulation.enableEditMode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.disableEditMode = function () {\n return this.manipulation.disableEditMode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.addNodeMode = function () {\n return this.manipulation.addNodeMode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.editNode = function () {\n return this.manipulation.editNode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.editNodeMode = function () {\n console.warn(\"Deprecated: Please use editNode instead of editNodeMode.\");\n return this.manipulation.editNode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.addEdgeMode = function () {\n return this.manipulation.addEdgeMode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.editEdgeMode = function () {\n return this.manipulation.editEdgeMode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.deleteSelected = function () {\n return this.manipulation.deleteSelected.apply(this.manipulation, arguments);\n};\nNetwork.prototype.getPositions = function () {\n return this.nodesHandler.getPositions.apply(this.nodesHandler, arguments);\n};\nNetwork.prototype.getPosition = function () {\n return this.nodesHandler.getPosition.apply(this.nodesHandler, arguments);\n};\nNetwork.prototype.storePositions = function () {\n return this.nodesHandler.storePositions.apply(this.nodesHandler, arguments);\n};\nNetwork.prototype.moveNode = function () {\n return this.nodesHandler.moveNode.apply(this.nodesHandler, arguments);\n};\nNetwork.prototype.getBoundingBox = function () {\n return this.nodesHandler.getBoundingBox.apply(this.nodesHandler, arguments);\n};\nNetwork.prototype.getConnectedNodes = function (objectId) {\n if (this.body.nodes[objectId] !== undefined) {\n return this.nodesHandler.getConnectedNodes.apply(\n this.nodesHandler,\n arguments\n );\n } else {\n return this.edgesHandler.getConnectedNodes.apply(\n this.edgesHandler,\n arguments\n );\n }\n};\nNetwork.prototype.getConnectedEdges = function () {\n return this.nodesHandler.getConnectedEdges.apply(\n this.nodesHandler,\n arguments\n );\n};\nNetwork.prototype.startSimulation = function () {\n return this.physics.startSimulation.apply(this.physics, arguments);\n};\nNetwork.prototype.stopSimulation = function () {\n return this.physics.stopSimulation.apply(this.physics, arguments);\n};\nNetwork.prototype.stabilize = function () {\n return this.physics.stabilize.apply(this.physics, arguments);\n};\nNetwork.prototype.getSelection = function () {\n return this.selectionHandler.getSelection.apply(\n this.selectionHandler,\n arguments\n );\n};\nNetwork.prototype.setSelection = function () {\n return this.selectionHandler.setSelection.apply(\n this.selectionHandler,\n arguments\n );\n};\nNetwork.prototype.getSelectedNodes = function () {\n return this.selectionHandler.getSelectedNodeIds.apply(\n this.selectionHandler,\n arguments\n );\n};\nNetwork.prototype.getSelectedEdges = function () {\n return this.selectionHandler.getSelectedEdgeIds.apply(\n this.selectionHandler,\n arguments\n );\n};\nNetwork.prototype.getNodeAt = function () {\n const node = this.selectionHandler.getNodeAt.apply(\n this.selectionHandler,\n arguments\n );\n if (node !== undefined && node.id !== undefined) {\n return node.id;\n }\n return node;\n};\nNetwork.prototype.getEdgeAt = function () {\n const edge = this.selectionHandler.getEdgeAt.apply(\n this.selectionHandler,\n arguments\n );\n if (edge !== undefined && edge.id !== undefined) {\n return edge.id;\n }\n return edge;\n};\nNetwork.prototype.selectNodes = function () {\n return this.selectionHandler.selectNodes.apply(\n this.selectionHandler,\n arguments\n );\n};\nNetwork.prototype.selectEdges = function () {\n return this.selectionHandler.selectEdges.apply(\n this.selectionHandler,\n arguments\n );\n};\nNetwork.prototype.unselectAll = function () {\n this.selectionHandler.unselectAll.apply(this.selectionHandler, arguments);\n this.selectionHandler.commitWithoutEmitting.apply(this.selectionHandler);\n this.redraw();\n};\nNetwork.prototype.redraw = function () {\n return this.renderer.redraw.apply(this.renderer, arguments);\n};\nNetwork.prototype.getScale = function () {\n return this.view.getScale.apply(this.view, arguments);\n};\nNetwork.prototype.getViewPosition = function () {\n return this.view.getViewPosition.apply(this.view, arguments);\n};\nNetwork.prototype.fit = function () {\n return this.view.fit.apply(this.view, arguments);\n};\nNetwork.prototype.moveTo = function () {\n return this.view.moveTo.apply(this.view, arguments);\n};\nNetwork.prototype.focus = function () {\n return this.view.focus.apply(this.view, arguments);\n};\nNetwork.prototype.releaseNode = function () {\n return this.view.releaseNode.apply(this.view, arguments);\n};\nNetwork.prototype.getOptionsFromConfigurator = function () {\n let options = {};\n if (this.configurator) {\n options = this.configurator.getOptions.apply(this.configurator);\n }\n return options;\n};\n\nexport default Network;\n","// DOM utility methods\n\n/**\n * this prepares the JSON container for allocating SVG elements\n *\n * @param {object} JSONcontainer\n * @private\n */\nexport function prepareElements(JSONcontainer) {\n // cleanup the redundant svgElements;\n for (const elementType in JSONcontainer) {\n if (Object.prototype.hasOwnProperty.call(JSONcontainer, elementType)) {\n JSONcontainer[elementType].redundant = JSONcontainer[elementType].used;\n JSONcontainer[elementType].used = [];\n }\n }\n}\n\n/**\n * this cleans up all the unused SVG elements. By asking for the parentNode, we only need to supply the JSON container from\n * which to remove the redundant elements.\n *\n * @param {object} JSONcontainer\n * @private\n */\nexport function cleanupElements(JSONcontainer) {\n // cleanup the redundant svgElements;\n for (const elementType in JSONcontainer) {\n if (Object.prototype.hasOwnProperty.call(JSONcontainer, elementType)) {\n if (JSONcontainer[elementType].redundant) {\n for (let i = 0; i < JSONcontainer[elementType].redundant.length; i++) {\n JSONcontainer[elementType].redundant[i].parentNode.removeChild(\n JSONcontainer[elementType].redundant[i]\n );\n }\n JSONcontainer[elementType].redundant = [];\n }\n }\n }\n}\n\n/**\n * Ensures that all elements are removed first up so they can be recreated cleanly\n *\n * @param {object} JSONcontainer\n */\nexport function resetElements(JSONcontainer) {\n prepareElements(JSONcontainer);\n cleanupElements(JSONcontainer);\n prepareElements(JSONcontainer);\n}\n\n/**\n * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer\n * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this.\n *\n * @param {string} elementType\n * @param {object} JSONcontainer\n * @param {object} svgContainer\n * @returns {Element}\n * @private\n */\nexport function getSVGElement(elementType, JSONcontainer, svgContainer) {\n let element;\n // allocate SVG element, if it doesnt yet exist, create one.\n if (Object.prototype.hasOwnProperty.call(JSONcontainer, elementType)) {\n // this element has been created before\n // check if there is an redundant element\n if (JSONcontainer[elementType].redundant.length > 0) {\n element = JSONcontainer[elementType].redundant[0];\n JSONcontainer[elementType].redundant.shift();\n } else {\n // create a new element and add it to the SVG\n element = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n elementType\n );\n svgContainer.appendChild(element);\n }\n } else {\n // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it.\n element = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n elementType\n );\n JSONcontainer[elementType] = { used: [], redundant: [] };\n svgContainer.appendChild(element);\n }\n JSONcontainer[elementType].used.push(element);\n return element;\n}\n\n/**\n * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer\n * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this.\n *\n * @param {string} elementType\n * @param {object} JSONcontainer\n * @param {Element} DOMContainer\n * @param {Element} insertBefore\n * @returns {*}\n */\nexport function getDOMElement(\n elementType,\n JSONcontainer,\n DOMContainer,\n insertBefore\n) {\n let element;\n // allocate DOM element, if it doesnt yet exist, create one.\n if (Object.prototype.hasOwnProperty.call(JSONcontainer, elementType)) {\n // this element has been created before\n // check if there is an redundant element\n if (JSONcontainer[elementType].redundant.length > 0) {\n element = JSONcontainer[elementType].redundant[0];\n JSONcontainer[elementType].redundant.shift();\n } else {\n // create a new element and add it to the SVG\n element = document.createElement(elementType);\n if (insertBefore !== undefined) {\n DOMContainer.insertBefore(element, insertBefore);\n } else {\n DOMContainer.appendChild(element);\n }\n }\n } else {\n // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it.\n element = document.createElement(elementType);\n JSONcontainer[elementType] = { used: [], redundant: [] };\n if (insertBefore !== undefined) {\n DOMContainer.insertBefore(element, insertBefore);\n } else {\n DOMContainer.appendChild(element);\n }\n }\n JSONcontainer[elementType].used.push(element);\n return element;\n}\n\n/**\n * Draw a point object. This is a separate function because it can also be called by the legend.\n * The reason the JSONcontainer and the target SVG svgContainer have to be supplied is so the legend can use these functions\n * as well.\n *\n * @param {number} x\n * @param {number} y\n * @param {object} groupTemplate: A template containing the necessary information to draw the datapoint e.g., {style: 'circle', size: 5, className: 'className' }\n * @param groupTemplate\n * @param {object} JSONcontainer\n * @param {object} svgContainer\n * @param {object} labelObj\n * @returns {vis.PointItem}\n */\nexport function drawPoint(\n x,\n y,\n groupTemplate,\n JSONcontainer,\n svgContainer,\n labelObj\n) {\n let point;\n if (groupTemplate.style == \"circle\") {\n point = getSVGElement(\"circle\", JSONcontainer, svgContainer);\n point.setAttributeNS(null, \"cx\", x);\n point.setAttributeNS(null, \"cy\", y);\n point.setAttributeNS(null, \"r\", 0.5 * groupTemplate.size);\n } else {\n point = getSVGElement(\"rect\", JSONcontainer, svgContainer);\n point.setAttributeNS(null, \"x\", x - 0.5 * groupTemplate.size);\n point.setAttributeNS(null, \"y\", y - 0.5 * groupTemplate.size);\n point.setAttributeNS(null, \"width\", groupTemplate.size);\n point.setAttributeNS(null, \"height\", groupTemplate.size);\n }\n\n if (groupTemplate.styles !== undefined) {\n point.setAttributeNS(null, \"style\", groupTemplate.styles);\n }\n point.setAttributeNS(null, \"class\", groupTemplate.className + \" vis-point\");\n //handle label\n\n if (labelObj) {\n const label = getSVGElement(\"text\", JSONcontainer, svgContainer);\n if (labelObj.xOffset) {\n x = x + labelObj.xOffset;\n }\n\n if (labelObj.yOffset) {\n y = y + labelObj.yOffset;\n }\n if (labelObj.content) {\n label.textContent = labelObj.content;\n }\n\n if (labelObj.className) {\n label.setAttributeNS(null, \"class\", labelObj.className + \" vis-label\");\n }\n label.setAttributeNS(null, \"x\", x);\n label.setAttributeNS(null, \"y\", y);\n }\n\n return point;\n}\n\n/**\n * draw a bar SVG element centered on the X coordinate\n *\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {string} className\n * @param {object} JSONcontainer\n * @param {object} svgContainer\n * @param {string} style\n */\nexport function drawBar(\n x,\n y,\n width,\n height,\n className,\n JSONcontainer,\n svgContainer,\n style\n) {\n if (height != 0) {\n if (height < 0) {\n height *= -1;\n y -= height;\n }\n const rect = getSVGElement(\"rect\", JSONcontainer, svgContainer);\n rect.setAttributeNS(null, \"x\", x - 0.5 * width);\n rect.setAttributeNS(null, \"y\", y);\n rect.setAttributeNS(null, \"width\", width);\n rect.setAttributeNS(null, \"height\", height);\n rect.setAttributeNS(null, \"class\", className);\n if (style) {\n rect.setAttributeNS(null, \"style\", style);\n }\n }\n}\n","/**\n * Normalizes language code into the format used internally.\n *\n * @param locales - All the available locales.\n * @param rawCode - The original code as supplied by the user.\n * @returns Language code in the format language-COUNTRY or language, eventually\n * fallbacks to en.\n */\nexport function normalizeLanguageCode(\n locales: Record,\n rawCode: string\n): string {\n try {\n const [rawLanguage, rawCountry] = rawCode.split(/[-_ /]/, 2);\n const language = rawLanguage != null ? rawLanguage.toLowerCase() : null;\n const country = rawCountry != null ? rawCountry.toUpperCase() : null;\n\n if (language && country) {\n const code = language + \"-\" + country;\n if (Object.prototype.hasOwnProperty.call(locales, code)) {\n return code;\n } else {\n console.warn(`Unknown variant ${country} of language ${language}.`);\n }\n }\n\n if (language) {\n const code = language;\n if (Object.prototype.hasOwnProperty.call(locales, code)) {\n return code;\n } else {\n console.warn(`Unknown language ${language}`);\n }\n }\n\n console.warn(`Unknown locale ${rawCode}, falling back to English.`);\n\n return \"en\";\n } catch (error) {\n console.error(error);\n console.warn(\n `Unexpected error while normalizing locale ${rawCode}, falling back to English.`\n );\n\n return \"en\";\n }\n}\n","// Network.\nexport * from \"./network/Network\";\n\nimport Images from \"./network/Images\";\nimport * as dotparser from \"./network/dotparser\";\nimport * as gephiParser from \"./network/gephiParser\";\nimport { parseGephi } from \"./network/gephiParser\";\nimport * as allOptions from \"./network/options\";\nexport const network = {\n Images,\n dotparser,\n gephiParser,\n allOptions,\n convertDot: dotparser.DOTToGraph,\n convertGephi: parseGephi,\n};\n\n// utils\nimport * as DOMutil from \"./DOMutil\";\nexport { DOMutil };\n\n// vis-util\nimport * as util from \"vis-util/esnext\";\nexport { util };\n\n// vis-data\nimport * as data from \"vis-data/esnext\";\nexport { data };\nexport { DataSet, DataView, Queue } from \"vis-data/esnext\";\n\n// bundled external libraries\nimport { Hammer } from \"vis-util/esnext\";\nexport { Hammer };\nimport * as keycharm from \"keycharm\";\nexport { keycharm };\n"],"names":["check","it","Math","global","globalThis","window","self","this","Function","fails","exec","error","functionBindNative","require$$0","test","bind","hasOwnProperty","NATIVE_BIND","FunctionPrototype","prototype","apply","call","functionApply","Reflect","arguments","uncurryThisWithBind","functionUncurryThis","fn","uncurryThis","toString","stringSlice","slice","classofRaw","require$$1","functionUncurryThisClause","documentAll","document","all","documentAll_1","IS_HTMLDDA","undefined","isCallable","argument","descriptors","Object","defineProperty","get","functionCall","$propertyIsEnumerable","propertyIsEnumerable","getOwnPropertyDescriptor","NASHORN_BUG","objectPropertyIsEnumerable","f","V","descriptor","enumerable","match","version","createPropertyDescriptor","bitmap","value","configurable","writable","classof","require$$2","$Object","split","indexedObject","isNullOrUndefined","$TypeError","TypeError","requireObjectCoercible","IndexedObject","toIndexedObject","isObject","path","aFunction","variable","getBuiltIn","namespace","method","length","objectIsPrototypeOf","isPrototypeOf","engineUserAgent","navigator","String","userAgent","process","Deno","versions","v8","engineV8Version","V8_VERSION","$String","symbolConstructorDetection","getOwnPropertySymbols","symbol","Symbol","sham","useSymbolAsUid","iterator","isSymbol","require$$3","$Symbol","tryToString","aCallable","getMethod","P","func","defineGlobalProperty","key","SHARED","sharedStore","store","sharedModule","push","mode","copyright","license","source","toObject","hasOwnProperty_1","hasOwn","id","postfix","random","uid","shared","NATIVE_SYMBOL","require$$4","USE_SYMBOL_AS_UID","require$$5","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","wellKnownSymbol","name","ordinaryToPrimitive","input","pref","val","valueOf","TO_PRIMITIVE","toPrimitive","result","exoticToPrim","toPropertyKey","EXISTS","createElement","documentCreateElement","ie8DomDefine","a","DESCRIPTORS","propertyIsEnumerableModule","require$$6","IE8_DOM_DEFINE","require$$7","$getOwnPropertyDescriptor","objectGetOwnPropertyDescriptor","O","replacement","isForced","feature","detection","data","normalize","POLYFILL","NATIVE","string","replace","toLowerCase","isForced_1","functionBindContext","that","v8PrototypeDefineBug","anObject","V8_PROTOTYPE_DEFINE_BUG","$defineProperty","ENUMERABLE","CONFIGURABLE","WRITABLE","objectDefineProperty","Attributes","current","definePropertyModule","createNonEnumerableProperty","object","require$$8","require$$9","wrapConstructor","NativeConstructor","Wrapper","b","c","_export","options","FORCED","USE_NATIVE","VIRTUAL_PROTOTYPE","sourceProperty","targetProperty","nativeProperty","resultProperty","TARGET","target","GLOBAL","STATIC","stat","PROTO","proto","nativeSource","targetPrototype","forced","dontCallGetSet","wrap","real","ceil","floor","trunc","x","n","toIntegerOrInfinity","number","max","min","toAbsoluteIndex","index","integer","toLength","lengthOfArrayLike","obj","createMethod","IS_INCLUDES","$this","el","fromIndex","arrayIncludes","includes","indexOf","hiddenKeys","objectKeysInternal","names","i","enumBugKeys","internalObjectKeys","objectKeys","keys","objectGetOwnPropertySymbols","getOwnPropertySymbolsModule","$assign","assign","concat","objectAssign","A","B","alphabet","forEach","chr","join","T","argumentsLength","S","j","arity","arraySlice","$Function","factories","functionBind","F","Prototype","partArgs","boundFunction","args","C","argsLength","list","construct","entryVirtual","CONSTRUCTOR","parent","own","drawCircle","ctx","y","r","beginPath","arc","PI","closePath","drawRoundRect","w","h","r2d","moveTo","lineTo","drawEllipse","kappa","ox","oy","xe","ye","xm","ym","bezierCurveTo","drawDatabase","hEllipse","ymb","yeb","drawDashedLine","x2","y2","pattern","patternLength","dx","dy","slope","distRemaining","sqrt","patternIndex","draw","xStep","dashLength","shapeMap","circle","dashedLine","database","diamond","ellipse","ellipse_vis","hexagon","cos","sin","roundRect","square","rect","star","radius","triangle","s","s2","ir","triangleDown","Emitter","mixin","module","exports","on","addEventListener","event","_callbacks","once","off","removeListener","removeAllListeners","removeEventListener","cb","callbacks","splice","emit","Array","len","listeners","hasListeners","set","has","toStringTagSupport","TO_STRING_TAG_SUPPORT","TO_STRING_TAG","CORRECT_ARGUMENTS","tag","tryGet","callee","charAt","charCodeAt","CONVERT_TO_STRING","pos","first","second","position","size","stringMultibyte","codeAt","WeakMap","weakMapBasicDetection","sharedKey","NATIVE_WEAK_MAP","OBJECT_ALREADY_INITIALIZED","state","metadata","facade","STATE","internalState","enforce","getterFor","TYPE","type","getDescriptor","functionName","PROPER","objectDefineProperties","defineProperties","Properties","props","activeXDocument","html","definePropertiesModule","PROTOTYPE","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObjectViaActiveX","write","close","temp","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","JS","domain","style","display","appendChild","src","contentWindow","open","IteratorPrototype","PrototypeOfArrayIteratorPrototype","arrayIterator","objectCreate","create","correctPrototypeGetter","constructor","getPrototypeOf","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","objectGetPrototypeOf","defineBuiltIn","ITERATOR","BUGGY_SAFARI_ITERATORS","NEW_ITERATOR_PROTOTYPE","iteratorsCore","objectToString","setToStringTag","TAG","SET_METHOD","iterators","Iterators","returnThis","uncurryThisAccessor","aPossiblePrototype","objectSetPrototypeOf","setPrototypeOf","setter","CORRECT_SETTER","__proto__","$","FunctionName","createIteratorConstructor","IteratorConstructor","NAME","next","ENUMERABLE_NEXT","require$$10","require$$12","IteratorsCore","require$$13","PROPER_FUNCTION_NAME","require$$11","KEYS","VALUES","ENTRIES","iteratorDefine","Iterable","DEFAULT","IS_SET","CurrentIteratorPrototype","methods","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","entries","values","createIterResultObject","done","InternalStateModule","defineIterator","STRING_ITERATOR","setInternalState","getInternalState","iterated","point","iteratorClose","kind","innerResult","innerError","ArrayPrototype","isArrayIteratorMethod","functionToString","inspectSource","noop","empty","constructorRegExp","INCORRECT_TO_STRING","isConstructorModern","isConstructorLegacy","isConstructor","called","createProperty","propertyKey","getIteratorMethod","getIterator","usingIterator","iteratorMethod","callWithSafeIterationClosing","$Array","SAFE_CLOSING","iteratorWithReturn","return","from","checkCorrectnessOfIteration","SKIP_CLOSING","ITERATION_SUPPORT","arrayLike","IS_CONSTRUCTOR","mapfn","mapping","step","iterable","ARRAY_ITERATOR","defineIterator$1","Arguments","getIteratorMethod_1","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","COLLECTION_NAME","Collection","CollectionPrototype","_classCallCheck","instance","Constructor","$$_","desc","isArray","doesNotExceedSafeInteger","SPECIES","arraySpeciesConstructor","originalArray","arraySpeciesCreate","arrayMethodHasSpeciesSupport","METHOD_NAME","array","foo","Boolean","IS_CONCAT_SPREADABLE","IS_CONCAT_SPREADABLE_SUPPORT","isConcatSpreadable","spreadable","arg","k","E","objectGetOwnPropertyNames","getOwnPropertyNames","arraySliceSimple","start","end","fin","$getOwnPropertyNames","windowNames","objectGetOwnPropertyNamesExternal","getWindowNames","defineBuiltInAccessor","wellKnownSymbolWrapped","wrappedWellKnownSymbolModule","wellKnownSymbolDefine","symbolDefineToPrimitive","SymbolPrototype","hint","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","callbackfn","specificCreate","arrayIteration","map","filter","some","every","find","findIndex","filterReject","$toString","require$$14","nativeObjectCreate","require$$15","require$$16","getOwnPropertyNamesModule","require$$17","getOwnPropertyNamesExternal","require$$18","require$$19","getOwnPropertyDescriptorModule","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$28","require$$29","require$$30","require$$31","defineWellKnownSymbol","require$$32","defineSymbolToPrimitive","require$$33","require$$34","require$$35","$forEach","require$$36","HIDDEN","require$$27","SYMBOL","RangeError","QObject","nativeGetOwnPropertyDescriptor","nativeDefineProperty","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","USE_SETTER","findChild","fallbackDefineProperty","ObjectPrototypeDescriptor","setSymbolDescriptor","description","$defineProperties","properties","$getOwnPropertySymbols","IS_OBJECT_PROTOTYPE","$$Y","$forEach$1","useSetter","useSimple","symbolRegistryDetection","keyFor","NATIVE_SYMBOL_REGISTRY","StringToSymbolRegistry","SymbolToStringRegistry","for","sym","getReplacerFunction","replacer","rawLength","element","keysLength","root","$stringify","numberToString","tester","low","hi","WRONG_SYMBOLS_CONVERSION","ILL_FORMED_UNICODE","stringifyWithSymbolsFix","$replacer","fixIllFormed","offset","prev","stringify","space","JSON","METADATA","thisSymbolValue","symbolIsRegistered","isRegisteredSymbol","$isWellKnownSymbol","isWellKnownSymbol","symbolKeys","symbolKeysLength","symbolKey","symbolIsWellKnown","isRegistered","isWellKnown","_typeof","o","_Symbol","_Symbol$iterator","_toPropertyKey","prim","_Symbol$toPrimitive","res","Number","_defineProperties","_Object$defineProperty","_createClass","protoProps","staticProps","arraySetLength","setArrayLength","properErrorOnNonWritableLength","item","argCount","nativeSlice","HAS_SPECIES_SUPPORT","_arrayLikeToArray","arr","arr2","_unsupportedIterableToArray","minLen","_context","arrayLikeToArray","_sliceInstanceProperty","_Array$from","_slicedToArray","_Array$isArray","arrayWithHoles","l","t","_getIteratorMethod","e","u","_pushInstanceProperty","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","_toConsumableArray","arrayWithoutHoles","iter","iterableToArray","nonIterableSpread","ownKeys","$map","nativeKeys","$Date","Date","thisTimeValue","getTime","$$J","now","arrayMethodIsStrict","arrayForEach","nativeReverse","reverse","$$H","deletePropertyOrThrow","deleteCount","insertCount","actualDeleteCount","to","actualStart","$includes","MATCH","isRegExp","notARegExp","correctIsRegExpLogic","regexp","error1","error2","stringIndexOf","searchString","arrayMethod","stringMethod","StringPrototype","nativeGetPrototypeOf","$filter","IE_BUG","TO_ENTRIES","IE_WORKAROUND","objectToArray","$values","whitespaces","ltrim","RegExp","rtrim","stringTrim","trim","$parseInt","parseInt","hex","numberParseInt","radix","$indexOf","nativeIndexOf","NEGATIVE_ZERO","searchElement","$entries","D","engineIsBun","Bun","validateArgumentsLength","passed","required","ENGINE_IS_BUN","USER_AGENT","WRAP","schedulersFix","scheduler","hasTimeArg","firstParamIndex","handler","timeout","boundArgs","params","callback","setInterval","setTimeout","fill","endPos","_extends","_inheritsLoose","subClass","superClass","_assertThisInitialized","ReferenceError","output","nextKey","win","assign$1","VENDOR_PREFIXES","TEST_ELEMENT","round","abs","prefixed","property","prefix","prop","camelProp","toUpperCase","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","TOUCH_ACTION_AUTO","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_NONE","TOUCH_ACTION_PAN_X","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","getTouchActionProps","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","INPUT_TYPE_TOUCH","INPUT_TYPE_MOUSE","COMPUTE_INTERVAL","INPUT_START","INPUT_END","INPUT_CANCEL","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","PROPS_XY","PROPS_CLIENT_XY","each","context","boolOrFn","inStr","str","TouchAction","manager","_proto","compute","actions","update","touchAction","recognizers","recognizer","enable","getTouchAction","hasPanX","hasPanY","cleanTouchActions","preventDefaults","srcEvent","direction","offsetDirection","session","prevented","preventDefault","hasNone","isTapPointer","pointers","isTapMovement","distance","isTapTouchTime","deltaTime","preventSrc","hasParent","node","parentNode","getCenter","pointersLength","clientX","clientY","simpleCloneInputData","timeStamp","center","deltaX","deltaY","getDistance","p1","p2","getAngle","atan2","getDirection","getVelocity","computeInputData","firstInput","firstMultiple","offsetCenter","angle","offsetDelta","prevDelta","prevInput","eventType","computeDeltaXY","overallVelocity","overallVelocityX","overallVelocityY","scale","rotation","getRotation","maxPointers","velocity","velocityX","velocityY","last","lastInterval","v","computeIntervalInputData","srcEventTarget","composedPath","inputHandler","pointersLen","changedPointersLen","changedPointers","isFirst","isFinal","recognize","splitStr","addEventListeners","types","removeEventListeners","getWindowForElement","doc","ownerDocument","defaultView","Input","inputTarget","domHandler","ev","init","evEl","evTarget","evWin","destroy","inArray","findByKey","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","MSPointerEvent","PointerEvent","PointerEventInput","_Input","_this","pointerEvents","removePointer","eventTypeNormalized","pointerType","isTouch","storeIndex","pointerId","button","toArray","uniqueArray","sort","results","TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","TouchInput","targetIds","touches","getTouches","targetTouches","allTouches","identifier","changedTouches","changedTargetTouches","touch","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MouseInput","pressed","which","DEDUP_TIMEOUT","setLastTouch","eventData","primaryTouch","lastTouch","lts","lastTouches","recordTouches","isSyntheticEvent","TouchMouseInput","_manager","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","mouse","invokeArrayArg","STATE_FAILED","_uniqueId","getRecognizerByNameIfManager","otherRecognizer","stateStr","Recognizer","simultaneous","requireFail","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","reset","TapRecognizer","_Recognizer","taps","interval","time","threshold","posThreshold","pTime","pCenter","_timer","_input","count","_this2","validPointers","validMovement","validTouchTime","failTimeout","validInterval","validMultiTap","_this3","clearTimeout","tapCount","AttrRecognizer","attrTest","optionPointers","isRecognized","isValid","directionStr","PanRecognizer","_AttrRecognizer","pX","pY","directionTest","hasMoved","SwipeRecognizer","PinchRecognizer","inOut","RotateRecognizer","PressRecognizer","validTime","defaults","domEvents","inputClass","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","preset","toggleCssProps","add","oldCssProps","Manager","handlers","stop","force","stopped","curRecognizer","existing","remove","targetRecognizer","events","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","triggerDomEvent","SINGLE_TOUCH_INPUT_MAP","SingleTouchInput","started","normalizeSingleTouches","changed","deprecate","message","deprecationMessage","Error","stack","log","console","warn","extend","dest","merge","inherit","child","base","childP","baseP","_super","bindFn","Hammer","VERSION","INPUT_MOVE","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","Tap","Pan","Swipe","Pinch","Rotate","Press","RealHammer","DELETE","pureDeepObjectAssign","_len","updates","_key","deepObjectAssign","_concatInstanceProperty","merged","deepObjectAssignNonentry","stripDelete","_len2","_key2","_context2","setTime","_step","_iterator","_createForOfIteratorHelper","_Reflect$ownKeys","clone","err","_mapInstanceProperty","_i","_Object$keys","_Object$keys2","parseDOT","dot","graph","getToken","token","strict","tokenType","TOKENTYPE","IDENTIFIER","newSyntaxError","parseStatements","edge","parseGraph","NODE_ATTR_MAPPING","fontsize","fontcolor","labelfontcolor","fontname","color","fillcolor","tooltip","labeltooltip","EDGE_ATTR_MAPPING","_Object$create","NULL","DELIMITER","UNKNOWN","DELIMITERS","nextPreview","isAlphaNumeric","charCode","setValue","shift","addNode","graphs","nodes","attr","g","_indexOfInstanceProperty","addEdge","edges","createEdge","enabled","arrows","isComment","c2","isNaN","SyntaxError","chop","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeList","parseAttributeStatement","parseNodeStatement","subgraphs","nof_attr_list","edgeStyles","dashed","solid","dotted","arrowTypes","box","crow","curve","icurve","normal","inv","tee","vee","attr_list","attr_names","_includesInstanceProperty","idx","dir","from_type","to_type","dir_type","_spliceInstanceProperty","idx_arrow","tmp_attr_list","text","maxLength","substr","setProp","pop","convertAttr","converted","visProp","_forEachInstanceProperty","visPropI","DOTToGraph","dotData","graphData","dotNode","graphNode","label","image","shape","_context3","convertEdge","dotEdge","graphEdge","_context4","array1","array2","_context5","subEdge","elem1","elem2","parseGephi","gephiJSON","optionsObj","inheritColor","fixed","parseColor","gEdges","vEdges","gEdge","vEdge","attributes","title","gNode","vNode","background","border","highlight","hover","addDescription","back","createEdgeError","del","deleteClusterError","edgeDescription","edit","editClusterError","editEdge","editEdgeDescription","editNode","CachedImage","NUM_ITERATIONS","Image","canvas","initialized","width","height","h2","h4","h8","h16","w2","w4","w8","w16","coordinates","_fillMipMap","getContext","drawImage","iterations","factor","left","top","Images","images","imageBroken","url","brokenUrl","imageToLoadBrokenUrlOn","onerror","imageToRedrawWith","cachedImage","img","onload","_fixImageCoordinates","_redrawWithImage","_tryloadBrokenUrl","imageToCache","body","offsetWidth","offsetHeight","removeChild","arrayBufferNonExtensible","ArrayBuffer","buffer","isExtensible","ARRAY_BUFFER_NON_EXTENSIBLE","$isExtensible","objectIsExtensible","freezing","preventExtensions","getOwnPropertyNamesExternalModule","FREEZING","REQUIRED","setMetadata","objectID","weakData","meta","internalMetadataModule","fastKey","getWeakData","onFreeze","Result","ResultPrototype","iterate","unboundFunction","iterFn","AS_ENTRIES","IS_RECORD","IS_ITERATOR","INTERRUPTED","condition","callFn","anInstance","InternalMetadataModule","internalStateGetterFor","collection","CONSTRUCTOR_NAME","wrapper","common","IS_WEAK","ADDER","NativePrototype","exported","IS_ADDER","getConstructor","setStrong","defineBuiltIns","unsafe","setSpecies","collectionStrong","define","previous","entry","getEntry","removed","clear","delete","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","Map","Groups","_defaultIndex","_groupIndex","_defaultGroups","defaultOptions","useDefaultGroups","_Object$assign","optionFields","groupName","group","_groups","_Map","_groupNames","groupname","shouldCreate","globalIsFinite","isFinite","numberIsFinite","$some","_setPrototypeOf","p","_Object$setPrototypeOf","_bindInstanceProperty","_inherits","_possibleConstructorReturn","assertThisInitialized","_getPrototypeOf","_Object$getPrototypeOf","_defineProperty","__esModule","$Error","TEST","V8_OR_CHAKRA_STACK_ENTRY","IS_V8_OR_CHAKRA_STACK","errorStackInstallable","clearErrorStack","dropEntries","prepareStackTrace","ERROR_STACK_INSTALLABLE","captureStackTrace","copyConstructorProperties","exceptions","installErrorCause","cause","installErrorStack","normalizeStringArgument","$default","$AggregateError","errors","isInstance","AggregateErrorPrototype","errorsArray","AggregateError","$location","defer","channel","port","engineIsNode","aConstructor","speciesConstructor","defaultConstructor","engineIsIos","IS_IOS","IS_NODE","setImmediate","clearImmediate","Dispatch","MessageChannel","counter","queue","ONREADYSTATECHANGE","location","run","runner","eventListener","globalPostMessageDefer","postMessage","protocol","host","nextTick","port2","port1","onmessage","importScripts","task","Queue","head","tail","Queue$3","notify","toggle","promise","then","engineIsIosPebble","Pebble","engineIsWebosWebkit","macrotask","IS_IOS_PEBBLE","IS_WEBOS_WEBKIT","MutationObserver","WebKitMutationObserver","Promise","queueMicrotaskDescriptor","microtask","flush","exit","enter","resolve","createTextNode","observe","characterData","microtask_1","perform","promiseNativeConstructor","engineIsDeno","engineIsBrowser","NativePromiseConstructor","IS_BROWSER","IS_DENO","NativePromisePrototype","SUBCLASSING","NATIVE_PROMISE_REJECTION_EVENT","PromiseRejectionEvent","FORCED_PROMISE_CONSTRUCTOR","PROMISE_CONSTRUCTOR_SOURCE","GLOBAL_CORE_JS_PROMISE","FakePromise","promiseConstructorDetection","REJECTION_EVENT","PromiseCapability","reject","$$resolve","$$reject","newPromiseCapability","Internal","OwnPromiseCapability","hostReportErrors","PromiseConstructorDetection","newPromiseCapabilityModule","PROMISE","getInternalPromiseState","PromiseConstructor","PromisePrototype","newGenericPromiseCapability","DISPATCH_EVENT","UNHANDLED_REJECTION","isThenable","callReaction","reaction","exited","ok","fail","rejection","onHandleUnhandled","isReject","notified","reactions","onUnhandled","reason","isUnhandled","unwrap","internalReject","internalResolve","executor","onFulfilled","onRejected","PromiseWrapper","promiseStaticsIncorrectIteration","capability","$promiseResolve","remaining","alreadyCalled","catch","race","promiseResolve","promiseCapability","PromiseConstructorWrapper","CHECK_WRAPPER","allSettled","status","PROMISE_ANY_ERROR","any","alreadyResolved","alreadyRejected","finally","onFinally","isFunction","withResolvers","try","_Promise","_reverseInstanceProperty","_regeneratorRuntime","asyncIterator","toStringTag","Generator","Context","makeInvokeMethod","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","defineIteratorMethods","_invoke","AsyncIterator","invoke","__await","callInvokeWithMethodAndArg","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","resultName","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","displayName","isGeneratorFunction","mark","awrap","async","rval","handle","complete","finish","delegateYield","runtime","regenerator","regeneratorRuntime","accidentalStrictMode","IS_RIGHT","memo","$reduce","right","reduce","flattenIntoArray","original","sourceLen","depth","mapper","thisArg","elementLen","targetIndex","sourceIndex","mapFn","flatMap","Set","mergeSort","comparefn","middle","insertionSort","llength","rlength","lindex","rindex","arraySort","firefox","engineFfVersion","engineIsIeOrEdge","webkit","engineWebkitVersion","internalSort","FF","IE_OR_EDGE","V8","WEBKIT","nativeSort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STRICT_METHOD","STABLE_SORT","code","fromCharCode","itemsLength","items","arrayLength","getSortCompare","nativeConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","getOwnPropertyDescriptors","$$5","getRandomValues","rnds8","Uint8Array","rng","crypto","byteToHex","native","randomUUID","v4","buf","rnds","unsafeStringify","SimpleDataPipe","_source","_transformers","_target","_add","_remove","_update","_transformItems","_listeners","_reduceInstanceProperty","transform","_name","payload","oldData","DataPipeUnderConstruction","_filterInstanceProperty","_flatMapInstanceProperty","$parseFloat","parseFloat","numberParseFloat","Infinity","trimmedString","choosify","subOption","pile","allowed","chosen","topMost","chosenEdge","pointInRect","rotationPoint","tmp","bottom","isValidLabel","getSelfRefCoordinates","distanceToBorder","toBorderDist","yFromNodeCenter","xFromNodeCenter","LabelAccumulator","measureText","lines","mod","blocks","tmpText","block","_valuesInstanceProperty","line","tmpLines","tmpLine","firstEmptyBlock","tmpBlocks","determineLineHeights","determineLabelSize","removeEmptyBlocks","tagPattern","_","afterBold","afterItal","afterMono","MarkupAccumulator","bold","ital","mono","spacing","modStack","modName","ch","tagName","emitBlock","unshift","setTag","advance","_this$prepareRegExp2","prepareRegExp","regExp","matched","nextTag","checkTag","unsetTag","prepared","LabelSplitter","selected","getFormattingValues","finalize","font","fontOptions","nlLines","lineCount","multi","splitBlocks","maxWdt","splitStringIntoLines","append","newLine","markupSystem","system","parseEntities","parseWS","parseStartTag","parseEndTag","beginable","parseOverride","decodeMarkupSystem","splitMarkdownBlocks","splitHtmlBlocks","curWidth","words","newText","overMaxWidth","appendLast","getLongestFit","word","getLongestFitWord","newW","multiFontStyle","Label","edgelabel","pointToSelf","baseSize","setOptions","yLine","isEdgeLabel","elementOptions","initFontOptions","labelDirty","newFontOptions","parseFontString","vadjust","constrainWidth","minWdt","constrainHeight","minHgt","valign","widthConstraint","widthConstraintMaximum","widthConstraintMinimum","heightConstraint","heightConstraintMinimum","heightConstraintValign","propagateFonts","deepExtend","constrain","chooser","margins","widthBias","heightBias","dstPile","srcPile","addFontToPile","ret","tmpShorthand","opt","multiName","option","multiFont","optionNames","getFontOption","fontPile","addFontOptionsToPile","getBasicOptions","_loop","modOptions","getFontOptions","baseline","viewFontSize","view","scaling","drawThreshold","maxVisible","calculateLabelSize","_drawBackground","_drawText","fillStyle","getSize","fillRect","_this$_setAlignment2","_setAlignment","textAlign","labelHeight","align","_this$_getColor2","_getColor","strokeColor","fontColor","strokeWidth","lineWidth","strokeStyle","lineJoin","strokeText","fillText","textBaseline","initialStrokeColor","opacity","overrideOpacity","_processLabel","getValue","face","labelHighlightBold","fontString","selectedState","hoverState","inText","differentState","_processLabelText","outOptions","inOptions","newOptionsArray","NodeBase","labelModule","margin","refreshNeeded","boundingBox","adjustSizes","borderWidth","resize","shadow","shadowColor","shadowBlur","shadowSize","shadowOffsetX","shadowX","shadowOffsetY","shadowY","borderDashes","setLineDash","dashes","shapeProperties","borderColor","save","enableBorderDashes","stroke","disableBorderDashes","restore","enableShadow","_fillInstanceProperty","disableShadow","performStroke","_updateBoundingBox","textSize","getTextSize","_createSuper","Derived","hasNativeReflectConstruct","_Reflect$construct","Proxy","_isNativeReflectConstruct","Super","NewTarget","Box","_NodeBase","_setMargins","needsRefresh","dimensions","getDimensionsFromLabel","initContextForDraw","borderRadius","performFill","updateBoundingBox","_addBoundingBoxMargin","CircleImageBase","labelOffset","imageObj","imageObjAlt","setImages","selection_changed","imageTmp","imgPadding","imagePadding","optImgPadding","useImageSize","ratio_width","ratio_height","_getImagePadding","globalAlpha","interpolation","imgPosLeft","imgPosTop","imgWidth","imgHeight","drawImageAtPosition","labelDimensions","yLabel","Circle","_CircleImageBase","diameter","_drawRawCircle","CircularImage","_resizeImage","switchImages","labelX","labelY","coordinateOrigin","clip","_drawImageAtPosition","_drawImageLabel","ShapeBase","_this$customSizeWidth","_this$customSizeHeigh","customSizeWidth","customSizeHeight","sizeMultiplier","CanvasRenderingContext2D","icon","drawExternalLabel","_Object$getOwnPropertySymbols","_Object$getOwnPropertyDescriptor","_objectSpread","_Object$getOwnPropertyDescriptors","_Object$defineProperties","CustomShape","_ShapeBase","ctxRenderer","drawLater","drawNode","nodeDimensions","_distanceToBorder","Database","Diamond","_drawShape","Dot","Ellipse","Icon","iconSize","_icon","weight","side","useBorderWithImage","neutralborderWidth","selectionLineWidth","borderWidthSelected","Square","Hexagon","Star","Text","Triangle","TriangleDown","Node","imagelist","grouplist","globalOptions","bridgeObject","baseFontSize","predefinedPosition","currentShape","_localColor","checkMass","_parseInt","_parseFloat","parseOptions","_load_images","updateLabelModule","checkOpacity","updateShape","hidden","physics","load","brokenImage","unselected","updateGroupOptions","currentGroup","total","customScalingFunction","sizeDiff","fontDiff","visible","nodeId","labelId","origin","parentOptions","newOptions","groupList","groupObj","skipProperties","_Object$getOwnPropertyNames","selectiveNotDeepExtend","allowDeletion","checkCoordinateOrigin","mergeOptions","parsedColor","fillIfDefined","mass","strId","VALIDATOR_PRINT_STYLE","NodesHandler","groups","layoutEngine","functions","createNode","nodesListeners","boldital","level","bindEventListeners","emitter","refresh","_Number$isNaN","_Number$isFinite","doNotEmit","oldNodesData","isDataViewLike","DataSet","me","ids","getIds","newNodes","positionInitially","changedData","dataChanged","_someInstanceProperty","newValue","oldValue","clearPositions","dataArray","nodeIndices","dataset","getDataSet","dsNode","bodyNode","nodeList","nodeObj","toId","fromId","edgeList","_this4","_setTimeout","isDataDescriptor","receiver","_get","_Reflect$get","superPropBase","$hypot","hypot","NaN","value1","value2","div","sum","aLen","larg","EndPoint","points","arrowData","xt","yt","_EndPoint","translate","rotate","imageWidth","imageHeight","Arrow","_EndPoint2","_super2","drawPath","Crow","Curve","pi","startAngle","endAngle","InvertedCurve","InvertedTriangle","Bar","Vee","EndPoints","EdgeBase","_body","_labelModule","colorDirty","hoverWidth","selectionWidth","fromPoint","toPoint","_selected","_hover","viaNode","getViaNode","getColor","_drawDashedLine","_drawLine","_line","_this$_getCircleData2","_getCircleData","_circle","_fromPoint","_toPoint","lineCap","lineDashOffset","_this$_getCircleData4","_this$_getCircleData6","_findBorderPosition","_findBorderPositionCircle","_this$_getCircleData$2","high","selfReference","nearNode","endPointOffset","arrowStrikethrough","iteration","_pointOnCircle","difference","pow","inheritsColor","grd","createLinearGradient","fromColor","toColor","addColorStop","angleFrom","angleTo","renderBehindTheNode","pointTFrom","pointTTo","x1","y1","x3","y3","_getDistanceToEdge","_this$_getCircleData8","px","py","arrowPoint","node1","node2","reversed","scaleFactor","fromArrowScale","fromArrowType","toArrowScale","toArrowType","middleArrowScale","middleArrowType","relativeLength","_Math$hypot","smooth","pointT","via","guidePos","getPoint","halfLength","guidePos1","guidePos2","_this$_getCircleData10","core","origCtxAttr","backgroundColor","backgroundSize","setStrokeDashed","backgroundDashes","BezierEdgeBase","_EdgeBase","_getViaCoordinates","minDistance","lastX","lastY","_getDistanceToLine","viaNode1","viaNode2","quadraticCurveTo","drawBackground","BezierEdgeDynamic","_BezierEdgeBase","_boundFunction","positionBezierNode","physicsChange","setupSupportNode","connect","parentEdgeId","_bezierCurve","cx","cy","cr","_findBorderPositionBezier","_getDistanceToBezierEdge","BezierEdgeStatic","stepX","stepY","roundness","xVia","yVia","myAngle","CubicBezierEdgeBase","via1","via2","vec","CubicBezierEdge","_CubicBezierEdgeBase","viaNodes","forceDirection","_ref2","_getDistanceToBezierEdge2","_ref4","StraightEdge","edgeSegmentLength","toBorderPoint","Edge","baseWidth","edgeType","connected","affectsLayout","updateEdgeType","_setInteractionWidths","toArrow","fromArrow","middleArrow","toArrowSrc","toArrowImageWidth","toArrowImageHeight","middleArrowSrc","middleArrowImageWidth","middleArrowImageHeight","fromArrowSrc","fromArrowImageWidth","fromArrowImageHeight","selectedWidth","changeInType","cleanup","disconnect","attachEdge","detachEdge","widthDiff","drawLine","drawLabel","getArrowData","drawArrowHead","_getRotation","edgeId","isOverlappingWith","xFrom","yFrom","xTo","yTo","xObj","yObj","getDistanceToEdge","copyFromGlobals","selectiveDeepExtend","_JSON$stringify","isString","colorsDefined","selfReferenceSize","EdgesHandler","edgesListeners","edgeData","smoothOptions","reconnectEdges","oldEdgesData","edgesData","oldEdge","showInternalIds","_addMissingEdges","_removeInvalidEdges","_this5","edgesToDelete","toNode","fromNode","isCluster","addIds","BarnesHutSolver","physicsBody","barnesHutTree","_rng","Alea","thetaInversed","theta","overlapAvoidanceFactor","avoidOverlap","gravitationalConstant","physicsNodeIndices","nodeCount","_formBarnesHutTree","_getForceContributions","parentBranch","_getForceContribution","children","NW","NE","SW","SE","childrenCount","centerOfMass","calcSize","_calculateForces","gravityForce","fx","fy","forces","minX","minY","maxX","maxY","rootSize","halfRootSize","centerX","centerY","range","maxWidth","_splitBranch","_placeInTree","totalMass","totalMassInv","biggestSize","skipMassUpdate","_updateBranchMass","region","_placeInRegion","containedNode","_insertRegion","childSize","_drawBranch","branch","RepulsionSolver","repulsingForce","nodeDistance","HierarchicalRepulsionSolver","theseNodesDistance","SpringSolver","edgeLength","node3","edgeIndices","physicsEdgeIndices","springLength","_calculateSpringForce","springForce","springConstant","HierarchicalSpringSolver","springFx","springFy","totalFx","totalFy","correctionFx","correctionFy","CentralGravitySolver","centralGravity","ForceAtlas2BasedRepulsionSolver","_BarnesHutSolver","degree","ForceAtlas2BasedCentralGravitySolver","_CentralGravitySolver","PhysicsEngine","velocities","physicsEnabled","simulationInterval","requiresTimeout","previousStates","referenceState","freezeCache","renderTimer","adaptiveTimestep","adaptiveTimestepEnabled","adaptiveCounter","adaptiveInterval","stabilized","startedStabilization","stabilizationIterations","ready","barnesHut","damping","forceAtlas2Based","repulsion","hierarchicalRepulsion","maxVelocity","minVelocity","solver","stabilization","updateInterval","onlyDynamicEdges","fit","timestep","wind","layoutFailed","initPhysics","stopSimulation","startSimulation","updatePhysicsData","nodesSolver","edgesSolver","gravitySolver","Repulsion","HierarchicalRepulsion","modelOptions","stabilize","viewFunction","simulationStep","_emitStabilized","startTime","_Date$now","physicsTick","runDoubleSpeed","amountOfIterations","solve","moveNodes","_evaluateStepQuality","_startStabilizing","physicsStep","revert","adjustTimeStep","nodeIds","positions","vx","vy","reference","maxNodeVelocity","averageNodeVelocity","nodeVelocity","_performStep","m","maxV","calculateComponentVelocity","targetIterations","_freezeNodes","_stabilizationBatch","running","sendProgress","_finalizeStabilization","_restoreFrozenNodes","forceSize","arrowSize","HSVToHex","NetworkUtil","allNodes","specificNodes","clonedOptions","amountOfConnections","Cluster","_Node","containedNodes","containedEdges","childClusterId","childCluster","clusterEdge","parentClusterEdge","clusteringEdgeReplacingIds","srcId","edgeReplacedById","ClusterEngine","clusteredNodes","clusteredEdges","hubsize","_getHubSize","_checkOptions","nodesToCluster","clusterByConnection","refreshData","joinCondition","childNodesObj","childEdgesObj","_cluster","edgeCount","relevantEdgeCount","clusters","usedNodes","checkJoinCondition","cloneOptions","gatheringSuccessful","childNodeId","_getConnectedId","foundCluster","findClusterData","clusterByEdgeCount","clusterNodeProperties","parentNodeId","parentClonedOptions","childClonedOptions","childNodeIDs","childNode","childNodeKey","childEdge","clusterEdgeProperties","otherNodeId","childKeys","createEdges","newEdges","getNewEdge","createdEdge","newEdge","matchToDirection","matchFromDirection","_createClusteredEdge","_backupEdgeOptions","tmpNodesToRemove","allowSingleNodeCluster","processProperties","childNodesOptions","childEdgesOptions","clusterId","_getClusterPosition","clusterNode","_clusterEdges","originalOptions","clusterNodeId","findNode","parentIndex","parentClusterNodeId","_openChildCluster","releaseFunction","clusterPosition","newPositions","edgesToBeDeleted","otherNode","transferId","transferEdge","otherCluster","_restoreEdge","nodesArray","clusteredNodeId","startEdgeId","allEdgeIds","getClusteredEdges","clusteredEdgeId","getBaseEdges","IdsToHandle","doneIds","foundIds","nextId","nextEdge","replacingIds","replacingId","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","hubThreshold","baseEdge","extraOptions","childNodes","childEdges","_createClusterEdges","clusteredNode","deletedNodeIds","deletedEdgeIds","eachClusterNode","endPointsValid","replacedIds","numValid","containedEdgeId","containedEdge","deletedEdgeId","_filter","shouldBeClustered","_isClusteredNode","_isClusteredEdge","clusterFrom","_getClusterNodeForNode","clusterTo","continueLoop","_loop2","clustersToOpen","numNodes","allowSingle","openCluster","_updateState","CanvasRenderer","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","redrawRequested","renderingActive","renderRequests","allowRedraw","dragging","zooming","hideEdgesOnDrag","hideEdgesOnZoom","hideNodesOnDrag","_determineBrowserMethod","zoomTimeoutId","_requestRedraw","_resizeNodes","_redraw","_startRendering","cancelAnimationFrame","delay","timer","myWindow","_requestNextFrame","_renderStep","drawExternalLabels","frame","setSize","setTransform","clientWidth","clientHeight","clearRect","translation","_drawEdges","_drawNodes","_drawArrows","_drawSelectionBox","alwaysShow","hovered","topLeft","DOMtoCanvas","bottomRight","viewableArea","isSelected","isBoundingBoxOverlappingWith","selectedLength","hoveredLength","_i2","_drawExternalLabels2","drawArrows","browserType","selectionBox","show","onTouch","hammer","onRelease","Canvas","pixelRatio","cameraState","canvasViewCenter","_cleanupCallbacks","autoResize","hammerFrame","_cleanUp","ResizeObserver","observer","unobserve","resizeTimer","_setInterval","clearInterval","resizeFunction","_onResize","previousWidth","previousHeight","widthRatio","heightRatio","newScale","currentViewCenter","distanceFromCenter","container","hasChildNodes","firstChild","className","overflow","tabIndex","_setPixelRatio","noCanvas","fontWeight","padding","innerText","_bindHammer","drag","pinch","eventListeners","onTap","onDoubleTap","onHold","onDragStart","onDrag","onDragEnd","onPinch","onMouseWheel","onMouseMove","onContext","_prepareValue","emitEvent","oldWidth","oldHeight","previousRatio","_getCameraState","newWidth","newHeight","_setCameraState","numerator","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","_determinePixelRatio","_XconvertCanvasToDOM","_YconvertCanvasToDOM","_XconvertDOMtoCanvas","_YconvertDOMtoCanvas","View","animationSpeed","renderRefreshRate","animationEasingFunction","easingTime","sourceScale","targetScale","sourceTranslation","targetTranslation","lockedOnNodeId","lockedOnNodeOffset","touchTime","releaseNode","initialZoom","rawOptions","allNodeIds","minZoomLevel","MIN_VALUE","maxZoomLevel","normalizeFitOptions","zoomLevel","canvasWidth","canvasHeight","getRange","positionDefined","xZoomLevel","yZoomLevel","animationOptions","findCenter","animation","nodePosition","lockedOnNode","getViewPosition","duration","easingFunction","animateView","locked","_transitionRedraw","viewCenter","_lockedRedraw","finished","progress","easingFunctions","keycharm","_exportFunctions","_bound","keydown","keyup","_keys","down","handleEvent","up","keyCode","bound","shiftKey","bindAll","getKey","unbind","newBindings","NavigationHandler","iconsCreated","navigationHammers","boundFunctions","activated","configureKeyboardBindings","navigationButtons","loadNavigationElements","cleanNavigation","navigationDOM","navigationDivs","navigationDivActions","_fit","bindToRedraw","_stopMovement","action","boundAction","keyboard","speed","scaleOld","zoom","scaleFrac","tx","ty","pointer","_context6","_context7","_context8","_context9","_context10","_context11","_context12","_context13","_context14","_context15","_context16","_context17","_context18","_context19","_context20","_context21","_context22","_context23","_context24","_context25","_context26","_context27","bindToWindow","unbindFromRedraw","InteractionHandler","selectionHandler","navigationHandler","popup","popupObj","popupTimer","getPointer","dragNodes","dragView","autoFocus","tooltipDelay","zoomView","zoomSpeed","getAbsoluteLeft","getAbsoluteTop","pinched","multiselect","ctrlKey","metaKey","checkSelectionChanges","commitAndEmit","generateClickEvent","selectAdditionalOnPoint","selectOnPoint","firstSet","secondSet","arrayDiff","firstArr","secondArr","getNodeAt","selection","setSelection","getSelectedNodes","xFixed","yFixed","diffX","diffY","selectionBoxPosition","selectionBoxPositionMinMax","toBeSelectedNodes","selectObject","preScaleDragPointer","postScaleDragPointer","canvasToDOM","popupVisible","_checkHidePopup","setPosition","focus","_checkShowPopup","hoverObject","pointerObj","previousPopupObjId","nodeUnderCursor","popupType","overlappingNodes","getTitle","overlappingEdges","Popup","popupTargetType","popupTargetId","setText","hide","_pointerToPositionObject","stillOnObj","overNode","uncaughtFrozenStore","frozen","UncaughtFrozenStore","findUncaughtFrozen","InternalWeakMap","collectionWeak","enforceInternalState","isFrozen","isSealed","freeze","seal","FROZEN","SEALED","IS_IE11","$WeakMap","WeakMapPrototype","nativeSet","nativeDelete","nativeHas","nativeGet","frozenArray","arrayIntegrityLevel","diffSets","diff","_Set","SingleTypeSelectionAccumulator","_SingleTypeSelectionAccumulator_previousSelection","_SingleTypeSelectionAccumulator_selection","__classPrivateFieldGet","_items","_items2","added","deleted","changes","getChanges","__classPrivateFieldSet","_step2","_iterator2","select","_step3","_iterator3","unselect","SelectionAccumulator","commitHandler","_SelectionAccumulator_nodes","_SelectionAccumulator_edges","_SelectionAccumulator_commitHandler","getSelection","_classPrivateFieldGe","_classPrivateFieldGe2","_classPrivateFieldGe3","summary","commit","_len3","rest","_key3","SelectionHandler","_selectionAccumulator","hoverObj","selectable","selectConnectedEdges","hoverConnectedEdges","updateSelection","getEdgeAt","unselectAll","selectionChanged","deselectObject","DOM","oldSelection","emptySelection","_initBaseEvent","getClickedItems","controlEdge","highlightEdges","_this$_selectionAccum","addEdges","addNodes","_removeFromSelection","canvasPos","returnNode","positionObject","_getAllNodesOverlappingWith","_getEdgesOverlappingWith","returnEdge","mindist","overlappingEdge","dist","_this$_selectionAccum2","deleteNodes","deleteEdges","sizeNodes","sizeEdges","_addToHover","hoverChanged","emitBlurEvent","hoveredEdgesCount","hoveredNodesCount","emitHoverEvent","_hoverConnectedEdges","selectionChanges","previousSelection","getSelectedNodeIds","getSelectedEdgeIds","getNodes","getEdges","getItemsOnPoint","DirectionInterface","abstract","fake_use","nodeArray","VerticalStrategy","_DirectionInterface","layout","hierarchical","addToOrdering","getTreeSize","min_x","max_x","_sortInstanceProperty","levelSeparation","HorizontalStrategy","_DirectionInterface2","min_y","max_y","$every","fillLevelsByDirectionCyclic","levels","fillLevelsByDirection","isEntryNode","shouldLevelBeReplaced","limit","acc","edgeIdProp","newLevelDiff","_ret","_step$value","entryNodeId","entryNode","_ret2","newLevel","targetNodeId","oldLevel","HierarchicalStatus","childrenReference","parentReference","trees","distributionOrdering","distributionIndex","isTree","treeIndex","treeId","accumulator","_getMaxLevel","nodeA","nodeB","minLevel","parents1","parents2","isPresent","curLevel","LayoutEngine","_resetRNG","setPhysics","optionsBackup","randomSeed","improvedLayout","clusterThreshold","nodeSpacing","treeSpacing","blockShifting","edgeMinimization","parentCentralization","sortMethod","setupHierarchicalLayout","layoutNetwork","curveType","allOptions","prevHierarchicalState","setDirectionStrategy","adaptAllOptionsForHierarchicalLayout","seed","initialRandomSeed","backupPhysics","indices","clusterOptions","startLength","before","modules","clustering","clusterBridges","clusterOutliers","_declusterAll","info","kamadaKawai","_shiftToCenter","getRangeCore","clustersPresent","definedLevel","undefinedLevel","lastNodeOnLevel","_determineLevelsByHubsize","_determineLevelsDirected","_determineLevelsCustomCallback","ensureLevel","distribution","_getDistribution","_generateMap","_placeNodesByHierarchy","_condenseHierarchy","stillShifting","branches","shiftTree","getTreeSizes","treeWidths","numTrees","getBranchNodes","getBranchBoundary","branchMap","maxLevel","minSpace","maxSpace","branchNode","getPosition","_this3$_getSpaceAroun2","_getSpaceAroundNode","minSpaceNode","maxSpaceNode","shiftElementsCloser","centerParents","hier","levelNodes","hasSameParent","inSameSubNetwork","branchShiftCallback","centerParent","pos1","pos2","diffAbs","branchNodes1","branchNodes2","maxLevel1","getMaxLevel","maxLevel2","getCollisionLevel","branchNodeBoundary1","branchNodeBoundary2","max1","min2","minSpace2","_shiftBlock","_centerParent","minimizeEdgeLength","allEdges","nodeLevel","C2","referenceNodes","aboveEdges","getFx","getDFx","getGuess","guess","guessMap","dfx","branchNodes","branchBoundary","minSpaceBranch","maxSpaceBranch","branchOffset","moveBranch","_this3$_getSpaceAroun4","newPosition","moveNode","getLevels","shiftBranchesCloserBottomUp","centerAllParents","minimizeEdgeLengthBottomUp","centerAllParentsBottomUp","treeSizes","shiftBy","shiftTrees","useMap","ordering","prevNode","nextNode","nextPos","parents","parentId","_getCenterPosition","_this$_getSpaceAround2","positionedNodes","_indexArrayToNodes","handledNodeCount","_validatePositionAndContinue","parentLevel","childRef","childNodeLevel","previousPos","sharedParent","_findCommonParent","withChild","_placeBranchNodes","idArray","fix","hubSizes","hubSize","_getActiveEdges","_this6","levelDownstream","_getHubSizes","_crawlNetwork","_this7","levelA","setMinLevelToZero","_this8","shakeTowards","_everyInstanceProperty","fillLevelsByDirectionRoots","fillLevelsByDirectionLeaves","_this9","addRelation","checkIfTree","_this10","startingNodeId","crawler","tree","setTreeIndex","_this11","shifter","childA","childB","_this12","iterateParents","parentRef","findParent","foundParent","isVertical","minPos","maxPos","ManipulationSystem","interactionHandler","editMode","manipulationDiv","editModeDiv","closeDiv","_domEventListenerCleanupQueue","temporaryUIFunctions","temporaryEventFunctions","temporaryIds","guiEnabled","inMode","selectedControlNode","initiallyActive","deleteNode","deleteEdge","controlNodeStyle","_clean","_restore","enableEditMode","disableEditMode","locale","locales","_setup","showManipulatorToolbar","_createEditButton","manipulationDOM","selectedNodeCount","getSelectedNodeCount","selectedEdgeCount","getSelectedEdgeCount","selectedTotalCount","needSeperator","_createAddNodeButton","_createSeperator","_createAddEdgeButton","_createEditNodeButton","_createEditEdgeButton","_createDeleteButton","_bindElementEvents","toggleEditMode","_temporaryBindEvent","_createBackButton","_createDescription","_performAddNode","finalizedData","alert","_temporaryBindUI","_handleConnect","_finishConnect","_dragControlNode","_dragStartEdge","editWithoutDrag","edgeBeingEditedId","controlNodeFrom","_getNewTargetNode","controlNodeTo","_controlNodeTouch","_controlNodeDragStart","_controlNodeDrag","_controlNodeDragEnd","findBorderPositions","_performEditEdge","selectedNodes","selectedEdges","deleteFunction","_createWrappers","_removeManipulationDOM","_this$options$locales","_this$options$locales2","setAttribute","recursiveDOMDelete","_createButton","_cleanupDOMEventListeners","_cleanupTemporaryNodesAndEdges","_unbindTemporaryUIs","_unbindTemporaryEvents","addNodeMode","addEdgeMode","editEdgeMode","deleteBtnClass","rtl","deleteSelected","labelClassName","newFunction","UIfunctionName","eventName","domElement","keyupListener","_ref","indexTempEdge","_context28","_context29","indexTempNode","fromSelect","toSelect","overlappingNodeIds","targetNode","connectionEdge","connectFromId","_context30","_context31","_performAddEdge","clickData","defaultData","sourceNodeId","eeFunct","bool","endPoints","nodeOptions","boolean","function","__type__","minimum","dom","maximum","configure","showButton","__any__","interaction","manipulation","clickToUse","configureOptions","configuratorHideOption","parentPath","optionName","FloydWarshall","edgesArray","D_matrix","cell","knode","kcolm","inode","icolm","jnode","jcolm","KamadaKawai","edgeStrength","distanceSolver","ignoreClusters","getDistances","_createL_matrix","_createK_matrix","_createE_matrix","maxIterations","maxEnergy","highE_nodeId","dE_dx","dE_dy","delta_m","subIterations","_this$_getHighestEner2","_getHighestEnergyNode","_moveNode","_this$_getEnergy2","_getEnergy","maxEnergyNodeId","dE_dx_max","dE_dy_max","nodeIdx","_this$_getEnergy4","_this$E_sums$m","E_sums","d2E_dx2","d2E_dxdy","d2E_dy2","x_m","y_m","km","K_matrix","lm","L_matrix","iIdx","x_i","y_i","kmat","lmat","denominator","_updateE_matrix","E_matrix","mIdx","colm","lcolm","oldDx","oldDy","Network","renderer","nodesHandler","edgesHandler","_create","setData","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","getSVGElement","svgContainer","createElementNS","Validator","validate","rawCode","_rawCode$split2","rawLanguage","rawCountry","language","country","normalizeLanguageCode","configurator","Configurator","networkOptions","setModuleOptions","activator","Activator","_updateVisibleIndices","edgeNodesPresent","_updateValueRange","gephi","gephiData","valueMin","valueMax","valueTotal","setValueRange","isActive","active","cluster","getNodesInCluster","clusterByHubsize","updateClusteredNode","getBaseEdge","updateEdge","getSeed","editNodeMode","getPositions","storePositions","getBoundingBox","getConnectedNodes","objectId","getConnectedEdges","getSelectedEdges","selectNodes","selectEdges","commitWithoutEmitting","redraw","getScale","getOptionsFromConfigurator","getOptions","setAttributeNS","groupTemplate","labelObj","styles","xOffset","yOffset","textContent","DOMContainer","insertBefore","network","dotparser","gephiParser","convertDot","convertGephi"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,305,306,307,308,309,310,311,312,313,314,315,316,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,472,473,474,475,476,477,478,479,503,508,511,512,513,517,518,519,520]} \ No newline at end of file +{"version":3,"file":"vis-network.min.js","sources":["../node_modules/core-js-pure/internals/global.js","../node_modules/core-js-pure/internals/fails.js","../node_modules/core-js-pure/internals/function-bind-native.js","../node_modules/core-js-pure/internals/function-apply.js","../node_modules/core-js-pure/internals/function-uncurry-this.js","../node_modules/core-js-pure/internals/classof-raw.js","../node_modules/core-js-pure/internals/function-uncurry-this-clause.js","../node_modules/core-js-pure/internals/document-all.js","../node_modules/core-js-pure/internals/is-callable.js","../node_modules/core-js-pure/internals/descriptors.js","../node_modules/core-js-pure/internals/function-call.js","../node_modules/core-js-pure/internals/object-property-is-enumerable.js","../node_modules/core-js-pure/internals/create-property-descriptor.js","../node_modules/core-js-pure/internals/engine-v8-version.js","../node_modules/core-js-pure/internals/indexed-object.js","../node_modules/core-js-pure/internals/is-null-or-undefined.js","../node_modules/core-js-pure/internals/require-object-coercible.js","../node_modules/core-js-pure/internals/to-indexed-object.js","../node_modules/core-js-pure/internals/is-object.js","../node_modules/core-js-pure/internals/path.js","../node_modules/core-js-pure/internals/get-built-in.js","../node_modules/core-js-pure/internals/object-is-prototype-of.js","../node_modules/core-js-pure/internals/engine-user-agent.js","../node_modules/core-js-pure/internals/symbol-constructor-detection.js","../node_modules/core-js-pure/internals/use-symbol-as-uid.js","../node_modules/core-js-pure/internals/is-symbol.js","../node_modules/core-js-pure/internals/try-to-string.js","../node_modules/core-js-pure/internals/a-callable.js","../node_modules/core-js-pure/internals/get-method.js","../node_modules/core-js-pure/internals/ordinary-to-primitive.js","../node_modules/core-js-pure/internals/define-global-property.js","../node_modules/core-js-pure/internals/shared-store.js","../node_modules/core-js-pure/internals/shared.js","../node_modules/core-js-pure/internals/to-object.js","../node_modules/core-js-pure/internals/has-own-property.js","../node_modules/core-js-pure/internals/uid.js","../node_modules/core-js-pure/internals/well-known-symbol.js","../node_modules/core-js-pure/internals/to-primitive.js","../node_modules/core-js-pure/internals/to-property-key.js","../node_modules/core-js-pure/internals/document-create-element.js","../node_modules/core-js-pure/internals/ie8-dom-define.js","../node_modules/core-js-pure/internals/object-get-own-property-descriptor.js","../node_modules/core-js-pure/internals/is-forced.js","../node_modules/core-js-pure/internals/function-bind-context.js","../node_modules/core-js-pure/internals/v8-prototype-define-bug.js","../node_modules/core-js-pure/internals/an-object.js","../node_modules/core-js-pure/internals/object-define-property.js","../node_modules/core-js-pure/internals/create-non-enumerable-property.js","../node_modules/core-js-pure/internals/export.js","../node_modules/core-js-pure/internals/math-trunc.js","../node_modules/core-js-pure/internals/to-integer-or-infinity.js","../node_modules/core-js-pure/internals/to-absolute-index.js","../node_modules/core-js-pure/internals/to-length.js","../node_modules/core-js-pure/internals/length-of-array-like.js","../node_modules/core-js-pure/internals/array-includes.js","../node_modules/core-js-pure/internals/hidden-keys.js","../node_modules/core-js-pure/internals/object-keys-internal.js","../node_modules/core-js-pure/internals/enum-bug-keys.js","../node_modules/core-js-pure/internals/object-keys.js","../node_modules/core-js-pure/internals/object-get-own-property-symbols.js","../node_modules/core-js-pure/internals/object-assign.js","../node_modules/core-js-pure/modules/es.object.assign.js","../node_modules/core-js-pure/es/object/assign.js","../node_modules/core-js-pure/internals/array-slice.js","../node_modules/core-js-pure/internals/function-bind.js","../node_modules/core-js-pure/modules/es.function.bind.js","../node_modules/core-js-pure/internals/entry-virtual.js","../node_modules/core-js-pure/es/function/virtual/bind.js","../node_modules/core-js-pure/es/instance/bind.js","../node_modules/core-js-pure/stable/instance/bind.js","../lib/network/shapes.ts","../node_modules/component-emitter/index.js","../node_modules/core-js-pure/internals/is-array.js","../node_modules/core-js-pure/internals/does-not-exceed-safe-integer.js","../node_modules/core-js-pure/internals/create-property.js","../node_modules/core-js-pure/internals/to-string-tag-support.js","../node_modules/core-js-pure/internals/classof.js","../node_modules/core-js-pure/internals/inspect-source.js","../node_modules/core-js-pure/internals/is-constructor.js","../node_modules/core-js-pure/internals/array-species-constructor.js","../node_modules/core-js-pure/internals/array-species-create.js","../node_modules/core-js-pure/internals/array-method-has-species-support.js","../node_modules/core-js-pure/modules/es.array.concat.js","../node_modules/core-js-pure/internals/to-string.js","../node_modules/core-js-pure/internals/object-define-properties.js","../node_modules/core-js-pure/internals/html.js","../node_modules/core-js-pure/internals/object-create.js","../node_modules/core-js-pure/internals/shared-key.js","../node_modules/core-js-pure/internals/object-get-own-property-names.js","../node_modules/core-js-pure/internals/array-slice-simple.js","../node_modules/core-js-pure/internals/object-get-own-property-names-external.js","../node_modules/core-js-pure/internals/define-built-in.js","../node_modules/core-js-pure/internals/define-built-in-accessor.js","../node_modules/core-js-pure/internals/well-known-symbol-wrapped.js","../node_modules/core-js-pure/internals/well-known-symbol-define.js","../node_modules/core-js-pure/internals/internal-state.js","../node_modules/core-js-pure/internals/symbol-define-to-primitive.js","../node_modules/core-js-pure/internals/object-to-string.js","../node_modules/core-js-pure/internals/set-to-string-tag.js","../node_modules/core-js-pure/internals/weak-map-basic-detection.js","../node_modules/core-js-pure/internals/array-iteration.js","../node_modules/core-js-pure/modules/es.symbol.constructor.js","../node_modules/core-js-pure/internals/symbol-registry-detection.js","../node_modules/core-js-pure/modules/es.symbol.for.js","../node_modules/core-js-pure/modules/es.symbol.key-for.js","../node_modules/core-js-pure/internals/get-json-replacer-function.js","../node_modules/core-js-pure/modules/es.json.stringify.js","../node_modules/core-js-pure/modules/es.object.get-own-property-symbols.js","../node_modules/core-js-pure/modules/es.symbol.async-iterator.js","../node_modules/core-js-pure/modules/es.symbol.has-instance.js","../node_modules/core-js-pure/modules/es.symbol.is-concat-spreadable.js","../node_modules/core-js-pure/modules/es.symbol.iterator.js","../node_modules/core-js-pure/modules/es.symbol.match.js","../node_modules/core-js-pure/modules/es.symbol.match-all.js","../node_modules/core-js-pure/modules/es.symbol.replace.js","../node_modules/core-js-pure/modules/es.symbol.search.js","../node_modules/core-js-pure/modules/es.symbol.species.js","../node_modules/core-js-pure/modules/es.symbol.split.js","../node_modules/core-js-pure/modules/es.symbol.to-primitive.js","../node_modules/core-js-pure/modules/es.symbol.to-string-tag.js","../node_modules/core-js-pure/modules/es.symbol.unscopables.js","../node_modules/core-js-pure/modules/es.json.to-string-tag.js","../node_modules/core-js-pure/es/symbol/index.js","../node_modules/core-js-pure/internals/iterators-core.js","../node_modules/core-js-pure/internals/iterators.js","../node_modules/core-js-pure/internals/function-name.js","../node_modules/core-js-pure/internals/correct-prototype-getter.js","../node_modules/core-js-pure/internals/object-get-prototype-of.js","../node_modules/core-js-pure/internals/iterator-create-constructor.js","../node_modules/core-js-pure/internals/iterator-define.js","../node_modules/core-js-pure/internals/create-iter-result-object.js","../node_modules/core-js-pure/modules/es.array.iterator.js","../node_modules/core-js-pure/internals/dom-iterables.js","../node_modules/core-js-pure/modules/web.dom-collections.iterator.js","../node_modules/core-js-pure/stable/symbol/index.js","../node_modules/@babel/runtime-corejs3/core-js-stable/symbol.js","../node_modules/core-js-pure/modules/es.array.slice.js","../node_modules/core-js-pure/es/array/virtual/slice.js","../node_modules/core-js-pure/es/instance/slice.js","../node_modules/core-js-pure/stable/instance/slice.js","../node_modules/core-js-pure/internals/own-keys.js","../node_modules/core-js-pure/modules/es.reflect.own-keys.js","../node_modules/core-js-pure/es/reflect/own-keys.js","../node_modules/core-js-pure/modules/es.array.is-array.js","../node_modules/core-js-pure/es/array/is-array.js","../node_modules/core-js-pure/modules/es.array.map.js","../node_modules/core-js-pure/es/array/virtual/map.js","../node_modules/core-js-pure/es/instance/map.js","../node_modules/core-js-pure/stable/instance/map.js","../node_modules/core-js-pure/modules/es.object.keys.js","../node_modules/core-js-pure/es/object/keys.js","../node_modules/core-js-pure/modules/es.date.now.js","../node_modules/core-js-pure/es/date/now.js","../node_modules/core-js-pure/internals/array-method-is-strict.js","../node_modules/core-js-pure/internals/array-for-each.js","../node_modules/core-js-pure/modules/es.array.for-each.js","../node_modules/core-js-pure/es/array/virtual/for-each.js","../node_modules/core-js-pure/stable/instance/for-each.js","../node_modules/core-js-pure/stable/array/virtual/for-each.js","../node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js","../node_modules/core-js-pure/modules/es.array.reverse.js","../node_modules/core-js-pure/es/array/virtual/reverse.js","../node_modules/core-js-pure/es/instance/reverse.js","../node_modules/core-js-pure/stable/instance/reverse.js","../node_modules/core-js-pure/internals/array-set-length.js","../node_modules/core-js-pure/internals/delete-property-or-throw.js","../node_modules/core-js-pure/modules/es.array.splice.js","../node_modules/core-js-pure/es/array/virtual/splice.js","../node_modules/core-js-pure/es/instance/splice.js","../node_modules/core-js-pure/stable/instance/splice.js","../node_modules/core-js-pure/modules/es.array.includes.js","../node_modules/core-js-pure/es/array/virtual/includes.js","../node_modules/core-js-pure/internals/is-regexp.js","../node_modules/core-js-pure/internals/not-a-regexp.js","../node_modules/core-js-pure/internals/correct-is-regexp-logic.js","../node_modules/core-js-pure/modules/es.string.includes.js","../node_modules/core-js-pure/es/string/virtual/includes.js","../node_modules/core-js-pure/es/instance/includes.js","../node_modules/core-js-pure/stable/instance/includes.js","../node_modules/core-js-pure/modules/es.object.get-prototype-of.js","../node_modules/core-js-pure/es/object/get-prototype-of.js","../node_modules/core-js-pure/es/array/virtual/concat.js","../node_modules/core-js-pure/es/instance/concat.js","../node_modules/core-js-pure/stable/instance/concat.js","../node_modules/core-js-pure/modules/es.array.filter.js","../node_modules/core-js-pure/es/array/virtual/filter.js","../node_modules/core-js-pure/es/instance/filter.js","../node_modules/core-js-pure/stable/instance/filter.js","../node_modules/core-js-pure/internals/object-to-array.js","../node_modules/core-js-pure/modules/es.object.values.js","../node_modules/core-js-pure/es/object/values.js","../node_modules/core-js-pure/internals/whitespaces.js","../node_modules/core-js-pure/internals/string-trim.js","../node_modules/core-js-pure/internals/number-parse-int.js","../node_modules/core-js-pure/modules/es.parse-int.js","../node_modules/core-js-pure/es/parse-int.js","../node_modules/core-js-pure/modules/es.array.index-of.js","../node_modules/core-js-pure/es/array/virtual/index-of.js","../node_modules/core-js-pure/es/instance/index-of.js","../node_modules/core-js-pure/stable/instance/index-of.js","../node_modules/core-js-pure/modules/es.object.entries.js","../node_modules/core-js-pure/es/object/entries.js","../node_modules/core-js-pure/modules/es.object.create.js","../node_modules/core-js-pure/es/object/create.js","../node_modules/core-js-pure/es/json/stringify.js","../node_modules/core-js-pure/stable/json/stringify.js","../node_modules/core-js-pure/internals/engine-is-bun.js","../node_modules/core-js-pure/internals/validate-arguments-length.js","../node_modules/core-js-pure/internals/schedulers-fix.js","../node_modules/core-js-pure/modules/web.set-interval.js","../node_modules/core-js-pure/modules/web.set-timeout.js","../node_modules/core-js-pure/stable/set-timeout.js","../node_modules/core-js-pure/internals/array-fill.js","../node_modules/core-js-pure/modules/es.array.fill.js","../node_modules/core-js-pure/es/array/virtual/fill.js","../node_modules/@egjs/hammerjs/dist/hammer.esm.js","../node_modules/core-js-pure/es/instance/fill.js","../node_modules/core-js-pure/stable/instance/fill.js","../node_modules/vis-util/esnext/esm/vis-util.js","../lib/network/dotparser.js","../lib/network/gephiParser.ts","../lib/network/locales.ts","../lib/network/CachedImage.js","../lib/network/Images.js","../node_modules/core-js-pure/internals/array-buffer-non-extensible.js","../node_modules/core-js-pure/internals/object-is-extensible.js","../node_modules/core-js-pure/internals/freezing.js","../node_modules/core-js-pure/internals/internal-metadata.js","../node_modules/core-js-pure/internals/is-array-iterator-method.js","../node_modules/core-js-pure/internals/get-iterator-method.js","../node_modules/core-js-pure/internals/get-iterator.js","../node_modules/core-js-pure/internals/iterator-close.js","../node_modules/core-js-pure/internals/iterate.js","../node_modules/core-js-pure/internals/an-instance.js","../node_modules/core-js-pure/internals/collection.js","../node_modules/core-js-pure/internals/define-built-ins.js","../node_modules/core-js-pure/internals/set-species.js","../node_modules/core-js-pure/internals/collection-strong.js","../node_modules/core-js-pure/modules/es.map.constructor.js","../node_modules/core-js-pure/internals/string-multibyte.js","../node_modules/core-js-pure/modules/es.string.iterator.js","../node_modules/core-js-pure/es/map/index.js","../lib/network/modules/Groups.js","../node_modules/core-js-pure/modules/es.number.is-nan.js","../node_modules/core-js-pure/es/number/is-nan.js","../node_modules/core-js-pure/internals/number-is-finite.js","../node_modules/core-js-pure/modules/es.number.is-finite.js","../node_modules/core-js-pure/es/number/is-finite.js","../node_modules/core-js-pure/modules/es.array.some.js","../node_modules/core-js-pure/es/array/virtual/some.js","../node_modules/core-js-pure/es/instance/some.js","../node_modules/core-js-pure/stable/instance/some.js","../node_modules/core-js-pure/es/object/get-own-property-symbols.js","../node_modules/core-js-pure/modules/es.object.get-own-property-descriptor.js","../node_modules/core-js-pure/es/object/get-own-property-descriptor.js","../node_modules/core-js-pure/modules/es.object.get-own-property-descriptors.js","../node_modules/core-js-pure/es/object/get-own-property-descriptors.js","../node_modules/core-js-pure/modules/es.object.define-properties.js","../node_modules/core-js-pure/es/object/define-properties.js","../node_modules/core-js-pure/modules/es.object.define-property.js","../node_modules/core-js-pure/es/object/define-property.js","../node_modules/core-js-pure/stable/object/define-property.js","../node_modules/core-js-pure/actual/object/define-property.js","../node_modules/core-js-pure/modules/esnext.function.metadata.js","../node_modules/core-js-pure/modules/esnext.symbol.async-dispose.js","../node_modules/core-js-pure/modules/esnext.symbol.dispose.js","../node_modules/core-js-pure/modules/esnext.symbol.metadata.js","../node_modules/core-js-pure/actual/symbol/index.js","../node_modules/core-js-pure/internals/symbol-is-registered.js","../node_modules/core-js-pure/modules/esnext.symbol.is-registered-symbol.js","../node_modules/core-js-pure/internals/symbol-is-well-known.js","../node_modules/core-js-pure/modules/esnext.symbol.is-well-known-symbol.js","../node_modules/core-js-pure/modules/esnext.symbol.matcher.js","../node_modules/core-js-pure/modules/esnext.symbol.observable.js","../node_modules/core-js-pure/modules/esnext.symbol.is-registered.js","../node_modules/core-js-pure/modules/esnext.symbol.is-well-known.js","../node_modules/core-js-pure/modules/esnext.symbol.metadata-key.js","../node_modules/core-js-pure/modules/esnext.symbol.pattern-match.js","../node_modules/core-js-pure/modules/esnext.symbol.replace-all.js","../node_modules/core-js-pure/full/symbol/index.js","../node_modules/core-js-pure/stable/symbol/iterator.js","../node_modules/core-js-pure/es/symbol/iterator.js","../node_modules/core-js-pure/actual/symbol/iterator.js","../node_modules/@babel/runtime-corejs3/helpers/esm/typeof.js","../node_modules/core-js-pure/es/symbol/to-primitive.js","../node_modules/@babel/runtime-corejs3/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime-corejs3/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime-corejs3/helpers/esm/defineProperty.js","../node_modules/core-js-pure/internals/array-reduce.js","../node_modules/core-js-pure/internals/engine-is-node.js","../node_modules/core-js-pure/modules/es.array.reduce.js","../node_modules/core-js-pure/es/array/virtual/reduce.js","../node_modules/core-js-pure/es/instance/reduce.js","../node_modules/core-js-pure/stable/instance/reduce.js","../node_modules/core-js-pure/internals/flatten-into-array.js","../node_modules/core-js-pure/modules/es.array.flat-map.js","../node_modules/core-js-pure/es/array/virtual/flat-map.js","../node_modules/core-js-pure/es/instance/flat-map.js","../node_modules/core-js-pure/stable/instance/flat-map.js","../node_modules/@babel/runtime-corejs3/core-js-stable/symbol/iterator.js","../node_modules/core-js-pure/modules/es.set.constructor.js","../node_modules/core-js-pure/es/set/index.js","../node_modules/core-js-pure/es/get-iterator.js","../node_modules/core-js-pure/internals/array-sort.js","../node_modules/core-js-pure/internals/engine-ff-version.js","../node_modules/core-js-pure/internals/engine-is-ie-or-edge.js","../node_modules/core-js-pure/internals/engine-webkit-version.js","../node_modules/core-js-pure/modules/es.array.sort.js","../node_modules/core-js-pure/es/array/virtual/sort.js","../node_modules/core-js-pure/es/instance/sort.js","../node_modules/core-js-pure/stable/instance/sort.js","../node_modules/core-js-pure/es/array/virtual/keys.js","../node_modules/core-js-pure/stable/instance/keys.js","../node_modules/core-js-pure/stable/array/virtual/keys.js","../node_modules/@babel/runtime-corejs3/core-js-stable/instance/keys.js","../node_modules/core-js-pure/es/array/virtual/values.js","../node_modules/core-js-pure/stable/instance/values.js","../node_modules/core-js-pure/stable/array/virtual/values.js","../node_modules/@babel/runtime-corejs3/core-js-stable/instance/values.js","../node_modules/core-js-pure/es/array/virtual/entries.js","../node_modules/core-js-pure/stable/instance/entries.js","../node_modules/core-js-pure/stable/array/virtual/entries.js","../node_modules/@babel/runtime-corejs3/core-js-stable/instance/entries.js","../node_modules/@babel/runtime-corejs3/core-js-stable/object/define-property.js","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/native.js","../node_modules/uuid/dist/esm-browser/v4.js","../node_modules/vis-data/esnext/esm/vis-data.js","../node_modules/core-js-pure/internals/number-parse-float.js","../node_modules/core-js-pure/modules/es.parse-float.js","../node_modules/core-js-pure/es/parse-float.js","../node_modules/core-js-pure/modules/es.object.get-own-property-names.js","../node_modules/core-js-pure/es/object/get-own-property-names.js","../node_modules/core-js-pure/stable/object/get-own-property-names.js","../lib/network/modules/components/shared/ComponentUtil.js","../lib/network/modules/components/shared/LabelAccumulator.js","../lib/network/modules/components/shared/LabelSplitter.js","../lib/network/modules/components/shared/Label.js","../lib/network/modules/components/nodes/util/NodeBase.js","../lib/network/modules/components/nodes/shapes/Box.js","../lib/network/modules/components/nodes/util/CircleImageBase.js","../lib/network/modules/components/nodes/shapes/Circle.js","../lib/network/modules/components/nodes/shapes/CircularImage.js","../lib/network/modules/components/nodes/util/ShapeBase.js","../lib/network/modules/components/nodes/shapes/CustomShape.js","../lib/network/modules/components/nodes/shapes/Database.js","../lib/network/modules/components/nodes/shapes/Diamond.js","../lib/network/modules/components/nodes/shapes/Dot.js","../lib/network/modules/components/nodes/shapes/Ellipse.js","../lib/network/modules/components/nodes/shapes/Icon.js","../lib/network/modules/components/nodes/shapes/Image.js","../lib/network/modules/components/nodes/shapes/Square.js","../lib/network/modules/components/nodes/shapes/Hexagon.js","../lib/network/modules/components/nodes/shapes/Star.js","../lib/network/modules/components/nodes/shapes/Text.js","../lib/network/modules/components/nodes/shapes/Triangle.js","../lib/network/modules/components/nodes/shapes/TriangleDown.js","../lib/network/modules/components/Node.js","../lib/network/modules/NodesHandler.js","../node_modules/core-js-pure/modules/es.math.hypot.js","../node_modules/core-js-pure/es/math/hypot.js","../lib/network/modules/components/edges/util/end-points.ts","../lib/network/modules/components/edges/util/edge-base.ts","../lib/network/modules/components/edges/util/bezier-edge-base.ts","../lib/network/modules/components/edges/bezier-edge-dynamic.ts","../lib/network/modules/components/edges/bezier-edge-static.ts","../lib/network/modules/components/edges/util/cubic-bezier-edge-base.ts","../lib/network/modules/components/edges/cubic-bezier-edge.ts","../lib/network/modules/components/edges/straight-edge.ts","../lib/network/modules/components/Edge.js","../lib/network/modules/EdgesHandler.js","../lib/network/modules/components/physics/BarnesHutSolver.js","../lib/network/modules/components/physics/RepulsionSolver.js","../lib/network/modules/components/physics/HierarchicalRepulsionSolver.js","../lib/network/modules/components/physics/SpringSolver.js","../lib/network/modules/components/physics/HierarchicalSpringSolver.js","../lib/network/modules/components/physics/CentralGravitySolver.js","../lib/network/modules/components/physics/FA2BasedRepulsionSolver.js","../lib/network/modules/components/physics/FA2BasedCentralGravitySolver.js","../lib/network/modules/PhysicsEngine.js","../lib/network/NetworkUtil.js","../lib/network/modules/components/nodes/Cluster.js","../lib/network/modules/Clustering.js","../lib/network/modules/CanvasRenderer.js","../node_modules/core-js-pure/stable/set-interval.js","../lib/hammerUtil.js","../lib/network/modules/Canvas.js","../lib/network/modules/View.js","../lib/network/modules/view-handler/index.ts","../node_modules/keycharm/src/keycharm.js","../lib/network/modules/components/NavigationHandler.js","../lib/network/modules/InteractionHandler.js","../node_modules/core-js-pure/internals/collection-weak.js","../node_modules/core-js-pure/modules/es.weak-map.constructor.js","../node_modules/core-js-pure/es/weak-map/index.js","../lib/network/modules/selection/selection-accumulator.ts","../lib/network/modules/SelectionHandler.js","../lib/network/modules/components/DirectionStrategy.js","../node_modules/core-js-pure/modules/es.array.every.js","../node_modules/core-js-pure/es/array/virtual/every.js","../node_modules/core-js-pure/es/instance/every.js","../node_modules/core-js-pure/stable/instance/every.js","../lib/network/modules/layout-engine/index.ts","../lib/network/modules/LayoutEngine.js","../lib/network/modules/ManipulationSystem.js","../lib/network/options.ts","../lib/network/modules/components/algorithms/FloydWarshall.js","../lib/network/modules/KamadaKawai.js","../lib/network/Network.js","../lib/DOMutil.js","../lib/network/locale-utils.ts","../lib/index-legacy.ts"],"sourcesContent":["'use strict';\nvar check = function (it) {\n return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || this || Function('return this')();\n","'use strict';\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","'use strict';\nvar classofRaw = require('../internals/classof-raw');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = function (fn) {\n // Nashorn bug:\n // https://github.com/zloirock/core-js/issues/1128\n // https://github.com/zloirock/core-js/issues/1130\n if (classofRaw(fn) === 'Function') return uncurryThis(fn);\n};\n","'use strict';\nvar documentAll = typeof document == 'object' && document.all;\n\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nvar IS_HTMLDDA = typeof documentAll == 'undefined' && documentAll !== undefined;\n\nmodule.exports = {\n all: documentAll,\n IS_HTMLDDA: IS_HTMLDDA\n};\n","'use strict';\nvar $documentAll = require('../internals/document-all');\n\nvar documentAll = $documentAll.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = $documentAll.IS_HTMLDDA ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","'use strict';\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) === 'String' ? split(it, '') : $Object(it);\n} : $Object;\n","'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n","'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar $documentAll = require('../internals/document-all');\n\nvar documentAll = $documentAll.all;\n\nmodule.exports = $documentAll.IS_HTMLDDA ? function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it) || it === documentAll;\n} : function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar path = require('../internals/path');\nvar global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (variable) {\n return isCallable(variable) ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","'use strict';\nmodule.exports = typeof navigator != 'undefined' && String(navigator.userAgent) || '';\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\nvar global = require('../internals/global');\n\nvar $String = global.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol('symbol detection');\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n // of course, fail.\n return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw new $TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nvar global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","'use strict';\nvar global = require('../internals/global');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || defineGlobalProperty(SHARED, {});\n\nmodule.exports = store;\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.33.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2023 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.33.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","'use strict';\nvar global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = global.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw new $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","'use strict';\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a !== 7;\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value === POLYFILL ? true\n : value === NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype !== 42;\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw new $TypeError($String(argument) + ' is not an object');\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","'use strict';\nvar global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar isCallable = require('../internals/is-callable');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar isForced = require('../internals/is-forced');\nvar path = require('../internals/path');\nvar bind = require('../internals/function-bind-context');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\n\nvar wrapConstructor = function (NativeConstructor) {\n var Wrapper = function (a, b, c) {\n if (this instanceof Wrapper) {\n switch (arguments.length) {\n case 0: return new NativeConstructor();\n case 1: return new NativeConstructor(a);\n case 2: return new NativeConstructor(a, b);\n } return new NativeConstructor(a, b, c);\n } return apply(NativeConstructor, this, arguments);\n };\n Wrapper.prototype = NativeConstructor.prototype;\n return Wrapper;\n};\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.dontCallGetSet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var PROTO = options.proto;\n\n var nativeSource = GLOBAL ? global : STATIC ? global[TARGET] : (global[TARGET] || {}).prototype;\n\n var target = GLOBAL ? path : path[TARGET] || createNonEnumerableProperty(path, TARGET, {})[TARGET];\n var targetPrototype = target.prototype;\n\n var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE;\n var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor;\n\n for (key in source) {\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contains in native\n USE_NATIVE = !FORCED && nativeSource && hasOwn(nativeSource, key);\n\n targetProperty = target[key];\n\n if (USE_NATIVE) if (options.dontCallGetSet) {\n descriptor = getOwnPropertyDescriptor(nativeSource, key);\n nativeProperty = descriptor && descriptor.value;\n } else nativeProperty = nativeSource[key];\n\n // export native or implementation\n sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key];\n\n if (USE_NATIVE && typeof targetProperty == typeof sourceProperty) continue;\n\n // bind methods to global for calling from export context\n if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, global);\n // wrap global constructors for prevent changes in this version\n else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty);\n // make static versions for prototype methods\n else if (PROTO && isCallable(sourceProperty)) resultProperty = uncurryThis(sourceProperty);\n // default case\n else resultProperty = sourceProperty;\n\n // add a flag to not completely full polyfills\n if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(resultProperty, 'sham', true);\n }\n\n createNonEnumerableProperty(target, key, resultProperty);\n\n if (PROTO) {\n VIRTUAL_PROTOTYPE = TARGET + 'Prototype';\n if (!hasOwn(path, VIRTUAL_PROTOTYPE)) {\n createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {});\n }\n // export virtual prototype methods\n createNonEnumerableProperty(path[VIRTUAL_PROTOTYPE], key, sourceProperty);\n // export real prototype methods\n if (options.real && targetPrototype && (FORCED || !targetPrototype[key])) {\n createNonEnumerableProperty(targetPrototype, key, sourceProperty);\n }\n }\n }\n};\n","'use strict';\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n var n = +x;\n return (n > 0 ? floor : ceil)(n);\n};\n","'use strict';\nvar trunc = require('../internals/math-trunc');\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- NaN check\n return number !== number || number === 0 ? 0 : trunc(number);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","'use strict';\nvar toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el !== el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value !== value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","'use strict';\n// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar call = require('../internals/function-call');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\nvar concat = uncurryThis([].concat);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol('assign detection');\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] !== 7 || objectKeys($assign({}, B)).join('') !== alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","'use strict';\nvar $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, arity: 2, forced: Object.assign !== assign }, {\n assign: assign\n});\n","'use strict';\nrequire('../../modules/es.object.assign');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.assign;\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar arraySlice = require('../internals/array-slice');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar $Function = Function;\nvar concat = uncurryThis([].concat);\nvar join = uncurryThis([].join);\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n if (!hasOwn(factories, argsLength)) {\n var list = [];\n var i = 0;\n for (; i < argsLength; i++) list[i] = 'a[' + i + ']';\n factories[argsLength] = $Function('C,a', 'return new C(' + join(list, ',') + ')');\n } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.es/ecma262/#sec-function.prototype.bind\n// eslint-disable-next-line es/no-function-prototype-bind -- detection\nmodule.exports = NATIVE_BIND ? $Function.bind : function bind(that /* , ...args */) {\n var F = aCallable(this);\n var Prototype = F.prototype;\n var partArgs = arraySlice(arguments, 1);\n var boundFunction = function bound(/* args... */) {\n var args = concat(partArgs, arraySlice(arguments));\n return this instanceof boundFunction ? construct(F, args.length, args) : F.apply(that, args);\n };\n if (isObject(Prototype)) boundFunction.prototype = Prototype;\n return boundFunction;\n};\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar bind = require('../internals/function-bind');\n\n// `Function.prototype.bind` method\n// https://tc39.es/ecma262/#sec-function.prototype.bind\n// eslint-disable-next-line es/no-function-prototype-bind -- detection\n$({ target: 'Function', proto: true, forced: Function.bind !== bind }, {\n bind: bind\n});\n","'use strict';\nvar path = require('../internals/path');\n\nmodule.exports = function (CONSTRUCTOR) {\n return path[CONSTRUCTOR + 'Prototype'];\n};\n","'use strict';\nrequire('../../../modules/es.function.bind');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Function').bind;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../function/virtual/bind');\n\nvar FunctionPrototype = Function.prototype;\n\nmodule.exports = function (it) {\n var own = it.bind;\n return it === FunctionPrototype || (isPrototypeOf(FunctionPrototype, it) && own === FunctionPrototype.bind) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/bind');\n\nmodule.exports = parent;\n","/**\n * Draw a circle.\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - The radius of the circle.\n */\nexport function drawCircle(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n ctx.beginPath();\n ctx.arc(x, y, r, 0, 2 * Math.PI, false);\n ctx.closePath();\n}\n\n/**\n * Draw a square.\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - Half of the width and height of the square.\n */\nexport function drawSquare(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n ctx.beginPath();\n ctx.rect(x - r, y - r, r * 2, r * 2);\n ctx.closePath();\n}\n\n/**\n * Draw an equilateral triangle standing on a side.\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - Half of the length of the sides.\n * @remarks\n * http://en.wikipedia.org/wiki/Equilateral_triangle\n */\nexport function drawTriangle(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n ctx.beginPath();\n\n // the change in radius and the offset is here to center the shape\n r *= 1.15;\n y += 0.275 * r;\n\n const s = r * 2;\n const s2 = s / 2;\n const ir = (Math.sqrt(3) / 6) * s; // radius of inner circle\n const h = Math.sqrt(s * s - s2 * s2); // height\n\n ctx.moveTo(x, y - (h - ir));\n ctx.lineTo(x + s2, y + ir);\n ctx.lineTo(x - s2, y + ir);\n ctx.lineTo(x, y - (h - ir));\n ctx.closePath();\n}\n\n/**\n * Draw an equilateral triangle standing on a vertex.\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - Half of the length of the sides.\n * @remarks\n * http://en.wikipedia.org/wiki/Equilateral_triangle\n */\nexport function drawTriangleDown(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n ctx.beginPath();\n\n // the change in radius and the offset is here to center the shape\n r *= 1.15;\n y -= 0.275 * r;\n\n const s = r * 2;\n const s2 = s / 2;\n const ir = (Math.sqrt(3) / 6) * s; // radius of inner circle\n const h = Math.sqrt(s * s - s2 * s2); // height\n\n ctx.moveTo(x, y + (h - ir));\n ctx.lineTo(x + s2, y - ir);\n ctx.lineTo(x - s2, y - ir);\n ctx.lineTo(x, y + (h - ir));\n ctx.closePath();\n}\n\n/**\n * Draw a star.\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - The outer radius of the star.\n */\nexport function drawStar(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/\n ctx.beginPath();\n\n // the change in radius and the offset is here to center the shape\n r *= 0.82;\n y += 0.1 * r;\n\n for (let n = 0; n < 10; n++) {\n const radius = n % 2 === 0 ? r * 1.3 : r * 0.5;\n ctx.lineTo(\n x + radius * Math.sin((n * 2 * Math.PI) / 10),\n y - radius * Math.cos((n * 2 * Math.PI) / 10)\n );\n }\n\n ctx.closePath();\n}\n\n/**\n * Draw a diamond.\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - Half of the width and height of the diamond.\n * @remarks\n * http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/\n */\nexport function drawDiamond(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n ctx.beginPath();\n\n ctx.lineTo(x, y + r);\n ctx.lineTo(x + r, y);\n ctx.lineTo(x, y - r);\n ctx.lineTo(x - r, y);\n\n ctx.closePath();\n}\n\n/**\n * Draw a rectangle with rounded corners.\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param w - The width of the rectangle.\n * @param h - The height of the rectangle.\n * @param r - The radius of the corners.\n * @remarks\n * http://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-on-html-canvas\n */\nexport function drawRoundRect(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n w: number,\n h: number,\n r: number\n): void {\n const r2d = Math.PI / 180;\n if (w - 2 * r < 0) {\n r = w / 2;\n } //ensure that the radius isn't too large for x\n if (h - 2 * r < 0) {\n r = h / 2;\n } //ensure that the radius isn't too large for y\n ctx.beginPath();\n ctx.moveTo(x + r, y);\n ctx.lineTo(x + w - r, y);\n ctx.arc(x + w - r, y + r, r, r2d * 270, r2d * 360, false);\n ctx.lineTo(x + w, y + h - r);\n ctx.arc(x + w - r, y + h - r, r, 0, r2d * 90, false);\n ctx.lineTo(x + r, y + h);\n ctx.arc(x + r, y + h - r, r, r2d * 90, r2d * 180, false);\n ctx.lineTo(x, y + r);\n ctx.arc(x + r, y + r, r, r2d * 180, r2d * 270, false);\n ctx.closePath();\n}\n\n/**\n * Draw an ellipse.\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param w - The width of the ellipse.\n * @param h - The height of the ellipse.\n * @remarks\n * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas\n *\n * Postfix '_vis' added to discern it from standard method ellipse().\n */\nexport function drawEllipse(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n w: number,\n h: number\n): void {\n const kappa = 0.5522848,\n ox = (w / 2) * kappa, // control point offset horizontal\n oy = (h / 2) * kappa, // control point offset vertical\n xe = x + w, // x-end\n ye = y + h, // y-end\n xm = x + w / 2, // x-middle\n ym = y + h / 2; // y-middle\n\n ctx.beginPath();\n ctx.moveTo(x, ym);\n ctx.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\n ctx.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\n ctx.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\n ctx.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\n ctx.closePath();\n}\n\n/**\n * Draw an isometric cylinder.\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param w - The width of the database.\n * @param h - The height of the database.\n * @remarks\n * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas\n */\nexport function drawDatabase(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n w: number,\n h: number\n): void {\n const f = 1 / 3;\n const wEllipse = w;\n const hEllipse = h * f;\n\n const kappa = 0.5522848,\n ox = (wEllipse / 2) * kappa, // control point offset horizontal\n oy = (hEllipse / 2) * kappa, // control point offset vertical\n xe = x + wEllipse, // x-end\n ye = y + hEllipse, // y-end\n xm = x + wEllipse / 2, // x-middle\n ym = y + hEllipse / 2, // y-middle\n ymb = y + (h - hEllipse / 2), // y-midlle, bottom ellipse\n yeb = y + h; // y-end, bottom ellipse\n\n ctx.beginPath();\n ctx.moveTo(xe, ym);\n\n ctx.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\n ctx.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\n\n ctx.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\n ctx.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\n\n ctx.lineTo(xe, ymb);\n\n ctx.bezierCurveTo(xe, ymb + oy, xm + ox, yeb, xm, yeb);\n ctx.bezierCurveTo(xm - ox, yeb, x, ymb + oy, x, ymb);\n\n ctx.lineTo(x, ym);\n}\n\n/**\n * Draw a dashed line.\n * @param ctx - The context this shape will be rendered to.\n * @param x - The start position on the x axis.\n * @param y - The start position on the y axis.\n * @param x2 - The end position on the x axis.\n * @param y2 - The end position on the y axis.\n * @param pattern - List of lengths starting with line and then alternating between space and line.\n * @author David Jordan\n * @remarks\n * date 2012-08-08\n * http://stackoverflow.com/questions/4576724/dotted-stroke-in-canvas\n */\nexport function drawDashedLine(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n x2: number,\n y2: number,\n pattern: number[]\n): void {\n ctx.beginPath();\n ctx.moveTo(x, y);\n\n const patternLength = pattern.length;\n const dx = x2 - x;\n const dy = y2 - y;\n const slope = dy / dx;\n let distRemaining = Math.sqrt(dx * dx + dy * dy);\n let patternIndex = 0;\n let draw = true;\n let xStep = 0;\n let dashLength = +pattern[0];\n\n while (distRemaining >= 0.1) {\n dashLength = +pattern[patternIndex++ % patternLength];\n if (dashLength > distRemaining) {\n dashLength = distRemaining;\n }\n\n xStep = Math.sqrt((dashLength * dashLength) / (1 + slope * slope));\n xStep = dx < 0 ? -xStep : xStep;\n x += xStep;\n y += slope * xStep;\n\n if (draw === true) {\n ctx.lineTo(x, y);\n } else {\n ctx.moveTo(x, y);\n }\n\n distRemaining -= dashLength;\n draw = !draw;\n }\n}\n\n/**\n * Draw a hexagon.\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - The radius of the hexagon.\n */\nexport function drawHexagon(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n ctx.beginPath();\n const sides = 6;\n const a = (Math.PI * 2) / sides;\n ctx.moveTo(x + r, y);\n for (let i = 1; i < sides; i++) {\n ctx.lineTo(x + r * Math.cos(a * i), y + r * Math.sin(a * i));\n }\n ctx.closePath();\n}\n\nconst shapeMap = {\n circle: drawCircle,\n dashedLine: drawDashedLine,\n database: drawDatabase,\n diamond: drawDiamond,\n ellipse: drawEllipse,\n ellipse_vis: drawEllipse,\n hexagon: drawHexagon,\n roundRect: drawRoundRect,\n square: drawSquare,\n star: drawStar,\n triangle: drawTriangle,\n triangleDown: drawTriangleDown,\n};\n\n/**\n * Returns either custom or native drawing function base on supplied name.\n * @param name - The name of the function. Either the name of a\n * CanvasRenderingContext2D property or an export from shapes.ts without the\n * draw prefix.\n * @returns The function that can be used for rendering. In case of native\n * CanvasRenderingContext2D function the API is normalized to\n * `(ctx: CanvasRenderingContext2D, ...originalArgs) => void`.\n */\nexport function getShape(\n name: keyof CanvasRenderingContext2D | keyof typeof shapeMap\n): any {\n if (Object.prototype.hasOwnProperty.call(shapeMap, name)) {\n return (shapeMap as any)[name];\n } else {\n return function (ctx: CanvasRenderingContext2D, ...args: any[]): void {\n (CanvasRenderingContext2D.prototype as any)[name].call(ctx, args);\n };\n }\n}\n","\n/**\n * Expose `Emitter`.\n */\n\nif (typeof module !== 'undefined') {\n module.exports = Emitter;\n}\n\n/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nfunction Emitter(obj) {\n if (obj) return mixin(obj);\n};\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n .push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n function on() {\n this.off(event, on);\n fn.apply(this, arguments);\n }\n\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks['$' + event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks['$' + event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this._callbacks['$' + event];\n }\n\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n this._callbacks = this._callbacks || {};\n\n var args = new Array(arguments.length - 1)\n , callbacks = this._callbacks['$' + event];\n\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n\n return this;\n};\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n this._callbacks = this._callbacks || {};\n return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n return !! this.listeners(event).length;\n};\n","'use strict';\nvar classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n return classof(argument) === 'Array';\n};\n","'use strict';\nvar $TypeError = TypeError;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991\n\nmodule.exports = function (it) {\n if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded');\n return it;\n};\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.test(noop);\n\nvar isConstructorModern = function isConstructor(argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, empty, argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy = function isConstructor(argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n }\n try {\n // we can't check .prototype since constructors produced by .bind haven't it\n // `Function#toString` throws on some built-it function in some legacy engines\n // (for example, `DOMQuad` and similar in FF41-)\n return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n } catch (error) {\n return true;\n }\n};\n\nisConstructorLegacy.sham = true;\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called = true; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n","'use strict';\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar $Array = Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? $Array : C;\n};\n","'use strict';\nvar arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !arrayMethodHasSpeciesSupport('concat');\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n concat: function concat(arg) {\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = lengthOfArrayLike(E);\n doesNotExceedSafeInteger(n + len);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n doesNotExceedSafeInteger(n + 1);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n","'use strict';\nvar classof = require('../internals/classof');\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string');\n return $String(argument);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","'use strict';\n/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n// eslint-disable-next-line es/no-object-create -- safe\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n","'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","'use strict';\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\n\nvar $Array = Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = $Array(max(fin - k, 0));\n var n = 0;\n for (; k < fin; k++, n++) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n};\n","'use strict';\n/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice-simple');\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return arraySlice(windowNames);\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && classof(it) === 'Window'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","'use strict';\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (target, key, value, options) {\n if (options && options.enumerable) target[key] = value;\n else createNonEnumerableProperty(target, key, value);\n return target;\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n return defineProperty.f(target, name, descriptor);\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","'use strict';\nvar path = require('../internals/path');\nvar hasOwn = require('../internals/has-own-property');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get = store.get;\n store.has = store.has;\n store.set = store.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set = function (it, metadata) {\n if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n store.set(it, metadata);\n return metadata;\n };\n get = function (it) {\n return store.get(it) || {};\n };\n has = function (it) {\n return store.has(it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar getBuiltIn = require('../internals/get-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar defineBuiltIn = require('../internals/define-built-in');\n\nmodule.exports = function () {\n var Symbol = getBuiltIn('Symbol');\n var SymbolPrototype = Symbol && Symbol.prototype;\n var valueOf = SymbolPrototype && SymbolPrototype.valueOf;\n var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) {\n // `Symbol.prototype[@@toPrimitive]` method\n // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\n // eslint-disable-next-line no-unused-vars -- required for .length\n defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function (hint) {\n return call(valueOf, this);\n }, { arity: 1 });\n }\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar defineProperty = require('../internals/object-define-property').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar toString = require('../internals/object-to-string');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC, SET_METHOD) {\n if (it) {\n var target = STATIC ? it : it.prototype;\n if (!hasOwn(target, TO_STRING_TAG)) {\n defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n if (SET_METHOD && !TO_STRING_TAG_SUPPORT) {\n createNonEnumerableProperty(target, 'toString', toString);\n }\n }\n};\n","'use strict';\nvar global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE === 1;\n var IS_FILTER = TYPE === 2;\n var IS_SOME = TYPE === 3;\n var IS_EVERY = TYPE === 4;\n var IS_FIND_INDEX = TYPE === 6;\n var IS_FILTER_REJECT = TYPE === 7;\n var NO_HOLES = TYPE === 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var length = lengthOfArrayLike(self);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar $toString = require('../internals/to-string');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\nvar defineSymbolToPrimitive = require('../internals/symbol-define-to-primitive');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\n\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];\nvar RangeError = global.RangeError;\nvar TypeError = global.TypeError;\nvar QObject = global.QObject;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar push = uncurryThis([].push);\n\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar WellKnownSymbolsStore = shared('wks');\n\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar fallbackDefineProperty = function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n};\n\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a !== 7;\n}) ? fallbackDefineProperty : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPropertyKey(P);\n anObject(Attributes);\n if (hasOwn(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPropertyKey(V);\n var enumerable = call(nativePropertyIsEnumerable, this, P);\n if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]\n ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPropertyKey(P);\n if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function (O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {\n push(result, AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (isPrototypeOf(SymbolPrototype, this)) throw new TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);\n if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n var descriptor = createPropertyDescriptor(1, value);\n try {\n setSymbolDescriptor(this, tag, descriptor);\n } catch (error) {\n if (!(error instanceof RangeError)) throw error;\n fallbackDefineProperty(this, tag, descriptor);\n }\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n SymbolPrototype = $Symbol[PROTOTYPE];\n\n defineBuiltIn(SymbolPrototype, 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n defineBuiltIn($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n definePropertiesModule.f = $defineProperties;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n defineBuiltInAccessor(SymbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n defineBuiltIn(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.es/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.es/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.es/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.es/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames\n});\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\ndefineSymbolToPrimitive();\n\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","'use strict';\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\n/* eslint-disable es/no-symbol -- safe */\nmodule.exports = NATIVE_SYMBOL && !!Symbol['for'] && !!Symbol.keyFor;\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar hasOwn = require('../internals/has-own-property');\nvar toString = require('../internals/to-string');\nvar shared = require('../internals/shared');\nvar NATIVE_SYMBOL_REGISTRY = require('../internals/symbol-registry-detection');\n\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\n\n// `Symbol.for` method\n// https://tc39.es/ecma262/#sec-symbol.for\n$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {\n 'for': function (key) {\n var string = toString(key);\n if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = getBuiltIn('Symbol')(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar hasOwn = require('../internals/has-own-property');\nvar isSymbol = require('../internals/is-symbol');\nvar tryToString = require('../internals/try-to-string');\nvar shared = require('../internals/shared');\nvar NATIVE_SYMBOL_REGISTRY = require('../internals/symbol-registry-detection');\n\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\n\n// `Symbol.keyFor` method\n// https://tc39.es/ecma262/#sec-symbol.keyfor\n$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw new TypeError(tryToString(sym) + ' is not a symbol');\n if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n }\n});\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isArray = require('../internals/is-array');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar toString = require('../internals/to-string');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (replacer) {\n if (isCallable(replacer)) return replacer;\n if (!isArray(replacer)) return;\n var rawLength = replacer.length;\n var keys = [];\n for (var i = 0; i < rawLength; i++) {\n var element = replacer[i];\n if (typeof element == 'string') push(keys, element);\n else if (typeof element == 'number' || classof(element) === 'Number' || classof(element) === 'String') push(keys, toString(element));\n }\n var keysLength = keys.length;\n var root = true;\n return function (key, value) {\n if (root) {\n root = false;\n return value;\n }\n if (isArray(this)) return value;\n for (var j = 0; j < keysLength; j++) if (keys[j] === key) return value;\n };\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isSymbol = require('../internals/is-symbol');\nvar arraySlice = require('../internals/array-slice');\nvar getReplacerFunction = require('../internals/get-json-replacer-function');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nvar $String = String;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar exec = uncurryThis(/./.exec);\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar replace = uncurryThis(''.replace);\nvar numberToString = uncurryThis(1.0.toString);\n\nvar tester = /[\\uD800-\\uDFFF]/g;\nvar low = /^[\\uD800-\\uDBFF]$/;\nvar hi = /^[\\uDC00-\\uDFFF]$/;\n\nvar WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function () {\n var symbol = getBuiltIn('Symbol')('stringify detection');\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) !== '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) !== '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) !== '{}';\n});\n\n// https://github.com/tc39/proposal-well-formed-stringify\nvar ILL_FORMED_UNICODE = fails(function () {\n return $stringify('\\uDF06\\uD834') !== '\"\\\\udf06\\\\ud834\"'\n || $stringify('\\uDEAD') !== '\"\\\\udead\"';\n});\n\nvar stringifyWithSymbolsFix = function (it, replacer) {\n var args = arraySlice(arguments);\n var $replacer = getReplacerFunction(replacer);\n if (!isCallable($replacer) && (it === undefined || isSymbol(it))) return; // IE8 returns string on undefined\n args[1] = function (key, value) {\n // some old implementations (like WebKit) could pass numbers as keys\n if (isCallable($replacer)) value = call($replacer, this, $String(key), value);\n if (!isSymbol(value)) return value;\n };\n return apply($stringify, null, args);\n};\n\nvar fixIllFormed = function (match, offset, string) {\n var prev = charAt(string, offset - 1);\n var next = charAt(string, offset + 1);\n if ((exec(low, match) && !exec(hi, next)) || (exec(hi, match) && !exec(low, prev))) {\n return '\\\\u' + numberToString(charCodeAt(match, 0), 16);\n } return match;\n};\n\nif ($stringify) {\n // `JSON.stringify` method\n // https://tc39.es/ecma262/#sec-json.stringify\n $({ target: 'JSON', stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n stringify: function stringify(it, replacer, space) {\n var args = arraySlice(arguments);\n var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args);\n return ILL_FORMED_UNICODE && typeof result == 'string' ? replace(result, tester, fixIllFormed) : result;\n }\n });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar fails = require('../internals/fails');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar toObject = require('../internals/to-object');\n\n// V8 ~ Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FORCED = !NATIVE_SYMBOL || fails(function () { getOwnPropertySymbolsModule.f(1); });\n\n// `Object.getOwnPropertySymbols` method\n// https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n$({ target: 'Object', stat: true, forced: FORCED }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : [];\n }\n});\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.hasInstance` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.hasinstance\ndefineWellKnownSymbol('hasInstance');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.isConcatSpreadable` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.isconcatspreadable\ndefineWellKnownSymbol('isConcatSpreadable');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.match` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.match\ndefineWellKnownSymbol('match');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.matchAll` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.matchall\ndefineWellKnownSymbol('matchAll');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.replace` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.replace\ndefineWellKnownSymbol('replace');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.search` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.search\ndefineWellKnownSymbol('search');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.species` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.species\ndefineWellKnownSymbol('species');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.split` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.split\ndefineWellKnownSymbol('split');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\nvar defineSymbolToPrimitive = require('../internals/symbol-define-to-primitive');\n\n// `Symbol.toPrimitive` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.toprimitive\ndefineWellKnownSymbol('toPrimitive');\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\ndefineSymbolToPrimitive();\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag(getBuiltIn('Symbol'), 'Symbol');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.unscopables` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.unscopables\ndefineWellKnownSymbol('unscopables');\n","'use strict';\nvar global = require('../internals/global');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n","'use strict';\nrequire('../../modules/es.array.concat');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.symbol');\nrequire('../../modules/es.symbol.async-iterator');\nrequire('../../modules/es.symbol.description');\nrequire('../../modules/es.symbol.has-instance');\nrequire('../../modules/es.symbol.is-concat-spreadable');\nrequire('../../modules/es.symbol.iterator');\nrequire('../../modules/es.symbol.match');\nrequire('../../modules/es.symbol.match-all');\nrequire('../../modules/es.symbol.replace');\nrequire('../../modules/es.symbol.search');\nrequire('../../modules/es.symbol.species');\nrequire('../../modules/es.symbol.split');\nrequire('../../modules/es.symbol.to-primitive');\nrequire('../../modules/es.symbol.to-string-tag');\nrequire('../../modules/es.symbol.unscopables');\nrequire('../../modules/es.json.to-string-tag');\nrequire('../../modules/es.math.to-string-tag');\nrequire('../../modules/es.reflect.to-string-tag');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Symbol;\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n defineBuiltIn(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar $Object = Object;\nvar ObjectPrototype = $Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof $Object ? ObjectPrototype : null;\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/iterator-create-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND];\n\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n }\n\n return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME === 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n defineBuiltIn(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","'use strict';\n// `CreateIterResultObject` abstract operation\n// https://tc39.es/ecma262/#sec-createiterresultobject\nmodule.exports = function (value, done) {\n return { value: value, done: done };\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineProperty = require('../internals/object-define-property').f;\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return createIterResultObject(undefined, true);\n }\n switch (kind) {\n case 'keys': return createIterResultObject(index, false);\n case 'values': return createIterResultObject(target[index], false);\n } return createIterResultObject([index, target[index]], false);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nvar values = Iterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n// V8 ~ Chrome 45- bug\nif (!IS_PURE && DESCRIPTORS && values.name !== 'values') try {\n defineProperty(values, 'name', { value: 'values' });\n} catch (error) { /* empty */ }\n","'use strict';\n// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","'use strict';\nrequire('../modules/es.array.iterator');\nvar DOMIterables = require('../internals/dom-iterables');\nvar global = require('../internals/global');\nvar classof = require('../internals/classof');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n if (CollectionPrototype && classof(CollectionPrototype) !== TO_STRING_TAG) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n Iterators[COLLECTION_NAME] = Iterators.Array;\n}\n","'use strict';\nvar parent = require('../../es/symbol');\nrequire('../../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/symbol\");","'use strict';\nvar $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar nativeSlice = require('../internals/array-slice');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar $Array = Array;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (isConstructor(Constructor) && (Constructor === $Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === $Array || Constructor === undefined) {\n return nativeSlice(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? $Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.slice');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').slice;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/slice');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.slice;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.slice) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/slice');\n\nmodule.exports = parent;\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar ownKeys = require('../internals/own-keys');\n\n// `Reflect.ownKeys` method\n// https://tc39.es/ecma262/#sec-reflect.ownkeys\n$({ target: 'Reflect', stat: true }, {\n ownKeys: ownKeys\n});\n","'use strict';\nrequire('../../modules/es.reflect.own-keys');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Reflect.ownKeys;\n","'use strict';\nvar $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\n\n// `Array.isArray` method\n// https://tc39.es/ecma262/#sec-array.isarray\n$({ target: 'Array', stat: true }, {\n isArray: isArray\n});\n","'use strict';\nrequire('../../modules/es.array.is-array');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Array.isArray;\n","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.map');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').map;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/map');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.map;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.map) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/map');\n\nmodule.exports = parent;\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n","'use strict';\nrequire('../../modules/es.object.keys');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.keys;\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar $Date = Date;\nvar thisTimeValue = uncurryThis($Date.prototype.getTime);\n\n// `Date.now` method\n// https://tc39.es/ecma262/#sec-date.now\n$({ target: 'Date', stat: true }, {\n now: function now() {\n return thisTimeValue(new $Date());\n }\n});\n","'use strict';\nrequire('../../modules/es.date.now');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Date.now;\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call -- required for testing\n method.call(null, argument || function () { return 1; }, 1);\n });\n};\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n","'use strict';\nvar $ = require('../internals/export');\nvar forEach = require('../internals/array-for-each');\n\n// `Array.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n$({ target: 'Array', proto: true, forced: [].forEach !== forEach }, {\n forEach: forEach\n});\n","'use strict';\nrequire('../../../modules/es.array.for-each');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').forEach;\n","'use strict';\nrequire('../../modules/web.dom-collections.iterator');\nvar classof = require('../../internals/classof');\nvar hasOwn = require('../../internals/has-own-property');\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/for-each');\n\nvar ArrayPrototype = Array.prototype;\n\nvar DOMIterables = {\n DOMTokenList: true,\n NodeList: true\n};\n\nmodule.exports = function (it) {\n var own = it.forEach;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.forEach)\n || hasOwn(DOMIterables, classof(it)) ? method : own;\n};\n","'use strict';\nvar parent = require('../../../es/array/virtual/for-each');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/instance/for-each\");","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isArray = require('../internals/is-array');\n\nvar nativeReverse = uncurryThis([].reverse);\nvar test = [1, 2];\n\n// `Array.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-array.prototype.reverse\n// fix for Safari 12.0 bug\n// https://bugs.webkit.org/show_bug.cgi?id=188794\n$({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {\n reverse: function reverse() {\n // eslint-disable-next-line no-self-assign -- dirty hack\n if (isArray(this)) this.length = this.length;\n return nativeReverse(this);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.reverse');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').reverse;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/reverse');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.reverse;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.reverse) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/reverse');\n\nmodule.exports = parent;\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar isArray = require('../internals/is-array');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Safari < 13 does not throw an error in this case\nvar SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function () {\n // makes no sense without proper strict mode support\n if (this !== undefined) return true;\n try {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty([], 'length', { writable: false }).length = 1;\n } catch (error) {\n return error instanceof TypeError;\n }\n}();\n\nmodule.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) {\n if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) {\n throw new $TypeError('Cannot set read only .length');\n } return O.length = length;\n} : function (O, length) {\n return O.length = length;\n};\n","'use strict';\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (O, P) {\n if (!delete O[P]) throw new $TypeError('Cannot delete property ' + tryToString(P) + ' of ' + tryToString(O));\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar setArrayLength = require('../internals/array-set-length');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar deletePropertyOrThrow = require('../internals/delete-property-or-throw');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart);\n }\n doesNotExceedSafeInteger(len + insertCount - actualDeleteCount);\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else deletePropertyOrThrow(O, to);\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) deletePropertyOrThrow(O, k - 1);\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else deletePropertyOrThrow(O, to);\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n setArrayLength(O, len - actualDeleteCount + insertCount);\n return A;\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.splice');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').splice;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/splice');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.splice;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.splice) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/splice');\n\nmodule.exports = parent;\n","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar fails = require('../internals/fails');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// FF99+ bug\nvar BROKEN_ON_SPARSE = fails(function () {\n // eslint-disable-next-line es/no-array-prototype-includes -- detection\n return !Array(1).includes();\n});\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true, forced: BROKEN_ON_SPARSE }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","'use strict';\nrequire('../../../modules/es.array.includes');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').includes;\n","'use strict';\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp');\n};\n","'use strict';\nvar isRegExp = require('../internals/is-regexp');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw new $TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (error1) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (error2) { /* empty */ }\n } return false;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\nvar stringIndexOf = uncurryThis(''.indexOf);\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~stringIndexOf(\n toString(requireObjectCoercible(this)),\n toString(notARegExp(searchString)),\n arguments.length > 1 ? arguments[1] : undefined\n );\n }\n});\n","'use strict';\nrequire('../../../modules/es.string.includes');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('String').includes;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar arrayMethod = require('../array/virtual/includes');\nvar stringMethod = require('../string/virtual/includes');\n\nvar ArrayPrototype = Array.prototype;\nvar StringPrototype = String.prototype;\n\nmodule.exports = function (it) {\n var own = it.includes;\n if (it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.includes)) return arrayMethod;\n if (typeof it == 'string' || it === StringPrototype || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.includes)) {\n return stringMethod;\n } return own;\n};\n","'use strict';\nvar parent = require('../../es/instance/includes');\n\nmodule.exports = parent;\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar nativeGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n getPrototypeOf: function getPrototypeOf(it) {\n return nativeGetPrototypeOf(toObject(it));\n }\n});\n\n","'use strict';\nrequire('../../modules/es.object.get-prototype-of');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.getPrototypeOf;\n","'use strict';\nrequire('../../../modules/es.array.concat');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').concat;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/concat');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.concat;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.concat) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/concat');\n\nmodule.exports = parent;\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.filter');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').filter;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/filter');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.filter;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.filter) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/filter');\n\nmodule.exports = parent;\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar objectGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// in some IE versions, `propertyIsEnumerable` returns incorrect result on integer keys\n// of `null` prototype objects\nvar IE_BUG = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-create -- safe\n var O = Object.create(null);\n O[2] = 2;\n return !propertyIsEnumerable(O, 2);\n});\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var IE_WORKAROUND = IE_BUG && objectGetPrototypeOf(O) === null;\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || (IE_WORKAROUND ? key in O : propertyIsEnumerable(O, key))) {\n push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.es/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.es/ecma262/#sec-object.values\n values: createMethod(false)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n values: function values(O) {\n return $values(O);\n }\n});\n","'use strict';\nrequire('../../modules/es.object.values');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.values;\n","'use strict';\n// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar ltrim = RegExp('^[' + whitespaces + ']+');\nvar rtrim = RegExp('(^|[^' + whitespaces + '])[' + whitespaces + ']+$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = replace(string, ltrim, '');\n if (TYPE & 2) string = replace(string, rtrim, '$1');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","'use strict';\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseInt = global.parseInt;\nvar Symbol = global.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar hex = /^[+-]?0x/i;\nvar exec = uncurryThis(hex.exec);\nvar FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22\n // MS Edge 18- broken with boxed symbols\n || (ITERATOR && !fails(function () { $parseInt(Object(ITERATOR)); }));\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\nmodule.exports = FORCED ? function parseInt(string, radix) {\n var S = trim(toString(string));\n return $parseInt(S, (radix >>> 0) || (exec(hex, S) ? 16 : 10));\n} : $parseInt;\n","'use strict';\nvar $ = require('../internals/export');\nvar $parseInt = require('../internals/number-parse-int');\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\n$({ global: true, forced: parseInt !== $parseInt }, {\n parseInt: $parseInt\n});\n","'use strict';\nrequire('../modules/es.parse-int');\nvar path = require('../internals/path');\n\nmodule.exports = path.parseInt;\n","'use strict';\n/* eslint-disable es/no-array-prototype-indexof -- required for testing */\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar $indexOf = require('../internals/array-includes').indexOf;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar nativeIndexOf = uncurryThis([].indexOf);\n\nvar NEGATIVE_ZERO = !!nativeIndexOf && 1 / nativeIndexOf([1], 1, -0) < 0;\nvar FORCED = NEGATIVE_ZERO || !arrayMethodIsStrict('indexOf');\n\n// `Array.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-array.prototype.indexof\n$({ target: 'Array', proto: true, forced: FORCED }, {\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n var fromIndex = arguments.length > 1 ? arguments[1] : undefined;\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? nativeIndexOf(this, searchElement, fromIndex) || 0\n : $indexOf(this, searchElement, fromIndex);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.index-of');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').indexOf;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/index-of');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.indexOf;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.indexOf) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/index-of');\n\nmodule.exports = parent;\n","'use strict';\nvar $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\n});\n","'use strict';\nrequire('../../modules/es.object.entries');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.entries;\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar create = require('../internals/object-create');\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n create: create\n});\n","'use strict';\nrequire('../../modules/es.object.create');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nmodule.exports = function create(P, D) {\n return Object.create(P, D);\n};\n","'use strict';\nrequire('../../modules/es.json.stringify');\nvar path = require('../../internals/path');\nvar apply = require('../../internals/function-apply');\n\n// eslint-disable-next-line es/no-json -- safe\nif (!path.JSON) path.JSON = { stringify: JSON.stringify };\n\n// eslint-disable-next-line no-unused-vars -- required for `.length`\nmodule.exports = function stringify(it, replacer, space) {\n return apply(path.JSON.stringify, null, arguments);\n};\n","'use strict';\nvar parent = require('../../es/json/stringify');\n\nmodule.exports = parent;\n","'use strict';\n/* global Bun -- Deno case */\nmodule.exports = typeof Bun == 'function' && Bun && typeof Bun.version == 'string';\n","'use strict';\nvar $TypeError = TypeError;\n\nmodule.exports = function (passed, required) {\n if (passed < required) throw new $TypeError('Not enough arguments');\n return passed;\n};\n","'use strict';\nvar global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar isCallable = require('../internals/is-callable');\nvar ENGINE_IS_BUN = require('../internals/engine-is-bun');\nvar USER_AGENT = require('../internals/engine-user-agent');\nvar arraySlice = require('../internals/array-slice');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\n\nvar Function = global.Function;\n// dirty IE9- and Bun 0.3.0- checks\nvar WRAP = /MSIE .\\./.test(USER_AGENT) || ENGINE_IS_BUN && (function () {\n var version = global.Bun.version.split('.');\n return version.length < 3 || version[0] === '0' && (version[1] < 3 || version[1] === '3' && version[2] === '0');\n})();\n\n// IE9- / Bun 0.3.0- setTimeout / setInterval / setImmediate additional parameters fix\n// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers\n// https://github.com/oven-sh/bun/issues/1633\nmodule.exports = function (scheduler, hasTimeArg) {\n var firstParamIndex = hasTimeArg ? 2 : 1;\n return WRAP ? function (handler, timeout /* , ...arguments */) {\n var boundArgs = validateArgumentsLength(arguments.length, 1) > firstParamIndex;\n var fn = isCallable(handler) ? handler : Function(handler);\n var params = boundArgs ? arraySlice(arguments, firstParamIndex) : [];\n var callback = boundArgs ? function () {\n apply(fn, this, params);\n } : fn;\n return hasTimeArg ? scheduler(callback, timeout) : scheduler(callback);\n } : scheduler;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar schedulersFix = require('../internals/schedulers-fix');\n\nvar setInterval = schedulersFix(global.setInterval, true);\n\n// Bun / IE9- setInterval additional parameters fix\n// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval\n$({ global: true, bind: true, forced: global.setInterval !== setInterval }, {\n setInterval: setInterval\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar schedulersFix = require('../internals/schedulers-fix');\n\nvar setTimeout = schedulersFix(global.setTimeout, true);\n\n// Bun / IE9- setTimeout additional parameters fix\n// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout\n$({ global: true, bind: true, forced: global.setTimeout !== setTimeout }, {\n setTimeout: setTimeout\n});\n","'use strict';\nrequire('../modules/web.timers');\nvar path = require('../internals/path');\n\nmodule.exports = path.setTimeout;\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.fill` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = lengthOfArrayLike(O);\n var argumentsLength = arguments.length;\n var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n var end = argumentsLength > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar fill = require('../internals/array-fill');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.fill` method\n// https://tc39.es/ecma262/#sec-array.prototype.fill\n$({ target: 'Array', proto: true }, {\n fill: fill\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('fill');\n","'use strict';\nrequire('../../../modules/es.array.fill');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').fill;\n","/*! Hammer.JS - v2.0.17-rc - 2019-12-16\n * http://naver.github.io/egjs\n *\n * Forked By Naver egjs\n * Copyright (c) hammerjs\n * Licensed under the MIT license */\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\n/**\n * @private\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\n\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\nvar assign$1 = assign;\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = typeof document === \"undefined\" ? {\n style: {}\n} : document.createElement('div');\nvar TYPE_FUNCTION = 'function';\nvar round = Math.round,\n abs = Math.abs;\nvar now = Date.now;\n\n/**\n * @private\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\n\nfunction prefixed(obj, property) {\n var prefix;\n var prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n var i = 0;\n\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = prefix ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n\n i++;\n }\n\n return undefined;\n}\n\n/* eslint-disable no-new-func, no-nested-ternary */\nvar win;\n\nif (typeof window === \"undefined\") {\n // window is undefined in node.js\n win = {};\n} else {\n win = window;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n\n var touchMap = {};\n var cssSupports = win.CSS && win.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function (val) {\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n return touchMap[val] = cssSupports ? win.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\n\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\nvar SUPPORT_TOUCH = 'ontouchstart' in win;\nvar SUPPORT_POINTER_EVENTS = prefixed(win, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\nvar COMPUTE_INTERVAL = 25;\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * @private\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * @private\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\n\nfunction boolOrFn(val, args) {\n if (typeof val === TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n\n return val;\n}\n\n/**\n * @private\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * @private\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\n\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n } // pan-x OR pan-y\n\n\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n } // manipulation\n\n\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\n/**\n * @private\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\n\nvar TouchAction =\n/*#__PURE__*/\nfunction () {\n function TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n }\n /**\n * @private\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n\n\n var _proto = TouchAction.prototype;\n\n _proto.set = function set(value) {\n // find out the touch-action by the event handlers\n if (value === TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n\n this.actions = value.toLowerCase().trim();\n };\n /**\n * @private\n * just re-set the touchAction value\n */\n\n\n _proto.update = function update() {\n this.set(this.manager.options.touchAction);\n };\n /**\n * @private\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n\n\n _proto.compute = function compute() {\n var actions = [];\n each(this.manager.recognizers, function (recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n };\n /**\n * @private\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n\n\n _proto.preventDefaults = function preventDefaults(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection; // if the touch action did prevented once this session\n\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n // do not prevent defaults if this is a tap gesture\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone || hasPanY && direction & DIRECTION_HORIZONTAL || hasPanX && direction & DIRECTION_VERTICAL) {\n return this.preventSrc(srcEvent);\n }\n };\n /**\n * @private\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n\n\n _proto.preventSrc = function preventSrc(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n };\n\n return TouchAction;\n}();\n\n/**\n * @private\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node === parent) {\n return true;\n }\n\n node = node.parentNode;\n }\n\n return false;\n}\n\n/**\n * @private\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\n\nfunction getCenter(pointers) {\n var pointersLength = pointers.length; // no need to loop when only one touch\n\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0;\n var y = 0;\n var i = 0;\n\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * @private\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\n\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * @private\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\n\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n\n var x = p2[props[0]] - p1[props[0]];\n var y = p2[props[1]] - p1[props[1]];\n return Math.sqrt(x * x + y * y);\n}\n\n/**\n * @private\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\n\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n\n var x = p2[props[0]] - p1[props[0]];\n var y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * @private\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\n\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center; // let { offsetDelta:offset = {}, prevDelta = {}, prevInput = {} } = session;\n // jscs throwing error on defalut destructured values and without defaults tests fail\n\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * @private\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * @private\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\n\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\n/**\n * @private\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\n\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * @private\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\n\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input;\n var deltaTime = input.timeStamp - last.timeStamp;\n var velocity;\n var velocityX;\n var velocityY;\n var direction;\n\n if (input.eventType !== INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = abs(v.x) > abs(v.y) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n* @private\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\n\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length; // store the first input to calculate the distance and direction\n\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n } // to compute scale and rotation we need to store the multiple touches\n\n\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput,\n firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = abs(overallVelocity.x) > abs(overallVelocity.y) ? overallVelocity.x : overallVelocity.y;\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n input.maxPointers = !session.prevInput ? input.pointers.length : input.pointers.length > session.prevInput.maxPointers ? input.pointers.length : session.prevInput.maxPointers;\n computeIntervalInputData(session, input); // find the correct target\n\n var target = manager.element;\n var srcEvent = input.srcEvent;\n var srcEventTarget;\n\n if (srcEvent.composedPath) {\n srcEventTarget = srcEvent.composedPath()[0];\n } else if (srcEvent.path) {\n srcEventTarget = srcEvent.path[0];\n } else {\n srcEventTarget = srcEvent.target;\n }\n\n if (hasParent(srcEventTarget, target)) {\n target = srcEventTarget;\n }\n\n input.target = target;\n}\n\n/**\n * @private\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\n\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = eventType & INPUT_START && pointersLen - changedPointersLen === 0;\n var isFinal = eventType & (INPUT_END | INPUT_CANCEL) && pointersLen - changedPointersLen === 0;\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n } // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n\n\n input.eventType = eventType; // compute scale, rotation etc\n\n computeInputData(manager, input); // emit secret event\n\n manager.emit('hammer.input', input);\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * @private\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * @private\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function (type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * @private\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function (type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * @private\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return doc.defaultView || doc.parentWindow || window;\n}\n\n/**\n * @private\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\n\nvar Input =\n/*#__PURE__*/\nfunction () {\n function Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget; // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n\n this.domHandler = function (ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n }\n /**\n * @private\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n\n\n var _proto = Input.prototype;\n\n _proto.handler = function handler() {};\n /**\n * @private\n * bind the events\n */\n\n\n _proto.init = function init() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n };\n /**\n * @private\n * unbind the events\n */\n\n\n _proto.destroy = function destroy() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n };\n\n return Input;\n}();\n\n/**\n * @private\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n\n while (i < src.length) {\n if (findByKey && src[i][findByKey] == find || !findByKey && src[i] === find) {\n // do not use === here, test fails\n return i;\n }\n\n i++;\n }\n\n return -1;\n }\n}\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n}; // in IE10 the pointer types is defined as an enum\n\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n\n};\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; // IE10 has prefixed support, and case-sensitive\n\nif (win.MSPointerEvent && !win.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n/**\n * @private\n * Pointer events input\n * @constructor\n * @extends Input\n */\n\n\nvar PointerEventInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(PointerEventInput, _Input);\n\n function PointerEventInput() {\n var _this;\n\n var proto = PointerEventInput.prototype;\n proto.evEl = POINTER_ELEMENT_EVENTS;\n proto.evWin = POINTER_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.store = _this.manager.session.pointerEvents = [];\n return _this;\n }\n /**\n * @private\n * handle mouse events\n * @param {Object} ev\n */\n\n\n var _proto = PointerEventInput.prototype;\n\n _proto.handler = function handler(ev) {\n var store = this.store;\n var removePointer = false;\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n var isTouch = pointerType === INPUT_TYPE_TOUCH; // get index of the event in the store\n\n var storeIndex = inArray(store, ev.pointerId, 'pointerId'); // start and mouse must be down\n\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n } // it not found, so the pointer hasn't been down (so it's probably a hover)\n\n\n if (storeIndex < 0) {\n return;\n } // update the event in the store\n\n\n store[storeIndex] = ev;\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n };\n\n return PointerEventInput;\n}(Input);\n\n/**\n * @private\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * @private\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\n\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function (a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n/**\n * @private\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\n\nvar TouchInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(TouchInput, _Input);\n\n function TouchInput() {\n var _this;\n\n TouchInput.prototype.evTarget = TOUCH_TARGET_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.targetIds = {}; // this.evTarget = TOUCH_TARGET_EVENTS;\n\n return _this;\n }\n\n var _proto = TouchInput.prototype;\n\n _proto.handler = function handler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n };\n\n return TouchInput;\n}(Input);\n\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds; // when there is only one touch, the process can be simplified\n\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i;\n var targetTouches;\n var changedTouches = toArray(ev.changedTouches);\n var changedTargetTouches = [];\n var target = this.target; // get target touches from touches\n\n targetTouches = allTouches.filter(function (touch) {\n return hasParent(touch.target, target);\n }); // collect touches\n\n if (type === INPUT_START) {\n i = 0;\n\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n } // filter changed touches to only contain touches that exist in the collected target ids\n\n\n i = 0;\n\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n } // cleanup removed touches\n\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [// merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), changedTargetTouches];\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n/**\n * @private\n * Mouse events input\n * @constructor\n * @extends Input\n */\n\nvar MouseInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(MouseInput, _Input);\n\n function MouseInput() {\n var _this;\n\n var proto = MouseInput.prototype;\n proto.evEl = MOUSE_ELEMENT_EVENTS;\n proto.evWin = MOUSE_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.pressed = false; // mousedown state\n\n return _this;\n }\n /**\n * @private\n * handle mouse events\n * @param {Object} ev\n */\n\n\n var _proto = MouseInput.prototype;\n\n _proto.handler = function handler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type]; // on start we want to have the left mouse button down\n\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n } // mouse must be down\n\n\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n };\n\n return MouseInput;\n}(Input);\n\n/**\n * @private\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction setLastTouch(eventData) {\n var _eventData$changedPoi = eventData.changedPointers,\n touch = _eventData$changedPoi[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {\n x: touch.clientX,\n y: touch.clientY\n };\n var lts = this.lastTouches;\n this.lastTouches.push(lastTouch);\n\n var removeLastTouch = function removeLastTouch() {\n var i = lts.indexOf(lastTouch);\n\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX;\n var y = eventData.srcEvent.clientY;\n\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x);\n var dy = Math.abs(y - t.y);\n\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n\n return false;\n}\n\nvar TouchMouseInput =\n/*#__PURE__*/\nfunction () {\n var TouchMouseInput =\n /*#__PURE__*/\n function (_Input) {\n _inheritsLoose(TouchMouseInput, _Input);\n\n function TouchMouseInput(_manager, callback) {\n var _this;\n\n _this = _Input.call(this, _manager, callback) || this;\n\n _this.handler = function (manager, inputEvent, inputData) {\n var isTouch = inputData.pointerType === INPUT_TYPE_TOUCH;\n var isMouse = inputData.pointerType === INPUT_TYPE_MOUSE;\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n } // when we're in a touch event, record touches to de-dupe synthetic mouse event\n\n\n if (isTouch) {\n recordTouches.call(_assertThisInitialized(_assertThisInitialized(_this)), inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(_assertThisInitialized(_assertThisInitialized(_this)), inputData)) {\n return;\n }\n\n _this.callback(manager, inputEvent, inputData);\n };\n\n _this.touch = new TouchInput(_this.manager, _this.handler);\n _this.mouse = new MouseInput(_this.manager, _this.handler);\n _this.primaryTouch = null;\n _this.lastTouches = [];\n return _this;\n }\n /**\n * @private\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n\n\n var _proto = TouchMouseInput.prototype;\n\n /**\n * @private\n * remove the event listeners\n */\n _proto.destroy = function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n };\n\n return TouchMouseInput;\n }(Input);\n\n return TouchMouseInput;\n}();\n\n/**\n * @private\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\n\nfunction createInputInstance(manager) {\n var Type; // let inputClass = manager.options.inputClass;\n\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n\n return new Type(manager, inputHandler);\n}\n\n/**\n * @private\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\n\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n\n return false;\n}\n\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * @private\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * @private\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n\n if (manager) {\n return manager.get(otherRecognizer);\n }\n\n return otherRecognizer;\n}\n\n/**\n * @private\n * get a usable string, used as event postfix\n * @param {constant} state\n * @returns {String} state\n */\n\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n\n return '';\n}\n\n/**\n * @private\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\n\n/**\n * @private\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\n\nvar Recognizer =\n/*#__PURE__*/\nfunction () {\n function Recognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n this.options = _extends({\n enable: true\n }, options);\n this.id = uniqueId();\n this.manager = null; // default is enable true\n\n this.state = STATE_POSSIBLE;\n this.simultaneous = {};\n this.requireFail = [];\n }\n /**\n * @private\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n\n\n var _proto = Recognizer.prototype;\n\n _proto.set = function set(options) {\n assign$1(this.options, options); // also update the touchAction, in case something changed about the directions/enabled state\n\n this.manager && this.manager.touchAction.update();\n return this;\n };\n /**\n * @private\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.recognizeWith = function recognizeWith(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n\n return this;\n };\n /**\n * @private\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.dropRecognizeWith = function dropRecognizeWith(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n };\n /**\n * @private\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.requireFailure = function requireFailure(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n\n return this;\n };\n /**\n * @private\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.dropRequireFailure = function dropRequireFailure(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n\n return this;\n };\n /**\n * @private\n * has require failures boolean\n * @returns {boolean}\n */\n\n\n _proto.hasRequireFailures = function hasRequireFailures() {\n return this.requireFail.length > 0;\n };\n /**\n * @private\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n\n\n _proto.canRecognizeWith = function canRecognizeWith(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n };\n /**\n * @private\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n\n\n _proto.emit = function emit(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n } // 'panstart' and 'panmove'\n\n\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) {\n // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n } // panend and pancancel\n\n\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n };\n /**\n * @private\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n\n\n _proto.tryEmit = function tryEmit(input) {\n if (this.canEmit()) {\n return this.emit(input);\n } // it's failing anyway\n\n\n this.state = STATE_FAILED;\n };\n /**\n * @private\n * can we emit?\n * @returns {boolean}\n */\n\n\n _proto.canEmit = function canEmit() {\n var i = 0;\n\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n\n i++;\n }\n\n return true;\n };\n /**\n * @private\n * update the recognizer\n * @param {Object} inputData\n */\n\n\n _proto.recognize = function recognize(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign$1({}, inputData); // is is enabled and allow recognizing?\n\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n } // reset when we've reached the end\n\n\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone); // the recognizer has recognized a gesture\n // so trigger an event\n\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n };\n /**\n * @private\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {constant} STATE\n */\n\n /* jshint ignore:start */\n\n\n _proto.process = function process(inputData) {};\n /* jshint ignore:end */\n\n /**\n * @private\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n\n\n _proto.getTouchAction = function getTouchAction() {};\n /**\n * @private\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n\n\n _proto.reset = function reset() {};\n\n return Recognizer;\n}();\n\n/**\n * @private\n * A tap is recognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\n\nvar TapRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n _inheritsLoose(TapRecognizer, _Recognizer);\n\n function TapRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _Recognizer.call(this, _extends({\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300,\n // max time between the multi-tap taps\n time: 250,\n // max time of the pointer to be down (like finger on the screen)\n threshold: 9,\n // a minimal movement is ok, but keep it low\n posThreshold: 10\n }, options)) || this; // previous time and center,\n // used for tap counting\n\n _this.pTime = false;\n _this.pCenter = false;\n _this._timer = null;\n _this._input = null;\n _this.count = 0;\n return _this;\n }\n\n var _proto = TapRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_MANIPULATION];\n };\n\n _proto.process = function process(input) {\n var _this2 = this;\n\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n this.reset();\n\n if (input.eventType & INPUT_START && this.count === 0) {\n return this.failTimeout();\n } // we only allow little movement\n // and we've reached an end event, so a tap is possible\n\n\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType !== INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? input.timeStamp - this.pTime < options.interval : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input; // if tap count matches we have recognized it,\n // else it has began recognizing...\n\n var tapCount = this.count % options.taps;\n\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeout(function () {\n _this2.state = STATE_RECOGNIZED;\n\n _this2.tryEmit();\n }, options.interval);\n return STATE_BEGAN;\n }\n }\n }\n\n return STATE_FAILED;\n };\n\n _proto.failTimeout = function failTimeout() {\n var _this3 = this;\n\n this._timer = setTimeout(function () {\n _this3.state = STATE_FAILED;\n }, this.options.interval);\n return STATE_FAILED;\n };\n\n _proto.reset = function reset() {\n clearTimeout(this._timer);\n };\n\n _proto.emit = function emit() {\n if (this.state === STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n };\n\n return TapRecognizer;\n}(Recognizer);\n\n/**\n * @private\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\n\nvar AttrRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n _inheritsLoose(AttrRecognizer, _Recognizer);\n\n function AttrRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _Recognizer.call(this, _extends({\n pointers: 1\n }, options)) || this;\n }\n /**\n * @private\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n\n\n var _proto = AttrRecognizer.prototype;\n\n _proto.attrTest = function attrTest(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n };\n /**\n * @private\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n\n\n _proto.process = function process(input) {\n var state = this.state;\n var eventType = input.eventType;\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input); // on cancel input and we've recognized before, return STATE_CANCELLED\n\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n\n return state | STATE_CHANGED;\n }\n\n return STATE_FAILED;\n };\n\n return AttrRecognizer;\n}(Recognizer);\n\n/**\n * @private\n * direction cons to string\n * @param {constant} direction\n * @returns {String}\n */\n\nfunction directionStr(direction) {\n if (direction === DIRECTION_DOWN) {\n return 'down';\n } else if (direction === DIRECTION_UP) {\n return 'up';\n } else if (direction === DIRECTION_LEFT) {\n return 'left';\n } else if (direction === DIRECTION_RIGHT) {\n return 'right';\n }\n\n return '';\n}\n\n/**\n * @private\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar PanRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(PanRecognizer, _AttrRecognizer);\n\n function PanRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _AttrRecognizer.call(this, _extends({\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n }, options)) || this;\n _this.pX = null;\n _this.pY = null;\n return _this;\n }\n\n var _proto = PanRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n var direction = this.options.direction;\n var actions = [];\n\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n\n return actions;\n };\n\n _proto.directionTest = function directionTest(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY; // lock to axis?\n\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = x === 0 ? DIRECTION_NONE : x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x !== this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = y === 0 ? DIRECTION_NONE : y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y !== this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n };\n\n _proto.attrTest = function attrTest(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) && ( // replace with a super call\n this.state & STATE_BEGAN || !(this.state & STATE_BEGAN) && this.directionTest(input));\n };\n\n _proto.emit = function emit(input) {\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n\n _AttrRecognizer.prototype.emit.call(this, input);\n };\n\n return PanRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar SwipeRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(SwipeRecognizer, _AttrRecognizer);\n\n function SwipeRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n }, options)) || this;\n }\n\n var _proto = SwipeRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n };\n\n _proto.attrTest = function attrTest(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return _AttrRecognizer.prototype.attrTest.call(this, input) && direction & input.offsetDirection && input.distance > this.options.threshold && input.maxPointers === this.options.pointers && abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n };\n\n _proto.emit = function emit(input) {\n var direction = directionStr(input.offsetDirection);\n\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n };\n\n return SwipeRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar PinchRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(PinchRecognizer, _AttrRecognizer);\n\n function PinchRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'pinch',\n threshold: 0,\n pointers: 2\n }, options)) || this;\n }\n\n var _proto = PinchRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_NONE];\n };\n\n _proto.attrTest = function attrTest(input) {\n return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n };\n\n _proto.emit = function emit(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n\n _AttrRecognizer.prototype.emit.call(this, input);\n };\n\n return PinchRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar RotateRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(RotateRecognizer, _AttrRecognizer);\n\n function RotateRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'rotate',\n threshold: 0,\n pointers: 2\n }, options)) || this;\n }\n\n var _proto = RotateRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_NONE];\n };\n\n _proto.attrTest = function attrTest(input) {\n return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n };\n\n return RotateRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\n\nvar PressRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n _inheritsLoose(PressRecognizer, _Recognizer);\n\n function PressRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _Recognizer.call(this, _extends({\n event: 'press',\n pointers: 1,\n time: 251,\n // minimal time of the pointer to be pressed\n threshold: 9\n }, options)) || this;\n _this._timer = null;\n _this._input = null;\n return _this;\n }\n\n var _proto = PressRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_AUTO];\n };\n\n _proto.process = function process(input) {\n var _this2 = this;\n\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n this._input = input; // we only allow little movement\n // and we've reached an end event, so a tap is possible\n\n if (!validMovement || !validPointers || input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeout(function () {\n _this2.state = STATE_RECOGNIZED;\n\n _this2.tryEmit();\n }, options.time);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n\n return STATE_FAILED;\n };\n\n _proto.reset = function reset() {\n clearTimeout(this._timer);\n };\n\n _proto.emit = function emit(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && input.eventType & INPUT_END) {\n this.manager.emit(this.options.event + \"up\", input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n };\n\n return PressRecognizer;\n}(Recognizer);\n\nvar defaults = {\n /**\n * @private\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * @private\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @private\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * @private\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * @private\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * @private\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * @private\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: \"none\",\n\n /**\n * @private\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: \"none\",\n\n /**\n * @private\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: \"none\",\n\n /**\n * @private\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: \"none\",\n\n /**\n * @private\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: \"none\",\n\n /**\n * @private\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: \"rgba(0,0,0,0)\"\n }\n};\n/**\n * @private\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * This is separated with other defaults because of tree-shaking.\n * @type {Array}\n */\n\nvar preset = [[RotateRecognizer, {\n enable: false\n}], [PinchRecognizer, {\n enable: false\n}, ['rotate']], [SwipeRecognizer, {\n direction: DIRECTION_HORIZONTAL\n}], [PanRecognizer, {\n direction: DIRECTION_HORIZONTAL\n}, ['swipe']], [TapRecognizer], [TapRecognizer, {\n event: 'doubletap',\n taps: 2\n}, ['tap']], [PressRecognizer]];\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n/**\n * @private\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\n\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n\n if (!element.style) {\n return;\n }\n\n var prop;\n each(manager.options.cssProps, function (value, name) {\n prop = prefixed(element.style, name);\n\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || \"\";\n }\n });\n\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n/**\n * @private\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\n\n\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent(\"Event\");\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n/**\n* @private\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\n\nvar Manager =\n/*#__PURE__*/\nfunction () {\n function Manager(element, options) {\n var _this = this;\n\n this.options = assign$1({}, defaults, options || {});\n this.options.inputTarget = this.options.inputTarget || element;\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n toggleCssProps(this, true);\n each(this.options.recognizers, function (item) {\n var recognizer = _this.add(new item[0](item[1]));\n\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n }\n /**\n * @private\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n\n\n var _proto = Manager.prototype;\n\n _proto.set = function set(options) {\n assign$1(this.options, options); // Options that need a little more setup\n\n if (options.touchAction) {\n this.touchAction.update();\n }\n\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n\n return this;\n };\n /**\n * @private\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n\n\n _proto.stop = function stop(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n };\n /**\n * @private\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n\n\n _proto.recognize = function recognize(inputData) {\n var session = this.session;\n\n if (session.stopped) {\n return;\n } // run the touch-action polyfill\n\n\n this.touchAction.preventDefaults(inputData);\n var recognizer;\n var recognizers = this.recognizers; // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n\n var curRecognizer = session.curRecognizer; // reset when the last recognizer is recognized\n // or when we're in a new session\n\n if (!curRecognizer || curRecognizer && curRecognizer.state & STATE_RECOGNIZED) {\n session.curRecognizer = null;\n curRecognizer = null;\n }\n\n var i = 0;\n\n while (i < recognizers.length) {\n recognizer = recognizers[i]; // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer === curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) {\n // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n } // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n\n\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n session.curRecognizer = recognizer;\n curRecognizer = recognizer;\n }\n\n i++;\n }\n };\n /**\n * @private\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n\n\n _proto.get = function get(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event === recognizer) {\n return recognizers[i];\n }\n }\n\n return null;\n };\n /**\n * @private add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n\n\n _proto.add = function add(recognizer) {\n if (invokeArrayArg(recognizer, \"add\", this)) {\n return this;\n } // remove existing\n\n\n var existing = this.get(recognizer.options.event);\n\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n this.touchAction.update();\n return recognizer;\n };\n /**\n * @private\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n\n\n _proto.remove = function remove(recognizer) {\n if (invokeArrayArg(recognizer, \"remove\", this)) {\n return this;\n }\n\n var targetRecognizer = this.get(recognizer); // let's make sure this recognizer exists\n\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, targetRecognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n };\n /**\n * @private\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n\n\n _proto.on = function on(events, handler) {\n if (events === undefined || handler === undefined) {\n return this;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function (event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n };\n /**\n * @private unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n\n\n _proto.off = function off(events, handler) {\n if (events === undefined) {\n return this;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function (event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n };\n /**\n * @private emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n\n\n _proto.emit = function emit(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n } // no handlers, so skip it all\n\n\n var handlers = this.handlers[event] && this.handlers[event].slice();\n\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n\n data.preventDefault = function () {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n };\n /**\n * @private\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n\n\n _proto.destroy = function destroy() {\n this.element && toggleCssProps(this, false);\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n };\n\n return Manager;\n}();\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n/**\n * @private\n * Touch events input\n * @constructor\n * @extends Input\n */\n\nvar SingleTouchInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(SingleTouchInput, _Input);\n\n function SingleTouchInput() {\n var _this;\n\n var proto = SingleTouchInput.prototype;\n proto.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n proto.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.started = false;\n return _this;\n }\n\n var _proto = SingleTouchInput.prototype;\n\n _proto.handler = function handler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; // should we handle the touch events?\n\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type); // when done, reset the started state\n\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n };\n\n return SingleTouchInput;\n}(Input);\n\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\n/**\n * @private\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = \"DEPRECATED METHOD: \" + name + \"\\n\" + message + \" AT \\n\";\n return function () {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '').replace(/^\\s+at\\s+/gm, '').replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n var log = window.console && (window.console.warn || window.console.log);\n\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n\n return method.apply(this, arguments);\n };\n}\n\n/**\n * @private\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\n\nvar extend = deprecate(function (dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n\n while (i < keys.length) {\n if (!merge || merge && dest[keys[i]] === undefined) {\n dest[keys[i]] = src[keys[i]];\n }\n\n i++;\n }\n\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * @private\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\n\nvar merge = deprecate(function (dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * @private\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\n\nfunction inherit(child, base, properties) {\n var baseP = base.prototype;\n var childP;\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign$1(childP, properties);\n }\n}\n\n/**\n * @private\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * @private\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\nvar Hammer =\n/*#__PURE__*/\nfunction () {\n var Hammer =\n /**\n * @private\n * @const {string}\n */\n function Hammer(element, options) {\n if (options === void 0) {\n options = {};\n }\n\n return new Manager(element, _extends({\n recognizers: preset.concat()\n }, options));\n };\n\n Hammer.VERSION = \"2.0.17-rc\";\n Hammer.DIRECTION_ALL = DIRECTION_ALL;\n Hammer.DIRECTION_DOWN = DIRECTION_DOWN;\n Hammer.DIRECTION_LEFT = DIRECTION_LEFT;\n Hammer.DIRECTION_RIGHT = DIRECTION_RIGHT;\n Hammer.DIRECTION_UP = DIRECTION_UP;\n Hammer.DIRECTION_HORIZONTAL = DIRECTION_HORIZONTAL;\n Hammer.DIRECTION_VERTICAL = DIRECTION_VERTICAL;\n Hammer.DIRECTION_NONE = DIRECTION_NONE;\n Hammer.DIRECTION_DOWN = DIRECTION_DOWN;\n Hammer.INPUT_START = INPUT_START;\n Hammer.INPUT_MOVE = INPUT_MOVE;\n Hammer.INPUT_END = INPUT_END;\n Hammer.INPUT_CANCEL = INPUT_CANCEL;\n Hammer.STATE_POSSIBLE = STATE_POSSIBLE;\n Hammer.STATE_BEGAN = STATE_BEGAN;\n Hammer.STATE_CHANGED = STATE_CHANGED;\n Hammer.STATE_ENDED = STATE_ENDED;\n Hammer.STATE_RECOGNIZED = STATE_RECOGNIZED;\n Hammer.STATE_CANCELLED = STATE_CANCELLED;\n Hammer.STATE_FAILED = STATE_FAILED;\n Hammer.Manager = Manager;\n Hammer.Input = Input;\n Hammer.TouchAction = TouchAction;\n Hammer.TouchInput = TouchInput;\n Hammer.MouseInput = MouseInput;\n Hammer.PointerEventInput = PointerEventInput;\n Hammer.TouchMouseInput = TouchMouseInput;\n Hammer.SingleTouchInput = SingleTouchInput;\n Hammer.Recognizer = Recognizer;\n Hammer.AttrRecognizer = AttrRecognizer;\n Hammer.Tap = TapRecognizer;\n Hammer.Pan = PanRecognizer;\n Hammer.Swipe = SwipeRecognizer;\n Hammer.Pinch = PinchRecognizer;\n Hammer.Rotate = RotateRecognizer;\n Hammer.Press = PressRecognizer;\n Hammer.on = addEventListeners;\n Hammer.off = removeEventListeners;\n Hammer.each = each;\n Hammer.merge = merge;\n Hammer.extend = extend;\n Hammer.bindFn = bindFn;\n Hammer.assign = assign$1;\n Hammer.inherit = inherit;\n Hammer.bindFn = bindFn;\n Hammer.prefixed = prefixed;\n Hammer.toArray = toArray;\n Hammer.inArray = inArray;\n Hammer.uniqueArray = uniqueArray;\n Hammer.splitStr = splitStr;\n Hammer.boolOrFn = boolOrFn;\n Hammer.hasParent = hasParent;\n Hammer.addEventListeners = addEventListeners;\n Hammer.removeEventListeners = removeEventListeners;\n Hammer.defaults = assign$1({}, defaults, {\n preset: preset\n });\n return Hammer;\n}();\n\n// style loader but by script tag, not by the loader.\n\nvar defaults$1 = Hammer.defaults;\n\nexport default Hammer;\nexport { INPUT_START, INPUT_MOVE, INPUT_END, INPUT_CANCEL, STATE_POSSIBLE, STATE_BEGAN, STATE_CHANGED, STATE_ENDED, STATE_RECOGNIZED, STATE_CANCELLED, STATE_FAILED, DIRECTION_NONE, DIRECTION_LEFT, DIRECTION_RIGHT, DIRECTION_UP, DIRECTION_DOWN, DIRECTION_HORIZONTAL, DIRECTION_VERTICAL, DIRECTION_ALL, Manager, Input, TouchAction, TouchInput, MouseInput, PointerEventInput, TouchMouseInput, SingleTouchInput, Recognizer, AttrRecognizer, TapRecognizer as Tap, PanRecognizer as Pan, SwipeRecognizer as Swipe, PinchRecognizer as Pinch, RotateRecognizer as Rotate, PressRecognizer as Press, addEventListeners as on, removeEventListeners as off, each, merge, extend, assign$1 as assign, inherit, bindFn, prefixed, toArray, inArray, uniqueArray, splitStr, boolOrFn, hasParent, addEventListeners, removeEventListeners, defaults$1 as defaults };\n//# sourceMappingURL=hammer.esm.js.map\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/fill');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.fill;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.fill) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/fill');\n\nmodule.exports = parent;\n","/**\n * vis-util\n * https://github.com/visjs/vis-util\n *\n * utilitie collection for visjs\n *\n * @version 5.0.7\n * @date 2023-11-20T09:06:51.067Z\n *\n * @copyright (c) 2011-2017 Almende B.V, http://almende.com\n * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n *\n * @license\n * vis.js is dual licensed under both\n *\n * 1. The Apache 2.0 License\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * and\n *\n * 2. The MIT License\n * http://opensource.org/licenses/MIT\n *\n * vis.js may be distributed under either license.\n */\n\nimport Emitter from 'component-emitter';\nimport RealHammer from '@egjs/hammerjs';\n\n/**\r\n * Use this symbol to delete properies in deepObjectAssign.\r\n */\r\nconst DELETE = Symbol(\"DELETE\");\r\n/**\r\n * Pure version of deepObjectAssign, it doesn't modify any of it's arguments.\r\n *\r\n * @param base - The base object that fullfils the whole interface T.\r\n * @param updates - Updates that may change or delete props.\r\n * @returns A brand new instance with all the supplied objects deeply merged.\r\n */\r\nfunction pureDeepObjectAssign(base, ...updates) {\r\n return deepObjectAssign({}, base, ...updates);\r\n}\r\n/**\r\n * Deep version of object assign with additional deleting by the DELETE symbol.\r\n *\r\n * @param values - Objects to be deeply merged.\r\n * @returns The first object from values.\r\n */\r\nfunction deepObjectAssign(...values) {\r\n const merged = deepObjectAssignNonentry(...values);\r\n stripDelete(merged);\r\n return merged;\r\n}\r\n/**\r\n * Deep version of object assign with additional deleting by the DELETE symbol.\r\n *\r\n * @remarks\r\n * This doesn't strip the DELETE symbols so they may end up in the final object.\r\n * @param values - Objects to be deeply merged.\r\n * @returns The first object from values.\r\n */\r\nfunction deepObjectAssignNonentry(...values) {\r\n if (values.length < 2) {\r\n return values[0];\r\n }\r\n else if (values.length > 2) {\r\n return deepObjectAssignNonentry(deepObjectAssign(values[0], values[1]), ...values.slice(2));\r\n }\r\n const a = values[0];\r\n const b = values[1];\r\n if (a instanceof Date && b instanceof Date) {\r\n a.setTime(b.getTime());\r\n return a;\r\n }\r\n for (const prop of Reflect.ownKeys(b)) {\r\n if (!Object.prototype.propertyIsEnumerable.call(b, prop)) ;\r\n else if (b[prop] === DELETE) {\r\n delete a[prop];\r\n }\r\n else if (a[prop] !== null &&\r\n b[prop] !== null &&\r\n typeof a[prop] === \"object\" &&\r\n typeof b[prop] === \"object\" &&\r\n !Array.isArray(a[prop]) &&\r\n !Array.isArray(b[prop])) {\r\n a[prop] = deepObjectAssignNonentry(a[prop], b[prop]);\r\n }\r\n else {\r\n a[prop] = clone(b[prop]);\r\n }\r\n }\r\n return a;\r\n}\r\n/**\r\n * Deep clone given object or array. In case of primitive simply return.\r\n *\r\n * @param a - Anything.\r\n * @returns Deep cloned object/array or unchanged a.\r\n */\r\nfunction clone(a) {\r\n if (Array.isArray(a)) {\r\n return a.map((value) => clone(value));\r\n }\r\n else if (typeof a === \"object\" && a !== null) {\r\n if (a instanceof Date) {\r\n return new Date(a.getTime());\r\n }\r\n return deepObjectAssignNonentry({}, a);\r\n }\r\n else {\r\n return a;\r\n }\r\n}\r\n/**\r\n * Strip DELETE from given object.\r\n *\r\n * @param a - Object which may contain DELETE but won't after this is executed.\r\n */\r\nfunction stripDelete(a) {\r\n for (const prop of Object.keys(a)) {\r\n if (a[prop] === DELETE) {\r\n delete a[prop];\r\n }\r\n else if (typeof a[prop] === \"object\" && a[prop] !== null) {\r\n stripDelete(a[prop]);\r\n }\r\n }\r\n}\n\n/**\r\n * Seedable, fast and reasonably good (not crypto but more than okay for our\r\n * needs) random number generator.\r\n *\r\n * @remarks\r\n * Adapted from {@link https://web.archive.org/web/20110429100736/http://baagoe.com:80/en/RandomMusings/javascript}.\r\n * Original algorithm created by Johannes Baagøe \\ in 2010.\r\n */\r\n/**\r\n * Create a seeded pseudo random generator based on Alea by Johannes Baagøe.\r\n *\r\n * @param seed - All supplied arguments will be used as a seed. In case nothing\r\n * is supplied the current time will be used to seed the generator.\r\n * @returns A ready to use seeded generator.\r\n */\r\nfunction Alea(...seed) {\r\n return AleaImplementation(seed.length ? seed : [Date.now()]);\r\n}\r\n/**\r\n * An implementation of [[Alea]] without user input validation.\r\n *\r\n * @param seed - The data that will be used to seed the generator.\r\n * @returns A ready to use seeded generator.\r\n */\r\nfunction AleaImplementation(seed) {\r\n let [s0, s1, s2] = mashSeed(seed);\r\n let c = 1;\r\n const random = () => {\r\n const t = 2091639 * s0 + c * 2.3283064365386963e-10; // 2^-32\r\n s0 = s1;\r\n s1 = s2;\r\n return (s2 = t - (c = t | 0));\r\n };\r\n random.uint32 = () => random() * 0x100000000; // 2^32\r\n random.fract53 = () => random() + ((random() * 0x200000) | 0) * 1.1102230246251565e-16; // 2^-53\r\n random.algorithm = \"Alea\";\r\n random.seed = seed;\r\n random.version = \"0.9\";\r\n return random;\r\n}\r\n/**\r\n * Turn arbitrary data into values [[AleaImplementation]] can use to generate\r\n * random numbers.\r\n *\r\n * @param seed - Arbitrary data that will be used as the seed.\r\n * @returns Three numbers to use as initial values for [[AleaImplementation]].\r\n */\r\nfunction mashSeed(...seed) {\r\n const mash = Mash();\r\n let s0 = mash(\" \");\r\n let s1 = mash(\" \");\r\n let s2 = mash(\" \");\r\n for (let i = 0; i < seed.length; i++) {\r\n s0 -= mash(seed[i]);\r\n if (s0 < 0) {\r\n s0 += 1;\r\n }\r\n s1 -= mash(seed[i]);\r\n if (s1 < 0) {\r\n s1 += 1;\r\n }\r\n s2 -= mash(seed[i]);\r\n if (s2 < 0) {\r\n s2 += 1;\r\n }\r\n }\r\n return [s0, s1, s2];\r\n}\r\n/**\r\n * Create a new mash function.\r\n *\r\n * @returns A nonpure function that takes arbitrary [[Mashable]] data and turns\r\n * them into numbers.\r\n */\r\nfunction Mash() {\r\n let n = 0xefc8249d;\r\n return function (data) {\r\n const string = data.toString();\r\n for (let i = 0; i < string.length; i++) {\r\n n += string.charCodeAt(i);\r\n let h = 0.02519603282416938 * n;\r\n n = h >>> 0;\r\n h -= n;\r\n h *= n;\r\n n = h >>> 0;\r\n h -= n;\r\n n += h * 0x100000000; // 2^32\r\n }\r\n return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\r\n };\r\n}\n\n/**\n * Setup a mock hammer.js object, for unit testing.\n *\n * Inspiration: https://github.com/uber/deck.gl/pull/658\n *\n * @returns {{on: noop, off: noop, destroy: noop, emit: noop, get: get}}\n */\nfunction hammerMock() {\n const noop = () => {};\n\n return {\n on: noop,\n off: noop,\n destroy: noop,\n emit: noop,\n\n get() {\n return {\n set: noop,\n };\n },\n };\n}\n\nconst Hammer$1 =\n typeof window !== \"undefined\"\n ? window.Hammer || RealHammer\n : function () {\n // hammer.js is only available in a browser, not in node.js. Replacing it with a mock object.\n return hammerMock();\n };\n\n/**\n * Turn an element into an clickToUse element.\n * When not active, the element has a transparent overlay. When the overlay is\n * clicked, the mode is changed to active.\n * When active, the element is displayed with a blue border around it, and\n * the interactive contents of the element can be used. When clicked outside\n * the element, the elements mode is changed to inactive.\n *\n * @param {Element} container\n * @class Activator\n */\nfunction Activator$1(container) {\n this._cleanupQueue = [];\n\n this.active = false;\n\n this._dom = {\n container,\n overlay: document.createElement(\"div\"),\n };\n\n this._dom.overlay.classList.add(\"vis-overlay\");\n\n this._dom.container.appendChild(this._dom.overlay);\n this._cleanupQueue.push(() => {\n this._dom.overlay.parentNode.removeChild(this._dom.overlay);\n });\n\n const hammer = Hammer$1(this._dom.overlay);\n hammer.on(\"tap\", this._onTapOverlay.bind(this));\n this._cleanupQueue.push(() => {\n hammer.destroy();\n // FIXME: cleaning up hammer instances doesn't work (Timeline not removed\n // from memory)\n });\n\n // block all touch events (except tap)\n const events = [\n \"tap\",\n \"doubletap\",\n \"press\",\n \"pinch\",\n \"pan\",\n \"panstart\",\n \"panmove\",\n \"panend\",\n ];\n events.forEach((event) => {\n hammer.on(event, (event) => {\n event.srcEvent.stopPropagation();\n });\n });\n\n // attach a click event to the window, in order to deactivate when clicking outside the timeline\n if (document && document.body) {\n this._onClick = (event) => {\n if (!_hasParent(event.target, container)) {\n this.deactivate();\n }\n };\n document.body.addEventListener(\"click\", this._onClick);\n this._cleanupQueue.push(() => {\n document.body.removeEventListener(\"click\", this._onClick);\n });\n }\n\n // prepare escape key listener for deactivating when active\n this._escListener = (event) => {\n if (\n \"key\" in event\n ? event.key === \"Escape\"\n : event.keyCode === 27 /* the keyCode is for IE11 */\n ) {\n this.deactivate();\n }\n };\n}\n\n// turn into an event emitter\nEmitter(Activator$1.prototype);\n\n// The currently active activator\nActivator$1.current = null;\n\n/**\n * Destroy the activator. Cleans up all created DOM and event listeners\n */\nActivator$1.prototype.destroy = function () {\n this.deactivate();\n\n for (const callback of this._cleanupQueue.splice(0).reverse()) {\n callback();\n }\n};\n\n/**\n * Activate the element\n * Overlay is hidden, element is decorated with a blue shadow border\n */\nActivator$1.prototype.activate = function () {\n // we allow only one active activator at a time\n if (Activator$1.current) {\n Activator$1.current.deactivate();\n }\n Activator$1.current = this;\n\n this.active = true;\n this._dom.overlay.style.display = \"none\";\n this._dom.container.classList.add(\"vis-active\");\n\n this.emit(\"change\");\n this.emit(\"activate\");\n\n // ugly hack: bind ESC after emitting the events, as the Network rebinds all\n // keyboard events on a 'change' event\n document.body.addEventListener(\"keydown\", this._escListener);\n};\n\n/**\n * Deactivate the element\n * Overlay is displayed on top of the element\n */\nActivator$1.prototype.deactivate = function () {\n this.active = false;\n this._dom.overlay.style.display = \"block\";\n this._dom.container.classList.remove(\"vis-active\");\n document.body.removeEventListener(\"keydown\", this._escListener);\n\n this.emit(\"change\");\n this.emit(\"deactivate\");\n};\n\n/**\n * Handle a tap event: activate the container\n *\n * @param {Event} event The event\n * @private\n */\nActivator$1.prototype._onTapOverlay = function (event) {\n // activate the container\n this.activate();\n event.srcEvent.stopPropagation();\n};\n\n/**\n * Test whether the element has the requested parent element somewhere in\n * its chain of parent nodes.\n *\n * @param {HTMLElement} element\n * @param {HTMLElement} parent\n * @returns {boolean} Returns true when the parent is found somewhere in the\n * chain of parent nodes.\n * @private\n */\nfunction _hasParent(element, parent) {\n while (element) {\n if (element === parent) {\n return true;\n }\n element = element.parentNode;\n }\n return false;\n}\n\n// utility functions\r\n// parse ASP.Net Date pattern,\r\n// for example '/Date(1198908717056)/' or '/Date(1198908717056-0700)/'\r\n// code from http://momentjs.com/\r\nconst ASPDateRegex = /^\\/?Date\\((-?\\d+)/i;\r\n// Color REs\r\nconst fullHexRE = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\r\nconst shortHexRE = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\r\nconst rgbRE = /^rgb\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *\\)$/i;\r\nconst rgbaRE = /^rgba\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *([01]|0?\\.\\d+) *\\)$/i;\r\n/**\r\n * Test whether given object is a number.\r\n *\r\n * @param value - Input value of unknown type.\r\n * @returns True if number, false otherwise.\r\n */\r\nfunction isNumber(value) {\r\n return value instanceof Number || typeof value === \"number\";\r\n}\r\n/**\r\n * Remove everything in the DOM object.\r\n *\r\n * @param DOMobject - Node whose child nodes will be recursively deleted.\r\n */\r\nfunction recursiveDOMDelete(DOMobject) {\r\n if (DOMobject) {\r\n while (DOMobject.hasChildNodes() === true) {\r\n const child = DOMobject.firstChild;\r\n if (child) {\r\n recursiveDOMDelete(child);\r\n DOMobject.removeChild(child);\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Test whether given object is a string.\r\n *\r\n * @param value - Input value of unknown type.\r\n * @returns True if string, false otherwise.\r\n */\r\nfunction isString(value) {\r\n return value instanceof String || typeof value === \"string\";\r\n}\r\n/**\r\n * Test whether given object is a object (not primitive or null).\r\n *\r\n * @param value - Input value of unknown type.\r\n * @returns True if not null object, false otherwise.\r\n */\r\nfunction isObject(value) {\r\n return typeof value === \"object\" && value !== null;\r\n}\r\n/**\r\n * Test whether given object is a Date, or a String containing a Date.\r\n *\r\n * @param value - Input value of unknown type.\r\n * @returns True if Date instance or string date representation, false otherwise.\r\n */\r\nfunction isDate(value) {\r\n if (value instanceof Date) {\r\n return true;\r\n }\r\n else if (isString(value)) {\r\n // test whether this string contains a date\r\n const match = ASPDateRegex.exec(value);\r\n if (match) {\r\n return true;\r\n }\r\n else if (!isNaN(Date.parse(value))) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n/**\r\n * Copy property from b to a if property present in a.\r\n * If property in b explicitly set to null, delete it if `allowDeletion` set.\r\n *\r\n * Internal helper routine, should not be exported. Not added to `exports` for that reason.\r\n *\r\n * @param a - Target object.\r\n * @param b - Source object.\r\n * @param prop - Name of property to copy from b to a.\r\n * @param allowDeletion - If true, delete property in a if explicitly set to null in b.\r\n */\r\nfunction copyOrDelete(a, b, prop, allowDeletion) {\r\n let doDeletion = false;\r\n if (allowDeletion === true) {\r\n doDeletion = b[prop] === null && a[prop] !== undefined;\r\n }\r\n if (doDeletion) {\r\n delete a[prop];\r\n }\r\n else {\r\n a[prop] = b[prop]; // Remember, this is a reference copy!\r\n }\r\n}\r\n/**\r\n * Fill an object with a possibly partially defined other object.\r\n *\r\n * Only copies values for the properties already present in a.\r\n * That means an object is not created on a property if only the b object has it.\r\n *\r\n * @param a - The object that will have it's properties updated.\r\n * @param b - The object with property updates.\r\n * @param allowDeletion - If true, delete properties in a that are explicitly set to null in b.\r\n */\r\nfunction fillIfDefined(a, b, allowDeletion = false) {\r\n // NOTE: iteration of properties of a\r\n // NOTE: prototype properties iterated over as well\r\n for (const prop in a) {\r\n if (b[prop] !== undefined) {\r\n if (b[prop] === null || typeof b[prop] !== \"object\") {\r\n // Note: typeof null === 'object'\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n else {\r\n const aProp = a[prop];\r\n const bProp = b[prop];\r\n if (isObject(aProp) && isObject(bProp)) {\r\n fillIfDefined(aProp, bProp, allowDeletion);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Copy the values of all of the enumerable own properties from one or more source objects to a\r\n * target object. Returns the target object.\r\n *\r\n * @param target - The target object to copy to.\r\n * @param source - The source object from which to copy properties.\r\n * @returns The target object.\r\n */\r\nconst extend = Object.assign;\r\n/**\r\n * Extend object a with selected properties of object b or a series of objects.\r\n *\r\n * @remarks\r\n * Only properties with defined values are copied.\r\n * @param props - Properties to be copied to a.\r\n * @param a - The target.\r\n * @param others - The sources.\r\n * @returns Argument a.\r\n */\r\nfunction selectiveExtend(props, a, ...others) {\r\n if (!Array.isArray(props)) {\r\n throw new Error(\"Array with property names expected as first argument\");\r\n }\r\n for (const other of others) {\r\n for (let p = 0; p < props.length; p++) {\r\n const prop = props[p];\r\n if (other && Object.prototype.hasOwnProperty.call(other, prop)) {\r\n a[prop] = other[prop];\r\n }\r\n }\r\n }\r\n return a;\r\n}\r\n/**\r\n * Extend object a with selected properties of object b.\r\n * Only properties with defined values are copied.\r\n *\r\n * @remarks\r\n * Previous version of this routine implied that multiple source objects could\r\n * be used; however, the implementation was **wrong**. Since multiple (\\>1)\r\n * sources weren't used anywhere in the `vis.js` code, this has been removed\r\n * @param props - Names of first-level properties to copy over.\r\n * @param a - Target object.\r\n * @param b - Source object.\r\n * @param allowDeletion - If true, delete property in a if explicitly set to null in b.\r\n * @returns Argument a.\r\n */\r\nfunction selectiveDeepExtend(props, a, b, allowDeletion = false) {\r\n // TODO: add support for Arrays to deepExtend\r\n if (Array.isArray(b)) {\r\n throw new TypeError(\"Arrays are not supported by deepExtend\");\r\n }\r\n for (let p = 0; p < props.length; p++) {\r\n const prop = props[p];\r\n if (Object.prototype.hasOwnProperty.call(b, prop)) {\r\n if (b[prop] && b[prop].constructor === Object) {\r\n if (a[prop] === undefined) {\r\n a[prop] = {};\r\n }\r\n if (a[prop].constructor === Object) {\r\n deepExtend(a[prop], b[prop], false, allowDeletion);\r\n }\r\n else {\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n }\r\n else if (Array.isArray(b[prop])) {\r\n throw new TypeError(\"Arrays are not supported by deepExtend\");\r\n }\r\n else {\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n }\r\n }\r\n return a;\r\n}\r\n/**\r\n * Extend object `a` with properties of object `b`, ignoring properties which\r\n * are explicitly specified to be excluded.\r\n *\r\n * @remarks\r\n * The properties of `b` are considered for copying. Properties which are\r\n * themselves objects are are also extended. Only properties with defined\r\n * values are copied.\r\n * @param propsToExclude - Names of properties which should *not* be copied.\r\n * @param a - Object to extend.\r\n * @param b - Object to take properties from for extension.\r\n * @param allowDeletion - If true, delete properties in a that are explicitly\r\n * set to null in b.\r\n * @returns Argument a.\r\n */\r\nfunction selectiveNotDeepExtend(propsToExclude, a, b, allowDeletion = false) {\r\n // TODO: add support for Arrays to deepExtend\r\n // NOTE: array properties have an else-below; apparently, there is a problem here.\r\n if (Array.isArray(b)) {\r\n throw new TypeError(\"Arrays are not supported by deepExtend\");\r\n }\r\n for (const prop in b) {\r\n if (!Object.prototype.hasOwnProperty.call(b, prop)) {\r\n continue;\r\n } // Handle local properties only\r\n if (propsToExclude.includes(prop)) {\r\n continue;\r\n } // In exclusion list, skip\r\n if (b[prop] && b[prop].constructor === Object) {\r\n if (a[prop] === undefined) {\r\n a[prop] = {};\r\n }\r\n if (a[prop].constructor === Object) {\r\n deepExtend(a[prop], b[prop]); // NOTE: allowDeletion not propagated!\r\n }\r\n else {\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n }\r\n else if (Array.isArray(b[prop])) {\r\n a[prop] = [];\r\n for (let i = 0; i < b[prop].length; i++) {\r\n a[prop].push(b[prop][i]);\r\n }\r\n }\r\n else {\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n }\r\n return a;\r\n}\r\n/**\r\n * Deep extend an object a with the properties of object b.\r\n *\r\n * @param a - Target object.\r\n * @param b - Source object.\r\n * @param protoExtend - If true, the prototype values will also be extended.\r\n * (That is the options objects that inherit from others will also get the\r\n * inherited options).\r\n * @param allowDeletion - If true, the values of fields that are null will be deleted.\r\n * @returns Argument a.\r\n */\r\nfunction deepExtend(a, b, protoExtend = false, allowDeletion = false) {\r\n for (const prop in b) {\r\n if (Object.prototype.hasOwnProperty.call(b, prop) || protoExtend === true) {\r\n if (typeof b[prop] === \"object\" &&\r\n b[prop] !== null &&\r\n Object.getPrototypeOf(b[prop]) === Object.prototype) {\r\n if (a[prop] === undefined) {\r\n a[prop] = deepExtend({}, b[prop], protoExtend); // NOTE: allowDeletion not propagated!\r\n }\r\n else if (typeof a[prop] === \"object\" &&\r\n a[prop] !== null &&\r\n Object.getPrototypeOf(a[prop]) === Object.prototype) {\r\n deepExtend(a[prop], b[prop], protoExtend); // NOTE: allowDeletion not propagated!\r\n }\r\n else {\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n }\r\n else if (Array.isArray(b[prop])) {\r\n a[prop] = b[prop].slice();\r\n }\r\n else {\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n }\r\n }\r\n return a;\r\n}\r\n/**\r\n * Test whether all elements in two arrays are equal.\r\n *\r\n * @param a - First array.\r\n * @param b - Second array.\r\n * @returns True if both arrays have the same length and same elements (1 = '1').\r\n */\r\nfunction equalArray(a, b) {\r\n if (a.length !== b.length) {\r\n return false;\r\n }\r\n for (let i = 0, len = a.length; i < len; i++) {\r\n if (a[i] != b[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n/**\r\n * Get the type of an object, for example exports.getType([]) returns 'Array'.\r\n *\r\n * @param object - Input value of unknown type.\r\n * @returns Detected type.\r\n */\r\nfunction getType(object) {\r\n const type = typeof object;\r\n if (type === \"object\") {\r\n if (object === null) {\r\n return \"null\";\r\n }\r\n if (object instanceof Boolean) {\r\n return \"Boolean\";\r\n }\r\n if (object instanceof Number) {\r\n return \"Number\";\r\n }\r\n if (object instanceof String) {\r\n return \"String\";\r\n }\r\n if (Array.isArray(object)) {\r\n return \"Array\";\r\n }\r\n if (object instanceof Date) {\r\n return \"Date\";\r\n }\r\n return \"Object\";\r\n }\r\n if (type === \"number\") {\r\n return \"Number\";\r\n }\r\n if (type === \"boolean\") {\r\n return \"Boolean\";\r\n }\r\n if (type === \"string\") {\r\n return \"String\";\r\n }\r\n if (type === undefined) {\r\n return \"undefined\";\r\n }\r\n return type;\r\n}\r\n/**\r\n * Used to extend an array and copy it. This is used to propagate paths recursively.\r\n *\r\n * @param arr - First part.\r\n * @param newValue - The value to be aadded into the array.\r\n * @returns A new array with all items from arr and newValue (which is last).\r\n */\r\nfunction copyAndExtendArray(arr, newValue) {\r\n return [...arr, newValue];\r\n}\r\n/**\r\n * Used to extend an array and copy it. This is used to propagate paths recursively.\r\n *\r\n * @param arr - The array to be copied.\r\n * @returns Shallow copy of arr.\r\n */\r\nfunction copyArray(arr) {\r\n return arr.slice();\r\n}\r\n/**\r\n * Retrieve the absolute left value of a DOM element.\r\n *\r\n * @param elem - A dom element, for example a div.\r\n * @returns The absolute left position of this element in the browser page.\r\n */\r\nfunction getAbsoluteLeft(elem) {\r\n return elem.getBoundingClientRect().left;\r\n}\r\n/**\r\n * Retrieve the absolute right value of a DOM element.\r\n *\r\n * @param elem - A dom element, for example a div.\r\n * @returns The absolute right position of this element in the browser page.\r\n */\r\nfunction getAbsoluteRight(elem) {\r\n return elem.getBoundingClientRect().right;\r\n}\r\n/**\r\n * Retrieve the absolute top value of a DOM element.\r\n *\r\n * @param elem - A dom element, for example a div.\r\n * @returns The absolute top position of this element in the browser page.\r\n */\r\nfunction getAbsoluteTop(elem) {\r\n return elem.getBoundingClientRect().top;\r\n}\r\n/**\r\n * Add a className to the given elements style.\r\n *\r\n * @param elem - The element to which the classes will be added.\r\n * @param classNames - Space separated list of classes.\r\n */\r\nfunction addClassName(elem, classNames) {\r\n let classes = elem.className.split(\" \");\r\n const newClasses = classNames.split(\" \");\r\n classes = classes.concat(newClasses.filter(function (className) {\r\n return !classes.includes(className);\r\n }));\r\n elem.className = classes.join(\" \");\r\n}\r\n/**\r\n * Remove a className from the given elements style.\r\n *\r\n * @param elem - The element from which the classes will be removed.\r\n * @param classNames - Space separated list of classes.\r\n */\r\nfunction removeClassName(elem, classNames) {\r\n let classes = elem.className.split(\" \");\r\n const oldClasses = classNames.split(\" \");\r\n classes = classes.filter(function (className) {\r\n return !oldClasses.includes(className);\r\n });\r\n elem.className = classes.join(\" \");\r\n}\r\n/**\r\n * For each method for both arrays and objects.\r\n * In case of an array, the built-in Array.forEach() is applied (**No, it's not!**).\r\n * In case of an Object, the method loops over all properties of the object.\r\n *\r\n * @param object - An Object or Array to be iterated over.\r\n * @param callback - Array.forEach-like callback.\r\n */\r\nfunction forEach(object, callback) {\r\n if (Array.isArray(object)) {\r\n // array\r\n const len = object.length;\r\n for (let i = 0; i < len; i++) {\r\n callback(object[i], i, object);\r\n }\r\n }\r\n else {\r\n // object\r\n for (const key in object) {\r\n if (Object.prototype.hasOwnProperty.call(object, key)) {\r\n callback(object[key], key, object);\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Convert an object into an array: all objects properties are put into the array. The resulting array is unordered.\r\n *\r\n * @param o - Object that contains the properties and methods.\r\n * @returns An array of unordered values.\r\n */\r\nconst toArray = Object.values;\r\n/**\r\n * Update a property in an object.\r\n *\r\n * @param object - The object whose property will be updated.\r\n * @param key - Name of the property to be updated.\r\n * @param value - The new value to be assigned.\r\n * @returns Whether the value was updated (true) or already strictly the same in the original object (false).\r\n */\r\nfunction updateProperty(object, key, value) {\r\n if (object[key] !== value) {\r\n object[key] = value;\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Throttle the given function to be only executed once per animation frame.\r\n *\r\n * @param fn - The original function.\r\n * @returns The throttled function.\r\n */\r\nfunction throttle(fn) {\r\n let scheduled = false;\r\n return () => {\r\n if (!scheduled) {\r\n scheduled = true;\r\n requestAnimationFrame(() => {\r\n scheduled = false;\r\n fn();\r\n });\r\n }\r\n };\r\n}\r\n/**\r\n * Cancels the event's default action if it is cancelable, without stopping further propagation of the event.\r\n *\r\n * @param event - The event whose default action should be prevented.\r\n */\r\nfunction preventDefault(event) {\r\n if (!event) {\r\n event = window.event;\r\n }\r\n if (!event) ;\r\n else if (event.preventDefault) {\r\n event.preventDefault(); // non-IE browsers\r\n }\r\n else {\r\n // @TODO: IE types? Does anyone care?\r\n event.returnValue = false; // IE browsers\r\n }\r\n}\r\n/**\r\n * Get HTML element which is the target of the event.\r\n *\r\n * @param event - The event.\r\n * @returns The element or null if not obtainable.\r\n */\r\nfunction getTarget(event = window.event) {\r\n // code from http://www.quirksmode.org/js/events_properties.html\r\n // @TODO: EventTarget can be almost anything, is it okay to return only Elements?\r\n let target = null;\r\n if (!event) ;\r\n else if (event.target) {\r\n target = event.target;\r\n }\r\n else if (event.srcElement) {\r\n target = event.srcElement;\r\n }\r\n if (!(target instanceof Element)) {\r\n return null;\r\n }\r\n if (target.nodeType != null && target.nodeType == 3) {\r\n // defeat Safari bug\r\n target = target.parentNode;\r\n if (!(target instanceof Element)) {\r\n return null;\r\n }\r\n }\r\n return target;\r\n}\r\n/**\r\n * Check if given element contains given parent somewhere in the DOM tree.\r\n *\r\n * @param element - The element to be tested.\r\n * @param parent - The ancestor (not necessarily parent) of the element.\r\n * @returns True if parent is an ancestor of the element, false otherwise.\r\n */\r\nfunction hasParent(element, parent) {\r\n let elem = element;\r\n while (elem) {\r\n if (elem === parent) {\r\n return true;\r\n }\r\n else if (elem.parentNode) {\r\n elem = elem.parentNode;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n return false;\r\n}\r\nconst option = {\r\n /**\r\n * Convert a value into a boolean.\r\n *\r\n * @param value - Value to be converted intoboolean, a function will be executed as `(() => unknown)`.\r\n * @param defaultValue - If the value or the return value of the function == null then this will be returned.\r\n * @returns Corresponding boolean value, if none then the default value, if none then null.\r\n */\r\n asBoolean(value, defaultValue) {\r\n if (typeof value == \"function\") {\r\n value = value();\r\n }\r\n if (value != null) {\r\n return value != false;\r\n }\r\n return defaultValue || null;\r\n },\r\n /**\r\n * Convert a value into a number.\r\n *\r\n * @param value - Value to be converted intonumber, a function will be executed as `(() => unknown)`.\r\n * @param defaultValue - If the value or the return value of the function == null then this will be returned.\r\n * @returns Corresponding **boxed** number value, if none then the default value, if none then null.\r\n */\r\n asNumber(value, defaultValue) {\r\n if (typeof value == \"function\") {\r\n value = value();\r\n }\r\n if (value != null) {\r\n return Number(value) || defaultValue || null;\r\n }\r\n return defaultValue || null;\r\n },\r\n /**\r\n * Convert a value into a string.\r\n *\r\n * @param value - Value to be converted intostring, a function will be executed as `(() => unknown)`.\r\n * @param defaultValue - If the value or the return value of the function == null then this will be returned.\r\n * @returns Corresponding **boxed** string value, if none then the default value, if none then null.\r\n */\r\n asString(value, defaultValue) {\r\n if (typeof value == \"function\") {\r\n value = value();\r\n }\r\n if (value != null) {\r\n return String(value);\r\n }\r\n return defaultValue || null;\r\n },\r\n /**\r\n * Convert a value into a size.\r\n *\r\n * @param value - Value to be converted intosize, a function will be executed as `(() => unknown)`.\r\n * @param defaultValue - If the value or the return value of the function == null then this will be returned.\r\n * @returns Corresponding string value (number + 'px'), if none then the default value, if none then null.\r\n */\r\n asSize(value, defaultValue) {\r\n if (typeof value == \"function\") {\r\n value = value();\r\n }\r\n if (isString(value)) {\r\n return value;\r\n }\r\n else if (isNumber(value)) {\r\n return value + \"px\";\r\n }\r\n else {\r\n return defaultValue || null;\r\n }\r\n },\r\n /**\r\n * Convert a value into a DOM Element.\r\n *\r\n * @param value - Value to be converted into DOM Element, a function will be executed as `(() => unknown)`.\r\n * @param defaultValue - If the value or the return value of the function == null then this will be returned.\r\n * @returns The DOM Element, if none then the default value, if none then null.\r\n */\r\n asElement(value, defaultValue) {\r\n if (typeof value == \"function\") {\r\n value = value();\r\n }\r\n return value || defaultValue || null;\r\n },\r\n};\r\n/**\r\n * Convert hex color string into RGB color object.\r\n *\r\n * @remarks\r\n * {@link http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb}\r\n * @param hex - Hex color string (3 or 6 digits, with or without #).\r\n * @returns RGB color object.\r\n */\r\nfunction hexToRGB(hex) {\r\n let result;\r\n switch (hex.length) {\r\n case 3:\r\n case 4:\r\n result = shortHexRE.exec(hex);\r\n return result\r\n ? {\r\n r: parseInt(result[1] + result[1], 16),\r\n g: parseInt(result[2] + result[2], 16),\r\n b: parseInt(result[3] + result[3], 16),\r\n }\r\n : null;\r\n case 6:\r\n case 7:\r\n result = fullHexRE.exec(hex);\r\n return result\r\n ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16),\r\n }\r\n : null;\r\n default:\r\n return null;\r\n }\r\n}\r\n/**\r\n * This function takes string color in hex or RGB format and adds the opacity, RGBA is passed through unchanged.\r\n *\r\n * @param color - The color string (hex, RGB, RGBA).\r\n * @param opacity - The new opacity.\r\n * @returns RGBA string, for example 'rgba(255, 0, 127, 0.3)'.\r\n */\r\nfunction overrideOpacity(color, opacity) {\r\n if (color.includes(\"rgba\")) {\r\n return color;\r\n }\r\n else if (color.includes(\"rgb\")) {\r\n const rgb = color\r\n .substr(color.indexOf(\"(\") + 1)\r\n .replace(\")\", \"\")\r\n .split(\",\");\r\n return \"rgba(\" + rgb[0] + \",\" + rgb[1] + \",\" + rgb[2] + \",\" + opacity + \")\";\r\n }\r\n else {\r\n const rgb = hexToRGB(color);\r\n if (rgb == null) {\r\n return color;\r\n }\r\n else {\r\n return \"rgba(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \",\" + opacity + \")\";\r\n }\r\n }\r\n}\r\n/**\r\n * Convert RGB \\<0, 255\\> into hex color string.\r\n *\r\n * @param red - Red channel.\r\n * @param green - Green channel.\r\n * @param blue - Blue channel.\r\n * @returns Hex color string (for example: '#0acdc0').\r\n */\r\nfunction RGBToHex(red, green, blue) {\r\n return (\"#\" + ((1 << 24) + (red << 16) + (green << 8) + blue).toString(16).slice(1));\r\n}\r\n/**\r\n * Parse a color property into an object with border, background, and highlight colors.\r\n *\r\n * @param inputColor - Shorthand color string or input color object.\r\n * @param defaultColor - Full color object to fill in missing values in inputColor.\r\n * @returns Color object.\r\n */\r\nfunction parseColor(inputColor, defaultColor) {\r\n if (isString(inputColor)) {\r\n let colorStr = inputColor;\r\n if (isValidRGB(colorStr)) {\r\n const rgb = colorStr\r\n .substr(4)\r\n .substr(0, colorStr.length - 5)\r\n .split(\",\")\r\n .map(function (value) {\r\n return parseInt(value);\r\n });\r\n colorStr = RGBToHex(rgb[0], rgb[1], rgb[2]);\r\n }\r\n if (isValidHex(colorStr) === true) {\r\n const hsv = hexToHSV(colorStr);\r\n const lighterColorHSV = {\r\n h: hsv.h,\r\n s: hsv.s * 0.8,\r\n v: Math.min(1, hsv.v * 1.02),\r\n };\r\n const darkerColorHSV = {\r\n h: hsv.h,\r\n s: Math.min(1, hsv.s * 1.25),\r\n v: hsv.v * 0.8,\r\n };\r\n const darkerColorHex = HSVToHex(darkerColorHSV.h, darkerColorHSV.s, darkerColorHSV.v);\r\n const lighterColorHex = HSVToHex(lighterColorHSV.h, lighterColorHSV.s, lighterColorHSV.v);\r\n return {\r\n background: colorStr,\r\n border: darkerColorHex,\r\n highlight: {\r\n background: lighterColorHex,\r\n border: darkerColorHex,\r\n },\r\n hover: {\r\n background: lighterColorHex,\r\n border: darkerColorHex,\r\n },\r\n };\r\n }\r\n else {\r\n return {\r\n background: colorStr,\r\n border: colorStr,\r\n highlight: {\r\n background: colorStr,\r\n border: colorStr,\r\n },\r\n hover: {\r\n background: colorStr,\r\n border: colorStr,\r\n },\r\n };\r\n }\r\n }\r\n else {\r\n if (defaultColor) {\r\n const color = {\r\n background: inputColor.background || defaultColor.background,\r\n border: inputColor.border || defaultColor.border,\r\n highlight: isString(inputColor.highlight)\r\n ? {\r\n border: inputColor.highlight,\r\n background: inputColor.highlight,\r\n }\r\n : {\r\n background: (inputColor.highlight && inputColor.highlight.background) ||\r\n defaultColor.highlight.background,\r\n border: (inputColor.highlight && inputColor.highlight.border) ||\r\n defaultColor.highlight.border,\r\n },\r\n hover: isString(inputColor.hover)\r\n ? {\r\n border: inputColor.hover,\r\n background: inputColor.hover,\r\n }\r\n : {\r\n border: (inputColor.hover && inputColor.hover.border) ||\r\n defaultColor.hover.border,\r\n background: (inputColor.hover && inputColor.hover.background) ||\r\n defaultColor.hover.background,\r\n },\r\n };\r\n return color;\r\n }\r\n else {\r\n const color = {\r\n background: inputColor.background || undefined,\r\n border: inputColor.border || undefined,\r\n highlight: isString(inputColor.highlight)\r\n ? {\r\n border: inputColor.highlight,\r\n background: inputColor.highlight,\r\n }\r\n : {\r\n background: (inputColor.highlight && inputColor.highlight.background) ||\r\n undefined,\r\n border: (inputColor.highlight && inputColor.highlight.border) ||\r\n undefined,\r\n },\r\n hover: isString(inputColor.hover)\r\n ? {\r\n border: inputColor.hover,\r\n background: inputColor.hover,\r\n }\r\n : {\r\n border: (inputColor.hover && inputColor.hover.border) || undefined,\r\n background: (inputColor.hover && inputColor.hover.background) || undefined,\r\n },\r\n };\r\n return color;\r\n }\r\n }\r\n}\r\n/**\r\n * Convert RGB \\<0, 255\\> into HSV object.\r\n *\r\n * @remarks\r\n * {@link http://www.javascripter.net/faq/rgb2hsv.htm}\r\n * @param red - Red channel.\r\n * @param green - Green channel.\r\n * @param blue - Blue channel.\r\n * @returns HSV color object.\r\n */\r\nfunction RGBToHSV(red, green, blue) {\r\n red = red / 255;\r\n green = green / 255;\r\n blue = blue / 255;\r\n const minRGB = Math.min(red, Math.min(green, blue));\r\n const maxRGB = Math.max(red, Math.max(green, blue));\r\n // Black-gray-white\r\n if (minRGB === maxRGB) {\r\n return { h: 0, s: 0, v: minRGB };\r\n }\r\n // Colors other than black-gray-white:\r\n const d = red === minRGB ? green - blue : blue === minRGB ? red - green : blue - red;\r\n const h = red === minRGB ? 3 : blue === minRGB ? 1 : 5;\r\n const hue = (60 * (h - d / (maxRGB - minRGB))) / 360;\r\n const saturation = (maxRGB - minRGB) / maxRGB;\r\n const value = maxRGB;\r\n return { h: hue, s: saturation, v: value };\r\n}\r\n/**\r\n * Split a string with css styles into an object with key/values.\r\n *\r\n * @param cssText - CSS source code to split into key/value object.\r\n * @returns Key/value object corresponding to {@link cssText}.\r\n */\r\nfunction splitCSSText(cssText) {\r\n const tmpEllement = document.createElement(\"div\");\r\n const styles = {};\r\n tmpEllement.style.cssText = cssText;\r\n for (let i = 0; i < tmpEllement.style.length; ++i) {\r\n styles[tmpEllement.style[i]] = tmpEllement.style.getPropertyValue(tmpEllement.style[i]);\r\n }\r\n return styles;\r\n}\r\n/**\r\n * Append a string with css styles to an element.\r\n *\r\n * @param element - The element that will receive new styles.\r\n * @param cssText - The styles to be appended.\r\n */\r\nfunction addCssText(element, cssText) {\r\n const cssStyle = splitCSSText(cssText);\r\n for (const [key, value] of Object.entries(cssStyle)) {\r\n element.style.setProperty(key, value);\r\n }\r\n}\r\n/**\r\n * Remove a string with css styles from an element.\r\n *\r\n * @param element - The element from which styles should be removed.\r\n * @param cssText - The styles to be removed.\r\n */\r\nfunction removeCssText(element, cssText) {\r\n const cssStyle = splitCSSText(cssText);\r\n for (const key of Object.keys(cssStyle)) {\r\n element.style.removeProperty(key);\r\n }\r\n}\r\n/**\r\n * Convert HSV \\<0, 1\\> into RGB color object.\r\n *\r\n * @remarks\r\n * {@link https://gist.github.com/mjijackson/5311256}\r\n * @param h - Hue.\r\n * @param s - Saturation.\r\n * @param v - Value.\r\n * @returns RGB color object.\r\n */\r\nfunction HSVToRGB(h, s, v) {\r\n let r;\r\n let g;\r\n let b;\r\n const i = Math.floor(h * 6);\r\n const f = h * 6 - i;\r\n const p = v * (1 - s);\r\n const q = v * (1 - f * s);\r\n const t = v * (1 - (1 - f) * s);\r\n switch (i % 6) {\r\n case 0:\r\n (r = v), (g = t), (b = p);\r\n break;\r\n case 1:\r\n (r = q), (g = v), (b = p);\r\n break;\r\n case 2:\r\n (r = p), (g = v), (b = t);\r\n break;\r\n case 3:\r\n (r = p), (g = q), (b = v);\r\n break;\r\n case 4:\r\n (r = t), (g = p), (b = v);\r\n break;\r\n case 5:\r\n (r = v), (g = p), (b = q);\r\n break;\r\n }\r\n return {\r\n r: Math.floor(r * 255),\r\n g: Math.floor(g * 255),\r\n b: Math.floor(b * 255),\r\n };\r\n}\r\n/**\r\n * Convert HSV \\<0, 1\\> into hex color string.\r\n *\r\n * @param h - Hue.\r\n * @param s - Saturation.\r\n * @param v - Value.\r\n * @returns Hex color string.\r\n */\r\nfunction HSVToHex(h, s, v) {\r\n const rgb = HSVToRGB(h, s, v);\r\n return RGBToHex(rgb.r, rgb.g, rgb.b);\r\n}\r\n/**\r\n * Convert hex color string into HSV \\<0, 1\\>.\r\n *\r\n * @param hex - Hex color string.\r\n * @returns HSV color object.\r\n */\r\nfunction hexToHSV(hex) {\r\n const rgb = hexToRGB(hex);\r\n if (!rgb) {\r\n throw new TypeError(`'${hex}' is not a valid color.`);\r\n }\r\n return RGBToHSV(rgb.r, rgb.g, rgb.b);\r\n}\r\n/**\r\n * Validate hex color string.\r\n *\r\n * @param hex - Unknown string that may contain a color.\r\n * @returns True if the string is valid, false otherwise.\r\n */\r\nfunction isValidHex(hex) {\r\n const isOk = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(hex);\r\n return isOk;\r\n}\r\n/**\r\n * Validate RGB color string.\r\n *\r\n * @param rgb - Unknown string that may contain a color.\r\n * @returns True if the string is valid, false otherwise.\r\n */\r\nfunction isValidRGB(rgb) {\r\n return rgbRE.test(rgb);\r\n}\r\n/**\r\n * Validate RGBA color string.\r\n *\r\n * @param rgba - Unknown string that may contain a color.\r\n * @returns True if the string is valid, false otherwise.\r\n */\r\nfunction isValidRGBA(rgba) {\r\n return rgbaRE.test(rgba);\r\n}\r\n/**\r\n * This recursively redirects the prototype of JSON objects to the referenceObject.\r\n * This is used for default options.\r\n *\r\n * @param fields - Names of properties to be bridged.\r\n * @param referenceObject - The original object.\r\n * @returns A new object inheriting from the referenceObject.\r\n */\r\nfunction selectiveBridgeObject(fields, referenceObject) {\r\n if (referenceObject !== null && typeof referenceObject === \"object\") {\r\n // !!! typeof null === 'object'\r\n const objectTo = Object.create(referenceObject);\r\n for (let i = 0; i < fields.length; i++) {\r\n if (Object.prototype.hasOwnProperty.call(referenceObject, fields[i])) {\r\n if (typeof referenceObject[fields[i]] == \"object\") {\r\n objectTo[fields[i]] = bridgeObject(referenceObject[fields[i]]);\r\n }\r\n }\r\n }\r\n return objectTo;\r\n }\r\n else {\r\n return null;\r\n }\r\n}\r\n/**\r\n * This recursively redirects the prototype of JSON objects to the referenceObject.\r\n * This is used for default options.\r\n *\r\n * @param referenceObject - The original object.\r\n * @returns The Element if the referenceObject is an Element, or a new object inheriting from the referenceObject.\r\n */\r\nfunction bridgeObject(referenceObject) {\r\n if (referenceObject === null || typeof referenceObject !== \"object\") {\r\n return null;\r\n }\r\n if (referenceObject instanceof Element) {\r\n // Avoid bridging DOM objects\r\n return referenceObject;\r\n }\r\n const objectTo = Object.create(referenceObject);\r\n for (const i in referenceObject) {\r\n if (Object.prototype.hasOwnProperty.call(referenceObject, i)) {\r\n if (typeof referenceObject[i] == \"object\") {\r\n objectTo[i] = bridgeObject(referenceObject[i]);\r\n }\r\n }\r\n }\r\n return objectTo;\r\n}\r\n/**\r\n * This method provides a stable sort implementation, very fast for presorted data.\r\n *\r\n * @param a - The array to be sorted (in-place).\r\n * @param compare - An order comparator.\r\n * @returns The argument a.\r\n */\r\nfunction insertSort(a, compare) {\r\n for (let i = 0; i < a.length; i++) {\r\n const k = a[i];\r\n let j;\r\n for (j = i; j > 0 && compare(k, a[j - 1]) < 0; j--) {\r\n a[j] = a[j - 1];\r\n }\r\n a[j] = k;\r\n }\r\n return a;\r\n}\r\n/**\r\n * This is used to set the options of subobjects in the options object.\r\n *\r\n * A requirement of these subobjects is that they have an 'enabled' element\r\n * which is optional for the user but mandatory for the program.\r\n *\r\n * The added value here of the merge is that option 'enabled' is set as required.\r\n *\r\n * @param mergeTarget - Either this.options or the options used for the groups.\r\n * @param options - Options.\r\n * @param option - Option key in the options argument.\r\n * @param globalOptions - Global options, passed in to determine value of option 'enabled'.\r\n */\r\nfunction mergeOptions(mergeTarget, options, option, globalOptions = {}) {\r\n // Local helpers\r\n const isPresent = function (obj) {\r\n return obj !== null && obj !== undefined;\r\n };\r\n const isObject = function (obj) {\r\n return obj !== null && typeof obj === \"object\";\r\n };\r\n // https://stackoverflow.com/a/34491287/1223531\r\n const isEmpty = function (obj) {\r\n for (const x in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, x)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n // Guards\r\n if (!isObject(mergeTarget)) {\r\n throw new Error(\"Parameter mergeTarget must be an object\");\r\n }\r\n if (!isObject(options)) {\r\n throw new Error(\"Parameter options must be an object\");\r\n }\r\n if (!isPresent(option)) {\r\n throw new Error(\"Parameter option must have a value\");\r\n }\r\n if (!isObject(globalOptions)) {\r\n throw new Error(\"Parameter globalOptions must be an object\");\r\n }\r\n //\r\n // Actual merge routine, separated from main logic\r\n // Only a single level of options is merged. Deeper levels are ref'd. This may actually be an issue.\r\n //\r\n const doMerge = function (target, options, option) {\r\n if (!isObject(target[option])) {\r\n target[option] = {};\r\n }\r\n const src = options[option];\r\n const dst = target[option];\r\n for (const prop in src) {\r\n if (Object.prototype.hasOwnProperty.call(src, prop)) {\r\n dst[prop] = src[prop];\r\n }\r\n }\r\n };\r\n // Local initialization\r\n const srcOption = options[option];\r\n const globalPassed = isObject(globalOptions) && !isEmpty(globalOptions);\r\n const globalOption = globalPassed ? globalOptions[option] : undefined;\r\n const globalEnabled = globalOption ? globalOption.enabled : undefined;\r\n /////////////////////////////////////////\r\n // Main routine\r\n /////////////////////////////////////////\r\n if (srcOption === undefined) {\r\n return; // Nothing to do\r\n }\r\n if (typeof srcOption === \"boolean\") {\r\n if (!isObject(mergeTarget[option])) {\r\n mergeTarget[option] = {};\r\n }\r\n mergeTarget[option].enabled = srcOption;\r\n return;\r\n }\r\n if (srcOption === null && !isObject(mergeTarget[option])) {\r\n // If possible, explicit copy from globals\r\n if (isPresent(globalOption)) {\r\n mergeTarget[option] = Object.create(globalOption);\r\n }\r\n else {\r\n return; // Nothing to do\r\n }\r\n }\r\n if (!isObject(srcOption)) {\r\n return;\r\n }\r\n //\r\n // Ensure that 'enabled' is properly set. It is required internally\r\n // Note that the value from options will always overwrite the existing value\r\n //\r\n let enabled = true; // default value\r\n if (srcOption.enabled !== undefined) {\r\n enabled = srcOption.enabled;\r\n }\r\n else {\r\n // Take from globals, if present\r\n if (globalEnabled !== undefined) {\r\n enabled = globalOption.enabled;\r\n }\r\n }\r\n doMerge(mergeTarget, options, option);\r\n mergeTarget[option].enabled = enabled;\r\n}\r\n/**\r\n * This function does a binary search for a visible item in a sorted list. If we find a visible item, the code that uses\r\n * this function will then iterate in both directions over this sorted list to find all visible items.\r\n *\r\n * @param orderedItems - Items ordered by start.\r\n * @param comparator - -1 is lower, 0 is equal, 1 is higher.\r\n * @param field - Property name on an item (That is item[field]).\r\n * @param field2 - Second property name on an item (That is item[field][field2]).\r\n * @returns Index of the found item or -1 if nothing was found.\r\n */\r\nfunction binarySearchCustom(orderedItems, comparator, field, field2) {\r\n const maxIterations = 10000;\r\n let iteration = 0;\r\n let low = 0;\r\n let high = orderedItems.length - 1;\r\n while (low <= high && iteration < maxIterations) {\r\n const middle = Math.floor((low + high) / 2);\r\n const item = orderedItems[middle];\r\n const value = field2 === undefined ? item[field] : item[field][field2];\r\n const searchResult = comparator(value);\r\n if (searchResult == 0) {\r\n // jihaa, found a visible item!\r\n return middle;\r\n }\r\n else if (searchResult == -1) {\r\n // it is too small --> increase low\r\n low = middle + 1;\r\n }\r\n else {\r\n // it is too big --> decrease high\r\n high = middle - 1;\r\n }\r\n iteration++;\r\n }\r\n return -1;\r\n}\r\n/**\r\n * This function does a binary search for a specific value in a sorted array.\r\n * If it does not exist but is in between of two values, we return either the\r\n * one before or the one after, depending on user input If it is found, we\r\n * return the index, else -1.\r\n *\r\n * @param orderedItems - Sorted array.\r\n * @param target - The searched value.\r\n * @param field - Name of the property in items to be searched.\r\n * @param sidePreference - If the target is between two values, should the index of the before or the after be returned?\r\n * @param comparator - An optional comparator, returning -1, 0, 1 for \\<, ===, \\>.\r\n * @returns The index of found value or -1 if nothing was found.\r\n */\r\nfunction binarySearchValue(orderedItems, target, field, sidePreference, comparator) {\r\n const maxIterations = 10000;\r\n let iteration = 0;\r\n let low = 0;\r\n let high = orderedItems.length - 1;\r\n let prevValue;\r\n let value;\r\n let nextValue;\r\n let middle;\r\n comparator =\r\n comparator != undefined\r\n ? comparator\r\n : function (a, b) {\r\n return a == b ? 0 : a < b ? -1 : 1;\r\n };\r\n while (low <= high && iteration < maxIterations) {\r\n // get a new guess\r\n middle = Math.floor(0.5 * (high + low));\r\n prevValue = orderedItems[Math.max(0, middle - 1)][field];\r\n value = orderedItems[middle][field];\r\n nextValue =\r\n orderedItems[Math.min(orderedItems.length - 1, middle + 1)][field];\r\n if (comparator(value, target) == 0) {\r\n // we found the target\r\n return middle;\r\n }\r\n else if (comparator(prevValue, target) < 0 &&\r\n comparator(value, target) > 0) {\r\n // target is in between of the previous and the current\r\n return sidePreference == \"before\" ? Math.max(0, middle - 1) : middle;\r\n }\r\n else if (comparator(value, target) < 0 &&\r\n comparator(nextValue, target) > 0) {\r\n // target is in between of the current and the next\r\n return sidePreference == \"before\"\r\n ? middle\r\n : Math.min(orderedItems.length - 1, middle + 1);\r\n }\r\n else {\r\n // didnt find the target, we need to change our boundaries.\r\n if (comparator(value, target) < 0) {\r\n // it is too small --> increase low\r\n low = middle + 1;\r\n }\r\n else {\r\n // it is too big --> decrease high\r\n high = middle - 1;\r\n }\r\n }\r\n iteration++;\r\n }\r\n // didnt find anything. Return -1.\r\n return -1;\r\n}\r\n/*\r\n * Easing Functions.\r\n * Only considering the t value for the range [0, 1] => [0, 1].\r\n *\r\n * Inspiration: from http://gizma.com/easing/\r\n * https://gist.github.com/gre/1650294\r\n */\r\nconst easingFunctions = {\r\n /**\r\n * Provides no easing and no acceleration.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n linear(t) {\r\n return t;\r\n },\r\n /**\r\n * Accelerate from zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInQuad(t) {\r\n return t * t;\r\n },\r\n /**\r\n * Decelerate to zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeOutQuad(t) {\r\n return t * (2 - t);\r\n },\r\n /**\r\n * Accelerate until halfway, then decelerate.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInOutQuad(t) {\r\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\r\n },\r\n /**\r\n * Accelerate from zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInCubic(t) {\r\n return t * t * t;\r\n },\r\n /**\r\n * Decelerate to zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeOutCubic(t) {\r\n return --t * t * t + 1;\r\n },\r\n /**\r\n * Accelerate until halfway, then decelerate.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInOutCubic(t) {\r\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\r\n },\r\n /**\r\n * Accelerate from zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInQuart(t) {\r\n return t * t * t * t;\r\n },\r\n /**\r\n * Decelerate to zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeOutQuart(t) {\r\n return 1 - --t * t * t * t;\r\n },\r\n /**\r\n * Accelerate until halfway, then decelerate.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInOutQuart(t) {\r\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\r\n },\r\n /**\r\n * Accelerate from zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInQuint(t) {\r\n return t * t * t * t * t;\r\n },\r\n /**\r\n * Decelerate to zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeOutQuint(t) {\r\n return 1 + --t * t * t * t * t;\r\n },\r\n /**\r\n * Accelerate until halfway, then decelerate.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInOutQuint(t) {\r\n return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\r\n },\r\n};\r\n/**\r\n * Experimentaly compute the width of the scrollbar for this browser.\r\n *\r\n * @returns The width in pixels.\r\n */\r\nfunction getScrollBarWidth() {\r\n const inner = document.createElement(\"p\");\r\n inner.style.width = \"100%\";\r\n inner.style.height = \"200px\";\r\n const outer = document.createElement(\"div\");\r\n outer.style.position = \"absolute\";\r\n outer.style.top = \"0px\";\r\n outer.style.left = \"0px\";\r\n outer.style.visibility = \"hidden\";\r\n outer.style.width = \"200px\";\r\n outer.style.height = \"150px\";\r\n outer.style.overflow = \"hidden\";\r\n outer.appendChild(inner);\r\n document.body.appendChild(outer);\r\n const w1 = inner.offsetWidth;\r\n outer.style.overflow = \"scroll\";\r\n let w2 = inner.offsetWidth;\r\n if (w1 == w2) {\r\n w2 = outer.clientWidth;\r\n }\r\n document.body.removeChild(outer);\r\n return w1 - w2;\r\n}\r\n// @TODO: This doesn't work properly.\r\n// It works only for single property objects,\r\n// otherwise it combines all of the types in a union.\r\n// export function topMost (\r\n// pile: Record[],\r\n// accessors: K1 | [K1]\r\n// ): undefined | V1\r\n// export function topMost (\r\n// pile: Record>[],\r\n// accessors: [K1, K2]\r\n// ): undefined | V1 | V2\r\n// export function topMost (\r\n// pile: Record>>[],\r\n// accessors: [K1, K2, K3]\r\n// ): undefined | V1 | V2 | V3\r\n/**\r\n * Get the top most property value from a pile of objects.\r\n *\r\n * @param pile - Array of objects, no required format.\r\n * @param accessors - Array of property names.\r\n * For example `object['foo']['bar']` → `['foo', 'bar']`.\r\n * @returns Value of the property with given accessors path from the first pile item where it's not undefined.\r\n */\r\nfunction topMost(pile, accessors) {\r\n let candidate;\r\n if (!Array.isArray(accessors)) {\r\n accessors = [accessors];\r\n }\r\n for (const member of pile) {\r\n if (member) {\r\n candidate = member[accessors[0]];\r\n for (let i = 1; i < accessors.length; i++) {\r\n if (candidate) {\r\n candidate = candidate[accessors[i]];\r\n }\r\n }\r\n if (typeof candidate !== \"undefined\") {\r\n break;\r\n }\r\n }\r\n }\r\n return candidate;\r\n}\n\nconst htmlColors = {\n black: \"#000000\",\n navy: \"#000080\",\n darkblue: \"#00008B\",\n mediumblue: \"#0000CD\",\n blue: \"#0000FF\",\n darkgreen: \"#006400\",\n green: \"#008000\",\n teal: \"#008080\",\n darkcyan: \"#008B8B\",\n deepskyblue: \"#00BFFF\",\n darkturquoise: \"#00CED1\",\n mediumspringgreen: \"#00FA9A\",\n lime: \"#00FF00\",\n springgreen: \"#00FF7F\",\n aqua: \"#00FFFF\",\n cyan: \"#00FFFF\",\n midnightblue: \"#191970\",\n dodgerblue: \"#1E90FF\",\n lightseagreen: \"#20B2AA\",\n forestgreen: \"#228B22\",\n seagreen: \"#2E8B57\",\n darkslategray: \"#2F4F4F\",\n limegreen: \"#32CD32\",\n mediumseagreen: \"#3CB371\",\n turquoise: \"#40E0D0\",\n royalblue: \"#4169E1\",\n steelblue: \"#4682B4\",\n darkslateblue: \"#483D8B\",\n mediumturquoise: \"#48D1CC\",\n indigo: \"#4B0082\",\n darkolivegreen: \"#556B2F\",\n cadetblue: \"#5F9EA0\",\n cornflowerblue: \"#6495ED\",\n mediumaquamarine: \"#66CDAA\",\n dimgray: \"#696969\",\n slateblue: \"#6A5ACD\",\n olivedrab: \"#6B8E23\",\n slategray: \"#708090\",\n lightslategray: \"#778899\",\n mediumslateblue: \"#7B68EE\",\n lawngreen: \"#7CFC00\",\n chartreuse: \"#7FFF00\",\n aquamarine: \"#7FFFD4\",\n maroon: \"#800000\",\n purple: \"#800080\",\n olive: \"#808000\",\n gray: \"#808080\",\n skyblue: \"#87CEEB\",\n lightskyblue: \"#87CEFA\",\n blueviolet: \"#8A2BE2\",\n darkred: \"#8B0000\",\n darkmagenta: \"#8B008B\",\n saddlebrown: \"#8B4513\",\n darkseagreen: \"#8FBC8F\",\n lightgreen: \"#90EE90\",\n mediumpurple: \"#9370D8\",\n darkviolet: \"#9400D3\",\n palegreen: \"#98FB98\",\n darkorchid: \"#9932CC\",\n yellowgreen: \"#9ACD32\",\n sienna: \"#A0522D\",\n brown: \"#A52A2A\",\n darkgray: \"#A9A9A9\",\n lightblue: \"#ADD8E6\",\n greenyellow: \"#ADFF2F\",\n paleturquoise: \"#AFEEEE\",\n lightsteelblue: \"#B0C4DE\",\n powderblue: \"#B0E0E6\",\n firebrick: \"#B22222\",\n darkgoldenrod: \"#B8860B\",\n mediumorchid: \"#BA55D3\",\n rosybrown: \"#BC8F8F\",\n darkkhaki: \"#BDB76B\",\n silver: \"#C0C0C0\",\n mediumvioletred: \"#C71585\",\n indianred: \"#CD5C5C\",\n peru: \"#CD853F\",\n chocolate: \"#D2691E\",\n tan: \"#D2B48C\",\n lightgrey: \"#D3D3D3\",\n palevioletred: \"#D87093\",\n thistle: \"#D8BFD8\",\n orchid: \"#DA70D6\",\n goldenrod: \"#DAA520\",\n crimson: \"#DC143C\",\n gainsboro: \"#DCDCDC\",\n plum: \"#DDA0DD\",\n burlywood: \"#DEB887\",\n lightcyan: \"#E0FFFF\",\n lavender: \"#E6E6FA\",\n darksalmon: \"#E9967A\",\n violet: \"#EE82EE\",\n palegoldenrod: \"#EEE8AA\",\n lightcoral: \"#F08080\",\n khaki: \"#F0E68C\",\n aliceblue: \"#F0F8FF\",\n honeydew: \"#F0FFF0\",\n azure: \"#F0FFFF\",\n sandybrown: \"#F4A460\",\n wheat: \"#F5DEB3\",\n beige: \"#F5F5DC\",\n whitesmoke: \"#F5F5F5\",\n mintcream: \"#F5FFFA\",\n ghostwhite: \"#F8F8FF\",\n salmon: \"#FA8072\",\n antiquewhite: \"#FAEBD7\",\n linen: \"#FAF0E6\",\n lightgoldenrodyellow: \"#FAFAD2\",\n oldlace: \"#FDF5E6\",\n red: \"#FF0000\",\n fuchsia: \"#FF00FF\",\n magenta: \"#FF00FF\",\n deeppink: \"#FF1493\",\n orangered: \"#FF4500\",\n tomato: \"#FF6347\",\n hotpink: \"#FF69B4\",\n coral: \"#FF7F50\",\n darkorange: \"#FF8C00\",\n lightsalmon: \"#FFA07A\",\n orange: \"#FFA500\",\n lightpink: \"#FFB6C1\",\n pink: \"#FFC0CB\",\n gold: \"#FFD700\",\n peachpuff: \"#FFDAB9\",\n navajowhite: \"#FFDEAD\",\n moccasin: \"#FFE4B5\",\n bisque: \"#FFE4C4\",\n mistyrose: \"#FFE4E1\",\n blanchedalmond: \"#FFEBCD\",\n papayawhip: \"#FFEFD5\",\n lavenderblush: \"#FFF0F5\",\n seashell: \"#FFF5EE\",\n cornsilk: \"#FFF8DC\",\n lemonchiffon: \"#FFFACD\",\n floralwhite: \"#FFFAF0\",\n snow: \"#FFFAFA\",\n yellow: \"#FFFF00\",\n lightyellow: \"#FFFFE0\",\n ivory: \"#FFFFF0\",\n white: \"#FFFFFF\",\n};\n\n/**\n * @param {number} [pixelRatio=1]\n */\nlet ColorPicker$1 = class ColorPicker {\n /**\n * @param {number} [pixelRatio=1]\n */\n constructor(pixelRatio = 1) {\n this.pixelRatio = pixelRatio;\n this.generated = false;\n this.centerCoordinates = { x: 289 / 2, y: 289 / 2 };\n this.r = 289 * 0.49;\n this.color = { r: 255, g: 255, b: 255, a: 1.0 };\n this.hueCircle = undefined;\n this.initialColor = { r: 255, g: 255, b: 255, a: 1.0 };\n this.previousColor = undefined;\n this.applied = false;\n\n // bound by\n this.updateCallback = () => {};\n this.closeCallback = () => {};\n\n // create all DOM elements\n this._create();\n }\n\n /**\n * this inserts the colorPicker into a div from the DOM\n *\n * @param {Element} container\n */\n insertTo(container) {\n if (this.hammer !== undefined) {\n this.hammer.destroy();\n this.hammer = undefined;\n }\n this.container = container;\n this.container.appendChild(this.frame);\n this._bindHammer();\n\n this._setSize();\n }\n\n /**\n * the callback is executed on apply and save. Bind it to the application\n *\n * @param {Function} callback\n */\n setUpdateCallback(callback) {\n if (typeof callback === \"function\") {\n this.updateCallback = callback;\n } else {\n throw new Error(\n \"Function attempted to set as colorPicker update callback is not a function.\"\n );\n }\n }\n\n /**\n * the callback is executed on apply and save. Bind it to the application\n *\n * @param {Function} callback\n */\n setCloseCallback(callback) {\n if (typeof callback === \"function\") {\n this.closeCallback = callback;\n } else {\n throw new Error(\n \"Function attempted to set as colorPicker closing callback is not a function.\"\n );\n }\n }\n\n /**\n *\n * @param {string} color\n * @returns {string}\n * @private\n */\n _isColorString(color) {\n if (typeof color === \"string\") {\n return htmlColors[color];\n }\n }\n\n /**\n * Set the color of the colorPicker\n * Supported formats:\n * 'red' --> HTML color string\n * '#ffffff' --> hex string\n * 'rgb(255,255,255)' --> rgb string\n * 'rgba(255,255,255,1.0)' --> rgba string\n * {r:255,g:255,b:255} --> rgb object\n * {r:255,g:255,b:255,a:1.0} --> rgba object\n *\n * @param {string | object} color\n * @param {boolean} [setInitial=true]\n */\n setColor(color, setInitial = true) {\n if (color === \"none\") {\n return;\n }\n\n let rgba;\n\n // if a html color shorthand is used, convert to hex\n const htmlColor = this._isColorString(color);\n if (htmlColor !== undefined) {\n color = htmlColor;\n }\n\n // check format\n if (isString(color) === true) {\n if (isValidRGB(color) === true) {\n const rgbaArray = color\n .substr(4)\n .substr(0, color.length - 5)\n .split(\",\");\n rgba = { r: rgbaArray[0], g: rgbaArray[1], b: rgbaArray[2], a: 1.0 };\n } else if (isValidRGBA(color) === true) {\n const rgbaArray = color\n .substr(5)\n .substr(0, color.length - 6)\n .split(\",\");\n rgba = {\n r: rgbaArray[0],\n g: rgbaArray[1],\n b: rgbaArray[2],\n a: rgbaArray[3],\n };\n } else if (isValidHex(color) === true) {\n const rgbObj = hexToRGB(color);\n rgba = { r: rgbObj.r, g: rgbObj.g, b: rgbObj.b, a: 1.0 };\n }\n } else {\n if (color instanceof Object) {\n if (\n color.r !== undefined &&\n color.g !== undefined &&\n color.b !== undefined\n ) {\n const alpha = color.a !== undefined ? color.a : \"1.0\";\n rgba = { r: color.r, g: color.g, b: color.b, a: alpha };\n }\n }\n }\n\n // set color\n if (rgba === undefined) {\n throw new Error(\n \"Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: \" +\n JSON.stringify(color)\n );\n } else {\n this._setColor(rgba, setInitial);\n }\n }\n\n /**\n * this shows the color picker.\n * The hue circle is constructed once and stored.\n */\n show() {\n if (this.closeCallback !== undefined) {\n this.closeCallback();\n this.closeCallback = undefined;\n }\n\n this.applied = false;\n this.frame.style.display = \"block\";\n this._generateHueCircle();\n }\n\n // ------------------------------------------ PRIVATE ----------------------------- //\n\n /**\n * Hide the picker. Is called by the cancel button.\n * Optional boolean to store the previous color for easy access later on.\n *\n * @param {boolean} [storePrevious=true]\n * @private\n */\n _hide(storePrevious = true) {\n // store the previous color for next time;\n if (storePrevious === true) {\n this.previousColor = Object.assign({}, this.color);\n }\n\n if (this.applied === true) {\n this.updateCallback(this.initialColor);\n }\n\n this.frame.style.display = \"none\";\n\n // call the closing callback, restoring the onclick method.\n // this is in a setTimeout because it will trigger the show again before the click is done.\n setTimeout(() => {\n if (this.closeCallback !== undefined) {\n this.closeCallback();\n this.closeCallback = undefined;\n }\n }, 0);\n }\n\n /**\n * bound to the save button. Saves and hides.\n *\n * @private\n */\n _save() {\n this.updateCallback(this.color);\n this.applied = false;\n this._hide();\n }\n\n /**\n * Bound to apply button. Saves but does not close. Is undone by the cancel button.\n *\n * @private\n */\n _apply() {\n this.applied = true;\n this.updateCallback(this.color);\n this._updatePicker(this.color);\n }\n\n /**\n * load the color from the previous session.\n *\n * @private\n */\n _loadLast() {\n if (this.previousColor !== undefined) {\n this.setColor(this.previousColor, false);\n } else {\n alert(\"There is no last color to load...\");\n }\n }\n\n /**\n * set the color, place the picker\n *\n * @param {object} rgba\n * @param {boolean} [setInitial=true]\n * @private\n */\n _setColor(rgba, setInitial = true) {\n // store the initial color\n if (setInitial === true) {\n this.initialColor = Object.assign({}, rgba);\n }\n\n this.color = rgba;\n const hsv = RGBToHSV(rgba.r, rgba.g, rgba.b);\n\n const angleConvert = 2 * Math.PI;\n const radius = this.r * hsv.s;\n const x =\n this.centerCoordinates.x + radius * Math.sin(angleConvert * hsv.h);\n const y =\n this.centerCoordinates.y + radius * Math.cos(angleConvert * hsv.h);\n\n this.colorPickerSelector.style.left =\n x - 0.5 * this.colorPickerSelector.clientWidth + \"px\";\n this.colorPickerSelector.style.top =\n y - 0.5 * this.colorPickerSelector.clientHeight + \"px\";\n\n this._updatePicker(rgba);\n }\n\n /**\n * bound to opacity control\n *\n * @param {number} value\n * @private\n */\n _setOpacity(value) {\n this.color.a = value / 100;\n this._updatePicker(this.color);\n }\n\n /**\n * bound to brightness control\n *\n * @param {number} value\n * @private\n */\n _setBrightness(value) {\n const hsv = RGBToHSV(this.color.r, this.color.g, this.color.b);\n hsv.v = value / 100;\n const rgba = HSVToRGB(hsv.h, hsv.s, hsv.v);\n rgba[\"a\"] = this.color.a;\n this.color = rgba;\n this._updatePicker();\n }\n\n /**\n * update the color picker. A black circle overlays the hue circle to mimic the brightness decreasing.\n *\n * @param {object} rgba\n * @private\n */\n _updatePicker(rgba = this.color) {\n const hsv = RGBToHSV(rgba.r, rgba.g, rgba.b);\n const ctx = this.colorPickerCanvas.getContext(\"2d\");\n if (this.pixelRation === undefined) {\n this.pixelRatio =\n (window.devicePixelRatio || 1) /\n (ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio ||\n 1);\n }\n ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n // clear the canvas\n const w = this.colorPickerCanvas.clientWidth;\n const h = this.colorPickerCanvas.clientHeight;\n ctx.clearRect(0, 0, w, h);\n\n ctx.putImageData(this.hueCircle, 0, 0);\n ctx.fillStyle = \"rgba(0,0,0,\" + (1 - hsv.v) + \")\";\n ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);\n ctx.fill();\n\n this.brightnessRange.value = 100 * hsv.v;\n this.opacityRange.value = 100 * rgba.a;\n\n this.initialColorDiv.style.backgroundColor =\n \"rgba(\" +\n this.initialColor.r +\n \",\" +\n this.initialColor.g +\n \",\" +\n this.initialColor.b +\n \",\" +\n this.initialColor.a +\n \")\";\n this.newColorDiv.style.backgroundColor =\n \"rgba(\" +\n this.color.r +\n \",\" +\n this.color.g +\n \",\" +\n this.color.b +\n \",\" +\n this.color.a +\n \")\";\n }\n\n /**\n * used by create to set the size of the canvas.\n *\n * @private\n */\n _setSize() {\n this.colorPickerCanvas.style.width = \"100%\";\n this.colorPickerCanvas.style.height = \"100%\";\n\n this.colorPickerCanvas.width = 289 * this.pixelRatio;\n this.colorPickerCanvas.height = 289 * this.pixelRatio;\n }\n\n /**\n * create all dom elements\n * TODO: cleanup, lots of similar dom elements\n *\n * @private\n */\n _create() {\n this.frame = document.createElement(\"div\");\n this.frame.className = \"vis-color-picker\";\n\n this.colorPickerDiv = document.createElement(\"div\");\n this.colorPickerSelector = document.createElement(\"div\");\n this.colorPickerSelector.className = \"vis-selector\";\n this.colorPickerDiv.appendChild(this.colorPickerSelector);\n\n this.colorPickerCanvas = document.createElement(\"canvas\");\n this.colorPickerDiv.appendChild(this.colorPickerCanvas);\n\n if (!this.colorPickerCanvas.getContext) {\n const noCanvas = document.createElement(\"DIV\");\n noCanvas.style.color = \"red\";\n noCanvas.style.fontWeight = \"bold\";\n noCanvas.style.padding = \"10px\";\n noCanvas.innerText = \"Error: your browser does not support HTML canvas\";\n this.colorPickerCanvas.appendChild(noCanvas);\n } else {\n const ctx = this.colorPickerCanvas.getContext(\"2d\");\n this.pixelRatio =\n (window.devicePixelRatio || 1) /\n (ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio ||\n 1);\n this.colorPickerCanvas\n .getContext(\"2d\")\n .setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n }\n\n this.colorPickerDiv.className = \"vis-color\";\n\n this.opacityDiv = document.createElement(\"div\");\n this.opacityDiv.className = \"vis-opacity\";\n\n this.brightnessDiv = document.createElement(\"div\");\n this.brightnessDiv.className = \"vis-brightness\";\n\n this.arrowDiv = document.createElement(\"div\");\n this.arrowDiv.className = \"vis-arrow\";\n\n this.opacityRange = document.createElement(\"input\");\n try {\n this.opacityRange.type = \"range\"; // Not supported on IE9\n this.opacityRange.min = \"0\";\n this.opacityRange.max = \"100\";\n } catch (err) {\n // TODO: Add some error handling.\n }\n this.opacityRange.value = \"100\";\n this.opacityRange.className = \"vis-range\";\n\n this.brightnessRange = document.createElement(\"input\");\n try {\n this.brightnessRange.type = \"range\"; // Not supported on IE9\n this.brightnessRange.min = \"0\";\n this.brightnessRange.max = \"100\";\n } catch (err) {\n // TODO: Add some error handling.\n }\n this.brightnessRange.value = \"100\";\n this.brightnessRange.className = \"vis-range\";\n\n this.opacityDiv.appendChild(this.opacityRange);\n this.brightnessDiv.appendChild(this.brightnessRange);\n\n const me = this;\n this.opacityRange.onchange = function () {\n me._setOpacity(this.value);\n };\n this.opacityRange.oninput = function () {\n me._setOpacity(this.value);\n };\n this.brightnessRange.onchange = function () {\n me._setBrightness(this.value);\n };\n this.brightnessRange.oninput = function () {\n me._setBrightness(this.value);\n };\n\n this.brightnessLabel = document.createElement(\"div\");\n this.brightnessLabel.className = \"vis-label vis-brightness\";\n this.brightnessLabel.innerText = \"brightness:\";\n\n this.opacityLabel = document.createElement(\"div\");\n this.opacityLabel.className = \"vis-label vis-opacity\";\n this.opacityLabel.innerText = \"opacity:\";\n\n this.newColorDiv = document.createElement(\"div\");\n this.newColorDiv.className = \"vis-new-color\";\n this.newColorDiv.innerText = \"new\";\n\n this.initialColorDiv = document.createElement(\"div\");\n this.initialColorDiv.className = \"vis-initial-color\";\n this.initialColorDiv.innerText = \"initial\";\n\n this.cancelButton = document.createElement(\"div\");\n this.cancelButton.className = \"vis-button vis-cancel\";\n this.cancelButton.innerText = \"cancel\";\n this.cancelButton.onclick = this._hide.bind(this, false);\n\n this.applyButton = document.createElement(\"div\");\n this.applyButton.className = \"vis-button vis-apply\";\n this.applyButton.innerText = \"apply\";\n this.applyButton.onclick = this._apply.bind(this);\n\n this.saveButton = document.createElement(\"div\");\n this.saveButton.className = \"vis-button vis-save\";\n this.saveButton.innerText = \"save\";\n this.saveButton.onclick = this._save.bind(this);\n\n this.loadButton = document.createElement(\"div\");\n this.loadButton.className = \"vis-button vis-load\";\n this.loadButton.innerText = \"load last\";\n this.loadButton.onclick = this._loadLast.bind(this);\n\n this.frame.appendChild(this.colorPickerDiv);\n this.frame.appendChild(this.arrowDiv);\n this.frame.appendChild(this.brightnessLabel);\n this.frame.appendChild(this.brightnessDiv);\n this.frame.appendChild(this.opacityLabel);\n this.frame.appendChild(this.opacityDiv);\n this.frame.appendChild(this.newColorDiv);\n this.frame.appendChild(this.initialColorDiv);\n\n this.frame.appendChild(this.cancelButton);\n this.frame.appendChild(this.applyButton);\n this.frame.appendChild(this.saveButton);\n this.frame.appendChild(this.loadButton);\n }\n\n /**\n * bind hammer to the color picker\n *\n * @private\n */\n _bindHammer() {\n this.drag = {};\n this.pinch = {};\n this.hammer = new Hammer$1(this.colorPickerCanvas);\n this.hammer.get(\"pinch\").set({ enable: true });\n\n this.hammer.on(\"hammer.input\", (event) => {\n if (event.isFirst) {\n this._moveSelector(event);\n }\n });\n this.hammer.on(\"tap\", (event) => {\n this._moveSelector(event);\n });\n this.hammer.on(\"panstart\", (event) => {\n this._moveSelector(event);\n });\n this.hammer.on(\"panmove\", (event) => {\n this._moveSelector(event);\n });\n this.hammer.on(\"panend\", (event) => {\n this._moveSelector(event);\n });\n }\n\n /**\n * generate the hue circle. This is relatively heavy (200ms) and is done only once on the first time it is shown.\n *\n * @private\n */\n _generateHueCircle() {\n if (this.generated === false) {\n const ctx = this.colorPickerCanvas.getContext(\"2d\");\n if (this.pixelRation === undefined) {\n this.pixelRatio =\n (window.devicePixelRatio || 1) /\n (ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio ||\n 1);\n }\n ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n // clear the canvas\n const w = this.colorPickerCanvas.clientWidth;\n const h = this.colorPickerCanvas.clientHeight;\n ctx.clearRect(0, 0, w, h);\n\n // draw hue circle\n let x, y, hue, sat;\n this.centerCoordinates = { x: w * 0.5, y: h * 0.5 };\n this.r = 0.49 * w;\n const angleConvert = (2 * Math.PI) / 360;\n const hfac = 1 / 360;\n const sfac = 1 / this.r;\n let rgb;\n for (hue = 0; hue < 360; hue++) {\n for (sat = 0; sat < this.r; sat++) {\n x = this.centerCoordinates.x + sat * Math.sin(angleConvert * hue);\n y = this.centerCoordinates.y + sat * Math.cos(angleConvert * hue);\n rgb = HSVToRGB(hue * hfac, sat * sfac, 1);\n ctx.fillStyle = \"rgb(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \")\";\n ctx.fillRect(x - 0.5, y - 0.5, 2, 2);\n }\n }\n ctx.strokeStyle = \"rgba(0,0,0,1)\";\n ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);\n ctx.stroke();\n\n this.hueCircle = ctx.getImageData(0, 0, w, h);\n }\n this.generated = true;\n }\n\n /**\n * move the selector. This is called by hammer functions.\n *\n * @param {Event} event The event\n * @private\n */\n _moveSelector(event) {\n const rect = this.colorPickerDiv.getBoundingClientRect();\n const left = event.center.x - rect.left;\n const top = event.center.y - rect.top;\n\n const centerY = 0.5 * this.colorPickerDiv.clientHeight;\n const centerX = 0.5 * this.colorPickerDiv.clientWidth;\n\n const x = left - centerX;\n const y = top - centerY;\n\n const angle = Math.atan2(x, y);\n const radius = 0.98 * Math.min(Math.sqrt(x * x + y * y), centerX);\n\n const newTop = Math.cos(angle) * radius + centerY;\n const newLeft = Math.sin(angle) * radius + centerX;\n\n this.colorPickerSelector.style.top =\n newTop - 0.5 * this.colorPickerSelector.clientHeight + \"px\";\n this.colorPickerSelector.style.left =\n newLeft - 0.5 * this.colorPickerSelector.clientWidth + \"px\";\n\n // set color\n let h = angle / (2 * Math.PI);\n h = h < 0 ? h + 1 : h;\n const s = radius / this.r;\n const hsv = RGBToHSV(this.color.r, this.color.g, this.color.b);\n hsv.h = h;\n hsv.s = s;\n const rgba = HSVToRGB(hsv.h, hsv.s, hsv.v);\n rgba[\"a\"] = this.color.a;\n this.color = rgba;\n\n // update previews\n this.initialColorDiv.style.backgroundColor =\n \"rgba(\" +\n this.initialColor.r +\n \",\" +\n this.initialColor.g +\n \",\" +\n this.initialColor.b +\n \",\" +\n this.initialColor.a +\n \")\";\n this.newColorDiv.style.backgroundColor =\n \"rgba(\" +\n this.color.r +\n \",\" +\n this.color.g +\n \",\" +\n this.color.b +\n \",\" +\n this.color.a +\n \")\";\n }\n};\n\n/**\n * Wrap given text (last argument) in HTML elements (all preceding arguments).\n *\n * @param {...any} rest - List of tag names followed by inner text.\n * @returns An element or a text node.\n */\nfunction wrapInTag(...rest) {\n if (rest.length < 1) {\n throw new TypeError(\"Invalid arguments.\");\n } else if (rest.length === 1) {\n return document.createTextNode(rest[0]);\n } else {\n const element = document.createElement(rest[0]);\n element.appendChild(wrapInTag(...rest.slice(1)));\n return element;\n }\n}\n\n/**\n * The way this works is for all properties of this.possible options, you can supply the property name in any form to list the options.\n * Boolean options are recognised as Boolean\n * Number options should be written as array: [default value, min value, max value, stepsize]\n * Colors should be written as array: ['color', '#ffffff']\n * Strings with should be written as array: [option1, option2, option3, ..]\n *\n * The options are matched with their counterparts in each of the modules and the values used in the configuration are\n */\nlet Configurator$1 = class Configurator {\n /**\n * @param {object} parentModule | the location where parentModule.setOptions() can be called\n * @param {object} defaultContainer | the default container of the module\n * @param {object} configureOptions | the fully configured and predefined options set found in allOptions.js\n * @param {number} pixelRatio | canvas pixel ratio\n * @param {Function} hideOption | custom logic to dynamically hide options\n */\n constructor(\n parentModule,\n defaultContainer,\n configureOptions,\n pixelRatio = 1,\n hideOption = () => false\n ) {\n this.parent = parentModule;\n this.changedOptions = [];\n this.container = defaultContainer;\n this.allowCreation = false;\n this.hideOption = hideOption;\n\n this.options = {};\n this.initialized = false;\n this.popupCounter = 0;\n this.defaultOptions = {\n enabled: false,\n filter: true,\n container: undefined,\n showButton: true,\n };\n Object.assign(this.options, this.defaultOptions);\n\n this.configureOptions = configureOptions;\n this.moduleOptions = {};\n this.domElements = [];\n this.popupDiv = {};\n this.popupLimit = 5;\n this.popupHistory = {};\n this.colorPicker = new ColorPicker$1(pixelRatio);\n this.wrapper = undefined;\n }\n\n /**\n * refresh all options.\n * Because all modules parse their options by themselves, we just use their options. We copy them here.\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n // reset the popup history because the indices may have been changed.\n this.popupHistory = {};\n this._removePopup();\n\n let enabled = true;\n if (typeof options === \"string\") {\n this.options.filter = options;\n } else if (Array.isArray(options)) {\n this.options.filter = options.join();\n } else if (typeof options === \"object\") {\n if (options == null) {\n throw new TypeError(\"options cannot be null\");\n }\n if (options.container !== undefined) {\n this.options.container = options.container;\n }\n if (options.filter !== undefined) {\n this.options.filter = options.filter;\n }\n if (options.showButton !== undefined) {\n this.options.showButton = options.showButton;\n }\n if (options.enabled !== undefined) {\n enabled = options.enabled;\n }\n } else if (typeof options === \"boolean\") {\n this.options.filter = true;\n enabled = options;\n } else if (typeof options === \"function\") {\n this.options.filter = options;\n enabled = true;\n }\n if (this.options.filter === false) {\n enabled = false;\n }\n\n this.options.enabled = enabled;\n }\n this._clean();\n }\n\n /**\n *\n * @param {object} moduleOptions\n */\n setModuleOptions(moduleOptions) {\n this.moduleOptions = moduleOptions;\n if (this.options.enabled === true) {\n this._clean();\n if (this.options.container !== undefined) {\n this.container = this.options.container;\n }\n this._create();\n }\n }\n\n /**\n * Create all DOM elements\n *\n * @private\n */\n _create() {\n this._clean();\n this.changedOptions = [];\n\n const filter = this.options.filter;\n let counter = 0;\n let show = false;\n for (const option in this.configureOptions) {\n if (Object.prototype.hasOwnProperty.call(this.configureOptions, option)) {\n this.allowCreation = false;\n show = false;\n if (typeof filter === \"function\") {\n show = filter(option, []);\n show =\n show ||\n this._handleObject(this.configureOptions[option], [option], true);\n } else if (filter === true || filter.indexOf(option) !== -1) {\n show = true;\n }\n\n if (show !== false) {\n this.allowCreation = true;\n\n // linebreak between categories\n if (counter > 0) {\n this._makeItem([]);\n }\n // a header for the category\n this._makeHeader(option);\n\n // get the sub options\n this._handleObject(this.configureOptions[option], [option]);\n }\n counter++;\n }\n }\n this._makeButton();\n this._push();\n //~ this.colorPicker.insertTo(this.container);\n }\n\n /**\n * draw all DOM elements on the screen\n *\n * @private\n */\n _push() {\n this.wrapper = document.createElement(\"div\");\n this.wrapper.className = \"vis-configuration-wrapper\";\n this.container.appendChild(this.wrapper);\n for (let i = 0; i < this.domElements.length; i++) {\n this.wrapper.appendChild(this.domElements[i]);\n }\n\n this._showPopupIfNeeded();\n }\n\n /**\n * delete all DOM elements\n *\n * @private\n */\n _clean() {\n for (let i = 0; i < this.domElements.length; i++) {\n this.wrapper.removeChild(this.domElements[i]);\n }\n\n if (this.wrapper !== undefined) {\n this.container.removeChild(this.wrapper);\n this.wrapper = undefined;\n }\n this.domElements = [];\n\n this._removePopup();\n }\n\n /**\n * get the value from the actualOptions if it exists\n *\n * @param {Array} path | where to look for the actual option\n * @returns {*}\n * @private\n */\n _getValue(path) {\n let base = this.moduleOptions;\n for (let i = 0; i < path.length; i++) {\n if (base[path[i]] !== undefined) {\n base = base[path[i]];\n } else {\n base = undefined;\n break;\n }\n }\n return base;\n }\n\n /**\n * all option elements are wrapped in an item\n *\n * @param {Array} path | where to look for the actual option\n * @param {Array.} domElements\n * @returns {number}\n * @private\n */\n _makeItem(path, ...domElements) {\n if (this.allowCreation === true) {\n const item = document.createElement(\"div\");\n item.className =\n \"vis-configuration vis-config-item vis-config-s\" + path.length;\n domElements.forEach((element) => {\n item.appendChild(element);\n });\n this.domElements.push(item);\n return this.domElements.length;\n }\n return 0;\n }\n\n /**\n * header for major subjects\n *\n * @param {string} name\n * @private\n */\n _makeHeader(name) {\n const div = document.createElement(\"div\");\n div.className = \"vis-configuration vis-config-header\";\n div.innerText = name;\n this._makeItem([], div);\n }\n\n /**\n * make a label, if it is an object label, it gets different styling.\n *\n * @param {string} name\n * @param {Array} path | where to look for the actual option\n * @param {string} objectLabel\n * @returns {HTMLElement}\n * @private\n */\n _makeLabel(name, path, objectLabel = false) {\n const div = document.createElement(\"div\");\n div.className =\n \"vis-configuration vis-config-label vis-config-s\" + path.length;\n if (objectLabel === true) {\n while (div.firstChild) {\n div.removeChild(div.firstChild);\n }\n div.appendChild(wrapInTag(\"i\", \"b\", name));\n } else {\n div.innerText = name + \":\";\n }\n return div;\n }\n\n /**\n * make a dropdown list for multiple possible string optoins\n *\n * @param {Array.} arr\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _makeDropdown(arr, value, path) {\n const select = document.createElement(\"select\");\n select.className = \"vis-configuration vis-config-select\";\n let selectedValue = 0;\n if (value !== undefined) {\n if (arr.indexOf(value) !== -1) {\n selectedValue = arr.indexOf(value);\n }\n }\n\n for (let i = 0; i < arr.length; i++) {\n const option = document.createElement(\"option\");\n option.value = arr[i];\n if (i === selectedValue) {\n option.selected = \"selected\";\n }\n option.innerText = arr[i];\n select.appendChild(option);\n }\n\n const me = this;\n select.onchange = function () {\n me._update(this.value, path);\n };\n\n const label = this._makeLabel(path[path.length - 1], path);\n this._makeItem(path, label, select);\n }\n\n /**\n * make a range object for numeric options\n *\n * @param {Array.} arr\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _makeRange(arr, value, path) {\n const defaultValue = arr[0];\n const min = arr[1];\n const max = arr[2];\n const step = arr[3];\n const range = document.createElement(\"input\");\n range.className = \"vis-configuration vis-config-range\";\n try {\n range.type = \"range\"; // not supported on IE9\n range.min = min;\n range.max = max;\n } catch (err) {\n // TODO: Add some error handling.\n }\n range.step = step;\n\n // set up the popup settings in case they are needed.\n let popupString = \"\";\n let popupValue = 0;\n\n if (value !== undefined) {\n const factor = 1.2;\n if (value < 0 && value * factor < min) {\n range.min = Math.ceil(value * factor);\n popupValue = range.min;\n popupString = \"range increased\";\n } else if (value / factor < min) {\n range.min = Math.ceil(value / factor);\n popupValue = range.min;\n popupString = \"range increased\";\n }\n if (value * factor > max && max !== 1) {\n range.max = Math.ceil(value * factor);\n popupValue = range.max;\n popupString = \"range increased\";\n }\n range.value = value;\n } else {\n range.value = defaultValue;\n }\n\n const input = document.createElement(\"input\");\n input.className = \"vis-configuration vis-config-rangeinput\";\n input.value = range.value;\n\n const me = this;\n range.onchange = function () {\n input.value = this.value;\n me._update(Number(this.value), path);\n };\n range.oninput = function () {\n input.value = this.value;\n };\n\n const label = this._makeLabel(path[path.length - 1], path);\n const itemIndex = this._makeItem(path, label, range, input);\n\n // if a popup is needed AND it has not been shown for this value, show it.\n if (popupString !== \"\" && this.popupHistory[itemIndex] !== popupValue) {\n this.popupHistory[itemIndex] = popupValue;\n this._setupPopup(popupString, itemIndex);\n }\n }\n\n /**\n * make a button object\n *\n * @private\n */\n _makeButton() {\n if (this.options.showButton === true) {\n const generateButton = document.createElement(\"div\");\n generateButton.className = \"vis-configuration vis-config-button\";\n generateButton.innerText = \"generate options\";\n generateButton.onclick = () => {\n this._printOptions();\n };\n generateButton.onmouseover = () => {\n generateButton.className = \"vis-configuration vis-config-button hover\";\n };\n generateButton.onmouseout = () => {\n generateButton.className = \"vis-configuration vis-config-button\";\n };\n\n this.optionsContainer = document.createElement(\"div\");\n this.optionsContainer.className =\n \"vis-configuration vis-config-option-container\";\n\n this.domElements.push(this.optionsContainer);\n this.domElements.push(generateButton);\n }\n }\n\n /**\n * prepare the popup\n *\n * @param {string} string\n * @param {number} index\n * @private\n */\n _setupPopup(string, index) {\n if (\n this.initialized === true &&\n this.allowCreation === true &&\n this.popupCounter < this.popupLimit\n ) {\n const div = document.createElement(\"div\");\n div.id = \"vis-configuration-popup\";\n div.className = \"vis-configuration-popup\";\n div.innerText = string;\n div.onclick = () => {\n this._removePopup();\n };\n this.popupCounter += 1;\n this.popupDiv = { html: div, index: index };\n }\n }\n\n /**\n * remove the popup from the dom\n *\n * @private\n */\n _removePopup() {\n if (this.popupDiv.html !== undefined) {\n this.popupDiv.html.parentNode.removeChild(this.popupDiv.html);\n clearTimeout(this.popupDiv.hideTimeout);\n clearTimeout(this.popupDiv.deleteTimeout);\n this.popupDiv = {};\n }\n }\n\n /**\n * Show the popup if it is needed.\n *\n * @private\n */\n _showPopupIfNeeded() {\n if (this.popupDiv.html !== undefined) {\n const correspondingElement = this.domElements[this.popupDiv.index];\n const rect = correspondingElement.getBoundingClientRect();\n this.popupDiv.html.style.left = rect.left + \"px\";\n this.popupDiv.html.style.top = rect.top - 30 + \"px\"; // 30 is the height;\n document.body.appendChild(this.popupDiv.html);\n this.popupDiv.hideTimeout = setTimeout(() => {\n this.popupDiv.html.style.opacity = 0;\n }, 1500);\n this.popupDiv.deleteTimeout = setTimeout(() => {\n this._removePopup();\n }, 1800);\n }\n }\n\n /**\n * make a checkbox for boolean options.\n *\n * @param {number} defaultValue\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _makeCheckbox(defaultValue, value, path) {\n const checkbox = document.createElement(\"input\");\n checkbox.type = \"checkbox\";\n checkbox.className = \"vis-configuration vis-config-checkbox\";\n checkbox.checked = defaultValue;\n if (value !== undefined) {\n checkbox.checked = value;\n if (value !== defaultValue) {\n if (typeof defaultValue === \"object\") {\n if (value !== defaultValue.enabled) {\n this.changedOptions.push({ path: path, value: value });\n }\n } else {\n this.changedOptions.push({ path: path, value: value });\n }\n }\n }\n\n const me = this;\n checkbox.onchange = function () {\n me._update(this.checked, path);\n };\n\n const label = this._makeLabel(path[path.length - 1], path);\n this._makeItem(path, label, checkbox);\n }\n\n /**\n * make a text input field for string options.\n *\n * @param {number} defaultValue\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _makeTextInput(defaultValue, value, path) {\n const checkbox = document.createElement(\"input\");\n checkbox.type = \"text\";\n checkbox.className = \"vis-configuration vis-config-text\";\n checkbox.value = value;\n if (value !== defaultValue) {\n this.changedOptions.push({ path: path, value: value });\n }\n\n const me = this;\n checkbox.onchange = function () {\n me._update(this.value, path);\n };\n\n const label = this._makeLabel(path[path.length - 1], path);\n this._makeItem(path, label, checkbox);\n }\n\n /**\n * make a color field with a color picker for color fields\n *\n * @param {Array.} arr\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _makeColorField(arr, value, path) {\n const defaultColor = arr[1];\n const div = document.createElement(\"div\");\n value = value === undefined ? defaultColor : value;\n\n if (value !== \"none\") {\n div.className = \"vis-configuration vis-config-colorBlock\";\n div.style.backgroundColor = value;\n } else {\n div.className = \"vis-configuration vis-config-colorBlock none\";\n }\n\n value = value === undefined ? defaultColor : value;\n div.onclick = () => {\n this._showColorPicker(value, div, path);\n };\n\n const label = this._makeLabel(path[path.length - 1], path);\n this._makeItem(path, label, div);\n }\n\n /**\n * used by the color buttons to call the color picker.\n *\n * @param {number} value\n * @param {HTMLElement} div\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _showColorPicker(value, div, path) {\n // clear the callback from this div\n div.onclick = function () {};\n\n this.colorPicker.insertTo(div);\n this.colorPicker.show();\n\n this.colorPicker.setColor(value);\n this.colorPicker.setUpdateCallback((color) => {\n const colorString =\n \"rgba(\" + color.r + \",\" + color.g + \",\" + color.b + \",\" + color.a + \")\";\n div.style.backgroundColor = colorString;\n this._update(colorString, path);\n });\n\n // on close of the colorpicker, restore the callback.\n this.colorPicker.setCloseCallback(() => {\n div.onclick = () => {\n this._showColorPicker(value, div, path);\n };\n });\n }\n\n /**\n * parse an object and draw the correct items\n *\n * @param {object} obj\n * @param {Array} [path=[]] | where to look for the actual option\n * @param {boolean} [checkOnly=false]\n * @returns {boolean}\n * @private\n */\n _handleObject(obj, path = [], checkOnly = false) {\n let show = false;\n const filter = this.options.filter;\n let visibleInSet = false;\n for (const subObj in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, subObj)) {\n show = true;\n const item = obj[subObj];\n const newPath = copyAndExtendArray(path, subObj);\n if (typeof filter === \"function\") {\n show = filter(subObj, path);\n\n // if needed we must go deeper into the object.\n if (show === false) {\n if (\n !Array.isArray(item) &&\n typeof item !== \"string\" &&\n typeof item !== \"boolean\" &&\n item instanceof Object\n ) {\n this.allowCreation = false;\n show = this._handleObject(item, newPath, true);\n this.allowCreation = checkOnly === false;\n }\n }\n }\n\n if (show !== false) {\n visibleInSet = true;\n const value = this._getValue(newPath);\n\n if (Array.isArray(item)) {\n this._handleArray(item, value, newPath);\n } else if (typeof item === \"string\") {\n this._makeTextInput(item, value, newPath);\n } else if (typeof item === \"boolean\") {\n this._makeCheckbox(item, value, newPath);\n } else if (item instanceof Object) {\n // skip the options that are not enabled\n if (!this.hideOption(path, subObj, this.moduleOptions)) {\n // initially collapse options with an disabled enabled option.\n if (item.enabled !== undefined) {\n const enabledPath = copyAndExtendArray(newPath, \"enabled\");\n const enabledValue = this._getValue(enabledPath);\n if (enabledValue === true) {\n const label = this._makeLabel(subObj, newPath, true);\n this._makeItem(newPath, label);\n visibleInSet =\n this._handleObject(item, newPath) || visibleInSet;\n } else {\n this._makeCheckbox(item, enabledValue, newPath);\n }\n } else {\n const label = this._makeLabel(subObj, newPath, true);\n this._makeItem(newPath, label);\n visibleInSet =\n this._handleObject(item, newPath) || visibleInSet;\n }\n }\n } else {\n console.error(\"dont know how to handle\", item, subObj, newPath);\n }\n }\n }\n }\n return visibleInSet;\n }\n\n /**\n * handle the array type of option\n *\n * @param {Array.} arr\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _handleArray(arr, value, path) {\n if (typeof arr[0] === \"string\" && arr[0] === \"color\") {\n this._makeColorField(arr, value, path);\n if (arr[1] !== value) {\n this.changedOptions.push({ path: path, value: value });\n }\n } else if (typeof arr[0] === \"string\") {\n this._makeDropdown(arr, value, path);\n if (arr[0] !== value) {\n this.changedOptions.push({ path: path, value: value });\n }\n } else if (typeof arr[0] === \"number\") {\n this._makeRange(arr, value, path);\n if (arr[0] !== value) {\n this.changedOptions.push({ path: path, value: Number(value) });\n }\n }\n }\n\n /**\n * called to update the network with the new settings.\n *\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _update(value, path) {\n const options = this._constructOptions(value, path);\n\n if (\n this.parent.body &&\n this.parent.body.emitter &&\n this.parent.body.emitter.emit\n ) {\n this.parent.body.emitter.emit(\"configChange\", options);\n }\n this.initialized = true;\n this.parent.setOptions(options);\n }\n\n /**\n *\n * @param {string | boolean} value\n * @param {Array.} path\n * @param {{}} optionsObj\n * @returns {{}}\n * @private\n */\n _constructOptions(value, path, optionsObj = {}) {\n let pointer = optionsObj;\n\n // when dropdown boxes can be string or boolean, we typecast it into correct types\n value = value === \"true\" ? true : value;\n value = value === \"false\" ? false : value;\n\n for (let i = 0; i < path.length; i++) {\n if (path[i] !== \"global\") {\n if (pointer[path[i]] === undefined) {\n pointer[path[i]] = {};\n }\n if (i !== path.length - 1) {\n pointer = pointer[path[i]];\n } else {\n pointer[path[i]] = value;\n }\n }\n }\n return optionsObj;\n }\n\n /**\n * @private\n */\n _printOptions() {\n const options = this.getOptions();\n\n while (this.optionsContainer.firstChild) {\n this.optionsContainer.removeChild(this.optionsContainer.firstChild);\n }\n this.optionsContainer.appendChild(\n wrapInTag(\"pre\", \"const options = \" + JSON.stringify(options, null, 2))\n );\n }\n\n /**\n *\n * @returns {{}} options\n */\n getOptions() {\n const options = {};\n for (let i = 0; i < this.changedOptions.length; i++) {\n this._constructOptions(\n this.changedOptions[i].value,\n this.changedOptions[i].path,\n options\n );\n }\n return options;\n }\n};\n\n/**\n * Popup is a class to create a popup window with some text\n */\nlet Popup$1 = class Popup {\n /**\n * @param {Element} container The container object.\n * @param {string} overflowMethod How the popup should act to overflowing ('flip' or 'cap')\n */\n constructor(container, overflowMethod) {\n this.container = container;\n this.overflowMethod = overflowMethod || \"cap\";\n\n this.x = 0;\n this.y = 0;\n this.padding = 5;\n this.hidden = false;\n\n // create the frame\n this.frame = document.createElement(\"div\");\n this.frame.className = \"vis-tooltip\";\n this.container.appendChild(this.frame);\n }\n\n /**\n * @param {number} x Horizontal position of the popup window\n * @param {number} y Vertical position of the popup window\n */\n setPosition(x, y) {\n this.x = parseInt(x);\n this.y = parseInt(y);\n }\n\n /**\n * Set the content for the popup window. This can be HTML code or text.\n *\n * @param {string | Element} content\n */\n setText(content) {\n if (content instanceof Element) {\n while (this.frame.firstChild) {\n this.frame.removeChild(this.frame.firstChild);\n }\n this.frame.appendChild(content);\n } else {\n // String containing literal text, element has to be used for HTML due to\n // XSS risks associated with innerHTML (i.e. prevent XSS by accident).\n this.frame.innerText = content;\n }\n }\n\n /**\n * Show the popup window\n *\n * @param {boolean} [doShow] Show or hide the window\n */\n show(doShow) {\n if (doShow === undefined) {\n doShow = true;\n }\n\n if (doShow === true) {\n const height = this.frame.clientHeight;\n const width = this.frame.clientWidth;\n const maxHeight = this.frame.parentNode.clientHeight;\n const maxWidth = this.frame.parentNode.clientWidth;\n\n let left = 0,\n top = 0;\n\n if (this.overflowMethod == \"flip\") {\n let isLeft = false,\n isTop = true; // Where around the position it's located\n\n if (this.y - height < this.padding) {\n isTop = false;\n }\n\n if (this.x + width > maxWidth - this.padding) {\n isLeft = true;\n }\n\n if (isLeft) {\n left = this.x - width;\n } else {\n left = this.x;\n }\n\n if (isTop) {\n top = this.y - height;\n } else {\n top = this.y;\n }\n } else {\n top = this.y - height;\n if (top + height + this.padding > maxHeight) {\n top = maxHeight - height - this.padding;\n }\n if (top < this.padding) {\n top = this.padding;\n }\n\n left = this.x;\n if (left + width + this.padding > maxWidth) {\n left = maxWidth - width - this.padding;\n }\n if (left < this.padding) {\n left = this.padding;\n }\n }\n\n this.frame.style.left = left + \"px\";\n this.frame.style.top = top + \"px\";\n this.frame.style.visibility = \"visible\";\n this.hidden = false;\n } else {\n this.hide();\n }\n }\n\n /**\n * Hide the popup window\n */\n hide() {\n this.hidden = true;\n this.frame.style.left = \"0\";\n this.frame.style.top = \"0\";\n this.frame.style.visibility = \"hidden\";\n }\n\n /**\n * Remove the popup window\n */\n destroy() {\n this.frame.parentNode.removeChild(this.frame); // Remove element from DOM\n }\n};\n\nlet errorFound = false;\nlet allOptions;\n\nconst VALIDATOR_PRINT_STYLE$1 = \"background: #FFeeee; color: #dd0000\";\n\n/**\n * Used to validate options.\n */\nlet Validator$1 = class Validator {\n /**\n * Main function to be called\n *\n * @param {object} options\n * @param {object} referenceOptions\n * @param {object} subObject\n * @returns {boolean}\n * @static\n */\n static validate(options, referenceOptions, subObject) {\n errorFound = false;\n allOptions = referenceOptions;\n let usedOptions = referenceOptions;\n if (subObject !== undefined) {\n usedOptions = referenceOptions[subObject];\n }\n Validator.parse(options, usedOptions, []);\n return errorFound;\n }\n\n /**\n * Will traverse an object recursively and check every value\n *\n * @param {object} options\n * @param {object} referenceOptions\n * @param {Array} path | where to look for the actual option\n * @static\n */\n static parse(options, referenceOptions, path) {\n for (const option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option)) {\n Validator.check(option, options, referenceOptions, path);\n }\n }\n }\n\n /**\n * Check every value. If the value is an object, call the parse function on that object.\n *\n * @param {string} option\n * @param {object} options\n * @param {object} referenceOptions\n * @param {Array} path | where to look for the actual option\n * @static\n */\n static check(option, options, referenceOptions, path) {\n if (\n referenceOptions[option] === undefined &&\n referenceOptions.__any__ === undefined\n ) {\n Validator.getSuggestion(option, referenceOptions, path);\n return;\n }\n\n let referenceOption = option;\n let is_object = true;\n\n if (\n referenceOptions[option] === undefined &&\n referenceOptions.__any__ !== undefined\n ) {\n // NOTE: This only triggers if the __any__ is in the top level of the options object.\n // THAT'S A REALLY BAD PLACE TO ALLOW IT!!!!\n // TODO: Examine if needed, remove if possible\n\n // __any__ is a wildcard. Any value is accepted and will be further analysed by reference.\n referenceOption = \"__any__\";\n\n // if the any-subgroup is not a predefined object in the configurator,\n // we do not look deeper into the object.\n is_object = Validator.getType(options[option]) === \"object\";\n }\n\n let refOptionObj = referenceOptions[referenceOption];\n if (is_object && refOptionObj.__type__ !== undefined) {\n refOptionObj = refOptionObj.__type__;\n }\n\n Validator.checkFields(\n option,\n options,\n referenceOptions,\n referenceOption,\n refOptionObj,\n path\n );\n }\n\n /**\n *\n * @param {string} option | the option property\n * @param {object} options | The supplied options object\n * @param {object} referenceOptions | The reference options containing all options and their allowed formats\n * @param {string} referenceOption | Usually this is the same as option, except when handling an __any__ tag.\n * @param {string} refOptionObj | This is the type object from the reference options\n * @param {Array} path | where in the object is the option\n * @static\n */\n static checkFields(\n option,\n options,\n referenceOptions,\n referenceOption,\n refOptionObj,\n path\n ) {\n const log = function (message) {\n console.error(\n \"%c\" + message + Validator.printLocation(path, option),\n VALIDATOR_PRINT_STYLE$1\n );\n };\n\n const optionType = Validator.getType(options[option]);\n const refOptionType = refOptionObj[optionType];\n\n if (refOptionType !== undefined) {\n // if the type is correct, we check if it is supposed to be one of a few select values\n if (\n Validator.getType(refOptionType) === \"array\" &&\n refOptionType.indexOf(options[option]) === -1\n ) {\n log(\n 'Invalid option detected in \"' +\n option +\n '\".' +\n \" Allowed values are:\" +\n Validator.print(refOptionType) +\n ' not \"' +\n options[option] +\n '\". '\n );\n errorFound = true;\n } else if (optionType === \"object\" && referenceOption !== \"__any__\") {\n path = copyAndExtendArray(path, option);\n Validator.parse(\n options[option],\n referenceOptions[referenceOption],\n path\n );\n }\n } else if (refOptionObj[\"any\"] === undefined) {\n // type of the field is incorrect and the field cannot be any\n log(\n 'Invalid type received for \"' +\n option +\n '\". Expected: ' +\n Validator.print(Object.keys(refOptionObj)) +\n \". Received [\" +\n optionType +\n '] \"' +\n options[option] +\n '\"'\n );\n errorFound = true;\n }\n }\n\n /**\n *\n * @param {object | boolean | number | string | Array. | Date | Node | Moment | undefined | null} object\n * @returns {string}\n * @static\n */\n static getType(object) {\n const type = typeof object;\n\n if (type === \"object\") {\n if (object === null) {\n return \"null\";\n }\n if (object instanceof Boolean) {\n return \"boolean\";\n }\n if (object instanceof Number) {\n return \"number\";\n }\n if (object instanceof String) {\n return \"string\";\n }\n if (Array.isArray(object)) {\n return \"array\";\n }\n if (object instanceof Date) {\n return \"date\";\n }\n if (object.nodeType !== undefined) {\n return \"dom\";\n }\n if (object._isAMomentObject === true) {\n return \"moment\";\n }\n return \"object\";\n } else if (type === \"number\") {\n return \"number\";\n } else if (type === \"boolean\") {\n return \"boolean\";\n } else if (type === \"string\") {\n return \"string\";\n } else if (type === undefined) {\n return \"undefined\";\n }\n return type;\n }\n\n /**\n * @param {string} option\n * @param {object} options\n * @param {Array.} path\n * @static\n */\n static getSuggestion(option, options, path) {\n const localSearch = Validator.findInOptions(option, options, path, false);\n const globalSearch = Validator.findInOptions(option, allOptions, [], true);\n\n const localSearchThreshold = 8;\n const globalSearchThreshold = 4;\n\n let msg;\n if (localSearch.indexMatch !== undefined) {\n msg =\n \" in \" +\n Validator.printLocation(localSearch.path, option, \"\") +\n 'Perhaps it was incomplete? Did you mean: \"' +\n localSearch.indexMatch +\n '\"?\\n\\n';\n } else if (\n globalSearch.distance <= globalSearchThreshold &&\n localSearch.distance > globalSearch.distance\n ) {\n msg =\n \" in \" +\n Validator.printLocation(localSearch.path, option, \"\") +\n \"Perhaps it was misplaced? Matching option found at: \" +\n Validator.printLocation(\n globalSearch.path,\n globalSearch.closestMatch,\n \"\"\n );\n } else if (localSearch.distance <= localSearchThreshold) {\n msg =\n '. Did you mean \"' +\n localSearch.closestMatch +\n '\"?' +\n Validator.printLocation(localSearch.path, option);\n } else {\n msg =\n \". Did you mean one of these: \" +\n Validator.print(Object.keys(options)) +\n Validator.printLocation(path, option);\n }\n\n console.error(\n '%cUnknown option detected: \"' + option + '\"' + msg,\n VALIDATOR_PRINT_STYLE$1\n );\n errorFound = true;\n }\n\n /**\n * traverse the options in search for a match.\n *\n * @param {string} option\n * @param {object} options\n * @param {Array} path | where to look for the actual option\n * @param {boolean} [recursive=false]\n * @returns {{closestMatch: string, path: Array, distance: number}}\n * @static\n */\n static findInOptions(option, options, path, recursive = false) {\n let min = 1e9;\n let closestMatch = \"\";\n let closestMatchPath = [];\n const lowerCaseOption = option.toLowerCase();\n let indexMatch = undefined;\n for (const op in options) {\n let distance;\n if (options[op].__type__ !== undefined && recursive === true) {\n const result = Validator.findInOptions(\n option,\n options[op],\n copyAndExtendArray(path, op)\n );\n if (min > result.distance) {\n closestMatch = result.closestMatch;\n closestMatchPath = result.path;\n min = result.distance;\n indexMatch = result.indexMatch;\n }\n } else {\n if (op.toLowerCase().indexOf(lowerCaseOption) !== -1) {\n indexMatch = op;\n }\n distance = Validator.levenshteinDistance(option, op);\n if (min > distance) {\n closestMatch = op;\n closestMatchPath = copyArray(path);\n min = distance;\n }\n }\n }\n return {\n closestMatch: closestMatch,\n path: closestMatchPath,\n distance: min,\n indexMatch: indexMatch,\n };\n }\n\n /**\n * @param {Array.} path\n * @param {object} option\n * @param {string} prefix\n * @returns {string}\n * @static\n */\n static printLocation(path, option, prefix = \"Problem value found at: \\n\") {\n let str = \"\\n\\n\" + prefix + \"options = {\\n\";\n for (let i = 0; i < path.length; i++) {\n for (let j = 0; j < i + 1; j++) {\n str += \" \";\n }\n str += path[i] + \": {\\n\";\n }\n for (let j = 0; j < path.length + 1; j++) {\n str += \" \";\n }\n str += option + \"\\n\";\n for (let i = 0; i < path.length + 1; i++) {\n for (let j = 0; j < path.length - i; j++) {\n str += \" \";\n }\n str += \"}\\n\";\n }\n return str + \"\\n\\n\";\n }\n\n /**\n * @param {object} options\n * @returns {string}\n * @static\n */\n static print(options) {\n return JSON.stringify(options)\n .replace(/(\")|(\\[)|(\\])|(,\"__type__\")/g, \"\")\n .replace(/(,)/g, \", \");\n }\n\n /**\n * Compute the edit distance between the two given strings\n * http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#JavaScript\n *\n * Copyright (c) 2011 Andrei Mackenzie\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @param {string} a\n * @param {string} b\n * @returns {Array.>}}\n * @static\n */\n static levenshteinDistance(a, b) {\n if (a.length === 0) return b.length;\n if (b.length === 0) return a.length;\n\n const matrix = [];\n\n // increment along the first column of each row\n let i;\n for (i = 0; i <= b.length; i++) {\n matrix[i] = [i];\n }\n\n // increment each column in the first row\n let j;\n for (j = 0; j <= a.length; j++) {\n matrix[0][j] = j;\n }\n\n // Fill in the rest of the matrix\n for (i = 1; i <= b.length; i++) {\n for (j = 1; j <= a.length; j++) {\n if (b.charAt(i - 1) == a.charAt(j - 1)) {\n matrix[i][j] = matrix[i - 1][j - 1];\n } else {\n matrix[i][j] = Math.min(\n matrix[i - 1][j - 1] + 1, // substitution\n Math.min(\n matrix[i][j - 1] + 1, // insertion\n matrix[i - 1][j] + 1\n )\n ); // deletion\n }\n }\n }\n\n return matrix[b.length][a.length];\n }\n};\n\nconst Activator = Activator$1;\r\nconst ColorPicker = ColorPicker$1;\r\nconst Configurator = Configurator$1;\r\nconst Hammer = Hammer$1;\r\nconst Popup = Popup$1;\r\nconst VALIDATOR_PRINT_STYLE = VALIDATOR_PRINT_STYLE$1;\r\nconst Validator = Validator$1;\n\nexport { Activator, Alea, ColorPicker, Configurator, DELETE, HSVToHex, HSVToRGB, Hammer, Popup, RGBToHSV, RGBToHex, VALIDATOR_PRINT_STYLE, Validator, addClassName, addCssText, binarySearchCustom, binarySearchValue, bridgeObject, copyAndExtendArray, copyArray, deepExtend, deepObjectAssign, easingFunctions, equalArray, extend, fillIfDefined, forEach, getAbsoluteLeft, getAbsoluteRight, getAbsoluteTop, getScrollBarWidth, getTarget, getType, hasParent, hexToHSV, hexToRGB, insertSort, isDate, isNumber, isObject, isString, isValidHex, isValidRGB, isValidRGBA, mergeOptions, option, overrideOpacity, parseColor, preventDefault, pureDeepObjectAssign, recursiveDOMDelete, removeClassName, removeCssText, selectiveBridgeObject, selectiveDeepExtend, selectiveExtend, selectiveNotDeepExtend, throttle, toArray, topMost, updateProperty };\n//# sourceMappingURL=vis-util.js.map\n","/* eslint-disable no-prototype-builtins */\n/* eslint-disable no-unused-vars */\n/* eslint-disable no-var */\n\n/**\n * Parse a text source containing data in DOT language into a JSON object.\n * The object contains two lists: one with nodes and one with edges.\n *\n * DOT language reference: http://www.graphviz.org/doc/info/lang.html\n *\n * DOT language attributes: http://graphviz.org/content/attrs\n * @param {string} data Text containing a graph in DOT-notation\n * @returns {object} graph An object containing two parameters:\n * {Object[]} nodes\n * {Object[]} edges\n *\n * -------------------------------------------\n * TODO\n * ====\n *\n * For label handling, this is an incomplete implementation. From docs (quote #3015):\n *\n * > the escape sequences \"\\n\", \"\\l\" and \"\\r\" divide the label into lines, centered,\n * > left-justified, and right-justified, respectively.\n *\n * Source: http://www.graphviz.org/content/attrs#kescString\n *\n * > As another aid for readability, dot allows double-quoted strings to span multiple physical\n * > lines using the standard C convention of a backslash immediately preceding a newline\n * > character\n * > In addition, double-quoted strings can be concatenated using a '+' operator.\n * > As HTML strings can contain newline characters, which are used solely for formatting,\n * > the language does not allow escaped newlines or concatenation operators to be used\n * > within them.\n *\n * - Currently, only '\\\\n' is handled\n * - Note that text explicitly says 'labels'; the dot parser currently handles escape\n * sequences in **all** strings.\n */\nexport function parseDOT(data) {\n dot = data;\n return parseGraph();\n}\n\n// mapping of attributes from DOT (the keys) to vis.js (the values)\nvar NODE_ATTR_MAPPING = {\n fontsize: \"font.size\",\n fontcolor: \"font.color\",\n labelfontcolor: \"font.color\",\n fontname: \"font.face\",\n color: [\"color.border\", \"color.background\"],\n fillcolor: \"color.background\",\n tooltip: \"title\",\n labeltooltip: \"title\",\n};\nvar EDGE_ATTR_MAPPING = Object.create(NODE_ATTR_MAPPING);\nEDGE_ATTR_MAPPING.color = \"color.color\";\nEDGE_ATTR_MAPPING.style = \"dashes\";\n\n// token types enumeration\nvar TOKENTYPE = {\n NULL: 0,\n DELIMITER: 1,\n IDENTIFIER: 2,\n UNKNOWN: 3,\n};\n\n// map with all delimiters\nvar DELIMITERS = {\n \"{\": true,\n \"}\": true,\n \"[\": true,\n \"]\": true,\n \";\": true,\n \"=\": true,\n \",\": true,\n\n \"->\": true,\n \"--\": true,\n};\n\nvar dot = \"\"; // current dot file\nvar index = 0; // current index in dot file\nvar c = \"\"; // current token character in expr\nvar token = \"\"; // current token\nvar tokenType = TOKENTYPE.NULL; // type of the token\n\n/**\n * Get the first character from the dot file.\n * The character is stored into the char c. If the end of the dot file is\n * reached, the function puts an empty string in c.\n */\nfunction first() {\n index = 0;\n c = dot.charAt(0);\n}\n\n/**\n * Get the next character from the dot file.\n * The character is stored into the char c. If the end of the dot file is\n * reached, the function puts an empty string in c.\n */\nfunction next() {\n index++;\n c = dot.charAt(index);\n}\n\n/**\n * Preview the next character from the dot file.\n * @returns {string} cNext\n */\nfunction nextPreview() {\n return dot.charAt(index + 1);\n}\n\n/**\n * Test whether given character is alphabetic or numeric ( a-zA-Z_0-9.:# )\n * @param {string} c\n * @returns {boolean} isAlphaNumeric\n */\nfunction isAlphaNumeric(c) {\n var charCode = c.charCodeAt(0);\n\n if (charCode < 47) {\n // #.\n return charCode === 35 || charCode === 46;\n }\n if (charCode < 59) {\n // 0-9 and :\n return charCode > 47;\n }\n if (charCode < 91) {\n // A-Z\n return charCode > 64;\n }\n if (charCode < 96) {\n // _\n return charCode === 95;\n }\n if (charCode < 123) {\n // a-z\n return charCode > 96;\n }\n\n return false;\n}\n\n/**\n * Merge all options of object b into object b\n * @param {object} a\n * @param {object} b\n * @returns {object} a\n */\nfunction merge(a, b) {\n if (!a) {\n a = {};\n }\n\n if (b) {\n for (var name in b) {\n if (b.hasOwnProperty(name)) {\n a[name] = b[name];\n }\n }\n }\n return a;\n}\n\n/**\n * Set a value in an object, where the provided parameter name can be a\n * path with nested parameters. For example:\n *\n * var obj = {a: 2};\n * setValue(obj, 'b.c', 3); // obj = {a: 2, b: {c: 3}}\n * @param {object} obj\n * @param {string} path A parameter name or dot-separated parameter path,\n * like \"color.highlight.border\".\n * @param {*} value\n */\nfunction setValue(obj, path, value) {\n var keys = path.split(\".\");\n var o = obj;\n while (keys.length) {\n var key = keys.shift();\n if (keys.length) {\n // this isn't the end point\n if (!o[key]) {\n o[key] = {};\n }\n o = o[key];\n } else {\n // this is the end point\n o[key] = value;\n }\n }\n}\n\n/**\n * Add a node to a graph object. If there is already a node with\n * the same id, their attributes will be merged.\n * @param {object} graph\n * @param {object} node\n */\nfunction addNode(graph, node) {\n var i, len;\n var current = null;\n\n // find root graph (in case of subgraph)\n var graphs = [graph]; // list with all graphs from current graph to root graph\n var root = graph;\n while (root.parent) {\n graphs.push(root.parent);\n root = root.parent;\n }\n\n // find existing node (at root level) by its id\n if (root.nodes) {\n for (i = 0, len = root.nodes.length; i < len; i++) {\n if (node.id === root.nodes[i].id) {\n current = root.nodes[i];\n break;\n }\n }\n }\n\n if (!current) {\n // this is a new node\n current = {\n id: node.id,\n };\n if (graph.node) {\n // clone default attributes\n current.attr = merge(current.attr, graph.node);\n }\n }\n\n // add node to this (sub)graph and all its parent graphs\n for (i = graphs.length - 1; i >= 0; i--) {\n var g = graphs[i];\n\n if (!g.nodes) {\n g.nodes = [];\n }\n if (g.nodes.indexOf(current) === -1) {\n g.nodes.push(current);\n }\n }\n\n // merge attributes\n if (node.attr) {\n current.attr = merge(current.attr, node.attr);\n }\n}\n\n/**\n * Add an edge to a graph object\n * @param {object} graph\n * @param {object} edge\n */\nfunction addEdge(graph, edge) {\n if (!graph.edges) {\n graph.edges = [];\n }\n graph.edges.push(edge);\n if (graph.edge) {\n var attr = merge({}, graph.edge); // clone default attributes\n edge.attr = merge(attr, edge.attr); // merge attributes\n }\n}\n\n/**\n * Create an edge to a graph object\n * @param {object} graph\n * @param {string | number | object} from\n * @param {string | number | object} to\n * @param {string} type\n * @param {object | null} attr\n * @returns {object} edge\n */\nfunction createEdge(graph, from, to, type, attr) {\n var edge = {\n from: from,\n to: to,\n type: type,\n };\n\n if (graph.edge) {\n edge.attr = merge({}, graph.edge); // clone default attributes\n }\n edge.attr = merge(edge.attr || {}, attr); // merge attributes\n\n // Move arrows attribute from attr to edge temporally created in\n // parseAttributeList().\n if (attr != null) {\n if (attr.hasOwnProperty(\"arrows\") && attr[\"arrows\"] != null) {\n edge[\"arrows\"] = { to: { enabled: true, type: attr.arrows.type } };\n attr[\"arrows\"] = null;\n }\n }\n return edge;\n}\n\n/**\n * Get next token in the current dot file.\n * The token and token type are available as token and tokenType\n */\nfunction getToken() {\n tokenType = TOKENTYPE.NULL;\n token = \"\";\n\n // skip over whitespaces\n while (c === \" \" || c === \"\\t\" || c === \"\\n\" || c === \"\\r\") {\n // space, tab, enter\n next();\n }\n\n do {\n var isComment = false;\n\n // skip comment\n if (c === \"#\") {\n // find the previous non-space character\n var i = index - 1;\n while (dot.charAt(i) === \" \" || dot.charAt(i) === \"\\t\") {\n i--;\n }\n if (dot.charAt(i) === \"\\n\" || dot.charAt(i) === \"\") {\n // the # is at the start of a line, this is indeed a line comment\n while (c != \"\" && c != \"\\n\") {\n next();\n }\n isComment = true;\n }\n }\n if (c === \"/\" && nextPreview() === \"/\") {\n // skip line comment\n while (c != \"\" && c != \"\\n\") {\n next();\n }\n isComment = true;\n }\n if (c === \"/\" && nextPreview() === \"*\") {\n // skip block comment\n while (c != \"\") {\n if (c === \"*\" && nextPreview() === \"/\") {\n // end of block comment found. skip these last two characters\n next();\n next();\n break;\n } else {\n next();\n }\n }\n isComment = true;\n }\n\n // skip over whitespaces\n while (c === \" \" || c === \"\\t\" || c === \"\\n\" || c === \"\\r\") {\n // space, tab, enter\n next();\n }\n } while (isComment);\n\n // check for end of dot file\n if (c === \"\") {\n // token is still empty\n tokenType = TOKENTYPE.DELIMITER;\n return;\n }\n\n // check for delimiters consisting of 2 characters\n var c2 = c + nextPreview();\n if (DELIMITERS[c2]) {\n tokenType = TOKENTYPE.DELIMITER;\n token = c2;\n next();\n next();\n return;\n }\n\n // check for delimiters consisting of 1 character\n if (DELIMITERS[c]) {\n tokenType = TOKENTYPE.DELIMITER;\n token = c;\n next();\n return;\n }\n\n // check for an identifier (number or string)\n // TODO: more precise parsing of numbers/strings (and the port separator ':')\n if (isAlphaNumeric(c) || c === \"-\") {\n token += c;\n next();\n\n while (isAlphaNumeric(c)) {\n token += c;\n next();\n }\n if (token === \"false\") {\n token = false; // convert to boolean\n } else if (token === \"true\") {\n token = true; // convert to boolean\n } else if (!isNaN(Number(token))) {\n token = Number(token); // convert to number\n }\n tokenType = TOKENTYPE.IDENTIFIER;\n return;\n }\n\n // check for a string enclosed by double quotes\n if (c === '\"') {\n next();\n while (c != \"\" && (c != '\"' || (c === '\"' && nextPreview() === '\"'))) {\n if (c === '\"') {\n // skip the escape character\n token += c;\n next();\n } else if (c === \"\\\\\" && nextPreview() === \"n\") {\n // Honor a newline escape sequence\n token += \"\\n\";\n next();\n } else {\n token += c;\n }\n next();\n }\n if (c != '\"') {\n throw newSyntaxError('End of string \" expected');\n }\n next();\n tokenType = TOKENTYPE.IDENTIFIER;\n return;\n }\n\n // something unknown is found, wrong characters, a syntax error\n tokenType = TOKENTYPE.UNKNOWN;\n while (c != \"\") {\n token += c;\n next();\n }\n throw new SyntaxError('Syntax error in part \"' + chop(token, 30) + '\"');\n}\n\n/**\n * Parse a graph.\n * @returns {object} graph\n */\nfunction parseGraph() {\n var graph = {};\n\n first();\n getToken();\n\n // optional strict keyword\n if (token === \"strict\") {\n graph.strict = true;\n getToken();\n }\n\n // graph or digraph keyword\n if (token === \"graph\" || token === \"digraph\") {\n graph.type = token;\n getToken();\n }\n\n // optional graph id\n if (tokenType === TOKENTYPE.IDENTIFIER) {\n graph.id = token;\n getToken();\n }\n\n // open angle bracket\n if (token != \"{\") {\n throw newSyntaxError(\"Angle bracket { expected\");\n }\n getToken();\n\n // statements\n parseStatements(graph);\n\n // close angle bracket\n if (token != \"}\") {\n throw newSyntaxError(\"Angle bracket } expected\");\n }\n getToken();\n\n // end of file\n if (token !== \"\") {\n throw newSyntaxError(\"End of file expected\");\n }\n getToken();\n\n // remove temporary default options\n delete graph.node;\n delete graph.edge;\n delete graph.graph;\n\n return graph;\n}\n\n/**\n * Parse a list with statements.\n * @param {object} graph\n */\nfunction parseStatements(graph) {\n while (token !== \"\" && token != \"}\") {\n parseStatement(graph);\n if (token === \";\") {\n getToken();\n }\n }\n}\n\n/**\n * Parse a single statement. Can be a an attribute statement, node\n * statement, a series of node statements and edge statements, or a\n * parameter.\n * @param {object} graph\n */\nfunction parseStatement(graph) {\n // parse subgraph\n var subgraph = parseSubgraph(graph);\n if (subgraph) {\n // edge statements\n parseEdge(graph, subgraph);\n\n return;\n }\n\n // parse an attribute statement\n var attr = parseAttributeStatement(graph);\n if (attr) {\n return;\n }\n\n // parse node\n if (tokenType != TOKENTYPE.IDENTIFIER) {\n throw newSyntaxError(\"Identifier expected\");\n }\n var id = token; // id can be a string or a number\n getToken();\n\n if (token === \"=\") {\n // id statement\n getToken();\n if (tokenType != TOKENTYPE.IDENTIFIER) {\n throw newSyntaxError(\"Identifier expected\");\n }\n graph[id] = token;\n getToken();\n // TODO: implement comma separated list with \"a_list: ID=ID [','] [a_list] \"\n } else {\n parseNodeStatement(graph, id);\n }\n}\n\n/**\n * Parse a subgraph\n * @param {object} graph parent graph object\n * @returns {object | null} subgraph\n */\nfunction parseSubgraph(graph) {\n var subgraph = null;\n\n // optional subgraph keyword\n if (token === \"subgraph\") {\n subgraph = {};\n subgraph.type = \"subgraph\";\n getToken();\n\n // optional graph id\n if (tokenType === TOKENTYPE.IDENTIFIER) {\n subgraph.id = token;\n getToken();\n }\n }\n\n // open angle bracket\n if (token === \"{\") {\n getToken();\n\n if (!subgraph) {\n subgraph = {};\n }\n subgraph.parent = graph;\n subgraph.node = graph.node;\n subgraph.edge = graph.edge;\n subgraph.graph = graph.graph;\n\n // statements\n parseStatements(subgraph);\n\n // close angle bracket\n if (token != \"}\") {\n throw newSyntaxError(\"Angle bracket } expected\");\n }\n getToken();\n\n // remove temporary default options\n delete subgraph.node;\n delete subgraph.edge;\n delete subgraph.graph;\n delete subgraph.parent;\n\n // register at the parent graph\n if (!graph.subgraphs) {\n graph.subgraphs = [];\n }\n graph.subgraphs.push(subgraph);\n }\n\n return subgraph;\n}\n\n/**\n * parse an attribute statement like \"node [shape=circle fontSize=16]\".\n * Available keywords are 'node', 'edge', 'graph'.\n * The previous list with default attributes will be replaced\n * @param {object} graph\n * @returns {string | null} keyword Returns the name of the parsed attribute\n * (node, edge, graph), or null if nothing\n * is parsed.\n */\nfunction parseAttributeStatement(graph) {\n // attribute statements\n if (token === \"node\") {\n getToken();\n\n // node attributes\n graph.node = parseAttributeList();\n return \"node\";\n } else if (token === \"edge\") {\n getToken();\n\n // edge attributes\n graph.edge = parseAttributeList();\n return \"edge\";\n } else if (token === \"graph\") {\n getToken();\n\n // graph attributes\n graph.graph = parseAttributeList();\n return \"graph\";\n }\n\n return null;\n}\n\n/**\n * parse a node statement\n * @param {object} graph\n * @param {string | number} id\n */\nfunction parseNodeStatement(graph, id) {\n // node statement\n var node = {\n id: id,\n };\n var attr = parseAttributeList();\n if (attr) {\n node.attr = attr;\n }\n addNode(graph, node);\n\n // edge statements\n parseEdge(graph, id);\n}\n\n/**\n * Parse an edge or a series of edges\n * @param {object} graph\n * @param {string | number} from Id of the from node\n */\nfunction parseEdge(graph, from) {\n while (token === \"->\" || token === \"--\") {\n var to;\n var type = token;\n getToken();\n\n var subgraph = parseSubgraph(graph);\n if (subgraph) {\n to = subgraph;\n } else {\n if (tokenType != TOKENTYPE.IDENTIFIER) {\n throw newSyntaxError(\"Identifier or subgraph expected\");\n }\n to = token;\n addNode(graph, {\n id: to,\n });\n getToken();\n }\n\n // parse edge attributes\n var attr = parseAttributeList();\n\n // create edge\n var edge = createEdge(graph, from, to, type, attr);\n addEdge(graph, edge);\n\n from = to;\n }\n}\n\n/**\n * As explained in [1], graphviz has limitations for combination of\n * arrow[head|tail] and dir. If attribute list includes 'dir',\n * following cases just be supported.\n * 1. both or none + arrowhead, arrowtail\n * 2. forward + arrowhead (arrowtail is not affedted)\n * 3. back + arrowtail (arrowhead is not affected)\n * [1] https://www.graphviz.org/doc/info/attrs.html#h:undir_note\n *\n * This function is called from parseAttributeList() to parse 'dir'\n * attribute with given 'attr_names' and 'attr_list'.\n * @param {object} attr_names Array of attribute names\n * @param {object} attr_list Array of objects of attribute set\n * @returns {object} attr_list Updated attr_list\n */\nfunction parseDirAttribute(attr_names, attr_list) {\n var i;\n if (attr_names.includes(\"dir\")) {\n var idx = {}; // get index of 'arrows' and 'dir'\n idx.arrows = {};\n for (i = 0; i < attr_list.length; i++) {\n if (attr_list[i].name === \"arrows\") {\n if (attr_list[i].value.to != null) {\n idx.arrows.to = i;\n } else if (attr_list[i].value.from != null) {\n idx.arrows.from = i;\n } else {\n throw newSyntaxError(\"Invalid value of arrows\");\n }\n } else if (attr_list[i].name === \"dir\") {\n idx.dir = i;\n }\n }\n\n // first, add default arrow shape if it is not assigned to avoid error\n var dir_type = attr_list[idx.dir].value;\n if (!attr_names.includes(\"arrows\")) {\n if (dir_type === \"both\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { to: { enabled: true } },\n });\n idx.arrows.to = attr_list.length - 1;\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { from: { enabled: true } },\n });\n idx.arrows.from = attr_list.length - 1;\n } else if (dir_type === \"forward\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { to: { enabled: true } },\n });\n idx.arrows.to = attr_list.length - 1;\n } else if (dir_type === \"back\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { from: { enabled: true } },\n });\n idx.arrows.from = attr_list.length - 1;\n } else if (dir_type === \"none\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: \"\",\n });\n idx.arrows.to = attr_list.length - 1;\n } else {\n throw newSyntaxError('Invalid dir type \"' + dir_type + '\"');\n }\n }\n\n var from_type;\n var to_type;\n // update 'arrows' attribute from 'dir'.\n if (dir_type === \"both\") {\n // both of shapes of 'from' and 'to' are given\n if (idx.arrows.to && idx.arrows.from) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n attr_list.splice(idx.arrows.from, 1);\n\n // shape of 'to' is assigned and use default to 'from'\n } else if (idx.arrows.to) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = \"arrow\";\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // only shape of 'from' is assigned and use default for 'to'\n } else if (idx.arrows.from) {\n to_type = \"arrow\";\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n }\n } else if (dir_type === \"back\") {\n // given both of shapes, but use only 'from'\n if (idx.arrows.to && idx.arrows.from) {\n to_type = \"\";\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // given shape of 'to', but does not use it\n } else if (idx.arrows.to) {\n to_type = \"\";\n from_type = \"arrow\";\n idx.arrows.from = idx.arrows.to;\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // assign given 'from' shape\n } else if (idx.arrows.from) {\n to_type = \"\";\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n }\n\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n from: {\n enabled: true,\n type: attr_list[idx.arrows.from].value.from.type,\n },\n },\n };\n } else if (dir_type === \"none\") {\n var idx_arrow;\n if (idx.arrows.to) {\n idx_arrow = idx.arrows.to;\n } else {\n idx_arrow = idx.arrows.from;\n }\n\n attr_list[idx_arrow] = {\n attr: attr_list[idx_arrow].attr,\n name: attr_list[idx_arrow].name,\n value: \"\",\n };\n } else if (dir_type === \"forward\") {\n // given both of shapes, but use only 'to'\n if (idx.arrows.to && idx.arrows.from) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = \"\";\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // assign given 'to' shape\n } else if (idx.arrows.to) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = \"\";\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // given shape of 'from', but does not use it\n } else if (idx.arrows.from) {\n to_type = \"arrow\";\n from_type = \"\";\n idx.arrows.to = idx.arrows.from;\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n }\n\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: {\n enabled: true,\n type: attr_list[idx.arrows.to].value.to.type,\n },\n },\n };\n } else {\n throw newSyntaxError('Invalid dir type \"' + dir_type + '\"');\n }\n\n // remove 'dir' attribute no need anymore\n attr_list.splice(idx.dir, 1);\n }\n return attr_list;\n}\n\n/**\n * Parse a set with attributes,\n * for example [label=\"1.000\", shape=solid]\n * @returns {object | null} attr\n */\nfunction parseAttributeList() {\n var i;\n var attr = null;\n\n // edge styles of dot and vis\n var edgeStyles = {\n dashed: true,\n solid: false,\n dotted: [1, 5],\n };\n\n /**\n * Define arrow types.\n * vis currently supports types defined in 'arrowTypes'.\n * Details of arrow shapes are described in\n * http://www.graphviz.org/content/arrow-shapes\n */\n var arrowTypes = {\n dot: \"circle\",\n box: \"box\",\n crow: \"crow\",\n curve: \"curve\",\n icurve: \"inv_curve\",\n normal: \"triangle\",\n inv: \"inv_triangle\",\n diamond: \"diamond\",\n tee: \"bar\",\n vee: \"vee\",\n };\n\n /**\n * 'attr_list' contains attributes for checking if some of them are affected\n * later. For instance, both of 'arrowhead' and 'dir' (edge style defined\n * in DOT) make changes to 'arrows' attribute in vis.\n */\n var attr_list = new Array();\n var attr_names = new Array(); // used for checking the case.\n\n // parse attributes\n while (token === \"[\") {\n getToken();\n attr = {};\n while (token !== \"\" && token != \"]\") {\n if (tokenType != TOKENTYPE.IDENTIFIER) {\n throw newSyntaxError(\"Attribute name expected\");\n }\n var name = token;\n\n getToken();\n if (token != \"=\") {\n throw newSyntaxError(\"Equal sign = expected\");\n }\n getToken();\n\n if (tokenType != TOKENTYPE.IDENTIFIER) {\n throw newSyntaxError(\"Attribute value expected\");\n }\n var value = token;\n\n // convert from dot style to vis\n if (name === \"style\") {\n value = edgeStyles[value];\n }\n\n var arrowType;\n if (name === \"arrowhead\") {\n arrowType = arrowTypes[value];\n name = \"arrows\";\n value = { to: { enabled: true, type: arrowType } };\n }\n\n if (name === \"arrowtail\") {\n arrowType = arrowTypes[value];\n name = \"arrows\";\n value = { from: { enabled: true, type: arrowType } };\n }\n\n attr_list.push({ attr: attr, name: name, value: value });\n attr_names.push(name);\n\n getToken();\n if (token == \",\") {\n getToken();\n }\n }\n\n if (token != \"]\") {\n throw newSyntaxError(\"Bracket ] expected\");\n }\n getToken();\n }\n\n /**\n * As explained in [1], graphviz has limitations for combination of\n * arrow[head|tail] and dir. If attribute list includes 'dir',\n * following cases just be supported.\n * 1. both or none + arrowhead, arrowtail\n * 2. forward + arrowhead (arrowtail is not affedted)\n * 3. back + arrowtail (arrowhead is not affected)\n * [1] https://www.graphviz.org/doc/info/attrs.html#h:undir_note\n */\n if (attr_names.includes(\"dir\")) {\n var idx = {}; // get index of 'arrows' and 'dir'\n idx.arrows = {};\n for (i = 0; i < attr_list.length; i++) {\n if (attr_list[i].name === \"arrows\") {\n if (attr_list[i].value.to != null) {\n idx.arrows.to = i;\n } else if (attr_list[i].value.from != null) {\n idx.arrows.from = i;\n } else {\n throw newSyntaxError(\"Invalid value of arrows\");\n }\n } else if (attr_list[i].name === \"dir\") {\n idx.dir = i;\n }\n }\n\n // first, add default arrow shape if it is not assigned to avoid error\n var dir_type = attr_list[idx.dir].value;\n if (!attr_names.includes(\"arrows\")) {\n if (dir_type === \"both\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { to: { enabled: true } },\n });\n idx.arrows.to = attr_list.length - 1;\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { from: { enabled: true } },\n });\n idx.arrows.from = attr_list.length - 1;\n } else if (dir_type === \"forward\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { to: { enabled: true } },\n });\n idx.arrows.to = attr_list.length - 1;\n } else if (dir_type === \"back\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { from: { enabled: true } },\n });\n idx.arrows.from = attr_list.length - 1;\n } else if (dir_type === \"none\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: \"\",\n });\n idx.arrows.to = attr_list.length - 1;\n } else {\n throw newSyntaxError('Invalid dir type \"' + dir_type + '\"');\n }\n }\n\n var from_type;\n var to_type;\n // update 'arrows' attribute from 'dir'.\n if (dir_type === \"both\") {\n // both of shapes of 'from' and 'to' are given\n if (idx.arrows.to && idx.arrows.from) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n attr_list.splice(idx.arrows.from, 1);\n\n // shape of 'to' is assigned and use default to 'from'\n } else if (idx.arrows.to) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = \"arrow\";\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // only shape of 'from' is assigned and use default for 'to'\n } else if (idx.arrows.from) {\n to_type = \"arrow\";\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n }\n } else if (dir_type === \"back\") {\n // given both of shapes, but use only 'from'\n if (idx.arrows.to && idx.arrows.from) {\n to_type = \"\";\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // given shape of 'to', but does not use it\n } else if (idx.arrows.to) {\n to_type = \"\";\n from_type = \"arrow\";\n idx.arrows.from = idx.arrows.to;\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // assign given 'from' shape\n } else if (idx.arrows.from) {\n to_type = \"\";\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n }\n\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n from: {\n enabled: true,\n type: attr_list[idx.arrows.from].value.from.type,\n },\n },\n };\n } else if (dir_type === \"none\") {\n var idx_arrow;\n if (idx.arrows.to) {\n idx_arrow = idx.arrows.to;\n } else {\n idx_arrow = idx.arrows.from;\n }\n\n attr_list[idx_arrow] = {\n attr: attr_list[idx_arrow].attr,\n name: attr_list[idx_arrow].name,\n value: \"\",\n };\n } else if (dir_type === \"forward\") {\n // given both of shapes, but use only 'to'\n if (idx.arrows.to && idx.arrows.from) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = \"\";\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // assign given 'to' shape\n } else if (idx.arrows.to) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = \"\";\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // given shape of 'from', but does not use it\n } else if (idx.arrows.from) {\n to_type = \"arrow\";\n from_type = \"\";\n idx.arrows.to = idx.arrows.from;\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n }\n\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: attr_list[idx.arrows.to].value.to.type },\n },\n };\n } else {\n throw newSyntaxError('Invalid dir type \"' + dir_type + '\"');\n }\n\n // remove 'dir' attribute no need anymore\n attr_list.splice(idx.dir, 1);\n }\n\n // parse 'penwidth'\n var nof_attr_list;\n if (attr_names.includes(\"penwidth\")) {\n var tmp_attr_list = [];\n\n nof_attr_list = attr_list.length;\n for (i = 0; i < nof_attr_list; i++) {\n // exclude 'width' from attr_list if 'penwidth' exists\n if (attr_list[i].name !== \"width\") {\n if (attr_list[i].name === \"penwidth\") {\n attr_list[i].name = \"width\";\n }\n tmp_attr_list.push(attr_list[i]);\n }\n }\n attr_list = tmp_attr_list;\n }\n\n nof_attr_list = attr_list.length;\n for (i = 0; i < nof_attr_list; i++) {\n setValue(attr_list[i].attr, attr_list[i].name, attr_list[i].value);\n }\n\n return attr;\n}\n\n/**\n * Create a syntax error with extra information on current token and index.\n * @param {string} message\n * @returns {SyntaxError} err\n */\nfunction newSyntaxError(message) {\n return new SyntaxError(\n message + ', got \"' + chop(token, 30) + '\" (char ' + index + \")\"\n );\n}\n\n/**\n * Chop off text after a maximum length\n * @param {string} text\n * @param {number} maxLength\n * @returns {string}\n */\nfunction chop(text, maxLength) {\n return text.length <= maxLength ? text : text.substr(0, 27) + \"...\";\n}\n\n/**\n * Execute a function fn for each pair of elements in two arrays\n * @param {Array | *} array1\n * @param {Array | *} array2\n * @param {Function} fn\n */\nfunction forEach2(array1, array2, fn) {\n if (Array.isArray(array1)) {\n array1.forEach(function (elem1) {\n if (Array.isArray(array2)) {\n array2.forEach(function (elem2) {\n fn(elem1, elem2);\n });\n } else {\n fn(elem1, array2);\n }\n });\n } else {\n if (Array.isArray(array2)) {\n array2.forEach(function (elem2) {\n fn(array1, elem2);\n });\n } else {\n fn(array1, array2);\n }\n }\n}\n\n/**\n * Set a nested property on an object\n * When nested objects are missing, they will be created.\n * For example setProp({}, 'font.color', 'red') will return {font: {color: 'red'}}\n * @param {object} object\n * @param {string} path A dot separated string like 'font.color'\n * @param {*} value Value for the property\n * @returns {object} Returns the original object, allows for chaining.\n */\nfunction setProp(object, path, value) {\n var names = path.split(\".\");\n var prop = names.pop();\n\n // traverse over the nested objects\n var obj = object;\n for (var i = 0; i < names.length; i++) {\n var name = names[i];\n if (!(name in obj)) {\n obj[name] = {};\n }\n obj = obj[name];\n }\n\n // set the property value\n obj[prop] = value;\n\n return object;\n}\n\n/**\n * Convert an object with DOT attributes to their vis.js equivalents.\n * @param {object} attr Object with DOT attributes\n * @param {object} mapping\n * @returns {object} Returns an object with vis.js attributes\n */\nfunction convertAttr(attr, mapping) {\n var converted = {};\n\n for (var prop in attr) {\n if (attr.hasOwnProperty(prop)) {\n var visProp = mapping[prop];\n if (Array.isArray(visProp)) {\n visProp.forEach(function (visPropI) {\n setProp(converted, visPropI, attr[prop]);\n });\n } else if (typeof visProp === \"string\") {\n setProp(converted, visProp, attr[prop]);\n } else {\n setProp(converted, prop, attr[prop]);\n }\n }\n }\n\n return converted;\n}\n\n/**\n * Convert a string containing a graph in DOT language into a map containing\n * with nodes and edges in the format of graph.\n * @param {string} data Text containing a graph in DOT-notation\n * @returns {object} graphData\n */\nexport function DOTToGraph(data) {\n // parse the DOT file\n var dotData = parseDOT(data);\n var graphData = {\n nodes: [],\n edges: [],\n options: {},\n };\n\n // copy the nodes\n if (dotData.nodes) {\n dotData.nodes.forEach(function (dotNode) {\n var graphNode = {\n id: dotNode.id,\n label: String(dotNode.label || dotNode.id),\n };\n merge(graphNode, convertAttr(dotNode.attr, NODE_ATTR_MAPPING));\n if (graphNode.image) {\n graphNode.shape = \"image\";\n }\n graphData.nodes.push(graphNode);\n });\n }\n\n // copy the edges\n if (dotData.edges) {\n /**\n * Convert an edge in DOT format to an edge with VisGraph format\n * @param {object} dotEdge\n * @returns {object} graphEdge\n */\n var convertEdge = function (dotEdge) {\n var graphEdge = {\n from: dotEdge.from,\n to: dotEdge.to,\n };\n merge(graphEdge, convertAttr(dotEdge.attr, EDGE_ATTR_MAPPING));\n\n // Add arrows attribute to default styled arrow.\n // The reason why default style is not added in parseAttributeList() is\n // because only default is cleared before here.\n if (graphEdge.arrows == null && dotEdge.type === \"->\") {\n graphEdge.arrows = \"to\";\n }\n\n return graphEdge;\n };\n\n dotData.edges.forEach(function (dotEdge) {\n var from, to;\n if (dotEdge.from instanceof Object) {\n from = dotEdge.from.nodes;\n } else {\n from = {\n id: dotEdge.from,\n };\n }\n\n if (dotEdge.to instanceof Object) {\n to = dotEdge.to.nodes;\n } else {\n to = {\n id: dotEdge.to,\n };\n }\n\n if (dotEdge.from instanceof Object && dotEdge.from.edges) {\n dotEdge.from.edges.forEach(function (subEdge) {\n var graphEdge = convertEdge(subEdge);\n graphData.edges.push(graphEdge);\n });\n }\n\n forEach2(from, to, function (from, to) {\n var subEdge = createEdge(\n graphData,\n from.id,\n to.id,\n dotEdge.type,\n dotEdge.attr\n );\n var graphEdge = convertEdge(subEdge);\n graphData.edges.push(graphEdge);\n });\n\n if (dotEdge.to instanceof Object && dotEdge.to.edges) {\n dotEdge.to.edges.forEach(function (subEdge) {\n var graphEdge = convertEdge(subEdge);\n graphData.edges.push(graphEdge);\n });\n }\n });\n }\n\n // copy the options\n if (dotData.attr) {\n graphData.options = dotData.attr;\n }\n\n return graphData;\n}\n\n/* eslint-enable no-var */\n/* eslint-enable no-unused-vars */\n/* eslint-enable no-prototype-builtins */\n","export type Id = number | string;\n\nexport interface ColorObject {\n background: string;\n border: string;\n highlight: {\n background: string;\n border: string;\n };\n hover: {\n background: string;\n border: string;\n };\n}\n\nexport interface GephiData {\n nodes: GephiNode[];\n edges: GephiEdge[];\n}\nexport interface GephiParseOptions {\n fixed?: boolean;\n inheritColor?: boolean;\n parseColor?: boolean;\n}\n\nexport interface GephiNode {\n id: Id;\n\n attributes?: { title?: string };\n color?: string;\n label?: string;\n size?: number;\n title?: string;\n x?: number;\n y?: number;\n}\nexport interface GephiEdge {\n id: Id;\n source: Id;\n target: Id;\n\n attributes?: { title?: string };\n color?: string;\n label?: string;\n type?: string;\n}\n\nexport interface VisData {\n nodes: VisNode[];\n edges: VisEdge[];\n}\n\nexport interface VisNode {\n id: Id;\n fixed: boolean;\n\n color?: string | ColorObject;\n label?: string;\n size?: number;\n title?: string;\n x?: number;\n y?: number;\n\n attributes?: unknown;\n}\nexport interface VisEdge {\n id: Id;\n from: Id;\n to: Id;\n\n arrows?: \"to\";\n color?: string;\n label?: string;\n title?: string;\n\n attributes?: unknown;\n}\n\n/**\n * Convert Gephi to Vis.\n * @param gephiJSON - The parsed JSON data in Gephi format.\n * @param optionsObj - Additional options.\n * @returns The converted data ready to be used in Vis.\n */\nexport function parseGephi(\n gephiJSON: GephiData,\n optionsObj?: GephiParseOptions\n): VisData {\n const options = {\n edges: {\n inheritColor: false,\n },\n nodes: {\n fixed: false,\n parseColor: false,\n },\n };\n\n if (optionsObj != null) {\n if (optionsObj.fixed != null) {\n options.nodes.fixed = optionsObj.fixed;\n }\n if (optionsObj.parseColor != null) {\n options.nodes.parseColor = optionsObj.parseColor;\n }\n if (optionsObj.inheritColor != null) {\n options.edges.inheritColor = optionsObj.inheritColor;\n }\n }\n\n const gEdges = gephiJSON.edges;\n const vEdges = gEdges.map((gEdge): VisEdge => {\n const vEdge: VisEdge = {\n from: gEdge.source,\n id: gEdge.id,\n to: gEdge.target,\n };\n\n if (gEdge.attributes != null) {\n vEdge.attributes = gEdge.attributes;\n }\n if (gEdge.label != null) {\n vEdge.label = gEdge.label;\n }\n if (gEdge.attributes != null && gEdge.attributes.title != null) {\n vEdge.title = gEdge.attributes.title;\n }\n if (gEdge.type === \"Directed\") {\n vEdge.arrows = \"to\";\n }\n // edge['value'] = gEdge.attributes != null ? gEdge.attributes.Weight : undefined;\n // edge['width'] = edge['value'] != null ? undefined : edgegEdge.size;\n if (gEdge.color && options.edges.inheritColor === false) {\n vEdge.color = gEdge.color;\n }\n\n return vEdge;\n });\n\n const vNodes = gephiJSON.nodes.map((gNode): VisNode => {\n const vNode: VisNode = {\n id: gNode.id,\n fixed: options.nodes.fixed && gNode.x != null && gNode.y != null,\n };\n\n if (gNode.attributes != null) {\n vNode.attributes = gNode.attributes;\n }\n if (gNode.label != null) {\n vNode.label = gNode.label;\n }\n if (gNode.size != null) {\n vNode.size = gNode.size;\n }\n if (gNode.attributes != null && gNode.attributes.title != null) {\n vNode.title = gNode.attributes.title;\n }\n if (gNode.title != null) {\n vNode.title = gNode.title;\n }\n if (gNode.x != null) {\n vNode.x = gNode.x;\n }\n if (gNode.y != null) {\n vNode.y = gNode.y;\n }\n if (gNode.color != null) {\n if (options.nodes.parseColor === true) {\n vNode.color = gNode.color;\n } else {\n vNode.color = {\n background: gNode.color,\n border: gNode.color,\n highlight: {\n background: gNode.color,\n border: gNode.color,\n },\n hover: {\n background: gNode.color,\n border: gNode.color,\n },\n };\n }\n }\n\n return vNode;\n });\n\n return { nodes: vNodes, edges: vEdges };\n}\n","export interface Locale {\n addDescription: string;\n addEdge: string;\n addNode: string;\n back: string;\n close: string;\n createEdgeError: string;\n del: string;\n deleteClusterError: string;\n edgeDescription: string;\n edit: string;\n editClusterError: string;\n editEdge: string;\n editEdgeDescription: string;\n editNode: string;\n}\nexport type Locales = Record;\n\n// English\nexport const en: Locale = {\n addDescription: \"Click in an empty space to place a new node.\",\n addEdge: \"Add Edge\",\n addNode: \"Add Node\",\n back: \"Back\",\n close: \"Close\",\n createEdgeError: \"Cannot link edges to a cluster.\",\n del: \"Delete selected\",\n deleteClusterError: \"Clusters cannot be deleted.\",\n edgeDescription:\n \"Click on a node and drag the edge to another node to connect them.\",\n edit: \"Edit\",\n editClusterError: \"Clusters cannot be edited.\",\n editEdge: \"Edit Edge\",\n editEdgeDescription:\n \"Click on the control points and drag them to a node to connect to it.\",\n editNode: \"Edit Node\",\n};\n\n// German\nexport const de: Locale = {\n addDescription:\n \"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.\",\n addEdge: \"Kante hinzuf\\u00fcgen\",\n addNode: \"Knoten hinzuf\\u00fcgen\",\n back: \"Zur\\u00fcck\",\n close: \"Schließen\",\n createEdgeError:\n \"Es ist nicht m\\u00f6glich, Kanten mit Clustern zu verbinden.\",\n del: \"L\\u00f6sche Auswahl\",\n deleteClusterError: \"Cluster k\\u00f6nnen nicht gel\\u00f6scht werden.\",\n edgeDescription:\n \"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.\",\n edit: \"Editieren\",\n editClusterError: \"Cluster k\\u00f6nnen nicht editiert werden.\",\n editEdge: \"Kante editieren\",\n editEdgeDescription:\n \"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.\",\n editNode: \"Knoten editieren\",\n};\n\n// Spanish\nexport const es: Locale = {\n addDescription:\n \"Haga clic en un lugar vac\\u00edo para colocar un nuevo nodo.\",\n addEdge: \"A\\u00f1adir arista\",\n addNode: \"A\\u00f1adir nodo\",\n back: \"Atr\\u00e1s\",\n close: \"Cerrar\",\n createEdgeError: \"No se puede conectar una arista a un grupo.\",\n del: \"Eliminar selecci\\u00f3n\",\n deleteClusterError: \"No es posible eliminar grupos.\",\n edgeDescription:\n \"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.\",\n edit: \"Editar\",\n editClusterError: \"No es posible editar grupos.\",\n editEdge: \"Editar arista\",\n editEdgeDescription:\n \"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.\",\n editNode: \"Editar nodo\",\n};\n\n//Italiano\nexport const it: Locale = {\n addDescription: \"Clicca per aggiungere un nuovo nodo\",\n addEdge: \"Aggiungi un vertice\",\n addNode: \"Aggiungi un nodo\",\n back: \"Indietro\",\n close: \"Chiudere\",\n createEdgeError: \"Non si possono collegare vertici ad un cluster\",\n del: \"Cancella la selezione\",\n deleteClusterError: \"I cluster non possono essere cancellati\",\n edgeDescription:\n \"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.\",\n edit: \"Modifica\",\n editClusterError: \"I clusters non possono essere modificati.\",\n editEdge: \"Modifica il vertice\",\n editEdgeDescription:\n \"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.\",\n editNode: \"Modifica il nodo\",\n};\n\n// Dutch\nexport const nl: Locale = {\n addDescription: \"Klik op een leeg gebied om een nieuwe node te maken.\",\n addEdge: \"Link toevoegen\",\n addNode: \"Node toevoegen\",\n back: \"Terug\",\n close: \"Sluiten\",\n createEdgeError: \"Kan geen link maken naar een cluster.\",\n del: \"Selectie verwijderen\",\n deleteClusterError: \"Clusters kunnen niet worden verwijderd.\",\n edgeDescription:\n \"Klik op een node en sleep de link naar een andere node om ze te verbinden.\",\n edit: \"Wijzigen\",\n editClusterError: \"Clusters kunnen niet worden aangepast.\",\n editEdge: \"Link wijzigen\",\n editEdgeDescription:\n \"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.\",\n editNode: \"Node wijzigen\",\n};\n\n// Portuguese Brazil\nexport const pt: Locale = {\n addDescription: \"Clique em um espaço em branco para adicionar um novo nó\",\n addEdge: \"Adicionar aresta\",\n addNode: \"Adicionar nó\",\n back: \"Voltar\",\n close: \"Fechar\",\n createEdgeError: \"Não foi possível linkar arestas a um cluster.\",\n del: \"Remover selecionado\",\n deleteClusterError: \"Clusters não puderam ser removidos.\",\n edgeDescription:\n \"Clique em um nó e arraste a aresta até outro nó para conectá-los\",\n edit: \"Editar\",\n editClusterError: \"Clusters não puderam ser editados.\",\n editEdge: \"Editar aresta\",\n editEdgeDescription:\n \"Clique nos pontos de controle e os arraste para um nó para conectá-los\",\n editNode: \"Editar nó\",\n};\n\n// Russian\nexport const ru: Locale = {\n addDescription: \"Кликните в свободное место, чтобы добавить новый узел.\",\n addEdge: \"Добавить ребро\",\n addNode: \"Добавить узел\",\n back: \"Назад\",\n close: \"Закрывать\",\n createEdgeError: \"Невозможно соединить ребра в кластер.\",\n del: \"Удалить выбранное\",\n deleteClusterError: \"Кластеры не могут быть удалены\",\n edgeDescription:\n \"Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.\",\n edit: \"Редактировать\",\n editClusterError: \"Кластеры недоступны для редактирования.\",\n editEdge: \"Редактировать ребро\",\n editEdgeDescription:\n \"Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.\",\n editNode: \"Редактировать узел\",\n};\n\n// Chinese\nexport const cn: Locale = {\n addDescription: \"单击空白处放置新节点。\",\n addEdge: \"添加连接线\",\n addNode: \"添加节点\",\n back: \"返回\",\n close: \"關閉\",\n createEdgeError: \"无法将连接线连接到群集。\",\n del: \"删除选定\",\n deleteClusterError: \"无法删除群集。\",\n edgeDescription: \"单击某个节点并将该连接线拖动到另一个节点以连接它们。\",\n edit: \"编辑\",\n editClusterError: \"无法编辑群集。\",\n editEdge: \"编辑连接线\",\n editEdgeDescription: \"单击控制节点并将它们拖到节点上连接。\",\n editNode: \"编辑节点\",\n};\n\n// Ukrainian\nexport const uk: Locale = {\n addDescription: \"Kлікніть на вільне місце, щоб додати новий вузол.\",\n addEdge: \"Додати край\",\n addNode: \"Додати вузол\",\n back: \"Назад\",\n close: \"Закрити\",\n createEdgeError: \"Не можливо об'єднати краї в групу.\",\n del: \"Видалити обране\",\n deleteClusterError: \"Групи не можуть бути видалені.\",\n edgeDescription:\n \"Клікніть на вузол і перетягніть край до іншого вузла, щоб їх з'єднати.\",\n edit: \"Редагувати\",\n editClusterError: \"Групи недоступні для редагування.\",\n editEdge: \"Редагувати край\",\n editEdgeDescription:\n \"Клікніть на контрольні точки і перетягніть їх у вузол, щоб підключитися до нього.\",\n editNode: \"Редагувати вузол\",\n};\n\n// French\nexport const fr: Locale = {\n addDescription: \"Cliquez dans un endroit vide pour placer un nœud.\",\n addEdge: \"Ajouter un lien\",\n addNode: \"Ajouter un nœud\",\n back: \"Retour\",\n close: \"Fermer\",\n createEdgeError: \"Impossible de créer un lien vers un cluster.\",\n del: \"Effacer la sélection\",\n deleteClusterError: \"Les clusters ne peuvent pas être effacés.\",\n edgeDescription:\n \"Cliquez sur un nœud et glissez le lien vers un autre nœud pour les connecter.\",\n edit: \"Éditer\",\n editClusterError: \"Les clusters ne peuvent pas être édités.\",\n editEdge: \"Éditer le lien\",\n editEdgeDescription:\n \"Cliquez sur les points de contrôle et glissez-les pour connecter un nœud.\",\n editNode: \"Éditer le nœud\",\n};\n\n// Czech\nexport const cs: Locale = {\n addDescription: \"Kluknutím do prázdného prostoru můžete přidat nový vrchol.\",\n addEdge: \"Přidat hranu\",\n addNode: \"Přidat vrchol\",\n back: \"Zpět\",\n close: \"Zavřít\",\n createEdgeError: \"Nelze připojit hranu ke shluku.\",\n del: \"Smazat výběr\",\n deleteClusterError: \"Nelze mazat shluky.\",\n edgeDescription:\n \"Přetažením z jednoho vrcholu do druhého můžete spojit tyto vrcholy novou hranou.\",\n edit: \"Upravit\",\n editClusterError: \"Nelze upravovat shluky.\",\n editEdge: \"Upravit hranu\",\n editEdgeDescription:\n \"Přetažením kontrolního vrcholu hrany ji můžete připojit k jinému vrcholu.\",\n editNode: \"Upravit vrchol\",\n};\n","/**\n * Associates a canvas to a given image, containing a number of renderings\n * of the image at various sizes.\n *\n * This technique is known as 'mipmapping'.\n *\n * NOTE: Images can also be of type 'data:svg+xml`. This code also works\n * for svg, but the mipmapping may not be necessary.\n * @param {Image} image\n */\nclass CachedImage {\n /**\n * @ignore\n */\n constructor() {\n this.NUM_ITERATIONS = 4; // Number of items in the coordinates array\n\n this.image = new Image();\n this.canvas = document.createElement(\"canvas\");\n }\n\n /**\n * Called when the image has been successfully loaded.\n */\n init() {\n if (this.initialized()) return;\n\n this.src = this.image.src; // For same interface with Image\n const w = this.image.width;\n const h = this.image.height;\n\n // Ease external access\n this.width = w;\n this.height = h;\n\n const h2 = Math.floor(h / 2);\n const h4 = Math.floor(h / 4);\n const h8 = Math.floor(h / 8);\n const h16 = Math.floor(h / 16);\n\n const w2 = Math.floor(w / 2);\n const w4 = Math.floor(w / 4);\n const w8 = Math.floor(w / 8);\n const w16 = Math.floor(w / 16);\n\n // Make canvas as small as possible\n this.canvas.width = 3 * w4;\n this.canvas.height = h2;\n\n // Coordinates and sizes of images contained in the canvas\n // Values per row: [top x, left y, width, height]\n\n this.coordinates = [\n [0, 0, w2, h2],\n [w2, 0, w4, h4],\n [w2, h4, w8, h8],\n [5 * w8, h4, w16, h16],\n ];\n\n this._fillMipMap();\n }\n\n /**\n * @returns {boolean} true if init() has been called, false otherwise.\n */\n initialized() {\n return this.coordinates !== undefined;\n }\n\n /**\n * Redraw main image in various sizes to the context.\n *\n * The rationale behind this is to reduce artefacts due to interpolation\n * at differing zoom levels.\n *\n * Source: http://stackoverflow.com/q/18761404/1223531\n *\n * This methods takes the resizing out of the drawing loop, in order to\n * reduce performance overhead.\n *\n * TODO: The code assumes that a 2D context can always be gotten. This is\n * not necessarily true! OTOH, if not true then usage of this class\n * is senseless.\n * @private\n */\n _fillMipMap() {\n const ctx = this.canvas.getContext(\"2d\");\n\n // First zoom-level comes from the image\n const to = this.coordinates[0];\n ctx.drawImage(this.image, to[0], to[1], to[2], to[3]);\n\n // The rest are copy actions internal to the canvas/context\n for (let iterations = 1; iterations < this.NUM_ITERATIONS; iterations++) {\n const from = this.coordinates[iterations - 1];\n const to = this.coordinates[iterations];\n\n ctx.drawImage(\n this.canvas,\n from[0],\n from[1],\n from[2],\n from[3],\n to[0],\n to[1],\n to[2],\n to[3]\n );\n }\n }\n\n /**\n * Draw the image, using the mipmap if necessary.\n *\n * MipMap is only used if param factor > 2; otherwise, original bitmap\n * is resized. This is also used to skip mipmap usage, e.g. by setting factor = 1\n *\n * Credits to 'Alex de Mulder' for original implementation.\n * @param {CanvasRenderingContext2D} ctx context on which to draw zoomed image\n * @param {Float} factor scale factor at which to draw\n * @param {number} left\n * @param {number} top\n * @param {number} width\n * @param {number} height\n */\n drawImageAtPosition(ctx, factor, left, top, width, height) {\n if (!this.initialized()) return; //can't draw image yet not intialized\n\n if (factor > 2) {\n // Determine which zoomed image to use\n factor *= 0.5;\n let iterations = 0;\n while (factor > 2 && iterations < this.NUM_ITERATIONS) {\n factor *= 0.5;\n iterations += 1;\n }\n\n if (iterations >= this.NUM_ITERATIONS) {\n iterations = this.NUM_ITERATIONS - 1;\n }\n //console.log(\"iterations: \" + iterations);\n\n const from = this.coordinates[iterations];\n ctx.drawImage(\n this.canvas,\n from[0],\n from[1],\n from[2],\n from[3],\n left,\n top,\n width,\n height\n );\n } else {\n // Draw image directly\n ctx.drawImage(this.image, left, top, width, height);\n }\n }\n}\n\nexport default CachedImage;\n","import CachedImage from \"./CachedImage\";\n\n/**\n * This callback is a callback that accepts an Image.\n * @callback ImageCallback\n * @param {Image} image\n */\n\n/**\n * This class loads images and keeps them stored.\n * @param {ImageCallback} callback\n */\nclass Images {\n /**\n * @param {ImageCallback} callback\n */\n constructor(callback) {\n this.images = {};\n this.imageBroken = {};\n this.callback = callback;\n }\n\n /**\n * @param {string} url The original Url that failed to load, if the broken image is successfully loaded it will be added to the cache using this Url as the key so that subsequent requests for this Url will return the broken image\n * @param {string} brokenUrl Url the broken image to try and load\n * @param {Image} imageToLoadBrokenUrlOn The image object\n */\n _tryloadBrokenUrl(url, brokenUrl, imageToLoadBrokenUrlOn) {\n //If these parameters aren't specified then exit the function because nothing constructive can be done\n if (url === undefined || imageToLoadBrokenUrlOn === undefined) return;\n if (brokenUrl === undefined) {\n console.warn(\"No broken url image defined\");\n return;\n }\n\n //Clear the old subscription to the error event and put a new in place that only handle errors in loading the brokenImageUrl\n imageToLoadBrokenUrlOn.image.onerror = () => {\n console.error(\"Could not load brokenImage:\", brokenUrl);\n // cache item will contain empty image, this should be OK for default\n };\n\n //Set the source of the image to the brokenUrl, this is actually what kicks off the loading of the broken image\n imageToLoadBrokenUrlOn.image.src = brokenUrl;\n }\n\n /**\n *\n * @param {vis.Image} imageToRedrawWith\n * @private\n */\n _redrawWithImage(imageToRedrawWith) {\n if (this.callback) {\n this.callback(imageToRedrawWith);\n }\n }\n\n /**\n * @param {string} url Url of the image\n * @param {string} brokenUrl Url of an image to use if the url image is not found\n * @returns {Image} img The image object\n */\n load(url, brokenUrl) {\n //Try and get the image from the cache, if successful then return the cached image\n const cachedImage = this.images[url];\n if (cachedImage) return cachedImage;\n\n //Create a new image\n const img = new CachedImage();\n\n // Need to add to cache here, otherwise final return will spawn different copies of the same image,\n // Also, there will be multiple loads of the same image.\n this.images[url] = img;\n\n //Subscribe to the event that is raised if the image loads successfully\n img.image.onload = () => {\n // Properly init the cached item and then request a redraw\n this._fixImageCoordinates(img.image);\n img.init();\n this._redrawWithImage(img);\n };\n\n //Subscribe to the event that is raised if the image fails to load\n img.image.onerror = () => {\n console.error(\"Could not load image:\", url);\n //Try and load the image specified by the brokenUrl using\n this._tryloadBrokenUrl(url, brokenUrl, img);\n };\n\n //Set the source of the image to the url, this is what actually kicks off the loading of the image\n img.image.src = url;\n\n //Return the new image\n return img;\n }\n\n /**\n * IE11 fix -- thanks dponch!\n *\n * Local helper function\n * @param {vis.Image} imageToCache\n * @private\n */\n _fixImageCoordinates(imageToCache) {\n if (imageToCache.width === 0) {\n document.body.appendChild(imageToCache);\n imageToCache.width = imageToCache.offsetWidth;\n imageToCache.height = imageToCache.offsetHeight;\n document.body.removeChild(imageToCache);\n }\n }\n}\n\nexport default Images;\n","'use strict';\n// FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it\nvar fails = require('../internals/fails');\n\nmodule.exports = fails(function () {\n if (typeof ArrayBuffer == 'function') {\n var buffer = new ArrayBuffer(8);\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-defineproperty -- safe\n if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 });\n }\n});\n","'use strict';\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar ARRAY_BUFFER_NON_EXTENSIBLE = require('../internals/array-buffer-non-extensible');\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar $isExtensible = Object.isExtensible;\nvar FAILS_ON_PRIMITIVES = fails(function () { $isExtensible(1); });\n\n// `Object.isExtensible` method\n// https://tc39.es/ecma262/#sec-object.isextensible\nmodule.exports = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) {\n if (!isObject(it)) return false;\n if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === 'ArrayBuffer') return false;\n return $isExtensible ? $isExtensible(it) : true;\n} : $isExtensible;\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n return Object.isExtensible(Object.preventExtensions({}));\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternalModule = require('../internals/object-get-own-property-names-external');\nvar isExtensible = require('../internals/object-is-extensible');\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar REQUIRED = false;\nvar METADATA = uid('meta');\nvar id = 0;\n\nvar setMetadata = function (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + id++, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey = function (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar enable = function () {\n meta.enable = function () { /* empty */ };\n REQUIRED = true;\n var getOwnPropertyNames = getOwnPropertyNamesModule.f;\n var splice = uncurryThis([].splice);\n var test = {};\n test[METADATA] = 1;\n\n // prevent exposing of metadata key\n if (getOwnPropertyNames(test).length) {\n getOwnPropertyNamesModule.f = function (it) {\n var result = getOwnPropertyNames(it);\n for (var i = 0, length = result.length; i < length; i++) {\n if (result[i] === METADATA) {\n splice(result, i, 1);\n break;\n }\n } return result;\n };\n\n $({ target: 'Object', stat: true, forced: true }, {\n getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n });\n }\n};\n\nvar meta = module.exports = {\n enable: enable,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","'use strict';\nvar classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR)\n || getMethod(it, '@@iterator')\n || Iterators[classof(it)];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n throw new $TypeError(tryToString(argument) + ' is not iterable');\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n innerResult = getMethod(iterator, 'return');\n if (!innerResult) {\n if (kind === 'throw') throw value;\n return value;\n }\n innerResult = call(innerResult, iterator);\n } catch (error) {\n innerError = true;\n innerResult = error;\n }\n if (kind === 'throw') throw value;\n if (innerError) throw innerResult;\n anObject(innerResult);\n return value;\n};\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar $TypeError = TypeError;\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_RECORD = !!(options && options.IS_RECORD);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator, 'normal', condition);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_RECORD) {\n iterator = iterable.iterator;\n } else if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (!iterFn) throw new $TypeError(tryToString(iterable) + ' is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n }\n iterator = getIterator(iterable, iterFn);\n }\n\n next = IS_RECORD ? iterable.next : iterator.next;\n while (!(step = call(next, iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n};\n","'use strict';\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it, Prototype) {\n if (isPrototypeOf(Prototype, it)) return it;\n throw new $TypeError('Incorrect invocation');\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar fails = require('../internals/fails');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar defineProperty = require('../internals/object-define-property').f;\nvar forEach = require('../internals/array-iteration').forEach;\nvar DESCRIPTORS = require('../internals/descriptors');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = global[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var exported = {};\n var Constructor;\n\n if (!DESCRIPTORS || !isCallable(NativeConstructor)\n || !(IS_WEAK || NativePrototype.forEach && !fails(function () { new NativeConstructor().entries().next(); }))\n ) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.enable();\n } else {\n Constructor = wrapper(function (target, iterable) {\n setInternalState(anInstance(target, Prototype), {\n type: CONSTRUCTOR_NAME,\n collection: new NativeConstructor()\n });\n if (!isNullOrUndefined(iterable)) iterate(iterable, target[ADDER], { that: target, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n forEach(['add', 'clear', 'delete', 'forEach', 'get', 'has', 'set', 'keys', 'values', 'entries'], function (KEY) {\n var IS_ADDER = KEY === 'add' || KEY === 'set';\n if (KEY in NativePrototype && !(IS_WEAK && KEY === 'clear')) {\n createNonEnumerableProperty(Prototype, KEY, function (a, b) {\n var collection = getInternalState(this).collection;\n if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY === 'get' ? undefined : false;\n var result = collection[KEY](a === 0 ? 0 : a, b);\n return IS_ADDER ? this : result;\n });\n }\n });\n\n IS_WEAK || defineProperty(Prototype, 'size', {\n configurable: true,\n get: function () {\n return getInternalState(this).collection.size;\n }\n });\n }\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME, false, true);\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, forced: true }, exported);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n","'use strict';\nvar defineBuiltIn = require('../internals/define-built-in');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) {\n if (options && options.unsafe && target[key]) target[key] = src[key];\n else defineBuiltIn(target, key, src[key], options);\n } return target;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineBuiltInAccessor(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","'use strict';\nvar create = require('../internals/object-create');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key === key) return entry;\n }\n };\n\n defineBuiltIns(Prototype, {\n // `{ Map, Set }.prototype.clear()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.clear\n // https://tc39.es/ecma262/#sec-set.prototype.clear\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // `{ Map, Set }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.delete\n // https://tc39.es/ecma262/#sec-set.prototype.delete\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first === entry) state.first = next;\n if (state.last === entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.foreach\n // https://tc39.es/ecma262/#sec-set.prototype.foreach\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // `{ Map, Set}.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.has\n // https://tc39.es/ecma262/#sec-set.prototype.has\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n defineBuiltIns(Prototype, IS_MAP ? {\n // `Map.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-map.prototype.get\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // `Map.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-map.prototype.set\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // `Set.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-set.prototype.add\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineBuiltInAccessor(Prototype, 'size', {\n configurable: true,\n get: function () {\n return getInternalState(this).size;\n }\n });\n return Constructor;\n },\n setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.entries\n // https://tc39.es/ecma262/#sec-map.prototype.keys\n // https://tc39.es/ecma262/#sec-map.prototype.values\n // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n // https://tc39.es/ecma262/#sec-set.prototype.entries\n // https://tc39.es/ecma262/#sec-set.prototype.keys\n // https://tc39.es/ecma262/#sec-set.prototype.values\n // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return createIterResultObject(undefined, true);\n }\n // return step by kind\n if (kind === 'keys') return createIterResultObject(entry.key, false);\n if (kind === 'values') return createIterResultObject(entry.value, false);\n return createIterResultObject([entry.key, entry.value], false);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // `{ Map, Set }.prototype[@@species]` accessors\n // https://tc39.es/ecma262/#sec-get-map-@@species\n // https://tc39.es/ecma262/#sec-get-set-@@species\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\ncollection('Map', function (init) {\n return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: toString(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return createIterResultObject(undefined, true);\n point = charAt(string, index);\n state.index += point.length;\n return createIterResultObject(point, false);\n});\n","'use strict';\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.map');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Map;\n","/**\n * This class can store groups and options specific for groups.\n */\nexport class Groups {\n /**\n * @ignore\n */\n constructor() {\n this.clear();\n this._defaultIndex = 0;\n this._groupIndex = 0;\n\n this._defaultGroups = [\n {\n border: \"#2B7CE9\",\n background: \"#97C2FC\",\n highlight: { border: \"#2B7CE9\", background: \"#D2E5FF\" },\n hover: { border: \"#2B7CE9\", background: \"#D2E5FF\" },\n }, // 0: blue\n {\n border: \"#FFA500\",\n background: \"#FFFF00\",\n highlight: { border: \"#FFA500\", background: \"#FFFFA3\" },\n hover: { border: \"#FFA500\", background: \"#FFFFA3\" },\n }, // 1: yellow\n {\n border: \"#FA0A10\",\n background: \"#FB7E81\",\n highlight: { border: \"#FA0A10\", background: \"#FFAFB1\" },\n hover: { border: \"#FA0A10\", background: \"#FFAFB1\" },\n }, // 2: red\n {\n border: \"#41A906\",\n background: \"#7BE141\",\n highlight: { border: \"#41A906\", background: \"#A1EC76\" },\n hover: { border: \"#41A906\", background: \"#A1EC76\" },\n }, // 3: green\n {\n border: \"#E129F0\",\n background: \"#EB7DF4\",\n highlight: { border: \"#E129F0\", background: \"#F0B3F5\" },\n hover: { border: \"#E129F0\", background: \"#F0B3F5\" },\n }, // 4: magenta\n {\n border: \"#7C29F0\",\n background: \"#AD85E4\",\n highlight: { border: \"#7C29F0\", background: \"#D3BDF0\" },\n hover: { border: \"#7C29F0\", background: \"#D3BDF0\" },\n }, // 5: purple\n {\n border: \"#C37F00\",\n background: \"#FFA807\",\n highlight: { border: \"#C37F00\", background: \"#FFCA66\" },\n hover: { border: \"#C37F00\", background: \"#FFCA66\" },\n }, // 6: orange\n {\n border: \"#4220FB\",\n background: \"#6E6EFD\",\n highlight: { border: \"#4220FB\", background: \"#9B9BFD\" },\n hover: { border: \"#4220FB\", background: \"#9B9BFD\" },\n }, // 7: darkblue\n {\n border: \"#FD5A77\",\n background: \"#FFC0CB\",\n highlight: { border: \"#FD5A77\", background: \"#FFD1D9\" },\n hover: { border: \"#FD5A77\", background: \"#FFD1D9\" },\n }, // 8: pink\n {\n border: \"#4AD63A\",\n background: \"#C2FABC\",\n highlight: { border: \"#4AD63A\", background: \"#E6FFE3\" },\n hover: { border: \"#4AD63A\", background: \"#E6FFE3\" },\n }, // 9: mint\n\n {\n border: \"#990000\",\n background: \"#EE0000\",\n highlight: { border: \"#BB0000\", background: \"#FF3333\" },\n hover: { border: \"#BB0000\", background: \"#FF3333\" },\n }, // 10:bright red\n\n {\n border: \"#FF6000\",\n background: \"#FF6000\",\n highlight: { border: \"#FF6000\", background: \"#FF6000\" },\n hover: { border: \"#FF6000\", background: \"#FF6000\" },\n }, // 12: real orange\n {\n border: \"#97C2FC\",\n background: \"#2B7CE9\",\n highlight: { border: \"#D2E5FF\", background: \"#2B7CE9\" },\n hover: { border: \"#D2E5FF\", background: \"#2B7CE9\" },\n }, // 13: blue\n {\n border: \"#399605\",\n background: \"#255C03\",\n highlight: { border: \"#399605\", background: \"#255C03\" },\n hover: { border: \"#399605\", background: \"#255C03\" },\n }, // 14: green\n {\n border: \"#B70054\",\n background: \"#FF007E\",\n highlight: { border: \"#B70054\", background: \"#FF007E\" },\n hover: { border: \"#B70054\", background: \"#FF007E\" },\n }, // 15: magenta\n {\n border: \"#AD85E4\",\n background: \"#7C29F0\",\n highlight: { border: \"#D3BDF0\", background: \"#7C29F0\" },\n hover: { border: \"#D3BDF0\", background: \"#7C29F0\" },\n }, // 16: purple\n {\n border: \"#4557FA\",\n background: \"#000EA1\",\n highlight: { border: \"#6E6EFD\", background: \"#000EA1\" },\n hover: { border: \"#6E6EFD\", background: \"#000EA1\" },\n }, // 17: darkblue\n {\n border: \"#FFC0CB\",\n background: \"#FD5A77\",\n highlight: { border: \"#FFD1D9\", background: \"#FD5A77\" },\n hover: { border: \"#FFD1D9\", background: \"#FD5A77\" },\n }, // 18: pink\n {\n border: \"#C2FABC\",\n background: \"#74D66A\",\n highlight: { border: \"#E6FFE3\", background: \"#74D66A\" },\n hover: { border: \"#E6FFE3\", background: \"#74D66A\" },\n }, // 19: mint\n\n {\n border: \"#EE0000\",\n background: \"#990000\",\n highlight: { border: \"#FF3333\", background: \"#BB0000\" },\n hover: { border: \"#FF3333\", background: \"#BB0000\" },\n }, // 20:bright red\n ];\n\n this.options = {};\n this.defaultOptions = {\n useDefaultGroups: true,\n };\n Object.assign(this.options, this.defaultOptions);\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n const optionFields = [\"useDefaultGroups\"];\n\n if (options !== undefined) {\n for (const groupName in options) {\n if (Object.prototype.hasOwnProperty.call(options, groupName)) {\n if (optionFields.indexOf(groupName) === -1) {\n const group = options[groupName];\n this.add(groupName, group);\n }\n }\n }\n }\n }\n\n /**\n * Clear all groups\n */\n clear() {\n this._groups = new Map();\n this._groupNames = [];\n }\n\n /**\n * Get group options of a groupname.\n * If groupname is not found, a new group may be created.\n * @param {*} groupname Can be a number, string, Date, etc.\n * @param {boolean} [shouldCreate] If true, create a new group\n * @returns {object} The found or created group\n */\n get(groupname, shouldCreate = true) {\n let group = this._groups.get(groupname);\n\n if (group === undefined && shouldCreate) {\n if (\n this.options.useDefaultGroups === false &&\n this._groupNames.length > 0\n ) {\n // create new group\n const index = this._groupIndex % this._groupNames.length;\n ++this._groupIndex;\n group = {};\n group.color = this._groups.get(this._groupNames[index]);\n this._groups.set(groupname, group);\n } else {\n // create new group\n const index = this._defaultIndex % this._defaultGroups.length;\n this._defaultIndex++;\n group = {};\n group.color = this._defaultGroups[index];\n this._groups.set(groupname, group);\n }\n }\n\n return group;\n }\n\n /**\n * Add custom group style.\n * @param {string} groupName - The name of the group, a new group will be\n * created if a group with the same name doesn't exist, otherwise the old\n * groups style will be overwritten.\n * @param {object} style - An object containing borderColor, backgroundColor,\n * etc.\n * @returns {object} The created group object.\n */\n add(groupName, style) {\n // Only push group name once to prevent duplicates which would consume more\n // RAM and also skew the distribution towards more often updated groups,\n // neither of which is desirable.\n if (!this._groups.has(groupName)) {\n this._groupNames.push(groupName);\n }\n this._groups.set(groupName, style);\n return style;\n }\n}\n","'use strict';\nvar $ = require('../internals/export');\n\n// `Number.isNaN` method\n// https://tc39.es/ecma262/#sec-number.isnan\n$({ target: 'Number', stat: true }, {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare -- NaN check\n return number !== number;\n }\n});\n","'use strict';\nrequire('../../modules/es.number.is-nan');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Number.isNaN;\n","'use strict';\nvar global = require('../internals/global');\n\nvar globalIsFinite = global.isFinite;\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n// eslint-disable-next-line es/no-number-isfinite -- safe\nmodule.exports = Number.isFinite || function isFinite(it) {\n return typeof it == 'number' && globalIsFinite(it);\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar numberIsFinite = require('../internals/number-is-finite');\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n$({ target: 'Number', stat: true }, { isFinite: numberIsFinite });\n","'use strict';\nrequire('../../modules/es.number.is-finite');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Number.isFinite;\n","'use strict';\nvar $ = require('../internals/export');\nvar $some = require('../internals/array-iteration').some;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('some');\n\n// `Array.prototype.some` method\n// https://tc39.es/ecma262/#sec-array.prototype.some\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, {\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.some');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').some;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/some');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.some;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.some) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/some');\n\nmodule.exports = parent;\n","'use strict';\nrequire('../../modules/es.symbol');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.getOwnPropertySymbols;\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FORCED = !DESCRIPTORS || fails(function () { nativeGetOwnPropertyDescriptor(1); });\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n","'use strict';\nrequire('../../modules/es.object.get-own-property-descriptor');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nvar getOwnPropertyDescriptor = module.exports = function getOwnPropertyDescriptor(it, key) {\n return Object.getOwnPropertyDescriptor(it, key);\n};\n\nif (Object.getOwnPropertyDescriptor.sham) getOwnPropertyDescriptor.sham = true;\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n","'use strict';\nrequire('../../modules/es.object.get-own-property-descriptors');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.getOwnPropertyDescriptors;\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineProperties = require('../internals/object-define-properties').f;\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\n$({ target: 'Object', stat: true, forced: Object.defineProperties !== defineProperties, sham: !DESCRIPTORS }, {\n defineProperties: defineProperties\n});\n","'use strict';\nrequire('../../modules/es.object.define-properties');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nvar defineProperties = module.exports = function defineProperties(T, D) {\n return Object.defineProperties(T, D);\n};\n\nif (Object.defineProperties.sham) defineProperties.sham = true;\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineProperty = require('../internals/object-define-property').f;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\n// eslint-disable-next-line es/no-object-defineproperty -- safe\n$({ target: 'Object', stat: true, forced: Object.defineProperty !== defineProperty, sham: !DESCRIPTORS }, {\n defineProperty: defineProperty\n});\n","'use strict';\nrequire('../../modules/es.object.define-property');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nvar defineProperty = module.exports = function defineProperty(it, key, desc) {\n return Object.defineProperty(it, key, desc);\n};\n\nif (Object.defineProperty.sham) defineProperty.sham = true;\n","'use strict';\nvar parent = require('../../es/object/define-property');\n\nmodule.exports = parent;\n","'use strict';\nvar parent = require('../../stable/object/define-property');\n\nmodule.exports = parent;\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar METADATA = wellKnownSymbol('metadata');\nvar FunctionPrototype = Function.prototype;\n\n// Function.prototype[@@metadata]\n// https://github.com/tc39/proposal-decorator-metadata\nif (FunctionPrototype[METADATA] === undefined) {\n defineProperty(FunctionPrototype, METADATA, {\n value: null\n });\n}\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.asyncDispose` well-known symbol\n// https://github.com/tc39/proposal-async-explicit-resource-management\ndefineWellKnownSymbol('asyncDispose');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.dispose` well-known symbol\n// https://github.com/tc39/proposal-explicit-resource-management\ndefineWellKnownSymbol('dispose');\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.metadata` well-known symbol\n// https://github.com/tc39/proposal-decorators\ndefineWellKnownSymbol('metadata');\n","'use strict';\nvar parent = require('../../stable/symbol');\n\nrequire('../../modules/esnext.function.metadata');\nrequire('../../modules/esnext.symbol.async-dispose');\nrequire('../../modules/esnext.symbol.dispose');\nrequire('../../modules/esnext.symbol.metadata');\n\nmodule.exports = parent;\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar Symbol = getBuiltIn('Symbol');\nvar keyFor = Symbol.keyFor;\nvar thisSymbolValue = uncurryThis(Symbol.prototype.valueOf);\n\n// `Symbol.isRegisteredSymbol` method\n// https://tc39.es/proposal-symbol-predicates/#sec-symbol-isregisteredsymbol\nmodule.exports = Symbol.isRegisteredSymbol || function isRegisteredSymbol(value) {\n try {\n return keyFor(thisSymbolValue(value)) !== undefined;\n } catch (error) {\n return false;\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isRegisteredSymbol = require('../internals/symbol-is-registered');\n\n// `Symbol.isRegisteredSymbol` method\n// https://tc39.es/proposal-symbol-predicates/#sec-symbol-isregisteredsymbol\n$({ target: 'Symbol', stat: true }, {\n isRegisteredSymbol: isRegisteredSymbol\n});\n","'use strict';\nvar shared = require('../internals/shared');\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isSymbol = require('../internals/is-symbol');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar Symbol = getBuiltIn('Symbol');\nvar $isWellKnownSymbol = Symbol.isWellKnownSymbol;\nvar getOwnPropertyNames = getBuiltIn('Object', 'getOwnPropertyNames');\nvar thisSymbolValue = uncurryThis(Symbol.prototype.valueOf);\nvar WellKnownSymbolsStore = shared('wks');\n\nfor (var i = 0, symbolKeys = getOwnPropertyNames(Symbol), symbolKeysLength = symbolKeys.length; i < symbolKeysLength; i++) {\n // some old engines throws on access to some keys like `arguments` or `caller`\n try {\n var symbolKey = symbolKeys[i];\n if (isSymbol(Symbol[symbolKey])) wellKnownSymbol(symbolKey);\n } catch (error) { /* empty */ }\n}\n\n// `Symbol.isWellKnownSymbol` method\n// https://tc39.es/proposal-symbol-predicates/#sec-symbol-iswellknownsymbol\n// We should patch it for newly added well-known symbols. If it's not required, this module just will not be injected\nmodule.exports = function isWellKnownSymbol(value) {\n if ($isWellKnownSymbol && $isWellKnownSymbol(value)) return true;\n try {\n var symbol = thisSymbolValue(value);\n for (var j = 0, keys = getOwnPropertyNames(WellKnownSymbolsStore), keysLength = keys.length; j < keysLength; j++) {\n // eslint-disable-next-line eqeqeq -- polyfilled symbols case\n if (WellKnownSymbolsStore[keys[j]] == symbol) return true;\n }\n } catch (error) { /* empty */ }\n return false;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isWellKnownSymbol = require('../internals/symbol-is-well-known');\n\n// `Symbol.isWellKnownSymbol` method\n// https://tc39.es/proposal-symbol-predicates/#sec-symbol-iswellknownsymbol\n// We should patch it for newly added well-known symbols. If it's not required, this module just will not be injected\n$({ target: 'Symbol', stat: true, forced: true }, {\n isWellKnownSymbol: isWellKnownSymbol\n});\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.matcher` well-known symbol\n// https://github.com/tc39/proposal-pattern-matching\ndefineWellKnownSymbol('matcher');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.observable` well-known symbol\n// https://github.com/tc39/proposal-observable\ndefineWellKnownSymbol('observable');\n","'use strict';\nvar $ = require('../internals/export');\nvar isRegisteredSymbol = require('../internals/symbol-is-registered');\n\n// `Symbol.isRegistered` method\n// obsolete version of https://tc39.es/proposal-symbol-predicates/#sec-symbol-isregisteredsymbol\n$({ target: 'Symbol', stat: true, name: 'isRegisteredSymbol' }, {\n isRegistered: isRegisteredSymbol\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isWellKnownSymbol = require('../internals/symbol-is-well-known');\n\n// `Symbol.isWellKnown` method\n// obsolete version of https://tc39.es/proposal-symbol-predicates/#sec-symbol-iswellknownsymbol\n// We should patch it for newly added well-known symbols. If it's not required, this module just will not be injected\n$({ target: 'Symbol', stat: true, name: 'isWellKnownSymbol', forced: true }, {\n isWellKnown: isWellKnownSymbol\n});\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.metadataKey` well-known symbol\n// https://github.com/tc39/proposal-decorator-metadata\ndefineWellKnownSymbol('metadataKey');\n","'use strict';\n// TODO: remove from `core-js@4`\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.patternMatch` well-known symbol\n// https://github.com/tc39/proposal-pattern-matching\ndefineWellKnownSymbol('patternMatch');\n","'use strict';\n// TODO: remove from `core-js@4`\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\ndefineWellKnownSymbol('replaceAll');\n","'use strict';\nvar parent = require('../../actual/symbol');\nrequire('../../modules/esnext.symbol.is-registered-symbol');\nrequire('../../modules/esnext.symbol.is-well-known-symbol');\nrequire('../../modules/esnext.symbol.matcher');\nrequire('../../modules/esnext.symbol.observable');\n// TODO: Remove from `core-js@4`\nrequire('../../modules/esnext.symbol.is-registered');\nrequire('../../modules/esnext.symbol.is-well-known');\nrequire('../../modules/esnext.symbol.metadata-key');\nrequire('../../modules/esnext.symbol.pattern-match');\nrequire('../../modules/esnext.symbol.replace-all');\n\nmodule.exports = parent;\n","'use strict';\nvar parent = require('../../es/symbol/iterator');\nrequire('../../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n","'use strict';\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/es.symbol.iterator');\nvar WrappedWellKnownSymbolModule = require('../../internals/well-known-symbol-wrapped');\n\nmodule.exports = WrappedWellKnownSymbolModule.f('iterator');\n","'use strict';\nvar parent = require('../../stable/symbol/iterator');\n\nmodule.exports = parent;\n","import _Symbol from \"core-js-pure/features/symbol/index.js\";\nimport _Symbol$iterator from \"core-js-pure/features/symbol/iterator.js\";\nexport default function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof _Symbol && \"symbol\" == typeof _Symbol$iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof _Symbol && o.constructor === _Symbol && o !== _Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}","'use strict';\nrequire('../../modules/es.date.to-primitive');\nrequire('../../modules/es.symbol.to-primitive');\nvar WrappedWellKnownSymbolModule = require('../../internals/well-known-symbol-wrapped');\n\nmodule.exports = WrappedWellKnownSymbolModule.f('toPrimitive');\n","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nimport _Symbol$toPrimitive from \"core-js-pure/features/symbol/to-primitive.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[_Symbol$toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import _Object$defineProperty from \"core-js-pure/features/object/define-property.js\";\nimport toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n _Object$defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nvar $TypeError = TypeError;\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n return function (that, callbackfn, argumentsLength, memo) {\n aCallable(callbackfn);\n var O = toObject(that);\n var self = IndexedObject(O);\n var length = lengthOfArrayLike(O);\n var index = IS_RIGHT ? length - 1 : 0;\n var i = IS_RIGHT ? -1 : 1;\n if (argumentsLength < 2) while (true) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (IS_RIGHT ? index < 0 : length <= index) {\n throw new $TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.reduce` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduce\n left: createMethod(false),\n // `Array.prototype.reduceRight` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n right: createMethod(true)\n};\n","'use strict';\nvar global = require('../internals/global');\nvar classof = require('../internals/classof-raw');\n\nmodule.exports = classof(global.process) === 'process';\n","'use strict';\nvar $ = require('../internals/export');\nvar $reduce = require('../internals/array-reduce').left;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar CHROME_VERSION = require('../internals/engine-v8-version');\nvar IS_NODE = require('../internals/engine-is-node');\n\n// Chrome 80-82 has a critical bug\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982\nvar CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;\nvar FORCED = CHROME_BUG || !arrayMethodIsStrict('reduce');\n\n// `Array.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-array.prototype.reduce\n$({ target: 'Array', proto: true, forced: FORCED }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n var length = arguments.length;\n return $reduce(this, callbackfn, length, length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.reduce');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').reduce;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/reduce');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.reduce;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.reduce) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/reduce');\n\nmodule.exports = parent;\n","'use strict';\nvar isArray = require('../internals/is-array');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar bind = require('../internals/function-bind-context');\n\n// `FlattenIntoArray` abstract operation\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? bind(mapper, thisArg) : false;\n var element, elementLen;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n if (depth > 0 && isArray(element)) {\n elementLen = lengthOfArrayLike(element);\n targetIndex = flattenIntoArray(target, original, element, elementLen, targetIndex, depth - 1) - 1;\n } else {\n doesNotExceedSafeInteger(targetIndex + 1);\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n};\n\nmodule.exports = flattenIntoArray;\n","'use strict';\nvar $ = require('../internals/export');\nvar flattenIntoArray = require('../internals/flatten-into-array');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\n// `Array.prototype.flatMap` method\n// https://tc39.es/ecma262/#sec-array.prototype.flatmap\n$({ target: 'Array', proto: true }, {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen = lengthOfArrayLike(O);\n var A;\n aCallable(callbackfn);\n A = arraySpeciesCreate(O, 0);\n A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return A;\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.flat-map');\nrequire('../../../modules/es.array.unscopables.flat-map');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').flatMap;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/flat-map');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.flatMap;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.flatMap) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/flat-map');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/symbol/iterator\");","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.es/ecma262/#sec-set-objects\ncollection('Set', function (init) {\n return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.set');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Set;\n","'use strict';\nrequire('../modules/es.array.iterator');\nrequire('../modules/es.string.iterator');\nvar getIterator = require('../internals/get-iterator');\n\nmodule.exports = getIterator;\n","'use strict';\nvar arraySlice = require('../internals/array-slice-simple');\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n array,\n mergeSort(arraySlice(array, 0, middle), comparefn),\n mergeSort(arraySlice(array, middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n\n while (lindex < llength || rindex < rlength) {\n array[lindex + rindex] = (lindex < llength && rindex < rlength)\n ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n : lindex < llength ? left[lindex++] : right[rindex++];\n } return array;\n};\n\nmodule.exports = mergeSort;\n","'use strict';\nvar userAgent = require('../internals/engine-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n","'use strict';\nvar UA = require('../internals/engine-user-agent');\n\nmodule.exports = /MSIE|Trident/.test(UA);\n","'use strict';\nvar userAgent = require('../internals/engine-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar deletePropertyOrThrow = require('../internals/delete-property-or-throw');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar internalSort = require('../internals/array-sort');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar test = [];\nvar nativeSort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 70;\n if (FF && FF > 3) return;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 603;\n\n var result = '';\n var code, chr, value, index;\n\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n for (code = 65; code < 76; code++) {\n chr = String.fromCharCode(code);\n\n switch (code) {\n case 66: case 69: case 70: case 72: value = 3; break;\n case 68: case 71: value = 4; break;\n default: value = 2;\n }\n\n for (index = 0; index < 47; index++) {\n test.push({ k: chr + index, v: value });\n }\n }\n\n test.sort(function (a, b) { return b.v - a.v; });\n\n for (index = 0; index < test.length; index++) {\n chr = test[index].k.charAt(0);\n if (result.charAt(result.length - 1) !== chr) result += chr;\n }\n\n return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (y === undefined) return -1;\n if (x === undefined) return 1;\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n return toString(x) > toString(y) ? 1 : -1;\n };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n\n var array = toObject(this);\n\n if (STABLE_SORT) return comparefn === undefined ? nativeSort(array) : nativeSort(array, comparefn);\n\n var items = [];\n var arrayLength = lengthOfArrayLike(array);\n var itemsLength, index;\n\n for (index = 0; index < arrayLength; index++) {\n if (index in array) push(items, array[index]);\n }\n\n internalSort(items, getSortCompare(comparefn));\n\n itemsLength = lengthOfArrayLike(items);\n index = 0;\n\n while (index < itemsLength) array[index] = items[index++];\n while (index < arrayLength) deletePropertyOrThrow(array, index++);\n\n return array;\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.sort');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').sort;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/sort');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.sort;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.sort) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/sort');\n\nmodule.exports = parent;\n","'use strict';\nrequire('../../../modules/es.array.iterator');\nrequire('../../../modules/es.object.to-string');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').keys;\n","'use strict';\nrequire('../../modules/web.dom-collections.iterator');\nvar classof = require('../../internals/classof');\nvar hasOwn = require('../../internals/has-own-property');\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/keys');\n\nvar ArrayPrototype = Array.prototype;\n\nvar DOMIterables = {\n DOMTokenList: true,\n NodeList: true\n};\n\nmodule.exports = function (it) {\n var own = it.keys;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.keys)\n || hasOwn(DOMIterables, classof(it)) ? method : own;\n};\n","'use strict';\nvar parent = require('../../../es/array/virtual/keys');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/instance/keys\");","'use strict';\nrequire('../../../modules/es.array.iterator');\nrequire('../../../modules/es.object.to-string');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').values;\n","'use strict';\nrequire('../../modules/web.dom-collections.iterator');\nvar classof = require('../../internals/classof');\nvar hasOwn = require('../../internals/has-own-property');\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/values');\n\nvar ArrayPrototype = Array.prototype;\n\nvar DOMIterables = {\n DOMTokenList: true,\n NodeList: true\n};\n\nmodule.exports = function (it) {\n var own = it.values;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.values)\n || hasOwn(DOMIterables, classof(it)) ? method : own;\n};\n","'use strict';\nvar parent = require('../../../es/array/virtual/values');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/instance/values\");","'use strict';\nrequire('../../../modules/es.array.iterator');\nrequire('../../../modules/es.object.to-string');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').entries;\n","'use strict';\nrequire('../../modules/web.dom-collections.iterator');\nvar classof = require('../../internals/classof');\nvar hasOwn = require('../../internals/has-own-property');\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/entries');\n\nvar ArrayPrototype = Array.prototype;\n\nvar DOMIterables = {\n DOMTokenList: true,\n NodeList: true\n};\n\nmodule.exports = function (it) {\n var own = it.entries;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.entries)\n || hasOwn(DOMIterables, classof(it)) ? method : own;\n};\n","'use strict';\nvar parent = require('../../../es/array/virtual/entries');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/instance/entries\");","module.exports = require(\"core-js-pure/stable/object/define-property\");","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","/**\n * vis-data\n * http://visjs.org/\n *\n * Manage unstructured data using DataSet. Add, update, and remove data, and listen for changes in the data.\n *\n * @version 7.1.9\n * @date 2023-11-24T17:53:34.179Z\n *\n * @copyright (c) 2011-2017 Almende B.V, http://almende.com\n * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n *\n * @license\n * vis.js is dual licensed under both\n *\n * 1. The Apache 2.0 License\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * and\n *\n * 2. The MIT License\n * http://opensource.org/licenses/MIT\n *\n * vis.js may be distributed under either license.\n */\n\nimport { pureDeepObjectAssign } from 'vis-util/esnext/esm/vis-util.js';\nexport { DELETE } from 'vis-util/esnext/esm/vis-util.js';\nimport { v4 } from 'uuid';\n\n/**\r\n * Create new data pipe.\r\n *\r\n * @param from - The source data set or data view.\r\n * @remarks\r\n * Example usage:\r\n * ```typescript\r\n * interface AppItem {\r\n * whoami: string;\r\n * appData: unknown;\r\n * visData: VisItem;\r\n * }\r\n * interface VisItem {\r\n * id: number;\r\n * label: string;\r\n * color: string;\r\n * x: number;\r\n * y: number;\r\n * }\r\n *\r\n * const ds1 = new DataSet([], { fieldId: \"whoami\" });\r\n * const ds2 = new DataSet();\r\n *\r\n * const pipe = createNewDataPipeFrom(ds1)\r\n * .filter((item): boolean => item.enabled === true)\r\n * .map((item): VisItem => item.visData)\r\n * .to(ds2);\r\n *\r\n * pipe.start();\r\n * ```\r\n * @returns A factory whose methods can be used to configure the pipe.\r\n */\r\nfunction createNewDataPipeFrom(from) {\r\n return new DataPipeUnderConstruction(from);\r\n}\r\n/**\r\n * Internal implementation of the pipe. This should be accessible only through\r\n * `createNewDataPipeFrom` from the outside.\r\n *\r\n * @typeParam SI - Source item type.\r\n * @typeParam SP - Source item type's id property name.\r\n * @typeParam TI - Target item type.\r\n * @typeParam TP - Target item type's id property name.\r\n */\r\nclass SimpleDataPipe {\r\n _source;\r\n _transformers;\r\n _target;\r\n /**\r\n * Bound listeners for use with `DataInterface['on' | 'off']`.\r\n */\r\n _listeners = {\r\n add: this._add.bind(this),\r\n remove: this._remove.bind(this),\r\n update: this._update.bind(this),\r\n };\r\n /**\r\n * Create a new data pipe.\r\n *\r\n * @param _source - The data set or data view that will be observed.\r\n * @param _transformers - An array of transforming functions to be used to\r\n * filter or transform the items in the pipe.\r\n * @param _target - The data set or data view that will receive the items.\r\n */\r\n constructor(_source, _transformers, _target) {\r\n this._source = _source;\r\n this._transformers = _transformers;\r\n this._target = _target;\r\n }\r\n /** @inheritDoc */\r\n all() {\r\n this._target.update(this._transformItems(this._source.get()));\r\n return this;\r\n }\r\n /** @inheritDoc */\r\n start() {\r\n this._source.on(\"add\", this._listeners.add);\r\n this._source.on(\"remove\", this._listeners.remove);\r\n this._source.on(\"update\", this._listeners.update);\r\n return this;\r\n }\r\n /** @inheritDoc */\r\n stop() {\r\n this._source.off(\"add\", this._listeners.add);\r\n this._source.off(\"remove\", this._listeners.remove);\r\n this._source.off(\"update\", this._listeners.update);\r\n return this;\r\n }\r\n /**\r\n * Apply the transformers to the items.\r\n *\r\n * @param items - The items to be transformed.\r\n * @returns The transformed items.\r\n */\r\n _transformItems(items) {\r\n return this._transformers.reduce((items, transform) => {\r\n return transform(items);\r\n }, items);\r\n }\r\n /**\r\n * Handle an add event.\r\n *\r\n * @param _name - Ignored.\r\n * @param payload - The payload containing the ids of the added items.\r\n */\r\n _add(_name, payload) {\r\n if (payload == null) {\r\n return;\r\n }\r\n this._target.add(this._transformItems(this._source.get(payload.items)));\r\n }\r\n /**\r\n * Handle an update event.\r\n *\r\n * @param _name - Ignored.\r\n * @param payload - The payload containing the ids of the updated items.\r\n */\r\n _update(_name, payload) {\r\n if (payload == null) {\r\n return;\r\n }\r\n this._target.update(this._transformItems(this._source.get(payload.items)));\r\n }\r\n /**\r\n * Handle a remove event.\r\n *\r\n * @param _name - Ignored.\r\n * @param payload - The payload containing the data of the removed items.\r\n */\r\n _remove(_name, payload) {\r\n if (payload == null) {\r\n return;\r\n }\r\n this._target.remove(this._transformItems(payload.oldData));\r\n }\r\n}\r\n/**\r\n * Internal implementation of the pipe factory. This should be accessible\r\n * only through `createNewDataPipeFrom` from the outside.\r\n *\r\n * @typeParam TI - Target item type.\r\n * @typeParam TP - Target item type's id property name.\r\n */\r\nclass DataPipeUnderConstruction {\r\n _source;\r\n /**\r\n * Array transformers used to transform items within the pipe. This is typed\r\n * as any for the sake of simplicity.\r\n */\r\n _transformers = [];\r\n /**\r\n * Create a new data pipe factory. This is an internal constructor that\r\n * should never be called from outside of this file.\r\n *\r\n * @param _source - The source data set or data view for this pipe.\r\n */\r\n constructor(_source) {\r\n this._source = _source;\r\n }\r\n /**\r\n * Filter the items.\r\n *\r\n * @param callback - A filtering function that returns true if given item\r\n * should be piped and false if not.\r\n * @returns This factory for further configuration.\r\n */\r\n filter(callback) {\r\n this._transformers.push((input) => input.filter(callback));\r\n return this;\r\n }\r\n /**\r\n * Map each source item to a new type.\r\n *\r\n * @param callback - A mapping function that takes a source item and returns\r\n * corresponding mapped item.\r\n * @typeParam TI - Target item type.\r\n * @typeParam TP - Target item type's id property name.\r\n * @returns This factory for further configuration.\r\n */\r\n map(callback) {\r\n this._transformers.push((input) => input.map(callback));\r\n return this;\r\n }\r\n /**\r\n * Map each source item to zero or more items of a new type.\r\n *\r\n * @param callback - A mapping function that takes a source item and returns\r\n * an array of corresponding mapped items.\r\n * @typeParam TI - Target item type.\r\n * @typeParam TP - Target item type's id property name.\r\n * @returns This factory for further configuration.\r\n */\r\n flatMap(callback) {\r\n this._transformers.push((input) => input.flatMap(callback));\r\n return this;\r\n }\r\n /**\r\n * Connect this pipe to given data set.\r\n *\r\n * @param target - The data set that will receive the items from this pipe.\r\n * @returns The pipe connected between given data sets and performing\r\n * configured transformation on the processed items.\r\n */\r\n to(target) {\r\n return new SimpleDataPipe(this._source, this._transformers, target);\r\n }\r\n}\n\n/**\r\n * Determine whether a value can be used as an id.\r\n *\r\n * @param value - Input value of unknown type.\r\n * @returns True if the value is valid id, false otherwise.\r\n */\r\nfunction isId(value) {\r\n return typeof value === \"string\" || typeof value === \"number\";\r\n}\n\n/**\r\n * A queue.\r\n *\r\n * @typeParam T - The type of method names to be replaced by queued versions.\r\n */\r\nclass Queue {\r\n /** Delay in milliseconds. If defined the queue will be periodically flushed. */\r\n delay;\r\n /** Maximum number of entries in the queue before it will be flushed. */\r\n max;\r\n _queue = [];\r\n _timeout = null;\r\n _extended = null;\r\n /**\r\n * Construct a new Queue.\r\n *\r\n * @param options - Queue configuration.\r\n */\r\n constructor(options) {\r\n // options\r\n this.delay = null;\r\n this.max = Infinity;\r\n this.setOptions(options);\r\n }\r\n /**\r\n * Update the configuration of the queue.\r\n *\r\n * @param options - Queue configuration.\r\n */\r\n setOptions(options) {\r\n if (options && typeof options.delay !== \"undefined\") {\r\n this.delay = options.delay;\r\n }\r\n if (options && typeof options.max !== \"undefined\") {\r\n this.max = options.max;\r\n }\r\n this._flushIfNeeded();\r\n }\r\n /**\r\n * Extend an object with queuing functionality.\r\n * The object will be extended with a function flush, and the methods provided in options.replace will be replaced with queued ones.\r\n *\r\n * @param object - The object to be extended.\r\n * @param options - Additional options.\r\n * @returns The created queue.\r\n */\r\n static extend(object, options) {\r\n const queue = new Queue(options);\r\n if (object.flush !== undefined) {\r\n throw new Error(\"Target object already has a property flush\");\r\n }\r\n object.flush = () => {\r\n queue.flush();\r\n };\r\n const methods = [\r\n {\r\n name: \"flush\",\r\n original: undefined,\r\n },\r\n ];\r\n if (options && options.replace) {\r\n for (let i = 0; i < options.replace.length; i++) {\r\n const name = options.replace[i];\r\n methods.push({\r\n name: name,\r\n // @TODO: better solution?\r\n original: object[name],\r\n });\r\n // @TODO: better solution?\r\n queue.replace(object, name);\r\n }\r\n }\r\n queue._extended = {\r\n object: object,\r\n methods: methods,\r\n };\r\n return queue;\r\n }\r\n /**\r\n * Destroy the queue. The queue will first flush all queued actions, and in case it has extended an object, will restore the original object.\r\n */\r\n destroy() {\r\n this.flush();\r\n if (this._extended) {\r\n const object = this._extended.object;\r\n const methods = this._extended.methods;\r\n for (let i = 0; i < methods.length; i++) {\r\n const method = methods[i];\r\n if (method.original) {\r\n // @TODO: better solution?\r\n object[method.name] = method.original;\r\n }\r\n else {\r\n // @TODO: better solution?\r\n delete object[method.name];\r\n }\r\n }\r\n this._extended = null;\r\n }\r\n }\r\n /**\r\n * Replace a method on an object with a queued version.\r\n *\r\n * @param object - Object having the method.\r\n * @param method - The method name.\r\n */\r\n replace(object, method) {\r\n /* eslint-disable-next-line @typescript-eslint/no-this-alias -- Function this is necessary in the function bellow, so class this has to be saved into a variable here. */\r\n const me = this;\r\n const original = object[method];\r\n if (!original) {\r\n throw new Error(\"Method \" + method + \" undefined\");\r\n }\r\n object[method] = function (...args) {\r\n // add this call to the queue\r\n me.queue({\r\n args: args,\r\n fn: original,\r\n context: this,\r\n });\r\n };\r\n }\r\n /**\r\n * Queue a call.\r\n *\r\n * @param entry - The function or entry to be queued.\r\n */\r\n queue(entry) {\r\n if (typeof entry === \"function\") {\r\n this._queue.push({ fn: entry });\r\n }\r\n else {\r\n this._queue.push(entry);\r\n }\r\n this._flushIfNeeded();\r\n }\r\n /**\r\n * Check whether the queue needs to be flushed.\r\n */\r\n _flushIfNeeded() {\r\n // flush when the maximum is exceeded.\r\n if (this._queue.length > this.max) {\r\n this.flush();\r\n }\r\n // flush after a period of inactivity when a delay is configured\r\n if (this._timeout != null) {\r\n clearTimeout(this._timeout);\r\n this._timeout = null;\r\n }\r\n if (this.queue.length > 0 && typeof this.delay === \"number\") {\r\n this._timeout = setTimeout(() => {\r\n this.flush();\r\n }, this.delay);\r\n }\r\n }\r\n /**\r\n * Flush all queued calls\r\n */\r\n flush() {\r\n this._queue.splice(0).forEach((entry) => {\r\n entry.fn.apply(entry.context || entry.fn, entry.args || []);\r\n });\r\n }\r\n}\n\n/**\r\n * {@link DataSet} code that can be reused in {@link DataView} or other similar implementations of {@link DataInterface}.\r\n *\r\n * @typeParam Item - Item type that may or may not have an id.\r\n * @typeParam IdProp - Name of the property that contains the id.\r\n */\r\nclass DataSetPart {\r\n _subscribers = {\r\n \"*\": [],\r\n add: [],\r\n remove: [],\r\n update: [],\r\n };\r\n /**\r\n * Trigger an event\r\n *\r\n * @param event - Event name.\r\n * @param payload - Event payload.\r\n * @param senderId - Id of the sender.\r\n */\r\n _trigger(event, payload, senderId) {\r\n if (event === \"*\") {\r\n throw new Error(\"Cannot trigger event *\");\r\n }\r\n [...this._subscribers[event], ...this._subscribers[\"*\"]].forEach((subscriber) => {\r\n subscriber(event, payload, senderId != null ? senderId : null);\r\n });\r\n }\r\n /**\r\n * Subscribe to an event, add an event listener.\r\n *\r\n * @remarks Non-function callbacks are ignored.\r\n * @param event - Event name.\r\n * @param callback - Callback method.\r\n */\r\n on(event, callback) {\r\n if (typeof callback === \"function\") {\r\n this._subscribers[event].push(callback);\r\n }\r\n // @TODO: Maybe throw for invalid callbacks?\r\n }\r\n /**\r\n * Unsubscribe from an event, remove an event listener.\r\n *\r\n * @remarks If the same callback was subscribed more than once **all** occurences will be removed.\r\n * @param event - Event name.\r\n * @param callback - Callback method.\r\n */\r\n off(event, callback) {\r\n this._subscribers[event] = this._subscribers[event].filter((subscriber) => subscriber !== callback);\r\n }\r\n /**\r\n * @deprecated Use on instead (PS: DataView.subscribe === DataView.on).\r\n */\r\n subscribe = DataSetPart.prototype.on;\r\n /**\r\n * @deprecated Use off instead (PS: DataView.unsubscribe === DataView.off).\r\n */\r\n unsubscribe = DataSetPart.prototype.off;\r\n}\n\n/**\r\n * Data stream\r\n *\r\n * @remarks\r\n * {@link DataStream} offers an always up to date stream of items from a {@link DataSet} or {@link DataView}.\r\n * That means that the stream is evaluated at the time of iteration, conversion to another data type or when {@link cache} is called, not when the {@link DataStream} was created.\r\n * Multiple invocations of for example {@link toItemArray} may yield different results (if the data source like for example {@link DataSet} gets modified).\r\n * @typeParam Item - The item type this stream is going to work with.\r\n */\r\nclass DataStream {\r\n _pairs;\r\n /**\r\n * Create a new data stream.\r\n *\r\n * @param pairs - The id, item pairs.\r\n */\r\n constructor(pairs) {\r\n this._pairs = pairs;\r\n }\r\n /**\r\n * Return an iterable of key, value pairs for every entry in the stream.\r\n */\r\n *[Symbol.iterator]() {\r\n for (const [id, item] of this._pairs) {\r\n yield [id, item];\r\n }\r\n }\r\n /**\r\n * Return an iterable of key, value pairs for every entry in the stream.\r\n */\r\n *entries() {\r\n for (const [id, item] of this._pairs) {\r\n yield [id, item];\r\n }\r\n }\r\n /**\r\n * Return an iterable of keys in the stream.\r\n */\r\n *keys() {\r\n for (const [id] of this._pairs) {\r\n yield id;\r\n }\r\n }\r\n /**\r\n * Return an iterable of values in the stream.\r\n */\r\n *values() {\r\n for (const [, item] of this._pairs) {\r\n yield item;\r\n }\r\n }\r\n /**\r\n * Return an array containing all the ids in this stream.\r\n *\r\n * @remarks\r\n * The array may contain duplicities.\r\n * @returns The array with all ids from this stream.\r\n */\r\n toIdArray() {\r\n return [...this._pairs].map((pair) => pair[0]);\r\n }\r\n /**\r\n * Return an array containing all the items in this stream.\r\n *\r\n * @remarks\r\n * The array may contain duplicities.\r\n * @returns The array with all items from this stream.\r\n */\r\n toItemArray() {\r\n return [...this._pairs].map((pair) => pair[1]);\r\n }\r\n /**\r\n * Return an array containing all the entries in this stream.\r\n *\r\n * @remarks\r\n * The array may contain duplicities.\r\n * @returns The array with all entries from this stream.\r\n */\r\n toEntryArray() {\r\n return [...this._pairs];\r\n }\r\n /**\r\n * Return an object map containing all the items in this stream accessible by ids.\r\n *\r\n * @remarks\r\n * In case of duplicate ids (coerced to string so `7 == '7'`) the last encoutered appears in the returned object.\r\n * @returns The object map of all id → item pairs from this stream.\r\n */\r\n toObjectMap() {\r\n const map = Object.create(null);\r\n for (const [id, item] of this._pairs) {\r\n map[id] = item;\r\n }\r\n return map;\r\n }\r\n /**\r\n * Return a map containing all the items in this stream accessible by ids.\r\n *\r\n * @returns The map of all id → item pairs from this stream.\r\n */\r\n toMap() {\r\n return new Map(this._pairs);\r\n }\r\n /**\r\n * Return a set containing all the (unique) ids in this stream.\r\n *\r\n * @returns The set of all ids from this stream.\r\n */\r\n toIdSet() {\r\n return new Set(this.toIdArray());\r\n }\r\n /**\r\n * Return a set containing all the (unique) items in this stream.\r\n *\r\n * @returns The set of all items from this stream.\r\n */\r\n toItemSet() {\r\n return new Set(this.toItemArray());\r\n }\r\n /**\r\n * Cache the items from this stream.\r\n *\r\n * @remarks\r\n * This method allows for items to be fetched immediatelly and used (possibly multiple times) later.\r\n * It can also be used to optimize performance as {@link DataStream} would otherwise reevaluate everything upon each iteration.\r\n *\r\n * ## Example\r\n * ```javascript\r\n * const ds = new DataSet([…])\r\n *\r\n * const cachedStream = ds.stream()\r\n * .filter(…)\r\n * .sort(…)\r\n * .map(…)\r\n * .cached(…) // Data are fetched, processed and cached here.\r\n *\r\n * ds.clear()\r\n * chachedStream // Still has all the items.\r\n * ```\r\n * @returns A new {@link DataStream} with cached items (detached from the original {@link DataSet}).\r\n */\r\n cache() {\r\n return new DataStream([...this._pairs]);\r\n }\r\n /**\r\n * Get the distinct values of given property.\r\n *\r\n * @param callback - The function that picks and possibly converts the property.\r\n * @typeParam T - The type of the distinct value.\r\n * @returns A set of all distinct properties.\r\n */\r\n distinct(callback) {\r\n const set = new Set();\r\n for (const [id, item] of this._pairs) {\r\n set.add(callback(item, id));\r\n }\r\n return set;\r\n }\r\n /**\r\n * Filter the items of the stream.\r\n *\r\n * @param callback - The function that decides whether an item will be included.\r\n * @returns A new data stream with the filtered items.\r\n */\r\n filter(callback) {\r\n const pairs = this._pairs;\r\n return new DataStream({\r\n *[Symbol.iterator]() {\r\n for (const [id, item] of pairs) {\r\n if (callback(item, id)) {\r\n yield [id, item];\r\n }\r\n }\r\n },\r\n });\r\n }\r\n /**\r\n * Execute a callback for each item of the stream.\r\n *\r\n * @param callback - The function that will be invoked for each item.\r\n */\r\n forEach(callback) {\r\n for (const [id, item] of this._pairs) {\r\n callback(item, id);\r\n }\r\n }\r\n /**\r\n * Map the items into a different type.\r\n *\r\n * @param callback - The function that does the conversion.\r\n * @typeParam Mapped - The type of the item after mapping.\r\n * @returns A new data stream with the mapped items.\r\n */\r\n map(callback) {\r\n const pairs = this._pairs;\r\n return new DataStream({\r\n *[Symbol.iterator]() {\r\n for (const [id, item] of pairs) {\r\n yield [id, callback(item, id)];\r\n }\r\n },\r\n });\r\n }\r\n /**\r\n * Get the item with the maximum value of given property.\r\n *\r\n * @param callback - The function that picks and possibly converts the property.\r\n * @returns The item with the maximum if found otherwise null.\r\n */\r\n max(callback) {\r\n const iter = this._pairs[Symbol.iterator]();\r\n let curr = iter.next();\r\n if (curr.done) {\r\n return null;\r\n }\r\n let maxItem = curr.value[1];\r\n let maxValue = callback(curr.value[1], curr.value[0]);\r\n while (!(curr = iter.next()).done) {\r\n const [id, item] = curr.value;\r\n const value = callback(item, id);\r\n if (value > maxValue) {\r\n maxValue = value;\r\n maxItem = item;\r\n }\r\n }\r\n return maxItem;\r\n }\r\n /**\r\n * Get the item with the minimum value of given property.\r\n *\r\n * @param callback - The function that picks and possibly converts the property.\r\n * @returns The item with the minimum if found otherwise null.\r\n */\r\n min(callback) {\r\n const iter = this._pairs[Symbol.iterator]();\r\n let curr = iter.next();\r\n if (curr.done) {\r\n return null;\r\n }\r\n let minItem = curr.value[1];\r\n let minValue = callback(curr.value[1], curr.value[0]);\r\n while (!(curr = iter.next()).done) {\r\n const [id, item] = curr.value;\r\n const value = callback(item, id);\r\n if (value < minValue) {\r\n minValue = value;\r\n minItem = item;\r\n }\r\n }\r\n return minItem;\r\n }\r\n /**\r\n * Reduce the items into a single value.\r\n *\r\n * @param callback - The function that does the reduction.\r\n * @param accumulator - The initial value of the accumulator.\r\n * @typeParam T - The type of the accumulated value.\r\n * @returns The reduced value.\r\n */\r\n reduce(callback, accumulator) {\r\n for (const [id, item] of this._pairs) {\r\n accumulator = callback(accumulator, item, id);\r\n }\r\n return accumulator;\r\n }\r\n /**\r\n * Sort the items.\r\n *\r\n * @param callback - Item comparator.\r\n * @returns A new stream with sorted items.\r\n */\r\n sort(callback) {\r\n return new DataStream({\r\n [Symbol.iterator]: () => [...this._pairs]\r\n .sort(([idA, itemA], [idB, itemB]) => callback(itemA, itemB, idA, idB))[Symbol.iterator](),\r\n });\r\n }\r\n}\n\n/**\r\n * Add an id to given item if it doesn't have one already.\r\n *\r\n * @remarks\r\n * The item will be modified.\r\n * @param item - The item that will have an id after a call to this function.\r\n * @param idProp - The key of the id property.\r\n * @typeParam Item - Item type that may or may not have an id.\r\n * @typeParam IdProp - Name of the property that contains the id.\r\n * @returns true\r\n */\r\nfunction ensureFullItem(item, idProp) {\r\n if (item[idProp] == null) {\r\n // generate an id\r\n item[idProp] = v4();\r\n }\r\n return item;\r\n}\r\n/**\r\n * # DataSet\r\n *\r\n * Vis.js comes with a flexible DataSet, which can be used to hold and\r\n * manipulate unstructured data and listen for changes in the data. The DataSet\r\n * is key/value based. Data items can be added, updated and removed from the\r\n * DataSet, and one can subscribe to changes in the DataSet. The data in the\r\n * DataSet can be filtered and ordered. Data can be normalized when appending it\r\n * to the DataSet as well.\r\n *\r\n * ## Example\r\n *\r\n * The following example shows how to use a DataSet.\r\n *\r\n * ```javascript\r\n * // create a DataSet\r\n * var options = {};\r\n * var data = new vis.DataSet(options);\r\n *\r\n * // add items\r\n * // note that the data items can contain different properties and data formats\r\n * data.add([\r\n * {id: 1, text: 'item 1', date: new Date(2013, 6, 20), group: 1, first: true},\r\n * {id: 2, text: 'item 2', date: '2013-06-23', group: 2},\r\n * {id: 3, text: 'item 3', date: '2013-06-25', group: 2},\r\n * {id: 4, text: 'item 4'}\r\n * ]);\r\n *\r\n * // subscribe to any change in the DataSet\r\n * data.on('*', function (event, properties, senderId) {\r\n * console.log('event', event, properties);\r\n * });\r\n *\r\n * // update an existing item\r\n * data.update({id: 2, group: 1});\r\n *\r\n * // remove an item\r\n * data.remove(4);\r\n *\r\n * // get all ids\r\n * var ids = data.getIds();\r\n * console.log('ids', ids);\r\n *\r\n * // get a specific item\r\n * var item1 = data.get(1);\r\n * console.log('item1', item1);\r\n *\r\n * // retrieve a filtered subset of the data\r\n * var items = data.get({\r\n * filter: function (item) {\r\n * return item.group == 1;\r\n * }\r\n * });\r\n * console.log('filtered items', items);\r\n * ```\r\n *\r\n * @typeParam Item - Item type that may or may not have an id.\r\n * @typeParam IdProp - Name of the property that contains the id.\r\n */\r\nclass DataSet extends DataSetPart {\r\n /** Flush all queued calls. */\r\n flush;\r\n /** @inheritDoc */\r\n length;\r\n /** @inheritDoc */\r\n get idProp() {\r\n return this._idProp;\r\n }\r\n _options;\r\n _data;\r\n _idProp;\r\n _queue = null;\r\n /**\r\n * Construct a new DataSet.\r\n *\r\n * @param data - Initial data or options.\r\n * @param options - Options (type error if data is also options).\r\n */\r\n constructor(data, options) {\r\n super();\r\n // correctly read optional arguments\r\n if (data && !Array.isArray(data)) {\r\n options = data;\r\n data = [];\r\n }\r\n this._options = options || {};\r\n this._data = new Map(); // map with data indexed by id\r\n this.length = 0; // number of items in the DataSet\r\n this._idProp = this._options.fieldId || \"id\"; // name of the field containing id\r\n // add initial data when provided\r\n if (data && data.length) {\r\n this.add(data);\r\n }\r\n this.setOptions(options);\r\n }\r\n /**\r\n * Set new options.\r\n *\r\n * @param options - The new options.\r\n */\r\n setOptions(options) {\r\n if (options && options.queue !== undefined) {\r\n if (options.queue === false) {\r\n // delete queue if loaded\r\n if (this._queue) {\r\n this._queue.destroy();\r\n this._queue = null;\r\n }\r\n }\r\n else {\r\n // create queue and update its options\r\n if (!this._queue) {\r\n this._queue = Queue.extend(this, {\r\n replace: [\"add\", \"update\", \"remove\"],\r\n });\r\n }\r\n if (options.queue && typeof options.queue === \"object\") {\r\n this._queue.setOptions(options.queue);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Add a data item or an array with items.\r\n *\r\n * After the items are added to the DataSet, the DataSet will trigger an event `add`. When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\r\n *\r\n * ## Example\r\n *\r\n * ```javascript\r\n * // create a DataSet\r\n * const data = new vis.DataSet()\r\n *\r\n * // add items\r\n * const ids = data.add([\r\n * { id: 1, text: 'item 1' },\r\n * { id: 2, text: 'item 2' },\r\n * { text: 'item without an id' }\r\n * ])\r\n *\r\n * console.log(ids) // [1, 2, '']\r\n * ```\r\n *\r\n * @param data - Items to be added (ids will be generated if missing).\r\n * @param senderId - Sender id.\r\n * @returns addedIds - Array with the ids (generated if not present) of the added items.\r\n * @throws When an item with the same id as any of the added items already exists.\r\n */\r\n add(data, senderId) {\r\n const addedIds = [];\r\n let id;\r\n if (Array.isArray(data)) {\r\n // Array\r\n const idsToAdd = data.map((d) => d[this._idProp]);\r\n if (idsToAdd.some((id) => this._data.has(id))) {\r\n throw new Error(\"A duplicate id was found in the parameter array.\");\r\n }\r\n for (let i = 0, len = data.length; i < len; i++) {\r\n id = this._addItem(data[i]);\r\n addedIds.push(id);\r\n }\r\n }\r\n else if (data && typeof data === \"object\") {\r\n // Single item\r\n id = this._addItem(data);\r\n addedIds.push(id);\r\n }\r\n else {\r\n throw new Error(\"Unknown dataType\");\r\n }\r\n if (addedIds.length) {\r\n this._trigger(\"add\", { items: addedIds }, senderId);\r\n }\r\n return addedIds;\r\n }\r\n /**\r\n * Update existing items. When an item does not exist, it will be created.\r\n *\r\n * @remarks\r\n * The provided properties will be merged in the existing item. When an item does not exist, it will be created.\r\n *\r\n * After the items are updated, the DataSet will trigger an event `add` for the added items, and an event `update`. When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\r\n *\r\n * ## Example\r\n *\r\n * ```javascript\r\n * // create a DataSet\r\n * const data = new vis.DataSet([\r\n * { id: 1, text: 'item 1' },\r\n * { id: 2, text: 'item 2' },\r\n * { id: 3, text: 'item 3' }\r\n * ])\r\n *\r\n * // update items\r\n * const ids = data.update([\r\n * { id: 2, text: 'item 2 (updated)' },\r\n * { id: 4, text: 'item 4 (new)' }\r\n * ])\r\n *\r\n * console.log(ids) // [2, 4]\r\n * ```\r\n *\r\n * ## Warning for TypeScript users\r\n * This method may introduce partial items into the data set. Use add or updateOnly instead for better type safety.\r\n * @param data - Items to be updated (if the id is already present) or added (if the id is missing).\r\n * @param senderId - Sender id.\r\n * @returns updatedIds - The ids of the added (these may be newly generated if there was no id in the item from the data) or updated items.\r\n * @throws When the supplied data is neither an item nor an array of items.\r\n */\r\n update(data, senderId) {\r\n const addedIds = [];\r\n const updatedIds = [];\r\n const oldData = [];\r\n const updatedData = [];\r\n const idProp = this._idProp;\r\n const addOrUpdate = (item) => {\r\n const origId = item[idProp];\r\n if (origId != null && this._data.has(origId)) {\r\n const fullItem = item; // it has an id, therefore it is a fullitem\r\n const oldItem = Object.assign({}, this._data.get(origId));\r\n // update item\r\n const id = this._updateItem(fullItem);\r\n updatedIds.push(id);\r\n updatedData.push(fullItem);\r\n oldData.push(oldItem);\r\n }\r\n else {\r\n // add new item\r\n const id = this._addItem(item);\r\n addedIds.push(id);\r\n }\r\n };\r\n if (Array.isArray(data)) {\r\n // Array\r\n for (let i = 0, len = data.length; i < len; i++) {\r\n if (data[i] && typeof data[i] === \"object\") {\r\n addOrUpdate(data[i]);\r\n }\r\n else {\r\n console.warn(\"Ignoring input item, which is not an object at index \" + i);\r\n }\r\n }\r\n }\r\n else if (data && typeof data === \"object\") {\r\n // Single item\r\n addOrUpdate(data);\r\n }\r\n else {\r\n throw new Error(\"Unknown dataType\");\r\n }\r\n if (addedIds.length) {\r\n this._trigger(\"add\", { items: addedIds }, senderId);\r\n }\r\n if (updatedIds.length) {\r\n const props = { items: updatedIds, oldData: oldData, data: updatedData };\r\n // TODO: remove deprecated property 'data' some day\r\n //Object.defineProperty(props, 'data', {\r\n // 'get': (function() {\r\n // console.warn('Property data is deprecated. Use DataSet.get(ids) to retrieve the new data, use the oldData property on this object to get the old data');\r\n // return updatedData;\r\n // }).bind(this)\r\n //});\r\n this._trigger(\"update\", props, senderId);\r\n }\r\n return addedIds.concat(updatedIds);\r\n }\r\n /**\r\n * Update existing items. When an item does not exist, an error will be thrown.\r\n *\r\n * @remarks\r\n * The provided properties will be deeply merged into the existing item.\r\n * When an item does not exist (id not present in the data set or absent), an error will be thrown and nothing will be changed.\r\n *\r\n * After the items are updated, the DataSet will trigger an event `update`.\r\n * When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\r\n *\r\n * ## Example\r\n *\r\n * ```javascript\r\n * // create a DataSet\r\n * const data = new vis.DataSet([\r\n * { id: 1, text: 'item 1' },\r\n * { id: 2, text: 'item 2' },\r\n * { id: 3, text: 'item 3' },\r\n * ])\r\n *\r\n * // update items\r\n * const ids = data.update([\r\n * { id: 2, text: 'item 2 (updated)' }, // works\r\n * // { id: 4, text: 'item 4 (new)' }, // would throw\r\n * // { text: 'item 4 (new)' }, // would also throw\r\n * ])\r\n *\r\n * console.log(ids) // [2]\r\n * ```\r\n * @param data - Updates (the id and optionally other props) to the items in this data set.\r\n * @param senderId - Sender id.\r\n * @returns updatedIds - The ids of the updated items.\r\n * @throws When the supplied data is neither an item nor an array of items, when the ids are missing.\r\n */\r\n updateOnly(data, senderId) {\r\n if (!Array.isArray(data)) {\r\n data = [data];\r\n }\r\n const updateEventData = data\r\n .map((update) => {\r\n const oldData = this._data.get(update[this._idProp]);\r\n if (oldData == null) {\r\n throw new Error(\"Updating non-existent items is not allowed.\");\r\n }\r\n return { oldData, update };\r\n })\r\n .map(({ oldData, update, }) => {\r\n const id = oldData[this._idProp];\r\n const updatedData = pureDeepObjectAssign(oldData, update);\r\n this._data.set(id, updatedData);\r\n return {\r\n id,\r\n oldData: oldData,\r\n updatedData,\r\n };\r\n });\r\n if (updateEventData.length) {\r\n const props = {\r\n items: updateEventData.map((value) => value.id),\r\n oldData: updateEventData.map((value) => value.oldData),\r\n data: updateEventData.map((value) => value.updatedData),\r\n };\r\n // TODO: remove deprecated property 'data' some day\r\n //Object.defineProperty(props, 'data', {\r\n // 'get': (function() {\r\n // console.warn('Property data is deprecated. Use DataSet.get(ids) to retrieve the new data, use the oldData property on this object to get the old data');\r\n // return updatedData;\r\n // }).bind(this)\r\n //});\r\n this._trigger(\"update\", props, senderId);\r\n return props.items;\r\n }\r\n else {\r\n return [];\r\n }\r\n }\r\n /** @inheritDoc */\r\n get(first, second) {\r\n // @TODO: Woudn't it be better to split this into multiple methods?\r\n // parse the arguments\r\n let id = undefined;\r\n let ids = undefined;\r\n let options = undefined;\r\n if (isId(first)) {\r\n // get(id [, options])\r\n id = first;\r\n options = second;\r\n }\r\n else if (Array.isArray(first)) {\r\n // get(ids [, options])\r\n ids = first;\r\n options = second;\r\n }\r\n else {\r\n // get([, options])\r\n options = first;\r\n }\r\n // determine the return type\r\n const returnType = options && options.returnType === \"Object\" ? \"Object\" : \"Array\";\r\n // @TODO: WTF is this? Or am I missing something?\r\n // var returnType\r\n // if (options && options.returnType) {\r\n // var allowedValues = ['Array', 'Object']\r\n // returnType =\r\n // allowedValues.indexOf(options.returnType) == -1\r\n // ? 'Array'\r\n // : options.returnType\r\n // } else {\r\n // returnType = 'Array'\r\n // }\r\n // build options\r\n const filter = options && options.filter;\r\n const items = [];\r\n let item = undefined;\r\n let itemIds = undefined;\r\n let itemId = undefined;\r\n // convert items\r\n if (id != null) {\r\n // return a single item\r\n item = this._data.get(id);\r\n if (item && filter && !filter(item)) {\r\n item = undefined;\r\n }\r\n }\r\n else if (ids != null) {\r\n // return a subset of items\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n item = this._data.get(ids[i]);\r\n if (item != null && (!filter || filter(item))) {\r\n items.push(item);\r\n }\r\n }\r\n }\r\n else {\r\n // return all items\r\n itemIds = [...this._data.keys()];\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n itemId = itemIds[i];\r\n item = this._data.get(itemId);\r\n if (item != null && (!filter || filter(item))) {\r\n items.push(item);\r\n }\r\n }\r\n }\r\n // order the results\r\n if (options && options.order && id == undefined) {\r\n this._sort(items, options.order);\r\n }\r\n // filter fields of the items\r\n if (options && options.fields) {\r\n const fields = options.fields;\r\n if (id != undefined && item != null) {\r\n item = this._filterFields(item, fields);\r\n }\r\n else {\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n items[i] = this._filterFields(items[i], fields);\r\n }\r\n }\r\n }\r\n // return the results\r\n if (returnType == \"Object\") {\r\n const result = {};\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n const resultant = items[i];\r\n // @TODO: Shoudn't this be this._fieldId?\r\n // result[resultant.id] = resultant\r\n const id = resultant[this._idProp];\r\n result[id] = resultant;\r\n }\r\n return result;\r\n }\r\n else {\r\n if (id != null) {\r\n // a single item\r\n return item ?? null;\r\n }\r\n else {\r\n // just return our array\r\n return items;\r\n }\r\n }\r\n }\r\n /** @inheritDoc */\r\n getIds(options) {\r\n const data = this._data;\r\n const filter = options && options.filter;\r\n const order = options && options.order;\r\n const itemIds = [...data.keys()];\r\n const ids = [];\r\n if (filter) {\r\n // get filtered items\r\n if (order) {\r\n // create ordered list\r\n const items = [];\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n const item = this._data.get(id);\r\n if (item != null && filter(item)) {\r\n items.push(item);\r\n }\r\n }\r\n this._sort(items, order);\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n ids.push(items[i][this._idProp]);\r\n }\r\n }\r\n else {\r\n // create unordered list\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n const item = this._data.get(id);\r\n if (item != null && filter(item)) {\r\n ids.push(item[this._idProp]);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n // get all items\r\n if (order) {\r\n // create an ordered list\r\n const items = [];\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n items.push(data.get(id));\r\n }\r\n this._sort(items, order);\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n ids.push(items[i][this._idProp]);\r\n }\r\n }\r\n else {\r\n // create unordered list\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n const item = data.get(id);\r\n if (item != null) {\r\n ids.push(item[this._idProp]);\r\n }\r\n }\r\n }\r\n }\r\n return ids;\r\n }\r\n /** @inheritDoc */\r\n getDataSet() {\r\n return this;\r\n }\r\n /** @inheritDoc */\r\n forEach(callback, options) {\r\n const filter = options && options.filter;\r\n const data = this._data;\r\n const itemIds = [...data.keys()];\r\n if (options && options.order) {\r\n // execute forEach on ordered list\r\n const items = this.get(options);\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n const item = items[i];\r\n const id = item[this._idProp];\r\n callback(item, id);\r\n }\r\n }\r\n else {\r\n // unordered\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n const item = this._data.get(id);\r\n if (item != null && (!filter || filter(item))) {\r\n callback(item, id);\r\n }\r\n }\r\n }\r\n }\r\n /** @inheritDoc */\r\n map(callback, options) {\r\n const filter = options && options.filter;\r\n const mappedItems = [];\r\n const data = this._data;\r\n const itemIds = [...data.keys()];\r\n // convert and filter items\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n const item = this._data.get(id);\r\n if (item != null && (!filter || filter(item))) {\r\n mappedItems.push(callback(item, id));\r\n }\r\n }\r\n // order items\r\n if (options && options.order) {\r\n this._sort(mappedItems, options.order);\r\n }\r\n return mappedItems;\r\n }\r\n /**\r\n * Filter the fields of an item.\r\n *\r\n * @param item - The item whose fields should be filtered.\r\n * @param fields - The names of the fields that will be kept.\r\n * @typeParam K - Field name type.\r\n * @returns The item without any additional fields.\r\n */\r\n _filterFields(item, fields) {\r\n if (!item) {\r\n // item is null\r\n return item;\r\n }\r\n return (Array.isArray(fields)\r\n ? // Use the supplied array\r\n fields\r\n : // Use the keys of the supplied object\r\n Object.keys(fields)).reduce((filteredItem, field) => {\r\n filteredItem[field] = item[field];\r\n return filteredItem;\r\n }, {});\r\n }\r\n /**\r\n * Sort the provided array with items.\r\n *\r\n * @param items - Items to be sorted in place.\r\n * @param order - A field name or custom sort function.\r\n * @typeParam T - The type of the items in the items array.\r\n */\r\n _sort(items, order) {\r\n if (typeof order === \"string\") {\r\n // order by provided field name\r\n const name = order; // field name\r\n items.sort((a, b) => {\r\n // @TODO: How to treat missing properties?\r\n const av = a[name];\r\n const bv = b[name];\r\n return av > bv ? 1 : av < bv ? -1 : 0;\r\n });\r\n }\r\n else if (typeof order === \"function\") {\r\n // order by sort function\r\n items.sort(order);\r\n }\r\n else {\r\n // TODO: extend order by an Object {field:string, direction:string}\r\n // where direction can be 'asc' or 'desc'\r\n throw new TypeError(\"Order must be a function or a string\");\r\n }\r\n }\r\n /**\r\n * Remove an item or multiple items by “reference” (only the id is used) or by id.\r\n *\r\n * The method ignores removal of non-existing items, and returns an array containing the ids of the items which are actually removed from the DataSet.\r\n *\r\n * After the items are removed, the DataSet will trigger an event `remove` for the removed items. When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\r\n *\r\n * ## Example\r\n * ```javascript\r\n * // create a DataSet\r\n * const data = new vis.DataSet([\r\n * { id: 1, text: 'item 1' },\r\n * { id: 2, text: 'item 2' },\r\n * { id: 3, text: 'item 3' }\r\n * ])\r\n *\r\n * // remove items\r\n * const ids = data.remove([2, { id: 3 }, 4])\r\n *\r\n * console.log(ids) // [2, 3]\r\n * ```\r\n *\r\n * @param id - One or more items or ids of items to be removed.\r\n * @param senderId - Sender id.\r\n * @returns The ids of the removed items.\r\n */\r\n remove(id, senderId) {\r\n const removedIds = [];\r\n const removedItems = [];\r\n // force everything to be an array for simplicity\r\n const ids = Array.isArray(id) ? id : [id];\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n const item = this._remove(ids[i]);\r\n if (item) {\r\n const itemId = item[this._idProp];\r\n if (itemId != null) {\r\n removedIds.push(itemId);\r\n removedItems.push(item);\r\n }\r\n }\r\n }\r\n if (removedIds.length) {\r\n this._trigger(\"remove\", { items: removedIds, oldData: removedItems }, senderId);\r\n }\r\n return removedIds;\r\n }\r\n /**\r\n * Remove an item by its id or reference.\r\n *\r\n * @param id - Id of an item or the item itself.\r\n * @returns The removed item if removed, null otherwise.\r\n */\r\n _remove(id) {\r\n // @TODO: It origianlly returned the item although the docs say id.\r\n // The code expects the item, so probably an error in the docs.\r\n let ident;\r\n // confirm the id to use based on the args type\r\n if (isId(id)) {\r\n ident = id;\r\n }\r\n else if (id && typeof id === \"object\") {\r\n ident = id[this._idProp]; // look for the identifier field using ._idProp\r\n }\r\n // do the removing if the item is found\r\n if (ident != null && this._data.has(ident)) {\r\n const item = this._data.get(ident) || null;\r\n this._data.delete(ident);\r\n --this.length;\r\n return item;\r\n }\r\n return null;\r\n }\r\n /**\r\n * Clear the entire data set.\r\n *\r\n * After the items are removed, the {@link DataSet} will trigger an event `remove` for all removed items. When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\r\n *\r\n * @param senderId - Sender id.\r\n * @returns removedIds - The ids of all removed items.\r\n */\r\n clear(senderId) {\r\n const ids = [...this._data.keys()];\r\n const items = [];\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n items.push(this._data.get(ids[i]));\r\n }\r\n this._data.clear();\r\n this.length = 0;\r\n this._trigger(\"remove\", { items: ids, oldData: items }, senderId);\r\n return ids;\r\n }\r\n /**\r\n * Find the item with maximum value of a specified field.\r\n *\r\n * @param field - Name of the property that should be searched for max value.\r\n * @returns Item containing max value, or null if no items.\r\n */\r\n max(field) {\r\n let max = null;\r\n let maxField = null;\r\n for (const item of this._data.values()) {\r\n const itemField = item[field];\r\n if (typeof itemField === \"number\" &&\r\n (maxField == null || itemField > maxField)) {\r\n max = item;\r\n maxField = itemField;\r\n }\r\n }\r\n return max || null;\r\n }\r\n /**\r\n * Find the item with minimum value of a specified field.\r\n *\r\n * @param field - Name of the property that should be searched for min value.\r\n * @returns Item containing min value, or null if no items.\r\n */\r\n min(field) {\r\n let min = null;\r\n let minField = null;\r\n for (const item of this._data.values()) {\r\n const itemField = item[field];\r\n if (typeof itemField === \"number\" &&\r\n (minField == null || itemField < minField)) {\r\n min = item;\r\n minField = itemField;\r\n }\r\n }\r\n return min || null;\r\n }\r\n /**\r\n * Find all distinct values of a specified field\r\n *\r\n * @param prop - The property name whose distinct values should be returned.\r\n * @returns Unordered array containing all distinct values. Items without specified property are ignored.\r\n */\r\n distinct(prop) {\r\n const data = this._data;\r\n const itemIds = [...data.keys()];\r\n const values = [];\r\n let count = 0;\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n const item = data.get(id);\r\n const value = item[prop];\r\n let exists = false;\r\n for (let j = 0; j < count; j++) {\r\n if (values[j] == value) {\r\n exists = true;\r\n break;\r\n }\r\n }\r\n if (!exists && value !== undefined) {\r\n values[count] = value;\r\n count++;\r\n }\r\n }\r\n return values;\r\n }\r\n /**\r\n * Add a single item. Will fail when an item with the same id already exists.\r\n *\r\n * @param item - A new item to be added.\r\n * @returns Added item's id. An id is generated when it is not present in the item.\r\n */\r\n _addItem(item) {\r\n const fullItem = ensureFullItem(item, this._idProp);\r\n const id = fullItem[this._idProp];\r\n // check whether this id is already taken\r\n if (this._data.has(id)) {\r\n // item already exists\r\n throw new Error(\"Cannot add item: item with id \" + id + \" already exists\");\r\n }\r\n this._data.set(id, fullItem);\r\n ++this.length;\r\n return id;\r\n }\r\n /**\r\n * Update a single item: merge with existing item.\r\n * Will fail when the item has no id, or when there does not exist an item with the same id.\r\n *\r\n * @param update - The new item\r\n * @returns The id of the updated item.\r\n */\r\n _updateItem(update) {\r\n const id = update[this._idProp];\r\n if (id == null) {\r\n throw new Error(\"Cannot update item: item has no id (item: \" +\r\n JSON.stringify(update) +\r\n \")\");\r\n }\r\n const item = this._data.get(id);\r\n if (!item) {\r\n // item doesn't exist\r\n throw new Error(\"Cannot update item: no item with id \" + id + \" found\");\r\n }\r\n this._data.set(id, { ...item, ...update });\r\n return id;\r\n }\r\n /** @inheritDoc */\r\n stream(ids) {\r\n if (ids) {\r\n const data = this._data;\r\n return new DataStream({\r\n *[Symbol.iterator]() {\r\n for (const id of ids) {\r\n const item = data.get(id);\r\n if (item != null) {\r\n yield [id, item];\r\n }\r\n }\r\n },\r\n });\r\n }\r\n else {\r\n return new DataStream({\r\n [Symbol.iterator]: this._data.entries.bind(this._data),\r\n });\r\n }\r\n }\r\n}\n\n/**\r\n * DataView\r\n *\r\n * A DataView offers a filtered and/or formatted view on a DataSet. One can subscribe to changes in a DataView, and easily get filtered or formatted data without having to specify filters and field types all the time.\r\n *\r\n * ## Example\r\n * ```javascript\r\n * // create a DataSet\r\n * var data = new vis.DataSet();\r\n * data.add([\r\n * {id: 1, text: 'item 1', date: new Date(2013, 6, 20), group: 1, first: true},\r\n * {id: 2, text: 'item 2', date: '2013-06-23', group: 2},\r\n * {id: 3, text: 'item 3', date: '2013-06-25', group: 2},\r\n * {id: 4, text: 'item 4'}\r\n * ]);\r\n *\r\n * // create a DataView\r\n * // the view will only contain items having a property group with value 1,\r\n * // and will only output fields id, text, and date.\r\n * var view = new vis.DataView(data, {\r\n * filter: function (item) {\r\n * return (item.group == 1);\r\n * },\r\n * fields: ['id', 'text', 'date']\r\n * });\r\n *\r\n * // subscribe to any change in the DataView\r\n * view.on('*', function (event, properties, senderId) {\r\n * console.log('event', event, properties);\r\n * });\r\n *\r\n * // update an item in the data set\r\n * data.update({id: 2, group: 1});\r\n *\r\n * // get all ids in the view\r\n * var ids = view.getIds();\r\n * console.log('ids', ids); // will output [1, 2]\r\n *\r\n * // get all items in the view\r\n * var items = view.get();\r\n * ```\r\n *\r\n * @typeParam Item - Item type that may or may not have an id.\r\n * @typeParam IdProp - Name of the property that contains the id.\r\n */\r\nclass DataView extends DataSetPart {\r\n /** @inheritDoc */\r\n length = 0;\r\n /** @inheritDoc */\r\n get idProp() {\r\n return this.getDataSet().idProp;\r\n }\r\n _listener;\r\n _data; // constructor → setData\r\n _ids = new Set(); // ids of the items currently in memory (just contains a boolean true)\r\n _options;\r\n /**\r\n * Create a DataView.\r\n *\r\n * @param data - The instance containing data (directly or indirectly).\r\n * @param options - Options to configure this data view.\r\n */\r\n constructor(data, options) {\r\n super();\r\n this._options = options || {};\r\n this._listener = this._onEvent.bind(this);\r\n this.setData(data);\r\n }\r\n // TODO: implement a function .config() to dynamically update things like configured filter\r\n // and trigger changes accordingly\r\n /**\r\n * Set a data source for the view.\r\n *\r\n * @param data - The instance containing data (directly or indirectly).\r\n * @remarks\r\n * Note that when the data view is bound to a data set it won't be garbage\r\n * collected unless the data set is too. Use `dataView.setData(null)` or\r\n * `dataView.dispose()` to enable garbage collection before you lose the last\r\n * reference.\r\n */\r\n setData(data) {\r\n if (this._data) {\r\n // unsubscribe from current dataset\r\n if (this._data.off) {\r\n this._data.off(\"*\", this._listener);\r\n }\r\n // trigger a remove of all items in memory\r\n const ids = this._data.getIds({ filter: this._options.filter });\r\n const items = this._data.get(ids);\r\n this._ids.clear();\r\n this.length = 0;\r\n this._trigger(\"remove\", { items: ids, oldData: items });\r\n }\r\n if (data != null) {\r\n this._data = data;\r\n // trigger an add of all added items\r\n const ids = this._data.getIds({ filter: this._options.filter });\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n const id = ids[i];\r\n this._ids.add(id);\r\n }\r\n this.length = ids.length;\r\n this._trigger(\"add\", { items: ids });\r\n }\r\n else {\r\n this._data = new DataSet();\r\n }\r\n // subscribe to new dataset\r\n if (this._data.on) {\r\n this._data.on(\"*\", this._listener);\r\n }\r\n }\r\n /**\r\n * Refresh the DataView.\r\n * Useful when the DataView has a filter function containing a variable parameter.\r\n */\r\n refresh() {\r\n const ids = this._data.getIds({\r\n filter: this._options.filter,\r\n });\r\n const oldIds = [...this._ids];\r\n const newIds = {};\r\n const addedIds = [];\r\n const removedIds = [];\r\n const removedItems = [];\r\n // check for additions\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n const id = ids[i];\r\n newIds[id] = true;\r\n if (!this._ids.has(id)) {\r\n addedIds.push(id);\r\n this._ids.add(id);\r\n }\r\n }\r\n // check for removals\r\n for (let i = 0, len = oldIds.length; i < len; i++) {\r\n const id = oldIds[i];\r\n const item = this._data.get(id);\r\n if (item == null) {\r\n // @TODO: Investigate.\r\n // Doesn't happen during tests or examples.\r\n // Is it really impossible or could it eventually happen?\r\n // How to handle it if it does? The types guarantee non-nullable items.\r\n console.error(\"If you see this, report it please.\");\r\n }\r\n else if (!newIds[id]) {\r\n removedIds.push(id);\r\n removedItems.push(item);\r\n this._ids.delete(id);\r\n }\r\n }\r\n this.length += addedIds.length - removedIds.length;\r\n // trigger events\r\n if (addedIds.length) {\r\n this._trigger(\"add\", { items: addedIds });\r\n }\r\n if (removedIds.length) {\r\n this._trigger(\"remove\", { items: removedIds, oldData: removedItems });\r\n }\r\n }\r\n /** @inheritDoc */\r\n get(first, second) {\r\n if (this._data == null) {\r\n return null;\r\n }\r\n // parse the arguments\r\n let ids = null;\r\n let options;\r\n if (isId(first) || Array.isArray(first)) {\r\n ids = first;\r\n options = second;\r\n }\r\n else {\r\n options = first;\r\n }\r\n // extend the options with the default options and provided options\r\n const viewOptions = Object.assign({}, this._options, options);\r\n // create a combined filter method when needed\r\n const thisFilter = this._options.filter;\r\n const optionsFilter = options && options.filter;\r\n if (thisFilter && optionsFilter) {\r\n viewOptions.filter = (item) => {\r\n return thisFilter(item) && optionsFilter(item);\r\n };\r\n }\r\n if (ids == null) {\r\n return this._data.get(viewOptions);\r\n }\r\n else {\r\n return this._data.get(ids, viewOptions);\r\n }\r\n }\r\n /** @inheritDoc */\r\n getIds(options) {\r\n if (this._data.length) {\r\n const defaultFilter = this._options.filter;\r\n const optionsFilter = options != null ? options.filter : null;\r\n let filter;\r\n if (optionsFilter) {\r\n if (defaultFilter) {\r\n filter = (item) => {\r\n return defaultFilter(item) && optionsFilter(item);\r\n };\r\n }\r\n else {\r\n filter = optionsFilter;\r\n }\r\n }\r\n else {\r\n filter = defaultFilter;\r\n }\r\n return this._data.getIds({\r\n filter: filter,\r\n order: options && options.order,\r\n });\r\n }\r\n else {\r\n return [];\r\n }\r\n }\r\n /** @inheritDoc */\r\n forEach(callback, options) {\r\n if (this._data) {\r\n const defaultFilter = this._options.filter;\r\n const optionsFilter = options && options.filter;\r\n let filter;\r\n if (optionsFilter) {\r\n if (defaultFilter) {\r\n filter = function (item) {\r\n return defaultFilter(item) && optionsFilter(item);\r\n };\r\n }\r\n else {\r\n filter = optionsFilter;\r\n }\r\n }\r\n else {\r\n filter = defaultFilter;\r\n }\r\n this._data.forEach(callback, {\r\n filter: filter,\r\n order: options && options.order,\r\n });\r\n }\r\n }\r\n /** @inheritDoc */\r\n map(callback, options) {\r\n if (this._data) {\r\n const defaultFilter = this._options.filter;\r\n const optionsFilter = options && options.filter;\r\n let filter;\r\n if (optionsFilter) {\r\n if (defaultFilter) {\r\n filter = (item) => {\r\n return defaultFilter(item) && optionsFilter(item);\r\n };\r\n }\r\n else {\r\n filter = optionsFilter;\r\n }\r\n }\r\n else {\r\n filter = defaultFilter;\r\n }\r\n return this._data.map(callback, {\r\n filter: filter,\r\n order: options && options.order,\r\n });\r\n }\r\n else {\r\n return [];\r\n }\r\n }\r\n /** @inheritDoc */\r\n getDataSet() {\r\n return this._data.getDataSet();\r\n }\r\n /** @inheritDoc */\r\n stream(ids) {\r\n return this._data.stream(ids || {\r\n [Symbol.iterator]: this._ids.keys.bind(this._ids),\r\n });\r\n }\r\n /**\r\n * Render the instance unusable prior to garbage collection.\r\n *\r\n * @remarks\r\n * The intention of this method is to help discover scenarios where the data\r\n * view is being used when the programmer thinks it has been garbage collected\r\n * already. It's stricter version of `dataView.setData(null)`.\r\n */\r\n dispose() {\r\n if (this._data?.off) {\r\n this._data.off(\"*\", this._listener);\r\n }\r\n const message = \"This data view has already been disposed of.\";\r\n const replacement = {\r\n get: () => {\r\n throw new Error(message);\r\n },\r\n set: () => {\r\n throw new Error(message);\r\n },\r\n configurable: false,\r\n };\r\n for (const key of Reflect.ownKeys(DataView.prototype)) {\r\n Object.defineProperty(this, key, replacement);\r\n }\r\n }\r\n /**\r\n * Event listener. Will propagate all events from the connected data set to the subscribers of the DataView, but will filter the items and only trigger when there are changes in the filtered data set.\r\n *\r\n * @param event - The name of the event.\r\n * @param params - Parameters of the event.\r\n * @param senderId - Id supplied by the sender.\r\n */\r\n _onEvent(event, params, senderId) {\r\n if (!params || !params.items || !this._data) {\r\n return;\r\n }\r\n const ids = params.items;\r\n const addedIds = [];\r\n const updatedIds = [];\r\n const removedIds = [];\r\n const oldItems = [];\r\n const updatedItems = [];\r\n const removedItems = [];\r\n switch (event) {\r\n case \"add\":\r\n // filter the ids of the added items\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n const id = ids[i];\r\n const item = this.get(id);\r\n if (item) {\r\n this._ids.add(id);\r\n addedIds.push(id);\r\n }\r\n }\r\n break;\r\n case \"update\":\r\n // determine the event from the views viewpoint: an updated\r\n // item can be added, updated, or removed from this view.\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n const id = ids[i];\r\n const item = this.get(id);\r\n if (item) {\r\n if (this._ids.has(id)) {\r\n updatedIds.push(id);\r\n updatedItems.push(params.data[i]);\r\n oldItems.push(params.oldData[i]);\r\n }\r\n else {\r\n this._ids.add(id);\r\n addedIds.push(id);\r\n }\r\n }\r\n else {\r\n if (this._ids.has(id)) {\r\n this._ids.delete(id);\r\n removedIds.push(id);\r\n removedItems.push(params.oldData[i]);\r\n }\r\n }\r\n }\r\n break;\r\n case \"remove\":\r\n // filter the ids of the removed items\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n const id = ids[i];\r\n if (this._ids.has(id)) {\r\n this._ids.delete(id);\r\n removedIds.push(id);\r\n removedItems.push(params.oldData[i]);\r\n }\r\n }\r\n break;\r\n }\r\n this.length += addedIds.length - removedIds.length;\r\n if (addedIds.length) {\r\n this._trigger(\"add\", { items: addedIds }, senderId);\r\n }\r\n if (updatedIds.length) {\r\n this._trigger(\"update\", { items: updatedIds, oldData: oldItems, data: updatedItems }, senderId);\r\n }\r\n if (removedIds.length) {\r\n this._trigger(\"remove\", { items: removedIds, oldData: removedItems }, senderId);\r\n }\r\n }\r\n}\n\n/**\r\n * Check that given value is compatible with Vis Data Set interface.\r\n *\r\n * @param idProp - The expected property to contain item id.\r\n * @param v - The value to be tested.\r\n * @returns True if all expected values and methods match, false otherwise.\r\n */\r\nfunction isDataSetLike(idProp, v) {\r\n return (typeof v === \"object\" &&\r\n v !== null &&\r\n idProp === v.idProp &&\r\n typeof v.add === \"function\" &&\r\n typeof v.clear === \"function\" &&\r\n typeof v.distinct === \"function\" &&\r\n typeof v.forEach === \"function\" &&\r\n typeof v.get === \"function\" &&\r\n typeof v.getDataSet === \"function\" &&\r\n typeof v.getIds === \"function\" &&\r\n typeof v.length === \"number\" &&\r\n typeof v.map === \"function\" &&\r\n typeof v.max === \"function\" &&\r\n typeof v.min === \"function\" &&\r\n typeof v.off === \"function\" &&\r\n typeof v.on === \"function\" &&\r\n typeof v.remove === \"function\" &&\r\n typeof v.setOptions === \"function\" &&\r\n typeof v.stream === \"function\" &&\r\n typeof v.update === \"function\" &&\r\n typeof v.updateOnly === \"function\");\r\n}\n\n/**\r\n * Check that given value is compatible with Vis Data View interface.\r\n *\r\n * @param idProp - The expected property to contain item id.\r\n * @param v - The value to be tested.\r\n * @returns True if all expected values and methods match, false otherwise.\r\n */\r\nfunction isDataViewLike(idProp, v) {\r\n return (typeof v === \"object\" &&\r\n v !== null &&\r\n idProp === v.idProp &&\r\n typeof v.forEach === \"function\" &&\r\n typeof v.get === \"function\" &&\r\n typeof v.getDataSet === \"function\" &&\r\n typeof v.getIds === \"function\" &&\r\n typeof v.length === \"number\" &&\r\n typeof v.map === \"function\" &&\r\n typeof v.off === \"function\" &&\r\n typeof v.on === \"function\" &&\r\n typeof v.stream === \"function\" &&\r\n isDataSetLike(idProp, v.getDataSet()));\r\n}\n\nexport { DataSet, DataStream, DataView, Queue, createNewDataPipeFrom, isDataSetLike, isDataViewLike };\n//# sourceMappingURL=vis-data.js.map\n","'use strict';\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar charAt = uncurryThis(''.charAt);\nvar $parseFloat = global.parseFloat;\nvar Symbol = global.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar FORCED = 1 / $parseFloat(whitespaces + '-0') !== -Infinity\n // MS Edge 18- broken with boxed symbols\n || (ITERATOR && !fails(function () { $parseFloat(Object(ITERATOR)); }));\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\nmodule.exports = FORCED ? function parseFloat(string) {\n var trimmedString = trim(toString(string));\n var result = $parseFloat(trimmedString);\n return result === 0 && charAt(trimmedString, 0) === '-' ? -0 : result;\n} : $parseFloat;\n","'use strict';\nvar $ = require('../internals/export');\nvar $parseFloat = require('../internals/number-parse-float');\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\n$({ global: true, forced: parseFloat !== $parseFloat }, {\n parseFloat: $parseFloat\n});\n","'use strict';\nrequire('../modules/es.parse-float');\nvar path = require('../internals/path');\n\nmodule.exports = path.parseFloat;\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names-external').f;\n\n// eslint-disable-next-line es/no-object-getownpropertynames -- required for testing\nvar FAILS_ON_PRIMITIVES = fails(function () { return !Object.getOwnPropertyNames(1); });\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n getOwnPropertyNames: getOwnPropertyNames\n});\n","'use strict';\nrequire('../../modules/es.object.get-own-property-names');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nmodule.exports = function getOwnPropertyNames(it) {\n return Object.getOwnPropertyNames(it);\n};\n","'use strict';\nvar parent = require('../../es/object/get-own-property-names');\n\nmodule.exports = parent;\n","import { topMost } from \"vis-util/esnext\";\n\n/**\n * Helper functions for components\n */\n\n/**\n * Determine values to use for (sub)options of 'chosen'.\n *\n * This option is either a boolean or an object whose values should be examined further.\n * The relevant structures are:\n *\n * - chosen: \n * - chosen: { subOption: }\n *\n * Where subOption is 'node', 'edge' or 'label'.\n *\n * The intention of this method appears to be to set a specific priority to the options;\n * Since most properties are either bridged or merged into the local options objects, there\n * is not much point in handling them separately.\n * TODO: examine if 'most' in previous sentence can be replaced with 'all'. In that case, we\n * should be able to get rid of this method.\n * @param {string} subOption option within object 'chosen' to consider; either 'node', 'edge' or 'label'\n * @param {object} pile array of options objects to consider\n * @returns {boolean | Function} value for passed subOption of 'chosen' to use\n */\nexport function choosify(subOption, pile) {\n // allowed values for subOption\n const allowed = [\"node\", \"edge\", \"label\"];\n let value = true;\n\n const chosen = topMost(pile, \"chosen\");\n if (typeof chosen === \"boolean\") {\n value = chosen;\n } else if (typeof chosen === \"object\") {\n if (allowed.indexOf(subOption) === -1) {\n throw new Error(\n \"choosify: subOption '\" +\n subOption +\n \"' should be one of \" +\n \"'\" +\n allowed.join(\"', '\") +\n \"'\"\n );\n }\n\n const chosenEdge = topMost(pile, [\"chosen\", subOption]);\n if (typeof chosenEdge === \"boolean\" || typeof chosenEdge === \"function\") {\n value = chosenEdge;\n }\n }\n\n return value;\n}\n\n/**\n * Check if the point falls within the given rectangle.\n * @param {rect} rect\n * @param {point} point\n * @param {rotationPoint} [rotationPoint] if specified, the rotation that applies to the rectangle.\n * @returns {boolean} true if point within rectangle, false otherwise\n */\nexport function pointInRect(rect, point, rotationPoint) {\n if (rect.width <= 0 || rect.height <= 0) {\n return false; // early out\n }\n\n if (rotationPoint !== undefined) {\n // Rotate the point the same amount as the rectangle\n const tmp = {\n x: point.x - rotationPoint.x,\n y: point.y - rotationPoint.y,\n };\n\n if (rotationPoint.angle !== 0) {\n // In order to get the coordinates the same, you need to\n // rotate in the reverse direction\n const angle = -rotationPoint.angle;\n\n const tmp2 = {\n x: Math.cos(angle) * tmp.x - Math.sin(angle) * tmp.y,\n y: Math.sin(angle) * tmp.x + Math.cos(angle) * tmp.y,\n };\n point = tmp2;\n } else {\n point = tmp;\n }\n\n // Note that if a rotation is specified, the rectangle coordinates\n // are **not* the full canvas coordinates. They are relative to the\n // rotationPoint. Hence, the point coordinates need not be translated\n // back in this case.\n }\n\n const right = rect.x + rect.width;\n const bottom = rect.y + rect.width;\n\n return (\n rect.left < point.x &&\n right > point.x &&\n rect.top < point.y &&\n bottom > point.y\n );\n}\n\n/**\n * Check if given value is acceptable as a label text.\n * @param {*} text value to check; can be anything at this point\n * @returns {boolean} true if valid label value, false otherwise\n */\nexport function isValidLabel(text) {\n // Note that this is quite strict: types that *might* be converted to string are disallowed\n return typeof text === \"string\" && text !== \"\";\n}\n\n/**\n * Returns x, y of self reference circle based on provided angle\n * @param {object} ctx\n * @param {number} angle\n * @param {number} radius\n * @param {VisNode} node\n * @returns {object} x and y coordinates\n */\nexport function getSelfRefCoordinates(ctx, angle, radius, node) {\n let x = node.x;\n let y = node.y;\n\n if (typeof node.distanceToBorder === \"function\") {\n //calculating opposite and adjacent\n //distaneToBorder becomes Hypotenuse.\n //Formulas sin(a) = Opposite / Hypotenuse and cos(a) = Adjacent / Hypotenuse\n const toBorderDist = node.distanceToBorder(ctx, angle);\n const yFromNodeCenter = Math.sin(angle) * toBorderDist;\n const xFromNodeCenter = Math.cos(angle) * toBorderDist;\n //xFromNodeCenter is basically x and if xFromNodeCenter equals to the distance to border then it means\n //that y does not need calculation because it is equal node.height / 2 or node.y\n //same thing with yFromNodeCenter and if yFromNodeCenter equals to the distance to border then it means\n //that x is equal node.width / 2 or node.x\n if (xFromNodeCenter === toBorderDist) {\n x += toBorderDist;\n y = node.y;\n } else if (yFromNodeCenter === toBorderDist) {\n x = node.x;\n y -= toBorderDist;\n } else {\n x += xFromNodeCenter;\n y -= yFromNodeCenter;\n }\n } else if (node.shape.width > node.shape.height) {\n x = node.x + node.shape.width * 0.5;\n y = node.y - radius;\n } else {\n x = node.x + radius;\n y = node.y - node.shape.height * 0.5;\n }\n\n return { x, y };\n}\n","/**\n * Callback to determine text dimensions, using the parent label settings.\n * @callback MeasureText\n * @param {text} text\n * @param {text} mod\n * @returns {object} { width, values} width in pixels and font attributes\n */\n\n/**\n * Helper class for Label which collects results of splitting labels into lines and blocks.\n * @private\n */\nclass LabelAccumulator {\n /**\n * @param {MeasureText} measureText\n */\n constructor(measureText) {\n this.measureText = measureText;\n this.current = 0;\n this.width = 0;\n this.height = 0;\n this.lines = [];\n }\n\n /**\n * Append given text to the given line.\n * @param {number} l index of line to add to\n * @param {string} text string to append to line\n * @param {'bold'|'ital'|'boldital'|'mono'|'normal'} [mod]\n * @private\n */\n _add(l, text, mod = \"normal\") {\n if (this.lines[l] === undefined) {\n this.lines[l] = {\n width: 0,\n height: 0,\n blocks: [],\n };\n }\n\n // We still need to set a block for undefined and empty texts, hence return at this point\n // This is necessary because we don't know at this point if we're at the\n // start of an empty line or not.\n // To compensate, empty blocks are removed in `finalize()`.\n //\n // Empty strings should still have a height\n let tmpText = text;\n if (text === undefined || text === \"\") tmpText = \" \";\n\n // Determine width and get the font properties\n const result = this.measureText(tmpText, mod);\n const block = Object.assign({}, result.values);\n block.text = text;\n block.width = result.width;\n block.mod = mod;\n\n if (text === undefined || text === \"\") {\n block.width = 0;\n }\n\n this.lines[l].blocks.push(block);\n\n // Update the line width. We need this for determining if a string goes over max width\n this.lines[l].width += block.width;\n }\n\n /**\n * Returns the width in pixels of the current line.\n * @returns {number}\n */\n curWidth() {\n const line = this.lines[this.current];\n if (line === undefined) return 0;\n\n return line.width;\n }\n\n /**\n * Add text in block to current line\n * @param {string} text\n * @param {'bold'|'ital'|'boldital'|'mono'|'normal'} [mod]\n */\n append(text, mod = \"normal\") {\n this._add(this.current, text, mod);\n }\n\n /**\n * Add text in block to current line and start a new line\n * @param {string} text\n * @param {'bold'|'ital'|'boldital'|'mono'|'normal'} [mod]\n */\n newLine(text, mod = \"normal\") {\n this._add(this.current, text, mod);\n this.current++;\n }\n\n /**\n * Determine and set the heights of all the lines currently contained in this instance\n *\n * Note that width has already been set.\n * @private\n */\n determineLineHeights() {\n for (let k = 0; k < this.lines.length; k++) {\n const line = this.lines[k];\n\n // Looking for max height of blocks in line\n let height = 0;\n\n if (line.blocks !== undefined) {\n // Can happen if text contains e.g. '\\n '\n for (let l = 0; l < line.blocks.length; l++) {\n const block = line.blocks[l];\n\n if (height < block.height) {\n height = block.height;\n }\n }\n }\n\n line.height = height;\n }\n }\n\n /**\n * Determine the full size of the label text, as determined by current lines and blocks\n * @private\n */\n determineLabelSize() {\n let width = 0;\n let height = 0;\n for (let k = 0; k < this.lines.length; k++) {\n const line = this.lines[k];\n\n if (line.width > width) {\n width = line.width;\n }\n height += line.height;\n }\n\n this.width = width;\n this.height = height;\n }\n\n /**\n * Remove all empty blocks and empty lines we don't need\n *\n * This must be done after the width/height determination,\n * so that these are set properly for processing here.\n * @returns {Array} Lines with empty blocks (and some empty lines) removed\n * @private\n */\n removeEmptyBlocks() {\n const tmpLines = [];\n for (let k = 0; k < this.lines.length; k++) {\n const line = this.lines[k];\n\n // Note: an empty line in between text has width zero but is still relevant to layout.\n // So we can't use width for testing empty line here\n if (line.blocks.length === 0) continue;\n\n // Discard final empty line always\n if (k === this.lines.length - 1) {\n if (line.width === 0) continue;\n }\n\n const tmpLine = {};\n Object.assign(tmpLine, line);\n tmpLine.blocks = [];\n\n let firstEmptyBlock;\n const tmpBlocks = [];\n for (let l = 0; l < line.blocks.length; l++) {\n const block = line.blocks[l];\n if (block.width !== 0) {\n tmpBlocks.push(block);\n } else {\n if (firstEmptyBlock === undefined) {\n firstEmptyBlock = block;\n }\n }\n }\n\n // Ensure that there is *some* text present\n if (tmpBlocks.length === 0 && firstEmptyBlock !== undefined) {\n tmpBlocks.push(firstEmptyBlock);\n }\n\n tmpLine.blocks = tmpBlocks;\n\n tmpLines.push(tmpLine);\n }\n\n return tmpLines;\n }\n\n /**\n * Set the sizes for all lines and the whole thing.\n * @returns {{width: (number|*), height: (number|*), lines: Array}}\n */\n finalize() {\n //console.log(JSON.stringify(this.lines, null, 2));\n\n this.determineLineHeights();\n this.determineLabelSize();\n const tmpLines = this.removeEmptyBlocks();\n\n // Return a simple hash object for further processing.\n return {\n width: this.width,\n height: this.height,\n lines: tmpLines,\n };\n }\n}\n\nexport default LabelAccumulator;\n","import LabelAccumulator from \"./LabelAccumulator\";\nimport { isValidLabel } from \"./ComponentUtil\";\n\n// Hash of prepared regexp's for tags\nconst tagPattern = {\n // HTML\n \"\": //,\n \"\": //,\n \"\": //,\n \"\": /<\\/b>/,\n \"\": /<\\/i>/,\n \"\": /<\\/code>/,\n // Markdown\n \"*\": /\\*/, // bold\n _: /_/, // ital\n \"`\": /`/, // mono\n afterBold: /[^*]/,\n afterItal: /[^_]/,\n afterMono: /[^`]/,\n};\n\n/**\n * Internal helper class for parsing the markup tags for HTML and Markdown.\n *\n * NOTE: Sequences of tabs and spaces are reduced to single space.\n * Scan usage of `this.spacing` within method\n */\nclass MarkupAccumulator {\n /**\n * Create an instance\n * @param {string} text text to parse for markup\n */\n constructor(text) {\n this.text = text;\n this.bold = false;\n this.ital = false;\n this.mono = false;\n this.spacing = false;\n this.position = 0;\n this.buffer = \"\";\n this.modStack = [];\n\n this.blocks = [];\n }\n\n /**\n * Return the mod label currently on the top of the stack\n * @returns {string} label of topmost mod\n * @private\n */\n mod() {\n return this.modStack.length === 0 ? \"normal\" : this.modStack[0];\n }\n\n /**\n * Return the mod label currently active\n * @returns {string} label of active mod\n * @private\n */\n modName() {\n if (this.modStack.length === 0) return \"normal\";\n else if (this.modStack[0] === \"mono\") return \"mono\";\n else {\n if (this.bold && this.ital) {\n return \"boldital\";\n } else if (this.bold) {\n return \"bold\";\n } else if (this.ital) {\n return \"ital\";\n }\n }\n }\n\n /**\n * @private\n */\n emitBlock() {\n if (this.spacing) {\n this.add(\" \");\n this.spacing = false;\n }\n if (this.buffer.length > 0) {\n this.blocks.push({ text: this.buffer, mod: this.modName() });\n this.buffer = \"\";\n }\n }\n\n /**\n * Output text to buffer\n * @param {string} text text to add\n * @private\n */\n add(text) {\n if (text === \" \") {\n this.spacing = true;\n }\n if (this.spacing) {\n this.buffer += \" \";\n this.spacing = false;\n }\n if (text != \" \") {\n this.buffer += text;\n }\n }\n\n /**\n * Handle parsing of whitespace\n * @param {string} ch the character to check\n * @returns {boolean} true if the character was processed as whitespace, false otherwise\n */\n parseWS(ch) {\n if (/[ \\t]/.test(ch)) {\n if (!this.mono) {\n this.spacing = true;\n } else {\n this.add(ch);\n }\n return true;\n }\n\n return false;\n }\n\n /**\n * @param {string} tagName label for block type to set\n * @private\n */\n setTag(tagName) {\n this.emitBlock();\n this[tagName] = true;\n this.modStack.unshift(tagName);\n }\n\n /**\n * @param {string} tagName label for block type to unset\n * @private\n */\n unsetTag(tagName) {\n this.emitBlock();\n this[tagName] = false;\n this.modStack.shift();\n }\n\n /**\n * @param {string} tagName label for block type we are currently processing\n * @param {string|RegExp} tag string to match in text\n * @returns {boolean} true if the tag was processed, false otherwise\n */\n parseStartTag(tagName, tag) {\n // Note: if 'mono' passed as tagName, there is a double check here. This is OK\n if (!this.mono && !this[tagName] && this.match(tag)) {\n this.setTag(tagName);\n return true;\n }\n\n return false;\n }\n\n /**\n * @param {string|RegExp} tag\n * @param {number} [advance] if set, advance current position in text\n * @returns {boolean} true if match at given position, false otherwise\n * @private\n */\n match(tag, advance = true) {\n const [regExp, length] = this.prepareRegExp(tag);\n const matched = regExp.test(this.text.substr(this.position, length));\n\n if (matched && advance) {\n this.position += length - 1;\n }\n\n return matched;\n }\n\n /**\n * @param {string} tagName label for block type we are currently processing\n * @param {string|RegExp} tag string to match in text\n * @param {RegExp} [nextTag] regular expression to match for characters *following* the current tag\n * @returns {boolean} true if the tag was processed, false otherwise\n */\n parseEndTag(tagName, tag, nextTag) {\n let checkTag = this.mod() === tagName;\n if (tagName === \"mono\") {\n // special handling for 'mono'\n checkTag = checkTag && this.mono;\n } else {\n checkTag = checkTag && !this.mono;\n }\n\n if (checkTag && this.match(tag)) {\n if (nextTag !== undefined) {\n // Purpose of the following match is to prevent a direct unset/set of a given tag\n // E.g. '*bold **still bold*' => '*bold still bold*'\n if (\n this.position === this.text.length - 1 ||\n this.match(nextTag, false)\n ) {\n this.unsetTag(tagName);\n }\n } else {\n this.unsetTag(tagName);\n }\n\n return true;\n }\n\n return false;\n }\n\n /**\n * @param {string|RegExp} tag string to match in text\n * @param {value} value string to replace tag with, if found at current position\n * @returns {boolean} true if the tag was processed, false otherwise\n */\n replace(tag, value) {\n if (this.match(tag)) {\n this.add(value);\n this.position += length - 1;\n return true;\n }\n\n return false;\n }\n\n /**\n * Create a regular expression for the tag if it isn't already one.\n *\n * The return value is an array `[RegExp, number]`, with exactly two value, where:\n * - RegExp is the regular expression to use\n * - number is the lenth of the input string to match\n * @param {string|RegExp} tag string to match in text\n * @returns {Array} regular expression to use and length of input string to match\n * @private\n */\n prepareRegExp(tag) {\n let length;\n let regExp;\n if (tag instanceof RegExp) {\n regExp = tag;\n length = 1; // ASSUMPTION: regexp only tests one character\n } else {\n // use prepared regexp if present\n const prepared = tagPattern[tag];\n if (prepared !== undefined) {\n regExp = prepared;\n } else {\n regExp = new RegExp(tag);\n }\n\n length = tag.length;\n }\n\n return [regExp, length];\n }\n}\n\n/**\n * Helper class for Label which explodes the label text into lines and blocks within lines\n * @private\n */\nclass LabelSplitter {\n /**\n * @param {CanvasRenderingContext2D} ctx Canvas rendering context\n * @param {Label} parent reference to the Label instance using current instance\n * @param {boolean} selected\n * @param {boolean} hover\n */\n constructor(ctx, parent, selected, hover) {\n this.ctx = ctx;\n this.parent = parent;\n this.selected = selected;\n this.hover = hover;\n\n /**\n * Callback to determine text width; passed to LabelAccumulator instance\n * @param {string} text string to determine width of\n * @param {string} mod font type to use for this text\n * @returns {object} { width, values} width in pixels and font attributes\n */\n const textWidth = (text, mod) => {\n if (text === undefined) return 0;\n\n // TODO: This can be done more efficiently with caching\n // This will set the ctx.font correctly, depending on selected/hover and mod - so that ctx.measureText() will be accurate.\n const values = this.parent.getFormattingValues(ctx, selected, hover, mod);\n\n let width = 0;\n if (text !== \"\") {\n const measure = this.ctx.measureText(text);\n width = measure.width;\n }\n\n return { width, values: values };\n };\n\n this.lines = new LabelAccumulator(textWidth);\n }\n\n /**\n * Split passed text of a label into lines and blocks.\n *\n * # NOTE\n *\n * The handling of spacing is option dependent:\n *\n * - if `font.multi : false`, all spaces are retained\n * - if `font.multi : true`, every sequence of spaces is compressed to a single space\n *\n * This might not be the best way to do it, but this is as it has been working till now.\n * In order not to break existing functionality, for the time being this behaviour will\n * be retained in any code changes.\n * @param {string} text text to split\n * @returns {Array}\n */\n process(text) {\n if (!isValidLabel(text)) {\n return this.lines.finalize();\n }\n\n const font = this.parent.fontOptions;\n\n // Normalize the end-of-line's to a single representation - order important\n text = text.replace(/\\r\\n/g, \"\\n\"); // Dos EOL's\n text = text.replace(/\\r/g, \"\\n\"); // Mac EOL's\n\n // Note that at this point, there can be no \\r's in the text.\n // This is used later on splitStringIntoLines() to split multifont texts.\n\n const nlLines = String(text).split(\"\\n\");\n const lineCount = nlLines.length;\n\n if (font.multi) {\n // Multi-font case: styling tags active\n for (let i = 0; i < lineCount; i++) {\n const blocks = this.splitBlocks(nlLines[i], font.multi);\n // Post: Sequences of tabs and spaces are reduced to single space\n\n if (blocks === undefined) continue;\n\n if (blocks.length === 0) {\n this.lines.newLine(\"\");\n continue;\n }\n\n if (font.maxWdt > 0) {\n // widthConstraint.maximum defined\n //console.log('Running widthConstraint multi, max: ' + this.fontOptions.maxWdt);\n for (let j = 0; j < blocks.length; j++) {\n const mod = blocks[j].mod;\n const text = blocks[j].text;\n this.splitStringIntoLines(text, mod, true);\n }\n } else {\n // widthConstraint.maximum NOT defined\n for (let j = 0; j < blocks.length; j++) {\n const mod = blocks[j].mod;\n const text = blocks[j].text;\n this.lines.append(text, mod);\n }\n }\n\n this.lines.newLine();\n }\n } else {\n // Single-font case\n if (font.maxWdt > 0) {\n // widthConstraint.maximum defined\n // console.log('Running widthConstraint normal, max: ' + this.fontOptions.maxWdt);\n for (let i = 0; i < lineCount; i++) {\n this.splitStringIntoLines(nlLines[i]);\n }\n } else {\n // widthConstraint.maximum NOT defined\n for (let i = 0; i < lineCount; i++) {\n this.lines.newLine(nlLines[i]);\n }\n }\n }\n\n return this.lines.finalize();\n }\n\n /**\n * normalize the markup system\n * @param {boolean|'md'|'markdown'|'html'} markupSystem\n * @returns {string}\n */\n decodeMarkupSystem(markupSystem) {\n let system = \"none\";\n if (markupSystem === \"markdown\" || markupSystem === \"md\") {\n system = \"markdown\";\n } else if (markupSystem === true || markupSystem === \"html\") {\n system = \"html\";\n }\n return system;\n }\n\n /**\n *\n * @param {string} text\n * @returns {Array}\n */\n splitHtmlBlocks(text) {\n const s = new MarkupAccumulator(text);\n\n const parseEntities = (ch) => {\n if (/&/.test(ch)) {\n const parsed =\n s.replace(s.text, \"<\", \"<\") || s.replace(s.text, \"&\", \"&\");\n\n if (!parsed) {\n s.add(\"&\");\n }\n\n return true;\n }\n\n return false;\n };\n\n while (s.position < s.text.length) {\n const ch = s.text.charAt(s.position);\n\n const parsed =\n s.parseWS(ch) ||\n (/\") ||\n s.parseStartTag(\"ital\", \"\") ||\n s.parseStartTag(\"mono\", \"\") ||\n s.parseEndTag(\"bold\", \"\") ||\n s.parseEndTag(\"ital\", \"\") ||\n s.parseEndTag(\"mono\", \"\"))) ||\n parseEntities(ch);\n\n if (!parsed) {\n s.add(ch);\n }\n s.position++;\n }\n s.emitBlock();\n return s.blocks;\n }\n\n /**\n *\n * @param {string} text\n * @returns {Array}\n */\n splitMarkdownBlocks(text) {\n const s = new MarkupAccumulator(text);\n let beginable = true;\n\n const parseOverride = (ch) => {\n if (/\\\\/.test(ch)) {\n if (s.position < this.text.length + 1) {\n s.position++;\n ch = this.text.charAt(s.position);\n if (/ \\t/.test(ch)) {\n s.spacing = true;\n } else {\n s.add(ch);\n beginable = false;\n }\n }\n\n return true;\n }\n\n return false;\n };\n\n while (s.position < s.text.length) {\n const ch = s.text.charAt(s.position);\n\n const parsed =\n s.parseWS(ch) ||\n parseOverride(ch) ||\n ((beginable || s.spacing) &&\n (s.parseStartTag(\"bold\", \"*\") ||\n s.parseStartTag(\"ital\", \"_\") ||\n s.parseStartTag(\"mono\", \"`\"))) ||\n s.parseEndTag(\"bold\", \"*\", \"afterBold\") ||\n s.parseEndTag(\"ital\", \"_\", \"afterItal\") ||\n s.parseEndTag(\"mono\", \"`\", \"afterMono\");\n\n if (!parsed) {\n s.add(ch);\n beginable = false;\n }\n s.position++;\n }\n s.emitBlock();\n return s.blocks;\n }\n\n /**\n * Explodes a piece of text into single-font blocks using a given markup\n * @param {string} text\n * @param {boolean|'md'|'markdown'|'html'} markupSystem\n * @returns {Array.<{text: string, mod: string}>}\n * @private\n */\n splitBlocks(text, markupSystem) {\n const system = this.decodeMarkupSystem(markupSystem);\n if (system === \"none\") {\n return [\n {\n text: text,\n mod: \"normal\",\n },\n ];\n } else if (system === \"markdown\") {\n return this.splitMarkdownBlocks(text);\n } else if (system === \"html\") {\n return this.splitHtmlBlocks(text);\n }\n }\n\n /**\n * @param {string} text\n * @returns {boolean} true if text length over the current max with\n * @private\n */\n overMaxWidth(text) {\n const width = this.ctx.measureText(text).width;\n return this.lines.curWidth() + width > this.parent.fontOptions.maxWdt;\n }\n\n /**\n * Determine the longest part of the sentence which still fits in the\n * current max width.\n * @param {Array} words Array of strings signifying a text lines\n * @returns {number} index of first item in string making string go over max\n * @private\n */\n getLongestFit(words) {\n let text = \"\";\n let w = 0;\n\n while (w < words.length) {\n const pre = text === \"\" ? \"\" : \" \";\n const newText = text + pre + words[w];\n\n if (this.overMaxWidth(newText)) break;\n text = newText;\n w++;\n }\n\n return w;\n }\n\n /**\n * Determine the longest part of the string which still fits in the\n * current max width.\n * @param {Array} words Array of strings signifying a text lines\n * @returns {number} index of first item in string making string go over max\n */\n getLongestFitWord(words) {\n let w = 0;\n\n while (w < words.length) {\n if (this.overMaxWidth(words.slice(0, w))) break;\n w++;\n }\n\n return w;\n }\n\n /**\n * Split the passed text into lines, according to width constraint (if any).\n *\n * The method assumes that the input string is a single line, i.e. without lines break.\n *\n * This method retains spaces, if still present (case `font.multi: false`).\n * A space which falls on an internal line break, will be replaced by a newline.\n * There is no special handling of tabs; these go along with the flow.\n * @param {string} str\n * @param {string} [mod]\n * @param {boolean} [appendLast]\n * @private\n */\n splitStringIntoLines(str, mod = \"normal\", appendLast = false) {\n // Set the canvas context font, based upon the current selected/hover state\n // and the provided mod, so the text measurement performed by getLongestFit\n // will be accurate - and not just use the font of whoever last used the canvas.\n this.parent.getFormattingValues(this.ctx, this.selected, this.hover, mod);\n\n // Still-present spaces are relevant, retain them\n str = str.replace(/^( +)/g, \"$1\\r\");\n str = str.replace(/([^\\r][^ ]*)( +)/g, \"$1\\r$2\\r\");\n let words = str.split(\"\\r\");\n\n while (words.length > 0) {\n let w = this.getLongestFit(words);\n\n if (w === 0) {\n // Special case: the first word is already larger than the max width.\n const word = words[0];\n\n // Break the word to the largest part that fits the line\n const x = this.getLongestFitWord(word);\n this.lines.newLine(word.slice(0, x), mod);\n\n // Adjust the word, so that the rest will be done next iteration\n words[0] = word.slice(x);\n } else {\n // skip any space that is replaced by a newline\n let newW = w;\n if (words[w - 1] === \" \") {\n w--;\n } else if (words[newW] === \" \") {\n newW++;\n }\n\n const text = words.slice(0, w).join(\"\");\n\n if (w == words.length && appendLast) {\n this.lines.append(text, mod);\n } else {\n this.lines.newLine(text, mod);\n }\n\n // Adjust the word, so that the rest will be done next iteration\n words = words.slice(newW);\n }\n }\n }\n}\n\nexport default LabelSplitter;\n","import { deepExtend, forEach, overrideOpacity, topMost } from \"vis-util/esnext\";\nimport { choosify, isValidLabel } from \"./ComponentUtil\";\nimport LabelSplitter from \"./LabelSplitter\";\n\n/**\n * List of special styles for multi-fonts\n * @private\n */\nconst multiFontStyle = [\"bold\", \"ital\", \"boldital\", \"mono\"];\n\n/**\n * A Label to be used for Nodes or Edges.\n */\nclass Label {\n /**\n * @param {object} body\n * @param {object} options\n * @param {boolean} [edgelabel]\n */\n constructor(body, options, edgelabel = false) {\n this.body = body;\n this.pointToSelf = false;\n this.baseSize = undefined;\n this.fontOptions = {}; // instance variable containing the *instance-local* font options\n this.setOptions(options);\n this.size = { top: 0, left: 0, width: 0, height: 0, yLine: 0 };\n this.isEdgeLabel = edgelabel;\n }\n\n /**\n * @param {object} options the options of the parent Node-instance\n */\n setOptions(options) {\n this.elementOptions = options; // Reference to the options of the parent Node-instance\n\n this.initFontOptions(options.font);\n\n if (isValidLabel(options.label)) {\n this.labelDirty = true;\n } else {\n // Bad label! Change the option value to prevent bad stuff happening\n options.label = undefined;\n }\n\n if (options.font !== undefined && options.font !== null) {\n // font options can be deleted at various levels\n if (typeof options.font === \"string\") {\n this.baseSize = this.fontOptions.size;\n } else if (typeof options.font === \"object\") {\n const size = options.font.size;\n\n if (size !== undefined) {\n this.baseSize = size;\n }\n }\n }\n }\n\n /**\n * Init the font Options structure.\n *\n * Member fontOptions serves as an accumulator for the current font options.\n * As such, it needs to be completely separated from the node options.\n * @param {object} newFontOptions the new font options to process\n * @private\n */\n initFontOptions(newFontOptions) {\n // Prepare the multi-font option objects.\n // These will be filled in propagateFonts(), if required\n forEach(multiFontStyle, (style) => {\n this.fontOptions[style] = {};\n });\n\n // Handle shorthand option, if present\n if (Label.parseFontString(this.fontOptions, newFontOptions)) {\n this.fontOptions.vadjust = 0;\n return;\n }\n\n // Copy over the non-multifont options, if specified\n forEach(newFontOptions, (prop, n) => {\n if (prop !== undefined && prop !== null && typeof prop !== \"object\") {\n this.fontOptions[n] = prop;\n }\n });\n }\n\n /**\n * If in-variable is a string, parse it as a font specifier.\n *\n * Note that following is not done here and have to be done after the call:\n * - Not all font options are set (vadjust, mod)\n * @param {object} outOptions out-parameter, object in which to store the parse results (if any)\n * @param {object} inOptions font options to parse\n * @returns {boolean} true if font parsed as string, false otherwise\n * @static\n */\n static parseFontString(outOptions, inOptions) {\n if (!inOptions || typeof inOptions !== \"string\") return false;\n\n const newOptionsArray = inOptions.split(\" \");\n\n outOptions.size = +newOptionsArray[0].replace(\"px\", \"\");\n outOptions.face = newOptionsArray[1];\n outOptions.color = newOptionsArray[2];\n\n return true;\n }\n\n /**\n * Set the width and height constraints based on 'nearest' value\n * @param {Array} pile array of option objects to consider\n * @returns {object} the actual constraint values to use\n * @private\n */\n constrain(pile) {\n // NOTE: constrainWidth and constrainHeight never set!\n // NOTE: for edge labels, only 'maxWdt' set\n // Node labels can set all the fields\n const fontOptions = {\n constrainWidth: false,\n maxWdt: -1,\n minWdt: -1,\n constrainHeight: false,\n minHgt: -1,\n valign: \"middle\",\n };\n\n const widthConstraint = topMost(pile, \"widthConstraint\");\n if (typeof widthConstraint === \"number\") {\n fontOptions.maxWdt = Number(widthConstraint);\n fontOptions.minWdt = Number(widthConstraint);\n } else if (typeof widthConstraint === \"object\") {\n const widthConstraintMaximum = topMost(pile, [\n \"widthConstraint\",\n \"maximum\",\n ]);\n if (typeof widthConstraintMaximum === \"number\") {\n fontOptions.maxWdt = Number(widthConstraintMaximum);\n }\n const widthConstraintMinimum = topMost(pile, [\n \"widthConstraint\",\n \"minimum\",\n ]);\n if (typeof widthConstraintMinimum === \"number\") {\n fontOptions.minWdt = Number(widthConstraintMinimum);\n }\n }\n\n const heightConstraint = topMost(pile, \"heightConstraint\");\n if (typeof heightConstraint === \"number\") {\n fontOptions.minHgt = Number(heightConstraint);\n } else if (typeof heightConstraint === \"object\") {\n const heightConstraintMinimum = topMost(pile, [\n \"heightConstraint\",\n \"minimum\",\n ]);\n if (typeof heightConstraintMinimum === \"number\") {\n fontOptions.minHgt = Number(heightConstraintMinimum);\n }\n const heightConstraintValign = topMost(pile, [\n \"heightConstraint\",\n \"valign\",\n ]);\n if (typeof heightConstraintValign === \"string\") {\n if (\n heightConstraintValign === \"top\" ||\n heightConstraintValign === \"bottom\"\n ) {\n fontOptions.valign = heightConstraintValign;\n }\n }\n }\n\n return fontOptions;\n }\n\n /**\n * Set options and update internal state\n * @param {object} options options to set\n * @param {Array} pile array of option objects to consider for option 'chosen'\n */\n update(options, pile) {\n this.setOptions(options, true);\n this.propagateFonts(pile);\n deepExtend(this.fontOptions, this.constrain(pile));\n this.fontOptions.chooser = choosify(\"label\", pile);\n }\n\n /**\n * When margins are set in an element, adjust sizes is called to remove them\n * from the width/height constraints. This must be done prior to label sizing.\n * @param {{top: number, right: number, bottom: number, left: number}} margins\n */\n adjustSizes(margins) {\n const widthBias = margins ? margins.right + margins.left : 0;\n if (this.fontOptions.constrainWidth) {\n this.fontOptions.maxWdt -= widthBias;\n this.fontOptions.minWdt -= widthBias;\n }\n const heightBias = margins ? margins.top + margins.bottom : 0;\n if (this.fontOptions.constrainHeight) {\n this.fontOptions.minHgt -= heightBias;\n }\n }\n\n /////////////////////////////////////////////////////////\n // Methods for handling options piles\n // Eventually, these will be moved to a separate class\n /////////////////////////////////////////////////////////\n\n /**\n * Add the font members of the passed list of option objects to the pile.\n * @param {Pile} dstPile pile of option objects add to\n * @param {Pile} srcPile pile of option objects to take font options from\n * @private\n */\n addFontOptionsToPile(dstPile, srcPile) {\n for (let i = 0; i < srcPile.length; ++i) {\n this.addFontToPile(dstPile, srcPile[i]);\n }\n }\n\n /**\n * Add given font option object to the list of objects (the 'pile') to consider for determining\n * multi-font option values.\n * @param {Pile} pile pile of option objects to use\n * @param {object} options instance to add to pile\n * @private\n */\n addFontToPile(pile, options) {\n if (options === undefined) return;\n if (options.font === undefined || options.font === null) return;\n\n const item = options.font;\n pile.push(item);\n }\n\n /**\n * Collect all own-property values from the font pile that aren't multi-font option objectss.\n * @param {Pile} pile pile of option objects to use\n * @returns {object} object with all current own basic font properties\n * @private\n */\n getBasicOptions(pile) {\n const ret = {};\n\n // Scans the whole pile to get all options present\n for (let n = 0; n < pile.length; ++n) {\n let fontOptions = pile[n];\n\n // Convert shorthand if necessary\n const tmpShorthand = {};\n if (Label.parseFontString(tmpShorthand, fontOptions)) {\n fontOptions = tmpShorthand;\n }\n\n forEach(fontOptions, (opt, name) => {\n if (opt === undefined) return; // multi-font option need not be present\n if (Object.prototype.hasOwnProperty.call(ret, name)) return; // Keep first value we encounter\n\n if (multiFontStyle.indexOf(name) !== -1) {\n // Skip multi-font properties but we do need the structure\n ret[name] = {};\n } else {\n ret[name] = opt;\n }\n });\n }\n\n return ret;\n }\n\n /**\n * Return the value for given option for the given multi-font.\n *\n * All available option objects are trawled in the set order to construct the option values.\n *\n * ---------------------------------------------------------------------\n * ## Traversal of pile for multi-fonts\n *\n * The determination of multi-font option values is a special case, because any values not\n * present in the multi-font options should by definition be taken from the main font options,\n * i.e. from the current 'parent' object of the multi-font option.\n *\n * ### Search order for multi-fonts\n *\n * 'bold' used as example:\n *\n * - search in option group 'bold' in local properties\n * - search in main font option group in local properties\n *\n * ---------------------------------------------------------------------\n * @param {Pile} pile pile of option objects to use\n * @param {MultiFontStyle} multiName sub path for the multi-font\n * @param {string} option the option to search for, for the given multi-font\n * @returns {string|number} the value for the given option\n * @private\n */\n getFontOption(pile, multiName, option) {\n let multiFont;\n\n // Search multi font in local properties\n for (let n = 0; n < pile.length; ++n) {\n const fontOptions = pile[n];\n\n if (Object.prototype.hasOwnProperty.call(fontOptions, multiName)) {\n multiFont = fontOptions[multiName];\n if (multiFont === undefined || multiFont === null) continue;\n\n // Convert shorthand if necessary\n // TODO: inefficient to do this conversion every time; find a better way.\n const tmpShorthand = {};\n if (Label.parseFontString(tmpShorthand, multiFont)) {\n multiFont = tmpShorthand;\n }\n\n if (Object.prototype.hasOwnProperty.call(multiFont, option)) {\n return multiFont[option];\n }\n }\n }\n\n // Option is not mentioned in the multi font options; take it from the parent font options.\n // These have already been converted with getBasicOptions(), so use the converted values.\n if (Object.prototype.hasOwnProperty.call(this.fontOptions, option)) {\n return this.fontOptions[option];\n }\n\n // A value **must** be found; you should never get here.\n throw new Error(\n \"Did not find value for multi-font for property: '\" + option + \"'\"\n );\n }\n\n /**\n * Return all options values for the given multi-font.\n *\n * All available option objects are trawled in the set order to construct the option values.\n * @param {Pile} pile pile of option objects to use\n * @param {MultiFontStyle} multiName sub path for the mod-font\n * @returns {MultiFontOptions}\n * @private\n */\n getFontOptions(pile, multiName) {\n const result = {};\n const optionNames = [\"color\", \"size\", \"face\", \"mod\", \"vadjust\"]; // List of allowed options per multi-font\n\n for (let i = 0; i < optionNames.length; ++i) {\n const mod = optionNames[i];\n result[mod] = this.getFontOption(pile, multiName, mod);\n }\n\n return result;\n }\n\n /////////////////////////////////////////////////////////\n // End methods for handling options piles\n /////////////////////////////////////////////////////////\n\n /**\n * Collapse the font options for the multi-font to single objects, from\n * the chain of option objects passed (the 'pile').\n * @param {Pile} pile sequence of option objects to consider.\n * First item in list assumed to be the newly set options.\n */\n propagateFonts(pile) {\n const fontPile = []; // sequence of font objects to consider, order important\n\n // Note that this.elementOptions is not used here.\n this.addFontOptionsToPile(fontPile, pile);\n this.fontOptions = this.getBasicOptions(fontPile);\n\n // We set multifont values even if multi === false, for consistency (things break otherwise)\n for (let i = 0; i < multiFontStyle.length; ++i) {\n const mod = multiFontStyle[i];\n const modOptions = this.fontOptions[mod];\n const tmpMultiFontOptions = this.getFontOptions(fontPile, mod);\n\n // Copy over found values\n forEach(tmpMultiFontOptions, (option, n) => {\n modOptions[n] = option;\n });\n\n modOptions.size = Number(modOptions.size);\n modOptions.vadjust = Number(modOptions.vadjust);\n }\n }\n\n /**\n * Main function. This is called from anything that wants to draw a label.\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x\n * @param {number} y\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {string} [baseline]\n */\n draw(ctx, x, y, selected, hover, baseline = \"middle\") {\n // if no label, return\n if (this.elementOptions.label === undefined) return;\n\n // check if we have to render the label\n let viewFontSize = this.fontOptions.size * this.body.view.scale;\n if (\n this.elementOptions.label &&\n viewFontSize < this.elementOptions.scaling.label.drawThreshold - 1\n )\n return;\n\n // This ensures that there will not be HUGE letters on screen\n // by setting an upper limit on the visible text size (regardless of zoomLevel)\n if (viewFontSize >= this.elementOptions.scaling.label.maxVisible) {\n viewFontSize =\n Number(this.elementOptions.scaling.label.maxVisible) /\n this.body.view.scale;\n }\n\n // update the size cache if required\n this.calculateLabelSize(ctx, selected, hover, x, y, baseline);\n this._drawBackground(ctx);\n this._drawText(ctx, x, this.size.yLine, baseline, viewFontSize);\n }\n\n /**\n * Draws the label background\n * @param {CanvasRenderingContext2D} ctx\n * @private\n */\n _drawBackground(ctx) {\n if (\n this.fontOptions.background !== undefined &&\n this.fontOptions.background !== \"none\"\n ) {\n ctx.fillStyle = this.fontOptions.background;\n const size = this.getSize();\n ctx.fillRect(size.left, size.top, size.width, size.height);\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x\n * @param {number} y\n * @param {string} [baseline]\n * @param {number} viewFontSize\n * @private\n */\n _drawText(ctx, x, y, baseline = \"middle\", viewFontSize) {\n [x, y] = this._setAlignment(ctx, x, y, baseline);\n\n ctx.textAlign = \"left\";\n x = x - this.size.width / 2; // Shift label 1/2-distance to the left\n if (this.fontOptions.valign && this.size.height > this.size.labelHeight) {\n if (this.fontOptions.valign === \"top\") {\n y -= (this.size.height - this.size.labelHeight) / 2;\n }\n if (this.fontOptions.valign === \"bottom\") {\n y += (this.size.height - this.size.labelHeight) / 2;\n }\n }\n\n // draw the text\n for (let i = 0; i < this.lineCount; i++) {\n const line = this.lines[i];\n if (line && line.blocks) {\n let width = 0;\n if (this.isEdgeLabel || this.fontOptions.align === \"center\") {\n width += (this.size.width - line.width) / 2;\n } else if (this.fontOptions.align === \"right\") {\n width += this.size.width - line.width;\n }\n for (let j = 0; j < line.blocks.length; j++) {\n const block = line.blocks[j];\n ctx.font = block.font;\n const [fontColor, strokeColor] = this._getColor(\n block.color,\n viewFontSize,\n block.strokeColor\n );\n if (block.strokeWidth > 0) {\n ctx.lineWidth = block.strokeWidth;\n ctx.strokeStyle = strokeColor;\n ctx.lineJoin = \"round\";\n }\n ctx.fillStyle = fontColor;\n\n if (block.strokeWidth > 0) {\n ctx.strokeText(block.text, x + width, y + block.vadjust);\n }\n ctx.fillText(block.text, x + width, y + block.vadjust);\n width += block.width;\n }\n y += line.height;\n }\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x\n * @param {number} y\n * @param {string} baseline\n * @returns {Array.}\n * @private\n */\n _setAlignment(ctx, x, y, baseline) {\n // check for label alignment (for edges)\n // TODO: make alignment for nodes\n if (\n this.isEdgeLabel &&\n this.fontOptions.align !== \"horizontal\" &&\n this.pointToSelf === false\n ) {\n x = 0;\n y = 0;\n\n const lineMargin = 2;\n if (this.fontOptions.align === \"top\") {\n ctx.textBaseline = \"alphabetic\";\n y -= 2 * lineMargin; // distance from edge, required because we use alphabetic. Alphabetic has less difference between browsers\n } else if (this.fontOptions.align === \"bottom\") {\n ctx.textBaseline = \"hanging\";\n y += 2 * lineMargin; // distance from edge, required because we use hanging. Hanging has less difference between browsers\n } else {\n ctx.textBaseline = \"middle\";\n }\n } else {\n ctx.textBaseline = baseline;\n }\n return [x, y];\n }\n\n /**\n * fade in when relative scale is between threshold and threshold - 1.\n * If the relative scale would be smaller than threshold -1 the draw function would have returned before coming here.\n * @param {string} color The font color to use\n * @param {number} viewFontSize\n * @param {string} initialStrokeColor\n * @returns {Array.} An array containing the font color and stroke color\n * @private\n */\n _getColor(color, viewFontSize, initialStrokeColor) {\n let fontColor = color || \"#000000\";\n let strokeColor = initialStrokeColor || \"#ffffff\";\n if (viewFontSize <= this.elementOptions.scaling.label.drawThreshold) {\n const opacity = Math.max(\n 0,\n Math.min(\n 1,\n 1 - (this.elementOptions.scaling.label.drawThreshold - viewFontSize)\n )\n );\n fontColor = overrideOpacity(fontColor, opacity);\n strokeColor = overrideOpacity(strokeColor, opacity);\n }\n return [fontColor, strokeColor];\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n * @returns {{width: number, height: number}}\n */\n getTextSize(ctx, selected = false, hover = false) {\n this._processLabel(ctx, selected, hover);\n return {\n width: this.size.width,\n height: this.size.height,\n lineCount: this.lineCount,\n };\n }\n\n /**\n * Get the current dimensions of the label\n * @returns {rect}\n */\n getSize() {\n const lineMargin = 2;\n let x = this.size.left; // default values which might be overridden below\n let y = this.size.top - 0.5 * lineMargin; // idem\n\n if (this.isEdgeLabel) {\n const x2 = -this.size.width * 0.5;\n\n switch (this.fontOptions.align) {\n case \"middle\":\n x = x2;\n y = -this.size.height * 0.5;\n break;\n case \"top\":\n x = x2;\n y = -(this.size.height + lineMargin);\n break;\n case \"bottom\":\n x = x2;\n y = lineMargin;\n break;\n }\n }\n\n const ret = {\n left: x,\n top: y,\n width: this.size.width,\n height: this.size.height,\n };\n\n return ret;\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {number} [x]\n * @param {number} [y]\n * @param {'middle'|'hanging'} [baseline]\n */\n calculateLabelSize(ctx, selected, hover, x = 0, y = 0, baseline = \"middle\") {\n this._processLabel(ctx, selected, hover);\n this.size.left = x - this.size.width * 0.5;\n this.size.top = y - this.size.height * 0.5;\n this.size.yLine = y + (1 - this.lineCount) * 0.5 * this.fontOptions.size;\n if (baseline === \"hanging\") {\n this.size.top += 0.5 * this.fontOptions.size;\n this.size.top += 4; // distance from node, required because we use hanging. Hanging has less difference between browsers\n this.size.yLine += 4; // distance from node\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {string} mod\n * @returns {{color, size, face, mod, vadjust, strokeWidth: *, strokeColor: (*|string|allOptions.edges.font.strokeColor|{string}|allOptions.nodes.font.strokeColor|Array)}}\n */\n getFormattingValues(ctx, selected, hover, mod) {\n const getValue = function (fontOptions, mod, option) {\n if (mod === \"normal\") {\n if (option === \"mod\") return \"\";\n return fontOptions[option];\n }\n\n if (fontOptions[mod][option] !== undefined) {\n // Grumbl leaving out test on undefined equals false for \"\"\n return fontOptions[mod][option];\n } else {\n // Take from parent font option\n return fontOptions[option];\n }\n };\n\n const values = {\n color: getValue(this.fontOptions, mod, \"color\"),\n size: getValue(this.fontOptions, mod, \"size\"),\n face: getValue(this.fontOptions, mod, \"face\"),\n mod: getValue(this.fontOptions, mod, \"mod\"),\n vadjust: getValue(this.fontOptions, mod, \"vadjust\"),\n strokeWidth: this.fontOptions.strokeWidth,\n strokeColor: this.fontOptions.strokeColor,\n };\n if (selected || hover) {\n if (\n mod === \"normal\" &&\n this.fontOptions.chooser === true &&\n this.elementOptions.labelHighlightBold\n ) {\n values.mod = \"bold\";\n } else {\n if (typeof this.fontOptions.chooser === \"function\") {\n this.fontOptions.chooser(\n values,\n this.elementOptions.id,\n selected,\n hover\n );\n }\n }\n }\n\n let fontString = \"\";\n if (values.mod !== undefined && values.mod !== \"\") {\n // safeguard for undefined - this happened\n fontString += values.mod + \" \";\n }\n fontString += values.size + \"px \" + values.face;\n\n ctx.font = fontString.replace(/\"/g, \"\");\n values.font = ctx.font;\n values.height = values.size;\n return values;\n }\n\n /**\n *\n * @param {boolean} selected\n * @param {boolean} hover\n * @returns {boolean}\n */\n differentState(selected, hover) {\n return selected !== this.selectedState || hover !== this.hoverState;\n }\n\n /**\n * This explodes the passed text into lines and determines the width, height and number of lines.\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {string} inText the text to explode\n * @returns {{width, height, lines}|*}\n * @private\n */\n _processLabelText(ctx, selected, hover, inText) {\n const splitter = new LabelSplitter(ctx, this, selected, hover);\n return splitter.process(inText);\n }\n\n /**\n * This explodes the label string into lines and sets the width, height and number of lines.\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n * @private\n */\n _processLabel(ctx, selected, hover) {\n if (this.labelDirty === false && !this.differentState(selected, hover))\n return;\n\n const state = this._processLabelText(\n ctx,\n selected,\n hover,\n this.elementOptions.label\n );\n\n if (this.fontOptions.minWdt > 0 && state.width < this.fontOptions.minWdt) {\n state.width = this.fontOptions.minWdt;\n }\n\n this.size.labelHeight = state.height;\n if (this.fontOptions.minHgt > 0 && state.height < this.fontOptions.minHgt) {\n state.height = this.fontOptions.minHgt;\n }\n\n this.lines = state.lines;\n this.lineCount = state.lines.length;\n this.size.width = state.width;\n this.size.height = state.height;\n this.selectedState = selected;\n this.hoverState = hover;\n\n this.labelDirty = false;\n }\n\n /**\n * Check if this label is visible\n * @returns {boolean} true if this label will be show, false otherwise\n */\n visible() {\n if (\n this.size.width === 0 ||\n this.size.height === 0 ||\n this.elementOptions.label === undefined\n ) {\n return false; // nothing to display\n }\n\n const viewFontSize = this.fontOptions.size * this.body.view.scale;\n if (viewFontSize < this.elementOptions.scaling.label.drawThreshold - 1) {\n return false; // Too small or too far away to show\n }\n\n return true;\n }\n}\n\nexport default Label;\n","/**\n * The Base class for all Nodes.\n */\nclass NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n this.body = body;\n this.labelModule = labelModule;\n this.setOptions(options);\n this.top = undefined;\n this.left = undefined;\n this.height = undefined;\n this.width = undefined;\n this.radius = undefined;\n this.margin = undefined;\n this.refreshNeeded = true;\n this.boundingBox = { top: 0, left: 0, right: 0, bottom: 0 };\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n }\n\n /**\n *\n * @param {Label} labelModule\n * @private\n */\n _setMargins(labelModule) {\n this.margin = {};\n if (this.options.margin) {\n if (typeof this.options.margin == \"object\") {\n this.margin.top = this.options.margin.top;\n this.margin.right = this.options.margin.right;\n this.margin.bottom = this.options.margin.bottom;\n this.margin.left = this.options.margin.left;\n } else {\n this.margin.top = this.options.margin;\n this.margin.right = this.options.margin;\n this.margin.bottom = this.options.margin;\n this.margin.left = this.options.margin;\n }\n }\n labelModule.adjustSizes(this.margin);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n * @private\n */\n _distanceToBorder(ctx, angle) {\n const borderWidth = this.options.borderWidth;\n if (ctx) {\n this.resize(ctx);\n }\n return (\n Math.min(\n Math.abs(this.width / 2 / Math.cos(angle)),\n Math.abs(this.height / 2 / Math.sin(angle))\n ) + borderWidth\n );\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n enableShadow(ctx, values) {\n if (values.shadow) {\n ctx.shadowColor = values.shadowColor;\n ctx.shadowBlur = values.shadowSize;\n ctx.shadowOffsetX = values.shadowX;\n ctx.shadowOffsetY = values.shadowY;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n disableShadow(ctx, values) {\n if (values.shadow) {\n ctx.shadowColor = \"rgba(0,0,0,0)\";\n ctx.shadowBlur = 0;\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n enableBorderDashes(ctx, values) {\n if (values.borderDashes !== false) {\n if (ctx.setLineDash !== undefined) {\n let dashes = values.borderDashes;\n if (dashes === true) {\n dashes = [5, 15];\n }\n ctx.setLineDash(dashes);\n } else {\n console.warn(\n \"setLineDash is not supported in this browser. The dashed borders cannot be used.\"\n );\n this.options.shapeProperties.borderDashes = false;\n values.borderDashes = false;\n }\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n disableBorderDashes(ctx, values) {\n if (values.borderDashes !== false) {\n if (ctx.setLineDash !== undefined) {\n ctx.setLineDash([0]);\n } else {\n console.warn(\n \"setLineDash is not supported in this browser. The dashed borders cannot be used.\"\n );\n this.options.shapeProperties.borderDashes = false;\n values.borderDashes = false;\n }\n }\n }\n\n /**\n * Determine if the shape of a node needs to be recalculated.\n * @param {boolean} selected\n * @param {boolean} hover\n * @returns {boolean}\n * @protected\n */\n needsRefresh(selected, hover) {\n if (this.refreshNeeded === true) {\n // This is probably not the best location to reset this member.\n // However, in the current logic, it is the most convenient one.\n this.refreshNeeded = false;\n return true;\n }\n\n return (\n this.width === undefined ||\n this.labelModule.differentState(selected, hover)\n );\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n initContextForDraw(ctx, values) {\n const borderWidth = values.borderWidth / this.body.view.scale;\n\n ctx.lineWidth = Math.min(this.width, borderWidth);\n ctx.strokeStyle = values.borderColor;\n ctx.fillStyle = values.color;\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n performStroke(ctx, values) {\n const borderWidth = values.borderWidth / this.body.view.scale;\n\n //draw dashed border if enabled, save and restore is required for firefox not to crash on unix.\n ctx.save();\n // if borders are zero width, they will be drawn with width 1 by default. This prevents that\n if (borderWidth > 0) {\n this.enableBorderDashes(ctx, values);\n //draw the border\n ctx.stroke();\n //disable dashed border for other elements\n this.disableBorderDashes(ctx, values);\n }\n ctx.restore();\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n performFill(ctx, values) {\n ctx.save();\n ctx.fillStyle = values.color;\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n // draw the background\n ctx.fill();\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n\n ctx.restore();\n this.performStroke(ctx, values);\n }\n\n /**\n *\n * @param {number} margin\n * @private\n */\n _addBoundingBoxMargin(margin) {\n this.boundingBox.left -= margin;\n this.boundingBox.top -= margin;\n this.boundingBox.bottom += margin;\n this.boundingBox.right += margin;\n }\n\n /**\n * Actual implementation of this method call.\n *\n * Doing it like this makes it easier to override\n * in the child classes.\n * @param {number} x width\n * @param {number} y height\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n * @private\n */\n _updateBoundingBox(x, y, ctx, selected, hover) {\n if (ctx !== undefined) {\n this.resize(ctx, selected, hover);\n }\n\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n this.boundingBox.left = this.left;\n this.boundingBox.top = this.top;\n this.boundingBox.bottom = this.top + this.height;\n this.boundingBox.right = this.left + this.width;\n }\n\n /**\n * Default implementation of this method call.\n * This acts as a stub which can be overridden.\n * @param {number} x width\n * @param {number} y height\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n */\n updateBoundingBox(x, y, ctx, selected, hover) {\n this._updateBoundingBox(x, y, ctx, selected, hover);\n }\n\n /**\n * Determine the dimensions to use for nodes with an internal label\n *\n * Currently, these are: Circle, Ellipse, Database, Box\n * The other nodes have external labels, and will not call this method\n *\n * If there is no label, decent default values are supplied.\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n * @returns {{width:number, height:number}}\n */\n getDimensionsFromLabel(ctx, selected, hover) {\n // NOTE: previously 'textSize' was not put in 'this' for Ellipse\n // TODO: examine the consequences.\n this.textSize = this.labelModule.getTextSize(ctx, selected, hover);\n let width = this.textSize.width;\n let height = this.textSize.height;\n\n const DEFAULT_SIZE = 14;\n if (width === 0) {\n // This happens when there is no label text set\n width = DEFAULT_SIZE; // use a decent default\n height = DEFAULT_SIZE; // if width zero, then height also always zero\n }\n\n return { width: width, height: height };\n }\n}\n\nexport default NodeBase;\n","\"use strict\";\n\nimport NodeBase from \"../util/NodeBase\";\nimport { drawRoundRect } from \"../util/shapes\";\n\n/**\n * A Box Node/Cluster shape.\n * @augments NodeBase\n */\nclass Box extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n this._setMargins(labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n */\n resize(ctx, selected = this.selected, hover = this.hover) {\n if (this.needsRefresh(selected, hover)) {\n const dimensions = this.getDimensionsFromLabel(ctx, selected, hover);\n\n this.width = dimensions.width + this.margin.right + this.margin.left;\n this.height = dimensions.height + this.margin.top + this.margin.bottom;\n this.radius = this.width / 2;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover);\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n this.initContextForDraw(ctx, values);\n drawRoundRect(\n ctx,\n this.left,\n this.top,\n this.width,\n this.height,\n values.borderRadius\n );\n this.performFill(ctx, values);\n\n this.updateBoundingBox(x, y, ctx, selected, hover);\n this.labelModule.draw(\n ctx,\n this.left + this.textSize.width / 2 + this.margin.left,\n this.top + this.textSize.height / 2 + this.margin.top,\n selected,\n hover\n );\n }\n\n /**\n *\n * @param {number} x width\n * @param {number} y height\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n */\n updateBoundingBox(x, y, ctx, selected, hover) {\n this._updateBoundingBox(x, y, ctx, selected, hover);\n\n const borderRadius = this.options.shapeProperties.borderRadius; // only effective for box\n this._addBoundingBoxMargin(borderRadius);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n if (ctx) {\n this.resize(ctx);\n }\n const borderWidth = this.options.borderWidth;\n\n return (\n Math.min(\n Math.abs(this.width / 2 / Math.cos(angle)),\n Math.abs(this.height / 2 / Math.sin(angle))\n ) + borderWidth\n );\n }\n}\n\nexport default Box;\n","import NodeBase from \"./NodeBase\";\nimport { drawCircle } from \"./shapes\";\n\n/**\n * NOTE: This is a bad base class\n *\n * Child classes are:\n *\n * Image - uses *only* image methods\n * Circle - uses *only* _drawRawCircle\n * CircleImage - uses all\n *\n * TODO: Refactor, move _drawRawCircle to different module, derive Circle from NodeBase\n * Rename this to ImageBase\n * Consolidate common code in Image and CircleImage to base class\n * @augments NodeBase\n */\nclass CircleImageBase extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n this.labelOffset = 0;\n this.selected = false;\n }\n\n /**\n *\n * @param {object} options\n * @param {object} [imageObj]\n * @param {object} [imageObjAlt]\n */\n setOptions(options, imageObj, imageObjAlt) {\n this.options = options;\n\n if (!(imageObj === undefined && imageObjAlt === undefined)) {\n this.setImages(imageObj, imageObjAlt);\n }\n }\n\n /**\n * Set the images for this node.\n *\n * The images can be updated after the initial setting of options;\n * therefore, this method needs to be reentrant.\n *\n * For correct working in error cases, it is necessary to properly set\n * field 'nodes.brokenImage' in the options.\n * @param {Image} imageObj required; main image to show for this node\n * @param {Image|undefined} imageObjAlt optional; image to show when node is selected\n */\n setImages(imageObj, imageObjAlt) {\n if (imageObjAlt && this.selected) {\n this.imageObj = imageObjAlt;\n this.imageObjAlt = imageObj;\n } else {\n this.imageObj = imageObj;\n this.imageObjAlt = imageObjAlt;\n }\n }\n\n /**\n * Set selection and switch between the base and the selected image.\n *\n * Do the switch only if imageObjAlt exists.\n * @param {boolean} selected value of new selected state for current node\n */\n switchImages(selected) {\n const selection_changed =\n (selected && !this.selected) || (!selected && this.selected);\n this.selected = selected; // Remember new selection\n\n if (this.imageObjAlt !== undefined && selection_changed) {\n const imageTmp = this.imageObj;\n this.imageObj = this.imageObjAlt;\n this.imageObjAlt = imageTmp;\n }\n }\n\n /**\n * Returns Image Padding from node options\n * @returns {{top: number,left: number,bottom: number,right: number}} image padding inside this shape\n * @private\n */\n _getImagePadding() {\n const imgPadding = { top: 0, right: 0, bottom: 0, left: 0 };\n if (this.options.imagePadding) {\n const optImgPadding = this.options.imagePadding;\n if (typeof optImgPadding == \"object\") {\n imgPadding.top = optImgPadding.top;\n imgPadding.right = optImgPadding.right;\n imgPadding.bottom = optImgPadding.bottom;\n imgPadding.left = optImgPadding.left;\n } else {\n imgPadding.top = optImgPadding;\n imgPadding.right = optImgPadding;\n imgPadding.bottom = optImgPadding;\n imgPadding.left = optImgPadding;\n }\n }\n\n return imgPadding;\n }\n\n /**\n * Adjust the node dimensions for a loaded image.\n *\n * Pre: this.imageObj is valid\n */\n _resizeImage() {\n let width, height;\n\n if (this.options.shapeProperties.useImageSize === false) {\n // Use the size property\n let ratio_width = 1;\n let ratio_height = 1;\n\n // Only calculate the proper ratio if both width and height not zero\n if (this.imageObj.width && this.imageObj.height) {\n if (this.imageObj.width > this.imageObj.height) {\n ratio_width = this.imageObj.width / this.imageObj.height;\n } else {\n ratio_height = this.imageObj.height / this.imageObj.width;\n }\n }\n\n width = this.options.size * 2 * ratio_width;\n height = this.options.size * 2 * ratio_height;\n } else {\n // Use the image size with image padding\n const imgPadding = this._getImagePadding();\n width = this.imageObj.width + imgPadding.left + imgPadding.right;\n height = this.imageObj.height + imgPadding.top + imgPadding.bottom;\n }\n\n this.width = width;\n this.height = height;\n this.radius = 0.5 * this.width;\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {ArrowOptions} values\n * @private\n */\n _drawRawCircle(ctx, x, y, values) {\n this.initContextForDraw(ctx, values);\n drawCircle(ctx, x, y, values.size);\n this.performFill(ctx, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n * @private\n */\n _drawImageAtPosition(ctx, values) {\n if (this.imageObj.width != 0) {\n // draw the image\n ctx.globalAlpha = values.opacity !== undefined ? values.opacity : 1;\n\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n\n let factor = 1;\n if (this.options.shapeProperties.interpolation === true) {\n factor = this.imageObj.width / this.width / this.body.view.scale;\n }\n\n const imgPadding = this._getImagePadding();\n\n const imgPosLeft = this.left + imgPadding.left;\n const imgPosTop = this.top + imgPadding.top;\n const imgWidth = this.width - imgPadding.left - imgPadding.right;\n const imgHeight = this.height - imgPadding.top - imgPadding.bottom;\n this.imageObj.drawImageAtPosition(\n ctx,\n factor,\n imgPosLeft,\n imgPosTop,\n imgWidth,\n imgHeight\n );\n\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @private\n */\n _drawImageLabel(ctx, x, y, selected, hover) {\n let offset = 0;\n\n if (this.height !== undefined) {\n offset = this.height * 0.5;\n const labelDimensions = this.labelModule.getTextSize(\n ctx,\n selected,\n hover\n );\n if (labelDimensions.lineCount >= 1) {\n offset += labelDimensions.height / 2;\n }\n }\n\n const yLabel = y + offset;\n\n if (this.options.label) {\n this.labelOffset = offset;\n }\n this.labelModule.draw(ctx, x, yLabel, selected, hover, \"hanging\");\n }\n}\n\nexport default CircleImageBase;\n","\"use strict\";\n\nimport CircleImageBase from \"../util/CircleImageBase\";\n\n/**\n * A Circle Node/Cluster shape.\n * @augments CircleImageBase\n */\nclass Circle extends CircleImageBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n this._setMargins(labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n */\n resize(ctx, selected = this.selected, hover = this.hover) {\n if (this.needsRefresh(selected, hover)) {\n const dimensions = this.getDimensionsFromLabel(ctx, selected, hover);\n\n const diameter = Math.max(\n dimensions.width + this.margin.right + this.margin.left,\n dimensions.height + this.margin.top + this.margin.bottom\n );\n\n this.options.size = diameter / 2; // NOTE: this size field only set here, not in Ellipse, Database, Box\n this.width = diameter;\n this.height = diameter;\n this.radius = this.width / 2;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover);\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n this._drawRawCircle(ctx, x, y, values);\n\n this.updateBoundingBox(x, y);\n this.labelModule.draw(\n ctx,\n this.left + this.textSize.width / 2 + this.margin.left,\n y,\n selected,\n hover\n );\n }\n\n /**\n *\n * @param {number} x width\n * @param {number} y height\n */\n updateBoundingBox(x, y) {\n this.boundingBox.top = y - this.options.size;\n this.boundingBox.left = x - this.options.size;\n this.boundingBox.right = x + this.options.size;\n this.boundingBox.bottom = y + this.options.size;\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @returns {number}\n */\n distanceToBorder(ctx) {\n if (ctx) {\n this.resize(ctx);\n }\n return this.width * 0.5;\n }\n}\n\nexport default Circle;\n","\"use strict\";\n\nimport CircleImageBase from \"../util/CircleImageBase\";\n\n/**\n * A CircularImage Node/Cluster shape.\n * @augments CircleImageBase\n */\nclass CircularImage extends CircleImageBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n * @param {Image} imageObj\n * @param {Image} imageObjAlt\n */\n constructor(options, body, labelModule, imageObj, imageObjAlt) {\n super(options, body, labelModule);\n\n this.setImages(imageObj, imageObjAlt);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n */\n resize(ctx, selected = this.selected, hover = this.hover) {\n const imageAbsent =\n this.imageObj.src === undefined ||\n this.imageObj.width === undefined ||\n this.imageObj.height === undefined;\n\n if (imageAbsent) {\n const diameter = this.options.size * 2;\n this.width = diameter;\n this.height = diameter;\n this.radius = 0.5 * this.width;\n return;\n }\n\n // At this point, an image is present, i.e. this.imageObj is valid.\n if (this.needsRefresh(selected, hover)) {\n this._resizeImage();\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n this.switchImages(selected);\n this.resize();\n\n let labelX = x,\n labelY = y;\n\n if (this.options.shapeProperties.coordinateOrigin === \"top-left\") {\n this.left = x;\n this.top = y;\n labelX += this.width / 2;\n labelY += this.height / 2;\n } else {\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n }\n\n // draw the background circle. IMPORTANT: the stroke in this method is used by the clip method below.\n this._drawRawCircle(ctx, labelX, labelY, values);\n\n // now we draw in the circle, we save so we can revert the clip operation after drawing.\n ctx.save();\n // clip is used to use the stroke in drawRawCircle as an area that we can draw in.\n ctx.clip();\n // draw the image\n this._drawImageAtPosition(ctx, values);\n // restore so we can again draw on the full canvas\n ctx.restore();\n\n this._drawImageLabel(ctx, labelX, labelY, selected, hover);\n\n this.updateBoundingBox(x, y);\n }\n\n // TODO: compare with Circle.updateBoundingBox(), consolidate? More stuff is happening here\n /**\n *\n * @param {number} x width\n * @param {number} y height\n */\n updateBoundingBox(x, y) {\n if (this.options.shapeProperties.coordinateOrigin === \"top-left\") {\n this.boundingBox.top = y;\n this.boundingBox.left = x;\n this.boundingBox.right = x + this.options.size * 2;\n this.boundingBox.bottom = y + this.options.size * 2;\n } else {\n this.boundingBox.top = y - this.options.size;\n this.boundingBox.left = x - this.options.size;\n this.boundingBox.right = x + this.options.size;\n this.boundingBox.bottom = y + this.options.size;\n }\n\n // TODO: compare with Image.updateBoundingBox(), consolidate?\n this.boundingBox.left = Math.min(\n this.boundingBox.left,\n this.labelModule.size.left\n );\n this.boundingBox.right = Math.max(\n this.boundingBox.right,\n this.labelModule.size.left + this.labelModule.size.width\n );\n this.boundingBox.bottom = Math.max(\n this.boundingBox.bottom,\n this.boundingBox.bottom + this.labelOffset\n );\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @returns {number}\n */\n distanceToBorder(ctx) {\n if (ctx) {\n this.resize(ctx);\n }\n return this.width * 0.5;\n }\n}\n\nexport default CircularImage;\n","import NodeBase from \"../util/NodeBase\";\nimport { getShape } from \"./shapes\";\n\n/**\n * Base class for constructing Node/Cluster Shapes.\n * @augments NodeBase\n */\nclass ShapeBase extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n * @param {object} [values]\n */\n resize(\n ctx,\n selected = this.selected,\n hover = this.hover,\n values = { size: this.options.size }\n ) {\n if (this.needsRefresh(selected, hover)) {\n this.labelModule.getTextSize(ctx, selected, hover);\n const size = 2 * values.size;\n this.width = this.customSizeWidth ?? size;\n this.height = this.customSizeHeight ?? size;\n this.radius = 0.5 * this.width;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {string} shape\n * @param {number} sizeMultiplier - Unused! TODO: Remove next major release\n * @param {number} x\n * @param {number} y\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @private\n * @returns {object} Callbacks to draw later on higher layers.\n */\n _drawShape(ctx, shape, sizeMultiplier, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover, values);\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n this.initContextForDraw(ctx, values);\n getShape(shape)(ctx, x, y, values.size);\n this.performFill(ctx, values);\n\n if (this.options.icon !== undefined) {\n if (this.options.icon.code !== undefined) {\n ctx.font =\n (selected ? \"bold \" : \"\") +\n this.height / 2 +\n \"px \" +\n (this.options.icon.face || \"FontAwesome\");\n ctx.fillStyle = this.options.icon.color || \"black\";\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(this.options.icon.code, x, y);\n }\n }\n\n return {\n drawExternalLabel: () => {\n if (this.options.label !== undefined) {\n // Need to call following here in order to ensure value for\n // `this.labelModule.size.height`.\n this.labelModule.calculateLabelSize(\n ctx,\n selected,\n hover,\n x,\n y,\n \"hanging\"\n );\n const yLabel =\n y + 0.5 * this.height + 0.5 * this.labelModule.size.height;\n this.labelModule.draw(ctx, x, yLabel, selected, hover, \"hanging\");\n }\n\n this.updateBoundingBox(x, y);\n },\n };\n }\n\n /**\n *\n * @param {number} x\n * @param {number} y\n */\n updateBoundingBox(x, y) {\n this.boundingBox.top = y - this.options.size;\n this.boundingBox.left = x - this.options.size;\n this.boundingBox.right = x + this.options.size;\n this.boundingBox.bottom = y + this.options.size;\n\n if (this.options.label !== undefined && this.labelModule.size.width > 0) {\n this.boundingBox.left = Math.min(\n this.boundingBox.left,\n this.labelModule.size.left\n );\n this.boundingBox.right = Math.max(\n this.boundingBox.right,\n this.labelModule.size.left + this.labelModule.size.width\n );\n this.boundingBox.bottom = Math.max(\n this.boundingBox.bottom,\n this.boundingBox.bottom + this.labelModule.size.height\n );\n }\n }\n}\n\nexport default ShapeBase;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A CustomShape Node/Cluster shape.\n * @augments ShapeBase\n */\nclass CustomShape extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n * @param {Function} ctxRenderer\n */\n constructor(options, body, labelModule, ctxRenderer) {\n super(options, body, labelModule, ctxRenderer);\n this.ctxRenderer = ctxRenderer;\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on different layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover, values);\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n // Guard right away because someone may just draw in the function itself.\n ctx.save();\n const drawLater = this.ctxRenderer({\n ctx,\n id: this.options.id,\n x,\n y,\n state: { selected, hover },\n style: { ...values },\n label: this.options.label,\n });\n // Render the node shape bellow arrows.\n if (drawLater.drawNode != null) {\n drawLater.drawNode();\n }\n ctx.restore();\n\n if (drawLater.drawExternalLabel) {\n // Guard the external label (above arrows) drawing function.\n const drawExternalLabel = drawLater.drawExternalLabel;\n drawLater.drawExternalLabel = () => {\n ctx.save();\n drawExternalLabel();\n ctx.restore();\n };\n }\n\n if (drawLater.nodeDimensions) {\n this.customSizeWidth = drawLater.nodeDimensions.width;\n this.customSizeHeight = drawLater.nodeDimensions.height;\n }\n\n return drawLater;\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default CustomShape;\n","\"use strict\";\n\nimport NodeBase from \"../util/NodeBase\";\nimport { drawDatabase } from \"../util/shapes\";\n\n/**\n * A Database Node/Cluster shape.\n * @augments NodeBase\n */\nclass Database extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n this._setMargins(labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n */\n resize(ctx, selected, hover) {\n if (this.needsRefresh(selected, hover)) {\n const dimensions = this.getDimensionsFromLabel(ctx, selected, hover);\n const size = dimensions.width + this.margin.right + this.margin.left;\n\n this.width = size;\n this.height = size;\n this.radius = this.width / 2;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover);\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n this.initContextForDraw(ctx, values);\n drawDatabase(\n ctx,\n x - this.width / 2,\n y - this.height / 2,\n this.width,\n this.height\n );\n this.performFill(ctx, values);\n\n this.updateBoundingBox(x, y, ctx, selected, hover);\n this.labelModule.draw(\n ctx,\n this.left + this.textSize.width / 2 + this.margin.left,\n this.top + this.textSize.height / 2 + this.margin.top,\n selected,\n hover\n );\n }\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Database;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A Diamond Node/Cluster shape.\n * @augments ShapeBase\n */\nclass Diamond extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(ctx, \"diamond\", 4, x, y, selected, hover, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Diamond;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A Dot Node/Cluster shape.\n * @augments ShapeBase\n */\nclass Dot extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(ctx, \"circle\", 2, x, y, selected, hover, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @returns {number}\n */\n distanceToBorder(ctx) {\n if (ctx) {\n this.resize(ctx);\n }\n return this.options.size;\n }\n}\n\nexport default Dot;\n","\"use strict\";\n\nimport NodeBase from \"../util/NodeBase\";\nimport { drawEllipse } from \"../util/shapes\";\n\n/**\n * Am Ellipse Node/Cluster shape.\n * @augments NodeBase\n */\nclass Ellipse extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n */\n resize(ctx, selected = this.selected, hover = this.hover) {\n if (this.needsRefresh(selected, hover)) {\n const dimensions = this.getDimensionsFromLabel(ctx, selected, hover);\n\n this.height = dimensions.height * 2;\n this.width = dimensions.width + dimensions.height;\n this.radius = 0.5 * this.width;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover);\n this.left = x - this.width * 0.5;\n this.top = y - this.height * 0.5;\n\n this.initContextForDraw(ctx, values);\n drawEllipse(ctx, this.left, this.top, this.width, this.height);\n this.performFill(ctx, values);\n\n this.updateBoundingBox(x, y, ctx, selected, hover);\n this.labelModule.draw(ctx, x, y, selected, hover);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n if (ctx) {\n this.resize(ctx);\n }\n const a = this.width * 0.5;\n const b = this.height * 0.5;\n const w = Math.sin(angle) * a;\n const h = Math.cos(angle) * b;\n return (a * b) / Math.sqrt(w * w + h * h);\n }\n}\n\nexport default Ellipse;\n","\"use strict\";\n\nimport NodeBase from \"../util/NodeBase\";\n\n/**\n * An icon replacement for the default Node shape.\n * @augments NodeBase\n */\nclass Icon extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n this._setMargins(labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx - Unused.\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n */\n resize(ctx, selected, hover) {\n if (this.needsRefresh(selected, hover)) {\n this.iconSize = {\n width: Number(this.options.icon.size),\n height: Number(this.options.icon.size),\n };\n this.width = this.iconSize.width + this.margin.right + this.margin.left;\n this.height = this.iconSize.height + this.margin.top + this.margin.bottom;\n this.radius = 0.5 * this.width;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover);\n this.options.icon.size = this.options.icon.size || 50;\n\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n this._icon(ctx, x, y, selected, hover, values);\n\n return {\n drawExternalLabel: () => {\n if (this.options.label !== undefined) {\n const iconTextSpacing = 5;\n this.labelModule.draw(\n ctx,\n this.left + this.iconSize.width / 2 + this.margin.left,\n y + this.height / 2 + iconTextSpacing,\n selected\n );\n }\n\n this.updateBoundingBox(x, y);\n },\n };\n }\n\n /**\n *\n * @param {number} x\n * @param {number} y\n */\n updateBoundingBox(x, y) {\n this.boundingBox.top = y - this.options.icon.size * 0.5;\n this.boundingBox.left = x - this.options.icon.size * 0.5;\n this.boundingBox.right = x + this.options.icon.size * 0.5;\n this.boundingBox.bottom = y + this.options.icon.size * 0.5;\n\n if (this.options.label !== undefined && this.labelModule.size.width > 0) {\n const iconTextSpacing = 5;\n this.boundingBox.left = Math.min(\n this.boundingBox.left,\n this.labelModule.size.left\n );\n this.boundingBox.right = Math.max(\n this.boundingBox.right,\n this.labelModule.size.left + this.labelModule.size.width\n );\n this.boundingBox.bottom = Math.max(\n this.boundingBox.bottom,\n this.boundingBox.bottom + this.labelModule.size.height + iconTextSpacing\n );\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover - Unused\n * @param {ArrowOptions} values\n */\n _icon(ctx, x, y, selected, hover, values) {\n const iconSize = Number(this.options.icon.size);\n\n if (this.options.icon.code !== undefined) {\n ctx.font = [\n this.options.icon.weight != null\n ? this.options.icon.weight\n : selected\n ? \"bold\"\n : \"\",\n // If the weight is forced (for example to make Font Awesome 5 work\n // properly) substitute slightly bigger size for bold font face.\n (this.options.icon.weight != null && selected ? 5 : 0) +\n iconSize +\n \"px\",\n this.options.icon.face,\n ].join(\" \");\n\n // draw icon\n ctx.fillStyle = this.options.icon.color || \"black\";\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n ctx.fillText(this.options.icon.code, x, y);\n\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n } else {\n console.error(\n \"When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.\"\n );\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Icon;\n","\"use strict\";\n\nimport CircleImageBase from \"../util/CircleImageBase\";\nimport { overrideOpacity } from \"vis-util/esnext\";\n\n/**\n * An image-based replacement for the default Node shape.\n * @augments CircleImageBase\n */\nclass Image extends CircleImageBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n * @param {Image} imageObj\n * @param {Image} imageObjAlt\n */\n constructor(options, body, labelModule, imageObj, imageObjAlt) {\n super(options, body, labelModule);\n\n this.setImages(imageObj, imageObjAlt);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx - Unused.\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n */\n resize(ctx, selected = this.selected, hover = this.hover) {\n const imageAbsent =\n this.imageObj.src === undefined ||\n this.imageObj.width === undefined ||\n this.imageObj.height === undefined;\n\n if (imageAbsent) {\n const side = this.options.size * 2;\n this.width = side;\n this.height = side;\n return;\n }\n\n if (this.needsRefresh(selected, hover)) {\n this._resizeImage();\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n ctx.save();\n this.switchImages(selected);\n this.resize();\n\n let labelX = x,\n labelY = y;\n\n if (this.options.shapeProperties.coordinateOrigin === \"top-left\") {\n this.left = x;\n this.top = y;\n labelX += this.width / 2;\n labelY += this.height / 2;\n } else {\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n }\n\n if (this.options.shapeProperties.useBorderWithImage === true) {\n const neutralborderWidth = this.options.borderWidth;\n const selectionLineWidth =\n this.options.borderWidthSelected || 2 * this.options.borderWidth;\n const borderWidth =\n (selected ? selectionLineWidth : neutralborderWidth) /\n this.body.view.scale;\n ctx.lineWidth = Math.min(this.width, borderWidth);\n\n ctx.beginPath();\n let strokeStyle = selected\n ? this.options.color.highlight.border\n : hover\n ? this.options.color.hover.border\n : this.options.color.border;\n let fillStyle = selected\n ? this.options.color.highlight.background\n : hover\n ? this.options.color.hover.background\n : this.options.color.background;\n\n if (values.opacity !== undefined) {\n strokeStyle = overrideOpacity(strokeStyle, values.opacity);\n fillStyle = overrideOpacity(fillStyle, values.opacity);\n }\n // setup the line properties.\n ctx.strokeStyle = strokeStyle;\n\n // set a fillstyle\n ctx.fillStyle = fillStyle;\n\n // draw a rectangle to form the border around. This rectangle is filled so the opacity of a picture (in future vis releases?) can be used to tint the image\n ctx.rect(\n this.left - 0.5 * ctx.lineWidth,\n this.top - 0.5 * ctx.lineWidth,\n this.width + ctx.lineWidth,\n this.height + ctx.lineWidth\n );\n ctx.fill();\n\n this.performStroke(ctx, values);\n\n ctx.closePath();\n }\n\n this._drawImageAtPosition(ctx, values);\n\n this._drawImageLabel(ctx, labelX, labelY, selected, hover);\n\n this.updateBoundingBox(x, y);\n ctx.restore();\n }\n\n /**\n *\n * @param {number} x\n * @param {number} y\n */\n updateBoundingBox(x, y) {\n this.resize();\n\n if (this.options.shapeProperties.coordinateOrigin === \"top-left\") {\n this.left = x;\n this.top = y;\n } else {\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n }\n\n this.boundingBox.left = this.left;\n this.boundingBox.top = this.top;\n this.boundingBox.bottom = this.top + this.height;\n this.boundingBox.right = this.left + this.width;\n\n if (this.options.label !== undefined && this.labelModule.size.width > 0) {\n this.boundingBox.left = Math.min(\n this.boundingBox.left,\n this.labelModule.size.left\n );\n this.boundingBox.right = Math.max(\n this.boundingBox.right,\n this.labelModule.size.left + this.labelModule.size.width\n );\n this.boundingBox.bottom = Math.max(\n this.boundingBox.bottom,\n this.boundingBox.bottom + this.labelOffset\n );\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Image;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A Square Node/Cluster shape.\n * @augments ShapeBase\n */\nclass Square extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(ctx, \"square\", 2, x, y, selected, hover, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Square;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A Hexagon Node/Cluster shape.\n * @augments ShapeBase\n */\nclass Hexagon extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(ctx, \"hexagon\", 4, x, y, selected, hover, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Hexagon;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A Star Node/Cluster shape.\n * @augments ShapeBase\n */\nclass Star extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(ctx, \"star\", 4, x, y, selected, hover, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Star;\n","\"use strict\";\n\nimport NodeBase from \"../util/NodeBase\";\n\n/**\n * A text-based replacement for the default Node shape.\n * @augments NodeBase\n */\nclass Text extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n this._setMargins(labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n */\n resize(ctx, selected, hover) {\n if (this.needsRefresh(selected, hover)) {\n this.textSize = this.labelModule.getTextSize(ctx, selected, hover);\n this.width = this.textSize.width + this.margin.right + this.margin.left;\n this.height = this.textSize.height + this.margin.top + this.margin.bottom;\n this.radius = 0.5 * this.width;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover);\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n this.labelModule.draw(\n ctx,\n this.left + this.textSize.width / 2 + this.margin.left,\n this.top + this.textSize.height / 2 + this.margin.top,\n selected,\n hover\n );\n\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n\n this.updateBoundingBox(x, y, ctx, selected, hover);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Text;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A Triangle Node/Cluster shape.\n * @augments ShapeBase\n */\nclass Triangle extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x\n * @param {number} y\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(ctx, \"triangle\", 3, x, y, selected, hover, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Triangle;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A downward facing Triangle Node/Cluster shape.\n * @augments ShapeBase\n */\nclass TriangleDown extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x\n * @param {number} y\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(\n ctx,\n \"triangleDown\",\n 3,\n x,\n y,\n selected,\n hover,\n values\n );\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default TriangleDown;\n","import {\n VALIDATOR_PRINT_STYLE,\n bridgeObject,\n fillIfDefined,\n mergeOptions,\n overrideOpacity,\n parseColor,\n selectiveNotDeepExtend,\n} from \"vis-util/esnext\";\n\nimport Label from \"./shared/Label\";\nimport { choosify, pointInRect } from \"./shared/ComponentUtil\";\nimport Box from \"./nodes/shapes/Box\";\nimport Circle from \"./nodes/shapes/Circle\";\nimport CircularImage from \"./nodes/shapes/CircularImage\";\nimport CustomShape from \"./nodes/shapes/CustomShape\";\nimport Database from \"./nodes/shapes/Database\";\nimport Diamond from \"./nodes/shapes/Diamond\";\nimport Dot from \"./nodes/shapes/Dot\";\nimport Ellipse from \"./nodes/shapes/Ellipse\";\nimport Icon from \"./nodes/shapes/Icon\";\nimport Image from \"./nodes/shapes/Image\";\nimport Square from \"./nodes/shapes/Square\";\nimport Hexagon from \"./nodes/shapes/Hexagon\";\nimport Star from \"./nodes/shapes/Star\";\nimport Text from \"./nodes/shapes/Text\";\nimport Triangle from \"./nodes/shapes/Triangle\";\nimport TriangleDown from \"./nodes/shapes/TriangleDown\";\n\n/**\n * A node. A node can be connected to other nodes via one or multiple edges.\n */\nclass Node {\n /**\n *\n * @param {object} options An object containing options for the node. All\n * options are optional, except for the id.\n * {number} id Id of the node. Required\n * {string} label Text label for the node\n * {number} x Horizontal position of the node\n * {number} y Vertical position of the node\n * {string} shape Node shape\n * {string} image An image url\n * {string} title A title text, can be HTML\n * {anytype} group A group name or number\n * @param {object} body Shared state of current network instance\n * @param {Network.Images} imagelist A list with images. Only needed when the node has an image\n * @param {Groups} grouplist A list with groups. Needed for retrieving group options\n * @param {object} globalOptions Current global node options; these serve as defaults for the node instance\n * @param {object} defaultOptions Global default options for nodes; note that this is also the prototype\n * for parameter `globalOptions`.\n */\n constructor(\n options,\n body,\n imagelist,\n grouplist,\n globalOptions,\n defaultOptions\n ) {\n this.options = bridgeObject(globalOptions);\n this.globalOptions = globalOptions;\n this.defaultOptions = defaultOptions;\n this.body = body;\n\n this.edges = []; // all edges connected to this node\n\n // set defaults for the options\n this.id = undefined;\n this.imagelist = imagelist;\n this.grouplist = grouplist;\n\n // state options\n this.x = undefined;\n this.y = undefined;\n this.baseSize = this.options.size;\n this.baseFontSize = this.options.font.size;\n this.predefinedPosition = false; // used to check if initial fit should just take the range or approximate\n this.selected = false;\n this.hover = false;\n\n this.labelModule = new Label(\n this.body,\n this.options,\n false /* Not edge label */\n );\n this.setOptions(options);\n }\n\n /**\n * Attach a edge to the node\n * @param {Edge} edge\n */\n attachEdge(edge) {\n if (this.edges.indexOf(edge) === -1) {\n this.edges.push(edge);\n }\n }\n\n /**\n * Detach a edge from the node\n * @param {Edge} edge\n */\n detachEdge(edge) {\n const index = this.edges.indexOf(edge);\n if (index != -1) {\n this.edges.splice(index, 1);\n }\n }\n\n /**\n * Set or overwrite options for the node\n * @param {object} options an object with options\n * @returns {null|boolean}\n */\n setOptions(options) {\n const currentShape = this.options.shape;\n\n if (!options) {\n return; // Note that the return value will be 'undefined'! This is OK.\n }\n\n // Save the color for later.\n // This is necessary in order to prevent local color from being overwritten by group color.\n // TODO: To prevent such workarounds the way options are handled should be rewritten from scratch.\n // This is not the only problem with current options handling.\n if (typeof options.color !== \"undefined\") {\n this._localColor = options.color;\n }\n\n // basic options\n if (options.id !== undefined) {\n this.id = options.id;\n }\n\n if (this.id === undefined) {\n throw new Error(\"Node must have an id\");\n }\n\n Node.checkMass(options, this.id);\n\n // set these options locally\n // clear x and y positions\n if (options.x !== undefined) {\n if (options.x === null) {\n this.x = undefined;\n this.predefinedPosition = false;\n } else {\n this.x = parseInt(options.x);\n this.predefinedPosition = true;\n }\n }\n if (options.y !== undefined) {\n if (options.y === null) {\n this.y = undefined;\n this.predefinedPosition = false;\n } else {\n this.y = parseInt(options.y);\n this.predefinedPosition = true;\n }\n }\n if (options.size !== undefined) {\n this.baseSize = options.size;\n }\n if (options.value !== undefined) {\n options.value = parseFloat(options.value);\n }\n\n // this transforms all shorthands into fully defined options\n Node.parseOptions(\n this.options,\n options,\n true,\n this.globalOptions,\n this.grouplist\n );\n\n const pile = [options, this.options, this.defaultOptions];\n this.chooser = choosify(\"node\", pile);\n\n this._load_images();\n this.updateLabelModule(options);\n\n // Need to set local opacity after `this.updateLabelModule(options);` because `this.updateLabelModule(options);` overrites local opacity with group opacity\n if (options.opacity !== undefined && Node.checkOpacity(options.opacity)) {\n this.options.opacity = options.opacity;\n }\n\n this.updateShape(currentShape);\n\n return options.hidden !== undefined || options.physics !== undefined;\n }\n\n /**\n * Load the images from the options, for the nodes that need them.\n *\n * Images are always loaded, even if they are not used in the current shape.\n * The user may switch to an image shape later on.\n * @private\n */\n _load_images() {\n if (\n this.options.shape === \"circularImage\" ||\n this.options.shape === \"image\"\n ) {\n if (this.options.image === undefined) {\n throw new Error(\n \"Option image must be defined for node type '\" +\n this.options.shape +\n \"'\"\n );\n }\n }\n\n if (this.options.image === undefined) {\n return;\n }\n\n if (this.imagelist === undefined) {\n throw new Error(\"Internal Error: No images provided\");\n }\n\n if (typeof this.options.image === \"string\") {\n this.imageObj = this.imagelist.load(\n this.options.image,\n this.options.brokenImage,\n this.id\n );\n } else {\n if (this.options.image.unselected === undefined) {\n throw new Error(\"No unselected image provided\");\n }\n\n this.imageObj = this.imagelist.load(\n this.options.image.unselected,\n this.options.brokenImage,\n this.id\n );\n\n if (this.options.image.selected !== undefined) {\n this.imageObjAlt = this.imagelist.load(\n this.options.image.selected,\n this.options.brokenImage,\n this.id\n );\n } else {\n this.imageObjAlt = undefined;\n }\n }\n }\n\n /**\n * Check that opacity is only between 0 and 1\n * @param {number} opacity\n * @returns {boolean}\n */\n static checkOpacity(opacity) {\n return 0 <= opacity && opacity <= 1;\n }\n\n /**\n * Check that origin is 'center' or 'top-left'\n * @param {string} origin\n * @returns {boolean}\n */\n static checkCoordinateOrigin(origin) {\n return origin === undefined || origin === \"center\" || origin === \"top-left\";\n }\n\n /**\n * Copy group option values into the node options.\n *\n * The group options override the global node options, so the copy of group options\n * must happen *after* the global node options have been set.\n *\n * This method must also be called also if the global node options have changed and the group options did not.\n * @param {object} parentOptions\n * @param {object} newOptions new values for the options, currently only passed in for check\n * @param {object} groupList\n */\n static updateGroupOptions(parentOptions, newOptions, groupList) {\n if (groupList === undefined) return; // No groups, nothing to do\n\n const group = parentOptions.group;\n\n // paranoia: the selected group is already merged into node options, check.\n if (\n newOptions !== undefined &&\n newOptions.group !== undefined &&\n group !== newOptions.group\n ) {\n throw new Error(\n \"updateGroupOptions: group values in options don't match.\"\n );\n }\n\n const hasGroup =\n typeof group === \"number\" || (typeof group === \"string\" && group != \"\");\n if (!hasGroup) return; // current node has no group, no need to merge\n\n const groupObj = groupList.get(group);\n\n if (groupObj.opacity !== undefined && newOptions.opacity === undefined) {\n if (!Node.checkOpacity(groupObj.opacity)) {\n console.error(\n \"Invalid option for node opacity. Value must be between 0 and 1, found: \" +\n groupObj.opacity\n );\n groupObj.opacity = undefined;\n }\n }\n\n // Skip any new option to avoid them being overridden by the group options.\n const skipProperties = Object.getOwnPropertyNames(newOptions).filter(\n (p) => newOptions[p] != null\n );\n // Always skip merging group font options into parent; these are required to be distinct for labels\n skipProperties.push(\"font\");\n selectiveNotDeepExtend(skipProperties, parentOptions, groupObj);\n\n // the color object needs to be completely defined.\n // Since groups can partially overwrite the colors, we parse it again, just in case.\n parentOptions.color = parseColor(parentOptions.color);\n }\n\n /**\n * This process all possible shorthands in the new options and makes sure that the parentOptions are fully defined.\n * Static so it can also be used by the handler.\n * @param {object} parentOptions\n * @param {object} newOptions\n * @param {boolean} [allowDeletion]\n * @param {object} [globalOptions]\n * @param {object} [groupList]\n * @static\n */\n static parseOptions(\n parentOptions,\n newOptions,\n allowDeletion = false,\n globalOptions = {},\n groupList\n ) {\n const fields = [\"color\", \"fixed\", \"shadow\"];\n selectiveNotDeepExtend(fields, parentOptions, newOptions, allowDeletion);\n\n Node.checkMass(newOptions);\n\n if (parentOptions.opacity !== undefined) {\n if (!Node.checkOpacity(parentOptions.opacity)) {\n console.error(\n \"Invalid option for node opacity. Value must be between 0 and 1, found: \" +\n parentOptions.opacity\n );\n parentOptions.opacity = undefined;\n }\n }\n\n if (newOptions.opacity !== undefined) {\n if (!Node.checkOpacity(newOptions.opacity)) {\n console.error(\n \"Invalid option for node opacity. Value must be between 0 and 1, found: \" +\n newOptions.opacity\n );\n newOptions.opacity = undefined;\n }\n }\n\n if (\n newOptions.shapeProperties &&\n !Node.checkCoordinateOrigin(newOptions.shapeProperties.coordinateOrigin)\n ) {\n console.error(\n \"Invalid option for node coordinateOrigin, found: \" +\n newOptions.shapeProperties.coordinateOrigin\n );\n }\n\n // merge the shadow options into the parent.\n mergeOptions(parentOptions, newOptions, \"shadow\", globalOptions);\n\n // individual shape newOptions\n if (newOptions.color !== undefined && newOptions.color !== null) {\n const parsedColor = parseColor(newOptions.color);\n fillIfDefined(parentOptions.color, parsedColor);\n } else if (allowDeletion === true && newOptions.color === null) {\n parentOptions.color = bridgeObject(globalOptions.color); // set the object back to the global options\n }\n\n // handle the fixed options\n if (newOptions.fixed !== undefined && newOptions.fixed !== null) {\n if (typeof newOptions.fixed === \"boolean\") {\n parentOptions.fixed.x = newOptions.fixed;\n parentOptions.fixed.y = newOptions.fixed;\n } else {\n if (\n newOptions.fixed.x !== undefined &&\n typeof newOptions.fixed.x === \"boolean\"\n ) {\n parentOptions.fixed.x = newOptions.fixed.x;\n }\n if (\n newOptions.fixed.y !== undefined &&\n typeof newOptions.fixed.y === \"boolean\"\n ) {\n parentOptions.fixed.y = newOptions.fixed.y;\n }\n }\n }\n\n if (allowDeletion === true && newOptions.font === null) {\n parentOptions.font = bridgeObject(globalOptions.font); // set the object back to the global options\n }\n\n Node.updateGroupOptions(parentOptions, newOptions, groupList);\n\n // handle the scaling options, specifically the label part\n if (newOptions.scaling !== undefined) {\n mergeOptions(\n parentOptions.scaling,\n newOptions.scaling,\n \"label\",\n globalOptions.scaling\n );\n }\n }\n\n /**\n *\n * @returns {{color: *, borderWidth: *, borderColor: *, size: *, borderDashes: (boolean|Array|allOptions.nodes.shapeProperties.borderDashes|{boolean, array}), borderRadius: (number|allOptions.nodes.shapeProperties.borderRadius|{number}|Array), shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *}}\n */\n getFormattingValues() {\n const values = {\n color: this.options.color.background,\n opacity: this.options.opacity,\n borderWidth: this.options.borderWidth,\n borderColor: this.options.color.border,\n size: this.options.size,\n borderDashes: this.options.shapeProperties.borderDashes,\n borderRadius: this.options.shapeProperties.borderRadius,\n shadow: this.options.shadow.enabled,\n shadowColor: this.options.shadow.color,\n shadowSize: this.options.shadow.size,\n shadowX: this.options.shadow.x,\n shadowY: this.options.shadow.y,\n };\n if (this.selected || this.hover) {\n if (this.chooser === true) {\n if (this.selected) {\n if (this.options.borderWidthSelected != null) {\n values.borderWidth = this.options.borderWidthSelected;\n } else {\n values.borderWidth *= 2;\n }\n values.color = this.options.color.highlight.background;\n values.borderColor = this.options.color.highlight.border;\n values.shadow = this.options.shadow.enabled;\n } else if (this.hover) {\n values.color = this.options.color.hover.background;\n values.borderColor = this.options.color.hover.border;\n values.shadow = this.options.shadow.enabled;\n }\n } else if (typeof this.chooser === \"function\") {\n this.chooser(values, this.options.id, this.selected, this.hover);\n if (values.shadow === false) {\n if (\n values.shadowColor !== this.options.shadow.color ||\n values.shadowSize !== this.options.shadow.size ||\n values.shadowX !== this.options.shadow.x ||\n values.shadowY !== this.options.shadow.y\n ) {\n values.shadow = true;\n }\n }\n }\n } else {\n values.shadow = this.options.shadow.enabled;\n }\n if (this.options.opacity !== undefined) {\n const opacity = this.options.opacity;\n values.borderColor = overrideOpacity(values.borderColor, opacity);\n values.color = overrideOpacity(values.color, opacity);\n values.shadowColor = overrideOpacity(values.shadowColor, opacity);\n }\n return values;\n }\n\n /**\n *\n * @param {object} options\n */\n updateLabelModule(options) {\n if (this.options.label === undefined || this.options.label === null) {\n this.options.label = \"\";\n }\n\n Node.updateGroupOptions(\n this.options,\n {\n ...options,\n color: (options && options.color) || this._localColor || undefined,\n },\n this.grouplist\n );\n\n //\n // Note:The prototype chain for this.options is:\n //\n // this.options -> NodesHandler.options -> NodesHandler.defaultOptions\n // (also: this.globalOptions)\n //\n // Note that the prototypes are mentioned explicitly in the pile list below;\n // WE DON'T WANT THE ORDER OF THE PROTOTYPES!!!! At least, not for font handling of labels.\n // This is a good indication that the prototype usage of options is deficient.\n //\n const currentGroup = this.grouplist.get(this.options.group, false);\n const pile = [\n options, // new options\n this.options, // current node options, see comment above for prototype\n currentGroup, // group options, if any\n this.globalOptions, // Currently set global node options\n this.defaultOptions, // Default global node options\n ];\n this.labelModule.update(this.options, pile);\n\n if (this.labelModule.baseSize !== undefined) {\n this.baseFontSize = this.labelModule.baseSize;\n }\n }\n\n /**\n *\n * @param {string} currentShape\n */\n updateShape(currentShape) {\n if (currentShape === this.options.shape && this.shape) {\n this.shape.setOptions(this.options, this.imageObj, this.imageObjAlt);\n } else {\n // choose draw method depending on the shape\n switch (this.options.shape) {\n case \"box\":\n this.shape = new Box(this.options, this.body, this.labelModule);\n break;\n case \"circle\":\n this.shape = new Circle(this.options, this.body, this.labelModule);\n break;\n case \"circularImage\":\n this.shape = new CircularImage(\n this.options,\n this.body,\n this.labelModule,\n this.imageObj,\n this.imageObjAlt\n );\n break;\n case \"custom\":\n this.shape = new CustomShape(\n this.options,\n this.body,\n this.labelModule,\n this.options.ctxRenderer\n );\n break;\n case \"database\":\n this.shape = new Database(this.options, this.body, this.labelModule);\n break;\n case \"diamond\":\n this.shape = new Diamond(this.options, this.body, this.labelModule);\n break;\n case \"dot\":\n this.shape = new Dot(this.options, this.body, this.labelModule);\n break;\n case \"ellipse\":\n this.shape = new Ellipse(this.options, this.body, this.labelModule);\n break;\n case \"icon\":\n this.shape = new Icon(this.options, this.body, this.labelModule);\n break;\n case \"image\":\n this.shape = new Image(\n this.options,\n this.body,\n this.labelModule,\n this.imageObj,\n this.imageObjAlt\n );\n break;\n case \"square\":\n this.shape = new Square(this.options, this.body, this.labelModule);\n break;\n case \"hexagon\":\n this.shape = new Hexagon(this.options, this.body, this.labelModule);\n break;\n case \"star\":\n this.shape = new Star(this.options, this.body, this.labelModule);\n break;\n case \"text\":\n this.shape = new Text(this.options, this.body, this.labelModule);\n break;\n case \"triangle\":\n this.shape = new Triangle(this.options, this.body, this.labelModule);\n break;\n case \"triangleDown\":\n this.shape = new TriangleDown(\n this.options,\n this.body,\n this.labelModule\n );\n break;\n default:\n this.shape = new Ellipse(this.options, this.body, this.labelModule);\n break;\n }\n }\n this.needsRefresh();\n }\n\n /**\n * select this node\n */\n select() {\n this.selected = true;\n this.needsRefresh();\n }\n\n /**\n * unselect this node\n */\n unselect() {\n this.selected = false;\n this.needsRefresh();\n }\n\n /**\n * Reset the calculated size of the node, forces it to recalculate its size\n */\n needsRefresh() {\n this.shape.refreshNeeded = true;\n }\n\n /**\n * get the title of this node.\n * @returns {string} title The title of the node, or undefined when no title\n * has been set.\n */\n getTitle() {\n return this.options.title;\n }\n\n /**\n * Calculate the distance to the border of the Node\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle Angle in radians\n * @returns {number} distance Distance to the border in pixels\n */\n distanceToBorder(ctx, angle) {\n return this.shape.distanceToBorder(ctx, angle);\n }\n\n /**\n * Check if this node has a fixed x and y position\n * @returns {boolean} true if fixed, false if not\n */\n isFixed() {\n return this.options.fixed.x && this.options.fixed.y;\n }\n\n /**\n * check if this node is selecte\n * @returns {boolean} selected True if node is selected, else false\n */\n isSelected() {\n return this.selected;\n }\n\n /**\n * Retrieve the value of the node. Can be undefined\n * @returns {number} value\n */\n getValue() {\n return this.options.value;\n }\n\n /**\n * Get the current dimensions of the label\n * @returns {rect}\n */\n getLabelSize() {\n return this.labelModule.size();\n }\n\n /**\n * Adjust the value range of the node. The node will adjust it's size\n * based on its value.\n * @param {number} min\n * @param {number} max\n * @param {number} total\n */\n setValueRange(min, max, total) {\n if (this.options.value !== undefined) {\n const scale = this.options.scaling.customScalingFunction(\n min,\n max,\n total,\n this.options.value\n );\n const sizeDiff = this.options.scaling.max - this.options.scaling.min;\n if (this.options.scaling.label.enabled === true) {\n const fontDiff =\n this.options.scaling.label.max - this.options.scaling.label.min;\n this.options.font.size =\n this.options.scaling.label.min + scale * fontDiff;\n }\n this.options.size = this.options.scaling.min + scale * sizeDiff;\n } else {\n this.options.size = this.baseSize;\n this.options.font.size = this.baseFontSize;\n }\n\n this.updateLabelModule();\n }\n\n /**\n * Draw this node in the given canvas\n * The 2d context of a HTML canvas can be retrieved by canvas.getContext(\"2d\");\n * @param {CanvasRenderingContext2D} ctx\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx) {\n const values = this.getFormattingValues();\n return (\n this.shape.draw(ctx, this.x, this.y, this.selected, this.hover, values) ||\n {}\n );\n }\n\n /**\n * Update the bounding box of the shape\n * @param {CanvasRenderingContext2D} ctx\n */\n updateBoundingBox(ctx) {\n this.shape.updateBoundingBox(this.x, this.y, ctx);\n }\n\n /**\n * Recalculate the size of this node in the given canvas\n * The 2d context of a HTML canvas can be retrieved by canvas.getContext(\"2d\");\n * @param {CanvasRenderingContext2D} ctx\n */\n resize(ctx) {\n const values = this.getFormattingValues();\n this.shape.resize(ctx, this.selected, this.hover, values);\n }\n\n /**\n * Determine all visual elements of this node instance, in which the given\n * point falls within the bounding shape.\n * @param {point} point\n * @returns {Array.} list with the items which are on the point\n */\n getItemsOnPoint(point) {\n const ret = [];\n\n if (this.labelModule.visible()) {\n if (pointInRect(this.labelModule.getSize(), point)) {\n ret.push({ nodeId: this.id, labelId: 0 });\n }\n }\n\n if (pointInRect(this.shape.boundingBox, point)) {\n ret.push({ nodeId: this.id });\n }\n\n return ret;\n }\n\n /**\n * Check if this object is overlapping with the provided object\n * @param {object} obj an object with parameters left, top, right, bottom\n * @returns {boolean} True if location is located on node\n */\n isOverlappingWith(obj) {\n return (\n this.shape.left < obj.right &&\n this.shape.left + this.shape.width > obj.left &&\n this.shape.top < obj.bottom &&\n this.shape.top + this.shape.height > obj.top\n );\n }\n\n /**\n * Check if this object is overlapping with the provided object\n * @param {object} obj an object with parameters left, top, right, bottom\n * @returns {boolean} True if location is located on node\n */\n isBoundingBoxOverlappingWith(obj) {\n return (\n this.shape.boundingBox.left < obj.right &&\n this.shape.boundingBox.right > obj.left &&\n this.shape.boundingBox.top < obj.bottom &&\n this.shape.boundingBox.bottom > obj.top\n );\n }\n\n /**\n * Check valid values for mass\n *\n * The mass may not be negative or zero. If it is, reset to 1\n * @param {object} options\n * @param {Node.id} id\n * @static\n */\n static checkMass(options, id) {\n if (options.mass !== undefined && options.mass <= 0) {\n let strId = \"\";\n if (id !== undefined) {\n strId = \" in node id: \" + id;\n }\n console.error(\n \"%cNegative or zero mass disallowed\" + strId + \", setting mass to 1.\",\n VALIDATOR_PRINT_STYLE\n );\n options.mass = 1;\n }\n }\n}\n\nexport default Node;\n","import { bridgeObject, forEach } from \"vis-util/esnext\";\nimport { DataSet, isDataViewLike } from \"vis-data/esnext\";\nimport Node from \"./components/Node\";\n\n/**\n * Handler for Nodes\n */\nclass NodesHandler {\n /**\n * @param {object} body\n * @param {Images} images\n * @param {Array.} groups\n * @param {LayoutEngine} layoutEngine\n */\n constructor(body, images, groups, layoutEngine) {\n this.body = body;\n this.images = images;\n this.groups = groups;\n this.layoutEngine = layoutEngine;\n\n // create the node API in the body container\n this.body.functions.createNode = this.create.bind(this);\n\n this.nodesListeners = {\n add: (event, params) => {\n this.add(params.items);\n },\n update: (event, params) => {\n this.update(params.items, params.data, params.oldData);\n },\n remove: (event, params) => {\n this.remove(params.items);\n },\n };\n\n this.defaultOptions = {\n borderWidth: 1,\n borderWidthSelected: undefined,\n brokenImage: undefined,\n color: {\n border: \"#2B7CE9\",\n background: \"#97C2FC\",\n highlight: {\n border: \"#2B7CE9\",\n background: \"#D2E5FF\",\n },\n hover: {\n border: \"#2B7CE9\",\n background: \"#D2E5FF\",\n },\n },\n opacity: undefined, // number between 0 and 1\n fixed: {\n x: false,\n y: false,\n },\n font: {\n color: \"#343434\",\n size: 14, // px\n face: \"arial\",\n background: \"none\",\n strokeWidth: 0, // px\n strokeColor: \"#ffffff\",\n align: \"center\",\n vadjust: 0,\n multi: false,\n bold: {\n mod: \"bold\",\n },\n boldital: {\n mod: \"bold italic\",\n },\n ital: {\n mod: \"italic\",\n },\n mono: {\n mod: \"\",\n size: 15, // px\n face: \"monospace\",\n vadjust: 2,\n },\n },\n group: undefined,\n hidden: false,\n icon: {\n face: \"FontAwesome\", //'FontAwesome',\n code: undefined, //'\\uf007',\n size: 50, //50,\n color: \"#2B7CE9\", //'#aa00ff'\n },\n image: undefined, // --> URL\n imagePadding: {\n // only for image shape\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n },\n label: undefined,\n labelHighlightBold: true,\n level: undefined,\n margin: {\n top: 5,\n right: 5,\n bottom: 5,\n left: 5,\n },\n mass: 1,\n physics: true,\n scaling: {\n min: 10,\n max: 30,\n label: {\n enabled: false,\n min: 14,\n max: 30,\n maxVisible: 30,\n drawThreshold: 5,\n },\n customScalingFunction: function (min, max, total, value) {\n if (max === min) {\n return 0.5;\n } else {\n const scale = 1 / (max - min);\n return Math.max(0, (value - min) * scale);\n }\n },\n },\n shadow: {\n enabled: false,\n color: \"rgba(0,0,0,0.5)\",\n size: 10,\n x: 5,\n y: 5,\n },\n shape: \"ellipse\",\n shapeProperties: {\n borderDashes: false, // only for borders\n borderRadius: 6, // only for box shape\n interpolation: true, // only for image and circularImage shapes\n useImageSize: false, // only for image and circularImage shapes\n useBorderWithImage: false, // only for image shape\n coordinateOrigin: \"center\", // only for image and circularImage shapes\n },\n size: 25,\n title: undefined,\n value: undefined,\n x: undefined,\n y: undefined,\n };\n\n // Protect from idiocy\n if (this.defaultOptions.mass <= 0) {\n throw \"Internal error: mass in defaultOptions of NodesHandler may not be zero or negative\";\n }\n\n this.options = bridgeObject(this.defaultOptions);\n\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n // refresh the nodes. Used when reverting from hierarchical layout\n this.body.emitter.on(\"refreshNodes\", this.refresh.bind(this));\n this.body.emitter.on(\"refresh\", this.refresh.bind(this));\n this.body.emitter.on(\"destroy\", () => {\n forEach(this.nodesListeners, (callback, event) => {\n if (this.body.data.nodes) this.body.data.nodes.off(event, callback);\n });\n delete this.body.functions.createNode;\n delete this.nodesListeners.add;\n delete this.nodesListeners.update;\n delete this.nodesListeners.remove;\n delete this.nodesListeners;\n });\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n Node.parseOptions(this.options, options);\n\n // Need to set opacity here because Node.parseOptions is also used for groups,\n // if you set opacity in Node.parseOptions it overwrites group opacity.\n if (options.opacity !== undefined) {\n if (\n Number.isNaN(options.opacity) ||\n !Number.isFinite(options.opacity) ||\n options.opacity < 0 ||\n options.opacity > 1\n ) {\n console.error(\n \"Invalid option for node opacity. Value must be between 0 and 1, found: \" +\n options.opacity\n );\n } else {\n this.options.opacity = options.opacity;\n }\n }\n\n // update the shape in all nodes\n if (options.shape !== undefined) {\n for (const nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId)) {\n this.body.nodes[nodeId].updateShape();\n }\n }\n }\n\n // Update the labels of nodes if any relevant options changed.\n if (\n typeof options.font !== \"undefined\" ||\n typeof options.widthConstraint !== \"undefined\" ||\n typeof options.heightConstraint !== \"undefined\"\n ) {\n for (const nodeId of Object.keys(this.body.nodes)) {\n this.body.nodes[nodeId].updateLabelModule();\n this.body.nodes[nodeId].needsRefresh();\n }\n }\n\n // update the shape size in all nodes\n if (options.size !== undefined) {\n for (const nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId)) {\n this.body.nodes[nodeId].needsRefresh();\n }\n }\n }\n\n // update the state of the variables if needed\n if (options.hidden !== undefined || options.physics !== undefined) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n }\n\n /**\n * Set a data set with nodes for the network\n * @param {Array | DataSet | DataView} nodes The data containing the nodes.\n * @param {boolean} [doNotEmit] - Suppress data changed event.\n * @private\n */\n setData(nodes, doNotEmit = false) {\n const oldNodesData = this.body.data.nodes;\n\n if (isDataViewLike(\"id\", nodes)) {\n this.body.data.nodes = nodes;\n } else if (Array.isArray(nodes)) {\n this.body.data.nodes = new DataSet();\n this.body.data.nodes.add(nodes);\n } else if (!nodes) {\n this.body.data.nodes = new DataSet();\n } else {\n throw new TypeError(\"Array or DataSet expected\");\n }\n\n if (oldNodesData) {\n // unsubscribe from old dataset\n forEach(this.nodesListeners, function (callback, event) {\n oldNodesData.off(event, callback);\n });\n }\n\n // remove drawn nodes\n this.body.nodes = {};\n\n if (this.body.data.nodes) {\n // subscribe to new dataset\n const me = this;\n forEach(this.nodesListeners, function (callback, event) {\n me.body.data.nodes.on(event, callback);\n });\n\n // draw all new nodes\n const ids = this.body.data.nodes.getIds();\n this.add(ids, true);\n }\n\n if (doNotEmit === false) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n * Add nodes\n * @param {number[] | string[]} ids\n * @param {boolean} [doNotEmit]\n * @private\n */\n add(ids, doNotEmit = false) {\n let id;\n const newNodes = [];\n for (let i = 0; i < ids.length; i++) {\n id = ids[i];\n const properties = this.body.data.nodes.get(id);\n const node = this.create(properties);\n newNodes.push(node);\n this.body.nodes[id] = node; // note: this may replace an existing node\n }\n\n this.layoutEngine.positionInitially(newNodes);\n\n if (doNotEmit === false) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n * Update existing nodes, or create them when not yet existing\n * @param {number[] | string[]} ids id's of changed nodes\n * @param {Array} changedData array with changed data\n * @param {Array|undefined} oldData optional; array with previous data\n * @private\n */\n update(ids, changedData, oldData) {\n const nodes = this.body.nodes;\n let dataChanged = false;\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n let node = nodes[id];\n const data = changedData[i];\n if (node !== undefined) {\n // update node\n if (node.setOptions(data)) {\n dataChanged = true;\n }\n } else {\n dataChanged = true;\n // create node\n node = this.create(data);\n nodes[id] = node;\n }\n }\n\n if (!dataChanged && oldData !== undefined) {\n // Check for any changes which should trigger a layout recalculation\n // For now, this is just 'level' for hierarchical layout\n // Assumption: old and new data arranged in same order; at time of writing, this holds.\n dataChanged = changedData.some(function (newValue, index) {\n const oldValue = oldData[index];\n return oldValue && oldValue.level !== newValue.level;\n });\n }\n\n if (dataChanged === true) {\n this.body.emitter.emit(\"_dataChanged\");\n } else {\n this.body.emitter.emit(\"_dataUpdated\");\n }\n }\n\n /**\n * Remove existing nodes. If nodes do not exist, the method will just ignore it.\n * @param {number[] | string[]} ids\n * @private\n */\n remove(ids) {\n const nodes = this.body.nodes;\n\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n delete nodes[id];\n }\n\n this.body.emitter.emit(\"_dataChanged\");\n }\n\n /**\n * create a node\n * @param {object} properties\n * @param {class} [constructorClass]\n * @returns {*}\n */\n create(properties, constructorClass = Node) {\n return new constructorClass(\n properties,\n this.body,\n this.images,\n this.groups,\n this.options,\n this.defaultOptions\n );\n }\n\n /**\n *\n * @param {boolean} [clearPositions]\n */\n refresh(clearPositions = false) {\n forEach(this.body.nodes, (node, nodeId) => {\n const data = this.body.data.nodes.get(nodeId);\n if (data !== undefined) {\n if (clearPositions === true) {\n node.setOptions({ x: null, y: null });\n }\n node.setOptions({ fixed: false });\n node.setOptions(data);\n }\n });\n }\n\n /**\n * Returns the positions of the nodes.\n * @param {Array. | string} [ids] --> optional, can be array of nodeIds, can be string\n * @returns {{}}\n */\n getPositions(ids) {\n const dataArray = {};\n if (ids !== undefined) {\n if (Array.isArray(ids) === true) {\n for (let i = 0; i < ids.length; i++) {\n if (this.body.nodes[ids[i]] !== undefined) {\n const node = this.body.nodes[ids[i]];\n dataArray[ids[i]] = {\n x: Math.round(node.x),\n y: Math.round(node.y),\n };\n }\n }\n } else {\n if (this.body.nodes[ids] !== undefined) {\n const node = this.body.nodes[ids];\n dataArray[ids] = { x: Math.round(node.x), y: Math.round(node.y) };\n }\n }\n } else {\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const node = this.body.nodes[this.body.nodeIndices[i]];\n dataArray[this.body.nodeIndices[i]] = {\n x: Math.round(node.x),\n y: Math.round(node.y),\n };\n }\n }\n return dataArray;\n }\n\n /**\n * Retrieves the x y position of a specific id.\n * @param {string} id The id to retrieve.\n * @throws {TypeError} If no id is included.\n * @throws {ReferenceError} If an invalid id is provided.\n * @returns {{ x: number, y: number }} Returns X, Y canvas position of the node with given id.\n */\n getPosition(id) {\n if (id == undefined) {\n throw new TypeError(\"No id was specified for getPosition method.\");\n } else if (this.body.nodes[id] == undefined) {\n throw new ReferenceError(\n `NodeId provided for getPosition does not exist. Provided: ${id}`\n );\n } else {\n return {\n x: Math.round(this.body.nodes[id].x),\n y: Math.round(this.body.nodes[id].y),\n };\n }\n }\n\n /**\n * Load the XY positions of the nodes into the dataset.\n */\n storePositions() {\n // todo: add support for clusters and hierarchical.\n const dataArray = [];\n const dataset = this.body.data.nodes.getDataSet();\n\n for (const dsNode of dataset.get()) {\n const id = dsNode.id;\n const bodyNode = this.body.nodes[id];\n const x = Math.round(bodyNode.x);\n const y = Math.round(bodyNode.y);\n\n if (dsNode.x !== x || dsNode.y !== y) {\n dataArray.push({ id, x, y });\n }\n }\n\n dataset.update(dataArray);\n }\n\n /**\n * get the bounding box of a node.\n * @param {Node.id} nodeId\n * @returns {j|*}\n */\n getBoundingBox(nodeId) {\n if (this.body.nodes[nodeId] !== undefined) {\n return this.body.nodes[nodeId].shape.boundingBox;\n }\n }\n\n /**\n * Get the Ids of nodes connected to this node.\n * @param {Node.id} nodeId\n * @param {'to'|'from'|undefined} direction values 'from' and 'to' select respectively parent and child nodes only.\n * Any other value returns both parent and child nodes.\n * @returns {Array}\n */\n getConnectedNodes(nodeId, direction) {\n const nodeList = [];\n if (this.body.nodes[nodeId] !== undefined) {\n const node = this.body.nodes[nodeId];\n const nodeObj = {}; // used to quickly check if node already exists\n for (let i = 0; i < node.edges.length; i++) {\n const edge = node.edges[i];\n if (direction !== \"to\" && edge.toId == node.id) {\n // these are double equals since ids can be numeric or string\n if (nodeObj[edge.fromId] === undefined) {\n nodeList.push(edge.fromId);\n nodeObj[edge.fromId] = true;\n }\n } else if (direction !== \"from\" && edge.fromId == node.id) {\n // these are double equals since ids can be numeric or string\n if (nodeObj[edge.toId] === undefined) {\n nodeList.push(edge.toId);\n nodeObj[edge.toId] = true;\n }\n }\n }\n }\n return nodeList;\n }\n\n /**\n * Get the ids of the edges connected to this node.\n * @param {Node.id} nodeId\n * @returns {*}\n */\n getConnectedEdges(nodeId) {\n const edgeList = [];\n if (this.body.nodes[nodeId] !== undefined) {\n const node = this.body.nodes[nodeId];\n for (let i = 0; i < node.edges.length; i++) {\n edgeList.push(node.edges[i].id);\n }\n } else {\n console.error(\n \"NodeId provided for getConnectedEdges does not exist. Provided: \",\n nodeId\n );\n }\n return edgeList;\n }\n\n /**\n * Move a node.\n * @param {Node.id} nodeId\n * @param {number} x\n * @param {number} y\n */\n moveNode(nodeId, x, y) {\n if (this.body.nodes[nodeId] !== undefined) {\n this.body.nodes[nodeId].x = Number(x);\n this.body.nodes[nodeId].y = Number(y);\n setTimeout(() => {\n this.body.emitter.emit(\"startSimulation\");\n }, 0);\n } else {\n console.error(\n \"Node id supplied to moveNode does not exist. Provided: \",\n nodeId\n );\n }\n }\n}\n\nexport default NodesHandler;\n","'use strict';\nvar $ = require('../internals/export');\n\n// eslint-disable-next-line es/no-math-hypot -- required for testing\nvar $hypot = Math.hypot;\nvar abs = Math.abs;\nvar sqrt = Math.sqrt;\n\n// Chrome 77 bug\n// https://bugs.chromium.org/p/v8/issues/detail?id=9546\nvar FORCED = !!$hypot && $hypot(Infinity, NaN) !== Infinity;\n\n// `Math.hypot` method\n// https://tc39.es/ecma262/#sec-math.hypot\n$({ target: 'Math', stat: true, arity: 2, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n hypot: function hypot(value1, value2) {\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * sqrt(sum);\n }\n});\n","'use strict';\nrequire('../../modules/es.math.hypot');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Math.hypot;\n","/**\n * ============================================================================\n * Location of all the endpoint drawing routines.\n *\n * Every endpoint has its own drawing routine, which contains an endpoint definition.\n *\n * The endpoint definitions must have the following properies:\n *\n * - (0,0) is the connection point to the node it attaches to\n * - The endpoints are orientated to the positive x-direction\n * - The length of the endpoint is at most 1\n *\n * As long as the endpoint classes remain simple and not too numerous, they will\n * be contained within this module.\n * All classes here except `EndPoints` should be considered as private to this module.\n *\n * -----------------------------------------------------------------------------\n * ### Further Actions\n *\n * After adding a new endpoint here, you also need to do the following things:\n *\n * - Add the new endpoint name to `network/options.js` in array `endPoints`.\n * - Add the new endpoint name to the documentation.\n * Scan for 'arrows.to.type` and add it to the description.\n * - Add the endpoint to the examples. At the very least, add it to example\n * `edgeStyles/arrowTypes`.\n * =============================================================================\n */\n\nimport { ArrowData, Point } from \"./types\";\nimport { drawCircle } from \"./shapes\";\n\n/**\n * Common methods for endpoints\n * @class\n */\nclass EndPoint {\n /**\n * Apply transformation on points for display.\n *\n * The following is done:\n * - rotate by the specified angle\n * - multiply the (normalized) coordinates by the passed length\n * - offset by the target coordinates\n * @param points - The point(s) to be transformed.\n * @param arrowData - The data determining the result of the transformation.\n */\n public static transform(points: Point | Point[], arrowData: ArrowData): void {\n if (!Array.isArray(points)) {\n points = [points];\n }\n\n const x = arrowData.point.x;\n const y = arrowData.point.y;\n const angle = arrowData.angle;\n const length = arrowData.length;\n\n for (let i = 0; i < points.length; ++i) {\n const p = points[i];\n const xt = p.x * Math.cos(angle) - p.y * Math.sin(angle);\n const yt = p.x * Math.sin(angle) + p.y * Math.cos(angle);\n\n p.x = x + length * xt;\n p.y = y + length * yt;\n }\n }\n\n /**\n * Draw a closed path using the given real coordinates.\n * @param ctx - The path will be rendered into this context.\n * @param points - The points of the path.\n */\n public static drawPath(ctx: CanvasRenderingContext2D, points: Point[]): void {\n ctx.beginPath();\n ctx.moveTo(points[0].x, points[0].y);\n for (let i = 1; i < points.length; ++i) {\n ctx.lineTo(points[i].x, points[i].y);\n }\n ctx.closePath();\n }\n}\n\n/**\n * Drawing methods for the arrow endpoint.\n */\nclass Image extends EndPoint {\n /**\n * Draw this shape at the end of a line.\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns False as there is no way to fill an image.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): false {\n if (arrowData.image) {\n ctx.save();\n\n ctx.translate(arrowData.point.x, arrowData.point.y);\n ctx.rotate(Math.PI / 2 + arrowData.angle);\n\n const width =\n arrowData.imageWidth != null\n ? arrowData.imageWidth\n : arrowData.image.width;\n const height =\n arrowData.imageHeight != null\n ? arrowData.imageHeight\n : arrowData.image.height;\n\n arrowData.image.drawImageAtPosition(\n ctx,\n 1, // scale\n -width / 2, // x\n 0, // y\n width,\n height\n );\n\n ctx.restore();\n }\n\n return false;\n }\n}\n\n/**\n * Drawing methods for the arrow endpoint.\n */\nclass Arrow extends EndPoint {\n /**\n * Draw this shape at the end of a line.\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const points = [\n { x: 0, y: 0 },\n { x: -1, y: 0.3 },\n { x: -0.9, y: 0 },\n { x: -1, y: -0.3 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the crow endpoint.\n */\nclass Crow {\n /**\n * Draw this shape at the end of a line.\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const points = [\n { x: -1, y: 0 },\n { x: 0, y: 0.3 },\n { x: -0.4, y: 0 },\n { x: 0, y: -0.3 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the curve endpoint.\n */\nclass Curve {\n /**\n * Draw this shape at the end of a line.\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const point = { x: -0.4, y: 0 };\n EndPoint.transform(point, arrowData);\n\n // Update endpoint style for drawing transparent arc.\n ctx.strokeStyle = ctx.fillStyle;\n ctx.fillStyle = \"rgba(0, 0, 0, 0)\";\n\n // Define curve endpoint as semicircle.\n const pi = Math.PI;\n const startAngle = arrowData.angle - pi / 2;\n const endAngle = arrowData.angle + pi / 2;\n ctx.beginPath();\n ctx.arc(\n point.x,\n point.y,\n arrowData.length * 0.4,\n startAngle,\n endAngle,\n false\n );\n ctx.stroke();\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the inverted curve endpoint.\n */\nclass InvertedCurve {\n /**\n * Draw this shape at the end of a line.\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const point = { x: -0.3, y: 0 };\n EndPoint.transform(point, arrowData);\n\n // Update endpoint style for drawing transparent arc.\n ctx.strokeStyle = ctx.fillStyle;\n ctx.fillStyle = \"rgba(0, 0, 0, 0)\";\n\n // Define inverted curve endpoint as semicircle.\n const pi = Math.PI;\n const startAngle = arrowData.angle + pi / 2;\n const endAngle = arrowData.angle + (3 * pi) / 2;\n ctx.beginPath();\n ctx.arc(\n point.x,\n point.y,\n arrowData.length * 0.4,\n startAngle,\n endAngle,\n false\n );\n ctx.stroke();\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the trinagle endpoint.\n */\nclass Triangle {\n /**\n * Draw this shape at the end of a line.\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const points = [\n { x: 0.02, y: 0 },\n { x: -1, y: 0.3 },\n { x: -1, y: -0.3 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the inverted trinagle endpoint.\n */\nclass InvertedTriangle {\n /**\n * Draw this shape at the end of a line.\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const points = [\n { x: 0, y: 0.3 },\n { x: 0, y: -0.3 },\n { x: -1, y: 0 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the circle endpoint.\n */\nclass Circle {\n /**\n * Draw this shape at the end of a line.\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n const point = { x: -0.4, y: 0 };\n\n EndPoint.transform(point, arrowData);\n drawCircle(ctx, point.x, point.y, arrowData.length * 0.4);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the bar endpoint.\n */\nclass Bar {\n /**\n * Draw this shape at the end of a line.\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n /*\n var points = [\n {x:0, y:0.5},\n {x:0, y:-0.5}\n ];\n\n EndPoint.transform(points, arrowData);\n ctx.beginPath();\n ctx.moveTo(points[0].x, points[0].y);\n ctx.lineTo(points[1].x, points[1].y);\n ctx.stroke();\n*/\n\n const points = [\n { x: 0, y: 0.5 },\n { x: 0, y: -0.5 },\n { x: -0.15, y: -0.5 },\n { x: -0.15, y: 0.5 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the box endpoint.\n */\nclass Box {\n /**\n * Draw this shape at the end of a line.\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n const points = [\n { x: 0, y: 0.3 },\n { x: 0, y: -0.3 },\n { x: -0.6, y: -0.3 },\n { x: -0.6, y: 0.3 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the diamond endpoint.\n */\nclass Diamond {\n /**\n * Draw this shape at the end of a line.\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n const points = [\n { x: 0, y: 0 },\n { x: -0.5, y: -0.3 },\n { x: -1, y: 0 },\n { x: -0.5, y: 0.3 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the vee endpoint.\n */\nclass Vee {\n /**\n * Draw this shape at the end of a line.\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const points = [\n { x: -1, y: 0.3 },\n { x: -0.5, y: 0 },\n { x: -1, y: -0.3 },\n { x: 0, y: 0 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the endpoints.\n */\nexport class EndPoints {\n /**\n * Draw an endpoint.\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True if ctx.fill() can be used to fill the arrow, false otherwise.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): boolean {\n let type;\n if (arrowData.type) {\n type = arrowData.type.toLowerCase();\n }\n\n switch (type) {\n case \"image\":\n return Image.draw(ctx, arrowData);\n case \"circle\":\n return Circle.draw(ctx, arrowData);\n case \"box\":\n return Box.draw(ctx, arrowData);\n case \"crow\":\n return Crow.draw(ctx, arrowData);\n case \"curve\":\n return Curve.draw(ctx, arrowData);\n case \"diamond\":\n return Diamond.draw(ctx, arrowData);\n case \"inv_curve\":\n return InvertedCurve.draw(ctx, arrowData);\n case \"triangle\":\n return Triangle.draw(ctx, arrowData);\n case \"inv_triangle\":\n return InvertedTriangle.draw(ctx, arrowData);\n case \"bar\":\n return Bar.draw(ctx, arrowData);\n case \"vee\":\n return Vee.draw(ctx, arrowData);\n case \"arrow\": // fall-through\n default:\n return Arrow.draw(ctx, arrowData);\n }\n }\n}\n","import { overrideOpacity } from \"vis-util/esnext\";\nimport { EndPoints } from \"./end-points\";\nimport {\n ArrowData,\n ArrowDataWithCore,\n ArrowType,\n EdgeFormattingValues,\n EdgeType,\n Id,\n Label,\n EdgeOptions,\n Point,\n PointT,\n SelectiveRequired,\n VBody,\n VNode,\n} from \"./types\";\nimport { drawDashedLine } from \"./shapes\";\nimport { getSelfRefCoordinates } from \"../../shared/ComponentUtil\";\n\nexport interface FindBorderPositionOptions {\n via: Via;\n}\nexport interface FindBorderPositionCircleOptions {\n x: number;\n y: number;\n low: number;\n high: number;\n direction: number;\n}\n\n/**\n * The Base Class for all edges.\n */\nexport abstract class EdgeBase implements EdgeType {\n public from!: VNode; // Initialized in setOptions\n public fromPoint: Point;\n public to!: VNode; // Initialized in setOptions\n public toPoint: Point;\n public via?: VNode;\n\n public color: unknown = {};\n public colorDirty = true;\n public id!: Id; // Initialized in setOptions\n public options!: EdgeOptions; // Initialized in setOptions\n public hoverWidth = 1.5;\n public selectionWidth = 2;\n\n /**\n * Create a new instance.\n * @param options - The options object of given edge.\n * @param _body - The body of the network.\n * @param _labelModule - Label module.\n */\n public constructor(\n options: EdgeOptions,\n protected _body: VBody,\n protected _labelModule: Label\n ) {\n this.setOptions(options);\n\n this.fromPoint = this.from;\n this.toPoint = this.to;\n }\n\n /**\n * Find the intersection between the border of the node and the edge.\n * @param node - The node (either from or to node of the edge).\n * @param ctx - The context that will be used for rendering.\n * @param options - Additional options.\n * @returns Cartesian coordinates of the intersection between the border of the node and the edge.\n */\n protected abstract _findBorderPosition(\n node: VNode,\n ctx: CanvasRenderingContext2D,\n options?: FindBorderPositionOptions\n ): PointT;\n\n /**\n * Return additional point(s) the edge passes through.\n * @returns Cartesian coordinates of the point(s) the edge passes through.\n */\n public abstract getViaNode(): Via;\n\n /** @inheritDoc */\n public abstract getPoint(position: number, viaNode?: Via): Point;\n\n /** @inheritDoc */\n public connect(): void {\n this.from = this._body.nodes[this.options.from];\n this.to = this._body.nodes[this.options.to];\n }\n\n /** @inheritDoc */\n public cleanup(): boolean {\n return false;\n }\n\n /**\n * Set new edge options.\n * @param options - The new edge options object.\n */\n public setOptions(options: EdgeOptions): void {\n this.options = options;\n\n this.from = this._body.nodes[this.options.from];\n this.to = this._body.nodes[this.options.to];\n this.id = this.options.id;\n }\n\n /** @inheritDoc */\n public drawLine(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n | \"color\"\n | \"opacity\"\n | \"shadowColor\"\n | \"shadowSize\"\n | \"shadowX\"\n | \"shadowY\"\n | \"width\"\n >,\n _selected?: boolean,\n _hover?: boolean,\n viaNode: Via = this.getViaNode()\n ): void {\n // set style\n ctx.strokeStyle = this.getColor(ctx, values);\n ctx.lineWidth = values.width;\n\n if (values.dashes !== false) {\n this._drawDashedLine(ctx, values, viaNode);\n } else {\n this._drawLine(ctx, values, viaNode);\n }\n }\n\n /**\n * Draw a line with given style between two nodes through supplied node(s).\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values like color, opacity or shadow.\n * @param viaNode - Additional control point(s) for the edge.\n * @param fromPoint - TODO: Seems ignored, remove?\n * @param toPoint - TODO: Seems ignored, remove?\n */\n private _drawLine(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"shadowColor\" | \"shadowSize\" | \"shadowX\" | \"shadowY\"\n >,\n viaNode: Via,\n fromPoint?: Point,\n toPoint?: Point\n ): void {\n if (this.from != this.to) {\n // draw line\n this._line(ctx, values, viaNode, fromPoint, toPoint);\n } else {\n const [x, y, radius] = this._getCircleData(ctx);\n this._circle(ctx, values, x, y, radius);\n }\n }\n\n /**\n * Draw a dashed line with given style between two nodes through supplied node(s).\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values like color, opacity or shadow.\n * @param viaNode - Additional control point(s) for the edge.\n * @param _fromPoint - Ignored (TODO: remove in the future).\n * @param _toPoint - Ignored (TODO: remove in the future).\n */\n private _drawDashedLine(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"shadowColor\" | \"shadowSize\" | \"shadowX\" | \"shadowY\"\n >,\n viaNode: Via,\n _fromPoint?: Point,\n _toPoint?: Point\n ): void {\n ctx.lineCap = \"round\";\n const pattern = Array.isArray(values.dashes) ? values.dashes : [5, 5];\n\n // only firefox and chrome support this method, else we use the legacy one.\n if (ctx.setLineDash !== undefined) {\n ctx.save();\n\n // set dash settings for chrome or firefox\n ctx.setLineDash(pattern);\n ctx.lineDashOffset = 0;\n\n // draw the line\n if (this.from != this.to) {\n // draw line\n this._line(ctx, values, viaNode);\n } else {\n const [x, y, radius] = this._getCircleData(ctx);\n this._circle(ctx, values, x, y, radius);\n }\n\n // restore the dash settings.\n ctx.setLineDash([0]);\n ctx.lineDashOffset = 0;\n ctx.restore();\n } else {\n // unsupporting smooth lines\n if (this.from != this.to) {\n // draw line\n drawDashedLine(\n ctx,\n this.from.x,\n this.from.y,\n this.to.x,\n this.to.y,\n pattern\n );\n } else {\n const [x, y, radius] = this._getCircleData(ctx);\n this._circle(ctx, values, x, y, radius);\n }\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n\n ctx.stroke();\n\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n }\n }\n\n /**\n * Draw a line with given style between two nodes through supplied node(s).\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values like color, opacity or shadow.\n * @param viaNode - Additional control point(s) for the edge.\n * @param fromPoint - TODO: Seems ignored, remove?\n * @param toPoint - TODO: Seems ignored, remove?\n */\n protected abstract _line(\n ctx: CanvasRenderingContext2D,\n values: EdgeFormattingValues,\n viaNode: Via,\n fromPoint?: Point,\n toPoint?: Point\n ): void;\n\n /**\n * Find the intersection between the border of the node and the edge.\n * @param node - The node (either from or to node of the edge).\n * @param ctx - The context that will be used for rendering.\n * @param options - Additional options.\n * @returns Cartesian coordinates of the intersection between the border of the node and the edge.\n */\n public findBorderPosition(\n node: VNode,\n ctx: CanvasRenderingContext2D,\n options?: FindBorderPositionOptions | FindBorderPositionCircleOptions\n ): PointT {\n if (this.from != this.to) {\n return this._findBorderPosition(node, ctx, options as any);\n } else {\n return this._findBorderPositionCircle(node, ctx, options as any);\n }\n }\n\n /** @inheritDoc */\n public findBorderPositions(ctx: CanvasRenderingContext2D): {\n from: Point;\n to: Point;\n } {\n if (this.from != this.to) {\n return {\n from: this._findBorderPosition(this.from, ctx),\n to: this._findBorderPosition(this.to, ctx),\n };\n } else {\n const [x, y] = this._getCircleData(ctx).slice(0, 2);\n\n return {\n from: this._findBorderPositionCircle(this.from, ctx, {\n x,\n y,\n low: 0.25,\n high: 0.6,\n direction: -1,\n }),\n to: this._findBorderPositionCircle(this.from, ctx, {\n x,\n y,\n low: 0.6,\n high: 0.8,\n direction: 1,\n }),\n };\n }\n }\n\n /**\n * Compute the center point and radius of an edge connected to the same node at both ends.\n * @param ctx - The context that will be used for rendering.\n * @returns `[x, y, radius]`\n */\n protected _getCircleData(\n ctx?: CanvasRenderingContext2D\n ): [number, number, number] {\n const radius = this.options.selfReference.size;\n\n if (ctx !== undefined) {\n if (this.from.shape.width === undefined) {\n this.from.shape.resize(ctx);\n }\n }\n\n // get circle coordinates\n const coordinates = getSelfRefCoordinates(\n ctx,\n this.options.selfReference.angle,\n radius,\n this.from\n );\n\n return [coordinates.x, coordinates.y, radius];\n }\n\n /**\n * Get a point on a circle.\n * @param x - Center of the circle on the x axis.\n * @param y - Center of the circle on the y axis.\n * @param radius - Radius of the circle.\n * @param position - Value between 0 (line start) and 1 (line end).\n * @returns Cartesian coordinates of requested point on the circle.\n */\n private _pointOnCircle(\n x: number,\n y: number,\n radius: number,\n position: number\n ): Point {\n const angle = position * 2 * Math.PI;\n return {\n x: x + radius * Math.cos(angle),\n y: y - radius * Math.sin(angle),\n };\n }\n\n /**\n * Find the intersection between the border of the node and the edge.\n * @remarks\n * This function uses binary search to look for the point where the circle crosses the border of the node.\n * @param nearNode - The node (either from or to node of the edge).\n * @param ctx - The context that will be used for rendering.\n * @param options - Additional options.\n * @returns Cartesian coordinates of the intersection between the border of the node and the edge.\n */\n private _findBorderPositionCircle(\n nearNode: VNode,\n ctx: CanvasRenderingContext2D,\n options: FindBorderPositionCircleOptions\n ): PointT {\n const x = options.x;\n const y = options.y;\n let low = options.low;\n let high = options.high;\n const direction = options.direction;\n\n const maxIterations = 10;\n const radius = this.options.selfReference.size;\n const threshold = 0.05;\n let pos: Point;\n\n let middle = (low + high) * 0.5;\n\n let endPointOffset = 0;\n if (this.options.arrowStrikethrough === true) {\n if (direction === -1) {\n endPointOffset = this.options.endPointOffset.from;\n } else if (direction === 1) {\n endPointOffset = this.options.endPointOffset.to;\n }\n }\n\n let iteration = 0;\n do {\n middle = (low + high) * 0.5;\n\n pos = this._pointOnCircle(x, y, radius, middle);\n const angle = Math.atan2(nearNode.y - pos.y, nearNode.x - pos.x);\n\n const distanceToBorder =\n nearNode.distanceToBorder(ctx, angle) + endPointOffset;\n\n const distanceToPoint = Math.sqrt(\n Math.pow(pos.x - nearNode.x, 2) + Math.pow(pos.y - nearNode.y, 2)\n );\n const difference = distanceToBorder - distanceToPoint;\n if (Math.abs(difference) < threshold) {\n break; // found\n } else if (difference > 0) {\n // distance to nodes is larger than distance to border --> t needs to be bigger if we're looking at the to node.\n if (direction > 0) {\n low = middle;\n } else {\n high = middle;\n }\n } else {\n if (direction > 0) {\n high = middle;\n } else {\n low = middle;\n }\n }\n\n ++iteration;\n } while (low <= high && iteration < maxIterations);\n\n return {\n ...pos,\n t: middle,\n };\n }\n\n /**\n * Get the line width of the edge. Depends on width and whether one of the connected nodes is selected.\n * @param selected - Determines wheter the line is selected.\n * @param hover - Determines wheter the line is being hovered, only applies if selected is false.\n * @returns The width of the line.\n */\n public getLineWidth(selected: boolean, hover: boolean): number {\n if (selected === true) {\n return Math.max(this.selectionWidth, 0.3 / this._body.view.scale);\n } else if (hover === true) {\n return Math.max(this.hoverWidth, 0.3 / this._body.view.scale);\n } else {\n return Math.max(this.options.width, 0.3 / this._body.view.scale);\n }\n }\n\n /**\n * Compute the color or gradient for given edge.\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values like color, opacity or shadow.\n * @param _selected - Ignored (TODO: remove in the future).\n * @param _hover - Ignored (TODO: remove in the future).\n * @returns Color string if single color is inherited or gradient if two.\n */\n public getColor(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired\n ): string | CanvasGradient {\n if (values.inheritsColor !== false) {\n // when this is a loop edge, just use the 'from' method\n if (values.inheritsColor === \"both\" && this.from.id !== this.to.id) {\n const grd = ctx.createLinearGradient(\n this.from.x,\n this.from.y,\n this.to.x,\n this.to.y\n );\n let fromColor = this.from.options.color.highlight.border;\n let toColor = this.to.options.color.highlight.border;\n\n if (this.from.selected === false && this.to.selected === false) {\n fromColor = overrideOpacity(\n this.from.options.color.border,\n values.opacity\n );\n toColor = overrideOpacity(\n this.to.options.color.border,\n values.opacity\n );\n } else if (this.from.selected === true && this.to.selected === false) {\n toColor = this.to.options.color.border;\n } else if (this.from.selected === false && this.to.selected === true) {\n fromColor = this.from.options.color.border;\n }\n grd.addColorStop(0, fromColor);\n grd.addColorStop(1, toColor);\n\n // -------------------- this returns -------------------- //\n return grd;\n }\n\n if (values.inheritsColor === \"to\") {\n return overrideOpacity(this.to.options.color.border, values.opacity);\n } else {\n // \"from\"\n return overrideOpacity(this.from.options.color.border, values.opacity);\n }\n } else {\n return overrideOpacity(values.color, values.opacity);\n }\n }\n\n /**\n * Draw a line from a node to itself, a circle.\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values like color, opacity or shadow.\n * @param x - Center of the circle on the x axis.\n * @param y - Center of the circle on the y axis.\n * @param radius - Radius of the circle.\n */\n private _circle(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"shadowColor\" | \"shadowSize\" | \"shadowX\" | \"shadowY\"\n >,\n x: number,\n y: number,\n radius: number\n ): void {\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n\n //full circle\n let angleFrom = 0;\n let angleTo = Math.PI * 2;\n\n if (!this.options.selfReference.renderBehindTheNode) {\n //render only parts which are not overlaping with parent node\n //need to find x,y of from point and x,y to point\n //calculating radians\n const low = this.options.selfReference.angle;\n const high = this.options.selfReference.angle + Math.PI;\n const pointTFrom = this._findBorderPositionCircle(this.from, ctx, {\n x,\n y,\n low,\n high,\n direction: -1,\n });\n const pointTTo = this._findBorderPositionCircle(this.from, ctx, {\n x,\n y,\n low,\n high,\n direction: 1,\n });\n angleFrom = Math.atan2(pointTFrom.y - y, pointTFrom.x - x);\n angleTo = Math.atan2(pointTTo.y - y, pointTTo.x - x);\n }\n\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, radius, angleFrom, angleTo, false);\n ctx.stroke();\n\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n }\n\n /**\n * @inheritDoc\n * @remarks\n * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment\n */\n public getDistanceToEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number\n ): number {\n if (this.from != this.to) {\n return this._getDistanceToEdge(x1, y1, x2, y2, x3, y3);\n } else {\n const [x, y, radius] = this._getCircleData(undefined);\n const dx = x - x3;\n const dy = y - y3;\n return Math.abs(Math.sqrt(dx * dx + dy * dy) - radius);\n }\n }\n\n /**\n * Calculate the distance between a point (x3, y3) and a line segment from (x1, y1) to (x2, y2).\n * @remarks\n * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment\n * @param x1 - First end of the line segment on the x axis.\n * @param y1 - First end of the line segment on the y axis.\n * @param x2 - Second end of the line segment on the x axis.\n * @param y2 - Second end of the line segment on the y axis.\n * @param x3 - Position of the point on the x axis.\n * @param y3 - Position of the point on the y axis.\n * @param via - Additional control point(s) for the edge.\n * @returns The distance between the line segment and the point.\n */\n protected abstract _getDistanceToEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n via?: Via\n ): number;\n\n /**\n * Calculate the distance between a point (x3, y3) and a line segment from (x1, y1) to (x2, y2).\n * @param x1 - First end of the line segment on the x axis.\n * @param y1 - First end of the line segment on the y axis.\n * @param x2 - Second end of the line segment on the x axis.\n * @param y2 - Second end of the line segment on the y axis.\n * @param x3 - Position of the point on the x axis.\n * @param y3 - Position of the point on the y axis.\n * @returns The distance between the line segment and the point.\n */\n protected _getDistanceToLine(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number\n ): number {\n const px = x2 - x1;\n const py = y2 - y1;\n const something = px * px + py * py;\n let u = ((x3 - x1) * px + (y3 - y1) * py) / something;\n\n if (u > 1) {\n u = 1;\n } else if (u < 0) {\n u = 0;\n }\n\n const x = x1 + u * px;\n const y = y1 + u * py;\n const dx = x - x3;\n const dy = y - y3;\n\n //# Note: If the actual distance does not matter,\n //# if you only want to compare what this function\n //# returns to other results of this function, you\n //# can just return the squared distance instead\n //# (i.e. remove the sqrt) to gain a little performance\n\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n /** @inheritDoc */\n public getArrowData(\n ctx: CanvasRenderingContext2D,\n position: \"middle\",\n viaNode: VNode,\n selected: boolean,\n hover: boolean,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"middleArrowType\" | \"middleArrowScale\" | \"width\"\n >\n ): ArrowDataWithCore;\n /** @inheritDoc */\n public getArrowData(\n ctx: CanvasRenderingContext2D,\n position: \"to\",\n viaNode: VNode,\n selected: boolean,\n hover: boolean,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"toArrowType\" | \"toArrowScale\" | \"width\"\n >\n ): ArrowDataWithCore;\n /** @inheritDoc */\n public getArrowData(\n ctx: CanvasRenderingContext2D,\n position: \"from\",\n viaNode: VNode,\n selected: boolean,\n hover: boolean,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"fromArrowType\" | \"fromArrowScale\" | \"width\"\n >\n ): ArrowDataWithCore;\n /** @inheritDoc */\n public getArrowData(\n ctx: CanvasRenderingContext2D,\n position: \"from\" | \"to\" | \"middle\",\n viaNode: VNode,\n _selected: boolean,\n _hover: boolean,\n values: SelectiveRequired\n ): ArrowDataWithCore {\n // set lets\n let angle: number;\n let arrowPoint: Point;\n let node1: VNode;\n let node2: VNode;\n let reversed: boolean;\n let scaleFactor: number;\n let type: ArrowType;\n const lineWidth: number = values.width;\n\n if (position === \"from\") {\n node1 = this.from;\n node2 = this.to;\n reversed = values.fromArrowScale! < 0;\n scaleFactor = Math.abs(values.fromArrowScale!);\n type = values.fromArrowType!;\n } else if (position === \"to\") {\n node1 = this.to;\n node2 = this.from;\n reversed = values.toArrowScale! < 0;\n scaleFactor = Math.abs(values.toArrowScale!);\n type = values.toArrowType!;\n } else {\n node1 = this.to;\n node2 = this.from;\n reversed = values.middleArrowScale! < 0;\n scaleFactor = Math.abs(values.middleArrowScale!);\n type = values.middleArrowType!;\n }\n\n const length = 15 * scaleFactor + 3 * lineWidth; // 3* lineWidth is the width of the edge.\n\n // if not connected to itself\n if (node1 != node2) {\n const approximateEdgeLength = Math.hypot(\n node1.x - node2.x,\n node1.y - node2.y\n );\n const relativeLength = length / approximateEdgeLength;\n\n if (position !== \"middle\") {\n // draw arrow head\n if (this.options.smooth.enabled === true) {\n const pointT = this._findBorderPosition(node1, ctx, { via: viaNode });\n const guidePos = this.getPoint(\n pointT.t + relativeLength * (position === \"from\" ? 1 : -1),\n viaNode\n );\n angle = Math.atan2(pointT.y - guidePos.y, pointT.x - guidePos.x);\n arrowPoint = pointT;\n } else {\n angle = Math.atan2(node1.y - node2.y, node1.x - node2.x);\n arrowPoint = this._findBorderPosition(node1, ctx);\n }\n } else {\n // Negative half length reverses arrow direction.\n const halfLength = (reversed ? -relativeLength : relativeLength) / 2;\n const guidePos1 = this.getPoint(0.5 + halfLength, viaNode);\n const guidePos2 = this.getPoint(0.5 - halfLength, viaNode);\n angle = Math.atan2(\n guidePos1.y - guidePos2.y,\n guidePos1.x - guidePos2.x\n );\n arrowPoint = this.getPoint(0.5, viaNode);\n }\n } else {\n // draw circle\n const [x, y, radius] = this._getCircleData(ctx);\n\n if (position === \"from\") {\n const low = this.options.selfReference.angle;\n const high = this.options.selfReference.angle + Math.PI;\n\n const pointT = this._findBorderPositionCircle(this.from, ctx, {\n x,\n y,\n low,\n high,\n direction: -1,\n });\n angle = pointT.t * -2 * Math.PI + 1.5 * Math.PI + 0.1 * Math.PI;\n arrowPoint = pointT;\n } else if (position === \"to\") {\n const low = this.options.selfReference.angle;\n const high = this.options.selfReference.angle + Math.PI;\n\n const pointT = this._findBorderPositionCircle(this.from, ctx, {\n x,\n y,\n low,\n high,\n direction: 1,\n });\n angle = pointT.t * -2 * Math.PI + 1.5 * Math.PI - 1.1 * Math.PI;\n arrowPoint = pointT;\n } else {\n const pos = this.options.selfReference.angle / (2 * Math.PI);\n arrowPoint = this._pointOnCircle(x, y, radius, pos);\n angle = pos * -2 * Math.PI + 1.5 * Math.PI + 0.1 * Math.PI;\n }\n }\n\n const xi = arrowPoint.x - length * 0.9 * Math.cos(angle);\n const yi = arrowPoint.y - length * 0.9 * Math.sin(angle);\n const arrowCore = { x: xi, y: yi };\n\n return {\n point: arrowPoint,\n core: arrowCore,\n angle: angle,\n length: length,\n type: type,\n };\n }\n\n /** @inheritDoc */\n public drawArrowHead(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n | \"color\"\n | \"opacity\"\n | \"shadowColor\"\n | \"shadowSize\"\n | \"shadowX\"\n | \"shadowY\"\n | \"width\"\n >,\n _selected: boolean,\n _hover: boolean,\n arrowData: ArrowData\n ): void {\n // set style\n ctx.strokeStyle = this.getColor(ctx, values);\n ctx.fillStyle = ctx.strokeStyle;\n ctx.lineWidth = values.width;\n\n const canFill = EndPoints.draw(ctx, arrowData);\n\n if (canFill) {\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n ctx.fill();\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n }\n }\n\n /**\n * Set the shadow formatting values in the context if enabled, do nothing otherwise.\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values for the shadow.\n */\n public enableShadow(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"shadowColor\" | \"shadowSize\" | \"shadowX\" | \"shadowY\"\n >\n ): void {\n if (values.shadow === true) {\n ctx.shadowColor = values.shadowColor;\n ctx.shadowBlur = values.shadowSize;\n ctx.shadowOffsetX = values.shadowX;\n ctx.shadowOffsetY = values.shadowY;\n }\n }\n\n /**\n * Reset the shadow formatting values in the context if enabled, do nothing otherwise.\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values for the shadow.\n */\n public disableShadow(\n ctx: CanvasRenderingContext2D,\n values: EdgeFormattingValues\n ): void {\n if (values.shadow === true) {\n ctx.shadowColor = \"rgba(0,0,0,0)\";\n ctx.shadowBlur = 0;\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n }\n }\n\n /**\n * Render the background according to the formatting values.\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values for the background.\n */\n public drawBackground(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"backgroundColor\" | \"backgroundSize\"\n >\n ): void {\n if (values.background !== false) {\n // save original line attrs\n const origCtxAttr = {\n strokeStyle: ctx.strokeStyle,\n lineWidth: ctx.lineWidth,\n dashes: (ctx as any).dashes,\n };\n\n ctx.strokeStyle = values.backgroundColor;\n ctx.lineWidth = values.backgroundSize;\n this.setStrokeDashed(ctx, values.backgroundDashes);\n\n ctx.stroke();\n\n // restore original line attrs\n ctx.strokeStyle = origCtxAttr.strokeStyle;\n ctx.lineWidth = origCtxAttr.lineWidth;\n (ctx as any).dashes = origCtxAttr.dashes;\n this.setStrokeDashed(ctx, values.dashes);\n }\n }\n\n /**\n * Set the line dash pattern if supported. Logs a warning to the console if it isn't supported.\n * @param ctx - The context that will be used for rendering.\n * @param dashes - The pattern [line, space, line…], true for default dashed line or false for normal line.\n */\n public setStrokeDashed(\n ctx: CanvasRenderingContext2D,\n dashes?: boolean | number[]\n ): void {\n if (dashes !== false) {\n if (ctx.setLineDash !== undefined) {\n const pattern = Array.isArray(dashes) ? dashes : [5, 5];\n ctx.setLineDash(pattern);\n } else {\n console.warn(\n \"setLineDash is not supported in this browser. The dashed stroke cannot be used.\"\n );\n }\n } else {\n if (ctx.setLineDash !== undefined) {\n ctx.setLineDash([]);\n } else {\n console.warn(\n \"setLineDash is not supported in this browser. The dashed stroke cannot be used.\"\n );\n }\n }\n }\n}\n","import { EdgeBase } from \"./edge-base\";\nimport {\n EdgeFormattingValues,\n Label,\n EdgeOptions,\n Point,\n PointT,\n SelectiveRequired,\n VBody,\n VNode,\n} from \"./types\";\n\n/**\n * The Base Class for all Bezier edges.\n * Bezier curves are used to model smooth gradual curves in paths between nodes.\n */\nexport abstract class BezierEdgeBase extends EdgeBase {\n /**\n * Create a new instance.\n * @param options - The options object of given edge.\n * @param body - The body of the network.\n * @param labelModule - Label module.\n */\n public constructor(options: EdgeOptions, body: VBody, labelModule: Label) {\n super(options, body, labelModule);\n }\n\n /**\n * Compute additional point(s) the edge passes through.\n * @returns Cartesian coordinates of the point(s) the edge passes through.\n */\n protected abstract _getViaCoordinates(): Via;\n\n /**\n * Find the intersection between the border of the node and the edge.\n * @remarks\n * This function uses binary search to look for the point where the bezier curve crosses the border of the node.\n * @param nearNode - The node (either from or to node of the edge).\n * @param ctx - The context that will be used for rendering.\n * @param viaNode - Additional node(s) the edge passes through.\n * @returns Cartesian coordinates of the intersection between the border of the node and the edge.\n */\n protected _findBorderPositionBezier(\n nearNode: VNode,\n ctx: CanvasRenderingContext2D,\n viaNode: Via = this._getViaCoordinates()\n ): PointT {\n const maxIterations = 10;\n const threshold = 0.2;\n let from = false;\n let high = 1;\n let low = 0;\n let node = this.to;\n let pos: Point;\n let middle: number;\n\n let endPointOffset = this.options.endPointOffset\n ? this.options.endPointOffset.to\n : 0;\n\n if (nearNode.id === this.from.id) {\n node = this.from;\n from = true;\n\n endPointOffset = this.options.endPointOffset\n ? this.options.endPointOffset.from\n : 0;\n }\n\n if (this.options.arrowStrikethrough === false) {\n endPointOffset = 0;\n }\n\n let iteration = 0;\n do {\n middle = (low + high) * 0.5;\n\n pos = this.getPoint(middle, viaNode);\n const angle = Math.atan2(node.y - pos.y, node.x - pos.x);\n\n const distanceToBorder =\n node.distanceToBorder(ctx, angle) + endPointOffset;\n\n const distanceToPoint = Math.sqrt(\n Math.pow(pos.x - node.x, 2) + Math.pow(pos.y - node.y, 2)\n );\n const difference = distanceToBorder - distanceToPoint;\n if (Math.abs(difference) < threshold) {\n break; // found\n } else if (difference < 0) {\n // distance to nodes is larger than distance to border --> t needs to be bigger if we're looking at the to node.\n if (from === false) {\n low = middle;\n } else {\n high = middle;\n }\n } else {\n if (from === false) {\n high = middle;\n } else {\n low = middle;\n }\n }\n\n ++iteration;\n } while (low <= high && iteration < maxIterations);\n\n return {\n ...pos,\n t: middle,\n };\n }\n\n /**\n * Calculate the distance between a point (x3,y3) and a line segment from (x1,y1) to (x2,y2).\n * @remarks\n * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment\n * @param x1 - First end of the line segment on the x axis.\n * @param y1 - First end of the line segment on the y axis.\n * @param x2 - Second end of the line segment on the x axis.\n * @param y2 - Second end of the line segment on the y axis.\n * @param x3 - Position of the point on the x axis.\n * @param y3 - Position of the point on the y axis.\n * @param via - The control point for the edge.\n * @returns The distance between the line segment and the point.\n */\n protected _getDistanceToBezierEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n via: Point\n ): number {\n // x3,y3 is the point\n let minDistance = 1e9;\n let distance;\n let i, t, x, y;\n let lastX = x1;\n let lastY = y1;\n for (i = 1; i < 10; i++) {\n t = 0.1 * i;\n x =\n Math.pow(1 - t, 2) * x1 + 2 * t * (1 - t) * via.x + Math.pow(t, 2) * x2;\n y =\n Math.pow(1 - t, 2) * y1 + 2 * t * (1 - t) * via.y + Math.pow(t, 2) * y2;\n if (i > 0) {\n distance = this._getDistanceToLine(lastX, lastY, x, y, x3, y3);\n minDistance = distance < minDistance ? distance : minDistance;\n }\n lastX = x;\n lastY = y;\n }\n\n return minDistance;\n }\n\n /**\n * Render a bezier curve between two nodes.\n * @remarks\n * The method accepts zero, one or two control points.\n * Passing zero control points just draws a straight line.\n * @param ctx - The context that will be used for rendering.\n * @param values - Style options for edge drawing.\n * @param viaNode1 - First control point for curve drawing.\n * @param viaNode2 - Second control point for curve drawing.\n */\n protected _bezierCurve(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n | \"backgroundColor\"\n | \"backgroundSize\"\n | \"shadowColor\"\n | \"shadowSize\"\n | \"shadowX\"\n | \"shadowY\"\n >,\n viaNode1?: Point,\n viaNode2?: Point\n ): void {\n ctx.beginPath();\n ctx.moveTo(this.fromPoint.x, this.fromPoint.y);\n\n if (viaNode1 != null && viaNode1.x != null) {\n if (viaNode2 != null && viaNode2.x != null) {\n ctx.bezierCurveTo(\n viaNode1.x,\n viaNode1.y,\n viaNode2.x,\n viaNode2.y,\n this.toPoint.x,\n this.toPoint.y\n );\n } else {\n ctx.quadraticCurveTo(\n viaNode1.x,\n viaNode1.y,\n this.toPoint.x,\n this.toPoint.y\n );\n }\n } else {\n // fallback to normal straight edge\n ctx.lineTo(this.toPoint.x, this.toPoint.y);\n }\n\n // draw a background\n this.drawBackground(ctx, values);\n\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n ctx.stroke();\n this.disableShadow(ctx, values);\n }\n\n /** @inheritDoc */\n public getViaNode(): Via {\n return this._getViaCoordinates();\n }\n}\n","import { BezierEdgeBase } from \"./util/bezier-edge-base\";\nimport {\n EdgeFormattingValues,\n Label,\n EdgeOptions,\n Point,\n PointT,\n SelectiveRequired,\n VBody,\n VNode,\n} from \"./util/types\";\n\n/**\n * A Dynamic Bezier Edge. Bezier curves are used to model smooth gradual\n * curves in paths between nodes. The Dynamic piece refers to how the curve\n * reacts to physics changes.\n * @augments BezierEdgeBase\n */\nexport class BezierEdgeDynamic extends BezierEdgeBase {\n public via: VNode = this.via; // constructor → super → super → setOptions → setupSupportNode\n private readonly _boundFunction: () => void;\n\n /**\n * Create a new instance.\n * @param options - The options object of given edge.\n * @param body - The body of the network.\n * @param labelModule - Label module.\n */\n public constructor(options: EdgeOptions, body: VBody, labelModule: Label) {\n //this.via = undefined; // Here for completeness but not allowed to defined before super() is invoked.\n super(options, body, labelModule); // --> this calls the setOptions below\n this._boundFunction = (): void => {\n this.positionBezierNode();\n };\n this._body.emitter.on(\"_repositionBezierNodes\", this._boundFunction);\n }\n\n /** @inheritDoc */\n public setOptions(options: EdgeOptions): void {\n super.setOptions(options);\n\n // check if the physics has changed.\n let physicsChange = false;\n if (this.options.physics !== options.physics) {\n physicsChange = true;\n }\n\n // set the options and the to and from nodes\n this.options = options;\n this.id = this.options.id;\n this.from = this._body.nodes[this.options.from];\n this.to = this._body.nodes[this.options.to];\n\n // setup the support node and connect\n this.setupSupportNode();\n this.connect();\n\n // when we change the physics state of the edge, we reposition the support node.\n if (physicsChange === true) {\n this.via.setOptions({ physics: this.options.physics });\n this.positionBezierNode();\n }\n }\n\n /** @inheritDoc */\n public connect(): void {\n this.from = this._body.nodes[this.options.from];\n this.to = this._body.nodes[this.options.to];\n if (\n this.from === undefined ||\n this.to === undefined ||\n this.options.physics === false\n ) {\n this.via.setOptions({ physics: false });\n } else {\n // fix weird behaviour where a self referencing node has physics enabled\n if (this.from.id === this.to.id) {\n this.via.setOptions({ physics: false });\n } else {\n this.via.setOptions({ physics: true });\n }\n }\n }\n\n /** @inheritDoc */\n public cleanup(): boolean {\n this._body.emitter.off(\"_repositionBezierNodes\", this._boundFunction);\n if (this.via !== undefined) {\n delete this._body.nodes[this.via.id];\n this.via = undefined;\n return true;\n }\n return false;\n }\n\n /**\n * Create and add a support node if not already present.\n * @remarks\n * Bezier curves require an anchor point to calculate the smooth flow.\n * These points are nodes.\n * These nodes are invisible but are used for the force calculation.\n *\n * The changed data is not called, if needed, it is returned by the main edge constructor.\n */\n public setupSupportNode(): void {\n if (this.via === undefined) {\n const nodeId = \"edgeId:\" + this.id;\n const node = this._body.functions.createNode({\n id: nodeId,\n shape: \"circle\",\n physics: true,\n hidden: true,\n });\n this._body.nodes[nodeId] = node;\n this.via = node;\n this.via.parentEdgeId = this.id;\n this.positionBezierNode();\n }\n }\n\n /**\n * Position bezier node.\n */\n public positionBezierNode(): void {\n if (\n this.via !== undefined &&\n this.from !== undefined &&\n this.to !== undefined\n ) {\n this.via.x = 0.5 * (this.from.x + this.to.x);\n this.via.y = 0.5 * (this.from.y + this.to.y);\n } else if (this.via !== undefined) {\n this.via.x = 0;\n this.via.y = 0;\n }\n }\n\n /** @inheritDoc */\n protected _line(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n | \"backgroundColor\"\n | \"backgroundSize\"\n | \"shadowColor\"\n | \"shadowSize\"\n | \"shadowX\"\n | \"shadowY\"\n >,\n viaNode: VNode\n ): void {\n this._bezierCurve(ctx, values, viaNode);\n }\n\n /** @inheritDoc */\n protected _getViaCoordinates(): Point {\n return this.via;\n }\n\n /** @inheritDoc */\n public getViaNode(): Point {\n return this.via;\n }\n\n /** @inheritDoc */\n public getPoint(position: number, viaNode: Point = this.via): Point {\n if (this.from === this.to) {\n const [cx, cy, cr] = this._getCircleData();\n const a = 2 * Math.PI * (1 - position);\n return {\n x: cx + cr * Math.sin(a),\n y: cy + cr - cr * (1 - Math.cos(a)),\n };\n } else {\n return {\n x:\n Math.pow(1 - position, 2) * this.fromPoint.x +\n 2 * position * (1 - position) * viaNode.x +\n Math.pow(position, 2) * this.toPoint.x,\n y:\n Math.pow(1 - position, 2) * this.fromPoint.y +\n 2 * position * (1 - position) * viaNode.y +\n Math.pow(position, 2) * this.toPoint.y,\n };\n }\n }\n\n /** @inheritDoc */\n protected _findBorderPosition(\n nearNode: VNode,\n ctx: CanvasRenderingContext2D\n ): PointT {\n return this._findBorderPositionBezier(nearNode, ctx, this.via);\n }\n\n /** @inheritDoc */\n protected _getDistanceToEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number\n ): number {\n // x3,y3 is the point\n return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, this.via);\n }\n}\n","import { BezierEdgeBase } from \"./util/bezier-edge-base\";\nimport {\n EdgeFormattingValues,\n Label,\n EdgeOptions,\n Point,\n PointT,\n SelectiveRequired,\n VBody,\n VNode,\n} from \"./util/types\";\n\n/**\n * A Static Bezier Edge. Bezier curves are used to model smooth gradual curves in paths between nodes.\n */\nexport class BezierEdgeStatic extends BezierEdgeBase {\n /**\n * Create a new instance.\n * @param options - The options object of given edge.\n * @param body - The body of the network.\n * @param labelModule - Label module.\n */\n public constructor(options: EdgeOptions, body: VBody, labelModule: Label) {\n super(options, body, labelModule);\n }\n\n /** @inheritDoc */\n protected _line(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n | \"backgroundColor\"\n | \"backgroundSize\"\n | \"shadowColor\"\n | \"shadowSize\"\n | \"shadowX\"\n | \"shadowY\"\n >,\n viaNode: Point\n ): void {\n this._bezierCurve(ctx, values, viaNode);\n }\n\n /** @inheritDoc */\n public getViaNode(): Point {\n return this._getViaCoordinates();\n }\n\n /**\n * Compute the coordinates of the via node.\n * @remarks\n * We do not use the to and fromPoints here to make the via nodes the same as edges without arrows.\n * @returns Cartesian coordinates of the via node.\n */\n protected _getViaCoordinates(): Point {\n // Assumption: x/y coordinates in from/to always defined\n const factor = this.options.smooth.roundness;\n const type = this.options.smooth.type;\n let dx = Math.abs(this.from.x - this.to.x);\n let dy = Math.abs(this.from.y - this.to.y);\n if (type === \"discrete\" || type === \"diagonalCross\") {\n let stepX;\n let stepY;\n\n if (dx <= dy) {\n stepX = stepY = factor * dy;\n } else {\n stepX = stepY = factor * dx;\n }\n\n if (this.from.x > this.to.x) {\n stepX = -stepX;\n }\n if (this.from.y >= this.to.y) {\n stepY = -stepY;\n }\n\n let xVia = this.from.x + stepX;\n let yVia = this.from.y + stepY;\n\n if (type === \"discrete\") {\n if (dx <= dy) {\n xVia = dx < factor * dy ? this.from.x : xVia;\n } else {\n yVia = dy < factor * dx ? this.from.y : yVia;\n }\n }\n\n return { x: xVia, y: yVia };\n } else if (type === \"straightCross\") {\n let stepX = (1 - factor) * dx;\n let stepY = (1 - factor) * dy;\n\n if (dx <= dy) {\n // up - down\n stepX = 0;\n if (this.from.y < this.to.y) {\n stepY = -stepY;\n }\n } else {\n // left - right\n if (this.from.x < this.to.x) {\n stepX = -stepX;\n }\n stepY = 0;\n }\n\n return {\n x: this.to.x + stepX,\n y: this.to.y + stepY,\n };\n } else if (type === \"horizontal\") {\n let stepX = (1 - factor) * dx;\n if (this.from.x < this.to.x) {\n stepX = -stepX;\n }\n\n return {\n x: this.to.x + stepX,\n y: this.from.y,\n };\n } else if (type === \"vertical\") {\n let stepY = (1 - factor) * dy;\n if (this.from.y < this.to.y) {\n stepY = -stepY;\n }\n\n return {\n x: this.from.x,\n y: this.to.y + stepY,\n };\n } else if (type === \"curvedCW\") {\n dx = this.to.x - this.from.x;\n dy = this.from.y - this.to.y;\n const radius = Math.sqrt(dx * dx + dy * dy);\n const pi = Math.PI;\n\n const originalAngle = Math.atan2(dy, dx);\n const myAngle = (originalAngle + (factor * 0.5 + 0.5) * pi) % (2 * pi);\n\n return {\n x: this.from.x + (factor * 0.5 + 0.5) * radius * Math.sin(myAngle),\n y: this.from.y + (factor * 0.5 + 0.5) * radius * Math.cos(myAngle),\n };\n } else if (type === \"curvedCCW\") {\n dx = this.to.x - this.from.x;\n dy = this.from.y - this.to.y;\n const radius = Math.sqrt(dx * dx + dy * dy);\n const pi = Math.PI;\n\n const originalAngle = Math.atan2(dy, dx);\n const myAngle = (originalAngle + (-factor * 0.5 + 0.5) * pi) % (2 * pi);\n\n return {\n x: this.from.x + (factor * 0.5 + 0.5) * radius * Math.sin(myAngle),\n y: this.from.y + (factor * 0.5 + 0.5) * radius * Math.cos(myAngle),\n };\n } else {\n // continuous\n let stepX;\n let stepY;\n\n if (dx <= dy) {\n stepX = stepY = factor * dy;\n } else {\n stepX = stepY = factor * dx;\n }\n\n if (this.from.x > this.to.x) {\n stepX = -stepX;\n }\n if (this.from.y >= this.to.y) {\n stepY = -stepY;\n }\n\n let xVia = this.from.x + stepX;\n let yVia = this.from.y + stepY;\n\n if (dx <= dy) {\n if (this.from.x <= this.to.x) {\n xVia = this.to.x < xVia ? this.to.x : xVia;\n } else {\n xVia = this.to.x > xVia ? this.to.x : xVia;\n }\n } else {\n if (this.from.y >= this.to.y) {\n yVia = this.to.y > yVia ? this.to.y : yVia;\n } else {\n yVia = this.to.y < yVia ? this.to.y : yVia;\n }\n }\n\n return { x: xVia, y: yVia };\n }\n }\n\n /** @inheritDoc */\n protected _findBorderPosition(\n nearNode: VNode,\n ctx: CanvasRenderingContext2D,\n options: { via?: Point } = {}\n ): PointT {\n return this._findBorderPositionBezier(nearNode, ctx, options.via);\n }\n\n /** @inheritDoc */\n protected _getDistanceToEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n viaNode = this._getViaCoordinates()\n ) {\n // x3,y3 is the point\n return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, viaNode);\n }\n\n /** @inheritDoc */\n public getPoint(\n position: number,\n viaNode: Point = this._getViaCoordinates()\n ): Point {\n const t = position;\n const x =\n Math.pow(1 - t, 2) * this.fromPoint.x +\n 2 * t * (1 - t) * viaNode.x +\n Math.pow(t, 2) * this.toPoint.x;\n const y =\n Math.pow(1 - t, 2) * this.fromPoint.y +\n 2 * t * (1 - t) * viaNode.y +\n Math.pow(t, 2) * this.toPoint.y;\n\n return { x: x, y: y };\n }\n}\n","import { BezierEdgeBase } from \"./bezier-edge-base\";\nimport { Label, EdgeOptions, Point, VBody } from \"./types\";\n\n/**\n * A Base Class for all Cubic Bezier Edges. Bezier curves are used to model\n * smooth gradual curves in paths between nodes.\n * @augments BezierEdgeBase\n */\nexport abstract class CubicBezierEdgeBase extends BezierEdgeBase {\n /**\n * Create a new instance.\n * @param options - The options object of given edge.\n * @param body - The body of the network.\n * @param labelModule - Label module.\n */\n public constructor(options: EdgeOptions, body: VBody, labelModule: Label) {\n super(options, body, labelModule);\n }\n\n /**\n * Calculate the distance between a point (x3,y3) and a line segment from (x1,y1) to (x2,y2).\n * @remarks\n * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment\n * https://en.wikipedia.org/wiki/B%C3%A9zier_curve\n * @param x1 - First end of the line segment on the x axis.\n * @param y1 - First end of the line segment on the y axis.\n * @param x2 - Second end of the line segment on the x axis.\n * @param y2 - Second end of the line segment on the y axis.\n * @param x3 - Position of the point on the x axis.\n * @param y3 - Position of the point on the y axis.\n * @param via1 - The first point this edge passes through.\n * @param via2 - The second point this edge passes through.\n * @returns The distance between the line segment and the point.\n */\n protected _getDistanceToBezierEdge2(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n via1: Point,\n via2: Point\n ): number {\n // x3,y3 is the point\n let minDistance = 1e9;\n let lastX = x1;\n let lastY = y1;\n const vec = [0, 0, 0, 0];\n for (let i = 1; i < 10; i++) {\n const t = 0.1 * i;\n vec[0] = Math.pow(1 - t, 3);\n vec[1] = 3 * t * Math.pow(1 - t, 2);\n vec[2] = 3 * Math.pow(t, 2) * (1 - t);\n vec[3] = Math.pow(t, 3);\n const x = vec[0] * x1 + vec[1] * via1.x + vec[2] * via2.x + vec[3] * x2;\n const y = vec[0] * y1 + vec[1] * via1.y + vec[2] * via2.y + vec[3] * y2;\n if (i > 0) {\n const distance = this._getDistanceToLine(lastX, lastY, x, y, x3, y3);\n minDistance = distance < minDistance ? distance : minDistance;\n }\n lastX = x;\n lastY = y;\n }\n\n return minDistance;\n }\n}\n","import { CubicBezierEdgeBase } from \"./util/cubic-bezier-edge-base\";\nimport {\n EdgeFormattingValues,\n Label,\n EdgeOptions,\n Point,\n PointT,\n SelectiveRequired,\n VBody,\n VNode,\n} from \"./util/types\";\n\n/**\n * A Cubic Bezier Edge. Bezier curves are used to model smooth gradual curves in paths between nodes.\n */\nexport class CubicBezierEdge extends CubicBezierEdgeBase<[Point, Point]> {\n /**\n * Create a new instance.\n * @param options - The options object of given edge.\n * @param body - The body of the network.\n * @param labelModule - Label module.\n */\n public constructor(options: EdgeOptions, body: VBody, labelModule: Label) {\n super(options, body, labelModule);\n }\n\n /** @inheritDoc */\n protected _line(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n | \"backgroundColor\"\n | \"backgroundSize\"\n | \"shadowColor\"\n | \"shadowSize\"\n | \"shadowX\"\n | \"shadowY\"\n >,\n viaNodes: [Point, Point]\n ): void {\n // get the coordinates of the support points.\n const via1 = viaNodes[0];\n const via2 = viaNodes[1];\n this._bezierCurve(ctx, values, via1, via2);\n }\n\n /**\n * Compute the additional points the edge passes through.\n * @returns Cartesian coordinates of the points the edge passes through.\n */\n protected _getViaCoordinates(): [Point, Point] {\n const dx = this.from.x - this.to.x;\n const dy = this.from.y - this.to.y;\n\n let x1: number;\n let y1: number;\n let x2: number;\n let y2: number;\n const roundness = this.options.smooth.roundness;\n\n // horizontal if x > y or if direction is forced or if direction is horizontal\n if (\n (Math.abs(dx) > Math.abs(dy) ||\n this.options.smooth.forceDirection === true ||\n this.options.smooth.forceDirection === \"horizontal\") &&\n this.options.smooth.forceDirection !== \"vertical\"\n ) {\n y1 = this.from.y;\n y2 = this.to.y;\n x1 = this.from.x - roundness * dx;\n x2 = this.to.x + roundness * dx;\n } else {\n y1 = this.from.y - roundness * dy;\n y2 = this.to.y + roundness * dy;\n x1 = this.from.x;\n x2 = this.to.x;\n }\n\n return [\n { x: x1, y: y1 },\n { x: x2, y: y2 },\n ];\n }\n\n /** @inheritDoc */\n public getViaNode(): [Point, Point] {\n return this._getViaCoordinates();\n }\n\n /** @inheritDoc */\n protected _findBorderPosition(\n nearNode: VNode,\n ctx: CanvasRenderingContext2D\n ): PointT {\n return this._findBorderPositionBezier(nearNode, ctx);\n }\n\n /** @inheritDoc */\n protected _getDistanceToEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n [via1, via2]: [Point, Point] = this._getViaCoordinates()\n ): number {\n // x3,y3 is the point\n return this._getDistanceToBezierEdge2(x1, y1, x2, y2, x3, y3, via1, via2);\n }\n\n /** @inheritDoc */\n public getPoint(\n position: number,\n [via1, via2]: [Point, Point] = this._getViaCoordinates()\n ): Point {\n const t = position;\n const vec: [number, number, number, number] = [\n Math.pow(1 - t, 3),\n 3 * t * Math.pow(1 - t, 2),\n 3 * Math.pow(t, 2) * (1 - t),\n Math.pow(t, 3),\n ];\n const x =\n vec[0] * this.fromPoint.x +\n vec[1] * via1.x +\n vec[2] * via2.x +\n vec[3] * this.toPoint.x;\n const y =\n vec[0] * this.fromPoint.y +\n vec[1] * via1.y +\n vec[2] * via2.y +\n vec[3] * this.toPoint.y;\n\n return { x: x, y: y };\n }\n}\n","import { EdgeBase } from \"./util/edge-base\";\nimport {\n EdgeFormattingValues,\n Label,\n EdgeOptions,\n Point,\n PointT,\n SelectiveRequired,\n VBody,\n VNode,\n} from \"./util/types\";\n\n/**\n * A Straight Edge.\n */\nexport class StraightEdge extends EdgeBase {\n /**\n * Create a new instance.\n * @param options - The options object of given edge.\n * @param body - The body of the network.\n * @param labelModule - Label module.\n */\n public constructor(options: EdgeOptions, body: VBody, labelModule: Label) {\n super(options, body, labelModule);\n }\n\n /** @inheritDoc */\n protected _line(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"shadowColor\" | \"shadowSize\" | \"shadowX\" | \"shadowY\"\n >\n ): void {\n // draw a straight line\n ctx.beginPath();\n ctx.moveTo(this.fromPoint.x, this.fromPoint.y);\n ctx.lineTo(this.toPoint.x, this.toPoint.y);\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n ctx.stroke();\n this.disableShadow(ctx, values);\n }\n\n /** @inheritDoc */\n public getViaNode(): undefined {\n return undefined;\n }\n\n /** @inheritDoc */\n public getPoint(position: number): Point {\n return {\n x: (1 - position) * this.fromPoint.x + position * this.toPoint.x,\n y: (1 - position) * this.fromPoint.y + position * this.toPoint.y,\n };\n }\n\n /** @inheritDoc */\n protected _findBorderPosition(\n nearNode: VNode,\n ctx: CanvasRenderingContext2D\n ): PointT {\n let node1 = this.to;\n let node2 = this.from;\n if (nearNode.id === this.from.id) {\n node1 = this.from;\n node2 = this.to;\n }\n\n const angle = Math.atan2(node1.y - node2.y, node1.x - node2.x);\n const dx = node1.x - node2.x;\n const dy = node1.y - node2.y;\n const edgeSegmentLength = Math.sqrt(dx * dx + dy * dy);\n const toBorderDist = nearNode.distanceToBorder(ctx, angle);\n const toBorderPoint =\n (edgeSegmentLength - toBorderDist) / edgeSegmentLength;\n\n return {\n x: (1 - toBorderPoint) * node2.x + toBorderPoint * node1.x,\n y: (1 - toBorderPoint) * node2.y + toBorderPoint * node1.y,\n t: 0,\n };\n }\n\n /** @inheritDoc */\n protected _getDistanceToEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number\n ): number {\n // x3,y3 is the point\n return this._getDistanceToLine(x1, y1, x2, y2, x3, y3);\n }\n}\n","import {\n bridgeObject,\n deepExtend,\n isString,\n mergeOptions,\n selectiveDeepExtend,\n} from \"vis-util/esnext\";\nimport Label from \"./shared/Label\";\nimport {\n choosify,\n getSelfRefCoordinates,\n isValidLabel,\n pointInRect,\n} from \"./shared/ComponentUtil\";\nimport {\n BezierEdgeDynamic,\n BezierEdgeStatic,\n CubicBezierEdge,\n StraightEdge,\n} from \"./edges\";\n\n/**\n * An edge connects two nodes and has a specific direction.\n */\nclass Edge {\n /**\n * @param {object} options values specific to this edge, must contain at least 'from' and 'to'\n * @param {object} body shared state from Network instance\n * @param {Network.Images} imagelist A list with images. Only needed when the edge has image arrows.\n * @param {object} globalOptions options from the EdgesHandler instance\n * @param {object} defaultOptions default options from the EdgeHandler instance. Value and reference are constant\n */\n constructor(options, body, imagelist, globalOptions, defaultOptions) {\n if (body === undefined) {\n throw new Error(\"No body provided\");\n }\n\n // Since globalOptions is constant in values as well as reference,\n // Following needs to be done only once.\n\n this.options = bridgeObject(globalOptions);\n this.globalOptions = globalOptions;\n this.defaultOptions = defaultOptions;\n this.body = body;\n this.imagelist = imagelist;\n\n // initialize variables\n this.id = undefined;\n this.fromId = undefined;\n this.toId = undefined;\n this.selected = false;\n this.hover = false;\n this.labelDirty = true;\n\n this.baseWidth = this.options.width;\n this.baseFontSize = this.options.font.size;\n\n this.from = undefined; // a node\n this.to = undefined; // a node\n\n this.edgeType = undefined;\n\n this.connected = false;\n\n this.labelModule = new Label(\n this.body,\n this.options,\n true /* It's an edge label */\n );\n this.setOptions(options);\n }\n\n /**\n * Set or overwrite options for the edge\n * @param {object} options an object with options\n * @returns {undefined|boolean} undefined if no options, true if layout affecting data changed, false otherwise.\n */\n setOptions(options) {\n if (!options) {\n return;\n }\n\n // Following options if changed affect the layout.\n let affectsLayout =\n (typeof options.physics !== \"undefined\" &&\n this.options.physics !== options.physics) ||\n (typeof options.hidden !== \"undefined\" &&\n (this.options.hidden || false) !== (options.hidden || false)) ||\n (typeof options.from !== \"undefined\" &&\n this.options.from !== options.from) ||\n (typeof options.to !== \"undefined\" && this.options.to !== options.to);\n\n Edge.parseOptions(this.options, options, true, this.globalOptions);\n\n if (options.id !== undefined) {\n this.id = options.id;\n }\n if (options.from !== undefined) {\n this.fromId = options.from;\n }\n if (options.to !== undefined) {\n this.toId = options.to;\n }\n if (options.title !== undefined) {\n this.title = options.title;\n }\n if (options.value !== undefined) {\n options.value = parseFloat(options.value);\n }\n\n const pile = [options, this.options, this.defaultOptions];\n this.chooser = choosify(\"edge\", pile);\n\n // update label Module\n this.updateLabelModule(options);\n\n // Update edge type, this if changed affects the layout.\n affectsLayout = this.updateEdgeType() || affectsLayout;\n\n // if anything has been updates, reset the selection width and the hover width\n this._setInteractionWidths();\n\n // A node is connected when it has a from and to node that both exist in the network.body.nodes.\n this.connect();\n\n return affectsLayout;\n }\n\n /**\n *\n * @param {object} parentOptions\n * @param {object} newOptions\n * @param {boolean} [allowDeletion]\n * @param {object} [globalOptions]\n * @param {boolean} [copyFromGlobals]\n */\n static parseOptions(\n parentOptions,\n newOptions,\n allowDeletion = false,\n globalOptions = {},\n copyFromGlobals = false\n ) {\n const fields = [\n \"endPointOffset\",\n \"arrowStrikethrough\",\n \"id\",\n \"from\",\n \"hidden\",\n \"hoverWidth\",\n \"labelHighlightBold\",\n \"length\",\n \"line\",\n \"opacity\",\n \"physics\",\n \"scaling\",\n \"selectionWidth\",\n \"selfReferenceSize\",\n \"selfReference\",\n \"to\",\n \"title\",\n \"value\",\n \"width\",\n \"font\",\n \"chosen\",\n \"widthConstraint\",\n ];\n\n // only deep extend the items in the field array. These do not have shorthand.\n selectiveDeepExtend(fields, parentOptions, newOptions, allowDeletion);\n\n // Only use endPointOffset values (from and to) if it's valid values\n if (\n newOptions.endPointOffset !== undefined &&\n newOptions.endPointOffset.from !== undefined\n ) {\n if (Number.isFinite(newOptions.endPointOffset.from)) {\n parentOptions.endPointOffset.from = newOptions.endPointOffset.from;\n } else {\n parentOptions.endPointOffset.from =\n globalOptions.endPointOffset.from !== undefined\n ? globalOptions.endPointOffset.from\n : 0;\n console.error(\"endPointOffset.from is not a valid number\");\n }\n }\n\n if (\n newOptions.endPointOffset !== undefined &&\n newOptions.endPointOffset.to !== undefined\n ) {\n if (Number.isFinite(newOptions.endPointOffset.to)) {\n parentOptions.endPointOffset.to = newOptions.endPointOffset.to;\n } else {\n parentOptions.endPointOffset.to =\n globalOptions.endPointOffset.to !== undefined\n ? globalOptions.endPointOffset.to\n : 0;\n console.error(\"endPointOffset.to is not a valid number\");\n }\n }\n\n // Only copy label if it's a legal value.\n if (isValidLabel(newOptions.label)) {\n parentOptions.label = newOptions.label;\n } else if (!isValidLabel(parentOptions.label)) {\n parentOptions.label = undefined;\n }\n\n mergeOptions(parentOptions, newOptions, \"smooth\", globalOptions);\n mergeOptions(parentOptions, newOptions, \"shadow\", globalOptions);\n mergeOptions(parentOptions, newOptions, \"background\", globalOptions);\n\n if (newOptions.dashes !== undefined && newOptions.dashes !== null) {\n parentOptions.dashes = newOptions.dashes;\n } else if (allowDeletion === true && newOptions.dashes === null) {\n parentOptions.dashes = Object.create(globalOptions.dashes); // this sets the pointer of the option back to the global option.\n }\n\n // set the scaling newOptions\n if (newOptions.scaling !== undefined && newOptions.scaling !== null) {\n if (newOptions.scaling.min !== undefined) {\n parentOptions.scaling.min = newOptions.scaling.min;\n }\n if (newOptions.scaling.max !== undefined) {\n parentOptions.scaling.max = newOptions.scaling.max;\n }\n mergeOptions(\n parentOptions.scaling,\n newOptions.scaling,\n \"label\",\n globalOptions.scaling\n );\n } else if (allowDeletion === true && newOptions.scaling === null) {\n parentOptions.scaling = Object.create(globalOptions.scaling); // this sets the pointer of the option back to the global option.\n }\n\n // handle multiple input cases for arrows\n if (newOptions.arrows !== undefined && newOptions.arrows !== null) {\n if (typeof newOptions.arrows === \"string\") {\n const arrows = newOptions.arrows.toLowerCase();\n parentOptions.arrows.to.enabled = arrows.indexOf(\"to\") != -1;\n parentOptions.arrows.middle.enabled = arrows.indexOf(\"middle\") != -1;\n parentOptions.arrows.from.enabled = arrows.indexOf(\"from\") != -1;\n } else if (typeof newOptions.arrows === \"object\") {\n mergeOptions(\n parentOptions.arrows,\n newOptions.arrows,\n \"to\",\n globalOptions.arrows\n );\n mergeOptions(\n parentOptions.arrows,\n newOptions.arrows,\n \"middle\",\n globalOptions.arrows\n );\n mergeOptions(\n parentOptions.arrows,\n newOptions.arrows,\n \"from\",\n globalOptions.arrows\n );\n } else {\n throw new Error(\n \"The arrow newOptions can only be an object or a string. Refer to the documentation. You used:\" +\n JSON.stringify(newOptions.arrows)\n );\n }\n } else if (allowDeletion === true && newOptions.arrows === null) {\n parentOptions.arrows = Object.create(globalOptions.arrows); // this sets the pointer of the option back to the global option.\n }\n\n // handle multiple input cases for color\n if (newOptions.color !== undefined && newOptions.color !== null) {\n const fromColor = isString(newOptions.color)\n ? {\n color: newOptions.color,\n highlight: newOptions.color,\n hover: newOptions.color,\n inherit: false,\n opacity: 1,\n }\n : newOptions.color;\n const toColor = parentOptions.color;\n\n // If passed, fill in values from default options - required in the case of no prototype bridging\n if (copyFromGlobals) {\n deepExtend(toColor, globalOptions.color, false, allowDeletion);\n } else {\n // Clear local properties - need to do it like this in order to retain prototype bridges\n for (const i in toColor) {\n if (Object.prototype.hasOwnProperty.call(toColor, i)) {\n delete toColor[i];\n }\n }\n }\n\n if (isString(toColor)) {\n toColor.color = toColor;\n toColor.highlight = toColor;\n toColor.hover = toColor;\n toColor.inherit = false;\n if (fromColor.opacity === undefined) {\n toColor.opacity = 1.0; // set default\n }\n } else {\n let colorsDefined = false;\n if (fromColor.color !== undefined) {\n toColor.color = fromColor.color;\n colorsDefined = true;\n }\n if (fromColor.highlight !== undefined) {\n toColor.highlight = fromColor.highlight;\n colorsDefined = true;\n }\n if (fromColor.hover !== undefined) {\n toColor.hover = fromColor.hover;\n colorsDefined = true;\n }\n if (fromColor.inherit !== undefined) {\n toColor.inherit = fromColor.inherit;\n }\n if (fromColor.opacity !== undefined) {\n toColor.opacity = Math.min(1, Math.max(0, fromColor.opacity));\n }\n\n if (colorsDefined === true) {\n toColor.inherit = false;\n } else {\n if (toColor.inherit === undefined) {\n toColor.inherit = \"from\"; // Set default\n }\n }\n }\n } else if (allowDeletion === true && newOptions.color === null) {\n parentOptions.color = bridgeObject(globalOptions.color); // set the object back to the global options\n }\n\n if (allowDeletion === true && newOptions.font === null) {\n parentOptions.font = bridgeObject(globalOptions.font); // set the object back to the global options\n }\n\n if (Object.prototype.hasOwnProperty.call(newOptions, \"selfReferenceSize\")) {\n console.warn(\n \"The selfReferenceSize property has been deprecated. Please use selfReference property instead. The selfReference can be set like thise selfReference:{size:30, angle:Math.PI / 4}\"\n );\n parentOptions.selfReference.size = newOptions.selfReferenceSize;\n }\n }\n\n /**\n *\n * @returns {ArrowOptions}\n */\n getFormattingValues() {\n const toArrow =\n this.options.arrows.to === true ||\n this.options.arrows.to.enabled === true;\n const fromArrow =\n this.options.arrows.from === true ||\n this.options.arrows.from.enabled === true;\n const middleArrow =\n this.options.arrows.middle === true ||\n this.options.arrows.middle.enabled === true;\n const inheritsColor = this.options.color.inherit;\n const values = {\n toArrow: toArrow,\n toArrowScale: this.options.arrows.to.scaleFactor,\n toArrowType: this.options.arrows.to.type,\n toArrowSrc: this.options.arrows.to.src,\n toArrowImageWidth: this.options.arrows.to.imageWidth,\n toArrowImageHeight: this.options.arrows.to.imageHeight,\n middleArrow: middleArrow,\n middleArrowScale: this.options.arrows.middle.scaleFactor,\n middleArrowType: this.options.arrows.middle.type,\n middleArrowSrc: this.options.arrows.middle.src,\n middleArrowImageWidth: this.options.arrows.middle.imageWidth,\n middleArrowImageHeight: this.options.arrows.middle.imageHeight,\n fromArrow: fromArrow,\n fromArrowScale: this.options.arrows.from.scaleFactor,\n fromArrowType: this.options.arrows.from.type,\n fromArrowSrc: this.options.arrows.from.src,\n fromArrowImageWidth: this.options.arrows.from.imageWidth,\n fromArrowImageHeight: this.options.arrows.from.imageHeight,\n arrowStrikethrough: this.options.arrowStrikethrough,\n color: inheritsColor ? undefined : this.options.color.color,\n inheritsColor: inheritsColor,\n opacity: this.options.color.opacity,\n hidden: this.options.hidden,\n length: this.options.length,\n shadow: this.options.shadow.enabled,\n shadowColor: this.options.shadow.color,\n shadowSize: this.options.shadow.size,\n shadowX: this.options.shadow.x,\n shadowY: this.options.shadow.y,\n dashes: this.options.dashes,\n width: this.options.width,\n background: this.options.background.enabled,\n backgroundColor: this.options.background.color,\n backgroundSize: this.options.background.size,\n backgroundDashes: this.options.background.dashes,\n };\n if (this.selected || this.hover) {\n if (this.chooser === true) {\n if (this.selected) {\n const selectedWidth = this.options.selectionWidth;\n if (typeof selectedWidth === \"function\") {\n values.width = selectedWidth(values.width);\n } else if (typeof selectedWidth === \"number\") {\n values.width += selectedWidth;\n }\n values.width = Math.max(values.width, 0.3 / this.body.view.scale);\n values.color = this.options.color.highlight;\n values.shadow = this.options.shadow.enabled;\n } else if (this.hover) {\n const hoverWidth = this.options.hoverWidth;\n if (typeof hoverWidth === \"function\") {\n values.width = hoverWidth(values.width);\n } else if (typeof hoverWidth === \"number\") {\n values.width += hoverWidth;\n }\n values.width = Math.max(values.width, 0.3 / this.body.view.scale);\n values.color = this.options.color.hover;\n values.shadow = this.options.shadow.enabled;\n }\n } else if (typeof this.chooser === \"function\") {\n this.chooser(values, this.options.id, this.selected, this.hover);\n if (values.color !== undefined) {\n values.inheritsColor = false;\n }\n if (values.shadow === false) {\n if (\n values.shadowColor !== this.options.shadow.color ||\n values.shadowSize !== this.options.shadow.size ||\n values.shadowX !== this.options.shadow.x ||\n values.shadowY !== this.options.shadow.y\n ) {\n values.shadow = true;\n }\n }\n }\n } else {\n values.shadow = this.options.shadow.enabled;\n values.width = Math.max(values.width, 0.3 / this.body.view.scale);\n }\n return values;\n }\n\n /**\n * update the options in the label module\n * @param {object} options\n */\n updateLabelModule(options) {\n const pile = [\n options,\n this.options,\n this.globalOptions, // Currently set global edge options\n this.defaultOptions,\n ];\n\n this.labelModule.update(this.options, pile);\n\n if (this.labelModule.baseSize !== undefined) {\n this.baseFontSize = this.labelModule.baseSize;\n }\n }\n\n /**\n * update the edge type, set the options\n * @returns {boolean}\n */\n updateEdgeType() {\n const smooth = this.options.smooth;\n let dataChanged = false;\n let changeInType = true;\n if (this.edgeType !== undefined) {\n if (\n (this.edgeType instanceof BezierEdgeDynamic &&\n smooth.enabled === true &&\n smooth.type === \"dynamic\") ||\n (this.edgeType instanceof CubicBezierEdge &&\n smooth.enabled === true &&\n smooth.type === \"cubicBezier\") ||\n (this.edgeType instanceof BezierEdgeStatic &&\n smooth.enabled === true &&\n smooth.type !== \"dynamic\" &&\n smooth.type !== \"cubicBezier\") ||\n (this.edgeType instanceof StraightEdge && smooth.type.enabled === false)\n ) {\n changeInType = false;\n }\n if (changeInType === true) {\n dataChanged = this.cleanup();\n }\n }\n if (changeInType === true) {\n if (smooth.enabled === true) {\n if (smooth.type === \"dynamic\") {\n dataChanged = true;\n this.edgeType = new BezierEdgeDynamic(\n this.options,\n this.body,\n this.labelModule\n );\n } else if (smooth.type === \"cubicBezier\") {\n this.edgeType = new CubicBezierEdge(\n this.options,\n this.body,\n this.labelModule\n );\n } else {\n this.edgeType = new BezierEdgeStatic(\n this.options,\n this.body,\n this.labelModule\n );\n }\n } else {\n this.edgeType = new StraightEdge(\n this.options,\n this.body,\n this.labelModule\n );\n }\n } else {\n // if nothing changes, we just set the options.\n this.edgeType.setOptions(this.options);\n }\n return dataChanged;\n }\n\n /**\n * Connect an edge to its nodes\n */\n connect() {\n this.disconnect();\n\n this.from = this.body.nodes[this.fromId] || undefined;\n this.to = this.body.nodes[this.toId] || undefined;\n this.connected = this.from !== undefined && this.to !== undefined;\n\n if (this.connected === true) {\n this.from.attachEdge(this);\n this.to.attachEdge(this);\n } else {\n if (this.from) {\n this.from.detachEdge(this);\n }\n if (this.to) {\n this.to.detachEdge(this);\n }\n }\n\n this.edgeType.connect();\n }\n\n /**\n * Disconnect an edge from its nodes\n */\n disconnect() {\n if (this.from) {\n this.from.detachEdge(this);\n this.from = undefined;\n }\n if (this.to) {\n this.to.detachEdge(this);\n this.to = undefined;\n }\n\n this.connected = false;\n }\n\n /**\n * get the title of this edge.\n * @returns {string} title The title of the edge, or undefined when no title\n * has been set.\n */\n getTitle() {\n return this.title;\n }\n\n /**\n * check if this node is selecte\n * @returns {boolean} selected True if node is selected, else false\n */\n isSelected() {\n return this.selected;\n }\n\n /**\n * Retrieve the value of the edge. Can be undefined\n * @returns {number} value\n */\n getValue() {\n return this.options.value;\n }\n\n /**\n * Adjust the value range of the edge. The edge will adjust it's width\n * based on its value.\n * @param {number} min\n * @param {number} max\n * @param {number} total\n */\n setValueRange(min, max, total) {\n if (this.options.value !== undefined) {\n const scale = this.options.scaling.customScalingFunction(\n min,\n max,\n total,\n this.options.value\n );\n const widthDiff = this.options.scaling.max - this.options.scaling.min;\n if (this.options.scaling.label.enabled === true) {\n const fontDiff =\n this.options.scaling.label.max - this.options.scaling.label.min;\n this.options.font.size =\n this.options.scaling.label.min + scale * fontDiff;\n }\n this.options.width = this.options.scaling.min + scale * widthDiff;\n } else {\n this.options.width = this.baseWidth;\n this.options.font.size = this.baseFontSize;\n }\n\n this._setInteractionWidths();\n this.updateLabelModule();\n }\n\n /**\n *\n * @private\n */\n _setInteractionWidths() {\n if (typeof this.options.hoverWidth === \"function\") {\n this.edgeType.hoverWidth = this.options.hoverWidth(this.options.width);\n } else {\n this.edgeType.hoverWidth = this.options.hoverWidth + this.options.width;\n }\n if (typeof this.options.selectionWidth === \"function\") {\n this.edgeType.selectionWidth = this.options.selectionWidth(\n this.options.width\n );\n } else {\n this.edgeType.selectionWidth =\n this.options.selectionWidth + this.options.width;\n }\n }\n\n /**\n * Redraw a edge\n * Draw this edge in the given canvas\n * The 2d context of a HTML canvas can be retrieved by canvas.getContext(\"2d\");\n * @param {CanvasRenderingContext2D} ctx\n */\n draw(ctx) {\n const values = this.getFormattingValues();\n if (values.hidden) {\n return;\n }\n\n // get the via node from the edge type\n const viaNode = this.edgeType.getViaNode();\n\n // draw line and label\n this.edgeType.drawLine(ctx, values, this.selected, this.hover, viaNode);\n this.drawLabel(ctx, viaNode);\n }\n\n /**\n * Redraw arrows\n * Draw this arrows in the given canvas\n * The 2d context of a HTML canvas can be retrieved by canvas.getContext(\"2d\");\n * @param {CanvasRenderingContext2D} ctx\n */\n drawArrows(ctx) {\n const values = this.getFormattingValues();\n if (values.hidden) {\n return;\n }\n\n // get the via node from the edge type\n const viaNode = this.edgeType.getViaNode();\n const arrowData = {};\n\n // restore edge targets to defaults\n this.edgeType.fromPoint = this.edgeType.from;\n this.edgeType.toPoint = this.edgeType.to;\n\n // from and to arrows give a different end point for edges. we set them here\n if (values.fromArrow) {\n arrowData.from = this.edgeType.getArrowData(\n ctx,\n \"from\",\n viaNode,\n this.selected,\n this.hover,\n values\n );\n if (values.arrowStrikethrough === false)\n this.edgeType.fromPoint = arrowData.from.core;\n if (values.fromArrowSrc) {\n arrowData.from.image = this.imagelist.load(values.fromArrowSrc);\n }\n if (values.fromArrowImageWidth) {\n arrowData.from.imageWidth = values.fromArrowImageWidth;\n }\n if (values.fromArrowImageHeight) {\n arrowData.from.imageHeight = values.fromArrowImageHeight;\n }\n }\n if (values.toArrow) {\n arrowData.to = this.edgeType.getArrowData(\n ctx,\n \"to\",\n viaNode,\n this.selected,\n this.hover,\n values\n );\n if (values.arrowStrikethrough === false)\n this.edgeType.toPoint = arrowData.to.core;\n if (values.toArrowSrc) {\n arrowData.to.image = this.imagelist.load(values.toArrowSrc);\n }\n if (values.toArrowImageWidth) {\n arrowData.to.imageWidth = values.toArrowImageWidth;\n }\n if (values.toArrowImageHeight) {\n arrowData.to.imageHeight = values.toArrowImageHeight;\n }\n }\n\n // the middle arrow depends on the line, which can depend on the to and from arrows so we do this one lastly.\n if (values.middleArrow) {\n arrowData.middle = this.edgeType.getArrowData(\n ctx,\n \"middle\",\n viaNode,\n this.selected,\n this.hover,\n values\n );\n\n if (values.middleArrowSrc) {\n arrowData.middle.image = this.imagelist.load(values.middleArrowSrc);\n }\n if (values.middleArrowImageWidth) {\n arrowData.middle.imageWidth = values.middleArrowImageWidth;\n }\n if (values.middleArrowImageHeight) {\n arrowData.middle.imageHeight = values.middleArrowImageHeight;\n }\n }\n\n if (values.fromArrow) {\n this.edgeType.drawArrowHead(\n ctx,\n values,\n this.selected,\n this.hover,\n arrowData.from\n );\n }\n if (values.middleArrow) {\n this.edgeType.drawArrowHead(\n ctx,\n values,\n this.selected,\n this.hover,\n arrowData.middle\n );\n }\n if (values.toArrow) {\n this.edgeType.drawArrowHead(\n ctx,\n values,\n this.selected,\n this.hover,\n arrowData.to\n );\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {Node} viaNode\n */\n drawLabel(ctx, viaNode) {\n if (this.options.label !== undefined) {\n // set style\n const node1 = this.from;\n const node2 = this.to;\n\n if (this.labelModule.differentState(this.selected, this.hover)) {\n this.labelModule.getTextSize(ctx, this.selected, this.hover);\n }\n\n let point;\n if (node1.id != node2.id) {\n this.labelModule.pointToSelf = false;\n point = this.edgeType.getPoint(0.5, viaNode);\n ctx.save();\n\n const rotationPoint = this._getRotation(ctx);\n if (rotationPoint.angle != 0) {\n ctx.translate(rotationPoint.x, rotationPoint.y);\n ctx.rotate(rotationPoint.angle);\n }\n\n // draw the label\n this.labelModule.draw(ctx, point.x, point.y, this.selected, this.hover);\n\n /*\n // Useful debug code: draw a border around the label\n // This should **not** be enabled in production!\n var size = this.labelModule.getSize();; // ;; intentional so lint catches it\n ctx.strokeStyle = \"#ff0000\";\n ctx.strokeRect(size.left, size.top, size.width, size.height);\n // End debug code\n*/\n\n ctx.restore();\n } else {\n // Ignore the orientations.\n this.labelModule.pointToSelf = true;\n\n // get circle coordinates\n const coordinates = getSelfRefCoordinates(\n ctx,\n this.options.selfReference.angle,\n this.options.selfReference.size,\n node1\n );\n\n point = this._pointOnCircle(\n coordinates.x,\n coordinates.y,\n this.options.selfReference.size,\n this.options.selfReference.angle\n );\n\n this.labelModule.draw(ctx, point.x, point.y, this.selected, this.hover);\n }\n }\n }\n\n /**\n * Determine all visual elements of this edge instance, in which the given\n * point falls within the bounding shape.\n * @param {point} point\n * @returns {Array.} list with the items which are on the point\n */\n getItemsOnPoint(point) {\n const ret = [];\n\n if (this.labelModule.visible()) {\n const rotationPoint = this._getRotation();\n if (pointInRect(this.labelModule.getSize(), point, rotationPoint)) {\n ret.push({ edgeId: this.id, labelId: 0 });\n }\n }\n\n const obj = {\n left: point.x,\n top: point.y,\n };\n\n if (this.isOverlappingWith(obj)) {\n ret.push({ edgeId: this.id });\n }\n\n return ret;\n }\n\n /**\n * Check if this object is overlapping with the provided object\n * @param {object} obj an object with parameters left, top\n * @returns {boolean} True if location is located on the edge\n */\n isOverlappingWith(obj) {\n if (this.connected) {\n const distMax = 10;\n const xFrom = this.from.x;\n const yFrom = this.from.y;\n const xTo = this.to.x;\n const yTo = this.to.y;\n const xObj = obj.left;\n const yObj = obj.top;\n\n const dist = this.edgeType.getDistanceToEdge(\n xFrom,\n yFrom,\n xTo,\n yTo,\n xObj,\n yObj\n );\n\n return dist < distMax;\n } else {\n return false;\n }\n }\n\n /**\n * Determine the rotation point, if any.\n * @param {CanvasRenderingContext2D} [ctx] if passed, do a recalculation of the label size\n * @returns {rotationPoint} the point to rotate around and the angle in radians to rotate\n * @private\n */\n _getRotation(ctx) {\n const viaNode = this.edgeType.getViaNode();\n const point = this.edgeType.getPoint(0.5, viaNode);\n\n if (ctx !== undefined) {\n this.labelModule.calculateLabelSize(\n ctx,\n this.selected,\n this.hover,\n point.x,\n point.y\n );\n }\n\n const ret = {\n x: point.x,\n y: this.labelModule.size.yLine,\n angle: 0,\n };\n\n if (!this.labelModule.visible()) {\n return ret; // Don't even bother doing the atan2, there's nothing to draw\n }\n\n if (this.options.font.align === \"horizontal\") {\n return ret; // No need to calculate angle\n }\n\n const dy = this.from.y - this.to.y;\n const dx = this.from.x - this.to.x;\n let angle = Math.atan2(dy, dx); // radians\n\n // rotate so that label is readable\n if ((angle < -1 && dx < 0) || (angle > 0 && dx < 0)) {\n angle += Math.PI;\n }\n ret.angle = angle;\n\n return ret;\n }\n\n /**\n * Get a point on a circle\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} angle\n * @returns {object} point\n * @private\n */\n _pointOnCircle(x, y, radius, angle) {\n return {\n x: x + radius * Math.cos(angle),\n y: y - radius * Math.sin(angle),\n };\n }\n\n /**\n * Sets selected state to true\n */\n select() {\n this.selected = true;\n }\n\n /**\n * Sets selected state to false\n */\n unselect() {\n this.selected = false;\n }\n\n /**\n * cleans all required things on delete\n * @returns {*}\n */\n cleanup() {\n return this.edgeType.cleanup();\n }\n\n /**\n * Remove edge from the list and perform necessary cleanup.\n */\n remove() {\n this.cleanup();\n this.disconnect();\n delete this.body.edges[this.id];\n }\n\n /**\n * Check if both connecting nodes exist\n * @returns {boolean}\n */\n endPointsValid() {\n return (\n this.body.nodes[this.fromId] !== undefined &&\n this.body.nodes[this.toId] !== undefined\n );\n }\n}\n\nexport default Edge;\n","import { deepExtend, forEach } from \"vis-util/esnext\";\nimport { DataSet, isDataViewLike } from \"vis-data/esnext\";\nimport Edge from \"./components/Edge\";\n\n/**\n * Handler for Edges\n */\nclass EdgesHandler {\n /**\n * @param {object} body\n * @param {Array.} images\n * @param {Array.} groups\n */\n constructor(body, images, groups) {\n this.body = body;\n this.images = images;\n this.groups = groups;\n\n // create the edge API in the body container\n this.body.functions.createEdge = this.create.bind(this);\n\n this.edgesListeners = {\n add: (event, params) => {\n this.add(params.items);\n },\n update: (event, params) => {\n this.update(params.items);\n },\n remove: (event, params) => {\n this.remove(params.items);\n },\n };\n\n this.options = {};\n this.defaultOptions = {\n arrows: {\n to: { enabled: false, scaleFactor: 1, type: \"arrow\" }, // boolean / {arrowScaleFactor:1} / {enabled: false, arrowScaleFactor:1}\n middle: { enabled: false, scaleFactor: 1, type: \"arrow\" },\n from: { enabled: false, scaleFactor: 1, type: \"arrow\" },\n },\n endPointOffset: {\n from: 0,\n to: 0,\n },\n arrowStrikethrough: true,\n color: {\n color: \"#848484\",\n highlight: \"#848484\",\n hover: \"#848484\",\n inherit: \"from\",\n opacity: 1.0,\n },\n dashes: false,\n font: {\n color: \"#343434\",\n size: 14, // px\n face: \"arial\",\n background: \"none\",\n strokeWidth: 2, // px\n strokeColor: \"#ffffff\",\n align: \"horizontal\",\n multi: false,\n vadjust: 0,\n bold: {\n mod: \"bold\",\n },\n boldital: {\n mod: \"bold italic\",\n },\n ital: {\n mod: \"italic\",\n },\n mono: {\n mod: \"\",\n size: 15, // px\n face: \"courier new\",\n vadjust: 2,\n },\n },\n hidden: false,\n hoverWidth: 1.5,\n label: undefined,\n labelHighlightBold: true,\n length: undefined,\n physics: true,\n scaling: {\n min: 1,\n max: 15,\n label: {\n enabled: true,\n min: 14,\n max: 30,\n maxVisible: 30,\n drawThreshold: 5,\n },\n customScalingFunction: function (min, max, total, value) {\n if (max === min) {\n return 0.5;\n } else {\n const scale = 1 / (max - min);\n return Math.max(0, (value - min) * scale);\n }\n },\n },\n selectionWidth: 1.5,\n selfReference: {\n size: 20,\n angle: Math.PI / 4,\n renderBehindTheNode: true,\n },\n shadow: {\n enabled: false,\n color: \"rgba(0,0,0,0.5)\",\n size: 10,\n x: 5,\n y: 5,\n },\n background: {\n enabled: false,\n color: \"rgba(111,111,111,1)\",\n size: 10,\n dashes: false,\n },\n smooth: {\n enabled: true,\n type: \"dynamic\",\n forceDirection: \"none\",\n roundness: 0.5,\n },\n title: undefined,\n width: 1,\n value: undefined,\n };\n\n deepExtend(this.options, this.defaultOptions);\n\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n // this allows external modules to force all dynamic curves to turn static.\n this.body.emitter.on(\"_forceDisableDynamicCurves\", (type, emit = true) => {\n if (type === \"dynamic\") {\n type = \"continuous\";\n }\n let dataChanged = false;\n for (const edgeId in this.body.edges) {\n if (Object.prototype.hasOwnProperty.call(this.body.edges, edgeId)) {\n const edge = this.body.edges[edgeId];\n const edgeData = this.body.data.edges.get(edgeId);\n\n // only forcibly remove the smooth curve if the data has been set of the edge has the smooth curves defined.\n // this is because a change in the global would not affect these curves.\n if (edgeData != null) {\n const smoothOptions = edgeData.smooth;\n if (smoothOptions !== undefined) {\n if (\n smoothOptions.enabled === true &&\n smoothOptions.type === \"dynamic\"\n ) {\n if (type === undefined) {\n edge.setOptions({ smooth: false });\n } else {\n edge.setOptions({ smooth: { type: type } });\n }\n dataChanged = true;\n }\n }\n }\n }\n }\n if (emit === true && dataChanged === true) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n });\n\n // this is called when options of EXISTING nodes or edges have changed.\n //\n // NOTE: Not true, called when options have NOT changed, for both existing as well as new nodes.\n // See update() for logic.\n // TODO: Verify and examine the consequences of this. It might still trigger when\n // non-option fields have changed, but then reconnecting edges is still useless.\n // Alternatively, it might also be called when edges are removed.\n //\n this.body.emitter.on(\"_dataUpdated\", () => {\n this.reconnectEdges();\n });\n\n // refresh the edges. Used when reverting from hierarchical layout\n this.body.emitter.on(\"refreshEdges\", this.refresh.bind(this));\n this.body.emitter.on(\"refresh\", this.refresh.bind(this));\n this.body.emitter.on(\"destroy\", () => {\n forEach(this.edgesListeners, (callback, event) => {\n if (this.body.data.edges) this.body.data.edges.off(event, callback);\n });\n delete this.body.functions.createEdge;\n delete this.edgesListeners.add;\n delete this.edgesListeners.update;\n delete this.edgesListeners.remove;\n delete this.edgesListeners;\n });\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n // use the parser from the Edge class to fill in all shorthand notations\n Edge.parseOptions(this.options, options, true, this.defaultOptions, true);\n\n // update smooth settings in all edges\n let dataChanged = false;\n if (options.smooth !== undefined) {\n for (const edgeId in this.body.edges) {\n if (Object.prototype.hasOwnProperty.call(this.body.edges, edgeId)) {\n dataChanged =\n this.body.edges[edgeId].updateEdgeType() || dataChanged;\n }\n }\n }\n\n // update fonts in all edges\n if (options.font !== undefined) {\n for (const edgeId in this.body.edges) {\n if (Object.prototype.hasOwnProperty.call(this.body.edges, edgeId)) {\n this.body.edges[edgeId].updateLabelModule();\n }\n }\n }\n\n // update the state of the variables if needed\n if (\n options.hidden !== undefined ||\n options.physics !== undefined ||\n dataChanged === true\n ) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n }\n\n /**\n * Load edges by reading the data table\n * @param {Array | DataSet | DataView} edges The data containing the edges.\n * @param {boolean} [doNotEmit] - Suppress data changed event.\n * @private\n */\n setData(edges, doNotEmit = false) {\n const oldEdgesData = this.body.data.edges;\n\n if (isDataViewLike(\"id\", edges)) {\n this.body.data.edges = edges;\n } else if (Array.isArray(edges)) {\n this.body.data.edges = new DataSet();\n this.body.data.edges.add(edges);\n } else if (!edges) {\n this.body.data.edges = new DataSet();\n } else {\n throw new TypeError(\"Array or DataSet expected\");\n }\n\n // TODO: is this null or undefined or false?\n if (oldEdgesData) {\n // unsubscribe from old dataset\n forEach(this.edgesListeners, (callback, event) => {\n oldEdgesData.off(event, callback);\n });\n }\n\n // remove drawn edges\n this.body.edges = {};\n\n // TODO: is this null or undefined or false?\n if (this.body.data.edges) {\n // subscribe to new dataset\n forEach(this.edgesListeners, (callback, event) => {\n this.body.data.edges.on(event, callback);\n });\n\n // draw all new nodes\n const ids = this.body.data.edges.getIds();\n this.add(ids, true);\n }\n\n this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\");\n if (doNotEmit === false) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n * Add edges\n * @param {number[] | string[]} ids\n * @param {boolean} [doNotEmit]\n * @private\n */\n add(ids, doNotEmit = false) {\n const edges = this.body.edges;\n const edgesData = this.body.data.edges;\n\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n\n const oldEdge = edges[id];\n if (oldEdge) {\n oldEdge.disconnect();\n }\n\n const data = edgesData.get(id, { showInternalIds: true });\n edges[id] = this.create(data);\n }\n\n this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\");\n\n if (doNotEmit === false) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n * Update existing edges, or create them when not yet existing\n * @param {number[] | string[]} ids\n * @private\n */\n update(ids) {\n const edges = this.body.edges;\n const edgesData = this.body.data.edges;\n let dataChanged = false;\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const data = edgesData.get(id);\n const edge = edges[id];\n if (edge !== undefined) {\n // update edge\n edge.disconnect();\n dataChanged = edge.setOptions(data) || dataChanged; // if a support node is added, data can be changed.\n edge.connect();\n } else {\n // create edge\n this.body.edges[id] = this.create(data);\n dataChanged = true;\n }\n }\n\n if (dataChanged === true) {\n this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\");\n this.body.emitter.emit(\"_dataChanged\");\n } else {\n this.body.emitter.emit(\"_dataUpdated\");\n }\n }\n\n /**\n * Remove existing edges. Non existing ids will be ignored\n * @param {number[] | string[]} ids\n * @param {boolean} [emit]\n * @private\n */\n remove(ids, emit = true) {\n if (ids.length === 0) return; // early out\n\n const edges = this.body.edges;\n forEach(ids, (id) => {\n const edge = edges[id];\n if (edge !== undefined) {\n edge.remove();\n }\n });\n\n if (emit) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n * Refreshes Edge Handler\n */\n refresh() {\n forEach(this.body.edges, (edge, edgeId) => {\n const data = this.body.data.edges.get(edgeId);\n if (data !== undefined) {\n edge.setOptions(data);\n }\n });\n }\n\n /**\n *\n * @param {object} properties\n * @returns {Edge}\n */\n create(properties) {\n return new Edge(\n properties,\n this.body,\n this.images,\n this.options,\n this.defaultOptions\n );\n }\n\n /**\n * Reconnect all edges\n * @private\n */\n reconnectEdges() {\n let id;\n const nodes = this.body.nodes;\n const edges = this.body.edges;\n\n for (id in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, id)) {\n nodes[id].edges = [];\n }\n }\n\n for (id in edges) {\n if (Object.prototype.hasOwnProperty.call(edges, id)) {\n const edge = edges[id];\n edge.from = null;\n edge.to = null;\n edge.connect();\n }\n }\n }\n\n /**\n *\n * @param {Edge.id} edgeId\n * @returns {Array}\n */\n getConnectedNodes(edgeId) {\n const nodeList = [];\n if (this.body.edges[edgeId] !== undefined) {\n const edge = this.body.edges[edgeId];\n if (edge.fromId !== undefined) {\n nodeList.push(edge.fromId);\n }\n if (edge.toId !== undefined) {\n nodeList.push(edge.toId);\n }\n }\n return nodeList;\n }\n\n /**\n * There is no direct relation between the nodes and the edges DataSet,\n * so the right place to do call this is in the handler for event `_dataUpdated`.\n */\n _updateState() {\n this._addMissingEdges();\n this._removeInvalidEdges();\n }\n\n /**\n * Scan for missing nodes and remove corresponding edges, if any.\n * @private\n */\n _removeInvalidEdges() {\n const edgesToDelete = [];\n\n forEach(this.body.edges, (edge, id) => {\n const toNode = this.body.nodes[edge.toId];\n const fromNode = this.body.nodes[edge.fromId];\n\n // Skip clustering edges here, let the Clustering module handle those\n if (\n (toNode !== undefined && toNode.isCluster === true) ||\n (fromNode !== undefined && fromNode.isCluster === true)\n ) {\n return;\n }\n\n if (toNode === undefined || fromNode === undefined) {\n edgesToDelete.push(id);\n }\n });\n\n this.remove(edgesToDelete, false);\n }\n\n /**\n * add all edges from dataset that are not in the cached state\n * @private\n */\n _addMissingEdges() {\n const edgesData = this.body.data.edges;\n if (edgesData === undefined || edgesData === null) {\n return; // No edges DataSet yet; can happen on startup\n }\n\n const edges = this.body.edges;\n const addIds = [];\n\n edgesData.forEach((edgeData, edgeId) => {\n const edge = edges[edgeId];\n if (edge === undefined) {\n addIds.push(edgeId);\n }\n });\n\n this.add(addIds, true);\n }\n}\n\nexport default EdgesHandler;\n","import { Alea } from \"vis-util/esnext\";\n\n/**\n * Barnes Hut Solver\n */\nclass BarnesHutSolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n this.body = body;\n this.physicsBody = physicsBody;\n this.barnesHutTree;\n this.setOptions(options);\n this._rng = Alea(\"BARNES HUT SOLVER\");\n\n // debug: show grid\n // this.body.emitter.on(\"afterDrawing\", (ctx) => {this._debug(ctx,'#ff0000')})\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n this.thetaInversed = 1 / this.options.theta;\n\n // if 1 then min distance = 0.5, if 0.5 then min distance = 0.5 + 0.5*node.shape.radius\n this.overlapAvoidanceFactor =\n 1 - Math.max(0, Math.min(1, this.options.avoidOverlap));\n }\n\n /**\n * This function calculates the forces the nodes apply on each other based on a gravitational model.\n * The Barnes Hut method is used to speed up this N-body simulation.\n * @private\n */\n solve() {\n if (\n this.options.gravitationalConstant !== 0 &&\n this.physicsBody.physicsNodeIndices.length > 0\n ) {\n let node;\n const nodes = this.body.nodes;\n const nodeIndices = this.physicsBody.physicsNodeIndices;\n const nodeCount = nodeIndices.length;\n\n // create the tree\n const barnesHutTree = this._formBarnesHutTree(nodes, nodeIndices);\n\n // for debugging\n this.barnesHutTree = barnesHutTree;\n\n // place the nodes one by one recursively\n for (let i = 0; i < nodeCount; i++) {\n node = nodes[nodeIndices[i]];\n if (node.options.mass > 0) {\n // starting with root is irrelevant, it never passes the BarnesHutSolver condition\n this._getForceContributions(barnesHutTree.root, node);\n }\n }\n }\n }\n\n /**\n * @param {object} parentBranch\n * @param {Node} node\n * @private\n */\n _getForceContributions(parentBranch, node) {\n this._getForceContribution(parentBranch.children.NW, node);\n this._getForceContribution(parentBranch.children.NE, node);\n this._getForceContribution(parentBranch.children.SW, node);\n this._getForceContribution(parentBranch.children.SE, node);\n }\n\n /**\n * This function traverses the barnesHutTree. It checks when it can approximate distant nodes with their center of mass.\n * If a region contains a single node, we check if it is not itself, then we apply the force.\n * @param {object} parentBranch\n * @param {Node} node\n * @private\n */\n _getForceContribution(parentBranch, node) {\n // we get no force contribution from an empty region\n if (parentBranch.childrenCount > 0) {\n // get the distance from the center of mass to the node.\n const dx = parentBranch.centerOfMass.x - node.x;\n const dy = parentBranch.centerOfMass.y - node.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n // BarnesHutSolver condition\n // original condition : s/d < theta = passed === d/s > 1/theta = passed\n // calcSize = 1/s --> d * 1/s > 1/theta = passed\n if (distance * parentBranch.calcSize > this.thetaInversed) {\n this._calculateForces(distance, dx, dy, node, parentBranch);\n } else {\n // Did not pass the condition, go into children if available\n if (parentBranch.childrenCount === 4) {\n this._getForceContributions(parentBranch, node);\n } else {\n // parentBranch must have only one node, if it was empty we wouldnt be here\n if (parentBranch.children.data.id != node.id) {\n // if it is not self\n this._calculateForces(distance, dx, dy, node, parentBranch);\n }\n }\n }\n }\n }\n\n /**\n * Calculate the forces based on the distance.\n * @param {number} distance\n * @param {number} dx\n * @param {number} dy\n * @param {Node} node\n * @param {object} parentBranch\n * @private\n */\n _calculateForces(distance, dx, dy, node, parentBranch) {\n if (distance === 0) {\n distance = 0.1;\n dx = distance;\n }\n\n if (this.overlapAvoidanceFactor < 1 && node.shape.radius) {\n distance = Math.max(\n 0.1 + this.overlapAvoidanceFactor * node.shape.radius,\n distance - node.shape.radius\n );\n }\n\n // the dividing by the distance cubed instead of squared allows us to get the fx and fy components without sines and cosines\n // it is shorthand for gravityforce with distance squared and fx = dx/distance * gravityForce\n const gravityForce =\n (this.options.gravitationalConstant *\n parentBranch.mass *\n node.options.mass) /\n Math.pow(distance, 3);\n const fx = dx * gravityForce;\n const fy = dy * gravityForce;\n\n this.physicsBody.forces[node.id].x += fx;\n this.physicsBody.forces[node.id].y += fy;\n }\n\n /**\n * This function constructs the barnesHut tree recursively. It creates the root, splits it and starts placing the nodes.\n * @param {Array.} nodes\n * @param {Array.} nodeIndices\n * @returns {{root: {centerOfMass: {x: number, y: number}, mass: number, range: {minX: number, maxX: number, minY: number, maxY: number}, size: number, calcSize: number, children: {data: null}, maxWidth: number, level: number, childrenCount: number}}} BarnesHutTree\n * @private\n */\n _formBarnesHutTree(nodes, nodeIndices) {\n let node;\n const nodeCount = nodeIndices.length;\n\n let minX = nodes[nodeIndices[0]].x;\n let minY = nodes[nodeIndices[0]].y;\n let maxX = nodes[nodeIndices[0]].x;\n let maxY = nodes[nodeIndices[0]].y;\n\n // get the range of the nodes\n for (let i = 1; i < nodeCount; i++) {\n const node = nodes[nodeIndices[i]];\n const x = node.x;\n const y = node.y;\n if (node.options.mass > 0) {\n if (x < minX) {\n minX = x;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n }\n // make the range a square\n const sizeDiff = Math.abs(maxX - minX) - Math.abs(maxY - minY); // difference between X and Y\n if (sizeDiff > 0) {\n minY -= 0.5 * sizeDiff;\n maxY += 0.5 * sizeDiff;\n } // xSize > ySize\n else {\n minX += 0.5 * sizeDiff;\n maxX -= 0.5 * sizeDiff;\n } // xSize < ySize\n\n const minimumTreeSize = 1e-5;\n const rootSize = Math.max(minimumTreeSize, Math.abs(maxX - minX));\n const halfRootSize = 0.5 * rootSize;\n const centerX = 0.5 * (minX + maxX),\n centerY = 0.5 * (minY + maxY);\n\n // construct the barnesHutTree\n const barnesHutTree = {\n root: {\n centerOfMass: { x: 0, y: 0 },\n mass: 0,\n range: {\n minX: centerX - halfRootSize,\n maxX: centerX + halfRootSize,\n minY: centerY - halfRootSize,\n maxY: centerY + halfRootSize,\n },\n size: rootSize,\n calcSize: 1 / rootSize,\n children: { data: null },\n maxWidth: 0,\n level: 0,\n childrenCount: 4,\n },\n };\n this._splitBranch(barnesHutTree.root);\n\n // place the nodes one by one recursively\n for (let i = 0; i < nodeCount; i++) {\n node = nodes[nodeIndices[i]];\n if (node.options.mass > 0) {\n this._placeInTree(barnesHutTree.root, node);\n }\n }\n\n // make global\n return barnesHutTree;\n }\n\n /**\n * this updates the mass of a branch. this is increased by adding a node.\n * @param {object} parentBranch\n * @param {Node} node\n * @private\n */\n _updateBranchMass(parentBranch, node) {\n const centerOfMass = parentBranch.centerOfMass;\n const totalMass = parentBranch.mass + node.options.mass;\n const totalMassInv = 1 / totalMass;\n\n centerOfMass.x =\n centerOfMass.x * parentBranch.mass + node.x * node.options.mass;\n centerOfMass.x *= totalMassInv;\n\n centerOfMass.y =\n centerOfMass.y * parentBranch.mass + node.y * node.options.mass;\n centerOfMass.y *= totalMassInv;\n\n parentBranch.mass = totalMass;\n const biggestSize = Math.max(\n Math.max(node.height, node.radius),\n node.width\n );\n parentBranch.maxWidth =\n parentBranch.maxWidth < biggestSize ? biggestSize : parentBranch.maxWidth;\n }\n\n /**\n * determine in which branch the node will be placed.\n * @param {object} parentBranch\n * @param {Node} node\n * @param {boolean} skipMassUpdate\n * @private\n */\n _placeInTree(parentBranch, node, skipMassUpdate) {\n if (skipMassUpdate != true || skipMassUpdate === undefined) {\n // update the mass of the branch.\n this._updateBranchMass(parentBranch, node);\n }\n\n const range = parentBranch.children.NW.range;\n let region;\n if (range.maxX > node.x) {\n // in NW or SW\n if (range.maxY > node.y) {\n region = \"NW\";\n } else {\n region = \"SW\";\n }\n } else {\n // in NE or SE\n if (range.maxY > node.y) {\n region = \"NE\";\n } else {\n region = \"SE\";\n }\n }\n\n this._placeInRegion(parentBranch, node, region);\n }\n\n /**\n * actually place the node in a region (or branch)\n * @param {object} parentBranch\n * @param {Node} node\n * @param {'NW'| 'NE' | 'SW' | 'SE'} region\n * @private\n */\n _placeInRegion(parentBranch, node, region) {\n const children = parentBranch.children[region];\n\n switch (children.childrenCount) {\n case 0: // place node here\n children.children.data = node;\n children.childrenCount = 1;\n this._updateBranchMass(children, node);\n break;\n case 1: // convert into children\n // if there are two nodes exactly overlapping (on init, on opening of cluster etc.)\n // we move one node a little bit and we do not put it in the tree.\n if (\n children.children.data.x === node.x &&\n children.children.data.y === node.y\n ) {\n node.x += this._rng();\n node.y += this._rng();\n } else {\n this._splitBranch(children);\n this._placeInTree(children, node);\n }\n break;\n case 4: // place in branch\n this._placeInTree(children, node);\n break;\n }\n }\n\n /**\n * this function splits a branch into 4 sub branches. If the branch contained a node, we place it in the subbranch\n * after the split is complete.\n * @param {object} parentBranch\n * @private\n */\n _splitBranch(parentBranch) {\n // if the branch is shaded with a node, replace the node in the new subset.\n let containedNode = null;\n if (parentBranch.childrenCount === 1) {\n containedNode = parentBranch.children.data;\n parentBranch.mass = 0;\n parentBranch.centerOfMass.x = 0;\n parentBranch.centerOfMass.y = 0;\n }\n parentBranch.childrenCount = 4;\n parentBranch.children.data = null;\n this._insertRegion(parentBranch, \"NW\");\n this._insertRegion(parentBranch, \"NE\");\n this._insertRegion(parentBranch, \"SW\");\n this._insertRegion(parentBranch, \"SE\");\n\n if (containedNode != null) {\n this._placeInTree(parentBranch, containedNode);\n }\n }\n\n /**\n * This function subdivides the region into four new segments.\n * Specifically, this inserts a single new segment.\n * It fills the children section of the parentBranch\n * @param {object} parentBranch\n * @param {'NW'| 'NE' | 'SW' | 'SE'} region\n * @private\n */\n _insertRegion(parentBranch, region) {\n let minX, maxX, minY, maxY;\n const childSize = 0.5 * parentBranch.size;\n switch (region) {\n case \"NW\":\n minX = parentBranch.range.minX;\n maxX = parentBranch.range.minX + childSize;\n minY = parentBranch.range.minY;\n maxY = parentBranch.range.minY + childSize;\n break;\n case \"NE\":\n minX = parentBranch.range.minX + childSize;\n maxX = parentBranch.range.maxX;\n minY = parentBranch.range.minY;\n maxY = parentBranch.range.minY + childSize;\n break;\n case \"SW\":\n minX = parentBranch.range.minX;\n maxX = parentBranch.range.minX + childSize;\n minY = parentBranch.range.minY + childSize;\n maxY = parentBranch.range.maxY;\n break;\n case \"SE\":\n minX = parentBranch.range.minX + childSize;\n maxX = parentBranch.range.maxX;\n minY = parentBranch.range.minY + childSize;\n maxY = parentBranch.range.maxY;\n break;\n }\n\n parentBranch.children[region] = {\n centerOfMass: { x: 0, y: 0 },\n mass: 0,\n range: { minX: minX, maxX: maxX, minY: minY, maxY: maxY },\n size: 0.5 * parentBranch.size,\n calcSize: 2 * parentBranch.calcSize,\n children: { data: null },\n maxWidth: 0,\n level: parentBranch.level + 1,\n childrenCount: 0,\n };\n }\n\n //--------------------------- DEBUGGING BELOW ---------------------------//\n\n /**\n * This function is for debugging purposed, it draws the tree.\n * @param {CanvasRenderingContext2D} ctx\n * @param {string} color\n * @private\n */\n _debug(ctx, color) {\n if (this.barnesHutTree !== undefined) {\n ctx.lineWidth = 1;\n\n this._drawBranch(this.barnesHutTree.root, ctx, color);\n }\n }\n\n /**\n * This function is for debugging purposes. It draws the branches recursively.\n * @param {object} branch\n * @param {CanvasRenderingContext2D} ctx\n * @param {string} color\n * @private\n */\n _drawBranch(branch, ctx, color) {\n if (color === undefined) {\n color = \"#FF0000\";\n }\n\n if (branch.childrenCount === 4) {\n this._drawBranch(branch.children.NW, ctx);\n this._drawBranch(branch.children.NE, ctx);\n this._drawBranch(branch.children.SE, ctx);\n this._drawBranch(branch.children.SW, ctx);\n }\n ctx.strokeStyle = color;\n ctx.beginPath();\n ctx.moveTo(branch.range.minX, branch.range.minY);\n ctx.lineTo(branch.range.maxX, branch.range.minY);\n ctx.stroke();\n\n ctx.beginPath();\n ctx.moveTo(branch.range.maxX, branch.range.minY);\n ctx.lineTo(branch.range.maxX, branch.range.maxY);\n ctx.stroke();\n\n ctx.beginPath();\n ctx.moveTo(branch.range.maxX, branch.range.maxY);\n ctx.lineTo(branch.range.minX, branch.range.maxY);\n ctx.stroke();\n\n ctx.beginPath();\n ctx.moveTo(branch.range.minX, branch.range.maxY);\n ctx.lineTo(branch.range.minX, branch.range.minY);\n ctx.stroke();\n\n /*\n if (branch.mass > 0) {\n ctx.circle(branch.centerOfMass.x, branch.centerOfMass.y, 3*branch.mass);\n ctx.stroke();\n }\n */\n }\n}\n\nexport default BarnesHutSolver;\n","import { Alea } from \"vis-util/esnext\";\n\n/**\n * Repulsion Solver\n */\nclass RepulsionSolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n this._rng = Alea(\"REPULSION SOLVER\");\n\n this.body = body;\n this.physicsBody = physicsBody;\n this.setOptions(options);\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n }\n\n /**\n * Calculate the forces the nodes apply on each other based on a repulsion field.\n * This field is linearly approximated.\n * @private\n */\n solve() {\n let dx, dy, distance, fx, fy, repulsingForce, node1, node2;\n\n const nodes = this.body.nodes;\n const nodeIndices = this.physicsBody.physicsNodeIndices;\n const forces = this.physicsBody.forces;\n\n // repulsing forces between nodes\n const nodeDistance = this.options.nodeDistance;\n\n // approximation constants\n const a = -2 / 3 / nodeDistance;\n const b = 4 / 3;\n\n // we loop from i over all but the last entree in the array\n // j loops from i+1 to the last. This way we do not double count any of the indices, nor i === j\n for (let i = 0; i < nodeIndices.length - 1; i++) {\n node1 = nodes[nodeIndices[i]];\n for (let j = i + 1; j < nodeIndices.length; j++) {\n node2 = nodes[nodeIndices[j]];\n\n dx = node2.x - node1.x;\n dy = node2.y - node1.y;\n distance = Math.sqrt(dx * dx + dy * dy);\n\n // same condition as BarnesHutSolver, making sure nodes are never 100% overlapping.\n if (distance === 0) {\n distance = 0.1 * this._rng();\n dx = distance;\n }\n\n if (distance < 2 * nodeDistance) {\n if (distance < 0.5 * nodeDistance) {\n repulsingForce = 1.0;\n } else {\n repulsingForce = a * distance + b; // linear approx of 1 / (1 + Math.exp((distance / nodeDistance - 1) * steepness))\n }\n repulsingForce = repulsingForce / distance;\n\n fx = dx * repulsingForce;\n fy = dy * repulsingForce;\n\n forces[node1.id].x -= fx;\n forces[node1.id].y -= fy;\n forces[node2.id].x += fx;\n forces[node2.id].y += fy;\n }\n }\n }\n }\n}\n\nexport default RepulsionSolver;\n","/**\n * Hierarchical Repulsion Solver\n */\nclass HierarchicalRepulsionSolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n this.body = body;\n this.physicsBody = physicsBody;\n this.setOptions(options);\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n this.overlapAvoidanceFactor = Math.max(\n 0,\n Math.min(1, this.options.avoidOverlap || 0)\n );\n }\n\n /**\n * Calculate the forces the nodes apply on each other based on a repulsion field.\n * This field is linearly approximated.\n * @private\n */\n solve() {\n const nodes = this.body.nodes;\n const nodeIndices = this.physicsBody.physicsNodeIndices;\n const forces = this.physicsBody.forces;\n\n // repulsing forces between nodes\n const nodeDistance = this.options.nodeDistance;\n\n // we loop from i over all but the last entree in the array\n // j loops from i+1 to the last. This way we do not double count any of the indices, nor i === j\n for (let i = 0; i < nodeIndices.length - 1; i++) {\n const node1 = nodes[nodeIndices[i]];\n for (let j = i + 1; j < nodeIndices.length; j++) {\n const node2 = nodes[nodeIndices[j]];\n\n // nodes only affect nodes on their level\n if (node1.level === node2.level) {\n const theseNodesDistance =\n nodeDistance +\n this.overlapAvoidanceFactor *\n ((node1.shape.radius || 0) / 2 + (node2.shape.radius || 0) / 2);\n\n const dx = node2.x - node1.x;\n const dy = node2.y - node1.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n const steepness = 0.05;\n let repulsingForce;\n if (distance < theseNodesDistance) {\n repulsingForce =\n -Math.pow(steepness * distance, 2) +\n Math.pow(steepness * theseNodesDistance, 2);\n } else {\n repulsingForce = 0;\n }\n // normalize force with\n if (distance !== 0) {\n repulsingForce = repulsingForce / distance;\n }\n const fx = dx * repulsingForce;\n const fy = dy * repulsingForce;\n\n forces[node1.id].x -= fx;\n forces[node1.id].y -= fy;\n forces[node2.id].x += fx;\n forces[node2.id].y += fy;\n }\n }\n }\n }\n}\n\nexport default HierarchicalRepulsionSolver;\n","/**\n * Spring Solver\n */\nclass SpringSolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n this.body = body;\n this.physicsBody = physicsBody;\n this.setOptions(options);\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n }\n\n /**\n * This function calculates the springforces on the nodes, accounting for the support nodes.\n * @private\n */\n solve() {\n let edgeLength, edge;\n const edgeIndices = this.physicsBody.physicsEdgeIndices;\n const edges = this.body.edges;\n let node1, node2, node3;\n\n // forces caused by the edges, modelled as springs\n for (let i = 0; i < edgeIndices.length; i++) {\n edge = edges[edgeIndices[i]];\n if (edge.connected === true && edge.toId !== edge.fromId) {\n // only calculate forces if nodes are in the same sector\n if (\n this.body.nodes[edge.toId] !== undefined &&\n this.body.nodes[edge.fromId] !== undefined\n ) {\n if (edge.edgeType.via !== undefined) {\n edgeLength =\n edge.options.length === undefined\n ? this.options.springLength\n : edge.options.length;\n node1 = edge.to;\n node2 = edge.edgeType.via;\n node3 = edge.from;\n\n this._calculateSpringForce(node1, node2, 0.5 * edgeLength);\n this._calculateSpringForce(node2, node3, 0.5 * edgeLength);\n } else {\n // the * 1.5 is here so the edge looks as large as a smooth edge. It does not initially because the smooth edges use\n // the support nodes which exert a repulsive force on the to and from nodes, making the edge appear larger.\n edgeLength =\n edge.options.length === undefined\n ? this.options.springLength * 1.5\n : edge.options.length;\n this._calculateSpringForce(edge.from, edge.to, edgeLength);\n }\n }\n }\n }\n }\n\n /**\n * This is the code actually performing the calculation for the function above.\n * @param {Node} node1\n * @param {Node} node2\n * @param {number} edgeLength\n * @private\n */\n _calculateSpringForce(node1, node2, edgeLength) {\n const dx = node1.x - node2.x;\n const dy = node1.y - node2.y;\n const distance = Math.max(Math.sqrt(dx * dx + dy * dy), 0.01);\n\n // the 1/distance is so the fx and fy can be calculated without sine or cosine.\n const springForce =\n (this.options.springConstant * (edgeLength - distance)) / distance;\n\n const fx = dx * springForce;\n const fy = dy * springForce;\n\n // handle the case where one node is not part of the physcis\n if (this.physicsBody.forces[node1.id] !== undefined) {\n this.physicsBody.forces[node1.id].x += fx;\n this.physicsBody.forces[node1.id].y += fy;\n }\n\n if (this.physicsBody.forces[node2.id] !== undefined) {\n this.physicsBody.forces[node2.id].x -= fx;\n this.physicsBody.forces[node2.id].y -= fy;\n }\n }\n}\n\nexport default SpringSolver;\n","/**\n * Hierarchical Spring Solver\n */\nclass HierarchicalSpringSolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n this.body = body;\n this.physicsBody = physicsBody;\n this.setOptions(options);\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n }\n\n /**\n * This function calculates the springforces on the nodes, accounting for the support nodes.\n * @private\n */\n solve() {\n let edgeLength, edge;\n let dx, dy, fx, fy, springForce, distance;\n const edges = this.body.edges;\n const factor = 0.5;\n\n const edgeIndices = this.physicsBody.physicsEdgeIndices;\n const nodeIndices = this.physicsBody.physicsNodeIndices;\n const forces = this.physicsBody.forces;\n\n // initialize the spring force counters\n for (let i = 0; i < nodeIndices.length; i++) {\n const nodeId = nodeIndices[i];\n forces[nodeId].springFx = 0;\n forces[nodeId].springFy = 0;\n }\n\n // forces caused by the edges, modelled as springs\n for (let i = 0; i < edgeIndices.length; i++) {\n edge = edges[edgeIndices[i]];\n if (edge.connected === true) {\n edgeLength =\n edge.options.length === undefined\n ? this.options.springLength\n : edge.options.length;\n\n dx = edge.from.x - edge.to.x;\n dy = edge.from.y - edge.to.y;\n distance = Math.sqrt(dx * dx + dy * dy);\n distance = distance === 0 ? 0.01 : distance;\n\n // the 1/distance is so the fx and fy can be calculated without sine or cosine.\n springForce =\n (this.options.springConstant * (edgeLength - distance)) / distance;\n\n fx = dx * springForce;\n fy = dy * springForce;\n\n if (edge.to.level != edge.from.level) {\n if (forces[edge.toId] !== undefined) {\n forces[edge.toId].springFx -= fx;\n forces[edge.toId].springFy -= fy;\n }\n if (forces[edge.fromId] !== undefined) {\n forces[edge.fromId].springFx += fx;\n forces[edge.fromId].springFy += fy;\n }\n } else {\n if (forces[edge.toId] !== undefined) {\n forces[edge.toId].x -= factor * fx;\n forces[edge.toId].y -= factor * fy;\n }\n if (forces[edge.fromId] !== undefined) {\n forces[edge.fromId].x += factor * fx;\n forces[edge.fromId].y += factor * fy;\n }\n }\n }\n }\n\n // normalize spring forces\n springForce = 1;\n let springFx, springFy;\n for (let i = 0; i < nodeIndices.length; i++) {\n const nodeId = nodeIndices[i];\n springFx = Math.min(\n springForce,\n Math.max(-springForce, forces[nodeId].springFx)\n );\n springFy = Math.min(\n springForce,\n Math.max(-springForce, forces[nodeId].springFy)\n );\n\n forces[nodeId].x += springFx;\n forces[nodeId].y += springFy;\n }\n\n // retain energy balance\n let totalFx = 0;\n let totalFy = 0;\n for (let i = 0; i < nodeIndices.length; i++) {\n const nodeId = nodeIndices[i];\n totalFx += forces[nodeId].x;\n totalFy += forces[nodeId].y;\n }\n const correctionFx = totalFx / nodeIndices.length;\n const correctionFy = totalFy / nodeIndices.length;\n\n for (let i = 0; i < nodeIndices.length; i++) {\n const nodeId = nodeIndices[i];\n forces[nodeId].x -= correctionFx;\n forces[nodeId].y -= correctionFy;\n }\n }\n}\n\nexport default HierarchicalSpringSolver;\n","/**\n * Central Gravity Solver\n */\nclass CentralGravitySolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n this.body = body;\n this.physicsBody = physicsBody;\n this.setOptions(options);\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n }\n\n /**\n * Calculates forces for each node\n */\n solve() {\n let dx, dy, distance, node;\n const nodes = this.body.nodes;\n const nodeIndices = this.physicsBody.physicsNodeIndices;\n const forces = this.physicsBody.forces;\n\n for (let i = 0; i < nodeIndices.length; i++) {\n const nodeId = nodeIndices[i];\n node = nodes[nodeId];\n dx = -node.x;\n dy = -node.y;\n distance = Math.sqrt(dx * dx + dy * dy);\n\n this._calculateForces(distance, dx, dy, forces, node);\n }\n }\n\n /**\n * Calculate the forces based on the distance.\n * @param {number} distance\n * @param {number} dx\n * @param {number} dy\n * @param {Object} forces\n * @param {Node} node\n * @private\n */\n _calculateForces(distance, dx, dy, forces, node) {\n const gravityForce =\n distance === 0 ? 0 : this.options.centralGravity / distance;\n forces[node.id].x = dx * gravityForce;\n forces[node.id].y = dy * gravityForce;\n }\n}\n\nexport default CentralGravitySolver;\n","import BarnesHutSolver from \"./BarnesHutSolver\";\nimport { Alea } from \"vis-util/esnext\";\n\n/**\n * @augments BarnesHutSolver\n */\nclass ForceAtlas2BasedRepulsionSolver extends BarnesHutSolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n super(body, physicsBody, options);\n\n this._rng = Alea(\"FORCE ATLAS 2 BASED REPULSION SOLVER\");\n }\n\n /**\n * Calculate the forces based on the distance.\n * @param {number} distance\n * @param {number} dx\n * @param {number} dy\n * @param {Node} node\n * @param {object} parentBranch\n * @private\n */\n _calculateForces(distance, dx, dy, node, parentBranch) {\n if (distance === 0) {\n distance = 0.1 * this._rng();\n dx = distance;\n }\n\n if (this.overlapAvoidanceFactor < 1 && node.shape.radius) {\n distance = Math.max(\n 0.1 + this.overlapAvoidanceFactor * node.shape.radius,\n distance - node.shape.radius\n );\n }\n\n const degree = node.edges.length + 1;\n // the dividing by the distance cubed instead of squared allows us to get the fx and fy components without sines and cosines\n // it is shorthand for gravityforce with distance squared and fx = dx/distance * gravityForce\n const gravityForce =\n (this.options.gravitationalConstant *\n parentBranch.mass *\n node.options.mass *\n degree) /\n Math.pow(distance, 2);\n const fx = dx * gravityForce;\n const fy = dy * gravityForce;\n\n this.physicsBody.forces[node.id].x += fx;\n this.physicsBody.forces[node.id].y += fy;\n }\n}\n\nexport default ForceAtlas2BasedRepulsionSolver;\n","import CentralGravitySolver from \"./CentralGravitySolver\";\n\n/**\n * @augments CentralGravitySolver\n */\nclass ForceAtlas2BasedCentralGravitySolver extends CentralGravitySolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n super(body, physicsBody, options);\n }\n\n /**\n * Calculate the forces based on the distance.\n * @param {number} distance\n * @param {number} dx\n * @param {number} dy\n * @param {Object} forces\n * @param {Node} node\n * @private\n */\n _calculateForces(distance, dx, dy, forces, node) {\n if (distance > 0) {\n const degree = node.edges.length + 1;\n const gravityForce =\n this.options.centralGravity * degree * node.options.mass;\n forces[node.id].x = dx * gravityForce;\n forces[node.id].y = dy * gravityForce;\n }\n }\n}\n\nexport default ForceAtlas2BasedCentralGravitySolver;\n","import BarnesHutSolver from \"./components/physics/BarnesHutSolver\";\nimport Repulsion from \"./components/physics/RepulsionSolver\";\nimport HierarchicalRepulsion from \"./components/physics/HierarchicalRepulsionSolver\";\nimport SpringSolver from \"./components/physics/SpringSolver\";\nimport HierarchicalSpringSolver from \"./components/physics/HierarchicalSpringSolver\";\nimport CentralGravitySolver from \"./components/physics/CentralGravitySolver\";\nimport ForceAtlas2BasedRepulsionSolver from \"./components/physics/FA2BasedRepulsionSolver\";\nimport ForceAtlas2BasedCentralGravitySolver from \"./components/physics/FA2BasedCentralGravitySolver\";\nimport {\n HSVToHex,\n mergeOptions,\n selectiveNotDeepExtend,\n} from \"vis-util/esnext\";\nimport { EndPoints } from \"./components/edges\"; // for debugging with _drawForces()\n\n/**\n * The physics engine\n */\nclass PhysicsEngine {\n /**\n * @param {object} body\n */\n constructor(body) {\n this.body = body;\n this.physicsBody = {\n physicsNodeIndices: [],\n physicsEdgeIndices: [],\n forces: {},\n velocities: {},\n };\n\n this.physicsEnabled = true;\n this.simulationInterval = 1000 / 60;\n this.requiresTimeout = true;\n this.previousStates = {};\n this.referenceState = {};\n this.freezeCache = {};\n this.renderTimer = undefined;\n\n // parameters for the adaptive timestep\n this.adaptiveTimestep = false;\n this.adaptiveTimestepEnabled = false;\n this.adaptiveCounter = 0;\n this.adaptiveInterval = 3;\n\n this.stabilized = false;\n this.startedStabilization = false;\n this.stabilizationIterations = 0;\n this.ready = false; // will be set to true if the stabilize\n\n // default options\n this.options = {};\n this.defaultOptions = {\n enabled: true,\n barnesHut: {\n theta: 0.5,\n gravitationalConstant: -2000,\n centralGravity: 0.3,\n springLength: 95,\n springConstant: 0.04,\n damping: 0.09,\n avoidOverlap: 0,\n },\n forceAtlas2Based: {\n theta: 0.5,\n gravitationalConstant: -50,\n centralGravity: 0.01,\n springConstant: 0.08,\n springLength: 100,\n damping: 0.4,\n avoidOverlap: 0,\n },\n repulsion: {\n centralGravity: 0.2,\n springLength: 200,\n springConstant: 0.05,\n nodeDistance: 100,\n damping: 0.09,\n avoidOverlap: 0,\n },\n hierarchicalRepulsion: {\n centralGravity: 0.0,\n springLength: 100,\n springConstant: 0.01,\n nodeDistance: 120,\n damping: 0.09,\n },\n maxVelocity: 50,\n minVelocity: 0.75, // px/s\n solver: \"barnesHut\",\n stabilization: {\n enabled: true,\n iterations: 1000, // maximum number of iteration to stabilize\n updateInterval: 50,\n onlyDynamicEdges: false,\n fit: true,\n },\n timestep: 0.5,\n adaptiveTimestep: true,\n wind: { x: 0, y: 0 },\n };\n Object.assign(this.options, this.defaultOptions);\n this.timestep = 0.5;\n this.layoutFailed = false;\n\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n this.body.emitter.on(\"initPhysics\", () => {\n this.initPhysics();\n });\n this.body.emitter.on(\"_layoutFailed\", () => {\n this.layoutFailed = true;\n });\n this.body.emitter.on(\"resetPhysics\", () => {\n this.stopSimulation();\n this.ready = false;\n });\n this.body.emitter.on(\"disablePhysics\", () => {\n this.physicsEnabled = false;\n this.stopSimulation();\n });\n this.body.emitter.on(\"restorePhysics\", () => {\n this.setOptions(this.options);\n if (this.ready === true) {\n this.startSimulation();\n }\n });\n this.body.emitter.on(\"startSimulation\", () => {\n if (this.ready === true) {\n this.startSimulation();\n }\n });\n this.body.emitter.on(\"stopSimulation\", () => {\n this.stopSimulation();\n });\n this.body.emitter.on(\"destroy\", () => {\n this.stopSimulation(false);\n this.body.emitter.off();\n });\n this.body.emitter.on(\"_dataChanged\", () => {\n // Nodes and/or edges have been added or removed, update shortcut lists.\n this.updatePhysicsData();\n });\n\n // debug: show forces\n // this.body.emitter.on(\"afterDrawing\", (ctx) => {this._drawForces(ctx);});\n }\n\n /**\n * set the physics options\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n if (options === false) {\n this.options.enabled = false;\n this.physicsEnabled = false;\n this.stopSimulation();\n } else if (options === true) {\n this.options.enabled = true;\n this.physicsEnabled = true;\n this.startSimulation();\n } else {\n this.physicsEnabled = true;\n selectiveNotDeepExtend([\"stabilization\"], this.options, options);\n mergeOptions(this.options, options, \"stabilization\");\n\n if (options.enabled === undefined) {\n this.options.enabled = true;\n }\n\n if (this.options.enabled === false) {\n this.physicsEnabled = false;\n this.stopSimulation();\n }\n\n const wind = this.options.wind;\n if (wind) {\n if (typeof wind.x !== \"number\" || Number.isNaN(wind.x)) {\n wind.x = 0;\n }\n if (typeof wind.y !== \"number\" || Number.isNaN(wind.y)) {\n wind.y = 0;\n }\n }\n\n // set the timestep\n this.timestep = this.options.timestep;\n }\n }\n this.init();\n }\n\n /**\n * configure the engine.\n */\n init() {\n let options;\n if (this.options.solver === \"forceAtlas2Based\") {\n options = this.options.forceAtlas2Based;\n this.nodesSolver = new ForceAtlas2BasedRepulsionSolver(\n this.body,\n this.physicsBody,\n options\n );\n this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options);\n this.gravitySolver = new ForceAtlas2BasedCentralGravitySolver(\n this.body,\n this.physicsBody,\n options\n );\n } else if (this.options.solver === \"repulsion\") {\n options = this.options.repulsion;\n this.nodesSolver = new Repulsion(this.body, this.physicsBody, options);\n this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options);\n this.gravitySolver = new CentralGravitySolver(\n this.body,\n this.physicsBody,\n options\n );\n } else if (this.options.solver === \"hierarchicalRepulsion\") {\n options = this.options.hierarchicalRepulsion;\n this.nodesSolver = new HierarchicalRepulsion(\n this.body,\n this.physicsBody,\n options\n );\n this.edgesSolver = new HierarchicalSpringSolver(\n this.body,\n this.physicsBody,\n options\n );\n this.gravitySolver = new CentralGravitySolver(\n this.body,\n this.physicsBody,\n options\n );\n } else {\n // barnesHut\n options = this.options.barnesHut;\n this.nodesSolver = new BarnesHutSolver(\n this.body,\n this.physicsBody,\n options\n );\n this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options);\n this.gravitySolver = new CentralGravitySolver(\n this.body,\n this.physicsBody,\n options\n );\n }\n\n this.modelOptions = options;\n }\n\n /**\n * initialize the engine\n */\n initPhysics() {\n if (this.physicsEnabled === true && this.options.enabled === true) {\n if (this.options.stabilization.enabled === true) {\n this.stabilize();\n } else {\n this.stabilized = false;\n this.ready = true;\n this.body.emitter.emit(\"fit\", {}, this.layoutFailed); // if the layout failed, we use the approximation for the zoom\n this.startSimulation();\n }\n } else {\n this.ready = true;\n this.body.emitter.emit(\"fit\");\n }\n }\n\n /**\n * Start the simulation\n */\n startSimulation() {\n if (this.physicsEnabled === true && this.options.enabled === true) {\n this.stabilized = false;\n\n // when visible, adaptivity is disabled.\n this.adaptiveTimestep = false;\n\n // this sets the width of all nodes initially which could be required for the avoidOverlap\n this.body.emitter.emit(\"_resizeNodes\");\n if (this.viewFunction === undefined) {\n this.viewFunction = this.simulationStep.bind(this);\n this.body.emitter.on(\"initRedraw\", this.viewFunction);\n this.body.emitter.emit(\"_startRendering\");\n }\n } else {\n this.body.emitter.emit(\"_redraw\");\n }\n }\n\n /**\n * Stop the simulation, force stabilization.\n * @param {boolean} [emit]\n */\n stopSimulation(emit = true) {\n this.stabilized = true;\n if (emit === true) {\n this._emitStabilized();\n }\n if (this.viewFunction !== undefined) {\n this.body.emitter.off(\"initRedraw\", this.viewFunction);\n this.viewFunction = undefined;\n if (emit === true) {\n this.body.emitter.emit(\"_stopRendering\");\n }\n }\n }\n\n /**\n * The viewFunction inserts this step into each render loop. It calls the physics tick and handles the cleanup at stabilized.\n *\n */\n simulationStep() {\n // check if the physics have settled\n const startTime = Date.now();\n this.physicsTick();\n const physicsTime = Date.now() - startTime;\n\n // run double speed if it is a little graph\n if (\n (physicsTime < 0.4 * this.simulationInterval ||\n this.runDoubleSpeed === true) &&\n this.stabilized === false\n ) {\n this.physicsTick();\n\n // this makes sure there is no jitter. The decision is taken once to run it at double speed.\n this.runDoubleSpeed = true;\n }\n\n if (this.stabilized === true) {\n this.stopSimulation();\n }\n }\n\n /**\n * trigger the stabilized event.\n * @param {number} [amountOfIterations]\n * @private\n */\n _emitStabilized(amountOfIterations = this.stabilizationIterations) {\n if (\n this.stabilizationIterations > 1 ||\n this.startedStabilization === true\n ) {\n setTimeout(() => {\n this.body.emitter.emit(\"stabilized\", {\n iterations: amountOfIterations,\n });\n this.startedStabilization = false;\n this.stabilizationIterations = 0;\n }, 0);\n }\n }\n\n /**\n * Calculate the forces for one physics iteration and move the nodes.\n * @private\n */\n physicsStep() {\n this.gravitySolver.solve();\n this.nodesSolver.solve();\n this.edgesSolver.solve();\n this.moveNodes();\n }\n\n /**\n * Make dynamic adjustments to the timestep, based on current state.\n *\n * Helper function for physicsTick().\n * @private\n */\n adjustTimeStep() {\n const factor = 1.2; // Factor for increasing the timestep on success.\n\n // we compare the two steps. if it is acceptable we double the step.\n if (this._evaluateStepQuality() === true) {\n this.timestep = factor * this.timestep;\n } else {\n // if not, we decrease the step to a minimum of the options timestep.\n // if the decreased timestep is smaller than the options step, we do not reset the counter\n // we assume that the options timestep is stable enough.\n if (this.timestep / factor < this.options.timestep) {\n this.timestep = this.options.timestep;\n } else {\n // if the timestep was larger than 2 times the option one we check the adaptivity again to ensure\n // that large instabilities do not form.\n this.adaptiveCounter = -1; // check again next iteration\n this.timestep = Math.max(this.options.timestep, this.timestep / factor);\n }\n }\n }\n\n /**\n * A single simulation step (or 'tick') in the physics simulation\n * @private\n */\n physicsTick() {\n this._startStabilizing(); // this ensures that there is no start event when the network is already stable.\n if (this.stabilized === true) return;\n\n // adaptivity means the timestep adapts to the situation, only applicable for stabilization\n if (\n this.adaptiveTimestep === true &&\n this.adaptiveTimestepEnabled === true\n ) {\n // timestep remains stable for \"interval\" iterations.\n const doAdaptive = this.adaptiveCounter % this.adaptiveInterval === 0;\n\n if (doAdaptive) {\n // first the big step and revert.\n this.timestep = 2 * this.timestep;\n this.physicsStep();\n this.revert(); // saves the reference state\n\n // now the normal step. Since this is the last step, it is the more stable one and we will take this.\n this.timestep = 0.5 * this.timestep;\n\n // since it's half the step, we do it twice.\n this.physicsStep();\n this.physicsStep();\n\n this.adjustTimeStep();\n } else {\n this.physicsStep(); // normal step, keeping timestep constant\n }\n\n this.adaptiveCounter += 1;\n } else {\n // case for the static timestep, we reset it to the one in options and take a normal step.\n this.timestep = this.options.timestep;\n this.physicsStep();\n }\n\n if (this.stabilized === true) this.revert();\n this.stabilizationIterations++;\n }\n\n /**\n * Nodes and edges can have the physics toggles on or off. A collection of indices is created here so we can skip the check all the time.\n * @private\n */\n updatePhysicsData() {\n this.physicsBody.forces = {};\n this.physicsBody.physicsNodeIndices = [];\n this.physicsBody.physicsEdgeIndices = [];\n const nodes = this.body.nodes;\n const edges = this.body.edges;\n\n // get node indices for physics\n for (const nodeId in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, nodeId)) {\n if (nodes[nodeId].options.physics === true) {\n this.physicsBody.physicsNodeIndices.push(nodes[nodeId].id);\n }\n }\n }\n\n // get edge indices for physics\n for (const edgeId in edges) {\n if (Object.prototype.hasOwnProperty.call(edges, edgeId)) {\n if (edges[edgeId].options.physics === true) {\n this.physicsBody.physicsEdgeIndices.push(edges[edgeId].id);\n }\n }\n }\n\n // get the velocity and the forces vector\n for (let i = 0; i < this.physicsBody.physicsNodeIndices.length; i++) {\n const nodeId = this.physicsBody.physicsNodeIndices[i];\n this.physicsBody.forces[nodeId] = { x: 0, y: 0 };\n\n // forces can be reset because they are recalculated. Velocities have to persist.\n if (this.physicsBody.velocities[nodeId] === undefined) {\n this.physicsBody.velocities[nodeId] = { x: 0, y: 0 };\n }\n }\n\n // clean deleted nodes from the velocity vector\n for (const nodeId in this.physicsBody.velocities) {\n if (nodes[nodeId] === undefined) {\n delete this.physicsBody.velocities[nodeId];\n }\n }\n }\n\n /**\n * Revert the simulation one step. This is done so after stabilization, every new start of the simulation will also say stabilized.\n */\n revert() {\n const nodeIds = Object.keys(this.previousStates);\n const nodes = this.body.nodes;\n const velocities = this.physicsBody.velocities;\n this.referenceState = {};\n\n for (let i = 0; i < nodeIds.length; i++) {\n const nodeId = nodeIds[i];\n if (nodes[nodeId] !== undefined) {\n if (nodes[nodeId].options.physics === true) {\n this.referenceState[nodeId] = {\n positions: { x: nodes[nodeId].x, y: nodes[nodeId].y },\n };\n velocities[nodeId].x = this.previousStates[nodeId].vx;\n velocities[nodeId].y = this.previousStates[nodeId].vy;\n nodes[nodeId].x = this.previousStates[nodeId].x;\n nodes[nodeId].y = this.previousStates[nodeId].y;\n }\n } else {\n delete this.previousStates[nodeId];\n }\n }\n }\n\n /**\n * This compares the reference state to the current state\n * @returns {boolean}\n * @private\n */\n _evaluateStepQuality() {\n let dx, dy, dpos;\n const nodes = this.body.nodes;\n const reference = this.referenceState;\n const posThreshold = 0.3;\n\n for (const nodeId in this.referenceState) {\n if (\n Object.prototype.hasOwnProperty.call(this.referenceState, nodeId) &&\n nodes[nodeId] !== undefined\n ) {\n dx = nodes[nodeId].x - reference[nodeId].positions.x;\n dy = nodes[nodeId].y - reference[nodeId].positions.y;\n\n dpos = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));\n\n if (dpos > posThreshold) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * move the nodes one timestep and check if they are stabilized\n */\n moveNodes() {\n const nodeIndices = this.physicsBody.physicsNodeIndices;\n let maxNodeVelocity = 0;\n let averageNodeVelocity = 0;\n\n // the velocity threshold (energy in the system) for the adaptivity toggle\n const velocityAdaptiveThreshold = 5;\n\n for (let i = 0; i < nodeIndices.length; i++) {\n const nodeId = nodeIndices[i];\n const nodeVelocity = this._performStep(nodeId);\n // stabilized is true if stabilized is true and velocity is smaller than vmin --> all nodes must be stabilized\n maxNodeVelocity = Math.max(maxNodeVelocity, nodeVelocity);\n averageNodeVelocity += nodeVelocity;\n }\n\n // evaluating the stabilized and adaptiveTimestepEnabled conditions\n this.adaptiveTimestepEnabled =\n averageNodeVelocity / nodeIndices.length < velocityAdaptiveThreshold;\n this.stabilized = maxNodeVelocity < this.options.minVelocity;\n }\n\n /**\n * Calculate new velocity for a coordinate direction\n * @param {number} v velocity for current coordinate\n * @param {number} f regular force for current coordinate\n * @param {number} m mass of current node\n * @returns {number} new velocity for current coordinate\n * @private\n */\n calculateComponentVelocity(v, f, m) {\n const df = this.modelOptions.damping * v; // damping force\n const a = (f - df) / m; // acceleration\n\n v += a * this.timestep;\n\n // Put a limit on the velocities if it is really high\n const maxV = this.options.maxVelocity || 1e9;\n if (Math.abs(v) > maxV) {\n v = v > 0 ? maxV : -maxV;\n }\n\n return v;\n }\n\n /**\n * Perform the actual step\n * @param {Node.id} nodeId\n * @returns {number} the new velocity of given node\n * @private\n */\n _performStep(nodeId) {\n const node = this.body.nodes[nodeId];\n const force = this.physicsBody.forces[nodeId];\n\n if (this.options.wind) {\n force.x += this.options.wind.x;\n force.y += this.options.wind.y;\n }\n\n const velocity = this.physicsBody.velocities[nodeId];\n\n // store the state so we can revert\n this.previousStates[nodeId] = {\n x: node.x,\n y: node.y,\n vx: velocity.x,\n vy: velocity.y,\n };\n\n if (node.options.fixed.x === false) {\n velocity.x = this.calculateComponentVelocity(\n velocity.x,\n force.x,\n node.options.mass\n );\n node.x += velocity.x * this.timestep;\n } else {\n force.x = 0;\n velocity.x = 0;\n }\n\n if (node.options.fixed.y === false) {\n velocity.y = this.calculateComponentVelocity(\n velocity.y,\n force.y,\n node.options.mass\n );\n node.y += velocity.y * this.timestep;\n } else {\n force.y = 0;\n velocity.y = 0;\n }\n\n const totalVelocity = Math.sqrt(\n Math.pow(velocity.x, 2) + Math.pow(velocity.y, 2)\n );\n return totalVelocity;\n }\n\n /**\n * When initializing and stabilizing, we can freeze nodes with a predefined position.\n * This greatly speeds up stabilization because only the supportnodes for the smoothCurves have to settle.\n * @private\n */\n _freezeNodes() {\n const nodes = this.body.nodes;\n for (const id in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, id)) {\n if (nodes[id].x && nodes[id].y) {\n const fixed = nodes[id].options.fixed;\n this.freezeCache[id] = { x: fixed.x, y: fixed.y };\n fixed.x = true;\n fixed.y = true;\n }\n }\n }\n }\n\n /**\n * Unfreezes the nodes that have been frozen by _freezeDefinedNodes.\n * @private\n */\n _restoreFrozenNodes() {\n const nodes = this.body.nodes;\n for (const id in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, id)) {\n if (this.freezeCache[id] !== undefined) {\n nodes[id].options.fixed.x = this.freezeCache[id].x;\n nodes[id].options.fixed.y = this.freezeCache[id].y;\n }\n }\n }\n this.freezeCache = {};\n }\n\n /**\n * Find a stable position for all nodes\n * @param {number} [iterations]\n */\n stabilize(iterations = this.options.stabilization.iterations) {\n if (typeof iterations !== \"number\") {\n iterations = this.options.stabilization.iterations;\n console.error(\n \"The stabilize method needs a numeric amount of iterations. Switching to default: \",\n iterations\n );\n }\n\n if (this.physicsBody.physicsNodeIndices.length === 0) {\n this.ready = true;\n return;\n }\n\n // enable adaptive timesteps\n this.adaptiveTimestep = true && this.options.adaptiveTimestep;\n\n // this sets the width of all nodes initially which could be required for the avoidOverlap\n this.body.emitter.emit(\"_resizeNodes\");\n\n this.stopSimulation(); // stop the render loop\n this.stabilized = false;\n\n // block redraw requests\n this.body.emitter.emit(\"_blockRedraw\");\n this.targetIterations = iterations;\n\n // start the stabilization\n if (this.options.stabilization.onlyDynamicEdges === true) {\n this._freezeNodes();\n }\n this.stabilizationIterations = 0;\n\n setTimeout(() => this._stabilizationBatch(), 0);\n }\n\n /**\n * If not already stabilizing, start it and emit a start event.\n * @returns {boolean} true if stabilization started with this call\n * @private\n */\n _startStabilizing() {\n if (this.startedStabilization === true) return false;\n\n this.body.emitter.emit(\"startStabilizing\");\n this.startedStabilization = true;\n return true;\n }\n\n /**\n * One batch of stabilization\n * @private\n */\n _stabilizationBatch() {\n const running = () =>\n this.stabilized === false &&\n this.stabilizationIterations < this.targetIterations;\n\n const sendProgress = () => {\n this.body.emitter.emit(\"stabilizationProgress\", {\n iterations: this.stabilizationIterations,\n total: this.targetIterations,\n });\n };\n\n if (this._startStabilizing()) {\n sendProgress(); // Ensure that there is at least one start event.\n }\n\n let count = 0;\n while (running() && count < this.options.stabilization.updateInterval) {\n this.physicsTick();\n count++;\n }\n\n sendProgress();\n\n if (running()) {\n setTimeout(this._stabilizationBatch.bind(this), 0);\n } else {\n this._finalizeStabilization();\n }\n }\n\n /**\n * Wrap up the stabilization, fit and emit the events.\n * @private\n */\n _finalizeStabilization() {\n this.body.emitter.emit(\"_allowRedraw\");\n if (this.options.stabilization.fit === true) {\n this.body.emitter.emit(\"fit\");\n }\n\n if (this.options.stabilization.onlyDynamicEdges === true) {\n this._restoreFrozenNodes();\n }\n\n this.body.emitter.emit(\"stabilizationIterationsDone\");\n this.body.emitter.emit(\"_requestRedraw\");\n\n if (this.stabilized === true) {\n this._emitStabilized();\n } else {\n this.startSimulation();\n }\n\n this.ready = true;\n }\n\n //--------------------------- DEBUGGING BELOW ---------------------------//\n\n /**\n * Debug function that display arrows for the forces currently active in the network.\n *\n * Use this when debugging only.\n * @param {CanvasRenderingContext2D} ctx\n * @private\n */\n _drawForces(ctx) {\n for (let i = 0; i < this.physicsBody.physicsNodeIndices.length; i++) {\n const index = this.physicsBody.physicsNodeIndices[i];\n const node = this.body.nodes[index];\n const force = this.physicsBody.forces[index];\n const factor = 20;\n const colorFactor = 0.03;\n const forceSize = Math.sqrt(Math.pow(force.x, 2) + Math.pow(force.x, 2));\n\n const size = Math.min(Math.max(5, forceSize), 15);\n const arrowSize = 3 * size;\n\n const color = HSVToHex(\n (180 - Math.min(1, Math.max(0, colorFactor * forceSize)) * 180) / 360,\n 1,\n 1\n );\n\n const point = {\n x: node.x + factor * force.x,\n y: node.y + factor * force.y,\n };\n\n ctx.lineWidth = size;\n ctx.strokeStyle = color;\n ctx.beginPath();\n ctx.moveTo(node.x, node.y);\n ctx.lineTo(point.x, point.y);\n ctx.stroke();\n\n const angle = Math.atan2(force.y, force.x);\n ctx.fillStyle = color;\n EndPoints.draw(ctx, {\n type: \"arrow\",\n point: point,\n angle: angle,\n length: arrowSize,\n });\n ctx.fill();\n }\n }\n}\n\nexport default PhysicsEngine;\n","import { deepExtend } from \"vis-util/esnext\";\n\n/**\n * Utility Class\n */\nclass NetworkUtil {\n /**\n * @ignore\n */\n constructor() {}\n\n /**\n * Find the center position of the network considering the bounding boxes\n * @param {Array.} allNodes\n * @param {Array.} [specificNodes]\n * @returns {{minX: number, maxX: number, minY: number, maxY: number}}\n * @static\n */\n static getRange(allNodes, specificNodes = []) {\n let minY = 1e9,\n maxY = -1e9,\n minX = 1e9,\n maxX = -1e9,\n node;\n if (specificNodes.length > 0) {\n for (let i = 0; i < specificNodes.length; i++) {\n node = allNodes[specificNodes[i]];\n if (minX > node.shape.boundingBox.left) {\n minX = node.shape.boundingBox.left;\n }\n if (maxX < node.shape.boundingBox.right) {\n maxX = node.shape.boundingBox.right;\n }\n if (minY > node.shape.boundingBox.top) {\n minY = node.shape.boundingBox.top;\n } // top is negative, bottom is positive\n if (maxY < node.shape.boundingBox.bottom) {\n maxY = node.shape.boundingBox.bottom;\n } // top is negative, bottom is positive\n }\n }\n\n if (minX === 1e9 && maxX === -1e9 && minY === 1e9 && maxY === -1e9) {\n (minY = 0), (maxY = 0), (minX = 0), (maxX = 0);\n }\n return { minX: minX, maxX: maxX, minY: minY, maxY: maxY };\n }\n\n /**\n * Find the center position of the network\n * @param {Array.} allNodes\n * @param {Array.} [specificNodes]\n * @returns {{minX: number, maxX: number, minY: number, maxY: number}}\n * @static\n */\n static getRangeCore(allNodes, specificNodes = []) {\n let minY = 1e9,\n maxY = -1e9,\n minX = 1e9,\n maxX = -1e9,\n node;\n if (specificNodes.length > 0) {\n for (let i = 0; i < specificNodes.length; i++) {\n node = allNodes[specificNodes[i]];\n if (minX > node.x) {\n minX = node.x;\n }\n if (maxX < node.x) {\n maxX = node.x;\n }\n if (minY > node.y) {\n minY = node.y;\n } // top is negative, bottom is positive\n if (maxY < node.y) {\n maxY = node.y;\n } // top is negative, bottom is positive\n }\n }\n\n if (minX === 1e9 && maxX === -1e9 && minY === 1e9 && maxY === -1e9) {\n (minY = 0), (maxY = 0), (minX = 0), (maxX = 0);\n }\n return { minX: minX, maxX: maxX, minY: minY, maxY: maxY };\n }\n\n /**\n * @param {object} range = {minX: minX, maxX: maxX, minY: minY, maxY: maxY};\n * @returns {{x: number, y: number}}\n * @static\n */\n static findCenter(range) {\n return {\n x: 0.5 * (range.maxX + range.minX),\n y: 0.5 * (range.maxY + range.minY),\n };\n }\n\n /**\n * This returns a clone of the options or options of the edge or node to be used for construction of new edges or check functions for new nodes.\n * @param {vis.Item} item\n * @param {'node'|undefined} type\n * @returns {{}}\n * @static\n */\n static cloneOptions(item, type) {\n const clonedOptions = {};\n if (type === undefined || type === \"node\") {\n deepExtend(clonedOptions, item.options, true);\n clonedOptions.x = item.x;\n clonedOptions.y = item.y;\n clonedOptions.amountOfConnections = item.edges.length;\n } else {\n deepExtend(clonedOptions, item.options, true);\n }\n return clonedOptions;\n }\n}\n\nexport default NetworkUtil;\n","import { forEach } from \"vis-util/esnext\";\nimport Node from \"../Node\";\n\n/**\n * A Cluster is a special Node that allows a group of Nodes positioned closely together\n * to be represented by a single Cluster Node.\n * @augments Node\n */\nclass Cluster extends Node {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Array.}imagelist\n * @param {Array} grouplist\n * @param {object} globalOptions\n * @param {object} defaultOptions Global default options for nodes\n */\n constructor(\n options,\n body,\n imagelist,\n grouplist,\n globalOptions,\n defaultOptions\n ) {\n super(options, body, imagelist, grouplist, globalOptions, defaultOptions);\n\n this.isCluster = true;\n this.containedNodes = {};\n this.containedEdges = {};\n }\n\n /**\n * Transfer child cluster data to current and disconnect the child cluster.\n *\n * Please consult the header comment in 'Clustering.js' for the fields set here.\n * @param {string|number} childClusterId id of child cluster to open\n */\n _openChildCluster(childClusterId) {\n const childCluster = this.body.nodes[childClusterId];\n if (this.containedNodes[childClusterId] === undefined) {\n throw new Error(\n \"node with id: \" + childClusterId + \" not in current cluster\"\n );\n }\n if (!childCluster.isCluster) {\n throw new Error(\"node with id: \" + childClusterId + \" is not a cluster\");\n }\n\n // Disconnect child cluster from current cluster\n delete this.containedNodes[childClusterId];\n forEach(childCluster.edges, (edge) => {\n delete this.containedEdges[edge.id];\n });\n\n // Transfer nodes and edges\n forEach(childCluster.containedNodes, (node, nodeId) => {\n this.containedNodes[nodeId] = node;\n });\n childCluster.containedNodes = {};\n\n forEach(childCluster.containedEdges, (edge, edgeId) => {\n this.containedEdges[edgeId] = edge;\n });\n childCluster.containedEdges = {};\n\n // Transfer edges within cluster edges which are clustered\n forEach(childCluster.edges, (clusterEdge) => {\n forEach(this.edges, (parentClusterEdge) => {\n // Assumption: a clustered edge can only be present in a single clustering edge\n // Not tested here\n const index = parentClusterEdge.clusteringEdgeReplacingIds.indexOf(\n clusterEdge.id\n );\n if (index === -1) return;\n\n forEach(clusterEdge.clusteringEdgeReplacingIds, (srcId) => {\n parentClusterEdge.clusteringEdgeReplacingIds.push(srcId);\n\n // Maintain correct bookkeeping for transferred edge\n this.body.edges[srcId].edgeReplacedById = parentClusterEdge.id;\n });\n\n // Remove cluster edge from parent cluster edge\n parentClusterEdge.clusteringEdgeReplacingIds.splice(index, 1);\n });\n });\n childCluster.edges = [];\n }\n}\n\nexport default Cluster;\n","/* ===========================================================================\n\n# TODO\n\n- `edgeReplacedById` not cleaned up yet on cluster edge removal\n- allowSingleNodeCluster could be a global option as well; currently needs to always\n be passed to clustering methods\n\n----------------------------------------------\n\n# State Model for Clustering\n\nThe total state for clustering is non-trivial. It is useful to have a model\navailable as to how it works. The following documents the relevant state items.\n\n\n## Network State\n\nThe following `network`-members are relevant to clustering:\n\n- `body.nodes` - all nodes actively participating in the network\n- `body.edges` - same for edges\n- `body.nodeIndices` - id's of nodes that are visible at a given moment\n- `body.edgeIndices` - same for edges\n\nThis includes:\n\n- helper nodes for dragging in `manipulation`\n- helper nodes for edge type `dynamic`\n- cluster nodes and edges\n- there may be more than this.\n\nA node/edge may be missing in the `Indices` member if:\n\n- it is a helper node\n- the node or edge state has option `hidden` set\n- It is not visible due to clustering\n\n\n## Clustering State\n\nFor the hashes, the id's of the nodes/edges are used as key.\n\nMember `network.clustering` contains the following items:\n\n- `clusteredNodes` - hash with values: { clusterId: , node: }\n- `clusteredEdges` - hash with values: restore information for given edge\n\n\nDue to nesting of clusters, these members can contain cluster nodes and edges as well.\n\nThe important thing to note here, is that the clustered nodes and edges also\nappear in the members of the cluster nodes. For data update, it is therefore\nimportant to scan these lists as well as the cluster nodes.\n\n\n### Cluster Node\n\nA cluster node has the following extra fields:\n\n- `isCluster : true` - indication that this is a cluster node\n- `containedNodes` - hash of nodes contained in this cluster\n- `containedEdges` - same for edges\n- `edges` - array of cluster edges for this node\n\n\n**NOTE:**\n\n- `containedEdges` can also contain edges which are not clustered; e.g. an edge\n connecting two nodes in the same cluster.\n\n\n### Cluster Edge\n\nThese are the items in the `edges` member of a clustered node. They have the\nfollowing relevant members:\n\n- 'clusteringEdgeReplacingIds` - array of id's of edges replaced by this edge\n\nNote that it's possible to nest clusters, so that `clusteringEdgeReplacingIds`\ncan contain edge id's of other clusters.\n\n\n### Clustered Edge\n\nThis is any edge contained by a cluster edge. It gets the following additional\nmember:\n\n- `edgeReplacedById` - id of the cluster edge in which current edge is clustered\n\n\n =========================================================================== */\nimport { deepExtend, forEach } from \"vis-util/esnext\";\nimport { v4 as randomUUID } from \"uuid\";\nimport NetworkUtil from \"../NetworkUtil\";\nimport Cluster from \"./components/nodes/Cluster\";\nimport Edge from \"./components/Edge\"; // Only needed for check on type!\nimport Node from \"./components/Node\"; // Only needed for check on type!\n\n/**\n * The clustering engine\n */\nclass ClusterEngine {\n /**\n * @param {object} body\n */\n constructor(body) {\n this.body = body;\n this.clusteredNodes = {}; // key: node id, value: { clusterId: , node: }\n this.clusteredEdges = {}; // key: edge id, value: restore information for given edge\n\n this.options = {};\n this.defaultOptions = {};\n Object.assign(this.options, this.defaultOptions);\n\n this.body.emitter.on(\"_resetData\", () => {\n this.clusteredNodes = {};\n this.clusteredEdges = {};\n });\n }\n\n /**\n *\n * @param {number} hubsize\n * @param {object} options\n */\n clusterByHubsize(hubsize, options) {\n if (hubsize === undefined) {\n hubsize = this._getHubSize();\n } else if (typeof hubsize === \"object\") {\n options = this._checkOptions(hubsize);\n hubsize = this._getHubSize();\n }\n\n const nodesToCluster = [];\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const node = this.body.nodes[this.body.nodeIndices[i]];\n if (node.edges.length >= hubsize) {\n nodesToCluster.push(node.id);\n }\n }\n\n for (let i = 0; i < nodesToCluster.length; i++) {\n this.clusterByConnection(nodesToCluster[i], options, true);\n }\n\n this.body.emitter.emit(\"_dataChanged\");\n }\n\n /**\n * loop over all nodes, check if they adhere to the condition and cluster if needed.\n * @param {object} options\n * @param {boolean} [refreshData]\n */\n cluster(options = {}, refreshData = true) {\n if (options.joinCondition === undefined) {\n throw new Error(\n \"Cannot call clusterByNodeData without a joinCondition function in the options.\"\n );\n }\n\n // check if the options object is fine, append if needed\n options = this._checkOptions(options);\n\n const childNodesObj = {};\n const childEdgesObj = {};\n\n // collect the nodes that will be in the cluster\n forEach(this.body.nodes, (node, nodeId) => {\n if (node.options && options.joinCondition(node.options) === true) {\n childNodesObj[nodeId] = node;\n\n // collect the edges that will be in the cluster\n forEach(node.edges, (edge) => {\n if (this.clusteredEdges[edge.id] === undefined) {\n childEdgesObj[edge.id] = edge;\n }\n });\n }\n });\n\n this._cluster(childNodesObj, childEdgesObj, options, refreshData);\n }\n\n /**\n * Cluster all nodes in the network that have only X edges\n * @param {number} edgeCount\n * @param {object} options\n * @param {boolean} [refreshData]\n */\n clusterByEdgeCount(edgeCount, options, refreshData = true) {\n options = this._checkOptions(options);\n const clusters = [];\n const usedNodes = {};\n let edge, edges, relevantEdgeCount;\n // collect the nodes that will be in the cluster\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const childNodesObj = {};\n const childEdgesObj = {};\n const nodeId = this.body.nodeIndices[i];\n const node = this.body.nodes[nodeId];\n\n // if this node is already used in another cluster this session, we do not have to re-evaluate it.\n if (usedNodes[nodeId] === undefined) {\n relevantEdgeCount = 0;\n edges = [];\n for (let j = 0; j < node.edges.length; j++) {\n edge = node.edges[j];\n if (this.clusteredEdges[edge.id] === undefined) {\n if (edge.toId !== edge.fromId) {\n relevantEdgeCount++;\n }\n edges.push(edge);\n }\n }\n\n // this node qualifies, we collect its neighbours to start the clustering process.\n if (relevantEdgeCount === edgeCount) {\n const checkJoinCondition = function (node) {\n if (\n options.joinCondition === undefined ||\n options.joinCondition === null\n ) {\n return true;\n }\n\n const clonedOptions = NetworkUtil.cloneOptions(node);\n return options.joinCondition(clonedOptions);\n };\n\n let gatheringSuccessful = true;\n for (let j = 0; j < edges.length; j++) {\n edge = edges[j];\n const childNodeId = this._getConnectedId(edge, nodeId);\n // add the nodes to the list by the join condition.\n if (checkJoinCondition(node)) {\n childEdgesObj[edge.id] = edge;\n childNodesObj[nodeId] = node;\n childNodesObj[childNodeId] = this.body.nodes[childNodeId];\n usedNodes[nodeId] = true;\n } else {\n // this node does not qualify after all.\n gatheringSuccessful = false;\n break;\n }\n }\n\n // add to the cluster queue\n if (\n Object.keys(childNodesObj).length > 0 &&\n Object.keys(childEdgesObj).length > 0 &&\n gatheringSuccessful === true\n ) {\n /**\n * Search for cluster data that contains any of the node id's\n * @returns {boolean} true if no joinCondition, otherwise return value of joinCondition\n */\n const findClusterData = function () {\n for (let n = 0; n < clusters.length; ++n) {\n // Search for a cluster containing any of the node id's\n for (const m in childNodesObj) {\n if (clusters[n].nodes[m] !== undefined) {\n return clusters[n];\n }\n }\n }\n\n return undefined;\n };\n\n // If any of the found nodes is part of a cluster found in this method,\n // add the current values to that cluster\n const foundCluster = findClusterData();\n if (foundCluster !== undefined) {\n // Add nodes to found cluster if not present\n for (const m in childNodesObj) {\n if (foundCluster.nodes[m] === undefined) {\n foundCluster.nodes[m] = childNodesObj[m];\n }\n }\n\n // Add edges to found cluster, if not present\n for (const m in childEdgesObj) {\n if (foundCluster.edges[m] === undefined) {\n foundCluster.edges[m] = childEdgesObj[m];\n }\n }\n } else {\n // Create a new cluster group\n clusters.push({ nodes: childNodesObj, edges: childEdgesObj });\n }\n }\n }\n }\n }\n\n for (let i = 0; i < clusters.length; i++) {\n this._cluster(clusters[i].nodes, clusters[i].edges, options, false);\n }\n\n if (refreshData === true) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n * Cluster all nodes in the network that have only 1 edge\n * @param {object} options\n * @param {boolean} [refreshData]\n */\n clusterOutliers(options, refreshData = true) {\n this.clusterByEdgeCount(1, options, refreshData);\n }\n\n /**\n * Cluster all nodes in the network that have only 2 edge\n * @param {object} options\n * @param {boolean} [refreshData]\n */\n clusterBridges(options, refreshData = true) {\n this.clusterByEdgeCount(2, options, refreshData);\n }\n\n /**\n * suck all connected nodes of a node into the node.\n * @param {Node.id} nodeId\n * @param {object} options\n * @param {boolean} [refreshData]\n */\n clusterByConnection(nodeId, options, refreshData = true) {\n // kill conditions\n if (nodeId === undefined) {\n throw new Error(\"No nodeId supplied to clusterByConnection!\");\n }\n if (this.body.nodes[nodeId] === undefined) {\n throw new Error(\n \"The nodeId given to clusterByConnection does not exist!\"\n );\n }\n\n const node = this.body.nodes[nodeId];\n options = this._checkOptions(options, node);\n if (options.clusterNodeProperties.x === undefined) {\n options.clusterNodeProperties.x = node.x;\n }\n if (options.clusterNodeProperties.y === undefined) {\n options.clusterNodeProperties.y = node.y;\n }\n if (options.clusterNodeProperties.fixed === undefined) {\n options.clusterNodeProperties.fixed = {};\n options.clusterNodeProperties.fixed.x = node.options.fixed.x;\n options.clusterNodeProperties.fixed.y = node.options.fixed.y;\n }\n\n const childNodesObj = {};\n const childEdgesObj = {};\n const parentNodeId = node.id;\n const parentClonedOptions = NetworkUtil.cloneOptions(node);\n childNodesObj[parentNodeId] = node;\n\n // collect the nodes that will be in the cluster\n for (let i = 0; i < node.edges.length; i++) {\n const edge = node.edges[i];\n if (this.clusteredEdges[edge.id] === undefined) {\n const childNodeId = this._getConnectedId(edge, parentNodeId);\n\n // if the child node is not in a cluster\n if (this.clusteredNodes[childNodeId] === undefined) {\n if (childNodeId !== parentNodeId) {\n if (options.joinCondition === undefined) {\n childEdgesObj[edge.id] = edge;\n childNodesObj[childNodeId] = this.body.nodes[childNodeId];\n } else {\n // clone the options and insert some additional parameters that could be interesting.\n const childClonedOptions = NetworkUtil.cloneOptions(\n this.body.nodes[childNodeId]\n );\n if (\n options.joinCondition(\n parentClonedOptions,\n childClonedOptions\n ) === true\n ) {\n childEdgesObj[edge.id] = edge;\n childNodesObj[childNodeId] = this.body.nodes[childNodeId];\n }\n }\n } else {\n // swallow the edge if it is self-referencing.\n childEdgesObj[edge.id] = edge;\n }\n }\n }\n }\n const childNodeIDs = Object.keys(childNodesObj).map(function (childNode) {\n return childNodesObj[childNode].id;\n });\n\n for (const childNodeKey in childNodesObj) {\n if (!Object.prototype.hasOwnProperty.call(childNodesObj, childNodeKey))\n continue;\n\n const childNode = childNodesObj[childNodeKey];\n for (let y = 0; y < childNode.edges.length; y++) {\n const childEdge = childNode.edges[y];\n if (\n childNodeIDs.indexOf(this._getConnectedId(childEdge, childNode.id)) >\n -1\n ) {\n childEdgesObj[childEdge.id] = childEdge;\n }\n }\n }\n this._cluster(childNodesObj, childEdgesObj, options, refreshData);\n }\n\n /**\n * This function creates the edges that will be attached to the cluster\n * It looks for edges that are connected to the nodes from the \"outside' of the cluster.\n * @param {{Node.id: vis.Node}} childNodesObj\n * @param {{vis.Edge.id: vis.Edge}} childEdgesObj\n * @param {object} clusterNodeProperties\n * @param {object} clusterEdgeProperties\n * @private\n */\n _createClusterEdges(\n childNodesObj,\n childEdgesObj,\n clusterNodeProperties,\n clusterEdgeProperties\n ) {\n let edge, childNodeId, childNode, toId, fromId, otherNodeId;\n\n // loop over all child nodes and their edges to find edges going out of the cluster\n // these edges will be replaced by clusterEdges.\n const childKeys = Object.keys(childNodesObj);\n const createEdges = [];\n for (let i = 0; i < childKeys.length; i++) {\n childNodeId = childKeys[i];\n childNode = childNodesObj[childNodeId];\n\n // construct new edges from the cluster to others\n for (let j = 0; j < childNode.edges.length; j++) {\n edge = childNode.edges[j];\n // we only handle edges that are visible to the system, not the disabled ones from the clustering process.\n if (this.clusteredEdges[edge.id] === undefined) {\n // self-referencing edges will be added to the \"hidden\" list\n if (edge.toId == edge.fromId) {\n childEdgesObj[edge.id] = edge;\n } else {\n // set up the from and to.\n if (edge.toId == childNodeId) {\n // this is a double equals because ints and strings can be interchanged here.\n toId = clusterNodeProperties.id;\n fromId = edge.fromId;\n otherNodeId = fromId;\n } else {\n toId = edge.toId;\n fromId = clusterNodeProperties.id;\n otherNodeId = toId;\n }\n }\n\n // Only edges from the cluster outwards are being replaced.\n if (childNodesObj[otherNodeId] === undefined) {\n createEdges.push({ edge: edge, fromId: fromId, toId: toId });\n }\n }\n }\n }\n\n //\n // Here we actually create the replacement edges.\n //\n // We could not do this in the loop above as the creation process\n // would add an edge to the edges array we are iterating over.\n //\n // NOTE: a clustered edge can have multiple base edges!\n //\n const newEdges = [];\n\n /**\n * Find a cluster edge which matches the given created edge.\n * @param {vis.Edge} createdEdge\n * @returns {vis.Edge}\n */\n const getNewEdge = function (createdEdge) {\n for (let j = 0; j < newEdges.length; j++) {\n const newEdge = newEdges[j];\n\n // We replace both to and from edges with a single cluster edge\n const matchToDirection =\n createdEdge.fromId === newEdge.fromId &&\n createdEdge.toId === newEdge.toId;\n const matchFromDirection =\n createdEdge.fromId === newEdge.toId &&\n createdEdge.toId === newEdge.fromId;\n\n if (matchToDirection || matchFromDirection) {\n return newEdge;\n }\n }\n\n return null;\n };\n\n for (let j = 0; j < createEdges.length; j++) {\n const createdEdge = createEdges[j];\n const edge = createdEdge.edge;\n let newEdge = getNewEdge(createdEdge);\n\n if (newEdge === null) {\n // Create a clustered edge for this connection\n newEdge = this._createClusteredEdge(\n createdEdge.fromId,\n createdEdge.toId,\n edge,\n clusterEdgeProperties\n );\n\n newEdges.push(newEdge);\n } else {\n newEdge.clusteringEdgeReplacingIds.push(edge.id);\n }\n\n // also reference the new edge in the old edge\n this.body.edges[edge.id].edgeReplacedById = newEdge.id;\n\n // hide the replaced edge\n this._backupEdgeOptions(edge);\n edge.setOptions({ physics: false });\n }\n }\n\n /**\n * This function checks the options that can be supplied to the different cluster functions\n * for certain fields and inserts defaults if needed\n * @param {object} options\n * @returns {*}\n * @private\n */\n _checkOptions(options = {}) {\n if (options.clusterEdgeProperties === undefined) {\n options.clusterEdgeProperties = {};\n }\n if (options.clusterNodeProperties === undefined) {\n options.clusterNodeProperties = {};\n }\n\n return options;\n }\n\n /**\n *\n * @param {object} childNodesObj | object with node objects, id as keys, same as childNodes except it also contains a source node\n * @param {object} childEdgesObj | object with edge objects, id as keys\n * @param {Array} options | object with {clusterNodeProperties, clusterEdgeProperties, processProperties}\n * @param {boolean} refreshData | when true, do not wrap up\n * @private\n */\n _cluster(childNodesObj, childEdgesObj, options, refreshData = true) {\n // Remove nodes which are already clustered\n const tmpNodesToRemove = [];\n for (const nodeId in childNodesObj) {\n if (Object.prototype.hasOwnProperty.call(childNodesObj, nodeId)) {\n if (this.clusteredNodes[nodeId] !== undefined) {\n tmpNodesToRemove.push(nodeId);\n }\n }\n }\n\n for (let n = 0; n < tmpNodesToRemove.length; ++n) {\n delete childNodesObj[tmpNodesToRemove[n]];\n }\n\n // kill condition: no nodes don't bother\n if (Object.keys(childNodesObj).length == 0) {\n return;\n }\n\n // allow clusters of 1 if options allow\n if (\n Object.keys(childNodesObj).length == 1 &&\n options.clusterNodeProperties.allowSingleNodeCluster != true\n ) {\n return;\n }\n\n let clusterNodeProperties = deepExtend({}, options.clusterNodeProperties);\n\n // construct the clusterNodeProperties\n if (options.processProperties !== undefined) {\n // get the childNode options\n const childNodesOptions = [];\n for (const nodeId in childNodesObj) {\n if (Object.prototype.hasOwnProperty.call(childNodesObj, nodeId)) {\n const clonedOptions = NetworkUtil.cloneOptions(childNodesObj[nodeId]);\n childNodesOptions.push(clonedOptions);\n }\n }\n\n // get cluster properties based on childNodes\n const childEdgesOptions = [];\n for (const edgeId in childEdgesObj) {\n if (Object.prototype.hasOwnProperty.call(childEdgesObj, edgeId)) {\n // these cluster edges will be removed on creation of the cluster.\n if (edgeId.substr(0, 12) !== \"clusterEdge:\") {\n const clonedOptions = NetworkUtil.cloneOptions(\n childEdgesObj[edgeId],\n \"edge\"\n );\n childEdgesOptions.push(clonedOptions);\n }\n }\n }\n\n clusterNodeProperties = options.processProperties(\n clusterNodeProperties,\n childNodesOptions,\n childEdgesOptions\n );\n if (!clusterNodeProperties) {\n throw new Error(\n \"The processProperties function does not return properties!\"\n );\n }\n }\n\n // check if we have an unique id;\n if (clusterNodeProperties.id === undefined) {\n clusterNodeProperties.id = \"cluster:\" + randomUUID();\n }\n const clusterId = clusterNodeProperties.id;\n\n if (clusterNodeProperties.label === undefined) {\n clusterNodeProperties.label = \"cluster\";\n }\n\n // give the clusterNode a position if it does not have one.\n let pos = undefined;\n if (clusterNodeProperties.x === undefined) {\n pos = this._getClusterPosition(childNodesObj);\n clusterNodeProperties.x = pos.x;\n }\n if (clusterNodeProperties.y === undefined) {\n if (pos === undefined) {\n pos = this._getClusterPosition(childNodesObj);\n }\n clusterNodeProperties.y = pos.y;\n }\n\n // force the ID to remain the same\n clusterNodeProperties.id = clusterId;\n\n // create the cluster Node\n // Note that allowSingleNodeCluster, if present, is stored in the options as well\n const clusterNode = this.body.functions.createNode(\n clusterNodeProperties,\n Cluster\n );\n clusterNode.containedNodes = childNodesObj;\n clusterNode.containedEdges = childEdgesObj;\n // cache a copy from the cluster edge properties if we have to reconnect others later on\n clusterNode.clusterEdgeProperties = options.clusterEdgeProperties;\n\n // finally put the cluster node into global\n this.body.nodes[clusterNodeProperties.id] = clusterNode;\n\n this._clusterEdges(\n childNodesObj,\n childEdgesObj,\n clusterNodeProperties,\n options.clusterEdgeProperties\n );\n\n // set ID to undefined so no duplicates arise\n clusterNodeProperties.id = undefined;\n\n // wrap up\n if (refreshData === true) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n *\n * @param {Edge} edge\n * @private\n */\n _backupEdgeOptions(edge) {\n if (this.clusteredEdges[edge.id] === undefined) {\n this.clusteredEdges[edge.id] = { physics: edge.options.physics };\n }\n }\n\n /**\n *\n * @param {Edge} edge\n * @private\n */\n _restoreEdge(edge) {\n const originalOptions = this.clusteredEdges[edge.id];\n if (originalOptions !== undefined) {\n edge.setOptions({ physics: originalOptions.physics });\n delete this.clusteredEdges[edge.id];\n }\n }\n\n /**\n * Check if a node is a cluster.\n * @param {Node.id} nodeId\n * @returns {*}\n */\n isCluster(nodeId) {\n if (this.body.nodes[nodeId] !== undefined) {\n return this.body.nodes[nodeId].isCluster === true;\n } else {\n console.error(\"Node does not exist.\");\n return false;\n }\n }\n\n /**\n * get the position of the cluster node based on what's inside\n * @param {object} childNodesObj | object with node objects, id as keys\n * @returns {{x: number, y: number}}\n * @private\n */\n _getClusterPosition(childNodesObj) {\n const childKeys = Object.keys(childNodesObj);\n let minX = childNodesObj[childKeys[0]].x;\n let maxX = childNodesObj[childKeys[0]].x;\n let minY = childNodesObj[childKeys[0]].y;\n let maxY = childNodesObj[childKeys[0]].y;\n let node;\n for (let i = 1; i < childKeys.length; i++) {\n node = childNodesObj[childKeys[i]];\n minX = node.x < minX ? node.x : minX;\n maxX = node.x > maxX ? node.x : maxX;\n minY = node.y < minY ? node.y : minY;\n maxY = node.y > maxY ? node.y : maxY;\n }\n\n return { x: 0.5 * (minX + maxX), y: 0.5 * (minY + maxY) };\n }\n\n /**\n * Open a cluster by calling this function.\n * @param {vis.Edge.id} clusterNodeId | the ID of the cluster node\n * @param {object} options\n * @param {boolean} refreshData | wrap up afterwards if not true\n */\n openCluster(clusterNodeId, options, refreshData = true) {\n // kill conditions\n if (clusterNodeId === undefined) {\n throw new Error(\"No clusterNodeId supplied to openCluster.\");\n }\n\n const clusterNode = this.body.nodes[clusterNodeId];\n\n if (clusterNode === undefined) {\n throw new Error(\n \"The clusterNodeId supplied to openCluster does not exist.\"\n );\n }\n if (\n clusterNode.isCluster !== true ||\n clusterNode.containedNodes === undefined ||\n clusterNode.containedEdges === undefined\n ) {\n throw new Error(\"The node:\" + clusterNodeId + \" is not a valid cluster.\");\n }\n\n // Check if current cluster is clustered itself\n const stack = this.findNode(clusterNodeId);\n const parentIndex = stack.indexOf(clusterNodeId) - 1;\n if (parentIndex >= 0) {\n // Current cluster is clustered; transfer contained nodes and edges to parent\n const parentClusterNodeId = stack[parentIndex];\n const parentClusterNode = this.body.nodes[parentClusterNodeId];\n\n // clustering.clusteredNodes and clustering.clusteredEdges remain unchanged\n parentClusterNode._openChildCluster(clusterNodeId);\n\n // All components of child cluster node have been transferred. It can die now.\n delete this.body.nodes[clusterNodeId];\n if (refreshData === true) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n\n return;\n }\n\n // main body\n const containedNodes = clusterNode.containedNodes;\n const containedEdges = clusterNode.containedEdges;\n\n // allow the user to position the nodes after release.\n if (\n options !== undefined &&\n options.releaseFunction !== undefined &&\n typeof options.releaseFunction === \"function\"\n ) {\n const positions = {};\n const clusterPosition = { x: clusterNode.x, y: clusterNode.y };\n for (const nodeId in containedNodes) {\n if (Object.prototype.hasOwnProperty.call(containedNodes, nodeId)) {\n const containedNode = this.body.nodes[nodeId];\n positions[nodeId] = { x: containedNode.x, y: containedNode.y };\n }\n }\n const newPositions = options.releaseFunction(clusterPosition, positions);\n\n for (const nodeId in containedNodes) {\n if (Object.prototype.hasOwnProperty.call(containedNodes, nodeId)) {\n const containedNode = this.body.nodes[nodeId];\n if (newPositions[nodeId] !== undefined) {\n containedNode.x =\n newPositions[nodeId].x === undefined\n ? clusterNode.x\n : newPositions[nodeId].x;\n containedNode.y =\n newPositions[nodeId].y === undefined\n ? clusterNode.y\n : newPositions[nodeId].y;\n }\n }\n }\n } else {\n // copy the position from the cluster\n forEach(containedNodes, function (containedNode) {\n // inherit position\n if (containedNode.options.fixed.x === false) {\n containedNode.x = clusterNode.x;\n }\n if (containedNode.options.fixed.y === false) {\n containedNode.y = clusterNode.y;\n }\n });\n }\n\n // release nodes\n for (const nodeId in containedNodes) {\n if (Object.prototype.hasOwnProperty.call(containedNodes, nodeId)) {\n const containedNode = this.body.nodes[nodeId];\n\n // inherit speed\n containedNode.vx = clusterNode.vx;\n containedNode.vy = clusterNode.vy;\n\n containedNode.setOptions({ physics: true });\n\n delete this.clusteredNodes[nodeId];\n }\n }\n\n // copy the clusterNode edges because we cannot iterate over an object that we add or remove from.\n const edgesToBeDeleted = [];\n for (let i = 0; i < clusterNode.edges.length; i++) {\n edgesToBeDeleted.push(clusterNode.edges[i]);\n }\n\n // actually handling the deleting.\n for (let i = 0; i < edgesToBeDeleted.length; i++) {\n const edge = edgesToBeDeleted[i];\n const otherNodeId = this._getConnectedId(edge, clusterNodeId);\n const otherNode = this.clusteredNodes[otherNodeId];\n\n for (let j = 0; j < edge.clusteringEdgeReplacingIds.length; j++) {\n const transferId = edge.clusteringEdgeReplacingIds[j];\n const transferEdge = this.body.edges[transferId];\n if (transferEdge === undefined) continue;\n\n // if the other node is in another cluster, we transfer ownership of this edge to the other cluster\n if (otherNode !== undefined) {\n // transfer ownership:\n const otherCluster = this.body.nodes[otherNode.clusterId];\n otherCluster.containedEdges[transferEdge.id] = transferEdge;\n\n // delete local reference\n delete containedEdges[transferEdge.id];\n\n // get to and from\n let fromId = transferEdge.fromId;\n let toId = transferEdge.toId;\n if (transferEdge.toId == otherNodeId) {\n toId = otherNode.clusterId;\n } else {\n fromId = otherNode.clusterId;\n }\n\n // create new cluster edge from the otherCluster\n this._createClusteredEdge(\n fromId,\n toId,\n transferEdge,\n otherCluster.clusterEdgeProperties,\n { hidden: false, physics: true }\n );\n } else {\n this._restoreEdge(transferEdge);\n }\n }\n\n edge.remove();\n }\n\n // handle the releasing of the edges\n for (const edgeId in containedEdges) {\n if (Object.prototype.hasOwnProperty.call(containedEdges, edgeId)) {\n this._restoreEdge(containedEdges[edgeId]);\n }\n }\n\n // remove clusterNode\n delete this.body.nodes[clusterNodeId];\n\n if (refreshData === true) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n *\n * @param {Cluster.id} clusterId\n * @returns {Array.}\n */\n getNodesInCluster(clusterId) {\n const nodesArray = [];\n if (this.isCluster(clusterId) === true) {\n const containedNodes = this.body.nodes[clusterId].containedNodes;\n for (const nodeId in containedNodes) {\n if (Object.prototype.hasOwnProperty.call(containedNodes, nodeId)) {\n nodesArray.push(this.body.nodes[nodeId].id);\n }\n }\n }\n\n return nodesArray;\n }\n\n /**\n * Get the stack clusterId's that a certain node resides in. cluster A -> cluster B -> cluster C -> node\n *\n * If a node can't be found in the chain, return an empty array.\n * @param {string|number} nodeId\n * @returns {Array}\n */\n findNode(nodeId) {\n const stack = [];\n const max = 100;\n let counter = 0;\n let node;\n\n while (this.clusteredNodes[nodeId] !== undefined && counter < max) {\n node = this.body.nodes[nodeId];\n if (node === undefined) return [];\n stack.push(node.id);\n\n nodeId = this.clusteredNodes[nodeId].clusterId;\n counter++;\n }\n\n node = this.body.nodes[nodeId];\n if (node === undefined) return [];\n stack.push(node.id);\n\n stack.reverse();\n return stack;\n }\n\n /**\n * Using a clustered nodeId, update with the new options\n * @param {Node.id} clusteredNodeId\n * @param {object} newOptions\n */\n updateClusteredNode(clusteredNodeId, newOptions) {\n if (clusteredNodeId === undefined) {\n throw new Error(\"No clusteredNodeId supplied to updateClusteredNode.\");\n }\n if (newOptions === undefined) {\n throw new Error(\"No newOptions supplied to updateClusteredNode.\");\n }\n if (this.body.nodes[clusteredNodeId] === undefined) {\n throw new Error(\n \"The clusteredNodeId supplied to updateClusteredNode does not exist.\"\n );\n }\n\n this.body.nodes[clusteredNodeId].setOptions(newOptions);\n this.body.emitter.emit(\"_dataChanged\");\n }\n\n /**\n * Using a base edgeId, update all related clustered edges with the new options\n * @param {vis.Edge.id} startEdgeId\n * @param {object} newOptions\n */\n updateEdge(startEdgeId, newOptions) {\n if (startEdgeId === undefined) {\n throw new Error(\"No startEdgeId supplied to updateEdge.\");\n }\n if (newOptions === undefined) {\n throw new Error(\"No newOptions supplied to updateEdge.\");\n }\n if (this.body.edges[startEdgeId] === undefined) {\n throw new Error(\"The startEdgeId supplied to updateEdge does not exist.\");\n }\n\n const allEdgeIds = this.getClusteredEdges(startEdgeId);\n for (let i = 0; i < allEdgeIds.length; i++) {\n const edge = this.body.edges[allEdgeIds[i]];\n edge.setOptions(newOptions);\n }\n this.body.emitter.emit(\"_dataChanged\");\n }\n\n /**\n * Get a stack of clusterEdgeId's (+base edgeid) that a base edge is the same as. cluster edge C -> cluster edge B -> cluster edge A -> base edge(edgeId)\n * @param {vis.Edge.id} edgeId\n * @returns {Array.}\n */\n getClusteredEdges(edgeId) {\n const stack = [];\n const max = 100;\n let counter = 0;\n\n while (\n edgeId !== undefined &&\n this.body.edges[edgeId] !== undefined &&\n counter < max\n ) {\n stack.push(this.body.edges[edgeId].id);\n edgeId = this.body.edges[edgeId].edgeReplacedById;\n counter++;\n }\n stack.reverse();\n return stack;\n }\n\n /**\n * Get the base edge id of clusterEdgeId. cluster edge (clusteredEdgeId) -> cluster edge B -> cluster edge C -> base edge\n * @param {vis.Edge.id} clusteredEdgeId\n * @returns {vis.Edge.id} baseEdgeId\n *\n * TODO: deprecate in 5.0.0. Method getBaseEdges() is the correct one to use.\n */\n getBaseEdge(clusteredEdgeId) {\n // Just kludge this by returning the first base edge id found\n return this.getBaseEdges(clusteredEdgeId)[0];\n }\n\n /**\n * Get all regular edges for this clustered edge id.\n * @param {vis.Edge.id} clusteredEdgeId\n * @returns {Array.} all baseEdgeId's under this clustered edge\n */\n getBaseEdges(clusteredEdgeId) {\n const IdsToHandle = [clusteredEdgeId];\n const doneIds = [];\n const foundIds = [];\n const max = 100;\n let counter = 0;\n\n while (IdsToHandle.length > 0 && counter < max) {\n const nextId = IdsToHandle.pop();\n if (nextId === undefined) continue; // Paranoia here and onwards\n const nextEdge = this.body.edges[nextId];\n if (nextEdge === undefined) continue;\n counter++;\n\n const replacingIds = nextEdge.clusteringEdgeReplacingIds;\n if (replacingIds === undefined) {\n // nextId is a base id\n foundIds.push(nextId);\n } else {\n // Another cluster edge, unravel this one as well\n for (let i = 0; i < replacingIds.length; ++i) {\n const replacingId = replacingIds[i];\n\n // Don't add if already handled\n // TODO: never triggers; find a test-case which does\n if (\n IdsToHandle.indexOf(replacingIds) !== -1 ||\n doneIds.indexOf(replacingIds) !== -1\n ) {\n continue;\n }\n\n IdsToHandle.push(replacingId);\n }\n }\n\n doneIds.push(nextId);\n }\n\n return foundIds;\n }\n\n /**\n * Get the Id the node is connected to\n * @param {vis.Edge} edge\n * @param {Node.id} nodeId\n * @returns {*}\n * @private\n */\n _getConnectedId(edge, nodeId) {\n if (edge.toId != nodeId) {\n return edge.toId;\n } else if (edge.fromId != nodeId) {\n return edge.fromId;\n } else {\n return edge.fromId;\n }\n }\n\n /**\n * We determine how many connections denote an important hub.\n * We take the mean + 2*std as the important hub size. (Assuming a normal distribution of data, ~2.2%)\n * @returns {number}\n * @private\n */\n _getHubSize() {\n let average = 0;\n let averageSquared = 0;\n let hubCounter = 0;\n let largestHub = 0;\n\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const node = this.body.nodes[this.body.nodeIndices[i]];\n if (node.edges.length > largestHub) {\n largestHub = node.edges.length;\n }\n average += node.edges.length;\n averageSquared += Math.pow(node.edges.length, 2);\n hubCounter += 1;\n }\n average = average / hubCounter;\n averageSquared = averageSquared / hubCounter;\n\n const variance = averageSquared - Math.pow(average, 2);\n const standardDeviation = Math.sqrt(variance);\n\n let hubThreshold = Math.floor(average + 2 * standardDeviation);\n\n // always have at least one to cluster\n if (hubThreshold > largestHub) {\n hubThreshold = largestHub;\n }\n\n return hubThreshold;\n }\n\n /**\n * Create an edge for the cluster representation.\n * @param {Node.id} fromId\n * @param {Node.id} toId\n * @param {vis.Edge} baseEdge\n * @param {object} clusterEdgeProperties\n * @param {object} extraOptions\n * @returns {Edge} newly created clustered edge\n * @private\n */\n _createClusteredEdge(\n fromId,\n toId,\n baseEdge,\n clusterEdgeProperties,\n extraOptions\n ) {\n // copy the options of the edge we will replace\n const clonedOptions = NetworkUtil.cloneOptions(baseEdge, \"edge\");\n // make sure the properties of clusterEdges are superimposed on it\n deepExtend(clonedOptions, clusterEdgeProperties);\n\n // set up the edge\n clonedOptions.from = fromId;\n clonedOptions.to = toId;\n clonedOptions.id = \"clusterEdge:\" + randomUUID();\n\n // apply the edge specific options to it if specified\n if (extraOptions !== undefined) {\n deepExtend(clonedOptions, extraOptions);\n }\n\n const newEdge = this.body.functions.createEdge(clonedOptions);\n newEdge.clusteringEdgeReplacingIds = [baseEdge.id];\n newEdge.connect();\n\n // Register the new edge\n this.body.edges[newEdge.id] = newEdge;\n\n return newEdge;\n }\n\n /**\n * Add the passed child nodes and edges to the given cluster node.\n * @param {object | Node} childNodes hash of nodes or single node to add in cluster\n * @param {object | Edge} childEdges hash of edges or single edge to take into account when clustering\n * @param {Node} clusterNode cluster node to add nodes and edges to\n * @param {object} [clusterEdgeProperties]\n * @private\n */\n _clusterEdges(childNodes, childEdges, clusterNode, clusterEdgeProperties) {\n if (childEdges instanceof Edge) {\n const edge = childEdges;\n const obj = {};\n obj[edge.id] = edge;\n childEdges = obj;\n }\n\n if (childNodes instanceof Node) {\n const node = childNodes;\n const obj = {};\n obj[node.id] = node;\n childNodes = obj;\n }\n\n if (clusterNode === undefined || clusterNode === null) {\n throw new Error(\"_clusterEdges: parameter clusterNode required\");\n }\n\n if (clusterEdgeProperties === undefined) {\n // Take the required properties from the cluster node\n clusterEdgeProperties = clusterNode.clusterEdgeProperties;\n }\n\n // create the new edges that will connect to the cluster.\n // All self-referencing edges will be added to childEdges here.\n this._createClusterEdges(\n childNodes,\n childEdges,\n clusterNode,\n clusterEdgeProperties\n );\n\n // disable the childEdges\n for (const edgeId in childEdges) {\n if (Object.prototype.hasOwnProperty.call(childEdges, edgeId)) {\n if (this.body.edges[edgeId] !== undefined) {\n const edge = this.body.edges[edgeId];\n // cache the options before changing\n this._backupEdgeOptions(edge);\n // disable physics and hide the edge\n edge.setOptions({ physics: false });\n }\n }\n }\n\n // disable the childNodes\n for (const nodeId in childNodes) {\n if (Object.prototype.hasOwnProperty.call(childNodes, nodeId)) {\n this.clusteredNodes[nodeId] = {\n clusterId: clusterNode.id,\n node: this.body.nodes[nodeId],\n };\n this.body.nodes[nodeId].setOptions({ physics: false });\n }\n }\n }\n\n /**\n * Determine in which cluster given nodeId resides.\n *\n * If not in cluster, return undefined.\n *\n * NOTE: If you know a cleaner way to do this, please enlighten me (wimrijnders).\n * @param {Node.id} nodeId\n * @returns {Node|undefined} Node instance for cluster, if present\n * @private\n */\n _getClusterNodeForNode(nodeId) {\n if (nodeId === undefined) return undefined;\n const clusteredNode = this.clusteredNodes[nodeId];\n\n // NOTE: If no cluster info found, it should actually be an error\n if (clusteredNode === undefined) return undefined;\n const clusterId = clusteredNode.clusterId;\n if (clusterId === undefined) return undefined;\n\n return this.body.nodes[clusterId];\n }\n\n /**\n * Internal helper function for conditionally removing items in array\n *\n * Done like this because Array.filter() is not fully supported by all IE's.\n * @param {Array} arr\n * @param {Function} callback\n * @returns {Array}\n * @private\n */\n _filter(arr, callback) {\n const ret = [];\n\n forEach(arr, (item) => {\n if (callback(item)) {\n ret.push(item);\n }\n });\n\n return ret;\n }\n\n /**\n * Scan all edges for changes in clustering and adjust this if necessary.\n *\n * Call this (internally) after there has been a change in node or edge data.\n *\n * Pre: States of this.body.nodes and this.body.edges consistent\n * Pre: this.clusteredNodes and this.clusteredEdge consistent with containedNodes and containedEdges\n * of cluster nodes.\n */\n _updateState() {\n let nodeId;\n const deletedNodeIds = [];\n const deletedEdgeIds = {};\n\n /**\n * Utility function to iterate over clustering nodes only\n * @param {Function} callback function to call for each cluster node\n */\n const eachClusterNode = (callback) => {\n forEach(this.body.nodes, (node) => {\n if (node.isCluster === true) {\n callback(node);\n }\n });\n };\n\n //\n // Remove deleted regular nodes from clustering\n //\n\n // Determine the deleted nodes\n for (nodeId in this.clusteredNodes) {\n if (!Object.prototype.hasOwnProperty.call(this.clusteredNodes, nodeId))\n continue;\n const node = this.body.nodes[nodeId];\n\n if (node === undefined) {\n deletedNodeIds.push(nodeId);\n }\n }\n\n // Remove nodes from cluster nodes\n eachClusterNode(function (clusterNode) {\n for (let n = 0; n < deletedNodeIds.length; n++) {\n delete clusterNode.containedNodes[deletedNodeIds[n]];\n }\n });\n\n // Remove nodes from cluster list\n for (let n = 0; n < deletedNodeIds.length; n++) {\n delete this.clusteredNodes[deletedNodeIds[n]];\n }\n\n //\n // Remove deleted edges from clustering\n //\n\n // Add the deleted clustered edges to the list\n forEach(this.clusteredEdges, (edgeId) => {\n const edge = this.body.edges[edgeId];\n if (edge === undefined || !edge.endPointsValid()) {\n deletedEdgeIds[edgeId] = edgeId;\n }\n });\n\n // Cluster nodes can also contain edges which are not clustered,\n // i.e. nodes 1-2 within cluster with an edge in between.\n // So the cluster nodes also need to be scanned for invalid edges\n eachClusterNode(function (clusterNode) {\n forEach(clusterNode.containedEdges, (edge, edgeId) => {\n if (!edge.endPointsValid() && !deletedEdgeIds[edgeId]) {\n deletedEdgeIds[edgeId] = edgeId;\n }\n });\n });\n\n // Also scan for cluster edges which need to be removed in the active list.\n // Regular edges have been removed beforehand, so this only picks up the cluster edges.\n forEach(this.body.edges, (edge, edgeId) => {\n // Explicitly scan the contained edges for validity\n let isValid = true;\n const replacedIds = edge.clusteringEdgeReplacingIds;\n if (replacedIds !== undefined) {\n let numValid = 0;\n\n forEach(replacedIds, (containedEdgeId) => {\n const containedEdge = this.body.edges[containedEdgeId];\n\n if (containedEdge !== undefined && containedEdge.endPointsValid()) {\n numValid += 1;\n }\n });\n\n isValid = numValid > 0;\n }\n\n if (!edge.endPointsValid() || !isValid) {\n deletedEdgeIds[edgeId] = edgeId;\n }\n });\n\n // Remove edges from cluster nodes\n eachClusterNode((clusterNode) => {\n forEach(deletedEdgeIds, (deletedEdgeId) => {\n delete clusterNode.containedEdges[deletedEdgeId];\n\n forEach(clusterNode.edges, (edge, m) => {\n if (edge.id === deletedEdgeId) {\n clusterNode.edges[m] = null; // Don't want to directly delete here, because in the loop\n return;\n }\n\n edge.clusteringEdgeReplacingIds = this._filter(\n edge.clusteringEdgeReplacingIds,\n function (id) {\n return !deletedEdgeIds[id];\n }\n );\n });\n\n // Clean up the nulls\n clusterNode.edges = this._filter(clusterNode.edges, function (item) {\n return item !== null;\n });\n });\n });\n\n // Remove from cluster list\n forEach(deletedEdgeIds, (edgeId) => {\n delete this.clusteredEdges[edgeId];\n });\n\n // Remove cluster edges from active list (this.body.edges).\n // deletedEdgeIds still contains id of regular edges, but these should all\n // be gone when you reach here.\n forEach(deletedEdgeIds, (edgeId) => {\n delete this.body.edges[edgeId];\n });\n\n //\n // Check changed cluster state of edges\n //\n\n // Iterating over keys here, because edges may be removed in the loop\n const ids = Object.keys(this.body.edges);\n forEach(ids, (edgeId) => {\n const edge = this.body.edges[edgeId];\n\n const shouldBeClustered =\n this._isClusteredNode(edge.fromId) || this._isClusteredNode(edge.toId);\n if (shouldBeClustered === this._isClusteredEdge(edge.id)) {\n return; // all is well\n }\n\n if (shouldBeClustered) {\n // add edge to clustering\n const clusterFrom = this._getClusterNodeForNode(edge.fromId);\n if (clusterFrom !== undefined) {\n this._clusterEdges(this.body.nodes[edge.fromId], edge, clusterFrom);\n }\n\n const clusterTo = this._getClusterNodeForNode(edge.toId);\n if (clusterTo !== undefined) {\n this._clusterEdges(this.body.nodes[edge.toId], edge, clusterTo);\n }\n\n // TODO: check that it works for both edges clustered\n // (This might be paranoia)\n } else {\n delete this._clusterEdges[edgeId];\n this._restoreEdge(edge);\n // This should not be happening, the state should\n // be properly updated at this point.\n //\n // If it *is* reached during normal operation, then we have to implement\n // undo clustering for this edge here.\n // throw new Error('remove edge from clustering not implemented!')\n }\n });\n\n // Clusters may be nested to any level. Keep on opening until nothing to open\n let changed = false;\n let continueLoop = true;\n while (continueLoop) {\n const clustersToOpen = [];\n\n // Determine the id's of clusters that need opening\n eachClusterNode(function (clusterNode) {\n const numNodes = Object.keys(clusterNode.containedNodes).length;\n const allowSingle = clusterNode.options.allowSingleNodeCluster === true;\n if ((allowSingle && numNodes < 1) || (!allowSingle && numNodes < 2)) {\n clustersToOpen.push(clusterNode.id);\n }\n });\n\n // Open them\n for (let n = 0; n < clustersToOpen.length; ++n) {\n this.openCluster(\n clustersToOpen[n],\n {},\n false /* Don't refresh, we're in an refresh/update already */\n );\n }\n\n continueLoop = clustersToOpen.length > 0;\n changed = changed || continueLoop;\n }\n\n if (changed) {\n this._updateState(); // Redo this method (recursion possible! should be safe)\n }\n }\n\n /**\n * Determine if node with given id is part of a cluster.\n * @param {Node.id} nodeId\n * @returns {boolean} true if part of a cluster.\n */\n _isClusteredNode(nodeId) {\n return this.clusteredNodes[nodeId] !== undefined;\n }\n\n /**\n * Determine if edge with given id is not visible due to clustering.\n *\n * An edge is considered clustered if:\n * - it is directly replaced by a clustering edge\n * - any of its connecting nodes is in a cluster\n * @param {vis.Edge.id} edgeId\n * @returns {boolean} true if part of a cluster.\n */\n _isClusteredEdge(edgeId) {\n return this.clusteredEdges[edgeId] !== undefined;\n }\n}\n\nexport default ClusterEngine;\n","import { selectiveDeepExtend } from \"vis-util/esnext\";\n\n/**\n * The canvas renderer\n */\nclass CanvasRenderer {\n /**\n * @param {object} body\n * @param {Canvas} canvas\n */\n constructor(body, canvas) {\n this.body = body;\n this.canvas = canvas;\n\n this.redrawRequested = false;\n this.requestAnimationFrameRequestId = undefined;\n this.renderingActive = false;\n this.renderRequests = 0;\n this.allowRedraw = true;\n\n this.dragging = false;\n this.zooming = false;\n this.options = {};\n this.defaultOptions = {\n hideEdgesOnDrag: false,\n hideEdgesOnZoom: false,\n hideNodesOnDrag: false,\n };\n Object.assign(this.options, this.defaultOptions);\n\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n this.body.emitter.on(\"dragStart\", () => {\n this.dragging = true;\n });\n this.body.emitter.on(\"dragEnd\", () => {\n this.dragging = false;\n });\n this.body.emitter.on(\"zoom\", () => {\n this.zooming = true;\n window.clearTimeout(this.zoomTimeoutId);\n this.zoomTimeoutId = window.setTimeout(() => {\n this.zooming = false;\n this._requestRedraw.bind(this)();\n }, 250);\n });\n this.body.emitter.on(\"_resizeNodes\", () => {\n this._resizeNodes();\n });\n this.body.emitter.on(\"_redraw\", () => {\n if (this.renderingActive === false) {\n this._redraw();\n }\n });\n this.body.emitter.on(\"_blockRedraw\", () => {\n this.allowRedraw = false;\n });\n this.body.emitter.on(\"_allowRedraw\", () => {\n this.allowRedraw = true;\n this.redrawRequested = false;\n });\n this.body.emitter.on(\"_requestRedraw\", this._requestRedraw.bind(this));\n this.body.emitter.on(\"_startRendering\", () => {\n this.renderRequests += 1;\n this.renderingActive = true;\n this._startRendering();\n });\n this.body.emitter.on(\"_stopRendering\", () => {\n this.renderRequests -= 1;\n this.renderingActive = this.renderRequests > 0;\n this.requestAnimationFrameRequestId = undefined;\n });\n this.body.emitter.on(\"destroy\", () => {\n this.renderRequests = 0;\n this.allowRedraw = false;\n this.renderingActive = false;\n window.cancelAnimationFrame(this.requestAnimationFrameRequestId);\n this.body.emitter.off();\n });\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n const fields = [\"hideEdgesOnDrag\", \"hideEdgesOnZoom\", \"hideNodesOnDrag\"];\n selectiveDeepExtend(fields, this.options, options);\n }\n }\n\n /**\n *\n * @private\n */\n _startRendering() {\n if (this.renderingActive === true) {\n if (this.requestAnimationFrameRequestId === undefined) {\n this.requestAnimationFrameRequestId = window.requestAnimationFrame(\n this._renderStep.bind(this),\n this.simulationInterval\n );\n }\n }\n }\n\n /**\n *\n * @private\n */\n _renderStep() {\n if (this.renderingActive === true) {\n // reset the requestAnimationFrameRequestId so a new scheduled animation step can be set\n this.requestAnimationFrameRequestId = undefined;\n\n // this schedules a new simulation step\n this._startRendering();\n\n this._redraw();\n }\n }\n\n /**\n * Redraw the network with the current data\n * chart will be resized too.\n */\n redraw() {\n this.body.emitter.emit(\"setSize\");\n this._redraw();\n }\n\n /**\n * Redraw the network with the current data\n * @private\n */\n _requestRedraw() {\n if (\n this.redrawRequested !== true &&\n this.renderingActive === false &&\n this.allowRedraw === true\n ) {\n this.redrawRequested = true;\n window.requestAnimationFrame(() => {\n this._redraw(false);\n });\n }\n }\n\n /**\n * Redraw the network with the current data\n * @param {boolean} [hidden] | Used to get the first estimate of the node sizes.\n * Only the nodes are drawn after which they are quickly drawn over.\n * @private\n */\n _redraw(hidden = false) {\n if (this.allowRedraw === true) {\n this.body.emitter.emit(\"initRedraw\");\n\n this.redrawRequested = false;\n\n const drawLater = {\n drawExternalLabels: null,\n };\n\n // when the container div was hidden, this fixes it back up!\n if (\n this.canvas.frame.canvas.width === 0 ||\n this.canvas.frame.canvas.height === 0\n ) {\n this.canvas.setSize();\n }\n\n this.canvas.setTransform();\n\n const ctx = this.canvas.getContext();\n\n // clear the canvas\n const w = this.canvas.frame.canvas.clientWidth;\n const h = this.canvas.frame.canvas.clientHeight;\n ctx.clearRect(0, 0, w, h);\n\n // if the div is hidden, we stop the redraw here for performance.\n if (this.canvas.frame.clientWidth === 0) {\n return;\n }\n\n // set scaling and translation\n ctx.save();\n ctx.translate(this.body.view.translation.x, this.body.view.translation.y);\n ctx.scale(this.body.view.scale, this.body.view.scale);\n\n ctx.beginPath();\n this.body.emitter.emit(\"beforeDrawing\", ctx);\n ctx.closePath();\n\n if (hidden === false) {\n if (\n (this.dragging === false ||\n (this.dragging === true &&\n this.options.hideEdgesOnDrag === false)) &&\n (this.zooming === false ||\n (this.zooming === true && this.options.hideEdgesOnZoom === false))\n ) {\n this._drawEdges(ctx);\n }\n }\n\n if (\n this.dragging === false ||\n (this.dragging === true && this.options.hideNodesOnDrag === false)\n ) {\n const { drawExternalLabels } = this._drawNodes(ctx, hidden);\n drawLater.drawExternalLabels = drawExternalLabels;\n }\n\n // draw the arrows last so they will be at the top\n if (hidden === false) {\n if (\n (this.dragging === false ||\n (this.dragging === true &&\n this.options.hideEdgesOnDrag === false)) &&\n (this.zooming === false ||\n (this.zooming === true && this.options.hideEdgesOnZoom === false))\n ) {\n this._drawArrows(ctx);\n }\n }\n\n if (drawLater.drawExternalLabels != null) {\n drawLater.drawExternalLabels();\n }\n\n if (hidden === false) {\n this._drawSelectionBox(ctx);\n }\n\n ctx.beginPath();\n this.body.emitter.emit(\"afterDrawing\", ctx);\n ctx.closePath();\n\n // restore original scaling and translation\n ctx.restore();\n if (hidden === true) {\n ctx.clearRect(0, 0, w, h);\n }\n }\n }\n\n /**\n * Redraw all nodes\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [alwaysShow]\n * @private\n */\n _resizeNodes() {\n this.canvas.setTransform();\n const ctx = this.canvas.getContext();\n ctx.save();\n ctx.translate(this.body.view.translation.x, this.body.view.translation.y);\n ctx.scale(this.body.view.scale, this.body.view.scale);\n\n const nodes = this.body.nodes;\n let node;\n\n // resize all nodes\n for (const nodeId in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, nodeId)) {\n node = nodes[nodeId];\n node.resize(ctx);\n node.updateBoundingBox(ctx, node.selected);\n }\n }\n\n // restore original scaling and translation\n ctx.restore();\n }\n\n /**\n * Redraw all nodes\n * @param {CanvasRenderingContext2D} ctx 2D context of a HTML canvas\n * @param {boolean} [alwaysShow]\n * @private\n * @returns {object} Callbacks to draw later on higher layers.\n */\n _drawNodes(ctx, alwaysShow = false) {\n const nodes = this.body.nodes;\n const nodeIndices = this.body.nodeIndices;\n let node;\n const selected = [];\n const hovered = [];\n const margin = 20;\n const topLeft = this.canvas.DOMtoCanvas({ x: -margin, y: -margin });\n const bottomRight = this.canvas.DOMtoCanvas({\n x: this.canvas.frame.canvas.clientWidth + margin,\n y: this.canvas.frame.canvas.clientHeight + margin,\n });\n const viewableArea = {\n top: topLeft.y,\n left: topLeft.x,\n bottom: bottomRight.y,\n right: bottomRight.x,\n };\n\n const drawExternalLabels = [];\n\n // draw unselected nodes;\n for (let i = 0; i < nodeIndices.length; i++) {\n node = nodes[nodeIndices[i]];\n // set selected and hovered nodes aside\n if (node.hover) {\n hovered.push(nodeIndices[i]);\n } else if (node.isSelected()) {\n selected.push(nodeIndices[i]);\n } else {\n if (alwaysShow === true) {\n const drawLater = node.draw(ctx);\n if (drawLater.drawExternalLabel != null) {\n drawExternalLabels.push(drawLater.drawExternalLabel);\n }\n } else if (node.isBoundingBoxOverlappingWith(viewableArea) === true) {\n const drawLater = node.draw(ctx);\n if (drawLater.drawExternalLabel != null) {\n drawExternalLabels.push(drawLater.drawExternalLabel);\n }\n } else {\n node.updateBoundingBox(ctx, node.selected);\n }\n }\n }\n\n let i;\n const selectedLength = selected.length;\n const hoveredLength = hovered.length;\n\n // draw the selected nodes on top\n for (i = 0; i < selectedLength; i++) {\n node = nodes[selected[i]];\n const drawLater = node.draw(ctx);\n if (drawLater.drawExternalLabel != null) {\n drawExternalLabels.push(drawLater.drawExternalLabel);\n }\n }\n\n // draw hovered nodes above everything else: fixes https://github.com/visjs/vis-network/issues/226\n for (i = 0; i < hoveredLength; i++) {\n node = nodes[hovered[i]];\n const drawLater = node.draw(ctx);\n if (drawLater.drawExternalLabel != null) {\n drawExternalLabels.push(drawLater.drawExternalLabel);\n }\n }\n\n return {\n drawExternalLabels: () => {\n for (const draw of drawExternalLabels) {\n draw();\n }\n },\n };\n }\n\n /**\n * Redraw all edges\n * @param {CanvasRenderingContext2D} ctx 2D context of a HTML canvas\n * @private\n */\n _drawEdges(ctx) {\n const edges = this.body.edges;\n const edgeIndices = this.body.edgeIndices;\n\n for (let i = 0; i < edgeIndices.length; i++) {\n const edge = edges[edgeIndices[i]];\n if (edge.connected === true) {\n edge.draw(ctx);\n }\n }\n }\n\n /**\n * Redraw all arrows\n * @param {CanvasRenderingContext2D} ctx 2D context of a HTML canvas\n * @private\n */\n _drawArrows(ctx) {\n const edges = this.body.edges;\n const edgeIndices = this.body.edgeIndices;\n\n for (let i = 0; i < edgeIndices.length; i++) {\n const edge = edges[edgeIndices[i]];\n if (edge.connected === true) {\n edge.drawArrows(ctx);\n }\n }\n }\n\n /**\n * Redraw selection box\n * @param {CanvasRenderingContext2D} ctx 2D context of a HTML canvas\n * @private\n */\n _drawSelectionBox(ctx) {\n if (this.body.selectionBox.show) {\n ctx.beginPath();\n const width =\n this.body.selectionBox.position.end.x -\n this.body.selectionBox.position.start.x;\n const height =\n this.body.selectionBox.position.end.y -\n this.body.selectionBox.position.start.y;\n ctx.rect(\n this.body.selectionBox.position.start.x,\n this.body.selectionBox.position.start.y,\n width,\n height\n );\n ctx.fillStyle = \"rgba(151, 194, 252, 0.2)\";\n ctx.fillRect(\n this.body.selectionBox.position.start.x,\n this.body.selectionBox.position.start.y,\n width,\n height\n );\n ctx.strokeStyle = \"rgba(151, 194, 252, 1)\";\n ctx.stroke();\n } else {\n ctx.closePath();\n }\n }\n}\n\nexport default CanvasRenderer;\n","'use strict';\nrequire('../modules/web.timers');\nvar path = require('../internals/path');\n\nmodule.exports = path.setInterval;\n","/**\n * Register a touch event, taking place before a gesture\n * @param {Hammer} hammer A hammer instance\n * @param {Function} callback Callback, called as callback(event)\n */\nexport function onTouch(hammer, callback) {\n callback.inputHandler = function (event) {\n if (event.isFirst) {\n callback(event);\n }\n };\n\n hammer.on(\"hammer.input\", callback.inputHandler);\n}\n\n/**\n * Register a release event, taking place after a gesture\n * @param {Hammer} hammer A hammer instance\n * @param {Function} callback Callback, called as callback(event)\n * @returns {*}\n */\nexport function onRelease(hammer, callback) {\n callback.inputHandler = function (event) {\n if (event.isFinal) {\n callback(event);\n }\n };\n\n return hammer.on(\"hammer.input\", callback.inputHandler);\n}\n\n/**\n * Unregister a touch event, taking place before a gesture\n * @param {Hammer} hammer A hammer instance\n * @param {Function} callback Callback, called as callback(event)\n */\nexport function offTouch(hammer, callback) {\n hammer.off(\"hammer.input\", callback.inputHandler);\n}\n\n/**\n * Unregister a release event, taking place before a gesture\n * @param {Hammer} hammer A hammer instance\n * @param {Function} callback Callback, called as callback(event)\n */\nexport const offRelease = offTouch;\n\n/**\n * Hack the PinchRecognizer such that it doesn't prevent default behavior\n * for vertical panning.\n *\n * Yeah ... this is quite a hack ... see https://github.com/hammerjs/hammer.js/issues/932\n * @param {Hammer.Pinch} pinchRecognizer\n * @returns {Hammer.Pinch} returns the pinchRecognizer\n */\nexport function disablePreventDefaultVertically(pinchRecognizer) {\n const TOUCH_ACTION_PAN_Y = \"pan-y\";\n\n pinchRecognizer.getTouchAction = function () {\n // default method returns [TOUCH_ACTION_NONE]\n return [TOUCH_ACTION_PAN_Y];\n };\n\n return pinchRecognizer;\n}\n","import { onRelease, onTouch } from \"../../hammerUtil\";\n\nimport { Hammer, selectiveDeepExtend } from \"vis-util/esnext\";\n\n/**\n * Create the main frame for the Network.\n * This function is executed once when a Network object is created. The frame\n * contains a canvas, and this canvas contains all objects like the axis and\n * nodes.\n */\nclass Canvas {\n /**\n * @param {object} body\n */\n constructor(body) {\n this.body = body;\n this.pixelRatio = 1;\n this.cameraState = {};\n this.initialized = false;\n this.canvasViewCenter = {};\n this._cleanupCallbacks = [];\n\n this.options = {};\n this.defaultOptions = {\n autoResize: true,\n height: \"100%\",\n width: \"100%\",\n };\n Object.assign(this.options, this.defaultOptions);\n\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n // bind the events\n this.body.emitter.once(\"resize\", (obj) => {\n if (obj.width !== 0) {\n this.body.view.translation.x = obj.width * 0.5;\n }\n if (obj.height !== 0) {\n this.body.view.translation.y = obj.height * 0.5;\n }\n });\n this.body.emitter.on(\"setSize\", this.setSize.bind(this));\n this.body.emitter.on(\"destroy\", () => {\n this.hammerFrame.destroy();\n this.hammer.destroy();\n this._cleanUp();\n });\n }\n\n /**\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n const fields = [\"width\", \"height\", \"autoResize\"];\n selectiveDeepExtend(fields, this.options, options);\n }\n\n // Automatically adapt to changing size of the container element.\n this._cleanUp();\n if (this.options.autoResize === true) {\n if (window.ResizeObserver) {\n // decent browsers, immediate reactions\n const observer = new ResizeObserver(() => {\n const changed = this.setSize();\n if (changed === true) {\n this.body.emitter.emit(\"_requestRedraw\");\n }\n });\n const { frame } = this;\n\n observer.observe(frame);\n this._cleanupCallbacks.push(() => {\n observer.unobserve(frame);\n });\n } else {\n // IE11, continous polling\n const resizeTimer = setInterval(() => {\n const changed = this.setSize();\n if (changed === true) {\n this.body.emitter.emit(\"_requestRedraw\");\n }\n }, 1000);\n this._cleanupCallbacks.push(() => {\n clearInterval(resizeTimer);\n });\n }\n\n // Automatically adapt to changing size of the browser.\n const resizeFunction = this._onResize.bind(this);\n window.addEventListener(\"resize\", resizeFunction);\n this._cleanupCallbacks.push(() => {\n window.removeEventListener(\"resize\", resizeFunction);\n });\n }\n }\n\n /**\n * @private\n */\n _cleanUp() {\n this._cleanupCallbacks\n .splice(0)\n .reverse()\n .forEach((callback) => {\n try {\n callback();\n } catch (error) {\n console.error(error);\n }\n });\n }\n\n /**\n * @private\n */\n _onResize() {\n this.setSize();\n this.body.emitter.emit(\"_redraw\");\n }\n\n /**\n * Get and store the cameraState\n * @param {number} [pixelRatio]\n * @private\n */\n _getCameraState(pixelRatio = this.pixelRatio) {\n if (this.initialized === true) {\n this.cameraState.previousWidth = this.frame.canvas.width / pixelRatio;\n this.cameraState.previousHeight = this.frame.canvas.height / pixelRatio;\n this.cameraState.scale = this.body.view.scale;\n this.cameraState.position = this.DOMtoCanvas({\n x: (0.5 * this.frame.canvas.width) / pixelRatio,\n y: (0.5 * this.frame.canvas.height) / pixelRatio,\n });\n }\n }\n\n /**\n * Set the cameraState\n * @private\n */\n _setCameraState() {\n if (\n this.cameraState.scale !== undefined &&\n this.frame.canvas.clientWidth !== 0 &&\n this.frame.canvas.clientHeight !== 0 &&\n this.pixelRatio !== 0 &&\n this.cameraState.previousWidth > 0 &&\n this.cameraState.previousHeight > 0\n ) {\n const widthRatio =\n this.frame.canvas.width /\n this.pixelRatio /\n this.cameraState.previousWidth;\n const heightRatio =\n this.frame.canvas.height /\n this.pixelRatio /\n this.cameraState.previousHeight;\n let newScale = this.cameraState.scale;\n\n if (widthRatio != 1 && heightRatio != 1) {\n newScale = this.cameraState.scale * 0.5 * (widthRatio + heightRatio);\n } else if (widthRatio != 1) {\n newScale = this.cameraState.scale * widthRatio;\n } else if (heightRatio != 1) {\n newScale = this.cameraState.scale * heightRatio;\n }\n\n this.body.view.scale = newScale;\n // this comes from the view module.\n const currentViewCenter = this.DOMtoCanvas({\n x: 0.5 * this.frame.canvas.clientWidth,\n y: 0.5 * this.frame.canvas.clientHeight,\n });\n\n const distanceFromCenter = {\n // offset from view, distance view has to change by these x and y to center the node\n x: currentViewCenter.x - this.cameraState.position.x,\n y: currentViewCenter.y - this.cameraState.position.y,\n };\n this.body.view.translation.x +=\n distanceFromCenter.x * this.body.view.scale;\n this.body.view.translation.y +=\n distanceFromCenter.y * this.body.view.scale;\n }\n }\n\n /**\n *\n * @param {number|string} value\n * @returns {string}\n * @private\n */\n _prepareValue(value) {\n if (typeof value === \"number\") {\n return value + \"px\";\n } else if (typeof value === \"string\") {\n if (value.indexOf(\"%\") !== -1 || value.indexOf(\"px\") !== -1) {\n return value;\n } else if (value.indexOf(\"%\") === -1) {\n return value + \"px\";\n }\n }\n throw new Error(\n \"Could not use the value supplied for width or height:\" + value\n );\n }\n\n /**\n * Create the HTML\n */\n _create() {\n // remove all elements from the container element.\n while (this.body.container.hasChildNodes()) {\n this.body.container.removeChild(this.body.container.firstChild);\n }\n\n this.frame = document.createElement(\"div\");\n this.frame.className = \"vis-network\";\n this.frame.style.position = \"relative\";\n this.frame.style.overflow = \"hidden\";\n this.frame.tabIndex = 0; // tab index is required for keycharm to bind keystrokes to the div instead of the window\n\n //////////////////////////////////////////////////////////////////\n\n this.frame.canvas = document.createElement(\"canvas\");\n this.frame.canvas.style.position = \"relative\";\n this.frame.appendChild(this.frame.canvas);\n\n if (!this.frame.canvas.getContext) {\n const noCanvas = document.createElement(\"DIV\");\n noCanvas.style.color = \"red\";\n noCanvas.style.fontWeight = \"bold\";\n noCanvas.style.padding = \"10px\";\n noCanvas.innerText = \"Error: your browser does not support HTML canvas\";\n this.frame.canvas.appendChild(noCanvas);\n } else {\n this._setPixelRatio();\n this.setTransform();\n }\n\n // add the frame to the container element\n this.body.container.appendChild(this.frame);\n\n this.body.view.scale = 1;\n this.body.view.translation = {\n x: 0.5 * this.frame.canvas.clientWidth,\n y: 0.5 * this.frame.canvas.clientHeight,\n };\n\n this._bindHammer();\n }\n\n /**\n * This function binds hammer, it can be repeated over and over due to the uniqueness check.\n * @private\n */\n _bindHammer() {\n if (this.hammer !== undefined) {\n this.hammer.destroy();\n }\n this.drag = {};\n this.pinch = {};\n\n // init hammer\n this.hammer = new Hammer(this.frame.canvas);\n this.hammer.get(\"pinch\").set({ enable: true });\n // enable to get better response, todo: test on mobile.\n this.hammer\n .get(\"pan\")\n .set({ threshold: 5, direction: Hammer.DIRECTION_ALL });\n\n onTouch(this.hammer, (event) => {\n this.body.eventListeners.onTouch(event);\n });\n this.hammer.on(\"tap\", (event) => {\n this.body.eventListeners.onTap(event);\n });\n this.hammer.on(\"doubletap\", (event) => {\n this.body.eventListeners.onDoubleTap(event);\n });\n this.hammer.on(\"press\", (event) => {\n this.body.eventListeners.onHold(event);\n });\n this.hammer.on(\"panstart\", (event) => {\n this.body.eventListeners.onDragStart(event);\n });\n this.hammer.on(\"panmove\", (event) => {\n this.body.eventListeners.onDrag(event);\n });\n this.hammer.on(\"panend\", (event) => {\n this.body.eventListeners.onDragEnd(event);\n });\n this.hammer.on(\"pinch\", (event) => {\n this.body.eventListeners.onPinch(event);\n });\n\n // TODO: neatly cleanup these handlers when re-creating the Canvas, IF these are done with hammer, event.stopPropagation will not work?\n this.frame.canvas.addEventListener(\"wheel\", (event) => {\n this.body.eventListeners.onMouseWheel(event);\n });\n\n this.frame.canvas.addEventListener(\"mousemove\", (event) => {\n this.body.eventListeners.onMouseMove(event);\n });\n this.frame.canvas.addEventListener(\"contextmenu\", (event) => {\n this.body.eventListeners.onContext(event);\n });\n\n this.hammerFrame = new Hammer(this.frame);\n onRelease(this.hammerFrame, (event) => {\n this.body.eventListeners.onRelease(event);\n });\n }\n\n /**\n * Set a new size for the network\n * @param {string} width Width in pixels or percentage (for example '800px'\n * or '50%')\n * @param {string} height Height in pixels or percentage (for example '400px'\n * or '30%')\n * @returns {boolean}\n */\n setSize(width = this.options.width, height = this.options.height) {\n width = this._prepareValue(width);\n height = this._prepareValue(height);\n\n let emitEvent = false;\n const oldWidth = this.frame.canvas.width;\n const oldHeight = this.frame.canvas.height;\n\n // update the pixel ratio\n //\n // NOTE: Comment in following is rather inconsistent; this is the ONLY place in the code\n // where it is assumed that the pixel ratio could change at runtime.\n // The only way I can think of this happening is a rotating screen or tablet; but then\n // there should be a mechanism for reloading the data (TODO: check if this is present).\n //\n // If the assumption is true (i.e. pixel ratio can change at runtime), then *all* usage\n // of pixel ratio must be overhauled for this.\n //\n // For the time being, I will humor the assumption here, and in the rest of the code assume it is\n // constant.\n const previousRatio = this.pixelRatio; // we cache this because the camera state storage needs the old value\n this._setPixelRatio();\n\n if (\n width != this.options.width ||\n height != this.options.height ||\n this.frame.style.width != width ||\n this.frame.style.height != height\n ) {\n this._getCameraState(previousRatio);\n\n this.frame.style.width = width;\n this.frame.style.height = height;\n\n this.frame.canvas.style.width = \"100%\";\n this.frame.canvas.style.height = \"100%\";\n\n this.frame.canvas.width = Math.round(\n this.frame.canvas.clientWidth * this.pixelRatio\n );\n this.frame.canvas.height = Math.round(\n this.frame.canvas.clientHeight * this.pixelRatio\n );\n\n this.options.width = width;\n this.options.height = height;\n\n this.canvasViewCenter = {\n x: 0.5 * this.frame.clientWidth,\n y: 0.5 * this.frame.clientHeight,\n };\n\n emitEvent = true;\n } else {\n // this would adapt the width of the canvas to the width from 100% if and only if\n // there is a change.\n\n const newWidth = Math.round(\n this.frame.canvas.clientWidth * this.pixelRatio\n );\n const newHeight = Math.round(\n this.frame.canvas.clientHeight * this.pixelRatio\n );\n\n // store the camera if there is a change in size.\n if (\n this.frame.canvas.width !== newWidth ||\n this.frame.canvas.height !== newHeight\n ) {\n this._getCameraState(previousRatio);\n }\n\n if (this.frame.canvas.width !== newWidth) {\n this.frame.canvas.width = newWidth;\n emitEvent = true;\n }\n if (this.frame.canvas.height !== newHeight) {\n this.frame.canvas.height = newHeight;\n emitEvent = true;\n }\n }\n\n if (emitEvent === true) {\n this.body.emitter.emit(\"resize\", {\n width: Math.round(this.frame.canvas.width / this.pixelRatio),\n height: Math.round(this.frame.canvas.height / this.pixelRatio),\n oldWidth: Math.round(oldWidth / this.pixelRatio),\n oldHeight: Math.round(oldHeight / this.pixelRatio),\n });\n\n // restore the camera on change.\n this._setCameraState();\n }\n\n // set initialized so the get and set camera will work from now on.\n this.initialized = true;\n return emitEvent;\n }\n\n /**\n *\n * @returns {CanvasRenderingContext2D}\n */\n getContext() {\n return this.frame.canvas.getContext(\"2d\");\n }\n\n /**\n * Determine the pixel ratio for various browsers.\n * @returns {number}\n * @private\n */\n _determinePixelRatio() {\n const ctx = this.getContext();\n if (ctx === undefined) {\n throw new Error(\"Could not get canvax context\");\n }\n\n let numerator = 1;\n if (typeof window !== \"undefined\") {\n // (window !== undefined) doesn't work here!\n // Protection during unit tests, where 'window' can be missing\n numerator = window.devicePixelRatio || 1;\n }\n\n const denominator =\n ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio ||\n 1;\n\n return numerator / denominator;\n }\n\n /**\n * Lazy determination of pixel ratio.\n * @private\n */\n _setPixelRatio() {\n this.pixelRatio = this._determinePixelRatio();\n }\n\n /**\n * Set the transform in the contained context, based on its pixelRatio\n */\n setTransform() {\n const ctx = this.getContext();\n if (ctx === undefined) {\n throw new Error(\"Could not get canvax context\");\n }\n\n ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n }\n\n /**\n * Convert the X coordinate in DOM-space (coordinate point in browser relative to the container div) to\n * the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon)\n * @param {number} x\n * @returns {number}\n * @private\n */\n _XconvertDOMtoCanvas(x) {\n return (x - this.body.view.translation.x) / this.body.view.scale;\n }\n\n /**\n * Convert the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to\n * the X coordinate in DOM-space (coordinate point in browser relative to the container div)\n * @param {number} x\n * @returns {number}\n * @private\n */\n _XconvertCanvasToDOM(x) {\n return x * this.body.view.scale + this.body.view.translation.x;\n }\n\n /**\n * Convert the Y coordinate in DOM-space (coordinate point in browser relative to the container div) to\n * the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon)\n * @param {number} y\n * @returns {number}\n * @private\n */\n _YconvertDOMtoCanvas(y) {\n return (y - this.body.view.translation.y) / this.body.view.scale;\n }\n\n /**\n * Convert the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to\n * the Y coordinate in DOM-space (coordinate point in browser relative to the container div)\n * @param {number} y\n * @returns {number}\n * @private\n */\n _YconvertCanvasToDOM(y) {\n return y * this.body.view.scale + this.body.view.translation.y;\n }\n\n /**\n * @param {point} pos\n * @returns {point}\n */\n canvasToDOM(pos) {\n return {\n x: this._XconvertCanvasToDOM(pos.x),\n y: this._YconvertCanvasToDOM(pos.y),\n };\n }\n\n /**\n *\n * @param {point} pos\n * @returns {point}\n */\n DOMtoCanvas(pos) {\n return {\n x: this._XconvertDOMtoCanvas(pos.x),\n y: this._YconvertDOMtoCanvas(pos.y),\n };\n }\n}\n\nexport default Canvas;\n","import { easingFunctions } from \"vis-util/esnext\";\n\nimport NetworkUtil from \"../NetworkUtil\";\nimport { normalizeFitOptions } from \"./view-handler\";\n\n/**\n * The view\n */\nclass View {\n /**\n * @param {object} body\n * @param {Canvas} canvas\n */\n constructor(body, canvas) {\n this.body = body;\n this.canvas = canvas;\n\n this.animationSpeed = 1 / this.renderRefreshRate;\n this.animationEasingFunction = \"easeInOutQuint\";\n this.easingTime = 0;\n this.sourceScale = 0;\n this.targetScale = 0;\n this.sourceTranslation = 0;\n this.targetTranslation = 0;\n this.lockedOnNodeId = undefined;\n this.lockedOnNodeOffset = undefined;\n this.touchTime = 0;\n\n this.viewFunction = undefined;\n\n this.body.emitter.on(\"fit\", this.fit.bind(this));\n this.body.emitter.on(\"animationFinished\", () => {\n this.body.emitter.emit(\"_stopRendering\");\n });\n this.body.emitter.on(\"unlockNode\", this.releaseNode.bind(this));\n }\n\n /**\n *\n * @param {object} [options]\n */\n setOptions(options = {}) {\n this.options = options;\n }\n\n /**\n * This function zooms out to fit all data on screen based on amount of nodes\n * @param {object} [options={{nodes=Array}}]\n * @param options\n * @param {boolean} [initialZoom] | zoom based on fitted formula or range, true = fitted, default = false;\n */\n fit(options, initialZoom = false) {\n options = normalizeFitOptions(options, this.body.nodeIndices);\n\n const canvasWidth = this.canvas.frame.canvas.clientWidth;\n const canvasHeight = this.canvas.frame.canvas.clientHeight;\n\n let range;\n let zoomLevel;\n if (canvasWidth === 0 || canvasHeight === 0) {\n // There's no point in trying to fit into zero sized canvas. This could\n // potentially even result in invalid values being computed. For example\n // for network without nodes and zero sized canvas the zoom level would\n // end up being computed as 0/0 which results in NaN. In any other case\n // this would be 0/something which is again pointless to compute.\n zoomLevel = 1;\n\n range = NetworkUtil.getRange(this.body.nodes, options.nodes);\n } else if (initialZoom === true) {\n // check if more than half of the nodes have a predefined position. If so, we use the range, not the approximation.\n let positionDefined = 0;\n for (const nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId)) {\n const node = this.body.nodes[nodeId];\n if (node.predefinedPosition === true) {\n positionDefined += 1;\n }\n }\n }\n if (positionDefined > 0.5 * this.body.nodeIndices.length) {\n this.fit(options, false);\n return;\n }\n\n range = NetworkUtil.getRange(this.body.nodes, options.nodes);\n\n const numberOfNodes = this.body.nodeIndices.length;\n zoomLevel = 12.662 / (numberOfNodes + 7.4147) + 0.0964822; // this is obtained from fitting a dataset from 5 points with scale levels that looked good.\n\n // correct for larger canvasses.\n const factor = Math.min(canvasWidth / 600, canvasHeight / 600);\n zoomLevel *= factor;\n } else {\n this.body.emitter.emit(\"_resizeNodes\");\n range = NetworkUtil.getRange(this.body.nodes, options.nodes);\n\n const xDistance = Math.abs(range.maxX - range.minX) * 1.1;\n const yDistance = Math.abs(range.maxY - range.minY) * 1.1;\n\n const xZoomLevel = canvasWidth / xDistance;\n const yZoomLevel = canvasHeight / yDistance;\n\n zoomLevel = xZoomLevel <= yZoomLevel ? xZoomLevel : yZoomLevel;\n }\n\n if (zoomLevel > options.maxZoomLevel) {\n zoomLevel = options.maxZoomLevel;\n } else if (zoomLevel < options.minZoomLevel) {\n zoomLevel = options.minZoomLevel;\n }\n\n const center = NetworkUtil.findCenter(range);\n const animationOptions = {\n position: center,\n scale: zoomLevel,\n animation: options.animation,\n };\n this.moveTo(animationOptions);\n }\n\n // animation\n\n /**\n * Center a node in view.\n * @param {number} nodeId\n * @param {number} [options]\n */\n focus(nodeId, options = {}) {\n if (this.body.nodes[nodeId] !== undefined) {\n const nodePosition = {\n x: this.body.nodes[nodeId].x,\n y: this.body.nodes[nodeId].y,\n };\n options.position = nodePosition;\n options.lockedOnNode = nodeId;\n\n this.moveTo(options);\n } else {\n console.error(\"Node: \" + nodeId + \" cannot be found.\");\n }\n }\n\n /**\n *\n * @param {object} options | options.offset = {x:number, y:number} // offset from the center in DOM pixels\n * | options.scale = number // scale to move to\n * | options.position = {x:number, y:number} // position to move to\n * | options.animation = {duration:number, easingFunction:String} || Boolean // position to move to\n */\n moveTo(options) {\n if (options === undefined) {\n options = {};\n return;\n }\n\n if (options.offset != null) {\n if (options.offset.x != null) {\n // Coerce and verify that x is valid.\n options.offset.x = +options.offset.x;\n if (!Number.isFinite(options.offset.x)) {\n throw new TypeError(\n 'The option \"offset.x\" has to be a finite number.'\n );\n }\n } else {\n options.offset.x = 0;\n }\n\n if (options.offset.y != null) {\n // Coerce and verify that y is valid.\n options.offset.y = +options.offset.y;\n if (!Number.isFinite(options.offset.y)) {\n throw new TypeError(\n 'The option \"offset.y\" has to be a finite number.'\n );\n }\n } else {\n options.offset.x = 0;\n }\n } else {\n options.offset = {\n x: 0,\n y: 0,\n };\n }\n\n if (options.position != null) {\n if (options.position.x != null) {\n // Coerce and verify that x is valid.\n options.position.x = +options.position.x;\n if (!Number.isFinite(options.position.x)) {\n throw new TypeError(\n 'The option \"position.x\" has to be a finite number.'\n );\n }\n } else {\n options.position.x = 0;\n }\n\n if (options.position.y != null) {\n // Coerce and verify that y is valid.\n options.position.y = +options.position.y;\n if (!Number.isFinite(options.position.y)) {\n throw new TypeError(\n 'The option \"position.y\" has to be a finite number.'\n );\n }\n } else {\n options.position.x = 0;\n }\n } else {\n options.position = this.getViewPosition();\n }\n\n if (options.scale != null) {\n // Coerce and verify that the scale is valid.\n options.scale = +options.scale;\n if (!(options.scale > 0)) {\n throw new TypeError(\n 'The option \"scale\" has to be a number greater than zero.'\n );\n }\n } else {\n options.scale = this.body.view.scale;\n }\n\n if (options.animation === undefined) {\n options.animation = { duration: 0 };\n }\n if (options.animation === false) {\n options.animation = { duration: 0 };\n }\n if (options.animation === true) {\n options.animation = {};\n }\n if (options.animation.duration === undefined) {\n options.animation.duration = 1000;\n } // default duration\n if (options.animation.easingFunction === undefined) {\n options.animation.easingFunction = \"easeInOutQuad\";\n } // default easing function\n\n this.animateView(options);\n }\n\n /**\n *\n * @param {object} options | options.offset = {x:number, y:number} // offset from the center in DOM pixels\n * | options.time = number // animation time in milliseconds\n * | options.scale = number // scale to animate to\n * | options.position = {x:number, y:number} // position to animate to\n * | options.easingFunction = String // linear, easeInQuad, easeOutQuad, easeInOutQuad,\n * // easeInCubic, easeOutCubic, easeInOutCubic,\n * // easeInQuart, easeOutQuart, easeInOutQuart,\n * // easeInQuint, easeOutQuint, easeInOutQuint\n */\n animateView(options) {\n if (options === undefined) {\n return;\n }\n this.animationEasingFunction = options.animation.easingFunction;\n // release if something focussed on the node\n this.releaseNode();\n if (options.locked === true) {\n this.lockedOnNodeId = options.lockedOnNode;\n this.lockedOnNodeOffset = options.offset;\n }\n\n // forcefully complete the old animation if it was still running\n if (this.easingTime != 0) {\n this._transitionRedraw(true); // by setting easingtime to 1, we finish the animation.\n }\n\n this.sourceScale = this.body.view.scale;\n this.sourceTranslation = this.body.view.translation;\n this.targetScale = options.scale;\n\n // set the scale so the viewCenter is based on the correct zoom level. This is overridden in the transitionRedraw\n // but at least then we'll have the target transition\n this.body.view.scale = this.targetScale;\n const viewCenter = this.canvas.DOMtoCanvas({\n x: 0.5 * this.canvas.frame.canvas.clientWidth,\n y: 0.5 * this.canvas.frame.canvas.clientHeight,\n });\n\n const distanceFromCenter = {\n // offset from view, distance view has to change by these x and y to center the node\n x: viewCenter.x - options.position.x,\n y: viewCenter.y - options.position.y,\n };\n this.targetTranslation = {\n x:\n this.sourceTranslation.x +\n distanceFromCenter.x * this.targetScale +\n options.offset.x,\n y:\n this.sourceTranslation.y +\n distanceFromCenter.y * this.targetScale +\n options.offset.y,\n };\n\n // if the time is set to 0, don't do an animation\n if (options.animation.duration === 0) {\n if (this.lockedOnNodeId != undefined) {\n this.viewFunction = this._lockedRedraw.bind(this);\n this.body.emitter.on(\"initRedraw\", this.viewFunction);\n } else {\n this.body.view.scale = this.targetScale;\n this.body.view.translation = this.targetTranslation;\n this.body.emitter.emit(\"_requestRedraw\");\n }\n } else {\n this.animationSpeed =\n 1 / (60 * options.animation.duration * 0.001) || 1 / 60; // 60 for 60 seconds, 0.001 for milli's\n this.animationEasingFunction = options.animation.easingFunction;\n\n this.viewFunction = this._transitionRedraw.bind(this);\n this.body.emitter.on(\"initRedraw\", this.viewFunction);\n this.body.emitter.emit(\"_startRendering\");\n }\n }\n\n /**\n * used to animate smoothly by hijacking the redraw function.\n * @private\n */\n _lockedRedraw() {\n const nodePosition = {\n x: this.body.nodes[this.lockedOnNodeId].x,\n y: this.body.nodes[this.lockedOnNodeId].y,\n };\n const viewCenter = this.canvas.DOMtoCanvas({\n x: 0.5 * this.canvas.frame.canvas.clientWidth,\n y: 0.5 * this.canvas.frame.canvas.clientHeight,\n });\n const distanceFromCenter = {\n // offset from view, distance view has to change by these x and y to center the node\n x: viewCenter.x - nodePosition.x,\n y: viewCenter.y - nodePosition.y,\n };\n const sourceTranslation = this.body.view.translation;\n const targetTranslation = {\n x:\n sourceTranslation.x +\n distanceFromCenter.x * this.body.view.scale +\n this.lockedOnNodeOffset.x,\n y:\n sourceTranslation.y +\n distanceFromCenter.y * this.body.view.scale +\n this.lockedOnNodeOffset.y,\n };\n\n this.body.view.translation = targetTranslation;\n }\n\n /**\n * Resets state of a locked on Node\n */\n releaseNode() {\n if (this.lockedOnNodeId !== undefined && this.viewFunction !== undefined) {\n this.body.emitter.off(\"initRedraw\", this.viewFunction);\n this.lockedOnNodeId = undefined;\n this.lockedOnNodeOffset = undefined;\n }\n }\n\n /**\n * @param {boolean} [finished]\n * @private\n */\n _transitionRedraw(finished = false) {\n this.easingTime += this.animationSpeed;\n this.easingTime = finished === true ? 1.0 : this.easingTime;\n\n const progress = easingFunctions[this.animationEasingFunction](\n this.easingTime\n );\n\n this.body.view.scale =\n this.sourceScale + (this.targetScale - this.sourceScale) * progress;\n this.body.view.translation = {\n x:\n this.sourceTranslation.x +\n (this.targetTranslation.x - this.sourceTranslation.x) * progress,\n y:\n this.sourceTranslation.y +\n (this.targetTranslation.y - this.sourceTranslation.y) * progress,\n };\n\n // cleanup\n if (this.easingTime >= 1.0) {\n this.body.emitter.off(\"initRedraw\", this.viewFunction);\n this.easingTime = 0;\n if (this.lockedOnNodeId != undefined) {\n this.viewFunction = this._lockedRedraw.bind(this);\n this.body.emitter.on(\"initRedraw\", this.viewFunction);\n }\n this.body.emitter.emit(\"animationFinished\");\n }\n }\n\n /**\n *\n * @returns {number}\n */\n getScale() {\n return this.body.view.scale;\n }\n\n /**\n *\n * @returns {{x: number, y: number}}\n */\n getViewPosition() {\n return this.canvas.DOMtoCanvas({\n x: 0.5 * this.canvas.frame.canvas.clientWidth,\n y: 0.5 * this.canvas.frame.canvas.clientHeight,\n });\n }\n}\n\nexport default View;\n","type IdType = string | number;\n\nexport interface ViewFitOptions {\n nodes: IdType[];\n minZoomLevel: number;\n maxZoomLevel: number;\n}\n\n/**\n * Validate the fit options, replace missing optional values by defaults etc.\n * @param rawOptions - The raw options.\n * @param allNodeIds - All node ids that will be used if nodes are omitted in\n * the raw options.\n * @returns Options with everything filled in and validated.\n */\nexport function normalizeFitOptions(\n rawOptions: Partial,\n allNodeIds: IdType[]\n): ViewFitOptions {\n const options = Object.assign>(\n {\n nodes: allNodeIds,\n minZoomLevel: Number.MIN_VALUE,\n maxZoomLevel: 1,\n },\n rawOptions ?? {}\n );\n\n if (!Array.isArray(options.nodes)) {\n throw new TypeError(\"Nodes has to be an array of ids.\");\n }\n if (options.nodes.length === 0) {\n options.nodes = allNodeIds;\n }\n\n if (!(typeof options.minZoomLevel === \"number\" && options.minZoomLevel > 0)) {\n throw new TypeError(\"Min zoom level has to be a number higher than zero.\");\n }\n\n if (\n !(\n typeof options.maxZoomLevel === \"number\" &&\n options.minZoomLevel <= options.maxZoomLevel\n )\n ) {\n throw new TypeError(\n \"Max zoom level has to be a number higher than min zoom level.\"\n );\n }\n\n return options;\n}\n","/**\r\n * Created by Alex on 11/6/2014.\r\n */\r\nexport default function keycharm(options) {\r\n var preventDefault = options && options.preventDefault || false;\r\n\r\n var container = options && options.container || window;\r\n\r\n var _exportFunctions = {};\r\n var _bound = {keydown:{}, keyup:{}};\r\n var _keys = {};\r\n var i;\r\n\r\n // a - z\r\n for (i = 97; i <= 122; i++) {_keys[String.fromCharCode(i)] = {code:65 + (i - 97), shift: false};}\r\n // A - Z\r\n for (i = 65; i <= 90; i++) {_keys[String.fromCharCode(i)] = {code:i, shift: true};}\r\n // 0 - 9\r\n for (i = 0; i <= 9; i++) {_keys['' + i] = {code:48 + i, shift: false};}\r\n // F1 - F12\r\n for (i = 1; i <= 12; i++) {_keys['F' + i] = {code:111 + i, shift: false};}\r\n // num0 - num9\r\n for (i = 0; i <= 9; i++) {_keys['num' + i] = {code:96 + i, shift: false};}\r\n\r\n // numpad misc\r\n _keys['num*'] = {code:106, shift: false};\r\n _keys['num+'] = {code:107, shift: false};\r\n _keys['num-'] = {code:109, shift: false};\r\n _keys['num/'] = {code:111, shift: false};\r\n _keys['num.'] = {code:110, shift: false};\r\n // arrows\r\n _keys['left'] = {code:37, shift: false};\r\n _keys['up'] = {code:38, shift: false};\r\n _keys['right'] = {code:39, shift: false};\r\n _keys['down'] = {code:40, shift: false};\r\n // extra keys\r\n _keys['space'] = {code:32, shift: false};\r\n _keys['enter'] = {code:13, shift: false};\r\n _keys['shift'] = {code:16, shift: undefined};\r\n _keys['esc'] = {code:27, shift: false};\r\n _keys['backspace'] = {code:8, shift: false};\r\n _keys['tab'] = {code:9, shift: false};\r\n _keys['ctrl'] = {code:17, shift: false};\r\n _keys['alt'] = {code:18, shift: false};\r\n _keys['delete'] = {code:46, shift: false};\r\n _keys['pageup'] = {code:33, shift: false};\r\n _keys['pagedown'] = {code:34, shift: false};\r\n // symbols\r\n _keys['='] = {code:187, shift: false};\r\n _keys['-'] = {code:189, shift: false};\r\n _keys[']'] = {code:221, shift: false};\r\n _keys['['] = {code:219, shift: false};\r\n\r\n\r\n\r\n var down = function(event) {handleEvent(event,'keydown');};\r\n var up = function(event) {handleEvent(event,'keyup');};\r\n\r\n // handle the actualy bound key with the event\r\n var handleEvent = function(event,type) {\r\n if (_bound[type][event.keyCode] !== undefined) {\r\n var bound = _bound[type][event.keyCode];\r\n for (var i = 0; i < bound.length; i++) {\r\n if (bound[i].shift === undefined) {\r\n bound[i].fn(event);\r\n }\r\n else if (bound[i].shift == true && event.shiftKey == true) {\r\n bound[i].fn(event);\r\n }\r\n else if (bound[i].shift == false && event.shiftKey == false) {\r\n bound[i].fn(event);\r\n }\r\n }\r\n\r\n if (preventDefault == true) {\r\n event.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n // bind a key to a callback\r\n _exportFunctions.bind = function(key, callback, type) {\r\n if (type === undefined) {\r\n type = 'keydown';\r\n }\r\n if (_keys[key] === undefined) {\r\n throw new Error(\"unsupported key: \" + key);\r\n }\r\n if (_bound[type][_keys[key].code] === undefined) {\r\n _bound[type][_keys[key].code] = [];\r\n }\r\n _bound[type][_keys[key].code].push({fn:callback, shift:_keys[key].shift});\r\n };\r\n\r\n\r\n // bind all keys to a call back (demo purposes)\r\n _exportFunctions.bindAll = function(callback, type) {\r\n if (type === undefined) {\r\n type = 'keydown';\r\n }\r\n for (var key in _keys) {\r\n if (_keys.hasOwnProperty(key)) {\r\n _exportFunctions.bind(key,callback,type);\r\n }\r\n }\r\n };\r\n\r\n // get the key label from an event\r\n _exportFunctions.getKey = function(event) {\r\n for (var key in _keys) {\r\n if (_keys.hasOwnProperty(key)) {\r\n if (event.shiftKey == true && _keys[key].shift == true && event.keyCode == _keys[key].code) {\r\n return key;\r\n }\r\n else if (event.shiftKey == false && _keys[key].shift == false && event.keyCode == _keys[key].code) {\r\n return key;\r\n }\r\n else if (event.keyCode == _keys[key].code && key == 'shift') {\r\n return key;\r\n }\r\n }\r\n }\r\n return \"unknown key, currently not supported\";\r\n };\r\n\r\n // unbind either a specific callback from a key or all of them (by leaving callback undefined)\r\n _exportFunctions.unbind = function(key, callback, type) {\r\n if (type === undefined) {\r\n type = 'keydown';\r\n }\r\n if (_keys[key] === undefined) {\r\n throw new Error(\"unsupported key: \" + key);\r\n }\r\n if (callback !== undefined) {\r\n var newBindings = [];\r\n var bound = _bound[type][_keys[key].code];\r\n if (bound !== undefined) {\r\n for (var i = 0; i < bound.length; i++) {\r\n if (!(bound[i].fn == callback && bound[i].shift == _keys[key].shift)) {\r\n newBindings.push(_bound[type][_keys[key].code][i]);\r\n }\r\n }\r\n }\r\n _bound[type][_keys[key].code] = newBindings;\r\n }\r\n else {\r\n _bound[type][_keys[key].code] = [];\r\n }\r\n };\r\n\r\n // reset all bound variables.\r\n _exportFunctions.reset = function() {\r\n _bound = {keydown:{}, keyup:{}};\r\n };\r\n\r\n // unbind all listeners and reset all variables.\r\n _exportFunctions.destroy = function() {\r\n _bound = {keydown:{}, keyup:{}};\r\n container.removeEventListener('keydown', down, true);\r\n container.removeEventListener('keyup', up, true);\r\n };\r\n\r\n // create listeners.\r\n container.addEventListener('keydown',down,true);\r\n container.addEventListener('keyup',up,true);\r\n\r\n // return the public functions.\r\n return _exportFunctions;\r\n}\r\n","import \"./NavigationHandler.css\";\n\nimport { Hammer } from \"vis-util/esnext\";\nimport { onRelease, onTouch } from \"../../../hammerUtil\";\nimport keycharm from \"keycharm\";\n\n/**\n * Navigation Handler\n */\nclass NavigationHandler {\n /**\n * @param {object} body\n * @param {Canvas} canvas\n */\n constructor(body, canvas) {\n this.body = body;\n this.canvas = canvas;\n\n this.iconsCreated = false;\n this.navigationHammers = [];\n this.boundFunctions = {};\n this.touchTime = 0;\n this.activated = false;\n\n this.body.emitter.on(\"activate\", () => {\n this.activated = true;\n this.configureKeyboardBindings();\n });\n this.body.emitter.on(\"deactivate\", () => {\n this.activated = false;\n this.configureKeyboardBindings();\n });\n this.body.emitter.on(\"destroy\", () => {\n if (this.keycharm !== undefined) {\n this.keycharm.destroy();\n }\n });\n\n this.options = {};\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n this.options = options;\n this.create();\n }\n }\n\n /**\n * Creates or refreshes navigation and sets key bindings\n */\n create() {\n if (this.options.navigationButtons === true) {\n if (this.iconsCreated === false) {\n this.loadNavigationElements();\n }\n } else if (this.iconsCreated === true) {\n this.cleanNavigation();\n }\n\n this.configureKeyboardBindings();\n }\n\n /**\n * Cleans up previous navigation items\n */\n cleanNavigation() {\n // clean hammer bindings\n if (this.navigationHammers.length != 0) {\n for (let i = 0; i < this.navigationHammers.length; i++) {\n this.navigationHammers[i].destroy();\n }\n this.navigationHammers = [];\n }\n\n // clean up previous navigation items\n if (\n this.navigationDOM &&\n this.navigationDOM[\"wrapper\"] &&\n this.navigationDOM[\"wrapper\"].parentNode\n ) {\n this.navigationDOM[\"wrapper\"].parentNode.removeChild(\n this.navigationDOM[\"wrapper\"]\n );\n }\n\n this.iconsCreated = false;\n }\n\n /**\n * Creation of the navigation controls nodes. They are drawn over the rest of the nodes and are not affected by scale and translation\n * they have a triggerFunction which is called on click. If the position of the navigation controls is dependent\n * on this.frame.canvas.clientWidth or this.frame.canvas.clientHeight, we flag horizontalAlignLeft and verticalAlignTop false.\n * This means that the location will be corrected by the _relocateNavigation function on a size change of the canvas.\n * @private\n */\n loadNavigationElements() {\n this.cleanNavigation();\n\n this.navigationDOM = {};\n const navigationDivs = [\n \"up\",\n \"down\",\n \"left\",\n \"right\",\n \"zoomIn\",\n \"zoomOut\",\n \"zoomExtends\",\n ];\n const navigationDivActions = [\n \"_moveUp\",\n \"_moveDown\",\n \"_moveLeft\",\n \"_moveRight\",\n \"_zoomIn\",\n \"_zoomOut\",\n \"_fit\",\n ];\n\n this.navigationDOM[\"wrapper\"] = document.createElement(\"div\");\n this.navigationDOM[\"wrapper\"].className = \"vis-navigation\";\n this.canvas.frame.appendChild(this.navigationDOM[\"wrapper\"]);\n\n for (let i = 0; i < navigationDivs.length; i++) {\n this.navigationDOM[navigationDivs[i]] = document.createElement(\"div\");\n this.navigationDOM[navigationDivs[i]].className =\n \"vis-button vis-\" + navigationDivs[i];\n this.navigationDOM[\"wrapper\"].appendChild(\n this.navigationDOM[navigationDivs[i]]\n );\n\n const hammer = new Hammer(this.navigationDOM[navigationDivs[i]]);\n if (navigationDivActions[i] === \"_fit\") {\n onTouch(hammer, this._fit.bind(this));\n } else {\n onTouch(hammer, this.bindToRedraw.bind(this, navigationDivActions[i]));\n }\n\n this.navigationHammers.push(hammer);\n }\n\n // use a hammer for the release so we do not require the one used in the rest of the network\n // the one the rest uses can be overloaded by the manipulation system.\n const hammerFrame = new Hammer(this.canvas.frame);\n onRelease(hammerFrame, () => {\n this._stopMovement();\n });\n this.navigationHammers.push(hammerFrame);\n\n this.iconsCreated = true;\n }\n\n /**\n *\n * @param {string} action\n */\n bindToRedraw(action) {\n if (this.boundFunctions[action] === undefined) {\n this.boundFunctions[action] = this[action].bind(this);\n this.body.emitter.on(\"initRedraw\", this.boundFunctions[action]);\n this.body.emitter.emit(\"_startRendering\");\n }\n }\n\n /**\n *\n * @param {string} action\n */\n unbindFromRedraw(action) {\n if (this.boundFunctions[action] !== undefined) {\n this.body.emitter.off(\"initRedraw\", this.boundFunctions[action]);\n this.body.emitter.emit(\"_stopRendering\");\n delete this.boundFunctions[action];\n }\n }\n\n /**\n * this stops all movement induced by the navigation buttons\n * @private\n */\n _fit() {\n if (new Date().valueOf() - this.touchTime > 700) {\n // TODO: fix ugly hack to avoid hammer's double fireing of event (because we use release?)\n this.body.emitter.emit(\"fit\", { duration: 700 });\n this.touchTime = new Date().valueOf();\n }\n }\n\n /**\n * this stops all movement induced by the navigation buttons\n * @private\n */\n _stopMovement() {\n for (const boundAction in this.boundFunctions) {\n if (\n Object.prototype.hasOwnProperty.call(this.boundFunctions, boundAction)\n ) {\n this.body.emitter.off(\"initRedraw\", this.boundFunctions[boundAction]);\n this.body.emitter.emit(\"_stopRendering\");\n }\n }\n this.boundFunctions = {};\n }\n /**\n *\n * @private\n */\n _moveUp() {\n this.body.view.translation.y += this.options.keyboard.speed.y;\n }\n /**\n *\n * @private\n */\n _moveDown() {\n this.body.view.translation.y -= this.options.keyboard.speed.y;\n }\n /**\n *\n * @private\n */\n _moveLeft() {\n this.body.view.translation.x += this.options.keyboard.speed.x;\n }\n /**\n *\n * @private\n */\n _moveRight() {\n this.body.view.translation.x -= this.options.keyboard.speed.x;\n }\n /**\n *\n * @private\n */\n _zoomIn() {\n const scaleOld = this.body.view.scale;\n const scale = this.body.view.scale * (1 + this.options.keyboard.speed.zoom);\n const translation = this.body.view.translation;\n const scaleFrac = scale / scaleOld;\n const tx =\n (1 - scaleFrac) * this.canvas.canvasViewCenter.x +\n translation.x * scaleFrac;\n const ty =\n (1 - scaleFrac) * this.canvas.canvasViewCenter.y +\n translation.y * scaleFrac;\n\n this.body.view.scale = scale;\n this.body.view.translation = { x: tx, y: ty };\n this.body.emitter.emit(\"zoom\", {\n direction: \"+\",\n scale: this.body.view.scale,\n pointer: null,\n });\n }\n\n /**\n *\n * @private\n */\n _zoomOut() {\n const scaleOld = this.body.view.scale;\n const scale = this.body.view.scale / (1 + this.options.keyboard.speed.zoom);\n const translation = this.body.view.translation;\n const scaleFrac = scale / scaleOld;\n const tx =\n (1 - scaleFrac) * this.canvas.canvasViewCenter.x +\n translation.x * scaleFrac;\n const ty =\n (1 - scaleFrac) * this.canvas.canvasViewCenter.y +\n translation.y * scaleFrac;\n\n this.body.view.scale = scale;\n this.body.view.translation = { x: tx, y: ty };\n this.body.emitter.emit(\"zoom\", {\n direction: \"-\",\n scale: this.body.view.scale,\n pointer: null,\n });\n }\n\n /**\n * bind all keys using keycharm.\n */\n configureKeyboardBindings() {\n if (this.keycharm !== undefined) {\n this.keycharm.destroy();\n }\n\n if (this.options.keyboard.enabled === true) {\n if (this.options.keyboard.bindToWindow === true) {\n this.keycharm = keycharm({ container: window, preventDefault: true });\n } else {\n this.keycharm = keycharm({\n container: this.canvas.frame,\n preventDefault: true,\n });\n }\n\n this.keycharm.reset();\n\n if (this.activated === true) {\n this.keycharm.bind(\n \"up\",\n () => {\n this.bindToRedraw(\"_moveUp\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"down\",\n () => {\n this.bindToRedraw(\"_moveDown\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"left\",\n () => {\n this.bindToRedraw(\"_moveLeft\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"right\",\n () => {\n this.bindToRedraw(\"_moveRight\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"=\",\n () => {\n this.bindToRedraw(\"_zoomIn\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"num+\",\n () => {\n this.bindToRedraw(\"_zoomIn\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"num-\",\n () => {\n this.bindToRedraw(\"_zoomOut\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"-\",\n () => {\n this.bindToRedraw(\"_zoomOut\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"[\",\n () => {\n this.bindToRedraw(\"_zoomOut\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"]\",\n () => {\n this.bindToRedraw(\"_zoomIn\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"pageup\",\n () => {\n this.bindToRedraw(\"_zoomIn\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"pagedown\",\n () => {\n this.bindToRedraw(\"_zoomOut\");\n },\n \"keydown\"\n );\n\n this.keycharm.bind(\n \"up\",\n () => {\n this.unbindFromRedraw(\"_moveUp\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"down\",\n () => {\n this.unbindFromRedraw(\"_moveDown\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"left\",\n () => {\n this.unbindFromRedraw(\"_moveLeft\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"right\",\n () => {\n this.unbindFromRedraw(\"_moveRight\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"=\",\n () => {\n this.unbindFromRedraw(\"_zoomIn\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"num+\",\n () => {\n this.unbindFromRedraw(\"_zoomIn\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"num-\",\n () => {\n this.unbindFromRedraw(\"_zoomOut\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"-\",\n () => {\n this.unbindFromRedraw(\"_zoomOut\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"[\",\n () => {\n this.unbindFromRedraw(\"_zoomOut\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"]\",\n () => {\n this.unbindFromRedraw(\"_zoomIn\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"pageup\",\n () => {\n this.unbindFromRedraw(\"_zoomIn\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"pagedown\",\n () => {\n this.unbindFromRedraw(\"_zoomOut\");\n },\n \"keyup\"\n );\n }\n }\n }\n}\n\nexport default NavigationHandler;\n","import {\n Popup,\n getAbsoluteLeft,\n getAbsoluteTop,\n mergeOptions,\n parseColor,\n selectiveNotDeepExtend,\n} from \"vis-util/esnext\";\nimport NavigationHandler from \"./components/NavigationHandler\";\n\n/**\n * Handler for interactions\n */\nclass InteractionHandler {\n /**\n * @param {object} body\n * @param {Canvas} canvas\n * @param {SelectionHandler} selectionHandler\n */\n constructor(body, canvas, selectionHandler) {\n this.body = body;\n this.canvas = canvas;\n this.selectionHandler = selectionHandler;\n this.navigationHandler = new NavigationHandler(body, canvas);\n\n // bind the events from hammer to functions in this object\n this.body.eventListeners.onTap = this.onTap.bind(this);\n this.body.eventListeners.onTouch = this.onTouch.bind(this);\n this.body.eventListeners.onDoubleTap = this.onDoubleTap.bind(this);\n this.body.eventListeners.onHold = this.onHold.bind(this);\n this.body.eventListeners.onDragStart = this.onDragStart.bind(this);\n this.body.eventListeners.onDrag = this.onDrag.bind(this);\n this.body.eventListeners.onDragEnd = this.onDragEnd.bind(this);\n this.body.eventListeners.onMouseWheel = this.onMouseWheel.bind(this);\n this.body.eventListeners.onPinch = this.onPinch.bind(this);\n this.body.eventListeners.onMouseMove = this.onMouseMove.bind(this);\n this.body.eventListeners.onRelease = this.onRelease.bind(this);\n this.body.eventListeners.onContext = this.onContext.bind(this);\n\n this.touchTime = 0;\n this.drag = {};\n this.pinch = {};\n this.popup = undefined;\n this.popupObj = undefined;\n this.popupTimer = undefined;\n\n this.body.functions.getPointer = this.getPointer.bind(this);\n\n this.options = {};\n this.defaultOptions = {\n dragNodes: true,\n dragView: true,\n hover: false,\n keyboard: {\n enabled: false,\n speed: { x: 10, y: 10, zoom: 0.02 },\n bindToWindow: true,\n autoFocus: true,\n },\n navigationButtons: false,\n tooltipDelay: 300,\n zoomView: true,\n zoomSpeed: 1,\n };\n Object.assign(this.options, this.defaultOptions);\n\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n this.body.emitter.on(\"destroy\", () => {\n clearTimeout(this.popupTimer);\n delete this.body.functions.getPointer;\n });\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n // extend all but the values in fields\n const fields = [\n \"hideEdgesOnDrag\",\n \"hideEdgesOnZoom\",\n \"hideNodesOnDrag\",\n \"keyboard\",\n \"multiselect\",\n \"selectable\",\n \"selectConnectedEdges\",\n ];\n selectiveNotDeepExtend(fields, this.options, options);\n\n // merge the keyboard options in.\n mergeOptions(this.options, options, \"keyboard\");\n\n if (options.tooltip) {\n Object.assign(this.options.tooltip, options.tooltip);\n if (options.tooltip.color) {\n this.options.tooltip.color = parseColor(options.tooltip.color);\n }\n }\n }\n\n this.navigationHandler.setOptions(this.options);\n }\n\n /**\n * Get the pointer location from a touch location\n * @param {{x: number, y: number}} touch\n * @returns {{x: number, y: number}} pointer\n * @private\n */\n getPointer(touch) {\n return {\n x: touch.x - getAbsoluteLeft(this.canvas.frame.canvas),\n y: touch.y - getAbsoluteTop(this.canvas.frame.canvas),\n };\n }\n\n /**\n * On start of a touch gesture, store the pointer\n * @param {Event} event The event\n * @private\n */\n onTouch(event) {\n if (new Date().valueOf() - this.touchTime > 50) {\n this.drag.pointer = this.getPointer(event.center);\n this.drag.pinched = false;\n this.pinch.scale = this.body.view.scale;\n // to avoid double fireing of this event because we have two hammer instances. (on canvas and on frame)\n this.touchTime = new Date().valueOf();\n }\n }\n\n /**\n * handle tap/click event: select/unselect a node\n * @param {Event} event\n * @private\n */\n onTap(event) {\n const pointer = this.getPointer(event.center);\n const multiselect =\n this.selectionHandler.options.multiselect &&\n (event.changedPointers[0].ctrlKey || event.changedPointers[0].metaKey);\n\n this.checkSelectionChanges(pointer, multiselect);\n\n this.selectionHandler.commitAndEmit(pointer, event);\n this.selectionHandler.generateClickEvent(\"click\", event, pointer);\n }\n\n /**\n * handle doubletap event\n * @param {Event} event\n * @private\n */\n onDoubleTap(event) {\n const pointer = this.getPointer(event.center);\n this.selectionHandler.generateClickEvent(\"doubleClick\", event, pointer);\n }\n\n /**\n * handle long tap event: multi select nodes\n * @param {Event} event\n * @private\n */\n onHold(event) {\n const pointer = this.getPointer(event.center);\n const multiselect = this.selectionHandler.options.multiselect;\n\n this.checkSelectionChanges(pointer, multiselect);\n\n this.selectionHandler.commitAndEmit(pointer, event);\n this.selectionHandler.generateClickEvent(\"click\", event, pointer);\n this.selectionHandler.generateClickEvent(\"hold\", event, pointer);\n }\n\n /**\n * handle the release of the screen\n * @param {Event} event\n * @private\n */\n onRelease(event) {\n if (new Date().valueOf() - this.touchTime > 10) {\n const pointer = this.getPointer(event.center);\n this.selectionHandler.generateClickEvent(\"release\", event, pointer);\n // to avoid double fireing of this event because we have two hammer instances. (on canvas and on frame)\n this.touchTime = new Date().valueOf();\n }\n }\n\n /**\n *\n * @param {Event} event\n */\n onContext(event) {\n const pointer = this.getPointer({ x: event.clientX, y: event.clientY });\n this.selectionHandler.generateClickEvent(\"oncontext\", event, pointer);\n }\n\n /**\n * Select and deselect nodes depending current selection change.\n * @param {{x: number, y: number}} pointer\n * @param {boolean} [add]\n */\n checkSelectionChanges(pointer, add = false) {\n if (add === true) {\n this.selectionHandler.selectAdditionalOnPoint(pointer);\n } else {\n this.selectionHandler.selectOnPoint(pointer);\n }\n }\n\n /**\n * Remove all node and edge id's from the first set that are present in the second one.\n * @param {{nodes: Array., edges: Array.}} firstSet\n * @param {{nodes: Array., edges: Array.}} secondSet\n * @returns {{nodes: Array., edges: Array.}}\n * @private\n */\n _determineDifference(firstSet, secondSet) {\n const arrayDiff = function (firstArr, secondArr) {\n const result = [];\n\n for (let i = 0; i < firstArr.length; i++) {\n const value = firstArr[i];\n if (secondArr.indexOf(value) === -1) {\n result.push(value);\n }\n }\n\n return result;\n };\n\n return {\n nodes: arrayDiff(firstSet.nodes, secondSet.nodes),\n edges: arrayDiff(firstSet.edges, secondSet.edges),\n };\n }\n\n /**\n * This function is called by onDragStart.\n * It is separated out because we can then overload it for the datamanipulation system.\n * @param {Event} event\n * @private\n */\n onDragStart(event) {\n // if already dragging, do not start\n // this can happen on touch screens with multiple fingers\n if (this.drag.dragging) {\n return;\n }\n\n //in case the touch event was triggered on an external div, do the initial touch now.\n if (this.drag.pointer === undefined) {\n this.onTouch(event);\n }\n\n // note: drag.pointer is set in onTouch to get the initial touch location\n const node = this.selectionHandler.getNodeAt(this.drag.pointer);\n\n this.drag.dragging = true;\n this.drag.selection = [];\n this.drag.translation = Object.assign({}, this.body.view.translation); // copy the object\n this.drag.nodeId = undefined;\n\n if (event.srcEvent.shiftKey) {\n this.body.selectionBox.show = true;\n const pointer = this.getPointer(event.center);\n\n this.body.selectionBox.position.start = {\n x: this.canvas._XconvertDOMtoCanvas(pointer.x),\n y: this.canvas._YconvertDOMtoCanvas(pointer.y),\n };\n this.body.selectionBox.position.end = {\n x: this.canvas._XconvertDOMtoCanvas(pointer.x),\n y: this.canvas._YconvertDOMtoCanvas(pointer.y),\n };\n } else if (node !== undefined && this.options.dragNodes === true) {\n this.drag.nodeId = node.id;\n // select the clicked node if not yet selected\n if (node.isSelected() === false) {\n this.selectionHandler.setSelection({ nodes: [node.id] });\n }\n\n // after select to contain the node\n this.selectionHandler.generateClickEvent(\n \"dragStart\",\n event,\n this.drag.pointer\n );\n\n // create an array with the selected nodes and their original location and status\n for (const node of this.selectionHandler.getSelectedNodes()) {\n const s = {\n id: node.id,\n node: node,\n\n // store original x, y, xFixed and yFixed, make the node temporarily Fixed\n x: node.x,\n y: node.y,\n xFixed: node.options.fixed.x,\n yFixed: node.options.fixed.y,\n };\n\n node.options.fixed.x = true;\n node.options.fixed.y = true;\n\n this.drag.selection.push(s);\n }\n } else {\n // fallback if no node is selected and thus the view is dragged.\n this.selectionHandler.generateClickEvent(\n \"dragStart\",\n event,\n this.drag.pointer,\n undefined,\n true\n );\n }\n }\n\n /**\n * handle drag event\n * @param {Event} event\n * @private\n */\n onDrag(event) {\n if (this.drag.pinched === true) {\n return;\n }\n\n // remove the focus on node if it is focussed on by the focusOnNode\n this.body.emitter.emit(\"unlockNode\");\n\n const pointer = this.getPointer(event.center);\n\n const selection = this.drag.selection;\n if (selection && selection.length && this.options.dragNodes === true) {\n this.selectionHandler.generateClickEvent(\"dragging\", event, pointer);\n\n // calculate delta's and new location\n const deltaX = pointer.x - this.drag.pointer.x;\n const deltaY = pointer.y - this.drag.pointer.y;\n\n // update position of all selected nodes\n selection.forEach((selection) => {\n const node = selection.node;\n // only move the node if it was not fixed initially\n if (selection.xFixed === false) {\n node.x = this.canvas._XconvertDOMtoCanvas(\n this.canvas._XconvertCanvasToDOM(selection.x) + deltaX\n );\n }\n // only move the node if it was not fixed initially\n if (selection.yFixed === false) {\n node.y = this.canvas._YconvertDOMtoCanvas(\n this.canvas._YconvertCanvasToDOM(selection.y) + deltaY\n );\n }\n });\n\n // start the simulation of the physics\n this.body.emitter.emit(\"startSimulation\");\n } else {\n // create selection box\n if (event.srcEvent.shiftKey) {\n this.selectionHandler.generateClickEvent(\n \"dragging\",\n event,\n pointer,\n undefined,\n true\n );\n\n // if the drag was not started properly because the click started outside the network div, start it now.\n if (this.drag.pointer === undefined) {\n this.onDragStart(event);\n return;\n }\n\n this.body.selectionBox.position.end = {\n x: this.canvas._XconvertDOMtoCanvas(pointer.x),\n y: this.canvas._YconvertDOMtoCanvas(pointer.y),\n };\n this.body.emitter.emit(\"_requestRedraw\");\n }\n\n // move the network\n if (this.options.dragView === true && !event.srcEvent.shiftKey) {\n this.selectionHandler.generateClickEvent(\n \"dragging\",\n event,\n pointer,\n undefined,\n true\n );\n\n // if the drag was not started properly because the click started outside the network div, start it now.\n if (this.drag.pointer === undefined) {\n this.onDragStart(event);\n return;\n }\n\n const diffX = pointer.x - this.drag.pointer.x;\n const diffY = pointer.y - this.drag.pointer.y;\n\n this.body.view.translation = {\n x: this.drag.translation.x + diffX,\n y: this.drag.translation.y + diffY,\n };\n this.body.emitter.emit(\"_requestRedraw\");\n }\n }\n }\n\n /**\n * handle drag start event\n * @param {Event} event\n * @private\n */\n onDragEnd(event) {\n this.drag.dragging = false;\n\n if (this.body.selectionBox.show) {\n this.body.selectionBox.show = false;\n const selectionBoxPosition = this.body.selectionBox.position;\n const selectionBoxPositionMinMax = {\n minX: Math.min(\n selectionBoxPosition.start.x,\n selectionBoxPosition.end.x\n ),\n minY: Math.min(\n selectionBoxPosition.start.y,\n selectionBoxPosition.end.y\n ),\n maxX: Math.max(\n selectionBoxPosition.start.x,\n selectionBoxPosition.end.x\n ),\n maxY: Math.max(\n selectionBoxPosition.start.y,\n selectionBoxPosition.end.y\n ),\n };\n\n const toBeSelectedNodes = this.body.nodeIndices.filter((nodeId) => {\n const node = this.body.nodes[nodeId];\n return (\n node.x >= selectionBoxPositionMinMax.minX &&\n node.x <= selectionBoxPositionMinMax.maxX &&\n node.y >= selectionBoxPositionMinMax.minY &&\n node.y <= selectionBoxPositionMinMax.maxY\n );\n });\n\n toBeSelectedNodes.forEach((nodeId) =>\n this.selectionHandler.selectObject(this.body.nodes[nodeId])\n );\n\n const pointer = this.getPointer(event.center);\n this.selectionHandler.commitAndEmit(pointer, event);\n this.selectionHandler.generateClickEvent(\n \"dragEnd\",\n event,\n this.getPointer(event.center),\n undefined,\n true\n );\n this.body.emitter.emit(\"_requestRedraw\");\n } else {\n const selection = this.drag.selection;\n if (selection && selection.length) {\n selection.forEach(function (s) {\n // restore original xFixed and yFixed\n s.node.options.fixed.x = s.xFixed;\n s.node.options.fixed.y = s.yFixed;\n });\n this.selectionHandler.generateClickEvent(\n \"dragEnd\",\n event,\n this.getPointer(event.center)\n );\n this.body.emitter.emit(\"startSimulation\");\n } else {\n this.selectionHandler.generateClickEvent(\n \"dragEnd\",\n event,\n this.getPointer(event.center),\n undefined,\n true\n );\n this.body.emitter.emit(\"_requestRedraw\");\n }\n }\n }\n\n /**\n * Handle pinch event\n * @param {Event} event The event\n * @private\n */\n onPinch(event) {\n const pointer = this.getPointer(event.center);\n\n this.drag.pinched = true;\n if (this.pinch[\"scale\"] === undefined) {\n this.pinch.scale = 1;\n }\n\n // TODO: enabled moving while pinching?\n const scale = this.pinch.scale * event.scale;\n this.zoom(scale, pointer);\n }\n\n /**\n * Zoom the network in or out\n * @param {number} scale a number around 1, and between 0.01 and 10\n * @param {{x: number, y: number}} pointer Position on screen\n * @private\n */\n zoom(scale, pointer) {\n if (this.options.zoomView === true) {\n const scaleOld = this.body.view.scale;\n if (scale < 0.00001) {\n scale = 0.00001;\n }\n if (scale > 10) {\n scale = 10;\n }\n\n let preScaleDragPointer = undefined;\n if (this.drag !== undefined) {\n if (this.drag.dragging === true) {\n preScaleDragPointer = this.canvas.DOMtoCanvas(this.drag.pointer);\n }\n }\n // + this.canvas.frame.canvas.clientHeight / 2\n const translation = this.body.view.translation;\n\n const scaleFrac = scale / scaleOld;\n const tx = (1 - scaleFrac) * pointer.x + translation.x * scaleFrac;\n const ty = (1 - scaleFrac) * pointer.y + translation.y * scaleFrac;\n\n this.body.view.scale = scale;\n this.body.view.translation = { x: tx, y: ty };\n\n if (preScaleDragPointer != undefined) {\n const postScaleDragPointer =\n this.canvas.canvasToDOM(preScaleDragPointer);\n this.drag.pointer.x = postScaleDragPointer.x;\n this.drag.pointer.y = postScaleDragPointer.y;\n }\n\n this.body.emitter.emit(\"_requestRedraw\");\n\n if (scaleOld < scale) {\n this.body.emitter.emit(\"zoom\", {\n direction: \"+\",\n scale: this.body.view.scale,\n pointer: pointer,\n });\n } else {\n this.body.emitter.emit(\"zoom\", {\n direction: \"-\",\n scale: this.body.view.scale,\n pointer: pointer,\n });\n }\n }\n }\n\n /**\n * Event handler for mouse wheel event, used to zoom the timeline\n * See http://adomas.org/javascript-mouse-wheel/\n * https://github.com/EightMedia/hammer.js/issues/256\n * @param {MouseEvent} event\n * @private\n */\n onMouseWheel(event) {\n if (this.options.zoomView === true) {\n // If delta is nonzero, handle it.\n // Basically, delta is now positive if wheel was scrolled up,\n // and negative, if wheel was scrolled down.\n if (event.deltaY !== 0) {\n // calculate the new scale\n let scale = this.body.view.scale;\n scale *=\n 1 + (event.deltaY < 0 ? 1 : -1) * (this.options.zoomSpeed * 0.1);\n\n // calculate the pointer location\n const pointer = this.getPointer({ x: event.clientX, y: event.clientY });\n\n // apply the new scale\n this.zoom(scale, pointer);\n }\n\n // Prevent default actions caused by mouse wheel.\n event.preventDefault();\n }\n }\n\n /**\n * Mouse move handler for checking whether the title moves over a node with a title.\n * @param {Event} event\n * @private\n */\n onMouseMove(event) {\n const pointer = this.getPointer({ x: event.clientX, y: event.clientY });\n let popupVisible = false;\n\n // check if the previously selected node is still selected\n if (this.popup !== undefined) {\n if (this.popup.hidden === false) {\n this._checkHidePopup(pointer);\n }\n\n // if the popup was not hidden above\n if (this.popup.hidden === false) {\n popupVisible = true;\n this.popup.setPosition(pointer.x + 3, pointer.y - 5);\n this.popup.show();\n }\n }\n\n // if we bind the keyboard to the div, we have to highlight it to use it. This highlights it on mouse over.\n if (\n this.options.keyboard.autoFocus &&\n this.options.keyboard.bindToWindow === false &&\n this.options.keyboard.enabled === true\n ) {\n this.canvas.frame.focus();\n }\n\n // start a timeout that will check if the mouse is positioned above an element\n if (popupVisible === false) {\n if (this.popupTimer !== undefined) {\n clearInterval(this.popupTimer); // stop any running calculationTimer\n this.popupTimer = undefined;\n }\n if (!this.drag.dragging) {\n this.popupTimer = setTimeout(\n () => this._checkShowPopup(pointer),\n this.options.tooltipDelay\n );\n }\n }\n\n // adding hover highlights\n if (this.options.hover === true) {\n this.selectionHandler.hoverObject(event, pointer);\n }\n }\n\n /**\n * Check if there is an element on the given position in the network\n * (a node or edge). If so, and if this element has a title,\n * show a popup window with its title.\n * @param {{x:number, y:number}} pointer\n * @private\n */\n _checkShowPopup(pointer) {\n const x = this.canvas._XconvertDOMtoCanvas(pointer.x);\n const y = this.canvas._YconvertDOMtoCanvas(pointer.y);\n const pointerObj = {\n left: x,\n top: y,\n right: x,\n bottom: y,\n };\n\n const previousPopupObjId =\n this.popupObj === undefined ? undefined : this.popupObj.id;\n let nodeUnderCursor = false;\n let popupType = \"node\";\n\n // check if a node is under the cursor.\n if (this.popupObj === undefined) {\n // search the nodes for overlap, select the top one in case of multiple nodes\n const nodeIndices = this.body.nodeIndices;\n const nodes = this.body.nodes;\n let node;\n const overlappingNodes = [];\n for (let i = 0; i < nodeIndices.length; i++) {\n node = nodes[nodeIndices[i]];\n if (node.isOverlappingWith(pointerObj) === true) {\n nodeUnderCursor = true;\n if (node.getTitle() !== undefined) {\n overlappingNodes.push(nodeIndices[i]);\n }\n }\n }\n\n if (overlappingNodes.length > 0) {\n // if there are overlapping nodes, select the last one, this is the one which is drawn on top of the others\n this.popupObj = nodes[overlappingNodes[overlappingNodes.length - 1]];\n // if you hover over a node, the title of the edge is not supposed to be shown.\n nodeUnderCursor = true;\n }\n }\n\n if (this.popupObj === undefined && nodeUnderCursor === false) {\n // search the edges for overlap\n const edgeIndices = this.body.edgeIndices;\n const edges = this.body.edges;\n let edge;\n const overlappingEdges = [];\n for (let i = 0; i < edgeIndices.length; i++) {\n edge = edges[edgeIndices[i]];\n if (edge.isOverlappingWith(pointerObj) === true) {\n if (edge.connected === true && edge.getTitle() !== undefined) {\n overlappingEdges.push(edgeIndices[i]);\n }\n }\n }\n\n if (overlappingEdges.length > 0) {\n this.popupObj = edges[overlappingEdges[overlappingEdges.length - 1]];\n popupType = \"edge\";\n }\n }\n\n if (this.popupObj !== undefined) {\n // show popup message window\n if (this.popupObj.id !== previousPopupObjId) {\n if (this.popup === undefined) {\n this.popup = new Popup(this.canvas.frame);\n }\n\n this.popup.popupTargetType = popupType;\n this.popup.popupTargetId = this.popupObj.id;\n\n // adjust a small offset such that the mouse cursor is located in the\n // bottom left location of the popup, and you can easily move over the\n // popup area\n this.popup.setPosition(pointer.x + 3, pointer.y - 5);\n this.popup.setText(this.popupObj.getTitle());\n this.popup.show();\n this.body.emitter.emit(\"showPopup\", this.popupObj.id);\n }\n } else {\n if (this.popup !== undefined) {\n this.popup.hide();\n this.body.emitter.emit(\"hidePopup\");\n }\n }\n }\n\n /**\n * Check if the popup must be hidden, which is the case when the mouse is no\n * longer hovering on the object\n * @param {{x:number, y:number}} pointer\n * @private\n */\n _checkHidePopup(pointer) {\n const pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n\n let stillOnObj = false;\n if (this.popup.popupTargetType === \"node\") {\n if (this.body.nodes[this.popup.popupTargetId] !== undefined) {\n stillOnObj =\n this.body.nodes[this.popup.popupTargetId].isOverlappingWith(\n pointerObj\n );\n\n // if the mouse is still one the node, we have to check if it is not also on one that is drawn on top of it.\n // we initially only check stillOnObj because this is much faster.\n if (stillOnObj === true) {\n const overNode = this.selectionHandler.getNodeAt(pointer);\n stillOnObj =\n overNode === undefined\n ? false\n : overNode.id === this.popup.popupTargetId;\n }\n }\n } else {\n if (this.selectionHandler.getNodeAt(pointer) === undefined) {\n if (this.body.edges[this.popup.popupTargetId] !== undefined) {\n stillOnObj =\n this.body.edges[this.popup.popupTargetId].isOverlappingWith(\n pointerObj\n );\n }\n }\n }\n\n if (stillOnObj === false) {\n this.popupObj = undefined;\n this.popup.hide();\n this.body.emitter.emit(\"hidePopup\");\n }\n }\n}\n\nexport default InteractionHandler;\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar getWeakData = require('../internals/internal-metadata').getWeakData;\nvar anInstance = require('../internals/an-instance');\nvar anObject = require('../internals/an-object');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar isObject = require('../internals/is-object');\nvar iterate = require('../internals/iterate');\nvar ArrayIterationModule = require('../internals/array-iteration');\nvar hasOwn = require('../internals/has-own-property');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\nvar find = ArrayIterationModule.find;\nvar findIndex = ArrayIterationModule.findIndex;\nvar splice = uncurryThis([].splice);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (state) {\n return state.frozen || (state.frozen = new UncaughtFrozenStore());\n};\n\nvar UncaughtFrozenStore = function () {\n this.entries = [];\n};\n\nvar findUncaughtFrozen = function (store, key) {\n return find(store.entries, function (it) {\n return it[0] === key;\n });\n};\n\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.entries.push([key, value]);\n },\n 'delete': function (key) {\n var index = findIndex(this.entries, function (it) {\n return it[0] === key;\n });\n if (~index) splice(this.entries, index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n id: id++,\n frozen: undefined\n });\n if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var data = getWeakData(anObject(key), true);\n if (data === true) uncaughtFrozenStore(state).set(key, value);\n else data[state.id] = value;\n return that;\n };\n\n defineBuiltIns(Prototype, {\n // `{ WeakMap, WeakSet }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-weakmap.prototype.delete\n // https://tc39.es/ecma262/#sec-weakset.prototype.delete\n 'delete': function (key) {\n var state = getInternalState(this);\n if (!isObject(key)) return false;\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state)['delete'](key);\n return data && hasOwn(data, state.id) && delete data[state.id];\n },\n // `{ WeakMap, WeakSet }.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-weakmap.prototype.has\n // https://tc39.es/ecma262/#sec-weakset.prototype.has\n has: function has(key) {\n var state = getInternalState(this);\n if (!isObject(key)) return false;\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state).has(key);\n return data && hasOwn(data, state.id);\n }\n });\n\n defineBuiltIns(Prototype, IS_MAP ? {\n // `WeakMap.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-weakmap.prototype.get\n get: function get(key) {\n var state = getInternalState(this);\n if (isObject(key)) {\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state).get(key);\n return data ? data[state.id] : undefined;\n }\n },\n // `WeakMap.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-weakmap.prototype.set\n set: function set(key, value) {\n return define(this, key, value);\n }\n } : {\n // `WeakSet.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-weakset.prototype.add\n add: function add(value) {\n return define(this, value, true);\n }\n });\n\n return Constructor;\n }\n};\n","'use strict';\nvar FREEZING = require('../internals/freezing');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar collection = require('../internals/collection');\nvar collectionWeak = require('../internals/collection-weak');\nvar isObject = require('../internals/is-object');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar fails = require('../internals/fails');\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\n\nvar $Object = Object;\n// eslint-disable-next-line es/no-array-isarray -- safe\nvar isArray = Array.isArray;\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar isExtensible = $Object.isExtensible;\n// eslint-disable-next-line es/no-object-isfrozen -- safe\nvar isFrozen = $Object.isFrozen;\n// eslint-disable-next-line es/no-object-issealed -- safe\nvar isSealed = $Object.isSealed;\n// eslint-disable-next-line es/no-object-freeze -- safe\nvar freeze = $Object.freeze;\n// eslint-disable-next-line es/no-object-seal -- safe\nvar seal = $Object.seal;\n\nvar FROZEN = {};\nvar SEALED = {};\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar InternalWeakMap;\n\nvar wrapper = function (init) {\n return function WeakMap() {\n return init(this, arguments.length ? arguments[0] : undefined);\n };\n};\n\n// `WeakMap` constructor\n// https://tc39.es/ecma262/#sec-weakmap-constructor\nvar $WeakMap = collection('WeakMap', wrapper, collectionWeak);\nvar WeakMapPrototype = $WeakMap.prototype;\nvar nativeSet = uncurryThis(WeakMapPrototype.set);\n\n// Chakra Edge bug: adding frozen arrays to WeakMap unfreeze them\nvar hasMSEdgeFreezingBug = function () {\n return FREEZING && fails(function () {\n var frozenArray = freeze([]);\n nativeSet(new $WeakMap(), frozenArray, 1);\n return !isFrozen(frozenArray);\n });\n};\n\n// IE11 WeakMap frozen keys fix\n// We can't use feature detection because it crash some old IE builds\n// https://github.com/zloirock/core-js/issues/485\nif (NATIVE_WEAK_MAP) if (IS_IE11) {\n InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true);\n InternalMetadataModule.enable();\n var nativeDelete = uncurryThis(WeakMapPrototype['delete']);\n var nativeHas = uncurryThis(WeakMapPrototype.has);\n var nativeGet = uncurryThis(WeakMapPrototype.get);\n defineBuiltIns(WeakMapPrototype, {\n 'delete': function (key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeDelete(this, key) || state.frozen['delete'](key);\n } return nativeDelete(this, key);\n },\n has: function has(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas(this, key) || state.frozen.has(key);\n } return nativeHas(this, key);\n },\n get: function get(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas(this, key) ? nativeGet(this, key) : state.frozen.get(key);\n } return nativeGet(this, key);\n },\n set: function set(key, value) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n nativeHas(this, key) ? nativeSet(this, key, value) : state.frozen.set(key, value);\n } else nativeSet(this, key, value);\n return this;\n }\n });\n// Chakra Edge frozen keys fix\n} else if (hasMSEdgeFreezingBug()) {\n defineBuiltIns(WeakMapPrototype, {\n set: function set(key, value) {\n var arrayIntegrityLevel;\n if (isArray(key)) {\n if (isFrozen(key)) arrayIntegrityLevel = FROZEN;\n else if (isSealed(key)) arrayIntegrityLevel = SEALED;\n }\n nativeSet(this, key, value);\n if (arrayIntegrityLevel === FROZEN) freeze(key);\n if (arrayIntegrityLevel === SEALED) seal(key);\n return this;\n }\n });\n}\n","'use strict';\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.weak-map');\nvar path = require('../../internals/path');\n\nmodule.exports = path.WeakMap;\n","export interface Selectable {\n select(): void;\n unselect(): void;\n}\n\ninterface SingleTypeSelectionAccumulatorChanges {\n added: T[];\n deleted: T[];\n previous: T[];\n current: T[];\n}\n\n/**\n * @param prev\n * @param next\n */\nfunction diffSets(prev: ReadonlySet, next: ReadonlySet): Set {\n const diff = new Set();\n for (const item of next) {\n if (!prev.has(item)) {\n diff.add(item);\n }\n }\n return diff;\n}\n\nclass SingleTypeSelectionAccumulator {\n #previousSelection: ReadonlySet = new Set();\n #selection: Set = new Set();\n\n public get size(): number {\n return this.#selection.size;\n }\n\n public add(...items: readonly T[]): void {\n for (const item of items) {\n this.#selection.add(item);\n }\n }\n public delete(...items: readonly T[]): void {\n for (const item of items) {\n this.#selection.delete(item);\n }\n }\n public clear(): void {\n this.#selection.clear();\n }\n\n public getSelection(): T[] {\n return [...this.#selection];\n }\n\n public getChanges(): SingleTypeSelectionAccumulatorChanges {\n return {\n added: [...diffSets(this.#previousSelection, this.#selection)],\n deleted: [...diffSets(this.#selection, this.#previousSelection)],\n previous: [...new Set(this.#previousSelection)],\n current: [...new Set(this.#selection)],\n };\n }\n\n public commit(): SingleTypeSelectionAccumulatorChanges {\n const changes = this.getChanges();\n\n this.#previousSelection = this.#selection;\n this.#selection = new Set(this.#previousSelection);\n\n for (const item of changes.added) {\n item.select();\n }\n for (const item of changes.deleted) {\n item.unselect();\n }\n\n return changes;\n }\n}\n\n// TODO: These should be real types imported from node.ts and edge.ts that don't\n// exist yet.\ninterface Node extends Selectable {\n $: \"node\";\n}\ninterface Edge extends Selectable {\n $: \"edge\";\n}\n\nexport interface SelectionAccumulatorCommitSummary {\n nodes: SingleTypeSelectionAccumulatorChanges;\n edges: SingleTypeSelectionAccumulatorChanges;\n}\n\nexport type SelectionAccumulatorCommitHandler<\n CommitArgs extends readonly any[]\n> = (summary: SelectionAccumulatorCommitSummary, ...rest: CommitArgs) => void;\n\nexport class SelectionAccumulator {\n #nodes = new SingleTypeSelectionAccumulator();\n #edges = new SingleTypeSelectionAccumulator();\n\n readonly #commitHandler: SelectionAccumulatorCommitHandler;\n\n public constructor(\n commitHandler: SelectionAccumulatorCommitHandler = (): void => {}\n ) {\n this.#commitHandler = commitHandler;\n }\n\n public get sizeNodes(): number {\n return this.#nodes.size;\n }\n public get sizeEdges(): number {\n return this.#edges.size;\n }\n\n public getNodes(): Node[] {\n return this.#nodes.getSelection();\n }\n public getEdges(): Edge[] {\n return this.#edges.getSelection();\n }\n\n public addNodes(...nodes: readonly Node[]): void {\n this.#nodes.add(...nodes);\n }\n public addEdges(...edges: readonly Edge[]): void {\n this.#edges.add(...edges);\n }\n\n public deleteNodes(node: Node): void {\n this.#nodes.delete(node);\n }\n public deleteEdges(edge: Edge): void {\n this.#edges.delete(edge);\n }\n\n public clear(): void {\n this.#nodes.clear();\n this.#edges.clear();\n }\n\n public commit(...rest: CommitArgs): SelectionAccumulatorCommitSummary {\n const summary = {\n nodes: this.#nodes.commit(),\n edges: this.#edges.commit(),\n };\n this.#commitHandler(summary, ...rest);\n return summary;\n }\n}\n","import Node from \"./components/Node\";\nimport Edge from \"./components/Edge\";\nimport { SelectionAccumulator } from \"./selection\";\n\nimport { selectiveDeepExtend } from \"vis-util/esnext\";\n\n/**\n * The handler for selections\n */\nclass SelectionHandler {\n /**\n * @param {object} body\n * @param {Canvas} canvas\n */\n constructor(body, canvas) {\n this.body = body;\n this.canvas = canvas;\n // TODO: Consider firing an event on any change to the selection, not\n // only those caused by clicks and taps. It would be easy to implement\n // now and (at least to me) it seems like something that could be\n // quite useful.\n this._selectionAccumulator = new SelectionAccumulator();\n this.hoverObj = { nodes: {}, edges: {} };\n\n this.options = {};\n this.defaultOptions = {\n multiselect: false,\n selectable: true,\n selectConnectedEdges: true,\n hoverConnectedEdges: true,\n };\n Object.assign(this.options, this.defaultOptions);\n\n this.body.emitter.on(\"_dataChanged\", () => {\n this.updateSelection();\n });\n }\n\n /**\n *\n * @param {object} [options]\n */\n setOptions(options) {\n if (options !== undefined) {\n const fields = [\n \"multiselect\",\n \"hoverConnectedEdges\",\n \"selectable\",\n \"selectConnectedEdges\",\n ];\n selectiveDeepExtend(fields, this.options, options);\n }\n }\n\n /**\n * handles the selection part of the tap;\n * @param {{x: number, y: number}} pointer\n * @returns {boolean}\n */\n selectOnPoint(pointer) {\n let selected = false;\n if (this.options.selectable === true) {\n const obj = this.getNodeAt(pointer) || this.getEdgeAt(pointer);\n\n // unselect after getting the objects in order to restore width and height.\n this.unselectAll();\n\n if (obj !== undefined) {\n selected = this.selectObject(obj);\n }\n this.body.emitter.emit(\"_requestRedraw\");\n }\n return selected;\n }\n\n /**\n *\n * @param {{x: number, y: number}} pointer\n * @returns {boolean}\n */\n selectAdditionalOnPoint(pointer) {\n let selectionChanged = false;\n if (this.options.selectable === true) {\n const obj = this.getNodeAt(pointer) || this.getEdgeAt(pointer);\n\n if (obj !== undefined) {\n selectionChanged = true;\n if (obj.isSelected() === true) {\n this.deselectObject(obj);\n } else {\n this.selectObject(obj);\n }\n\n this.body.emitter.emit(\"_requestRedraw\");\n }\n }\n return selectionChanged;\n }\n\n /**\n * Create an object containing the standard fields for an event.\n * @param {Event} event\n * @param {{x: number, y: number}} pointer Object with the x and y screen coordinates of the mouse\n * @returns {{}}\n * @private\n */\n _initBaseEvent(event, pointer) {\n const properties = {};\n\n properties[\"pointer\"] = {\n DOM: { x: pointer.x, y: pointer.y },\n canvas: this.canvas.DOMtoCanvas(pointer),\n };\n properties[\"event\"] = event;\n\n return properties;\n }\n\n /**\n * Generate an event which the user can catch.\n *\n * This adds some extra data to the event with respect to cursor position and\n * selected nodes and edges.\n * @param {string} eventType Name of event to send\n * @param {Event} event\n * @param {{x: number, y: number}} pointer Object with the x and y screen coordinates of the mouse\n * @param {object | undefined} oldSelection If present, selection state before event occured\n * @param {boolean|undefined} [emptySelection] Indicate if selection data should be passed\n */\n generateClickEvent(\n eventType,\n event,\n pointer,\n oldSelection,\n emptySelection = false\n ) {\n const properties = this._initBaseEvent(event, pointer);\n\n if (emptySelection === true) {\n properties.nodes = [];\n properties.edges = [];\n } else {\n const tmp = this.getSelection();\n properties.nodes = tmp.nodes;\n properties.edges = tmp.edges;\n }\n\n if (oldSelection !== undefined) {\n properties[\"previousSelection\"] = oldSelection;\n }\n\n if (eventType == \"click\") {\n // For the time being, restrict this functionality to\n // just the click event.\n properties.items = this.getClickedItems(pointer);\n }\n\n if (event.controlEdge !== undefined) {\n properties.controlEdge = event.controlEdge;\n }\n\n this.body.emitter.emit(eventType, properties);\n }\n\n /**\n *\n * @param {object} obj\n * @param {boolean} [highlightEdges]\n * @returns {boolean}\n */\n selectObject(obj, highlightEdges = this.options.selectConnectedEdges) {\n if (obj !== undefined) {\n if (obj instanceof Node) {\n if (highlightEdges === true) {\n this._selectionAccumulator.addEdges(...obj.edges);\n }\n this._selectionAccumulator.addNodes(obj);\n } else {\n this._selectionAccumulator.addEdges(obj);\n }\n return true;\n }\n return false;\n }\n\n /**\n *\n * @param {object} obj\n */\n deselectObject(obj) {\n if (obj.isSelected() === true) {\n obj.selected = false;\n this._removeFromSelection(obj);\n }\n }\n\n /**\n * retrieve all nodes overlapping with given object\n * @param {object} object An object with parameters left, top, right, bottom\n * @returns {number[]} An array with id's of the overlapping nodes\n * @private\n */\n _getAllNodesOverlappingWith(object) {\n const overlappingNodes = [];\n const nodes = this.body.nodes;\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const nodeId = this.body.nodeIndices[i];\n if (nodes[nodeId].isOverlappingWith(object)) {\n overlappingNodes.push(nodeId);\n }\n }\n return overlappingNodes;\n }\n\n /**\n * Return a position object in canvasspace from a single point in screenspace\n * @param {{x: number, y: number}} pointer\n * @returns {{left: number, top: number, right: number, bottom: number}}\n * @private\n */\n _pointerToPositionObject(pointer) {\n const canvasPos = this.canvas.DOMtoCanvas(pointer);\n return {\n left: canvasPos.x - 1,\n top: canvasPos.y + 1,\n right: canvasPos.x + 1,\n bottom: canvasPos.y - 1,\n };\n }\n\n /**\n * Get the top node at the passed point (like a click)\n * @param {{x: number, y: number}} pointer\n * @param {boolean} [returnNode]\n * @returns {Node | undefined} node\n */\n getNodeAt(pointer, returnNode = true) {\n // we first check if this is an navigation controls element\n const positionObject = this._pointerToPositionObject(pointer);\n const overlappingNodes = this._getAllNodesOverlappingWith(positionObject);\n // if there are overlapping nodes, select the last one, this is the\n // one which is drawn on top of the others\n if (overlappingNodes.length > 0) {\n if (returnNode === true) {\n return this.body.nodes[overlappingNodes[overlappingNodes.length - 1]];\n } else {\n return overlappingNodes[overlappingNodes.length - 1];\n }\n } else {\n return undefined;\n }\n }\n\n /**\n * retrieve all edges overlapping with given object, selector is around center\n * @param {object} object An object with parameters left, top, right, bottom\n * @param {number[]} overlappingEdges An array with id's of the overlapping nodes\n * @private\n */\n _getEdgesOverlappingWith(object, overlappingEdges) {\n const edges = this.body.edges;\n for (let i = 0; i < this.body.edgeIndices.length; i++) {\n const edgeId = this.body.edgeIndices[i];\n if (edges[edgeId].isOverlappingWith(object)) {\n overlappingEdges.push(edgeId);\n }\n }\n }\n\n /**\n * retrieve all nodes overlapping with given object\n * @param {object} object An object with parameters left, top, right, bottom\n * @returns {number[]} An array with id's of the overlapping nodes\n * @private\n */\n _getAllEdgesOverlappingWith(object) {\n const overlappingEdges = [];\n this._getEdgesOverlappingWith(object, overlappingEdges);\n return overlappingEdges;\n }\n\n /**\n * Get the edges nearest to the passed point (like a click)\n * @param {{x: number, y: number}} pointer\n * @param {boolean} [returnEdge]\n * @returns {Edge | undefined} node\n */\n getEdgeAt(pointer, returnEdge = true) {\n // Iterate over edges, pick closest within 10\n const canvasPos = this.canvas.DOMtoCanvas(pointer);\n let mindist = 10;\n let overlappingEdge = null;\n const edges = this.body.edges;\n for (let i = 0; i < this.body.edgeIndices.length; i++) {\n const edgeId = this.body.edgeIndices[i];\n const edge = edges[edgeId];\n if (edge.connected) {\n const xFrom = edge.from.x;\n const yFrom = edge.from.y;\n const xTo = edge.to.x;\n const yTo = edge.to.y;\n const dist = edge.edgeType.getDistanceToEdge(\n xFrom,\n yFrom,\n xTo,\n yTo,\n canvasPos.x,\n canvasPos.y\n );\n if (dist < mindist) {\n overlappingEdge = edgeId;\n mindist = dist;\n }\n }\n }\n if (overlappingEdge !== null) {\n if (returnEdge === true) {\n return this.body.edges[overlappingEdge];\n } else {\n return overlappingEdge;\n }\n } else {\n return undefined;\n }\n }\n\n /**\n * Add object to the selection array.\n * @param {object} obj\n * @private\n */\n _addToHover(obj) {\n if (obj instanceof Node) {\n this.hoverObj.nodes[obj.id] = obj;\n } else {\n this.hoverObj.edges[obj.id] = obj;\n }\n }\n\n /**\n * Remove a single option from selection.\n * @param {object} obj\n * @private\n */\n _removeFromSelection(obj) {\n if (obj instanceof Node) {\n this._selectionAccumulator.deleteNodes(obj);\n this._selectionAccumulator.deleteEdges(...obj.edges);\n } else {\n this._selectionAccumulator.deleteEdges(obj);\n }\n }\n\n /**\n * Unselect all nodes and edges.\n */\n unselectAll() {\n this._selectionAccumulator.clear();\n }\n\n /**\n * return the number of selected nodes\n * @returns {number}\n */\n getSelectedNodeCount() {\n return this._selectionAccumulator.sizeNodes;\n }\n\n /**\n * return the number of selected edges\n * @returns {number}\n */\n getSelectedEdgeCount() {\n return this._selectionAccumulator.sizeEdges;\n }\n\n /**\n * select the edges connected to the node that is being selected\n * @param {Node} node\n * @private\n */\n _hoverConnectedEdges(node) {\n for (let i = 0; i < node.edges.length; i++) {\n const edge = node.edges[i];\n edge.hover = true;\n this._addToHover(edge);\n }\n }\n\n /**\n * Remove the highlight from a node or edge, in response to mouse movement\n * @param {Event} event\n * @param {{x: number, y: number}} pointer object with the x and y screen coordinates of the mouse\n * @param {Node|vis.Edge} object\n * @private\n */\n emitBlurEvent(event, pointer, object) {\n const properties = this._initBaseEvent(event, pointer);\n\n if (object.hover === true) {\n object.hover = false;\n if (object instanceof Node) {\n properties.node = object.id;\n this.body.emitter.emit(\"blurNode\", properties);\n } else {\n properties.edge = object.id;\n this.body.emitter.emit(\"blurEdge\", properties);\n }\n }\n }\n\n /**\n * Create the highlight for a node or edge, in response to mouse movement\n * @param {Event} event\n * @param {{x: number, y: number}} pointer object with the x and y screen coordinates of the mouse\n * @param {Node|vis.Edge} object\n * @returns {boolean} hoverChanged\n * @private\n */\n emitHoverEvent(event, pointer, object) {\n const properties = this._initBaseEvent(event, pointer);\n let hoverChanged = false;\n\n if (object.hover === false) {\n object.hover = true;\n this._addToHover(object);\n hoverChanged = true;\n if (object instanceof Node) {\n properties.node = object.id;\n this.body.emitter.emit(\"hoverNode\", properties);\n } else {\n properties.edge = object.id;\n this.body.emitter.emit(\"hoverEdge\", properties);\n }\n }\n\n return hoverChanged;\n }\n\n /**\n * Perform actions in response to a mouse movement.\n * @param {Event} event\n * @param {{x: number, y: number}} pointer | object with the x and y screen coordinates of the mouse\n */\n hoverObject(event, pointer) {\n let object = this.getNodeAt(pointer);\n if (object === undefined) {\n object = this.getEdgeAt(pointer);\n }\n\n let hoverChanged = false;\n // remove all node hover highlights\n for (const nodeId in this.hoverObj.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.hoverObj.nodes, nodeId)) {\n if (\n object === undefined ||\n (object instanceof Node && object.id != nodeId) ||\n object instanceof Edge\n ) {\n this.emitBlurEvent(event, pointer, this.hoverObj.nodes[nodeId]);\n delete this.hoverObj.nodes[nodeId];\n hoverChanged = true;\n }\n }\n }\n\n // removing all edge hover highlights\n for (const edgeId in this.hoverObj.edges) {\n if (Object.prototype.hasOwnProperty.call(this.hoverObj.edges, edgeId)) {\n // if the hover has been changed here it means that the node has been hovered over or off\n // we then do not use the emitBlurEvent method here.\n if (hoverChanged === true) {\n this.hoverObj.edges[edgeId].hover = false;\n delete this.hoverObj.edges[edgeId];\n }\n // if the blur remains the same and the object is undefined (mouse off) or another\n // edge has been hovered, or another node has been hovered we blur the edge.\n else if (\n object === undefined ||\n (object instanceof Edge && object.id != edgeId) ||\n (object instanceof Node && !object.hover)\n ) {\n this.emitBlurEvent(event, pointer, this.hoverObj.edges[edgeId]);\n delete this.hoverObj.edges[edgeId];\n hoverChanged = true;\n }\n }\n }\n\n if (object !== undefined) {\n const hoveredEdgesCount = Object.keys(this.hoverObj.edges).length;\n const hoveredNodesCount = Object.keys(this.hoverObj.nodes).length;\n const newOnlyHoveredEdge =\n object instanceof Edge &&\n hoveredEdgesCount === 0 &&\n hoveredNodesCount === 0;\n const newOnlyHoveredNode =\n object instanceof Node &&\n hoveredEdgesCount === 0 &&\n hoveredNodesCount === 0;\n\n if (hoverChanged || newOnlyHoveredEdge || newOnlyHoveredNode) {\n hoverChanged = this.emitHoverEvent(event, pointer, object);\n }\n\n if (object instanceof Node && this.options.hoverConnectedEdges === true) {\n this._hoverConnectedEdges(object);\n }\n }\n\n if (hoverChanged === true) {\n this.body.emitter.emit(\"_requestRedraw\");\n }\n }\n\n /**\n * Commit the selection changes but don't emit any events.\n */\n commitWithoutEmitting() {\n this._selectionAccumulator.commit();\n }\n\n /**\n * Select and deselect nodes depending current selection change.\n *\n * For changing nodes, select/deselect events are fired.\n *\n * NOTE: For a given edge, if one connecting node is deselected and with the\n * same click the other node is selected, no events for the edge will fire. It\n * was selected and it will remain selected.\n * @param {{x: number, y: number}} pointer - The x and y coordinates of the\n * click, tap, dragend… that triggered this.\n * @param {UIEvent} event - The event that triggered this.\n */\n commitAndEmit(pointer, event) {\n let selected = false;\n\n const selectionChanges = this._selectionAccumulator.commit();\n const previousSelection = {\n nodes: selectionChanges.nodes.previous,\n edges: selectionChanges.edges.previous,\n };\n\n if (selectionChanges.edges.deleted.length > 0) {\n this.generateClickEvent(\n \"deselectEdge\",\n event,\n pointer,\n previousSelection\n );\n selected = true;\n }\n\n if (selectionChanges.nodes.deleted.length > 0) {\n this.generateClickEvent(\n \"deselectNode\",\n event,\n pointer,\n previousSelection\n );\n selected = true;\n }\n\n if (selectionChanges.nodes.added.length > 0) {\n this.generateClickEvent(\"selectNode\", event, pointer);\n selected = true;\n }\n\n if (selectionChanges.edges.added.length > 0) {\n this.generateClickEvent(\"selectEdge\", event, pointer);\n selected = true;\n }\n\n // fire the select event if anything has been selected or deselected\n if (selected === true) {\n // select or unselect\n this.generateClickEvent(\"select\", event, pointer);\n }\n }\n\n /**\n * Retrieve the currently selected node and edge ids.\n * @returns {{nodes: Array., edges: Array.}} Arrays with the\n * ids of the selected nodes and edges.\n */\n getSelection() {\n return {\n nodes: this.getSelectedNodeIds(),\n edges: this.getSelectedEdgeIds(),\n };\n }\n\n /**\n * Retrieve the currently selected nodes.\n * @returns {Array} An array with selected nodes.\n */\n getSelectedNodes() {\n return this._selectionAccumulator.getNodes();\n }\n\n /**\n * Retrieve the currently selected edges.\n * @returns {Array} An array with selected edges.\n */\n getSelectedEdges() {\n return this._selectionAccumulator.getEdges();\n }\n\n /**\n * Retrieve the currently selected node ids.\n * @returns {Array} An array with the ids of the selected nodes.\n */\n getSelectedNodeIds() {\n return this._selectionAccumulator.getNodes().map((node) => node.id);\n }\n\n /**\n * Retrieve the currently selected edge ids.\n * @returns {Array} An array with the ids of the selected edges.\n */\n getSelectedEdgeIds() {\n return this._selectionAccumulator.getEdges().map((edge) => edge.id);\n }\n\n /**\n * Updates the current selection\n * @param {{nodes: Array., edges: Array.}} selection\n * @param {object} options Options\n */\n setSelection(selection, options = {}) {\n if (!selection || (!selection.nodes && !selection.edges)) {\n throw new TypeError(\n \"Selection must be an object with nodes and/or edges properties\"\n );\n }\n\n // first unselect any selected node, if option is true or undefined\n if (options.unselectAll || options.unselectAll === undefined) {\n this.unselectAll();\n }\n if (selection.nodes) {\n for (const id of selection.nodes) {\n const node = this.body.nodes[id];\n if (!node) {\n throw new RangeError('Node with id \"' + id + '\" not found');\n }\n // don't select edges with it\n this.selectObject(node, options.highlightEdges);\n }\n }\n\n if (selection.edges) {\n for (const id of selection.edges) {\n const edge = this.body.edges[id];\n if (!edge) {\n throw new RangeError('Edge with id \"' + id + '\" not found');\n }\n this.selectObject(edge);\n }\n }\n this.body.emitter.emit(\"_requestRedraw\");\n this._selectionAccumulator.commit();\n }\n\n /**\n * select zero or more nodes with the option to highlight edges\n * @param {number[] | string[]} selection An array with the ids of the\n * selected nodes.\n * @param {boolean} [highlightEdges]\n */\n selectNodes(selection, highlightEdges = true) {\n if (!selection || selection.length === undefined)\n throw \"Selection must be an array with ids\";\n\n this.setSelection({ nodes: selection }, { highlightEdges: highlightEdges });\n }\n\n /**\n * select zero or more edges\n * @param {number[] | string[]} selection An array with the ids of the\n * selected nodes.\n */\n selectEdges(selection) {\n if (!selection || selection.length === undefined)\n throw \"Selection must be an array with ids\";\n\n this.setSelection({ edges: selection });\n }\n\n /**\n * Validate the selection: remove ids of nodes which no longer exist\n * @private\n */\n updateSelection() {\n for (const node in this._selectionAccumulator.getNodes()) {\n if (!Object.prototype.hasOwnProperty.call(this.body.nodes, node.id)) {\n this._selectionAccumulator.deleteNodes(node);\n }\n }\n for (const edge in this._selectionAccumulator.getEdges()) {\n if (!Object.prototype.hasOwnProperty.call(this.body.edges, edge.id)) {\n this._selectionAccumulator.deleteEdges(edge);\n }\n }\n }\n\n /**\n * Determine all the visual elements clicked which are on the given point.\n *\n * All elements are returned; this includes nodes, edges and their labels.\n * The order returned is from highest to lowest, i.e. element 0 of the return\n * value is the topmost item clicked on.\n *\n * The return value consists of an array of the following possible elements:\n *\n * - `{nodeId:number}` - node with given id clicked on\n * - `{nodeId:number, labelId:0}` - label of node with given id clicked on\n * - `{edgeId:number}` - edge with given id clicked on\n * - `{edge:number, labelId:0}` - label of edge with given id clicked on\n *\n * ## NOTES\n *\n * - Currently, there is only one label associated with a node or an edge,\n * but this is expected to change somewhere in the future.\n * - Since there is no z-indexing yet, it is not really possible to set the nodes and\n * edges in the correct order. For the time being, nodes come first.\n * @param {point} pointer mouse position in screen coordinates\n * @returns {Array.}\n * @private\n */\n getClickedItems(pointer) {\n const point = this.canvas.DOMtoCanvas(pointer);\n const items = [];\n\n // Note reverse order; we want the topmost clicked items to be first in the array\n // Also note that selected nodes are disregarded here; these normally display on top\n const nodeIndices = this.body.nodeIndices;\n const nodes = this.body.nodes;\n for (let i = nodeIndices.length - 1; i >= 0; i--) {\n const node = nodes[nodeIndices[i]];\n const ret = node.getItemsOnPoint(point);\n items.push.apply(items, ret); // Append the return value to the running list.\n }\n\n const edgeIndices = this.body.edgeIndices;\n const edges = this.body.edges;\n for (let i = edgeIndices.length - 1; i >= 0; i--) {\n const edge = edges[edgeIndices[i]];\n const ret = edge.getItemsOnPoint(point);\n items.push.apply(items, ret); // Append the return value to the running list.\n }\n\n return items;\n }\n}\n\nexport default SelectionHandler;\n","/**\n * Helper classes for LayoutEngine.\n *\n * Strategy pattern for usage of direction methods for hierarchical layouts.\n */\n\n/**\n * Interface definition for direction strategy classes.\n *\n * This class describes the interface for the Strategy\n * pattern classes used to differentiate horizontal and vertical\n * direction of hierarchical results.\n *\n * For a given direction, one coordinate will be 'fixed', meaning that it is\n * determined by level.\n * The other coordinate is 'unfixed', meaning that the nodes on a given level\n * can still move along that coordinate. So:\n *\n * - `vertical` layout: `x` unfixed, `y` fixed per level\n * - `horizontal` layout: `x` fixed per level, `y` unfixed\n *\n * The local methods are stubs and should be regarded as abstract.\n * Derived classes **must** implement all the methods themselves.\n * @private\n */\nclass DirectionInterface {\n /**\n * @ignore\n */\n abstract() {\n throw new Error(\"Can't instantiate abstract class!\");\n }\n\n /**\n * This is a dummy call which is used to suppress the jsdoc errors of type:\n *\n * \"'param' is assigned a value but never used\"\n * @ignore\n */\n fake_use() {\n // Do nothing special\n }\n\n /**\n * Type to use to translate dynamic curves to, in the case of hierarchical layout.\n * Dynamic curves do not work for these.\n *\n * The value should be perpendicular to the actual direction of the layout.\n * @returns {string} Direction, either 'vertical' or 'horizontal'\n */\n curveType() {\n return this.abstract();\n }\n\n /**\n * Return the value of the coordinate that is not fixed for this direction.\n * @param {Node} node The node to read\n * @returns {number} Value of the unfixed coordinate\n */\n getPosition(node) {\n this.fake_use(node);\n return this.abstract();\n }\n\n /**\n * Set the value of the coordinate that is not fixed for this direction.\n * @param {Node} node The node to adjust\n * @param {number} position\n * @param {number} [level] if specified, the hierarchy level that this node should be fixed to\n */\n setPosition(node, position, level = undefined) {\n this.fake_use(node, position, level);\n this.abstract();\n }\n\n /**\n * Get the width of a tree.\n *\n * A `tree` here is a subset of nodes within the network which are not connected to other nodes,\n * only among themselves. In essence, it is a sub-network.\n * @param {number} index The index number of a tree\n * @returns {number} the width of a tree in the view coordinates\n */\n getTreeSize(index) {\n this.fake_use(index);\n return this.abstract();\n }\n\n /**\n * Sort array of nodes on the unfixed coordinates.\n *\n * Note:** chrome has non-stable sorting implementation, which\n * has a tendency to change the order of the array items,\n * even if the custom sort function returns 0.\n *\n * For this reason, an external sort implementation is used,\n * which has the added benefit of being faster than the standard\n * platforms implementation. This has been verified on `node.js`,\n * `firefox` and `chrome` (all linux).\n * @param {Array.} nodeArray array of nodes to sort\n */\n sort(nodeArray) {\n this.fake_use(nodeArray);\n this.abstract();\n }\n\n /**\n * Assign the fixed coordinate of the node to the given level\n * @param {Node} node The node to adjust\n * @param {number} level The level to fix to\n */\n fix(node, level) {\n this.fake_use(node, level);\n this.abstract();\n }\n\n /**\n * Add an offset to the unfixed coordinate of the given node.\n * @param {NodeId} nodeId Id of the node to adjust\n * @param {number} diff Offset to add to the unfixed coordinate\n */\n shift(nodeId, diff) {\n this.fake_use(nodeId, diff);\n this.abstract();\n }\n}\n\n/**\n * Vertical Strategy\n *\n * Coordinate `y` is fixed on levels, coordinate `x` is unfixed.\n * @augments DirectionInterface\n * @private\n */\nclass VerticalStrategy extends DirectionInterface {\n /**\n * Constructor\n * @param {object} layout reference to the parent LayoutEngine instance.\n */\n constructor(layout) {\n super();\n this.layout = layout;\n }\n\n /** @inheritDoc */\n curveType() {\n return \"horizontal\";\n }\n\n /** @inheritDoc */\n getPosition(node) {\n return node.x;\n }\n\n /** @inheritDoc */\n setPosition(node, position, level = undefined) {\n if (level !== undefined) {\n this.layout.hierarchical.addToOrdering(node, level);\n }\n node.x = position;\n }\n\n /** @inheritDoc */\n getTreeSize(index) {\n const res = this.layout.hierarchical.getTreeSize(\n this.layout.body.nodes,\n index\n );\n return { min: res.min_x, max: res.max_x };\n }\n\n /** @inheritDoc */\n sort(nodeArray) {\n nodeArray.sort(function (a, b) {\n return a.x - b.x;\n });\n }\n\n /** @inheritDoc */\n fix(node, level) {\n node.y = this.layout.options.hierarchical.levelSeparation * level;\n node.options.fixed.y = true;\n }\n\n /** @inheritDoc */\n shift(nodeId, diff) {\n this.layout.body.nodes[nodeId].x += diff;\n }\n}\n\n/**\n * Horizontal Strategy\n *\n * Coordinate `x` is fixed on levels, coordinate `y` is unfixed.\n * @augments DirectionInterface\n * @private\n */\nclass HorizontalStrategy extends DirectionInterface {\n /**\n * Constructor\n * @param {object} layout reference to the parent LayoutEngine instance.\n */\n constructor(layout) {\n super();\n this.layout = layout;\n }\n\n /** @inheritDoc */\n curveType() {\n return \"vertical\";\n }\n\n /** @inheritDoc */\n getPosition(node) {\n return node.y;\n }\n\n /** @inheritDoc */\n setPosition(node, position, level = undefined) {\n if (level !== undefined) {\n this.layout.hierarchical.addToOrdering(node, level);\n }\n node.y = position;\n }\n\n /** @inheritDoc */\n getTreeSize(index) {\n const res = this.layout.hierarchical.getTreeSize(\n this.layout.body.nodes,\n index\n );\n return { min: res.min_y, max: res.max_y };\n }\n\n /** @inheritDoc */\n sort(nodeArray) {\n nodeArray.sort(function (a, b) {\n return a.y - b.y;\n });\n }\n\n /** @inheritDoc */\n fix(node, level) {\n node.x = this.layout.options.hierarchical.levelSeparation * level;\n node.options.fixed.x = true;\n }\n\n /** @inheritDoc */\n shift(nodeId, diff) {\n this.layout.body.nodes[nodeId].y += diff;\n }\n}\n\nexport { HorizontalStrategy, VerticalStrategy };\n","'use strict';\nvar $ = require('../internals/export');\nvar $every = require('../internals/array-iteration').every;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('every');\n\n// `Array.prototype.every` method\n// https://tc39.es/ecma262/#sec-array.prototype.every\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, {\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.every');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').every;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/every');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.every;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.every) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/every');\n\nmodule.exports = parent;\n","type Levels = Record;\ntype Id = string | number;\ninterface Edge {\n connected: boolean;\n from: Node;\n fromId: Id;\n to: Node;\n toId: Id;\n}\ninterface Node {\n id: Id;\n edges: Edge[];\n}\n\n/**\n * Try to assign levels to nodes according to their positions in the cyclic “hierarchy”.\n * @param nodes - Visible nodes of the graph.\n * @param levels - If present levels will be added to it, if not a new object will be created.\n * @returns Populated node levels.\n */\nfunction fillLevelsByDirectionCyclic(\n nodes: Map,\n levels: Levels\n): Levels {\n const edges = new Set();\n nodes.forEach((node): void => {\n node.edges.forEach((edge): void => {\n if (edge.connected) {\n edges.add(edge);\n }\n });\n });\n\n edges.forEach((edge): void => {\n const fromId = edge.from.id;\n const toId = edge.to.id;\n\n if (levels[fromId] == null) {\n levels[fromId] = 0;\n }\n\n if (levels[toId] == null || levels[fromId] >= levels[toId]) {\n levels[toId] = levels[fromId] + 1;\n }\n });\n\n return levels;\n}\n\n/**\n * Assign levels to nodes according to their positions in the hierarchy. Leaves will be lined up at the bottom and all other nodes as close to their children as possible.\n * @param nodes - Visible nodes of the graph.\n * @returns Populated node levels.\n */\nexport function fillLevelsByDirectionLeaves(nodes: Map): Levels {\n return fillLevelsByDirection(\n // Pick only leaves (nodes without children).\n (node): boolean =>\n node.edges\n // Take only visible nodes into account.\n .filter((edge): boolean => nodes.has(edge.toId))\n // Check that all edges lead to this node (leaf).\n .every((edge): boolean => edge.to === node),\n // Use the lowest level.\n (newLevel, oldLevel): boolean => oldLevel > newLevel,\n // Go against the direction of the edges.\n \"from\",\n nodes\n );\n}\n\n/**\n * Assign levels to nodes according to their positions in the hierarchy. Roots will be lined up at the top and all nodes as close to their parents as possible.\n * @param nodes - Visible nodes of the graph.\n * @returns Populated node levels.\n */\nexport function fillLevelsByDirectionRoots(nodes: Map): Levels {\n return fillLevelsByDirection(\n // Pick only roots (nodes without parents).\n (node): boolean =>\n node.edges\n // Take only visible nodes into account.\n .filter((edge): boolean => nodes.has(edge.toId))\n // Check that all edges lead from this node (root).\n .every((edge): boolean => edge.from === node),\n // Use the highest level.\n (newLevel, oldLevel): boolean => oldLevel < newLevel,\n // Go in the direction of the edges.\n \"to\",\n nodes\n );\n}\n\n/**\n * Assign levels to nodes according to their positions in the hierarchy.\n * @param isEntryNode - Checks and return true if the graph should be traversed from this node.\n * @param shouldLevelBeReplaced - Checks and returns true if the level of given node should be updated to the new value.\n * @param direction - Wheter the graph should be traversed in the direction of the edges `\"to\"` or in the other way `\"from\"`.\n * @param nodes - Visible nodes of the graph.\n * @returns Populated node levels.\n */\nfunction fillLevelsByDirection(\n isEntryNode: (node: Node) => boolean,\n shouldLevelBeReplaced: (newLevel: number, oldLevel: number) => boolean,\n direction: \"to\" | \"from\",\n nodes: Map\n): Levels {\n const levels = Object.create(null);\n\n // If acyclic, the graph can be walked through with (most likely way) fewer\n // steps than the number bellow. The exact value isn't too important as long\n // as it's quick to compute (doesn't impact acyclic graphs too much), is\n // higher than the number of steps actually needed (doesn't cut off before\n // acyclic graph is walked through) and prevents infinite loops (cuts off for\n // cyclic graphs).\n const limit = [...nodes.values()].reduce(\n (acc, node): number => acc + 1 + node.edges.length,\n 0\n );\n\n const edgeIdProp: \"fromId\" | \"toId\" = (direction + \"Id\") as \"fromId\" | \"toId\";\n const newLevelDiff = direction === \"to\" ? 1 : -1;\n\n for (const [entryNodeId, entryNode] of nodes) {\n if (\n // Skip if the node is not visible.\n !nodes.has(entryNodeId) ||\n // Skip if the node is not an entry node.\n !isEntryNode(entryNode)\n ) {\n continue;\n }\n\n // Line up all the entry nodes on level 0.\n levels[entryNodeId] = 0;\n\n const stack: Node[] = [entryNode];\n let done = 0;\n let node: Node | undefined;\n while ((node = stack.pop())) {\n if (!nodes.has(entryNodeId)) {\n // Skip if the node is not visible.\n continue;\n }\n\n const newLevel = levels[node.id] + newLevelDiff;\n\n node.edges\n .filter(\n (edge): boolean =>\n // Ignore disconnected edges.\n edge.connected &&\n // Ignore circular edges.\n edge.to !== edge.from &&\n // Ignore edges leading to the node that's currently being processed.\n edge[direction] !== node &&\n // Ignore edges connecting to an invisible node.\n nodes.has(edge.toId) &&\n // Ignore edges connecting from an invisible node.\n nodes.has(edge.fromId)\n )\n .forEach((edge): void => {\n const targetNodeId = edge[edgeIdProp];\n const oldLevel = levels[targetNodeId];\n\n if (oldLevel == null || shouldLevelBeReplaced(newLevel, oldLevel)) {\n levels[targetNodeId] = newLevel;\n stack.push(edge[direction]);\n }\n });\n\n if (done > limit) {\n // This would run forever on a cyclic graph.\n return fillLevelsByDirectionCyclic(nodes, levels);\n } else {\n ++done;\n }\n }\n }\n\n return levels;\n}\n","/**\n * There's a mix-up with terms in the code. Following are the formal definitions:\n *\n * tree - a strict hierarchical network, i.e. every node has at most one parent\n * forest - a collection of trees. These distinct trees are thus not connected.\n *\n * So:\n * - in a network that is not a tree, there exist nodes with multiple parents.\n * - a network consisting of unconnected sub-networks, of which at least one\n * is not a tree, is not a forest.\n *\n * In the code, the definitions are:\n *\n * tree - any disconnected sub-network, strict hierarchical or not.\n * forest - a bunch of these sub-networks\n *\n * The difference between tree and not-tree is important in the code, notably within\n * to the block-shifting algorithm. The algorithm assumes formal trees and fails\n * for not-trees, often in a spectacular manner (search for 'exploding network' in the issues).\n *\n * In order to distinguish the definitions in the following code, the adjective 'formal' is\n * used. If 'formal' is absent, you must assume the non-formal definition.\n *\n * ----------------------------------------------------------------------------------\n * NOTES\n * =====\n *\n * A hierarchical layout is a different thing from a hierarchical network.\n * The layout is a way to arrange the nodes in the view; this can be done\n * on non-hierarchical networks as well. The converse is also possible.\n */\n\"use strict\";\nimport {\n Alea,\n deepExtend,\n forEach,\n mergeOptions,\n selectiveDeepExtend,\n} from \"vis-util/esnext\";\nimport NetworkUtil from \"../NetworkUtil\";\nimport {\n HorizontalStrategy,\n VerticalStrategy,\n} from \"./components/DirectionStrategy.js\";\nimport {\n fillLevelsByDirectionLeaves,\n fillLevelsByDirectionRoots,\n} from \"./layout-engine\";\n\n/**\n * Container for derived data on current network, relating to hierarchy.\n * @private\n */\nclass HierarchicalStatus {\n /**\n * @ignore\n */\n constructor() {\n this.childrenReference = {}; // child id's per node id\n this.parentReference = {}; // parent id's per node id\n this.trees = {}; // tree id per node id; i.e. to which tree does given node id belong\n\n this.distributionOrdering = {}; // The nodes per level, in the display order\n this.levels = {}; // hierarchy level per node id\n this.distributionIndex = {}; // The position of the node in the level sorting order, per node id.\n\n this.isTree = false; // True if current network is a formal tree\n this.treeIndex = -1; // Highest tree id in current network.\n }\n\n /**\n * Add the relation between given nodes to the current state.\n * @param {Node.id} parentNodeId\n * @param {Node.id} childNodeId\n */\n addRelation(parentNodeId, childNodeId) {\n if (this.childrenReference[parentNodeId] === undefined) {\n this.childrenReference[parentNodeId] = [];\n }\n this.childrenReference[parentNodeId].push(childNodeId);\n\n if (this.parentReference[childNodeId] === undefined) {\n this.parentReference[childNodeId] = [];\n }\n this.parentReference[childNodeId].push(parentNodeId);\n }\n\n /**\n * Check if the current state is for a formal tree or formal forest.\n *\n * This is the case if every node has at most one parent.\n *\n * Pre: parentReference init'ed properly for current network\n */\n checkIfTree() {\n for (const i in this.parentReference) {\n if (this.parentReference[i].length > 1) {\n this.isTree = false;\n return;\n }\n }\n\n this.isTree = true;\n }\n\n /**\n * Return the number of separate trees in the current network.\n * @returns {number}\n */\n numTrees() {\n return this.treeIndex + 1; // This assumes the indexes are assigned consecitively\n }\n\n /**\n * Assign a tree id to a node\n * @param {Node} node\n * @param {string|number} treeId\n */\n setTreeIndex(node, treeId) {\n if (treeId === undefined) return; // Don't bother\n\n if (this.trees[node.id] === undefined) {\n this.trees[node.id] = treeId;\n this.treeIndex = Math.max(treeId, this.treeIndex);\n }\n }\n\n /**\n * Ensure level for given id is defined.\n *\n * Sets level to zero for given node id if not already present\n * @param {Node.id} nodeId\n */\n ensureLevel(nodeId) {\n if (this.levels[nodeId] === undefined) {\n this.levels[nodeId] = 0;\n }\n }\n\n /**\n * get the maximum level of a branch.\n *\n * TODO: Never entered; find a test case to test this!\n * @param {Node.id} nodeId\n * @returns {number}\n */\n getMaxLevel(nodeId) {\n const accumulator = {};\n\n const _getMaxLevel = (nodeId) => {\n if (accumulator[nodeId] !== undefined) {\n return accumulator[nodeId];\n }\n let level = this.levels[nodeId];\n if (this.childrenReference[nodeId]) {\n const children = this.childrenReference[nodeId];\n if (children.length > 0) {\n for (let i = 0; i < children.length; i++) {\n level = Math.max(level, _getMaxLevel(children[i]));\n }\n }\n }\n accumulator[nodeId] = level;\n return level;\n };\n\n return _getMaxLevel(nodeId);\n }\n\n /**\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n */\n levelDownstream(nodeA, nodeB) {\n if (this.levels[nodeB.id] === undefined) {\n // set initial level\n if (this.levels[nodeA.id] === undefined) {\n this.levels[nodeA.id] = 0;\n }\n // set level\n this.levels[nodeB.id] = this.levels[nodeA.id] + 1;\n }\n }\n\n /**\n * Small util method to set the minimum levels of the nodes to zero and\n * eliminate gaps (for cyclic).\n */\n setMinLevelToZero() {\n const remap = new Map();\n let newLevel = 0;\n const uniqueSortedLevels = [...new Set(Object.values(this.levels))].sort(\n (a, b) => a - b\n );\n\n for (const level of uniqueSortedLevels) {\n remap.set(level, newLevel++);\n }\n\n for (const nodeId in this.levels) {\n if (Object.prototype.hasOwnProperty.call(this.levels, nodeId)) {\n this.levels[nodeId] = remap.get(this.levels[nodeId]);\n }\n }\n }\n\n /**\n * Get the min and max xy-coordinates of a given tree\n * @param {Array.} nodes\n * @param {number} index\n * @returns {{min_x: number, max_x: number, min_y: number, max_y: number}}\n */\n getTreeSize(nodes, index) {\n let min_x = 1e9;\n let max_x = -1e9;\n let min_y = 1e9;\n let max_y = -1e9;\n\n for (const nodeId in this.trees) {\n if (Object.prototype.hasOwnProperty.call(this.trees, nodeId)) {\n if (this.trees[nodeId] === index) {\n const node = nodes[nodeId];\n min_x = Math.min(node.x, min_x);\n max_x = Math.max(node.x, max_x);\n min_y = Math.min(node.y, min_y);\n max_y = Math.max(node.y, max_y);\n }\n }\n }\n\n return {\n min_x: min_x,\n max_x: max_x,\n min_y: min_y,\n max_y: max_y,\n };\n }\n\n /**\n * Check if two nodes have the same parent(s)\n * @param {Node} node1\n * @param {Node} node2\n * @returns {boolean} true if the two nodes have a same ancestor node, false otherwise\n */\n hasSameParent(node1, node2) {\n const parents1 = this.parentReference[node1.id];\n const parents2 = this.parentReference[node2.id];\n if (parents1 === undefined || parents2 === undefined) {\n return false;\n }\n\n for (let i = 0; i < parents1.length; i++) {\n for (let j = 0; j < parents2.length; j++) {\n if (parents1[i] == parents2[j]) {\n return true;\n }\n }\n }\n return false;\n }\n\n /**\n * Check if two nodes are in the same tree.\n * @param {Node} node1\n * @param {Node} node2\n * @returns {boolean} true if this is so, false otherwise\n */\n inSameSubNetwork(node1, node2) {\n return this.trees[node1.id] === this.trees[node2.id];\n }\n\n /**\n * Get a list of the distinct levels in the current network\n * @returns {Array}\n */\n getLevels() {\n return Object.keys(this.distributionOrdering);\n }\n\n /**\n * Add a node to the ordering per level\n * @param {Node} node\n * @param {number} level\n */\n addToOrdering(node, level) {\n if (this.distributionOrdering[level] === undefined) {\n this.distributionOrdering[level] = [];\n }\n\n let isPresent = false;\n const curLevel = this.distributionOrdering[level];\n for (const n in curLevel) {\n //if (curLevel[n].id === node.id) {\n if (curLevel[n] === node) {\n isPresent = true;\n break;\n }\n }\n\n if (!isPresent) {\n this.distributionOrdering[level].push(node);\n this.distributionIndex[node.id] =\n this.distributionOrdering[level].length - 1;\n }\n }\n}\n\n/**\n * The Layout Engine\n */\nclass LayoutEngine {\n /**\n * @param {object} body\n */\n constructor(body) {\n this.body = body;\n\n // Make sure there always is some RNG because the setOptions method won't\n // set it unless there's a seed for it.\n this._resetRNG(Math.random() + \":\" + Date.now());\n\n this.setPhysics = false;\n this.options = {};\n this.optionsBackup = { physics: {} };\n\n this.defaultOptions = {\n randomSeed: undefined,\n improvedLayout: true,\n clusterThreshold: 150,\n hierarchical: {\n enabled: false,\n levelSeparation: 150,\n nodeSpacing: 100,\n treeSpacing: 200,\n blockShifting: true,\n edgeMinimization: true,\n parentCentralization: true,\n direction: \"UD\", // UD, DU, LR, RL\n sortMethod: \"hubsize\", // hubsize, directed\n },\n };\n Object.assign(this.options, this.defaultOptions);\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n this.body.emitter.on(\"_dataChanged\", () => {\n this.setupHierarchicalLayout();\n });\n this.body.emitter.on(\"_dataLoaded\", () => {\n this.layoutNetwork();\n });\n this.body.emitter.on(\"_resetHierarchicalLayout\", () => {\n this.setupHierarchicalLayout();\n });\n this.body.emitter.on(\"_adjustEdgesForHierarchicalLayout\", () => {\n if (this.options.hierarchical.enabled !== true) {\n return;\n }\n // get the type of static smooth curve in case it is required\n const type = this.direction.curveType();\n\n // force all edges into static smooth curves.\n this.body.emitter.emit(\"_forceDisableDynamicCurves\", type, false);\n });\n }\n\n /**\n *\n * @param {object} options\n * @param {object} allOptions\n * @returns {object}\n */\n setOptions(options, allOptions) {\n if (options !== undefined) {\n const hierarchical = this.options.hierarchical;\n const prevHierarchicalState = hierarchical.enabled;\n selectiveDeepExtend(\n [\"randomSeed\", \"improvedLayout\", \"clusterThreshold\"],\n this.options,\n options\n );\n mergeOptions(this.options, options, \"hierarchical\");\n\n if (options.randomSeed !== undefined) {\n this._resetRNG(options.randomSeed);\n }\n\n if (hierarchical.enabled === true) {\n if (prevHierarchicalState === true) {\n // refresh the overridden options for nodes and edges.\n this.body.emitter.emit(\"refresh\", true);\n }\n\n // make sure the level separation is the right way up\n if (\n hierarchical.direction === \"RL\" ||\n hierarchical.direction === \"DU\"\n ) {\n if (hierarchical.levelSeparation > 0) {\n hierarchical.levelSeparation *= -1;\n }\n } else {\n if (hierarchical.levelSeparation < 0) {\n hierarchical.levelSeparation *= -1;\n }\n }\n\n this.setDirectionStrategy();\n\n this.body.emitter.emit(\"_resetHierarchicalLayout\");\n // because the hierarchical system needs it's own physics and smooth curve settings,\n // we adapt the other options if needed.\n return this.adaptAllOptionsForHierarchicalLayout(allOptions);\n } else {\n if (prevHierarchicalState === true) {\n // refresh the overridden options for nodes and edges.\n this.body.emitter.emit(\"refresh\");\n return deepExtend(allOptions, this.optionsBackup);\n }\n }\n }\n return allOptions;\n }\n\n /**\n * Reset the random number generator with given seed.\n * @param {any} seed - The seed that will be forwarded the the RNG.\n */\n _resetRNG(seed) {\n this.initialRandomSeed = seed;\n this._rng = Alea(this.initialRandomSeed);\n }\n\n /**\n *\n * @param {object} allOptions\n * @returns {object}\n */\n adaptAllOptionsForHierarchicalLayout(allOptions) {\n if (this.options.hierarchical.enabled === true) {\n const backupPhysics = this.optionsBackup.physics;\n\n // set the physics\n if (allOptions.physics === undefined || allOptions.physics === true) {\n allOptions.physics = {\n enabled:\n backupPhysics.enabled === undefined ? true : backupPhysics.enabled,\n solver: \"hierarchicalRepulsion\",\n };\n backupPhysics.enabled =\n backupPhysics.enabled === undefined ? true : backupPhysics.enabled;\n backupPhysics.solver = backupPhysics.solver || \"barnesHut\";\n } else if (typeof allOptions.physics === \"object\") {\n backupPhysics.enabled =\n allOptions.physics.enabled === undefined\n ? true\n : allOptions.physics.enabled;\n backupPhysics.solver = allOptions.physics.solver || \"barnesHut\";\n allOptions.physics.solver = \"hierarchicalRepulsion\";\n } else if (allOptions.physics !== false) {\n backupPhysics.solver = \"barnesHut\";\n allOptions.physics = { solver: \"hierarchicalRepulsion\" };\n }\n\n // get the type of static smooth curve in case it is required\n let type = this.direction.curveType();\n\n // disable smooth curves if nothing is defined. If smooth curves have been turned on,\n // turn them into static smooth curves.\n if (allOptions.edges === undefined) {\n this.optionsBackup.edges = {\n smooth: { enabled: true, type: \"dynamic\" },\n };\n allOptions.edges = { smooth: false };\n } else if (allOptions.edges.smooth === undefined) {\n this.optionsBackup.edges = {\n smooth: { enabled: true, type: \"dynamic\" },\n };\n allOptions.edges.smooth = false;\n } else {\n if (typeof allOptions.edges.smooth === \"boolean\") {\n this.optionsBackup.edges = { smooth: allOptions.edges.smooth };\n allOptions.edges.smooth = {\n enabled: allOptions.edges.smooth,\n type: type,\n };\n } else {\n const smooth = allOptions.edges.smooth;\n\n // allow custom types except for dynamic\n if (smooth.type !== undefined && smooth.type !== \"dynamic\") {\n type = smooth.type;\n }\n\n // TODO: this is options merging; see if the standard routines can be used here.\n this.optionsBackup.edges = {\n smooth: {\n enabled: smooth.enabled === undefined ? true : smooth.enabled,\n type: smooth.type === undefined ? \"dynamic\" : smooth.type,\n roundness:\n smooth.roundness === undefined ? 0.5 : smooth.roundness,\n forceDirection:\n smooth.forceDirection === undefined\n ? false\n : smooth.forceDirection,\n },\n };\n\n // NOTE: Copying an object to self; this is basically setting defaults for undefined variables\n allOptions.edges.smooth = {\n enabled: smooth.enabled === undefined ? true : smooth.enabled,\n type: type,\n roundness: smooth.roundness === undefined ? 0.5 : smooth.roundness,\n forceDirection:\n smooth.forceDirection === undefined\n ? false\n : smooth.forceDirection,\n };\n }\n }\n\n // Force all edges into static smooth curves.\n // Only applies to edges that do not use the global options for smooth.\n this.body.emitter.emit(\"_forceDisableDynamicCurves\", type);\n }\n\n return allOptions;\n }\n\n /**\n *\n * @param {Array.} nodesArray\n */\n positionInitially(nodesArray) {\n if (this.options.hierarchical.enabled !== true) {\n this._resetRNG(this.initialRandomSeed);\n const radius = nodesArray.length + 50;\n for (let i = 0; i < nodesArray.length; i++) {\n const node = nodesArray[i];\n const angle = 2 * Math.PI * this._rng();\n if (node.x === undefined) {\n node.x = radius * Math.cos(angle);\n }\n if (node.y === undefined) {\n node.y = radius * Math.sin(angle);\n }\n }\n }\n }\n\n /**\n * Use Kamada Kawai to position nodes. This is quite a heavy algorithm so if there are a lot of nodes we\n * cluster them first to reduce the amount.\n */\n layoutNetwork() {\n if (\n this.options.hierarchical.enabled !== true &&\n this.options.improvedLayout === true\n ) {\n const indices = this.body.nodeIndices;\n\n // first check if we should Kamada Kawai to layout. The threshold is if less than half of the visible\n // nodes have predefined positions we use this.\n let positionDefined = 0;\n for (let i = 0; i < indices.length; i++) {\n const node = this.body.nodes[indices[i]];\n if (node.predefinedPosition === true) {\n positionDefined += 1;\n }\n }\n\n // if less than half of the nodes have a predefined position we continue\n if (positionDefined < 0.5 * indices.length) {\n const MAX_LEVELS = 10;\n let level = 0;\n const clusterThreshold = this.options.clusterThreshold;\n\n //\n // Define the options for the hidden cluster nodes\n // These options don't propagate outside the clustering phase.\n //\n // Some options are explicitly disabled, because they may be set in group or default node options.\n // The clusters are never displayed, so most explicit settings here serve as performance optimizations.\n //\n // The explicit setting of 'shape' is to avoid `shape: 'image'`; images are not passed to the hidden\n // cluster nodes, leading to an exception on creation.\n //\n // All settings here are performance related, except when noted otherwise.\n //\n const clusterOptions = {\n clusterNodeProperties: {\n shape: \"ellipse\", // Bugfix: avoid type 'image', no images supplied\n label: \"\", // avoid label handling\n group: \"\", // avoid group handling\n font: { multi: false }, // avoid font propagation\n },\n clusterEdgeProperties: {\n label: \"\", // avoid label handling\n font: { multi: false }, // avoid font propagation\n smooth: {\n enabled: false, // avoid drawing penalty for complex edges\n },\n },\n };\n\n // if there are a lot of nodes, we cluster before we run the algorithm.\n // NOTE: this part fails to find clusters for large scale-free networks, which should\n // be easily clusterable.\n // TODO: examine why this is so\n if (indices.length > clusterThreshold) {\n const startLength = indices.length;\n while (indices.length > clusterThreshold && level <= MAX_LEVELS) {\n //console.time(\"clustering\")\n level += 1;\n const before = indices.length;\n // if there are many nodes we do a hubsize cluster\n if (level % 3 === 0) {\n this.body.modules.clustering.clusterBridges(clusterOptions);\n } else {\n this.body.modules.clustering.clusterOutliers(clusterOptions);\n }\n const after = indices.length;\n if (before == after && level % 3 !== 0) {\n this._declusterAll();\n this.body.emitter.emit(\"_layoutFailed\");\n console.info(\n \"This network could not be positioned by this version of the improved layout algorithm.\" +\n \" Please disable improvedLayout for better performance.\"\n );\n return;\n }\n //console.timeEnd(\"clustering\")\n //console.log(before,level,after);\n }\n // increase the size of the edges\n this.body.modules.kamadaKawai.setOptions({\n springLength: Math.max(150, 2 * startLength),\n });\n }\n if (level > MAX_LEVELS) {\n console.info(\n \"The clustering didn't succeed within the amount of interations allowed,\" +\n \" progressing with partial result.\"\n );\n }\n\n // position the system for these nodes and edges\n this.body.modules.kamadaKawai.solve(\n indices,\n this.body.edgeIndices,\n true\n );\n\n // shift to center point\n this._shiftToCenter();\n\n // perturb the nodes a little bit to force the physics to kick in\n const offset = 70;\n for (let i = 0; i < indices.length; i++) {\n // Only perturb the nodes that aren't fixed\n const node = this.body.nodes[indices[i]];\n if (node.predefinedPosition === false) {\n node.x += (0.5 - this._rng()) * offset;\n node.y += (0.5 - this._rng()) * offset;\n }\n }\n\n // uncluster all clusters\n this._declusterAll();\n\n // reposition all bezier nodes.\n this.body.emitter.emit(\"_repositionBezierNodes\");\n }\n }\n }\n\n /**\n * Move all the nodes towards to the center so gravitational pull wil not move the nodes away from view\n * @private\n */\n _shiftToCenter() {\n const range = NetworkUtil.getRangeCore(\n this.body.nodes,\n this.body.nodeIndices\n );\n const center = NetworkUtil.findCenter(range);\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const node = this.body.nodes[this.body.nodeIndices[i]];\n node.x -= center.x;\n node.y -= center.y;\n }\n }\n\n /**\n * Expands all clusters\n * @private\n */\n _declusterAll() {\n let clustersPresent = true;\n while (clustersPresent === true) {\n clustersPresent = false;\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n if (this.body.nodes[this.body.nodeIndices[i]].isCluster === true) {\n clustersPresent = true;\n this.body.modules.clustering.openCluster(\n this.body.nodeIndices[i],\n {},\n false\n );\n }\n }\n if (clustersPresent === true) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n }\n\n /**\n *\n * @returns {number|*}\n */\n getSeed() {\n return this.initialRandomSeed;\n }\n\n /**\n * This is the main function to layout the nodes in a hierarchical way.\n * It checks if the node details are supplied correctly\n * @private\n */\n setupHierarchicalLayout() {\n if (\n this.options.hierarchical.enabled === true &&\n this.body.nodeIndices.length > 0\n ) {\n // get the size of the largest hubs and check if the user has defined a level for a node.\n let node, nodeId;\n let definedLevel = false;\n let undefinedLevel = false;\n this.lastNodeOnLevel = {};\n this.hierarchical = new HierarchicalStatus();\n\n for (nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId)) {\n node = this.body.nodes[nodeId];\n if (node.options.level !== undefined) {\n definedLevel = true;\n this.hierarchical.levels[nodeId] = node.options.level;\n } else {\n undefinedLevel = true;\n }\n }\n }\n\n // if the user defined some levels but not all, alert and run without hierarchical layout\n if (undefinedLevel === true && definedLevel === true) {\n throw new Error(\n \"To use the hierarchical layout, nodes require either no predefined levels\" +\n \" or levels have to be defined for all nodes.\"\n );\n } else {\n // define levels if undefined by the users. Based on hubsize.\n if (undefinedLevel === true) {\n const sortMethod = this.options.hierarchical.sortMethod;\n if (sortMethod === \"hubsize\") {\n this._determineLevelsByHubsize();\n } else if (sortMethod === \"directed\") {\n this._determineLevelsDirected();\n } else if (sortMethod === \"custom\") {\n this._determineLevelsCustomCallback();\n }\n }\n\n // fallback for cases where there are nodes but no edges\n for (const nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId)) {\n this.hierarchical.ensureLevel(nodeId);\n }\n }\n // check the distribution of the nodes per level.\n const distribution = this._getDistribution();\n\n // get the parent children relations.\n this._generateMap();\n\n // place the nodes on the canvas.\n this._placeNodesByHierarchy(distribution);\n\n // condense the whitespace.\n this._condenseHierarchy();\n\n // shift to center so gravity does not have to do much\n this._shiftToCenter();\n }\n }\n }\n\n /**\n * @private\n */\n _condenseHierarchy() {\n // Global var in this scope to define when the movement has stopped.\n let stillShifting = false;\n const branches = {};\n // first we have some methods to help shifting trees around.\n // the main method to shift the trees\n const shiftTrees = () => {\n const treeSizes = getTreeSizes();\n let shiftBy = 0;\n for (let i = 0; i < treeSizes.length - 1; i++) {\n const diff = treeSizes[i].max - treeSizes[i + 1].min;\n shiftBy += diff + this.options.hierarchical.treeSpacing;\n shiftTree(i + 1, shiftBy);\n }\n };\n\n // shift a single tree by an offset\n const shiftTree = (index, offset) => {\n const trees = this.hierarchical.trees;\n\n for (const nodeId in trees) {\n if (Object.prototype.hasOwnProperty.call(trees, nodeId)) {\n if (trees[nodeId] === index) {\n this.direction.shift(nodeId, offset);\n }\n }\n }\n };\n\n // get the width of all trees\n const getTreeSizes = () => {\n const treeWidths = [];\n for (let i = 0; i < this.hierarchical.numTrees(); i++) {\n treeWidths.push(this.direction.getTreeSize(i));\n }\n return treeWidths;\n };\n\n // get a map of all nodes in this branch\n const getBranchNodes = (source, map) => {\n if (map[source.id]) {\n return;\n }\n map[source.id] = true;\n if (this.hierarchical.childrenReference[source.id]) {\n const children = this.hierarchical.childrenReference[source.id];\n if (children.length > 0) {\n for (let i = 0; i < children.length; i++) {\n getBranchNodes(this.body.nodes[children[i]], map);\n }\n }\n }\n };\n\n // get a min max width as well as the maximum movement space it has on either sides\n // we use min max terminology because width and height can interchange depending on the direction of the layout\n const getBranchBoundary = (branchMap, maxLevel = 1e9) => {\n let minSpace = 1e9;\n let maxSpace = 1e9;\n let min = 1e9;\n let max = -1e9;\n for (const branchNode in branchMap) {\n if (Object.prototype.hasOwnProperty.call(branchMap, branchNode)) {\n const node = this.body.nodes[branchNode];\n const level = this.hierarchical.levels[node.id];\n const position = this.direction.getPosition(node);\n\n // get the space around the node.\n const [minSpaceNode, maxSpaceNode] = this._getSpaceAroundNode(\n node,\n branchMap\n );\n minSpace = Math.min(minSpaceNode, minSpace);\n maxSpace = Math.min(maxSpaceNode, maxSpace);\n\n // the width is only relevant for the levels two nodes have in common. This is why we filter on this.\n if (level <= maxLevel) {\n min = Math.min(position, min);\n max = Math.max(position, max);\n }\n }\n }\n\n return [min, max, minSpace, maxSpace];\n };\n\n // check what the maximum level is these nodes have in common.\n const getCollisionLevel = (node1, node2) => {\n const maxLevel1 = this.hierarchical.getMaxLevel(node1.id);\n const maxLevel2 = this.hierarchical.getMaxLevel(node2.id);\n return Math.min(maxLevel1, maxLevel2);\n };\n\n /**\n * Condense elements. These can be nodes or branches depending on the callback.\n * @param {Function} callback\n * @param {Array.} levels\n * @param {*} centerParents\n */\n const shiftElementsCloser = (callback, levels, centerParents) => {\n const hier = this.hierarchical;\n\n for (let i = 0; i < levels.length; i++) {\n const level = levels[i];\n const levelNodes = hier.distributionOrdering[level];\n if (levelNodes.length > 1) {\n for (let j = 0; j < levelNodes.length - 1; j++) {\n const node1 = levelNodes[j];\n const node2 = levelNodes[j + 1];\n\n // NOTE: logic maintained as it was; if nodes have same ancestor,\n // then of course they are in the same sub-network.\n if (\n hier.hasSameParent(node1, node2) &&\n hier.inSameSubNetwork(node1, node2)\n ) {\n callback(node1, node2, centerParents);\n }\n }\n }\n }\n };\n\n // callback for shifting branches\n const branchShiftCallback = (node1, node2, centerParent = false) => {\n //window.CALLBACKS.push(() => {\n const pos1 = this.direction.getPosition(node1);\n const pos2 = this.direction.getPosition(node2);\n const diffAbs = Math.abs(pos2 - pos1);\n const nodeSpacing = this.options.hierarchical.nodeSpacing;\n //console.log(\"NOW CHECKING:\", node1.id, node2.id, diffAbs);\n if (diffAbs > nodeSpacing) {\n const branchNodes1 = {};\n const branchNodes2 = {};\n\n getBranchNodes(node1, branchNodes1);\n getBranchNodes(node2, branchNodes2);\n\n // check the largest distance between the branches\n const maxLevel = getCollisionLevel(node1, node2);\n const branchNodeBoundary1 = getBranchBoundary(branchNodes1, maxLevel);\n const branchNodeBoundary2 = getBranchBoundary(branchNodes2, maxLevel);\n const max1 = branchNodeBoundary1[1];\n const min2 = branchNodeBoundary2[0];\n const minSpace2 = branchNodeBoundary2[2];\n\n //console.log(node1.id, getBranchBoundary(branchNodes1, maxLevel), node2.id,\n // getBranchBoundary(branchNodes2, maxLevel), maxLevel);\n const diffBranch = Math.abs(max1 - min2);\n if (diffBranch > nodeSpacing) {\n let offset = max1 - min2 + nodeSpacing;\n if (offset < -minSpace2 + nodeSpacing) {\n offset = -minSpace2 + nodeSpacing;\n //console.log(\"RESETTING OFFSET\", max1 - min2 + this.options.hierarchical.nodeSpacing, -minSpace2, offset);\n }\n if (offset < 0) {\n //console.log(\"SHIFTING\", node2.id, offset);\n this._shiftBlock(node2.id, offset);\n stillShifting = true;\n\n if (centerParent === true) this._centerParent(node2);\n }\n }\n }\n //this.body.emitter.emit(\"_redraw\");})\n };\n\n const minimizeEdgeLength = (iterations, node) => {\n //window.CALLBACKS.push(() => {\n // console.log(\"ts\",node.id);\n const nodeId = node.id;\n const allEdges = node.edges;\n const nodeLevel = this.hierarchical.levels[node.id];\n\n // gather constants\n const C2 =\n this.options.hierarchical.levelSeparation *\n this.options.hierarchical.levelSeparation;\n const referenceNodes = {};\n const aboveEdges = [];\n for (let i = 0; i < allEdges.length; i++) {\n const edge = allEdges[i];\n if (edge.toId != edge.fromId) {\n const otherNode = edge.toId == nodeId ? edge.from : edge.to;\n referenceNodes[allEdges[i].id] = otherNode;\n if (this.hierarchical.levels[otherNode.id] < nodeLevel) {\n aboveEdges.push(edge);\n }\n }\n }\n\n // differentiated sum of lengths based on only moving one node over one axis\n const getFx = (point, edges) => {\n let sum = 0;\n for (let i = 0; i < edges.length; i++) {\n if (referenceNodes[edges[i].id] !== undefined) {\n const a =\n this.direction.getPosition(referenceNodes[edges[i].id]) - point;\n sum += a / Math.sqrt(a * a + C2);\n }\n }\n return sum;\n };\n\n // doubly differentiated sum of lengths based on only moving one node over one axis\n const getDFx = (point, edges) => {\n let sum = 0;\n for (let i = 0; i < edges.length; i++) {\n if (referenceNodes[edges[i].id] !== undefined) {\n const a =\n this.direction.getPosition(referenceNodes[edges[i].id]) - point;\n sum -= C2 * Math.pow(a * a + C2, -1.5);\n }\n }\n return sum;\n };\n\n const getGuess = (iterations, edges) => {\n let guess = this.direction.getPosition(node);\n // Newton's method for optimization\n const guessMap = {};\n for (let i = 0; i < iterations; i++) {\n const fx = getFx(guess, edges);\n const dfx = getDFx(guess, edges);\n\n // we limit the movement to avoid instability.\n const limit = 40;\n const ratio = Math.max(-limit, Math.min(limit, Math.round(fx / dfx)));\n guess = guess - ratio;\n // reduce duplicates\n if (guessMap[guess] !== undefined) {\n break;\n }\n guessMap[guess] = i;\n }\n return guess;\n };\n\n const moveBranch = (guess) => {\n // position node if there is space\n const nodePosition = this.direction.getPosition(node);\n\n // check movable area of the branch\n if (branches[node.id] === undefined) {\n const branchNodes = {};\n getBranchNodes(node, branchNodes);\n branches[node.id] = branchNodes;\n }\n const branchBoundary = getBranchBoundary(branches[node.id]);\n const minSpaceBranch = branchBoundary[2];\n const maxSpaceBranch = branchBoundary[3];\n\n const diff = guess - nodePosition;\n\n // check if we are allowed to move the node:\n let branchOffset = 0;\n if (diff > 0) {\n branchOffset = Math.min(\n diff,\n maxSpaceBranch - this.options.hierarchical.nodeSpacing\n );\n } else if (diff < 0) {\n branchOffset = -Math.min(\n -diff,\n minSpaceBranch - this.options.hierarchical.nodeSpacing\n );\n }\n\n if (branchOffset != 0) {\n //console.log(\"moving branch:\",branchOffset, maxSpaceBranch, minSpaceBranch)\n this._shiftBlock(node.id, branchOffset);\n //this.body.emitter.emit(\"_redraw\");\n stillShifting = true;\n }\n };\n\n const moveNode = (guess) => {\n const nodePosition = this.direction.getPosition(node);\n\n // position node if there is space\n const [minSpace, maxSpace] = this._getSpaceAroundNode(node);\n const diff = guess - nodePosition;\n // check if we are allowed to move the node:\n let newPosition = nodePosition;\n if (diff > 0) {\n newPosition = Math.min(\n nodePosition + (maxSpace - this.options.hierarchical.nodeSpacing),\n guess\n );\n } else if (diff < 0) {\n newPosition = Math.max(\n nodePosition - (minSpace - this.options.hierarchical.nodeSpacing),\n guess\n );\n }\n\n if (newPosition !== nodePosition) {\n //console.log(\"moving Node:\",diff, minSpace, maxSpace);\n this.direction.setPosition(node, newPosition);\n //this.body.emitter.emit(\"_redraw\");\n stillShifting = true;\n }\n };\n\n let guess = getGuess(iterations, aboveEdges);\n moveBranch(guess);\n guess = getGuess(iterations, allEdges);\n moveNode(guess);\n //})\n };\n\n // method to remove whitespace between branches. Because we do bottom up, we can center the parents.\n const minimizeEdgeLengthBottomUp = (iterations) => {\n let levels = this.hierarchical.getLevels();\n levels = levels.reverse();\n for (let i = 0; i < iterations; i++) {\n stillShifting = false;\n for (let j = 0; j < levels.length; j++) {\n const level = levels[j];\n const levelNodes = this.hierarchical.distributionOrdering[level];\n for (let k = 0; k < levelNodes.length; k++) {\n minimizeEdgeLength(1000, levelNodes[k]);\n }\n }\n if (stillShifting !== true) {\n //console.log(\"FINISHED minimizeEdgeLengthBottomUp IN \" + i);\n break;\n }\n }\n };\n\n // method to remove whitespace between branches. Because we do bottom up, we can center the parents.\n const shiftBranchesCloserBottomUp = (iterations) => {\n let levels = this.hierarchical.getLevels();\n levels = levels.reverse();\n for (let i = 0; i < iterations; i++) {\n stillShifting = false;\n shiftElementsCloser(branchShiftCallback, levels, true);\n if (stillShifting !== true) {\n //console.log(\"FINISHED shiftBranchesCloserBottomUp IN \" + (i+1));\n break;\n }\n }\n };\n\n // center all parents\n const centerAllParents = () => {\n for (const nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId))\n this._centerParent(this.body.nodes[nodeId]);\n }\n };\n\n // center all parents\n const centerAllParentsBottomUp = () => {\n let levels = this.hierarchical.getLevels();\n levels = levels.reverse();\n for (let i = 0; i < levels.length; i++) {\n const level = levels[i];\n const levelNodes = this.hierarchical.distributionOrdering[level];\n for (let j = 0; j < levelNodes.length; j++) {\n this._centerParent(levelNodes[j]);\n }\n }\n };\n\n // the actual work is done here.\n if (this.options.hierarchical.blockShifting === true) {\n shiftBranchesCloserBottomUp(5);\n centerAllParents();\n }\n\n // minimize edge length\n if (this.options.hierarchical.edgeMinimization === true) {\n minimizeEdgeLengthBottomUp(20);\n }\n\n if (this.options.hierarchical.parentCentralization === true) {\n centerAllParentsBottomUp();\n }\n\n shiftTrees();\n }\n\n /**\n * This gives the space around the node. IF a map is supplied, it will only check against nodes NOT in the map.\n * This is used to only get the distances to nodes outside of a branch.\n * @param {Node} node\n * @param {{Node.id: vis.Node}} map\n * @returns {number[]}\n * @private\n */\n _getSpaceAroundNode(node, map) {\n let useMap = true;\n if (map === undefined) {\n useMap = false;\n }\n const level = this.hierarchical.levels[node.id];\n if (level !== undefined) {\n const index = this.hierarchical.distributionIndex[node.id];\n const position = this.direction.getPosition(node);\n const ordering = this.hierarchical.distributionOrdering[level];\n let minSpace = 1e9;\n let maxSpace = 1e9;\n if (index !== 0) {\n const prevNode = ordering[index - 1];\n if (\n (useMap === true && map[prevNode.id] === undefined) ||\n useMap === false\n ) {\n const prevPos = this.direction.getPosition(prevNode);\n minSpace = position - prevPos;\n }\n }\n\n if (index != ordering.length - 1) {\n const nextNode = ordering[index + 1];\n if (\n (useMap === true && map[nextNode.id] === undefined) ||\n useMap === false\n ) {\n const nextPos = this.direction.getPosition(nextNode);\n maxSpace = Math.min(maxSpace, nextPos - position);\n }\n }\n\n return [minSpace, maxSpace];\n } else {\n return [0, 0];\n }\n }\n\n /**\n * We use this method to center a parent node and check if it does not cross other nodes when it does.\n * @param {Node} node\n * @private\n */\n _centerParent(node) {\n if (this.hierarchical.parentReference[node.id]) {\n const parents = this.hierarchical.parentReference[node.id];\n for (let i = 0; i < parents.length; i++) {\n const parentId = parents[i];\n const parentNode = this.body.nodes[parentId];\n const children = this.hierarchical.childrenReference[parentId];\n\n if (children !== undefined) {\n // get the range of the children\n const newPosition = this._getCenterPosition(children);\n\n const position = this.direction.getPosition(parentNode);\n const [minSpace, maxSpace] = this._getSpaceAroundNode(parentNode);\n const diff = position - newPosition;\n if (\n (diff < 0 &&\n Math.abs(diff) <\n maxSpace - this.options.hierarchical.nodeSpacing) ||\n (diff > 0 &&\n Math.abs(diff) < minSpace - this.options.hierarchical.nodeSpacing)\n ) {\n this.direction.setPosition(parentNode, newPosition);\n }\n }\n }\n }\n }\n\n /**\n * This function places the nodes on the canvas based on the hierarchial distribution.\n * @param {object} distribution | obtained by the function this._getDistribution()\n * @private\n */\n _placeNodesByHierarchy(distribution) {\n this.positionedNodes = {};\n // start placing all the level 0 nodes first. Then recursively position their branches.\n for (const level in distribution) {\n if (Object.prototype.hasOwnProperty.call(distribution, level)) {\n // sort nodes in level by position:\n let nodeArray = Object.keys(distribution[level]);\n nodeArray = this._indexArrayToNodes(nodeArray);\n this.direction.sort(nodeArray);\n let handledNodeCount = 0;\n\n for (let i = 0; i < nodeArray.length; i++) {\n const node = nodeArray[i];\n if (this.positionedNodes[node.id] === undefined) {\n const spacing = this.options.hierarchical.nodeSpacing;\n let pos = spacing * handledNodeCount;\n // We get the X or Y values we need and store them in pos and previousPos.\n // The get and set make sure we get X or Y\n if (handledNodeCount > 0) {\n pos = this.direction.getPosition(nodeArray[i - 1]) + spacing;\n }\n this.direction.setPosition(node, pos, level);\n this._validatePositionAndContinue(node, level, pos);\n\n handledNodeCount++;\n }\n }\n }\n }\n }\n\n /**\n * This is a recursively called function to enumerate the branches from the largest hubs and place the nodes\n * on a X position that ensures there will be no overlap.\n * @param {Node.id} parentId\n * @param {number} parentLevel\n * @private\n */\n _placeBranchNodes(parentId, parentLevel) {\n const childRef = this.hierarchical.childrenReference[parentId];\n\n // if this is not a parent, cancel the placing. This can happen with multiple parents to one child.\n if (childRef === undefined) {\n return;\n }\n\n // get a list of childNodes\n const childNodes = [];\n for (let i = 0; i < childRef.length; i++) {\n childNodes.push(this.body.nodes[childRef[i]]);\n }\n\n // use the positions to order the nodes.\n this.direction.sort(childNodes);\n\n // position the childNodes\n for (let i = 0; i < childNodes.length; i++) {\n const childNode = childNodes[i];\n const childNodeLevel = this.hierarchical.levels[childNode.id];\n // check if the child node is below the parent node and if it has already been positioned.\n if (\n childNodeLevel > parentLevel &&\n this.positionedNodes[childNode.id] === undefined\n ) {\n // get the amount of space required for this node. If parent the width is based on the amount of children.\n const spacing = this.options.hierarchical.nodeSpacing;\n let pos;\n\n // we get the X or Y values we need and store them in pos and previousPos.\n // The get and set make sure we get X or Y\n if (i === 0) {\n pos = this.direction.getPosition(this.body.nodes[parentId]);\n } else {\n pos = this.direction.getPosition(childNodes[i - 1]) + spacing;\n }\n this.direction.setPosition(childNode, pos, childNodeLevel);\n this._validatePositionAndContinue(childNode, childNodeLevel, pos);\n } else {\n return;\n }\n }\n\n // center the parent nodes.\n const center = this._getCenterPosition(childNodes);\n this.direction.setPosition(this.body.nodes[parentId], center, parentLevel);\n }\n\n /**\n * This method checks for overlap and if required shifts the branch. It also keeps records of positioned nodes.\n * Finally it will call _placeBranchNodes to place the branch nodes.\n * @param {Node} node\n * @param {number} level\n * @param {number} pos\n * @private\n */\n _validatePositionAndContinue(node, level, pos) {\n // This method only works for formal trees and formal forests\n // Early exit if this is not the case\n if (!this.hierarchical.isTree) return;\n\n // if overlap has been detected, we shift the branch\n if (this.lastNodeOnLevel[level] !== undefined) {\n const previousPos = this.direction.getPosition(\n this.body.nodes[this.lastNodeOnLevel[level]]\n );\n if (pos - previousPos < this.options.hierarchical.nodeSpacing) {\n const diff = previousPos + this.options.hierarchical.nodeSpacing - pos;\n const sharedParent = this._findCommonParent(\n this.lastNodeOnLevel[level],\n node.id\n );\n this._shiftBlock(sharedParent.withChild, diff);\n }\n }\n\n this.lastNodeOnLevel[level] = node.id; // store change in position.\n this.positionedNodes[node.id] = true;\n this._placeBranchNodes(node.id, level);\n }\n\n /**\n * Receives an array with node indices and returns an array with the actual node references.\n * Used for sorting based on node properties.\n * @param {Array.} idArray\n * @returns {Array.}\n */\n _indexArrayToNodes(idArray) {\n const array = [];\n for (let i = 0; i < idArray.length; i++) {\n array.push(this.body.nodes[idArray[i]]);\n }\n return array;\n }\n\n /**\n * This function get the distribution of levels based on hubsize\n * @returns {object}\n * @private\n */\n _getDistribution() {\n const distribution = {};\n let nodeId, node;\n\n // we fix Y because the hierarchy is vertical,\n // we fix X so we do not give a node an x position for a second time.\n // the fix of X is removed after the x value has been set.\n for (nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId)) {\n node = this.body.nodes[nodeId];\n const level =\n this.hierarchical.levels[nodeId] === undefined\n ? 0\n : this.hierarchical.levels[nodeId];\n this.direction.fix(node, level);\n if (distribution[level] === undefined) {\n distribution[level] = {};\n }\n distribution[level][nodeId] = node;\n }\n }\n return distribution;\n }\n\n /**\n * Return the active (i.e. visible) edges for this node\n * @param {Node} node\n * @returns {Array.} Array of edge instances\n * @private\n */\n _getActiveEdges(node) {\n const result = [];\n\n forEach(node.edges, (edge) => {\n if (this.body.edgeIndices.indexOf(edge.id) !== -1) {\n result.push(edge);\n }\n });\n\n return result;\n }\n\n /**\n * Get the hubsizes for all active nodes.\n * @returns {number}\n * @private\n */\n _getHubSizes() {\n const hubSizes = {};\n const nodeIds = this.body.nodeIndices;\n\n forEach(nodeIds, (nodeId) => {\n const node = this.body.nodes[nodeId];\n const hubSize = this._getActiveEdges(node).length;\n hubSizes[hubSize] = true;\n });\n\n // Make an array of the size sorted descending\n const result = [];\n forEach(hubSizes, (size) => {\n result.push(Number(size));\n });\n\n result.sort(function (a, b) {\n return b - a;\n });\n\n return result;\n }\n\n /**\n * this function allocates nodes in levels based on the recursive branching from the largest hubs.\n * @private\n */\n _determineLevelsByHubsize() {\n const levelDownstream = (nodeA, nodeB) => {\n this.hierarchical.levelDownstream(nodeA, nodeB);\n };\n\n const hubSizes = this._getHubSizes();\n\n for (let i = 0; i < hubSizes.length; ++i) {\n const hubSize = hubSizes[i];\n if (hubSize === 0) break;\n\n forEach(this.body.nodeIndices, (nodeId) => {\n const node = this.body.nodes[nodeId];\n\n if (hubSize === this._getActiveEdges(node).length) {\n this._crawlNetwork(levelDownstream, nodeId);\n }\n });\n }\n }\n\n /**\n * TODO: release feature\n * TODO: Determine if this feature is needed at all\n * @private\n */\n _determineLevelsCustomCallback() {\n const minLevel = 100000;\n\n // TODO: this should come from options.\n // eslint-disable-next-line no-unused-vars -- This should eventually be implemented with these parameters used.\n const customCallback = function (nodeA, nodeB, edge) {};\n\n // TODO: perhaps move to HierarchicalStatus.\n // But I currently don't see the point, this method is not used.\n const levelByDirection = (nodeA, nodeB, edge) => {\n let levelA = this.hierarchical.levels[nodeA.id];\n // set initial level\n if (levelA === undefined) {\n levelA = this.hierarchical.levels[nodeA.id] = minLevel;\n }\n\n const diff = customCallback(\n NetworkUtil.cloneOptions(nodeA, \"node\"),\n NetworkUtil.cloneOptions(nodeB, \"node\"),\n NetworkUtil.cloneOptions(edge, \"edge\")\n );\n\n this.hierarchical.levels[nodeB.id] = levelA + diff;\n };\n\n this._crawlNetwork(levelByDirection);\n this.hierarchical.setMinLevelToZero();\n }\n\n /**\n * Allocate nodes in levels based on the direction of the edges.\n * @private\n */\n _determineLevelsDirected() {\n const nodes = this.body.nodeIndices.reduce((acc, id) => {\n acc.set(id, this.body.nodes[id]);\n return acc;\n }, new Map());\n\n if (this.options.hierarchical.shakeTowards === \"roots\") {\n this.hierarchical.levels = fillLevelsByDirectionRoots(nodes);\n } else {\n this.hierarchical.levels = fillLevelsByDirectionLeaves(nodes);\n }\n\n this.hierarchical.setMinLevelToZero();\n }\n\n /**\n * Update the bookkeeping of parent and child.\n * @private\n */\n _generateMap() {\n const fillInRelations = (parentNode, childNode) => {\n if (\n this.hierarchical.levels[childNode.id] >\n this.hierarchical.levels[parentNode.id]\n ) {\n this.hierarchical.addRelation(parentNode.id, childNode.id);\n }\n };\n\n this._crawlNetwork(fillInRelations);\n this.hierarchical.checkIfTree();\n }\n\n /**\n * Crawl over the entire network and use a callback on each node couple that is connected to each other.\n * @param {Function} [callback] | will receive nodeA, nodeB and the connecting edge. A and B are distinct.\n * @param {Node.id} startingNodeId\n * @private\n */\n _crawlNetwork(callback = function () {}, startingNodeId) {\n const progress = {};\n\n const crawler = (node, tree) => {\n if (progress[node.id] === undefined) {\n this.hierarchical.setTreeIndex(node, tree);\n\n progress[node.id] = true;\n let childNode;\n const edges = this._getActiveEdges(node);\n for (let i = 0; i < edges.length; i++) {\n const edge = edges[i];\n if (edge.connected === true) {\n if (edge.toId == node.id) {\n // Not '===' because id's can be string and numeric\n childNode = edge.from;\n } else {\n childNode = edge.to;\n }\n\n if (node.id != childNode.id) {\n // Not '!==' because id's can be string and numeric\n callback(node, childNode, edge);\n crawler(childNode, tree);\n }\n }\n }\n }\n };\n\n if (startingNodeId === undefined) {\n // Crawl over all nodes\n let treeIndex = 0; // Serves to pass a unique id for the current distinct tree\n\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const nodeId = this.body.nodeIndices[i];\n\n if (progress[nodeId] === undefined) {\n const node = this.body.nodes[nodeId];\n crawler(node, treeIndex);\n treeIndex += 1;\n }\n }\n } else {\n // Crawl from the given starting node\n const node = this.body.nodes[startingNodeId];\n if (node === undefined) {\n console.error(\"Node not found:\", startingNodeId);\n return;\n }\n crawler(node);\n }\n }\n\n /**\n * Shift a branch a certain distance\n * @param {Node.id} parentId\n * @param {number} diff\n * @private\n */\n _shiftBlock(parentId, diff) {\n const progress = {};\n const shifter = (parentId) => {\n if (progress[parentId]) {\n return;\n }\n progress[parentId] = true;\n this.direction.shift(parentId, diff);\n\n const childRef = this.hierarchical.childrenReference[parentId];\n if (childRef !== undefined) {\n for (let i = 0; i < childRef.length; i++) {\n shifter(childRef[i]);\n }\n }\n };\n shifter(parentId);\n }\n\n /**\n * Find a common parent between branches.\n * @param {Node.id} childA\n * @param {Node.id} childB\n * @returns {{foundParent, withChild}}\n * @private\n */\n _findCommonParent(childA, childB) {\n const parents = {};\n const iterateParents = (parents, child) => {\n const parentRef = this.hierarchical.parentReference[child];\n if (parentRef !== undefined) {\n for (let i = 0; i < parentRef.length; i++) {\n const parent = parentRef[i];\n parents[parent] = true;\n iterateParents(parents, parent);\n }\n }\n };\n const findParent = (parents, child) => {\n const parentRef = this.hierarchical.parentReference[child];\n if (parentRef !== undefined) {\n for (let i = 0; i < parentRef.length; i++) {\n const parent = parentRef[i];\n if (parents[parent] !== undefined) {\n return { foundParent: parent, withChild: child };\n }\n const branch = findParent(parents, parent);\n if (branch.foundParent !== null) {\n return branch;\n }\n }\n }\n return { foundParent: null, withChild: child };\n };\n\n iterateParents(parents, childA);\n return findParent(parents, childB);\n }\n\n /**\n * Set the strategy pattern for handling the coordinates given the current direction.\n *\n * The individual instances contain all the operations and data specific to a layout direction.\n * @param {Node} node\n * @param {{x: number, y: number}} position\n * @param {number} level\n * @param {boolean} [doNotUpdate]\n * @private\n */\n setDirectionStrategy() {\n const isVertical =\n this.options.hierarchical.direction === \"UD\" ||\n this.options.hierarchical.direction === \"DU\";\n\n if (isVertical) {\n this.direction = new VerticalStrategy(this);\n } else {\n this.direction = new HorizontalStrategy(this);\n }\n }\n\n /**\n * Determine the center position of a branch from the passed list of child nodes\n *\n * This takes into account the positions of all the child nodes.\n * @param {Array.} childNodes Array of either child nodes or node id's\n * @returns {number}\n * @private\n */\n _getCenterPosition(childNodes) {\n let minPos = 1e9;\n let maxPos = -1e9;\n\n for (let i = 0; i < childNodes.length; i++) {\n let childNode;\n if (childNodes[i].id !== undefined) {\n childNode = childNodes[i];\n } else {\n const childNodeId = childNodes[i];\n childNode = this.body.nodes[childNodeId];\n }\n\n const position = this.direction.getPosition(childNode);\n minPos = Math.min(minPos, position);\n maxPos = Math.max(maxPos, position);\n }\n\n return 0.5 * (minPos + maxPos);\n }\n}\n\nexport default LayoutEngine;\n","import \"./ManipulationSystem.css\";\n\nimport { Hammer, deepExtend, recursiveDOMDelete } from \"vis-util/esnext\";\nimport { v4 as randomUUID } from \"uuid\";\nimport { onTouch } from \"../../hammerUtil\";\n\n/**\n * Clears the toolbar div element of children\n * @private\n */\nclass ManipulationSystem {\n /**\n * @param {object} body\n * @param {Canvas} canvas\n * @param {SelectionHandler} selectionHandler\n * @param {InteractionHandler} interactionHandler\n */\n constructor(body, canvas, selectionHandler, interactionHandler) {\n this.body = body;\n this.canvas = canvas;\n this.selectionHandler = selectionHandler;\n this.interactionHandler = interactionHandler;\n\n this.editMode = false;\n this.manipulationDiv = undefined;\n this.editModeDiv = undefined;\n this.closeDiv = undefined;\n\n this._domEventListenerCleanupQueue = [];\n this.temporaryUIFunctions = {};\n this.temporaryEventFunctions = [];\n\n this.touchTime = 0;\n this.temporaryIds = { nodes: [], edges: [] };\n this.guiEnabled = false;\n this.inMode = false;\n this.selectedControlNode = undefined;\n\n this.options = {};\n this.defaultOptions = {\n enabled: false,\n initiallyActive: false,\n addNode: true,\n addEdge: true,\n editNode: undefined,\n editEdge: true,\n deleteNode: true,\n deleteEdge: true,\n controlNodeStyle: {\n shape: \"dot\",\n size: 6,\n color: {\n background: \"#ff0000\",\n border: \"#3c3c3c\",\n highlight: { background: \"#07f968\", border: \"#3c3c3c\" },\n },\n borderWidth: 2,\n borderWidthSelected: 2,\n },\n };\n Object.assign(this.options, this.defaultOptions);\n\n this.body.emitter.on(\"destroy\", () => {\n this._clean();\n });\n this.body.emitter.on(\"_dataChanged\", this._restore.bind(this));\n this.body.emitter.on(\"_resetData\", this._restore.bind(this));\n }\n\n /**\n * If something changes in the data during editing, switch back to the initial datamanipulation state and close all edit modes.\n * @private\n */\n _restore() {\n if (this.inMode !== false) {\n if (this.options.initiallyActive === true) {\n this.enableEditMode();\n } else {\n this.disableEditMode();\n }\n }\n }\n\n /**\n * Set the Options\n * @param {object} options\n * @param {object} allOptions\n * @param {object} globalOptions\n */\n setOptions(options, allOptions, globalOptions) {\n if (allOptions !== undefined) {\n if (allOptions.locale !== undefined) {\n this.options.locale = allOptions.locale;\n } else {\n this.options.locale = globalOptions.locale;\n }\n if (allOptions.locales !== undefined) {\n this.options.locales = allOptions.locales;\n } else {\n this.options.locales = globalOptions.locales;\n }\n }\n\n if (options !== undefined) {\n if (typeof options === \"boolean\") {\n this.options.enabled = options;\n } else {\n this.options.enabled = true;\n deepExtend(this.options, options);\n }\n if (this.options.initiallyActive === true) {\n this.editMode = true;\n }\n this._setup();\n }\n }\n\n /**\n * Enable or disable edit-mode. Draws the DOM required and cleans up after itself.\n * @private\n */\n toggleEditMode() {\n if (this.editMode === true) {\n this.disableEditMode();\n } else {\n this.enableEditMode();\n }\n }\n\n /**\n * Enables Edit Mode\n */\n enableEditMode() {\n this.editMode = true;\n\n this._clean();\n if (this.guiEnabled === true) {\n this.manipulationDiv.style.display = \"block\";\n this.closeDiv.style.display = \"block\";\n this.editModeDiv.style.display = \"none\";\n this.showManipulatorToolbar();\n }\n }\n\n /**\n * Disables Edit Mode\n */\n disableEditMode() {\n this.editMode = false;\n\n this._clean();\n if (this.guiEnabled === true) {\n this.manipulationDiv.style.display = \"none\";\n this.closeDiv.style.display = \"none\";\n this.editModeDiv.style.display = \"block\";\n this._createEditButton();\n }\n }\n\n /**\n * Creates the main toolbar. Removes functions bound to the select event. Binds all the buttons of the toolbar.\n * @private\n */\n showManipulatorToolbar() {\n // restore the state of any bound functions or events, remove control nodes, restore physics\n this._clean();\n\n // reset global variables\n this.manipulationDOM = {};\n\n // if the gui is enabled, draw all elements.\n if (this.guiEnabled === true) {\n // a _restore will hide these menus\n this.editMode = true;\n this.manipulationDiv.style.display = \"block\";\n this.closeDiv.style.display = \"block\";\n\n const selectedNodeCount = this.selectionHandler.getSelectedNodeCount();\n const selectedEdgeCount = this.selectionHandler.getSelectedEdgeCount();\n const selectedTotalCount = selectedNodeCount + selectedEdgeCount;\n const locale = this.options.locales[this.options.locale];\n let needSeperator = false;\n\n if (this.options.addNode !== false) {\n this._createAddNodeButton(locale);\n needSeperator = true;\n }\n if (this.options.addEdge !== false) {\n if (needSeperator === true) {\n this._createSeperator(1);\n } else {\n needSeperator = true;\n }\n this._createAddEdgeButton(locale);\n }\n\n if (\n selectedNodeCount === 1 &&\n typeof this.options.editNode === \"function\"\n ) {\n if (needSeperator === true) {\n this._createSeperator(2);\n } else {\n needSeperator = true;\n }\n this._createEditNodeButton(locale);\n } else if (\n selectedEdgeCount === 1 &&\n selectedNodeCount === 0 &&\n this.options.editEdge !== false\n ) {\n if (needSeperator === true) {\n this._createSeperator(3);\n } else {\n needSeperator = true;\n }\n this._createEditEdgeButton(locale);\n }\n\n // remove buttons\n if (selectedTotalCount !== 0) {\n if (selectedNodeCount > 0 && this.options.deleteNode !== false) {\n if (needSeperator === true) {\n this._createSeperator(4);\n }\n this._createDeleteButton(locale);\n } else if (\n selectedNodeCount === 0 &&\n this.options.deleteEdge !== false\n ) {\n if (needSeperator === true) {\n this._createSeperator(4);\n }\n this._createDeleteButton(locale);\n }\n }\n\n // bind the close button\n this._bindElementEvents(this.closeDiv, this.toggleEditMode.bind(this));\n\n // refresh this bar based on what has been selected\n this._temporaryBindEvent(\n \"select\",\n this.showManipulatorToolbar.bind(this)\n );\n }\n\n // redraw to show any possible changes\n this.body.emitter.emit(\"_redraw\");\n }\n\n /**\n * Create the toolbar for adding Nodes\n */\n addNodeMode() {\n // when using the gui, enable edit mode if it wasnt already.\n if (this.editMode !== true) {\n this.enableEditMode();\n }\n\n // restore the state of any bound functions or events, remove control nodes, restore physics\n this._clean();\n\n this.inMode = \"addNode\";\n if (this.guiEnabled === true) {\n const locale = this.options.locales[this.options.locale];\n this.manipulationDOM = {};\n this._createBackButton(locale);\n this._createSeperator();\n this._createDescription(\n locale[\"addDescription\"] || this.options.locales[\"en\"][\"addDescription\"]\n );\n\n // bind the close button\n this._bindElementEvents(this.closeDiv, this.toggleEditMode.bind(this));\n }\n\n this._temporaryBindEvent(\"click\", this._performAddNode.bind(this));\n }\n\n /**\n * call the bound function to handle the editing of the node. The node has to be selected.\n */\n editNode() {\n // when using the gui, enable edit mode if it wasnt already.\n if (this.editMode !== true) {\n this.enableEditMode();\n }\n\n // restore the state of any bound functions or events, remove control nodes, restore physics\n this._clean();\n const node = this.selectionHandler.getSelectedNodes()[0];\n if (node !== undefined) {\n this.inMode = \"editNode\";\n if (typeof this.options.editNode === \"function\") {\n if (node.isCluster !== true) {\n const data = deepExtend({}, node.options, false);\n data.x = node.x;\n data.y = node.y;\n\n if (this.options.editNode.length === 2) {\n this.options.editNode(data, (finalizedData) => {\n if (\n finalizedData !== null &&\n finalizedData !== undefined &&\n this.inMode === \"editNode\"\n ) {\n // if for whatever reason the mode has changes (due to dataset change) disregard the callback) {\n this.body.data.nodes.getDataSet().update(finalizedData);\n }\n this.showManipulatorToolbar();\n });\n } else {\n throw new Error(\n \"The function for edit does not support two arguments (data, callback)\"\n );\n }\n } else {\n alert(\n this.options.locales[this.options.locale][\"editClusterError\"] ||\n this.options.locales[\"en\"][\"editClusterError\"]\n );\n }\n } else {\n throw new Error(\n \"No function has been configured to handle the editing of nodes.\"\n );\n }\n } else {\n this.showManipulatorToolbar();\n }\n }\n\n /**\n * create the toolbar to connect nodes\n */\n addEdgeMode() {\n // when using the gui, enable edit mode if it wasnt already.\n if (this.editMode !== true) {\n this.enableEditMode();\n }\n\n // restore the state of any bound functions or events, remove control nodes, restore physics\n this._clean();\n\n this.inMode = \"addEdge\";\n if (this.guiEnabled === true) {\n const locale = this.options.locales[this.options.locale];\n this.manipulationDOM = {};\n this._createBackButton(locale);\n this._createSeperator();\n this._createDescription(\n locale[\"edgeDescription\"] ||\n this.options.locales[\"en\"][\"edgeDescription\"]\n );\n\n // bind the close button\n this._bindElementEvents(this.closeDiv, this.toggleEditMode.bind(this));\n }\n\n // temporarily overload functions\n this._temporaryBindUI(\"onTouch\", this._handleConnect.bind(this));\n this._temporaryBindUI(\"onDragEnd\", this._finishConnect.bind(this));\n this._temporaryBindUI(\"onDrag\", this._dragControlNode.bind(this));\n this._temporaryBindUI(\"onRelease\", this._finishConnect.bind(this));\n this._temporaryBindUI(\"onDragStart\", this._dragStartEdge.bind(this));\n this._temporaryBindUI(\"onHold\", () => {});\n }\n\n /**\n * create the toolbar to edit edges\n */\n editEdgeMode() {\n // when using the gui, enable edit mode if it wasn't already.\n if (this.editMode !== true) {\n this.enableEditMode();\n }\n\n // restore the state of any bound functions or events, remove control nodes, restore physics\n this._clean();\n\n this.inMode = \"editEdge\";\n if (\n typeof this.options.editEdge === \"object\" &&\n typeof this.options.editEdge.editWithoutDrag === \"function\"\n ) {\n this.edgeBeingEditedId = this.selectionHandler.getSelectedEdgeIds()[0];\n if (this.edgeBeingEditedId !== undefined) {\n const edge = this.body.edges[this.edgeBeingEditedId];\n this._performEditEdge(edge.from.id, edge.to.id);\n return;\n }\n }\n if (this.guiEnabled === true) {\n const locale = this.options.locales[this.options.locale];\n this.manipulationDOM = {};\n this._createBackButton(locale);\n this._createSeperator();\n this._createDescription(\n locale[\"editEdgeDescription\"] ||\n this.options.locales[\"en\"][\"editEdgeDescription\"]\n );\n\n // bind the close button\n this._bindElementEvents(this.closeDiv, this.toggleEditMode.bind(this));\n }\n\n this.edgeBeingEditedId = this.selectionHandler.getSelectedEdgeIds()[0];\n if (this.edgeBeingEditedId !== undefined) {\n const edge = this.body.edges[this.edgeBeingEditedId];\n\n // create control nodes\n const controlNodeFrom = this._getNewTargetNode(edge.from.x, edge.from.y);\n const controlNodeTo = this._getNewTargetNode(edge.to.x, edge.to.y);\n\n this.temporaryIds.nodes.push(controlNodeFrom.id);\n this.temporaryIds.nodes.push(controlNodeTo.id);\n\n this.body.nodes[controlNodeFrom.id] = controlNodeFrom;\n this.body.nodeIndices.push(controlNodeFrom.id);\n this.body.nodes[controlNodeTo.id] = controlNodeTo;\n this.body.nodeIndices.push(controlNodeTo.id);\n\n // temporarily overload UI functions, cleaned up automatically because of _temporaryBindUI\n this._temporaryBindUI(\"onTouch\", this._controlNodeTouch.bind(this)); // used to get the position\n this._temporaryBindUI(\"onTap\", () => {}); // disabled\n this._temporaryBindUI(\"onHold\", () => {}); // disabled\n this._temporaryBindUI(\n \"onDragStart\",\n this._controlNodeDragStart.bind(this)\n ); // used to select control node\n this._temporaryBindUI(\"onDrag\", this._controlNodeDrag.bind(this)); // used to drag control node\n this._temporaryBindUI(\"onDragEnd\", this._controlNodeDragEnd.bind(this)); // used to connect or revert control nodes\n this._temporaryBindUI(\"onMouseMove\", () => {}); // disabled\n\n // create function to position control nodes correctly on movement\n // automatically cleaned up because we use the temporary bind\n this._temporaryBindEvent(\"beforeDrawing\", (ctx) => {\n const positions = edge.edgeType.findBorderPositions(ctx);\n if (controlNodeFrom.selected === false) {\n controlNodeFrom.x = positions.from.x;\n controlNodeFrom.y = positions.from.y;\n }\n if (controlNodeTo.selected === false) {\n controlNodeTo.x = positions.to.x;\n controlNodeTo.y = positions.to.y;\n }\n });\n\n this.body.emitter.emit(\"_redraw\");\n } else {\n this.showManipulatorToolbar();\n }\n }\n\n /**\n * delete everything in the selection\n */\n deleteSelected() {\n // when using the gui, enable edit mode if it wasnt already.\n if (this.editMode !== true) {\n this.enableEditMode();\n }\n\n // restore the state of any bound functions or events, remove control nodes, restore physics\n this._clean();\n\n this.inMode = \"delete\";\n const selectedNodes = this.selectionHandler.getSelectedNodeIds();\n const selectedEdges = this.selectionHandler.getSelectedEdgeIds();\n let deleteFunction = undefined;\n if (selectedNodes.length > 0) {\n for (let i = 0; i < selectedNodes.length; i++) {\n if (this.body.nodes[selectedNodes[i]].isCluster === true) {\n alert(\n this.options.locales[this.options.locale][\"deleteClusterError\"] ||\n this.options.locales[\"en\"][\"deleteClusterError\"]\n );\n return;\n }\n }\n\n if (typeof this.options.deleteNode === \"function\") {\n deleteFunction = this.options.deleteNode;\n }\n } else if (selectedEdges.length > 0) {\n if (typeof this.options.deleteEdge === \"function\") {\n deleteFunction = this.options.deleteEdge;\n }\n }\n\n if (typeof deleteFunction === \"function\") {\n const data = { nodes: selectedNodes, edges: selectedEdges };\n if (deleteFunction.length === 2) {\n deleteFunction(data, (finalizedData) => {\n if (\n finalizedData !== null &&\n finalizedData !== undefined &&\n this.inMode === \"delete\"\n ) {\n // if for whatever reason the mode has changes (due to dataset change) disregard the callback) {\n this.body.data.edges.getDataSet().remove(finalizedData.edges);\n this.body.data.nodes.getDataSet().remove(finalizedData.nodes);\n this.body.emitter.emit(\"startSimulation\");\n this.showManipulatorToolbar();\n } else {\n this.body.emitter.emit(\"startSimulation\");\n this.showManipulatorToolbar();\n }\n });\n } else {\n throw new Error(\n \"The function for delete does not support two arguments (data, callback)\"\n );\n }\n } else {\n this.body.data.edges.getDataSet().remove(selectedEdges);\n this.body.data.nodes.getDataSet().remove(selectedNodes);\n this.body.emitter.emit(\"startSimulation\");\n this.showManipulatorToolbar();\n }\n }\n\n //********************************************** PRIVATE ***************************************//\n\n /**\n * draw or remove the DOM\n * @private\n */\n _setup() {\n if (this.options.enabled === true) {\n // Enable the GUI\n this.guiEnabled = true;\n\n this._createWrappers();\n if (this.editMode === false) {\n this._createEditButton();\n } else {\n this.showManipulatorToolbar();\n }\n } else {\n this._removeManipulationDOM();\n\n // disable the gui\n this.guiEnabled = false;\n }\n }\n\n /**\n * create the div overlays that contain the DOM\n * @private\n */\n _createWrappers() {\n // load the manipulator HTML elements. All styling done in css.\n if (this.manipulationDiv === undefined) {\n this.manipulationDiv = document.createElement(\"div\");\n this.manipulationDiv.className = \"vis-manipulation\";\n if (this.editMode === true) {\n this.manipulationDiv.style.display = \"block\";\n } else {\n this.manipulationDiv.style.display = \"none\";\n }\n this.canvas.frame.appendChild(this.manipulationDiv);\n }\n\n // container for the edit button.\n if (this.editModeDiv === undefined) {\n this.editModeDiv = document.createElement(\"div\");\n this.editModeDiv.className = \"vis-edit-mode\";\n if (this.editMode === true) {\n this.editModeDiv.style.display = \"none\";\n } else {\n this.editModeDiv.style.display = \"block\";\n }\n this.canvas.frame.appendChild(this.editModeDiv);\n }\n\n // container for the close div button\n if (this.closeDiv === undefined) {\n this.closeDiv = document.createElement(\"button\");\n this.closeDiv.className = \"vis-close\";\n this.closeDiv.setAttribute(\n \"aria-label\",\n this.options.locales[this.options.locale]?.[\"close\"] ??\n this.options.locales[\"en\"][\"close\"]\n );\n this.closeDiv.style.display = this.manipulationDiv.style.display;\n this.canvas.frame.appendChild(this.closeDiv);\n }\n }\n\n /**\n * generate a new target node. Used for creating new edges and editing edges\n * @param {number} x\n * @param {number} y\n * @returns {Node}\n * @private\n */\n _getNewTargetNode(x, y) {\n const controlNodeStyle = deepExtend({}, this.options.controlNodeStyle);\n\n controlNodeStyle.id = \"targetNode\" + randomUUID();\n controlNodeStyle.hidden = false;\n controlNodeStyle.physics = false;\n controlNodeStyle.x = x;\n controlNodeStyle.y = y;\n\n // we have to define the bounding box in order for the nodes to be drawn immediately\n const node = this.body.functions.createNode(controlNodeStyle);\n node.shape.boundingBox = { left: x, right: x, top: y, bottom: y };\n\n return node;\n }\n\n /**\n * Create the edit button\n */\n _createEditButton() {\n // restore everything to it's original state (if applicable)\n this._clean();\n\n // reset the manipulationDOM\n this.manipulationDOM = {};\n\n // empty the editModeDiv\n recursiveDOMDelete(this.editModeDiv);\n\n // create the contents for the editMode button\n const locale = this.options.locales[this.options.locale];\n const button = this._createButton(\n \"editMode\",\n \"vis-edit vis-edit-mode\",\n locale[\"edit\"] || this.options.locales[\"en\"][\"edit\"]\n );\n this.editModeDiv.appendChild(button);\n\n // bind a hammer listener to the button, calling the function toggleEditMode.\n this._bindElementEvents(button, this.toggleEditMode.bind(this));\n }\n\n /**\n * this function cleans up after everything this module does. Temporary elements, functions and events are removed, physics restored, hammers removed.\n * @private\n */\n _clean() {\n // not in mode\n this.inMode = false;\n\n // _clean the divs\n if (this.guiEnabled === true) {\n recursiveDOMDelete(this.editModeDiv);\n recursiveDOMDelete(this.manipulationDiv);\n\n // removes all the bindings and overloads\n this._cleanupDOMEventListeners();\n }\n\n // remove temporary nodes and edges\n this._cleanupTemporaryNodesAndEdges();\n\n // restore overloaded UI functions\n this._unbindTemporaryUIs();\n\n // remove the temporaryEventFunctions\n this._unbindTemporaryEvents();\n\n // restore the physics if required\n this.body.emitter.emit(\"restorePhysics\");\n }\n\n /**\n * Each dom element has it's own hammer. They are stored in this.manipulationHammers. This cleans them up.\n * @private\n */\n _cleanupDOMEventListeners() {\n // _clean DOM event listener bindings\n for (const callback of this._domEventListenerCleanupQueue.splice(0)) {\n callback();\n }\n }\n\n /**\n * Remove all DOM elements created by this module.\n * @private\n */\n _removeManipulationDOM() {\n // removes all the bindings and overloads\n this._clean();\n\n // empty the manipulation divs\n recursiveDOMDelete(this.manipulationDiv);\n recursiveDOMDelete(this.editModeDiv);\n recursiveDOMDelete(this.closeDiv);\n\n // remove the manipulation divs\n if (this.manipulationDiv) {\n this.canvas.frame.removeChild(this.manipulationDiv);\n }\n if (this.editModeDiv) {\n this.canvas.frame.removeChild(this.editModeDiv);\n }\n if (this.closeDiv) {\n this.canvas.frame.removeChild(this.closeDiv);\n }\n\n // set the references to undefined\n this.manipulationDiv = undefined;\n this.editModeDiv = undefined;\n this.closeDiv = undefined;\n }\n\n /**\n * create a seperator line. the index is to differentiate in the manipulation dom\n * @param {number} [index]\n * @private\n */\n _createSeperator(index = 1) {\n this.manipulationDOM[\"seperatorLineDiv\" + index] =\n document.createElement(\"div\");\n this.manipulationDOM[\"seperatorLineDiv\" + index].className =\n \"vis-separator-line\";\n this.manipulationDiv.appendChild(\n this.manipulationDOM[\"seperatorLineDiv\" + index]\n );\n }\n\n // ---------------------- DOM functions for buttons --------------------------//\n\n /**\n *\n * @param {Locale} locale\n * @private\n */\n _createAddNodeButton(locale) {\n const button = this._createButton(\n \"addNode\",\n \"vis-add\",\n locale[\"addNode\"] || this.options.locales[\"en\"][\"addNode\"]\n );\n this.manipulationDiv.appendChild(button);\n this._bindElementEvents(button, this.addNodeMode.bind(this));\n }\n\n /**\n *\n * @param {Locale} locale\n * @private\n */\n _createAddEdgeButton(locale) {\n const button = this._createButton(\n \"addEdge\",\n \"vis-connect\",\n locale[\"addEdge\"] || this.options.locales[\"en\"][\"addEdge\"]\n );\n this.manipulationDiv.appendChild(button);\n this._bindElementEvents(button, this.addEdgeMode.bind(this));\n }\n\n /**\n *\n * @param {Locale} locale\n * @private\n */\n _createEditNodeButton(locale) {\n const button = this._createButton(\n \"editNode\",\n \"vis-edit\",\n locale[\"editNode\"] || this.options.locales[\"en\"][\"editNode\"]\n );\n this.manipulationDiv.appendChild(button);\n this._bindElementEvents(button, this.editNode.bind(this));\n }\n\n /**\n *\n * @param {Locale} locale\n * @private\n */\n _createEditEdgeButton(locale) {\n const button = this._createButton(\n \"editEdge\",\n \"vis-edit\",\n locale[\"editEdge\"] || this.options.locales[\"en\"][\"editEdge\"]\n );\n this.manipulationDiv.appendChild(button);\n this._bindElementEvents(button, this.editEdgeMode.bind(this));\n }\n\n /**\n *\n * @param {Locale} locale\n * @private\n */\n _createDeleteButton(locale) {\n let deleteBtnClass;\n if (this.options.rtl) {\n deleteBtnClass = \"vis-delete-rtl\";\n } else {\n deleteBtnClass = \"vis-delete\";\n }\n const button = this._createButton(\n \"delete\",\n deleteBtnClass,\n locale[\"del\"] || this.options.locales[\"en\"][\"del\"]\n );\n this.manipulationDiv.appendChild(button);\n this._bindElementEvents(button, this.deleteSelected.bind(this));\n }\n\n /**\n *\n * @param {Locale} locale\n * @private\n */\n _createBackButton(locale) {\n const button = this._createButton(\n \"back\",\n \"vis-back\",\n locale[\"back\"] || this.options.locales[\"en\"][\"back\"]\n );\n this.manipulationDiv.appendChild(button);\n this._bindElementEvents(button, this.showManipulatorToolbar.bind(this));\n }\n\n /**\n *\n * @param {number|string} id\n * @param {string} className\n * @param {label} label\n * @param {string} labelClassName\n * @returns {HTMLElement}\n * @private\n */\n _createButton(id, className, label, labelClassName = \"vis-label\") {\n this.manipulationDOM[id + \"Div\"] = document.createElement(\"button\");\n this.manipulationDOM[id + \"Div\"].className = \"vis-button \" + className;\n this.manipulationDOM[id + \"Label\"] = document.createElement(\"div\");\n this.manipulationDOM[id + \"Label\"].className = labelClassName;\n this.manipulationDOM[id + \"Label\"].innerText = label;\n this.manipulationDOM[id + \"Div\"].appendChild(\n this.manipulationDOM[id + \"Label\"]\n );\n return this.manipulationDOM[id + \"Div\"];\n }\n\n /**\n *\n * @param {Label} label\n * @private\n */\n _createDescription(label) {\n this.manipulationDOM[\"descriptionLabel\"] = document.createElement(\"div\");\n this.manipulationDOM[\"descriptionLabel\"].className = \"vis-none\";\n this.manipulationDOM[\"descriptionLabel\"].innerText = label;\n this.manipulationDiv.appendChild(this.manipulationDOM[\"descriptionLabel\"]);\n }\n\n // -------------------------- End of DOM functions for buttons ------------------------------//\n\n /**\n * this binds an event until cleanup by the clean functions.\n * @param {Event} event The event\n * @param {Function} newFunction\n * @private\n */\n _temporaryBindEvent(event, newFunction) {\n this.temporaryEventFunctions.push({\n event: event,\n boundFunction: newFunction,\n });\n this.body.emitter.on(event, newFunction);\n }\n\n /**\n * this overrides an UI function until cleanup by the clean function\n * @param {string} UIfunctionName\n * @param {Function} newFunction\n * @private\n */\n _temporaryBindUI(UIfunctionName, newFunction) {\n if (this.body.eventListeners[UIfunctionName] !== undefined) {\n this.temporaryUIFunctions[UIfunctionName] =\n this.body.eventListeners[UIfunctionName];\n this.body.eventListeners[UIfunctionName] = newFunction;\n } else {\n throw new Error(\n \"This UI function does not exist. Typo? You tried: \" +\n UIfunctionName +\n \" possible are: \" +\n JSON.stringify(Object.keys(this.body.eventListeners))\n );\n }\n }\n\n /**\n * Restore the overridden UI functions to their original state.\n * @private\n */\n _unbindTemporaryUIs() {\n for (const functionName in this.temporaryUIFunctions) {\n if (\n Object.prototype.hasOwnProperty.call(\n this.temporaryUIFunctions,\n functionName\n )\n ) {\n this.body.eventListeners[functionName] =\n this.temporaryUIFunctions[functionName];\n delete this.temporaryUIFunctions[functionName];\n }\n }\n this.temporaryUIFunctions = {};\n }\n\n /**\n * Unbind the events created by _temporaryBindEvent\n * @private\n */\n _unbindTemporaryEvents() {\n for (let i = 0; i < this.temporaryEventFunctions.length; i++) {\n const eventName = this.temporaryEventFunctions[i].event;\n const boundFunction = this.temporaryEventFunctions[i].boundFunction;\n this.body.emitter.off(eventName, boundFunction);\n }\n this.temporaryEventFunctions = [];\n }\n\n /**\n * Bind an hammer instance to a DOM element.\n * @param {Element} domElement\n * @param {Function} boundFunction\n */\n _bindElementEvents(domElement, boundFunction) {\n // Bind touch events.\n const hammer = new Hammer(domElement, {});\n onTouch(hammer, boundFunction);\n this._domEventListenerCleanupQueue.push(() => {\n hammer.destroy();\n });\n\n // Bind keyboard events.\n const keyupListener = ({ keyCode, key }) => {\n if (key === \"Enter\" || key === \" \" || keyCode === 13 || keyCode === 32) {\n boundFunction();\n }\n };\n domElement.addEventListener(\"keyup\", keyupListener, false);\n this._domEventListenerCleanupQueue.push(() => {\n domElement.removeEventListener(\"keyup\", keyupListener, false);\n });\n }\n\n /**\n * Neatly clean up temporary edges and nodes\n * @private\n */\n _cleanupTemporaryNodesAndEdges() {\n // _clean temporary edges\n for (let i = 0; i < this.temporaryIds.edges.length; i++) {\n this.body.edges[this.temporaryIds.edges[i]].disconnect();\n delete this.body.edges[this.temporaryIds.edges[i]];\n const indexTempEdge = this.body.edgeIndices.indexOf(\n this.temporaryIds.edges[i]\n );\n if (indexTempEdge !== -1) {\n this.body.edgeIndices.splice(indexTempEdge, 1);\n }\n }\n\n // _clean temporary nodes\n for (let i = 0; i < this.temporaryIds.nodes.length; i++) {\n delete this.body.nodes[this.temporaryIds.nodes[i]];\n const indexTempNode = this.body.nodeIndices.indexOf(\n this.temporaryIds.nodes[i]\n );\n if (indexTempNode !== -1) {\n this.body.nodeIndices.splice(indexTempNode, 1);\n }\n }\n\n this.temporaryIds = { nodes: [], edges: [] };\n }\n\n // ------------------------------------------ EDIT EDGE FUNCTIONS -----------------------------------------//\n\n /**\n * the touch is used to get the position of the initial click\n * @param {Event} event The event\n * @private\n */\n _controlNodeTouch(event) {\n this.selectionHandler.unselectAll();\n this.lastTouch = this.body.functions.getPointer(event.center);\n this.lastTouch.translation = Object.assign({}, this.body.view.translation); // copy the object\n }\n\n /**\n * the drag start is used to mark one of the control nodes as selected.\n * @private\n */\n _controlNodeDragStart() {\n const pointer = this.lastTouch;\n const pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n const from = this.body.nodes[this.temporaryIds.nodes[0]];\n const to = this.body.nodes[this.temporaryIds.nodes[1]];\n const edge = this.body.edges[this.edgeBeingEditedId];\n this.selectedControlNode = undefined;\n\n const fromSelect = from.isOverlappingWith(pointerObj);\n const toSelect = to.isOverlappingWith(pointerObj);\n\n if (fromSelect === true) {\n this.selectedControlNode = from;\n edge.edgeType.from = from;\n } else if (toSelect === true) {\n this.selectedControlNode = to;\n edge.edgeType.to = to;\n }\n\n // we use the selection to find the node that is being dragged. We explicitly select it here.\n if (this.selectedControlNode !== undefined) {\n this.selectionHandler.selectObject(this.selectedControlNode);\n }\n\n this.body.emitter.emit(\"_redraw\");\n }\n\n /**\n * dragging the control nodes or the canvas\n * @param {Event} event The event\n * @private\n */\n _controlNodeDrag(event) {\n this.body.emitter.emit(\"disablePhysics\");\n const pointer = this.body.functions.getPointer(event.center);\n const pos = this.canvas.DOMtoCanvas(pointer);\n if (this.selectedControlNode !== undefined) {\n this.selectedControlNode.x = pos.x;\n this.selectedControlNode.y = pos.y;\n } else {\n this.interactionHandler.onDrag(event);\n }\n this.body.emitter.emit(\"_redraw\");\n }\n\n /**\n * connecting or restoring the control nodes.\n * @param {Event} event The event\n * @private\n */\n _controlNodeDragEnd(event) {\n const pointer = this.body.functions.getPointer(event.center);\n const pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n const edge = this.body.edges[this.edgeBeingEditedId];\n // if the node that was dragged is not a control node, return\n if (this.selectedControlNode === undefined) {\n return;\n }\n\n // we use the selection to find the node that is being dragged. We explicitly DEselect the control node here.\n this.selectionHandler.unselectAll();\n const overlappingNodeIds =\n this.selectionHandler._getAllNodesOverlappingWith(pointerObj);\n let node = undefined;\n for (let i = overlappingNodeIds.length - 1; i >= 0; i--) {\n if (overlappingNodeIds[i] !== this.selectedControlNode.id) {\n node = this.body.nodes[overlappingNodeIds[i]];\n break;\n }\n }\n // perform the connection\n if (node !== undefined && this.selectedControlNode !== undefined) {\n if (node.isCluster === true) {\n alert(\n this.options.locales[this.options.locale][\"createEdgeError\"] ||\n this.options.locales[\"en\"][\"createEdgeError\"]\n );\n } else {\n const from = this.body.nodes[this.temporaryIds.nodes[0]];\n if (this.selectedControlNode.id === from.id) {\n this._performEditEdge(node.id, edge.to.id);\n } else {\n this._performEditEdge(edge.from.id, node.id);\n }\n }\n } else {\n edge.updateEdgeType();\n this.body.emitter.emit(\"restorePhysics\");\n }\n\n this.body.emitter.emit(\"_redraw\");\n }\n\n // ------------------------------------ END OF EDIT EDGE FUNCTIONS -----------------------------------------//\n\n // ------------------------------------------- ADD EDGE FUNCTIONS -----------------------------------------//\n /**\n * the function bound to the selection event. It checks if you want to connect a cluster and changes the description\n * to walk the user through the process.\n * @param {Event} event\n * @private\n */\n _handleConnect(event) {\n // check to avoid double fireing of this function.\n if (new Date().valueOf() - this.touchTime > 100) {\n this.lastTouch = this.body.functions.getPointer(event.center);\n this.lastTouch.translation = Object.assign(\n {},\n this.body.view.translation\n ); // copy the object\n\n this.interactionHandler.drag.pointer = this.lastTouch; // Drag pointer is not updated when adding edges\n this.interactionHandler.drag.translation = this.lastTouch.translation;\n\n const pointer = this.lastTouch;\n const node = this.selectionHandler.getNodeAt(pointer);\n\n if (node !== undefined) {\n if (node.isCluster === true) {\n alert(\n this.options.locales[this.options.locale][\"createEdgeError\"] ||\n this.options.locales[\"en\"][\"createEdgeError\"]\n );\n } else {\n // create a node the temporary line can look at\n const targetNode = this._getNewTargetNode(node.x, node.y);\n this.body.nodes[targetNode.id] = targetNode;\n this.body.nodeIndices.push(targetNode.id);\n\n // create a temporary edge\n const connectionEdge = this.body.functions.createEdge({\n id: \"connectionEdge\" + randomUUID(),\n from: node.id,\n to: targetNode.id,\n physics: false,\n smooth: {\n enabled: true,\n type: \"continuous\",\n roundness: 0.5,\n },\n });\n this.body.edges[connectionEdge.id] = connectionEdge;\n this.body.edgeIndices.push(connectionEdge.id);\n\n this.temporaryIds.nodes.push(targetNode.id);\n this.temporaryIds.edges.push(connectionEdge.id);\n }\n }\n this.touchTime = new Date().valueOf();\n }\n }\n\n /**\n *\n * @param {Event} event\n * @private\n */\n _dragControlNode(event) {\n const pointer = this.body.functions.getPointer(event.center);\n\n const pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n // remember the edge id\n let connectFromId = undefined;\n if (this.temporaryIds.edges[0] !== undefined) {\n connectFromId = this.body.edges[this.temporaryIds.edges[0]].fromId;\n }\n\n // get the overlapping node but NOT the temporary node;\n const overlappingNodeIds =\n this.selectionHandler._getAllNodesOverlappingWith(pointerObj);\n let node = undefined;\n for (let i = overlappingNodeIds.length - 1; i >= 0; i--) {\n // if the node id is NOT a temporary node, accept the node.\n if (this.temporaryIds.nodes.indexOf(overlappingNodeIds[i]) === -1) {\n node = this.body.nodes[overlappingNodeIds[i]];\n break;\n }\n }\n\n event.controlEdge = { from: connectFromId, to: node ? node.id : undefined };\n this.selectionHandler.generateClickEvent(\n \"controlNodeDragging\",\n event,\n pointer\n );\n\n if (this.temporaryIds.nodes[0] !== undefined) {\n const targetNode = this.body.nodes[this.temporaryIds.nodes[0]]; // there is only one temp node in the add edge mode.\n targetNode.x = this.canvas._XconvertDOMtoCanvas(pointer.x);\n targetNode.y = this.canvas._YconvertDOMtoCanvas(pointer.y);\n this.body.emitter.emit(\"_redraw\");\n } else {\n this.interactionHandler.onDrag(event);\n }\n }\n\n /**\n * Connect the new edge to the target if one exists, otherwise remove temp line\n * @param {Event} event The event\n * @private\n */\n _finishConnect(event) {\n const pointer = this.body.functions.getPointer(event.center);\n const pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n\n // remember the edge id\n let connectFromId = undefined;\n if (this.temporaryIds.edges[0] !== undefined) {\n connectFromId = this.body.edges[this.temporaryIds.edges[0]].fromId;\n }\n\n // get the overlapping node but NOT the temporary node;\n const overlappingNodeIds =\n this.selectionHandler._getAllNodesOverlappingWith(pointerObj);\n let node = undefined;\n for (let i = overlappingNodeIds.length - 1; i >= 0; i--) {\n // if the node id is NOT a temporary node, accept the node.\n if (this.temporaryIds.nodes.indexOf(overlappingNodeIds[i]) === -1) {\n node = this.body.nodes[overlappingNodeIds[i]];\n break;\n }\n }\n\n // clean temporary nodes and edges.\n this._cleanupTemporaryNodesAndEdges();\n\n // perform the connection\n if (node !== undefined) {\n if (node.isCluster === true) {\n alert(\n this.options.locales[this.options.locale][\"createEdgeError\"] ||\n this.options.locales[\"en\"][\"createEdgeError\"]\n );\n } else {\n if (\n this.body.nodes[connectFromId] !== undefined &&\n this.body.nodes[node.id] !== undefined\n ) {\n this._performAddEdge(connectFromId, node.id);\n }\n }\n }\n\n event.controlEdge = { from: connectFromId, to: node ? node.id : undefined };\n this.selectionHandler.generateClickEvent(\n \"controlNodeDragEnd\",\n event,\n pointer\n );\n\n // No need to do _generateclickevent('dragEnd') here, the regular dragEnd event fires.\n this.body.emitter.emit(\"_redraw\");\n }\n\n /**\n *\n * @param {Event} event\n * @private\n */\n _dragStartEdge(event) {\n const pointer = this.lastTouch;\n this.selectionHandler.generateClickEvent(\n \"dragStart\",\n event,\n pointer,\n undefined,\n true\n );\n }\n\n // --------------------------------------- END OF ADD EDGE FUNCTIONS -------------------------------------//\n\n // ------------------------------ Performing all the actual data manipulation ------------------------//\n\n /**\n * Adds a node on the specified location\n * @param {object} clickData\n * @private\n */\n _performAddNode(clickData) {\n const defaultData = {\n id: randomUUID(),\n x: clickData.pointer.canvas.x,\n y: clickData.pointer.canvas.y,\n label: \"new\",\n };\n\n if (typeof this.options.addNode === \"function\") {\n if (this.options.addNode.length === 2) {\n this.options.addNode(defaultData, (finalizedData) => {\n if (\n finalizedData !== null &&\n finalizedData !== undefined &&\n this.inMode === \"addNode\"\n ) {\n // if for whatever reason the mode has changes (due to dataset change) disregard the callback\n this.body.data.nodes.getDataSet().add(finalizedData);\n }\n this.showManipulatorToolbar();\n });\n } else {\n this.showManipulatorToolbar();\n throw new Error(\n \"The function for add does not support two arguments (data,callback)\"\n );\n }\n } else {\n this.body.data.nodes.getDataSet().add(defaultData);\n this.showManipulatorToolbar();\n }\n }\n\n /**\n * connect two nodes with a new edge.\n * @param {Node.id} sourceNodeId\n * @param {Node.id} targetNodeId\n * @private\n */\n _performAddEdge(sourceNodeId, targetNodeId) {\n const defaultData = { from: sourceNodeId, to: targetNodeId };\n if (typeof this.options.addEdge === \"function\") {\n if (this.options.addEdge.length === 2) {\n this.options.addEdge(defaultData, (finalizedData) => {\n if (\n finalizedData !== null &&\n finalizedData !== undefined &&\n this.inMode === \"addEdge\"\n ) {\n // if for whatever reason the mode has changes (due to dataset change) disregard the callback\n this.body.data.edges.getDataSet().add(finalizedData);\n this.selectionHandler.unselectAll();\n this.showManipulatorToolbar();\n }\n });\n } else {\n throw new Error(\n \"The function for connect does not support two arguments (data,callback)\"\n );\n }\n } else {\n this.body.data.edges.getDataSet().add(defaultData);\n this.selectionHandler.unselectAll();\n this.showManipulatorToolbar();\n }\n }\n\n /**\n * connect two nodes with a new edge.\n * @param {Node.id} sourceNodeId\n * @param {Node.id} targetNodeId\n * @private\n */\n _performEditEdge(sourceNodeId, targetNodeId) {\n const defaultData = {\n id: this.edgeBeingEditedId,\n from: sourceNodeId,\n to: targetNodeId,\n label: this.body.data.edges.get(this.edgeBeingEditedId).label,\n };\n let eeFunct = this.options.editEdge;\n if (typeof eeFunct === \"object\") {\n eeFunct = eeFunct.editWithoutDrag;\n }\n if (typeof eeFunct === \"function\") {\n if (eeFunct.length === 2) {\n eeFunct(defaultData, (finalizedData) => {\n if (\n finalizedData === null ||\n finalizedData === undefined ||\n this.inMode !== \"editEdge\"\n ) {\n // if for whatever reason the mode has changes (due to dataset change) disregard the callback) {\n this.body.edges[defaultData.id].updateEdgeType();\n this.body.emitter.emit(\"_redraw\");\n this.showManipulatorToolbar();\n } else {\n this.body.data.edges.getDataSet().update(finalizedData);\n this.selectionHandler.unselectAll();\n this.showManipulatorToolbar();\n }\n });\n } else {\n throw new Error(\n \"The function for edit does not support two arguments (data, callback)\"\n );\n }\n } else {\n this.body.data.edges.getDataSet().update(defaultData);\n this.selectionHandler.unselectAll();\n this.showManipulatorToolbar();\n }\n }\n}\n\nexport default ManipulationSystem;\n","import {\n ConfiguratorConfig,\n ConfiguratorHideOption,\n OptionsConfig,\n} from \"vis-util/esnext\";\n\n/**\n * This object contains all possible options. It will check if the types are correct, if required if the option is one\n * of the allowed values.\n *\n * __any__ means that the name of the property does not matter.\n * __type__ is a required field for all objects and contains the allowed types of all objects\n */\nconst string = \"string\";\nconst bool = \"boolean\";\nconst number = \"number\";\nconst array = \"array\";\nconst object = \"object\"; // should only be in a __type__ property\nconst dom = \"dom\";\nconst any = \"any\";\n\n// List of endpoints\nconst endPoints = [\n \"arrow\",\n \"bar\",\n \"box\",\n \"circle\",\n \"crow\",\n \"curve\",\n \"diamond\",\n \"image\",\n \"inv_curve\",\n \"inv_triangle\",\n \"triangle\",\n \"vee\",\n];\n\n/* eslint-disable @typescript-eslint/naming-convention -- The __*__ format is used to prevent collisions with actual option names. */\nconst nodeOptions: OptionsConfig = {\n borderWidth: { number },\n borderWidthSelected: { number, undefined: \"undefined\" },\n brokenImage: { string, undefined: \"undefined\" },\n chosen: {\n label: { boolean: bool, function: \"function\" },\n node: { boolean: bool, function: \"function\" },\n __type__: { object, boolean: bool },\n },\n color: {\n border: { string },\n background: { string },\n highlight: {\n border: { string },\n background: { string },\n __type__: { object, string },\n },\n hover: {\n border: { string },\n background: { string },\n __type__: { object, string },\n },\n __type__: { object, string },\n },\n opacity: { number, undefined: \"undefined\" },\n fixed: {\n x: { boolean: bool },\n y: { boolean: bool },\n __type__: { object, boolean: bool },\n },\n font: {\n align: { string },\n color: { string },\n size: { number }, // px\n face: { string },\n background: { string },\n strokeWidth: { number }, // px\n strokeColor: { string },\n vadjust: { number },\n multi: { boolean: bool, string },\n bold: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n boldital: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n ital: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n mono: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n __type__: { object, string },\n },\n group: { string, number, undefined: \"undefined\" },\n heightConstraint: {\n minimum: { number },\n valign: { string },\n __type__: { object, boolean: bool, number },\n },\n hidden: { boolean: bool },\n icon: {\n face: { string },\n code: { string }, //'\\uf007',\n size: { number }, //50,\n color: { string },\n weight: { string, number },\n __type__: { object },\n },\n id: { string, number },\n image: {\n selected: { string, undefined: \"undefined\" }, // --> URL\n unselected: { string, undefined: \"undefined\" }, // --> URL\n __type__: { object, string },\n },\n imagePadding: {\n top: { number },\n right: { number },\n bottom: { number },\n left: { number },\n __type__: { object, number },\n },\n label: { string, undefined: \"undefined\" },\n labelHighlightBold: { boolean: bool },\n level: { number, undefined: \"undefined\" },\n margin: {\n top: { number },\n right: { number },\n bottom: { number },\n left: { number },\n __type__: { object, number },\n },\n mass: { number },\n physics: { boolean: bool },\n scaling: {\n min: { number },\n max: { number },\n label: {\n enabled: { boolean: bool },\n min: { number },\n max: { number },\n maxVisible: { number },\n drawThreshold: { number },\n __type__: { object, boolean: bool },\n },\n customScalingFunction: { function: \"function\" },\n __type__: { object },\n },\n shadow: {\n enabled: { boolean: bool },\n color: { string },\n size: { number },\n x: { number },\n y: { number },\n __type__: { object, boolean: bool },\n },\n shape: {\n string: [\n \"custom\",\n \"ellipse\",\n \"circle\",\n \"database\",\n \"box\",\n \"text\",\n \"image\",\n \"circularImage\",\n \"diamond\",\n \"dot\",\n \"star\",\n \"triangle\",\n \"triangleDown\",\n \"square\",\n \"icon\",\n \"hexagon\",\n ],\n },\n ctxRenderer: { function: \"function\" },\n shapeProperties: {\n borderDashes: { boolean: bool, array },\n borderRadius: { number },\n interpolation: { boolean: bool },\n useImageSize: { boolean: bool },\n useBorderWithImage: { boolean: bool },\n coordinateOrigin: { string: [\"center\", \"top-left\"] },\n __type__: { object },\n },\n size: { number },\n title: { string, dom, undefined: \"undefined\" },\n value: { number, undefined: \"undefined\" },\n widthConstraint: {\n minimum: { number },\n maximum: { number },\n __type__: { object, boolean: bool, number },\n },\n x: { number },\n y: { number },\n __type__: { object },\n};\nconst allOptions: OptionsConfig = {\n configure: {\n enabled: { boolean: bool },\n filter: { boolean: bool, string, array, function: \"function\" },\n container: { dom },\n showButton: { boolean: bool },\n __type__: { object, boolean: bool, string, array, function: \"function\" },\n },\n edges: {\n arrows: {\n to: {\n enabled: { boolean: bool },\n scaleFactor: { number },\n type: { string: endPoints },\n imageHeight: { number },\n imageWidth: { number },\n src: { string },\n __type__: { object, boolean: bool },\n },\n middle: {\n enabled: { boolean: bool },\n scaleFactor: { number },\n type: { string: endPoints },\n imageWidth: { number },\n imageHeight: { number },\n src: { string },\n __type__: { object, boolean: bool },\n },\n from: {\n enabled: { boolean: bool },\n scaleFactor: { number },\n type: { string: endPoints },\n imageWidth: { number },\n imageHeight: { number },\n src: { string },\n __type__: { object, boolean: bool },\n },\n __type__: { string: [\"from\", \"to\", \"middle\"], object },\n },\n endPointOffset: {\n from: {\n number: number,\n },\n to: {\n number: number,\n },\n __type__: {\n object: object,\n number: number,\n },\n },\n arrowStrikethrough: { boolean: bool },\n background: {\n enabled: { boolean: bool },\n color: { string },\n size: { number },\n dashes: { boolean: bool, array },\n __type__: { object, boolean: bool },\n },\n chosen: {\n label: { boolean: bool, function: \"function\" },\n edge: { boolean: bool, function: \"function\" },\n __type__: { object, boolean: bool },\n },\n color: {\n color: { string },\n highlight: { string },\n hover: { string },\n inherit: { string: [\"from\", \"to\", \"both\"], boolean: bool },\n opacity: { number },\n __type__: { object, string },\n },\n dashes: { boolean: bool, array },\n font: {\n color: { string },\n size: { number }, // px\n face: { string },\n background: { string },\n strokeWidth: { number }, // px\n strokeColor: { string },\n align: { string: [\"horizontal\", \"top\", \"middle\", \"bottom\"] },\n vadjust: { number },\n multi: { boolean: bool, string },\n bold: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n boldital: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n ital: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n mono: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n __type__: { object, string },\n },\n hidden: { boolean: bool },\n hoverWidth: { function: \"function\", number },\n label: { string, undefined: \"undefined\" },\n labelHighlightBold: { boolean: bool },\n length: { number, undefined: \"undefined\" },\n physics: { boolean: bool },\n scaling: {\n min: { number },\n max: { number },\n label: {\n enabled: { boolean: bool },\n min: { number },\n max: { number },\n maxVisible: { number },\n drawThreshold: { number },\n __type__: { object, boolean: bool },\n },\n customScalingFunction: { function: \"function\" },\n __type__: { object },\n },\n selectionWidth: { function: \"function\", number },\n selfReferenceSize: { number },\n selfReference: {\n size: { number },\n angle: { number },\n renderBehindTheNode: { boolean: bool },\n __type__: { object },\n },\n shadow: {\n enabled: { boolean: bool },\n color: { string },\n size: { number },\n x: { number },\n y: { number },\n __type__: { object, boolean: bool },\n },\n smooth: {\n enabled: { boolean: bool },\n type: {\n string: [\n \"dynamic\",\n \"continuous\",\n \"discrete\",\n \"diagonalCross\",\n \"straightCross\",\n \"horizontal\",\n \"vertical\",\n \"curvedCW\",\n \"curvedCCW\",\n \"cubicBezier\",\n ],\n },\n roundness: { number },\n forceDirection: {\n string: [\"horizontal\", \"vertical\", \"none\"],\n boolean: bool,\n },\n __type__: { object, boolean: bool },\n },\n title: { string, undefined: \"undefined\" },\n width: { number },\n widthConstraint: {\n maximum: { number },\n __type__: { object, boolean: bool, number },\n },\n value: { number, undefined: \"undefined\" },\n __type__: { object },\n },\n groups: {\n useDefaultGroups: { boolean: bool },\n __any__: nodeOptions,\n __type__: { object },\n },\n interaction: {\n dragNodes: { boolean: bool },\n dragView: { boolean: bool },\n hideEdgesOnDrag: { boolean: bool },\n hideEdgesOnZoom: { boolean: bool },\n hideNodesOnDrag: { boolean: bool },\n hover: { boolean: bool },\n keyboard: {\n enabled: { boolean: bool },\n speed: {\n x: { number },\n y: { number },\n zoom: { number },\n __type__: { object },\n },\n bindToWindow: { boolean: bool },\n autoFocus: { boolean: bool },\n __type__: { object, boolean: bool },\n },\n multiselect: { boolean: bool },\n navigationButtons: { boolean: bool },\n selectable: { boolean: bool },\n selectConnectedEdges: { boolean: bool },\n hoverConnectedEdges: { boolean: bool },\n tooltipDelay: { number },\n zoomView: { boolean: bool },\n zoomSpeed: { number },\n __type__: { object },\n },\n layout: {\n randomSeed: { undefined: \"undefined\", number, string },\n improvedLayout: { boolean: bool },\n clusterThreshold: { number },\n hierarchical: {\n enabled: { boolean: bool },\n levelSeparation: { number },\n nodeSpacing: { number },\n treeSpacing: { number },\n blockShifting: { boolean: bool },\n edgeMinimization: { boolean: bool },\n parentCentralization: { boolean: bool },\n direction: { string: [\"UD\", \"DU\", \"LR\", \"RL\"] }, // UD, DU, LR, RL\n sortMethod: { string: [\"hubsize\", \"directed\"] }, // hubsize, directed\n shakeTowards: { string: [\"leaves\", \"roots\"] }, // leaves, roots\n __type__: { object, boolean: bool },\n },\n __type__: { object },\n },\n manipulation: {\n enabled: { boolean: bool },\n initiallyActive: { boolean: bool },\n addNode: { boolean: bool, function: \"function\" },\n addEdge: { boolean: bool, function: \"function\" },\n editNode: { function: \"function\" },\n editEdge: {\n editWithoutDrag: { function: \"function\" },\n __type__: { object, boolean: bool, function: \"function\" },\n },\n deleteNode: { boolean: bool, function: \"function\" },\n deleteEdge: { boolean: bool, function: \"function\" },\n controlNodeStyle: nodeOptions,\n __type__: { object, boolean: bool },\n },\n nodes: nodeOptions,\n physics: {\n enabled: { boolean: bool },\n barnesHut: {\n theta: { number },\n gravitationalConstant: { number },\n centralGravity: { number },\n springLength: { number },\n springConstant: { number },\n damping: { number },\n avoidOverlap: { number },\n __type__: { object },\n },\n forceAtlas2Based: {\n theta: { number },\n gravitationalConstant: { number },\n centralGravity: { number },\n springLength: { number },\n springConstant: { number },\n damping: { number },\n avoidOverlap: { number },\n __type__: { object },\n },\n repulsion: {\n centralGravity: { number },\n springLength: { number },\n springConstant: { number },\n nodeDistance: { number },\n damping: { number },\n __type__: { object },\n },\n hierarchicalRepulsion: {\n centralGravity: { number },\n springLength: { number },\n springConstant: { number },\n nodeDistance: { number },\n damping: { number },\n avoidOverlap: { number },\n __type__: { object },\n },\n maxVelocity: { number },\n minVelocity: { number }, // px/s\n solver: {\n string: [\n \"barnesHut\",\n \"repulsion\",\n \"hierarchicalRepulsion\",\n \"forceAtlas2Based\",\n ],\n },\n stabilization: {\n enabled: { boolean: bool },\n iterations: { number }, // maximum number of iteration to stabilize\n updateInterval: { number },\n onlyDynamicEdges: { boolean: bool },\n fit: { boolean: bool },\n __type__: { object, boolean: bool },\n },\n timestep: { number },\n adaptiveTimestep: { boolean: bool },\n wind: {\n x: { number },\n y: { number },\n __type__: { object },\n },\n __type__: { object, boolean: bool },\n },\n\n //globals :\n autoResize: { boolean: bool },\n clickToUse: { boolean: bool },\n locale: { string },\n locales: {\n __any__: { any },\n __type__: { object },\n },\n height: { string },\n width: { string },\n __type__: { object },\n};\n/* eslint-enable @typescript-eslint/naming-convention */\n\n/**\n * This provides ranges, initial values, steps and dropdown menu choices for the\n * configuration.\n * @remarks\n * Checkbox: `boolean`\n * The value supllied will be used as the initial value.\n *\n * Text field: `string`\n * The passed text will be used as the initial value. Any text will be\n * accepted afterwards.\n *\n * Number range: `[number, number, number, number]`\n * The meanings are `[initial value, min, max, step]`.\n *\n * Dropdown: `[Exclude, ...(string | number | boolean)[]]`\n * Translations for people with poor understanding of TypeScript: the first\n * value always has to be a string but never `\"color\"`, the rest can be any\n * combination of strings, numbers and booleans.\n *\n * Color picker: `[\"color\", string]`\n * The first value says this will be a color picker not a dropdown menu. The\n * next value is the initial color.\n */\nconst configureOptions: ConfiguratorConfig = {\n nodes: {\n borderWidth: [1, 0, 10, 1],\n borderWidthSelected: [2, 0, 10, 1],\n color: {\n border: [\"color\", \"#2B7CE9\"],\n background: [\"color\", \"#97C2FC\"],\n highlight: {\n border: [\"color\", \"#2B7CE9\"],\n background: [\"color\", \"#D2E5FF\"],\n },\n hover: {\n border: [\"color\", \"#2B7CE9\"],\n background: [\"color\", \"#D2E5FF\"],\n },\n },\n opacity: [0, 0, 1, 0.1],\n fixed: {\n x: false,\n y: false,\n },\n font: {\n color: [\"color\", \"#343434\"],\n size: [14, 0, 100, 1], // px\n face: [\"arial\", \"verdana\", \"tahoma\"],\n background: [\"color\", \"none\"],\n strokeWidth: [0, 0, 50, 1], // px\n strokeColor: [\"color\", \"#ffffff\"],\n },\n //group: 'string',\n hidden: false,\n labelHighlightBold: true,\n //icon: {\n // face: 'string', //'FontAwesome',\n // code: 'string', //'\\uf007',\n // size: [50, 0, 200, 1], //50,\n // color: ['color','#2B7CE9'] //'#aa00ff'\n //},\n //image: 'string', // --> URL\n physics: true,\n scaling: {\n min: [10, 0, 200, 1],\n max: [30, 0, 200, 1],\n label: {\n enabled: false,\n min: [14, 0, 200, 1],\n max: [30, 0, 200, 1],\n maxVisible: [30, 0, 200, 1],\n drawThreshold: [5, 0, 20, 1],\n },\n },\n shadow: {\n enabled: false,\n color: \"rgba(0,0,0,0.5)\",\n size: [10, 0, 20, 1],\n x: [5, -30, 30, 1],\n y: [5, -30, 30, 1],\n },\n shape: [\n \"ellipse\",\n \"box\",\n \"circle\",\n \"database\",\n \"diamond\",\n \"dot\",\n \"square\",\n \"star\",\n \"text\",\n \"triangle\",\n \"triangleDown\",\n \"hexagon\",\n ],\n shapeProperties: {\n borderDashes: false,\n borderRadius: [6, 0, 20, 1],\n interpolation: true,\n useImageSize: false,\n },\n size: [25, 0, 200, 1],\n },\n edges: {\n arrows: {\n to: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: \"arrow\" },\n middle: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: \"arrow\" },\n from: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: \"arrow\" },\n },\n endPointOffset: {\n from: [0, -10, 10, 1],\n to: [0, -10, 10, 1],\n },\n arrowStrikethrough: true,\n color: {\n color: [\"color\", \"#848484\"],\n highlight: [\"color\", \"#848484\"],\n hover: [\"color\", \"#848484\"],\n inherit: [\"from\", \"to\", \"both\", true, false],\n opacity: [1, 0, 1, 0.05],\n },\n dashes: false,\n font: {\n color: [\"color\", \"#343434\"],\n size: [14, 0, 100, 1], // px\n face: [\"arial\", \"verdana\", \"tahoma\"],\n background: [\"color\", \"none\"],\n strokeWidth: [2, 0, 50, 1], // px\n strokeColor: [\"color\", \"#ffffff\"],\n align: [\"horizontal\", \"top\", \"middle\", \"bottom\"],\n },\n hidden: false,\n hoverWidth: [1.5, 0, 5, 0.1],\n labelHighlightBold: true,\n physics: true,\n scaling: {\n min: [1, 0, 100, 1],\n max: [15, 0, 100, 1],\n label: {\n enabled: true,\n min: [14, 0, 200, 1],\n max: [30, 0, 200, 1],\n maxVisible: [30, 0, 200, 1],\n drawThreshold: [5, 0, 20, 1],\n },\n },\n selectionWidth: [1.5, 0, 5, 0.1],\n selfReferenceSize: [20, 0, 200, 1],\n selfReference: {\n size: [20, 0, 200, 1],\n angle: [Math.PI / 2, -6 * Math.PI, 6 * Math.PI, Math.PI / 8],\n renderBehindTheNode: true,\n },\n shadow: {\n enabled: false,\n color: \"rgba(0,0,0,0.5)\",\n size: [10, 0, 20, 1],\n x: [5, -30, 30, 1],\n y: [5, -30, 30, 1],\n },\n smooth: {\n enabled: true,\n type: [\n \"dynamic\",\n \"continuous\",\n \"discrete\",\n \"diagonalCross\",\n \"straightCross\",\n \"horizontal\",\n \"vertical\",\n \"curvedCW\",\n \"curvedCCW\",\n \"cubicBezier\",\n ],\n forceDirection: [\"horizontal\", \"vertical\", \"none\"],\n roundness: [0.5, 0, 1, 0.05],\n },\n width: [1, 0, 30, 1],\n },\n layout: {\n //randomSeed: [0, 0, 500, 1],\n //improvedLayout: true,\n hierarchical: {\n enabled: false,\n levelSeparation: [150, 20, 500, 5],\n nodeSpacing: [100, 20, 500, 5],\n treeSpacing: [200, 20, 500, 5],\n blockShifting: true,\n edgeMinimization: true,\n parentCentralization: true,\n direction: [\"UD\", \"DU\", \"LR\", \"RL\"], // UD, DU, LR, RL\n sortMethod: [\"hubsize\", \"directed\"], // hubsize, directed\n shakeTowards: [\"leaves\", \"roots\"], // leaves, roots\n },\n },\n interaction: {\n dragNodes: true,\n dragView: true,\n hideEdgesOnDrag: false,\n hideEdgesOnZoom: false,\n hideNodesOnDrag: false,\n hover: false,\n keyboard: {\n enabled: false,\n speed: {\n x: [10, 0, 40, 1],\n y: [10, 0, 40, 1],\n zoom: [0.02, 0, 0.1, 0.005],\n },\n bindToWindow: true,\n autoFocus: true,\n },\n multiselect: false,\n navigationButtons: false,\n selectable: true,\n selectConnectedEdges: true,\n hoverConnectedEdges: true,\n tooltipDelay: [300, 0, 1000, 25],\n zoomView: true,\n zoomSpeed: [1, 0.1, 2, 0.1],\n },\n manipulation: {\n enabled: false,\n initiallyActive: false,\n },\n physics: {\n enabled: true,\n barnesHut: {\n theta: [0.5, 0.1, 1, 0.05],\n gravitationalConstant: [-2000, -30000, 0, 50],\n centralGravity: [0.3, 0, 10, 0.05],\n springLength: [95, 0, 500, 5],\n springConstant: [0.04, 0, 1.2, 0.005],\n damping: [0.09, 0, 1, 0.01],\n avoidOverlap: [0, 0, 1, 0.01],\n },\n forceAtlas2Based: {\n theta: [0.5, 0.1, 1, 0.05],\n gravitationalConstant: [-50, -500, 0, 1],\n centralGravity: [0.01, 0, 1, 0.005],\n springLength: [95, 0, 500, 5],\n springConstant: [0.08, 0, 1.2, 0.005],\n damping: [0.4, 0, 1, 0.01],\n avoidOverlap: [0, 0, 1, 0.01],\n },\n repulsion: {\n centralGravity: [0.2, 0, 10, 0.05],\n springLength: [200, 0, 500, 5],\n springConstant: [0.05, 0, 1.2, 0.005],\n nodeDistance: [100, 0, 500, 5],\n damping: [0.09, 0, 1, 0.01],\n },\n hierarchicalRepulsion: {\n centralGravity: [0.2, 0, 10, 0.05],\n springLength: [100, 0, 500, 5],\n springConstant: [0.01, 0, 1.2, 0.005],\n nodeDistance: [120, 0, 500, 5],\n damping: [0.09, 0, 1, 0.01],\n avoidOverlap: [0, 0, 1, 0.01],\n },\n maxVelocity: [50, 0, 150, 1],\n minVelocity: [0.1, 0.01, 0.5, 0.01],\n solver: [\n \"barnesHut\",\n \"forceAtlas2Based\",\n \"repulsion\",\n \"hierarchicalRepulsion\",\n ],\n timestep: [0.5, 0.01, 1, 0.01],\n wind: {\n x: [0, -10, 10, 0.1],\n y: [0, -10, 10, 0.1],\n },\n //adaptiveTimestep: true\n },\n} as const;\n\nexport const configuratorHideOption: ConfiguratorHideOption = (\n parentPath,\n optionName,\n options\n): boolean => {\n if (\n parentPath.includes(\"physics\") &&\n (configureOptions as any).physics.solver.includes(optionName) &&\n options.physics.solver !== optionName &&\n optionName !== \"wind\"\n ) {\n return true;\n }\n\n return false;\n};\n\nexport { allOptions, configureOptions };\n","/**\n * The Floyd–Warshall algorithm is an algorithm for finding shortest paths in\n * a weighted graph with positive or negative edge weights (but with no negative\n * cycles). - https://en.wikipedia.org/wiki/Floyd–Warshall_algorithm\n */\nclass FloydWarshall {\n /**\n * @ignore\n */\n constructor() {}\n\n /**\n *\n * @param {object} body\n * @param {Array.} nodesArray\n * @param {Array.} edgesArray\n * @returns {{}}\n */\n getDistances(body, nodesArray, edgesArray) {\n const D_matrix = {};\n const edges = body.edges;\n\n // prepare matrix with large numbers\n for (let i = 0; i < nodesArray.length; i++) {\n const node = nodesArray[i];\n const cell = {};\n D_matrix[node] = cell;\n for (let j = 0; j < nodesArray.length; j++) {\n cell[nodesArray[j]] = i == j ? 0 : 1e9;\n }\n }\n\n // put the weights for the edges in. This assumes unidirectionality.\n for (let i = 0; i < edgesArray.length; i++) {\n const edge = edges[edgesArray[i]];\n // edge has to be connected if it counts to the distances. If it is connected to inner clusters it will crash so we also check if it is in the D_matrix\n if (\n edge.connected === true &&\n D_matrix[edge.fromId] !== undefined &&\n D_matrix[edge.toId] !== undefined\n ) {\n D_matrix[edge.fromId][edge.toId] = 1;\n D_matrix[edge.toId][edge.fromId] = 1;\n }\n }\n\n const nodeCount = nodesArray.length;\n\n // Adapted FloydWarshall based on unidirectionality to greatly reduce complexity.\n for (let k = 0; k < nodeCount; k++) {\n const knode = nodesArray[k];\n const kcolm = D_matrix[knode];\n for (let i = 0; i < nodeCount - 1; i++) {\n const inode = nodesArray[i];\n const icolm = D_matrix[inode];\n for (let j = i + 1; j < nodeCount; j++) {\n const jnode = nodesArray[j];\n const jcolm = D_matrix[jnode];\n\n const val = Math.min(icolm[jnode], icolm[knode] + kcolm[jnode]);\n icolm[jnode] = val;\n jcolm[inode] = val;\n }\n }\n }\n\n return D_matrix;\n }\n}\n\nexport default FloydWarshall;\n","// distance finding algorithm\nimport FloydWarshall from \"./components/algorithms/FloydWarshall.js\";\n\n/**\n * KamadaKawai positions the nodes initially based on\n *\n * \"AN ALGORITHM FOR DRAWING GENERAL UNDIRECTED GRAPHS\"\n * -- Tomihisa KAMADA and Satoru KAWAI in 1989\n *\n * Possible optimizations in the distance calculation can be implemented.\n */\nclass KamadaKawai {\n /**\n * @param {object} body\n * @param {number} edgeLength\n * @param {number} edgeStrength\n */\n constructor(body, edgeLength, edgeStrength) {\n this.body = body;\n this.springLength = edgeLength;\n this.springConstant = edgeStrength;\n this.distanceSolver = new FloydWarshall();\n }\n\n /**\n * Not sure if needed but can be used to update the spring length and spring constant\n * @param {object} options\n */\n setOptions(options) {\n if (options) {\n if (options.springLength) {\n this.springLength = options.springLength;\n }\n if (options.springConstant) {\n this.springConstant = options.springConstant;\n }\n }\n }\n\n /**\n * Position the system\n * @param {Array.} nodesArray\n * @param {Array.} edgesArray\n * @param {boolean} [ignoreClusters]\n */\n solve(nodesArray, edgesArray, ignoreClusters = false) {\n // get distance matrix\n const D_matrix = this.distanceSolver.getDistances(\n this.body,\n nodesArray,\n edgesArray\n ); // distance matrix\n\n // get the L Matrix\n this._createL_matrix(D_matrix);\n\n // get the K Matrix\n this._createK_matrix(D_matrix);\n\n // initial E Matrix\n this._createE_matrix();\n\n // calculate positions\n const threshold = 0.01;\n const innerThreshold = 1;\n let iterations = 0;\n const maxIterations = Math.max(\n 1000,\n Math.min(10 * this.body.nodeIndices.length, 6000)\n );\n const maxInnerIterations = 5;\n\n let maxEnergy = 1e9;\n let highE_nodeId = 0,\n dE_dx = 0,\n dE_dy = 0,\n delta_m = 0,\n subIterations = 0;\n\n while (maxEnergy > threshold && iterations < maxIterations) {\n iterations += 1;\n [highE_nodeId, maxEnergy, dE_dx, dE_dy] =\n this._getHighestEnergyNode(ignoreClusters);\n delta_m = maxEnergy;\n subIterations = 0;\n while (delta_m > innerThreshold && subIterations < maxInnerIterations) {\n subIterations += 1;\n this._moveNode(highE_nodeId, dE_dx, dE_dy);\n [delta_m, dE_dx, dE_dy] = this._getEnergy(highE_nodeId);\n }\n }\n }\n\n /**\n * get the node with the highest energy\n * @param {boolean} ignoreClusters\n * @returns {number[]}\n * @private\n */\n _getHighestEnergyNode(ignoreClusters) {\n const nodesArray = this.body.nodeIndices;\n const nodes = this.body.nodes;\n let maxEnergy = 0;\n let maxEnergyNodeId = nodesArray[0];\n let dE_dx_max = 0,\n dE_dy_max = 0;\n\n for (let nodeIdx = 0; nodeIdx < nodesArray.length; nodeIdx++) {\n const m = nodesArray[nodeIdx];\n // by not evaluating nodes with predefined positions we should only move nodes that have no positions.\n if (\n nodes[m].predefinedPosition !== true ||\n (nodes[m].isCluster === true && ignoreClusters === true) ||\n nodes[m].options.fixed.x !== true ||\n nodes[m].options.fixed.y !== true\n ) {\n const [delta_m, dE_dx, dE_dy] = this._getEnergy(m);\n if (maxEnergy < delta_m) {\n maxEnergy = delta_m;\n maxEnergyNodeId = m;\n dE_dx_max = dE_dx;\n dE_dy_max = dE_dy;\n }\n }\n }\n\n return [maxEnergyNodeId, maxEnergy, dE_dx_max, dE_dy_max];\n }\n\n /**\n * calculate the energy of a single node\n * @param {Node.id} m\n * @returns {number[]}\n * @private\n */\n _getEnergy(m) {\n const [dE_dx, dE_dy] = this.E_sums[m];\n const delta_m = Math.sqrt(dE_dx ** 2 + dE_dy ** 2);\n return [delta_m, dE_dx, dE_dy];\n }\n\n /**\n * move the node based on it's energy\n * the dx and dy are calculated from the linear system proposed by Kamada and Kawai\n * @param {number} m\n * @param {number} dE_dx\n * @param {number} dE_dy\n * @private\n */\n _moveNode(m, dE_dx, dE_dy) {\n const nodesArray = this.body.nodeIndices;\n const nodes = this.body.nodes;\n let d2E_dx2 = 0;\n let d2E_dxdy = 0;\n let d2E_dy2 = 0;\n\n const x_m = nodes[m].x;\n const y_m = nodes[m].y;\n const km = this.K_matrix[m];\n const lm = this.L_matrix[m];\n\n for (let iIdx = 0; iIdx < nodesArray.length; iIdx++) {\n const i = nodesArray[iIdx];\n if (i !== m) {\n const x_i = nodes[i].x;\n const y_i = nodes[i].y;\n const kmat = km[i];\n const lmat = lm[i];\n const denominator = 1.0 / ((x_m - x_i) ** 2 + (y_m - y_i) ** 2) ** 1.5;\n d2E_dx2 += kmat * (1 - lmat * (y_m - y_i) ** 2 * denominator);\n d2E_dxdy += kmat * (lmat * (x_m - x_i) * (y_m - y_i) * denominator);\n d2E_dy2 += kmat * (1 - lmat * (x_m - x_i) ** 2 * denominator);\n }\n }\n // make the variable names easier to make the solving of the linear system easier to read\n const A = d2E_dx2,\n B = d2E_dxdy,\n C = dE_dx,\n D = d2E_dy2,\n E = dE_dy;\n\n // solve the linear system for dx and dy\n const dy = (C / A + E / B) / (B / A - D / B);\n const dx = -(B * dy + C) / A;\n\n // move the node\n nodes[m].x += dx;\n nodes[m].y += dy;\n\n // Recalculate E_matrix (should be incremental)\n this._updateE_matrix(m);\n }\n\n /**\n * Create the L matrix: edge length times shortest path\n * @param {object} D_matrix\n * @private\n */\n _createL_matrix(D_matrix) {\n const nodesArray = this.body.nodeIndices;\n const edgeLength = this.springLength;\n\n this.L_matrix = [];\n for (let i = 0; i < nodesArray.length; i++) {\n this.L_matrix[nodesArray[i]] = {};\n for (let j = 0; j < nodesArray.length; j++) {\n this.L_matrix[nodesArray[i]][nodesArray[j]] =\n edgeLength * D_matrix[nodesArray[i]][nodesArray[j]];\n }\n }\n }\n\n /**\n * Create the K matrix: spring constants times shortest path\n * @param {object} D_matrix\n * @private\n */\n _createK_matrix(D_matrix) {\n const nodesArray = this.body.nodeIndices;\n const edgeStrength = this.springConstant;\n\n this.K_matrix = [];\n for (let i = 0; i < nodesArray.length; i++) {\n this.K_matrix[nodesArray[i]] = {};\n for (let j = 0; j < nodesArray.length; j++) {\n this.K_matrix[nodesArray[i]][nodesArray[j]] =\n edgeStrength * D_matrix[nodesArray[i]][nodesArray[j]] ** -2;\n }\n }\n }\n\n /**\n * Create matrix with all energies between nodes\n * @private\n */\n _createE_matrix() {\n const nodesArray = this.body.nodeIndices;\n const nodes = this.body.nodes;\n this.E_matrix = {};\n this.E_sums = {};\n for (let mIdx = 0; mIdx < nodesArray.length; mIdx++) {\n this.E_matrix[nodesArray[mIdx]] = [];\n }\n for (let mIdx = 0; mIdx < nodesArray.length; mIdx++) {\n const m = nodesArray[mIdx];\n const x_m = nodes[m].x;\n const y_m = nodes[m].y;\n let dE_dx = 0;\n let dE_dy = 0;\n for (let iIdx = mIdx; iIdx < nodesArray.length; iIdx++) {\n const i = nodesArray[iIdx];\n if (i !== m) {\n const x_i = nodes[i].x;\n const y_i = nodes[i].y;\n const denominator =\n 1.0 / Math.sqrt((x_m - x_i) ** 2 + (y_m - y_i) ** 2);\n this.E_matrix[m][iIdx] = [\n this.K_matrix[m][i] *\n (x_m - x_i - this.L_matrix[m][i] * (x_m - x_i) * denominator),\n this.K_matrix[m][i] *\n (y_m - y_i - this.L_matrix[m][i] * (y_m - y_i) * denominator),\n ];\n this.E_matrix[i][mIdx] = this.E_matrix[m][iIdx];\n dE_dx += this.E_matrix[m][iIdx][0];\n dE_dy += this.E_matrix[m][iIdx][1];\n }\n }\n //Store sum\n this.E_sums[m] = [dE_dx, dE_dy];\n }\n }\n\n /**\n * Update method, just doing single column (rows are auto-updated) (update all sums)\n * @param {number} m\n * @private\n */\n _updateE_matrix(m) {\n const nodesArray = this.body.nodeIndices;\n const nodes = this.body.nodes;\n const colm = this.E_matrix[m];\n const kcolm = this.K_matrix[m];\n const lcolm = this.L_matrix[m];\n const x_m = nodes[m].x;\n const y_m = nodes[m].y;\n let dE_dx = 0;\n let dE_dy = 0;\n for (let iIdx = 0; iIdx < nodesArray.length; iIdx++) {\n const i = nodesArray[iIdx];\n if (i !== m) {\n //Keep old energy value for sum modification below\n const cell = colm[iIdx];\n const oldDx = cell[0];\n const oldDy = cell[1];\n\n //Calc new energy:\n const x_i = nodes[i].x;\n const y_i = nodes[i].y;\n const denominator =\n 1.0 / Math.sqrt((x_m - x_i) ** 2 + (y_m - y_i) ** 2);\n const dx =\n kcolm[i] * (x_m - x_i - lcolm[i] * (x_m - x_i) * denominator);\n const dy =\n kcolm[i] * (y_m - y_i - lcolm[i] * (y_m - y_i) * denominator);\n colm[iIdx] = [dx, dy];\n dE_dx += dx;\n dE_dy += dy;\n\n //add new energy to sum of each column\n const sum = this.E_sums[i];\n sum[0] += dx - oldDx;\n sum[1] += dy - oldDy;\n }\n }\n //Store sum at -1 index\n this.E_sums[m] = [dE_dx, dE_dy];\n }\n}\n\nexport default KamadaKawai;\n","// Load custom shapes into CanvasRenderingContext2D\nimport \"./shapes\";\n\nimport \"vis-util/esnext/styles/activator.css\";\nimport \"vis-util/esnext/styles/bootstrap.css\";\nimport \"vis-util/esnext/styles/color-picker.css\";\nimport \"vis-util/esnext/styles/configurator.css\";\nimport \"vis-util/esnext/styles/popup.css\";\n\nimport Emitter from \"component-emitter\";\nimport {\n Activator,\n Configurator,\n VALIDATOR_PRINT_STYLE,\n Validator,\n deepExtend,\n recursiveDOMDelete,\n selectiveDeepExtend,\n} from \"vis-util/esnext\";\nimport { DOTToGraph } from \"./dotparser\";\nimport { parseGephi } from \"./gephiParser\";\nimport * as locales from \"./locales\";\nimport { normalizeLanguageCode } from \"./locale-utils\";\n\nimport Images from \"./Images\";\nimport { Groups } from \"./modules/Groups\";\nimport NodesHandler from \"./modules/NodesHandler\";\nimport EdgesHandler from \"./modules/EdgesHandler\";\nimport PhysicsEngine from \"./modules/PhysicsEngine\";\nimport ClusterEngine from \"./modules/Clustering\";\nimport CanvasRenderer from \"./modules/CanvasRenderer\";\nimport Canvas from \"./modules/Canvas\";\nimport View from \"./modules/View\";\nimport InteractionHandler from \"./modules/InteractionHandler\";\nimport SelectionHandler from \"./modules/SelectionHandler\";\nimport LayoutEngine from \"./modules/LayoutEngine\";\nimport ManipulationSystem from \"./modules/ManipulationSystem\";\nimport {\n allOptions,\n configureOptions,\n configuratorHideOption,\n} from \"./options\";\nimport KamadaKawai from \"./modules/KamadaKawai.js\";\n\n/**\n * Create a network visualization, displaying nodes and edges.\n * @param {Element} container The DOM element in which the Network will\n * be created. Normally a div element.\n * @param {object} data An object containing parameters\n * {Array} nodes\n * {Array} edges\n * @param {object} options Options\n * @class Network\n */\nexport function Network(container, data, options) {\n if (!(this instanceof Network)) {\n throw new SyntaxError(\"Constructor must be called with the new operator\");\n }\n\n // set constant values\n this.options = {};\n this.defaultOptions = {\n locale: \"en\",\n locales: locales,\n clickToUse: false,\n };\n Object.assign(this.options, this.defaultOptions);\n\n /**\n * Containers for nodes and edges.\n *\n * 'edges' and 'nodes' contain the full definitions of all the network elements.\n * 'nodeIndices' and 'edgeIndices' contain the id's of the active elements.\n *\n * The distinction is important, because a defined node need not be active, i.e.\n * visible on the canvas. This happens in particular when clusters are defined, in\n * that case there will be nodes and edges not displayed.\n * The bottom line is that all code with actions related to visibility, *must* use\n * 'nodeIndices' and 'edgeIndices', not 'nodes' and 'edges' directly.\n */\n this.body = {\n container: container,\n\n // See comment above for following fields\n nodes: {},\n nodeIndices: [],\n edges: {},\n edgeIndices: [],\n\n emitter: {\n on: this.on.bind(this),\n off: this.off.bind(this),\n emit: this.emit.bind(this),\n once: this.once.bind(this),\n },\n eventListeners: {\n onTap: function () {},\n onTouch: function () {},\n onDoubleTap: function () {},\n onHold: function () {},\n onDragStart: function () {},\n onDrag: function () {},\n onDragEnd: function () {},\n onMouseWheel: function () {},\n onPinch: function () {},\n onMouseMove: function () {},\n onRelease: function () {},\n onContext: function () {},\n },\n data: {\n nodes: null, // A DataSet or DataView\n edges: null, // A DataSet or DataView\n },\n functions: {\n createNode: function () {},\n createEdge: function () {},\n getPointer: function () {},\n },\n modules: {},\n view: {\n scale: 1,\n translation: { x: 0, y: 0 },\n },\n selectionBox: {\n show: false,\n position: {\n start: { x: 0, y: 0 },\n end: { x: 0, y: 0 },\n },\n },\n };\n\n // bind the event listeners\n this.bindEventListeners();\n\n // setting up all modules\n this.images = new Images(() => this.body.emitter.emit(\"_requestRedraw\")); // object with images\n this.groups = new Groups(); // object with groups\n this.canvas = new Canvas(this.body); // DOM handler\n this.selectionHandler = new SelectionHandler(this.body, this.canvas); // Selection handler\n this.interactionHandler = new InteractionHandler(\n this.body,\n this.canvas,\n this.selectionHandler\n ); // Interaction handler handles all the hammer bindings (that are bound by canvas), key\n this.view = new View(this.body, this.canvas); // camera handler, does animations and zooms\n this.renderer = new CanvasRenderer(this.body, this.canvas); // renderer, starts renderloop, has events that modules can hook into\n this.physics = new PhysicsEngine(this.body); // physics engine, does all the simulations\n this.layoutEngine = new LayoutEngine(this.body); // layout engine for inital layout and hierarchical layout\n this.clustering = new ClusterEngine(this.body); // clustering api\n this.manipulation = new ManipulationSystem(\n this.body,\n this.canvas,\n this.selectionHandler,\n this.interactionHandler\n ); // data manipulation system\n\n this.nodesHandler = new NodesHandler(\n this.body,\n this.images,\n this.groups,\n this.layoutEngine\n ); // Handle adding, deleting and updating of nodes as well as global options\n this.edgesHandler = new EdgesHandler(this.body, this.images, this.groups); // Handle adding, deleting and updating of edges as well as global options\n\n this.body.modules[\"kamadaKawai\"] = new KamadaKawai(this.body, 150, 0.05); // Layouting algorithm.\n this.body.modules[\"clustering\"] = this.clustering;\n\n // create the DOM elements\n this.canvas._create();\n\n // apply options\n this.setOptions(options);\n\n // load data (the disable start variable will be the same as the enabled clustering)\n this.setData(data);\n}\n\n// Extend Network with an Emitter mixin\nEmitter(Network.prototype);\n\n/**\n * Set options\n * @param {object} options\n */\nNetwork.prototype.setOptions = function (options) {\n if (options === null) {\n options = undefined; // This ensures that options handling doesn't crash in the handling\n }\n\n if (options !== undefined) {\n const errorFound = Validator.validate(options, allOptions);\n if (errorFound === true) {\n console.error(\n \"%cErrors have been found in the supplied options object.\",\n VALIDATOR_PRINT_STYLE\n );\n }\n\n // copy the global fields over\n const fields = [\"locale\", \"locales\", \"clickToUse\"];\n selectiveDeepExtend(fields, this.options, options);\n\n // normalize the locale or use English\n if (options.locale !== undefined) {\n options.locale = normalizeLanguageCode(\n options.locales || this.options.locales,\n options.locale\n );\n }\n\n // the hierarchical system can adapt the edges and the physics to it's own options because not all combinations work with the hierarichical system.\n options = this.layoutEngine.setOptions(options.layout, options);\n\n this.canvas.setOptions(options); // options for canvas are in globals\n\n // pass the options to the modules\n this.groups.setOptions(options.groups);\n this.nodesHandler.setOptions(options.nodes);\n this.edgesHandler.setOptions(options.edges);\n this.physics.setOptions(options.physics);\n this.manipulation.setOptions(options.manipulation, options, this.options); // manipulation uses the locales in the globals\n\n this.interactionHandler.setOptions(options.interaction);\n this.renderer.setOptions(options.interaction); // options for rendering are in interaction\n this.selectionHandler.setOptions(options.interaction); // options for selection are in interaction\n\n // reload the settings of the nodes to apply changes in groups that are not referenced by pointer.\n if (options.groups !== undefined) {\n this.body.emitter.emit(\"refreshNodes\");\n }\n // these two do not have options at the moment, here for completeness\n //this.view.setOptions(options.view);\n //this.clustering.setOptions(options.clustering);\n\n if (\"configure\" in options) {\n if (!this.configurator) {\n this.configurator = new Configurator(\n this,\n this.body.container,\n configureOptions,\n this.canvas.pixelRatio,\n configuratorHideOption\n );\n }\n\n this.configurator.setOptions(options.configure);\n }\n\n // if the configuration system is enabled, copy all options and put them into the config system\n if (this.configurator && this.configurator.options.enabled === true) {\n const networkOptions = {\n nodes: {},\n edges: {},\n layout: {},\n interaction: {},\n manipulation: {},\n physics: {},\n global: {},\n };\n deepExtend(networkOptions.nodes, this.nodesHandler.options);\n deepExtend(networkOptions.edges, this.edgesHandler.options);\n deepExtend(networkOptions.layout, this.layoutEngine.options);\n // load the selectionHandler and render default options in to the interaction group\n deepExtend(networkOptions.interaction, this.selectionHandler.options);\n deepExtend(networkOptions.interaction, this.renderer.options);\n\n deepExtend(networkOptions.interaction, this.interactionHandler.options);\n deepExtend(networkOptions.manipulation, this.manipulation.options);\n deepExtend(networkOptions.physics, this.physics.options);\n\n // load globals into the global object\n deepExtend(networkOptions.global, this.canvas.options);\n deepExtend(networkOptions.global, this.options);\n\n this.configurator.setModuleOptions(networkOptions);\n }\n\n // handle network global options\n if (options.clickToUse !== undefined) {\n if (options.clickToUse === true) {\n if (this.activator === undefined) {\n this.activator = new Activator(this.canvas.frame);\n this.activator.on(\"change\", () => {\n this.body.emitter.emit(\"activate\");\n });\n }\n } else {\n if (this.activator !== undefined) {\n this.activator.destroy();\n delete this.activator;\n }\n this.body.emitter.emit(\"activate\");\n }\n } else {\n this.body.emitter.emit(\"activate\");\n }\n\n this.canvas.setSize();\n // start the physics simulation. Can be safely called multiple times.\n this.body.emitter.emit(\"startSimulation\");\n }\n};\n\n/**\n * Update the visible nodes and edges list with the most recent node state.\n *\n * Visible nodes are stored in this.body.nodeIndices.\n * Visible edges are stored in this.body.edgeIndices.\n * A node or edges is visible if it is not hidden or clustered.\n * @private\n */\nNetwork.prototype._updateVisibleIndices = function () {\n const nodes = this.body.nodes;\n const edges = this.body.edges;\n this.body.nodeIndices = [];\n this.body.edgeIndices = [];\n\n for (const nodeId in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, nodeId)) {\n if (\n !this.clustering._isClusteredNode(nodeId) &&\n nodes[nodeId].options.hidden === false\n ) {\n this.body.nodeIndices.push(nodes[nodeId].id);\n }\n }\n }\n\n for (const edgeId in edges) {\n if (Object.prototype.hasOwnProperty.call(edges, edgeId)) {\n const edge = edges[edgeId];\n\n // It can happen that this is executed *after* a node edge has been removed,\n // but *before* the edge itself has been removed. Taking this into account.\n const fromNode = nodes[edge.fromId];\n const toNode = nodes[edge.toId];\n const edgeNodesPresent = fromNode !== undefined && toNode !== undefined;\n\n const isVisible =\n !this.clustering._isClusteredEdge(edgeId) &&\n edge.options.hidden === false &&\n edgeNodesPresent &&\n fromNode.options.hidden === false && // Also hidden if any of its connecting nodes are hidden\n toNode.options.hidden === false; // idem\n\n if (isVisible) {\n this.body.edgeIndices.push(edge.id);\n }\n }\n }\n};\n\n/**\n * Bind all events\n */\nNetwork.prototype.bindEventListeners = function () {\n // This event will trigger a rebuilding of the cache everything.\n // Used when nodes or edges have been added or removed.\n this.body.emitter.on(\"_dataChanged\", () => {\n this.edgesHandler._updateState();\n this.body.emitter.emit(\"_dataUpdated\");\n });\n\n // this is called when options of EXISTING nodes or edges have changed.\n this.body.emitter.on(\"_dataUpdated\", () => {\n // Order important in following block\n this.clustering._updateState();\n this._updateVisibleIndices();\n\n this._updateValueRange(this.body.nodes);\n this._updateValueRange(this.body.edges);\n // start simulation (can be called safely, even if already running)\n this.body.emitter.emit(\"startSimulation\");\n this.body.emitter.emit(\"_requestRedraw\");\n });\n};\n\n/**\n * Set nodes and edges, and optionally options as well.\n * @param {object} data Object containing parameters:\n * {Array | DataSet | DataView} [nodes] Array with nodes\n * {Array | DataSet | DataView} [edges] Array with edges\n * {String} [dot] String containing data in DOT format\n * {String} [gephi] String containing data in gephi JSON format\n * {Options} [options] Object with options\n */\nNetwork.prototype.setData = function (data) {\n // reset the physics engine.\n this.body.emitter.emit(\"resetPhysics\");\n this.body.emitter.emit(\"_resetData\");\n\n // unselect all to ensure no selections from old data are carried over.\n this.selectionHandler.unselectAll();\n\n if (data && data.dot && (data.nodes || data.edges)) {\n throw new SyntaxError(\n 'Data must contain either parameter \"dot\" or ' +\n ' parameter pair \"nodes\" and \"edges\", but not both.'\n );\n }\n\n // set options\n this.setOptions(data && data.options);\n // set all data\n if (data && data.dot) {\n console.warn(\n \"The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);\"\n );\n // parse DOT file\n const dotData = DOTToGraph(data.dot);\n this.setData(dotData);\n return;\n } else if (data && data.gephi) {\n // parse DOT file\n console.warn(\n \"The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);\"\n );\n const gephiData = parseGephi(data.gephi);\n this.setData(gephiData);\n return;\n } else {\n this.nodesHandler.setData(data && data.nodes, true);\n this.edgesHandler.setData(data && data.edges, true);\n }\n\n // emit change in data\n this.body.emitter.emit(\"_dataChanged\");\n\n // emit data loaded\n this.body.emitter.emit(\"_dataLoaded\");\n\n // find a stable position or start animating to a stable position\n this.body.emitter.emit(\"initPhysics\");\n};\n\n/**\n * Cleans up all bindings of the network, removing it fully from the memory IF the variable is set to null after calling this function.\n * var network = new vis.Network(..);\n * network.destroy();\n * network = null;\n */\nNetwork.prototype.destroy = function () {\n this.body.emitter.emit(\"destroy\");\n // clear events\n this.body.emitter.off();\n this.off();\n\n // delete modules\n delete this.groups;\n delete this.canvas;\n delete this.selectionHandler;\n delete this.interactionHandler;\n delete this.view;\n delete this.renderer;\n delete this.physics;\n delete this.layoutEngine;\n delete this.clustering;\n delete this.manipulation;\n delete this.nodesHandler;\n delete this.edgesHandler;\n delete this.configurator;\n delete this.images;\n\n for (const nodeId in this.body.nodes) {\n if (!Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId))\n continue;\n delete this.body.nodes[nodeId];\n }\n\n for (const edgeId in this.body.edges) {\n if (!Object.prototype.hasOwnProperty.call(this.body.edges, edgeId))\n continue;\n delete this.body.edges[edgeId];\n }\n\n // remove the container and everything inside it recursively\n recursiveDOMDelete(this.body.container);\n};\n\n/**\n * Update the values of all object in the given array according to the current\n * value range of the objects in the array.\n * @param {object} obj An object containing a set of Edges or Nodes\n * The objects must have a method getValue() and\n * setValueRange(min, max).\n * @private\n */\nNetwork.prototype._updateValueRange = function (obj) {\n let id;\n\n // determine the range of the objects\n let valueMin = undefined;\n let valueMax = undefined;\n let valueTotal = 0;\n for (id in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, id)) {\n const value = obj[id].getValue();\n if (value !== undefined) {\n valueMin = valueMin === undefined ? value : Math.min(value, valueMin);\n valueMax = valueMax === undefined ? value : Math.max(value, valueMax);\n valueTotal += value;\n }\n }\n }\n\n // adjust the range of all objects\n if (valueMin !== undefined && valueMax !== undefined) {\n for (id in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, id)) {\n obj[id].setValueRange(valueMin, valueMax, valueTotal);\n }\n }\n }\n};\n\n/**\n * Returns true when the Network is active.\n * @returns {boolean}\n */\nNetwork.prototype.isActive = function () {\n return !this.activator || this.activator.active;\n};\n\nNetwork.prototype.setSize = function () {\n return this.canvas.setSize.apply(this.canvas, arguments);\n};\nNetwork.prototype.canvasToDOM = function () {\n return this.canvas.canvasToDOM.apply(this.canvas, arguments);\n};\nNetwork.prototype.DOMtoCanvas = function () {\n return this.canvas.DOMtoCanvas.apply(this.canvas, arguments);\n};\n\n/**\n * Nodes can be in clusters. Clusters can also be in clusters. This function returns and array of\n * nodeIds showing where the node is.\n *\n * If any nodeId in the chain, especially the first passed in as a parameter, is not present in\n * the current nodes list, an empty array is returned.\n *\n * Example:\n * cluster 'A' contains cluster 'B',\n * cluster 'B' contains cluster 'C',\n * cluster 'C' contains node 'fred'.\n * `jsnetwork.clustering.findNode('fred')` will return `['A','B','C','fred']`.\n * @param {string|number} nodeId\n * @returns {Array}\n */\nNetwork.prototype.findNode = function () {\n return this.clustering.findNode.apply(this.clustering, arguments);\n};\n\nNetwork.prototype.isCluster = function () {\n return this.clustering.isCluster.apply(this.clustering, arguments);\n};\nNetwork.prototype.openCluster = function () {\n return this.clustering.openCluster.apply(this.clustering, arguments);\n};\nNetwork.prototype.cluster = function () {\n return this.clustering.cluster.apply(this.clustering, arguments);\n};\nNetwork.prototype.getNodesInCluster = function () {\n return this.clustering.getNodesInCluster.apply(this.clustering, arguments);\n};\nNetwork.prototype.clusterByConnection = function () {\n return this.clustering.clusterByConnection.apply(this.clustering, arguments);\n};\nNetwork.prototype.clusterByHubsize = function () {\n return this.clustering.clusterByHubsize.apply(this.clustering, arguments);\n};\nNetwork.prototype.updateClusteredNode = function () {\n return this.clustering.updateClusteredNode.apply(this.clustering, arguments);\n};\nNetwork.prototype.getClusteredEdges = function () {\n return this.clustering.getClusteredEdges.apply(this.clustering, arguments);\n};\nNetwork.prototype.getBaseEdge = function () {\n return this.clustering.getBaseEdge.apply(this.clustering, arguments);\n};\nNetwork.prototype.getBaseEdges = function () {\n return this.clustering.getBaseEdges.apply(this.clustering, arguments);\n};\nNetwork.prototype.updateEdge = function () {\n return this.clustering.updateEdge.apply(this.clustering, arguments);\n};\n\n/**\n * This method will cluster all nodes with 1 edge with their respective connected node.\n * The options object is explained in full below.\n * @param {object} [options]\n * @returns {undefined}\n */\nNetwork.prototype.clusterOutliers = function () {\n return this.clustering.clusterOutliers.apply(this.clustering, arguments);\n};\n\nNetwork.prototype.getSeed = function () {\n return this.layoutEngine.getSeed.apply(this.layoutEngine, arguments);\n};\nNetwork.prototype.enableEditMode = function () {\n return this.manipulation.enableEditMode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.disableEditMode = function () {\n return this.manipulation.disableEditMode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.addNodeMode = function () {\n return this.manipulation.addNodeMode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.editNode = function () {\n return this.manipulation.editNode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.editNodeMode = function () {\n console.warn(\"Deprecated: Please use editNode instead of editNodeMode.\");\n return this.manipulation.editNode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.addEdgeMode = function () {\n return this.manipulation.addEdgeMode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.editEdgeMode = function () {\n return this.manipulation.editEdgeMode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.deleteSelected = function () {\n return this.manipulation.deleteSelected.apply(this.manipulation, arguments);\n};\nNetwork.prototype.getPositions = function () {\n return this.nodesHandler.getPositions.apply(this.nodesHandler, arguments);\n};\nNetwork.prototype.getPosition = function () {\n return this.nodesHandler.getPosition.apply(this.nodesHandler, arguments);\n};\nNetwork.prototype.storePositions = function () {\n return this.nodesHandler.storePositions.apply(this.nodesHandler, arguments);\n};\nNetwork.prototype.moveNode = function () {\n return this.nodesHandler.moveNode.apply(this.nodesHandler, arguments);\n};\nNetwork.prototype.getBoundingBox = function () {\n return this.nodesHandler.getBoundingBox.apply(this.nodesHandler, arguments);\n};\nNetwork.prototype.getConnectedNodes = function (objectId) {\n if (this.body.nodes[objectId] !== undefined) {\n return this.nodesHandler.getConnectedNodes.apply(\n this.nodesHandler,\n arguments\n );\n } else {\n return this.edgesHandler.getConnectedNodes.apply(\n this.edgesHandler,\n arguments\n );\n }\n};\nNetwork.prototype.getConnectedEdges = function () {\n return this.nodesHandler.getConnectedEdges.apply(\n this.nodesHandler,\n arguments\n );\n};\nNetwork.prototype.startSimulation = function () {\n return this.physics.startSimulation.apply(this.physics, arguments);\n};\nNetwork.prototype.stopSimulation = function () {\n return this.physics.stopSimulation.apply(this.physics, arguments);\n};\nNetwork.prototype.stabilize = function () {\n return this.physics.stabilize.apply(this.physics, arguments);\n};\nNetwork.prototype.getSelection = function () {\n return this.selectionHandler.getSelection.apply(\n this.selectionHandler,\n arguments\n );\n};\nNetwork.prototype.setSelection = function () {\n return this.selectionHandler.setSelection.apply(\n this.selectionHandler,\n arguments\n );\n};\nNetwork.prototype.getSelectedNodes = function () {\n return this.selectionHandler.getSelectedNodeIds.apply(\n this.selectionHandler,\n arguments\n );\n};\nNetwork.prototype.getSelectedEdges = function () {\n return this.selectionHandler.getSelectedEdgeIds.apply(\n this.selectionHandler,\n arguments\n );\n};\nNetwork.prototype.getNodeAt = function () {\n const node = this.selectionHandler.getNodeAt.apply(\n this.selectionHandler,\n arguments\n );\n if (node !== undefined && node.id !== undefined) {\n return node.id;\n }\n return node;\n};\nNetwork.prototype.getEdgeAt = function () {\n const edge = this.selectionHandler.getEdgeAt.apply(\n this.selectionHandler,\n arguments\n );\n if (edge !== undefined && edge.id !== undefined) {\n return edge.id;\n }\n return edge;\n};\nNetwork.prototype.selectNodes = function () {\n return this.selectionHandler.selectNodes.apply(\n this.selectionHandler,\n arguments\n );\n};\nNetwork.prototype.selectEdges = function () {\n return this.selectionHandler.selectEdges.apply(\n this.selectionHandler,\n arguments\n );\n};\nNetwork.prototype.unselectAll = function () {\n this.selectionHandler.unselectAll.apply(this.selectionHandler, arguments);\n this.selectionHandler.commitWithoutEmitting.apply(this.selectionHandler);\n this.redraw();\n};\nNetwork.prototype.redraw = function () {\n return this.renderer.redraw.apply(this.renderer, arguments);\n};\nNetwork.prototype.getScale = function () {\n return this.view.getScale.apply(this.view, arguments);\n};\nNetwork.prototype.getViewPosition = function () {\n return this.view.getViewPosition.apply(this.view, arguments);\n};\nNetwork.prototype.fit = function () {\n return this.view.fit.apply(this.view, arguments);\n};\nNetwork.prototype.moveTo = function () {\n return this.view.moveTo.apply(this.view, arguments);\n};\nNetwork.prototype.focus = function () {\n return this.view.focus.apply(this.view, arguments);\n};\nNetwork.prototype.releaseNode = function () {\n return this.view.releaseNode.apply(this.view, arguments);\n};\nNetwork.prototype.getOptionsFromConfigurator = function () {\n let options = {};\n if (this.configurator) {\n options = this.configurator.getOptions.apply(this.configurator);\n }\n return options;\n};\n\nexport default Network;\n","// DOM utility methods\n\n/**\n * this prepares the JSON container for allocating SVG elements\n * @param {object} JSONcontainer\n * @private\n */\nexport function prepareElements(JSONcontainer) {\n // cleanup the redundant svgElements;\n for (const elementType in JSONcontainer) {\n if (Object.prototype.hasOwnProperty.call(JSONcontainer, elementType)) {\n JSONcontainer[elementType].redundant = JSONcontainer[elementType].used;\n JSONcontainer[elementType].used = [];\n }\n }\n}\n\n/**\n * this cleans up all the unused SVG elements. By asking for the parentNode, we only need to supply the JSON container from\n * which to remove the redundant elements.\n * @param {object} JSONcontainer\n * @private\n */\nexport function cleanupElements(JSONcontainer) {\n // cleanup the redundant svgElements;\n for (const elementType in JSONcontainer) {\n if (Object.prototype.hasOwnProperty.call(JSONcontainer, elementType)) {\n if (JSONcontainer[elementType].redundant) {\n for (let i = 0; i < JSONcontainer[elementType].redundant.length; i++) {\n JSONcontainer[elementType].redundant[i].parentNode.removeChild(\n JSONcontainer[elementType].redundant[i]\n );\n }\n JSONcontainer[elementType].redundant = [];\n }\n }\n }\n}\n\n/**\n * Ensures that all elements are removed first up so they can be recreated cleanly\n * @param {object} JSONcontainer\n */\nexport function resetElements(JSONcontainer) {\n prepareElements(JSONcontainer);\n cleanupElements(JSONcontainer);\n prepareElements(JSONcontainer);\n}\n\n/**\n * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer\n * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this.\n * @param {string} elementType\n * @param {object} JSONcontainer\n * @param {object} svgContainer\n * @returns {Element}\n * @private\n */\nexport function getSVGElement(elementType, JSONcontainer, svgContainer) {\n let element;\n // allocate SVG element, if it doesnt yet exist, create one.\n if (Object.prototype.hasOwnProperty.call(JSONcontainer, elementType)) {\n // this element has been created before\n // check if there is an redundant element\n if (JSONcontainer[elementType].redundant.length > 0) {\n element = JSONcontainer[elementType].redundant[0];\n JSONcontainer[elementType].redundant.shift();\n } else {\n // create a new element and add it to the SVG\n element = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n elementType\n );\n svgContainer.appendChild(element);\n }\n } else {\n // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it.\n element = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n elementType\n );\n JSONcontainer[elementType] = { used: [], redundant: [] };\n svgContainer.appendChild(element);\n }\n JSONcontainer[elementType].used.push(element);\n return element;\n}\n\n/**\n * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer\n * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this.\n * @param {string} elementType\n * @param {object} JSONcontainer\n * @param {Element} DOMContainer\n * @param {Element} insertBefore\n * @returns {*}\n */\nexport function getDOMElement(\n elementType,\n JSONcontainer,\n DOMContainer,\n insertBefore\n) {\n let element;\n // allocate DOM element, if it doesnt yet exist, create one.\n if (Object.prototype.hasOwnProperty.call(JSONcontainer, elementType)) {\n // this element has been created before\n // check if there is an redundant element\n if (JSONcontainer[elementType].redundant.length > 0) {\n element = JSONcontainer[elementType].redundant[0];\n JSONcontainer[elementType].redundant.shift();\n } else {\n // create a new element and add it to the SVG\n element = document.createElement(elementType);\n if (insertBefore !== undefined) {\n DOMContainer.insertBefore(element, insertBefore);\n } else {\n DOMContainer.appendChild(element);\n }\n }\n } else {\n // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it.\n element = document.createElement(elementType);\n JSONcontainer[elementType] = { used: [], redundant: [] };\n if (insertBefore !== undefined) {\n DOMContainer.insertBefore(element, insertBefore);\n } else {\n DOMContainer.appendChild(element);\n }\n }\n JSONcontainer[elementType].used.push(element);\n return element;\n}\n\n/**\n * Draw a point object. This is a separate function because it can also be called by the legend.\n * The reason the JSONcontainer and the target SVG svgContainer have to be supplied is so the legend can use these functions\n * as well.\n * @param {number} x\n * @param {number} y\n * @param {object} groupTemplate: A template containing the necessary information to draw the datapoint e.g., {style: 'circle', size: 5, className: 'className' }\n * @param groupTemplate\n * @param {object} JSONcontainer\n * @param {object} svgContainer\n * @param {object} labelObj\n * @returns {vis.PointItem}\n */\nexport function drawPoint(\n x,\n y,\n groupTemplate,\n JSONcontainer,\n svgContainer,\n labelObj\n) {\n let point;\n if (groupTemplate.style == \"circle\") {\n point = getSVGElement(\"circle\", JSONcontainer, svgContainer);\n point.setAttributeNS(null, \"cx\", x);\n point.setAttributeNS(null, \"cy\", y);\n point.setAttributeNS(null, \"r\", 0.5 * groupTemplate.size);\n } else {\n point = getSVGElement(\"rect\", JSONcontainer, svgContainer);\n point.setAttributeNS(null, \"x\", x - 0.5 * groupTemplate.size);\n point.setAttributeNS(null, \"y\", y - 0.5 * groupTemplate.size);\n point.setAttributeNS(null, \"width\", groupTemplate.size);\n point.setAttributeNS(null, \"height\", groupTemplate.size);\n }\n\n if (groupTemplate.styles !== undefined) {\n point.setAttributeNS(null, \"style\", groupTemplate.styles);\n }\n point.setAttributeNS(null, \"class\", groupTemplate.className + \" vis-point\");\n //handle label\n\n if (labelObj) {\n const label = getSVGElement(\"text\", JSONcontainer, svgContainer);\n if (labelObj.xOffset) {\n x = x + labelObj.xOffset;\n }\n\n if (labelObj.yOffset) {\n y = y + labelObj.yOffset;\n }\n if (labelObj.content) {\n label.textContent = labelObj.content;\n }\n\n if (labelObj.className) {\n label.setAttributeNS(null, \"class\", labelObj.className + \" vis-label\");\n }\n label.setAttributeNS(null, \"x\", x);\n label.setAttributeNS(null, \"y\", y);\n }\n\n return point;\n}\n\n/**\n * draw a bar SVG element centered on the X coordinate\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {string} className\n * @param {object} JSONcontainer\n * @param {object} svgContainer\n * @param {string} style\n */\nexport function drawBar(\n x,\n y,\n width,\n height,\n className,\n JSONcontainer,\n svgContainer,\n style\n) {\n if (height != 0) {\n if (height < 0) {\n height *= -1;\n y -= height;\n }\n const rect = getSVGElement(\"rect\", JSONcontainer, svgContainer);\n rect.setAttributeNS(null, \"x\", x - 0.5 * width);\n rect.setAttributeNS(null, \"y\", y);\n rect.setAttributeNS(null, \"width\", width);\n rect.setAttributeNS(null, \"height\", height);\n rect.setAttributeNS(null, \"class\", className);\n if (style) {\n rect.setAttributeNS(null, \"style\", style);\n }\n }\n}\n","/**\n * Normalizes language code into the format used internally.\n * @param locales - All the available locales.\n * @param rawCode - The original code as supplied by the user.\n * @returns Language code in the format language-COUNTRY or language, eventually\n * fallbacks to en.\n */\nexport function normalizeLanguageCode(\n locales: Record,\n rawCode: string\n): string {\n try {\n const [rawLanguage, rawCountry] = rawCode.split(/[-_ /]/, 2);\n const language = rawLanguage != null ? rawLanguage.toLowerCase() : null;\n const country = rawCountry != null ? rawCountry.toUpperCase() : null;\n\n if (language && country) {\n const code = language + \"-\" + country;\n if (Object.prototype.hasOwnProperty.call(locales, code)) {\n return code;\n } else {\n console.warn(`Unknown variant ${country} of language ${language}.`);\n }\n }\n\n if (language) {\n const code = language;\n if (Object.prototype.hasOwnProperty.call(locales, code)) {\n return code;\n } else {\n console.warn(`Unknown language ${language}`);\n }\n }\n\n console.warn(`Unknown locale ${rawCode}, falling back to English.`);\n\n return \"en\";\n } catch (error) {\n console.error(error);\n console.warn(\n `Unexpected error while normalizing locale ${rawCode}, falling back to English.`\n );\n\n return \"en\";\n }\n}\n","// Network.\nexport * from \"./network/Network\";\n\nimport Images from \"./network/Images\";\nimport * as dotparser from \"./network/dotparser\";\nimport * as gephiParser from \"./network/gephiParser\";\nimport { parseGephi } from \"./network/gephiParser\";\nimport * as allOptions from \"./network/options\";\nexport const network = {\n Images,\n dotparser,\n gephiParser,\n allOptions,\n convertDot: dotparser.DOTToGraph,\n convertGephi: parseGephi,\n};\n\n// utils\nimport * as DOMutil from \"./DOMutil\";\nexport { DOMutil };\n\n// vis-util\nimport * as util from \"vis-util/esnext\";\nexport { util };\n\n// vis-data\nimport * as data from \"vis-data/esnext\";\nexport { data };\nexport { DataSet, DataView, Queue } from \"vis-data/esnext\";\n\n// bundled external libraries\nimport { Hammer } from \"vis-util/esnext\";\nexport { Hammer };\nimport * as keycharm from \"keycharm\";\nexport { keycharm };\n"],"names":["check","it","Math","global","globalThis","window","self","this","Function","fails","exec","error","functionBindNative","require$$0","test","bind","hasOwnProperty","NATIVE_BIND","FunctionPrototype","prototype","apply","call","functionApply","Reflect","arguments","uncurryThisWithBind","functionUncurryThis","fn","uncurryThis","toString","stringSlice","slice","classofRaw","require$$1","functionUncurryThisClause","documentAll","document","all","documentAll_1","IS_HTMLDDA","undefined","isCallable","argument","descriptors","Object","defineProperty","get","functionCall","$propertyIsEnumerable","propertyIsEnumerable","getOwnPropertyDescriptor","NASHORN_BUG","objectPropertyIsEnumerable","f","V","descriptor","enumerable","match","version","createPropertyDescriptor","bitmap","value","configurable","writable","classof","require$$2","$Object","split","indexedObject","isNullOrUndefined","$TypeError","TypeError","requireObjectCoercible","IndexedObject","toIndexedObject","isObject","path","aFunction","variable","getBuiltIn","namespace","method","length","objectIsPrototypeOf","isPrototypeOf","engineUserAgent","navigator","String","userAgent","process","Deno","versions","v8","engineV8Version","V8_VERSION","$String","symbolConstructorDetection","getOwnPropertySymbols","symbol","Symbol","sham","useSymbolAsUid","iterator","isSymbol","require$$3","$Symbol","tryToString","aCallable","getMethod","P","func","defineGlobalProperty","key","SHARED","sharedStore","store","sharedModule","push","mode","copyright","license","source","toObject","hasOwnProperty_1","hasOwn","id","postfix","random","uid","shared","NATIVE_SYMBOL","require$$4","USE_SYMBOL_AS_UID","require$$5","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","wellKnownSymbol","name","ordinaryToPrimitive","input","pref","val","valueOf","TO_PRIMITIVE","toPrimitive","result","exoticToPrim","toPropertyKey","EXISTS","createElement","documentCreateElement","ie8DomDefine","a","DESCRIPTORS","propertyIsEnumerableModule","require$$6","IE8_DOM_DEFINE","require$$7","$getOwnPropertyDescriptor","objectGetOwnPropertyDescriptor","O","replacement","isForced","feature","detection","data","normalize","POLYFILL","NATIVE","string","replace","toLowerCase","isForced_1","functionBindContext","that","v8PrototypeDefineBug","anObject","V8_PROTOTYPE_DEFINE_BUG","$defineProperty","ENUMERABLE","CONFIGURABLE","WRITABLE","objectDefineProperty","Attributes","current","definePropertyModule","createNonEnumerableProperty","object","require$$8","require$$9","wrapConstructor","NativeConstructor","Wrapper","b","c","_export","options","FORCED","USE_NATIVE","VIRTUAL_PROTOTYPE","sourceProperty","targetProperty","nativeProperty","resultProperty","TARGET","target","GLOBAL","STATIC","stat","PROTO","proto","nativeSource","targetPrototype","forced","dontCallGetSet","wrap","real","ceil","floor","trunc","x","n","toIntegerOrInfinity","number","max","min","toAbsoluteIndex","index","integer","toLength","lengthOfArrayLike","obj","createMethod","IS_INCLUDES","$this","el","fromIndex","arrayIncludes","includes","indexOf","hiddenKeys","objectKeysInternal","names","i","enumBugKeys","internalObjectKeys","objectKeys","keys","objectGetOwnPropertySymbols","getOwnPropertySymbolsModule","$assign","assign","concat","objectAssign","A","B","alphabet","forEach","chr","join","T","argumentsLength","S","j","arity","arraySlice","$Function","factories","functionBind","F","Prototype","partArgs","boundFunction","args","C","argsLength","list","construct","entryVirtual","CONSTRUCTOR","parent","own","drawCircle","ctx","y","r","beginPath","arc","PI","closePath","drawRoundRect","w","h","r2d","moveTo","lineTo","drawEllipse","kappa","ox","oy","xe","ye","xm","ym","bezierCurveTo","drawDatabase","hEllipse","ymb","yeb","drawDashedLine","x2","y2","pattern","patternLength","dx","dy","slope","distRemaining","sqrt","patternIndex","draw","xStep","dashLength","shapeMap","circle","dashedLine","database","diamond","ellipse","ellipse_vis","hexagon","cos","sin","roundRect","square","rect","star","radius","triangle","s","s2","ir","triangleDown","Emitter","mixin","module","exports","on","addEventListener","event","_callbacks","once","off","removeListener","removeAllListeners","removeEventListener","cb","callbacks","splice","emit","Array","len","listeners","hasListeners","isArray","doesNotExceedSafeInteger","createProperty","propertyKey","toStringTagSupport","TO_STRING_TAG_SUPPORT","TO_STRING_TAG","CORRECT_ARGUMENTS","tag","tryGet","callee","functionToString","inspectSource","noop","empty","constructorRegExp","INCORRECT_TO_STRING","isConstructorModern","isConstructorLegacy","isConstructor","called","SPECIES","$Array","arraySpeciesConstructor","originalArray","constructor","arraySpeciesCreate","arrayMethodHasSpeciesSupport","METHOD_NAME","array","foo","Boolean","$","require$$11","IS_CONCAT_SPREADABLE","require$$10","IS_CONCAT_SPREADABLE_SUPPORT","isConcatSpreadable","spreadable","arg","k","E","objectDefineProperties","defineProperties","Properties","props","activeXDocument","html","sharedKey","definePropertiesModule","PROTOTYPE","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObjectViaActiveX","write","close","temp","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","JS","domain","style","display","appendChild","src","contentWindow","open","objectCreate","create","objectGetOwnPropertyNames","getOwnPropertyNames","arraySliceSimple","start","end","fin","$getOwnPropertyNames","windowNames","objectGetOwnPropertyNamesExternal","getWindowNames","defineBuiltIn","defineBuiltInAccessor","wellKnownSymbolWrapped","set","has","wrappedWellKnownSymbolModule","wellKnownSymbolDefine","NAME","symbolDefineToPrimitive","SymbolPrototype","hint","objectToString","setToStringTag","TAG","SET_METHOD","WeakMap","weakMapBasicDetection","NATIVE_WEAK_MAP","OBJECT_ALREADY_INITIALIZED","state","metadata","facade","STATE","internalState","enforce","getterFor","TYPE","type","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","callbackfn","specificCreate","arrayIteration","map","filter","some","every","find","findIndex","filterReject","require$$12","$toString","require$$13","require$$14","nativeObjectCreate","require$$15","require$$16","getOwnPropertyNamesModule","require$$17","getOwnPropertyNamesExternal","require$$18","require$$19","getOwnPropertyDescriptorModule","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$28","require$$29","require$$30","require$$31","defineWellKnownSymbol","require$$32","defineSymbolToPrimitive","require$$33","require$$34","InternalStateModule","require$$35","$forEach","require$$36","HIDDEN","require$$27","SYMBOL","setInternalState","getInternalState","ObjectPrototype","RangeError","QObject","nativeGetOwnPropertyDescriptor","nativeDefineProperty","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","USE_SETTER","findChild","fallbackDefineProperty","ObjectPrototypeDescriptor","setSymbolDescriptor","description","$defineProperties","properties","$getOwnPropertySymbols","IS_OBJECT_PROTOTYPE","setter","$$K","$forEach$1","useSetter","useSimple","symbolRegistryDetection","keyFor","NATIVE_SYMBOL_REGISTRY","StringToSymbolRegistry","SymbolToStringRegistry","for","sym","getReplacerFunction","replacer","rawLength","element","keysLength","root","$stringify","charAt","charCodeAt","numberToString","tester","low","hi","WRONG_SYMBOLS_CONVERSION","ILL_FORMED_UNICODE","stringifyWithSymbolsFix","$replacer","fixIllFormed","offset","prev","next","stringify","space","JSON","IteratorPrototype","PrototypeOfArrayIteratorPrototype","arrayIterator","iterators","getDescriptor","functionName","PROPER","correctPrototypeGetter","getPrototypeOf","CORRECT_PROTOTYPE_GETTER","objectGetPrototypeOf","ITERATOR","BUGGY_SAFARI_ITERATORS","NEW_ITERATOR_PROTOTYPE","iteratorsCore","Iterators","returnThis","FunctionName","createIteratorConstructor","IteratorConstructor","ENUMERABLE_NEXT","IteratorsCore","PROPER_FUNCTION_NAME","KEYS","VALUES","ENTRIES","iteratorDefine","Iterable","DEFAULT","IS_SET","CurrentIteratorPrototype","methods","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","entries","values","createIterResultObject","done","defineIterator","ARRAY_ITERATOR","defineIterator$2","iterated","kind","Arguments","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","COLLECTION_NAME","Collection","CollectionPrototype","nativeSlice","HAS_SPECIES_SUPPORT","Constructor","ArrayPrototype","ownKeys","$map","nativeKeys","$Date","Date","thisTimeValue","getTime","$$z","now","arrayMethodIsStrict","arrayForEach","nativeReverse","reverse","$$x","SILENT_ON_NON_WRITABLE_LENGTH_SET","deletePropertyOrThrow","setArrayLength","deleteCount","insertCount","actualDeleteCount","from","to","actualStart","$includes","MATCH","isRegExp","notARegExp","correctIsRegExpLogic","regexp","error1","error2","stringIndexOf","searchString","arrayMethod","stringMethod","StringPrototype","nativeGetPrototypeOf","$filter","IE_BUG","TO_ENTRIES","IE_WORKAROUND","objectToArray","$values","whitespaces","ltrim","RegExp","rtrim","stringTrim","trim","$parseInt","parseInt","hex","numberParseInt","radix","$indexOf","nativeIndexOf","NEGATIVE_ZERO","searchElement","$entries","D","engineIsBun","Bun","ENGINE_IS_BUN","USER_AGENT","validateArgumentsLength","passed","required","WRAP","schedulersFix","scheduler","hasTimeArg","firstParamIndex","handler","timeout","boundArgs","params","callback","setInterval","setTimeout","fill","endPos","_extends","_inheritsLoose","subClass","superClass","__proto__","_assertThisInitialized","ReferenceError","output","nextKey","win","assign$1","VENDOR_PREFIXES","TEST_ELEMENT","round","abs","prefixed","property","prefix","prop","camelProp","toUpperCase","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","TOUCH_ACTION_AUTO","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_NONE","TOUCH_ACTION_PAN_X","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","getTouchActionProps","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","INPUT_TYPE_TOUCH","INPUT_TYPE_MOUSE","COMPUTE_INTERVAL","INPUT_START","INPUT_END","INPUT_CANCEL","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","PROPS_XY","PROPS_CLIENT_XY","each","context","boolOrFn","inStr","str","TouchAction","manager","_proto","compute","actions","update","touchAction","recognizers","recognizer","enable","getTouchAction","hasPanX","hasPanY","cleanTouchActions","preventDefaults","srcEvent","direction","offsetDirection","session","prevented","preventDefault","hasNone","isTapPointer","pointers","isTapMovement","distance","isTapTouchTime","deltaTime","preventSrc","hasParent","node","parentNode","getCenter","pointersLength","clientX","clientY","simpleCloneInputData","timeStamp","center","deltaX","deltaY","getDistance","p1","p2","getAngle","atan2","getDirection","getVelocity","computeInputData","firstInput","firstMultiple","offsetCenter","angle","offsetDelta","prevDelta","prevInput","eventType","computeDeltaXY","overallVelocity","overallVelocityX","overallVelocityY","scale","rotation","getRotation","maxPointers","velocity","velocityX","velocityY","last","lastInterval","v","computeIntervalInputData","srcEventTarget","composedPath","inputHandler","pointersLen","changedPointersLen","changedPointers","isFirst","isFinal","recognize","splitStr","addEventListeners","types","removeEventListeners","getWindowForElement","doc","ownerDocument","defaultView","Input","inputTarget","domHandler","ev","init","evEl","evTarget","evWin","destroy","inArray","findByKey","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","MSPointerEvent","PointerEvent","PointerEventInput","_Input","_this","pointerEvents","removePointer","eventTypeNormalized","pointerType","isTouch","storeIndex","pointerId","button","toArray","uniqueArray","sort","results","TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","TouchInput","targetIds","touches","getTouches","targetTouches","allTouches","identifier","changedTouches","changedTargetTouches","touch","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MouseInput","pressed","which","DEDUP_TIMEOUT","setLastTouch","eventData","primaryTouch","lastTouch","lts","lastTouches","recordTouches","isSyntheticEvent","t","TouchMouseInput","_manager","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","mouse","invokeArrayArg","STATE_FAILED","_uniqueId","getRecognizerByNameIfManager","otherRecognizer","stateStr","Recognizer","simultaneous","requireFail","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","reset","TapRecognizer","_Recognizer","taps","interval","time","threshold","posThreshold","pTime","pCenter","_timer","_input","count","_this2","validPointers","validMovement","validTouchTime","failTimeout","validInterval","validMultiTap","_this3","clearTimeout","tapCount","AttrRecognizer","attrTest","optionPointers","isRecognized","isValid","directionStr","PanRecognizer","_AttrRecognizer","pX","pY","directionTest","hasMoved","SwipeRecognizer","PinchRecognizer","inOut","RotateRecognizer","PressRecognizer","validTime","defaults","domEvents","inputClass","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","preset","toggleCssProps","add","oldCssProps","Manager","handlers","item","stop","force","stopped","curRecognizer","existing","remove","targetRecognizer","events","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","triggerDomEvent","SINGLE_TOUCH_INPUT_MAP","SingleTouchInput","started","normalizeSingleTouches","changed","deprecate","message","deprecationMessage","e","Error","stack","log","console","warn","extend","dest","merge","inherit","child","base","childP","baseP","_super","bindFn","Hammer","VERSION","INPUT_MOVE","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","Tap","Pan","Swipe","Pinch","Rotate","Press","RealHammer","DELETE","_Symbol","pureDeepObjectAssign","_len","updates","_key","deepObjectAssign","merged","deepObjectAssignNonentry","stripDelete","_len2","_key2","_sliceInstanceProperty","setTime","_Reflect$ownKeys","_Array$isArray","clone","_mapInstanceProperty","_Object$keys","parseDOT","dot","graph","getToken","token","strict","tokenType","TOKENTYPE","IDENTIFIER","newSyntaxError","parseStatements","edge","parseGraph","NODE_ATTR_MAPPING","fontsize","fontcolor","labelfontcolor","fontname","color","fillcolor","tooltip","labeltooltip","EDGE_ATTR_MAPPING","_Object$create","NULL","DELIMITER","UNKNOWN","DELIMITERS","nextPreview","isAlphaNumeric","charCode","setValue","o","shift","addNode","graphs","nodes","attr","_context","g","_indexOfInstanceProperty","addEdge","edges","createEdge","enabled","arrows","isComment","c2","isNaN","Number","SyntaxError","chop","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeList","parseAttributeStatement","parseNodeStatement","subgraphs","nof_attr_list","edgeStyles","dashed","solid","dotted","arrowTypes","box","crow","curve","icurve","normal","inv","tee","vee","attr_list","attr_names","_includesInstanceProperty","idx","dir","from_type","to_type","dir_type","_spliceInstanceProperty","idx_arrow","tmp_attr_list","text","maxLength","substr","setProp","pop","convertAttr","mapping","converted","visProp","_forEachInstanceProperty","visPropI","DOTToGraph","_context2","dotData","graphData","dotNode","graphNode","label","image","shape","_context3","convertEdge","dotEdge","graphEdge","_context4","array1","array2","_context5","subEdge","elem1","elem2","parseGephi","gephiJSON","optionsObj","inheritColor","fixed","parseColor","gEdges","vEdges","gEdge","vEdge","attributes","title","gNode","vNode","size","background","border","highlight","hover","addDescription","back","createEdgeError","del","deleteClusterError","edgeDescription","edit","editClusterError","editEdge","editEdgeDescription","editNode","CachedImage","NUM_ITERATIONS","Image","canvas","initialized","width","height","h2","h4","h8","h16","w2","w4","w8","w16","coordinates","_fillMipMap","getContext","drawImage","iterations","drawImageAtPosition","factor","left","top","Images","images","imageBroken","_tryloadBrokenUrl","url","brokenUrl","imageToLoadBrokenUrlOn","onerror","_redrawWithImage","imageToRedrawWith","load","cachedImage","img","onload","_fixImageCoordinates","imageToCache","body","offsetWidth","offsetHeight","removeChild","arrayBufferNonExtensible","ArrayBuffer","buffer","isExtensible","ARRAY_BUFFER_NON_EXTENSIBLE","$isExtensible","objectIsExtensible","freezing","preventExtensions","getOwnPropertyNamesExternalModule","FREEZING","REQUIRED","METADATA","setMetadata","objectID","weakData","meta","internalMetadataModule","fastKey","getWeakData","onFreeze","getIteratorMethod","getIterator","usingIterator","iteratorMethod","isArrayIteratorMethod","iteratorClose","innerResult","innerError","Result","ResultPrototype","iterate","iterable","unboundFunction","iterFn","step","AS_ENTRIES","IS_RECORD","IS_ITERATOR","INTERRUPTED","condition","callFn","anInstance","InternalMetadataModule","internalStateGetterFor","collection","CONSTRUCTOR_NAME","wrapper","common","IS_WEAK","ADDER","NativePrototype","exported","IS_ADDER","getConstructor","setStrong","defineBuiltIns","unsafe","setSpecies","collectionStrong","first","define","previous","entry","getEntry","removed","clear","delete","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","CONVERT_TO_STRING","pos","second","position","codeAt","STRING_ITERATOR","point","Map","Groups","_defaultIndex","_groupIndex","_defaultGroups","defaultOptions","useDefaultGroups","_Object$assign","setOptions","optionFields","groupName","group","_groups","_Map","_groupNames","groupname","shouldCreate","globalIsFinite","isFinite","numberIsFinite","$some","getOwnPropertyDescriptors","$$c","$$b","desc","thisSymbolValue","symbolIsRegistered","isRegisteredSymbol","$isWellKnownSymbol","isWellKnownSymbol","symbolKeys","symbolKeysLength","symbolKey","symbolIsWellKnown","isRegistered","isWellKnown","_typeof","_Symbol$iterator","_toPropertyKey","prim","_Symbol$toPrimitive","res","_defineProperty","_Object$defineProperty","IS_RIGHT","memo","arrayReduce","right","engineIsNode","$reduce","reduce","flattenIntoArray","original","sourceLen","depth","mapper","thisArg","elementLen","targetIndex","sourceIndex","mapFn","flatMap","Set","mergeSort","comparefn","middle","insertionSort","llength","rlength","lindex","rindex","arraySort","firefox","engineFfVersion","engineIsIeOrEdge","webkit","engineWebkitVersion","internalSort","FF","IE_OR_EDGE","V8","WEBKIT","nativeSort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STRICT_METHOD","STABLE_SORT","code","fromCharCode","itemsLength","items","arrayLength","getSortCompare","getRandomValues","rnds8","Uint8Array","rng","crypto","byteToHex","native","randomUUID","v4","buf","rnds","arr","unsafeStringify","SimpleDataPipe","_source","_transformers","_target","_bindInstanceProperty","_add","_remove","_update","_transformItems","_listeners","_reduceInstanceProperty","transform","_name","payload","oldData","DataPipeUnderConstruction","_filterInstanceProperty","_flatMapInstanceProperty","$parseFloat","parseFloat","numberParseFloat","Infinity","trimmedString","choosify","subOption","pile","allowed","chosen","topMost","chosenEdge","pointInRect","rotationPoint","tmp","bottom","isValidLabel","getSelfRefCoordinates","distanceToBorder","toBorderDist","yFromNodeCenter","xFromNodeCenter","LabelAccumulator","measureText","lines","l","mod","blocks","tmpText","block","_valuesInstanceProperty","curWidth","line","append","newLine","determineLineHeights","determineLabelSize","removeEmptyBlocks","tmpLines","tmpLine","firstEmptyBlock","tmpBlocks","finalize","tagPattern","_","afterBold","afterItal","afterMono","MarkupAccumulator","bold","ital","mono","spacing","modStack","modName","emitBlock","parseWS","ch","setTag","tagName","unshift","unsetTag","parseStartTag","advance","regExp","prepareRegExp","matched","parseEndTag","nextTag","checkTag","prepared","LabelSplitter","selected","textWidth","getFormattingValues","font","fontOptions","nlLines","lineCount","multi","splitBlocks","maxWdt","splitStringIntoLines","decodeMarkupSystem","markupSystem","system","splitHtmlBlocks","parseEntities","splitMarkdownBlocks","beginable","parseOverride","overMaxWidth","getLongestFit","words","newText","getLongestFitWord","appendLast","word","newW","multiFontStyle","Label","edgelabel","pointToSelf","baseSize","yLine","isEdgeLabel","elementOptions","initFontOptions","labelDirty","newFontOptions","parseFontString","vadjust","outOptions","inOptions","newOptionsArray","face","constrain","constrainWidth","minWdt","constrainHeight","minHgt","valign","widthConstraint","widthConstraintMaximum","widthConstraintMinimum","heightConstraint","heightConstraintMinimum","heightConstraintValign","propagateFonts","deepExtend","chooser","adjustSizes","margins","widthBias","heightBias","addFontOptionsToPile","dstPile","srcPile","addFontToPile","getBasicOptions","ret","tmpShorthand","opt","getFontOption","multiName","option","multiFont","getFontOptions","optionNames","fontPile","modOptions","baseline","viewFontSize","view","scaling","drawThreshold","maxVisible","calculateLabelSize","_drawBackground","_drawText","fillStyle","getSize","fillRect","_setAlignment","textAlign","labelHeight","align","fontColor","strokeColor","_getColor","strokeWidth","lineWidth","strokeStyle","lineJoin","strokeText","fillText","lineMargin","textBaseline","initialStrokeColor","opacity","overrideOpacity","getTextSize","_processLabel","getValue","labelHighlightBold","fontString","differentState","selectedState","hoverState","_processLabelText","inText","visible","NodeBase","labelModule","margin","refreshNeeded","boundingBox","_setMargins","_distanceToBorder","borderWidth","resize","enableShadow","shadow","shadowColor","shadowBlur","shadowSize","shadowOffsetX","shadowX","shadowOffsetY","shadowY","disableShadow","enableBorderDashes","borderDashes","setLineDash","dashes","shapeProperties","disableBorderDashes","needsRefresh","initContextForDraw","borderColor","performStroke","save","stroke","restore","performFill","_fillInstanceProperty","_addBoundingBoxMargin","_updateBoundingBox","updateBoundingBox","getDimensionsFromLabel","textSize","super","dimensions","borderRadius","CircleImageBase","labelOffset","imageObj","imageObjAlt","setImages","switchImages","selection_changed","imageTmp","_getImagePadding","imgPadding","imagePadding","optImgPadding","_resizeImage","useImageSize","ratio_width","ratio_height","_drawRawCircle","_drawImageAtPosition","globalAlpha","interpolation","imgPosLeft","imgPosTop","imgWidth","imgHeight","_drawImageLabel","labelDimensions","yLabel","diameter","CircularImage","labelX","labelY","coordinateOrigin","clip","ShapeBase","_this$customSizeWidth","_this$customSizeHeigh","customSizeWidth","customSizeHeight","_drawShape","sizeMultiplier","CanvasRenderingContext2D","icon","drawExternalLabel","_Object$getOwnPropertySymbols","_Object$getOwnPropertyDescriptor","_objectSpread","_Object$getOwnPropertyDescriptors","_Object$defineProperties","CustomShape","ctxRenderer","drawLater","drawNode","nodeDimensions","Database","Dot","Ellipse","Icon","iconSize","_icon","iconTextSpacing","weight","side","useBorderWithImage","neutralborderWidth","selectionLineWidth","borderWidthSelected","Square","Hexagon","Star","Text","TriangleDown","Node","imagelist","grouplist","globalOptions","bridgeObject","baseFontSize","predefinedPosition","attachEdge","detachEdge","currentShape","_localColor","checkMass","_parseInt","_parseFloat","parseOptions","_load_images","updateLabelModule","checkOpacity","updateShape","hidden","physics","brokenImage","unselected","checkCoordinateOrigin","origin","updateGroupOptions","parentOptions","newOptions","groupList","groupObj","skipProperties","_Object$getOwnPropertyNames","p","selectiveNotDeepExtend","allowDeletion","mergeOptions","parsedColor","fillIfDefined","currentGroup","Box","Circle","Diamond","Triangle","select","unselect","getTitle","isFixed","isSelected","getLabelSize","setValueRange","total","customScalingFunction","sizeDiff","fontDiff","getItemsOnPoint","nodeId","labelId","isOverlappingWith","isBoundingBoxOverlappingWith","mass","strId","VALIDATOR_PRINT_STYLE","NodesHandler","groups","layoutEngine","functions","createNode","nodesListeners","boldital","level","bindEventListeners","emitter","refresh","_Number$isNaN","_Number$isFinite","setData","doNotEmit","oldNodesData","isDataViewLike","DataSet","me","ids","getIds","newNodes","positionInitially","changedData","dataChanged","_someInstanceProperty","newValue","oldValue","clearPositions","getPositions","dataArray","nodeIndices","getPosition","storePositions","dataset","getDataSet","dsNode","bodyNode","getBoundingBox","getConnectedNodes","nodeList","nodeObj","toId","fromId","getConnectedEdges","edgeList","moveNode","_setTimeout","$hypot","hypot","NaN","value1","value2","div","sum","aLen","larg","EndPoint","points","arrowData","xt","yt","drawPath","translate","rotate","imageWidth","imageHeight","Arrow","Crow","Curve","pi","startAngle","endAngle","InvertedCurve","InvertedTriangle","Bar","Vee","EndPoints","EdgeBase","_body","_labelModule","colorDirty","hoverWidth","selectionWidth","fromPoint","toPoint","connect","cleanup","drawLine","_selected","_hover","viaNode","getViaNode","getColor","_drawDashedLine","_drawLine","_line","_getCircleData","_circle","_fromPoint","_toPoint","lineCap","lineDashOffset","findBorderPosition","_findBorderPosition","_findBorderPositionCircle","findBorderPositions","high","selfReference","_pointOnCircle","nearNode","endPointOffset","arrowStrikethrough","iteration","difference","pow","getLineWidth","inheritsColor","grd","createLinearGradient","fromColor","toColor","addColorStop","angleFrom","angleTo","renderBehindTheNode","pointTFrom","pointTTo","getDistanceToEdge","x1","y1","x3","y3","_getDistanceToEdge","_getDistanceToLine","px","py","u","getArrowData","arrowPoint","node1","node2","reversed","scaleFactor","fromArrowScale","fromArrowType","toArrowScale","toArrowType","middleArrowScale","middleArrowType","relativeLength","_Math$hypot","smooth","pointT","via","guidePos","getPoint","halfLength","guidePos1","guidePos2","core","drawArrowHead","drawBackground","origCtxAttr","backgroundColor","backgroundSize","setStrokeDashed","backgroundDashes","BezierEdgeBase","_findBorderPositionBezier","_getViaCoordinates","_getDistanceToBezierEdge","minDistance","lastX","lastY","_bezierCurve","viaNode1","viaNode2","quadraticCurveTo","BezierEdgeDynamic","_boundFunction","positionBezierNode","physicsChange","setupSupportNode","parentEdgeId","cx","cy","cr","BezierEdgeStatic","roundness","stepX","stepY","xVia","yVia","myAngle","CubicBezierEdgeBase","_getDistanceToBezierEdge2","via1","via2","vec","CubicBezierEdge","viaNodes","forceDirection","StraightEdge","edgeSegmentLength","toBorderPoint","Edge","baseWidth","edgeType","connected","affectsLayout","updateEdgeType","_setInteractionWidths","copyFromGlobals","selectiveDeepExtend","_JSON$stringify","isString","colorsDefined","selfReferenceSize","toArrow","fromArrow","middleArrow","toArrowSrc","toArrowImageWidth","toArrowImageHeight","middleArrowSrc","middleArrowImageWidth","middleArrowImageHeight","fromArrowSrc","fromArrowImageWidth","fromArrowImageHeight","selectedWidth","changeInType","disconnect","widthDiff","drawLabel","drawArrows","_getRotation","edgeId","distMax","xFrom","yFrom","xTo","yTo","xObj","yObj","endPointsValid","EdgesHandler","edgesListeners","edgeData","smoothOptions","reconnectEdges","oldEdgesData","edgesData","oldEdge","showInternalIds","_updateState","_addMissingEdges","_removeInvalidEdges","edgesToDelete","toNode","fromNode","isCluster","addIds","BarnesHutSolver","physicsBody","barnesHutTree","_rng","Alea","thetaInversed","theta","overlapAvoidanceFactor","avoidOverlap","solve","gravitationalConstant","physicsNodeIndices","nodeCount","_formBarnesHutTree","_getForceContributions","parentBranch","_getForceContribution","children","NW","NE","SW","SE","childrenCount","centerOfMass","calcSize","_calculateForces","gravityForce","fx","fy","forces","minX","minY","maxX","maxY","rootSize","halfRootSize","centerX","centerY","range","maxWidth","_splitBranch","_placeInTree","_updateBranchMass","totalMass","totalMassInv","biggestSize","skipMassUpdate","region","_placeInRegion","containedNode","_insertRegion","childSize","_debug","_drawBranch","branch","RepulsionSolver","repulsingForce","nodeDistance","HierarchicalRepulsionSolver","theseNodesDistance","steepness","SpringSolver","edgeLength","edgeIndices","physicsEdgeIndices","node3","springLength","_calculateSpringForce","springForce","springConstant","HierarchicalSpringSolver","springFx","springFy","totalFx","totalFy","correctionFx","correctionFy","CentralGravitySolver","centralGravity","ForceAtlas2BasedRepulsionSolver","degree","ForceAtlas2BasedCentralGravitySolver","PhysicsEngine","velocities","physicsEnabled","simulationInterval","requiresTimeout","previousStates","referenceState","freezeCache","renderTimer","adaptiveTimestep","adaptiveTimestepEnabled","adaptiveCounter","adaptiveInterval","stabilized","startedStabilization","stabilizationIterations","ready","barnesHut","damping","forceAtlas2Based","repulsion","hierarchicalRepulsion","maxVelocity","minVelocity","solver","stabilization","updateInterval","onlyDynamicEdges","fit","timestep","wind","layoutFailed","initPhysics","stopSimulation","startSimulation","updatePhysicsData","nodesSolver","edgesSolver","gravitySolver","Repulsion","HierarchicalRepulsion","modelOptions","stabilize","viewFunction","simulationStep","_emitStabilized","startTime","_Date$now","physicsTick","runDoubleSpeed","amountOfIterations","physicsStep","moveNodes","adjustTimeStep","_evaluateStepQuality","_startStabilizing","revert","nodeIds","positions","vx","vy","dpos","reference","maxNodeVelocity","averageNodeVelocity","nodeVelocity","_performStep","calculateComponentVelocity","m","maxV","_freezeNodes","_restoreFrozenNodes","targetIterations","_stabilizationBatch","running","sendProgress","_finalizeStabilization","_drawForces","colorFactor","forceSize","arrowSize","HSVToHex","NetworkUtil","getRange","allNodes","specificNodes","getRangeCore","findCenter","cloneOptions","clonedOptions","amountOfConnections","Cluster","containedNodes","containedEdges","_openChildCluster","childClusterId","childCluster","clusterEdge","parentClusterEdge","clusteringEdgeReplacingIds","srcId","edgeReplacedById","ClusterEngine","clusteredNodes","clusteredEdges","clusterByHubsize","hubsize","_getHubSize","_checkOptions","nodesToCluster","clusterByConnection","cluster","refreshData","joinCondition","childNodesObj","childEdgesObj","_cluster","clusterByEdgeCount","edgeCount","clusters","usedNodes","relevantEdgeCount","checkJoinCondition","gatheringSuccessful","childNodeId","_getConnectedId","foundCluster","findClusterData","clusterOutliers","clusterBridges","clusterNodeProperties","parentNodeId","parentClonedOptions","childClonedOptions","childNodeIDs","childNode","childNodeKey","childEdge","_createClusterEdges","clusterEdgeProperties","otherNodeId","childKeys","createEdges","newEdges","getNewEdge","createdEdge","newEdge","matchToDirection","matchFromDirection","_createClusteredEdge","_backupEdgeOptions","tmpNodesToRemove","allowSingleNodeCluster","processProperties","childNodesOptions","childEdgesOptions","clusterId","_getClusterPosition","clusterNode","_clusterEdges","_restoreEdge","originalOptions","openCluster","clusterNodeId","findNode","parentIndex","parentClusterNodeId","releaseFunction","clusterPosition","newPositions","edgesToBeDeleted","otherNode","transferId","transferEdge","otherCluster","getNodesInCluster","nodesArray","counter","_reverseInstanceProperty","updateClusteredNode","clusteredNodeId","updateEdge","startEdgeId","allEdgeIds","getClusteredEdges","getBaseEdge","clusteredEdgeId","getBaseEdges","IdsToHandle","doneIds","foundIds","nextId","nextEdge","replacingIds","replacingId","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","hubThreshold","baseEdge","extraOptions","childNodes","childEdges","_getClusterNodeForNode","clusteredNode","_filter","deletedNodeIds","deletedEdgeIds","eachClusterNode","replacedIds","numValid","containedEdgeId","containedEdge","deletedEdgeId","shouldBeClustered","_isClusteredNode","_isClusteredEdge","clusterFrom","clusterTo","continueLoop","clustersToOpen","numNodes","allowSingle","CanvasRenderer","redrawRequested","requestAnimationFrameRequestId","renderingActive","renderRequests","allowRedraw","dragging","zooming","hideEdgesOnDrag","hideEdgesOnZoom","hideNodesOnDrag","zoomTimeoutId","_requestRedraw","_resizeNodes","_redraw","_startRendering","cancelAnimationFrame","requestAnimationFrame","_renderStep","redraw","drawExternalLabels","frame","setSize","setTransform","clientWidth","clientHeight","clearRect","translation","_drawEdges","_drawNodes","_drawArrows","_drawSelectionBox","alwaysShow","hovered","topLeft","DOMtoCanvas","bottomRight","viewableArea","selectedLength","hoveredLength","selectionBox","show","onTouch","hammer","onRelease","Canvas","pixelRatio","cameraState","canvasViewCenter","_cleanupCallbacks","autoResize","hammerFrame","_cleanUp","ResizeObserver","observer","observe","unobserve","resizeTimer","_setInterval","clearInterval","resizeFunction","_onResize","_getCameraState","previousWidth","previousHeight","_setCameraState","widthRatio","heightRatio","newScale","currentViewCenter","distanceFromCenter","_prepareValue","_create","container","hasChildNodes","firstChild","className","overflow","tabIndex","_setPixelRatio","noCanvas","fontWeight","padding","innerText","_bindHammer","drag","pinch","eventListeners","onTap","onDoubleTap","onHold","onDragStart","onDrag","onDragEnd","onPinch","onMouseWheel","onMouseMove","onContext","emitEvent","oldWidth","oldHeight","previousRatio","newWidth","newHeight","_determinePixelRatio","numerator","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","_XconvertDOMtoCanvas","_XconvertCanvasToDOM","_YconvertDOMtoCanvas","_YconvertCanvasToDOM","canvasToDOM","View","animationSpeed","renderRefreshRate","animationEasingFunction","easingTime","sourceScale","targetScale","sourceTranslation","targetTranslation","lockedOnNodeId","lockedOnNodeOffset","touchTime","releaseNode","initialZoom","rawOptions","allNodeIds","minZoomLevel","MIN_VALUE","maxZoomLevel","normalizeFitOptions","canvasWidth","canvasHeight","zoomLevel","positionDefined","xZoomLevel","yZoomLevel","animationOptions","animation","focus","nodePosition","lockedOnNode","getViewPosition","duration","easingFunction","animateView","locked","_transitionRedraw","viewCenter","_lockedRedraw","finished","progress","easingFunctions","getScale","keycharm","_exportFunctions","_bound","keydown","keyup","_keys","down","handleEvent","up","keyCode","bound","shiftKey","bindAll","getKey","unbind","newBindings","NavigationHandler","iconsCreated","navigationHammers","boundFunctions","activated","configureKeyboardBindings","navigationButtons","loadNavigationElements","cleanNavigation","navigationDOM","navigationDivs","navigationDivActions","_fit","bindToRedraw","_stopMovement","action","unbindFromRedraw","boundAction","_moveUp","keyboard","speed","_moveDown","_moveLeft","_moveRight","_zoomIn","scaleOld","zoom","scaleFrac","tx","ty","pointer","_zoomOut","_context6","_context7","_context8","_context9","_context0","_context1","_context10","_context11","_context12","_context13","_context14","_context15","_context16","_context17","_context18","_context19","_context20","_context21","_context22","_context23","_context24","_context25","bindToWindow","InteractionHandler","selectionHandler","navigationHandler","popup","popupObj","popupTimer","getPointer","dragNodes","dragView","autoFocus","tooltipDelay","zoomView","zoomSpeed","getAbsoluteLeft","getAbsoluteTop","pinched","multiselect","ctrlKey","metaKey","checkSelectionChanges","commitAndEmit","generateClickEvent","selectAdditionalOnPoint","selectOnPoint","_determineDifference","firstSet","secondSet","arrayDiff","firstArr","secondArr","getNodeAt","selection","setSelection","getSelectedNodes","xFixed","yFixed","diffX","diffY","selectionBoxPosition","selectionBoxPositionMinMax","toBeSelectedNodes","selectObject","preScaleDragPointer","postScaleDragPointer","popupVisible","_checkHidePopup","setPosition","_checkShowPopup","hoverObject","pointerObj","previousPopupObjId","nodeUnderCursor","popupType","overlappingNodes","overlappingEdges","Popup","popupTargetType","popupTargetId","setText","hide","_pointerToPositionObject","stillOnObj","overNode","uncaughtFrozenStore","frozen","UncaughtFrozenStore","findUncaughtFrozen","InternalWeakMap","collectionWeak","enforceInternalState","isFrozen","isSealed","freeze","seal","FROZEN","SEALED","IS_IE11","$WeakMap","WeakMapPrototype","nativeSet","nativeDelete","nativeHas","nativeGet","frozenArray","arrayIntegrityLevel","diffSets","diff","_Set","SingleTypeSelectionAccumulator","_SingleTypeSelectionAccumulator_previousSelection","_SingleTypeSelectionAccumulator_selection","__classPrivateFieldGet","getSelection","getChanges","added","deleted","commit","changes","__classPrivateFieldSet","SelectionAccumulator","commitHandler","_SelectionAccumulator_nodes","_SelectionAccumulator_edges","_SelectionAccumulator_commitHandler","sizeNodes","sizeEdges","getNodes","getEdges","addNodes","addEdges","deleteNodes","deleteEdges","summary","_len3","rest","_key3","SelectionHandler","_selectionAccumulator","hoverObj","selectable","selectConnectedEdges","hoverConnectedEdges","updateSelection","getEdgeAt","unselectAll","selectionChanged","deselectObject","_initBaseEvent","DOM","oldSelection","emptySelection","getClickedItems","controlEdge","highlightEdges","_removeFromSelection","_getAllNodesOverlappingWith","canvasPos","returnNode","positionObject","_getEdgesOverlappingWith","_getAllEdgesOverlappingWith","returnEdge","mindist","overlappingEdge","dist","_addToHover","getSelectedNodeCount","getSelectedEdgeCount","_hoverConnectedEdges","emitBlurEvent","emitHoverEvent","hoverChanged","hoveredEdgesCount","hoveredNodesCount","commitWithoutEmitting","selectionChanges","previousSelection","getSelectedNodeIds","getSelectedEdgeIds","getSelectedEdges","selectNodes","selectEdges","DirectionInterface","abstract","fake_use","curveType","getTreeSize","nodeArray","fix","VerticalStrategy","layout","hierarchical","addToOrdering","min_x","max_x","_sortInstanceProperty","levelSeparation","HorizontalStrategy","min_y","max_y","$every","fillLevelsByDirectionCyclic","levels","fillLevelsByDirection","isEntryNode","shouldLevelBeReplaced","limit","acc","edgeIdProp","newLevelDiff","entryNodeId","entryNode","newLevel","targetNodeId","oldLevel","HierarchicalStatus","childrenReference","parentReference","trees","distributionOrdering","distributionIndex","isTree","treeIndex","addRelation","checkIfTree","numTrees","setTreeIndex","treeId","ensureLevel","getMaxLevel","accumulator","_getMaxLevel","levelDownstream","nodeA","nodeB","setMinLevelToZero","remap","uniqueSortedLevels","_Object$values","hasSameParent","parents1","parents2","inSameSubNetwork","getLevels","isPresent","curLevel","LayoutEngine","_resetRNG","setPhysics","optionsBackup","randomSeed","improvedLayout","clusterThreshold","nodeSpacing","treeSpacing","blockShifting","edgeMinimization","parentCentralization","sortMethod","setupHierarchicalLayout","layoutNetwork","allOptions","prevHierarchicalState","setDirectionStrategy","adaptAllOptionsForHierarchicalLayout","seed","initialRandomSeed","backupPhysics","indices","MAX_LEVELS","clusterOptions","startLength","before","modules","clustering","_declusterAll","info","kamadaKawai","_shiftToCenter","clustersPresent","getSeed","definedLevel","undefinedLevel","lastNodeOnLevel","_determineLevelsByHubsize","_determineLevelsDirected","_determineLevelsCustomCallback","distribution","_getDistribution","_generateMap","_placeNodesByHierarchy","_condenseHierarchy","stillShifting","branches","shiftTree","getTreeSizes","treeWidths","getBranchNodes","getBranchBoundary","branchMap","maxLevel","minSpace","maxSpace","branchNode","minSpaceNode","maxSpaceNode","_getSpaceAroundNode","getCollisionLevel","maxLevel1","maxLevel2","shiftElementsCloser","centerParents","hier","levelNodes","branchShiftCallback","centerParent","pos1","pos2","diffAbs","branchNodes1","branchNodes2","branchNodeBoundary1","branchNodeBoundary2","max1","min2","minSpace2","_shiftBlock","_centerParent","minimizeEdgeLength","allEdges","nodeLevel","C2","referenceNodes","aboveEdges","getFx","getDFx","getGuess","guess","guessMap","dfx","branchNodes","branchBoundary","minSpaceBranch","maxSpaceBranch","branchOffset","moveBranch","newPosition","minimizeEdgeLengthBottomUp","shiftBranchesCloserBottomUp","centerAllParents","centerAllParentsBottomUp","shiftTrees","treeSizes","shiftBy","useMap","ordering","prevNode","nextNode","nextPos","parents","parentId","_getCenterPosition","positionedNodes","_indexArrayToNodes","handledNodeCount","_validatePositionAndContinue","_placeBranchNodes","parentLevel","childRef","childNodeLevel","previousPos","sharedParent","_findCommonParent","withChild","idArray","_getActiveEdges","_getHubSizes","hubSizes","hubSize","_crawlNetwork","levelByDirection","levelA","shakeTowards","_everyInstanceProperty","fillLevelsByDirectionRoots","fillLevelsByDirectionLeaves","fillInRelations","startingNodeId","crawler","tree","shifter","childA","childB","iterateParents","parentRef","findParent","foundParent","isVertical","minPos","maxPos","ManipulationSystem","interactionHandler","editMode","manipulationDiv","editModeDiv","closeDiv","_domEventListenerCleanupQueue","temporaryUIFunctions","temporaryEventFunctions","temporaryIds","guiEnabled","inMode","selectedControlNode","initiallyActive","deleteNode","deleteEdge","controlNodeStyle","_clean","_restore","enableEditMode","disableEditMode","locale","locales","_setup","toggleEditMode","showManipulatorToolbar","_createEditButton","manipulationDOM","selectedNodeCount","selectedEdgeCount","selectedTotalCount","needSeperator","_createAddNodeButton","_createSeperator","_createAddEdgeButton","_createEditNodeButton","_createEditEdgeButton","_createDeleteButton","_bindElementEvents","_temporaryBindEvent","addNodeMode","_createBackButton","_createDescription","_performAddNode","finalizedData","alert","addEdgeMode","_temporaryBindUI","_handleConnect","_finishConnect","_dragControlNode","_dragStartEdge","editEdgeMode","editWithoutDrag","edgeBeingEditedId","controlNodeFrom","_getNewTargetNode","controlNodeTo","_controlNodeTouch","_controlNodeDragStart","_controlNodeDrag","_controlNodeDragEnd","_performEditEdge","deleteSelected","selectedNodes","selectedEdges","deleteFunction","_createWrappers","_removeManipulationDOM","_this$options$locales","_this$options$locales2","setAttribute","recursiveDOMDelete","_createButton","_cleanupDOMEventListeners","_cleanupTemporaryNodesAndEdges","_unbindTemporaryUIs","_unbindTemporaryEvents","deleteBtnClass","rtl","labelClassName","newFunction","UIfunctionName","eventName","domElement","keyupListener","_ref","indexTempEdge","_context26","indexTempNode","_context27","fromSelect","toSelect","overlappingNodeIds","targetNode","connectionEdge","connectFromId","_context28","_context29","_performAddEdge","clickData","defaultData","sourceNodeId","eeFunct","bool","endPoints","nodeOptions","boolean","function","__type__","minimum","dom","maximum","configure","showButton","__any__","interaction","manipulation","clickToUse","any","configureOptions","configuratorHideOption","parentPath","optionName","FloydWarshall","getDistances","edgesArray","D_matrix","cell","knode","kcolm","inode","icolm","jnode","jcolm","KamadaKawai","edgeStrength","distanceSolver","ignoreClusters","_createL_matrix","_createK_matrix","_createE_matrix","maxIterations","maxEnergy","highE_nodeId","dE_dx","dE_dy","delta_m","subIterations","_getHighestEnergyNode","_moveNode","_getEnergy","maxEnergyNodeId","dE_dx_max","dE_dy_max","nodeIdx","E_sums","d2E_dx2","d2E_dxdy","d2E_dy2","x_m","y_m","km","K_matrix","lm","L_matrix","iIdx","x_i","y_i","kmat","lmat","denominator","_updateE_matrix","E_matrix","mIdx","colm","lcolm","oldDx","oldDy","Network","renderer","nodesHandler","edgesHandler","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","getSVGElement","svgContainer","createElementNS","Validator","validate","rawCode","rawLanguage","rawCountry","language","country","_concatInstanceProperty","normalizeLanguageCode","configurator","Configurator","networkOptions","setModuleOptions","activator","Activator","_updateVisibleIndices","edgeNodesPresent","_updateValueRange","gephi","gephiData","valueMin","valueMax","valueTotal","isActive","active","editNodeMode","objectId","getOptionsFromConfigurator","getOptions","setAttributeNS","groupTemplate","labelObj","styles","xOffset","yOffset","textContent","DOMContainer","insertBefore","network","dotparser","gephiParser","convertDot","convertGephi"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,360,361,385,390,393,394,395,399,400,401,402]} \ No newline at end of file diff --git a/perlite/.scripts/build.sh b/perlite/.scripts/build.sh index be2281a8..20369e4d 100644 --- a/perlite/.scripts/build.sh +++ b/perlite/.scripts/build.sh @@ -1,6 +1,7 @@ #!/bin/bash # update JS dependencies +# call it from perlite/.scripts/ folder # force update on asset-packagist curl https://asset-packagist.org/package/npm-asset/katex -D - >/dev/null diff --git a/perlite/.scripts/composer.json b/perlite/.scripts/composer.json index 2cf46dbb..604edbf4 100644 --- a/perlite/.scripts/composer.json +++ b/perlite/.scripts/composer.json @@ -1,7 +1,7 @@ { "name": "secure-77/perlite", "description": "A web based markdown viewer optimized for Obsidian Notes", - "version": "1.5.9", + "version": "1.6.1", "type": "project", "keywords": ["markdown viewer","obsidian notes"], "homepage": "https://github.com/secure-77/Perlite", diff --git a/perlite/.scripts/composer.lock b/perlite/.scripts/composer.lock index c339b4a4..b6dc9426 100644 --- a/perlite/.scripts/composer.lock +++ b/perlite/.scripts/composer.lock @@ -44,10 +44,10 @@ }, { "name": "npm-asset/katex", - "version": "0.16.22", + "version": "0.16.27", "dist": { "type": "tar", - "url": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz" + "url": "https://registry.npmjs.org/katex/-/katex-0.16.27.tgz" }, "require": { "npm-asset/commander": ">=8.3.0,<9.0.0" @@ -59,10 +59,10 @@ }, { "name": "npm-asset/vis-network", - "version": "9.1.9", + "version": "9.1.13", "dist": { "type": "tar", - "url": "https://registry.npmjs.org/vis-network/-/vis-network-9.1.9.tgz" + "url": "https://registry.npmjs.org/vis-network/-/vis-network-9.1.13.tgz" }, "type": "npm-asset", "license": [ diff --git a/perlite/.src/PerliteParsedown.php b/perlite/.src/PerliteParsedown.php index 36115988..b6164e17 100644 --- a/perlite/.src/PerliteParsedown.php +++ b/perlite/.src/PerliteParsedown.php @@ -1,7 +1,7 @@ `~\\=%'; + + protected $InlineTypes = array( + '"' => array('SpecialCharacter'), + '!' => array('Image', 'InternalEmbed'), + '&' => array('SpecialCharacter'), + '*' => array('Emphasis'), + ':' => array('Url'), + '<' => array('UrlTag', 'EmailTag', 'Markup', 'SpecialCharacter'), + '>' => array('SpecialCharacter'), + '[' => array('Link', 'InternalMarkdownLink', 'InternalLink'), + '#' => array('Tag'), + '$' => array('Katex'), + '_' => array('Emphasis'), + '`' => array('Code'), + '~' => array('Strikethrough'), + '\\' => array('EscapeSequence'), + '=' => array('Highlight'), + '%' => array('Hidden'), + ); + + + public function __construct( + $path = '', + $uriPath = '/', + $niceLinks = false, + array $allowedFileLinkTypes = array('mp4', 'm4a', 'pdf'), + array $allowedImageTypes = array( + 'png', + 'jpg', + 'jpeg', + 'svg', + 'gif', + 'bmp', + 'tif', + 'tiff', + 'webp' + ) + ) { + + $this->path = $path; + $this->uriPath = $uriPath; + $this->niceLinks = $niceLinks; + $this->allowedFileLinkTypes = $allowedFileLinkTypes; + $this->allowedImageTypes = $allowedImageTypes; + $this->BlockTypes['!'] = array('YouTube'); + } function text($text) @@ -62,94 +115,145 @@ function text($text) return $markup; } - protected function yamlFrontmatter($yaml) + protected function yamlFrontmatter(string $yaml): string { + $parsed = $this->parseSimpleYaml($yaml); - if (!extension_loaded("yaml")) { - return "YAML front matter found but PHP YAML Parse extension is missing!
    "; - } else { - - // var_dump($yaml); - $parsed = yaml_parse($yaml); - $yamlText = ' -
    -
    '; - return $yamlText; + continue; + } + + // List item + if ($currentKey !== null && preg_match('/^\s*-\s*(.+)$/', $line, $matches)) { + $data[$currentKey][] = $this->castYamlValue($matches[1]); + } } + + return $data; } + protected function castYamlValue(string $value): mixed + { + $value = trim($value, " \t\n\r\0\x0B\"'"); + + return match (strtolower($value)) { + 'true' => true, + 'false' => false, + 'null' => null, + default => is_numeric($value) + ? ($value + 0) + : $value, + }; + } + + # # Callout (based on blockQuotes) # See: https://help.obsidian.md/How+to/Use+callouts @@ -489,26 +593,23 @@ protected function blockHeader($Line) protected function blockYouTube($Line) { - if ( ! isset($Line['text'][1]) or $Line['text'][1] !== '[') - { + if (!isset($Line['text'][1]) or $Line['text'][1] !== '[') { return; } - $Line['text']= substr($Line['text'], 1); + $Line['text'] = substr($Line['text'], 1); $Link = $this->inlineLink($Line); - if ($Link === null) - { + if ($Link === null) { return; } // See: https://stackoverflow.com/a/64320469 $yt = preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $Link['element']['attributes']['href'], $match); - if (! $yt) - { + if (!$yt) { return; } @@ -520,10 +621,11 @@ protected function blockYouTube($Line) 'handler' => 'line', 'attributes' => array( - 'class' => 'external-embed mod-receives-events', 'sandbox' => 'allow-forms allow-presentation allow-same-origin allow-scripts allow-modals allow-popups', + 'class' => 'external-embed mod-receives-events', + 'sandbox' => 'allow-forms allow-presentation allow-same-origin allow-scripts allow-modals allow-popups', 'allow' => 'fullscreen', 'frameborder' => '0', - 'src' => 'https://www.youtube.com/embed/'. $youtubeId, + 'src' => 'https://www.youtube.com/embed/' . $youtubeId, ), ), @@ -533,35 +635,12 @@ protected function blockYouTube($Line) } - # extend to obsidian tags - protected $inlineMarkerList = '!"*$_#&[:<>`~\\='; - protected $InlineTypes = array( - '"' => array('SpecialCharacter'), - '!' => array('Image'), - '&' => array('SpecialCharacter'), - '*' => array('Emphasis'), - ':' => array('Url'), - '<' => array('UrlTag', 'EmailTag', 'Markup', 'SpecialCharacter'), - '>' => array('SpecialCharacter'), - '[' => array('Link'), - '#' => array('Tag'), - '$' => array('Katex'), - '_' => array('Emphasis'), - '`' => array('Code'), - '~' => array('Strikethrough'), - '\\' => array('EscapeSequence'), - '=' => array('Highlight'), - ); - - - # handle highlight code protected function inlineHighlight($Excerpt) { $marker = $Excerpt['text'][1]; - if (preg_match('/^==(.+?)==/s', $Excerpt['text'], $matches)) - { + if (preg_match('/^==(.+?)==/s', $Excerpt['text'], $matches)) { $content = $matches[1]; $Inline = array( 'extent' => strlen($matches[0]), @@ -578,15 +657,31 @@ protected function inlineHighlight($Excerpt) } } + # handle hidden code + protected function inlineHidden($Excerpt) + { + $marker = $Excerpt['text'][1]; + if (preg_match('/^%%(.+?)%%/s', $Excerpt['text'], $matches)) { + $content = ""; + $Inline = array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => 'span', + 'text' => $content, + ), + ); + return $Inline; + } + + } # handle katex code protected function inlineKatex($Excerpt) { $marker = $Excerpt['text'][0]; - if (preg_match('/^(\\'.$marker.'+)[ ]*(.+?)[ ]*(? array( 'name' => 'div', - 'elements' => array( - array( + 'elements' => array( + array( 'name' => 'div', 'attributes' => array( 'class' => 'HyperMD-list-line HyperMD-list-line-1 HyperMD-task-line cm-line', 'data-task' => $isActive, - ), ), - array( - 'name' => 'label', - 'attributes' => array('class' => 'task-list-label'), - 'elements' => array( - array( - 'name' => 'input', - 'attributes' => array( - 'class' => 'task-list-item-checkbox', - 'type' => 'checkbox', - 'data-task' => $isActive, - $checked => '', - ), - ), - array( - 'name' => 'label', - 'attributes' => array('class' => 'cm-widgetBuffer'), - 'text' => $text, + ), + array( + 'name' => 'label', + 'attributes' => array('class' => 'task-list-label'), + 'elements' => array( + array( + 'name' => 'input', + 'attributes' => array( + 'class' => 'task-list-item-checkbox', + 'type' => 'checkbox', + 'data-task' => $isActive, + $checked => '', ), ), - ), + array( + 'name' => 'label', + 'attributes' => array('class' => 'cm-widgetBuffer'), + 'text' => $text, + ), + ), + ), ), ), ); - - + + return $Block; } - if (preg_match('/^('.$pattern.'[ ]+)(.*)/', $Line['text'], $matches)) - { + if (preg_match('/^(' . $pattern . '[ ]+)(.*)/', $Line['text'], $matches)) { $Block = array( 'indent' => $Line['indent'], 'pattern' => $pattern, @@ -707,12 +801,10 @@ protected function blockList($Line) ), ); - if($name === 'ol') - { + if ($name === 'ol') { $listStart = stristr($matches[0], '.', true); - if($listStart !== '1') - { + if ($listStart !== '1') { $Block['element']['attributes'] = array('start' => $listStart); } } @@ -725,7 +817,7 @@ protected function blockList($Line) ), ); - $Block['element']['text'] []= & $Block['li']; + $Block['element']['text'][] = &$Block['li']; return $Block; } @@ -733,8 +825,8 @@ protected function blockList($Line) protected function blockListContinue($Line, array $Block) { - - + + if (preg_match('/(- \[(x| )\])(.*)/', $Line['text'], $matches)) { $text = isset($matches[3]) ? $matches[3] : ''; @@ -747,52 +839,50 @@ protected function blockListContinue($Line, array $Block) - - + + $conBlock = array( - 'name' => 'div', - 'attributes' => array( - 'class' => 'HyperMD-list-line HyperMD-list-line-1 HyperMD-task-line cm-line', - 'data-task' => $isActive, - ), - 'elements' => array( - array( - 'name' => 'label', - 'attributes' => array('class' => 'task-list-label'), - 'elements' => array( - array( - 'name' => 'input', - 'attributes' => array( - 'class' => 'task-list-item-checkbox', - 'type' => 'checkbox', - 'data-task' => $isActive, - $checked => '', - ), - ), - array( - 'name' => 'label', - 'attributes' => array('class' => 'cm-widgetBuffer'), - 'text' => $text, + 'name' => 'div', + 'attributes' => array( + 'class' => 'HyperMD-list-line HyperMD-list-line-1 HyperMD-task-line cm-line', + 'data-task' => $isActive, + ), + 'elements' => array( + array( + 'name' => 'label', + 'attributes' => array('class' => 'task-list-label'), + 'elements' => array( + array( + 'name' => 'input', + 'attributes' => array( + 'class' => 'task-list-item-checkbox', + 'type' => 'checkbox', + 'data-task' => $isActive, + $checked => '', ), ), + array( + 'name' => 'label', + 'attributes' => array('class' => 'cm-widgetBuffer'), + 'text' => $text, + ), ), - ) + ), + ) ); - - - $Block['element']['elements'][ ] = & $conBlock; - + + + $Block['element']['elements'][] = &$conBlock; + return $Block; } $Block['indent'] = isset($Block['indent']) ? $Block['indent'] : '0'; - if ($Block['indent'] === $Line['indent'] and preg_match('/^'.$Block['pattern'].'(?:[ ]+(.*)|$)/', $Line['text'], $matches)) - { - - if (isset($Block['interrupted'])) - { - $Block['li']['text'] []= ''; + if ($Block['indent'] === $Line['indent'] and preg_match('/^' . $Block['pattern'] . '(?:[ ]+(.*)|$)/', $Line['text'], $matches)) { + + if (isset($Block['interrupted'])) { + $Block['li']['text'][] = ''; $Block['loose'] = true; @@ -811,32 +901,32 @@ protected function blockListContinue($Line, array $Block) ), ); - $Block['element']['text'] []= & $Block['li']; + $Block['element']['text'][] = &$Block['li']; return $Block; } - if ($Line['text'][0] === '[' and $this->blockReference($Line)) - { + if ($Line['text'][0] === '[' and $this->blockReference($Line)) { return $Block; } - if ( ! isset($Block['interrupted'])) - { + if (!isset($Block['interrupted'])) { + if (preg_match('/^[`~]{3,}/', $Line['text'])) { + return null; + } $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); - $Block['li']['text'] []= $text; + $Block['li']['text'][] = $text; return $Block; } - if ($Line['indent'] > 0) - { - $Block['li']['text'] []= ''; + if ($Line['indent'] > 0) { + $Block['li']['text'][] = ''; $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); - $Block['li']['text'] []= $text; + $Block['li']['text'][] = $text; unset($Block['interrupted']); @@ -1020,7 +1110,18 @@ protected function lines(array $lines) unset($parts[0]); foreach ($parts as $part) { - $shortage = 4 - strlen(utf8_decode($input)) % 4; + + + $shortage = 0; + if (function_exists('mb_strlen')) { + $shortage = 4 - (mb_strlen($input ?? '', 'UTF-8') % 4); + } elseif (function_exists('iconv')) { + $converted = @iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $input); + $shortage = 4 - (strlen($converted) % 4); + } else { + // Fallback: count bytes (not characters) + $shortage = 4 - (strlen($input) % 4); + } $line .= str_repeat(' ', $shortage); $line .= $part; @@ -1155,4 +1256,313 @@ protected function lines(array $lines) return $markup; } + + protected function inlineInternalLink($Excerpt) + { + if (!preg_match('/^\[\[(.+?)\]\]/', $Excerpt['text'], $matches)) { + return; + } + + $raw = $matches[1]; + + // Split Obsidian-style: file|label|popup + $parts = explode('|', $raw); + $linkFile = $parts[0]; + + $ext = pathinfo($linkFile, PATHINFO_EXTENSION); + $openNewTab = false; + + if (in_array($ext, $this->allowedFileLinkTypes)) { + $openNewTab = true; + } + + $linkText = $parts[1] ?? $parts[0]; + $isPopup = isset($parts[2]); + + $popupClass = $isPopup ? ' internal-popup' : ''; + $popupIcon = $isPopup ? $this->popupIconSvg() : ''; + + // Determine relative traversal + $path = $this->path; + + + if (str_starts_with($linkFile, '../')) { + $depth = substr_count($linkFile, '../'); + $segments = explode('/', $this->path); + $segments = array_slice($segments, 0, count($segments) - $depth); + $path = implode('/', $segments); + $linkFile = preg_replace('#^(\.\./)+#', '', $linkFile); + + } + + // use only the file name for nice links + if ($this->niceLinks == true) { + $segments = explode('/', $linkText); + $segments = array_slice($segments, count($segments) - 1, 1); + $linkText = $segments[0]; + } + + + if ($openNewTab == false) { + $segments = explode('/', $path); + $segments = array_slice($segments, 1, count($segments)); + $path = implode('/', $segments); + } + + + $urlPath = ltrim($path . '/' . $linkFile, '/'); + + // Same-document anchor + if (str_starts_with($raw, '#')) { + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => 'a', + 'text' => $linkText, + 'attributes' => array( + 'href' => '#' . ltrim($raw, '#'), + 'class' => 'internal-link' . $popupClass, + ), + ), + ); + } + + // URL normalization (ported exactly) + if ($openNewTab == false) { + $urlPath = str_replace('&', '&', $urlPath); + $urlPath = str_replace('%23', '#', $urlPath); + $urlPath = str_replace('~', '%80', $urlPath); + $urlPath = str_replace('-', '~', $urlPath); + $urlPath = str_replace(' ', '-', $urlPath); + } + + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => 'a', + 'handler' => 'line', + 'text' => $linkText, + 'attributes' => array( + 'href' => $this->uriPath . $urlPath, + 'class' => 'internal-link' . $popupClass, + 'target' => $openNewTab ? '_blank' : null, + 'rel' => $openNewTab ? 'noopener noreferrer' : null, + ), + 'suffix' => $popupIcon, + ), + ); + } + + protected function inlineInternalMarkdownLink($Excerpt) + { + // Match [label](path) — but NOT external URLs + if (!preg_match('/^\[([^\]]+)\]\(([^)]+)\)/', $Excerpt['text'], $m)) { + return; + } + + $label = $m[1]; + $path = $m[2]; + + // Reject external links explicitly + if (preg_match('#^[a-z][a-z0-9+.-]*://#i', $path)) { + return; + } + + // Reject protocol-relative URLs + if (str_starts_with($path, '//')) { + return; + } + + // Convert into Obsidian-style payload + // [[path|label]] + $synthetic = '[[' . $path . '|' . $label . ']]'; + + // Delegate to inlineInternalLink() + $result = $this->inlineInternalLink([ + 'text' => $synthetic, + ]); + + if ($result === null) { + return; + } + + // Adjust extent to original Markdown syntax length + $result['extent'] = strlen($m[0]); + + return $result; + } + + protected function inlineInternalEmbed($Excerpt) + { + if (!preg_match('/^!\[\[(.+?)\]\]/', $Excerpt['text'], $m)) { + return; + } + + $raw = $m[1]; + $parts = explode('|', $raw); + + $file = $parts[0]; + $mod1 = $parts[1] ?? null; + $mod2 = $parts[2] ?? null; + + $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION)); + $src = rtrim($this->uriPath . $this->path, '/') . '/' . $file; + + if (str_contains($file, '#')) { + $ext = strtolower(pathinfo(explode('#', $file)[0], PATHINFO_EXTENSION)); + } + + /* ---------- PDF ---------- */ + if ($ext === 'pdf') { + return array( + 'extent' => strlen($m[0]), + 'element' => array( + 'name' => 'embed', + 'attributes' => array( + 'src' => $src, + 'type' => 'application/pdf', + 'style' => 'min-height:100vh;width:100%', + ), + ), + ); + } + + /* ---------- Video / Audio ---------- */ + if (in_array($ext, array('mp4', 'm4a'))) { + return array( + 'extent' => strlen($m[0]), + 'element' => array( + 'name' => 'video', + 'handler' => 'line', + 'attributes' => array( + 'controls' => true, + 'src' => $src, + 'type' => $ext === 'mp4' ? 'video/mp4' : 'audio/x-m4a', + ), + 'text' => + 'Download ' . basename($file) . '', + ), + ); + } + + /* ---------- Image ---------- */ + if (in_array($ext, $this->allowedImageTypes)) { + + // syntax: image.png#caption=...&size=... + if (str_contains($file, '#')) { + return $this->buildInternalImageFromFragment( + $file, + strlen($m[0]) + ); + } + + // syntax: image.png|Caption|300x200|center + return $this->buildInternalImageFromLegacy( + $raw, + strlen($m[0]) + ); + } + + + } + + protected function buildInternalImage(string $file, array $attrs, int $extent) + { + $src = rtrim($this->uriPath . $this->path, '/') . '/' . $file; + + $class = 'images'; + $alt = $attrs['caption'] ?? 'image'; + $width = null; + $height = null; + + if (!empty($attrs['align'])) { + $class .= ' ' . $attrs['align']; + } + + if (!empty($attrs['size']) && preg_match('/^(\d*)x(\d*)$/', $attrs['size'], $m)) { + $width = $m[1] ?: null; + $height = $m[2] ?: null; + } + + return [ + 'extent' => $extent, + 'element' => [ + 'name' => 'p', + 'elements' => [ + [ + 'name' => 'a', + 'attributes' => [ + 'href' => '#', + 'class' => 'pop', + ], + 'elements' => [ + [ + 'name' => 'img', + 'attributes' => array_filter([ + 'src' => $src, + 'class' => $class, + 'alt' => $alt, + 'width' => $width, + 'height' => $height, + ]), + ], + ], + ], + ], + ], + ]; + } + + protected function buildInternalImageFromFragment(string $file, int $extent) + { + [$file, $fragment] = explode('#', $file, 2); + + parse_str($fragment, $attrs); + + return $this->buildInternalImage( + $file, + [ + 'caption' => $attrs['caption'] ?? null, + 'size' => $attrs['size'] ?? null, + 'align' => $attrs['align'] ?? null, + ], + $extent + ); + } + + protected function buildInternalImageFromLegacy(string $raw, int $extent) + { + $parts = explode('|', $raw); + $file = array_shift($parts); + + $attrs = [ + 'caption' => null, + 'size' => null, + 'align' => null, + ]; + + foreach ($parts as $part) { + if (preg_match('/^\d*x\d*$/', $part)) { + $attrs['size'] = $part; + } elseif (in_array($part, ['center', 'right'], true)) { + $attrs['align'] = $part; + } elseif ($part !== '') { + $attrs['caption'] = $part; + } + } + + return $this->buildInternalImage($file, $attrs, $extent); + } + + protected function popupIconSvg() + { + return ' + + + + + '; + } + } diff --git a/perlite/.styles/app.css b/perlite/.styles/app.css index e9c1d7c2..94ecba43 100644 --- a/perlite/.styles/app.css +++ b/perlite/.styles/app.css @@ -1,1096 +1,2135 @@ -/* - * @obsidian Do not edit this file directly, it is generated from the pdf.js repo - * Either edit the CSS there, or override in pdf-view.less +/* @obsidian Do not edit this file directly, it is generated from the pdf.js repo + * Either edit the CSS there, or override in pdf-view.less + */ +/* Copyright 2014 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ +.messageBar{ + --message-bar-close-button-color:var(--text-primary-color); + --message-bar-close-button-color-hover:var(--text-primary-color); + --message-bar-close-button-border-radius:4px; + --message-bar-close-button-border:none; + --csstools-light-dark-toggle--24:var(--csstools-color-scheme--dark) rgba(21, 20, 26, 0.14); + --message-bar-close-button-hover-bg-color:var(--csstools-light-dark-toggle--24, rgba(251, 251, 254, 0.14)); + --csstools-light-dark-toggle--25:var(--csstools-color-scheme--dark) rgba(21, 20, 26, 0.21); + --message-bar-close-button-active-bg-color:var(--csstools-light-dark-toggle--25, rgba(251, 251, 254, 0.21)); + --csstools-light-dark-toggle--26:var(--csstools-color-scheme--dark) rgba(21, 20, 26, 0.07); + --message-bar-close-button-focus-bg-color:var(--csstools-light-dark-toggle--26, rgba(251, 251, 254, 0.07)); - :root { - --highlight-bg-color: rgba(180, 0, 170, 1); - --highlight-selected-bg-color: rgba(0, 100, 0, 1); -} + display:flex; + position:relative; + padding:8px 8px 8px 16px; + flex-direction:column; + justify-content:center; + align-items:center; + gap:8px; + -webkit-user-select:none; + -moz-user-select:none; + user-select:none; -@media screen and (forced-colors: active) { - :root { - --highlight-bg-color: Highlight; - --highlight-selected-bg-color: ButtonText; - } -} + border-radius:4px; -.textLayer { - position: absolute; - text-align: left; - text-align: initial; - top: 0; - right: 0; - bottom: 0; - left: 0; - overflow: hidden; - /* @obsidian */ - /* opacity: 0.25; */ - line-height: 1; - -webkit-text-size-adjust: none; - -moz-text-size-adjust: none; - text-size-adjust: none; - forced-color-adjust: none; - transform-origin: 0 0; - z-index: 2; + border:1px solid var(--message-bar-border-color); + background:var(--message-bar-bg-color); + color:var(--message-bar-fg-color); } -.textLayer span, .textLayer br { - color: transparent; - position: absolute; - white-space: pre; - cursor: text; - transform-origin: 0% 0%; +@supports (color: light-dark(red, red)) { +.messageBar{ + --message-bar-close-button-hover-bg-color:light-dark( + rgba(21, 20, 26, 0.14), + rgba(251, 251, 254, 0.14) + ); + --message-bar-close-button-active-bg-color:light-dark( + rgba(21, 20, 26, 0.21), + rgba(251, 251, 254, 0.21) + ); + --message-bar-close-button-focus-bg-color:light-dark( + rgba(21, 20, 26, 0.07), + rgba(251, 251, 254, 0.07) + ); } - -/* Only necessary in Google Chrome, see issue 14205, and most unfortunately - * the problem doesn't show up in "text" reference tests. */ -.textLayer span.markedContent { - top: 0; - height: 0; } -.textLayer .highlight { - margin: -1px; - padding: 1px; - /* @obsidian */ - /* background-color: var(--highlight-bg-color); */ - /* border-radius: 4px; */ +.messageBar * { + --csstools-light-dark-toggle--24:var(--csstools-color-scheme--dark) rgba(21, 20, 26, 0.14); + --message-bar-close-button-hover-bg-color:var(--csstools-light-dark-toggle--24, rgba(251, 251, 254, 0.14)); } -.textLayer .highlight.appended { - position: static; - position: initial; +.messageBar * { + --csstools-light-dark-toggle--25:var(--csstools-color-scheme--dark) rgba(21, 20, 26, 0.21); + --message-bar-close-button-active-bg-color:var(--csstools-light-dark-toggle--25, rgba(251, 251, 254, 0.21)); } -/* @obsidian */ -/* .textLayer .highlight.begin { - border-radius: 4px 0 0 4px; +.messageBar * { + --csstools-light-dark-toggle--26:var(--csstools-color-scheme--dark) rgba(21, 20, 26, 0.07); + --message-bar-close-button-focus-bg-color:var(--csstools-light-dark-toggle--26, rgba(251, 251, 254, 0.07)); } -.textLayer .highlight.end { - border-radius: 0 4px 4px 0; -} */ +@media screen and (forced-colors: active){ -.textLayer .highlight.middle { - border-radius: 0; +.messageBar{ + --message-bar-close-button-color:ButtonText; + --message-bar-close-button-border:1px solid ButtonText; + --message-bar-close-button-hover-bg-color:ButtonText; + --message-bar-close-button-active-bg-color:ButtonText; + --message-bar-close-button-focus-bg-color:ButtonText; + --message-bar-close-button-color-hover:HighlightText; } + } -/* @obsidian */ -/* .textLayer .highlight.selected { - background-color: var(--highlight-selected-bg-color); -} */ +.messageBar > div{ + display:flex; + align-items:flex-start; + gap:8px; + align-self:stretch; + } -/* @obsidian */ -/* .textLayer ::selection { - background: blue; - background: AccentColor; -} */ +.messageBar > div::before{ + content:""; + display:inline-block; + width:16px; + height:16px; + -webkit-mask-image:var(--message-bar-icon); + mask-image:var(--message-bar-icon); + -webkit-mask-size:cover; + mask-size:cover; + background-color:var(--message-bar-icon-color); + flex-shrink:0; + } -/* Avoids https://github.com/mozilla/pdf.js/issues/13840 in Chrome */ -.textLayer br::-moz-selection { - background: transparent; -} -.textLayer br::selection { - background: transparent; -} +.messageBar button{ + cursor:pointer; + } -.textLayer .endOfContent { - display: block; - position: absolute; - top: 100%; - right: 0; - bottom: 0; - left: 0; - z-index: -1; - cursor: default; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; -} +.messageBar button:focus-visible{ + --csstools-light-dark-toggle--27:var(--csstools-color-scheme--dark) #0060df; + outline:2px solid #0df; + outline:2px solid var(--csstools-light-dark-toggle--27, #0df); + outline:2px solid light-dark(#0060df, #0df); + outline:var(--focus-ring-outline); + outline-offset:2px; + } -.textLayer .endOfContent.active { - top: 0; -} +.messageBar .closeButton{ + width:32px; + height:32px; + background:none; + border-radius:var(--message-bar-close-button-border-radius); + border:var(--message-bar-close-button-border); + display:flex; + align-items:center; + justify-content:center; + } -:root { - --annotation-unfocused-field-background: url("data:image/svg+xml;charset=UTF-8,"); - --input-focus-border-color: Highlight; - --input-focus-outline: 1px solid Canvas; - --input-unfocused-border-color: transparent; - --input-disabled-border-color: transparent; - --input-hover-border-color: black; - --link-outline: none; -} +.messageBar .closeButton::before{ + content:""; + display:inline-block; + width:16px; + height:16px; + -webkit-mask-image:var(--closing-button-icon); + mask-image:var(--closing-button-icon); + -webkit-mask-size:cover; + mask-size:cover; + background-color:var(--message-bar-close-button-color); + } -@media screen and (forced-colors: active) { - :root { - --input-focus-border-color: CanvasText; - --input-unfocused-border-color: ActiveText; - --input-disabled-border-color: GrayText; - --input-hover-border-color: Highlight; - --link-outline: 1.5px solid LinkText; - --hcm-highligh-filter: invert(100%); - } - .annotationLayer .textWidgetAnnotation input:required { - outline: 1.5px solid selectedItem; - } - .annotationLayer .textWidgetAnnotation textarea:required { - outline: 1.5px solid selectedItem; - } - .annotationLayer - .buttonWidgetAnnotation.checkBox - input:required { - outline: 1.5px solid selectedItem; - } - .annotationLayer - .buttonWidgetAnnotation.radioButton - input:required { - outline: 1.5px solid selectedItem; - } - .annotationLayer .choiceWidgetAnnotation select:required { - outline: 1.5px solid selectedItem; - } +.messageBar .closeButton:hover::before{ + background-color:var(--message-bar-close-button-color-hover); + } - .annotationLayer .linkAnnotation:hover { - -webkit-backdrop-filter: var(--hcm-highligh-filter); - backdrop-filter: var(--hcm-highligh-filter); - } +.messageBar .closeButton:active::before{ + background-color:var(--message-bar-close-button-color-hover); + } - .annotationLayer .linkAnnotation > a:hover { - opacity: 0 !important; - background: none !important; - } +.messageBar .closeButton:focus::before{ + background-color:var(--message-bar-close-button-color-hover); + } - .annotationLayer .linkAnnotation > a:hover { - box-shadow: none; - } +.messageBar .closeButton:hover{ + background-color:var(--message-bar-close-button-hover-bg-color); + } - .annotationLayer .popupAnnotation .popup { - outline: calc(1.5px * var(--scale-factor)) solid CanvasText !important; - background-color: ButtonFace !important; - color: ButtonText !important; - } +.messageBar .closeButton:active{ + background-color:var(--message-bar-close-button-active-bg-color); + } - .annotationLayer .highlightArea:hover::after { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - -webkit-backdrop-filter: var(--hcm-highligh-filter); - backdrop-filter: var(--hcm-highligh-filter); - content: ""; - pointer-events: none; - } +.messageBar .closeButton:focus{ + background-color:var(--message-bar-close-button-focus-bg-color); + } - .annotationLayer .popupAnnotation.focused .popup { - outline: calc(3px * var(--scale-factor)) solid Highlight !important; - } -} +.messageBar .closeButton > span{ + display:inline-block; + width:0; + height:0; + overflow:hidden; + } -.annotationLayer { - position: absolute; - top: 0; - left: 0; - pointer-events: none; - transform-origin: 0 0; - z-index: 3; -} +#editorUndoBar{ + --csstools-light-dark-toggle--0:var(--csstools-color-scheme--dark) #15141a; + --text-primary-color:var(--csstools-light-dark-toggle--0, #fbfbfe); + --csstools-light-dark-toggle--1:var(--csstools-color-scheme--dark) #0060df; + --message-bar-icon-color:var(--csstools-light-dark-toggle--1, #73a7f3); + --csstools-light-dark-toggle--2:var(--csstools-color-scheme--dark) #deeafc; + --message-bar-bg-color:var(--csstools-light-dark-toggle--2, #003070); + --message-bar-fg-color:var(--text-primary-color); + --csstools-light-dark-toggle--29:var(--csstools-color-scheme--dark) rgba(0, 0, 0, 0.08); + --message-bar-border-color:var(--csstools-light-dark-toggle--29, rgba(255, 255, 255, 0.08)); + + --csstools-light-dark-toggle--30:var(--csstools-color-scheme--dark) rgba(21, 20, 26, 0.07); + + --undo-button-bg-color:var(--csstools-light-dark-toggle--30, rgba(255, 255, 255, 0.08)); + --csstools-light-dark-toggle--31:var(--csstools-color-scheme--dark) rgba(21, 20, 26, 0.14); + --undo-button-bg-color-hover:var(--csstools-light-dark-toggle--31, rgba(255, 255, 255, 0.14)); + --csstools-light-dark-toggle--32:var(--csstools-color-scheme--dark) rgba(21, 20, 26, 0.21); + --undo-button-bg-color-active:var(--csstools-light-dark-toggle--32, rgba(255, 255, 255, 0.21)); + + --csstools-light-dark-toggle--3:var(--csstools-color-scheme--dark) #0060df; + + --undo-button-border:1px solid var(--csstools-light-dark-toggle--3, #0df); -.annotationLayer[data-main-rotation="90"] .norotate { - transform: rotate(270deg) translateX(-100%); + --undo-button-fg-color:var(--message-bar-fg-color); + --undo-button-fg-color-hover:var(--undo-button-fg-color); + --undo-button-fg-color-active:var(--undo-button-fg-color); + + position:fixed; + top:50px; + left:50%; + transform:translateX(-50%); + z-index:10; + + padding-top:8px; + + padding-bottom:8px; + padding-left:16px; + padding-right:8px; + + font:menu; + font-size:15px; + + cursor:default; } -.annotationLayer[data-main-rotation="180"] .norotate { - transform: rotate(180deg) translate(-100%, -100%); + +@supports (color: light-dark(red, red)) { +#editorUndoBar{ + --text-primary-color:light-dark(#15141a, #fbfbfe); + --message-bar-icon-color:light-dark(#0060df, #73a7f3); + --message-bar-bg-color:light-dark(#deeafc, #003070); + --message-bar-border-color:light-dark( + rgba(0, 0, 0, 0.08), + rgba(255, 255, 255, 0.08) + ); + + --undo-button-bg-color:light-dark( + rgba(21, 20, 26, 0.07), + rgba(255, 255, 255, 0.08) + ); + --undo-button-bg-color-hover:light-dark( + rgba(21, 20, 26, 0.14), + rgba(255, 255, 255, 0.14) + ); + --undo-button-bg-color-active:light-dark( + rgba(21, 20, 26, 0.21), + rgba(255, 255, 255, 0.21) + ); + + --undo-button-border:1px solid light-dark(#0060df, #0df); } -.annotationLayer[data-main-rotation="270"] .norotate { - transform: rotate(90deg) translateY(-100%); } -.annotationLayer canvas { - position: absolute; - width: 100%; - height: 100%; - pointer-events: none; +#editorUndoBar * { + --csstools-light-dark-toggle--29:var(--csstools-color-scheme--dark) rgba(0, 0, 0, 0.08); + --message-bar-border-color:var(--csstools-light-dark-toggle--29, rgba(255, 255, 255, 0.08)); } -.annotationLayer section { - position: absolute; - text-align: left; - text-align: initial; - pointer-events: auto; - box-sizing: border-box; - transform-origin: 0 0; -} +#editorUndoBar * { -.annotationLayer .linkAnnotation { - outline: none; - outline: var(--link-outline); -} + --csstools-light-dark-toggle--30:var(--csstools-color-scheme--dark) rgba(21, 20, 26, 0.07); -.annotationLayer .linkAnnotation:not(.does-not-exist) > a, .annotationLayer .buttonWidgetAnnotation.pushButton > a { - position: absolute; - font-size: 1em; - top: 0; - left: 0; - width: 100%; - height: 100%; + --undo-button-bg-color:var(--csstools-light-dark-toggle--30, rgba(255, 255, 255, 0.08)); } -.annotationLayer - .linkAnnotation:not(.does-not-exist):not(.hasBorder) - > a:hover, .annotationLayer - .buttonWidgetAnnotation.pushButton:not(.hasBorder) - > a:hover { - opacity: 0.2; - background-color: rgba(255, 255, 0, 1); - box-shadow: 0 2px 10px rgba(255, 255, 0, 1); +#editorUndoBar * { + --csstools-light-dark-toggle--31:var(--csstools-color-scheme--dark) rgba(21, 20, 26, 0.14); + --undo-button-bg-color-hover:var(--csstools-light-dark-toggle--31, rgba(255, 255, 255, 0.14)); } -.annotationLayer .linkAnnotation.hasBorder:hover { - background-color: rgba(255, 255, 0, 0.2); +#editorUndoBar * { + --csstools-light-dark-toggle--32:var(--csstools-color-scheme--dark) rgba(21, 20, 26, 0.21); + --undo-button-bg-color-active:var(--csstools-light-dark-toggle--32, rgba(255, 255, 255, 0.21)); } -.annotationLayer .hasBorder { - background-size: 100% 100%; +#editorUndoBar * { + --csstools-light-dark-toggle--0:var(--csstools-color-scheme--dark) #15141a; + --text-primary-color:var(--csstools-light-dark-toggle--0, #fbfbfe); } -.annotationLayer .textAnnotation img { - position: absolute; - cursor: pointer; - width: 100%; - height: 100%; - top: 0; - left: 0; +#editorUndoBar * { + --csstools-light-dark-toggle--1:var(--csstools-color-scheme--dark) #0060df; + --message-bar-icon-color:var(--csstools-light-dark-toggle--1, #73a7f3); } -.annotationLayer .textWidgetAnnotation input, .annotationLayer .textWidgetAnnotation textarea, .annotationLayer .choiceWidgetAnnotation select, .annotationLayer .buttonWidgetAnnotation.checkBox input, .annotationLayer .buttonWidgetAnnotation.radioButton input { - background-image: url("data:image/svg+xml;charset=UTF-8,"); - background-image: var(--annotation-unfocused-field-background); - border: 2px solid transparent; - border: 2px solid var(--input-unfocused-border-color); - box-sizing: border-box; - font: calc(9px * var(--scale-factor)) sans-serif; - height: 100%; - margin: 0; - vertical-align: top; - width: 100%; +#editorUndoBar * { + --csstools-light-dark-toggle--2:var(--csstools-color-scheme--dark) #deeafc; + --message-bar-bg-color:var(--csstools-light-dark-toggle--2, #003070); } -.annotationLayer .textWidgetAnnotation input:required { - outline: 1.5px solid red; -} +#editorUndoBar * { -.annotationLayer .textWidgetAnnotation textarea:required { - outline: 1.5px solid red; -} + --csstools-light-dark-toggle--3:var(--csstools-color-scheme--dark) #0060df; -.annotationLayer - .buttonWidgetAnnotation.checkBox - input:required { - outline: 1.5px solid red; + --undo-button-border:1px solid var(--csstools-light-dark-toggle--3, #0df); } -.annotationLayer - .buttonWidgetAnnotation.radioButton - input:required { - outline: 1.5px solid red; -} +@media screen and (forced-colors: active){ -.annotationLayer .choiceWidgetAnnotation select:required { - outline: 1.5px solid red; -} +#editorUndoBar{ + --text-primary-color:CanvasText; -.annotationLayer .choiceWidgetAnnotation select option { - padding: 0; -} + --message-bar-icon-color:CanvasText; + --message-bar-bg-color:Canvas; + --message-bar-border-color:CanvasText; -.annotationLayer .buttonWidgetAnnotation.radioButton input { - border-radius: 50%; -} + --undo-button-bg-color:ButtonText; + --undo-button-bg-color-hover:SelectedItem; + --undo-button-bg-color-active:SelectedItem; -.annotationLayer .textWidgetAnnotation textarea { - resize: none; -} + --undo-button-fg-color:ButtonFace; + --undo-button-fg-color-hover:SelectedItemText; + --undo-button-fg-color-active:SelectedItemText; -.annotationLayer .textWidgetAnnotation input[disabled], .annotationLayer .textWidgetAnnotation textarea[disabled], .annotationLayer .choiceWidgetAnnotation select[disabled], .annotationLayer - .buttonWidgetAnnotation.checkBox - input[disabled], .annotationLayer - .buttonWidgetAnnotation.radioButton - input[disabled] { - background: none; - border: 2px solid transparent; - border: 2px solid var(--input-disabled-border-color); - cursor: not-allowed; + --undo-button-border:none; } + } -.annotationLayer .textWidgetAnnotation input:hover, .annotationLayer .textWidgetAnnotation textarea:hover, .annotationLayer .choiceWidgetAnnotation select:hover, .annotationLayer - .buttonWidgetAnnotation.checkBox - input:hover, .annotationLayer - .buttonWidgetAnnotation.radioButton - input:hover { - border: 2px solid black; - border: 2px solid var(--input-hover-border-color); -} -.annotationLayer .textWidgetAnnotation input:hover, .annotationLayer .textWidgetAnnotation textarea:hover, .annotationLayer .choiceWidgetAnnotation select:hover, .annotationLayer .buttonWidgetAnnotation.checkBox input:hover { - border-radius: 2px; -} +#editorUndoBar button{ + cursor:pointer; + } -.annotationLayer .textWidgetAnnotation input:focus, .annotationLayer .textWidgetAnnotation textarea:focus, .annotationLayer .choiceWidgetAnnotation select:focus { - background: none; - border: 2px solid Highlight; - border: 2px solid var(--input-focus-border-color); - border-radius: 2px; - outline: 1px solid Canvas; - outline: var(--input-focus-outline); -} +#editorUndoBar #editorUndoBarUndoButton{ + border-radius:4px; + font-weight:590; + line-height:19.5px; + color:var(--undo-button-fg-color); + border:var(--undo-button-border); + padding:4px 16px; + margin-left:8px; + height:32px; -.annotationLayer .buttonWidgetAnnotation.checkBox :focus, .annotationLayer .buttonWidgetAnnotation.radioButton :focus { - background-image: none; - background-color: transparent; -} + background-color:var(--undo-button-bg-color); + } -.annotationLayer .buttonWidgetAnnotation.checkBox :focus { - border: 2px solid Highlight; - border: 2px solid var(--input-focus-border-color); - border-radius: 2px; - outline: 1px solid Canvas; - outline: var(--input-focus-outline); -} +#editorUndoBar #editorUndoBarUndoButton:hover{ + background-color:var(--undo-button-bg-color-hover); + color:var(--undo-button-fg-color-hover); + } -.annotationLayer .buttonWidgetAnnotation.radioButton :focus { - border: 2px solid Highlight; - border: 2px solid var(--input-focus-border-color); - outline: 1px solid Canvas; - outline: var(--input-focus-outline); -} +#editorUndoBar #editorUndoBarUndoButton:active{ + background-color:var(--undo-button-bg-color-active); + color:var(--undo-button-fg-color-active); + } -.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::before, -.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::after, -.annotationLayer .buttonWidgetAnnotation.radioButton input:checked::before { - background-color: CanvasText; - content: ""; - display: block; - position: absolute; -} +#editorUndoBar > div{ + align-items:center; + } -.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::before, -.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::after { - height: 80%; - left: 45%; - width: 1px; -} +.dialog{ + --csstools-light-dark-toggle--4:var(--csstools-color-scheme--dark) white; + --dialog-bg-color:var(--csstools-light-dark-toggle--4, #1c1b22); + --csstools-light-dark-toggle--5:var(--csstools-color-scheme--dark) white; + --dialog-border-color:var(--csstools-light-dark-toggle--5, #1c1b22); + --csstools-light-dark-toggle--33:var(--csstools-color-scheme--dark) rgba(58, 57, 68, 0.2); + --dialog-shadow:0 2px 14px 0 var(--csstools-light-dark-toggle--33, #15141a); + --csstools-light-dark-toggle--6:var(--csstools-color-scheme--dark) #15141a; + --text-primary-color:var(--csstools-light-dark-toggle--6, #fbfbfe); + --csstools-light-dark-toggle--7:var(--csstools-color-scheme--dark) #5b5b66; + --text-secondary-color:var(--csstools-light-dark-toggle--7, #cfcfd8); + --hover-filter:brightness(0.9); + --csstools-light-dark-toggle--8:var(--csstools-color-scheme--dark) #0060df; + --link-fg-color:var(--csstools-light-dark-toggle--8, #0df); + --csstools-light-dark-toggle--9:var(--csstools-color-scheme--dark) #0250bb; + --link-hover-fg-color:var(--csstools-light-dark-toggle--9, #80ebff); + --csstools-light-dark-toggle--10:var(--csstools-color-scheme--dark) #f0f0f4; + --separator-color:var(--csstools-light-dark-toggle--10, #52525e); -.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::before { - transform: rotate(45deg); -} + --textarea-border-color:#8f8f9d; + --csstools-light-dark-toggle--11:var(--csstools-color-scheme--dark) white; + --textarea-bg-color:var(--csstools-light-dark-toggle--11, #42414d); + --textarea-fg-color:var(--text-secondary-color); -.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::after { - transform: rotate(-45deg); -} + --csstools-light-dark-toggle--12:var(--csstools-color-scheme--dark) #f0f0f4; -.annotationLayer .buttonWidgetAnnotation.radioButton input:checked::before { - border-radius: 50%; - height: 50%; - left: 30%; - top: 20%; - width: 50%; -} + --radio-bg-color:var(--csstools-light-dark-toggle--12, #2b2a33); + --csstools-light-dark-toggle--13:var(--csstools-color-scheme--dark) #fbfbfe; + --radio-checked-bg-color:var(--csstools-light-dark-toggle--13, #15141a); + --radio-border-color:#8f8f9d; + --csstools-light-dark-toggle--14:var(--csstools-color-scheme--dark) #0060df; + --radio-checked-border-color:var(--csstools-light-dark-toggle--14, #0df); -.annotationLayer .textWidgetAnnotation input.comb { - font-family: monospace; - padding-left: 2px; - padding-right: 0; -} + --csstools-light-dark-toggle--34:var(--csstools-color-scheme--dark) rgba(21, 20, 26, 0.07); -.annotationLayer .textWidgetAnnotation input.comb:focus { - /* - * Letter spacing is placed on the right side of each character. Hence, the - * letter spacing of the last character may be placed outside the visible - * area, causing horizontal scrolling. We avoid this by extending the width - * when the element has focus and revert this when it loses focus. - */ - width: 103%; -} + --button-secondary-bg-color:var(--csstools-light-dark-toggle--34, rgba(251, 251, 254, 0.07)); + --button-secondary-fg-color:var(--text-primary-color); + --button-secondary-border-color:var(--button-secondary-bg-color); + --csstools-light-dark-toggle--35:var(--csstools-color-scheme--dark) rgba(21, 20, 26, 0.21); + --button-secondary-active-bg-color:var(--csstools-light-dark-toggle--35, rgba(251, 251, 254, 0.21)); + --button-secondary-active-fg-color:var(--button-secondary-fg-color); + --button-secondary-active-border-color:var(--button-secondary-bg-color); + --csstools-light-dark-toggle--36:var(--csstools-color-scheme--dark) rgba(21, 20, 26, 0.14); + --button-secondary-hover-bg-color:var(--csstools-light-dark-toggle--36, rgba(251, 251, 254, 0.14)); + --button-secondary-hover-fg-color:var(--button-secondary-fg-color); + --button-secondary-hover-border-color:var(--button-secondary-hover-bg-color); + --button-secondary-disabled-bg-color:var(--button-secondary-bg-color); + --button-secondary-disabled-border-color:var( + --button-secondary-border-color + ); + --button-secondary-disabled-fg-color:var(--button-secondary-fg-color); -.annotationLayer .buttonWidgetAnnotation.checkBox input, .annotationLayer .buttonWidgetAnnotation.radioButton input { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} + --csstools-light-dark-toggle--15:var(--csstools-color-scheme--dark) #0060df; -.annotationLayer .fileAttachmentAnnotation .popupTriggerArea { - height: 100%; - width: 100%; -} + --button-primary-bg-color:var(--csstools-light-dark-toggle--15, #0df); + --csstools-light-dark-toggle--16:var(--csstools-color-scheme--dark) #fbfbfe; + --button-primary-fg-color:var(--csstools-light-dark-toggle--16, #15141a); + --button-primary-border-color:var(--button-primary-bg-color); + --csstools-light-dark-toggle--17:var(--csstools-color-scheme--dark) #054096; + --button-primary-active-bg-color:var(--csstools-light-dark-toggle--17, #aaf2ff); + --button-primary-active-fg-color:var(--button-primary-fg-color); + --button-primary-active-border-color:var(--button-primary-active-bg-color); + --csstools-light-dark-toggle--18:var(--csstools-color-scheme--dark) #0250bb; + --button-primary-hover-bg-color:var(--csstools-light-dark-toggle--18, #80ebff); + --button-primary-hover-fg-color:var(--button-primary-fg-color); + --button-primary-hover-border-color:var(--button-primary-hover-bg-color); + --button-primary-disabled-bg-color:var(--button-primary-bg-color); + --button-primary-disabled-border-color:var(--button-primary-border-color); + --button-primary-disabled-fg-color:var(--button-primary-fg-color); + --button-disabled-opacity:0.4; -/* @obsidian */ -/* -.annotationLayer .popupAnnotation { - position: absolute; - font-size: calc(9px * var(--scale-factor)); - pointer-events: none; - width: max-content; - max-width: 45%; - height: auto; -} + --csstools-light-dark-toggle--19:var(--csstools-color-scheme--dark) white; -.annotationLayer .popup { - background-color: rgba(255, 255, 153, 1); - box-shadow: 0 calc(2px * var(--scale-factor)) calc(5px * var(--scale-factor)) - rgba(136, 136, 136, 1); - border-radius: calc(2px * var(--scale-factor)); - outline: 1.5px solid rgb(255, 255, 74); - padding: calc(6px * var(--scale-factor)); - cursor: pointer; - font: message-box; - white-space: normal; - word-wrap: break-word; - pointer-events: auto; -} + --input-text-bg-color:var(--csstools-light-dark-toggle--19, #42414d); + --input-text-fg-color:var(--text-primary-color); -.annotationLayer .popupAnnotation.focused .popup { - outline-width: 3px; + font:message-box; + font-size:13px; + font-weight:400; + line-height:150%; + border-radius:4px; + padding:12px 16px; + --csstools-light-dark-toggle--37:var(--csstools-color-scheme--dark) white; + border:1px solid #1c1b22; + border:1px solid var(--csstools-light-dark-toggle--37, #1c1b22); + border:1px solid light-dark(white, #1c1b22); + border:1px solid var(--dialog-border-color); + --csstools-light-dark-toggle--38:var(--csstools-color-scheme--dark) white; + background:#1c1b22; + background:var(--csstools-light-dark-toggle--38, #1c1b22); + background:light-dark(white, #1c1b22); + background:var(--dialog-bg-color); + --csstools-light-dark-toggle--39:var(--csstools-color-scheme--dark) #15141a; + color:#fbfbfe; + color:var(--csstools-light-dark-toggle--39, #fbfbfe); + color:light-dark(#15141a, #fbfbfe); + color:var(--text-primary-color); + --csstools-light-dark-toggle--40:var(--csstools-color-scheme--dark) rgba(58, 57, 68, 0.2); + box-shadow:0 2px 14px 0 #15141a; + box-shadow:0 2px 14px 0 var(--csstools-light-dark-toggle--40, #15141a); + box-shadow:0 2px 14px 0 light-dark(rgba(58, 57, 68, 0.2), #15141a); + box-shadow:var(--dialog-shadow); } -.annotationLayer .popup * { - font-size: calc(9px * var(--scale-factor)); -} +@supports (color: light-dark(red, red)) { +.dialog{ + --dialog-bg-color:light-dark(white, #1c1b22); + --dialog-border-color:light-dark(white, #1c1b22); + --dialog-shadow:0 2px 14px 0 light-dark(rgba(58, 57, 68, 0.2), #15141a); + --text-primary-color:light-dark(#15141a, #fbfbfe); + --text-secondary-color:light-dark(#5b5b66, #cfcfd8); + --link-fg-color:light-dark(#0060df, #0df); + --link-hover-fg-color:light-dark(#0250bb, #80ebff); + --separator-color:light-dark(#f0f0f4, #52525e); + --textarea-bg-color:light-dark(white, #42414d); -.annotationLayer .popup > .header { - display: inline-block; -} + --radio-bg-color:light-dark(#f0f0f4, #2b2a33); + --radio-checked-bg-color:light-dark(#fbfbfe, #15141a); + --radio-checked-border-color:light-dark(#0060df, #0df); -.annotationLayer .popup > .header h1 { - display: inline; + --button-secondary-bg-color:light-dark( + rgba(21, 20, 26, 0.07), + rgba(251, 251, 254, 0.07) + ); + --button-secondary-active-bg-color:light-dark( + rgba(21, 20, 26, 0.21), + rgba(251, 251, 254, 0.21) + ); + --button-secondary-hover-bg-color:light-dark( + rgba(21, 20, 26, 0.14), + rgba(251, 251, 254, 0.14) + ); + + --button-primary-bg-color:light-dark(#0060df, #0df); + --button-primary-fg-color:light-dark(#fbfbfe, #15141a); + --button-primary-active-bg-color:light-dark(#054096, #aaf2ff); + --button-primary-hover-bg-color:light-dark(#0250bb, #80ebff); + + --input-text-bg-color:light-dark(white, #42414d); +} } -.annotationLayer .popup > .header .popupDate { - display: inline-block; - margin-left: calc(5px * var(--scale-factor)); - width: fit-content; +.dialog * { + --csstools-light-dark-toggle--33:var(--csstools-color-scheme--dark) rgba(58, 57, 68, 0.2); + --dialog-shadow:0 2px 14px 0 var(--csstools-light-dark-toggle--33, #15141a); } -.annotationLayer .popupContent { - border-top: 1px solid rgba(51, 51, 51, 1); - margin-top: calc(2px * var(--scale-factor)); - padding-top: calc(2px * var(--scale-factor)); -} */ +.dialog * { -.annotationLayer .richText > * { - white-space: pre-wrap; - /* @obsidian */ - /* font-size: calc(9px * var(--scale-factor)); */ -} - -.annotationLayer .highlightAnnotation, -.annotationLayer .underlineAnnotation, -.annotationLayer .squigglyAnnotation, -.annotationLayer .strikeoutAnnotation, -.annotationLayer .freeTextAnnotation, -.annotationLayer .lineAnnotation svg line, -.annotationLayer .squareAnnotation svg rect, -.annotationLayer .circleAnnotation svg ellipse, -.annotationLayer .polylineAnnotation svg polyline, -.annotationLayer .polygonAnnotation svg polygon, -.annotationLayer .caretAnnotation, -.annotationLayer .inkAnnotation svg polyline, -.annotationLayer .stampAnnotation, -.annotationLayer .fileAttachmentAnnotation { - cursor: pointer; -} + --csstools-light-dark-toggle--34:var(--csstools-color-scheme--dark) rgba(21, 20, 26, 0.07); -.annotationLayer section svg { - position: absolute; - width: 100%; - height: 100%; - top: 0; - left: 0; + --button-secondary-bg-color:var(--csstools-light-dark-toggle--34, rgba(251, 251, 254, 0.07)); } -.annotationLayer .annotationTextContent { - position: absolute; - width: 100%; - height: 100%; - opacity: 0; - color: transparent; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - pointer-events: none; +.dialog * { + --csstools-light-dark-toggle--35:var(--csstools-color-scheme--dark) rgba(21, 20, 26, 0.21); + --button-secondary-active-bg-color:var(--csstools-light-dark-toggle--35, rgba(251, 251, 254, 0.21)); } -.annotationLayer .annotationTextContent span { - width: 100%; - display: inline-block; +.dialog * { + --csstools-light-dark-toggle--36:var(--csstools-color-scheme--dark) rgba(21, 20, 26, 0.14); + --button-secondary-hover-bg-color:var(--csstools-light-dark-toggle--36, rgba(251, 251, 254, 0.14)); } -.annotationLayer svg.quadrilateralsContainer { - contain: strict; - width: 0; - height: 0; - position: absolute; - top: 0; - left: 0; - z-index: -1; +.dialog * { + --csstools-light-dark-toggle--4:var(--csstools-color-scheme--dark) white; + --dialog-bg-color:var(--csstools-light-dark-toggle--4, #1c1b22); } - -:root { - --xfa-unfocused-field-background: url("data:image/svg+xml;charset=UTF-8,"); - --xfa-focus-outline: auto; +.dialog * { + --csstools-light-dark-toggle--5:var(--csstools-color-scheme--dark) white; + --dialog-border-color:var(--csstools-light-dark-toggle--5, #1c1b22); } -@media screen and (forced-colors: active) { - :root { - --xfa-focus-outline: 2px solid CanvasText; - } - .xfaLayer *:required { - outline: 1.5px solid selectedItem; - } +.dialog * { + --csstools-light-dark-toggle--6:var(--csstools-color-scheme--dark) #15141a; + --text-primary-color:var(--csstools-light-dark-toggle--6, #fbfbfe); } -.xfaLayer { - background-color: transparent; +.dialog * { + --csstools-light-dark-toggle--7:var(--csstools-color-scheme--dark) #5b5b66; + --text-secondary-color:var(--csstools-light-dark-toggle--7, #cfcfd8); } -.xfaLayer .highlight { - margin: -1px; - padding: 1px; - background-color: rgba(239, 203, 237, 1); - border-radius: 4px; +.dialog * { + --csstools-light-dark-toggle--8:var(--csstools-color-scheme--dark) #0060df; + --link-fg-color:var(--csstools-light-dark-toggle--8, #0df); } -.xfaLayer .highlight.appended { - position: static; - position: initial; +.dialog * { + --csstools-light-dark-toggle--9:var(--csstools-color-scheme--dark) #0250bb; + --link-hover-fg-color:var(--csstools-light-dark-toggle--9, #80ebff); } -.xfaLayer .highlight.begin { - border-radius: 4px 0 0 4px; +.dialog * { + --csstools-light-dark-toggle--10:var(--csstools-color-scheme--dark) #f0f0f4; + --separator-color:var(--csstools-light-dark-toggle--10, #52525e); } -.xfaLayer .highlight.end { - border-radius: 0 4px 4px 0; +.dialog * { + --csstools-light-dark-toggle--11:var(--csstools-color-scheme--dark) white; + --textarea-bg-color:var(--csstools-light-dark-toggle--11, #42414d); } -.xfaLayer .highlight.middle { - border-radius: 0; -} +.dialog * { -.xfaLayer .highlight.selected { - background-color: rgba(203, 223, 203, 1); -} + --csstools-light-dark-toggle--12:var(--csstools-color-scheme--dark) #f0f0f4; -.xfaPage { - overflow: hidden; - position: relative; + --radio-bg-color:var(--csstools-light-dark-toggle--12, #2b2a33); } -.xfaContentarea { - position: absolute; +.dialog * { + --csstools-light-dark-toggle--13:var(--csstools-color-scheme--dark) #fbfbfe; + --radio-checked-bg-color:var(--csstools-light-dark-toggle--13, #15141a); } -.xfaPrintOnly { - display: none; +.dialog * { + --csstools-light-dark-toggle--14:var(--csstools-color-scheme--dark) #0060df; + --radio-checked-border-color:var(--csstools-light-dark-toggle--14, #0df); } -.xfaLayer { - position: absolute; - text-align: left; - text-align: initial; - top: 0; - left: 0; - transform-origin: 0 0; - line-height: 1.2; +.dialog * { + + --csstools-light-dark-toggle--15:var(--csstools-color-scheme--dark) #0060df; + + --button-primary-bg-color:var(--csstools-light-dark-toggle--15, #0df); } -.xfaLayer * { - color: inherit; - font: inherit; - font-style: inherit; - font-weight: inherit; - font-feature-settings: inherit; - font-kerning: inherit; - letter-spacing: -0.01px; - text-align: inherit; - text-decoration: inherit; - box-sizing: border-box; - background-color: transparent; - padding: 0; - margin: 0; - pointer-events: auto; - line-height: inherit; +.dialog * { + --csstools-light-dark-toggle--16:var(--csstools-color-scheme--dark) #fbfbfe; + --button-primary-fg-color:var(--csstools-light-dark-toggle--16, #15141a); } -.xfaLayer *:required { - outline: 1.5px solid red; +.dialog * { + --csstools-light-dark-toggle--17:var(--csstools-color-scheme--dark) #054096; + --button-primary-active-bg-color:var(--csstools-light-dark-toggle--17, #aaf2ff); } -.xfaLayer div, -.xfaLayer svg, -.xfaLayer svg * { - pointer-events: none; +.dialog * { + --csstools-light-dark-toggle--18:var(--csstools-color-scheme--dark) #0250bb; + --button-primary-hover-bg-color:var(--csstools-light-dark-toggle--18, #80ebff); } -.xfaLayer a { - color: blue; +.dialog * { + + --csstools-light-dark-toggle--19:var(--csstools-color-scheme--dark) white; + + --input-text-bg-color:var(--csstools-light-dark-toggle--19, #42414d); } -.xfaRich li { - margin-left: 3em; +@media (prefers-color-scheme: dark){ + +.dialog{ + --hover-filter:brightness(1.4); + --button-disabled-opacity:0.6; } + } -.xfaFont { - color: black; - font-weight: normal; - font-feature-settings: "kern" off; - font-kerning: none; - font-size: 10px; - font-style: normal; - letter-spacing: 0; - -webkit-text-decoration: none; - text-decoration: none; - vertical-align: 0; -} +@media screen and (forced-colors: active){ -.xfaCaption { - overflow: hidden; - flex: 0 0 auto; -} +.dialog{ + --dialog-bg-color:Canvas; + --dialog-border-color:CanvasText; + --dialog-shadow:none; + --text-primary-color:CanvasText; + --text-secondary-color:CanvasText; + --hover-filter:none; + --link-fg-color:LinkText; + --link-hover-fg-color:LinkText; + --separator-color:CanvasText; -.xfaCaptionForCheckButton { - overflow: hidden; - flex: 1 1 auto; -} + --textarea-border-color:ButtonBorder; + --textarea-bg-color:Field; + --textarea-fg-color:ButtonText; -.xfaLabel { - height: 100%; - width: 100%; -} + --radio-bg-color:ButtonFace; + --radio-checked-bg-color:ButtonFace; + --radio-border-color:ButtonText; + --radio-checked-border-color:ButtonText; -.xfaLeft { - display: flex; - flex-direction: row; - align-items: center; -} + --button-secondary-bg-color:HighlightText; + --button-secondary-fg-color:ButtonText; + --button-secondary-border-color:ButtonText; + --button-secondary-active-bg-color:HighlightText; + --button-secondary-active-fg-color:SelectedItem; + --button-secondary-active-border-color:ButtonText; + --button-secondary-hover-bg-color:HighlightText; + --button-secondary-hover-fg-color:SelectedItem; + --button-secondary-hover-border-color:SelectedItem; + --button-secondary-disabled-fg-color:GrayText; + --button-secondary-disabled-border-color:GrayText; -.xfaRight { - display: flex; - flex-direction: row-reverse; - align-items: center; -} + --button-primary-bg-color:ButtonText; + --button-primary-fg-color:HighlightText; + --button-primary-border-color:ButtonText; + --button-primary-active-bg-color:SelectedItem; + --button-primary-active-fg-color:HighlightText; + --button-primary-active-border-color:ButtonText; + --button-primary-hover-bg-color:SelectedItem; + --button-primary-hover-fg-color:HighlightText; + --button-primary-hover-border-color:SelectedItem; + --button-primary-disabled-bg-color:GrayText; + --button-primary-disabled-fg-color:ButtonFace; + --button-primary-disabled-border-color:GrayText; + --button-disabled-opacity:1; -.xfaLeft > .xfaCaption, .xfaLeft > .xfaCaptionForCheckButton, .xfaRight > .xfaCaption, .xfaRight > .xfaCaptionForCheckButton { - max-height: 100%; + --input-text-bg-color:HighlightText; + --input-text-fg-color:FieldText; } + } -.xfaTop { - display: flex; - flex-direction: column; - align-items: flex-start; -} +.dialog .mainContainer *:focus-visible{ + --csstools-light-dark-toggle--28:var(--csstools-color-scheme--dark) #0060df; + outline:2px solid #0df; + outline:2px solid var(--csstools-light-dark-toggle--28, #0df); + outline:2px solid light-dark(#0060df, #0df); + outline:var(--focus-ring-outline); + outline-offset:2px; + } -.xfaBottom { - display: flex; - flex-direction: column-reverse; - align-items: flex-start; -} +.dialog .mainContainer .title{ + display:flex; + width:auto; + flex-direction:column; + justify-content:flex-end; + align-items:flex-start; + gap:12px; + } -.xfaTop > .xfaCaption, .xfaTop > .xfaCaptionForCheckButton, .xfaBottom > .xfaCaption, .xfaBottom > .xfaCaptionForCheckButton { - width: 100%; -} +.dialog .mainContainer .title > span{ + font-size:13px; + font-style:normal; + font-weight:590; + line-height:150%; + } -.xfaBorder { - background-color: transparent; - position: absolute; - pointer-events: none; -} +.dialog .mainContainer .dialogSeparator{ + width:100%; + height:0; + margin-top:4px; + margin-bottom:4px; + border-top:1px solid var(--separator-color); + border-bottom:none; + } -.xfaWrapped { - width: 100%; - height: 100%; -} +.dialog .mainContainer .dialogButtonsGroup{ + display:flex; + gap:12px; + align-self:flex-end; + } -.xfaTextfield:focus, .xfaSelect:focus { - background-image: none; - background-color: transparent; - outline: auto; - outline: var(--xfa-focus-outline); - outline-offset: -1px; -} +.dialog .mainContainer .radio{ + display:flex; + flex-direction:column; + align-items:flex-start; + gap:4px; + } -.xfaCheckbox:focus, .xfaRadio:focus { - outline: auto; - outline: var(--xfa-focus-outline); -} +.dialog .mainContainer .radio > .radioButton{ + display:flex; + gap:8px; + align-self:stretch; + align-items:center; + } -.xfaTextfield, -.xfaSelect { - height: 100%; - width: 100%; - flex: 1 1 auto; - border: none; - resize: none; - background-image: url("data:image/svg+xml;charset=UTF-8,"); - background-image: var(--xfa-unfocused-field-background); -} +.dialog .mainContainer .radio > .radioButton input{ + -webkit-appearance:none; + -moz-appearance:none; + appearance:none; + box-sizing:border-box; + width:16px; + height:16px; + border-radius:50%; + background-color:var(--radio-bg-color); + border:1px solid var(--radio-border-color); + } -.xfaSelect { - padding-left: 2px; - padding-right: 2px; -} +.dialog .mainContainer .radio > .radioButton input:hover{ + filter:var(--hover-filter); + } -.xfaTop > .xfaTextfield, .xfaTop > .xfaSelect, .xfaBottom > .xfaTextfield, .xfaBottom > .xfaSelect { - flex: 0 1 auto; -} +.dialog .mainContainer .radio > .radioButton input:checked{ + background-color:var(--radio-checked-bg-color); + border:4px solid var(--radio-checked-border-color); + } -.xfaButton { - cursor: pointer; - width: 100%; - height: 100%; - border: none; - text-align: center; -} +.dialog .mainContainer .radio > .radioLabel{ + display:flex; + padding-left:24px; + align-items:flex-start; + gap:10px; + align-self:stretch; + } -.xfaLink { - width: 100%; - height: 100%; - position: absolute; - top: 0; - left: 0; -} +.dialog .mainContainer .radio > .radioLabel > span{ + flex:1 0 0; + font-size:11px; + color:var(--text-secondary-color); + } -.xfaCheckbox, -.xfaRadio { - width: 100%; - height: 100%; - flex: 0 0 auto; - border: none; -} +.dialog .mainContainer button:not(.toggle-button):not(.closeButton):not(.clearInputButton){ + border-radius:4px; + border:1px solid; + font:menu; + font-weight:590; + font-size:13px; + padding:4px 16px; + width:auto; + height:32px; + } -.xfaRich { - white-space: pre-wrap; - width: 100%; - height: 100%; -} +.dialog .mainContainer button:not(.toggle-button):not(.closeButton):not(.clearInputButton):hover{ + cursor:pointer; + filter:var(--hover-filter); + } -.xfaImage { - -o-object-position: left top; - object-position: left top; - -o-object-fit: contain; - object-fit: contain; - width: 100%; - height: 100%; -} +.dialog .mainContainer button:not(.toggle-button):not(.closeButton):not(.clearInputButton) > span{ + color:inherit; + font:inherit; + } -.xfaLrTb, -.xfaRlTb, -.xfaTb { - display: flex; - flex-direction: column; - align-items: stretch; -} +.dialog .mainContainer button.secondaryButton:not(.toggle-button):not(.closeButton):not(.clearInputButton){ + color:var(--button-secondary-fg-color); + background-color:var(--button-secondary-bg-color); + border-color:var(--button-secondary-border-color); + } -.xfaLr { - display: flex; - flex-direction: row; - align-items: stretch; -} +.dialog .mainContainer button.secondaryButton:not(.toggle-button):not(.closeButton):not(.clearInputButton):hover{ + color:var(--button-secondary-hover-fg-color); + background-color:var(--button-secondary-hover-bg-color); + border-color:var(--button-secondary-hover-border-color); + } -.xfaRl { - display: flex; - flex-direction: row-reverse; - align-items: stretch; -} +.dialog .mainContainer button.secondaryButton:not(.toggle-button):not(.closeButton):not(.clearInputButton):active{ + color:var(--button-secondary-active-fg-color); + background-color:var(--button-secondary-active-bg-color); + border-color:var(--button-secondary-active-border-color); + } -.xfaTb > div { - justify-content: left; -} +.dialog .mainContainer button.secondaryButton:not(.toggle-button):not(.closeButton):not(.clearInputButton):disabled{ + background-color:var(--button-secondary-disabled-bg-color); + border-color:var(--button-secondary-disabled-border-color); + color:var(--button-secondary-disabled-fg-color); + opacity:var(--button-disabled-opacity); + } -.xfaPosition { - position: relative; -} +.dialog .mainContainer button.primaryButton:not(.toggle-button):not(.closeButton):not(.clearInputButton){ + color:var(--button-primary-fg-color); + background-color:var(--button-primary-bg-color); + border-color:var(--button-primary-border-color); + opacity:1; + } -.xfaArea { - position: relative; -} +.dialog .mainContainer button.primaryButton:not(.toggle-button):not(.closeButton):not(.clearInputButton):hover{ + color:var(--button-primary-hover-fg-color); + background-color:var(--button-primary-hover-bg-color); + border-color:var(--button-primary-hover-border-color); + } -.xfaValignMiddle { - display: flex; - align-items: center; +.dialog .mainContainer button.primaryButton:not(.toggle-button):not(.closeButton):not(.clearInputButton):active{ + color:var(--button-primary-active-fg-color); + background-color:var(--button-primary-active-bg-color); + border-color:var(--button-primary-active-border-color); + } + +.dialog .mainContainer button.primaryButton:not(.toggle-button):not(.closeButton):not(.clearInputButton):disabled{ + background-color:var(--button-primary-disabled-bg-color); + border-color:var(--button-primary-disabled-border-color); + color:var(--button-primary-disabled-fg-color); + opacity:var(--button-disabled-opacity); + } + +.dialog .mainContainer button:not(.toggle-button):not(.closeButton):not(.clearInputButton):disabled{ + pointer-events:none; + } + +.dialog .mainContainer a{ + color:var(--link-fg-color); + } + +.dialog .mainContainer a:hover{ + color:var(--link-hover-fg-color); + } + +.dialog .mainContainer textarea{ + font:inherit; + padding:8px; + resize:none; + margin:0; + box-sizing:border-box; + border-radius:4px; + border:1px solid var(--textarea-border-color); + background:var(--textarea-bg-color); + color:var(--textarea-fg-color); + } + +.dialog .mainContainer textarea:focus{ + outline-offset:0; + border-color:transparent; + } + +.dialog .mainContainer textarea:disabled{ + pointer-events:none; + opacity:0.4; + } + +.dialog .mainContainer input[type="text"]{ + background-color:var(--input-text-bg-color); + color:var(--input-text-fg-color); + } + +.dialog .mainContainer .messageBar{ + --csstools-light-dark-toggle--20:var(--csstools-color-scheme--dark) #ffebcd; + --message-bar-bg-color:var(--csstools-light-dark-toggle--20, #5a3100); + --csstools-light-dark-toggle--21:var(--csstools-color-scheme--dark) #15141a; + --message-bar-fg-color:var(--csstools-light-dark-toggle--21, #fbfbfe); + --csstools-light-dark-toggle--41:var(--csstools-color-scheme--dark) rgba(0, 0, 0, 0.08); + --message-bar-border-color:var(--csstools-light-dark-toggle--41, rgba(255, 255, 255, 0.08)); + --csstools-light-dark-toggle--22:var(--csstools-color-scheme--dark) #cd411e; + --message-bar-icon-color:var(--csstools-light-dark-toggle--22, #e49c49); + + align-self:stretch; + } + +@supports (color: light-dark(red, red)) { +.dialog .mainContainer .messageBar{ + --message-bar-bg-color:light-dark(#ffebcd, #5a3100); + --message-bar-fg-color:light-dark(#15141a, #fbfbfe); + --message-bar-border-color:light-dark( + rgba(0, 0, 0, 0.08), + rgba(255, 255, 255, 0.08) + ); + --message-bar-icon-color:light-dark(#cd411e, #e49c49); + } } -.xfaTable { - display: flex; - flex-direction: column; - align-items: stretch; +.dialog .mainContainer .messageBar * { + --csstools-light-dark-toggle--41:var(--csstools-color-scheme--dark) rgba(0, 0, 0, 0.08); + --message-bar-border-color:var(--csstools-light-dark-toggle--41, rgba(255, 255, 255, 0.08)); } -.xfaTable .xfaRow { - display: flex; - flex-direction: row; - align-items: stretch; +.dialog .mainContainer .messageBar * { + --csstools-light-dark-toggle--20:var(--csstools-color-scheme--dark) #ffebcd; + --message-bar-bg-color:var(--csstools-light-dark-toggle--20, #5a3100); } -.xfaTable .xfaRlRow { - display: flex; - flex-direction: row-reverse; - align-items: stretch; - flex: 1; +.dialog .mainContainer .messageBar * { + --csstools-light-dark-toggle--21:var(--csstools-color-scheme--dark) #15141a; + --message-bar-fg-color:var(--csstools-light-dark-toggle--21, #fbfbfe); } -.xfaTable .xfaRlRow > div { - flex: 1; +.dialog .mainContainer .messageBar * { + --csstools-light-dark-toggle--22:var(--csstools-color-scheme--dark) #cd411e; + --message-bar-icon-color:var(--csstools-light-dark-toggle--22, #e49c49); } -.xfaNonInteractive input, .xfaNonInteractive textarea, .xfaDisabled input, .xfaDisabled textarea, .xfaReadOnly input, .xfaReadOnly textarea { - background: transparent none repeat 0 0 / auto auto padding-box border-box scroll; - background: initial; +@media screen and (forced-colors: active){ + +.dialog .mainContainer .messageBar{ + --message-bar-bg-color:HighlightText; + --message-bar-fg-color:CanvasText; + --message-bar-border-color:CanvasText; + --message-bar-icon-color:CanvasText; + } + } + +.dialog .mainContainer .messageBar > div::before, + .dialog .mainContainer .messageBar > div > div{ + margin-top:4px; + margin-bottom:4px; + } + +.dialog .mainContainer .messageBar > div > div{ + display:flex; + flex-direction:column; + align-items:flex-start; + gap:8px; + flex:1 0 0; + } + +.dialog .mainContainer .messageBar > div > div .title{ + font-size:13px; + font-weight:590; + } + +.dialog .mainContainer .messageBar > div > div .description{ + font-size:13px; + } + +.dialog .mainContainer .toggler{ + display:flex; + align-items:center; + gap:8px; + align-self:stretch; + } + +.dialog .mainContainer .toggler > .togglerLabel{ + -webkit-user-select:none; + -moz-user-select:none; + user-select:none; + } + +.textLayer{ + position:absolute; + text-align:left; + text-align:initial; + top:0; + right:0; + bottom:0; + left:0; + overflow:clip; + opacity:1; + line-height:1; + -webkit-text-size-adjust:none; + -moz-text-size-adjust:none; + text-size-adjust:none; + forced-color-adjust:none; + transform-origin:0 0; + caret-color:CanvasText; + z-index:0; } -@media print { - .xfaTextfield, - .xfaSelect { - background: transparent; +.textLayer.highlighting{ + touch-action:none; } - .xfaSelect { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - text-indent: 1px; - text-overflow: ""; +.textLayer span, .textLayer br{ + color:transparent; + position:absolute; + white-space:pre; + cursor:text; + transform-origin:0% 0%; } -} -/* @obsidian TODO: bring this in when we enable annotation editing */ -/* @import url(annotation_editor_layer_builder.css); */ +.textLayer > :not(.markedContent), + .textLayer .markedContent span:not(.markedContent){ + z-index:1; + } -:root { - --viewer-container-height: 0; - --pdfViewer-padding-bottom: 0; - --page-margin: 1px auto -8px; - --page-border: 9px solid transparent; - --spreadHorizontalWrapped-margin-LR: -3.5px; - --loading-icon-delay: 400ms; -} +.textLayer span.markedContent{ + top:0; + height:0; + } -@media screen and (forced-colors: active) { - :root { - --pdfViewer-padding-bottom: 9px; - --page-margin: 8px auto -1px; - --page-border: 1px solid CanvasText; - --spreadHorizontalWrapped-margin-LR: 3.5px; +.textLayer span[role="img"]{ + -webkit-user-select:none; + -moz-user-select:none; + user-select:none; + cursor:default; } -} -[data-main-rotation="90"] { - transform: rotate(90deg) translateY(-100%); -} -[data-main-rotation="180"] { - transform: rotate(180deg) translate(-100%, -100%); -} -[data-main-rotation="270"] { - transform: rotate(270deg) translateX(-100%); -} +.textLayer .highlight{ + --highlight-bg-color:rgba(180, 0, 170, 0.25); + --highlight-selected-bg-color:rgba(0, 100, 0, 0.25); + --highlight-backdrop-filter:none; + --highlight-selected-backdrop-filter:none; -/* @obsidian this was changed from an id to a class */ -.hiddenCopyElement { - position: absolute; - top: 0; - left: 0; - width: 0; - height: 0; - display: none; -} + margin:-1px; + padding:1px; + background-color:rgba(180, 0, 170, 0.25); + background-color:var(--highlight-bg-color); + -webkit-backdrop-filter:none; + backdrop-filter:none; + -webkit-backdrop-filter:var(--highlight-backdrop-filter); + backdrop-filter:var(--highlight-backdrop-filter); + border-radius:4px; + } -.pdf-viewer { - /* Define this variable here and not in :root to avoid to reflow all the UI - when scaling (see #15929). */ - --scale-factor: 1; +@media screen and (forced-colors: active){ - padding-bottom: 0; +.textLayer .highlight{ + --highlight-bg-color:transparent; + --highlight-selected-bg-color:transparent; + --highlight-backdrop-filter:var(--hcm-highlight-filter); + --highlight-selected-backdrop-filter:var( + --hcm-highlight-selected-filter + ); + } + } - padding-bottom: var(--pdfViewer-padding-bottom); -} +.textLayer .highlight.appended{ + position:static; + position:initial; + } -.pdf-viewer .canvasWrapper { - overflow: hidden; - /* width: 100%; */ - /* height: 100%; */ - z-index: 1; -} +.textLayer .highlight.begin{ + border-radius:4px 0 0 4px; + } -.pdf-viewer .page { - direction: ltr; - width: 816px; - height: 1056px; - /* margin: var(--page-margin); */ - position: relative; - overflow: visible; - /* border: var(--page-border); */ - background-clip: content-box; - /* background-color: rgba(255, 255, 255, 1); */ -} +.textLayer .highlight.end{ + border-radius:0 4px 4px 0; + } -.pdf-viewer .dummyPage { - position: relative; - width: 0; - height: 0; - height: var(--viewer-container-height); -} +.textLayer .highlight.middle{ + border-radius:0; + } -.pdf-viewer.removePageBorders .page { - margin: 0 auto 10px; - border: none; -} +.textLayer .highlight.selected{ + background-color:var(--highlight-selected-bg-color); + -webkit-backdrop-filter:var(--highlight-selected-backdrop-filter); + backdrop-filter:var(--highlight-selected-backdrop-filter); + } -.pdf-viewer.scrollHorizontal, .pdf-viewer.scrollWrapped, .spread { - margin-left: 3.5px; - margin-right: 3.5px; - text-align: center; -} +.textLayer ::-moz-selection{ + background:rgba(0, 0, 255, 0.25); + } -.pdf-viewer.scrollHorizontal, -.spread { - white-space: nowrap; -} +.textLayer ::selection{ + background:rgba(0, 0, 255, 0.25); + } -.pdf-viewer.removePageBorders, -.pdf-viewer.scrollHorizontal .spread, -.pdf-viewer.scrollWrapped .spread { - margin-left: 0; - margin-right: 0; -} +.textLayer br::-moz-selection{ + background:transparent; + } -.spread .page, .spread .dummyPage, .pdf-viewer.scrollHorizontal .page, .pdf-viewer.scrollHorizontal .spread, .pdf-viewer.scrollWrapped .page, .pdf-viewer.scrollWrapped .spread { - display: inline-block; - vertical-align: middle; -} +.textLayer br::selection{ + background:transparent; + } -/* @obsidian */ -/* .spread .page, -.pdf-viewer:is(.scrollHorizontal, .scrollWrapped) .page { - margin-inline: var(--spreadHorizontalWrapped-margin-LR); -} */ - - @obsidian - .pdf-viewer.removePageBorders .spread .page, -.pdf-viewer.removePageBorders:is(.scrollHorizontal, .scrollWrapped) .page { - margin-left: 5px; - margin-right: 5px; -} - -.pdf-viewer .page canvas { - margin: 0; - display: block; -} +.textLayer .endOfContent{ + display:block; + position:absolute; + top:100%; + right:0; + bottom:0; + left:0; + z-index:0; + cursor:default; + -webkit-user-select:none; + -moz-user-select:none; + user-select:none; + } -.pdf-viewer .page canvas .structTree { - contain: strict; -} +.textLayer.selecting .endOfContent{ + top:0; + } -.pdf-viewer .page canvas[hidden] { - display: none; -} +.annotationLayer{ + --csstools-color-scheme--dark:; + color-scheme:only light; -.pdf-viewer .page canvas[zooming] { - width: 100%; - height: 100%; -} + --annotation-unfocused-field-background:url("data:image/svg+xml;charset=UTF-8,"); + --input-focus-border-color:Highlight; + --input-focus-outline:1px solid Canvas; + --input-unfocused-border-color:transparent; + --input-disabled-border-color:transparent; + --input-hover-border-color:black; + --link-outline:none; -.pdf-viewer .page.loadingIcon::after { - position: absolute; - top: 0; - left: 0; - content: ""; - width: 100%; - height: 100%; - /* @obsidian */ - /* background: url("images/loading-icon.gif") center no-repeat; */ - display: none; - /* Using a delay with background-image doesn't work, - consequently we use the display. */ - transition-property: display; - transition-delay: 400ms; - transition-delay: var(--loading-icon-delay); - z-index: 5; - contain: strict; + position:absolute; + top:0; + left:0; + pointer-events:none; + transform-origin:0 0; } -.pdf-viewer .page.loading::after { - display: block; -} +@media screen and (forced-colors: active){ -.pdf-viewer .page:not(.loading)::after { - transition-property: none; - display: none; +.annotationLayer{ + --input-focus-border-color:CanvasText; + --input-unfocused-border-color:ActiveText; + --input-disabled-border-color:GrayText; + --input-hover-border-color:Highlight; + --link-outline:1.5px solid LinkText; } -.pdfPresentationMode .pdf-viewer { - padding-bottom: 0; -} + .annotationLayer .textWidgetAnnotation input:required{ + outline:1.5px solid selectedItem; + } -.pdfPresentationMode .spread { - margin: 0; -} + .annotationLayer .textWidgetAnnotation textarea:required{ + outline:1.5px solid selectedItem; + } -.pdfPresentationMode .pdf-viewer .page { - margin: 0 auto; - border: 2px solid transparent; -} + .annotationLayer .buttonWidgetAnnotation.checkBox input:required{ + outline:1.5px solid selectedItem; + } -/* Obsidian theme variables */ -/* ------------------------ */ -body { - /* Animations */ - --anim-duration-none: 0; - --anim-duration-superfast: 70ms; - --anim-duration-fast: 140ms; - --anim-duration-moderate: 300ms; - --anim-duration-slow: 560ms; - --anim-motion-smooth: cubic-bezier(0.45, 0.05, 0.55, 0.95); - --anim-motion-delay: cubic-bezier(0.65, 0.05, 0.36, 1); - --anim-motion-jumpy: cubic-bezier(0.68, -0.55, 0.27, 1.55); - --anim-motion-swing: cubic-bezier(0, 0.55, 0.45, 1); - /* Blockquotes */ - --blockquote-border-thickness: 2px; - --blockquote-border-color: var(--interactive-accent); - --blockquote-font-style: normal; - --blockquote-color: inherit; - --blockquote-background-color: transparent; - /* Bold */ - --bold-weight: var(--font-semibold); - --bold-color: inherit; - /* Borders */ - --border-width: 1px; - /* Buttons */ - --button-radius: var(--input-radius); - /* Callouts */ - --callout-border-width: 0px; - --callout-border-opacity: 0.25; - --callout-padding: var(--size-4-3) var(--size-4-3) var(--size-4-3) var(--size-4-6); - --callout-radius: var(--radius-s); - --callout-blend-mode: var(--highlight-mix-blend-mode); - --callout-title-color: inherit; - --callout-title-padding: 0; - --callout-title-size: inherit; - --callout-content-padding: 0; - --callout-content-background: transparent; - --callout-bug: var(--color-red-rgb); - --callout-default: var(--color-blue-rgb); - --callout-error: var(--color-red-rgb); - --callout-example: var(--color-purple-rgb); - --callout-fail: var(--color-red-rgb); - --callout-important: var(--color-cyan-rgb); - --callout-info: var(--color-blue-rgb); - --callout-question: var(--color-orange-rgb); - --callout-success: var(--color-green-rgb); - --callout-summary: var(--color-cyan-rgb); + .annotationLayer .buttonWidgetAnnotation.radioButton input:required{ + outline:1.5px solid selectedItem; + } + + .annotationLayer .choiceWidgetAnnotation select:required{ + outline:1.5px solid selectedItem; + } + + .annotationLayer .linkAnnotation{ + outline:var(--link-outline); + } + + .annotationLayer .linkAnnotation:hover{ + -webkit-backdrop-filter:var(--hcm-highlight-filter); + backdrop-filter:var(--hcm-highlight-filter); + } + + .annotationLayer .linkAnnotation > a:hover{ + opacity:0 !important; + background:none !important; + box-shadow:none; + } + + .annotationLayer .popupAnnotation .popup{ + outline:calc(1.5px * var(--total-scale-factor)) solid CanvasText !important; + background-color:ButtonFace !important; + color:ButtonText !important; + } + + .annotationLayer .highlightArea:hover::after{ + position:absolute; + top:0; + left:0; + width:100%; + height:100%; + -webkit-backdrop-filter:var(--hcm-highlight-filter); + backdrop-filter:var(--hcm-highlight-filter); + content:""; + pointer-events:none; + } + + .annotationLayer .popupAnnotation.focused .popup{ + outline:calc(3px * var(--total-scale-factor)) solid Highlight !important; + } + } + +.annotationLayer[data-main-rotation="90"] .norotate{ + transform:rotate(270deg) translateX(-100%); + } + +.annotationLayer[data-main-rotation="180"] .norotate{ + transform:rotate(180deg) translate(-100%, -100%); + } + +.annotationLayer[data-main-rotation="270"] .norotate{ + transform:rotate(90deg) translateY(-100%); + } + +.annotationLayer.disabled section, + .annotationLayer.disabled .popup{ + pointer-events:none; + } + +.annotationLayer .annotationContent{ + position:absolute; + width:100%; + height:100%; + pointer-events:none; + } + +.annotationLayer .annotationContent.freetext{ + background:transparent; + border:none; + top:0; + right:0; + bottom:0; + left:0; + overflow:visible; + white-space:nowrap; + font:10px sans-serif; + line-height:1.35; + } + +.annotationLayer section{ + position:absolute; + text-align:left; + text-align:initial; + pointer-events:auto; + box-sizing:border-box; + transform-origin:0 0; + -webkit-user-select:none; + -moz-user-select:none; + user-select:none; + } + +.annotationLayer section:has(div.annotationContent) canvas.annotationContent{ + display:none; + } + +.textLayer.selecting ~ .annotationLayer section{ + pointer-events:none; + } + +.annotationLayer .linkAnnotation:not(.does-not-exist) > a, .annotationLayer .buttonWidgetAnnotation.pushButton > a{ + position:absolute; + font-size:1em; + top:0; + left:0; + width:100%; + height:100%; + } + +.annotationLayer .linkAnnotation:not(.does-not-exist):not(.hasBorder) + > a:hover, .annotationLayer .buttonWidgetAnnotation.pushButton:not(.hasBorder) + > a:hover{ + opacity:0.2; + background-color:rgb(255, 255, 0); + box-shadow:0 2px 10px rgb(255, 255, 0); + } + +.annotationLayer .linkAnnotation.hasBorder:hover{ + background-color:rgba(255, 255, 0, 0.2); + } + +.annotationLayer .hasBorder{ + background-size:100% 100%; + } + +.annotationLayer .textAnnotation img{ + position:absolute; + cursor:pointer; + width:100%; + height:100%; + top:0; + left:0; + } + +.annotationLayer .textWidgetAnnotation input, .annotationLayer .textWidgetAnnotation textarea, .annotationLayer .choiceWidgetAnnotation select, .annotationLayer .buttonWidgetAnnotation.checkBox input, .annotationLayer .buttonWidgetAnnotation.radioButton input{ + background-image:var(--annotation-unfocused-field-background); + border:2px solid var(--input-unfocused-border-color); + box-sizing:border-box; + font:calc(9px * var(--total-scale-factor)) sans-serif; + height:100%; + margin:0; + vertical-align:top; + width:100%; + } + +.annotationLayer .textWidgetAnnotation input:required{ + outline:1.5px solid red; + } + +.annotationLayer .textWidgetAnnotation textarea:required{ + outline:1.5px solid red; + } + +.annotationLayer .buttonWidgetAnnotation.checkBox input:required{ + outline:1.5px solid red; + } + +.annotationLayer .buttonWidgetAnnotation.radioButton input:required{ + outline:1.5px solid red; + } + +.annotationLayer .choiceWidgetAnnotation select:required{ + outline:1.5px solid red; + } + +.annotationLayer .choiceWidgetAnnotation select option{ + padding:0; + } + +.annotationLayer .buttonWidgetAnnotation.radioButton input{ + border-radius:50%; + } + +.annotationLayer .textWidgetAnnotation textarea{ + resize:none; + } + +.annotationLayer .textWidgetAnnotation input[disabled], .annotationLayer .textWidgetAnnotation textarea[disabled], .annotationLayer .choiceWidgetAnnotation select[disabled], .annotationLayer .buttonWidgetAnnotation.checkBox input[disabled], .annotationLayer .buttonWidgetAnnotation.radioButton input[disabled]{ + background:none; + border:2px solid var(--input-disabled-border-color); + cursor:not-allowed; + } + +.annotationLayer .textWidgetAnnotation input:hover, .annotationLayer .textWidgetAnnotation textarea:hover, .annotationLayer .choiceWidgetAnnotation select:hover, .annotationLayer .buttonWidgetAnnotation.checkBox input:hover, .annotationLayer .buttonWidgetAnnotation.radioButton input:hover{ + border:2px solid var(--input-hover-border-color); + } + +.annotationLayer .textWidgetAnnotation input:hover, .annotationLayer .textWidgetAnnotation textarea:hover, .annotationLayer .choiceWidgetAnnotation select:hover, .annotationLayer .buttonWidgetAnnotation.checkBox input:hover{ + border-radius:2px; + } + +.annotationLayer .textWidgetAnnotation input:focus, .annotationLayer .textWidgetAnnotation textarea:focus, .annotationLayer .choiceWidgetAnnotation select:focus{ + background:none; + border:2px solid var(--input-focus-border-color); + border-radius:2px; + outline:var(--input-focus-outline); + } + +.annotationLayer .buttonWidgetAnnotation.checkBox :focus, .annotationLayer .buttonWidgetAnnotation.radioButton :focus{ + background-image:none; + background-color:transparent; + } + +.annotationLayer .buttonWidgetAnnotation.checkBox :focus{ + border:2px solid var(--input-focus-border-color); + border-radius:2px; + outline:var(--input-focus-outline); + } + +.annotationLayer .buttonWidgetAnnotation.radioButton :focus{ + border:2px solid var(--input-focus-border-color); + outline:var(--input-focus-outline); + } + +.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::before, + .annotationLayer .buttonWidgetAnnotation.checkBox input:checked::after, + .annotationLayer .buttonWidgetAnnotation.radioButton input:checked::before{ + background-color:CanvasText; + content:""; + display:block; + position:absolute; + } + +.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::before, + .annotationLayer .buttonWidgetAnnotation.checkBox input:checked::after{ + height:80%; + left:45%; + width:1px; + } + +.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::before{ + transform:rotate(45deg); + } + +.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::after{ + transform:rotate(-45deg); + } + +.annotationLayer .buttonWidgetAnnotation.radioButton input:checked::before{ + border-radius:50%; + height:50%; + left:25%; + top:25%; + width:50%; + } + +.annotationLayer .textWidgetAnnotation input.comb{ + font-family:monospace; + padding-left:2px; + padding-right:0; + } + +.annotationLayer .textWidgetAnnotation input.comb:focus{ + width:103%; + } + +.annotationLayer .buttonWidgetAnnotation.checkBox input, .annotationLayer .buttonWidgetAnnotation.radioButton input{ + -webkit-appearance:none; + -moz-appearance:none; + appearance:none; + } + +.annotationLayer .fileAttachmentAnnotation .popupTriggerArea{ + height:100%; + width:100%; + } + +/* @obsidian */ + +.annotationLayer .richText > *{ + white-space:pre-wrap; + /* @obsidian */ + } + +.annotationLayer .popupTriggerArea{ + cursor:pointer; + } + +.annotationLayer section svg{ + position:absolute; + width:100%; + height:100%; + top:0; + left:0; + } + +.annotationLayer .annotationTextContent{ + position:absolute; + width:100%; + height:100%; + opacity:0; + color:transparent; + -webkit-user-select:none; + -moz-user-select:none; + user-select:none; + pointer-events:none; + } + +.annotationLayer .annotationTextContent span{ + width:100%; + display:inline-block; + } + +.annotationLayer svg.quadrilateralsContainer{ + contain:strict; + width:0; + height:0; + position:absolute; + top:0; + left:0; + z-index:-1; + } + +:root{ + --xfa-unfocused-field-background:url("data:image/svg+xml;charset=UTF-8,"); + --xfa-focus-outline:auto; +} + +@media screen and (forced-colors: active){ + :root{ + --xfa-focus-outline:2px solid CanvasText; + } + .xfaLayer *:required{ + outline:1.5px solid selectedItem; + } +} + +.xfaLayer{ + --csstools-color-scheme--dark:; + color-scheme:only light; + + background-color:transparent; +} + +.xfaLayer .highlight{ + margin:-1px; + padding:1px; + background-color:rgb(239, 203, 237); + border-radius:4px; +} + +.xfaLayer .highlight.appended{ + position:static; + position:initial; +} + +.xfaLayer .highlight.begin{ + border-radius:4px 0 0 4px; +} + +.xfaLayer .highlight.end{ + border-radius:0 4px 4px 0; +} + +.xfaLayer .highlight.middle{ + border-radius:0; +} + +.xfaLayer .highlight.selected{ + background-color:rgb(203, 223, 203); +} + +.xfaPage{ + overflow:hidden; + position:relative; +} + +.xfaContentarea{ + position:absolute; +} + +.xfaPrintOnly{ + display:none; +} + +.xfaLayer{ + position:absolute; + text-align:left; + text-align:initial; + top:0; + left:0; + transform-origin:0 0; + line-height:1.2; +} + +.xfaLayer *{ + color:inherit; + font:inherit; + font-style:inherit; + font-weight:inherit; + font-feature-settings:inherit; + font-kerning:inherit; + letter-spacing:-0.01px; + text-align:inherit; + text-decoration:inherit; + box-sizing:border-box; + background-color:transparent; + padding:0; + margin:0; + pointer-events:auto; + line-height:inherit; +} + +.xfaLayer *:required{ + outline:1.5px solid red; +} + +.xfaLayer div, +.xfaLayer svg, +.xfaLayer svg *{ + pointer-events:none; +} + +.xfaLayer a{ + color:blue; +} + +.xfaRich li{ + margin-left:3em; +} + +.xfaFont{ + color:black; + font-weight:normal; + font-feature-settings:"kern" off; + font-kerning:none; + font-size:10px; + font-style:normal; + letter-spacing:0; + -webkit-text-decoration:none; + text-decoration:none; + vertical-align:0; +} + +.xfaCaption{ + overflow:hidden; + flex:0 0 auto; +} + +.xfaCaptionForCheckButton{ + overflow:hidden; + flex:1 1 auto; +} + +.xfaLabel{ + height:100%; + width:100%; +} + +.xfaLeft{ + display:flex; + flex-direction:row; + align-items:center; +} + +.xfaRight{ + display:flex; + flex-direction:row-reverse; + align-items:center; +} + +.xfaLeft > .xfaCaption, .xfaLeft > .xfaCaptionForCheckButton, .xfaRight > .xfaCaption, .xfaRight > .xfaCaptionForCheckButton{ + max-height:100%; +} + +.xfaTop{ + display:flex; + flex-direction:column; + align-items:flex-start; +} + +.xfaBottom{ + display:flex; + flex-direction:column-reverse; + align-items:flex-start; +} + +.xfaTop > .xfaCaption, .xfaTop > .xfaCaptionForCheckButton, .xfaBottom > .xfaCaption, .xfaBottom > .xfaCaptionForCheckButton{ + width:100%; +} + +.xfaBorder{ + background-color:transparent; + position:absolute; + pointer-events:none; +} + +.xfaWrapped{ + width:100%; + height:100%; +} + +.xfaTextfield:focus, .xfaSelect:focus{ + background-image:none; + background-color:transparent; + outline:auto; + outline:var(--xfa-focus-outline); + outline-offset:-1px; +} + +.xfaCheckbox:focus, .xfaRadio:focus{ + outline:auto; + outline:var(--xfa-focus-outline); +} + +.xfaTextfield, +.xfaSelect{ + height:100%; + width:100%; + flex:1 1 auto; + border:none; + resize:none; + background-image:url("data:image/svg+xml;charset=UTF-8,"); + background-image:var(--xfa-unfocused-field-background); +} + +.xfaSelect{ + padding-left:2px; + padding-right:2px; +} + +.xfaTop > .xfaTextfield, .xfaTop > .xfaSelect, .xfaBottom > .xfaTextfield, .xfaBottom > .xfaSelect{ + flex:0 1 auto; +} + +.xfaButton{ + cursor:pointer; + width:100%; + height:100%; + border:none; + text-align:center; +} + +.xfaLink{ + width:100%; + height:100%; + position:absolute; + top:0; + left:0; +} + +.xfaCheckbox, +.xfaRadio{ + width:100%; + height:100%; + flex:0 0 auto; + border:none; +} + +.xfaRich{ + white-space:pre-wrap; + width:100%; + height:100%; +} + +.xfaImage{ + -o-object-position:left top; + object-position:left top; + -o-object-fit:contain; + object-fit:contain; + width:100%; + height:100%; +} + +.xfaLrTb, +.xfaRlTb, +.xfaTb{ + display:flex; + flex-direction:column; + align-items:stretch; +} + +.xfaLr{ + display:flex; + flex-direction:row; + align-items:stretch; +} + +.xfaRl{ + display:flex; + flex-direction:row-reverse; + align-items:stretch; +} + +.xfaTb > div{ + justify-content:left; +} + +.xfaPosition{ + position:relative; +} + +.xfaArea{ + position:relative; +} + +.xfaValignMiddle{ + display:flex; + align-items:center; +} + +.xfaTable{ + display:flex; + flex-direction:column; + align-items:stretch; +} + +.xfaTable .xfaRow{ + display:flex; + flex-direction:row; + align-items:stretch; +} + +.xfaTable .xfaRlRow{ + display:flex; + flex-direction:row-reverse; + align-items:stretch; + flex:1; +} + +.xfaTable .xfaRlRow > div{ + flex:1; +} + +.xfaNonInteractive input, .xfaNonInteractive textarea, .xfaDisabled input, .xfaDisabled textarea, .xfaReadOnly input, .xfaReadOnly textarea{ + background:transparent none repeat 0 0 / auto auto padding-box border-box scroll; + background:initial; +} + +@media print{ + .xfaTextfield, + .xfaSelect{ + background:transparent; + } + + .xfaSelect{ + -webkit-appearance:none; + -moz-appearance:none; + appearance:none; + text-indent:1px; + text-overflow:""; + } +} +/* @obsidian TODO: bring this in when we enable annotation editing */ + +:root{ + --csstools-color-scheme--dark:; + color-scheme:light dark; + + --viewer-container-height:0; + --pdfViewer-padding-bottom:0; + --page-margin:1px auto -8px; + --page-border:9px solid transparent; + --spreadHorizontalWrapped-margin-LR:-3.5px; + --loading-icon-delay:400ms; + --csstools-light-dark-toggle--23:var(--csstools-color-scheme--dark) #0060df; + --focus-ring-color:var(--csstools-light-dark-toggle--23, #0df); + --focus-ring-outline:2px solid var(--focus-ring-color); +} + +@supports (color: light-dark(red, red)) { +:root{ + --focus-ring-color:light-dark(#0060df, #0df); +} +} + +:root * { + --csstools-light-dark-toggle--23:var(--csstools-color-scheme--dark) #0060df; + --focus-ring-color:var(--csstools-light-dark-toggle--23, #0df); +} + +@media (prefers-color-scheme: dark) { + +:root{ + --csstools-color-scheme--dark:initial; +} +} + +@media screen and (forced-colors: active){ + +:root{ + --pdfViewer-padding-bottom:9px; + --page-margin:8px auto -1px; + --page-border:1px solid CanvasText; + --spreadHorizontalWrapped-margin-LR:3.5px; + --focus-ring-color:CanvasText; +} + } + +[data-main-rotation="90"]{ + transform:rotate(90deg) translateY(-100%); +} +[data-main-rotation="180"]{ + transform:rotate(180deg) translate(-100%, -100%); +} +[data-main-rotation="270"]{ + transform:rotate(270deg) translateX(-100%); +} + +/* @obsidian this was changed from an id to a class to support multiple instances */ +.hiddenCopyElement, +.hiddenCanvasElement{ + position:absolute; + top:0; + left:0; + width:0; + height:0; + display:none; +} + +.pdfViewer{ + --scale-factor:1; + --page-bg-color:unset; + + padding-bottom:0; + + padding-bottom:var(--pdfViewer-padding-bottom); + + --hcm-highlight-filter:none; + --hcm-highlight-selected-filter:none; +} + +@media screen and (forced-colors: active){ + +.pdfViewer{ + --hcm-highlight-filter:invert(100%); +} + } + +.pdfViewer.copyAll{ + cursor:wait; + } + +.pdfViewer .canvasWrapper{ + overflow:hidden; + width:100%; + height:100%; + } + +.pdfViewer .canvasWrapper canvas{ + position:absolute; + top:0; + left:0; + margin:0; + display:block; + width:100%; + height:100%; + contain:content; + } + +.pdfViewer .canvasWrapper canvas .structTree{ + contain:strict; + } + +.pdfViewer .page{ + --user-unit:1; + --total-scale-factor:calc(var(--scale-factor) * var(--user-unit)); + --scale-round-x:1px; + --scale-round-y:1px; + + direction:ltr; + width:816px; + height:1056px; + margin:1px auto -8px; + margin:var(--page-margin); + position:relative; + overflow:visible; + border:9px solid transparent; + border:var(--page-border); + background-clip:content-box; + background-color:rgb(255, 255, 255); + background-color:var(--page-bg-color, rgb(255, 255, 255)); +} + +.pdfViewer .dummyPage{ + position:relative; + width:0; + height:0; + height:var(--viewer-container-height); +} + +.pdfViewer.noUserSelect{ + -webkit-user-select:none; + -moz-user-select:none; + user-select:none; +} + +.pdfViewer.removePageBorders .page{ + margin:0 auto 10px; + border:none; +} + +.pdfViewer.scrollHorizontal, .pdfViewer.scrollWrapped, .spread{ + margin-left:3.5px; + margin-right:3.5px; + text-align:center; +} + +.pdfViewer.scrollHorizontal, +.spread{ + white-space:nowrap; +} + +.pdfViewer.removePageBorders, +.pdfViewer.scrollHorizontal .spread, +.pdfViewer.scrollWrapped .spread{ + margin-left:0; + margin-right:0; +} + +.spread .page, .spread .dummyPage, .pdfViewer.scrollHorizontal .page, .pdfViewer.scrollHorizontal .spread, .pdfViewer.scrollWrapped .page, .pdfViewer.scrollWrapped .spread{ + display:inline-block; + vertical-align:middle; +} + +.spread .page, +.pdfViewer.scrollHorizontal .page, +.pdfViewer.scrollWrapped .page{ + margin-left:-3.5px; + margin-right:-3.5px; + margin-left:var(--spreadHorizontalWrapped-margin-LR); + margin-right:var(--spreadHorizontalWrapped-margin-LR); +} + +.pdfViewer.removePageBorders .spread .page, +.pdfViewer.removePageBorders.scrollHorizontal .page, +.pdfViewer.removePageBorders.scrollWrapped .page{ + margin-left:5px; + margin-right:5px; +} + +.pdfViewer .page.loadingIcon::after{ + position:absolute; + top:0; + left:0; + content:""; + width:100%; + height:100%; + display:none; + transition-property:display; + transition-delay:400ms; + transition-delay:var(--loading-icon-delay); + z-index:5; + contain:strict; +} + +.pdfViewer .page.loading::after{ + display:block; +} + +.pdfViewer .page:not(.loading)::after{ + transition-property:none; + display:none; +} + +.pdfPresentationMode .pdfViewer{ + padding-bottom:0; +} + +.pdfPresentationMode .spread{ + margin:0; +} + +.pdfPresentationMode .pdfViewer .page{ + margin:0 auto; + border:2px solid transparent; +} + +/* Obsidian theme variables */ +/* ------------------------ */ +/* Font weights applied to root so that varible weights can be overridden by themes */ +:root { + --h1-weight: 700; + --h2-weight: 600; + --h3-weight: 600; + --h4-weight: 600; + --h5-weight: 600; + --h6-weight: 600; +} +/* Variable font weights */ +@supports (font-variation-settings: normal) { + :root { + --h1-weight: 700; + --h2-weight: 680; + --h3-weight: 660; + --h4-weight: 640; + --h5-weight: 620; + --h6-weight: 600; + } +} +body { + /* Animations */ + --anim-duration-none: 0; + --anim-duration-superfast: 70ms; + --anim-duration-fast: 140ms; + --anim-duration-moderate: 300ms; + --anim-duration-slow: 560ms; + --anim-motion-smooth: cubic-bezier(0.45, 0.05, 0.55, 0.95); + --anim-motion-delay: cubic-bezier(0.65, 0.05, 0.36, 1); + --anim-motion-jumpy: cubic-bezier(0.68, -0.55, 0.27, 1.55); + --anim-motion-swing: cubic-bezier(0, 0.55, 0.45, 1); + /* Bases */ + --bases-header-border-width: 0 0 var(--border-width) 0; + --bases-header-height: 40px; + --bases-header-padding-start: 2px; + --bases-header-padding-end: 2px; + --bases-toolbar-label-display: block; + --bases-toolbar-badge-display: none; + --bases-embed-border-width: 0px; + --bases-embed-border-color: var(--background-modifier-border); + --bases-embed-border-radius: var(--radius-s); + --bases-filter-menu-width: 520px; + --bases-group-heading-property-size: var(--font-ui-smaller); + --bases-group-heading-property-weight: var(--font-normal); + --bases-group-heading-property-color: var(--text-muted); + --bases-group-heading-value-size: var(--font-smaller); + --bases-group-heading-value-weight: var(--font-semibold); + --bases-group-heading-property-display: block; + --bases-table-container-border-width: var(--border-width); + --bases-table-container-border-radius: var(--radius-s); + --bases-table-group-background: var(--background-primary-alt); + --bases-table-header-weight: var(--font-weight); + --bases-table-header-color: var(--text-muted); + --bases-table-header-icon-display: flex; + --bases-table-header-background: var(--background-primary); + --bases-table-header-background-hover: var(--background-modifier-hover); + --bases-table-header-sort-mask: linear-gradient(to left, transparent var(--size-4-6), black var(--size-4-6)); + --bases-table-summary-background: var(--background-primary); + --bases-table-summary-background-hover: var(--background-modifier-hover); + --bases-table-border-color: var(--table-border-color); + --bases-table-column-border-width: var(--border-width); + --bases-table-group-gap: 10px; + --bases-table-row-border-width: var(--border-width); + --bases-table-row-background-hover: var(--table-row-background-hover); + --bases-table-row-height: 30px; + --bases-table-font-size: var(--font-smaller); + --bases-table-column-max-width: 300; + --bases-table-column-min-width: 40; + --bases-table-cell-radius-active: 2px; + --bases-table-cell-shadow-active: 0 0 0 2px var(--background-modifier-border-focus); + --bases-table-cell-radius-focus: 2px; + --bases-table-cell-shadow-focus: 0 0 0 2px var(--interactive-accent); + --bases-table-cell-background-active: var(--background-primary); + --bases-table-cell-background-disabled: var(--background-primary-alt); + --bases-table-cell-background-selected: var(--table-selection); + --bases-cards-container-background: transparent; + --bases-cards-background: var(--background-primary); + --bases-cards-cover-background: var(--background-primary-alt); + --bases-cards-scale: 1; + --bases-cards-line-height: 24px; + --bases-cards-border-width: var(--border-width); + --bases-cards-shadow: 0 0 0 1px var(--background-modifier-border); + --bases-cards-shadow-hover: 0 0 0 1px var(--background-modifier-border-hover); + --bases-cards-font-size: var(--font-smaller); + /* Blockquotes */ + --blockquote-border-thickness: 2px; + --blockquote-border-color: var(--interactive-accent); + --blockquote-font-style: normal; + --blockquote-color: inherit; + --blockquote-background-color: transparent; + /* Bold */ + --bold-modifier: 200; + --bold-color: inherit; + --bold-weight: calc(var(--font-weight) + var(--bold-modifier)); + /* Borders */ + --border-width: 1px; + /* Buttons */ + --button-radius: var(--input-radius); + --corner-smoothing: 0; + /* Blurs */ + --blur-background: color-mix(in srgb, var(--background-primary) var(--blur-translucency-s), transparent) linear-gradient(var(--background-primary), color-mix(in srgb, var(--background-primary) var(--blur-translucency-s), transparent)); + --blur-translucency-s: 65%; + --blur-translucency-m: 90%; + --blur-brightness: 1.15; + --blur-saturation: 1.5; + --blur-radius-s: 6px; + --blur-radius-m: 10px; + --blur-radius-l: 16px; + --blur-s: blur(var(--blur-radius-s)) saturate(var(--blur-saturation)) brightness(var(--blur-brightness)); + --blur-m: blur(var(--blur-radius-m)) saturate(var(--blur-saturation)) brightness(var(--blur-brightness)); + --blur-l: blur(var(--blur-radius-l)) saturate(var(--blur-saturation)) brightness(var(--blur-brightness)); + /* Callouts */ + --callout-border-width: 0px; + --callout-border-opacity: 0.25; + --callout-padding: var(--size-4-3) var(--size-4-3) var(--size-4-3) var(--size-4-6); + --callout-radius: var(--radius-s); + --callout-blend-mode: var(--highlight-mix-blend-mode); + --callout-title-color: inherit; + --callout-title-padding: 0; + --callout-title-size: inherit; + --callout-title-weight: calc(var(--font-weight) + var(--bold-modifier)); + --callout-content-padding: 0; + --callout-content-background: transparent; + --callout-bug: var(--color-red-rgb); + --callout-default: var(--color-blue-rgb); + --callout-error: var(--color-red-rgb); + --callout-example: var(--color-purple-rgb); + --callout-fail: var(--color-red-rgb); + --callout-important: var(--color-cyan-rgb); + --callout-info: var(--color-blue-rgb); + --callout-question: var(--color-orange-rgb); + --callout-success: var(--color-green-rgb); + --callout-summary: var(--color-cyan-rgb); --callout-tip: var(--color-cyan-rgb); --callout-todo: var(--color-blue-rgb); --callout-warning: var(--color-orange-rgb); @@ -1104,7 +2143,12 @@ body { --canvas-color-4: var(--color-green-rgb); --canvas-color-5: var(--color-cyan-rgb); --canvas-color-6: var(--color-purple-rgb); + --canvas-controls-radius: var(--radius-s); + --canvas-controls-icon-size: var(--icon-s); + --canvas-controls-icon-stroke: var(--icon-s-stroke-width); --canvas-dot-pattern: var(--color-base-30); + /* Caret (text entry cursor) */ + --caret-color: var(--text-normal); /* Checkboxes */ --checkbox-radius: var(--radius-s); --checkbox-size: var(--font-text-size); @@ -1113,14 +2157,18 @@ body { --checkbox-color-hover: var(--interactive-accent-hover); --checkbox-border-color: var(--text-faint); --checkbox-border-color-hover: var(--text-muted); + --checkbox-margin-inline-start: 0.85em; --checklist-done-decoration: line-through; --checklist-done-color: var(--text-muted); /* Code */ --code-white-space: pre-wrap; + --code-border-width: 0px; + --code-border-color: var(--background-modifier-border); + --code-bracket-background: var(--background-modifier-hover); --code-radius: var(--radius-s); --code-size: var(--font-smaller); --code-background: var(--background-primary-alt); - --code-normal: var(--text-muted); + --code-normal: var(--text-normal); --code-comment: var(--text-faint); --code-function: var(--color-yellow); --code-important: var(--color-orange); @@ -1150,37 +2198,54 @@ body { /* Dragging */ --drag-ghost-background: rgba(0, 0, 0, 0.85); --drag-ghost-text-color: #fff; + /* Dropdowns */ + --dropdown-background-blend-mode: hard-light; + --dropdown-background-position: var(--inset-end) var(--dropdown-icon-inset) top 50%, 0 0; + --dropdown-background-size: var(--dropdown-icon-width) auto, 100%; + --dropdown-icon-width: 1em; + --dropdown-icon-inset: 0.5em; + --dropdown-padding: 0 var(--dropdown-padding-end) 0 var(--dropdown-padding-start); + --dropdown-padding-start: 0.8em; + --dropdown-padding-end: 1.9em; /* Embeds */ --embed-max-height: 4000px; --embed-canvas-max-height: 400px; --embed-background: inherit; - --embed-border-left: 2px solid var(--interactive-accent); - --embed-border-right: none; + --embed-border-start: 2px solid var(--interactive-accent); + --embed-border-end: none; --embed-border-top: none; --embed-border-bottom: none; --embed-padding: 0 0 0 var(--size-4-6); --embed-font-style: inherit; /* Blocks */ - --embed-block-shadow-hover: 0 0 0 1px var(--background-modifier-border), - inset 0 0 0 1px var(--background-modifier-border); + --embed-block-shadow-hover: 0 0 0 1px var(--background-modifier-border), inset 0 0 0 1px var(--background-modifier-border); /* File layout */ --file-line-width: 700px; --file-folding-offset: 24px; - --file-margins: var(--size-4-8); + --file-margins: var(--file-margins-y) var(--file-margins-x); + --file-margins-x: var(--size-4-8); + --file-margins-y: var(--size-4-8); + --file-header-font: var(--font-interface); --file-header-font-size: var(--font-ui-small); --file-header-font-weight: 400; + --file-header-background: var(--background-primary); + --file-header-background-focused: var(--background-primary); --file-header-border: var(--border-width) solid transparent; --file-header-justify: center; /* Relative font sizes */ --font-smallest: 0.8em; --font-smaller: 0.875em; --font-small: 0.933em; + /* Flair */ + --flair-background: var(--interactive-normal); + --flair-color: var(--text-normal); /* UI font sizes */ --font-ui-smaller: 12px; --font-ui-small: 13px; --font-ui-medium: 15px; --font-ui-large: 20px; /* Font weights */ + --font-weight: var(--font-normal); --font-thin: 100; --font-extralight: 200; --font-light: 300; @@ -1191,6 +2256,19 @@ body { --font-extrabold: 800; --font-black: 900; /* Footnotes */ + --footnote-divider-color-active: var(--metadata-divider-color-focus); + --footnote-divider-color: var(--metadata-divider-color); + --footnote-divider-width: var(--border-width); + --footnote-gap: var(--size-4-1); + --footnote-id-color-no-occurrences: var(--text-faint); + --footnote-id-color: var(--text-muted); + --footnote-id-delimiter: "."; + --footnote-input-background-active: var(--metadata-input-background-active); + --footnote-input-background: var(--metadata-input-background); + --footnote-line-height: var(--line-height-normal); + --footnote-padding-block: var(--size-2-3); + --footnote-padding-inline: var(--size-2-3); + --footnote-radius: var(--radius-s); --footnote-size: var(--font-smaller); /* Graphs */ --graph-controls-width: 240px; @@ -1216,17 +2294,23 @@ body { --h4-font: inherit; --h5-font: inherit; --h6-font: inherit; + --h1-letter-spacing: -0.015em; + --h2-letter-spacing: -0.011em; + --h3-letter-spacing: -0.008em; + --h4-letter-spacing: -0.005em; + --h5-letter-spacing: -0.002em; + --h6-letter-spacing: 0em; --h1-line-height: 1.2; --h2-line-height: 1.2; --h3-line-height: 1.3; --h4-line-height: 1.4; --h5-line-height: var(--line-height-normal); --h6-line-height: var(--line-height-normal); - --h1-size: 1.802em; - --h2-size: 1.602em; - --h3-size: 1.424em; - --h4-size: 1.266em; - --h5-size: 1.125em; + --h1-size: 1.618em; + --h2-size: 1.462em; + --h3-size: 1.318em; + --h4-size: 1.188em; + --h5-size: 1.076em; --h6-size: 1em; --h1-style: normal; --h2-style: normal; @@ -1240,12 +2324,6 @@ body { --h4-variant: normal; --h5-variant: normal; --h6-variant: normal; - --h1-weight: 700; - --h2-weight: 600; - --h3-weight: 600; - --h4-weight: 600; - --h5-weight: 600; - --h6-weight: 600; /* View header */ --header-height: 40px; /* Horizontal rules */ @@ -1272,12 +2350,17 @@ body { --icon-opacity-hover: 1; --icon-opacity-active: 1; --clickable-icon-radius: var(--radius-s); + /* Indent size */ + --indent-size: 4; + --indent-unit: 0.5625em; /* Indentation guide */ - --indentation-guide-width: 1px; - --indentation-guide-width-active: 1px; + --indentation-guide-width: var(--border-width); + --indentation-guide-width-active: var(--border-width); --indentation-guide-color: rgba(var(--mono-rgb-100), 0.12); --indentation-guide-color-active: rgba(var(--mono-rgb-100), 0.3); - --indentation-guide-editing-indent: 1em; + --indentation-guide-editing-indent: 0.85em; + --indentation-guide-reading-indent: -0.85em; + --indentation-guide-source-indent: 0.25em; /* Inline title */ --inline-title-color: var(--h1-color); --inline-title-font: var(--h1-font); @@ -1289,9 +2372,14 @@ body { --inline-title-margin-bottom: 0.5em; /* Inputs */ --input-height: 30px; + --input-padding: var(--size-4-1) var(--size-4-2); --input-radius: 5px; --input-font-weight: var(--font-normal); - --input-border-width: 1px; + --input-border-width: var(--border-width); + --input-border-width-focus: 2px; + --input-placeholder-color: var(--text-faint); + --input-date-separator: var(--text-faint); + --input-icon-inset: var(--size-4-1); /* Italic */ --italic-color: inherit; --italic-weight: inherit; @@ -1315,6 +2403,7 @@ body { --link-decoration: underline; --link-decoration-hover: underline; --link-decoration-thickness: auto; + --link-weight: var(--font-weight); --link-external-color: var(--text-accent); --link-external-color-hover: var(--text-accent-hover); --link-external-decoration: underline; @@ -1326,7 +2415,9 @@ body { --link-unresolved-decoration-style: solid; --link-unresolved-decoration-color: hsla(var(--interactive-accent-hsl), 0.3); /* Lists */ - --list-indent: 2.25em; + --list-indent: calc(var(--indent-unit) * var(--indent-size)); + --list-indent-editing: 0.75em; + --list-indent-source: 0; --list-spacing: 0.075em; --list-marker-color: var(--text-faint); --list-marker-color-hover: var(--text-muted); @@ -1336,28 +2427,52 @@ body { --list-bullet-size: 0.3em; --list-bullet-transform: none; --list-numbered-style: decimal; + --list-bullet-end-padding: 1.3rem; /* File navigator */ --nav-item-size: var(--font-ui-small); + --nav-item-radius: var(--radius-s); --nav-item-color: var(--text-muted); --nav-item-color-hover: var(--text-normal); --nav-item-color-active: var(--text-normal); --nav-item-color-selected: var(--text-normal); - --nav-item-color-highlighted: var(--text-accent-hover); + --nav-item-color-highlighted: var(--text-accent); --nav-item-background-hover: var(--background-modifier-hover); --nav-item-background-active: var(--background-modifier-hover); --nav-item-background-selected: hsla(var(--color-accent-hsl), 0.15); --nav-item-padding: var(--size-4-1) var(--size-4-2) var(--size-4-1) var(--size-4-6); --nav-item-parent-padding: var(--nav-item-padding); - --nav-item-children-padding-left: var(--size-2-2); - --nav-item-children-margin-left: var(--size-4-3); + --nav-item-margin-bottom: var(--size-2-1); + --nav-item-children-padding-start: var(--size-2-2); + --nav-item-children-margin-start: var(--size-4-3); --nav-item-weight: inherit; --nav-item-weight-hover: inherit; --nav-item-weight-active: inherit; - --nav-item-white-space: nowrap; + --nav-item-white-space: pre; --nav-indentation-guide-width: var(--indentation-guide-width); --nav-indentation-guide-color: var(--indentation-guide-color); --nav-collapse-icon-color: var(--collapse-icon-color); --nav-collapse-icon-color-collapsed: var(--text-faint); + --nav-heading-color: var(--text-normal); + --nav-heading-color-hover: var(--text-normal); + --nav-heading-color-collapsed: var(--text-faint); + --nav-heading-color-collapsed-hover: var(--text-muted); + --nav-heading-weight: var(--font-medium); + --nav-heading-weight-hover: var(--font-medium); + --nav-tag-background: transparent; + --nav-tag-radius: var(--radius-s); + --nav-tag-color: var(--text-faint); + --nav-tag-color-hover: var(--text-muted); + --nav-tag-color-active: var(--text-muted); + --nav-tag-weight: var(--font-semibold); + /* Menus */ + --menu-padding: var(--size-2-3); + --menu-shadow: var(--shadow-s); + --menu-radius: var(--radius-m); + --menu-background: var(--background-secondary); + --menu-border-color: var(--background-modifier-border-hover); + --menu-border-width: var(--border-width); + --menu-backdrop-filter: none; + --menu-scroll-mask: linear-gradient(to bottom, rgba(0, 0, 0, 0.05) 0%, rgba(0, 0, 0, 0.1) 48px); /* Metadata */ --metadata-background: transparent; --metadata-display-reading: block; @@ -1374,11 +2489,17 @@ body { --metadata-gap: 3px; --metadata-property-padding: 0; --metadata-property-radius: 6px; + --metadata-property-radius-hover: 6px; + --metadata-property-radius-focus: 6px; --metadata-property-background: transparent; --metadata-property-background-hover: transparent; --metadata-property-background-active: var(--background-modifier-hover); + --metadata-property-box-shadow-hover: 0 0 0 var(--border-width) var(--background-modifier-border-hover); + --metadata-property-box-shadow-focus: 0 0 0 2px var(--background-modifier-border-focus); + --metadata-label-background: transparent; --metadata-label-background-hover: transparent; --metadata-label-background-active: var(--background-modifier-hover); + --metadata-label-font: var(--font-interface); --metadata-label-font-size: var(--font-smaller); --metadata-label-font-weight: inherit; --metadata-label-text-color: var(--text-muted); @@ -1386,19 +2507,24 @@ body { --metadata-label-width: 9em; --metadata-input-height: calc(var(--font-text-size) * 1.75); --metadata-input-text-color: var(--text-normal); + --metadata-input-font: var(--font-interface); --metadata-input-font-size: var(--font-smaller); --metadata-input-background: transparent; --metadata-input-background-hover: transparent; --metadata-input-background-active: var(--background-modifier-hover); + --metadata-input-longtext-lines: 3; + --metadata-input-padding: var(--size-4-1) var(--size-4-2); --metadata-sidebar-label-font-size: var(--font-ui-small); --metadata-sidebar-input-font-size: var(--font-ui-small); /* Modals - e.g. settings, community themes, community plugins */ --modal-background: var(--background-primary); --modal-width: 90vw; + --modal-header-height: auto; --modal-height: 85vh; --modal-max-width: 1100px; --modal-max-height: 1000px; --modal-max-width-narrow: 800px; + --modal-shadow: none; --modal-border-width: var(--border-width); --modal-border-color: var(--color-base-40, var(--background-modifier-border-focus)); --modal-radius: var(--radius-l); @@ -1432,11 +2558,14 @@ body { /* Popovers - file previews */ --popover-width: 450px; --popover-height: 400px; - --popover-max-height: 70vh; - --popover-pdf-width: 600px; - --popover-pdf-height: 800px; + --popover-max-height: 95vh; + --popover-pdf-width: 450px; + --popover-pdf-height: 400px; --popover-font-size: var(--font-text-size); /* Prompts - e.g. quick switcher, command palette */ + --prompt-background: var(--background-primary); + --prompt-backdrop-filter: none; + --prompt-input-height: 40px; --prompt-width: 700px; --prompt-max-width: 80vw; --prompt-max-height: 70vh; @@ -1447,12 +2576,24 @@ body { --radius-m: 8px; --radius-l: 12px; --radius-xl: 16px; + /* Raised */ + --raised-background: var(--blur-background); + --raised-blur: var(--blur-s); + --raised-shadow: var(--shadow-xs); + --raised-mask-background: linear-gradient(to bottom left, white, transparent, white) border-box no-repeat; + --raised-mask: linear-gradient(white, white) padding-box, linear-gradient(white, white) border-box; + --raised-mask-composite: exclude, add; + --raised-mask-border-width: 0; /* Ribbon */ --ribbon-background: var(--background-secondary); --ribbon-background-collapsed: var(--background-primary); --ribbon-width: 44px; --ribbon-padding: var(--size-4-2) var(--size-4-1) var(--size-4-3); /* Scrollbars */ + --scrollbar-width: 12px; + --scrollbar-height: 12px; + --scrollbar-border-width: 3px 3px 3px 2px; + --scrollbar-radius: var(--radius-l); --scrollbar-active-thumb-bg: rgba(var(--mono-rgb-100), 0.2); --scrollbar-bg: rgba(var(--mono-rgb-100), 0.05); --scrollbar-thumb-bg: rgba(var(--mono-rgb-100), 0.1); @@ -1462,6 +2603,15 @@ body { --search-icon-color: var(--text-muted); --search-icon-size: 18px; --search-result-background: var(--background-primary); + /* Setting groups */ + --setting-group-heading-color: var(--text-normal); + --setting-group-heading-size: var(--font-ui-medium); + --setting-group-heading-weight: var(--font-semibold); + --setting-items-background: var(--background-primary-alt); + --setting-items-padding: var(--size-4-5); + --setting-items-radius: var(--radius-l); + --setting-items-border-width: 0; + --setting-items-border-color: var(--background-modifier-border); /* Layout sizing - for padding and margins */ --size-2-1: 2px; --size-2-2: 4px; @@ -1474,19 +2624,24 @@ body { --size-4-6: 24px; --size-4-8: 32px; --size-4-9: 36px; + --size-4-10: 40px; --size-4-12: 48px; --size-4-16: 64px; --size-4-18: 72px; /* Sidebar */ --sidebar-markdown-font-size: calc(var(--font-text-size) * 0.9); --sidebar-tab-text-display: none; + --sidebar-left-toggle-inner-width: 8.33%; + --sidebar-right-toggle-inner-width: 8.33%; + --sidebar-left-toggle-inner-width-open: 24%; + --sidebar-right-toggle-inner-width-open: 24%; /* Sliders */ - --slider-thumb-border-width: 1px; + --slider-thumb-border-width: var(--border-width); --slider-thumb-border-color: var(--background-modifier-border-hover); --slider-thumb-height: 18px; --slider-thumb-width: 18px; --slider-thumb-y: -6px; - --slider-thumb-radius: 50%; + --slider-thumb-radius: var(--slider-thumb-height); --slider-s-thumb-size: 15px; --slider-s-thumb-position: -5px; --slider-track-background: var(--background-modifier-border); @@ -1494,12 +2649,14 @@ body { /* Status bar */ --status-bar-background: var(--background-secondary); --status-bar-border-color: var(--divider-color); - --status-bar-border-width: 1px 0 0 1px; + --status-bar-border-width: var(--border-width) 0 0 var(--border-width); --status-bar-font-size: var(--font-ui-smaller); --status-bar-text-color: var(--text-muted); --status-bar-position: fixed; --status-bar-radius: var(--radius-m) 0 0 0; - --status-bar-scroll-padding: calc(var(--status-bar-font-size) + 18px); + /* Suggestions */ + --suggestion-background: var(--background-primary); + --suggestion-backdrop-filter: none; /* Sync */ --sync-avatar-color-current-user: transparent; --sync-avatar-color-1: var(--color-red); @@ -1512,8 +2669,8 @@ body { --sync-avatar-color-8: var(--color-pink); /* Swatch for color inputs */ --swatch-radius: 14px; - --swatch-height: 24px; - --swatch-width: 24px; + --swatch-height: 22px; + --swatch-width: 22px; --swatch-shadow: inset 0 0 0 1px rgba(var(--mono-rgb-100), 0.15); /* Tabs */ --tab-background-active: var(--background-primary); @@ -1534,12 +2691,19 @@ body { --tab-radius-active: 6px 6px 0 0; --tab-width: 200px; --tab-max-width: 320px; + /* Mobile tab switcher */ + --tab-switcher-menubar-background: linear-gradient(to top, var(--background-secondary), transparent); + --tab-switcher-background: var(--background-secondary); + --tab-switcher-preview-radius: var(--radius-xl); + --tab-switcher-preview-background-shadow: 0 4px 30px 2px rgba(0, 0, 0, 0.2); + --tab-switcher-preview-shadow: 0 0 0 1px rgba(var(--mono-rgb-100), 0.05); + --tab-switcher-preview-shadow-active: 0 0 0 2px var(--color-accent); /* Stacked tabs */ --tab-stacked-pane-width: 700px; --tab-stacked-header-width: var(--header-height); --tab-stacked-font-size: var(--font-ui-small); --tab-stacked-font-weight: 400; - --tab-stacked-text-align: left; + --tab-stacked-text-align: start; --tab-stacked-text-transform: rotate(0deg); --tab-stacked-text-writing-mode: vertical-lr; --tab-stacked-shadow: -8px 0 8px 0 rgba(0, 0, 0, 0.05); @@ -1554,7 +2718,7 @@ body { --table-header-border-color: var(--table-border-color); --table-header-font: inherit; --table-header-size: var(--table-text-size); - --table-header-weight: var(--bold-weight); + --table-header-weight: calc(var(--font-weight) + var(--bold-modifier)); --table-header-color: var(--text-normal); --table-line-height: var(--line-height-tight); --table-text-size: var(--font-text-size); @@ -1578,6 +2742,7 @@ body { --table-drag-handle-background-active: var(--table-selection-border-color); --table-drag-handle-color: var(--text-faint); --table-drag-handle-color-active: var(--text-on-accent); + --table-drop-indicator-half-width: 2px; --table-add-button-background: transparent; --table-add-button-border-width: var(--table-border-width); --table-add-button-border-color: var(--background-modifier-border); @@ -1616,10 +2781,32 @@ body { --toggle-s-width: 34px; --toggle-s-thumb-height: 15px; --toggle-s-thumb-width: 15px; - /* Vault name */ - --vault-name-font-size: var(--font-ui-small); - --vault-name-font-weight: var(--font-medium); - --vault-name-color: var(--text-normal); + /* Touch sizes */ + --touch-size-xxs: 24px; + --touch-size-xs: 30px; + --touch-size-s: 40px; + --touch-size-m: 44px; + --touch-size-l: 52px; + --touch-size-xl: 60px; + --touch-radius-xxs: var(--touch-size-xxs); + --touch-radius-xs: var(--touch-size-xs); + --touch-radius-s: var(--touch-size-s); + --touch-radius-m: var(--touch-size-m); + --touch-radius-l: var(--touch-size-l); + --touch-radius-xl: var(--touch-size-xl); + /* Vault profile */ + --vault-profile-display: flex; + --vault-profile-order: 2; + --vault-profile-actions-display: flex; + --vault-profile-font-size: var(--font-ui-small); + --vault-profile-font-weight: var(--font-medium); + --vault-profile-color: var(--text-normal); + --vault-profile-color-hover: var(--vault-profile-color); + /* View fade effects */ + --view-top-fade-opacity: 0.25; + --view-bottom-fade-opacity: 0.5; + --view-top-fade-mask: linear-gradient(to bottom, rgba(0, 0, 0, var(--view-top-fade-opacity)) 0%, #000000 calc(var(--safe-area-inset-top) + var(--view-header-height) + 12px)); + --view-bottom-fade-mask: linear-gradient(to top, rgba(0, 0, 0, var(--view-bottom-fade-opacity)) 0%, #000000 calc(var(--safe-area-inset-bottom) - var(--keyboard-height) + 12px)); /* Workspace */ --workspace-background-translucent: rgba(var(--mono-rgb-0), 0.6); /* Color mappings ------------------------ */ @@ -1631,8 +2818,8 @@ body { --background-primary: var(--color-base-00); --background-primary-alt: var(--color-base-10); --background-secondary: var(--color-base-20); - --background-modifier-hover: rgba(var(--mono-rgb-100), 0.075); - --background-modifier-active-hover: hsla(var(--interactive-accent-hsl), 0.15); + --background-modifier-hover: rgba(var(--mono-rgb-100), 0.067); + --background-modifier-active-hover: hsla(var(--interactive-accent-hsl), 0.1); --background-modifier-border: var(--color-base-30); --background-modifier-border-hover: var(--color-base-35); --background-modifier-border-focus: var(--color-base-40); @@ -1644,6 +2831,7 @@ body { --background-modifier-message: rgba(0, 0, 0, 0.9); /* Inputs */ --background-modifier-form-field: var(--color-base-00); + --background-modifier-form-field-hover: var(--background-modifier-form-field); /* Text */ --text-normal: var(--color-base-100); --text-muted: var(--color-base-70); @@ -1664,8394 +2852,11594 @@ body { --interactive-accent: var(--color-accent-1); --interactive-accent-hover: var(--color-accent-2); } -.theme-light { - color-scheme: light; - --highlight-mix-blend-mode: darken; - --mono-rgb-0: 255, 255, 255; - --mono-rgb-100: 0, 0, 0; - --color-red-rgb: 233, 49, 71; - --color-red: #e93147; - --color-orange-rgb: 236, 117, 0; - --color-orange: #ec7500; - --color-yellow-rgb: 224, 172, 0; - --color-yellow: #e0ac00; - --color-green-rgb: 8, 185, 78; - --color-green: #08b94e; - --color-cyan-rgb: 0, 191, 188; - --color-cyan: #00bfbc; - --color-blue-rgb: 8, 109, 221; - --color-blue: #086ddd; - --color-purple-rgb: 120, 82, 238; - --color-purple: #7852ee; - --color-pink-rgb: 213, 57, 132; - --color-pink: #d53984; - --color-base-00: #ffffff; - --color-base-05: #fcfcfc; - --color-base-10: #fafafa; - --color-base-20: #f6f6f6; - --color-base-25: #e3e3e3; - --color-base-30: #e0e0e0; - --color-base-35: #d4d4d4; - --color-base-40: #bdbdbd; - --color-base-50: #ababab; - --color-base-60: #707070; - --color-base-70: #5c5c5c; - --color-base-100: #222222; - --color-accent-hsl: var(--accent-h), - var(--accent-s), - var(--accent-l); - --color-accent: hsl(var(--accent-h), var(--accent-s), var(--accent-l)); - --color-accent-1: hsl(calc(var(--accent-h) - 1), calc(var(--accent-s) * 1.01), calc(var(--accent-l) * 1.075)); - --color-accent-2: hsl(calc(var(--accent-h) - 3), calc(var(--accent-s) * 1.02), calc(var(--accent-l) * 1.15)); - --background-secondary-alt: var(--color-base-05); - --background-modifier-box-shadow: rgba(0, 0, 0, 0.1); - --background-modifier-cover: rgba(220, 220, 220, 0.4); - --input-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.12), - 0 2px 3px 0 rgba(0,0,0,.05), - 0 1px 1.5px 0 rgba(0,0,0,.03), - 0 1px 2px 0 rgba(0,0,0,.04), - 0 0 0 0 transparent; - --input-shadow-hover: inset 0 0 0 1px rgba(0, 0, 0, 0.17), - 0 2px 3px 0 rgba(0,0,0,.1), - 0 1px 1.5px 0 rgba(0,0,0,.03), - 0 1px 2px 0 rgba(0,0,0,.04), - 0 0 0 0 transparent; - --shadow-s: 0px 1px 2px rgba(0, 0, 0, 0.028), - 0px 3.4px 6.7px rgba(0, 0, 0, .042), - 0px 15px 30px rgba(0, 0, 0, .07); - --shadow-l: 0px 1.8px 7.3px rgba(0, 0, 0, 0.071), - 0px 6.3px 24.7px rgba(0, 0, 0, 0.112), - 0px 30px 90px rgba(0, 0, 0, 0.2); +.theme-light, +.theme-dark { + --dropdown-background: var(--interactive-normal); + --dropdown-background-hover: var(--interactive-hover); +} +.theme-light { + color-scheme: light; + --highlight-mix-blend-mode: darken; + --mono-rgb-0: 255, 255, 255; + --mono-rgb-100: 0, 0, 0; + --color-red-rgb: 233, 49, 71; + --color-red: #e93147; + --color-orange-rgb: 236, 117, 0; + --color-orange: #ec7500; + --color-yellow-rgb: 224, 172, 0; + --color-yellow: #e0ac00; + --color-green-rgb: 8, 185, 78; + --color-green: #08b94e; + --color-cyan-rgb: 0, 191, 188; + --color-cyan: #00bfbc; + --color-blue-rgb: 8, 109, 221; + --color-blue: #086ddd; + --color-purple-rgb: 120, 82, 238; + --color-purple: #7852ee; + --color-pink-rgb: 213, 57, 132; + --color-pink: #d53984; + --color-base-00: #ffffff; + --color-base-05: #fcfcfc; + --color-base-10: #fafafa; + --color-base-20: #f6f6f6; + --color-base-25: #e3e3e3; + --color-base-30: #e0e0e0; + --color-base-35: #d4d4d4; + --color-base-40: #bdbdbd; + --color-base-50: #ababab; + --color-base-60: #707070; + --color-base-70: #5c5c5c; + --color-base-100: #222222; + --color-accent-hsl: var(--accent-h), var(--accent-s), var(--accent-l); + --color-accent: hsl(var(--accent-h), var(--accent-s), var(--accent-l)); + --color-accent-1: hsl(calc(var(--accent-h) - 1), calc(var(--accent-s) * 1.01), calc(var(--accent-l) * 1.075)); + --color-accent-2: hsl(calc(var(--accent-h) - 3), calc(var(--accent-s) * 1.02), calc(var(--accent-l) * 1.15)); + --background-secondary-alt: var(--color-base-05); + --background-modifier-box-shadow: rgba(0, 0, 0, 0.1); + --background-modifier-cover: rgba(220, 220, 220, 0.4); + --input-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.12), 0 2px 3px 0 rgba(0, 0, 0, 0.05), 0 1px 1.5px 0 rgba(0, 0, 0, 0.03), 0 1px 2px 0 rgba(0, 0, 0, 0.04), 0 0 0 0 transparent; + --input-shadow-hover: inset 0 0 0 1px rgba(0, 0, 0, 0.17), 0 2px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 1.5px 0 rgba(0, 0, 0, 0.03), 0 1px 2px 0 rgba(0, 0, 0, 0.04), 0 0 0 0 transparent; + --shadow-edges: 0 0 transparent; + --shadow-xs: 0 1px 6px rgba(0, 0, 0, 0.015), 0 4px 24px rgba(0, 0, 0, 0.065), var(--shadow-edges); + --shadow-s: 0px 1px 2px rgba(0, 0, 0, 0.028), 0px 3.4px 6.7px rgba(0, 0, 0, 0.042), 0px 15px 30px rgba(0, 0, 0, 0.07); + --shadow-l: 0px 1.8px 7.3px rgba(0, 0, 0, 0.071), 0px 6.3px 24.7px rgba(0, 0, 0, 0.112), 0px 15px 30px rgba(0, 0, 0, 0.1); +} +.theme-dark { + color-scheme: dark; + --highlight-mix-blend-mode: lighten; + --mono-rgb-0: 0, 0, 0; + --mono-rgb-100: 255, 255, 255; + --color-red-rgb: 251, 70, 76; + --color-red: #fb464c; + --color-orange-rgb: 233, 151, 63; + --color-orange: #e9973f; + --color-yellow-rgb: 224, 222, 113; + --color-yellow: #e0de71; + --color-green-rgb: 68, 207, 110; + --color-green: #44cf6e; + --color-cyan-rgb: 83, 223, 221; + --color-cyan: #53dfdd; + --color-blue-rgb: 2, 122, 255; + --color-blue: #027aff; + --color-purple-rgb: 168, 130, 255; + --color-purple: #a882ff; + --color-pink-rgb: 250, 153, 205; + --color-pink: #fa99cd; + --color-base-00: #1e1e1e; + --color-base-05: #212121; + --color-base-10: #242424; + --color-base-20: #262626; + --color-base-25: #2a2a2a; + --color-base-30: #363636; + --color-base-35: #3f3f3f; + --color-base-40: #555555; + --color-base-50: #666666; + --color-base-60: #999999; + --color-base-70: #b3b3b3; + --color-base-100: #dadada; + --color-accent-hsl: var(--accent-h), var(--accent-s), var(--accent-l); + --color-accent: hsl(var(--accent-h), var(--accent-s), var(--accent-l)); + --color-accent-1: hsl(calc(var(--accent-h) - 3), calc(var(--accent-s) * 1.02), calc(var(--accent-l) * 1.15)); + --color-accent-2: hsl(calc(var(--accent-h) - 5), calc(var(--accent-s) * 1.05), calc(var(--accent-l) * 1.29)); + --blur-background: color-mix(in srgb, var(--interactive-normal) var(--blur-translucency-s), transparent) linear-gradient(var(--interactive-normal), color-mix(in srgb, var(--interactive-normal) var(--blur-translucency-s), transparent)); + --background-modifier-form-field: var(--color-base-25); + --background-secondary-alt: var(--color-base-30); + --interactive-normal: var(--color-base-30); + --interactive-hover: var(--color-base-35); + --text-accent: var(--color-accent-1); + --interactive-accent: var(--color-accent); + --interactive-accent-hover: var(--color-accent-1); + --background-modifier-box-shadow: rgba(0, 0, 0, 0.3); + --background-modifier-cover: rgba(10, 10, 10, 0.4); + --raised-mask-background: transparent; + --text-selection: hsla(var(--interactive-accent-hsl), 0.33); + --input-shadow: inset 0 0.5px 0.5px 0.5px rgba(255, 255, 255, 0.09), 0 2px 4px 0 rgba(0, 0, 0, 0.15), 0 1px 1.5px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.2), 0 0 0 0 transparent; + --input-shadow-hover: inset 0 0.5px 1px 0.5px rgba(255, 255, 255, 0.16), 0 2px 3px 0 rgba(0, 0, 0, 0.3), 0 1px 1.5px 0 rgba(0, 0, 0, 0.2), 0 1px 2px 0 rgba(0, 0, 0, 0.4), 0 0 0 0 transparent; + --shadow-xs: 0 1px 6px rgba(0, 0, 0, 0.045), 0 4px 24px rgba(0, 0, 0, 0.195), var(--shadow-edges); + --shadow-s: 0px 1px 2px rgba(0, 0, 0, 0.121), 0px 3.4px 6.7px rgba(0, 0, 0, 0.179), 0px 15px 30px rgba(0, 0, 0, 0.3); + --shadow-l: 0px 1.8px 7.3px rgba(0, 0, 0, 0.071), 0px 6.3px 24.7px rgba(0, 0, 0, 0.112), 0px 30px 90px rgba(0, 0, 0, 0.2); + --pdf-shadow: 0 0 0 1px var(--background-modifier-border); + --pdf-thumbnail-shadow: 0 0 0 1px var(--background-modifier-border); +} +.mod-macos { + --slider-thumb-width: 30px; + --toggle-width: 44px; + --toggle-radius: 24px; + --toggle-thumb-radius: 24px; + --toggle-thumb-height: 16px; + --toggle-thumb-width: 26px; + --toggle-thumb-opacity-active: 0.6; + --toggle-s-width: 36px; + --toggle-s-thumb-height: 12px; + --toggle-s-thumb-width: 20px; +} +iframe { + color-scheme: normal; +} +@media print { + .theme-dark { + --highlight-mix-blend-mode: darken; + } +} +@font-face { + font-family: 'Source Code Pro'; + font-weight: normal; + font-style: normal; + font-display: swap; + src: url(public/fonts/70cc7ff27245e82ad414.ttf); +} +@font-face { + font-family: 'Source Code Pro'; + font-weight: normal; + font-style: italic; + font-display: swap; + src: url(public/fonts/454577c22304619db035.ttf); +} +@font-face { + font-family: 'Source Code Pro'; + font-weight: bold; + font-style: normal; + font-display: swap; + src: url(public/fonts/52ac8f3034507f1d9e53.ttf); +} +@font-face { + font-family: 'Source Code Pro'; + font-weight: bold; + font-style: italic; + font-display: swap; + src: url(public/fonts/05b618077343fbbd92b7.ttf); +} +@font-face { + font-family: 'Flow Circular'; + font-display: swap; + src: url(public/fonts/4bb6ac751d1c5478ff3a.woff2); +} +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url(public/fonts/c504db5c06caaf7cdfba.woff2); +} +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 100 900; + font-display: swap; + src: url(public/fonts/01dcbad1bac635f9c9cd.woff2); +} +@font-face { + font-family: '??'; + unicode-range: U+0; +} +body { + --font-default: ui-sans-serif, -apple-system, BlinkMacSystemFont, system-ui, "Segoe UI", "Google Sans Flex", Roboto, "Inter Variable", "Inter", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", sans-serif; + --font-monospace-default: ui-monospace, SFMono-Regular, "Cascadia Mono", "Roboto Mono", "DejaVu Sans Mono", "Liberation Mono", Menlo, Monaco, "Consolas", "Source Code Pro", monospace; + --font-interface-override: '??'; + --font-interface-theme: '??'; + --font-interface: var(--font-interface-override), var(--font-interface-theme), var(--default-font, '??'), var(--font-default); + --font-text-override: '??'; + --font-text-theme: '??'; + --font-text: var(--font-text-override), var(--font-text-theme), var(--font-default); + --font-print-override: '??'; + --font-print: var(--font-print-override), var(--font-text-override), var(--font-text-theme), 'Arial'; + --font-monospace-override: '??'; + --font-monospace-theme: '??'; + --font-monospace: var(--font-monospace-override), var(--font-monospace-theme), var(--font-monospace-default); + --font-text-size: 16px; + --font-mermaid: var(--font-text); +} +@media print { + html, + body { + padding-top: 0 !important; + overflow: auto !important; + height: auto !important; + contain: initial !important; + } + iframe, + .titlebar, + .app-container, + .progress-bar, + .popover, + .markdown-embed-link, + .suggestion-container, + .cm-tooltip.cm-tooltip-autocomplete { + display: none !important; + } + body > :not(.print) { + display: none !important; + } + .print .markdown-preview-view { + -webkit-print-color-adjust: exact; + color: initial; + height: unset !important; + } + .print .markdown-preview-view mark { + color: initial; + } + .print .markdown-preview-view .metadata-container { + display: none; + } + .print .markdown-preview-view .markdown-embed-content { + max-height: none; + overflow: visible; + } + .print .markdown-preview-view .callout-content { + display: inherit !important; + } + .print .bases-toolbar svg.lucide-chevrons-up-down { + display: none; + } + .print .bases-toolbar .bases-toolbar-item.bases-toolbar-sort-menu, + .print .bases-toolbar .bases-toolbar-item.bases-toolbar-filter-menu, + .print .bases-toolbar .bases-toolbar-item.bases-toolbar-properties-menu, + .print .bases-toolbar .bases-toolbar-item.bases-toolbar-new-item-menu { + display: none; + } + .print .external-link { + background: none; + padding-right: 0; + } + * { + text-shadow: none !important; + } + webview { + display: none; + } + ::-webkit-scrollbar { + display: none; + } + body { + --font-text: var(--font-print) !important; + } +} +* { + box-sizing: border-box; +} +html, +body { + margin: 0; + padding: 0; + height: 100%; + width: 100%; + overscroll-behavior: none; +} +body { + text-rendering: optimizeLegibility; + font-family: var(--font-interface); + line-height: var(--line-height-tight); + font-size: var(--font-ui-medium); + background-color: var(--background-primary); + color: var(--text-normal); + -webkit-tap-highlight-color: rgba(255, 255, 255, 0); + overflow: hidden; + overflow: clip; + contain: strict; +} +body.is-translucent { + background-color: transparent; +} +@keyframes node-inserted { + from { + outline-color: #fff; + } + to { + outline-color: #000; + } +} +.node-insert-event { + animation-duration: 0.01s; + animation-name: node-inserted; +} +.is-flashing { + transition: color 0.25s ease, background-color 0.25s ease; + background-color: var(--text-highlight-bg) !important; + color: var(--text-normal); + mix-blend-mode: var(--highlight-mix-blend-mode); + border-radius: var(--radius-s); +} +body { + user-select: none; + -webkit-user-select: none; + caret-color: var(--caret-color); +} +body [contenteditable="true"], +body [contenteditable=""] { + user-select: text; + -webkit-user-select: text; +} +body.is-grabbing, +body.is-grabbing *:not(.workspace-leaf-resize-handle) { + cursor: -moz-grabbing !important; + cursor: -webkit-grabbing !important; + cursor: grabbing !important; +} +body.is-grabbing iframe:not(.is-controlled), +body.is-grabbing webview { + pointer-events: none; +} +.app-container { + display: flex; + height: 100%; + width: 100%; + flex-direction: column; +} +.app-container.no-transition * { + transition: none !important; +} +.app-container.mod-loading .clickable-icon { + pointer-events: none; + touch-action: none; +} +.app-container.mod-loading .view-header .loader-spinner { + --icon-size: var(--icon-l); + --icon-stroke: var(--icon-l-stroke-width); + margin: var(--size-4-3) var(--size-4-2); +} +.app-container.mod-loading .view-header .loader-spinner svg { + animation: spin 0.9s ease infinite; +} +body:not(.is-mobile) .app-container { + position: relative; +} +.horizontal-main-container { + width: 100%; + display: flex; + overflow: hidden; + flex: 1 0 0; +} +:focus { + outline: none; +} +.is-text-garbled * { + font-family: 'Flow Circular', sans-serif !important; + line-height: 1.45em !important; +} +.download-attachments { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: var(--size-4-1); + margin-top: var(--size-4-2); +} +.download-attachments .download-attachment-item { + --checkbox-marker-color: var(--text-on-accent); + --checkbox-size: 1.15rem; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + position: relative; + aspect-ratio: 1/1; + background-color: var(--background-secondary); + overflow: hidden; + border-radius: var(--radius-s); +} +.download-attachments .download-attachment-item:before { + content: ''; + position: absolute; + box-shadow: inset 0 0 0 1px rgba(var(--mono-rgb-100), 0.2); + border-radius: var(--radius-s); + height: 100%; + width: 100%; + top: 0; + left: 0; + z-index: 1; + pointer-events: none; + opacity: 0.5; + transition: box-shadow var(--anim-duration-superfast) ease-in-out; + background: linear-gradient(to top, rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0) 50%); +} +.download-attachments .download-attachment-item:hover:before { + box-shadow: inset 0 0 0 1px rgba(var(--mono-rgb-100), 0.3); +} +.download-attachments .download-attachment-item input[type=checkbox] { + position: absolute; + bottom: var(--size-4-2); + inset-inline-end: var(--size-4-2); + margin-inline: 0; + z-index: 2; +} +.download-attachments .download-attachment-item input[type=checkbox]:not(:checked) { + background-color: var(--background-primary); +} +.download-attachments .download-attachment-item img { + object-fit: cover; + width: 100%; + height: 100%; + max-width: 100%; + max-height: 100%; + pointer-events: none; + border-radius: var(--radius-s); +} +/* CURSOR */ +.cm-s-obsidian .cm-cursor, +.cm-s-obsidian .cm-dropCursor { + border-left-color: var(--caret-color); +} +.cm-fat-cursor-mark { + background-color: rgba(20, 255, 20, 0.5); + -webkit-animation: blink 1.06s steps(1) infinite; + -moz-animation: blink 1.06s steps(1) infinite; + animation: blink 1.06s steps(1) infinite; +} +.cm-animate-fat-cursor { + width: auto; + border: 0; + -webkit-animation: blink 1.06s steps(1) infinite; + -moz-animation: blink 1.06s steps(1) infinite; + animation: blink 1.06s steps(1) infinite; + background: var(--interactive-accent); + color: var(--text-on-accent); +} +@-moz-keyframes blink { + 50% { + background-color: transparent; + } +} +@-webkit-keyframes blink { + 50% { + background-color: transparent; + } +} +@keyframes blink { + 50% { + background-color: transparent; + } +} +.cm-tab { + display: inline-block; + text-decoration: inherit; +} +.cm-negative { + color: var(--text-error); +} +.cm-positive { + color: var(--text-success); +} +.cm-strikethrough { + text-decoration: line-through; +} +.cm-invalidchar { + color: var(--text-error); +} +.cm-searching { + background-color: #ffa; + background-color: rgba(255, 255, 0, 0.4); +} +/* Used to force a border model for a node */ +.cm-force-border { + padding-right: 0.1px; +} +/* See issue #2901 */ +.cm-tab-wrap-hack:after { + content: ''; +} +.markdown-source-view { + font-size: var(--font-text-size); + font-family: var(--font-text); +} +.workspace-leaf-content.is-read-mode .markdown-source-view { + z-index: 0; +} +.drag-ghost { + position: fixed; + font-size: var(--font-ui-small); + color: var(--drag-ghost-text-color); + padding: var(--size-2-3) var(--size-4-2); + border-radius: var(--radius-s); + background-color: var(--drag-ghost-background); + box-shadow: 0 2px 8px var(--background-modifier-box-shadow); + z-index: var(--layer-dragged-item); + max-width: 300px; + font-weight: var(--font-medium); + pointer-events: none; +} +.drag-ghost.mod-leaf { + display: flex; + z-index: var(--layer-tooltip); +} +.drag-ghost-icon { + margin-right: var(--size-2-3); + position: relative; +} +.drag-reorder-ghost { + position: fixed; + border-radius: var(--radius-s); + background-color: var(--background-primary); + box-shadow: 0 2px 8px var(--background-modifier-box-shadow); + z-index: var(--layer-dragged-item); + pointer-events: none; +} +.drag-ghost-self { + display: flex; +} +.drag-ghost-self > .svg-icon { + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); + opacity: 0.7; + vertical-align: middle; + align-self: center; + margin-right: var(--size-2-2); + flex-shrink: 0; +} +.drag-ghost-self span { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.drag-ghost-action { + padding: var(--size-2-1) 0 0 0; + font-size: var(--font-ui-smaller); + opacity: 0.7; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.drag-ghost-hidden { + visibility: hidden; + position: relative; +} +.drag-ghost-hidden:before { + content: ' '; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + visibility: visible; + border-radius: 5px; + background-color: hsla(var(--interactive-accent-hsl), 0.3); +} +.markdown-source-view:not(.is-live-preview) { + --p-spacing: 0rem; +} +.markdown-source-view.mod-cm6 { + height: 100%; + display: flex; + flex-direction: column; +} +.markdown-source-view.mod-cm6 ::selection { + background-color: var(--text-selection); +} +.markdown-source-view.mod-cm6 .cm-line .cm-selection, +.markdown-source-view.mod-cm6 .cm-line .cm-inline-code .cm-selection { + background-color: var(--text-selection); +} +.markdown-source-view.mod-cm6 .cm-selectionBackground, +.markdown-source-view.mod-cm6 .cm-editor > .cm-scroller > .cm-selectionLayer > .cm-selectionBackground { + background-color: var(--text-selection); +} +.markdown-source-view.mod-cm6.is-readable-line-width .cm-sizer { + max-width: var(--file-line-width); + margin-left: auto; + margin-right: auto; +} +.markdown-source-view.mod-cm6.is-readable-line-width .cm-content { + max-width: var(--file-line-width); +} +.markdown-source-view.mod-cm6.is-readable-line-width .cm-line { + max-width: var(--file-line-width); +} +.markdown-source-view.mod-cm6.is-readable-line-width .cm-line.HyperMD-table-row { + max-width: 100%; +} +.markdown-source-view.mod-cm6 .cm-editor { + flex: 1 1; + min-height: 0; +} +.markdown-source-view.mod-cm6 .cm-editor.cm-focused { + outline: none; +} +.markdown-source-view.mod-cm6 .cm-scroller { + font-family: var(--font-text); + line-height: var(--line-height-normal); + scrollbar-gutter: stable; +} +.markdown-source-view.mod-cm6 .cm-sizer { + display: flex; + flex-direction: column; + align-items: stretch; + width: 100%; + min-height: 100%; +} +.markdown-source-view.mod-cm6 .cm-contentContainer { + flex: 1 1 auto; + display: flex; + align-items: stretch; + overflow-x: visible; +} +.markdown-source-view.mod-cm6 .cm-content { + flex-basis: unset !important; + width: 0; + caret-color: var(--caret-color); + min-height: unset; + padding: 0; +} +.is-mobile.is-ios .markdown-source-view.mod-cm6 .cm-content { + -webkit-user-modify: read-write; +} +.markdown-source-view.mod-cm6 .cm-content > * { + margin: 0 !important; + display: block; +} +.markdown-source-view.mod-cm6 .cm-content > [contenteditable=false] { + contain: paint !important; +} +.markdown-source-view.mod-cm6 .cm-gutters { + flex: 0 0 auto; + background-color: transparent; + color: var(--text-faint) !important; + border-right: none !important; + margin-inline-end: var(--file-folding-offset); + font-size: var(--font-ui-smaller); + z-index: 1; + font-variant: tabular-nums; +} +.markdown-source-view.mod-cm6 .cm-line > * { + text-indent: 0; +} +.markdown-source-view.mod-cm6 .cm-transparent { + color: transparent; +} +.markdown-source-view.mod-cm6 .cm-html-embed, +.markdown-source-view.mod-cm6 .cm-callout, +.markdown-source-view.mod-cm6 .cm-table-widget { + white-space: normal; + overflow-wrap: normal; + word-break: normal; +} +.markdown-source-view.mod-cm6 .cm-table-widget { + --table-drag-handle-size: var(--size-4-4); + padding: var(--table-drag-handle-size); + margin: 0 calc(-1 * var(--size-4-4)) !important; + overflow-x: auto; + overflow-y: hidden; +} +.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget { + --table-drag-handle-size: var(--size-4-6); +} +.markdown-source-view.mod-cm6 .cm-table-widget.is-loading { + padding: 0; + margin: 0 !important; +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-wrapper { + position: relative; + width: fit-content; +} +.markdown-source-view.mod-cm6 .cm-table-widget tr { + height: 1px; +} +.markdown-source-view.mod-cm6 .cm-table-widget th, +.markdown-source-view.mod-cm6 .cm-table-widget td { + height: inherit; + min-width: var(--table-column-min-width); + cursor: text; + overflow: visible; + padding: 0; + position: relative; +} +.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected .table-cell-wrapper, +.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected .table-cell-wrapper { + -webkit-user-select: none; + user-select: none; +} +.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected::after, +.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected::after { + pointer-events: none; + content: ""; + display: block; + position: absolute; + top: calc(-1 * var(--table-border-width)); + inset-inline-end: calc(-1 * var(--table-border-width)); + bottom: calc(-1 * var(--table-border-width)); + inset-inline-start: calc(-1 * var(--table-border-width)); + background-color: var(--table-selection); + border: 0px solid var(--table-selection-border-color); + mix-blend-mode: var(--table-selection-blend-mode); + z-index: 1; +} +.markdown-source-view.mod-cm6 .cm-table-widget th.top::after, +.markdown-source-view.mod-cm6 .cm-table-widget td.top::after { + border-top-width: var(--table-selection-border-width); + top: calc(-1 * var(--table-selection-border-width)); +} +.markdown-source-view.mod-cm6 .cm-table-widget th.bottom::after, +.markdown-source-view.mod-cm6 .cm-table-widget td.bottom::after { + border-bottom-width: var(--table-selection-border-width); + bottom: calc(-1 * var(--table-selection-border-width)); +} +.markdown-source-view.mod-cm6 .cm-table-widget.has-selection { + --text-selection: transparent; +} +.markdown-source-view.mod-cm6 .cm-table-widget.has-selection .cm-content { + caret-color: transparent; +} +.markdown-source-view.mod-cm6 .cm-table-widget.has-selection .cm-selectionLayer, +.markdown-source-view.mod-cm6 .cm-table-widget.has-selection .cm-cursorLayer { + display: none; +} +.markdown-source-view.mod-cm6 .cm-table-widget.is-selected { + --text-selection: transparent; +} +.markdown-source-view.mod-cm6 .cm-table-widget.is-selected table { + position: relative; +} +.markdown-source-view.mod-cm6 .cm-table-widget.is-selected table::after { + pointer-events: none; + content: ""; + display: block; + position: absolute; + top: calc(-1 * var(--table-border-width)); + inset-inline-end: calc(-1 * var(--table-border-width)); + bottom: calc(-1 * var(--table-border-width)); + inset-inline-start: calc(-1 * var(--table-border-width)); + background-color: var(--table-selection); +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-cell-wrapper { + height: 100%; + padding: var(--size-2-2) var(--size-4-2); +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle, +.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle { + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); + position: absolute; + display: flex; + align-items: center; + justify-content: center; + cursor: grab; + background-color: var(--table-drag-handle-background); + color: var(--table-drag-handle-color); + touch-action: none; + opacity: 0; +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle:active, +.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle:active, +.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle:hover, +.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle:hover { + opacity: 1; +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle:active, +.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle:active { + cursor: grabbing; + background-color: var(--table-drag-handle-background-active); + color: var(--table-drag-handle-color-active); + box-shadow: 0 0 0 var(--table-selection-border-width) var(--table-selection-border-color); +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle *, +.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle * { + pointer-events: none; +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle { + top: 0; + inset-inline-end: 100%; + width: calc(var(--table-drag-handle-size) - var(--table-selection-border-width)); + height: 100%; + border-start-start-radius: var(--radius-s); + border-end-start-radius: var(--radius-s); +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle { + inset-block-end: 100%; + width: 100%; + height: calc(var(--table-drag-handle-size) - var(--table-selection-border-width)); + border-start-start-radius: var(--radius-s); + border-start-end-radius: var(--radius-s); +} +.markdown-source-view.mod-cm6 .cm-table-widget.is-dragging .table-row-drag-handle, +.markdown-source-view.mod-cm6 .cm-table-widget.is-dragging .table-col-drag-handle { + display: none; +} +.markdown-source-view.mod-cm6 .cm-table-widget.is-dragging .table-row-drag-handle:active, +.markdown-source-view.mod-cm6 .cm-table-widget.is-dragging .table-col-drag-handle:active { + display: flex; +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-row-btn, +.markdown-source-view.mod-cm6 .cm-table-widget .table-col-btn { + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); + position: absolute; + display: flex; + align-items: center; + justify-content: center; + height: var(--table-drag-handle-size); + width: var(--table-drag-handle-size); + background-color: var(--table-add-button-background); + border: var(--table-add-button-border-width) solid var(--table-add-button-border-color); + color: var(--text-faint); + transition: opacity 0s 0.1s; + opacity: 0; + user-select: none; + -webkit-user-select: none; +} +@media (hover: hover) { + .markdown-source-view.mod-cm6 .cm-table-widget .table-row-btn:hover, + .markdown-source-view.mod-cm6 .cm-table-widget .table-col-btn:hover { + opacity: 1; + } +} +.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle, +.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle { + display: none; +} +.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget .mod-active-row-handle > .table-row-drag-handle, +.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget .mod-active-col-handle > .table-col-drag-handle { + opacity: 1; + display: flex; +} +.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget:not(.has-focus) .table-row-btn, +.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget:not(.has-focus) .table-col-btn { + pointer-events: none; +} +.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget.has-focus .table-row-btn, +.is-mobile .markdown-source-view.mod-cm6 .cm-table-widget.has-focus .table-col-btn { + opacity: 1; +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-row-btn { + top: 100%; + inset-inline-start: 0; + width: 100%; + border-top: none; + cursor: s-resize; +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-col-btn { + top: 0; + height: 100%; +} +.markdown-source-view.mod-cm6 .cm-table-widget .cm-content, +.markdown-source-view.mod-cm6 .cm-table-widget .cm-line { + max-width: none; +} +.markdown-source-view.mod-cm6 .cm-table-widget .cm-content { + width: auto; +} +.markdown-source-view.mod-cm6 .cm-table-widget .cm-content.cm-lineWrapping { + overflow-wrap: normal; + white-space: var(--table-white-space); + word-break: normal; +} +.markdown-source-view.mod-cm6 .cm-table-widget .cm-scroller { + overflow-y: hidden; + scrollbar-gutter: auto; + line-height: var(--table-line-height); +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-col-btn { + inset-inline-start: 100%; + border-inline-start: none; + cursor: e-resize; +} +.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.start::after, +.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.start::after { + border-inline-start-width: var(--table-selection-border-width); + inset-inline-start: calc(-1 * var(--table-selection-border-width)); +} +.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.end::after, +.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.end::after { + border-inline-end-width: var(--table-selection-border-width); + inset-inline-end: calc(-1 * var(--table-selection-border-width)); +} +.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.top.end::after, +.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.top.end::after { + border-start-end-radius: var(--table-selection-border-radius); +} +.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.bottom.end::after, +.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.bottom.end::after { + border-end-end-radius: var(--table-selection-border-radius); +} +.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.top.start::after, +.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.top.start::after { + border-start-start-radius: var(--table-selection-border-radius); +} +.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.bottom.start::after, +.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.bottom.start::after { + border-end-start-radius: var(--table-selection-border-radius); +} +.markdown-source-view.mod-cm6.is-rtl .cm-table-widget .table-col-btn, +.markdown-source-view.mod-cm6 .cm-table-widget:dir(rtl) .table-col-btn { + cursor: w-resize; +} +.markdown-source-view.mod-cm6 .cm-line { + position: relative; + padding: 0; +} +.markdown-source-view.mod-cm6 .edit-block-button { + padding: var(--size-2-2) var(--size-2-3); + position: absolute; + top: var(--size-2-2); + inset-inline-end: var(--size-2-2); + display: flex; + opacity: 0; + color: var(--text-muted); + border-radius: var(--radius-s); + cursor: var(--cursor); +} +@media (hover: hover) { + .markdown-source-view.mod-cm6 .edit-block-button:hover { + background-color: var(--background-modifier-hover); + } +} +.markdown-source-view.mod-cm6 .cm-panels { + background-color: inherit; + color: inherit; +} +.markdown-source-view.mod-cm6 .cm-panels.cm-panels-bottom { + margin-bottom: var(--safe-area-inset-bottom); + border-top: 1px solid var(--background-modifier-border); + z-index: 1; +} +.markdown-source-view.mod-cm6 .cm-panels.cm-panels-bottom input[type="text"]:focus { + background-color: transparent; + box-shadow: none; +} +.markdown-source-view.mod-cm6 img.cm-widgetBuffer { + display: inline !important; + width: 0 !important; + border: 0 !important; + margin: 0 !important; + padding: 0 !important; +} +.view-content > .markdown-source-view.mod-cm6 > .cm-editor > .cm-scroller { + padding: var(--file-margins); +} +.empty-state { + position: absolute; + height: 100%; + width: 100%; + top: 0; + inset-inline-start: 0; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; +} +.empty-state-container { + max-width: 480px; + max-height: 280px; + margin: 20px; + text-align: center; +} +.empty-state-title { + margin: 20px 0; + font-weight: var(--h2-weight); + font-size: var(--h2-size); + line-height: var(--line-height-tight); + position: relative; +} +.empty-state-action-list { + font-size: var(--font-text-size); + line-height: var(--line-height-tight); + color: var(--text-muted); + margin-top: 20px; +} +.empty-state-action { + cursor: var(--cursor); + line-height: 36px; + color: var(--text-accent); +} +@media (hover: hover) { + .empty-state-action:hover { + color: var(--text-accent-hover); + } +} +.empty-state-action.mobile-tap { + color: var(--text-accent-hover); +} +.feedback-banner-container { + display: none; + padding-top: var(--size-4-4); + padding-bottom: var(--size-4-5); + padding-right: max(var(--size-4-4), var(--safe-area-inset-right)); + padding-left: max(var(--size-4-4), var(--safe-area-inset-left)); +} +body.is-phone .feedback-banner-container { + display: block; +} +.feedback-banner { + position: relative; +} +.feedback-banner-title { + color: var(--text-muted); + font-weight: var(--font-semibold); + font-size: var(--font-ui-small); + margin-bottom: var(--size-4-4); + padding-inline-start: var(--size-4-4); +} +.feedback-banner-content { + font-size: var(--font-ui-small); + display: flex; + flex-direction: column; + row-gap: var(--size-4-4); + background-color: var(--setting-items-background); + padding: var(--size-4-4); + border-radius: var(--setting-items-radius); +} +.feedback-banner-dismiss-button { + position: absolute; + font-weight: var(--font-semibold); + top: -8px; + inset-inline-end: var(--size-4-2); + padding: var(--size-4-2) var(--size-4-1); + color: var(--interactive-accent); + font-size: var(--font-ui-smaller); +} +/* + +OS-dependent rules to make space for traffic lights buttons, +window buttons and sidebar toggles. + +--- + +Scenarios to account for: + +Window frame styles +- Hidden +- Custom +- Native +- Full screen + +Sidebar states +- Left sidebar open +- Left sidebar closed +- Right sidebar open +- Right sidebar closed +- Pop-out (no sidebars) + +Ribbon states + +- Ribbon visible +- Ribbon hidden + +*/ +body { + --zoom-factor: 1; + --titlebar-height: 30px; +} +.mod-macos { + --frame-left-space: calc(80px - var(--ribbon-width)); + --frame-right-space: 0px; +} +.mod-macos.is-popout-window { + --frame-left-space: 80px; +} +.mod-windows, +.mod-linux { + --frame-left-space: 0px; + --frame-right-space: 126px; +} +body.is-frameless.in-progress, +body.is-frameless:not(.is-hidden-frameless, .is-fullscreen) { + padding-top: calc(var(--titlebar-height) / var(--zoom-factor)); +} +body.is-frameless.in-progress .titlebar, +body.is-frameless:not(.is-hidden-frameless, .is-fullscreen) .titlebar { + height: var(--titlebar-height); + zoom: calc(1 / var(--zoom-factor)); +} +body.is-frameless.in-progress:not(.is-maximized) .titlebar, +body.is-frameless:not(.is-hidden-frameless, .is-fullscreen):not(.is-maximized) .titlebar { + padding-top: 2px; +} +body.is-frameless.is-hidden-frameless .titlebar { + height: calc(var(--header-height) - 1px); +} +body.is-frameless.is-hidden-frameless.starter .titlebar { + height: var(--titlebar-height); +} +.is-fullscreen .titlebar { + display: none; +} +.sidebar-toggle-button, +.workspace-tabs.mod-top { + --tab-container-background: var(--titlebar-background); +} +body.is-focused .titlebar, +body.is-focused .workspace-ribbon.mod-left { + --titlebar-background: var(--titlebar-background-focused); +} +body.is-focused .sidebar-toggle-button, +body.is-focused .workspace-tabs.mod-top { + --tab-container-background: var(--titlebar-background-focused); +} +.is-hidden-frameless { + --divider-vertical-height: 100%; +} +.workspace-ribbon .sidebar-toggle-button { + position: absolute; + top: 0; + left: 0; + width: var(--ribbon-width); + justify-content: center; +} +.titlebar-button.mod-logo { + width: var(--ribbon-width); + justify-content: center; +} +.is-hidden-frameless:not(.starter) .titlebar { + -webkit-app-region: no-drag; +} +.is-hidden-frameless .titlebar-button.mod-logo { + display: none; +} +body.is-frameless.in-progress { + --titlebar-background: var(--background-primary); + --titlebar-background-focused: var(--background-primary); +} +body.is-frameless.in-progress .titlebar { + display: block; + -webkit-app-region: drag; + z-index: 10001; +} +.is-hidden-frameless:not(.is-fullscreen) .workspace-tabs.mod-top-left-space .workspace-tab-header-container { + padding-left: calc(var(--size-4-2) + var(--frame-left-space)); +} +.is-hidden-frameless:not(.is-fullscreen) .workspace-tabs.mod-top-right-space .workspace-tab-header-container { + padding-right: calc(var(--size-4-2) + var(--frame-right-space)); +} +.is-hidden-frameless:not(.is-fullscreen):not(.mod-macos) .workspace-tabs.mod-top-left-space .workspace-tab-header-container:before { + -webkit-app-region: no-drag; + content: ''; + height: 100%; + left: 0; + top: 0; + position: absolute; + width: var(--frame-left-space); +} +.is-hidden-frameless:not(.is-fullscreen):not(.mod-macos) .workspace-tabs.mod-top-right-space .workspace-tab-header-container:after { + -webkit-app-region: no-drag; + content: ''; + height: 100%; + right: 0; + top: 0; + position: absolute; + width: var(--frame-right-space); +} +.is-hidden-frameless:not(.is-fullscreen) .titlebar-button-container.mod-right { + background-color: var(--titlebar-background); +} +.is-hidden-frameless:not(.is-fullscreen).is-focused .titlebar-button-container.mod-right { + background-color: var(--titlebar-background-focused); +} +.titlebar-button.mod-logo:hover .logo-wireframe, +.titlebar-button.mod-logo:not(:hover) .logo-full { + display: none; +} +body.is-frameless > .app-container ~ * { + -webkit-app-region: no-drag; +} +body.is-frameless .modal-container, +body.is-frameless .suggestion-bg { + -webkit-app-region: initial; +} +body.is-frameless .modal { + -webkit-app-region: no-drag; +} +.loader-spinner { + --icon-size: var(--icon-xl); + --icon-stroke: var(--icon-l-stroke-width); + width: var(--size-4-8); + height: var(--size-4-8); + margin: 100px auto; + color: var(--interactive-accent); +} +.loader-spinner svg { + animation: spin 1s ease infinite; +} +.loader-cube { + width: 40px; + height: 40px; + margin: 100px auto; +} +.loader-cube .sk-cube { + width: 33%; + height: 33%; + background-color: var(--interactive-accent); + float: left; + float: inline-start; + -webkit-animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out; + animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out; +} +.loader-cube .sk-cube1 { + -webkit-animation-delay: 0.2s; + animation-delay: 0.2s; +} +.loader-cube .sk-cube2 { + -webkit-animation-delay: 0.3s; + animation-delay: 0.3s; +} +.loader-cube .sk-cube3 { + -webkit-animation-delay: 0.4s; + animation-delay: 0.4s; +} +.loader-cube .sk-cube4 { + -webkit-animation-delay: 0.1s; + animation-delay: 0.1s; +} +.loader-cube .sk-cube5 { + -webkit-animation-delay: 0.2s; + animation-delay: 0.2s; +} +.loader-cube .sk-cube6 { + -webkit-animation-delay: 0.3s; + animation-delay: 0.3s; +} +.loader-cube .sk-cube7 { + -webkit-animation-delay: 0s; + animation-delay: 0s; +} +.loader-cube .sk-cube8 { + -webkit-animation-delay: 0.1s; + animation-delay: 0.1s; +} +.loader-cube .sk-cube9 { + -webkit-animation-delay: 0.2s; + animation-delay: 0.2s; +} +@-webkit-keyframes sk-cubeGridScaleDelay { + 0%, + 70%, + 100% { + -webkit-transform: scale3D(1, 1, 1); + transform: scale3D(1, 1, 1); + } + 35% { + -webkit-transform: scale3D(0, 0, 1); + transform: scale3D(0, 0, 1); + } +} +@keyframes sk-cubeGridScaleDelay { + 0%, + 70%, + 100% { + -webkit-transform: scale3D(1, 1, 1); + transform: scale3D(1, 1, 1); + } + 35% { + -webkit-transform: scale3D(0, 0, 1); + transform: scale3D(0, 0, 1); + } +} +.is-loading { + position: relative; +} +.is-loading:before { + content: ' '; + position: absolute; + top: 0; + width: 0; + height: 3px; + background-color: var(--interactive-accent); + animation: 1000ms ease-in-out 300ms infinite progress-bar; +} +.pane-empty { + color: var(--text-faint); + font-size: var(--font-ui-small); + margin: var(--size-4-2) auto; + padding: var(--size-4-6) var(--size-4-4); + text-align: center; +} +.pane-empty .pane-empty-actions { + margin-top: var(--size-4-4); +} +.view-header { + height: var(--header-height); + display: flex; + border-bottom: var(--file-header-border); + background-color: var(--file-header-background); + z-index: 1; + position: relative; + gap: var(--size-4-2); + padding: 0 var(--size-4-3); +} +body:not(.show-view-header):not(.is-phone) .view-header { + display: none; +} +.is-focused .workspace-leaf.mod-active .view-header { + background-color: var(--file-header-background-focused); +} +.workspace-split.mod-left-split .view-header, +.workspace-split.mod-right-split .view-header, +.workspace-fake-target-overlay.is-in-sidebar .view-header { + display: none; +} +.view-header.is-highlighted:after { + content: ' '; + position: absolute; + width: 100%; + height: 100%; + top: 0; + inset-inline-start: 0; + background-color: hsla(var(--interactive-accent-hsl), 0.5); +} +.view-header-left { + display: flex; + align-items: center; + justify-content: flex-start; +} +.view-header-title-container { + font-family: var(--file-header-font); + font-size: var(--file-header-font-size); + font-weight: var(--file-header-font-weight); + flex: 1 1 auto; + overflow: hidden; + position: relative; + justify-content: var(--file-header-justify); + display: flex; + align-items: center; + gap: var(--size-4-1); + min-width: 0; +} +.view-header-title-parent { + color: var(--text-muted); + flex: 0 100 auto; + display: flex; + gap: 0; + overflow: hidden; + white-space: nowrap; +} +.view-header-title-parent:empty { + display: none; +} +.view-header-title-parent .view-header-breadcrumb { + padding: 2px 4px; + border-radius: var(--radius-s); + overflow: hidden; + text-overflow: ellipsis; +} +.view-header-title-parent .view-header-breadcrumb.has-active-menu { + background-color: var(--background-modifier-hover); + color: var(--text-normal); +} +@media (hover: hover) { + .view-header-title-parent .view-header-breadcrumb:hover { + background-color: var(--background-modifier-hover); + color: var(--text-normal); + } +} +.view-header-title-parent .view-header-breadcrumb-separator { + padding: 2px 1px; + color: var(--text-faint); +} +.view-header-title { + flex: 0 0 auto; + max-width: 100%; + word-wrap: normal; + color: var(--text-muted); + overflow: hidden; + scroll-padding-inline-end: 20px; + text-overflow: ellipsis; + white-space: pre; +} +.view-header-title:focus-within { + max-width: 100%; + overflow: auto; + text-overflow: unset; +} +.is-focused .workspace-leaf.mod-active .view-header-title { + color: var(--text-normal); +} +.view-header-title::-webkit-scrollbar { + display: none; +} +.view-content { + width: 100%; + height: calc(100% - var(--header-height)); +} +.workspace-split.mod-root .view-content { + background-color: var(--background-primary); +} +.workspace-split.mod-root .workspace-fake-target-overlay .view-content { + background-color: transparent; +} +.workspace-split.mod-left-split .view-content, +.workspace-split.mod-right-split .view-content { + height: 100%; + overflow: auto; +} +.inline-title { + color: var(--inline-title-color); + white-space: pre-wrap; + margin-block-end: var(--inline-title-margin-bottom); +} +.inline-title:not([data-level]) { + font-size: var(--inline-title-size); + font-weight: var(--inline-title-weight); + line-height: var(--inline-title-line-height); + font-style: var(--inline-title-style); + font-variant: var(--inline-title-variant); + font-family: var(--inline-title-font); + letter-spacing: -0.015em; +} +.inline-title h1, +.inline-title h2, +.inline-title h3, +.inline-title h4, +.inline-title h5, +.inline-title h6 { + margin-block-start: 0; + margin-block-end: 0; +} +.hover-popover .inline-title, +.inline-embed .inline-title { + display: none; +} +.hover-popover.bases-new-item-popover .inline-title, +.hover-popover .markdown-embed[data-type="heading"] .inline-title { + display: block; +} +body:not(.show-inline-title) .inline-title:not([data-level]) { + display: none; +} +body:not(.show-inline-title) .bases-new-item-popover .inline-title { + display: block; +} +::selection { + background-color: var(--text-selection); +} +.markdown-reading-view { + display: flex; + flex-direction: column; +} +.markdown-preview-view { + font-size: var(--font-text-size); + font-family: var(--font-text); + line-height: var(--line-height-normal); + width: 100%; + height: 100%; + padding: var(--file-margins); + position: relative; + overflow-y: auto; + overflow-wrap: break-word; + color: var(--text-normal); + user-select: text; + -webkit-user-select: text; + scrollbar-gutter: stable; +} +.workspace-leaf-content.is-read-mode .markdown-preview-view { + width: 100%; + inset-inline-start: 0; + background-color: var(--background-primary); +} +.markdown-preview-view.is-readable-line-width .markdown-preview-sizer { + max-width: var(--file-line-width); + margin-left: auto; + margin-right: auto; +} +.markdown-rendered { + tab-size: var(--indent-size); +} +.markdown-rendered.rtl { + direction: rtl; +} +.markdown-rendered > :first-child { + margin-top: 0; +} +.markdown-rendered > :last-child { + margin-bottom: 0; +} +.markdown-rendered > .markdown-preview-section > .markdown-preview-pusher + div:not(.mod-ui) > :first-child, +.markdown-rendered > .markdown-preview-section > .mod-ui + div:not(.mod-ui) > :first-child { + margin-top: 0; +} +.markdown-rendered > .markdown-preview-section > div:last-child > :last-child { + margin-bottom: 0; +} +/* Ribbon */ +/* Add background to top left corner space above ribbon */ +.workspace-ribbon.mod-left { + margin-top: var(--header-height); + /* Add the tab background in the top left corner */ +} +.workspace-ribbon.mod-left:before { + -webkit-app-region: drag; + position: absolute; + left: 0; + top: 0; + background-color: var(--titlebar-background); + content: " "; + border-bottom: var(--tab-outline-width) solid var(--tab-outline-color); + height: var(--header-height); + width: var(--ribbon-width); + box-sizing: border-box; +} +body:not(.show-ribbon) { + --ribbon-width: 0px; +} +body:not(.show-ribbon) .workspace-ribbon, +body:not(.show-ribbon) .side-dock-ribbon { + display: none; +} +.workspace-ribbon { + width: var(--ribbon-width); + flex: 0 0 var(--ribbon-width); + display: flex; + flex-direction: column; + overflow: hidden; + background-color: var(--ribbon-background); + z-index: var(--layer-sidedock); + color: var(--text-muted); + padding: var(--ribbon-padding); + gap: var(--size-4-1); + border-right: var(--divider-width) solid var(--divider-color); +} +.workspace-ribbon.mod-left.is-collapsed { + transition: background-color 250ms 95ms ease-in-out; + background-color: var(--ribbon-background-collapsed); + border-right-color: var(--divider-color); +} +.workspace-ribbon.mod-right { + display: none; +} +.workspace-ribbon.is-hidden { + display: none; +} +.workspace-ribbon.is-collapsed { + background-color: var(--background-secondary); +} +.side-dock-settings, +.side-dock-actions { + flex-direction: column; +} +.side-dock-settings .side-dock-ribbon-action, +.side-dock-actions .side-dock-ribbon-action { + margin: 0 auto; +} +.side-dock-settings { + margin-top: auto; +} +.release-notes-view { + padding: var(--file-margins); +} +.release-notes-view .markdown-preview-view { + overflow: visible; +} +.release-notes-view .is-readable-line-width { + max-width: var(--file-line-width); + margin-left: auto; + margin-right: auto; +} +/* Todo: remove this once the sidebars are flipped in RTL mode + otherwise the top right sidebar button opens the left sidebar */ +.is-phone .view-header { + direction: ltr; +} +/* Use a different bidi algorithm to account for + mixed content in single line content both in LTR or RTL mode. + This is important for mixed-language users and also + to properly display untranslated strings. +*/ +.bases-toolbar-result-count, +.community-item-desc, +.community-modal-info-desc, +.community-modal-search-summary, +.inline-title, +.inline-title h1, +.metadata-property-key-input, +.metadata-input-longtext, +.multi-select-pill-content, +.nav-file-title-content, +.nav-folder-title-content, +.search-result-file-match, +.setting-item-description, +.setting-item-name, +.suggestion-title, +.bases-table-header-name, +.table-cell-wrapper, +.titlebar-text, +.tooltip, +.tree-item-inner, +.view-header-breadcrumb, +.view-header-title, +.workspace-tab-header-inner-title, +input { + unicode-bidi: plaintext; +} +/* Calculate horizontal positions where text direction matters + but start/end values are not available, e.g. transforms used + for folding indicators +*/ +body, +[dir='ltr'] { + --direction: 1; + --inset-start: left; + --inset-end: right; +} +.mod-rtl, +[dir='rtl'] { + --direction: -1; + --inset-start: right; + --inset-end: left; +} +@supports selector(:dir(rtl)) { + .is-collapsed:dir(ltr), + .cm-line:dir(ltr) { + --direction: 1; + } + .is-collapsed:dir(rtl), + .cm-line:dir(rtl) { + --direction: -1; + } +} +.mod-rtl, +.is-rtl, +.rtl { + --callout-padding: var(--size-4-3) var(--size-4-6) var(--size-4-3) var(--size-4-3); + --embed-padding: 0 var(--size-4-6) 0 0; + --nav-item-padding: var(--size-4-1) var(--size-4-6) var(--size-4-1) var(--size-4-2); +} +.mod-rtl .metadata-container, +.is-rtl .metadata-container, +.rtl .metadata-container { + --direction: -1; +} +.mod-rtl .metadata-container, +.is-rtl .metadata-container, +.rtl .metadata-container, +.mod-rtl input.metadata-input-number, +.is-rtl input.metadata-input-number, +.rtl input.metadata-input-number, +.mod-rtl input.metadata-property-key-input, +.is-rtl input.metadata-property-key-input, +.rtl input.metadata-property-key-input { + text-align: right; +} +.mod-rtl .bases-embed, +.is-rtl .bases-embed, +.rtl .bases-embed { + direction: rtl; +} +@supports selector(:has(*)) { + .mod-rtl .cm-line:has(.cm-hmd-frontmatter), + .is-rtl .cm-line:has(.cm-hmd-frontmatter), + .rtl .cm-line:has(.cm-hmd-frontmatter) { + direction: rtl; + } +} +.mod-rtl input[type='date'], +.is-rtl input[type='date'], +.rtl input[type='date'], +.mod-rtl input[type='datetime-local'], +.is-rtl input[type='datetime-local'], +.rtl input[type='datetime-local'] { + direction: rtl; +} +.mod-rtl input[type='date']::-webkit-calendar-picker-indicator, +.is-rtl input[type='date']::-webkit-calendar-picker-indicator, +.rtl input[type='date']::-webkit-calendar-picker-indicator, +.mod-rtl input[type='datetime-local']::-webkit-calendar-picker-indicator, +.is-rtl input[type='datetime-local']::-webkit-calendar-picker-indicator, +.rtl input[type='datetime-local']::-webkit-calendar-picker-indicator { + right: var(--size-4-1); + left: auto; +} +/* Callouts + Remember that callouts can be nested, so text direction can + change within a nested set of callouts +*/ +@supports selector(:has(*)) { + .cm-callout:has(.callout .callout-title .callout-title-inner:dir(rtl)), + .callout:has( > .callout-title .callout-title-inner:dir(rtl)) { + direction: rtl; + } + .cm-callout:has(.callout .callout-title .callout-title-inner:dir(rtl)) > .callout-title, + .callout:has( > .callout-title .callout-title-inner:dir(rtl)) > .callout-title { + direction: rtl; + --direction: -1; + } + .cm-callout:has(.callout .callout-title .callout-title-inner:dir(rtl)) > .callout-title .callout-icon svg.svg-icon, + .callout:has( > .callout-title .callout-title-inner:dir(rtl)) > .callout-title .callout-icon svg.svg-icon { + transform: scale(-1, 1); + } +} +/* When Obsidian interface language is set to RTL language, mirror the UI */ +.mod-rtl { + --tab-stacked-text-transform: rotate(180deg); + /* Not RTL: + - Code blocks + - Canvas wrapper + - Community directory + */ + /* Set text direction on interface elements */ + /* Force right-align on UI elements that respond to content direction + to improve readability and avoid text bouncing between LTR/RTL */ + /* Since sidebars are not (yet) reversed but the tab header icons are + we need to reverse the position of the sidebar toggles*/ + /* Stacked tabs */ + /* Mirror directional UI components, e.g. toggles */ + /* Mirror icons */ +} +.mod-rtl.is-mobile { + --nav-item-padding: var(--size-2-3) var(--size-4-6) var(--size-2-3) var(--size-4-2); +} +.mod-rtl .community-modal-readme, +.mod-rtl .canvas-wrapper { + direction: ltr; +} +.mod-rtl .workspace-sidedock-vault-profile, +.mod-rtl .modal, +.mod-rtl .notice, +.mod-rtl .prompt, +.mod-rtl .titlebar, +.mod-rtl .tooltip, +.mod-rtl .workspace-tab-container, +.mod-rtl .workspace-tab-header-container, +.mod-rtl .workspace-drawer, +.mod-rtl .mobile-navbar-actions, +.mod-rtl .status-bar, +.mod-rtl .suggestion-container, +.mod-rtl .menu, +.mod-rtl .bases-toolbar-menu, +.mod-rtl .popover { + direction: rtl; +} +.mod-rtl .workspace-tab-header-inner-title, +.mod-rtl .setting-item-description, +.mod-rtl .setting-item-name, +.mod-rtl input { + text-align: right; +} +.mod-rtl .sidebar-toggle-button { + order: 2; +} +.mod-rtl .sidebar-toggle-button.mod-right { + order: -1; +} +.mod-rtl .canvas-card-menu { + flex-direction: row-reverse; +} +.mod-rtl .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container { + flex-direction: row-reverse; +} +.mod-rtl .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner { + flex-direction: row-reverse; +} +.mod-rtl .search-input-container:before, +.mod-rtl .checkbox-container { + transform: scale(-1, 1); +} +.mod-rtl svg.svg-icon:not( + .check-small, + .lucide-binary, + .lucide-check, + .lucide-check-square, + .lucide-clock, + .lucide-code-2, + .lucide-square-function, + .lucide-timer, + .sidebar-toggle-button-icon + ) { + transform: scale(-1, 1); +} +[lang="he"] svg.svg-icon:is( + .lucide-help-circle, + .help + ) { + transform: scale(1, 1); +} +.setting { + display: flex; + align-items: center; +} +.setting-text { + flex-grow: 1; +} +.setting-title { + font-size: var(--font-ui-large); + line-height: var(--line-height-normal); +} +.setting-explanation { + color: var(--text-muted); +} +.modal.mod-new-editor { + max-width: 600px; +} +.modal.mod-trust-folder { + max-width: 700px; +} +.modal.mod-plugin-debug { + max-width: 500px; +} +.modal.mod-plugin-debug .startup-stat-list, +.modal.mod-plugin-debug .startup-timing-list { + display: flex; + flex-direction: column; + margin: var(--size-4-4) 0; +} +.modal.mod-plugin-debug .startup-stat { + display: flex; + flex-direction: row; + font-size: var(--font-ui-medium); + padding: var(--size-4-1) 0; + gap: var(--size-4-2); +} +.modal.mod-plugin-debug .startup-stat:not(:last-child) { + border-bottom: var(--border-width) solid var(--background-modifier-border); +} +.modal.mod-plugin-debug .startup-stat.mod-heading .startup-label, +.modal.mod-plugin-debug .startup-stat.mod-heading .startup-value { + font-weight: var(--font-semibold); +} +.modal.mod-plugin-debug .startup-info { + flex-grow: 1; + white-space: nowrap; +} +.modal.mod-plugin-debug .startup-desc { + margin-inline: var(--size-4-2); + color: var(--text-faint); + font-size: var(--font-ui-smaller); +} +.modal.mod-plugin-debug .startup-value { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + font-variant-numeric: tabular-nums; + text-align: end; + width: 50%; +} +.modal.mod-settings { + background-color: var(--settings-background, var(--modal-background)); +} +.modal.mod-settings .vertical-tab-header { + flex: 0 0 25%; + min-width: 180px; + max-width: 250px; + overflow: auto; + border-inline-end: var(--border-width) solid var(--divider-color); +} +.modal.mod-settings .modal-content { + margin-top: 0; + overflow: hidden; +} +.modal.mod-plugin-options .modal-content { + margin: var(--size-4-6) 0; +} +.modal.mod-form { + max-width: 400px; +} +.form-field { + display: flex; + flex-direction: column; + gap: var(--size-4-2); +} +.setting-group + .setting-group { + margin-top: var(--size-4-6); +} +.setting-group .setting-group-search { + background-color: var(--setting-items-background); + padding: var(--setting-items-padding); + border-top-left-radius: var(--setting-items-radius); + border-top-right-radius: var(--setting-items-radius); + border: var(--setting-items-border-width) solid var(--setting-items-border-color); + border-bottom: none; +} +.setting-group .setting-group-search + .setting-items { + border-top-left-radius: 0; + border-top-right-radius: 0; + padding-top: 0; + border-top: none; +} +.setting-group .setting-items { + background-color: var(--setting-items-background); + padding: var(--setting-items-padding); + border-radius: var(--setting-items-radius); + -electron-corner-smoothing: var(--corner-smoothing); + border: var(--setting-items-border-width) solid var(--setting-items-border-color); +} +.setting-group .setting-items:empty { + display: none; +} +.setting-group .setting-item { + border: none; + border-top: var(--border-width) solid var(--background-modifier-border); + background-color: transparent; + border-radius: 0; + padding: var(--size-4-4) 0; + margin-bottom: 0; +} +.setting-group .setting-item:first-child { + padding-top: 0; + border-top: none; +} +.setting-group .setting-item:last-child { + padding-bottom: 0; +} +.setting-group .setting-item-heading { + padding: 0 var(--size-4-4); + flex-wrap: wrap; + background-color: transparent; + margin-bottom: var(--size-4-4); +} +.setting-item { + display: flex; + align-items: center; + row-gap: var(--size-4-3); + border-radius: var(--setting-items-radius); + background-color: var(--setting-items-background); + padding: var(--size-4-4); + margin-bottom: var(--size-4-2); + border: var(--setting-items-border-width) solid var(--setting-items-border-color); + /* Add extra space for setting heading if it starts a new section */ +} +.setting-item + div > .setting-item-heading, +.setting-item + .setting-item-heading { + margin-top: 0.75em; +} +.setting-item > *:first-child { + margin-inline-end: var(--size-4-4); +} +.setting-item > *:last-child { + margin-inline-end: 0; +} +.modal:not(.mod-settings) .setting-item:not(.setting-item-heading) { + padding: var(--size-4-4) 0; + border-top: var(--border-width) solid var(--background-modifier-border); + background-color: transparent; + border-radius: 0; + margin-bottom: 0; +} +.modal:not(.mod-settings) .setting-item:not(.setting-item-heading):first-child { + border-top: none; + padding-top: 0; +} +.modal:not(.mod-settings) .setting-item:not(.setting-item-heading):last-child { + padding-bottom: 0; +} +@container (max-width: 340px) { + .setting-item:not(.mod-toggle):not(.setting-item-heading) { + flex-direction: column; + } + .setting-item:not(.mod-toggle):not(.setting-item-heading) .setting-item-info { + margin-inline-end: 0; + align-self: flex-start; + } + .setting-item:not(.mod-toggle):not(.setting-item-heading) .setting-item-control { + width: 100%; + justify-content: flex-start; + } + .setting-item:not(.mod-toggle):not(.setting-item-heading) .setting-item-control button:not(.clickable-icon), + .setting-item:not(.mod-toggle):not(.setting-item-heading) .setting-item-control input, + .setting-item:not(.mod-toggle):not(.setting-item-heading) .setting-item-control select { + width: 100%; + max-width: 100%; + } +} +.setting-item.mod-cta { + justify-content: center; +} +.setting-item-heading { + border-top: none; + background-color: transparent; + color: var(--setting-group-heading-color); + font-size: var(--setting-group-heading-size); + font-weight: var(--setting-group-heading-weight); + padding: 0 var(--size-4-4); + margin: 0 0 var(--size-4-4); +} +.setting-item-heading .setting-item-name { + color: var(--setting-group-heading-color); + font-size: var(--setting-group-heading-size); + font-weight: var(--setting-group-heading-weight); +} +.setting-item-heading .setting-item-info { + flex-grow: 0; + margin-inline-end: 0; +} +.setting-item-heading .setting-item-description { + font-weight: var(--font-normal); + flex-basis: 100%; + padding-top: 0; + font-size: var(--font-ui-small); +} +.vertical-tab-content h1, +.vertical-tab-content h2, +.vertical-tab-content h3, +.vertical-tab-content h4 { + color: var(--setting-group-heading-color); + font-size: var(--setting-group-heading-size); + font-weight: var(--setting-group-heading-weight); + padding: 0 var(--size-4-4); + margin: 0 0 var(--size-4-4); +} +.vertical-tab-content .setting-item ~ :is(h1, h2, h3, h4, .setting-item-heading) { + margin-top: var(--size-4-6); +} +.setting-item-info { + flex: 1 1 auto; + min-width: 0; +} +.setting-item-description { + color: var(--text-muted); + font-size: var(--font-ui-smaller); + padding-top: var(--size-4-1); + line-height: var(--line-height-tight); + overflow: hidden; + text-overflow: ellipsis; +} +.setting-item-description:empty { + display: none; +} +.setting-item-description code { + font-family: var(--font-monospace); + font-size: var(--font-smaller); + border-radius: var(--radius-s); + padding: 0 3px 2px 3px; + position: relative; + bottom: 1px; +} +.setting-item-description ul { + margin: var(--size-4-1) 0; + padding-inline-start: var(--size-4-6); +} +.setting-item-name { + color: var(--text-normal); + font-size: var(--font-ui-medium); + line-height: var(--line-height-tight); + text-overflow: ellipsis; + overflow: hidden; +} +.setting-item-control { + flex: 1 1 auto; + text-align: end; + display: flex; + justify-content: flex-end; + align-items: center; + gap: var(--size-4-2); +} +.setting-item-control:empty { + display: none; +} +.setting-item-control.mod-vertical { + flex-direction: column; +} +.setting-item-control.mod-vertical > *:not(:last-child) { + margin-bottom: 10px; + margin-inline-end: 0; +} +.setting-item-control.mod-hotkey { + padding-top: 0; + cursor: default; +} +.setting-item-control.mod-hotkey input { + font-family: var(--font-monospace); + font-size: var(--font-smaller); +} +.setting-item-control.mod-hotkey input:focus { + background-color: var(--interactive-accent); + color: var(--text-on-accent); +} +.setting-item-control select { + width: inherit; + max-width: 400px; +} +.setting-command-hotkeys { + display: flex; + flex-wrap: wrap; + gap: var(--size-4-1); +} +.setting-hotkey { + font-family: -apple-system, BlinkMacSystemFont, var(--font-monospace); + font-size: var(--font-ui-small); + background-color: var(--background-modifier-hover); + border-radius: var(--radius-s); + padding: 2px 4px 2px 8px; + align-self: flex-end; + white-space: nowrap; + display: flex; + align-items: center; + gap: var(--size-4-1); +} +.setting-hotkey.has-conflict { + background-color: var(--background-modifier-error); + color: var(--text-on-accent); +} +@media (hover: hover) { + .setting-hotkey.has-conflict:hover { + background-color: var(--background-modifier-error-hover); + } +} +.setting-hotkey.mod-active { + background-color: var(--interactive-accent); + color: var(--text-on-accent); +} +.setting-hotkey.mod-empty { + padding-inline-end: var(--size-4-2); +} +.setting-password { + white-space: nowrap; + text-overflow: ellipsis; + max-width: 10ch; + overflow: hidden; +} +.setting-hotkey-icon { + display: flex; + align-items: center; + cursor: var(--cursor); + border-radius: 50%; + line-height: 1; + text-align: center; +} +.setting-hotkey-icon .svg-icon { + width: 16px; + height: 16px; + stroke-width: 2px; + opacity: 0.6; +} +@media (hover: hover) { + .setting-hotkey-icon:hover .svg-icon { + opacity: 1; + } +} +@media (hover: hover) { + .setting-delete-hotkey:hover { + background-color: var(--background-modifier-error); + color: var(--text-on-accent); + } +} +.setting-add-hotkey-button, +.setting-restore-hotkey-button { + padding: var(--size-2-2); + border-radius: var(--radius-s); + color: var(--text-faint); + cursor: var(--cursor); + height: calc(var(--icon-l) + var(--size-2-2) + var(--size-2-2)); +} +.setting-add-hotkey-button.mod-active, +.setting-restore-hotkey-button.mod-active { + color: var(--text-accent); +} +@media (hover: hover) { + .setting-add-hotkey-button:hover, + .setting-restore-hotkey-button:hover { + background-color: var(--background-modifier-hover); + color: var(--text-normal); + } +} +.extra-setting-button { + line-height: 0; +} +.setting-message { + font-size: var(--font-ui-small); +} +.setting-font-list { + margin: 1.5em 0 0.75em 0; +} +.hotkey-settings-container { + display: flex; + flex-direction: column; +} +.hotkey-settings-container .setting-item-description { + padding-top: 0; +} +.hotkey-settings-container hr { + margin: 20px 0 10px 0; +} +.hotkey-list-container { + overflow: auto; +} +.hotkey-header-container { + justify-content: space-between; + padding-bottom: var(--size-4-8); + display: flex; + flex-wrap: wrap; +} +.hotkey-filter { + align-items: center; + background-color: var(--background-modifier-hover); + border-radius: var(--radius-s); + display: flex; + font-size: var(--font-ui-small); + padding: var(--size-4-1) var(--size-4-1) var(--size-4-1) var(--size-4-2); + gap: var(--size-2-1); +} +.setting-filter-container { + display: flex; + gap: var(--size-4-2); + margin-bottom: var(--size-4-4); +} +.input-right-decorator { + position: absolute; + transform: translateY(-50%); + top: 50%; + inset-inline-end: var(--input-icon-inset); +} +.search-input-container.mod-hotkey .clickable-icon { + padding: var(--size-2-1); +} +.hotkey-filter-remove-button { + cursor: var(--cursor); + color: var(--text-muted); + padding: var(--size-2-1); + border-radius: var(--radius-s); + display: flex; + align-items: center; + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); +} +@media (hover: hover) { + .hotkey-filter-remove-button:hover { + background-color: var(--background-modifier-hover); + } +} +.modal.mod-image-lightbox { + max-width: 90vw; + max-height: 90vh; + padding: 0; +} +.modal.mod-image-lightbox .modal-content { + padding: var(--size-4-12) var(--size-4-3) var(--size-4-2) var(--size-4-3); + text-align: center; +} +.spellchecker-dictionary-container { + max-height: 60vh; + overflow: auto; +} +.spellchecker-dictionary-item { + display: flex; + margin-bottom: 10px; +} +.spellchecker-dictionary-word { + flex-grow: 1; +} +.spellchecker-dictionary-remove-button { + cursor: var(--cursor); + color: var(--text-muted); + margin-inline-end: 10px; +} +@media (hover: hover) { + .spellchecker-dictionary-remove-button:hover { + color: var(--text-normal); + } +} +.modal.mod-new-editor .card, +.modal.mod-restricted-mode .card { + flex: 1 0 0; +} +.input-right-decorator { + position: absolute; + transform: translateY(-50%); + top: 50%; + inset-inline-end: var(--input-icon-inset); +} +.input-right-decorator.clickable-icon { + padding: var(--size-2-1) var(--size-2-2); +} +.input-right-decorator.clickable-icon.is-active { + background-color: transparent; +} +.search-input-container input:placeholder-shown ~ .search-input-clear-button { + display: none; +} +.search-input-container input:not(:placeholder-shown) { + padding-inline-end: 28px; +} +.global-search-input-container.search-input-container input:not(:placeholder-shown) { + padding-inline-end: 56px; +} +.search-input-container input:not(:placeholder-shown) ~ .input-right-decorator { + inset-inline-end: calc(var(--input-icon-inset) + 28px); +} +.setting-progress-bar { + width: 100%; + height: var(--size-4-2); + border-radius: var(--radius-s); + background-color: var(--background-secondary); + box-shadow: inset 0 0 0 1px var(--background-modifier-border); +} +.setting-progress-bar-inner { + width: 0; + height: 100%; + border-radius: var(--radius-s); + background-color: var(--interactive-accent); +} +.modal.mod-secret .suggestion-filter-toolbar { + display: flex; + padding: var(--size-4-4) var(--size-4-4) 0 var(--size-4-4); + gap: var(--size-4-2); +} +.modal.mod-secret .suggestion-filter-toolbar .search-input-container { + flex: 1; +} +.modal.mod-secret .modal-content.keychain-list-results { + border-top: var(--border-width) solid var(--background-modifier-border); + padding: var(--size-4-1) var(--size-4-4); + height: 300px; +} +.suggestion-item.mod-complex.suggestion-secret-key { + --checkbox-size: 18px; + align-items: center; + gap: var(--size-4-1); +} +.suggestion-item.mod-complex.suggestion-secret-key.is-selected { + background-color: hsla(var(--color-accent-hsl), 0.15); +} +.suggestion-item.mod-complex.suggestion-secret-key .flair { + color: var(--text-accent); +} +.suggestion-item.mod-complex.suggestion-secret-key .suggestion-content { + align-items: center; + flex-direction: row; +} +.suggestion-item.mod-complex.suggestion-secret-key .suggestion-secret-text { + margin: 0 var(--size-4-1); +} +.mod-community-modal .modal-sidebar .setting-item:not(.setting-item-heading) { + max-width: var(--modal-community-sidebar-width); + padding: 0 var(--size-4-3) var(--size-4-1); + border: none; + gap: var(--size-4-2); + background-color: transparent; +} +.mod-community-modal .modal-sidebar .setting-item:not(.setting-item-heading):first-child { + max-width: 500px; + gap: 0; + margin-bottom: var(--size-4-2); +} +.mod-community-modal .modal-sidebar .setting-item-name { + font-size: var(--font-ui-small); + padding-inline-start: var(--size-4-1); +} +.mod-community-modal .modal-sidebar .setting-item-info { + margin: 0; + flex-grow: 0; +} +.mod-community-modal .modal-sidebar .search-input-container { + width: 100%; +} +.mod-community-modal .modal-sidebar button.clickable-icon { + padding: 6px 10px; + display: flex; + align-items: center; + color: var(--text-normal); +} +.community-modal-details-empty-state { + padding: 0; + text-align: center; +} +.community-modal-search-summary { + font-size: var(--font-ui-small); + padding: var(--size-4-1) var(--size-4-3) var(--size-4-3) var(--size-4-4); +} +.community-modal-search-results-wrapper { + flex: 1 0 auto; + overflow: auto; + border-top: var(--border-width) solid var(--divider-color); + scroll-padding: var(--size-4-3); + /* This helps with performance of the app */ + contain: strict; +} +.community-modal-search-results { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); + gap: var(--size-4-3); + padding: var(--size-4-3); +} +.community-modal-search-results-status { + position: absolute; + bottom: max(var(--size-4-3), var(--safe-area-inset-bottom)); + margin-left: max(var(--size-4-2), var(--safe-area-inset-left)); + margin-right: max(var(--size-4-2), var(--safe-area-inset-right)); + left: 0; + right: 0; + display: flex; + justify-content: center; +} +.community-modal-search-results-status-content { + background-color: var(--background-primary); + text-align: center; + padding: var(--size-4-2) var(--size-4-3); + border: var(--border-width) solid var(--background-modifier-border); + border-radius: var(--radius-l); + display: flex; + align-items: center; + gap: var(--size-4-2); +} +.community-modal-search-results-cta { + display: flex; + align-items: center; + justify-content: center; + color: var(--text-accent); + white-space: nowrap; + cursor: var(--cursor); +} +@media (hover: hover) { + .community-modal-search-results-cta:hover { + color: var(--text-accent-hover); + } +} +.community-modal-search-results-cta.mobile-tap { + color: var(--text-accent-hover); +} +.community-modal-empty-state { + color: var(--text-muted); + display: flex; + align-items: center; + justify-content: center; + height: 100%; + flex-direction: column; +} +body:not(.is-phone) .community-item.is-selected, +body:not(.is-phone) .community-item.is-selected:hover { + border-color: var(--interactive-accent); + background-color: var(--interactive-accent); + color: var(--text-on-accent); +} +body:not(.is-phone) .community-item.is-selected .community-item-author, +body:not(.is-phone) .community-item.is-selected:hover .community-item-author, +body:not(.is-phone) .community-item.is-selected .community-item-repo, +body:not(.is-phone) .community-item.is-selected:hover .community-item-repo, +body:not(.is-phone) .community-item.is-selected .community-item-downloads, +body:not(.is-phone) .community-item.is-selected:hover .community-item-downloads, +body:not(.is-phone) .community-item.is-selected .community-item-updated, +body:not(.is-phone) .community-item.is-selected:hover .community-item-updated { + color: var(--text-on-accent); + opacity: 0.8; +} +body:not(.is-phone) .community-item.is-selected .flair, +body:not(.is-phone) .community-item.is-selected:hover .flair { + --flair-color: var(--text-on-accent); + --flair-background: transparent; +} +.community-item { + position: relative; + background-color: var(--background-primary); + padding: var(--size-4-3); + cursor: var(--cursor); + border-radius: var(--radius-m); + border: var(--border-width) solid var(--background-modifier-border); + display: flex; + flex-direction: column; + gap: var(--size-2-1); +} +.community-item:last-child { + margin-bottom: 0; +} +.community-item .suggestion-highlight { + background-color: var(--text-highlight-bg); +} +@media (hover: hover) { + .community-item:hover { + border-color: var(--background-modifier-border-hover); + } +} +.community-item.mobile-tap { + background-color: var(--background-modifier-hover); +} +.is-mobile .community-item { + max-width: 500px; +} +.community-item .flair { + --flair-background: var(--background-modifier-active-hover); + --flair-color: var(--text-accent); + margin-inline-start: var(--size-4-1); + vertical-align: middle; + top: -1px; +} +.community-item-name { + font-size: var(--font-ui-medium); + line-height: var(--line-height-tight); + font-weight: var(--font-medium); +} +.community-item-author { + font-size: var(--font-ui-smaller); + line-height: var(--line-height-tight); + color: var(--text-muted); +} +.community-item-downloads { + font-size: var(--font-ui-smaller); + color: var(--text-muted); + --icon-color: var(--text-faint); + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); +} +.community-item-downloads svg { + vertical-align: text-bottom; +} +.community-item-updated { + font-size: var(--font-ui-smaller); + color: var(--text-muted); + margin-bottom: var(--size-4-2); +} +.community-item-downloads-text { + margin-inline-start: var(--size-2-2); +} +.community-item-desc { + font-size: var(--font-ui-small); + line-height: var(--line-height-tight); + margin-top: 4px; + overflow: hidden; +} +.community-item-badge.mod-update { + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); + color: var(--interactive-accent); + position: absolute; + top: var(--size-4-3); + inset-inline-end: var(--size-4-3); +} +.community-item-screenshot { + max-width: 100%; + margin-top: auto; + object-fit: cover; + border-radius: var(--radius-s); + aspect-ratio: 16/9; + image-rendering: -webkit-optimize-contrast; + margin-top: var(--size-4-1); +} +.community-item-screenshot.mod-unavailable { + text-align: center; + color: var(--text-muted); +} +.community-item-screenshot .placeholder-icon { + display: flex; + align-items: center; + justify-content: center; + height: 100%; +} +.community-item-screenshot .placeholder-icon .svg-icon { + color: var(--text-faint); + width: var(--size-4-8); + height: var(--size-4-8); +} +.community-modal-info-name { + font-size: var(--h2-size); + font-weight: var(--font-semibold); + line-height: var(--line-height-tight); + margin-bottom: var(--size-4-6); +} +.community-modal-info-author, +.community-modal-info-repo, +.community-modal-info-version { + font-size: var(--font-ui-small); + line-height: var(--line-height-tight); + color: var(--text-muted); +} +.community-modal-info-desc { + font-size: var(--font-ui-small); + line-height: var(--line-height-tight); + margin-top: 4px; +} +.community-modal-details { + flex: 1 1 calc(var(--modal-max-width) - var(--modal-community-sidebar-width)); + overflow: auto; + display: flex; + flex-direction: column; + border-inline-start: var(--border-width) solid var(--divider-color); +} +.community-modal-info { + flex: 1 1 0; + overflow-y: auto; + padding: var(--size-4-8) var(--size-4-16); + scroll-padding: var(--size-4-4); + display: flex; + flex-direction: column; + gap: var(--size-4-4); +} +.community-readme { + overflow-x: hidden; + overflow-y: visible; + height: auto; + padding: var(--size-4-4) 0; +} +.community-readme video, +.community-readme svg, +.community-readme img { + max-width: 100%; +} +.community-modal-info-desc { + font-size: var(--font-ui-medium); + line-height: var(--line-height-tight); + margin-top: var(--size-4-2); +} +.community-modal-button-container { + display: flex; + flex-wrap: wrap; + gap: var(--size-4-2); + margin-top: var(--size-4-4); +} +.community-modal-info-downloads { + color: var(--text-muted); + margin-top: var(--size-4-1); + display: inline-block; + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); +} +.community-modal-info-downloads-text { + margin-inline-start: var(--size-4-1); + position: relative; + top: -1px; +} +.community-modal-readme { + font-size: var(--font-text-size); + font-family: var(--font-text); + line-height: var(--line-height-normal); + overflow-wrap: break-word; + color: var(--text-normal); + user-select: text; + -webkit-user-select: text; +} +.community-modal-grid-button-container { + position: absolute; + top: var(--size-4-4); + inset-inline-end: var(--size-4-12); + display: flex; + gap: var(--size-4-2); +} +.status-bar { + position: var(--status-bar-position); + width: auto; + bottom: 0; + right: 0; + border-radius: var(--status-bar-radius); + border-style: solid; + border-width: var(--status-bar-border-width); + border-color: var(--status-bar-border-color); + background-color: var(--status-bar-background); + color: var(--status-bar-text-color); + display: flex; + font-size: var(--status-bar-font-size); + justify-content: flex-end; + min-height: 18px; + padding: var(--size-4-1); + gap: var(--size-4-1); + user-select: none; + z-index: var(--layer-status-bar); + font-variant-numeric: tabular-nums; +} +body:not(.is-fullscreen) .status-bar { + padding-right: var(--size-4-2); +} +.status-bar-item { + border-radius: var(--radius-s); + display: inline-flex; + align-items: center; + padding: 3px var(--size-2-2); + line-height: 1; +} +.status-bar-item.mod-clickable { + cursor: var(--cursor); +} +@media (hover: hover) { + .status-bar-item.mod-clickable:hover { + background-color: var(--background-modifier-hover); + color: var(--text-normal); + } +} +.status-bar-item.plugin-editor-status, +.status-bar-item.plugin-sync { + padding: 0 var(--size-2-2); +} +@media (hover: hover) { + .status-bar-item.plugin-editor-status:hover, + .status-bar-item.plugin-sync:hover { + background-color: var(--background-modifier-hover); + } +} +.status-bar-item:empty { + display: none; +} +.status-bar-item-icon { + vertical-align: middle; + display: flex; + align-items: center; +} +.status-bar-item-segment { + margin-inline-end: var(--size-4-2); +} +.status-bar-item-segment:last-child { + margin-inline-end: 0; +} +.is-screenshotting .status-bar { + display: none; +} +.titlebar { + -webkit-app-region: drag; + position: fixed; + top: 0; + left: 0; + right: 0; + display: flex; + background-color: var(--titlebar-background); + border-bottom: var(--titlebar-border-width) solid var(--titlebar-border-color); +} +.titlebar-inner { + color: var(--titlebar-text-color); + font-weight: var(--titlebar-text-weight); + width: 100%; + display: flex; +} +.is-focused .titlebar-inner { + color: var(--titlebar-text-color-focused); +} +.titlebar-text { + opacity: 0.85; + position: absolute; + width: 100%; + height: 100%; + top: 0; + inset-inline-start: 0; + flex-grow: 1; + gap: 0.15em; + font-size: var(--font-ui-small); + text-align: center; + display: flex; + justify-content: center; + align-items: center; + padding: 0 125px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.titlebar-button-container { + display: flex; + position: absolute; + top: 0; +} +.mod-macos .titlebar-button-container { + top: 8px; +} +.titlebar-button-container.mod-left { + left: 0; +} +.mod-macos .titlebar-button-container.mod-left { + left: calc(80px / var(--zoom-factor)); +} +.titlebar-button-container .mod-back, +.titlebar-button-container .mod-forward { + color: var(--icon-color); +} +.titlebar-button-container .mod-back .svg-icon, +.titlebar-button-container .mod-forward .svg-icon { + width: 14px; + height: 14px; + stroke-width: 2.25px; +} +@media (hover: hover) { + .titlebar-button-container .mod-back:hover, + .titlebar-button-container .mod-forward:hover { + color: var(--icon-color-hover); + } +} +.titlebar-button-container.mod-right { + right: 0; +} +.titlebar-button { + -webkit-app-region: no-drag; + padding: var(--size-2-2) var(--size-2-3); + cursor: var(--cursor); + display: inline-flex; + align-items: center; +} +@media (hover: hover) { + .titlebar-button:hover { + opacity: 1; + background-color: var(--background-modifier-hover); + } + .titlebar-button.mod-close:hover { + background-color: var(--background-modifier-error); + } +} +.mod-macos .titlebar-button { + border-radius: var(--radius-s); +} +/* Hidden titlebar interferes with mouse */ +body.is-frameless.is-hidden-frameless:not(.in-progress) { + padding-top: 0 !important; +} +.is-hidden-frameless.mod-macos .titlebar { + display: none; +} +.is-hidden-frameless.mod-windows .titlebar, +.is-hidden-frameless.mod-linux .titlebar { + background: transparent; + border: none; + z-index: var(--layer-popover); + pointer-events: none; +} +.is-hidden-frameless.mod-windows .titlebar-button.mod-back, +.is-hidden-frameless.mod-linux .titlebar-button.mod-back, +.is-hidden-frameless.mod-windows .titlebar-button.mod-forward, +.is-hidden-frameless.mod-linux .titlebar-button.mod-forward, +.is-hidden-frameless.mod-windows .titlebar-text, +.is-hidden-frameless.mod-linux .titlebar-text { + display: none; +} +.is-hidden-frameless.mod-windows .titlebar-button-container, +.is-hidden-frameless.mod-linux .titlebar-button-container { + pointer-events: auto; +} +.mod-linux .titlebar-button-container, +.mod-windows .titlebar-button-container { + height: 100%; +} +.mod-linux .titlebar-button, +.mod-windows .titlebar-button { + padding: 0 16px; + display: flex; + align-items: center; +} +.mod-linux .titlebar-button.mod-logo, +.mod-windows .titlebar-button.mod-logo { + padding: 4px 8px; } -.theme-dark { - color-scheme: dark; - --highlight-mix-blend-mode: lighten; - --mono-rgb-0: 0, 0, 0; - --mono-rgb-100: 255, 255, 255; - --color-red-rgb: 251, 70, 76; - --color-red: #fb464c; - --color-orange-rgb: 233, 151, 63; - --color-orange: #e9973f; - --color-yellow-rgb: 224, 222, 113; - --color-yellow: #e0de71; - --color-green-rgb: 68, 207, 110; - --color-green: #44cf6e; - --color-cyan-rgb: 83, 223, 221; - --color-cyan: #53dfdd; - --color-blue-rgb: 2, 122, 255; - --color-blue: #027aff; - --color-purple-rgb: 168, 130, 255; - --color-purple: #a882ff; - --color-pink-rgb: 250, 153, 205; - --color-pink: #fa99cd; - --color-base-00: #1e1e1e; - --color-base-05: #212121; - --color-base-10: #242424; - --color-base-20: #262626; - --color-base-25: #2a2a2a; - --color-base-30: #363636; - --color-base-35: #3f3f3f; - --color-base-40: #555555; - --color-base-50: #666666; - --color-base-60: #999999; - --color-base-70: #b3b3b3; - --color-base-100: #dadada; - --color-accent-hsl: var(--accent-h), - var(--accent-s), - var(--accent-l); - --color-accent: hsl(var(--accent-h), var(--accent-s), var(--accent-l)); - --color-accent-1: hsl(calc(var(--accent-h) - 3), calc(var(--accent-s) * 1.02), calc(var(--accent-l) * 1.15)); - --color-accent-2: hsl(calc(var(--accent-h) - 5), calc(var(--accent-s) * 1.05), calc(var(--accent-l) * 1.29)); - --background-modifier-form-field: var(--color-base-25); - --background-secondary-alt: var(--color-base-30); - --interactive-normal: var(--color-base-30); - --interactive-hover: var(--color-base-35); - --text-accent: var(--color-accent-1); - --interactive-accent: var(--color-accent); - --interactive-accent-hover: var(--color-accent-1); - --background-modifier-box-shadow: rgba(0, 0, 0, 0.3); - --background-modifier-cover: rgba(10, 10, 10, 0.4); - --text-selection: hsla(var(--interactive-accent-hsl), 0.25); - --input-shadow: inset 0 0.5px 0.5px 0.5px rgba(255, 255, 255, 0.09), - 0 2px 4px 0 rgba(0,0,0,.15), - 0 1px 1.5px 0 rgba(0,0,0,.1), - 0 1px 2px 0 rgba(0,0,0,.2), - 0 0 0 0 transparent; - --input-shadow-hover: inset 0 0.5px 1px 0.5px rgba(255, 255, 255, 0.16), - 0 2px 3px 0 rgba(0,0,0,.3), - 0 1px 1.5px 0 rgba(0,0,0,.2), - 0 1px 2px 0 rgba(0,0,0,.4), - 0 0 0 0 transparent; - --shadow-s: 0px 1px 2px rgba(0, 0, 0, 0.121), - 0px 3.4px 6.7px rgba(0, 0, 0, 0.179), - 0px 15px 30px rgba(0, 0, 0, 0.3); - --shadow-l: 0px 1.8px 7.3px rgba(0, 0, 0, 0.071), - 0px 6.3px 24.7px rgba(0, 0, 0, 0.112), - 0px 30px 90px rgba(0, 0, 0, 0.2); - --pdf-shadow: 0 0 0 1px var(--background-modifier-border); - --pdf-thumbnail-shadow: 0 0 0 1px var(--background-modifier-border); +@media (hover: hover) { + .mod-linux .titlebar-button.mod-close:hover, + .mod-windows .titlebar-button.mod-close:hover { + background-color: var(--background-modifier-error); + } + .mod-linux .titlebar-button.mod-close:hover .svg-icon, + .mod-windows .titlebar-button.mod-close:hover .svg-icon { + fill: white; + stroke: white; + } +} +@media screen and (max-width: 300px) { + .titlebar-text { + display: none; + } +} +.is-translucent:not(.is-fullscreen) { + --nav-collapse-icon-color: rgba(var(--mono-rgb-100), 0.3); + --nav-collapse-icon-color-collapsed: rgba(var(--mono-rgb-100), 0.3); + --divider-color: rgba(0, 0, 0, 0.15); +} +.is-translucent:not(.is-fullscreen) .titlebar, +.is-translucent:not(.is-fullscreen) .app-container { + background-color: var(--workspace-background-translucent); +} +.is-translucent:not(.is-fullscreen) .workspace-ribbon.mod-left, +.is-translucent:not(.is-fullscreen) .workspace-tabs, +.is-translucent:not(.is-fullscreen) .workspace-split, +.is-translucent:not(.is-fullscreen) .sidebar-toggle-button, +.is-translucent:not(.is-fullscreen) .mod-left-split .workspace-tab-header-container, +.is-translucent:not(.is-fullscreen) .mod-right-split .workspace-tab-header-container, +.is-translucent:not(.is-fullscreen) .mod-top .workspace-tab-header-container, +.is-translucent:not(.is-fullscreen) .workspace-tabs .workspace-leaf, +.is-translucent:not(.is-fullscreen) .workspace-sidedock-vault-profile, +.is-translucent:not(.is-fullscreen) .workspace-ribbon.mod-left:before { + background-color: transparent !important; +} +/* Rendering property values */ +.value-list-element { + align-items: center; +} +body:not(.is-mobile) .workspace-split.mod-left-split .workspace-sidedock-vault-profile { + background-color: var(--background-secondary); + border-top: var(--tab-outline-width) solid var(--tab-outline-color); + display: var(--vault-profile-display); + align-items: center; + height: unset; + flex: 0 0 auto; + gap: var(--size-4-1); + justify-content: space-between; + padding: var(--size-4-2) var(--size-4-2); + order: 1; +} +body:not(.is-mobile) .workspace-split.mod-left-split .workspace-sidedock-vault-profile .workspace-drawer-vault-switcher { + color: var(--vault-profile-color); + border-radius: var(--radius-s); + display: flex; + flex-grow: 1; + align-items: center; + gap: var(--size-4-2); + overflow: hidden; + padding: var(--size-4-1) var(--size-4-2); + -electron-corner-smoothing: var(--corner-smoothing); +} +body:not(.is-mobile) .workspace-split.mod-left-split .workspace-sidedock-vault-profile .workspace-drawer-vault-switcher.has-active-menu { + background-color: var(--background-modifier-hover); +} +body:not(.is-mobile) .workspace-split.mod-left-split .workspace-sidedock-vault-profile .workspace-drawer-vault-switcher.has-active-menu .workspace-drawer-vault-switcher-icon { + color: var(--text-muted); +} +@media (hover: hover) { + body:not(.is-mobile) .workspace-split.mod-left-split .workspace-sidedock-vault-profile .workspace-drawer-vault-switcher:hover { + color: var(--vault-profile-color-hover); + background-color: var(--background-modifier-hover); + } + body:not(.is-mobile) .workspace-split.mod-left-split .workspace-sidedock-vault-profile .workspace-drawer-vault-switcher:hover .workspace-drawer-vault-switcher-icon { + color: var(--text-muted); + } +} +body:not(.is-mobile) .workspace-split.mod-left-split .workspace-sidedock-vault-profile .workspace-drawer-vault-name { + font-size: var(--vault-profile-font-size); + font-weight: var(--vault-profile-font-weight); + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} +body:not(.is-mobile) .workspace-split.mod-left-split .workspace-sidedock-vault-profile .workspace-drawer-vault-switcher-icon { + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); + display: flex; + align-items: center; + color: var(--text-faint); +} +body:not(.is-mobile) .workspace-split.mod-left-split .workspace-sidedock-vault-profile .workspace-drawer-vault-actions { + display: var(--vault-profile-actions-display); + align-items: center; +} +.workspace { + display: flex; + flex: 1 0 0; + transition: padding-left 100ms ease-in; + overflow: hidden; + height: 100%; +} +.is-translucent .workspace { + background-color: transparent; +} +.workspace-split { + display: flex; + background-color: var(--tab-container-background); + position: relative; +} +.workspace-split.mod-vertical > .workspace-split:last-child { + padding-inline-end: 0; +} +.workspace-split:last-child:not(.mod-right-split) > .workspace-leaf-resize-handle { + display: none; +} +.workspace-split.mod-vertical { + flex-direction: row; +} +.workspace-split.mod-horizontal { + flex-direction: column; +} +.workspace-split.mod-root { + background-color: var(--background-primary); +} +.workspace-leaf { + display: flex; + flex-direction: column; + position: relative; + contain: strict !important; + overflow: hidden; + isolation: isolate; +} +.workspace-split.mod-root .workspace-leaf:last-child .workspace-leaf-resize-handle { + display: none; +} +.workspace-leaf.is-highlighted:before { + content: ' '; + position: absolute; + height: 100%; + width: 100%; + top: 0; + inset-inline-start: 0; + background-color: hsla(var(--interactive-accent-hsl), 0.25); + z-index: var(--layer-popover); + pointer-events: none; +} +.workspace > .workspace-leaf, +.workspace > .workspace-split { + height: 100%; + width: 100%; +} +/* Resize handles */ +.workspace-split.mod-root > .workspace-leaf-resize-handle { + display: none; +} +.workspace-leaf-resize-handle { + -webkit-app-region: no-drag; + position: absolute; + z-index: var(--layer-cover); + background-color: transparent; + transition: background-color 200ms ease-in-out, border-color 200ms ease-in-out, opacity 200ms ease-in-out; + border-color: var(--divider-color); + border-top: 0; + border-width: var(--divider-width); + margin: 0; +} +@media (hover: hover) { + .workspace-leaf-resize-handle:hover { + background-color: var(--divider-color-hover); + border-color: var(--divider-color-hover); + } + .is-translucent .workspace-leaf-resize-handle:hover { + background-color: var(--divider-color-hover); + border-color: var(--divider-color-hover); + } +} +.workspace-split.mod-horizontal > * > .workspace-leaf-resize-handle { + bottom: 0; + inset-inline-start: 0; + border-bottom-style: solid; + border-bottom-width: var(--divider-width); + height: var(--divider-width-hover); + width: 100%; + cursor: row-resize; } -iframe { - color-scheme: normal; +.workspace-split.mod-vertical > * > .workspace-leaf-resize-handle, +.workspace-split.mod-left-split > .workspace-leaf-resize-handle, +.workspace-split.mod-right-split > .workspace-leaf-resize-handle { + inset-inline-end: 0; + bottom: 0; + width: var(--divider-width-hover); + height: var(--divider-vertical-height); + cursor: col-resize; } -@media print { - .theme-dark { - --highlight-mix-blend-mode: darken; - } +.workspace-split.mod-right-split > .workspace-leaf-resize-handle { + border-inline-start-style: solid; + border-inline-start-width: var(--divider-width); } -@font-face { - font-family: 'Avenir Next'; - font-weight: normal; - font-style: normal; - font-display: swap; - src: url(public/fonts/94f2f163d4b698242fef.otf); +.workspace-split.mod-vertical > * > .workspace-leaf-resize-handle, +.workspace-split.mod-left-split > .workspace-leaf-resize-handle { + border-inline-end-style: solid; + border-inline-end-width: var(--divider-width); } -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 200; - font-display: swap; - src: url(public/fonts/72505e6a122c6acd5471.woff2) format('woff2'); +.workspace-split.mod-right-split > .workspace-leaf-resize-handle { + inset-inline-end: unset; + inset-inline-start: 0; } -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 300; - font-display: swap; - src: url(public/fonts/2d5198822ab091ce4305.woff2) format('woff2'); +.workspace-split.mod-vertical > * { + height: 100%; + flex: 1 0 0; + width: 0; } -@font-face { - font-family: 'Inter'; - font-weight: 400; - font-style: normal; - font-display: swap; - src: url(public/fonts/c8ba52b05a9ef10f4758.woff2); +.workspace-split.mod-horizontal > * { + width: 100%; + flex: 1 0 0; + height: 0; } -@font-face { - font-family: 'Inter'; - font-weight: 400; - font-style: italic; - font-display: swap; - src: url(public/fonts/cb10ffd7684cd9836a05.woff2); +.workspace-split.mod-left-split, +.workspace-split.mod-right-split { + flex: 0 0 auto; } -@font-face { - font-family: 'Inter'; - font-weight: 600; - font-style: normal; - font-display: swap; - src: url(public/fonts/b5f0f109bc88052d4000.woff2); +.is-translucent .workspace-split.mod-left-split.is-sidedock-collapsed .workspace-tabs, +.is-translucent .workspace-split.mod-right-split.is-sidedock-collapsed .workspace-tabs { + visibility: hidden; } -@font-face { - font-family: 'Inter'; - font-weight: 800; - font-style: normal; - font-display: swap; - src: url(public/fonts/cbe0ae49c52c920fd563.woff2); +.workspace-split.mod-left-split > .workspace-leaf-resize-handle, +.workspace-split.mod-right-split > .workspace-leaf-resize-handle { + z-index: var(--layer-status-bar); + height: var(--divider-vertical-height); + top: unset; + bottom: 0; } -@font-face { - font-family: 'Inter'; - font-weight: 800; - font-style: italic; - font-display: swap; - src: url(public/fonts/535a6cf662596b3bd6a6.woff2); +.view-header-nav-buttons { + --icon-size: var(--icon-s); + align-items: center; + display: flex; } -@font-face { - font-family: 'Source Code Pro'; - font-weight: normal; - font-style: normal; - font-display: swap; - src: url(public/fonts/70cc7ff27245e82ad414.ttf); +body.is-phone .view-header-nav-buttons { + display: none; } -@font-face { - font-family: 'Source Code Pro'; - font-weight: normal; - font-style: italic; - font-display: swap; - src: url(public/fonts/454577c22304619db035.ttf); +.workspace-leaf-content { + width: 100%; + height: 100%; + overflow: hidden; + position: relative; + display: flex; + flex-direction: column; } -@font-face { - font-family: 'Source Code Pro'; - font-weight: bold; - font-style: normal; - font-display: swap; - src: url(public/fonts/52ac8f3034507f1d9e53.ttf); +.workspace-leaf-content .view-content { + padding: var(--size-4-3) var(--size-4-3) var(--size-4-8); + padding-bottom: max(var(--safe-area-inset-bottom), var(--size-4-8)); + overflow: auto; } -@font-face { - font-family: 'Source Code Pro'; - font-weight: bold; - font-style: italic; - font-display: swap; - src: url(public/fonts/05b618077343fbbd92b7.ttf); +.workspace-leaf-content[data-type='markdown'] .view-content { + padding: 0; + overflow: hidden; } -@font-face { - font-family: 'Flow Circular'; - font-display: swap; - src: url(public/fonts/4bb6ac751d1c5478ff3a.woff2); +.workspace-leaf-content[data-type='backlink'] .view-content, +.workspace-leaf-content[data-type='outgoing-link'] .view-content { + padding: 0; + overflow: hidden; + display: flex; + flex-direction: column; } -@font-face { - font-family: '??'; - unicode-range: U+0; +.workspace-leaf-content .image-container, +.workspace-leaf-content .audio-container, +.workspace-leaf-content .video-container { + text-align: center; } -body { - --font-default: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Inter", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Microsoft YaHei Light", sans-serif; - --font-monospace-default: Menlo, SFMono-Regular, Consolas, "Roboto Mono", 'Source Code Pro', monospace; - --font-interface-override: '??'; - --font-interface-theme: '??'; - --font-interface: var(--font-interface-override), var(--font-interface-theme), var(--default-font, '??'), var(--font-default); - --font-text-override: '??'; - --font-text-theme: '??'; - --font-text: var(--font-text-override), var(--font-text-theme), var(--font-interface); - --font-print-override: '??'; - --font-print: var(--font-print-override), var(--font-text-override), var(--font-text-theme), 'Arial'; - --font-monospace-override: '??'; - --font-monospace-theme: '??'; - --font-monospace: var(--font-monospace-override), var(--font-monospace-theme), var(--font-monospace-default); - --font-text-size: 16px; - --font-mermaid: var(--font-text); +.workspace-leaf-content img:not([width]), +.workspace-leaf-content audio, +.workspace-leaf-content video { + max-width: 100%; } -@media print { - html, - body { - padding-top: 0 !important; - overflow: auto !important; - height: auto !important; - } - iframe, - .titlebar, - .app-container, - .progress-bar, - .popover, - .markdown-embed-link { - display: none !important; - } - body > :not(.print) { - display: none !important; - } - .print .markdown-preview-view { - -webkit-print-color-adjust: exact; - color: initial; - } - .print .markdown-preview-view mark { - color: initial; - } - .print .markdown-preview-view .metadata-container { - display: none; - } - .print .markdown-preview-view .markdown-embed-content { - max-height: none; - overflow: visible; - } - .print .markdown-preview-view .callout-content { - display: inherit !important; - } - .print .external-link { - background: none; - padding-right: 0; - } - * { - text-shadow: none !important; - } - webview { - display: none; - } - ::-webkit-scrollbar { - display: none; - } - body { - --font-text: var(--font-print) !important; - } +.workspace-fake-target-overlay, +.workspace-drop-overlay { + will-change: transform, width, height; + position: fixed; + inset-inline-start: 0; + top: 0; + width: 0; + height: 0; + transform: translate(0, 0); + transition: all 100ms ease-in-out; + z-index: var(--layer-cover); + pointer-events: none; } -* { - box-sizing: border-box; +.workspace-drop-overlay:before { + content: ' '; + position: absolute; + width: calc(100% - 6px); + height: calc(100% - 6px); + top: 0; + left: 0; + bottom: 0; + right: 0; + margin: auto; + background-color: var(--interactive-accent); + border-radius: var(--radius-m); + opacity: 0.5; } -html, -body { - margin: 0; - padding: 0; - height: 100%; - width: 100%; - overflow: hidden; +.workspace-fake-target-container { + visibility: hidden; + position: absolute; + pointer-events: none; + top: 0; + inset-inline-start: 0; } -body { - text-rendering: optimizeLegibility; - font-family: var(--font-interface); - line-height: var(--line-height-tight); - font-size: var(--font-ui-medium); +.workspace-fake-target-overlay { + visibility: visible; + overflow: hidden; background-color: var(--background-primary); - color: var(--text-normal); - -webkit-tap-highlight-color: rgba(255, 255, 255, 0); + /* + &.is-in-sidebar { + background-color: var(--background-secondary); + .workspace-leaf { + background-color: var(--background-secondary); + } + }*/ } -body.is-translucent { - background-color: transparent; +.workspace-fake-target-overlay > * { + width: 100%; + height: 100%; +} +.workspace-tabs { + overflow: hidden; + display: flex; + flex-direction: column; + position: relative; } -@keyframes node-inserted { - from { - outline-color: #fff; - } - to { - outline-color: #000; - } +.workspace-tabs > * { + flex: 1 0 0; } -.node-insert-event { - animation-duration: 0.01s; - animation-name: node-inserted; +.workspace-tabs .workspace-leaf { + height: 100%; } -.is-flashing { - transition: all 0.25s ease; - background-color: var(--text-highlight-bg) !important; - color: var(--text-normal); - mix-blend-mode: var(--highlight-mix-blend-mode); - border-radius: var(--radius-s); +.workspace-split.mod-right-split .workspace-tabs { + padding-inline-end: 0; } -body { - user-select: none; - -webkit-user-select: none; - overflow: hidden; +.workspace-tabs:last-child .workspace-leaf-resize-handle { + display: none; } -body [contenteditable="true"], -body [contenteditable=""] { - user-select: text; - -webkit-user-select: text; +.workspace-fake-target-overlay:not(.is-in-sidebar) .workspace-tabs .workspace-leaf, +.mod-root .workspace-tabs .workspace-leaf { + background-color: var(--background-primary); } -body.is-grabbing, -body.is-grabbing *:not(.workspace-leaf-resize-handle) { - cursor: -moz-grabbing !important; - cursor: -webkit-grabbing !important; - cursor: grabbing !important; +.workspace-tabs .workspace-leaf { + background-color: var(--background-secondary); } -body.is-grabbing iframe:not(.is-controlled), -body.is-grabbing webview { - pointer-events: none; +.workspace-tabs .workspace-leaf .view-content { + height: 100%; } -.app-container { +.workspace-tab-header-container { display: flex; - height: 100%; - width: 100%; + background-color: var(--tab-container-background); + height: var(--header-height); + border-bottom: var(--tab-outline-width) solid var(--tab-outline-color); + flex: 0 0 auto; + padding-left: var(--size-4-2); + padding-right: var(--size-4-2); position: relative; - flex-direction: column; } -.app-container.no-transition * { - transition: none !important; +.is-phone .workspace-tab-header-container { + display: none; } -.horizontal-main-container { - width: 100%; +.workspace-tab-header-container-inner { + -webkit-app-region: drag; display: flex; - overflow: hidden; - flex: 1 0 0; -} -:focus { - outline: none; -} -.is-text-garbled * { - font-family: 'Flow Circular', sans-serif !important; - line-height: 1.45em !important; + flex: 0 1 auto; + overflow: auto; + margin: 6px -5px calc(var(--tab-outline-width) * -1); + padding: 1px 15px 0; } -/* CURSOR */ -.cm-s-obsidian .cm-cursor, -.cm-s-obsidian .cm-dropCursor { - border-left-color: var(--text-normal); +.mod-root .workspace-tab-header-container-inner { + padding: 1px 15px 0; } -.cm-fat-cursor-mark { - background-color: rgba(20, 255, 20, 0.5); - -webkit-animation: blink 1.06s steps(1) infinite; - -moz-animation: blink 1.06s steps(1) infinite; - animation: blink 1.06s steps(1) infinite; +.workspace-tab-header-container-inner::-webkit-scrollbar, +.workspace-tab-header-container-inner::-webkit-scrollbar-thumb { + display: none; } -.cm-animate-fat-cursor { - width: auto; - border: 0; - -webkit-animation: blink 1.06s steps(1) infinite; - -moz-animation: blink 1.06s steps(1) infinite; - animation: blink 1.06s steps(1) infinite; - background: var(--interactive-accent); - color: var(--text-on-accent); +.workspace-tab-header-inner-icon { + flex: 0 0 auto; + display: flex; } -@-moz-keyframes blink { - 50% { - background-color: transparent; - } +/* Hide tab icon if it's a note */ +.mod-root .workspace-tab-header[data-type="markdown"] .workspace-tab-header-inner-icon, +.mod-root .workspace-tab-header[data-type="empty"] .workspace-tab-header-inner-icon { + display: none; } -@-webkit-keyframes blink { - 50% { - background-color: transparent; - } +.mod-root .workspace-tab-header.mod-unknown { + font-style: italic; } -@keyframes blink { - 50% { - background-color: transparent; - } +body.is-focused .workspace-tab-header-container .workspace-tab-header { + color: var(--tab-text-color-focused); } -.cm-tab { - display: inline-block; - text-decoration: inherit; +body.is-focused .workspace-tab-header-container .workspace-tab-header.is-active { + color: var(--tab-text-color-focused-active); } -.cm-negative { - color: var(--text-error); +body.is-focused .mod-active .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner-icon, +body.is-focused .mod-active .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner-title { + color: var(--tab-text-color-focused-active-current); } -.cm-positive { - color: var(--text-success); +body.is-focused .mod-active .workspace-tab-header-container .workspace-tab-header.is-active.is-highlighted .workspace-tab-header-inner-icon, +body.is-focused .mod-active .workspace-tab-header-container .workspace-tab-header.is-active.is-highlighted .workspace-tab-header-inner-title { + color: var(--tab-text-color-focused-highlighted); } -.cm-strikethrough { - text-decoration: line-through; +body.is-focused .workspace-tab-header-container .workspace-tab-header.is-highlighted .workspace-tab-header-inner-icon, +body.is-focused .workspace-tab-header-container .workspace-tab-header.is-highlighted .workspace-tab-header-inner-title { + color: var(--tab-text-color-focused-highlighted); } -.cm-invalidchar { - color: var(--text-error); +.workspace-tab-header-container .workspace-tab-header { + -webkit-app-region: no-drag; + color: var(--tab-text-color); + display: flex; + position: relative; + padding: 1px 4px 3.5px; + scroll-margin-inline-start: var(--size-2-3); + scroll-margin-inline-end: var(--size-4-1); + text-align: center; + border-radius: var(--tab-radius-active); + /* Decorative curves */ } -.cm-searching { - background-color: #ffa; - background-color: rgba(255, 255, 0, 0.4); +@media (hover: hover) { + .workspace-tab-header-container .workspace-tab-header:not(.is-active):hover .workspace-tab-header-inner { + background-color: var(--background-modifier-hover); + } } -/* Used to force a border model for a node */ -.cm-force-border { - padding-right: 0.1px; +.workspace-tab-header-container .workspace-tab-header:not(.is-active).mobile-tap .workspace-tab-header-inner { + background-color: var(--background-modifier-hover); } -/* See issue #2901 */ -.cm-tab-wrap-hack:after { +.workspace-tab-header-container .workspace-tab-header::before, +.workspace-tab-header-container .workspace-tab-header::after { + position: absolute; + bottom: 0; content: ''; + width: calc(var(--tab-curve) * 2); + height: calc(var(--tab-curve) * 2); + border-radius: 100%; + box-shadow: 0 0 0 calc(var(--tab-curve) * 3) transparent; } -.markdown-source-view { - font-size: var(--font-text-size); - font-family: var(--font-text); -} -.workspace-leaf-content.is-read-mode .markdown-source-view { - z-index: 0; +.workspace-tab-header-container .workspace-tab-header::before { + left: calc(var(--tab-curve) * -2); + clip-path: inset(50% calc(var(--tab-curve) * -1) 0 50%); } -.drag-ghost { - position: fixed; - font-size: var(--font-ui-small); - color: var(--drag-ghost-text-color); - padding: var(--size-2-3) var(--size-4-2); - border-radius: var(--radius-s); - background-color: var(--drag-ghost-background); - box-shadow: 0 2px 8px var(--background-modifier-box-shadow); - z-index: var(--layer-dragged-item); - max-width: 300px; - font-weight: var(--font-medium); - pointer-events: none; +.workspace-tab-header-container .workspace-tab-header::after { + right: calc(var(--tab-curve) * -2); + clip-path: inset(50% 50% 0 calc(var(--tab-curve) * -1)); } -.drag-ghost.mod-leaf { - display: flex; - z-index: var(--layer-tooltip); +.workspace-tab-header-container .workspace-tab-header.is-active { + box-shadow: 0 0 0 var(--tab-outline-width) var(--tab-outline-color); + color: var(--tab-text-color-active); + background-color: var(--tab-background-active); } -.drag-ghost-icon { - margin-right: var(--size-2-3); - position: relative; +.workspace-split.mod-root .workspace-tab-header-container .workspace-tab-header.is-active::before, +.workspace-split.mod-root .workspace-tab-header-container .workspace-tab-header.is-active::after { + box-shadow: inset 0 0 0 var(--tab-outline-width) var(--tab-outline-color), 0 0 0 calc(var(--tab-curve) * 4) var(--tab-background-active); } -.drag-reorder-ghost { - position: fixed; - border-radius: var(--radius-s); - background-color: var(--background-primary); - box-shadow: 0 2px 8px var(--background-modifier-box-shadow); - z-index: var(--layer-dragged-item); - pointer-events: none; +.workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner::after { + opacity: 0; } -.drag-ghost-self { +.workspace-tab-container { display: flex; -} -.drag-ghost-self > .svg-icon { - --icon-size: var(--icon-xs); - --icon-stroke: var(--icon-xs-stroke-width); - opacity: 0.7; - vertical-align: middle; - align-self: center; - margin-right: var(--size-2-2); - flex-shrink: 0; -} -.drag-ghost-self span { overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; } -.drag-ghost-action { - padding: var(--size-2-1) 0 0 0; - font-size: var(--font-ui-smaller); - opacity: 0.7; +.workspace-tab-container > * { + flex: 1 0 0; +} +.workspace-tab-header-inner { + align-items: center; + display: flex; + gap: var(--size-2-1); + height: 100%; + border-radius: var(--tab-radius); + -electron-corner-smoothing: var(--corner-smoothing); overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; + padding: 0 8px; + width: 100%; } -.drag-ghost-hidden { - visibility: hidden; - position: relative; +.workspace-tab-header-inner .workspace-tab-header-inner-icon { + color: var(--icon-color); + opacity: var(--icon-opacity); } -.drag-ghost-hidden:before { - content: ' '; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - visibility: visible; - border-radius: 5px; - background-color: hsla(var(--interactive-accent-hsl), 0.3); +@media (hover: hover) { + .workspace-tab-header-inner:hover .workspace-tab-header-inner-icon { + color: var(--icon-color-hover); + opacity: var(--icon-opacity-hover); + } } -.markdown-source-view:not(.is-live-preview) { - --p-spacing: 0rem; +.mod-root .workspace-tab-header-inner { + padding-top: 0; + padding-inline-end: 3px; + padding-inline-start: 6px; + padding-bottom: 0; } -.markdown-source-view.mod-cm6 { - height: 100%; +.workspace-tab-header-inner-title { + flex: 1 1 auto; + font-size: var(--tab-font-size); + font-weight: var(--tab-font-weight); + overflow: hidden; + text-align: left; + text-overflow: ellipsis; + white-space: nowrap; + width: 100%; +} +.workspace-tab-header-status-container { display: flex; - flex-direction: column; + flex-shrink: 0; + gap: var(--size-2-1); + justify-content: center; } -.markdown-source-view.mod-cm6 ::selection { - background-color: var(--text-selection); +.workspace-tab-header-status-container:empty { + display: none; } -.markdown-source-view.mod-cm6 .cm-line .cm-selection, -.markdown-source-view.mod-cm6 .cm-line .cm-inline-code .cm-selection { - background-color: var(--text-selection); +.workspace-tab-header-status-icon, +.workspace-tab-header-inner-close-button { + cursor: var(--cursor); + padding: var(--size-2-1); + border-radius: var(--radius-s); + display: flex; + align-items: center; + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); } -.markdown-source-view.mod-cm6 .cm-selectionBackground, -.markdown-source-view.mod-cm6 .cm-editor > .cm-scroller > .cm-selectionLayer > .cm-selectionBackground { - background-color: var(--text-selection); +@media (hover: hover) { + .workspace-tab-header.is-active .workspace-tab-header-status-icon:hover, + .workspace-tab-header.is-active .workspace-tab-header-inner-close-button:hover { + background-color: var(--background-modifier-hover); + } + .mod-root .workspace-tab-header.is-active .workspace-tab-header-status-icon.mod-linked:hover, + .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner-close-button.mod-linked:hover, + .mod-root .workspace-tab-header.is-active .workspace-tab-header-status-icon.mod-pinned:hover, + .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner-close-button.mod-pinned:hover { + background-color: var(--background-modifier-active-hover); + } } -.markdown-source-view.mod-cm6.is-readable-line-width .cm-sizer { - max-width: var(--file-line-width); - margin-left: auto; - margin-right: auto; +.workspace-tab-header.is-active .workspace-tab-header-status-icon::after, +.workspace-tab-header.is-active .workspace-tab-header-inner-close-button::after { + background-color: transparent; } -.markdown-source-view.mod-cm6.is-readable-line-width .cm-content { - max-width: var(--file-line-width); +@media (hover: hover) { + .workspace-tab-header-inner-close-button:hover { + color: var(--tab-text-color-focused-active-current); + } } -.markdown-source-view.mod-cm6.is-readable-line-width .cm-line { - max-width: var(--file-line-width); +.workspace-tab-header:hover .workspace-tab-header-inner-close-button { + color: var(--tab-text-color-focused); } -.markdown-source-view.mod-cm6.is-readable-line-width .cm-line.HyperMD-table-row { - max-width: 100%; +@media (hover: hover) { + .workspace-tab-header:hover .workspace-tab-header-inner-close-button:hover { + color: var(--tab-text-color-focused-active-current); + } } -.markdown-source-view.mod-cm6 .cm-editor { - flex: 1 1 0; - min-height: 0; +.workspace-tab-header.is-active .workspace-tab-header-inner-close-button { + color: var(--tab-text-color-focused-active); } -.markdown-source-view.mod-cm6 .cm-editor.cm-focused { - outline: none; +@media (hover: hover) { + .workspace-tab-header.is-active .workspace-tab-header-inner-close-button:hover { + color: var(--tab-text-color-focused-active-current); + } } -.markdown-source-view.mod-cm6 .cm-scroller { - font-family: var(--font-text); - line-height: var(--line-height-normal); - scroll-padding-block-end: var(--status-bar-scroll-padding); - scrollbar-gutter: stable; +.workspace-sidedock-empty-state { + font-size: var(--font-ui-small); + padding: 20px 30px; } -.markdown-source-view.mod-cm6 .cm-sizer { - display: flex; - flex-direction: column; - align-items: stretch; - width: 100%; - min-height: 100%; +.workspace-tab-header.is-before-active .workspace-tab-header-inner { + border-bottom-right-radius: 10px; } -.markdown-source-view.mod-cm6 .cm-contentContainer { - flex: 1 1 auto; +.workspace-tab-header-spacer { display: flex; - align-items: stretch; - overflow-x: visible; -} -.markdown-source-view.mod-cm6 .cm-content { - flex-basis: unset !important; - width: 0; - caret-color: var(--text-normal); - min-height: unset; - padding: 0; -} -.is-mobile.is-ios .markdown-source-view.mod-cm6 .cm-content { - -webkit-user-modify: read-write; + flex-grow: 1; } -.markdown-source-view.mod-cm6 .cm-content > * { - margin: 0 !important; - display: block; +body:not(.is-grabbing):not(.is-fullscreen) .workspace-tabs.mod-top .workspace-tab-header-spacer { + -webkit-app-region: drag; } -.markdown-source-view.mod-cm6 .cm-content > [contenteditable=false] { - contain: paint !important; +body:not(.is-grabbing):not(.is-fullscreen).is-hidden-frameless .mod-top .workspace-tab-header-container { + -webkit-app-region: drag; } -.markdown-source-view.mod-cm6 .cm-gutters { - flex: 0 0 auto; - background-color: transparent; - color: var(--text-faint) !important; - border-right: none !important; - margin-inline-end: var(--file-folding-offset); - font-size: var(--font-ui-smaller); +.workspace-tab-header-tab-list, +.workspace-tab-header-new-tab { + -webkit-app-region: no-drag; + display: none; z-index: 1; - font-variant: tabular-nums; -} -.markdown-source-view.mod-cm6 .cm-line > * { - text-indent: 0; + align-items: center; } -.markdown-source-view.mod-cm6 .cm-transparent { - color: transparent; +.titlebar .workspace-tab-header-tab-list, +.titlebar .workspace-tab-header-new-tab, +.mod-root .workspace-tab-header-tab-list, +.mod-root .workspace-tab-header-new-tab { + display: flex; } -.markdown-source-view.mod-cm6 .cm-html-embed, -.markdown-source-view.mod-cm6 .cm-callout, -.markdown-source-view.mod-cm6 .cm-table-widget { - white-space: normal; - overflow-wrap: normal; - word-break: normal; +.workspace-tab-header-tab-list .clickable-icon, +.workspace-tab-header-new-tab .clickable-icon { + color: var(--icon-color); + padding: var(--size-2-2); + --icon-size: var(--icon-m); + --icon-stroke: var(--icon-m-stroke-width); + align-items: center; } -.markdown-source-view.mod-cm6 .cm-table-widget { - padding: var(--size-4-4); - margin: 0 calc(-1 * var(--size-4-4)) !important; - overflow-x: auto; - overflow-y: hidden; +.workspace-tab-header-new-tab { + padding: var(--size-4-2) 0 var(--size-2-3); + margin-inline-end: var(--size-4-3); + margin-inline-start: -4px; } -.markdown-source-view.mod-cm6 .cm-table-widget.is-loading { - padding: 0; - margin: 0 !important; +.workspace-tab-header-tab-list { + margin-inline-end: var(--size-4-1); + padding: var(--size-4-2) 0 var(--size-2-3); } -.markdown-source-view.mod-cm6 .cm-table-widget .table-wrapper { - position: relative; - width: fit-content; +/* Remove tab titles in sidebar */ +.workspace-fake-target-overlay.is-in-sidebar .workspace-tab-header-inner-title, +.mod-left-split .workspace-tab-header-inner-title, +.mod-right-split .workspace-tab-header-inner-title { + display: var(--sidebar-tab-text-display); } -.markdown-source-view.mod-cm6 .cm-table-widget th, -.markdown-source-view.mod-cm6 .cm-table-widget td { - min-width: var(--table-column-min-width); - cursor: text; - overflow: visible; - padding: 0; - position: relative; +.workspace-fake-target-overlay.is-in-sidebar .workspace-tab-header-inner-close-button, +.mod-left-split .workspace-tab-header-inner-close-button, +.mod-right-split .workspace-tab-header-inner-close-button { + display: none; } -.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected::after, -.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected::after { - pointer-events: none; - content: ""; - display: block; - position: absolute; - top: calc(-1 * var(--table-border-width)); - right: calc(-1 * var(--table-border-width)); - bottom: calc(-1 * var(--table-border-width)); - left: calc(-1 * var(--table-border-width)); - background-color: var(--table-selection); - border: 0px solid var(--table-selection-border-color); - mix-blend-mode: var(--table-selection-blend-mode); - z-index: 1; +body > .workspace-split { + height: 100%; } -.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.left::after, -.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.left::after { - border-left-width: var(--table-selection-border-width); - left: calc(-1 * var(--table-selection-border-width)); +.mod-root .workspace-tabs > .workspace-leaf .view-header-title { + white-space: normal; } -.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.right::after, -.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.right::after { - border-right-width: var(--table-selection-border-width); - right: calc(-1 * var(--table-selection-border-width)); +.mod-root .workspace-tab-header-status-icon { + color: var(--text-accent); } -.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.top::after, -.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.top::after { - border-top-width: var(--table-selection-border-width); - top: calc(-1 * var(--table-selection-border-width)); +.mod-root .workspace-tab-header-status-icon, +.mod-root .workspace-tab-header-inner-icon { + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); } -.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.bottom::after, -.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.bottom::after { - border-bottom-width: var(--table-selection-border-width); - bottom: calc(-1 * var(--table-selection-border-width)); +.mod-root .mod-pinned, +.mod-root .workspace-tab-header-inner-close-button { + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); } -.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.top.right::after, -.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.top.right::after { - border-top-right-radius: var(--table-selection-border-radius); +.mod-right-split .markdown-preview-view, +.mod-left-split .markdown-preview-view, +.mod-right-split .markdown-source-view.mod-cm6 .cm-scroller, +.mod-left-split .markdown-source-view.mod-cm6 .cm-scroller { + --file-margins: var(--size-4-5); } -.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.bottom.right::after, -.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.bottom.right::after { - border-bottom-right-radius: var(--table-selection-border-radius); +.mod-right-split .markdown-preview-view, +.mod-left-split .markdown-preview-view, +.mod-right-split .markdown-source-view, +.mod-left-split .markdown-source-view { + font-size: var(--sidebar-markdown-font-size); } -.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.top.left::after, -.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.top.left::after { - border-top-left-radius: var(--table-selection-border-radius); +/* Sidebar tabs */ +.mod-left-split .workspace-tab-header-container .workspace-tab-header-container-inner, +.mod-right-split .workspace-tab-header-container .workspace-tab-header-container-inner { + padding: 1px 0 7px; + margin: 6px 0 0 0; + gap: 3px; } -.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.bottom.left::after, -.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.bottom.left::after { - border-bottom-left-radius: var(--table-selection-border-radius); +.mod-left-split .workspace-tab-header-container .workspace-tab-header, +.mod-right-split .workspace-tab-header-container .workspace-tab-header { + box-shadow: none; + background-color: transparent; + padding: 0; + margin: 0; + border-radius: var(--radius-s); } -.markdown-source-view.mod-cm6 .cm-table-widget.has-selection { - --text-selection: transparent; +.mod-left-split .workspace-tab-header-container .workspace-tab-header:before, +.mod-right-split .workspace-tab-header-container .workspace-tab-header:before, +.mod-left-split .workspace-tab-header-container .workspace-tab-header:after, +.mod-right-split .workspace-tab-header-container .workspace-tab-header:after { + display: none; } -.markdown-source-view.mod-cm6 .cm-table-widget.has-selection .cm-content { - caret-color: transparent; +.mod-left-split .workspace-tab-header-container .workspace-tab-header:active .workspace-tab-header-inner-icon, +.mod-right-split .workspace-tab-header-container .workspace-tab-header:active .workspace-tab-header-inner-icon { + color: var(--icon-color-focused); } -.markdown-source-view.mod-cm6 .cm-table-widget.has-selection .cm-selectionLayer, -.markdown-source-view.mod-cm6 .cm-table-widget.has-selection .cm-cursorLayer { - display: none; +.mod-left-split .workspace-tab-header-container .workspace-tab-header.has-active-menu, +.mod-right-split .workspace-tab-header-container .workspace-tab-header.has-active-menu, +.mod-left-split .workspace-tab-header-container .workspace-tab-header.is-active, +.mod-right-split .workspace-tab-header-container .workspace-tab-header.is-active { + background-color: var(--background-modifier-hover); } -.markdown-source-view.mod-cm6 .cm-table-widget.is-selected { - --text-selection: transparent; +@media (hover: hover) { + .mod-left-split .workspace-tab-header-container .workspace-tab-header.has-active-menu:hover, + .mod-right-split .workspace-tab-header-container .workspace-tab-header.has-active-menu:hover, + .mod-left-split .workspace-tab-header-container .workspace-tab-header.is-active:hover, + .mod-right-split .workspace-tab-header-container .workspace-tab-header.is-active:hover { + background-color: var(--background-modifier-hover); + } } -.markdown-source-view.mod-cm6 .cm-table-widget.is-selected table { - position: relative; +.mod-left-split .workspace-tab-header-container .workspace-tab-header.has-active-menu .workspace-tab-header-inner-icon, +.mod-right-split .workspace-tab-header-container .workspace-tab-header.has-active-menu .workspace-tab-header-inner-icon, +.mod-left-split .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner-icon, +.mod-right-split .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner-icon { + opacity: var(--icon-opacity-active); + color: var(--icon-color-focused); } -.markdown-source-view.mod-cm6 .cm-table-widget.is-selected table::after { - pointer-events: none; - content: ""; - display: block; - position: absolute; - top: calc(-1 * var(--table-border-width)); - right: calc(-1 * var(--table-border-width)); - bottom: calc(-1 * var(--table-border-width)); - left: calc(-1 * var(--table-border-width)); - background-color: var(--table-selection); +.workspace .mod-root .workspace-tab-header { + -webkit-app-region: no-drag; + container-type: inline-size; + container-name: tab-header; + flex: 1 1 0; + width: var(--tab-width); + min-width: 0; + max-width: var(--tab-max-width); + padding: 1px 3px 3.5px; } -.markdown-source-view.mod-cm6 .cm-table-widget .table-cell-wrapper { - height: 100%; - padding: var(--size-2-2) var(--size-4-2); +.workspace .mod-root .workspace-tab-header .workspace-tab-header-status-container { + position: sticky; + inset-inline-end: 0; } -.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle, -.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle { - --icon-size: var(--icon-s); - --icon-stroke: var(--icon-s-stroke-width); - position: absolute; - display: flex; - align-items: center; - justify-content: center; - cursor: grab; - background-color: var(--table-drag-handle-background); - color: var(--table-drag-handle-color); - opacity: 0; +.workspace .mod-root .workspace-tab-header .workspace-tab-header-inner-close-button { + position: sticky; + inset-inline-end: 0; } -.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle:active, -.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle:active, -.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle:hover, -.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle:hover { +.workspace .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner-close-button { + pointer-events: all; opacity: 1; } -.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle:active, -.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle:active { - cursor: grabbing; - background-color: var(--table-drag-handle-background-active); - color: var(--table-drag-handle-color-active); - box-shadow: 0 0 0 var(--table-selection-border-width) var(--table-selection-border-color); +.workspace .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner-close-button svg { + opacity: 1; } -.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle *, -.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle * { - pointer-events: none; +.workspace .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner-close-button::after { + background-color: transparent; } -.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle { - top: 0; - left: -1px; - width: calc(var(--size-4-4) - var(--table-selection-border-width)); - height: 100%; - transform: translateX(-100%); - border-top-left-radius: var(--radius-s); - border-bottom-left-radius: var(--radius-s); +.workspace .mod-root .workspace-tab-header-inner::after { + position: absolute; + inset-inline-end: -0.5px; + width: 1px; + background-color: var(--tab-divider-color); + content: ''; + height: 20px; } -.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle { - top: -1px; - left: 0; - width: 100%; - height: calc(var(--size-4-4) - var(--table-selection-border-width)); - transform: translateY(-100%); - border-top-left-radius: var(--radius-s); - border-top-right-radius: var(--radius-s); +.workspace .mod-root .workspace-tab-header-inner-icon { + display: flex; + padding-inline-end: 4px; } -.markdown-source-view.mod-cm6 .cm-table-widget.is-dragging .table-row-drag-handle:not(:active), -.markdown-source-view.mod-cm6 .cm-table-widget.is-dragging .table-col-drag-handle:not(:active) { +.workspace .mod-root .workspace-tab-header[data-type="markdown"] .workspace-tab-header-inner-icon, +.workspace .mod-root .workspace-tab-header[data-type="empty"] .workspace-tab-header-inner-icon { display: none; } -.markdown-source-view.mod-cm6 .cm-table-widget .table-drag-target { - position: absolute; - border-radius: 2px; - background-color: var(--interactive-accent); +.workspace .mod-root .workspace-tab-header-inner-title { + text-overflow: ellipsis; + width: 100%; } -.markdown-source-view.mod-cm6 .cm-table-widget .table-drag-target.mod-row { - height: 3px; - transform: translateY(-2px); +.workspace .mod-root .workspace-tab-header-status-container.mod-linked { + display: none; } -.markdown-source-view.mod-cm6 .cm-table-widget .table-drag-target.mod-col { - width: 3px; - transform: translateX(-2px); +.workspace .mod-root .workspace-tab-header-spacer { + flex-shrink: 1; } -.markdown-source-view.mod-cm6 .cm-table-widget .table-row-btn, -.markdown-source-view.mod-cm6 .cm-table-widget .table-col-btn { - --icon-size: var(--icon-s); - --icon-stroke: var(--icon-s-stroke-width); - position: absolute; - display: flex; - align-items: center; - justify-content: center; - height: var(--size-4-4); - width: var(--size-4-4); - background-color: var(--table-add-button-background); - border: var(--table-add-button-border-width) solid var(--table-add-button-border-color); - color: var(--text-faint); - opacity: 0; - transition: opacity 0s 0.1s; +.workspace .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:not(.is-active) .workspace-tab-header-inner-close-button { + display: none; } @media (hover: hover) { - .markdown-source-view.mod-cm6 .cm-table-widget .table-row-btn:hover, - .markdown-source-view.mod-cm6 .cm-table-widget .table-col-btn:hover { - opacity: 1; + .workspace .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:hover .workspace-tab-header-inner-close-button { + display: flex; } } -.markdown-source-view.mod-cm6 .cm-table-widget .table-row-btn { - top: 100%; - left: 0; - width: 100%; - border-top: none; - cursor: s-resize; +@container tab-header (width < 3rem) { + .workspace .workspace-split.mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header-container .workspace-tab-header:not(.is-active) .workspace-tab-header-inner-close-button { + display: none; + } } -.markdown-source-view.mod-cm6 .cm-table-widget .table-col-btn { - top: 0; - left: 100%; - height: 100%; - border-left: none; - cursor: e-resize; +/* Stacked tabs */ +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-header-container-inner { + padding: 0 0 0 var(--size-4-3); + margin: 0; } -.markdown-source-view.mod-cm6 .cm-table-widget .cm-editor { - flex-basis: content; +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container { + overflow-x: auto; + overflow-y: hidden; + position: relative; + display: flex; + flex-direction: row; } -.markdown-source-view.mod-cm6 .cm-table-widget .cm-content, -.markdown-source-view.mod-cm6 .cm-table-widget .cm-line { - max-width: none; +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container > * { + flex: 0 0 auto; + position: sticky; } -.markdown-source-view.mod-cm6 .cm-table-widget .cm-content { - width: auto; +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header { + width: var(--tab-stacked-header-width); + writing-mode: var(--tab-stacked-text-writing-mode); + text-orientation: sideways; + background-color: var(--background-primary); + padding: 0; + border-radius: 0; + box-shadow: -1px 0 0 0 var(--tab-outline-color), var(--tab-stacked-shadow); + --no-tooltip: true; } -.markdown-source-view.mod-cm6 .cm-table-widget .cm-content.cm-lineWrapping { - overflow-wrap: normal; - white-space: var(--table-white-space); - word-break: normal; +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header:before, +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header:after { + display: none; } -.markdown-source-view.mod-cm6 .cm-table-widget .cm-scroller { - overflow-y: hidden; - scrollbar-gutter: auto; - line-height: var(--table-line-height); +@media (hover: hover) { + .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header:hover .workspace-tab-header-inner { + background-color: transparent; + } } -.markdown-source-view.mod-cm6 .cm-line { - position: relative; - padding: 0; +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner { + padding: var(--size-4-2) var(--size-4-2) var(--size-4-4); + border-radius: 0; } -.markdown-source-view.mod-cm6 .edit-block-button { - padding: var(--size-2-2) var(--size-2-3); - position: absolute; - top: var(--size-2-2); - right: var(--size-2-2); +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner:after { + display: none; +} +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-title { + order: 3; + width: auto; + -webkit-mask-image: unset; + padding: var(--size-4-1) 0; + transform: var(--tab-stacked-text-transform); + text-align: var(--tab-stacked-text-align); + font-weight: var(--tab-stacked-font-weight); + font-size: var(--tab-stacked-font-size); + text-orientation: mixed; +} +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-icon { + order: 2; + cursor: grab; display: flex; - opacity: 0; - color: var(--text-muted); + padding: var(--size-2-2); border-radius: var(--radius-s); - cursor: var(--cursor); } @media (hover: hover) { - .markdown-source-view.mod-cm6 .edit-block-button:hover { + .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-icon:hover { background-color: var(--background-modifier-hover); } } -.markdown-source-view.mod-cm6 .cm-panels { - background-color: inherit; - color: inherit; +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-icon:active { + cursor: grabbing; } -.markdown-source-view.mod-cm6 img.cm-widgetBuffer { - display: inline !important; - width: 0 !important; - border: 0 !important; - margin: 0 !important; - padding: 0 !important; +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-close-button { + color: var(--tab-text-color-focused); } -.view-content > .markdown-source-view.mod-cm6 > .cm-editor > .cm-scroller { - padding: var(--file-margins); +@media (hover: hover) { + .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-close-button:hover { + background-color: var(--background-modifier-hover); + } } -.empty-state { - position: absolute; - height: 100%; - width: 100%; - top: 0; - left: 0; - display: flex; - align-items: center; - justify-content: center; - flex-direction: column; +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-leaf { + width: var(--tab-stacked-pane-width); + /* This is here for performance reasons - it helps the engine know + what's out of view and avoid rendering them */ + contain: strict; } -.empty-state-container { - max-width: 480px; - max-height: 280px; - margin: 20px; - text-align: center; +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-leaf.is-hidden > * { + display: none; } -.empty-state-title { - margin: 20px 0; - font-weight: var(--h2-weight); - font-size: var(--h2-size); - line-height: var(--line-height-tight); +.sidebar-toggle-button { position: relative; + -webkit-app-region: inherit; + height: calc(var(--header-height) - 1px); + display: flex; + justify-content: center; + padding: var(--size-4-2) 0 7px 0; + -webkit-app-region: no-drag; + --icon-size: var(--icon-l); + --icon-stroke: var(--icon-l-stroke-width); } -.empty-state-action-list { - font-size: var(--font-text-size); - line-height: var(--line-height-tight); - color: var(--text-muted); - margin-top: 20px; -} -.empty-state-action { - cursor: var(--cursor); - line-height: 36px; - color: var(--text-accent); +.sidebar-toggle-button .sidebar-toggle-icon-inner { + stroke: none; } -@media (hover: hover) { - .empty-state-action:hover { - color: var(--text-accent-hover); - } +.sidebar-toggle-button.mod-left .sidebar-toggle-icon-inner { + width: var(--sidebar-left-toggle-inner-width); } -/* Can be removed since it is redundant with Close link */ -.empty-state-close-button { - display: none; +.workspace.is-left-sidedock-open .sidebar-toggle-button.mod-left .sidebar-toggle-icon-inner { + --sidebar-left-toggle-inner-width: var(--sidebar-left-toggle-inner-width-open); } -/* - -OS-dependent rules to make space for traffic lights buttons, -window buttons and sidebar toggles. - ---- - -Scenarios to account for: - -Window frame styles -- Hidden -- Custom -- Native -- Full screen - -Sidebar states -- Left sidebar open -- Left sidebar closed -- Right sidebar open -- Right sidebar closed -- Pop-out (no sidebars) - -*/ -body { - --zoom-factor: 1; - --titlebar-height: 30px; +.sidebar-toggle-button.mod-right .clickable-icon { + transform: scale(-1, 1); } -.mod-macos { - --frame-left-space: calc(80px - var(--ribbon-width)); - --frame-right-space: 0px; +.sidebar-toggle-button.mod-right .clickable-icon .sidebar-toggle-icon-inner { + width: var(--sidebar-right-toggle-inner-width); } -.mod-macos.is-popout-window { - --frame-left-space: 80px; +.workspace.is-right-sidedock-open .sidebar-toggle-button.mod-right .clickable-icon .sidebar-toggle-icon-inner { + --sidebar-right-toggle-inner-width: var(--sidebar-right-toggle-inner-width-open); } -.mod-windows, -.mod-linux { - --frame-left-space: 0px; - --frame-right-space: 126px; +/* Smoother animation for right sidebar button positioning during close */ +.mod-macos.is-hidden-frameless:not(.is-popout-window) .sidebar-toggle-button.mod-right { + background-color: var(--tab-container-background); + position: fixed; + top: 0; + right: 0; + padding-right: var(--size-4-2); + z-index: var(--layer-cover); } -body.is-frameless:not(.is-hidden-frameless) { - padding-top: calc(var(--titlebar-height) / var(--zoom-factor)); +.mod-macos.is-hidden-frameless:not(.is-popout-window) .workspace .workspace-tabs.mod-top-right-space .workspace-tab-header-container { + padding-right: 38px; } -body.is-frameless:not(.is-hidden-frameless) .titlebar { - height: var(--titlebar-height); - zoom: calc(1 / var(--zoom-factor)); +@media (forced-colors: active) { + .workspace-tab-header.is-active { + outline: 1px ButtonBorder solid; + } } -body.is-frameless:not(.is-hidden-frameless):not(.is-maximized) .titlebar { - padding-top: 2px; +.button-container { + margin-top: 20px; } -body.is-frameless.is-hidden-frameless .titlebar { - height: calc(var(--header-height) - 1px); +button { + --text-color: var(--text-normal); + -webkit-app-region: no-drag; + display: inline-flex; + align-items: center; + justify-content: center; + color: var(--text-color); + font-size: var(--font-ui-small); + border-radius: var(--button-radius); + border: 0; + padding: var(--size-4-1) var(--size-4-3); + height: var(--input-height); + font-weight: var(--input-font-weight); + cursor: var(--cursor); + font-family: inherit; + outline: none; + user-select: none; + white-space: nowrap; + -electron-corner-smoothing: var(--corner-smoothing); } -body.is-frameless.is-hidden-frameless.starter .titlebar { - height: var(--titlebar-height); +button:not(.clickable-icon) { + color: var(--text-color); + background-color: var(--interactive-normal); + box-shadow: var(--input-shadow); } -.is-fullscreen .titlebar { - display: none; +button:not(.clickable-icon).mobile-tap { + background-color: var(--interactive-hover); + box-shadow: var(--input-shadow-hover); } -.sidebar-toggle-button, -.workspace-tabs.mod-top { - --tab-container-background: var(--titlebar-background); +@media (hover: hover) { + button:hover { + background-color: var(--interactive-hover); + box-shadow: var(--input-shadow-hover); + } } -body.is-focused .titlebar, -body.is-focused .workspace-ribbon.mod-left { - --titlebar-background: var(--titlebar-background-focused); +button:focus-visible { + box-shadow: 0 0 0 3px var(--background-modifier-border-focus); } -body.is-focused .sidebar-toggle-button, -body.is-focused .workspace-tabs.mod-top { - --tab-container-background: var(--titlebar-background-focused); +button[disabled], +button[aria-disabled="true"], +button[disabled="true"] { + cursor: not-allowed; + opacity: 0.7; } -.is-hidden-frameless { - --divider-vertical-height: 100%; +button.mod-loading { + color: transparent; + position: relative; + white-space: nowrap; + overflow: hidden; + pointer-events: none; } -.workspace-ribbon .sidebar-toggle-button { +button.mod-loading::after { + content: ''; position: absolute; + width: 12px; + height: 12px; top: 0; left: 0; - width: var(--ribbon-width); - justify-content: center; + right: 0; + bottom: 0; + margin: auto; + border: 2px solid transparent; + border-top-color: var(--text-color); + border-radius: 50%; + animation: spin 1s ease infinite; } -.titlebar-button.mod-logo { - width: var(--ribbon-width); - justify-content: center; +@media (forced-colors: active) { + button { + border: 1px ButtonBorder solid; + } } -.is-hidden-frameless:not(.starter) .titlebar { - -webkit-app-region: no-drag; +button.mod-cta { + background-color: var(--interactive-accent); + --text-color: var(--text-on-accent); } -.is-hidden-frameless .titlebar-button.mod-logo { - display: none; +button.mod-cta.mobile-tap { + background-color: var(--interactive-accent-hover); } -.is-hidden-frameless:not(.is-fullscreen) .workspace-tabs.mod-top-left-space .workspace-tab-header-container { - padding-left: var(--frame-left-space); +@media (hover: hover) { + button.mod-cta:hover { + background-color: var(--interactive-accent-hover); + } } -.is-hidden-frameless:not(.is-fullscreen) .workspace-tabs.mod-top-right-space .workspace-tab-header-container { - padding-right: var(--frame-right-space); +button.mod-cta:focus-visible { + box-shadow: 0 0 0 3px var(--background-modifier-border-focus); } -.is-hidden-frameless:not(.is-fullscreen):not(.mod-macos) .workspace-tabs.mod-top-left-space .workspace-tab-header-container:before { - -webkit-app-region: no-drag; - content: ''; - height: 100%; - left: 0; - top: 0; - position: absolute; - width: var(--frame-left-space); +button.mod-warning { + background-color: var(--background-modifier-error); + --text-color: var(--text-on-accent); } -.is-hidden-frameless:not(.is-fullscreen):not(.mod-macos) .workspace-tabs.mod-top-right-space .workspace-tab-header-container:after { - -webkit-app-region: no-drag; - content: ''; - height: 100%; - right: 0; - top: 0; - position: absolute; - width: var(--frame-right-space); +@media (hover: hover) { + button.mod-warning:hover { + background-color: var(--background-modifier-error-hover); + } } -.is-hidden-frameless:not(.is-fullscreen) .titlebar-button-container.mod-right { - background-color: var(--titlebar-background); +button.mod-destructive { + --text-color: var(--text-error); } -.is-hidden-frameless:not(.is-fullscreen).is-focused .titlebar-button-container.mod-right { - background-color: var(--titlebar-background-focused); +.card-container { + display: flex; } -.titlebar-button.mod-logo:hover .logo-wireframe, -.titlebar-button.mod-logo:not(:hover) .logo-full { - display: none; +.card-container.mod-horizontal { + flex-direction: column; } -body.is-frameless > .app-container ~ * { - -webkit-app-region: no-drag; +.card { + background-color: var(--background-secondary-alt); + border-radius: 4px; + border: var(--border-width) solid var(--background-modifier-border); + margin: 0 10px; + padding: 15px 30px; + display: flex; + flex-direction: column; + flex-grow: 1; } -body.is-frameless .modal-container, -body.is-frameless .suggestion-bg { - -webkit-app-region: initial; +.card ul { + padding: 0; } -body.is-frameless .modal { - -webkit-app-region: no-drag; +.card .button-container { + margin: 10px 0; } -.loader-spinner { - width: var(--size-4-8); - height: var(--size-4-8); - margin: 100px auto; - color: var(--interactive-accent); +.card-container.mod-horizontal .card { + margin: 10px 0; } -.loader-spinner svg { - animation-name: spin; - animation-duration: 5000ms; - animation-iteration-count: infinite; - animation-timing-function: linear; - --icon-size: var(--icon-size-lx); +.card-container.mod-horizontal .card ul { + padding-left: 24px; } -@keyframes spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); +.card li { + margin: 5px 0; +} +.card.u-clickable { + cursor: var(--cursor); +} +@media (hover: hover) { + .card.u-clickable:hover { + border: var(--border-width) solid var(--interactive-accent); + background-color: hsla(var(--interactive-accent-hsl), 0.1); } } -.loader-cube { - width: 40px; - height: 40px; - margin: 100px auto; +.card.is-selected { + border: var(--border-width) solid var(--interactive-accent); + background-color: hsla(var(--interactive-accent-hsl), 0.2); } -.loader-cube .sk-cube { - width: 33%; - height: 33%; - background-color: var(--interactive-accent); - float: left; - -webkit-animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out; - animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out; +.card-title { + text-align: center; + font-size: 20px; + line-height: 30px; + color: var(--text-muted); + margin-bottom: 8px; +} +.card-description { + color: var(--text-muted); + font-size: var(--font-ui-small); + line-height: 20px; + flex-grow: 1; +} +/* Only used in Format Converter so far */ +.changelog-item { + margin: var(--size-4-2) 0; + font-size: var(--font-ui-medium); + line-height: var(--line-height); } -.loader-cube .sk-cube1 { - -webkit-animation-delay: 0.2s; - animation-delay: 0.2s; +.changelog-item:before { + content: attr(data-label); + width: 50px; + border-radius: var(--radius-m); + font-size: var(--font-ui-small); + display: inline-block; + text-align: center; + margin-right: 14px; + text-transform: uppercase; + letter-spacing: 1px; + line-height: 22px; } -.loader-cube .sk-cube2 { - -webkit-animation-delay: 0.3s; - animation-delay: 0.3s; +.changelog-item.mod-success:before { + background-color: var(--background-modifier-success); + color: var(--text-on-accent); } -.loader-cube .sk-cube3 { - -webkit-animation-delay: 0.4s; - animation-delay: 0.4s; +.changelog-item.mod-failed:before { + background-color: var(--background-modifier-error); + color: var(--text-on-accent); } -.loader-cube .sk-cube4 { - -webkit-animation-delay: 0.1s; - animation-delay: 0.1s; +.changelog-item.mod-highlighted:before { + background-color: var(--interactive-accent); } -.loader-cube .sk-cube5 { - -webkit-animation-delay: 0.2s; - animation-delay: 0.2s; +[contenteditable] { + outline: none; } -.loader-cube .sk-cube6 { - -webkit-animation-delay: 0.3s; - animation-delay: 0.3s; +.list-container { + display: flex; + flex-direction: column; + gap: var(--size-4-1); } -.loader-cube .sk-cube7 { - -webkit-animation-delay: 0s; - animation-delay: 0s; +.list-container.has-row-lines .list-item { + margin: 0 calc(var(--size-4-4) * -1); + padding: var(--size-4-2) var(--size-4-4); } -.loader-cube .sk-cube8 { - -webkit-animation-delay: 0.1s; - animation-delay: 0.1s; +.list-item { + border-radius: var(--radius-m); + display: flex; + margin: var(--size-4-2) 0; + gap: var(--size-4-2); + align-items: center; } -.loader-cube .sk-cube9 { - -webkit-animation-delay: 0.2s; - animation-delay: 0.2s; +.list-item.mod-selectable { + cursor: var(--cursor); } -@-webkit-keyframes sk-cubeGridScaleDelay { - 0%, - 70%, - 100% { - -webkit-transform: scale3D(1, 1, 1); - transform: scale3D(1, 1, 1); - } - 35% { - -webkit-transform: scale3D(0, 0, 1); - transform: scale3D(0, 0, 1); - } +.list-item.mod-selectable.mobile-tap { + background-color: var(--background-modifier-hover); } -@keyframes sk-cubeGridScaleDelay { - 0%, - 70%, - 100% { - -webkit-transform: scale3D(1, 1, 1); - transform: scale3D(1, 1, 1); - } - 35% { - -webkit-transform: scale3D(0, 0, 1); - transform: scale3D(0, 0, 1); +@media (hover: hover) { + .list-item.mod-selectable:hover { + background-color: var(--background-modifier-hover); } } -.is-loading { - position: relative; -} -.is-loading:before { - content: ' '; - position: absolute; - top: 0; - width: 0; - height: 3px; - background-color: var(--interactive-accent); - animation: 1000ms ease-in-out 300ms infinite progress-bar; -} -.pane-empty { +.list-item.mod-empty { color: var(--text-faint); font-size: var(--font-ui-small); - margin: var(--size-4-2) auto; + padding: var(--size-4-4); text-align: center; + margin: 0 auto; } -.view-header { - height: var(--header-height); - display: none; - border-bottom: var(--file-header-border); - background-color: var(--background-primary); - z-index: 1; - position: relative; - gap: var(--size-4-2); - padding: 0 var(--size-4-3); +.list-item-separator { + width: 100%; + border-bottom: var(--border-width) solid var(--background-modifier-border); } -body.is-phone .view-header, -.show-view-header .view-header { +.list-item-actions { display: flex; + gap: var(--size-4-2); } -.is-focused .workspace-leaf.mod-active .view-header { - background-color: var(--background-primary); +.list-item-part.mod-extended { + flex-grow: 1; + overflow-wrap: anywhere; } -.workspace-split.mod-left-split .view-header, -.workspace-split.mod-right-split .view-header, -.workspace-fake-target-overlay.is-in-sidebar .view-header { - display: none; +.list-item-part.clickable-icon { + display: flex; + align-items: center; + justify-content: center; + padding: var(--size-2-2); + cursor: var(--cursor); + border-radius: var(--radius-s); + color: var(--icon-color); } -.view-header.is-highlighted:after { - content: ' '; - position: absolute; - width: 100%; - height: 100%; - top: 0; - left: 0; - background-color: hsla(var(--interactive-accent-hsl), 0.5); +.list-item-part.clickable-icon:hover, +.list-item-part.clickable-icon:active { + color: var(--icon-color-hover); + background-color: var(--background-modifier-hover); } -.view-header .view-header-icon { - display: none; - padding: var(--size-2-2); - margin-right: var(--size-2-3); - color: var(--text-muted); - align-self: center; - cursor: grab; +.list-item-desc { + display: flex; + flex-wrap: wrap; + gap: var(--size-4-2); + color: var(--text-faint); + font-size: var(--font-ui-smaller); + width: 100%; } -.view-header .view-header-icon:active { - cursor: grabbing; +.u-center-text { + text-align: center; } -.view-header-title { - font-size: var(--file-header-font-size); - font-weight: var(--file-header-font-weight); - flex: 1 1 0; - max-width: max-content; - overflow: auto; - padding: 0 var(--size-4-1); - white-space: pre; - word-wrap: normal; +.u-faded-text { color: var(--text-muted); - scroll-padding-inline-end: 20px; -} -.is-focused .workspace-leaf.mod-active .view-header-title { - color: var(--text-normal); } -.view-header-title::-webkit-scrollbar { - display: none; +.u-pop { + color: var(--text-accent); + font-weight: var(--font-semibold); } -.view-header-title-container { - flex-grow: 1; - overflow: hidden; - position: relative; - justify-content: var(--file-header-justify); - display: flex; - align-items: center; - gap: 0; - white-space: nowrap; +.u-break-word { + overflow-wrap: break-word; } -.view-header-title-parent { - font-size: var(--file-header-font-size); +.u-muted { color: var(--text-muted); - min-width: 0; - display: flex; - gap: 0; - overflow: hidden; } -.view-header-title-parent .view-header-breadcrumb { - padding: 2px 4px; - border-radius: var(--radius-s); +.u-small { + font-size: 0.8em; } -@media (hover: hover) { - .view-header-title-parent .view-header-breadcrumb:hover { - background-color: var(--background-modifier-hover); - color: var(--text-normal); - } +.u-clickable { + cursor: var(--cursor); } -.view-header-title-parent .view-header-breadcrumb-separator { - padding: 2px 1px; - color: var(--text-faint); +/* In file recovery, sync version history, and publish diff */ +.diff-view { + user-select: text; } -.view-content { - width: 100%; - height: calc(100% - var(--header-height)); +.diff-line { + padding: 0 var(--size-4-2); + white-space: pre-wrap; + word-break: break-word; } -.workspace-split.mod-root .view-content { - background-color: var(--background-primary); +.diff-line.mod-left { + background-color: rgba(var(--background-modifier-error-rgb), 0.2); } -.workspace-split.mod-root .workspace-fake-target-overlay .view-content { - background-color: transparent; +.diff-line.mod-left .diff-changed { + background-color: rgba(var(--background-modifier-error-rgb), 0.4); } -.workspace-split.mod-left-split .view-content, -.workspace-split.mod-right-split .view-content { - height: 100%; - overflow: auto; +.diff-line.mod-right { + background-color: rgba(var(--background-modifier-success-rgb), 0.2); } -.inline-title { - font-weight: var(--inline-title-weight); - font-size: var(--inline-title-size); - line-height: var(--inline-title-line-height); - font-style: var(--inline-title-style); - font-variant: var(--inline-title-variant); - font-family: var(--inline-title-font); - margin-bottom: var(--inline-title-margin-bottom); - letter-spacing: -0.015em; - color: var(--inline-title-color); +.diff-line.mod-right .diff-changed { + background-color: rgba(var(--background-modifier-success-rgb), 0.4); } -.hover-popover .inline-title, -.inline-embed .inline-title { - display: none; +.diff-collapsed { + text-align: center; + color: var(--text-muted); + cursor: pointer; + font-size: var(--font-ui-small); + margin: var(--size-4-2) 0; } -body:not(.show-inline-title) .inline-title:not([data-level]) { - display: none; +@media (hover: hover) { + .diff-collapsed:hover { + color: var(--text-accent); + } +} +/* Document search and replace */ +/* +Moves search to the top +#todo move this into DOM */ +.markdown-reading-view.is-searching, +.markdown-source-view.is-replacing, +.markdown-source-view.is-searching { + flex-direction: column-reverse; } -::selection { - background-color: var(--text-selection); +/* Container for dcoument search/replace UI */ +.mod-active .document-search-container { + background-color: var(--background-primary); } -.markdown-reading-view { +.document-search-container { display: flex; flex-direction: column; + padding: var(--size-4-2) 0; + margin: 0 var(--size-4-4); + gap: var(--size-4-2); + z-index: var(--layer-popover); } -.markdown-preview-view { - font-size: var(--font-text-size); - font-family: var(--font-text); - line-height: var(--line-height-normal); +.document-search, +.document-replace { width: 100%; - height: 100%; - padding: var(--file-margins); - position: relative; - overflow-y: auto; - overflow-wrap: break-word; - color: var(--text-normal); - user-select: text; - -webkit-user-select: text; - scrollbar-gutter: stable; + max-width: var(--file-line-width); + margin: 0 auto; + display: flex; + padding: 0 var(--size-4-2); + gap: var(--size-4-2); } -.workspace-leaf-content.is-read-mode .markdown-preview-view { - width: 100%; - left: 0; - background-color: var(--background-primary); +.document-replace { + display: none; } -.markdown-preview-view.is-readable-line-width .markdown-preview-sizer { - max-width: var(--file-line-width); - margin-left: auto; - margin-right: auto; +.document-search-container.mod-replace-mode .document-replace { + display: flex; } -.markdown-rendered.rtl { - direction: rtl; +.document-search-input, +.document-replace-input { + flex-grow: 1; } -/* Ribbon */ -/* Add background to top left corner space above ribbon */ -.workspace-ribbon.mod-left { - margin-top: var(--header-height); - /* Add the tab background in the top left corner */ +.document-search-input.mod-no-match, +.document-replace-input.mod-no-match { + background-color: rgba(var(--background-modifier-error-rgb), 0.2); } -.workspace-ribbon.mod-left:before { - -webkit-app-region: drag; +@media (hover: hover) { + .document-search-input.mod-no-match:hover, + .document-replace-input.mod-no-match:hover { + background-color: rgba(var(--background-modifier-error-rgb), 0.2); + } +} +.document-search-count { + color: var(--text-muted); + font-size: var(--font-ui-smaller); + font-variant-numeric: tabular-nums; position: absolute; - left: 0; - top: 0; - background-color: var(--titlebar-background); - content: " "; - border-bottom: var(--tab-outline-width) solid var(--tab-outline-color); - height: var(--header-height); - width: var(--ribbon-width); - box-sizing: border-box; + transform: translateY(-50%); + top: 50%; + inset-inline-end: var(--size-4-2); } -.workspace-ribbon { - width: var(--ribbon-width); - flex: 0 0 var(--ribbon-width); +.document-replace-buttons, +.document-search-buttons { display: flex; - flex-direction: column; - overflow: hidden; - background-color: var(--ribbon-background); - z-index: var(--layer-sidedock); - color: var(--text-muted); - padding: var(--ribbon-padding); gap: var(--size-4-1); - border-right: var(--divider-width) solid var(--divider-color); -} -.workspace-ribbon.mod-left.is-collapsed { - transition: background-color 250ms 95ms ease-in-out; - background-color: var(--ribbon-background-collapsed); - border-right-color: var(--divider-color); + align-items: center; } -.workspace-ribbon.mod-right { - display: none; +.document-search-button { + font-size: var(--font-ui-small); + color: var(--text-muted); } -.workspace-ribbon.is-hidden { - display: none; +/* Read */ +.markdown-rendered .search-highlight > div { + position: absolute; + pointer-events: none; + box-shadow: 0 0 0px 2px var(--text-normal); + opacity: 0.3; + mix-blend-mode: var(--highlight-mix-blend-mode); + border-radius: 2px; } -.workspace-ribbon.is-collapsed { - background-color: var(--background-secondary); +.markdown-rendered .search-highlight > div.is-active { + box-shadow: 0 0 0px 3px var(--text-accent); + opacity: 1; } -.side-dock-settings, -.side-dock-actions { - flex-direction: column; +.cm-s-obsidian span.obsidian-search-match-highlight { + box-shadow: 0 0 0px 3px var(--text-accent); + mix-blend-mode: var(--highlight-mix-blend-mode); + border-radius: 2px; } -.side-dock-settings .side-dock-ribbon-action, -.side-dock-actions .side-dock-ribbon-action { - margin: 0 auto; +/* Edit */ +.markdown-source-view.mod-cm6 .document-search-container { + flex: 0 0 auto; } -.side-dock-settings { - margin-top: auto; +.cm-s-obsidian span.cm-highlight.obsidian-search-match-highlight { + background-color: var(--text-selection); } -.release-notes-view { - padding: var(--file-margins); +/* class applies to select element itself, not a wrapper element */ +select, +.combobox-button, +.dropdown { + -webkit-app-region: no-drag; + height: var(--input-height); + font-size: var(--font-ui-small); + font-family: inherit; + font-weight: var(--input-font-weight); + color: var(--text-normal); + line-height: var(--line-height-tight); + max-width: 100%; + /* useful when width is set to anything other than 100% */ + box-sizing: border-box; + margin: 0; + border: 0; + box-shadow: var(--input-shadow); + border-radius: var(--input-radius); + -webkit-appearance: none; + appearance: none; + background-color: var(--dropdown-background); + padding: var(--dropdown-padding); + background-repeat: no-repeat, repeat; + /* arrow icon position (1em from the right, 50% vertical) , then gradient position*/ + background-position: var(--dropdown-background-position); + /* icon size, then gradient */ + background-size: var(--dropdown-background-size); + background-blend-mode: hard-light; + -electron-corner-smoothing: var(--corner-smoothing); } -.release-notes-view .markdown-preview-view { - overflow: visible; +@media (hover: hover) { + select:hover, + .combobox-button:hover, + .dropdown:hover { + box-shadow: var(--input-shadow-hover); + background-color: var(--dropdown-background-hover); + } } -.release-notes-view .is-readable-line-width { - max-width: var(--file-line-width); - margin-left: auto; - margin-right: auto; +select.mobile-tap, +.combobox-button.mobile-tap, +.dropdown.mobile-tap { + box-shadow: var(--input-shadow-hover); + background-color: var(--dropdown-background-hover); } -.setting { - display: flex; - align-items: center; +select:focus-visible, +.combobox-button:focus-visible, +.dropdown:focus-visible { + box-shadow: 0 0 0px 3px var(--background-modifier-border-focus); + outline: none; } -.setting-text { - flex-grow: 1; +@media (forced-colors: active) { + select, + .dropdown { + border: 1px ButtonBorder solid; + } } -.setting-title { - font-size: var(--font-ui-large); - line-height: var(--line-height-normal); +.dropdown { + background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27%23000%27 opacity=%270.9%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27 %3E%3Cpath d=%27m7 15 5 5 5-5%27/%3E%3Cpath d=%27m7 9 5-5 5 5%27/%3E%3C/svg%3E"); } -.setting-explanation { - color: var(--text-muted); +.theme-dark .dropdown { + background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27%23FFF%27 opacity=%270.6%27 stroke-width=%272%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27 %3E%3Cpath d=%27m7 15 5 5 5-5%27/%3E%3Cpath d=%27m7 9 5-5 5 5%27/%3E%3C/svg%3E"); } -.modal.mod-new-editor { - max-width: 600px; +/* Set options to normal weight */ +.dropdown option { + font-weight: normal; + background-color: var(--background-primary); } -.modal.mod-trust-folder { - max-width: 700px; +.combobox:not(.has-input-focus) .suggestion-item.is-selected { + background-color: transparent; } -.modal.mod-settings .vertical-tab-header { - flex: 0 0 25%; - min-width: 180px; - max-width: 250px; - overflow: auto; - border-right: 1px solid var(--divider-color); +.combobox .search-input-container { + --search-icon-color: var(--text-faint); + margin-top: 2px; } -.modal.mod-settings .modal-content { - margin-top: 0; - overflow: hidden; +.combobox .search-input-container input[type=search] { + border: 0; + box-shadow: none; + background-color: transparent; } -.modal.mod-plugin-options .modal-content { - margin: var(--size-4-6) 0; +.combobox .suggestion-item { + font-size: var(--font-ui-small); + padding: var(--size-2-3) var(--size-4-2) var(--size-2-3) var(--size-4-2); } -.setting-item { +.combobox-button { + --dropdown-padding: 0 var(--size-2-3) 0 var(--size-4-2); display: flex; align-items: center; - padding: 0.75em 0; - border-top: 1px solid var(--background-modifier-border); - /* Add extra space for setting heading if it starts a new section */ -} -.setting-item + div > .setting-item-heading, -.setting-item + .setting-item-heading { - margin-top: 0.75em; -} -.setting-item:first-child { - padding-top: 0; - border-top: none; -} -.setting-item > *:first-child { - margin-right: var(--size-4-4); -} -.setting-item > *:last-child { - margin-right: 0; -} -.setting-item.mod-cta { - justify-content: center; -} -.setting-item-heading { - font-weight: var(--font-semibold); - border-top: none; + gap: var(--size-2-2); + min-height: var(--input-height); + overflow: hidden; + white-space: nowrap; + border-style: solid; + border-color: var(--background-modifier-border); } -.setting-item-heading .setting-item-info { - flex-grow: 0; - margin-right: 0; +.combobox-button .combobox-button-icon { + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); + color: var(--text-muted); + display: flex; + align-items: center; } -.setting-item-heading .setting-item-description { - font-weight: var(--font-normal); +.combobox-button .combobox-button-label { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + margin-inline-end: auto; } -.setting-item-info { - flex: 1 1 auto; +.combobox-button .combobox-button-label:empty:before { + content: attr(placeholder); + color: var(--input-placeholder-color); + pointer-events: none; } -.setting-item-description { +.combobox-button .combobox-clear-button { + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); color: var(--text-muted); - font-size: var(--font-ui-smaller); - padding-top: var(--size-4-1); - line-height: var(--line-height-tight); + display: flex; + align-items: center; } -.setting-item-description:empty { +.combobox-button:not(.mod-clearable) .combobox-clear-button { display: none; } -.setting-item-description code { - font-family: var(--font-monospace); - font-size: var(--font-smaller); - border-radius: var(--radius-s); - padding: 0 3px 2px 3px; - position: relative; - bottom: 1px; -} -.setting-item-description ul { - margin: var(--size-4-1) 0; - padding-left: var(--size-4-6); +.combobox-button .combobox-button-chevron { + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); + align-items: center; + display: flex; } -.setting-item-name { - color: var(--text-normal); - font-size: var(--font-ui-medium); - line-height: var(--line-height-tight); +.combobox-button:last-child { + border-inline-end-width: 0; } -.setting-item-control { - flex: 1 1 auto; - text-align: right; - display: flex; - justify-content: flex-end; - align-items: center; - gap: var(--size-4-2); +.combobox-button.has-focus, +.combobox-button:focus-visible { + background-color: var(--metadata-label-background-active); + box-shadow: 0 0 0px 3px var(--background-modifier-border-focus); } -.setting-item-control.mod-vertical { - flex-direction: column; +.combobox-button.mod-error { + box-shadow: inset 0 0 0 var(--border-width) var(--background-modifier-error); } -.setting-item-control.mod-vertical > *:not(:last-child) { - margin-bottom: 10px; - margin-right: 0; +.is-mobile .combobox-button { + --dropdown-padding: 0 var(--size-4-4) 0 var(--size-4-4); + gap: var(--size-4-2); } -.setting-item-control.mod-hotkey { - padding-top: 0; - cursor: default; +.is-mobile .combobox-clear-button { + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); } -.setting-item-control.mod-hotkey input { - font-family: var(--font-monospace); - font-size: var(--font-smaller); +.is-phone .combobox.suggestion-container { + max-height: calc(100vh - var(--view-header-height) - var(--safe-area-inset-top)); } -.setting-item-control.mod-hotkey input:focus { - background-color: var(--interactive-accent); - color: var(--text-on-accent); +.is-phone .combobox.suggestion-container.has-input-focus { + max-height: unset; + height: calc(100vh - var(--view-header-height) - var(--safe-area-inset-top)); } -.setting-item-control select { - width: inherit; - max-width: 400px; +.is-phone .combobox .search-input-container { + margin: var(--size-4-1) var(--size-4-3); } -.setting-command-hotkeys { - display: flex; - flex-wrap: wrap; - gap: var(--size-4-1); +.is-phone .combobox .search-input-container input[type=search] { + border-radius: var(--radius-l); + background-color: var(--background-modifier-form-field); } -.setting-hotkey { - font-family: -apple-system, BlinkMacSystemFont, var(--font-monospace); - font-size: var(--font-ui-small); - background-color: var(--background-modifier-hover); +.flair { + background-color: var(--flair-background); border-radius: var(--radius-s); - padding: 2px 4px 2px 8px; - align-self: flex-end; + color: var(--flair-color); + font-size: 10px; + letter-spacing: 0.05em; + margin-inline-start: var(--size-4-2); + padding: var(--size-2-1) var(--size-2-2); + position: relative; + text-transform: uppercase; white-space: nowrap; - display: flex; - align-items: center; - gap: var(--size-4-1); + vertical-align: middle; } -.setting-hotkey.has-conflict { - background-color: var(--background-modifier-error); - color: var(--text-on-accent); +.flair.mod-flat { + vertical-align: top; } -@media (hover: hover) { - .setting-hotkey.has-conflict:hover { - background-color: var(--background-modifier-error-hover); - } +.flair.mod-pop { + --flair-background: var(--interactive-accent); + --flair-color: var(--text-on-accent); } -.setting-hotkey.mod-active { - background-color: var(--interactive-accent); - color: var(--text-on-accent); +.markdown-preview-view:not(.allow-fold-lists) .list-collapse-indicator, +.markdown-preview-view:not(.allow-fold-headings) .heading-collapse-indicator { + display: none; } -.setting-hotkey.mod-empty { - padding-right: var(--size-4-2); +/* #todo Reduce specificity here */ +.cm-fold-indicator .collapse-indicator, +.cm-gutterElement .collapse-indicator, +.collapse-indicator, +.fold-gutter { + opacity: 0; } -.setting-hotkey-icon { +/* +.is-mobile & .cm-fold-indicator .collapse-indicator { + opacity: 1; +}*/ +h1:hover .collapse-indicator, +h2:hover .collapse-indicator, +h3:hover .collapse-indicator, +h4:hover .collapse-indicator, +h5:hover .collapse-indicator, +h6:hover .collapse-indicator, +.collapse-indicator:hover, +.is-collapsed .collapse-indicator, +.cm-fold-indicator.is-collapsed .collapse-indicator, +.cm-gutterElement:hover .collapse-indicator, +.cm-gutterElement .is-collapsed .collapse-indicator, +.cm-line:hover .cm-fold-indicator .collapse-indicator, +.fold-gutter.is-collapsed, +.fold-gutter:hover, +.metadata-properties-heading:hover .collapse-indicator { + opacity: 1; +} +.collapse-icon { display: flex; align-items: center; - cursor: var(--cursor); - border-radius: 50%; - line-height: 1; - text-align: center; } -.setting-hotkey-icon .svg-icon { - width: 16px; - height: 16px; - stroke-width: 2px; - opacity: 0.6; +.collapse-icon:before { + content: "\200B"; } -@media (hover: hover) { - .setting-hotkey-icon:hover .svg-icon { - opacity: 1; - } +.collapse-icon svg.svg-icon { + color: var(--nav-collapse-icon-color); + stroke-width: 4px; + width: 10px; + height: 10px; + transition: transform 100ms ease-in-out; } -@media (hover: hover) { - .setting-delete-hotkey:hover { - background-color: var(--background-modifier-error); - color: var(--text-on-accent); - } +.collapse-icon.is-collapsed svg.svg-icon { + transform: rotate(calc(var(--direction) * -1 * 90deg)); } -.setting-add-hotkey-button, -.setting-restore-hotkey-button { - padding: var(--size-2-2); - border-radius: var(--radius-s); - color: var(--text-faint); +.view-content .list-collapse-indicator svg.svg-icon, +.view-content .collapse-indicator svg.svg-icon { + color: var(--collapse-icon-color); +} +.view-content .is-collapsed .list-collapse-indicator svg.svg-icon, +.view-content .is-collapsed .collapse-indicator svg.svg-icon { + color: var(--collapse-icon-color-collapsed); +} +.markdown-preview-view .collapse-indicator { + display: inline-flex; + position: absolute; cursor: var(--cursor); - height: calc(var(--icon-l) + var(--size-2-2) + var(--size-2-2)); + user-select: none; } -.setting-add-hotkey-button.mod-active, -.setting-restore-hotkey-button.mod-active { - color: var(--text-accent); +.markdown-preview-view .collapse-indicator .svg-icon { + vertical-align: middle; } -@media (hover: hover) { - .setting-add-hotkey-button:hover, - .setting-restore-hotkey-button:hover { - background-color: var(--background-modifier-hover); - color: var(--text-normal); - } +.markdown-preview-view li.is-collapsed > ul, +.markdown-preview-view li.is-collapsed > ol { + display: none; } -.setting-editor-extra-setting-button { - line-height: 0; +.markdown-preview-view .heading-collapse-indicator { + margin-inline-start: -22px; + padding: 0 6px; } -.setting-message { - font-size: var(--font-ui-small); +.markdown-source-view.mod-cm6 .cm-fold-indicator .collapse-indicator { + opacity: 0; } -.setting-font-list { - margin: 1.5em 0 0.75em 0; +.markdown-source-view.mod-cm6 .cm-line:hover .cm-fold-indicator .collapse-indicator, +.markdown-source-view.mod-cm6 .cm-fold-indicator.is-collapsed .collapse-indicator { + opacity: 1; } -.hotkey-settings-container { - display: flex; - flex-direction: column; +.markdown-source-view.mod-cm6 .cm-foldPlaceholder { + color: var(--text-faint); + background-color: transparent; + border: none; + margin-inline-start: 8px; + user-select: none; } -.hotkey-settings-container .setting-item-description { - padding-top: 0; +.markdown-source-view.mod-cm6 .cm-fold-indicator { + display: inline-block; + position: relative; + z-index: 1; } -.hotkey-settings-container hr { - margin: 20px 0 10px 0; +.markdown-source-view.mod-cm6 .cm-fold-indicator:before { + content: '\200B'; } -.hotkey-list-container { - overflow: auto; +.markdown-source-view.mod-cm6 .cm-fold-indicator .collapse-indicator { + position: absolute; + top: 0; + inset-inline-end: 0; + height: 100%; + cursor: var(--cursor); + padding-inline-end: 5px; } -.hotkey-header-container { - justify-content: space-between; - padding-bottom: var(--size-4-8); - display: flex; - flex-wrap: wrap; +/* Consistency for hover states across all icon buttons */ +svg.svg-icon { + height: var(--icon-size); + width: var(--icon-size); + stroke-width: var(--icon-stroke); } -.hotkey-filter { - align-items: center; - background-color: var(--background-secondary); - border-radius: var(--radius-s); +/* Parent container of button rows */ +.nav-buttons-container, +.view-actions, +.workspace-tab-header-inner, +.side-dock-settings, +.side-dock-actions { display: flex; - font-size: var(--font-ui-small); - padding: var(--size-4-1) var(--size-4-1) var(--size-4-1) var(--size-4-2); - gap: var(--size-2-1); + justify-content: center; } -.setting-filter-container { - display: flex; - gap: var(--size-4-2); - margin-bottom: var(--size-4-8); +.side-dock-settings, +.side-dock-actions { + gap: var(--size-2-3); } -.input-right-decorator { - position: absolute; - transform: translateY(-50%); - top: 50%; - right: var(--size-4-1); +.view-actions { + gap: 0; + align-items: center; + --icon-size: var(--icon-s); +} +.nav-file-icon .svg-icon, +.suggestion-flair .svg-icon, +.menu-item-icon .svg-icon, +.status-bar-item .svg-icon { + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); } -.search-input-container input:not(:placeholder-shown) ~ .input-right-decorator { - right: calc(var(--size-4-1) + 28px); +.clickable-icon.side-dock-ribbon-action .svg-icon, +.mod-left-split .workspace-tab-header-inner-icon .svg-icon, +.mod-right-split .workspace-tab-header-inner-icon .svg-icon { + --icon-size: var(--icon-l); + --icon-stroke: var(--icon-l-stroke-width); } -.search-input-container.mod-hotkey .clickable-icon { - padding: var(--size-2-1); +.clickable-icon.side-dock-ribbon-action:active, +.mod-left-split .workspace-tab-header-inner-icon:active, +.mod-right-split .workspace-tab-header-inner-icon:active { + color: var(--icon-color-focused); } -.hotkey-filter-remove-button { - cursor: var(--cursor); - color: var(--text-muted); - padding: var(--size-2-1); - border-radius: var(--radius-s); +/* Use horizontal more actions "..." on macOS/iOS per OS guidelines */ +.is-ios .lucide-more-vertical, +.mod-macos .lucide-more-vertical { + transform: rotate(90deg); +} +/* Parent button containers for SVG button icons */ +.clickable-icon { + -webkit-app-region: no-drag; + background-color: transparent; display: flex; align-items: center; - --icon-size: var(--icon-xs); - --icon-stroke: var(--icon-xs-stroke-width); + justify-content: center; + padding: var(--size-2-2) var(--size-2-3); + cursor: var(--cursor); + border-radius: var(--clickable-icon-radius); + color: var(--icon-color); + height: auto; + -electron-corner-smoothing: var(--corner-smoothing); +} +.clickable-icon svg { + opacity: var(--icon-opacity); + transition: opacity var(--anim-duration-fast) ease-in-out; } @media (hover: hover) { - .hotkey-filter-remove-button:hover { + .clickable-icon:hover { + box-shadow: none; + color: var(--icon-color-hover); background-color: var(--background-modifier-hover); } + .clickable-icon:hover svg { + opacity: var(--icon-opacity-hover); + } + .clickable-icon.has-active-menu, + .clickable-icon:active { + color: var(--icon-color-focused); + background-color: var(--background-modifier-hover); + } + .clickable-icon.has-active-menu svg, + .clickable-icon:active svg { + opacity: var(--icon-opacity-hover); + } } -.modal.mod-image-lightbox { - max-width: 90vw; - max-height: 90vh; - padding: 0; -} -.modal.mod-image-lightbox .modal-content { - padding: var(--size-4-12) var(--size-4-3) var(--size-4-2) var(--size-4-3); - text-align: center; +.clickable-icon.is-active { + color: var(--icon-color-active); + background-color: var(--background-modifier-active-hover); } -.login-field { - max-width: 500px; - margin: 1em auto; +.clickable-icon.is-active svg { + opacity: var(--icon-opacity-hover); } -.spellchecker-dictionary-container { - max-height: 60vh; - overflow: auto; +@media (hover: hover) { + .clickable-icon.is-active:hover { + background-color: var(--background-modifier-active-hover); + } } -.spellchecker-dictionary-item { - display: flex; - margin-bottom: 10px; +.is-mobile .clickable-icon { + transition: opacity 0.1s ease-in-out; } -.spellchecker-dictionary-word { - flex-grow: 1; +.clickable-icon.mobile-tap svg { + opacity: var(--icon-opacity-hover); } -.spellchecker-dictionary-remove-button { - cursor: var(--cursor); +.clickable-icon[aria-disabled='true'] { + background-color: unset; color: var(--text-muted); - margin-right: 10px; + opacity: 0.4; } @media (hover: hover) { - .spellchecker-dictionary-remove-button:hover { - color: var(--text-normal); + .clickable-icon[aria-disabled='true']:hover { + background-color: unset; } } -.modal.mod-new-editor .card, -.modal.mod-restricted-mode .card { - flex: 1 0 0; -} -.input-right-decorator { - position: absolute; - transform: translateY(-50%); - top: 50%; - right: var(--size-4-1); -} -.input-right-decorator.clickable-icon { - padding: var(--size-2-1) var(--size-2-2); -} -.input-right-decorator.clickable-icon.is-active { - background-color: transparent; -} -.search-input-container input:not(:placeholder-shown) ~ .input-right-decorator { - right: calc(var(--size-4-1) + 28px); -} -.search-input-container input:placeholder-shown ~ .search-input-clear-button { - display: none; -} -.setting-progress-bar { - width: 100%; - height: var(--size-4-2); - border-radius: var(--radius-s); - background-color: var(--background-secondary); - box-shadow: inset 0 0 0 1px var(--background-modifier-border); -} -.setting-progress-bar-inner { - width: 0; - height: 100%; - border-radius: var(--radius-s); - background-color: var(--interactive-accent); +.clickable-icon.mod-warning { + color: var(--text-error); } -.mod-community-modal .modal-sidebar .setting-item { - max-width: var(--modal-community-sidebar-width); - padding: 0 var(--size-4-3) var(--size-4-1); - border: none; - gap: var(--size-4-2); +.clickable-icon.mod-filled svg { + fill: var(--icon-color); } -.mod-community-modal .modal-sidebar .setting-item:first-child { - max-width: 500px; - gap: 0; - margin-bottom: var(--size-4-2); +.setting-item-control .clickable-icon { + padding: var(--size-2-2); } -.mod-community-modal .modal-sidebar .setting-item-name { +.text-icon-button { + -webkit-app-region: no-drag; + display: inline-flex; + overflow: hidden; + align-items: center; + color: var(--text-muted); font-size: var(--font-ui-small); - padding-left: var(--size-4-1); + border-radius: var(--button-radius); + padding: var(--size-2-2); + font-weight: var(--input-font-weight); + cursor: var(--cursor); + font-family: inherit; + gap: var(--size-2-2); + user-select: none; + white-space: nowrap; + -electron-corner-smoothing: var(--corner-smoothing); } -.mod-community-modal .modal-sidebar .setting-item-info { +.text-icon-button .flair { margin: 0; - flex-grow: 0; } -.mod-community-modal .modal-sidebar .search-input-container { - width: 100%; +.text-icon-button.is-active { + color: var(--icon-color-active); } -.mod-community-modal .modal-sidebar button.clickable-icon { - padding: 6px 10px; +.text-icon-button .text-button-icon { display: flex; align-items: center; - color: var(--text-normal); -} -.community-modal-details-empty-state { - padding: 0; - text-align: center; + justify-content: center; } -.community-modal-search-summary { - font-size: var(--font-ui-small); - padding: var(--size-4-1) var(--size-4-3) var(--size-4-3) var(--size-4-4); +.text-icon-button .text-button-label { + overflow: hidden; + text-overflow: ellipsis; + padding-inline-end: var(--size-2-1); } -.community-modal-search-results-wrapper { - flex: 1 0 auto; - overflow: auto; - border-top: var(--border-width) solid var(--divider-color); - scroll-padding: var(--size-4-3); - /* This helps with performance of the app */ - contain: strict; +.text-icon-button .mod-aux { + --icon-size: var(--icon-xs); + color: var(--text-muted); } -.community-modal-search-results { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); - gap: var(--size-4-3); - padding: var(--size-4-3); +.text-icon-button:focus-visible { + box-shadow: 0 0 0 var(--input-border-width-focus) var(--background-modifier-border-focus); + outline: none; } -.community-item { - position: relative; - background-color: var(--background-primary); - padding: var(--size-4-3); - cursor: var(--cursor); - border-radius: var(--radius-m); - border: 1px solid var(--background-modifier-border); - display: flex; - flex-direction: column; - gap: var(--size-2-1); +.text-icon-button.mobile-tap { + box-shadow: none; + opacity: var(--icon-opacity-hover); + color: var(--text-normal); } -.community-item:last-child { - margin-bottom: 0; +.text-icon-button.mobile-tap .text-button-icon { + color: var(--icon-color-hover); } -.community-item .suggestion-highlight { - background-color: var(--text-highlight-bg); +.text-icon-button.is-disabled { + cursor: not-allowed; + opacity: 0.7; } -.community-item.is-selected, -.community-item.is-selected:hover { - border-color: var(--interactive-accent); - background-color: var(--interactive-accent); - color: var(--text-on-accent); +@media (hover: hover) { + .text-icon-button.has-active-menu, + .text-icon-button:hover { + box-shadow: none; + opacity: var(--icon-opacity-hover); + background-color: var(--background-modifier-hover); + color: var(--text-normal); + } + .text-icon-button.has-active-menu .text-button-icon, + .text-icon-button:hover .text-button-icon { + color: var(--icon-color-hover); + } } -.community-item.is-selected .community-item-author, -.community-item.is-selected:hover .community-item-author, -.community-item.is-selected .community-item-repo, -.community-item.is-selected:hover .community-item-repo, -.community-item.is-selected .community-item-downloads, -.community-item.is-selected:hover .community-item-downloads, -.community-item.is-selected .community-item-updated, -.community-item.is-selected:hover .community-item-updated { - color: var(--text-on-accent); - opacity: 0.8; +.text-icon-button.is-active.has-active-menu, +.text-icon-button.is-active:active { + color: var(--icon-color-active); + background-color: var(--background-modifier-active-hover); } -.community-item.is-selected .flair, -.community-item.is-selected:hover .flair { - color: var(--text-on-accent); - background-color: transparent; +.text-icon-button.is-active.has-active-menu .text-button-icon, +.text-icon-button.is-active:active .text-button-icon { + color: var(--icon-color-active); } @media (hover: hover) { - .community-item:hover { - border-color: var(--background-modifier-border-hover); + .text-icon-button.is-active:hover { + color: var(--icon-color-active); + background-color: var(--background-modifier-active-hover); + } + .text-icon-button.is-active:hover .text-button-icon { + color: var(--icon-color-active); } } -.is-mobile .community-item { - max-width: 500px; -} -.community-item .flair { - margin-left: var(--size-4-1); - background-color: var(--tag-background); - color: var(--tag-color); - vertical-align: middle; - top: -1px; +.markdown-rendered.show-indentation-guide li > ul, +.markdown-rendered.show-indentation-guide li > ol { + position: relative; } -.community-item-name { - font-size: var(--font-ui-medium); - line-height: var(--line-height-tight); - font-weight: var(--font-medium); +.markdown-rendered.show-indentation-guide li > ul::before, +.markdown-rendered.show-indentation-guide li > ol::before { + content: "\200B"; + position: absolute; + display: block; + inset-inline-start: var(--indentation-guide-reading-indent); + top: 0; + bottom: 0; + border-inline-end: var(--indentation-guide-width) solid var(--indentation-guide-color); } -.community-item-author { - font-size: var(--font-ui-smaller); - line-height: var(--line-height-tight); - color: var(--text-muted); +.markdown-source-view.mod-cm6 .cm-indent { + min-width: var(--list-indent); + display: inline-block; } -.community-item-downloads { - font-size: var(--font-ui-smaller); - color: var(--text-muted); - --icon-color: var(--text-faint); - --icon-size: var(--icon-xs); - --icon-stroke: var(--icon-xs-stroke-width); +.markdown-source-view.mod-cm6 .cm-indent::before { + content: "\200B"; + display: block; + width: 1px; + border-inline-end: var(--indentation-guide-width) solid var(--indentation-guide-color); + color: transparent; + position: absolute; + top: 0; + bottom: 0; + margin-inline-start: var(--indentation-guide-source-indent); } -.community-item-downloads svg { - vertical-align: text-bottom; +.markdown-source-view.mod-cm6.is-live-preview .cm-indent::before { + margin-inline-start: var(--indentation-guide-editing-indent); } -.community-item-updated { - font-size: var(--font-ui-smaller); +.markdown-source-view.mod-cm6 .cm-active-indent::before { + border-inline-end: var(--indentation-guide-width-active) solid var(--indentation-guide-color-active); +} +.input-button { + padding: 6px 14px; + margin-inline-start: 14px; color: var(--text-muted); - margin-bottom: var(--size-4-2); + font-size: var(--font-ui-medium); + position: relative; + top: -1px; } -.community-item-downloads-text { - margin-left: var(--size-2-2); +@media (hover: hover) { + .input-button:hover { + color: var(--text-normal); + } } -.community-item-desc { +textarea, +.multi-select-container, +input.metadata-input-text, +input[type='date'], +input[type='datetime-local'], +input[type='text'], +input[type='search'], +input[type='email'], +input[type='password'], +input[type='number'] { + -webkit-app-region: no-drag; + background: var(--background-modifier-form-field); + border: var(--input-border-width) solid var(--background-modifier-border); + color: var(--text-normal); + font-family: inherit; + padding: var(--input-padding); font-size: var(--font-ui-small); - line-height: var(--line-height-tight); - margin-top: 4px; + border-radius: var(--input-radius); + outline: none; } -.community-item-badge.mod-update { - --icon-size: var(--icon-xs); - --icon-stroke: var(--icon-xs-stroke-width); - color: var(--interactive-accent); - position: absolute; - top: var(--size-4-3); - right: var(--size-4-3); +@media (hover: hover) { + textarea:hover, + .multi-select-container:hover, + input.metadata-input-text:hover, + input[type='date']:hover, + input[type='datetime-local']:hover, + input[type='text']:hover, + input[type='search']:hover, + input[type='email']:hover, + input[type='password']:hover, + input[type='number']:hover { + background-color: var(--background-modifier-form-field-hover); + border-color: var(--background-modifier-border-hover); + transition: box-shadow var(--anim-duration-fast) ease-in-out, border var(--anim-duration-fast) ease-in-out; + } } -.community-item-screenshot { - max-width: 100%; - margin-top: auto; - object-fit: cover; - border-radius: var(--radius-s); - aspect-ratio: 16/9; - image-rendering: -webkit-optimize-contrast; - margin-top: var(--size-4-1); +textarea:active, +.multi-select-container:active, +input.metadata-input-text:active, +input[type='date']:active, +input[type='datetime-local']:active, +input[type='text']:active, +input[type='search']:active, +input[type='email']:active, +input[type='password']:active, +input[type='number']:active, +textarea:focus, +.multi-select-container:focus, +input.metadata-input-text:focus, +input[type='date']:focus, +input[type='datetime-local']:focus, +input[type='text']:focus, +input[type='search']:focus, +input[type='email']:focus, +input[type='password']:focus, +input[type='number']:focus { + border-color: var(--background-modifier-border-focus); + transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out; } -.community-item-screenshot.mod-unavailable { - text-align: center; - color: var(--text-muted); +textarea:active, +.multi-select-container:active, +input.metadata-input-text:active, +input[type='date']:active, +input[type='datetime-local']:active, +input[type='text']:active, +input[type='search']:active, +input[type='email']:active, +input[type='password']:active, +input[type='number']:active, +textarea:focus, +.multi-select-container:focus, +input.metadata-input-text:focus, +input[type='date']:focus, +input[type='datetime-local']:focus, +input[type='text']:focus, +input[type='search']:focus, +input[type='email']:focus, +input[type='password']:focus, +input[type='number']:focus, +textarea:focus-visible, +.multi-select-container:focus-visible, +input.metadata-input-text:focus-visible, +input[type='date']:focus-visible, +input[type='datetime-local']:focus-visible, +input[type='text']:focus-visible, +input[type='search']:focus-visible, +input[type='email']:focus-visible, +input[type='password']:focus-visible, +input[type='number']:focus-visible { + box-shadow: 0 0 0 var(--input-border-width-focus) var(--background-modifier-border-focus); } -.community-item-screenshot .placeholder-icon { - display: flex; - align-items: center; - justify-content: center; - height: 100%; +textarea::placeholder, +.multi-select-container::placeholder, +input.metadata-input-text::placeholder, +input[type='date']::placeholder, +input[type='datetime-local']::placeholder, +input[type='text']::placeholder, +input[type='search']::placeholder, +input[type='email']::placeholder, +input[type='password']::placeholder, +input[type='number']::placeholder { + color: var(--input-placeholder-color); } -.community-item-screenshot .placeholder-icon .svg-icon { - color: var(--text-faint); - width: var(--size-4-8); - height: var(--size-4-8); +input[type='text'], +input[type='search'], +input[type='email'], +input[type='password'], +input[type='number'] { + height: var(--input-height); } -.community-modal-info-name { - font-size: var(--h2-size); - font-weight: var(--font-semibold); +/* Textarea */ +textarea { line-height: var(--line-height-tight); - margin-bottom: var(--size-4-6); + border-radius: var(--textarea-radius, var(--input-radius)); + padding: var(--textarea-padding, var(--input-padding)); } -.community-modal-info-author, -.community-modal-info-repo, -.community-modal-info-version { - font-size: var(--font-ui-small); - line-height: var(--line-height-tight); - color: var(--text-muted); +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button { + display: none; + pointer-events: none; } -.community-modal-info-desc { - font-size: var(--font-ui-small); - line-height: var(--line-height-tight); - margin-top: 4px; +input[type=number]::-webkit-inner-spin-button { + -webkit-appearance: none; } -.community-modal-details { - flex: 1 1 calc(var(--modal-max-width) - var(--modal-community-sidebar-width)); - overflow: auto; - display: flex; - flex-direction: column; - border-left: 1px solid var(--divider-color); +/* Date input */ +input[type='date'], +input[type='datetime-local'] { + font-variant-numeric: tabular-nums; + position: relative; } -.community-modal-info { - flex: 1 1 0; - overflow-y: auto; - padding: var(--size-4-8) var(--size-4-16); - scroll-padding: var(--size-4-4); +input[type='date']::-webkit-datetime-edit-text, +input[type='datetime-local']::-webkit-datetime-edit-text { + color: var(--input-date-separator); + padding-inline-end: 0; } -.community-readme { - overflow-y: visible; - height: auto; - padding: var(--size-4-4) 0; +input[type='date']:not([disabled="true"])::-webkit-calendar-picker-indicator, +input[type='datetime-local']:not([disabled="true"])::-webkit-calendar-picker-indicator { + position: absolute; + left: var(--size-4-1); + right: auto; + opacity: 0.5; } -.community-readme video, -.community-readme img { - max-width: 100%; +input[type='date'].is-empty::-webkit-datetime-edit-month-field, +input[type='datetime-local'].is-empty::-webkit-datetime-edit-month-field, +input[type='date'].is-empty::-webkit-datetime-edit-day-field, +input[type='datetime-local'].is-empty::-webkit-datetime-edit-day-field, +input[type='date'].is-empty::-webkit-datetime-edit-year-field, +input[type='datetime-local'].is-empty::-webkit-datetime-edit-year-field { + color: var(--input-placeholder-color); +} +input[type='date'].is-empty:focus-within::-webkit-datetime-edit-month-field, +input[type='datetime-local'].is-empty:focus-within::-webkit-datetime-edit-month-field, +input[type='date'].is-empty:focus-within::-webkit-datetime-edit-day-field, +input[type='datetime-local'].is-empty:focus-within::-webkit-datetime-edit-day-field, +input[type='date'].is-empty:focus-within::-webkit-datetime-edit-year-field, +input[type='datetime-local'].is-empty:focus-within::-webkit-datetime-edit-year-field { + color: var(--text-normal); } -.community-modal-info-desc { - font-size: var(--font-ui-medium); - line-height: var(--line-height-tight); - margin-top: var(--size-4-2); +input[type='date']::-webkit-datetime-edit-month-field:active, +input[type='datetime-local']::-webkit-datetime-edit-month-field:active, +input[type='date']::-webkit-datetime-edit-month-field:focus, +input[type='datetime-local']::-webkit-datetime-edit-month-field:focus, +input[type='date']::-webkit-datetime-edit-day-field:active, +input[type='datetime-local']::-webkit-datetime-edit-day-field:active, +input[type='date']::-webkit-datetime-edit-day-field:focus, +input[type='datetime-local']::-webkit-datetime-edit-day-field:focus, +input[type='date']::-webkit-datetime-edit-year-field:active, +input[type='datetime-local']::-webkit-datetime-edit-year-field:active, +input[type='date']::-webkit-datetime-edit-year-field:focus, +input[type='datetime-local']::-webkit-datetime-edit-year-field:focus { + background-color: var(--text-selection); + color: var(--text-normal); + cursor: text; } -.community-modal-button-container { - display: flex; - flex-wrap: wrap; - gap: var(--size-4-2); - margin: 1.5em 0; +body:not(.is-ios):not(.is-android) input[type='date']:not([disabled="true"]), +body:not(.is-ios):not(.is-android) input[type='datetime-local']:not([disabled="true"]) { + padding-left: var(--size-4-6); } -.community-modal-info-downloads { - color: var(--text-muted); - margin-top: var(--size-4-1); - display: inline-block; - --icon-size: var(--icon-xs); - --icon-stroke: var(--icon-xs-stroke-width); +/* Range slider */ +input[type='range'] { + width: 100px; + -webkit-appearance: none; + background-color: var(--slider-track-background); + border-radius: var(--slider-track-height); + height: var(--slider-track-height); + padding: 0; + outline: none; } -.community-modal-info-downloads-text { - margin-left: var(--size-4-1); - position: relative; - top: -1px; +input[type='range']::-webkit-slider-runnable-track { + height: 6px; + -webkit-appearance: none; } -.community-modal-readme { - font-size: var(--font-text-size); - font-family: var(--font-text); - line-height: var(--line-height-normal); - overflow-wrap: break-word; - color: var(--text-normal); - user-select: text; - -webkit-user-select: text; +input[type='range']::-webkit-slider-thumb { + -webkit-appearance: none; + height: var(--slider-thumb-height); + width: var(--slider-thumb-width); + border-radius: var(--slider-thumb-radius); + cursor: default; + background: #FFF; + border: var(--slider-thumb-border-width) solid var(--slider-thumb-border-color); + position: relative; + top: var(--slider-thumb-y); + transition: all 0.1s linear; + box-shadow: 0 1px 1px 0px rgba(0, 0, 0, 0.05), 0 2px 2px 0px rgba(0, 0, 0, 0.1); } -.installed-plugins-container { - padding-top: var(--size-4-4); - border-top: 1px solid var(--background-modifier-border); +input[type='range']::-webkit-slider-thumb:hover, +input[type='range']::-webkit-slider-thumb:active { + background: white; + border-color: var(--background-modifier-border-focus); + box-shadow: 0 1px 2px 0px rgba(0, 0, 0, 0.1), 0 2px 3px 0px rgba(0, 0, 0, 0.2); + transition: all 0.1s linear; } -.community-modal-grid-button-container { - position: absolute; - top: var(--size-4-4); - right: var(--size-4-12); - display: flex; - gap: var(--size-4-2); +body:not(.is-mobile) input[type=range]:focus { + box-shadow: none; } -.status-bar { - position: var(--status-bar-position); - width: auto; - bottom: 0; - right: 0; - border-radius: var(--status-bar-radius); - border-style: solid; - border-width: var(--status-bar-border-width); - border-color: var(--status-bar-border-color); - background-color: var(--status-bar-background); - color: var(--status-bar-text-color); - display: flex; - font-size: var(--status-bar-font-size); - justify-content: flex-end; - min-height: 18px; - padding: var(--size-4-1); - gap: var(--size-2-1); - user-select: none; - z-index: var(--layer-status-bar); - font-variant-numeric: tabular-nums; +body:not(.is-mobile) input[type=range]:focus::-webkit-slider-thumb { + box-shadow: 0 1px 2px 0px rgba(0, 0, 0, 0.05), 0 2px 3px 0px rgba(0, 0, 0, 0.2); } -.status-bar-item { - border-radius: var(--radius-s); - display: inline-flex; - align-items: center; - padding: 3px var(--size-2-2); - line-height: 1; +body:not(.is-mobile) input[type=range]:focus-visible::-webkit-slider-thumb { + border-color: var(--background-modifier-border-focus); + box-shadow: 0 1px 2px 0px rgba(0, 0, 0, 0.05), 0 2px 3px 0px rgba(0, 0, 0, 0.2), 0 0 0px 2px var(--background-modifier-border-focus); } -.status-bar-item.mod-clickable { +/* Color inputs */ +input[type="color"] { + -webkit-appearance: none; + width: calc(var(--swatch-width) + 4px); + background-color: transparent; + border: none; cursor: var(--cursor); + padding: 0; } -@media (hover: hover) { - .status-bar-item.mod-clickable:hover { - background-color: var(--background-modifier-hover); - color: var(--text-normal); - } +input[type="color"]::-webkit-color-swatch-wrapper { + padding: 2px; } -.status-bar-item.plugin-editor-status, -.status-bar-item.plugin-sync { - padding: 0 var(--size-2-2); +input[type="color"]::-webkit-color-swatch { + border: 0px; + box-shadow: var(--swatch-shadow); + border-radius: var(--swatch-radius); + height: var(--swatch-height); + width: var(--swatch-width); + align-self: center; } @media (hover: hover) { - .status-bar-item.plugin-editor-status:hover, - .status-bar-item.plugin-sync:hover { - background-color: var(--background-modifier-hover); + input[type="color"]::-webkit-color-swatch:hover { + box-shadow: inset 0 0 0 1px rgba(var(--mono-rgb-100), 0.25), 0 0 0 var(--input-border-width-focus) var(--background-modifier-border-hover); } } -.status-bar-item:empty { +input[type="color"]:focus-visible::-webkit-color-swatch, +input[type="color"]:focus::-webkit-color-swatch { + box-shadow: var(--swatch-shadow), 0 0 0 var(--input-border-width-focus) var(--background-modifier-border-focus); +} +select.mod-hidden { display: none; } -.status-bar-item-icon { - vertical-align: middle; +.formula-editor-container { + width: 100%; +} +.formula-editor { + padding: 0; + border-radius: var(--textarea-radius, var(--input-radius)); + background-color: var(--interactive-normal); + border: var(--input-border-width) solid var(--background-modifier-border); display: flex; align-items: center; + min-height: var(--input-height); + width: 100%; } -.status-bar-item-segment { - margin-right: var(--size-4-2); +@media (hover: hover) { + .formula-editor:hover { + border-color: var(--background-modifier-border-hover); + transition: box-shadow var(--anim-duration-fast) ease-in-out, border var(--anim-duration-fast) ease-in-out; + } } -.status-bar-item-segment:last-child { - margin-right: 0; +.formula-editor:active, +.formula-editor:focus, +.formula-editor:focus-within { + border-color: var(--background-modifier-border-focus); + transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out; } -.is-screenshotting .status-bar { - display: none; +.formula-editor:active, +.formula-editor:focus, +.formula-editor:focus-visible, +.formula-editor:focus-within { + box-shadow: 0 0 0 var(--input-border-width-focus) var(--background-modifier-border-focus); } -.titlebar { - -webkit-app-region: drag; - position: fixed; - top: 0; - left: 0; - right: 0; - display: flex; - background-color: var(--titlebar-background); - border-bottom: var(--titlebar-border-width) solid var(--titlebar-border-color); +.formula-editor::placeholder { + color: var(--input-placeholder-color); } -.titlebar-inner { - color: var(--titlebar-text-color); - font-weight: var(--titlebar-text-weight); - width: 100%; - display: flex; +.formula-editor .cm-editor { + flex: 1 1 auto; } -.is-focused .titlebar-inner { - color: var(--titlebar-text-color-focused); +.formula-editor .cm-content { + caret-color: var(--caret-color); } -.titlebar-text { - opacity: 0.85; - position: absolute; - width: 100%; - height: 100%; - top: 0; - left: 0; - flex-grow: 1; +.formula-editor .cm-placeholder { + font-family: var(--font-interface); font-size: var(--font-ui-small); - text-align: center; - display: flex; - justify-content: center; - align-items: center; - padding: 0 125px; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; + color: var(--text-faint); } -.titlebar-button-container { - display: flex; - position: absolute; - top: 0; +.formula-editor .cm-line { + padding-inline-start: var(--size-4-2); + padding-inline-end: var(--size-4-2); } -.mod-macos .titlebar-button-container { - top: 8px; +.formula-editor .cm-scroller { + color: var(--code-normal); + font-family: var(--font-monospace); + font-size: var(--font-small); } -.titlebar-button-container.mod-left { - left: 0; +.formula-editor .cm-focused { + outline: none; } -.mod-macos .titlebar-button-container.mod-left { - left: calc(80px / var(--zoom-factor)); +.formula-editor .cm-tooltip { + font-family: var(--font-interface); } -.titlebar-button-container .mod-back, -.titlebar-button-container .mod-forward { - color: var(--icon-color); +.cm-tooltip.cm-tooltip-docstring { + border-radius: var(--radius-s); + padding: var(--size-4-1) var(--size-4-2); + background-color: var(--background-modifier-message); + box-shadow: 0 2px 8px var(--background-modifier-box-shadow); + font-size: 11px; + font-weight: var(--font-medium); + line-height: var(--line-height-tight); + color: #FAFAFA; + font-family: var(--font-monospace); + border: none; } -.titlebar-button-container .mod-back .svg-icon, -.titlebar-button-container .mod-forward .svg-icon { - width: 14px; - height: 14px; - stroke-width: 2.25px; +.cm-tooltip.cm-tooltip-docstring .active { + font-weight: var(--font-semibold); } -@media (hover: hover) { - .titlebar-button-container .mod-back:hover, - .titlebar-button-container .mod-forward:hover { - color: var(--icon-color-hover); - } +.cm-tooltip.cm-tooltip-docstring .cm-tooltip-arrow:before, +.cm-tooltip.cm-tooltip-docstring .cm-tooltip-arrow:after { + border-top: 7px solid var(--background-modifier-message); } -.titlebar-button-container.mod-right { - right: 0; +.notice-container { + z-index: var(--layer-notice); + position: fixed; + top: 22px; + inset-inline-end: 0; + padding: 10px; + overflow: hidden; + pointer-events: none; } -.titlebar-button { - -webkit-app-region: no-drag; - padding: var(--size-2-2) var(--size-2-3); +.notice { + display: flex; + flex-direction: column; + gap: var(--size-4-2); + background-color: var(--background-modifier-message); + border-radius: var(--radius-m); + box-shadow: 0 2px 8px var(--background-modifier-box-shadow); + color: #FAFAFA; + font-size: var(--font-ui-small); + line-height: var(--line-height-tight); + padding: 0.75em 1em 0.75em 1em; + max-width: 300px; + margin-bottom: 14px; + white-space: pre-wrap; + overflow-wrap: anywhere; + word-break: break-word; cursor: var(--cursor); - display: inline-flex; + pointer-events: auto; +} +.notice progress { + width: 100%; +} +.theme-light .notice progress[value]::-webkit-progress-bar { + background-color: #262626; + box-shadow: inset 0px 0px 0px 1px #363636; +} +.notice-cta { + display: flex; align-items: center; + color: var(--text-accent); + white-space: nowrap; } -@media (hover: hover) { - .titlebar-button:hover { - opacity: 1; - background-color: var(--background-modifier-hover); - } - .titlebar-button.mod-close:hover { - background-color: var(--background-modifier-error); - } +.notice-cta:hover, +.notice-cta.mobile-tap { + color: var(--text-accent-hover); } -.mod-macos .titlebar-button { - border-radius: var(--radius-s); +.menu { + -webkit-app-region: no-drag; + display: flex; + flex-direction: column; + border: var(--menu-border-width) solid var(--menu-border-color); + background-color: var(--menu-background); + backdrop-filter: var(--menu-backdrop-filter); + overflow: hidden; + padding: 0; + border-radius: var(--menu-radius); + box-shadow: var(--menu-shadow); + max-height: 100%; + position: fixed; + z-index: var(--layer-menu); + user-select: none; } -/* Hidden titlebar interferes with mouse */ -body.is-frameless.is-hidden-frameless { - padding-top: 0 !important; +.menu.mod-no-icon .menu-item-icon:first-child { + display: none; } -.is-hidden-frameless.mod-macos .titlebar { +.menu-scroll { + display: flex; + flex-direction: column; + overflow: hidden; + padding: var(--menu-padding); +} +.menu-grabber { display: none; } -.is-hidden-frameless.mod-windows .titlebar, -.is-hidden-frameless.mod-linux .titlebar { - background: transparent; - border: none; - z-index: var(--layer-popover); - pointer-events: none; +.menu-separator { + height: 0; + margin: var(--size-2-3) calc(var(--size-2-3) * -1); + border-bottom: var(--border-width) solid var(--background-modifier-border); } -.is-hidden-frameless.mod-windows .titlebar-button.mod-back, -.is-hidden-frameless.mod-linux .titlebar-button.mod-back, -.is-hidden-frameless.mod-windows .titlebar-button.mod-forward, -.is-hidden-frameless.mod-linux .titlebar-button.mod-forward, -.is-hidden-frameless.mod-windows .titlebar-text, -.is-hidden-frameless.mod-linux .titlebar-text { +.menu-separator:last-child, +.menu-separator:first-child { display: none; } -.is-hidden-frameless.mod-windows .titlebar-button-container, -.is-hidden-frameless.mod-linux .titlebar-button-container { - pointer-events: auto; +.menu-separator + .menu-separator { + display: none; } -.mod-linux .titlebar-button-container, -.mod-windows .titlebar-button-container { - height: 100%; +.menu-separator + .menu-item.is-label { + padding-bottom: var(--size-4-1); } -.mod-linux .titlebar-button, -.mod-windows .titlebar-button { - padding: 0 16px; +.menu-item-desc { + padding-top: var(--size-4-1); + color: var(--text-faint); + font-size: 0.8em; +} +.menu-item { display: flex; align-items: center; + gap: var(--size-4-2); + padding: var(--size-4-1) var(--size-4-2); + cursor: var(--cursor); + font-size: var(--font-ui-small); + border-radius: var(--radius-s); + white-space: nowrap; } -.mod-linux .titlebar-button.mod-logo, -.mod-windows .titlebar-button.mod-logo { - padding: 4px 8px; -} -@media (hover: hover) { - .mod-linux .titlebar-button.mod-close:hover, - .mod-windows .titlebar-button.mod-close:hover { - background-color: var(--background-modifier-error); - } - .mod-linux .titlebar-button.mod-close:hover .svg-icon, - .mod-windows .titlebar-button.mod-close:hover .svg-icon { - fill: white; - stroke: white; - } +.menu-item.is-warning:not(.is-disabled) { + color: var(--text-error); } -@media screen and (max-width: 300px) { - .titlebar-text { - display: none; - } +.menu-item.is-warning:not(.is-disabled).selected { + color: var(--text-error); } -.is-translucent:not(.is-fullscreen) { - --nav-collapse-icon-color: rgba(var(--mono-rgb-100), 0.3); - --nav-collapse-icon-color-collapsed: rgba(var(--mono-rgb-100), 0.3); - --divider-color: rgba(0, 0, 0, 0.15); +.menu-item.is-label { + cursor: default; + font-size: var(--font-ui-medium); + color: var(--text-muted); + white-space: pre-wrap; + overflow-wrap: anywhere; + word-break: break-word; } -.is-translucent:not(.is-fullscreen) .titlebar, -.is-translucent:not(.is-fullscreen) .app-container { - background-color: var(--workspace-background-translucent); +.menu-item.is-disabled { + cursor: default; + color: var(--text-faint); } -.is-translucent:not(.is-fullscreen) .workspace-ribbon.mod-left, -.is-translucent:not(.is-fullscreen) .workspace-tabs, -.is-translucent:not(.is-fullscreen) .workspace-split.mod-root, -.is-translucent:not(.is-fullscreen) .sidebar-toggle-button, -.is-translucent:not(.is-fullscreen) .mod-left-split .workspace-tab-header-container, -.is-translucent:not(.is-fullscreen) .mod-right-split .workspace-tab-header-container, -.is-translucent:not(.is-fullscreen) .mod-top .workspace-tab-header-container, -.is-translucent:not(.is-fullscreen) .workspace-tabs .workspace-leaf, -.is-translucent:not(.is-fullscreen) .workspace-ribbon.mod-left:before { - background-color: transparent !important; +.menu-item:not(.is-label):not(.is-disabled).mobile-tap, +.menu-item:not(.is-label):not(.is-disabled).selected { + background-color: var(--background-modifier-hover); } -.workspace { - background-color: var(--background-primary); +.menu-item-icon { + flex: 0 1 auto; display: flex; + color: var(--text-muted); +} +.menu-item.is-warning .menu-item-icon { + color: var(--text-error); +} +.menu-item.is-disabled .menu-item-icon { + color: var(--text-faint); +} +.menu-item-icon .mod-submenu { + color: var(--text-faint); +} +.menu-item-title { flex: 1 0 0; - transition: padding-left 100ms ease-in; +} +.menu.mod-tab-list .menu-item-title { + max-width: 300px; overflow: hidden; - height: 100%; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: bottom; } -.is-translucent .workspace { - background-color: transparent; +.debug-textarea { + width: 100%; + min-height: 50vh; + height: 100%; + max-height: 80vh; + font-family: var(--font-monospace); + tab-size: 4; + resize: none; } -.workspace-split { +.modal-container { display: flex; - position: relative; + align-items: center; + justify-content: center; + position: absolute; + top: 0; + bottom: 0; + inset-inline-start: 0; + width: 100%; + z-index: var(--layer-modal); } -.workspace-split.mod-vertical > .workspace-split:last-child { - padding-right: 0; +.modal-container.mod-dim .modal { + box-shadow: var(--shadow-l); } -.workspace-split:last-child:not(.mod-right-split) > .workspace-leaf-resize-handle { - display: none; +.modal-confirmation-state { + align-items: center; + display: flex; + flex-direction: column; + flex-grow: 1; + justify-content: center; + text-align: center; } -.workspace-split.mod-vertical { - flex-direction: row; +.modal-status-icon { + --icon-size: 72px; + --icon-stroke: 1.5px; } -.workspace-split.mod-horizontal { - flex-direction: column; +.modal-bg { + position: absolute; + top: 0; + inset-inline-start: 0; + width: 100%; + height: 100%; + background-color: var(--background-modifier-cover); } -.workspace-split.mod-root { - background-color: var(--background-primary); +.modal { + --checkbox-size: var(--font-ui-medium); + background-color: var(--modal-background); + border-radius: var(--modal-radius); + border: var(--modal-border-width) solid var(--modal-border-color); + -electron-corner-smoothing: var(--corner-smoothing); + padding: var(--size-4-4); + position: relative; + min-height: 100px; + width: var(--dialog-width); + max-width: var(--dialog-max-width); + max-height: var(--dialog-max-height); + display: flex; + flex-direction: column; + overflow: auto; } -.workspace-leaf { +.modal.mod-sidebar-layout { + padding: 0; + width: var(--modal-width); + height: var(--modal-height); + max-width: var(--modal-max-width); + max-height: var(--modal-max-height); + overflow: hidden; display: flex; flex-direction: column; - position: relative; - contain: strict !important; +} +.modal.mod-sidebar-layout .modal-content { + display: flex; +} +.modal.mod-scrollable-content { + padding: 0; overflow: hidden; - isolation: isolate; } -.workspace-split.mod-root .workspace-leaf:last-child .workspace-leaf-resize-handle { - display: none; +.modal.mod-scrollable-content .modal-title { + padding: var(--size-4-4) var(--size-4-4) 0 var(--size-4-4); } -.workspace-leaf.is-highlighted:before { - content: ' '; - position: absolute; - height: 100%; - width: 100%; - top: 0; - left: 0; - background-color: hsla(var(--interactive-accent-hsl), 0.25); - z-index: var(--layer-popover); - pointer-events: none; +.modal.mod-scrollable-content .modal-content { + padding: 0 var(--size-4-4) var(--size-4-4) var(--size-4-4); + overflow: auto; } -.workspace > .workspace-leaf, -.workspace > .workspace-split { - height: 100%; - width: 100%; +.modal.mod-scrollable-content .modal-button-container { + margin-top: 0; + border-top: var(--border-width) solid var(--background-modifier-border); + padding: var(--size-4-4); } -/* Resize handles */ -.workspace-split.mod-root > .workspace-leaf-resize-handle { - display: none; +.modal.mod-narrow { + max-width: var(--modal-max-width-narrow); } -.workspace-leaf-resize-handle { - -webkit-app-region: no-drag; - position: absolute; - z-index: var(--layer-cover); - background-color: transparent; - transition: background-color 200ms ease-in-out, border-color 200ms ease-in-out, opacity 200ms ease-in-out; - border-color: var(--divider-color); - border-top: 0; - border-width: var(--divider-width); - margin: 0; +.modal-sidebar { + --background-modifier-form-field: var(--background-primary); + flex: 1 1 var(--modal-community-sidebar-width); + min-width: var(--modal-community-sidebar-width); + padding: var(--size-4-3) 0 0 0; + display: flex; + flex-direction: column; } -@media (hover: hover) { - .workspace-leaf-resize-handle:hover { - background-color: var(--divider-color-hover); - border-color: var(--divider-color-hover); - } - .is-translucent .workspace-leaf-resize-handle:hover { - background-color: var(--divider-color-hover); - border-color: var(--divider-color-hover); - } +body.styled-scrollbars .modal-close-button { + inset-inline-end: 12px; } -.workspace-split.mod-horizontal > * > .workspace-leaf-resize-handle { - bottom: 0; - left: 0; - border-bottom-style: solid; - border-bottom-width: var(--divider-width); - height: var(--divider-width-hover); - width: 100%; - cursor: row-resize; +.modal-close-button { + position: absolute; + top: var(--size-2-3); + inset-inline-end: var(--size-2-3); + padding: var(--size-2-2); } -.workspace-split.mod-vertical > * > .workspace-leaf-resize-handle, -.workspace-split.mod-left-split > .workspace-leaf-resize-handle, -.workspace-split.mod-right-split > .workspace-leaf-resize-handle { - right: 0; - bottom: 0; - width: var(--divider-width-hover); - height: var(--divider-vertical-height); - cursor: col-resize; +.modal-header { + margin-bottom: 0.75em; + height: var(--modal-header-height); } -.workspace-split.mod-right-split > .workspace-leaf-resize-handle { - border-left-style: solid; - border-left-width: var(--divider-width); +.mod-sidebar-layout .modal-header { + display: none; } -.workspace-split.mod-vertical > * > .workspace-leaf-resize-handle, -.workspace-split.mod-left-split > .workspace-leaf-resize-handle { - border-right-style: solid; - border-right-width: var(--divider-width); +.modal-title { + font-size: var(--font-ui-large); + margin-left: auto; + margin-right: auto; + font-weight: var(--font-semibold); + text-align: start; + line-height: var(--line-height-tight); } -.workspace-split.mod-right-split > .workspace-leaf-resize-handle { - right: unset; - left: 0; +.modal-title:empty { + display: none; } -.workspace-split.mod-vertical > * { - height: 100%; - flex: 1 0 0; - width: 0; +.modal-content { + flex: 1 1 auto; + font-size: var(--font-ui-medium); } -.workspace-split.mod-horizontal > * { - width: 100%; - flex: 1 0 0; - height: 0; +.modal-button-container { + margin-top: 1.5em; + display: flex; + justify-content: flex-end; + gap: var(--size-4-2); + flex-wrap: wrap; + font-size: var(--font-ui-medium); } -.workspace-split.mod-left-split, -.workspace-split.mod-right-split { - flex: 0 0 auto; +.modal-button-container .mod-checkbox { + flex-grow: 1; + display: flex; + align-items: center; + gap: var(--size-4-1); } -.is-translucent .workspace-split.mod-left-split.is-sidedock-collapsed .workspace-tabs, -.is-translucent .workspace-split.mod-right-split.is-sidedock-collapsed .workspace-tabs { - visibility: hidden; +body:not(.is-mobile) .modal-button-container .mod-secondary { + margin-inline-end: auto; } -.workspace-split.mod-left-split > .workspace-leaf-resize-handle, -.workspace-split.mod-right-split > .workspace-leaf-resize-handle { - z-index: var(--layer-status-bar); - height: var(--divider-vertical-height); - top: unset; - bottom: 0; +.modal-checkbox-label { + cursor: var(--cursor); + margin-inline-start: 10px; + user-select: none; } -.view-header-nav-buttons { - --icon-size: var(--icon-s); +.error-container { align-items: center; display: flex; - margin-right: var(--size-4-1); + flex-direction: column; + padding: var(--size-4-4); + gap: var(--size-4-6); + text-align: center; } -body.is-phone .view-header-nav-buttons { - display: none; +.message-container { + margin: var(--size-4-4) 0; } -.workspace-leaf-content { - width: 100%; - height: 100%; - overflow: hidden; - position: relative; - display: flex; - flex-direction: column; +.message { + display: inline-block; + padding: 6px 12px 6px 12px; + border-radius: var(--radius-s); } -.workspace-leaf-content .view-content { - padding: var(--size-4-4); - overflow: auto; +.message.mod-success { + background-color: var(--background-modifier-success); + color: var(--text-on-accent); } -.workspace-leaf-content[data-type='markdown'] .view-content { - padding: 0; - overflow: hidden; +.message.mod-success a { + color: var(--text-normal); } -.workspace-leaf-content[data-type='backlink'] .view-content, -.workspace-leaf-content[data-type='outgoing-link'] .view-content { - padding: 0; - overflow: hidden; - display: flex; - flex-direction: column; +.message.mod-info { + background-color: var(--background-modifier-info); } -.workspace-leaf-content .image-container, -.workspace-leaf-content .audio-container, -.workspace-leaf-content .video-container { - text-align: center; +.message.mod-error { + background-color: var(--background-modifier-error); + color: var(--text-on-accent); } -.workspace-leaf-content img:not([width]), -.workspace-leaf-content audio, -.workspace-leaf-content video { - max-width: 100%; +.message.mod-error a { + color: var(--text-normal); } -.workspace-fake-target-overlay, -.workspace-drop-overlay { - will-change: transform, width, height; - position: fixed; - left: 0; - top: 0; - width: 0; - height: 0; - transform: translate(0, 0); - transition: all 100ms ease-in-out; - z-index: var(--layer-cover); - pointer-events: none; +.mod-warning { + color: var(--text-error); } -.workspace-drop-overlay:before { - content: ' '; - position: absolute; - width: calc(100% - 6px); - height: calc(100% - 6px); - top: 0; - left: 0; - bottom: 0; - right: 0; - margin: auto; - background-color: var(--interactive-accent); - border-radius: var(--radius-m); - opacity: 0.5; +.mod-success { + color: var(--text-success); } -.workspace-fake-target-container { - visibility: hidden; +.mod-file-rename .rename-textarea { + overflow: hidden; + padding: var(--size-2-3) var(--size-4-2); + resize: none; + width: 100%; +} +.modal-setting-nav-bar { + display: flex; + flex: 0 1 auto; + padding: var(--size-4-3); + border-bottom: var(--border-width) solid var(--background-modifier-border); +} +.modal .modal-nav-action { + background-color: unset; + margin-top: var(--size-4-1); position: absolute; - pointer-events: none; top: 0; - left: 0; + width: unset; } -.workspace-fake-target-overlay { - visibility: visible; - overflow: hidden; - background-color: var(--background-primary); - /* - &.is-in-sidebar { - background-color: var(--background-secondary); - .workspace-leaf { - background-color: var(--background-secondary); - } - }*/ +.modal .modal-nav-action.mod-secondary { + inset-inline-start: 0; } -.workspace-fake-target-overlay > * { - width: 100%; - height: 100%; +.modal .modal-nav-action.mod-cta { + color: var(--color-accent); + font-weight: var(--font-semibold); + inset-inline-end: 0; } -.workspace-tabs { - overflow: hidden; - display: flex; - flex-direction: column; +.modal.mod-scrollable { + height: var(--modal-height); + width: var(--modal-width); + max-width: var(--modal-max-width-narrow); + padding: var(--size-4-4) 0 0 0; position: relative; + overflow: hidden; } -.workspace-tabs > * { - flex: 1 0 0; +.modal.mod-scrollable .modal-title { + padding: 0 var(--size-4-4); } -.workspace-tabs .workspace-leaf { - height: 100%; +.modal.mod-scrollable .modal-content { + overflow: auto; + padding: 0 var(--size-4-4) var(--size-4-4); + margin-bottom: calc(var(--input-height) + var(--size-4-8)); + border-top: var(--border-width) solid var(--background-modifier-border); } -.workspace-split.mod-right-split .workspace-tabs { - padding-right: 0; +.modal.mod-scrollable .modal-button-container { + margin: 0 0 0 calc(var(--size-4-4) * -1); + padding: var(--size-4-4); + gap: var(--size-4-2); + position: absolute; + bottom: 0; + background-color: var(--background-primary); + border-top: var(--border-width) solid var(--background-modifier-border); + width: 100%; } -.workspace-tabs:last-child .workspace-leaf-resize-handle { - display: none; +.nav-header { + padding: var(--size-4-2); } -.workspace-fake-target-overlay:not(.is-in-sidebar) .workspace-tabs .workspace-leaf, -.mod-root .workspace-tabs .workspace-leaf { - background-color: var(--background-primary); +.nav-header .search-input-container { + margin: 4px auto; + padding: 0; } -.workspace-tabs .workspace-leaf { - background-color: var(--background-secondary); +.nav-buttons-container { + flex-wrap: wrap; + gap: var(--size-2-1); } -.workspace-tabs .workspace-leaf .view-content { - height: 100%; +.nav-buttons-container.has-separator { + border-bottom: 1px solid var(--background-modifier-border); + padding-bottom: var(--size-2-3); + margin-bottom: var(--size-4-2); } -.workspace-tab-header-container { +.nav-buttons-container .nav-action-button.is-active { + color: var(--icon-color-focused); + background-color: var(--background-modifier-hover); +} +body { + --pill-focus-width: calc(100% + 6px); + --pill-focus-left-adjust: -4px; +} +.multi-select-container { + cursor: text; + display: inline-flex; + vertical-align: top; + flex-wrap: wrap; + flex: 1 1 auto; + gap: var(--size-2-3); + min-height: var(--input-height); +} +.multi-select-pill { + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); display: flex; - background-color: var(--tab-container-background); - height: var(--header-height); - border-bottom: var(--tab-outline-width) solid var(--tab-outline-color); - flex: 0 0 auto; - padding-left: 0; - padding-right: var(--size-4-2); + align-items: center; + background-color: var(--pill-background); + border: var(--pill-border-width) solid var(--pill-border-color); + border-radius: var(--pill-radius); + color: var(--pill-color); + cursor: var(--cursor); + font-weight: var(--pill-weight); + padding: var(--pill-padding-y) 0; + line-height: 1; + max-width: calc(100% - var(--size-2-3) - 1ch); + gap: var(--size-2-1); position: relative; } -.is-phone .workspace-tab-header-container { - display: none; -} -.workspace-tab-header-container-inner { - -webkit-app-region: drag; - display: flex; - flex: 0 1 auto; - overflow: auto; - margin: 6px -5px calc(var(--tab-outline-width) * -1); - padding: 1px 15px 0; +.multi-select-pill:focus:after { + content: ''; + display: block; + position: absolute; + pointer-events: none; + border-radius: var(--pill-radius); + inset-inline-end: var(--pill-focus-left-adjust); + width: var(--pill-focus-width); + height: 100%; + box-shadow: 0 0 0 1px var(--background-modifier-border-focus), inset 0 0 0 1px var(--background-modifier-border-focus); } -.mod-root .workspace-tab-header-container-inner { - padding: 1px 15px 0; +@media (hover: hover) { + .multi-select-pill:hover { + background-color: var(--pill-background-hover); + border: var(--pill-border-width) solid var(--pill-border-color-hover); + color: var(--pill-color-hover); + text-decoration: var(--pill-decoration-hover); + } } -.workspace-tab-header-container-inner::-webkit-scrollbar, -.workspace-tab-header-container-inner::-webkit-scrollbar-thumb { - display: none; +.multi-select-pill-content { + word-break: break-word; + margin-inline-start: var(--pill-padding-x); + overflow: hidden; + text-overflow: ellipsis; } -.workspace-tab-header-inner-icon { - flex: 0 0 auto; +.multi-select-pill-remove-button { + margin-inline-end: min(var(--size-2-3),var(--pill-padding-x)); + cursor: var(--cursor); + color: var(--pill-color-remove); + border-radius: var(--radius-s); display: flex; + align-items: center; + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); } -/* Hide tab icon if it's a note */ -.mod-root .workspace-tab-header[data-type="markdown"] .workspace-tab-header-inner-icon, -.mod-root .workspace-tab-header[data-type="empty"] .workspace-tab-header-inner-icon { - display: none; +@media (hover: hover) { + .multi-select-pill-remove-button:hover { + color: var(--pill-color-remove-hover); + } } -.is-focused .workspace-tab-header { - color: var(--tab-text-color-focused); +.multi-select-input { + cursor: text; + font-family: var(--font-interface); + min-width: 1ch; + max-width: max-content; + color: var(--text-normal); + background-color: inherit; + border: none; + word-break: break-word; } -.is-focused .workspace-tab-header.is-active { - color: var(--tab-text-color-focused-active); +.multi-select-input::-webkit-scrollbar { + display: none; } -.is-focused .mod-active .workspace-tab-header.is-active .workspace-tab-header-inner-icon, -.is-focused .mod-active .workspace-tab-header.is-active .workspace-tab-header-inner-title { - color: var(--tab-text-color-focused-active-current); +.multi-select-input:empty:before { + content: attr(placeholder, '\200B'); + color: var(--input-placeholder-color); + pointer-events: none; } -.is-focused .mod-active .workspace-tab-header.is-active.is-highlighted .workspace-tab-header-inner-icon, -.is-focused .mod-active .workspace-tab-header.is-active.is-highlighted .workspace-tab-header-inner-title { - color: var(--tab-text-color-focused-highlighted); +@keyframes multi-select-highlight { + from { + color: var(--text-warning); + --link-color: var(--text-warning); + } } -.is-focused .workspace-tab-header.active.is-highlighted .workspace-tab-header-inner-icon, -.is-focused .workspace-tab-header.is-highlighted .workspace-tab-header-inner-icon, -.is-focused .workspace-tab-header.active.is-highlighted .workspace-tab-header-inner-title, -.is-focused .workspace-tab-header.is-highlighted .workspace-tab-header-inner-title { - color: var(--tab-text-color-focused-highlighted); +.multi-select-duplicate { + animation: multi-select-highlight 2000ms ease-in; } -.workspace-tab-header { - -webkit-app-region: no-drag; - color: var(--tab-text-color); +.popover, +.suggestion-container, +.cm-tooltip.cm-tooltip-autocomplete { display: flex; - position: relative; - padding: 1px 4px 3.5px; - scroll-margin-inline-start: var(--size-2-3); - scroll-margin-inline-end: var(--size-4-1); - text-align: center; - border-radius: var(--tab-radius-active); - /* Decorative curves */ -} -.workspace-tab-header:not(.is-active):hover .workspace-tab-header-inner { - background-color: var(--background-modifier-hover); -} -.workspace-tab-header::before, -.workspace-tab-header::after { position: absolute; - bottom: 0; - content: ''; - width: calc(var(--tab-curve) * 2); - height: calc(var(--tab-curve) * 2); - border-radius: 100%; - box-shadow: 0 0 0 calc(var(--tab-curve) * 3) transparent; -} -.workspace-tab-header::before { - left: calc(var(--tab-curve) * -2); - clip-path: inset(50% calc(var(--tab-curve) * -1) 0 50%); + z-index: var(--layer-popover); + background-color: var(--background-primary); + border: var(--border-width) solid var(--background-modifier-border); + box-shadow: var(--shadow-s); + border-radius: var(--radius-m); + max-height: var(--popover-max-height); } -.workspace-tab-header::after { - right: calc(var(--tab-curve) * -2); - clip-path: inset(50% 50% 0 calc(var(--tab-curve) * -1)); +.popover.hover-popover { + --callout-blend-mode: normal; + justify-content: stretch; + overflow: hidden; + max-width: 80vw; + max-height: inherit; + min-height: 30px; + width: fit-content; } -.workspace-tab-header.is-active { - box-shadow: 0 0 0 var(--tab-outline-width) var(--tab-outline-color); - color: var(--tab-text-color-active); - background-color: var(--tab-background-active); +.popover.hover-popover.is-editing { + outline: 2px var(--background-modifier-border-focus) solid; + border-color: var(--background-modifier-border-focus); } -.workspace-split.mod-root .workspace-tab-header.is-active::before, -.workspace-split.mod-root .workspace-tab-header.is-active::after { - box-shadow: inset 0 0 0 var(--tab-outline-width) var(--tab-outline-color), 0 0 0 calc(var(--tab-curve) * 4) var(--tab-background-active); +.popover.hover-popover > * { + width: var(--popover-width); } -.workspace-tab-header.is-active .workspace-tab-header-inner::after { - opacity: 0; +.popover.hover-popover .markdown-preview-view { + font-size: var(--popover-font-size); } -.workspace-tab-container { +.popover.hover-popover > .mod-empty { display: flex; - overflow: hidden; -} -.workspace-tab-container > * { - flex: 1 0 0; -} -.workspace-tab-header-inner { + justify-content: center; align-items: center; + padding: 20px; + font-size: var(--popover-font-size); + color: var(--text-muted); +} +.popover.hover-popover > .image-embed, +.popover.hover-popover > .video-embed { + width: auto; + max-height: inherit; + max-width: var(--popover-width); + width: fit-content; + height: fit-content; display: flex; - gap: var(--size-2-1); - height: 100%; - border-radius: var(--tab-radius); - overflow: hidden; - padding: 0 8px; + justify-content: center; + align-items: center; +} +.popover.hover-popover > .image-embed img, +.popover.hover-popover > .video-embed img, +.popover.hover-popover > .image-embed video, +.popover.hover-popover > .video-embed video { width: 100%; + max-width: inherit; + max-height: inherit; } -.workspace-tab-header-inner .workspace-tab-header-inner-icon { - color: var(--icon-color); - opacity: var(--icon-opacity); +.popover.hover-popover > .audio-embed { + display: flex; } -@media (hover: hover) { - .workspace-tab-header-inner:hover .workspace-tab-header-inner-icon { - color: var(--icon-color-hover); - opacity: var(--icon-opacity-hover); - } +.popover.hover-popover > .pdf-embed { + width: var(--popover-pdf-width); + height: var(--popover-pdf-height) !important; + max-height: inherit; } -.mod-root .workspace-tab-header-inner { - padding: 0 3px 0 6px; +.popover.hover-popover > .markdown-embed { + max-height: var(--popover-height); + overflow: auto; + border: 0; + padding: 0; + margin: 0; } -.workspace-tab-header-inner-title { - flex: 1 1 auto; - font-size: var(--tab-font-size); - font-weight: var(--tab-font-weight); - overflow: hidden; - text-align: left; - text-overflow: ellipsis; - white-space: nowrap; +.popover.hover-popover > .markdown-embed > .markdown-embed-content { width: 100%; } -.workspace-tab-header-status-container { - display: flex; - flex-shrink: 0; - gap: var(--size-2-1); - justify-content: center; +.popover.hover-popover > .markdown-embed > .markdown-embed-content > .markdown-source-view.mod-cm6 > .cm-editor > .cm-scroller, +.popover.hover-popover > .markdown-embed > .markdown-embed-content .markdown-preview-view { + padding: var(--file-margins); } -.workspace-tab-header-status-container:empty { - display: none; +.popover.hover-popover > .markdown-embed .markdown-source-view { + font-size: var(--popover-font-size); } -.workspace-tab-header-status-icon, -.workspace-tab-header-inner-close-button { - cursor: var(--cursor); - padding: var(--size-2-1); - border-radius: var(--radius-s); - display: flex; - align-items: center; - --icon-size: var(--icon-xs); - --icon-stroke: var(--icon-xs-stroke-width); +.popover.hover-popover > .markdown-embed[data-type="footnote"].mod-empty { + cursor: var(--cursor-link); + text-align: center; + background-color: var(--background-secondary-alt); } -@media (hover: hover) { - .workspace-tab-header.is-active .workspace-tab-header-status-icon:hover, - .workspace-tab-header.is-active .workspace-tab-header-inner-close-button:hover { - background-color: var(--background-modifier-hover); - } - .mod-root .workspace-tab-header.is-active .workspace-tab-header-status-icon.mod-linked:hover, - .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner-close-button.mod-linked:hover, - .mod-root .workspace-tab-header.is-active .workspace-tab-header-status-icon.mod-pinned:hover, - .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner-close-button.mod-pinned:hover { - background-color: var(--background-modifier-active-hover); - } +.popover.hover-popover > .markdown-embed[data-type="footnote"].mod-empty .markdown-preview-view { + color: var(--text-muted); } -.workspace-tab-header.is-active .workspace-tab-header-status-icon::after, -.workspace-tab-header.is-active .workspace-tab-header-inner-close-button::after { - background-color: transparent; +.popover.hover-popover > .markdown-embed[data-type="footnote"]:not(.mod-empty) { + --popover-font-size: var(--footnote-size); } -@media (hover: hover) { - .workspace-tab-header-inner-close-button:hover { - color: var(--tab-text-color-focused-active-current); - } +.popover.hover-popover > .markdown-embed[data-type="footnote"] > .markdown-embed-content .cm-scroller, +.popover.hover-popover > .markdown-embed[data-type="footnote"] > .markdown-embed-content .markdown-preview-view { + --file-margins: var(--size-4-3) var(--size-4-4); } -.workspace-tab-header:hover .workspace-tab-header-inner-close-button { - color: var(--tab-text-color-focused); +.follow-link-popover { + transition: opacity var(--anim-duration-fast) ease-in-out, transform var(--anim-duration-fast) ease-in-out; + box-shadow: 0 2px 8px var(--background-modifier-box-shadow); + background-color: rgba(0, 0, 0, 0.9); + border-radius: var(--radius-m); + color: #ccc; + font-size: var(--font-ui-small); + line-height: 20px; + max-width: 300px; + padding: 5px 12px; + text-align: center; + z-index: var(--layer-tooltip); + white-space: pre-wrap; + top: calc(100%); } @media (hover: hover) { - .workspace-tab-header:hover .workspace-tab-header-inner-close-button:hover { - color: var(--tab-text-color-focused-active-current); + .follow-link-popover:hover { + background-color: #000000; } } -.workspace-tab-header.is-active .workspace-tab-header-inner-close-button { - color: var(--tab-text-color-focused); +.follow-link-popover.mobile-tap { + opacity: 0.9; + transform: scale(0.9, 0.9); } -@media (hover: hover) { - .workspace-tab-header.is-active .workspace-tab-header-inner-close-button:hover { - color: var(--tab-text-color-focused-active-current); - } +.follow-link-popover .popover-arrow { + position: absolute; + top: calc(100%); + inset-inline-start: 50%; + width: 0; + margin-inline-start: -5px; + border-inline-end: 5px solid transparent; + border-inline-start: 5px solid transparent; + content: " "; + font-size: 0; + line-height: 0; + border-top: 5px solid rgba(0, 0, 0, 0.9); + border-bottom: 5px solid transparent; +} +.notice progress, +.markdown-preview-view progress, +.markdown-rendered progress, +.markdown-source-view.is-live-preview progress { + -webkit-writing-mode: horizontal-tb; + writing-mode: horizontal-tb; + appearance: none; + box-sizing: border-box; + display: inline-block; + height: 6px; + margin-bottom: 4px; + max-width: 100%; + overflow: hidden; + border-radius: 0px; + border: 0; + vertical-align: -0.2rem; } -.workspace-sidedock-empty-state { - font-size: var(--font-ui-small); - padding: 20px 30px; +.notice progress[value]::-webkit-progress-bar, +.markdown-preview-view progress[value]::-webkit-progress-bar, +.markdown-rendered progress[value]::-webkit-progress-bar, +.markdown-source-view.is-live-preview progress[value]::-webkit-progress-bar { + background-color: var(--background-secondary); + box-shadow: inset 0px 0px 0px 1px var(--background-modifier-border); + border-radius: 6px; + overflow: hidden; } -.workspace-tab-header.is-before-active .workspace-tab-header-inner { - border-bottom-right-radius: 10px; +.notice progress[value]::-webkit-progress-value, +.markdown-preview-view progress[value]::-webkit-progress-value, +.markdown-rendered progress[value]::-webkit-progress-value, +.markdown-source-view.is-live-preview progress[value]::-webkit-progress-value { + background-color: var(--interactive-accent); + overflow: hidden; } -.workspace-tab-header-spacer { +.progress-bar-container { + position: absolute; + height: 100vh; + width: 100vw; + top: 0; + inset-inline-start: 0; + background-color: var(--background-primary); display: flex; - flex-grow: 1; -} -body:not(.is-grabbing):not(.is-fullscreen) .workspace-tabs.mod-top .workspace-tab-header-spacer { - -webkit-app-region: drag; -} -body:not(.is-grabbing):not(.is-fullscreen).is-hidden-frameless .mod-top .workspace-tab-header-container { - -webkit-app-region: drag; + flex-direction: column; + justify-content: center; + align-items: center; + padding-left: var(--safe-area-inset-left); + padding-right: var(--safe-area-inset-right); + z-index: 10000; } -.workspace-tab-header-tab-list, -.workspace-tab-header-new-tab { - -webkit-app-region: no-drag; - display: none; - z-index: 1; +.progress-bar { + position: relative; + display: flex; + flex-direction: column; + justify-content: center; align-items: center; + padding: var(--size-4-2); + width: 100%; } -.titlebar .workspace-tab-header-tab-list, -.titlebar .workspace-tab-header-new-tab, -.mod-root .workspace-tab-header-tab-list, -.mod-root .workspace-tab-header-new-tab { +.progress-bar-context { + position: absolute; + top: 100%; + font-size: var(--font-ui-small); + border-radius: 50px; + padding: var(--size-4-2) var(--size-4-6); +} +.progress-bar-button-container { display: flex; + flex-direction: column; + gap: var(--size-4-2); } -.workspace-tab-header-tab-list .clickable-icon, -.workspace-tab-header-new-tab .clickable-icon { - color: var(--icon-color); - padding: var(--size-2-2); - --icon-size: var(--icon-m); - --icon-stroke: var(--icon-m-stroke-width); - align-items: center; +.progress-bar-message { + margin-bottom: var(--size-4-8); + opacity: 1; + color: var(--text-muted); } -.workspace-tab-header-new-tab { - padding: var(--size-4-2) 0 var(--size-2-3); - margin-right: var(--size-4-3); - margin-left: -4px; +.progress-bar-indicator { + position: relative; + height: 8px; + margin: 0 10vw; + width: 90vw; + overflow-x: hidden; + border-radius: 3px; } -.workspace-tab-header-tab-list { - margin-right: var(--size-4-1); - padding: var(--size-4-2) 0 var(--size-2-3); +.progress-bar-line { + position: absolute; + opacity: 0.4; + background-color: var(--interactive-accent); + width: 150%; + height: 8px; } -/* Remove tab titles in sidebar */ -.workspace-fake-target-overlay.is-in-sidebar .workspace-tab-header-inner-title, -.mod-left-split .workspace-tab-header-inner-title, -.mod-right-split .workspace-tab-header-inner-title { - display: var(--sidebar-tab-text-display); +.progress-bar-subline { + position: absolute; + background-color: var(--interactive-accent); + height: 8px; + width: 100%; + transform-origin: left center; } -.workspace-fake-target-overlay.is-in-sidebar .workspace-tab-header-inner-close-button, -.mod-left-split .workspace-tab-header-inner-close-button, -.mod-right-split .workspace-tab-header-inner-close-button { - display: none; +.progress-bar-subline.mod-increase { + animation: increase 2s infinite; } -body > .workspace-split { - height: 100%; +.progress-bar-subline.mod-decrease { + animation: decrease 2s 0.5s infinite; } -.mod-root .workspace-tabs > .workspace-leaf .view-header-title { - white-space: normal; +.progress-bar .progress-bar-subline { + transition: transform 150ms ease-in-out; } -.mod-root .workspace-tab-header-status-icon { - color: var(--text-accent); +@keyframes increase { + from { + transform: translateX(-5%) scaleX(0.05); + } + to { + transform: translateX(130%) scaleX(1); + } } -.mod-root .workspace-tab-header-status-icon, -.mod-root .workspace-tab-header-inner-icon { - --icon-size: var(--icon-xs); - --icon-stroke: var(--icon-xs-stroke-width); +@keyframes decrease { + from { + transform: translateX(-80%) scaleX(0.8); + } + to { + transform: translateX(110%) scaleX(0.1); + } } -.mod-root .mod-pinned, -.mod-root .workspace-tab-header-inner-close-button { - --icon-size: var(--icon-s); - --icon-stroke: var(--icon-s-stroke-width); +.progress-bar-context-button { + margin-top: var(--size-4-3); + text-align: center; } -.mod-right-split .markdown-preview-view, -.mod-left-split .markdown-preview-view, -.mod-right-split .markdown-source-view.mod-cm6 .cm-scroller, -.mod-left-split .markdown-source-view.mod-cm6 .cm-scroller { - --file-margins: var(--size-4-5); +.prompt { + display: flex; + flex-direction: column; + border-radius: var(--radius-l); + background-color: var(--prompt-background); + box-shadow: var(--shadow-l); + backdrop-filter: var(--prompt-backdrop-filter); + border: var(--prompt-border-width) solid var(--prompt-border-color); + z-index: 1; + position: absolute; + top: 80px; + width: var(--prompt-width); + max-width: var(--prompt-max-width); + max-height: var(--prompt-max-height); + overflow: hidden; + -electron-corner-smoothing: var(--corner-smoothing); } -.mod-right-split .markdown-preview-view, -.mod-left-split .markdown-preview-view, -.mod-right-split .markdown-source-view, -.mod-left-split .markdown-source-view { - font-size: var(--sidebar-markdown-font-size); +.prompt-input-container { + --search-clear-button-size: 17px; + display: flex; + position: relative; } -/* Sidebar tabs */ -.mod-left-split .workspace-tab-header-container-inner, -.mod-right-split .workspace-tab-header-container-inner { - padding: 1px 8px 7px; - margin: 6px 0 0 0; - gap: 3px; +.prompt-input-container .search-input-clear-button { + inset-inline-end: var(--size-4-4); +} +input.prompt-input { + width: 100%; + padding: var(--size-4-6); + padding-inline-end: var(--size-4-12); + background-color: transparent; + font-size: var(--font-ui-medium); + border: none; + height: var(--prompt-input-height); + border-radius: 0; + border-bottom: var(--border-width) solid var(--background-secondary); } -.mod-left-split .workspace-tab-header, -.mod-right-split .workspace-tab-header { +input.prompt-input:hover, +input.prompt-input:focus, +input.prompt-input:focus-visible { + border-bottom: var(--border-width) solid var(--background-secondary); box-shadow: none; background-color: transparent; - padding: 0; +} +.prompt-results { + list-style: none; margin: 0; - border-radius: var(--radius-s); + padding: var(--size-4-3); + overflow-y: auto; } -.mod-left-split .workspace-tab-header:before, -.mod-right-split .workspace-tab-header:before, -.mod-left-split .workspace-tab-header:after, -.mod-right-split .workspace-tab-header:after { - display: none; +.prompt-instructions { + border-top: var(--border-width) solid var(--background-secondary); + user-select: none; + font-size: var(--font-ui-smaller); + color: var(--text-muted); + padding: var(--size-4-2); + text-align: center; + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: var(--size-4-3); } -.mod-left-split .workspace-tab-header:active .workspace-tab-header-inner-icon, -.mod-right-split .workspace-tab-header:active .workspace-tab-header-inner-icon { - color: var(--icon-color-focused); +.prompt-instruction { + display: inline-block; } -.mod-left-split .workspace-tab-header.has-active-menu, -.mod-right-split .workspace-tab-header.has-active-menu, -.mod-left-split .workspace-tab-header.is-active, -.mod-right-split .workspace-tab-header.is-active { - background-color: var(--background-modifier-hover); +.prompt-instruction-command { + font-weight: var(--bold-weight); + margin-inline-end: var(--size-2-2); } -@media (hover: hover) { - .mod-left-split .workspace-tab-header.has-active-menu:hover, - .mod-right-split .workspace-tab-header.has-active-menu:hover, - .mod-left-split .workspace-tab-header.is-active:hover, - .mod-right-split .workspace-tab-header.is-active:hover { - background-color: var(--background-modifier-hover); - } +.is-android { + --scrollbar-border-width: 0px; + --scrollbar-width: 5px; + --scrollbar-height: 5px; + --scrollbar-radius: 0; } -.mod-left-split .workspace-tab-header.has-active-menu .workspace-tab-header-inner-icon, -.mod-right-split .workspace-tab-header.has-active-menu .workspace-tab-header-inner-icon, -.mod-left-split .workspace-tab-header.is-active .workspace-tab-header-inner-icon, -.mod-right-split .workspace-tab-header.is-active .workspace-tab-header-inner-icon { - opacity: var(--icon-opacity-active); - color: var(--icon-color-focused); +body.styled-scrollbars ::-webkit-scrollbar { + background-color: var(--scrollbar-bg); + width: var(--scrollbar-width); + height: var(--scrollbar-height); + -webkit-border-radius: var(--scrollbar-radius); + background-color: transparent; } -.workspace .mod-root .workspace-tab-header { - -webkit-app-region: no-drag; - flex: 1 1 0; - width: var(--tab-width); - min-width: 0; - max-width: var(--tab-max-width); - padding: 1px 3px 3.5px; +body.styled-scrollbars ::-webkit-scrollbar-track { + background-color: transparent; } -.workspace .mod-root .workspace-tab-header .workspace-tab-header-status-container { - position: sticky; - right: 0; +body.styled-scrollbars ::-webkit-scrollbar-thumb { + background-color: var(--scrollbar-thumb-bg); + -webkit-border-radius: var(--scrollbar-radius); + background-clip: padding-box; + border: 2px solid transparent; + border-width: var(--scrollbar-border-width); + min-height: 45px; } -.workspace .mod-root .workspace-tab-header .workspace-tab-header-inner-close-button { - position: sticky; - right: 0; +body.styled-scrollbars ::-webkit-scrollbar-thumb:active { + -webkit-border-radius: var(--scrollbar-radius); } -.workspace .mod-root .workspace-tab-header.is-active:hover .workspace-tab-header-inner-close-button, -.workspace .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner-close-button { - pointer-events: all; - opacity: 1; +body.styled-scrollbars ::-webkit-scrollbar-thumb:hover, +body.styled-scrollbars ::-webkit-scrollbar-thumb:active { + background-color: var(--scrollbar-active-thumb-bg); +} +body.styled-scrollbars ::-webkit-scrollbar-corner { + background: transparent; +} +@supports not selector(::-webkit-scrollbar) { + body.styled-scrollbars { + scrollbar-width: thin; + scrollbar-color: var(--scrollbar-thumb-bg) var(--scrollbar-bg); + } +} +/* Scroll indicator for sidebar containers +body:not(.is-translucent):not(.is-mobile) .workspace-tabs { + .item-list, + .nav-files-container, + .search-result-container, + .tag-container, + .outgoing-link-pane, + .backlink-pane { + background: + linear-gradient( + var(--background-secondary) 10%, + rgba(0, 0, 0, 0) + ) + center top, + linear-gradient( + var(--background-modifier-border) 100%, + rgba(0, 0, 0, 0) + ) + center top; + background-repeat: no-repeat; + background-size: 100% 40px, 91% 1px; + background-attachment: local, scroll; + } } -.workspace .mod-root .workspace-tab-header.is-active:hover .workspace-tab-header-inner-close-button svg, -.workspace .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner-close-button svg { - opacity: 1; + */ +.suggestion-bg { + display: none; } -.workspace .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner-close-button::after { - background-color: transparent; +.suggestion-container { + background-color: var(--suggestion-background); + backdrop-filter: var(--suggestion-backdrop-filter); + align-self: stretch; + overflow: hidden; + flex-direction: column; + max-width: 500px; + max-height: 300px; + z-index: var(--layer-notice); } -.workspace .mod-root .workspace-tab-header-inner::after { - position: absolute; - right: -0.5px; - width: 1px; - background-color: var(--tab-divider-color); - content: ''; - height: 20px; +.is-mobile .suggestion-container { + max-width: calc(100vw - 20px - var(--safe-area-inset-left) - var(--safe-area-inset-right)); + max-height: 240px; } -.workspace .mod-root .workspace-tab-header-inner-icon { - display: flex; - padding-right: 4px; +.cm-tooltip.cm-completionInfo { + box-shadow: 0 2px 8px var(--background-modifier-box-shadow); + background-color: var(--background-modifier-message); + border-radius: var(--radius-s); + font-size: 11px; + font-weight: var(--font-medium); + line-height: var(--line-height-tight); + color: #FAFAFA; + padding: var(--size-2-3) var(--size-4-2); + border: none; + max-width: 200px; } -.workspace .mod-root .workspace-tab-header[data-type="markdown"] .workspace-tab-header-inner-icon, -.workspace .mod-root .workspace-tab-header[data-type="empty"] .workspace-tab-header-inner-icon { - display: none; +.cm-tooltip.cm-tooltip-autocomplete { + background-color: var(--suggestion-background); + backdrop-filter: var(--suggestion-backdrop-filter); + align-self: stretch; + overflow: hidden; + flex-direction: column; + max-width: 500px; + max-height: 300px; + z-index: var(--layer-notice); + --no-tooltip: true; + overflow: unset; } -.workspace .mod-root .workspace-tab-header-inner-title { - text-overflow: ellipsis; - width: 100%; +.is-mobile .cm-tooltip.cm-tooltip-autocomplete { + max-width: calc(100vw - 20px - var(--safe-area-inset-left) - var(--safe-area-inset-right)); + max-height: 240px; } -.workspace .mod-root .workspace-tab-header-status-container.mod-linked { - display: none; +.cm-tooltip.cm-tooltip-autocomplete .cm-completionLabel { + flex-grow: 1; } -.workspace .mod-root .workspace-tab-header-spacer { - flex-shrink: 1; +.cm-tooltip.cm-tooltip-autocomplete .cm-completionLabel .cm-completionMatchedText { + font-weight: bold; + text-decoration: none; } -.workspace .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:not(.is-active) .workspace-tab-header-inner-close-button { +.cm-tooltip.cm-tooltip-autocomplete .cm-completionDetail { display: none; } -.workspace .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:hover .workspace-tab-header-inner-close-button { - display: flex; -} -/* Stacked tabs */ -.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-header-container-inner { - padding: 0 0 0 var(--size-4-3); - margin: 0; +.cm-tooltip.cm-tooltip-autocomplete > ul[role="listbox"] { + padding: var(--size-2-3); } -.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container { - overflow-x: auto; - overflow-y: hidden; - position: relative; - display: flex; - flex-direction: row; +.cm-tooltip.cm-tooltip-autocomplete > ul > li[role="option"] { + font-size: var(--font-ui-medium); + margin-bottom: 1px; + cursor: var(--cursor); + padding: var(--size-2-3) var(--size-4-3); + white-space: pre-wrap; + border-radius: var(--radius-s); + color: var(--text-normal); + font-family: var(--font-interface); + font-size: var(--font-ui-small); + padding-inline-start: var(--size-4-2); } -.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container > * { - flex: 0 0 auto; - position: sticky; +.cm-tooltip.cm-tooltip-autocomplete > ul > li[role="option"].is-selected, +.cm-tooltip.cm-tooltip-autocomplete > ul > li[role="option"].mobile-tap { + background-color: var(--background-modifier-hover); } -.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header { - width: var(--tab-stacked-header-width); - writing-mode: var(--tab-stacked-text-writing-mode); - text-orientation: sideways; - background-color: var(--background-primary); - padding: 0; - border-radius: 0; - box-shadow: -1px 0 0 0 var(--tab-outline-color), var(--tab-stacked-shadow); - --no-tooltip: true; +.cm-tooltip.cm-tooltip-autocomplete > ul > li[role="option"].mod-downranked { + color: var(--text-muted); } -.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header:before, -.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header:after { - display: none; +.cm-tooltip.cm-tooltip-autocomplete > ul > li[role="option"].mod-complex .suggestion-icon .suggestion-flair { + margin: 0; + margin-inline-end: var(--size-4-2); } -.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header:hover .workspace-tab-header-inner { - background-color: transparent; +.cm-tooltip.cm-tooltip-autocomplete > ul > li[role="option"][aria-selected] { + background-color: var(--background-modifier-hover); } -.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner { - padding: var(--size-4-2) var(--size-4-2) var(--size-4-4); - border-radius: 0; +.suggestion-container.mod-property-value .suggestion-item { + font-size: var(--font-ui-small); + padding: var(--size-2-3) var(--size-4-2); } -.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner:after { - display: none; +.suggestion-container.mod-property-key .suggestion-item { + font-size: var(--font-ui-small); + padding: var(--size-2-3) var(--size-4-2) var(--size-2-3) var(--size-4-1); } -.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-title { - order: 3; - width: auto; - -webkit-mask-image: unset; - padding: var(--size-4-1) 0; - transform: var(--tab-stacked-text-transform); - text-align: var(--tab-stacked-text-align); - font-weight: var(--tab-stacked-font-weight); - font-size: var(--tab-stacked-font-size); - text-orientation: mixed; +.suggestion { + overflow-y: auto; + padding: var(--size-2-3); } -.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-icon { - order: 2; - cursor: grab; - display: flex; - padding: var(--size-2-2); - border-radius: var(--radius-s); +.suggestion-item, +.suggestion-empty { + font-size: var(--font-ui-medium); + margin-bottom: 1px; } -@media (hover: hover) { - .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-icon:hover { - background-color: var(--background-modifier-hover); - } +.suggestion-empty-suggestion { + color: var(--text-faint); } -.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-icon:active { - cursor: grabbing; +.suggestion-empty { + color: var(--text-muted); + padding: var(--size-4-2); + padding-top: var(--size-4-3); + text-align: center; } -.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-close-button { - color: var(--tab-text-color-focused); +.suggestion-item { + cursor: var(--cursor); + padding: var(--size-2-3) var(--size-4-3); + white-space: pre-wrap; + border-radius: var(--radius-s); } -@media (hover: hover) { - .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-close-button:hover { - background-color: var(--background-modifier-hover); - } +.suggestion-item.is-selected, +.suggestion-item.mobile-tap { + background-color: var(--background-modifier-hover); } -.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-leaf { - width: var(--tab-stacked-pane-width); - /* This is here for performance reasons - it helps the engine know - what's out of view and avoid rendering them */ - contain: strict; +.suggestion-item.mod-downranked { + color: var(--text-muted); } -.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-leaf.is-hidden > * { - display: none; +.suggestion-item.mod-nowrap { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } -.sidebar-toggle-button { - -webkit-app-region: inherit; - height: calc(var(--header-height) - 1px); - display: flex; - justify-content: center; - padding: var(--size-4-2) 0 7px 0; - -webkit-app-region: no-drag; +.is-phone .suggestion-item.mod-toggle { --icon-size: var(--icon-l); --icon-stroke: var(--icon-l-stroke-width); } -/* Smoother animation for right sidebar button positioning during close */ -.mod-macos.is-hidden-frameless:not(.is-popout-window) .sidebar-toggle-button.mod-right { - background-color: var(--tab-container-background); - position: fixed; - top: 0; - right: 0; - padding-right: var(--size-4-2); - z-index: var(--layer-popover); -} -.mod-macos.is-hidden-frameless:not(.is-popout-window) .workspace .workspace-tabs.mod-top-right-space .workspace-tab-header-container { - padding-right: 38px; +.suggestion-item.mod-toggle .mod-checked { + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); + order: 2; } -.button-container { - margin-top: 20px; +.suggestion-item.mod-complex { + align-items: baseline; + display: flex; + justify-content: space-between; } -button { - -webkit-app-region: no-drag; - display: inline-flex; - align-items: center; - justify-content: center; - color: var(--text-normal); - font-size: var(--font-ui-small); - border-radius: var(--button-radius); - border: 0; - padding: var(--size-4-1) var(--size-4-3); - height: var(--input-height); - font-weight: var(--input-font-weight); - cursor: var(--cursor); - font-family: inherit; - outline: none; - user-select: none; - white-space: nowrap; +.suggestion-item.mod-complex .suggestion-title { + overflow-wrap: break-word; } -button:not(.clickable-icon) { - background-color: var(--interactive-normal); - box-shadow: var(--input-shadow); +.suggestion-item.mod-complex .suggestion-content { + display: flex; + flex-direction: column; + overflow: hidden; + text-overflow: ellipsis; + margin-inline-end: auto; } -@media (hover: hover) { - button:hover { - background-color: var(--interactive-hover); - box-shadow: var(--input-shadow-hover); - } +.suggestion-item.mod-complex .suggestion-prefix:after { + content: ': '; } -button[aria-disabled='true'] { - background-color: var(--interactive-normal); +.suggestion-item.mod-complex .suggestion-highlight { + font-weight: bold; } -button:focus-visible { - box-shadow: 0 0 0 3px var(--background-modifier-border-focus); +.suggestion-item.mod-complex .suggestion-note { + font-size: 0.8em; + color: var(--text-muted); + width: 100%; + flex-basis: 100%; + overflow-wrap: break-word; } -button[disabled="true"] { - cursor: not-allowed; +.suggestion-item.mod-complex .suggestion-icon, +.suggestion-item.mod-complex .suggestion-aux { + display: flex; + align-items: center; + align-self: center; + flex-shrink: 0; } -button.mod-cta { - background-color: var(--interactive-accent); - color: var(--text-on-accent); +.suggestion-item.mod-complex .suggestion-hotkey { + font-size: var(--font-ui-smaller); + font-family: var(--font-interface); + padding: 2px 6px; } -@media (hover: hover) { - button.mod-cta:hover { - background-color: var(--interactive-accent-hover); - } +.suggestion-item.mod-complex .suggestion-hotkey:not(:last-child) { + margin-inline-start: 10px; } -button.mod-cta:focus-visible { - box-shadow: 0 0 0 3px var(--background-modifier-border-focus); +.suggestion-item.mod-complex .suggestion-action { + font-size: var(--font-ui-smaller); + font-family: var(--font-interface); + color: var(--interactive-accent); } -button.mod-muted { - background-color: var(--background-secondary); +.suggestion-item.mod-complex .suggestion-flair { color: var(--text-muted); + opacity: var(--icon-opacity); + display: flex; + align-items: center; } -@media (hover: hover) { - button.mod-muted:hover { - background-color: var(--background-secondary); - } -} -button.mod-warning { - background-color: var(--background-modifier-error); - color: var(--text-on-accent); +.suggestion-item.mod-complex .suggestion-flair:not(:last-child) { + margin-inline-start: 6px; } -@media (hover: hover) { - button.mod-warning:hover { - background-color: var(--background-modifier-error-hover); - } +.suggestion-item.mod-complex .suggestion-icon .suggestion-flair { + margin-top: 0; + margin-inline-start: var(--size-4-1); + margin-bottom: 0; + margin-inline-end: var(--size-4-3); } -button.mod-destructive { - color: var(--text-error); +.suggestion-item.mod-complex .suggestion-aux .suggestion-flair { + margin-top: 0; + margin-inline-start: var(--size-4-3); + margin-bottom: 0; + margin-inline-end: var(--size-4-1); } -.card-container { - display: flex; +.suggestion-highlight { + font-weight: bold; } -.card-container.mod-horizontal { - flex-direction: column; +.suggestion-bg { + position: fixed; + top: 0; + inset-inline-start: 0; + width: 100%; + height: 100%; + background-color: var(--background-modifier-cover); + z-index: var(--layer-popover); } -.card { - background-color: var(--background-secondary-alt); - border-radius: 4px; - border: 1px solid var(--background-modifier-border); - margin: 0 10px; - padding: 15px 30px; +.horizontal-tab-header { display: flex; - flex-direction: column; - flex-grow: 1; -} -.card ul { - padding: 0; } -.card .button-container { - margin: 10px 0; -} -.card-container.mod-horizontal .card { - margin: 10px 0; +.horizontal-tab-nav-item, +.vertical-tab-nav-item { + padding: var(--size-4-1) var(--size-4-2); + margin-bottom: 0; + user-select: none; + cursor: var(--cursor); + font-size: calc(var(--font-ui-small) + 1px); + border-radius: var(--radius-s); } -.card-container.mod-horizontal .card ul { - padding-left: 24px; +body:not(.is-phone) .horizontal-tab-nav-item.is-active, +body:not(.is-phone) .vertical-tab-nav-item.is-active { + background-color: var(--background-modifier-hover); + -electron-corner-smoothing: var(--corner-smoothing); } -.card li { - margin: 5px 0; +.horizontal-tab-nav-item:hover .vertical-tab-nav-item-icon, +.vertical-tab-nav-item:hover .vertical-tab-nav-item-icon, +.horizontal-tab-nav-item.is-active .vertical-tab-nav-item-icon, +.vertical-tab-nav-item.is-active .vertical-tab-nav-item-icon { + color: var(--text-normal); } -.card.u-clickable { - cursor: var(--cursor); +.horizontal-tab-nav-item.mobile-tap, +.vertical-tab-nav-item.mobile-tap { + --icon-color: var(--text-normal); + background-color: var(--background-modifier-hover); + color: var(--text-normal); } @media (hover: hover) { - .card.u-clickable:hover { - border: 1px solid var(--interactive-accent); - background-color: hsla(var(--interactive-accent-hsl), 0.1); + .horizontal-tab-nav-item:hover, + .vertical-tab-nav-item:hover { + background-color: var(--background-modifier-hover); } } -.card.is-selected { - border: 1px solid var(--interactive-accent); - background-color: hsla(var(--interactive-accent-hsl), 0.2); +.vertical-tab-nav-item { + display: flex; } -.card-title { - text-align: center; - font-size: 20px; - line-height: 30px; - color: var(--text-muted); - margin-bottom: 8px; +.vertical-tab-nav-item-chevron { + display: none; } -.card-description { +.vertical-tab-nav-item-icon { + display: flex; + align-items: center; + justify-content: center; + border-radius: var(--radius-s); + margin-inline-end: var(--size-4-2); + flex-shrink: 0; color: var(--text-muted); - font-size: var(--font-ui-small); - line-height: 20px; - flex-grow: 1; -} -/* Only used in Format Converter so far */ -.changelog-item { - margin: var(--size-4-2) 0; - font-size: var(--font-ui-medium); - line-height: var(--line-height); -} -.changelog-item:before { - content: attr(data-label); - width: 50px; - border-radius: var(--radius-m); - font-size: var(--font-ui-small); - display: inline-block; - text-align: center; - margin-right: 14px; - text-transform: uppercase; - letter-spacing: 1px; - line-height: 22px; -} -.changelog-item.mod-success:before { - background-color: var(--background-modifier-success); } -.changelog-item.mod-highlighted:before { - background-color: var(--interactive-accent); +.vertical-tab-nav-item-title { + flex-grow: 1; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } -[contenteditable] { - outline: none; +.horizontal-tab-content, +.vertical-tab-content { + background-color: var(--background-primary); + padding-inline-start: var(--size-4-12); + padding-inline-end: var(--size-4-12); + container-type: inline-size; } -.list-item { +.vertical-tabs-container { display: flex; - padding: 0; - margin: 8px 0; - gap: var(--size-4-2); - align-items: center; } -.list-item-part.mod-extended { - flex-grow: 1; - overflow-wrap: anywhere; +.vertical-tab-header { + padding: var(--size-4-3); + background-color: var(--modal-sidebar-background); } -.list-item-part.clickable-icon { +.vertical-tab-header-group-items { display: flex; - align-items: center; - justify-content: center; - padding: var(--size-2-2); - cursor: var(--cursor); - border-radius: var(--radius-s); - color: var(--icon-color); + flex-direction: column; + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); } -.list-item-part.clickable-icon:hover, -.list-item-part.clickable-icon:active { - color: var(--icon-color-hover); - background-color: var(--background-modifier-hover); +body:not(.is-phone) .vertical-tab-header-group-items { + gap: var(--size-2-1); } -.u-center-text { - text-align: center; +.vertical-tab-header-group-title { + font-size: var(--font-ui-smaller); + color: var(--text-faint); + font-weight: var(--font-semibold); + padding: var(--size-4-2); + user-select: none; } -.u-faded-text { - color: var(--text-muted); +.vertical-tab-header-group { + padding: var(--size-4-3) 0; } -.u-pop { - color: var(--text-accent); - font-weight: var(--font-semibold); +.vertical-tab-content-container { + overflow: hidden; + flex-grow: 1; } -.u-muted { - color: var(--text-muted); +.vertical-tab-content { + overflow-y: auto; + height: 100%; + padding-top: var(--size-4-8); + padding-bottom: var(--size-4-16); } -.u-small { - font-size: 0.8em; +.vertical-tab-content h1 { + display: none; } -.u-clickable { - cursor: var(--cursor); +.vertical-tab-content h2 { + font-size: var(--font-ui-medium); + font-weight: var(--font-semibold); } -/* In file recovery, sync version history, and publish diff */ -.diff-view { - user-select: text; +@media (forced-colors: active) { + .horizontal-tab-nav-item, + .vertical-tab-nav-item { + --interactive-accent: SelectedItem; + } } -.diff-line { - padding: 0 var(--size-4-2); +.checkbox-container { + -webkit-app-region: no-drag; + cursor: var(--cursor); + background-color: var(--background-modifier-border-hover); + border-radius: var(--toggle-radius); + display: inline-block; + flex-shrink: 0; + position: relative; + user-select: none; + box-shadow: inset 0 4px 10px rgba(0, 0, 0, 0.07), inset 0 0 1px rgba(0, 0, 0, 0.21); + transition: box-shadow 0.15s ease-in-out, outline 0.15s ease-in-out, border 0.15s ease-in-out, opacity 0.15s ease-in-out; + outline: 0 solid var(--background-modifier-border-focus); + width: var(--toggle-s-width); + height: calc(var(--toggle-s-thumb-height) + var(--toggle-s-border-width) * 2); } -.diff-line.mod-left { - background-color: rgba(var(--background-modifier-error-rgb), 0.2); +.checkbox-container input[type='checkbox'] { + position: absolute; + opacity: 0; + left: 0; } -.diff-line.mod-left .diff-changed { - background-color: rgba(var(--background-modifier-error-rgb), 0.4); +@media (hover: hover) { + .checkbox-container:hover { + box-shadow: inset 0 6px 20px rgba(0, 0, 0, 0.14), inset 0 0 1px rgba(0, 0, 0, 0.28); + } } -.diff-line.mod-right { - background-color: rgba(var(--background-modifier-success-rgb), 0.2); +.checkbox-container.is-enabled { + background-color: var(--interactive-accent); } -.diff-line.mod-right .diff-changed { - background-color: rgba(var(--background-modifier-success-rgb), 0.4); +.checkbox-container:before { + content: ''; + display: block; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + opacity: 0; } -.diff-collapsed { - text-align: center; - color: var(--text-muted); - cursor: pointer; - font-size: var(--font-ui-small); - margin: var(--size-4-2) 0; +.checkbox-container:after { + pointer-events: none; + content: ''; + display: block; + position: absolute; + background-color: var(--toggle-thumb-color); + border-radius: var(--toggle-thumb-radius); + transition: transform 0.15s ease-in-out, width 0.1s ease-in-out 0.05s, height 0.1s ease-in-out 0.05s, margin-top 0.1s ease-in-out 0.05s, left 0.1s ease-in-out 0.05s, opacity 0.1s ease-in-out 0.05s; + left: 0; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15); } -.diff-collapsed:hover { - color: var(--text-accent); +.checkbox-container:focus-visible { + outline: var(--toggle-s-border-width) solid var(--background-modifier-border-focus); } -/* Document search and replace */ -/* -Moves search to the top -#todo move this into DOM */ -.markdown-reading-view.is-searching, -.markdown-source-view.is-replacing, -.markdown-source-view.is-searching { - flex-direction: column-reverse; +.checkbox-container:after { + width: var(--toggle-s-thumb-width); + height: var(--toggle-s-thumb-height); + margin: var(--toggle-s-border-width) 0 0 0; + transform: translate3d(var(--toggle-s-border-width), 0, 0); } -/* Container for dcoument search/replace UI */ -.mod-active .document-search-container { - background-color: var(--background-primary); +.checkbox-container.is-enabled:after { + transform: translate3d(calc(var(--toggle-s-width) - var(--toggle-s-thumb-width) - var(--toggle-s-border-width)), 0, 0); } -.document-search-container { - display: flex; - flex-direction: column; - padding: var(--size-4-2) 0; - margin: 0 var(--size-4-4); - gap: var(--size-4-2); - z-index: var(--layer-popover); +.checkbox-container:active:after { + opacity: var(--toggle-thumb-opacity-active); + width: calc(var(--toggle-s-thumb-width) + var(--toggle-s-border-width) * 2); + height: calc(var(--toggle-s-thumb-height) + var(--toggle-s-border-width) * 2); + margin-top: 0; } -.document-search, -.document-replace { - width: 100%; - max-width: var(--file-line-width); - margin: 0 auto; - display: flex; - padding: 0 var(--size-4-2); - gap: var(--size-4-2); +.modal .checkbox-container { + width: var(--toggle-width); + height: calc(var(--toggle-thumb-height) + var(--toggle-border-width) * 2); } -.document-replace { - display: none; +.modal .checkbox-container:focus-visible { + outline: var(--toggle-border-width) solid var(--background-modifier-border-focus); } -.document-search-container.mod-replace-mode .document-replace { - display: flex; +.modal .checkbox-container:after { + width: var(--toggle-thumb-width); + height: var(--toggle-thumb-height); + margin: var(--toggle-border-width) 0 0 0; + transform: translate3d(var(--toggle-border-width), 0, 0); } -input.document-search-input, -input.document-replace-input { - flex-grow: 1; +.modal .checkbox-container.is-enabled:after { + transform: translate3d(calc(var(--toggle-width) - var(--toggle-thumb-width) - var(--toggle-border-width)), 0, 0); } -input.document-search-input.mod-no-match, -input.document-replace-input.mod-no-match { - background-color: rgba(var(--background-modifier-error-rgb), 0.2); +.modal .checkbox-container.is-enabled:active:after { + left: -4px; } -@media (hover: hover) { - input.document-search-input.mod-no-match:hover, - input.document-replace-input.mod-no-match:hover { - background-color: rgba(var(--background-modifier-error-rgb), 0.2); - } +.modal .checkbox-container:active:after { + opacity: var(--toggle-thumb-opacity-active); + width: calc(var(--toggle-thumb-width) + var(--toggle-border-width) * 4); + height: calc(var(--toggle-thumb-height) + var(--toggle-border-width) * 4); + margin-top: calc(var(--toggle-border-width) * -1); } -.document-replace-buttons, -.document-search-buttons { - display: flex; - gap: var(--size-4-2); - align-items: center; +.checkbox-container.mod-small { + width: var(--toggle-s-width); + height: calc(var(--toggle-s-thumb-height) + var(--toggle-s-border-width) * 2); } -.document-search-button { - font-size: var(--font-ui-small); - padding: 0 var(--size-4-2); - color: var(--text-muted); +.checkbox-container.mod-small:focus-visible { + outline: var(--toggle-s-border-width) solid var(--background-modifier-border-focus); } -.document-search-close-button { - cursor: var(--cursor); - position: relative; - top: 2px; - font-size: 24px; - line-height: 20px; - height: 24px; - width: 24px; - padding: 0 var(--size-2-2); - border-radius: var(--radius-s); - color: var(--text-muted); +.checkbox-container.mod-small:after { + width: var(--toggle-s-thumb-width); + height: var(--toggle-s-thumb-height); + margin: var(--toggle-s-border-width) 0 0 0; + transform: translate3d(var(--toggle-s-border-width), 0, 0); +} +.checkbox-container.mod-small.is-enabled:after { + transform: translate3d(calc(var(--toggle-s-width) - var(--toggle-s-thumb-width) - var(--toggle-s-border-width)), 0, 0); } -.document-search-close-button:before { - font-family: Inter, sans-serif; - content: "\d7"; - font-weight: 300; +.checkbox-container.mod-small:active:after { + opacity: var(--toggle-thumb-opacity-active); + width: calc(var(--toggle-s-thumb-width) + var(--toggle-s-border-width) * 2); + height: calc(var(--toggle-s-thumb-height) + var(--toggle-s-border-width) * 2); + margin-top: 0; } -@media (hover: hover) { - .document-search-close-button:hover { - background-color: var(--background-modifier-hover); - color: var(--text-normal); +@media (forced-colors: active) { + .checkbox-container { + outline: 1px ButtonBorder solid; + } + .checkbox-container:after { + outline: 1px ButtonBorder solid; + } + .checkbox-container.is-enabled { + background-color: SelectedItem; } } -/* Read */ -.markdown-rendered .search-highlight > div { - position: absolute; +/* Add this attribute to the element that needs a tooltip */ +.tooltip { + animation: pop-down 200ms forwards ease-in-out; + box-shadow: 0 2px 8px var(--background-modifier-box-shadow); + background-color: var(--background-modifier-message); + border-radius: var(--radius-s); + color: #FAFAFA; + font-size: var(--font-ui-smaller); + font-weight: var(--font-medium); + left: 50%; + line-height: var(--line-height-tight); + max-width: 300px; + padding: var(--size-4-1) var(--size-4-2); + position: fixed; + text-align: center; + transform: translateX(-50%); + z-index: var(--layer-tooltip); pointer-events: none; - box-shadow: 0 0 0px 2px var(--text-normal); - opacity: 0.3; - mix-blend-mode: var(--highlight-mix-blend-mode); - border-radius: 2px; + white-space: pre-wrap; + word-break: normal; + overflow-wrap: anywhere; } -.markdown-rendered .search-highlight > div.is-active { - box-shadow: 0 0 0px 3px var(--text-accent); - opacity: 1; +.tooltip.mod-right { + animation: pop-right 200ms forwards ease-in-out; + transform: translateY(-50%); } -.cm-s-obsidian span.obsidian-search-match-highlight { - box-shadow: 0 0 0px 3px var(--text-accent); - mix-blend-mode: var(--highlight-mix-blend-mode); - border-radius: 2px; +.tooltip.mod-left { + animation: pop-right 200ms forwards ease-in-out; + transform: translateY(-50%); } -/* Edit */ -.markdown-source-view.mod-cm6 .document-search-container { - flex: 0 0 auto; +.tooltip.mod-error { + width: 200px; + background-color: var(--background-modifier-error); + color: var(--text-on-accent); } -.cm-s-obsidian span.cm-highlight.obsidian-search-match-highlight { - background-color: var(--text-selection); +.tooltip.mod-wide { + max-width: 450px; + width: 400px; } -/* Support for rtl text, explicit support for Arabic and Hebrew */ -*[dir="rtl"] .dropdown, -:root:lang(ar) .dropdown, -:root:lang(iw) .dropdown { - background-position: left 0.7em top 50%, 0 0; - padding: 0.6em 0.8em 0.5em 1.4em; +/* Triangle hack to make tooltip look like a speech bubble */ +.tooltip .tooltip-arrow { + position: absolute; + top: -5px; + left: 50%; + width: 0; + margin-left: -5px; + border-bottom: 5px solid var(--background-modifier-message); + border-right: 5px solid transparent; + border-left: 5px solid transparent; + content: " "; + font-size: 0; + line-height: 0; } -/* class applies to select element itself, not a wrapper element */ -select, -.dropdown { - -webkit-app-region: no-drag; - height: var(--input-height); - font-size: var(--font-ui-small); - font-family: inherit; - font-weight: var(--input-font-weight); - color: var(--text-normal); - line-height: var(--line-height-tight); - padding: 0 1.9em 0 0.8em; - max-width: 100%; - /* useful when width is set to anything other than 100% */ - box-sizing: border-box; - margin: 0; - border: 0; - box-shadow: var(--input-shadow); - border-radius: var(--input-radius); - -webkit-appearance: none; - appearance: none; - background-color: var(--interactive-normal); - background-repeat: no-repeat, repeat; - /* arrow icon position (1em from the right, 50% vertical) , then gradient position*/ - background-position: right 0.7em top 50%, 0 0; - /* icon size, then gradient */ - background-size: 0.65em auto, 100%; +.tooltip.mod-right .tooltip-arrow { + top: calc(50% - 5px); + left: -5px; + border-right: 5px solid var(--background-modifier-message); + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; } -@media (hover: hover) { - select:hover, - .dropdown:hover { - box-shadow: var(--input-shadow-hover); - background-color: var(--interactive-hover); - } +.tooltip.mod-left .tooltip-arrow { + top: calc(50% - 5px); + left: calc(100% + 5px); + border-left: 5px solid var(--background-modifier-message); + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; } -select:focus, -.dropdown:focus { - box-shadow: 0 0 0px 3px var(--background-modifier-border-focus); - outline: none; +.tooltip.mod-top .tooltip-arrow { + top: calc(100%); + border-top: 5px solid var(--background-modifier-message); + border-bottom: 5px solid transparent; } -.dropdown { - background-image: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" width="292.4" height="292.4"%3E%3Cpath fill="%23000" opacity="0.4" d="M287 69.4a17.6 17.6 0 0 0-13-5.4H18.4c-5 0-9.3 1.8-12.9 5.4A17.6 17.6 0 0 0 0 82.2c0 5 1.8 9.3 5.4 12.9l128 127.9c3.6 3.6 7.8 5.4 12.8 5.4s9.2-1.8 12.8-5.4L287 95c3.5-3.5 5.4-7.8 5.4-12.8 0-5-1.9-9.2-5.5-12.8z"/%3E%3C/svg%3E'); +.tooltip.mod-error .tooltip-arrow { + border-bottom-color: var(--background-modifier-error); } -.theme-dark .dropdown { - background-image: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" width="292.4" height="292.4"%3E%3Cpath fill="%23FFF" opacity="0.4" d="M287 69.4a17.6 17.6 0 0 0-13-5.4H18.4c-5 0-9.3 1.8-12.9 5.4A17.6 17.6 0 0 0 0 82.2c0 5 1.8 9.3 5.4 12.9l128 127.9c3.6 3.6 7.8 5.4 12.8 5.4s9.2-1.8 12.8-5.4L287 95c3.5-3.5 5.4-7.8 5.4-12.8 0-5-1.9-9.2-5.5-12.8z"/%3E%3C/svg%3E'); +.tooltip.mod-error.mod-right .tooltip-arrow { + border-right-color: var(--background-modifier-error); + border-bottom: 5px solid transparent; } -/* Set options to normal weight */ -.dropdown option { - font-weight: normal; - background-color: var(--background-primary); +.tooltip.mod-error.mod-left .tooltip-arrow { + border-left-color: var(--background-modifier-error); + border-bottom: 5px solid transparent; } -.flair { - background-color: var(--interactive-normal); - border-radius: var(--radius-s); - color: var(--text-normal); - font-size: 10px; - letter-spacing: 0.05em; - margin-left: var(--size-4-2); - padding: var(--size-2-1) var(--size-2-2); - position: relative; - text-transform: uppercase; - white-space: nowrap; - vertical-align: middle; +[aria-label] .svg-icon { + pointer-events: none; } -.flair.mod-flat { - vertical-align: top; +@keyframes pop-down { + 0% { + opacity: 0; + transform: translateX(-50%) scale(1); + } + 20% { + opacity: 0.7; + transform: translateX(-50%) scale(1.02); + } + 40% { + opacity: 1; + transform: translateX(-50%) scale(1.05); + } + 100% { + opacity: 1; + transform: translateX(-50%) scale(1); + } } -.flair.mod-pop { - background-color: var(--interactive-accent); - color: var(--text-on-accent); +@keyframes pop-right { + 0% { + opacity: 0; + transform: translateY(-50%) scale(1); + } + 20% { + opacity: 0.7; + transform: translateY(-50%) scale(1.02); + } + 40% { + opacity: 1; + transform: translateY(-50%) scale(1.05); + } + 100% { + opacity: 1; + transform: translateY(-50%) scale(1); + } } -.markdown-preview-view:not(.allow-fold-lists) .list-collapse-indicator, -.markdown-preview-view:not(.allow-fold-headings) .heading-collapse-indicator { - display: none; +.tree-item-self { + align-items: baseline; + display: flex; + border-radius: var(--nav-item-radius); + color: var(--nav-item-color); + font-size: var(--nav-item-size); + line-height: var(--line-height-tight); + font-weight: var(--nav-item-weight); + margin-bottom: var(--nav-item-margin-bottom); + padding: var(--nav-item-padding); + position: relative; } -/* #todo Reduce specificity here */ -.cm-fold-indicator .collapse-indicator, -.cm-gutterElement .collapse-indicator, -.collapse-indicator, -.fold-gutter { - opacity: 0; +.tree-item-self:before { + content: '\200B'; } -/* -.is-mobile & .cm-fold-indicator .collapse-indicator { - opacity: 1; -}*/ -h1:hover .collapse-indicator, -h2:hover .collapse-indicator, -h3:hover .collapse-indicator, -h4:hover .collapse-indicator, -h5:hover .collapse-indicator, -h6:hover .collapse-indicator, -.collapse-indicator:hover, -.is-collapsed .collapse-indicator, -.cm-fold-indicator.is-collapsed .collapse-indicator, -.cm-gutterElement:hover .collapse-indicator, -.cm-gutterElement .is-collapsed .collapse-indicator, -.cm-line:hover .cm-fold-indicator .collapse-indicator, -.fold-gutter.is-collapsed, -.fold-gutter:hover, -.metadata-properties-heading:hover .collapse-indicator { - opacity: 1; +.tree-item-self.mod-collapsible { + padding: var(--nav-item-parent-padding); } -.collapse-icon { - display: flex; - align-items: center; +.tree-item-self.is-cut { + opacity: 0.5; } -.collapse-icon:before { - content: "\200B"; +.tree-item-self.is-being-dragged-over { + color: var(--nav-item-color-highlighted); + background: hsla(var(--interactive-accent-hsl), 0.1); } -.collapse-icon svg.svg-icon { - color: var(--nav-collapse-icon-color); - stroke-width: 4px; - width: 10px; - height: 10px; - transition: transform 100ms ease-in-out; +.tree-item-self.is-being-dragged-over .collapse-icon { + color: var(--nav-item-color-highlighted); } -.collapse-icon.is-collapsed svg.svg-icon { - transform: rotate(-90deg); +.tree-item-self.has-active-menu { + box-shadow: 0 0 0 2px var(--background-modifier-border-focus); } -.rtl .collapse-icon.is-collapsed svg.svg-icon { - transform: rotate(90deg); +.tree-item-self.is-being-renamed { + flex-grow: 1; + white-space: normal; + box-shadow: 0 0 0 2px var(--background-modifier-border-focus); } -.view-content .list-collapse-indicator svg.svg-icon, -.view-content .collapse-indicator svg.svg-icon { - color: var(--collapse-icon-color); +.tree-item-self.is-being-renamed [contenteditable="true"], +.tree-item-self.is-being-renamed .tree-item-inner { + cursor: text; + flex-grow: 1; } -.view-content .is-collapsed .list-collapse-indicator svg.svg-icon, -.view-content .is-collapsed .collapse-indicator svg.svg-icon { - color: var(--collapse-icon-color-collapsed); +.tree-item-self.is-being-renamed:focus-within { + color: var(--nav-item-color-active); + box-shadow: 0 0 0 2px var(--interactive-accent); } -.markdown-preview-view .collapse-indicator { - position: absolute; +.tree-item-self.is-clickable { cursor: var(--cursor); } -.markdown-preview-view .collapse-indicator .svg-icon { - vertical-align: middle; +@media (hover: hover) { + body:not(.is-grabbing) .tree-item-self.is-clickable:hover { + color: var(--nav-item-color-hover); + background-color: var(--nav-item-background-hover); + font-weight: var(--nav-item-weight-hover); + } } -.markdown-preview-view li.is-collapsed > ul, -.markdown-preview-view li.is-collapsed > ol { - display: none; +.is-mobile .tree-item-self.is-clickable { + transition: background-color 0.1s ease-in-out, color 0.1s ease-in-out; } -.markdown-preview-view .heading-collapse-indicator { - margin-left: -22px; - padding: 0 6px; +.tree-item-self.is-clickable.mobile-tap { + color: var(--nav-item-color-hover); + font-weight: var(--nav-item-weight-hover); } -.markdown-source-view.mod-cm6 .cm-fold-indicator .collapse-indicator { - opacity: 0; +body:not(.is-grabbing) .tree-item-self.is-active:hover, +.tree-item-self.is-active { + color: var(--nav-item-color-active); + background-color: var(--nav-item-background-active); + font-weight: var(--nav-item-weight-active); } -.markdown-source-view.mod-cm6 .cm-line:hover .cm-fold-indicator .collapse-indicator, -.markdown-source-view.mod-cm6 .cm-fold-indicator.is-collapsed .collapse-indicator { - opacity: 1; +body:not(.is-grabbing) .tree-item-self.is-selected:hover, +.tree-item-self.is-selected { + color: var(--nav-item-color-selected); + background-color: var(--nav-item-background-selected); } -.markdown-source-view.mod-cm6 .cm-foldPlaceholder { - color: var(--text-faint); - background-color: transparent; - border: none; - margin-left: 8px; +body:not(.is-grabbing) .tree-item-self.is-being-dragged:hover, +.tree-item-self.is-being-dragged { + color: var(--text-on-accent); + background-color: var(--interactive-accent); } -.markdown-source-view.mod-cm6 .cm-fold-indicator { - display: inline-block; - position: relative; - z-index: 1; +body:not(.is-grabbing) .tree-item-self.is-being-dragged:hover .tree-item-icon, +.tree-item-self.is-being-dragged .tree-item-icon { + color: var(--text-on-accent); } -.markdown-source-view.mod-cm6 .cm-fold-indicator .collapse-indicator { - position: absolute; - top: 0; - right: 0; - height: 100%; - cursor: var(--cursor); - padding-right: 5px; +body:not(.is-phone) .workspace-leaf.mod-active .tree-item-self.has-focus { + box-shadow: 0 0 0 2px var(--background-modifier-border-focus); } -/* Consistency for hover states across all icon buttons */ -svg.svg-icon { - height: var(--icon-size); - width: var(--icon-size); - stroke-width: var(--icon-stroke); +body:not(.is-phone) .workspace-leaf.mod-active .tree-item-self.has-focus:focus-within { + box-shadow: 0 0 0 2px var(--interactive-accent); } -/* Parent container of button rows */ -.nav-buttons-container, -.view-actions, -.workspace-tab-header-inner, -.side-dock-settings, -.side-dock-actions { +.tree-item-self .tree-item-icon { + position: absolute; + margin-inline-start: calc(-1 * var(--size-4-5)); + width: var(--size-4-4); display: flex; + align-items: center; justify-content: center; + opacity: var(--icon-opacity); + color: var(--icon-color); + flex: 0 0 auto; } -.side-dock-settings, -.side-dock-actions { - gap: var(--size-2-3); -} -.view-actions { - gap: 0; - align-items: center; - --icon-size: var(--icon-s); +.tree-item-self .tree-item-icon:before { + content: "\200b"; } -.nav-file-icon .svg-icon, -.suggestion-flair .svg-icon, -.menu-item-icon .svg-icon, -.status-bar-item .svg-icon { - --icon-size: var(--icon-s); +.tree-item-self .tree-item-icon .svg-icon:not(.right-triangle) { + --icon-size: var(--icon-xs); --icon-stroke: var(--icon-s-stroke-width); } -.clickable-icon.side-dock-ribbon-action .svg-icon, -.mod-left-split .workspace-tab-header-inner-icon .svg-icon, -.mod-right-split .workspace-tab-header-inner-icon .svg-icon { - --icon-size: var(--icon-l); - --icon-stroke: var(--icon-l-stroke-width); -} -.clickable-icon.side-dock-ribbon-action:active, -.mod-left-split .workspace-tab-header-inner-icon:active, -.mod-right-split .workspace-tab-header-inner-icon:active { - color: var(--icon-color-focused); -} -/* Use horizontal more actions "..." on macOS/iOS per OS guidelines */ -.is-ios .lucide-more-vertical, -.mod-macos .lucide-more-vertical { - transform: rotate(90deg); -} -/* Parent button containers for SVG button icons */ -.clickable-icon { - -webkit-app-region: no-drag; - background-color: transparent; +.tree-item-flair-outer { + padding-inline-start: var(--size-4-1); + margin-inline-start: auto; display: flex; + flex-shrink: 0; align-items: center; - justify-content: center; - padding: var(--size-2-2) var(--size-2-3); - cursor: var(--cursor); - border-radius: var(--clickable-icon-radius); - color: var(--icon-color); - opacity: var(--icon-opacity); - transition: opacity 0.15s ease-in-out; - height: auto; +} +.tree-item-flair { + font-size: var(--font-ui-smaller); + color: var(--text-faint); + line-height: 1; + border-radius: var(--radius-s); } @media (hover: hover) { - .clickable-icon:hover { - box-shadow: none; - opacity: var(--icon-opacity-hover); - color: var(--icon-color-hover); - background-color: var(--background-modifier-hover); - } - .clickable-icon.has-active-menu, - .clickable-icon:active { - opacity: var(--icon-opacity-hover); - color: var(--icon-color-focused); - background-color: var(--background-modifier-hover); + .tree-item-self:hover .tree-item-flair { + color: var(--text-muted); } } -.clickable-icon.is-active { - opacity: var(--icon-opacity-hover); - color: var(--icon-color-active); - background-color: var(--background-modifier-active-hover); +.tree-item-inner { + overflow: hidden; + white-space: pre-wrap; +} +.tree-item-inner-text { + overflow: hidden; + text-overflow: ellipsis; +} +.tree-item-inner-subtext { + color: var(--text-faint); + font-size: 85%; +} +.tree-item-children { + padding-inline-start: var(--nav-item-children-padding-start, var(--nav-item-children-padding-left)); + margin-inline-start: var(--nav-item-children-margin-start, var(--nav-item-children-margin-left)); + margin-bottom: 1px; + border-inline-start: var(--nav-indentation-guide-width) solid var(--nav-indentation-guide-color); +} +.drop-indicator { + position: absolute; + left: 0; + width: 100%; + height: 0; + border: 2px solid var(--interactive-accent); + pointer-events: none; +} +.drop-indicator:not(.is-active) { + display: none; } -@media (hover: hover) { - .clickable-icon.is-active:hover { - background-color: var(--background-modifier-active-hover); - } +audio { + outline: none; } -.clickable-icon[aria-disabled='true'] { - background-color: unset; - color: var(--text-muted); - opacity: 0.4; +.markdown-rendered audio { + max-width: 100%; + outline: none; } -@media (hover: hover) { - .clickable-icon[aria-disabled='true']:hover { - background-color: unset; - } +audio { + width: 100%; + height: 42px; } -.clickable-icon.mod-warning { - color: var(--text-error); +audio::-webkit-media-controls-enclosure { + border-radius: calc(var(--radius-m) - 1px); + border: var(--border-width) solid var(--background-modifier-border); + background-color: var(--background-primary-alt); } -.clickable-icon.mod-filled svg { - fill: var(--icon-color); +audio::-webkit-media-controls-current-time-display, +audio::-webkit-media-controls-time-remaining-display { + font-family: var(--font-interface); } -.setting-item-control .clickable-icon { - padding: var(--size-2-2); +iframe { + border: 0; } -.text-icon-button { - -webkit-app-region: no-drag; - display: inline-flex; - align-items: center; - color: var(--text-muted); - font-size: var(--font-ui-small); - border-radius: var(--button-radius); - padding: var(--size-2-1) var(--size-4-3) var(--size-2-1) var(--size-4-2); - height: var(--input-height); - font-weight: var(--input-font-weight); - cursor: var(--cursor); - font-family: inherit; - gap: var(--size-2-2); - user-select: none; - white-space: nowrap; +kbd { + color: var(--code-normal); + font-family: var(--font-monospace); + background-color: var(--code-background); + border-radius: var(--radius-s); + font-size: var(--code-size); + padding: 0.1em 0.25em; } -.text-icon-button .text-button-icon { +.workspace-leaf-content[data-type="pdf"] .view-content { display: flex; - align-items: center; - justify-content: center; + flex-direction: column; + overflow: hidden; + padding: 0; } -.text-icon-button .text-button-icon svg.svg-icon { - height: var(--icon-size); - width: var(--icon-size); - stroke-width: var(--icon-stroke); +.pdf-container { + background-color: var(--pdf-background); + flex-grow: 1; + min-width: 350px; + overflow: hidden; + position: relative; } -.text-icon-button:focus { - box-shadow: 0 0 0px 2px var(--background-modifier-border-focus); - outline: none; +.theme-dark .pdf-container.mod-themed .annotationLayer .textWidgetAnnotation input, +.theme-dark .pdf-container.mod-themed .annotationLayer .textWidgetAnnotation textarea { + filter: invert(100%) hue-rotate(180deg); } -@media (hover: hover) { - .text-icon-button:hover { - box-shadow: none; - opacity: var(--icon-opacity-hover); - background-color: var(--background-modifier-hover); - color: var(--text-normal); - } - .text-icon-button:hover .text-button-icon { - color: var(--icon-color-hover); - } - .text-icon-button.has-active-menu, - .text-icon-button:active { - opacity: var(--icon-opacity-hover); - background-color: var(--background-modifier-hover); - color: var(--text-normal); - } - .text-icon-button.has-active-menu .text-button-icon, - .text-icon-button:active .text-button-icon { - color: var(--icon-color-focused); - } +.theme-dark .pdf-container.mod-themed .popupWrapper > div { + background-color: var(--background-secondary-alt); + filter: drop-shadow(0px 0px 1px var(--color-base-60)) drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.4)) drop-shadow(0px 4px 6px rgba(0, 0, 0, 0.4)); } -.markdown-rendered.show-indentation-guide li > ul, -.markdown-rendered.show-indentation-guide li > ol { - position: relative; +.theme-dark .pdf-container.mod-themed .popupWrapper > div::after { + background-color: var(--background-secondary-alt); } -.markdown-rendered.show-indentation-guide li > ul::before, -.markdown-rendered.show-indentation-guide li > ol::before { - content: "\200B"; +.theme-dark .pdf-container.mod-themed .popupContent:empty + .popupMeta { + background-color: var(--background-secondary-alt); +} +.pdf-viewer-container { + outline: none; + overflow: auto; position: absolute; - display: block; - left: -0.85em; top: 0; + inset-inline-end: 0; bottom: 0; - border-right: var(--indentation-guide-width) solid var(--indentation-guide-color); + inset-inline-start: 0; + scroll-padding: var(--size-4-3); + z-index: 0; } -.markdown-source-view.mod-cm6 .cm-indent { - min-width: var(--list-indent); - display: inline-block; +.findbarOpen .pdf-viewer-container { + margin-top: var(--findbar-height); } -.markdown-source-view.mod-cm6 .cm-indent::before { - content: "\200B"; - display: block; - width: 1px; - border-right: var(--indentation-guide-width) solid var(--indentation-guide-color); - color: transparent; - position: absolute; - top: 0; - bottom: 0; - transform: translateX(var(--indentation-guide-editing-indent)); +.pdf-content-container { + --sidebar-width: 140px; } -.markdown-source-view.mod-cm6 .cm-active-indent::before { - border-right: var(--indentation-guide-width-active) solid var(--indentation-guide-color-active); +.pdf-content-container.sidebarMoving .pdf-sidebar-container, +.pdf-content-container.sidebarOpen .pdf-sidebar-container { + visibility: visible; } -.input-label { - display: inline-block; - width: 150px; - text-align: right; - margin-right: var(--size-4-2); +.pdf-content-container.sidebarOpen .pdf-sidebar-container { + inset-inline-start: 0; } -.input-button { - padding: 6px 14px; - margin-left: 14px; - color: var(--text-muted); - font-size: var(--font-ui-medium); - position: relative; - top: -1px; +.pdf-content-container.sidebarOpen .pdf-viewer-container { + inset-inline-start: var(--sidebar-width); + transition-property: inset-inline-start; } -@media (hover: hover) { - .input-button:hover { - color: var(--text-normal); - } +.pdf-embed .pdf-content-container.sidebarOpen .pdf-sidebar-container, +.is-mobile .pdf-content-container.sidebarOpen .pdf-sidebar-container { + inset-inline-start: 0; } -textarea, -input.metadata-input-text, -input[type='date'], -input[type='datetime-local'], -input[type='text'], -input[type='search'], -input[type='email'], -input[type='password'], -input[type='number'] { - -webkit-app-region: no-drag; - background: var(--background-modifier-form-field); - border: var(--input-border-width) solid var(--background-modifier-border); - color: var(--text-normal); - font-family: inherit; - padding: var(--size-4-1) var(--size-4-2); - font-size: var(--font-ui-small); - border-radius: var(--input-radius); - outline: none; +.pdf-embed .pdf-content-container.sidebarOpen .pdf-viewer-container, +.is-mobile .pdf-content-container.sidebarOpen .pdf-viewer-container { + inset-inline-start: 0; } -@media (hover: hover) { - textarea:hover, - input.metadata-input-text:hover, - input[type='date']:hover, - input[type='datetime-local']:hover, - input[type='text']:hover, - input[type='search']:hover, - input[type='email']:hover, - input[type='password']:hover, - input[type='number']:hover { - border-color: var(--background-modifier-border-hover); - transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out; - } +.pdf-content-container .pdf-sidebar-container, +.pdf-content-container .pdf-viewer-container { + transition-duration: 275ms; + transition-timing-function: var(--anim-motion-swing); } -textarea:active, -input.metadata-input-text:active, -input[type='date']:active, -input[type='datetime-local']:active, -input[type='text']:active, -input[type='search']:active, -input[type='email']:active, -input[type='password']:active, -input[type='number']:active, -textarea:focus, -input.metadata-input-text:focus, -input[type='date']:focus, -input[type='datetime-local']:focus, -input[type='text']:focus, -input[type='search']:focus, -input[type='email']:focus, -input[type='password']:focus, -input[type='number']:focus { - border-color: var(--background-modifier-border-focus); - transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out; +.pdf-content-container.sidebarResizing .pdf-sidebar-container, +.pdf-content-container.sidebarResizing .pdf-viewer-container { + /* Improve responsiveness and avoid visual glitches when the sidebar is resized. */ + transition-duration: 0s; } -textarea:active, -input.metadata-input-text:active, -input[type='date']:active, -input[type='datetime-local']:active, -input[type='text']:active, -input[type='search']:active, -input[type='email']:active, -input[type='password']:active, -input[type='number']:active, -textarea:focus, -input.metadata-input-text:focus, -input[type='date']:focus, -input[type='datetime-local']:focus, -input[type='text']:focus, -input[type='search']:focus, -input[type='email']:focus, -input[type='password']:focus, -input[type='number']:focus, -textarea:focus-visible, -input.metadata-input-text:focus-visible, -input[type='date']:focus-visible, -input[type='datetime-local']:focus-visible, -input[type='text']:focus-visible, -input[type='search']:focus-visible, -input[type='email']:focus-visible, -input[type='password']:focus-visible, -input[type='number']:focus-visible { - box-shadow: 0 0 0 2px var(--background-modifier-border-focus); +.pdf-content-container { + min-width: 350px; + position: absolute; + bottom: 0; + inset-inline-start: 0; + inset-inline-end: 0; + top: 0; } -textarea::placeholder, -input.metadata-input-text::placeholder, -input[type='date']::placeholder, -input[type='datetime-local']::placeholder, -input[type='text']::placeholder, -input[type='search']::placeholder, -input[type='email']::placeholder, -input[type='password']::placeholder, -input[type='number']::placeholder { - color: var(--text-faint); +.pdf-content-container.is-loading:before { + z-index: 1; } -input[type='text'], -input[type='search'], -input[type='email'], -input[type='password'], -input[type='number'] { - height: var(--input-height); +.pdf-sidebar-container { + background-color: var(--pdf-sidebar-background); + border-inline-end: var(--divider-width) solid var(--divider-color); + bottom: 0; + display: flex; + flex-direction: column; + inset-inline-start: calc(-1 * var(--sidebar-width)); + position: absolute; + top: 0; + transition-property: inset-inline-start; + visibility: hidden; + width: var(--sidebar-width); + z-index: 100; } -/* Textarea */ -textarea { - line-height: var(--line-height-tight); +.findbarOpen .pdf-sidebar-container { + top: var(--findbar-height); } -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { - display: none; - pointer-events: none; +.is-mobile .pdf-sidebar-container[data-view="1"], +.pdf-embed .pdf-sidebar-container[data-view="1"] { + inset-inline-start: -140px; + width: 140px; } -input[type=number]::-webkit-inner-spin-button { - -webkit-appearance: none; +.is-mobile .pdf-sidebar-container[data-view="2"], +.pdf-embed .pdf-sidebar-container[data-view="2"] { + inset-inline-start: -275px; + width: 275px; } -/* Date input */ -input[type='date'], -input[type='datetime-local'] { - font-variant-numeric: tabular-nums; +.pdf-sidebar-container .pdf-thumbnail-view, +.pdf-sidebar-container .pdf-outline-view { + bottom: 0; + overflow: auto; + padding: var(--size-4-2) var(--size-4-2); + position: absolute; + top: 0; + -webkit-user-select: none; + user-select: none; + width: 100%; +} +.pdf-sidebar-container .pdf-thumbnail-view { + display: flex; + flex-wrap: wrap; + gap: var(--size-4-1); + justify-content: center; + align-content: flex-start; + padding: var(--size-4-3); + width: 100%; +} +.pdf-sidebar-container .pdf-thumbnail-view a { + display: block; + cursor: var(--cursor); +} +.pdf-sidebar-container .pdf-thumbnail-view a:active, +.pdf-sidebar-container .pdf-thumbnail-view a:focus { + outline: 0; +} +.pdf-sidebar-container .thumbnail { + --thumbnail-width: 0; + --thumbnail-height: 0; position: relative; + width: var(--thumbnail-width); + height: var(--thumbnail-height); + border: var(--size-4-2) solid transparent; + border-radius: var(--radius-s); + box-sizing: content-box; } -input[type='date']::-webkit-datetime-edit-text, -input[type='datetime-local']::-webkit-datetime-edit-text { - color: var(--text-faint); +.pdf-sidebar-container .thumbnail::before { + content: " "; + position: absolute; + top: 0; + inset-inline-end: 0; + bottom: 0; + inset-inline-start: 0; + box-shadow: var(--pdf-thumbnail-shadow); } -input[type='date']::-webkit-calendar-picker-indicator, -input[type='datetime-local']::-webkit-calendar-picker-indicator { +.pdf-sidebar-container .thumbnail::after { + background-color: var(--background-secondary); + border-radius: 3px; + bottom: var(--size-4-1); + content: attr(data-page-label); + color: var(--text-muted); + display: block; + font-size: var(--font-ui-smaller); + line-height: 1; + padding: var(--size-2-1) var(--size-4-1); position: absolute; - left: var(--size-4-1); - opacity: 0.5; + inset-inline-end: var(--size-4-1); } -input[type='date']::-webkit-datetime-edit-month-field:active, -input[type='datetime-local']::-webkit-datetime-edit-month-field:active, -input[type='date']::-webkit-datetime-edit-month-field:focus, -input[type='datetime-local']::-webkit-datetime-edit-month-field:focus, -input[type='date']::-webkit-datetime-edit-day-field:active, -input[type='datetime-local']::-webkit-datetime-edit-day-field:active, -input[type='date']::-webkit-datetime-edit-day-field:focus, -input[type='datetime-local']::-webkit-datetime-edit-day-field:focus, -input[type='date']::-webkit-datetime-edit-year-field:active, -input[type='datetime-local']::-webkit-datetime-edit-year-field:active, -input[type='date']::-webkit-datetime-edit-year-field:focus, -input[type='datetime-local']::-webkit-datetime-edit-year-field:focus { - background-color: var(--text-selection); - color: var(--text-normal); - cursor: text; +.pdf-sidebar-container .thumbnail:not([data-loaded]) { + border: 1px dashed var(--background-modifier-border); + margin: calc(var(--size-4-2) - 1px); } -body:not(.is-ios):not(.is-android) input[type='date'], -body:not(.is-ios):not(.is-android) input[type='datetime-local'] { - padding-left: var(--size-4-6); +.pdf-sidebar-container .thumbnail:hover, +.pdf-sidebar-container .thumbnail.selected { + border-color: var(--background-modifier-hover); } -/* Range slider */ -input[type='range'] { - width: 100px; - -webkit-appearance: none; - background-color: var(--slider-track-background); - border-radius: var(--slider-track-height); - height: var(--slider-track-height); - padding: 0; - outline: none; +.pdf-sidebar-container img.thumbnailImage { + border: 1px solid transparent; + max-width: unset; + width: var(--thumbnail-width); + height: var(--thumbnail-height); } -input[type='range']::-webkit-slider-runnable-track { - height: 6px; - -webkit-appearance: none; +.pdf-outline-view .tree-item-self:not(.mod-collapsible) { + padding-inline-start: calc(10px + var(--size-4-2) + var(--size-2-3)); } -input[type='range']::-webkit-slider-thumb { - -webkit-appearance: none; - height: var(--slider-thumb-height); - width: var(--slider-thumb-width); - border-radius: var(--slider-thumb-radius); - cursor: default; - background: #FFF; - border: var(--slider-thumb-border-width) solid var(--slider-thumb-border-color); - position: relative; - top: var(--slider-thumb-y); - transition: all 0.1s linear; - box-shadow: 0 1px 1px 0px rgba(0, 0, 0, 0.05), 0 2px 2px 0px rgba(0, 0, 0, 0.1); +.pdf-outline-view .tree-item-self.mod-active { + color: var(--nav-item-color-active); + background-color: var(--nav-item-background-active); + font-weight: var(--nav-item-weight-active); } -input[type='range']::-webkit-slider-thumb:hover, -input[type='range']::-webkit-slider-thumb:active { - background: white; - border-color: var(--background-modifier-border-focus); - box-shadow: 0 1px 2px 0px rgba(0, 0, 0, 0.1), 0 2px 3px 0px rgba(0, 0, 0, 0.2); - transition: all 0.1s linear; +.pdf-outline-view .tree-item-flair { + white-space: nowrap; } -body:not(.is-mobile) input[type=range]:focus { - box-shadow: none; +.pdf-sidebar-content-wrapper { + position: relative; + flex-grow: 1; } -body:not(.is-mobile) input[type=range]:focus::-webkit-slider-thumb { - box-shadow: 0 1px 2px 0px rgba(0, 0, 0, 0.05), 0 2px 3px 0px rgba(0, 0, 0, 0.2); +.pdf-sidebar-content { + bottom: 0; + inset-inline-start: 0; + overflow: auto; + position: absolute; + top: 0; + width: 100%; } -body:not(.is-mobile) input[type=range]:focus-visible::-webkit-slider-thumb { - border-color: var(--background-modifier-border-focus); - box-shadow: 0 1px 2px 0px rgba(0, 0, 0, 0.05), 0 2px 3px 0px rgba(0, 0, 0, 0.2), 0 0 0px 2px var(--background-modifier-border-focus); +.pdf-sidebar-content > .hidden { + display: none; } -/* Color inputs */ -input[type="color"] { - -webkit-appearance: none; - width: calc(var(--swatch-width) + 4px); +.pdf-sidebar-resizer { background-color: transparent; - border: none; - cursor: var(--cursor); - padding: 0; -} -input[type="color"]::-webkit-color-swatch-wrapper { - padding: 2px; + bottom: 0; + cursor: col-resize; + inset-inline-end: calc(var(--divider-width-hover) * -1); + position: absolute; + top: 0; + transition: background-color 200ms ease-in-out; + width: var(--divider-width-hover); + z-index: var(--layer-cover); } -input[type="color"]::-webkit-color-swatch { - border: 0px; - box-shadow: var(--swatch-shadow); - border-radius: var(--swatch-radius); - height: var(--swatch-height); - width: var(--swatch-width); - align-self: center; +.is-mobile .pdf-sidebar-resizer, +.pdf-embed .pdf-sidebar-resizer { + display: none; } @media (hover: hover) { - input[type="color"]::-webkit-color-swatch:hover { - box-shadow: inset 0 0 0 1px rgba(var(--mono-rgb-100), 0.25), 0 0 0 3px var(--background-modifier-border-hover); + .pdf-sidebar-resizer:hover { + background-color: var(--divider-color-hover); + } + .is-translucent .pdf-sidebar-resizer:hover { + background-color: var(--divider-color-hover); } } -input[type="color"]:focus-visible::-webkit-color-swatch, -input[type="color"]:focus::-webkit-color-swatch { - box-shadow: var(--swatch-shadow), 0 0 0 3px var(--background-modifier-border-focus); +.pdf-toolbar { + align-items: stretch; + background-color: var(--background-primary); + border-bottom: 1px solid var(--background-modifier-border); + display: flex; + justify-content: space-between; + overflow: auto; + padding: var(--size-4-1) var(--size-4-3); + position: relative; +} +.hover-popover .pdf-toolbar { + display: none; +} +.pdf-page-numbers { + white-space: nowrap; + margin-inline-end: var(--size-4-1); + font-size: var(--font-ui-small); + font-variant-numeric: tabular-nums; +} +.pdf-toolbar-left, +.pdf-toolbar-center, +.pdf-toolbar-right { + display: flex; + align-items: center; + gap: var(--size-4-1); } -select.mod-hidden { +.pdf-toolbar-left.hidden, +.pdf-toolbar-center.hidden, +.pdf-toolbar-right.hidden { display: none; } -.notice-container { - z-index: var(--layer-notice); - position: fixed; - top: 22px; - right: 0; - padding: 10px; - overflow: hidden; +.pdf-toolbar-center { + position: absolute; + top: var(--size-4-1); + height: calc(100% - var(--size-4-2)); + inset-inline-start: 50%; + transform: translateX(calc(var(--direction) * -50%)); } -.notice { - background-color: var(--background-modifier-message); - border-radius: var(--radius-m); - box-shadow: 0 2px 8px var(--background-modifier-box-shadow); - color: #FAFAFA; - font-size: var(--font-ui-small); - line-height: var(--line-height-tight); - padding: 0.75em 1em 0.75em 1em; - max-width: 300px; - margin-bottom: 14px; - white-space: pre-wrap; - overflow-wrap: anywhere; - word-break: break-word; - cursor: var(--cursor); +.pdf-toolbar-spacer { + width: var(--size-4-3); } -.menu { - -webkit-app-region: no-drag; - padding: var(--size-2-3); - border: 1px solid var(--background-modifier-border-hover); +.pdf-toolbar-divider { + width: var(--border-width); + height: var(--icon-size); + background-color: var(--background-modifier-border); +} +.pdf-page-input { + width: 7ch; + text-align: right; + font-variant-numeric: tabular-nums; +} +.pdf-page-input.mod-page-loading { background-color: var(--background-secondary); - border-radius: var(--radius-m); - box-shadow: var(--shadow-s); - position: fixed; - z-index: var(--layer-menu); - user-select: none; - max-height: calc(100% - var(--header-height)); - overflow: hidden; + opacity: 0.5; } -.menu.mod-no-icon .menu-item-icon:first-child { - display: none; +.pdf-findbar { + background-color: var(--background-primary); + flex-direction: row-reverse; + font-size: var(--font-ui-small); + gap: var(--size-4-1); + line-height: 1; + padding: var(--size-2-3); + position: absolute; + inset-inline-start: 0; + inset-inline-end: 0; + top: 0; + z-index: 101; } -.menu-separator { - height: 0; - margin: var(--size-2-3) calc(var(--size-2-3) * -1); - border-bottom: 1px solid var(--background-modifier-border); +.pdf-findbar input { + min-width: 300px; } -.menu-separator:last-child, -.menu-separator:first-child { +.pdf-findbar.mod-hidden { display: none; } -.menu-separator + .menu-separator { +.pdf-findbar input[type="checkbox"] { display: none; + pointer-events: none; } -.menu-separator + .menu-item.is-label { - padding-bottom: var(--size-4-1); +.pdf-findbar label { + -webkit-user-select: none; + user-select: none; } -.menu-item { +.pdf-findbar label:hover, +.pdf-findbar input:focus-visible + label { + color: var(--toggled-btn-color); + background-color: var(--button-hover-color); +} +.pdf-findbar .pdf-toolbar-field[type="checkbox"]:checked + .pdf-toolbar-label { + background-color: var(--toggled-btn-bg-color) !important; + color: var(--toggled-btn-color); +} +.pdf-findbar .pdf-search-wrapper { display: flex; + gap: var(--size-4-1); align-items: center; - gap: var(--size-4-2); - padding: var(--size-4-1) var(--size-4-2); - cursor: var(--cursor); - font-size: var(--font-ui-small); - border-radius: var(--radius-s); - white-space: nowrap; } -.menu-item.is-disabled { - cursor: default; - color: var(--text-faint); +.pdf-findbar .mod-not-found { + --background-modifier-form-field: rgba(var(--background-modifier-error-rgb), 0.1); + --background-modifier-border-focus: rgba(var(--background-modifier-error-rgb), 0.6); } -.menu-item.is-warning.selected { - color: var(--text-error); +.pdf-findbar .mod-pending::before { + -webkit-mask-image: url("data:image/svg+xml,"); + animation: rotation 1s infinite linear; } -.menu-item.is-label { - cursor: default; - font-size: var(--font-ui-medium); - color: var(--text-muted); - white-space: pre-wrap; - overflow-wrap: anywhere; - word-break: break-word; +.is-phone .pdf-findbar { + overflow: none; } -.menu-item.selected:not(.is-label):not(.is-disabled) { - background-color: var(--background-modifier-hover); +.is-phone .pdf-findbar .pdf-toolbar-button { + height: auto; + width: auto; + padding: 6px 0; + background-color: transparent; + color: var(--text-accent); + flex-grow: 0; + flex-shrink: 0; } -.menu-item-icon { - flex: 0 1 auto; - display: flex; - color: var(--text-muted); +.is-phone .pdf-findbar .pdf-toolbar-divider, +.is-phone .pdf-findbar .pdf-findbar-settings-btn, +.is-phone .pdf-findbar .pdf-findbar-message { + display: none; } -.menu-item-icon .menu-item.is-warning.selected { - color: var(--text-error); +.is-phone .pdf-findbar input { + min-width: 0; } -.menu-item.is-disabled .menu-item-icon { - color: var(--text-faint); +.is-phone .pdf-findbar .search-input-container { + flex-grow: 1; } -.menu-item-icon .mod-submenu { - color: var(--text-faint); +.is-phone .pdf-findbar .pdf-search-wrapper { + gap: var(--size-4-2); } -.menu-item-title { - flex: 1 0 0; +@keyframes rotation { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } } -.menu.mod-tab-list .menu-item-title { - max-width: 300px; - overflow: hidden; - text-overflow: ellipsis; +.pdf-find-results-count { + color: var(--text-muted); + margin: 0 var(--size-4-2); + font-style: italic; white-space: nowrap; - vertical-align: bottom; } -.debug-textarea { - width: 100%; - height: 50vh; - max-height: 80vh; - font-family: var(--font-monospace); - tab-size: 4; - resize: none; +.pdf-find-results-count:empty { + display: none; } -.modal-container { - display: flex; - align-items: center; - justify-content: center; +.pdf-findbar-settings { + background-color: var(--background-primary); + border-radius: var(--radius-m); + border: 1px solid var(--background-modifier-border); + box-shadow: var(--shadow-s); + padding: var(--size-4-1) var(--size-4-2); position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: var(--layer-modal); -} -.modal-container.mod-dim .modal { - box-shadow: var(--shadow-l); + transform: translateX(-100%); + width: 200px; + z-index: 200; } -.modal-bg { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: var(--background-modifier-cover); +.pdf-findbar-settings .setting-item { + padding: var(--size-4-1) 0; + border: none; } -.modal { - --checkbox-size: var(--font-ui-medium); - background-color: var(--modal-background); - border-radius: var(--modal-radius); - border: var(--modal-border-width) solid var(--modal-border-color); - padding: var(--size-4-4); - position: relative; - min-height: 100px; - width: var(--dialog-width); - max-width: var(--dialog-max-width); - max-height: var(--dialog-max-height); - display: flex; - flex-direction: column; - overflow: auto; +.pdf-findbar-settings .setting-item-name { + font-size: var(--font-ui-small); } -.modal.mod-sidebar-layout { - padding: 0; - width: var(--modal-width); - height: var(--modal-height); - max-width: var(--modal-max-width); - max-height: var(--modal-max-height); - overflow: hidden; +.pdf-password-dialog { + align-items: center; display: flex; flex-direction: column; + font-size: var(--font-ui-medium); + gap: var(--size-4-1); + justify-content: center; + inset-inline-start: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); } -.modal.mod-sidebar-layout .modal-content { - display: flex; +.pdf-password-dialog .mod-small { + font-size: var(--font-ui-small); } -.modal.mod-scrollable-content { - padding: 0; - overflow: hidden; +.pdf-password-dialog input { + margin-top: var(--size-4-2); } -.modal.mod-scrollable-content .modal-title { - padding: var(--size-4-4) var(--size-4-4) 0 var(--size-4-4); +.pdf-lock-icon .svg-icon { + --icon-size: var(--icon-xl); + --icon-stroke: var(--icon-xl-stroke-width); } -.modal.mod-scrollable-content .modal-content { - padding: 0 var(--size-4-4) var(--size-4-4) var(--size-4-4); - overflow: auto; +.textLayer .mod-focused { + background-color: rgb(var(--text-highlight-bg-rgb)); + border-radius: var(--radius-s); + box-sizing: content-box; + padding: var(--size-4-1); + margin: calc(var(--size-4-1) * -1); } -.modal-sidebar { - background-color: var(--background-secondary); - flex: 1 1 var(--modal-community-sidebar-width); - min-width: var(--modal-community-sidebar-width); - padding: var(--size-4-3) 0 0 0; - display: flex; - flex-direction: column; +.textLayer .mod-focused.appended { + position: static; } -body:not(.native-scrollbars) .modal-close-button { - right: 12px; +.annotationLayer .mod-focused { + background-color: rgba(var(--text-highlight-bg-rgb), 0.1); + border-radius: var(--radius-s); + box-shadow: var(--shadow-s); + box-sizing: content-box; + margin: calc(var(--size-4-2) * -1); + border: var(--size-4-1) solid rgba(var(--text-highlight-bg-rgb), 0.8); + padding: var(--size-4-1); } -.modal-close-button { - cursor: var(--cursor); +.annotationLayer .boundingRect { + z-index: 2000; position: absolute; - top: var(--size-2-3); - right: var(--size-2-3); - font-size: 24px; - line-height: 20px; - height: 24px; - width: 24px; - padding: 0 var(--size-2-2); - border-radius: var(--radius-s); - color: var(--text-muted); + pointer-events: none; } -@media (hover: hover) { - .modal-close-button:hover { - background-color: var(--background-modifier-hover); - color: var(--text-normal); - } +.annotationLayer .boundingRect > * { + pointer-events: initial; } -.modal-close-button:before { - font-family: Inter, sans-serif; - content: '\D7'; - font-weight: 300; +.pdf-container .pdfViewer .canvasWrapper { + box-shadow: var(--pdf-shadow); } -.modal-title { - font-size: var(--font-ui-large); - margin-bottom: 0.75em; - font-weight: var(--font-semibold); - text-align: left; - line-height: var(--line-height-tight); +.pdf-container .pdfViewer .page { + --page-border: calc(var(--size-4-1) * var(--scale-factor)) solid transparent; + --page-margin: 0 auto; + --page-bg-color: transparent; + box-sizing: content-box; + flex-shrink: 0; } -.mod-sidebar-layout .modal-title { - display: none; +.pdf-container .pdfViewer .page.loadingIcon::after { + background: none; } -.modal-title:empty { - display: none; +.pdf-container .pdfViewer.removePageBorders.spread .page, +.pdf-container .pdfViewer.removePageBorders:is(.scrollHorizontal, .scrollWrapped) .page { + --spreadHorizontalWrapped-margin-LR: 0; + margin-inline: 0; + border: var(--size-4-1) solid transparent; } -.modal-content { - flex: 1 1 auto; - font-size: var(--font-ui-medium); +.pdf-container .pdfViewer.removePageBorders .page + .page { + border-top: var(--size-4-1) solid transparent; } -.modal-button-container { - margin-top: 1.5em; - display: flex; - justify-content: flex-end; - gap: var(--size-4-2); - flex-wrap: wrap; - font-size: var(--font-ui-medium); +.pdf-container .pdfViewer.removePageBorders .spread .page + .page { + border-top: none; } -.modal-button-container .mod-checkbox { - flex-grow: 1; - display: flex; - align-items: center; - gap: var(--size-4-1); +.pdf-container .pdfViewer.removePageBorders .spread .canvasWrapper { + box-shadow: var(--pdf-spread-shadow); } -.modal-button-container .mod-secondary { - margin-right: auto; +.pdf-container .pdfViewer.removePageBorders .spread + .spread { + border-top: var(--size-4-1) solid transparent; } -.modal.mod-scrollable-content > .modal-button-container { - margin-top: 0; - border-top: 1px solid var(--background-modifier-border); - padding: var(--size-4-4); +.pdf-container .textLayer { + -webkit-user-select: text; + user-select: text; + opacity: 0.2; + background-color: transparent; } -.modal-checkbox-label { - cursor: var(--cursor); - margin-left: 10px; - user-select: none; +.pdf-container .textLayer ::selection, +.markdown-source-view.mod-cm6 .pdf-container .textLayer ::selection { + background-color: hsl(var(--color-accent-hsl)); } -.message-container { - margin: var(--size-4-4) 0; +.pdf-container .textLayer br::selection, +.markdown-source-view.mod-cm6 .pdf-container .textLayer br::selection { + background-color: transparent; } -.message { - display: inline-block; - padding: 6px 12px 6px 12px; +.pdf-container .textLayer .highlight { + --highlight-bg-color: transparent; + --highlight-selected-bg-color: transparent; + --highlight-backdrop-filter: none; + --highlight-selected-backdrop-filter: none; + margin: -1px; + padding: 1px; border-radius: var(--radius-s); } -.message.mod-success { - background-color: var(--background-modifier-success); - color: var(--text-on-accent); +.pdf-container .textLayer .highlight.appended { + position: static; + display: inline-block; } -.message.mod-success a { - color: var(--text-normal); +.pdf-container .textLayer .highlight.begin { + border-radius: var(--radius-s) 0 0 var(--radius-s); } -.message.mod-info { - background-color: var(--background-modifier-info); +.pdf-container .textLayer .highlight.end { + border-radius: 0 var(--radius-s) var(--radius-s) 0; } -.message.mod-error { - background-color: var(--background-modifier-error); - color: var(--text-on-accent); +.pdf-container .textLayer .highlight.selected { + box-shadow: 0 0 0 2px hsl(var(--interactive-accent-hsl)); + background-color: hsl(var(--interactive-accent-hsl)); } -.message.mod-error a { - color: var(--text-normal); +.pdf-container .textLayer .highlight:not(.selected) { + box-shadow: 0 0 0 2px rgb(var(--color-yellow-rgb)); + background-color: rgb(var(--color-yellow-rgb)); } -.mod-warning { - color: var(--text-error); +.pdf-container .annotationLayer > section.hasPopup:not(.textAnnotation) { + pointer-events: none; } -.mod-success { - color: var(--text-success); +.pdf-container .annotationLayer :is(.linkAnnotation, .buttonWidgetAnnotation.pushButton):not(.hasBorder) > a:hover { + opacity: 1; + background-color: hsla(var(--color-accent-hsl), 0.1); + box-shadow: none; } -.mod-file-rename .rename-textarea { - overflow: hidden; - padding: var(--size-2-3) var(--size-4-2); - resize: none; - width: 100%; +.pdf-container .annotationLayer .linkAnnotation.hasBorder:hover { + background-color: hsla(var(--color-accent-hsl), 0.1); } -.modal-setting-back-button { +.popupWrapper { + --pdf-popup-width: 280px; + font-size: var(--font-ui-medium); + pointer-events: none; position: absolute; - top: var(--safe-area-inset-top); - left: 0; - padding: var(--size-4-3) var(--size-4-3); - height: var(--modal-header-height); - color: var(--text-normal); - font-weight: var(--font-semibold); -} -.modal-setting-back-button-icon { - display: flex; - align-items: center; - margin-right: 6px; + transform: translate(-50%, 0); + z-index: 10000; } -.modal-setting-nav-bar { - display: flex; - flex: 0 1 auto; - padding: var(--size-4-3); - border-bottom: 1px solid var(--background-modifier-border); +.popupWrapper > div { + margin: var(--size-4-3); + background-color: var(--background-primary); + border-radius: var(--radius-s); + filter: drop-shadow(0px 0px 1px rgba(0, 0, 0, 0.2)) drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3)) drop-shadow(0px 4px 6px rgba(0, 0, 0, 0.3)); + position: relative; } -.modal .modal-nav-action { - background-color: unset; - margin-top: var(--size-4-1); +.popupWrapper > div:after { + background: var(--background-primary); + border-start-start-radius: 2px; + content: ""; + height: var(--size-4-3); + inset-inline-start: calc(50% - 2px); position: absolute; - top: 0; - width: unset; + top: -5px; + transform: rotate(45deg); + width: var(--size-4-3); + z-index: -1; } -.modal .modal-nav-action.mod-secondary { - left: 0; +.is-phone .pdf-annotation-modal { + align-items: flex-end; } -.modal .modal-nav-action.mod-cta { - color: var(--color-accent); - font-weight: var(--font-semibold); - right: 0; +.is-phone .pdf-annotation-modal .modal { + height: auto; + max-height: 40vh; + min-height: 0; + top: unset; + padding-bottom: var(--safe-area-inset-bottom); } -.nav-header { - padding: var(--size-4-2); +.is-phone .pdf-annotation-modal .modal .modal-close-button, +.is-phone .pdf-annotation-modal .modal .modal-header { + display: none; } -.nav-header .search-input-container { - margin: 4px auto; +.is-phone .pdf-annotation-modal .modal-content { + overflow: hidden; padding: 0; } -.nav-buttons-container { - flex-wrap: wrap; - gap: var(--size-2-1); -} -.nav-buttons-container.has-separator { - border-bottom: 1px solid var(--background-modifier-border); - padding-bottom: var(--size-2-3); - margin-bottom: var(--size-4-2); +.is-phone .pdf-annotation-modal .popup { + flex-direction: column-reverse; + height: 100%; + overflow: hidden; } -body { - --pill-focus-width: calc(100% + 6px); - --pill-focus-left-adjust: -4px; +.is-phone .pdf-annotation-modal .popupContent { + height: 100%; + max-height: none; + padding-bottom: calc(var(--safe-area-inset-bottom) + var(--size-4-4)); + padding-top: 0; } -.multi-select-container { - cursor: text; - display: inline-flex; - vertical-align: top; - flex-wrap: wrap; - min-height: var(--input-height); - width: 100%; - background: var(--background-modifier-form-field); - border: var(--input-border-width) solid var(--background-modifier-border); - color: var(--text-normal); - font-size: var(--font-ui-small); - border-radius: var(--input-radius); - outline: none; - padding: var(--size-4-1); - gap: var(--size-4-1); +.is-phone .pdf-annotation-modal .popupContent:empty + .popupMeta, +.is-phone .pdf-annotation-modal .popupMeta { + --icon-size: var(--font-ui-medium); + --icon-stroke: var(--icon-m-stroke-width); + background-color: transparent; + padding: var(--size-4-2) var(--size-4-4); + border-top: none; } -.multi-select-pill { - --icon-size: var(--icon-xs); - --icon-stroke: var(--icon-xs-stroke-width); +.popup { + cursor: initial; display: flex; - align-items: center; - background-color: var(--pill-background); - border: var(--pill-border-width) solid var(--pill-border-color); - border-radius: var(--pill-radius); - color: var(--pill-color); - cursor: var(--cursor); - font-weight: var(--pill-weight); - padding: var(--pill-padding-y) 0; - line-height: 1; - max-width: 100%; - gap: var(--size-2-1); - position: relative; -} -.multi-select-pill:focus:after { - content: ''; - display: block; - position: absolute; - pointer-events: none; - border-radius: var(--pill-radius); - left: var(--pill-focus-left-adjust); - width: var(--pill-focus-width); - height: 100%; - box-shadow: 0 0 0 1px var(--background-modifier-border-focus), inset 0 0 0 1px var(--background-modifier-border-focus); + flex-direction: column; + pointer-events: auto; + -webkit-user-select: text; + user-select: text; + white-space: normal; + width: var(--pdf-popup-width); + word-wrap: break-word; } -@media (hover: hover) { - .multi-select-pill:hover { - background-color: var(--pill-background-hover); - border: var(--pill-border-width) solid var(--pill-border-color-hover); - color: var(--pill-color-hover); - text-decoration: var(--pill-decoration-hover); - } +.popupContent { + font-size: var(--font-ui-small); + line-height: var(--line-height-tight); + max-height: 200px; + overflow: auto; + padding: var(--size-4-4); + text-align: start; } -.multi-select-pill-content { - margin-left: var(--pill-padding-x); +.popupContent:empty { + display: none; } -.multi-select-pill-remove-button { - margin-right: min(var(--size-2-3),var(--pill-padding-x)); - cursor: var(--cursor); - color: var(--pill-color-remove); - border-radius: var(--radius-s); - display: flex; +.popupMeta { + --icon-size: var(--font-ui-small); + --icon-stroke: 2.5px; align-items: center; - --icon-size: var(--icon-xs); - --icon-stroke: var(--icon-xs-stroke-width); + background-color: var(--background-secondary); + border-top: 1px solid var(--background-modifier-border); + color: var(--text-muted); + display: flex; + font-size: var(--font-ui-smaller); + gap: var(--size-4-1); + justify-content: space-between; + padding: var(--size-4-1) var(--size-4-2); + border-bottom-left-radius: var(--radius-s); + border-bottom-right-radius: var(--radius-s); } -.multi-select-pill-remove-button:hover { - color: var(--pill-color-remove-hover); +.popupContent:empty + .popupMeta { + border-top: none; + background-color: var(--background-primary); + border-top-left-radius: var(--radius-s); + border-top-right-radius: var(--radius-s); } -.multi-select-input { - cursor: text; - font-family: var(--font-interface); - min-width: 1ch; - max-width: max-content; - color: var(--text-normal); - background-color: inherit; - border: none; - overflow-x: auto; - white-space: nowrap; +.popupMeta .clickable-icon { + margin-inline-end: calc(var(--size-4-1) * -1); + margin-inline-start: calc(var(--size-2-1) * -1); } -.multi-select-input::-webkit-scrollbar { - display: none; +.popupDate { + white-space: nowrap; } -.multi-select-input:before { - content: '\200B'; +.markdown-rendered video { + max-width: 100%; + outline: none; } -.multi-select-input:empty:before { - content: attr(placeholder); - color: var(--text-faint); - pointer-events: none; +.markdown-rendered blockquote { + color: var(--blockquote-color); + font-style: var(--blockquote-font-style); + background-color: var(--blockquote-background-color); + border-inline-start: var(--blockquote-border-thickness) solid var(--blockquote-border-color); + padding-top: 0; + padding-bottom: 0; + padding-inline-start: var(--size-4-6); + margin-inline-start: 0; + margin-inline-end: 0; } -@keyframes multi-select-highlight { - from { - color: var(--text-warning); - --link-color: var(--text-warning); - } +.markdown-rendered blockquote > :first-child { + margin-top: 0; } -.multi-select-duplicate { - animation: multi-select-highlight 2000ms ease-in; +.markdown-rendered blockquote > :last-child { + margin-bottom: 0; } -.popover { - background-color: var(--background-primary); - border: 1px solid var(--background-modifier-border); - box-shadow: var(--shadow-s); - border-radius: var(--radius-m); - padding: var(--size-4-5); - position: relative; - max-height: 95vh; +.cm-s-obsidian span.cm-quote { + color: var(--blockquote-color); } -.popover.hover-popover { - position: absolute; - z-index: var(--layer-popover); - max-width: 80vw; - min-height: 60px; - overflow: hidden; - width: fit-content; - padding: 0; +.cm-s-obsidian span.cm-formatting-quote { + color: var(--text-faint); } -.popover.hover-popover > * { - width: var(--popover-width); +.cm-s-obsidian .hmd-inactive-line span.cm-formatting-quote { + color: transparent; } -.popover.hover-popover .markdown-preview-view { - font-size: var(--popover-font-size); +.markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote:before, +.markdown-source-view.mod-cm6 .cm-blockquote-border:before { + content: "\200b"; + display: block; + width: 1px; + border-inline-start: var(--blockquote-border-thickness) solid var(--blockquote-border-color); + color: transparent; + position: absolute; + top: 0; + bottom: 0; + pointer-events: none; } -.popover.hover-popover > .mod-empty { - display: flex; - justify-content: center; - align-items: center; - padding: 20px; - font-size: var(--popover-font-size); - color: var(--text-muted); +.markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote { + font-style: var(--blockquote-style); + background-color: var(--blockquote-background-color); } -.popover.hover-popover > .media-embed { - min-height: 0; - line-height: 0; - border: none; +.markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote:before { + inset-inline-start: 0; } -.popover.hover-popover > .media-embed video { - max-height: 100%; - max-width: 100%; - height: auto; +.markdown-source-view.mod-cm6 .cm-blockquote-border { + display: inline-block; } -.popover.hover-popover > .image-embed img { - max-height: 100%; - max-width: 100%; - height: auto; +.callout { + --callout-color: var(--callout-default); + --callout-icon: lucide-pencil; } -.popover.hover-popover > .pdf-embed { - width: var(--popover-pdf-width); - height: var(--popover-pdf-height); - max-height: var(--popover-max-height); +@supports (color: color-mix(in srgb, white 50%, black)) { + .callout { + --bases-table-header-background: transparent; + --bases-table-header-background-hover: rgba(var(--callout-color), 0.1); + --bases-embed-border-color: color-mix(in srgb, rgb(var(--callout-color)) 25%, var(--background-primary) 50%); + --bases-table-border-color: color-mix(in srgb, rgb(var(--callout-color)) 25%, var(--background-primary) 50%); + --table-border-color: color-mix(in srgb, rgb(var(--callout-color)) 25%, var(--background-primary) 50%); + } } -.popover.hover-popover > .markdown-embed { - height: var(--popover-height); - max-height: var(--popover-max-height); - border: 0; - padding: 0; - margin: 0; +.callout[data-callout="abstract"], +.callout[data-callout="summary"], +.callout[data-callout="tldr"] { + --callout-color: var(--callout-summary); + --callout-icon: lucide-clipboard-list; } -.popover.hover-popover > .markdown-embed > .markdown-embed-content { - height: 100%; - overflow: auto; +.callout[data-callout="info"] { + --callout-color: var(--callout-info); + --callout-icon: lucide-info; } -.popover.hover-popover > .markdown-embed > .markdown-embed-content > .markdown-preview-view { - padding: var(--file-margins); +.callout[data-callout="todo"] { + --callout-color: var(--callout-todo); + --callout-icon: lucide-check-circle-2; } -.popover.hover-popover > .markdown-embed .mod-header + div > *:first-child { - margin-top: 0; +.callout[data-callout="important"] { + --callout-color: var(--callout-important); + --callout-icon: lucide-flame; } -.follow-link-popover { - box-shadow: 0 2px 8px var(--background-modifier-box-shadow); - background-color: rgba(0, 0, 0, 0.9); - border-radius: var(--radius-m); - color: #ccc; - font-size: var(--font-ui-small); - line-height: 20px; - max-width: 300px; - padding: 5px 12px; - text-align: center; - z-index: var(--layer-tooltip); - white-space: pre-wrap; - top: calc(100%); +.callout[data-callout="tip"], +.callout[data-callout="hint"] { + --callout-color: var(--callout-tip); + --callout-icon: lucide-flame; } -.follow-link-popover.mod-bottom { - top: 0; +.callout[data-callout="success"], +.callout[data-callout="check"], +.callout[data-callout="done"] { + --callout-color: var(--callout-success); + --callout-icon: lucide-check; } -@media (hover: hover) { - .follow-link-popover:hover { - background-color: #000000; - } +.callout[data-callout="question"], +.callout[data-callout="help"], +.callout[data-callout="faq"] { + --callout-color: var(--callout-question); + --callout-icon: help-circle; } -.follow-link-popover .popover-arrow { - position: absolute; - top: calc(100%); - left: 50%; - width: 0; - margin-left: -5px; - border-right: 5px solid transparent; - border-left: 5px solid transparent; - content: " "; - font-size: 0; - line-height: 0; - border-top: 5px solid rgba(0, 0, 0, 0.9); - border-bottom: 5px solid transparent; +.callout[data-callout="warning"], +.callout[data-callout="caution"], +.callout[data-callout="attention"] { + --callout-color: var(--callout-warning); + --callout-icon: lucide-alert-triangle; } -.follow-link-popover.mod-bottom .popover-arrow { - border-bottom: 5px solid rgba(0, 0, 0, 0.9); - border-top: none; - top: -5px; +.callout[data-callout="failure"], +.callout[data-callout="fail"], +.callout[data-callout="missing"] { + --callout-color: var(--callout-fail); + --callout-icon: lucide-x; } -.markdown-preview-view progress, -.markdown-rendered progress, -.markdown-source-view.is-live-preview progress { - -webkit-writing-mode: horizontal-tb; - writing-mode: horizontal-tb; - appearance: none; - box-sizing: border-box; - display: inline-block; - height: 6px; - margin-bottom: 4px; - max-width: 100%; - overflow: hidden; - border-radius: 0px; - border: 0; - vertical-align: -0.2rem; +.callout[data-callout="danger"], +.callout[data-callout="error"] { + --callout-color: var(--callout-error); + --callout-icon: lucide-zap; } -.markdown-preview-view progress[value]::-webkit-progress-bar, -.markdown-rendered progress[value]::-webkit-progress-bar, -.markdown-source-view.is-live-preview progress[value]::-webkit-progress-bar { - background-color: var(--background-secondary); - box-shadow: inset 0px 0px 0px 1px var(--background-modifier-border); - border-radius: 6px; - overflow: hidden; +.callout[data-callout="bug"] { + --callout-color: var(--callout-bug); + --callout-icon: lucide-bug; } -.markdown-preview-view progress[value]::-webkit-progress-value, -.markdown-rendered progress[value]::-webkit-progress-value, -.markdown-source-view.is-live-preview progress[value]::-webkit-progress-value { - background-color: var(--interactive-accent); - overflow: hidden; +.callout[data-callout="example"] { + --callout-color: var(--callout-example); + --callout-icon: lucide-list; } -.progress-bar { - position: absolute; - height: 100vh; - width: 100vw; - top: 0; - left: 0; - background-color: var(--background-primary); - z-index: 10000; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; +.callout[data-callout="quote"], +.callout[data-callout="cite"] { + --callout-color: var(--callout-quote); + --callout-icon: quote-glyph; } -.progress-bar-message { - margin-bottom: var(--size-4-8); - opacity: 1; - color: var(--text-muted); +.callout { + overflow: hidden; + border-style: solid; + border-color: rgba(var(--callout-color), var(--callout-border-opacity)); + border-width: var(--callout-border-width); + border-radius: var(--callout-radius); + margin: 1em 0; + mix-blend-mode: var(--callout-blend-mode); + background-color: rgba(var(--callout-color), 0.1); + padding: var(--callout-padding); } -.progress-bar-indicator { - position: relative; - height: 8px; - margin: 0 10vw; - width: 90vw; - overflow-x: hidden; - border-radius: 3px; +.callout.is-collapsible .callout-title { + cursor: var(--cursor); } -.progress-bar-line { - position: absolute; - opacity: 0.4; - background-color: var(--interactive-accent); - width: 150%; - height: 8px; +.callout-title { + padding: var(--callout-title-padding); + display: flex; + gap: var(--size-4-1); + font-size: var(--callout-title-size); + color: rgb(var(--callout-color)); + line-height: var(--line-height-tight); + align-items: flex-start; } -.progress-bar-subline { - position: absolute; - background-color: var(--interactive-accent); - height: 8px; +.callout-content { + overflow-x: auto; + padding: var(--callout-content-padding); + background-color: var(--callout-content-background); } -.progress-bar-subline.mod-increase { - animation: increase 2s infinite; +.callout-content .callout { + margin-top: 20px; } -.progress-bar-subline.mod-decrease { - animation: decrease 2s 0.5s infinite; +.callout-icon { + flex: 0 0 auto; + display: flex; + align-items: center; } -.progress-bar .progress-bar-subline { - transition: width 150ms ease-in-out; +.callout-icon .svg-icon { + color: rgb(var(--callout-color)); } -@keyframes increase { - from { - left: -5%; - width: 5%; - } - to { - left: 130%; - width: 100%; - } +.callout-icon::after { + content: "\200B"; } -@keyframes decrease { - from { - left: -80%; - width: 80%; - } - to { - left: 110%; - width: 10%; - } +.callout-title-inner { + --font-weight: var(--callout-title-weight); + font-weight: var(--font-weight); + color: var(--callout-title-color); } -.prompt { +.callout-fold { display: flex; - flex-direction: column; - border-radius: var(--radius-l); - background-color: var(--background-primary); - box-shadow: var(--shadow-l); - border: var(--prompt-border-width) solid var(--prompt-border-color); - z-index: 1; - position: absolute; - top: 80px; - width: var(--prompt-width); - max-width: var(--prompt-max-width); - max-height: var(--prompt-max-height); - overflow: hidden; + align-items: center; + padding-inline-end: var(--size-4-2); } -.prompt-input-container { - display: flex; +.callout-fold::after { + content: "\200B"; } -input.prompt-input { - width: 100%; - padding: var(--size-4-6); - background-color: var(--background-primary); - font-size: var(--font-ui-medium); - border: none; - height: 40px; - border-radius: 0; - border-bottom: 1px solid var(--background-secondary); +.callout-fold .svg-icon { + transition: transform 100ms ease-in-out; } -input.prompt-input:hover, -input.prompt-input:focus, -input.prompt-input:focus-visible { - border-bottom: 1px solid var(--background-secondary); - box-shadow: none; +.callout-fold.is-collapsed .svg-icon { + transform: rotate(calc(var(--direction) * -1 * 90deg)); } -.prompt-results { - list-style: none; +.markdown-source-view.mod-cm6 .callout { margin: 0; - padding: var(--size-4-3); - overflow-y: auto; } -.prompt-instructions { - border-top: 1px solid var(--background-secondary); - user-select: none; - font-size: var(--font-ui-smaller); - color: var(--text-muted); - padding: var(--size-4-2); - text-align: center; - display: flex; - flex-wrap: wrap; - justify-content: center; - gap: var(--size-4-3); +.markdown-source-view.mod-cm6 .callout-content .callout { + margin: 1em 0; } -.prompt-instruction { - display: inline-block; +.markdown-rendered code { + color: var(--code-normal); + font-family: var(--font-monospace); + background-color: var(--code-background); + border-radius: var(--code-radius); + font-size: var(--code-size); + padding: 0.15em 0.3em; + border: var(--code-border-width) solid var(--code-border-color); + -webkit-box-decoration-break: clone; } -.prompt-instruction-command { - font-weight: var(--bold-weight); - margin-right: var(--size-2-2); +.cm-s-obsidian span.cm-inline-code { + color: var(--code-normal); + font-size: var(--code-size); + background-color: var(--code-background); + vertical-align: baseline; + -webkit-box-decoration-break: clone; } -body:not(.native-scrollbars) ::-webkit-scrollbar { - background-color: var(--scrollbar-bg); - width: 12px; - height: 12px; - -webkit-border-radius: var(--radius-l); +.cm-s-obsidian span.cm-inline-code span.cm-inline-code.cm-hmd-indented-code { background-color: transparent; } -body:not(.native-scrollbars) ::-webkit-scrollbar-track { - background-color: transparent; +.cm-s-obsidian span.cm-inline-code span.cm-inline-code:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight) { + background-color: var(--code-background); + vertical-align: baseline; } -body:not(.native-scrollbars) ::-webkit-scrollbar-thumb { - background-color: var(--scrollbar-thumb-bg); - -webkit-border-radius: var(--radius-l); - background-clip: padding-box; - border: 2px solid transparent; - border-width: 3px 3px 3px 2px; - min-height: 45px; +.cm-s-obsidian span.cm-inline-code span.cm-inline-code.hmd-hidden-token { + font-size: 0; } -body:not(.native-scrollbars) ::-webkit-scrollbar-thumb:active { - -webkit-border-radius: var(--radius-l); +.cm-s-obsidian .cm-inline-code { + border-color: var(--code-border-color); + border-style: solid; } -body:not(.native-scrollbars) ::-webkit-scrollbar-thumb:hover, -body:not(.native-scrollbars) ::-webkit-scrollbar-thumb:active { - background-color: var(--scrollbar-active-thumb-bg); +.cm-s-obsidian .cm-inline-code:not(.cm-formatting) { + border-radius: var(--code-radius); + padding: 0.15em 0.3em; + border-width: var(--code-border-width); } -body:not(.native-scrollbars) ::-webkit-scrollbar-corner { - background: transparent; +.cm-s-obsidian .cm-inline-code.cm-formatting { + border-start-start-radius: var(--code-radius); + border-start-end-radius: 0; + border-end-start-radius: var(--code-radius); + border-end-end-radius: 0; + padding: 0.15em 0; + border-width: var(--code-border-width) 0 var(--code-border-width) var(--code-border-width); } -body:not(.native-scrollbars) * { - scrollbar-width: thin; - scrollbar-color: var(--scrollbar-thumb-bg) var(--scrollbar-bg); +.cm-s-obsidian .cm-inline-code:not(.cm-formatting) + .cm-formatting.cm-inline-code { + border-start-start-radius: 0; + border-start-end-radius: var(--code-radius); + border-end-start-radius: 0; + border-end-end-radius: var(--code-radius); + padding-inline-end: 0; + border-width: var(--code-border-width) var(--code-border-width) var(--code-border-width) 0; } -/* Scroll indicator for sidebar containers -body:not(.is-translucent):not(.is-mobile) .workspace-tabs { - .item-list, - .nav-files-container, - .search-result-container, - .tag-container, - .outgoing-link-pane, - .backlink-pane { - background: - linear-gradient( - var(--background-secondary) 10%, - rgba(0, 0, 0, 0) - ) - center top, - linear-gradient( - var(--background-modifier-border) 100%, - rgba(0, 0, 0, 0) - ) - center top; - background-repeat: no-repeat; - background-size: 100% 40px, 91% 1px; - background-attachment: local, scroll; - } +.cm-s-obsidian .cm-inline-code.cm-formatting ~ .cm-inline-code:not(.cm-formatting) { + border-radius: 0; + padding: 0.15em 0; + border-left: none; + border-right: none; } - */ -.suggestion-container { +.markdown-rendered pre { + position: relative; + padding: var(--size-4-3) var(--size-4-4); + min-height: 38px; + background-color: var(--code-background); + border-radius: var(--code-radius); + white-space: var(--code-white-space); + border: var(--code-border-width) solid var(--code-border-color); + overflow-x: auto; +} +.markdown-rendered pre code { + border: none; + padding: 0; + background-color: transparent; +} +.markdown-rendered li > pre { + margin: 0; +} +.markdown-rendered pre:not(:hover) > button.copy-code-button { + display: none; +} +.markdown-rendered button.copy-code-button { + margin: 6px; + padding: 6px 8px; + height: auto; + background-color: transparent; + box-shadow: none; + color: var(--text-muted); + font-size: var(--font-ui-smaller); + font-family: var(--font-interface); position: absolute; - overflow: hidden; - display: flex; - flex-direction: column; - background-color: var(--background-primary); - max-width: 500px; - max-height: 300px; - border-radius: var(--radius-m); - border: 1px solid var(--background-modifier-border); - box-shadow: var(--shadow-s); - z-index: var(--layer-notice); + top: 0; + inset-inline-end: 0; } -.is-mobile .suggestion-container { - max-width: calc(100vw - 20px); - max-height: 240px; +@media (hover: hover) { + .markdown-rendered button.copy-code-button:hover { + background-color: var(--background-modifier-hover); + } } -.suggestion { - overflow-y: auto; - padding: var(--size-2-3); +.theme-dark .mermaid > svg { + filter: invert(100%) hue-rotate(180deg) saturate(1.25); } -.suggestion-item, -.suggestion-empty { - font-size: var(--font-ui-medium); - margin-bottom: 1px; +.markdown-source-view.mod-cm6 .cm-hmd-codeblock { + --indentation-guide-editing-indent: 0; } -.suggestion-empty { - color: var(--text-muted); - padding: var(--size-4-2); - padding-top: var(--size-4-3); - text-align: center; +.markdown-source-view.mod-cm6 .cm-preview-code-block pre { + margin: 0; } -.suggestion-item { +.markdown-source-view.mod-cm6 .code-block-flair { + position: absolute; + right: 6px; + top: 6px; + z-index: 1; + display: inline-block; + padding: var(--size-4-1) var(--size-4-2); + border-radius: var(--code-radius); + font-family: var(--font-interface); + font-size: var(--font-ui-smaller); + color: var(--text-muted); cursor: var(--cursor); - padding: var(--size-2-3) var(--size-4-3); - padding-left: 12px; - white-space: pre-wrap; - border-radius: var(--radius-s); } -.suggestion-item.is-selected { - background-color: var(--background-modifier-hover); +@media (hover: hover) { + .markdown-source-view.mod-cm6 .code-block-flair:hover { + background-color: var(--background-modifier-hover); + } } -.suggestion-item.mod-downranked { - color: var(--text-muted); +.markdown-source-view.mod-cm6 .cm-line.HyperMD-codeblock { + color: var(--code-normal); } -.suggestion-item.mod-complex { - align-items: baseline; - display: flex; - justify-content: space-between; +.markdown-source-view.mod-cm6 .cm-line.HyperMD-codeblock:not(.HyperMD-list-line) { + padding-inline-start: var(--size-4-4); } -.suggestion-item.mod-complex .suggestion-title { - overflow-wrap: break-word; +.markdown-source-view.mod-cm6 .cm-line.HyperMD-codeblock .cm-formatting.cm-formatting-list { + font-family: var(--font-text); + font-size: var(--font-text-size); } -.suggestion-item.mod-complex .suggestion-content { - display: flex; - flex-direction: column; - overflow: hidden; - text-overflow: ellipsis; - margin-right: auto; +.cm-s-obsidian .HyperMD-codeblock { + font-family: var(--font-monospace); + font-size: var(--code-size); + direction: ltr; } -.suggestion-item.mod-complex .suggestion-prefix:after { - content: ': '; +.cm-s-obsidian .HyperMD-codeblock-begin, +.cm-s-obsidian .HyperMD-codeblock-end { + color: var(--code-normal); } -.suggestion-item.mod-complex .suggestion-highlight { +.cm-s-obsidian .HyperMD-codeblock span.cm-inline-code { + background-color: inherit; + border: inherit; + padding: inherit; + font-size: inherit; +} +.cm-s-obsidian div.HyperMD-codeblock-bg { + left: 0; + right: 0; + background-color: var(--code-background); + border-width: 0px var(--code-border-width) 0px var(--code-border-width); + border-color: var(--code-border-color); + border-style: solid; +} +.cm-s-obsidian div.HyperMD-codeblock-begin-bg { + border-top-left-radius: var(--code-radius); + border-top-right-radius: var(--code-radius); + border-width: var(--code-border-width) var(--code-border-width) 0px var(--code-border-width); +} +.cm-s-obsidian div.HyperMD-codeblock-end-bg { + border-bottom-left-radius: var(--code-radius); + border-bottom-right-radius: var(--code-radius); + border-width: 0 var(--code-border-width) var(--code-border-width) var(--code-border-width); +} +.cm-s-obsidian div.HyperMD-codeblock-begin-bg, +.cm-s-obsidian div.HyperMD-codeblock-end-bg { + background-color: var(--code-background); + border-color: var(--code-border-color); + border-style: solid; +} +code[class*="language-"] { + color: var(--code-normal); + background: none; + word-wrap: break-word; + white-space: pre-wrap; + word-break: normal; + direction: ltr; + font-family: var(--font-monospace); + text-align: left; + word-spacing: normal; + line-height: var(--line-height-normal); + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} +@media print { + code[class*="language-"] { + text-shadow: none; + } +} +.token.important, +.token.bold { font-weight: bold; } -.suggestion-item.mod-complex .suggestion-note { - font-size: 0.8em; - color: var(--text-muted); - width: 100%; - flex-basis: 100%; - overflow-wrap: break-word; +.token.italic { + font-style: italic; } -.suggestion-item.mod-complex .suggestion-icon, -.suggestion-item.mod-complex .suggestion-aux { - display: flex; - align-items: center; - align-self: center; - flex-shrink: 0; +.token.entity { + cursor: help; } -.suggestion-item.mod-complex .suggestion-hotkey { - font-size: var(--font-ui-smaller); - font-family: var(--font-interface); - padding: 2px 6px; +/* Syntax highlighting */ +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: var(--code-comment); } -.suggestion-item.mod-complex .suggestion-hotkey:not(:last-child) { - margin-left: 10px; +.token.namespace { + opacity: 0.7; } -.suggestion-item.mod-complex .suggestion-flair { - color: var(--text-muted); - opacity: var(--icon-opacity); - display: flex; - align-items: center; +.token.tag, +.token.constant, +.token.symbol, +.token.deleted { + color: var(--code-tag); } -.suggestion-item.mod-complex .suggestion-flair:not(:last-child) { - margin-left: 6px; +.token.punctuation { + color: var(--code-punctuation); } -.suggestion-item.mod-complex .suggestion-icon .suggestion-flair { - margin: 0 var(--size-4-3) 0 var(--size-4-1); +.token.boolean, +.token.number { + color: var(--code-value); } -.suggestion-item.mod-complex .suggestion-aux .suggestion-flair { - margin: 0 var(--size-4-1) 0 var(--size-4-3); +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.inserted { + color: var(--code-string); } -.suggestion-highlight { - font-weight: bold; +.token.operator { + color: var(--code-operator); } -.suggestion-bg { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: var(--background-modifier-cover); - z-index: var(--layer-popover); +.token.entity, +.token.parameter, +.token.property, +.token.url, +.language-css .token.string, +.style .token.string, +.token.variable { + color: var(--code-property); } -.horizontal-tab-header { - display: flex; +.token.atrule, +.token.attr-value, +.token.builtin, +.token.function, +.token.class-name, +.token.property-access { + color: var(--code-function); } -.horizontal-tab-nav-item, -.vertical-tab-nav-item { - padding: var(--size-4-1) var(--size-4-2); - user-select: none; - cursor: var(--cursor); - font-size: calc(var(--font-ui-small) + 1px); - border-radius: var(--radius-s); +.token.keyword { + color: var(--code-keyword); } -.horizontal-tab-nav-item.is-active, -.vertical-tab-nav-item.is-active { - background-color: var(--interactive-accent); - color: var(--text-on-accent); +.token.regex, +.token.important { + color: var(--code-important); } -@media (hover: hover) { - .horizontal-tab-nav-item.is-active:hover, - .vertical-tab-nav-item.is-active:hover { - background-color: var(--interactive-accent); - } +.cm-inline-code, +.cm-math { + color: var(--code-normal); } -@media (hover: hover) { - .horizontal-tab-nav-item:hover, - .vertical-tab-nav-item:hover { - background-color: var(--background-modifier-hover); - } +.cm-comment, +.cm-meta { + color: var(--code-comment); } -.vertical-tab-nav-item { - margin-bottom: var(--size-2-1); +.cm-tag { + color: var(--code-tag); } -.vertical-tab-nav-item-chevron { - display: none; +.cm-punctuation, +.cm-bracket, +.cm-hr { + color: var(--code-punctuation); } -.horizontal-tab-content, -.vertical-tab-content { - background-color: var(--background-primary); - padding-left: var(--size-4-12); - padding-right: var(--size-4-12); +.cm-number { + color: var(--code-value); } -.vertical-tabs-container { - display: flex; +.cm-qualifier, +.cm-string, +.cm-string-2 { + color: var(--code-string); } -.vertical-tab-header { - padding: var(--size-4-3); - background-color: var(--background-secondary); +.cm-operator { + color: var(--code-operator); +} +.cm-link, +.cm-variable, +.cm-variable-2, +.cm-variable-3 { + color: var(--code-property); } -.vertical-tab-header-group-items { - display: flex; - flex-direction: column; +.cm-builtin, +.cm-property, +.cm-attribute, +.cm-type { + color: var(--code-function); } -.vertical-tab-header-group-title { - font-size: var(--font-ui-smaller); - color: var(--text-faint); - font-weight: var(--font-semibold); - padding: var(--size-4-2); - user-select: none; +.cm-keyword { + color: var(--code-keyword); } -.vertical-tab-header-group { - padding: var(--size-4-3) 0; +.cm-editor.cm-focused .cm-matchingBracket { + background-color: var(--code-bracket-background); + box-shadow: inset 0 0 0 1px var(--background-modifier-hover); } -.vertical-tab-content-container { - overflow: hidden; - flex-grow: 1; +.cm-editor.cm-focused .cm-matchingBracket .punctuation { + color: var(--text-normal); } -.vertical-tab-content { - overflow-y: auto; +.markdown-preview-view .markdown-embed .markdown-preview-view { + --file-folding-offset: 0px; height: 100%; - padding-top: var(--size-4-8); - padding-bottom: var(--size-4-16); + padding: 0; } -.vertical-tab-content h2 { - font-size: var(--font-ui-medium); - font-weight: var(--font-semibold); +.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h1, +.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h2, +.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h3, +.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h4, +.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h5, +.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h6 { + margin-top: 0; } -.checkbox-container { - -webkit-app-region: no-drag; - cursor: var(--cursor); - background-color: var(--background-modifier-border-hover); - border-radius: var(--toggle-radius); - display: inline-block; - flex-shrink: 0; - height: calc(var(--toggle-thumb-height) + var(--toggle-border-width) * 2); +.pdf-embed, +.markdown-source-view .pdf-embed, +.markdown-source-view.mod-cm6 .cm-content > .pdf-embed, +.internal-embed.pdf-embed:not(.image-embed) { + width: 100%; + height: 800px; + display: flex; + flex-direction: column; +} +.pdf-embed { + overflow: hidden; position: relative; - user-select: none; - width: var(--toggle-width); - box-shadow: inset 0 4px 10px rgba(0, 0, 0, 0.07), inset 0 0 1px rgba(0, 0, 0, 0.21); - transition: box-shadow 0.15s ease-in-out, outline 0.15s ease-in-out, border 0.15s ease-in-out, opacity 0.15s ease-in-out; - outline: 0 solid var(--background-modifier-border-focus); } -.checkbox-container input[type='checkbox'] { - position: absolute; - opacity: 0; - left: 0; +.pdf-embed:not(.canvas-node-content) { + border: var(--border-width) solid var(--background-modifier-border); + border-radius: var(--radius-s); } -.checkbox-container:focus-within { - outline: var(--toggle-border-width) solid var(--background-modifier-border-focus); +.pdf-embed:not(.canvas-node-content) .edit-block-button + .pdf-toolbar { + padding-inline-end: var(--size-4-9); +} +.markdown-source-view.mod-cm6 .pdf-embed .edit-block-button { + background-color: var(--background-primary); + opacity: 1; + top: 6px; + z-index: 1; } @media (hover: hover) { - .checkbox-container:hover { - box-shadow: inset 0 6px 20px rgba(0, 0, 0, 0.14), inset 0 0 1px rgba(0, 0, 0, 0.28); + .markdown-source-view.mod-cm6 .pdf-embed .edit-block-button:hover { + color: var(--icon-color-hover); + background-color: var(--background-modifier-hover); } } -.checkbox-container.is-enabled { - background-color: var(--interactive-accent); -} -.checkbox-container.is-enabled:after { - transform: translate3d(calc(var(--toggle-width) - var(--toggle-thumb-width) - var(--toggle-border-width)), 0, 0); -} -.checkbox-container.is-enabled:active:after { - left: -4px; +@media print { + .pdf-embed:not(.canvas-node-content) { + align-items: center; + border: none; + justify-content: center; + max-height: 80vh; + } + .pdf-embed:not(.canvas-node-content) .pdf-container, + .pdf-embed:not(.canvas-node-content) .pdf-toolbar { + display: none; + } + .pdf-embed:not(.canvas-node-content) .canvasWrapper { + border-radius: var(--radius-s); + border: 1px solid var(--background-modifier-border); + max-height: 100%; + overflow: hidden; + width: fit-content; + } + .pdf-embed:not(.canvas-node-content) canvas { + height: auto; + width: 100%; + } } -.checkbox-container:before { - content: ''; - display: block; - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - opacity: 0; +.markdown-embed, +.file-embed { + position: relative; } -.checkbox-container:after { - pointer-events: none; - content: ''; - display: block; +.markdown-embed-link, +.file-embed-link { position: absolute; - background-color: var(--toggle-thumb-color); - width: var(--toggle-thumb-width); - height: var(--toggle-thumb-height); - margin: var(--toggle-border-width) 0 0 0; - border-radius: var(--toggle-thumb-radius); - transition: transform 0.15s ease-in-out, width 0.1s ease-in-out, left 0.1s ease-in-out; - left: 0; - transform: translate3d(var(--toggle-border-width), 0, 0); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15); + top: 4px; + inset-inline-end: 4px; + color: var(--icon-color); + opacity: var(--icon-opacity); + cursor: var(--cursor-link); + padding: var(--size-2-2); + border-radius: var(--radius-s); + display: flex; + align-items: center; + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); } -.checkbox-container:active:after { - width: calc(var(--toggle-thumb-width) + var(--toggle-border-width)); +@media (hover: hover) { + .markdown-embed-link:hover, + .file-embed-link:hover { + color: var(--icon-color-hover); + opacity: var(--icon-opacity-hover); + background: var(--background-modifier-hover); + } } -.checkbox-container.mod-small { - width: var(--toggle-s-width); - height: calc(var(--toggle-s-thumb-height) + var(--toggle-s-border-width) * 2); +.file-embed-title { + display: flex; + align-items: center; + justify-content: center; + gap: var(--size-4-2); } -.checkbox-container.mod-small:focus-within { - outline: var(--toggle-s-border-width) solid var(--background-modifier-border-focus); +.file-embed-icon { + color: var(--text-muted); + display: flex; } -.checkbox-container.mod-small:after { - width: var(--toggle-s-thumb-width); - height: var(--toggle-s-thumb-height); - margin: var(--toggle-s-border-width) 0 0 0; - transform: translate3d(var(--toggle-s-border-width), 0, 0); +.file-embed { + display: flex; + justify-content: center; + border-radius: var(--radius-m); + background-color: var(--background-primary-alt); } -.checkbox-container.mod-small.is-enabled:after { - transform: translate3d(calc(var(--toggle-s-width) - var(--toggle-s-thumb-width) - var(--toggle-s-border-width)), 0, 0); +.file-embed.mod-generic, +.file-embed.mod-empty { + cursor: var(--cursor-link); + padding: var(--size-4-2); + color: var(--text-muted); + text-align: center; + font-size: var(--font-smaller); } -.checkbox-container.mod-small:active:after { - width: calc(var(--toggle-s-thumb-width) + var(--toggle-s-border-width)); +@media (hover: hover) { + .file-embed.mod-generic:hover, + .file-embed.mod-empty:hover { + color: var(--text-normal); + background-color: var(--background-secondary); + } } -/* Add this attribute to the element that needs a tooltip */ -.tooltip { - animation: pop-down 200ms forwards ease-in-out; - box-shadow: 0 2px 8px var(--background-modifier-box-shadow); - background-color: var(--background-modifier-message); - border-radius: var(--radius-s); - color: #FAFAFA; - font-size: var(--font-ui-smaller); - font-weight: var(--font-medium); - left: 50%; - line-height: var(--line-height-tight); - max-width: 300px; - padding: 4px 8px; - position: fixed; +.file-embed.mod-empty-attachment { + padding: var(--size-4-2); + color: var(--text-muted); text-align: center; - transform: translateX(-50%); - z-index: var(--layer-tooltip); - pointer-events: none; - white-space: pre-wrap; - word-break: normal; - overflow-wrap: anywhere; + font-size: var(--font-smaller); } -.tooltip.mod-right { - animation: pop-right 200ms forwards ease-in-out; - transform: translateY(-50%); +.markdown-embed-content { + height: 100%; } -.tooltip.mod-left { - animation: pop-right 200ms forwards ease-in-out; - transform: translateY(-50%); +.embed-title { + align-items: center; + display: flex; + gap: var(--size-4-1); + font-size: var(--font-text-size); + font-weight: calc(var(--font-weight) + var(--bold-modifier)); + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + padding: 0 0 var(--size-4-2) 0; } -.tooltip.mod-error { - width: 200px; - background-color: var(--background-modifier-error); - color: var(--text-on-accent); +.markdown-embed { + font-style: var(--embed-font-style); + background-color: var(--embed-background); + border-top: var(--embed-border-top); + border-inline-end: var(--embed-border-end, var(--embed-border-right)); + border-bottom: var(--embed-border-bottom); + border-inline-start: var(--embed-border-start, var(--embed-border-left)); + margin: 0; } -.tooltip.mod-wide { - max-width: 450px; - width: 400px; +.markdown-embed .markdown-preview-view { + padding: 0; +} +.internal-embed:not(.image-embed) { + display: block; +} +.internal-embed img:not([width]), +.internal-embed audio, +.internal-embed video { + max-width: 100%; } -/* Triangle hack to make tooltip look like a speech bubble */ -.tooltip .tooltip-arrow { - position: absolute; - top: -5px; - left: 50%; - width: 0; - margin-left: -5px; - border-bottom: 5px solid var(--background-modifier-message); - border-right: 5px solid transparent; - border-left: 5px solid transparent; - content: " "; - font-size: 0; - line-height: 0; +.internal-embed.query-embed .edit-block-button { + opacity: 1; } -.tooltip.mod-right .tooltip-arrow { - top: calc(50% - 5px); - left: -5px; - border-right: 5px solid var(--background-modifier-message); - border-top: 5px solid transparent; - border-bottom: 5px solid transparent; +.inline-embed > .markdown-embed-title { + padding: var(--embed-padding); } -.tooltip.mod-left .tooltip-arrow { - top: calc(50% - 5px); - left: calc(100% + 5px); - border-left: 5px solid var(--background-modifier-message); - border-top: 5px solid transparent; - border-bottom: 5px solid transparent; +.inline-embed > .markdown-embed-content { + height: fit-content; + max-height: var(--embed-max-height); + overflow: auto; } -.tooltip.mod-top .tooltip-arrow { - top: calc(100%); - border-top: 5px solid var(--background-modifier-message); - border-bottom: 5px solid transparent; +.inline-embed > .markdown-embed-content > .markdown-source-view, +.inline-embed > .markdown-embed-content > .markdown-preview-view { + padding: var(--embed-padding); } -.tooltip.mod-error .tooltip-arrow { - border-bottom-color: var(--background-modifier-error); +.inline-embed .markdown-source-view.mod-cm6 .cm-editor { + min-height: unset; } -.tooltip.mod-error.mod-right .tooltip-arrow { - border-right-color: var(--background-modifier-error); - border-bottom: 5px solid transparent; +.embed-iframe { + width: 100%; + height: 100%; } -.tooltip.mod-error.mod-left .tooltip-arrow { - border-left-color: var(--background-modifier-error); - border-bottom: 5px solid transparent; +iframe.external-embed { + width: 600px; + max-width: 100%; + height: 350px; } -[aria-label] .svg-icon { - pointer-events: none; +.markdown-source-view.mod-cm6 .internal-embed { + white-space: normal; } -@keyframes pop-down { - 0% { - opacity: 0; - transform: translateX(-50%) scale(1); - } - 20% { - opacity: 0.7; - transform: translateX(-50%) scale(1.02); - } - 40% { - opacity: 1; - transform: translateX(-50%) scale(1.05); - } - 100% { - opacity: 1; - transform: translateX(-50%) scale(1); - } +.markdown-source-view.mod-cm6 .cm-embed-block { + position: relative; + white-space: normal; + overflow-wrap: normal; + word-break: normal; } -@keyframes pop-right { - 0% { - opacity: 0; - transform: translateY(-50%) scale(1); - } - 20% { - opacity: 0.7; - transform: translateY(-50%) scale(1.02); +@media (hover: hover) { + .markdown-source-view.mod-cm6 .cm-embed-block:not(.cm-table-widget, .cm-lang-base):hover { + box-shadow: var(--embed-block-shadow-hover); + border-radius: var(--radius-s); + overflow: hidden; + cursor: text; } - 40% { + .markdown-source-view.mod-cm6 .cm-embed-block:not(.cm-table-widget, .cm-lang-base):hover .edit-block-button { opacity: 1; - transform: translateY(-50%) scale(1.05); } - 100% { - opacity: 1; - transform: translateY(-50%) scale(1); + .markdown-source-view.mod-cm6 .cm-embed-block:not(.cm-table-widget, .cm-lang-base):hover .edit-block-button:hover { + background-color: var(--background-modifier-hover); } } -.tree-item-self { - align-items: baseline; - display: flex; - border-radius: var(--radius-s); - color: var(--nav-item-color); - font-size: var(--nav-item-size); - line-height: var(--line-height-tight); - font-weight: var(--nav-item-weight); - margin-bottom: var(--size-2-1); - padding: var(--nav-item-padding); - position: relative; +.markdown-source-view.mod-cm6 .cm-embed-block > .mermaid { + overflow-x: auto; } -.tree-item-self:before { - content: '\200B'; +.markdown-source-view.mod-inside-iframe > .cm-editor > .cm-scroller { + flex-direction: column; + padding: 0 var(--size-4-4); } -.tree-item-self.mod-collapsible { - padding: var(--nav-item-parent-padding); +.markdown-source-view.mod-inside-iframe > .cm-editor > .cm-scroller::before, +.markdown-source-view.mod-inside-iframe > .cm-editor > .cm-scroller::after { + content: " "; + display: block; + min-height: min(calc(10vh - 3px), var(--size-4-4)); + max-height: var(--size-4-4); + flex: 1 1 0; } -.tree-item-self.is-being-dragged-over { - border-radius: var(--radius-s); - color: var(--nav-item-color-highlighted); - background: hsla(var(--interactive-accent-hsl), 0.1); +.markdown-source-view.mod-inside-iframe > .cm-editor > .cm-scroller > .cm-sizer { + min-height: unset; + flex: 1 0 0; } -.tree-item-self.is-being-dragged-over .collapse-icon { - color: var(--nav-item-color-highlighted); +.footnote-link { + text-decoration: none; } -.tree-item-self.is-being-renamed .tree-item-inner { +.footnotes { + font-size: var(--footnote-size); +} +.footnote-ref { + vertical-align: super; +} +.footnote-backref { + display: inline-block; + margin-inline-start: var(--size-4-1); + color: var(--text-faint); + text-decoration: none; +} +@media (hover: hover) { + .footnote-backref:hover { + color: var(--text-accent); + text-decoration: none; + } +} +.cm-s-obsidian .cm-line.HyperMD-footnote { + font-size: var(--footnote-size); +} +.cm-s-obsidian .cm-line.HyperMD-footnote span.cm-hmd-footnote { cursor: text; + display: inline-block; + font-size: var(--font-smallest); + position: relative; + top: -0.3em; + color: var(--text-muted); } -.tree-item-self.is-clickable { - cursor: var(--cursor); +.cm-s-obsidian .cm-line.HyperMD-footnote span.cm-hmd-footnote.cm-formatting { + color: var(--text-faint); +} +.cm-s-obsidian .cm-line.HyperMD-footnote span.cm-hmd-footnote:hover { + text-decoration: none; +} +.cm-s-obsidian .cm-line.HyperMD-footnote span.cm-hmd-footnote .cm-underline { + color: var(--text-muted); + text-decoration: none; } @media (hover: hover) { - body:not(.is-grabbing) .tree-item-self.is-clickable:hover { - color: var(--nav-item-color-hover); - background-color: var(--nav-item-background-hover); - font-weight: var(--nav-item-weight-hover); + .cm-s-obsidian .cm-line.HyperMD-footnote span.cm-hmd-footnote .cm-underline:hover { + cursor: text; + color: var(--text-muted); + text-decoration: none; } } -body:not(.is-grabbing) .tree-item-self.is-active:hover, -.tree-item-self.is-active { - color: var(--nav-item-color-active); - background-color: var(--nav-item-background-active); - font-weight: var(--nav-item-weight-active); +.cm-s-obsidian .cm-line.HyperMD-footnote .cm-hmd-footnote-url-title { + color: var(--text-muted); } -body:not(.is-grabbing) .tree-item-self.is-selected:hover, -.tree-item-self.is-selected { +.markdown-rendered .frontmatter.mod-failed { + position: relative; +} +.markdown-rendered .frontmatter.mod-failed .mod-error { + color: var(--text-error); + font-size: var(--font-smaller); +} +.markdown-rendered .frontmatter.mod-failed:after { + content: ''; + position: absolute; + top: 0; + inset-inline-end: 0; + width: 100%; + height: 100%; + background-color: var(--background-modifier-error); + opacity: 0.3; + mix-blend-mode: var(--highlight-mix-blend-mode); +} +.metadata-container { + --input-height: var(--metadata-input-height); + border-radius: var(--metadata-border-radius); + background-color: var(--metadata-background); + border-color: var(--metadata-border-color); + border-style: solid; + border-width: var(--metadata-border-width); + padding: var(--metadata-padding); + color: var(--text-muted); + position: relative; + max-width: var(--metadata-max-width); + margin-block-end: 2rem; +} +.markdown-source-view .metadata-container, +.markdown-preview-view .metadata-container { + transform: translateX(calc(var(--size-4-1) * -1 * var(--direction))); +} +.is-mobile .metadata-container { + transform: none; +} +.metadata-container .metadata-show-source-button, +.metadata-container .metadata-add-button { + padding-inline-start: var(--size-2-3); + margin-top: 0.5em; + font-size: var(--metadata-label-font-size); + font-family: var(--metadata-label-font); +} +.metadata-container.is-collapsed .metadata-property { + display: none; +} +.metadata-container:focus-within .metadata-property.is-selected { color: var(--nav-item-color-selected); background-color: var(--nav-item-background-selected); } -body:not(.is-grabbing) .tree-item-self.is-being-dragged:hover, -.tree-item-self.is-being-dragged { - color: var(--text-on-accent); - background-color: var(--interactive-accent); +.metadata-properties { + display: flex; + flex-direction: column; + gap: var(--metadata-gap); } -body:not(.is-grabbing) .tree-item-self.is-being-dragged:hover .tree-item-icon, -.tree-item-self.is-being-dragged .tree-item-icon { - color: var(--text-on-accent); +.metadata-properties .metadata-input-longtext { + -webkit-box-orient: vertical; + -webkit-line-clamp: var(--metadata-input-longtext-lines); +} +.metadata-properties .metadata-input-longtext:not(:empty) { + display: -webkit-box; +} +.metadata-properties .metadata-input-longtext:focus { + -webkit-line-clamp: unset; +} +.metadata-properties-heading { + display: inline-block; + padding: var(--size-4-1); + margin-bottom: var(--size-4-2); + position: relative; + line-height: 1.2; +} +.is-mobile .metadata-properties-heading { + padding: var(--size-4-1) 0; +} +.metadata-properties-heading:before { + content: ''; + border-radius: var(--metadata-property-radius); + position: absolute; + display: inline-block; + left: 0; + right: 0; + top: 0; + bottom: 0; } -body:not(.is-phone) .workspace-leaf.mod-active .tree-item-self.has-focus { - border-radius: var(--radius-s); +.metadata-properties-heading:focus:before { box-shadow: 0 0 0 2px var(--background-modifier-border-focus); } -body:not(.is-phone) .workspace-leaf.mod-active .tree-item-self.has-focus:focus-within { - box-shadow: 0 0 0 2px var(--interactive-accent); -} -.tree-item-self .tree-item-icon { +.metadata-properties-heading .collapse-indicator { position: absolute; - margin-left: calc(-1 * var(--size-4-5)); - width: var(--size-4-4); - display: flex; - align-items: center; - justify-content: center; - opacity: var(--icon-opacity); - color: var(--icon-color); - flex: 0 0 auto; + inset-inline-start: -22px; + padding: 0 6px; } -.tree-item-self .tree-item-icon:before { - content: "\200b"; +.metadata-properties-title { + user-select: none; + font-size: max(var(--font-ui-small), 1em); + color: var(--text-normal); + font-weight: var(--font-medium); + font-family: var(--font-interface); } -.tree-item-self .tree-item-icon .svg-icon:not(.right-triangle) { - --icon-size: var(--icon-xs); - --icon-stroke: var(--icon-s-stroke-width); +.metadata-error-container { + border-radius: var(--callout-radius); + padding: var(--size-4-1) var(--size-4-2); + background-color: rgba(var(--callout-error), 0.1); } -.tree-item-flair-outer { - padding-left: var(--size-4-1); +.metadata-error-title { + color: var(--text-error); + font-size: max(var(--font-ui-small), 1em); + font-weight: var(--font-medium); +} +.metadata-error-cta { + cursor: var(--cursor); + color: var(--text-accent); + font-size: var(--font-ui-small); + font-weight: var(--font-medium); margin-left: auto; - display: flex; - flex-shrink: 0; - align-items: center; } -.tree-item-flair { - font-size: var(--font-ui-smaller); - color: var(--text-faint); - line-height: 1; - border-radius: var(--radius-s); +.metadata-error-cta.mobile-tap, +.metadata-error-cta:hover { + color: var(--text-accent-hover); } -@media (hover: hover) { - .tree-item-self:hover .tree-item-flair { - color: var(--text-muted); - } +input[type=checkbox].metadata-input-checkbox { + margin: var(--input-padding); } -.tree-item-inner { - overflow: hidden; +.metadata-input-text { + background-color: transparent; + width: 100%; + min-height: var(--input-height); + border-width: 0px; + resize: none; + overflow-y: hidden; } -.tree-item-inner-text { - overflow: hidden; - text-overflow: ellipsis; +.metadata-input-text::-webkit-date-and-time-value { + text-align: start; } -.tree-item-inner-subtext { +.metadata-input-text.mod-date { + padding-inline-end: 0; + width: auto; +} +.is-mobile.is-ios .metadata-input-text.mod-datetime.is-empty::before, +.is-mobile.is-ios .metadata-input-text.mod-date.is-empty::before { + content: attr(placeholder); color: var(--text-faint); - font-size: 85%; } -.tree-item-children { - padding-left: var(--nav-item-children-padding-left); - margin-left: var(--nav-item-children-margin-left); - margin-bottom: 1px; - border-left: var(--nav-indentation-guide-width) solid var(--nav-indentation-guide-color); +.metadata-property { + --input-border-width: 0; + --input-border-width-focus: 0; + --input-radius: 0; + position: relative; + display: flex; + align-items: start; + padding: var(--metadata-property-padding); + border-radius: var(--metadata-property-radius); + overflow: hidden; + background-color: var(--metadata-property-background); + box-shadow: var(--metadata-property-box-shadow); } -.drop-indicator { - position: absolute; - left: 0; - width: 100%; - height: 0; - border: 2px solid var(--interactive-accent); - pointer-events: none; +@media (hover: hover) { + .metadata-property:hover { + --metadata-divider-color: var(--metadata-divider-color-hover); + background-color: var(--metadata-property-background-hover); + box-shadow: var(--metadata-property-box-shadow-hover); + border-radius: var(--metadata-property-radius-hover); + } } -.drop-indicator:not(.is-active) { - display: none; +.metadata-property.has-focus, +.metadata-property:focus-within { + --metadata-divider-color: var(--metadata-divider-color-focus); + background-color: var(--metadata-property-background-hover); + box-shadow: var(--metadata-property-box-shadow-focus); + border-radius: var(--metadata-property-radius-focus); } -audio { - outline: none; +.metadata-property-icon { + cursor: var(--cursor); + color: var(--icon-color); + display: flex; + align-items: center; + padding: var(--size-4-1) 0; + height: var(--input-height); + -webkit-user-select: none; } -.markdown-rendered audio { - max-width: 100%; - outline: none; +.metadata-property-icon:before { + content: "\200B"; + width: var(--size-4-1); } -audio { - width: 100%; - height: 42px; +@media (hover: hover) { + .metadata-property-icon:hover .svg-icon { + color: var(--icon-color-focused); + } } -audio::-webkit-media-controls-enclosure { - border-radius: calc(var(--radius-m) - 1px); - border: 1px solid var(--background-modifier-border); - background-color: var(--background-primary-alt); +.metadata-property-icon[aria-disabled='true'] { + color: var(--text-muted); + opacity: 0.4; } -audio::-webkit-media-controls-current-time-display, -audio::-webkit-media-controls-time-remaining-display { - font-family: var(--font-interface); +.metadata-input-number { + background-color: transparent; + width: 100%; + border-width: 0px; } -iframe { - border: 0; +.metadata-property-key { + display: flex; + align-self: stretch; + align-items: flex-start; + flex-direction: row; + flex-shrink: 0; + font-family: var(--metadata-label-font); + border-bottom: var(--metadata-divider-width) solid var(--metadata-divider-color); + background-color: var(--metadata-label-background); + width: var(--metadata-label-width); + min-width: var(--metadata-label-width); } -kbd { - color: var(--code-normal); - font-family: var(--font-monospace); - background-color: var(--code-background); - border-radius: var(--radius-s); - font-size: var(--code-size); - padding: 0.1em 0.25em; +@media (hover: hover) { + .metadata-property-key:hover { + background-color: var(--metadata-label-background-hover); + } } -.workspace-leaf-content[data-type="pdf"] .view-content { - display: flex; - flex-direction: column; - overflow: hidden; - padding: 0; +.metadata-property-key:focus-within { + background-color: var(--metadata-label-background-active); } -.pdf-container { - background-color: var(--pdf-background); +input.metadata-property-key-input { + border: none; flex-grow: 1; - min-width: 350px; + color: var(--metadata-label-text-color); + font-size: var(--metadata-label-font-size); + font-weight: var(--metadata-label-font-weight); + height: var(--input-height); + background-color: transparent; + display: flex; + align-items: center; + text-overflow: ellipsis; overflow: hidden; - position: relative; -} -.theme-dark .pdf-container.mod-themed .annotationLayer .textWidgetAnnotation input, -.theme-dark .pdf-container.mod-themed .annotationLayer .textWidgetAnnotation textarea { - filter: invert(100%) hue-rotate(180deg); -} -.theme-dark .pdf-container.mod-themed .popupWrapper > div { - background-color: var(--background-secondary-alt); - filter: drop-shadow(0px 0px 1px var(--color-base-60)) drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.4)) drop-shadow(0px 4px 6px rgba(0, 0, 0, 0.4)); + width: 100%; + text-align: left; } -.theme-dark .pdf-container.mod-themed .popupWrapper > div::after { - background-color: var(--background-secondary-alt); +@media (hover: hover) { + input.metadata-property-key-input:hover { + background-color: transparent; + } } -.theme-dark .pdf-container.mod-themed .popupContent:empty + .popupMeta { - background-color: var(--background-secondary-alt); +input.metadata-property-key-input:active, +input.metadata-property-key-input:focus { + background-color: transparent; } -.pdf-viewer-container { - outline: none; - overflow: auto; +.metadata-property-warning-icon { + --icon-size: var(--icon-s); position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - scroll-padding: var(--size-4-3); + inset-inline-end: var(--size-2-1); + top: var(--size-2-1); + bottom: var(--size-2-1); + align-items: center; + display: flex; + color: var(--text-warning); } -.findbarOpen .pdf-viewer-container { - margin-top: var(--findbar-height); +@media (hover: hover) { + .metadata-property-warning-icon:hover { + color: var(--text-warning); + background-color: rgba(var(--color-orange-rgb), 0.15); + } } -.pdf-content-container { - --sidebar-width: 140px; +.metadata-property-value { + --input-padding: var(--metadata-input-padding); + display: flex; + flex: 1 1 auto; + gap: var(--size-2-2); + align-items: center; + align-self: stretch; + overflow: hidden; + font-family: var(--metadata-input-font); + min-height: var(--input-height); + background-color: var(--metadata-input-background); + border-bottom: var(--metadata-divider-width) solid var(--metadata-divider-color); } -.pdf-content-container.sidebarMoving .pdf-sidebar-container, -.pdf-content-container.sidebarOpen .pdf-sidebar-container { - visibility: visible; +.metadata-property-value .metadata-input-text, +.metadata-property-value .metadata-input-number, +.metadata-property-value .multi-select-container { + background-color: transparent; } -.pdf-content-container.sidebarOpen .pdf-sidebar-container { - inset-inline-start: 0; +.metadata-property-value .metadata-input-text:hover, +.metadata-property-value .metadata-input-number:hover, +.metadata-property-value .multi-select-container:hover { + background-color: transparent; } -.pdf-content-container.sidebarOpen .pdf-viewer-container { - inset-inline-start: var(--sidebar-width); - transition-property: inset-inline-start; +.metadata-property-value .metadata-input-text:active, +.metadata-property-value .metadata-input-number:active, +.metadata-property-value .multi-select-container:active, +.metadata-property-value .metadata-input-text:focus, +.metadata-property-value .metadata-input-number:focus, +.metadata-property-value .multi-select-container:focus, +.metadata-property-value .metadata-input-text:focus-within, +.metadata-property-value .metadata-input-number:focus-within, +.metadata-property-value .multi-select-container:focus-within { + background-color: transparent; +} +.metadata-property-value .multi-select-pill { + --pill-border-width: 0; + --pill-padding-x: 0; + --pill-padding-y: 0; + --pill-color: var(--metadata-input-text-color); + line-height: var(--line-height-tight); } -.pdf-embed .pdf-content-container.sidebarOpen .pdf-sidebar-container, -.is-mobile .pdf-content-container.sidebarOpen .pdf-sidebar-container { - inset-inline-start: 0; +.metadata-property-value .metadata-input-text { + text-overflow: ellipsis; + overflow: hidden; } -.pdf-embed .pdf-content-container.sidebarOpen .pdf-viewer-container, -.is-mobile .pdf-content-container.sidebarOpen .pdf-viewer-container { - inset-inline-start: 0; +.metadata-property-value.mod-external-link:not(:placeholder-shown) { + text-decoration-line: var(--link-decoration); + text-decoration-thickness: var(--link-decoration-thickness); + text-decoration-color: var(--text-faint); } -.pdf-content-container .pdf-sidebar-container, -.pdf-content-container .pdf-viewer-container { - transition-duration: 275ms; - transition-timing-function: var(--anim-motion-swing); +@media (hover: hover) { + .metadata-property-value.mod-external-link:not(:placeholder-shown) .metadata-link-inner:hover { + text-decoration-line: var(--link-decoration-hover); + } } -.pdf-content-container.sidebarResizing .pdf-sidebar-container, -.pdf-content-container.sidebarResizing .pdf-viewer-container { - /* Improve responsiveness and avoid visual glitches when the sidebar is resized. */ - transition-duration: 0s; +.metadata-property-value .mod-unknown { + color: var(--text-warning); + padding: var(--input-padding); + font-size: var(--metadata-input-font-size); + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; } -.pdf-content-container { - bottom: 0; - left: 0; - min-width: 350px; - position: absolute; - right: 0; - top: 0; +.metadata-property-value .multi-select-input { + font-size: inherit; } -.pdf-content-container.is-loading:before { - z-index: 1; +.metadata-property-value .multi-select-container, +.metadata-property-value .metadata-link-inner, +.metadata-property-value input { + font-size: var(--metadata-input-font-size); } -.pdf-sidebar-container { - background-color: var(--pdf-sidebar-background); - border-right: var(--divider-width) solid var(--divider-color); - bottom: 0; - display: flex; - flex-direction: column; - inset-inline-start: calc(-1 * var(--sidebar-width)); - position: absolute; - top: 0; - transition-property: inset-inline-start; - visibility: hidden; - width: var(--sidebar-width); - z-index: 100; +.metadata-property-value .multi-select-container { + --background-modifier-form-field: transparent; + --background-modifier-border: transparent; + align-items: center; + overflow: hidden; } -.findbarOpen .pdf-sidebar-container { - top: var(--findbar-height); +.metadata-property-value .multi-select-container input { + background-color: transparent; } -.is-mobile .pdf-sidebar-container[data-view="1"], -.pdf-embed .pdf-sidebar-container[data-view="1"] { - inset-inline-start: -140px; - width: 140px; +.metadata-property-value .multi-select-container .multi-select-pill.is-invalid { + --pill-background: transparent; + --pill-color: var(--text-error); + --pill-color-remove: var(--text-error); + text-decoration-line: line-through; } -.is-mobile .pdf-sidebar-container[data-view="2"], -.pdf-embed .pdf-sidebar-container[data-view="2"] { - inset-inline-start: -275px; - width: 275px; +.metadata-property-value .external-link .multi-select-pill-content, +.metadata-property-value .internal-link .multi-select-pill-content { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } -.pdf-sidebar-container .pdf-thumbnail-view, -.pdf-sidebar-container .pdf-outline-view { - bottom: 0; - overflow: auto; - padding: var(--size-4-2) var(--size-4-2); - position: absolute; - top: 0; - -webkit-user-select: none; - user-select: none; - width: 100%; +.metadata-property-value .clickable-icon { + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); + margin-inline-end: 2px; + margin-inline-start: -4px; + padding: 4px; } -.pdf-sidebar-container .pdf-thumbnail-view { - display: flex; - flex-wrap: wrap; - gap: var(--size-4-1); - justify-content: center; - align-content: flex-start; - padding: var(--size-4-3); - width: 100%; +.metadata-property-value .clickable-icon:hover { + background: transparent; + color: var(--text-normal); + cursor: var(--cursor-link); } -.pdf-sidebar-container .pdf-thumbnail-view a { - display: block; - cursor: var(--cursor); +@media (hover: hover) { + .metadata-property-value:hover { + background-color: var(--metadata-input-background-hover); + } } -.pdf-sidebar-container .pdf-thumbnail-view a:active, -.pdf-sidebar-container .pdf-thumbnail-view a:focus { - outline: 0; +.metadata-property-value:focus-within { + background-color: var(--metadata-input-background-active); } -.pdf-sidebar-container .thumbnail { - --thumbnail-width: 0; - --thumbnail-height: 0; - position: relative; - width: var(--thumbnail-width); - height: var(--thumbnail-height); - border: var(--size-4-2) solid transparent; - border-radius: var(--radius-s); - box-sizing: content-box; +.metadata-property-value[data-property-type="tags"] .multi-select-pill { + --pill-color: var(--tag-color); + --pill-color-hover: var(--tag-color-hover); + --pill-color-remove: var(--tag-color); + --pill-color-remove-hover: var(--tag-color-hover); + --pill-decoration: var(--tag-decoration); + --pill-decoration-hover: var(--tag-decoration-hover); + --pill-background: var(--tag-background); + --pill-background-hover: var(--tag-background-hover); + --pill-border-color: var(--tag-border-color); + --pill-border-color-hover: var(--tag-border-color-hover); + --pill-border-width: var(--tag-border-width); + --pill-padding-x: var(--tag-padding-x); + --pill-padding-y: var(--tag-padding-y); + --pill-radius: var(--tag-radius); + --pill-weight: var(--tag-weight); + --pill-focus-width: 100%; + --pill-focus-left-adjust: 0; + cursor: var(--cursor-link); + line-height: 1; } -.pdf-sidebar-container .thumbnail::before { - content: " "; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - box-shadow: var(--pdf-thumbnail-shadow); +/* Edit mode */ +.cm-hmd-frontmatter { + font-size: var(--font-smaller); + color: var(--text-muted); } -.pdf-sidebar-container .thumbnail::after { - background-color: var(--background-secondary); - border-radius: 3px; - bottom: var(--size-4-1); - content: attr(data-page-label); +.cm-hmd-frontmatter.cm-hmd-frontmatter.cm-def { color: var(--text-muted); - display: block; - font-size: var(--font-ui-smaller); - line-height: 1; - padding: var(--size-2-1) var(--size-4-1); - position: absolute; - right: var(--size-4-1); } -.pdf-sidebar-container .thumbnail:not([data-loaded]) { - border: 1px dashed var(--background-modifier-border); - margin: calc(var(--size-4-2) - 1px); +.cm-hmd-frontmatter .is-invalid { + color: var(--text-error); } -.pdf-sidebar-container .thumbnail:hover, -.pdf-sidebar-container .thumbnail.selected { - border-color: var(--background-modifier-hover); +.cm-hmd-frontmatter .error-marker { + background-color: var(--text-error); + color: var(--text-on-accent); } -.pdf-sidebar-container img.thumbnailImage { - border: 1px solid transparent; - max-width: unset; - width: var(--thumbnail-width); - height: var(--thumbnail-height); +.metadata-input-longtext { + flex-grow: 1; + cursor: text; + white-space: pre-wrap; + color: var(--metadata-input-text-color); + font-size: var(--metadata-input-font-size); + max-height: 300px; + padding: var(--input-padding); } -.pdf-outline-view .tree-item-self:not(.mod-collapsible) { - padding-left: calc(10px + var(--size-4-2) + var(--size-2-3)); +.metadata-input-longtext:focus { + overflow-y: auto; } -.pdf-outline-view .tree-item-self.mod-active { - color: var(--nav-item-color-active); - background-color: var(--nav-item-background-active); - font-weight: var(--nav-item-weight-active); +.metadata-input-longtext:empty:before { + content: attr(placeholder); + color: var(--input-placeholder-color); } -.pdf-outline-view .tree-item-flair { +.metadata-link { + cursor: text; + align-items: center; + padding: var(--input-padding); + display: flex; + flex: 1 1 auto; + gap: var(--size-4-2); +} +@media (hover: hover) { + .metadata-link:hover .metadata-link-flair { + opacity: var(--icon-opacity); + transition: 0.1s opacity 0.25s ease-in-out; + } +} +.metadata-link-inner { + cursor: var(--cursor-link); + color: var(--link-color); + text-decoration-line: var(--link-decoration); + text-decoration-thickness: var(--link-decoration-thickness); + text-overflow: ellipsis; + overflow: hidden; white-space: nowrap; } -.pdf-sidebar-content-wrapper { - position: relative; - flex-grow: 1; +@media (hover: hover) { + .metadata-link-inner:hover { + text-decoration-line: var(--link-decoration-hover); + color: var(--link-color-hover); + } + .metadata-link-inner:hover ~ .metadata-link-flair { + opacity: 0; + } } -.pdf-sidebar-content { - bottom: 0; - inset-inline-start: 0; - overflow: auto; - position: absolute; - top: 0; - width: 100%; +.metadata-link-flair { + --icon-size: var(--icon-xs); + background-color: transparent; + cursor: text; + margin-inline-start: auto; + display: flex; + align-items: center; + justify-content: center; + padding: var(--size-2-1); + border-radius: var(--clickable-icon-radius); + color: var(--icon-color); + opacity: 0; + transition: opacity var(--anim-duration-fast) ease-in-out; + height: auto; } -.pdf-sidebar-content > .hidden { +.markdown-source-view .metadata-container, +.markdown-preview-view .metadata-container:not(.mod-error) { display: none; } -.pdf-sidebar-resizer { - background-color: transparent; - bottom: 0; - cursor: col-resize; - inset-inline-end: calc(var(--divider-width-hover) * -1); - position: absolute; - top: 0; - transition: background-color 200ms ease-in-out; - width: var(--divider-width-hover); - z-index: var(--layer-cover); +.markdown-source-view.is-live-preview.show-properties .metadata-container:not(.mod-error) { + display: var(--metadata-display-editing); +} +.markdown-preview-view.show-properties .metadata-container { + display: var(--metadata-display-reading); } -.is-mobile .pdf-sidebar-resizer, -.pdf-embed .pdf-sidebar-resizer { +.markdown-source-view.is-live-preview.show-properties .metadata-container[data-property-count="0"]:not(.mod-error), +.markdown-preview-view.show-properties .metadata-container[data-property-count="0"]:not(.mod-error) { display: none; } -@media (hover: hover) { - .pdf-sidebar-resizer:hover { - background-color: var(--divider-color-hover); - } - .is-translucent .pdf-sidebar-resizer:hover { - background-color: var(--divider-color-hover); - } +.inline-embed .markdown-source-view.is-live-preview.show-properties .metadata-container:not(.mod-error), +.inline-embed .markdown-preview-view.show-properties .metadata-container:not(.mod-error) { + display: none; } -.pdf-toolbar { - align-items: stretch; - background-color: var(--background-primary); - border-bottom: 1px solid var(--background-modifier-border); - display: flex; - justify-content: space-between; - overflow: auto; - padding: var(--size-4-1) var(--size-4-3); - position: relative; +.markdown-rendered li h1, +.markdown-rendered li h2, +.markdown-rendered li h3, +.markdown-rendered li h4, +.markdown-rendered li h5 { + margin-top: 0; + margin-bottom: 0; } -.hover-popover .pdf-toolbar { - display: none; +.markdown-rendered :is(p,pre,table,ul,ol) + :is(h1,h2,h3,h4,h5,h6), +.markdown-rendered div:is(.el-p,.el-pre,.el-table,.el-ul,.el-ol) + div > :is(h1,h2,h3,h4,h5,h6) { + margin-top: var(--heading-spacing); } -.pdf-page-numbers { - white-space: nowrap; - margin-right: var(--size-4-1); - font-size: var(--font-ui-small); - font-variant-numeric: tabular-nums; +h1, +h2, +h3, +h4, +h5, +h6 { + margin-block-start: var(--p-spacing); + margin-block-end: var(--p-spacing); } -.pdf-toolbar-left, -.pdf-toolbar-center, -.pdf-toolbar-right { - display: flex; - align-items: center; - gap: var(--size-4-1); +h1, +.markdown-rendered h1 { + --font-weight: var(--h1-weight); + font-variant: var(--h1-variant); + letter-spacing: var(--h1-letter-spacing); + line-height: var(--h1-line-height); + font-size: var(--h1-size); + color: var(--h1-color); + font-weight: var(--font-weight); + font-style: var(--h1-style); + font-family: var(--h1-font); } -.pdf-toolbar-left.hidden, -.pdf-toolbar-center.hidden, -.pdf-toolbar-right.hidden { - display: none; +h1 a, +.markdown-rendered h1 a { + --link-weight: var(--h1-weight); } -.pdf-toolbar-center { - position: absolute; - top: var(--size-4-1); - height: calc(100% - var(--size-4-2)); - left: 50%; - transform: translateX(-50%); +h2, +.markdown-rendered h2 { + --font-weight: var(--h2-weight); + font-variant: var(--h2-variant); + letter-spacing: var(--h2-letter-spacing); + line-height: var(--h2-line-height); + font-size: var(--h2-size); + color: var(--h2-color); + font-weight: var(--font-weight); + font-style: var(--h2-style); + font-family: var(--h2-font); } -.pdf-toolbar-spacer { - width: var(--size-4-3); +h2 a, +.markdown-rendered h2 a { + --link-weight: var(--h2-weight); } -.pdf-toolbar-divider { - width: var(--border-width); - height: var(--icon-size); - background-color: var(--background-modifier-border); +h3, +.markdown-rendered h3 { + --font-weight: var(--h3-weight); + font-variant: var(--h3-variant); + letter-spacing: var(--h3-letter-spacing); + line-height: var(--h3-line-height); + font-size: var(--h3-size); + color: var(--h3-color); + font-weight: var(--font-weight); + font-style: var(--h3-style); + font-family: var(--h3-font); } -.pdf-page-input { - width: 7ch; - text-align: right; - font-variant-numeric: tabular-nums; +h3 a, +.markdown-rendered h3 a { + --link-weight: var(--h3-weight); } -.pdf-page-input.mod-page-loading { - background-color: var(--background-secondary); - opacity: 0.5; +h4, +.markdown-rendered h4 { + --font-weight: var(--h4-weight); + font-variant: var(--h4-variant); + letter-spacing: var(--h4-letter-spacing); + line-height: var(--h4-line-height); + font-size: var(--h4-size); + color: var(--h4-color); + font-weight: var(--font-weight); + font-style: var(--h4-style); + font-family: var(--h4-font); } -.pdf-findbar { - background-color: var(--background-primary); - flex-direction: row-reverse; - font-size: var(--font-ui-small); - gap: var(--size-4-1); - left: 0; - line-height: 1; - padding: var(--size-2-3); - position: absolute; - right: 0; - top: 0; - z-index: 101; +h4 a, +.markdown-rendered h4 a { + --link-weight: var(--h4-weight); } -.pdf-findbar input { - min-width: 300px; +h5, +.markdown-rendered h5 { + --font-weight: var(--h5-weight); + font-variant: var(--h5-variant); + letter-spacing: var(--h5-letter-spacing); + font-size: var(--h5-size); + line-height: var(--h5-line-height); + color: var(--h5-color); + font-weight: var(--font-weight); + font-style: var(--h5-style); + font-family: var(--h5-font); } -.pdf-findbar.mod-hidden { - display: none; +h5 a, +.markdown-rendered h5 a { + --link-weight: var(--h5-weight); } -.pdf-findbar input[type="checkbox"] { - display: none; - pointer-events: none; +h6, +.markdown-rendered h6 { + --font-weight: var(--h6-weight); + font-variant: var(--h6-variant); + letter-spacing: var(--h6-letter-spacing); + font-size: var(--h6-size); + line-height: var(--h6-line-height); + color: var(--h6-color); + font-weight: var(--font-weight); + font-style: var(--h6-style); + font-family: var(--h6-font); } -.pdf-findbar label { - -webkit-user-select: none; - user-select: none; +h6 a, +.markdown-rendered h6 a { + --link-weight: var(--h6-weight); } -.pdf-findbar label:hover, -.pdf-findbar input:focus-visible + label { - color: var(--toggled-btn-color); - background-color: var(--button-hover-color); +.cm-formatting-header { + color: var(--text-faint); } -.pdf-findbar .pdf-toolbar-field[type="checkbox"]:checked + .pdf-toolbar-label { - background-color: var(--toggled-btn-bg-color) !important; - color: var(--toggled-btn-color); +.cm-s-obsidian .cm-line.HyperMD-header { + padding-top: var(--p-spacing); } -.pdf-findbar .pdf-search-wrapper { - display: flex; - gap: var(--size-4-1); - align-items: center; +.cm-s-obsidian .cm-line.HyperMD-header + .cm-line:not(.HyperMD-header):not(:has(>br:only-child)) { + padding-top: var(--p-spacing-empty); } -.pdf-findbar .mod-not-found { - --background-modifier-form-field: rgba(var(--background-modifier-error-rgb), 0.1); - --background-modifier-border-focus: rgba(var(--background-modifier-error-rgb), 0.6); +.cm-s-obsidian .cm-line.HyperMD-header + .cm-line:not(.HyperMD-header):has(>br:only-child) + .cm-line.HyperMD-header { + padding-top: 0; } -.pdf-findbar .mod-pending::before { - -webkit-mask-image: url('data:image/svg+xml,'); - animation: rotation 1s infinite linear; +.HyperMD-header-1, +.inline-title h1, +.HyperMD-list-line .cm-header-1 { + --font-weight: var(--h1-weight); + font-variant: var(--h1-variant); + letter-spacing: var(--h1-letter-spacing); + line-height: var(--h1-line-height); + font-size: var(--h1-size); + color: var(--h1-color); + font-weight: var(--font-weight); + font-style: var(--h1-style); + font-family: var(--h1-font); } -.is-phone .pdf-findbar { - overflow: none; +.HyperMD-header-1 a, +.inline-title h1 a, +.HyperMD-list-line .cm-header-1 a, +.HyperMD-header-1 .cm-hmd-internal-link, +.inline-title h1 .cm-hmd-internal-link, +.HyperMD-list-line .cm-header-1 .cm-hmd-internal-link { + --link-weight: var(--h1-weight); } -.is-phone .pdf-findbar .pdf-toolbar-button { - height: auto; - width: auto; - padding: 6px 0; - background-color: transparent; - color: var(--text-accent); - flex-grow: 0; - flex-shrink: 0; +.HyperMD-header-2, +.inline-title h2, +.HyperMD-list-line .cm-header-2 { + --font-weight: var(--h2-weight); + font-variant: var(--h2-variant); + letter-spacing: var(--h2-letter-spacing); + line-height: var(--h2-line-height); + font-size: var(--h2-size); + color: var(--h2-color); + font-weight: var(--font-weight); + font-style: var(--h2-style); + font-family: var(--h2-font); } -.is-phone .pdf-findbar .pdf-toolbar-divider, -.is-phone .pdf-findbar .pdf-findbar-settings-btn, -.is-phone .pdf-findbar .pdf-findbar-message { - display: none; +.HyperMD-header-2 a, +.inline-title h2 a, +.HyperMD-list-line .cm-header-2 a, +.HyperMD-header-2 .cm-hmd-internal-link, +.inline-title h2 .cm-hmd-internal-link, +.HyperMD-list-line .cm-header-2 .cm-hmd-internal-link { + --link-weight: var(--h2-weight); } -.is-phone .pdf-findbar input { - min-width: 0; +.HyperMD-header-3, +.inline-title h3, +.HyperMD-list-line .cm-header-3 { + --font-weight: var(--h3-weight); + font-variant: var(--h3-variant); + letter-spacing: var(--h3-letter-spacing); + line-height: var(--h3-line-height); + font-size: var(--h3-size); + color: var(--h3-color); + font-weight: var(--font-weight); + font-style: var(--h3-style); + font-family: var(--h3-font); } -.is-phone .pdf-findbar .search-input-container { - flex-grow: 1; +.HyperMD-header-3 a, +.inline-title h3 a, +.HyperMD-list-line .cm-header-3 a, +.HyperMD-header-3 .cm-hmd-internal-link, +.inline-title h3 .cm-hmd-internal-link, +.HyperMD-list-line .cm-header-3 .cm-hmd-internal-link { + --link-weight: var(--h3-weight); } -.is-phone .pdf-findbar .pdf-search-wrapper { - gap: var(--size-4-2); +.HyperMD-header-4, +.inline-title h4, +.HyperMD-list-line .cm-header-4 { + --font-weight: var(--h4-weight); + font-variant: var(--h4-variant); + letter-spacing: var(--h4-letter-spacing); + line-height: var(--h4-line-height); + font-size: var(--h4-size); + color: var(--h4-color); + font-weight: var(--font-weight); + font-style: var(--h4-style); + font-family: var(--h4-font); } -@keyframes rotation { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } +.HyperMD-header-4 a, +.inline-title h4 a, +.HyperMD-list-line .cm-header-4 a, +.HyperMD-header-4 .cm-hmd-internal-link, +.inline-title h4 .cm-hmd-internal-link, +.HyperMD-list-line .cm-header-4 .cm-hmd-internal-link { + --link-weight: var(--h4-weight); +} +.HyperMD-header-5, +.inline-title h5, +.HyperMD-list-line .cm-header-5 { + --font-weight: var(--h5-weight); + font-variant: var(--h5-variant); + font-size: var(--h5-size); + letter-spacing: var(--h5-letter-spacing); + line-height: var(--h5-line-height); + color: var(--h5-color); + font-weight: var(--font-weight); + font-style: var(--h5-style); + font-family: var(--h5-font); +} +.HyperMD-header-5 a, +.inline-title h5 a, +.HyperMD-list-line .cm-header-5 a, +.HyperMD-header-5 .cm-hmd-internal-link, +.inline-title h5 .cm-hmd-internal-link, +.HyperMD-list-line .cm-header-5 .cm-hmd-internal-link { + --link-weight: var(--h5-weight); +} +.HyperMD-header-6, +.inline-title h6, +.HyperMD-list-line .cm-header-6 { + --font-weight: var(--h6-weight); + font-variant: var(--h6-variant); + letter-spacing: var(--h6-letter-spacing); + font-size: var(--h6-size); + line-height: var(--h6-line-height); + color: var(--h6-color); + font-weight: var(--font-weight); + font-style: var(--h6-style); + font-family: var(--h6-font); } -.pdf-find-results-count { - color: var(--text-muted); - margin: 0 var(--size-4-2); - font-style: italic; - white-space: nowrap; +.HyperMD-header-6 a, +.inline-title h6 a, +.HyperMD-list-line .cm-header-6 a, +.HyperMD-header-6 .cm-hmd-internal-link, +.inline-title h6 .cm-hmd-internal-link, +.HyperMD-list-line .cm-header-6 .cm-hmd-internal-link { + --link-weight: var(--h6-weight); } -.pdf-find-results-count:empty { - display: none; +.HyperMD-header .cm-header-1, +.HyperMD-header .cm-header-2, +.HyperMD-header .cm-header-3, +.HyperMD-header .cm-header-4, +.HyperMD-header .cm-header-5, +.HyperMD-header .cm-header-6 { + font-size: inherit !important; } -.pdf-findbar-settings { - background-color: var(--background-primary); - border-radius: var(--radius-m); - border: 1px solid var(--background-modifier-border); - box-shadow: var(--shadow-s); - padding: var(--size-4-1) var(--size-4-2); - position: absolute; - transform: translateX(-100%); - width: 200px; - z-index: 200; +hr { + border: none; + border-top: var(--hr-thickness) solid; + border-color: var(--hr-color); + margin: 2rem 0; } -.pdf-findbar-settings .setting-item { - padding: var(--size-4-1) 0; +.markdown-rendered hr { border: none; + border-top: var(--hr-thickness) solid; + border-color: var(--hr-color); } -.pdf-findbar-settings .setting-item-name { - font-size: var(--font-ui-small); +.cm-s-obsidian .hmd-inactive-line.HyperMD-hr { + color: transparent; + background-color: transparent; } -.pdf-password-dialog { - align-items: center; +.markdown-source-view.mod-cm6 .hr { display: flex; - flex-direction: column; - font-size: var(--font-ui-medium); - gap: var(--size-4-1); - justify-content: center; - left: 50%; - position: absolute; - top: 50%; - transform: translate(-50%, -50%); + align-items: center; } -.pdf-password-dialog .mod-small { - font-size: var(--font-ui-small); +.markdown-source-view.mod-cm6 hr { + margin: 0; + flex: 1 0 0; } -.pdf-password-dialog input { - margin-top: var(--size-4-2); +.cm-s-obsidian .hmd-fold-html-stub, +.cm-s-obsidian .hmd-fold-code-stub { + display: inline-block; + font-size: 67%; + color: #999; + vertical-align: middle; + border: 1px solid #999; + padding: 0 0.2em; + border-radius: 5px; + margin: 0 0.5em; + background-color: var(--background-primary-alt); + cursor: var(--cursor); } -.pdf-lock-icon .svg-icon { - --icon-size: var(--icon-xl); - --icon-stroke: var(--icon-xl-stroke-width); +.cm-s-obsidian .hmd-fold-html-stub.omittable, +.cm-s-obsidian .omittable.hmd-fold-code-stub { + display: none; } -.textLayer .mod-focused { - background-color: rgb(var(--text-highlight-bg-rgb)); - border-radius: var(--radius-s); - box-sizing: content-box; - padding: var(--size-4-1); - margin: calc(var(--size-4-1) * -1); +.cm-s-obsidian .hmd-fold-html-stub:hover, +.cm-s-obsidian .hmd-fold-code-stub:hover, +.cm-s-obsidian .hmd-fold-html-stub.highlight, +.cm-s-obsidian .highlight.hmd-fold-code-stub { + color: #FFF; + border-color: #C30; + background: #F40; } -.textLayer .mod-focused.appended { - position: static; +.cm-s-obsidian .hmd-fold-html { + position: relative; + border: 1px solid #FFF; } -.annotationLayer .mod-focused { - background-color: rgba(var(--text-highlight-bg-rgb), 0.1); - border-radius: var(--radius-s); - box-shadow: var(--shadow-s); - box-sizing: content-box; - margin: calc(var(--size-4-2) * -1); - border: var(--size-4-1) solid rgba(var(--text-highlight-bg-rgb), 0.8); - padding: var(--size-4-1); +@media (hover: hover) { + .cm-s-obsidian .hmd-fold-html:hover { + border: 1px dashed #999; + } } -.annotationLayer .boundingRect { - z-index: 2000; +.cm-s-obsidian .hmd-fold-html:hover .hmd-fold-html-stub.omittable, +.cm-s-obsidian .hmd-fold-html:hover .omittable.hmd-fold-code-stub { + display: block; + right: 0; + bottom: 100%; + margin: 0; position: absolute; - pointer-events: none; -} -.annotationLayer .boundingRect > * { - pointer-events: initial; + z-index: 100; } -.pdf-viewer .canvasWrapper { - position: absolute; - inset: 0; - box-shadow: var(--pdf-shadow); +.markdown-preview-view img, +.markdown-rendered img { + -webkit-touch-callout: default; + image-rendering: -webkit-optimize-contrast; + max-width: 100%; } -.pdf-viewer .page { - box-sizing: content-box; - border: calc(var(--size-4-1) * var(--scale-factor)) solid transparent; - flex-shrink: 0; - margin: 0 auto; +.markdown-preview-view img:not([width]), +.markdown-rendered img:not([width]) { + outline: none; } -.spread .page, -.pdf-viewer:is(.scrollHorizontal, .scrollWrapped) .page { - border: var(--size-4-1) solid transparent; +.cm-s-obsidian .hmd-fold-html a > img { + border: 0; } -.pdf-viewer.removePageBorders .page + .page { - border-top: var(--size-4-1) solid transparent; +.cm-s-obsidian img.hmd-image { + vertical-align: middle; + width: auto; + max-width: 100%; + height: auto; } -.pdf-viewer.removePageBorders .spread .page + .page { - border-top: none; +.cm-s-obsidian img.hmd-image.hmd-image-loading, +.cm-s-obsidian img.hmd-image.hmd-image-error { + min-width: 24px; + min-height: 24px; } -.pdf-viewer.removePageBorders .spread .canvasWrapper { - box-shadow: var(--pdf-spread-shadow); +.markdown-source-view.mod-cm6 .cm-line .internal-embed.image-embed { + display: inline; } -.pdf-viewer.removePageBorders .spread + .spread { - border-top: var(--size-4-1) solid transparent; +.markdown-source-view.mod-cm6 img { + max-width: 100%; } -.textLayer { - -webkit-user-select: text; - user-select: text; - opacity: 0.2; +.internal-query { + margin: 0; + border-top: 1px solid var(--background-modifier-border); } -.textLayer ::selection, -.markdown-source-view.mod-cm6 .textLayer ::selection { - background-color: hsl(var(--color-accent-hsl)); +.internal-query .search-result-container { + padding: var(--size-4-2); + max-height: 800px; + overflow: auto; + border: 1px solid var(--background-modifier-border); + background-color: var(--background-secondary); + border-radius: var(--radius-m); } -.textLayer .highlight { - margin: -1px; - padding: 1px; - border-radius: var(--radius-s); +.internal-query .internal-query-header { + text-align: center; + padding: var(--size-4-3) 0 var(--size-4-3) var(--size-4-1); + color: var(--text-normal); + display: flex; + justify-content: flex-start; + align-items: center; } -.textLayer .highlight.appended { - position: static; - display: inline-block; +.internal-query .internal-query-header-icon { + color: var(--text-faint); + margin-inline-end: var(--size-4-1); + display: flex; } -.textLayer .highlight.begin { - border-radius: var(--radius-s) 0 0 var(--radius-s); +.internal-query .internal-query-header-title { + font-weight: var(--font-medium); } -.textLayer .highlight.end { - border-radius: 0 var(--radius-s) var(--radius-s) 0; +.internal-query .internal-query-header-title:before, +.internal-query .internal-query-header-title:after { + content: '"'; } -.textLayer .highlight.selected { - box-shadow: 0 0 0 2px hsl(var(--interactive-accent-hsl)); - background-color: hsl(var(--interactive-accent-hsl)); +/* Default markers */ +ul ul, +ol ul, +ol ol ul, +ol ul ul, +ul ol ul, +ul ul ul { + list-style-type: disc; } -.textLayer .highlight:not(.selected) { - box-shadow: 0 0 0 2px rgb(var(--color-yellow-rgb)); - background-color: rgb(var(--color-yellow-rgb)); +ol { + list-style-type: var(--list-numbered-style); } -.popupWrapper { - --pdf-popup-width: 280px; - font-size: var(--font-ui-medium); - pointer-events: none; - position: absolute; - transform: translate(-50%, 0); - z-index: 10000; +ul > li, +ol > li { + text-align: start; } -.popupWrapper > div { - margin: var(--size-4-3); - background-color: var(--background-primary); - border-radius: var(--radius-s); - filter: drop-shadow(0px 0px 1px rgba(0, 0, 0, 0.2)) drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3)) drop-shadow(0px 4px 6px rgba(0, 0, 0, 0.3)); +ol > li::marker, +ul > li::marker { + color: var(--list-marker-color); } -.popupWrapper > div:after { - background: var(--background-primary); - border-top-left-radius: 2px; - content: ""; - height: var(--size-4-3); - left: calc(50% - 2px); - position: absolute; - top: -5px; - transform: rotate(45deg); - width: var(--size-4-3); - z-index: -1; +ol > li.is-collapsed::marker, +ul > li.is-collapsed::marker { + color: var(--list-marker-color-collapsed); } -.is-phone .pdf-annotation-modal .modal { - height: auto; - max-height: 40vh; - min-height: 0; - top: unset; +/* Indent depth + Consistency in horizontal positioning of lists +*/ +.markdown-rendered ul, +.markdown-rendered ol { + padding-inline-start: 0; + margin-block-start: var(--p-spacing); + margin-block-end: var(--p-spacing); + /* Space between list items */ } -.is-phone .pdf-annotation-modal .modal .modal-close-button, -.is-phone .pdf-annotation-modal .modal .modal-title { - display: none; +.markdown-rendered ul ul, +.markdown-rendered ol ul, +.markdown-rendered ul ol, +.markdown-rendered ol ol { + margin-block-start: 0; + margin-block-end: 0; } -.is-phone .pdf-annotation-modal .modal-content { - overflow: hidden; - padding: 0; +.markdown-rendered ul li p:first-of-type, +.markdown-rendered ol li p:first-of-type { + margin-block-start: 0; } -.is-phone .pdf-annotation-modal .popup { - flex-direction: column-reverse; - height: 100%; - overflow: hidden; +.markdown-rendered ul li p:last-of-type, +.markdown-rendered ol li p:last-of-type { + margin-block-end: 0; } -.is-phone .pdf-annotation-modal .popupContent { - height: 100%; - max-height: none; - padding-bottom: calc(var(--modal-bottom) + var(--size-4-4)); - padding-top: 0; +.markdown-rendered ul > li, +.markdown-rendered ol > li { + padding-top: var(--list-spacing); + padding-bottom: var(--list-spacing); + position: relative; } -.is-phone .pdf-annotation-modal .popupContent:empty + .popupMeta, -.is-phone .pdf-annotation-modal .popupMeta { - --icon-size: var(--font-ui-medium); - --icon-stroke: var(--icon-m-stroke-width); - background-color: transparent; - padding: var(--size-4-2) var(--size-4-4); - border-top: none; +.markdown-rendered ul > li { + margin-inline-start: 3ch; } -.popup { - cursor: initial; - display: flex; - flex-direction: column; - pointer-events: auto; - -webkit-user-select: text; - user-select: text; - white-space: normal; - width: var(--pdf-popup-width); - word-wrap: break-word; +.markdown-rendered ol > li { + margin-inline-start: 3ch; } -.popupContent { - font-size: var(--font-ui-small); - line-height: var(--line-height-tight); - max-height: 200px; - overflow: auto; - padding: var(--size-4-4); +.markdown-rendered ol ol > li, +.markdown-rendered ul ul > li { + margin-inline-start: var(--list-indent); } -.popupContent:empty { - display: none; +.markdown-source-view { + --list-padding-inline-start: var(--list-indent-source); + --list-marker-space: 0; } -.popupMeta { - --icon-size: var(--font-ui-small); - --icon-stroke: 2.5px; - align-items: center; - background-color: var(--background-secondary); - border-top: 1px solid var(--background-modifier-border); - color: var(--text-muted); - display: flex; - font-size: var(--font-ui-smaller); - gap: var(--size-4-1); - justify-content: space-between; - padding: var(--size-4-1) var(--size-4-2); - border-bottom-left-radius: var(--radius-s); - border-bottom-right-radius: var(--radius-s); +.markdown-source-view.is-live-preview { + --list-padding-inline-start: var(--list-indent-editing); + --list-marker-space: 0.25em; } -.popupContent:empty + .popupMeta { - border-top: none; - background-color: var(--background-primary); - border-top-left-radius: var(--radius-s); - border-top-right-radius: var(--radius-s); +.cm-formatting-list-ul, +.cm-formatting-list-ol { + font-variant-numeric: tabular-nums; + padding-inline-start: var(--list-padding-inline-start); } -.popupMeta .clickable-icon { - margin-right: calc(var(--size-4-1) * -1); - margin-left: calc(var(--size-2-1) * -1); +.markdown-source-view.mod-cm6 .HyperMD-list-line-nobullet .cm-indent { + min-width: var(--list-indent); } -.popupDate { - white-space: nowrap; +.cm-s-obsidian .cm-formatting-list { + color: var(--list-marker-color); } -.markdown-rendered video { - max-width: 100%; - outline: none; +.cm-s-obsidian .is-collapsed ~ .cm-formatting-list { + color: var(--list-marker-color-collapsed); } -.markdown-rendered blockquote { - color: var(--blockquote-color); - font-style: var(--blockquote-font-style); - background-color: var(--blockquote-background-color); - border-left: var(--blockquote-border-thickness) solid var(--blockquote-border-color); - padding: 0 0 0 var(--size-4-6); - margin-inline-start: 0; - margin-inline-end: 0; +/* Indent depth + Consistency in horizontal positioning of lists +*/ +.cm-line.HyperMD-list-line { + tab-size: var(--list-indent); } -.markdown-rendered blockquote > :first-child { - margin-top: 0; +/* Space between list items */ +.markdown-source-view ol > li, +.markdown-source-view ul > li, +.markdown-preview-view ol > li, +.markdown-preview-view ul > li, +.mod-cm6 .HyperMD-list-line.cm-line { + padding-top: var(--list-spacing); + padding-bottom: var(--list-spacing); } -.markdown-rendered blockquote > :last-child { - margin-bottom: 0; +/* Allow clicking on the bullet to collapse */ +/* #todo move this into folding.less */ +.markdown-rendered .list-collapse-indicator { + margin-inline-start: -2.65em; + padding-inline-end: 2em; } -.cm-s-obsidian span.cm-quote { - color: var(--blockquote-color); +.markdown-rendered .list-bullet { + float: left; + float: inline-start; + margin-inline-start: -0.8em; } -.cm-s-obsidian span.cm-formatting-quote { - color: var(--text-faint); +.markdown-rendered .task-list-item > .list-bullet { + display: none; } -.cm-s-obsidian .hmd-inactive-line span.cm-formatting-quote { +/* Remove default bullets so we can replace them */ +.markdown-rendered ul.has-list-bullet { + list-style-type: '\200B'; +} +.markdown-rendered ul.has-list-bullet > li::marker { color: transparent; } -.markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote:before, -.markdown-source-view.mod-cm6 .cm-blockquote-border:before { - content: "\200b"; - display: block; - width: 1px; - border-left: var(--blockquote-border-thickness) solid var(--blockquote-border-color); +.list-bullet { + /* hide bullet when editing the marker */ color: transparent; + position: relative; + display: inline-flex; + justify-content: center; + align-items: center; +} +.list-bullet:before { + content: '\200B'; +} +.list-bullet:after { position: absolute; - top: 0; - bottom: 0; + content: '\200B'; + pointer-events: none; + color: var(--list-marker-color); + border-radius: var(--list-bullet-radius); + width: var(--list-bullet-size); + height: var(--list-bullet-size); + border: var(--list-bullet-border); + transform: var(--list-bullet-transform); + background-color: var(--list-marker-color); + transition: transform 0.15s, box-shadow 0.15s; } -.markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote { - font-style: var(--blockquote-style); - background-color: var(--blockquote-background-color); +.list-bullet::selection { + background-color: transparent !important; } -.markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote:before { - left: 0; +li.is-collapsed .list-bullet:after, +.is-collapsed ~ .cm-formatting-list .list-bullet:after { + background-color: var(--list-marker-color-collapsed); + box-shadow: 0 0 0 4px var(--background-modifier-active-hover); } -.markdown-source-view.mod-cm6 .cm-blockquote-border { - display: inline-block; +/* Allow clicking on the bullet to collapse */ +/* #todo move this into folding.less */ +.markdown-source-view.mod-cm6.is-live-preview { + /* only allow this if line is not active, so that it's still editable */ } -.callout { - --callout-color: var(--callout-default); - --callout-icon: lucide-pencil; +.markdown-source-view.mod-cm6.is-live-preview .cm-line.HyperMD-list-line .cm-fold-indicator .collapse-indicator { + padding-inline-end: 0; } -.callout[data-callout="abstract"], -.callout[data-callout="summary"], -.callout[data-callout="tldr"] { - --callout-color: var(--callout-summary); - --callout-icon: lucide-clipboard-list; +.markdown-source-view.mod-cm6.is-live-preview .cm-line.HyperMD-list-line:not(.cm-active):not(.HyperMD-task-line) .cm-fold-indicator .collapse-indicator { + padding-inline-end: var(--list-bullet-end-padding); + inset-inline-end: calc(var(--list-bullet-end-padding) * -1); } -.callout[data-callout="info"] { - --callout-color: var(--callout-info); - --callout-icon: lucide-info; +@media (hover: hover) { + .list-collapse-indicator:hover ~ .list-bullet:after, + .cm-fold-indicator:hover ~ .list-bullet:after, + .list-collapse-indicator:hover ~ .cm-formatting-list .list-bullet:after, + .cm-fold-indicator:hover ~ .cm-formatting-list .list-bullet:after { + background-color: var(--list-marker-color-hover); + box-shadow: 0 0 0 4px var(--background-modifier-hover); + } + li.is-collapsed .list-collapse-indicator:hover ~ .list-bullet:after, + li.is-collapsed .cm-fold-indicator:hover ~ .list-bullet:after, + .list-collapse-indicator:hover.is-collapsed ~ .list-bullet:after, + .cm-fold-indicator:hover.is-collapsed ~ .list-bullet:after, + li.is-collapsed .list-collapse-indicator:hover ~ .cm-formatting-list .list-bullet:after, + li.is-collapsed .cm-fold-indicator:hover ~ .cm-formatting-list .list-bullet:after, + .list-collapse-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after, + .cm-fold-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after { + background-color: var(--list-marker-color-collapsed); + box-shadow: 0 0 0 4px var(--background-modifier-active-hover); + } } -.callout[data-callout="todo"] { - --callout-color: var(--callout-todo); - --callout-icon: lucide-check-circle-2; +.cm-s-obsidian .HyperMD-list-line.HyperMD-list-line-nobullet { + padding-top: initial; } -.callout[data-callout="important"] { - --callout-color: var(--callout-important); - --callout-icon: lucide-flame; +.cm-s-obsidian .HyperMD-list-line.HyperMD-list-line-nobullet > .cm-hmd-list-indent > .cm-indent-spacing:last-child { + padding-inline-start: calc(var(--list-indent-editing) + var(--list-marker-space)); } -.callout[data-callout="tip"], -.callout[data-callout="hint"] { - --callout-color: var(--callout-tip); - --callout-icon: lucide-flame; +.markdown-source-view.mod-cm6 .cm-hmd-list-indent { + display: inline-block; + white-space: pre; } -.callout[data-callout="success"], -.callout[data-callout="check"], -.callout[data-callout="done"] { - --callout-color: var(--callout-success); - --callout-icon: lucide-check; +.markdown-source-view.mod-cm6 .cm-formatting-list-ul, +.markdown-source-view.mod-cm6 .cm-formatting-list-ol { + white-space: pre; } -.callout[data-callout="question"], -.callout[data-callout="help"], -.callout[data-callout="faq"] { - --callout-color: var(--callout-question); - --callout-icon: help-circle; +a { + --font-weight: var(--link-weight); + color: var(--link-color); + font-weight: var(--link-weight); + outline: none; + text-decoration-line: var(--link-decoration); + text-decoration-thickness: var(--link-decoration-thickness); + cursor: var(--cursor-link); + transition: opacity var(--anim-duration-fast) ease-in-out; +} +@media (hover: hover) { + a:hover { + color: var(--link-color-hover); + text-decoration-line: var(--link-decoration-hover); + } +} +a.mobile-tap { + opacity: 0.5; +} +.external-link { + color: var(--link-external-color); + text-decoration-line: var(--link-external-decoration); + background-position: center right; + background-repeat: no-repeat; + background-image: linear-gradient(transparent, transparent), url(public/images/6155340132a851f6089e.svg); + background-size: 0.825em; + padding-inline-end: 0.9em; + background-position-y: 0.25em; + cursor: var(--cursor-link); + filter: var(--link-external-filter); + transition: opacity var(--anim-duration-fast) ease-in-out; +} +@media (hover: hover) { + .external-link:hover { + color: var(--link-external-color-hover); + text-decoration-line: var(--link-external-decoration-hover); + } } -.callout[data-callout="warning"], -.callout[data-callout="caution"], -.callout[data-callout="attention"] { - --callout-color: var(--callout-warning); - --callout-icon: lucide-alert-triangle; +.external-link.mobile-tap { + opacity: 0.5; } -.callout[data-callout="failure"], -.callout[data-callout="fail"], -.callout[data-callout="missing"] { - --callout-color: var(--callout-fail); - --callout-icon: lucide-x; +@supports selector(:dir(rtl)) { + :dir(rtl) .external-link { + background-position: center left; + background-image: linear-gradient(transparent, transparent), url(public/images/2308ab1944a6bfa5c5b8.svg); + background-repeat: no-repeat; + } } -.callout[data-callout="danger"], -.callout[data-callout="error"] { - --callout-color: var(--callout-error); - --callout-icon: lucide-zap; +.metadata-property-value .internal-link, +.markdown-rendered .internal-link { + cursor: var(--cursor-link); + text-decoration-line: var(--link-decoration); + --font-weight: var(--link-weight); + color: var(--link-color); + transition: opacity var(--anim-duration-fast) ease-in-out; } -.callout[data-callout="bug"] { - --callout-color: var(--callout-bug); - --callout-icon: lucide-bug; +@media (hover: hover) { + .metadata-property-value .internal-link:hover, + .markdown-rendered .internal-link:hover { + color: var(--link-color-hover); + text-decoration-line: var(--link-decoration-hover); + } } -.callout[data-callout="example"] { - --callout-color: var(--callout-example); - --callout-icon: lucide-list; +.metadata-property-value .internal-link.mobile-tap, +.markdown-rendered .internal-link.mobile-tap { + opacity: 0.5; } -.callout[data-callout="quote"], -.callout[data-callout="cite"] { - --callout-color: var(--callout-quote); - --callout-icon: quote-glyph; +.metadata-property-value .internal-link.is-unresolved, +.markdown-rendered .internal-link.is-unresolved { + color: var(--link-unresolved-color); + opacity: var(--link-unresolved-opacity); + filter: var(--link-unresolved-filter); + text-decoration-style: var(--link-unresolved-decoration-style); + text-decoration-color: var(--link-unresolved-decoration-color); } -.callout { - overflow: hidden; - border-style: solid; - border-color: rgba(var(--callout-color), var(--callout-border-opacity)); - border-width: var(--callout-border-width); - border-radius: var(--callout-radius); - margin: 1em 0; - mix-blend-mode: var(--callout-blend-mode); - background-color: rgba(var(--callout-color), 0.1); - padding: var(--callout-padding); +@media (hover: hover) { + .metadata-property-value .internal-link.is-unresolved:hover, + .markdown-rendered .internal-link.is-unresolved:hover { + opacity: 1; + color: var(--link-color-hover); + text-decoration-color: var(--link-color-hover); + text-decoration-line: var(--link-decoration-hover); + } } -.callout.is-collapsible .callout-title { - cursor: var(--cursor); +.cm-s-obsidian span.cm-hmd-internal-link { + --font-weight: var(--link-weight); + color: var(--link-color); + font-weight: var(--link-weight); } -.callout-title { - padding: var(--callout-title-padding); - display: flex; - gap: var(--size-4-1); - font-size: var(--callout-title-size); - color: rgb(var(--callout-color)); - line-height: var(--line-height-tight); - align-items: flex-start; +@media (hover: hover) { + .cm-s-obsidian span.cm-hmd-internal-link:hover { + text-decoration-line: var(--link-decoration-hover); + color: var(--link-color-hover); + } } -.callout-content { - overflow-x: auto; - padding: var(--callout-content-padding); - background-color: var(--callout-content-background); +.cm-s-obsidian span.cm-link { + color: var(--link-external-color); + word-break: break-word; } -.callout-icon { - flex: 0 0 auto; - display: flex; - align-items: center; +.cm-s-obsidian span.cm-link a { + color: var(--link-external-color); } -.callout-icon .svg-icon { - color: rgb(var(--callout-color)); +@media (hover: hover) { + .cm-s-obsidian span.cm-link:hover { + color: var(--link-external-color-hover); + text-decoration-line: var(--link-external-decoration-hover); + } } -.callout-icon::after { - content: "\200B"; +.cm-s-obsidian span.cm-formatting-link.cm-url, +.cm-s-obsidian span.cm-url { + color: var(--link-external-color); + font-weight: var(--link-weight); + text-decoration-line: var(--link-external-decoration); + filter: var(--link-external-filter); + word-break: break-all; } -.callout-title-inner { - font-weight: var(--bold-weight); - color: var(--callout-title-color); +@media (hover: hover) { + .cm-s-obsidian span.cm-formatting-link.cm-url:hover, + .cm-s-obsidian span.cm-url:hover { + color: var(--link-external-color-hover); + text-decoration-line: var(--link-external-decoration-hover); + } } -.callout-fold { - display: flex; - align-items: center; - padding-right: var(--size-4-2); +.cm-s-obsidian span.cm-footref.cm-inline-footnote.cm-formatting-inline-footnote, +.cm-s-obsidian span.cm-footref.cm-hmd-barelink.cm-formatting, +.cm-s-obsidian span.cm-formatting-image, +.cm-s-obsidian span.cm-formatting-link-string, +.cm-s-obsidian span.cm-formatting-link { + color: var(--text-faint); } -.callout-fold::after { - content: "\200B"; +.cm-s-obsidian span.hmd-link-icon { + width: 20px; + height: 16px; + display: inline-block; + vertical-align: middle; + opacity: 0.4; } -.callout-fold .svg-icon { - transition: transform 100ms ease-in-out; +@media (hover: hover) { + .cm-s-obsidian span.hmd-link-icon:hover { + opacity: 1; + } } -.callout-fold.is-collapsed .svg-icon { - transform: rotate(-90deg); +.cm-s-obsidian span.hmd-link-icon:after { + content: ""; } -.markdown-source-view.mod-cm6 .callout { - margin: 0; +.markdown-source-view.mod-cm6 .is-unresolved { + color: var(--link-unresolved-color); + opacity: var(--link-unresolved-opacity); + filter: var(--link-unresolved-filter); } -.markdown-rendered code { - color: var(--code-normal); - font-family: var(--font-monospace); - background-color: var(--code-background); - border-radius: var(--code-radius); - font-size: var(--code-size); - padding: 0.1em 0.25em; - -webkit-box-decoration-break: clone; +@media (hover: hover) { + .markdown-source-view.mod-cm6 .is-unresolved:hover { + opacity: 1; + color: var(--link-color-hover); + text-decoration-color: var(--link-color-hover); + } } -.cm-s-obsidian span.cm-inline-code { - color: var(--code-normal); - font-size: var(--code-size); - background-color: var(--code-background); - vertical-align: baseline; - -webkit-box-decoration-break: clone; +.markdown-source-view.mod-cm6 .is-unresolved .cm-underline { + text-decoration-line: var(--link-decoration); + text-decoration-style: var(--link-unresolved-decoration-style); + text-decoration-color: var(--link-unresolved-decoration-color); + color: var(--link-unresolved-color); } -.cm-s-obsidian span.cm-inline-code span.cm-inline-code.cm-hmd-indented-code { - background-color: transparent; +.markdown-source-view.mod-cm6 .cm-underline { + text-decoration-line: var(--link-decoration); + text-decoration-thickness: var(--link-decoration-thickness); } -.cm-s-obsidian span.cm-inline-code span.cm-inline-code:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight) { - background-color: var(--code-background); - vertical-align: baseline; +body.is-mobile .markdown-source-view.mod-cm6 .cm-underline { + -webkit-user-select: text; } -.cm-s-obsidian span.cm-inline-code span.cm-inline-code.hmd-hidden-token { - font-size: 0; +.markdown-source-view.mod-cm6.is-live-preview .cm-hashtag.cm-meta, +.markdown-source-view.mod-cm6 .cm-hmd-internal-link .cm-underline, +.markdown-source-view.mod-cm6 .cm-link .cm-underline, +.markdown-source-view.mod-cm6 .cm-url .cm-underline { + cursor: var(--cursor-link); } -.cm-s-obsidian .cm-inline-code:not(.cm-formatting) { - border-radius: var(--code-radius); - padding: 0.1em 0.25em; +@media (hover: hover) { + .markdown-source-view.mod-cm6 .cm-hmd-internal-link .cm-underline:hover { + text-decoration-line: var(--link-decoration-hover); + } } -.cm-s-obsidian .cm-inline-code.cm-formatting { - border-radius: var(--code-radius) 0 0 var(--code-radius); - padding: 0.1em 0; +.markdown-source-view.mod-cm6 .cm-link .cm-underline, +.markdown-source-view.mod-cm6 .cm-url .cm-underline { + color: var(--link-external-color); + text-decoration-line: var(--link-external-decoration); } -.cm-s-obsidian .cm-inline-code:not(.cm-formatting) + .cm-formatting.cm-inline-code { - border-radius: 0 var(--code-radius) var(--code-radius) 0; - padding-left: 0; +@media (hover: hover) { + .markdown-source-view.mod-cm6 .cm-link .cm-underline:hover, + .markdown-source-view.mod-cm6 .cm-url .cm-underline:hover { + color: var(--link-external-color-hover); + text-decoration-line: var(--link-external-decoration-hover); + } } -.cm-s-obsidian .cm-inline-code.cm-formatting ~ .cm-inline-code:not(.cm-formatting) { - border-radius: 0; - padding: 0.1em 0; +.cm-s-obsidian.HyperMD-with-alt span.cm-url, +.cm-s-obsidian.HyperMD-with-alt span.cm-link, +.cm-s-obsidian.HyperMD-with-alt span.cm-hashtag, +.cm-s-obsidian.HyperMD-with-ctrl span.cm-url, +.cm-s-obsidian.HyperMD-with-ctrl span.cm-link, +.cm-s-obsidian.HyperMD-with-ctrl span.cm-hashtag { + cursor: var(--cursor-link); } -.markdown-rendered pre { - position: relative; - padding: var(--size-4-3) var(--size-4-4); - min-height: 38px; - background-color: var(--code-background); - border-radius: var(--code-radius); - white-space: var(--code-white-space); - overflow-x: auto; +.inline-block { + display: inline-block; + vertical-align: middle; } -.markdown-rendered pre code { - border: none; - padding: 0; - background-color: transparent; +.hidden-token { + display: inline; + font-size: 1px !important; + letter-spacing: -1ch; + font-family: monospace; + color: transparent; } -.markdown-rendered pre:not(:hover) > button.copy-code-button { - display: none; +.cm-s-obsidian { + /* tooltip for addon/hover */ + /* gutter for addon/click */ + /* addon/fold */ + /* addon/fold-emoji */ } -.markdown-rendered button.copy-code-button { - margin: 6px; - padding: 6px 8px; - height: auto; - background-color: transparent; - box-shadow: none; - color: var(--text-muted); - font-size: var(--font-ui-smaller); - font-family: var(--font-interface); - position: absolute; - top: 0; - right: 0; +.cm-s-obsidian span.hmd-hidden-token.cm-formatting-em, +.cm-s-obsidian span.hmd-hidden-token.cm-formatting-strong, +.cm-s-obsidian span.hmd-hidden-token.cm-formatting-strikethrough, +.cm-s-obsidian span.hmd-hidden-token.cm-formatting-code, +.cm-s-obsidian span.hmd-hidden-token.cm-formatting-link { + display: inline; + font-size: 1px !important; + letter-spacing: -1ch; + font-family: monospace; + color: transparent; } -@media (hover: hover) { - .markdown-rendered button.copy-code-button:hover { - background-color: var(--background-modifier-hover); - } +.cm-s-obsidian div.HyperMD-hover > .HyperMD-hover-content { + background-color: #fff; + color: #000; + border: 1px solid #000; + padding: 0.5em; } -.markdown-source-view.mod-cm6 .cm-preview-code-block pre { - margin: 0; +.cm-s-obsidian div.HyperMD-hover > .HyperMD-hover-content p { + margin: 0.2em 0; } -.markdown-source-view.mod-cm6 .code-block-flair { - position: absolute; - right: 6px; - top: 6px; - z-index: 1; - display: inline-block; - padding: var(--size-4-1) var(--size-4-2); - border-radius: var(--code-radius); - font-family: var(--font-interface); - font-size: var(--font-ui-smaller); - color: var(--text-muted); - cursor: var(--cursor); +.cm-s-obsidian .HyperMD-goback { + width: 1px; } -@media (hover: hover) { - .markdown-source-view.mod-cm6 .code-block-flair:hover { - background-color: var(--background-modifier-hover); - } +.cm-s-obsidian div.HyperMD-goback-button { + background-color: #ddd; + color: #333; + text-align: center; + cursor: var(--cursor); } -.markdown-source-view.mod-cm6 .cm-line.HyperMD-codeblock { - padding-left: var(--size-4-4); - color: var(--code-normal); +.cm-s-obsidian .hmd-link-icon:after { + content: "🔗»"; + color: #009; + text-shadow: 0 0 2px #69F; } -.cm-s-obsidian .HyperMD-codeblock { - font-family: var(--font-monospace); - font-size: var(--code-size); +.cm-s-obsidian img.hmd-emoji { + height: 1.2em; + vertical-align: middle; } -.cm-s-obsidian .HyperMD-codeblock-begin, -.cm-s-obsidian .HyperMD-codeblock-end { - color: var(--code-normal); +.cm-s-obsidian { + line-height: var(--line-height-normal); } -.cm-s-obsidian .HyperMD-codeblock span.cm-inline-code { - background-color: inherit; - border: inherit; - padding: inherit; - font-size: inherit; +.cm-s-obsidian .hmd-fold-html-stub, +.cm-s-obsidian .hmd-fold-code-stub, +.cm-s-obsidian .cm-inline-code, +.cm-s-obsidian .HyperMD-codeblock, +.cm-s-obsidian .HyperMD-hr, +.cm-s-obsidian .cm-hmd-frontmatter, +.cm-s-obsidian .cm-hmd-orgmode-markup, +.cm-s-obsidian .cm-formatting-code, +.cm-s-obsidian .cm-math, +.cm-s-obsidian span.hmd-fold-math-placeholder, +.cm-s-obsidian .hmd-fold-html kbd { + font-family: var(--font-monospace); } -.cm-s-obsidian div.HyperMD-codeblock-bg { - left: 0; - right: 0; - background-color: var(--code-background); +.cm-s-obsidian span.cm-hmd-toc { + font-size: 24pt; + color: #999; } -.cm-s-obsidian div.HyperMD-codeblock-begin-bg { - border-top-left-radius: var(--code-radius); - border-top-right-radius: var(--code-radius); +.cm-s-obsidian .HyperMD-header-line { + color: var(--text-muted); } -.cm-s-obsidian div.HyperMD-codeblock-end-bg { - border-bottom-left-radius: var(--code-radius); - border-bottom-right-radius: var(--code-radius); +.cm-s-obsidian span.cm-hmd-escape-backslash { + color: var(--text-faint); } -.cm-s-obsidian div.HyperMD-codeblock-begin-bg, -.cm-s-obsidian div.HyperMD-codeblock-end-bg { - background-color: var(--code-background); +.cm-s-obsidian span.cm-footref, +.cm-s-obsidian span.cm-blockid { + position: relative; + font-size: var(--font-smallest); + vertical-align: text-top; + top: -0.2em; } -code[class*="language-"], -pre[class*="language-"] { - color: var(--code-normal); - background: none; - word-wrap: break-word; - white-space: pre-wrap; - word-break: normal; - font-family: var(--font-monospace); - text-align: left; - word-spacing: normal; - line-height: var(--line-height-normal); - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; +.cm-s-obsidian span.cm-footref.cm-hmd-barelink, +.cm-s-obsidian span.cm-blockid { + color: var(--text-muted); } -@media print { - code[class*="language-"], - pre[class*="language-"] { - text-shadow: none; - } +.cm-s-obsidian .hmd-file-uploading { + outline: 2px dashed #CCC; + outline-offset: -2px; + animation: hmd-file-uploading-ani 1.5s linear infinite; } -:not(pre) > code[class*="language-"], -pre[class*="language-"] { - background: var(--code-background); +.cm-s-obsidian .hmd-file-uploaded { + outline: 2px solid #6C3; + outline-offset: -2px; } -/* Code blocks */ -pre[class*="language-"] { - overflow: hidden; +.cm-s-obsidian .HyperMD-goback { + width: 1px; } -code[class*="language-"] { - display: block; - padding: 1em; - overflow: auto; +.cm-s-obsidian div.HyperMD-goback-button { + padding-right: 15px; + border-radius: 0 10px 10px 0; + display: inline-block; + text-align: center; + background-color: #8daed9; + color: #f7f7f7; + cursor: var(--cursor); } -/* Inline code */ -:not(pre) > code[class*="language-"] { - padding: 0.1em; - border-radius: 0.3em; - white-space: normal; +.cm-s-obsidian .hmd-fold-code-image { + text-align: center; } -.token.important, -.token.bold { - font-weight: bold; +.cm-s-obsidian .HyperMD-header, +.cm-s-obsidian .HyperMD-footnote, +.cm-s-obsidian .HyperMD-codeblock, +.cm-s-obsidian .HyperMD-hr { + clear: left; } -.token.italic { - font-style: italic; +.cm-s-obsidian .cm-s-obsidian span.hmd-hidden-token.cm-formatting-task { + color: transparent !important; } -.token.entity { - cursor: help; +.cm-s-obsidian .hmd-inactive-line span.cm-hmd-escape-backslash, +.cm-s-obsidian .hmd-inactive-line span.cm-formatting-header { + font-size: 0 !important; + display: inline; } -/* Syntax highlighting */ -.token.comment, -.token.prolog, -.token.doctype, -.token.cdata { - color: var(--code-comment); +.cm-s-obsidian .hmd-inactive-line span.cm-hmd-list-indent { + border-right: 0; } -.token.namespace { - opacity: 0.7; +@keyframes hmd-file-uploading-ani { + 0%, + 100% { + opacity: 0.4; + } + 50% { + opacity: 0.7; + } } -.token.tag, -.token.constant, -.token.symbol, -.token.deleted { - color: var(--code-tag); +@media (hover: hover) { + .cm-s-obsidian div.HyperMD-goback-button:hover { + color: transparent; + text-align: left; + } + .cm-s-obsidian div.HyperMD-goback-button:hover:before { + position: absolute; + padding-left: 5px; + content: "Back"; + color: #f7f7f7; + } } -.token.punctuation { - color: var(--code-punctuation); +mjx-container { + outline: none; } -.token.boolean, -.token.number { - color: var(--code-value); +.cm-s-obsidian { + /* addon/fold-math */ } -.token.selector, -.token.attr-name, -.token.string, -.token.char, -.token.inserted { - color: var(--code-string); +.cm-s-obsidian .hmd-fold-math { + display: inline-block; + vertical-align: middle; } -.token.operator { - color: var(--code-operator); +.cm-s-obsidian .hmd-fold-math.hmd-fold-math.math-2 { + width: 100%; } -.token.entity, -.token.parameter, -.token.property, -.token.url, -.language-css .token.string, -.style .token.string, -.token.variable { - color: var(--code-property); +.cm-s-obsidian span.cm-math, +.cm-s-obsidian span.hmd-fold-math-placeholder { + font-size: var(--code-size); + font-style: italic; } -.token.atrule, -.token.attr-value, -.token.builtin, -.token.function, -.token.class-name, -.token.property-access { - color: var(--code-function); +.cm-s-obsidian span.cm-formatting-math { + color: var(--text-accent); + font-weight: inherit; } -.token.keyword { - color: var(--code-keyword); +.cm-s-obsidian span.cm-math-2 { + font-size: 13.2pt; } -.token.regex, -.token.important { - color: var(--code-important); +.markdown-source-view.mod-cm6 .math-block > mjx-container { + margin: 0; + padding: 1em 0; + overflow-x: auto; } -.cm-inline-code, -.cm-math { - color: var(--code-normal); +/* Tables */ +.markdown-rendered table { + margin-block-start: var(--p-spacing); + margin-block-end: var(--p-spacing); + word-break: normal; } -.cm-comment, -.cm-meta { - color: var(--code-comment); +.cm-html-embed table, +.markdown-rendered table { + border-collapse: collapse; + line-height: var(--table-line-height); } -.cm-tag { - color: var(--code-tag); +.cm-html-embed td, +.markdown-rendered td, +.cm-html-embed th, +.markdown-rendered th { + padding: var(--size-2-2) var(--size-4-2); + border: var(--table-border-width) solid var(--table-border-color); + max-width: var(--table-column-max-width); + min-width: var(--table-column-min-width); + vertical-align: var(--table-cell-vertical-alignment); } -.cm-punctuation, -.cm-bracket, -.cm-hr { - color: var(--code-punctuation); +.cm-html-embed td, +.markdown-rendered td { + font-size: var(--table-text-size); + color: var(--table-text-color); } -.cm-number { - color: var(--code-value); +.cm-html-embed th, +.markdown-rendered th { + font-size: var(--table-header-size); + font-weight: var(--table-header-weight); + color: var(--table-header-color); + font-family: var(--table-header-font); + line-height: var(--line-height-tight); } -.cm-qualifier, -.cm-string, -.cm-string-2 { - color: var(--code-string); +.cm-html-embed th, +.markdown-rendered th, +.cm-html-embed td, +.markdown-rendered td { + text-align: start; +} +.cm-html-embed th[align="left"], +.markdown-rendered th[align="left"], +.cm-html-embed td[align="left"], +.markdown-rendered td[align="left"] { + text-align: start; +} +.cm-html-embed th[align="center"], +.markdown-rendered th[align="center"], +.cm-html-embed td[align="center"], +.markdown-rendered td[align="center"] { + text-align: center; } -.cm-operator { - color: var(--code-operator); +.cm-html-embed th[align="right"], +.markdown-rendered th[align="right"], +.cm-html-embed td[align="right"], +.markdown-rendered td[align="right"] { + text-align: end; } -.cm-link, -.cm-variable, -.cm-variable-2, -.cm-variable-3 { - color: var(--code-property); +.cm-html-embed thead > tr > th, +.markdown-rendered thead > tr > th, +.cm-html-embed tbody > tr > td, +.markdown-rendered tbody > tr > td { + white-space: var(--table-white-space); + text-overflow: ellipsis; + overflow: hidden; } -.cm-builtin, -.cm-property, -.cm-attribute, -.cm-type { - color: var(--code-function); +.cm-html-embed thead > tr > th > .markdown-embed, +.markdown-rendered thead > tr > th > .markdown-embed, +.cm-html-embed tbody > tr > td > .markdown-embed, +.markdown-rendered tbody > tr > td > .markdown-embed { + white-space: normal; } -.cm-keyword { - color: var(--code-keyword); +.cm-html-embed tbody tr, +.markdown-rendered tbody tr { + background-color: var(--table-background); } -.markdown-preview-view .markdown-embed .markdown-preview-view { - --file-folding-offset: 0px; - height: 100%; - padding: 0; +@media (hover: hover) { + .cm-html-embed tbody tr:hover, + .markdown-rendered tbody tr:hover { + background-color: var(--table-row-background-hover); + } } -.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h1, -.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h2, -.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h3, -.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h4, -.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h5, -.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h6 { - margin-top: 0; +.cm-html-embed tbody tr:nth-child(odd), +.markdown-rendered tbody tr:nth-child(odd) { + background-color: var(--table-row-alt-background); } -.pdf-embed, -.markdown-source-view .pdf-embed, -.markdown-source-view.mod-cm6 .cm-content > .pdf-embed, -.internal-embed.pdf-embed:not(.image-embed) { - width: 100%; - height: 800px; - display: flex; - flex-direction: column; +@media (hover: hover) { + .cm-html-embed tbody tr:nth-child(odd):hover, + .markdown-rendered tbody tr:nth-child(odd):hover { + background-color: var(--table-row-alt-background-hover); + } } -.pdf-embed { - overflow: hidden; - position: relative; +.cm-html-embed tbody tr > td:nth-child(2n+2), +.markdown-rendered tbody tr > td:nth-child(2n+2) { + background-color: var(--table-column-alt-background); } -.pdf-embed:not(.canvas-node-content) { - border: 1px solid var(--background-modifier-border); - border-radius: var(--radius-s); +.cm-html-embed tbody tr:last-child > td, +.markdown-rendered tbody tr:last-child > td { + border-bottom-width: var(--table-row-last-border-width); } -.pdf-embed:not(.canvas-node-content) .edit-block-button + .pdf-toolbar { - padding-right: var(--size-4-9); +.cm-html-embed tbody tr > td:first-child, +.markdown-rendered tbody tr > td:first-child { + border-left-width: var(--table-column-first-border-width); } -.markdown-source-view.mod-cm6 .pdf-embed .edit-block-button { - background-color: var(--background-primary); - opacity: 1; - top: 6px; - z-index: 1; +.cm-html-embed tbody tr > td:last-child, +.markdown-rendered tbody tr > td:last-child { + border-right-width: var(--table-column-last-border-width); } -.markdown-source-view.mod-cm6 .pdf-embed .edit-block-button:hover { - color: var(--icon-color-hover); - background-color: var(--background-modifier-hover); +.cm-html-embed thead tr, +.markdown-rendered thead tr { + background-color: var(--table-header-background); } -@media print { - .pdf-embed:not(.canvas-node-content) { - align-items: center; - border: none; - justify-content: center; - max-height: 80vh; - } - .pdf-embed:not(.canvas-node-content) .pdf-container, - .pdf-embed:not(.canvas-node-content) .pdf-toolbar { - display: none; - } - .pdf-embed:not(.canvas-node-content) .canvasWrapper { - border-radius: var(--radius-s); - border: 1px solid var(--background-modifier-border); - max-height: 100%; - overflow: hidden; - width: fit-content; - } - .pdf-embed:not(.canvas-node-content) canvas { - height: auto; - width: 100%; +@media (hover: hover) { + .cm-html-embed thead tr:hover, + .markdown-rendered thead tr:hover { + background-color: var(--table-header-background-hover); } } -.markdown-embed, -.file-embed { - position: relative; +.cm-html-embed thead tr > th, +.markdown-rendered thead tr > th { + border-top-width: var(--table-header-border-width); + border-color: var(--table-header-border-color); } -.markdown-embed-link, -.file-embed-link { - position: absolute; - top: 4px; - right: 4px; - color: var(--icon-color); - opacity: var(--icon-opacity); - cursor: var(--cursor-link); - padding: var(--size-2-2); - border-radius: var(--radius-s); - display: flex; - align-items: center; - --icon-size: var(--icon-s); - --icon-stroke: var(--icon-s-stroke-width); +.cm-html-embed thead tr > th:nth-child(2n+2), +.markdown-rendered thead tr > th:nth-child(2n+2) { + background-color: var(--table-column-alt-background); } -@media (hover: hover) { - .markdown-embed-link:hover, - .file-embed-link:hover { - color: var(--icon-color-hover); - opacity: var(--icon-opacity-hover); - background: var(--background-modifier-hover); - } +.cm-html-embed thead tr > th:first-child, +.markdown-rendered thead tr > th:first-child { + border-left-width: var(--table-column-first-border-width); } -.file-embed-title { - display: flex; - align-items: center; - justify-content: center; - gap: var(--size-4-2); +.cm-html-embed thead tr > th:last-child, +.markdown-rendered thead tr > th:last-child { + border-right-width: var(--table-column-last-border-width); } -.file-embed-icon { - color: var(--text-muted); - display: flex; +.cm-s-obsidian .HyperMD-table-row { + white-space: pre; + word-break: normal; + overflow-wrap: normal; + font-size: var(--code-size); + font-family: var(--font-monospace); } -.file-embed { - display: flex; - justify-content: center; - border-radius: var(--radius-m); - background-color: var(--background-primary-alt); +.cm-s-obsidian .HyperMD-table-row span.cm-inline-code { + --code-size: 1em; } -.file-embed.mod-generic, -.file-embed.mod-empty { - cursor: var(--cursor-link); - padding: var(--size-4-2); - color: var(--text-muted); - text-align: center; - font-size: var(--font-smaller); +.cm-s-obsidian .HyperMD-table-rtl { + direction: rtl; } -@media (hover: hover) { - .file-embed.mod-generic:hover, - .file-embed.mod-empty:hover { - color: var(--text-normal); - background-color: var(--background-secondary); - } +.cm-s-obsidian .hmd-table-column, +.cm-s-obsidian .hmd-table-column-content { + display: inline-block; } -.file-embed.mod-empty-attachment { - padding: var(--size-4-2); - color: var(--text-muted); +.cm-s-obsidian .hmd-table-column-left { + text-align: left; +} +.cm-s-obsidian .hmd-table-column-center { text-align: center; - font-size: var(--font-smaller); } -.markdown-embed-content { - height: 100%; +.cm-s-obsidian .hmd-table-column-right { + text-align: right; } -.embed-title { - align-items: center; - display: flex; - gap: var(--size-4-1); - font-size: var(--font-text-size); - font-weight: var(--bold-weight); - text-align: left; - text-overflow: ellipsis; - white-space: nowrap; - padding: 0 0 var(--size-4-2) 0; +.cm-s-obsidian .HyperMD-table-row span.cm-hmd-table-sep, +.cm-s-obsidian .HyperMD-table-row-1 { + color: var(--text-faint); } -.markdown-embed { - font-style: var(--embed-font-style); - background-color: var(--embed-background); - border-top: var(--embed-border-top); - border-right: var(--embed-border-right); - border-bottom: var(--embed-border-bottom); - border-left: var(--embed-border-left); - margin: 0; - padding: var(--embed-padding); +.cm-s-obsidian .HyperMD-table-row-0 { + color: var(--table-header-color); } -.markdown-embed .markdown-preview-view { - padding: 0; +.cm-s-obsidian .hmd-fold-html table { + border-collapse: collapse; } -.internal-embed:not(.image-embed) { - display: block; +.cm-s-obsidian .hmd-fold-html table td, +.cm-s-obsidian .hmd-fold-html table th { + padding: 10px; + border: 1px solid #ccc; } -.internal-embed img:not([width]), -.internal-embed audio, -.internal-embed video { - max-width: 100%; +.cm-s-obsidian .hmd-inactive-line.HyperMD-table-row-1 { + color: transparent; + text-shadow: none; +} +.cm-s-obsidian .hmd-inactive-line.HyperMD-table-row-1 > span { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAQAAAAziH6sAAAADklEQVR42mOc+Z9x5n8ACTkDM4ikM1IAAAAASUVORK5CYII=) repeat-x 0px center; } -.inline-embed .markdown-embed-content { - height: fit-content; - max-height: var(--embed-max-height); - overflow: auto; +.cm-s-obsidian .hmd-inactive-line.HyperMD-table-row span.cm-hmd-table-sep { + color: transparent; +} +.markdown-source-view.mod-cm6 .cm-line.HyperMD-table-row { + min-width: max-content; } -.inline-embed .markdown-embed-content p:first-child { +.markdown-source-view.mod-cm6 .cm-table-widget table { margin-top: 0; + margin-bottom: 0; } -.inline-embed .markdown-source-view.mod-cm6 .cm-editor { - min-height: unset; +.table-drag-target { + position: absolute; + z-index: 2; } -.embed-iframe { - width: 100%; - height: 100%; +.table-drag-target::after { + content: ""; + position: absolute; + inset: 0; + border-radius: 2px; + background-color: var(--interactive-accent); } -iframe.external-embed { - width: 600px; - max-width: 100%; - height: 350px; +.table-drag-target.mod-row::after { + inset-block: calc(-1 * var(--table-drop-indicator-half-width)); } -.markdown-source-view.mod-cm6 .internal-embed { - white-space: normal; +.table-drag-target.mod-col::after { + inset-inline: calc(-1 * var(--table-drop-indicator-half-width)); } -.markdown-source-view.mod-cm6 .cm-embed-block { - position: relative; - white-space: normal; - overflow-wrap: normal; - word-break: normal; +a.tag { + background-color: var(--tag-background); + border: var(--tag-border-width) solid var(--tag-border-color); + border-radius: var(--tag-radius); + color: var(--tag-color); + font-size: var(--tag-size); + font-weight: var(--tag-weight); + text-decoration: var(--tag-decoration); + padding: var(--tag-padding-y) var(--tag-padding-x); + line-height: 1; } @media (hover: hover) { - .markdown-source-view.mod-cm6 .cm-embed-block:not(.cm-table-widget):hover { - box-shadow: var(--embed-block-shadow-hover); - border-radius: var(--radius-s); - overflow: hidden; - cursor: text; - } - .markdown-source-view.mod-cm6 .cm-embed-block:not(.cm-table-widget):hover .edit-block-button { - opacity: 1; - } - .markdown-source-view.mod-cm6 .cm-embed-block:not(.cm-table-widget):hover .edit-block-button:hover { - background-color: var(--background-modifier-hover); + a.tag:hover { + background-color: var(--tag-background-hover); + border: var(--tag-border-width) solid var(--tag-border-color-hover); + color: var(--tag-color-hover); + text-decoration: var(--tag-decoration-hover); } } -.markdown-source-view.mod-cm6 .cm-embed-block pre { - margin: 0; +a.tag { + background-color: var(--tag-background); + border: var(--tag-border-width) solid var(--tag-border-color); + border-radius: var(--tag-radius); + color: var(--tag-color); + font-size: var(--tag-size); + font-weight: var(--tag-weight); + text-decoration: var(--tag-decoration); + padding: var(--tag-padding-y) var(--tag-padding-x); + line-height: 1; } -.markdown-source-view.mod-inside-iframe > .cm-editor > .cm-scroller { - flex-direction: column; - padding: 0 var(--size-4-4); +@media (hover: hover) { + a.tag:hover { + background-color: var(--tag-background-hover); + border: var(--tag-border-width) solid var(--tag-border-color-hover); + color: var(--tag-color-hover); + text-decoration: var(--tag-decoration-hover); + } } -.markdown-source-view.mod-inside-iframe > .cm-editor > .cm-scroller::before, -.markdown-source-view.mod-inside-iframe > .cm-editor > .cm-scroller::after { - content: " "; - display: block; - min-height: min(calc(10vh - 3px), var(--size-4-4)); - max-height: var(--size-4-4); - flex: 1 1 0; +.cm-hashtag { + color: var(--tag-color); + background-color: var(--tag-background); + border: var(--tag-border-width) solid var(--tag-border-color); + font-size: var(--tag-size); + font-weight: var(--tag-weight); + vertical-align: baseline; + border-inline-start: none; + border-inline-end: none; + padding-top: var(--tag-padding-y); + padding-bottom: var(--tag-padding-y); } -.markdown-source-view.mod-inside-iframe > .cm-editor > .cm-scroller > .cm-sizer { - min-height: unset; - flex: 1 0 0; +.cm-hashtag.cm-hashtag-begin { + border-start-start-radius: var(--tag-radius); + border-end-start-radius: var(--tag-radius); + border-inline-end: none; + border-inline-start: var(--tag-border-width) solid var(--tag-border-color); + padding-inline-start: var(--tag-padding-x); } -.footnote-link { - text-decoration: none; +.cm-hashtag.cm-hashtag-end { + border-start-end-radius: var(--tag-radius); + border-end-end-radius: var(--tag-radius); + border-inline-start: none; + border-inline-end: var(--tag-border-width) solid var(--tag-border-color); + padding-inline-end: var(--tag-padding-x); } -.footnotes { - font-size: var(--footnote-size); +.cm-s-obsidian span.cm-hashtag.cm-hmd-escape-backslash { + color: #FCC; } -.footnote-ref { - vertical-align: super; +input[type="radio"], +input[type=checkbox] { + -webkit-appearance: none; + appearance: none; + border-radius: var(--checkbox-radius); + border: 1px solid var(--checkbox-border-color); + flex-shrink: 0; + padding: 0; + margin: 0; + margin-inline-end: 6px; + width: var(--checkbox-size); + height: var(--checkbox-size); + position: relative; + transition: box-shadow 0.15s ease-in-out; } -.footnote-backref { - color: var(--text-faint); - text-decoration: none; +input[type="radio"][disabled=true], +input[type=checkbox][disabled=true] { + pointer-events: none; } -@media (hover: hover) { - .footnote-backref:hover { - color: var(--text-accent); - text-decoration: none; - } +input[type="radio"]:hover, +input[type=checkbox]:hover, +input[type="radio"]:active, +input[type=checkbox]:active, +input[type="radio"]:focus, +input[type=checkbox]:focus { + outline: 0; + border-color: var(--checkbox-border-color-hover); } -.cm-s-obsidian .cm-line.HyperMD-footnote { - font-size: var(--footnote-size); - padding-left: 8px; +input[type="radio"]:focus-visible, +input[type=checkbox]:focus-visible { + box-shadow: 0 0 0 2px var(--background-modifier-border-focus); } -.cm-s-obsidian .cm-line.HyperMD-footnote span.cm-hmd-footnote { - color: var(--text-faint); - cursor: text; +input[type="radio"]:checked:after, +input[type=checkbox]:checked:after { + content: ""; + top: -1px; + inset-inline-start: -1px; + position: absolute; + width: var(--checkbox-size); + height: var(--checkbox-size); + display: block; + background-color: var(--checkbox-marker-color); + -webkit-mask-position: 52% 52%; + -webkit-mask-size: 65%; + -webkit-mask-repeat: no-repeat; + -webkit-mask-image: url("data:image/svg+xml; utf8, "); } -.cm-s-obsidian .cm-line.HyperMD-footnote span.cm-hmd-footnote .cm-underline { - text-decoration: none; +input[type="radio"]:checked, +input[type=checkbox]:checked { + background-color: var(--checkbox-color); + border-color: var(--checkbox-color); } @media (hover: hover) { - .cm-s-obsidian .cm-line.HyperMD-footnote span.cm-hmd-footnote:hover { - color: var(--text-accent); + input[type="radio"]:checked:hover, + input[type=checkbox]:checked:hover { + background-color: var(--checkbox-color-hover); + border-color: var(--checkbox-color-hover); } } -.markdown-rendered .frontmatter.mod-failed { +input[type="radio"][data-indeterminate="true"]:not(:checked):after, +input[type=checkbox][data-indeterminate="true"]:not(:checked):after { + content: ""; + position: absolute; + top: calc(var(--checkbox-size) / 2 - 2px); + width: calc(var(--checkbox-size) - 6px); + left: 0; + right: 0; + margin: 0 auto; + height: 2px; + display: block; + border-radius: 2px; + background-color: var(--text-normal); +} +.task-list-item-checkbox { + width: var(--checkbox-size); + height: var(--checkbox-size); +} +.markdown-preview-view .task-list-item-checkbox { position: relative; + top: 0.2em; + margin-inline-end: 0.6em; } -.markdown-rendered .frontmatter.mod-failed .mod-error { - color: var(--text-error); - font-size: var(--font-smaller); +ul > li.task-list-item { + list-style: none; } -.markdown-rendered .frontmatter.mod-failed:after { - content: ''; - position: absolute; - top: 0; - right: 0; - width: 100%; - height: 100%; - background-color: var(--background-modifier-error); - opacity: 0.3; - mix-blend-mode: var(--highlight-mix-blend-mode); +ul > li.task-list-item > p > .task-list-item-checkbox, +ul > li.task-list-item > .task-list-item-checkbox { + margin-inline-start: calc(var(--checkbox-size) * -1.5); } -.metadata-container { - --input-height: var(--metadata-input-height); - border-radius: var(--metadata-border-radius); - background-color: var(--metadata-background); - border-color: var(--metadata-border-color); - border-style: solid; - border-width: var(--metadata-border-width); - padding: var(--metadata-padding); +ul > li.task-list-item[data-task="x"], +ul > li.task-list-item[data-task="X"] { + text-decoration: var(--checklist-done-decoration); + color: var(--checklist-done-color); +} +input[type="radio"] { + border-radius: 50%; +} +input[type="radio"]:checked { + background-color: var(--interactive-accent); + border-color: var(--interactive-accent); +} +input[type="radio"]:checked::after { + -webkit-mask-size: 50%; + -webkit-mask-position: 50% 50%; + -webkit-mask-image: url("data:image/svg+xml; utf8, "); +} +.cm-s-obsidian span.cm-formatting-task { + white-space: pre; + height: 1em; + line-height: 1em; + min-width: 1em; + text-align: center; color: var(--text-muted); - position: relative; - max-width: var(--metadata-max-width); - margin-block-end: var(--p-spacing); - transform: translateX(calc(var(--size-4-1) * -1)); + background-size: 1em; + font-family: var(--font-monospace); } -.metadata-container .metadata-add-button { - padding-left: var(--size-2-3); - margin-top: 0.5em; - font-size: var(--metadata-label-font-size); +.cm-s-obsidian span.hmd-hidden-token.cm-formatting-task { + color: transparent !important; } -.markdown-embed-content .metadata-container { - display: none; +.markdown-source-view.mod-cm6 .task-list-label { + padding: 0; + margin-inline-start: -0.25em; } -.metadata-container.is-collapsed .metadata-property { - display: none; +.markdown-source-view.mod-cm6 .task-list-label .task-list-item-checkbox { + top: -0.1em; + vertical-align: middle; + margin-inline-start: var(--checkbox-margin-inline-start); + margin-inline-end: 0.25em; } -.metadata-container:focus-within .metadata-property.is-selected { - color: var(--nav-item-color-selected); - background-color: var(--nav-item-background-selected); +.markdown-source-view.mod-cm6 .cm-formatting-list-ol > .task-list-label .task-list-item-checkbox { + margin-inline-start: 2px; +} +.markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="x"], +.markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="X"] { + text-decoration: var(--checklist-done-decoration); + color: var(--checklist-done-color); +} +b, +strong { + font-weight: calc(var(--font-weight) + var(--bold-modifier)); + color: var(--bold-color); } -.metadata-properties { - display: flex; - flex-direction: column; - gap: var(--metadata-gap); +b a, +strong a { + font-weight: calc(var(--link-weight) + var(--bold-modifier)); } -.metadata-properties-heading { - display: inline-block; - padding: var(--size-4-1); - margin-bottom: var(--size-4-2); - position: relative; - line-height: 1.2; +i, +em { + font-style: italic; + color: var(--italic-color); } -.metadata-properties-heading:before { - content: ''; - border-radius: var(--metadata-property-radius); - position: absolute; - display: inline-block; - left: 0; - right: 0; - top: 0; - bottom: 0; +.markdown-rendered { + /* Highlights */ } -.metadata-properties-heading:focus:before { - box-shadow: 0 0 0 2px var(--background-modifier-border-focus); +.markdown-rendered p { + margin-block-start: var(--p-spacing); + margin-block-end: var(--p-spacing); + unicode-bidi: plaintext; } -.metadata-properties-heading .collapse-indicator { - position: absolute; - left: -22px; - padding: 0 6px; +.markdown-rendered mark { + background-color: var(--text-highlight-bg); + color: var(--text-normal); } -.metadata-properties-title { - user-select: none; - font-size: max(var(--font-ui-small), 1em); +.markdown-rendered mark .internal-link { color: var(--text-normal); - font-weight: var(--font-medium); } -.metadata-input-text { - background-color: transparent; - width: 100%; - min-height: var(--input-height); - border-width: 0px; - resize: none; - overflow-y: hidden; +.cm-s-obsidian span.cm-formatting-highlight, +.cm-s-obsidian span.cm-highlight { + background-color: var(--text-highlight-bg); + color: var(--text-normal); } -.metadata-input-text::-webkit-date-and-time-value { - text-align: left; +.cm-strong { + font-weight: calc(var(--font-weight) + var(--bold-modifier)); + color: var(--bold-color); } -.metadata-input-text.mod-date { - padding-right: 0; - width: auto; +.cm-strong a { + font-weight: calc(var(--link-weight) + var(--bold-modifier)); } -.metadata-property { - position: relative; - display: flex; - align-items: start; - padding: var(--metadata-property-padding); - border-radius: var(--metadata-property-radius); - overflow: hidden; - background-color: var(--metadata-property-background); +.cm-em { + font-style: italic; + color: var(--italic-color); + font-weight: var(--italic-weight); } -@media (hover: hover) { - .metadata-property:hover { - --metadata-divider-color: var(--metadata-divider-color-hover); - background-color: var(--metadata-property-background-hover); - box-shadow: 0 0 0 1px var(--background-modifier-border); - } +.cm-strong.cm-em { + font-weight: calc(var(--font-weight) + var(--bold-modifier)); } -.metadata-property:focus-within { - --metadata-divider-color: var(--metadata-divider-color-hover); - background-color: var(--metadata-property-background-hover); - box-shadow: 0 0 0 1px var(--background-modifier-border); - --metadata-divider-color: var(--metadata-divider-color-focus); - box-shadow: 0 0 0 2px var(--background-modifier-border-focus); +.cm-s-obsidian span.cm-error { + color: var(--text-error); } -.metadata-property-icon { - cursor: var(--cursor); - color: var(--icon-color); - display: flex; - align-items: center; - padding: var(--size-4-1) 0; - height: var(--input-height); - -webkit-user-select: none; +.outgoing-link-pane { + padding-top: var(--size-4-3); } -.metadata-property-icon:before { - content: "\200B"; - width: var(--size-4-1); +.backlink-pane { + padding-top: var(--size-4-1); } -@media (hover: hover) { - .metadata-property-icon:hover .svg-icon { - color: var(--icon-color-focused); - } +.backlink-pane, +.outgoing-link-pane { + overflow-y: auto; + flex: 1 0 0; + padding-inline-start: var(--size-4-3); + padding-inline-end: var(--size-4-3); + padding-bottom: max(var(--safe-area-inset-bottom), var(--size-4-8)); + /* #todo This should be removed and make the DOM changes instead + Section headers for linked/unlinked mentions + */ } -.metadata-property-icon[aria-disabled='true'] { - color: var(--text-muted); - opacity: 0.4; +.backlink-pane .search-result-container, +.outgoing-link-pane .search-result-container { + padding: var(--size-4-1) 1px var(--size-4-4); } -.metadata-input-number { - background-color: transparent; - width: 100%; - border-width: 0px; +.backlink-pane > .tree-item-self, +.outgoing-link-pane > .tree-item-self { + color: var(--nav-heading-color); + padding-inline-start: var(--size-4-2); } -input[type=checkbox].metadata-input-checkbox { - margin-left: var(--size-4-2); +.backlink-pane > .tree-item-self .tree-item-inner, +.outgoing-link-pane > .tree-item-self .tree-item-inner { + font-weight: var(--nav-heading-weight); } -.metadata-property-key { - display: flex; - align-self: stretch; - align-items: flex-start; - flex-direction: row; - flex-shrink: 0; - border-bottom: var(--metadata-divider-width) solid var(--metadata-divider-color); - background-color: var(--metadata-label-background); - width: var(--metadata-label-width); - min-width: var(--metadata-label-width); +.backlink-pane > .tree-item-self.is-clickable.is-collapsed, +.outgoing-link-pane > .tree-item-self.is-clickable.is-collapsed { + color: var(--nav-heading-color-collapsed); } @media (hover: hover) { - .metadata-property-key:hover { - background-color: var(--metadata-label-background-hover); + .backlink-pane > .tree-item-self.is-clickable.is-collapsed:hover, + .outgoing-link-pane > .tree-item-self.is-clickable.is-collapsed:hover { + color: var(--nav-heading-color-collapsed-hover); } } -.metadata-property-key:focus-within { - background-color: var(--metadata-label-background-active); -} -input.metadata-property-key-input { - border: none; - flex-grow: 1; - color: var(--metadata-label-text-color); - font-size: var(--metadata-label-font-size); - font-weight: var(--metadata-label-font-weight); - height: var(--input-height); - background-color: transparent; - display: flex; - align-items: center; - text-overflow: ellipsis; - overflow: hidden; +.backlink-pane > .tree-item-self .collapse-icon, +.outgoing-link-pane > .tree-item-self .collapse-icon { + display: none; } @media (hover: hover) { - input.metadata-property-key-input:hover { - background-color: transparent; + .backlink-pane > .tree-item-self:hover, + .outgoing-link-pane > .tree-item-self:hover { + color: var(--nav-heading-color-hover); + font-weight: var(--nav-heading-weight-hover); } } -input.metadata-property-key-input:active, -input.metadata-property-key-input:focus { - background-color: transparent; -} -.metadata-property button { - margin-top: var(--size-4-2); -} -.metadata-property input[type='text'], -.metadata-property input[type='date'], -.metadata-property input[type='datetime-local'], -.metadata-property input[type='number'], -.metadata-property .multi-select-container { - border-radius: 0; - border: none; -} -.metadata-property input[type='text']:hover, -.metadata-property input[type='date']:hover, -.metadata-property input[type='datetime-local']:hover, -.metadata-property input[type='number']:hover, -.metadata-property .multi-select-container:hover, -.metadata-property input[type='text']:active, -.metadata-property input[type='date']:active, -.metadata-property input[type='datetime-local']:active, -.metadata-property input[type='number']:active, -.metadata-property .multi-select-container:active, -.metadata-property input[type='text']:focus, -.metadata-property input[type='date']:focus, -.metadata-property input[type='datetime-local']:focus, -.metadata-property input[type='number']:focus, -.metadata-property .multi-select-container:focus { - box-shadow: none; - border: none; -} -.metadata-property .metadata-input-text, -.metadata-property .metadata-input-number, -.metadata-property .multi-select-container { - background-color: transparent; -} -.metadata-property .metadata-input-text:hover, -.metadata-property .metadata-input-number:hover, -.metadata-property .multi-select-container:hover { - background-color: transparent; +/* Backlinks in Preview */ +.embedded-backlinks { + border-top: 1px solid var(--background-modifier-border); } -.metadata-property .metadata-input-text:active, -.metadata-property .metadata-input-number:active, -.metadata-property .multi-select-container:active, -.metadata-property .metadata-input-text:focus, -.metadata-property .metadata-input-number:focus, -.metadata-property .multi-select-container:focus, -.metadata-property .metadata-input-text:focus-within, -.metadata-property .metadata-input-number:focus-within, -.metadata-property .multi-select-container:focus-within { - background-color: transparent; +.markdown-preview-view .embedded-backlinks { + margin-top: 3em; } -.metadata-property .metadata-input-text { - text-overflow: ellipsis; - overflow: hidden; +.embedded-backlinks .backlink-pane { + padding: 0; } -.metadata-property .multi-select-container input { - background-color: transparent; +.embedded-backlinks .backlink-pane .search-empty-state, +.embedded-backlinks .backlink-pane .tree-item-self { + /* Use quotes because Less overrides CSS math */ + font-size: max(var(--font-ui-small),var(--font-smaller)); + align-items: center; } -.metadata-property .multi-select-container { - padding: var(--size-4-1) var(--size-4-2); +.embedded-backlinks .backlink-pane > .tree-item-self { + font-size: max(var(--font-ui-small),1em); + width: fit-content; } -.metadata-property[data-property-key="tags"] { - --pill-color: var( - --tag-color); - --pill-color-hover: var( - --tag-color-hover); - --pill-color-remove: var( - --tag-color); - --pill-color-remove-hover: var( - --tag-color-hover); - --pill-decoration: var( - --tag-decoration); - --pill-decoration-hover: var( - --tag-decoration-hover); - --pill-background: var( - --tag-background); - --pill-background-hover: var( - --tag-background-hover); - --pill-border-color: var( - --tag-border-color); - --pill-border-color-hover: var( - --tag-border-color-hover); - --pill-border-width: var( - --tag-border-width); - --pill-padding-x: var( - --tag-padding-x); - --pill-padding-y: var( - --tag-padding-y); - --pill-radius: var( - --tag-radius); - --pill-weight: var( - --tag-weight); - --pill-focus-width: 100%; - --pill-focus-left-adjust: 0; +.embedded-backlinks .backlink-pane > .tree-item-self .tree-item-inner { + margin-inline-end: var(--size-2-3); } -.metadata-property[data-property-key="tags"] .multi-select-pill { - cursor: var(--cursor-link); +.embedded-backlinks .backlink-pane .tree-item-flair { + font-size: max(var(--font-ui-small),var(--font-smallest)); } -.metadata-property:not([data-property-key="tags"]) { - --pill-border-width: 0; - --pill-padding-x: 0; - --pill-padding-y: 0; - --pill-color: var(--metadata-input-text-color); +.embedded-backlinks .nav-header { + padding: var(--size-4-3) 0 0 0; + position: relative; } -.metadata-property:not([data-property-key="tags"]) .multi-select-pill { - line-height: var(--line-height-tight); +.embedded-backlinks .nav-header > .search-input-container { + width: calc(100% - 150px); + margin: 0 0 var(--size-4-3) 0; } -.metadata-property-warning-icon { - --icon-size: var(--icon-s); +.embedded-backlinks .nav-buttons-container { position: absolute; - right: var(--size-2-1); - top: var(--size-2-1); - bottom: var(--size-2-1); - align-items: center; - display: flex; - color: var(--text-warning); + inset-inline-end: 0; + top: var(--size-4-3); + z-index: 1; } -@media (hover: hover) { - .metadata-property-warning-icon:hover { - color: var(--text-warning); - background-color: rgba(var(--color-orange-rgb), 0.15); - } +/* .base files */ +.workspace-leaf-content[data-type="bases"] { + --bases-table-container-border-width: 0; + --bases-table-container-border-radius: 0; + --bases-table-cell-edge-padding: var(--size-4-1); + --bases-view-padding: 0 0 60px; } -.metadata-property-value { +.workspace-leaf-content[data-type="bases"] .bases-header { + --bases-header-padding-start: var(--size-4-2); + --bases-header-padding-end: var(--size-4-2); +} +.workspace-leaf-content[data-type="bases"] .view-content { + padding: 0; display: flex; - flex: 1 1 auto; - gap: var(--size-2-2); - align-items: center; - align-self: stretch; - min-height: var(--input-height); - background-color: var(--metadata-input-background); - border-bottom: var(--metadata-divider-width) solid var(--metadata-divider-color); + flex-direction: column; overflow: hidden; } -.metadata-property-value.mod-external-link:not(:placeholder-shown) { - text-decoration-line: var(--link-decoration); - text-decoration-thickness: var(--link-decoration-thickness); - text-decoration-color: var(--text-faint); +.bases-view { + overflow: auto; + flex-grow: 1; + padding: var(--bases-view-padding); + scrollbar-gutter: stable; } -@media (hover: hover) { - .metadata-property-value.mod-external-link:not(:placeholder-shown) .metadata-link-inner:hover { - text-decoration-line: var(--link-decoration-hover); - } +.bases-view.is-being-dragged-over { + position: relative; } -.metadata-property-value .mod-unknown { - color: var(--text-warning); - padding: var(--size-4-1) var(--size-4-2); - font-size: var(--metadata-input-font-size); - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; +.bases-view.is-being-dragged-over:after { + content: ''; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + background: hsla(var(--interactive-accent-hsl), 0.1); + z-index: var(--layer-cover); } -.metadata-property-value .multi-select-input { - font-size: inherit; +.bases-error { + padding: 0 var(--size-4-2); + color: var(--text-warning); + font-size: var(--font-ui-small); + text-align: center; } -.metadata-property-value .multi-select-container, -.metadata-property-value .metadata-link-inner, -.metadata-property-value input { - font-size: var(--metadata-input-font-size); +.bases-error .formula-preview { + background-color: var(--background-secondary); + padding: var(--size-4-2); } -.metadata-property-value .multi-select-container { - --background-modifier-form-field: transparent; - --background-modifier-border: transparent; +.bases-formula-error { + display: flex; align-items: center; -} -.metadata-property-value .multi-select-container .multi-select-pill.is-invalid { - --pill-background: transparent; - --pill-color: var(--text-error); - --pill-color-remove: var(--text-error); -} -.metadata-property-value .external-link.multi-select-pill-content, -.metadata-property-value .internal-link .multi-select-pill-content { + font-size: var(--font-ui-smaller); + color: var(--text-error); + text-decoration: underline; + text-underline-offset: 2px; + text-decoration-style: dotted; overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; } -.metadata-property-value .clickable-icon { +.bases-formula-error .warning-icon { --icon-size: var(--icon-xs); --icon-stroke: var(--icon-xs-stroke-width); - margin-right: 2px; - margin-left: -4px; - padding: 4px; + color: rgba(var(--background-modifier-error-rgb), 0.6); + display: flex; + align-items: center; + margin-inline-end: var(--size-4-1); } -.metadata-property-value .clickable-icon:hover { - background: transparent; - color: var(--text-normal); - cursor: var(--cursor-link); +.bases-formula-error .bases-formula-error-message { + overflow: hidden; + text-overflow: ellipsis; } -@media (hover: hover) { - .metadata-property-value:hover { - background-color: var(--metadata-input-background-hover); - } +/* Embedded bases */ +.block-language-base, +.bases-embed { + cursor: var(--cursor); + height: var(--bases-embed-height, auto); + overflow: hidden; } -.metadata-property-value:focus-within { - background-color: var(--metadata-input-background-active); +.app-container .block-language-base, +.app-container .bases-embed { + --bases-header-border-width: 0; } -/* Edit mode */ -.cm-hmd-frontmatter { - font-size: var(--font-smaller); - color: var(--text-muted); +.markdown-reading-view .bases-embed { + width: var(--bases-embed-width, 100%); + transform: var(--bases-embed-transform, none); } -.cm-hmd-frontmatter.cm-hmd-frontmatter.cm-def { - color: var(--text-muted); +.workspace-leaf-content[data-type="markdown"] .block-language-base .bases-view, +.workspace-leaf-content[data-type="markdown"] .bases-embed .bases-view { + border-width: var(--bases-embed-border-width); + border-style: solid; + border-color: var(--bases-embed-border-color); + border-radius: var(--bases-embed-radius); + padding: var(--bases-embed-padding); + overflow-x: auto; } -.cm-hmd-frontmatter .is-invalid { - color: var(--text-error); +.workspace-leaf-content[data-type="markdown"] .block-language-base .bases-view:empty, +.workspace-leaf-content[data-type="markdown"] .bases-embed .bases-view:empty { + display: none; } -.cm-hmd-frontmatter .error-marker { - background-color: var(--text-error); +/* Bases in Live Preview */ +.markdown-source-view.mod-cm6 .cm-content > .bases-embed, +.markdown-source-view.mod-cm6 .cm-content > .cm-lang-base { + width: var(--bases-embed-width, 100%); + transform: var(--bases-embed-transform, none); + --bases-header-padding-end: calc(var(--icon-m) + var(--size-4-4)); } -.cm-hmd-frontmatter .error-marker .is-invalid { - color: var(--text-on-accent); +.markdown-source-view.mod-cm6 .cm-content > .bases-embed .edit-block-button, +.markdown-source-view.mod-cm6 .cm-content > .cm-lang-base .edit-block-button { + opacity: 1; + top: calc(var(--bases-header-height) / 2 - var(--icon-m) / 2 - var(--size-2-2)); } -.metadata-input-longtext { - cursor: text; - white-space: pre-wrap; - -webkit-box-orient: vertical; - -webkit-line-clamp: 3; - color: var(--metadata-input-text-color); - font-size: var(--metadata-input-font-size); - max-height: 300px; - overflow-y: auto; - padding: var(--size-4-1) var(--size-4-2); - width: 100%; +/* Bases in popovers */ +.hover-popover > .bases-embed { + --bases-table-cell-edge-padding: var(--size-4-1); + --bases-embed-border-width: 0; + --bases-embed-border-radius: 0; + max-height: var(--popover-height); } -.metadata-input-longtext:focus { - -webkit-line-clamp: unset; +.hover-popover > .bases-embed .bases-view { + overflow: auto; + max-height: calc(var(--popover-height) - var(--bases-header-height)); } -.metadata-input-longtext:not(:empty) { - display: -webkit-box; +.hover-popover > .bases-embed .bases-header { + --bases-header-padding-start: var(--size-4-2); + --bases-header-padding-end: var(--size-4-2); } -.metadata-input-longtext:empty:before { - content: attr(placeholder); - color: var(--text-faint); +/* Bases embedded in Canvas */ +.canvas-node .bases-embed { + --bases-embed-border-width: 0; + --bases-embed-border-radius: 0; + --bases-header-border-width: 0 0 var(--border-width) 0; } -.metadata-link { - cursor: text; - align-items: center; - padding: var(--size-4-1) var(--size-4-2); - display: flex; - gap: var(--size-4-2); +.canvas-node-content.bases-embed { width: 100%; + height: 100%; + padding: 0; + display: flex; + flex-direction: column; + overflow: hidden; } -@media (hover: hover) { - .metadata-link:hover .metadata-link-flair { - opacity: var(--icon-opacity); - transition: 0.1s opacity 0.25s ease-in-out; - } -} -.metadata-link-inner { - cursor: var(--cursor-link); - color: var(--link-color); - text-decoration-line: var(--link-decoration); - text-decoration-thickness: var(--link-decoration-thickness); +/* Rendered values */ +.bases-rendered-value { + --input-border-width: 0; + padding: var(--metadata-input-padding); + font-size: var(--bases-table-font-size); text-overflow: ellipsis; overflow: hidden; - white-space: nowrap; -} -@media (hover: hover) { - .metadata-link-inner:hover { - text-decoration-line: var(--link-decoration-hover); - color: var(--link-color-hover); - } - .metadata-link-inner:hover ~ .metadata-link-flair { - opacity: 0; - } -} -.metadata-link-flair { - --icon-size: var(--icon-xs); - background-color: transparent; - cursor: text; - margin-left: auto; - display: flex; - align-items: center; - justify-content: center; - padding: var(--size-2-1); - border-radius: var(--clickable-icon-radius); - color: var(--icon-color); - opacity: 0; - transition: opacity 0.15s ease-in-out; - height: auto; } -.markdown-source-view .metadata-container, -.markdown-preview-view .metadata-container { - display: unset; +.bases-rendered-value input { + background: transparent; + padding: 0; } -.markdown-source-view.is-live-preview.show-properties .metadata-container { - display: var(--metadata-display-editing); +.bases-rendered-value input[disabled=true] { + pointer-events: none; + min-height: 0; } -.markdown-preview-view.show-properties .metadata-container { - display: var(--metadata-display-reading); +.bases-rendered-value input[disabled=true][type=date], +.bases-rendered-value input[disabled=true][type=datetime-local] { + width: auto; } -.markdown-source-view.is-live-preview.show-properties .metadata-container[data-property-count="0"], -.markdown-preview-view.show-properties .metadata-container[data-property-count="0"] { - display: none; +.bases-rendered-value img { + width: auto; + max-height: 100%; } -.markdown-rendered li h1, -.markdown-rendered li h2, -.markdown-rendered li h3, -.markdown-rendered li h4, -.markdown-rendered li h5 { - margin-top: 0; - margin-bottom: 0; +.bases-group-heading { + --link-color: var(--bases-group-heading-value-color); + --link-unresolved-color: var(--bases-group-heading-value-color); + --link-unresolved-opacity: 1; + --link-decoration: none; + --link-weight: var(--bases-group-heading-value-weight); + --link-color-hover: var(--bases-group-heading-value-color); + display: flex; + align-items: baseline; + line-height: var(--bases-table-row-height); + gap: var(--size-4-1); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + max-width: 100%; } -.markdown-rendered div:has( > :is(p,pre,table,ul,ol)) + div > :is(h1,h2,h3,h4,h5,h6) { - margin-top: var(--heading-spacing); +.bases-group-heading .bases-group-property { + font-size: var(--bases-group-heading-property-size); + font-weight: var(--bases-group-heading-property-weight); + color: var(--bases-group-heading-property-color); + display: var(--bases-group-heading-property-display); } -h1, -.markdown-rendered h1 { - font-variant: var(--h1-variant); - letter-spacing: -0.015em; - line-height: var(--h1-line-height); - font-size: var(--h1-size); - color: var(--h1-color); - font-weight: var(--h1-weight); - font-style: var(--h1-style); - font-family: var(--h1-font); - margin-block-start: var(--p-spacing); - margin-block-end: var(--p-spacing); +.bases-group-heading .bases-group-value { + font-size: var(--bases-group-heading-value-size); + font-weight: var(--bases-group-heading-value-weight); + overflow: hidden; + text-overflow: ellipsis; } -h1 a, -.markdown-rendered h1 a { - font-weight: inherit; +/* Bases header and toolbar */ +.bases-header { + container-type: inline-size; + container-name: bases-header; + display: flex; + align-items: center; + padding-top: 0; + padding-bottom: 0; + padding-inline-start: var(--bases-header-padding-start); + padding-inline-end: var(--bases-header-padding-end); + border-width: var(--bases-header-border-width); + border-color: var(--bases-table-border-color); + height: var(--bases-header-height); + min-height: var(--bases-header-height); + border-style: solid; } -h2, -.markdown-rendered h2 { - font-variant: var(--h2-variant); - letter-spacing: -0.015em; - line-height: var(--h2-line-height); - font-size: var(--h2-size); +.bases-header .title { color: var(--h2-color); - font-weight: var(--h2-weight); - font-style: var(--h2-style); - font-family: var(--h2-font); - margin-block-start: var(--p-spacing); - margin-block-end: var(--p-spacing); -} -h2 a, -.markdown-rendered h2 a { - font-weight: inherit; -} -h3, -.markdown-rendered h3 { - font-variant: var(--h3-variant); - letter-spacing: -0.015em; - line-height: var(--h3-line-height); - font-size: var(--h3-size); - color: var(--h3-color); - font-weight: var(--h3-weight); - font-style: var(--h3-style); - font-family: var(--h3-font); - margin-block-start: var(--p-spacing); - margin-block-end: var(--p-spacing); -} -h3 a, -.markdown-rendered h3 a { - font-weight: inherit; -} -h4, -.markdown-rendered h4 { - font-variant: var(--h4-variant); - letter-spacing: 0.015em; - line-height: var(--h4-line-height); - font-size: var(--h4-size); - color: var(--h4-color); - font-weight: var(--h4-weight); - font-style: var(--h4-style); - font-family: var(--h4-font); - margin-block-start: var(--p-spacing); - margin-block-end: var(--p-spacing); + font-size: var(--h2-size); } -h4 a, -.markdown-rendered h4 a { - font-weight: inherit; +@container (width < 460px) { + .bases-header .bases-toolbar-item:not(.bases-toolbar-result-count) { + --bases-toolbar-label-display: none; + --bases-toolbar-badge-display: none; + } } -h5, -.markdown-rendered h5 { - font-variant: var(--h5-variant); - letter-spacing: 0.015em; - font-size: var(--h5-size); - line-height: var(--h5-line-height); - color: var(--h5-color); - font-weight: var(--h5-weight); - font-style: var(--h5-style); - font-family: var(--h5-font); - margin-block-start: var(--p-spacing); - margin-block-end: var(--p-spacing); +.bases-toolbar-menu-container-header { + display: flex; + padding: var(--size-4-1); } -h5 a, -.markdown-rendered h5 a { - font-weight: inherit; +.bases-toolbar-menu-container-header .menu-title, +.bases-toolbar-menu-container-header .back-button { + display: flex; + flex-grow: 1; + align-items: center; + font-weight: var(--font-medium); + font-size: var(--font-ui-small); + padding: var(--size-2-2) var(--size-2-2); + gap: var(--size-4-1); + border-radius: var(--radius-s); + overflow: hidden; } -h6, -.markdown-rendered h6 { - font-variant: var(--h6-variant); - letter-spacing: 0.015em; - font-size: var(--h6-size); - line-height: var(--h6-line-height); - color: var(--h6-color); - font-weight: var(--h6-weight); - font-style: var(--h6-style); - font-family: var(--h6-font); - margin-block-start: var(--p-spacing); - margin-block-end: var(--p-spacing); +.bases-toolbar-menu-container-header .menu-title-inner { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } -h6 a, -.markdown-rendered h6 a { - font-weight: inherit; +@media (hover: hover) { + .bases-toolbar-menu-container-header .back-button:hover { + background-color: var(--background-modifier-hover); + } } -.cm-formatting-header { - color: var(--text-faint); +.bases-toolbar-menu-container-header .back-button .back-label { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; } -.cm-s-obsidian .cm-line.HyperMD-header { - padding-top: var(--p-spacing); +.bases-toolbar-menu-container-header .back-icon, +.bases-toolbar-menu-container-header .close-icon { + display: flex; + align-items: center; + justify-content: center; + color: var(--text-muted); } -.cm-s-obsidian .cm-line.HyperMD-header + .cm-line:not(.HyperMD-header):not(:has(>br:only-child)) { - padding-top: var(--p-spacing-empty); +.bases-toolbar-menu-container-header .close-icon { + padding: var(--size-2-2); } -.cm-s-obsidian .cm-line.HyperMD-header + .cm-line:not(.HyperMD-header):has(>br:only-child) + .cm-line.HyperMD-header { - padding-top: 0; +.bases-toolbar-menu-container-header .close-icon:hover { + color: var(--text-normal); } -.HyperMD-header-1, -.inline-title[data-level='1'], -.HyperMD-list-line .cm-header-1 { - font-variant: var(--h1-variant); - letter-spacing: -0.015em; - line-height: var(--h1-line-height); - font-size: var(--h1-size); - color: var(--h1-color); - font-weight: var(--h1-weight); - font-style: var(--h1-style); - font-family: var(--h1-font); +body:not(.is-phone) .base-toolbar-sort-item, +body:not(.is-phone) .base-toolbar-groupby-item { + --metadata-property-box-shadow: 0 0 0 1px var(--background-modifier-border-hover); } -.HyperMD-header-1 a, -.inline-title[data-level='1'] a, -.HyperMD-list-line .cm-header-1 a { - font-weight: inherit; +/* Toolbar */ +.bases-toolbar { + align-items: center; + position: relative; + display: flex; + column-gap: var(--size-2-2); + width: 100%; } -.HyperMD-header-2, -.inline-title[data-level='2'], -.HyperMD-list-line .cm-header-2 { - font-variant: var(--h2-variant); - letter-spacing: -0.015em; - line-height: var(--h2-line-height); - font-size: var(--h2-size); - color: var(--h2-color); - font-weight: var(--h2-weight); - font-style: var(--h2-style); - font-family: var(--h2-font); +.bases-toolbar .text-icon-button { + margin: 2px; } -.HyperMD-header-2 a, -.inline-title[data-level='2'] a, -.HyperMD-list-line .cm-header-2 a { - font-weight: inherit; +.bases-toolbar .bases-toolbar-item { + margin: 0 -2px; + display: flex; } -.HyperMD-header-3, -.inline-title[data-level='3'], -.HyperMD-list-line .cm-header-3 { - font-variant: var(--h3-variant); - letter-spacing: -0.015em; - line-height: var(--h3-line-height); - font-size: var(--h3-size); - color: var(--h3-color); - font-weight: var(--h3-weight); - font-style: var(--h3-style); - font-family: var(--h3-font); +.bases-toolbar .bases-toolbar-item:not(.bases-toolbar-views-menu,.bases-toolbar-result-count) .text-button-label { + display: var(--bases-toolbar-label-display); } -.HyperMD-header-3 a, -.inline-title[data-level='3'] a, -.HyperMD-list-line .cm-header-3 a { - font-weight: inherit; +.bases-toolbar .bases-toolbar-result-count { + color: var(--text-muted); + user-select: none; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-inline-end: auto; } -.HyperMD-header-4, -.inline-title[data-level='4'], -.HyperMD-list-line .cm-header-4 { - font-variant: var(--h4-variant); - letter-spacing: 0.015em; - line-height: var(--h4-line-height); - font-size: var(--h4-size); - color: var(--h4-color); - font-weight: var(--h4-weight); - font-style: var(--h4-style); - font-family: var(--h4-font); +.bases-toolbar .bases-toolbar-result-count .text-button-icon { + display: none; } -.HyperMD-header-4 a, -.inline-title[data-level='4'] a, -.HyperMD-list-line .cm-header-4 a { - font-weight: inherit; +.bases-toolbar .bases-toolbar-result-count .text-button-label { + font-size: var(--font-ui-smaller); + unicode-bidi: plaintext; } -.HyperMD-header-5, -.inline-title[data-level='5'], -.HyperMD-list-line .cm-header-5 { - font-variant: var(--h5-variant); - letter-spacing: 0.015em; - font-size: var(--h5-size); - line-height: var(--h5-line-height); - color: var(--h5-color); - font-weight: var(--h5-weight); - font-style: var(--h5-style); - font-family: var(--h5-font); +.bases-toolbar .bases-toolbar-result-count .text-icon-button.is-active { + color: var(--icon-color-active); } -.HyperMD-header-5 a, -.inline-title[data-level='5'] a, -.HyperMD-list-line .cm-header-5 a { - font-weight: inherit; +.bases-toolbar .bases-toolbar-item.bases-toolbar-views-menu { + overflow: hidden; + display: flex; } -.HyperMD-header-6, -.inline-title[data-level='6'], -.HyperMD-list-line .cm-header-6 { - font-variant: var(--h6-variant); - letter-spacing: 0.015em; - font-size: var(--h6-size); - line-height: var(--h6-line-height); - color: var(--h6-color); - font-weight: var(--h6-weight); - font-style: var(--h6-style); - font-family: var(--h6-font); +.bases-toolbar .bases-toolbar-item.bases-toolbar-views-menu .text-icon-button { + --icon-color-hover: var(--text-normal); + color: var(--text-normal); } -.HyperMD-header-6 a, -.inline-title[data-level='6'] a, -.HyperMD-list-line .cm-header-6 a { - font-weight: inherit; +.bases-toolbar .bases-toolbar-item.bases-toolbar-views-menu .text-icon-button .mod-aux { + margin-inline-start: auto; } -.HyperMD-header .cm-header-1, -.HyperMD-header .cm-header-2, -.HyperMD-header .cm-header-3, -.HyperMD-header .cm-header-4, -.HyperMD-header .cm-header-5, -.HyperMD-header .cm-header-6 { - font-size: inherit !important; +.bases-toolbar .toolbar-badge { + --flair-background: transparent; + padding: 0; + color: inherit; + opacity: 0.61; + display: var(--bases-toolbar-badge-display); + padding-inline-end: var(--size-2-1); + font-size: var(--font-ui-smaller); } -hr { - border: none; - border-top: var(--hr-thickness) solid; - border-color: var(--hr-color); - margin: 2rem 0; +.bases-toolbar .mod-error { + --flair-background: var(--text-error); + --flair-color: var(--text-on-accent); + color: var(--text-error); } -.markdown-rendered hr { - border: none; - border-top: var(--hr-thickness) solid; - border-color: var(--hr-color); +.bases-toolbar-menu-container { + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); + --bases-property-menu-item-radius: var(--radius-m); + display: flex; + flex-direction: column; + min-height: 0; + width: 100%; + max-width: 300px; } -.cm-s-obsidian .hmd-inactive-line.HyperMD-hr { - color: transparent; +.bases-toolbar-menu-container .search-input-container { + --search-icon-color: var(--text-faint); + margin-top: var(--size-4-1); + padding-bottom: var(--size-2-1); + border-bottom: var(--border-width) solid var(--background-modifier-border); +} +.bases-toolbar-menu-container .search-input-container input[type=search] { + border: 0; + box-shadow: none; background-color: transparent; } -.markdown-source-view.mod-cm6 .hr { +.bases-toolbar-items { + display: flex; + flex-direction: column; + min-height: 0; +} +.bases-toolbar-items:empty { + display: none; +} +.bases-toolbar-items .suggestion-group { + display: flex; + flex-direction: column; + padding: var(--size-2-3); +} +.bases-toolbar-items .grip-handle { display: flex; align-items: center; + align-self: center; + color: var(--text-faint); + cursor: grab; } -.markdown-source-view.mod-cm6 hr { - margin: 0; - flex: 1 0 0; +.bases-toolbar-items .grip-handle:active { + cursor: grabbing; } -.cm-s-obsidian .hmd-fold-html-stub, -.cm-s-obsidian .hmd-fold-code-stub { - display: inline-block; - font-size: 67%; - color: #999; - vertical-align: middle; - border: 1px solid #999; - padding: 0 0.2em; - border-radius: 5px; - margin: 0 0.5em; - background-color: var(--background-primary-alt); - cursor: var(--cursor); +.bases-toolbar-items .grip-handle circle { + fill: var(--text-faint); } -.cm-s-obsidian .hmd-fold-html-stub.omittable, -.cm-s-obsidian .omittable.hmd-fold-code-stub { - display: none; +.bases-toolbar-items .grip-handle:hover { + color: var(--text-muted); } -.cm-s-obsidian .hmd-fold-html-stub:hover, -.cm-s-obsidian .hmd-fold-code-stub:hover, -.cm-s-obsidian .hmd-fold-html-stub.highlight, -.cm-s-obsidian .highlight.hmd-fold-code-stub { - color: #FFF; - border-color: #C30; - background: #F40; +.bases-toolbar-items .grip-handle:hover circle { + fill: var(--text-muted); } -.cm-s-obsidian .hmd-fold-html { - position: relative; - border: 1px solid #FFF; +.bases-toolbar-items .suggestion-group[data-group="views"], +.bases-toolbar-items .suggestion-group[data-group="properties"] { + flex-shrink: 1; + overflow-y: auto; + padding-bottom: var(--size-2-3); } -@media (hover: hover) { - .cm-s-obsidian .hmd-fold-html:hover { - border: 1px dashed #999; - } +.bases-toolbar-items .suggestion-group[data-group="views"]:not(.mod-hidden) .bases-toolbar-menu-item-info-icon, +.bases-toolbar-items .suggestion-group[data-group="properties"]:not(.mod-hidden) .bases-toolbar-menu-item-info-icon { + cursor: grab; } -.cm-s-obsidian .hmd-fold-html:hover .hmd-fold-html-stub.omittable, -.cm-s-obsidian .hmd-fold-html:hover .omittable.hmd-fold-code-stub { - display: block; - right: 0; - bottom: 100%; - margin: 0; - position: absolute; - z-index: 100; +.bases-toolbar-items .suggestion-group[data-group="views"]:not(.mod-hidden) .bases-toolbar-menu-item-info-icon:active, +.bases-toolbar-items .suggestion-group[data-group="properties"]:not(.mod-hidden) .bases-toolbar-menu-item-info-icon:active { + cursor: grabbing; } -.markdown-preview-view img, -.markdown-rendered img { - -webkit-touch-callout: default; - image-rendering: -webkit-optimize-contrast; +.bases-toolbar-items .suggestion-group[data-group="properties"] .bases-toolbar-menu-item { + border-start-start-radius: var(--bases-property-menu-item-radius); + border-end-start-radius: var(--bases-property-menu-item-radius); } -.markdown-preview-view img:not([width]), -.markdown-rendered img:not([width]) { - max-width: 100%; - outline: none; +.bases-toolbar-items .suggestion-group[data-group="actions"] { + border-top: var(--border-width) solid var(--background-modifier-border); + padding: var(--size-4-1); } -.cm-s-obsidian .hmd-fold-html a > img { - border: 0; +.bases-toolbar-menu { + --input-height: 28px; + z-index: var(--layer-modal); + min-width: 220px; + max-width: 100vw; } -.cm-s-obsidian img.hmd-image { - vertical-align: middle; - width: auto; - max-width: 100%; - height: auto; +.bases-toolbar-menu .modal-header { + display: none; } -.cm-s-obsidian img.hmd-image.hmd-image-loading, -.cm-s-obsidian img.hmd-image.hmd-image-error { - min-width: 24px; - min-height: 24px; +.bases-toolbar-menu .menu-scroll { + overflow-y: auto; + padding: 0; } -.markdown-source-view.mod-cm6 .cm-line .internal-embed.image-embed { - display: inline; +.bases-toolbar-menu.bases-toolbar-filter-menu { + width: var(--bases-filter-menu-width); } -.internal-query { - margin: 0; - border-top: 1px solid var(--background-modifier-border); +.bases-toolbar-menu .bases-toolbar-section { + padding: var(--size-2-1); } -.internal-query .search-result-container { - padding: var(--size-4-2); - max-height: 800px; - overflow: auto; - border: 1px solid var(--background-modifier-border); - background-color: var(--background-secondary); - border-radius: var(--radius-m); +.bases-toolbar-menu .bases-toolbar-section:not(:last-child) { + border-bottom: var(--border-width) solid var(--background-modifier-border); +} +.bases-toolbar-menu .bases-toolbar-section-header { + --flair-background: var(--background-modifier-hover); + --flair-color: var(--text-muted); + display: flex; + align-items: center; + padding: var(--size-4-2) var(--size-4-3) var(--size-4-2) var(--size-4-3); + color: var(--text-normal); + font-weight: var(--font-medium); + font-size: var(--font-ui-small); + gap: var(--size-4-1); +} +.bases-toolbar-menu .bases-toolbar-section-header:hover { + color: var(--text-normal); +} +.bases-toolbar-menu .bases-toolbar-section-header .flair { + margin-inline-start: var(--size-4-1); +} +.bases-toolbar-menu .bases-sort-container .bases-toolbar-items, +.bases-toolbar-menu .bases-groupby-container .bases-toolbar-items { + gap: var(--size-2-3); + padding: var(--size-4-1) 0 var(--size-4-2); +} +.bases-toolbar-menu .bases-sort-container .bases-toolbar-section-content, +.bases-toolbar-menu .bases-groupby-container .bases-toolbar-section-content { + padding: 0 var(--size-4-2); } -.internal-query .internal-query-header { - text-align: center; - padding: var(--size-4-3) 0 var(--size-4-3) var(--size-4-1); - color: var(--text-normal); - display: flex; - justify-content: flex-start; - align-items: center; +.bases-toolbar-menu .bases-sort-container .bases-sort-property-container.mod-error, +.bases-toolbar-menu .bases-groupby-container .bases-sort-property-container.mod-error, +.bases-toolbar-menu .bases-sort-container .bases-groupby-property-container.mod-error, +.bases-toolbar-menu .bases-groupby-container .bases-groupby-property-container.mod-error { + box-shadow: 0 0 0 var(--border-width) var(--background-modifier-error); +} +.bases-toolbar-menu .bases-sort-container .bases-sort-property-container .bases-sort-property, +.bases-toolbar-menu .bases-groupby-container .bases-sort-property-container .bases-sort-property, +.bases-toolbar-menu .bases-sort-container .bases-groupby-property-container .bases-sort-property, +.bases-toolbar-menu .bases-groupby-container .bases-groupby-property-container .bases-sort-property, +.bases-toolbar-menu .bases-sort-container .bases-sort-property-container .bases-groupby-property, +.bases-toolbar-menu .bases-groupby-container .bases-sort-property-container .bases-groupby-property, +.bases-toolbar-menu .bases-sort-container .bases-groupby-property-container .bases-groupby-property, +.bases-toolbar-menu .bases-groupby-container .bases-groupby-property-container .bases-groupby-property { + flex-grow: 1; } -.internal-query .internal-query-header-icon { - color: var(--text-faint); - margin-right: var(--size-4-1); - display: flex; +.bases-toolbar-menu .bases-sort-container .bases-sort-property-container .bases-sort-direction, +.bases-toolbar-menu .bases-groupby-container .bases-sort-property-container .bases-sort-direction, +.bases-toolbar-menu .bases-sort-container .bases-groupby-property-container .bases-sort-direction, +.bases-toolbar-menu .bases-groupby-container .bases-groupby-property-container .bases-sort-direction { + min-width: 5.25em; + border-left: var(--border-width) solid var(--background-modifier-border); + padding-inline-start: var(--size-2-3); +} +.bases-toolbar-menu .bases-sort-container .bases-sort-property-container .bases-sort-direction .combobox-button-label, +.bases-toolbar-menu .bases-groupby-container .bases-sort-property-container .bases-sort-direction .combobox-button-label, +.bases-toolbar-menu .bases-sort-container .bases-groupby-property-container .bases-sort-direction .combobox-button-label, +.bases-toolbar-menu .bases-groupby-container .bases-groupby-property-container .bases-sort-direction .combobox-button-label { + margin-inline-end: 0; + margin-inline-start: auto; } -.internal-query .internal-query-header-title { - font-weight: var(--font-medium); +.bases-toolbar-menu .bases-sort-container .text-icon-button, +.bases-toolbar-menu .bases-groupby-container .text-icon-button { + width: 100%; + margin-bottom: var(--size-4-2); } -.internal-query .internal-query-header-title:before, -.internal-query .internal-query-header-title:after { - content: '"'; +.base-toolbar-sort-item, +.base-toolbar-groupby-item { + --input-shadow: none; + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); + --metadata-divider-width: 0px; + --metadata-label-width: 7em; + --metadata-property-background: var(--interactive-normal); + display: flex; + align-items: center; + gap: var(--size-4-1); + border-radius: var(--radius-s); + background-color: var(--menu-background); } -/* Default markers */ -ul ul, -ol ul, -ol ol ul, -ol ul ul, -ul ol ul, -ul ul ul { - list-style-type: disc; +.base-toolbar-sort-item .combobox-button, +.base-toolbar-groupby-item .combobox-button { + box-shadow: none; + border-radius: 0; } -ol { - list-style-type: var(--list-numbered-style); +.base-toolbar-sort-item .combobox-button.has-focus, +.base-toolbar-groupby-item .combobox-button.has-focus, +.base-toolbar-sort-item .combobox-button:focus, +.base-toolbar-groupby-item .combobox-button:focus, +.base-toolbar-sort-item .combobox-button:hover, +.base-toolbar-groupby-item .combobox-button:hover { + box-shadow: none; } -ol > li::marker, -ul > li::marker { - color: var(--list-marker-color); +.base-toolbar-sort-item .metadata-property, +.base-toolbar-groupby-item .metadata-property { + flex: 1 1 auto; } -ol > li.is-collapsed::marker, -ul > li.is-collapsed::marker { - color: var(--list-marker-color-collapsed); +.base-toolbar-sort-item .bases-sort-property, +.base-toolbar-groupby-item .bases-sort-property, +.base-toolbar-sort-item .filter-property-select, +.base-toolbar-groupby-item .filter-property-select { + max-width: 14em; } -/* Indent depth - Consistency in horizontal positioning of lists -*/ -.markdown-rendered ul, -.markdown-rendered ol { - padding-inline-start: var(--list-indent); - margin-block-start: var(--p-spacing); - margin-block-end: var(--p-spacing); - /* Space between list items */ +.bases-toolbar-menu-form { + display: flex; + flex-direction: column; + gap: var(--size-4-2); + padding: var(--size-4-1) var(--size-4-2) var(--size-4-2); + font-size: var(--font-ui-small); + overflow-y: auto; + min-height: 0; } -.markdown-rendered ul ul, -.markdown-rendered ol ul, -.markdown-rendered ul ol, -.markdown-rendered ol ol { - margin-block-start: 0; - margin-block-end: 0; +.bases-toolbar-menu-form.view-config-menu .formula-editor .cm-content { + min-height: var(--input-height); } -.markdown-rendered ul li p:first-of-type, -.markdown-rendered ol li p:first-of-type { - margin-block-start: 0; +.bases-toolbar-menu-form .formula-editor { + resize: both; + overflow: auto; + min-width: 100%; + max-width: 260px; } -.markdown-rendered ul li p:last-of-type, -.markdown-rendered ol li p:last-of-type { - margin-block-end: 0; +.bases-toolbar-menu-form .formula-editor .cm-editor { + height: 100%; } -.markdown-rendered ul > li, -.markdown-rendered ol > li { - padding-top: var(--list-spacing); - padding-bottom: var(--list-spacing); - position: relative; +.bases-toolbar-menu-form .formula-editor .cm-content { + min-height: calc(var(--input-height) * 3); } -.cm-formatting-list-ul, -.cm-formatting-list-ol { - font-variant-numeric: tabular-nums; - padding-inline-start: 0.75em; +.bases-toolbar-menu-form .input-group-container { + display: flex; + flex-direction: column; + gap: var(--size-4-2); } -.markdown-source-view.mod-cm6 .HyperMD-list-line-nobullet .cm-indent { - min-width: var(--list-indent); +.bases-toolbar-menu-form .input-group-divider { + margin-left: calc(var(--size-4-2) * -1); + margin-right: calc(var(--size-4-2) * -1); + border-top: var(--border-width) solid var(--background-modifier-border); + width: calc(100% + var(--size-4-4)); } -.cm-s-obsidian .cm-formatting-list { - color: var(--list-marker-color); +.bases-toolbar-menu-form .input-row + .input-group-divider { + margin-top: var(--size-4-1); } -.cm-s-obsidian .is-collapsed ~ .cm-formatting-list { - color: var(--list-marker-color-collapsed); +.bases-toolbar-menu-form .input-group-header { + align-items: center; + display: flex; + font-size: var(--font-ui-small); + font-weight: var(--font-semibold); + gap: var(--size-4-2); } -/* Indent depth - Consistency in horizontal positioning of lists -*/ -.cm-line.HyperMD-list-line { - tab-size: var(--list-indent); +.bases-toolbar-menu-form .input-group-content { + display: flex; + flex-direction: column; + gap: var(--size-2-3); } -/* Space between list items */ -.markdown-source-view ol > li, -.markdown-source-view ul > li, -.markdown-preview-view ol > li, -.markdown-preview-view ul > li, -.mod-cm6 .HyperMD-list-line.cm-line { - padding-top: var(--list-spacing); - padding-bottom: var(--list-spacing); +.bases-toolbar-menu-form .input-row .input-row-label { + color: var(--text-normal); + padding: var(--size-2-2) var(--size-2-1); + display: flex; + align-items: center; + gap: var(--size-2-1); } -/* Allow clicking on the bullet to collapse */ -/* #todo move this into folding.less */ -.markdown-rendered .list-collapse-indicator { - margin-inline-start: -2.65em; - padding-inline-end: 2em; +.bases-toolbar-menu-form .input-row .help-icon { + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); + color: var(--text-faint); + padding: var(--size-2-1) var(--size-2-2); } -.markdown-rendered .list-bullet { - float: left; - margin-inline-start: -0.8em; +.bases-toolbar-menu-form .input-row .input-row-content { + width: 100%; + display: flex; + align-items: center; + min-height: var(--input-height); } -.markdown-rendered .task-list-item > .list-bullet { - display: none; +.bases-toolbar-menu-form .input-row .input-row-content .combobox-button, +.bases-toolbar-menu-form .input-row .input-row-content button, +.bases-toolbar-menu-form .input-row .input-row-content select, +.bases-toolbar-menu-form .input-row .input-row-content textarea, +.bases-toolbar-menu-form .input-row .input-row-content input { + flex-grow: 1; } -/* Remove default bullets so we can replace them */ -.markdown-rendered ul.has-list-bullet { - list-style-type: '\200B'; +.bases-toolbar-menu-form .input-row .input-row-content .combobox-button.mod-error, +.bases-toolbar-menu-form .input-row .input-row-content button.mod-error, +.bases-toolbar-menu-form .input-row .input-row-content select.mod-error, +.bases-toolbar-menu-form .input-row .input-row-content textarea.mod-error, +.bases-toolbar-menu-form .input-row .input-row-content input.mod-error { + box-shadow: 0 0 0 var(--border-width) var(--background-modifier-error); } -.markdown-rendered ul.has-list-bullet > li::marker { - color: transparent; +.bases-toolbar-menu-form .input-row .formula-editor-status { + display: flex; + align-items: center; + font-size: var(--font-ui-smaller); + margin-top: var(--size-4-1); + color: var(--text-success); } -.list-bullet { - /* hide bullet when editing the marker */ - color: transparent; - position: relative; - display: inline-flex; - justify-content: center; +.bases-toolbar-menu-form .input-row .formula-editor-status .status-icon { + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); + display: flex; align-items: center; - will-change: transform; + margin-right: var(--size-4-1); } -.list-bullet:before { - content: '\200B'; +.bases-toolbar-menu-form .input-row .formula-editor-status.mod-empty { + color: var(--text-faint); } -.list-bullet:after { - position: absolute; - content: '\200B'; - pointer-events: none; - color: var(--list-marker-color); - border-radius: var(--list-bullet-radius); - width: var(--list-bullet-size); - height: var(--list-bullet-size); - border: var(--list-bullet-border); - transform: var(--list-bullet-transform); - background-color: var(--list-marker-color); - transition: transform 0.15s, box-shadow 0.15s; - will-change: transform; +.bases-toolbar-menu-form .input-row .formula-editor-status.mod-error { + color: var(--text-error); } -.list-bullet::selection { - background-color: transparent !important; +.view-config-menu .formula-editor-status:not(.mod-error) { + display: none; } -.is-live-preview .list-bullet { - min-width: 0.75em; +.bases-toolbar-menu-actions { + padding: 0 var(--size-4-1) var(--size-4-1); +} +.bases-toolbar-menu-item { + display: flex; + align-items: center; + padding: var(--size-2-2) var(--size-2-2); + padding-inline-start: var(--size-2-3); + border-radius: var(--radius-s); + gap: var(--size-4-2); + width: 100%; } @media (hover: hover) { - .list-collapse-indicator:hover ~ .list-bullet:after, - .cm-fold-indicator:hover ~ .list-bullet:after, - .list-collapse-indicator:hover ~ .cm-formatting-list .list-bullet:after, - .cm-fold-indicator:hover ~ .cm-formatting-list .list-bullet:after { - background-color: var(--list-marker-color-hover); - box-shadow: 0 0 0 4px var(--background-modifier-hover); - } - li.is-collapsed .list-collapse-indicator:hover ~ .list-bullet:after, - li.is-collapsed .cm-fold-indicator:hover ~ .list-bullet:after, - .list-collapse-indicator:hover.is-collapsed ~ .list-bullet:after, - .cm-fold-indicator:hover.is-collapsed ~ .list-bullet:after, - li.is-collapsed .list-collapse-indicator:hover ~ .cm-formatting-list .list-bullet:after, - li.is-collapsed .cm-fold-indicator:hover ~ .cm-formatting-list .list-bullet:after, - .list-collapse-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after, - .cm-fold-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after { - background-color: var(--list-marker-color-collapsed); - box-shadow: 0 0 0 4px var(--background-modifier-active-hover); + .bases-toolbar-menu-item:hover { + background-color: var(--background-modifier-hover); } } -li.is-collapsed .list-bullet:after, -.is-collapsed ~ .cm-formatting-list .list-bullet:after { - background-color: var(--list-marker-color-collapsed); - box-shadow: 0 0 0 4px var(--background-modifier-active-hover); +.bases-toolbar-menu-item.mod-destructive { + color: var(--text-error); } -/* Allow clicking on the bullet to collapse */ -/* #todo move this into folding.less */ -.markdown-source-view.mod-cm6 { - /* only allow this if line is not active, so that it's still editable */ +.bases-toolbar-menu-item.mod-hidden { + --icon-color: var(--text-faint); + color: var(--text-faint); } -.markdown-source-view.mod-cm6 .cm-fold-indicator .collapse-indicator { - padding-right: 0.25rem; +.bases-toolbar-menu-item.mod-hidden .bases-property-visibility-button { + opacity: 1; +} +.bases-toolbar-menu-item .bases-property-visibility-button { + --icon-size: var(--icon-s); + opacity: 0; + display: flex; + align-items: center; } -.markdown-source-view.mod-cm6 .cm-line.HyperMD-list-line.HyperMD-list-line .cm-fold-indicator .collapse-indicator { - right: -0.5rem; +.bases-toolbar-menu-item.is-selected input[type=checkbox] { + box-shadow: 0 0 0 2px var(--background-modifier-border-focus); } -.markdown-source-view.mod-cm6 .cm-line:not(.cm-active):not(.HyperMD-header):not(.HyperMD-task-line) .cm-fold-indicator .collapse-indicator { - padding-right: 1rem; - right: -1.25rem; +.bases-toolbar-menu-item.is-selected .bases-property-visibility-button { + opacity: 1; + color: var(--text-muted); } -@media (hover: hover) { - .list-collapse-indicator:hover ~ .list-bullet:after, - .cm-fold-indicator:hover ~ .list-bullet:after, - .list-collapse-indicator:hover ~ .cm-formatting-list .list-bullet:after, - .cm-fold-indicator:hover ~ .cm-formatting-list .list-bullet:after { - background-color: var(--list-marker-color-hover); - box-shadow: 0 0 0 4px var(--background-modifier-hover); - } - li.is-collapsed .list-collapse-indicator:hover ~ .list-bullet:after, - li.is-collapsed .cm-fold-indicator:hover ~ .list-bullet:after, - .list-collapse-indicator:hover.is-collapsed ~ .list-bullet:after, - .cm-fold-indicator:hover.is-collapsed ~ .list-bullet:after, - li.is-collapsed .list-collapse-indicator:hover ~ .cm-formatting-list .list-bullet:after, - li.is-collapsed .cm-fold-indicator:hover ~ .cm-formatting-list .list-bullet:after, - .list-collapse-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after, - .cm-fold-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after { - background-color: var(--list-marker-color-collapsed); - box-shadow: 0 0 0 4px var(--background-modifier-active-hover); - } +.bases-toolbar-menu-item .clickable-icon { + margin: calc(var(--size-2-2) * -1); + padding: var(--size-2-2); } -.cm-s-obsidian .HyperMD-list-line.HyperMD-list-line-nobullet { - padding-top: initial; +.bases-toolbar-menu-item .clickable-icon:hover { + color: var(--text-normal); +} +.bases-toolbar-menu-item.mod-active { + --icon-color: var(--text-normal); + font-weight: var(--font-medium); +} +.bases-toolbar-menu-item .bases-toolbar-menu-item-info { + display: flex; + align-items: center; + gap: var(--size-4-2); + font-size: var(--font-ui-small); + flex-grow: 1; + overflow: hidden; } -.markdown-source-view.mod-cm6 .cm-hmd-list-indent { - display: inline-block; +.bases-toolbar-menu-item .bases-toolbar-menu-item-name { + overflow: hidden; white-space: nowrap; + text-overflow: ellipsis; } -.markdown-source-view.mod-cm6 .cm-formatting-list-ul, -.markdown-source-view.mod-cm6 .cm-formatting-list-ol { - white-space: pre; +.bases-toolbar-menu-item:not(.mod-destructive) .bases-toolbar-menu-item-info-icon { + color: var(--icon-color); } -a { - color: var(--link-color); - outline: none; - text-decoration-line: var(--link-decoration); - text-decoration-thickness: var(--link-decoration-thickness); - cursor: var(--cursor-link); +.bases-toolbar-menu-item:not(.mod-destructive) .bases-toolbar-menu-item-info-icon.mod-error { + color: var(--text-error); } -@media (hover: hover) { - a:hover { - color: var(--link-color-hover); - text-decoration-line: var(--link-decoration-hover); - } +.bases-toolbar-menu-item .bases-toolbar-menu-item-info-icon { + cursor: var(--cursor); + display: flex; + align-items: center; + user-select: none; + -webkit-user-select: none; } -.external-link { - color: var(--link-external-color); - text-decoration-line: var(--link-external-decoration); - background-position: center right; - background-repeat: no-repeat; - background-image: linear-gradient(transparent, transparent), url(public/images/874d8b8e340f75575caa.svg); - background-size: 13px; - padding-right: 16px; - background-position-y: 4px; - cursor: var(--cursor-link); - filter: var(--link-external-filter); +.bases-toolbar-menu-item .bases-toolbar-menu-item-info-icon:before { + content: "\200B"; + width: 0; } -@media (hover: hover) { - .external-link:hover { - color: var(--link-external-color-hover); - text-decoration-line: var(--link-external-decoration-hover); - } +.bases-toolbar-menu-item .bases-toolbar-menu-action-icon { + color: var(--text-muted); + display: flex; + align-items: center; + justify-content: center; } -.metadata-container .internal-link, -.markdown-rendered .internal-link { - cursor: var(--cursor-link); - text-decoration-line: var(--link-decoration); - color: var(--link-color); +/* Menu: Filter */ +.bases-query-container { + padding: var(--size-4-2); } -@media (hover: hover) { - .metadata-container .internal-link:hover, - .markdown-rendered .internal-link:hover { - color: var(--link-color-hover); - text-decoration-line: var(--link-decoration-hover); - } +.bases-query-container .filter-group { + gap: var(--size-2-3); + display: flex; + flex-direction: column; + width: 100%; } -.metadata-container .internal-link.is-unresolved, -.markdown-rendered .internal-link.is-unresolved { - color: var(--link-unresolved-color); - opacity: var(--link-unresolved-opacity); - filter: var(--link-unresolved-filter); - text-decoration-style: var(--link-unresolved-decoration-style); - text-decoration-color: var(--link-unresolved-decoration-color); +.bases-query-container .filter-group .filter-group-statements { + width: 100%; + gap: var(--size-2-3); + display: flex; + flex-direction: column; } -@media (hover: hover) { - .metadata-container .internal-link.is-unresolved:hover, - .markdown-rendered .internal-link.is-unresolved:hover { - opacity: 1; - color: var(--link-color-hover); - text-decoration-color: var(--link-color-hover); - text-decoration-line: var(--link-decoration-hover); - } +.bases-query-container .filter-group .filter-group { + background-color: var(--background-primary-alt); + border: var(--table-border-width) solid var(--table-border-color); + padding: var(--size-2-3); + border-radius: var(--radius-m); } -.cm-s-obsidian span.cm-hmd-internal-link { - color: var(--link-color); +.bases-query-container .filter-group .filter-group-actions { + padding-top: var(--size-2-2); + display: flex; } -.cm-s-obsidian span.cm-hmd-internal-link:hover { - text-decoration-line: var(--link-decoration-hover); - color: var(--link-color-hover); +.bases-query-container .filter-group .filter-group-header-actions { + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); + display: flex; } -.cm-s-obsidian span.cm-link { - color: var(--link-external-color); - word-break: break-word; +.bases-query-container .filter-group .filter-group-header { + display: flex; + align-items: center; + justify-content: space-between; + padding-bottom: var(--size-2-1); } -@media (hover: hover) { - .cm-s-obsidian span.cm-link:hover { - color: var(--link-external-color-hover); - text-decoration-line: var(--link-external-decoration-hover); - } +.bases-query-container .filter-group .filter-group-header .conjunction.dropdown { + padding-top: 0; + background-color: transparent; + font-size: var(--font-ui-small); + box-shadow: none; + text-align: start; } -.cm-s-obsidian span.cm-formatting-link.cm-url, -.cm-s-obsidian span.cm-url { - color: var(--link-external-color); - text-decoration-line: var(--link-external-decoration); - filter: var(--link-external-filter); - word-break: break-all; +.bases-query-container .filter-group .filter-group-header .conjunction.dropdown:hover { + background-color: var(--background-modifier-hover); } -@media (hover: hover) { - .cm-s-obsidian span.cm-formatting-link.cm-url:hover, - .cm-s-obsidian span.cm-url:hover { - color: var(--link-external-color-hover); - text-decoration-line: var(--link-external-decoration-hover); - } +.bases-query-container .filter-group .filter-group-header .filter-group-label { + color: var(--text-muted); + font-size: var(--font-ui-small); } -.cm-s-obsidian span.cm-formatting-link { - color: var(--text-faint); +.bases-query-container .filter-row { + display: flex; + align-items: center; + gap: var(--size-4-2); } -.cm-s-obsidian span.hmd-link-icon { - width: 20px; - height: 16px; - display: inline-block; - vertical-align: middle; - opacity: 0.4; +.bases-query-container .filter-row .filter-statement { + display: flex; + row-gap: var(--size-4-1); + flex-grow: 1; + flex-direction: column; } -@media (hover: hover) { - .cm-s-obsidian span.hmd-link-icon:hover { - opacity: 1; - } +.bases-query-container .filter-row .filter-row-error { + color: var(--text-error); + font-size: var(--font-ui-smaller); } -.cm-s-obsidian span.hmd-link-icon:after { - content: ""; +.bases-query-container .filter-row .conjunction { + min-width: 4.5rem; + font-size: var(--font-ui-small); + text-align: end; } -.markdown-source-view.mod-cm6 .is-unresolved { - color: var(--link-unresolved-color); - opacity: var(--link-unresolved-opacity); - filter: var(--link-unresolved-filter); +.bases-query-container .filter-row .formula-editor-container { + font-size: var(--font-ui-small); } -@media (hover: hover) { - .markdown-source-view.mod-cm6 .is-unresolved:hover { - opacity: 1; - color: var(--link-color-hover); - text-decoration-color: var(--link-color-hover); - } +.bases-query-container .filter-row.mod-group > .conjunction { + display: none; } -.markdown-source-view.mod-cm6 .is-unresolved .cm-underline { - text-decoration-line: var(--link-decoration); - text-decoration-style: var(--link-unresolved-decoration-style); - text-decoration-color: var(--link-unresolved-decoration-color); +.bases-query-container .filter-row .filter-property-select { + width: 100%; } -.markdown-source-view.mod-cm6 .cm-underline { - text-decoration-line: var(--link-decoration); - text-decoration-thickness: var(--link-decoration-thickness); +.bases-query-container .filter-row .filter-operator { + border-width: 0 1px; + max-width: 33%; + align-self: stretch; + height: auto; } -body.is-mobile .markdown-source-view.mod-cm6 .cm-underline { - -webkit-user-select: text; +.bases-query-container .filter-row .combobox-button { + box-shadow: none; + border-radius: 0; } -.markdown-source-view.mod-cm6.is-live-preview .cm-hashtag.cm-meta, -.markdown-source-view.mod-cm6 .cm-hmd-internal-link .cm-underline, -.markdown-source-view.mod-cm6 .cm-link .cm-underline, -.markdown-source-view.mod-cm6 .cm-url .cm-underline { - cursor: var(--cursor-link); +.bases-query-container .filter-row .combobox-button.has-focus, +.bases-query-container .filter-row .combobox-button:focus, +.bases-query-container .filter-row .combobox-button:hover { + box-shadow: none; } -@media (hover: hover) { - .markdown-source-view.mod-cm6 .cm-hmd-internal-link .cm-underline:hover { - text-decoration-line: var(--link-decoration-hover); - } +.bases-query-container .filter-expression { + --input-shadow: none; + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); + --metadata-divider-width: 0px; + --metadata-label-width: 7em; + --metadata-input-font-size: var(--font-ui-small); + --metadata-property-box-shadow: 0 0 0 1px var(--background-modifier-border-hover); + background-color: var(--interactive-normal); + width: 100%; + align-items: center; + display: flex; } -.markdown-source-view.mod-cm6 .cm-link .cm-underline, -.markdown-source-view.mod-cm6 .cm-url .cm-underline { - text-decoration-line: var(--link-external-decoration); +.bases-query-container .filter-expression.mod-error { + box-shadow: 0 0 0 var(--border-width) var(--background-modifier-error); } -@media (hover: hover) { - .markdown-source-view.mod-cm6 .cm-link .cm-underline:hover, - .markdown-source-view.mod-cm6 .cm-url .cm-underline:hover { - color: var(--link-external-color-hover); - text-decoration-line: var(--link-external-decoration-hover); - } +.bases-query-container .filter-expression.mod-error .filer-expression-mode-toggle { + --icon-color: var(--text-error); } -.cm-s-obsidian.HyperMD-with-alt span.cm-url, -.cm-s-obsidian.HyperMD-with-alt span.cm-link, -.cm-s-obsidian.HyperMD-with-alt span.cm-hashtag, -.cm-s-obsidian.HyperMD-with-ctrl span.cm-url, -.cm-s-obsidian.HyperMD-with-ctrl span.cm-link, -.cm-s-obsidian.HyperMD-with-ctrl span.cm-hashtag { - cursor: var(--cursor-link); +.bases-query-container .filter-expression .filter-row-actions { + display: flex; + padding: var(--size-2-1); + margin-inline-start: auto; + height: var(--input-height); } -.inline-block { - display: inline-block; - vertical-align: middle; +.bases-query-container .filter-lhs-container { + position: relative; } -.hidden-token { - display: inline; - font-size: 1px !important; - letter-spacing: -1ch; - font-family: monospace; - color: transparent; +.bases-query-container .filter-lhs-container .metadata-property-warning-icon { + top: var(--size-2-2); + bottom: unset; } -.cm-s-obsidian { - /* tooltip for addon/hover */ - /* gutter for addon/click */ - /* addon/fold */ - /* addon/fold-emoji */ +.bases-query-container .filter-rhs-container { + display: flex; + align-items: center; } -.cm-s-obsidian span.hmd-hidden-token.cm-formatting-em, -.cm-s-obsidian span.hmd-hidden-token.cm-formatting-strong, -.cm-s-obsidian span.hmd-hidden-token.cm-formatting-strikethrough, -.cm-s-obsidian span.hmd-hidden-token.cm-formatting-code, -.cm-s-obsidian span.hmd-hidden-token.cm-formatting-link { - display: inline; - font-size: 1px !important; - letter-spacing: -1ch; - font-family: monospace; - color: transparent; +.bases-query-container .filter-rhs-container .combobox-button { + flex-grow: 1; } -.cm-s-obsidian div.HyperMD-hover > .HyperMD-hover-content { - background-color: #fff; - color: #000; - border: 1px solid #000; - padding: 0.5em; +.bases-query-container .filter-rhs-container .metadata-input-longtext { + font-family: inherit; + outline: none; + display: flex; + align-items: center; + word-break: break-word; } -.cm-s-obsidian div.HyperMD-hover > .HyperMD-hover-content p { - margin: 0.2em 0; +.bases-query-container .filter-rhs-container .metadata-link-inner { + width: auto; } -.cm-s-obsidian .HyperMD-goback { - width: 1px; +.bases-query-container .filter-rhs-container .metadata-link-flair { + display: none; } -.cm-s-obsidian div.HyperMD-goback-button { - background-color: #ddd; - color: #333; - text-align: center; - cursor: var(--cursor); +.tooltip.bases-filter-query-message { + animation: none; + z-index: var(--layer-popover); +} +.hover-popover.bases-new-item-popover .metadata-container { + display: var(--metadata-display-editing); } -.cm-s-obsidian .hmd-link-icon:after { - content: "🔗»"; - color: #009; - text-shadow: 0 0 2px #69F; +.bases-view[data-view-type="cards"] { + --bases-view-padding: var(--size-4-3); + --bases-embed-padding: var(--size-4-1) 1px; } -.cm-s-obsidian img.hmd-emoji { - height: 1.2em; - vertical-align: middle; +.is-phone .bases-view[data-view-type="cards"] { + --bases-embed-padding: var(--size-4-2); } -.cm-s-obsidian { - line-height: var(--line-height-normal); +.bases-cards-container { + background-color: var(--bases-cards-container-background); + position: relative; + width: 100%; + gap: var(--size-4-2); } -.cm-s-obsidian .hmd-fold-html-stub, -.cm-s-obsidian .hmd-fold-code-stub, -.cm-s-obsidian .cm-inline-code, -.cm-s-obsidian .HyperMD-codeblock, -.cm-s-obsidian .HyperMD-hr, -.cm-s-obsidian .cm-hmd-frontmatter, -.cm-s-obsidian .cm-hmd-orgmode-markup, -.cm-s-obsidian .cm-formatting-code, -.cm-s-obsidian .cm-math, -.cm-s-obsidian span.hmd-fold-math-placeholder, -.cm-s-obsidian .hmd-fold-html kbd { - font-family: var(--font-monospace); +.is-grouped .bases-cards-container .bases-group-heading { + position: absolute; + padding: var(--size-4-1) 0 var(--size-4-2); } -.cm-s-obsidian span.cm-hmd-toc { - font-size: 24pt; - color: #999; +.is-grouped .bases-cards-container .bases-cards-group { + padding: 0 0 var(--size-4-4) 0; + border-color: var(--background-modifier-border); + border-width: 0 0 1px 0; + border-style: solid; } -.cm-s-obsidian .HyperMD-header-line { - color: var(--text-muted); +.bases-cards-group { + position: absolute; + gap: var(--size-4-3); } -.cm-s-obsidian span.cm-hmd-escape-backslash { - color: var(--text-faint); +.bases-cards-item { + position: absolute; + cursor: var(--cursor-link); + user-select: none; + border-radius: var(--radius-m); + background-color: var(--bases-cards-background); + box-shadow: var(--bases-cards-shadow); + overflow: hidden; + transition: box-shadow var(--anim-duration-fast) ease-in-out; + contain: strict; + padding: var(--size-4-2) 0 var(--size-2-1); + gap: var(--size-4-2); + --input-height: var(--bases-cards-line-height); } -.cm-s-obsidian span.cm-footref, -.cm-s-obsidian span.cm-blockid { - display: inline-block; - font-size: var(--font-smallest); - vertical-align: text-top; - color: var(--text-muted); - margin-top: -0.2em; +@media (hover: hover) { + .bases-cards-item:hover { + transition: box-shadow var(--anim-duration-fast) ease-in-out; + box-shadow: var(--bases-cards-shadow-hover); + } } -.cm-s-obsidian .hmd-file-uploading { - outline: 2px dashed #CCC; - outline-offset: -2px; - animation: hmd-file-uploading-ani 1.5s linear infinite; +.bases-cards-cover { + position: absolute; + overflow: hidden; + height: 100px; + background-color: var(--bases-cards-cover-background); + background-repeat: no-repeat; + background-position: center center; } -.cm-s-obsidian .hmd-file-uploaded { - outline: 2px solid #6C3; - outline-offset: -2px; +.bases-cards-property { + position: absolute; + overflow: hidden; } -.cm-s-obsidian .HyperMD-goback { - width: 1px; +.bases-cards-property.mod-title { + --link-color: var(--text-normal); + --link-unresolved-color: var(--text-normal); + --link-unresolved-opacity: 1; + --link-decoration: none; + --link-weight: calc(var(--font-weight) + var(--bold-modifier)); + font-weight: calc(var(--font-weight) + var(--bold-modifier)); + pointer-events: none; } -.cm-s-obsidian div.HyperMD-goback-button { - padding-right: 15px; - border-radius: 0 10px 10px 0; - display: inline-block; - text-align: center; - background-color: #8daed9; - color: #f7f7f7; - cursor: var(--cursor); +.bases-cards-property.mod-title .bases-cards-label { + display: none; } -.cm-s-obsidian .hmd-fold-code-image { - text-align: center; +.bases-cards-property.mod-title .bases-cards-line { + font-size: var(--font-ui-medium); } -.cm-s-obsidian .HyperMD-header, -.cm-s-obsidian .HyperMD-footnote, -.cm-s-obsidian .HyperMD-codeblock, -.cm-s-obsidian .HyperMD-hr { - clear: left; +.bases-cards-label, +.bases-cards-line { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; } -.cm-s-obsidian .cm-s-obsidian span.hmd-hidden-token.cm-formatting-task { - color: transparent !important; +.bases-cards-label { + font-size: var(--font-ui-smaller); + color: var(--text-muted); + padding: 0 var(--size-4-2); } -.cm-s-obsidian .hmd-inactive-line span.cm-hmd-escape-backslash, -.cm-s-obsidian .hmd-inactive-line span.cm-formatting-header { - font-size: 0 !important; - display: inline; +.bases-cards-line { + height: var(--bases-cards-line-height); + display: block; + line-height: 1; + align-items: center; + position: relative; } -.cm-s-obsidian .hmd-inactive-line span.cm-hmd-list-indent { - border-right: 0; +.bases-cards-line:empty:before { + content: "\2014"; + color: var(--text-faint); } -@keyframes hmd-file-uploading-ani { - 0%, - 100% { - opacity: 0.4; - } - 50% { - opacity: 0.7; - } +.bases-cards-line .metadata-input-text { + position: absolute; + top: 0; } -@media (hover: hover) { - .cm-s-obsidian div.HyperMD-goback-button:hover { - color: transparent; - text-align: left; - } - .cm-s-obsidian div.HyperMD-goback-button:hover:before { - position: absolute; - padding-left: 5px; - content: "Back"; - color: #f7f7f7; - } +.bases-cards-line .multi-select-container { + flex-wrap: nowrap; } -mjx-container { - outline: none; +.bases-cards-line .value-list-container { + flex-wrap: nowrap; } -.cm-s-obsidian { - /* addon/fold-math */ +.bases-cards-line .value-list-container:empty:before { + content: "—"; + color: var(--text-faint); } -.cm-s-obsidian .hmd-fold-math { - display: inline-block; - vertical-align: middle; +.bases-view[data-view-type="list"] { + --bases-view-padding: var(--size-4-2) var(--size-4-4) 60px var(--size-4-2); + --bases-embed-padding: 0; } -.cm-s-obsidian .hmd-fold-math.hmd-fold-math.math-2 { +.bases-view[data-view-type="list"].is-grouped { + --bases-view-padding: 0 var(--size-4-4) 60px var(--size-4-4); +} +.bases-list-container { + position: relative; + user-select: text; + cursor: text; + min-height: 100px; +} +.bases-list-group { + position: absolute; width: 100%; } -.cm-s-obsidian span.cm-math, -.cm-s-obsidian span.hmd-fold-math-placeholder { - font-size: var(--code-size); - font-style: italic; +.bases-list-group-list { + position: relative; } -.cm-s-obsidian span.cm-formatting-math { - color: var(--text-accent); - font-weight: inherit; +.bases-list-item { + position: absolute; + gap: var(--size-2-2); + padding-inline-start: var(--list-indent-editing); + margin-inline-start: 2ch; + padding-top: var(--list-spacing); + padding-bottom: var(--list-spacing); } -.cm-s-obsidian span.cm-math-2 { - font-size: 13.2pt; +.bases-list-item .list-number { + font-size: var(--bases-table-font-size); + color: var(--list-marker-color); + text-align: end; + display: inline-block; + padding-inline-end: 0.25em; + width: 3em; + margin-inline-start: -3em; + font-variant: tabular-nums; } -.markdown-source-view.mod-cm6 .math-block > mjx-container { - margin: 0; - padding: 1em 0; - overflow-x: auto; +.bases-list-item .list-bullet { + font-size: var(--bases-table-font-size); + padding-inline-end: 0.25em; + margin-inline-start: -0.8em; + width: 0.8em; + float: none; } -/* Tables */ -.markdown-reading-view table { - margin-block-start: var(--p-spacing); - margin-block-end: var(--p-spacing); +.bases-list-item .list-bullet + .bases-rendered-value { + overflow: visible; } -.markdown-rendered tr { - height: 1px; +.bases-list-item .bases-rendered-value { + padding: 0; + word-break: break-word; } -.markdown-rendered td, -.markdown-rendered th { - height: inherit; +.bases-list-item .bases-rendered-value .value-list-container { + display: inline; } -.markdown-rendered table { - border-collapse: collapse; - line-height: var(--table-line-height); +.bases-list-item .bases-list-item-properties { + position: relative; } -.markdown-rendered td, -.markdown-rendered th { - padding: var(--size-2-2) var(--size-4-2); - border: var(--table-border-width) solid var(--table-border-color); - max-width: var(--table-column-max-width); - min-width: var(--table-column-min-width); - vertical-align: var(--table-cell-vertical-alignment); +.bases-list-item .bases-list-item-properties.nested { + padding-inline-start: var(--list-indent); } -.markdown-rendered td { - font-size: var(--table-text-size); - color: var(--table-text-color); +.bases-list-item .bases-list-item-properties.nested .bases-list-property { + display: block; } -.markdown-rendered th { - font-size: var(--table-header-size); - font-weight: var(--table-header-weight); - color: var(--table-header-color); - font-family: var(--table-header-font); - text-align: left; - line-height: var(--line-height-tight); +.bases-list-item .bases-list-property { + padding: 0; + cursor: text; } -.markdown-rendered th[align="center"] { - text-align: center; +.bases-list-item .bases-list-property p { + margin-block-start: 0; + margin-block-end: 0; } -.markdown-rendered th[align="right"] { - text-align: right; +.bases-list-item .bases-list-property a { + user-select: text; } -.markdown-rendered thead > tr > th, -.markdown-rendered tbody > tr > td { - white-space: var(--table-white-space); - text-overflow: ellipsis; - overflow: hidden; +.bases-list-item .bases-list-separator { + font-size: var(--bases-table-font-size); + color: var(--text-muted); } -.markdown-rendered tbody tr { - background-color: var(--table-background); +.show-indentation-guide .bases-list-item-properties.nested:before { + content: "\200b"; + position: absolute; + display: block; + inset-inline-start: -0.5em; + top: 0; + bottom: 0; + border-inline-end: var(--indentation-guide-width) solid var(--indentation-guide-color); } -@media (hover: hover) { - .markdown-rendered tbody tr:hover { - background-color: var(--table-row-background-hover); - } +.bases-view[data-view-type="table"] { + --bases-view-padding: 0; + --bases-embed-border-width: var(--border-width); + position: relative; } -.markdown-rendered tbody tr:nth-child(odd) { - background-color: var(--table-row-alt-background); +.mod-sidedock { + --bases-table-header-background: var(--background-secondary); } -@media (hover: hover) { - .markdown-rendered tbody tr:nth-child(odd):hover { - background-color: var(--table-row-alt-background-hover); - } +.bases-table-container { + position: relative; + min-width: 100%; + background: var(--bases-table-group-background); + --metadata-input-font-size: var(--bases-table-font-size); + --metadata-input-background-active: transparent; + --metadata-input-longtext-lines: 1; + --metadata-divider-width: 0px; + --input-placeholder-color: transparent; +} +.bases-table-container input[type='text'], +.bases-table-container input[type='date'], +.bases-table-container input[type='datetime-local'], +.bases-table-container input[type='number'], +.bases-table-container .multi-select-container { + border-radius: 0; + border: none; } -.markdown-rendered tbody tr > td:nth-child(2n+2) { - background-color: var(--table-column-alt-background); +.bases-table-container input[type='text']:hover, +.bases-table-container input[type='date']:hover, +.bases-table-container input[type='datetime-local']:hover, +.bases-table-container input[type='number']:hover, +.bases-table-container .multi-select-container:hover, +.bases-table-container input[type='text']:active, +.bases-table-container input[type='date']:active, +.bases-table-container input[type='datetime-local']:active, +.bases-table-container input[type='number']:active, +.bases-table-container .multi-select-container:active, +.bases-table-container input[type='text']:focus, +.bases-table-container input[type='date']:focus, +.bases-table-container input[type='datetime-local']:focus, +.bases-table-container input[type='number']:focus, +.bases-table-container .multi-select-container:focus { + box-shadow: none; + border: none; } -.markdown-rendered tbody tr:last-child > td { - border-bottom-width: var(--table-row-last-border-width); +.bases-table-container .add-column-button { + border: none; + border-radius: 0; + opacity: 1; } -.markdown-rendered tbody tr > td:first-child { - border-left-width: var(--table-column-first-border-width); +.bases-table { + position: absolute; + flex: 1; + min-width: 100%; } -.markdown-rendered tbody tr > td:last-child { - border-right-width: var(--table-column-last-border-width); +.bases-table .bases-group-heading { + width: 100%; + height: var(--bases-table-row-height); + padding-inline-start: var(--size-4-2); +} +.bases-thead { + position: sticky; + width: 100%; + height: var(--bases-table-row-height); + top: 0; + z-index: var(--layer-cover); + justify-content: space-between; + background-color: var(--bases-table-header-background); + box-shadow: inset 0 calc(var(--bases-table-row-border-width) * -1) 0 var(--bases-table-border-color); + /* Bottom border */ } -.markdown-rendered thead tr { - background-color: var(--table-header-background); +.bases-thead .bases-table-header { + display: flex; + width: 100%; + align-items: center; + height: var(--bases-table-row-height); +} +.bases-thead .bases-td { + white-space: nowrap; + align-items: center; } @media (hover: hover) { - .markdown-rendered thead tr:hover { - background-color: var(--table-header-background-hover); + .bases-thead .bases-td:hover { + background-color: var(--bases-table-header-background-hover); } } -.markdown-rendered thead tr > th { - border-top-width: var(--table-header-border-width); - border-color: var(--table-header-border-color); -} -.markdown-rendered thead tr > th:nth-child(2n+2) { - background-color: var(--table-column-alt-background); -} -.markdown-rendered thead tr > th:first-child { - border-left-width: var(--table-column-first-border-width); +.bases-thead .bases-td.has-active-menu { + background-color: var(--bases-table-header-background-hover); } -.markdown-rendered thead tr > th:last-child { - border-right-width: var(--table-column-last-border-width); +.bases-thead .bases-td[data-sort] .bases-table-header { + mask-image: var(--bases-table-header-sort-mask); } -.cm-s-obsidian .HyperMD-table-row { - white-space: pre; - word-break: normal; - overflow-wrap: normal; - font-size: 0.95em; - font-family: var(--font-monospace); +.bases-thead .bases-td[data-sort] .bases-table-header-name { + padding-inline-end: var(--size-4-4); } -.cm-s-obsidian .hmd-table-column, -.cm-s-obsidian .hmd-table-column-content { - display: inline-block; +[dir='rtl'], +.mod-rtl { + --bases-table-header-sort-mask: linear-gradient(to right, transparent var(--size-4-6), black var(--size-4-6)); } -.cm-s-obsidian .hmd-table-column-left { - text-align: left; +.bases-table-header-sort { + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); + color: var(--text-muted); + position: absolute; + inset-inline-end: 0; + top: -1px; + height: 100%; + padding-top: var(--size-2-1); + padding-inline-end: var(--size-2-3); + display: flex; + align-items: center; + margin-inline-start: auto; } -.cm-s-obsidian .hmd-table-column-center { - text-align: center; +.bases-table-header-label { + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); + display: flex; + gap: var(--size-4-1); + align-items: stretch; + cursor: var(--cursor); + user-select: none; + text-align: start; + font-size: var(--bases-table-font-size); + color: var(--bases-table-header-color); + font-weight: var(--bases-table-header-weight); + padding-inline-start: var(--size-4-2); + padding-inline-end: var(--size-4-2); +} +.bases-table-header-icon { + align-items: center; + display: var(--bases-table-header-icon-display); } -.cm-s-obsidian .hmd-table-column-right { - text-align: right; +.bases-table-header-resizer { + position: absolute; + right: -1px; + top: 0; + bottom: 0; + width: 6px; + cursor: col-resize; + z-index: var(--layer-cover); } -.cm-s-obsidian .HyperMD-table-row span.cm-hmd-table-sep, -.cm-s-obsidian .HyperMD-table-row-1 { - color: var(--text-faint); +body.mod-rtl .bases-table-header-resizer { + right: unset; + left: -1px; } -.cm-s-obsidian .HyperMD-table-row-0 { - color: var(--table-header-color); +.bases-table-header-resizer.is-active { + background-color: var(--divider-color-hover); } -.cm-s-obsidian .hmd-fold-html table { - border-collapse: collapse; +.bases-table-header-resizer:hover { + background-color: var(--divider-color-hover); } -.cm-s-obsidian .hmd-fold-html table td, -.cm-s-obsidian .hmd-fold-html table th { - padding: 10px; - border: 1px solid #ccc; +.bases-tbody { + position: relative; + width: 100%; + background: var(--background-primary); + box-shadow: 0 var(--bases-table-row-border-width) 0 var(--table-border-color); } -.cm-s-obsidian .hmd-inactive-line.HyperMD-table-row-1 { - color: transparent; - text-shadow: none; +.bases-tbody .bases-tr:hover { + background-color: var(--bases-table-row-background-hover); } -.cm-s-obsidian .hmd-inactive-line.HyperMD-table-row-1 > span { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAQAAAAziH6sAAAADklEQVR42mOc+Z9x5n8ACTkDM4ikM1IAAAAASUVORK5CYII=) repeat-x 0px center; +.bases-table-footer { + position: sticky !important; + bottom: 0; + background-color: var(--bases-table-summary-background); + width: 100%; + z-index: var(--layer-sidedock); } -.cm-s-obsidian .hmd-inactive-line.HyperMD-table-row span.cm-hmd-table-sep { - color: transparent; +.bases-table-footer .bases-td { + box-shadow: none; } -.markdown-source-view.mod-cm6 .cm-line.HyperMD-table-row { - min-width: max-content; +.bases-table-group-summary-row.bases-tr { + position: relative !important; + background-color: var(--bases-table-group-background); } -.markdown-source-view.mod-cm6 .cm-table-widget table { - margin-bottom: 0; +.bases-table-group-summary-row.bases-tr .summary-function-value { + color: var(--text-muted); } -a.tag { - background-color: var(--tag-background); - border: var(--tag-border-width) solid var(--tag-border-color); - border-radius: var(--tag-radius); - color: var(--tag-color); - font-size: var(--tag-size); - font-weight: var(--tag-weight); - text-decoration: var(--tag-decoration); - padding: var(--tag-padding-y) var(--tag-padding-x); - line-height: 1; +.bases-table-summary-cell { + display: flex; + min-width: 100%; + height: 100%; + padding-inline-end: var(--size-4-2); + padding-inline-start: var(--size-2-1); + justify-content: flex-end; + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); } @media (hover: hover) { - a.tag:hover { - background-color: var(--tag-background-hover); - border: var(--tag-border-width) solid var(--tag-border-color-hover); - color: var(--tag-color-hover); - text-decoration: var(--tag-decoration-hover); + .bases-table-summary-cell:hover { + background-color: var(--bases-table-summary-background-hover); } -} -a.tag { - background-color: var(--tag-background); - border: var(--tag-border-width) solid var(--tag-border-color); - border-radius: var(--tag-radius); - color: var(--tag-color); - font-size: var(--tag-size); - font-weight: var(--tag-weight); - text-decoration: var(--tag-decoration); - padding: var(--tag-padding-y) var(--tag-padding-x); - line-height: 1; -} -@media (hover: hover) { - a.tag:hover { - background-color: var(--tag-background-hover); - border: var(--tag-border-width) solid var(--tag-border-color-hover); - color: var(--tag-color-hover); - text-decoration: var(--tag-decoration-hover); + .bases-table-summary-cell:hover .summary-expand-button { + opacity: 1; + display: flex; + } + .bases-table-summary-cell:hover .placeholder { + opacity: 1; + color: var(--text-faint); } } -.cm-hashtag { - color: var(--tag-color); - background-color: var(--tag-background); - border: var(--tag-border-width) solid var(--tag-border-color); - font-size: var(--tag-size); - font-weight: var(--tag-weight); - vertical-align: baseline; - border-left: none; - border-right: none; - padding-top: var(--tag-padding-y); - padding-bottom: var(--tag-padding-y); -} -.cm-hashtag.cm-hashtag-begin { - border-top-left-radius: var(--tag-radius); - border-bottom-left-radius: var(--tag-radius); - border-right: none; - border-left: var(--tag-border-width) solid var(--tag-border-color); - padding-left: var(--tag-padding-x); -} -.cm-hashtag.cm-hashtag-end { - border-top-right-radius: var(--tag-radius); - border-bottom-right-radius: var(--tag-radius); - border-left: none; - border-right: var(--tag-border-width) solid var(--tag-border-color); - padding-right: var(--tag-padding-x); +.bases-table-summary-cell.has-active-menu { + background-color: var(--bases-table-summary-background-hover); } -.cm-s-obsidian span.cm-hashtag.cm-hmd-escape-backslash { - color: #FCC; +.bases-table-summary-cell.has-active-menu .summary-expand-button { + opacity: 1; + display: flex; } -input[type=checkbox] { - -webkit-appearance: none; - appearance: none; - border-radius: var(--checkbox-radius); - border: 1px solid var(--checkbox-border-color); - flex-shrink: 0; - padding: 0; - margin: 0; - margin-inline-end: 6px; - width: var(--checkbox-size); - height: var(--checkbox-size); - position: relative; - transition: box-shadow 0.15s ease-in-out; +.bases-table-summary-cell.has-active-menu .placeholder { + opacity: 1; + color: var(--text-faint); } -input[type=checkbox]:hover, -input[type=checkbox]:active, -input[type=checkbox]:focus { - outline: 0; - border-color: var(--checkbox-border-color-hover); +.bases-table-summary-cell .placeholder { + opacity: 0; + font-size: var(--font-ui-smaller); + overflow: hidden; + text-overflow: ellipsis; + unicode-bidi: plaintext; + padding-inline-start: var(--size-2-1); } -input[type=checkbox]:focus-visible { - box-shadow: 0 0 0 2px var(--background-modifier-border-focus); +.bases-table-summary-cell .summary-content { + --input-placeholder-color: var(--text-faint); + cursor: var(--cursor); + color: var(--text-muted); + flex-grow: 0; + display: flex; + align-items: center; + justify-content: flex-end; + font-size: var(--font-ui-small); + line-height: var(--line-height-tight); + gap: var(--size-2-3); + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } -input[type=checkbox]:checked:after { - content: ""; - top: -1px; - left: -1px; - position: absolute; - width: var(--checkbox-size); - height: var(--checkbox-size); - display: block; - background-color: var(--checkbox-marker-color); - -webkit-mask-position: 52% 52%; - -webkit-mask-size: 65%; - -webkit-mask-repeat: no-repeat; - -webkit-mask-image: url('data:image/svg+xml; utf8, '); +.bases-table-summary-cell .summary-function-name { + color: var(--text-muted); + font-size: var(--font-smaller); + padding-inline-start: var(--size-2-2); + overflow: hidden; + text-overflow: ellipsis; + unicode-bidi: plaintext; } -input[type=checkbox]:checked { - background-color: var(--checkbox-color); - border-color: var(--checkbox-color); +.bases-table-summary-cell .summary-expand-button { + display: none; + opacity: 0; + align-items: center; + color: var(--text-faint); + margin-inline-start: auto; } -@media (hover: hover) { - input[type=checkbox]:checked:hover { - background-color: var(--checkbox-color-hover); - border-color: var(--checkbox-color-hover); - } +.bases-summary-menu-item .bases-toolbar-menu-item-name { + flex-grow: 1; } -input[type=checkbox][data-indeterminate="true"]:not(:checked):after { - content: ""; - position: absolute; - top: calc(var(--checkbox-size)/2 - 2px); - width: calc(var(--checkbox-size) - 6px); - left: 0; - right: 0; - margin: 0 auto; - height: 2px; - display: block; - border-radius: 2px; - background-color: var(--text-normal); +.bases-summary-menu-item .bases-toolbar-menu-item-value { + color: var(--text-muted); + font-variant-numeric: tabular-nums; } -.task-list-item-checkbox { - width: var(--checkbox-size); - height: var(--checkbox-size); +.bases-footer-suggestion-item { + display: flex; + justify-content: space-between; } -.markdown-preview-view .task-list-item-checkbox { - position: relative; - top: 0.2em; - margin-inline-end: 0.6em; +.bases-footer-suggestion-item .value { + color: var(--text-muted); } -ul > li.task-list-item { - list-style: none; +.bases-tr { + position: absolute; + height: var(--bases-table-row-height); + display: flex; + flex-direction: row; + min-width: 100%; + box-shadow: 0 calc(var(--bases-table-row-border-width) * -1) 0 var(--table-border-color); } -ul > li.task-list-item .task-list-item-checkbox { - margin-inline-start: calc(var(--checkbox-size) * -1.5); +.bases-table-cell[disabled="true"] { + background-color: var(--bases-table-cell-background-disabled); } -ul > li.task-list-item[data-task="x"], -ul > li.task-list-item[data-task="X"] { - text-decoration: var(--checklist-done-decoration); - color: var(--checklist-done-color); +.bases-td { + box-shadow: calc(var(--bases-table-column-border-width) * -1) 0 0 var(--table-border-color); + display: flex; + position: absolute; + height: var(--bases-table-row-height); + overflow: hidden; + text-overflow: ellipsis; + flex: 1 0 auto; } -.cm-s-obsidian span.cm-formatting-task { - white-space: pre; - height: 1em; - line-height: 1em; - min-width: 1em; - text-align: center; - color: var(--text-muted); - background-size: 1em; - font-family: var(--font-monospace); +.bases-td.is-measuring * { + overflow: visible !important; } -.cm-s-obsidian span.hmd-hidden-token.cm-formatting-task { - color: transparent !important; +.bases-td:focus-within { + background-color: var(--bases-table-cell-background-active); + border-radius: var(--bases-table-cell-radius-focus); + box-shadow: var(--bases-table-cell-shadow-focus); + z-index: 1; + height: fit-content; + min-height: var(--bases-table-row-height); } -.markdown-source-view.mod-cm6 .task-list-label { - padding: 0; - margin-inline-start: -0.25em; +.bases-td .metadata-input-longtext:not(:empty) { + display: block; } -.markdown-source-view.mod-cm6 .task-list-item-checkbox { - top: -0.1em; - vertical-align: middle; - margin-inline-start: 1em; - margin-inline-end: 0.25em; +.bases-td .metadata-input.mod-date, +.bases-td .metadata-input.mod-datetime { + --input-placeholder-color: var(--text-faint); } -.markdown-source-view.mod-cm6 .cm-formatting-list-ol > .task-list-label .task-list-item-checkbox { - margin-inline-start: 2px; +.bases-td .metadata-input.mod-date.is-empty, +.bases-td .metadata-input.mod-datetime.is-empty { + opacity: 0; } -.markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="x"], -.markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="X"] { - text-decoration: var(--checklist-done-decoration); - color: var(--checklist-done-color); +.bases-td .metadata-input.mod-date.is-empty:focus-within, +.bases-td .metadata-input.mod-datetime.is-empty:focus-within, +.bases-td .metadata-input.mod-date.is-empty:hover, +.bases-td .metadata-input.mod-datetime.is-empty:hover { + opacity: 1; } -b, -strong { - font-weight: var(--bold-weight); - color: var(--bold-color); +.bases-td .bases-metadata-value .clickable-icon { + opacity: 0; } -i, -em { - font-style: italic; - color: var(--italic-color); +.bases-td:focus-within .clickable-icon, +.bases-td:hover .clickable-icon { + opacity: 1; } -/* Highlights */ -.markdown-rendered p { - margin-block-start: var(--p-spacing); - margin-block-end: var(--p-spacing); +.bases-table-cell { + display: flex; + height: 100%; + width: 100%; } -.markdown-rendered mark { - background-color: var(--text-highlight-bg); - color: var(--text-normal); +.bases-table-cell[data-property-type="checkbox"] { + justify-content: center; } -.markdown-rendered mark .internal-link { - color: var(--text-normal); +.bases-table-cell .metadata-input-number, +.bases-table-cell[data-property-type="number"] { + justify-content: flex-end; + text-align: right; + font-variant-numeric: tabular-nums; } -.cm-s-obsidian span.cm-formatting-highlight, -.cm-s-obsidian span.cm-highlight { - background-color: var(--text-highlight-bg); - color: var(--text-normal); +.bases-table-container:not(.mod-multiline) .bases-tr { + --input-height: var(--bases-table-row-height); } -.cm-strong { - font-weight: var(--bold-weight); - color: var(--bold-color); +.bases-table-container:not(.mod-multiline) .bases-td { + white-space: nowrap; + align-items: center; } -.cm-em { - font-style: italic; - color: var(--italic-color); - font-weight: var(--italic-weight); +.bases-table-container:not(.mod-multiline) .bases-table-cell { + align-items: center; } -.cm-strong.cm-em { - font-weight: var(--bold-weight); +.bases-table-container:not(.mod-multiline) .metadata-input-longtext:not(:focus-within) { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; } -.cm-s-obsidian span.cm-error { - color: var(--text-error); +.bases-table-container:not(.mod-multiline) .metadata-link { + overflow: hidden; } -/* Backlinks in Preview */ -.embedded-backlinks { - border-top: 1px solid var(--background-modifier-border); +.bases-table-container:not(.mod-multiline) .multi-select-container:not(:focus-within) { + flex: 0 0 auto; + flex-wrap: nowrap; } -.markdown-preview-view .embedded-backlinks { - margin-top: 3em; +.bases-table-active-cell, +.bases-table-selection { + position: absolute; + display: flex; + pointer-events: none; } -.embedded-backlinks .backlink-pane { - padding: var(--size-4-3) 0 0 0; +.bases-table-container.is-selecting .bases-table-cell { + pointer-events: none; } -.embedded-backlinks .backlink-pane .search-empty-state, -.embedded-backlinks .backlink-pane .tree-item-self { - /* Use quotes because Less overrides CSS math */ - font-size: max(var(--font-ui-small),var(--font-smaller)); - align-items: center; +.bases-table-container:focus .bases-table-active-cell { + box-shadow: var(--bases-table-cell-shadow-active); + border-radius: var(--bases-table-cell-radius-active); } -.embedded-backlinks .backlink-pane > .tree-item-self { - font-size: max(var(--font-ui-small),1em); - gap: var(--size-2-3); - width: fit-content; +.bases-table-container:focus .bases-table-active-cell.mod-selection { + box-shadow: var(--bases-table-cell-shadow-focus); } -.embedded-backlinks .backlink-pane .tree-item-flair { - font-size: max(var(--font-ui-small),var(--font-smallest)); +.bases-table-container:focus .bases-table-selection { + background-color: var(--bases-table-cell-background-selected); + mix-blend-mode: var(--table-selection-blend-mode); } -.embedded-backlinks .nav-header { - padding: 0; - position: relative; +.bases-table-container.mod-multiline .bases-table-cell { + align-items: start; } -.embedded-backlinks .nav-header ~ .search-input-container { - width: calc(100% - 150px); - margin: var(--size-4-3) 0 0 0; +.bases-table-container.mod-multiline .metadata-input-longtext { + overflow-y: auto; } -.embedded-backlinks .nav-buttons-container { +.table-col-drag-ghost { + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); position: absolute; - right: 0; - top: 14px; - z-index: 1; + pointer-events: none; + touch-action: none; + top: 0; + width: 100%; + height: 100%; + background-color: var(--table-drag-handle-background-active); + color: var(--table-drag-handle-color-active); + box-shadow: 0 0 0 var(--table-selection-border-width) var(--table-selection-border-color); } .view-action.mod-bookmarked { --icon-color: var(--icon-color-active); @@ -10065,49 +14453,28 @@ em { display: flex; } .workspace-leaf-content[data-type=bookmarks] .view-content { - padding: var(--size-4-3) var(--size-4-3) var(--size-4-8); + padding: var(--size-4-1) var(--size-4-3) var(--size-4-8); } .modal.mod-bookmark .setting-item-control input { width: 100%; } -.nav-buttons-container.has-separator { - border-bottom: 1px solid var(--background-modifier-border); - padding-bottom: var(--size-2-3); - margin-bottom: var(--size-4-2); -} .nav-files-container { flex-grow: 1; overflow-y: auto; overflow-x: hidden; - padding: 0 var(--size-4-3) var(--size-4-6) var(--size-4-3); + padding: var(--size-4-1) var(--size-4-3) var(--size-4-6) var(--size-4-3); + padding-bottom: max(var(--safe-area-inset-bottom), var(--size-4-6)); scroll-padding-block: var(--size-4-2); } -/* Vault name */ -.nav-folder.mod-root > .nav-folder-title { - font-size: var(--vault-name-font-size); - color: var(--vault-name-color); - font-weight: var(--vault-name-font-weight); - cursor: default; -} -@media (hover: hover) { - .nav-folder.mod-root > .nav-folder-title:hover { - background-color: inherit; - font-weight: var(--vault-name-font-weight); - } -} -.nav-folder.mod-root > .nav-folder-children { - border-left: none; - margin-left: 0; - padding-left: 0; -} .nav-file-tag { - background-color: var(--background-modifier-hover); - border-radius: var(--radius-s); + background-color: var(--nav-tag-background); + border-radius: var(--nav-tag-radius); + color: var(--nav-tag-color); font-size: 9px; - font-weight: var(--font-semibold); + font-weight: var(--nav-tag-weight); letter-spacing: 0.05em; line-height: var(--line-height-normal); - margin-left: var(--size-2-3); + margin-inline-start: auto; padding: 0 var(--size-4-1); text-transform: uppercase; align-self: center; @@ -10115,7 +14482,7 @@ em { .nav-file-icon { display: inline-flex; align-items: center; - margin-right: var(--size-2-3); + margin-inline-end: var(--size-2-3); position: relative; color: var(--icon-color); opacity: var(--icon-opacity); @@ -10129,13 +14496,10 @@ em { overflow-wrap: anywhere; overflow: hidden; white-space: var(--nav-item-white-space); - text-overflow: ellipsis; } -.nav-file-title-content.is-being-renamed, -.nav-folder-title-content.is-being-renamed { - flex-grow: 1; - white-space: normal; - cursor: text; +.nav-file-title-content:not([contenteditable="true"]), +.nav-folder-title-content:not([contenteditable="true"]) { + text-overflow: ellipsis; } .nav-folder.is-being-dragged-over { border-radius: var(--radius-s); @@ -10147,31 +14511,6 @@ em { .nav-folder.is-being-dragged-over > .nav-folder-title .collapse-icon { color: var(--nav-item-color-highlighted); } -/* LEGACY Styles for plugin backwards compatibility */ -/* Vault name */ -.nav-folder.mod-root > .nav-folder-title { - font-size: var(--vault-name-font-size); - color: var(--vault-name-color); - font-weight: var(--vault-name-font-weight); - cursor: default; -} -@media (hover: hover) { - .nav-folder.mod-root > .nav-folder-title:hover { - background-color: inherit; - font-weight: var(--vault-name-font-weight); - } -} -/* Style children - The first level of folders and files - needs slightly different styling */ -.nav-folder.mod-root .nav-folder > .nav-folder-children { - padding-left: var(--nav-item-children-padding-left); - margin: 0 0 0 var(--nav-item-children-margin-left); - border-left: var(--nav-indentation-guide-width) solid var(--nav-indentation-guide-color); -} -.nav-file { - border-radius: var(--radius-s); -} /* Folders and files */ .nav-folder-title { padding: var(--nav-item-parent-padding); @@ -10181,9 +14520,9 @@ em { } .nav-file-title, .nav-folder-title { - margin-bottom: var(--size-2-1); + margin-bottom: var(--nav-item-margin-bottom); display: flex; - border-radius: var(--radius-s); + border-radius: var(--nav-item-radius); cursor: var(--cursor); color: var(--nav-item-color); font-size: var(--nav-item-size); @@ -10197,6 +14536,10 @@ em { color: var(--nav-item-color-hover); font-weight: var(--nav-item-weight-hover); } + body:not(.is-grabbing) .nav-file-title:hover .nav-file-tag, + body:not(.is-grabbing) .nav-folder-title:hover .nav-file-tag { + color: var(--nav-tag-color-hover); + } } body:not(.is-grabbing) .nav-file-title.is-active:hover, body:not(.is-grabbing) .nav-folder-title.is-active:hover, @@ -10206,6 +14549,12 @@ body:not(.is-grabbing) .nav-folder-title.is-active:hover, background-color: var(--nav-item-background-active); font-weight: var(--nav-item-weight-active); } +body:not(.is-grabbing) .nav-file-title.is-active:hover .nav-file-tag, +body:not(.is-grabbing) .nav-folder-title.is-active:hover .nav-file-tag, +.nav-file-title.is-active .nav-file-tag, +.nav-folder-title.is-active .nav-file-tag { + color: var(--nav-tag-color-active); +} body:not(.is-grabbing) .nav-file-title.is-selected:hover, body:not(.is-grabbing) .nav-folder-title.is-selected:hover, .nav-file-title.is-selected, @@ -10220,10 +14569,10 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged, background-color: var(--interactive-accent); color: var(--text-on-accent); } -body:not(.is-grabbing) .nav-file-title.is-being-dragged .nav-folder-collapse-indicator, -body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-folder-collapse-indicator, -.nav-file-title.is-being-dragged .nav-folder-collapse-indicator, -.nav-folder-title.is-being-dragged .nav-folder-collapse-indicator { +body:not(.is-grabbing) .nav-file-title.is-being-dragged .tree-item-icon.collapse-icon, +body:not(.is-grabbing) .nav-folder-title.is-being-dragged .tree-item-icon.collapse-icon, +.nav-file-title.is-being-dragged .tree-item-icon.collapse-icon, +.nav-folder-title.is-being-dragged .tree-item-icon.collapse-icon { color: var(--text-on-accent); } body:not(.is-grabbing) .nav-file-title.is-being-dragged .nav-file-tag, @@ -10313,7 +14662,7 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, flex-direction: column; flex-basis: 250px; flex-shrink: 0; - border-right: 1px solid var(--background-modifier-border); + border-inline-end: 1px solid var(--background-modifier-border); } .file-recovery-list-item-header { display: flex; @@ -10346,9 +14695,23 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, } .file-recovery-list-item-header .collapse-indicator { min-width: var(--size-4-6); - padding-left: var(--size-4-2); + padding-inline-start: var(--size-4-2); opacity: 1; } +.file-recovery-text { + font-size: var(--code-size); + font-family: var(--font-monospace); + tab-size: 4; + resize: none; + flex: 1 0 0; + padding: var(--size-4-6); + font-size: var(--font-ui-medium); + background-color: var(--background-primary); +} +.file-recovery-text[data-ext="md"] { + font-family: var(--font-text); + font-size: var(--font-text-size); +} .graph-view.color-fill { color: var(--graph-node); } @@ -10405,23 +14768,23 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, .graph-controls { border-radius: var(--radius-m); position: absolute; - right: var(--size-4-3); + inset-inline-end: var(--size-4-3); top: var(--size-4-3); padding: 0; - background-color: var(--background-primary); + background-color: var(--menu-background); width: var(--graph-controls-width); overflow: auto; } .graph-controls:not(.is-close) { max-height: calc(100% - var(--size-4-4)); - border: 1px solid var(--background-modifier-border); + border: var(--menu-border-width) solid var(--menu-border-color); box-shadow: var(--shadow-s); } .graph-controls.is-close { min-width: inherit; width: auto; background-color: var(--background-primary); - border: 1px solid transparent; + border: var(--menu-border-width) solid transparent; padding: var(--size-2-3); } .graph-controls.is-close > .graph-control-section { @@ -10440,7 +14803,9 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, width: 100%; } .graph-controls .setting-item { + background-color: transparent; padding: var(--size-2-3) 0; + margin-bottom: var(--size-4-1); border: none; } .graph-controls .setting-item .setting-item-info { @@ -10457,7 +14822,7 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, width: 100%; } .graph-controls .setting-item.mod-slider .setting-item-info { - margin-right: 0; + margin-inline-end: 0; } .graph-controls .setting-item.mod-slider .setting-item-control { padding-top: var(--size-4-3); @@ -10466,7 +14831,7 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, padding-top: 0; } .graph-controls .setting-item.mod-search-setting .setting-item-info { - margin-right: 0; + margin-inline-end: 0; } .graph-controls .setting-item-name { font-size: var(--font-ui-small); @@ -10513,7 +14878,7 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, width: 100%; } .graph-color-group.drag-ghost input[type='color'] { - margin-left: 6px; + margin-inline-start: 6px; } .graph-control-section.mod-color-groups .tree-item-children.is-grabbing .graph-color-groups-container { padding-bottom: 40px; @@ -10525,8 +14890,8 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, .graph-controls-button.mod-close, .graph-controls-button.mod-reset { position: absolute; - top: var(--size-4-2); - right: var(--size-4-2); + top: var(--size-2-3); + inset-inline-end: var(--size-4-2); padding: var(--size-2-2); } .graph-controls:not(.is-close) .graph-controls-button.mod-close, @@ -10534,7 +14899,7 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, display: flex; } .graph-controls-button.mod-reset { - right: 36px; + inset-inline-end: 36px; } .graph-controls.is-close .graph-controls-button.mod-open { display: flex; @@ -10558,7 +14923,7 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, animation: 1000ms ease-in-out 300ms infinite progress-bar; } .graph-control-section-header { - font-weight: var(--font-semibold); + font-weight: var(--font-medium); font-size: var(--font-ui-small); color: var(--text-normal); } @@ -10573,29 +14938,30 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, padding-bottom: var(--size-4-4); } .graph-control-section > .tree-item-self { - padding-left: var(--size-4-4); + padding-inline-start: var(--size-4-4); } .graph-control-section .tree-item-children { margin: 0; padding: var(--size-4-1) 0; - border-left: none; + border-inline-start: none; } .graph-control-section.mod-display .setting-item:not(.mod-slider):last-child .setting-item-info { display: none; } .workspace-leaf-content[data-type='outline'] .view-content { - padding: var(--size-4-3) var(--size-4-3) var(--size-4-8); + padding-top: var(--size-4-1); } .workspace-leaf-content[data-type=all-properties] .view-content, .workspace-leaf-content[data-type=properties] .view-content { - padding: var(--size-4-3) var(--size-4-3) var(--size-4-8); + padding-top: var(--size-4-1); } -.is-phone, -.workspace-drawer { +.is-phone .metadata-container, +.workspace-drawer .metadata-container { --metadata-input-height: calc(var(--font-text-size) * 2.25); --metadata-padding: 0; - --metadata-divider-width: 1px; --metadata-divider-color-hover: var(--metadata-divider-color); + --metadata-property-radius: 0px; + --metadata-property-radius-hover: 0px; } .is-phone .metadata-properties, .workspace-drawer .metadata-properties { @@ -10613,6 +14979,7 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, --metadata-padding: 0; --metadata-divider-width: 1px; --metadata-divider-color-hover: var(--metadata-divider-color); + --metadata-property-radius: 0px; } .workspace > .workspace-split:not(.mod-root) .metadata-container .metadata-properties { --metadata-gap: 0; @@ -10641,34 +15008,25 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, } .metadata-property .metadata-property-value { margin-top: -2px; - padding-left: calc(var(--icon-size) + var(--size-4-1)); + padding-inline-start: calc(var(--icon-size) + var(--size-4-1)); } } .modal.mod-publish { height: var(--modal-height); width: var(--modal-width); max-width: var(--modal-max-width-narrow); - padding: var(--size-4-4) 0 0 0; position: relative; overflow: hidden; } -.modal.mod-publish .modal-title { - padding: 0 var(--size-4-4); -} .modal.mod-publish .modal-content { - overflow: auto; - padding: 0 var(--size-4-4) var(--size-4-4); margin-bottom: calc(var(--input-height) + var(--size-4-8)); border-top: var(--border-width) solid var(--background-modifier-border); } .modal.mod-publish .modal-button-container { margin: 0 0 0 calc(var(--size-4-4) * -1); - padding: var(--size-4-4); gap: var(--size-4-2); position: absolute; bottom: 0; - background-color: var(--background-primary); - border-top: var(--border-width) solid var(--background-modifier-border); width: 100%; } .publish-section { @@ -10709,7 +15067,7 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, font-weight: var(--font-medium); } .publish-changes-switch-site { - margin-left: var(--size-4-2); + margin-inline-start: var(--size-4-2); display: flex; flex-direction: row; flex-grow: 1; @@ -10731,7 +15089,7 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, max-height: calc(60vh - 200px); } .publish-changes-current-site-name { - margin-left: var(--size-2-3); + margin-inline-start: var(--size-2-3); text-decoration: underline; } .publish-changes-info { @@ -10740,8 +15098,8 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, margin-bottom: 20px; } .publish-changes-info button { - margin-right: 0; - margin-left: var(--size-4-2); + margin-inline-end: 0; + margin-inline-start: var(--size-4-2); } .publish-changes-info .search-input-container { margin: 0; @@ -10749,14 +15107,14 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, flex: 1 0 auto; } .publish-section-header-toggle-collapsed-button { - margin-right: var(--size-4-1); + margin-inline-end: var(--size-4-1); color: var(--text-faint); width: 9px; height: 9px; } .publish-section-header-action { color: var(--text-faint); - margin-left: var(--size-4-3); + margin-inline-start: var(--size-4-3); } .publish-upload-item-title { word-break: break-word; @@ -10870,24 +15228,20 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, } .search-input-container:before { top: calc((var(--input-height) - var(--search-icon-size)) / 2); - left: 8px; + inset-inline-start: var(--size-4-2); position: absolute; content: ''; height: var(--search-icon-size); width: var(--search-icon-size); display: block; background-color: var(--search-icon-color); - -webkit-mask-image: url("data:image/svg+xml,"); + -webkit-mask-image: url("data:image/svg+xml,"); -webkit-mask-repeat: no-repeat; } .search-input-container input { display: block; width: 100%; - padding-right: 28px; - padding-left: 36px; -} -.global-search-input-container.search-input-container input { - padding-right: 56px; + padding-inline-start: 36px; } .search-input-clear-button { position: absolute; @@ -10896,7 +15250,7 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, color: var(--search-clear-button-color); cursor: var(--cursor); top: 0px; - right: 2px; + inset-inline-end: 2px; bottom: 0px; line-height: 0; height: var(--input-height); @@ -10907,7 +15261,7 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, display: flex; justify-content: center; align-items: center; - transition: color 0.15s ease-in-out; + transition: color var(--anim-duration-fast) ease-in-out; } .search-input-clear-button:after { content: ''; @@ -10915,13 +15269,13 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, width: var(--search-clear-button-size); display: block; background-color: currentColor; - -webkit-mask-image: url("data:image/svg+xml,"); + -webkit-mask-image: url("data:image/svg+xml,"); -webkit-mask-repeat: no-repeat; } .search-input-clear-button:hover, .search-input-clear-button:active { color: var(--text-normal); - transition: color 0.15s ease-in-out; + transition: color var(--anim-duration-fast) ease-in-out; } .search-input-suggest-button { position: absolute; @@ -10938,42 +15292,6 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, color: var(--text-muted); } } -.backlink-pane, -.outgoing-link-pane { - overflow-y: auto; - padding: var(--size-4-3) var(--size-4-3) var(--size-4-8); - flex: 1 0 0; - /* #todo This should be removed and make the DOM changes instead - Section headers for linked/unlinked mentions - */ -} -.backlink-pane .search-result-container, -.outgoing-link-pane .search-result-container { - padding: var(--size-4-1) 1px var(--size-4-4); -} -.backlink-pane > .tree-item-self, -.outgoing-link-pane > .tree-item-self { - color: var(--text-normal); - padding-left: var(--size-4-2); -} -.backlink-pane > .tree-item-self .tree-item-inner, -.outgoing-link-pane > .tree-item-self .tree-item-inner { - font-weight: var(--font-medium); -} -.backlink-pane > .tree-item-self.is-collapsed, -.outgoing-link-pane > .tree-item-self.is-collapsed { - color: var(--text-faint); -} -@media (hover: hover) { - .backlink-pane > .tree-item-self.is-collapsed:hover, - .outgoing-link-pane > .tree-item-self.is-collapsed:hover { - color: var(--text-muted); - } -} -.backlink-pane > .tree-item-self .collapse-icon, -.outgoing-link-pane > .tree-item-self .collapse-icon { - display: none; -} .search-result-container { padding: var(--size-4-3) var(--size-4-3) var(--size-4-4); position: relative; @@ -10981,6 +15299,7 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, } .search-result-container.mod-global-search { overflow-y: auto; + padding-bottom: max(var(--safe-area-inset-bottom), var(--size-4-3)); } .search-result-container:before { content: ' '; @@ -10995,7 +15314,7 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, } .search-suggest-info-text { color: var(--text-muted); - margin-left: 4px; + margin-inline-start: 4px; } .search-suggest-icon { padding: 4px; @@ -11039,11 +15358,13 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, border-radius: 0; } .search-suggest-item.mod-group:not(:first-child) { - border-top: 1px solid var(--background-modifier-border); + border-top: var(--border-width) solid var(--background-modifier-border); margin-top: 6px; - padding: 6px 6px 0px 14px; - margin-left: -6px; - margin-right: -6px; + padding-top: 6px; + padding-inline-end: 6px; + padding-bottom: 0px; + padding-inline-start: 14px; + margin-inline-end: -6px; } .search-suggest-item.mod-group:hover, .search-suggest-item.mod-group.is-selected { @@ -11075,7 +15396,7 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, color: var(--text-faint); font-size: var(--font-ui-small); margin: 0 0 var(--size-4-3); - padding-left: var(--size-4-2); + padding-inline-start: var(--size-4-2); } .search-result { word-break: break-word; @@ -11091,7 +15412,7 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, overflow: hidden; margin: var(--size-4-1) 0 var(--size-4-2); color: var(--text-muted); - box-shadow: 0 0 0 1px var(--background-modifier-border); + box-shadow: 0 0 0 var(--border-width) var(--background-modifier-border); } .search-result-file-matches:empty { display: none; @@ -11105,7 +15426,7 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, padding: var(--size-4-2) var(--size-4-5) var(--size-4-2) var(--size-4-3); white-space: pre-wrap; width: 100%; - border-bottom: 1px solid var(--background-modifier-border); + border-bottom: var(--border-width) solid var(--background-modifier-border); } .search-result-file-match:last-child { border-bottom: none; @@ -11115,16 +15436,20 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, color: var(--text-normal); background-color: var(--text-selection); } + .search-result-file-match:hover .search-result-file-match-replace-button { + display: block; + } } -.search-result-file-match:hover .search-result-file-match-replace-button { - display: block; +.search-result-file-match.mobile-tap { + color: var(--text-normal); + background-color: var(--text-selection); } .search-result-file-match-replace-button { display: none; position: absolute; height: auto; bottom: 5px; - right: 24px; + inset-inline-end: 24px; padding: var(--size-4-1) var(--size-4-2); color: var(--text-muted); font-size: var(--font-ui-smaller); @@ -11137,7 +15462,7 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, .search-result-hover-button { position: absolute; display: flex; - right: 2px; + inset-inline-end: 2px; border-radius: var(--radius-s); color: var(--text-faint); padding: 1px 3px; @@ -11160,12 +15485,15 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, } .search-info-container { color: var(--text-muted); - padding: var(--size-4-1) var(--size-4-4) var(--size-4-1); + padding: var(--size-4-1) var(--size-4-4) var(--size-4-2); font-size: var(--font-ui-smaller); } +.search-info-container:empty { + display: none; +} .search-info-children { - padding-left: 20px; - border-left: 1px solid var(--background-modifier-border); + padding-inline-start: 20px; + border-inline-start: var(--border-width) solid var(--background-modifier-border); margin: 1px 0; } .copy-search-result-container { @@ -11181,7 +15509,10 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, border-top: none; } .search-result-file-match-destination-file-container { + display: flex; + flex-wrap: wrap; margin-top: var(--size-2-3); + gap: var(--size-2-1); } .search-result-file-match-destination-file { display: inline-flex; @@ -11190,7 +15521,6 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, box-shadow: var(--input-shadow); color: var(--text-muted); padding: var(--size-2-2) var(--size-2-3); - margin-bottom: var(--size-2-1); } @media (hover: hover) { .search-result-file-match:hover .search-result-file-match-destination-file { @@ -11205,7 +15535,7 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, .search-result-file-match-destination-file-icon { --icon-size: var(--icon-xs); --icon-stroke: var(--icon-xs-stroke-width); - margin-right: var(--size-4-1); + margin-inline-end: var(--size-4-1); display: flex; color: var(--text-faint); } @@ -11219,25 +15549,26 @@ body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, body:not(.is-phone) .workspace-leaf.mod-active .search-result.has-focus .tree-item-self, body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-focus { border-radius: var(--radius-s); - box-shadow: inset 0 0 0 2px var(--background-modifier-border-focus); + box-shadow: inset 0 0 0 var(--input-border-width-focus) var(--background-modifier-border-focus); } .search-results-info { color: var(--text-muted); display: flex; align-items: center; justify-content: space-between; - border-bottom: 1px solid var(--background-modifier-border); - margin: var(--size-4-1) var(--size-4-2) 0; - padding-bottom: var(--size-4-1); + border-bottom: var(--border-width) solid var(--background-modifier-border); + margin: 0; + min-width: 0; + padding: 0 var(--size-4-3) var(--size-4-2); white-space: nowrap; } .search-results-info .dropdown { height: 24px; box-shadow: none; background-color: transparent; - font-size: 12px; + font-size: var(--font-ui-smaller); color: var(--text-muted); - text-align-last: right; + text-align-last: end; max-width: 60%; text-overflow: ellipsis; white-space: nowrap; @@ -11249,7 +15580,7 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc } .search-results-info .dropdown option { color: initial; - text-align: left; + text-align: start; } .search-results-result-count { font-size: var(--font-ui-smaller); @@ -11257,11 +15588,15 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc } .search-row { display: flex; - margin: var(--size-4-2); + margin: var(--size-4-3) var(--size-4-3) var(--size-4-2); gap: var(--size-4-1); + align-items: center; } .search-params { margin: var(--size-4-1) var(--size-4-4); + gap: var(--size-4-2); + display: flex; + flex-direction: column; } .search-params input[type='text'], .search-params input[type='range'] { @@ -11273,8 +15608,9 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc width: 100%; } .search-params .setting-item { - padding: var(--size-2-3) 0; + padding: 0; border: none; + background-color: transparent; } .search-params .setting-item .setting-item-info { display: flex; @@ -11290,7 +15626,7 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc width: 100%; } .search-params .setting-item.mod-slider .setting-item-info { - margin-right: 0; + margin-inline-end: 0; } .search-params .setting-item.mod-slider .setting-item-control { padding-top: var(--size-4-3); @@ -11299,7 +15635,7 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc padding-top: 0; } .search-params .setting-item.mod-search-setting .setting-item-info { - margin-right: 0; + margin-inline-end: 0; } .search-params .setting-item-name { font-size: var(--font-ui-small); @@ -11317,7 +15653,7 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc border-radius: 50%; color: var(--background-secondary); display: flex; - margin-left: var(--size-2-3); + margin-inline-start: var(--size-2-3); opacity: var(--icon-opacity); padding: 0.5px; } @@ -11325,10 +15661,20 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc background-color: var(--icon-color-hover); opacity: var(--icon-opacity-hover); } +.is-mobile .search-params { + background: var(--background-secondary); + border-radius: var(--touch-size-xxs); + margin: var(--size-4-1) var(--size-4-3) var(--size-4-2); + padding: var(--size-4-4) var(--size-4-4) var(--size-4-3); +} +.is-mobile .search-row > .clickable-icon { + width: var(--touch-size-s); + height: var(--touch-size-s); +} .slides-container { position: fixed; top: 0; - left: 0; + inset-inline-start: 0; height: 100vh; width: 100vw; transition: -webkit-transform 0.8s ease 0s; @@ -11343,7 +15689,7 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc display: inline-block; position: absolute; top: var(--size-4-2); - right: var(--size-4-2); + inset-inline-end: var(--size-4-2); color: var(--text-faint); cursor: var(--cursor); z-index: 1; @@ -11362,30 +15708,58 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc list-style: none; } .reveal .task-list-item { - margin-left: -1.5em; + margin-inline-start: -1.5em; } .mod-sync-history .modal-content { height: 100%; } -.vault-list-item { - margin: 6px 0; +.modal-setting-titlebar { + display: flex; + align-items: center; + padding: var(--size-4-2) var(--size-4-4); + border-bottom: 1px solid var(--background-modifier-border); + padding-inline-end: var(--size-4-10); +} +.modal-setting-titlebar .modal-setting-title { + font-size: var(--font-ui-medium); + font-weight: var(--file-header-font-weight); + flex-grow: 1; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.modal-setting-titlebar .modal-setting-titlebar-toggle { display: flex; + align-items: center; + margin: 0 var(--size-4-3); + gap: var(--size-4-2); } -.vault-list-item.is-connected .vault-list-item-title { - color: var(--text-normal); +.modal-setting-titlebar .modal-setting-titlebar-actions { + display: flex; + align-items: center; + gap: var(--size-4-1); +} +.vault-list-item-desc { + color: var(--text-faint); } .vault-list-item-icon { color: var(--text-muted); - position: relative; - top: 1px; + display: flex; } .vault-list-item-title { + align-items: center; + display: flex; + gap: var(--size-4-2); color: var(--text-muted); user-select: none; + white-space: nowrap; + text-overflow: ellipsis; + margin-bottom: var(--size-4-1); + min-width: 0; + overflow: hidden; } -.vault-list-item-creation-time { - color: var(--text-faint); - font-size: var(--font-ui-small); +.vault-list-item-title.is-connected { + color: var(--text-normal); } .sync-status-icon { display: flex; @@ -11425,7 +15799,7 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc flex-direction: column; flex-basis: 250px; flex-shrink: 0; - border-right: 1px solid var(--background-modifier-border); + border-inline-end: 1px solid var(--background-modifier-border); background-color: var(--background-secondary); } .sync-history-list { @@ -11512,7 +15886,7 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc height: var(--size-4-8); width: var(--size-4-8); min-width: var(--size-4-8); - margin-right: var(--size-4-2); + margin-inline-end: var(--size-4-2); display: flex; justify-content: center; align-items: center; @@ -11548,7 +15922,7 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc .sync-history-list-item .version-group-container .connecting-line { position: absolute; top: 0; - left: var(--size-4-6); + inset-inline-start: var(--size-4-6); height: 100%; width: var(--indentation-guide-width); background-color: var(--indentation-guide-color); @@ -11622,10 +15996,6 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc overflow: hidden; padding: 0; } -.sync-history-content .setting-item:first-child { - padding: var(--size-4-4) var(--size-4-6) var(--size-4-4); - border-bottom: 1px solid var(--background-modifier-border); -} .sync-history-content .setting-item-info { flex-grow: 1; font-weight: var(--bold-weight); @@ -11638,14 +16008,14 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc } .sync-history-content .setting-item-control { justify-content: flex-end; - padding-right: var(--size-4-8); + padding-inline-end: var(--size-4-8); white-space: nowrap; } .sync-history-content .setting-item-control .checkbox-container { - margin-right: var(--size-4-3); + margin-inline-end: var(--size-4-3); } .sync-history-preview, -.sync-history-text, +.file-recovery-diff, .sync-history-diff { flex: 1 0 0; padding: var(--size-4-6); @@ -11653,6 +16023,7 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc background-color: var(--background-primary); } .sync-history-preview, +.file-recovery-diff, .sync-history-diff { overflow: auto; user-select: text; @@ -11662,14 +16033,15 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc font-family: var(--font-text); font-size: var(--font-text-size); } -.sync-history-content-other { +.sync-history-preview img { + max-width: 100%; +} +.sync-history-desc { flex-grow: 1; padding: var(--size-4-6); + overflow-wrap: break-word; text-align: center; } -.sync-history-content-other img { - max-width: 100%; -} .sync-history-content-container.mod-empty .sync-history-content, .sync-history-content-container.mod-empty .sync-history-content-buttons { display: none; @@ -11679,31 +16051,16 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc margin: 0; padding: var(--size-4-3); } -.mod-selectable { - cursor: var(--cursor); - padding: var(--size-4-2) var(--size-4-4); - border-radius: var(--radius-m); -} -@media (hover: hover) { - .mod-selectable:hover { - background-color: var(--background-modifier-hover); - } -} -.sync-history-load-more-button { +button.sync-history-button { background-color: var(--background-secondary); - height: 32px; - text-align: center; - line-height: 32px; - font-size: var(--font-ui-small); - cursor: var(--cursor); - color: var(--text-muted); - margin: var(--size-4-1) var(--size-4-2) var(--size-4-2); - border-radius: var(--radius-s); + box-shadow: none; + margin: var(--size-4-1) 0 var(--size-4-2); + min-height: var(--input-height); } @media (hover: hover) { - .sync-history-load-more-button:hover { + button.sync-history-button:hover { background-color: var(--background-modifier-hover); - color: var(--text-normal); + box-shadow: none; } } /* Sync log */ @@ -11711,23 +16068,13 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc height: var(--modal-height); width: var(--modal-width); max-width: var(--modal-max-width-narrow); - padding: var(--size-4-4) 0 0 0; -} -.modal.mod-sync-log .modal-title { - padding: 0 var(--size-4-4); } .modal.mod-sync-log .modal-content { display: flex; flex-direction: column; overflow: hidden; - padding: 0; -} -.modal.mod-sync-log .modal-button-container { - margin: 0; - padding: var(--size-4-4); -} -.modal.mod-sync-log .setting-item { - padding: 0.75em var(--size-4-4) var(--size-4-4); + margin: calc(var(--size-4-1) * -1); + padding: var(--size-4-1); } .modal.mod-sync-log .sync-log-container { overflow: auto; @@ -11735,20 +16082,23 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc font-family: var(--font-monospace); font-size: var(--font-ui-smaller); color: var(--text-muted); - border-top: 1px solid var(--background-modifier-border); - border-bottom: 1px solid var(--background-modifier-border); - padding: var(--size-4-4); background-color: var(--background-secondary); + border-radius: var(--radius-s); + border: 1px solid var(--background-modifier-border); + padding: var(--size-4-4); + overflow-y: auto; } .modal.mod-sync-log .sync-log-container .list-item { line-height: var(--line-height-normal); + gap: 0; margin: 0; + white-space: pre-wrap; } .modal.mod-sync-log .sync-log-container .list-item.mod-error { color: var(--text-error); } .sync-file-tree-container { - max-height: calc(90vh - 250px); + max-height: calc(min(90vh, var(--modal-max-height)) - 250px); overflow: auto; } .sync-exclude-folder { @@ -11764,11 +16114,74 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc } .sync-exclude-folder-remove { visibility: hidden; - margin-right: 6px; + margin-inline-end: 6px; } .sync-exclude-folder:hover .sync-exclude-folder-remove { visibility: visible; } +.sync-modal-header { + display: flex; + flex-direction: row-reverse; + justify-content: space-between; +} +.sync-modal-buttons > *:not(:last-child) { + margin-inline-end: var(--size-4-2); +} +.workspace-leaf-content[data-type=sync] .view-content { + padding: 0; + overflow: hidden; + display: flex; + flex-direction: column; +} +.recent-changes-container { + padding: var(--size-4-3) var(--size-4-3) var(--size-4-8); + overflow-y: auto; + overflow-x: hidden; + /* Remove indentation for the collapse indicator normally used in Tree views */ + /* Remove indentation of child elements in Tree views */ +} +.recent-changes-container .nav-folder-title { + font-weight: var(--nav-heading-weight); + color: var(--nav-heading-color); +} +.recent-changes-container .nav-folder-title:hover { + font-weight: var(--nav-heading-weight) !important; +} +.recent-changes-container .nav-folder-title .collapse-icon { + display: none; +} +.recent-changes-container .tree-item.nav-folder.is-collapsed .nav-folder-title { + color: var(--nav-heading-color-collapsed); +} +@media (hover: hover) { + .recent-changes-container .tree-item.nav-folder.is-collapsed .nav-folder-title:hover { + color: var(--nav-heading-color-collapsed-hover); + } +} +.recent-changes-container .nav-folder-children { + margin-bottom: var(--size-4-4); +} +.recent-changes-container .nav-file-title, +.recent-changes-container .nav-folder-title { + padding-inline-start: var(--size-4-2); +} +.recent-changes-container .tree-item-children { + border-inline-start: unset; + padding-inline-start: 0; + margin-inline-start: 0; +} +.recent-changes-container .more-button { + justify-content: center; + color: var(--text-faint); +} +.sync-vault-share-container { + overflow: hidden; + display: flex; + flex-direction: column; +} +.sync-vault-shares-list-item-container { + overflow: auto; +} .tag-pane-tag.is-active { background-color: var(--interactive-accent); color: var(--text-on-accent); @@ -11786,6 +16199,7 @@ body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-foc .tag-container { font-size: var(--font-ui-small); padding: var(--size-4-3) var(--size-4-3) var(--size-4-8); + padding-bottom: max(var(--safe-area-inset-bottom), var(--size-4-8)); overflow: auto; } .tree-item-children .tag-pane-tag .tag-pane-tag-parent { @@ -11974,26 +16388,32 @@ body.theme-dark { } @media (hover: hover) { .canvas-card-menu .canvas-card-menu-button.mod-draggable:hover svg { - transform: translateY(-6px); + transform: translateY(-6px) scale(var(--direction), 1); filter: drop-shadow(0px 6px 2px rgba(0, 0, 0, 0.1)); } } .canvas-controls { - right: var(--size-4-2); + inset-inline-end: var(--size-4-2); top: var(--size-4-2); gap: var(--size-4-2); display: flex; flex-direction: column; } +.is-mobile .canvas-controls { + inset-inline-end: var(--size-4-3); +} .canvas-control-group { - border-radius: var(--radius-s); - background-color: var(--background-primary); + border-radius: var(--canvas-controls-radius); + background-color: var(--interactive-normal); border: 1px solid var(--background-modifier-border); box-shadow: var(--input-shadow); display: flex; flex-direction: column; overflow: hidden; } +.is-mobile .canvas-control-group { + border: none; +} .canvas-control-item { border-radius: 0; box-shadow: none; @@ -12007,9 +16427,11 @@ body.theme-dark { padding: var(--size-4-2); border-bottom: 1px solid var(--background-modifier-border); color: var(--text-muted); - background-color: var(--interactive-normal); - --icon-size: var(--icon-s); - --icon-stroke: var(--icon-s-stroke-width); + --icon-size: var(--canvas-controls-icon-size); + --icon-stroke: var(--canvas-controls-icon-stroke); +} +.is-mobile .canvas-control-item { + border: none; } .canvas-control-item:last-child { border-bottom: none; @@ -12032,7 +16454,7 @@ body.theme-dark { .canvas-node-container { background-color: var(--background-primary); border-radius: var(--radius-m); - border: 2px solid rgb(var(--canvas-color)); + border: 1px solid rgb(var(--canvas-color)); contain: strict; display: flex; flex-direction: column; @@ -12252,7 +16674,6 @@ body:not(.is-ios) .canvas-wrapper.mod-animating .canvas-group-label { color: var(--text-on-accent-inverted); } .canvas-node-content { - backface-visibility: hidden; width: 100%; height: 100%; overflow: hidden; @@ -12265,8 +16686,11 @@ body:not(.is-ios) .canvas-wrapper.mod-animating .canvas-group-label { .canvas-node-content.markdown-embed .inline-title { cursor: text; } +.canvas-node-content.markdown-embed > .markdown-embed-link { + display: none; +} .canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view { - padding: 0 var(--size-4-6); + padding: 0 var(--size-4-4); display: flex; flex-direction: column; } @@ -12278,7 +16702,7 @@ body:not(.is-ios) .canvas-wrapper.mod-animating .canvas-group-label { .canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view::after { content: " "; display: block; - min-height: min(calc(var(--canvas-node-height) * 0.1 - 3px), var(--size-4-6)); + min-height: min(calc(var(--canvas-node-height) * 0.1 - 3px), var(--size-4-4)); max-height: var(--size-4-4); flex: 1 1 0; } @@ -12288,15 +16712,6 @@ body:not(.is-ios) .canvas-wrapper.mod-animating .canvas-group-label { .canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view .callout { mix-blend-mode: normal; } -.canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view .markdown-preview-pusher + div > *:first-child { - margin-top: 0; -} -.canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view .mod-header + div > *:first-child { - margin-top: 0; -} -.canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view .markdown-preview-sizer > div:last-child > *:last-child { - margin-bottom: 0; -} .is-focused .canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view { transform: translateZ(0); } @@ -12468,7 +16883,7 @@ body.is-mobile .canvas-node-resizer { } .canvas-edges path.canvas-display-path { pointer-events: none; - stroke-width: calc(3px * var(--zoom-multiplier)); + stroke-width: calc(2px * var(--zoom-multiplier)); stroke: rgb(var(--canvas-color)); fill: none; transition: stroke-width 100ms ease-out; @@ -12686,19 +17101,19 @@ body.is-mobile .canvas-node-resizer { .canvas-watermark * { font-family: var(--font-default) !important; } -.browser-favicon-container { +.webviewer-favicon-container { display: flex; align-items: center; } -.browser-favicon-container > * { +.webviewer-favicon-container > * { height: var(--icon-size); max-width: var(--icon-size); } -.view-action.mod-browser { +.view-action.mod-webviewer { --icon-color: var(--icon-color-active); --icon-color-hover: var(--icon-color-active); } -.browser-container { +.webviewer-container { height: 100%; display: flex; flex-direction: column; @@ -12714,48 +17129,48 @@ body.is-mobile .canvas-node-resizer { align-items: center; --icon-size: var(--icon-s); } -.browser-address { +.webviewer-address { width: 100%; display: flex; margin: 0 2px; } -.browser-address input { +.webviewer-address input { flex-grow: 1; min-width: 50px; } -.browser-address-container { +.webviewer-address-container { padding: 0 var(--size-4-2); } -.browser-address-container::after { +.webviewer-address-container::after { /* Remove the gradient normally at the end of the titleContainerEl */ background: transparent !important; } -.browser-addressbar-suggestion.suggestion-item { +.webviewer-addressbar-suggestion.suggestion-item { gap: var(--size-4-2); align-items: center; } -.browser-addressbar-suggestion.suggestion-item .suggestion-flair-left, -.browser-addressbar-suggestion.suggestion-item .suggestion-icon:first-child { +.webviewer-addressbar-suggestion.suggestion-item .suggestion-flair-left, +.webviewer-addressbar-suggestion.suggestion-item .suggestion-icon:first-child { color: var(--text-muted); --icon-size: var(--icon-s); --icon-stroke: var(--icon-s-stroke-width); display: flex; min-width: var(--icon-s); } -.browser-addressbar-suggestion.suggestion-item .suggestion-flair-left img, -.browser-addressbar-suggestion.suggestion-item .suggestion-icon:first-child img { +.webviewer-addressbar-suggestion.suggestion-item .suggestion-flair-left img, +.webviewer-addressbar-suggestion.suggestion-item .suggestion-icon:first-child img { height: var(--icon-size); max-width: var(--icon-size); } -.browser-addressbar-suggestion.suggestion-item .suggestion-icon:last-child:empty { +.webviewer-addressbar-suggestion.suggestion-item .suggestion-icon:last-child:empty { display: none; } -.browser-addressbar-suggestion.suggestion-item > .suggestion-content { +.webviewer-addressbar-suggestion.suggestion-item > .suggestion-content { align-items: baseline; flex-direction: row; flex-grow: 1; } -.browser-addressbar-suggestion.suggestion-item > .suggestion-content > .suggestion-title { +.webviewer-addressbar-suggestion.suggestion-item > .suggestion-content > .suggestion-title { max-width: 75%; flex-shrink: 0; overflow: hidden; @@ -12763,59 +17178,117 @@ body.is-mobile .canvas-node-resizer { text-wrap: nowrap; font-size: var(--font-ui-medium); } -.browser-addressbar-suggestion.suggestion-item > .suggestion-content > .suggestion-url { +.webviewer-addressbar-suggestion.suggestion-item > .suggestion-content > .suggestion-url { overflow: hidden; text-overflow: ellipsis; text-wrap: nowrap; font-size: var(--font-ui-small); color: var(--text-muted); } -.browser-addressbar-suggestion.suggestion-item > .suggestion-content .suggestion-title + .suggestion-url { +.webviewer-addressbar-suggestion.suggestion-item > .suggestion-content .suggestion-title + .suggestion-url { margin-left: var(--size-4-2); } -.browser-addressbar-suggestion.suggestion-item > .suggestion-content .suggestion-title:empty + .suggestion-url { +.webviewer-addressbar-suggestion.suggestion-item > .suggestion-content .suggestion-title:empty + .suggestion-url { margin-left: 0; } -.view-content.browser-content { +.view-content.webviewer-content { padding: 0; } -.browser-content { - border-top: 1px solid var(--divider-color); +.webviewer-content { + border-top: var(--border-width) solid var(--divider-color); height: 100%; display: flex; flex-direction: column; } -.browser-content webview { +.webviewer-content webview { flex-grow: 1; width: 100%; } -.browser-content .reader-mode-content { +.webviewer-content .reader-mode-content { overflow-y: auto; } -.browser-content .reader-mode-content.is-readable-line-width .markdown-preview-sizer { +.webviewer-content .reader-mode-content.is-readable-line-width .markdown-preview-sizer { max-width: var(--file-line-width); margin-left: auto; margin-right: auto; } -.browser-content .markdown-preview-view .external-link { +.webviewer-content .markdown-preview-view .external-link { /* Hide the external link icon */ background-image: none; padding-right: 0; } -.browser-content .error-notice { +.webviewer-content .error-notice { max-width: var(--file-line-width); margin: 25% auto 0; padding: var(--file-margins); } /* History View */ -.browser-history-view-item { +.webviewer-history-view-item { text-wrap: nowrap; overflow: hidden; } /* Settings */ -textarea.browser-adblock-lists { +textarea.webviewer-adblock-lists { flex-grow: 1; } +.list-container.mod-manage-workspaces { + margin-top: var(--size-4-4); + padding-top: var(--size-4-1); + border-top: var(--border-width) solid var(--divider-color); +} +.list-container.mod-manage-workspaces:empty { + display: none; +} +.footnotes-view .footnote { + background-color: var(--footnote-input-background); + border-radius: var(--footnote-radius); + display: flex; + gap: var(--footnote-gap); + padding-inline: var(--footnote-padding-inline); + padding-block: var(--footnote-padding-block); +} +.footnotes-view .footnote-list-item { + border-bottom: var(--footnote-divider-width) solid var(--footnote-divider-color); +} +.footnotes-view .footnote-list-item.is-editing { + border-color: var(--footnote-divider-color-active); +} +.footnotes-view .footnote-list-item.is-editing > .footnote { + background-color: var(--footnote-input-background-active); + box-shadow: 0 0 0 var(--input-border-width-focus) var(--background-modifier-border-focus); +} +.footnotes-view .footnote-list-item:last-child { + border-bottom-width: 0; +} +.footnotes-view .footnote-id { + color: var(--footnote-id-color); + font-size: var(--footnote-size); + font-variant-numeric: tabular-nums; + line-height: var(--footnote-line-height); +} +.footnotes-view .footnote-id::after { + content: var(--footnote-id-delimiter); +} +.footnotes-view .footnote-id.mod-no-occurrences { + color: var(--footnote-id-color-no-occurrences); +} +.footnotes-view .footnote-content { + width: 100%; + cursor: text; +} +.footnotes-view .footnote-content .markdown-preview-view, +.footnotes-view .footnote-content .markdown-source-view { + padding: 0; + font-size: var(--footnote-size); + line-height: var(--footnote-line-height); +} +.footnotes-view .markdown-embed { + padding: 0; + border: none; +} +.footnotes-view .inline-title { + display: none; +} .starter.is-hidden-frameless .titlebar { display: block; } @@ -12870,7 +17343,7 @@ textarea.browser-adblock-lists { overflow: auto; width: 100%; max-width: 82%; - text-align: left; + text-align: start; padding: var(--size-4-6) 0; } .help-options-container::-webkit-scrollbar { @@ -12878,7 +17351,7 @@ textarea.browser-adblock-lists { } .help-options-container .setting-item-description { max-width: 30em; - padding-right: 12px; + padding-inline-end: 12px; } .help-options-container .setting-icon .svg-icon { stroke-width: 1px; @@ -12895,13 +17368,14 @@ textarea.browser-adblock-lists { display: none; } .open-vault-options { + background-color: var(--background-primary); position: absolute; top: 0; left: 0; width: 100%; height: 100%; padding: 12px 36px; - text-align: left; + text-align: start; overflow-y: auto; display: flex; flex-direction: column; @@ -12937,6 +17411,10 @@ textarea.browser-adblock-lists { .open-vault-options.mod-login input[type='text'] { width: 250px; } +.open-vault-options .button-container { + margin-top: var(--size-4-3); + text-align: center; +} .quick-start-container { margin-bottom: 10px; } @@ -12989,8 +17467,8 @@ textarea.browser-adblock-lists { } .setting-icon { display: flex; - color: var(--text-muted); - margin-right: 24px; + color: var(--text-normal); + align-self: flex-start; } .recent-vaults { background-color: var(--background-secondary); @@ -13069,53 +17547,104 @@ textarea.browser-adblock-lists { --safe-area-inset-bottom: env(safe-area-inset-bottom); --safe-area-inset-left: env(safe-area-inset-left); --safe-area-inset-right: env(safe-area-inset-right); + --preferred-text-scale: env(preferred-text-scale); + --keyboard-height: 0px; } .is-mobile { - --ribbon-width: 58px; - --view-header-height: 50px; - --mobile-toolbar-height: 40px; + --ribbon-width: var(--touch-size-xl); + --view-header-height: var(--touch-size-l); + --bases-header-height: var(--touch-size-l); + --mobile-toolbar-height: var(--touch-size-l); + --autoscroll-padding: 20px; + --system-status-background: var(--background-primary); + --canvas-controls-radius: var(--touch-radius-s); + --canvas-controls-icon-size: var(--icon-l); + --canvas-controls-icon-stroke: var(--icon-l-stroke-width); --caret-color: var(--text-accent); + --clickable-icon-radius: var(--touch-size-m); + --dropdown-padding-end: var(--size-4-8); + --dropdown-padding-start: var(--size-4-4); + --dropdown-icon-inset: var(--size-4-3); --font-ui-smaller: calc(var(--font-text-size) * 0.8); --font-ui-small: calc(var(--font-text-size) * 0.937); --font-ui-medium: var(--font-text-size); --font-ui-large: calc(var(--font-text-size) * 1.2); + --icon-xs: 18px; --icon-s: 18px; --icon-m: 20px; --icon-l: 24px; - --icon-l-stroke-width: 1.8px; --icon-opacity: 1; - --input-height: 40px; + --icon-opacity-hover: 0.65; + --input-height: var(--touch-size-m); --input-shadow: none; --input-shadow-hover: none; --input-font-weight: var(--font-medium); --input-border-width: 0px; + --input-radius: var(--touch-radius-m); + --input-padding: var(--size-4-1) var(--size-4-4); + --input-icon-inset: var(--size-4-2); --interactive-normal: var(--background-secondary); - --mobile-sidebar-width: 340px; - --mobile-sidebar-max-width: 500px; - --nav-item-padding: var(--size-2-3) var(--size-4-2) var(--size-2-3) var(--size-4-6); + --interactive-hover: var(--background-modifier-border); + --menu-divider-width: var(--border-width); + --menu-divider-color: var(--background-modifier-border); + --menu-backdrop-filter: var(--blur-m); + --mobile-sidebar-width: 84vw; + --mobile-sidebar-width-pinned: 350px; + --mobile-sidebar-min-width: 300px; + --mobile-sidebar-max-width: 450px; + --mobile-sidebar-background: var(--background-primary); + --mobile-sidebar-radius: 0; + --modal-background: var(--background-primary); + --modal-radius: var(--touch-radius-xs); + --navbar-max-width: 316px; + --navbar-width: fit-content; + --navbar-height: var(--touch-size-l); + --navbar-radius: var(--touch-size-l); + --nav-item-padding: var(--size-4-2) var(--size-4-2) var(--size-4-2) var(--size-4-6); + --nav-item-margin-bottom: 0; --nav-item-color: var(--text-normal); + --nav-item-radius: var(--touch-radius-xs); + --nav-item-size: var(--font-ui-medium); + --nav-item-weight-active: var(--font-semibold); + --prompt-background: var(--background-secondary); + --prompt-backdrop-filter: var(--blur-m); + --prompt-input-height: var(--touch-size-l); + --radius-xl: 18px; --search-clear-button-size: 16px; --search-icon-size: 20px; + --settings-background: var(--background-secondary); + --setting-items-background: var(--background-primary); + --setting-items-radius: var(--touch-radius-xs); + --setting-group-heading-color: var(--text-muted); + --setting-group-heading-weight: var(--font-semibold); + --setting-group-heading-size: var(--font-ui-small); --settings-home-background: var(--background-secondary); - --slider-thumb-border-width: 0px; + --slider-thumb-border-width: 0.5px; --slider-thumb-height: 24px; --slider-thumb-width: 24px; --slider-thumb-y: -9px; --slider-track-height: 6px; + --suggestion-background: var(--background-secondary); + --suggestion-backdrop-filter: var(--blur-m); --swatch-shadow: none; - --swatch-height: 40px; - --swatch-width: 40px; - --swatch-radius: 40px; - --toggle-width: 48px; + --swatch-height: var(--touch-size-s); + --swatch-width: var(--touch-size-s); + --swatch-radius: var(--touch-size-s); + --textarea-radius: var(--touch-radius-xxs); + --textarea-padding: var(--size-4-3) var(--size-4-4); + --toggle-width: 52px; --toggle-radius: 26px; --toggle-thumb-radius: 26px; --toggle-thumb-height: 26px; --toggle-thumb-width: 26px; - --file-margins: var(--size-4-2) var(--size-4-5); - --background-modifier-cover: rgba(0, 0, 0, 0.25); - --background-modifier-form-field: var(--background-secondary); + --file-margins-y: var(--size-4-2); + --file-margins-x: var(--size-4-6); + --background-modifier-cover: rgba(0, 0, 0, 0.15); + --background-modifier-form-field: var(--interactive-normal); + --background-modifier-form-field-hover: var(--interactive-hover); --keyboard-background: var(--background-primary); --checkbox-size: 17px; + --cursor: pointer; } .is-mobile.theme-dark { --color-base-00: #000; @@ -13124,140 +17653,285 @@ textarea.browser-adblock-lists { --tag-background: hsla(var(--interactive-accent-hsl), 0.2); --search-result-background: var(--background-secondary); --background-modifier-form-field: var(--background-modifier-border); - --background-modifier-cover: rgba(0, 0, 0, 0.5); + --background-modifier-cover: rgba(0, 0, 0, 0.35); --background-modifier-hover: rgba(var(--mono-rgb-100), 0.15); + --background-modifier-message: var(--background-secondary); --settings-home-background: var(--background-primary); + --settings-background: var(--background-primary); + --setting-items-background: var(--background-secondary); + --menu-divider-color: var(--background-modifier-border-hover); + --mobile-sidebar-background: var(--background-secondary); + --modal-background: var(--background-secondary); + --interactive-normal: var(--background-modifier-border); + --interactive-hover: var(--background-modifier-border-hover); +} +body.is-mobile { + position: relative; + height: 100vh; + width: 100vw; + -webkit-text-size-adjust: 100%; +} +body.is-mobile .app-container { + max-height: calc(100vh - var(--keyboard-height)); +} +body.is-mobile.keyboard-animating .app-container { + max-height: 100vh; +} +.is-phone { + --view-top-spacing: calc(var(--safe-area-inset-top) + var(--view-header-height) + 8px); + --view-top-spacing-markdown: calc(var(--safe-area-inset-top) + var(--view-header-height) + 16px); + --view-bottom-spacing: calc(var(--safe-area-inset-bottom) + var(--navbar-height)); + --view-header-height: var(--touch-size-m); + --modal-community-sidebar-width: 100%; + --metadata-label-width: 7.5em; + --nav-item-size: var(--font-ui-medium); + --file-header-background: transparent; + --file-header-background-focused: transparent; +} +.is-phone .markdown-source-view.mod-cm6 .cm-gutters { + margin-inline-start: -18px; +} +@media (min-resolution: 2dppx), (min-resolution: 192dpi) { + .is-phone { + --border-width: 0.5px; + --divider-width: 0.5px; + --tab-outline-width: 0.5px; + } +} +@media (max-width: 380px) { + .is-phone.is-mobile { + --mobile-sidebar-min-width: 200px; + --mobile-sidebar-width: 100vw; + --mobile-sidebar-radius: 0; + } +} +.is-tablet { + --nav-item-padding: var(--size-2-3) var(--size-4-2) var(--size-2-3) var(--size-4-6); + --tab-font-size: var(--font-ui-smaller); + --system-status-background: var(--titlebar-background); + --mobile-sidebar-radius: 24px; +} +.is-tablet.theme-dark { + --titlebar-background: var(--background-primary); + --titlebar-background-focused: var(--background-primary); +} +.is-tablet button:not(.clickable-icon) { + padding: var(--size-4-1) var(--size-4-5); +} +.is-phone.theme-dark { + --modal-sidebar-background: var(--background-primary); +} +.is-ios { + --slider-thumb-width: 36px; + --toggle-width: 62px; + --toggle-radius: 24px; + --toggle-thumb-radius: 24px; + --toggle-thumb-height: 24px; + --toggle-thumb-width: 36px; + --toggle-thumb-opacity-active: 0.6; + --toggle-s-width: 48px; + --toggle-s-thumb-height: 15px; + --toggle-s-thumb-width: 28px; +} +body.emulate-mobile { + --safe-area-inset-top: 59px; + --safe-area-inset-bottom: 34px; + --safe-area-inset-left: 0px; + --safe-area-inset-right: 0px; +} +body.emulate-mobile button, +body.emulate-mobile input, +body.emulate-mobile .suggestion-bg, +body.emulate-mobile .text-icon-button, +body.emulate-mobile .clickable-icon { + touch-action: manipulation; +} +body.hide-cursor { + caret-color: transparent !important; +} +body.is-screenshotting .mod-raised { + visibility: hidden; +} +body.is-screenshotting *::-webkit-scrollbar { + display: none; +} +.is-phone { + --metadata-property-box-shadow: none; + --bases-embed-width: calc(100% + var(--file-margins-x) * 2); + --bases-embed-border-radius: 0; + --bases-embed-border-width: var(--border-width) 0; + --bases-embed-transform: translateX(calc(-1 * var(--file-margins-x))); +} +.is-phone .bases-header .bases-toolbar-item { + --bases-toolbar-label-display: none; +} +.is-phone .callout-content { + --bases-embed-transform: none; + --bases-embed-width: 100%; +} +.is-phone .workspace-leaf-content[data-type=bases] .bases-cards-container, +.is-phone .workspace-leaf-content[data-type=bases] .bases-table-container { + margin-bottom: var(--view-bottom-spacing); +} +.is-phone .workspace-leaf-content[data-type=bases] .bases-tr.bases-table-footer { + height: calc(var(--view-bottom-spacing) + var(--bases-table-row-height)); +} +.is-phone .bases-toolbar-views-menu .search-input-container, +.is-phone .bases-toolbar-properties-menu .search-input-container { + width: calc(100% - var(--size-4-6)); + margin-left: auto; + margin-right: auto; + border: none; + position: absolute; + left: var(--size-4-3); + bottom: var(--safe-area-inset-bottom); + z-index: 1; +} +.is-phone .bases-toolbar-views-menu .suggestion-group[data-group="actions"], +.is-phone .bases-toolbar-properties-menu .suggestion-group[data-group="actions"] { + order: -1; + flex-direction: row; + gap: var(--size-4-3); + border: none; +} +.is-phone .bases-toolbar-views-menu .suggestion-group[data-group="actions"] .suggestion-item, +.is-phone .bases-toolbar-properties-menu .suggestion-group[data-group="actions"] .suggestion-item { + border-radius: var(--touch-radius-xxs); +} +.is-phone .bases-toolbar-items .suggestion-group[data-group="views"], +.is-phone .bases-toolbar-items .suggestion-group[data-group="properties"] { + padding-bottom: calc(var(--safe-area-inset-bottom) + var(--input-height) + var(--size-4-2)); +} +.is-phone .bases-toolbar-menu { + background-color: var(--background-secondary); + border: none; + width: calc(100% - var(--safe-area-inset-left) - var(--safe-area-inset-right)); + min-width: unset; + position: fixed; + margin-left: var(--safe-area-inset-left); + margin-right: var(--safe-area-inset-right); + border-radius: var(--radius-l) var(--radius-l) 0 0; + height: calc(100vh - var(--safe-area-inset-top)); + bottom: 0; + left: 0; + right: 0; + margin: 0 auto; } -.is-tablet { - --nav-item-padding: var(--size-2-3) var(--size-4-2) var(--size-2-3) var(--size-4-6); - --tab-font-size: var(--font-ui-smaller); +.is-phone .bases-toolbar-menu .modal-header { + display: block; } -.is-tablet.theme-dark { - --titlebar-background: var(--background-primary); - --titlebar-background-focused: var(--background-primary); - --interactive-normal: var(--background-modifier-border); - --modal-background: var(--background-secondary); +.is-phone .bases-toolbar-menu .modal-close-button { + top: var(--size-4-2); + inset-inline-end: var(--size-4-4); } -.is-phone { - --border-width: 0.5pt; - --divider-width: 0.5pt; - --tab-outline-width: 0.5pt; - --modal-header-height: 44px; - --modal-community-sidebar-width: 100%; - --metadata-label-width: 7.5em; - --nav-item-size: var(--font-ui-medium); +.is-phone .bases-toolbar-menu .menu-scroll { + max-height: unset; } -body.is-mobile { - height: 100vh; - width: 100vw; - caret-color: var(--caret-color); - padding-bottom: 50px; +.is-phone .base-toolbar-sort-item .bases-sort-property, +.is-phone .base-toolbar-groupby-item .bases-sort-property, +.is-phone .base-toolbar-sort-item .filter-property-select, +.is-phone .base-toolbar-groupby-item .filter-property-select { + max-width: unset; } -.is-mobile .markdown-source-view.mod-cm6 .cm-content, -.is-mobile .mod-cm6 .cm-line { - caret-color: var(--caret-color); +.is-phone .bases-toolbar-menu-item { + padding: var(--size-4-2) var(--size-4-3); } -.is-mobile .markdown-source-view.mod-cm6 .cm-gutters { - margin-left: -18px; +.is-phone .bases-toolbar-menu-container { + --bases-property-menu-item-radius: 0; + max-width: 100%; } -.is-mobile .workspace > .mod-root { - padding-left: var(--safe-area-inset-left); +.is-phone .bases-toolbar-menu-container .bases-toolbar-menu-container-header { + --icon-size: var(--icon-l); + --icon-stroke: var(--icon-l-stroke-width); } -body.is-mobile { - padding: var(--safe-area-inset-top) 0 0 0; - -webkit-text-size-adjust: 100%; +.is-phone .bases-toolbar-menu-container input[type=search] { + border: 0; + box-shadow: none; + border-radius: var(--radius-xl); + background-color: var(--background-modifier-form-field); } -.is-mobile .workspace-split.mod-left-split, -.is-mobile .workspace-split.mod-right-split { +.is-phone .bases-toolbar-menu-container .close-icon { display: none; } -.is-mobile .tree-item .tree-item-self { - padding-right: var(--size-4-2); +.is-phone .filter-row > .conjunction { + display: none; } -.is-mobile .input-label { - display: block; - text-align: left; - color: var(--text-muted); - margin-bottom: 8px; +.is-phone .bases-query-container .conjunction.dropdown { + width: 100%; } -.is-mobile input[type='text'] { +.is-phone .bases-query-container .filter-lhs-container { width: 100%; + border-bottom: var(--border-width) solid var(--menu-background); } -.is-mobile .markdown-rendered pre:not(:hover) > button.copy-code-button { - display: block; +.is-phone .bases-query-container .filter-rhs-container { + border-width: 0; } -.is-mobile .markdown-rendered button.copy-code-button { - width: auto; +.is-phone .bases-query-container .filter-rhs-container:empty { + display: none; } -.is-mobile .empty-state-action-list { - margin-top: 40px; +.is-phone .bases-query-container .filter-expression { + background-color: var(--interactive-normal); + flex-wrap: wrap; + box-shadow: none; } -.is-mobile .empty-state-action { - background-color: var(--background-primary-alt); - margin: 12px 0; - padding: 6px 30px; - border-radius: var(--button-radius); - text-align: center; +.is-phone .bases-query-container .combobox-button { + padding-inline-start: var(--size-4-2); + border-width: 0; } -.is-mobile .login-field { - width: 100%; - margin: 0.5em 0 0.5em 0; +.is-phone .bases-query-container .filter-group .filter-row .filter-operator { + border-width: 0; } -.is-mobile .login-field input { - width: 100%; +.is-mobile { + --bases-cards-scale: 0.85; } -.is-mobile .markdown-rendered .heading-collapse-indicator { - margin-left: -20px; +.is-mobile .bases-toolbar-section { + padding: var(--size-4-1); } -.is-mobile .markdown-rendered ul, -.is-mobile .markdown-rendered ol { - padding-inline-start: 25px; +.is-mobile .bases-toolbar-menu-form, +.is-mobile .bases-sort-container { + padding-bottom: var(--safe-area-inset-bottom); } -.is-mobile .message-container { - text-align: center; - margin: 8px 0; +.is-mobile .bases-toolbar-filter-menu .menu-scroll { + padding-bottom: var(--safe-area-inset-bottom); } -.is-mobile .search-result-file-match-replace-button { - display: block; - position: relative; - padding: 6px 10px; - right: 0; - margin-top: var(--size-4-3); - background-color: var(--settings-home-background); +.is-mobile .view-content > .bases-view { + overscroll-behavior: none; } -.is-mobile .suggestion-flair { - position: relative; - margin-right: 6px; - left: 0; - top: 0; +.is-mobile .workspace-leaf-content[data-type=bases-query] .bases-header { + --bases-header-padding-start: var(--size-4-4); + --bases-header-padding-end: var(--size-4-4); +} +.is-mobile .bases-header { + --icon-size: var(--icon-l); + --icon-stroke: var(--icon-l-stroke-width); +} +.is-mobile .bases-header .bases-toolbar { + column-gap: var(--size-4-2); +} +.is-mobile .action-row { + padding: var(--size-4-2) var(--size-4-3); } .is-mobile .document-search-container { - height: auto; - margin-left: 0; - margin-right: 0; - padding: 0 var(--size-4-4) var(--size-4-2); + margin-inline-end: 0; + margin-inline-start: 0; + padding: var(--size-4-4) var(--size-4-3); border-bottom: var(--border-width) solid var(--background-modifier-border); + padding-top: var(--view-top-spacing-markdown); } .is-mobile .document-search-container.mod-replace-mode { height: auto; } +.is-mobile .document-search-container + .markdown-preview-view, +.is-mobile .document-search-container + .cm-editor { + --view-top-spacing-markdown: var(--size-4-3); +} .is-mobile .document-search, .is-mobile .document-replace { height: auto; padding: 0; } -.is-mobile .document-search .document-search-button, -.is-mobile .document-replace .document-search-button { - height: auto; - padding: 6px 0; - background-color: transparent; - color: var(--text-accent); -} .is-mobile .document-search input, -.is-mobile .document-replace input, -.is-mobile .document-search button, -.is-mobile .document-replace button { - width: auto; +.is-mobile .document-replace input { flex-grow: 1; } .is-mobile .document-search .document-search-buttons, @@ -13266,143 +17940,205 @@ body.is-mobile { .is-mobile .document-replace .document-replace-buttons { display: flex; flex-grow: 1; + align-items: stretch; } -.is-mobile .document-search .document-search-close-button, -.is-mobile .document-replace .document-search-close-button { - height: 34px; - line-height: 34px; - top: 0; +.is-phone .document-replace-buttons, +.is-phone .document-search-buttons { + gap: var(--size-2-1); + padding-inline-start: var(--size-4-1); + justify-content: flex-end; } -.is-tablet .mod-left-split-toggle { - display: none; +.is-phone .document-search, +.is-phone .document-replace { + gap: var(--size-4-1); } -.is-tablet button:not(.clickable-icon) { - padding: var(--size-4-1) var(--size-4-5); +.mobile-onboarding { + --nav-height: 80px; + --content-height: calc(100vh - var(--safe-area-inset-top)); + --input-border-width: 1px; + max-height: var(--content-height); + margin-top: var(--safe-area-inset-top); + overflow-x: hidden; + overflow-y: auto; + scrollbar-gutter: stable; } -.is-phone .vault-list-item-creation-time { - display: none; +.mobile-onboarding .logo { + color: var(--interactive-accent); } -.is-phone .vault-list-item { - padding: 5px 0; +.mobile-onboarding h1 { + font-size: var(--h1-size); } -.is-phone .vault-list-item .flair { - display: none; +.mobile-onboarding .list-heading { + color: var(--text-normal); + font-size: var(--font-ui-medium); + font-weight: var(--font-semibold); + line-height: var(--line-height-normal); + margin-top: 1.5em; + margin-bottom: var(--size-4-2); } -.is-phone .vault-list-item-title { - flex: 1 0 auto; +.mobile-onboarding p { + font-size: var(--font-ui-medium); + margin-block: 0.8em; } -.is-phone .vault-list-item-button { - margin-right: 0; +.mobile-onboarding input { + background-color: transparent; } -.suggestion-bg { - display: none; +.mobile-onboarding .form-field-help { + color: var(--text-faint); + font-size: var(--font-ui-small); + margin: var(--size-2-3) 0; } -body.is-phone .suggestion-bg { - display: block; - z-index: var(--layer-modal); +.mobile-onboarding .button-container { + display: flex; + flex-direction: column; + gap: var(--size-4-4); + width: 100%; } -@keyframes fadeIn { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } +.mobile-onboarding .back-button.mobile-tap { + opacity: 0.5; } -@keyframes fadeOut { - 0% { - opacity: 1; - } - 100% { - opacity: 0; - } +.mobile-onboarding .status-text { + font-size: var(--font-ui-small); + padding: 0 var(--size-4-6); } -.mobile-image-viewer { - position: absolute; - height: 100%; - width: 100%; - top: 0; - left: 0; - background-color: var(--background-modifier-cover); +.mobile-onboarding .mod-version { + opacity: 0.3; + order: 1; + text-align: center; + font-size: var(--font-ui-smaller); + margin: var(--size-4-2); +} +.mobile-onboarding-feature-table { display: flex; - justify-content: center; - overflow: hidden; - z-index: var(--layer-modal); + flex-direction: column; + font-size: var(--font-ui-small); + margin-top: var(--size-4-4); } -.mobile-image-viewer img { - align-self: center; - max-height: 100%; - max-width: 100%; +.mobile-onboarding-feature-table .feature-row { + display: flex; + flex-direction: row; + justify-content: space-between; } -.mod-tappable { - transition: opacity 0.15s ease-in-out; +.mobile-onboarding-feature-table .feature-row:not(:last-child) { + border-bottom: var(--input-border-width) solid var(--background-modifier-border); } -.mod-tappable.mod-tap { - opacity: 0.5; +.mobile-onboarding-feature-table .feature-cell { + display: flex; + align-items: center; + gap: var(--size-4-1); + padding: var(--size-4-1) 0; } -.mod-fade { - --scroll-fade-offset-right: 0; - --scroll-fade-offset-left: 0; +.mobile-onboarding-feature-table .feature-cell.mod-value { + color: var(--text-muted); + font-size: var(--font-ui-smaller); } -.mod-fade:not(.mod-at-start):before { - content: ' '; - position: absolute; - top: 0; - left: var(--scroll-fade-offset-left); - width: 30px; - height: 100%; - background: linear-gradient(to right, var(--background-primary), transparent); +.mobile-onboarding-feature-table .feature-cell.is-enabled { + color: var(--text-success); + font-size: var(--font-ui-smaller); } -.mod-fade:not(.mod-at-end):after { - content: ' '; - position: absolute; - top: 0; - right: var(--scroll-fade-offset-right); - width: 30px; - height: 100%; - background: linear-gradient(to right, transparent, var(--background-primary)); +.mobile-onboarding-screen { + display: flex; + flex-direction: column; + background-color: var(--background-primary); + margin: 0 auto; + max-width: 540px; + min-height: var(--content-height); + padding: var(--size-4-8); + padding-top: var(--nav-height); } -.is-mobile .document-search-container { - height: auto; - margin-left: 0; - margin-right: 0; - padding: 0 var(--size-4-4) var(--size-4-2); - border-bottom: var(--border-width) solid var(--background-modifier-border); +.mobile-onboarding-screen footer { + order: 1; + margin-top: var(--size-4-2); + flex-grow: 1; + display: flex; + flex-direction: column; + justify-content: flex-end; } -.is-mobile .document-search-container.mod-replace-mode { - height: auto; +.mobile-onboarding-radio-group { + display: flex; + flex-direction: column; + gap: var(--size-4-4); + margin: var(--size-4-2) 0; } -.is-mobile .document-search, -.is-mobile .document-replace { - height: auto; - padding: 0; +.mobile-onboarding-radio-option { + display: flex; + padding: var(--size-4-3); + gap: var(--size-4-2); + border-radius: var(--radius-m); + border: 2px solid var(--background-modifier-border); +} +.mobile-onboarding-radio-option:focus { + border-color: var(--background-modifier-border-focus); +} +.mobile-onboarding-radio-option.is-selected { + border-color: var(--interactive-accent); +} +.mobile-onboarding-radio-option-title { + display: flex; + font-size: var(--font-ui-medium); + font-weight: var(--font-semibold); +} +.mobile-onboarding-radio-option-title .flair { + align-self: baseline; + color: var(--text-success); + display: inline-block; + padding: var(--size-4-1) var(--size-4-2); + margin-left: auto; + border-radius: var(--radius-l); + background-color: rgba(var(--color-green-rgb), 0.3); +} +.mobile-onboarding-radio-option-desc { + font-size: var(--font-ui-small); + margin-top: var(--size-4-5); + padding-inline-start: 0; +} +.mobile-onboarding-radio-button { + flex-shrink: 0; + width: 20px; + height: 20px; + position: relative; + border: 2px solid var(--background-modifier-border); + border-radius: 50%; } -.is-mobile .document-search .document-search-button, -.is-mobile .document-replace .document-search-button { - height: auto; - padding: 6px 0; - background-color: transparent; - color: var(--text-accent); +.mobile-onboarding-radio-button::after { + top: 5px; + left: 5px; + position: absolute; + content: ' '; + height: 6px; + width: 6px; + border-radius: 50%; } -.is-mobile .document-search input, -.is-mobile .document-replace input, -.is-mobile .document-search button, -.is-mobile .document-replace button { - width: auto; - flex-grow: 1; +.mobile-onboarding-radio-option.is-selected .mobile-onboarding-radio-button { + background-color: var(--interactive-accent); } -.is-mobile .document-search .document-search-buttons, -.is-mobile .document-replace .document-search-buttons, -.is-mobile .document-search .document-replace-buttons, -.is-mobile .document-replace .document-replace-buttons { +.mobile-onboarding-radio-option.is-selected .mobile-onboarding-radio-button::after { + background-color: white; +} +.mobile-onboarding-navbar { display: flex; - flex-grow: 1; + align-items: center; + background-color: var(--background-primary); + padding-left: var(--size-4-10); + height: var(--nav-height); + position: fixed; + top: var(--safe-area-inset-top); + z-index: var(--layer-cover); + width: 100%; } -.is-mobile .document-search .document-search-close-button, -.is-mobile .document-replace .document-search-close-button { - height: 34px; - line-height: 34px; - top: 0; +.mobile-onboarding-navbar .back-button { + padding: var(--size-4-2) 0; +} +.is-mobile .modal-close-button, +.is-mobile .modal-setting-back-button, +.is-mobile .view-header-nav-buttons, +.is-mobile .view-header .view-action { + --icon-color: var(--text-normal); + --icon-color-hover: var(--text-normal); + --icon-color-active: var(--text-normal); + --icon-color-focus: var(--text-normal); + --icon-size: var(--icon-l); + --icon-stroke: var(--icon-l-stroke-width); } .is-mobile .view-header { border-top: none; @@ -13413,54 +18149,97 @@ body.is-phone .suggestion-bg { border-radius: 0; } .is-mobile .view-header-title { - padding-right: 0px; + padding-inline-end: 0px; +} +.is-mobile .inline-title { + padding-top: 0.5em; } .is-mobile .view-header-title-container { - padding-left: 24px; + height: var(--view-header-height); } .is-mobile .view-header-title-container:after { display: none; } -.is-mobile .view-header-icon { - padding: 10px; -} -.is-mobile .inline-title { - padding-top: 0.25em; -} -.is-mobile .horizontal-main-container { - position: relative; -} -.is-mobile .view-header-title-container { - height: 50px; +.is-mobile .view-header-left { + flex: 0; + align-items: center; + display: flex; } .is-mobile .view-actions { + justify-content: flex-end; padding: var(--size-4-2) 0; gap: var(--size-2-1); } -.is-mobile .view-header-nav-buttons, -.is-mobile .view-header .view-action { - --icon-color: var(--interactive-accent); - --icon-color-hover: var(--interactive-accent); - --icon-color-active: var(--interactive-accent-hover); - --icon-color-focus: var(--interactive-accent-hover); - --icon-size: var(--icon-l); - --icon-stroke: var(--icon-l-stroke-width); -} .is-mobile .view-action { margin: auto 0; width: auto; } -.is-phone .view-header-title-parent, +.is-tablet .mod-left-split-toggle { + display: none; +} +.is-phone.is-hidden-nav .view-header { + --hidden-nav-offset: calc(var(--view-header-height) + var(--safe-area-inset-top)); + transform: translateY(calc(var(--hidden-nav-offset) * -1)); + opacity: 0; +} +.is-phone.is-hidden-nav .view-header:after { + content: ''; + top: 0; + position: absolute; + height: calc(var(--hidden-nav-offset) + var(--view-header-height)); + width: 100%; +} +.is-phone .view-header { + position: fixed; + width: 100%; + left: 0; + right: 0; + margin: var(--safe-area-inset-top) auto 0; + transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out; + transform: 0.3s ease-in-out, opacity 0.3s ease-in-out; +} +.is-phone .view-header .view-header-left .view-action { + margin: 0; + padding: 0; + z-index: 1; +} +.is-phone .view-header .view-actions { + border-radius: var(--view-header-height); + height: var(--view-header-height); + margin: 0; + padding: 0; + flex-grow: 0; + z-index: 1; + margin-left: auto; +} +.is-phone .view-header .view-action { + height: var(--view-header-height); + width: var(--view-header-height); + border-radius: 50%; +} +.is-phone.show-inline-title .workspace-leaf-content[data-type="markdown"] .view-header-title-container { + display: none; +} +.is-phone .view-header { + gap: var(--size-4-5); +} +.is-phone .view-header-title-parent:not(:empty) { + display: none; +} .is-phone .view-header-title { display: block; text-overflow: ellipsis; - opacity: 0.7; + color: var(--text-normal); + font-size: var(--font-ui-medium); + font-weight: var(--font-semibold); } -.is-phone .view-header-title-parent:focus-within, .is-phone .view-header-title:focus-within { text-overflow: unset; opacity: 1; } +body.is-screenshotting .view-header { + visibility: hidden; +} .is-mobile .hotkey-list-container .setting-item { flex-direction: column; align-items: stretch; @@ -13475,93 +18254,98 @@ body.is-phone .suggestion-bg { .is-mobile .hotkey-list-container .setting-hotkey { align-self: flex-start; } +.is-mobile .form-field { + width: 100%; + margin: 1em 0; +} +.is-mobile .form-field label { + font-weight: var(--font-bold); +} +.is-mobile .form-field input { + width: 100%; +} +.is-mobile .modal.mod-settings .vertical-tab-content { + background-color: var(--settings-background); +} +.is-mobile .setting-item-name { + font-weight: var(--font-medium); +} .is-tablet .horizontal-tab-nav-item, .is-tablet .vertical-tab-nav-item { padding: var(--size-4-2) var(--size-4-3); + border-radius: var(--touch-radius-m); } .is-tablet .modal.mod-settings .vertical-tab-header { max-width: none; } -.is-tablet.theme-dark .community-item, .is-tablet.theme-dark .vertical-tab-content { - background-color: var(--background-secondary); -} -.is-phone.theme-dark .modal.mod-settings { - background-color: var(--background-primary); -} -.is-phone.theme-dark .modal.mod-settings .vertical-tab-header { - background-color: var(--background-primary); -} -.is-phone.theme-dark .modal.mod-settings .vertical-tab-nav-item { - background-color: var(--background-secondary); -} -.is-phone.theme-dark .modal.mod-settings .vertical-tab-header-title { - background-color: var(--background-primary); -} -.is-phone .setting-item-heading { - margin-top: 1.5em; + background-color: var(--modal-background); } -.is-phone .vertical-tab-header-group { - margin: 0 auto; - width: calc(100% - var(--size-4-8)); +.is-phone .extra-setting-button.mod-hotkeys { + display: none; } .is-phone .vertical-tab-header-group-title { - padding-bottom: 1em; -} -.is-phone .vertical-tab-header-group-title, -.is-phone .setting-item-heading .setting-item-name { - color: var(--text-normal); - font-weight: var(--font-bold); - font-size: var(--font-ui-large); + padding: var(--size-4-2) 0 var(--size-4-2); + padding-inline-start: var(--size-4-4); + margin-bottom: var(--size-4-2); } -.is-phone .setting-item { - padding: 1em 0; - border-width: var(--border-width) 0 0 0; - gap: var(--size-4-1); +.is-phone .modal .vertical-tab-header-group-title { + color: var(--setting-group-heading-color); + font-size: var(--setting-group-heading-size); + font-weight: var(--setting-group-heading-weight); } -.is-phone .setting-item-name { - font-weight: var(--font-medium); +.is-phone .modal .setting-item { + gap: var(--size-4-4); } -.is-phone .setting-item-info { +.is-phone .modal .setting-item-info { min-width: 0; } -.is-phone .setting-item:not(.mod-toggle):not(.setting-item-heading) { +.is-phone .modal .setting-item:not(.mod-toggle):not(.setting-item-heading) { flex-direction: column; align-items: flex-start; } -.is-phone .setting-item:not(.mod-toggle):not(.setting-item-heading) .setting-item-control { - margin-top: 12px; +.is-phone .modal .setting-item:not(.mod-toggle):not(.setting-item-heading) .setting-item-control { width: 100%; } -.is-phone .setting-icon { - margin-right: 10px; +.is-phone .modal .setting-icon { display: inline-flex; vertical-align: middle; + margin-inline-end: 8px; } -.is-phone .setting-item-control select, -.is-phone .setting-item-control input, -.is-phone .setting-item-control button { +.is-phone .modal .setting-item-control select, +.is-phone .modal .setting-item-control input, +.is-phone .modal .setting-item-control button:not(.clickable-icon) { width: 100%; margin: 0; } -.is-phone .setting-item-control button { +.is-phone .modal .setting-item-control button { padding: 10px; } -.is-phone .setting-item-control select { +.is-phone .modal .setting-item-control select { max-width: 100%; } -.is-phone .modal.mod-settings { - background-color: var(--background-secondary); -} -.is-phone .modal.mod-settings .modal-title { - border-bottom: var(--border-width) solid var(--background-modifier-border); +.is-phone .search-input-container.mod-raised { + --background-modifier-form-field: transparent; + border-radius: var(--touch-radius-m); + padding-bottom: 0; } .is-phone .modal.mod-settings .vertical-tabs-container { display: block; overflow-y: auto; } +.is-phone .modal.mod-settings .vertical-tab-header-group { + padding-right: max(var(--size-4-4), var(--safe-area-inset-right)); + padding-left: max(var(--size-4-4), var(--safe-area-inset-left)); +} +.is-phone .modal.mod-settings .vertical-tab-header-group-items { + --icon-size: var(--icon-m); + --icon-stroke: var(--icon-m-stroke-width); + background-color: var(--setting-items-background); + border-radius: var(--setting-items-radius); + -electron-corner-smoothing: var(--corner-smoothing); + overflow: hidden; +} .is-phone .modal.mod-settings .vertical-tab-header { - background-color: var(--background-secondary); border-right: none; flex-grow: 1; height: 100%; @@ -13570,110 +18354,138 @@ body.is-phone .suggestion-bg { width: 100%; } .is-phone .modal.mod-settings .vertical-tab-content { - background-color: var(--background-primary); - padding: var(--size-4-5) max(var(--size-4-5), var(--safe-area-inset-right)) 100px max(var(--size-4-5), var(--safe-area-inset-left)); + will-change: transform; + padding-right: max(var(--size-4-4), var(--safe-area-inset-right)); + padding-left: max(var(--size-4-4), var(--safe-area-inset-left)); + padding-bottom: max(100px, var(--safe-area-inset-bottom)); } -.is-phone .modal.mod-settings .vertical-tab-header-group-items { - border-radius: var(--radius-m); - overflow: hidden; +.is-phone .modal.mod-settings .vertical-tab-content .vertical-tab-content-inner { + border-radius: var(--setting-items-radius); + background-color: var(--setting-items-background); + padding-left: var(--size-4-4); + padding-right: var(--size-4-4); } -.is-phone .modal.mod-settings .vertical-tab-nav-item { +.is-phone .modal.mod-settings .vertical-tab-header > .vertical-tab-header-group:last-child { + padding-bottom: 100px; +} +.is-phone .modal.mod-settings .vertical-tab-nav-item-icon { + color: var(--text-normal); + margin-inline-end: var(--size-4-3); +} +.is-phone .modal.mod-settings .vertical-tab-nav-item-chevron, +.is-phone .modal.mod-settings .vertical-tab-nav-item-title { + align-self: stretch; display: flex; align-items: center; - height: 44px; - background-color: var(--background-primary); - padding: 0 var(--size-4-2) 0 var(--size-4-3); - margin: 0; - border-radius: 0; border-bottom: var(--border-width) solid var(--background-modifier-border); - transition: background-color 200ms ease-in-out, color 200ms ease-in-out; } -.is-phone .modal.mod-settings .vertical-tab-nav-item.is-active { - background-color: var(--interactive-accent); +.is-phone .modal.mod-settings .vertical-tab-nav-item { + display: flex; + align-items: center; + height: var(--touch-size-l); + padding: 0 var(--size-4-5); + border-radius: 0; + position: relative; + transition: background-color 0.15s ease-in-out, color 0.15s ease-in-out; } -.is-phone .modal.mod-settings .vertical-tab-nav-item:last-child { +.is-phone .modal.mod-settings .vertical-tab-nav-item:last-child .vertical-tab-nav-item-chevron, +.is-phone .modal.mod-settings .vertical-tab-nav-item:last-child .vertical-tab-nav-item-title { border-bottom: none; } .is-phone .modal.mod-settings .vertical-tab-nav-item-chevron { display: flex; - margin-left: auto; + margin-inline-start: auto; color: var(--text-faint); + --icon-stroke: 2.25px; } .is-phone .vertical-tab-header-title { font-weight: var(--font-semibold); } -.is-phone .installed-plugins-container .setting-item { +.is-phone .modal .community-plugins-disclaimer .setting-items .setting-item { + flex-direction: row; +} +.is-phone .installed-plugins-container { + border: none; + padding: 0; +} +.is-phone .installed-plugins-container .setting-item:not(.setting-item-heading) { flex-direction: column; align-items: stretch; gap: var(--size-4-3); } -.is-phone .installed-plugins-container .setting-item > *:first-child { - margin-right: 0; +.is-phone .installed-plugins-container .setting-item:not(.setting-item-heading) > *:first-child { + margin-inline-end: 0; } -.is-phone .installed-plugins-container .setting-item .setting-item-description div:first-child:after { +.is-phone .installed-plugins-container .setting-item:not(.setting-item-heading) .setting-item-description div:first-child:after { content: ' • '; } -.is-phone .installed-plugins-container .setting-item .setting-item-description div:first-child, -.is-phone .installed-plugins-container .setting-item .setting-item-description div:nth-child(2) { +.is-phone .installed-plugins-container .setting-item:not(.setting-item-heading) .setting-item-description div:first-child, +.is-phone .installed-plugins-container .setting-item:not(.setting-item-heading) .setting-item-description div:nth-child(2) { display: inline; } -.is-phone .installed-plugins-container .setting-item .setting-item-control { +.is-phone .installed-plugins-container .setting-item:not(.setting-item-heading) .setting-item-control { flex-wrap: wrap; } -.is-phone .installed-plugins-container .setting-item .checkbox-container { - margin-left: auto; +.is-phone .installed-plugins-container .setting-item:not(.setting-item-heading) .checkbox-container { + margin-inline-start: auto; } -.is-phone .community-modal { - width: 100%; - margin-bottom: 10px; +.is-mobile .mod-community-modal { + --modal-background: var(--settings-background); } -.is-phone .modal.mod-community-theme { - min-height: unset; +.is-mobile .community-item { + border-width: 0; + border-radius: var(--touch-radius-xxs); + padding: var(--size-4-4); + background-color: var(--setting-items-background); + -electron-corner-smoothing: var(--corner-smoothing); +} +.is-mobile .community-item.tappable:hover { + background-color: var(--background-modifier-hover); +} +.is-mobile .community-modal-meta, +.is-mobile .community-modal-readme { + padding: var(--size-4-5); + border-radius: var(--touch-radius-xs); + background-color: var(--setting-items-background); + -electron-corner-smoothing: var(--corner-smoothing); +} +.is-mobile .community-modal-button-container { + width: 100%; } .is-phone .community-modal-sidebar { background-color: var(--background-primary); } .is-phone .community-modal-controls { + padding-top: var(--size-2-1); background-color: transparent; } .is-phone .community-modal-controls .setting-item { flex: 0 0 auto; padding: 0.25em 0; } -.is-phone .community-modal-controls .setting-item-control { - flex-direction: column; - align-items: flex-end; -} .is-phone .community-modal-controls .search-input-container { width: 100%; } .is-phone .community-modal-search-results { - gap: 0; - padding: 0; -} -.is-phone .community-modal-info { + gap: var(--size-4-2); padding: var(--size-4-4); } -.is-phone .community-item { - border-width: 0 0 var(--border-width) 0; - border-radius: 0; - padding: var(--size-4-4); +.is-phone .community-modal-info { + padding: var(--size-4-2) var(--size-4-4) var(--size-4-4); } .is-phone .community-item-info { - padding: 20px; + padding: var(--size-4-5); } .is-phone .community-modal-details { - background-color: var(--background-primary); + padding: var(--size-4-4); border: none; -} -.is-phone .community-modal-readme { - padding: 20px 0; -} -.is-phone .community-modal-controls { - padding: 0 var(--size-4-4); + background-color: var(--modal-background); } .is-phone .community-modal-search-summary { - padding: var(--size-4-1) var(--size-4-1) var(--size-4-4); + padding: var(--size-4-1) var(--size-4-4) var(--size-4-4); +} +.is-phone .mod-community-modal { + box-shadow: var(--shadow-l); } .is-phone .mod-community-theme .community-item { display: grid; @@ -13712,9 +18524,14 @@ body.is-phone .suggestion-bg { position: static; grid-row: 4; } +.is-phone .mod-community-plugin .community-item .community-item-updated { + grid-column: 1 / 2; + color: var(--text-faint); + display: none; +} .is-phone .mod-community-plugin .community-item .community-item-downloads { grid-column: 2 / 2; - text-align: right; + text-align: end; color: var(--text-faint); } .is-phone .mod-community-plugin .community-item .community-item-desc { @@ -13727,7 +18544,7 @@ body.is-phone .suggestion-bg { font-size: var(--font-ui-medium); display: flex; align-items: center; - margin: 8px 0; + padding: var(--size-4-1) 0; gap: var(--size-4-1); transition: transform 1000ms ease-in-out; color: var(--text-muted); @@ -13775,50 +18592,81 @@ body.is-phone .suggestion-bg { display: flex; overflow: hidden; font-size: var(--font-ui-small); - min-width: var(--mobile-sidebar-width); + min-width: var(--mobile-sidebar-min-width); max-width: var(--mobile-sidebar-max-width); - width: 85vw; + width: var(--mobile-sidebar-width); z-index: var(--layer-popover); margin: 0; - border-radius: 0; - padding-top: var(--safe-area-inset-top); - background-color: var(--background-primary); + border-radius: var(--mobile-sidebar-radius); + background-color: var(--mobile-sidebar-background); + contain: layout style paint; } .workspace-drawer .nav-folder.mod-root > .nav-folder-title { display: none; } .workspace-drawer .nav-header { - margin-top: auto; - padding-bottom: max(var(--size-4-2), var(--safe-area-inset-bottom)); - order: 10; + padding: var(--size-4-1) var(--size-4-4) 0; } -.workspace-drawer .nav-header ~ .search-input-container { - width: calc(100% - var(--size-4-9)); +.workspace-drawer .nav-header .search-input-container { + margin-top: 48px; } .workspace-drawer .workspace-leaf { background-color: transparent; } -.theme-dark .workspace-drawer { - background-color: var(--background-secondary); +.workspace-drawer .workspace-leaf-content:after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + right: 0; + margin: 0 auto; + width: calc(100% - var(--size-4-6)); + height: 24px; + background: linear-gradient(to top, var(--mobile-sidebar-background), transparent); + pointer-events: none; + opacity: 0.5; +} +.workspace-drawer .search-input-container { + --background-modifier-form-field: transparent; + --background-modifier-form-field-hover: transparent; + --input-radius: 0; + --input-border-width-focus: 0; + margin: var(--size-4-1) var(--size-4-1) 0; +} +.workspace-drawer .search-input-container input { + border-width: 0 0 var(--border-width) 0; +} +.is-tablet .workspace-drawer { + margin: var(--size-4-8) var(--size-4-4) 0; + height: calc(100vh - var(--size-4-12)); +} +.is-tablet .workspace-drawer .workspace-leaf-content .nav-header ~ div:last-child { + padding-top: 56px; } .workspace-drawer.is-pinned { height: 100%; position: relative; max-width: var(--mobile-sidebar-width); + padding-bottom: 0; + width: var(--mobile-sidebar-width-pinned); z-index: var(--layer-cover); - border-radius: 0; margin: 0; box-shadow: none; } .workspace-drawer.mod-left { left: 0; padding-left: var(--safe-area-inset-left); - border-top-right-radius: var(--radius-xl); - border-bottom-right-radius: var(--radius-xl); + border-top-right-radius: var(--mobile-sidebar-radius); + border-bottom-right-radius: var(--mobile-sidebar-radius); } .workspace-drawer.mod-left.is-pinned { + --mobile-sidebar-radius: 0; border-right: var(--divider-width) solid var(--divider-color); - border-radius: 0; +} +.workspace-drawer.mod-left.is-pinned .workspace-drawer-header-info div { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; } body.is-tablet .workspace-drawer.mod-left .workspace-drawer-inner { padding-left: var(--ribbon-width); @@ -13826,32 +18674,59 @@ body.is-tablet .workspace-drawer.mod-left .workspace-drawer-inner { .workspace-drawer.mod-right { right: 0; padding-right: var(--safe-area-inset-right); - border-top-left-radius: var(--radius-xl); - border-bottom-left-radius: var(--radius-xl); + border-top-left-radius: var(--mobile-sidebar-radius); + border-bottom-left-radius: var(--mobile-sidebar-radius); +} +.workspace-drawer.mod-right .workspace-drawer-header-name-text { + font-size: var(--font-ui-small); } .workspace-drawer.mod-right.is-pinned { + --mobile-sidebar-radius: 0; border-left: var(--divider-width) solid var(--divider-color); - border-radius: 0; +} +.workspace-drawer.mod-right.is-pinned .workspace-drawer-header-name-text { + display: none; } .workspace-drawer.is-collapsed { overflow: hidden; } .workspace-drawer .nav-buttons-container { - padding-left: var(--size-4-3); - padding-right: var(--size-4-3); + position: absolute; + top: 0; + left: 0; + right: 0; + z-index: 1; + gap: var(--size-4-2); + padding: var(--size-4-3) var(--size-2-1) 0; --icon-size: var(--icon-l); --icon-stroke: var(--icon-l-stroke-width); - --icon-color: var(--interactive-accent); - --icon-color-hover: var(--interactive-accent); - --icon-color-active: var(--interactive-accent); - --icon-color-focus: var(--interactive-accent-hover); + --icon-color: var(--text-muted); + --icon-color-hover: var(--text-muted); + --icon-color-active: var(--text-normal); + --icon-color-focus: var(--text-muted); + --icon-opacity-hover: 1; } .workspace-drawer .nav-buttons-container .nav-action-button { - flex-grow: 1; + background-color: var(--interactive-normal); + padding: var(--size-4-2); + height: var(--touch-size-m); + width: var(--touch-size-m); + z-index: 1; +} +.workspace-drawer .nav-buttons-container:after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + right: 0; + margin: 0 auto; + width: calc(100% - var(--size-4-6)); + height: 96px; + background: linear-gradient(to bottom, var(--mobile-sidebar-background), transparent); + pointer-events: none; } .workspace-drawer .workspace-drawer-actions, .workspace-drawer .nav-buttons-container { - overflow: auto; flex-wrap: nowrap; } .workspace-drawer .workspace-drawer-actions::-webkit-scrollbar, @@ -13868,12 +18743,11 @@ body.is-tablet .workspace-drawer.mod-left .workspace-drawer-inner { overflow: hidden; display: flex; flex-direction: column; - background-color: var(--background-primary); + background-color: var(--mobile-sidebar-background); + padding-top: var(--safe-area-inset-top); position: relative; transition: width ease-out 150ms; -} -.theme-dark .workspace-drawer-inner { - background-color: var(--background-secondary); + contain: layout style paint; } .workspace-drawer.is-collapsed .workspace-drawer-inner { padding: 0; @@ -13890,6 +18764,7 @@ body.is-tablet .workspace-drawer.mod-left .workspace-drawer-inner { left: 0; opacity: 1; transition: opacity ease-out 150ms; + contain: layout paint; } .workspace-drawer.is-collapsed .workspace-drawer-backdrop { display: none; @@ -13902,7 +18777,8 @@ body.is-tablet .workspace-drawer.mod-left .workspace-drawer-inner { height: 100%; overflow: auto; width: var(--ribbon-width); - padding: var(--size-4-1) 0 var(--safe-area-inset-bottom); + padding: var(--safe-area-inset-top) 0 var(--safe-area-inset-bottom); + border-inline-end: var(--border-width) solid var(--background-modifier-border); } .workspace-drawer-ribbon::-webkit-scrollbar, .workspace-drawer-ribbon::-webkit-scrollbar-thumb { @@ -13920,18 +18796,21 @@ body.is-tablet .workspace-drawer.mod-left .workspace-drawer-inner { padding: var(--size-4-2); } .workspace-drawer-header { - padding: var(--size-4-2) var(--size-4-5) 0 var(--size-4-5); + align-items: center; display: flex; - align-items: flex-start; -} -.workspace-drawer.is-pinned .workspace-drawer-header { - padding-top: 0; + order: var(--vault-profile-order); + padding-bottom: calc(max(var(--safe-area-inset-bottom), var(--size-4-4)) - var(--keyboard-height)); + padding-inline-end: var(--size-4-4); + padding-inline-start: var(--size-4-8); + padding-top: var(--size-4-3); + gap: var(--size-4-2); } .workspace-drawer-header-left { display: flex; flex-direction: column; flex: 1 1 auto; overflow: hidden; + position: relative; } .workspace-drawer-header-name { display: flex; @@ -13939,17 +18818,20 @@ body.is-tablet .workspace-drawer.mod-left .workspace-drawer-inner { .workspace-drawer-header-switcher { display: flex; flex: 0 1 auto; - position: relative; + overflow: hidden; } .workspace-drawer-header-switcher select { opacity: 0; position: absolute; + padding: 0; + width: 100%; } .workspace-drawer-header-name-text { text-overflow: ellipsis; overflow: hidden; font-size: var(--font-ui-large); font-weight: var(--font-semibold); + color: var(--text-normal); } .workspace-drawer-header-name-chevron { --icon-size: var(--icon-m); @@ -13957,25 +18839,27 @@ body.is-tablet .workspace-drawer.mod-left .workspace-drawer-inner { color: var(--text-faint); display: flex; align-items: center; - margin-left: var(--size-2-1); + margin-inline-start: var(--size-2-1); } .workspace-drawer-header-name-action-icon { color: var(--text-muted); - margin-left: var(--size-4-2); + margin-inline-start: var(--size-4-2); display: flex; align-items: center; } .workspace-drawer-header-info { color: var(--text-muted); - margin: var(--size-4-1) 0 var(--size-4-4) 0; - font-size: var(--font-ui-small); + margin: var(--size-4-1) 0 0 0; + font-size: var(--font-ui-smaller); } .workspace-drawer-header-icon { --icon-size: var(--icon-l); --icon-stroke: var(--icon-l-stroke-width); + width: var(--touch-size-m); + height: var(--touch-size-m); padding-top: var(--size-2-2); - color: var(--interactive-accent); - margin-left: var(--size-4-3); + color: var(--text-normal); + flex-shrink: 0; } .workspace-drawer-actions { margin: var(--size-4-4) 0 var(--size-4-3) 0; @@ -14002,50 +18886,214 @@ body.is-tablet .workspace-drawer.mod-left .workspace-drawer-inner { .workspace-drawer-separator { margin: 0 0 12px 0; } -.workspace-drawer-tab-option-item { +.workspace-drawer-tab-options { + --no-tooltip: true; + --icon-color: var(--text-muted); display: flex; + position: relative; + flex-direction: column; + margin: 0 var(--size-4-3); + color: var(--text-muted); +} +.workspace-drawer-tab-options .workspace-tab-header { + user-select: none; + padding: 0; +} +.workspace-drawer-tab-options .workspace-tab-header .workspace-tab-header-inner-close-button { + display: none; +} +.workspace-drawer-tab-options .workspace-tab-header::before, +.workspace-drawer-tab-options .workspace-tab-header::after { + display: none; +} +.workspace-drawer-tab-options .workspace-tab-header.is-swiping .workspace-tab-header-inner, +.workspace-drawer-tab-options .workspace-tab-header.mobile-tap .workspace-tab-header-inner { + --icon-color: var(--text-normal); + background-color: var(--nav-item-background-hover); + color: var(--text-normal); +} +.workspace-drawer-tab-options .workspace-tab-header.is-active { + --icon-color: var(--text-normal); + color: var(--text-normal); +} +.workspace-drawer-tab-options .workspace-tab-header-inner { + font-weight: var(--font-semibold); align-items: center; - margin: var(--size-4-5); + flex-shrink: 0; gap: var(--size-4-2); + padding: var(--size-4-2) var(--size-4-3); + border-radius: var(--touch-radius-xs); } -.workspace-drawer-active-tab-icon, -.workspace-drawer-tab-option-item-icon { +.workspace-drawer-tab-options .workspace-tab-header-inner-icon { --icon-size: var(--icon-l); --icon-stroke: var(--icon-l-stroke-width); - color: var(--text-normal); display: flex; } -.workspace-drawer-active-tab-icon:last-child { - color: var(--interactive-accent); - order: 2; -} -.workspace-drawer-active-tab-back-icon { - --icon-size: var(--icon-l); - --icon-stroke: var(--icon-l-stroke-width); +.workspace-drawer-tab-options .workspace-tab-header-inner-chevron { + color: var(--text-faint); + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); display: flex; - color: var(--interactive-accent); - order: 1; - margin-right: var(--size-4-1); + align-items: center; } -.workspace-drawer-tab-option-item-title, -.workspace-drawer-active-tab-title { - color: var(--text-normal); - font-weight: var(--font-medium); +.workspace-drawer-tab-options .workspace-tab-header-inner-title { font-size: var(--font-ui-medium); - flex: 1 0 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; + flex-grow: 1; +} +.workspace-drawer-tab-options.is-collapsed .workspace-drawer-tab-select { + --icon-color: var(--text-normal); + color: var(--text-normal); +} +.workspace-drawer-tab-options:not(.has-swipe) .workspace-tab-header.is-active .workspace-tab-header-inner { + background-color: var(--nav-item-background-hover); +} +.workspace-drawer-tab-options:not(.has-swipe) .workspace-tab-header.is-active .workspace-tab-header-inner.has-active-menu { + background-color: var(--nav-item-background-selected); +} +.workspace-drawer-tab-options:not(.has-swipe) .workspace-tab-header.has-active-menu .workspace-tab-header-inner { + background-color: var(--nav-item-background-selected); +} +.workspace-drawer-tab-options-list { + position: absolute; + top: 0; + inset-inline-start: 0; + width: 100%; + display: flex; + flex-direction: column; + padding: var(--size-4-2); + padding-top: var(--touch-size-l); + overflow-y: auto; + max-height: 400px; + opacity: 1; + z-index: 1; + border-radius: var(--touch-radius-xs); + scrollbar-gutter: stable; + background-color: var(--interactive-normal); + transition: max-height 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.1), opacity 0.15s ease; +} +.is-phone .workspace-drawer-tab-options-list { + box-shadow: 0 -12px 12px 0 var(--mobile-sidebar-background); +} +.workspace-drawer-tab-options-list .workspace-drawer-tab-select { + pointer-events: none; + order: 0; +} +.workspace-drawer-tab-options-list .workspace-drawer-tab-select .workspace-tab-header-inner { + padding: var(--size-4-1) var(--size-4-3) var(--size-4-3); +} +.workspace-drawer-tab-options.is-collapsed .workspace-drawer-tab-options-list { + transition: max-height 0.1s cubic-bezier(0.175, 0.885, 0.32, 1.1), opacity 0.15s ease; + pointer-events: none; + opacity: 0; + max-height: 0; +} +.workspace-drawer-tab-options:not(.is-collapsed) .workspace-drawer-tab-options-list .workspace-tab-header { + animation: slideIn 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) backwards; +} +.workspace-drawer-tab-options:not(.is-collapsed) .workspace-drawer-tab-options-list .workspace-tab-header:nth-child(1) { + animation-delay: 0s; +} +.workspace-drawer-tab-options:not(.is-collapsed) .workspace-drawer-tab-options-list .workspace-tab-header:nth-child(2) { + animation-delay: 0.01s; +} +.workspace-drawer-tab-options:not(.is-collapsed) .workspace-drawer-tab-options-list .workspace-tab-header:nth-child(3) { + animation-delay: 0.02s; +} +.workspace-drawer-tab-options:not(.is-collapsed) .workspace-drawer-tab-options-list .workspace-tab-header:nth-child(4) { + animation-delay: 0.03s; +} +.workspace-drawer-tab-options:not(.is-collapsed) .workspace-drawer-tab-options-list .workspace-tab-header:nth-child(5) { + animation-delay: 0.04s; +} +.workspace-drawer-tab-options:not(.is-collapsed) .workspace-drawer-tab-options-list .workspace-tab-header:nth-child(6) { + animation-delay: 0.05s; +} +.workspace-drawer-tab-options:not(.is-collapsed) .workspace-drawer-tab-options-list .workspace-tab-header:nth-child(7) { + animation-delay: 0.06s; +} +.workspace-drawer-tab-options:not(.is-collapsed) .workspace-drawer-tab-options-list .workspace-tab-header:nth-child(8) { + animation-delay: 0.07s; +} +.workspace-drawer-tab-options:not(.is-collapsed) .workspace-drawer-tab-options-list .workspace-tab-header:nth-child(9) { + animation-delay: 0.08s; +} +.workspace-drawer-tab-options:not(.is-collapsed) .workspace-drawer-tab-options-list .workspace-tab-header:nth-child(10) { + animation-delay: 0.09s; +} +.workspace-drawer-tab-options:not(.is-collapsed) .workspace-drawer-tab-options-list .workspace-drawer-tab-select { + animation: none; +} +.is-phone .workspace-drawer-tab-options { + order: 2; +} +.is-phone .workspace-drawer-tab-select { + order: 2; +} +.is-phone .workspace-drawer-tab-options-list .workspace-drawer-tab-select { + order: 2; +} +.is-phone .workspace-drawer-tab-options-list { + padding-top: var(--size-4-2); + padding-bottom: var(--touch-size-l); + bottom: 0; + top: unset; +} +.is-phone .nav-buttons-container { + padding: 0 var(--size-2-1) var(--size-4-3); + bottom: 0; + top: unset; +} +.is-phone .nav-buttons-container:after { + background: linear-gradient(to top, var(--mobile-sidebar-background), transparent); +} +.is-phone .nav-header .search-input-container { + margin-top: 0; +} +.is-phone .nav-header ~ div:last-child { + padding-bottom: 96px; + padding-top: 0; +} +@keyframes slideIn { + 0% { + opacity: 0; + transform: translateY(-8px) scale(0.97); + transform-origin: bottom; + } + 70% { + opacity: 1; + transform: scaleY(1.02); + transform-origin: bottom; + } + 100% { + opacity: 1; + transform: scaleY(1); + transform-origin: bottom; + } +} +.workspace-drawer-tab-select { + touch-action: none; + z-index: var(--layer-cover); + height: var(--touch-size-l); + color: var(--text-faint); + --icon-color: var(--text-faint); +} +.workspace-drawer-tab-select .workspace-tab-header-inner { + background-color: var(--interactive-normal); + border-radius: var(--touch-radius-xs); + padding: var(--size-4-3) var(--size-4-5); } -.workspace-drawer-active-tab-header { +.workspace-drawer-tab-select .workspace-tab-header-inner .workspace-drawer-active-tab-chevron { + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); + color: var(--text-faint); + margin-inline-start: auto; display: flex; align-items: center; - padding: var(--size-4-3) var(--size-4-5) var(--size-4-4); - margin: 0; - gap: var(--size-4-2); } .workspace-drawer-tab-container { - overflow: hidden; position: relative; flex: 1 0 0; } @@ -14060,38 +19108,18 @@ body.is-tablet .workspace-drawer.mod-left .workspace-drawer-inner { display: none; } .workspace-drawer-active-tab-container { + background-color: var(--mobile-sidebar-background); display: flex; flex-direction: column; } -.theme-dark .workspace-drawer-active-tab-container.is-fullscreen { - background-color: var(--background-secondary); -} .workspace-drawer-active-tab-container .workspace-drawer-active-tab-content .nav-files-container { padding-top: var(--size-4-3); } -.workspace-drawer-active-tab-container.is-fullscreen { - position: fixed; - width: 100%; - top: 0; - left: 0; - background-color: var(--background-primary); - margin: 0 env(safe-area-inset-right, 20px) 0 env(safe-area-inset-left, 20px); - padding: env(safe-area-inset-top, 20px) 0 0; -} -.workspace-drawer-active-tab-container.is-fullscreen .workspace-drawer-active-tab-back-icon { - display: none; -} -.workspace-drawer-active-tab-container.is-fullscreen .workspace-leaf { - width: 100%; -} -.workspace-drawer-active-tab-container.is-fullscreen .workspace-drawer-active-tab-header { - margin: 0 env(safe-area-inset-right, 20px) 0 env(safe-area-inset-left, 20px); - padding: var(--size-4-4) var(--size-4-6); -} .workspace-drawer-active-tab-content { flex: 1 0 0; overflow: auto; display: flex; + padding: 0; } .workspace-drawer-active-tab-content > * { flex: 1 0 0; @@ -14121,43 +19149,215 @@ body.is-tablet .workspace-drawer.mod-left .workspace-drawer-inner { .is-phone .mod-root .workspace-tabs:not(.mod-visible) { display: none; } -.is-tablet .workspace-drawer .workspace-drawer-header-icon.mod-settings { +.is-mobile .workspace > .mod-root { + background-color: var(--system-status-background); + padding-top: var(--safe-area-inset-top); + padding-left: var(--safe-area-inset-left); +} +.is-mobile .workspace-split.mod-left-split, +.is-mobile .workspace-split.mod-right-split { display: none; } +.is-mobile .tree-item .tree-item-self { + padding-inline-end: var(--size-4-2); +} +.is-mobile input[type='text'] { + width: 100%; +} +.is-mobile .markdown-rendered pre:not(:hover) > button.copy-code-button { + display: block; +} +.is-mobile .markdown-rendered button.copy-code-button { + width: auto; +} +.is-mobile .cm-scroller { + scroll-padding-bottom: var(--autoscroll-padding); +} +.is-mobile .empty-state-action-list { + margin-top: 40px; +} +.is-mobile .empty-state-action { + background-color: var(--background-primary-alt); + margin: 12px 0; + padding: 6px 30px; + border-radius: var(--button-radius); + text-align: center; +} +.is-mobile .markdown-rendered .heading-collapse-indicator { + margin-inline-start: -20px; +} +.is-mobile .search-result-file-match-replace-button { + display: block; + position: relative; + padding: 6px 10px; + inset-inline-end: 0; + margin-top: var(--size-4-3); + background-color: var(--settings-home-background); +} +.is-phone .workspace > .mod-root { + padding-top: 0; +} +.is-phone .mod-root .workspace-leaf-content[data-type="markdown"] { + --view-top-spacing: 0; +} +.is-phone .mod-root .workspace-leaf-content .view-content { + margin-top: var(--view-top-spacing); +} +.is-phone .mod-root .workspace-leaf-content .view-content .markdown-reading-view > .markdown-preview-view, +.is-phone .mod-root .workspace-leaf-content .view-content .markdown-source-view > .cm-editor > .cm-scroller { + padding-top: var(--view-top-spacing-markdown); +} body.is-tablet .sidebar-toggle-button { - padding-left: var(--size-4-2); - --icon-color: var(--interactive-accent); - --icon-color-hover: var(--interactive-accent); - --icon-color-active: var(--interactive-accent-hover); - --icon-color-focus: var(--interactive-accent-hover); + --icon-color: var(--text-normal); + --icon-color-hover: var(--text-normal); + --icon-color-active: var(--text-normal); + --icon-color-focus: var(--text-normal); --icon-size: var(--icon-l); --icon-stroke: var(--icon-l-stroke-width); } +body.is-tablet .sidebar-toggle-button.mod-left { + padding-left: var(--size-4-2); +} +.mobile-image-viewer { + position: absolute; + height: 100%; + width: 100%; + top: 0; + left: 0; + background-color: var(--background-modifier-cover); + display: flex; + justify-content: center; + overflow: hidden; + z-index: var(--layer-modal); +} +.mobile-image-viewer img { + align-self: center; + max-height: 100%; + max-width: 100%; +} +.is-mobile .metadata-content { + transform: translateX(-12px); + width: calc(100% + var(--size-4-6)); + background-color: var(--background-primary-alt); + border-radius: var(--touch-radius-xxs); + padding: var(--size-4-2) var(--size-4-3); + -electron-corner-smoothing: var(--corner-smoothing); +} +.is-mobile.mod-rtl .metadata-content { + transform: translateX(12px); +} +.is-mobile.theme-light .menu { + --interactive-normal: var(--background-primary); +} .is-mobile .menu { + --background-modifier-form-field: var(--interactive-normal); + --dropdown-background: var(--interactive-normal); + --input-height: 40px; border: none; max-width: 100%; + background-color: color-mix(in srgb, var(--menu-background) var(--blur-translucency-m), transparent); +} +.is-mobile .menu-scroll { + overflow-y: auto; + padding: var(--menu-padding); +} +.is-mobile .menu-item { + font-size: var(--font-ui-medium); +} +.is-phone { + --menu-padding: var(--size-4-2) var(--size-4-4) var(--safe-area-inset-bottom); +} +.is-phone .menu-grabber { + transition: width 0.15s var(--anim-motion-swing), background-color 0.3s var(--anim-motion-swing); + height: var(--size-4-1); + background: var(--text-faint); + display: flex; + width: 15%; + border-radius: var(--radius-xl); + margin: var(--size-4-2) auto var(--size-4-1); + position: relative; +} +.is-phone.hide-cursor .menu-grabber { + background: var(--text-muted); + width: 14%; } .is-phone .menu { - background-color: var(--background-secondary); - max-height: 60vh; - width: calc(100% - var(--safe-area-inset-left) - var(--safe-area-inset-right)); min-width: unset; position: absolute; - padding-bottom: var(--safe-area-inset-bottom); - margin-left: var(--safe-area-inset-left); - margin-right: var(--safe-area-inset-right); - border-radius: var(--radius-l) var(--radius-l) 0 0; + border-radius: var(--touch-radius-s) var(--touch-radius-s) 0 0; + bottom: 0; + left: var(--safe-area-inset-left); + right: var(--safe-area-inset-right); + margin: 0 auto; + top: unset !important; +} +.is-phone .menu-scroll { + max-height: 60vh; +} +.is-phone .menu-scroll.is-scrolled { + mask-image: var(--menu-scroll-mask); +} +.is-phone .menu-scroll::-webkit-scrollbar { + display: none !important; +} +.is-phone .menu-group .menu-item.is-label + .menu-item:not(.is-label) { + border-top-left-radius: var(--touch-radius-xxs); + border-top-right-radius: var(--touch-radius-xxs); +} +.is-phone .menu-group .menu-item { + position: relative; +} +.is-phone .menu-group .menu-item:not(.is-label):after { + content: ''; + display: block; + position: absolute; bottom: 0; - left: 0; - right: 0; - margin: 0 auto; - top: unset !important; - overflow-y: auto; + left: var(--size-4-4); + width: calc(100% - var(--size-4-8)); + height: var(--menu-divider-width); + background-color: var(--menu-divider-color); +} +.is-phone .menu-group .menu-item:first-child { + border-top-left-radius: var(--touch-radius-xxs); + border-top-right-radius: var(--touch-radius-xxs); +} +.is-phone .menu-group .menu-item:last-child { + border-bottom-left-radius: var(--touch-radius-xxs); + border-bottom-right-radius: var(--touch-radius-xxs); +} +.is-phone .menu-group .menu-item:last-child:after { + display: none; } +.is-phone .menu-group .menu-item:only-child { + border-radius: var(--touch-radius-xl); +} +.is-phone .menu .suggestion-group .suggestion-item:first-child { + border-top-left-radius: var(--touch-radius-xxs); + border-top-right-radius: var(--touch-radius-xxs); +} +.is-phone .menu .suggestion-group .suggestion-item:last-child { + border-bottom-left-radius: var(--touch-radius-xxs); + border-bottom-right-radius: var(--touch-radius-xxs); +} +.is-phone .menu .suggestion-group .suggestion-item, .is-phone .menu-item { - padding: var(--size-4-3) var(--size-4-3); + transition: background-color 0.1s ease-in-out; + padding: var(--size-4-3) var(--size-4-4); height: unset; line-height: unset; + border-radius: 0; +} +.is-phone .menu .suggestion-group .suggestion-item:not(.is-label), +.is-phone .menu-item:not(.is-label) { + background-color: var(--interactive-normal); +} +.is-phone .menu .suggestion-group .suggestion-item.mobile-tap:not(.is-disabled), +.is-phone .menu-item.mobile-tap:not(.is-disabled) { + background-color: var(--interactive-hover); +} +.is-phone .menu-separator { + margin: var(--size-4-2) 0; + border: 0; } .is-phone .menu-item.is-label .menu-item-title { display: -webkit-box; @@ -14165,68 +19365,92 @@ body.is-tablet .sidebar-toggle-button { -webkit-box-orient: vertical; -webkit-line-clamp: 3; } +.is-phone .menu-item-title { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} .is-mobile .modal { border: none; } +.is-mobile .modal-close-button { + top: var(--size-4-3); + inset-inline-end: var(--size-4-4); +} .is-mobile .modal-button-container { display: flex; flex-direction: column; } -.is-mobile .community-modal { - width: 100%; - margin-bottom: 10px; -} -.is-mobile .modal.mod-community-theme { - min-height: unset; -} .is-mobile .mod-confirmation .modal-close-button { display: none; } +.is-mobile .mod-confirmation .modal-title { + max-width: 100%; +} +.is-mobile button.mod-warning { + background-color: var(--interactive-normal); + font-weight: calc(var(--font-weight) + var(--bold-modifier)); + color: var(--text-error); +} +.is-mobile .message-container { + text-align: center; + margin: 0 auto; +} +.is-phone .modal-container { + --dialog-max-height: calc(100vh - var(--safe-area-inset-top)); + --dialog-max-width: calc(100vw - var(--safe-area-inset-left) - var(--safe-area-inset-right) - var(--size-4-6)); + --dialog-width: 100vw; + --modal-width: 100vw; + --modal-radius: var(--touch-radius-xs); + --modal-max-height: calc(100vh - var(--safe-area-inset-top)); + --prompt-max-width: 100vw; +} .is-phone .modal, .is-phone .prompt { - border-radius: 0; border: none; - max-height: 100vh; - width: 100vw; - max-width: 100vw; min-width: unset; - position: absolute; - bottom: unset; - padding: 0; left: 0; right: 0; } .is-phone .modal { - --modal-top: calc(var(--safe-area-inset-top) + var(--size-4-2)); - --modal-bottom: var(--safe-area-inset-bottom); - border-radius: var(--radius-m) var(--radius-m) 0 0; padding: 0 var(--safe-area-inset-right) 0 var(--safe-area-inset-left); - top: var(--modal-top); - bottom: 0; - width: 100vw; -} -.is-phone .modal .modal-close-button { - top: var(--size-4-3); } -.is-phone .modal .modal-title { - display: block; - font-size: var(--font-ui-medium); - margin-bottom: 0; - padding-top: calc(env(safe-area-inset-top) + var(--size-4-3)); - padding-bottom: var(--size-4-4); - text-align: center; +.is-phone .modal .modal-setting-back-button { + position: absolute; + bottom: var(--size-4-1); + inset-inline-start: var(--size-4-4); + padding: var(--size-2-2); + height: var(--touch-size-m); + width: var(--touch-size-m); } -.is-phone .mod-confirmation .modal { +.is-phone .modal .modal:not(.mod-lg) { --interactive-normal: var(--background-modifier-hover); - top: auto; - height: auto; background-color: var(--background-secondary); } -.is-phone .mod-confirmation .modal .modal-title { - border-bottom: 1px solid var(--background-modifier-border); +.is-phone .modal-close-button { + z-index: var(--layer-modal); + height: var(--touch-size-m); + width: var(--touch-size-m); } -.is-phone .modal-sidebar { - background-color: var(--background-primary); +.is-phone .modal-container.mod-confirmation { + align-items: flex-end; +} +.is-phone .modal-container.mod-confirmation .modal, +.is-phone .modal.mod-lg, +.is-phone .modal.mod-sidebar-layout { + --modal-radius: var(--touch-radius-s) var(--touch-radius-s) 0 0; + --dialog-max-height: calc(100vh - var(--safe-area-inset-top)); + --dialog-max-width: 100vw; + --dialog-width: 100vw; + margin-top: auto; +} +.is-phone .modal.mod-lg, +.is-phone .modal.mod-sidebar-layout { + height: 100%; +} +.is-phone .modal.mod-lg .search-input-container, +.is-phone .modal.mod-sidebar-layout .search-input-container { + flex-grow: 1; } .is-phone .modal-content { display: flex; @@ -14234,7 +19458,7 @@ body.is-tablet .sidebar-toggle-button { flex-direction: column; margin-top: 0; overflow: auto; - padding: var(--size-4-3); + padding: var(--size-4-4); } .is-phone .modal-button-container { width: 100%; @@ -14242,37 +19466,74 @@ body.is-tablet .sidebar-toggle-button { margin-top: 0; margin-bottom: var(--safe-area-inset-bottom); } -.is-phone .modal.mod-lg { - max-height: 100%; +.is-phone .modal-button-container button.mod-cancel { + margin-top: var(--size-4-1); } -.is-phone .modal.mod-lg .modal-title { - padding-top: calc(env(safe-area-inset-top) + var(--size-4-3)); - padding-bottom: var(--size-4-3); +.is-phone .modal-header { + margin-bottom: 0; + padding: var(--size-4-6) var(--size-4-5) var(--size-4-4); + position: relative; + width: 100%; + display: flex; + align-items: flex-end; } -.is-phone .modal.mod-lg .modal-close-button, -.is-phone .modal.mod-sidebar-layout .modal-close-button { - top: calc(var(--safe-area-inset-top) + 10px); - right: var(--size-4-5); - z-index: var(--layer-modal); +.is-phone .modal-title { + display: block; + font-size: var(--font-ui-medium); + text-align: center; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + max-width: 70vw; } -.is-phone .modal.mod-sidebar-layout { - bottom: 0; +.is-phone .modal-cta-button { + color: var(--text-accent); + font-weight: var(--font-semibold); + position: absolute; + right: 0; + top: 0; + margin: var(--size-4-4); +} +.is-phone .modal-cta-button.mobile-tap { + color: var(--text-accent-hover); +} +.is-phone .modal.mod-settings.mod-sidebar-layout { + --modal-header-height: calc(var(--safe-area-inset-top) + var(--size-4-12)); + --modal-radius: 0; top: 0; - border-radius: 0; - height: 100%; max-height: 100%; - margin: 0; - padding: 0 var(--safe-area-inset-right) 0 var(--safe-area-inset-left); - width: 100vw; } -.is-phone .modal.mod-sidebar-layout .search-input-container { - flex-grow: 1; +.is-phone .modal.mod-settings.mod-sidebar-layout .modal-close-button { + top: var(--safe-area-inset-top); + inset-inline-end: var(--size-4-3); } -.is-phone .modal.mod-sidebar-layout .modal-title { - display: block; - padding-top: calc(env(safe-area-inset-top) + var(--size-4-3)); - padding-bottom: var(--size-4-3); +.is-phone .modal.mod-settings .modal-header { margin-bottom: 0; + position: absolute; + top: 0; + left: 0; + right: 0; + z-index: 1; + width: 100%; +} +.is-phone .modal.mod-settings .modal-header:after { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + height: 130%; + width: 100%; + margin: 0 auto; + content: ""; + background-color: var(--settings-background); + mask: linear-gradient(to bottom, black 20%, transparent); + inset: 0; + z-index: -2; + pointer-events: none; +} +.is-phone .modal.mod-settings .modal-content { + padding-top: calc(var(--modal-header-height) + var(--size-4-4)); } .is-phone .modal.mod-sidebar-layout .modal-content > * { width: 100%; @@ -14283,153 +19544,230 @@ body.is-tablet .sidebar-toggle-button { right: 0; padding: 0 var(--safe-area-inset-right) 0 var(--safe-area-inset-left); } -.is-phone.mod-publish .modal-button-container, -.is-phone.mod-sync-log .modal-button-container { - padding-bottom: calc(env(safe-area-inset-bottom) + var(--size-4-3)); +.is-phone .modal.mod-sidebar-layout .modal-content .vertical-tab-content { + padding-top: calc(var(--modal-header-height) + var(--size-4-4)); +} +.is-phone .modal.mod-sidebar-layout .modal-content .vertical-tab-header { + padding-top: calc(var(--modal-header-height) + var(--size-4-2)); +} +.is-phone .error-container { + height: 100%; + justify-content: center; } .mobile-navbar { background-color: var(--background-primary); - padding: 0 max(var(--safe-area-inset-right), var(--size-4-4)) 0 max(var(--safe-area-inset-left), var(--size-4-4)); - position: absolute; + position: fixed; + bottom: 0; + width: var(--navbar-width); + max-width: var(--navbar-max-width); + height: var(--navbar-height); + display: flex; + margin: 0 auto; left: 0; right: 0; - bottom: 0; + padding: 0 var(--size-4-2); + border-radius: var(--navbar-radius); + margin-bottom: calc(var(--safe-area-inset-bottom) - var(--keyboard-height) - 2px); + transition: margin-bottom 0.3s ease-in-out, opacity 0.3s ease-in-out, transform 0.2s ease-out; } body.is-tablet .mobile-navbar { display: none; } +.is-hidden-nav .mobile-navbar { + transition: margin-bottom 0.3s ease-in-out, opacity 0.3s ease-in-out, transform 0.2s ease-out; + transform: translateY(calc(var(--navbar-height) + var(--safe-area-inset-bottom))); + opacity: 0; +} .mobile-navbar-text { font-size: var(--font-ui-small); - padding: var(--size-4-1) 0; + padding: 0; white-space: nowrap; text-overflow: clip; width: 100%; -webkit-mask-image: linear-gradient(to left, rgba(0, 0, 0, 0) var(--size-4-4), #000000 var(--size-4-8)); } .mobile-navbar-actions { - --icon-size: var(--icon-l); + --icon-size: 26px; --icon-stroke: var(--icon-l-stroke-width); - --icon-color: var(--interactive-accent); - --icon-color-hover: var(--interactive-accent); - --icon-color-active: var(--interactive-accent-hover); - --icon-color-focus: var(--interactive-accent-hover); + --icon-color: var(--text-normal); + --icon-color-hover: var(--text-normal); + --icon-color-active: var(--text-normal); + --icon-color-focus: var(--text-normal); display: flex; align-items: center; justify-content: space-between; - padding: var(--size-4-2) 0 max(var(--size-4-2), var(--safe-area-inset-bottom)) 0; + padding: 0; + width: 100%; +} +.mobile-navbar-action { + flex-grow: 1; + width: var(--navbar-height); + transition: opacity 0.1s ease-in-out; + height: 100%; +} +.mobile-navbar-action.mobile-tap { + opacity: var(--icon-opacity-hover); +} +.mobile-navbar-action .clickable-icon, +.mobile-navbar-action button { + width: 100%; + display: flex; + justify-content: center; + align-items: center; + height: 100%; + border-radius: var(--touch-size-l); } -.mobile-navbar-tabs-action { +.mobile-navbar-action-tabs { + position: relative; +} +.mobile-navbar-action-tabs .mobile-navbar-tabs-number { + position: absolute; align-items: center; - border-radius: var(--clickable-icon-radius); - border: 2px solid var(--icon-color); display: flex; - font-size: calc(var(--icon-size) * 0.6); + opacity: var(--icon-opacity); + font-size: calc(var(--icon-size) * 0.55); font-weight: var(--bold-weight); justify-content: center; - height: 20px; + text-align: center; + height: 100%; width: var(--icon-size); + top: 0; + bottom: 0; + margin: auto; +} +@media (hover: hover) { + .mobile-navbar-action-tabs:hover .mobile-navbar-tabs-number { + opacity: var(--icon-opacity-hover); + } } .mobile-navbar-action.has-longpress-menu { position: relative; + margin-inline-start: var(--size-4-2); } .mobile-navbar-action.has-longpress-menu .navbar-action-flair { --icon-size: 12px; --icon-stroke: 3px; - color: var(--interactive-accent); + opacity: var(--icon-opacity); + color: var(--text-faint); position: absolute; - left: -6px; + left: 0; + right: 0; top: 0; + margin: 0 auto; height: 100%; align-items: center; display: flex; + width: fit-content; + transform: translateX(calc(var(--icon-size) * -1 - 6px)); } .is-phone .notice-container { padding: 0; + bottom: auto; top: max(var(--size-4-1),var(--safe-area-inset-top)); left: 0; right: 0; - max-width: 96%; - margin: 0 auto; + max-width: 100%; + margin: 0 auto 48px; + display: flex; + width: 100%; + flex-direction: column-reverse; + padding-right: max(var(--size-4-3), var(--safe-area-inset-right)); + padding-left: max(var(--size-4-3), var(--safe-area-inset-left)); + gap: var(--size-4-1); } .is-phone .notice { - background-color: var(--interactive-accent); - color: var(--text-on-accent); - margin: 0 auto var(--size-4-1); - text-align: center; - border-radius: 30px; - max-width: none; + border-radius: var(--touch-radius-xxs); + margin: 0 auto; + max-width: 100%; + width: 100%; box-shadow: none; + font-weight: var(--font-medium); + font-size: var(--font-ui-smaller); + border: var(--border-width) solid var(--background-modifier-border); + padding: 1em 1.5em; + flex-direction: row; + align-items: center; + justify-content: space-between; } .is-mobile .prompt { + --prompt-top: calc(var(--safe-area-inset-top) + var(--header-height) + var(--size-4-4)); + top: var(--prompt-top); + max-height: min(var(--prompt-max-height), calc(100vh - var(--prompt-top) - var(--safe-area-inset-bottom))); border: none; + border-radius: var(--touch-radius-xxs); + background-color: color-mix(in srgb, var(--prompt-background) var(--blur-translucency-m), transparent); } -.theme-dark.is-mobile .prompt { - background-color: var(--background-secondary); -} -.theme-dark.is-mobile .prompt input.prompt-input { - background-color: var(--background-secondary); +.is-mobile .prompt-input-cta { + --icon-color: var(--text-muted); + --icon-size: var(--icon-l); + --icon-stroke: var(--icon-l-stroke-width); + position: absolute; + top: 0; + bottom: 0px; + inset-inline-end: var(--size-4-10); + line-height: 0; + display: flex; + align-items: center; + height: var(--input-height); + margin: auto; + padding: 0 var(--size-4-3); + justify-content: center; + flex: 0 1 auto; } .is-mobile .prompt-input[type=text] { padding: var(--size-4-4); } +.is-ios.is-tablet .prompt { + transform: translateZ(0); +} .is-phone .prompt { - position: relative; margin: 0 auto; width: calc(100% - var(--safe-area-inset-left) - var(--safe-area-inset-right)); + border-radius: var(--touch-radius-xs) var(--touch-radius-xs) 0 0; + min-width: unset; + padding-bottom: var(--safe-area-inset-bottom); + max-height: 100vh; + height: calc(100vh - var(--prompt-top)); + box-shadow: var(--shadow-s); } .is-phone .prompt .suggestion-hotkey { display: none; } -.is-phone .prompt { - --mobile-height: 100vh; - --prompt-bottom: 0px; - --prompt-top: calc(var(--safe-area-inset-top) + var(--header-height) + var(--size-4-2)); - border-radius: var(--radius-l) var(--radius-l) 0 0; - min-width: unset; - margin-bottom: var(--prompt-bottom); - margin-top: var(--prompt-top); - box-shadow: none; - top: 0; - height: calc(var(--mobile-height) - var(--prompt-top) - var(--prompt-bottom)); -} .is-phone .prompt-input-container { - border-bottom: var(--border-width) solid var(--background-modifier-border); + order: 3; + padding: 0; + width: calc(100% - var(--size-4-4)); + margin: auto auto var(--size-4-2); + border-radius: var(--touch-size-m); } .is-phone .prompt-input[type=text] { - border: none; -} -.is-phone .prompt-input-cta { - --icon-color: var(--interactive-accent); - display: flex; - align-items: center; - padding: 0 var(--size-4-3); - flex: 0 1 auto; + border: var(--border-width) solid var(--background-modifier-border); + padding-inline-end: var(--size-4-12); + border-radius: var(--touch-size-m); } .is-phone .prompt-instructions { display: none; } .pull-action { position: absolute; - background-color: var(--background-secondary); + background-color: var(--background-primary); z-index: var(--layer-popover); color: var(--text-muted); - font-size: 90%; + font-size: var(--font-ui-small); transition: background-color ease-in-out 150ms; } .pull-action.mod-activated { - background-color: var(--interactive-accent); - color: var(--text-on-accent); + color: var(--text-accent); } .pull-down-action { top: 0; left: 0; right: 0; - width: 96%; - max-width: 500px; - margin: var(--safe-area-inset-top) auto 0 auto; - padding: var(--size-4-3) var(--size-4-4); + width: 100%; + margin: 0 auto 0 auto; + background: linear-gradient(to bottom, color-mix(in srgb, var(--background-primary) 90%, transparent) 40%, transparent 100%); + padding: calc(var(--safe-area-inset-top) + var(--size-4-3)) var(--size-4-6) var(--size-4-16); text-align: center; - border-radius: 40px; } .pull-out-action { top: 50%; @@ -14437,35 +19775,57 @@ body.is-tablet .mobile-navbar { border-radius: 40px; margin: 0 var(--size-4-4); } +.is-phone { + --toolbar-option-width: 40px; +} +.is-tablet { + --toolbar-option-width: 50px; +} .mobile-toolbar { -webkit-app-region: drag; flex: 0 0 auto; + position: absolute; width: 100%; - overflow-y: hidden; - background-color: var(--background-primary); - bottom: 0; + box-shadow: 0 0 8px var(--background-primary); + top: calc(100vh - var(--keyboard-height) - var(--mobile-toolbar-height)); + padding-left: var(--safe-area-inset-left); + padding-bottom: var(--safe-area-inset-bottom); + padding-right: var(--safe-area-inset-right); + background-color: transparent; z-index: var(--layer-menu); } -.is-tablet.is-ios .mobile-toolbar { - padding-bottom: 16px; +.mobile-toolbar-spacer { + background-color: var(--background-primary); + height: var(--mobile-toolbar-height); + display: flex; + width: 100%; } .mobile-toolbar-options-container { - --scroll-fade-offset-right: 50px; + --icon-size: var(--icon-l); + --icon-stroke: var(--icon-l-stroke-width); + --scroll-fade-offset-right: var(--toolbar-option-width); position: relative; - height: var(--mobile-toolbar-height); + gap: var(--size-4-2); + margin: 0 auto; + width: calc(100% - var(--size-4-4)); display: flex; - width: 100%; + justify-content: center; +} +.mobile-toolbar-options-list-container { + border-radius: var(--touch-size-m); + overflow: hidden; } .mobile-toolbar-options-list { display: flex; width: 100%; overflow-x: auto; overflow-y: hidden; - padding: 0 10px; + background-color: var(--touch-background); + border-radius: var(--touch-size-m); + padding: 0 var(--size-4-1); + height: var(--touch-size-m); scrollbar-width: none !important; /* Firefox */ - -ms-overflow-style: none !important; - /* Internet Explorer 10+ */ } .mobile-toolbar-options-list::-webkit-scrollbar { width: 0 !important; @@ -14473,38 +19833,297 @@ body.is-tablet .mobile-navbar { } .mobile-toolbar-floating-options { display: flex; + height: var(--touch-size-m); + width: var(--touch-size-m); + min-width: var(--touch-size-m); + justify-content: center; + border-radius: var(--touch-size-m); + background-color: var(--touch-background); } .mobile-toolbar-floating-options .mobile-toolbar-option { - min-width: 50px; - color: var(--text-accent); + min-width: var(--toolbar-option-width); + color: var(--text-normal); } .mobile-toolbar-option { display: flex; font-size: var(--font-ui-medium); - color: var(--text-muted); + color: var(--text-normal); font-family: var(--font-monospace); justify-content: center; align-items: center; - min-width: 50px; - position: relative; + min-width: var(--toolbar-option-width); +} +.mobile-tab-switcher { + background-color: var(--tab-switcher-background); + position: absolute; + display: flex; + flex-direction: column; + height: 100vh; + width: 100vw; + top: 0; + bottom: 0; left: 0; - transition: left 200ms ease-in-out; + right: 0; + z-index: var(--layer-modal); +} +.mobile-tab-switcher-scroll { + padding-top: var(--safe-area-inset-top); + padding-bottom: calc(var(--size-4-12) + var(--safe-area-inset-bottom)); + background-color: var(--tab-switcher-background); + display: flex; + flex-direction: column; + height: 100%; + width: 100%; + overflow-y: auto; + mask: var(--view-bottom-fade-mask); +} +.mobile-tab-switcher-inner-scroll { + flex: 1 0 auto; + min-height: 100%; + display: flex; + flex-direction: column-reverse; +} +body.is-ios .mobile-tab-switcher-inner-scroll { + min-height: calc(100% + 1px); +} +.mobile-tab-switcher-menubar { + --icon-size: 26px; + --icon-stroke: var(--icon-l-stroke-width); + --icon-color: var(--text-normal); + --icon-color-hover: var(--text-normal); + --icon-color-active: var(--text-normal); + --icon-color-focus: var(--text-normal); + position: fixed; + width: 100%; + bottom: 0; + background: var(--tab-switcher-menubar-background); + display: flex; + align-items: center; + justify-content: space-between; + padding-top: var(--size-4-2); + padding-bottom: max(var(--size-4-2), var(--safe-area-inset-bottom)); + padding-left: max(var(--safe-area-inset-left), var(--size-4-4)); + padding-right: max(var(--safe-area-inset-right), var(--size-4-4)); + font-weight: var(--font-semibold); +} +.mobile-tab-switcher-menu-button { + display: flex; + align-items: center; + gap: var(--size-4-1); + transition: opacity 0.1s ease-in-out; +} +.mobile-tab-switcher-menu-button.mobile-tap { + opacity: var(--icon-opacity-hover); +} +.mobile-tab-switcher-menu-button-chevron { + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); + color: var(--text-faint); + display: flex; + align-items: center; +} +.mobile-tab-switcher-menu-spacer { + display: flex; + flex: 1 0 0; +} +.mobile-tab-switcher-menu-spacer:first-child { + justify-content: flex-start; +} +.mobile-tab-switcher-menu-spacer:last-child { + justify-content: flex-end; +} +.mobile-tab-switcher-search { + margin: var(--size-4-4); + margin-top: 50px; +} +.mobile-tab-group-container { + display: flex; + align-items: center; + align-content: flex-start; + gap: var(--size-4-4); + row-gap: var(--size-4-6); + justify-content: flex-start; + margin: var(--size-4-4); + flex-wrap: wrap; +} +.mobile-tab-wrapper { + display: flex; + flex-direction: column; + width: calc(50% - var(--size-4-2)); +} +.mobile-tab { + gap: var(--size-4-2); + flex-direction: column; + display: flex; + scroll-margin: var(--size-4-3); +} +.mobile-tab.is-active .mobile-tab-preview-empty, +.mobile-tab.is-active .mobile-tab-preview-embed { + box-shadow: var(--tab-switcher-preview-shadow-active); +} +.mobile-tab .mobile-tab-pin, +.mobile-tab .close-button { + --icon-size: var(--icon-m); + background-color: var(--background-primary-alt); + position: absolute; + top: var(--size-4-2); + inset-inline-end: var(--size-4-2); + width: 24px; + height: 24px; + display: flex; + align-items: center; + justify-content: center; + z-index: 2; + border-radius: var(--radius-xl); +} +.mobile-tab .mobile-tab-pin { + color: var(--interactive-accent); +} +.mobile-tab-footer { + display: flex; + gap: var(--size-4-1); +} +.mobile-tab-title { + font-size: var(--font-ui-smaller); + font-weight: var(--font-medium); + color: var(--text-normal); + text-overflow: ellipsis; + white-space: pre; + overflow: hidden; + unicode-bidi: plaintext; + text-align: center; +} +.mobile-tab-preview { + position: relative; + height: 200px; + background-color: var(--background-primary); + border-radius: var(--tab-switcher-preview-radius); +} +.mobile-tab-preview:before { + position: absolute; + content: ''; + width: 100%; + height: 100%; + display: block; + box-shadow: var(--tab-switcher-preview-background-shadow); + border-radius: var(--tab-switcher-preview-radius); +} +.mobile-tab-preview-empty { + --icon-size: var(--icon-xl); + --icon-stroke: var(--icon-xl-stroke-width); + z-index: 1; + position: absolute; + box-shadow: var(--tab-switcher-preview-shadow); + background-color: var(--background-primary); + color: var(--text-faint); + border-radius: var(--tab-switcher-preview-radius); + overflow: hidden; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; +} +.mobile-tab-preview-embed { + z-index: 1; + position: absolute; + box-shadow: var(--tab-switcher-preview-shadow); + background-color: var(--background-primary); + overflow: hidden; + height: 100%; + width: 100%; + object-fit: cover; + object-position: top left; + border-radius: var(--tab-switcher-preview-radius); + pointer-events: none; +} +.mobile-tab-preview-embed ::-webkit-scrollbar { + display: none; +} +.is-mobile .suggestion-container { + border-radius: calc(var(--touch-radius-xs) - var(--size-2-3)); + background-color: color-mix(in srgb, var(--suggestion-background) var(--blur-translucency-m), transparent); } .is-mobile .suggestion-item { padding: var(--size-4-2) var(--size-4-3); + border-radius: var(--touch-radius-xxs); } -.is-tablet.theme-dark .suggestion-container { - background-color: var(--background-secondary); +.is-mobile .suggestion-flair { + position: relative; + margin-inline-end: 6px; + inset-inline-start: 0; + top: 0; +} +.is-phone .suggestion-bg { + display: block; + z-index: var(--layer-modal); } .is-phone .suggestion-item.mod-group { border-radius: 0; } -.is-mobile .modal.mod-publish { - background-color: var(--modal-background); +.mod-fade { + --scroll-fade-offset-right: 0; + --scroll-fade-offset-left: 0; +} +.mod-fade:not(.mod-at-start):before { + content: ' '; + pointer-events: none; + position: absolute; + top: 0; + z-index: 1; + left: var(--scroll-fade-offset-left); + width: 30px; height: 100%; - margin: 0; - padding-top: var(--safe-area-inset-top); - width: 100vw; + background: linear-gradient(to right, var(--background-primary), transparent); +} +.mod-fade:not(.mod-at-end):after { + content: ' '; + position: absolute; + pointer-events: none; + top: 0; + right: var(--scroll-fade-offset-right); + width: 30px; + height: 100%; + background: linear-gradient(to right, transparent, var(--background-primary)); +} +.is-phone .mod-root .workspace-leaf-content[data-type="markdown"] .view-content { + mask-image: var(--view-top-fade-mask); +} +.is-phone .mod-root { + mask-image: var(--view-bottom-fade-mask); +} +.is-hidden-nav { + --view-top-fade-mask: linear-gradient(to bottom, rgba(0, 0, 0, var(--view-top-fade-opacity)) 0%, #000000 var(--safe-area-inset-top)); + --view-bottom-fade-mask: linear-gradient(to top, rgba(0, 0, 0, var(--view-bottom-fade-opacity)) 0%, #000000 1px); +} +.is-mobile .mod-raised { + background: var(--raised-background); + backdrop-filter: var(--raised-blur); + box-shadow: var(--raised-shadow); + background-clip: padding-box; + border: var(--raised-mask-border-width) solid transparent; +} +.is-ios { + --raised-mask-border-width: 0.5px; +} +.is-ios.theme-light { + --shadow-edges: inset 1px 1px 2px rgba(255, 255, 255, 0.5), inset -1px -1px 2px rgba(255, 255, 255, 0.5), inset 0 4px 16px rgba(255, 255, 255, 0.025); +} +.is-ios.theme-dark { + --shadow-edges: inset 0px 0 0 0.5px rgba(255, 255, 255, 0.065); +} +.is-ios .mod-raised:after { + position: absolute; + content: ""; + backdrop-filter: brightness(var(--blur-brightness)); + background: var(--raised-mask-background); + mask: var(--raised-mask); + mask-composite: var(--raised-mask-composite); + inset: 0; + border: var(--raised-mask-border-width) solid transparent; + border-radius: inherit; + pointer-events: none; + z-index: 1; } .is-mobile .publish-changes-info-publishing-to { display: none; @@ -14534,9 +20153,10 @@ body.is-tablet .mobile-navbar { .is-mobile .sync-history-list { padding-left: max(var(--size-4-5), var(--safe-area-inset-left)); padding-right: max(var(--size-4-5), var(--safe-area-inset-right)); + padding-bottom: max(var(--size-4-2), var(--safe-area-inset-bottom)); } .is-mobile .sync-history-list-item-header { - padding: var(--size-4-2) 0; + margin-bottom: 0; } .is-mobile .sync-history-list-item-details { padding: var(--size-4-1) var(--size-4-4); @@ -14548,19 +20168,44 @@ body.is-tablet .mobile-navbar { } .is-mobile .sync-history-content { flex: 1 1 auto; - padding: 10px; border-radius: 0; border: none; } -.is-phone .sync-log-container { +.is-phone .modal.mod-sync-log .modal-content { + margin-inline-start: 0; + margin-inline-end: 0; + padding-inline-start: 0; + padding-inline-end: 0; +} +.is-phone .modal.mod-sync-log .modal-content > .setting-item { + padding: var(--size-4-3); +} +.is-phone .modal.mod-sync-log .modal-content .sync-log-container { flex: 1 1 auto; + border: none; + border-radius: 0; +} +.is-phone .sync-history-list-item:not(:first-child) { + border-top: var(--border-width) solid var(--background-modifier-border); +} +.is-phone .sync-history-list-item-header { + margin: 0; + border-radius: 0; } .is-phone .modal.mod-sync-history .search-input-container { width: 100%; margin-bottom: 0; } .is-phone .sync-history-list-container { + border: none; background-color: var(--background-primary); + display: block; +} +.is-phone .sync-history-preview { + padding-bottom: max(var(--size-4-6), var(--safe-area-inset-bottom)); +} +.is-phone .sync-history-content .modal-setting-title { + display: none; } .is-phone .sync-history-content .setting-item { flex-direction: column; @@ -14572,13 +20217,20 @@ body.is-tablet .mobile-navbar { .is-phone .sync-history-content .setting-item-name { font-weight: var(--font-semibold); font-size: var(--font-ui-large); + white-space: normal; } .is-phone .sync-history-content .setting-item-control { - padding-right: 0; + padding-inline-end: 0; } .is-phone .sync-history-content .setting-item-control label { min-width: fit-content; } +.is-phone .sync-history-content .modal-setting-titlebar { + padding-inline-end: var(--size-4-4); +} +.is-phone .sync-vault-share-container .setting-item-control { + flex-direction: column; +} .mobile-vault-chooser { width: 100%; height: 100%; @@ -14590,6 +20242,7 @@ body.is-tablet .mobile-navbar { border-width: var(--border-width); } .mobile-vault-chooser-screen { + background-color: var(--background-primary); display: flex; flex-direction: column; position: absolute; @@ -14597,6 +20250,9 @@ body.is-tablet .mobile-navbar { top: 0; width: 100%; height: 100%; + padding-top: var(--safe-area-inset-top); + padding-left: var(--safe-area-inset-left); + padding-right: var(--safe-area-inset-right); } .mobile-vault-chooser-header { display: flex; @@ -14616,9 +20272,11 @@ body.is-tablet .mobile-navbar { padding: 20px; height: 100%; overflow-y: auto; + scrollbar-gutter: stable both-edges; max-width: 800px; width: 100%; margin: 0 auto; + padding-bottom: var(--safe-area-inset-bottom); } .mobile-vault-chooser-logo-container { margin: 40px 0; @@ -14653,11 +20311,15 @@ body.is-tablet .mobile-navbar { margin: -10px 0; } .mobile-vault-chooser-action { + border-radius: var(--radius-s); display: flex; padding: 14px 0; align-items: center; font-size: 18px; } +.mobile-vault-chooser-action.mobile-tap { + background-color: var(--background-modifier-hover); +} .mobile-vault-chooser-action-name { flex: 1 0 0; overflow: hidden; @@ -14691,4 +20353,24 @@ input.mobile-vault-chooser-field-input { font-size: var(--font-ui-medium); width: 100%; } +.mobile-vault-chooser-load-button button { + margin-top: var(--size-4-3); + width: 100%; +} +.mobile-vault-chooser-load-callout { + text-align: start; + background-color: var(--background-primary-alt); + border-radius: var(--radius-m); + padding: var(--size-4-4) var(--size-4-6); +} +.mobile-vault-chooser-load-callout .mobile-vault-chooser-callout-title { + color: var(--text-normal); + font-size: var(--font-ui-small); + font-weight: var(--font-medium); +} +.mobile-vault-chooser-load-callout p { + color: var(--text-muted); + font-size: var(--font-ui-smaller); + line-height: var(--line-height-normal); +} diff --git a/perlite/.styles/katex.min.css b/perlite/.styles/katex.min.css index 3d176abf..ea38eaec 100644 --- a/perlite/.styles/katex.min.css +++ b/perlite/.styles/katex.min.css @@ -1 +1 @@ -@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.22"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo} +@font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-display:block;font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.27"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo} diff --git a/perlite/.styles/perlite.css b/perlite/.styles/perlite.css index 4652a808..76e39424 100644 --- a/perlite/.styles/perlite.css +++ b/perlite/.styles/perlite.css @@ -7,7 +7,7 @@ .custom-page { text-align: center; - border-bottom: var(--divider-width) solid var(--divider-color); + /* border-bottom: var(--divider-width) solid var(--divider-color); */ } .custom-page-logo { @@ -56,7 +56,7 @@ /* fix graph canvas height */ #localGraph { - border: calc(0.5px + var(--divider-width)) solid var(--divider-color); + /* border: calc(0.5px + var(--divider-width)) solid var(--divider-color); */ height: 50%; } @@ -141,6 +141,10 @@ h1, h2, h3, h4 { } +.popover.hover-popover > * { + width: 100%; +} + span.cm-highlight { background-color: var(--text-highlight-bg); color: var(--text-normal); @@ -150,6 +154,48 @@ span.cm-highlight { margin-top: 30px; } + +/* Position and appearance of copy icon */ +.copy-icon { + cursor: pointer; + color: var(--text-tag); + font-size: 0.9em; + margin-left: 0.25em; + visibility: hidden; + text-decoration: none; + transition: color 0.2s ease, opacity 0.2s ease; +} + +/* Show icon only on hover */ +h1:hover .copy-icon, +h2:hover .copy-icon, +h3:hover .copy-icon, +h4:hover .copy-icon, +h5:hover .copy-icon, +h6:hover .copy-icon { + visibility: visible; +} + +/* Hover effect */ +.copy-icon:hover { + color: var(--text-accent); +} + +/* Temporary success state */ +.copy-icon.copied { + color: green; + visibility: visible; +} + + + + + + + + + + /* --------------- */ /* Mobile / Responive Settings */ diff --git a/perlite/.styles/public/fonts/01dcbad1bac635f9c9cd.woff2 b/perlite/.styles/public/fonts/01dcbad1bac635f9c9cd.woff2 new file mode 100644 index 00000000..b3530f3f Binary files /dev/null and b/perlite/.styles/public/fonts/01dcbad1bac635f9c9cd.woff2 differ diff --git a/perlite/.styles/public/fonts/2d5198822ab091ce4305.woff2 b/perlite/.styles/public/fonts/2d5198822ab091ce4305.woff2 deleted file mode 100644 index bc4be665..00000000 Binary files a/perlite/.styles/public/fonts/2d5198822ab091ce4305.woff2 and /dev/null differ diff --git a/perlite/.styles/public/fonts/4bb6ac751d1c5478ff3a.woff2 b/perlite/.styles/public/fonts/4bb6ac751d1c5478ff3a.woff2 new file mode 100644 index 00000000..a89cf4c0 Binary files /dev/null and b/perlite/.styles/public/fonts/4bb6ac751d1c5478ff3a.woff2 differ diff --git a/perlite/.styles/public/fonts/535a6cf662596b3bd6a6.woff2 b/perlite/.styles/public/fonts/535a6cf662596b3bd6a6.woff2 deleted file mode 100644 index 4a81dc79..00000000 Binary files a/perlite/.styles/public/fonts/535a6cf662596b3bd6a6.woff2 and /dev/null differ diff --git a/perlite/.styles/public/fonts/72505e6a122c6acd5471.woff2 b/perlite/.styles/public/fonts/72505e6a122c6acd5471.woff2 deleted file mode 100644 index f2ea706f..00000000 Binary files a/perlite/.styles/public/fonts/72505e6a122c6acd5471.woff2 and /dev/null differ diff --git a/perlite/.styles/public/fonts/853ff76f08786ae44ca0.woff b/perlite/.styles/public/fonts/853ff76f08786ae44ca0.woff deleted file mode 100644 index a1a0a4aa..00000000 Binary files a/perlite/.styles/public/fonts/853ff76f08786ae44ca0.woff and /dev/null differ diff --git a/perlite/.styles/public/fonts/94f2f163d4b698242fef.otf b/perlite/.styles/public/fonts/94f2f163d4b698242fef.otf deleted file mode 100644 index 263ae4c3..00000000 Binary files a/perlite/.styles/public/fonts/94f2f163d4b698242fef.otf and /dev/null differ diff --git a/perlite/.styles/public/fonts/b5f0f109bc88052d4000.woff2 b/perlite/.styles/public/fonts/b5f0f109bc88052d4000.woff2 deleted file mode 100644 index 611e90c9..00000000 Binary files a/perlite/.styles/public/fonts/b5f0f109bc88052d4000.woff2 and /dev/null differ diff --git a/perlite/.styles/public/fonts/c504db5c06caaf7cdfba.woff2 b/perlite/.styles/public/fonts/c504db5c06caaf7cdfba.woff2 new file mode 100644 index 00000000..5a8d3e72 Binary files /dev/null and b/perlite/.styles/public/fonts/c504db5c06caaf7cdfba.woff2 differ diff --git a/perlite/.styles/public/fonts/c8ba52b05a9ef10f4758.woff2 b/perlite/.styles/public/fonts/c8ba52b05a9ef10f4758.woff2 deleted file mode 100644 index 6c2b6893..00000000 Binary files a/perlite/.styles/public/fonts/c8ba52b05a9ef10f4758.woff2 and /dev/null differ diff --git a/perlite/.styles/public/fonts/cb10ffd7684cd9836a05.woff2 b/perlite/.styles/public/fonts/cb10ffd7684cd9836a05.woff2 deleted file mode 100644 index a619fc54..00000000 Binary files a/perlite/.styles/public/fonts/cb10ffd7684cd9836a05.woff2 and /dev/null differ diff --git a/perlite/.styles/public/fonts/cbe0ae49c52c920fd563.woff2 b/perlite/.styles/public/fonts/cbe0ae49c52c920fd563.woff2 deleted file mode 100644 index c24c2bdc..00000000 Binary files a/perlite/.styles/public/fonts/cbe0ae49c52c920fd563.woff2 and /dev/null differ diff --git a/perlite/.styles/public/images/2308ab1944a6bfa5c5b8.svg b/perlite/.styles/public/images/2308ab1944a6bfa5c5b8.svg new file mode 100644 index 00000000..c74b0bdd --- /dev/null +++ b/perlite/.styles/public/images/2308ab1944a6bfa5c5b8.svg @@ -0,0 +1 @@ + diff --git a/perlite/.styles/public/images/874d8b8e340f75575caa.svg b/perlite/.styles/public/images/6155340132a851f6089e.svg similarity index 100% rename from perlite/.styles/public/images/874d8b8e340f75575caa.svg rename to perlite/.styles/public/images/6155340132a851f6089e.svg diff --git a/perlite/Demo/Demo Documents/Callouts and Frontmatter.md b/perlite/Demo/Demo Documents/Callouts and Frontmatter.md index e9151c2a..6d6d1424 100644 --- a/perlite/Demo/Demo Documents/Callouts and Frontmatter.md +++ b/perlite/Demo/Demo Documents/Callouts and Frontmatter.md @@ -11,6 +11,8 @@ aliases: Im a YAML front matter document +[[#Collapsible(Callouts]] + # Blockquots @@ -61,7 +63,7 @@ Im a YAML front matter document > Lorem ipsum dolor sit amet -## Collapsible Callouts +## Collapsible(Callouts > [!note]+ Information the user should notice even if skimming. > Test diff --git a/perlite/Demo/Demo Documents/Links and Embedded.md b/perlite/Demo/Demo Documents/Links and Embedded.md index 2e8be1d4..babd74a5 100644 --- a/perlite/Demo/Demo Documents/Links and Embedded.md +++ b/perlite/Demo/Demo Documents/Links and Embedded.md @@ -6,6 +6,7 @@ Just a link: https://github.com/secure-77/Perlite [Link with custom Name](https://github.com/secure-77/Perlite) + # Files Link to another markdown file: [[Markdown Samples]] diff --git a/perlite/Dockerfile b/perlite/Dockerfile index 038bcf1f..7b46deeb 100644 --- a/perlite/Dockerfile +++ b/perlite/Dockerfile @@ -3,8 +3,6 @@ FROM php:fpm-alpine LABEL maintainer="sec77 https://github.com/secure-77/Perlite" RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" -ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/ -RUN chmod +x /usr/local/bin/install-php-extensions && install-php-extensions yaml WORKDIR /var/www/perlite/ COPY ./index.php ./ diff --git a/perlite/composer.json b/perlite/composer.json index 30c66678..03a74db8 100644 --- a/perlite/composer.json +++ b/perlite/composer.json @@ -1,7 +1,7 @@ { "name": "secure-77/perlite", "description": "A web based markdown viewer optimized for Obsidian Notes", - "version": "1.5.9", + "version": "1.6.1", "type": "project", "keywords": ["markdown viewer","obsidian notes"], "homepage": "https://github.com/secure-77/Perlite", diff --git a/perlite/content.php b/perlite/content.php index 6cb850e1..852018ba 100644 --- a/perlite/content.php +++ b/perlite/content.php @@ -1,7 +1,7 @@ setSafeMode($htmlSafeMode); - $Parsedown->setBreaksEnabled($lineBreaks); - $cleanFile = ''; - // call menu again to refresh the array menu($rootDir); $path = ''; - // get and parse the content, return if no content is there $content = getContent($requestFile); if ($content === '') { return; } - $wordCount = str_word_count($content); - $charCount = strlen($content); - $content = $Parsedown->text($content); - // Relative or absolute pathes - if ($relPathes) { + if ($absolutePath) { $path = $startDir; - $mdpath = ''; } else { - $mdpath = $path; $path = $startDir . $path; } - // fix links (not used) - // $oldPath = $startDir . $path; - - // // fix relativ links in parent folders - // $pattern = array('/(\[\[)(\.\.\/.*)(\]\])/'); - // $content = fixLinks($pattern, $content, $oldPath, false); - - // // // fix relativ links in same folders - // $pattern = array('/(\[\[)+([^\/]+?)(\]\])/'); - // $content = fixLinks($pattern, $content, $path, true); - - // // fix relativ links in subfolder and same folders - // $pattern = array('/(\[\[)(?!Demo Documents\/)(.+)(\]\])/'); - // $content = fixLinks($pattern, $content, $path, true); - - - $linkFileTypes = implode('|', $allowedFileLinkTypes); - - $allowedImageTypes = '(\.png|\.jpg|\.jpeg|\.svg|\.gif|\.bmp|\.tif|\.tiff|\.webp)'; - - $src_path = $uriPath . $path; - - // embedded pdf links - $replaces = ''; - $pattern = array('/(\!\[\[)(.*?.(?:pdf))(\]\])/'); - $content = preg_replace($pattern, $replaces, $content); - - // embedded mp4 links - $replaces = ' - '; - $pattern = array('/(\!\[\[)(.*?.(?:mp4))(\]\])/'); - $content = preg_replace($pattern, $replaces, $content); - - - // embedded m4a links - $replaces = ' - '; - $pattern = array('/(\!\[\[)(.*?.(?:m4a))(\]\])/'); - $content = preg_replace($pattern, $replaces, $content); - // links to other files with Alias - $replaces = '\\3'; - $pattern = array('/(\[\[)(.*?.(?:' . $linkFileTypes . '))\|(.*)(\]\])/'); - $content = preg_replace($pattern, $replaces, $content); - - // links to other files without Alias - $replaces = '\\2'; - $pattern = array('/(\[\[)(.*?.(?:' . $linkFileTypes . '))(\]\])/'); - $content = preg_replace($pattern, $replaces, $content); - - // img links with external target link - $replaces = 'noreferrer">image not found'; - $pattern = array('/noreferrer">(\!?\[\[)(.*?)' . $allowedImageTypes . '\|?(\d*)x?(\d*)(\]\])/'); - $content = preg_replace($pattern, $replaces, $content); - - // img links with size - $replaces = '

    image not found

    '; - $pattern = array('/(\!?\[\[)(.*?)' . $allowedImageTypes . '\|?(\d*)x?(\d*)(\]\])/'); - $content = preg_replace($pattern, $replaces, $content); - - // centerise or right align images with "center"/"right" directive - $pattern = '/(\!?\[\[)(.*?)' . $allowedImageTypes . '\|?(center|right)\|?(\d*)x?(\d*)(\]\])/'; - $replaces = function ($matches) use ($src_path) { - $class = "images"; // Default class for all images - if (strpos($matches[4], 'center') !== false) { - $class .= " center"; // Add 'center' class - } elseif (strpos($matches[4], 'right') !== false) { - $class .= " right"; // Add 'right' class - } - $width = $matches[5] ?? 'auto'; - $height = $matches[6] ?? 'auto'; - return '

    '; - }; - $content = preg_replace_callback($pattern, $replaces, $content); - - // img links with captions and size - $replaces = '

    \\4

    '; - $pattern = array('/(\!?\[\[)(.*?)' . $allowedImageTypes . '\|?(.+\|)\|?(\d*)x?(\d*)(\]\])/'); - $content = preg_replace($pattern, $replaces, $content); - - // img links with captions - $replaces = '

    \\4

    '; - $pattern = array('/(\!?\[\[)(.*?)' . $allowedImageTypes . '\|?(.+|)(\]\])/'); - $content = preg_replace($pattern, $replaces, $content); - + $Parsedown = new PerliteParsedown($path, $uriPath,$niceLinks, $allowedFileLinkTypes); + $Parsedown->setSafeMode($htmlSafeMode); + $Parsedown->setBreaksEnabled($lineBreaks); + - // handle internal site links - // search for links outside of the current folder - $pattern = array('/(\[\[)(?:\.\.\/)+(.*?)(\]\])/'); - $content = translateLink($pattern, $content, $path, false); - // search for links in the same folder - $pattern = array('/(\[\[)(.*?)(\]\])/'); - $content = translateLink($pattern, $content, $mdpath, true); + $wordCount = str_word_count($content); + $charCount = strlen($content); + $content = $Parsedown->text($content); // add some meta data @@ -204,6 +105,7 @@ function parseContent($requestFile)
    ' . $wordCount . '
    ' . $charCount . '
    ' . $content; + $cleanFile = ''; echo $content; return; @@ -211,163 +113,6 @@ function parseContent($requestFile) } -// translate relativ links (not used) -// function fixLinks($pattern, $content, $path, $sameFolder) { - -// return preg_replace_callback($pattern, -// function($matches) use ($path, $sameFolder) { - -// $newAbPath = $path; -// echo "path: " . $path; -// echo "
    "; -// $pathSplit = explode("/",$path); -// $linkFilePart = $matches[2]; -// $esapeSequence = "#regex_run#"; -// echo '$matches[1]: ' . $matches[1]; -// echo '
    '; -// echo '$matches[2]: ' . $linkFilePart; -// echo '
    '; - -// $linkDesc = ""; - -// # handle custom link comments and sizes -// $splitLink = explode("|", $matches[2]); -// if (count($splitLink) > 1) { -// $linkFilePart = $splitLink[0]; -// array_shift($splitLink); -// $linkDesc = '|' .implode("|", $splitLink); -// } - - -// // do extra stuff to get the absolute path -// if ($sameFolder == false) { -// $countDirs = count(explode("../",$linkFilePart)); -// $countDirs = $countDirs -1; -// $newPath = array_splice($pathSplit, 1, -$countDirs); -// $newAbPath = implode('/', $newPath); -// echo "new file path: " . $newAbPath; -// echo "
    "; -// echo "old file path: " . $linkFilePart; -// echo "
    "; -// } - -// if (substr($newAbPath,0,1) == '/') { -// $newAbPath = substr($newAbPath,1); -// } - - -// $origPath = explode('/', $linkFilePart); -// array_pop($origPath); -// $origPath = implode('/', $origPath); -// //check if its already an absolut path -// echo "new file path: " . $newAbPath; -// echo "
    "; -// echo "old file path: " . $origPath; -// echo "
    "; - - -// if (count_chars($origPath) >= count_chars($newAbPath)) { - -// $urlPath = $linkFilePart; - -// } else { - -// $linkFile = str_replace("../","",$linkFilePart); -// $urlPath = $newAbPath. '/'. $linkFile; -// } - - -// return '[['.$urlPath.$linkDesc.']]'; -// } -// ,$content); -// } - - - -//internal links -// can be simplified (no need of path translation) -function translateLink($pattern, $content, $path, $sameFolder) -{ - - return preg_replace_callback( - $pattern, - function ($matches) use ($path, $sameFolder) { - - - global $uriPath; - $newAbPath = $path; - $pathSplit = explode("/", $path); - $linkName_full = $matches[2]; - $linkName = $linkName_full; - $linkFile = $matches[2]; - - # handle custom internal obsidian links - $splitLink = explode("|", $matches[2]); - if (count($splitLink) > 1) { - - $linkFile = $splitLink[0]; - $linkName = $splitLink[1]; - } - - # handle internal popups - $popupClass = ''; - $popUpIcon = ''; - - if (count($splitLink) > 2) { - - $popupClass = ' internal-popup'; - $popUpIcon = ''; - } - - - // do extra stuff to get the absolute path - if ($sameFolder == false) { - $countDirs = count(explode("../", $matches[0])); - $countDirs = $countDirs - 1; - $newPath = array_splice($pathSplit, 1, -$countDirs); - $newAbPath = implode('/', $newPath); - } - - - $urlPath = $newAbPath . '/' . $linkFile; - if (substr($urlPath, 0, 1) == '/') { - #$urlPath = '/' . $urlPath; - $urlPath = substr($urlPath, 1); - } - - $refName = ''; - - # if same document heading reference - if (substr($linkName_full, 0, 1) == '#') { - - $splitLink = explode("#", $urlPath); - $urlPath = ''; - $refName = $splitLink[1]; - $refName = '#' . $refName; - $href = 'href="'; - } else { - #$href = 'href="?link='; - $href = 'href="' . $uriPath; - } - - $urlPath = str_replace('&', '&', $urlPath); - - #$urlPath = rawurlencode($urlPath); - $urlPath = str_replace('%23', '#', $urlPath); - - $urlPath = str_replace('~', '%80', $urlPath); - $urlPath = str_replace('-', '~', $urlPath); - $urlPath = str_replace(' ', '-', $urlPath); - - - return '' . $linkName . '' . $popUpIcon; - } - , - $content - ); -} - - // read content from file function getContent($requestFile) { diff --git a/perlite/helper.php b/perlite/helper.php index 170091d1..a619018f 100644 --- a/perlite/helper.php +++ b/perlite/helper.php @@ -1,7 +1,7 @@ - - - '; - } - } - - return $html; + // Iterate the files + foreach ($files as $file) { + if (isMDFile($file)) { + $pathInfo = getFileInfos($file); + $relativePathForURL = $pathInfo[0]; + $baseFilenameWithoutExtension = $pathInfo[1]; + + $displayTitle = ""; + + if ($useZettelkastenFilenames) { + $displayTitle = getDisplayTitle($file); + } else { + $displayTitle = $baseFilenameWithoutExtension; + } + + $urlClickPath = '/' . $relativePathForURL; + array_push($avFiles, $urlClickPath); + $pathCleanForJS = rawurlencode($urlClickPath); + + // Create a unique ID for the HTML element + $elementId = 'fileid-' . preg_replace('/[^A-Za-z0-9\-_]/', '_', $urlClickPath); + $elementId = str_replace('/', '_', $elementId); // Replace slashes for cleaner ID + + $html .= ' + + '; + } + } + return $html; } function doSearch($dir, $searchfor) @@ -448,6 +468,37 @@ function isCached($jsonMetadaFile, $metadaTempFileSum) return false; } +function getDisplayTitle($filePath) { + $content = @file_get_contents($filePath); + if ($content === false) { + // Fallback to filename if file can't be read + return getFileInfos($filePath)[1]; + } + + // 1. Try to get title from frontmatter + if (preg_match('/^---\s*\n(.*?)\n---\s*\n/s', $content, $frontmatterMatches)) { + $frontmatterRaw = $frontmatterMatches[1]; + if (preg_match('/^title:\s*(.*?)\s*$/im', $frontmatterRaw, $titleMatches)) { + $title = trim($titleMatches[1]); + $title = trim($title, "'\""); + if (!empty($title)) { + return $title; + } + } + } + + // 2. Try to get the first H1 heading + if (preg_match('/^#\s+(.*?)\s*$/m', $content, $h1Matches)) { + $h1Title = trim($h1Matches[1]); + if (!empty($h1Title)) { + return $h1Title; + } + } + + // 3. Fallback to filename (obtained via getFileInfos) + return getFileInfos($filePath)[1]; +} + function getfullGraph($rootDir) { @@ -668,6 +719,7 @@ function loadSettings($rootDir) global $siteName; global $siteTwitter; global $uriPath; + global $highlightJSLangs; // get themes @@ -700,18 +752,29 @@ function loadSettings($rootDir) if ($defaultTheme === $folderName) { - $themes .= ''; + $themes .= ' + '; } else { - $themes .= ''; + $themes .= ' + '; } } } + // default settings + $defaultSettings = ''; + $defaultSettings .= ''; + $defaultSettings .= ''; + $defaultSettings .= ''; + $defaultSettings .= ''; + // Meta Tags - $defaultSettings = - ' + $defaultSettings .= + ' + + @@ -722,16 +785,17 @@ function loadSettings($rootDir) - - '; - // default settings - $defaultSettings .= ''; - $defaultSettings .= ''; - $defaultSettings .= ''; - $defaultSettings .= ''; + // highlight.js languages + //$highlightLangs = explode(',', $highlightJSLangs); + + foreach ($highlightJSLangs as $lang) { + $defaultSettings .= ' + '; + } + return $themes . $defaultSettings; } diff --git a/perlite/index.php b/perlite/index.php index 8570cf1e..3acad70f 100644 --- a/perlite/index.php +++ b/perlite/index.php @@ -30,8 +30,12 @@ - + + + + + @@ -39,632 +43,602 @@ - + - - + + - - <?php echo $title ?> - - -
    -
    -
    - -
    + class="theme-dark mod-windows is-frameless is-hidden-frameless obsidian-app styled-scrollbars show-ribbon show-view-header is-maximized is-focused show-inline-title" + style="--zoom-factor:1; --font-text-size: px;"> + + <?php echo $title ?> + + +
    +
    +
    +
    - -
    -
    -
    -
    - - - -
    -
    - - - - - -
    -
    -
    -
    - - - - - - -
    +
    + +
    +
    +
    +
    + + + +
    +
    + + + + + +
    +
    +
    +
    + + + + + +
    -
    -
    - - - - - - - - -
    +
    +
    +
    + + + + + + + +
    -
    -
    - - - - - -
    -
    - - - -
    +
    +
    +
    + + + + + + +
    +
    + + + +
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - - - -
    -
    Files
    -
    -
    - - -
    -
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + +
    +
    Files
    +
    +
    + + +
    -
    -
    -
    - - -
    -
    Search
    -
    -
    - - -
    -
    +
    +
    +
    +
    + + +
    +
    Search
    +
    +
    + + +
    -
    - - -
    -
    -
    - -
    -
    -
    -
    -
    -
    - - - - - - +
    +
    + + +
    +
    +
    + +
    +
    +
    +
    +
    +
    + + + + +